------------UAMIZgc77nT2aFBV02afBr
Content-Disposition: inline; filename=M90zN-diZQ9.css
Content-Type: text/css; charset=utf-8; name=M90zN-diZQ9.css
Content-Location: http://static.ak.fbcdn.net/rsrc.php/v1/yB/r/M90zN-diZQ9.css
Content-Transfer-Encoding: 8bit
/*1313997602,176833974*/
.async_throbber .async_saving{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/yb/r/GsNJNwuI-UM.gif) no-repeat right;padding-right:20px}
.async_throbber_left .async_saving{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/yb/r/GsNJNwuI-UM.gif) no-repeat left;padding-left:20px}
#blueBar{background-color:#3b5998;height:41px;left:0;position:absolute;width:100%;z-index:-1}
#globalContainer{margin:0 auto}
.fbx #globalContainer{width:981px}
.fbx #tab_canvas > div{padding-top:0}
.fb_content{padding-bottom:20px}
.fbx .fb_content{padding-bottom:0}
.fbx #globalContainer #content{min-height:inherit}
#mainContainer{margin-left:-1px;display:block;width:100%}
.hasLeftCol #mainContainer{border-right:1px solid #b3b3b3}
#leftCol{display:none;float:left;padding:20px 0 0 2px;width:179px;word-wrap:break-word}
.hasLeftCol #leftCol{display:block}
#rightCol{margin-top:-10000px;float:right;padding-right:0;width:244px;word-wrap:break-word}
.hasRightCol #rightCol{margin-top:0}
.hasLeftCol #rightCol{padding-right:20px}
#contentCol{background-color:#fff;padding-top:15px}
.hasLeftCol #contentCol{border-left:1px solid #b3b3b3;margin-left:181px}
#headerArea{margin-bottom:5px;padding:2px 0 12px}
.hasLeftCol #headerArea{float:left;margin:0 20px 0;width:759px}
#contentArea{margin-right:-1px;padding-left:1px;word-wrap:break-word}
.hasLeftCol #contentArea,.hasRightCol #contentArea{float:left;margin-right:0}
.hasLeftCol #contentArea{padding:0 20px;width:759px}
.hasRightCol #contentArea{width:714px}
.hasLeftCol .hasRightCol #contentArea{padding-right:0;width:493px}
#bottomContent{clear:both;padding:0 20px 12px}
.photosCroppedThumbHighlighted{background-color:#edeff4;border-color:#3b5998}
.fbPhotoInlineCaptionEditor .editIcon{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/y4/r/ffUJLIqlYCk.gif) no-repeat -18px 0;height:18px;width:18px}
.fbPhotoInlineCaptionEditor .editIcon:hover{background-position:0 0}
.fbPhotoInlineCaptionEditor .captionWrapper{margin-right:18px}
.fbPhotoInlineCaptionEditorEditMode .captionWrapper{margin-right:0}
.fbPhotoInlineCaptionEditor .editForm,
.fbPhotoInlineCaptionEditorEditMode .fbPhotoCaption,
.fbPhotoInlineCaptionEditorEditMode .noCaption,
.fbPhotoInlineCaptionEditorEditMode .editIcon{display:none}
.fbPhotoInlineCaptionEditorEditMode .editForm{display:block;margin:0;padding:0;text-align:right}
.fbPhotoInlineCaptionEditor textarea{width:429px;font-size: 11px;line-height:13px;margin:0 0 2px 0;padding:0}
.fbPhotoInlineCaptionEditor .uiMentionsInput .highlighter{font-size: 11px;overflow:hidden;padding:4px 4px 0 4px;left:2px;top:2px;width:392px}
.fbPhotoInlineCaptionEditor .mentionsTypeahead{margin-bottom:5px}
.fbPhotoInlineCaptionEditor .mentionsTypeahead .wrap{padding:5px}
.fbPhotoInlineCaptionEditor .uiTypeahead .innerWrap{overflow:visible}
.fbPhotoInlineCaptionEditor .uiMentionsInput .highlighter div{line-height:13px;white-space:pre-wrap;text-align:left}
.fbPhotosTaglist .caption + .tagItem .separator{display:none}
.fbPhotosTagRequests{position:absolute;bottom:12px;right:10px;line-height:28px;z-index:2}
.fbPhotosTagRequests .textRow{background:none repeat scroll 0 0 #000;color:#b3b3b3;display:block;float:right;padding-left:5px}
.pop_container_advanced{background:rgba(82,82,82,0.7);border-radius:8px;padding:10px}
.pop_content_old{position:relative}
.pop_container{direction:ltr;position:relative;top:10px}
.pop_topleft,.pop_topright,.pop_bottomleft,.pop_bottomright{height:10px;width:10px;overflow:hidden;position:absolute}
.pop_topleft{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yh/r/exdyUfVOjrJ.png);background-repeat:no-repeat;background-position:-77px -169px;left:-10px;top:-10px}
.pop_topright{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yh/r/exdyUfVOjrJ.png);background-repeat:no-repeat;background-position:-66px -169px;right:-10px;top:-10px}
.pop_bottomleft{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yh/r/exdyUfVOjrJ.png);background-repeat:no-repeat;background-position:-99px -169px;bottom:-10px;left:-10px}
.pop_bottomright{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yh/r/exdyUfVOjrJ.png);background-repeat:no-repeat;background-position:-88px -169px;right:-10px;bottom:-10px}
.pop_verticalslab,.pop_horizontalslab{width:100%;height:100%;position:absolute;background:#525252;opacity:.7}
.pop_verticalslab{margin:-10px 0 0;padding-bottom:20px}
.pop_horizontalslab{margin:0 0 0 -10px;padding-right:20px}
.generic_dialog{height:0;left:0;overflow:visible;outline:none;position:absolute;top:0;width:100%;z-index:200}
.generic_dialog_fixed{position:fixed}
.generic_dialog_fixed_overflow{background-color:rgba(252, 252, 252, .9);bottom:0;height:auto;left:0;overflow-x:auto;overflow-y:scroll;right:0;top:0;width:auto}
.generic_dialog_fixed_overflow .generic_dialog_popup{height:auto;padding-bottom:40px}
body.generic_dialog_overflow_mode{overflow:hidden}
.generic_dialog_popup{height:0;overflow:visible;position:relative;width:465px;margin:auto}
.generic_dialog div.dialog_loading{background-color:#f2f2f2;border:1px solid #606060;font-size: 24px;padding:10px}
.generic_dialog .overlay{background-color:#fff;height:100%;left:0;opacity:.8;position:fixed;top:0;width:100%}
.pop_content{direction:ltr}
.pop_dialog_rtl .pop_content{direction:rtl}
.pop_content h2.dialog_title{background:#6d84b4;border:1px solid #3b5998;border-bottom:none;color:#fff;font-size: 14px;font-weight:bold;margin:0}
.pop_content h2.secure{background:#6d84b4 url(http://static.ak.fbcdn.net/rsrc.php/v1/yu/r/jp8TzrZb6J1.png) 98% no-repeat}
.pop_content h2.loading{background:#6d84b4 url(http://static.ak.fbcdn.net/rsrc.php/v1/y-/r/AGUNXgX_Wx3.gif) 98% no-repeat}
.pop_content h2.dialog_loading{background:#6d84b4 url(http://static.ak.fbcdn.net/rsrc.php/v1/y-/r/AGUNXgX_Wx3.gif) no-repeat 400px 10px;padding-right:40px}
.pop_content h2 span{display:block;padding:5px 10px}
.pop_content .dialog_content{background:#fff;border:1px solid #555;border-top-width:0}
.pop_content .dialog_content.dialog_content_titleless{border-top:1px solid #555}
.pop_content .dialog_body{padding:10px;border-bottom:1px solid #ccc}
.omitDialogFooter .pop_content .dialog_body{border-bottom:0}
.pop_content .dialog_summary{background:#f2f2f2;padding:8px 10px;border-bottom:1px solid #ccc}
.pop_content .dialog_buttons{background:#f2f2f2;padding:8px 10px 8px 10px;position:relative;text-align:right}
.pop_content .dialog_buttons_msg{float:left;line-height:17px;padding-top:4px}
.pop_content .dialog_footer{background:#F2F2F2 none repeat scroll 0}
.full_bleed .pop_content .dialog_body{padding:0}
.uiButton,.uiButtonSuppressed:active,.uiButtonSuppressed:focus,.uiButtonSuppressed:hover{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yh/r/exdyUfVOjrJ.png);background-repeat:no-repeat;background-position:0 -49px;background-color:#eee;border:1px solid #999;border-bottom-color:#888;box-shadow:0 1px 0 rgba(0, 0, 0, .1);cursor:pointer;display:-moz-inline-box;display:inline-block;font-size: 11px;font-weight:bold;line-height:normal !important;padding:2px 6px;text-align:center;text-decoration:none;vertical-align:top;white-space:nowrap}
.uiButton + .uiButton{margin-left:4px}
.uiButton:hover{text-decoration:none}
.uiButton:active,.uiButtonDepressed{background:#ddd;border-bottom-color:#999;box-shadow:0 1px 0 rgba(0, 0, 0, .05)}
.uiButton .img{margin-top:2px;vertical-align:top}
.uiButtonLarge .img{margin-top:4px}
.uiButton .customimg{margin-top:0}
.uiButton .uiButtonText,.uiButton input{background:none;border:0;color:#333;cursor:pointer;display:-moz-inline-box;display:inline-block;font-family:'Lucida Grande', Tahoma, Verdana, Arial, sans-serif;font-size: 11px;font-weight:bold;margin:0;outline:none;padding:1px 0 2px;white-space:nowrap}
.uiButtonSpecial{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yh/r/exdyUfVOjrJ.png);background-repeat:no-repeat;background-position:0 0;background-color:#69a74e;border-color:#3b6e22 #3b6e22 #2c5115}
.uiButtonSpecial:active{background:#609946;border-bottom-color:#3b6e22}
.async_saving .uiButton.uiButtonSpecial,.uiButtonSpecial.uiButtonDisabled,.uiButtonSpecial.uiButtonDisabled:active,.uiButtonSpecial.uiButtonDisabled:focus,.uiButtonSpecial.uiButtonDisabled:hover{background:#b4d3a7;border-color:#9db791}
.uiButtonConfirm{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yh/r/exdyUfVOjrJ.png);background-repeat:no-repeat;background-position:0 -98px;background-color:#5b74a8;border-color:#29447e #29447e #1a356e}
.uiButtonConfirm:active{background:#4f6aa3;border-bottom-color:#29447e}
.async_saving .uiButton.uiButtonConfirm,.uiButtonConfirm.uiButtonDisabled,.uiButtonConfirm.uiButtonDisabled:active,.uiButtonConfirm.uiButtonDisabled:focus,.uiButtonConfirm.uiButtonDisabled:hover{background:#adbad4;border-color:#94a2bf}
.async_saving .uiButton.uiButtonSpecial .uiButtonText,.async_saving .uiButton.uiButtonSpecial input,.async_saving .uiButton.uiButtonConfirm .uiButtonText,.async_saving .uiButton.uiButtonConfirm input,.uiButtonSpecial .uiButtonText,.uiButtonSpecial input,.uiButtonSpecial.uiButtonDisabled .uiButtonText,.uiButtonSpecial.uiButtonDisabled input,.uiButtonConfirm .uiButtonText,.uiButtonConfirm input,.uiButtonConfirm.uiButtonDisabled .uiButtonText,.uiButtonConfirm.uiButtonDisabled input{color:#fff}
.async_saving .uiButton,.uiButtonDisabled,.uiButtonDisabled:active,.uiButtonDisabled:focus,.uiButtonDisabled:hover{background:#f2f2f2;border-color:#c8c8c8;box-shadow:none}
.async_saving .uiButton .img,.uiButtonDisabled .img{opacity:.5}
.async_saving .uiButton .uiButtonText,.async_saving .uiButton input,.uiButtonDisabled .uiButtonText,.uiButtonDisabled input{color:#b8b8b8}
.async_saving .uiButton,.async_saving .uiButton .uiButtonText,.async_saving .uiButton input,.uiButtonDepressed,.uiButtonDepressed .uiButtonText,.uiButtonDepressed input,.uiButtonDisabled,.uiButtonDisabled .uiButtonText,.uiButtonDisabled input{cursor:default}
.uiButtonLarge,.uiButtonLarge .uiButtonText,.uiButtonLarge input{font-size: 13px}
.uiButtonSuppressed{background:none;border-color:transparent;box-shadow:none}
.uiButtonNoText .img{margin-left:-1px;margin-right:-1px}
.android .uiButton .uiButtonText,.android .uiButton input{padding:3px 0 1px 1px}
.uiCloseButton{cursor:pointer;display:-moz-inline-box;display:inline-block;margin:0;padding:0;zoom:1}
label.uiCloseButton{overflow:hidden}
.uiCloseButton input{cursor:pointer;opacity:0;outline:none;padding:18px}
.uiCloseButton{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yc/r/iXI7kq8F8Uu.png);height:15px;width:15px}
.uiCloseButtonSmall{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yV/r/9s507dck6eJ.png);height:11px;margin-top:1px;width:11px}
.uiCloseButtonHuge{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yQ/r/K_94bYEMTym.png);height:15px;width:15px}
.uiCloseButtonDark{background-position:left -16px}
.uiCloseButtonInverted{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yl/r/PMN0FPjYhY7.png);background-position:left -16px}
.uiCloseButton:hover,.uiCloseButton:focus{background-position:left -32px}
.uiCloseButton:active{background-position:left -48px}
.uiCloseButtonSmallDark{background-position:left -12px}
.uiCloseButtonSmallInverted{background-position:left -12px;background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yn/r/WSQ2wnhSG-F.png)}
.uiCloseButtonSmall:hover,.uiCloseButtonSmall:focus{background-position:left -24px}
.uiCloseButtonSmall:active{background-position:left -36px}
.uiBoxGray{background-color:#f2f2f2;border:1px solid #ccc}
.uiBoxDarkgray{color:#ccc;background-color:#333;border:1px solid #666}
.uiBoxLightblue{background-color:#edeff4;border:1px solid #d8dfea}
.uiBoxRed{background-color:#ffebe8;border:1px solid #dd3c10}
.uiBoxWhite{background-color:#fff;border:1px solid #ccc}
.uiBoxYellow{background-color:#fff9d7;border:1px solid #e2c822}
.uiBoxOverlay{background:rgba(255, 255, 255, .85);border:1px solid #3b5998;border:1px solid rgba(59, 89, 153, .65);zoom:1}
.noborder{border:none}
.topborder{border-bottom:none;border-left:none;border-right:none}
.bottomborder{border-left:none;border-right:none;border-top:none}
.dashedborder{border-style:dashed}
.uiGrid{border:0;border-collapse:collapse;border-spacing:0}
.uiGridCalc{width:100%}
.uiGrid .vTop{vertical-align:top}
.uiGrid .vMid{vertical-align:middle}
.uiGrid .vBot{vertical-align:bottom}
.uiGrid .hLeft{text-align:left}
.uiGrid .hCent{text-align:center}
.uiGrid .hRght{text-align:right}
.uiIconText{padding-left:21px;position:relative}
label.uiIconText{vertical-align:baseline}
.uiIconText .img{left:0;position:absolute;top:-1px;vertical-align:middle}
i.img u{position:absolute;top:-9999999px}
.UIImageBlock_Content{display:table-cell;vertical-align:top;width:10000px}
.UIImageBlock_Image{float:left;margin-right:5px}
.UIImageBlock_Image .img,img.UIImageBlock_Image,i.UIImageBlock_Image{display:block}
.UIImageBlock_Ext{float:right}
.UIImageBlock_ICON_Image{margin-right:5px}
.UIImageBlock_ICON_Content{padding-top:1px}
.UIImageBlock_SMALL_Image{margin-right:8px}
.UIImageBlock_MED_Image,.UIImageBlock_ENT_Image{margin-right:10px}
.UIImageBlock_Entity .UIImageBlock_Content{height:50px;vertical-align:middle}
.UIImageBlock_Entity img.UIImageBlock_Image,.UIImageBlock_Entity i.UIImageBlock_Image,.UIImageBlock_Entity .UIImageBlock_Image .img{height:50px;width:50px}
.UIImageBlock_Entity .UIImageBlock_Ext{margin-top:14px;padding-left:8px}
.lfloat{float:left}
.rfloat{float:right}
a.uiLinkSubtle{color:#808080}
.uiListItem{display:block}
.uiListHorizontalItem{float:left}
.uiListLight,.uiListMedium,.uiListDark{border-style:solid}
.uiListHorizontalItemBorder{border-width:0 0 0 1px}
.uiListVerticalItemBorder{border-width:1px 0 0 0}
.uiListItem:first-child{border-width:0}
.uiListLight{border-color:#e9e9e9}
.uiListMedium{border-color:#ccc}
.uiListDark{border-color:#aaa}
.uiListBulleted{color:#3b5998;list-style-type:square;margin-left:12px}
.pas{padding:5px}
.pam{padding:10px}
.pal{padding:20px}
.pts{padding-top:5px}
.ptm{padding-top:10px}
.ptl{padding-top:20px}
.prs{padding-right:5px}
.prm{padding-right:10px}
.prl{padding-right:20px}
.pbs{padding-bottom:5px}
.pbm{padding-bottom:10px}
.pbl{padding-bottom:20px}
.pls{padding-left:5px}
.plm{padding-left:10px}
.pll{padding-left:20px}
.phs{padding-left:5px;padding-right:5px}
.phm{padding-left:10px;padding-right:10px}
.phl{padding-left:20px;padding-right:20px}
.pvs{padding-top:5px;padding-bottom:5px}
.pvm{padding-top:10px;padding-bottom:10px}
.pvl{padding-top:20px;padding-bottom:20px}
.mas{margin:5px}
.mam{margin:10px}
.mal{margin:20px}
.mts{margin-top:5px}
.mtm{margin-top:10px}
.mtl{margin-top:20px}
.mrs{margin-right:5px}
.mrm{margin-right:10px}
.mrl{margin-right:20px}
.mbs{margin-bottom:5px}
.mbm{margin-bottom:10px}
.mbl{margin-bottom:20px}
.mls{margin-left:5px}
.mlm{margin-left:10px}
.mll{margin-left:20px}
.mhs{margin-left:5px;margin-right:5px}
.mhm{margin-left:10px;margin-right:10px}
.mhl{margin-left:20px;margin-right:20px}
.mvs{margin-top:5px;margin-bottom:5px}
.mvm{margin-top:10px;margin-bottom:10px}
.mvl{margin-top:20px;margin-bottom:20px}
.fss{font-size: 9px}
.fsm{font-size: 11px}
.fsl{font-size: 13px}
.fsxl{font-size: 16px}
.fsxxl{font-size: 18px}
.fwn{font-weight:normal}
.fwb{font-weight:bold}
.fcb{color:#333}
.fcg{color:#808080}
.uiHeader h2{color:#1c2a47;font-size: 16px}
.uiHeader h2 a{color:#1c2a47}
.uiHeader h3,.uiHeader h4{color:#333;font-size: 11px}
.uiHeader h5{color:#666;font-size: 11px}
.uiHeaderWithImage .uiHeaderTop{position:relative}
.uiHeaderWithImage .uiHeaderTitle{padding-left:22px}
.uiHeaderImage{left:0;position:absolute}
.uiHeader h2 .uiHeaderImage{top:2px}
.uiHeaderTopBorder{border-top:1px solid #aaa;padding-top:.5em}
div.uiHeaderTopBorder{margin-left:0}
.uiHeaderTopAndBottomBorder{border-bottom:1px solid #e9e9e9;border-top:1px solid #aaa;padding:5px 0}
.uiHeaderMiddleBorder{border-bottom:1px solid #ccc;height:.8em;margin:.5em 0 1.5em 0;position:relative}
.uiHeaderMiddleBorder .uiHeaderTitle,.uiHeaderMiddleBorder .uiHeaderActions{background-color:#fff;position:absolute;top:0}
.uiHeaderMiddleBorder .uiHeaderTitle{left:0;padding-right:.5em}
.uiHeaderMiddleBorder .uiHeaderActions{padding-left:.5em;right:0}
.uiHeaderMiddleBorder .uiButton{margin-top:-2px}
.uiHeaderBottomBorder{border-bottom:1px solid #aaa;padding-bottom:.5em}
.uiHeaderPage{padding:6px 0 16px}
.uiHeaderPage .uiHeaderTitle{line-height:20px;min-height:20px;padding-bottom:2px;vertical-align:bottom}
.uiHeaderPage .uiHeaderActions{margin-top:-1px}
.uiHeaderPage .uiHeaderTop .fsl{margin-top:3px}
.uiHeaderNav{border-color:#eee;margin:8px 0 0 6px;padding:7px 6px 3px 5px}
.uiHeaderNavEmpty{padding-top:6px}
.uiHeaderNav h4{color:#808080}
.uiHeaderSection,.uiSideHeader{background-color:#f2f2f2;border-bottom:none;border-top:solid 1px #e2e2e2;padding:4px 5px 5px}
.uiTooltip{position:relative}
.uiTooltipActive,.uiTooltip:active,.uiTooltip:focus,.uiTooltip:hover{outline:none;text-decoration:none;z-index:2}
.uiTooltipWrap{display:none}
.uiTooltipWrap:hover{visibility:hidden}
.uiTooltipActive .uiTooltipWrap:hover{visibility:visible}
.uiTooltipText{background-color:#282828;color:#fff !important;display:block;font-size: 11px;line-height:14px;padding:4px 8px;text-align:left}
.uiTooltipNoWrap{white-space:nowrap}
.uiTooltipActive .uiTooltipWrap,.uiTooltip:active .uiTooltipWrap,.uiTooltip:focus .uiTooltipWrap,.uiTooltip:hover .uiTooltipWrap{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/y1/r/uVR6w3wRHEJ.gif) left bottom no-repeat;bottom:100%;display:block;left:0;padding:0 0 4px;position:absolute}
.uiTooltipActive .center,.uiTooltip:active .center,.uiTooltip:focus .center,.uiTooltip:hover .center{left:50%;margin-left:-10px;padding-left:10px}
.uiTooltip .center .uiTooltipText{left:-50%;position:relative}
.uiTooltip .centerbottom .uiTooltipText{margin-left:18px}
.uiTooltipActive .right,.uiTooltip:active .right,.uiTooltip:focus .right,.uiTooltip:hover .right{background-position:right bottom;left:auto;right:0}
.uiTooltipActive .middle,.uiTooltip:active .middle,.uiTooltip:focus .middle,.uiTooltip:hover .middle{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yR/r/kPCE0g_tKJs.gif);background-position:right top;left:auto;margin:-4px 4px 0 0;right:100%;padding:4px;top:50%}
.uiTooltip .middle .uiTooltipText{margin-top:-10px}
.uiTooltipActive .rightmiddle,.uiTooltip:active .rightmiddle,.uiTooltip:focus .rightmiddle,.uiTooltip:hover .rightmiddle{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yY/r/_ZWZupdaAgS.gif);background-position:left top;left:100%;margin:-4px 0 0 4px;right:auto}
.uiTooltipActive .bottom,.uiTooltip:active .bottom,.uiTooltip:focus .bottom,.uiTooltip:hover .bottom{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yX/r/k2R_CZuPy2I.png);background-position:left top;bottom:auto;padding:4px 0 0;top:100%}
.uiTooltipActive .rightbottom,.uiTooltip:active .rightbottom,.uiTooltip:focus .rightbottom,.uiTooltip:hover .rightbottom{background-position:right top}
.uiTooltipDisabled:active .uiTooltipWrap,.uiTooltipDisabled:focus .uiTooltipWrap,.uiTooltipDisabled:hover .uiTooltipWrap,.openToggler > .uiTooltip:active .uiTooltipWrap,.openToggler > .uiTooltip:focus .uiTooltipWrap,.openToggler > .uiTooltip:hover .uiTooltipWrap{display:none}
.uiMediaThumb{background:#fff;border:1px solid #ccc;display:-moz-inline-box;display:inline-block;outline:none;padding:4px;position:relative;vertical-align:bottom}
.loading.uiMediaThumb{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/yk/r/LOOn0JtHNzb.gif) no-repeat center center}
.loading.uiMediaThumb i{opacity:.3}
.uiMediaThumbSelected{background-color:#3b5998;border-color:#3b5998}
.uiMediaThumb:hover,.uiMediaThumb:hover .uiMediaThumbWrap,.uiMediaThumb:active,.uiMediaThumb:active .uiMediaThumbWrap,.uiMediaThumb:focus,.uiMediaThumb:focus .uiMediaThumbWrap{border-color:#3b5998}
.uiMediaThumb i{background-color:#eee;background-position:center 25%;background-repeat:no-repeat;display:block}
.uiMediaThumbSmall i{height:54px;width:73px}
.uiMediaThumbMedium i{height:85px;width:114px}
.uiMediaThumbLarge i{height:116px;width:149px}
.uiMediaThumbHuge i{height:120px;width:161px}
.uiMediaThumbAlb{margin-bottom:4px;margin-right:4px}
.uiMediaThumbWrap{background:#fff;border:1px solid #ccc;left:4px;padding:4px;position:absolute;top:4px}
.uiMediaThumbAlbSmall,.uiMediaThumbSmall .uiMediaThumbWrap i{height:49px;width:68px}
.uiMediaThumbAlbMedium,.uiMediaThumbMedium .uiMediaThumbWrap i{height:80px;width:109px}
.uiMediaThumbAlbLarge,.uiMediaThumbLarge .uiMediaThumbWrap i{height:111px;width:144px}
.uiMediaThumbAlbHuge,.uiMediaThumbHuge .uiMediaThumbWrap i{height:115px;width:156px}
.uiProfilePhotoHugeBadCrop{background-position:center 25%}
.uiProfilePhotoHuge{width:100px;height:100px}
.uiProfilePhotoLarge{width:50px;height:50px}
.uiProfilePhotoMedium{width:32px;height:32px}
.uiProfilePhotoSmall{width:24px;height:24px}
#bootloader_4FDlg { height: 42px; }
------------UAMIZgc77nT2aFBV02afBr
Content-Disposition: inline; filename=3Y_fkKAl6qY.css
Content-Type: text/css; charset=utf-8; name=3Y_fkKAl6qY.css
Content-Location: http://static.ak.fbcdn.net/rsrc.php/v1/yS/r/3Y_fkKAl6qY.css
Content-Transfer-Encoding: 8bit
/*1313998234,176832697*/
.fbDarkWidget .fan_box,
.fbDarkWidget .uiStream .uiStreamMessage{color:#808080}
.fbDarkWidget .fan_box a{color:#ccc}
.fan_box .full_widget{border:solid 1px #94a3c4;background:white}
.fan_box .full_widget .connect_top{background:#eceff5}
.fan_box .connect_top{padding:10px 10px 8px 10px}
.pts .fan_box .connect_top{padding:5px 10px 8px 5px}
.fan_box .profileimage{float:left;width:40px;height:40px;padding:0 10px 0 0;margin:0 0 4px 0}
.fan_box .connect_action{padding:0 0 0 8px}
.fan_box .connect_action .name{line-height:15px;font-size: 14px;font-weight:bold}
.fan_box .connect_button{padding-top:5px}
.fan_box .connect_button .uiButton{margin:1px 0 0 0}
.fan_box .connect_action a.undo{margin:0 0 0 3px}
.fan_box .page_stream, .fan_box .page_stream_short{text-align:center;padding:0 5px;overflow:auto;border-top:solid 1px #d8dfea;position:relative}
.fan_box .storyContent{text-align:left}
.fan_box .page_stream{height:300px;overflow-x:hidden}
.fan_box .page_stream_short{height:250px}
.fan_box .page_stream .loader{padding-top:20px}
.fan_box .UIIntentionalStory{background:transparent;text-align:left;padding:7px 0 0 0}
.fan_box .UIIntentionalStory .UIMediaItem_UnknownWidth{max-width:100px}
.fan_box .connections{border-top:solid 1px #d8dfea;padding:10px 0 4px 10px;min-height:150px}
.pts .fan_box .connections{padding:5px 0 4px 5px}
.fan_box .connections .connections_grid{padding-top:5px}
.fan_box .connections_grid .grid_item{float:left;padding:0 5px 8px 0;overflow:hidden;width:50px}
.fan_box .connections_grid .grid_item .name{font-size: 9px;color:#808080;overflow:hidden;padding-top:2px;text-align:center;white-space:nowrap}
.fan_box .connect_span{margin:0 0 1px}
.fan_box .connect_widget .connect_widget_text{padding:0}
.fan_box .connect_widget td.connect_widget_vertical_center{height:20px}
.fan_box .connect_widget td.connect_widget_vertical_center a.connect_widget_like_button{margin-right:7px}
.fan_box .connect_widget .connect_widget_interactive_area{margin:5px 0 0}
.fbGalleryPrev,.fbDisabledGalleryPrev{float:left;margin-top:50px;opacity:.7}
.fbGalleryPrev:hover{opacity:1}
.fbGalleryNext,.fbDisabledGalleryNext{float:right;margin-top:50px;opacity:.7}
.fbGalleryNext:hover{opacity:1}
.fbConnectWidgetTopmost{border:1px solid #aaa;border-top-color:#315c99;overflow:hidden;padding:0;position:relative}
div.fbDarkWidget{border:1px solid #666;border-top-color:#ccc;background-color:#000}
.fbDarkWidget .fbWidgetTitle{color:#fff}
.fbDarkWidget a,.fbDarkWidget .profileName{color:#fff}
.fbDarkWidget a.uiLinkSubtle{color:#808080}
div.fbConnectWidgetHeaderTitle{border-width:0 0 1px}
div.ConnectActivityLogin{border-width:0 0 1px;zoom:1}
.fbRecommendationWidgetContent .recommendations_metadata{padding-top:3px;color:#808080}
.fbGalleryImage{max-height:125px;max-width:140px}
.fbShowBothHidden{display:none}
.fbRecommendationsContainer{display:none}
.fbShowBothRecommendationsHighlighted .fbRecommendationsContainer{display:inline}
.fbShowBothRecommendationsHighlighted .fbActivityContainer{display:none}
.fbActivityContainer{display:inline}
.fbGalleryRecommendationsFacepile{position:relative}
.fbGalleryRecommendationsFooter{width:150px}
.fbGalleryRecommendationsImageBlock{display:block;margin-left:auto;margin-right:auto;text-align:center;height:125px}
.fbGalleryRecommendationsImageContainer{width:140px;height:125px;background:#edeff4 url(http://static.ak.fbcdn.net/rsrc.php/v1/ye/r/nZW4C56WJb6.png) repeat 0 0;overflow:hidden;display:inline-block}
.fbDarkWidget .fbGalleryRecommendationsImageContainer{background-position:-125px 0}
.fbGalleryRecommendationsNode{height:275px}
.fbGalleryRecommendationsText{padding-top:3px;height:64px}
.fbShowBothActivityHeader{display:none}
.fbShowBothRecommendationsHighlighted .fbShowBothActivityHeader{display:inline}
.fbShowBothRecommendationsHeader{display:inline}
.fbShowBothRecommendationsHighlighted .fbShowBothRecommendationsHeader{display:none}
.fbDarkWidget div.ConnectActivityLogin{border-color:#303030;background-color:#000}
.fbProfilePic{height:35px;width:35px}
.fbImageContainer{width:35px;height:35px;background:#edeff4 url(http://static.ak.fbcdn.net/rsrc.php/v1/ye/r/nZW4C56WJb6.png) no-repeat 0 0;overflow:hidden}
.fbDarkWidget .fbImageContainer{background-position:-35px 0}
.fbConnectWidgetHeaderTitle{color:#1c2a47;border:1px solid #c6cedd;padding-bottom:7px;padding-top:8px;cursor:default}
.fbConnectWidgetHeaderTitleBranded{background:#3b5998;color:#fff;cursor:default;padding-bottom:5px;padding-top:7px}
.fbDarkWidget .fbConnectWidgetHeaderTitle{background-color:#333;border:1px solid #444}
.fbConnectWidgetTrackingPixel{display:inline;height:0;width:0}
.fbLoginButton{float:left}
.ConnectActivityLoginMessage{color:#666;line-height:14px;vertical-align:top;zoom:1}
.fbDarkWidget .ConnectActivityLoginMessage{color:#808080}
.fbConnectWidgetFooter{bottom:0;cursor:default;position:absolute;width:100%}
.fbDarkWidget .fbConnectWidgetFooter{background-color:#000}
.fbConnectWidgetFooter .fbFooterBorder{border-top:1px solid #ccc;margin:0 6px;padding:4px 3px}
.fbDarkWidget .fbConnectWidgetFooter .fbFooterBorder{border-top:1px solid #444}
.fbSeparator{color:#ccc;background-color:#ccc;height:1px}
.fbDarkWidget .fbSeparator{color:#303030;background-color:#303030}
.fbConnectWidgetContent,.fbImageContainer img{visibility:hidden}
.fbConnectWidgetContent,.fbGalleryRecommendationsImageContainer img{visibility:hidden}
div.fbHalfPage{overflow:hidden}
div.fbAdminOptions{float:right}
.fbpage_edit_header{padding:0;margin:0;height:31px;border:0;margin:-7px 0 19px;border-bottom:1px solid #ccc;background:#fff}
.pages_edit .fbpage_edit_header{margin:0}
.icon_dock{margin:0;padding:0;width:300px;float:right}
.icon_dock .icon_dock_container{margin:0;padding:0;padding-top:8px;float:right;z-index:30}
.icon_dock .edit_link{padding-right:8px;padding-top:10px;font-weight:bold;color:#666;display:block;margin:0;float:right}
.icon_dock a{padding:0;padding-left:5px;padding-top:8px;margin:0 0 0 0}
.edit_app_switcher{margin:0 0;padding-top:6px}
.edit_app_switcher .app_switcher_button .name{padding:2px 0 2px 6px}
.edit_app_switcher .app_switcher_menu{width:160px}
.edit_app_switcher .app_switcher_menu .name{width:105px;text-align:left}
.edit_app_switcher .app_switcher_button .arrow{padding:2px 0 1px}
.fbpage_edit_header .left_header{float:left;font-size: 11px;font-weight:bold;overflow:hidden;padding:7px 0 2px;white-space:nowrap;width:250px}
.fbpage_edit_header .left_header_text{padding-left:5px;position:relative;top:-4px}
.fbpage_edit_header div.left_header .edit_link{font-weight:normal;padding-left:4px;color:#ccc}
.fbpage_edit_header div.left_header .edit_link a{color:#6d84b4}
.fan_status_inactive{background-color:#fffccc;color:#666;margin:0;padding:0 0 0 3px;line-height:18px}
#wall_section_header .uiSelectorButton,#wall_section_header .uiSelectorButton:active,#wall_section_header .uiSelectorButton:focus,#wall_section_header .uiSelectorButton:hover{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yB/r/rotZez1A6hj.png);background-repeat:no-repeat;background-position:right -53px;background-color:transparent;border:none;box-shadow:none;margin:0;outline:0;padding:0 20px 2px 0}
#wall_section_header .uiHeaderActions,#wall_section_header .uiSelectorButton .uiButtonText{color:#333;padding:0}
#wall_section_header .uiSelectorButton:hover .uiButtonText{text-decoration:underline}
#wall_section_header .openToggler .uiSelectorButton:hover .uiButtonText{text-decoration:none}
.placePageStats{margin:0 6px 5px;overflow:hidden}
.placePageStatsNumber{font-family:Helvetica,Arial,default;font-size: 18px;font-weight:bold}
.placePageHereNowContent{margin-top:10px;overflow:hidden}
.placeVisitorsFacepile{margin:2px 6px 14px 6px}
.uiNumberGiant{font-family:arial, helvetica}
.connect_widget{overflow:hidden}
.connect_widget .connect_widget_facebook_logo_menubar{background-color:#3b5998;border:1px solid #244588;border-bottom:none;margin-bottom:-1px;position:relative}
.connect_widget .connect_widget_facebook_logo{padding:3px 0 5px 6px;float:left}
.connect_widget .connect_widget_facebook_logo span{background:transparent url(http://static.ak.fbcdn.net/rsrc.php/v1/yx/r/zZEOQP4uOC1.gif) no-repeat scroll 0 0;display:block;height:17px;width:90px}
.connect_widget .connect_widget_facebook_logo:hover span{background-position:left -17px}
.connect_widget .connect_widget_menu_options{float:right}
.connect_widget .connect_widget_menu_link{float:left;height:17px;margin-right:5px;padding:5px 5px 3px 5px;color:#fff;font-size: 11px}
.connect_widget .connect_widget_menu_link:hover{background-color:#5c75aa;text-decoration:none}
#bootloader_V0oOP { height: 42px; }
------------UAMIZgc77nT2aFBV02afBr
Content-Disposition: inline
Content-Type: image/png
Content-Location: http://static.ak.fbcdn.net/rsrc.php/v1/y7/r/ql9vukDCc4R.png
Content-Transfer-Encoding: Base64
iVBORw0KGgoAAAANSUhEUgAAABAAAAEfCAMAAAB/DLYyAAABI1BMVEX////////+
/v40NDSbq8tsg7Pl6fLq7fQ2WJnS2um7u7tmZmbh4eFzirbCyt9kZGTZ2dlERERV
VVVRbKQeRYC9yN6+vr5geKyqqqrDw8M7WZji5vDT09Oenp5NTU1jeKN1i7jd3d3H
x8fU1NTu7u7e4u5id6LLy8umpqbo6OjP2Oh1dXWJiYm4uLjOzs7b29vp6elof7HA
wMCRkZFYapHFzOLy8vKMjIygoKCNoMV+fn6rq6t7j7rl5eW/yuBlZWWuu9W/xduN
jY3u8fbT2eji4uKpqam8vLx3d3eoqKh7e3u9vb3u8PbX19dKaKTk5OSKioqkpKQ5
VZS0tLT29vZPaqNVcan6+vq2wNxwg6+MnsNXapCwvttXV1ded65paWmQpMmBnePY
AAAAAXRSTlMAQObYZgAAAyRJREFUeF61juWW40oMBtNtO8yMg8zMsMx0men9n2K/
dhyNlBwle5LcmsmPqiOpHZsJryS9bIeCZz3hzwsIcsB6nvdvuOwBOOgPeTc3UB4K
hWmC5xV+dGEhegWTW67CZ8O+kN6JDQWLP85fKRmcWWt3wmXroIzlWg3KQyo1TbA2
9Z8L8egVTPiuwmcj+Vn6P3YoJG1SuJ9DkAM2mUwuhctJAAf9oeT1NZSHXG5SWBqd
wNFc3oVfolcw+dsSKnw6Gm2iEQYIwUPOmJwIJv5sQ4ZnYqXimx2/wgIujNzYQVdC
EGLWg0AES6FR/aEa/TdicyQbywIWNrPFbreYZaG7Cbos1ENYaDlvsRCTAwjbgIft
bLGYRaEAR2EBCh5DayTEpCOcAh5Oe1tbPVZavdegxwIUjAsx6Qh/Ah7ONoJg4+wx
1BcDsMgCFOgBkKs8AOGpeDzFy0MCjA+pRAIr6lHgA+G1TqfGix9PJOLjQy0epxVx
VH/laT7/VNzIn5/ntSBX9FfaQHjl+LjCSzsA40MlCGiFHZ2eu+qAu36otgdUeWj4
DRn8RE2GF75csdbKid/t8I0EWwkc1g8CERIUxJfOnfSwp9Oqp8lplpyKvk9XZuVn
IvL1jxHrKC50iEH4I4SCNgHUiZcDfzl4F7Th+A4GClwWBFkQ/n8yw57JqJ4hp1ly
Kvo+XZk3HhG5ITwtFEImTgB9QgYUh1PnBApcFAQJNuZIhoi8TGS00J+fOAHUCRkA
nXROoMBFQZBgY46kiciXibQW+vMTJ4A6IQOgk84JFLgoCBK5MZlXQPjqysoqL69W
gB5oRT8KykD4Qqm0wEu5BPRAK/pRsAyE36+t3fOyvAb0QCv6UcnJ9wNO+gEygIKB
GBaMMe7HJwCbAKHrE3RDf4VQvnSEkjeg1A/eIxQMxLBgjHE/PgHYBAhdn6Ab+iuE
8qXfQPM7ohkGCMHDB2PeiGB+PXonw5FYuTo0F4dXLLwxZuTGBboS9kPMT/v7Smi+
JZqxb6P8hCiHAULw8NyYSxHMl/p7GepiZffWHNzusnBpzMiNA3Ql7IWYT3t7Sij/
TeDTvwLENdsHdW/D3AAAAABJRU5ErkJggg==
------------UAMIZgc77nT2aFBV02afBr
Content-Disposition: inline; filename=XkpXLiSPFe_.css
Content-Type: text/css; charset=utf-8; name=XkpXLiSPFe_.css
Content-Location: http://static.ak.fbcdn.net/rsrc.php/v1/yv/r/XkpXLiSPFe_.css
Content-Transfer-Encoding: 8bit
/*1314114779,169775815*/
.connect_comment_widget{margin:0 4px;padding:5px 0;position:relative}
.connect_comment_widget .nub{background:transparent url(http://static.ak.fbcdn.net/rsrc.php/v1/yv/r/agyQHs6yLID.gif) no-repeat 8px 0;height:6px;width:20px;padding:0;margin:0;left:0;line-height:0;position:absolute;z-index:2;top:0}
.connect_comment_widget .side_nub{background:transparent url(http://static.ak.fbcdn.net/rsrc.php/v1/yn/r/vAOEfR4cWQM.gif) no-repeat 0 0;height:20px;width:6px;padding:0;margin:0;left:-5px;line-height:0;position:absolute;z-index:2;top:14px}
.connect_comment_widget_rtl .side_nub{background:transparent url(http://static.ak.fbcdn.net/rsrc.php/v1/yK/r/R95msRfVr6a.gif) no-repeat 0 0}
.connect_comment_widget .comment_content{background:white;border-color:#333333 #333333 #283e6c;border-style:solid;border-width:1px 1px 2px;zoom:1}
.connect_comment_widget .connect_comment_widget_text{padding:8px 8px 4px}
.connect_comment_widget .connect_comment_widget_custom_text{color:#808080}
.connect_comment_widget .connect_comment_widget_placeholder_input{width:304px;color:#808080;line-height:16px;height:20px}
.connect_comment_widget .connect_comment_widget_placeholder_input_region{padding:8px 8px 5px}
.connect_comment_widget .connect_comment_widget_user_pic{display:block;float:left;height:auto;padding:0 5px 0 0;width:50px}
.connect_comment_widget .connect_comment_widget_full_input_textarea{height:50px;width:319px}
.connect_comment_widget .connect_comment_widget_full_input_region{padding:8px 8px 5px}
.connect_comment_widget textarea.connect_comment_widget_disabled{color:#808080}
.connect_comment_widget.like_button_dark textarea.connect_comment_widget_disabled{color:#dedede}
.connect_comment_widget div.connect_comment_share_preview{padding-left:55px;padding-top:6px}
.connect_comment_widget div.connect_comment_widget_button_region{padding:8px 8px 5px;text-align:right;background-color:#f2f2f2;border-top:1px solid #bdc7d8}
.connect_comment_widget.like_button_dark div.connect_comment_widget_button_region{background-color:#333;border-top:1px solid #666}
.like_button_dark .nub,.like_button_dark .connect_widget_comment_box_upward_nub{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yL/r/7vbl1usLlV8.gif)}
.like_button_dark .side_nub{background:transparent url(http://static.ak.fbcdn.net/rsrc.php/v1/yB/r/Gvy8rtIdNBK.gif) no-repeat 0 0;left:-4px}
.connect_comment_widget_rtl.like_button_dark .side_nub{background:transparent url(http://static.ak.fbcdn.net/rsrc.php/v1/yp/r/E-2vs4qfO7d.gif) no-repeat 0 0}
.like_button_dark .comment_content{background:#111;border:1px solid #666;border-bottom:2px solid #ccc;color:#ccc}
.like_button_dark .connect_comment_widget_placeholder_input{border:1px solid #505050;background:1px solid #505050;color:#fff}
.like_button_dark .connect_comment_widget_full_input_textarea,.like_button_dark .connect_comment_widget_placeholder_input{background-color:#000;border-color:#434343;color:#fff}
.like_button_dark .connect_comment_widget_full_input_textarea{color:#fff}
.like_button_dark a{color:#fff}
.connect_comment_widget .connect_comment_widget_title{font-size: 12px;font-weight:bold;margin-top:-2px}
.connect_comment_widget.like_button_dark .connect_comment_widget_title{color:#ccc}
.connect_comment_widget .connect_comment_widget_description,.connect_comment_widget .connect_comment_widget_href{font-size: 11px;line-height:11px;margin-bottom:6px}
.connect_comment_widget .connect_comment_widget_description{color:#000}
.connect_comment_widget.like_button_dark .connect_comment_widget_description{color:#ccc}
body.transparent_widget{background-color:transparent;overflow:hidden}
body.plugin.transparent_widget{overflow-y:hidden}
.connect_widget{background-color:transparent}
.connect_widget .connect_widget_facebook_favicon{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/y7/r/ql9vukDCc4R.png) no-repeat -1px -47px transparent;display:block;height:14px;padding:0 0 0 0;width:14px;position:absolute;left:-1px}
.connect_widget .connect_widget_interactive_area{border-collapse:collapse}
.connect_widget td.connect_widget_vertical_center{border-spacing:0;font-size: 11px;line-height:normal;padding:0}
.connect_widget td.connect_widget_button_cell{vertical-align:top}
.connect_widget td.connect_widget_confirm_cell{padding-top:4px}
.connect_widget .connect_button_slider{position:relative;zoom:1}
.connect_widget .connect_widget_button_cell .connect_slide_hide_content{overflow:hidden;width:1px;margin-right:0}
.connect_widget .connect_slide_hide_content .connect_button_container{margin-left:1px}
.button_count .connect_widget_interactive_area .connect_widget_facebook_favicon,.button_count .connect_widget_interactive_area .connect_widget_text{float:left;position:static}
a.connect_widget_like_button{display:block;float:left;border-radius:3px;padding:4px 5px;border:1px solid #000}
.button_count a.connect_widget_like_button{padding:2px 4px}
a.connect_widget_like_button span{line-height:14px}
a.connect_widget_like_button:hover{text-decoration:none}
.connect_widget_number_cloud{position:relative;background:#f3f3f3;border:1px solid #d3d3d3;height:24px;padding-top:6px;text-align:center}
.like_widget_dark div.connect_widget_number_cloud{background-color:#c7c7c7;border-color:#c7c7c7}
div.connect_widget_number_cloud table.connect_widget_number_cloud_summary{margin-left:auto;margin-right:auto}
div.connect_widget_number_cloud table.connect_widget_number_cloud_summary td{font-size: 13px}
.thumbs_up_icon{width:15px;height:15px;margin-right:2px;background:url(http://static.ak.fbcdn.net/rsrc.php/v1/y7/r/ql9vukDCc4R.png) -1px -32px no-repeat}
.like_widget_dark .thumbs_up_icon{background-position:-1px -2px}
.like_widget_dark div.connect_widget_number_cloud_extension a{color:#333}
div.connect_widget_number_cloud .connect_widget_text{padding-left:0}
.connect_widget_number_cloud_nub{position:absolute;z-index:2;height:7px;width:0;bottom:-7px;left:5px}
.connect_widget_number_cloud_nub s,.connect_widget_number_cloud_nub i{border:solid transparent;border-left-color:#d3d3d3;border-width:0 0 7px 7px;display:block;position:relative}
.connect_widget_number_cloud_nub i{left:1px;top:-9px;border-left-color:#f3f3f3}
.like_widget_dark .connect_widget_number_cloud_nub s{border-left-color:#c7c7c7}
.like_widget_dark .connect_widget_number_cloud_nub i{display:none}
.connect_widget_offscreen{position:absolute;top:-10000px}
div.connect_widget_number_cloud_extension{font-size: 11px;height:30px;margin-left:4px;margin-right:4px;margin-top:6px}
div.connect_widget_number_cloud_extension_icon{margin-left:2px;margin-top:3px}
div.connect_widget_number_cloud_extension_text{border-color:#dedede;border-width:1px 0 0 0;border-style:solid;line-height:11px;margin-top:1px;text-align:center}
div.connect_widget_number_cloud_extension_text table{width:100%}
div.connect_widget_number_cloud_extension_text td{height:30px;text-align:center;vertical-align:middle}
div.connect_widget_number_cloud_extension span.like_reminder{color:#777;font-size: 9px}
.like_widget_dark div.connect_widget_number_cloud_extension span.like_reminder{color:#333;font-size: 9px}
table.connect_widget_button_count_summary,table.connect_widget_simple_summary{background-color:#eceef5;color:#000;font-size: 11px;height:21px}
table.connect_widget_button_count_summary div.thumbs_up{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/y7/r/ql9vukDCc4R.png) no-repeat 3px -32px #eceef5;height:15px;width:18px}
td.connect_widget_simple_including div.simple_liked{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/y7/r/ql9vukDCc4R.png) no-repeat 3px -47px #eceef5;height:15px;width:18px}
.like_button_simple .connect_widget_like_button .liketext{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/y7/r/ql9vukDCc4R.png) no-repeat 0 -47px #eceef5}
.connect_widget_rtl table.connect_widget_button_count_summary div.thumbs_up{background-position:-1px 0}
table.connect_widget_button_count_summary div.undo{background-color:#eceef5;height:21px;width:18px}
.like_button_dark table.connect_widget_button_count_summary div.undo{background-color:#c7c7c7}
table.connect_widget_button_count_summary label.undo_button{margin-left:6px;margin-top:4px}
table.connect_widget_button_count_summary div.summary_text{padding-left:3px;padding-right:6px;white-space:nowrap}
table.connect_widget_simple_summary div.summary_text{padding-left:3px;padding-right:6px;white-space:nowrap;color:#ccc}
.like_button_dark table.connect_widget_button_count_summary,.like_button_dark table.connect_widget_simple_summary{background-color:#c7c7c7}
.like_button_dark table.connect_widget_button_count_summary div.thumbs_up{background:transparent url(http://static.ak.fbcdn.net/rsrc.php/v1/y7/r/ql9vukDCc4R.png) no-repeat 3px -3px}
.connect_widget_rtl .like_button_dark table.connect_widget_button_count_summary div.thumbs_up{background-position:-1px -3px}
.connect_widget_button_count_count{background:#efefef;border:1px solid #c1c1c1;float:left;font-weight:normal;height:14px;margin-left:1px;min-width:15px;padding:1px 2px 1px 2px;text-align:center;line-height:14px}
.like_button_dark div.connect_widget_button_count_count{background-color:#c7c7c7;border-color:#c7c7c7}
.connect_widget_button_count_nub{float:left;position:relative;z-index:2;height:0;width:5px;top:-5px;left:2px}
.connect_widget_button_count_nub s,.connect_widget_button_count_nub i{border:solid transparent;border-right-color:#c7c7c7;border-width:5px 5px 0 0;display:block;position:relative}
.connect_widget_button_count_nub i{left:2px;top:-6px;border-right-color:#efefef}
.like_button_dark .connect_widget_button_count_nub i{display:none}
td.connect_widget_button_count_excluding{padding:0}
td.connect_widget_button_count_including,td.connect_widget_simple_including{padding:0}
td.connect_widget_button_count_including .connect_widget_button_count_count.noGrayOut{background:transparent url(http://static.ak.fbcdn.net/rsrc.php/v1/yp/r/qDH1xoDhFBF.gif) no-repeat 4px 2px;padding-left:22px;padding-right:4px}
.connect_widget_rtl td.connect_widget_button_count_including .connect_widget_button_count.noGrayOut{background:transparent url(http://static.ak.fbcdn.net/rsrc.php/v1/yp/r/qDH1xoDhFBF.gif) no-repeat 4px 2px;padding-right:22px;padding-left:4px}
.connect_widget_like_button .vertical{display:block;top:-6px;left:0;margin:0 3px -6px 0;position:relative;padding:3px 4px 4px 3px;border-top:solid 1px;border-bottom:solid 1px}
.button_count .connect_widget_like_button .vertical{padding:2px 3px 3px 2px}
.connect_widget_like_button .horizontal{height:100%;width:100%;position:absolute;display:block;top:-3px;left:-3px;padding-left:1px;border-left:solid 1px;border-right:solid 1px}
.connect_widget_like_button .corner_mask{overflow:hidden;width:3px;height:3px;position:absolute;display:block}
.connect_widget_like_button .corner{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/y7/r/ql9vukDCc4R.png);height:6px;width:6px;display:block}
.connect_widget_like_button .topleft{top:-6px;left:-3px}
.connect_widget_like_button .topleft .corner{margin:0 0}
.connect_widget_like_button .topright{top:-6px;right:0}
.connect_widget_like_button .topright .corner{margin:0 0 0 -3px}
.connect_widget_like_button .bottomright{bottom:0;right:0}
.connect_widget_like_button .bottomright .corner{margin:-3px 0 0 -3px}
.connect_widget_like_button .bottomleft{bottom:0;left:-3px}
.connect_widget_like_button .bottomleft .corner{margin:-3px 0 0 0}
.connect_widget_like_button .liketext{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/y7/r/ql9vukDCc4R.png) -1px -33px no-repeat;color:#3b5998;display:block;padding-left:17px;white-space:nowrap}
.connect_widget_rtl .connect_button_container .liketext{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/y7/r/ql9vukDCc4R.png) 34px -33px no-repeat}
.connect_widget_like_button .liketextwithimage img{margin-bottom:-2px;margin-right:4px;width:13px}
.hidden .connect_widget_like_button .liketextwithimage img{height:0;margin:0;padding:0;width:0}
.connect_widget_like_button .fbLikeButtonTrackingPixel{display:inline;height:0;width:0}
.button_count .like_button_dark .like_button_no_like .liketext,.button_count .connect_widget_like_button .liketext{background-position:-1px -47px}
.connect_widget .like_button_no_like .piece,.connect_widget .like_button_no_like{background-color:#eceef5;border-color:#cad4e7}
.connect_widget .like_button_no_like .corner{background-position:10px -89px}
.connect_widget a.like_button_no_like:hover .piece,.connect_widget a.like_button_no_like:hover{background-color:#ebedf4;border-color:#9dacce}
.connect_widget .like_button_no_like:hover .corner{background-position:10px -95px}
.connect_widget .like_button_pressed,.connect_widget .like_button_pressed .piece{background-color:#ced4e6;border-color:#94a5ca}
.connect_widget .like_button_pressed .corner{background-position:10px 55px}
.connect_widget .like_button_like .corner{background-position:10px 49px}
.connect_widget .like_button_dark .like_button_no_like,.connect_widget .like_button_dark .like_button_no_like .piece{background-color:#c7c7c7;border-color:#cad4e7}
.connect_widget .like_button_dark .like_button_no_like .corner{background-position:10px -217px}
.connect_widget .like_button_dark .liketext{color:#333;background-position:-1px -3px}
.connect_widget .like_button_dark .like_button_no_like:hover,.connect_widget .like_button_dark .like_button_no_like:hover .piece{background-color:#d9d9d9;border-color:#e9e9e9}
.connect_widget .like_button_dark .like_button_no_like:hover .corner{background-position:10px -217px}
.connect_widget .like_button_dark .like_button_no_like_pressed,.connect_widget .like_button_dark .like_button_no_like_pressed .piece{background-color:#a8a8a8;border-color:#a8a8a8;border-top-color:#8f8f8f}
.connect_widget .like_button_dark .like_button_no_like_pressed .corner{background-position:10px 80px}
.connect_widget .like_button_dark .like_button_like .corner{background-position:10px 74px}
.connect_widget .connect_text_wrapper{position:relative}
.connect_widget div.connect_confirmation_cell{padding:0;margin:0}
.connect_widget div.connect_confirmation_cell_like{padding-left:0;position:relative;left:-1px}
.connect_widget div.connect_confirmation_cell_no_like{padding-left:7px}
.connect_widget .vertical_centering{padding-top:5px}
.connect_widget .connect_widget_text{display:block;padding-left:17px;line-height:14px}
.button_count .connect_widget_interactive_area .connect_widget_text{padding-left:0;font-weight:bold}
.connect_widget .like_button_dark .connect_widget_text,.connect_widget .like_button_dark .connect_widget_confirmation{color:#808080}
.connect_widget .like_button_dark .connect_widget_text a{color:#fff}
.connect_widget .connect_widget_connect_button{float:left}
.connect_widget .connect_bar_widget_interactive_area{float:left}
.connect_widget .connect_bar_widget_text_cell{width:400px}
.connect_widget .connect_widget_icon{padding:4px 0 4px 4px;vertical-align:middle}
.connect_widget a.connect_widget_link_inactive{color:#808080;text-decoration:none;cursor:default}
.connect_widget a.connect_widget_error_text{color:#a00;font-weight:bold}
.transparent_widget .uiBoxLightblue{background-color:transparent;background-color:rgba(165, 175, 200, .2)}
.transparent_widget .uiBoxWhite,.transparent_widget .fbConnectWidgetFooter{background-color:transparent;background-color:rgba(255, 255, 255, .2)}
div.connect_widget_comment_box_nub{background:transparent url(http://static.ak.fbcdn.net/rsrc.php/v1/yn/r/vAOEfR4cWQM.gif) no-repeat 0 0;height:12px;left:-6px;position:absolute;top:6px;width:20px;z-index:3}
div.connect_widget_comment_box_upward_nub{background:transparent url(http://static.ak.fbcdn.net/rsrc.php/v1/yv/r/agyQHs6yLID.gif) no-repeat 0 0;height:12px;left:5px;position:absolute;top:-6px;width:20px;z-index:3}
.connect_widget_rtl div.connect_widget_comment_box_nub{background:transparent url(http://static.ak.fbcdn.net/rsrc.php/v1/yK/r/R95msRfVr6a.gif) no-repeat 0 0;left:-20px}
.connect_widget div.connect_widget_comment_box{background-color:#fff;border-color:#000;border-style:solid;border-width:1px 1px 2px 1px;position:relative;z-index:100}
.connect_widget div.connect_widget_comment_box.like_button_dark{background-color:#111;color:#ccc;border-color:#666}
.connect_widget div.like_button_dark input.connect_widget_comment_textinput{background-color:#666;border-color:#666;color:#dedede}
.connect_widget div.connect_widget_header_text{float:left;height:20;overflow:hidden;padding-left:7px;padding-top:3px;width:200}
.connect_widget div.connect_widget_cancel_button{cursor:pointer;float:right;padding-right:7px;padding-top:3px}
.connect_widget div.connect_widget_comment_text_area_div{padding-left:7px;padding-top:2px}
.connect_widget div.connect_widget_comment_area{padding:8px}
.connect_widget .connect_widget_comment_textinput{width:325px}
.connect_widget .connect_widget_comment_summary{padding:7px 5px 7px 5px}
.connect_widget .connect_widget_comment_button{margin-left:-1px}
.connect_widget .connect_widget_comment_close_button{margin-left:2px}
.connect_widget .like_button_dark .connect_widget_comment_close_button{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yE/r/htZktl244wt.png);background-repeat:none;opacity:.7}
.connect_widget .like_button_dark .connect_widget_comment_close_button:hover{opacity:1}
.connect_widget textarea.connect_widget_comment_text_area{height:30px;width:476px}
.connect_widget .connect_widget_image{height:30px;width:30px;padding-top:3px;vertical-align:bottom}
.connect_widget a.name_tooltip_link{display:block}
.connect_widget a.name_tooltip_link .uiTooltipWrap:hover{display:none}
.connect_widget .connect_widget_name{text-align:center}
.connect_widget .connect_widget_sample_connection{float:left;padding-right:3px;width:30px;padding-top:5px}
.connect_widget .connect_widget_user_not_connected{display:none}
.connect_widget .connect_bar_widget_sample_connections{float:right}
.connect_widget .connect_widget_whats_this{color:#999;font-size: 9px;padding-top:4px}
.connect_widget .connect_widget_whats_this a:hover{color:#3b5998;text-decoration:none}
.connect_widget .page_stream img{max-width:120px}
.connect_widget_like_button .liketext{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/y7/r/ql9vukDCc4R.png) -1px -33px no-repeat}
.connect_widget a.like_button_no_like:hover .piece,.connect_widget a.like_button_no_like:hover{background-color:#eceef5;border-color:#9dacce}
.uiTooltipWrap{display:none}
.connect_widget .like_button_like ,
.connect_widget .like_button_like .piece{background-color:#eee;border-color:#ddd;cursor:default}
.connect_widget .like_button_dark .like_button_like ,
.connect_widget .like_button_dark .like_button_like .piece{background-color:#444;border-color:#555;cursor:default}
.connect_widget .like_button_like .corner{background-position:10px -229px}
.connect_widget .like_button_dark .like_button_like .corner{background-position:10px -223px}
.connect_widget .like_button_like .liketext{background-image:none;clear:right;color:#aaa}
.connect_widget .tombstone_cross{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/y7/r/ql9vukDCc4R.png) no-repeat 0 -128px;display:block;float:left;height:12px;margin-right:3px;width:14px;z-index:99}
.connect_widget .tombstone_cross_static{cursor:default}
.like_button_no_like .tombstone_cross{display:none}
.like_button_like .tombstone_cross{display:block}
.connect_widget .like_button_dark .like_button_like .tombstone_cross{background:url(http://static.ak.fbcdn.net/rsrc.php/v1/y7/r/ql9vukDCc4R.png) no-repeat 0 -156px}
.connect_widget .like_button_like .tombstone_cross:hover{background-position:0 -235px;cursor:pointer}
.connect_widget .like_button_like .tombstone_cross_static:hover{background-position:0 -128px;cursor:default}
.connect_widget .like_button_simple .like_button_like .tombstone_cross:hover{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/y7/r/ql9vukDCc4R.png);background-position:0 -128px;cursor:auto;height:12px;margin-left:0;margin-right:3px;margin-top:0;width:14px}
.connect_widget .like_button_dark .like_button_like .tombstone_cross:hover{background-position:0 -247px}
.connect_widget .connect_button_container .like_button_like .liketext,
.connect_widget .connect_widget_connect_button .like_button_like .liketext{padding-left:17px}
.connect_widget_comment_box div.connect_widget_comment_box_nub{background:none}
.connect_widget .like_button_dark .like_button_like .liketext{color:#666}
div.connect_widget div.connect_confirmation_cell_like{padding-left:7px}
body.plugin{background:transparent;overflow-y:visible}
#bootloader_6McSL { height: 42px; }
------------UAMIZgc77nT2aFBV02afBr
Content-Disposition: inline; filename=JyuWmmwrBNj.css
Content-Type: text/css; charset=utf-8; name=JyuWmmwrBNj.css
Content-Location: http://static.ak.fbcdn.net/rsrc.php/v1/yI/r/JyuWmmwrBNj.css
Content-Transfer-Encoding: 8bit
/*1313997602,176820406*/
form{margin:0;padding:0}
label{cursor:pointer;color:#666;font-weight:bold;vertical-align:middle}
label input{font-weight:normal}
textarea,.inputtext,.inputpassword{border:1px solid #bdc7d8;font-family:"lucida grande",tahoma,verdana,arial,sans-serif;font-size: 11px;padding:3px}
select{border:1px solid #bdc7d8;font-family:"lucida grande",tahoma,verdana,arial,sans-serif;font-size: 11px;padding:2px}
.inputtext,.inputpassword{margin:0;padding-bottom:4px}
.inputradio{padding:0;margin:0 5px 0 0;vertical-align:middle}
.inputcheckbox{border:0;vertical-align:middle}
.inputbutton,.inputsubmit{border-style:solid;border-width:1px;border-color:#d9dfea #0e1f5b #0e1f5b #d9dfea;background-color:#3b5998;color:#fff;padding:2px 15px 3px 15px;text-align:center}
.inputsubmit_disabled{background-color:#999;border-bottom:1px solid #000;border-right:1px solid #666;color:#fff}
.inputaux{background:#f0f0f0;border-color:#e7e7e7 #666 #666 #e7e7e7;color:#000}
.inputaux_disabled{color:#999}
.inputsearch{background:#fff url(http://static.ak.fbcdn.net/rsrc.php/v1/yV/r/IJYgcESal33.png) no-repeat left 4px;padding-left:17px}
body{background:#fff;font-size: 11px;font-family:"lucida grande",tahoma,verdana,arial,sans-serif;color:#333;line-height:1.28;margin:0;padding:0;text-align:left;direction:ltr;unicode-bidi:embed}
h1,h2,h3,h4,h5,h6{font-size: 13px;color:#333;margin:0;padding:0}
h1{font-size: 14px}
h4,h5{font-size: 11px}
p{margin:1em 0}
a{cursor:pointer;color:#3b5998;text-decoration:none}
a:hover{text-decoration:underline}
img{border:0}
td,td.label{font-size: 11px;text-align:left}
dd{color:#000}
dt{color:#777}
ul{list-style-type:none;margin:0;padding:0}
abbr{border-bottom:none}
hr{background:#d9d9d9;border-width:0;color:#d9d9d9;height:1px}
.clearfix:after{clear:both;content:".";display:block;font-size:0;height:0;line-height:0;visibility:hidden}
.clearfix{zoom:1}
.datawrap{word-wrap:break-word}
.word_break{display:block;float:left;margin-left:-10px;padding:0}
.img_loading{position:absolute;top:-9999999px}
.aero{opacity:.5}
.column{float:left}
.center{margin-left:auto;margin-right:auto}
#facebook .hidden_elem{display:none !important}
#facebook .invisible_elem{visibility:hidden}
.direction_ltr{direction:ltr}
.direction_rtl{direction:rtl}
.text_align_ltr{text-align:left}
.text_align_rtl{text-align:right}
.DOMControl_placeholder{color:#777}
.no_js .DOMControl_placeholder{color:#000}
body{overflow-y:scroll}
.mini_iframe,.serverfbml_iframe{overflow-y:visible}
.auto_resize_iframe{height:auto;overflow:hidden}
.pipe{color:#808080;padding:0 3px}
#content{width:auto;padding:0;margin:0}
.profile #content,.home #content,.search #content{min-height:600px}
.UIStandardFrame_Container{width:960px;padding:0;margin:20px auto 0}
.UIStandardFrame_Content{width:760px;float:left;margin:0;padding:0}
.UIStandardFrame_SidebarAds{width:200px;padding:0;margin:0;float:right}
.UIFullPage_Container{width:940px;padding:0 12px;margin:20px auto 0}
.empty_message{font-size: 13px;line-height:17px;padding:20px 20px 50px 20px;text-align:center;background:#f7f7f7}
.see_all{text-align:right}
.standard_status_element{visibility:hidden}
.standard_status_element.async_saving{visibility:visible}
img.tracking_pixel{height:1px;position:absolute;visibility:hidden;width:1px}
#dropmenu_container{display:block;height:0;margin:0 auto;padding:0;position:absolute;width:964px;z-index:300}
.fbx #pageFooter{margin:auto;width:auto}
.hasLeftCol #pageFooter{background-color:#fff;clear:both;margin-left:180px}
#pagefooter{border-top:0}
#pageFooter{color:#737373;font-size: 11px;margin:0 auto;width:980px}
#pageFooter a{text-decoration:none;white-space:nowrap}
#pageFooter a:last-child{margin-right:0}
#pageFooter a:hover{text-decoration:underline}
#contentCurve{background-color:#fff;border-bottom:1px solid #b3b3b3;height:8px;font-size: 1px}
.hasLeftCol #contentCurve{border:1px solid #b3b3b3;border-top:none;position:relative}
#footerContainer{border-top:1px solid #eee;margin-bottom:30px;padding:8px;position:relative}
#footerContainer .navigation{text-align:right}
#pageHead{margin:0 auto;width:980px}
.fbx #pageHead{margin:0;width:auto}
#pageLogo{float:left;margin-left:-6px;z-index:5}
#pageLogo a{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yT/r/NX3n_HpWkby.png);background-repeat:no-repeat;background-position:-104px -235px;background-color:#3b5998;display:block;height:31px;width:103px}
#pageLogo a:hover,#pageLogo a:focus,#pageLogo a:active{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yT/r/NX3n_HpWkby.png);background-repeat:no-repeat;background-position:0 -235px;background-color:#4b67a1;outline:none}
#headNav{background-color:#627aad;border:1px solid #1d4088;border-bottom:0;height:30px;margin-left:180px}
#pageNav li{float:left}
#pageNav a{color:#fff;display:block;display:inline-block;font-weight:bold;height:22px;padding:8px 10px 0 10px;text-decoration:none}
#pageNav a:hover,#pageNav a:focus,#pageNav a:active{outline:none;background-color:#6d86b7}
#navAccount{position:relative}
#navAccount.openToggler,.no_js #navAccount:hover{background-color:#fff;border:1px solid #333;border-bottom:0;margin:-1px -1px 0}
#navAccount #navAccountLink{padding-right:16px;zoom:1}
.openToggler #navAccountLink,.no_js #navAccount:hover #navAccountLink{background-color:#fff;color:#333;position:relative;z-index:2}
.openToggler #navAccountLink:hover,.openToggler #navAccountLink:focus,.openToggler #navAccountLink:active,.no_js #navAccountLink:hover{background-color:#fff}
#navAccountLink .accountPulldown{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yT/r/NX3n_HpWkby.png);background-repeat:no-repeat;background-position:-304px -90px;height:4px;left:5px;position:relative;top:-2px;width:7px}
.openToggler #navAccountLink .dropMenuDivide,.no_js #navAccount:hover #navAccountLink .dropMenuDivide{background:#e0e0e0}
.openToggler #navAccountLink .accountPulldown,.no_js #navAccount:hover #navAccountLink .accountPulldown{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yT/r/NX3n_HpWkby.png);background-repeat:no-repeat;background-position:-296px -90px}
#navAccount ul{background:#fff;border:1px solid #333;border-bottom:2px solid #2d4486;display:none;margin-right:-1px;margin-top:-1px;min-width:200px;padding:10px 0 5px;position:absolute;right:0;top:100%;z-index:1}
#navAccount.openToggler ul,.no_js #navAccount:hover ul{display:block}
#navAccount ul .logoutButton{display:block}
#navAccount .logoutButton:hover{text-decoration:none}
#navAccount .logoutButton input{width:100%;text-align:left;outline:0}
#navAccount ul a,#navAccount ul .logoutButton input{color:#3a579a;display:block;font-weight:normal;height:auto;padding:4px 10px 5px;white-space:nowrap}
#navAccount ul a:hover,#navAccount ul a:focus,#navAccount ul a:active,#navAccount .logoutButton:hover input,#navAccount .logoutButton input:active,#navAccount .logoutButton input:focus{background:#6d84b4;border-bottom:1px solid #3b5998;border-top:1px solid #3b5998;color:#fff;padding:3px 10px 4px;text-decoration:none}
#navAccount li{display:block;float:none}
#navAccountInfo{border-bottom:1px solid #e0e0e0;min-height:55px;position:relative;margin:5px 4px;padding:0 6px 0 64px}
ul #navAccountInfo a:hover,ul #navAccountInfo a:focus,ul #navAccountInfo a:active{background:none;border:none;color:#3b5998;padding:4px 10px 5px;text-decoration:underline}
#navAccountInfo #navAccountPic{left:-5px;margin:0;position:absolute;top:-9px}
#navAccountInfo #navAccountPic img{width:50px;height:50px}
#navAccount #navAccountName{font-size: 13px;font-weight:bold;margin:0;padding:0 !important}
#navSearch{margin:4px 0 0 4px;width:350px}
#navSearch .uiSearchInput{border:0}
#navSearch .uiSearchInput input{width:315px}
#navSearch .uiTypeahead,#navSearch .uiTypeahead .wrap{border-color:#3b5998;z-index:100}
.fbJewel{float:left;margin-right:-1px}
#jewelContainer{float:left;position:relative;z-index:4}
#jewelContainer .hasNew,#jewelContainer .openToggler{position:relative}
.fbJewel .jewelCount{background-color:#00376a;border-radius:2px;color:#fff;display:none;font-size: 9px;font-weight:bold;padding-bottom:1px;position:absolute;right:-1px;top:-1px;z-index:101}
#jewelContainer .hasNew .jewelCount{display:block}
#jewelContainer .openToggler .jewelCount{display:none}
.fbJewel .jewelCount span{background-color:#f03d25;border:1px solid #dd3822;border-radius:2px;border-top:0;display:block;padding:1px 1px 0}
.fbJewel a.jewelButton{display:block;height:31px;text-decoration:none;margin:0 1px;width:24px}
.fbJewel a.jewelButton:active,.fbJewel a.jewelButton:focus,.fbJewel a.jewelButton:hover{background-color:#4b67a1;outline:none;text-decoration:none}
#jewelContainer .openToggler .jewelButton{background-color:#fff !important;border:1px solid #333;border-bottom:0;height:30px;margin:0}
.fbJewelFlyout{background-color:#fff;border:1px solid #333;border-bottom:2px solid #293e6a;left:0;overflow:visible;position:absolute;top:30px;width:330px;z-index:-1}
.fbJewelFlyout .metadata{padding-top:3px}
.fbJewelFlyout ul{padding:4px 0}
.fbJewelFlyout .jewelHighlight .empty{border:none;padding:4px 8px}
.fbJewelFlyout .jewelHighlight li a{color:#333;display:block;padding:4px 8px;text-decoration:none}
.fbJewelFlyout .jewelHighlight li a:hover,.fbJewelFlyout .jewelHighlight li a:active,.fbJewelFlyout .jewelHighlight li a:focus{background-color:#6d84b4 !important;border-bottom:1px solid #3b5998;border-top:1px solid #3b5998;outline:none;padding-top:3px;padding-bottom:3px;text-decoration:none}
.fbJewelFlyout .jewelHighlight a:hover span,.fbJewelFlyout .jewelHighlight a:active span,.fbJewelFlyout .jewelHighlight a:focus span,.fbJewelFlyout .jewelHighlight a:hover div,.fbJewelFlyout .jewelHighlight a:active div,.fbJewelFlyout .jewelHighlight a:focus div,.fbJewelFlyout .jewelHighlight li.selected a,.fbJewelFlyout .jewelHighlight li.selected .timestamp{color:#fff}
.fbJewelFlyout .jewelHighlight li{cursor:pointer;border-top:1px solid #e6e6e6}
.fbJewelFlyout .jewelHighlight li:first-child{border-top:none}
.fbJewelFlyout li.jewelItemNew{background:#eff1f7}
.fbJewelFlyout .jewelLoading{display:block;margin:10px auto}
.fbJewelFlyout .jewelHeader{padding:7px 8px 7px 8px;border-color:#ddd}
.fbJewelFlyout .jewelFooter a{background-color:#f7f7f7;border-top:1px solid #e0e0e0;display:block;font-weight:bold;padding:8px;text-align:center}
.fbJewelFlyout .jewelFooter a:hover,.fbJewelFlyout .jewelFooter a:active,.fbJewelFlyout .jewelFooter a:focus{background-color:#6d84b4;border-top:1px solid #3b5998;color:#fff;outline:none;text-decoration:none}
.fbJewelFlyout .jewelFooter .seeMoreCount{display:none;font-weight:bold;padding:2px 0 0}
.fbJewelFlyout .jewelUnread .seeMoreCount{display:block}
.fbJewelFlyout .jewelFooter a:hover .seeMoreCount,.fbJewelFlyout .jewelFooter a:active .seeMoreCount,.fbJewelFlyout .jewelFooter a:focus .seeMoreCount{color:#e7e7e7}
#fbMessagesJewel a.jewelButton{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yT/r/NX3n_HpWkby.png);background-repeat:no-repeat;background-position:-267px -179px}
#fbMessagesJewel a.jewelButton:active,#fbMessagesJewel a.jewelButton:focus,#fbMessagesJewel a.jewelButton:hover{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yT/r/NX3n_HpWkby.png);background-repeat:no-repeat;background-position:-267px -115px}
#fbMessagesJewel.hasNew a.jewelButton{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yT/r/NX3n_HpWkby.png);background-repeat:no-repeat;background-position:-267px -147px}
#fbMessagesJewel.openToggler a.jewelButton{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yT/r/NX3n_HpWkby.png) !important;background-repeat:no-repeat !important;background-position:-233px -235px !important}
#fbMessagesFlyout{left:25px}
#fbMessagesFlyout li a{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#fbMessagesFlyout .content{display:block;width:auto}
#fbMessagesFlyout .author{color:#3b5998;font-weight:bold;padding-top:2px;white-space:normal}
#fbMessagesFlyout .preview{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#fbMessagesFlyout .subject{color:#333}
#fbMessagesFlyout .time{color:#9d9d9d;font-size: 9px}
#fbMessagesFlyout a:hover .author,#fbMessagesFlyout a:hover .preview,#fbMessagesFlyout a:hover .subject,#fbMessagesFlyout a:hover .time{color:#fff}
.noMessages #fbNotificationsJewel{margin-left:25px}
#fbNotificationsJewel a.jewelButton{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yT/r/NX3n_HpWkby.png);background-repeat:no-repeat;background-position:-139px -267px}
#fbNotificationsJewel a.jewelButton:active,#fbNotificationsJewel a.jewelButton:focus,#fbNotificationsJewel a.jewelButton:hover{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yT/r/NX3n_HpWkby.png);background-repeat:no-repeat;background-position:-89px -267px}
#fbNotificationsJewel.hasNew a.jewelButton{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yT/r/NX3n_HpWkby.png);background-repeat:no-repeat;background-position:-114px -267px}
#fbNotificationsJewel.openToggler a.jewelButton{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yT/r/NX3n_HpWkby.png) !important;background-repeat:no-repeat !important;background-position:-258px -235px !important}
#fbNotificationsFlyout{left:50px}
#fbNotificationsFlyout a:hover .blueName{color:#fff}
#fbNotificationsFlyout .blueName{color:#3b5998;font-weight:bold}
#fbNotificationsFlyout .staticAppIcon{background-position:right;height:16px;width:16px}
#fbNotificationsFlyout .selected .staticAppIcon{background-position:left}
#fbNotificationsFlyout .info{max-width:259px;word-wrap:break-word}
#fbRequestsJewel a.jewelButton{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yT/r/NX3n_HpWkby.png);background-repeat:no-repeat;background-position:-164px -267px}
#fbRequestsJewel a.jewelButton:active,#fbRequestsJewel a.jewelButton:focus,#fbRequestsJewel a.jewelButton:hover{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yT/r/NX3n_HpWkby.png);background-repeat:no-repeat;background-position:-271px -32px}
#fbRequestsJewel.hasNew a.jewelButton{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yT/r/NX3n_HpWkby.png);background-repeat:no-repeat;background-position:-271px -64px}
#fbRequestsJewel.openToggler a.jewelButton{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yT/r/NX3n_HpWkby.png) !important;background-repeat:no-repeat !important;background-position:-208px -235px !important}
#fbRequestsFlyout ul.jewelItemList{padding-top:4px;padding-bottom:0}
#fbRequestsFlyout li{padding:4px 8px}
#fbRequestsFlyout .jewelHighlight li{padding:0}
#fbRequestsFlyout li.empty,#fbRequestsFlyout .jewelHighlight li.empty{color:#757575;padding:4px 8px 10px 8px}
#fbRequestsFlyout .fbRequestMessageWrapper{white-space:nowrap}
#fbRequestsFlyout .fbRequestMessage{display:inline-block;max-width:169px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#fbRequestsFlyout .jewelHighlight .title{color:#3b5998}
#fbRequestsFlyout .jewelHighlight .mutualFriends{color:#808080}
#fbRequestsFlyout .jewelHighlight a:hover .title,#fbRequestsFlyout .jewelHighlight a:focus .title,#fbRequestsFlyout .jewelHighlight a:active .title,#fbRequestsFlyout .jewelHighlight a:hover .mutualFriends,#fbRequestsFlyout .jewelHighlight a:focus .mutualFriends,#fbRequestsFlyout .jewelHighlight a:active .mutualFriends{color:#fff}
#fbRequestsFlyout .jewelRequest .jewelRequestContent{padding-top:5px}
#fbRequestsFlyout .title{font-size: 11px}
#fbRequestsFlyout .requestLabel{line-height:12px}
#fbRequestsFlyout .jewelFooter .seeMoreCount{display:block}
.contextual_dialog .generic_dialog_popup{padding-top:9px;position:absolute;width:360px}
.contextual_dialog .arrow{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yh/r/exdyUfVOjrJ.png);background-repeat:no-repeat;background-position:-156px -152px;height:9px;margin-left:25px;margin-top:-2px;position:absolute;top:4px;width:13px}
.contextual_dialog .contextual_dialog_content{background:#fff;border:1px solid #333;border-bottom:2px solid #283e6a;line-height:15px}
.contextual_dialog .contextual_dialog_content div.dialog_loading{background:#fff;border:0}
.contextual_dialog .dialog_title{color:#000;font-size: 11px;padding-bottom:2px;padding:8px 10px 0}
.contextual_dialog .dialog_body{padding:8px 10px}
.contextual_dialog .dialog_buttons{background-color:#f2f2f2;border-top:1px solid #ccc;padding:8px 10px}
.contextual_dialog .dialog_buttons_msg{float:right}
.uiSearchInput{background:#fff;border:1px solid #899bc1;border-top-color:#6484b4;display:inline-block}
.uiSearchInput span{border:0;border-top:1px solid #ededed;display:inline-block;padding:1px 0 2px;position:relative}
.uiSearchInput input{border:0;border-right:1px solid #e5e5e5;margin:0 22px 0 5px;outline:none;padding:1px 5px 2px 0;width:190px}
.uiSearchInput button{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v1/yT/r/NX3n_HpWkby.png);background-repeat:no-repeat;background-position:-267px -211px;background-color:#fff;border:0;cursor:pointer;display:block;height:19px;padding:0;position:absolute;right:0;top:0;width:22px}
.objectListItem{padding-bottom:8px;padding-top:8px}
.passive .objectListItem{color:#808080}
.objectListItem .auxiliary{text-align:right}
.uiTypeaheadView .search ul{padding:0}
.uiTypeaheadView .search li{min-height:50px;padding:2px 30px 2px 63px}
.uiTypeaheadView .search li a{outline:none}
.uiTypeaheadView .search li a:hover{text-decoration:none}
.uiTypeaheadView .search img{background-color:#eceff5;display:block;height:50px;left:6px;position:absolute;width:50px}
.uiTypeaheadView .search .text{color:#3b5998;font-weight:bold}
.uiTypeaheadView .search .subtext{font-size: 9px}
.uiTypeaheadView .search .seeMore{color:#3b5998;font-size: 11px;font-weight:bold;padding-bottom:0;padding-right:7px}
.uiTypeaheadView .search .web{padding:2px 15px 2px 6px}
.uiTypeaheadView .search .song .rColumn{color:#666;float:right;padding-top:17px}
.uiTypeaheadView .search .question{min-height:14px;padding:3px 30px 3px 6px}
.uiTypeaheadView .search .question .text{display:inline}
.uiTypeaheadView .search .question .subtext{display:inline;margin-left:5px;white-space:nowrap}
.uiTypeaheadView .search .friendlist .photo{background-color:transparent}
.uiTypeaheadView .search .header{background-color:#f2f2f2;border-top-color:#e2e2e2;margin-top:4px;min-height:10px;padding:2px 15px 2px 6px;border-bottom:none}
.uiTypeaheadView .search li:first-child{border-top:none;margin-top:0}
.uiTypeaheadView .search .header .text{color:#000}
.uiTypeaheadView .search .selected.header .text{color:#000 !important}
#bootloader_99rq0 { height: 42px; }
------------UAMIZgc77nT2aFBV02afBr
Content-Disposition: inline; filename=gK0PYC9f6km.js
Content-Type: application/x-javascript; charset=utf-8; name=gK0PYC9f6km.js
Content-Location: http://static.ak.fbcdn.net/rsrc.php/v1/yN/r/gK0PYC9f6km.js
Content-Transfer-Encoding: Base64
LyoxMzE0MTM0OTU1LDE2OTc3NTgxNCovCgppZiAod2luZG93LkNhdmFscnlMb2dn
ZXIpIHsgQ2F2YWxyeUxvZ2dlci5zdGFydF9qcyhbIjJwTEFMIl0pOyB9Cgp2b2lk
KDEpO3dpbmRvdy5fX0RFVl9fPXdpbmRvdy5fX0RFVl9ffHwwO2lmKCF3aW5kb3cu
c2tpcERvbWFpbkxvd2VyJiZuYXZpZ2F0b3ImJm5hdmlnYXRvci51c2VyQWdlbnQm
JmRvY3VtZW50LmRvbWFpbi50b0xvd2VyQ2FzZSgpLm1hdGNoKC8oXnxcLilmYWNl
Ym9va1wuLiovKSYmIShwYXJzZUludCgoL0dlY2tvXC8oWzAtOV0rKS8uZXhlYyhu
YXZpZ2F0b3IudXNlckFnZW50KXx8W10pLnBvcCgpLDEwKTw9MjAwNjA1MDgpKWRv
Y3VtZW50LmRvbWFpbj13aW5kb3cubG9jYXRpb24uaG9zdG5hbWUucmVwbGFjZSgv
Xi4qKGZhY2Vib29rXC4uKikkL2ksJyQxJyk7d2luZG93Lm9ubG9hZGhvb2tzPXdp
bmRvdy5vbmxvYWRob29rc3x8W107d2luZG93Lm9ubG9hZFJlZ2lzdGVyPXdpbmRv
dy5vbmxvYWRSZWdpc3Rlcnx8ZnVuY3Rpb24oYSl7b25sb2FkaG9va3MucHVzaChh
KTt9O3dpbmRvdy5vbmFmdGVybG9hZGhvb2tzPXdpbmRvdy5vbmFmdGVybG9hZGhv
b2tzfHxbXTt3aW5kb3cub25hZnRlcmxvYWRSZWdpc3Rlcj13aW5kb3cub25hZnRl
cmxvYWRSZWdpc3Rlcnx8ZnVuY3Rpb24oYSl7b25hZnRlcmxvYWRob29rcy5wdXNo
KGEpO307ZnVuY3Rpb24gcnVuX2lmX2xvYWRlZChhLGIpe3JldHVybiB3aW5kb3cu
bG9hZGVkJiZiLmNhbGwoYSk7fWZ1bmN0aW9uIHJ1bl93aXRoKGIsYSxjKXtCb290
bG9hZGVyLmxvYWRDb21wb25lbnRzKGEsYmluZChiLGMpKTtyZXR1cm4gZmFsc2U7
fWZ1bmN0aW9uIHdhaXRfZm9yX2xvYWQoYyxiLGUpe2U9YmluZChjLGUsYik7aWYo
d2luZG93LmxvYWRlZClyZXR1cm4gZSgpO3N3aXRjaCgoYnx8ZXZlbnQpLnR5cGUp
e2Nhc2UgJ2xvYWQnOmNhc2UgJ2ZvY3VzJzpvbmFmdGVybG9hZFJlZ2lzdGVyKGUp
O3JldHVybjtjYXNlICdjbGljayc6dmFyIGQ9Yy5zdHlsZSxhPWRvY3VtZW50LmJv
ZHkuc3R5bGU7ZC5jdXJzb3I9YS5jdXJzb3I9J3Byb2dyZXNzJztvbmFmdGVybG9h
ZFJlZ2lzdGVyKGZ1bmN0aW9uKCl7ZC5jdXJzb3I9YS5jdXJzb3I9Jyc7aWYoYy50
YWdOYW1lLnRvTG93ZXJDYXNlKCk9PSdhJyl7aWYoZmFsc2UhPT1lKCkmJmMuaHJl
Zil3aW5kb3cubG9jYXRpb24uaHJlZj1jLmhyZWY7fWVsc2UgaWYoYy5jbGljaylj
LmNsaWNrKCk7fSk7YnJlYWs7fXJldHVybiBmYWxzZTt9ZnVuY3Rpb24gYmluZChk
LGMpe3ZhciBhPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywy
KTtmdW5jdGlvbiBiKCl7dmFyIGY9ZHx8KHRoaXM9PXdpbmRvdz9mYWxzZTp0aGlz
KSxlPWEuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50
cykpO2lmKHR5cGVvZihjKT09InN0cmluZyIpe2lmKGZbY10pcmV0dXJuIGZbY10u
YXBwbHkoZixlKTt9ZWxzZSByZXR1cm4gYy5hcHBseShmLGUpO31yZXR1cm4gYjt9
dmFyIGN1cnJ5PWJpbmQobnVsbCxiaW5kLG51bGwpO2Z1bmN0aW9uIGVudl9nZXQo
YSl7cmV0dXJuIHdpbmRvdy5FbnYmJkVudlthXTt9ZG9jdW1lbnQuZG9jdW1lbnRF
bGVtZW50LmNsYXNzTmFtZT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NO
YW1lLnJlcGxhY2UoJ25vX2pzJywnJyk7CmZ1bmN0aW9uIGhhc0FycmF5TmF0dXJl
KGEpe3JldHVybiAoISFhJiYodHlwZW9mIGE9PSdvYmplY3QnfHx0eXBlb2YgYT09
J2Z1bmN0aW9uJykmJignbGVuZ3RoJyBpbiBhKSYmISgnc2V0SW50ZXJ2YWwnIGlu
IGEpJiYoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpPT09IltvYmpl
Y3QgQXJyYXldInx8KCdjYWxsZWUnIGluIGEpfHwoJ2l0ZW0nIGluIGEpKSk7fWZ1
bmN0aW9uICRBKGIpe2lmKCFoYXNBcnJheU5hdHVyZShiKSlyZXR1cm4gW2JdO2lm
KGIuaXRlbSl7dmFyIGE9Yi5sZW5ndGgsYz1uZXcgQXJyYXkoYSk7d2hpbGUoYS0t
KWNbYV09YlthXTtyZXR1cm4gYzt9cmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGlj
ZS5jYWxsKGIpO30KZnVuY3Rpb24gZXZhbF9nbG9iYWwoYyl7aWYoJ3N0cmluZych
PXR5cGVvZihjKSl7dGhyb3cgbmV3IEVycm9yKCdKUyBzZW50IHRvIGV2YWxfZ2xv
YmFsIGlzIG5vdCBhIHN0cmluZy4gIE9ubHkgc3RyaW5ncyAnKydhcmUgcGVybWl0
dGVkLicpO31lbHNlIGlmKCcnPT1jKXJldHVybjt2YXIgZD1kb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdzY3JpcHQnKTtkLnR5cGU9J3RleHQvamF2YXNjcmlwdCc7dHJ5
e2QuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYykpO31jYXRj
aChhKXtkLnRleHQ9Yzt9dmFyIGI9KGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdO
YW1lKCJoZWFkIilbMF18fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk7Yi5hcHBl
bmRDaGlsZChkKTtiLnJlbW92ZUNoaWxkKGQpO30KZnVuY3Rpb24gY29weV9wcm9w
ZXJ0aWVzKGIsYyl7Yj1ifHx7fTtjPWN8fHt9O2Zvcih2YXIgYSBpbiBjKWJbYV09
Y1thXTtpZihjLmhhc093blByb3BlcnR5JiZjLmhhc093blByb3BlcnR5KCd0b1N0
cmluZycpJiYodHlwZW9mIGMudG9TdHJpbmchPSd1bmRlZmluZWQnKSYmKGIudG9T
dHJpbmchPT1jLnRvU3RyaW5nKSliLnRvU3RyaW5nPWMudG9TdHJpbmc7cmV0dXJu
IGI7fWZ1bmN0aW9uIGFkZF9wcm9wZXJ0aWVzKGEsYil7cmV0dXJuIGNvcHlfcHJv
cGVydGllcyh3aW5kb3dbYV18fCh3aW5kb3dbYV09e30pLGIpO31mdW5jdGlvbiBp
c19lbXB0eShiKXtpZihiIGluc3RhbmNlb2YgQXJyYXkpe3JldHVybiBiLmxlbmd0
aD09MDt9ZWxzZSBpZihiIGluc3RhbmNlb2YgT2JqZWN0KXtmb3IodmFyIGEgaW4g
YilyZXR1cm4gZmFsc2U7cmV0dXJuIHRydWU7fWVsc2UgcmV0dXJuICFiO30KaWYo
IXdpbmRvdy5hc3luY19jYWxsYmFjayl3aW5kb3cuYXN5bmNfY2FsbGJhY2s9ZnVu
Y3Rpb24oYSxiKXtyZXR1cm4gYTt9O2Z1bmN0aW9uIEFyYml0ZXIoKXtjb3B5X3By
b3BlcnRpZXModGhpcyx7X2xpc3RlbmVyczpbXSxfZXZlbnRzOnt9LF9jYWxsYmFj
a3M6e30sX2xhc3RfaWQ6MSxfbGlzdGVuOnt9LF9pbmRleDp7fX0pO2NvcHlfcHJv
cGVydGllcyh0aGlzLEFyYml0ZXIpO31jb3B5X3Byb3BlcnRpZXMoQXJiaXRlcix7
U1VCU0NSSUJFX05FVzonbmV3JyxTVUJTQ1JJQkVfQUxMOidhbGwnLEJFSEFWSU9S
X0VWRU5UOidldmVudCcsQkVIQVZJT1JfUEVSU0lTVEVOVDoncGVyc2lzdGVudCcs
QkVIQVZJT1JfU1RBVEU6J3N0YXRlJyxMSVZFTUVTU0FHRTonbGl2ZW1lc3NhZ2Un
LEJPT1RMT0FEOidib290bG9hZCcsRlVOQ1RJT05fRVhURU5TSU9OOidmdW5jdGlv
bl9leHQnLENPTlRFWFRfQ0hBTkdFOid1aS9jb250ZXh0LWNoYW5nZScsUEFHRUNB
Q0hFX0lOVkFMSURBVEU6J3BhZ2VjYWNoZS9pbnZhbGlkYXRlJyxORVdfTk9USUZJ
Q0FUSU9OUzonY2hhdC9uZXdfbm90aWZpY2F0aW9ucycsTElTVF9FRElUT1JfTElT
VFNfQ0hBTkdFRDonbGlzdGVkaXRvci9mcmllbmRfbGlzdHNfY2hhbmdlZCcsQ0FS
T1VTRUxfUk9UQVRFOidjYXJvdXNlbC9yb3RhdGUnLHN1YnNjcmliZTpmdW5jdGlv
bihrLGIsaSl7aWYoIWt8fGsubGVuZ3RoPT0wKXJldHVybiBudWxsO2s9JEEoayk7
dmFyIGE9QXJiaXRlci5fZ2V0SW5zdGFuY2UodGhpcyk7YS5fbGlzdGVuZXJzLnB1
c2goe2NhbGxiYWNrOmIsdHlwZXM6a30pO3ZhciBoPWEuX2xpc3RlbmVycy5sZW5n
dGgtMTtmb3IodmFyIGQ9MDtkPGsubGVuZ3RoO2QrKylpZihhLl9pbmRleFtrW2Rd
XSl7YS5faW5kZXhba1tkXV0ucHVzaChoKTt9ZWxzZSBhLl9pbmRleFtrW2RdXT1b
aF07aT1pfHxBcmJpdGVyLlNVQlNDUklCRV9BTEw7aWYoaT09QXJiaXRlci5TVUJT
Q1JJQkVfQUxMKXt2YXIgYyxqLGc7Zm9yKHZhciBlPTA7ZTxrLmxlbmd0aDtlKysp
e2o9a1tlXTtpZihqIGluIGEuX2V2ZW50cylmb3IodmFyIGY9MDtmPGEuX2V2ZW50
c1tqXS5sZW5ndGg7ZisrKXtjPWEuX2V2ZW50c1tqXVtmXTtnPWIuYXBwbHkobnVs
bCxbaixjXSk7aWYoZz09PWZhbHNlKXthLl9ldmVudHNbal0uc3BsaWNlKGYsMSk7
Zi0tO319fX1yZXR1cm4ge3N1YnNjcmliZXJJRDpofTt9LHVuc3Vic2NyaWJlOmZ1
bmN0aW9uKGUpe3ZhciBhPUFyYml0ZXIuX2dldEluc3RhbmNlKHRoaXMpO3ZhciBj
PWEuX2xpc3RlbmVyc1tlLnN1YnNjcmliZXJJRF07aWYoIWMpcmV0dXJuO2Zvcih2
YXIgZD0wO2Q8Yy50eXBlcy5sZW5ndGg7ZCsrKXt2YXIgZj1jLnR5cGVzW2RdO2lm
KGEuX2luZGV4W2ZdKWZvcih2YXIgYj0wO2I8YS5faW5kZXhbZl0ubGVuZ3RoO2Ir
KylpZihhLl9pbmRleFtmXVtiXT09ZS5zdWJzY3JpYmVySUQpe2EuX2luZGV4W2Zd
LnNwbGljZShiLDEpO2lmKGEuX2luZGV4W2ZdLmxlbmd0aD09MClkZWxldGUgYS5f
aW5kZXhbZl07YnJlYWs7fX1kZWxldGUgYS5fbGlzdGVuZXJzW2Uuc3Vic2NyaWJl
cklEXTt9LGluZm9ybTpmdW5jdGlvbihqLGMsYil7dmFyIG09aGFzQXJyYXlOYXR1
cmUoaik7dmFyIGw9JEEoaik7dmFyIGE9QXJiaXRlci5fZ2V0SW5zdGFuY2UodGhp
cyk7dmFyIGk9e307Yj1ifHxBcmJpdGVyLkJFSEFWSU9SX0VWRU5UO2Zvcih2YXIg
ZT0wO2U8bC5sZW5ndGg7ZSsrKXt2YXIgaj1sW2VdLGQ9bnVsbDtpZihiPT1BcmJp
dGVyLkJFSEFWSU9SX1BFUlNJU1RFTlQpe2Q9YS5fZXZlbnRzLmxlbmd0aDtpZigh
KGogaW4gYS5fZXZlbnRzKSlhLl9ldmVudHNbal09W107YS5fZXZlbnRzW2pdLnB1
c2goYyk7YS5fZXZlbnRzW2pdLl9zdGF0ZWZ1bD1mYWxzZTt9ZWxzZSBpZihiPT1B
cmJpdGVyLkJFSEFWSU9SX1NUQVRFKXtkPTA7YS5fZXZlbnRzW2pdPVtjXTthLl9l
dmVudHNbal0uX3N0YXRlZnVsPXRydWU7fWVsc2UgaWYoaiBpbiBhLl9ldmVudHMp
YS5fZXZlbnRzW2pdLl9zdGF0ZWZ1bD1mYWxzZTt3aW5kb3cuQXJiaXRlck1vbml0
b3ImJkFyYml0ZXJNb25pdG9yLmxvZygnZXZlbnQnLGosYyxhKTt2YXIgaDtpZihh
Ll9pbmRleFtqXSl7dmFyIGs9JEEoYS5faW5kZXhbal0pO2Zvcih2YXIgZj0wO2Y8
ay5sZW5ndGg7ZisrKXt2YXIgZz1hLl9saXN0ZW5lcnNba1tmXV07aWYoZyl7aD1n
LmNhbGxiYWNrLmFwcGx5KG51bGwsW2osY10pO2lmKGg9PT1mYWxzZSl7aWYoZCE9
PW51bGwpYS5fZXZlbnRzW2pdLnNwbGljZShkLDEpO2JyZWFrO319fX1hLl91cGRh
dGVDYWxsYmFja3MoaixjKTt3aW5kb3cuQXJiaXRlck1vbml0b3ImJkFyYml0ZXJN
b25pdG9yLmxvZygnZG9uZScsaixjLGEpO2lbal09aDt9cmV0dXJuIG0/aTppW2xb
MF1dO30scXVlcnk6ZnVuY3Rpb24oYil7dmFyIGE9QXJiaXRlci5fZ2V0SW5zdGFu
Y2UodGhpcyk7aWYoIShiIGluIGEuX2V2ZW50cykpcmV0dXJuIG51bGw7aWYoYS5f
ZXZlbnRzW2JdLmxlbmd0aClyZXR1cm4gYS5fZXZlbnRzW2JdWzBdO3JldHVybiBu
dWxsO30sX2luc3RhbmNlOm51bGwsX2dldEluc3RhbmNlOmZ1bmN0aW9uKGEpe2lm
KGEgaW5zdGFuY2VvZiBBcmJpdGVyKXJldHVybiBhO2lmKCFBcmJpdGVyLl9pbnN0
YW5jZSlBcmJpdGVyLl9pbnN0YW5jZT1uZXcgQXJiaXRlcigpO3JldHVybiBBcmJp
dGVyLl9pbnN0YW5jZTt9LHJlZ2lzdGVyQ2FsbGJhY2s6ZnVuY3Rpb24oYixkKXt2
YXIgaCxjPTAsYT1BcmJpdGVyLl9nZXRJbnN0YW5jZSh0aGlzKSxnPWZhbHNlO2lm
KHR5cGVvZiBiPT0nZnVuY3Rpb24nKXtoPWEuX2xhc3RfaWQ7YS5fbGFzdF9pZCsr
O2c9dHJ1ZTt9ZWxzZXtpZighYS5fY2FsbGJhY2tzW2JdKXJldHVybiBudWxsO2g9
Yjt9aWYoaGFzQXJyYXlOYXR1cmUoZCkpe3ZhciBpPXt9O2Zvcih2YXIgZj0wO2Y8
ZC5sZW5ndGg7ZisrKWlbZFtmXV09MTtkPWk7fWZvcih2YXIgaiBpbiBkKXt0cnl7
aWYoYS5xdWVyeShqKSljb250aW51ZTt9Y2F0Y2goZSl7fWMrPWRbal07aWYoYS5f
bGlzdGVuW2pdPT09dW5kZWZpbmVkKWEuX2xpc3RlbltqXT17fTthLl9saXN0ZW5b
al1baF09KGEuX2xpc3RlbltqXVtoXXx8MCkrZFtqXTt9aWYoYz09MCYmZyl7Yigp
O3JldHVybiBudWxsO31pZighZyl7YS5fY2FsbGJhY2tzW2hdLmRlcG51bSs9Yzt9
ZWxzZSBhLl9jYWxsYmFja3NbaF09e2NhbGxiYWNrOmFzeW5jX2NhbGxiYWNrKGIs
J2FyYml0ZXInKSxkZXBudW06Y307cmV0dXJuIGg7fSxfdXBkYXRlQ2FsbGJhY2tz
OmZ1bmN0aW9uKGQsYyl7aWYoYz09PW51bGx8fCF0aGlzLl9saXN0ZW5bZF0pcmV0
dXJuO2Zvcih2YXIgYiBpbiB0aGlzLl9saXN0ZW5bZF0pe3RoaXMuX2xpc3Rlbltk
XVtiXS0tO2lmKHRoaXMuX2xpc3RlbltkXVtiXTw9MClkZWxldGUgdGhpcy5fbGlz
dGVuW2RdW2JdO3RoaXMuX2NhbGxiYWNrc1tiXS5kZXBudW0tLTtpZih0aGlzLl9j
YWxsYmFja3NbYl0uZGVwbnVtPD0wKXt2YXIgYT10aGlzLl9jYWxsYmFja3NbYl0u
Y2FsbGJhY2s7ZGVsZXRlIHRoaXMuX2NhbGxiYWNrc1tiXTthKCk7fX19fSk7CkZ1
bmN0aW9uLnByb3RvdHlwZS5kZWZlclVudGlsPWZ1bmN0aW9uKGEsaCxiLGkpe3Zh
ciBmPWEoKTtpZihmKXt0aGlzKGYpO3JldHVybiBudWxsO312YXIgZT10aGlzLGQ9
bnVsbCxnPSgrbmV3IERhdGUoKSk7dmFyIGM9ZnVuY3Rpb24oKXtmPWEoKTtpZigh
ZilpZihoJiYobmV3IERhdGUoKS1nKT49aCl7aSYmaSgpO31lbHNlIHJldHVybjtk
JiZjbGVhckludGVydmFsKGQpO2UoZik7fTtkPXNldEludGVydmFsKGMsMjAsYik7
cmV0dXJuIGQ7fTt2YXIgQm9vdGxvYWRlcj13aW5kb3cuQm9vdGxvYWRlcnx8e2Nv
bmZpZ3VyZVBhZ2U6ZnVuY3Rpb24oYSl7dmFyIGc9e307dmFyIGY9Qm9vdGxvYWRl
ci5yZXNvbHZlUmVzb3VyY2VzKGEpO3ZhciBiO2ZvcihiPTA7YjxmLmxlbmd0aDti
Kyspe2dbZltiXS5zcmNdPWZbYl07Qm9vdGxvYWRlci5yZXF1ZXN0ZWQoZltiXS5u
YW1lKTtCb290bG9hZGVyLl9zdGFydENTU1BvbGwoZltiXS5uYW1lKTt9dmFyIGQ9
ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2xpbmsnKTtmb3IoYj0wO2I8
ZC5sZW5ndGg7KytiKXtpZihkW2JdLnJlbCE9J3N0eWxlc2hlZXQnKWNvbnRpbnVl
O2Zvcih2YXIgYyBpbiBnKWlmKGRbYl0uaHJlZi5pbmRleE9mKGMpIT09LTEpe3Zh
ciBlPWdbY10ubmFtZTtCb290bG9hZGVyLl9jc3NMaW5rTWFwW2VdPXtsaW5rOmRb
Yl19O2lmKGdbY10ucGVybWFuZW50KUJvb3Rsb2FkZXIuX3Blcm1hbmVudFtlXT10
cnVlO2RlbGV0ZSBnW2NdO2JyZWFrO319fSxsb2FkQ29tcG9uZW50czpmdW5jdGlv
bihjLGEpe2M9JEEoYyk7dmFyIGY9W107Zm9yKHZhciBkPTA7ZDxjLmxlbmd0aDsr
K2Qpe2lmKCFjW2RdKWNvbnRpbnVlO3ZhciBiPUJvb3Rsb2FkZXIuX2NvbXBvbmVu
dE1hcFtjW2RdXTtpZighIWIpZm9yKHZhciBlPTA7ZTxiLmxlbmd0aDsrK2UpZi5w
dXNoKGJbZV0pO31yZXR1cm4gQm9vdGxvYWRlci5sb2FkUmVzb3VyY2VzKGYsYSk7
fSxsb2FkUmVzb3VyY2VzOmZ1bmN0aW9uKGcsYSxmLGope3ZhciBiO2c9Qm9vdGxv
YWRlci5yZXNvbHZlUmVzb3VyY2VzKCRBKGcpKTtpZihmKXt2YXIgZD17fTtmb3Io
Yj0wO2I8Zy5sZW5ndGg7KytiKWRbZ1tiXS5uYW1lXT10cnVlO2Zvcih2YXIgYyBp
biBCb290bG9hZGVyLl9yZXF1ZXN0ZWQpaWYoIShjIGluIEJvb3Rsb2FkZXIuX3Bl
cm1hbmVudCkmJiEoYyBpbiBkKSYmIShjIGluIEJvb3Rsb2FkZXIuX2Vhcmx5UmVz
b3VyY2VzKSlCb290bG9hZGVyLl91bmxvYWRSZXNvdXJjZShjKTtCb290bG9hZGVy
Ll9lYXJseVJlc291cmNlcz17fTt9dmFyIGs9W107dmFyIGU9W107Zm9yKGI9MDti
PGcubGVuZ3RoOysrYil7dmFyIGg9Z1tiXTtpZihoLnBlcm1hbmVudClCb290bG9h
ZGVyLl9wZXJtYW5lbnRbaC5uYW1lXT10cnVlO3ZhciBpPUFyYml0ZXIuQk9PVExP
QUQrJy8nK2gubmFtZTtpZihBcmJpdGVyLnF1ZXJ5KGkpIT09bnVsbCljb250aW51
ZTtpZighaC5ub25ibG9ja2luZyllLnB1c2goaSk7aWYoIUJvb3Rsb2FkZXIuX3Jl
cXVlc3RlZFtoLm5hbWVdKXtCb290bG9hZGVyLnJlcXVlc3RlZChoLm5hbWUpO2su
cHVzaChoKTt3aW5kb3cuQ2F2YWxyeUxvZ2dlciYmQ2F2YWxyeUxvZ2dlci5nZXRJ
bnN0YW5jZSgpLm1lYXN1cmVSZXNvdXJjZXMoaCxqKTt9fWlmKGEpYT1BcmJpdGVy
LnJlZ2lzdGVyQ2FsbGJhY2soYSxlKTtmb3IoYj0wO2I8ay5sZW5ndGg7KytiKUJv
b3Rsb2FkZXIucmVxdWVzdFJlc291cmNlKGtbYl0udHlwZSxrW2JdLnNyYyxrW2Jd
Lm5hbWUpO3JldHVybiBhO30scmVxdWVzdFJlc291cmNlOmZ1bmN0aW9uKGosZyxl
KXt2YXIgYj1Cb290bG9hZGVyLmdldEhhcmRwb2ludCgpO2lmKGo9PSdqcycpe3Zh
ciBmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO2Yuc3JjPWc7Zi50
eXBlPSd0ZXh0L2phdmFzY3JpcHQnO2YuYXN5bmM9dHJ1ZTt2YXIgYT1mdW5jdGlv
bigpe0Jvb3Rsb2FkZXIuZG9uZShbZV0pO307Zi5vbmxvYWQ9Zi5vbmVycm9yPWE7
Zi5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtpZih0aGlzLnJlYWR5U3Rh
dGUgaW4ge2xvYWRlZDoxLGNvbXBsZXRlOjF9KWEoKTt9O2IuYXBwZW5kQ2hpbGQo
Zik7fWVsc2UgaWYoaj09J2Nzcycpe2lmKGRvY3VtZW50LmNyZWF0ZVN0eWxlU2hl
ZXQpe3ZhciBoPUJvb3Rsb2FkZXIuX3N0eWxlVGFncyxpPS0xO2Zvcih2YXIgYz0w
O2M8aC5sZW5ndGg7YysrKWlmKGhbY10uaW1wb3J0cy5sZW5ndGg8MjUpe2k9Yzti
cmVhazt9aWYoaT09LTEpe2gucHVzaChkb2N1bWVudC5jcmVhdGVTdHlsZVNoZWV0
KCkpO2k9aC5sZW5ndGgtMTt9aFtpXS5hZGRJbXBvcnQoZyk7Qm9vdGxvYWRlci5f
Y3NzTGlua01hcFtlXT17dGFnSWR4OmksaHJlZjpnfTt9ZWxzZXt2YXIgZD1kb2N1
bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7ZC5yZWw9InN0eWxlc2hlZXQiO2Qu
dHlwZT0idGV4dC9jc3MiO2QubWVkaWE9ImFsbCI7ZC5ocmVmPWc7Qm9vdGxvYWRl
ci5fY3NzTGlua01hcFtlXT17bGluazpkfTtiLmFwcGVuZENoaWxkKGQpO31Cb290
bG9hZGVyLl9zdGFydENTU1BvbGwoZSk7fX0sX2FjdGl2ZUNTU1BvbGxzOnt9LF9l
eHBpcmVUaW1lOm51bGwsX3J1bkNTU1BvbGxzOmZ1bmN0aW9uKCl7dmFyIGU7dmFy
IGM9W107dmFyIGY9KCtuZXcgRGF0ZSgpKTtpZihmPj1Cb290bG9hZGVyLl9leHBp
cmVUaW1lKXtpZih3aW5kb3cuc2VuZF9lcnJvcl9zaWduYWwpaWYoTWF0aC5yYW5k
b20oKTwuMDEpc2VuZF9lcnJvcl9zaWduYWwoJ2pzX3RpbWVvdXRfYW5kX2V4Y2Vw
dGlvbicsJzAwMDAxOmVycm9yOkNTUyB0aW1lb3V0LicpO2ZvcihlIGluIEJvb3Rs
b2FkZXIuX2FjdGl2ZUNTU1BvbGxzKWMucHVzaChlKTtCb290bG9hZGVyLmRvbmUo
Yyx0cnVlKTtCb290bG9hZGVyLl9hY3RpdmVDU1NQb2xscz17fTt9ZWxzZXt2YXIg
ZD1Cb290bG9hZGVyLl9DU1NfRVhQRUNURURfSEVJR0hUO3ZhciBhO2ZvcihlIGlu
IEJvb3Rsb2FkZXIuX2FjdGl2ZUNTU1BvbGxzKXt2YXIgYj1Cb290bG9hZGVyLl9h
Y3RpdmVDU1NQb2xsc1tlXTt2YXIgZz1iLm9mZnNldEhlaWdodD09ZHx8Yi5jdXJy
ZW50U3R5bGUmJmIuY3VycmVudFN0eWxlLmhlaWdodD09ZCsncHgnfHx3aW5kb3cu
Z2V0Q29tcHV0ZWRTdHlsZSYmKGE9ZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29t
cHV0ZWRTdHlsZShiLG51bGwpKSYmYS5nZXRQcm9wZXJ0eVZhbHVlKCdoZWlnaHQn
KT09ZCsncHgnO2lmKGcpe2MucHVzaChlKTtiLnBhcmVudE5vZGUucmVtb3ZlQ2hp
bGQoYik7ZGVsZXRlIEJvb3Rsb2FkZXIuX2FjdGl2ZUNTU1BvbGxzW2VdO319aWYo
IWlzX2VtcHR5KGMpKXtCb290bG9hZGVyLmRvbmUoYyx0cnVlKTtCb290bG9hZGVy
Ll9leHBpcmVUaW1lPWYrQm9vdGxvYWRlci5fQ1NTX1BPTExfRVhQSVJBVElPTjt9
fXJldHVybiBpc19lbXB0eShCb290bG9hZGVyLl9hY3RpdmVDU1NQb2xscyk7fSxf
c3RhcnRDU1NQb2xsOmZ1bmN0aW9uKGMpe3ZhciBiPSdib290bG9hZGVyXycrYy5y
ZXBsYWNlKC9bXmEtejAtOV0vaWcsJ18nKTt2YXIgYT1iYWdvZmhvbGRpbmc7KGZ1
bmN0aW9uKCl7dmFyIGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7ZC5p
ZD1iO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZCk7Qm9vdGxvYWRlci5fZXhw
aXJlVGltZT0oK25ldyBEYXRlKCkpK0Jvb3Rsb2FkZXIuX0NTU19QT0xMX0VYUElS
QVRJT047dmFyIGY9aXNfZW1wdHkoQm9vdGxvYWRlci5fYWN0aXZlQ1NTUG9sbHMp
O0Jvb3Rsb2FkZXIuX2FjdGl2ZUNTU1BvbGxzW2NdPWQ7aWYoZil2YXIgZT1zZXRJ
bnRlcnZhbChmdW5jdGlvbigpe2lmKEJvb3Rsb2FkZXIuX3J1bkNTU1BvbGxzKCkp
ZSYmY2xlYXJJbnRlcnZhbChlKTt9LDIwLGZhbHNlKTt9KS5kZWZlclVudGlsKGZ1
bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LmJvZHk7fSw1MDAwLGZhbHNlLGEuY3Vy
cnkoIlN0aWxsIG5vIERPTSIpKTt9LGRvbmU6ZnVuY3Rpb24oZSxiKXtCb290bG9h
ZGVyLnJlcXVlc3RlZChlKTtpZighYil7dmFyIGQ9e3NlbmRlcjp0aGlzfTtBcmJp
dGVyLmluZm9ybShBcmJpdGVyLkJPT1RMT0FELGQsQXJiaXRlci5CRUhBVklPUl9F
VkVOVCk7fWZvcih2YXIgYT0wO2E8ZS5sZW5ndGg7KythKXt2YXIgYz1lW2FdO0Fy
Yml0ZXIuaW5mb3JtKEFyYml0ZXIuQk9PVExPQUQrJy8nK2MsdHJ1ZSxBcmJpdGVy
LkJFSEFWSU9SX1NUQVRFKTt9fSxyZXF1ZXN0ZWQ6ZnVuY3Rpb24oYil7Yj0kQShi
KTtmb3IodmFyIGE9MDthPGIubGVuZ3RoOysrYSlCb290bG9hZGVyLl9yZXF1ZXN0
ZWRbYlthXV09dHJ1ZTt9LGVuYWJsZUJvb3Rsb2FkOmZ1bmN0aW9uKGEpe2Zvcih2
YXIgYiBpbiBhKWlmKCFCb290bG9hZGVyLl9jb21wb25lbnRNYXBbYl0pQm9vdGxv
YWRlci5fY29tcG9uZW50TWFwW2JdPWFbYl07fSxfdW5sb2FkUmVzb3VyY2U6ZnVu
Y3Rpb24oZCl7aWYoZCBpbiBCb290bG9hZGVyLl9jc3NMaW5rTWFwKXt2YXIgYj1C
b290bG9hZGVyLl9jc3NMaW5rTWFwW2RdLGM9Yi5saW5rO2lmKGMpe2MucGFyZW50
Tm9kZS5yZW1vdmVDaGlsZChjKTt9ZWxzZXt2YXIgZT1Cb290bG9hZGVyLl9zdHls
ZVRhZ3NbYi50YWdJZHhdO2Zvcih2YXIgYT0wO2E8ZS5pbXBvcnRzLmxlbmd0aDth
KyspaWYoZS5pbXBvcnRzW2FdLmhyZWY9PWIuaHJlZil7ZS5yZW1vdmVJbXBvcnQo
YSk7YnJlYWs7fX1kZWxldGUgQm9vdGxvYWRlci5fY3NzTGlua01hcFtkXTtkZWxl
dGUgQm9vdGxvYWRlci5fcmVxdWVzdGVkW2RdO0FyYml0ZXIuaW5mb3JtKEFyYml0
ZXIuQk9PVExPQUQrJy8nK2QsbnVsbCxBcmJpdGVyLkJFSEFWSU9SX1NUQVRFKTt9
fSxnZXRIYXJkcG9pbnQ6ZnVuY3Rpb24oKXtpZighQm9vdGxvYWRlci5faGFyZHBv
aW50KXt2YXIgYixhPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFk
Jyk7aWYoYS5sZW5ndGgpe2I9YVswXTt9ZWxzZSBiPWRvY3VtZW50LmJvZHk7Qm9v
dGxvYWRlci5faGFyZHBvaW50PWI7fXJldHVybiBCb290bG9hZGVyLl9oYXJkcG9p
bnQ7fSxzZXRSZXNvdXJjZU1hcDpmdW5jdGlvbihiKXtpZighYilyZXR1cm47Zm9y
KHZhciBhIGluIGIpe2lmKCFiW2FdLm5hbWUpYlthXS5uYW1lPWE7Qm9vdGxvYWRl
ci5fcmVzb3VyY2VzW2FdPWJbYV07fX0scmVzb2x2ZVJlc291cmNlczpmdW5jdGlv
bihkLGEpe2lmKCFkKXJldHVybiBbXTt2YXIgYz1uZXcgQXJyYXkoZC5sZW5ndGgp
O2Zvcih2YXIgYj0wO2I8ZC5sZW5ndGg7KytiKWlmKCFkW2JdLnR5cGUmJmRbYl0g
aW4gQm9vdGxvYWRlci5fcmVzb3VyY2VzKXtjW2JdPUJvb3Rsb2FkZXIuX3Jlc291
cmNlc1tkW2JdXTtpZihhJiYoYSBpbiBjW2JdKSljW2JdPWNbYl1bYV07fWVsc2Ug
Y1tiXT1kW2JdO3JldHVybiBjO30sbG9hZEVhcmx5UmVzb3VyY2VzOmZ1bmN0aW9u
KGMpe3ZhciBhO0Jvb3Rsb2FkZXIuc2V0UmVzb3VyY2VNYXAoYyk7dmFyIGI9W107
Zm9yKGEgaW4gYyliLnB1c2goQm9vdGxvYWRlci5fcmVzb3VyY2VzW2FdKTtCb290
bG9hZGVyLmxvYWRSZXNvdXJjZXMoYik7Zm9yKGEgaW4gYyl7dmFyIGQ9Qm9vdGxv
YWRlci5fcmVzb3VyY2VzW2FdO2lmKCFkLnBlcm1hbmVudClCb290bG9hZGVyLl9l
YXJseVJlc291cmNlc1tkLm5hbWVdPWQ7fX0saXNEaXNwbGF5SlM6ZnVuY3Rpb24o
YSl7cmV0dXJuIEJvb3Rsb2FkZXIuX3Jlc291cmNlc1thXS5kaXNwbGF5anM7fSxf
cmVxdWVzdGVkOnt9LF9wZXJtYW5lbnQ6e30sX2NvbXBvbmVudE1hcDp7fSxfY3Nz
TGlua01hcDp7fSxfc3R5bGVUYWdzOltdLF9oYXJkcG9pbnQ6bnVsbCxfcmVzb3Vy
Y2VzOnt9LF9lYXJseVJlc291cmNlczp7fSxfQ1NTX1BPTExfRVhQSVJBVElPTjo1
MDAwLF9DU1NfRVhQRUNURURfSEVJR0hUOjQyfTsKKGZ1bmN0aW9uKCl7aWYod2lu
ZG93IT13aW5kb3cudG9wKXJldHVybjt2YXIgbD0nX2VfJyxtPSh3aW5kb3cubmFt
ZXx8JycpLnRvU3RyaW5nKCk7bT0obS5sZW5ndGg9PTcmJmw9PW0uc3Vic3RyKDAs
MykpP20uc3Vic3RyKDMpOih3aW5kb3cubmFtZT1sK3dpbmRvdy5fRWFnbGVFeWVT
ZWVkKS5zdWJzdHIoMyk7dmFyIGk9bCttKydfJyxmPW5ldyBEYXRlKCtuZXcgRGF0
ZSgpKzYwNDgwMDAwMCkudG9HTVRTdHJpbmcoKSxkPXdpbmRvdy5sb2NhdGlvbi5o
b3N0bmFtZS5yZXBsYWNlKC9eLiooZmFjZWJvb2tcLi4qKSQvaSwnJDEnKSxlPSc7
IGV4cGlyZXM9JytmKyc7cGF0aD0vOyBkb21haW49JytkLGM9MCxuPWZhbHNlLGos
Zz1kb2N1bWVudC5jb29raWUubGVuZ3RoLGg9ZmFsc2Usaz1uZXcgRGF0ZSgpLmdl
dFRpbWUoKTtmdW5jdGlvbiBiKG8pe3JldHVybiBpKyhjKyspKyc9JytlbmNvZGVV
UklDb21wb25lbnQobykrZTt9ZnVuY3Rpb24gYSgpe3ZhciBvPVtdLHA9ZmFsc2U7
dGhpcy5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuICFvLmxlbmd0aDt9O3RoaXMu
ZW5xdWV1ZT1mdW5jdGlvbihyLHEpe2lmKHEpe28udW5zaGlmdChyKTt9ZWxzZSBv
LnB1c2gocik7fTt0aGlzLmRlcXVldWU9ZnVuY3Rpb24oKXtvLnNoaWZ0KCk7fTt0
aGlzLnBlZWs9ZnVuY3Rpb24oKXtyZXR1cm4gb1swXTt9O3RoaXMuY2xlYXI9ZnVu
Y3Rpb24ocyl7Zz1NYXRoLm1pbihnLGRvY3VtZW50LmNvb2tpZS5sZW5ndGgpO2lm
KCFoJiZuZXcgRGF0ZSgpLmdldFRpbWUoKS1rPjYwMDAwKWg9dHJ1ZTt2YXIgcT0h
cyYmKGRvY3VtZW50LmNvb2tpZS5zZWFyY2gobCk+PTApO3ZhciB6Yj0hISh3aW5k
b3cuRW52JiZFbnYuY29va2llX2hlYWRlcl9saW1pdCk7dmFyIHg9KHdpbmRvdy5F
bnYmJkVudi5jb29raWVfY291bnRfbGltaXQpfHwxOTt2YXIgeT0od2luZG93LkVu
diYmRW52LmNvb2tpZV9oZWFkZXJfbGltaXQpfHwzOTUwO3ZhciB2PXgtNTt2YXIg
dz15LTEwMDA7d2hpbGUoIXRoaXMuaXNFbXB0eSgpKXt2YXIgcj1iKHRoaXMucGVl
aygpKTtpZih6YiYmKHIubGVuZ3RoPnl8fChoJiZyLmxlbmd0aCtnPnkpKSl7dGhp
cy5kZXF1ZXVlKCk7Y29udGludWU7fWlmKChxfHx6YikmJigoZG9jdW1lbnQuY29v
a2llLmxlbmd0aCtyLmxlbmd0aD55KXx8KGRvY3VtZW50LmNvb2tpZS5zcGxpdCgn
OycpLmxlbmd0aD54KSkpYnJlYWs7ZG9jdW1lbnQuY29va2llPXI7cT10cnVlO3Ro
aXMuZGVxdWV1ZSgpO31pZihzfHwhcCYmcSYmKCF0aGlzLmlzRW1wdHkoKXx8KGRv
Y3VtZW50LmNvb2tpZS5sZW5ndGg+dyl8fChkb2N1bWVudC5jb29raWUuc3BsaXQo
JzsnKS5sZW5ndGg+dikpJiYobnx8d2luZG93LkFyYml0ZXImJndpbmRvdy5Pbmxv
YWRFdmVudCYmQXJiaXRlci5xdWVyeShPbmxvYWRFdmVudC5PTkxPQUQpKSl7dmFy
IHphPW5ldyBJbWFnZSgpLHo9dGhpcyx0PXdpbmRvdy5fRWFnbGVFeWVEb21haW58
fCh3aW5kb3cuRW52JiZFbnYudHJhY2tpbmdfZG9tYWluKXx8Jyc7cD10cnVlO3ph
Lm9ubG9hZD1mdW5jdGlvbigpe3A9ZmFsc2U7ei5jbGVhcigpO307dmFyIHU9KHdp
bmRvdy5FbnYmJkVudi5mYl9pc2IpPycmZmJfaXNiPScrRW52LmZiX2lzYjonJzt2
YXIgemM9d2luZG93LkVudj8nJl9fdXNlcj0nK0Vudi51c2VyOicnO3phLnNyYz10
KycvYWpheC9uZWN0YXIucGhwP2FzeW5jU2lnbmFsPScrKE1hdGguZmxvb3IoTWF0
aC5yYW5kb20oKSoxMDAwMCkrMSkrdSt6YysnJicrKCFzPycnOidzPScpKygrbmV3
IERhdGUoKSk7fX07fWo9bmV3IGEoKTt3aW5kb3cuRWFnbGVFeWU9e2xvZzpmdW5j
dGlvbihyLG8scSl7aWYod2luZG93LkVudiYmRW52Lm5vX2Nvb2tpZXMpcmV0dXJu
O3ZhciBzPVttLCtuZXcgRGF0ZSgpLHJdLmNvbmNhdChvKTtzLnB1c2gocy5sZW5n
dGgpO3ZhciBwPWZ1bmN0aW9uKCl7dmFyIHQ9SlNPTi5zdHJpbmdpZnkocyk7ai5l
bnF1ZXVlKHQsISFxKTtqLmNsZWFyKCEhcSk7fTtpZih3aW5kb3cuQm9vdGxvYWRl
cil7Qm9vdGxvYWRlci5sb2FkQ29tcG9uZW50cygnanNvbicscCk7fWVsc2UgcCgp
O30sY3JlYXRlTG9nZ2VyOmZ1bmN0aW9uKHEsbyl7bz0obz09PXVuZGVmaW5lZCk/
MTpvO3ZhciBwPWZ1bmN0aW9uKHIscyl7aWYocC5lbmFibGVkKUVhZ2xlRXllLmxv
ZyhxLHIscyk7fTtwLmVuYWJsZWQ9ZmFsc2U7Qm9vdGxvYWRlci5sb2FkQ29tcG9u
ZW50cygnc3RyaW5nLWV4dGVuc2lvbnMnLGZ1bmN0aW9uKCl7cC5fa2V5PSgod2lu
ZG93LkVudiYmRW52LnVzZXIpfHxNYXRoLnJhbmRvbSgpKStxO3AuZW5hYmxlZD0o
cC5fa2V5Lmhhc2gzMigpJTY1NTM1LzY1NTM1KTw9bzt9KTtyZXR1cm4gcDt9LGxv
YWRlZDpmdW5jdGlvbigpe249dHJ1ZTt9fTt9KSgpOwpmdW5jdGlvbiBzZXRfdWVf
Y29va2llKGEpe2lmKCEod2luZG93LkVudiYmRW52Lm5vX2Nvb2tpZXMpKWRvY3Vt
ZW50LmNvb2tpZT0iYWN0PSIrZW5jb2RlVVJJQ29tcG9uZW50KGEpKyI7IHBhdGg9
LzsgZG9tYWluPSIrd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLnJlcGxhY2UoL14u
KihcLmZhY2Vib29rXC4uKikkL2ksJyQxJyk7fXZhciB1c2VyX2FjdGlvbj0oZnVu
Y3Rpb24oKXt2YXIgbD0oIXdpbmRvdy5BcmJpdGVyTW9uaXRvcik/J3InOidhJyxu
PTAsbSxlLGYsbz0wLGssaSxiLGMsaD1bMCwwLDAsMF0sZD1mdW5jdGlvbigpe2lm
KCEhaSl7dmFyIHE9e3Byb2ZpbGVfbWluaWZlZWQ6MSxpbmZvX3RhYjoxLGdiX2Nv
bnRlbnRfYW5kX3Rvb2xiYXI6MSxnYl9tdWZmaW5fYXJlYToxLGVnbzoxLGJvb2tt
YXJrc19tZW51OjEsamV3ZWxCb3hOb3RpZjoxLGpld2VsTm90aWY6MSxCZWVwZXJC
b3g6MSxuYXZTZWFyY2g6MX07Zm9yKHZhciBwPWk7cCYmcCE9ZG9jdW1lbnQuYm9k
eTtwPXAucGFyZW50Tm9kZSl7aWYoIXAuaWR8fHR5cGVvZiBwLmlkIT09J3N0cmlu
ZycpY29udGludWU7aWYocC5pZC5zdWJzdHIoMCw4KT09J3BhZ2VsZXRfJylyZXR1
cm4gcC5pZC5zdWJzdHIoOCk7aWYocC5pZC5zdWJzdHIoMCw4KT09J2JveF9hcHBf
JylyZXR1cm4gcC5pZDtpZihxW3AuaWRdKXJldHVybiBwLmlkO319cmV0dXJuICct
Jzt9LGc9ZnVuY3Rpb24ocSl7aWYoIWdlKCdjb250ZW50JykpcmV0dXJuIFswLDAs
MCwwXTt2YXIgcD0kKCdjb250ZW50Jyk7dmFyIHI9d2luZG93LlZlY3RvcjI/VmVj
dG9yMi5nZXRFdmVudFBvc2l0aW9uKHEpOnt4OjAseTowfTtyZXR1cm4gW3IueCxy
LnkscC5vZmZzZXRMZWZ0LHAuY2xpZW50V2lkdGhdO30saj1mdW5jdGlvbigpe24r
Kzt2YXIgcT1vKycvJytuO3NldF91ZV9jb29raWUocSk7dmFyIHA9e307aWYod2lu
ZG93LmNvbGxlY3RfZGF0YV9hdHRyaWJzKXtwPWNvbGxlY3RfZGF0YV9hdHRyaWJz
KGksWydmdCcsJ2d0J10pO2NvcHlfcHJvcGVydGllcyhwLmZ0LGMuZnR8fHt9KTtj
b3B5X3Byb3BlcnRpZXMocC5ndCxjLmd0fHx7fSk7fWlmKGw9PSdhJyl7QXJiaXRl
ck1vbml0b3IuaW5pdFVFKHEpO2Y9QXJiaXRlck1vbml0b3IuZ2V0SW50ZXJuUmVm
KGkpO313aW5kb3cuRWFnbGVFeWUmJkVhZ2xlRXllLmxvZygnYWN0JyxbbyxuLGV8
fCctJyxiLG18fCctJyxmfHxkKGkpLGwsd2luZG93LlVSST9VUkkuZ2V0UmVxdWVz
dFVSSSh0cnVlLHRydWUpLmdldFVucXVhbGlmaWVkVVJJKCkudG9TdHJpbmcoKTps
b2NhdGlvbi5wYXRobmFtZStsb2NhdGlvbi5zZWFyY2grbG9jYXRpb24uaGFzaCxw
XS5jb25jYXQoaCkpO2s9dHJ1ZTt9LGE9ZnVuY3Rpb24odSxxLHMsdCxyKXtpZigh
IXMpe209cy50eXBlO2lmKG09PSdjbGljaycmJmdlKCdjb250ZW50JykpaD1nKHMp
O3ZhciBwPTA7cy5jdHJsS2V5JiYocCs9MSk7cy5zaGlmdEtleSYmKHArPTIpO3Mu
YWx0S2V5JiYocCs9NCk7cy5tZXRhS2V5JiYocCs9OCk7aWYocCltKz1wO31pZigh
dSYmcyl1PXMuZ2V0VGFyZ2V0KCk7aWYoISF1KXtlPSh1LmdldEF0dHJpYnV0ZSYm
KHUuZ2V0QXR0cmlidXRlKCdhamF4aWZ5Jyl8fHUuZ2V0QXR0cmlidXRlKCdkYXRh
LWVuZHBvaW50JykpfHx1LmFjdGlvbnx8dS5ocmVmfHx1Lm5hbWUpO2k9dTt9aWYo
ISFxJiYhYiliPXE7aWYoISFyKWM9cjtpZih0PT0nRk9SQ0UnfHxlKWooKTt9O3Jl
dHVybiBmdW5jdGlvbih0LHAscixzLHEpe3ZhciB1PSgrbmV3IERhdGUoKSk7Qm9v
dGxvYWRlci5sb2FkQ29tcG9uZW50cygnZG9tLWNvbGxlY3QnLGZ1bmN0aW9uKCl7
aWYodS1vPDEwKXshayYmYSh0LHAscixzLHEpO3JldHVybjt9aWYocz09J0lORElS
RUNUJylyZXR1cm47bT1lPWY9aT1iPW51bGw7Yz17fTtrPWZhbHNlO289dTthKHQs
cCxyLHMscSk7fSk7fTt9KSgpOwpnZT0kPWZ1bmN0aW9uKGEpe3JldHVybiB0eXBl
b2YgYT09J3N0cmluZyc/ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSk6YTt9OwpD
U1M9d2luZG93LkNTU3x8e2hhc0NsYXNzOmZ1bmN0aW9uKGIsYSl7Yj0kKGIpO3Jl
dHVybiAoJyAnK2IuY2xhc3NOYW1lKycgJykuaW5kZXhPZignICcrYSsnICcpPi0x
O30sYWRkQ2xhc3M6ZnVuY3Rpb24oYixhKXtiPSQoYik7aWYoYSYmIUNTUy5oYXND
bGFzcyhiLGEpKWIuY2xhc3NOYW1lPWIuY2xhc3NOYW1lKycgJythO3JldHVybiBi
O30scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24oYixhKXtiPSQoYik7Yi5jbGFzc05hbWU9
Yi5jbGFzc05hbWUucmVwbGFjZShuZXcgUmVnRXhwKCcoXnxcXHMpJythKycoPzpc
XHN8JCknLCdnJyksJyQxJyk7cmV0dXJuIGI7fSx0b2dnbGVDbGFzczpmdW5jdGlv
bihiLGEpe3JldHVybiBDU1MuY29uZGl0aW9uQ2xhc3MoYixhLCFDU1MuaGFzQ2xh
c3MoYixhKSk7fSxjb25kaXRpb25DbGFzczpmdW5jdGlvbihjLGIsYSl7cmV0dXJu
IChhP0NTUy5hZGRDbGFzczpDU1MucmVtb3ZlQ2xhc3MpKGMsYik7fSxzaG93OmZ1
bmN0aW9uKGEpe0NTUy5yZW1vdmVDbGFzcyhhLCdoaWRkZW5fZWxlbScpO30saGlk
ZTpmdW5jdGlvbihhKXtDU1MuYWRkQ2xhc3MoYSwnaGlkZGVuX2VsZW0nKTt9LGNv
bmRpdGlvblNob3c6ZnVuY3Rpb24oYixhKXtDU1MuY29uZGl0aW9uQ2xhc3MoYiwn
aGlkZGVuX2VsZW0nLCFhKTt9fTsKdmFyIFBhcmVudD17YnlUYWc6ZnVuY3Rpb24o
YSxiKXtiPWIudG9VcHBlckNhc2UoKTt3aGlsZShhJiZhLm5vZGVOYW1lIT1iKWE9
YS5wYXJlbnROb2RlO3JldHVybiBhO30sYnlDbGFzczpmdW5jdGlvbihiLGEpe3do
aWxlKGImJiFDU1MuaGFzQ2xhc3MoYixhKSliPWIucGFyZW50Tm9kZTtyZXR1cm4g
Yjt9LGJ5QXR0cmlidXRlOmZ1bmN0aW9uKGIsYSl7d2hpbGUoYiYmKCFiLmdldEF0
dHJpYnV0ZXx8IWIuZ2V0QXR0cmlidXRlKGEpKSliPWIucGFyZW50Tm9kZTtyZXR1
cm4gYjt9fTsKZnVuY3Rpb24gdHJhY2tSZWZlcnJlcihhLGUpe2E9UGFyZW50LmJ5
QXR0cmlidXRlKGEsJ2RhdGEtcmVmZXJyZXInKTtpZihhKXt2YXIgZD0vXig/Oig/
OlteOlwvPyNdKyk6KT8oPzpcL1wvKD86W15cLz8jXSopKT8oW14/I10qKSg/Olw/
KFteI10qKSk/KD86IyguKikpPy8uZXhlYyhlKVsxXXx8Jyc7aWYoIWQpcmV0dXJu
O3ZhciBjPWQrJ3wnK2EuZ2V0QXR0cmlidXRlKCdkYXRhLXJlZmVycmVyJyk7dmFy
IGI9bmV3IERhdGUoKTtiLnNldFRpbWUobmV3IERhdGUoKS5nZXRUaW1lKCkrMTAw
MCk7ZG9jdW1lbnQuY29va2llPSJ4LXNyYz0iK2VuY29kZVVSSUNvbXBvbmVudChj
KSsiOyAiKyJleHBpcmVzPSIrYi50b0dNVFN0cmluZygpKyI7cGF0aD0vOyBkb21h
aW49Iit3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUucmVwbGFjZSgvXi4qKFwuZmFj
ZWJvb2tcLi4qKSQvaSwnJDEnKTt9cmV0dXJuIGE7fQohZnVuY3Rpb24oKXtpZih3
aW5kb3cuX19wcmltZXIpcmV0dXJuO3dpbmRvdy5fX3ByaW1lcj10cnVlO3ZhciBh
PW51bGw7ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm9uY2xpY2s9ZnVuY3Rpb24o
ZCl7ZD1kfHx3aW5kb3cuZXZlbnQ7YT1kLnRhcmdldHx8ZC5zcmNFbGVtZW50O3Zh
ciBlPVBhcmVudC5ieVRhZyhhLCdBJyk7aWYoIWUpcmV0dXJuO3ZhciBiPWUuZ2V0
QXR0cmlidXRlKCdhamF4aWZ5Jyk7dmFyIGY9ZS5ocmVmO3ZhciBpPWJ8fGY7aSYm
dXNlcl9hY3Rpb24oZSwnYScsZCk7aWYoYiYmZiYmISgvIyQvKS50ZXN0KGYpKXt2
YXIgZz1kLndoaWNoJiZkLndoaWNoIT0xO3ZhciBoPWQuYWx0S2V5fHxkLmN0cmxL
ZXl8fGQubWV0YUtleXx8ZC5zaGlmdEtleTtpZihnfHxoKXJldHVybjt9dHJhY2tS
ZWZlcnJlcihlLGkpO3ZhciBjPVsnZGlhbG9nJ107c3dpdGNoKGUucmVsKXtjYXNl
ICdkaWFsb2ctcGlwZSc6Yy5wdXNoKCdhamF4cGlwZScpO2Nhc2UgJ2RpYWxvZyc6
Y2FzZSAnZGlhbG9nLXBvc3QnOkJvb3Rsb2FkZXIubG9hZENvbXBvbmVudHMoYyxm
dW5jdGlvbigpe0RpYWxvZy5ib290c3RyYXAoaSxudWxsLGUucmVsPT0nZGlhbG9n
JyxudWxsLG51bGwsZSk7fSk7YnJlYWs7Y2FzZSAnYXN5bmMnOmNhc2UgJ2FzeW5j
LXBvc3QnOkJvb3Rsb2FkZXIubG9hZENvbXBvbmVudHMoJ2FzeW5jJyxmdW5jdGlv
bigpe0FzeW5jUmVxdWVzdC5ib290c3RyYXAoaSxlKTt9KTticmVhaztjYXNlICd0
aGVhdGVyJzppZih3aW5kb3cuRW52JiZFbnYudGhlYXRlcl92ZXI9PScyJyl7Qm9v
dGxvYWRlci5sb2FkQ29tcG9uZW50cygnUGhvdG9Tbm93Ym94JyxmdW5jdGlvbigp
e1Bob3RvU25vd2JveC5ib290c3RyYXAoaSxlKTt9KTt9ZWxzZSBCb290bG9hZGVy
LmxvYWRDb21wb25lbnRzKCdQaG90b1RoZWF0ZXInLGZ1bmN0aW9uKCl7UGhvdG9U
aGVhdGVyLmJvb3RzdHJhcChpLGUpO30pO2JyZWFrO2Nhc2UgJ3RvZ2dsZSc6Q1NT
LnRvZ2dsZUNsYXNzKGUucGFyZW50Tm9kZSwnb3BlblRvZ2dsZXInKTtCb290bG9h
ZGVyLmxvYWRDb21wb25lbnRzKCdUb2dnbGVyJyxmdW5jdGlvbigpe1RvZ2dsZXIu
Ym9vdHN0cmFwKGUpO30pO2JyZWFrO2RlZmF1bHQ6cmV0dXJuO31yZXR1cm4gZmFs
c2U7fTtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQub25zdWJtaXQ9ZnVuY3Rpb24o
Yil7Yj1ifHx3aW5kb3cuZXZlbnQ7dmFyIGM9Yi50YXJnZXR8fGIuc3JjRWxlbWVu
dDtpZihjJiZjLm5vZGVOYW1lPT0nRk9STScmJmMuZ2V0QXR0cmlidXRlKCdyZWwn
KT09J2FzeW5jJyl7dXNlcl9hY3Rpb24oYywnZicsYik7dmFyIGQ9YTtCb290bG9h
ZGVyLmxvYWRDb21wb25lbnRzKCdkb20tZm9ybScsZnVuY3Rpb24oKXtGb3JtLmJv
b3RzdHJhcChjLGQpO30pO3JldHVybiBmYWxzZTt9fTt9KCk7CnZhciBNaXhpbnM9
e0FyYml0ZXI6e19nZXRBcmJpdGVySW5zdGFuY2U6ZnVuY3Rpb24oKXtyZXR1cm4g
dGhpcy5fYXJiaXRlcnx8KHRoaXMuX2FyYml0ZXI9bmV3IEFyYml0ZXIoKSk7fSxp
bmZvcm06ZnVuY3Rpb24oYyxiLGEpe3JldHVybiB0aGlzLl9nZXRBcmJpdGVySW5z
dGFuY2UoKS5pbmZvcm0oYyxiLGEpO30sc3Vic2NyaWJlOmZ1bmN0aW9uKGMsYSxi
KXtyZXR1cm4gdGhpcy5fZ2V0QXJiaXRlckluc3RhbmNlKCkuc3Vic2NyaWJlKGMs
YSxiKTt9LHVuc3Vic2NyaWJlOmZ1bmN0aW9uKGEpe3RoaXMuX2dldEFyYml0ZXJJ
bnN0YW5jZSgpLnVuc3Vic2NyaWJlKGEpO319fTsKRnVuY3Rpb24ucHJvdG90eXBl
LmV4dGVuZD1mdW5jdGlvbihhKXtpZighTWV0YXByb3RvdHlwZS5fYXJiaXRlckhh
bmRsZSlNZXRhcHJvdG90eXBlLl9hcmJpdGVySGFuZGxlPUFyYml0ZXIuc3Vic2Ny
aWJlKEFyYml0ZXIuQk9PVExPQUQsTWV0YXByb3RvdHlwZS5fb25ib290bG9hZC5i
aW5kKE1ldGFwcm90b3R5cGUpKTtNZXRhcHJvdG90eXBlLl9xdWV1ZSh0aGlzLGEp
O307ZnVuY3Rpb24gTWV0YXByb3RvdHlwZSgpe31jb3B5X3Byb3BlcnRpZXMoTWV0
YXByb3RvdHlwZSx7bWFrZUZpbmFsOmZ1bmN0aW9uKGEpe30sX3BlbmRpbmc6e30s
X3F1ZXVlOmZ1bmN0aW9uKGIsYyl7Yi5fX2NsYXNzX2V4dGVuZGluZz10cnVlO3Zh
ciBhPUFyYml0ZXIucmVnaXN0ZXJDYWxsYmFjayhiaW5kKE1ldGFwcm90b3R5cGUs
TWV0YXByb3RvdHlwZS5fYXBwbHksYixjKSxbQXJiaXRlci5GVU5DVElPTl9FWFRF
TlNJT04rJy8nK2MsQXJiaXRlci5CT09UTE9BRF0pO2lmKGEhPT1udWxsKXRoaXMu
X3BlbmRpbmdbY109dHJ1ZTt9LF9vbmJvb3Rsb2FkOmZ1bmN0aW9uKGIsYSl7dGhp
cy5fdXBkYXRlKCk7fSxfdXBkYXRlOmZ1bmN0aW9uKCl7Zm9yKHZhciBhIGluIHRo
aXMuX3BlbmRpbmcpaWYoISF3aW5kb3dbYV0pe2RlbGV0ZSB0aGlzLl9wZW5kaW5n
W2FdO2lmKCF3aW5kb3dbYV0uX19jbGFzc19leHRlbmRpbmcpe0FyYml0ZXIuaW5m
b3JtKEFyYml0ZXIuRlVOQ1RJT05fRVhURU5TSU9OKycvJythLHRydWUsQXJiaXRl
ci5CRUhBVklPUl9TVEFURSk7fWVsc2Ugd2luZG93W2FdLl9fY2xhc3NfbmFtZT1h
O319LF9hcHBseTpmdW5jdGlvbihhLGMpe2RlbGV0ZSBhLl9fY2xhc3NfZXh0ZW5k
aW5nO3ZhciBkPV9fbWV0YXByb3RvdHlwZSh3aW5kb3dbY10sMCk7dmFyIGI9X19t
ZXRhcHJvdG90eXBlKGEsZC5wcm90b3R5cGUuX19sZXZlbCsxKTtiLnBhcmVudD1k
O2lmKCEhYS5fX2NsYXNzX25hbWUpQXJiaXRlci5pbmZvcm0oQXJiaXRlci5GVU5D
VElPTl9FWFRFTlNJT04rJy8nK2EuX19jbGFzc19uYW1lLHRydWUsQXJiaXRlci5C
RUhBVklPUl9TVEFURSk7fX0pO2Z1bmN0aW9uIF9fbWV0YXByb3RvdHlwZShjLGEp
e2lmKGMuX19tZXRhcHJvdG90eXBlKXJldHVybiBjLl9fbWV0YXByb3RvdHlwZTt2
YXIgYj1uZXcgRnVuY3Rpb24oKTtiLmNvbnN0cnVjdD1fX21ldGFwcm90b3R5cGVf
Y29uc3RydWN0O2IucHJvdG90eXBlLmNvbnN0cnVjdD1fX21ldGFwcm90b3R5cGVf
d3JhcChjLGEsdHJ1ZSk7Yi5wcm90b3R5cGUuX19sZXZlbD1hO2IuYmFzZT1jO2Mu
cHJvdG90eXBlLnBhcmVudD1iO2MuX19tZXRhcHJvdG90eXBlPWI7cmV0dXJuIGI7
fWZ1bmN0aW9uIF9fbWV0YXByb3RvdHlwZV9jb25zdHJ1Y3QoYSl7X19tZXRhcHJv
dG90eXBlX2luaXQoYS5wYXJlbnQpO3ZhciBkPVtdO3ZhciBjPWE7d2hpbGUoYy5w
YXJlbnQpe3ZhciBiPW5ldyBjLnBhcmVudCgpO2QucHVzaChiKTtiLl9faW5zdGFu
Y2U9YTtjPWMucGFyZW50O31hLnBhcmVudD1kWzFdO2QucmV2ZXJzZSgpO2QucG9w
KCk7YS5fX3BhcmVudHM9ZDthLl9faW5zdGFuY2U9YTtyZXR1cm4gYS5wYXJlbnQu
Y29uc3RydWN0LmFwcGx5KGEucGFyZW50LGFyZ3VtZW50cyk7fWZ1bmN0aW9uIF9f
bWV0YXByb3RvdHlwZV9pbml0KGQpe2lmKGQuaW5pdGlhbGl6ZWQpcmV0dXJuO3Zh
ciBhPWQuYmFzZS5wcm90b3R5cGU7aWYoZC5wYXJlbnQpe19fbWV0YXByb3RvdHlw
ZV9pbml0KGQucGFyZW50KTt2YXIgZT1kLnBhcmVudC5wcm90b3R5cGU7Zm9yKHZh
ciBiIGluIGUpaWYoYiE9J19fbGV2ZWwnJiZiIT0nY29uc3RydWN0JyYmYVtiXT09
PXVuZGVmaW5lZClhW2JdPWQucHJvdG90eXBlW2JdPWVbYl07fWQuaW5pdGlhbGl6
ZWQ9dHJ1ZTt2YXIgYz1kLnByb3RvdHlwZS5fX2xldmVsO2Zvcih2YXIgYiBpbiBh
KWlmKGIhPSdwYXJlbnQnKWFbYl09ZC5wcm90b3R5cGVbYl09X19tZXRhcHJvdG90
eXBlX3dyYXAoYVtiXSxjKTt9ZnVuY3Rpb24gX19tZXRhcHJvdG90eXBlX3dyYXAo
YyxiLGQpe2lmKHR5cGVvZiBjIT0nZnVuY3Rpb24nfHxjLl9fcHJvdG90eXBlZCly
ZXR1cm4gYzt2YXIgYT1mdW5jdGlvbigpe3ZhciBnPXRoaXMuX19pbnN0YW5jZTtp
ZihnKXt2YXIgaD1nLnBhcmVudDtnLnBhcmVudD1iP2cuX19wYXJlbnRzW2ItMV06
bnVsbDt2YXIgZT1hcmd1bWVudHM7aWYoZCl7ZT1bXTtmb3IodmFyIGY9MTtmPGFy
Z3VtZW50cy5sZW5ndGg7ZisrKWUucHVzaChhcmd1bWVudHNbZl0pO312YXIgaT1j
LmFwcGx5KGcsZSk7Zy5wYXJlbnQ9aDtyZXR1cm4gaTt9ZWxzZSByZXR1cm4gYy5h
cHBseSh0aGlzLGFyZ3VtZW50cyk7fTthLl9fcHJvdG90eXBlZD10cnVlO3JldHVy
biBhO31GdW5jdGlvbi5wcm90b3R5cGUubWl4aW49ZnVuY3Rpb24oKXt2YXIgYT1b
dGhpcy5wcm90b3R5cGVdLmNvbmNhdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2Fs
bChhcmd1bWVudHMpKTtGdW5jdGlvbi5taXhpbi5hcHBseShudWxsLGEpO307RnVu
Y3Rpb24ubWl4aW49ZnVuY3Rpb24oKXtmb3IodmFyIGI9MSxhPWFyZ3VtZW50cy5s
ZW5ndGg7YjxhOysrYiljb3B5X3Byb3BlcnRpZXMoYXJndW1lbnRzWzBdLE1peGlu
c1thcmd1bWVudHNbYl1dfHxhcmd1bWVudHNbYl0pO307RnVuY3Rpb24ucHJvdG90
eXBlLmJpbmQ9ZnVuY3Rpb24oYil7dmFyIGE9W2IsdGhpc10uY29uY2F0KEFycmF5
LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSk7cmV0dXJuIGJpbmQu
YXBwbHkobnVsbCxhKTt9O0Z1bmN0aW9uLnByb3RvdHlwZS5jdXJyeT1GdW5jdGlv
bi5wcm90b3R5cGUuYmluZC5iaW5kKG51bGwsbnVsbCk7RnVuY3Rpb24ucHJvdG90
eXBlLnNoaWVsZD1mdW5jdGlvbihiKXtpZih0eXBlb2YgdGhpcyE9J2Z1bmN0aW9u
Jyl0aHJvdyBuZXcgVHlwZUV4Y2VwdGlvbigpO3ZhciBhPXRoaXMuYmluZC5hcHBs
eSh0aGlzLCRBKGFyZ3VtZW50cykpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBh
KCk7fTt9O0Z1bmN0aW9uLnByb3RvdHlwZS5kZWZlcj1mdW5jdGlvbihiLGEpe2lm
KHR5cGVvZiB0aGlzIT0nZnVuY3Rpb24nKXRocm93IG5ldyBUeXBlRXJyb3IoKTti
PWJ8fDA7cmV0dXJuIHNldFRpbWVvdXQodGhpcyxiLGEpO307RnVuY3Rpb24ucHJv
dG90eXBlLnBvc3Rwb25lPWZ1bmN0aW9uKGEpe2lmKHRoaXMuX3Bvc3Rwb25lKXtj
bGVhclRpbWVvdXQodGhpcy5fcG9zdHBvbmUpO2RlbGV0ZSB0aGlzLl9wb3N0cG9u
ZTt9aWYoYSE9bnVsbCYmYT49MCl0aGlzLl9wb3N0cG9uZT1zZXRUaW1lb3V0KHRo
aXMsYSk7fTtGdW5jdGlvbi5wcm90b3R5cGUucmVjdXI9ZnVuY3Rpb24oYixhKXtp
Zih0eXBlb2YgdGhpcyE9J2Z1bmN0aW9uJyl0aHJvdyBuZXcgVHlwZUVycm9yKCk7
cmV0dXJuIHNldEludGVydmFsKHRoaXMsYixhKTt9O2Z1bmN0aW9uIGJhZ29maG9s
ZGluZygpe31mdW5jdGlvbiBiYWdvZihhKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1
cm4gYTt9O31mdW5jdGlvbiBhYnN0cmFjdE1ldGhvZCgpe3Rocm93IG5ldyBFcnJv
cignWW91IG11c3QgaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24gaW4geW91ciBiYXNl
IGNsYXNzLicpO30KdmFyIHVhPXtpZTpmdW5jdGlvbigpe3JldHVybiB1YS5fcG9w
dWxhdGUoKXx8dGhpcy5faWU7fSxpZTY0OmZ1bmN0aW9uKCl7cmV0dXJuIHVhLmll
KCkmJnRoaXMuX3dpbjY0O30sZmlyZWZveDpmdW5jdGlvbigpe3JldHVybiB1YS5f
cG9wdWxhdGUoKXx8dGhpcy5fZmlyZWZveDt9LG9wZXJhOmZ1bmN0aW9uKCl7cmV0
dXJuIHVhLl9wb3B1bGF0ZSgpfHx0aGlzLl9vcGVyYTt9LHNhZmFyaTpmdW5jdGlv
bigpe3JldHVybiB1YS5fcG9wdWxhdGUoKXx8dGhpcy5fc2FmYXJpO30sY2hyb21l
OmZ1bmN0aW9uKCl7cmV0dXJuIHVhLl9wb3B1bGF0ZSgpfHx0aGlzLl9jaHJvbWU7
fSx3aW5kb3dzOmZ1bmN0aW9uKCl7cmV0dXJuIHVhLl9wb3B1bGF0ZSgpfHx0aGlz
Ll93aW5kb3dzO30sb3N4OmZ1bmN0aW9uKCl7cmV0dXJuIHVhLl9wb3B1bGF0ZSgp
fHx0aGlzLl9vc3g7fSxsaW51eDpmdW5jdGlvbigpe3JldHVybiB1YS5fcG9wdWxh
dGUoKXx8dGhpcy5fbGludXg7fSxpcGhvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gdWEu
X3BvcHVsYXRlKCl8fHRoaXMuX2lwaG9uZTt9LF9wb3B1bGF0ZWQ6ZmFsc2UsX3Bv
cHVsYXRlOmZ1bmN0aW9uKCl7aWYodWEuX3BvcHVsYXRlZClyZXR1cm47dWEuX3Bv
cHVsYXRlZD10cnVlO3ZhciBkPW5hdmlnYXRvci51c2VyQWdlbnQ7dmFyIGE9Lyg/
Ok1TSUUuKFxkK1wuXGQrKSl8KD86KD86RmlyZWZveHxHcmFuUGFyYWRpc298SWNl
d2Vhc2VsKS4oXGQrXC5cZCspKXwoPzpPcGVyYSg/Oi4rVmVyc2lvbi58LikoXGQr
XC5cZCspKXwoPzpBcHBsZVdlYktpdC4oXGQrKD86XC5cZCspPykpLy5leGVjKGQp
O3ZhciBjPS8oTWFjIE9TIFgpfChXaW5kb3dzKXwoTGludXgpLy5leGVjKGQpO3Zh
ciBiPS9cYihpUGhvbmV8aVBbYW9dZCkvLmV4ZWMoZCk7dWEuX3dpbjY0PSEhKC9X
aW42NC8uZXhlYyhkKSk7aWYoYSl7dWEuX2llPWFbMV0/cGFyc2VGbG9hdChhWzFd
KTpOYU47aWYodWEuX2llPj04JiYhd2luZG93LkhUTUxDb2xsZWN0aW9uKXVhLl9p
ZT03O3VhLl9maXJlZm94PWFbMl0/cGFyc2VGbG9hdChhWzJdKTpOYU47dWEuX29w
ZXJhPWFbM10/cGFyc2VGbG9hdChhWzNdKTpOYU47dWEuX3NhZmFyaT1hWzRdP3Bh
cnNlRmxvYXQoYVs0XSk6TmFOO2lmKHVhLl9zYWZhcmkpe2E9Lyg/OkNocm9tZVwv
KFxkK1wuXGQrKSkvLmV4ZWMoZCk7dWEuX2Nocm9tZT1hJiZhWzFdP3BhcnNlRmxv
YXQoYVsxXSk6TmFOO31lbHNlIHVhLl9jaHJvbWU9TmFOO31lbHNlIHVhLl9pZT11
YS5fZmlyZWZveD11YS5fb3BlcmE9dWEuX2Nocm9tZT11YS5fc2FmYXJpPU5hTjtp
ZihjKXtpZihjWzFdKXt2YXIgZT0vKD86TWFjIE9TIFggKFxkKyg/OlsuX11cZCsp
PykpLy5leGVjKGQpO3VhLl9vc3g9ZT9wYXJzZUZsb2F0KGVbMV0ucmVwbGFjZSgn
XycsJy4nKSk6dHJ1ZTt9ZWxzZSB1YS5fb3N4PWZhbHNlO3VhLl93aW5kb3dzPSEh
Y1syXTt1YS5fbGludXg9ISFjWzNdO31lbHNlIHVhLl9vc3g9dWEuX3dpbmRvd3M9
dWEuX2xpbnV4PWZhbHNlO3VhLl9pcGhvbmU9Yjt9fTsKT25sb2FkRXZlbnQ9e09O
TE9BRDonb25sb2FkL29ubG9hZCcsT05MT0FEX0NBTExCQUNLOidvbmxvYWQvb25s
b2FkX2NhbGxiYWNrJyxPTkxPQURfRE9NQ09OVEVOVDonb25sb2FkL2RvbV9jb250
ZW50X3JlYWR5JyxPTkxPQURfRE9NQ09OVEVOVF9DQUxMQkFDSzonb25sb2FkL2Rv
bWNvbnRlbnRfY2FsbGJhY2snLE9OQkVGT1JFVU5MT0FEOidvbmxvYWQvYmVmb3Jl
dW5sb2FkJyxPTlVOTE9BRDonb25sb2FkL3VubG9hZCd9O2Z1bmN0aW9uIF9pbmNs
dWRlX3F1aWNrbGluZ19ldmVudHNfZGVmYXVsdCgpe3JldHVybiAhd2luZG93Lmxv
YWRpbmdfcGFnZV9jaHJvbWU7fWZ1bmN0aW9uIG9uYmVmb3JldW5sb2FkUmVnaXN0
ZXIoYSxiKXtpZihiPT09dW5kZWZpbmVkKWI9X2luY2x1ZGVfcXVpY2tsaW5nX2V2
ZW50c19kZWZhdWx0KCk7Yj9fYWRkSG9vaygnb25iZWZvcmVsZWF2ZWhvb2tzJyxh
KTpfYWRkSG9vaygnb25iZWZvcmV1bmxvYWRob29rcycsYSk7fWZ1bmN0aW9uIG9u
dW5sb2FkUmVnaXN0ZXIoYSl7aWYoIXdpbmRvdy5vbnVubG9hZCl3aW5kb3cub251
bmxvYWQ9ZnVuY3Rpb24oKXtBcmJpdGVyLmluZm9ybShPbmxvYWRFdmVudC5PTlVO
TE9BRCx0cnVlLEFyYml0ZXIuQkVIQVZJT1JfU1RBVEUpO307X2FkZEhvb2soJ29u
dW5sb2FkaG9va3MnLGEpO31mdW5jdGlvbiBvbmxlYXZlUmVnaXN0ZXIoYSl7X2Fk
ZEhvb2soJ29ubGVhdmVob29rcycsYSk7fWZ1bmN0aW9uIF9hZGRIb29rKGIsYSl7
d2luZG93W2JdPSh3aW5kb3dbYl18fFtdKS5jb25jYXQoYSk7fWZ1bmN0aW9uIHJl
bW92ZUhvb2soYSl7d2luZG93W2FdPVtdO31mdW5jdGlvbiBfZG9tY29udGVudHJl
YWR5KCl7QXJiaXRlci5pbmZvcm0oT25sb2FkRXZlbnQuT05MT0FEX0RPTUNPTlRF
TlQsdHJ1ZSxBcmJpdGVyLkJFSEFWSU9SX1NUQVRFKTt9ZnVuY3Rpb24gX2Jvb3Rz
dHJhcEV2ZW50SGFuZGxlcnMoKXt2YXIgYT1kb2N1bWVudCxlPXdpbmRvdztpZihh
LmFkZEV2ZW50TGlzdGVuZXIpe2lmKHVhLnNhZmFyaSgpPDUyNSl7dmFyIGQ9c2V0
SW50ZXJ2YWwoZnVuY3Rpb24oKXtpZigvbG9hZGVkfGNvbXBsZXRlLy50ZXN0KGEu
cmVhZHlTdGF0ZSkpe19kb21jb250ZW50cmVhZHkoKTtjbGVhckludGVydmFsKGQp
O319LDEwKTt9ZWxzZSBhLmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2Fk
ZWQiLF9kb21jb250ZW50cmVhZHksdHJ1ZSk7fWVsc2V7dmFyIGM9J2phdmFzY3Jp
cHQ6dm9pZCgwKSc7aWYoZS5sb2NhdGlvbi5wcm90b2NvbD09J2h0dHBzOicpYz0n
Ly86JzthLndyaXRlKCc8c2NyaXB0IG9ucmVhZHlzdGF0ZWNoYW5nZT0iaWYgKHRo
aXMucmVhZHlTdGF0ZT09XCdjb21wbGV0ZVwnKSB7JysndGhpcy5wYXJlbnROb2Rl
LnJlbW92ZUNoaWxkKHRoaXMpO19kb21jb250ZW50cmVhZHkoKTt9IiAnKydkZWZl
cj0iZGVmZXIiIHNyYz0iJytjKyciPjxcL3NjcmlwdFw+Jyk7fXZhciBiPWUub25s
b2FkO2Uub25sb2FkPWZ1bmN0aW9uKCl7ZS5DYXZhbHJ5TG9nZ2VyJiZDYXZhbHJ5
TG9nZ2VyLmdldEluc3RhbmNlKCkuc2V0VGltZVN0YW1wKCd0X2xheW91dCcpO2Im
JmIoKTtBcmJpdGVyLmluZm9ybShPbmxvYWRFdmVudC5PTkxPQUQsdHJ1ZSxBcmJp
dGVyLkJFSEFWSU9SX1NUQVRFKTt9O2Uub25iZWZvcmV1bmxvYWQ9ZnVuY3Rpb24o
KXt2YXIgZj17fTtBcmJpdGVyLmluZm9ybShPbmxvYWRFdmVudC5PTkJFRk9SRVVO
TE9BRCxmLEFyYml0ZXIuQkVIQVZJT1JfU1RBVEUpO2lmKCFmLndhcm4pQXJiaXRl
ci5pbmZvcm0oJ29ubG9hZC9leGl0Jyx0cnVlKTtyZXR1cm4gZi53YXJuO307fW9u
bG9hZF9jYWxsYmFjaz1BcmJpdGVyLnJlZ2lzdGVyQ2FsbGJhY2soZnVuY3Rpb24o
KXt3aW5kb3cuQ2F2YWxyeUxvZ2dlciYmQ2F2YWxyeUxvZ2dlci5nZXRJbnN0YW5j
ZSgpLnNldFRpbWVTdGFtcCgndF9vbmxvYWQnKTtBcmJpdGVyLmluZm9ybShPbmxv
YWRFdmVudC5PTkxPQURfQ0FMTEJBQ0ssdHJ1ZSxBcmJpdGVyLkJFSEFWSU9SX1NU
QVRFKTt9LFtPbmxvYWRFdmVudC5PTkxPQURdKTtkb21jb250ZW50X2NhbGxiYWNr
PUFyYml0ZXIucmVnaXN0ZXJDYWxsYmFjayhmdW5jdGlvbigpe3dpbmRvdy5DYXZh
bHJ5TG9nZ2VyJiZDYXZhbHJ5TG9nZ2VyLmdldEluc3RhbmNlKCkuc2V0VGltZVN0
YW1wKCd0X2RvbWNvbnRlbnQnKTtBcmJpdGVyLmluZm9ybShPbmxvYWRFdmVudC5P
TkxPQURfRE9NQ09OVEVOVF9DQUxMQkFDSyx0cnVlLEFyYml0ZXIuQkVIQVZJT1Jf
U1RBVEUpO30sW09ubG9hZEV2ZW50Lk9OTE9BRF9ET01DT05URU5UXSk7aWYoIXdp
bmRvdy5fZXZlbnRIYW5kbGVyc0Jvb3RzdHJhcHBlZCl7X2V2ZW50SGFuZGxlcnNC
b290c3RyYXBwZWQ9dHJ1ZTtfYm9vdHN0cmFwRXZlbnRIYW5kbGVycygpO30KZnVu
Y3Rpb24gdHgoYixhKXtpZih0eXBlb2YgX3N0cmluZ190YWJsZT09J3VuZGVmaW5l
ZCcpcmV0dXJuO2I9X3N0cmluZ190YWJsZVtiXTtyZXR1cm4gX3R4KGIsYSk7fWZ1
bmN0aW9uIGludGxfZW5kc19pbl9wdW5jdChhKXtpZih0eXBlb2YgYSE9J3N0cmlu
ZycpcmV0dXJuIGZhbHNlO3JldHVybiBhLm1hdGNoKG5ldyBSZWdFeHAoaW50bF9l
bmRzX2luX3B1bmN0LnB1bmN0X2NoYXJfY2xhc3MrJ1snKycpIicrIiciKydcdTAw
QkInKydcdTBGM0InKydcdTBGM0QnKydcdTIwMTknKydcdTIwMUQnKydcdTIwM0En
KydcdTMwMDknKydcdTMwMEInKydcdTMwMEQnKydcdTMwMEYnKydcdTMwMTEnKydc
dTMwMTUnKydcdTMwMTcnKydcdTMwMTknKydcdTMwMUInKydcdTMwMUUnKydcdTMw
MUYnKydcdUZEM0YnKydcdUZGMDcnKydcdUZGMDknKydcdUZGM0QnKydccycrJ10q
JCcpKTt9aW50bF9lbmRzX2luX3B1bmN0LnB1bmN0X2NoYXJfY2xhc3M9J1snKycu
IT8nKydcdTMwMDInKydcdUZGMDEnKydcdUZGMUYnKydcdTA5NjQnKydcdTIwMjYn
KydcdTBFQUYnKydcdTE4MDEnKydcdTBFMkYnKydcdUZGMEUnKyddJztmdW5jdGlv
biBpbnRsX3JlbmRlcl9saXN0X3NlcGFyYXRvcigpe3JldHVybiBfdHgoIntwcmV2
aW91cy1pdGVtc30sIHtuZXh0LWl0ZW1zfSIseydwcmV2aW91cy1pdGVtcyc6Jycs
J25leHQtaXRlbXMnOicnfSk7fWZ1bmN0aW9uIGludGxfcGhvbm9sb2dpY2FsX3J1
bGVzKGcpe3ZhciBlLGQ9ZyxmPXdpbmRvdy5pbnRsX2xvY2FsZV9yZXdyaXRlcyxi
LGM7dHJ5e2lmKGYpe3ZhciBwYXRzPVtdLHJlcHM9W107Zm9yKHZhciBwIGluIGYu
cGF0dGVybnMpe3ZhciBwYXQ9cCxyZXA9Zi5wYXR0ZXJuc1twXTtmb3IoYiBpbiBm
Lm1ldGEpe2U9bmV3IFJlZ0V4cChiLnNsaWNlKDEsLTEpLCdnJyk7cGF0PXBhdC5y
ZXBsYWNlKGUsZi5tZXRhW2JdKTtyZXA9cmVwLnJlcGxhY2UoZSxmLm1ldGFbYl0p
O31wYXRzW3BhdHMubGVuZ3RoXT1wYXQ7cmVwc1tyZXBzLmxlbmd0aF09cmVwO31m
b3IodmFyIGlpPTA7aWk8cGF0cy5sZW5ndGg7aWkrKyl7ZT1uZXcgUmVnRXhwKHBh
dHNbaWldLnNsaWNlKDEsLTEpLCdnJyk7aWYocmVwc1tpaV09PSdqYXZhc2NyaXB0
Jyl7Yz1nLm1hdGNoKGUpO2I9YyYmY1swXTtpZihiKWc9Zy5yZXBsYWNlKGUsYi5z
bGljZSgxKS50b0xvd2VyQ2FzZSgpKTt9ZWxzZSBnPWcucmVwbGFjZShlLHJlcHNb
aWldKTt9fX1jYXRjaChhKXtnPWQ7fWU9bmV3IFJlZ0V4cCgnXHgwMScsJ2cnKTtn
PWcucmVwbGFjZShlLCcnKTtyZXR1cm4gZzt9ZnVuY3Rpb24gX3R4KGUsYSl7aWYo
IWEpcmV0dXJuIGU7dmFyIGQ7Zm9yKHZhciBjIGluIGEpe2lmKGludGxfZW5kc19p
bl9wdW5jdChhW2NdKSl7ZD1uZXcgUmVnRXhwKCdcXHsnK2MrJ1xcfScraW50bF9l
bmRzX2luX3B1bmN0LnB1bmN0X2NoYXJfY2xhc3MrJyonLCdnJyk7fWVsc2UgZD1u
ZXcgUmVnRXhwKCdcXHsnK2MrJ1xcfScsJ2cnKTt2YXIgYj0nJztpZihhW2NdWzBd
IT0nficpYj0nXHgwMSc7ZT1lLnJlcGxhY2UoZCxiK2FbY10rYik7fWU9aW50bF9w
aG9ub2xvZ2ljYWxfcnVsZXMoZSk7cmV0dXJuIGU7fQpJbml0aWFsSlNMb2FkZXI9
e0lOSVRJQUxfSlNfUkVBRFk6J0JPT1RMT0FEL0pTUkVBRFknLGxvYWQ6ZnVuY3Rp
b24oYSl7SW5pdGlhbEpTTG9hZGVyLmNhbGxiYWNrPUJvb3Rsb2FkZXIubG9hZFJl
c291cmNlcyhhLEluaXRpYWxKU0xvYWRlci5jYWxsYmFjayk7fSxjYWxsYmFjazpB
cmJpdGVyLnJlZ2lzdGVyQ2FsbGJhY2soZnVuY3Rpb24oKXtBcmJpdGVyLmluZm9y
bShJbml0aWFsSlNMb2FkZXIuSU5JVElBTF9KU19SRUFEWSx0cnVlLEFyYml0ZXIu
QkVIQVZJT1JfU1RBVEUpO30sW09ubG9hZEV2ZW50Lk9OTE9BRF9ET01DT05URU5U
X0NBTExCQUNLXSl9OwpmdW5jdGlvbiBnb1VSSShiLGEpe2I9Yi50b1N0cmluZygp
O2lmKCFhJiZ3aW5kb3cuUGFnZVRyYW5zaXRpb25zJiZQYWdlVHJhbnNpdGlvbnMu
aXNJbml0aWFsaXplZCgpKXtQYWdlVHJhbnNpdGlvbnMuZ28oYik7fWVsc2UgaWYo
d2luZG93LmxvY2F0aW9uLmhyZWY9PWIpe3dpbmRvdy5sb2NhdGlvbi5yZWxvYWQo
KTt9ZWxzZSB3aW5kb3cubG9jYXRpb24uaHJlZj1iO31mdW5jdGlvbiBsb2FkRXh0
ZXJuYWxKYXZhc2NyaXB0KGYsYixhKXtpZihmIGluc3RhbmNlb2YgQXJyYXkpe3Zh
ciBlPWYuc2hpZnQoMCk7aWYoZSl7bG9hZEV4dGVybmFsSmF2YXNjcmlwdChlLGZ1
bmN0aW9uKCl7aWYoZi5sZW5ndGgpe2xvYWRFeHRlcm5hbEphdmFzY3JpcHQoZixi
LGEpO31lbHNlIGImJmIoKTt9LGEpO31lbHNlIGlmKGIpYigpO31lbHNle3ZhciBj
PWE/ZG9jdW1lbnQuYm9keTpkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgn
aGVhZCcpWzBdO3ZhciBkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcp
O2QudHlwZT0ndGV4dC9qYXZhc2NyaXB0JztkLnNyYz1mO2lmKGIpe2Qub25lcnJv
cj1kLm9ubG9hZD1iO2Qub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7aWYo
dGhpcy5yZWFkeVN0YXRlPT0iY29tcGxldGUifHx0aGlzLnJlYWR5U3RhdGU9PSJs
b2FkZWQiKWIoKTt9O31jLmFwcGVuZENoaWxkKGQpO3JldHVybiBkO319ZnVuY3Rp
b24gaW52b2tlX2NhbGxiYWNrcyhiLGQpe2lmKGIpZm9yKHZhciBjPTA7YzxiLmxl
bmd0aDtjKyspdHJ5eyhuZXcgRnVuY3Rpb24oYltjXSkpLmFwcGx5KGQpO31jYXRj
aChhKXt9fQooZnVuY3Rpb24oKXt3aW5kb3cuSlNMb2dnZXI9ZnVuY3Rpb24oZCl7
dGhpcy5jYXQ9ZDt0aGlzLl9jb3VudHM9e307cmV0dXJuIGEuaW5zdGFuY2VzW2Rd
fHwoYS5pbnN0YW5jZXNbZF09dGhpcyk7fTt2YXIgYT1KU0xvZ2dlci5fPXtpbnN0
YW5jZXM6e30sYmFja2xvZzpbXSxzdHJpbmdpZnk6ZnVuY3Rpb24oZSl7dHJ5e3Jl
dHVybiBKU09OLnN0cmluZ2lmeShlKTt9Y2F0Y2goZCl7cmV0dXJuICd7InN0cmlu
Z2lmeV9lcnJvciI6ICInK2QubWVzc2FnZSsnIn0nO319fTt2YXIgYz1bJ2RlYnVn
JywnbG9nJywnd2FybicsJ2Vycm9yJywnYnVtcCddO2Zvcih2YXIgYj0wO2I8Yy5s
ZW5ndGg7YisrKUpTTG9nZ2VyLnByb3RvdHlwZVtjW2JdXT1mdW5jdGlvbihldmVu
dCxkKXtpZihhLmJhY2tsb2cubGVuZ3RoPDEwMClhLmJhY2tsb2cucHVzaChbdGhp
cy5jYXQsY1tiXSxldmVudCxhLnN0cmluZ2lmeShkKV0pO307fSkoKTsKd2luZG93
LkV2ZW50PXdpbmRvdy5FdmVudHx8ZnVuY3Rpb24oKXt9O0V2ZW50Ll9faW5saW5l
U3VibWl0PWZ1bmN0aW9uKGIsZXZlbnQpe3ZhciBhPUV2ZW50Ll9fZ2V0SGFuZGxl
ciYmRXZlbnQuX19nZXRIYW5kbGVyKGIsJ3N1Ym1pdCcpO3JldHVybiBhP251bGw6
RXZlbnQuX19idWJibGVTdWJtaXQoYixldmVudCk7fTtFdmVudC5fX2J1YmJsZVN1
Ym1pdD1mdW5jdGlvbihhLGV2ZW50KXtpZihkb2N1bWVudC5kb2N1bWVudEVsZW1l
bnQuYXR0YWNoRXZlbnQpe3ZhciBiO3doaWxlKGIhPT1mYWxzZSYmKGE9YS5wYXJl
bnROb2RlKSliPWEub25zdWJtaXQ/YS5vbnN1Ym1pdChldmVudCk6RXZlbnQuX19m
aXJlJiZFdmVudC5fX2ZpcmUoYSwnc3VibWl0JyxldmVudCk7cmV0dXJuIGI7fX07
CihmdW5jdGlvbigpe3ZhciB0PXt9LHI9e30saz0wLHM9dGhpcyxoPSdyZXF1aXJl
V2hlblJlYWR5JyxjPSdleHBvcnRzJyxiPSdkZXBlbmRlbmNpZXMnLGY9J21vZHVs
ZScsaj0nd2FpdGluZycsZD0nZmFjdG9yeScsaT11bmRlZmluZWQsYT0nZGVmaW5l
JyxlPSdnbG9iYWwnLGc9J3JlcXVpcmUnO2Z1bmN0aW9uIHUoemIpe3ZhciB6Yz10
W3piXSx3LHphO2lmKCF6Y1tjXSl7dmFyIHk9emNbY109e30sej16Y1tkXTtpZihP
YmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeik9PT0nW29iamVjdCBGdW5j
dGlvbl0nKXt2YXIgdj1bXSx4PXpjW2JdO2Zvcih6YT0wO3phPHgubGVuZ3RoO3ph
Kyspe3c9eFt6YV07di5wdXNoKHc9PT1mP3pjOnUodykpO312YXIgemQ9ei5hcHBs
eSh5LHYpO2lmKHpkKXpjW2NdPXpkO31lbHNlIHpjW2NdPXo7fXJldHVybiB6Y1tj
XTt9ZnVuY3Rpb24gcCh4LHYsdyx6KXtpZih2PT09aSl7dj1bXTt3PXg7eD1uKCk7
fWVsc2UgaWYodz09PWkpe3c9djt2PXg7eD1uKCk7fWlmKHRbeF0pcmV0dXJuO3Zh
ciB5PXtpZDp4fTt5W2RdPXc7eVtiXT12O3lbaF09ejt0W3hdPXk7bCh4KTt9ZnVu
Y3Rpb24gcSh4LHYsdyl7cCh4LHYsdyx0cnVlKTt9ZnVuY3Rpb24gbigpe3JldHVy
biAnX19tb2RfXycraysrO31mdW5jdGlvbiBsKHgpe3ZhciB5PXRbeF07dmFyIHo9
MDtmb3IodmFyIHc9MDt3PHlbYl0ubGVuZ3RoO3crKyl7dmFyIHY9eVtiXVt3XTtp
ZighdFt2XXx8dFt2XVtqXSl7clt2XXx8KHJbdl09e30pO3Jbdl1beF09MTt6Kys7
fX15W2pdPXo7byh4KTt9ZnVuY3Rpb24gbyh3KXt2YXIgeD10W3ddO2lmKCF4W2pd
KXtpZih4W2hdKXUodyk7dmFyIHk9clt3XTtpZih5KXtkZWxldGUgclt3XTtmb3Io
dmFyIHYgaW4geSl7dFt2XVtqXS0tO28odik7fX19fWZ1bmN0aW9uIG0odyx2KXt0
W3ddPXtpZDp3fTt0W3ddW2NdPXY7fW0oZiwwKTttKGEscCk7bShlLHMpO20oZyx1
KTtwLmFtZD17fTtzW2FdPXA7c1tnXT11O3MuZGVmaW5lQW5kUmVxdWlyZT1xO3Mu
X19kPWZ1bmN0aW9uKHcsdil7cCh3LFtlLGYsZ10sdik7fTt9KSgpOwpKU0NDPXdp
bmRvdy5KU0NDfHxmdW5jdGlvbigpe3ZhciBhPXt9LGI9e307cmV0dXJuIHtnZXQ6
ZnVuY3Rpb24oYyl7aWYoYyBpbiBhKXtiW2NdPWFbY10oKTtkZWxldGUgYVtjXTty
ZXR1cm4gYltjXTt9ZWxzZSByZXR1cm4gYltjXTt9LGluaXQ6ZnVuY3Rpb24oYyl7
Y29weV9wcm9wZXJ0aWVzKGEsYyk7fX07fSgpOwpEeW5hVGVtcGxhdGU9d2luZG93
LkR5bmFUZW1wbGF0ZXx8KGZ1bmN0aW9uKCl7dmFyIGc9J1tbJyxpPSdcXFtcXFsn
LGg9J1xcXVxcXSc7dmFyIGw9e307dmFyIGE9e307ZnVuY3Rpb24gZChuLG0pe3Jl
dHVybiBtLmluZGV4T2YoZytuKSE9LTE7fWZ1bmN0aW9uIGUobSl7cmV0dXJuIE9i
amVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtKT09PSJbb2JqZWN0IEFycmF5
XSI7fWZ1bmN0aW9uIGYobSl7cmV0dXJuIG0mJnR5cGVvZiBtPT0ib2JqZWN0Ijt9
ZnVuY3Rpb24gYyhtKXtzd2l0Y2gobSl7Y2FzZSAiJiI6cmV0dXJuICImYW1wOyI7
Y2FzZSAnIic6cmV0dXJuICcmcXVvdDsnO2Nhc2UgIiciOnJldHVybiAnJiMzOTsn
O2Nhc2UgIjwiOnJldHVybiAiJmx0OyI7Y2FzZSAiPiI6cmV0dXJuICImZ3Q7Ijtk
ZWZhdWx0OnJldHVybiBtO319ZnVuY3Rpb24gYihtKXttPVN0cmluZyhtPT09bnVs
bD8iIjptKTtyZXR1cm4gbS5yZXBsYWNlKC8mKD8hXHcrOyl8WyInPD5dL2csYyk7
fWZ1bmN0aW9uIGoobil7Zm9yKHZhciBtIGluIG4pe3ZhciBvPW5bbV07YVtvWzBd
XT1vWzFdO2xbbV09b1sxXTt9fWZ1bmN0aW9uIGsocCxtKXtpZihwLmNoYXJBdCgw
KT09J0AnKXJldHVybiBrKGFbcC5zdWJzdHJpbmcoMSldLG0pO2lmKGQoJyMnLHAp
fHxkKCdeJyxwKSl7dmFyIG89bmV3IFJlZ0V4cChpKyIoXFxefFxcIylcXHMqKC4r
KVxccyoiK2grIlxuKihbXFxzXFxTXSs/KSIraSsiXFwvXFxzKlxcMlxccyoiK2gr
IlxccyoiLCJtZyIpO3A9cC5yZXBsYWNlKG8sZnVuY3Rpb24ocSx2LHQscil7dmFy
IHc9bVt0XTt3PSh3JiZ3Ll9faHRtbCE9PXVuZGVmaW5lZCk/dy5fX2h0bWw6dztp
Zih2PT0nXicpe2lmKCF3fHxlKHcpJiZ3Lmxlbmd0aD09PTApe3JldHVybiBrKHIs
bSk7fWVsc2UgcmV0dXJuICcnO31lbHNlIGlmKHY9PScjJyl7aWYoZSh3KSl7dmFy
IHU9W107Zm9yKHZhciBzPTA7czx3Lmxlbmd0aDtzKyspdS5wdXNoKGsocix3W3Nd
KSk7cmV0dXJuIHUuam9pbignJyk7fWVsc2UgaWYoZih3KSl7cmV0dXJuIGsocix3
KTt9ZWxzZSBpZighKHR5cGVvZiB3PT0nZnVuY3Rpb24nKSlpZih3KXJldHVybiBr
KHIsbSk7cmV0dXJuICcnO319KTt9aWYoIWQoIiIscCkpcmV0dXJuIHA7dmFyIG49
bmV3IFJlZ0V4cChpKyIoPnxcXFt8Jik/KFteXFwvI1xcXl0rPylcXDE/IitoKyIr
IiwiZyIpO3JldHVybiBwLnJlcGxhY2UobixmdW5jdGlvbihxLHMscil7cj1yLnJl
cGxhY2UoL15ccyp8XHMqJC9nLCIiKTt2YXIgdD1tW3JdO2lmKCF0fHx0IGluc3Rh
bmNlb2YgQXJyYXkmJnQubGVuZ3RoPT09MClyZXR1cm4gJyc7c3dpdGNoKHMpe2Nh
c2UgJz4nOmlmKHRbMF0uY2hhckF0KDApPT0nQCcpe3JldHVybiBrKHRbMF0sdFsx
XSk7fWVsc2UgaWYoISh0WzBdIGluIGwpKXJldHVybiAnJztyZXR1cm4gayhsW3Rb
MF1dLHRbMV0pO2Nhc2UgJyYnOmRlZmF1bHQ6aWYod2luZG93LkhUTUwmJnQgaW5z
dGFuY2VvZiBIVE1MKXJldHVybiB0LnRvU3RyaW5nKCk7cmV0dXJuIHQuX19odG1s
IT09dW5kZWZpbmVkP3QuX19odG1sOmIodCk7fX0pO31yZXR1cm4ge3JlZ2lzdGVy
VGVtcGxhdGVzOmoscmVuZGVyVG9IdG1sOmt9O30pKCk7CmZ1bmN0aW9uIEJpZ1Bp
cGUoYSl7Y29weV9wcm9wZXJ0aWVzKHRoaXMse2FyYml0ZXI6QXJiaXRlcixyb290
Tm9kZUlEOidjb250ZW50JyxsaWQ6MCxpc0FqYXg6ZmFsc2UsaXNSZXBsYXk6ZmFs
c2UscnJFbmFibGVkOnRydWUsZG9tQ29udGVudENhbGxiYWNrOmRvbWNvbnRlbnRf
Y2FsbGJhY2ssb25sb2FkQ2FsbGJhY2s6b25sb2FkX2NhbGxiYWNrLGRvbUNvbnRl
bnRFdnQ6T25sb2FkRXZlbnQuT05MT0FEX0RPTUNPTlRFTlRfQ0FMTEJBQ0ssb25s
b2FkRXZ0Ok9ubG9hZEV2ZW50Lk9OTE9BRF9DQUxMQkFDSyxmb3JjZUZpbmlzaDpm
YWxzZSxfcGhhc2VEb25lQ2FsbGJhY2tzOltdLF9jdXJyZW50UGhhc2U6MCxfbGFz
dFBoYXNlOi0xLF9jYWNoZWRfcGFnZWxldHM6e319KTtjb3B5X3Byb3BlcnRpZXMo
dGhpcyxhKTt0aGlzLl9jYXZhbHJ5PSh0aGlzLmxpZCYmd2luZG93LkNhdmFscnlM
b2dnZXIpP0NhdmFscnlMb2dnZXIuZ2V0SW5zdGFuY2UodGhpcy5saWQpOm51bGw7
dGhpcy5faW5zdD10aGlzLl9jYXZhbHJ5JiYod2luZG93Ll9wYWdlbGV0X3Byb2Zp
bGV8fHRoaXMuX2NhdmFscnkuaXNQYWdlbGV0UHJvZmlsZXIoKSk7QmlnUGlwZS5f
Y3VycmVudF9pbnN0YW5jZT10aGlzO2lmKGVudl9nZXQoJ3R0aV92aXNpb24nKT09
MSkobmV3IFRUSVZpc3VhbGl6ZXIodGhpcykpLmluaXQoKTt0aGlzLmFyYml0ZXIu
cmVnaXN0ZXJDYWxsYmFjayh0aGlzLmRvbUNvbnRlbnRDYWxsYmFjayxbJ3BhZ2Vs
ZXRfZGlzcGxheWVkX2FsbCddKTt0aGlzLmFyYml0ZXIuaW5mb3JtKCdwaGFzZV9i
ZWdpbl8wJyx0cnVlLEFyYml0ZXIuQkVIQVZJT1JfU1RBVEUpO3RoaXMuX2luc3Qm
JnRoaXMuX2NhdmFscnkuc2V0VGltZVN0YW1wKCd0X3BoYXNlX2JlZ2luXzAnKTt0
aGlzLm9ubG9hZENhbGxiYWNrPXRoaXMuYXJiaXRlci5yZWdpc3RlckNhbGxiYWNr
KHRoaXMub25sb2FkQ2FsbGJhY2ssWydwYWdlbGV0X2Rpc3BsYXllZF9hbGwnXSk7
fWNvcHlfcHJvcGVydGllcyhCaWdQaXBlLnByb3RvdHlwZSx7X2N0OmZ1bmN0aW9u
KGEpe3JldHVybiAoIWF8fCdsZW5ndGgnIGluIGEmJmEubGVuZ3RoPT09MCk/e306
YTt9LF9kaXNwbGF5UGFnZWxldDpmdW5jdGlvbihlKXtpZih0aGlzLl9pbnN0KXRo
aXMuX2NhdmFscnkub25QYWdlbGV0RXZlbnQoJ2Rpc3BsYXlfc3RhcnQnLGUuaWQp
O2UuY29udGVudD10aGlzLl9jdChlLmNvbnRlbnQpO3ZhciBkPXRydWU7Zm9yKHZh
ciBjIGluIGUuY29udGVudCl7aWYoZS5hcHBlbmQpe2lmKGUuYXBwZW5kPT09J2Jp
Z3BpcGVfcm9vdCcpe3RhcmdldF9pZD10aGlzLnJvb3ROb2RlSUQ7fWVsc2UgdGFy
Z2V0X2lkPWUuYXBwZW5kO31lbHNlIHRhcmdldF9pZD1jO3ZhciBiPWRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKHRhcmdldF9pZCksYT1lLmNvbnRlbnRbY107aWYoYil7
aWYoYSl7aWYodHlwZW9mIGEhPSdzdHJpbmcnKWE9RHluYVRlbXBsYXRlLnJlbmRl
clRvSHRtbChhWzBdLGFbMV0pO2lmKCFlLmFwcGVuZCYmZS5oYXNfaW5saW5lX2pz
KXtpZih3aW5kb3cuRE9NJiZ3aW5kb3cuSFRNTCl7RE9NLnNldENvbnRlbnQoYixI
VE1MKGEpKTt9ZWxzZXtkPWZhbHNlO0Jvb3Rsb2FkZXIubG9hZENvbXBvbmVudHMo
J2RvbScsZnVuY3Rpb24oKXtET00uc2V0Q29udGVudChiLEhUTUwoYSkpO3RoaXMu
YXJiaXRlci5pbmZvcm0oZS5pZCsnX2Rpc3BsYXllZCcsdHJ1ZSxBcmJpdGVyLkJF
SEFWSU9SX1NUQVRFKTt9LmJpbmQodGhpcykpO319ZWxzZSBpZihlLmFwcGVuZHx8
dWEuaWUoKTw4KXtpZighZS5hcHBlbmQpd2hpbGUoYi5maXJzdENoaWxkKWIucmVt
b3ZlQ2hpbGQoYi5maXJzdENoaWxkKTt0aGlzLl9hcHBlbmROb2RlcyhiLGEpO31l
bHNlIGIuaW5uZXJIVE1MPWE7fWlmKHRoaXMuX2luc3QpdGhpcy5fY2F2YWxyeS5v
blBhZ2VsZXRFdmVudCgnZGlzcGxheScsZS5pZCk7Yi5zZXRBdHRyaWJ1dGUoImRh
dGEtcmVmZXJyZXIiLGIuZ2V0QXR0cmlidXRlKCJkYXRhLXJlZmVycmVyIil8fHRh
cmdldF9pZCk7fX1pZihkKXRoaXMuYXJiaXRlci5pbmZvcm0oZS5pZCsnX2Rpc3Bs
YXllZCcsdHJ1ZSxBcmJpdGVyLkJFSEFWSU9SX1NUQVRFKTtpZihlLmNhY2hlX2hp
dCYmZW52X2dldCgncGNfZGVidWcnKT09MSkkKGUuaWQpLnN0eWxlLmJvcmRlcj0i
MXB4IHJlZCBzb2xpZCI7fSxfYXBwZW5kTm9kZXM6ZnVuY3Rpb24oYSxkKXt2YXIg
ZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTt2YXIgYz11YS5pZSgpPDc7
aWYoYylhLmFwcGVuZENoaWxkKGUpO2UuaW5uZXJIVE1MPWQ7dmFyIGI9ZG9jdW1l
bnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO3doaWxlKGUuZmlyc3RDaGlsZCli
LmFwcGVuZENoaWxkKGUuZmlyc3RDaGlsZCk7YS5hcHBlbmRDaGlsZChiKTtpZihj
KWEucmVtb3ZlQ2hpbGQoZSk7fSxfZG93bmxvYWRKc0ZvclBhZ2VsZXQ6ZnVuY3Rp
b24oYSl7Qm9vdGxvYWRlci5sb2FkUmVzb3VyY2VzKGEuanN8fFtdLGJpbmQodGhp
cyxmdW5jdGlvbigpe2lmKHRoaXMuX2luc3QpdGhpcy5fY2F2YWxyeS5vblBhZ2Vs
ZXRFdmVudCgnanNkb25lJyxhLmlkKTthLnJlcXVpcmVzPWEucmVxdWlyZXN8fFtd
O2lmKCF0aGlzLmlzQWpheHx8YS5waGFzZT49MSlhLnJlcXVpcmVzLnB1c2goJ3Vp
cGFnZV9vbmxvYWQnKTt2YXIgYz1iaW5kKHRoaXMsZnVuY3Rpb24oKXtpZighdGhp
cy5faXNSZWxldmFudCgpKXJldHVybjtpbnZva2VfY2FsbGJhY2tzKGEub25sb2Fk
KTtpZih0aGlzLl9pbnN0KXRoaXMuX2NhdmFscnkub25QYWdlbGV0RXZlbnQoJ29u
bG9hZCcsYS5pZCk7dGhpcy5hcmJpdGVyLmluZm9ybSgncGFnZWxldF9vbmxvYWQn
LHRydWUsQXJiaXRlci5CRUhBVklPUl9FVkVOVCk7YS5wcm92aWRlcyYmdGhpcy5h
cmJpdGVyLmluZm9ybShhLnByb3ZpZGVzLHRydWUsQXJiaXRlci5CRUhBVklPUl9T
VEFURSk7fSk7dmFyIGI9YmluZCh0aGlzLGZ1bmN0aW9uKCl7dGhpcy5faXNSZWxl
dmFudCgpJiZpbnZva2VfY2FsbGJhY2tzKGEub25hZnRlcmxvYWQpO30pO3RoaXMu
YXJiaXRlci5yZWdpc3RlckNhbGxiYWNrKGMsYS5yZXF1aXJlcyk7dGhpcy5hcmJp
dGVyLnJlZ2lzdGVyQ2FsbGJhY2soYixbdGhpcy5vbmxvYWRFdnRdKTt9KSxmYWxz
ZSxhLmlkKTt9LF9kb3dubG9hZENzc0FuZERpc3BsYXlQYWdlbGV0OmZ1bmN0aW9u
KGMpe2lmKHRoaXMuX2luc3QpdGhpcy5fY2F2YWxyeS5vblBhZ2VsZXRFdmVudCgn
Y3NzJyxjLmlkKTt2YXIgYj1iaW5kKHRoaXMsZnVuY3Rpb24oKXt2YXIgZD1jLmRp
c3BsYXlfZGVwZW5kZW5jeXx8W107dmFyIGY9W107Zm9yKHZhciBlPTA7ZTxkLmxl
bmd0aDtlKyspZi5wdXNoKGRbZV0rJ19kaXNwbGF5ZWQnKTt0aGlzLmFyYml0ZXIu
cmVnaXN0ZXJDYWxsYmFjayh0aGlzLl9kaXNwbGF5UGFnZWxldC5iaW5kKHRoaXMs
YyksZik7fSk7dmFyIGE9Yy5jc3N8fFtdO2lmKHRoaXMuaXNSZXBsYXkpe0Jvb3Rs
b2FkZXIubG9hZFJlc291cmNlcyhhLG51bGwsZmFsc2UsYy5pZCk7YigpO31lbHNl
IEJvb3Rsb2FkZXIubG9hZFJlc291cmNlcyhhLGIsZmFsc2UsYy5pZCk7aWYodGhp
cy5faW5zdCl0aGlzLl9jYXZhbHJ5Lm9uUGFnZWxldEV2ZW50KCdjc3NfZW5kJyxj
LmlkKTt9LF9kb3dubG9hZEFuZFNjaGVkdWxlRGlzcGxheUpTOmZ1bmN0aW9uKGQp
e3ZhciBjPWQuanN8fFtdO3ZhciBhPVtdO2Zvcih2YXIgYj0wO2I8Yy5sZW5ndGg7
YisrKWlmKEJvb3Rsb2FkZXIuaXNEaXNwbGF5SlMoY1tiXSkpYS5wdXNoKGNbYl0p
O0Jvb3Rsb2FkZXIubG9hZFJlc291cmNlcyhhLGJpbmQodGhpcyxmdW5jdGlvbigp
e2lmKGQub25kaXNwbGF5JiZkLm9uZGlzcGxheS5sZW5ndGgpdGhpcy5hcmJpdGVy
LnJlZ2lzdGVyQ2FsbGJhY2soZnVuY3Rpb24oKXtpbnZva2VfY2FsbGJhY2tzKGQu
b25kaXNwbGF5KTt9LFtkLmlkKydfZGlzcGxheWVkJ10pO30pKTt9LG9uUGFnZWxl
dEFycml2ZTpmdW5jdGlvbihhKXtpZih0aGlzLl9pbnN0KXRoaXMuX2NhdmFscnku
b25QYWdlbGV0RXZlbnQoJ2Fycml2ZScsYS5pZCk7dmFyIGI9YS5waGFzZTtpZigh
dGhpcy5fcGhhc2VEb25lQ2FsbGJhY2tzW2JdKXRoaXMuX3BoYXNlRG9uZUNhbGxi
YWNrc1tiXT10aGlzLmFyYml0ZXIucmVnaXN0ZXJDYWxsYmFjayh0aGlzLl9vblBo
YXNlRG9uZS5iaW5kKHRoaXMpLFsncGhhc2VfY29tcGxldGVfJytiXSk7dGhpcy5h
cmJpdGVyLnJlZ2lzdGVyQ2FsbGJhY2sodGhpcy5fcGhhc2VEb25lQ2FsbGJhY2tz
W2JdLFthLmlkKydfZGlzcGxheWVkJ10pO2lmKGEuY2FjaGVhYmxlKXtpZihhLmNh
Y2hlX2hpdCl7QXJiaXRlci5yZWdpc3RlckNhbGxiYWNrKGZ1bmN0aW9uKCl7dGhp
cy5wcm9jZXNzUGFnZWxldCh0aGlzLmxvYWRGcm9tQ2FjaGUoYSkpO30uYmluZCh0
aGlzKSxbJ3BhZ2VsZXRfY2FjaGVfbG9hZGVkJ10pO31lbHNle1BhZ2VsZXRDYWNo
ZS53cml0ZShhKTt0aGlzLnByb2Nlc3NQYWdlbGV0KGEpO319ZWxzZSB0aGlzLnBy
b2Nlc3NQYWdlbGV0KGEpO2lmKHRoaXMuX2luc3QpdGhpcy5fY2F2YWxyeS5vblBh
Z2VsZXRFdmVudCgnYXJyaXZlX2VuZCcsYS5pZCk7fSxwcm9jZXNzUGFnZWxldDpm
dW5jdGlvbihiKXt2YXIgYz1iLnBoYXNlO2lmKGIucGFnZV9jYWNoZSl0aGlzLl9j
YWNoZWRfcGFnZWxldHNbJ2lkXycrYi5pZF09YjtpZihiLnRoZV9lbmQpdGhpcy5f
bGFzdFBoYXNlPWIucGhhc2U7aWYoYi50dGlfcGhhc2UhPT11bmRlZmluZWQpdGhp
cy5fdHRpUGhhc2U9Yi50dGlfcGhhc2U7Yi5qc2NjJiZpbnZva2VfY2FsbGJhY2tz
KFtiLmpzY2NdKTtiLnRwbHRzJiZEeW5hVGVtcGxhdGUucmVnaXN0ZXJUZW1wbGF0
ZXMoYi50cGx0cyk7Qm9vdGxvYWRlci5zZXRSZXNvdXJjZU1hcChiLnJlc291cmNl
X21hcCk7Qm9vdGxvYWRlci5lbmFibGVCb290bG9hZCh0aGlzLl9jdChiLmJvb3Rs
b2FkYWJsZSkpO3ZhciBkPSdwaGFzZV9iZWdpbl8nK2M7dGhpcy5hcmJpdGVyLnJl
Z2lzdGVyQ2FsbGJhY2sodGhpcy5fZG93bmxvYWRDc3NBbmREaXNwbGF5UGFnZWxl
dC5iaW5kKHRoaXMsYiksW2RdKTt0aGlzLmFyYml0ZXIucmVnaXN0ZXJDYWxsYmFj
ayh0aGlzLl9kb3dubG9hZEFuZFNjaGVkdWxlRGlzcGxheUpTLmJpbmQodGhpcyxi
KSxbZF0pO3ZhciBhO2lmKCF0aGlzLmpzTm9uQmxvY2spe2E9dGhpcy5kb21Db250
ZW50RXZ0O31lbHNlIGE9Yi5pZCsnX2Rpc3BsYXllZCc7dGhpcy5hcmJpdGVyLnJl
Z2lzdGVyQ2FsbGJhY2sodGhpcy5vbmxvYWRDYWxsYmFjayxbJ3BhZ2VsZXRfb25s
b2FkJ10pO3RoaXMuYXJiaXRlci5yZWdpc3RlckNhbGxiYWNrKHRoaXMuX2Rvd25s
b2FkSnNGb3JQYWdlbGV0LmJpbmQodGhpcyxiKSxbYV0pO2IuaXNfbGFzdCYmdGhp
cy5hcmJpdGVyLmluZm9ybSgncGhhc2VfY29tcGxldGVfJytjLHRydWUsQXJiaXRl
ci5CRUhBVklPUl9TVEFURSk7Yi5pbnZhbGlkYXRlX2NhY2hlJiZiLmludmFsaWRh
dGVfY2FjaGUubGVuZ3RoJiZBcmJpdGVyLmluZm9ybShBcmJpdGVyLlBBR0VDQUNI
RV9JTlZBTElEQVRFLGIuaW52YWxpZGF0ZV9jYWNoZSk7fSxfb25QaGFzZURvbmU6
ZnVuY3Rpb24oKXtpZih0aGlzLl9jdXJyZW50UGhhc2U9PT10aGlzLl90dGlQaGFz
ZSYmdGhpcy5yckVuYWJsZWQpe3RoaXMuYXJiaXRlci5pbmZvcm0oJ3R0aV9iaWdw
aXBlJyx7czp0aGlzLmxpZH0sQXJiaXRlci5CRUhBVklPUl9FVkVOVCk7dGhpcy5f
Y2F2YWxyeSYmdGhpcy5fY2F2YWxyeS5zZXRUVElQaGFzZSh0aGlzLl90dGlQaGFz
ZSkubWVhc3VyZVBhZ2VMb2FkKHRydWUpO312YXIgYj10aGlzLl9jdXJyZW50UGhh
c2UrMTt2YXIgYT1iaW5kKHRoaXMsZnVuY3Rpb24oKXt0aGlzLl9pbnN0JiZ0aGlz
Ll9jYXZhbHJ5LnNldFRpbWVTdGFtcCgndF9waGFzZV9iZWdpbl8nK2IpO3RoaXMu
YXJiaXRlci5pbmZvcm0oJ3BoYXNlX2JlZ2luXycrYix0cnVlLEFyYml0ZXIuQkVI
QVZJT1JfU1RBVEUpO30pO2lmKHRoaXMuX2N1cnJlbnRQaGFzZT09PXRoaXMuX2xh
c3RQaGFzZSYmdGhpcy5faXNSZWxldmFudCgpKXRoaXMuYXJiaXRlci5pbmZvcm0o
J3BhZ2VsZXRfZGlzcGxheWVkX2FsbCcsdHJ1ZSxBcmJpdGVyLkJFSEFWSU9SX1NU
QVRFKTt0aGlzLl9jdXJyZW50UGhhc2UrKztpZih0aGlzLmlzUmVwbGF5KXthKCk7
fWVsc2UgaWYodWEuaWUoKSl7c2V0VGltZW91dChhLDIwKTt9ZWxzZSBhKCk7fSxf
aXNSZWxldmFudDpmdW5jdGlvbigpe3JldHVybiB0aGlzPT1CaWdQaXBlLl9jdXJy
ZW50X2luc3RhbmNlfHx0aGlzLmlzUmVwbGF5fHx0aGlzLmpzTm9uQmxvY2t8fHRo
aXMuZm9yY2VGaW5pc2g7fSxnZXRBbGxDYWNoZWRQYWdlbGV0czpmdW5jdGlvbigp
e3JldHVybiB0aGlzLl9jYWNoZWRfcGFnZWxldHM7fX0pOwpmdW5jdGlvbiBuYW1l
c3BhY2UoZSxmKXt2YXIgZD1lLnNwbGl0KCcuJyksYT0wLGI9ZC5sZW5ndGgsYz1m
fHx3aW5kb3c7Zm9yKDthPGI7YSsrKXtpZighY1tkW2FdXSljW2RbYV1dPXt9O2M9
Y1tkW2FdXTt9cmV0dXJuIGM7fQpmdW5jdGlvbiBpbmNvcnBvcmF0ZV9mcmFnbWVu
dChhKXt2YXIgYz0vXig/Oig/OlteOlwvPyNdKyk6KT8oPzpcL1wvKD86W15cLz8j
XSopKT8oW14/I10qKSg/Olw/KFteI10qKSk/KD86IyguKikpPy87dmFyIGI9Jyc7
YS5ocmVmLnJlcGxhY2UoYyxmdW5jdGlvbihkLGcsaCxmKXt2YXIgZSxpO2U9aT1n
KyhoPyc/JytoOicnKTtpZihmKXtmPWYucmVwbGFjZSgvXighfCUyMSkvLCcnKTtp
ZihmLmNoYXJBdCgwKT09Jy8nKWU9Zi5yZXBsYWNlKC9eXC8rLywnLycpO31pZihl
IT1pKXtpZih3aW5kb3cuX3NjcmlwdF9wYXRoKWRvY3VtZW50LmNvb2tpZT0icmRp
cj0iK3dpbmRvdy5fc2NyaXB0X3BhdGgrIjsgcGF0aD0vOyBkb21haW49Iit3aW5k
b3cubG9jYXRpb24uaG9zdG5hbWUucmVwbGFjZSgvXi4qKFwuZmFjZWJvb2tcLi4q
KSQvaSwnJDEnKTt3aW5kb3cubG9jYXRpb24ucmVwbGFjZShiK2UpO319KTt9aWYo
d2luZG93Ll9zY3JpcHRfcGF0aCE9PXVuZGVmaW5lZClpbmNvcnBvcmF0ZV9mcmFn
bWVudCh3aW5kb3cubG9jYXRpb24pOwohZnVuY3Rpb24oKXt2YXIgYj1kb2N1bWVu
dC5kb2N1bWVudEVsZW1lbnQ7dmFyIGE9ZnVuY3Rpb24oYyl7Yz1jfHx3aW5kb3cu
ZXZlbnQ7dmFyIGQ9Yy50YXJnZXR8fGMuc3JjRWxlbWVudDt2YXIgZj1kLmdldEF0
dHJpYnV0ZSgncGxhY2Vob2xkZXInKTtpZihmKXt2YXIgZT1QYXJlbnQuYnlDbGFz
cyhkLCdmb2N1c190YXJnZXQnKTtpZignZm9jdXMnPT1jLnR5cGV8fCdmb2N1c2lu
Jz09Yy50eXBlKXtpZihkLnZhbHVlPT1mJiZDU1MuaGFzQ2xhc3MoZCwnRE9NQ29u
dHJvbF9wbGFjZWhvbGRlcicpKXtkLnZhbHVlPScnO0NTUy5yZW1vdmVDbGFzcyhk
LCdET01Db250cm9sX3BsYWNlaG9sZGVyJyk7fWlmKGUpe0NTUy5hZGRDbGFzcyhl
LCdjaGlsZF9pc19hY3RpdmUnKTtDU1MuYWRkQ2xhc3MoZSwnY2hpbGRfaXNfZm9j
dXNlZCcpO0NTUy5hZGRDbGFzcyhlLCdjaGlsZF93YXNfZm9jdXNlZCcpO0FyYml0
ZXIuaW5mb3JtKCdyZWZsb3cnKTt9fWVsc2V7aWYoZC52YWx1ZT09Jycpe0NTUy5h
ZGRDbGFzcyhkLCdET01Db250cm9sX3BsYWNlaG9sZGVyJyk7ZC52YWx1ZT1mO2Um
JkNTUy5yZW1vdmVDbGFzcyhlLCdjaGlsZF9pc19hY3RpdmUnKTtDU1Muc2V0U3R5
bGUoZCwnZGlyZWN0aW9uJywnJyk7fWUmJkNTUy5yZW1vdmVDbGFzcyhlLCdjaGls
ZF9pc19mb2N1c2VkJyk7fX19O2lmKGIuYWRkRXZlbnRMaXN0ZW5lcil7Yi5hZGRF
dmVudExpc3RlbmVyKCdmb2N1cycsYSx0cnVlKTtiLmFkZEV2ZW50TGlzdGVuZXIo
J2JsdXInLGEsdHJ1ZSk7fWVsc2UgYi5vbmZvY3VzaW49Yi5vbmZvY3Vzb3V0PWE7
fSgpOwpkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQub25rZXlkb3duPWZ1bmN0aW9u
KGEpe2E9YXx8d2luZG93LmV2ZW50O3ZhciBiPWEudGFyZ2V0fHxhLnNyY0VsZW1l
bnQ7dmFyIGM9YS5rZXlDb2RlPT0xMyYmIWEuYWx0S2V5JiYhYS5jdHJsS2V5JiYh
YS5tZXRhS2V5JiYhYS5zaGlmdEtleSYmQ1NTLmhhc0NsYXNzKGIsJ2VudGVyX3N1
Ym1pdCcpO2lmKGMpe0Jvb3Rsb2FkZXIubG9hZENvbXBvbmVudHMoWydkb20nLCdp
bnB1dC1tZXRob2RzJ10sZnVuY3Rpb24oKXtpZighSW5wdXQuaXNFbXB0eShiKSl7
dmFyIGQ9RE9NLnNjcnkoYi5mb3JtLCcuZW50ZXJfc3VibWl0X3RhcmdldCcpWzBd
fHxET00uc2NyeShiLmZvcm0sJ1t0eXBlPSJzdWJtaXQiXScpWzBdO2QmJmQuY2xp
Y2soKTt9fSk7cmV0dXJuIGZhbHNlO319OwpmdW5jdGlvbiBmY19jbGljayhhLGIp
e3VzZXJfYWN0aW9uKGEsJ3VmaScpO2ZjX2V4cGFuZChhLGIpO31mdW5jdGlvbiBm
Y19leHBhbmQoYSxiKXt2YXIgYz1QYXJlbnQuYnlUYWcoYSwnZm9ybScpO2ZjX3Vu
Y29sbGFwc2UoYyk7Q1NTLnJlbW92ZUNsYXNzKGMsJ2hpZGRlbl9hZGRfY29tbWVu
dCcpO2lmKGIhPT1mYWxzZSkoYy5hZGRfY29tbWVudF90ZXh0X3RleHR8fGMuYWRk
X2NvbW1lbnRfdGV4dCkuZm9jdXMoKTtyZXR1cm4gZmFsc2U7fWZ1bmN0aW9uIGZj
X3VuY29sbGFwc2UoYSl7Q1NTLnJlbW92ZUNsYXNzKGEsJ2NvbGxhcHNlZF9jb21t
ZW50cycpO30=
------------UAMIZgc77nT2aFBV02afBr
Content-Disposition: inline; filename=T40ft2wPAH0.js
Content-Type: application/x-javascript; charset=utf-8; name=T40ft2wPAH0.js
Content-Location: http://static.ak.fbcdn.net/rsrc.php/v1/yb/r/T40ft2wPAH0.js
Content-Transfer-Encoding: Base64
LyoxMzEzOTg3NDUyLDE3NjgzMzk3NSovCgppZiAod2luZG93LkNhdmFscnlMb2dn
ZXIpIHsgQ2F2YWxyeUxvZ2dlci5zdGFydF9qcyhbIlZmblozIl0pOyB9CgpmdW5j
dGlvbiBvYmplY3QoYil7dmFyIGE9bmV3IEZ1bmN0aW9uKCk7YS5wcm90b3R5cGU9
YjtyZXR1cm4gbmV3IGEoKTt9ZnVuY3Rpb24gaXNfc2NhbGFyKGEpe3JldHVybiAo
L3N0cmluZ3xudW1iZXJ8Ym9vbGVhbi8pLnRlc3QodHlwZW9mIGEpO31mdW5jdGlv
biBrZXlzKGMpe3ZhciBiPVtdO2Zvcih2YXIgYSBpbiBjKWIucHVzaChhKTtyZXR1
cm4gYjt9ZnVuY3Rpb24gdmFsdWVzKGIpe3ZhciBjPVtdO2Zvcih2YXIgYSBpbiBi
KWMucHVzaChiW2FdKTtyZXR1cm4gYzt9ZnVuY3Rpb24gY291bnQoYyl7dmFyIGE9
MDtmb3IodmFyIGIgaW4gYylhKys7cmV0dXJuIGE7fWZ1bmN0aW9uIGFyZV9lcXVh
bChhLGIpe3JldHVybiBKU09OLnN0cmluZ2lmeShhKT09SlNPTi5zdHJpbmdpZnko
Yik7fWZ1bmN0aW9uIG1lcmdlKCl7dmFyIGI9e307Zm9yKHZhciBhPTA7YTxhcmd1
bWVudHMubGVuZ3RoO2ErKyljb3B5X3Byb3BlcnRpZXMoYixhcmd1bWVudHNbYV0p
O3JldHVybiBiO31PYmplY3QuZnJvbT1mdW5jdGlvbihjLGUpe3ZhciBkPXt9O3Zh
ciBiPWhhc0FycmF5TmF0dXJlKGUpO2lmKHR5cGVvZiBlPT0ndW5kZWZpbmVkJyll
PXRydWU7Zm9yKHZhciBhPWMubGVuZ3RoO2EtLTspZFtjW2FdXT1iP2VbYV06ZTty
ZXR1cm4gZDt9O2Z1bmN0aW9uIGNvYWxlc2NlKCl7Zm9yKHZhciBhPTA7YTxhcmd1
bWVudHMubGVuZ3RoOysrYSlpZihhcmd1bWVudHNbYV0hPW51bGwpcmV0dXJuIGFy
Z3VtZW50c1thXTtyZXR1cm4gbnVsbDt9CiFmdW5jdGlvbigpe2Z1bmN0aW9uIGEo
Yil7cmV0dXJuIGZ1bmN0aW9uKCl7aWYodGhpcz09PXdpbmRvdyl0aHJvdyBuZXcg
VHlwZUVycm9yKCk7cmV0dXJuIGIuYXBwbHkodGhpcyxhcmd1bWVudHMpO307fWNv
cHlfcHJvcGVydGllcyhBcnJheS5wcm90b3R5cGUse21hcDpmdW5jdGlvbihjLGIp
e2lmKHRoaXM9PT13aW5kb3d8fHR5cGVvZiBjIT0nZnVuY3Rpb24nKXRocm93IG5l
dyBUeXBlRXJyb3IoKTt2YXIgZDt2YXIgZT10aGlzLmxlbmd0aDt2YXIgZj1uZXcg
QXJyYXkoZSk7Zm9yKGQ9MDtkPGU7KytkKWlmKGQgaW4gdGhpcylmW2RdPWMuY2Fs
bChiLHRoaXNbZF0sZCx0aGlzKTtyZXR1cm4gZjt9LGZvckVhY2g6ZnVuY3Rpb24o
YyxiKXt0aGlzLm1hcChjLGIpO3JldHVybiB0aGlzO30sZmlsdGVyOmZ1bmN0aW9u
KGMsYil7Yz1jfHxmdW5jdGlvbihoKXtyZXR1cm4gaDt9O2lmKHRoaXM9PT13aW5k
b3d8fHR5cGVvZiBjIT0nZnVuY3Rpb24nKXRocm93IG5ldyBUeXBlRXJyb3IoKTt2
YXIgZCxnLGU9dGhpcy5sZW5ndGgsZj1bXTtmb3IoZD0wO2Q8ZTsrK2QpaWYoZCBp
biB0aGlzKXtnPXRoaXNbZF07aWYoYy5jYWxsKGIsZyxkLHRoaXMpKWYucHVzaChn
KTt9cmV0dXJuIGY7fSxldmVyeTpmdW5jdGlvbihkLGMpe3ZhciBiPXRoaXMuZmls
dGVyKGZ1bmN0aW9uKCl7cmV0dXJuIDE7fSk7cmV0dXJuICh0aGlzLmZpbHRlcihk
LGMpLmxlbmd0aD09Yi5sZW5ndGgpO30sc29tZTpmdW5jdGlvbihjLGIpe3JldHVy
biAodGhpcy5maWx0ZXIoYyxiKS5sZW5ndGg+MCk7fSxyZWR1Y2U6bnVsbCxyZWR1
Y2VSaWdodDpudWxsLHNvcnQ6YShBcnJheS5wcm90b3R5cGUuc29ydCkscmV2ZXJz
ZTphKEFycmF5LnByb3RvdHlwZS5yZXZlcnNlKSxjb25jYXQ6YShBcnJheS5wcm90
b3R5cGUuY29uY2F0KSxzbGljZTphKEFycmF5LnByb3RvdHlwZS5zbGljZSksaW5k
ZXhPZjphKEFycmF5LnByb3RvdHlwZS5pbmRleE9mfHxmdW5jdGlvbihkLGIpe3Zh
ciBjPXRoaXMubGVuZ3RoO2J8PTA7aWYoYjwwKWIrPWM7Zm9yKDtiPGM7YisrKWlm
KGIgaW4gdGhpcyYmdGhpc1tiXT09PWQpcmV0dXJuIGI7cmV0dXJuIC0xO30pLGNv
bnRhaW5zOmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmluZGV4T2YoYikhPS0xO30s
cmVtb3ZlOmZ1bmN0aW9uKGMpe3ZhciBiPXRoaXMuaW5kZXhPZihjKTtpZihiIT0t
MSl0aGlzLnNwbGljZShiLDEpO319KTtBcnJheS5wcm90b3R5cGUuZWFjaD1BcnJh
eS5wcm90b3R5cGUuZm9yRWFjaDtBcnJheS5wcm90b3R5cGUuY2xvbmU9QXJyYXku
cHJvdG90eXBlLnNsaWNlO30oKTsKZnVuY3Rpb24gbXVmZmluaXplKGQpe3ZhciBj
PSdhJzt2YXIgYj0nZCc7dmFyIGE9W2MsYl0uam9pbignJyk7cmV0dXJuIGQucmVw
bGFjZSgvbXVmZmluL2csYSk7fXdpbmRvdy5VdGlsPXdpbmRvdy5VdGlsfHx7d2Fy
bjpiYWdvZmhvbGRpbmcsZXJyb3I6YmFnb2Zob2xkaW5nLGluZm86YmFnb2Zob2xk
aW5nLGxvZzpiYWdvZmhvbGRpbmcsc3RhY2s6YmFnb2Zob2xkaW5nfTtpZih0eXBl
b2YgY29uc29sZT09J3VuZGVmaW5lZCcpY29uc29sZT17bG9nOmJhZ29maG9sZGlu
Z307CndpbmRvdy5vbmxvYWRSZWdpc3Rlcj1mdW5jdGlvbihhKXt3aW5kb3cubG9h
ZGVkP19ydW5Ib29rKGEpOl9hZGRIb29rKCdvbmxvYWRob29rcycsYSk7fTtmdW5j
dGlvbiBvbmFmdGVybG9hZFJlZ2lzdGVyKGEpe3dpbmRvdy5hZnRlcmxvYWRlZD9z
ZXRUaW1lb3V0KGZ1bmN0aW9uKCl7X3J1bkhvb2soYSk7fSwwKTpfYWRkSG9vaygn
b25hZnRlcmxvYWRob29rcycsYSk7fWZ1bmN0aW9uIF9vbmxvYWRIb29rKCl7IXdp
bmRvdy5sb2FkZWQmJndpbmRvdy5DYXZhbHJ5TG9nZ2VyJiZDYXZhbHJ5TG9nZ2Vy
LmdldEluc3RhbmNlKCkuc2V0VGltZVN0YW1wKCd0X3ByZWhvb2tzJyk7X3J1bkhv
b2tzKCdvbmxvYWRob29rcycpOyF3aW5kb3cubG9hZGVkJiZ3aW5kb3cuQ2F2YWxy
eUxvZ2dlciYmQ2F2YWxyeUxvZ2dlci5nZXRJbnN0YW5jZSgpLnNldFRpbWVTdGFt
cCgndF9ob29rcycpO3dpbmRvdy5sb2FkZWQ9dHJ1ZTtBcmJpdGVyLmluZm9ybSgn
dWlwYWdlX29ubG9hZCcsdHJ1ZSxBcmJpdGVyLkJFSEFWSU9SX1NUQVRFKTt9ZnVu
Y3Rpb24gX29uYWZ0ZXJsb2FkSG9vaygpe19ydW5Ib29rcygnb25hZnRlcmxvYWRo
b29rcycpO3dpbmRvdy5hZnRlcmxvYWRlZD10cnVlO31mdW5jdGlvbiBfcnVuSG9v
ayhiKXt0cnl7cmV0dXJuIGIoKTt9Y2F0Y2goYSl7fX1mdW5jdGlvbiBfcnVuSG9v
a3MoYil7dmFyIGQ9Yj09J29uYmVmb3JlbGVhdmVob29rcyd8fGI9PSdvbmJlZm9y
ZXVubG9hZGhvb2tzJzt2YXIgZT1udWxsO2Rve3ZhciBhPXdpbmRvd1tiXTtpZigh
ZCl3aW5kb3dbYl09bnVsbDtpZighYSlicmVhaztmb3IodmFyIGM9MDtjPGEubGVu
Z3RoO2MrKylpZihkKXtlPWV8fF9ydW5Ib29rKGFbY10pO31lbHNlIF9ydW5Ib29r
KGFbY10pO2lmKGQpYnJlYWs7fXdoaWxlKHdpbmRvd1tiXSk7aWYoZCYmZSlyZXR1
cm4gZTt9ZnVuY3Rpb24ga2VlcF93aW5kb3dfc2V0X2FzX2xvYWRlZCgpe2lmKHdp
bmRvdy5sb2FkZWQ9PWZhbHNlKXt3aW5kb3cubG9hZGVkPXRydWU7X3J1bkhvb2tz
KCdvbmxvYWRob29rcycpO31pZih3aW5kb3cuYWZ0ZXJsb2FkZWQ9PWZhbHNlKXt3
aW5kb3cuYWZ0ZXJsb2FkZWQ9dHJ1ZTtfcnVuSG9va3MoJ29uYWZ0ZXJsb2FkaG9v
a3MnKTt9fUFyYml0ZXIucmVnaXN0ZXJDYWxsYmFjayhfb25sb2FkSG9vayxbT25s
b2FkRXZlbnQuT05MT0FEX0RPTUNPTlRFTlRfQ0FMTEJBQ0ssSW5pdGlhbEpTTG9h
ZGVyLklOSVRJQUxfSlNfUkVBRFldKTtBcmJpdGVyLnJlZ2lzdGVyQ2FsbGJhY2so
X29uYWZ0ZXJsb2FkSG9vayxbT25sb2FkRXZlbnQuT05MT0FEX0RPTUNPTlRFTlRf
Q0FMTEJBQ0ssT25sb2FkRXZlbnQuT05MT0FEX0NBTExCQUNLLEluaXRpYWxKU0xv
YWRlci5JTklUSUFMX0pTX1JFQURZXSk7QXJiaXRlci5zdWJzY3JpYmUoT25sb2Fk
RXZlbnQuT05CRUZPUkVVTkxPQUQsZnVuY3Rpb24oYixhKXthLndhcm49X3J1bkhv
b2tzKCdvbmJlZm9yZWxlYXZlaG9va3MnKXx8X3J1bkhvb2tzKCdvbmJlZm9yZXVu
bG9hZGhvb2tzJyk7aWYoIWEud2Fybil7d2luZG93LmxvYWRlZD1mYWxzZTt3aW5k
b3cuYWZ0ZXJsb2FkZWQ9ZmFsc2U7fX0sQXJiaXRlci5TVUJTQ1JJQkVfTkVXKTtB
cmJpdGVyLnN1YnNjcmliZShPbmxvYWRFdmVudC5PTlVOTE9BRCxmdW5jdGlvbihi
LGEpe19ydW5Ib29rcygnb251bmxvYWRob29rcycpO30sQXJiaXRlci5TVUJTQ1JJ
QkVfTkVXKTsKdm9pZCgwKTsKZnVuY3Rpb24gQXN5bmNTaWduYWwoYixhKXt0aGlz
LmRhdGE9YXx8e307aWYod2luZG93LkVudiYmRW52LnRyYWNraW5nX2RvbWFpbiYm
Yi5jaGFyQXQoMCk9PScvJyliPUVudi50cmFja2luZ19kb21haW4rYjt0aGlzLnVy
aT1iO3RoaXMuaGFuZGxlcj1udWxsO31Bc3luY1NpZ25hbC5wcm90b3R5cGUuc2V0
SGFuZGxlcj1mdW5jdGlvbihhKXt0aGlzLmhhbmRsZXI9YTtyZXR1cm4gdGhpczt9
O0FzeW5jU2lnbmFsLnByb3RvdHlwZS5zZW5kPWZ1bmN0aW9uKCl7dmFyIGM9dGhp
cy5oYW5kbGVyLGI9dGhpcy5kYXRhLGc9dGhpcy51cmksZj1bXSxkPW5ldyBJbWFn
ZSgpLGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Bvc3RfZm9ybV9pZCcpO2Iu
YXN5bmNTaWduYWw9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjEwMDAwKSsxO2lm
KGEpYi5wb3N0X2Zvcm1faWQ9YS52YWx1ZTtpZih3aW5kb3cuRW52KXtiLl9fdXNl
cj1FbnYudXNlcjtpZihFbnYuZmJfaXNiKWIuZmJfaXNiPUVudi5mYl9pc2I7fWZv
cih2YXIgZSBpbiBiKWYucHVzaChlbmNvZGVVUklDb21wb25lbnQoZSkrJz0nK2Vu
Y29kZVVSSUNvbXBvbmVudChiW2VdKSk7aWYoZy5pbmRleE9mKCc/Jyk9PS0xKWcr
PSc/JztnKz1mLmpvaW4oJyYnKTtpZihjKWQub25sb2FkPWQub25lcnJvcj0oZnVu
Y3Rpb24oaSxoKXtyZXR1cm4gZnVuY3Rpb24oKXtoKChpLmhlaWdodD09MSkpO307
fSkoZCxjKTtkLnNyYz1nO3JldHVybiB0aGlzO307CmZ1bmN0aW9uIHNldENvb2tp
ZShhLGIsZCxlKXtpZihlbnZfZ2V0KCdub19jb29raWVzJykmJmEhPSd0cGEnKXJl
dHVybjtpZihkKXt2YXIgZj1uZXcgRGF0ZSgpO3ZhciBjPW5ldyBEYXRlKCk7Yy5z
ZXRUaW1lKGYuZ2V0VGltZSgpK2QpO31kb2N1bWVudC5jb29raWU9YSsiPSIrZW5j
b2RlVVJJQ29tcG9uZW50KGIpKyI7ICIrKGQ/ImV4cGlyZXM9IitjLnRvR01UU3Ry
aW5nKCkrIjsgIjoiIikrInBhdGg9IisoZXx8Jy8nKSsiOyBkb21haW49Iit3aW5k
b3cubG9jYXRpb24uaG9zdG5hbWUucmVwbGFjZSgvXi4qKFwuZmFjZWJvb2tcLi4q
KSQvaSwnJDEnKTt9ZnVuY3Rpb24gY2xlYXJDb29raWUoYSl7ZG9jdW1lbnQuY29v
a2llPWErIj07IGV4cGlyZXM9U2F0LCAwMSBKYW4gMjAwMCAwMDowMDowMCBHTVQ7
ICIrInBhdGg9LzsgZG9tYWluPSIrd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLnJl
cGxhY2UoL14uKihcLmZhY2Vib29rXC4uKikkL2ksJyQxJyk7fWZ1bmN0aW9uIGdl
dENvb2tpZShkKXt2YXIgZT1kKyI9Ijt2YXIgYj1kb2N1bWVudC5jb29raWUuc3Bs
aXQoJzsnKTtmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl7dmFyIGE9YltjXTt3
aGlsZShhLmNoYXJBdCgwKT09JyAnKWE9YS5zdWJzdHJpbmcoMSxhLmxlbmd0aCk7
aWYoYS5pbmRleE9mKGUpPT0wKXJldHVybiBkZWNvZGVVUklDb21wb25lbnQoYS5z
dWJzdHJpbmcoZS5sZW5ndGgsYS5sZW5ndGgpKTt9cmV0dXJuIG51bGw7fQpmdW5j
dGlvbiBIVE1MKGEpe2lmKGEmJmEuX19odG1sKWE9YS5fX2h0bWw7aWYodGhpcz09
PXdpbmRvdyl7aWYoYSBpbnN0YW5jZW9mIEhUTUwpcmV0dXJuIGE7cmV0dXJuIG5l
dyBIVE1MKGEpO310aGlzLl9jb250ZW50PWE7dGhpcy5fZGVmZXI9ZmFsc2U7dGhp
cy5fZXh0cmFfYWN0aW9uPScnO3RoaXMuX25vZGVzPW51bGw7dGhpcy5faW5saW5l
X2pzPWJhZ29maG9sZGluZzt0aGlzLl9pZV9jbG9uZV9idWc9ZmFsc2U7cmV0dXJu
IHRoaXM7fUhUTUwuaXNIVE1MPWZ1bmN0aW9uKGEpe3JldHVybiBhJiYoYSBpbnN0
YW5jZW9mIEhUTUx8fGEuX19odG1sIT09dW5kZWZpbmVkKTt9O0hUTUwucmVwbGFj
ZUpTT05XcmFwcGVyPWZ1bmN0aW9uKGEpe3JldHVybiBhJiZhLl9faHRtbCE9PXVu
ZGVmaW5lZD9uZXcgSFRNTChhLl9faHRtbCk6YTt9O2NvcHlfcHJvcGVydGllcyhI
VE1MLnByb3RvdHlwZSx7dG9TdHJpbmc6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9j
b250ZW50fHwnJztpZih0aGlzLl9leHRyYV9hY3Rpb24pYSs9JzxzY3JpcHQgdHlw
ZT0idGV4dC9qYXZhc2NyaXB0Ij4nK3RoaXMuX2V4dHJhX2FjdGlvbisnPC9zY3In
KydpcHQ+JztyZXR1cm4gYTt9LHNldEFjdGlvbjpmdW5jdGlvbihhKXt0aGlzLl9l
eHRyYV9hY3Rpb249YTtyZXR1cm4gdGhpczt9LGdldEFjdGlvbjpmdW5jdGlvbigp
e3RoaXMuX2ZpbGxDYWNoZSgpO3ZhciBhPWZ1bmN0aW9uKCl7dGhpcy5faW5saW5l
X2pzKCk7ZXZhbF9nbG9iYWwodGhpcy5fZXh0cmFfYWN0aW9uKTt9LmJpbmQodGhp
cyk7aWYodGhpcy5nZXREZWZlcnJlZCgpKXtyZXR1cm4gYS5kZWZlci5iaW5kKGEp
O31lbHNlIHJldHVybiBhO30sc2V0RGVmZXJyZWQ6ZnVuY3Rpb24oYSl7dGhpcy5f
ZGVmZXI9ISFhO3JldHVybiB0aGlzO30sZ2V0RGVmZXJyZWQ6ZnVuY3Rpb24oKXty
ZXR1cm4gdGhpcy5fZGVmZXI7fSxnZXRDb250ZW50OmZ1bmN0aW9uKCl7cmV0dXJu
IHRoaXMuX2NvbnRlbnQ7fSxnZXROb2RlczpmdW5jdGlvbigpe3RoaXMuX2ZpbGxD
YWNoZSgpO3JldHVybiB0aGlzLl9ub2Rlczt9LGdldFJvb3ROb2RlOmZ1bmN0aW9u
KCl7cmV0dXJuIHRoaXMuZ2V0Tm9kZXMoKVswXTt9LGllQ2xvbmVCdWc6ZnVuY3Rp
b24oKXt0aGlzLl9maWxsQ2FjaGUoKTtyZXR1cm4gdGhpcy5faWVfY2xvbmVfYnVn
O30sX2ZpbGxDYWNoZTpmdW5jdGlvbigpe2lmKG51bGwhPT10aGlzLl9ub2Rlcyly
ZXR1cm47dmFyIGQ9dGhpcy5fY29udGVudDtpZighZCl7dGhpcy5fbm9kZXM9W107
cmV0dXJuO31kPWQucmVwbGFjZSgvKDwoXHcrKVtePl0qPylcLz4vZyxmdW5jdGlv
bihsLG0sbil7cmV0dXJuIG4ubWF0Y2goL14oYWJicnxicnxjb2x8aW1nfGlucHV0
fGxpbmt8bWV0YXxwYXJhbXxocnxhcmVhfGVtYmVkKSQvaSk/bDptKyc+PC8nK24r
Jz4nO30pO3ZhciBoPWQudHJpbSgpLnRvTG93ZXJDYXNlKCksaz1kb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKSxiPWZhbHNlO3ZhciBqPSghaC5pbmRleE9mKCc8
b3B0JykmJlsxLCc8c2VsZWN0IG11bHRpcGxlPSJtdWx0aXBsZSIgY2xhc3M9Il9f
V1JBUFBFUiI+JywnPC9zZWxlY3Q+J10pfHwoIWguaW5kZXhPZignPGxlZycpJiZb
MSwnPGZpZWxkc2V0IGNsYXNzPSJfX1dSQVBQRVIiPicsJzwvZmllbGRzZXQ+J10p
fHwoaC5tYXRjaCgvXjwodGhlYWR8dGJvZHl8dGZvb3R8Y29sZ3xjYXApLykmJlsx
LCc8dGFibGUgY2xhc3M9Il9fV1JBUFBFUiI+JywnPC90YWJsZT4nXSl8fCghaC5p
bmRleE9mKCc8dHInKSYmWzIsJzx0YWJsZT48dGJvZHkgY2xhc3M9Il9fV1JBUFBF
UiI+JywnPC90Ym9keT48L3RhYmxlPiddKXx8KCghaC5pbmRleE9mKCc8dGQnKXx8
IWguaW5kZXhPZignPHRoJykpJiZbMywnPHRhYmxlPjx0Ym9keT48dHIgY2xhc3M9
Il9fV1JBUFBFUiI+JywnPC90cj48L3Rib2R5PjwvdGFibGU+J10pfHwoIWguaW5k
ZXhPZignPGNvbCcpJiZbMiwnPHRhYmxlPjx0Ym9keT48L3Rib2R5Pjxjb2xncm91
cCBjbGFzcz0iX19XUkFQUEVSIj4nLCc8L2NvbGdyb3VwPjwvdGFibGU+J10pfHxu
dWxsO2lmKG51bGw9PT1qKXtrLmNsYXNzTmFtZT0nX19XUkFQUEVSJztpZih1YS5p
ZSgpKXtqPVswLCc8c3BhbiBzdHlsZT0iZGlzcGxheTpub25lIj4mbmJzcDs8L3Nw
YW4+JywnJ107Yj10cnVlO31lbHNlIGo9WzAsJycsJyddO31rLmlubmVySFRNTD1q
WzFdK2QralsyXTt3aGlsZShqWzBdLS0paz1rLmxhc3RDaGlsZDtpZihiKWsucmVt
b3ZlQ2hpbGQoay5maXJzdENoaWxkKTtrLmNsYXNzTmFtZSE9J19fV1JBUFBFUic7
aWYoMCE9PWsuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ29wdGlvbicpLmxlbmd0aHx8
MCE9PWsuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ29iamVjdCcpLmxlbmd0aCl0aGlz
Ll9pZV9jbG9uZV9idWc9dHJ1ZTtpZih1YS5pZSgpKXt2YXIgaTtpZighaC5pbmRl
eE9mKCc8dGFibGUnKSYmLTE9PWguaW5kZXhPZignPHRib2R5Jykpe2k9ay5maXJz
dENoaWxkJiZrLmZpcnN0Q2hpbGQuY2hpbGROb2Rlczt9ZWxzZSBpZihqWzFdPT0n
PHRhYmxlPicmJi0xPT1oLmluZGV4T2YoJzx0Ym9keScpKXtpPWsuY2hpbGROb2Rl
czt9ZWxzZSBpPVtdO2Zvcih2YXIgZj1pLmxlbmd0aC0xO2Y+PTA7LS1mKWlmKGlb
Zl0ubm9kZU5hbWUmJmlbZl0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09J3Rib2R5
JyYmaVtmXS5jaGlsZE5vZGVzLmxlbmd0aD09MClpW2ZdLnBhcmVudE5vZGUucmVt
b3ZlQ2hpbGQoaVtmXSk7fXZhciBnPWsuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3Nj
cmlwdCcpO3ZhciBhPVtdO2Zvcih2YXIgZT0wO2U8Zy5sZW5ndGg7ZSsrKWlmKGdb
ZV0uc3JjKXthLnB1c2goQm9vdGxvYWRlci5yZXF1ZXN0UmVzb3VyY2UuYmluZChC
b290bG9hZGVyLCdqcycsZ1tlXS5zcmMpKTt9ZWxzZSBhLnB1c2goZXZhbF9nbG9i
YWwuYmluZChudWxsLGdbZV0uaW5uZXJIVE1MKSk7Zm9yKHZhciBlPWcubGVuZ3Ro
LTE7ZT49MDtlLS0pZ1tlXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGdbZV0pO3Zh
ciBjPWZ1bmN0aW9uKCl7Zm9yKHZhciBsPTA7bDxhLmxlbmd0aDtsKyspYVtsXSgp
O307dGhpcy5fbm9kZXM9JEEoay5jaGlsZE5vZGVzKTt0aGlzLl9pbmxpbmVfanM9
Yzt9fSk7CnZhciBET009e2ZpbmQ6ZnVuY3Rpb24oYSxjKXt2YXIgYj1ET00uc2Ny
eShhLGMpO3JldHVybiBiWzBdO30sc2NyeTpmdW5jdGlvbihqLHYpe2lmKCFqKXJl
dHVybiBbXTt2YXIgdz12LnNwbGl0KCcgJyk7dmFyIGQ9W2pdO3ZhciBpPWo9PT1k
b2N1bWVudDtmb3IodmFyIG09MDttPHcubGVuZ3RoO20rKyl7aWYoZC5sZW5ndGg9
PTApYnJlYWs7aWYod1ttXT09JycpY29udGludWU7dmFyIHU9d1ttXTt2YXIgcz1b
XTt2YXIgemQ9ZmFsc2U7aWYodS5jaGFyQXQoMCk9PSdeJylpZihtPT0wKXt6ZD10
cnVlO3U9dS5zbGljZSgxKTt9ZWxzZSByZXR1cm4gW107dT11LnJlcGxhY2UoL1wu
L2csJyAuJyk7dT11LnJlcGxhY2UoL1wjL2csJyAjJyk7dT11LnJlcGxhY2UoL1xb
L2csJyBbJyk7dmFyIHo9dS5zcGxpdCgnICcpO3ZhciB6YT16WzBdfHwnKic7dmFy
IG49elsxXSYmelsxXS5jaGFyQXQoMCk9PScjJztpZihuKXt2YXIgaD1nZSh6WzFd
LnNsaWNlKDEpLHRydWUpO2lmKGgmJignKic9PXphfHxoLnRhZ05hbWUudG9Mb3dl
ckNhc2UoKT09emEpKWZvcih2YXIgcT0wO3E8ZC5sZW5ndGg7cSsrKWlmKHpkJiZE
T00uY29udGFpbnMoaCxkW3FdKSl7cz1baF07YnJlYWs7fWVsc2UgaWYoZG9jdW1l
bnQ9PWRbcV18fERPTS5jb250YWlucyhkW3FdLGgpKXtzPVtoXTticmVhazt9fWVs
c2V7dmFyIHpjPVtdO3ZhciBjPWQubGVuZ3RoO2Zvcih2YXIgbz0wO288YztvKysp
e2lmKHpkKXt2YXIgaz1bXTt2YXIgZz1kW29dLnBhcmVudE5vZGU7dmFyIGE9emE9
PScqJzt3aGlsZShET00uaXNOb2RlKGcsRE9NLk5PREVfVFlQRVMuRUxFTUVOVCkp
e2lmKGF8fGcudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT16YSlrLnB1c2goZyk7Zz1n
LnBhcmVudE5vZGU7fX1lbHNlIHZhciBrPWRbb10uZ2V0RWxlbWVudHNCeVRhZ05h
bWUoemEpO3ZhciBsPWsubGVuZ3RoO2Zvcih2YXIgcj0wO3I8bDtyKyspemMucHVz
aChrW3JdKTt9Zm9yKHZhciB4PTE7eDx6Lmxlbmd0aDt4Kyspe3ZhciB5PXpbeF07
dmFyIHA9eS5jaGFyQXQoMCk9PScuJzt2YXIgZT15LnN1YnN0cmluZygxKTtmb3Io
dmFyIG89MDtvPHpjLmxlbmd0aDtvKyspe3ZhciB6Yj16Y1tvXTtpZighemIpY29u
dGludWU7aWYocCl7aWYoIUNTUy5oYXNDbGFzcyh6YixlKSlkZWxldGUgemNbb107
Y29udGludWU7fWVsc2V7dmFyIGY9eS5zbGljZSgxLHkubGVuZ3RoLTEpO2lmKGYu
aW5kZXhPZignPScpPT0tMSl7aWYoemIuZ2V0QXR0cmlidXRlKGYpPT09bnVsbCl7
ZGVsZXRlIHpjW29dO2NvbnRpbnVlO319ZWxzZXt2YXIgdD1mLnNwbGl0KCc9Jyk7
dmFyIGI9dFswXTt2YXIgemU9dFsxXTt6ZT16ZS5zbGljZSgxLHplLmxlbmd0aC0x
KTtpZih6Yi5nZXRBdHRyaWJ1dGUoYikhPXplKXtkZWxldGUgemNbb107Y29udGlu
dWU7fX19fX1mb3IodmFyIG89MDtvPHpjLmxlbmd0aDtvKyspaWYoemNbb10pe3Mu
cHVzaCh6Y1tvXSk7aWYoemQpYnJlYWs7fX1kPXM7fXJldHVybiBkO30sZ2V0VGV4
dDooZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYn
KSxiPWEudGV4dENvbnRlbnQhPW51bGw/J3RleHRDb250ZW50JzonaW5uZXJUZXh0
JztyZXR1cm4gZnVuY3Rpb24oYyl7aWYoIWMpe3JldHVybiAnJzt9ZWxzZSBpZihE
T00uaXNOb2RlKGMsRE9NLk5PREVfVFlQRVMuVEVYVCkpe3JldHVybiBjLmRhdGE7
fWVsc2UgcmV0dXJuIGNbYl07fTt9KSgpLGdldFNlbGVjdGlvbjpmdW5jdGlvbigp
e3ZhciBiPXdpbmRvdy5nZXRTZWxlY3Rpb24sYT1kb2N1bWVudC5zZWxlY3Rpb247
aWYoYil7cmV0dXJuIGIoKSsnJzt9ZWxzZSBpZihhKXJldHVybiBhLmNyZWF0ZVJh
bmdlKCkudGV4dDtyZXR1cm4gbnVsbDt9LGNyZWF0ZTpmdW5jdGlvbihjLGEsYil7
Yz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGMpO2lmKGEpe2E9Y29weV9wcm9wZXJ0
aWVzKHt9LGEpO2lmKGEuc3R5bGUpe2NvcHlfcHJvcGVydGllcyhjLnN0eWxlLGEu
c3R5bGUpO2RlbGV0ZSBhLnN0eWxlO31mb3IodmFyIGQgaW4gYSlpZihkLnRvTG93
ZXJDYXNlKCkuaW5kZXhPZignb24nKT09MCl7aWYoISh0eXBlb2YgYVtkXSE9J2Z1
bmN0aW9uJykpaWYod2luZG93LkV2ZW50JiZFdmVudC5saXN0ZW4pe0V2ZW50Lmxp
c3RlbihjLGQuc3Vic3RyKDIpLGFbZF0pO31lbHNlIGNbZF09YVtkXTtkZWxldGUg
YVtkXTt9Y29weV9wcm9wZXJ0aWVzKGMsYSk7fWlmKGIhPXVuZGVmaW5lZClET00u
c2V0Q29udGVudChjLGIpO3JldHVybiBjO30scHJlcGVuZENvbnRlbnQ6ZnVuY3Rp
b24oYyxiKXtpZighRE9NLmlzTm9kZShjKSl0aHJvdyBuZXcgRXJyb3IoJ0RPTS5w
cmVwZW5kQ29udGVudDogcmVmZXJlbmNlIGVsZW1lbnQgaXMgbm90IGEgbm9kZScp
O3ZhciBhPWZ1bmN0aW9uKGQpe2lmKGMuZmlyc3RDaGlsZCl7Yy5pbnNlcnRCZWZv
cmUoZCxjLmZpcnN0Q2hpbGQpO31lbHNlIGMuYXBwZW5kQ2hpbGQoZCk7fTtyZXR1
cm4gRE9NLl9hZGRDb250ZW50KGIsYSxjKTt9LGluc2VydEFmdGVyOmZ1bmN0aW9u
KGMsYil7aWYoIURPTS5pc05vZGUoYyl8fCFjLnBhcmVudE5vZGUpdGhyb3cgbmV3
IEVycm9yKCdET00uaW5zZXJ0QWZ0ZXI6IHJlZmVyZW5jZSBlbGVtZW50IGlzIG5v
dCBhIG5vZGUnKTt2YXIgYT1mdW5jdGlvbihkKXtpZihjLm5leHRTaWJsaW5nKXtj
LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGQsYy5uZXh0U2libGluZyk7fWVsc2Ug
Yy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKGQpO307cmV0dXJuIERPTS5fYWRkQ29u
dGVudChiLGEsYy5wYXJlbnROb2RlKTt9LGluc2VydEJlZm9yZTpmdW5jdGlvbihi
LGMpe2lmKCFET00uaXNOb2RlKGMpfHwhYy5wYXJlbnROb2RlKXRocm93IG5ldyBF
cnJvcignRE9NLmluc2VydEJlZm9yZTogcmVmZXJlbmNlIGVsZW1lbnQgaXMgbm90
IGEgbm9kZSBvciAnKydkb2VzIG5vdCBoYXZlIGEgcGFyZW50LicpO3ZhciBhPWZ1
bmN0aW9uKGQpe2MucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZCxjKTt9O3JldHVy
biBET00uX2FkZENvbnRlbnQoYixhLGMucGFyZW50Tm9kZSk7fSxzZXRDb250ZW50
OmZ1bmN0aW9uKGIsYSl7aWYoIURPTS5pc05vZGUoYikpdGhyb3cgbmV3IEVycm9y
KCdET00uc2V0Q29udGVudDogcmVmZXJlbmNlIGVsZW1lbnQgaXMgbm90IGEgbm9k
ZScpO0RPTS5lbXB0eShiKTtyZXR1cm4gRE9NLmFwcGVuZENvbnRlbnQoYixhKTt9
LGFwcGVuZENvbnRlbnQ6ZnVuY3Rpb24oYyxiKXtpZighRE9NLmlzTm9kZShjKSl0
aHJvdyBuZXcgRXJyb3IoJ0RPTS5hcHBlbmRDb250ZW50OiByZWZlcmVuY2UgZWxl
bWVudCBpcyBub3QgYSBub2RlJyk7dmFyIGE9ZnVuY3Rpb24oZCl7Yy5hcHBlbmRD
aGlsZChkKTt9O3JldHVybiBET00uX2FkZENvbnRlbnQoYixhLGMpO30scmVwbGFj
ZTpmdW5jdGlvbihjLGIpe2lmKCFET00uaXNOb2RlKGMpfHwhYy5wYXJlbnROb2Rl
KXRocm93IG5ldyBFcnJvcignRE9NLnJlcGxhY2U6IHJlZmVyZW5jZSBlbGVtZW50
IG11c3QgYmUgYSBub2RlIHdpdGggYScrJyBwYXJlbnQnKTt2YXIgYT1mdW5jdGlv
bihkKXtjLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGQsYyk7fTtyZXR1cm4gRE9N
Ll9hZGRDb250ZW50KGIsYSxjLnBhcmVudE5vZGUpO30scmVtb3ZlOmZ1bmN0aW9u
KGEpe2E9JChhKTtpZihhLnBhcmVudE5vZGUpYS5wYXJlbnROb2RlLnJlbW92ZUNo
aWxkKGEpO30sZW1wdHk6ZnVuY3Rpb24oYSl7YT0kKGEpO3doaWxlKGEuZmlyc3RD
aGlsZClET00ucmVtb3ZlKGEuZmlyc3RDaGlsZCk7fSxjb250YWluczpmdW5jdGlv
bihiLGEpe2I9Z2UoYik7YT1nZShhKTtpZighYnx8IWEpe3JldHVybiBmYWxzZTt9
ZWxzZSBpZihiPT09YSl7cmV0dXJuIHRydWU7fWVsc2UgaWYoRE9NLmlzTm9kZShi
LCcjdGV4dCcpKXtyZXR1cm4gZmFsc2U7fWVsc2UgaWYoRE9NLmlzTm9kZShhLCcj
dGV4dCcpKXtyZXR1cm4gRE9NLmNvbnRhaW5zKGIsYS5wYXJlbnROb2RlKTt9ZWxz
ZSBpZihiLmNvbnRhaW5zKXtyZXR1cm4gYi5jb250YWlucyhhKTt9ZWxzZSBpZihi
LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKXtyZXR1cm4gISEoYi5jb21wYXJlRG9j
dW1lbnRQb3NpdGlvbihhKSYxNik7fWVsc2UgcmV0dXJuIGZhbHNlO30sZ2V0Um9v
dEVsZW1lbnQ6ZnVuY3Rpb24oKXt2YXIgYT1udWxsO2lmKHdpbmRvdy5RdWlja2xp
bmcmJlF1aWNrbGluZy5pc0FjdGl2ZSgpKWE9Z2UoJ2NvbnRlbnQnKTtyZXR1cm4g
YXx8ZG9jdW1lbnQuYm9keTt9LGlzTm9kZTpmdW5jdGlvbihkLGUpe2lmKHR5cGVv
ZihOb2RlKT09J3VuZGVmaW5lZCcpTm9kZT1udWxsO3RyeXtpZighZHx8ISgoTm9k
ZSE9dW5kZWZpbmVkJiZkIGluc3RhbmNlb2YgTm9kZSl8fGQubm9kZU5hbWUpKXJl
dHVybiBmYWxzZTt9Y2F0Y2goYSl7cmV0dXJuIGZhbHNlO31pZih0eXBlb2YoZSkh
PT0ndW5kZWZpbmVkJyl7ZT0kQShlKS5tYXAoZnVuY3Rpb24oZyl7cmV0dXJuIChn
KycnKS50b1VwcGVyQ2FzZSgpO30pO3ZhciBjLGY7dHJ5e2M9bmV3IFN0cmluZyhk
Lm5vZGVOYW1lKS50b1VwcGVyQ2FzZSgpO2Y9ZC5ub2RlVHlwZTt9Y2F0Y2goYSl7
cmV0dXJuIGZhbHNlO31mb3IodmFyIGI9MDtiPGUubGVuZ3RoO2IrKyl0cnl7aWYo
Yz09ZVtiXXx8Zj09ZVtiXSlyZXR1cm4gdHJ1ZTt9Y2F0Y2goYSl7fXJldHVybiBm
YWxzZTt9cmV0dXJuIHRydWU7fSxOT0RFX1RZUEVTOntFTEVNRU5UOjEsQVRUUklC
VVRFOjIsVEVYVDozLENEQVRBX1NFQ1RJT046NCxFTlRJVFlfUkVGRVJFTkNFOjUs
RU5USVRZOjYsUFJPQ0VTU0lOR19JTlNUUlVDVElPTjo3LENPTU1FTlQ6OCxET0NV
TUVOVDo5LERPQ1VNRU5UX1RZUEU6MTAsRE9DVU1FTlRfRlJBR01FTlQ6MTEsTk9U
QVRJT05fTk9ERToxMn0sX2FkZENvbnRlbnQ6ZnVuY3Rpb24oZCxhLG0pe2Q9SFRN
TC5yZXBsYWNlSlNPTldyYXBwZXIoZCk7aWYoZCBpbnN0YW5jZW9mIEhUTUwmJi0x
PT1kLnRvU3RyaW5nKCkuaW5kZXhPZignPHNjcicrJ2lwdCcpJiYnJz09bS5pbm5l
ckhUTUwpe3ZhciBnPXVhLmllKCk7aWYoIWd8fChnPjcmJiFET00uaXNOb2RlKG0s
Wyd0YWJsZScsJ3Rib2R5JywndGhlYWQnLCd0Zm9vdCcsJ3RyJywnc2VsZWN0Jywn
ZmllbGRzZXQnXSkpKXt2YXIgaD1nPyI8ZW0gc3R5bGU9XCJkaXNwbGF5Om5vbmU7
XCI+Jm5ic3A7PC9lbT4iOiIiO20uaW5uZXJIVE1MPWgrZDtnJiZtLnJlbW92ZUNo
aWxkKG0uZmlyc3RDaGlsZCk7cmV0dXJuICRBKG0uY2hpbGROb2Rlcyk7fX1lbHNl
IGlmKERPTS5pc05vZGUobSxET00uTk9ERV9UWVBFUy5URVhUKSl7bS5kYXRhPWQ7
cmV0dXJuIFtkXTt9dmFyIGosZT1bXSxiPVtdO3ZhciBmPWRvY3VtZW50LmNyZWF0
ZURvY3VtZW50RnJhZ21lbnQoKTtpZighKGQgaW5zdGFuY2VvZiBBcnJheSkpZD1b
ZF07Zm9yKHZhciBpPTA7aTxkLmxlbmd0aDtpKyspe2o9SFRNTC5yZXBsYWNlSlNP
TldyYXBwZXIoZFtpXSk7aWYoaiBpbnN0YW5jZW9mIEhUTUwpe2IucHVzaChqLmdl
dEFjdGlvbigpKTt2YXIgbD1qLmdldE5vZGVzKCksYztmb3IodmFyIGs9MDtrPGwu
bGVuZ3RoO2srKyl7Yz0odWEuc2FmYXJpKCl8fCh1YS5pZSgpJiZqLmllQ2xvbmVC
dWcoKSkpP2xba106bFtrXS5jbG9uZU5vZGUodHJ1ZSk7ZS5wdXNoKGMpO2YuYXBw
ZW5kQ2hpbGQoYyk7fX1lbHNlIGlmKGlzX3NjYWxhcihqKSl7dmFyIG49ZG9jdW1l
bnQuY3JlYXRlVGV4dE5vZGUoaik7ZS5wdXNoKG4pO2YuYXBwZW5kQ2hpbGQobik7
fWVsc2UgaWYoRE9NLmlzTm9kZShqKSl7ZS5wdXNoKGopO2YuYXBwZW5kQ2hpbGQo
aik7fWVsc2UgaWYoIShqIGluc3RhbmNlb2YgQXJyYXkpKWohPT1udWxsO31hKGYp
O2Zvcih2YXIgaT0wO2k8Yi5sZW5ndGg7aSsrKWJbaV0oKTtyZXR1cm4gZTt9fTtm
dW5jdGlvbiAkTihjLGEsYil7aWYodHlwZW9mIGEhPSdvYmplY3QnfHxET00uaXNO
b2RlKGEpfHxhIGluc3RhbmNlb2YgQXJyYXl8fEhUTUwuaXNIVE1MKGEpKXtiPWE7
YT1udWxsO31yZXR1cm4gRE9NLmNyZWF0ZShjLGEsYik7fQpmdW5jdGlvbiBVUkko
YSl7aWYoYT09PXdpbmRvdylyZXR1cm47aWYodGhpcz09PXdpbmRvdylyZXR1cm4g
bmV3IFVSSShhfHx3aW5kb3cubG9jYXRpb24uaHJlZik7dGhpcy5wYXJzZShhfHwn
Jyk7fWNvcHlfcHJvcGVydGllcyhVUkkse2dldFJlcXVlc3RVUkk6ZnVuY3Rpb24o
YSxiKXthPWE9PT11bmRlZmluZWR8fGE7aWYoYSYmd2luZG93LlBhZ2VUcmFuc2l0
aW9ucyYmUGFnZVRyYW5zaXRpb25zLmlzSW5pdGlhbGl6ZWQoKSl7cmV0dXJuIFBh
Z2VUcmFuc2l0aW9ucy5nZXRDdXJyZW50VVJJKCEhYikuZ2V0UXVhbGlmaWVkVVJJ
KCk7fWVsc2UgcmV0dXJuIG5ldyBVUkkod2luZG93LmxvY2F0aW9uLmhyZWYpO30s
Z2V0TW9zdFJlY2VudFVSSTpmdW5jdGlvbigpe2lmKHdpbmRvdy5QYWdlVHJhbnNp
dGlvbnMmJlBhZ2VUcmFuc2l0aW9ucy5pc0luaXRpYWxpemVkKCkpe3JldHVybiBQ
YWdlVHJhbnNpdGlvbnMuZ2V0TW9zdFJlY2VudFVSSSgpLmdldFF1YWxpZmllZFVS
SSgpO31lbHNlIHJldHVybiBuZXcgVVJJKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTt9
LGdldE5leHRVUkk6ZnVuY3Rpb24oKXtpZih3aW5kb3cuUGFnZVRyYW5zaXRpb25z
JiZQYWdlVHJhbnNpdGlvbnMuaXNJbml0aWFsaXplZCgpKXtyZXR1cm4gUGFnZVRy
YW5zaXRpb25zLmdldE5leHRVUkkoKS5nZXRRdWFsaWZpZWRVUkkoKTt9ZWxzZSBy
ZXR1cm4gbmV3IFVSSSh3aW5kb3cubG9jYXRpb24uaHJlZik7fSxleHByZXNzaW9u
Oi8oKChcdyspOlwvXC8pKFteXC86XSopKDooXGQrKSk/KT8oW14jP10qKShcPyhb
XiNdKikpPygjKC4qKSk/LyxhcnJheVF1ZXJ5RXhwcmVzc2lvbjovXihcdyspKCg/
OlxbXHcqXF0pKyk9PyguKikvLGV4cGxvZGVRdWVyeTpmdW5jdGlvbihnKXtpZigh
ZylyZXR1cm4ge307dmFyIGg9e307Zz1nLnJlcGxhY2UoLyU1Qi9pZywnWycpLnJl
cGxhY2UoLyU1RC9pZywnXScpO2c9Zy5zcGxpdCgnJicpO2Zvcih2YXIgYj0wLGQ9
Zy5sZW5ndGg7YjxkO2IrKyl7dmFyIGU9Z1tiXS5tYXRjaChVUkkuYXJyYXlRdWVy
eUV4cHJlc3Npb24pO2lmKCFlKXt2YXIgaj1nW2JdLnNwbGl0KCc9Jyk7aFtVUkku
ZGVjb2RlQ29tcG9uZW50KGpbMF0pXT1qWzFdPT09dW5kZWZpbmVkP251bGw6VVJJ
LmRlY29kZUNvbXBvbmVudChqWzFdKTt9ZWxzZXt2YXIgYz1lWzJdLnNwbGl0KC9c
XVxbfFxbfFxdLykuc2xpY2UoMCwtMSk7dmFyIGY9ZVsxXTt2YXIgaz1VUkkuZGVj
b2RlQ29tcG9uZW50KGVbM118fCcnKTtjWzBdPWY7dmFyIGk9aDtmb3IodmFyIGE9
MDthPGMubGVuZ3RoLTE7YSsrKWlmKGNbYV0pe2lmKGlbY1thXV09PT11bmRlZmlu
ZWQpaWYoY1thKzFdJiYhY1thKzFdLm1hdGNoKC9cZCskLykpe2lbY1thXV09e307
fWVsc2UgaVtjW2FdXT1bXTtpPWlbY1thXV07fWVsc2V7aWYoY1thKzFdJiYhY1th
KzFdLm1hdGNoKC9cZCskLykpe2kucHVzaCh7fSk7fWVsc2UgaS5wdXNoKFtdKTtp
PWlbaS5sZW5ndGgtMV07fWlmKGkgaW5zdGFuY2VvZiBBcnJheSYmY1tjLmxlbmd0
aC0xXT09Jycpe2kucHVzaChrKTt9ZWxzZSBpW2NbYy5sZW5ndGgtMV1dPWs7fX1y
ZXR1cm4gaDt9LGltcGxvZGVRdWVyeTpmdW5jdGlvbihmLGUsYSl7ZT1lfHwnJztp
ZihhPT09dW5kZWZpbmVkKWE9dHJ1ZTt2YXIgZz1bXTtpZihmPT09bnVsbHx8Zj09
PXVuZGVmaW5lZCl7Zy5wdXNoKGE/VVJJLmVuY29kZUNvbXBvbmVudChlKTplKTt9
ZWxzZSBpZihmIGluc3RhbmNlb2YgQXJyYXkpe2Zvcih2YXIgYz0wO2M8Zi5sZW5n
dGg7KytjKXRyeXtpZihmW2NdIT09dW5kZWZpbmVkKWcucHVzaChVUkkuaW1wbG9k
ZVF1ZXJ5KGZbY10sZT8oZSsnWycrYysnXScpOmMpKTt9Y2F0Y2goYil7fX1lbHNl
IGlmKHR5cGVvZihmKT09J29iamVjdCcpe2lmKERPTS5pc05vZGUoZikpe2cucHVz
aCgne25vZGV9Jyk7fWVsc2UgZm9yKHZhciBkIGluIGYpdHJ5e2lmKGZbZF0hPT11
bmRlZmluZWQpZy5wdXNoKFVSSS5pbXBsb2RlUXVlcnkoZltkXSxlPyhlKydbJytk
KyddJyk6ZCkpO31jYXRjaChiKXt9fWVsc2UgaWYoYSl7Zy5wdXNoKFVSSS5lbmNv
ZGVDb21wb25lbnQoZSkrJz0nK1VSSS5lbmNvZGVDb21wb25lbnQoZikpO31lbHNl
IGcucHVzaChlKyc9JytmKTtyZXR1cm4gZy5qb2luKCcmJyk7fSxlbmNvZGVDb21w
b25lbnQ6ZnVuY3Rpb24oZCl7dmFyIGM9U3RyaW5nKGQpLnNwbGl0KC8oW1xbXF1d
KS8pO2Zvcih2YXIgYT0wLGI9Yy5sZW5ndGg7YTxiO2ErPTIpY1thXT13aW5kb3cu
ZW5jb2RlVVJJQ29tcG9uZW50KGNbYV0pO3JldHVybiBjLmpvaW4oJycpO30sZGVj
b2RlQ29tcG9uZW50OmZ1bmN0aW9uKGEpe3JldHVybiB3aW5kb3cuZGVjb2RlVVJJ
Q29tcG9uZW50KGEucmVwbGFjZSgvXCsvZywnICcpKTt9fSk7Y29weV9wcm9wZXJ0
aWVzKFVSSS5wcm90b3R5cGUse3BhcnNlOmZ1bmN0aW9uKGIpe3ZhciBhPWIudG9T
dHJpbmcoKS5tYXRjaChVUkkuZXhwcmVzc2lvbik7Y29weV9wcm9wZXJ0aWVzKHRo
aXMse3Byb3RvY29sOmFbM118fCcnLGRvbWFpbjphWzRdfHwnJyxwb3J0OmFbNl18
fCcnLHBhdGg6YVs3XXx8JycscXVlcnlfczphWzldfHwnJyxmcmFnbWVudDphWzEx
XXx8Jyd9KTtyZXR1cm4gdGhpczt9LHNldFByb3RvY29sOmZ1bmN0aW9uKGEpe3Ro
aXMucHJvdG9jb2w9YTtyZXR1cm4gdGhpczt9LGdldFByb3RvY29sOmZ1bmN0aW9u
KCl7cmV0dXJuIHRoaXMucHJvdG9jb2w7fSxzZXRRdWVyeURhdGE6ZnVuY3Rpb24o
YSl7dGhpcy5xdWVyeV9zPVVSSS5pbXBsb2RlUXVlcnkoYSk7cmV0dXJuIHRoaXM7
fSxhZGRRdWVyeURhdGE6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuc2V0UXVlcnlE
YXRhKGNvcHlfcHJvcGVydGllcyh0aGlzLmdldFF1ZXJ5RGF0YSgpLGEpKTt9LHJl
bW92ZVF1ZXJ5RGF0YTpmdW5jdGlvbihiKXtpZighKGIgaW5zdGFuY2VvZiBBcnJh
eSkpYj1bYl07dmFyIGQ9dGhpcy5nZXRRdWVyeURhdGEoKTtmb3IodmFyIGE9MCxj
PWIubGVuZ3RoO2E8YzsrK2EpZGVsZXRlIGRbYlthXV07cmV0dXJuIHRoaXMuc2V0
UXVlcnlEYXRhKGQpO30sZ2V0UXVlcnlEYXRhOmZ1bmN0aW9uKCl7cmV0dXJuIFVS
SS5leHBsb2RlUXVlcnkodGhpcy5xdWVyeV9zKTt9LHNldEZyYWdtZW50OmZ1bmN0
aW9uKGEpe3RoaXMuZnJhZ21lbnQ9YTtyZXR1cm4gdGhpczt9LGdldEZyYWdtZW50
OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZnJhZ21lbnQ7fSxzZXREb21haW46ZnVu
Y3Rpb24oYSl7dGhpcy5kb21haW49YTtyZXR1cm4gdGhpczt9LGdldERvbWFpbjpm
dW5jdGlvbigpe3JldHVybiB0aGlzLmRvbWFpbjt9LHNldFBvcnQ6ZnVuY3Rpb24o
YSl7dGhpcy5wb3J0PWE7cmV0dXJuIHRoaXM7fSxnZXRQb3J0OmZ1bmN0aW9uKCl7
cmV0dXJuIHRoaXMucG9ydDt9LHNldFBhdGg6ZnVuY3Rpb24oYSl7dGhpcy5wYXRo
PWE7cmV0dXJuIHRoaXM7fSxnZXRQYXRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu
cGF0aC5yZXBsYWNlKC9eXC8rLywnLycpO30sdG9TdHJpbmc6ZnVuY3Rpb24oKXt2
YXIgYT0nJzt0aGlzLnByb3RvY29sJiYoYSs9dGhpcy5wcm90b2NvbCsnOi8vJyk7
dGhpcy5kb21haW4mJihhKz10aGlzLmRvbWFpbik7dGhpcy5wb3J0JiYoYSs9Jzon
K3RoaXMucG9ydCk7aWYodGhpcy5kb21haW4mJiF0aGlzLnBhdGgpYSs9Jy8nO3Ro
aXMucGF0aCYmKGErPXRoaXMucGF0aCk7dGhpcy5xdWVyeV9zJiYoYSs9Jz8nK3Ro
aXMucXVlcnlfcyk7dGhpcy5mcmFnbWVudCYmKGErPScjJyt0aGlzLmZyYWdtZW50
KTtyZXR1cm4gYTt9LHZhbHVlT2Y6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0
cmluZygpO30saXNGYWNlYm9va1VSSTpmdW5jdGlvbigpe2lmKCFVUkkuX2ZhY2Vi
b29rVVJJUmVnZXgpVVJJLl9mYWNlYm9va1VSSVJlZ2V4PW5ldyBSZWdFeHAoJyhe
fFxcLilmYWNlYm9va1xcLmNvbShbXi5dKikkJywnaScpO3JldHVybiAoIXRoaXMu
ZG9tYWlufHxVUkkuX2ZhY2Vib29rVVJJUmVnZXgudGVzdCh0aGlzLmRvbWFpbikp
O30saXNRdWlja2xpbmdFbmFibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5R
dWlja2xpbmcmJlF1aWNrbGluZy5pc0FjdGl2ZSgpJiZRdWlja2xpbmcuaXNQYWdl
QWN0aXZlKHRoaXMpO30sZ2V0UmVnaXN0ZXJlZERvbWFpbjpmdW5jdGlvbigpe2lm
KCF0aGlzLmRvbWFpbilyZXR1cm4gJyc7aWYoIXRoaXMuaXNGYWNlYm9va1VSSSgp
KXJldHVybiBudWxsO3ZhciBiPXRoaXMuZG9tYWluLnNwbGl0KCcuJyk7dmFyIGE9
Yi5pbmRleE9mKCdmYWNlYm9vaycpO3JldHVybiBiLnNsaWNlKGEpLmpvaW4oJy4n
KTt9LGdldFVucXVhbGlmaWVkVVJJOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBVUkko
dGhpcykuc2V0UHJvdG9jb2wobnVsbCkuc2V0RG9tYWluKG51bGwpLnNldFBvcnQo
bnVsbCk7fSxnZXRRdWFsaWZpZWRVUkk6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgVVJJ
KHRoaXMpO2lmKCFiLmdldERvbWFpbigpKXt2YXIgYT1VUkkoKTtiLnNldFByb3Rv
Y29sKGEuZ2V0UHJvdG9jb2woKSkuc2V0RG9tYWluKGEuZ2V0RG9tYWluKCkpLnNl
dFBvcnQoYS5nZXRQb3J0KCkpO31yZXR1cm4gYjt9LGlzU2FtZU9yaWdpbjpmdW5j
dGlvbihhKXt2YXIgYj1hfHx3aW5kb3cubG9jYXRpb24uaHJlZjtpZighKGIgaW5z
dGFuY2VvZiBVUkkpKWI9bmV3IFVSSShiLnRvU3RyaW5nKCkpO2lmKHRoaXMuZ2V0
UHJvdG9jb2woKSYmdGhpcy5nZXRQcm90b2NvbCgpIT1iLmdldFByb3RvY29sKCkp
cmV0dXJuIGZhbHNlO2lmKHRoaXMuZ2V0RG9tYWluKCkmJnRoaXMuZ2V0RG9tYWlu
KCkhPWIuZ2V0RG9tYWluKCkpcmV0dXJuIGZhbHNlO3JldHVybiB0cnVlO30sZ286
ZnVuY3Rpb24oYSl7Z29VUkkodGhpcyxhKTt9LHNldFN1YmRvbWFpbjpmdW5jdGlv
bihiKXt2YXIgYz1uZXcgVVJJKHRoaXMpLmdldFF1YWxpZmllZFVSSSgpO3ZhciBh
PWMuZ2V0RG9tYWluKCkuc3BsaXQoJy4nKTtpZihhLmxlbmd0aDw9Mil7YS51bnNo
aWZ0KGIpO31lbHNlIGFbMF09YjtyZXR1cm4gYy5zZXREb21haW4oYS5qb2luKCcu
JykpO30sZ2V0U3ViZG9tYWluOmZ1bmN0aW9uKCl7aWYoIXRoaXMuZ2V0RG9tYWlu
KCkpcmV0dXJuICcnO3ZhciBhPXRoaXMuZ2V0RG9tYWluKCkuc3BsaXQoJy4nKTtp
ZihhLmxlbmd0aDw9Mil7cmV0dXJuICcnO31lbHNlIHJldHVybiBhWzBdO30sc2V0
U2VjdXJlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnNldFByb3RvY29sKGE/J2h0
dHBzJzonaHR0cCcpO30saXNTZWN1cmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5n
ZXRQcm90b2NvbCgpPT0naHR0cHMnO319KTsKZnVuY3Rpb24gZGV0ZWN0X2Jyb2tl
bl9wcm94eV9jYWNoZShkLGEpe3ZhciBiPWdldENvb2tpZShhKTtpZigoYiE9ZCkm
JihiIT1udWxsKSYmKGQhPScwJykpe3ZhciBjPXtjOidzaV9kZXRlY3RfYnJva2Vu
X3Byb3h5X2NhY2hlJyxtOmErJyAnK2QrJyAnK2J9O3ZhciBlPW5ldyBVUkkoJy9j
b21tb24vc2NyaWJlX2VuZHBvaW50LnBocCcpLmdldFF1YWxpZmllZFVSSSgpLnRv
U3RyaW5nKCk7bmV3IEFzeW5jU2lnbmFsKGUsYykuc2VuZCgpO319ClN0cmluZy5w
cm90b3R5cGUudHJpbT1mdW5jdGlvbigpe2lmKHRoaXM9PXdpbmRvdylyZXR1cm4g
bnVsbDtyZXR1cm4gdGhpcy5yZXBsYWNlKC9eXHMqfFxzKiQvZywnJyk7fTtmdW5j
dGlvbiB0cmltKGIpe3RyeXtyZXR1cm4gU3RyaW5nKGIudG9TdHJpbmcoKSkudHJp
bSgpO31jYXRjaChhKXtyZXR1cm4gJyc7fX1TdHJpbmcucHJvdG90eXBlLnN0YXJ0
c1dpdGg9ZnVuY3Rpb24oYSl7aWYodGhpcz09d2luZG93KXJldHVybiBudWxsO3Jl
dHVybiB0aGlzLnN1YnN0cmluZygwLGEubGVuZ3RoKT09YTt9O1N0cmluZy5wcm90
b3R5cGUuZW5kc1dpdGg9ZnVuY3Rpb24oYSl7aWYodGhpcz09d2luZG93KXJldHVy
biBudWxsO3JldHVybiB0aGlzLmxlbmd0aD49YS5sZW5ndGgmJnRoaXMuc3Vic3Ry
aW5nKHRoaXMubGVuZ3RoLWEubGVuZ3RoKT09YTt9O1N0cmluZy5wcm90b3R5cGUu
aGFzaDMyPWZ1bmN0aW9uKCl7dmFyIGE9MjE2NjEzNjI2MTtmb3IodmFyIGI9MCxj
PXRoaXMubGVuZ3RoO2I8YzsrK2IpYT0oYV50aGlzLmNoYXJDb2RlQXQoYikpKjE2
Nzc3NjE5O2ErPWE8PDEzO2FePWE+Pjc7YSs9YTw8MzthXj1hPj4xNzthKz1hPDw1
O3JldHVybiAoYXwwKSsyMTQ3NDgzNjQ4O307U3RyaW5nLnByb3RvdHlwZS5zcGxp
dD0oZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKGgsZSl7dmFyIGI9IiI7aWYo
aD09PW51bGx8fGU9PT1udWxsKXtyZXR1cm4gW107fWVsc2UgaWYodHlwZW9mIGg9
PSdzdHJpbmcnKXtyZXR1cm4gYS5jYWxsKHRoaXMsaCxlKTt9ZWxzZSBpZihoPT09
dW5kZWZpbmVkKXtyZXR1cm4gW3RoaXMudG9TdHJpbmcoKV07fWVsc2UgaWYoaCBp
bnN0YW5jZW9mIFJlZ0V4cCl7aWYoIWguXzJ8fCFoLl8xKXtiPWgudG9TdHJpbmco
KS5yZXBsYWNlKC9eW1xTXHNdK1wvLywiIik7aWYoIWguXzEpaWYoIWguZ2xvYmFs
KXtoLl8xPW5ldyBSZWdFeHAoaC5zb3VyY2UsImciK2IpO31lbHNlIGguXzE9MTt9
c2VwYXJhdG9yMT1oLl8xPT09MT9oOmguXzE7dmFyIGk9KGguXzI/aC5fMjpoLl8y
PW5ldyBSZWdFeHAoIl4iK3NlcGFyYXRvcjEuc291cmNlKyIkIixiKSk7aWYoZT09
PXVuZGVmaW5lZHx8ZTwwKXtlPWZhbHNlO31lbHNle2U9TWF0aC5mbG9vcihlKTtp
ZighZSlyZXR1cm4gW107fXZhciBmLGc9W10sZD0wLGM9MDt3aGlsZSgoZT9jKys8
PWU6dHJ1ZSkmJihmPXNlcGFyYXRvcjEuZXhlYyh0aGlzKSkpe2lmKChmWzBdLmxl
bmd0aD09PTApJiYoc2VwYXJhdG9yMS5sYXN0SW5kZXg+Zi5pbmRleCkpc2VwYXJh
dG9yMS5sYXN0SW5kZXgtLTtpZihzZXBhcmF0b3IxLmxhc3RJbmRleD5kKXtpZihm
Lmxlbmd0aD4xKWZbMF0ucmVwbGFjZShpLGZ1bmN0aW9uKCl7Zm9yKHZhciBqPTE7
ajxhcmd1bWVudHMubGVuZ3RoLTI7aisrKWlmKGFyZ3VtZW50c1tqXT09PXVuZGVm
aW5lZClmW2pdPXVuZGVmaW5lZDt9KTtnPWcuY29uY2F0KHRoaXMuc3Vic3RyaW5n
KGQsZi5pbmRleCksKGYuaW5kZXg9PT10aGlzLmxlbmd0aD9bXTpmLnNsaWNlKDEp
KSk7ZD1zZXBhcmF0b3IxLmxhc3RJbmRleDt9aWYoZlswXS5sZW5ndGg9PT0wKXNl
cGFyYXRvcjEubGFzdEluZGV4Kys7fXJldHVybiAoZD09PXRoaXMubGVuZ3RoKT8o
c2VwYXJhdG9yMS50ZXN0KCIiKT9nOmcuY29uY2F0KCIiKSk6KGU/ZzpnLmNvbmNh
dCh0aGlzLnN1YnN0cmluZyhkKSkpO31lbHNlIHJldHVybiBhLmNhbGwodGhpcyxo
LGUpO307fSkoU3RyaW5nLnByb3RvdHlwZS5zcGxpdCk7CmFkZF9wcm9wZXJ0aWVz
KCdDU1MnLHtzaG93bjpmdW5jdGlvbihhKXtyZXR1cm4gIUNTUy5oYXNDbGFzcyhh
LCdoaWRkZW5fZWxlbScpO30sdG9nZ2xlOmZ1bmN0aW9uKGEpe0NTUy5jb25kaXRp
b25TaG93KGEsIUNTUy5zaG93bihhKSk7fSxzZXRDbGFzczpmdW5jdGlvbihiLGEp
eyQoYikuY2xhc3NOYW1lPWF8fCcnO3JldHVybiBiO30sc2V0U3R5bGU6ZnVuY3Rp
b24oYSxiLGMpe3N3aXRjaChiKXtjYXNlICdvcGFjaXR5JzphLnN0eWxlLm9wYWNp
dHk9YzthLnN0eWxlLmZpbHRlcj0nYWxwaGEob3BhY2l0eT0nK2MqMTAwKycpJzti
cmVhaztjYXNlICdmbG9hdCc6YS5zdHlsZS5jc3NGbG9hdD1hLnN0eWxlLnN0eWxl
RmxvYXQ9YzticmVhaztkZWZhdWx0OmI9Yi5yZXBsYWNlKC8tKC4pL2csZnVuY3Rp
b24oZCxlKXtyZXR1cm4gZS50b1VwcGVyQ2FzZSgpO30pO2Euc3R5bGVbYl09Yzt9
cmV0dXJuIGE7fSxnZXRTdHlsZTpmdW5jdGlvbihiLGQpe2I9JChiKTtkPWQucmVw
bGFjZSgvLSguKS9nLGZ1bmN0aW9uKGUsZil7cmV0dXJuIGYudG9VcHBlckNhc2Uo
KTt9KTtmdW5jdGlvbiBjKGUpe3JldHVybiBlLnJlcGxhY2UoLyhbQS1aXSkvZywn
LSQxJykudG9Mb3dlckNhc2UoKTt9aWYod2luZG93LmdldENvbXB1dGVkU3R5bGUp
e3ZhciBhPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGIsbnVsbCk7aWYoYSlyZXR1
cm4gYS5nZXRQcm9wZXJ0eVZhbHVlKGMoZCkpO31pZihkb2N1bWVudC5kZWZhdWx0
VmlldyYmZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSl7dmFy
IGE9ZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShiLG51bGwp
O2lmKGEpcmV0dXJuIGEuZ2V0UHJvcGVydHlWYWx1ZShjKGQpKTtpZihkPT0iZGlz
cGxheSIpcmV0dXJuICJub25lIjt9aWYoYi5jdXJyZW50U3R5bGUpcmV0dXJuIGIu
Y3VycmVudFN0eWxlW2RdO3JldHVybiBiLnN0eWxlW2RdO30sZ2V0U3R5bGVGbG9h
dDpmdW5jdGlvbihhLGIpe3JldHVybiBwYXJzZUZsb2F0KENTUy5nZXRTdHlsZShh
LGIpLDEwKTt9LGdldE9wYWNpdHk6ZnVuY3Rpb24oYSl7YT0kKGEpO3ZhciBiPUNT
Uy5nZXRTdHlsZShhLCdmaWx0ZXInKTt2YXIgYz1udWxsO2lmKGImJihjPS8oXGQr
KD86XC5cZCspPykvLmV4ZWMoYikpKXtyZXR1cm4gcGFyc2VGbG9hdChjLnBvcCgp
KS8xMDA7fWVsc2UgaWYoYj1DU1MuZ2V0U3R5bGUoYSwnb3BhY2l0eScpKXtyZXR1
cm4gcGFyc2VGbG9hdChiKTt9ZWxzZSByZXR1cm4gMTt9fSk7CmZ1bmN0aW9uIGlu
dGxfbG9jYWxlX2lzX3J0bCgpe3JldHVybiAoJ3J0bCc9PUNTUy5nZXRTdHlsZShk
b2N1bWVudC5ib2R5LCdkaXJlY3Rpb24nKSk7fQpEYXRhU3RvcmU9d2luZG93LkRh
dGFTdG9yZXx8e19zdG9yYWdlOnt9LF9lbGVtZW50czp7fSxfdG9rZW5Db3VudGVy
OjEsX05PVF9JTl9ET01fQ09OU1Q6MSxfZ2V0U3RvcmFnZTpmdW5jdGlvbihhKXt2
YXIgYjtpZih0eXBlb2YgYT09J3N0cmluZycpe2I9J3N0cl8nK2E7fWVsc2V7Yj0n
ZWxlbV8nKyhhLl9fRkJfVE9LRU58fChhLl9fRkJfVE9LRU49W0RhdGFTdG9yZS5f
dG9rZW5Db3VudGVyKytdKSlbMF07RGF0YVN0b3JlLl9lbGVtZW50c1tiXT1hO31y
ZXR1cm4gRGF0YVN0b3JlLl9zdG9yYWdlW2JdfHwoRGF0YVN0b3JlLl9zdG9yYWdl
W2JdPXt9KTt9LF9zaG91bGREZWxldGVEYXRhOmZ1bmN0aW9uKGEpe2lmKCFhLm5v
ZGVOYW1lKXJldHVybiBmYWxzZTt0cnl7aWYobnVsbCE9YS5vZmZzZXRQYXJlbnQp
cmV0dXJuIGZhbHNlO31jYXRjaChiKXt9aWYoZG9jdW1lbnQuZG9jdW1lbnRFbGVt
ZW50LmNvbnRhaW5zKXtyZXR1cm4gIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5j
b250YWlucyhhKTt9ZWxzZSByZXR1cm4gKGRvY3VtZW50LmRvY3VtZW50RWxlbWVu
dC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihhKSZEYXRhU3RvcmUuX05PVF9JTl9E
T01fQ09OU1QpO30sc2V0OmZ1bmN0aW9uKGMsYixkKXt2YXIgYT1EYXRhU3RvcmUu
X2dldFN0b3JhZ2UoYyk7YVtiXT1kO3JldHVybiBjO30sZ2V0OmZ1bmN0aW9uKGUs
ZCxjKXt2YXIgYj1EYXRhU3RvcmUuX2dldFN0b3JhZ2UoZSksZj1iW2RdO2lmKHR5
cGVvZiBmPT09J3VuZGVmaW5lZCcmJmUuZ2V0QXR0cmlidXRlKXt2YXIgYT1lLmdl
dEF0dHJpYnV0ZSgnZGF0YS0nK2QpO2Y9KG51bGw9PT1hKT91bmRlZmluZWQ6YTt9
aWYoKGMhPT11bmRlZmluZWQpJiYoZj09PXVuZGVmaW5lZCkpZj1iW2RdPWM7cmV0
dXJuIGY7fSxyZW1vdmU6ZnVuY3Rpb24oYyxiKXt2YXIgYT1EYXRhU3RvcmUuX2dl
dFN0b3JhZ2UoYyksZD1hW2JdO2RlbGV0ZSBhW2JdO3JldHVybiBkO30sY2xlYW51
cDpmdW5jdGlvbigpe3ZhciBiLGE7Zm9yKGIgaW4gRGF0YVN0b3JlLl9lbGVtZW50
cyl7YT1EYXRhU3RvcmUuX2VsZW1lbnRzW2JdO2lmKERhdGFTdG9yZS5fc2hvdWxk
RGVsZXRlRGF0YShhKSl7ZGVsZXRlIERhdGFTdG9yZS5fc3RvcmFnZVtiXTtkZWxl
dGUgRGF0YVN0b3JlLl9lbGVtZW50c1tiXTt9fX19OwpmdW5jdGlvbiBET01Db250
cm9sKGEpe3RoaXMucm9vdD0kKGEpO3RoaXMudXBkYXRpbmc9ZmFsc2U7RGF0YVN0
b3JlLnNldChhLCdET01Db250cm9sJyx0aGlzKTt9RE9NQ29udHJvbC5wcm90b3R5
cGU9e2dldFJvb3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290O30sYmVnaW5V
cGRhdGU6ZnVuY3Rpb24oKXtpZih0aGlzLnVwZGF0aW5nKXJldHVybiBmYWxzZTt0
aGlzLnVwZGF0aW5nPXRydWU7cmV0dXJuIHRydWU7fSxlbmRVcGRhdGU6ZnVuY3Rp
b24oKXt0aGlzLnVwZGF0aW5nPWZhbHNlO30sdXBkYXRlOmZ1bmN0aW9uKGEpe2lm
KCF0aGlzLmJlZ2luVXBkYXRlKCkpcmV0dXJuIHRoaXM7dGhpcy5vbnVwZGF0ZShh
KTt0aGlzLmVuZFVwZGF0ZSgpO30sb251cGRhdGU6ZnVuY3Rpb24oYSl7fX07RE9N
Q29udHJvbC5nZXRJbnN0YW5jZT1mdW5jdGlvbihhKXtyZXR1cm4gRGF0YVN0b3Jl
LmdldChhLCdET01Db250cm9sJyk7fTsKYWRkX3Byb3BlcnRpZXMoJ0NTUycse3N1
cHBvcnRzQm9yZGVyUmFkaXVzOmZ1bmN0aW9uKCl7dmFyIGM9WydLaHRtbEJvcmRl
clJhZGl1cycsJ09Cb3JkZXJSYWRpdXMnLCdNb3pCb3JkZXJSYWRpdXMnLCdXZWJr
aXRCb3JkZXJSYWRpdXMnLCdtc0JvcmRlclJhZGl1cycsJ2JvcmRlclJhZGl1cydd
O3ZhciBkPWZhbHNlLGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Zm9y
KHZhciBiPWMubGVuZ3RoO2I+PTA7Yi0tKWlmKGQ9YS5zdHlsZVtjW2JdXSE9PXVu
ZGVmaW5lZClicmVhaztDU1Muc3VwcG9ydHNCb3JkZXJSYWRpdXM9YmFnb2YoZCk7
cmV0dXJuIGQ7fX0pOwphZGRfcHJvcGVydGllcygnSW5wdXQnLHtmb2N1czpmdW5j
dGlvbihhKXt0cnl7YS5mb2N1cygpO31jYXRjaChiKXt9fSxpc0VtcHR5OmZ1bmN0
aW9uKGEpe3JldHVybiAhKC9cUy8pLnRlc3QoYS52YWx1ZXx8JycpfHxDU1MuaGFz
Q2xhc3MoYSwnRE9NQ29udHJvbF9wbGFjZWhvbGRlcicpO30sZ2V0VmFsdWU6ZnVu
Y3Rpb24oYSl7cmV0dXJuIElucHV0LmlzRW1wdHkoYSk/Jyc6YS52YWx1ZTt9LHNl
dFZhbHVlOmZ1bmN0aW9uKGIsZCl7Q1NTLnJlbW92ZUNsYXNzKGIsJ0RPTUNvbnRy
b2xfcGxhY2Vob2xkZXInKTtiLnZhbHVlPWR8fCcnO3ZhciBjPWIuZ2V0QXR0cmli
dXRlKCdtYXhsZW5ndGgnKTtpZihjPjApQm9vdGxvYWRlci5sb2FkQ29tcG9uZW50
cygnbWF4bGVuZ3RoLWZvcm0tbGlzdGVuZXInLGZ1bmN0aW9uKCl7SW5wdXQuZW5m
b3JjZU1heExlbmd0aChiLGMpO30pO3ZhciBhPURPTUNvbnRyb2wuZ2V0SW5zdGFu
Y2UoYik7YSYmYS5yZXNldEhlaWdodCYmYS5yZXNldEhlaWdodCgpO30sc2V0UGxh
Y2Vob2xkZXI6ZnVuY3Rpb24oYSxiKXthLnNldEF0dHJpYnV0ZSgndGl0bGUnLGIp
O2Euc2V0QXR0cmlidXRlKCdwbGFjZWhvbGRlcicsYik7aWYoYT09ZG9jdW1lbnQu
YWN0aXZlRWxlbWVudClyZXR1cm47aWYoSW5wdXQuaXNFbXB0eShhKSl7Q1NTLmNv
bmRpdGlvbkNsYXNzKGEsJ0RPTUNvbnRyb2xfcGxhY2Vob2xkZXInLGIpO2EudmFs
dWU9Ynx8Jyc7fX0scmVzZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9YSE9PWRvY3VtZW50
LmFjdGl2ZUVsZW1lbnQ/YS5nZXRBdHRyaWJ1dGUoJ3BsYWNlaG9sZGVyJyk6Jyc7
YS52YWx1ZT1iO0NTUy5jb25kaXRpb25DbGFzcyhhLCdET01Db250cm9sX3BsYWNl
aG9sZGVyJyxiKTthLnN0eWxlLmhlaWdodD0nJzt9LHNldFN1Ym1pdE9uRW50ZXI6
ZnVuY3Rpb24oYSxiKXtDU1MuY29uZGl0aW9uQ2xhc3MoYSwnZW50ZXJfc3VibWl0
JyxiKTt9LGdldFN1Ym1pdE9uRW50ZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIENTUy5o
YXNDbGFzcyhhLCdlbnRlcl9zdWJtaXQnKTt9fSk7CkV2ZW50LkRBVEFTVE9SRV9L
RVk9J0V2ZW50Lmxpc3RlbmVycyc7aWYoIUV2ZW50LnByb3RvdHlwZSlFdmVudC5w
cm90b3R5cGU9e307ZnVuY3Rpb24gJEUoYSl7YT1hfHx3aW5kb3cuZXZlbnR8fHt9
O2lmKCFhLl9pbmhlcml0c19mcm9tX3Byb3RvdHlwZSlmb3IodmFyIGMgaW4gRXZl
bnQucHJvdG90eXBlKXRyeXthW2NdPUV2ZW50LnByb3RvdHlwZVtjXTt9Y2F0Y2go
Yil7fXJldHVybiBhO30oZnVuY3Rpb24oKXtjb3B5X3Byb3BlcnRpZXMoRXZlbnQu
cHJvdG90eXBlLHtfaW5oZXJpdHNfZnJvbV9wcm90b3R5cGU6dHJ1ZSxzdG9wOmZ1
bmN0aW9uKCl7dGhpcy5jYW5jZWxCdWJibGU9dHJ1ZTt0aGlzLnN0b3BQcm9wYWdh
dGlvbiYmdGhpcy5zdG9wUHJvcGFnYXRpb24oKTtyZXR1cm4gdGhpczt9LHByZXZl
bnQ6ZnVuY3Rpb24oKXt0aGlzLnJldHVyblZhbHVlPWZhbHNlO3RoaXMucHJldmVu
dERlZmF1bHQmJnRoaXMucHJldmVudERlZmF1bHQoKTtyZXR1cm4gdGhpczt9LGtp
bGw6ZnVuY3Rpb24oKXt0aGlzLnN0b3AoKS5wcmV2ZW50KCk7cmV0dXJuIGZhbHNl
O30sZ2V0VGFyZ2V0OmZ1bmN0aW9uKCl7dmFyIGc9dGhpcy50YXJnZXR8fHRoaXMu
c3JjRWxlbWVudDtyZXR1cm4gZz8kKGcpOm51bGw7fSxnZXRSZWxhdGVkVGFyZ2V0
OmZ1bmN0aW9uKCl7dmFyIGc9dGhpcy5yZWxhdGVkVGFyZ2V0fHwodGhpcy5mcm9t
RWxlbWVudD09PXRoaXMuc3JjRWxlbWVudD90aGlzLnRvRWxlbWVudDp0aGlzLmZy
b21FbGVtZW50KTtyZXR1cm4gZz8kKGcpOm51bGw7fSxnZXRNb2RpZmllcnM6ZnVu
Y3Rpb24oKXt2YXIgZz17Y29udHJvbDohIXRoaXMuY3RybEtleSxzaGlmdDohIXRo
aXMuc2hpZnRLZXksYWx0OiEhdGhpcy5hbHRLZXksbWV0YTohIXRoaXMubWV0YUtl
eX07Zy5hY2Nlc3M9dWEub3N4KCk/Zy5jb250cm9sOmcuYWx0O2cuYW55PWcuY29u
dHJvbHx8Zy5zaGlmdHx8Zy5hbHR8fGcubWV0YTtyZXR1cm4gZzt9fSk7Y29weV9w
cm9wZXJ0aWVzKEV2ZW50LHtsaXN0ZW46ZnVuY3Rpb24oaCxwLGosbSl7aWYodHlw
ZW9mIGg9PSdzdHJpbmcnKWg9JChoKTtpZih0eXBlb2YgbT09J3VuZGVmaW5lZCcp
bT1FdmVudC5Qcmlvcml0eS5OT1JNQUw7aWYodHlwZW9mIHA9PSdvYmplY3QnKXt2
YXIgaT17fTtmb3IodmFyIG8gaW4gcClpW29dPUV2ZW50Lmxpc3RlbihoLG8scFtv
XSxtKTtyZXR1cm4gaTt9aWYocC5tYXRjaCgvXm9uL2kpKXRocm93IG5ldyBUeXBl
RXJyb3IoIkJhZCBldmVudCBuYW1lIGAiK2V2ZW50KyInOiB1c2UgYGNsaWNrJywg
bm90IGBvbmNsaWNrJy4iKTtwPXAudG9Mb3dlckNhc2UoKTt2YXIgaz1EYXRhU3Rv
cmUuZ2V0KGgsYix7fSk7aWYoZltwXSl7dmFyIGc9ZltwXTtwPWcuYmFzZTtqPWcu
d3JhcChqKTt9YShoLHApO3ZhciBxPWtbcF07aWYoIShtIGluIHEpKXFbbV09W107
dmFyIGw9cVttXS5sZW5ndGgsbj1uZXcgRXZlbnRIYW5kbGVyUmVmKGoscVttXSxs
KTtxW21dLnB1c2gobik7cmV0dXJuIG47fSxzdG9wOmZ1bmN0aW9uKGcpe3JldHVy
biAkRShnKS5zdG9wKCk7fSxwcmV2ZW50OmZ1bmN0aW9uKGcpe3JldHVybiAkRShn
KS5wcmV2ZW50KCk7fSxraWxsOmZ1bmN0aW9uKGcpe3JldHVybiAkRShnKS5raWxs
KCk7fSxnZXRLZXlDb2RlOmZ1bmN0aW9uKGV2ZW50KXtldmVudD0kRShldmVudCk7
aWYoIWV2ZW50KXJldHVybiBmYWxzZTtzd2l0Y2goZXZlbnQua2V5Q29kZSl7Y2Fz
ZSA2MzIzMjpyZXR1cm4gMzg7Y2FzZSA2MzIzMzpyZXR1cm4gNDA7Y2FzZSA2MzIz
NDpyZXR1cm4gMzc7Y2FzZSA2MzIzNTpyZXR1cm4gMzk7Y2FzZSA2MzI3MjpjYXNl
IDYzMjczOmNhc2UgNjMyNzU6cmV0dXJuIG51bGw7Y2FzZSA2MzI3NjpyZXR1cm4g
MzM7Y2FzZSA2MzI3NzpyZXR1cm4gMzQ7fWlmKGV2ZW50LnNoaWZ0S2V5KXN3aXRj
aChldmVudC5rZXlDb2RlKXtjYXNlIDMzOmNhc2UgMzQ6Y2FzZSAzNzpjYXNlIDM4
OmNhc2UgMzk6Y2FzZSA0MDpyZXR1cm4gbnVsbDt9cmV0dXJuIGV2ZW50LmtleUNv
ZGU7fSxnZXRQcmlvcml0aWVzOmZ1bmN0aW9uKCl7aWYoIWUpe3ZhciBnPXZhbHVl
cyhFdmVudC5Qcmlvcml0eSk7Zy5zb3J0KGZ1bmN0aW9uKGgsaSl7cmV0dXJuIGgt
aTt9KTtlPWc7fXJldHVybiBlO30sX19maXJlOmZ1bmN0aW9uKGcsaSxldmVudCl7
dmFyIGg9RXZlbnQuX19nZXRIYW5kbGVyKGcsaSk7aWYoaClyZXR1cm4gaCgkRShl
dmVudCkpO30sX19nZXRIYW5kbGVyOmZ1bmN0aW9uKGcsaCl7cmV0dXJuIERhdGFT
dG9yZS5nZXQoZyxFdmVudC5EQVRBU1RPUkVfS0VZK2gpO319KTt2YXIgZT1udWxs
LGI9RXZlbnQuREFUQVNUT1JFX0tFWTt2YXIgYz1mdW5jdGlvbihnKXtyZXR1cm4g
ZnVuY3Rpb24oaCl7aWYoIURPTS5jb250YWlucyh0aGlzLGguZ2V0UmVsYXRlZFRh
cmdldCgpKSlyZXR1cm4gZy5jYWxsKHRoaXMsaCk7fTt9O3ZhciBmPXttb3VzZWVu
dGVyOntiYXNlOidtb3VzZW92ZXInLHdyYXA6Y30sbW91c2VsZWF2ZTp7YmFzZTon
bW91c2VvdXQnLHdyYXA6Y319O3ZhciBhPWZ1bmN0aW9uKGcsbSl7dmFyIGg9J29u
JyttO3ZhciBrPWQuYmluZChnKTt2YXIgaj1EYXRhU3RvcmUuZ2V0KGcsYik7aWYo
bSBpbiBqKXJldHVybjtqW21dPXt9O2lmKGcuYWRkRXZlbnRMaXN0ZW5lcil7Zy5h
ZGRFdmVudExpc3RlbmVyKG0sayxmYWxzZSk7fWVsc2UgaWYoZy5hdHRhY2hFdmVu
dClnLmF0dGFjaEV2ZW50KGgsayk7RGF0YVN0b3JlLnNldChnLGIrbSxrKTtpZihn
W2hdKXt2YXIgbD1nPT09ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50P0V2ZW50LlBy
aW9yaXR5Ll9CVUJCTEU6RXZlbnQuUHJpb3JpdHkuVFJBRElUSU9OQUw7dmFyIGk9
Z1toXTtnW2hdPW51bGw7RXZlbnQubGlzdGVuKGcsbSxpLGwpO31pZihnLm5vZGVO
YW1lPT09J0ZPUk0nJiZtPT09J3N1Ym1pdCcpRXZlbnQubGlzdGVuKGcsbSxFdmVu
dC5fX2J1YmJsZVN1Ym1pdC5jdXJyeShnKSxFdmVudC5Qcmlvcml0eS5fQlVCQkxF
KTt9O3ZhciBkPWZ1bmN0aW9uKGV2ZW50KXtldmVudD0kRShldmVudCk7dmFyIG49
ZXZlbnQudHlwZTtpZighRGF0YVN0b3JlLmdldCh0aGlzLGIpKXRocm93IG5ldyBF
cnJvcigiQmFkIGxpc3RlbkhhbmRsZXIgY29udGV4dC4iKTt2YXIgbz1EYXRhU3Rv
cmUuZ2V0KHRoaXMsYilbbl07aWYoIW8pdGhyb3cgbmV3IEVycm9yKCJObyByZWdp
c3RlcmVkIGhhbmRsZXJzIGZvciBgIituKyInLiIpO3dpbmRvdy5BcmJpdGVyTW9u
aXRvciYmQXJiaXRlck1vbml0b3IucGF1c2UoKTtpZihuPT0nY2xpY2snKXt2YXIg
aT1QYXJlbnQuYnlUYWcoZXZlbnQuZ2V0VGFyZ2V0KCksJ2EnKXx8UGFyZW50LmJ5
VGFnKGV2ZW50LmdldFRhcmdldCgpLCdsaScpO3VzZXJfYWN0aW9uKGksJ2NsaWNr
JyxldmVudCk7fXZhciBrPUV2ZW50LmdldFByaW9yaXRpZXMoKTtmb3IodmFyIGo9
MDtqPGsubGVuZ3RoO2orKyl7dmFyIGw9a1tqXTtpZihsIGluIG8pe3ZhciBnPW9b
bF07Zm9yKHZhciBoPTA7aDxnLmxlbmd0aDtoKyspe2lmKCFnW2hdKWNvbnRpbnVl
O3ZhciBtPWdbaF0uZmlyZSh0aGlzLGV2ZW50KTtpZihtPT09ZmFsc2Upe3dpbmRv
dy5BcmJpdGVyTW9uaXRvciYmQXJiaXRlck1vbml0b3IucmVzdW1lKCk7cmV0dXJu
IGV2ZW50LmtpbGwoKTt9ZWxzZSBpZihldmVudC5jYW5jZWxCdWJibGUpZXZlbnQu
c3RvcCgpO319fXdpbmRvdy5BcmJpdGVyTW9uaXRvciYmQXJiaXRlck1vbml0b3Iu
cmVzdW1lKCk7cmV0dXJuIGV2ZW50LnJldHVyblZhbHVlO307fSkoKTtFdmVudC5Q
cmlvcml0eT17VVJHRU5UOi0yMCxUUkFESVRJT05BTDotMTAsTk9STUFMOjAsX0JV
QkJMRToxMDAwfTtmdW5jdGlvbiBFdmVudEhhbmRsZXJSZWYoYixhLGMpe3RoaXMu
X2hhbmRsZXI9Yjt0aGlzLl9jb250YWluZXI9YTt0aGlzLl9pbmRleD1jO31FdmVu
dEhhbmRsZXJSZWYucHJvdG90eXBlPXtyZW1vdmU6ZnVuY3Rpb24oKXtkZWxldGUg
dGhpcy5faGFuZGxlcjtkZWxldGUgdGhpcy5fY29udGFpbmVyW3RoaXMuX2luZGV4
XTt9LGZpcmU6ZnVuY3Rpb24oYSxldmVudCl7cmV0dXJuIHRoaXMuX2hhbmRsZXIu
Y2FsbChhLGV2ZW50KTt9fTsKZnVuY3Rpb24gVmVjdG9yMihiLGMsYSl7Y29weV9w
cm9wZXJ0aWVzKHRoaXMse3g6cGFyc2VGbG9hdChiKSx5OnBhcnNlRmxvYXQoYyks
ZG9tYWluOmF8fCdwdXJlJ30pO31jb3B5X3Byb3BlcnRpZXMoVmVjdG9yMi5wcm90
b3R5cGUse3RvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuICcoJyt0aGlzLngrJywg
Jyt0aGlzLnkrJyknO30sYWRkOmZ1bmN0aW9uKGMsZCl7aWYoYXJndW1lbnRzLmxl
bmd0aD09MSl7aWYoYy5kb21haW4hPSdwdXJlJyljPWMuY29udmVydFRvKHRoaXMu
ZG9tYWluKTtyZXR1cm4gdGhpcy5hZGQoYy54LGMueSk7fXZhciBhPXBhcnNlRmxv
YXQoYyk7dmFyIGI9cGFyc2VGbG9hdChkKTtyZXR1cm4gbmV3IFZlY3RvcjIodGhp
cy54K2EsdGhpcy55K2IsdGhpcy5kb21haW4pO30sbXVsOmZ1bmN0aW9uKGEsYil7
aWYodHlwZW9mKGIpPT0idW5kZWZpbmVkIiliPWE7cmV0dXJuIG5ldyBWZWN0b3Iy
KHRoaXMueCphLHRoaXMueSpiLHRoaXMuZG9tYWluKTt9LHN1YjpmdW5jdGlvbihh
LGIpe2lmKGFyZ3VtZW50cy5sZW5ndGg9PTEpe3JldHVybiB0aGlzLmFkZChhLm11
bCgtMSkpO31lbHNlIHJldHVybiB0aGlzLmFkZCgtYSwtYik7fSxkaXN0YW5jZVRv
OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnN1YihhKS5tYWduaXR1ZGUoKTt9LG1h
Z25pdHVkZTpmdW5jdGlvbigpe3JldHVybiBNYXRoLnNxcnQoKHRoaXMueCp0aGlz
LngpKyh0aGlzLnkqdGhpcy55KSk7fSxjb252ZXJ0VG86ZnVuY3Rpb24oYSl7aWYo
YSE9J3B1cmUnJiZhIT0ndmlld3BvcnQnJiZhIT0nZG9jdW1lbnQnKXJldHVybiBu
ZXcgVmVjdG9yMigwLDApO2lmKGE9PXRoaXMuZG9tYWluKXJldHVybiBuZXcgVmVj
dG9yMih0aGlzLngsdGhpcy55LHRoaXMuZG9tYWluKTtpZihhPT0ncHVyZScpcmV0
dXJuIG5ldyBWZWN0b3IyKHRoaXMueCx0aGlzLnkpO2lmKHRoaXMuZG9tYWluPT0n
cHVyZScpcmV0dXJuIG5ldyBWZWN0b3IyKDAsMCk7dmFyIGI9VmVjdG9yMi5nZXRT
Y3JvbGxQb3NpdGlvbignZG9jdW1lbnQnKTt2YXIgYz10aGlzLngsZD10aGlzLnk7
aWYodGhpcy5kb21haW49PSdkb2N1bWVudCcpe2MtPWIueDtkLT1iLnk7fWVsc2V7
Yys9Yi54O2QrPWIueTt9cmV0dXJuIG5ldyBWZWN0b3IyKGMsZCxhKTt9LHNldEVs
ZW1lbnRQb3NpdGlvbjpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmNvbnZlcnRUbygn
ZG9jdW1lbnQnKTthLnN0eWxlLmxlZnQ9cGFyc2VJbnQoYi54KSsncHgnO2Euc3R5
bGUudG9wPXBhcnNlSW50KGIueSkrJ3B4JztyZXR1cm4gdGhpczt9LHNldEVsZW1l
bnREaW1lbnNpb25zOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnNldEVsZW1lbnRX
aWR0aChhKS5zZXRFbGVtZW50SGVpZ2h0KGEpO30sc2V0RWxlbWVudFdpZHRoOmZ1
bmN0aW9uKGEpe2Euc3R5bGUud2lkdGg9cGFyc2VJbnQodGhpcy54LDEwKSsncHgn
O3JldHVybiB0aGlzO30sc2V0RWxlbWVudEhlaWdodDpmdW5jdGlvbihhKXthLnN0
eWxlLmhlaWdodD1wYXJzZUludCh0aGlzLnksMTApKydweCc7cmV0dXJuIHRoaXM7
fSxzY3JvbGxFbGVtZW50Qnk6ZnVuY3Rpb24oYSl7aWYoYT09ZG9jdW1lbnQuYm9k
eSl7d2luZG93LnNjcm9sbEJ5KHRoaXMueCx0aGlzLnkpO31lbHNle2Euc2Nyb2xs
TGVmdCs9dGhpcy54O2Euc2Nyb2xsVG9wKz10aGlzLnk7fXJldHVybiB0aGlzO319
KTtjb3B5X3Byb3BlcnRpZXMoVmVjdG9yMix7Z2V0RXZlbnRQb3NpdGlvbjpmdW5j
dGlvbihiLGEpe2E9YXx8J2RvY3VtZW50JztiPSRFKGIpO3ZhciBkPWIucGFnZVh8
fChiLmNsaWVudFgrKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0
fHxkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQpKTt2YXIgZT1iLnBhZ2VZfHwoYi5j
bGllbnRZKyhkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wfHxkb2N1
bWVudC5ib2R5LnNjcm9sbFRvcCkpO3ZhciBjPW5ldyBWZWN0b3IyKGQsZSwnZG9j
dW1lbnQnKTtyZXR1cm4gYy5jb252ZXJ0VG8oYSk7fSxnZXRTY3JvbGxQb3NpdGlv
bjpmdW5jdGlvbihhKXthPWF8fCdkb2N1bWVudCc7dmFyIGI9ZG9jdW1lbnQuYm9k
eS5zY3JvbGxMZWZ0fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVm
dDt2YXIgYz1kb2N1bWVudC5ib2R5LnNjcm9sbFRvcHx8ZG9jdW1lbnQuZG9jdW1l
bnRFbGVtZW50LnNjcm9sbFRvcDtyZXR1cm4gbmV3IFZlY3RvcjIoYixjLCdkb2N1
bWVudCcpLmNvbnZlcnRUbyhhKTt9LGdldEVsZW1lbnRQb3NpdGlvbjpmdW5jdGlv
bihjLGIpe2I9Ynx8J2RvY3VtZW50JztpZighYylyZXR1cm47aWYoISgnZ2V0Qm91
bmRpbmdDbGllbnRSZWN0JyBpbiBjKSlyZXR1cm4gbmV3IFZlY3RvcjIoMCwwLCdk
b2N1bWVudCcpO3ZhciBlPWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYT1kb2N1
bWVudC5kb2N1bWVudEVsZW1lbnQsZD1NYXRoLnJvdW5kKGUubGVmdCktYS5jbGll
bnRMZWZ0LGY9TWF0aC5yb3VuZChlLnRvcCktYS5jbGllbnRUb3A7cmV0dXJuIG5l
dyBWZWN0b3IyKGQsZiwndmlld3BvcnQnKS5jb252ZXJ0VG8oYik7fSxnZXRFbGVt
ZW50RGltZW5zaW9uczpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IFZlY3RvcjIoYS5v
ZmZzZXRXaWR0aHx8MCxhLm9mZnNldEhlaWdodHx8MCk7fSxnZXRWaWV3cG9ydERp
bWVuc2lvbnM6ZnVuY3Rpb24oKXt2YXIgYT0od2luZG93JiZ3aW5kb3cuaW5uZXJX
aWR0aCl8fChkb2N1bWVudCYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiZkb2N1
bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpfHwoZG9jdW1lbnQmJmRv
Y3VtZW50LmJvZHkmJmRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGgpfHwwO3ZhciBi
PSh3aW5kb3cmJndpbmRvdy5pbm5lckhlaWdodCl8fChkb2N1bWVudCYmZG9jdW1l
bnQuZG9jdW1lbnRFbGVtZW50JiZkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xp
ZW50SGVpZ2h0KXx8KGRvY3VtZW50JiZkb2N1bWVudC5ib2R5JiZkb2N1bWVudC5i
b2R5LmNsaWVudEhlaWdodCl8fDA7cmV0dXJuIG5ldyBWZWN0b3IyKGEsYiwndmll
d3BvcnQnKTt9LGdldERvY3VtZW50RGltZW5zaW9uczpmdW5jdGlvbigpe3ZhciBh
PShkb2N1bWVudCYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiZkb2N1bWVudC5k
b2N1bWVudEVsZW1lbnQuc2Nyb2xsV2lkdGgpfHwoZG9jdW1lbnQmJmRvY3VtZW50
LmJvZHkmJmRvY3VtZW50LmJvZHkuc2Nyb2xsV2lkdGgpfHwwO3ZhciBiPShkb2N1
bWVudCYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiZkb2N1bWVudC5kb2N1bWVu
dEVsZW1lbnQuc2Nyb2xsSGVpZ2h0KXx8KGRvY3VtZW50JiZkb2N1bWVudC5ib2R5
JiZkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodCl8fDA7cmV0dXJuIG5ldyBWZWN0
b3IyKGEsYiwnZG9jdW1lbnQnKTt9LGRlc2VyaWFsaXplOmZ1bmN0aW9uKGIpe3Zh
ciBhPWIuc3BsaXQoJywnKTtyZXR1cm4gbmV3IFZlY3RvcjIoYVswXSxhWzFdKTt9
fSk7dmFyIG9wZXJhSWdub3JlU2Nyb2xsPXt0YWJsZTp0cnVlLCdpbmxpbmUtdGFi
bGUnOnRydWUsaW5saW5lOnRydWV9O2Z1bmN0aW9uIGVsZW1lbnRYKGEpe3JldHVy
biBWZWN0b3IyLmdldEVsZW1lbnRQb3NpdGlvbihhLCdkb2N1bWVudCcpLng7fWZ1
bmN0aW9uIGVsZW1lbnRZKGEpe3JldHVybiBWZWN0b3IyLmdldEVsZW1lbnRQb3Np
dGlvbihhLCdkb2N1bWVudCcpLnk7fQpmdW5jdGlvbiBhbmltYXRpb24oYSl7aWYo
YT09dW5kZWZpbmVkKXJldHVybjtpZih0aGlzPT13aW5kb3cpe3JldHVybiBuZXcg
YW5pbWF0aW9uKGEpO31lbHNle3RoaXMub2JqPWE7dGhpcy5fcmVzZXRfc3RhdGUo
KTt0aGlzLnF1ZXVlPVtdO3RoaXMubGFzdF9hdHRyPW51bGw7fX1hbmltYXRpb24u
cmVzb2x1dGlvbj0yMDthbmltYXRpb24ub2Zmc2V0PTA7YW5pbWF0aW9uLnByb3Rv
dHlwZS5fcmVzZXRfc3RhdGU9ZnVuY3Rpb24oKXt0aGlzLnN0YXRlPXthdHRyczp7
fSxkdXJhdGlvbjo1MDB9O307YW5pbWF0aW9uLnByb3RvdHlwZS5zdG9wPWZ1bmN0
aW9uKCl7dGhpcy5fcmVzZXRfc3RhdGUoKTt0aGlzLnF1ZXVlPVtdO3JldHVybiB0
aGlzO307YW5pbWF0aW9uLnByb3RvdHlwZS5fYnVpbGRfY29udGFpbmVyPWZ1bmN0
aW9uKCl7aWYodGhpcy5jb250YWluZXJfZGl2KXt0aGlzLl9yZWZyZXNoX2NvbnRh
aW5lcigpO3JldHVybjt9aWYodGhpcy5vYmouZmlyc3RDaGlsZCYmdGhpcy5vYmou
Zmlyc3RDaGlsZC5fX2FuaW1hdGlvbl9yZWZzKXt0aGlzLmNvbnRhaW5lcl9kaXY9
dGhpcy5vYmouZmlyc3RDaGlsZDt0aGlzLmNvbnRhaW5lcl9kaXYuX19hbmltYXRp
b25fcmVmcysrO3RoaXMuX3JlZnJlc2hfY29udGFpbmVyKCk7cmV0dXJuO312YXIg
Yj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtiLnN0eWxlLnBhZGRpbmc9
JzBweCc7Yi5zdHlsZS5tYXJnaW49JzBweCc7Yi5zdHlsZS5ib3JkZXI9JzBweCc7
Yi5fX2FuaW1hdGlvbl9yZWZzPTE7dmFyIGE9dGhpcy5vYmouY2hpbGROb2Rlczt3
aGlsZShhLmxlbmd0aCliLmFwcGVuZENoaWxkKGFbMF0pO3RoaXMub2JqLmFwcGVu
ZENoaWxkKGIpO3RoaXMuX29yaWdfb3ZlcmZsb3c9dGhpcy5vYmouc3R5bGUub3Zl
cmZsb3c7dGhpcy5vYmouc3R5bGUub3ZlcmZsb3c9J2hpZGRlbic7dGhpcy5jb250
YWluZXJfZGl2PWI7dGhpcy5fcmVmcmVzaF9jb250YWluZXIoKTt9O2FuaW1hdGlv
bi5wcm90b3R5cGUuX3JlZnJlc2hfY29udGFpbmVyPWZ1bmN0aW9uKCl7dGhpcy5j
b250YWluZXJfZGl2LnN0eWxlLmhlaWdodD0nYXV0byc7dGhpcy5jb250YWluZXJf
ZGl2LnN0eWxlLndpZHRoPSdhdXRvJzt0aGlzLmNvbnRhaW5lcl9kaXYuc3R5bGUu
aGVpZ2h0PXRoaXMuY29udGFpbmVyX2Rpdi5vZmZzZXRIZWlnaHQrJ3B4Jzt0aGlz
LmNvbnRhaW5lcl9kaXYuc3R5bGUud2lkdGg9dGhpcy5jb250YWluZXJfZGl2Lm9m
ZnNldFdpZHRoKydweCc7fTthbmltYXRpb24ucHJvdG90eXBlLl9kZXN0cm95X2Nv
bnRhaW5lcj1mdW5jdGlvbigpe2lmKCF0aGlzLmNvbnRhaW5lcl9kaXYpcmV0dXJu
O2lmKCEtLXRoaXMuY29udGFpbmVyX2Rpdi5fX2FuaW1hdGlvbl9yZWZzKXt2YXIg
YT10aGlzLmNvbnRhaW5lcl9kaXYuY2hpbGROb2Rlczt3aGlsZShhLmxlbmd0aCl0
aGlzLm9iai5hcHBlbmRDaGlsZChhWzBdKTt0aGlzLm9iai5yZW1vdmVDaGlsZCh0
aGlzLmNvbnRhaW5lcl9kaXYpO310aGlzLmNvbnRhaW5lcl9kaXY9bnVsbDt0aGlz
Lm9iai5zdHlsZS5vdmVyZmxvdz10aGlzLl9vcmlnX292ZXJmbG93O307YW5pbWF0
aW9uLkFUVFJfVE89MTthbmltYXRpb24uQVRUUl9CWT0yO2FuaW1hdGlvbi5BVFRS
X0ZST009MzthbmltYXRpb24ucHJvdG90eXBlLl9hdHRyPWZ1bmN0aW9uKGEsZCxj
KXthPWEucmVwbGFjZSgvLVthLXpdL2dpLGZ1bmN0aW9uKGUpe3JldHVybiBlLnN1
YnN0cmluZygxKS50b1VwcGVyQ2FzZSgpO30pO3ZhciBiPWZhbHNlO3N3aXRjaChh
KXtjYXNlICdiYWNrZ3JvdW5kJzp0aGlzLl9hdHRyKCdiYWNrZ3JvdW5kQ29sb3In
LGQsYyk7cmV0dXJuIHRoaXM7Y2FzZSAnbWFyZ2luJzpkPWFuaW1hdGlvbi5wYXJz
ZV9ncm91cChkKTt0aGlzLl9hdHRyKCdtYXJnaW5Cb3R0b20nLGRbMF0sYyk7dGhp
cy5fYXR0cignbWFyZ2luTGVmdCcsZFsxXSxjKTt0aGlzLl9hdHRyKCdtYXJnaW5S
aWdodCcsZFsyXSxjKTt0aGlzLl9hdHRyKCdtYXJnaW5Ub3AnLGRbM10sYyk7cmV0
dXJuIHRoaXM7Y2FzZSAncGFkZGluZyc6ZD1hbmltYXRpb24ucGFyc2VfZ3JvdXAo
ZCk7dGhpcy5fYXR0cigncGFkZGluZ0JvdHRvbScsZFswXSxjKTt0aGlzLl9hdHRy
KCdwYWRkaW5nTGVmdCcsZFsxXSxjKTt0aGlzLl9hdHRyKCdwYWRkaW5nUmlnaHQn
LGRbMl0sYyk7dGhpcy5fYXR0cigncGFkZGluZ1RvcCcsZFszXSxjKTtyZXR1cm4g
dGhpcztjYXNlICdiYWNrZ3JvdW5kQ29sb3InOmNhc2UgJ2JvcmRlckNvbG9yJzpj
YXNlICdjb2xvcic6ZD1hbmltYXRpb24ucGFyc2VfY29sb3IoZCk7YnJlYWs7Y2Fz
ZSAnb3BhY2l0eSc6ZD1wYXJzZUZsb2F0KGQsMTApO2JyZWFrO2Nhc2UgJ2hlaWdo
dCc6Y2FzZSAnd2lkdGgnOmlmKGQ9PSdhdXRvJyl7Yj10cnVlO31lbHNlIGQ9cGFy
c2VJbnQoZCwxMCk7YnJlYWs7Y2FzZSAnYm9yZGVyV2lkdGgnOmNhc2UgJ2xpbmVI
ZWlnaHQnOmNhc2UgJ2ZvbnRTaXplJzpjYXNlICdtYXJnaW5Cb3R0b20nOmNhc2Ug
J21hcmdpbkxlZnQnOmNhc2UgJ21hcmdpblJpZ2h0JzpjYXNlICdtYXJnaW5Ub3An
OmNhc2UgJ3BhZGRpbmdCb3R0b20nOmNhc2UgJ3BhZGRpbmdMZWZ0JzpjYXNlICdw
YWRkaW5nUmlnaHQnOmNhc2UgJ3BhZGRpbmdUb3AnOmNhc2UgJ2JvdHRvbSc6Y2Fz
ZSAnbGVmdCc6Y2FzZSAncmlnaHQnOmNhc2UgJ3RvcCc6Y2FzZSAnc2Nyb2xsVG9w
JzpjYXNlICdzY3JvbGxMZWZ0JzpkPXBhcnNlSW50KGQsMTApO2JyZWFrO2RlZmF1
bHQ6dGhyb3cgbmV3IEVycm9yKGErJyBpcyBub3QgYSBzdXBwb3J0ZWQgYXR0cmli
dXRlIScpO31pZih0aGlzLnN0YXRlLmF0dHJzW2FdPT09dW5kZWZpbmVkKXRoaXMu
c3RhdGUuYXR0cnNbYV09e307aWYoYil0aGlzLnN0YXRlLmF0dHJzW2FdLmF1dG89
dHJ1ZTtzd2l0Y2goYyl7Y2FzZSBhbmltYXRpb24uQVRUUl9GUk9NOnRoaXMuc3Rh
dGUuYXR0cnNbYV0uc3RhcnQ9ZDticmVhaztjYXNlIGFuaW1hdGlvbi5BVFRSX0JZ
OnRoaXMuc3RhdGUuYXR0cnNbYV0uYnk9dHJ1ZTtjYXNlIGFuaW1hdGlvbi5BVFRS
X1RPOnRoaXMuc3RhdGUuYXR0cnNbYV0udmFsdWU9ZDticmVhazt9fTthbmltYXRp
b24uX2dldF9ib3hfd2lkdGg9ZnVuY3Rpb24oYyl7dmFyIGQ9cGFyc2VJbnQoQ1NT
LmdldFN0eWxlKGMsJ3BhZGRpbmdMZWZ0JyksMTApLGU9cGFyc2VJbnQoQ1NTLmdl
dFN0eWxlKGMsJ3BhZGRpbmdSaWdodCcpLDEwKSxhPXBhcnNlSW50KENTUy5nZXRT
dHlsZShjLCdib3JkZXJMZWZ0V2lkdGgnKSwxMCksYj1wYXJzZUludChDU1MuZ2V0
U3R5bGUoYywnYm9yZGVyUmlnaHRXaWR0aCcpLDEwKTtyZXR1cm4gYy5vZmZzZXRX
aWR0aC0oZD9kOjApLShlP2U6MCktKGE/YTowKS0oYj9iOjApO307YW5pbWF0aW9u
Ll9nZXRfYm94X2hlaWdodD1mdW5jdGlvbihjKXt2YXIgZT1wYXJzZUludChDU1Mu
Z2V0U3R5bGUoYywncGFkZGluZ1RvcCcpLDEwKSxkPXBhcnNlSW50KENTUy5nZXRT
dHlsZShjLCdwYWRkaW5nQm90dG9tJyksMTApLGE9cGFyc2VJbnQoQ1NTLmdldFN0
eWxlKGMsJ2JvcmRlclRvcFdpZHRoJyksMTApLGI9cGFyc2VJbnQoQ1NTLmdldFN0
eWxlKGMsJ2JvcmRlckJvdHRvbVdpZHRoJyksMTApO3JldHVybiBjLm9mZnNldEhl
aWdodC0oZT9lOjApLShkP2Q6MCktKGE/YTowKS0oYj9iOjApO307YW5pbWF0aW9u
LnByb3RvdHlwZS50bz1mdW5jdGlvbihhLGIpe2lmKGI9PT11bmRlZmluZWQpe3Ro
aXMuX2F0dHIodGhpcy5sYXN0X2F0dHIsYSxhbmltYXRpb24uQVRUUl9UTyk7fWVs
c2V7dGhpcy5fYXR0cihhLGIsYW5pbWF0aW9uLkFUVFJfVE8pO3RoaXMubGFzdF9h
dHRyPWE7fXJldHVybiB0aGlzO307YW5pbWF0aW9uLnByb3RvdHlwZS5ieT1mdW5j
dGlvbihhLGIpe2lmKGI9PT11bmRlZmluZWQpe3RoaXMuX2F0dHIodGhpcy5sYXN0
X2F0dHIsYSxhbmltYXRpb24uQVRUUl9CWSk7fWVsc2V7dGhpcy5fYXR0cihhLGIs
YW5pbWF0aW9uLkFUVFJfQlkpO3RoaXMubGFzdF9hdHRyPWE7fXJldHVybiB0aGlz
O307YW5pbWF0aW9uLnByb3RvdHlwZS5mcm9tPWZ1bmN0aW9uKGEsYil7aWYoYj09
PXVuZGVmaW5lZCl7dGhpcy5fYXR0cih0aGlzLmxhc3RfYXR0cixhLGFuaW1hdGlv
bi5BVFRSX0ZST00pO31lbHNle3RoaXMuX2F0dHIoYSxiLGFuaW1hdGlvbi5BVFRS
X0ZST00pO3RoaXMubGFzdF9hdHRyPWE7fXJldHVybiB0aGlzO307YW5pbWF0aW9u
LnByb3RvdHlwZS5kdXJhdGlvbj1mdW5jdGlvbihhKXt0aGlzLnN0YXRlLmR1cmF0
aW9uPWE/YTowO3JldHVybiB0aGlzO307YW5pbWF0aW9uLnByb3RvdHlwZS5jaGVj
a3BvaW50PWZ1bmN0aW9uKGIsYSl7aWYoYj09PXVuZGVmaW5lZCliPTE7dGhpcy5z
dGF0ZS5jaGVja3BvaW50PWI7dGhpcy5xdWV1ZS5wdXNoKHRoaXMuc3RhdGUpO3Ro
aXMuX3Jlc2V0X3N0YXRlKCk7dGhpcy5zdGF0ZS5jaGVja3BvaW50Y2I9YTtyZXR1
cm4gdGhpczt9O2FuaW1hdGlvbi5wcm90b3R5cGUuYmxpbmQ9ZnVuY3Rpb24oKXt0
aGlzLnN0YXRlLmJsaW5kPXRydWU7cmV0dXJuIHRoaXM7fTthbmltYXRpb24ucHJv
dG90eXBlLmhpZGU9ZnVuY3Rpb24oKXt0aGlzLnN0YXRlLmhpZGU9dHJ1ZTtyZXR1
cm4gdGhpczt9O2FuaW1hdGlvbi5wcm90b3R5cGUuc2hvdz1mdW5jdGlvbigpe3Ro
aXMuc3RhdGUuc2hvdz10cnVlO3JldHVybiB0aGlzO307YW5pbWF0aW9uLnByb3Rv
dHlwZS5lYXNlPWZ1bmN0aW9uKGEpe3RoaXMuc3RhdGUuZWFzZT1hO3JldHVybiB0
aGlzO307YW5pbWF0aW9uLnByb3RvdHlwZS5nbz1mdW5jdGlvbigpe3ZhciBiPShu
ZXcgRGF0ZSgpKS5nZXRUaW1lKCk7dGhpcy5xdWV1ZS5wdXNoKHRoaXMuc3RhdGUp
O2Zvcih2YXIgYT0wO2E8dGhpcy5xdWV1ZS5sZW5ndGg7YSsrKXt0aGlzLnF1ZXVl
W2FdLnN0YXJ0PWItYW5pbWF0aW9uLm9mZnNldDtpZih0aGlzLnF1ZXVlW2FdLmNo
ZWNrcG9pbnQpYis9dGhpcy5xdWV1ZVthXS5jaGVja3BvaW50KnRoaXMucXVldWVb
YV0uZHVyYXRpb247fWFuaW1hdGlvbi5wdXNoKHRoaXMpO3JldHVybiB0aGlzO307
YW5pbWF0aW9uLnByb3RvdHlwZS5fc2hvdz1mdW5jdGlvbigpe0NTUy5zaG93KHRo
aXMub2JqKTt9O2FuaW1hdGlvbi5wcm90b3R5cGUuX2hpZGU9ZnVuY3Rpb24oKXtD
U1MuaGlkZSh0aGlzLm9iaik7fTthbmltYXRpb24ucHJvdG90eXBlLl9mcmFtZT1m
dW5jdGlvbihtKXt2YXIgYz10cnVlO3ZhciBsPWZhbHNlO3ZhciBvPWZhbHNlO3Zh
ciBuO2Z1bmN0aW9uIGQocCl7cmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVu
dFtwXXx8ZG9jdW1lbnQuYm9keVtwXTt9Zm9yKHZhciBlPTA7ZTx0aGlzLnF1ZXVl
Lmxlbmd0aDtlKyspe3ZhciBiPXRoaXMucXVldWVbZV07aWYoYi5zdGFydD5tKXtj
PWZhbHNlO2NvbnRpbnVlO31pZihiLmNoZWNrcG9pbnRjYil7dGhpcy5fY2FsbGJh
Y2soYi5jaGVja3BvaW50Y2IsbS1iLnN0YXJ0KTtiLmNoZWNrcG9pbnRjYj1udWxs
O31pZihiLnN0YXJ0ZWQ9PT11bmRlZmluZWQpe2lmKGIuc2hvdyl0aGlzLl9zaG93
KCk7Zm9yKHZhciBhIGluIGIuYXR0cnMpe2lmKGIuYXR0cnNbYV0uc3RhcnQhPT11
bmRlZmluZWQpY29udGludWU7c3dpdGNoKGEpe2Nhc2UgJ2JhY2tncm91bmRDb2xv
cic6Y2FzZSAnYm9yZGVyQ29sb3InOmNhc2UgJ2NvbG9yJzp2YXIgbj1hbmltYXRp
b24ucGFyc2VfY29sb3IoQ1NTLmdldFN0eWxlKHRoaXMub2JqLGE9PSdib3JkZXJD
b2xvcic/J2JvcmRlckxlZnRDb2xvcic6YSkpO2lmKGIuYXR0cnNbYV0uYnkpe2Iu
YXR0cnNbYV0udmFsdWVbMF09TWF0aC5taW4oMjU1LE1hdGgubWF4KDAsYi5hdHRy
c1thXS52YWx1ZVswXStuWzBdKSk7Yi5hdHRyc1thXS52YWx1ZVsxXT1NYXRoLm1p
bigyNTUsTWF0aC5tYXgoMCxiLmF0dHJzW2FdLnZhbHVlWzFdK25bMV0pKTtiLmF0
dHJzW2FdLnZhbHVlWzJdPU1hdGgubWluKDI1NSxNYXRoLm1heCgwLGIuYXR0cnNb
YV0udmFsdWVbMl0rblsyXSkpO31icmVhaztjYXNlICdvcGFjaXR5Jzp2YXIgbj1D
U1MuZ2V0T3BhY2l0eSh0aGlzLm9iaik7aWYoYi5hdHRyc1thXS5ieSliLmF0dHJz
W2FdLnZhbHVlPU1hdGgubWluKDEsTWF0aC5tYXgoMCxiLmF0dHJzW2FdLnZhbHVl
K24pKTticmVhaztjYXNlICdoZWlnaHQnOnZhciBuPWFuaW1hdGlvbi5fZ2V0X2Jv
eF9oZWlnaHQodGhpcy5vYmopO2lmKGIuYXR0cnNbYV0uYnkpYi5hdHRyc1thXS52
YWx1ZSs9bjticmVhaztjYXNlICd3aWR0aCc6dmFyIG49YW5pbWF0aW9uLl9nZXRf
Ym94X3dpZHRoKHRoaXMub2JqKTtpZihiLmF0dHJzW2FdLmJ5KWIuYXR0cnNbYV0u
dmFsdWUrPW47YnJlYWs7Y2FzZSAnc2Nyb2xsTGVmdCc6Y2FzZSAnc2Nyb2xsVG9w
JzpuPSh0aGlzLm9iaj09PWRvY3VtZW50LmJvZHkpP2QoYSk6dGhpcy5vYmpbYV07
aWYoYi5hdHRyc1thXS5ieSliLmF0dHJzW2FdLnZhbHVlKz1uO2JbJ2xhc3QnK2Fd
PW47YnJlYWs7ZGVmYXVsdDp2YXIgbj1wYXJzZUludChDU1MuZ2V0U3R5bGUodGhp
cy5vYmosYSksMTApfHwwO2lmKGIuYXR0cnNbYV0uYnkpYi5hdHRyc1thXS52YWx1
ZSs9bjticmVhazt9Yi5hdHRyc1thXS5zdGFydD1uO31pZigoYi5hdHRycy5oZWln
aHQmJmIuYXR0cnMuaGVpZ2h0LmF1dG8pfHwoYi5hdHRycy53aWR0aCYmYi5hdHRy
cy53aWR0aC5hdXRvKSl7aWYodWEuZmlyZWZveCgpPDMpbz10cnVlO3RoaXMuX2Rl
c3Ryb3lfY29udGFpbmVyKCk7Zm9yKHZhciBhIGluIHtoZWlnaHQ6MSx3aWR0aDox
LGZvbnRTaXplOjEsYm9yZGVyTGVmdFdpZHRoOjEsYm9yZGVyUmlnaHRXaWR0aDox
LGJvcmRlclRvcFdpZHRoOjEsYm9yZGVyQm90dG9tV2lkdGg6MSxwYWRkaW5nTGVm
dDoxLHBhZGRpbmdSaWdodDoxLHBhZGRpbmdUb3A6MSxwYWRkaW5nQm90dG9tOjF9
KWlmKGIuYXR0cnNbYV0pdGhpcy5vYmouc3R5bGVbYV09Yi5hdHRyc1thXS52YWx1
ZSsodHlwZW9mIGIuYXR0cnNbYV0udmFsdWU9PSdudW1iZXInPydweCc6JycpO2lm
KGIuYXR0cnMuaGVpZ2h0JiZiLmF0dHJzLmhlaWdodC5hdXRvKWIuYXR0cnMuaGVp
Z2h0LnZhbHVlPWFuaW1hdGlvbi5fZ2V0X2JveF9oZWlnaHQodGhpcy5vYmopO2lm
KGIuYXR0cnMud2lkdGgmJmIuYXR0cnMud2lkdGguYXV0byliLmF0dHJzLndpZHRo
LnZhbHVlPWFuaW1hdGlvbi5fZ2V0X2JveF93aWR0aCh0aGlzLm9iaik7fWIuc3Rh
cnRlZD10cnVlO2lmKGIuYmxpbmQpdGhpcy5fYnVpbGRfY29udGFpbmVyKCk7fXZh
ciBpPShtLWIuc3RhcnQpL2IuZHVyYXRpb247aWYoaT49MSl7aT0xO2lmKGIuaGlk
ZSl0aGlzLl9oaWRlKCk7fWVsc2UgYz1mYWxzZTt2YXIgaz1iLmVhc2U/Yi5lYXNl
KGkpOmk7aWYoIWwmJmkhPTEmJmIuYmxpbmQpbD10cnVlO2lmKG8mJnRoaXMub2Jq
LnBhcmVudE5vZGUpe3ZhciBqPXRoaXMub2JqLnBhcmVudE5vZGU7dmFyIGg9dGhp
cy5vYmoubmV4dFNpYmxpbmc7ai5yZW1vdmVDaGlsZCh0aGlzLm9iaik7fWZvcih2
YXIgYSBpbiBiLmF0dHJzKXN3aXRjaChhKXtjYXNlICdiYWNrZ3JvdW5kQ29sb3In
OmNhc2UgJ2JvcmRlckNvbG9yJzpjYXNlICdjb2xvcic6dGhpcy5vYmouc3R5bGVb
YV09J3JnYignK2FuaW1hdGlvbi5jYWxjX3R3ZWVuKGssYi5hdHRyc1thXS5zdGFy
dFswXSxiLmF0dHJzW2FdLnZhbHVlWzBdLHRydWUpKycsJythbmltYXRpb24uY2Fs
Y190d2VlbihrLGIuYXR0cnNbYV0uc3RhcnRbMV0sYi5hdHRyc1thXS52YWx1ZVsx
XSx0cnVlKSsnLCcrYW5pbWF0aW9uLmNhbGNfdHdlZW4oayxiLmF0dHJzW2FdLnN0
YXJ0WzJdLGIuYXR0cnNbYV0udmFsdWVbMl0sdHJ1ZSkrJyknO2JyZWFrO2Nhc2Ug
J29wYWNpdHknOkNTUy5zZXRTdHlsZSh0aGlzLm9iaiwnb3BhY2l0eScsYW5pbWF0
aW9uLmNhbGNfdHdlZW4oayxiLmF0dHJzW2FdLnN0YXJ0LGIuYXR0cnNbYV0udmFs
dWUpKTticmVhaztjYXNlICdoZWlnaHQnOmNhc2UgJ3dpZHRoJzp0aGlzLm9iai5z
dHlsZVthXT1rPT0xJiZiLmF0dHJzW2FdLmF1dG8/J2F1dG8nOmFuaW1hdGlvbi5j
YWxjX3R3ZWVuKGssYi5hdHRyc1thXS5zdGFydCxiLmF0dHJzW2FdLnZhbHVlLHRy
dWUpKydweCc7YnJlYWs7Y2FzZSAnc2Nyb2xsTGVmdCc6Y2FzZSAnc2Nyb2xsVG9w
Jzp2YXIgZj10aGlzLm9iaj09PWRvY3VtZW50LmJvZHk7bj1mP2QoYSk6dGhpcy5v
YmpbYV07aWYoYlsnbGFzdCcrYV0hPT1uKXtkZWxldGUgYi5hdHRyc1thXTt9ZWxz
ZXt2YXIgZz1hbmltYXRpb24uY2FsY190d2VlbihrLGIuYXR0cnNbYV0uc3RhcnQs
Yi5hdHRyc1thXS52YWx1ZSx0cnVlKTtpZighZil7Zz10aGlzLm9ialthXT1nO31l
bHNle2lmKGE9PSdzY3JvbGxMZWZ0Jyl7d2luZG93LnNjcm9sbFRvKGcsZCgnc2Ny
b2xsVG9wJykpO31lbHNlIHdpbmRvdy5zY3JvbGxUbyhkKCdzY3JvbGxMZWZ0Jyks
Zyk7Zz1kKGEpO31iWydsYXN0JythXT1nO31icmVhaztkZWZhdWx0OnRoaXMub2Jq
LnN0eWxlW2FdPWFuaW1hdGlvbi5jYWxjX3R3ZWVuKGssYi5hdHRyc1thXS5zdGFy
dCxiLmF0dHJzW2FdLnZhbHVlLHRydWUpKydweCc7YnJlYWs7fWlmKGk9PTEpe3Ro
aXMucXVldWUuc3BsaWNlKGUtLSwxKTt0aGlzLl9jYWxsYmFjayhiLm9uZG9uZSxt
LWIuc3RhcnQtYi5kdXJhdGlvbik7fX1pZihvKWpbaD8naW5zZXJ0QmVmb3JlJzon
YXBwZW5kQ2hpbGQnXSh0aGlzLm9iaixoKTtpZighbCYmdGhpcy5jb250YWluZXJf
ZGl2KXRoaXMuX2Rlc3Ryb3lfY29udGFpbmVyKCk7cmV0dXJuICFjO307YW5pbWF0
aW9uLnByb3RvdHlwZS5vbmRvbmU9ZnVuY3Rpb24oYSl7dGhpcy5zdGF0ZS5vbmRv
bmU9YTtyZXR1cm4gdGhpczt9O2FuaW1hdGlvbi5wcm90b3R5cGUuX2NhbGxiYWNr
PWZ1bmN0aW9uKGEsYil7aWYoYSl7YW5pbWF0aW9uLm9mZnNldD1iO2EuY2FsbCh0
aGlzKTthbmltYXRpb24ub2Zmc2V0PTA7fX07YW5pbWF0aW9uLmNhbGNfdHdlZW49
ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIChkP3BhcnNlSW50OnBhcnNlRmxvYXQp
KChjLWIpKmErYiwxMCk7fTthbmltYXRpb24ucGFyc2VfY29sb3I9ZnVuY3Rpb24o
YSl7dmFyIGI9L14jKFthLWYwLTldezEsMn0pKFthLWYwLTldezEsMn0pKFthLWYw
LTldezEsMn0pJC9pLmV4ZWMoYSk7aWYoYil7cmV0dXJuIFtwYXJzZUludChiWzFd
Lmxlbmd0aD09MT9iWzFdK2JbMV06YlsxXSwxNikscGFyc2VJbnQoYlsyXS5sZW5n
dGg9PTE/YlsyXStiWzJdOmJbMl0sMTYpLHBhcnNlSW50KGJbM10ubGVuZ3RoPT0x
P2JbM10rYlszXTpiWzNdLDE2KV07fWVsc2V7dmFyIGM9L15yZ2JhPyAqXCgoWzAt
OV0rKSwgKihbMC05XSspLCAqKFswLTldKykoPzosICooWzAtOV0rKSk/XCkkLy5l
eGVjKGEpO2lmKGMpe2lmKGNbNF09PT0nMCcpe3JldHVybiBbMjU1LDI1NSwyNTVd
O31lbHNlIHJldHVybiBbcGFyc2VJbnQoY1sxXSwxMCkscGFyc2VJbnQoY1syXSwx
MCkscGFyc2VJbnQoY1szXSwxMCldO31lbHNlIGlmKGE9PSd0cmFuc3BhcmVudCcp
e3JldHVybiBbMjU1LDI1NSwyNTVdO31lbHNlIHRocm93ICdOYW1lZCBjb2xvciBh
dHRyaWJ1dGVzIGFyZSBub3Qgc3VwcG9ydGVkLic7fX07YW5pbWF0aW9uLnBhcnNl
X2dyb3VwPWZ1bmN0aW9uKGEpe3ZhciBhPXRyaW0oYSkuc3BsaXQoLyArLyk7aWYo
YS5sZW5ndGg9PTQpe3JldHVybiBhO31lbHNlIGlmKGEubGVuZ3RoPT0zKXtyZXR1
cm4gW2FbMF0sYVsxXSxhWzJdLGFbMV1dO31lbHNlIGlmKGEubGVuZ3RoPT0yKXty
ZXR1cm4gW2FbMF0sYVsxXSxhWzBdLGFbMV1dO31lbHNlIHJldHVybiBbYVswXSxh
WzBdLGFbMF0sYVswXV07fTthbmltYXRpb24ucHVzaD1mdW5jdGlvbihhKXtpZigh
YW5pbWF0aW9uLmFjdGl2ZSlhbmltYXRpb24uYWN0aXZlPVtdO2FuaW1hdGlvbi5h
Y3RpdmUucHVzaChhKTtpZighYW5pbWF0aW9uLnRpbWVvdXQpYW5pbWF0aW9uLnRp
bWVvdXQ9c2V0SW50ZXJ2YWwoYW5pbWF0aW9uLmFuaW1hdGUuYmluZChhbmltYXRp
b24pLGFuaW1hdGlvbi5yZXNvbHV0aW9uLGZhbHNlKTthbmltYXRpb24uYW5pbWF0
ZSh0cnVlKTt9O2FuaW1hdGlvbi5hbmltYXRlPWZ1bmN0aW9uKGMpe3ZhciBkPShu
ZXcgRGF0ZSgpKS5nZXRUaW1lKCk7Zm9yKHZhciBiPWM9PT10cnVlP2FuaW1hdGlv
bi5hY3RpdmUubGVuZ3RoLTE6MDtiPGFuaW1hdGlvbi5hY3RpdmUubGVuZ3RoO2Ir
Kyl0cnl7aWYoIWFuaW1hdGlvbi5hY3RpdmVbYl0uX2ZyYW1lKGQpKWFuaW1hdGlv
bi5hY3RpdmUuc3BsaWNlKGItLSwxKTt9Y2F0Y2goYSl7YW5pbWF0aW9uLmFjdGl2
ZS5zcGxpY2UoYi0tLDEpO31pZihhbmltYXRpb24uYWN0aXZlLmxlbmd0aD09MCl7
Y2xlYXJJbnRlcnZhbChhbmltYXRpb24udGltZW91dCk7YW5pbWF0aW9uLnRpbWVv
dXQ9bnVsbDt9fTthbmltYXRpb24uZWFzZT17fTthbmltYXRpb24uZWFzZS5iZWdp
bj1mdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5zaW4oTWF0aC5QSS8yKihhLTEpKSsx
O307YW5pbWF0aW9uLmVhc2UuZW5kPWZ1bmN0aW9uKGEpe3JldHVybiBNYXRoLnNp
biguNSpNYXRoLlBJKmEpO307YW5pbWF0aW9uLmVhc2UuYm90aD1mdW5jdGlvbihh
KXtyZXR1cm4gLjUqTWF0aC5zaW4oTWF0aC5QSSooYS0uNSkpKy41O307YW5pbWF0
aW9uLnByZXBlbmRJbnNlcnQ9ZnVuY3Rpb24oYixhKXthbmltYXRpb24uaW5zZXJ0
KGIsYSxET00ucHJlcGVuZENvbnRlbnQpO307YW5pbWF0aW9uLmFwcGVuZEluc2Vy
dD1mdW5jdGlvbihiLGEpe2FuaW1hdGlvbi5pbnNlcnQoYixhLERPTS5hcHBlbmRD
b250ZW50KTt9O2FuaW1hdGlvbi5pbnNlcnQ9ZnVuY3Rpb24oYyxhLGIpe0NTUy5z
ZXRTdHlsZShhLCdvcGFjaXR5JywwKTtiKGMsYSk7YW5pbWF0aW9uKGEpLmZyb20o
J29wYWNpdHknLDApLnRvKCdvcGFjaXR5JywxKS5kdXJhdGlvbig0MDApLmdvKCk7
fTsKZnVuY3Rpb24gc2hvdygpe2Zvcih2YXIgYj0wO2I8YXJndW1lbnRzLmxlbmd0
aDtiKyspe3ZhciBhPWdlKGFyZ3VtZW50c1tiXSk7aWYoYSYmYS5zdHlsZSlhLnN0
eWxlLmRpc3BsYXk9Jyc7fXJldHVybiBmYWxzZTt9ZnVuY3Rpb24gaGlkZSgpe2Zv
cih2YXIgYj0wO2I8YXJndW1lbnRzLmxlbmd0aDtiKyspe3ZhciBhPWdlKGFyZ3Vt
ZW50c1tiXSk7aWYoYSYmYS5zdHlsZSlhLnN0eWxlLmRpc3BsYXk9J25vbmUnO31y
ZXR1cm4gZmFsc2U7fWZ1bmN0aW9uIHNob3duKGEpe2E9Z2UoYSk7cmV0dXJuIChh
LnN0eWxlLmRpc3BsYXkhPSdub25lJyYmIShhLnN0eWxlLmRpc3BsYXk9PScnJiZh
Lm9mZnNldFdpZHRoPT0wKSk7fWZ1bmN0aW9uIHRvZ2dsZSgpe2Zvcih2YXIgYj0w
O2I8YXJndW1lbnRzLmxlbmd0aDtiKyspe3ZhciBhPSQoYXJndW1lbnRzW2JdKTth
LnN0eWxlLmRpc3BsYXk9Q1NTLmdldFN0eWxlKGEsImRpc3BsYXkiKT09J2Jsb2Nr
Jz8nbm9uZSc6J2Jsb2NrJzt9cmV0dXJuIGZhbHNlO31mdW5jdGlvbiB0b2dnbGVE
aXNwbGF5Tm9uZSgpe2Zvcih2YXIgYj0wO2I8YXJndW1lbnRzLmxlbmd0aDtiKysp
e3ZhciBhPSQoYXJndW1lbnRzW2JdKTtpZihzaG93bihhKSl7aGlkZShhKTt9ZWxz
ZSBzaG93KGEpO31yZXR1cm4gZmFsc2U7fQp2YXIgS0VZUz17QkFDS1NQQUNFOjgs
VEFCOjksUkVUVVJOOjEzLEVTQzoyNyxTUEFDRTozMixQQUdFX1VQOjMzLFBBR0Vf
RE9XTjozNCxMRUZUOjM3LFVQOjM4LFJJR0hUOjM5LERPV046NDAsREVMRVRFOjQ2
LENPTU1BOjE4OH07CnZhciBFcnJvckRpYWxvZz17c2hvd0FzeW5jRXJyb3I6ZnVu
Y3Rpb24oYil7dHJ5e3JldHVybiBFcnJvckRpYWxvZy5zaG93KGIuZ2V0RXJyb3JT
dW1tYXJ5KCksYi5nZXRFcnJvckRlc2NyaXB0aW9uKCkpO31jYXRjaChhKXthbGVy
dChiKTt9fSxzaG93OmZ1bmN0aW9uKGQsYyxiLGEpe3JldHVybiAobmV3IERpYWxv
ZygpKS5zZXRUaXRsZShkKS5zZXRCb2R5KGMpLnNldEJ1dHRvbnMoW0RpYWxvZy5P
S10pLnNldFN0YWNrYWJsZSh0cnVlKS5zZXRNb2RhbCh0cnVlKS5zZXRIYW5kbGVy
KGJ8fGJhZ29maG9sZGluZykuc2V0QnV0dG9uc01lc3NhZ2UoYXx8JycpLnNob3co
KTt9fTsKYWRkX3Byb3BlcnRpZXMoJ0Zvcm0nLHtnZXRJbnB1dHM6ZnVuY3Rpb24o
YSl7YT1hfHxkb2N1bWVudDtyZXR1cm4gW10uY29uY2F0KCRBKERPTS5zY3J5KGEs
J2lucHV0JykpLCRBKERPTS5zY3J5KGEsJ3NlbGVjdCcpKSwkQShET00uc2NyeShh
LCd0ZXh0YXJlYScpKSwkQShET00uc2NyeShhLCdidXR0b24nKSkpO30sZ2V0U2Vs
ZWN0VmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIGEub3B0aW9uc1thLnNlbGVjdGVk
SW5kZXhdLnZhbHVlO30sc2V0U2VsZWN0VmFsdWU6ZnVuY3Rpb24oYixjKXtmb3Io
dmFyIGE9MDthPGIub3B0aW9ucy5sZW5ndGg7KythKWlmKGIub3B0aW9uc1thXS52
YWx1ZT09Yyl7Yi5zZWxlY3RlZEluZGV4PWE7YnJlYWs7fX0sZ2V0UmFkaW9WYWx1
ZTpmdW5jdGlvbihiKXtmb3IodmFyIGE9MDthPGIubGVuZ3RoO2ErKylpZihiW2Fd
LmNoZWNrZWQpcmV0dXJuIGJbYV0udmFsdWU7cmV0dXJuIG51bGw7fSxnZXRFbGVt
ZW50czpmdW5jdGlvbihhKXtyZXR1cm4gJEEoYS50YWdOYW1lPT0nRk9STSc/YS5l
bGVtZW50czpGb3JtLmdldElucHV0cyhhKSk7fSxnZXRBdHRyaWJ1dGU6ZnVuY3Rp
b24oYixhKXtyZXR1cm4gKGIuZ2V0QXR0cmlidXRlTm9kZShhKXx8e30pLnZhbHVl
fHxudWxsO30sc2V0RGlzYWJsZWQ6ZnVuY3Rpb24oYixhKXtGb3JtLmdldEVsZW1l
bnRzKGIpLmZvckVhY2goZnVuY3Rpb24oYyl7aWYoYy5kaXNhYmxlZCE9dW5kZWZp
bmVkKXt2YXIgZD1EYXRhU3RvcmUuZ2V0KGMsJ29yaWdEaXNhYmxlZFN0YXRlJyk7
aWYoYSl7aWYoZD09PXVuZGVmaW5lZClEYXRhU3RvcmUuc2V0KGMsJ29yaWdEaXNh
YmxlZFN0YXRlJyxjLmRpc2FibGVkKTtjLmRpc2FibGVkPWE7fWVsc2V7aWYoZCE9
PXRydWUpYy5kaXNhYmxlZD1mYWxzZTtEYXRhU3RvcmUucmVtb3ZlKGMsJ29yaWdE
aXNhYmxlZFN0YXRlJyk7fX19KTt9LGJvb3RzdHJhcDpmdW5jdGlvbihkLGUpe3Zh
ciBmPShGb3JtLmdldEF0dHJpYnV0ZShkLCdtZXRob2QnKXx8J0dFVCcpLnRvVXBw
ZXJDYXNlKCk7ZT1QYXJlbnQuYnlUYWcoZSwnYnV0dG9uJyl8fGU7dmFyIGc9RE9N
UGF0aC5maW5kTm9kZVBhdGgoZCk7dmFyIGk9UGFyZW50LmJ5Q2xhc3MoZSwnc3Rh
dF9lbGVtJyl8fGQ7aWYoQ1NTLmhhc0NsYXNzKGksJ2FzeW5jX3NhdmluZycpKXJl
dHVybjtpZihlJiYoZS5mb3JtIT09ZHx8KGUubm9kZU5hbWUhPSdJTlBVVCcmJmUu
bm9kZU5hbWUhPSdCVVRUT04nKXx8ZS50eXBlIT0nc3VibWl0Jykpe3ZhciBqPURP
TS5zY3J5KGQsJy5lbnRlcl9zdWJtaXRfdGFyZ2V0JylbMF07dmFyIGI9ZTtqJiYo
ZT1qKTt9dmFyIGM9Rm9ybS5zZXJpYWxpemUoZCxlKTtGb3JtLnNldERpc2FibGVk
KGQsdHJ1ZSk7dmFyIGE9Rm9ybS5nZXRBdHRyaWJ1dGUoZCwnYWpheGlmeScpfHxG
b3JtLmdldEF0dHJpYnV0ZShkLCdhY3Rpb24nKTt0cmFja1JlZmVycmVyKGQsYSk7
dmFyIGg9bmV3IEFzeW5jUmVxdWVzdChhKTtoLnNldERhdGEoYykuc2V0TmVjdGFy
TW9kdWxlRGF0YVNhZmUoZCkuc2V0UmVhZE9ubHkoZj09J0dFVCcpLnNldE1ldGhv
ZChmKS5zZXRSZWxhdGl2ZVRvKGQpLnNldFN0YXR1c0VsZW1lbnQoaSkuc2V0SGFu
ZGxlcihmdW5jdGlvbihrKXtpZihrLmlzUmVwbGF5KCkpaC5zZXRSZWxhdGl2ZVRv
KERPTVBhdGgucmVzb2x2ZU5vZGVQYXRoKGcpKTt9KS5zZXRGaW5hbGx5SGFuZGxl
cihGb3JtLnNldERpc2FibGVkLmJpbmQobnVsbCxkLGZhbHNlKSkuc2VuZCgpO30s
c2VyaWFsaXplOmZ1bmN0aW9uKGIsYyl7dmFyIGE9e307Rm9ybS5nZXRFbGVtZW50
cyhiKS5mb3JFYWNoKGZ1bmN0aW9uKGQpe2lmKGQubmFtZSYmIWQuZGlzYWJsZWQm
JmQudHlwZSE9J3N1Ym1pdCcpaWYoIWQudHlwZXx8KChkLnR5cGU9PSdyYWRpbyd8
fGQudHlwZT09J2NoZWNrYm94JykmJmQuY2hlY2tlZCl8fGQudHlwZT09J3RleHQn
fHxkLnR5cGU9PSdwYXNzd29yZCd8fGQudHlwZT09J2hpZGRlbid8fGQudGFnTmFt
ZT09J1RFWFRBUkVBJyl7dmFyIGg7aWYoZC5uYW1lPT0ncG9zdF9mb3JtX2lkJylo
PUVudi5wb3N0X2Zvcm1faWQ7Rm9ybS5fc2VyaWFsaXplSGVscGVyKGEsZC5uYW1l
LGh8fElucHV0LmdldFZhbHVlKGQpKTt9ZWxzZSBpZihkLnRhZ05hbWU9PSdTRUxF
Q1QnKWZvcih2YXIgZT0wLGY9ZC5vcHRpb25zLmxlbmd0aDtlPGY7KytlKXt2YXIg
Zz1kLm9wdGlvbnNbZV07aWYoZy5zZWxlY3RlZClGb3JtLl9zZXJpYWxpemVIZWxw
ZXIoYSxkLm5hbWUsZy52YWx1ZSk7fX0pO2lmKGMmJmMubmFtZSYmJ3N1Ym1pdCc9
PWMudHlwZSYmRE9NLmNvbnRhaW5zKGIsYykmJkRPTS5pc05vZGUoYyxbJ2lucHV0
JywnYnV0dG9uJ10pKUZvcm0uX3NlcmlhbGl6ZUhlbHBlcihhLGMubmFtZSxjLnZh
bHVlKTtyZXR1cm4gRm9ybS5fc2VyaWFsaXplRml4KGEpO30sX3NlcmlhbGl6ZUhl
bHBlcjpmdW5jdGlvbihhLGQsZSl7dmFyIGM9LyhbXlxdXSspXFsoW15cXV0qKVxd
KC4qKS8uZXhlYyhkKTtpZihjKXthW2NbMV1dPWFbY1sxXV18fHt9O2lmKGNbMl09
PScnKXt2YXIgYj0wO3doaWxlKGFbY1sxXV1bYl0hPXVuZGVmaW5lZCliKys7fWVs
c2UgYj1jWzJdO2lmKGNbM109PScnKXthW2NbMV1dW2JdPWU7fWVsc2UgRm9ybS5f
c2VyaWFsaXplSGVscGVyKGFbY1sxXV0sYi5jb25jYXQoY1szXSksZSk7fWVsc2Ug
YVtkXT1lO30sX3NlcmlhbGl6ZUZpeDpmdW5jdGlvbihhKXt2YXIgZT1bXTtmb3Io
dmFyIGIgaW4gYSl7aWYoYSBpbnN0YW5jZW9mIE9iamVjdClhW2JdPUZvcm0uX3Nl
cmlhbGl6ZUZpeChhW2JdKTtlLnB1c2goYik7fXZhciBkPTAsYz10cnVlO2Uuc29y
dCgpLmVhY2goZnVuY3Rpb24oZyl7aWYoZyE9ZCsrKWM9ZmFsc2U7fSk7aWYoYyl7
dmFyIGY9e307ZS5lYWNoKGZ1bmN0aW9uKGcpe2ZbZ109YVtnXTt9KTtyZXR1cm4g
Zjt9ZWxzZSByZXR1cm4gYTt9LHBvc3Q6ZnVuY3Rpb24oZCxiLGMpe3ZhciBhPWRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zvcm0nKTthLmFjdGlvbj1kLnRvU3RyaW5n
KCk7YS5tZXRob2Q9J1BPU1QnO2Euc3R5bGUuZGlzcGxheT0nbm9uZSc7aWYoYylh
LnRhcmdldD1jO2lmKGdlKCdwb3N0X2Zvcm1faWQnKSliLnBvc3RfZm9ybV9pZD0k
KCdwb3N0X2Zvcm1faWQnKS52YWx1ZTtiLmZiX2R0c2c9RW52LmZiX2R0c2c7Yi5w
b3N0X2Zvcm1faWRfc291cmNlPSdkeW5hbWljX3Bvc3QnO0Zvcm0uY3JlYXRlSGlk
ZGVuSW5wdXRzKGIsYSk7RE9NLmdldFJvb3RFbGVtZW50KCkuYXBwZW5kQ2hpbGQo
YSk7YS5zdWJtaXQoKTtyZXR1cm4gZmFsc2U7fSxjcmVhdGVIaWRkZW5JbnB1dHM6
ZnVuY3Rpb24oZyxhLGQsZil7ZD1kfHx7fTt2YXIgYzt2YXIgaD1VUkkuaW1wbG9k
ZVF1ZXJ5KGcsJycsZmFsc2UpO3ZhciBpPWguc3BsaXQoJyYnKTtmb3IodmFyIGI9
MDtiPGkubGVuZ3RoO2IrKylpZihpW2JdKXt2YXIgaj1pW2JdLnNwbGl0KCc9Jyk7
dmFyIGU9alswXTt2YXIgaz1qWzFdO2lmKGU9PT11bmRlZmluZWR8fGs9PT11bmRl
ZmluZWQpY29udGludWU7az1VUkkuZGVjb2RlQ29tcG9uZW50KGspO2lmKGRbZV0m
JmYpe2RbZV0udmFsdWU9azt9ZWxzZXtjPSROKCdpbnB1dCcse3R5cGU6J2hpZGRl
bicsbmFtZTplLHZhbHVlOmt9KTtkW2VdPWM7YS5hcHBlbmRDaGlsZChjKTt9fXJl
dHVybiBkO30sZ2V0Rmlyc3RFbGVtZW50OmZ1bmN0aW9uKGIpe3ZhciBmPVsnaW5w
dXRbdHlwZT0idGV4dCJdJywndGV4dGFyZWEnLCdpbnB1dFt0eXBlPSJwYXNzd29y
ZCJdJywnaW5wdXRbdHlwZT0iYnV0dG9uIl0nLCdpbnB1dFt0eXBlPSJzdWJtaXQi
XSddO3ZhciBlPVtdO2Zvcih2YXIgYz0wO2M8Zi5sZW5ndGgmJmUubGVuZ3RoPT0w
O2MrKyllPURPTS5zY3J5KGIsZltjXSk7aWYoZS5sZW5ndGg+MCl7dmFyIGQ9ZVsw
XTt0cnl7aWYoZWxlbWVudFkoZCk+MCYmZWxlbWVudFgoZCk+MClyZXR1cm4gZDt9
Y2F0Y2goYSl7fX1yZXR1cm4gbnVsbDt9LGZvY3VzRmlyc3Q6ZnVuY3Rpb24oYil7
dmFyIGE9Rm9ybS5nZXRGaXJzdEVsZW1lbnQoYik7aWYoYSl7YS5mb2N1cygpO3Jl
dHVybiB0cnVlO31yZXR1cm4gZmFsc2U7fX0pO3ZhciBET01QYXRoPXtmaW5kTm9k
ZVBhdGg6ZnVuY3Rpb24oYyxlKXtlPWV8fFtdO2lmKGMuaWR8fCFET00uaXNOb2Rl
KGMucGFyZW50Tm9kZSkpcmV0dXJuIHtpZDpjLmlkLHBhdGg6ZS5yZXZlcnNlKCl9
O3ZhciBkPWMucGFyZW50Tm9kZTt2YXIgYj1kLmNoaWxkTm9kZXM7Zm9yKHZhciBh
PTA7YTxiLmxlbmd0aDsrK2EpaWYoYlthXT09PWMpe2UucHVzaChhKTtyZXR1cm4g
RE9NUGF0aC5maW5kTm9kZVBhdGgoZCxlKTt9cmV0dXJuIG51bGw7fSxyZXNvbHZl
Tm9kZVBhdGg6ZnVuY3Rpb24oYSl7dmFyIGI9Z2UoYS5pZCl8fGRvY3VtZW50LmRv
Y3VtZW50RWxlbWVudDtyZXR1cm4gRE9NUGF0aC5fcmVzb2x2ZU5vZGVQYXRoQ2hp
bGRyZW4oYS5wYXRoLGIsMCk7fSxfcmVzb2x2ZU5vZGVQYXRoQ2hpbGRyZW46ZnVu
Y3Rpb24oYyxkLGIpe2lmKGI9PT1jLmxlbmd0aClyZXR1cm4gZDt2YXIgYT1kLmNo
aWxkTm9kZXNbY1tiXV07aWYoIWEpcmV0dXJuIG51bGw7cmV0dXJuIERPTVBhdGgu
X3Jlc29sdmVOb2RlUGF0aENoaWxkcmVuKGMsYSxiKzEpO319OwpmdW5jdGlvbiBE
aWFsb2coYSl7dGhpcy5fc2hvd19sb2FkaW5nPXRydWU7dGhpcy5fbG9hZGluZ193
YXNfc2hvd249ZmFsc2U7dGhpcy5fYXV0b19mb2N1cz10cnVlO3RoaXMuX2ZhZGVf
ZW5hYmxlZD10cnVlO3RoaXMuX29ubG9hZF9oYW5kbGVycz1bXTt0aGlzLl90b3A9
MTI1O3RoaXMuX3VuaXF1ZUlEPSdkaWFsb2dfJytEaWFsb2cuX2dsb2JhbENvdW50
Kys7dGhpcy5fY29udGVudD1udWxsO3RoaXMuX29iaj1udWxsO3RoaXMuX3BvcHVw
PW51bGw7dGhpcy5fb3ZlcmxheT1udWxsO3RoaXMuX3NoaW09bnVsbDt0aGlzLl9o
aWRkZW5fb2JqZWN0cz1bXTt0aGlzLl9jYXVzYWxfZWxlbT1udWxsO2lmKGEpdGhp
cy5fc2V0RnJvbU1vZGVsKGEpO0RpYWxvZy5faW5pdCgpO31NZXRhcHJvdG90eXBl
Lm1ha2VGaW5hbChEaWFsb2cpO2NvcHlfcHJvcGVydGllcyhEaWFsb2cse09LOntu
YW1lOidvaycsbGFiZWw6X3R4KCJBY2VwdGFyIil9LENBTkNFTDp7bmFtZTonY2Fu
Y2VsJyxsYWJlbDpfdHgoIkNhbmNlbGFyIiksY2xhc3NOYW1lOidpbnB1dGF1eCd9
LENMT1NFOntuYW1lOidjbG9zZScsbGFiZWw6X3R4KCJDZXJyYXIiKX0sTkVYVDp7
bmFtZTonbmV4dCcsbGFiZWw6X3R4KCJTaWd1aWVudGUiKX0sU0FWRTp7bmFtZTon
c2F2ZScsbGFiZWw6X3R4KCJHdWFyZGFyIil9LFNVQk1JVDp7bmFtZTonc3VibWl0
JyxsYWJlbDpfdHgoIkFjZXB0YXIiKX0sQ09ORklSTTp7bmFtZTonY29uZmlybScs
bGFiZWw6X3R4KCJDb25maXJtYXIiKX0sREVMRVRFOntuYW1lOidkZWxldGUnLGxh
YmVsOl90eCgiRWxpbWluYXIiKX0sX2dsb2JhbENvdW50OjAsX2JvdHRvbXM6WzBd
LG1heF9ib3R0b206MCxfdXBkYXRlTWF4Qm90dG9tOmZ1bmN0aW9uKCl7RGlhbG9n
Lm1heF9ib3R0b209TWF0aC5tYXguYXBwbHkoTWF0aCxEaWFsb2cuX2JvdHRvbXMp
O319KTtjb3B5X3Byb3BlcnRpZXMoRGlhbG9nLHtPS19BTkRfQ0FOQ0VMOltEaWFs
b2cuT0ssRGlhbG9nLkNBTkNFTF0sX1NUQU5EQVJEX0JVVFRPTlM6W0RpYWxvZy5P
SyxEaWFsb2cuQ0FOQ0VMLERpYWxvZy5DTE9TRSxEaWFsb2cuU0FWRSxEaWFsb2cu
U1VCTUlULERpYWxvZy5DT05GSVJNLERpYWxvZy5ERUxFVEVdLFNIT1VMRF9ISURF
X09CSkVDVFM6IXVhLndpbmRvd3MoKSxfdXNlQ1NTQm9yZGVyczpDU1Muc3VwcG9y
dHNCb3JkZXJSYWRpdXMoKXx8dWEuaWUoKTw9NixTSVpFOntXSURFOjU1NSxTVEFO
REFSRDo0NDV9LF9IQUxPX1dJRFRIOjEwLF9CT1JERVJfV0lEVEg6MSxfUEFERElO
R19XSURUSDoxMCxfUEFHRV9NQVJHSU46NDAsX3N0YWNrOltdLG5ld0J1dHRvbjpm
dW5jdGlvbihlLGQsYixjKXt2YXIgYT17bmFtZTplLGxhYmVsOmR9O2lmKGIpYS5j
bGFzc05hbWU9YjtpZihjKWEuaGFuZGxlcj1jO3JldHVybiBhO30sZ2V0Q3VycmVu
dDpmdW5jdGlvbigpe3ZhciBhPURpYWxvZy5fc3RhY2s7cmV0dXJuIGEubGVuZ3Ro
P2FbYS5sZW5ndGgtMV06bnVsbDt9LGJvb3RzdHJhcDpmdW5jdGlvbihpLGEsZixk
LGUsYyl7YT1hfHx7fTt2YXIgaj1jJiZjLnJlbD09J2RpYWxvZy1waXBlJztjb3B5
X3Byb3BlcnRpZXMoYSxuZXcgVVJJKGkpLmdldFF1ZXJ5RGF0YSgpKTtkPWR8fChm
PydHRVQnOidQT1NUJyk7dmFyIGg9UGFyZW50LmJ5Q2xhc3MoYywnc3RhdF9lbGVt
Jyl8fGM7aWYoaCYmQ1NTLmhhc0NsYXNzKGgsJ2FzeW5jX3NhdmluZycpKXJldHVy
biBmYWxzZTt2YXIgZztpZihqKXtnPW5ldyBBamF4UGlwZVJlcXVlc3QoKTt9ZWxz
ZSBnPW5ldyBBc3luY1JlcXVlc3QoKS5zZXRSZWFkT25seSghIWYpLnNldE1ldGhv
ZChkKS5zZXRSZWxhdGl2ZVRvKGMpLnNldFN0YXR1c0VsZW1lbnQoaCk7Zy5zZXRV
UkkoaSkuc2V0TmVjdGFyTW9kdWxlRGF0YVNhZmUoYykuc2V0RGF0YShhKTt2YXIg
Yj1uZXcgRGlhbG9nKGUpLnNldENhdXNhbEVsZW1lbnQoYykuc2V0QXN5bmMoZyxq
KTtiLnNob3coKTtyZXR1cm4gZmFsc2U7fSxfaW5pdDpmdW5jdGlvbigpe3RoaXMu
X2luaXQ9YmFnb2Zob2xkaW5nO29ubGVhdmVSZWdpc3RlcihEaWFsb2cuX3RlYXJE
b3duLnNoaWVsZChudWxsLGZhbHNlKSk7QXJiaXRlci5zdWJzY3JpYmUoJ3BhZ2Vf
dHJhbnNpdGlvbicsRGlhbG9nLl90ZWFyRG93bi5zaGllbGQobnVsbCx0cnVlKSk7
RXZlbnQubGlzdGVuKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwna2V5ZG93bics
ZnVuY3Rpb24oZXZlbnQpe2lmKEV2ZW50LmdldEtleUNvZGUoZXZlbnQpPT1LRVlT
LkVTQyYmIWV2ZW50LmdldE1vZGlmaWVycygpLmFueSlpZihEaWFsb2cuX2VzY2Fw
ZSgpKWV2ZW50LmtpbGwoKTt9KTtFdmVudC5saXN0ZW4od2luZG93LCdyZXNpemUn
LGZ1bmN0aW9uKGV2ZW50KXt2YXIgYT1EaWFsb2cuZ2V0Q3VycmVudCgpO2EmJmEu
X3Jlc2V0RGlhbG9nT2JqKCk7fSk7fSxfYmFzaWNNdXRhdG9yOmZ1bmN0aW9uKGEp
e3JldHVybiBmdW5jdGlvbihiKXt0aGlzW2FdPWI7dGhpcy5fZGlydHkoKTtyZXR1
cm4gdGhpczt9O30sX2ZpbmRCdXR0b246ZnVuY3Rpb24oYSxjKXtpZihhKWZvcih2
YXIgYj0wO2I8YS5sZW5ndGg7KytiKWlmKGFbYl0ubmFtZT09YylyZXR1cm4gYVti
XTtyZXR1cm4gbnVsbDt9LF90ZWFyRG93bjpmdW5jdGlvbihiKXt2YXIgYz1EaWFs
b2cuX3N0YWNrLmNsb25lKCk7Zm9yKHZhciBhPWMubGVuZ3RoLTE7YT49MDthLS0p
aWYoIShiJiZjW2FdLl9jcm9zc190cmFuc2l0aW9uKSljW2FdLmhpZGUoKTt9LF9l
c2NhcGU6ZnVuY3Rpb24oKXt2YXIgZD1EaWFsb2cuZ2V0Q3VycmVudCgpO2lmKCFk
KXJldHVybiBmYWxzZTt2YXIgZT1kLl9zZW1pX21vZGFsO3ZhciBiPWQuX2J1dHRv
bnM7aWYoIWImJiFlKXJldHVybiBmYWxzZTtpZihlJiYhYil7ZC5oaWRlKCk7cmV0
dXJuIHRydWU7fXZhciBhO3ZhciBjPURpYWxvZy5fZmluZEJ1dHRvbihiLCdjYW5j
ZWwnKTtpZihkLl9jYW5jZWxIYW5kbGVyKXtkLmNhbmNlbCgpO3JldHVybiB0cnVl
O31lbHNlIGlmKGMpe2E9Yzt9ZWxzZSBpZihiLmxlbmd0aD09MSl7YT1iWzBdO31l
bHNlIHJldHVybiBmYWxzZTtkLl9oYW5kbGVCdXR0b24oYSk7cmV0dXJuIHRydWU7
fSxjYWxsX29yX2V2YWw6ZnVuY3Rpb24ob2JqLGZ1bmMsYXJncyl7aWYoIWZ1bmMp
cmV0dXJuIHVuZGVmaW5lZDthcmdzPWFyZ3N8fHt9O2lmKHR5cGVvZihmdW5jKT09
J3N0cmluZycpe3ZhciBwYXJhbXM9a2V5cyhhcmdzKS5qb2luKCcsICcpO2Z1bmM9
ZXZhbCgnKHtmOiBmdW5jdGlvbignK3BhcmFtcysnKSB7ICcrZnVuYysnfX0pJyku
Zjt9cmV0dXJuIGZ1bmMuYXBwbHkob2JqLHZhbHVlcyhhcmdzKSk7fX0pO2NvcHlf
cHJvcGVydGllcyhEaWFsb2cucHJvdG90eXBlLHtfY3Jvc3NfdHJhbnNpdGlvbjpm
YWxzZSxfZml4ZWQ6ZmFsc2Usc2hvdzpmdW5jdGlvbihhKXt0aGlzLl9zaG93aW5n
PXRydWU7aWYoYSl7aWYodGhpcy5fZmFkZV9lbmFibGVkKUNTUy5zZXRTdHlsZSh0
aGlzLl9vYmosJ29wYWNpdHknLDEpO3RoaXMuX29iai5zdHlsZS5kaXNwbGF5PScn
O31lbHNlIHRoaXMuX2RpcnR5KCk7cmV0dXJuIHRoaXM7fSxzaG93TG9hZGluZzpm
dW5jdGlvbigpe3RoaXMuX2xvYWRpbmdfd2FzX3Nob3duPXRydWU7dGhpcy5fcmVu
ZGVyRGlhbG9nKCROKCdkaXYnLHtjbGFzc05hbWU6J2RpYWxvZ19sb2FkaW5nJ30s
X3R4KCJDYXJnYW5kby4uLiIpKSk7cmV0dXJuIHRoaXM7fSxoaWRlOmZ1bmN0aW9u
KGEpe2lmKCF0aGlzLl9zaG93aW5nKXJldHVybiB0aGlzO3RoaXMuX3Nob3dpbmc9
ZmFsc2U7aWYodGhpcy5fYXV0b2hpZGVfdGltZW91dCl7Y2xlYXJUaW1lb3V0KHRo
aXMuX2F1dG9oaWRlX3RpbWVvdXQpO3RoaXMuX2F1dG9oaWRlX3RpbWVvdXQ9bnVs
bDt9aWYodGhpcy5fZmFkZV9lbmFibGVkJiZEaWFsb2cuX3N0YWNrLmxlbmd0aDw9
MSl7dGhpcy5fZmFkZU91dChhKTt9ZWxzZSB0aGlzLl9oaWRlKGEpO3JldHVybiB0
aGlzO30sY2FuY2VsOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX2NhbmNlbEhhbmRsZXJ8
fHRoaXMuX2NhbmNlbEhhbmRsZXIoKSE9PWZhbHNlKXRoaXMuaGlkZSgpO30sZ2V0
Um9vdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vYmo7fSxnZXRCb2R5OmZ1bmN0
aW9uKCl7cmV0dXJuIERPTS5zY3J5KHRoaXMuX29iaiwnZGl2LmRpYWxvZ19ib2R5
JylbMF07fSxnZXRCdXR0b25FbGVtZW50OmZ1bmN0aW9uKGEpe2lmKHR5cGVvZiBh
PT0nc3RyaW5nJylhPURpYWxvZy5fZmluZEJ1dHRvbih0aGlzLl9idXR0b25zLGEp
O2lmKCFhfHwhYS5uYW1lKXJldHVybiBudWxsO3ZhciBiPURPTS5zY3J5KHRoaXMu
X3BvcHVwLCdpbnB1dCcpO3ZhciBjPWZ1bmN0aW9uKGQpe3JldHVybiBkLm5hbWU9
PWEubmFtZTt9O3JldHVybiBiLmZpbHRlcihjKVswXXx8bnVsbDt9LGdldENvbnRl
bnROb2RlOmZ1bmN0aW9uKCl7cmV0dXJuIERPTS5maW5kKHRoaXMuX2NvbnRlbnQs
J2Rpdi5kaWFsb2dfY29udGVudCcpO30sZ2V0Rm9ybURhdGE6ZnVuY3Rpb24oKXty
ZXR1cm4gRm9ybS5zZXJpYWxpemUodGhpcy5nZXRDb250ZW50Tm9kZSgpKTt9LHNl
dEFsbG93Q3Jvc3NQYWdlVHJhbnNpdGlvbjpmdW5jdGlvbihhKXt0aGlzLl9jcm9z
c190cmFuc2l0aW9uPWE7cmV0dXJuIHRoaXM7fSxzZXRTaG93aW5nOmZ1bmN0aW9u
KCl7dGhpcy5zaG93KCk7cmV0dXJuIHRoaXM7fSxzZXRIaWRpbmc6ZnVuY3Rpb24o
KXt0aGlzLmhpZGUoKTtyZXR1cm4gdGhpczt9LHNldFRpdGxlOkRpYWxvZy5fYmFz
aWNNdXRhdG9yKCdfdGl0bGUnKSxzZXRCb2R5OkRpYWxvZy5fYmFzaWNNdXRhdG9y
KCdfYm9keScpLHNldEV4dHJhRGF0YTpEaWFsb2cuX2Jhc2ljTXV0YXRvcignX2V4
dHJhX2RhdGEnKSxzZXRSZXR1cm5EYXRhOkRpYWxvZy5fYmFzaWNNdXRhdG9yKCdf
cmV0dXJuX2RhdGEnKSxzZXRTaG93TG9hZGluZzpEaWFsb2cuX2Jhc2ljTXV0YXRv
cignX3Nob3dfbG9hZGluZycpLHNldEZ1bGxCbGVlZDpEaWFsb2cuX2Jhc2ljTXV0
YXRvcignX2Z1bGxfYmxlZWQnKSxzZXRJbW1lZGlhdGVSZW5kZXJpbmc6ZnVuY3Rp
b24oYSl7dGhpcy5faW1tZWRpYXRlX3JlbmRlcmluZz1hO3JldHVybiB0aGlzO30s
c2V0Q2F1c2FsRWxlbWVudDpmdW5jdGlvbihhKXt0aGlzLl9jYXVzYWxfZWxlbT1h
O3JldHVybiB0aGlzO30sc2V0VXNlckRhdGE6RGlhbG9nLl9iYXNpY011dGF0b3Io
J191c2VyX2RhdGEnKSxnZXRVc2VyRGF0YTpmdW5jdGlvbigpe3JldHVybiB0aGlz
Ll91c2VyX2RhdGE7fSxzZXRBdXRvaGlkZTpmdW5jdGlvbihhKXtpZihhKXtpZih0
aGlzLl9zaG93aW5nKXt0aGlzLl9hdXRvaGlkZV90aW1lb3V0PXNldFRpbWVvdXQo
dGhpcy5oaWRlLnNoaWVsZCh0aGlzKSxhKTt9ZWxzZSB0aGlzLl9hdXRvaGlkZT1h
O31lbHNle3RoaXMuX2F1dG9oaWRlPW51bGw7aWYodGhpcy5fYXV0b2hpZGVfdGlt
ZW91dCl7Y2xlYXJUaW1lb3V0KHRoaXMuX2F1dG9oaWRlX3RpbWVvdXQpO3RoaXMu
X2F1dG9oaWRlX3RpbWVvdXQ9bnVsbDt9fXJldHVybiB0aGlzO30sc2V0U3VtbWFy
eTpEaWFsb2cuX2Jhc2ljTXV0YXRvcignX3N1bW1hcnknKSxzZXRCdXR0b25zOmZ1
bmN0aW9uKGEpe3ZhciBjO2lmKCEoYSBpbnN0YW5jZW9mIEFycmF5KSl7Yz0kQShh
cmd1bWVudHMpO31lbHNlIGM9YTtmb3IodmFyIGQ9MDtkPGMubGVuZ3RoOysrZClp
Zih0eXBlb2YgY1tkXT09J3N0cmluZycpe3ZhciBiPURpYWxvZy5fZmluZEJ1dHRv
bihEaWFsb2cuX1NUQU5EQVJEX0JVVFRPTlMsY1tkXSk7Y1tkXT1iO310aGlzLl9i
dXR0b25zPWM7dGhpcy5fdXBkYXRlQnV0dG9ucygpO3JldHVybiB0aGlzO30sc2V0
QnV0dG9uc01lc3NhZ2U6RGlhbG9nLl9iYXNpY011dGF0b3IoJ19idXR0b25zX21l
c3NhZ2UnKSxzZXRDbGlja0J1dHRvbk9uRW50ZXI6ZnVuY3Rpb24oYixhKXt0aGlz
Ll9jbGlja0J1dHRvbk9uRW50ZXI9YTt0aGlzLl9jbGlja0J1dHRvbk9uRW50ZXJJ
bnB1dE5hbWU9YjtyZXR1cm4gdGhpczt9LHNldFN0YWNrYWJsZTpmdW5jdGlvbihi
LGEpe3RoaXMuX2lzX3N0YWNrYWJsZT1iO3RoaXMuX3Nob3duX3doaWxlX3N0YWNr
ZWQ9YiYmYTtyZXR1cm4gdGhpczt9LHNldEhhbmRsZXI6ZnVuY3Rpb24oYSl7dGhp
cy5faGFuZGxlcj1hO3JldHVybiB0aGlzO30sc2V0Q2FuY2VsSGFuZGxlcjpmdW5j
dGlvbihhKXt0aGlzLl9jYW5jZWxIYW5kbGVyPURpYWxvZy5jYWxsX29yX2V2YWwu
YmluZChudWxsLHRoaXMsYSk7cmV0dXJuIHRoaXM7fSxzZXRDbG9zZUhhbmRsZXI6
ZnVuY3Rpb24oYSl7dGhpcy5fY2xvc2VfaGFuZGxlcj1EaWFsb2cuY2FsbF9vcl9l
dmFsLmJpbmQobnVsbCx0aGlzLGEpO3JldHVybiB0aGlzO30sY2xlYXJIYW5kbGVy
OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0SGFuZGxlcihudWxsKTt9LHNldFBv
c3RVUkk6ZnVuY3Rpb24oYixhKXtpZihhPT09dW5kZWZpbmVkKWE9dHJ1ZTtpZihh
KXt0aGlzLnNldEhhbmRsZXIodGhpcy5fc3VibWl0Rm9ybS5iaW5kKHRoaXMsJ1BP
U1QnLGIpKTt9ZWxzZSB0aGlzLnNldEhhbmRsZXIoZnVuY3Rpb24oKXtGb3JtLnBv
c3QoYix0aGlzLmdldEZvcm1EYXRhKCkpO3RoaXMuaGlkZSgpO30uYmluZCh0aGlz
KSk7cmV0dXJuIHRoaXM7fSxzZXRHZXRVUkk6ZnVuY3Rpb24oYSl7dGhpcy5zZXRI
YW5kbGVyKHRoaXMuX3N1Ym1pdEZvcm0uYmluZCh0aGlzLCdHRVQnLGEpKTtyZXR1
cm4gdGhpczt9LHNldE1vZGFsOmZ1bmN0aW9uKGEpe3RoaXMuX21vZGFsPWE7cmV0
dXJuIHRoaXM7fSxzZXRTZW1pTW9kYWw6ZnVuY3Rpb24oYSl7aWYoYSl0aGlzLnNl
dE1vZGFsKHRydWUpO3RoaXMuX3NlbWlfbW9kYWw9YTtyZXR1cm4gdGhpczt9LHNl
dFdpZGVEaWFsb2c6RGlhbG9nLl9iYXNpY011dGF0b3IoJ193aWRlX2RpYWxvZycp
LHNldENvbnRlbnRXaWR0aDpEaWFsb2cuX2Jhc2ljTXV0YXRvcignX2NvbnRlbnRf
d2lkdGgnKSxzZXRUaXRsZUxvYWRpbmc6ZnVuY3Rpb24oYil7aWYoYj09PXVuZGVm
aW5lZCliPXRydWU7dmFyIGE9RE9NLmZpbmQodGhpcy5fcG9wdXAsJ2gyLmRpYWxv
Z190aXRsZScpO2lmKGEpQ1NTLmNvbmRpdGlvbkNsYXNzKGEsJ2xvYWRpbmcnLGIp
O3JldHVybiB0aGlzO30sc2V0U2VjdXJlOkRpYWxvZy5fYmFzaWNNdXRhdG9yKCdf
c2VjdXJlJyksc2V0Q2xhc3NOYW1lOkRpYWxvZy5fYmFzaWNNdXRhdG9yKCdfY2xh
c3NfbmFtZScpLHNldEZhZGVFbmFibGVkOkRpYWxvZy5fYmFzaWNNdXRhdG9yKCdf
ZmFkZV9lbmFibGVkJyksc2V0Rm9vdGVyOkRpYWxvZy5fYmFzaWNNdXRhdG9yKCdf
Zm9vdGVyJyksc2V0QXV0b0ZvY3VzOkRpYWxvZy5fYmFzaWNNdXRhdG9yKCdfYXV0
b19mb2N1cycpLHNldFRvcDpEaWFsb2cuX2Jhc2ljTXV0YXRvcignX3RvcCcpLHNl
dEZpeGVkOkRpYWxvZy5fYmFzaWNNdXRhdG9yKCdfZml4ZWQnKSxvbmxvYWRSZWdp
c3RlcjpmdW5jdGlvbihhKXskQShhKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2lmKHR5
cGVvZiBiPT0nc3RyaW5nJyliPW5ldyBGdW5jdGlvbihiKTt0aGlzLl9vbmxvYWRf
aGFuZGxlcnMucHVzaChiLmJpbmQodGhpcykpO30uYmluZCh0aGlzKSk7cmV0dXJu
IHRoaXM7fSxzZXRBc3luY1VSTDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5zZXRB
c3luYyhuZXcgQXN5bmNSZXF1ZXN0KGEpKTt9LHNldEFzeW5jOmZ1bmN0aW9uKGEs
aSl7dmFyIGM9ZnVuY3Rpb24obSl7aWYodGhpcy5fYXN5bmNfcmVxdWVzdCE9YSly
ZXR1cm47dGhpcy5fYXN5bmNfcmVxdWVzdD1udWxsO3ZhciBsPW0uZ2V0UGF5bG9h
ZCgpO3ZhciBqPWw7dmFyIGs9ZnVuY3Rpb24oKXtpZih0eXBlb2Ygaj09J3N0cmlu
Zycpe3RoaXMuc2V0Qm9keShqKTt9ZWxzZSB0aGlzLl9zZXRGcm9tTW9kZWwoaik7
dGhpcy5fdXBkYXRlKHRydWUpO30uYmluZCh0aGlzKTtpZihpKXtqPWwuZGlhbG9n
O0Jvb3Rsb2FkZXIuc2V0UmVzb3VyY2VNYXAobC5yZXNvdXJjZV9tYXApO0Jvb3Rs
b2FkZXIubG9hZFJlc291cmNlcyhsLmNzcyxrKTt9ZWxzZSBrKCk7fS5iaW5kKHRo
aXMpO3ZhciBiPWEuZ2V0RGF0YSgpO2IuX19kPTE7YS5zZXREYXRhKGIpO3ZhciBk
PWJpbmQodGhpcywnaGlkZScpO3ZhciBoO2lmKGkpe2Euc2V0Rmlyc3RSZXNwb25z
ZUhhbmRsZXIoYyk7aD1hLmdldEFzeW5jUmVxdWVzdCgpO31lbHNle3ZhciBmPWEu
Z2V0SGFuZGxlcigpfHxiYWdvZmhvbGRpbmc7YS5zZXRIYW5kbGVyKGZ1bmN0aW9u
KGope2Yoaik7YyhqKTt9KTtoPWE7fXZhciBlPWguZ2V0RXJyb3JIYW5kbGVyKCl8
fGJhZ29maG9sZGluZzt2YXIgZz1oLmdldFRyYW5zcG9ydEVycm9ySGFuZGxlcigp
fHxiYWdvZmhvbGRpbmc7aC5zZXRBbGxvd0Nyb3NzUGFnZVRyYW5zaXRpb24odGhp
cy5fY3Jvc3NfdHJhbnNpdGlvbikuc2V0RXJyb3JIYW5kbGVyKGZ1bmN0aW9uKGop
e2QodHJ1ZSk7ZShqKTt9KS5zZXRUcmFuc3BvcnRFcnJvckhhbmRsZXIoZnVuY3Rp
b24oail7ZCh0cnVlKTtnKGopO30pO2Euc2VuZCgpO3RoaXMuX2FzeW5jX3JlcXVl
c3Q9YTt0aGlzLl9kaXJ0eSgpO3JldHVybiB0aGlzO30sX2RpcnR5OmZ1bmN0aW9u
KCl7aWYoIXRoaXMuX2lzX2RpcnR5KXt0aGlzLl9pc19kaXJ0eT10cnVlO2lmKHRo
aXMuX2ltbWVkaWF0ZV9yZW5kZXJpbmcpe3RoaXMuX3VwZGF0ZSgpO31lbHNlIGJp
bmQodGhpcywnX3VwZGF0ZScsZmFsc2UpLmRlZmVyKCk7fX0sX2Zvcm1hdDpmdW5j
dGlvbihhKXtpZih0eXBlb2YgYT09J3N0cmluZycpe2E9SFRNTChhKTt9ZWxzZSBh
PUhUTUwucmVwbGFjZUpTT05XcmFwcGVyKGEpO2lmKGEgaW5zdGFuY2VvZiBIVE1M
KWEuc2V0RGVmZXJyZWQodHJ1ZSk7cmV0dXJuIGE7fSxfdXBkYXRlOmZ1bmN0aW9u
KGQpe2lmKCF0aGlzLl9pc19kaXJ0eSYmZCE9PXRydWUpcmV0dXJuO3RoaXMuX2lz
X2RpcnR5PWZhbHNlO2lmKCF0aGlzLl9zaG93aW5nKXJldHVybjtpZih0aGlzLl9h
dXRvaGlkZSYmIXRoaXMuX2FzeW5jX3JlcXVlc3QmJiF0aGlzLl9hdXRvaGlkZV90
aW1lb3V0KXRoaXMuX2F1dG9oaWRlX3RpbWVvdXQ9c2V0VGltZW91dChiaW5kKHRo
aXMsJ2hpZGUnKSx0aGlzLl9hdXRvaGlkZSk7aWYoIXRoaXMuX2FzeW5jX3JlcXVl
c3R8fCF0aGlzLl9zaG93X2xvYWRpbmcpe2lmKHRoaXMuX2xvYWRpbmdfd2FzX3No
b3duPT09dHJ1ZSl7dGhpcy5faGlkZSh0cnVlKTt0aGlzLl9sb2FkaW5nX3dhc19z
aG93bj1mYWxzZTt9dmFyIGI9W107aWYodGhpcy5fc3VtbWFyeSliLnB1c2goJE4o
J2Rpdicse2NsYXNzTmFtZTonZGlhbG9nX3N1bW1hcnknfSx0aGlzLl9mb3JtYXQo
dGhpcy5fc3VtbWFyeSkpKTtiLnB1c2goJE4oJ2Rpdicse2NsYXNzTmFtZTonZGlh
bG9nX2JvZHknfSx0aGlzLl9mb3JtYXQodGhpcy5fYm9keSkpKTt2YXIgYT10aGlz
Ll9nZXRCdXR0b25Db250ZW50KCk7aWYoYS5sZW5ndGgpYi5wdXNoKCROKCdkaXYn
LHtjbGFzc05hbWU6J2RpYWxvZ19idXR0b25zIGNsZWFyZml4J30sYSkpO2lmKHRo
aXMuX2Zvb3RlciliLnB1c2goJE4oJ2Rpdicse2NsYXNzTmFtZTonZGlhbG9nX2Zv
b3Rlcid9LHRoaXMuX2Zvcm1hdCh0aGlzLl9mb290ZXIpKSk7Yj0kTignZGl2Jyx7
Y2xhc3NOYW1lOidkaWFsb2dfY29udGVudCd9LGIpO2lmKHRoaXMuX3RpdGxlKXt2
YXIgZz0kTignc3BhbicsdGhpcy5fZm9ybWF0KHRoaXMuX3RpdGxlKSk7dmFyIGg9
JE4oJ2gyJyx7Y2xhc3NOYW1lOidkaWFsb2dfdGl0bGUnLGlkOid0aXRsZV8nK3Ro
aXMuX3VuaXF1ZUlEfSxnKTtDU1MuY29uZGl0aW9uQ2xhc3MoaCwnc2VjdXJlJyx0
aGlzLl9zZWN1cmUpO2I9W2gsYl07fWVsc2V7Q1NTLmFkZENsYXNzKGIsJ2RpYWxv
Z19jb250ZW50X3RpdGxlbGVzcycpO2I9W2JdO310aGlzLl9yZW5kZXJEaWFsb2co
Yik7Q1NTLmNvbmRpdGlvbkNsYXNzKHRoaXMuZ2V0Um9vdCgpLCdvbWl0RGlhbG9n
Rm9vdGVyJywhYS5sZW5ndGgpO2lmKHRoaXMuX2NsaWNrQnV0dG9uT25FbnRlcklu
cHV0TmFtZSYmdGhpcy5fY2xpY2tCdXR0b25PbkVudGVyJiZnZSh0aGlzLl9jbGlj
a0J1dHRvbk9uRW50ZXJJbnB1dE5hbWUpKUV2ZW50Lmxpc3RlbihnZSh0aGlzLl9j
bGlja0J1dHRvbk9uRW50ZXJJbnB1dE5hbWUpLCdrZXlwcmVzcycsZnVuY3Rpb24o
aSl7aWYoRXZlbnQuZ2V0S2V5Q29kZShpKT09S0VZUy5SRVRVUk4pdGhpcy5faGFu
ZGxlQnV0dG9uKHRoaXMuX2NsaWNrQnV0dG9uT25FbnRlcik7cmV0dXJuIHRydWU7
fS5iaW5kKHRoaXMpKTtmb3IodmFyIGY9MDtmPHRoaXMuX29ubG9hZF9oYW5kbGVy
cy5sZW5ndGg7KytmKXRyeXt0aGlzLl9vbmxvYWRfaGFuZGxlcnNbZl0oKTt9Y2F0
Y2goZSl7fXRoaXMuX29ubG9hZF9oYW5kbGVycz1bXTt9ZWxzZSB0aGlzLnNob3dM
b2FkaW5nKCk7dmFyIGM9MipEaWFsb2cuX0JPUkRFUl9XSURUSDtpZihEaWFsb2cu
X3VzZUNTU0JvcmRlcnMpYys9MipEaWFsb2cuX0hBTE9fV0lEVEg7aWYodGhpcy5f
Y29udGVudF93aWR0aCl7Yys9dGhpcy5fY29udGVudF93aWR0aDtpZighdGhpcy5f
ZnVsbF9ibGVlZCljKz0yKkRpYWxvZy5fUEFERElOR19XSURUSDt9ZWxzZSBpZih0
aGlzLl93aWRlX2RpYWxvZyl7Yys9RGlhbG9nLlNJWkUuV0lERTt9ZWxzZSBjKz1E
aWFsb2cuU0laRS5TVEFOREFSRDt0aGlzLl9wb3B1cC5zdHlsZS53aWR0aD1jKydw
eCc7fSxfdXBkYXRlQnV0dG9uczpmdW5jdGlvbigpe2lmKCF0aGlzLl9zaG93aW5n
KXJldHVybjt2YXIgYj10aGlzLl9nZXRCdXR0b25Db250ZW50KCk7dmFyIGM9bnVs
bDtpZighdGhpcy5nZXRSb290KCkpdGhpcy5fYnVpbGREaWFsb2coKTtDU1MuY29u
ZGl0aW9uQ2xhc3ModGhpcy5nZXRSb290KCksJ29taXREaWFsb2dGb290ZXInLCFi
Lmxlbmd0aCk7aWYoYi5sZW5ndGgpYz0kTignZGl2Jyx7Y2xhc3NOYW1lOidkaWFs
b2dfYnV0dG9ucyBjbGVhcmZpeCd9LGIpO3ZhciBkPURPTS5zY3J5KHRoaXMuX2Nv
bnRlbnQsJ2Rpdi5kaWFsb2dfYnV0dG9ucycpWzBdfHxudWxsO2lmKCFkKXtpZigh
YylyZXR1cm47dmFyIGE9dGhpcy5nZXRCb2R5KCk7aWYoYSlET00uaW5zZXJ0QWZ0
ZXIoYSxjKTt9ZWxzZSBpZihjKXtET00ucmVwbGFjZShkLGMpO31lbHNlIERPTS5y
ZW1vdmUoZCk7fSxfZ2V0QnV0dG9uQ29udGVudDpmdW5jdGlvbigpe3ZhciBjPVtd
O2lmKCh0aGlzLl9idXR0b25zJiZ0aGlzLl9idXR0b25zLmxlbmd0aD4wKXx8dGhp
cy5fYnV0dG9uc19tZXNzYWdlKXtpZih0aGlzLl9idXR0b25zX21lc3NhZ2UpYy5w
dXNoKCROKCdkaXYnLHtjbGFzc05hbWU6J2RpYWxvZ19idXR0b25zX21zZyd9LHRo
aXMuX2Zvcm1hdCh0aGlzLl9idXR0b25zX21lc3NhZ2UpKSk7aWYodGhpcy5fYnV0
dG9ucylmb3IodmFyIGY9MDtmPHRoaXMuX2J1dHRvbnMubGVuZ3RoO2YrKyl7dmFy
IGI9dGhpcy5fYnV0dG9uc1tmXTt2YXIgZD0kTignaW5wdXQnLHt0eXBlOididXR0
b24nLG5hbWU6Yi5uYW1lfHwnJyx2YWx1ZTpiLmxhYmVsfSk7dmFyIGU9JE4oJ2xh
YmVsJyx7Y2xhc3NOYW1lOid1aUJ1dHRvbiB1aUJ1dHRvbkxhcmdlIHVpQnV0dG9u
Q29uZmlybSd9LGQpO2lmKGIuY2xhc3NOYW1lKXtiLmNsYXNzTmFtZS5zcGxpdCgv
XHMrLykuZWFjaChmdW5jdGlvbihnKXtDU1MuYWRkQ2xhc3MoZSxnKTt9KTtpZihD
U1MuaGFzQ2xhc3MoZSwnaW5wdXRhdXgnKSl7Q1NTLnJlbW92ZUNsYXNzKGUsJ2lu
cHV0YXV4Jyk7Q1NTLnJlbW92ZUNsYXNzKGUsJ3VpQnV0dG9uQ29uZmlybScpO31p
ZihDU1MuaGFzQ2xhc3MoZSwndWlCdXR0b25TcGVjaWFsJykpQ1NTLnJlbW92ZUNs
YXNzKGUsJ3VpQnV0dG9uQ29uZmlybScpO31pZihiLmljb24pRE9NLnByZXBlbmRD
b250ZW50KGUsJE4oJ2ltZycse3NyYzpiLmljb24sY2xhc3NOYW1lOidpbWcgbXJz
J30pKTtFdmVudC5saXN0ZW4oZCwnY2xpY2snLHRoaXMuX2hhbmRsZUJ1dHRvbi5i
aW5kKHRoaXMsYi5uYW1lKSk7Zm9yKHZhciBhIGluIGIpaWYoYS5pbmRleE9mKCdk
YXRhLScpPT09MCYmYS5sZW5ndGg+NSlkLnNldEF0dHJpYnV0ZShhLGJbYV0pO2Mu
cHVzaChlKTt9fXJldHVybiBjO30sX3JlbmRlckRpYWxvZzpmdW5jdGlvbihiKXtp
ZighdGhpcy5fb2JqKXRoaXMuX2J1aWxkRGlhbG9nKCk7aWYodGhpcy5fY2xhc3Nf
bmFtZSlDU1MuYWRkQ2xhc3ModGhpcy5fb2JqLHRoaXMuX2NsYXNzX25hbWUpO0NT
Uy5jb25kaXRpb25DbGFzcyh0aGlzLl9vYmosJ2Z1bGxfYmxlZWQnLHRoaXMuX2Z1
bGxfYmxlZWQpO2lmKHR5cGVvZiBiPT0nc3RyaW5nJyliPUhUTUwoYikuc2V0RGVm
ZXJyZWQodGhpcy5faW1tZWRpYXRlX3JlbmRlcmluZyE9PXRydWUpO0RPTS5zZXRD
b250ZW50KHRoaXMuX2NvbnRlbnQsYik7dGhpcy5fc2hvd0RpYWxvZygpO2lmKHRo
aXMuX2F1dG9fZm9jdXMpRm9ybS5mb2N1c0ZpcnN0LmJpbmQodGhpcyx0aGlzLl9j
b250ZW50KS5kZWZlcigpO3ZhciBhPVZlY3RvcjIuZ2V0RWxlbWVudERpbWVuc2lv
bnModGhpcy5fY29udGVudCkueStWZWN0b3IyLmdldEVsZW1lbnRQb3NpdGlvbih0
aGlzLl9jb250ZW50KS55O0RpYWxvZy5fYm90dG9tcy5wdXNoKGEpO3RoaXMuX2Jv
dHRvbT1hO0RpYWxvZy5fdXBkYXRlTWF4Qm90dG9tKCk7cmV0dXJuIHRoaXM7fSxf
YnVpbGREaWFsb2c6ZnVuY3Rpb24oKXt0aGlzLl9vYmo9JE4oJ2Rpdicse2NsYXNz
TmFtZTonZ2VuZXJpY19kaWFsb2cnLHRhYkluZGV4OicwJ30pO3RoaXMuX29iai5z
ZXRBdHRyaWJ1dGUoJ3JvbGUnLCdhbGVydGRpYWxvZycpO3RoaXMuX29iai5zZXRB
dHRyaWJ1dGUoJ2FyaWEtbGFiZWxsZWRieScsJ3RpdGxlXycrdGhpcy5fdW5pcXVl
SUQpO3RoaXMuX29iai5zdHlsZS5kaXNwbGF5PSdub25lJztkb2N1bWVudC5ib2R5
LmFwcGVuZENoaWxkKHRoaXMuX29iaik7aWYoIXRoaXMuX3BvcHVwKXRoaXMuX3Bv
cHVwPSROKCdkaXYnLHtjbGFzc05hbWU6J2dlbmVyaWNfZGlhbG9nX3BvcHVwJ30p
O3RoaXMuX3BvcHVwLnN0eWxlLmxlZnQ9dGhpcy5fcG9wdXAuc3R5bGUudG9wPScn
O3RoaXMuX29iai5hcHBlbmRDaGlsZCh0aGlzLl9wb3B1cCk7aWYodWEuaWUoKTw3
JiYhdGhpcy5fc2hpbSlCb290bG9hZGVyLmxvYWRDb21wb25lbnRzKCdpZnJhbWUt
c2hpbScsZnVuY3Rpb24oKXt0aGlzLl9zaGltPW5ldyBJZnJhbWVTaGltKHRoaXMu
X3BvcHVwKTt9KTt0aGlzLl9idWlsZERpYWxvZ0NvbnRlbnQoKTt9LF9zaG93RGlh
bG9nOmZ1bmN0aW9uKCl7aWYodGhpcy5fbW9kYWwpe3RoaXMuX2J1aWxkT3Zlcmxh
eSgpO31lbHNlIGlmKHRoaXMuX292ZXJsYXkpe0RPTS5yZW1vdmUodGhpcy5fb3Zl
cmxheSk7dGhpcy5fb3ZlcmxheT1udWxsO31pZih0aGlzLl9vYmomJnRoaXMuX29i
ai5zdHlsZS5kaXNwbGF5KXt0aGlzLl9vYmouc3R5bGUudmlzaWJpbGl0eT0naGlk
ZGVuJzt0aGlzLl9vYmouc3R5bGUuZGlzcGxheT0nJzt0aGlzLnJlc2V0RGlhbG9n
UG9zaXRpb24oKTt0aGlzLl9vYmouc3R5bGUudmlzaWJpbGl0eT0nJzt0aGlzLl9v
YmouZGlhbG9nPXRoaXM7fWVsc2UgdGhpcy5yZXNldERpYWxvZ1Bvc2l0aW9uKCk7
Y2xlYXJJbnRlcnZhbCh0aGlzLmFjdGl2ZV9oaWRpbmcpO3RoaXMuYWN0aXZlX2hp
ZGluZz1zZXRJbnRlcnZhbCh0aGlzLl9hY3RpdmVSZXNpemUuYmluZCh0aGlzKSw1
MDApO0FyYml0ZXIuaW5mb3JtKCduZXdfbGF5ZXInKTt2YXIgYz1EaWFsb2cuX3N0
YWNrO2lmKGMubGVuZ3RoKXt2YXIgYT1jW2MubGVuZ3RoLTFdO2lmKGEhPXRoaXMm
JighYS5faXNfc3RhY2thYmxlfHwoYS5fc2hvd19sb2FkaW5nJiZhLl9sb2FkaW5n
X3dhc19zaG93bikpKWEuX2hpZGUoKTtmb3IodmFyIGI9Yy5sZW5ndGgtMTtiPj0w
O2ItLSlpZihjW2JdPT10aGlzKXtjLnNwbGljZShiLDEpO31lbHNlIGlmKCFjW2Jd
Ll9zaG93bl93aGlsZV9zdGFja2VkKWNbYl0uX2hpZGUodHJ1ZSk7fWMucHVzaCh0
aGlzKTtyZXR1cm4gdGhpczt9LF91cGRhdGVTaGltOmZ1bmN0aW9uKCl7cmV0dXJu
IHRoaXMuX3NoaW0mJnRoaXMuX3NoaW0uc2hvdygpO30sX2FjdGl2ZVJlc2l6ZTpm
dW5jdGlvbigpe2lmKHRoaXMubGFzdF9vZmZzZXRfaGVpZ2h0IT10aGlzLl9jb250
ZW50Lm9mZnNldEhlaWdodCl7dGhpcy5sYXN0X29mZnNldF9oZWlnaHQ9dGhpcy5f
Y29udGVudC5vZmZzZXRIZWlnaHQ7dGhpcy5fdXBkYXRlU2hpbSgpO319LF9idWls
ZERpYWxvZ0NvbnRlbnQ6ZnVuY3Rpb24oKXtDU1MuYWRkQ2xhc3ModGhpcy5fb2Jq
LCdwb3BfZGlhbG9nJyk7aWYoaW50bF9sb2NhbGVfaXNfcnRsKCkpQ1NTLmFkZENs
YXNzKHRoaXMuX29iaiwncG9wX2RpYWxvZ19ydGwnKTt2YXIgYTtpZihEaWFsb2cu
X3VzZUNTU0JvcmRlcnMpe2E9JzxkaXYgY2xhc3M9InBvcF9jb250YWluZXJfYWR2
YW5jZWQiPicrJzxkaXYgY2xhc3M9InBvcF9jb250ZW50IiBpZD0icG9wX2NvbnRl
bnQiPjwvZGl2PicrJzwvZGl2Pic7fWVsc2UgYT0nPGRpdiBjbGFzcz0icG9wX2Nv
bnRhaW5lciI+JysnPGRpdiBjbGFzcz0icG9wX3ZlcnRpY2Fsc2xhYiI+PC9kaXY+
JysnPGRpdiBjbGFzcz0icG9wX2hvcml6b250YWxzbGFiIj48L2Rpdj4nKyc8ZGl2
IGNsYXNzPSJwb3BfdG9wbGVmdCI+PC9kaXY+JysnPGRpdiBjbGFzcz0icG9wX3Rv
cHJpZ2h0Ij48L2Rpdj4nKyc8ZGl2IGNsYXNzPSJwb3BfYm90dG9tcmlnaHQiPjwv
ZGl2PicrJzxkaXYgY2xhc3M9InBvcF9ib3R0b21sZWZ0Ij48L2Rpdj4nKyc8ZGl2
IGNsYXNzPSJwb3BfY29udGVudCBwb3BfY29udGVudF9vbGQiIGlkPSJwb3BfY29u
dGVudCI+PC9kaXY+JysnPC9kaXY+JztET00uc2V0Q29udGVudCh0aGlzLl9wb3B1
cCxIVE1MKGEpKTt0aGlzLl9mcmFtZT1ET00uZmluZCh0aGlzLl9wb3B1cCwnZGl2
LnBvcF9jb250ZW50Jyk7dGhpcy5fY29udGVudD10aGlzLl9mcmFtZTt9LF9idWls
ZE92ZXJsYXk6ZnVuY3Rpb24oKXtpZih0aGlzLl9vdmVybGF5KXJldHVybjt0aGlz
Ll9vdmVybGF5PSROKCdkaXYnLHtjbGFzc05hbWU6J292ZXJsYXknfSk7aWYodGhp
cy5fc2VtaV9tb2RhbClFdmVudC5saXN0ZW4odGhpcy5fb2JqLCdjbGljaycsZnVu
Y3Rpb24oYSl7aWYoIURPTS5jb250YWlucyh0aGlzLl9wb3B1cCxldmVudC5nZXRU
YXJnZXQoKSkpdGhpcy5oaWRlKCk7fS5iaW5kKHRoaXMpKTtpZih1YS5pZSgpPDcp
dGhpcy5fb3ZlcmxheS5zdHlsZS5oZWlnaHQ9VmVjdG9yMi5nZXREb2N1bWVudERp
bWVuc2lvbnMoKS55KydweCc7dGhpcy5fb2JqLmluc2VydEJlZm9yZSh0aGlzLl9v
dmVybGF5LHRoaXMuX29iai5maXJzdENoaWxkKTt9LHJlc2V0RGlhbG9nUG9zaXRp
b246ZnVuY3Rpb24oKXtpZighdGhpcy5fcG9wdXApcmV0dXJuO3RoaXMuX3Jlc2V0
RGlhbG9nT2JqKCk7dGhpcy5fdXBkYXRlU2hpbSgpO30sX3Jlc2V0RGlhbG9nT2Jq
OmZ1bmN0aW9uKCl7dmFyIGE9RE9NLmZpbmQodGhpcy5fcG9wdXAsJ2Rpdi5wb3Bf
Y29udGVudCcpO3ZhciBiPVZlY3RvcjIuZ2V0RWxlbWVudERpbWVuc2lvbnMoYSku
eSsoMipEaWFsb2cuX0hBTE9fV0lEVEgpO3ZhciBnPVZlY3RvcjIuZ2V0Vmlld3Bv
cnREaW1lbnNpb25zKCkueS0oMipEaWFsb2cuX1BBR0VfTUFSR0lOKTt2YXIgZj10
aGlzLl90b3A7dmFyIGU9VmVjdG9yMi5nZXRTY3JvbGxQb3NpdGlvbigpLnk7dmFy
IGM9Zy1iO2lmKGM8MCl7Zj1EaWFsb2cuX1BBR0VfTUFSR0lOO31lbHNlIGlmKGY+
YylmPURpYWxvZy5fUEFHRV9NQVJHSU4rKE1hdGgubWF4KGMsMCkvMik7aWYoIXRo
aXMuX2ZpeGVkKWYrPWU7Q1NTLmNvbmRpdGlvbkNsYXNzKHRoaXMuX29iaiwnZ2Vu
ZXJpY19kaWFsb2dfZml4ZWQnLHRoaXMuX2ZpeGVkKTt2YXIgZD10aGlzLl9maXhl
ZCYmYzwwO0NTUy5jb25kaXRpb25DbGFzcyh0aGlzLl9vYmosJ2dlbmVyaWNfZGlh
bG9nX2ZpeGVkX292ZXJmbG93JyxkKTtDU1MuY29uZGl0aW9uQ2xhc3MoZG9jdW1l
bnQuYm9keSwnZ2VuZXJpY19kaWFsb2dfb3ZlcmZsb3dfbW9kZScsZCk7Q1NTLnNl
dFN0eWxlKHRoaXMuX3BvcHVwLCd0b3AnLGYrJ3B4Jyk7aWYodGhpcy5fZml4ZWQm
JmYtVmVjdG9yMi5nZXRFbGVtZW50UG9zaXRpb24odGhpcy5fcG9wdXAsJ3ZpZXdw
b3J0JykueT4xKXtmKz1lO0NTUy5zZXRTdHlsZSh0aGlzLl9wb3B1cCwndG9wJyxm
KydweCcpO319LF9mYWRlT3V0OmZ1bmN0aW9uKGIpe2lmKCF0aGlzLl9wb3B1cCly
ZXR1cm47dHJ5e2FuaW1hdGlvbih0aGlzLl9vYmopLmR1cmF0aW9uKDApLmNoZWNr
cG9pbnQoKS50bygnb3BhY2l0eScsMCkuaGlkZSgpLmR1cmF0aW9uKDI1MCkub25k
b25lKHRoaXMuX2hpZGUuYmluZCh0aGlzLGIpKS5nbygpO31jYXRjaChhKXt0aGlz
Ll9oaWRlKGIpO319LF9oaWRlOmZ1bmN0aW9uKGQpe2lmKHRoaXMuX29iail0aGlz
Ll9vYmouc3R5bGUuZGlzcGxheT0nbm9uZSc7dGhpcy5fdXBkYXRlU2hpbSgpO2lm
KHRoaXMudGltZW91dCl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7dGhpcy50
aW1lb3V0PW51bGw7fWlmKHRoaXMuX2hpZGRlbl9vYmplY3RzLmxlbmd0aCl7Zm9y
KHZhciBiPTAsYz10aGlzLl9oaWRkZW5fb2JqZWN0cy5sZW5ndGg7YjxjO2IrKyl0
aGlzLl9oaWRkZW5fb2JqZWN0c1tiXS5zdHlsZS52aXNpYmlsaXR5PScnO3RoaXMu
X2hpZGRlbl9vYmplY3RzPVtdO31jbGVhckludGVydmFsKHRoaXMuYWN0aXZlX2hp
ZGluZyk7aWYodGhpcy5fYm90dG9tKXt2YXIgYT1EaWFsb2cuX2JvdHRvbXM7YS5z
cGxpY2UoYS5pbmRleE9mKHRoaXMuX2JvdHRvbSksMSk7RGlhbG9nLl91cGRhdGVN
YXhCb3R0b20oKTt9aWYoZClyZXR1cm47dGhpcy5kZXN0cm95KCk7fSxkZXN0cm95
OmZ1bmN0aW9uKCl7aWYoRGlhbG9nLl9zdGFjay5sZW5ndGgpe3ZhciBiPURpYWxv
Zy5fc3RhY2s7Zm9yKHZhciBhPWIubGVuZ3RoLTE7YT49MDthLS0paWYoYlthXT09
dGhpcyl7Yi5zcGxpY2UoYSwxKTticmVhazt9aWYoYi5sZW5ndGgpYltiLmxlbmd0
aC0xXS5fc2hvd0RpYWxvZygpO31pZih0aGlzLl9vYmope0RPTS5yZW1vdmUodGhp
cy5fb2JqKTt0aGlzLl9vYmo9bnVsbDt0aGlzLl9zaGltJiZ0aGlzLl9zaGltLmhp
ZGUoKTt0aGlzLl9zaGltPW51bGw7fWlmKHRoaXMuX2Nsb3NlX2hhbmRsZXIpdGhp
cy5fY2xvc2VfaGFuZGxlcih7cmV0dXJuX2RhdGE6dGhpcy5fcmV0dXJuX2RhdGF9
KTt9LF9oYW5kbGVCdXR0b246ZnVuY3Rpb24oYSl7aWYodHlwZW9mIGE9PSdzdHJp
bmcnKWE9RGlhbG9nLl9maW5kQnV0dG9uKHRoaXMuX2J1dHRvbnMsYSk7dmFyIGI9
RGlhbG9nLmNhbGxfb3JfZXZhbChhLGEuaGFuZGxlcik7aWYoYj09PWZhbHNlKXJl
dHVybjtpZihhLm5hbWU9PSdjYW5jZWwnKXt0aGlzLmNhbmNlbCgpO31lbHNlIGlm
KERpYWxvZy5jYWxsX29yX2V2YWwodGhpcyx0aGlzLl9oYW5kbGVyLHtidXR0b246
YX0pIT09ZmFsc2UpdGhpcy5oaWRlKCk7fSxfc3VibWl0Rm9ybTpmdW5jdGlvbihk
LGUsYil7dmFyIGM9dGhpcy5nZXRGb3JtRGF0YSgpO2lmKGIpY1tiLm5hbWVdPWIu
bGFiZWw7aWYodGhpcy5fZXh0cmFfZGF0YSljb3B5X3Byb3BlcnRpZXMoYyx0aGlz
Ll9leHRyYV9kYXRhKTt2YXIgYT1uZXcgQXN5bmNSZXF1ZXN0KCkuc2V0VVJJKGUp
LnNldERhdGEoYykuc2V0TWV0aG9kKGQpLnNldE5lY3Rhck1vZHVsZURhdGFTYWZl
KHRoaXMuX2NhdXNhbF9lbGVtKS5zZXRSZWFkT25seShkPT0nR0VUJyk7dGhpcy5z
ZXRBc3luYyhhKTtyZXR1cm4gZmFsc2U7fSxfc2V0RnJvbU1vZGVsOmZ1bmN0aW9u
KGMpe3ZhciBhPXt9O2NvcHlfcHJvcGVydGllcyhhLGMpO2lmKGEuaW1tZWRpYXRl
UmVuZGVyaW5nKXt0aGlzLnNldEltbWVkaWF0ZVJlbmRlcmluZyhhLmltbWVkaWF0
ZVJlbmRlcmluZyk7ZGVsZXRlIGEuaW1tZWRpYXRlUmVuZGVyaW5nO31mb3IodmFy
IGQgaW4gYSl7aWYoZD09J29ubG9hZFJlZ2lzdGVyJyl7dGhpcy5vbmxvYWRSZWdp
c3RlcihhW2RdKTtjb250aW51ZTt9dmFyIGI9dGhpc1snc2V0JytkLnN1YnN0cigw
LDEpLnRvVXBwZXJDYXNlKCkrZC5zdWJzdHIoMSldO2IuYXBwbHkodGhpcywkQShh
W2RdKSk7fX0sX3VwZGF0ZUJvdHRvbTpmdW5jdGlvbigpe3ZhciBhPVZlY3RvcjIu
Z2V0RWxlbWVudERpbWVuc2lvbnModGhpcy5fY29udGVudCkueStWZWN0b3IyLmdl
dEVsZW1lbnRQb3NpdGlvbih0aGlzLl9jb250ZW50KS55O0RpYWxvZy5fYm90dG9t
c1tEaWFsb2cuX2JvdHRvbXMubGVuZ3RoLTFdPWE7RGlhbG9nLl91cGRhdGVNYXhC
b3R0b20oKTt9fSk7CmZ1bmN0aW9uIEFzeW5jUmVxdWVzdCh1cmkpe3ZhciBkaXNw
YXRjaFJlc3BvbnNlPWJpbmQodGhpcyxmdW5jdGlvbihhc3luY1Jlc3BvbnNlKXt0
cnl7dGhpcy5jbGVhclN0YXR1c0luZGljYXRvcigpO3RoaXMuX21lYXN1cmVTYXZl
ZCYmdGhpcy5fbWVhc3VyZVNhdmVkKCk7aWYodGhpcy5faXNQcmVmZXRjaCl7dGhp
cy5faXNQcmVmZXRjaD1mYWxzZTtyZXR1cm47fWlmKCF0aGlzLmlzUmVsZXZhbnQo
KSl7aW52b2tlRXJyb3JIYW5kbGVyKDEwMTApO3JldHVybjt9aWYodGhpcy5pbml0
aWFsSGFuZGxlcihhc3luY1Jlc3BvbnNlKSE9PWZhbHNlKXtjbGVhclRpbWVvdXQo
dGhpcy50aW1lcik7YXN5bmNSZXNwb25zZS5qc2NjJiZpbnZva2VfY2FsbGJhY2tz
KFthc3luY1Jlc3BvbnNlLmpzY2NdKTtpZih0aGlzLmhhbmRsZXIpdHJ5e3ZhciBz
dXBwcmVzc19vbmxvYWQ9dGhpcy5oYW5kbGVyKGFzeW5jUmVzcG9uc2UpO31jYXRj
aChleGNlcHRpb24pe2FzeW5jUmVzcG9uc2UuaXNfbGFzdCYmdGhpcy5maW5hbGx5
SGFuZGxlcihhc3luY1Jlc3BvbnNlKTt0aHJvdyBleGNlcHRpb247fWFzeW5jUmVz
cG9uc2UuaXNfbGFzdCYmdGhpcy5maW5hbGx5SGFuZGxlcihhc3luY1Jlc3BvbnNl
KTtpZihzdXBwcmVzc19vbmxvYWQhPT1Bc3luY1JlcXVlc3Quc3VwcHJlc3NPbmxv
YWRUb2tlbil7dmFyIG9ubG9hZD1hc3luY1Jlc3BvbnNlLm9ubG9hZDtpZihvbmxv
YWQpZm9yKHZhciBpaT0wO2lpPG9ubG9hZC5sZW5ndGg7aWkrKyl0cnl7KG5ldyBG
dW5jdGlvbihvbmxvYWRbaWldKSkuYXBwbHkodGhpcyk7fWNhdGNoKGV4Y2VwdGlv
bil7fWlmKHRoaXMubGlkJiYhYXN5bmNSZXNwb25zZS5pc1JlcGxheSgpKUFyYml0
ZXIuaW5mb3JtKCd0dGlfYWpheCcse3M6dGhpcy5saWQsZDpbdGhpcy5fc2VuZFRp
bWVTdGFtcHx8MCwodGhpcy5fc2VuZFRpbWVTdGFtcCYmdGhpcy5fcmVzcG9uc2VU
aW1lKT8odGhpcy5fcmVzcG9uc2VUaW1lLXRoaXMuX3NlbmRUaW1lU3RhbXApOjBd
fSxBcmJpdGVyLkJFSEFWSU9SX0VWRU5UKTt2YXIgb25hZnRlcmxvYWQ9YXN5bmNS
ZXNwb25zZS5vbmFmdGVybG9hZDtpZihvbmFmdGVybG9hZClmb3IodmFyIGlpPTA7
aWk8b25hZnRlcmxvYWQubGVuZ3RoO2lpKyspdHJ5eyhuZXcgRnVuY3Rpb24ob25h
ZnRlcmxvYWRbaWldKSkuYXBwbHkodGhpcyk7fWNhdGNoKGV4Y2VwdGlvbil7fX12
YXIgaW52YWxpZGF0ZV9jYWNoZT1hc3luY1Jlc3BvbnNlLmludmFsaWRhdGVfY2Fj
aGU7aWYoIXRoaXMuZ2V0T3B0aW9uKCdzdXBwcmVzc0NhY2hlSW52YWxpZGF0aW9u
JykmJmludmFsaWRhdGVfY2FjaGUmJmludmFsaWRhdGVfY2FjaGUubGVuZ3RoKUFy
Yml0ZXIuaW5mb3JtKEFyYml0ZXIuUEFHRUNBQ0hFX0lOVkFMSURBVEUsaW52YWxp
ZGF0ZV9jYWNoZSk7fWlmKGFzeW5jUmVzcG9uc2UuY2FjaGVPYnNlcnZhdGlvbiYm
dHlwZW9mKFRhYkNvbnNvbGVDYWNoZW9ic2VydmVyKSE9J3VuZGVmaW5lZCcmJlRh
YkNvbnNvbGVDYWNoZW9ic2VydmVyLmluc3RhbmNlKVRhYkNvbnNvbGVDYWNoZW9i
c2VydmVyLmdldEluc3RhbmNlKCkuYWRkQXN5bmNPYnNlcnZhdGlvbihhc3luY1Jl
c3BvbnNlLmNhY2hlT2JzZXJ2YXRpb24pO31jYXRjaChleGNlcHRpb24pe319KTt2
YXIgcmVwbGF5UmVzcG9uc2VzPWJpbmQodGhpcyxmdW5jdGlvbigpe2lmKGlzX2Vt
cHR5KHRoaXMuX2FzeW5jUmVzcG9uc2VzKSlyZXR1cm47dGhpcy5zZXROZXdTZXJp
YWwoKTtmb3IodmFyIGlpPTA7aWk8dGhpcy5fYXN5bmNSZXNwb25zZXMubGVuZ3Ro
OysraWkpe3ZhciByPXRoaXMuX2FzeW5jUmVzcG9uc2VzW2lpXTtpbnZva2VSZXNw
b25zZUhhbmRsZXIocix0cnVlKTt9fSk7dmFyIGRpc3BhdGNoRXJyb3JSZXNwb25z
ZT1iaW5kKHRoaXMsZnVuY3Rpb24oYXN5bmNSZXNwb25zZSxpc1RyYW5zcG9ydCl7
dHJ5e3RoaXMuY2xlYXJTdGF0dXNJbmRpY2F0b3IoKTt2YXIgYXN5bmNfZXJyb3I9
YXN5bmNSZXNwb25zZS5nZXRFcnJvcigpO2lmKHRoaXMuX3NlbmRUaW1lU3RhbXAp
e3ZhciBfZHVyYXRpb249KCtuZXcgRGF0ZSgpKS10aGlzLl9zZW5kVGltZVN0YW1w
O3ZhciB4ZmJfaXA9dGhpcy5feEZiU2VydmVyfHwnLSc7YXN5bmNSZXNwb25zZS5s
b2dFcnJvcignYXN5bmNfZXJyb3InLF9kdXJhdGlvbisnOicreGZiX2lwKTt9ZWxz
ZSBhc3luY1Jlc3BvbnNlLmxvZ0Vycm9yKCdhc3luY19lcnJvcicpO2lmKCghdGhp
cy5pc1JlbGV2YW50KCkpfHxhc3luY19lcnJvcj09PTEwMTApcmV0dXJuO2lmKGFz
eW5jX2Vycm9yPT0xMzU3MDA4fHxhc3luY19lcnJvcj09MTM1NzAwN3x8YXN5bmNf
ZXJyb3I9PTE0NDIwMDJ8fGFzeW5jX2Vycm9yPT0xMzU3MDAxKXt2YXIgaXNfY29u
ZmlybWF0aW9uPWZhbHNlO2lmKGFzeW5jX2Vycm9yPT0xMzU3MDA4fHxhc3luY19l
cnJvcj09MTM1NzAwNylpc19jb25maXJtYXRpb249dHJ1ZTt2YXIgcGF5bG9hZD1h
c3luY1Jlc3BvbnNlLmdldFBheWxvYWQoKTt0aGlzLl9kaXNwbGF5U2VydmVyRGlh
bG9nKHBheWxvYWQuX19kaWFsb2csaXNfY29uZmlybWF0aW9uKTt9ZWxzZSBpZih0
aGlzLmluaXRpYWxIYW5kbGVyKGFzeW5jUmVzcG9uc2UpIT09ZmFsc2Upe2NsZWFy
VGltZW91dCh0aGlzLnRpbWVyKTt0cnl7aWYoaXNUcmFuc3BvcnQpe3RoaXMudHJh
bnNwb3J0RXJyb3JIYW5kbGVyKGFzeW5jUmVzcG9uc2UpO31lbHNlIHRoaXMuZXJy
b3JIYW5kbGVyKGFzeW5jUmVzcG9uc2UpO31jYXRjaChleGNlcHRpb24pe3RoaXMu
ZmluYWxseUhhbmRsZXIoYXN5bmNSZXNwb25zZSk7dGhyb3cgZXhjZXB0aW9uO310
aGlzLmZpbmFsbHlIYW5kbGVyKGFzeW5jUmVzcG9uc2UpO319Y2F0Y2goZXhjZXB0
aW9uKXt9fSk7dmFyIF9pbnRlcnByZXRUcmFuc3BvcnRSZXNwb25zZT1iaW5kKHRo
aXMsZnVuY3Rpb24oKXtpZih0aGlzLmdldE9wdGlvbignc3VwcHJlc3NFdmFsdWF0
aW9uJykpe3ZhciByPW5ldyBBc3luY1Jlc3BvbnNlKHRoaXMsdGhpcy50cmFuc3Bv
cnQpO3JldHVybiB7YXN5bmNSZXNwb25zZTpyfTt9dmFyIF9zZW5kRXJyb3I9ZnVu
Y3Rpb24ocCxlcnJvcl9jb2RlLHN0cil7aWYoIXdpbmRvdy5zZW5kX2Vycm9yX3Np
Z25hbClyZXR1cm47aWYodGhpcy5feEZiU2VydmVyKXtlcnJvcl9jb2RlPScxMDA4
XycrZXJyb3JfY29kZTt9ZWxzZSBlcnJvcl9jb2RlPScxMDEyXycrZXJyb3JfY29k
ZTtzZW5kX2Vycm9yX3NpZ25hbCgnYXN5bmNfeHBvcnRfcmVzcCcsZXJyb3JfY29k
ZSsnOicrKHRoaXMuX3hGYlNlcnZlcnx8Jy0nKSsnOicrcC5nZXRVUkkoKSsnOicr
c3RyLmxlbmd0aCsnOicrc3RyLnN1YnN0cigwLDE2MDApKTt9O3ZhciBzaGllbGQ9
ImZvciAoOzspOyI7dmFyIHNoaWVsZGxlbj1zaGllbGQubGVuZ3RoO3ZhciB0ZXh0
PXRoaXMudHJhbnNwb3J0LnJlc3BvbnNlVGV4dDtpZih0ZXh0Lmxlbmd0aDw9c2hp
ZWxkbGVuKXtfc2VuZEVycm9yKHRoaXMsJ2VtcHR5Jyx0ZXh0KTtyZXR1cm4ge3Ry
YW5zcG9ydEVycm9yOidSZXNwb25zZSB0b28gc2hvcnQgb24gYXN5bmMgdG8gJyt0
aGlzLmdldFVSSSgpfTt9dmFyIG9mZnNldD0wO3doaWxlKHRleHQuY2hhckF0KG9m
ZnNldCk9PSIgInx8dGV4dC5jaGFyQXQob2Zmc2V0KT09IlxuIilvZmZzZXQrKztv
ZmZzZXQmJnRleHQuc3Vic3RyaW5nKG9mZnNldCxvZmZzZXQrc2hpZWxkbGVuKT09
c2hpZWxkO3ZhciBzYWZlUmVzcG9uc2U9dGV4dC5zdWJzdHJpbmcob2Zmc2V0K3No
aWVsZGxlbik7dHJ5e3ZhciByZXNwb25zZT1ldmFsKCcoJytzYWZlUmVzcG9uc2Ur
JyknKTt9Y2F0Y2goZXhjZXB0aW9uKXtfc2VuZEVycm9yKHRoaXMsJ2V4Y2VwJyx0
ZXh0KTtyZXR1cm4ge3RyYW5zcG9ydEVycm9yOidldmFsKCkgZmFpbGVkIG9uIGFz
eW5jIHRvICcrdGhpcy5nZXRVUkkoKX07fXJldHVybiBpbnRlcnByZXRSZXNwb25z
ZShyZXNwb25zZSk7fSk7dmFyIGludGVycHJldFJlc3BvbnNlPWJpbmQodGhpcyxm
dW5jdGlvbihyZXNwb25zZSl7aWYocmVzcG9uc2UucmVkaXJlY3QpcmV0dXJuIHty
ZWRpcmVjdDpyZXNwb25zZS5yZWRpcmVjdH07dmFyIHI9bmV3IEFzeW5jUmVzcG9u
c2UodGhpcyk7aWYocmVzcG9uc2UuX19hciE9MSl7ci5wYXlsb2FkPXJlc3BvbnNl
O31lbHNle2NvcHlfcHJvcGVydGllcyhyLHJlc3BvbnNlKTtpZihyZXNwb25zZS50
cGx0cylpZih3aW5kb3cuRHluYVRlbXBsYXRlKUR5bmFUZW1wbGF0ZS5yZWdpc3Rl
clRlbXBsYXRlcyhyZXNwb25zZS50cGx0cyk7fXJldHVybiB7YXN5bmNSZXNwb25z
ZTpyfTt9KTt2YXIgaW52b2tlUmVzcG9uc2VIYW5kbGVyPWJpbmQodGhpcyxmdW5j
dGlvbihpbnRlcnAsaXNfcmVwbGF5KXtpZih0eXBlb2YoaW50ZXJwLnJlZGlyZWN0
KSE9J3VuZGVmaW5lZCcpeyhmdW5jdGlvbigpe3RoaXMuc2V0VVJJKGludGVycC5y
ZWRpcmVjdCkuc2VuZCgpO30pLmJpbmQodGhpcykuZGVmZXIoKTtyZXR1cm47fWlm
KHRoaXMuaGFuZGxlcnx8dGhpcy5lcnJvckhhbmRsZXJ8fHRoaXMudHJhbnNwb3J0
RXJyb3JIYW5kbGVyKWlmKHR5cGVvZihpbnRlcnAuYXN5bmNSZXNwb25zZSkhPSd1
bmRlZmluZWQnKXt2YXIgcj1pbnRlcnAuYXN5bmNSZXNwb25zZTtyLnNldFJlcGxh
eSghIWlzX3JlcGxheSk7aWYoIXRoaXMuaXNSZWxldmFudCgpKXtpbnZva2VFcnJv
ckhhbmRsZXIoMTAxMCk7cmV0dXJuO31pZihyLmlubGluZWpzKWV2YWxfZ2xvYmFs
KHIuaW5saW5lanMpO2lmKHIubGlkKXt0aGlzLl9yZXNwb25zZVRpbWU9KCtuZXcg
RGF0ZSgpKTtpZih3aW5kb3cuQ2F2YWxyeUxvZ2dlcil0aGlzLmNhdmFscnk9Q2F2
YWxyeUxvZ2dlci5nZXRJbnN0YW5jZShyLmxpZCk7dGhpcy5saWQ9ci5saWQ7fWlm
KHIuZ2V0RXJyb3IoKSYmIXIuZ2V0RXJyb3JJc1dhcm5pbmcoKSl7dmFyIGZuPWRp
c3BhdGNoRXJyb3JSZXNwb25zZTt9ZWxzZXt2YXIgZm49ZGlzcGF0Y2hSZXNwb25z
ZTtpZih0aGlzLl9yZXBsYXlhYmxlJiYhaXNfcmVwbGF5JiYhci5kb250UmVwbGF5
KXt0aGlzLl9hc3luY1Jlc3BvbnNlcz10aGlzLl9hc3luY1Jlc3BvbnNlc3x8W107
dGhpcy5fYXN5bmNSZXNwb25zZXMucHVzaChpbnRlcnApO319Qm9vdGxvYWRlci5z
ZXRSZXNvdXJjZU1hcChyLnJlc291cmNlX21hcCk7aWYoci5ib290bG9hZGFibGUp
Qm9vdGxvYWRlci5lbmFibGVCb290bG9hZChyLmJvb3Rsb2FkYWJsZSk7Zm49Zm4u
c2hpZWxkKG51bGwscik7Zm49Zm4uZGVmZXIuYmluZChmbik7dmFyIGlzX3RyYW5z
aXRpb25hbD1mYWxzZTtpZih0aGlzLnByZUJvb3Rsb2FkSGFuZGxlcilpc190cmFu
c2l0aW9uYWw9dGhpcy5wcmVCb290bG9hZEhhbmRsZXIocik7ci5jc3M9ci5jc3N8
fFtdO3IuanM9ci5qc3x8W107Qm9vdGxvYWRlci5sb2FkUmVzb3VyY2VzKHIuY3Nz
LmNvbmNhdChyLmpzKSxmbixpc190cmFuc2l0aW9uYWwsdGhpcy5nZXRVUkkoKSk7
fWVsc2UgaWYodHlwZW9mKGludGVycC50cmFuc3BvcnRFcnJvcikhPSd1bmRlZmlu
ZWQnKXtpZih0aGlzLl94RmJTZXJ2ZXIpe2ludm9rZUVycm9ySGFuZGxlcigxMDA4
KTt9ZWxzZSBpbnZva2VFcnJvckhhbmRsZXIoMTAxMik7fWVsc2UgaW52b2tlRXJy
b3JIYW5kbGVyKDEwMDcpO30pO3ZhciBpbnZva2VFcnJvckhhbmRsZXI9YmluZCh0
aGlzLGZ1bmN0aW9uKGV4cGxpY2l0RXJyb3Ipe3RyeXtpZighd2luZG93LmxvYWRl
ZCYmIXRoaXMuZ2V0T3B0aW9uKCdoYW5kbGVFcnJvckFmdGVyVW5sb2FkJykpcmV0
dXJuO31jYXRjaChleCl7cmV0dXJuO312YXIgcj1uZXcgQXN5bmNSZXNwb25zZSh0
aGlzKTt2YXIgZXJyO3RyeXtlcnI9ZXhwbGljaXRFcnJvcnx8dGhpcy50cmFuc3Bv
cnQuc3RhdHVzfHwxMDA0O31jYXRjaChleCl7ZXJyPTEwMDU7fWlmKHRoaXMuX3Jl
cXVlc3RBYm9ydGVkKWVycj0xMDExO3RyeXtpZih0aGlzLnJlc3BvbnNlVGV4dD09
JycpZXJyPTEwMDI7fWNhdGNoKGlnbm9yZSl7fWlmKHRoaXMudHJhbnNwb3J0RXJy
b3JIYW5kbGVyKXt2YXIgZGVzYyxzdW1tYXJ5O3ZhciBzaWxlbnQ9dHJ1ZTtpZihm
YWxzZT09PW5hdmlnYXRvci5vbkxpbmUpe3N1bW1hcnk9X3R4KCJObyBoYXkgY29u
ZXhpXHUwMGYzbiBkZSByZWQiKTtkZXNjPV90eCgiUGFyZWNlIHF1ZSB0dSBuYXZl
Z2Fkb3IgZXN0XHUwMGUxIGRlc2NvbmVjdGFkby4gQ29tcHJ1ZWJhIGxhIGNvbmV4
aVx1MDBmM24gZGUgaW50ZXJuZXQgeSB2dWVsdmUgYSBpbnRlbnRhcmxvLiIpO2Vy
cj0xMDA2O31lbHNlIGlmKGVycj49MzAwJiZlcnI8PTM5OSl7c3VtbWFyeT1fdHgo
IlJlZGlyZWNjaVx1MDBmM24iKTtkZXNjPV90eCgiU3UgYWNjZXNvIGEgRmFjZWJv
b2sgZnVlIGJsb3F1ZWFkbyBvIHJlZGlyaWdpZG8gcG9yIHRlcmNlcm9zIGVuIGVz
dGUgbW9tZW50bywgcG9yIGZhdm9yIHBcdTAwZjNuZ2FzZSBlbiBjb250YWN0byBj
b24gc3UgSVNQIG8gcmVjYXJndWUgc3UgbmF2ZWdhZG9yLiIpO3JlZGlyX3VybD10
aGlzLnRyYW5zcG9ydC5nZXRSZXNwb25zZUhlYWRlcigiTG9jYXRpb24iKTtpZihy
ZWRpcl91cmwpZ29VUkkocmVkaXJfdXJsLHRydWUpO3NpbGVudD10cnVlO31lbHNl
e3N1bW1hcnk9X3R4KCJcdTAwYTFVeSEiKTtkZXNjPV90eCgiU2UgaGEgcHJvZHVj
aWRvIHVuIGVycm9yIHkgZXN0YW1vcyB0cmFiYWphbmRvIHBhcmEgYXJyZWdsYXJs
byBlbiBjdWFudG8gc2VhIHBvc2libGUuIFByb250byBwb2RyXHUwMGUxcyB2b2x2
ZXIgYSBpbnRlbnRhcmxvLiIpO30hdGhpcy5nZXRPcHRpb24oJ3N1cHByZXNzRXJy
b3JBbGVydHMnKTtjb3B5X3Byb3BlcnRpZXMocix7ZXJyb3I6ZXJyLGVycm9yU3Vt
bWFyeTpzdW1tYXJ5LGVycm9yRGVzY3JpcHRpb246ZGVzYyxzaWxlbnRFcnJvcjpz
aWxlbnR9KTtkaXNwYXRjaEVycm9yUmVzcG9uc2Uocix0cnVlKTt9fSk7dmFyIGhh
bmRsZVJlc3BvbnNlPWZ1bmN0aW9uKHJlc3BvbnNlKXt2YXIgYXN5bmNSZXNwb25z
ZT10aGlzLmludGVycHJldFJlc3BvbnNlKHJlc3BvbnNlKTt0aGlzLmludm9rZVJl
c3BvbnNlSGFuZGxlcihhc3luY1Jlc3BvbnNlKTt9O3ZhciBvblN0YXRlQ2hhbmdl
PWZ1bmN0aW9uKCl7dHJ5e2lmKHRoaXMudHJhbnNwb3J0LnJlYWR5U3RhdGU9PTQp
e0FzeW5jUmVxdWVzdC5faW5mbGlnaHRQdXJnZSgpO3RyeXtpZih0eXBlb2YodGhp
cy50cmFuc3BvcnQuZ2V0UmVzcG9uc2VIZWFkZXIpIT0ndW5kZWZpbmVkJyYmdGhp
cy50cmFuc3BvcnQuZ2V0UmVzcG9uc2VIZWFkZXIoJ1gtRkItU2VydmVyJykpdGhp
cy5feEZiU2VydmVyPXRoaXMudHJhbnNwb3J0LmdldFJlc3BvbnNlSGVhZGVyKCdY
LUZCLVNlcnZlcicpO31jYXRjaChleCl7fWlmKHRoaXMudHJhbnNwb3J0LnN0YXR1
cz49MjAwJiZ0aGlzLnRyYW5zcG9ydC5zdGF0dXM8MzAwKXtpbnZva2VSZXNwb25z
ZUhhbmRsZXIoX2ludGVycHJldFRyYW5zcG9ydFJlc3BvbnNlKCkpO31lbHNlIGlm
KHVhLnNhZmFyaSgpJiYodHlwZW9mKHRoaXMudHJhbnNwb3J0LnN0YXR1cyk9PSd1
bmRlZmluZWQnKSl7aW52b2tlRXJyb3JIYW5kbGVyKDEwMDIpO31lbHNlIGlmKHdp
bmRvdy5FbnYmJndpbmRvdy5FbnYucmV0cnlfYWpheF9vbl9uZXR3b3JrX2Vycm9y
JiZ0aGlzLnRyYW5zcG9ydC5zdGF0dXMgaW4gezA6MSwxMjAyOToxLDEyMDMwOjEs
MTIwMzE6MSwxMjE1MjoxfSYmdGhpcy5yZW1haW5pbmdSZXRyaWVzPjApey0tdGhp
cy5yZW1haW5pbmdSZXRyaWVzO2RlbGV0ZSB0aGlzLnRyYW5zcG9ydDt0aGlzLnNl
bmQodHJ1ZSk7cmV0dXJuO31lbHNlIGludm9rZUVycm9ySGFuZGxlcigpO2lmKHRo
aXMuZ2V0T3B0aW9uKCdhc3luY2hyb25vdXMnKSE9PWZhbHNlKWRlbGV0ZSB0aGlz
LnRyYW5zcG9ydDt9fWNhdGNoKGV4Y2VwdGlvbil7dHJ5e2lmKCF3aW5kb3cubG9h
ZGVkKXJldHVybjt9Y2F0Y2goZXgpe3JldHVybjt9ZGVsZXRlIHRoaXMudHJhbnNw
b3J0O2lmKHRoaXMucmVtYWluaW5nUmV0cmllcz4wKXstLXRoaXMucmVtYWluaW5n
UmV0cmllczt0aGlzLnNlbmQodHJ1ZSk7fWVsc2V7IXRoaXMuZ2V0T3B0aW9uKCdz
dXBwcmVzc0Vycm9yQWxlcnRzJyk7aWYod2luZG93LnNlbmRfZXJyb3Jfc2lnbmFs
KXNlbmRfZXJyb3Jfc2lnbmFsKCdhc3luY194cG9ydF9yZXNwJywnMTAwNzonKyh0
aGlzLl94RmJTZXJ2ZXJ8fCctJykrJzonK3RoaXMuZ2V0VVJJKCkrJzonK2V4Y2Vw
dGlvbi5tZXNzYWdlKTtpbnZva2VFcnJvckhhbmRsZXIoMTAwNyk7fX19O3ZhciBv
bkpTT05QUmVzcG9uc2U9ZnVuY3Rpb24oZGF0YSxtb3JlX2NodW5rZWRfcmVzcG9u
c2Upe3ZhciBpc19maXJzdD0odGhpcy5pc19maXJzdD09PXVuZGVmaW5lZCk7dGhp
cy5pc19maXJzdD1pc19maXJzdDtpZih0aGlzLnRyYW5zcG9ydElmcmFtZSYmIW1v
cmVfY2h1bmtlZF9yZXNwb25zZSkoZnVuY3Rpb24oeCl7ZG9jdW1lbnQuYm9keS5y
ZW1vdmVDaGlsZCh4KTt9KS5iaW5kKG51bGwsdGhpcy50cmFuc3BvcnRJZnJhbWUp
LmRlZmVyKCk7aWYodWEuaWUoKT49OSYmd2luZG93LkpTT04pZGF0YT13aW5kb3cu
SlNPTi5wYXJzZSh3aW5kb3cuSlNPTi5zdHJpbmdpZnkoZGF0YSkpO3ZhciByPXRo
aXMuaW50ZXJwcmV0UmVzcG9uc2UoZGF0YSk7ci5hc3luY1Jlc3BvbnNlLmlzX2Zp
cnN0PWlzX2ZpcnN0O3IuYXN5bmNSZXNwb25zZS5pc19sYXN0PSFtb3JlX2NodW5r
ZWRfcmVzcG9uc2U7dGhpcy5pbnZva2VSZXNwb25zZUhhbmRsZXIocik7cmV0dXJu
IG1vcmVfY2h1bmtlZF9yZXNwb25zZTt9O2NvcHlfcHJvcGVydGllcyh0aGlzLHtv
bnN0YXRlY2hhbmdlOm9uU3RhdGVDaGFuZ2Usb25qc29ucHJlc3BvbnNlOm9uSlNP
TlBSZXNwb25zZSxyZXBsYXlSZXNwb25zZXM6cmVwbGF5UmVzcG9uc2VzLGludm9r
ZVJlc3BvbnNlSGFuZGxlcjppbnZva2VSZXNwb25zZUhhbmRsZXIsaW50ZXJwcmV0
UmVzcG9uc2U6aW50ZXJwcmV0UmVzcG9uc2UsaGFuZGxlUmVzcG9uc2U6aGFuZGxl
UmVzcG9uc2UsdHJhbnNwb3J0Om51bGwsbWV0aG9kOidQT1NUJyx1cmk6JycsdGlt
ZW91dDpudWxsLHRpbWVyOm51bGwsaW5pdGlhbEhhbmRsZXI6YmFnb2Zob2xkaW5n
LGhhbmRsZXI6bnVsbCxlcnJvckhhbmRsZXI6bnVsbCx0cmFuc3BvcnRFcnJvckhh
bmRsZXI6bnVsbCx0aW1lb3V0SGFuZGxlcjpudWxsLGZpbmFsbHlIYW5kbGVyOmJh
Z29maG9sZGluZyxzZXJ2ZXJEaWFsb2dDYW5jZWxIYW5kbGVyOmJhZ29maG9sZGlu
ZyxyZWxhdGl2ZVRvOm51bGwsc3RhdHVzRWxlbWVudDpudWxsLHN0YXR1c0NsYXNz
OicnLGRhdGE6e30sY29udGV4dDp7fSxyZWFkT25seTpmYWxzZSx3cml0ZVJlcXVp
cmVkUGFyYW1zOlsncG9zdF9mb3JtX2lkJ10scmVtYWluaW5nUmV0cmllczowLG9w
dGlvbjp7YXN5bmNocm9ub3VzOnRydWUsc3VwcHJlc3NDYWNoZUludmFsaWRhdGlv
bjpmYWxzZSxzdXBwcmVzc0Vycm9ySGFuZGxlcldhcm5pbmc6ZmFsc2Usc3VwcHJl
c3NFdmFsdWF0aW9uOmZhbHNlLHN1cHByZXNzRXJyb3JBbGVydHM6ZmFsc2UscmV0
cmllczowLGpzb25wOmZhbHNlLGJ1bmRsZTpmYWxzZSx1c2VJZnJhbWVUcmFuc3Bv
cnQ6ZmFsc2UsdGZiRW5kcG9pbnQ6dHJ1ZSxoYW5kbGVFcnJvckFmdGVyVW5sb2Fk
OmZhbHNlfSxfcmVwbGF5YWJsZTp1bmRlZmluZWQsX3JlcGxheUtleTonJyxfaXNQ
cmVmZXRjaDpmYWxzZX0pO3RoaXMuZXJyb3JIYW5kbGVyPUFzeW5jUmVzcG9uc2Uu
ZGVmYXVsdEVycm9ySGFuZGxlcjt0aGlzLnRyYW5zcG9ydEVycm9ySGFuZGxlcj1i
aW5kKHRoaXMsJ2Vycm9ySGFuZGxlcicpO2lmKHVyaSE9dW5kZWZpbmVkKXRoaXMu
c2V0VVJJKHVyaSk7cmV0dXJuIHRoaXM7fUFyYml0ZXIuc3Vic2NyaWJlKCJwYWdl
X3RyYW5zaXRpb24iLGZ1bmN0aW9uKGIsYSl7QXN5bmNSZXF1ZXN0Ll9pZF90aHJl
c2hvbGQ9YS5pZDt9KTtjb3B5X3Byb3BlcnRpZXMoQXN5bmNSZXF1ZXN0LHtyZWNl
aXZlSlNPTlBSZXNwb25zZTpmdW5jdGlvbihiLGEsYyl7aWYodGhpcy5fSlNPTlBS
ZWNlaXZlcnNbYl0pe2lmKCF0aGlzLl9KU09OUFJlY2VpdmVyc1tiXShhLGMpKWRl
bGV0ZSB0aGlzLl9KU09OUFJlY2VpdmVyc1tiXTt9ZWxzZSBpZih3aW5kb3cuc2Vu
ZF9lcnJvcl9zaWduYWwmJiFjKXt2YXIgZD0oYS5wYXlsb2FkJiZhLnBheWxvYWQu
dXJpKXx8Jyc7c2VuZF9lcnJvcl9zaWduYWwoJ2pzX3RpbWVvdXRfYW5kX2V4Y2Vw
dGlvbicsJzAwMDAyOldyb25nU2Vzc2lvbklEOmVycm9yOicrYisnOicrZCk7fX0s
X2hhc0J1bmRsZWRSZXF1ZXN0OmZ1bmN0aW9uKCl7cmV0dXJuIEFzeW5jUmVxdWVz
dC5fYWxsQnVuZGxlZFJlcXVlc3RzLmxlbmd0aD4wO30sc3Rhc2hCdW5kbGVkUmVx
dWVzdDpmdW5jdGlvbigpe3ZhciBhPUFzeW5jUmVxdWVzdC5fYWxsQnVuZGxlZFJl
cXVlc3RzO0FzeW5jUmVxdWVzdC5fYWxsQnVuZGxlZFJlcXVlc3RzPVtdO3JldHVy
biBhO30sc2V0QnVuZGxlZFJlcXVlc3RQcm9wZXJ0aWVzOmZ1bmN0aW9uKGIpe3Zh
ciBjPW51bGw7aWYoYi5zdGFzaGVkUmVxdWVzdHMpQXN5bmNSZXF1ZXN0Ll9hbGxC
dW5kbGVkUmVxdWVzdHM9QXN5bmNSZXF1ZXN0Ll9hbGxCdW5kbGVkUmVxdWVzdHMu
Y29uY2F0KGIuc3Rhc2hlZFJlcXVlc3RzKTtpZighQXN5bmNSZXF1ZXN0Ll9oYXNC
dW5kbGVkUmVxdWVzdCgpKXt2YXIgYT1iLmNhbGxiYWNrO2EmJmEoKTt9ZWxzZXtj
b3B5X3Byb3BlcnRpZXMoQXN5bmNSZXF1ZXN0Ll9idW5kbGVkUmVxdWVzdFByb3Bl
cnRpZXMsYik7aWYoYi5zdGFydF9pbW1lZGlhdGVseSljPUFzeW5jUmVxdWVzdC5f
c2VuZEJ1bmRsZWRSZXF1ZXN0cygpO31yZXR1cm4gYzt9LF9idW5kbGVSZXF1ZXN0
OmZ1bmN0aW9uKGIpe2lmKGIuZ2V0T3B0aW9uKCdqc29ucCcpfHxiLmdldE9wdGlv
bigndXNlSWZyYW1lVHJhbnNwb3J0Jykpe2Iuc2V0T3B0aW9uKCdidW5kbGUnLGZh
bHNlKTtyZXR1cm4gZmFsc2U7fWVsc2UgaWYoIWIudXJpLmlzRmFjZWJvb2tVUkko
KSl7Yi5zZXRPcHRpb24oJ2J1bmRsZScsZmFsc2UpO3JldHVybiBmYWxzZTt9ZWxz
ZSBpZighYi5nZXRPcHRpb24oJ2FzeW5jaHJvbm91cycpKXtiLnNldE9wdGlvbign
YnVuZGxlJyxmYWxzZSk7cmV0dXJuIGZhbHNlO312YXIgYT1iLnVyaS5nZXRQYXRo
KCk7aWYoIUFzeW5jUmVxdWVzdC5fYnVuZGxlVGltZXIpQXN5bmNSZXF1ZXN0Ll9i
dW5kbGVUaW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7QXN5bmNSZXF1ZXN0Ll9z
ZW5kQnVuZGxlZFJlcXVlc3RzKCk7fSwwKTtBc3luY1JlcXVlc3QuX2FsbEJ1bmRs
ZWRSZXF1ZXN0cy5wdXNoKFthLGJdKTtyZXR1cm4gdHJ1ZTt9LF9zZW5kQnVuZGxl
ZFJlcXVlc3RzOmZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KEFzeW5jUmVxdWVzdC5f
YnVuZGxlVGltZXIpO0FzeW5jUmVxdWVzdC5fYnVuZGxlVGltZXI9bnVsbDt2YXIg
YT1Bc3luY1JlcXVlc3QuX2FsbEJ1bmRsZWRSZXF1ZXN0cztBc3luY1JlcXVlc3Qu
X2FsbEJ1bmRsZWRSZXF1ZXN0cz1bXTt2YXIgZT17fTtjb3B5X3Byb3BlcnRpZXMo
ZSxBc3luY1JlcXVlc3QuX2J1bmRsZWRSZXF1ZXN0UHJvcGVydGllcyk7QXN5bmNS
ZXF1ZXN0Ll9idW5kbGVkUmVxdWVzdFByb3BlcnRpZXM9e307aWYoaXNfZW1wdHko
ZSkmJmEubGVuZ3RoPT0xKXt2YXIgZz1hWzBdWzFdO2cuc2V0T3B0aW9uKCdidW5k
bGUnLGZhbHNlKS5zZW5kKCk7cmV0dXJuIGc7fXZhciBkPWZ1bmN0aW9uKCl7ZS5j
YWxsYmFjayYmZS5jYWxsYmFjaygpO307aWYoYS5sZW5ndGg9PT0wKXtkKCk7cmV0
dXJuIG51bGw7fXZhciBiPVtdO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWIu
cHVzaChbYVtjXVswXSxVUkkuaW1wbG9kZVF1ZXJ5KGFbY11bMV0uZGF0YSldKTt2
YXIgZj17ZGF0YTpifTtpZihlLmV4dHJhX2RhdGEpY29weV9wcm9wZXJ0aWVzKGYs
ZS5leHRyYV9kYXRhKTt2YXIgZz1uZXcgQXN5bmNSZXF1ZXN0KCk7Zy5zZXRVUkko
Jy9hamF4L3Byb3h5LnBocCcpLnNldERhdGEoZikuc2V0TWV0aG9kKCdQT1NUJyku
c2V0SW5pdGlhbEhhbmRsZXIoZS5vbkluaXRpYWxSZXNwb25zZXx8YmFnb2YodHJ1
ZSkpLnNldEFsbG93Q3Jvc3NQYWdlVHJhbnNpdGlvbih0cnVlKS5zZXRIYW5kbGVy
KGZ1bmN0aW9uKGwpe3ZhciBrPWwuZ2V0UGF5bG9hZCgpO3ZhciBuPWsucmVzcG9u
c2VzO2lmKG4ubGVuZ3RoIT1hLmxlbmd0aCl7cmV0dXJuO31lbHNlIGZvcih2YXIg
aT0wO2k8YS5sZW5ndGg7aSsrKXt2YXIgaj1hW2ldWzBdO3ZhciBtPWFbaV1bMV07
bS5pZD10aGlzLmlkO2lmKG5baV1bMF0hPWope20uaW52b2tlUmVzcG9uc2VIYW5k
bGVyKHt0cmFuc3BvcnRFcnJvcjonV3JvbmcgcmVzcG9uc2Ugb3JkZXIgaW4gYnVu
ZGxlZCByZXF1ZXN0IHRvICcran0pO2NvbnRpbnVlO312YXIgaD1tLmludGVycHJl
dFJlc3BvbnNlKG5baV1bMV0pO20uaW52b2tlUmVzcG9uc2VIYW5kbGVyKGgpO319
KS5zZXRUcmFuc3BvcnRFcnJvckhhbmRsZXIoZnVuY3Rpb24obSl7dmFyIGs9W107
dmFyIGk9e3RyYW5zcG9ydEVycm9yOm0uZXJyb3JEZXNjcmlwdGlvbn07Zm9yKHZh
ciBoPTA7aDxhLmxlbmd0aDtoKyspe3ZhciBqPWFbaF1bMF07dmFyIGw9YVtoXVsx
XTtrLnB1c2goaik7bC5pZD10aGlzLmlkO2wuaW52b2tlUmVzcG9uc2VIYW5kbGVy
KGkpO319KS5zZXRGaW5hbGx5SGFuZGxlcihmdW5jdGlvbihoKXtkKCk7fSkuc2Vu
ZCgpO3JldHVybiBnO30sYm9vdHN0cmFwOmZ1bmN0aW9uKGMsYixkKXt2YXIgZT0n
R0VUJzt2YXIgZj10cnVlO3ZhciBhPXt9O2lmKGR8fChiJiZiLnJlbD09J2FzeW5j
LXBvc3QnKSl7ZT0nUE9TVCc7Zj1mYWxzZTtpZihjKXtjPVVSSShjKTthPWMuZ2V0
UXVlcnlEYXRhKCk7Yy5zZXRRdWVyeURhdGEoe30pO319dmFyIGc9UGFyZW50LmJ5
Q2xhc3MoYiwnc3RhdF9lbGVtJyl8fGI7aWYoZyYmQ1NTLmhhc0NsYXNzKGcsJ2Fz
eW5jX3NhdmluZycpKXJldHVybiBmYWxzZTtuZXcgQXN5bmNSZXF1ZXN0KGMpLnNl
dFJlYWRPbmx5KGYpLnNldE1ldGhvZChlKS5zZXREYXRhKGEpLnNldE5lY3Rhck1v
ZHVsZURhdGFTYWZlKGIpLnNldFN0YXR1c0VsZW1lbnQoZykuc2V0UmVsYXRpdmVU
byhiKS5zZW5kKCk7cmV0dXJuIGZhbHNlO30scG9zdDpmdW5jdGlvbihiLGEpe25l
dyBBc3luY1JlcXVlc3QoYikuc2V0UmVhZE9ubHkoZmFsc2UpLnNldE1ldGhvZCgn
UE9TVCcpLnNldERhdGEoYSkuc2VuZCgpO3JldHVybiBmYWxzZTt9LGNsZWFyQ2Fj
aGU6ZnVuY3Rpb24oKXtBc3luY1JlcXVlc3QuX3JlcXNDYWNoZT17fTt9LGdldExh
c3RJZDpmdW5jdGlvbigpe3JldHVybiBBc3luY1JlcXVlc3QuX2xhc3RfaWQ7fSxf
SlNPTlBSZWNlaXZlcnM6e30sX2FsbEJ1bmRsZWRSZXF1ZXN0czpbXSxfYnVuZGxl
ZFJlcXVlc3RQcm9wZXJ0aWVzOnt9LF9idW5kbGVUaW1lcjpudWxsLHN1cHByZXNz
T25sb2FkVG9rZW46e30sUkVQTEFZQUJMRV9BSkFYOidhamF4L3JlcGxheWFibGUn
LF9sYXN0X2lkOjIsX2lkX3RocmVzaG9sZDoyLF9yZXFzQ2FjaGU6e30sX2luZmxp
Z2h0OltdLF9pbmZsaWdodEFkZDpiYWdvZmhvbGRpbmcsX2luZmxpZ2h0UHVyZ2U6
YmFnb2Zob2xkaW5nLF9pbmZsaWdodEVuYWJsZTpmdW5jdGlvbigpe2lmKHVhLmll
KCkpe2NvcHlfcHJvcGVydGllcyhBc3luY1JlcXVlc3Qse19pbmZsaWdodEFkZDpm
dW5jdGlvbihhKXt0aGlzLl9pbmZsaWdodC5wdXNoKGEpO30sX2luZmxpZ2h0UHVy
Z2U6ZnVuY3Rpb24oKXtBc3luY1JlcXVlc3QuX2luZmxpZ2h0PUFzeW5jUmVxdWVz
dC5faW5mbGlnaHQuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhLnRyYW5zcG9y
dCYmYS50cmFuc3BvcnQucmVhZHlTdGF0ZTw0O30pO319KTtvbnVubG9hZFJlZ2lz
dGVyKGZ1bmN0aW9uKCl7QXN5bmNSZXF1ZXN0Ll9pbmZsaWdodC5lYWNoKGZ1bmN0
aW9uKGEpe2lmKGEudHJhbnNwb3J0JiZhLnRyYW5zcG9ydC5yZWFkeVN0YXRlPDQp
e2EudHJhbnNwb3J0LmFib3J0KCk7ZGVsZXRlIGEudHJhbnNwb3J0O319KTt9KTt9
fX0pO2NvcHlfcHJvcGVydGllcyhBc3luY1JlcXVlc3QucHJvdG90eXBlLHtzZXRN
ZXRob2Q6ZnVuY3Rpb24oYSl7dGhpcy5tZXRob2Q9YS50b1N0cmluZygpLnRvVXBw
ZXJDYXNlKCk7cmV0dXJuIHRoaXM7fSxnZXRNZXRob2Q6ZnVuY3Rpb24oKXtyZXR1
cm4gdGhpcy5tZXRob2Q7fSxzZXREYXRhOmZ1bmN0aW9uKGEpe3RoaXMuZGF0YT1h
O3JldHVybiB0aGlzO30sZ2V0RGF0YTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRh
dGE7fSxzZXRDb250ZXh0RGF0YTpmdW5jdGlvbihiLGMsYSl7YT1hPT09dW5kZWZp
bmVkP3RydWU6YTtpZihhKXRoaXMuY29udGV4dFsnX2xvZ18nK2JdPWM7cmV0dXJu
IHRoaXM7fSxzZXRVUkk6ZnVuY3Rpb24oYSl7dmFyIGI9VVJJKGEpO2lmKHRoaXMu
Z2V0T3B0aW9uKCd1c2VJZnJhbWVUcmFuc3BvcnQnKSYmIWIuaXNGYWNlYm9va1VS
SSgpKXJldHVybiB0aGlzO2lmKCF0aGlzLmdldE9wdGlvbignanNvbnAnKSYmIXRo
aXMuZ2V0T3B0aW9uKCd1c2VJZnJhbWVUcmFuc3BvcnQnKSYmIWIuaXNTYW1lT3Jp
Z2luKCkpcmV0dXJuIHRoaXM7aWYoIWF8fGIudG9TdHJpbmcoKT09PScnKXtpZih3
aW5kb3cuc2VuZF9lcnJvcl9zaWduYWwmJndpbmRvdy5nZXRfZXJyb3Jfc3RhY2sp
e3NlbmRfZXJyb3Jfc2lnbmFsKCdhc3luY19lcnJvcicsJzEwMTM6LTowOi06Jyt3
aW5kb3cubG9jYXRpb24uaHJlZik7c2VuZF9lcnJvcl9zaWduYWwoJ2FzeW5jX3hw
b3J0X3N0YWNrJywnMTAxMzonK3dpbmRvdy5sb2NhdGlvbi5ocmVmKyc6OicrZ2V0
X2Vycm9yX3N0YWNrKCkpO31yZXR1cm4gdGhpczt9dGhpcy51cmk9YjtyZXR1cm4g
dGhpczt9LGdldFVSSTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVyaS50b1N0cmlu
ZygpO30sc2V0SW5pdGlhbEhhbmRsZXI6ZnVuY3Rpb24oYSl7dGhpcy5pbml0aWFs
SGFuZGxlcj1hO3JldHVybiB0aGlzO30sc2V0SGFuZGxlcjpmdW5jdGlvbihhKXtp
ZighKHR5cGVvZihhKSE9J2Z1bmN0aW9uJykpdGhpcy5oYW5kbGVyPWE7cmV0dXJu
IHRoaXM7fSxnZXRIYW5kbGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFuZGxl
cjt9LHNldEVycm9ySGFuZGxlcjpmdW5jdGlvbihhKXtpZighKHR5cGVvZihhKSE9
J2Z1bmN0aW9uJykpdGhpcy5lcnJvckhhbmRsZXI9YTtyZXR1cm4gdGhpczt9LHNl
dFRyYW5zcG9ydEVycm9ySGFuZGxlcjpmdW5jdGlvbihhKXt0aGlzLnRyYW5zcG9y
dEVycm9ySGFuZGxlcj1hO3JldHVybiB0aGlzO30sZ2V0RXJyb3JIYW5kbGVyOmZ1
bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXJyb3JIYW5kbGVyO30sZ2V0VHJhbnNwb3J0
RXJyb3JIYW5kbGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNwb3J0RXJy
b3JIYW5kbGVyO30sc2V0VGltZW91dEhhbmRsZXI6ZnVuY3Rpb24oYixhKXtpZigh
KHR5cGVvZihhKSE9J2Z1bmN0aW9uJykpe3RoaXMudGltZW91dD1iO3RoaXMudGlt
ZW91dEhhbmRsZXI9YTt9cmV0dXJuIHRoaXM7fSxyZXNldFRpbWVvdXQ6ZnVuY3Rp
b24oYSl7aWYoISh0aGlzLnRpbWVvdXRIYW5kbGVyPT09bnVsbCkpaWYoYT09PW51
bGwpe3RoaXMudGltZW91dD1udWxsO2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKTt0
aGlzLnRpbWVyPW51bGw7fWVsc2V7dGhpcy50aW1lb3V0PWE7Y2xlYXJUaW1lb3V0
KHRoaXMudGltZXIpO3RoaXMudGltZXI9dGhpcy5faGFuZGxlVGltZW91dC5iaW5k
KHRoaXMpLmRlZmVyKHRoaXMudGltZW91dCk7fXJldHVybiB0aGlzO30sX2hhbmRs
ZVRpbWVvdXQ6ZnVuY3Rpb24oKXt0aGlzLmFiYW5kb24oKTt0aGlzLnRpbWVvdXRI
YW5kbGVyKHRoaXMpO30sc2V0TmV3U2VyaWFsOmZ1bmN0aW9uKCl7dGhpcy5pZD0r
K0FzeW5jUmVxdWVzdC5fbGFzdF9pZDtyZXR1cm4gdGhpczt9LHNldEZpbmFsbHlI
YW5kbGVyOmZ1bmN0aW9uKGEpe3RoaXMuZmluYWxseUhhbmRsZXI9YTtyZXR1cm4g
dGhpczt9LHNldFNlcnZlckRpYWxvZ0NhbmNlbEhhbmRsZXI6ZnVuY3Rpb24oYSl7
dGhpcy5zZXJ2ZXJEaWFsb2dDYW5jZWxIYW5kbGVyPWE7cmV0dXJuIHRoaXM7fSxz
ZXRQcmVCb290bG9hZEhhbmRsZXI6ZnVuY3Rpb24oYSl7dGhpcy5wcmVCb290bG9h
ZEhhbmRsZXI9YTtyZXR1cm4gdGhpczt9LHNldFJlYWRPbmx5OmZ1bmN0aW9uKGEp
e2lmKCEodHlwZW9mKGEpIT0nYm9vbGVhbicpKXRoaXMucmVhZE9ubHk9YTtyZXR1
cm4gdGhpczt9LHNldEZCTUxGb3JtOmZ1bmN0aW9uKCl7dGhpcy53cml0ZVJlcXVp
cmVkUGFyYW1zPVsiZmJfc2lnIl07cmV0dXJuIHRoaXM7fSxnZXRSZWFkT25seTpm
dW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRPbmx5O30sc2V0UmVsYXRpdmVUbzpm
dW5jdGlvbihhKXt0aGlzLnJlbGF0aXZlVG89YTtyZXR1cm4gdGhpczt9LGdldFJl
bGF0aXZlVG86ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWxhdGl2ZVRvO30sc2V0
U3RhdHVzQ2xhc3M6ZnVuY3Rpb24oYSl7dGhpcy5zdGF0dXNDbGFzcz1hO3JldHVy
biB0aGlzO30sc2V0U3RhdHVzRWxlbWVudDpmdW5jdGlvbihhKXt0aGlzLnN0YXR1
c0VsZW1lbnQ9YTtyZXR1cm4gdGhpczt9LGdldFN0YXR1c0VsZW1lbnQ6ZnVuY3Rp
b24oKXtyZXR1cm4gZ2UodGhpcy5zdGF0dXNFbGVtZW50KTt9LGlzUmVsZXZhbnQ6
ZnVuY3Rpb24oKXtpZih0aGlzLl9hbGxvd0Nyb3NzUGFnZVRyYW5zaXRpb24pcmV0
dXJuIHRydWU7aWYoIXRoaXMuaWQpcmV0dXJuIHRydWU7cmV0dXJuIHRoaXMuaWQ+
QXN5bmNSZXF1ZXN0Ll9pZF90aHJlc2hvbGQ7fSxjbGVhclN0YXR1c0luZGljYXRv
cjpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0U3RhdHVzRWxlbWVudCgpO2lmKGEp
e0NTUy5yZW1vdmVDbGFzcyhhLCdhc3luY19zYXZpbmcnKTtDU1MucmVtb3ZlQ2xh
c3MoYSx0aGlzLnN0YXR1c0NsYXNzKTt9fSxhZGRTdGF0dXNJbmRpY2F0b3I6ZnVu
Y3Rpb24oKXt2YXIgYT10aGlzLmdldFN0YXR1c0VsZW1lbnQoKTtpZihhKXtDU1Mu
YWRkQ2xhc3MoYSwnYXN5bmNfc2F2aW5nJyk7Q1NTLmFkZENsYXNzKGEsdGhpcy5z
dGF0dXNDbGFzcyk7fX0sc3BlY2lmaWVzV3JpdGVSZXF1aXJlZFBhcmFtczpmdW5j
dGlvbigpe3JldHVybiB0aGlzLndyaXRlUmVxdWlyZWRQYXJhbXMuZXZlcnkoZnVu
Y3Rpb24oYSl7dGhpcy5kYXRhW2FdPXRoaXMuZGF0YVthXXx8RW52W2FdfHwoZ2Uo
YSl8fHt9KS52YWx1ZTtpZih0aGlzLmRhdGFbYV0hPT11bmRlZmluZWQpcmV0dXJu
IHRydWU7cmV0dXJuIGZhbHNlO30sdGhpcyk7fSxzZXRSZXBsYXlhYmxlOmZ1bmN0
aW9uKGIsYSl7dGhpcy5fcmVwbGF5YWJsZT1iO3RoaXMuX3JlcGxheUtleT1hfHwn
JztyZXR1cm4gdGhpczt9LHNldE9wdGlvbjpmdW5jdGlvbihhLGIpe2lmKHR5cGVv
Zih0aGlzLm9wdGlvblthXSkhPSd1bmRlZmluZWQnKXRoaXMub3B0aW9uW2FdPWI7
cmV0dXJuIHRoaXM7fSxnZXRPcHRpb246ZnVuY3Rpb24oYSl7dHlwZW9mKHRoaXMu
b3B0aW9uW2FdKT09J3VuZGVmaW5lZCc7cmV0dXJuIHRoaXMub3B0aW9uW2FdO30s
YWJvcnQ6ZnVuY3Rpb24oKXtpZih0aGlzLnRyYW5zcG9ydCl7dmFyIGE9dGhpcy5n
ZXRUcmFuc3BvcnRFcnJvckhhbmRsZXIoKTt0aGlzLnNldE9wdGlvbignc3VwcHJl
c3NFcnJvckFsZXJ0cycsdHJ1ZSk7dGhpcy5zZXRUcmFuc3BvcnRFcnJvckhhbmRs
ZXIoYmFnb2Zob2xkaW5nKTt0aGlzLl9yZXF1ZXN0QWJvcnRlZD0xO3RoaXMudHJh
bnNwb3J0LmFib3J0KCk7dGhpcy5zZXRUcmFuc3BvcnRFcnJvckhhbmRsZXIoYSk7
fX0sYWJhbmRvbjpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKTt0
aGlzLnNldE9wdGlvbignc3VwcHJlc3NFcnJvckFsZXJ0cycsdHJ1ZSkuc2V0SGFu
ZGxlcihiYWdvZmhvbGRpbmcpLnNldEVycm9ySGFuZGxlcihiYWdvZmhvbGRpbmcp
LnNldFRyYW5zcG9ydEVycm9ySGFuZGxlcihiYWdvZmhvbGRpbmcpO2lmKHRoaXMu
dHJhbnNwb3J0KXt0aGlzLl9yZXF1ZXN0QWJvcnRlZD0xO3RoaXMudHJhbnNwb3J0
LmFib3J0KCk7fX0sc2V0TmVjdGFyRGF0YTpmdW5jdGlvbihhKXtpZihhKXtpZih0
aGlzLmRhdGEubmN0cj09PXVuZGVmaW5lZCl0aGlzLmRhdGEubmN0cj17fTtjb3B5
X3Byb3BlcnRpZXModGhpcy5kYXRhLm5jdHIsYSk7fXJldHVybiB0aGlzO30sc2V0
TmVjdGFyTW9kdWxlRGF0YVNhZmU6ZnVuY3Rpb24oYSl7aWYodGhpcy5zZXROZWN0
YXJNb2R1bGVEYXRhKXRoaXMuc2V0TmVjdGFyTW9kdWxlRGF0YShhKTtyZXR1cm4g
dGhpczt9LHNldE5lY3RhckltcHJlc3Npb25JZFNhZmU6ZnVuY3Rpb24oKXtpZih0
aGlzLnNldE5lY3RhckltcHJlc3Npb25JZCl0aGlzLnNldE5lY3RhckltcHJlc3Np
b25JZCgpO3JldHVybiB0aGlzO30sc2V0UHJlZmV0Y2g6ZnVuY3Rpb24oYSl7dGhp
cy5faXNQcmVmZXRjaD1hO3RoaXMuc2V0QWxsb3dDcm9zc1BhZ2VUcmFuc2l0aW9u
KHRydWUpO3JldHVybiB0aGlzO30sc2V0QWxsb3dDcm9zc1BhZ2VUcmFuc2l0aW9u
OmZ1bmN0aW9uKGEpe3RoaXMuX2FsbG93Q3Jvc3NQYWdlVHJhbnNpdGlvbj0hIWE7
cmV0dXJuIHRoaXM7fSxzZW5kOmZ1bmN0aW9uKGMpe2lmKHRoaXMuX2NoZWNrQ2Fj
aGUmJnRoaXMuX2NoZWNrQ2FjaGUoKSlyZXR1cm4gdHJ1ZTtjPWN8fGZhbHNlO2lm
KCF0aGlzLnVyaSlyZXR1cm4gZmFsc2U7IXRoaXMuZXJyb3JIYW5kbGVyJiYhdGhp
cy5nZXRPcHRpb24oJ3N1cHByZXNzRXJyb3JIYW5kbGVyV2FybmluZycpO2lmKHRo
aXMuZ2V0T3B0aW9uKCdqc29ucCcpJiZ0aGlzLm1ldGhvZCE9J0dFVCcpdGhpcy5z
ZXRNZXRob2QoJ0dFVCcpO2lmKHRoaXMuZ2V0T3B0aW9uKCd1c2VJZnJhbWVUcmFu
c3BvcnQnKSYmdGhpcy5tZXRob2QhPSdHRVQnKXRoaXMuc2V0TWV0aG9kKCdHRVQn
KTt0aGlzLnRpbWVvdXRIYW5kbGVyIT09bnVsbCYmKHRoaXMuZ2V0T3B0aW9uKCdq
c29ucCcpfHx0aGlzLmdldE9wdGlvbigndXNlSWZyYW1lVHJhbnNwb3J0JykpO2lm
KCF0aGlzLmdldFJlYWRPbmx5KCkpe3RoaXMuc3BlY2lmaWVzV3JpdGVSZXF1aXJl
ZFBhcmFtcygpO2lmKHRoaXMubWV0aG9kIT0nUE9TVCcpcmV0dXJuIGZhbHNlO31p
Zih0aGlzLm1ldGhvZD09J1BPU1QnJiZ0aGlzLmdldE9wdGlvbigndGZiRW5kcG9p
bnQnKSl7dGhpcy5kYXRhLmZiX2R0c2c9RW52LmZiX2R0c2c7dGhpcy5kYXRhLmxz
ZD1nZXRDb29raWUoJ2xzZCcpO310aGlzLl9yZXBsYXlhYmxlPSghdGhpcy5nZXRS
ZWFkT25seSgpJiZ0aGlzLl9yZXBsYXlhYmxlIT09ZmFsc2UpfHx0aGlzLl9yZXBs
YXlhYmxlO2lmKHRoaXMuX3JlcGxheWFibGUpQXJiaXRlci5pbmZvcm0oQXN5bmNS
ZXF1ZXN0LlJFUExBWUFCTEVfQUpBWCx0aGlzKTtpZighaXNfZW1wdHkodGhpcy5j
b250ZXh0KSYmdGhpcy5nZXRPcHRpb24oJ3RmYkVuZHBvaW50Jykpe2NvcHlfcHJv
cGVydGllcyh0aGlzLmRhdGEsdGhpcy5jb250ZXh0KTt0aGlzLmRhdGEuYWpheF9s
b2c9MTt9aWYoIXRoaXMuZ2V0UmVhZE9ubHkoKSYmdGhpcy5nZXRPcHRpb24oJ3Rm
YkVuZHBvaW50JykmJnRoaXMubWV0aG9kPT0nUE9TVCcmJnRoaXMuZGF0YS5wb3N0
X2Zvcm1faWRfc291cmNlPT09dW5kZWZpbmVkKXRoaXMuZGF0YS5wb3N0X2Zvcm1f
aWRfc291cmNlPSdBc3luY1JlcXVlc3QnO2lmKHdpbmRvdy5FbnYpdGhpcy5kYXRh
Ll9fdXNlcj1FbnYudXNlcjtpZih0aGlzLmdldE9wdGlvbignYnVuZGxlJykmJkFz
eW5jUmVxdWVzdC5fYnVuZGxlUmVxdWVzdCh0aGlzKSlyZXR1cm4gdHJ1ZTt0aGlz
LnNldE5ld1NlcmlhbCgpO2lmKHRoaXMuZ2V0T3B0aW9uKCd0ZmJFbmRwb2ludCcp
KXt0aGlzLnVyaS5hZGRRdWVyeURhdGEoe19fYToxfSk7aWYoRW52LmZiX2lzYil0
aGlzLnVyaS5hZGRRdWVyeURhdGEoe2ZiX2lzYjpFbnYuZmJfaXNifSk7fXRoaXMu
ZmluYWxseUhhbmRsZXI9YXN5bmNfY2FsbGJhY2sodGhpcy5maW5hbGx5SGFuZGxl
ciwnZmluYWwnKTt2YXIgaCxkO2lmKHRoaXMubWV0aG9kPT0nR0VUJyl7aD10aGlz
LnVyaS5hZGRRdWVyeURhdGEodGhpcy5kYXRhKS50b1N0cmluZygpO2Q9Jyc7fWVs
c2V7aD10aGlzLnVyaS50b1N0cmluZygpO2Q9VVJJLmltcGxvZGVRdWVyeSh0aGlz
LmRhdGEpO31pZih0aGlzLmdldE9wdGlvbignanNvbnAnKXx8dGhpcy5nZXRPcHRp
b24oJ3VzZUlmcmFtZVRyYW5zcG9ydCcpKXtoPXRoaXMudXJpLmFkZFF1ZXJ5RGF0
YSh7X19hOnRoaXMuaWR9KS50b1N0cmluZygpO0FzeW5jUmVxdWVzdC5fSlNPTlBS
ZWNlaXZlcnNbdGhpcy5pZF09YXN5bmNfY2FsbGJhY2soYmluZCh0aGlzLCdvbmpz
b25wcmVzcG9uc2UnKSwnanNvbicpO2lmKHRoaXMuZ2V0T3B0aW9uKCdqc29ucCcp
KXsoZnVuY3Rpb24oKXtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKCROKCdzY3Jp
cHQnLHtzcmM6aCx0eXBlOiJ0ZXh0L2phdmFzY3JpcHQifSkpO30pLmJpbmQodGhp
cykuZGVmZXIoKTt9ZWxzZXt2YXIgZT17cG9zaXRpb246J2Fic29sdXRlJyx0b3A6
Jy05OTk5OTk5cHgnLHdpZHRoOic4MHB4JyxoZWlnaHQ6JzgwcHgnfTt0aGlzLnRy
YW5zcG9ydElmcmFtZT0kTignaWZyYW1lJyx7c3JjOiJqYXZhc2NyaXB0OicnIixz
dHlsZTplfSk7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLnRyYW5zcG9y
dElmcmFtZSk7dGhpcy50cmFuc3BvcnRJZnJhbWUuc3JjPWg7fXJldHVybiB0cnVl
O31pZih0aGlzLnRyYW5zcG9ydClyZXR1cm4gZmFsc2U7dmFyIGc9bnVsbDt0cnl7
Zz1uZXcgWE1MSHR0cFJlcXVlc3QoKTt9Y2F0Y2goYil7fWlmKCFnKXRyeXtnPW5l
dyBBY3RpdmVYT2JqZWN0KCJNc3htbDIuWE1MSFRUUCIpO31jYXRjaChiKXt9aWYo
IWcpdHJ5e2c9bmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIik7
fWNhdGNoKGIpe31pZighZylyZXR1cm4gZmFsc2U7Zy5vbnJlYWR5c3RhdGVjaGFu
Z2U9YXN5bmNfY2FsbGJhY2soYmluZCh0aGlzLCdvbnN0YXRlY2hhbmdlJyksJ3ho
cicpO2lmKCFjKXRoaXMucmVtYWluaW5nUmV0cmllcz10aGlzLmdldE9wdGlvbign
cmV0cmllcycpO2lmKHdpbmRvdy5zZW5kX2Vycm9yX3NpZ25hbHx8d2luZG93LkFy
Yml0ZXJNb25pdG9yKXRoaXMuX3NlbmRUaW1lU3RhbXA9dGhpcy5fc2VuZFRpbWVT
dGFtcHx8KCtuZXcgRGF0ZSgpKTt0aGlzLnRyYW5zcG9ydD1nO3RyeXt0aGlzLnRy
YW5zcG9ydC5vcGVuKHRoaXMubWV0aG9kLGgsdGhpcy5nZXRPcHRpb24oJ2FzeW5j
aHJvbm91cycpKTt9Y2F0Y2goYSl7cmV0dXJuIGZhbHNlO312YXIgZj1lbnZfZ2V0
KCdzdm5fcmV2Jyk7aWYoZil0aGlzLnRyYW5zcG9ydC5zZXRSZXF1ZXN0SGVhZGVy
KCdYLVNWTi1SZXYnLFN0cmluZyhmKSk7aWYodGhpcy5tZXRob2Q9PSdQT1NUJyl0
aGlzLnRyYW5zcG9ydC5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LVR5cGUnLCdh
cHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKTt0aGlzLmFkZFN0YXR1
c0luZGljYXRvcigpO3RoaXMudHJhbnNwb3J0LnNlbmQoZCk7aWYodGhpcy50aW1l
b3V0IT09bnVsbCl0aGlzLnJlc2V0VGltZW91dCh0aGlzLnRpbWVvdXQpO0FzeW5j
UmVxdWVzdC5faW5mbGlnaHRBZGQodGhpcyk7cmV0dXJuIHRydWU7fSxfZGlzcGxh
eVNlcnZlckRpYWxvZzpmdW5jdGlvbihjLGIpe3ZhciBhPW5ldyBEaWFsb2coYyk7
aWYoYilhLnNldEhhbmRsZXIodGhpcy5fZGlzcGxheUNvbmZpcm1hdGlvbkhhbmRs
ZXIuYmluZCh0aGlzLGEpKTthLnNldENhbmNlbEhhbmRsZXIoZnVuY3Rpb24oKXt0
aGlzLnNlcnZlckRpYWxvZ0NhbmNlbEhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVu
dHMpO3RoaXMuZmluYWxseUhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpO30u
YmluZCh0aGlzKSkuc2V0Q2xvc2VIYW5kbGVyKHRoaXMuZmluYWxseUhhbmRsZXIu
YmluZCh0aGlzKSkuc2hvdygpO30sX2Rpc3BsYXlDb25maXJtYXRpb25IYW5kbGVy
OmZ1bmN0aW9uKGEpe3RoaXMuZGF0YS5jb25maXJtZWQ9MTtjb3B5X3Byb3BlcnRp
ZXModGhpcy5kYXRhLGEuZ2V0Rm9ybURhdGEoKSk7dGhpcy5zZW5kKCk7fX0pO2Z1
bmN0aW9uIEFzeW5jUmVzcG9uc2UoYixhKXtjb3B5X3Byb3BlcnRpZXModGhpcyx7
ZXJyb3I6MCxlcnJvclN1bW1hcnk6bnVsbCxlcnJvckRlc2NyaXB0aW9uOm51bGws
b25sb2FkOm51bGwscmVwbGF5OmZhbHNlLHBheWxvYWQ6YXx8bnVsbCxyZXF1ZXN0
OmJ8fG51bGwsc2lsZW50RXJyb3I6ZmFsc2UsaXNfbGFzdDp0cnVlfSk7cmV0dXJu
IHRoaXM7fWNvcHlfcHJvcGVydGllcyhBc3luY1Jlc3BvbnNlLHtkZWZhdWx0RXJy
b3JIYW5kbGVyOmZ1bmN0aW9uKGIpe3RyeXtpZighYi5zaWxlbnRFcnJvcil7QXN5
bmNSZXNwb25zZS52ZXJib3NlRXJyb3JIYW5kbGVyKGIpO31lbHNlIGIubG9nRXJy
b3JCeUdyb3VwKCdzaWxlbnQnLDEwKTt9Y2F0Y2goYSl7YWxlcnQoYik7fX0sdmVy
Ym9zZUVycm9ySGFuZGxlcjpmdW5jdGlvbihiKXt0cnl7dmFyIHN1bW1hcnk9Yi5n
ZXRFcnJvclN1bW1hcnkoKTt2YXIgZGVzYz1iLmdldEVycm9yRGVzY3JpcHRpb24o
KTtiLmxvZ0Vycm9yQnlHcm91cCgncG9wdXAnLDEwKTtpZihiLnNpbGVudEVycm9y
JiZkZXNjPT0nJylkZXNjPV90eCgiU2UgaGEgcHJvZHVjaWRvIHVuIGVycm9yIHkg
ZXN0YW1vcyB0cmFiYWphbmRvIHBhcmEgYXJyZWdsYXJsbyBlbiBjdWFudG8gc2Vh
IHBvc2libGUuIFByb250byBwb2RyXHUwMGUxcyB2b2x2ZXIgYSBpbnRlbnRhcmxv
LiIpO0Vycm9yRGlhbG9nLnNob3coc3VtbWFyeSxkZXNjKTt9Y2F0Y2goYSl7YWxl
cnQoYik7fX19KTtjb3B5X3Byb3BlcnRpZXMoQXN5bmNSZXNwb25zZS5wcm90b3R5
cGUse2dldFJlcXVlc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZXF1ZXN0O30s
Z2V0UGF5bG9hZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBheWxvYWQ7fSxnZXRF
cnJvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVycm9yO30sZ2V0RXJyb3JTdW1t
YXJ5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXJyb3JTdW1tYXJ5O30sc2V0RXJy
b3JTdW1tYXJ5OmZ1bmN0aW9uKGEpe2E9KGE9PT11bmRlZmluZWQ/bnVsbDphKTt0
aGlzLmVycm9yU3VtbWFyeT1hO3JldHVybiB0aGlzO30sZ2V0RXJyb3JEZXNjcmlw
dGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVycm9yRGVzY3JpcHRpb247fSxn
ZXRFcnJvcklzV2FybmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVycm9ySXNX
YXJuaW5nO30sc2V0UmVwbGF5OmZ1bmN0aW9uKGEpe2E9KGE9PT11bmRlZmluZWQ/
dHJ1ZTphKTt0aGlzLnJlcGxheT0hIWE7cmV0dXJuIHRoaXM7fSxpc1JlcGxheTpm
dW5jdGlvbigpe3JldHVybiB0aGlzLnJlcGxheTt9LGxvZ0Vycm9yOmZ1bmN0aW9u
KGEsYyl7aWYod2luZG93LnNlbmRfZXJyb3Jfc2lnbmFsKXtjPShjPT09dW5kZWZp
bmVkPycnOignOicrYykpO3ZhciBkPXRoaXMucmVxdWVzdC5nZXRVUkkoKTt2YXIg
Yj10aGlzLmVycm9yKyc6JysoZW52X2dldCgndmlwJyl8fCctJykrYysnOicrKGR8
fCctJyk7aWYoZCYmZC5pbmRleE9mKCdzY3JpYmVfZW5kcG9pbnQucGhwJykhPS0x
KWE9J2FzeW5jX2Vycm9yX2RvdWJsZSc7c2VuZF9lcnJvcl9zaWduYWwoYSxiKTt9
fSxsb2dFcnJvckJ5R3JvdXA6ZnVuY3Rpb24oYixhKXtpZihNYXRoLmZsb29yKE1h
dGgucmFuZG9tKCkqYSk9PTApaWYodGhpcy5lcnJvcj09MTM1NzAxMHx8dGhpcy5l
cnJvcjwxNTAwMCl7dGhpcy5sb2dFcnJvcignYXN5bmNfZXJyb3Jfb29wc18nK2Ip
O31lbHNlIHRoaXMubG9nRXJyb3IoJ2FzeW5jX2Vycm9yX2xvZ2ljXycrYik7fX0p
OwpmdW5jdGlvbiBVbnRydXN0ZWRMaW5rKGEsZCxiLGMpe3RoaXMuZG9tPWE7dGhp
cy51cmw9YS5ocmVmO3RoaXMuaGFzaD1kO3RoaXMuZnVuY19nZXRfcGFyYW1zPWN8
fGZ1bmN0aW9uKCl7cmV0dXJuIHt9O307RXZlbnQubGlzdGVuKHRoaXMuZG9tLCdj
bGljaycsdGhpcy5vbmNsaWNrLmJpbmQodGhpcykpO0V2ZW50Lmxpc3Rlbih0aGlz
LmRvbSwnbW91c2Vkb3duJyx0aGlzLm9ubW91c2Vkb3duLmJpbmQodGhpcykpO0V2
ZW50Lmxpc3Rlbih0aGlzLmRvbSwnbW91c2V1cCcsdGhpcy5vbm1vdXNldXAuYmlu
ZCh0aGlzKSk7RXZlbnQubGlzdGVuKHRoaXMuZG9tLCdtb3VzZW91dCcsdGhpcy5v
bm1vdXNlb3V0LmJpbmQodGhpcykpO3RoaXMub25tb3VzZWRvd24oJEUoYikpO31V
bnRydXN0ZWRMaW5rLmJvb3RzdHJhcD1mdW5jdGlvbihhLGQsYixjKXtpZihhLl9f
dW50cnVzdGVkKXJldHVybjthLl9fdW50cnVzdGVkPXRydWU7bmV3IFVudHJ1c3Rl
ZExpbmsoYSxkLGIsYyk7fTtVbnRydXN0ZWRMaW5rLnByb3RvdHlwZS5nZXRSZXdy
aXR0ZW5VUkk9ZnVuY3Rpb24oKXt2YXIgYT1jb3B5X3Byb3BlcnRpZXMoe3U6dGhp
cy51cmwsaDp0aGlzLmhhc2h9LHRoaXMuZnVuY19nZXRfcGFyYW1zKHRoaXMuZG9t
KSk7dmFyIGI9bmV3IFVSSSgnL2wucGhwJyk7cmV0dXJuIGIuc2V0UXVlcnlEYXRh
KGEpLnNldFN1YmRvbWFpbignd3d3Jykuc2V0UHJvdG9jb2woJ2h0dHAnKTt9O1Vu
dHJ1c3RlZExpbmsucHJvdG90eXBlLm9uY2xpY2s9ZnVuY3Rpb24oKXsoZnVuY3Rp
b24oKXt0aGlzLmRvbS5ocmVmPXRoaXMudXJsO30pLmJpbmQodGhpcykuZGVmZXIo
MTAwKTt0aGlzLmRvbS5ocmVmPXRoaXMuZ2V0UmV3cml0dGVuVVJJKCk7fTtVbnRy
dXN0ZWRMaW5rLnByb3RvdHlwZS5vbm1vdXNlZG93bj1mdW5jdGlvbihhKXtpZihh
LmJ1dHRvbj09Mil0aGlzLmRvbS5ocmVmPXRoaXMuZ2V0UmV3cml0dGVuVVJJKCk7
fTtVbnRydXN0ZWRMaW5rLnByb3RvdHlwZS5vbm1vdXNldXA9ZnVuY3Rpb24oKXt0
aGlzLmRvbS5ocmVmPXRoaXMuZ2V0UmV3cml0dGVuVVJJKCk7fTtVbnRydXN0ZWRM
aW5rLnByb3RvdHlwZS5vbm1vdXNlb3V0PWZ1bmN0aW9uKCl7dGhpcy5kb20uaHJl
Zj10aGlzLnVybDt9OwpmdW5jdGlvbiBFbGVtZW50Q29udHJvbGxlcigpe3RoaXMu
aGFuZGxlcnM9W1tdLFtdXTt9Y29weV9wcm9wZXJ0aWVzKEVsZW1lbnRDb250cm9s
bGVyLHtBTEw6MSxUQVJHRVRTOjIsTU9ESUZJRVJTOjQsQlVUVE9OUzo4fSk7RWxl
bWVudENvbnRyb2xsZXIucHJvdG90eXBlPXtpbml0aWFsaXplOmZ1bmN0aW9uKCl7
dGhpcy5pbml0aWFsaXplPWJhZ29maG9sZGluZztvbmxvYWRSZWdpc3Rlcih0aGlz
LnJlZ2lzdGVyLmJpbmQodGhpcykpO30saGFuZGxlOmZ1bmN0aW9uKGUsZXZlbnQs
YSl7YT1hfHxiYWdvZih0cnVlKTt2YXIgYj10aGlzLmhhbmRsZXJzWzBdLmNvbmNh
dCh0aGlzLmhhbmRsZXJzWzFdKTtmb3IodmFyIGM9MCxkPWIubGVuZ3RoO2M8ZDtj
KyspaWYoYShiW2NdLmZpbHRlcnMsZSxldmVudCkmJmJbY10uY2FsbGJhY2soZSxl
dmVudCk9PT1mYWxzZSlyZXR1cm4gZXZlbnQua2lsbCgpO30sX3JlZ2lzdGVySGFu
ZGxlcjpmdW5jdGlvbihiLGEsYyxkKXt0aGlzLmluaXRpYWxpemUoKTtiW2Q/J3Vu
c2hpZnQnOidwdXNoJ10oe2NhbGxiYWNrOmEsZmlsdGVyczpjfHwwfSk7fSxyZWdp
c3RlckhhbmRsZXI6ZnVuY3Rpb24oYSxiLGMpe3RoaXMuX3JlZ2lzdGVySGFuZGxl
cih0aGlzLmhhbmRsZXJzWzBdLGEsYixjKTt9LHJlZ2lzdGVyRmFsbGJhY2tIYW5k
bGVyOmZ1bmN0aW9uKGEsYixjKXt0aGlzLl9yZWdpc3RlckhhbmRsZXIodGhpcy5o
YW5kbGVyc1sxXSxhLGIsYyk7fX07dmFyIExpbmtDb250cm9sbGVyPW5ldyBFbGVt
ZW50Q29udHJvbGxlcigpO2NvcHlfcHJvcGVydGllcyhMaW5rQ29udHJvbGxlcix7
a2V5OidMaW5rQ29udHJvbGxlckhhbmRsZXInLHJlZ2lzdGVyOmZ1bmN0aW9uKCl7
RXZlbnQubGlzdGVuKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwnbW91c2Vkb3du
Jyx0aGlzLmhhbmRsZXIuYmluZCh0aGlzKSk7RXZlbnQubGlzdGVuKGRvY3VtZW50
LmRvY3VtZW50RWxlbWVudCwna2V5ZG93bicsdGhpcy5oYW5kbGVyLmJpbmQodGhp
cykpO30saGFuZGxlcjpmdW5jdGlvbihldmVudCl7dmFyIGI9UGFyZW50LmJ5VGFn
KGV2ZW50LmdldFRhcmdldCgpLCdhJyk7dmFyIGE9YiYmYi5nZXRBdHRyaWJ1dGUo
J2hyZWYnLDIpO2lmKCFhfHxiLnJlbHx8IXRoaXMudXNlc1dlYlByb3RvY29sKGEp
fHxEYXRhU3RvcmUuZ2V0KGIsdGhpcy5rZXkpKXJldHVybjtEYXRhU3RvcmUuc2V0
KGIsdGhpcy5rZXksRXZlbnQubGlzdGVuKGIsJ2NsaWNrJyxmdW5jdGlvbihldmVu
dCl7aWYoYS5jaGFyQXQoYS5sZW5ndGgtMSk9PScjJyl7ZXZlbnQucHJldmVudCgp
O3JldHVybjt9dHJhY2tSZWZlcnJlcihiLGEpO3RoaXMuaGFuZGxlKGIsZXZlbnQs
dGhpcy5maWx0ZXIpO30uYmluZCh0aGlzKSkpO30sZmlsdGVyOmZ1bmN0aW9uKGEs
YixldmVudCl7aWYoYSZFbGVtZW50Q29udHJvbGxlci5BTEwpcmV0dXJuIHRydWU7
aWYoKCEoYSZFbGVtZW50Q29udHJvbGxlci5UQVJHRVRTKSYmYi50YXJnZXQpfHwo
IShhJkVsZW1lbnRDb250cm9sbGVyLk1PRElGSUVSUykmJmV2ZW50LmdldE1vZGlm
aWVycygpLmFueSl8fCghKGEmRWxlbWVudENvbnRyb2xsZXIuQlVUVE9OUykmJnVh
LnNhZmFyaSgpPj01MjUmJmV2ZW50LndoaWNoIT0xKSlyZXR1cm4gZmFsc2U7cmV0
dXJuIHRydWU7fSx1c2VzV2ViUHJvdG9jb2w6ZnVuY3Rpb24oYSl7dmFyIGI9YS5t
YXRjaCgvXihcdyspOi8pO3JldHVybiAhYnx8YlsxXS5tYXRjaCgvXmh0dHAvaSk7
fX0pO3ZhciBGb3JtQ29udHJvbGxlcj1uZXcgRWxlbWVudENvbnRyb2xsZXIoKTtj
b3B5X3Byb3BlcnRpZXMoRm9ybUNvbnRyb2xsZXIse3JlZ2lzdGVyOmZ1bmN0aW9u
KCl7RXZlbnQubGlzdGVuKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwnc3VibWl0
Jyx0aGlzLmhhbmRsZXIuYmluZCh0aGlzKSk7fSxoYW5kbGVyOmZ1bmN0aW9uKGV2
ZW50KXt2YXIgYT1ldmVudC5nZXRUYXJnZXQoKTtpZigoYS5nZXRBdHRyaWJ1dGVO
b2RlKCdyZWwnKXx8e30pLnZhbHVlKXJldHVybjt1c2VyX2FjdGlvbihhLCdmb3Jt
JyxldmVudCk7cmV0dXJuIHRoaXMuaGFuZGxlKGEsZXZlbnQpO319KTsKb25sb2Fk
UmVnaXN0ZXIoZnVuY3Rpb24oKXtjb3B5X3Byb3BlcnRpZXMoQXN5bmNSZXF1ZXN0
LnByb3RvdHlwZSx7c2V0TmVjdGFyTW9kdWxlRGF0YTpmdW5jdGlvbihjKXtpZih0
aGlzLm1ldGhvZD09J1BPU1QnKXt2YXIgZD1FbnYubW9kdWxlO2lmKGMmJmQ9PT11
bmRlZmluZWQpe3ZhciBiPXtmYnBhZ2VfZmFuX2NvbmZpcm06MX07dmFyIGU9bnVs
bDtmb3IodmFyIGE9YzthJiZhIT1kb2N1bWVudC5ib2R5O2E9YS5wYXJlbnROb2Rl
KXtpZighYS5pZHx8dHlwZW9mIGEuaWQhPT0nc3RyaW5nJyljb250aW51ZTtpZihh
LmlkLnN0YXJ0c1dpdGgoJ3BhZ2VsZXRfJykpe2Q9YS5pZDticmVhazt9aWYoIWUm
JmJbYS5pZF0pZT1hLmlkO31pZihkPT09dW5kZWZpbmVkJiZlKWQ9ZTt9aWYoZCE9
PXVuZGVmaW5lZCl7aWYodGhpcy5kYXRhLm5jdHI9PT11bmRlZmluZWQpdGhpcy5k
YXRhLm5jdHI9e307dGhpcy5kYXRhLm5jdHIuX21vZD1kO319fSxzZXROZWN0YXJJ
bXByZXNzaW9uSWQ6ZnVuY3Rpb24oKXtpZih0aGlzLm1ldGhvZD09J1BPU1QnKXt2
YXIgYT1lbnZfZ2V0KCdpbXBpZCcpO2lmKGEhPT11bmRlZmluZWQpe2lmKHRoaXMu
ZGF0YS5uY3RyPT09dW5kZWZpbmVkKXRoaXMuZGF0YS5uY3RyPXt9O3RoaXMuZGF0
YS5uY3RyLl9pbXBpZD1hO319fX0pO30pOwppZih3aW5kb3c9PXdpbmRvdy50b3Ap
IWZ1bmN0aW9uKCl7dmFyIGE9ZnVuY3Rpb24oKXt2YXIgYj0wO3JldHVybiBmdW5j
dGlvbigpe2lmKCFiKXtiPTE7c2V0VGltZW91dChmdW5jdGlvbigpe2I9MDt2YXIg
Yz1WZWN0b3IyLmdldFZpZXdwb3J0RGltZW5zaW9ucygpO3NldENvb2tpZSgnd2Qn
LGMueCsneCcrYy55KTtpZih3aW5kb3cuQXN5bmNTaWduYWwmJk1hdGgucmFuZG9t
KCk8LjAxKW5ldyBBc3luY1NpZ25hbCgnL2FqYXgvZGltZW5zaW9uX2NvbnRleHQu
cGhwJyx7J3gnOmMueCwneSc6Yy55fSkuc2VuZCgpO30sMTAwKTt9fTt9KCk7b25s
b2FkUmVnaXN0ZXIoYSk7b25sb2FkUmVnaXN0ZXIoZnVuY3Rpb24oKXtFdmVudC5s
aXN0ZW4od2luZG93LCdyZXNpemUnLGEpO30pO29ubG9hZFJlZ2lzdGVyKGZ1bmN0
aW9uKCl7RXZlbnQubGlzdGVuKHdpbmRvdywnZm9jdXMnLGEpO30pO30oKTsKb25s
b2FkUmVnaXN0ZXIoZnVuY3Rpb24oKXtFdmVudC5saXN0ZW4oZG9jdW1lbnQuZG9j
dW1lbnRFbGVtZW50LCdrZXl1cCcsZnVuY3Rpb24oZXZlbnQpe3ZhciBjPWV2ZW50
LmdldFRhcmdldCgpO2lmKCFET00uaXNOb2RlKGMsWydpbnB1dCcsJ3RleHRhcmVh
J10pKXJldHVybjtpZihET00uaXNOb2RlKGMsWydpbnB1dCddKSYmYy50eXBlPT0n
cGFzc3dvcmQnKXJldHVybjtpZihjLmdldEF0dHJpYnV0ZSgnZGF0YS1wcmV2ZW50
LWF1dG8tZmxpcCcpKXJldHVybjt2YXIgZj1JbnB1dC5nZXRWYWx1ZShjKTt2YXIg
Yj0oYy5zdHlsZSYmYy5zdHlsZS5kaXJlY3Rpb24pO2lmKCFiKXtmb3IodmFyIGQ9
MDtkPGYubGVuZ3RoO2QrKyl7dmFyIGE9Zi5jaGFyQ29kZUF0KGQpO2lmKGE+PTQ4
KXt2YXIgZT0oYT49MTQ3MCYmYTw9MTkyMCk7Q1NTLnNldFN0eWxlKGMsJ2RpcmVj
dGlvbicsZT8ncnRsJzonbHRyJyk7cmV0dXJuO319fWVsc2UgaWYoZi5sZW5ndGg9
PT0wKUNTUy5zZXRTdHlsZShjLCdkaXJlY3Rpb24nLCcnKTt9KTt9KTsKb25sb2Fk
UmVnaXN0ZXIoZnVuY3Rpb24oKXtFdmVudC5saXN0ZW4oZG9jdW1lbnQuZG9jdW1l
bnRFbGVtZW50LCdzdWJtaXQnLGZ1bmN0aW9uKGIpe3ZhciBhPWIuZ2V0VGFyZ2V0
KCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKTtmb3IodmFyIGM9MDtjPGEubGVu
Z3RoO2MrKylpZihhW2NdLmdldEF0dHJpYnV0ZSgncGxhY2Vob2xkZXInKSYmSW5w
dXQuaXNFbXB0eShhW2NdKSlJbnB1dC5zZXRWYWx1ZShhW2NdLCcnKTt9KTt9KTsK
dmFyIEJ1dHRvbj0oZnVuY3Rpb24oKXt2YXIgYj0ndWlCdXR0b25EaXNhYmxlZCc7
dmFyIGE9J3VpQnV0dG9uRGVwcmVzc2VkJzt2YXIgZD0nYnV0dG9uOmJsb2NrZXIn
O3ZhciBjPSdocmVmJztmdW5jdGlvbiBlKGosaSl7dmFyIGg9RGF0YVN0b3JlLmdl
dChqLGQpO2lmKGkpe2lmKGgpe2gucmVtb3ZlKCk7RGF0YVN0b3JlLnJlbW92ZShq
LGQpO319ZWxzZSBpZighaClEYXRhU3RvcmUuc2V0KGosZCxFdmVudC5saXN0ZW4o
aiwnY2xpY2snLGJhZ29mKGZhbHNlKSxFdmVudC5Qcmlvcml0eS5VUkdFTlQpKTt9
ZnVuY3Rpb24gZihoKXt2YXIgaT1QYXJlbnQuYnlDbGFzcyhoLCd1aUJ1dHRvbicp
O2lmKCFpKXRocm93IG5ldyBFcnJvcignaW52YWxpZCB1c2UgY2FzZScpO3JldHVy
biBpO31mdW5jdGlvbiBnKGgpe3JldHVybiBET00uaXNOb2RlKGgsJ2EnKTt9cmV0
dXJuIHtnZXRJbnB1dEVsZW1lbnQ6ZnVuY3Rpb24oaCl7aD1mKGgpO2lmKGcoaCkp
dGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHVzZSBjYXNlJyk7cmV0dXJuIERPTS5m
aW5kKGgsJ2lucHV0Jyk7fSxpc0VuYWJsZWQ6ZnVuY3Rpb24oaCl7cmV0dXJuICFD
U1MuaGFzQ2xhc3MoZihoKSxiKTt9LHNldEVuYWJsZWQ6ZnVuY3Rpb24oayxoKXtr
PWYoayk7Q1NTLmNvbmRpdGlvbkNsYXNzKGssYiwhaCk7aWYoZyhrKSl7dmFyIGk9
ay5ocmVmO3ZhciBsPURhdGFTdG9yZS5nZXQoayxjLCcjJyk7aWYoaCl7aWYoIWkp
ay5ocmVmPWw7fWVsc2V7aWYoaSYmaSE9PWwpRGF0YVN0b3JlLnNldChrLGMsaSk7
ay5yZW1vdmVBdHRyaWJ1dGUoJ2hyZWYnKTt9ZShrLGgpO31lbHNle3ZhciBqPUJ1
dHRvbi5nZXRJbnB1dEVsZW1lbnQoayk7ai5kaXNhYmxlZD0haDtlKGosaCk7fX0s
c2V0RGVwcmVzc2VkOmZ1bmN0aW9uKGksaCl7Q1NTLmNvbmRpdGlvbkNsYXNzKGYo
aSksYSxoKTt9LGlzRGVwcmVzc2VkOmZ1bmN0aW9uKGgpe3JldHVybiBDU1MuaGFz
Q2xhc3MoZihoKSxhKTt9LHNldExhYmVsOmZ1bmN0aW9uKGksaCl7aT1mKGkpO2lm
KGcoaSkpe3ZhciBqPURPTS5maW5kKGksJ3NwYW4udWlCdXR0b25UZXh0Jyk7RE9N
LnNldENvbnRlbnQoaixoKTt9ZWxzZSBCdXR0b24uZ2V0SW5wdXRFbGVtZW50KGkp
LnZhbHVlPWg7Q1NTLmNvbmRpdGlvbkNsYXNzKGksJ3VpQnV0dG9uTm9UZXh0Jywh
aCk7fSxzZXRJY29uOmZ1bmN0aW9uKGksaCl7aWYoIURPTS5pc05vZGUoaCkpcmV0
dXJuO0NTUy5hZGRDbGFzcyhoLCdjdXN0b21pbWcnKTtpPWYoaSk7dmFyIGo9RE9N
LnNjcnkoaSwnLmltZycpWzBdO2lmKGope0RPTS5yZXBsYWNlKGosaCk7fWVsc2Ug
RE9NLnByZXBlbmRDb250ZW50KGksaCk7fX07fSkoKTs=
------------UAMIZgc77nT2aFBV02afBr
Content-Disposition: inline; filename=NC4rem8fo_s.js
Content-Type: application/x-javascript; charset=utf-8; name=NC4rem8fo_s.js
Content-Location: http://static.ak.fbcdn.net/rsrc.php/v1/yf/r/NC4rem8fo_s.js
Content-Transfer-Encoding: Base64
LyoxMzEzNjE1ODMyLDE3NjgzMjY5NyovCgppZiAod2luZG93LkNhdmFscnlMb2dn
ZXIpIHsgQ2F2YWxyeUxvZ2dlci5zdGFydF9qcyhbIktRM2dSIl0pOyB9CgpmdW5j
dGlvbiBDb25uZWN0U29jaWFsV2lkZ2V0KGEsYil7Q29ubmVjdFNvY2lhbFdpZGdl
dC5zZXRJbnN0YW5jZShiLHRoaXMpO0Nvbm5lY3RTb2NpYWxXaWRnZXQuZGVsYXlV
bnRpbERpc3BsYXllZChmdW5jdGlvbigpe3RoaXMuaW5pdGlhbGl6ZU9iamVjdC5j
YWxsKHRoaXMsYSxiKTt9LmJpbmQodGhpcykpO31jb3B5X3Byb3BlcnRpZXMoQ29u
bmVjdFNvY2lhbFdpZGdldCx7T1BUX0lOX0ZBQ0VCT09LX0FQUF9JRDonMTI3NzYw
MDg3MjM3NjEwJyxUWVBFX0FDVElWSVRZOidBJyxUWVBFX1JFQ09NTUVOREFUSU9O
UzonUicsVFlQRV9MSUtFQk9YOidMJyxpbnN0YW5jZXM6e30sc2V0SW5zdGFuY2U6
ZnVuY3Rpb24oYixhKXtDb25uZWN0U29jaWFsV2lkZ2V0Lmluc3RhbmNlc1tiXT1h
O30sZ2V0SW5zdGFuY2U6ZnVuY3Rpb24oYSl7cmV0dXJuIENvbm5lY3RTb2NpYWxX
aWRnZXQuaW5zdGFuY2VzW2FdO30scG9wdXBzOnt9LGxvZ2luOmZ1bmN0aW9uKGEs
Yil7Q29ubmVjdFNvY2lhbFdpZGdldC5wb3B1cHNbYl09e3BvcHVwOlBsYXRmb3Jt
T3B0SW5Qb3B1cC5vcGVuKCdsb2dpbicsJ29wdC5pbicpfTt9LGFEZWxheWVkRnVu
Y3Rpb25zOltdLGRlbGF5VW50aWxEaXNwbGF5ZWQ6ZnVuY3Rpb24oYSl7Q29ubmVj
dFNvY2lhbFdpZGdldC5hRGVsYXllZEZ1bmN0aW9ucy5wdXNoKGEpO2lmKENvbm5l
Y3RTb2NpYWxXaWRnZXQuYURlbGF5ZWRGdW5jdGlvbnMubGVuZ3RoPT09MSl7aWYo
IUNvbm5lY3RTb2NpYWxXaWRnZXQubmRUZXN0RGltKXt2YXIgYj1kb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKSxjPXtwb3NpdGlvbjonYWJzb2x1dGUnLHdpZHRo
OicxcHgnLGhlaWdodDonMXB4JyxvdmVyZmxvdzonaGlkZGVuJyx0b3A6JzBweCd9
O2Zvcih2YXIgZCBpbiBjKWlmKHR5cGVvZiBjW2RdPT09J3N0cmluZycpQ1NTLnNl
dFN0eWxlKGIsZCxjW2RdKTtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGIpO0Nv
bm5lY3RTb2NpYWxXaWRnZXQubmRUZXN0RGltPWI7fUNvbm5lY3RTb2NpYWxXaWRn
ZXQudGVzdEZvckRpc3BsYXkoKTt9fSx0ZXN0Rm9yRGlzcGxheTpmdW5jdGlvbigp
e3ZhciBhPVZlY3RvcjIuZ2V0RWxlbWVudERpbWVuc2lvbnMoQ29ubmVjdFNvY2lh
bFdpZGdldC5uZFRlc3REaW0pLnk7aWYoYSE9PTApe0Nvbm5lY3RTb2NpYWxXaWRn
ZXQuYURlbGF5ZWRGdW5jdGlvbnMuZm9yRWFjaChmdW5jdGlvbihiKXtiKCk7fSk7
Q29ubmVjdFNvY2lhbFdpZGdldC5hRGVsYXllZEZ1bmN0aW9ucz1bXTt9ZWxzZSBD
b25uZWN0U29jaWFsV2lkZ2V0LnRlc3RGb3JEaXNwbGF5LmRlZmVyKDEwMCk7fSxs
aXN0ZW5Gb3JMb2dpbjpmdW5jdGlvbigpe2lmKCFDb25uZWN0U29jaWFsV2lkZ2V0
Lmxpc3RlbmVyQXR0YWNoZWQpe0FyYml0ZXIuc3Vic2NyaWJlKCdwbGF0Zm9ybS9z
b2NpYWxwbHVnaW5zL2xvZ2luJyxmdW5jdGlvbihhKXtpZihhLnVzZXIhPT1FbnYu
dXNlcilkb2N1bWVudC5sb2NhdGlvbi5yZWxvYWQoKTt9KTtDb25uZWN0U29jaWFs
V2lkZ2V0Lmxpc3RlbmVyQXR0YWNoZWQ9dHJ1ZTt9fX0pO2NvcHlfcHJvcGVydGll
cyhDb25uZWN0U29jaWFsV2lkZ2V0LnByb3RvdHlwZSx7aW5pdGlhbGl6ZU9iamVj
dDpmdW5jdGlvbihlLGcpe3ZhciBkPURPTS5zY3J5KGRvY3VtZW50LmJvZHksZS5z
T3ZlcmZsb3dDb250YWluZXJTZWxlY3RvcilbMF0sYz1ET00uc2NyeShkLCcuZmJD
b25uZWN0V2lkZ2V0Rm9vdGVyJylbMF0sYT1jP1ZlY3RvcjIuZ2V0RWxlbWVudERp
bWVuc2lvbnMoYykueTowLGY9ZS5zT3ZlcmZsb3dJdGVtc1NlbGVjdG9yLGI9RE9N
LnNjcnkoZG9jdW1lbnQuYm9keSxlLnNTdHJlYW1Db250YWluZXJTZWxlY3Rvcilb
MF07dGhpcy5mUmVtb3ZlT3ZlcmZsb3dFbGVtZW50cz10aGlzLnJlbW92ZU92ZXJm
bG93RWxlbWVudHMuYmluZCh0aGlzLGQsYixmLC1hKTtjb3B5X3Byb3BlcnRpZXMo
dGhpcyx7YkluaXRpYWxpemVkOnRydWUsc1dpZGdldElkOmcsaUZvb3RlckhlaWdo
dDphLG5kVG9wOmQsbmRGb290ZXI6YyxuZENvbnRlbnRDb250YWluZXI6YixvUXVl
cnlQYXJhbXM6bmV3IFVSSSh3aW5kb3cubG9jYXRpb24uaHJlZikuZ2V0UXVlcnlE
YXRhKCksYkNvbWJvTW9kZTplLmJDb21ib01vZGUsc092ZXJmbG93SXRlbXNTZWxl
Y3RvcjpmfSk7Y29weV9wcm9wZXJ0aWVzKHRoaXMub1F1ZXJ5UGFyYW1zLHtwb3N0
X2Zvcm1faWQ6RW52LnBvc3RfZm9ybV9pZCx1c2VyOkVudi51c2VyfSk7dGhpcy5m
UmVtb3ZlT3ZlcmZsb3dFbGVtZW50cygpO0NTUy5zZXRTdHlsZShiLCd2aXNpYmls
aXR5JywndmlzaWJsZScpO2FuaW1hdGlvbihiKS5mcm9tKCdvcGFjaXR5JywwKS50
bygnb3BhY2l0eScsMSkuZHVyYXRpb24oMjAwKS5nbygpO0Nvbm5lY3RTb2NpYWxX
aWRnZXQubGlzdGVuRm9yTG9naW4oKTtuZXcgQ2xpY2tUaHJvdWdoTW9uaXRvcih7
bmRUb3A6dGhpcy5uZENvbnRlbnRDb250YWluZXIsZlZhbGlkYXRlTGluazp0aGlz
LmdldEVsZW1lbnRUb3AuYmluZCh0aGlzKSxmR2V0TW9uaXRvckRhdGE6ZnVuY3Rp
b24oaCl7dmFyIGk9e3NpdGU6dGhpcy5vUXVlcnlQYXJhbXMuc2l0ZSx0eXBlOnRo
aXMuZ2V0TGlua1R5cGUoKSxwbHVnaW46dGhpcy5nZXRQbHVnaW5UeXBlKCksc29j
aWFsOihET00uc2NyeShoLCdeZGl2LmZiU29jaWFsJykubGVuZ3RoPjApLHBvczp0
aGlzLmdldEl0ZW1Qb3NpdGlvbih0aGlzLmdldEVsZW1lbnRUb3AoaCkpLHNpZ25h
dHVyZTp0aGlzLmdldEl0ZW1TaWduYXR1cmUodGhpcy5nZXRFbGVtZW50VG9wKGgp
KX07aWYodGhpcy5vUXVlcnlQYXJhbXMuYXBpX2tleSlpLmFwaV9rZXk9dGhpcy5v
UXVlcnlQYXJhbXMuYXBpX2tleTtyZXR1cm4gaTt9LmJpbmQodGhpcyl9KTt9LGdl
dEVsZW1lbnRUb3A6ZnVuY3Rpb24oYil7dmFyIGE9RE9NLnNjcnkoYiwnXicrdGhp
cy5zT3ZlcmZsb3dJdGVtc1NlbGVjdG9yKTtyZXR1cm4gYVswXTt9LGdldEl0ZW1Q
b3NpdGlvbjpmdW5jdGlvbihkKXt2YXIgYT1ET00uc2NyeSh0aGlzLm5kQ29udGVu
dENvbnRhaW5lcix0aGlzLnNPdmVyZmxvd0l0ZW1zU2VsZWN0b3IpLGM9YS5sZW5n
dGgsYj1hLmluZGV4T2YoZCkrMTtyZXR1cm4gYisnLycrYzt9LGdldEl0ZW1TaWdu
YXR1cmU6ZnVuY3Rpb24oYyl7dmFyIGE9Yy5jbGFzc05hbWUuc3BsaXQoJyAnKTtm
b3IodmFyIGI9MDtiPGEubGVuZ3RoO2IrKylpZihhW2JdLnN0YXJ0c1dpdGgoIlJF
U18iKSlyZXR1cm4gYVtiXS5zdWJzdHJpbmcoNCk7cmV0dXJuICcnO30scmVtb3Zl
T3ZlcmZsb3dFbGVtZW50czpmdW5jdGlvbihoLGcsaSxkLGUpe3ZhciBmLGE9aT9E
T00uc2NyeShnLGkpOiRBKGcuY2hpbGROb2Rlcyk7aWYoIWUpe3ZhciBkPWR8fDAs
Yj1WZWN0b3IyLmdldEVsZW1lbnREaW1lbnNpb25zKGgpLnkrZCxjPVZlY3RvcjIu
Z2V0RWxlbWVudFBvc2l0aW9uKGgpLnk7ZT1iK2M7fXdoaWxlKGEubGVuZ3RoPjAm
JihmPSQoYS5wb3AoKSkpJiYoVmVjdG9yMi5nZXRFbGVtZW50RGltZW5zaW9ucyhm
KS55K1ZlY3RvcjIuZ2V0RWxlbWVudFBvc2l0aW9uKGYpLnkpPmUpRE9NLnJlbW92
ZShmKTt9LGxvZ2luOmZ1bmN0aW9uKCl7Q29ubmVjdFNvY2lhbFdpZGdldC5sb2dp
bih0aGlzLmFwcElELHRoaXMuc1dpZGdldElkKTt9LHRvZ2dsZUxvZ2luOmZ1bmN0
aW9uKCl7RE9NLnNjcnkodGhpcy5uZFRvcCwnLmZiVG9nZ2xlTG9naW4nKS5mb3JF
YWNoKGZ1bmN0aW9uKGEpe0NTUy50b2dnbGUoYSk7fSk7dGhpcy5mUmVtb3ZlT3Zl
cmZsb3dFbGVtZW50cygpO319KTtmdW5jdGlvbiBBY3Rpdml0eVdpZGdldChhLGIp
e3RoaXMucGFyZW50LmNvbnN0cnVjdCh0aGlzLGEsYik7fUFjdGl2aXR5V2lkZ2V0
LmV4dGVuZCgnQ29ubmVjdFNvY2lhbFdpZGdldCcpO0FjdGl2aXR5V2lkZ2V0LlJF
UVVFU1RfSU5URVJWQUw9MTUqMTAwMDtBY3Rpdml0eVdpZGdldC5BQ1RJVklUWV9I
RUlHSFQ9NDU7QWN0aXZpdHlXaWRnZXQuTUFYX0lOVEVSVkFMPTMwO0FjdGl2aXR5
V2lkZ2V0Lk1BWF9JVEVNUz0yNDtjb3B5X3Byb3BlcnRpZXMoQWN0aXZpdHlXaWRn
ZXQucHJvdG90eXBlLHtpbml0aWFsaXplT2JqZWN0OmZ1bmN0aW9uKGEsYil7dGhp
cy5wYXJlbnQuaW5pdGlhbGl6ZU9iamVjdC5jYWxsKHRoaXMsYSxiKTt0aGlzLm9R
dWVyeVBhcmFtcy5uYl9hY3Rpdml0aWVzPU1hdGgubWluKEFjdGl2aXR5V2lkZ2V0
Lk1BWF9JVEVNUyxNYXRoLnJvdW5kKCh0aGlzLm9RdWVyeVBhcmFtcy5oZWlnaHR8
fDMwMCkvQWN0aXZpdHlXaWRnZXQuQUNUSVZJVFlfSEVJR0hUKSk7dGhpcy5vUXVl
cnlQYXJhbXMubmV3ZXN0PWEuaU5ld2VzdFN0b3J5VGltZXx8MDt9LGdldExpbmtU
eXBlOmZ1bmN0aW9uKCl7cmV0dXJuIENvbm5lY3RTb2NpYWxXaWRnZXQuVFlQRV9B
Q1RJVklUWTt9LGdldFBsdWdpblR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4gQ29ubmVj
dFNvY2lhbFdpZGdldC5UWVBFX0FDVElWSVRZO30scmVtb3ZlT3ZlcmZsb3dFbGVt
ZW50czpmdW5jdGlvbigpe2lmKHRoaXMuYkNvbWJvTW9kZSYmIXRoaXMuYkZpcnN0
Um91bmQpe3RoaXMuYkZpcnN0Um91bmQ9dHJ1ZTt2YXIgZD1WZWN0b3IyLmdldEVs
ZW1lbnRQb3NpdGlvbih0aGlzLm5kVG9wKS55LGI9VmVjdG9yMi5nZXRFbGVtZW50
RGltZW5zaW9ucyhkb2N1bWVudC5ib2R5KS55LShkK3RoaXMuaUZvb3RlckhlaWdo
dCksYz1NYXRoLnJvdW5kKGIvMiksYT0kQShhcmd1bWVudHMpO2FbYS5sZW5ndGhd
PWM7Q29ubmVjdFNvY2lhbFdpZGdldC5wcm90b3R5cGUucmVtb3ZlT3ZlcmZsb3dF
bGVtZW50cy5hcHBseSh0aGlzLGEpO31lbHNlIENvbm5lY3RTb2NpYWxXaWRnZXQu
cHJvdG90eXBlLnJlbW92ZU92ZXJmbG93RWxlbWVudHMuYXBwbHkodGhpcyxhcmd1
bWVudHMpO30saGFzRnJpZW5kc0FjdGl2aXR5OmZ1bmN0aW9uKCl7cmV0dXJuIERP
TS5zY3J5KHRoaXMubmRDb250ZW50Q29udGFpbmVyLCdkaXYuZmJGcmllbmRzQWN0
aXZpdHknKVswXS5jaGlsZE5vZGVzLmxlbmd0aD4wO30saGFzQ29udGVudDpmdW5j
dGlvbigpe3JldHVybiBET00uc2NyeSh0aGlzLm5kVG9wLHRoaXMuc092ZXJmbG93
SXRlbXNTZWxlY3RvcikubGVuZ3RoPjA7fSxnZXRFbXB0eU1lc3NhZ2U6ZnVuY3Rp
b24oKXtyZXR1cm4gRE9NLmZpbmQodGhpcy5uZENvbnRlbnRDb250YWluZXIsJ2Rp
di5mYkVtcHR5V2lkZ2V0Jyk7fSxzaG93RW1wdHlNZXNzYWdlOmZ1bmN0aW9uKCl7
dmFyIGE9dGhpcy5nZXRFbXB0eU1lc3NhZ2UoKTtpZihhKUNTUy5zaG93KGEpO319
KTtmdW5jdGlvbiBSZWNvbW1lbmRhdGlvbnNXaWRnZXQoYSxiKXt0aGlzLnBhcmVu
dC5jb25zdHJ1Y3QodGhpcyxhLGIpO31SZWNvbW1lbmRhdGlvbnNXaWRnZXQuZXh0
ZW5kKCdDb25uZWN0U29jaWFsV2lkZ2V0Jyk7Y29weV9wcm9wZXJ0aWVzKFJlY29t
bWVuZGF0aW9uc1dpZGdldC5wcm90b3R5cGUse2dldExpbmtUeXBlOmZ1bmN0aW9u
KCl7cmV0dXJuIENvbm5lY3RTb2NpYWxXaWRnZXQuVFlQRV9SRUNPTU1FTkRBVElP
TlM7fSxnZXRQbHVnaW5UeXBlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc0FjdGl2
aXR5UGFyZW50P0Nvbm5lY3RTb2NpYWxXaWRnZXQuVFlQRV9BQ1RJVklUWTpDb25u
ZWN0U29jaWFsV2lkZ2V0LlRZUEVfUkVDT01NRU5EQVRJT05TO30saW5pdGlhbGl6
ZU9iamVjdDpmdW5jdGlvbihhLGIpe3RoaXMucGFyZW50LmluaXRpYWxpemVPYmpl
Y3QuY2FsbCh0aGlzLGEsYik7dGhpcy5zQWN0aXZpdHlQYXJlbnQ9YS5zQWN0aXZp
dHlQYXJlbnQ7dGhpcy5jcm9wSW1hZ2VzKERPTS5zY3J5KHRoaXMubmRDb250ZW50
Q29udGFpbmVyLCIuZmJJbWFnZUNvbnRhaW5lciBpbWciKSxSZWNvbW1lbmRhdGlv
bnNXaWRnZXQuSU1BR0VfSEVJR0hULHRydWUpO3RoaXMuY3JvcEltYWdlcyhET00u
c2NyeSh0aGlzLm5kQ29udGVudENvbnRhaW5lciwiaW1nLmZiR2FsbGVyeUltYWdl
IiksUmVjb21tZW5kYXRpb25zV2lkZ2V0LkdBTExFUllfSU1BR0VfSEVJR0hULGZh
bHNlKTt9LGNyb3BJbWFnZXM6ZnVuY3Rpb24oYSxkLGIpe2lmKGEubGVuZ3RoPjAp
e3ZhciBjPWZ1bmN0aW9uKGV2ZW50KXtSZWNvbW1lbmRhdGlvbnNXaWRnZXQuaW1h
Z2VfcmVzaXplKHtpbWFnZTpldmVudC5nZXRUYXJnZXQoKSxkaW1lbnNpb246ZCxj
ZW50ZXJpbWFnZTpifSk7fTthLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoZS5jb21w
bGV0ZSl7UmVjb21tZW5kYXRpb25zV2lkZ2V0LmltYWdlX3Jlc2l6ZSh7aW1hZ2U6
ZSxkaW1lbnNpb246ZCxjZW50ZXJpbWFnZTpifSk7fWVsc2UgRXZlbnQubGlzdGVu
KGUsJ2xvYWQnLGMpO30pO319LGhhc0NvbnRlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4g
dGhpcy5uZENvbnRlbnRDb250YWluZXIuY2hpbGROb2Rlcy5sZW5ndGg+MDt9LGdl
dFBhcmVudDpmdW5jdGlvbigpe2lmKHRoaXMuc0FjdGl2aXR5UGFyZW50KXJldHVy
biBDb25uZWN0U29jaWFsV2lkZ2V0LmdldEluc3RhbmNlKHRoaXMuc0FjdGl2aXR5
UGFyZW50KTt9LHNob3dSZWNvbW1lbmRhdGlvbnNTZXBhcmF0b3I6ZnVuY3Rpb24o
KXt2YXIgYj10aGlzLmdldFBhcmVudCgpO2lmKGImJmIuaGFzQ29udGVudCgpKXt2
YXIgYT1ET00uc2NyeSh0aGlzLm5kVG9wLCdkaXYuZmJSZWNvbW1lbmRhdGlvbnNT
ZXBhcmF0b3InKVswXTtDU1Muc2hvdyhhKTtDU1Muc2V0U3R5bGUoYSwndmlzaWJp
bGl0eScsJ3Zpc2libGUnKTt9cmV0dXJuIHRoaXM7fSxyZW1vdmVPdmVyZmxvd0Vs
ZW1lbnRzOmZ1bmN0aW9uKCl7Q29ubmVjdFNvY2lhbFdpZGdldC5wcm90b3R5cGUu
cmVtb3ZlT3ZlcmZsb3dFbGVtZW50cy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYo
dGhpcy5zQWN0aXZpdHlQYXJlbnQmJiF0aGlzLmhhc0NvbnRlbnQoKSl7dmFyIGE9
RE9NLnNjcnkodGhpcy5uZFRvcCwnZGl2LmZiUmVjb21tZW5kYXRpb25zU2VwYXJh
dG9yJylbMF07Q1NTLmhpZGUoYSk7fX19KTtSZWNvbW1lbmRhdGlvbnNXaWRnZXQu
SU1BR0VfSEVJR0hUPTM1O1JlY29tbWVuZGF0aW9uc1dpZGdldC5HQUxMRVJZX0lN
QUdFX0hFSUdIVD0xMDU7ZnVuY3Rpb24gTGlrZUJveFdpZGdldChhLGIpe3RoaXMu
cGFyZW50LmNvbnN0cnVjdCh0aGlzLGEsYik7fUxpa2VCb3hXaWRnZXQuZXh0ZW5k
KCdDb25uZWN0U29jaWFsV2lkZ2V0Jyk7Y29weV9wcm9wZXJ0aWVzKExpa2VCb3hX
aWRnZXQucHJvdG90eXBlLHtnZXRMaW5rVHlwZTpmdW5jdGlvbigpe3JldHVybiBD
b25uZWN0U29jaWFsV2RpZ2V0LlRZUEVfTElLRUJPWDt9LGdldFBsdWdpblR5cGU6
ZnVuY3Rpb24oKXtyZXR1cm4gQ29ubmVjdFNvY2lhbFdpZGdldC5UWVBFX0xJS0VC
T1g7fX0pO1JlY29tbWVuZGF0aW9uc1dpZGdldC5pbWFnZV9yZXNpemU9ZnVuY3Rp
b24obCl7dmFyIGo9bC5pbWFnZSxrPVZlY3RvcjIuZ2V0RWxlbWVudERpbWVuc2lv
bnMoaiksYz1rLnksaT1rLngsZz1sLmRpbWVuc2lvbixtPWcrJ3B4JyxhPWwuY2Vu
dGVyaW1hZ2U7aWYoYzw9NXx8aTw9NSlyZXR1cm47dmFyIGY9Yy9pO2lmKGY8LjV8
fGY+MilyZXR1cm47aWYoYz09PWkpe0NTUy5zZXRTdHlsZShqLCd3aWR0aCcsbSk7
fWVsc2UgaWYoYzxpKXt2YXIgZT1nL2MsZD0tTWF0aC5yb3VuZCgoaS1jKSplLzIp
O0NTUy5zZXRTdHlsZShqLCdoZWlnaHQnLG0pO2EmJkNTUy5zZXRTdHlsZShqLCdt
YXJnaW5MZWZ0JyxkKydweCcpO31lbHNle3ZhciBlPWcvaSxoPS1NYXRoLnJvdW5k
KChjLWkpKmUvMik7Q1NTLnNldFN0eWxlKGosJ3dpZHRoJyxtKTthJiZDU1Muc2V0
U3R5bGUoaiwnbWFyZ2luVG9wJyxoKydweCcpO31DU1Muc2V0U3R5bGUoaiwndmlz
aWJpbGl0eScsJ3Zpc2libGUnKTtDU1Muc2V0U3R5bGUoai5wYXJlbnROb2RlLCdi
YWNrZ3JvdW5kJywndHJhbnNwYXJlbnQnKTt2YXIgYj1QYXJlbnQuYnlDbGFzcyhq
LCdmYlJlY29tbWVuZGF0aW9uJyk7aWYoYilDU1MucmVtb3ZlQ2xhc3MoYiwnaW52
aXNpYmxlX2VsZW0nKTt9O0NsaWNrVGhyb3VnaE1vbml0b3I9ZnVuY3Rpb24oYSl7
Y29weV9wcm9wZXJ0aWVzKHRoaXMse25kVG9wOmEubmRUb3B8fGRvY3VtZW50LmJv
ZHksZlZhbGlkYXRlTGluazphLmZWYWxpZGF0ZUxpbmt8fGZ1bmN0aW9uKCl7cmV0
dXJuIHRydWU7fSxmR2V0TW9uaXRvckRhdGE6YS5mR2V0TW9uaXRvckRhdGF8fGZ1
bmN0aW9uKCl7cmV0dXJuIHt9O319KTtFdmVudC5saXN0ZW4odGhpcy5uZFRvcCwn
bW91c2Vkb3duJyx0aGlzLm9uTW91c2VEb3duLmJpbmQodGhpcykpO307Q2xpY2tU
aHJvdWdoTW9uaXRvci5DQUxMX0JBQ0tfU09DSUFMX1BMVUdJTlM9Mjtjb3B5X3By
b3BlcnRpZXMoQ2xpY2tUaHJvdWdoTW9uaXRvci5wcm90b3R5cGUse2dldE1vbml0
b3JlZExpbms6ZnVuY3Rpb24oZXZlbnQpe3ZhciBhPWV2ZW50LmdldFRhcmdldCgp
LGI9UGFyZW50LmJ5VGFnKGEsJ2EnKTtpZihiJiZDU1MuaGFzQ2xhc3MoYiwnZmJN
b25pdG9yJykmJnRoaXMuZlZhbGlkYXRlTGluayhiKSl7cmV0dXJuIGI7fWVsc2Ug
cmV0dXJuIG51bGw7fSxnZXRNb25pdG9yRGF0YTpmdW5jdGlvbihhKXt2YXIgYj10
aGlzLmZHZXRNb25pdG9yRGF0YShhKTtpZihkb2N1bWVudC5yZWZlcnJlciE9PScn
KWIucmVmZXJyZXI9ZG9jdW1lbnQucmVmZXJyZXI7Yi5jYj1DbGlja1Rocm91Z2hN
b25pdG9yLkNBTExfQkFDS19TT0NJQUxfUExVR0lOUztyZXR1cm4gYjt9LG9uTW91
c2VEb3duOmZ1bmN0aW9uKGV2ZW50KXt2YXIgYT10aGlzLmdldE1vbml0b3JlZExp
bmsoZXZlbnQpO2lmKGEpVW50cnVzdGVkTGluay5ib290c3RyYXAoYSxFbnYubGhz
aCxldmVudCx0aGlzLmdldE1vbml0b3JEYXRhLmJpbmQodGhpcykpO319KTsKZnVu
Y3Rpb24gZmJwYWdlX3NldF9mYW5fc3RhdHVzKGMsZixhLGgsZyxkLGUpe2c9Zz9n
OmZ1bmN0aW9uKGope19mYnBhZ2Vfc2hvd19jaGFuZ2Vfc3RhdHVzX2ZlZWRiYWNr
KGMsai5nZXRQYXlsb2FkKCkpO307dmFyIGI9e2ZicGFnZV9pZDpmLGFkZDphLHJl
bG9hZDpofTtpZihlIT1udWxsKWNvcHlfcHJvcGVydGllcyhiLGUpO3ZhciBpPW5l
dyBBc3luY1JlcXVlc3QoKS5zZXRVUkkoJy9hamF4L3BhZ2VzL2Zhbl9zdGF0dXMu
cGhwJykuc2V0RGF0YShiKS5zZXROZWN0YXJNb2R1bGVEYXRhU2FmZShjKS5zZXRI
YW5kbGVyKGcpO2lmKGQpaS5zZXRFcnJvckhhbmRsZXIoZCk7aS5zZW5kKCk7cmV0
dXJuIGZhbHNlO31mdW5jdGlvbiBmYnBhZ2Vfc2V0X2Zhdm9yaXRlX3N0YXR1cyhk
LGUsYSl7dmFyIGY9ZnVuY3Rpb24oKXtfZmJwYWdlX3Nob3dfY2hhbmdlX3N0YXR1
c19mZWVkYmFjayhkLHRoaXMuZ2V0VXNlckRhdGEoKSk7fTt2YXIgYz17ZmJwYWdl
X2lkOmUsYWRkOmF9O3ZhciBiPW5ldyBBc3luY1JlcXVlc3QoKS5zZXRNZXRob2Qo
J1BPU1QnKS5zZXRVUkkoJy9hamF4L3BhZ2VzL2Zhdm9yaXRlX3N0YXR1cy5waHAn
KS5zZXREYXRhKGMpO25ldyBEaWFsb2coKS5zZXRBc3luYyhiKS5zZXRDbG9zZUhh
bmRsZXIoZikuc2hvdygpO3JldHVybiBmYWxzZTt9ZnVuY3Rpb24gX2ZicGFnZV9z
aG93X2NoYW5nZV9zdGF0dXNfZmVlZGJhY2soYixhKXtpZighYXx8IWIpcmV0dXJu
O2lmKGEucmVsb2FkKXtmYnBhZ2VfcmVsb2FkX29uX2Zhbl9zdGF0dXNfY2hhbmdl
ZChhLnByZXNlcnZlX3RhYik7fWVsc2UgZmJwYWdlX3JlZHJhd19vbl9mYW5fc3Rh
dHVzX2NoYW5nZWQoYixhLmZlZWRiYWNrKTt9ZnVuY3Rpb24gZmJwYWdlX3JlbG9h
ZF9vbl9mYW5fc3RhdHVzX2NoYW5nZWQoYSl7dmFyIGM9VVJJLmdldFJlcXVlc3RV
UkkoKTtpZihhKXt2YXIgYj13aW5kb3cuRnV0dXJlU2lkZU5hdj9GdXR1cmVTaWRl
TmF2LmdldEluc3RhbmNlKCkuc2VsZWN0ZWQudGV4dEtleTpBcmJpdGVyLnF1ZXJ5
KCdTaWRlTmF2LnNlbGVjdGVkS2V5Jyk7aWYoIWMuZ2V0UXVlcnlEYXRhKCkuc2sm
JmIpYy5hZGRRdWVyeURhdGEoe3NrOmJ9KTt9d2luZG93LmxvY2F0aW9uLmhyZWY9
Yzt9ZnVuY3Rpb24gZmJwYWdlX3JlZHJhd19vbl9mYW5fc3RhdHVzX2NoYW5nZWQo
YSxiKXtpZighYilyZXR1cm47dmFyIGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
c3BhbicpO2QuaW5uZXJIVE1MPWI7Q1NTLnNldENsYXNzKGQsJ2Zhbl9zdGF0dXNf
aW5hY3RpdmUnKTthLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGQsYSk7dmFyIGM9
ZnVuY3Rpb24oKXtpZihkYXRhLmNhbl9yZXBlYXRfYWN0aW9uKWQucGFyZW50Tm9k
ZS5yZXBsYWNlQ2hpbGQoYSxkKTt9O2FuaW1hdGlvbihkKS5kdXJhdGlvbigzMDAw
KS5jaGVja3BvaW50KCkudG8oJ2JhY2tncm91bmRDb2xvcicsJyNGRkZGRkYnKS5k
dXJhdGlvbigxMDAwKS5vbmRvbmUoYykuZ28oKTt9CmZ1bmN0aW9uIENvbm5lY3RX
aWRnZXQoaCxmLGEsZSxiKXtjb3B5X3Byb3BlcnRpZXModGhpcyx7Y2hhbm5lbF91
cmw6YixsaWtlX21vZGU6ZSxwcm9maWxlX2lkOmYsdmlld2VyX2lkOmgsc3RhdHVz
Om51bGwscG9wdXA6bnVsbCxidXN5OmZhbHNlLG5ld19mYW46bnVsbCx1c2VyX3By
b2ZpbGU6bnVsbH0pO3RoaXMuZmFuX2hpZGRlbj1bXTt0aGlzLmZhbl9zaG93bj1b
XTt2YXIgYz1ET00uc2NyeShkb2N1bWVudCwnZGl2LmNvbm5lY3Rpb25zJyk7aWYo
Yy5sZW5ndGg+MCl7Yz1jWzBdO3RoaXMudXNlcl9wcm9maWxlPURPTS5maW5kKGMs
J2Rpdi51c2VyX3Byb2ZpbGUnKTt0aGlzLm5ld19mYW49RE9NLmZpbmQoYywnZGl2
LmdyaWRfaXRlbV9wbHVzJyk7dGhpcy5mYW5fc2hvd24ucHVzaCh0aGlzLm5ld19m
YW4pO3RoaXMuZmFuX3Nob3duLnB1c2goRE9NLmZpbmQoYywnc3Bhbi50b3RhbF9w
bHVzJykpO3ZhciBnPURPTS5zY3J5KGMsJ3NwYW4udG90YWwnKTt2YXIgZD1ET00u
c2NyeShjLCdkaXYuZ3JpZF9pdGVtJyk7aWYoZC5sZW5ndGg+MSl0aGlzLmZhbl9o
aWRkZW4ucHVzaChkWzFdKTt0aGlzLmZhbl9oaWRkZW4ucHVzaChnW2cubGVuZ3Ro
LTFdKTt9aWYoIXRoaXMubGlrZV9tb2RlKXt0aGlzLmJ1dHRvbj0kKGEpO3RoaXMu
cG9wdXBfdXJpPW5ldyBVUkkoJy9sb2dpbi5waHAnKTt0aGlzLnBvcHVwX3VyaS5h
ZGRRdWVyeURhdGEoe2Nvbm5lY3RfaWQ6dGhpcy5wcm9maWxlX2lkLHBvcHVwOnRy
dWV9KTtFdmVudC5saXN0ZW4odGhpcy5idXR0b24sJ2NsaWNrJyx0aGlzLmNvbm5l
Y3RDbGlja0hhbmRsZXIuYmluZCh0aGlzKSk7fWVsc2UgQXJiaXRlci5zdWJzY3Jp
YmUoJ3BsYXRmb3JtL2xpa2UvY29ubmVjdGlvbicsdGhpcy51cGRhdGVXaWRnZXRG
cm9tTGlrZS5iaW5kKHRoaXMpKTtDb25uZWN0V2lkZ2V0Lmluc3RhbmNlc1thXT10
aGlzO2lmKHRoaXMuY2hhbm5lbF91cmwpWEQuaW5pdCh7Y2hhbm5lbFVybDp0aGlz
LmNoYW5uZWxfdXJsfSk7fUNvbm5lY3RXaWRnZXQuaW5zdGFuY2VzPXt9O0Nvbm5l
Y3RXaWRnZXQuaXNfY29ubmVjdD10cnVlO0Nvbm5lY3RXaWRnZXQucHJvdG90eXBl
LnNldExvZ2dlZEluPWZ1bmN0aW9uKGEpe3RoaXMudmlld2VyX2lkPWE7cmV0dXJu
IHRoaXM7fTtDb25uZWN0V2lkZ2V0LnByb3RvdHlwZS5jb25uZWN0Q2xpY2tIYW5k
bGVyPWZ1bmN0aW9uKGEpe2Eua2lsbCgpO2lmKHRoaXMudmlld2VyX2lkIT0wKXt0
aGlzLmNvbm5lY3QoKTt9ZWxzZSB0aGlzLnBvcFVwTG9naW4oKTt9O0Nvbm5lY3RX
aWRnZXQucHJvdG90eXBlLmNvbm5lY3Q9ZnVuY3Rpb24oKXtpZighdGhpcy5idXN5
KXt0aGlzLmJ1c3k9dHJ1ZTtmYnBhZ2Vfc2V0X2Zhbl9zdGF0dXModGhpcy5idXR0
b24sdGhpcy5wcm9maWxlX2lkLHRydWUsZmFsc2UsdGhpcy5jb25uZWN0RG9uZUhh
bmRsZXIuYmluZCh0aGlzKSx0aGlzLmNvbm5lY3RFcnJvckhhbmRsZXIuYmluZCh0
aGlzKSx0aGlzLmdldEFzeW5jRGF0YSgpKTt9fTtDb25uZWN0V2lkZ2V0LnByb3Rv
dHlwZS5kaXNjb25uZWN0PWZ1bmN0aW9uKCl7aWYoIXRoaXMuYnVzeSl7dGhpcy5i
dXN5PXRydWU7ZmJwYWdlX3NldF9mYW5fc3RhdHVzKHRoaXMuYnV0dG9uLHRoaXMu
cHJvZmlsZV9pZCxmYWxzZSxmYWxzZSx0aGlzLmNvbm5lY3RVbmRvbmVIYW5kbGVy
LmJpbmQodGhpcyksZnVuY3Rpb24oKXt9LHRoaXMuZ2V0QXN5bmNEYXRhKCkpO319
O0Nvbm5lY3RXaWRnZXQucHJvdG90eXBlLmdldEFzeW5jRGF0YT1mdW5jdGlvbigp
e3ZhciBhPXtzb3VyY2U6J2Nvbm5lY3QnLGlzX2Nvbm5lY3Q6Q29ubmVjdFdpZGdl
dC5pc19jb25uZWN0fTtpZihnZSgncG9zdF9mb3JtX2lkJykpYS5wb3N0X2Zvcm1f
aWQ9JCgncG9zdF9mb3JtX2lkJykudmFsdWU7aWYoZW52X2dldCgnZmJfZHRzZycp
KWEuZmJfZHRzZz1lbnZfZ2V0KCdmYl9kdHNnJyk7cmV0dXJuIGE7fTtDb25uZWN0
V2lkZ2V0LnByb3RvdHlwZS5wb3BVcExvZ2luPWZ1bmN0aW9uKCl7d2luZG93Lm9w
ZW4odGhpcy5wb3B1cF91cmkudG9TdHJpbmcoKSwnX2JsYW5rJywndG9vbGJhcj0w
LHN0YXR1cz0wLHdpZHRoPTYyNixoZWlnaHQ9NDAwJyk7fTtDb25uZWN0V2lkZ2V0
LnByb3RvdHlwZS51cGRhdGVXaWRnZXRGcm9tTGlrZT1mdW5jdGlvbihiLGYpe2lm
KCFmLnVzZXJQcm9maWxlKXJldHVybjtpZih0aGlzLnVzZXJfcHJvZmlsZSl7dmFy
IGM9RE9NLmZpbmQodGhpcy51c2VyX3Byb2ZpbGUsJ2ltZycpO3ZhciBhPURPTS5m
aW5kKHRoaXMudXNlcl9wcm9maWxlLCdhJyk7dmFyIGU9RE9NLmZpbmQodGhpcy51
c2VyX3Byb2ZpbGUsJ2Rpdi5uYW1lJyk7Yy5zcmM9Zi51c2VyUHJvZmlsZS5waWNf
c3F1YXJlO2EuaHJlZj1mLnVzZXJQcm9maWxlLnByb2ZpbGVfdXJsO0RPTS5zZXRD
b250ZW50KGUsZi51c2VyUHJvZmlsZS5uYW1lKTt9dmFyIGQ7aWYoZi5ub3dDb25u
ZWN0ZWQpe2Q9J2xpa2Vib3hMaWtlZCc7dGhpcy5zaG93TmV3RmFuKCk7fWVsc2V7
ZD0nbGlrZWJveFVubGlrZWQnO3RoaXMuaGlkZU5ld0ZhbigpO31pZih0aGlzLmNo
YW5uZWxfdXJsKVhELnNlbmQoe3R5cGU6ZH0pO307Q29ubmVjdFdpZGdldC5wcm90
b3R5cGUuY29ubmVjdEVycm9ySGFuZGxlcj1mdW5jdGlvbihiKXtpZihiLmVycm9y
PT0xMzU3MDAxKXt0aGlzLnZpZXdlcl9pZD0wO3RoaXMucG9wVXBMb2dpbigpO31l
bHNlIGlmKGIuZXJyb3I9PTEzNTcwMTMpe0NTUy5oaWRlKHRoaXMuYnV0dG9uKTt2
YXIgYT0kTignYScse2hyZWY6RE9NLmZpbmQoZG9jdW1lbnQsJ2Rpdi5uYW1lX2Js
b2NrIGEnKS5ocmVmLHRhcmdldDonX2JsYW5rJ30sX3R4KCJTZSBuZWNlc2l0YSBs
YSB2ZXJpZmljYWNpXHUwMGYzbiBwYXJhIGNvbmVjdGFyLiIpKTt0aGlzLnN0YXR1
cz0kTignc3Bhbicse2NsYXNzTmFtZTonY29ubmVjdF9zcGFuJ30sYSk7RE9NLmlu
c2VydEFmdGVyKHRoaXMuYnV0dG9uLHRoaXMuc3RhdHVzKTt9ZWxzZXtDU1MuaGlk
ZSh0aGlzLmJ1dHRvbik7aWYoYi5lcnJvcj09MTQzMTAwMSl7dGhpcy5zdGF0dXM9
JE4oJ3NwYW4nLHtjbGFzc05hbWU6J2Nvbm5lY3Rfc3Bhbid9LF90eCgiVGUgZ3Vz
dGEgZXN0by4iKSk7fWVsc2UgdGhpcy5zdGF0dXM9JE4oJ3NwYW4nLHtjbGFzc05h
bWU6J2Nvbm5lY3Rfc3Bhbid9LGIuZ2V0RXJyb3JTdW1tYXJ5KCkrJzogJytiLmdl
dEVycm9yRGVzY3JpcHRpb24oKSk7YW5pbWF0aW9uKHRoaXMuc3RhdHVzKS5mcm9t
KCdvcGFjaXR5JywwKS50bygnb3BhY2l0eScsMSkuZ28oKTtET00uaW5zZXJ0QWZ0
ZXIodGhpcy5idXR0b24sdGhpcy5zdGF0dXMpO310aGlzLmJ1c3k9ZmFsc2U7fTtD
b25uZWN0V2lkZ2V0LnByb3RvdHlwZS5jb25uZWN0RG9uZUhhbmRsZXI9ZnVuY3Rp
b24oYyl7dmFyIGI9Yy5nZXRQYXlsb2FkKCk7aWYoIWJ8fCFiLmZlZWRiYWNrKXJl
dHVybjt0aGlzLnN0YXR1cz0kTignc3Bhbicse2NsYXNzTmFtZTonY29ubmVjdF9z
cGFuJ30sSFRNTChiLmZlZWRiYWNrKSk7dmFyIGQ9JE4oJ2EnLHtjbGFzc05hbWU6
J3VuZG8nfSxfdHgoIkRlc2hhY2VyIikpO0V2ZW50Lmxpc3RlbihkLCdjbGljaycs
ZnVuY3Rpb24oZSl7ZS5raWxsKCk7dGhpcy5kaXNjb25uZWN0KCk7fS5iaW5kKHRo
aXMpKTtET00uYXBwZW5kQ29udGVudCh0aGlzLnN0YXR1cyxkKTthbmltYXRpb24o
dGhpcy5zdGF0dXMpLmZyb20oJ29wYWNpdHknLDApLnRvKCdvcGFjaXR5JywxKS5n
bygpO0RPTS5pbnNlcnRBZnRlcih0aGlzLmJ1dHRvbix0aGlzLnN0YXR1cyk7Q1NT
LmhpZGUodGhpcy5idXR0b24pO2lmKHRoaXMubmV3X2ZhbiE9bnVsbCYmYi5jb25u
ZWN0X2Zhbl9kaXYpe3ZhciBhPSROKCdkaXYnLHt9LEhUTUwoYi5jb25uZWN0X2Zh
bl9kaXYpKTtET00uc2V0Q29udGVudCh0aGlzLm5ld19mYW4sRE9NLmZpbmQoYSwn
YScpKTt9dGhpcy5zaG93TmV3RmFuKCk7dGhpcy5idXN5PWZhbHNlO307Q29ubmVj
dFdpZGdldC5wcm90b3R5cGUuc2hvd05ld0Zhbj1mdW5jdGlvbigpe3RoaXMuZmFu
X3Nob3duLmZvckVhY2goZnVuY3Rpb24oYil7aWYoIUNTUy5oYXNDbGFzcyhiLCdo
aWRkZW5fZWxlbScpKXJldHVybjt2YXIgYT1DU1MuZ2V0U3R5bGUoYiwnd2lkdGgn
KTtDU1Muc2V0U3R5bGUoYiwnd2lkdGgnLDApO0NTUy5zZXRTdHlsZShiLCdvcGFj
aXR5JywwKTtDU1Muc2hvdyhiKTthbmltYXRpb24oYikudG8oJ3dpZHRoJyxhKS5k
dXJhdGlvbigxMDApLmNoZWNrcG9pbnQoKS50bygnb3BhY2l0eScsMSkuZHVyYXRp
b24oNDAwKS5nbygpO30pO3RoaXMuZmFuX2hpZGRlbi5mb3JFYWNoKGZ1bmN0aW9u
KGEpe0NTUy5oaWRlKGEpO30pO307Q29ubmVjdFdpZGdldC5wcm90b3R5cGUuY29u
bmVjdFVuZG9uZUhhbmRsZXI9ZnVuY3Rpb24oYil7dmFyIGE9Yi5nZXRQYXlsb2Fk
KCk7RE9NLnJlbW92ZSh0aGlzLnN0YXR1cyk7YW5pbWF0aW9uKHRoaXMuYnV0dG9u
KS5mcm9tKCdvcGFjaXR5JywwKS50bygnb3BhY2l0eScsMSkuZ28oKTtDU1Muc2hv
dyh0aGlzLmJ1dHRvbik7dGhpcy5oaWRlTmV3RmFuKCk7dGhpcy5idXN5PWZhbHNl
O307Q29ubmVjdFdpZGdldC5wcm90b3R5cGUuaGlkZU5ld0Zhbj1mdW5jdGlvbigp
e3RoaXMuZmFuX3Nob3duLmZvckVhY2goZnVuY3Rpb24oYSl7aWYoQ1NTLmhhc0Ns
YXNzKGEsJ2hpZGRlbl9lbGVtJykpcmV0dXJuO2FuaW1hdGlvbihhKS50bygnb3Bh
Y2l0eScsMCkuZHVyYXRpb24oMTAwKS5jaGVja3BvaW50KC4yNSkudG8oJ3dpZHRo
JywwKS5kdXJhdGlvbigxMDApLm9uZG9uZShmdW5jdGlvbigpe0NTUy5zZXRTdHls
ZShhLCd3aWR0aCcsbnVsbCk7Q1NTLmhpZGUoYSk7dGhpcy5mYW5faGlkZGVuLmZv
ckVhY2goZnVuY3Rpb24oYil7Q1NTLnNob3coYik7fSk7fS5iaW5kKHRoaXMpKS5n
bygpO30uYmluZCh0aGlzKSk7fTtDb25uZWN0V2lkZ2V0LmxvYWRTdHJlYW09ZnVu
Y3Rpb24oYyxhLGIpe25ldyBBc3luY1JlcXVlc3QoKS5zZXRNZXRob2QoJ0dFVCcp
LnNldFVSSSgnL2FqYXgvY29ubmVjdC9jb25uZWN0X3dpZGdldC5waHAnKS5zZXRE
YXRhKHtpZDpjLHVuaXFpZDphLGZvcmNlX3dhbGw6Yn0pLnNldFJlYWRPbmx5KHRy
dWUpLnNldEVycm9ySGFuZGxlcihiYWdvZmhvbGRpbmcpLnNlbmQoKTt9O0Nvbm5l
Y3RXaWRnZXQubG9nZ2VkSW49ZnVuY3Rpb24oYyxhKXtpZihnZSgncG9zdF9mb3Jt
X2lkJykpe0RPTS5yZXBsYWNlKCQoJ3Bvc3RfZm9ybV9pZCcpLEhUTUwoYSkpO31l
bHNlIERPTS5hcHBlbmRDb250ZW50KERPTS5maW5kKGRvY3VtZW50LCdib2R5Jyks
SFRNTChhKSk7Zm9yKHZhciBiIGluIENvbm5lY3RXaWRnZXQuaW5zdGFuY2VzKXtD
b25uZWN0V2lkZ2V0Lmluc3RhbmNlc1tiXS5zZXRMb2dnZWRJbihjKTtDb25uZWN0
V2lkZ2V0Lmluc3RhbmNlc1tiXS5jb25uZWN0KCk7fX07Q29ubmVjdFdpZGdldC5z
ZXRJc0Nvbm5lY3Q9ZnVuY3Rpb24oYSl7Q29ubmVjdFdpZGdldC5pc19jb25uZWN0
PWE7fTsKdmFyIFBsYWNlQWN0aW9uTGluaz17c3RhcnRfY2xhaW1fbGluazpmdW5j
dGlvbihiKXt2YXIgYT1uZXcgQXN5bmNSZXF1ZXN0KCkuc2V0TWV0aG9kKCdQT1NU
Jykuc2V0VVJJKCcvYWpheC9wbGFjZXMvY2xhaW0vc3RhcnRfY2xhaW0ucGhwJyku
c2V0RGF0YSh7aWQ6Yn0pO25ldyBEaWFsb2coKS5zZXRBc3luYyhhKS5zaG93KCk7
cmV0dXJuIGZhbHNlO30scmVmZXJfY2xhaW1fbGluazpmdW5jdGlvbihiKXt2YXIg
YT1uZXcgQXN5bmNSZXF1ZXN0KCkuc2V0TWV0aG9kKCdQT1NUJykuc2V0VVJJKCcv
YWpheC9wbGFjZXMvY2xhaW0vcmVmZXJfY2xhaW0ucGhwJykuc2V0RGF0YSh7aWQ6
Yn0pO25ldyBEaWFsb2coKS5zZXRBc3luYyhhKS5zaG93KCk7cmV0dXJuIGZhbHNl
O319Ow==
------------UAMIZgc77nT2aFBV02afBr
Content-Disposition: inline; filename=MRr3L0UO8LE.js
Content-Type: application/x-javascript; charset=utf-8; name=MRr3L0UO8LE.js
Content-Location: http://static.ak.fbcdn.net/rsrc.php/v1/yl/r/MRr3L0UO8LE.js
Content-Transfer-Encoding: Base64
LyoxMzE0MDc3OTI3LDE2OTc3NjA2NyovCgppZiAod2luZG93LkNhdmFscnlMb2dn
ZXIpIHsgQ2F2YWxyeUxvZ2dlci5zdGFydF9qcyhbIlQ4SFwvZyJdKTsgfQoKdmFy
IFhEPXtfY2FsbGJhY2tzOltdLF9vcHRzOnthdXRvUmVzaXplOmZhbHNlLGFsbG93
U2hyaW5rOnRydWUsY2hhbm5lbFVybDpudWxsLGhpZGVPdmVyZmxvdzpmYWxzZSxu
ZXdSZXNpemVNZXRob2Q6ZmFsc2UscmVzaXplVGltZW91dDoxMDAscmVzaXplV2lk
dGg6ZmFsc2UsZXhwZWN0UmVzaXplQWNrOmZhbHNlLHJlc2l6ZUFja1RpbWVvdXQ6
NjAwMH0sX2xhc3RSZXNpemVBY2tJZDowLF9yZXNpemVDb3VudDowLF9yZXNpemVU
aW1lc3RhbXA6MCxpbml0OmZ1bmN0aW9uKGEpe3RoaXMuX29wdHM9Y29weV9wcm9w
ZXJ0aWVzKGNvcHlfcHJvcGVydGllcyh7fSx0aGlzLl9vcHRzKSxhKTtpZih0aGlz
Ll9vcHRzLmF1dG9SZXNpemUpdGhpcy5fc3RhcnRSZXNpemVNb25pdG9yKCk7QXJi
aXRlci5zdWJzY3JpYmUoJ0Nvbm5lY3QuVW5zYWZlLnJlc2l6ZS5hY2snLGZ1bmN0
aW9uKGMsYil7aWYoIWIuaWQpYi5pZD10aGlzLl9yZXNpemVDb3VudDtpZihiLmlk
PnRoaXMuX2xhc3RSZXNpemVBY2tJZCl0aGlzLl9sYXN0UmVzaXplQWNrSWQ9Yi5p
ZDt9LmJpbmQodGhpcykpO30sc2VuZDpmdW5jdGlvbihiLGEpe2E9YXx8dGhpcy5f
b3B0cy5jaGFubmVsVXJsO2lmKCFhKXJldHVybjtpZihhLnN1YnN0cigwLDQpIT0n
aHR0cCcpcmV0dXJuO3ZhciBpPWErJyYnK1VSSS5pbXBsb2RlUXVlcnkoYiksZT0n
ZicrKE1hdGgucmFuZG9tKCkqKDE8PDMwKSkudG9TdHJpbmcoMTYpLnJlcGxhY2Uo
Jy4nLCcnKSxjPWRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnZGl2JykpLGg9ZmFsc2U7Yy5zdHlsZS5wb3NpdGlvbj0nYWJz
b2x1dGUnO2Muc3R5bGUudG9wPSctMTAwMDBweCc7Yy5zdHlsZS53aWR0aD0nMXB4
JztjLnN0eWxlLmhlaWdodD0nMXB4JztYRC5fY2FsbGJhY2tzW2VdPWZ1bmN0aW9u
KCl7aWYoaCl7KGZ1bmN0aW9uKCl7Yy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGMp
O30pLmRlZmVyKDMwMDApO2RlbGV0ZSBYRC5fY2FsbGJhY2tzW2VdO319O2lmKHVh
LmllKCkpe3ZhciBmLGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Zj0n
PGlmcmFtZSBvbmxvYWQ9IlhELl9jYWxsYmFja3MuJytlKycoKSI+PC9pZnJhbWU+
JztkLmlubmVySFRNTD1mO2QuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoJ3NyYycs
aSk7Zj1kLmlubmVySFRNTDtjLmlubmVySFRNTD0nPGlmcmFtZSBzcmM9ImphdmFz
Y3JpcHQ6ZmFsc2UiPjwvaWZyYW1lPic7aD10cnVlOyhmdW5jdGlvbigpe2MuaW5u
ZXJIVE1MPWY7fSkuZGVmZXIoKTt9ZWxzZXt2YXIgZz1kb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdpZnJhbWUnKTtnLm9ubG9hZD1YRC5fY2FsbGJhY2tzW2VdO2MuYXBw
ZW5kQ2hpbGQoZyk7aD10cnVlO2cuc3JjPWk7fX0sX2NvbXB1dGVTaXplOmZ1bmN0
aW9uKCl7cmV0dXJuIHt3aWR0aDp0aGlzLl9vcHRzLnJlc2l6ZVdpZHRoP3RoaXMu
X2NhbGNXaWR0aChYRC5mb3JjZWRfbWluX3dpZHRoKTowLGhlaWdodDp0aGlzLl9j
YWxjSGVpZ2h0KHRoaXMuX29wdHMubmV3UmVzaXplTWV0aG9kKX07fSxfY2FsY0hl
aWdodDpmdW5jdGlvbihkKXt2YXIgYT1kb2N1bWVudC5ib2R5LGI9ZG9jdW1lbnQu
ZG9jdW1lbnRFbGVtZW50LGM9MDtpZihkKXtjPU1hdGgubWF4KE1hdGgubWF4KGEu
b2Zmc2V0SGVpZ2h0LGEuc2Nyb2xsSGVpZ2h0KSthLm9mZnNldFRvcCxNYXRoLm1h
eChiLm9mZnNldEhlaWdodCxiLnNjcm9sbEhlaWdodCkrYi5vZmZzZXRUb3ApO31l
bHNle2lmKHVhLmllKCkpe2M9TWF0aC5tYXgoYS5vZmZzZXRIZWlnaHQsYS5zY3Jv
bGxIZWlnaHQpK2Eub2Zmc2V0VG9wO31lbHNlIGM9Yi5vZmZzZXRIZWlnaHQrYi5v
ZmZzZXRUb3A7aWYod2luZG93LkRpYWxvZyljPU1hdGgubWF4KGMsRGlhbG9nLm1h
eF9ib3R0b20pO31yZXR1cm4gYzt9LF9jYWxjV2lkdGg6ZnVuY3Rpb24oZyl7dmFy
IGE9ZG9jdW1lbnQuYm9keSxlPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxoPTA7
aWYoYS5vZmZzZXRXaWR0aDxhLnNjcm9sbFdpZHRoKXtoPWEuc2Nyb2xsV2lkdGgr
YS5vZmZzZXRMZWZ0O31lbHNle3ZhciBkPWEuY2hpbGROb2Rlcztmb3IodmFyIGY9
MDtmPGQubGVuZ3RoO2YrKyl7dmFyIGI9ZFtmXTt2YXIgYz1iLm9mZnNldFdpZHRo
K2Iub2Zmc2V0TGVmdDtpZihjPmgpaD1jO319aWYoZyloPU1hdGgubWF4KGgsZyk7
aWYoZS5jbGllbnRMZWZ0PjApaCs9KGUuY2xpZW50TGVmdCoyKTtpZihlLmNsaWVu
dFRvcD4wKWhlaWdodCs9KGUuY2xpZW50VG9wKjIpO3JldHVybiBoO30sX3N0YXJ0
UmVzaXplTW9uaXRvcjpmdW5jdGlvbigpe3ZhciBiLGE9ZG9jdW1lbnQuZG9jdW1l
bnRFbGVtZW50O2lmKHRoaXMuX29wdHMuaGlkZU92ZXJmbG93KXthLnN0eWxlLm92
ZXJmbG93PSdoaWRkZW4nO2RvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9J2hp
ZGRlbic7fShmdW5jdGlvbigpe3ZhciBmPXRoaXMuX2NvbXB1dGVTaXplKCk7dmFy
IGc9bmV3IERhdGUoKS5nZXRUaW1lKCk7dmFyIGM9dGhpcy5fbGFzdFJlc2l6ZUFj
a0lkPHRoaXMuX3Jlc2l6ZUNvdW50JiYoZy10aGlzLl9yZXNpemVUaW1lc3RhbXAp
PnRoaXMuX29wdHMucmVzaXplQWNrVGltZW91dDtpZighYnx8KHRoaXMuX29wdHMu
ZXhwZWN0UmVzaXplQWNrJiZjKXx8KHRoaXMuX29wdHMuYWxsb3dTaHJpbmsmJmIu
d2lkdGghPWYud2lkdGgpfHwoIXRoaXMuX29wdHMuYWxsb3dTaHJpbmsmJmIud2lk
dGg8Zi53aWR0aCl8fCh0aGlzLl9vcHRzLmFsbG93U2hyaW5rJiZiLmhlaWdodCE9
Zi5oZWlnaHQpfHwoIXRoaXMuX29wdHMuYWxsb3dTaHJpbmsmJmIuaGVpZ2h0PGYu
aGVpZ2h0KSl7Yj1mO3RoaXMuX3Jlc2l6ZUNvdW50Kys7dGhpcy5fcmVzaXplVGlt
ZXN0YW1wPWc7dmFyIGU9e3R5cGU6J3Jlc2l6ZScsaGVpZ2h0OmYuaGVpZ2h0LGFj
a0RhdGE6e2lkOnRoaXMuX3Jlc2l6ZUNvdW50fX07aWYoZi53aWR0aCYmZi53aWR0
aCE9MCllLndpZHRoPWYud2lkdGg7dHJ5e2lmKFVSSShkb2N1bWVudC5yZWZlcnJl
cikuaXNGYWNlYm9va1VSSSgpJiZ3aW5kb3cucGFyZW50IT13aW5kb3cmJndpbmRv
dy5uYW1lJiZ3aW5kb3cucGFyZW50LmxvY2F0aW9uJiZVUkkod2luZG93LnBhcmVu
dC5sb2NhdGlvbikuaXNGYWNlYm9va1VSSSgpKXt2YXIgaWZyYW1lcz13aW5kb3cu
cGFyZW50LmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpZnJhbWUnKTtm
b3IodmFyIGk9MDtpPGlmcmFtZXMubGVuZ3RoO2k9aSsxKWlmKGlmcmFtZXNbaV0u
bmFtZT09d2luZG93Lm5hbWUpe2lmKHRoaXMuX29wdHMucmVzaXplV2lkdGgpaWZy
YW1lc1tpXS5zdHlsZS53aWR0aD1lLndpZHRoKydweCc7aWZyYW1lc1tpXS5zdHls
ZS5oZWlnaHQ9ZS5oZWlnaHQrJ3B4Jzt9fXRoaXMuc2VuZChlKTt9Y2F0Y2goZCl7
dGhpcy5zZW5kKGUpO319fSkuYmluZCh0aGlzKS5yZWN1cih0aGlzLl9vcHRzLnJl
c2l6ZVRpbWVvdXQpO319O3ZhciBVbnZlcmlmaWVkWEQ9Y29weV9wcm9wZXJ0aWVz
KHt9LFhEKTsKV2lkZ2V0QXJiaXRlcj17X2ZpbmRTaWJsaW5nczpmdW5jdGlvbigp
e2lmKFdpZGdldEFyYml0ZXIuX3NpYmxpbmdzKXJldHVybjtXaWRnZXRBcmJpdGVy
Ll9zaWJsaW5ncz1bXTtmb3IodmFyIGI9cGFyZW50LmZyYW1lcy5sZW5ndGgtMTti
Pj0wO2ItLSl0cnl7aWYocGFyZW50LmZyYW1lc1tiXSYmcGFyZW50LmZyYW1lc1ti
XS5BcmJpdGVyJiZwYXJlbnQuZnJhbWVzW2JdLkFyYml0ZXIuaW5mb3JtKVdpZGdl
dEFyYml0ZXIuX3NpYmxpbmdzLnB1c2gocGFyZW50LmZyYW1lc1tiXS5BcmJpdGVy
KTt9Y2F0Y2goYSl7fX0saW5mb3JtOmZ1bmN0aW9uKCl7V2lkZ2V0QXJiaXRlci5f
ZmluZFNpYmxpbmdzKCk7dmFyIGE9JEEoYXJndW1lbnRzKTtXaWRnZXRBcmJpdGVy
Ll9zaWJsaW5ncy5lYWNoKGZ1bmN0aW9uKGIpe2IuaW5mb3JtLmFwcGx5KGIsYSk7
fSk7fX07CnZhciBQb3B1cFJlc2l6ZXI9e19vcHRzOnthbGxvd1Nocmluazp0cnVl
LHRpbWVvdXQ6MTAwfSxpbml0OmZ1bmN0aW9uKGEpe2NvcHlfcHJvcGVydGllcyhQ
b3B1cFJlc2l6ZXIuX29wdHMsYSk7UG9wdXBSZXNpemVyLl9yZXNpemVDaGVjay5y
ZWN1cihQb3B1cFJlc2l6ZXIuX29wdHMudGltZW91dCk7fSxfcmVzaXplQ2hlY2s6
ZnVuY3Rpb24oKXt2YXIgZT1WZWN0b3IyLmdldFZpZXdwb3J0RGltZW5zaW9ucygp
LGE9UG9wdXBSZXNpemVyLl9nZXREb2N1bWVudFNpemUoKSxjPWEueS1lLnksZD1h
LngtZS54O2lmKGQ8MClkPTA7aWYoIVBvcHVwUmVzaXplci5fb3B0cy5hbGxvd1No
cmluayYmYzwwKWM9MDtpZihjfHxkKXRyeXt3aW5kb3cucmVzaXplQnkoZCxjKTtp
ZihkKXdpbmRvdy5tb3ZlQnkoZC8tMiwwKTt9Y2F0Y2goYil7fX0sX2dldERvY3Vt
ZW50U2l6ZTpmdW5jdGlvbigpe3ZhciBhPXt4OnVhLmZpcmVmb3goKT9kb2N1bWVu
dC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsV2lkdGg6ZG9jdW1lbnQuYm9keS5zY3Jv
bGxXaWR0aCx5OmRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0fTtpZihhLng8PTB8
fGEueD5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsV2lkdGgpYS54PWRv
Y3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxXaWR0aDtpZihhLnk8PTB8fGEu
eT5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0KWEueT1kb2N1
bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0O2lmKHdpbmRvdy5EaWFs
b2cmJkRpYWxvZy5tYXhfYm90dG9tJiZEaWFsb2cubWF4X2JvdHRvbT5hLnkpYS55
PURpYWxvZy5tYXhfYm90dG9tO3JldHVybiBhO30sb3BlbjpmdW5jdGlvbihpLGIs
ail7dmFyIGY9dHlwZW9mIHdpbmRvdy5zY3JlZW5YIT0ndW5kZWZpbmVkJz93aW5k
b3cuc2NyZWVuWDp3aW5kb3cuc2NyZWVuTGVmdCxnPXR5cGVvZiB3aW5kb3cuc2Ny
ZWVuWSE9J3VuZGVmaW5lZCc/d2luZG93LnNjcmVlblk6d2luZG93LnNjcmVlblRv
cCxlPXR5cGVvZiB3aW5kb3cub3V0ZXJXaWR0aCE9J3VuZGVmaW5lZCc/d2luZG93
Lm91dGVyV2lkdGg6ZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCxkPXR5cGVvZiB3
aW5kb3cub3V0ZXJIZWlnaHQhPSd1bmRlZmluZWQnP3dpbmRvdy5vdXRlckhlaWdo
dDooZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQtMjIpLGM9cGFyc2VJbnQoZiso
KGUtaikvMiksMTApLGg9cGFyc2VJbnQoZysoKGQtYikvMi41KSwxMCksYT0oJ3dp
ZHRoPScraisnLGhlaWdodD0nK2IrJyxsZWZ0PScrYysnLHRvcD0nK2gpO3JldHVy
biB3aW5kb3cub3BlbihpLCdfYmxhbmsnLGEpO319Owp2YXIgUGxhdGZvcm1PcHRJ
blBvcHVwPWZ1bmN0aW9uKCl7fTtjb3B5X3Byb3BlcnRpZXMoUGxhdGZvcm1PcHRJ
blBvcHVwLHtESUFMT0dfVVJMOicvY29ubmVjdC91aXNlcnZlci5waHAnLERJQUxP
R19XSURUSDo0MjAsRElBTE9HX0hFSUdIVDo0NTAsQVBQX0lEOjEyNzc2MDA4NzIz
NzYxMCxvcGVuOmZ1bmN0aW9uKGQsYyxhKXtpZighZClkPSdnZW5lcmljJztpZigh
YyljPSdvcHQuaW4nO3ZhciBiPW5ldyBVUkkoUGxhdGZvcm1PcHRJblBvcHVwLkRJ
QUxPR19VUkwpO2IuYWRkUXVlcnlEYXRhKHtzb2NpYWxfcGx1Z2luOmQsbWV0aG9k
OmMsZGlzcGxheToncG9wdXAnLHNlY3VyZTpVUkkuZ2V0UmVxdWVzdFVSSSgpLmlz
U2VjdXJlKCksYXBwX2lkOlBsYXRmb3JtT3B0SW5Qb3B1cC5BUFBfSUR9KTtpZihh
KWIuYWRkUXVlcnlEYXRhKGEpO3JldHVybiBQb3B1cFJlc2l6ZXIub3BlbihiLnRv
U3RyaW5nKCksUGxhdGZvcm1PcHRJblBvcHVwLkRJQUxPR19XSURUSCxQbGF0Zm9y
bU9wdEluUG9wdXAuRElBTE9HX0hFSUdIVCk7fX0pOwp2YXIgRXh0ZXJuYWxOb2Rl
Q29ubmVjdFdpZGdldD1mdW5jdGlvbihpKXtjb3B5X3Byb3BlcnRpZXModGhpcyx7
d2lkZ2V0SUQ6aS53aWRnZXRJRCx3aWRnZXQ6JChpLndpZGdldElEKSx2aWV3ZXJJ
RDppLnZpZXdlcixub2RlVHlwZTppLm5vZGVUeXBlLHZpZXdlcklzQWRtaW46aS52
aWV3ZXJJc0FkbWluJiYhaS51c2VyT3B0ZWRPdXQsYWRtaW5Vcmw6aS5hZG1pblVy
bCxwb3B1cE9wdEluUGFyYW1zOnt9LG5vZGVVcmk6bmV3IFVSSShpLm5vZGVVUkwp
LGV4dGVybmFsVXJsOmkuZXh0ZXJuYWxVUkwscGFnZUlkOmkucGFnZUlkLGxheW91
dDppLmxheW91dCxlZGdlVHlwZTppLmVkZ2VUeXBlLGVycm9yOmkuZXJyb3IsZXJy
b3JVUkk6bmV3IFVSSSgnLycpLGFscmVhZHlDb25uZWN0ZWQ6aS5hbHJlYWR5Q29u
bmVjdGVkLHVzaW5nQ29ubmVjdExpYnJhcnk6ISFpLmNoYW5uZWxVUkwsY29tbWVu
dFdpZGdldE1hcmt1cDppLmNvbW1lbnRXaWRnZXRNYXJrdXAsY29tbWVudFdpZGdl
dE9wZW46ZmFsc2UsY29tbWVudFdpZGdldFZpc2libGU6ZmFsc2UsdXNlclByb2Zp
bGU6bnVsbCxjb25uZWN0U3RvcnlGYmlkOjAsaXNBbWJpZ3VvdXNUZXh0OmkuaXNB
bWJpZ3VvdXNUZXh0LHNvY2lhbEJhcjppLnNvY2lhbGJhcix1c2VEaXNjb25uZWN0
TGluazppLnVzZURpc2Nvbm5lY3RMaW5rLHNob3dFcnJvcjppLnNob3dFcnJvcixz
aG93Q29uZmlybTppLnNob3dDb25maXJtLHNob3dGYWNlczppLnNob3dGYWNlcyxj
b25uZWN0VGV4dDppLmNvbm5lY3RUZXh0LHJlZjppLnJlZix1c2VyT3B0ZWRPdXQ6
aS51c2VyT3B0ZWRPdXQsdXNpbmdJbmxpbmVDb21tZW50aW5nOmkudXNpbmdJbmxp
bmVDb21tZW50aW5nLHN1cHBvcnRDb21tZW50aW5nOiEhaS5jaGFubmVsVVJMfHxp
LnVzaW5nSW5saW5lQ29tbWVudGluZyxpbmxpbmVDb21tZW50TGlzdGVuZXJzSW5p
dGlhbGl6ZWQ6ZmFsc2UsZm9yY2VDb21tZW50SG9va3M6aS5mb3JjZUNvbW1lbnRI
b29rcyxudXg6aS5udXgsaWZyYW1lUmVmZXJlcjppLmlmcmFtZVJlZmVyZXIsaXNC
bG9ja2VkOmkuaXNCbG9ja2VkLGlzUGVyc29uYWxpemVkOmkuaXNQZXJzb25hbGl6
ZWQsY29uZmlybWVkQ29ubmVjdDppLmNvbmZpcm1lZENvbm5lY3QsaGFzU2VuZDpp
LnNlbmQsY29sb3JTY2hlbWU6aS5jb2xvclNjaGVtZSxncmF5T3V0OmkuZ3JheU91
dH0pO2lmKHRoaXMudXNpbmdDb25uZWN0TGlicmFyeSlVbnZlcmlmaWVkWEQuaW5p
dCh7YXV0b1Jlc2l6ZTppLmF1dG9SZXNpemUsY2hhbm5lbFVybDppLmNoYW5uZWxV
UkwscmVzaXplV2lkdGg6aS5hdXRvUmVzaXplJiZpLmxheW91dCE9PUV4dGVybmFs
Tm9kZUNvbm5lY3RXaWRnZXQuU1RBTkRBUkRfTEFZT1VUfSk7dGhpcy5jb25uZWN0
QnV0dG9uU2xpZGVyPURPTS5zY3J5KHRoaXMud2lkZ2V0LCdkaXYuY29ubmVjdF9i
dXR0b25fc2xpZGVyJyk7dGhpcy5jb25uZWN0QnV0dG9uQ29udGFpbmVyPW51bGw7
aWYodGhpcy5jb25uZWN0QnV0dG9uU2xpZGVyLmxlbmd0aCl7dGhpcy5jb25uZWN0
QnV0dG9uU2xpZGVyPXRoaXMuY29ubmVjdEJ1dHRvblNsaWRlclswXTt0aGlzLmNv
bm5lY3RCdXR0b25Db250YWluZXI9RE9NLmZpbmQodGhpcy5jb25uZWN0QnV0dG9u
U2xpZGVyLCdkaXYuY29ubmVjdF9idXR0b25fY29udGFpbmVyJyk7fWVsc2UgdGhp
cy5jb25uZWN0QnV0dG9uU2xpZGVyPW51bGw7dGhpcy5jb25uZWN0QnV0dG9uPURP
TS5maW5kKHRoaXMud2lkZ2V0LCdhLmNvbm5lY3Rfd2lkZ2V0X2xpa2VfYnV0dG9u
Jyk7aWYodGhpcy5ncmF5T3V0KXRoaXMudG9tYnN0b25lQ3Jvc3M9RE9NLmZpbmQo
dGhpcy53aWRnZXQsJ2Rpdi50b21ic3RvbmVfY3Jvc3MnKTt0aGlzLmNvbm5lY3Rl
ZE1lc3NhZ2U9RE9NLnNjcnkodGhpcy53aWRnZXQsJ3NwYW4uY29ubmVjdF93aWRn
ZXRfY29ubmVjdGVkX3RleHQnKTt0aGlzLmNvbm5lY3RlZE1lc3NhZ2U9dGhpcy5j
b25uZWN0ZWRNZXNzYWdlLmxlbmd0aD90aGlzLmNvbm5lY3RlZE1lc3NhZ2VbMF06
bnVsbDt0aGlzLm5vdENvbm5lY3RlZE1lc3NhZ2U9RE9NLnNjcnkodGhpcy53aWRn
ZXQsJ3NwYW4uY29ubmVjdF93aWRnZXRfbm90X2Nvbm5lY3RlZF90ZXh0Jyk7dGhp
cy5ub3RDb25uZWN0ZWRNZXNzYWdlPXRoaXMubm90Q29ubmVjdGVkTWVzc2FnZS5s
ZW5ndGg/dGhpcy5ub3RDb25uZWN0ZWRNZXNzYWdlWzBdOm51bGw7dGhpcy5hZG1p
blNwYW5zPURPTS5zY3J5KHRoaXMud2lkZ2V0LCdzcGFuLmNvbm5lY3Rfd2lkZ2V0
X2FkbWluX3NwYW4nKTtpZih0aGlzLmFkbWluU3BhbnMubGVuZ3RoPjApe3RoaXMu
YWRtaW5MaW5rcz1bXTtmb3IodmFyIGE9MDthPHRoaXMuYWRtaW5TcGFucy5sZW5n
dGg7YSsrKXRoaXMuYWRtaW5MaW5rc1thXT1ET00uZmluZCh0aGlzLmFkbWluU3Bh
bnNbYV0sJ2EuY29ubmVjdF93aWRnZXRfYWRtaW5fb3B0aW9uJyk7fWlmKHRoaXMu
bGF5b3V0PT1FeHRlcm5hbE5vZGVDb25uZWN0V2lkZ2V0LlNUQU5EQVJEX0xBWU9V
VCl7dGhpcy5jb25maXJtYXRpb25DZWxsPURPTS5maW5kKHRoaXMud2lkZ2V0LCdk
aXYuY29ubmVjdF9jb25maXJtYXRpb25fY2VsbCcpO3RoaXMudXNlckFjdGlvblRl
eHRTcGFuPURPTS5maW5kKHRoaXMuY29uZmlybWF0aW9uQ2VsbCwnc3Bhbi5jb25u
ZWN0X3dpZGdldF91c2VyX2FjdGlvbicpO3RoaXMuc3VtbWFyeVRleHRTcGFuPURP
TS5maW5kKHRoaXMuY29uZmlybWF0aW9uQ2VsbCwnc3Bhbi5jb25uZWN0X3dpZGdl
dF9zdW1tYXJ5Jyk7dGhpcy5zdW1tYXJ5VGV4dD1ET00uZmluZCh0aGlzLmNvbmZp
cm1hdGlvbkNlbGwsJ2Rpdi5jb25uZWN0X3dpZGdldF90ZXh0X3N1bW1hcnknKTt2
YXIgaj1ET00uc2NyeSh0aGlzLndpZGdldCwnZGl2LmNvbm5lY3Rfd2lkZ2V0X3Nh
bXBsZV9jb25uZWN0aW9ucycpO3RoaXMuc2FtcGxlQ29ubmVjdGlvbnM9ai5sZW5n
dGg+MD9qWzBdOm51bGw7aWYoaS5zaG93RmFjZXMmJmkudmlld2VyPjApe3ZhciBl
PURPTS5zY3J5KHRoaXMud2lkZ2V0LCdkaXYuY29ubmVjdF93aWRnZXRfbG9nZ2Vk
X2luX3VzZXInKTt0aGlzLmxvZ2dlZEluVXNlclBob3RvRGl2PWUubGVuZ3RoPjA/
ZVswXTpudWxsO319aWYodGhpcy5sYXlvdXQ9PT1FeHRlcm5hbE5vZGVDb25uZWN0
V2lkZ2V0LlNJTVBMRV9MQVlPVVQpe3RoaXMub3JpZ2luYWxCdXR0b25XaWR0aD10
aGlzLmNvbXB1dGVCdXR0b25EaW1lbnNpb25zKCkud2lkdGg7dGhpcy5zdW1tYXJ5
SW5jbHVkaW5nPURPTS5maW5kKHRoaXMud2lkZ2V0LCd0ZC5jb25uZWN0X3dpZGdl
dF9zaW1wbGVfaW5jbHVkaW5nJyk7dGhpcy5zdXBwb3J0Q29tbWVudGluZz1mYWxz
ZTt0aGlzLnVzaW5nSW5saW5lQ29tbWVudGluZz1mYWxzZTt9dGhpcy5zZXRRdWVy
eURhdGEoKTtpZih0aGlzLnBhZ2VJZCljb3B5X3Byb3BlcnRpZXModGhpcy5wb3B1
cE9wdEluUGFyYW1zLHtjb25uZWN0X2lkOnRoaXMucGFnZUlkfSk7dGhpcy5lcnJv
clNwYW5zPURPTS5zY3J5KHRoaXMud2lkZ2V0LCdzcGFuLmNvbm5lY3Rfd2lkZ2V0
X2Vycm9yX3NwYW4nKTtpZih0aGlzLmVycm9yU3BhbnMubGVuZ3RoPjApe3RoaXMu
ZXJyb3JMaW5rcz1bXTtmb3IodmFyIGI9MDtiPHRoaXMuZXJyb3JTcGFucy5sZW5n
dGg7YisrKXRoaXMuZXJyb3JMaW5rc1tiXT1ET00uZmluZCh0aGlzLmVycm9yU3Bh
bnNbYl0sJ2EuY29ubmVjdF93aWRnZXRfZXJyb3JfdGV4dCcpO310aGlzLmNvbmZp
cm1TcGFucz1ET00uc2NyeSh0aGlzLndpZGdldCwnc3Bhbi5jb25uZWN0X3dpZGdl
dF9jb25maXJtX3NwYW4nKTtpZih0aGlzLmNvbmZpcm1TcGFucy5sZW5ndGg+MCl7
dGhpcy5jb25maXJtTGlua3M9W107Zm9yKHZhciBkPTA7ZDx0aGlzLmNvbmZpcm1T
cGFucy5sZW5ndGg7ZCsrKXRoaXMuY29uZmlybUxpbmtzW2RdPURPTS5maW5kKHRo
aXMuY29uZmlybVNwYW5zW2RdLCdhLmNvbm5lY3Rfd2lkZ2V0X2NvbmZpcm1fbGlu
aycpO310aGlzLnVubGlrZVNwYW5zPURPTS5zY3J5KHRoaXMud2lkZ2V0LCdzcGFu
LnVubGlrZV9zcGFuJyk7dGhpcy51bmxpa2VMaW5rcz1bXTtmb3IodmFyIGM9MDtj
PHRoaXMudW5saWtlU3BhbnMubGVuZ3RoO2MrKyl7dGhpcy51bmxpa2VMaW5rc1tj
XT1ET00uZmluZCh0aGlzLnVubGlrZVNwYW5zW2NdLCdhLmNvbm5lY3Rfd2lkZ2V0
X3VubGlrZV9saW5rJyk7RXZlbnQubGlzdGVuKHRoaXMudW5saWtlTGlua3NbY10s
J2NsaWNrJyx0aGlzLmNvbm5lY3RUb05vZGVPbkNsaWNrLmJpbmQodGhpcykpO312
YXIgaD1ET00uc2NyeSh0aGlzLndpZGdldCwnZGl2LmNvbm5lY3Rfd2lkZ2V0X251
bWJlcl9jbG91ZCcpO2lmKGgubGVuZ3RoPT0xKXt0aGlzLm51bWJlckNsb3VkPWhb
MF07dGhpcy5udW1iZXJDbG91ZE51Yj1ET00uZmluZCh0aGlzLndpZGdldCwnZGl2
LmNvbm5lY3Rfd2lkZ2V0X251bWJlcl9jbG91ZF9udWInKTt0aGlzLm51bWJlckNs
b3VkRXh0ZW5zaW9uPURPTS5maW5kKHRoaXMubnVtYmVyQ2xvdWQsJ2Rpdi5jb25u
ZWN0X3dpZGdldF9udW1iZXJfY2xvdWRfZXh0ZW5zaW9uJyk7dGhpcy5zaXplTnVt
YmVyQ2xvdWQoKTt0aGlzLm51bWJlckNsb3VkVW5saWtlU3Bhbj1ET00uZmluZCh0
aGlzLm51bWJlckNsb3VkRXh0ZW5zaW9uLCdzcGFuLnVubGlrZV9zcGFuJyk7dGhp
cy5udW1iZXJDbG91ZFJlbWluZGVyU3Bhbj1ET00uZmluZCh0aGlzLm51bWJlckNs
b3VkRXh0ZW5zaW9uLCdzcGFuLmxpa2VfcmVtaW5kZXInKTt0aGlzLmluQW5pbWF0
aW9uPWZhbHNlO3RoaXMucmVtaW5kZXJJc1Zpc2libGU9Q1NTLmhhc0NsYXNzKHRo
aXMubnVtYmVyQ2xvdWRVbmxpa2VTcGFuLCdoaWRkZW5fZWxlbScpO0V2ZW50Lmxp
c3Rlbih0aGlzLm51bWJlckNsb3VkLCdtb3VzZWxlYXZlJyx0aGlzLnJlc3RvcmVS
ZW1pbmRlclNwYW4uYmluZCh0aGlzKSk7RXZlbnQubGlzdGVuKHRoaXMubnVtYmVy
Q2xvdWRFeHRlbnNpb24sJ21vdXNlbGVhdmUnLHRoaXMucmVzdG9yZVJlbWluZGVy
U3Bhbi5iaW5kKHRoaXMpKTtFdmVudC5saXN0ZW4odGhpcy5udW1iZXJDbG91ZEV4
dGVuc2lvbiwnbW91c2VlbnRlcicsdGhpcy5leHBvc2VVbmxpa2VTcGFuLmJpbmQo
dGhpcykpO0V2ZW50Lmxpc3Rlbih0aGlzLm51bWJlckNsb3VkLCdtb3VzZWVudGVy
Jyx0aGlzLmV4cG9zZVVubGlrZVNwYW4uYmluZCh0aGlzKSk7RXZlbnQubGlzdGVu
KHRoaXMubnVtYmVyQ2xvdWRFeHRlbnNpb24sJ21vdXNlbGVhdmUnLGZ1bmN0aW9u
KGV2ZW50KXt0aGlzLnJlcXVpcmVzTW91c2VMZWF2ZUV2ZW50PWZhbHNlO30uYmlu
ZCh0aGlzKSk7fWlmKHRoaXMudXNpbmdJbmxpbmVDb21tZW50aW5nJiYhdGhpcy5z
aG93RmFjZXMpe3RoaXMuc2hhcmVDb21tZW50U3BhbnM9RE9NLnNjcnkodGhpcy53
aWRnZXQsJ3NwYW4uY29ubmVjdF93aWRnZXRfc2hhcmVfY29tbWVudF9zcGFuJyk7
Zm9yKHZhciBmPTA7Zjx0aGlzLnNoYXJlQ29tbWVudFNwYW5zLmxlbmd0aDtmKysp
e3ZhciBrPURPTS5maW5kKHRoaXMuc2hhcmVDb21tZW50U3BhbnNbZl0sJ2EuY29u
bmVjdF93aWRnZXRfc2hhcmVfY29tbWVudF9vcHRpb24nKTtFdmVudC5saXN0ZW4o
aywnY2xpY2snLGZ1bmN0aW9uKGV2ZW50KXtmb3IodmFyIGw9MDtsPHRoaXMuc2hh
cmVDb21tZW50U3BhbnMubGVuZ3RoO2wrKylDU1MuYWRkQ2xhc3ModGhpcy5zaGFy
ZUNvbW1lbnRTcGFuc1tsXSwnaGlkZGVuX2VsZW0nKTt0aGlzLnByZXNlbnRDb21t
ZW50aW5nT3B0aW9uKCk7fS5iaW5kKHRoaXMpKTt9fWlmKHRoaXMubGF5b3V0PT09
RXh0ZXJuYWxOb2RlQ29ubmVjdFdpZGdldC5CVVRUT05fQ09VTlRfTEFZT1VUKXtY
RC5mb3JjZWRfbWluX3dpZHRoPXRoaXMuZ2V0QnV0dG9uQ291bnRXaWRnZXRXaWR0
aCgpO3RoaXMubnVtYmVyRXhjbHVkaW5nPURPTS5maW5kKHRoaXMud2lkZ2V0LCd0
ZC5jb25uZWN0X3dpZGdldF9idXR0b25fY291bnRfZXhjbHVkaW5nJyk7dGhpcy5z
dW1tYXJ5SW5jbHVkaW5nPURPTS5maW5kKHRoaXMud2lkZ2V0LCd0ZC5jb25uZWN0
X3dpZGdldF9idXR0b25fY291bnRfaW5jbHVkaW5nJyk7dGhpcy50aHVtYnNVcElj
b249RE9NLmZpbmQodGhpcy5zdW1tYXJ5SW5jbHVkaW5nLCdkaXYudGh1bWJzX3Vw
Jyk7dGhpcy51bmRvUmVnaW9uPURPTS5maW5kKHRoaXMuc3VtbWFyeUluY2x1ZGlu
ZywnZGl2LnVuZG8nKTt0aGlzLm9yaWdpbmFsQnV0dG9uV2lkdGg9dGhpcy5jb21w
dXRlQnV0dG9uRGltZW5zaW9ucygpLndpZHRoO0V2ZW50Lmxpc3Rlbih0aGlzLnRo
dW1ic1VwSWNvbiwnbW91c2VlbnRlcicsZnVuY3Rpb24oZXZlbnQpe3RoaXMudW5k
b0J1dHRvbj1ET00uZmluZCh0aGlzLnVuZG9SZWdpb24sJ2xhYmVsLnVuZG9fYnV0
dG9uIGlucHV0Jyk7RXZlbnQubGlzdGVuKHRoaXMudW5kb0J1dHRvbiwnY2xpY2sn
LHRoaXMuY29ubmVjdFRvTm9kZU9uQ2xpY2suYmluZCh0aGlzKSk7Q1NTLmFkZENs
YXNzKHRoaXMudGh1bWJzVXBJY29uLCdoaWRkZW5fZWxlbScpO0NTUy5yZW1vdmVD
bGFzcyh0aGlzLnVuZG9SZWdpb24sJ2hpZGRlbl9lbGVtJyk7fS5iaW5kKHRoaXMp
KTtFdmVudC5saXN0ZW4odGhpcy51bmRvUmVnaW9uLCdtb3VzZWxlYXZlJyxmdW5j
dGlvbihldmVudCl7Q1NTLnJlbW92ZUNsYXNzKHRoaXMudGh1bWJzVXBJY29uLCdo
aWRkZW5fZWxlbScpO0NTUy5hZGRDbGFzcyh0aGlzLnVuZG9SZWdpb24sJ2hpZGRl
bl9lbGVtJyk7fS5iaW5kKHRoaXMpKTt9aWYoIXRoaXMuaXNCbG9ja2VkKXtFdmVu
dC5saXN0ZW4odGhpcy5jb25uZWN0QnV0dG9uLCdjbGljaycsdGhpcy5wcmltYXJ5
TGlrZUJ1dHRvbk9uQ2xpY2suYmluZCh0aGlzKSk7aWYodGhpcy5ncmF5T3V0KUV2
ZW50Lmxpc3Rlbih0aGlzLnRvbWJzdG9uZUNyb3NzLCdjbGljaycsdGhpcy5jb25u
ZWN0VG9Ob2RlT25DbGljay5iaW5kKHRoaXMpKTt9aWYodGhpcy5hZG1pbkxpbmtz
KWZvcih2YXIgYT0wO2E8dGhpcy5hZG1pbkxpbmtzLmxlbmd0aDthKyspRXZlbnQu
bGlzdGVuKHRoaXMuYWRtaW5MaW5rc1thXSwnY2xpY2snLHRoaXMucHJlc2VudEFk
bWluUGFnZS5iaW5kKHRoaXMpKTtpZih0aGlzLmVycm9yTGlua3MpZm9yKHZhciBh
PTA7YTx0aGlzLmVycm9yTGlua3MubGVuZ3RoO2ErKylFdmVudC5saXN0ZW4odGhp
cy5lcnJvckxpbmtzW2FdLCdjbGljaycsdGhpcy5wcmVzZW50RXJyb3JEaWFsb2cu
YmluZCh0aGlzKSk7aWYodGhpcy5jb25maXJtTGlua3MpZm9yKHZhciBnPTA7Zzx0
aGlzLmNvbmZpcm1MaW5rcy5sZW5ndGg7ZysrKUV2ZW50Lmxpc3Rlbih0aGlzLmNv
bmZpcm1MaW5rc1tnXSwnY2xpY2snLHRoaXMucHJlc2VudENvbmZpcm1EaWFsb2cu
YmluZCh0aGlzKSk7aWYoaS5zaG93Q2FwdGNoYSl7dGhpcy5zaG93Q2FwdGNoYT10
cnVlO3RoaXMuY29ubmVjdFRvTm9kZSh0cnVlKTt9aWYodGhpcy5mb3JjZUNvbW1l
bnRIb29rcyl0aGlzLnNldHVwQ29tbWVudEhvb2tzKCQodGhpcy5mb3JjZUNvbW1l
bnRIb29rcykpO3RoaXMudGV4dElucHV0TWFyZ2luV2l0aEJ1dHRvbj01O3RoaXMu
d2lkdGhTeW5jQXJiaXRlcj1BcmJpdGVyLnN1YnNjcmliZSgncGxhdGZvcm0vc29j
aWFscGx1Z2lucy9zZW5kL3Jlc2l6ZScsdGhpcy5zeW5jU2VuZFdpZGdldFdpZHRo
LmJpbmQodGhpcykpO0FyYml0ZXIuaW5mb3JtKCdwbGF0Zm9ybS9zb2NpYWxwbHVn
aW5zL2xpa2UvcmVzaXplJyx7YnV0dG9uX3dpZHRoOnRoaXMuY29tcHV0ZUJ1dHRv
bkRpbWVuc2lvbnNXaXRoUGFkZGluZygpLndpZHRoLHdpZGdldF93aWR0aDpWZWN0
b3IyLmdldEVsZW1lbnREaW1lbnNpb25zKHRoaXMud2lkZ2V0KS54LGxheW91dDp0
aGlzLmxheW91dH0sQXJiaXRlci5CRUhBVklPUl9TVEFURSk7QXJiaXRlci5zdWJz
Y3JpYmUoJ3BsYXRmb3JtL3NvY2lhbHBsdWdpbnMvZGlhbG9nJyxmdW5jdGlvbiht
LGwpe2lmKGwuY29udHJvbGxlcklEIT09dGhpcy53aWRnZXRJRCl0aGlzLm90aGVy
Q29tbWVudFdpZGdldE9wZW49KGwuZXZlbnQ9PSdvcGVuJyk7fS5iaW5kKHRoaXMp
KTt0aGlzLnN1YnNjcmliZVRvU3luYyhpKTt9O2NvcHlfcHJvcGVydGllcyhFeHRl
cm5hbE5vZGVDb25uZWN0V2lkZ2V0LHtTVEFOREFSRF9MQVlPVVQ6J3N0YW5kYXJk
JyxCT1hfQ09VTlRfTEFZT1VUOidib3hfY291bnQnLEJVVFRPTl9DT1VOVF9MQVlP
VVQ6J2J1dHRvbl9jb3VudCcsU0lNUExFX0xBWU9VVDonc2ltcGxlJyxDT0xPUl9E
QVJLOjAsQ09MT1JfTElHSFQ6MSxPUFRfSU5fRkFDRUJPT0tfQVBQX0lEOicxMjc3
NjAwODcyMzc2MTAnLHVwZGF0ZUxvZ2dlZEluVXNlcjpmdW5jdGlvbihiKXt2YXIg
YT1FeHRlcm5hbE5vZGVDb25uZWN0V2lkZ2V0LmNvbnRyb2xsZXJNYW5hZ2luZ0xv
Z2luO2Euc2V0TG9nZ2VkSW4oYik7YS5jb25uZWN0VG9Ob2RlKHRydWUpO2EudXNl
ck9wdGVkT3V0PWZhbHNlO2RlbGV0ZSBFeHRlcm5hbE5vZGVDb25uZWN0V2lkZ2V0
LmNvbnRyb2xsZXJNYW5hZ2luZ0xvZ2luO0FyYml0ZXIuaW5mb3JtKCdwbGF0Zm9y
bS9zb2NpYWxwbHVnaW5zL2xvZ2luJyx7dXNlcjpiLnVzZXJ9LEFyYml0ZXIuQkVI
QVZJT1JfU1RBVEUpO1dpZGdldEFyYml0ZXIuaW5mb3JtKCdwbGF0Zm9ybS9zb2Np
YWxwbHVnaW5zL2xvZ2luJyx7dXNlcjpiLnVzZXJ9LEFyYml0ZXIuQkVIQVZJT1Jf
U1RBVEUpO30sb25Db21tZW50V2lkZ2V0TG9hZGVkOmZ1bmN0aW9uKGEpe3ZhciBi
PUV4dGVybmFsTm9kZUNvbm5lY3RXaWRnZXQuc2VsZjtkZWxldGUgRXh0ZXJuYWxO
b2RlQ29ubmVjdFdpZGdldC5zZWxmO2IuaW5qZWN0Q29tbWVudFdpZGdldE1hcmt1
cChhKTt9fSk7Y29weV9wcm9wZXJ0aWVzKEV4dGVybmFsTm9kZUNvbm5lY3RXaWRn
ZXQucHJvdG90eXBlLHtnZXRTeW5jRW5kcG9pbnROYW1lOmZ1bmN0aW9uKCl7fSxn
ZXRDb25uZWN0aW9uRW5kcG9pbnROYW1lOmZ1bmN0aW9uKCl7fSxnZXRQbHVnaW5O
YW1lOmZ1bmN0aW9uKCl7fSxzdWJzY3JpYmVUb1N5bmM6ZnVuY3Rpb24oYSl7QXJi
aXRlci5zdWJzY3JpYmUoJ3BsYXRmb3JtL3NvY2lhbHBsdWdpbnMvbG9naW4nLGZ1
bmN0aW9uKGMsYil7aWYodGhpcy52aWV3ZXJJRCYmYi51c2VyIT09dGhpcy52aWV3
ZXJJRClkb2N1bWVudC5sb2NhdGlvbi5yZWxvYWQoKTt9LmJpbmQodGhpcykpO0Fy
Yml0ZXIuc3Vic2NyaWJlKHRoaXMuZ2V0U3luY0VuZHBvaW50TmFtZSgpLGZ1bmN0
aW9uKGMsYil7aWYoYi5leHRlcm5hbFVybD09YS5leHRlcm5hbFVSTCl7dGhpcy51
c2VyT3B0ZWRPdXQ9ZmFsc2U7dGhpcy51cGRhdGVXaWRnZXQoYi5vcHRzLHRydWUp
O319LmJpbmQodGhpcykpO30sc2V0UXVlcnlEYXRhOmZ1bmN0aW9uKCl7Y29weV9w
cm9wZXJ0aWVzKHRoaXMucG9wdXBPcHRJblBhcmFtcyx7cHJvdG9jb2w6d2luZG93
LmxvY2F0aW9uLnByb3RvY29sLGV4dGVybmFsX3BhZ2VfdXJsOnRoaXMuZXh0ZXJu
YWxVcmx9KTtpZih0aGlzLm51eCljb3B5X3Byb3BlcnRpZXModGhpcy5wb3B1cE9w
dEluUGFyYW1zLHtudXg6dGhpcy5udXgscmVmZXJlcjp0aGlzLmlmcmFtZVJlZmVy
ZXJ9KTt9LHVwZGF0ZVdpZGdldDpmdW5jdGlvbihlLGQsYil7dmFyIGE9KHRoaXMu
YWxyZWFkeUNvbm5lY3RlZCE9ZS5ub3dDb25uZWN0ZWQpfHwodGhpcy5zaG93Q29u
ZmlybSE9ZS5zaG93Q29uZmlybSk7aWYoIWQpQXJiaXRlci5pbmZvcm0odGhpcy5n
ZXRDb25uZWN0aW9uRW5kcG9pbnROYW1lKCksZSxBcmJpdGVyLkJFSEFWSU9SX1NU
QVRFKTt0aGlzLmFscmVhZHlDb25uZWN0ZWQ9ZS5ub3dDb25uZWN0ZWQ7dGhpcy52
aWV3ZXJJc0FkbWluPWUuaXNBZG1pbjt0aGlzLnNob3dFcnJvcj1lLnNob3dFcnJv
cjt0aGlzLnNob3dDb25maXJtPWUuc2hvd0NvbmZpcm07dGhpcy5hZG1pblVybD1l
LmFkbWluVXJsO3RoaXMudXNlclByb2ZpbGU9ZS51c2VyUHJvZmlsZTt0aGlzLmNv
bm5lY3RTdG9yeUZiaWQ9ZS5jb25uZWN0U3RvcnlGYmlkO3RoaXMuZXJyb3I9ZS5l
cnJvcjtpZighZS5ub3dDb25uZWN0ZWQpdGhpcy5jbG9zZUNvbW1lbnRXaWRnZXQo
KTtpZihhJiYhZHx8Yil7dmFyIGM9ZS5ub3dDb25uZWN0ZWQ/J2VkZ2VDcmVhdGVk
JzonZWRnZVJlbW92ZWQnO1VudmVyaWZpZWRYRC5zZW5kKHt0eXBlOmN9KTt9aWYo
YXx8dGhpcy5lcnJvcil0aGlzLnN5bmNXaWRnZXREaXNwbGF5KCk7aWYoIWR8fGIp
V2lkZ2V0QXJiaXRlci5pbmZvcm0odGhpcy5nZXRTeW5jRW5kcG9pbnROYW1lKCks
e2V4dGVybmFsVXJsOnRoaXMuZXh0ZXJuYWxVcmwsb3B0czplfSxBcmJpdGVyLkJF
SEFWSU9SX1NUQVRFKTt9LHByZXNlbnRPcHRJbjpmdW5jdGlvbigpe0V4dGVybmFs
Tm9kZUNvbm5lY3RXaWRnZXQuY29udHJvbGxlck1hbmFnaW5nTG9naW49dGhpcztQ
bGF0Zm9ybU9wdEluUG9wdXAub3Blbih0aGlzLmdldFBsdWdpbk5hbWUoKSwnb3B0
LmlubGlrZScsdGhpcy5wb3B1cE9wdEluUGFyYW1zKTtVbnZlcmlmaWVkWEQuc2Vu
ZCh7dHlwZTonYXV0aFByb21wdGVkJ30pO30sc2V0TG9nZ2VkSW46ZnVuY3Rpb24o
YSl7dGhpcy52aWV3ZXJJRD1hLnVzZXI7dGhpcy5uZXdQcm9maWxlUGljPWEucHJv
ZmlsZVBpYzt0aGlzLnBsYWNlRm9ybVVzZXJDaGVjayhhLmZvcm1Vc2VyQ2hlY2ss
YS5mYkR0c2cpO30scGxhY2VGb3JtVXNlckNoZWNrOmZ1bmN0aW9uKGIsYSl7d2lu
ZG93LkVudi5mYl9kdHNnPWE7aWYoZ2UoJ3Bvc3RfZm9ybV9pZCcpKXtET00ucmVw
bGFjZSgkKCdwb3N0X2Zvcm1faWQnKSxIVE1MKGIpKTt9ZWxzZSBET00uYXBwZW5k
Q29udGVudChET00uZmluZChkb2N1bWVudCwnYm9keScpLEhUTUwoYikpO30sc3lu
Y1dpZGdldFdpdGhTZXJ2ZXI6ZnVuY3Rpb24oYyl7dmFyIGI9Yy5nZXRQYXlsb2Fk
KCk7aWYoYi5yZXF1aXJlc19sb2dpbil7dGhpcy51cGRhdGVXaWRnZXQoe25vd0Nv
bm5lY3RlZDpmYWxzZSxpc0FkbWluOmZhbHNlfSxmYWxzZSk7dGhpcy5wcmVzZW50
T3B0SW4oKTtyZXR1cm47fXZhciBhPXtub3dDb25uZWN0ZWQ6Yi5zdWNjZXNzJiZi
LmFscmVhZHlfY29ubmVjdGVkLGlzQWRtaW46Yi5pc19hZG1pbixzaG93RXJyb3I6
Yi5zaG93X2Vycm9yLHNob3dDb25maXJtOmIuc2hvd19jb25maXJtLGFkbWluVXJs
OmIuYWRtaW5fdXJsLHVzZXJQcm9maWxlOmIudXNlcl9wcm9maWxlLGNvbm5lY3RT
dG9yeUZiaWQ6Yi5zdG9yeV9mYmlkLGVycm9yOmIuZXJyb3JfaW5mb307dGhpcy51
cGRhdGVXaWRnZXQoYSwhYi5zdWNjZXNzLGIuc3VjY2Vzcyk7aWYoYi5zdWNjZXNz
JiZ0aGlzLnNob3dDYXB0Y2hhKXt3aW5kb3cub3BlbmVyLmxvY2F0aW9uLnJlbG9h
ZCgpO3dpbmRvdy5jbG9zZSgpO319LGdldEJ1dHRvbkNvdW50V2lkZ2V0V2lkdGg6
ZnVuY3Rpb24oKXt2YXIgYT1ET00uZmluZCh0aGlzLndpZGdldCwndGFibGUuY29u
bmVjdF93aWRnZXRfaW50ZXJhY3RpdmVfYXJlYScpO3ZhciBiPUNTUy5nZXRTdHls
ZShhLCd3aWR0aCcpO3JldHVybiBwYXJzZUludChiLDEwKTt9LHNpemVOdW1iZXJD
bG91ZDpmdW5jdGlvbigpe3RoaXMuY29sbGFwc2VkTnVtYmVyQ2xvdWRIZWlnaHQ9
dGhpcy5nZXRDb2xsYXBzZWROdW1iZXJDbG91ZEhlaWdodCgpO3RoaXMuZXhwYW5k
ZWROdW1iZXJDbG91ZEhlaWdodD10aGlzLmNvbGxhcHNlZE51bWJlckNsb3VkSGVp
Z2h0K3RoaXMuZ2V0TnVtYmVyQ2xvdWRFeHRlbnNpb25IZWlnaHQoKTtpZih0aGlz
LmFscmVhZHlDb25uZWN0ZWQpQ1NTLnNldFN0eWxlKHRoaXMubnVtYmVyQ2xvdWQs
J2hlaWdodCcsdGhpcy5leHBhbmRlZE51bWJlckNsb3VkSGVpZ2h0KydweCcpO0Jv
b3Rsb2FkZXIubG9hZENvbXBvbmVudHMoWyd2ZWN0b3InXSxiaW5kKHRoaXMsZnVu
Y3Rpb24oKXt2YXIgYT10aGlzLmNvbXB1dGVCdXR0b25EaW1lbnNpb25zV2l0aFBh
ZGRpbmcoKS53aWR0aDtYRC5mb3JjZWRfbWluX3dpZHRoPWE7dmFyIGI9aW50bF9s
b2NhbGVfaXNfcnRsKCk7YS09MjtDU1Muc2V0U3R5bGUodGhpcy5udW1iZXJDbG91
ZCwnd2lkdGgnLGErJ3B4Jyk7Q1NTLnNldFN0eWxlKHRoaXMubnVtYmVyQ2xvdWQs
J3Zpc2liaWxpdHknLCd2aXNpYmxlJyk7YW5pbWF0aW9uKHRoaXMubnVtYmVyQ2xv
dWQpLmZyb20oJ29wYWNpdHknLDApLnRvKCdvcGFjaXR5JywxKS5kdXJhdGlvbigx
MDApLmdvKCk7fSkpO30sZ2V0Q29sbGFwc2VkTnVtYmVyQ2xvdWRIZWlnaHQ6ZnVu
Y3Rpb24oKXt2YXIgYj1WZWN0b3IyLmdldEVsZW1lbnREaW1lbnNpb25zKHRoaXMu
bnVtYmVyQ2xvdWQpLnk7dmFyIGQ9cGFyc2VJbnQoQ1NTLmdldFN0eWxlKHRoaXMu
bnVtYmVyQ2xvdWQsJ3BhZGRpbmdUb3AnKSwxMCk7dmFyIGM9cGFyc2VJbnQoQ1NT
LmdldFN0eWxlKHRoaXMubnVtYmVyQ2xvdWQsJ3BhZGRpbmdCb3R0b20nKSwxMCk7
dmFyIGE9cGFyc2VJbnQoQ1NTLmdldFN0eWxlKHRoaXMubnVtYmVyQ2xvdWQsJ2Jv
cmRlcicpLDEwKTtyZXR1cm4gYi1kLWMtMjt9LGdldE51bWJlckNsb3VkRXh0ZW5z
aW9uSGVpZ2h0OmZ1bmN0aW9uKCl7Q1NTLmFkZENsYXNzKHRoaXMubnVtYmVyQ2xv
dWRFeHRlbnNpb24sJ2Nvbm5lY3Rfd2lkZ2V0X29mZnNjcmVlbicpO2lmKCF0aGlz
LmFscmVhZHlDb25uZWN0ZWQpQ1NTLnJlbW92ZUNsYXNzKHRoaXMubnVtYmVyQ2xv
dWRFeHRlbnNpb24sJ2hpZGRlbl9lbGVtJyk7dmFyIGE9VmVjdG9yMi5nZXRFbGVt
ZW50RGltZW5zaW9ucyh0aGlzLm51bWJlckNsb3VkRXh0ZW5zaW9uKS55O2lmKCF0
aGlzLmFscmVhZHlDb25uZWN0ZWQpQ1NTLmFkZENsYXNzKHRoaXMubnVtYmVyQ2xv
dWRFeHRlbnNpb24sJ2hpZGRlbl9lbGVtJyk7Q1NTLnJlbW92ZUNsYXNzKHRoaXMu
bnVtYmVyQ2xvdWRFeHRlbnNpb24sJ2Nvbm5lY3Rfd2lkZ2V0X29mZnNjcmVlbicp
O3JldHVybiBhO30scmVzdG9yZVJlbWluZGVyU3BhbjpmdW5jdGlvbihldmVudCl7
aWYodGhpcy5yZW1pbmRlcklzVmlzaWJsZXx8dGhpcy5pbkFuaW1hdGlvbilyZXR1
cm47dGhpcy5hbmltYXRlUmVtaW5kZXJTcGFuUmVhcHBlYXJhbmNlKCk7fSxhbmlt
YXRlUmVtaW5kZXJTcGFuUmVhcHBlYXJhbmNlOmZ1bmN0aW9uKCl7aWYodGhpcy5y
ZW1pbmRlcklzVmlzaWJsZXx8dGhpcy5pbkFuaW1hdGlvbilyZXR1cm47dGhpcy5p
bkFuaW1hdGlvbj10cnVlO0NTUy5hZGRDbGFzcyh0aGlzLm51bWJlckNsb3VkVW5s
aWtlU3BhbiwnaGlkZGVuX2VsZW0nKTtDU1Muc2V0U3R5bGUodGhpcy5udW1iZXJD
bG91ZFJlbWluZGVyU3Bhbiwnb3BhY2l0eScsMCk7Q1NTLnJlbW92ZUNsYXNzKHRo
aXMubnVtYmVyQ2xvdWRSZW1pbmRlclNwYW4sJ2hpZGRlbl9lbGVtJyk7YW5pbWF0
aW9uKHRoaXMubnVtYmVyQ2xvdWRSZW1pbmRlclNwYW4pLnRvKCdvcGFjaXR5Jywx
KS5kdXJhdGlvbigxMDApLm9uZG9uZShmdW5jdGlvbigpe3RoaXMuaW5BbmltYXRp
b249ZmFsc2U7dGhpcy5yZW1pbmRlcklzVmlzaWJsZT10cnVlO30uYmluZCh0aGlz
KSkuZ28oKTt9LGV4cG9zZVVubGlrZVNwYW46ZnVuY3Rpb24oZXZlbnQpe2lmKCF0
aGlzLmFscmVhZHlDb25uZWN0ZWR8fHRoaXMucmVxdWlyZXNNb3VzZUxlYXZlRXZl
bnR8fCF0aGlzLnJlbWluZGVySXNWaXNpYmxlfHx0aGlzLmluQW5pbWF0aW9uKXJl
dHVybjt0aGlzLmluQW5pbWF0aW9uPXRydWU7Q1NTLmFkZENsYXNzKHRoaXMubnVt
YmVyQ2xvdWRSZW1pbmRlclNwYW4sJ2hpZGRlbl9lbGVtJyk7Q1NTLnNldFN0eWxl
KHRoaXMubnVtYmVyQ2xvdWRVbmxpa2VTcGFuLCdvcGFjaXR5JywwKTtDU1MucmVt
b3ZlQ2xhc3ModGhpcy5udW1iZXJDbG91ZFVubGlrZVNwYW4sJ2hpZGRlbl9lbGVt
Jyk7YW5pbWF0aW9uKHRoaXMubnVtYmVyQ2xvdWRVbmxpa2VTcGFuKS50bygnb3Bh
Y2l0eScsMSkuZHVyYXRpb24oMTAwKS5vbmRvbmUoZnVuY3Rpb24oKXt0aGlzLmlu
QW5pbWF0aW9uPWZhbHNlO3RoaXMucmVtaW5kZXJJc1Zpc2libGU9ZmFsc2U7fS5i
aW5kKHRoaXMpKS5nbygpO30sY29uZGl0aW9uYWxseUFjdGl2YXRlQnV0dG9uOmZ1
bmN0aW9uKGV2ZW50KXt0aGlzLmNvbW1lbnRCdXR0b25Jc0FjdGl2ZT10aGlzLmlu
bGluZUNvbW1lbnRJbnB1dC52YWx1ZS50cmltKCkubGVuZ3RoPjA7fSx1cGRhdGVD
b25uZWN0aW9uV2l0aENvbW1lbnQ6ZnVuY3Rpb24oZXZlbnQpe0V2ZW50LmtpbGwo
ZXZlbnQpO2lmKHRoaXMuY29tbWVudEJ1dHRvbklzQWN0aXZlKXt0aGlzLnBvc3RJ
bmxpbmVDb21tZW50KCk7dGhpcy5yZXNldElubGluZUNvbW1lbnQoKTt0aGlzLmNs
b3NlSW5saW5lQ29tbWVudCgpO319LHBvc3RJbmxpbmVDb21tZW50OmZ1bmN0aW9u
KCl7dGhpcy5wb3N0VXNlckNvbW1lbnQodGhpcy5pbmxpbmVDb21tZW50SW5wdXQu
dmFsdWUudHJpbSgpLCdpZnJhbWUnKTt9LHJlc2V0SW5saW5lQ29tbWVudDpmdW5j
dGlvbigpe3RoaXMuY29uY2VhbENvbW1lbnRCdXR0b24oKTt2YXIgYT10aGlzLmlu
bGluZUNvbW1lbnRJbnB1dC5nZXRBdHRyaWJ1dGUoJ3BsYWNlaG9sZGVyJyk7dGhp
cy5pbmxpbmVDb21tZW50SW5wdXQudmFsdWU9YTt9LHNob3dJbmxpbmVDb21tZW50
OmZ1bmN0aW9uKGV2ZW50KXtFdmVudC5raWxsKGV2ZW50KTtpZighdGhpcy5pbmxp
bmVDb21tZW50Rmx5b3V0T3Blbnx8dGhpcy5pbmxpbmVDb21tZW50Rmx5b3V0Vmlz
aWJsZXx8dGhpcy5zaG93Q29uZmlybXx8dGhpcy5lcnJvcilyZXR1cm47dGhpcy5p
bmxpbmVDb21tZW50Rmx5b3V0VmlzaWJsZT10cnVlO0NTUy5zaG93KHRoaXMuaW5s
aW5lQ29tbWVudEZseW91dCk7fSxoaWRlSW5saW5lQ29tbWVudDpmdW5jdGlvbihl
dmVudCl7RXZlbnQua2lsbChldmVudCk7aWYoIXRoaXMuaW5saW5lQ29tbWVudEZs
eW91dE9wZW58fCF0aGlzLmlubGluZUNvbW1lbnRGbHlvdXRWaXNpYmxlKXJldHVy
bjtpZihET00uY29udGFpbnModGhpcy5pbmxpbmVDb21tZW50Rmx5b3V0LGV2ZW50
LmdldFJlbGF0ZWRUYXJnZXQoKSkpcmV0dXJuO3ZhciBiPXRoaXMuaW5saW5lQ29t
bWVudElucHV0LnZhbHVlLnRyaW0oKTt2YXIgYT10aGlzLmlubGluZUNvbW1lbnRJ
bnB1dC5nZXRBdHRyaWJ1dGUoJ3BsYWNlaG9sZGVyJyk7aWYoYi5sZW5ndGg+MCYm
YiE9YSlyZXR1cm47dGhpcy5pbmxpbmVDb21tZW50Rmx5b3V0VmlzaWJsZT1mYWxz
ZTtDU1MuaGlkZSh0aGlzLmlubGluZUNvbW1lbnRGbHlvdXQpO30sY2xvc2VJbmxp
bmVDb21tZW50OmZ1bmN0aW9uKCl7dGhpcy5pbmxpbmVDb21tZW50Rmx5b3V0Vmlz
aWJsZT1mYWxzZTt0aGlzLmlubGluZUNvbW1lbnRGbHlvdXRPcGVuPWZhbHNlO0NT
Uy5oaWRlKHRoaXMuaW5saW5lQ29tbWVudEZseW91dCk7dGhpcy5yZXNldElubGlu
ZUNvbW1lbnQoKTt9LGNvbmNlYWxDb21tZW50QnV0dG9uOmZ1bmN0aW9uKCl7Q1NT
LmFkZENsYXNzKHRoaXMuaW5saW5lQ29tbWVudEJ1dHRvbiwnaGlkZGVuX2VsZW0n
KTtDU1Muc2V0U3R5bGUodGhpcy5pbmxpbmVDb21tZW50SW5wdXQsJ3dpZHRoJyx0
aGlzLnRleHRJbnB1dFdpZHRoV2l0aG91dEJ1dHRvbisncHgnKTtDU1Muc2V0U3R5
bGUodGhpcy5pbmxpbmVDb21tZW50SW5wdXQsJ21hcmdpbi1yaWdodCcsMCk7fSxw
b3NpdGlvbklubGluZUNvbW1lbnRGbHlvdXQ6ZnVuY3Rpb24oKXtDU1MuYWRkQ2xh
c3ModGhpcy5pbmxpbmVDb21tZW50Rmx5b3V0LCdjb21tZW50X3dpZGdldF9vZmZz
Y3JlZW4nKTtDU1MucmVtb3ZlQ2xhc3ModGhpcy5pbmxpbmVDb21tZW50Rmx5b3V0
LCdoaWRkZW5fZWxlbScpO3ZhciBiPTA7dmFyIGE9dGhpcy5jb21wdXRlQnV0dG9u
RGltZW5zaW9ucygpO3ZhciBlPWEuaGVpZ2h0O3ZhciBkPXRoaXMuZ3JheU91dD9i
OmIrMjA7dmFyIGc9aW50bF9sb2NhbGVfaXNfcnRsKCk/J3JpZ2h0JzonbGVmdCc7
aWYodGhpcy5zaG93RmFjZXMpe3ZhciBrPURPTS5zY3J5KHRoaXMud2lkZ2V0LCdz
cGFuLmNvbm5lY3Rfd2lkZ2V0X3RleHQnKVswXTt2YXIgaD1pbnRsX2xvY2FsZV9p
c19ydGwoKT8ncGFkZGluZ1JpZ2h0JzoncGFkZGluZ0xlZnQnO3ZhciBsPUNTUy5n
ZXRTdHlsZShrLGgpO2Q9dGhpcy5ncmF5T3V0P2I6YitwYXJzZUludChsLDEwKTt2
YXIgaT1WZWN0b3IyLmdldEVsZW1lbnREaW1lbnNpb25zKHRoaXMuc2FtcGxlQ29u
bmVjdGlvbnMpLnk7ZT1pLTM7fXZhciBqPVZlY3RvcjIuZ2V0RWxlbWVudERpbWVu
c2lvbnModGhpcy5zdW1tYXJ5VGV4dCkueTtpZihqPjE1KWUrPTI7Q1NTLnNldFN0
eWxlKHRoaXMuaW5saW5lQ29tbWVudEZseW91dCxnLGQrJ3B4Jyk7Q1NTLnNldFN0
eWxlKHRoaXMuaW5saW5lQ29tbWVudEZseW91dCwndG9wJywoLWUpKydweCcpO3Zh
ciBuPVZlY3RvcjIuZ2V0RWxlbWVudFBvc2l0aW9uKHRoaXMud2lkZ2V0LCdkb2N1
bWVudCcpLng7dmFyIG09VmVjdG9yMi5nZXRFbGVtZW50RGltZW5zaW9ucyh0aGlz
LndpZGdldCkueDt2YXIgbz1uK20tZC01O0NTUy5zZXRTdHlsZSh0aGlzLmlubGlu
ZUNvbW1lbnRGbHlvdXQsJ3dpZHRoJyxvKydweCcpO0NTUy5yZW1vdmVDbGFzcyh0
aGlzLmlubGluZUNvbW1lbnRCdXR0b24sJ2hpZGRlbl9lbGVtJyk7dmFyIGY9VmVj
dG9yMi5nZXRFbGVtZW50RGltZW5zaW9ucyh0aGlzLmlubGluZUNvbW1lbnRCdXR0
b24pLng7Q1NTLmFkZENsYXNzKHRoaXMuaW5saW5lQ29tbWVudEJ1dHRvbiwnaGlk
ZGVuX2VsZW0nKTt2YXIgYz0odGhpcy5pbmxpbmVDb21tZW50Q2xvc2UpPzE1OjA7
dGhpcy50ZXh0SW5wdXRXaWR0aFdpdGhvdXRCdXR0b249by0yNC1jO3RoaXMudGV4
dElucHV0V2lkdGhXaXRoQnV0dG9uPXRoaXMudGV4dElucHV0V2lkdGhXaXRob3V0
QnV0dG9uLWYtdGhpcy50ZXh0SW5wdXRNYXJnaW5XaXRoQnV0dG9uLTE7Q1NTLnNl
dFN0eWxlKHRoaXMuaW5saW5lQ29tbWVudElucHV0LCd3aWR0aCcsdGhpcy50ZXh0
SW5wdXRXaWR0aFdpdGhvdXRCdXR0b24rJ3B4Jyk7Q1NTLnNldFN0eWxlKHRoaXMu
aW5saW5lQ29tbWVudElucHV0LCdtYXJnaW4tcmlnaHQnLDApO0NTUy5yZW1vdmVD
bGFzcyh0aGlzLmlubGluZUNvbW1lbnRGbHlvdXQsJ2NvbW1lbnRfd2lkZ2V0X29m
ZnNjcmVlbicpO0NTUy5hZGRDbGFzcyh0aGlzLmlubGluZUNvbW1lbnRGbHlvdXQs
J2hpZGRlbl9lbGVtJyk7fSxwb3N0VXNlckNvbW1lbnQ6ZnVuY3Rpb24oYSxjKXt2
YXIgYj17aHJlZjp0aGlzLmV4dGVybmFsVXJsLG5vZGVfdHlwZTp0aGlzLm5vZGVU
eXBlLGVkZ2VfdHlwZTp0aGlzLmVkZ2VUeXBlLHBhZ2VfaWQ6dGhpcy5wYWdlSWQs
Y29ubmVjdF90ZXh0OnRoaXMuY29ubmVjdFRleHQsc3RvcnlfZmJpZDp0aGlzLmNv
bm5lY3RTdG9yeUZiaWQsY29tbWVudDphLHdpZGdldF90eXBlOmN8fCd4ZmJtbCd9
O0Jvb3Rsb2FkZXIubG9hZENvbXBvbmVudHMoWydhc3luYycsJ2FzeW5jLXBvc3Rs
dWRlJ10sZnVuY3Rpb24oKXtuZXcgQXN5bmNSZXF1ZXN0KCkuc2V0VVJJKHRoaXMu
Z2V0Q29tbWVudEFqYXhFbmRwb2ludCgpKS5zZXREYXRhKGIpLnNldE5lY3Rhck1v
ZHVsZURhdGFTYWZlKCkuc2V0TmVjdGFySW1wcmVzc2lvbklkU2FmZSgpLnNlbmQo
KTt9LmJpbmQodGhpcykpO3RoaXMuY2xvc2VDb21tZW50V2lkZ2V0KCk7fSxjbG9z
ZUNvbW1lbnRXaWRnZXQ6ZnVuY3Rpb24oKXtpZih0aGlzLmNvbW1lbnRXaWRnZXRP
cGVuKXtkZWxldGUgdGhpcy5pbkdyYWNlUGVyaW9kO2RlbGV0ZSB0aGlzLmNvbW1l
bnRXaWRnZXRJc0V4cGFuZGVkO3RoaXMuY29tbWVudFdpZGdldFZpc2libGU9ZmFs
c2U7dGhpcy5jb21tZW50V2lkZ2V0T3Blbj1mYWxzZTtVbnZlcmlmaWVkWEQuc2Vu
ZCh7dHlwZTonZGlzbWlzc0VkZ2VDb21tZW50RGlhbG9nJ30pO319LHByZXNlbnRB
ZG1pblBhZ2U6ZnVuY3Rpb24oKXt2YXIgYT0nX2JsYW5rJzt3aW5kb3cub3Blbih0
aGlzLmFkbWluVXJsLnRvU3RyaW5nKCksYSk7fSxwcmVzZW50RXJyb3JEaWFsb2c6
ZnVuY3Rpb24oKXtpZighdGhpcy5lcnJvci5lcnJvclVyaSlyZXR1cm47dmFyIGI9
J19ibGFuayc7dmFyIGE9J3Rvb2xiYXI9MCwgc3RhdHVzPTAsIHdpZHRoPTk2MCwg
aGVpZ2h0PTMwMCc7d2luZG93Lm9wZW4odGhpcy5lcnJvci5lcnJvclVyaS50b1N0
cmluZygpLGIsYSk7fSxwcmVzZW50Q29uZmlybURpYWxvZzpmdW5jdGlvbigpe3Zh
ciBiPSdfYmxhbmsnO3ZhciBhPSd0b29sYmFyPTAsc3RhdHVzPTAsd2lkdGg9NDUw
LGhlaWdodD0yMDAsc2Nyb2xsYmFycz0wLGxvY2F0aW9uPTAsbWVudWJhcj0wJztp
Zighd2luZG93LmNvbmZpcm1EaWFsb2dSZXR1cm4pd2luZG93LmNvbmZpcm1EaWFs
b2dSZXR1cm49e307d2luZG93LmNvbmZpcm1EaWFsb2dSZXR1cm5bdGhpcy53aWRn
ZXRJRF09dGhpczt2YXIgYz10aGlzLmdldENvbmZpcm1VUkwoKTt3aW5kb3cub3Bl
bihjLGIsYSk7fSxyZXR1cm5Gcm9tQ29uZmlybURpYWxvZzpmdW5jdGlvbihhKXtp
ZihhKXt0aGlzLnNob3dDb25maXJtPW51bGw7dGhpcy5jb25maXJtZWRDb25uZWN0
PWE7dGhpcy5jb25uZWN0VG9Ob2RlKCF0aGlzLmFscmVhZHlDb25uZWN0ZWQpO31l
bHNlIHRoaXMudXBkYXRlV2lkZ2V0KHtub3dDb25uZWN0ZWQ6dGhpcy5hbHJlYWR5
Q29ubmVjdGVkLHNob3dDb25maXJtOm51bGwsaXNBZG1pbjp0aGlzLnZpZXdlcklz
QWRtaW59LGZhbHNlKTt9LHN5bmNXaWRnZXREaXNwbGF5OmZ1bmN0aW9uKCl7dmFy
IGE9dGhpcy5hbHJlYWR5Q29ubmVjdGVkO3RoaXMuc2V0QnV0dG9uU3RhdGUoYSk7
dGhpcy5zaG93RWxlbWVudElmKHRoaXMuY29ubmVjdGVkTWVzc2FnZSxhKTt0aGlz
LnNob3dFbGVtZW50SWYodGhpcy5ub3RDb25uZWN0ZWRNZXNzYWdlLCFhKTtpZih0
aGlzLmFkbWluU3BhbnMpZm9yKHZhciBiPTA7Yjx0aGlzLmFkbWluU3BhbnMubGVu
Z3RoO2IrKyl0aGlzLnNob3dFbGVtZW50SWYodGhpcy5hZG1pblNwYW5zW2JdLHRo
aXMudmlld2VySXNBZG1pbik7aWYodGhpcy5lcnJvclNwYW5zKWZvcih2YXIgYz0w
O2M8dGhpcy5lcnJvclNwYW5zLmxlbmd0aDtjKyspdGhpcy5zaG93RWxlbWVudElm
KHRoaXMuZXJyb3JTcGFuc1tjXSx0aGlzLmVycm9yJiYodGhpcy52aWV3ZXJJc0Fk
bWlufHx0aGlzLnNob3dFcnJvcikpO2Zvcih2YXIgZj0wO2Y8dGhpcy5jb25maXJt
U3BhbnMubGVuZ3RoO2YrKyl0aGlzLnNob3dFbGVtZW50SWYodGhpcy5jb25maXJt
U3BhbnNbZl0sIXRoaXMuYWxyZWFkeUNvbm5lY3RlZCYmdGhpcy5zaG93Q29uZmly
bSk7Zm9yKHZhciBkPTA7ZDx0aGlzLnVubGlrZVNwYW5zLmxlbmd0aDtkKyspdGhp
cy5zaG93RWxlbWVudElmKHRoaXMudW5saWtlU3BhbnNbZF0sdGhpcy5hbHJlYWR5
Q29ubmVjdGVkKTtpZih0aGlzLnNoYXJlQ29tbWVudFNwYW5zKWZvcih2YXIgZT0w
O2U8dGhpcy5zaGFyZUNvbW1lbnRTcGFucy5sZW5ndGg7ZSsrKXRoaXMuc2hvd0Vs
ZW1lbnRJZih0aGlzLnNoYXJlQ29tbWVudFNwYW5zW2VdLGEpO3RoaXMuc2hvd0Vs
ZW1lbnRJZih0aGlzLmNvbm5lY3RCdXR0b24sKCF0aGlzLnVzZURpc2Nvbm5lY3RM
aW5rfHwhYSkmJiF0aGlzLnNob3dDb25maXJtKTtpZih0aGlzLmxheW91dD09PUV4
dGVybmFsTm9kZUNvbm5lY3RXaWRnZXQuQk9YX0NPVU5UX0xBWU9VVCl7dGhpcy5t
YW5hZ2VCb3hDb3VudEJ1dHRvbkFuaW1hdGlvbihhKTt9ZWxzZSBpZih0aGlzLmxh
eW91dD09PUV4dGVybmFsTm9kZUNvbm5lY3RXaWRnZXQuQlVUVE9OX0NPVU5UX0xB
WU9VVCl7dGhpcy5tYW5hZ2VCdXR0b25Db3VudEJ1dHRvbkFuaW1hdGlvbihhKTt9
ZWxzZSBpZih0aGlzLmxheW91dD09PUV4dGVybmFsTm9kZUNvbm5lY3RXaWRnZXQu
U0lNUExFX0xBWU9VVCl7dGhpcy5tYW5hZ2VTaW1wbGVCdXR0b25BbmltYXRpb24o
YSk7fWVsc2UgdGhpcy5tYW5hZ2VTdGFuZGFyZEJ1dHRvbkFuaW1hdGlvbihhKTtp
ZighdGhpcy5sb2dnZWRJblVzZXJQaG90b0RpdilyZXR1cm47aWYoYSl7dGhpcy5z
bGlkZVVzZXJQaG90b0luKHRoaXMubG9nZ2VkSW5Vc2VyUGhvdG9EaXYpO31lbHNl
IHRoaXMuc2xpZGVVc2VyUGhvdG9PdXQodGhpcy5sb2dnZWRJblVzZXJQaG90b0Rp
dik7fSxtYW5hZ2VTdGFuZGFyZEJ1dHRvbkFuaW1hdGlvbjpmdW5jdGlvbihhKXtp
Zih0aGlzLmdyYXlPdXQpcmV0dXJuO2lmKHRoaXMuYWxyZWFkeUNvbm5lY3RlZHx8
dGhpcy5zaG93Q29uZmlybSl7dGhpcy5oaWRlQnV0dG9uKHRydWUpO31lbHNlIHRo
aXMuaGlkZUJ1dHRvbihmYWxzZSk7fSxzZXRCdXR0b25TdGF0ZTpmdW5jdGlvbihh
KXtpZihhKXtDU1MucmVtb3ZlQ2xhc3ModGhpcy5jb25uZWN0QnV0dG9uLCdsaWtl
X2J1dHRvbl9ub19saWtlJyk7Q1NTLmFkZENsYXNzKHRoaXMuY29ubmVjdEJ1dHRv
biwnbGlrZV9idXR0b25fbGlrZScpO3RoaXMuZml4SUVCdXR0b25Eb3VibGVMaW5l
QnVnKCk7fWVsc2V7Q1NTLmFkZENsYXNzKHRoaXMuY29ubmVjdEJ1dHRvbiwnbGlr
ZV9idXR0b25fbm9fbGlrZScpO0NTUy5yZW1vdmVDbGFzcyh0aGlzLmNvbm5lY3RC
dXR0b24sJ2xpa2VfYnV0dG9uX2xpa2UnKTt9fSxmaXhJRUJ1dHRvbkRvdWJsZUxp
bmVCdWc6ZnVuY3Rpb24oKXtpZih0aGlzLmxheW91dD09PUV4dGVybmFsTm9kZUNv
bm5lY3RXaWRnZXQuU1RBTkRBUkRfTEFZT1VUJiZ1YS5pZSgpPD03JiYhdGhpcy5o
YXNCZWVuRml4ZWQpe3ZhciBhPXRoaXMuY29tcHV0ZUJ1dHRvbkRpbWVuc2lvbnNX
aXRoUGFkZGluZygpO0NTUy5zZXRTdHlsZSh0aGlzLmNvbm5lY3RCdXR0b24sJ3dp
ZHRoJyxhLndpZHRoKzEpO3RoaXMuaGFzQmVlbkZpeGVkPXRydWU7fX0saGlkZUJ1
dHRvbjpmdW5jdGlvbihhKXtpZih0aGlzLmxheW91dCE9PSdzdGFuZGFyZCcpcmV0
dXJuO2lmKHRoaXMub0FuaW1hdGVCbGluZCl0aGlzLm9BbmltYXRlQmxpbmQuc3Rv
cCgpO3RoaXMub0FuaW1hdGVCbGluZD1hbmltYXRpb24odGhpcy5jb25uZWN0QnV0
dG9uU2xpZGVyKS5kdXJhdGlvbigxNTApO3ZhciBjPTEsYj1pbnRsX2xvY2FsZV9p
c19ydGwoKSxkPWI/J21hcmdpblJpZ2h0JzonbWFyZ2luTGVmdCcsZT1iPydtYXJn
aW5MZWZ0JzonbWFyZ2luUmlnaHQnO2lmKGEpe0NTUy5hZGRDbGFzcyh0aGlzLmNv
bm5lY3RCdXR0b25Db250YWluZXIsJ2hpZGRlbicpO3RoaXMub0FuaW1hdGVCbGlu
ZC5vbmRvbmUoZnVuY3Rpb24oKXtDU1Muc2V0U3R5bGUodGhpcy5jb25uZWN0QnV0
dG9uQ29udGFpbmVyLGQsJzJweCcpO0NTUy5zZXRTdHlsZSh0aGlzLmNvbm5lY3RC
dXR0b25Db250YWluZXIsJ3Zpc2liaWxpdHknLCdoaWRkZW4nKTtDU1MuYWRkQ2xh
c3ModGhpcy5jb25maXJtYXRpb25DZWxsLCdjb25uZWN0X2NvbmZpcm1hdGlvbl9j
ZWxsX2xpa2UnKTtDU1MucmVtb3ZlQ2xhc3ModGhpcy5jb25maXJtYXRpb25DZWxs
LCdjb25uZWN0X2NvbmZpcm1hdGlvbl9jZWxsX25vX2xpa2UnKTt0aGlzLm9Bbmlt
YXRlQmxpbmQ9bnVsbDt9LmJpbmQodGhpcykpO31lbHNle0NTUy5zZXRTdHlsZSh0
aGlzLmNvbm5lY3RCdXR0b25Db250YWluZXIsZCwnMHB4Jyk7Yz1WZWN0b3IyLmdl
dEVsZW1lbnREaW1lbnNpb25zKHRoaXMuY29ubmVjdEJ1dHRvbikueDt0aGlzLm9B
bmltYXRlQmxpbmQub25kb25lKGZ1bmN0aW9uKCl7Q1NTLnNldFN0eWxlKHRoaXMu
Y29ubmVjdEJ1dHRvblNsaWRlciwnb3ZlcmZsb3cnLCd2aXNpYmxlJyk7Q1NTLnNl
dFN0eWxlKHRoaXMuY29ubmVjdEJ1dHRvblNsaWRlciwnd2lkdGgnLCdhdXRvJyk7
Q1NTLnJlbW92ZUNsYXNzKHRoaXMuY29uZmlybWF0aW9uQ2VsbCwnY29ubmVjdF9j
b25maXJtYXRpb25fY2VsbF9saWtlJyk7Q1NTLmFkZENsYXNzKHRoaXMuY29uZmly
bWF0aW9uQ2VsbCwnY29ubmVjdF9jb25maXJtYXRpb25fY2VsbF9ub19saWtlJyk7
Q1NTLnNldFN0eWxlKHRoaXMuY29ubmVjdEJ1dHRvbkNvbnRhaW5lciwndmlzaWJp
bGl0eScsJ3Zpc2libGUnKTtDU1MucmVtb3ZlQ2xhc3ModGhpcy5jb25uZWN0QnV0
dG9uQ29udGFpbmVyLCdoaWRkZW4nKTt0aGlzLm9BbmltYXRlQmxpbmQ9bnVsbDt9
LmJpbmQodGhpcykpO310aGlzLm9BbmltYXRlQmxpbmQudG8oJ3dpZHRoJyxjKS5i
bGluZCgpLmdvKCk7fSxzaG93RWxlbWVudElmOmZ1bmN0aW9uKGEsYil7aWYoIWEp
cmV0dXJuO2lmKGIpe0NTUy5zaG93KGEpO31lbHNlIENTUy5oaWRlKGEpO30sc2xp
ZGVVc2VyUGhvdG9JbjpmdW5jdGlvbihiKXtpZighQ1NTLmhhc0NsYXNzKGIsJ2Nv
bm5lY3Rfd2lkZ2V0X3VzZXJfbm90X2Nvbm5lY3RlZCcpKXJldHVybjt2YXIgYT1D
U1MuZ2V0U3R5bGUoYiwnd2lkdGgnKTtDU1Muc2V0U3R5bGUoYiwnd2lkdGgnLDAp
O0NTUy5zZXRTdHlsZShiLCdvcGFjaXR5JywwKTtDU1MucmVtb3ZlQ2xhc3MoYiwn
Y29ubmVjdF93aWRnZXRfdXNlcl9ub3RfY29ubmVjdGVkJyk7YW5pbWF0aW9uKGIp
LnRvKCd3aWR0aCcsYSkuZHVyYXRpb24oMTAwKS5jaGVja3BvaW50KCkudG8oJ29w
YWNpdHknLDEpLmR1cmF0aW9uKDQwMCkuZ28oKTt9LHNsaWRlVXNlclBob3RvT3V0
OmZ1bmN0aW9uKGEpe2lmKENTUy5oYXNDbGFzcyhhLCdjb25uZWN0X3dpZGdldF91
c2VyX25vdF9jb25uZWN0ZWQnKSlyZXR1cm47YW5pbWF0aW9uKGEpLnRvKCdvcGFj
aXR5JywwKS5kdXJhdGlvbigxMDApLmNoZWNrcG9pbnQoLjI1KS50bygnd2lkdGgn
LDApLmR1cmF0aW9uKDEwMCkub25kb25lKGZ1bmN0aW9uKCl7Q1NTLmFkZENsYXNz
KGEsJ2Nvbm5lY3Rfd2lkZ2V0X3VzZXJfbm90X2Nvbm5lY3RlZCcpO0NTUy5zZXRT
dHlsZShhLCd3aWR0aCcsbnVsbCk7fSkuZ28oKTt9LHByaW1hcnlMaWtlQnV0dG9u
T25DbGljazpmdW5jdGlvbihldmVudCl7aWYodGhpcy5ncmF5T3V0JiZ0aGlzLmFs
cmVhZHlDb25uZWN0ZWQpcmV0dXJuO3RoaXMuY29ubmVjdFRvTm9kZU9uQ2xpY2so
ZXZlbnQpO2lmKHRoaXMudG9tYnN0b25lQ3Jvc3MmJnRoaXMuYWxyZWFkeUNvbm5l
Y3RlZClET00ucmVwbGFjZSh0aGlzLnRvbWJzdG9uZUNyb3NzLEhUTUwoJzxkaXYg
Y2xhc3M9InRvbWJzdG9uZV9jcm9zcyB0b21ic3RvbmVfY3Jvc3Nfc3RhdGljIiAv
PicpKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy50b21ic3RvbmVDcm9zcz1E
T00uZmluZCh0aGlzLndpZGdldCwnZGl2LnRvbWJzdG9uZV9jcm9zcycpO0NTUy5y
ZW1vdmVDbGFzcyh0aGlzLnRvbWJzdG9uZUNyb3NzLCd0b21ic3RvbmVfY3Jvc3Nf
c3RhdGljJyk7RXZlbnQubGlzdGVuKHRoaXMudG9tYnN0b25lQ3Jvc3MsJ2NsaWNr
Jyx0aGlzLmNvbm5lY3RUb05vZGVPbkNsaWNrLmJpbmQodGhpcykpO30uYmluZCh0
aGlzKSwxMDAwKTt9LF9jbGlja0xvY2tlZDpmYWxzZSxjb25uZWN0VG9Ob2RlT25D
bGljazpmdW5jdGlvbihldmVudCl7RXZlbnQua2lsbChldmVudCk7aWYoIXRoaXMu
X2NsaWNrTG9ja2VkKXt0aGlzLl9jbGlja0xvY2tlZD10cnVlO3NldFRpbWVvdXQo
ZnVuY3Rpb24oKXt0aGlzLl9jbGlja0xvY2tlZD1mYWxzZTt9LmJpbmQodGhpcyks
MTAwMCk7aWYodGhpcy52aWV3ZXJJRD09MHx8dGhpcy51c2VyT3B0ZWRPdXQpe3Ro
aXMucHJlc2VudE9wdEluKCk7fWVsc2UgdGhpcy5jb25uZWN0VG9Ob2RlKCF0aGlz
LmFscmVhZHlDb25uZWN0ZWQpO319LGNvbm5lY3RUb05vZGU6ZnVuY3Rpb24oZCl7
aWYoIWQpe2lmKHRoaXMubGF5b3V0PT09RXh0ZXJuYWxOb2RlQ29ubmVjdFdpZGdl
dC5TSU1QTEVfTEFZT1VUKXJldHVybjtpZih0aGlzLmxheW91dD09PUV4dGVybmFs
Tm9kZUNvbm5lY3RXaWRnZXQuU1RBTkRBUkRfTEFZT1VUJiYhdGhpcy51c2luZ0Nv
bm5lY3RMaWJyYXJ5KXtDU1MuYWRkQ2xhc3ModGhpcy51c2VyQWN0aW9uVGV4dFNw
YW4sJ2hpZGRlbl9lbGVtJyk7Q1NTLnJlbW92ZUNsYXNzKHRoaXMuc3VtbWFyeVRl
eHRTcGFuLCdoaWRkZW5fZWxlbScpO0NTUy5zZXRTdHlsZSh0aGlzLnN1bW1hcnlU
ZXh0U3Bhbiwnb3BhY2l0eScsMSk7fWlmKHRoaXMuc2hhcmVDb21tZW50U3BhbnMp
Zm9yKHZhciBiPTA7Yjx0aGlzLnNoYXJlQ29tbWVudFNwYW5zLmxlbmd0aDtiKysp
Q1NTLmFkZENsYXNzKHRoaXMuc2hhcmVDb21tZW50U3BhbnNbYl0sJ2hpZGRlbl9l
bGVtJyk7aWYodGhpcy5jb21tZW50V2lkZ2V0T3Blbil7dGhpcy5jbG9zZUNvbW1l
bnRXaWRnZXQoKTt9ZWxzZSBpZih0aGlzLmlubGluZUNvbW1lbnRGbHlvdXRPcGVu
KXRoaXMuY2xvc2VJbmxpbmVDb21tZW50KCk7fXRoaXMudXBkYXRlV2lkZ2V0KHtu
b3dDb25uZWN0ZWQ6IXRoaXMuYWxyZWFkeUNvbm5lY3RlZCxpc0FkbWluOnRoaXMu
dmlld2VySXNBZG1pbn0sdHJ1ZSk7dmFyIGE9e2hyZWY6dGhpcy5leHRlcm5hbFVy
bCxub2RlX3R5cGU6dGhpcy5ub2RlVHlwZSxlZGdlX3R5cGU6dGhpcy5lZGdlVHlw
ZSxwYWdlX2lkOnRoaXMucGFnZUlkLGxheW91dDp0aGlzLmxheW91dCxpc19wZXJz
b25hbGl6ZWQ6dGhpcy5pc1BlcnNvbmFsaXplZCxzaG93X2NhcHRjaGE6dGhpcy5z
aG93Q2FwdGNoYSxjb25uZWN0X3RleHQ6dGhpcy5jb25uZWN0VGV4dCxyZWY6dGhp
cy5yZWYsbm93X2Nvbm5lY3RlZDpkLHBvc3RfZm9ybV9pZDokKCdwb3N0X2Zvcm1f
aWQnKS52YWx1ZSxpZnJhbWVfcmVmZXJlcjp0aGlzLmlmcmFtZVJlZmVyZXJ9O2lm
KHRoaXMuY29uZmlybWVkQ29ubmVjdClhLmNvbmZpcm09MTtCb290bG9hZGVyLmxv
YWRDb21wb25lbnRzKFsnYXN5bmMnLCdhc3luYy1wb3N0bHVkZSddLGZ1bmN0aW9u
KCl7bmV3IEFzeW5jUmVxdWVzdCgpLnNldFVSSSh0aGlzLmdldEFqYXhFbmRwb2lu
dCgpKS5zZXRIYW5kbGVyKHRoaXMuc3luY1dpZGdldFdpdGhTZXJ2ZXIuYmluZCh0
aGlzKSkuc2V0RGF0YShhKS5zZXROZWN0YXJNb2R1bGVEYXRhU2FmZSgpLnNldE5l
Y3RhckltcHJlc3Npb25JZFNhZmUoKS5zZW5kKCk7fS5iaW5kKHRoaXMpKTtpZihk
KXtpZih0aGlzLmxheW91dD09PUV4dGVybmFsTm9kZUNvbm5lY3RXaWRnZXQuQk9Y
X0NPVU5UX0xBWU9VVCl0aGlzLnJlcXVpcmVzTW91c2VMZWF2ZUV2ZW50PXRydWU7
aWYodGhpcy5sYXlvdXQ9PT1FeHRlcm5hbE5vZGVDb25uZWN0V2lkZ2V0LlNUQU5E
QVJEX0xBWU9VVCYmIXRoaXMudXNpbmdDb25uZWN0TGlicmFyeSl7Q1NTLnNldFN0
eWxlKHRoaXMudXNlckFjdGlvblRleHRTcGFuLCdvcGFjaXR5JywxKTtDU1MucmVt
b3ZlQ2xhc3ModGhpcy51c2VyQWN0aW9uVGV4dFNwYW4sJ2hpZGRlbl9lbGVtJyk7
Q1NTLmFkZENsYXNzKHRoaXMuc3VtbWFyeVRleHRTcGFuLCdoaWRkZW5fZWxlbScp
O0V2ZW50Lmxpc3Rlbih0aGlzLndpZGdldCwnbW91c2VsZWF2ZScsdGhpcy50cmFu
c2l0aW9uQmV0d2Vlbk1lc3NhZ2VzLmJpbmQodGhpcykpO31pZih0aGlzLnNoYXJl
Q29tbWVudFNwYW5zKXtmb3IodmFyIGM9MDtjPHRoaXMuc2hhcmVDb21tZW50U3Bh
bnM7YysrKUNTUy5yZW1vdmVDbGFzcyh0aGlzLnNoYXJlQ29tbWVudFNwYW5zW2Nd
LCdoaWRkZW5fZWxlbScpO31lbHNlIGlmKHRoaXMuc3VwcG9ydENvbW1lbnRpbmcp
dGhpcy5wcmVzZW50Q29tbWVudGluZ09wdGlvbigpO3RoaXMucmVwb3NpdGlvbkZh
Y2VwaWxlVmVydGljYWxseSgpO319LHRyYW5zaXRpb25CZXR3ZWVuTWVzc2FnZXM6
ZnVuY3Rpb24oZXZlbnQpe2lmKCF0aGlzLmFscmVhZHlDb25uZWN0ZWR8fENTUy5o
YXNDbGFzcyh0aGlzLnVzZXJBY3Rpb25UZXh0U3BhbiwnaGlkZGVuX2VsZW0nKSly
ZXR1cm47YW5pbWF0aW9uKHRoaXMudXNlckFjdGlvblRleHRTcGFuKS50bygnb3Bh
Y2l0eScsMCkuZHVyYXRpb24oNTAwKS5vbmRvbmUoZnVuY3Rpb24oKXtDU1MuYWRk
Q2xhc3ModGhpcy51c2VyQWN0aW9uVGV4dFNwYW4sJ2hpZGRlbl9lbGVtJyk7Q1NT
LnNldFN0eWxlKHRoaXMuc3VtbWFyeVRleHRTcGFuLCdvcGFjaXR5JywwKTtDU1Mu
cmVtb3ZlQ2xhc3ModGhpcy5zdW1tYXJ5VGV4dFNwYW4sJ2hpZGRlbl9lbGVtJyk7
YW5pbWF0aW9uKHRoaXMuc3VtbWFyeVRleHRTcGFuKS50bygnb3BhY2l0eScsMSku
ZHVyYXRpb24oNTAwKS5vbmRvbmUoZnVuY3Rpb24oKXt0aGlzLnJlcG9zaXRpb25G
YWNlcGlsZVZlcnRpY2FsbHkoKTt9LmJpbmQodGhpcykpLmdvKCk7dGhpcy5wb3Np
dGlvbklubGluZUNvbW1lbnRGbHlvdXQoKTt9LmJpbmQodGhpcykpLmdvKCk7fSxw
cmVzZW50Q29tbWVudGluZ09wdGlvbjpmdW5jdGlvbigpe0FyYml0ZXIuaW5mb3Jt
KCdwbGF0Zm9ybS9zb2NpYWxwbHVnaW5zL2RpYWxvZycse2NvbnRyb2xsZXJJRDp0
aGlzLndpZGdldElELGV2ZW50OidvcGVuJ30pO2lmKHRoaXMudXNpbmdDb25uZWN0
TGlicmFyeSl7RXh0ZXJuYWxOb2RlQ29ubmVjdFdpZGdldC5zZWxmPXRoaXM7dmFy
IGE9e3R5cGU6J3ByZXNlbnRFZGdlQ29tbWVudERpYWxvZycsbWFzdGVyRnJhbWVO
YW1lOndpbmRvdy5uYW1lLHZlcnNpb246Mn07aWYodGhpcy5sYXlvdXQ9PUV4dGVy
bmFsTm9kZUNvbm5lY3RXaWRnZXQuQk9YX0NPVU5UX0xBWU9VVCl7YS5wcmVDb21w
dXRlZFdpZHRoT2Zmc2V0PXRoaXMuY29tcHV0ZUJ1dHRvbkRpbWVuc2lvbnNXaXRo
UGFkZGluZygpLndpZHRoO2lmKCFpbnRsX2xvY2FsZV9pc19ydGwoKSlhLnByZUNv
bXB1dGVkV2lkdGhPZmZzZXQrPTg7fWlmKHRoaXMuc29jaWFsQmFyKXthLmxlZnQ9
cGFyc2VJbnQoQ1NTLmdldFN0eWxlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdw
cm9maWxlJyksJ3dpZHRoJyksMTApKzE7fWVsc2UgaWYodGhpcy5oYXNTZW5kJiZ0
aGlzLmxheW91dD09RXh0ZXJuYWxOb2RlQ29ubmVjdFdpZGdldC5TVEFOREFSRF9M
QVlPVVQpYS5wcmVDb21wdXRlZFdpZHRoT2Zmc2V0PXRoaXMuaW52ZXJ0ZWRCdXR0
b25zPzA6NjU7VW52ZXJpZmllZFhELnNlbmQoYSk7dGhpcy5jb21tZW50V2lkZ2V0
T3Blbj10cnVlO3RoaXMuY29tbWVudFdpZGdldFZpc2libGU9dHJ1ZTt0aGlzLmNv
bW1lbnRXaWRnZXRFeHBhbmRlZD10cnVlO31lbHNlIGlmKHRoaXMudXNpbmdJbmxp
bmVDb21tZW50aW5nKWlmKCF0aGlzLmlubGluZUNvbW1lbnRMaXN0ZW5lcnNJbml0
aWFsaXplZCl7dGhpcy51bndyYXBDb21tZW50KCk7dGhpcy5pbml0aWFsaXplSW5s
aW5lQ29tbWVudExpc3RlbmVycygpO3RoaXMub3BlbklubGluZUNvbW1lbnRGbHlv
dXQoKTt0aGlzLnBvc2l0aW9uSW5saW5lQ29tbWVudEZseW91dCgpO3RoaXMuaW5s
aW5lQ29tbWVudExpc3RlbmVyc0luaXRpYWxpemVkPXRydWU7fWVsc2V7dGhpcy5w
b3NpdGlvbklubGluZUNvbW1lbnRGbHlvdXQoKTt0aGlzLm9wZW5JbmxpbmVDb21t
ZW50Rmx5b3V0KCk7fX0sdW53cmFwQ29tbWVudDpmdW5jdGlvbigpe2lmKHRoaXMu
dW53cmFwQ29tbWVudC5kb25lKXJldHVybjt2YXIgYj0kKCdjb25uZWN0LXdpZGdl
dC1jb21tZW50LWJveC1tYXJrdXAnKSxhPUV4dGVybmFsTm9kZUNvbm5lY3RXaWRn
ZXQuY29tbWVudE1hcmt1cDtiLmlubmVySFRNTD1hO3RoaXMudW53cmFwQ29tbWVu
dC5kb25lPXRydWU7fSxpbml0aWFsaXplSW5saW5lQ29tbWVudExpc3RlbmVyczpm
dW5jdGlvbigpe3RoaXMuaW5saW5lQ29tbWVudEZseW91dD1ET00uZmluZCh0aGlz
LndpZGdldCwnLmNvbm5lY3Rfd2lkZ2V0X2NvbW1lbnRfYm94Jyk7dGhpcy5pbmxp
bmVDb21tZW50SW5wdXQ9RE9NLmZpbmQodGhpcy5pbmxpbmVDb21tZW50Rmx5b3V0
LCcuY29ubmVjdF93aWRnZXRfY29tbWVudF90ZXh0aW5wdXQnKTt0aGlzLmlubGlu
ZUNvbW1lbnRCdXR0b249RE9NLmZpbmQodGhpcy5pbmxpbmVDb21tZW50Rmx5b3V0
LCcuY29ubmVjdF93aWRnZXRfY29tbWVudF9idXR0b24nKTt0aGlzLmlubGluZUNv
bW1lbnRDbG9zZT1ET00uc2NyeSh0aGlzLmlubGluZUNvbW1lbnRGbHlvdXQsJy5j
b25uZWN0X3dpZGdldF9jb21tZW50X2Nsb3NlX2J1dHRvbicpO2lmKHRoaXMuaW5s
aW5lQ29tbWVudENsb3NlLmxlbmd0aD4wKXRoaXMuaW5saW5lQ29tbWVudENsb3Nl
PXRoaXMuaW5saW5lQ29tbWVudENsb3NlWzBdO3RoaXMuY29tbWVudEJ1dHRvbklz
QWN0aXZlPWZhbHNlO0V2ZW50Lmxpc3Rlbih0aGlzLmlubGluZUNvbW1lbnRJbnB1
dCwna2V5dXAnLHRoaXMuY29uZGl0aW9uYWxseUFjdGl2YXRlQnV0dG9uLmJpbmQo
dGhpcykpO0V2ZW50Lmxpc3Rlbih0aGlzLmlubGluZUNvbW1lbnRJbnB1dCwnZm9j
dXMnLHRoaXMuZXhwb3NlQ29tbWVudEJ1dHRvbi5iaW5kKHRoaXMpKTtFdmVudC5s
aXN0ZW4odGhpcy5pbmxpbmVDb21tZW50QnV0dG9uLCdjbGljaycsdGhpcy51cGRh
dGVDb25uZWN0aW9uV2l0aENvbW1lbnQuYmluZCh0aGlzKSk7RXZlbnQubGlzdGVu
KHRoaXMud2lkZ2V0LCdtb3VzZW91dCcsdGhpcy5oaWRlSW5saW5lQ29tbWVudC5i
aW5kKHRoaXMpKTtFdmVudC5saXN0ZW4odGhpcy53aWRnZXQsJ21vdXNlb3Zlcics
dGhpcy5zaG93SW5saW5lQ29tbWVudC5iaW5kKHRoaXMpKTtpZih0aGlzLmlubGlu
ZUNvbW1lbnRDbG9zZSlFdmVudC5saXN0ZW4odGhpcy5pbmxpbmVDb21tZW50Q2xv
c2UsJ2NsaWNrJyxmdW5jdGlvbihldmVudCl7Zm9yKHZhciBhPTA7YTx0aGlzLnNo
YXJlQ29tbWVudFNwYW5zLmxlbmd0aDthKyspQ1NTLnJlbW92ZUNsYXNzKHRoaXMu
c2hhcmVDb21tZW50U3BhbnNbYV0sJ2hpZGRlbl9lbGVtJyk7dGhpcy5jbG9zZUlu
bGluZUNvbW1lbnQoKTt9LmJpbmQodGhpcykpO30sZXhwb3NlQ29tbWVudEJ1dHRv
bjpmdW5jdGlvbihldmVudCl7aWYoIUNTUy5oYXNDbGFzcyh0aGlzLmlubGluZUNv
bW1lbnRCdXR0b24sJ2hpZGRlbl9lbGVtJykpcmV0dXJuO0NTUy5yZW1vdmVDbGFz
cyh0aGlzLmlubGluZUNvbW1lbnRCdXR0b24sJ2hpZGRlbl9lbGVtJyk7Q1NTLnNl
dFN0eWxlKHRoaXMuaW5saW5lQ29tbWVudElucHV0LCd3aWR0aCcsdGhpcy50ZXh0
SW5wdXRXaWR0aFdpdGhCdXR0b24rJ3B4Jyk7Q1NTLnNldFN0eWxlKHRoaXMuaW5s
aW5lQ29tbWVudElucHV0LCdtYXJnaW4tcmlnaHQnLHRoaXMudGV4dElucHV0TWFy
Z2luV2l0aEJ1dHRvbisncHgnKTt9LG9wZW5JbmxpbmVDb21tZW50Rmx5b3V0OmZ1
bmN0aW9uKCl7Q1NTLnNob3codGhpcy5pbmxpbmVDb21tZW50Rmx5b3V0KTt0aGlz
LmlubGluZUNvbW1lbnRGbHlvdXRPcGVuPXRydWU7dGhpcy5pbmxpbmVDb21tZW50
Rmx5b3V0VmlzaWJsZT10cnVlO30sbWFuYWdlQm94Q291bnRCdXR0b25BbmltYXRp
b246ZnVuY3Rpb24oYSl7aWYoYSYmIXRoaXMuc2hvd0NvbmZpcm0pe3RoaXMuYW5p
bWF0ZUJveENvdW50QnV0dG9uRGlzYXBwZWFyYW5jZSgpO31lbHNlIHRoaXMuYW5p
bWF0ZUJveENvdW50QnV0dG9uUmVhcHBlYXJhbmNlKCk7fSxhbmltYXRlQm94Q291
bnRCdXR0b25EaXNhcHBlYXJhbmNlOmZ1bmN0aW9uKCl7aWYodGhpcy5ncmF5T3V0
KXJldHVybjtDU1MuYWRkQ2xhc3ModGhpcy5jb25uZWN0QnV0dG9uLCdoaWRkZW5f
ZWxlbScpO0NTUy5zZXRTdHlsZSh0aGlzLm51bWJlckNsb3VkRXh0ZW5zaW9uLCdv
cGFjaXR5JywwKTtDU1MucmVtb3ZlQ2xhc3ModGhpcy5udW1iZXJDbG91ZEV4dGVu
c2lvbiwnaGlkZGVuX2VsZW0nKTtDU1MuYWRkQ2xhc3ModGhpcy5udW1iZXJDbG91
ZE51YiwnaGlkZGVuX2VsZW0nKTtDU1MuYWRkQ2xhc3ModGhpcy5udW1iZXJDbG91
ZFVubGlrZVNwYW4sJ2hpZGRlbl9lbGVtJyk7Q1NTLnJlbW92ZUNsYXNzKHRoaXMu
bnVtYmVyQ2xvdWRSZW1pbmRlclNwYW4sJ2hpZGRlbl9lbGVtJyk7YW5pbWF0aW9u
KHRoaXMubnVtYmVyQ2xvdWQpLnRvKCdoZWlnaHQnLHRoaXMuZXhwYW5kZWROdW1i
ZXJDbG91ZEhlaWdodCkuZHVyYXRpb24oMTAwKS5vbmRvbmUoZnVuY3Rpb24oKXth
bmltYXRpb24odGhpcy5udW1iZXJDbG91ZEV4dGVuc2lvbikuZnJvbSgnb3BhY2l0
eScsMCkudG8oJ29wYWNpdHknLDEpLmR1cmF0aW9uKDEwMCkuZ28oKTt9LmJpbmQo
dGhpcykpLmdvKCk7fSxhbmltYXRlQm94Q291bnRCdXR0b25SZWFwcGVhcmFuY2U6
ZnVuY3Rpb24oKXtDU1MuYWRkQ2xhc3ModGhpcy5udW1iZXJDbG91ZEV4dGVuc2lv
biwnaGlkZGVuX2VsZW0nKTthbmltYXRpb24odGhpcy5udW1iZXJDbG91ZCkudG8o
J2hlaWdodCcsdGhpcy5jb2xsYXBzZWROdW1iZXJDbG91ZEhlaWdodCkuZHVyYXRp
b24oNzUpLm9uZG9uZShmdW5jdGlvbigpe2lmKHRoaXMuc2hvd0NvbmZpcm0pe2Zv
cih2YXIgYT0wO2E8dGhpcy5jb25maXJtU3BhbnMubGVuZ3RoO2ErKylDU1MucmVt
b3ZlQ2xhc3ModGhpcy5jb25maXJtU3BhbnNbYV0sJ2hpZGRlbl9lbGVtJyk7fWVs
c2V7Q1NTLnNldFN0eWxlKHRoaXMuY29ubmVjdEJ1dHRvbiwnb3BhY2l0eScsMCk7
Q1NTLnJlbW92ZUNsYXNzKHRoaXMuY29ubmVjdEJ1dHRvbiwnaGlkZGVuX2VsZW0n
KTthbmltYXRpb24odGhpcy5jb25uZWN0QnV0dG9uKS5mcm9tKCdvcGFjaXR5Jyww
KS50bygnb3BhY2l0eScsMSkuZHVyYXRpb24oNzUpLm9uZG9uZShmdW5jdGlvbigp
e0NTUy5zZXRTdHlsZSh0aGlzLm51bWJlckNsb3VkTnViLCdvcGFjaXR5JywwKTtD
U1MucmVtb3ZlQ2xhc3ModGhpcy5udW1iZXJDbG91ZE51YiwnaGlkZGVuX2VsZW0n
KTthbmltYXRpb24odGhpcy5udW1iZXJDbG91ZE51YikuZnJvbSgnb3BhY2l0eScs
MCkudG8oJ29wYWNpdHknLDEpLmR1cmF0aW9uKDUwKS5nbygpO30uYmluZCh0aGlz
KSkuZ28oKTt9fS5iaW5kKHRoaXMpKS5nbygpO30sbWFuYWdlQnV0dG9uQ291bnRC
dXR0b25BbmltYXRpb246ZnVuY3Rpb24oYSl7aWYoYSYmIXRoaXMuc2hvd0NvbmZp
cm0pe3RoaXMuYW5pbWF0ZUJ1dHRvbkNvdW50QnV0dG9uRGlzYXBwZWFyYW5jZSgp
O31lbHNlIHRoaXMuYW5pbWF0ZUJ1dHRvbkNvdW50QnV0dG9uUmVhcHBlYXJhbmNl
KCk7aWYoIXRoaXMuZ3JheU91dCl7Q1NTLnJlbW92ZUNsYXNzKHRoaXMudGh1bWJz
VXBJY29uLCdoaWRkZW5fZWxlbScpO0NTUy5hZGRDbGFzcyh0aGlzLnVuZG9SZWdp
b24sJ2hpZGRlbl9lbGVtJyk7fX0sbWFuYWdlU2ltcGxlQnV0dG9uQW5pbWF0aW9u
OmZ1bmN0aW9uKGEpe2lmKHRoaXMuZ3JheU91dClyZXR1cm47aWYoYSYmIXRoaXMu
c2hvd0NvbmZpcm0pe3RoaXMuYW5pbWF0ZVNpbXBsZUJ1dHRvbkRpc2FwcGVhcmFu
Y2UoKTt9ZWxzZSB0aGlzLmFuaW1hdGVTaW1wbGVCdXR0b25SZWFwcGVhcmFuY2Uo
KTt9LGFuaW1hdGVCdXR0b25Db3VudEJ1dHRvbkRpc2FwcGVhcmFuY2U6ZnVuY3Rp
b24oKXtpZighdGhpcy5ncmF5T3V0KWFuaW1hdGlvbih0aGlzLmNvbm5lY3RCdXR0
b24pLmZyb20oJ29wYWNpdHknLDEpLnRvKCdvcGFjaXR5JywwKS5mcm9tKCd3aWR0
aCcsdGhpcy5vcmlnaW5hbEJ1dHRvbldpZHRoKS50bygnd2lkdGgnLCcwcHgnKS5v
bmRvbmUoZnVuY3Rpb24oKXtDU1MuYWRkQ2xhc3ModGhpcy5jb25uZWN0QnV0dG9u
LCdoaWRkZW5fZWxlbScpO30uYmluZCh0aGlzKSkuZHVyYXRpb24oMTAwKS5nbygp
O2FuaW1hdGlvbih0aGlzLm51bWJlckV4Y2x1ZGluZykuZnJvbSgnb3BhY2l0eScs
MSkudG8oJ29wYWNpdHknLDApLmR1cmF0aW9uKDEwMCkub25kb25lKGZ1bmN0aW9u
KCl7Q1NTLmFkZENsYXNzKHRoaXMubnVtYmVyRXhjbHVkaW5nLCdoaWRkZW5fZWxl
bScpO0NTUy5zZXRTdHlsZSh0aGlzLnN1bW1hcnlJbmNsdWRpbmcsJ29wYWNpdHkn
LDApO0NTUy5yZW1vdmVDbGFzcyh0aGlzLnN1bW1hcnlJbmNsdWRpbmcsJ2hpZGRl
bl9lbGVtJyk7YW5pbWF0aW9uKHRoaXMuc3VtbWFyeUluY2x1ZGluZykuZnJvbSgn
b3BhY2l0eScsMCkudG8oJ29wYWNpdHknLDEpLmR1cmF0aW9uKDEwMCkuZ28oKTt9
LmJpbmQodGhpcykpLmdvKCk7Zm9yKHZhciBhPTA7YTx0aGlzLmNvbmZpcm1TcGFu
cy5sZW5ndGg7YSsrKUNTUy5hZGRDbGFzcyh0aGlzLmNvbmZpcm1TcGFuc1thXSwn
aGlkZGVuX2VsZW0nKTtpZih0aGlzLmdyYXlPdXQpQ1NTLnJlbW92ZUNsYXNzKHRo
aXMuY29ubmVjdEJ1dHRvbiwnaGlkZGVuX2VsZW0nKTt9LGFuaW1hdGVTaW1wbGVC
dXR0b25EaXNhcHBlYXJhbmNlOmZ1bmN0aW9uKCl7YW5pbWF0aW9uKHRoaXMuY29u
bmVjdEJ1dHRvbikuZnJvbSgnb3BhY2l0eScsMSkudG8oJ29wYWNpdHknLDApLmZy
b20oJ3dpZHRoJyx0aGlzLm9yaWdpbmFsQnV0dG9uV2lkdGgpLnRvKCd3aWR0aCcs
JzBweCcpLm9uZG9uZShmdW5jdGlvbigpe0NTUy5hZGRDbGFzcyh0aGlzLmNvbm5l
Y3RCdXR0b24sJ2hpZGRlbl9lbGVtJyk7Q1NTLnNldFN0eWxlKHRoaXMuc3VtbWFy
eUluY2x1ZGluZywnb3BhY2l0eScsMCk7Q1NTLnJlbW92ZUNsYXNzKHRoaXMuc3Vt
bWFyeUluY2x1ZGluZywnaGlkZGVuX2VsZW0nKTthbmltYXRpb24odGhpcy5zdW1t
YXJ5SW5jbHVkaW5nKS5mcm9tKCdvcGFjaXR5JywwKS50bygnb3BhY2l0eScsMSku
ZHVyYXRpb24oMTAwKS5nbygpO30uYmluZCh0aGlzKSkuZHVyYXRpb24oNTApLmdv
KCk7Zm9yKHZhciBhPTA7YTx0aGlzLmNvbmZpcm1TcGFucy5sZW5ndGg7YSsrKUNT
Uy5hZGRDbGFzcyh0aGlzLmNvbmZpcm1TcGFuc1thXSwnaGlkZGVuX2VsZW0nKTtp
Zih0aGlzLmdyYXlPdXQpQ1NTLnJlbW92ZUNsYXNzKHRoaXMuY29ubmVjdEJ1dHRv
biwnaGlkZGVuX2VsZW0nKTt9LGNvbXB1dGVCdXR0b25EaW1lbnNpb25zOmZ1bmN0
aW9uKCl7dmFyIGM9Q1NTLmhhc0NsYXNzKHRoaXMuY29ubmVjdEJ1dHRvbiwnaGlk
ZGVuX2VsZW0nKTtpZihjKXtDU1MuYWRkQ2xhc3ModGhpcy5jb25uZWN0QnV0dG9u
LCdjb25uZWN0X3dpZGdldF9vZmZzY3JlZW4nKTtDU1MucmVtb3ZlQ2xhc3ModGhp
cy5jb25uZWN0QnV0dG9uLCdoaWRkZW5fZWxlbScpO312YXIgYT1WZWN0b3IyLmdl
dEVsZW1lbnREaW1lbnNpb25zKHRoaXMuY29ubmVjdEJ1dHRvbik7dmFyIGQ9YS54
O3ZhciBiPWEueTt2YXIgZj1wYXJzZUludChDU1MuZ2V0U3R5bGUodGhpcy5jb25u
ZWN0QnV0dG9uLCdwYWRkaW5nTGVmdCcpLDEwKTt2YXIgZz1wYXJzZUludChDU1Mu
Z2V0U3R5bGUodGhpcy5jb25uZWN0QnV0dG9uLCdwYWRkaW5nUmlnaHQnKSwxMCk7
dmFyIGg9cGFyc2VJbnQoQ1NTLmdldFN0eWxlKHRoaXMuY29ubmVjdEJ1dHRvbiwn
cGFkZGluZ1RvcCcpLDEwKTt2YXIgZT1wYXJzZUludChDU1MuZ2V0U3R5bGUodGhp
cy5jb25uZWN0QnV0dG9uLCdwYWRkaW5nQm90dG9tJyksMTApO2lmKGMpe0NTUy5h
ZGRDbGFzcyh0aGlzLmNvbm5lY3RCdXR0b24sJ2hpZGRlbl9lbGVtJyk7Q1NTLnJl
bW92ZUNsYXNzKHRoaXMuY29ubmVjdEJ1dHRvbiwnY29ubmVjdF93aWRnZXRfb2Zm
c2NyZWVuJyk7fXJldHVybiB7d2lkdGg6ZC1mLWctMixoZWlnaHQ6Yn07fSxjb21w
dXRlQnV0dG9uRGltZW5zaW9uc1dpdGhQYWRkaW5nOmZ1bmN0aW9uKCl7dmFyIGM9
Q1NTLmhhc0NsYXNzKHRoaXMuY29ubmVjdEJ1dHRvbiwnaGlkZGVuX2VsZW0nKTtp
ZihjKXtDU1MuYWRkQ2xhc3ModGhpcy5jb25uZWN0QnV0dG9uLCdjb25uZWN0X3dp
ZGdldF9vZmZzY3JlZW4nKTtDU1MucmVtb3ZlQ2xhc3ModGhpcy5jb25uZWN0QnV0
dG9uLCdoaWRkZW5fZWxlbScpO312YXIgYT1WZWN0b3IyLmdldEVsZW1lbnREaW1l
bnNpb25zKHRoaXMuY29ubmVjdEJ1dHRvbik7dmFyIGQ9YS54O3ZhciBiPWEueTtp
Zih1YS5pZSgpKWQrPTM7aWYoYyl7Q1NTLmFkZENsYXNzKHRoaXMuY29ubmVjdEJ1
dHRvbiwnaGlkZGVuX2VsZW0nKTtDU1MucmVtb3ZlQ2xhc3ModGhpcy5jb25uZWN0
QnV0dG9uLCdjb25uZWN0X3dpZGdldF9vZmZzY3JlZW4nKTt9cmV0dXJuIHt3aWR0
aDpkLGhlaWdodDpifTt9LGFuaW1hdGVCdXR0b25Db3VudEJ1dHRvblJlYXBwZWFy
YW5jZTpmdW5jdGlvbigpe2lmKHRoaXMuc2hvd0NvbmZpcm0pe2Zvcih2YXIgYT0w
O2E8dGhpcy5jb25maXJtU3BhbnMubGVuZ3RoO2ErKylDU1MucmVtb3ZlQ2xhc3Mo
dGhpcy5jb25maXJtU3BhbnNbYV0sJ2hpZGRlbl9lbGVtJyk7fWVsc2UgaWYoIXRo
aXMuZ3JheU91dCl7Q1NTLnJlbW92ZUNsYXNzKHRoaXMuY29ubmVjdEJ1dHRvbiwn
aGlkZGVuX2VsZW0nKTthbmltYXRpb24odGhpcy5jb25uZWN0QnV0dG9uKS5mcm9t
KCd3aWR0aCcsJzBweCcpLnRvKCd3aWR0aCcsdGhpcy5vcmlnaW5hbEJ1dHRvbldp
ZHRoKS5mcm9tKCdvcGFjaXR5JywwKS50bygnb3BhY2l0eScsMSkuZHVyYXRpb24o
MTAwKS5nbygpO31DU1Muc2V0U3R5bGUodGhpcy5zdW1tYXJ5SW5jbHVkaW5nLCdv
cGFjaXR5JywxKTthbmltYXRpb24odGhpcy5zdW1tYXJ5SW5jbHVkaW5nKS5mcm9t
KCdvcGFjaXR5JywxKS50bygnb3BhY2l0eScsMCkuZHVyYXRpb24oMTAwKS5vbmRv
bmUoZnVuY3Rpb24oKXtDU1MuYWRkQ2xhc3ModGhpcy5zdW1tYXJ5SW5jbHVkaW5n
LCdoaWRkZW5fZWxlbScpO0NTUy5zZXRTdHlsZSh0aGlzLm51bWJlckV4Y2x1ZGlu
Zywnb3BhY2l0eScsMCk7Q1NTLnJlbW92ZUNsYXNzKHRoaXMubnVtYmVyRXhjbHVk
aW5nLCdoaWRkZW5fZWxlbScpO2FuaW1hdGlvbih0aGlzLm51bWJlckV4Y2x1ZGlu
ZykuZnJvbSgnb3BhY2l0eScsMCkudG8oJ29wYWNpdHknLDEpLmR1cmF0aW9uKDEw
MCkuZ28oKTt9LmJpbmQodGhpcykpLmdvKCk7fSxhbmltYXRlU2ltcGxlQnV0dG9u
UmVhcHBlYXJhbmNlOmZ1bmN0aW9uKCl7aWYodGhpcy5zaG93Q29uZmlybSl7Zm9y
KHZhciBhPTA7YTx0aGlzLmNvbmZpcm1TcGFucy5sZW5ndGg7YSsrKUNTUy5yZW1v
dmVDbGFzcyh0aGlzLmNvbmZpcm1TcGFuc1thXSwnaGlkZGVuX2VsZW0nKTt9ZWxz
ZXtDU1MucmVtb3ZlQ2xhc3ModGhpcy5jb25uZWN0QnV0dG9uLCdoaWRkZW5fZWxl
bScpO2FuaW1hdGlvbih0aGlzLmNvbm5lY3RCdXR0b24pLmZyb20oJ3dpZHRoJywn
MHB4JykudG8oJ3dpZHRoJyx0aGlzLm9yaWdpbmFsQnV0dG9uV2lkdGgpLmZyb20o
J29wYWNpdHknLDApLnRvKCdvcGFjaXR5JywxKS5kdXJhdGlvbigxMDApLmdvKCk7
fUNTUy5zZXRTdHlsZSh0aGlzLnN1bW1hcnlJbmNsdWRpbmcsJ29wYWNpdHknLDEp
O2FuaW1hdGlvbih0aGlzLnN1bW1hcnlJbmNsdWRpbmcpLmZyb20oJ29wYWNpdHkn
LDEpLnRvKCdvcGFjaXR5JywwKS5kdXJhdGlvbigxMDApLm9uZG9uZShmdW5jdGlv
bigpe0NTUy5hZGRDbGFzcyh0aGlzLnN1bW1hcnlJbmNsdWRpbmcsJ2hpZGRlbl9l
bGVtJyk7fS5iaW5kKHRoaXMpKS5nbygpO30saW5qZWN0Q29tbWVudFdpZGdldE1h
cmt1cDpmdW5jdGlvbihhKXt0aGlzLmNvbW1lbnREb2N1bWVudD1hO3RoaXMuY29t
bWVudERvY3VtZW50LmJvZHkuaW5uZXJIVE1MPXRoaXMuY29tbWVudFdpZGdldE1h
cmt1cDt0aGlzLnRyYW5zZmVyQ1NTU3R5bGVzKCk7aWYodGhpcy5uZXdQcm9maWxl
UGljKXt2YXIgYz1ET00uZmluZCh0aGlzLmNvbW1lbnREb2N1bWVudCwnaW1nLmNv
bm5lY3RfY29tbWVudF93aWRnZXRfdXNlcl9waWMnKTtjLnNyYz10aGlzLm5ld1By
b2ZpbGVQaWM7ZGVsZXRlIHRoaXMubmV3UHJvZmlsZVBpYzt9aWYodWEuaWUoKSl7
dmFyIGY9RE9NLnNjcnkodGhpcy5jb21tZW50RG9jdW1lbnQsJy5jb25uZWN0X2Nv
bW1lbnRfc2hhcmVfcHJldmlld19waWMnKTtpZihmLmxlbmd0aD4wKXtmPWZbMF07
dmFyIGU9NTA7dmFyIGQ9VmVjdG9yMi5nZXRFbGVtZW50RGltZW5zaW9ucyhmKTt2
YXIgZz1lL2QueDtpZihnPDEpe0NTUy5zZXRTdHlsZShmLCd3aWR0aCcsZSk7Q1NT
LnNldFN0eWxlKGYsJ2hlaWdodCcsZC55KmcpO319fXRoaXMuc2V0dXBDb21tZW50
SG9va3ModGhpcy5jb21tZW50RG9jdW1lbnQpO3RoaXMuY29tbWVudFdpZGdldElz
RXhwYW5kZWQ9IXRoaXMuaW5saW5lVW5saWtlTGluazt2YXIgYj10aGlzLmdldENv
bW1lbnRBY3RpdmF0aW5nQ29tcG9uZW50KCk7Yi5vbm1vdXNlb3V0PXRoaXMuY29t
bWVudERvY3VtZW50LmJvZHkub25tb3VzZW91dD10aGlzLm9uQ29tbWVudE1vdXNl
T3V0LmJpbmQodGhpcyk7Yi5vbm1vdXNlb3Zlcj10aGlzLmNvbW1lbnREb2N1bWVu
dC5ib2R5Lm9ubW91c2VvdmVyPXRoaXMub25Db21tZW50TW91c2VPdmVyLmJpbmQo
dGhpcyk7dGhpcy5pbkdyYWNlUGVyaW9kPWZhbHNlO30sb25Db21tZW50TW91c2VP
dXQ6ZnVuY3Rpb24oYSl7aWYodGhpcy5tb3VzZWNsaWNrVG9EaXNtaXNzKXt0aGlz
Lm1vdXNlT3V0c2lkZT10cnVlO3JldHVybiB0cnVlO31lbHNlIHJldHVybiB0aGlz
LmhpZGVDb21tZW50V2lkZ2V0KCk7fSxvbkNvbW1lbnRNb3VzZU92ZXI6ZnVuY3Rp
b24oYSl7aWYodGhpcy5tb3VzZWNsaWNrVG9EaXNtaXNzKXt0aGlzLm1vdXNlT3V0
c2lkZT1mYWxzZTtyZXR1cm4gdHJ1ZTt9ZWxzZSByZXR1cm4gdGhpcy5zaG93Q29t
bWVudFdpZGdldCgpO30sc2V0dXBDb21tZW50SG9va3M6ZnVuY3Rpb24oYSl7dGhp
cy5wbGFjZWhvbGRlcklucHV0UmVnaW9uPURPTS5maW5kKGEsJ2Rpdi5jb25uZWN0
X2NvbW1lbnRfd2lkZ2V0X3BsYWNlaG9sZGVyX2lucHV0X3JlZ2lvbicpO3RoaXMu
cGxhY2Vob2xkZXJJbnB1dD1ET00uZmluZCh0aGlzLnBsYWNlaG9sZGVySW5wdXRS
ZWdpb24sJ2lucHV0LmNvbm5lY3RfY29tbWVudF93aWRnZXRfcGxhY2Vob2xkZXJf
aW5wdXQnKTt0aGlzLmZ1bGxJbnB1dFJlZ2lvbj1ET00uZmluZChhLCdkaXYuY29u
bmVjdF9jb21tZW50X3dpZGdldF9mdWxsX2lucHV0X3JlZ2lvbicpO3RoaXMuZnVs
bElucHV0VGV4dGFyZWE9RE9NLmZpbmQodGhpcy5mdWxsSW5wdXRSZWdpb24sJ3Rl
eHRhcmVhLmNvbm5lY3RfY29tbWVudF93aWRnZXRfZnVsbF9pbnB1dF90ZXh0YXJl
YScpO3RoaXMud2lkZ2V0QnV0dG9uUmVnaW9uPURPTS5maW5kKGEsJ2Rpdi5jb25u
ZWN0X2NvbW1lbnRfd2lkZ2V0X2J1dHRvbl9yZWdpb24nKTt0aGlzLnBvc3RUb0Zh
Y2Vib29rQnV0dG9uPURPTS5zY3J5KHRoaXMud2lkZ2V0QnV0dG9uUmVnaW9uLCcu
Y29ubmVjdF9jb21tZW50X3dpZGdldF9wb3N0X2J1dHRvbiBpbnB1dCcpO2lmKHRo
aXMucG9zdFRvRmFjZWJvb2tCdXR0b24ubGVuZ3RoPjApe3RoaXMucG9zdFRvRmFj
ZWJvb2tCdXR0b249dGhpcy5wb3N0VG9GYWNlYm9va0J1dHRvblswXTt0aGlzLnBv
c3RUb0ZhY2Vib29rQnV0dG9uLm9uY2xpY2s9dGhpcy51cGRhdGVVc2VyQ29tbWVu
dC5iaW5kKHRoaXMpO310aGlzLmNsb3NlQnV0dG9uPURPTS5zY3J5KHRoaXMud2lk
Z2V0QnV0dG9uUmVnaW9uLCcuY29ubmVjdF9jb21tZW50X3dpZGdldF9jbG9zZV9i
dXR0b24gaW5wdXQnKTtpZih0aGlzLmNsb3NlQnV0dG9uLmxlbmd0aD4wKXt0aGlz
LmNsb3NlQnV0dG9uPXRoaXMuY2xvc2VCdXR0b25bMF07dGhpcy5jbG9zZUJ1dHRv
bi5vbmNsaWNrPXRoaXMuY2xvc2VDb21tZW50V2lkZ2V0LmJpbmQodGhpcyk7dGhp
cy5zZW5kT25FbnRlcj10cnVlO310aGlzLm1vdXNlY2xpY2tUb0Rpc21pc3M9Q1NT
Lmhhc0NsYXNzKHRoaXMud2lkZ2V0QnV0dG9uUmVnaW9uLCdtb3VzZWNsaWNrdG9k
aXNtaXNzJyk7dGhpcy5pbmxpbmVVbmxpa2VMaW5rPURPTS5zY3J5KGEsJ2EuY29u
bmVjdF9jb21tZW50X3dpZGdldF91bmxpa2VfbGluaycpO2lmKHRoaXMuaW5saW5l
VW5saWtlTGluay5sZW5ndGg+MCl7dGhpcy5pbmxpbmVVbmxpa2VMaW5rPXRoaXMu
aW5saW5lVW5saWtlTGlua1swXTt0aGlzLmlubGluZVVubGlrZUxpbmsub25jbGlj
az10aGlzLmNvbm5lY3RUb05vZGVPbkNsaWNrLmJpbmQodGhpcyk7fXRoaXMuZGVm
YXVsdElucHV0VGV4dD10aGlzLnBsYWNlaG9sZGVySW5wdXQudmFsdWU7dGhpcy5w
bGFjZWhvbGRlcklucHV0Lm9uZm9jdXM9dGhpcy50cmFuc2l0aW9uVG9GdWxsSW5w
dXRNb2RlLmJpbmQodGhpcyk7dGhpcy5mdWxsSW5wdXRUZXh0YXJlYS5vbmZvY3Vz
PXRoaXMucmVtb3ZlUGxhY2Vob2xkZXJUZXh0LmJpbmQodGhpcyk7dGhpcy5mdWxs
SW5wdXRUZXh0YXJlYS5vbmJsdXI9KGZ1bmN0aW9uKGIpe3RoaXMucmVzdG9yZVBs
YWNlaG9sZGVyVGV4dCgpO2lmKHRoaXMubW91c2VjbGlja1RvRGlzbWlzcyYmdGhp
cy5tb3VzZU91dHNpZGUpcmV0dXJuIHRoaXMuaGlkZUNvbW1lbnRXaWRnZXQoKTt9
KS5iaW5kKHRoaXMpO3RoaXMucG9zdFRvRmFjZWJvb2tCdXR0b247aWYodGhpcy5p
bmxpbmVVbmxpa2VMaW5rKXRoaXMuaW5saW5lVW5saWtlTGluay5vbmNsaWNrPXRo
aXMuY29ubmVjdFRvTm9kZU9uQ2xpY2suYmluZCh0aGlzKTtpZih0aGlzLmNsb3Nl
QnV0dG9uKXRoaXMuY2xvc2VCdXR0b24ub25jbGljaz10aGlzLmNsb3NlQ29tbWVu
dFdpZGdldC5iaW5kKHRoaXMpO3RoaXMuc2VuZE9uRW50ZXI9KENTUy5oYXNDbGFz
cyh0aGlzLndpZGdldEJ1dHRvblJlZ2lvbiwnc2VuZG9uZW50ZXInKXx8dGhpcy5z
ZW5kT25FbnRlcik7aWYodGhpcy5zZW5kT25FbnRlcil7dGhpcy5mdWxsSW5wdXRU
ZXh0YXJlYS5vbmtleWRvd249KGZ1bmN0aW9uKGIpe2I9Ynx8d2luZG93LmV2ZW50
O2lmKCFiKXJldHVybiB0cnVlO2lmKHRoaXMuc2VuZE9uRW50ZXImJmIua2V5Q29k
ZT09MTMmJiEoYi5jdHJsS2V5fHxiLnNoaWZ0S2V5fHxiLmFsdEtleXx8Yi5tZXRh
S2V5KSl7dGhpcy51cGRhdGVVc2VyQ29tbWVudCgpO3JldHVybiBmYWxzZTt9aWYo
dGhpcy5kaWRSZXNldE9uS2V5ZG93bilyZXR1cm4gdHJ1ZTt0aGlzLnJlbW92ZVBs
YWNlaG9sZGVyVGV4dCgpO3RoaXMuZGlkUmVzZXRPbktleWRvd249dHJ1ZTtyZXR1
cm4gdHJ1ZTt9KS5iaW5kKHRoaXMpO3RoaXMudHJhbnNpdGlvblRvRnVsbElucHV0
TW9kZSgpO319LGdldENvbW1lbnRBY3RpdmF0aW5nQ29tcG9uZW50OmZ1bmN0aW9u
KCl7aWYodGhpcy5sYXlvdXQ9PT1FeHRlcm5hbE5vZGVDb25uZWN0V2lkZ2V0LkJP
WF9DT1VOVF9MQVlPVVR8fHRoaXMubGF5b3V0PT09RXh0ZXJuYWxOb2RlQ29ubmVj
dFdpZGdldC5CVVRUT05fQ09VTlRfTEFZT1VUKXtyZXR1cm4gdGhpcy53aWRnZXQ7
fWVsc2UgaWYodGhpcy5sYXlvdXQ9PT1FeHRlcm5hbE5vZGVDb25uZWN0V2lkZ2V0
LlNJTVBMRV9MQVlPVVQpe3JldHVybiB0aGlzLndpZGdldDt9ZWxzZSBpZih0aGlz
LmdyYXlPdXQpe3JldHVybiBET00uZmluZCh0aGlzLndpZGdldCwndGFibGUuY29u
bmVjdF93aWRnZXRfaW50ZXJhY3RpdmVfYXJlYScpO31lbHNlIHJldHVybiB0aGlz
LmNvbmZpcm1hdGlvbkNlbGw7fSxzaG93Q29tbWVudFdpZGdldDpmdW5jdGlvbihl
dmVudCl7aWYodGhpcy5vdGhlckNvbW1lbnRXaWRnZXRPcGVuKXJldHVybiBmYWxz
ZTt0aGlzLmluR3JhY2VQZXJpb2Q9dHJ1ZTt0aGlzLmtpbGxDbG9zZVRocmVhZCgp
O2lmKHRoaXMuY29tbWVudFdpZGdldE9wZW4mJiF0aGlzLmNvbW1lbnRXaWRnZXRW
aXNpYmxlKXt0aGlzLmNvbW1lbnRXaWRnZXRWaXNpYmxlPXRydWU7Q1NTLnNob3co
dGhpcy5jb21tZW50RG9jdW1lbnQuYm9keSk7VW52ZXJpZmllZFhELnNlbmQoe3R5
cGU6J3Nob3dFZGdlQ29tbWVudERpYWxvZyd9KTt9cmV0dXJuIGZhbHNlO30saGlk
ZUNvbW1lbnRXaWRnZXQ6ZnVuY3Rpb24oZXZlbnQpe2lmKHRoaXMub3RoZXJDb21t
ZW50V2lkZ2V0T3BlbilyZXR1cm4gZmFsc2U7dGhpcy5pbkdyYWNlUGVyaW9kPWZh
bHNlO2lmKHRoaXMuY29tbWVudFdpZGdldE9wZW4mJnRoaXMuY29tbWVudFdpZGdl
dFZpc2libGUpe3ZhciBhPWZ1bmN0aW9uKCl7aWYoIXRoaXMuaW5HcmFjZVBlcmlv
ZCYmdGhpcy5zaG91bGRIaWRlRXhwYW5kZWRXaWRnZXQoKSl7dGhpcy5mdWxsSW5w
dXRUZXh0YXJlYS5ibHVyKCk7dGhpcy5jb21tZW50V2lkZ2V0VmlzaWJsZT1mYWxz
ZTtpZighdGhpcy5zb2NpYWxCYXIpQ1NTLmhpZGUodGhpcy5jb21tZW50RG9jdW1l
bnQuYm9keSk7VW52ZXJpZmllZFhELnNlbmQoe3R5cGU6J2hpZGVFZGdlQ29tbWVu
dERpYWxvZyd9KTt9dGhpcy5pbkdyYWNlUGVyaW9kPWZhbHNlO3RoaXMua2lsbENs
b3NlVGhyZWFkKCk7fS5iaW5kKHRoaXMpO3RoaXMuY2xvc2VUaHJlYWRJRD1zZXRU
aW1lb3V0KGEsMTAwKTt9cmV0dXJuIGZhbHNlO30sc2hvdWxkSGlkZUV4cGFuZGVk
V2lkZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuICF0aGlzLmNvbW1lbnRXaWRnZXRJc0V4
cGFuZGVkfHx0aGlzLmZ1bGxJbnB1dFRleHRhcmVhLnZhbHVlPT09Jyd8fHRoaXMu
ZnVsbElucHV0VGV4dGFyZWEudmFsdWU9PT10aGlzLmRlZmF1bHRJbnB1dFRleHQ7
fSxraWxsQ2xvc2VUaHJlYWQ6ZnVuY3Rpb24oKXtpZih0aGlzLmNsb3NlVGhyZWFk
SUQpe2NsZWFyVGltZW91dCh0aGlzLmNsb3NlVGhyZWFkSUQpO2RlbGV0ZSB0aGlz
LmNsb3NlVGhyZWFkSUQ7fX0sdHJhbnNmZXJDU1NTdHlsZXM6ZnVuY3Rpb24oKXt2
YXIgZT1ET00uc2NyeSh3aW5kb3cuZG9jdW1lbnQsJ2xpbmsnKTt2YXIgZj1ET00u
c2NyeSh3aW5kb3cuZG9jdW1lbnQsJ3N0eWxlJyk7dmFyIGQ9RE9NLmZpbmQod2lu
ZG93LmRvY3VtZW50LCdodG1sJyk7dmFyIGg9RE9NLmZpbmQodGhpcy5jb21tZW50
RG9jdW1lbnQsJ2h0bWwnKTt2YXIgZz1ET00uZmluZCh0aGlzLmNvbW1lbnREb2N1
bWVudCwnaGVhZCcpO2Zvcih2YXIgYj0wO2I8ZS5sZW5ndGg7YisrKWlmKGVbYl0u
cmVsPT0nc3R5bGVzaGVldCcpe3ZhciBjPXRoaXMuY29tbWVudERvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2xpbmsnKTtjLnJlbD1lW2JdLnJlbDtjLmhyZWY9ZVtiXS5o
cmVmO2MudHlwZT1lW2JdLnR5cGU7Zy5hcHBlbmRDaGlsZChjKTt9Zm9yKGI9MDti
PGYubGVuZ3RoO2IrKyl7dmFyIGk9dGhpcy5jb21tZW50RG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnc3R5bGUnKTt2YXIgYT1mW2JdLmlubmVyVGV4dHx8ZltiXS50ZXh0
Q29udGVudHx8ZltiXS5pbm5lckhUTUw7aS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJ0
ZXh0L2NzcyIpO2lmKGkuc3R5bGVTaGVldCl7aWYoYS5pbmRleE9mKCdAaW1wb3J0
Jyk+MCl7dGhpcy5jcmVhdGVMaW5rc0Zyb21JbXBvcnRzKGcsYSk7fWVsc2UgaS5z
dHlsZVNoZWV0LmNzc1RleHQ9YTt9ZWxzZXt2YXIgaj10aGlzLmNvbW1lbnREb2N1
bWVudC5jcmVhdGVUZXh0Tm9kZShhKTtpLmFwcGVuZENoaWxkKGopO31nLmFwcGVu
ZENoaWxkKGkpO31oLmlkPWQuaWQ7aC5jbGFzc05hbWU9ZC5jbGFzc05hbWU7dGhp
cy5jb21tZW50RG9jdW1lbnQuYm9keS5jbGFzc05hbWU9d2luZG93LmRvY3VtZW50
LmJvZHkuY2xhc3NOYW1lO30sY3JlYXRlTGlua3NGcm9tSW1wb3J0czpmdW5jdGlv
bihmLGIpe3ZhciBlPS91cmxcKChbXildKilcKS9nbWk7dmFyIGc9W107dmFyIGQ7
d2hpbGUoKGQ9ZS5leGVjKGIpKSE9bnVsbClnLnB1c2goZFsxXSk7Zm9yKHZhciBh
PTA7YTxnLmxlbmd0aDthKyspe3ZhciBjPXRoaXMuY29tbWVudERvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2xpbmsnKTtjLnJlbD0nc3R5bGVzaGVldCc7Yy5ocmVmPWdb
YV0udHJpbSgpO2MudHlwZT0ndGV4dC9jc3MnO2YuYXBwZW5kQ2hpbGQoYyk7fX0s
dHJhbnNpdGlvblRvRnVsbElucHV0TW9kZTpmdW5jdGlvbihldmVudCl7dGhpcy5j
b21tZW50V2lkZ2V0SXNFeHBhbmRlZD10cnVlO0NTUy5oaWRlKHRoaXMucGxhY2Vo
b2xkZXJJbnB1dFJlZ2lvbik7Q1NTLnNob3codGhpcy5mdWxsSW5wdXRSZWdpb24p
O0NTUy5zaG93KHRoaXMud2lkZ2V0QnV0dG9uUmVnaW9uKTt0aGlzLmZ1bGxJbnB1
dFRleHRhcmVhLmZvY3VzKCk7aWYodGhpcy5jbG9zZUJ1dHRvbnx8dGhpcy5zZW5k
T25FbnRlcil7dGhpcy5yZXN0b3JlUGxhY2Vob2xkZXJUZXh0KCk7dmFyIGI9dGhp
cy5mdWxsSW5wdXRUZXh0YXJlYTtpZihkb2N1bWVudC5zZWxlY3Rpb24pe3ZhciBh
PWIuY3JlYXRlVGV4dFJhbmdlKCk7YS5jb2xsYXBzZSh0cnVlKTthLm1vdmVFbmQo
J2NoYXJhY3RlcicsMCk7YS5tb3ZlU3RhcnQoJ2NoYXJhY3RlcicsMCk7YS5zZWxl
Y3QoKTt9ZWxzZSBpZihiLnNldFNlbGVjdGlvblJhbmdlKXtiLmZvY3VzKCk7Yi5z
ZXRTZWxlY3Rpb25SYW5nZSgwLDApO319cmV0dXJuIGZhbHNlO30scmVtb3ZlUGxh
Y2Vob2xkZXJUZXh0OmZ1bmN0aW9uKGV2ZW50KXtpZihDU1MuaGFzQ2xhc3ModGhp
cy5mdWxsSW5wdXRUZXh0YXJlYSwnY29ubmVjdF9jb21tZW50X3dpZGdldF9kaXNh
YmxlZCcpKXtDU1MucmVtb3ZlQ2xhc3ModGhpcy5mdWxsSW5wdXRUZXh0YXJlYSwn
Y29ubmVjdF9jb21tZW50X3dpZGdldF9kaXNhYmxlZCcpO3RoaXMuZnVsbElucHV0
VGV4dGFyZWEudmFsdWU9Jyc7fXJldHVybiBmYWxzZTt9LHJlc3RvcmVQbGFjZWhv
bGRlclRleHQ6ZnVuY3Rpb24oZXZlbnQpe2lmKHRoaXMuZnVsbElucHV0VGV4dGFy
ZWEudmFsdWUudHJpbSgpPT0nJyl7dGhpcy5mdWxsSW5wdXRUZXh0YXJlYS52YWx1
ZT10aGlzLmRlZmF1bHRJbnB1dFRleHQ7Q1NTLmFkZENsYXNzKHRoaXMuZnVsbElu
cHV0VGV4dGFyZWEsJ2Nvbm5lY3RfY29tbWVudF93aWRnZXRfZGlzYWJsZWQnKTt9
cmV0dXJuIGZhbHNlO30sdXBkYXRlVXNlckNvbW1lbnQ6ZnVuY3Rpb24oZXZlbnQp
e3ZhciBhPXRoaXMuZnVsbElucHV0VGV4dGFyZWEudmFsdWUudHJpbSgpO2lmKGEh
PScnJiZhIT10aGlzLmRlZmF1bHRJbnB1dFRleHQpdGhpcy5wb3N0VXNlckNvbW1l
bnQoYSk7cmV0dXJuIGZhbHNlO30sZ2V0QWpheEVuZHBvaW50OmZ1bmN0aW9uKCl7
cmV0dXJuICcvYWpheC9jb25uZWN0L2V4dGVybmFsX25vZGVfY29ubmVjdC5waHAn
O30sZ2V0Q29tbWVudEFqYXhFbmRwb2ludDpmdW5jdGlvbigpe3JldHVybiAnL2Fq
YXgvY29ubmVjdC9leHRlcm5hbF9lZGdlX2NvbW1lbnQucGhwJzt9LGdldENvbmZp
cm1VUkw6ZnVuY3Rpb24oKXt2YXIgYT17aHJlZjp0aGlzLmV4dGVybmFsVXJsLHBh
Z2VfaWQ6dGhpcy5wYWdlSWQsbm9kZV90eXBlOnRoaXMubm9kZVR5cGUsZWRnZV90
eXBlOnRoaXMuZWRnZVR5cGUsd2lkZ2V0X2lkOnRoaXMud2lkZ2V0SUR9O2lmKHRo
aXMucmVmKWEucmVmPXRoaXMucmVmO3JldHVybiBVUkkoJy9wbHVnaW5zL2xpa2Vf
Y29uZmlybS5waHAnKS5hZGRRdWVyeURhdGEoYSkudG9TdHJpbmcoKTt9LHVwZGF0
ZUxvZ2dlZEluVXNlcjpmdW5jdGlvbihiLGEpe0V4dGVybmFsTm9kZUNvbm5lY3RX
aWRnZXQudXBkYXRlTG9nZ2VkSW5Vc2VyKGIsYSk7fSxzeW5jU2VuZFdpZGdldFdp
ZHRoOmZ1bmN0aW9uKGksYil7dmFyIGE9dGhpcy5jb21wdXRlQnV0dG9uRGltZW5z
aW9uc1dpdGhQYWRkaW5nKCkud2lkdGg7dmFyIGM9Yi5idXR0b25fd2lkdGgtYTtp
Zih0aGlzLmxheW91dD09PUV4dGVybmFsTm9kZUNvbm5lY3RXaWRnZXQuQk9YX0NP
VU5UX0xBWU9VVCYmYz4wJiZjPD01KXtDU1Muc2V0U3R5bGUodGhpcy5jb25uZWN0
QnV0dG9uLCd3aWR0aCcsKGIuYnV0dG9uX3dpZHRoLXBhcnNlSW50KENTUy5nZXRT
dHlsZSh0aGlzLmNvbm5lY3RCdXR0b24sJ3BhZGRpbmdMZWZ0JykpLXBhcnNlSW50
KENTUy5nZXRTdHlsZSh0aGlzLmNvbm5lY3RCdXR0b24sJ3BhZGRpbmdSaWdodCcp
KS1wYXJzZUludChDU1MuZ2V0U3R5bGUodGhpcy5jb25uZWN0QnV0dG9uLCdib3Jk
ZXJMZWZ0V2lkdGgnKSktcGFyc2VJbnQoQ1NTLmdldFN0eWxlKHRoaXMuY29ubmVj
dEJ1dHRvbiwnYm9yZGVyUmlnaHRXaWR0aCcpKSkrJ3B4Jyk7dGhpcy5zaXplTnVt
YmVyQ2xvdWQoKTt9aWYodGhpcy5sYXlvdXQ9PT1FeHRlcm5hbE5vZGVDb25uZWN0
V2lkZ2V0LlNUQU5EQVJEX0xBWU9VVCl7dmFyIGQ9VmVjdG9yMi5nZXRFbGVtZW50
RGltZW5zaW9ucyh0aGlzLndpZGdldCkueTtDU1Muc2V0U3R5bGUodGhpcy53aWRn
ZXQsJ2hlaWdodCcsKGQrNSkrJ3B4Jyk7dmFyIGU9dWEuZmlyZWZveCgpO3ZhciBm
PXVhLmllKCk7dmFyIGc9aW50bF9sb2NhbGVfaXNfcnRsKCk7dmFyIGg9Zz8ncmln
aHQnOidsZWZ0JztpZihmJiZmPDkpe0NTUy5zZXRTdHlsZSh0aGlzLmNvbm5lY3RC
dXR0b24sJ3Bvc2l0aW9uJywnYWJzb2x1dGUnKTtDU1Muc2V0U3R5bGUodGhpcy5j
b25uZWN0QnV0dG9uLGgsLShiLmJ1dHRvbl93aWR0aCsxMCkrJ3B4Jyk7fWVsc2V7
Q1NTLnNldFN0eWxlKHRoaXMuY29ubmVjdEJ1dHRvbiwncG9zaXRpb24nLCdmaXhl
ZCcpO0NTUy5zZXRTdHlsZSh0aGlzLmNvbm5lY3RCdXR0b24saCwnMHB4Jyk7fWlm
KGYmJnRoaXMuY29ubmVjdEJ1dHRvblNsaWRlcil7Q1NTLnNldFN0eWxlKHRoaXMu
Y29ubmVjdEJ1dHRvblNsaWRlcixoLGIuYnV0dG9uX3dpZHRoKydweCcpO2lmKGY8
PTcpdGhpcy5maXhJRUJ1dHRvbkRvdWJsZUxpbmVCdWcoKTt9Q1NTLnNldFN0eWxl
KHRoaXMuY29uZmlybWF0aW9uQ2VsbCwncG9zaXRpb24nLCdhYnNvbHV0ZScpO0NT
Uy5zZXRTdHlsZSh0aGlzLmNvbmZpcm1hdGlvbkNlbGwsaCwoYi5idXR0b25fd2lk
dGgrYSs1KSsncHgnKTtDU1Muc2V0U3R5bGUodGhpcy5jb25maXJtYXRpb25DZWxs
LCd0b3AnLCc1cHgnKTtpZih0aGlzLnNhbXBsZUNvbm5lY3Rpb25zKXtDU1Muc2V0
U3R5bGUodGhpcy5zYW1wbGVDb25uZWN0aW9ucywncG9zaXRpb24nLCdmaXhlZCcp
O0NTUy5zZXRTdHlsZSh0aGlzLnNhbXBsZUNvbm5lY3Rpb25zLGgsJzAnKTt9dGhp
cy5pbnZlcnRlZEJ1dHRvbnM9dHJ1ZTt0aGlzLnJlcG9zaXRpb25GYWNlcGlsZVZl
cnRpY2FsbHkoKTt9fSxyZXBvc2l0aW9uRmFjZXBpbGVWZXJ0aWNhbGx5OmZ1bmN0
aW9uKCl7aWYodGhpcy5pbnZlcnRlZEJ1dHRvbnMmJnRoaXMuc2FtcGxlQ29ubmVj
dGlvbnMpe3ZhciBhPVZlY3RvcjIuZ2V0RWxlbWVudERpbWVuc2lvbnModGhpcy5z
dW1tYXJ5VGV4dCkueTtDU1Muc2V0U3R5bGUodGhpcy5zYW1wbGVDb25uZWN0aW9u
cywnbWFyZ2luLXRvcCcsKDUrYSs1KSsncHgnKTt9fX0pOwp2YXIgRXh0ZXJuYWxQ
YWdlTGlrZVdpZGdldD1mdW5jdGlvbihhKXthLmVkZ2VUeXBlPSdsaWtlJzt0aGlz
LnBhcmVudC5jb25zdHJ1Y3QodGhpcyxhKTt0aGlzLnVuYWN0aW9uTGluaz1ET00u
c2NyeSh0aGlzLndpZGdldCwnc3Bhbi51bmxpa2VfbGluaycpWzBdO2lmKHRoaXMu
dW5hY3Rpb25MaW5rKUV2ZW50Lmxpc3Rlbih0aGlzLnVuYWN0aW9uTGluaywnY2xp
Y2snLHRoaXMuY29ubmVjdFRvTm9kZU9uQ2xpY2suYmluZCh0aGlzKSk7dGhpcy5o
YXNTaG93ZWRJbnNpZ2h0cz1mYWxzZTt0aGlzLnNob3dJbnNpZ2h0cygpO307RXh0
ZXJuYWxQYWdlTGlrZVdpZGdldC5leHRlbmQoJ0V4dGVybmFsTm9kZUNvbm5lY3RX
aWRnZXQnKTtFeHRlcm5hbFBhZ2VMaWtlV2lkZ2V0LkxJS0VfRURHRV9UWVBFPTA7
RXh0ZXJuYWxQYWdlTGlrZVdpZGdldC5SRUNPTU1FTkRfRURHRV9UWVBFPTE7Y29w
eV9wcm9wZXJ0aWVzKEV4dGVybmFsUGFnZUxpa2VXaWRnZXQucHJvdG90eXBlLHtn
ZXRTeW5jRW5kcG9pbnROYW1lOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5jb25uZWN0
VGV4dD90aGlzLmNvbm5lY3RUZXh0OidsaWtlJztpZihhPT1FeHRlcm5hbFBhZ2VM
aWtlV2lkZ2V0LlJFQ09NTUVORF9FREdFX1RZUEUpYT0nbGlrZSc7cmV0dXJuICdw
bGF0Zm9ybS8nK2ErJy9zeW5jJzt9LGdldENvbm5lY3Rpb25FbmRwb2ludE5hbWU6
ZnVuY3Rpb24oKXtyZXR1cm4gJ3BsYXRmb3JtL2xpa2UvY29ubmVjdGlvbic7fSxn
ZXRQbHVnaW5OYW1lOmZ1bmN0aW9uKCl7cmV0dXJuICdsaWtlJzt9LHByZXNlbnRJ
bnNpZ2h0c1BhZ2U6ZnVuY3Rpb24oKXt3aW5kb3cub3BlbignL2luc2lnaHRzLz9z
az1wb18nK3RoaXMucGFnZUlkLCdfYmxhbmsnKTt9LHNob3dJbnNpZ2h0czpmdW5j
dGlvbigpe2lmKHRoaXMuaGFzU2hvd2VkSW5zaWdodHN8fCF0aGlzLnBhZ2VJZCly
ZXR1cm47dmFyIGI9RE9NLnNjcnkodGhpcy53aWRnZXQsJ2EuY29ubmVjdF93aWRn
ZXRfaW5zaWdodHNfbGluaycpO2lmKGIpZm9yKHZhciBhPTA7YTxiLmxlbmd0aDth
Kyspe0NTUy5zaG93KGJbYV0ucGFyZW50Tm9kZSk7RXZlbnQubGlzdGVuKGJbYV0s
J2NsaWNrJyx0aGlzLnByZXNlbnRJbnNpZ2h0c1BhZ2UuYmluZCh0aGlzKSk7fXRo
aXMuaGFzU2hvd2VkSW5zaWdodHM9dHJ1ZTt9LHJlcG9zaXRpb25GYWNlcGlsZVZl
cnRpY2FsbHk6ZnVuY3Rpb24oKXt0aGlzLnNob3dJbnNpZ2h0cygpO3RoaXMucGFy
ZW50LnJlcG9zaXRpb25GYWNlcGlsZVZlcnRpY2FsbHkoKTt9fSk7CldpbmRvd0Nv
bW09e19jYWxsYmFja3M6e30sbWFrZUhhbmRsZXI6ZnVuY3Rpb24oYSxjKXtjPWN8
fCdvcGVuZXInO3ZhciBiPSdmJysoTWF0aC5yYW5kb20oKSooMTw8MzApKS50b1N0
cmluZygxNikucmVwbGFjZSgnLicsJycpO1dpbmRvd0NvbW0uX2NhbGxiYWNrc1ti
XT1hO3JldHVybiBuZXcgVVJJKCcvY29ubmVjdC93aW5kb3dfY29tbS5waHAnKS5z
ZXRRdWVyeURhdGEoe19pZDpiLF9yZWxhdGlvbjpjfSkuZ2V0UXVhbGlmaWVkVVJJ
KCkudG9TdHJpbmcoKTt9LF9yZWN2OmZ1bmN0aW9uKGIpe3ZhciBhPW5ldyBVUkko
YikuZ2V0UXVlcnlEYXRhKCk7V2luZG93Q29tbS5fY2FsbGJhY2tzW2EuX2lkXShh
KTt9fTs=
------------UAMIZgc77nT2aFBV02afBr
Content-Disposition: inline; filename=188115_200871373272067_5392054_q.jpg
Content-Type: image/jpeg; name=188115_200871373272067_5392054_q.jpg
Content-Location: http://profile.ak.fbcdn.net/hprofile-ak-snc4/188115_200871373272067_5392054_q.jpg
Content-Transfer-Encoding: Base64
/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1
c2luZyBJSkcgSlBFRyB2NjIpLCBxdWFsaXR5ID0gOTUK/9sAQwACAQEBAQECAQEB
AgICAgIEAwICAgIFBAQDBAYFBgYGBQYGBgcJCAYHCQcGBggLCAkKCgoKCgYICwwL
CgwJCgoK/9sAQwECAgICAgIFAwMFCgcGBwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK/8AAEQgAMgAyAwEiAAIRAQMRAf/E
AB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQE
AAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBka
JSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SF
hoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY
2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgME
BQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKB
CBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNU
VVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ip
qrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/a
AAwDAQACEQMRAD8A/FXxV4hmvpJLuaWSeSRsu0z/ADE1xev3scUHlfxycml1XxDF
5hcu0rfXOKwrm7lumzOST6k02rMBqqzgBQSGbAUHqa9a/ZE/ZZ8U/tP/ABQtPBVi
PsmlrcoNa166XFppcGfmmkbOSFGTtAJOOK8niHKiNjuydvv/APXr7K/4J+fs7ftL
/Fr4N6t4k8L+H/EGp/DWy8SRR63p2i3nkGW8CIy+YQ6M4ClSpGQpLH5c8i3A4r9t
wfBb4BeIPEH7MfwHtNE1vT01MXN54zina5uJCN6i1jeSNGjRckv13nZwNtfMp6mv
on/goje+HbX4xD4daZ8PNK0PUPDkcsOsT2dskV1dzsyg/aggCmRNh6Fvvnmvnjbl
yhAJPTnFOW4DKKcSFOCg4oqQPu3wJ/wRhuNZ8Z2eleKPjhYW2my3Gy5uIcCRBjqN
wI/SvadS/wCCCP7LFsjyRftXaku1cAy3dpgncBwBFk9+leQH9qP/AIJwQB3l8KeJ
JZDyMXVwOf8AvqiL9qL/AIJxMivcfDXxNO5gl8tDd3OGOxvLUjdyA23n2rzsNWxL
v7RM9vEYXL7e5K3zudvq/wDwRd/ZE0G/XTrr9ty0WZ5FUW39qWfmlmI2qq7Mkkkc
DvxX6Sf8EnfDvgr9iT9mS8+G1nrWl+KvDE3ii/vbPVjNGsrSx2tp50F2oK4O3yym
VGdzYzzj8cvgH8e/GfxW+LkCeKbdP7I/teC2s/OtG8uG2MixQIGyDvHyjk5JFfqn
YfCVvhP8HfGkf7QyT+H9Ck0iCW6Fq5tpbWUpIY5oxJu3NIu0Ed/LFele1PmseS4w
9qo9O58w/GD/AIIz/Bj47fE/xD8WvE/7Qevxaj4h1uW7m2xxeXucksAzQnJHHc9a
s+Bv+Ddb4C+K9Png0v4leNtbmt1LXM2kwwzCEe+yA44559K4SOT9lGJgqePfijen
LH7VFglycdhHgZx+lfpp+yt42+DX/BPH/gj744/a4fWdYbTfEMQCzavKr3iGWT7N
GoXaMMRLux/s1xUcRVldyR3YjD4eKXKz4Ak/4ILfsSWkjWl18fvGqSxEpIjSWYKs
OCCDb5HNFfO2rftMf8E/te1W613VfEHj57q9uHnuXXUCA0jsWY42cck0Vh9ZxF/h
OpYPL7fGfB8LNnBVSPevtb4Hf8FhvEfwT+B3h74IeHf2cfD2oNoVokA1a+vSz3IU
gkmMQnB4/vGvj7xn4bfwf4o1Dwvc6haXMmn3TwS3Fk++GYqcbkOBkHtwOK6D4B+N
/DPwt+Lmg+PPGGhtqOmaddmS/wBPRVY3ETIyFQGIXo3civUXLfVHgWinqj9OPgJ/
wUV8eftDfCO4j8U/Cfwz4bsLzxEbWVo8uTCEjklk2GNcfKWVTn7wr6E/4KJ/8Fbr
7WfCvw3sv2SvANz4kVtaW2vrnXrdYlR4FtxDEwUyFW3tIcjd8rL3yK+df2UvGnwI
/b1+LVu+lfBaXwb4Ds9SitHstGiWTU7x440kXIQ7mTeQw+YqD12gEj6S+JHw1/ZB
/ZK/Z/v/AB7rfxU0rWNe8Eahfa5pnh65vFsNUgiaKHy4pFjO55S0DbAC23OcjdW3
KrXJd2rI8H+Gn7dv/BUb4teKbDwrpH7JkMdnf6otjc6sEHkRuWGSWIBCgbj0546V
7H/wc2aL8RPCf7MXw2/ZG+E3gDW9V07RJ/8AhI/Hmv2UqfZDcpDJEV2KSdpe4Lrk
8BQOetfH9/8A8F7tR8J6RqngHwF8ItWudAu5zJ5Os+J5UdJe7KEkdUPrtPNcTrf/
AAXQ+LniPwR4n8A3Pwyt4bHxdYvbaora1NKq5QgMoYcEHsMd6zilGLRbcpNM+EzJ
Gx3M7EnqSv8A9eimyzJ5jbMbdxx9KKzsgsh85JhRieSmSfU8c0ws3lN8x5PPPWii
mDP1C/4NS5JL7/goFfWN65mgh8NTvDDKdyRsY5AWUHgHHGRXzD/wVuu7q7/bv+Is
91cySv8A2zON8jljgRpgZPpk49M0UVt9klbny9bAPEd4zh16/RqROiL2KEkepx1o
oqSyvRRRWYH/2Q==
------------UAMIZgc77nT2aFBV02afBr--