From accde6337207898c2d3be43156035c5bd043d908 Mon Sep 17 00:00:00 2001 From: Angelo Dini Date: Tue, 5 Apr 2016 14:06:18 +0200 Subject: [PATCH] fix pagetree tests --- .gitignore | 1 + cms/static/cms/css/cms.pagetree.css | 4 +- .../cms/js/dist/bundle.admin.pagetree.min.js | 3 +- cms/static/cms/sass/components/_pagetree.scss | 3 + cms/templates/admin/cms/page/tree/base.html | 2 +- cms/tests/frontend/integration/helpers/cms.js | 8 +- cms/tests/frontend/integration/pagetree.js | 79 ++++++++++--------- 7 files changed, 53 insertions(+), 47 deletions(-) diff --git a/.gitignore b/.gitignore index 2380425da65..da46b1f5e7b 100644 --- a/.gitignore +++ b/.gitignore @@ -45,5 +45,6 @@ cms/static/cms/compass_app_log.txt !cms/static/cms/js/dist cms/tests/frontend/coverage node_modules +screenshots .idea .better_test.db diff --git a/cms/static/cms/css/cms.pagetree.css b/cms/static/cms/css/cms.pagetree.css index f55d3749798..c2bae61e0a0 100644 --- a/cms/static/cms/css/cms.pagetree.css +++ b/cms/static/cms/css/cms.pagetree.css @@ -1,4 +1,4 @@ /*! * @copyright: https://github.com/divio/django-cms - */.cms-btn,.cms-btn-action,.cms-btn-caution{-webkit-appearance:none}@font-face{font-family:"django-cms-iconfont";src:url(../fonts/django-cms-iconfont.eot?v=3.2.0);src:url(../fonts/django-cms-iconfont.eot?v=3.2.0#iefix) format("eot"),url(../fonts/django-cms-iconfont.woff2?v=3.2.0) format("woff2"),url(../fonts/django-cms-iconfont.woff?v=3.2.0) format("woff"),url(../fonts/django-cms-iconfont.ttf?v=3.2.0) format("truetype"),url(../fonts/django-cms-iconfont.svg?v=3.2.0#django-cms-iconfont) format("svg");font-weight:400;font-style:normal}.cms-icon,.cms-tree-item-preview a,.cms-tree-node-success>.jstree-anchor .jstree-themeicon,.jstree-django-cms .jstree-ocl{display:inline-block;font:normal normal normal 16px/1 django-cms-iconfont;text-rendering:auto;-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.cms-icon-alias:before{content:"\E001"}.cms-icon-arrow-right:before{content:"\E002"}.cms-icon-arrow-wide:before{content:"\E003"}.cms-icon-arrow:before{content:"\E004"}.cms-icon-bin:before{content:"\E005"}.cms-icon-check-o:before{content:"\E006"}.cms-icon-check-square:before{content:"\E007"}.cms-icon-check:before{content:"\E008"}.cms-icon-close:before{content:"\E009"}.cms-icon-cogs:before{content:"\E00A"}.cms-icon-copy:before{content:"\E00B"}.cms-icon-eye:before{content:"\E00C"}.cms-icon-forbidden:before{content:"\E00D"}.cms-icon-handler:before{content:"\E00E"}.cms-icon-home:before{content:"\E00F"}.cms-icon-info:before{content:"\E010"}.cms-icon-loader:before{content:"\E011"}.cms-icon-lock:before{content:"\E012"}.cms-icon-logo:before{content:"\E013"}.cms-icon-menu:before{content:"\E014"}.cms-icon-minimize:before{content:"\E015"}.cms-icon-minus-square-o:before{content:"\E016"}.cms-icon-minus-square:before{content:"\E017"}.cms-icon-minus:before{content:"\E018"}.cms-icon-paste:before{content:"\E019"}.cms-icon-pencil:before{content:"\E01A"}.cms-icon-pin:before{content:"\E01B"}.cms-icon-plus-square-o:before{content:"\E01C"}.cms-icon-plus:before{content:"\E01D"}.cms-icon-puzzle:before{content:"\E01E"}.cms-icon-scissors:before{content:"\E01F"}.cms-icon-search:before{content:"\E020"}.cms-icon-sitemap:before{content:"\E021"}.cms-icon-squares:before{content:"\E022"}.cms-icon-window:before{content:"\E023"}.cms-btn{background-image:none;margin-bottom:0;border-radius:3px;background-color:#fff;border:1px solid #ddd}.cms-btn.focus,.cms-btn:focus,.cms-btn:hover{color:#555;background-color:#f2f2f2;border-color:#d0d0d0;text-decoration:none}.cms-btn.cms-btn-active,.cms-btn:active{color:#555;background-color:#e6e6e6;border-color:#c3c3c3;box-shadow:inset 0 3px 5px rgba(0,0,0,.125);background-image:none}.cms-btn.cms-btn-active.focus,.cms-btn.cms-btn-active:focus,.cms-btn.cms-btn-active:hover,.cms-btn:active.focus,.cms-btn:active:focus,.cms-btn:active:hover{color:#555;background-color:#d4d4d4;border-color:#9d9d9d}.cms-btn.cms-btn-disabled,.cms-btn.cms-btn-disabled.cms-btn-active,.cms-btn.cms-btn-disabled.focus,.cms-btn.cms-btn-disabled:active,.cms-btn.cms-btn-disabled:focus,.cms-btn.cms-btn-disabled:hover,.cms-btn[disabled],.cms-btn[disabled].cms-btn-active,.cms-btn[disabled].focus,.cms-btn[disabled]:active,.cms-btn[disabled]:focus,.cms-btn[disabled]:hover{background-color:rgba(255,255,255,.4);border-color:rgba(221,221,221,.4);color:#d4d4d4;cursor:not-allowed;box-shadow:none}.cms-btn.cms-btn-disabled.cms-btn-active:before,.cms-btn.cms-btn-disabled.focus:before,.cms-btn.cms-btn-disabled:active:before,.cms-btn.cms-btn-disabled:before,.cms-btn.cms-btn-disabled:focus:before,.cms-btn.cms-btn-disabled:hover:before,.cms-btn[disabled].cms-btn-active:before,.cms-btn[disabled].focus:before,.cms-btn[disabled]:active:before,.cms-btn[disabled]:before,.cms-btn[disabled]:focus:before,.cms-btn[disabled]:hover:before{color:rgba(85,85,85,.4)}.cms-btn-action{color:#fff;background-color:#0bf;border:1px solid #0bf}.cms-btn-action,.cms-btn-caution{background-image:none;margin-bottom:0;border-radius:3px}.cms-btn-action.focus,.cms-btn-action:focus,.cms-btn-action:hover{color:#fff;background-color:#00a8e6;border-color:#00a8e6;text-decoration:none}.cms-btn-action.cms-btn-active,.cms-btn-action:active{color:#fff;background-color:#0096cc;border-color:#0096cc;box-shadow:inset 0 3px 5px rgba(0,0,0,.125);background-image:none}.cms-btn-action.cms-btn-active.focus,.cms-btn-action.cms-btn-active:focus,.cms-btn-action.cms-btn-active:hover,.cms-btn-action:active.focus,.cms-btn-action:active:focus,.cms-btn-action:active:hover{color:#fff;background-color:#007ba8;border-color:#005e80}.cms-btn-action.cms-btn-disabled,.cms-btn-action.cms-btn-disabled.cms-btn-active,.cms-btn-action.cms-btn-disabled.focus,.cms-btn-action.cms-btn-disabled:active,.cms-btn-action.cms-btn-disabled:focus,.cms-btn-action.cms-btn-disabled:hover,.cms-btn-action[disabled],.cms-btn-action[disabled].cms-btn-active,.cms-btn-action[disabled].focus,.cms-btn-action[disabled]:active,.cms-btn-action[disabled]:focus,.cms-btn-action[disabled]:hover{background-color:rgba(0,187,255,.4);border-color:rgba(0,187,255,.4);color:#fff;cursor:not-allowed;box-shadow:none}.cms-btn-action.cms-btn-disabled.cms-btn-active:before,.cms-btn-action.cms-btn-disabled.focus:before,.cms-btn-action.cms-btn-disabled:active:before,.cms-btn-action.cms-btn-disabled:before,.cms-btn-action.cms-btn-disabled:focus:before,.cms-btn-action.cms-btn-disabled:hover:before,.cms-btn-action[disabled].cms-btn-active:before,.cms-btn-action[disabled].focus:before,.cms-btn-action[disabled]:active:before,.cms-btn-action[disabled]:before,.cms-btn-action[disabled]:focus:before,.cms-btn-action[disabled]:hover:before{color:rgba(255,255,255,.4)}.cms-btn-caution{color:#fff;background-color:#ff4000;border:1px solid #ff4000}.cms-btn-caution.focus,.cms-btn-caution:focus,.cms-btn-caution:hover{color:#fff;background-color:#e63900;border-color:#e63900;text-decoration:none}.cms-btn-caution.cms-btn-active,.cms-btn-caution:active{color:#fff;background-color:#c30;border-color:#c30;box-shadow:inset 0 3px 5px rgba(0,0,0,.125);background-image:none}.cms-btn-caution.cms-btn-active.focus,.cms-btn-caution.cms-btn-active:focus,.cms-btn-caution.cms-btn-active:hover,.cms-btn-caution:active.focus,.cms-btn-caution:active:focus,.cms-btn-caution:active:hover{color:#fff;background-color:#a82a00;border-color:#802000}.cms-btn-caution.cms-btn-disabled,.cms-btn-caution.cms-btn-disabled.cms-btn-active,.cms-btn-caution.cms-btn-disabled.focus,.cms-btn-caution.cms-btn-disabled:active,.cms-btn-caution.cms-btn-disabled:focus,.cms-btn-caution.cms-btn-disabled:hover,.cms-btn-caution[disabled],.cms-btn-caution[disabled].cms-btn-active,.cms-btn-caution[disabled].focus,.cms-btn-caution[disabled]:active,.cms-btn-caution[disabled]:focus,.cms-btn-caution[disabled]:hover{background-color:rgba(255,64,0,.4);border-color:rgba(255,64,0,.4);color:#fff;cursor:not-allowed;box-shadow:none}.cms-btn-caution.cms-btn-disabled.cms-btn-active:before,.cms-btn-caution.cms-btn-disabled.focus:before,.cms-btn-caution.cms-btn-disabled:active:before,.cms-btn-caution.cms-btn-disabled:before,.cms-btn-caution.cms-btn-disabled:focus:before,.cms-btn-caution.cms-btn-disabled:hover:before,.cms-btn-caution[disabled].cms-btn-active:before,.cms-btn-caution[disabled].focus:before,.cms-btn-caution[disabled]:active:before,.cms-btn-caution[disabled]:before,.cms-btn-caution[disabled]:focus:before,.cms-btn-caution[disabled]:hover:before{color:rgba(255,255,255,.4)}.cms-btn{display:inline-block;color:#fff!important;line-height:32px;height:32px;font-size:12px;padding:0 22px}.cms-btn:active,.cms-btn:focus,.cms-btn:hover{color:#fff!important}.cms-hidden,.hidden{display:none!important}.cms-clear,.cms-clear-mobile{clear:both;overflow:hidden}.jstree li{-ms-touch-action:none;touch-action:none}.cms-pagetree{box-shadow:0 0 10px rgba(0,0,0,.25);border:1px solid #ddd}.cms-pagetree-header{position:relative;z-index:101;min-height:34px;padding:15px 20px;margin:-40px 0 0;box-shadow:0 0 5px 0 rgba(0,0,0,.2);background:#f7f7f7}.cms-pagetree-header:before{content:"";position:absolute;bottom:-6px;left:0;right:0;height:5px;background-color:#fff}.cms-pagetree-header-title{padding-top:6px;margin:0 0 5px!important}.cms-pagetree-header-title span{font-weight:400}.cms-pagetree-header-search{padding:0;margin:5px 0 10px;box-shadow:none;background:0 0}@media (min-width:520px){.cms-clear-mobile{display:none}.cms-pagetree-header-title{float:left}.cms-pagetree-header-body{float:right}.cms-pagetree-header-search{float:left;margin:-3px 0}}.cms-pagetree-header-search .cms-pagetree-header-search-btn{position:relative;top:3px;outline:0;color:#fff!important;padding:8px 10px!important;margin-left:5px;border:none!important;background:#0bf!important}.cms-pagetree-header-search .cms-pagetree-header-search-btn:hover{background:#00a8e6!important}.cms-pagetree-header-search .cms-pagetree-header-search-btn:active,.cms-pagetree-header-search .cms-pagetree-header-search-btn:focus{color:#fff!important;background:#0083b3!important}.cms-pagetree-header-search .cms-pagetree-header-filter{position:relative;float:left}.cms-pagetree-header-search .cms-pagetree-header-filter input{width:168px!important;padding-right:35px!important;margin-top:2px;transition:width 200ms}@media (min-width:520px){.cms-pagetree-header-search .cms-pagetree-header-filter-active input{width:336px!important}}.cms-pagetree-header-filter-trigger{position:absolute;right:0;top:0;cursor:pointer;padding:10px;-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.cms-pagetree-header-filter-trigger:active .cms-icon,.cms-pagetree-header-filter-trigger:focus .cms-icon,.cms-pagetree-header-filter-trigger:hover .cms-icon{color:#0bf}.cms-pagetree-header-filter-trigger .cms-icon{font-size:11px;color:#666}.cms-pagetree-header-filter-container{display:none;overflow:auto;position:absolute;left:0;top:38px;width:100%;padding:5px 20px 15px;max-height:400px;box-shadow:0 0 5px 0 rgba(0,0,0,.2);box-sizing:border-box;border-radius:3px;background:#fff}.cms-pagetree-header-filter-container h3{color:#666;font-size:14px;font-weight:400;text-transform:uppercase;padding:10px 0 0}.cms-pagetree-header-filter-container li,.cms-pagetree-header-filter-container ul{list-style-type:none;padding:2px 0;margin:0}.cms-pagetree-header-filter-container li a{color:#999}.cms-pagetree-header-filter-container .selected a{color:#0bf;font-weight:700}.cms-pagetree-header-search-close{position:absolute;right:0;top:0;padding:10px}.cms-pagetree-header-search-close:active .cms-icon,.cms-pagetree-header-search-close:focus .cms-icon,.cms-pagetree-header-search-close:hover .cms-icon{color:#0bf}.cms-pagetree-header-search-close .cms-icon{font-size:12px;color:#666}.cms-pagetree-header-search-reset{float:left;font-size:90%;padding:7px 10px}.cms-pagetree-dropdown-menu{float:right;padding-left:10px;margin-left:10px}.cms-pagetree-dropdown-menu .cms-pagetree-dropdown-container{right:-1px;top:30px;min-width:205px}.cms-pagetree-dropdown-menu .cms-pagetree-dropdown-container a{padding:5px 20px}.cms-pagetree-dropdown-menu .cms-pagetree-dropdown-container .active{font-weight:700}.cms-pagetree-dropdown-menu .cms-pagetree-dropdown-container:before{margin-left:-24px;margin-top:-9px}.cms-pagetree-dropdown-menu .cms-pagetree-dropdown-trigger{float:left;color:#666!important;padding:9px 10px 4px}@media (min-width:520px){.cms-pagetree-dropdown-menu{float:left}.cms-pagetree-header-create{float:left;margin-left:20px}}.cms-pagetree-breadcrumbs{margin-bottom:-30px!important;border:none!important}.cms-pagetree-section{position:relative;z-index:11;min-height:15px;padding:15px 20px;box-shadow:0 0 5px 0 rgba(0,0,0,.2);border-top:none;border-bottom:none;background:#fff}.cms-pagetree-section h2,.cms-pagetree-section p{padding:0;margin:0;border:none}.cms-pagetree-section h2{float:left;font-weight:700}.cms-pagetree-section-nav,.cms-tree-reload{float:right}.cms-pagetree-dropdown{position:relative}.cms-pagetree-dropdown-container{display:none;position:absolute;z-index:1002;right:-2px;top:25px;padding:4px 0;min-width:180px;background:#fff;border-radius:5px;box-shadow:0 0 10px rgba(0,0,0,.25);-webkit-transform:translateZ(0);transform:translateZ(0)}.cms-pagetree-dropdown-container a{display:block;color:#666;line-height:1.5;padding:10px 20px}.cms-pagetree-dropdown-container a:active,.cms-pagetree-dropdown-container a:focus,.cms-pagetree-dropdown-container a:hover{color:#fff!important;background:#0bf}.cms-pagetree-dropdown-container .label{display:block;font-weight:400;color:#999;font-size:90%;line-height:1.5;padding:5px 20px 0}.cms-pagetree-dropdown-container li{list-style-type:none;padding:0;margin:0}.cms-pagetree-dropdown-container:before{position:absolute;z-index:-1;content:'';height:10px;margin-left:-5px;transform:rotate(45deg);background-color:#fff}.cms-pagetree-dropdown-container:before,.cms-tree-tooltip-container:before{left:100%;width:10px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg)}.cms-pagetree-dropdown-separator{padding:0;margin:4px 1px!important;line-height:1;height:1px;background:#ddd}.cms-pagetree-container{position:relative;z-index:1;margin-bottom:25px;border:1px solid #ddd;border-top:none;border-bottom:none}.cms-tree-col{height:24px}.cms-tree-item{display:inline-block}.cms-tree-tooltip-container{display:none;position:absolute;right:25px;top:-5px;z-index:100;text-align:left;border-radius:3px;background:#fff;border:1px solid #ddd}.cms-tree-tooltip-container:before{content:"";position:absolute;top:7px;z-index:1;height:10px;margin-left:-5px;transform:rotate(45deg);box-shadow:0 0 10px rgba(0,0,0,.25);background-color:#fff}.cms-tree-tooltip-container h3{position:relative;z-index:10;color:#999;font-size:12px;font-weight:400;text-transform:uppercase;padding:2px 10px;margin:0!important;border-bottom:1px solid #ddd;background:#fff}.cms-tree-tooltip-container a{display:block;padding:10px;min-width:130px;text-transform:none;border-bottom:1px solid #ddd}.cms-tree-tooltip-container a:hover,.cms-tree-tooltip-container a:link:hover{color:#0096cc!important}.cms-tree-tooltip-container a:last-child{border:none}.cms-tree-tooltip-container .cms-icon{position:relative;top:3px;left:-1px}.cms-tree-tooltip-container-open{display:block}.cms-tree-tooltip-wrapper{padding:10px}.cms-tree-item-icons{position:relative;top:5px;padding:0 3px}.cms-tree-item-icons span:before{color:#999}.cms-tree-item-icons-dark span:before{color:#454545}.cms-tree-item-preview{position:relative;top:2px;left:3px}.cms-tree-item-preview a{font-size:18px}.cms-tree-item-preview a:before{content:"\E00C";color:#454545}.cms-tree-item-preview a:hover:before,.cms-tree-item-preview-active a:before{color:#000}.cms-tree-item-preview span{display:inline-block;text-indent:-119988px;overflow:hidden;text-align:left}.cms-tree-item-lang{position:relative;top:5px}.cms-tree-item-lang .cms-tree-tooltip-container{right:22px}.cms-tree-lang-container span{box-sizing:border-box;display:inline-block;width:15px;height:15px;border-radius:100%;border:1px solid #fff;background:#fff}.cms-tree-lang-container span.empty{border-color:#999;background-color:#fff}.cms-tree-lang-container span.unpublished,.cms-tree-lang-container span.unpublishedparent{border-color:#999;background-color:#999}.cms-tree-lang-container span.published{border-color:#693;background-color:#693}.cms-tree-lang-container span.dirty{-webkit-animation:pulsate 2.5s ease-out infinite;animation:pulsate 2.5s ease-out infinite;border-color:#0bf;background-color:#0bf}@-webkit-keyframes pulsate{0%,100%{opacity:.5}50%{opacity:1}}@keyframes pulsate{0%,100%{opacity:.5}50%{opacity:1}}.cms-tree-item-menu{position:relative;top:4px}.cms-tree-item-menu .cms-icon:before{font-size:14px;color:#454545}.cms-tree-item-menu .cms-icon-check-square:before{color:#693}.cms-tree-item-info{position:relative;top:5px;left:1px}.cms-tree-item-info .cms-icon:before{font-size:18px}.cms-tree-item-info p{color:#333;padding:0;margin:0}.cms-tree-item-info strong{color:#999;font-weight:400}.cms-tree-search{float:left;margin-right:5px}.cms-tree-search label{display:none!important}.cms-tree-search select{position:relative;top:2px;width:175px!important}.cms-tree-search #toolbar form#changelist-search input[type=submit]{margin-left:0!important}.cms-tree-search #toolbar form#changelist-search #searchbar{width:175px!important}.cms-tree-filters{float:right}.cms-tree-filters .js-cms-tree-filter-trigger{position:absolute;top:0;right:0;padding-right:20px;line-height:30px;width:175px;border-bottom:1px solid #ddd}.cms-tree-filters h2{display:none}.cms-pagetree-empty{padding:15px 20px;border-top:none}.cms-pagetree-empty .addlink{padding-left:0}.cms-tree-col{line-height:16px}.jstree-django-cms{-webkit-tap-highlight-color:transparent}.jstree-django-cms .jstree-children,.jstree-django-cms .jstree-container-ul,.jstree-django-cms .jstree-leaf,.jstree-django-cms .jstree-node{list-style-type:none;padding:0;margin:0}.jstree-django-cms .jstree-grid-header,.jstree-django-cms .jstree-grid-separator{padding:0;margin:0;margin-left:0!important;border:none;background:0 0}.jstree-django-cms.jstree-grid-cell{padding:0}.jstree-django-cms .jstree-grid-cell,.jstree-django-cms .jstree-grid-column{box-sizing:border-box;overflow:visible}.jstree-grid-wrapper{box-sizing:border-box;overflow:visible!important;width:100%!important;background:#f2f2f2}.jstree-django-cms .jstree{padding-left:10px}.jstree-django-cms .jstree-grid-header{font-size:12px;font-color:#666;text-align:center;padding:3px 6px;border-bottom:1px solid #ddd;background:#fff}.jstree-django-cms .jstree-grid-column-0 .jstree-grid-header{text-align:left!important}.jstree-django-cms .jstree-children,.jstree-django-cms .jstree-container-ul{margin-left:20px}.jstree-django-cms .jstree-ocl{float:left;position:relative;left:-20px;font-size:12px;color:#999;padding:15px 10px 10px 0}.jstree-django-cms .jstree-closed>.jstree-ocl,.jstree-django-cms .jstree-open>.jstree-ocl{cursor:pointer}.jstree-django-cms .jstree-closed>.jstree-ocl:after,.jstree-django-cms .jstree-open>.jstree-ocl:after{content:"";display:block;position:absolute;right:2px;top:20px;width:8px;height:2px;background:#ddd}.jstree-django-cms .jstree-open>.jstree-ocl:before{content:"\E016"}.jstree-django-cms .jstree-closed>.jstree-ocl:before{content:"\E01C"}.jstree-django-cms .jstree-loading>.jstree-ocl:before{content:"\E011";-webkit-animation:cms-spin 2s infinite linear;animation:cms-spin 2s infinite linear}.jstree-django-cms .jstree-anchor{box-sizing:border-box;display:block;cursor:move;outline:0;color:#666;height:41px;padding:9px 25px;margin-top:-1px;border:1px solid #ddd;border-right:none;background:url(../img/pagetree/tree-li-drag.gif) -1px center no-repeat #fff}.jstree-django-cms .jstree-anchor:hover{color:#666!important}.jstree-django-cms .cms-tree-node-filtered .jstree-anchor{cursor:default}.jstree-django-cms .jstree-grid-cell{height:40px;border-bottom:1px solid #ddd;background:#fff}.jstree-django-cms .jstree-grid-cell.jstree-django-cms{height:auto;border:none;background:0 0}.jstree-django-cms .jstree-grid-cell-regular{text-align:center;padding:7px 8px;border-left:1px solid #ddd}.jstree-django-cms .jstree-grid-cell-regular-options{border-left:none;text-align:right}.jstree-django-cms .jstree-clicked,.jstree-django-cms .jstree-hovered{background-color:#fafafa}.jstree-django-cms .jstree-grid-column-1 .jstree-grid-header{text-align:right}.jstree-django-cms .jstree-grid-column-1 .jstree-grid-header a{font-size:12px;top:0}.jstree-django-cms .jstree-grid-column-1 .jstree-grid-header span{line-height:1}.jstree-django-cms .jstree-grid-column-1 .jstree-grid-header .cms-icon{font-size:12px;padding-right:5px;margin-left:5px}.jstree.jstree-loading .jstree-container-ul{margin:0}.jstree.jstree-loading .jstree-anchor{padding-top:13px;padding-left:15px;border:none;background:0 0}.jstree.jstree-loading .jstree-loading>.jstree-ocl{display:none}.cms-tree-node-success>.jstree-anchor .jstree-themeicon{content:"";position:relative;top:4px;color:#693}.cms-tree-node-success>.jstree-anchor .jstree-themeicon:before{content:"\E008"}.cms-tree-item-helpers a{position:relative;top:2px;font-size:14px}.cms-tree-item-helpers a .cms-icon{position:relative;top:1px;font-size:12px}#jstree-dnd{box-sizing:border-box;display:block;min-width:300px;height:40px;padding:9px 25px!important;margin-left:-5px;border:1px solid #ddd;background:#fff}#jstree-dnd .jstree-copy{color:#fff;padding:0 5px 2px;margin-left:5px;border-radius:3px;background:#999}#jstree-dnd .jstree-er,#jstree-dnd .jstree-ok{position:absolute;top:0;left:-5px;width:5px;height:100%;background:#ddd}#jstree-dnd .jstree-ok{background-color:#693}#jstree-dnd .jstree-er{background-color:red}#jstree-marker{position:absolute;margin:-6px 0 0;border-right:0;border-top:6px solid transparent;border-bottom:6px solid transparent;border-left:6px solid #000;width:0;height:0} -/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvX2J1dHRvbi5zY3NzIiwibWl4aW5zL19idXR0b25zLnNjc3MiLCJjb21wb25lbnRzL19pY29ub2dyYXBoeS5zY3NzIiwiY21zLnBhZ2V0cmVlLmNzcyIsImNvbXBvbmVudHMvX3BhZ2V0cmVlLnNjc3MiLCJtaXhpbnMvX2N1c3RvbS5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBR0EsU0FJQSxnQkFHQSxpQkNRSSxtQkFBQSxLQ2RKLFdBQ0ksWUFBQSxzQkFDQSxJQUFBLDhDQUNBLElBQUEsb0RBQUEsY0FBQSxnREFBQSxnQkFBQSwrQ0FBQSxlQUFBLDhDQUFBLG1CQUFBLGtFQUFBLGNBS0EsWUFBQSxJQUNBLFdBQUEsT0FHRyxVQUFBLHlCQUFBLHdEQUFBLCtCQUNILFFBQUEsYUFDQSxLQUFBLE9BQUEsT0FBQSxPQUFBLEtBQUEsRUFBQSxvQkFDQSxlQUFBLEtBQ0Esa0JBQUEsZUFBQSxjQUFBLGVBQUEsVUFBQSxlQUNBLHVCQUFBLFlBQ0Esd0JBQUEsVUFzSHFDLHVCQUVqQyxRQUFBLFFBRmlDLDZCQUVqQyxRQUFBLFFBRmlDLDRCQUVqQyxRQUFBLFFBRmlDLHVCQUVqQyxRQUFBLFFBRmlDLHFCQUVqQyxRQUFBLFFBRmlDLHlCQUVqQyxRQUFBLFFBRmlDLDhCQUVqQyxRQUFBLFFBRmlDLHVCQUVqQyxRQUFBLFFBRmlDLHVCQUVqQyxRQUFBLFFBRmlDLHNCQUVqQyxRQUFBLFFBRmlDLHNCQUVqQyxRQUFBLFFBRmlDLHFCQUVqQyxRQUFBLFFBRmlDLDJCQUVqQyxRQUFBLFFBRmlDLHlCQUVqQyxRQUFBLFFBRmlDLHNCQUVqQyxRQUFBLFFBRmlDLHNCQUVqQyxRQUFBLFFBRmlDLHdCQUVqQyxRQUFBLFFBRmlDLHNCQUVqQyxRQUFBLFFBRmlDLHNCQUVqQyxRQUFBLFFBRmlDLHNCQUVqQyxRQUFBLFFBRmlDLDBCQUVqQyxRQUFBLFFBRmlDLGdDQUVqQyxRQUFBLFFBRmlDLDhCQUVqQyxRQUFBLFFBRmlDLHVCQUVqQyxRQUFBLFFBRmlDLHVCQUVqQyxRQUFBLFFBRmlDLHdCQUVqQyxRQUFBLFFBRmlDLHFCQUVqQyxRQUFBLFFBRmlDLCtCQUVqQyxRQUFBLFFBRmlDLHNCQUVqQyxRQUFBLFFBRmlDLHdCQUVqQyxRQUFBLFFBRmlDLDBCQUVqQyxRQUFBLFFBRmlDLHdCQUVqQyxRQUFBLFFBRmlDLHlCQUVqQyxRQUFBLFFBRmlDLHlCQUVqQyxRQUFBLFFBRmlDLHdCQUVqQyxRQUFBLFFGM0lSLFNDU0ksaUJBQUEsS0FDQSxjQUFBLEVBQ0EsY0FBQSxJQUVBLGlCQUFBLEtBQ0EsT0FBQSxJQUFBLE1BQUEsS0VxSEYsZUZqSEcsZUFNQSxlQUxHLE1BQUEsS0FDQSxpQkFBQSxRQUNBLGFBQUEsUUFDQSxnQkFBQSxLRXdITix3QkYvR0csZ0JBQ0csTUFBQSxLQUNBLGlCQUFBLFFBQ0EsYUFBQSxRQUNBLFdBQUEsTUFBQSxFQUFBLElBQUEsSUFBQSxpQkFZQSxpQkFBQSxLRXlHSiw4QkFEQSw4QkFEQSw4QkFEQSxzQkFEQSxzQkY3R0ssc0JBQ0csTUFBQSxLQUNBLGlCQUFBLFFBQ0EsYUFBQSxRQWNILDBCRTRHUCx5Q0FGQSxnQ0FDQSxpQ0FGQSxnQ0FEQSxnQ0FLQSxtQkFLQSxrQ0FGQSx5QkFDQSwwQkFGQSx5QkFEQSx5QkY3R1UsaUJBQUEscUJBQ0EsYUFBQSxxQkFDQSxNQUFBLFFBQ0EsT0FBQSxZQUNBLFdBQUEsS0V3SFIsZ0RBRkEsdUNBQ0Esd0NGdEhTLGlDRW9IVCx1Q0FEQSx1Q0FVQSx5Q0FGQSxnQ0FDQSxpQ0FKQSwwQkFFQSxnQ0FEQSxnQ0Z4SFksTUFBQSxrQkQzRGhCLGdCQ1FJLE1BQUEsS0FDQSxpQkFBQSxLQUNBLE9BQUEsSUFBQSxNQUFBLEtEVkosZ0JBR0EsaUJDd0NRLGlCQUFBLEtBckNKLGNBQUEsRUFDQSxjQUFBLElFNExGLHNCRnJMRyxzQkFNQSxzQkFMRyxNQUFBLEtBQ0EsaUJBQUEsUUFDQSxhQUFBLFFBQ0EsZ0JBQUEsS0U0TE4sK0JGbkxHLHVCQUNHLE1BQUEsS0FDQSxpQkFBQSxRQUNBLGFBQUEsUUFDQSxXQUFBLE1BQUEsRUFBQSxJQUFBLElBQUEsaUJBWUEsaUJBQUEsS0U2S0oscUNBREEscUNBREEscUNBREEsNkJBREEsNkJGakxLLDZCQUNHLE1BQUEsS0FDQSxpQkFBQSxRQUNBLGFBQUEsUUFjSCxpQ0VnTFAsZ0RBRkEsdUNBQ0Esd0NBRkEsdUNBREEsdUNBS0EsMEJBS0EseUNBRkEsZ0NBQ0EsaUNBRkEsZ0NBREEsZ0NGakxVLGlCQUFBLG1CQUNBLGFBQUEsbUJBQ0EsTUFBQSxLQUNBLE9BQUEsWUFDQSxXQUFBLEtFNExSLHVEQUZBLDhDQUNBLCtDRjFMUyx3Q0V3TFQsOENBREEsOENBVUEsZ0RBRkEsdUNBQ0Esd0NBSkEsaUNBRUEsdUNBREEsdUNGNUxZLE1BQUEscUJEeERoQixpQkNLSSxNQUFBLEtBQ0EsaUJBQUEsUUFDQSxPQUFBLElBQUEsTUFBQSxRRTZQRix1QkZ6UEcsdUJBTUEsdUJBTEcsTUFBQSxLQUNBLGlCQUFBLFFBQ0EsYUFBQSxRQUNBLGdCQUFBLEtFZ1FOLGdDRnZQRyx3QkFDRyxNQUFBLEtBQ0EsaUJBQUEsS0FDQSxhQUFBLEtBQ0EsV0FBQSxNQUFBLEVBQUEsSUFBQSxJQUFBLGlCQVlBLGlCQUFBLEtFaVBKLHNDQURBLHNDQURBLHNDQURBLDhCQURBLDhCRnJQSyw4QkFDRyxNQUFBLEtBQ0EsaUJBQUEsUUFDQSxhQUFBLFFBY0gsa0NFb1BQLGlEQUZBLHdDQUNBLHlDQUZBLHdDQURBLHdDQUtBLDJCQUtBLDBDQUZBLGlDQUNBLGtDQUZBLGlDQURBLGlDRnJQVSxpQkFBQSxrQkFDQSxhQUFBLGtCQUNBLE1BQUEsS0FDQSxPQUFBLFlBQ0EsV0FBQSxLRWdRUix3REFGQSwrQ0FDQSxnREY5UFMseUNFNFBULCtDQURBLCtDQVVBLGlEQUZBLHdDQUNBLHlDQUpBLGtDQUVBLHdDQURBLHdDRmhRWSxNQUFBLHFCRzNEaEIsU0FDSSxRQUFBLGFBQ0EsTUFBQSxlQUNBLFlBQUEsS0FDQSxPQUFBLEtBQ0EsVUFBQSxLQUNBLFFBQUEsRUFBQSxLRG9VRixnQkFDQSxlQ2xVRyxlQUNHLE1BQUEsZUFLUixZRGdVQSxRQy9USSxRQUFBLGVBRUosV0FJQSxrQkFISSxNQUFBLEtBQ0EsU0FBQSxPQVlJLFdBQ0osaUJBQUEsS0FDQSxhQUFBLEtBTUosY0FDSSxXQUFBLEVBQUEsRUFBQSxLQUFBLGdCQUNBLE9BQUEsSUFBQSxNQUFBLEtBTUoscUJBQ0ksU0FBQSxTQUNBLFFBQUEsSUFDQSxXQUFBLEtBQ0EsUUFBQSxLQUFBLEtBQ0EsT0FBQSxNQUFBLEVBQUEsRUFDQSxXQUFBLEVBQUEsRUFBQSxJQUFBLEVBQUEsZUFDQSxXQUFBLFFBQ0MsNEJBQ0csUUFBQSxHQUNBLFNBQUEsU0FDQSxPQUFBLEtBQ0EsS0FBQSxFQUNBLE1BQUEsRUFDQSxPQUFBLElBQ0EsaUJBQUEsS0FJUiwyQkFDSSxZQUFBLElBQ0EsT0FBQSxFQUFBLEVBQUEsY0FJQSxnQ0FDSSxZQUFBLElBV1IsNEJBQ0ksUUFBQSxFQUNBLE9BQUEsSUFBQSxFQUFBLEtBQ0EsV0FBQSxLQUNBLGVBQ0EseUJBcEVKLGtCQUlRLFFBQUEsS0F5Q1IsMkJBSVEsTUFBQSxLQU9SLDBCQUVRLE1BQUEsTUFLUiw0QkFNUSxNQUFBLEtBQ0EsT0FBQSxLQUFBLEdBRUosNERBQ0ksU0FBQSxTQUNBLElBQUEsSUFDQSxRQUFBLEVBQ0EsTUFBQSxlQUNBLFFBQUEsSUFBQSxlQUNBLFlBQUEsSUFDQSxPQUFBLGVBQ0EsV0FBQSxlQUNDLGtFQUNHLFdBQUEsa0JBR0gsbUVENlNMLGtFQzVTUSxNQUFBLGVBQ0EsV0FBQSxrQkFHUix3REFDSSxTQUFBLFNBQ0EsTUFBQSxLQUNBLDhEQUNJLE1BQUEsZ0JBQ0EsY0FBQSxlQUNBLFdBQUEsSUFDQSxXQUFBLE1BQUEsTUFLSix5QkFEK0IscUVBRTNCLE1BQUEsaUJBSVosb0NBQ0ksU0FBQSxTQUNBLE1BQUEsRUFDQSxJQUFBLEVBQ0EsT0FBQSxRQUNBLFFBQUEsS0FDQSxrQkFBQSxlQUFBLGNBQUEsZUFBQSxVQUFBLGVEMFNGLHFEQUNBLG9EQ3hTVSxvREFDSixNQUFBLEtBRUosOENBQ0ksVUFBQSxLQUNBLE1BQUEsS0FHUixzQ0FDSSxRQUFBLEtBQ0EsU0FBQSxLQUNBLFNBQUEsU0FDQSxLQUFBLEVBQ0EsSUFBQSxLQUNBLE1BQUEsS0FDQSxRQUFBLElBQUEsS0FBQSxLQUNBLFdBQUEsTUFDQSxXQUFBLEVBQUEsRUFBQSxJQUFBLEVBQUEsZUFDQSxXQUFBLFdBQ0EsY0FBQSxJQUNBLFdBQUEsS0FDQSx5Q0FDSSxNQUFBLEtBQ0EsVUFBQSxLQUNBLFlBQUEsSUFDQSxlQUFBLFVBQ0EsUUFBQSxLQUFBLEVBQUEsRUR3U04seUNDclNFLHlDQUNJLGdCQUFBLEtBQ0EsUUFBQSxJQUFBLEVBQ0EsT0FBQSxFQUdELDJDQUNDLE1BQUEsS0FFTSxrREFDTixNQUFBLEtBQ0EsWUFBQSxJQUdSLGtDQUNJLFNBQUEsU0FDQSxNQUFBLEVBQ0EsSUFBQSxFQUNBLFFBQUEsS0RtU0YsbURBQ0Esa0RDalNVLGtEQUNKLE1BQUEsS0FFSiw0Q0FDSSxVQUFBLEtBQ0EsTUFBQSxLQUdSLGtDQUNJLE1BQUEsS0FDQSxVQUFBLElBQ0EsUUFBQSxJQUFBLEtBSUosNEJBQ0ksTUFBQSxNQUNBLGFBQUEsS0FDQSxZQUFBLEtBS0EsNkRBQ0ksTUFBQSxLQUNBLElBQUEsS0FDQSxVQUFBLE1BQ0EsK0RBQ0ksUUFBQSxJQUFBLEtBRUoscUVBQ0ksWUFBQSxJQUdILG9FQUNHLFlBQUEsTUFDQSxXQUFBLEtBSVIsMkRBQ0ksTUFBQSxLQUNBLE1BQUEsZUFDQSxRQUFBLElBQUEsS0FBQSxJQUtKLHlCQWpDSiw0QkFLUSxNQUFBLEtBMkJSLDRCQUVRLE1BQUEsS0FDQSxZQUFBLE1BS1IsMEJBQ0ksY0FBQSxnQkFDQSxPQUFBLGVBTUosc0JBQ0ksU0FBQSxTQUNBLFFBQUEsR0FDQSxXQUFBLEtBQ0EsUUFBQSxLQUFBLEtBQ0EsV0FBQSxFQUFBLEVBQUEsSUFBQSxFQUFBLGVBQ0EsV0FBQSxLQUNBLGNBQUEsS0FDQSxXQUFBLEtBRUEseUJENlFGLHdCQzVRTSxRQUFBLEVBQ0EsT0FBQSxFQUNBLE9BQUEsS0FFSix5QkFDSSxNQUFBLEtBQ0EsWUFBQSxJQUdSLDBCQStGQSxpQkFDSSxNQUFBLE1BekZKLHVCQUNJLFNBQUEsU0FHSixpQ0FFSSxRQUFBLEtBQ0EsU0FBQSxTQUNBLFFBQUEsS0FDQSxNQUFBLEtBQ0EsSUFBQSxLQUNBLFFBQUEsSUFBQSxFQUNBLFVBQUEsTUFDQSxXQUFBLEtBQ0EsY0FBQSxJQUNBLFdBQUEsRUFBQSxFQUFBLEtBQUEsZ0JBQ0Esa0JBQUEsY0FBQSxVQUFBLGNBRUEsbUNBQ0ksUUFBQSxNQUNBLE1BQUEsS0FDQSxZQUFBLElBQ0EsUUFBQSxLQUFBLEtEdVFKLDBDQUNBLHlDQ3JRSyx5Q0FDRyxNQUFBLGVBQ0EsV0FBQSxLQUlSLHdDQUNJLFFBQUEsTUFDQSxZQUFBLElBQ0EsTUFBQSxLQUNBLFVBQUEsSUFDQSxZQUFBLElBQ0EsUUFBQSxJQUFBLEtBQUEsRUFHSixvQ0FDSSxnQkFBQSxLQUNBLFFBQUEsRUFDQSxPQUFBLEVBSUgsd0NBQ0csU0FBQSxTQUNBLFFBQUEsR0FDQSxRQUFBLEdBR0EsT0FBQSxLQUNBLFlBQUEsS0FDQSxVQUFBLGNBQ0EsaUJBQUEsS0FUSCx3Q0E0REEsbUNBR0csS0FBQSxLQUdBLE1BQUEsS0FHQSxrQkFBQSxjQUFBLGNBQUEsY0F4RFIsaUNBQ0ksUUFBQSxFQUNBLE9BQUEsSUFBQSxjQUNBLFlBQUEsRUFDQSxPQUFBLElBQ0EsV0FBQSxLQUtKLHdCQUVJLFNBQUEsU0FDQSxRQUFBLEVBQ0EsY0FBQSxLQUNBLE9BQUEsSUFBQSxNQUFBLEtBQ0EsV0FBQSxLQUNBLGNBQUEsS0FHSixjQUNJLE9BQUEsS0FHSixlQUNJLFFBQUEsYUFVSiw0QkFDSSxRQUFBLEtBQ0EsU0FBQSxTQUNBLE1BQUEsS0FDQSxJQUFBLEtBQ0EsUUFBQSxJQUNBLFdBQUEsS0FDQSxjQUFBLElBQ0EsV0FBQSxLQUNBLE9BQUEsSUFBQSxNQUFBLEtBR0MsbUNBQ0csUUFBQSxHQUNBLFNBQUEsU0FFQSxJQUFBLElBQ0EsUUFBQSxFQUVBLE9BQUEsS0FDQSxZQUFBLEtBQ0EsVUFBQSxjQUNBLFdBQUEsRUFBQSxFQUFBLEtBQUEsZ0JBQ0EsaUJBQUEsS0FHSiwrQkFDSSxTQUFBLFNBQ0EsUUFBQSxHQUNBLE1BQUEsS0FDQSxVQUFBLEtBQ0EsWUFBQSxJQUNBLGVBQUEsVUFDQSxRQUFBLElBQUEsS0FDQSxPQUFBLFlBQ0EsY0FBQSxJQUFBLE1BQUEsS0FDQSxXQUFBLEtBR0osOEJBQ0ksUUFBQSxNQUNBLFFBQUEsS0FDQSxVQUFBLE1BQ0EsZUFBQSxLQUNBLGNBQUEsSUFBQSxNQUFBLEtBR00sb0NENk9WLHlDQzVPUSxNQUFBLGtCQUVILHlDQUNHLE9BQUEsS0FJUixzQ0FDSSxTQUFBLFNBQ0EsSUFBQSxJQUNBLEtBQUEsS0FHSCxpQ0FDRyxRQUFBLE1BR1IsMEJBQ0ksUUFBQSxLQU1KLHFCQUNJLFNBQUEsU0FDQSxJQUFBLElBQ0EsUUFBQSxFQUFBLElBRUksaUNBQ0EsTUFBQSxLQUdPLHNDQUNQLE1BQUEsUUFPUix1QkFDSSxTQUFBLFNBRUEsSUFBQSxJQUNBLEtBQUEsSUFFQSx5QkFHSSxVQUFBLEtGbFZpQyxnQ0FFakMsUUFBQSxRRW1WSSxNQUFBLFFBRUcsc0NBVUQsdUNBQ04sTUFBQSxLQVBKLDRCQUNJLFFBQUEsYUNqZUosWUFBQSxVQUNBLFNBQUEsT0FDQSxXQUFBLEtENGVKLG9CQUVJLFNBQUEsU0FDQSxJQUFBLElBQ0EsZ0RBQ0ksTUFBQSxLQUdpQiw4QkFDckIsV0FBQSxXQUNBLFFBQUEsYUFDQSxNQUFBLEtBQ0EsT0FBQSxLQUNBLGNBQUEsS0FFQSxPQUFBLElBQUEsTUFBQSxLQUNBLFdBQUEsS0FDQyxvQ0FDRyxhQUFBLEtBQ0EsaUJBQUEsS0FHSCwwQ0QwTUgsZ0RDek1NLGFBQUEsS0FDQSxpQkFBQSxLQUVILHdDQUNHLGFBQUEsS0FDQSxpQkFBQSxLQUVILG9DQUNHLGtCQUFBLFFBQUEsS0FBQSxTQUFBLFNBQUEsVUFBQSxRQUFBLEtBQUEsU0FBQSxTQUNBLGFBQUEsS0FDQSxpQkFBQSxLQUtSLDJCQUNJLEdBTUEsS0FMSSxRQUFBLEdBRUosSUFDSSxRQUFBLEdBTFIsbUJBQ0ksR0FNQSxLQUxJLFFBQUEsR0FFSixJQUNJLFFBQUEsR0FVUixvQkFDSSxTQUFBLFNBQ0EsSUFBQSxJQUVTLHFDQUNMLFVBQUEsS0FDQSxNQUFBLFFBRWtCLGtEQUNsQixNQUFBLEtBT1Isb0JBQ0ksU0FBQSxTQUNBLElBQUEsSUFDQSxLQUFBLElBRVMscUNBQ0wsVUFBQSxLQUdKLHNCQUNJLE1BQUEsS0FDQSxRQUFBLEVBQ0EsT0FBQSxFQUVKLDJCQUNJLE1BQUEsS0FDQSxZQUFBLElBT1IsaUJBQ0ksTUFBQSxLQUNBLGFBQUEsSUFDQSx1QkFDSSxRQUFBLGVBRUosd0JBQ0ksU0FBQSxTQUNBLElBQUEsSUFDQSxNQUFBLGdCQUcrQyxvRUFDL0MsWUFBQSxZQUU0Qiw0REFDNUIsTUFBQSxnQkFHUixrQkFDSSxNQUFBLE1BQ0EsOENBQ0ksU0FBQSxTQUNBLElBQUEsRUFDQSxNQUFBLEVBQ0EsY0FBQSxLQUNBLFlBQUEsS0FDQSxNQUFBLE1BQ0EsY0FBQSxJQUFBLE1BQUEsS0FFSixxQkFDSSxRQUFBLEtBUVIsb0JBQ0ksUUFBQSxLQUFBLEtBQ0EsV0FBQSxLQUNBLDZCQUNJLGFBQUEsRUFLUixjQUNJLFlBQUEsS0FTSixtQkFrQ0ksNEJBQUEsWURrSUYsb0NDOUpFLHdDRCtKRixnQ0FDQSxnQ0MvSk0sZ0JBQUEsS0FDQSxRQUFBLEVBQ0EsT0FBQSxFQUtKLHVDRDZKRiwwQ0M1Sk0sUUFBQSxFQUNBLE9BQUEsRUFFQSxZQUFBLFlBQ0EsT0FBQSxLQUNBLGVBRUgsb0NBQ0csUUFBQSxFRDZKTixxQ0N4SkUsdUNBQ0ksV0FBQSxXQUNBLFNBQUEsUUFRUixxQkFDSSxXQUFBLFdBQ0EsU0FBQSxrQkFDQSxNQUFBLGVBUUEsV0FBQSxRQUtBLDJCQUNJLGFBQUEsS0FHSix1Q0FDSSxVQUFBLEtBQ0EsV0FBQSxLQUNBLFdBQUEsT0FDQSxRQUFBLElBQUEsSUFDQSxjQUFBLElBQUEsTUFBQSxLQUNBLFdBQUEsS0FHa0IsNkRBQ2xCLFdBQUEsZUFRSixvQ0FIQSx3Q0FDSSxZQUFBLEtBS0osK0JBQ0ksTUFBQSxLQUNBLFNBQUEsU0FDQSxLQUFBLE1BQ0EsVUFBQSxLQUNBLE1BQUEsS0FDQSxRQUFBLEtBQUEsS0FBQSxLQUFBLEVEd0lSLDhDQ3BJcUIsNENBQ2IsT0FBQSxRRHNJTixvRENySU8sa0RBQ0csUUFBQSxHQUNBLFFBQUEsTUFDQSxTQUFBLFNBQ0EsTUFBQSxJQUNBLElBQUEsS0FDQSxNQUFBLElBQ0EsT0FBQSxJQUNBLFdBQUEsS0ZsbUI2QixtREFFakMsUUFBQSxRQUZpQyxxREFFakMsUUFBQSxRQUZpQyxzREFFakMsUUFBQSxRRTRtQkksa0JBQUEsU0FBQSxHQUFBLFNBQUEsT0FBQSxVQUFBLFNBQUEsR0FBQSxTQUFBLE9BT1Isa0NBQ0ksV0FBQSxXQUNBLFFBQUEsTUFDQSxPQUFBLEtBQ0EsUUFBQSxFQUNBLE1BQUEsS0FHQSxPQUFBLEtBQ0EsUUFBQSxJQUFBLEtBQ0EsV0FBQSxLQUNBLE9BQUEsSUFBQSxNQUFBLEtBQ0EsYUFBQSxLQUNBLFdBQUEsc0NBQUEsS0FBQSxPQUFBLFVBQUEsS0FFQyx3Q0FDRyxNQUFBLGVBR2dCLDBEQUNwQixPQUFBLFFBR0oscUNBQ0ksT0FBQSxLQUNBLGNBQUEsSUFBQSxNQUFBLEtBQ0EsV0FBQSxLQUVDLHVEQUNHLE9BQUEsS0FDQSxPQUFBLEtBQ0EsZUFHUiw2Q0FDSSxXQUFBLE9BQ0EsUUFBQSxJQUFBLElBQ0EsWUFBQSxJQUFBLE1BQUEsS0FFSixxREFDSSxZQUFBLEtBQ0EsV0FBQSxNRDZIUixtQ0N6SEksbUNBQ0ksaUJBQUEsUUFJa0IsNkRBQ2xCLFdBQUEsTUFDQSwrREFDSSxVQUFBLEtBQ0EsSUFBQSxFQUVKLGtFQUNJLFlBQUEsRUFHSix1RUFDSSxVQUFBLEtBQ0EsY0FBQSxJQUNBLFlBQUEsSUFRUiw0Q0FDSSxPQUFBLEVBRUosc0NBQ0ksWUFBQSxLQUNBLGFBQUEsS0FDQSxPQUFBLEtBQ0EsZUFHYyxtREFDZCxRQUFBLEtBUWEsd0RBQ2IsUUFBQSxHQUNBLFNBQUEsU0FDQSxJQUFBLElBQ0EsTUFBQSxLRm50QmlDLCtEQUVqQyxRQUFBLFFFdXRCZSx5QkFDbkIsU0FBQSxTQUNBLElBQUEsSUFDQSxVQUFBLEtBQ0EsbUNBQ0ksU0FBQSxTQUNBLElBQUEsSUFDQSxVQUFBLEtBTVIsWUFDSSxXQUFBLFdBQ0EsUUFBQSxNQUNBLFVBQUEsTUFDQSxPQUFBLEtBQ0EsUUFBQSxJQUFBLGVBQ0EsWUFBQSxLQUNBLE9BQUEsSUFBQSxNQUFBLEtBQ0EsV0FBQSxLQUVBLHlCQUNJLE1BQUEsS0FDQSxRQUFBLEVBQUEsSUFBQSxJQUNBLFlBQUEsSUFDQSxjQUFBLElBQ0EsV0FBQSxLRGtHTix1QkM5RkUsdUJBQ0ksU0FBQSxTQUNBLElBQUEsRUFDQSxLQUFBLEtBQ0EsTUFBQSxJQUNBLE9BQUEsS0FDQSxXQUFBLEtBRUosdUJBQ0ksaUJBQUEsS0FFSix1QkFDSSxpQkFBQSxJQUlSLGVBQ0ksU0FBQSxTQUNBLE9BQUEsS0FBQSxFQUFBLEVBQ0EsYUFBQSxFQUNBLFdBQUEsSUFBQSxNQUFBLFlBQ0EsY0FBQSxJQUFBLE1BQUEsWUFDQSxZQUFBLElBQUEsTUFBQSxLQUNBLE1BQUEsRUFDQSxPQUFBIiwiZmlsZSI6ImNtcy5wYWdldHJlZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuLy8gQlVUVE9OU1xuXG4uY21zLWJ0biB7XG4gICAgQGluY2x1ZGUgYnV0dG9uLXZhcmlhbnQoJGJ0bi1kZWZhdWx0LWNvbG9yLCAkYnRuLWRlZmF1bHQtYmdjb2xvciwgJGJ0bi1kZWZhdWx0LWJvcmRlciwgZmFsc2UpO1xufVxuXG4uY21zLWJ0bi1hY3Rpb24ge1xuICAgIEBpbmNsdWRlIGJ1dHRvbi12YXJpYW50KCRidG4tYWN0aW9uLWNvbG9yLCAkYnRuLWFjdGlvbi1iZ2NvbG9yLCAkYnRuLWFjdGlvbi1ib3JkZXIsIGZhbHNlKTtcbn1cbi5jbXMtYnRuLWNhdXRpb24ge1xuICAgIEBpbmNsdWRlIGJ1dHRvbi12YXJpYW50KCRidG4tY2F1dGlvbi1jb2xvciwgJGJ0bi1jYXV0aW9uLWJnY29sb3IsICRidG4tY2F1dGlvbi1ib3JkZXIsIGZhbHNlKTtcbn1cbiIsIi8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4vLyBCVVRUT05TXG5cbi8vIHRha2VuIGZyb20gYm9vdHN0cmFwIHdpdGggYWRhcHRhdGlvbnNcbkBmdW5jdGlvbiBpbXBvcnRhbnQoJGltcG9ydGFudCkge1xuICAgIEBpZigkaW1wb3J0YW50ID09IHRydWUpIHtcbiAgICAgICAgQHJldHVybiAhaW1wb3J0YW50O1xuICAgIH0gQGVsc2Uge1xuICAgICAgICBAcmV0dXJuIHVucXVvdGUoJycpO1xuICAgIH1cbn1cbkBtaXhpbiBidXR0b24tdmFyaWFudCgkY29sb3IsICRiYWNrZ3JvdW5kLCAkYm9yZGVyLCAkaW1wb3J0YW50OiBmYWxzZSkge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmUgaW1wb3J0YW50KCRpbXBvcnRhbnQpO1xuICAgIG1hcmdpbi1ib3R0b206IDA7IC8vIEZvciBpbnB1dC5idG5cbiAgICBib3JkZXItcmFkaXVzOiAkYnRuLWJvcmRlci1yYWRpdXMtYmFzZSBpbXBvcnRhbnQoJGltcG9ydGFudCk7XG4gICAgY29sb3I6ICRjb2xvciBpbXBvcnRhbnQoJGltcG9ydGFudCk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQgaW1wb3J0YW50KCRpbXBvcnRhbnQpO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXIgaW1wb3J0YW50KCRpbXBvcnRhbnQpO1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcblxuICAgICY6Zm9jdXMsXG4gICAgJi5mb2N1cyB7XG4gICAgICAgIGNvbG9yOiAkY29sb3IgaW1wb3J0YW50KCRpbXBvcnRhbnQpO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oJGJhY2tncm91bmQsIDUlKSBpbXBvcnRhbnQoJGltcG9ydGFudCk7XG4gICAgICAgIGJvcmRlci1jb2xvcjogZGFya2VuKCRib3JkZXIsIDUlKSBpbXBvcnRhbnQoJGltcG9ydGFudCk7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZSBpbXBvcnRhbnQoJGltcG9ydGFudCk7XG4gICAgfVxuICAgICY6aG92ZXIge1xuICAgICAgICBjb2xvcjogJGNvbG9yIGltcG9ydGFudCgkaW1wb3J0YW50KTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogZGFya2VuKCRiYWNrZ3JvdW5kLCA1JSkgaW1wb3J0YW50KCRpbXBvcnRhbnQpO1xuICAgICAgICBib3JkZXItY29sb3I6IGRhcmtlbigkYm9yZGVyLCA1JSkgaW1wb3J0YW50KCRpbXBvcnRhbnQpO1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmUgaW1wb3J0YW50KCRpbXBvcnRhbnQpO1xuICAgIH1cbiAgICAmOmFjdGl2ZSxcbiAgICAmLmNtcy1idG4tYWN0aXZlIHtcbiAgICAgICAgY29sb3I6ICRjb2xvciBpbXBvcnRhbnQoJGltcG9ydGFudCk7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IGRhcmtlbigkYmFja2dyb3VuZCwgMTAlKSBpbXBvcnRhbnQoJGltcG9ydGFudCk7XG4gICAgICAgIGJvcmRlci1jb2xvcjogZGFya2VuKCRib3JkZXIsIDEwJSkgaW1wb3J0YW50KCRpbXBvcnRhbnQpO1xuICAgICAgICBib3gtc2hhZG93OiAkYnRuLWFjdGl2ZS1zaGFkb3cgaW1wb3J0YW50KCRpbXBvcnRhbnQpO1xuXG4gICAgICAgICY6aG92ZXIsXG4gICAgICAgICY6Zm9jdXMsXG4gICAgICAgICYuZm9jdXMge1xuICAgICAgICAgICAgY29sb3I6ICRjb2xvciBpbXBvcnRhbnQoJGltcG9ydGFudCk7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oJGJhY2tncm91bmQsIDE3JSkgaW1wb3J0YW50KCRpbXBvcnRhbnQpO1xuICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiBkYXJrZW4oJGJvcmRlciwgMjUlKSBpbXBvcnRhbnQoJGltcG9ydGFudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgJjphY3RpdmUsXG4gICAgJi5jbXMtYnRuLWFjdGl2ZSB7XG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmUgaW1wb3J0YW50KCRpbXBvcnRhbnQpO1xuICAgIH1cbiAgICAmLmNtcy1idG4tZGlzYWJsZWQsXG4gICAgJltkaXNhYmxlZF0ge1xuICAgICAgICAmLFxuICAgICAgICAmOmhvdmVyLFxuICAgICAgICAmOmZvY3VzLFxuICAgICAgICAmLmZvY3VzLFxuICAgICAgICAmOmFjdGl2ZSxcbiAgICAgICAgJi5jbXMtYnRuLWFjdGl2ZSB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCRiYWNrZ3JvdW5kLCAwLjQpIGltcG9ydGFudCgkaW1wb3J0YW50KTtcbiAgICAgICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgkYm9yZGVyLCAwLjQpIGltcG9ydGFudCgkaW1wb3J0YW50KTtcbiAgICAgICAgICAgIGNvbG9yOiBsaWdodGVuKCRjb2xvciwgNTAlKSBpbXBvcnRhbnQoMSk7XG4gICAgICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICAgICAgICAgICAgYm94LXNoYWRvdzogbm9uZSBpbXBvcnRhbnQoJGltcG9ydGFudCk7XG4gICAgICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgICAgICAgY29sb3I6IHJnYmEoJGNvbG9yLCAwLjQpIGltcG9ydGFudCgxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4vLyBJQ09OT0dSQVBIWVxuXG4vLyBkZWZhdWx0IGZvbnQgZmlsZSBnZW5lcmF0ZWQgYnkgZ3VscFxuQGZvbnQtZmFjZSB7XG4gICAgZm9udC1mYW1pbHk6IFwiZGphbmdvLWNtcy1pY29uZm9udFwiO1xuICAgIHNyYzogdXJsKFwiLi4vZm9udHMvZGphbmdvLWNtcy1pY29uZm9udC5lb3Q/dj0zLjIuMFwiKTtcbiAgICBzcmM6IHVybChcIi4uL2ZvbnRzL2RqYW5nby1jbXMtaWNvbmZvbnQuZW90P3Y9My4yLjAjaWVmaXhcIikgZm9ybWF0KFwiZW90XCIpLFxuICAgICAgICAgdXJsKFwiLi4vZm9udHMvZGphbmdvLWNtcy1pY29uZm9udC53b2ZmMj92PTMuMi4wXCIpIGZvcm1hdChcIndvZmYyXCIpLFxuICAgICAgICAgdXJsKFwiLi4vZm9udHMvZGphbmdvLWNtcy1pY29uZm9udC53b2ZmP3Y9My4yLjBcIikgZm9ybWF0KFwid29mZlwiKSxcbiAgICAgICAgIHVybChcIi4uL2ZvbnRzL2RqYW5nby1jbXMtaWNvbmZvbnQudHRmP3Y9My4yLjBcIikgZm9ybWF0KFwidHJ1ZXR5cGVcIiksXG4gICAgICAgICB1cmwoXCIuLi9mb250cy9kamFuZ28tY21zLWljb25mb250LnN2Zz92PTMuMi4wI2RqYW5nby1jbXMtaWNvbmZvbnRcIikgZm9ybWF0KFwic3ZnXCIpO1xuICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xufVxuXG4laWNvbiB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGZvbnQ6IG5vcm1hbCBub3JtYWwgbm9ybWFsIDE2cHgvMSBkamFuZ28tY21zLWljb25mb250O1xuICAgIHRleHQtcmVuZGVyaW5nOiBhdXRvO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApO1xuICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG59XG5cbkBmdW5jdGlvbiBpY29uLWNoYXIoJGZpbGVuYW1lKSB7XG4gICAgJGNoYXI6IFwiXCI7XG5cbiAgICBAaWYgJGZpbGVuYW1lID09IGFsaWFzIHtcbiAgICAgICAgJGNoYXI6IFwiRTAwMVwiO1xuICAgIH1cbiAgICBAaWYgJGZpbGVuYW1lID09IGFycm93LXJpZ2h0IHtcbiAgICAgICAgJGNoYXI6IFwiRTAwMlwiO1xuICAgIH1cbiAgICBAaWYgJGZpbGVuYW1lID09IGFycm93LXdpZGUge1xuICAgICAgICAkY2hhcjogXCJFMDAzXCI7XG4gICAgfVxuICAgIEBpZiAkZmlsZW5hbWUgPT0gYXJyb3cge1xuICAgICAgICAkY2hhcjogXCJFMDA0XCI7XG4gICAgfVxuICAgIEBpZiAkZmlsZW5hbWUgPT0gYmluIHtcbiAgICAgICAgJGNoYXI6IFwiRTAwNVwiO1xuICAgIH1cbiAgICBAaWYgJGZpbGVuYW1lID09IGNoZWNrLW8ge1xuICAgICAgICAkY2hhcjogXCJFMDA2XCI7XG4gICAgfVxuICAgIEBpZiAkZmlsZW5hbWUgPT0gY2hlY2stc3F1YXJlIHtcbiAgICAgICAgJGNoYXI6IFwiRTAwN1wiO1xuICAgIH1cbiAgICBAaWYgJGZpbGVuYW1lID09IGNoZWNrIHtcbiAgICAgICAgJGNoYXI6IFwiRTAwOFwiO1xuICAgIH1cbiAgICBAaWYgJGZpbGVuYW1lID09IGNsb3NlIHtcbiAgICAgICAgJGNoYXI6IFwiRTAwOVwiO1xuICAgIH1cbiAgICBAaWYgJGZpbGVuYW1lID09IGNvZ3Mge1xuICAgICAgICAkY2hhcjogXCJFMDBBXCI7XG4gICAgfVxuICAgIEBpZiAkZmlsZW5hbWUgPT0gY29weSB7XG4gICAgICAgICRjaGFyOiBcIkUwMEJcIjtcbiAgICB9XG4gICAgQGlmICRmaWxlbmFtZSA9PSBleWUge1xuICAgICAgICAkY2hhcjogXCJFMDBDXCI7XG4gICAgfVxuICAgIEBpZiAkZmlsZW5hbWUgPT0gZm9yYmlkZGVuIHtcbiAgICAgICAgJGNoYXI6IFwiRTAwRFwiO1xuICAgIH1cbiAgICBAaWYgJGZpbGVuYW1lID09IGhhbmRsZXIge1xuICAgICAgICAkY2hhcjogXCJFMDBFXCI7XG4gICAgfVxuICAgIEBpZiAkZmlsZW5hbWUgPT0gaG9tZSB7XG4gICAgICAgICRjaGFyOiBcIkUwMEZcIjtcbiAgICB9XG4gICAgQGlmICRmaWxlbmFtZSA9PSBpbmZvIHtcbiAgICAgICAgJGNoYXI6IFwiRTAxMFwiO1xuICAgIH1cbiAgICBAaWYgJGZpbGVuYW1lID09IGxvYWRlciB7XG4gICAgICAgICRjaGFyOiBcIkUwMTFcIjtcbiAgICB9XG4gICAgQGlmICRmaWxlbmFtZSA9PSBsb2NrIHtcbiAgICAgICAgJGNoYXI6IFwiRTAxMlwiO1xuICAgIH1cbiAgICBAaWYgJGZpbGVuYW1lID09IGxvZ28ge1xuICAgICAgICAkY2hhcjogXCJFMDEzXCI7XG4gICAgfVxuICAgIEBpZiAkZmlsZW5hbWUgPT0gbWVudSB7XG4gICAgICAgICRjaGFyOiBcIkUwMTRcIjtcbiAgICB9XG4gICAgQGlmICRmaWxlbmFtZSA9PSBtaW5pbWl6ZSB7XG4gICAgICAgICRjaGFyOiBcIkUwMTVcIjtcbiAgICB9XG4gICAgQGlmICRmaWxlbmFtZSA9PSBtaW51cy1zcXVhcmUtbyB7XG4gICAgICAgICRjaGFyOiBcIkUwMTZcIjtcbiAgICB9XG4gICAgQGlmICRmaWxlbmFtZSA9PSBtaW51cy1zcXVhcmUge1xuICAgICAgICAkY2hhcjogXCJFMDE3XCI7XG4gICAgfVxuICAgIEBpZiAkZmlsZW5hbWUgPT0gbWludXMge1xuICAgICAgICAkY2hhcjogXCJFMDE4XCI7XG4gICAgfVxuICAgIEBpZiAkZmlsZW5hbWUgPT0gcGFzdGUge1xuICAgICAgICAkY2hhcjogXCJFMDE5XCI7XG4gICAgfVxuICAgIEBpZiAkZmlsZW5hbWUgPT0gcGVuY2lsIHtcbiAgICAgICAgJGNoYXI6IFwiRTAxQVwiO1xuICAgIH1cbiAgICBAaWYgJGZpbGVuYW1lID09IHBpbiB7XG4gICAgICAgICRjaGFyOiBcIkUwMUJcIjtcbiAgICB9XG4gICAgQGlmICRmaWxlbmFtZSA9PSBwbHVzLXNxdWFyZS1vIHtcbiAgICAgICAgJGNoYXI6IFwiRTAxQ1wiO1xuICAgIH1cbiAgICBAaWYgJGZpbGVuYW1lID09IHBsdXMge1xuICAgICAgICAkY2hhcjogXCJFMDFEXCI7XG4gICAgfVxuICAgIEBpZiAkZmlsZW5hbWUgPT0gcHV6emxlIHtcbiAgICAgICAgJGNoYXI6IFwiRTAxRVwiO1xuICAgIH1cbiAgICBAaWYgJGZpbGVuYW1lID09IHNjaXNzb3JzIHtcbiAgICAgICAgJGNoYXI6IFwiRTAxRlwiO1xuICAgIH1cbiAgICBAaWYgJGZpbGVuYW1lID09IHNlYXJjaCB7XG4gICAgICAgICRjaGFyOiBcIkUwMjBcIjtcbiAgICB9XG4gICAgQGlmICRmaWxlbmFtZSA9PSBzaXRlbWFwIHtcbiAgICAgICAgJGNoYXI6IFwiRTAyMVwiO1xuICAgIH1cbiAgICBAaWYgJGZpbGVuYW1lID09IHNxdWFyZXMge1xuICAgICAgICAkY2hhcjogXCJFMDIyXCI7XG4gICAgfVxuICAgIEBpZiAkZmlsZW5hbWUgPT0gd2luZG93IHtcbiAgICAgICAgJGNoYXI6IFwiRTAyM1wiO1xuICAgIH1cblxuICAgIEByZXR1cm4gJGNoYXI7XG59XG5cbi5jbXMtaWNvbiB7XG4gICAgQGV4dGVuZCAlaWNvbjtcbn1cbkBtaXhpbiBpY29uKCRmaWxlbmFtZSwgJGluc2VydDogYmVmb3JlKSB7XG4gICAgJjojeyRpbnNlcnR9IHtcbiAgICAgICAgY29udGVudDogI3tcIlxcXCJcXFxcXCJ9I3tpY29uLWNoYXIoJGZpbGVuYW1lKSArIFwiXFxcIlwifTtcbiAgICB9XG59XG5cbi8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4vLyBJQ09OUzpzdGFydFxuLy8gdXNlIHVuaWNvZGUgY2hhcmFjdGVycyBmb3IgYWNjZXNzaWJpbGl0eSByZWFzb25zIGFuZCB1c2UgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbi8vIGZvciBkZWNvcmF0aXZlIGljb25zXG4vLyBET0NTOiBodHRwOi8vZmlsYW1lbnRncm91cC5jb20vbGFiL2J1bGxldHByb29mX2ljb25fZm9udHMuaHRtbFxuXG5cbi5jbXMtaWNvbi1hbGlhcyB7XG4gICAgQGluY2x1ZGUgaWNvbihhbGlhcyk7XG59XG5cbi5jbXMtaWNvbi1hcnJvdy1yaWdodCB7XG4gICAgQGluY2x1ZGUgaWNvbihhcnJvdy1yaWdodCk7XG59XG5cbi5jbXMtaWNvbi1hcnJvdy13aWRlIHtcbiAgICBAaW5jbHVkZSBpY29uKGFycm93LXdpZGUpO1xufVxuXG4uY21zLWljb24tYXJyb3cge1xuICAgIEBpbmNsdWRlIGljb24oYXJyb3cpO1xufVxuXG4uY21zLWljb24tYmluIHtcbiAgICBAaW5jbHVkZSBpY29uKGJpbik7XG59XG5cbi5jbXMtaWNvbi1jaGVjay1vIHtcbiAgICBAaW5jbHVkZSBpY29uKGNoZWNrLW8pO1xufVxuXG4uY21zLWljb24tY2hlY2stc3F1YXJlIHtcbiAgICBAaW5jbHVkZSBpY29uKGNoZWNrLXNxdWFyZSk7XG59XG5cbi5jbXMtaWNvbi1jaGVjayB7XG4gICAgQGluY2x1ZGUgaWNvbihjaGVjayk7XG59XG5cbi5jbXMtaWNvbi1jbG9zZSB7XG4gICAgQGluY2x1ZGUgaWNvbihjbG9zZSk7XG59XG5cbi5jbXMtaWNvbi1jb2dzIHtcbiAgICBAaW5jbHVkZSBpY29uKGNvZ3MpO1xufVxuXG4uY21zLWljb24tY29weSB7XG4gICAgQGluY2x1ZGUgaWNvbihjb3B5KTtcbn1cblxuLmNtcy1pY29uLWV5ZSB7XG4gICAgQGluY2x1ZGUgaWNvbihleWUpO1xufVxuXG4uY21zLWljb24tZm9yYmlkZGVuIHtcbiAgICBAaW5jbHVkZSBpY29uKGZvcmJpZGRlbik7XG59XG5cbi5jbXMtaWNvbi1oYW5kbGVyIHtcbiAgICBAaW5jbHVkZSBpY29uKGhhbmRsZXIpO1xufVxuXG4uY21zLWljb24taG9tZSB7XG4gICAgQGluY2x1ZGUgaWNvbihob21lKTtcbn1cblxuLmNtcy1pY29uLWluZm8ge1xuICAgIEBpbmNsdWRlIGljb24oaW5mbyk7XG59XG5cbi5jbXMtaWNvbi1sb2FkZXIge1xuICAgIEBpbmNsdWRlIGljb24obG9hZGVyKTtcbn1cblxuLmNtcy1pY29uLWxvY2sge1xuICAgIEBpbmNsdWRlIGljb24obG9jayk7XG59XG5cbi5jbXMtaWNvbi1sb2dvIHtcbiAgICBAaW5jbHVkZSBpY29uKGxvZ28pO1xufVxuXG4uY21zLWljb24tbWVudSB7XG4gICAgQGluY2x1ZGUgaWNvbihtZW51KTtcbn1cblxuLmNtcy1pY29uLW1pbmltaXplIHtcbiAgICBAaW5jbHVkZSBpY29uKG1pbmltaXplKTtcbn1cblxuLmNtcy1pY29uLW1pbnVzLXNxdWFyZS1vIHtcbiAgICBAaW5jbHVkZSBpY29uKG1pbnVzLXNxdWFyZS1vKTtcbn1cblxuLmNtcy1pY29uLW1pbnVzLXNxdWFyZSB7XG4gICAgQGluY2x1ZGUgaWNvbihtaW51cy1zcXVhcmUpO1xufVxuXG4uY21zLWljb24tbWludXMge1xuICAgIEBpbmNsdWRlIGljb24obWludXMpO1xufVxuXG4uY21zLWljb24tcGFzdGUge1xuICAgIEBpbmNsdWRlIGljb24ocGFzdGUpO1xufVxuXG4uY21zLWljb24tcGVuY2lsIHtcbiAgICBAaW5jbHVkZSBpY29uKHBlbmNpbCk7XG59XG5cbi5jbXMtaWNvbi1waW4ge1xuICAgIEBpbmNsdWRlIGljb24ocGluKTtcbn1cblxuLmNtcy1pY29uLXBsdXMtc3F1YXJlLW8ge1xuICAgIEBpbmNsdWRlIGljb24ocGx1cy1zcXVhcmUtbyk7XG59XG5cbi5jbXMtaWNvbi1wbHVzIHtcbiAgICBAaW5jbHVkZSBpY29uKHBsdXMpO1xufVxuXG4uY21zLWljb24tcHV6emxlIHtcbiAgICBAaW5jbHVkZSBpY29uKHB1enpsZSk7XG59XG5cbi5jbXMtaWNvbi1zY2lzc29ycyB7XG4gICAgQGluY2x1ZGUgaWNvbihzY2lzc29ycyk7XG59XG5cbi5jbXMtaWNvbi1zZWFyY2gge1xuICAgIEBpbmNsdWRlIGljb24oc2VhcmNoKTtcbn1cblxuLmNtcy1pY29uLXNpdGVtYXAge1xuICAgIEBpbmNsdWRlIGljb24oc2l0ZW1hcCk7XG59XG5cbi5jbXMtaWNvbi1zcXVhcmVzIHtcbiAgICBAaW5jbHVkZSBpY29uKHNxdWFyZXMpO1xufVxuXG4uY21zLWljb24td2luZG93IHtcbiAgICBAaW5jbHVkZSBpY29uKHdpbmRvdyk7XG59XG4iLG51bGwsIi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4vLyBQQUdFVFJFRVxuXG4vLyBJTkZPOiBwbGVhc2Ugbm90IHRoYXQgYWxsIHJlbGF0ZWQgc3R5bGVzIHRvIHRoZSBwYWdldHJlZSBpdHNlbGZzIGFyZVxuLy8gaGFuZGxlZCB0aHJvdWdoIHRoZW1pbmcgYWZ0ZXIgdGhlIFwiUEFHRVRSRUUgVEhFTUVcIiBzZWN0aW9uIGluIHRoaXMgZmlsZS5cblxuLy8gSEVMUEVSU1xuLmNtcy1idG4ge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBjb2xvcjogJHdoaXRlICFpbXBvcnRhbnQ7XG4gICAgbGluZS1oZWlnaHQ6ICR0b29sYmFyLWJ1dHRvbi1oZWlnaHQgKyAycHg7XG4gICAgaGVpZ2h0OiAkdG9vbGJhci1idXR0b24taGVpZ2h0ICsgMnB4O1xuICAgIGZvbnQtc2l6ZTogJHRvb2xiYXItYnV0dG9uLWZvbnQtc2l6ZTtcbiAgICBwYWRkaW5nOiAwICR0b29sYmFyLWJ1dHRvbi1wYWRkaW5nLWhvcml6b250YWwgKyAxMHB4O1xuICAgICY6aG92ZXIsXG4gICAgJjphY3RpdmUsXG4gICAgJjpmb2N1cyB7XG4gICAgICAgIGNvbG9yOiAkd2hpdGUgIWltcG9ydGFudDtcbiAgICB9XG59XG5cbi5jbXMtaGlkZGVuLFxuLmhpZGRlbiB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuLmNtcy1jbGVhciB7XG4gICAgY2xlYXI6IGJvdGg7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5jbXMtY2xlYXItbW9iaWxlIHtcbiAgICBjbGVhcjogYm90aDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIEBtZWRpYSAobWluLXdpZHRoOiAkcGFnZXRyZWUtbW9iaWxlKSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxufVxuXG4vLyB3ZSBuZWVkIHRvIGFkZCB0aGlzIHRvIGdldCBkcmFnICYgZHJvcCB0byB3b3JrIG9uIGludGVybmV0IGV4cGxvcmVyLFxuLy8gbW9yZSBzcGVjaWZpY2FsbHkgb24gYSBtaWNyb3NvZnQgc3VyZmFjZVxuLmpzdHJlZSBsaSB7XG4gICAgLW1zLXRvdWNoLWFjdGlvbjogbm9uZTtcbiAgICB0b3VjaC1hY3Rpb246IG5vbmU7XG59XG5cbi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbi8vIENPTlRBSU5FUlxuLy8gZ2VuZXJhbCBjb250YWluZXIgYXJvdW5kIHRoZSBqc3RyZWUgb3IgZWxlbWVudHNcbi5jbXMtcGFnZXRyZWUge1xuICAgIGJveC1zaGFkb3c6ICRkcm9wZG93bi1zaGFkb3c7XG4gICAgYm9yZGVyOiAkcGFnZXRyZWUtYm9yZGVyO1xufVxuXG4vLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4vLyBIRUFERVJcbi8vIGhhbmRsZXMgdG9wIGhlYWRlciBhcmVhIHN0eWxlc1xuLmNtcy1wYWdldHJlZS1oZWFkZXIge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB6LWluZGV4OiB6KHBhZ2V0cmVlLCBoZWFkZXIpO1xuICAgIG1pbi1oZWlnaHQ6ICRwYWdldHJlZS1oZWFkZXItaGVpZ2h0O1xuICAgIHBhZGRpbmc6ICRwYWdldHJlZS1oZWFkZXItcGFkZGluZztcbiAgICBtYXJnaW46IC00MHB4IDAgMCAwO1xuICAgIGJveC1zaGFkb3c6ICRwYWdldHJlZS1ib3gtc2hhZG93O1xuICAgIGJhY2tncm91bmQ6ICRwYWdldHJlZS1oZWFkZXItYmFja2dyb3VuZDtcbiAgICAmOmJlZm9yZSB7XG4gICAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgYm90dG9tOiAtNnB4O1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgaGVpZ2h0OiA1cHg7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR3aGl0ZTtcbiAgICB9XG59XG5cbi5jbXMtcGFnZXRyZWUtaGVhZGVyLXRpdGxlIHtcbiAgICBwYWRkaW5nLXRvcDogNnB4O1xuICAgIG1hcmdpbjogMCAwIDVweCAhaW1wb3J0YW50O1xuICAgIEBtZWRpYSAobWluLXdpZHRoOiAkcGFnZXRyZWUtbW9iaWxlKSB7XG4gICAgICAgIGZsb2F0OiBsZWZ0O1xuICAgIH1cbiAgICBzcGFuIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICB9XG59XG5cbi5jbXMtcGFnZXRyZWUtaGVhZGVyLWJvZHkge1xuICAgIEBtZWRpYSAobWluLXdpZHRoOiAkcGFnZXRyZWUtbW9iaWxlKSB7XG4gICAgICAgIGZsb2F0OiByaWdodDtcbiAgICB9XG59XG5cbi8vIFNFQVJDSFxuLmNtcy1wYWdldHJlZS1oZWFkZXItc2VhcmNoIHtcbiAgICBwYWRkaW5nOiAwO1xuICAgIG1hcmdpbjogNXB4IDAgMTBweDtcbiAgICBib3gtc2hhZG93OiBub25lO1xuICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgQG1lZGlhIChtaW4td2lkdGg6ICRwYWdldHJlZS1tb2JpbGUpIHtcbiAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgIG1hcmdpbjogLTNweCAwIDtcbiAgICB9XG4gICAgLmNtcy1wYWdldHJlZS1oZWFkZXItc2VhcmNoLWJ0biB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgdG9wOiAzcHg7XG4gICAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICAgIGNvbG9yOiAkd2hpdGUgIWltcG9ydGFudDtcbiAgICAgICAgcGFkZGluZzogOHB4IDEwcHggIWltcG9ydGFudDtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgICAgICAgYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1wcmltYXJ5ICFpbXBvcnRhbnQ7XG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgYmFja2dyb3VuZDogZGFya2VuKCRjb2xvci1wcmltYXJ5LCA1JSkgIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgICAgICAmOmFjdGl2ZSxcbiAgICAgICAgJjpmb2N1cyB7XG4gICAgICAgICAgICBjb2xvcjogJHdoaXRlICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiBkYXJrZW4oJGNvbG9yLXByaW1hcnksIDE1JSkgIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAuY21zLXBhZ2V0cmVlLWhlYWRlci1maWx0ZXIge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgICBpbnB1dCB7XG4gICAgICAgICAgICB3aWR0aDogJHBhZ2V0cmVlLWhlYWRlci1zZWFyY2gtd2lkdGggIWltcG9ydGFudDtcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDM1cHggIWltcG9ydGFudDtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IDJweDtcbiAgICAgICAgICAgIHRyYW5zaXRpb246IHdpZHRoICRzcGVlZC1iYXNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGFjdGl2ZSBzdGF0ZSBvbiBmb2N1cyBvciB3aGVuIG9wZW5pbmcgdGhlIGZpbHRlcnNcbiAgICAuY21zLXBhZ2V0cmVlLWhlYWRlci1maWx0ZXItYWN0aXZlIGlucHV0IHtcbiAgICAgICAgQG1lZGlhIChtaW4td2lkdGg6ICRwYWdldHJlZS1tb2JpbGUpIHtcbiAgICAgICAgICAgIHdpZHRoOiAkcGFnZXRyZWUtaGVhZGVyLXNlYXJjaC13aWR0aCAqIDIgIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgIH1cbn1cbi5jbXMtcGFnZXRyZWUtaGVhZGVyLWZpbHRlci10cmlnZ2VyIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6IDA7XG4gICAgdG9wOiAwO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBwYWRkaW5nOiAxMHB4O1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDI3MGRlZyk7XG4gICAgJjpob3ZlciAuY21zLWljb24sXG4gICAgJjphY3RpdmUgLmNtcy1pY29uLFxuICAgICY6Zm9jdXMgLmNtcy1pY29uIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci1wcmltYXJ5O1xuICAgIH1cbiAgICAuY21zLWljb24ge1xuICAgICAgICBmb250LXNpemU6IDExcHg7XG4gICAgICAgIGNvbG9yOiAkZ3JheTtcbiAgICB9XG59XG4uY21zLXBhZ2V0cmVlLWhlYWRlci1maWx0ZXItY29udGFpbmVyIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICAgIG92ZXJmbG93OiBhdXRvO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBsZWZ0OiAwO1xuICAgIHRvcDogMzhweDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBwYWRkaW5nOiA1cHggMjBweCAxNXB4O1xuICAgIG1heC1oZWlnaHQ6ICRwYWdldHJlZS1oZWFkZXItZmlsdGVyLWhlaWdodDtcbiAgICBib3gtc2hhZG93OiAkcGFnZXRyZWUtYm94LXNoYWRvdztcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzLWJhc2U7XG4gICAgYmFja2dyb3VuZDogJHdoaXRlO1xuICAgIGgzIHtcbiAgICAgICAgY29sb3I6ICRncmF5O1xuICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgIHBhZGRpbmc6IDEwcHggMCAwIDA7XG4gICAgfVxuICAgIHVsLFxuICAgIGxpIHtcbiAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICAgICAgICBwYWRkaW5nOiAycHggMDtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgIH1cbiAgICAvLyBjb2xvciBzdGF0ZXNcbiAgICBsaSBhIHtcbiAgICAgICAgY29sb3I6ICRncmF5LWxpZ2h0O1xuICAgIH1cbiAgICAuc2VsZWN0ZWQgYSB7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItcHJpbWFyeTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgfVxufVxuLmNtcy1wYWdldHJlZS1oZWFkZXItc2VhcmNoLWNsb3NlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6IDA7XG4gICAgdG9wOiAwO1xuICAgIHBhZGRpbmc6IDEwcHg7XG4gICAgJjpob3ZlciAuY21zLWljb24sXG4gICAgJjphY3RpdmUgLmNtcy1pY29uLFxuICAgICY6Zm9jdXMgLmNtcy1pY29uIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci1wcmltYXJ5O1xuICAgIH1cbiAgICAuY21zLWljb24ge1xuICAgICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICAgIGNvbG9yOiAkZ3JheTtcbiAgICB9XG59XG4uY21zLXBhZ2V0cmVlLWhlYWRlci1zZWFyY2gtcmVzZXQge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIGZvbnQtc2l6ZTogOTAlO1xuICAgIHBhZGRpbmc6IDdweCAkcGFnZXRyZWUtaGVhZGVyLXNwYWNlO1xufVxuXG4vLyBEUk9QRE9XTlxuLmNtcy1wYWdldHJlZS1kcm9wZG93bi1tZW51IHtcbiAgICBmbG9hdDogcmlnaHQ7XG4gICAgcGFkZGluZy1sZWZ0OiAxMHB4O1xuICAgIG1hcmdpbi1sZWZ0OiAkcGFnZXRyZWUtaGVhZGVyLXNwYWNlO1xuICAgIEBtZWRpYSAobWluLXdpZHRoOiAkcGFnZXRyZWUtbW9iaWxlKSB7XG4gICAgICAgIGZsb2F0OiBsZWZ0O1xuICAgIH1cblxuICAgIC5jbXMtcGFnZXRyZWUtZHJvcGRvd24tY29udGFpbmVyIHtcbiAgICAgICAgcmlnaHQ6IC0xcHg7XG4gICAgICAgIHRvcDogMzBweDtcbiAgICAgICAgbWluLXdpZHRoOiAkZHJvcGRvd24td2lkdGggKyAyNXB4O1xuICAgICAgICBhIHtcbiAgICAgICAgICAgIHBhZGRpbmc6IDVweCAkc3VibWVudS1pdGVtLXBhZGRpbmctaG9yaXpvbnRhbDtcbiAgICAgICAgfVxuICAgICAgICAuYWN0aXZlIHtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgICAgICB9XG4gICAgICAgIC8vIG1vZGlmaWNhdGlvbiBmb3IgdGhlIGFycm93XG4gICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAtMjRweDtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IC05cHg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuY21zLXBhZ2V0cmVlLWRyb3Bkb3duLXRyaWdnZXIge1xuICAgICAgICBmbG9hdDogbGVmdDtcbiAgICAgICAgY29sb3I6ICRncmF5ICFpbXBvcnRhbnQ7XG4gICAgICAgIHBhZGRpbmc6IDlweCAxMHB4IDRweDtcbiAgICB9XG59XG5cbi5jbXMtcGFnZXRyZWUtaGVhZGVyLWNyZWF0ZSB7XG4gICAgQG1lZGlhIChtaW4td2lkdGg6ICRwYWdldHJlZS1tb2JpbGUpIHtcbiAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAkcGFnZXRyZWUtaGVhZGVyLXNwYWNlICsgMTBweDtcbiAgICB9XG59XG5cbi8vIEJSRUFEQ1JVTUJcbi5jbXMtcGFnZXRyZWUtYnJlYWRjcnVtYnMge1xuICAgIG1hcmdpbi1ib3R0b206IC0zMHB4ICFpbXBvcnRhbnQ7XG4gICAgYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7XG59XG5cbi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbi8vIFNFQ1RJT05cbi8vIHNlcGFyYXRlcyBkaWZmZXJlbnQgbmF2aWdhdGlvbnNcbi5jbXMtcGFnZXRyZWUtc2VjdGlvbiB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IHoocGFnZXRyZWUsIHNlY3Rpb24pO1xuICAgIG1pbi1oZWlnaHQ6ICRwYWdldHJlZS1zZWN0aW9uLWhlaWdodDtcbiAgICBwYWRkaW5nOiAkcGFnZXRyZWUtc2VjdGlvbi1wYWRkaW5nO1xuICAgIGJveC1zaGFkb3c6ICRwYWdldHJlZS1ib3gtc2hhZG93O1xuICAgIGJvcmRlci10b3A6IG5vbmU7XG4gICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbiAgICBiYWNrZ3JvdW5kOiAkd2hpdGU7XG4gICAgaDIsXG4gICAgcCB7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgIH1cbiAgICBoMiB7XG4gICAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB9XG59XG4uY21zLXBhZ2V0cmVlLXNlY3Rpb24tbmF2IHtcbiAgICBmbG9hdDogcmlnaHQ7XG59XG5cbi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbi8vIERST1BET1dOXG4vLyBkcm9wZG93bnMgdXNlZCBmb3IgbWVudXNcbi5jbXMtcGFnZXRyZWUtZHJvcGRvd24ge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5jbXMtcGFnZXRyZWUtZHJvcGRvd24tdHJpZ2dlciB7fVxuLmNtcy1wYWdldHJlZS1kcm9wZG93bi1jb250YWluZXIge1xuICAgIC8vIHJlZmVyZW5jZXMgZm91bmQgaW4gX3N1Ym5hdi5zY3NzXG4gICAgZGlzcGxheTogbm9uZTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgei1pbmRleDogeihzdHJ1Y3R1cmUsIGNvbnRlbnQsIGRyb3Bkb3duKTtcbiAgICByaWdodDogLTJweDtcbiAgICB0b3A6IDI1cHg7XG4gICAgcGFkZGluZzogNHB4IDA7XG4gICAgbWluLXdpZHRoOiAkZHJvcGRvd24td2lkdGg7XG4gICAgYmFja2dyb3VuZDogJHN1Ym1lbnUtZHJvcGRvd24tYmdjb2xvcjtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cy1ub3JtYWw7XG4gICAgYm94LXNoYWRvdzogJGRyb3Bkb3duLXNoYWRvdztcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooMCk7XG5cbiAgICBhIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGNvbG9yOiAkZ3JheTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgICAgICAgcGFkZGluZzogMTBweCAkc3VibWVudS1pdGVtLXBhZGRpbmctaG9yaXpvbnRhbDtcbiAgICAgICAgJjpob3ZlcixcbiAgICAgICAgJjphY3RpdmUsXG4gICAgICAgICY6Zm9jdXMge1xuICAgICAgICAgICAgY29sb3I6ICR3aGl0ZSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLXByaW1hcnk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gbGFiZWxcbiAgICAubGFiZWwge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgICAgY29sb3I6ICRncmF5LWxpZ2h0O1xuICAgICAgICBmb250LXNpemU6IDkwJTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgICAgICAgcGFkZGluZzogNXB4ICRzdWJtZW51LWl0ZW0tcGFkZGluZy1ob3Jpem9udGFsIDA7XG4gICAgfVxuXG4gICAgbGkge1xuICAgICAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICB9XG5cbiAgICAvLyBhZGRzIGFycm93XG4gICAgJjpiZWZvcmUge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHotaW5kZXg6IHooYmVsb3cpO1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgbGVmdDogMTAwJTtcbiAgICAgICAgd2lkdGg6ICRkcm9wZG93bi1hcnJvdy1zaWRlO1xuICAgICAgICBoZWlnaHQ6ICRkcm9wZG93bi1hcnJvdy1zaWRlO1xuICAgICAgICBtYXJnaW4tbGVmdDogLSgkZHJvcGRvd24tYXJyb3ctc2lkZSAvIDIpO1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRzdWJtZW51LWRyb3Bkb3duLWJnY29sb3I7XG4gICAgfVxufVxuXG4uY21zLXBhZ2V0cmVlLWRyb3Bkb3duLXNlcGFyYXRvciB7XG4gICAgcGFkZGluZzogMDtcbiAgICBtYXJnaW46IDRweCAxcHggIWltcG9ydGFudDtcbiAgICBsaW5lLWhlaWdodDogMTtcbiAgICBoZWlnaHQ6IDFweDtcbiAgICBiYWNrZ3JvdW5kOiAkZ3JheS1saWdodGVyO1xufVxuXG4vLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuLy8gSlNUUkVFXG4uY21zLXBhZ2V0cmVlLWNvbnRhaW5lciB7XG4gICAgLy8gb3ZlcmZsb3c6IGF1dG87XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IHoocGFnZXRyZWUsIGNvbnRhaW5lcik7XG4gICAgbWFyZ2luLWJvdHRvbTogJHBhZ2V0cmVlLWJvdHRvbS1vZmZzZXQ7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGdyYXktbGlnaHRlcjtcbiAgICBib3JkZXItdG9wOiBub25lO1xuICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG59XG5cbi5jbXMtdHJlZS1jb2wge1xuICAgIGhlaWdodDogJHBhZ2V0cmVlLWpzdHJlZS1oZWFkZXItaGVpZ2h0O1xufVxuXG4uY21zLXRyZWUtaXRlbSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuXG4uY21zLXRyZWUtcmVsb2FkIHtcbiAgICBmbG9hdDogcmlnaHQ7XG59XG5cbi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbi8vIFRPT0xUSVBcbi8vIGhhbmRsZXMgdG9vbHRpcCBzdHlsaW5nXG4uY21zLXRyZWUtdG9vbHRpcC1jb250YWluZXIge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiAkcGFnZXRyZWUtdG9vbHRpcC1vZmZzZXQ7XG4gICAgdG9wOiAtJHBhZ2V0cmVlLWljb24tb2Zmc2V0O1xuICAgIHotaW5kZXg6IDEwMDtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzLWJhc2U7XG4gICAgYmFja2dyb3VuZDogJHdoaXRlO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRncmF5LWxpZ2h0ZXI7XG5cbiAgICAvLyBpY29uIG9uIHRoZSByaWdodFxuICAgICY6YmVmb3JlIHtcbiAgICAgICAgY29udGVudDogXCJcIjtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBsZWZ0OiAxMDAlO1xuICAgICAgICB0b3A6ICRwYWdldHJlZS1pY29uLW9mZnNldCArIDI7XG4gICAgICAgIHotaW5kZXg6IDE7XG4gICAgICAgIHdpZHRoOiAkZHJvcGRvd24tYXJyb3ctc2lkZTtcbiAgICAgICAgaGVpZ2h0OiAkZHJvcGRvd24tYXJyb3ctc2lkZTtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IC0oJGRyb3Bkb3duLWFycm93LXNpZGUgLyAyKTtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xuICAgICAgICBib3gtc2hhZG93OiAkZHJvcGRvd24tc2hhZG93O1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc3VibWVudS1kcm9wZG93bi1iZ2NvbG9yO1xuICAgIH1cblxuICAgIGgzIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB6LWluZGV4OiAxMDtcbiAgICAgICAgY29sb3I6ICRncmF5LWxpZ2h0O1xuICAgICAgICBmb250LXNpemU6ICRmb250LXNpemUtc21hbGw7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgIHBhZGRpbmc6ICRwYWdldHJlZS10b29sdGlwLWhlYWRlci1wYWRkaW5nO1xuICAgICAgICBtYXJnaW46IDAgIWltcG9ydGFudDtcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRncmF5LWxpZ2h0ZXI7XG4gICAgICAgIGJhY2tncm91bmQ6ICR3aGl0ZTtcbiAgICB9XG5cbiAgICBhIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHBhZGRpbmc6ICRwYWdldHJlZS10b29sdGlwLWFuY2hvci1wYWRkaW5nO1xuICAgICAgICBtaW4td2lkdGg6ICRwYWdldHJlZS10b29sdGlwLW1pbi13aWR0aDtcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkZ3JheS1saWdodGVyO1xuXG4gICAgICAgICY6aG92ZXIsXG4gICAgICAgICY6bGluazpob3ZlciB7XG4gICAgICAgICAgICBjb2xvcjogZGFya2VuKCRjb2xvci1wcmltYXJ5LCAxMCUpICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5jbXMtaWNvbiB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgdG9wOiAzcHg7XG4gICAgICAgIGxlZnQ6IC0xcHg7XG4gICAgfVxuICAgIC8vIG9wZW4gc3RhdGVcbiAgICAmLW9wZW4ge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG59XG4uY21zLXRyZWUtdG9vbHRpcC13cmFwcGVyIHtcbiAgICBwYWRkaW5nOiAxMHB4O1xufVxuXG4vLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4vLyBJQ09OU1xuLy8gdXNlZCBmb3IgdGhlIHNpdGVtYXAgYW5kIGFwcGhvb2sgaWNvbnNcbi5jbXMtdHJlZS1pdGVtLWljb25zIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgdG9wOiAkcGFnZXRyZWUtaWNvbi1vZmZzZXQ7XG4gICAgcGFkZGluZzogJHBhZ2V0cmVlLWljb24tcGFkZGluZztcblxuICAgIHNwYW46YmVmb3JlIHtcbiAgICAgICAgY29sb3I6ICRncmF5LWxpZ2h0O1xuICAgIH1cblxuICAgICYtZGFyayBzcGFuOmJlZm9yZSB7XG4gICAgICAgIGNvbG9yOiAkZ3JheS1kYXJrZXI7XG4gICAgfVxufVxuXG4vLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4vLyBQUkVWSUVXXG4vLyBzaG93cyBwcmV2aWV3IGV5ZSBpY29uXG4uY21zLXRyZWUtaXRlbS1wcmV2aWV3IHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgLy8gbmVlZCBjdXN0b20gcG9zaXRpb25pbmcgaGVyZVxuICAgIHRvcDogMnB4O1xuICAgIGxlZnQ6IDNweDtcblxuICAgIGEge1xuICAgICAgICBAZXh0ZW5kICVpY29uO1xuICAgICAgICBAaW5jbHVkZSBpY29uKGV5ZSk7XG4gICAgICAgIGZvbnQtc2l6ZTogJHBhZ2V0cmVlLWljb24tc2l6ZTtcblxuICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgICBjb2xvcjogJGdyYXktZGFya2VyO1xuICAgICAgICB9XG4gICAgICAgICY6aG92ZXI6YmVmb3JlIHtcbiAgICAgICAgICAgIGNvbG9yOiAkYmxhY2s7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3BhbiB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgQGluY2x1ZGUgaGlkZS1jb250ZW50KCk7XG4gICAgfVxuXG4gICAgLy8gYWN0aXZlIHN0YXRlIGZvciBjdXJyZW50IHNlbGVjdGVkIHBhZ2VcbiAgICAmLWFjdGl2ZSBhOmJlZm9yZSB7XG4gICAgICAgIGNvbG9yOiAkYmxhY2s7XG4gICAgfVxufVxuXG4vLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4vLyBMQU5HVUFHRVxuLy8gc2hvd3MgbGFuZ3VhZ2UgYnViYmxlc1xuLmNtcy10cmVlLWl0ZW0tbGFuZyB7XG4gICAgLy8gcmVxdWlyZWQgZm9yIHRvb2x0aXBcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgdG9wOiAkcGFnZXRyZWUtaWNvbi1vZmZzZXQ7XG4gICAgLmNtcy10cmVlLXRvb2x0aXAtY29udGFpbmVyIHtcbiAgICAgICAgcmlnaHQ6ICRwYWdldHJlZS10b29sdGlwLW9mZnNldCAtIDM7XG4gICAgfVxufVxuLmNtcy10cmVlLWxhbmctY29udGFpbmVyIHNwYW4ge1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiAkcGFnZXRyZWUtbGFuZy1zaXplO1xuICAgIGhlaWdodDogJHBhZ2V0cmVlLWxhbmctc2l6ZTtcbiAgICBib3JkZXItcmFkaXVzOiAxMDAlO1xuICAgIC8vIHdpbGwgY2hhbmdlIGFjY29yZGluZyB0byBzdGF0ZXNcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkd2hpdGU7XG4gICAgYmFja2dyb3VuZDogJHdoaXRlO1xuICAgICYuZW1wdHkge1xuICAgICAgICBib3JkZXItY29sb3I6ICRncmF5LWxpZ2h0O1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkd2hpdGU7XG4gICAgfVxuICAgICYudW5wdWJsaXNoZWQsXG4gICAgJi51bnB1Ymxpc2hlZHBhcmVudCB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogJGdyYXktbGlnaHQ7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRncmF5LWxpZ2h0O1xuICAgIH1cbiAgICAmLnB1Ymxpc2hlZCB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLXN1Y2Nlc3M7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvci1zdWNjZXNzO1xuICAgIH1cbiAgICAmLmRpcnR5IHtcbiAgICAgICAgYW5pbWF0aW9uOiBwdWxzYXRlIDIuNXMgZWFzZS1vdXQgaW5maW5pdGU7XG4gICAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLXByaW1hcnk7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvci1wcmltYXJ5O1xuICAgIH1cbn1cblxuLy8gYW5pbWF0aW9uIGZvciBwdWJsaXNoaW5nXG5Aa2V5ZnJhbWVzIHB1bHNhdGUge1xuICAgIDAlIHtcbiAgICAgICAgb3BhY2l0eTogMC41O1xuICAgIH1cbiAgICA1MCUge1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgICAxMDAlIHtcbiAgICAgICAgb3BhY2l0eTogMC41O1xuICAgIH1cbn1cblxuLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuLy8gTEFOR1VBR0Vcbi8vIHNob3dzIGxhbmd1YWdlIGJ1YmJsZXNcbi5jbXMtdHJlZS1pdGVtLW1lbnUge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB0b3A6ICRwYWdldHJlZS1pY29uLW9mZnNldCAtIDE7XG5cbiAgICAuY21zLWljb246YmVmb3JlIHtcbiAgICAgICAgZm9udC1zaXplOiAkcGFnZXRyZWUtaWNvbi1zaXplIC0gNDtcbiAgICAgICAgY29sb3I6ICRncmF5LWRhcmtlcjtcbiAgICB9XG4gICAgLmNtcy1pY29uLWNoZWNrLXNxdWFyZTpiZWZvcmUge1xuICAgICAgICBjb2xvcjogJGNvbG9yLXN1Y2Nlc3M7XG4gICAgfVxufVxuXG4vLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4vLyBJTkZPXG4vLyBpY29uIHVzZWQgYXQgdGhlIGVuZCB0byBkaXNwbGF5IGFkZGl0aW9uYWwgaGVscFxuLmNtcy10cmVlLWl0ZW0taW5mbyB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHRvcDogJHBhZ2V0cmVlLWljb24tb2Zmc2V0O1xuICAgIGxlZnQ6IDFweDtcblxuICAgIC5jbXMtaWNvbjpiZWZvcmUge1xuICAgICAgICBmb250LXNpemU6ICRwYWdldHJlZS1pY29uLXNpemU7XG4gICAgfVxuXG4gICAgcCB7XG4gICAgICAgIGNvbG9yOiAkZ3JheS1kYXJrZXN0O1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgfVxuICAgIHN0cm9uZyB7XG4gICAgICAgIGNvbG9yOiAkZ3JheS1saWdodDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICB9XG59XG5cbi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbi8vIFNFQVJDSCAmIEZJTFRFUklOR1xuLy8gc2VhcmNoZm9ybSBvciBmaWx0ZXJpbmdcbi5jbXMtdHJlZS1zZWFyY2gge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIG1hcmdpbi1yaWdodDogNXB4O1xuICAgIGxhYmVsIHtcbiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICAgIH1cbiAgICBzZWxlY3Qge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHRvcDogMnB4O1xuICAgICAgICB3aWR0aDogJHBhZ2V0cmVlLXNlYXJjaC13aWR0aCAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAvLyBuZWVkIHRvIG92ZXJ3cml0ZSBkamFuZ29jbXMtYWRtaW4tdGhlbWVcbiAgICAjdG9vbGJhciBmb3JtI2NoYW5nZWxpc3Qtc2VhcmNoIGlucHV0W3R5cGU9XCJzdWJtaXRcIl0ge1xuICAgICAgICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAjdG9vbGJhciBmb3JtI2NoYW5nZWxpc3Qtc2VhcmNoICNzZWFyY2hiYXIge1xuICAgICAgICB3aWR0aDogJHBhZ2V0cmVlLXNlYXJjaC13aWR0aCAhaW1wb3J0YW50O1xuICAgIH1cbn1cbi5jbXMtdHJlZS1maWx0ZXJzIHtcbiAgICBmbG9hdDogcmlnaHQ7XG4gICAgLmpzLWNtcy10cmVlLWZpbHRlci10cmlnZ2VyIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAyMHB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMzBweDtcbiAgICAgICAgd2lkdGg6IDE3NXB4O1xuICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJGdyYXktbGlnaHRlcjtcbiAgICB9XG4gICAgaDIge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbn1cblxuLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuLy8gT1RIRVJcblxuLy8gc2VhcmNoZm9ybSBvciBmaWx0ZXJpbmdcbi5jbXMtcGFnZXRyZWUtZW1wdHkge1xuICAgIHBhZGRpbmc6ICRwYWdldHJlZS1oZWFkZXItcGFkZGluZztcbiAgICBib3JkZXItdG9wOiBub25lO1xuICAgIC5hZGRsaW5rIHtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgIH1cbn1cblxuLy8gZGphbmdvIGRlZmF1bHQgYWRtaW4gdGhlbWUgYWRhcHRpb25zXG4uY21zLXRyZWUtY29sIHtcbiAgICBsaW5lLWhlaWdodDogMTZweDtcbn1cblxuLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbi8vIFBBR0VUUkVFIFRIRU1FXG5cbi8vIHRoaXMgbGV2ZWwgaXMgcmVxdWlyZWQgdG8gbWFrZSBzdXJlIGRqYW5nb2Ntcy1hZG1pbi1zdHlsZSBvciBkamFuZ28tYWRtaW5cbi8vIGFyZSBub3QgaW50ZXJmZXJpbmcgKGluY3JlYXNpbmcgc3BlY2lmaWNpdHkpLiBUaGlzIHNlY3Rpb24gb25seSBkZWZpbmVzXG4vLyByZXNldHMgYWRkZWQgdGhyb3VnaCBpbmxpbmUgc3R5bGVzXG4uanN0cmVlLWRqYW5nby1jbXMge1xuICAgIC8vIHBhcmVudCBhbmQgY2hpbGRyZW4gdWxcbiAgICAuanN0cmVlLWNvbnRhaW5lci11bCxcbiAgICAuanN0cmVlLWNoaWxkcmVuLFxuICAgIC8vIGNoaWxkcmVuIGFuZCBjaGlsZHJlbnMgY2hpbGRyZW4gbGlcbiAgICAuanN0cmVlLWxlYWYsXG4gICAgLmpzdHJlZS1ub2RlICB7XG4gICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgIH1cblxuICAgIC8vIGdyaWQgc2V0dGluZ3MgYW5kIHJlc2V0cyBhZGRlZCBieSBganN0cmVlLmdyaWQuanNgXG4gICAgLmpzdHJlZS1ncmlkLWhlYWRlcixcbiAgICAuanN0cmVlLWdyaWQtc2VwYXJhdG9yIHtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAvLyB0aGVyZSBhcmUgaW5saW5lIHN0eWxlcyBzZXQgdG8gdGhpcyBwYXJ0XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICB9XG4gICAgJi5qc3RyZWUtZ3JpZC1jZWxsIHtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICB9XG5cbiAgICAvLyB0b29sdGlwcyBhcmUgaGlkZGVuIGlmIG92ZXJmbG93IGlzIHByZXZlbnRlZFxuICAgIC5qc3RyZWUtZ3JpZC1jb2x1bW4sXG4gICAgLmpzdHJlZS1ncmlkLWNlbGwge1xuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgICB9XG5cbiAgICAvLyBkaXNhYmxlIGhpZ2hsaWdodCBvbiBpT1MgZGV2aWNlc1xuICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTtcbn1cblxuLy8gd3JhcHBlciBhZGRlZCBieSBqc3RyZWVcbi5qc3RyZWUtZ3JpZC13cmFwcGVyIHtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7XG4gICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbn1cblxuLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuLy8gREpBTkdPLUNNUyBUSEVNRVxuXG4vLyBnZW5lcmFsIHdyYXBwZXJcbi5qc3RyZWUtZ3JpZC13cmFwcGVyIHtcbiAgICBiYWNrZ3JvdW5kOiAkZ3JheS1saWdodGVzdDtcbn1cblxuLy8gc3BlY2lmaWNpdHkgcmVxdWlyZWQgZm9yIGFkbWluIHN0eWxlcyBhbmQganN0cmVlIHJlc2V0c1xuLmpzdHJlZS1kamFuZ28tY21zIHtcbiAgICAuanN0cmVlIHtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAkcGFnZXRyZWUtbmVzdGluZy1wYWRkaW5nIC8gMjtcbiAgICB9XG4gICAgLy8gaGVhZGVyIGNvbHVtblxuICAgIC5qc3RyZWUtZ3JpZC1oZWFkZXIge1xuICAgICAgICBmb250LXNpemU6ICRmb250LXNpemUtc21hbGw7XG4gICAgICAgIGZvbnQtY29sb3I6ICRncmF5O1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIHBhZGRpbmc6ICRwYWdldHJlZS1qc3RyZWUtaGVhZGVyLXBhZGRpbmc7XG4gICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkZ3JheS1saWdodGVyO1xuICAgICAgICBiYWNrZ3JvdW5kOiAkd2hpdGU7XG4gICAgfVxuICAgIC8vIGVuc3VyZSBmaXJzdCBsaW5lIGlzIG5vdCBjZW50ZXJlZFxuICAgIC5qc3RyZWUtZ3JpZC1jb2x1bW4tMCAuanN0cmVlLWdyaWQtaGVhZGVyIHtcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdCAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIC8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiAgICAvLyBzdHlsZXMgZm9yIG5lc3RpbmcgZWxlbWVudHNcbiAgICAuanN0cmVlLWNvbnRhaW5lci11bCB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAkcGFnZXRyZWUtbmVzdGluZy1wYWRkaW5nO1xuICAgIH1cbiAgICAuanN0cmVlLWNoaWxkcmVuIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6ICRwYWdldHJlZS1uZXN0aW5nLXBhZGRpbmc7XG4gICAgfVxuICAgIC5qc3RyZWUtb2NsIHtcbiAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgbGVmdDogLSRwYWdldHJlZS1uZXN0aW5nLXBhZGRpbmc7XG4gICAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgICAgY29sb3I6ICRncmF5LWxpZ2h0O1xuICAgICAgICBwYWRkaW5nOiAxNXB4IDEwcHggMTBweCAwO1xuICAgICAgICBAZXh0ZW5kICVpY29uO1xuICAgIH1cbiAgICAuanN0cmVlLW9wZW4gPiAuanN0cmVlLW9jbCxcbiAgICAuanN0cmVlLWNsb3NlZCA+IC5qc3RyZWUtb2NsIHtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAmOmFmdGVyIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIHJpZ2h0OiAycHg7XG4gICAgICAgICAgICB0b3A6IDIwcHg7XG4gICAgICAgICAgICB3aWR0aDogOHB4O1xuICAgICAgICAgICAgaGVpZ2h0OiAycHg7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAkZ3JheS1saWdodGVyO1xuICAgICAgICB9XG4gICAgfVxuICAgIC5qc3RyZWUtb3BlbiA+IC5qc3RyZWUtb2NsIHtcbiAgICAgICAgQGluY2x1ZGUgaWNvbihtaW51cy1zcXVhcmUtbyk7XG4gICAgfVxuICAgIC5qc3RyZWUtY2xvc2VkID4gLmpzdHJlZS1vY2wge1xuICAgICAgICBAaW5jbHVkZSBpY29uKHBsdXMtc3F1YXJlLW8pO1xuICAgIH1cbiAgICAuanN0cmVlLWxvYWRpbmcgPiAuanN0cmVlLW9jbCB7XG4gICAgICAgIEBpbmNsdWRlIGljb24obG9hZGVyKTtcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgICAgYW5pbWF0aW9uOiBjbXMtc3BpbiAycyBpbmZpbml0ZSBsaW5lYXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4gICAgLy8gYmFja2dyb3VuZCBjb2xvciBhbmQgcGFkZGluZ3MgZm9yIG5vZGVzXG4gICAgLy8gZmlyc3Qgcm93IHN0eWxpbmdcbiAgICAuanN0cmVlLWFuY2hvciB7XG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBjdXJzb3I6IG1vdmU7XG4gICAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICAgIGNvbG9yOiAkZ3JheTtcbiAgICAgICAgLy8gd2UgbmVlZCB0byBhZGQgb25lIHBpeGVsIGluIHRvIG5lZ2F0ZSB0aGUgbmVnYXRpdmUgbWFyZ2luXG4gICAgICAgIC8vIHZhbHVlIHRvIGdldCB0aGUgYm9yZGVycyB0byB3b3JrIHZpc3VhbGx5XG4gICAgICAgIGhlaWdodDogJHBhZ2V0cmVlLWNlbGwtaGVpZ2h0ICsgMTtcbiAgICAgICAgcGFkZGluZzogJHBhZ2V0cmVlLWFuY2hvci1wYWRkaW5nO1xuICAgICAgICBtYXJnaW4tdG9wOiAtMXB4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAkZ3JheS1saWdodGVyO1xuICAgICAgICBib3JkZXItcmlnaHQ6IG5vbmU7XG4gICAgICAgIGJhY2tncm91bmQ6ICR3aGl0ZSB1cmwoJy4uL2ltZy9wYWdldHJlZS90cmVlLWxpLWRyYWcuZ2lmJykgbm8tcmVwZWF0IC0xcHggY2VudGVyO1xuXG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgY29sb3I6ICRncmF5ICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLmNtcy10cmVlLW5vZGUtZmlsdGVyZWQgLmpzdHJlZS1hbmNob3Ige1xuICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgfVxuICAgIC8vIHN0eWxlIGNlbGxzIGFmdGVyd2FyZHNcbiAgICAuanN0cmVlLWdyaWQtY2VsbCB7XG4gICAgICAgIGhlaWdodDogJHBhZ2V0cmVlLWNlbGwtaGVpZ2h0O1xuICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJGdyYXktbGlnaHRlcjtcbiAgICAgICAgYmFja2dyb3VuZDogJHdoaXRlO1xuICAgICAgICAvLyBkb24ndCBhcHBseSB0aGVzZSBzdHlsZXMgZm9yIHRoZSBmaXJzdCBjb2x1bW5cbiAgICAgICAgJi5qc3RyZWUtZGphbmdvLWNtcyB7XG4gICAgICAgICAgICBoZWlnaHQ6IGF1dG87XG4gICAgICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgICB9XG4gICAgfVxuICAgIC5qc3RyZWUtZ3JpZC1jZWxsLXJlZ3VsYXIge1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIHBhZGRpbmc6ICRwYWdldHJlZS1jZWxsLXBhZGRpbmc7XG4gICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgJGdyYXktbGlnaHRlcjtcbiAgICB9XG4gICAgLmpzdHJlZS1ncmlkLWNlbGwtcmVndWxhci1vcHRpb25zIHtcbiAgICAgICAgYm9yZGVyLWxlZnQ6IG5vbmU7XG4gICAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIH1cbiAgICAvLyBob3ZlciBzdGF0ZXNcbiAgICAuanN0cmVlLWhvdmVyZWQsXG4gICAgLmpzdHJlZS1jbGlja2VkIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRlbigkZ3JheS1saWdodGVzdCwgMyUpO1xuICAgIH1cblxuICAgIC8vIHNwZWNpYWwgY2FzZSBmb3IgcGFzdGUgaGVhZGVyXG4gICAgLmpzdHJlZS1ncmlkLWNvbHVtbi0xIC5qc3RyZWUtZ3JpZC1oZWFkZXIge1xuICAgICAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICAgICAgYSB7XG4gICAgICAgICAgICBmb250LXNpemU6ICRmb250LXNpemUtc21hbGw7XG4gICAgICAgICAgICB0b3A6IDA7XG4gICAgICAgIH1cbiAgICAgICAgc3BhbiB7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzcGVjaWFsIGljb24gZm9yIHBhc3RpbmdcbiAgICAgICAgLmNtcy1pY29uIHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbWFsbDtcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6ICRwYWdldHJlZS1pY29uLW9mZnNldDtcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAkcGFnZXRyZWUtaWNvbi1vZmZzZXQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbi8vIGluaXRpYWwgbG9hZGluZyBkaXNwbGF5IG9mIHRoZSB0cmVlXG4uanN0cmVlLmpzdHJlZS1sb2FkaW5nIHtcbiAgICAuanN0cmVlLWNvbnRhaW5lci11bCB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICB9XG4gICAgLmpzdHJlZS1hbmNob3Ige1xuICAgICAgICBwYWRkaW5nLXRvcDogMTNweDtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAxNXB4O1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgfVxuXG4gICAgLmpzdHJlZS1sb2FkaW5nID4gLmpzdHJlZS1vY2wge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbn1cblxuLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuLy8gc3VjY2VzcyBhbmltYXRpb24gYW5kIHBhc3RlIGZ1bmN0aW9uYWxpdHlcbi8vIHRoaXMgc2hvdWxkIG9ubHkgYmUgYXR0YWNoZWQgdG8gdGhlIHJvb3Rcbi5jbXMtdHJlZS1ub2RlLXN1Y2Nlc3Mge1xuICAgID4gLmpzdHJlZS1hbmNob3IgLmpzdHJlZS10aGVtZWljb24ge1xuICAgICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHRvcDogNHB4O1xuICAgICAgICBjb2xvcjogJGNvbG9yLXN1Y2Nlc3M7XG4gICAgICAgIEBleHRlbmQgJWljb247XG4gICAgICAgIEBpbmNsdWRlIGljb24oY2hlY2spO1xuICAgIH1cbn1cblxuLmNtcy10cmVlLWl0ZW0taGVscGVycyBhIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgdG9wOiAycHg7XG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplLW5vcm1hbDtcbiAgICAuY21zLWljb24ge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHRvcDogMXB4O1xuICAgICAgICBmb250LXNpemU6ICRmb250LXNpemUtc21hbGw7XG4gICAgfVxufVxuXG4vLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4vLyBkcmFnICYgZHJvcCBpdGVtXG4janN0cmVlLWRuZCB7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtaW4td2lkdGg6IDMwMHB4O1xuICAgIGhlaWdodDogJHBhZ2V0cmVlLWNlbGwtaGVpZ2h0O1xuICAgIHBhZGRpbmc6ICRwYWdldHJlZS1hbmNob3ItcGFkZGluZyAhaW1wb3J0YW50O1xuICAgIG1hcmdpbi1sZWZ0OiAtJHBhZ2V0cmVlLW1hcmtlci1zaXplICsgMTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkZ3JheS1saWdodGVyO1xuICAgIGJhY2tncm91bmQ6ICR3aGl0ZTtcbiAgICAvLyBjb3B5IGljb24gdHJpZ2dlcmVkIHdoZW4gcHJlc3NpbmcgYENNRGBcbiAgICAuanN0cmVlLWNvcHkge1xuICAgICAgICBjb2xvcjogJHdoaXRlO1xuICAgICAgICBwYWRkaW5nOiAwIDVweCAycHg7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiA1cHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzLWJhc2U7XG4gICAgICAgIGJhY2tncm91bmQ6ICRncmF5LWxpZ2h0O1xuICAgIH1cbiAgICAvLyBlcnJvciBjb2xvciBkaXNwbGF5ZWQgaWYgd2UgY2FuL2Nhbm5vdCBtb3ZlIGl0XG4gICAgLmpzdHJlZS1vayxcbiAgICAuanN0cmVlLWVyIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IC01cHg7XG4gICAgICAgIHdpZHRoOiA1cHg7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgYmFja2dyb3VuZDogJGdyYXktbGlnaHRlcjtcbiAgICB9XG4gICAgLmpzdHJlZS1vayB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvci1zdWNjZXNzO1xuICAgIH1cbiAgICAuanN0cmVlLWVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLWRhbmdlcjtcbiAgICB9XG59XG5cbiNqc3RyZWUtbWFya2VyIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbWFyZ2luOiAtJHBhZ2V0cmVlLW1hcmtlci1zaXplIDAgMCAwO1xuICAgIGJvcmRlci1yaWdodDogMDtcbiAgICBib3JkZXItdG9wOiAkcGFnZXRyZWUtbWFya2VyLXNpemUgc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyLWJvdHRvbTogJHBhZ2V0cmVlLW1hcmtlci1zaXplIHNvbGlkIHRyYW5zcGFyZW50O1xuICAgIGJvcmRlci1sZWZ0OiAkcGFnZXRyZWUtbWFya2VyLXNpemUgc29saWQgJGJsYWNrO1xuICAgIHdpZHRoOiAwO1xuICAgIGhlaWdodDogMDtcbn1cbiIsIi8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4vLyBDVVNUT01cblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0NvbXBhc3MvY29tcGFzcy9ibG9iL3N0YWJsZS9jb3JlL3N0eWxlc2hlZXRzL2NvbXBhc3MvdHlwb2dyYXBoeS90ZXh0L19yZXBsYWNlbWVudC5zY3NzXG5AbWl4aW4gaGlkZS1jb250ZW50KCkge1xuICAgICRhcHByb3hpbWF0ZS1lbS12YWx1ZTogMTJweCAvIDFlbTtcbiAgICAkd2lkZXItdGhhbi1hbnktc2NyZWVuOiAtOTk5OWVtO1xuICAgIHRleHQtaW5kZW50OiAkd2lkZXItdGhhbi1hbnktc2NyZWVuICogJGFwcHJveGltYXRlLWVtLXZhbHVlO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbn1cbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== */ \ No newline at end of file + */.cms-btn,.cms-btn-action,.cms-btn-caution{-webkit-appearance:none}@font-face{font-family:"django-cms-iconfont";src:url(../fonts/django-cms-iconfont.eot?v=3.2.0);src:url(../fonts/django-cms-iconfont.eot?v=3.2.0#iefix) format("eot"),url(../fonts/django-cms-iconfont.woff2?v=3.2.0) format("woff2"),url(../fonts/django-cms-iconfont.woff?v=3.2.0) format("woff"),url(../fonts/django-cms-iconfont.ttf?v=3.2.0) format("truetype"),url(../fonts/django-cms-iconfont.svg?v=3.2.0#django-cms-iconfont) format("svg");font-weight:400;font-style:normal}.cms-icon,.cms-tree-item-preview a,.cms-tree-node-success>.jstree-anchor .jstree-themeicon,.jstree-django-cms .jstree-ocl{display:inline-block;font:normal normal normal 16px/1 django-cms-iconfont;text-rendering:auto;-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.cms-icon-alias:before{content:"\E001"}.cms-icon-arrow-right:before{content:"\E002"}.cms-icon-arrow-wide:before{content:"\E003"}.cms-icon-arrow:before{content:"\E004"}.cms-icon-bin:before{content:"\E005"}.cms-icon-check-o:before{content:"\E006"}.cms-icon-check-square:before{content:"\E007"}.cms-icon-check:before{content:"\E008"}.cms-icon-close:before{content:"\E009"}.cms-icon-cogs:before{content:"\E00A"}.cms-icon-copy:before{content:"\E00B"}.cms-icon-eye:before{content:"\E00C"}.cms-icon-forbidden:before{content:"\E00D"}.cms-icon-handler:before{content:"\E00E"}.cms-icon-home:before{content:"\E00F"}.cms-icon-info:before{content:"\E010"}.cms-icon-loader:before{content:"\E011"}.cms-icon-lock:before{content:"\E012"}.cms-icon-logo:before{content:"\E013"}.cms-icon-menu:before{content:"\E014"}.cms-icon-minimize:before{content:"\E015"}.cms-icon-minus-square-o:before{content:"\E016"}.cms-icon-minus-square:before{content:"\E017"}.cms-icon-minus:before{content:"\E018"}.cms-icon-paste:before{content:"\E019"}.cms-icon-pencil:before{content:"\E01A"}.cms-icon-pin:before{content:"\E01B"}.cms-icon-plus-square-o:before{content:"\E01C"}.cms-icon-plus:before{content:"\E01D"}.cms-icon-puzzle:before{content:"\E01E"}.cms-icon-scissors:before{content:"\E01F"}.cms-icon-search:before{content:"\E020"}.cms-icon-sitemap:before{content:"\E021"}.cms-icon-squares:before{content:"\E022"}.cms-icon-window:before{content:"\E023"}.cms-btn{background-image:none;margin-bottom:0;border-radius:3px;background-color:#fff;border:1px solid #ddd}.cms-btn.focus,.cms-btn:focus,.cms-btn:hover{color:#555;background-color:#f2f2f2;border-color:#d0d0d0;text-decoration:none}.cms-btn.cms-btn-active,.cms-btn:active{color:#555;background-color:#e6e6e6;border-color:#c3c3c3;box-shadow:inset 0 3px 5px rgba(0,0,0,.125);background-image:none}.cms-btn.cms-btn-active.focus,.cms-btn.cms-btn-active:focus,.cms-btn.cms-btn-active:hover,.cms-btn:active.focus,.cms-btn:active:focus,.cms-btn:active:hover{color:#555;background-color:#d4d4d4;border-color:#9d9d9d}.cms-btn.cms-btn-disabled,.cms-btn.cms-btn-disabled.cms-btn-active,.cms-btn.cms-btn-disabled.focus,.cms-btn.cms-btn-disabled:active,.cms-btn.cms-btn-disabled:focus,.cms-btn.cms-btn-disabled:hover,.cms-btn[disabled],.cms-btn[disabled].cms-btn-active,.cms-btn[disabled].focus,.cms-btn[disabled]:active,.cms-btn[disabled]:focus,.cms-btn[disabled]:hover{background-color:rgba(255,255,255,.4);border-color:rgba(221,221,221,.4);color:#d4d4d4;cursor:not-allowed;box-shadow:none}.cms-btn.cms-btn-disabled.cms-btn-active:before,.cms-btn.cms-btn-disabled.focus:before,.cms-btn.cms-btn-disabled:active:before,.cms-btn.cms-btn-disabled:before,.cms-btn.cms-btn-disabled:focus:before,.cms-btn.cms-btn-disabled:hover:before,.cms-btn[disabled].cms-btn-active:before,.cms-btn[disabled].focus:before,.cms-btn[disabled]:active:before,.cms-btn[disabled]:before,.cms-btn[disabled]:focus:before,.cms-btn[disabled]:hover:before{color:rgba(85,85,85,.4)}.cms-btn-action{color:#fff;background-color:#0bf;border:1px solid #0bf}.cms-btn-action,.cms-btn-caution{background-image:none;margin-bottom:0;border-radius:3px}.cms-btn-action.focus,.cms-btn-action:focus,.cms-btn-action:hover{color:#fff;background-color:#00a8e6;border-color:#00a8e6;text-decoration:none}.cms-btn-action.cms-btn-active,.cms-btn-action:active{color:#fff;background-color:#0096cc;border-color:#0096cc;box-shadow:inset 0 3px 5px rgba(0,0,0,.125);background-image:none}.cms-btn-action.cms-btn-active.focus,.cms-btn-action.cms-btn-active:focus,.cms-btn-action.cms-btn-active:hover,.cms-btn-action:active.focus,.cms-btn-action:active:focus,.cms-btn-action:active:hover{color:#fff;background-color:#007ba8;border-color:#005e80}.cms-btn-action.cms-btn-disabled,.cms-btn-action.cms-btn-disabled.cms-btn-active,.cms-btn-action.cms-btn-disabled.focus,.cms-btn-action.cms-btn-disabled:active,.cms-btn-action.cms-btn-disabled:focus,.cms-btn-action.cms-btn-disabled:hover,.cms-btn-action[disabled],.cms-btn-action[disabled].cms-btn-active,.cms-btn-action[disabled].focus,.cms-btn-action[disabled]:active,.cms-btn-action[disabled]:focus,.cms-btn-action[disabled]:hover{background-color:rgba(0,187,255,.4);border-color:rgba(0,187,255,.4);color:#fff;cursor:not-allowed;box-shadow:none}.cms-btn-action.cms-btn-disabled.cms-btn-active:before,.cms-btn-action.cms-btn-disabled.focus:before,.cms-btn-action.cms-btn-disabled:active:before,.cms-btn-action.cms-btn-disabled:before,.cms-btn-action.cms-btn-disabled:focus:before,.cms-btn-action.cms-btn-disabled:hover:before,.cms-btn-action[disabled].cms-btn-active:before,.cms-btn-action[disabled].focus:before,.cms-btn-action[disabled]:active:before,.cms-btn-action[disabled]:before,.cms-btn-action[disabled]:focus:before,.cms-btn-action[disabled]:hover:before{color:rgba(255,255,255,.4)}.cms-btn-caution{color:#fff;background-color:#ff4000;border:1px solid #ff4000}.cms-btn-caution.focus,.cms-btn-caution:focus,.cms-btn-caution:hover{color:#fff;background-color:#e63900;border-color:#e63900;text-decoration:none}.cms-btn-caution.cms-btn-active,.cms-btn-caution:active{color:#fff;background-color:#c30;border-color:#c30;box-shadow:inset 0 3px 5px rgba(0,0,0,.125);background-image:none}.cms-btn-caution.cms-btn-active.focus,.cms-btn-caution.cms-btn-active:focus,.cms-btn-caution.cms-btn-active:hover,.cms-btn-caution:active.focus,.cms-btn-caution:active:focus,.cms-btn-caution:active:hover{color:#fff;background-color:#a82a00;border-color:#802000}.cms-btn-caution.cms-btn-disabled,.cms-btn-caution.cms-btn-disabled.cms-btn-active,.cms-btn-caution.cms-btn-disabled.focus,.cms-btn-caution.cms-btn-disabled:active,.cms-btn-caution.cms-btn-disabled:focus,.cms-btn-caution.cms-btn-disabled:hover,.cms-btn-caution[disabled],.cms-btn-caution[disabled].cms-btn-active,.cms-btn-caution[disabled].focus,.cms-btn-caution[disabled]:active,.cms-btn-caution[disabled]:focus,.cms-btn-caution[disabled]:hover{background-color:rgba(255,64,0,.4);border-color:rgba(255,64,0,.4);color:#fff;cursor:not-allowed;box-shadow:none}.cms-btn-caution.cms-btn-disabled.cms-btn-active:before,.cms-btn-caution.cms-btn-disabled.focus:before,.cms-btn-caution.cms-btn-disabled:active:before,.cms-btn-caution.cms-btn-disabled:before,.cms-btn-caution.cms-btn-disabled:focus:before,.cms-btn-caution.cms-btn-disabled:hover:before,.cms-btn-caution[disabled].cms-btn-active:before,.cms-btn-caution[disabled].focus:before,.cms-btn-caution[disabled]:active:before,.cms-btn-caution[disabled]:before,.cms-btn-caution[disabled]:focus:before,.cms-btn-caution[disabled]:hover:before{color:rgba(255,255,255,.4)}.cms-btn{display:inline-block;color:#fff!important;line-height:32px;height:32px;font-size:12px;padding:0 22px}.cms-btn:active,.cms-btn:focus,.cms-btn:hover{color:#fff!important}.cms-hidden,.hidden{display:none!important}.cms-clear,.cms-clear-mobile{clear:both;overflow:hidden}.jstree li{-ms-touch-action:none;touch-action:none}.cms-pagetree{box-shadow:0 0 10px rgba(0,0,0,.25);border:1px solid #ddd}.cms-pagetree-header{position:relative;z-index:101;min-height:34px;padding:15px 20px;margin:-40px 0 0;box-shadow:0 0 5px 0 rgba(0,0,0,.2);background:#f7f7f7}.cms-pagetree-header:before{content:"";position:absolute;bottom:-6px;left:0;right:0;height:5px;background-color:#fff}.cms-admin-sideframe .cms-pagetree-header{margin-top:-25px}.cms-pagetree-header-title{padding-top:6px;margin:0 0 5px!important}.cms-pagetree-header-title span{font-weight:400}.cms-pagetree-header-search{padding:0;margin:5px 0 10px;box-shadow:none;background:0 0}@media (min-width:520px){.cms-clear-mobile{display:none}.cms-pagetree-header-title{float:left}.cms-pagetree-header-body{float:right}.cms-pagetree-header-search{float:left;margin:-3px 0}}.cms-pagetree-header-search .cms-pagetree-header-search-btn{position:relative;top:3px;outline:0;color:#fff!important;padding:8px 10px!important;margin-left:5px;border:none!important;background:#0bf!important}.cms-pagetree-header-search .cms-pagetree-header-search-btn:hover{background:#00a8e6!important}.cms-pagetree-header-search .cms-pagetree-header-search-btn:active,.cms-pagetree-header-search .cms-pagetree-header-search-btn:focus{color:#fff!important;background:#0083b3!important}.cms-pagetree-header-search .cms-pagetree-header-filter{position:relative;float:left}.cms-pagetree-header-search .cms-pagetree-header-filter input{width:168px!important;padding-right:35px!important;margin-top:2px;transition:width 200ms}@media (min-width:520px){.cms-pagetree-header-search .cms-pagetree-header-filter-active input{width:336px!important}}.cms-pagetree-header-filter-trigger{position:absolute;right:0;top:0;cursor:pointer;padding:10px;-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.cms-pagetree-header-filter-trigger:active .cms-icon,.cms-pagetree-header-filter-trigger:focus .cms-icon,.cms-pagetree-header-filter-trigger:hover .cms-icon{color:#0bf}.cms-pagetree-header-filter-trigger .cms-icon{font-size:11px;color:#666}.cms-pagetree-header-filter-container{display:none;overflow:auto;position:absolute;left:0;top:38px;width:100%;padding:5px 20px 15px;max-height:400px;box-shadow:0 0 5px 0 rgba(0,0,0,.2);box-sizing:border-box;border-radius:3px;background:#fff}.cms-pagetree-header-filter-container h3{color:#666;font-size:14px;font-weight:400;text-transform:uppercase;padding:10px 0 0}.cms-pagetree-header-filter-container li,.cms-pagetree-header-filter-container ul{list-style-type:none;padding:2px 0;margin:0}.cms-pagetree-header-filter-container li a{color:#999}.cms-pagetree-header-filter-container .selected a{color:#0bf;font-weight:700}.cms-pagetree-header-search-close{position:absolute;right:0;top:0;padding:10px}.cms-pagetree-header-search-close:active .cms-icon,.cms-pagetree-header-search-close:focus .cms-icon,.cms-pagetree-header-search-close:hover .cms-icon{color:#0bf}.cms-pagetree-header-search-close .cms-icon{font-size:12px;color:#666}.cms-pagetree-header-search-reset{float:left;font-size:90%;padding:7px 10px}.cms-pagetree-dropdown-menu{float:right;padding-left:10px;margin-left:10px}.cms-pagetree-dropdown-menu .cms-pagetree-dropdown-container{right:-1px;top:30px;min-width:205px}.cms-pagetree-dropdown-menu .cms-pagetree-dropdown-container a{padding:5px 20px}.cms-pagetree-dropdown-menu .cms-pagetree-dropdown-container .active{font-weight:700}.cms-pagetree-dropdown-menu .cms-pagetree-dropdown-container:before{margin-left:-24px;margin-top:-9px}.cms-pagetree-dropdown-menu .cms-pagetree-dropdown-trigger{float:left;color:#666!important;padding:9px 10px 4px}@media (min-width:520px){.cms-pagetree-dropdown-menu{float:left}.cms-pagetree-header-create{float:left;margin-left:20px}}.cms-pagetree-breadcrumbs{margin-bottom:-30px!important;border:none!important}.cms-pagetree-section{position:relative;z-index:11;min-height:15px;padding:15px 20px;box-shadow:0 0 5px 0 rgba(0,0,0,.2);border-top:none;border-bottom:none;background:#fff}.cms-pagetree-section h2,.cms-pagetree-section p{padding:0;margin:0;border:none}.cms-pagetree-section h2{float:left;font-weight:700}.cms-pagetree-section-nav,.cms-tree-reload{float:right}.cms-pagetree-dropdown{position:relative}.cms-pagetree-dropdown-container{display:none;position:absolute;z-index:1002;right:-2px;top:25px;padding:4px 0;min-width:180px;background:#fff;border-radius:5px;box-shadow:0 0 10px rgba(0,0,0,.25);-webkit-transform:translateZ(0);transform:translateZ(0)}.cms-pagetree-dropdown-container a{display:block;color:#666;line-height:1.5;padding:10px 20px}.cms-pagetree-dropdown-container a:active,.cms-pagetree-dropdown-container a:focus,.cms-pagetree-dropdown-container a:hover{color:#fff!important;background:#0bf}.cms-pagetree-dropdown-container .label{display:block;font-weight:400;color:#999;font-size:90%;line-height:1.5;padding:5px 20px 0}.cms-pagetree-dropdown-container li{list-style-type:none;padding:0;margin:0}.cms-pagetree-dropdown-container:before{position:absolute;z-index:-1;content:'';height:10px;margin-left:-5px;transform:rotate(45deg);background-color:#fff}.cms-pagetree-dropdown-container:before,.cms-tree-tooltip-container:before{left:100%;width:10px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg)}.cms-pagetree-dropdown-separator{padding:0;margin:4px 1px!important;line-height:1;height:1px;background:#ddd}.cms-pagetree-container{position:relative;z-index:1;margin-bottom:25px;border:1px solid #ddd;border-top:none;border-bottom:none}.cms-tree-col{height:24px}.cms-tree-item{display:inline-block}.cms-tree-tooltip-container{display:none;position:absolute;right:25px;top:-5px;z-index:100;text-align:left;border-radius:3px;background:#fff;border:1px solid #ddd}.cms-tree-tooltip-container:before{content:"";position:absolute;top:7px;z-index:1;height:10px;margin-left:-5px;transform:rotate(45deg);box-shadow:0 0 10px rgba(0,0,0,.25);background-color:#fff}.cms-tree-tooltip-container h3{position:relative;z-index:10;color:#999;font-size:12px;font-weight:400;text-transform:uppercase;padding:2px 10px;margin:0!important;border-bottom:1px solid #ddd;background:#fff}.cms-tree-tooltip-container a{display:block;padding:10px;min-width:130px;text-transform:none;border-bottom:1px solid #ddd}.cms-tree-tooltip-container a:hover,.cms-tree-tooltip-container a:link:hover{color:#0096cc!important}.cms-tree-tooltip-container a:last-child{border:none}.cms-tree-tooltip-container .cms-icon{position:relative;top:3px;left:-1px}.cms-tree-tooltip-container-open{display:block}.cms-tree-tooltip-wrapper{padding:10px}.cms-tree-item-icons{position:relative;top:5px;padding:0 3px}.cms-tree-item-icons span:before{color:#999}.cms-tree-item-icons-dark span:before{color:#454545}.cms-tree-item-preview{position:relative;top:2px;left:3px}.cms-tree-item-preview a{font-size:18px}.cms-tree-item-preview a:before{content:"\E00C";color:#454545}.cms-tree-item-preview a:hover:before,.cms-tree-item-preview-active a:before{color:#000}.cms-tree-item-preview span{display:inline-block;text-indent:-119988px;overflow:hidden;text-align:left}.cms-tree-item-lang{position:relative;top:5px}.cms-tree-item-lang .cms-tree-tooltip-container{right:22px}.cms-tree-lang-container span{box-sizing:border-box;display:inline-block;width:15px;height:15px;border-radius:100%;border:1px solid #fff;background:#fff}.cms-tree-lang-container span.empty{border-color:#999;background-color:#fff}.cms-tree-lang-container span.unpublished,.cms-tree-lang-container span.unpublishedparent{border-color:#999;background-color:#999}.cms-tree-lang-container span.published{border-color:#693;background-color:#693}.cms-tree-lang-container span.dirty{-webkit-animation:pulsate 2.5s ease-out infinite;animation:pulsate 2.5s ease-out infinite;border-color:#0bf;background-color:#0bf}@-webkit-keyframes pulsate{0%,100%{opacity:.5}50%{opacity:1}}@keyframes pulsate{0%,100%{opacity:.5}50%{opacity:1}}.cms-tree-item-menu{position:relative;top:4px}.cms-tree-item-menu .cms-icon:before{font-size:14px;color:#454545}.cms-tree-item-menu .cms-icon-check-square:before{color:#693}.cms-tree-item-info{position:relative;top:5px;left:1px}.cms-tree-item-info .cms-icon:before{font-size:18px}.cms-tree-item-info p{color:#333;padding:0;margin:0}.cms-tree-item-info strong{color:#999;font-weight:400}.cms-tree-search{float:left;margin-right:5px}.cms-tree-search label{display:none!important}.cms-tree-search select{position:relative;top:2px;width:175px!important}.cms-tree-search #toolbar form#changelist-search input[type=submit]{margin-left:0!important}.cms-tree-search #toolbar form#changelist-search #searchbar{width:175px!important}.cms-tree-filters{float:right}.cms-tree-filters .js-cms-tree-filter-trigger{position:absolute;top:0;right:0;padding-right:20px;line-height:30px;width:175px;border-bottom:1px solid #ddd}.cms-tree-filters h2{display:none}.cms-pagetree-empty{padding:15px 20px;border-top:none}.cms-pagetree-empty .addlink{padding-left:0}.cms-tree-col{line-height:16px}.jstree-django-cms{-webkit-tap-highlight-color:transparent}.jstree-django-cms .jstree-children,.jstree-django-cms .jstree-container-ul,.jstree-django-cms .jstree-leaf,.jstree-django-cms .jstree-node{list-style-type:none;padding:0;margin:0}.jstree-django-cms .jstree-grid-header,.jstree-django-cms .jstree-grid-separator{padding:0;margin:0;margin-left:0!important;border:none;background:0 0}.jstree-django-cms.jstree-grid-cell{padding:0}.jstree-django-cms .jstree-grid-cell,.jstree-django-cms .jstree-grid-column{box-sizing:border-box;overflow:visible}.jstree-grid-wrapper{box-sizing:border-box;overflow:visible!important;width:100%!important;background:#f2f2f2}.jstree-django-cms .jstree{padding-left:10px}.jstree-django-cms .jstree-grid-header{font-size:12px;font-color:#666;text-align:center;padding:3px 6px;border-bottom:1px solid #ddd;background:#fff}.jstree-django-cms .jstree-grid-column-0 .jstree-grid-header{text-align:left!important}.jstree-django-cms .jstree-children,.jstree-django-cms .jstree-container-ul{margin-left:20px}.jstree-django-cms .jstree-ocl{float:left;position:relative;left:-20px;font-size:12px;color:#999;padding:15px 10px 10px 0}.jstree-django-cms .jstree-closed>.jstree-ocl,.jstree-django-cms .jstree-open>.jstree-ocl{cursor:pointer}.jstree-django-cms .jstree-closed>.jstree-ocl:after,.jstree-django-cms .jstree-open>.jstree-ocl:after{content:"";display:block;position:absolute;right:2px;top:20px;width:8px;height:2px;background:#ddd}.jstree-django-cms .jstree-open>.jstree-ocl:before{content:"\E016"}.jstree-django-cms .jstree-closed>.jstree-ocl:before{content:"\E01C"}.jstree-django-cms .jstree-loading>.jstree-ocl:before{content:"\E011";-webkit-animation:cms-spin 2s infinite linear;animation:cms-spin 2s infinite linear}.jstree-django-cms .jstree-anchor{box-sizing:border-box;display:block;cursor:move;outline:0;color:#666;height:41px;padding:9px 25px;margin-top:-1px;border:1px solid #ddd;border-right:none;background:url(../img/pagetree/tree-li-drag.gif) -1px center no-repeat #fff}.jstree-django-cms .jstree-anchor:hover{color:#666!important}.jstree-django-cms .cms-tree-node-filtered .jstree-anchor{cursor:default}.jstree-django-cms .jstree-grid-cell{height:40px;border-bottom:1px solid #ddd;background:#fff}.jstree-django-cms .jstree-grid-cell.jstree-django-cms{height:auto;border:none;background:0 0}.jstree-django-cms .jstree-grid-cell-regular{text-align:center;padding:7px 8px;border-left:1px solid #ddd}.jstree-django-cms .jstree-grid-cell-regular-options{border-left:none;text-align:right}.jstree-django-cms .jstree-clicked,.jstree-django-cms .jstree-hovered{background-color:#fafafa}.jstree-django-cms .jstree-grid-column-1 .jstree-grid-header{text-align:right}.jstree-django-cms .jstree-grid-column-1 .jstree-grid-header a{font-size:12px;top:0}.jstree-django-cms .jstree-grid-column-1 .jstree-grid-header span{line-height:1}.jstree-django-cms .jstree-grid-column-1 .jstree-grid-header .cms-icon{font-size:12px;padding-right:5px;margin-left:5px}.jstree.jstree-loading .jstree-container-ul{margin:0}.jstree.jstree-loading .jstree-anchor{padding-top:13px;padding-left:15px;border:none;background:0 0}.jstree.jstree-loading .jstree-loading>.jstree-ocl{display:none}.cms-tree-node-success>.jstree-anchor .jstree-themeicon{content:"";position:relative;top:4px;color:#693}.cms-tree-node-success>.jstree-anchor .jstree-themeicon:before{content:"\E008"}.cms-tree-item-helpers a{position:relative;top:2px;font-size:14px}.cms-tree-item-helpers a .cms-icon{position:relative;top:1px;font-size:12px}#jstree-dnd{box-sizing:border-box;display:block;min-width:300px;height:40px;padding:9px 25px!important;margin-left:-5px;border:1px solid #ddd;background:#fff}#jstree-dnd .jstree-copy{color:#fff;padding:0 5px 2px;margin-left:5px;border-radius:3px;background:#999}#jstree-dnd .jstree-er,#jstree-dnd .jstree-ok{position:absolute;top:0;left:-5px;width:5px;height:100%;background:#ddd}#jstree-dnd .jstree-ok{background-color:#693}#jstree-dnd .jstree-er{background-color:red}#jstree-marker{position:absolute;margin:-6px 0 0;border-right:0;border-top:6px solid transparent;border-bottom:6px solid transparent;border-left:6px solid #000;width:0;height:0} +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvX2J1dHRvbi5zY3NzIiwibWl4aW5zL19idXR0b25zLnNjc3MiLCJjb21wb25lbnRzL19pY29ub2dyYXBoeS5zY3NzIiwiY21zLnBhZ2V0cmVlLmNzcyIsImNvbXBvbmVudHMvX3BhZ2V0cmVlLnNjc3MiLCJtaXhpbnMvX2N1c3RvbS5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBR0EsU0FJQSxnQkFHQSxpQkNRSSxtQkFBQSxLQ2RKLFdBQ0ksWUFBQSxzQkFDQSxJQUFBLDhDQUNBLElBQUEsb0RBQUEsY0FBQSxnREFBQSxnQkFBQSwrQ0FBQSxlQUFBLDhDQUFBLG1CQUFBLGtFQUFBLGNBS0EsWUFBQSxJQUNBLFdBQUEsT0FHRyxVQUFBLHlCQUFBLHdEQUFBLCtCQUNILFFBQUEsYUFDQSxLQUFBLE9BQUEsT0FBQSxPQUFBLEtBQUEsRUFBQSxvQkFDQSxlQUFBLEtBQ0Esa0JBQUEsZUFBQSxjQUFBLGVBQUEsVUFBQSxlQUNBLHVCQUFBLFlBQ0Esd0JBQUEsVUFzSHFDLHVCQUVqQyxRQUFBLFFBRmlDLDZCQUVqQyxRQUFBLFFBRmlDLDRCQUVqQyxRQUFBLFFBRmlDLHVCQUVqQyxRQUFBLFFBRmlDLHFCQUVqQyxRQUFBLFFBRmlDLHlCQUVqQyxRQUFBLFFBRmlDLDhCQUVqQyxRQUFBLFFBRmlDLHVCQUVqQyxRQUFBLFFBRmlDLHVCQUVqQyxRQUFBLFFBRmlDLHNCQUVqQyxRQUFBLFFBRmlDLHNCQUVqQyxRQUFBLFFBRmlDLHFCQUVqQyxRQUFBLFFBRmlDLDJCQUVqQyxRQUFBLFFBRmlDLHlCQUVqQyxRQUFBLFFBRmlDLHNCQUVqQyxRQUFBLFFBRmlDLHNCQUVqQyxRQUFBLFFBRmlDLHdCQUVqQyxRQUFBLFFBRmlDLHNCQUVqQyxRQUFBLFFBRmlDLHNCQUVqQyxRQUFBLFFBRmlDLHNCQUVqQyxRQUFBLFFBRmlDLDBCQUVqQyxRQUFBLFFBRmlDLGdDQUVqQyxRQUFBLFFBRmlDLDhCQUVqQyxRQUFBLFFBRmlDLHVCQUVqQyxRQUFBLFFBRmlDLHVCQUVqQyxRQUFBLFFBRmlDLHdCQUVqQyxRQUFBLFFBRmlDLHFCQUVqQyxRQUFBLFFBRmlDLCtCQUVqQyxRQUFBLFFBRmlDLHNCQUVqQyxRQUFBLFFBRmlDLHdCQUVqQyxRQUFBLFFBRmlDLDBCQUVqQyxRQUFBLFFBRmlDLHdCQUVqQyxRQUFBLFFBRmlDLHlCQUVqQyxRQUFBLFFBRmlDLHlCQUVqQyxRQUFBLFFBRmlDLHdCQUVqQyxRQUFBLFFGM0lSLFNDU0ksaUJBQUEsS0FDQSxjQUFBLEVBQ0EsY0FBQSxJQUVBLGlCQUFBLEtBQ0EsT0FBQSxJQUFBLE1BQUEsS0VxSEYsZUZqSEcsZUFNQSxlQUxHLE1BQUEsS0FDQSxpQkFBQSxRQUNBLGFBQUEsUUFDQSxnQkFBQSxLRXdITix3QkYvR0csZ0JBQ0csTUFBQSxLQUNBLGlCQUFBLFFBQ0EsYUFBQSxRQUNBLFdBQUEsTUFBQSxFQUFBLElBQUEsSUFBQSxpQkFZQSxpQkFBQSxLRXlHSiw4QkFEQSw4QkFEQSw4QkFEQSxzQkFEQSxzQkY3R0ssc0JBQ0csTUFBQSxLQUNBLGlCQUFBLFFBQ0EsYUFBQSxRQWNILDBCRTRHUCx5Q0FGQSxnQ0FDQSxpQ0FGQSxnQ0FEQSxnQ0FLQSxtQkFLQSxrQ0FGQSx5QkFDQSwwQkFGQSx5QkFEQSx5QkY3R1UsaUJBQUEscUJBQ0EsYUFBQSxxQkFDQSxNQUFBLFFBQ0EsT0FBQSxZQUNBLFdBQUEsS0V3SFIsZ0RBRkEsdUNBQ0Esd0NGdEhTLGlDRW9IVCx1Q0FEQSx1Q0FVQSx5Q0FGQSxnQ0FDQSxpQ0FKQSwwQkFFQSxnQ0FEQSxnQ0Z4SFksTUFBQSxrQkQzRGhCLGdCQ1FJLE1BQUEsS0FDQSxpQkFBQSxLQUNBLE9BQUEsSUFBQSxNQUFBLEtEVkosZ0JBR0EsaUJDd0NRLGlCQUFBLEtBckNKLGNBQUEsRUFDQSxjQUFBLElFNExGLHNCRnJMRyxzQkFNQSxzQkFMRyxNQUFBLEtBQ0EsaUJBQUEsUUFDQSxhQUFBLFFBQ0EsZ0JBQUEsS0U0TE4sK0JGbkxHLHVCQUNHLE1BQUEsS0FDQSxpQkFBQSxRQUNBLGFBQUEsUUFDQSxXQUFBLE1BQUEsRUFBQSxJQUFBLElBQUEsaUJBWUEsaUJBQUEsS0U2S0oscUNBREEscUNBREEscUNBREEsNkJBREEsNkJGakxLLDZCQUNHLE1BQUEsS0FDQSxpQkFBQSxRQUNBLGFBQUEsUUFjSCxpQ0VnTFAsZ0RBRkEsdUNBQ0Esd0NBRkEsdUNBREEsdUNBS0EsMEJBS0EseUNBRkEsZ0NBQ0EsaUNBRkEsZ0NBREEsZ0NGakxVLGlCQUFBLG1CQUNBLGFBQUEsbUJBQ0EsTUFBQSxLQUNBLE9BQUEsWUFDQSxXQUFBLEtFNExSLHVEQUZBLDhDQUNBLCtDRjFMUyx3Q0V3TFQsOENBREEsOENBVUEsZ0RBRkEsdUNBQ0Esd0NBSkEsaUNBRUEsdUNBREEsdUNGNUxZLE1BQUEscUJEeERoQixpQkNLSSxNQUFBLEtBQ0EsaUJBQUEsUUFDQSxPQUFBLElBQUEsTUFBQSxRRTZQRix1QkZ6UEcsdUJBTUEsdUJBTEcsTUFBQSxLQUNBLGlCQUFBLFFBQ0EsYUFBQSxRQUNBLGdCQUFBLEtFZ1FOLGdDRnZQRyx3QkFDRyxNQUFBLEtBQ0EsaUJBQUEsS0FDQSxhQUFBLEtBQ0EsV0FBQSxNQUFBLEVBQUEsSUFBQSxJQUFBLGlCQVlBLGlCQUFBLEtFaVBKLHNDQURBLHNDQURBLHNDQURBLDhCQURBLDhCRnJQSyw4QkFDRyxNQUFBLEtBQ0EsaUJBQUEsUUFDQSxhQUFBLFFBY0gsa0NFb1BQLGlEQUZBLHdDQUNBLHlDQUZBLHdDQURBLHdDQUtBLDJCQUtBLDBDQUZBLGlDQUNBLGtDQUZBLGlDQURBLGlDRnJQVSxpQkFBQSxrQkFDQSxhQUFBLGtCQUNBLE1BQUEsS0FDQSxPQUFBLFlBQ0EsV0FBQSxLRWdRUix3REFGQSwrQ0FDQSxnREY5UFMseUNFNFBULCtDQURBLCtDQVVBLGlEQUZBLHdDQUNBLHlDQUpBLGtDQUVBLHdDQURBLHdDRmhRWSxNQUFBLHFCRzNEaEIsU0FDSSxRQUFBLGFBQ0EsTUFBQSxlQUNBLFlBQUEsS0FDQSxPQUFBLEtBQ0EsVUFBQSxLQUNBLFFBQUEsRUFBQSxLRG9VRixnQkFDQSxlQ2xVRyxlQUNHLE1BQUEsZUFLUixZRGdVQSxRQy9USSxRQUFBLGVBRUosV0FJQSxrQkFISSxNQUFBLEtBQ0EsU0FBQSxPQVlJLFdBQ0osaUJBQUEsS0FDQSxhQUFBLEtBTUosY0FDSSxXQUFBLEVBQUEsRUFBQSxLQUFBLGdCQUNBLE9BQUEsSUFBQSxNQUFBLEtBTUoscUJBQ0ksU0FBQSxTQUNBLFFBQUEsSUFDQSxXQUFBLEtBQ0EsUUFBQSxLQUFBLEtBQ0EsT0FBQSxNQUFBLEVBQUEsRUFDQSxXQUFBLEVBQUEsRUFBQSxJQUFBLEVBQUEsZUFDQSxXQUFBLFFBQ0MsNEJBQ0csUUFBQSxHQUNBLFNBQUEsU0FDQSxPQUFBLEtBQ0EsS0FBQSxFQUNBLE1BQUEsRUFDQSxPQUFBLElBQ0EsaUJBQUEsS0FHYSwwQ0FDakIsV0FBQSxNQUdKLDJCQUNJLFlBQUEsSUFDQSxPQUFBLEVBQUEsRUFBQSxjQUlBLGdDQUNJLFlBQUEsSUFXUiw0QkFDSSxRQUFBLEVBQ0EsT0FBQSxJQUFBLEVBQUEsS0FDQSxXQUFBLEtBQ0EsZUFDQSx5QkF2RUosa0JBSVEsUUFBQSxLQTRDUiwyQkFJUSxNQUFBLEtBT1IsMEJBRVEsTUFBQSxNQUtSLDRCQU1RLE1BQUEsS0FDQSxPQUFBLEtBQUEsR0FFSiw0REFDSSxTQUFBLFNBQ0EsSUFBQSxJQUNBLFFBQUEsRUFDQSxNQUFBLGVBQ0EsUUFBQSxJQUFBLGVBQ0EsWUFBQSxJQUNBLE9BQUEsZUFDQSxXQUFBLGVBQ0Msa0VBQ0csV0FBQSxrQkFHSCxtRUQ2U0wsa0VDNVNRLE1BQUEsZUFDQSxXQUFBLGtCQUdSLHdEQUNJLFNBQUEsU0FDQSxNQUFBLEtBQ0EsOERBQ0ksTUFBQSxnQkFDQSxjQUFBLGVBQ0EsV0FBQSxJQUNBLFdBQUEsTUFBQSxNQUtKLHlCQUQrQixxRUFFM0IsTUFBQSxpQkFJWixvQ0FDSSxTQUFBLFNBQ0EsTUFBQSxFQUNBLElBQUEsRUFDQSxPQUFBLFFBQ0EsUUFBQSxLQUNBLGtCQUFBLGVBQUEsY0FBQSxlQUFBLFVBQUEsZUQwU0YscURBQ0Esb0RDeFNVLG9EQUNKLE1BQUEsS0FFSiw4Q0FDSSxVQUFBLEtBQ0EsTUFBQSxLQUdSLHNDQUNJLFFBQUEsS0FDQSxTQUFBLEtBQ0EsU0FBQSxTQUNBLEtBQUEsRUFDQSxJQUFBLEtBQ0EsTUFBQSxLQUNBLFFBQUEsSUFBQSxLQUFBLEtBQ0EsV0FBQSxNQUNBLFdBQUEsRUFBQSxFQUFBLElBQUEsRUFBQSxlQUNBLFdBQUEsV0FDQSxjQUFBLElBQ0EsV0FBQSxLQUNBLHlDQUNJLE1BQUEsS0FDQSxVQUFBLEtBQ0EsWUFBQSxJQUNBLGVBQUEsVUFDQSxRQUFBLEtBQUEsRUFBQSxFRHdTTix5Q0NyU0UseUNBQ0ksZ0JBQUEsS0FDQSxRQUFBLElBQUEsRUFDQSxPQUFBLEVBR0QsMkNBQ0MsTUFBQSxLQUVNLGtEQUNOLE1BQUEsS0FDQSxZQUFBLElBR1Isa0NBQ0ksU0FBQSxTQUNBLE1BQUEsRUFDQSxJQUFBLEVBQ0EsUUFBQSxLRG1TRixtREFDQSxrRENqU1Usa0RBQ0osTUFBQSxLQUVKLDRDQUNJLFVBQUEsS0FDQSxNQUFBLEtBR1Isa0NBQ0ksTUFBQSxLQUNBLFVBQUEsSUFDQSxRQUFBLElBQUEsS0FJSiw0QkFDSSxNQUFBLE1BQ0EsYUFBQSxLQUNBLFlBQUEsS0FLQSw2REFDSSxNQUFBLEtBQ0EsSUFBQSxLQUNBLFVBQUEsTUFDQSwrREFDSSxRQUFBLElBQUEsS0FFSixxRUFDSSxZQUFBLElBR0gsb0VBQ0csWUFBQSxNQUNBLFdBQUEsS0FJUiwyREFDSSxNQUFBLEtBQ0EsTUFBQSxlQUNBLFFBQUEsSUFBQSxLQUFBLElBS0oseUJBakNKLDRCQUtRLE1BQUEsS0EyQlIsNEJBRVEsTUFBQSxLQUNBLFlBQUEsTUFLUiwwQkFDSSxjQUFBLGdCQUNBLE9BQUEsZUFNSixzQkFDSSxTQUFBLFNBQ0EsUUFBQSxHQUNBLFdBQUEsS0FDQSxRQUFBLEtBQUEsS0FDQSxXQUFBLEVBQUEsRUFBQSxJQUFBLEVBQUEsZUFDQSxXQUFBLEtBQ0EsY0FBQSxLQUNBLFdBQUEsS0FFQSx5QkQ2UUYsd0JDNVFNLFFBQUEsRUFDQSxPQUFBLEVBQ0EsT0FBQSxLQUVKLHlCQUNJLE1BQUEsS0FDQSxZQUFBLElBR1IsMEJBK0ZBLGlCQUNJLE1BQUEsTUF6RkosdUJBQ0ksU0FBQSxTQUdKLGlDQUVJLFFBQUEsS0FDQSxTQUFBLFNBQ0EsUUFBQSxLQUNBLE1BQUEsS0FDQSxJQUFBLEtBQ0EsUUFBQSxJQUFBLEVBQ0EsVUFBQSxNQUNBLFdBQUEsS0FDQSxjQUFBLElBQ0EsV0FBQSxFQUFBLEVBQUEsS0FBQSxnQkFDQSxrQkFBQSxjQUFBLFVBQUEsY0FFQSxtQ0FDSSxRQUFBLE1BQ0EsTUFBQSxLQUNBLFlBQUEsSUFDQSxRQUFBLEtBQUEsS0R1UUosMENBQ0EseUNDclFLLHlDQUNHLE1BQUEsZUFDQSxXQUFBLEtBSVIsd0NBQ0ksUUFBQSxNQUNBLFlBQUEsSUFDQSxNQUFBLEtBQ0EsVUFBQSxJQUNBLFlBQUEsSUFDQSxRQUFBLElBQUEsS0FBQSxFQUdKLG9DQUNJLGdCQUFBLEtBQ0EsUUFBQSxFQUNBLE9BQUEsRUFJSCx3Q0FDRyxTQUFBLFNBQ0EsUUFBQSxHQUNBLFFBQUEsR0FHQSxPQUFBLEtBQ0EsWUFBQSxLQUNBLFVBQUEsY0FDQSxpQkFBQSxLQVRILHdDQTREQSxtQ0FHRyxLQUFBLEtBR0EsTUFBQSxLQUdBLGtCQUFBLGNBQUEsY0FBQSxjQXhEUixpQ0FDSSxRQUFBLEVBQ0EsT0FBQSxJQUFBLGNBQ0EsWUFBQSxFQUNBLE9BQUEsSUFDQSxXQUFBLEtBS0osd0JBRUksU0FBQSxTQUNBLFFBQUEsRUFDQSxjQUFBLEtBQ0EsT0FBQSxJQUFBLE1BQUEsS0FDQSxXQUFBLEtBQ0EsY0FBQSxLQUdKLGNBQ0ksT0FBQSxLQUdKLGVBQ0ksUUFBQSxhQVVKLDRCQUNJLFFBQUEsS0FDQSxTQUFBLFNBQ0EsTUFBQSxLQUNBLElBQUEsS0FDQSxRQUFBLElBQ0EsV0FBQSxLQUNBLGNBQUEsSUFDQSxXQUFBLEtBQ0EsT0FBQSxJQUFBLE1BQUEsS0FHQyxtQ0FDRyxRQUFBLEdBQ0EsU0FBQSxTQUVBLElBQUEsSUFDQSxRQUFBLEVBRUEsT0FBQSxLQUNBLFlBQUEsS0FDQSxVQUFBLGNBQ0EsV0FBQSxFQUFBLEVBQUEsS0FBQSxnQkFDQSxpQkFBQSxLQUdKLCtCQUNJLFNBQUEsU0FDQSxRQUFBLEdBQ0EsTUFBQSxLQUNBLFVBQUEsS0FDQSxZQUFBLElBQ0EsZUFBQSxVQUNBLFFBQUEsSUFBQSxLQUNBLE9BQUEsWUFDQSxjQUFBLElBQUEsTUFBQSxLQUNBLFdBQUEsS0FHSiw4QkFDSSxRQUFBLE1BQ0EsUUFBQSxLQUNBLFVBQUEsTUFDQSxlQUFBLEtBQ0EsY0FBQSxJQUFBLE1BQUEsS0FHTSxvQ0Q2T1YseUNDNU9RLE1BQUEsa0JBRUgseUNBQ0csT0FBQSxLQUlSLHNDQUNJLFNBQUEsU0FDQSxJQUFBLElBQ0EsS0FBQSxLQUdILGlDQUNHLFFBQUEsTUFHUiwwQkFDSSxRQUFBLEtBTUoscUJBQ0ksU0FBQSxTQUNBLElBQUEsSUFDQSxRQUFBLEVBQUEsSUFFSSxpQ0FDQSxNQUFBLEtBR08sc0NBQ1AsTUFBQSxRQU9SLHVCQUNJLFNBQUEsU0FFQSxJQUFBLElBQ0EsS0FBQSxJQUVBLHlCQUdJLFVBQUEsS0ZyVmlDLGdDQUVqQyxRQUFBLFFFc1ZJLE1BQUEsUUFFRyxzQ0FVRCx1Q0FDTixNQUFBLEtBUEosNEJBQ0ksUUFBQSxhQ3BlSixZQUFBLFVBQ0EsU0FBQSxPQUNBLFdBQUEsS0QrZUosb0JBRUksU0FBQSxTQUNBLElBQUEsSUFDQSxnREFDSSxNQUFBLEtBR2lCLDhCQUNyQixXQUFBLFdBQ0EsUUFBQSxhQUNBLE1BQUEsS0FDQSxPQUFBLEtBQ0EsY0FBQSxLQUVBLE9BQUEsSUFBQSxNQUFBLEtBQ0EsV0FBQSxLQUNDLG9DQUNHLGFBQUEsS0FDQSxpQkFBQSxLQUdILDBDRDBNSCxnREN6TU0sYUFBQSxLQUNBLGlCQUFBLEtBRUgsd0NBQ0csYUFBQSxLQUNBLGlCQUFBLEtBRUgsb0NBQ0csa0JBQUEsUUFBQSxLQUFBLFNBQUEsU0FBQSxVQUFBLFFBQUEsS0FBQSxTQUFBLFNBQ0EsYUFBQSxLQUNBLGlCQUFBLEtBS1IsMkJBQ0ksR0FNQSxLQUxJLFFBQUEsR0FFSixJQUNJLFFBQUEsR0FMUixtQkFDSSxHQU1BLEtBTEksUUFBQSxHQUVKLElBQ0ksUUFBQSxHQVVSLG9CQUNJLFNBQUEsU0FDQSxJQUFBLElBRVMscUNBQ0wsVUFBQSxLQUNBLE1BQUEsUUFFa0Isa0RBQ2xCLE1BQUEsS0FPUixvQkFDSSxTQUFBLFNBQ0EsSUFBQSxJQUNBLEtBQUEsSUFFUyxxQ0FDTCxVQUFBLEtBR0osc0JBQ0ksTUFBQSxLQUNBLFFBQUEsRUFDQSxPQUFBLEVBRUosMkJBQ0ksTUFBQSxLQUNBLFlBQUEsSUFPUixpQkFDSSxNQUFBLEtBQ0EsYUFBQSxJQUNBLHVCQUNJLFFBQUEsZUFFSix3QkFDSSxTQUFBLFNBQ0EsSUFBQSxJQUNBLE1BQUEsZ0JBRytDLG9FQUMvQyxZQUFBLFlBRTRCLDREQUM1QixNQUFBLGdCQUdSLGtCQUNJLE1BQUEsTUFDQSw4Q0FDSSxTQUFBLFNBQ0EsSUFBQSxFQUNBLE1BQUEsRUFDQSxjQUFBLEtBQ0EsWUFBQSxLQUNBLE1BQUEsTUFDQSxjQUFBLElBQUEsTUFBQSxLQUVKLHFCQUNJLFFBQUEsS0FRUixvQkFDSSxRQUFBLEtBQUEsS0FDQSxXQUFBLEtBQ0EsNkJBQ0ksYUFBQSxFQUtSLGNBQ0ksWUFBQSxLQVNKLG1CQWtDSSw0QkFBQSxZRGtJRixvQ0M5SkUsd0NEK0pGLGdDQUNBLGdDQy9KTSxnQkFBQSxLQUNBLFFBQUEsRUFDQSxPQUFBLEVBS0osdUNENkpGLDBDQzVKTSxRQUFBLEVBQ0EsT0FBQSxFQUVBLFlBQUEsWUFDQSxPQUFBLEtBQ0EsZUFFSCxvQ0FDRyxRQUFBLEVENkpOLHFDQ3hKRSx1Q0FDSSxXQUFBLFdBQ0EsU0FBQSxRQVFSLHFCQUNJLFdBQUEsV0FDQSxTQUFBLGtCQUNBLE1BQUEsZUFRQSxXQUFBLFFBS0EsMkJBQ0ksYUFBQSxLQUdKLHVDQUNJLFVBQUEsS0FDQSxXQUFBLEtBQ0EsV0FBQSxPQUNBLFFBQUEsSUFBQSxJQUNBLGNBQUEsSUFBQSxNQUFBLEtBQ0EsV0FBQSxLQUdrQiw2REFDbEIsV0FBQSxlQVFKLG9DQUhBLHdDQUNJLFlBQUEsS0FLSiwrQkFDSSxNQUFBLEtBQ0EsU0FBQSxTQUNBLEtBQUEsTUFDQSxVQUFBLEtBQ0EsTUFBQSxLQUNBLFFBQUEsS0FBQSxLQUFBLEtBQUEsRUR3SVIsOENDcElxQiw0Q0FDYixPQUFBLFFEc0lOLG9EQ3JJTyxrREFDRyxRQUFBLEdBQ0EsUUFBQSxNQUNBLFNBQUEsU0FDQSxNQUFBLElBQ0EsSUFBQSxLQUNBLE1BQUEsSUFDQSxPQUFBLElBQ0EsV0FBQSxLRnJtQjZCLG1EQUVqQyxRQUFBLFFBRmlDLHFEQUVqQyxRQUFBLFFBRmlDLHNEQUVqQyxRQUFBLFFFK21CSSxrQkFBQSxTQUFBLEdBQUEsU0FBQSxPQUFBLFVBQUEsU0FBQSxHQUFBLFNBQUEsT0FPUixrQ0FDSSxXQUFBLFdBQ0EsUUFBQSxNQUNBLE9BQUEsS0FDQSxRQUFBLEVBQ0EsTUFBQSxLQUdBLE9BQUEsS0FDQSxRQUFBLElBQUEsS0FDQSxXQUFBLEtBQ0EsT0FBQSxJQUFBLE1BQUEsS0FDQSxhQUFBLEtBQ0EsV0FBQSxzQ0FBQSxLQUFBLE9BQUEsVUFBQSxLQUVDLHdDQUNHLE1BQUEsZUFHZ0IsMERBQ3BCLE9BQUEsUUFHSixxQ0FDSSxPQUFBLEtBQ0EsY0FBQSxJQUFBLE1BQUEsS0FDQSxXQUFBLEtBRUMsdURBQ0csT0FBQSxLQUNBLE9BQUEsS0FDQSxlQUdSLDZDQUNJLFdBQUEsT0FDQSxRQUFBLElBQUEsSUFDQSxZQUFBLElBQUEsTUFBQSxLQUVKLHFEQUNJLFlBQUEsS0FDQSxXQUFBLE1ENkhSLG1DQ3pISSxtQ0FDSSxpQkFBQSxRQUlrQiw2REFDbEIsV0FBQSxNQUNBLCtEQUNJLFVBQUEsS0FDQSxJQUFBLEVBRUosa0VBQ0ksWUFBQSxFQUdKLHVFQUNJLFVBQUEsS0FDQSxjQUFBLElBQ0EsWUFBQSxJQVFSLDRDQUNJLE9BQUEsRUFFSixzQ0FDSSxZQUFBLEtBQ0EsYUFBQSxLQUNBLE9BQUEsS0FDQSxlQUdjLG1EQUNkLFFBQUEsS0FRYSx3REFDYixRQUFBLEdBQ0EsU0FBQSxTQUNBLElBQUEsSUFDQSxNQUFBLEtGdHRCaUMsK0RBRWpDLFFBQUEsUUUwdEJlLHlCQUNuQixTQUFBLFNBQ0EsSUFBQSxJQUNBLFVBQUEsS0FDQSxtQ0FDSSxTQUFBLFNBQ0EsSUFBQSxJQUNBLFVBQUEsS0FNUixZQUNJLFdBQUEsV0FDQSxRQUFBLE1BQ0EsVUFBQSxNQUNBLE9BQUEsS0FDQSxRQUFBLElBQUEsZUFDQSxZQUFBLEtBQ0EsT0FBQSxJQUFBLE1BQUEsS0FDQSxXQUFBLEtBRUEseUJBQ0ksTUFBQSxLQUNBLFFBQUEsRUFBQSxJQUFBLElBQ0EsWUFBQSxJQUNBLGNBQUEsSUFDQSxXQUFBLEtEa0dOLHVCQzlGRSx1QkFDSSxTQUFBLFNBQ0EsSUFBQSxFQUNBLEtBQUEsS0FDQSxNQUFBLElBQ0EsT0FBQSxLQUNBLFdBQUEsS0FFSix1QkFDSSxpQkFBQSxLQUVKLHVCQUNJLGlCQUFBLElBSVIsZUFDSSxTQUFBLFNBQ0EsT0FBQSxLQUFBLEVBQUEsRUFDQSxhQUFBLEVBQ0EsV0FBQSxJQUFBLE1BQUEsWUFDQSxjQUFBLElBQUEsTUFBQSxZQUNBLFlBQUEsSUFBQSxNQUFBLEtBQ0EsTUFBQSxFQUNBLE9BQUEiLCJmaWxlIjoiY21zLnBhZ2V0cmVlLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4vLyBCVVRUT05TXG5cbi5jbXMtYnRuIHtcbiAgICBAaW5jbHVkZSBidXR0b24tdmFyaWFudCgkYnRuLWRlZmF1bHQtY29sb3IsICRidG4tZGVmYXVsdC1iZ2NvbG9yLCAkYnRuLWRlZmF1bHQtYm9yZGVyLCBmYWxzZSk7XG59XG5cbi5jbXMtYnRuLWFjdGlvbiB7XG4gICAgQGluY2x1ZGUgYnV0dG9uLXZhcmlhbnQoJGJ0bi1hY3Rpb24tY29sb3IsICRidG4tYWN0aW9uLWJnY29sb3IsICRidG4tYWN0aW9uLWJvcmRlciwgZmFsc2UpO1xufVxuLmNtcy1idG4tY2F1dGlvbiB7XG4gICAgQGluY2x1ZGUgYnV0dG9uLXZhcmlhbnQoJGJ0bi1jYXV0aW9uLWNvbG9yLCAkYnRuLWNhdXRpb24tYmdjb2xvciwgJGJ0bi1jYXV0aW9uLWJvcmRlciwgZmFsc2UpO1xufVxuIiwiLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbi8vIEJVVFRPTlNcblxuLy8gdGFrZW4gZnJvbSBib290c3RyYXAgd2l0aCBhZGFwdGF0aW9uc1xuQGZ1bmN0aW9uIGltcG9ydGFudCgkaW1wb3J0YW50KSB7XG4gICAgQGlmKCRpbXBvcnRhbnQgPT0gdHJ1ZSkge1xuICAgICAgICBAcmV0dXJuICFpbXBvcnRhbnQ7XG4gICAgfSBAZWxzZSB7XG4gICAgICAgIEByZXR1cm4gdW5xdW90ZSgnJyk7XG4gICAgfVxufVxuQG1peGluIGJ1dHRvbi12YXJpYW50KCRjb2xvciwgJGJhY2tncm91bmQsICRib3JkZXIsICRpbXBvcnRhbnQ6IGZhbHNlKSB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZSBpbXBvcnRhbnQoJGltcG9ydGFudCk7XG4gICAgbWFyZ2luLWJvdHRvbTogMDsgLy8gRm9yIGlucHV0LmJ0blxuICAgIGJvcmRlci1yYWRpdXM6ICRidG4tYm9yZGVyLXJhZGl1cy1iYXNlIGltcG9ydGFudCgkaW1wb3J0YW50KTtcbiAgICBjb2xvcjogJGNvbG9yIGltcG9ydGFudCgkaW1wb3J0YW50KTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZCBpbXBvcnRhbnQoJGltcG9ydGFudCk7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlciBpbXBvcnRhbnQoJGltcG9ydGFudCk7XG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuXG4gICAgJjpmb2N1cyxcbiAgICAmLmZvY3VzIHtcbiAgICAgICAgY29sb3I6ICRjb2xvciBpbXBvcnRhbnQoJGltcG9ydGFudCk7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IGRhcmtlbigkYmFja2dyb3VuZCwgNSUpIGltcG9ydGFudCgkaW1wb3J0YW50KTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiBkYXJrZW4oJGJvcmRlciwgNSUpIGltcG9ydGFudCgkaW1wb3J0YW50KTtcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lIGltcG9ydGFudCgkaW1wb3J0YW50KTtcbiAgICB9XG4gICAgJjpob3ZlciB7XG4gICAgICAgIGNvbG9yOiAkY29sb3IgaW1wb3J0YW50KCRpbXBvcnRhbnQpO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oJGJhY2tncm91bmQsIDUlKSBpbXBvcnRhbnQoJGltcG9ydGFudCk7XG4gICAgICAgIGJvcmRlci1jb2xvcjogZGFya2VuKCRib3JkZXIsIDUlKSBpbXBvcnRhbnQoJGltcG9ydGFudCk7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZSBpbXBvcnRhbnQoJGltcG9ydGFudCk7XG4gICAgfVxuICAgICY6YWN0aXZlLFxuICAgICYuY21zLWJ0bi1hY3RpdmUge1xuICAgICAgICBjb2xvcjogJGNvbG9yIGltcG9ydGFudCgkaW1wb3J0YW50KTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogZGFya2VuKCRiYWNrZ3JvdW5kLCAxMCUpIGltcG9ydGFudCgkaW1wb3J0YW50KTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiBkYXJrZW4oJGJvcmRlciwgMTAlKSBpbXBvcnRhbnQoJGltcG9ydGFudCk7XG4gICAgICAgIGJveC1zaGFkb3c6ICRidG4tYWN0aXZlLXNoYWRvdyBpbXBvcnRhbnQoJGltcG9ydGFudCk7XG5cbiAgICAgICAgJjpob3ZlcixcbiAgICAgICAgJjpmb2N1cyxcbiAgICAgICAgJi5mb2N1cyB7XG4gICAgICAgICAgICBjb2xvcjogJGNvbG9yIGltcG9ydGFudCgkaW1wb3J0YW50KTtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGRhcmtlbigkYmFja2dyb3VuZCwgMTclKSBpbXBvcnRhbnQoJGltcG9ydGFudCk7XG4gICAgICAgICAgICBib3JkZXItY29sb3I6IGRhcmtlbigkYm9yZGVyLCAyNSUpIGltcG9ydGFudCgkaW1wb3J0YW50KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAmOmFjdGl2ZSxcbiAgICAmLmNtcy1idG4tYWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZSBpbXBvcnRhbnQoJGltcG9ydGFudCk7XG4gICAgfVxuICAgICYuY21zLWJ0bi1kaXNhYmxlZCxcbiAgICAmW2Rpc2FibGVkXSB7XG4gICAgICAgICYsXG4gICAgICAgICY6aG92ZXIsXG4gICAgICAgICY6Zm9jdXMsXG4gICAgICAgICYuZm9jdXMsXG4gICAgICAgICY6YWN0aXZlLFxuICAgICAgICAmLmNtcy1idG4tYWN0aXZlIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoJGJhY2tncm91bmQsIDAuNCkgaW1wb3J0YW50KCRpbXBvcnRhbnQpO1xuICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKCRib3JkZXIsIDAuNCkgaW1wb3J0YW50KCRpbXBvcnRhbnQpO1xuICAgICAgICAgICAgY29sb3I6IGxpZ2h0ZW4oJGNvbG9yLCA1MCUpIGltcG9ydGFudCgxKTtcbiAgICAgICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gICAgICAgICAgICBib3gtc2hhZG93OiBub25lIGltcG9ydGFudCgkaW1wb3J0YW50KTtcbiAgICAgICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogcmdiYSgkY29sb3IsIDAuNCkgaW1wb3J0YW50KDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIiwiLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbi8vIElDT05PR1JBUEhZXG5cbi8vIGRlZmF1bHQgZm9udCBmaWxlIGdlbmVyYXRlZCBieSBndWxwXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogXCJkamFuZ28tY21zLWljb25mb250XCI7XG4gICAgc3JjOiB1cmwoXCIuLi9mb250cy9kamFuZ28tY21zLWljb25mb250LmVvdD92PTMuMi4wXCIpO1xuICAgIHNyYzogdXJsKFwiLi4vZm9udHMvZGphbmdvLWNtcy1pY29uZm9udC5lb3Q/dj0zLjIuMCNpZWZpeFwiKSBmb3JtYXQoXCJlb3RcIiksXG4gICAgICAgICB1cmwoXCIuLi9mb250cy9kamFuZ28tY21zLWljb25mb250LndvZmYyP3Y9My4yLjBcIikgZm9ybWF0KFwid29mZjJcIiksXG4gICAgICAgICB1cmwoXCIuLi9mb250cy9kamFuZ28tY21zLWljb25mb250LndvZmY/dj0zLjIuMFwiKSBmb3JtYXQoXCJ3b2ZmXCIpLFxuICAgICAgICAgdXJsKFwiLi4vZm9udHMvZGphbmdvLWNtcy1pY29uZm9udC50dGY/dj0zLjIuMFwiKSBmb3JtYXQoXCJ0cnVldHlwZVwiKSxcbiAgICAgICAgIHVybChcIi4uL2ZvbnRzL2RqYW5nby1jbXMtaWNvbmZvbnQuc3ZnP3Y9My4yLjAjZGphbmdvLWNtcy1pY29uZm9udFwiKSBmb3JtYXQoXCJzdmdcIik7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG59XG5cbiVpY29uIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgZm9udDogbm9ybWFsIG5vcm1hbCBub3JtYWwgMTZweC8xIGRqYW5nby1jbXMtaWNvbmZvbnQ7XG4gICAgdGV4dC1yZW5kZXJpbmc6IGF1dG87XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCk7XG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbn1cblxuQGZ1bmN0aW9uIGljb24tY2hhcigkZmlsZW5hbWUpIHtcbiAgICAkY2hhcjogXCJcIjtcblxuICAgIEBpZiAkZmlsZW5hbWUgPT0gYWxpYXMge1xuICAgICAgICAkY2hhcjogXCJFMDAxXCI7XG4gICAgfVxuICAgIEBpZiAkZmlsZW5hbWUgPT0gYXJyb3ctcmlnaHQge1xuICAgICAgICAkY2hhcjogXCJFMDAyXCI7XG4gICAgfVxuICAgIEBpZiAkZmlsZW5hbWUgPT0gYXJyb3ctd2lkZSB7XG4gICAgICAgICRjaGFyOiBcIkUwMDNcIjtcbiAgICB9XG4gICAgQGlmICRmaWxlbmFtZSA9PSBhcnJvdyB7XG4gICAgICAgICRjaGFyOiBcIkUwMDRcIjtcbiAgICB9XG4gICAgQGlmICRmaWxlbmFtZSA9PSBiaW4ge1xuICAgICAgICAkY2hhcjogXCJFMDA1XCI7XG4gICAgfVxuICAgIEBpZiAkZmlsZW5hbWUgPT0gY2hlY2stbyB7XG4gICAgICAgICRjaGFyOiBcIkUwMDZcIjtcbiAgICB9XG4gICAgQGlmICRmaWxlbmFtZSA9PSBjaGVjay1zcXVhcmUge1xuICAgICAgICAkY2hhcjogXCJFMDA3XCI7XG4gICAgfVxuICAgIEBpZiAkZmlsZW5hbWUgPT0gY2hlY2sge1xuICAgICAgICAkY2hhcjogXCJFMDA4XCI7XG4gICAgfVxuICAgIEBpZiAkZmlsZW5hbWUgPT0gY2xvc2Uge1xuICAgICAgICAkY2hhcjogXCJFMDA5XCI7XG4gICAgfVxuICAgIEBpZiAkZmlsZW5hbWUgPT0gY29ncyB7XG4gICAgICAgICRjaGFyOiBcIkUwMEFcIjtcbiAgICB9XG4gICAgQGlmICRmaWxlbmFtZSA9PSBjb3B5IHtcbiAgICAgICAgJGNoYXI6IFwiRTAwQlwiO1xuICAgIH1cbiAgICBAaWYgJGZpbGVuYW1lID09IGV5ZSB7XG4gICAgICAgICRjaGFyOiBcIkUwMENcIjtcbiAgICB9XG4gICAgQGlmICRmaWxlbmFtZSA9PSBmb3JiaWRkZW4ge1xuICAgICAgICAkY2hhcjogXCJFMDBEXCI7XG4gICAgfVxuICAgIEBpZiAkZmlsZW5hbWUgPT0gaGFuZGxlciB7XG4gICAgICAgICRjaGFyOiBcIkUwMEVcIjtcbiAgICB9XG4gICAgQGlmICRmaWxlbmFtZSA9PSBob21lIHtcbiAgICAgICAgJGNoYXI6IFwiRTAwRlwiO1xuICAgIH1cbiAgICBAaWYgJGZpbGVuYW1lID09IGluZm8ge1xuICAgICAgICAkY2hhcjogXCJFMDEwXCI7XG4gICAgfVxuICAgIEBpZiAkZmlsZW5hbWUgPT0gbG9hZGVyIHtcbiAgICAgICAgJGNoYXI6IFwiRTAxMVwiO1xuICAgIH1cbiAgICBAaWYgJGZpbGVuYW1lID09IGxvY2sge1xuICAgICAgICAkY2hhcjogXCJFMDEyXCI7XG4gICAgfVxuICAgIEBpZiAkZmlsZW5hbWUgPT0gbG9nbyB7XG4gICAgICAgICRjaGFyOiBcIkUwMTNcIjtcbiAgICB9XG4gICAgQGlmICRmaWxlbmFtZSA9PSBtZW51IHtcbiAgICAgICAgJGNoYXI6IFwiRTAxNFwiO1xuICAgIH1cbiAgICBAaWYgJGZpbGVuYW1lID09IG1pbmltaXplIHtcbiAgICAgICAgJGNoYXI6IFwiRTAxNVwiO1xuICAgIH1cbiAgICBAaWYgJGZpbGVuYW1lID09IG1pbnVzLXNxdWFyZS1vIHtcbiAgICAgICAgJGNoYXI6IFwiRTAxNlwiO1xuICAgIH1cbiAgICBAaWYgJGZpbGVuYW1lID09IG1pbnVzLXNxdWFyZSB7XG4gICAgICAgICRjaGFyOiBcIkUwMTdcIjtcbiAgICB9XG4gICAgQGlmICRmaWxlbmFtZSA9PSBtaW51cyB7XG4gICAgICAgICRjaGFyOiBcIkUwMThcIjtcbiAgICB9XG4gICAgQGlmICRmaWxlbmFtZSA9PSBwYXN0ZSB7XG4gICAgICAgICRjaGFyOiBcIkUwMTlcIjtcbiAgICB9XG4gICAgQGlmICRmaWxlbmFtZSA9PSBwZW5jaWwge1xuICAgICAgICAkY2hhcjogXCJFMDFBXCI7XG4gICAgfVxuICAgIEBpZiAkZmlsZW5hbWUgPT0gcGluIHtcbiAgICAgICAgJGNoYXI6IFwiRTAxQlwiO1xuICAgIH1cbiAgICBAaWYgJGZpbGVuYW1lID09IHBsdXMtc3F1YXJlLW8ge1xuICAgICAgICAkY2hhcjogXCJFMDFDXCI7XG4gICAgfVxuICAgIEBpZiAkZmlsZW5hbWUgPT0gcGx1cyB7XG4gICAgICAgICRjaGFyOiBcIkUwMURcIjtcbiAgICB9XG4gICAgQGlmICRmaWxlbmFtZSA9PSBwdXp6bGUge1xuICAgICAgICAkY2hhcjogXCJFMDFFXCI7XG4gICAgfVxuICAgIEBpZiAkZmlsZW5hbWUgPT0gc2Npc3NvcnMge1xuICAgICAgICAkY2hhcjogXCJFMDFGXCI7XG4gICAgfVxuICAgIEBpZiAkZmlsZW5hbWUgPT0gc2VhcmNoIHtcbiAgICAgICAgJGNoYXI6IFwiRTAyMFwiO1xuICAgIH1cbiAgICBAaWYgJGZpbGVuYW1lID09IHNpdGVtYXAge1xuICAgICAgICAkY2hhcjogXCJFMDIxXCI7XG4gICAgfVxuICAgIEBpZiAkZmlsZW5hbWUgPT0gc3F1YXJlcyB7XG4gICAgICAgICRjaGFyOiBcIkUwMjJcIjtcbiAgICB9XG4gICAgQGlmICRmaWxlbmFtZSA9PSB3aW5kb3cge1xuICAgICAgICAkY2hhcjogXCJFMDIzXCI7XG4gICAgfVxuXG4gICAgQHJldHVybiAkY2hhcjtcbn1cblxuLmNtcy1pY29uIHtcbiAgICBAZXh0ZW5kICVpY29uO1xufVxuQG1peGluIGljb24oJGZpbGVuYW1lLCAkaW5zZXJ0OiBiZWZvcmUpIHtcbiAgICAmOiN7JGluc2VydH0ge1xuICAgICAgICBjb250ZW50OiAje1wiXFxcIlxcXFxcIn0je2ljb24tY2hhcigkZmlsZW5hbWUpICsgXCJcXFwiXCJ9O1xuICAgIH1cbn1cblxuLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbi8vIElDT05TOnN0YXJ0XG4vLyB1c2UgdW5pY29kZSBjaGFyYWN0ZXJzIGZvciBhY2Nlc3NpYmlsaXR5IHJlYXNvbnMgYW5kIHVzZSBhcmlhLWhpZGRlbj1cInRydWVcIlxuLy8gZm9yIGRlY29yYXRpdmUgaWNvbnNcbi8vIERPQ1M6IGh0dHA6Ly9maWxhbWVudGdyb3VwLmNvbS9sYWIvYnVsbGV0cHJvb2ZfaWNvbl9mb250cy5odG1sXG5cblxuLmNtcy1pY29uLWFsaWFzIHtcbiAgICBAaW5jbHVkZSBpY29uKGFsaWFzKTtcbn1cblxuLmNtcy1pY29uLWFycm93LXJpZ2h0IHtcbiAgICBAaW5jbHVkZSBpY29uKGFycm93LXJpZ2h0KTtcbn1cblxuLmNtcy1pY29uLWFycm93LXdpZGUge1xuICAgIEBpbmNsdWRlIGljb24oYXJyb3ctd2lkZSk7XG59XG5cbi5jbXMtaWNvbi1hcnJvdyB7XG4gICAgQGluY2x1ZGUgaWNvbihhcnJvdyk7XG59XG5cbi5jbXMtaWNvbi1iaW4ge1xuICAgIEBpbmNsdWRlIGljb24oYmluKTtcbn1cblxuLmNtcy1pY29uLWNoZWNrLW8ge1xuICAgIEBpbmNsdWRlIGljb24oY2hlY2stbyk7XG59XG5cbi5jbXMtaWNvbi1jaGVjay1zcXVhcmUge1xuICAgIEBpbmNsdWRlIGljb24oY2hlY2stc3F1YXJlKTtcbn1cblxuLmNtcy1pY29uLWNoZWNrIHtcbiAgICBAaW5jbHVkZSBpY29uKGNoZWNrKTtcbn1cblxuLmNtcy1pY29uLWNsb3NlIHtcbiAgICBAaW5jbHVkZSBpY29uKGNsb3NlKTtcbn1cblxuLmNtcy1pY29uLWNvZ3Mge1xuICAgIEBpbmNsdWRlIGljb24oY29ncyk7XG59XG5cbi5jbXMtaWNvbi1jb3B5IHtcbiAgICBAaW5jbHVkZSBpY29uKGNvcHkpO1xufVxuXG4uY21zLWljb24tZXllIHtcbiAgICBAaW5jbHVkZSBpY29uKGV5ZSk7XG59XG5cbi5jbXMtaWNvbi1mb3JiaWRkZW4ge1xuICAgIEBpbmNsdWRlIGljb24oZm9yYmlkZGVuKTtcbn1cblxuLmNtcy1pY29uLWhhbmRsZXIge1xuICAgIEBpbmNsdWRlIGljb24oaGFuZGxlcik7XG59XG5cbi5jbXMtaWNvbi1ob21lIHtcbiAgICBAaW5jbHVkZSBpY29uKGhvbWUpO1xufVxuXG4uY21zLWljb24taW5mbyB7XG4gICAgQGluY2x1ZGUgaWNvbihpbmZvKTtcbn1cblxuLmNtcy1pY29uLWxvYWRlciB7XG4gICAgQGluY2x1ZGUgaWNvbihsb2FkZXIpO1xufVxuXG4uY21zLWljb24tbG9jayB7XG4gICAgQGluY2x1ZGUgaWNvbihsb2NrKTtcbn1cblxuLmNtcy1pY29uLWxvZ28ge1xuICAgIEBpbmNsdWRlIGljb24obG9nbyk7XG59XG5cbi5jbXMtaWNvbi1tZW51IHtcbiAgICBAaW5jbHVkZSBpY29uKG1lbnUpO1xufVxuXG4uY21zLWljb24tbWluaW1pemUge1xuICAgIEBpbmNsdWRlIGljb24obWluaW1pemUpO1xufVxuXG4uY21zLWljb24tbWludXMtc3F1YXJlLW8ge1xuICAgIEBpbmNsdWRlIGljb24obWludXMtc3F1YXJlLW8pO1xufVxuXG4uY21zLWljb24tbWludXMtc3F1YXJlIHtcbiAgICBAaW5jbHVkZSBpY29uKG1pbnVzLXNxdWFyZSk7XG59XG5cbi5jbXMtaWNvbi1taW51cyB7XG4gICAgQGluY2x1ZGUgaWNvbihtaW51cyk7XG59XG5cbi5jbXMtaWNvbi1wYXN0ZSB7XG4gICAgQGluY2x1ZGUgaWNvbihwYXN0ZSk7XG59XG5cbi5jbXMtaWNvbi1wZW5jaWwge1xuICAgIEBpbmNsdWRlIGljb24ocGVuY2lsKTtcbn1cblxuLmNtcy1pY29uLXBpbiB7XG4gICAgQGluY2x1ZGUgaWNvbihwaW4pO1xufVxuXG4uY21zLWljb24tcGx1cy1zcXVhcmUtbyB7XG4gICAgQGluY2x1ZGUgaWNvbihwbHVzLXNxdWFyZS1vKTtcbn1cblxuLmNtcy1pY29uLXBsdXMge1xuICAgIEBpbmNsdWRlIGljb24ocGx1cyk7XG59XG5cbi5jbXMtaWNvbi1wdXp6bGUge1xuICAgIEBpbmNsdWRlIGljb24ocHV6emxlKTtcbn1cblxuLmNtcy1pY29uLXNjaXNzb3JzIHtcbiAgICBAaW5jbHVkZSBpY29uKHNjaXNzb3JzKTtcbn1cblxuLmNtcy1pY29uLXNlYXJjaCB7XG4gICAgQGluY2x1ZGUgaWNvbihzZWFyY2gpO1xufVxuXG4uY21zLWljb24tc2l0ZW1hcCB7XG4gICAgQGluY2x1ZGUgaWNvbihzaXRlbWFwKTtcbn1cblxuLmNtcy1pY29uLXNxdWFyZXMge1xuICAgIEBpbmNsdWRlIGljb24oc3F1YXJlcyk7XG59XG5cbi5jbXMtaWNvbi13aW5kb3cge1xuICAgIEBpbmNsdWRlIGljb24od2luZG93KTtcbn1cbiIsbnVsbCwiLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbi8vIFBBR0VUUkVFXG5cbi8vIElORk86IHBsZWFzZSBub3QgdGhhdCBhbGwgcmVsYXRlZCBzdHlsZXMgdG8gdGhlIHBhZ2V0cmVlIGl0c2VsZnMgYXJlXG4vLyBoYW5kbGVkIHRocm91Z2ggdGhlbWluZyBhZnRlciB0aGUgXCJQQUdFVFJFRSBUSEVNRVwiIHNlY3Rpb24gaW4gdGhpcyBmaWxlLlxuXG4vLyBIRUxQRVJTXG4uY21zLWJ0biB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGNvbG9yOiAkd2hpdGUgIWltcG9ydGFudDtcbiAgICBsaW5lLWhlaWdodDogJHRvb2xiYXItYnV0dG9uLWhlaWdodCArIDJweDtcbiAgICBoZWlnaHQ6ICR0b29sYmFyLWJ1dHRvbi1oZWlnaHQgKyAycHg7XG4gICAgZm9udC1zaXplOiAkdG9vbGJhci1idXR0b24tZm9udC1zaXplO1xuICAgIHBhZGRpbmc6IDAgJHRvb2xiYXItYnV0dG9uLXBhZGRpbmctaG9yaXpvbnRhbCArIDEwcHg7XG4gICAgJjpob3ZlcixcbiAgICAmOmFjdGl2ZSxcbiAgICAmOmZvY3VzIHtcbiAgICAgICAgY29sb3I6ICR3aGl0ZSAhaW1wb3J0YW50O1xuICAgIH1cbn1cblxuLmNtcy1oaWRkZW4sXG4uaGlkZGVuIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG59XG4uY21zLWNsZWFyIHtcbiAgICBjbGVhcjogYm90aDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLmNtcy1jbGVhci1tb2JpbGUge1xuICAgIGNsZWFyOiBib3RoO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgQG1lZGlhIChtaW4td2lkdGg6ICRwYWdldHJlZS1tb2JpbGUpIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG59XG5cbi8vIHdlIG5lZWQgdG8gYWRkIHRoaXMgdG8gZ2V0IGRyYWcgJiBkcm9wIHRvIHdvcmsgb24gaW50ZXJuZXQgZXhwbG9yZXIsXG4vLyBtb3JlIHNwZWNpZmljYWxseSBvbiBhIG1pY3Jvc29mdCBzdXJmYWNlXG4uanN0cmVlIGxpIHtcbiAgICAtbXMtdG91Y2gtYWN0aW9uOiBub25lO1xuICAgIHRvdWNoLWFjdGlvbjogbm9uZTtcbn1cblxuLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuLy8gQ09OVEFJTkVSXG4vLyBnZW5lcmFsIGNvbnRhaW5lciBhcm91bmQgdGhlIGpzdHJlZSBvciBlbGVtZW50c1xuLmNtcy1wYWdldHJlZSB7XG4gICAgYm94LXNoYWRvdzogJGRyb3Bkb3duLXNoYWRvdztcbiAgICBib3JkZXI6ICRwYWdldHJlZS1ib3JkZXI7XG59XG5cbi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbi8vIEhFQURFUlxuLy8gaGFuZGxlcyB0b3AgaGVhZGVyIGFyZWEgc3R5bGVzXG4uY21zLXBhZ2V0cmVlLWhlYWRlciB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IHoocGFnZXRyZWUsIGhlYWRlcik7XG4gICAgbWluLWhlaWdodDogJHBhZ2V0cmVlLWhlYWRlci1oZWlnaHQ7XG4gICAgcGFkZGluZzogJHBhZ2V0cmVlLWhlYWRlci1wYWRkaW5nO1xuICAgIG1hcmdpbjogLTQwcHggMCAwIDA7XG4gICAgYm94LXNoYWRvdzogJHBhZ2V0cmVlLWJveC1zaGFkb3c7XG4gICAgYmFja2dyb3VuZDogJHBhZ2V0cmVlLWhlYWRlci1iYWNrZ3JvdW5kO1xuICAgICY6YmVmb3JlIHtcbiAgICAgICAgY29udGVudDogXCJcIjtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBib3R0b206IC02cHg7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICBoZWlnaHQ6IDVweDtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHdoaXRlO1xuICAgIH1cbn1cbi5jbXMtYWRtaW4tc2lkZWZyYW1lIC5jbXMtcGFnZXRyZWUtaGVhZGVyIHtcbiAgICBtYXJnaW4tdG9wOiAtMjVweDtcbn1cblxuLmNtcy1wYWdldHJlZS1oZWFkZXItdGl0bGUge1xuICAgIHBhZGRpbmctdG9wOiA2cHg7XG4gICAgbWFyZ2luOiAwIDAgNXB4ICFpbXBvcnRhbnQ7XG4gICAgQG1lZGlhIChtaW4td2lkdGg6ICRwYWdldHJlZS1tb2JpbGUpIHtcbiAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgfVxuICAgIHNwYW4ge1xuICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgIH1cbn1cblxuLmNtcy1wYWdldHJlZS1oZWFkZXItYm9keSB7XG4gICAgQG1lZGlhIChtaW4td2lkdGg6ICRwYWdldHJlZS1tb2JpbGUpIHtcbiAgICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgIH1cbn1cblxuLy8gU0VBUkNIXG4uY21zLXBhZ2V0cmVlLWhlYWRlci1zZWFyY2gge1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbWFyZ2luOiA1cHggMCAxMHB4O1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICBAbWVkaWEgKG1pbi13aWR0aDogJHBhZ2V0cmVlLW1vYmlsZSkge1xuICAgICAgICBmbG9hdDogbGVmdDtcbiAgICAgICAgbWFyZ2luOiAtM3B4IDAgO1xuICAgIH1cbiAgICAuY21zLXBhZ2V0cmVlLWhlYWRlci1zZWFyY2gtYnRuIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB0b3A6IDNweDtcbiAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgICAgY29sb3I6ICR3aGl0ZSAhaW1wb3J0YW50O1xuICAgICAgICBwYWRkaW5nOiA4cHggMTBweCAhaW1wb3J0YW50O1xuICAgICAgICBtYXJnaW4tbGVmdDogNXB4O1xuICAgICAgICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLXByaW1hcnkgIWltcG9ydGFudDtcbiAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiBkYXJrZW4oJGNvbG9yLXByaW1hcnksIDUlKSAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgICAgICY6YWN0aXZlLFxuICAgICAgICAmOmZvY3VzIHtcbiAgICAgICAgICAgIGNvbG9yOiAkd2hpdGUgIWltcG9ydGFudDtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IGRhcmtlbigkY29sb3ItcHJpbWFyeSwgMTUlKSAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgfVxuICAgIC5jbXMtcGFnZXRyZWUtaGVhZGVyLWZpbHRlciB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgIGlucHV0IHtcbiAgICAgICAgICAgIHdpZHRoOiAkcGFnZXRyZWUtaGVhZGVyLXNlYXJjaC13aWR0aCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMzVweCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgbWFyZ2luLXRvcDogMnB4O1xuICAgICAgICAgICAgdHJhbnNpdGlvbjogd2lkdGggJHNwZWVkLWJhc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gYWN0aXZlIHN0YXRlIG9uIGZvY3VzIG9yIHdoZW4gb3BlbmluZyB0aGUgZmlsdGVyc1xuICAgIC5jbXMtcGFnZXRyZWUtaGVhZGVyLWZpbHRlci1hY3RpdmUgaW5wdXQge1xuICAgICAgICBAbWVkaWEgKG1pbi13aWR0aDogJHBhZ2V0cmVlLW1vYmlsZSkge1xuICAgICAgICAgICAgd2lkdGg6ICRwYWdldHJlZS1oZWFkZXItc2VhcmNoLXdpZHRoICogMiAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgfVxufVxuLmNtcy1wYWdldHJlZS1oZWFkZXItZmlsdGVyLXRyaWdnZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICByaWdodDogMDtcbiAgICB0b3A6IDA7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHBhZGRpbmc6IDEwcHg7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTtcbiAgICAmOmhvdmVyIC5jbXMtaWNvbixcbiAgICAmOmFjdGl2ZSAuY21zLWljb24sXG4gICAgJjpmb2N1cyAuY21zLWljb24ge1xuICAgICAgICBjb2xvcjogJGNvbG9yLXByaW1hcnk7XG4gICAgfVxuICAgIC5jbXMtaWNvbiB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgICAgICAgY29sb3I6ICRncmF5O1xuICAgIH1cbn1cbi5jbXMtcGFnZXRyZWUtaGVhZGVyLWZpbHRlci1jb250YWluZXIge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgb3ZlcmZsb3c6IGF1dG87XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgdG9wOiAzOHB4O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHBhZGRpbmc6IDVweCAyMHB4IDE1cHg7XG4gICAgbWF4LWhlaWdodDogJHBhZ2V0cmVlLWhlYWRlci1maWx0ZXItaGVpZ2h0O1xuICAgIGJveC1zaGFkb3c6ICRwYWdldHJlZS1ib3gtc2hhZG93O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXMtYmFzZTtcbiAgICBiYWNrZ3JvdW5kOiAkd2hpdGU7XG4gICAgaDMge1xuICAgICAgICBjb2xvcjogJGdyYXk7XG4gICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgcGFkZGluZzogMTBweCAwIDAgMDtcbiAgICB9XG4gICAgdWwsXG4gICAgbGkge1xuICAgICAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gICAgICAgIHBhZGRpbmc6IDJweCAwO1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgfVxuICAgIC8vIGNvbG9yIHN0YXRlc1xuICAgIGxpIGEge1xuICAgICAgICBjb2xvcjogJGdyYXktbGlnaHQ7XG4gICAgfVxuICAgIC5zZWxlY3RlZCBhIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci1wcmltYXJ5O1xuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB9XG59XG4uY21zLXBhZ2V0cmVlLWhlYWRlci1zZWFyY2gtY2xvc2Uge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICByaWdodDogMDtcbiAgICB0b3A6IDA7XG4gICAgcGFkZGluZzogMTBweDtcbiAgICAmOmhvdmVyIC5jbXMtaWNvbixcbiAgICAmOmFjdGl2ZSAuY21zLWljb24sXG4gICAgJjpmb2N1cyAuY21zLWljb24ge1xuICAgICAgICBjb2xvcjogJGNvbG9yLXByaW1hcnk7XG4gICAgfVxuICAgIC5jbXMtaWNvbiB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgICAgY29sb3I6ICRncmF5O1xuICAgIH1cbn1cbi5jbXMtcGFnZXRyZWUtaGVhZGVyLXNlYXJjaC1yZXNldCB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgZm9udC1zaXplOiA5MCU7XG4gICAgcGFkZGluZzogN3B4ICRwYWdldHJlZS1oZWFkZXItc3BhY2U7XG59XG5cbi8vIERST1BET1dOXG4uY21zLXBhZ2V0cmVlLWRyb3Bkb3duLW1lbnUge1xuICAgIGZsb2F0OiByaWdodDtcbiAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7XG4gICAgbWFyZ2luLWxlZnQ6ICRwYWdldHJlZS1oZWFkZXItc3BhY2U7XG4gICAgQG1lZGlhIChtaW4td2lkdGg6ICRwYWdldHJlZS1tb2JpbGUpIHtcbiAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgfVxuXG4gICAgLmNtcy1wYWdldHJlZS1kcm9wZG93bi1jb250YWluZXIge1xuICAgICAgICByaWdodDogLTFweDtcbiAgICAgICAgdG9wOiAzMHB4O1xuICAgICAgICBtaW4td2lkdGg6ICRkcm9wZG93bi13aWR0aCArIDI1cHg7XG4gICAgICAgIGEge1xuICAgICAgICAgICAgcGFkZGluZzogNXB4ICRzdWJtZW51LWl0ZW0tcGFkZGluZy1ob3Jpem9udGFsO1xuICAgICAgICB9XG4gICAgICAgIC5hY3RpdmUge1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbW9kaWZpY2F0aW9uIGZvciB0aGUgYXJyb3dcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IC0yNHB4O1xuICAgICAgICAgICAgbWFyZ2luLXRvcDogLTlweDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5jbXMtcGFnZXRyZWUtZHJvcGRvd24tdHJpZ2dlciB7XG4gICAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgICBjb2xvcjogJGdyYXkgIWltcG9ydGFudDtcbiAgICAgICAgcGFkZGluZzogOXB4IDEwcHggNHB4O1xuICAgIH1cbn1cblxuLmNtcy1wYWdldHJlZS1oZWFkZXItY3JlYXRlIHtcbiAgICBAbWVkaWEgKG1pbi13aWR0aDogJHBhZ2V0cmVlLW1vYmlsZSkge1xuICAgICAgICBmbG9hdDogbGVmdDtcbiAgICAgICAgbWFyZ2luLWxlZnQ6ICRwYWdldHJlZS1oZWFkZXItc3BhY2UgKyAxMHB4O1xuICAgIH1cbn1cblxuLy8gQlJFQURDUlVNQlxuLmNtcy1wYWdldHJlZS1icmVhZGNydW1icyB7XG4gICAgbWFyZ2luLWJvdHRvbTogLTMwcHggIWltcG9ydGFudDtcbiAgICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuLy8gU0VDVElPTlxuLy8gc2VwYXJhdGVzIGRpZmZlcmVudCBuYXZpZ2F0aW9uc1xuLmNtcy1wYWdldHJlZS1zZWN0aW9uIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgei1pbmRleDogeihwYWdldHJlZSwgc2VjdGlvbik7XG4gICAgbWluLWhlaWdodDogJHBhZ2V0cmVlLXNlY3Rpb24taGVpZ2h0O1xuICAgIHBhZGRpbmc6ICRwYWdldHJlZS1zZWN0aW9uLXBhZGRpbmc7XG4gICAgYm94LXNoYWRvdzogJHBhZ2V0cmVlLWJveC1zaGFkb3c7XG4gICAgYm9yZGVyLXRvcDogbm9uZTtcbiAgICBib3JkZXItYm90dG9tOiBub25lO1xuICAgIGJhY2tncm91bmQ6ICR3aGl0ZTtcbiAgICBoMixcbiAgICBwIHtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgfVxuICAgIGgyIHtcbiAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIH1cbn1cbi5jbXMtcGFnZXRyZWUtc2VjdGlvbi1uYXYge1xuICAgIGZsb2F0OiByaWdodDtcbn1cblxuLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuLy8gRFJPUERPV05cbi8vIGRyb3Bkb3ducyB1c2VkIGZvciBtZW51c1xuLmNtcy1wYWdldHJlZS1kcm9wZG93biB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLmNtcy1wYWdldHJlZS1kcm9wZG93bi10cmlnZ2VyIHt9XG4uY21zLXBhZ2V0cmVlLWRyb3Bkb3duLWNvbnRhaW5lciB7XG4gICAgLy8gcmVmZXJlbmNlcyBmb3VuZCBpbiBfc3VibmF2LnNjc3NcbiAgICBkaXNwbGF5OiBub25lO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB6LWluZGV4OiB6KHN0cnVjdHVyZSwgY29udGVudCwgZHJvcGRvd24pO1xuICAgIHJpZ2h0OiAtMnB4O1xuICAgIHRvcDogMjVweDtcbiAgICBwYWRkaW5nOiA0cHggMDtcbiAgICBtaW4td2lkdGg6ICRkcm9wZG93bi13aWR0aDtcbiAgICBiYWNrZ3JvdW5kOiAkc3VibWVudS1kcm9wZG93bi1iZ2NvbG9yO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzLW5vcm1hbDtcbiAgICBib3gtc2hhZG93OiAkZHJvcGRvd24tc2hhZG93O1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTtcblxuICAgIGEge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgY29sb3I6ICRncmF5O1xuICAgICAgICBsaW5lLWhlaWdodDogMS41O1xuICAgICAgICBwYWRkaW5nOiAxMHB4ICRzdWJtZW51LWl0ZW0tcGFkZGluZy1ob3Jpem9udGFsO1xuICAgICAgICAmOmhvdmVyLFxuICAgICAgICAmOmFjdGl2ZSxcbiAgICAgICAgJjpmb2N1cyB7XG4gICAgICAgICAgICBjb2xvcjogJHdoaXRlICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItcHJpbWFyeTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBsYWJlbFxuICAgIC5sYWJlbCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgICBjb2xvcjogJGdyYXktbGlnaHQ7XG4gICAgICAgIGZvbnQtc2l6ZTogOTAlO1xuICAgICAgICBsaW5lLWhlaWdodDogMS41O1xuICAgICAgICBwYWRkaW5nOiA1cHggJHN1Ym1lbnUtaXRlbS1wYWRkaW5nLWhvcml6b250YWwgMDtcbiAgICB9XG5cbiAgICBsaSB7XG4gICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgIH1cblxuICAgIC8vIGFkZHMgYXJyb3dcbiAgICAmOmJlZm9yZSB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgei1pbmRleDogeihiZWxvdyk7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBsZWZ0OiAxMDAlO1xuICAgICAgICB3aWR0aDogJGRyb3Bkb3duLWFycm93LXNpZGU7XG4gICAgICAgIGhlaWdodDogJGRyb3Bkb3duLWFycm93LXNpZGU7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAtKCRkcm9wZG93bi1hcnJvdy1zaWRlIC8gMik7XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHN1Ym1lbnUtZHJvcGRvd24tYmdjb2xvcjtcbiAgICB9XG59XG5cbi5jbXMtcGFnZXRyZWUtZHJvcGRvd24tc2VwYXJhdG9yIHtcbiAgICBwYWRkaW5nOiAwO1xuICAgIG1hcmdpbjogNHB4IDFweCAhaW1wb3J0YW50O1xuICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgIGhlaWdodDogMXB4O1xuICAgIGJhY2tncm91bmQ6ICRncmF5LWxpZ2h0ZXI7XG59XG5cbi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4vLyBKU1RSRUVcbi5jbXMtcGFnZXRyZWUtY29udGFpbmVyIHtcbiAgICAvLyBvdmVyZmxvdzogYXV0bztcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgei1pbmRleDogeihwYWdldHJlZSwgY29udGFpbmVyKTtcbiAgICBtYXJnaW4tYm90dG9tOiAkcGFnZXRyZWUtYm90dG9tLW9mZnNldDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkZ3JheS1saWdodGVyO1xuICAgIGJvcmRlci10b3A6IG5vbmU7XG4gICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbn1cblxuLmNtcy10cmVlLWNvbCB7XG4gICAgaGVpZ2h0OiAkcGFnZXRyZWUtanN0cmVlLWhlYWRlci1oZWlnaHQ7XG59XG5cbi5jbXMtdHJlZS1pdGVtIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG5cbi5jbXMtdHJlZS1yZWxvYWQge1xuICAgIGZsb2F0OiByaWdodDtcbn1cblxuLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuLy8gVE9PTFRJUFxuLy8gaGFuZGxlcyB0b29sdGlwIHN0eWxpbmdcbi5jbXMtdHJlZS10b29sdGlwLWNvbnRhaW5lciB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6ICRwYWdldHJlZS10b29sdGlwLW9mZnNldDtcbiAgICB0b3A6IC0kcGFnZXRyZWUtaWNvbi1vZmZzZXQ7XG4gICAgei1pbmRleDogMTAwO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXMtYmFzZTtcbiAgICBiYWNrZ3JvdW5kOiAkd2hpdGU7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGdyYXktbGlnaHRlcjtcblxuICAgIC8vIGljb24gb24gdGhlIHJpZ2h0XG4gICAgJjpiZWZvcmUge1xuICAgICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGxlZnQ6IDEwMCU7XG4gICAgICAgIHRvcDogJHBhZ2V0cmVlLWljb24tb2Zmc2V0ICsgMjtcbiAgICAgICAgei1pbmRleDogMTtcbiAgICAgICAgd2lkdGg6ICRkcm9wZG93bi1hcnJvdy1zaWRlO1xuICAgICAgICBoZWlnaHQ6ICRkcm9wZG93bi1hcnJvdy1zaWRlO1xuICAgICAgICBtYXJnaW4tbGVmdDogLSgkZHJvcGRvd24tYXJyb3ctc2lkZSAvIDIpO1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XG4gICAgICAgIGJveC1zaGFkb3c6ICRkcm9wZG93bi1zaGFkb3c7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRzdWJtZW51LWRyb3Bkb3duLWJnY29sb3I7XG4gICAgfVxuXG4gICAgaDMge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHotaW5kZXg6IDEwO1xuICAgICAgICBjb2xvcjogJGdyYXktbGlnaHQ7XG4gICAgICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbWFsbDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgcGFkZGluZzogJHBhZ2V0cmVlLXRvb2x0aXAtaGVhZGVyLXBhZGRpbmc7XG4gICAgICAgIG1hcmdpbjogMCAhaW1wb3J0YW50O1xuICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJGdyYXktbGlnaHRlcjtcbiAgICAgICAgYmFja2dyb3VuZDogJHdoaXRlO1xuICAgIH1cblxuICAgIGEge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgcGFkZGluZzogJHBhZ2V0cmVlLXRvb2x0aXAtYW5jaG9yLXBhZGRpbmc7XG4gICAgICAgIG1pbi13aWR0aDogJHBhZ2V0cmVlLXRvb2x0aXAtbWluLXdpZHRoO1xuICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRncmF5LWxpZ2h0ZXI7XG5cbiAgICAgICAgJjpob3ZlcixcbiAgICAgICAgJjpsaW5rOmhvdmVyIHtcbiAgICAgICAgICAgIGNvbG9yOiBkYXJrZW4oJGNvbG9yLXByaW1hcnksIDEwJSkgIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgICAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLmNtcy1pY29uIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB0b3A6IDNweDtcbiAgICAgICAgbGVmdDogLTFweDtcbiAgICB9XG4gICAgLy8gb3BlbiBzdGF0ZVxuICAgICYtb3BlbiB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbn1cbi5jbXMtdHJlZS10b29sdGlwLXdyYXBwZXIge1xuICAgIHBhZGRpbmc6IDEwcHg7XG59XG5cbi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbi8vIElDT05TXG4vLyB1c2VkIGZvciB0aGUgc2l0ZW1hcCBhbmQgYXBwaG9vayBpY29uc1xuLmNtcy10cmVlLWl0ZW0taWNvbnMge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB0b3A6ICRwYWdldHJlZS1pY29uLW9mZnNldDtcbiAgICBwYWRkaW5nOiAkcGFnZXRyZWUtaWNvbi1wYWRkaW5nO1xuXG4gICAgc3BhbjpiZWZvcmUge1xuICAgICAgICBjb2xvcjogJGdyYXktbGlnaHQ7XG4gICAgfVxuXG4gICAgJi1kYXJrIHNwYW46YmVmb3JlIHtcbiAgICAgICAgY29sb3I6ICRncmF5LWRhcmtlcjtcbiAgICB9XG59XG5cbi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbi8vIFBSRVZJRVdcbi8vIHNob3dzIHByZXZpZXcgZXllIGljb25cbi5jbXMtdHJlZS1pdGVtLXByZXZpZXcge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAvLyBuZWVkIGN1c3RvbSBwb3NpdGlvbmluZyBoZXJlXG4gICAgdG9wOiAycHg7XG4gICAgbGVmdDogM3B4O1xuXG4gICAgYSB7XG4gICAgICAgIEBleHRlbmQgJWljb247XG4gICAgICAgIEBpbmNsdWRlIGljb24oZXllKTtcbiAgICAgICAgZm9udC1zaXplOiAkcGFnZXRyZWUtaWNvbi1zaXplO1xuXG4gICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgIGNvbG9yOiAkZ3JheS1kYXJrZXI7XG4gICAgICAgIH1cbiAgICAgICAgJjpob3ZlcjpiZWZvcmUge1xuICAgICAgICAgICAgY29sb3I6ICRibGFjaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBzcGFuIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICBAaW5jbHVkZSBoaWRlLWNvbnRlbnQoKTtcbiAgICB9XG5cbiAgICAvLyBhY3RpdmUgc3RhdGUgZm9yIGN1cnJlbnQgc2VsZWN0ZWQgcGFnZVxuICAgICYtYWN0aXZlIGE6YmVmb3JlIHtcbiAgICAgICAgY29sb3I6ICRibGFjaztcbiAgICB9XG59XG5cbi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbi8vIExBTkdVQUdFXG4vLyBzaG93cyBsYW5ndWFnZSBidWJibGVzXG4uY21zLXRyZWUtaXRlbS1sYW5nIHtcbiAgICAvLyByZXF1aXJlZCBmb3IgdG9vbHRpcFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB0b3A6ICRwYWdldHJlZS1pY29uLW9mZnNldDtcbiAgICAuY21zLXRyZWUtdG9vbHRpcC1jb250YWluZXIge1xuICAgICAgICByaWdodDogJHBhZ2V0cmVlLXRvb2x0aXAtb2Zmc2V0IC0gMztcbiAgICB9XG59XG4uY21zLXRyZWUtbGFuZy1jb250YWluZXIgc3BhbiB7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2lkdGg6ICRwYWdldHJlZS1sYW5nLXNpemU7XG4gICAgaGVpZ2h0OiAkcGFnZXRyZWUtbGFuZy1zaXplO1xuICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7XG4gICAgLy8gd2lsbCBjaGFuZ2UgYWNjb3JkaW5nIHRvIHN0YXRlc1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICR3aGl0ZTtcbiAgICBiYWNrZ3JvdW5kOiAkd2hpdGU7XG4gICAgJi5lbXB0eSB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogJGdyYXktbGlnaHQ7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR3aGl0ZTtcbiAgICB9XG4gICAgJi51bnB1Ymxpc2hlZCxcbiAgICAmLnVucHVibGlzaGVkcGFyZW50IHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkZ3JheS1saWdodDtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGdyYXktbGlnaHQ7XG4gICAgfVxuICAgICYucHVibGlzaGVkIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkY29sb3Itc3VjY2VzcztcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLXN1Y2Nlc3M7XG4gICAgfVxuICAgICYuZGlydHkge1xuICAgICAgICBhbmltYXRpb246IHB1bHNhdGUgMi41cyBlYXNlLW91dCBpbmZpbml0ZTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkY29sb3ItcHJpbWFyeTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLXByaW1hcnk7XG4gICAgfVxufVxuXG4vLyBhbmltYXRpb24gZm9yIHB1Ymxpc2hpbmdcbkBrZXlmcmFtZXMgcHVsc2F0ZSB7XG4gICAgMCUge1xuICAgICAgICBvcGFjaXR5OiAwLjU7XG4gICAgfVxuICAgIDUwJSB7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuICAgIDEwMCUge1xuICAgICAgICBvcGFjaXR5OiAwLjU7XG4gICAgfVxufVxuXG4vLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4vLyBMQU5HVUFHRVxuLy8gc2hvd3MgbGFuZ3VhZ2UgYnViYmxlc1xuLmNtcy10cmVlLWl0ZW0tbWVudSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHRvcDogJHBhZ2V0cmVlLWljb24tb2Zmc2V0IC0gMTtcblxuICAgIC5jbXMtaWNvbjpiZWZvcmUge1xuICAgICAgICBmb250LXNpemU6ICRwYWdldHJlZS1pY29uLXNpemUgLSA0O1xuICAgICAgICBjb2xvcjogJGdyYXktZGFya2VyO1xuICAgIH1cbiAgICAuY21zLWljb24tY2hlY2stc3F1YXJlOmJlZm9yZSB7XG4gICAgICAgIGNvbG9yOiAkY29sb3Itc3VjY2VzcztcbiAgICB9XG59XG5cbi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbi8vIElORk9cbi8vIGljb24gdXNlZCBhdCB0aGUgZW5kIHRvIGRpc3BsYXkgYWRkaXRpb25hbCBoZWxwXG4uY21zLXRyZWUtaXRlbS1pbmZvIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgdG9wOiAkcGFnZXRyZWUtaWNvbi1vZmZzZXQ7XG4gICAgbGVmdDogMXB4O1xuXG4gICAgLmNtcy1pY29uOmJlZm9yZSB7XG4gICAgICAgIGZvbnQtc2l6ZTogJHBhZ2V0cmVlLWljb24tc2l6ZTtcbiAgICB9XG5cbiAgICBwIHtcbiAgICAgICAgY29sb3I6ICRncmF5LWRhcmtlc3Q7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICB9XG4gICAgc3Ryb25nIHtcbiAgICAgICAgY29sb3I6ICRncmF5LWxpZ2h0O1xuICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgIH1cbn1cblxuLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuLy8gU0VBUkNIICYgRklMVEVSSU5HXG4vLyBzZWFyY2hmb3JtIG9yIGZpbHRlcmluZ1xuLmNtcy10cmVlLXNlYXJjaCB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgbWFyZ2luLXJpZ2h0OiA1cHg7XG4gICAgbGFiZWwge1xuICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIHNlbGVjdCB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgdG9wOiAycHg7XG4gICAgICAgIHdpZHRoOiAkcGFnZXRyZWUtc2VhcmNoLXdpZHRoICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC8vIG5lZWQgdG8gb3ZlcndyaXRlIGRqYW5nb2Ntcy1hZG1pbi10aGVtZVxuICAgICN0b29sYmFyIGZvcm0jY2hhbmdlbGlzdC1zZWFyY2ggaW5wdXRbdHlwZT1cInN1Ym1pdFwiXSB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgICN0b29sYmFyIGZvcm0jY2hhbmdlbGlzdC1zZWFyY2ggI3NlYXJjaGJhciB7XG4gICAgICAgIHdpZHRoOiAkcGFnZXRyZWUtc2VhcmNoLXdpZHRoICFpbXBvcnRhbnQ7XG4gICAgfVxufVxuLmNtcy10cmVlLWZpbHRlcnMge1xuICAgIGZsb2F0OiByaWdodDtcbiAgICAuanMtY21zLXRyZWUtZmlsdGVyLXRyaWdnZXIge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDIwcHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAzMHB4O1xuICAgICAgICB3aWR0aDogMTc1cHg7XG4gICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkZ3JheS1saWdodGVyO1xuICAgIH1cbiAgICBoMiB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxufVxuXG4vLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4vLyBPVEhFUlxuXG4vLyBzZWFyY2hmb3JtIG9yIGZpbHRlcmluZ1xuLmNtcy1wYWdldHJlZS1lbXB0eSB7XG4gICAgcGFkZGluZzogJHBhZ2V0cmVlLWhlYWRlci1wYWRkaW5nO1xuICAgIGJvcmRlci10b3A6IG5vbmU7XG4gICAgLmFkZGxpbmsge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgfVxufVxuXG4vLyBkamFuZ28gZGVmYXVsdCBhZG1pbiB0aGVtZSBhZGFwdGlvbnNcbi5jbXMtdHJlZS1jb2wge1xuICAgIGxpbmUtaGVpZ2h0OiAxNnB4O1xufVxuXG4vLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuLy8gUEFHRVRSRUUgVEhFTUVcblxuLy8gdGhpcyBsZXZlbCBpcyByZXF1aXJlZCB0byBtYWtlIHN1cmUgZGphbmdvY21zLWFkbWluLXN0eWxlIG9yIGRqYW5nby1hZG1pblxuLy8gYXJlIG5vdCBpbnRlcmZlcmluZyAoaW5jcmVhc2luZyBzcGVjaWZpY2l0eSkuIFRoaXMgc2VjdGlvbiBvbmx5IGRlZmluZXNcbi8vIHJlc2V0cyBhZGRlZCB0aHJvdWdoIGlubGluZSBzdHlsZXNcbi5qc3RyZWUtZGphbmdvLWNtcyB7XG4gICAgLy8gcGFyZW50IGFuZCBjaGlsZHJlbiB1bFxuICAgIC5qc3RyZWUtY29udGFpbmVyLXVsLFxuICAgIC5qc3RyZWUtY2hpbGRyZW4sXG4gICAgLy8gY2hpbGRyZW4gYW5kIGNoaWxkcmVucyBjaGlsZHJlbiBsaVxuICAgIC5qc3RyZWUtbGVhZixcbiAgICAuanN0cmVlLW5vZGUgIHtcbiAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgfVxuXG4gICAgLy8gZ3JpZCBzZXR0aW5ncyBhbmQgcmVzZXRzIGFkZGVkIGJ5IGBqc3RyZWUuZ3JpZC5qc2BcbiAgICAuanN0cmVlLWdyaWQtaGVhZGVyLFxuICAgIC5qc3RyZWUtZ3JpZC1zZXBhcmF0b3Ige1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIC8vIHRoZXJlIGFyZSBpbmxpbmUgc3R5bGVzIHNldCB0byB0aGlzIHBhcnRcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIH1cbiAgICAmLmpzdHJlZS1ncmlkLWNlbGwge1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgIH1cblxuICAgIC8vIHRvb2x0aXBzIGFyZSBoaWRkZW4gaWYgb3ZlcmZsb3cgaXMgcHJldmVudGVkXG4gICAgLmpzdHJlZS1ncmlkLWNvbHVtbixcbiAgICAuanN0cmVlLWdyaWQtY2VsbCB7XG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICAgIH1cblxuICAgIC8vIGRpc2FibGUgaGlnaGxpZ2h0IG9uIGlPUyBkZXZpY2VzXG4gICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApO1xufVxuXG4vLyB3cmFwcGVyIGFkZGVkIGJ5IGpzdHJlZVxuLmpzdHJlZS1ncmlkLXdyYXBwZXIge1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgb3ZlcmZsb3c6IHZpc2libGUgIWltcG9ydGFudDtcbiAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xufVxuXG4vLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4vLyBESkFOR08tQ01TIFRIRU1FXG5cbi8vIGdlbmVyYWwgd3JhcHBlclxuLmpzdHJlZS1ncmlkLXdyYXBwZXIge1xuICAgIGJhY2tncm91bmQ6ICRncmF5LWxpZ2h0ZXN0O1xufVxuXG4vLyBzcGVjaWZpY2l0eSByZXF1aXJlZCBmb3IgYWRtaW4gc3R5bGVzIGFuZCBqc3RyZWUgcmVzZXRzXG4uanN0cmVlLWRqYW5nby1jbXMge1xuICAgIC5qc3RyZWUge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6ICRwYWdldHJlZS1uZXN0aW5nLXBhZGRpbmcgLyAyO1xuICAgIH1cbiAgICAvLyBoZWFkZXIgY29sdW1uXG4gICAgLmpzdHJlZS1ncmlkLWhlYWRlciB7XG4gICAgICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbWFsbDtcbiAgICAgICAgZm9udC1jb2xvcjogJGdyYXk7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgcGFkZGluZzogJHBhZ2V0cmVlLWpzdHJlZS1oZWFkZXItcGFkZGluZztcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRncmF5LWxpZ2h0ZXI7XG4gICAgICAgIGJhY2tncm91bmQ6ICR3aGl0ZTtcbiAgICB9XG4gICAgLy8gZW5zdXJlIGZpcnN0IGxpbmUgaXMgbm90IGNlbnRlcmVkXG4gICAgLmpzdHJlZS1ncmlkLWNvbHVtbi0wIC5qc3RyZWUtZ3JpZC1oZWFkZXIge1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0ICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuICAgIC8vIHN0eWxlcyBmb3IgbmVzdGluZyBlbGVtZW50c1xuICAgIC5qc3RyZWUtY29udGFpbmVyLXVsIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6ICRwYWdldHJlZS1uZXN0aW5nLXBhZGRpbmc7XG4gICAgfVxuICAgIC5qc3RyZWUtY2hpbGRyZW4ge1xuICAgICAgICBtYXJnaW4tbGVmdDogJHBhZ2V0cmVlLW5lc3RpbmctcGFkZGluZztcbiAgICB9XG4gICAgLmpzdHJlZS1vY2wge1xuICAgICAgICBmbG9hdDogbGVmdDtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBsZWZ0OiAtJHBhZ2V0cmVlLW5lc3RpbmctcGFkZGluZztcbiAgICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgICBjb2xvcjogJGdyYXktbGlnaHQ7XG4gICAgICAgIHBhZGRpbmc6IDE1cHggMTBweCAxMHB4IDA7XG4gICAgICAgIEBleHRlbmQgJWljb247XG4gICAgfVxuICAgIC5qc3RyZWUtb3BlbiA+IC5qc3RyZWUtb2NsLFxuICAgIC5qc3RyZWUtY2xvc2VkID4gLmpzdHJlZS1vY2wge1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgICAgY29udGVudDogXCJcIjtcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgcmlnaHQ6IDJweDtcbiAgICAgICAgICAgIHRvcDogMjBweDtcbiAgICAgICAgICAgIHdpZHRoOiA4cHg7XG4gICAgICAgICAgICBoZWlnaHQ6IDJweDtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICRncmF5LWxpZ2h0ZXI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLmpzdHJlZS1vcGVuID4gLmpzdHJlZS1vY2wge1xuICAgICAgICBAaW5jbHVkZSBpY29uKG1pbnVzLXNxdWFyZS1vKTtcbiAgICB9XG4gICAgLmpzdHJlZS1jbG9zZWQgPiAuanN0cmVlLW9jbCB7XG4gICAgICAgIEBpbmNsdWRlIGljb24ocGx1cy1zcXVhcmUtbyk7XG4gICAgfVxuICAgIC5qc3RyZWUtbG9hZGluZyA+IC5qc3RyZWUtb2NsIHtcbiAgICAgICAgQGluY2x1ZGUgaWNvbihsb2FkZXIpO1xuICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgICBhbmltYXRpb246IGNtcy1zcGluIDJzIGluZmluaXRlIGxpbmVhcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiAgICAvLyBiYWNrZ3JvdW5kIGNvbG9yIGFuZCBwYWRkaW5ncyBmb3Igbm9kZXNcbiAgICAvLyBmaXJzdCByb3cgc3R5bGluZ1xuICAgIC5qc3RyZWUtYW5jaG9yIHtcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGN1cnNvcjogbW92ZTtcbiAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgICAgY29sb3I6ICRncmF5O1xuICAgICAgICAvLyB3ZSBuZWVkIHRvIGFkZCBvbmUgcGl4ZWwgaW4gdG8gbmVnYXRlIHRoZSBuZWdhdGl2ZSBtYXJnaW5cbiAgICAgICAgLy8gdmFsdWUgdG8gZ2V0IHRoZSBib3JkZXJzIHRvIHdvcmsgdmlzdWFsbHlcbiAgICAgICAgaGVpZ2h0OiAkcGFnZXRyZWUtY2VsbC1oZWlnaHQgKyAxO1xuICAgICAgICBwYWRkaW5nOiAkcGFnZXRyZWUtYW5jaG9yLXBhZGRpbmc7XG4gICAgICAgIG1hcmdpbi10b3A6IC0xcHg7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICRncmF5LWxpZ2h0ZXI7XG4gICAgICAgIGJvcmRlci1yaWdodDogbm9uZTtcbiAgICAgICAgYmFja2dyb3VuZDogJHdoaXRlIHVybCgnLi4vaW1nL3BhZ2V0cmVlL3RyZWUtbGktZHJhZy5naWYnKSBuby1yZXBlYXQgLTFweCBjZW50ZXI7XG5cbiAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgICBjb2xvcjogJGdyYXkgIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAuY21zLXRyZWUtbm9kZS1maWx0ZXJlZCAuanN0cmVlLWFuY2hvciB7XG4gICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICB9XG4gICAgLy8gc3R5bGUgY2VsbHMgYWZ0ZXJ3YXJkc1xuICAgIC5qc3RyZWUtZ3JpZC1jZWxsIHtcbiAgICAgICAgaGVpZ2h0OiAkcGFnZXRyZWUtY2VsbC1oZWlnaHQ7XG4gICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkZ3JheS1saWdodGVyO1xuICAgICAgICBiYWNrZ3JvdW5kOiAkd2hpdGU7XG4gICAgICAgIC8vIGRvbid0IGFwcGx5IHRoZXNlIHN0eWxlcyBmb3IgdGhlIGZpcnN0IGNvbHVtblxuICAgICAgICAmLmpzdHJlZS1kamFuZ28tY21zIHtcbiAgICAgICAgICAgIGhlaWdodDogYXV0bztcbiAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLmpzdHJlZS1ncmlkLWNlbGwtcmVndWxhciB7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgcGFkZGluZzogJHBhZ2V0cmVlLWNlbGwtcGFkZGluZztcbiAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAkZ3JheS1saWdodGVyO1xuICAgIH1cbiAgICAuanN0cmVlLWdyaWQtY2VsbC1yZWd1bGFyLW9wdGlvbnMge1xuICAgICAgICBib3JkZXItbGVmdDogbm9uZTtcbiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgfVxuICAgIC8vIGhvdmVyIHN0YXRlc1xuICAgIC5qc3RyZWUtaG92ZXJlZCxcbiAgICAuanN0cmVlLWNsaWNrZWQge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGVuKCRncmF5LWxpZ2h0ZXN0LCAzJSk7XG4gICAgfVxuXG4gICAgLy8gc3BlY2lhbCBjYXNlIGZvciBwYXN0ZSBoZWFkZXJcbiAgICAuanN0cmVlLWdyaWQtY29sdW1uLTEgLmpzdHJlZS1ncmlkLWhlYWRlciB7XG4gICAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgICAgICBhIHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbWFsbDtcbiAgICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgfVxuICAgICAgICBzcGFuIHtcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNwZWNpYWwgaWNvbiBmb3IgcGFzdGluZ1xuICAgICAgICAuY21zLWljb24ge1xuICAgICAgICAgICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtYWxsO1xuICAgICAgICAgICAgcGFkZGluZy1yaWdodDogJHBhZ2V0cmVlLWljb24tb2Zmc2V0O1xuICAgICAgICAgICAgbWFyZ2luLWxlZnQ6ICRwYWdldHJlZS1pY29uLW9mZnNldDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuLy8gaW5pdGlhbCBsb2FkaW5nIGRpc3BsYXkgb2YgdGhlIHRyZWVcbi5qc3RyZWUuanN0cmVlLWxvYWRpbmcge1xuICAgIC5qc3RyZWUtY29udGFpbmVyLXVsIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgIH1cbiAgICAuanN0cmVlLWFuY2hvciB7XG4gICAgICAgIHBhZGRpbmctdG9wOiAxM3B4O1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDE1cHg7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICB9XG5cbiAgICAuanN0cmVlLWxvYWRpbmcgPiAuanN0cmVlLW9jbCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxufVxuXG4vLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4vLyBzdWNjZXNzIGFuaW1hdGlvbiBhbmQgcGFzdGUgZnVuY3Rpb25hbGl0eVxuLy8gdGhpcyBzaG91bGQgb25seSBiZSBhdHRhY2hlZCB0byB0aGUgcm9vdFxuLmNtcy10cmVlLW5vZGUtc3VjY2VzcyB7XG4gICAgPiAuanN0cmVlLWFuY2hvciAuanN0cmVlLXRoZW1laWNvbiB7XG4gICAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgdG9wOiA0cHg7XG4gICAgICAgIGNvbG9yOiAkY29sb3Itc3VjY2VzcztcbiAgICAgICAgQGV4dGVuZCAlaWNvbjtcbiAgICAgICAgQGluY2x1ZGUgaWNvbihjaGVjayk7XG4gICAgfVxufVxuXG4uY21zLXRyZWUtaXRlbS1oZWxwZXJzIGEge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB0b3A6IDJweDtcbiAgICBmb250LXNpemU6ICRmb250LXNpemUtbm9ybWFsO1xuICAgIC5jbXMtaWNvbiB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgdG9wOiAxcHg7XG4gICAgICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbWFsbDtcbiAgICB9XG59XG5cbi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbi8vIGRyYWcgJiBkcm9wIGl0ZW1cbiNqc3RyZWUtZG5kIHtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1pbi13aWR0aDogMzAwcHg7XG4gICAgaGVpZ2h0OiAkcGFnZXRyZWUtY2VsbC1oZWlnaHQ7XG4gICAgcGFkZGluZzogJHBhZ2V0cmVlLWFuY2hvci1wYWRkaW5nICFpbXBvcnRhbnQ7XG4gICAgbWFyZ2luLWxlZnQ6IC0kcGFnZXRyZWUtbWFya2VyLXNpemUgKyAxO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRncmF5LWxpZ2h0ZXI7XG4gICAgYmFja2dyb3VuZDogJHdoaXRlO1xuICAgIC8vIGNvcHkgaWNvbiB0cmlnZ2VyZWQgd2hlbiBwcmVzc2luZyBgQ01EYFxuICAgIC5qc3RyZWUtY29weSB7XG4gICAgICAgIGNvbG9yOiAkd2hpdGU7XG4gICAgICAgIHBhZGRpbmc6IDAgNXB4IDJweDtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXMtYmFzZTtcbiAgICAgICAgYmFja2dyb3VuZDogJGdyYXktbGlnaHQ7XG4gICAgfVxuICAgIC8vIGVycm9yIGNvbG9yIGRpc3BsYXllZCBpZiB3ZSBjYW4vY2Fubm90IG1vdmUgaXRcbiAgICAuanN0cmVlLW9rLFxuICAgIC5qc3RyZWUtZXIge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogLTVweDtcbiAgICAgICAgd2lkdGg6IDVweDtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICBiYWNrZ3JvdW5kOiAkZ3JheS1saWdodGVyO1xuICAgIH1cbiAgICAuanN0cmVlLW9rIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLXN1Y2Nlc3M7XG4gICAgfVxuICAgIC5qc3RyZWUtZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3ItZGFuZ2VyO1xuICAgIH1cbn1cblxuI2pzdHJlZS1tYXJrZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBtYXJnaW46IC0kcGFnZXRyZWUtbWFya2VyLXNpemUgMCAwIDA7XG4gICAgYm9yZGVyLXJpZ2h0OiAwO1xuICAgIGJvcmRlci10b3A6ICRwYWdldHJlZS1tYXJrZXItc2l6ZSBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICBib3JkZXItYm90dG9tOiAkcGFnZXRyZWUtbWFya2VyLXNpemUgc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyLWxlZnQ6ICRwYWdldHJlZS1tYXJrZXItc2l6ZSBzb2xpZCAkYmxhY2s7XG4gICAgd2lkdGg6IDA7XG4gICAgaGVpZ2h0OiAwO1xufVxuIiwiLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbi8vIENVU1RPTVxuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vQ29tcGFzcy9jb21wYXNzL2Jsb2Ivc3RhYmxlL2NvcmUvc3R5bGVzaGVldHMvY29tcGFzcy90eXBvZ3JhcGh5L3RleHQvX3JlcGxhY2VtZW50LnNjc3NcbkBtaXhpbiBoaWRlLWNvbnRlbnQoKSB7XG4gICAgJGFwcHJveGltYXRlLWVtLXZhbHVlOiAxMnB4IC8gMWVtO1xuICAgICR3aWRlci10aGFuLWFueS1zY3JlZW46IC05OTk5ZW07XG4gICAgdGV4dC1pbmRlbnQ6ICR3aWRlci10aGFuLWFueS1zY3JlZW4gKiAkYXBwcm94aW1hdGUtZW0tdmFsdWU7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 */ \ No newline at end of file diff --git a/cms/static/cms/js/dist/bundle.admin.pagetree.min.js b/cms/static/cms/js/dist/bundle.admin.pagetree.min.js index 224516ee072..bb1911ca68c 100644 --- a/cms/static/cms/js/dist/bundle.admin.pagetree.min.js +++ b/cms/static/cms/js/dist/bundle.admin.pagetree.min.js @@ -79,7 +79,6 @@ var CMS = window.CMS || {}; _setupUI: function _setupUI() { var pagetree = $('.cms-pagetree'); this.ui = { - document: $(document), container: pagetree, document: $(document), tree: pagetree.find('.js-cms-pagetree'), @@ -841,4 +840,4 @@ var CMS = window.CMS || {}; })(CMS.$); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpzdHJlZS5taW4uanMiLCJqc3RyZWUuZ3JpZC5taW4uanMiLCJjbXMucGFnZXRyZWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUNiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImJ1bmRsZS5hZG1pbi5wYWdldHJlZS5taW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICAgIFRISVMgRklMRSBIQVMgQkVFTiBNQU5VQUxMWSBQQVRDSEVEIFVOVElMIFBSICMxMzQyIEdFVFMgUkVMRUFTRURcbiAgICBodHRwczovL2dpdGh1Yi5jb20vdmFrYXRhL2pzdHJlZS9wdWxsLzEzNDIvZmlsZXNcbiAqL1xuIWZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO1wiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wianF1ZXJ5XCJdLGUpOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGUmJm1vZHVsZS5leHBvcnRzP21vZHVsZS5leHBvcnRzPWUocmVxdWlyZShcImpxdWVyeVwiKSk6ZShqUXVlcnkpfShmdW5jdGlvbihlLHQpe1widXNlIHN0cmljdFwiO2lmKCFlLmpzdHJlZSl7dmFyIGkscixzPTAsbj0hMSxhPSExLG89ITEsZD1bXSxjPWUoXCJzY3JpcHQ6bGFzdFwiKS5hdHRyKFwic3JjXCIpLGw9d2luZG93LmRvY3VtZW50LGg9bC5jcmVhdGVFbGVtZW50KFwiTElcIik7aC5zZXRBdHRyaWJ1dGUoXCJyb2xlXCIsXCJ0cmVlaXRlbVwiKSxpPWwuY3JlYXRlRWxlbWVudChcIklcIiksaS5jbGFzc05hbWU9XCJqc3RyZWUtaWNvbiBqc3RyZWUtb2NsXCIsaS5zZXRBdHRyaWJ1dGUoXCJyb2xlXCIsXCJwcmVzZW50YXRpb25cIiksaC5hcHBlbmRDaGlsZChpKSxpPWwuY3JlYXRlRWxlbWVudChcIkFcIiksaS5jbGFzc05hbWU9XCJqc3RyZWUtYW5jaG9yXCIsaS5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsXCIjXCIpLGkuc2V0QXR0cmlidXRlKFwidGFiaW5kZXhcIixcIi0xXCIpLHI9bC5jcmVhdGVFbGVtZW50KFwiSVwiKSxyLmNsYXNzTmFtZT1cImpzdHJlZS1pY29uIGpzdHJlZS10aGVtZWljb25cIixyLnNldEF0dHJpYnV0ZShcInJvbGVcIixcInByZXNlbnRhdGlvblwiKSxpLmFwcGVuZENoaWxkKHIpLGguYXBwZW5kQ2hpbGQoaSksaT1yPW51bGwsZS5qc3RyZWU9e3ZlcnNpb246XCIzLjIuMVwiLGRlZmF1bHRzOntwbHVnaW5zOltdfSxwbHVnaW5zOnt9LHBhdGg6YyYmLTEhPT1jLmluZGV4T2YoXCIvXCIpP2MucmVwbGFjZSgvXFwvW15cXC9dKyQvLFwiXCIpOlwiXCIsaWRyZWdleDovW1xcXFw6JiFefCgpXFxbXFxdPD5AKicrfiNcIjsuLD1cXC0gXFwvJHt9JT9gXS9nLHJvb3Q6XCIjXCJ9LGUuanN0cmVlLmNyZWF0ZT1mdW5jdGlvbih0LGkpe3ZhciByPW5ldyBlLmpzdHJlZS5jb3JlKCsrcyksbj1pO3JldHVybiBpPWUuZXh0ZW5kKCEwLHt9LGUuanN0cmVlLmRlZmF1bHRzLGkpLG4mJm4ucGx1Z2lucyYmKGkucGx1Z2lucz1uLnBsdWdpbnMpLGUuZWFjaChpLnBsdWdpbnMsZnVuY3Rpb24oZSx0KXtcImNvcmVcIiE9PWUmJihyPXIucGx1Z2luKHQsaVt0XSkpfSksZSh0KS5kYXRhKFwianN0cmVlXCIsciksci5pbml0KHQsaSkscn0sZS5qc3RyZWUuZGVzdHJveT1mdW5jdGlvbigpe2UoXCIuanN0cmVlOmpzdHJlZVwiKS5qc3RyZWUoXCJkZXN0cm95XCIpLGUobCkub2ZmKFwiLmpzdHJlZVwiKX0sZS5qc3RyZWUuY29yZT1mdW5jdGlvbihlKXt0aGlzLl9pZD1lLHRoaXMuX2NudD0wLHRoaXMuX3dyaz1udWxsLHRoaXMuX2RhdGE9e2NvcmU6e3RoZW1lczp7bmFtZTohMSxkb3RzOiExLGljb25zOiExfSxzZWxlY3RlZDpbXSxsYXN0X2Vycm9yOnt9LHdvcmtpbmc6ITEsd29ya2VyX3F1ZXVlOltdLGZvY3VzZWQ6bnVsbH19fSxlLmpzdHJlZS5yZWZlcmVuY2U9ZnVuY3Rpb24odCl7dmFyIGk9bnVsbCxyPW51bGw7aWYoIXR8fCF0LmlkfHx0LnRhZ05hbWUmJnQubm9kZVR5cGV8fCh0PXQuaWQpLCFyfHwhci5sZW5ndGgpdHJ5e3I9ZSh0KX1jYXRjaChzKXt9aWYoIXJ8fCFyLmxlbmd0aCl0cnl7cj1lKFwiI1wiK3QucmVwbGFjZShlLmpzdHJlZS5pZHJlZ2V4LFwiXFxcXCQmXCIpKX1jYXRjaChzKXt9cmV0dXJuIHImJnIubGVuZ3RoJiYocj1yLmNsb3Nlc3QoXCIuanN0cmVlXCIpKS5sZW5ndGgmJihyPXIuZGF0YShcImpzdHJlZVwiKSk/aT1yOmUoXCIuanN0cmVlXCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgcj1lKHRoaXMpLmRhdGEoXCJqc3RyZWVcIik7cmV0dXJuIHImJnIuX21vZGVsLmRhdGFbdF0/KGk9ciwhMSk6dm9pZCAwfSksaX0sZS5mbi5qc3RyZWU9ZnVuY3Rpb24oaSl7dmFyIHI9XCJzdHJpbmdcIj09dHlwZW9mIGkscz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksbj1udWxsO3JldHVybiBpIT09ITB8fHRoaXMubGVuZ3RoPyh0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYT1lLmpzdHJlZS5yZWZlcmVuY2UodGhpcyksbz1yJiZhP2FbaV06bnVsbDtyZXR1cm4gbj1yJiZvP28uYXBwbHkoYSxzKTpudWxsLGF8fHJ8fGkhPT10JiYhZS5pc1BsYWluT2JqZWN0KGkpfHxlLmpzdHJlZS5jcmVhdGUodGhpcyxpKSwoYSYmIXJ8fGk9PT0hMCkmJihuPWF8fCExKSxudWxsIT09biYmbiE9PXQ/ITE6dm9pZCAwfSksbnVsbCE9PW4mJm4hPT10P246dGhpcyk6ITF9LGUuZXhwcltcIjpcIl0uanN0cmVlPWUuZXhwci5jcmVhdGVQc2V1ZG8oZnVuY3Rpb24oaSl7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBlKGkpLmhhc0NsYXNzKFwianN0cmVlXCIpJiZlKGkpLmRhdGEoXCJqc3RyZWVcIikhPT10fX0pLGUuanN0cmVlLmRlZmF1bHRzLmNvcmU9e2RhdGE6ITEsc3RyaW5nczohMSxjaGVja19jYWxsYmFjazohMSxlcnJvcjplLm5vb3AsYW5pbWF0aW9uOjIwMCxtdWx0aXBsZTohMCx0aGVtZXM6e25hbWU6ITEsdXJsOiExLGRpcjohMSxkb3RzOiEwLGljb25zOiEwLHN0cmlwZXM6ITEsdmFyaWFudDohMSxyZXNwb25zaXZlOiExfSxleHBhbmRfc2VsZWN0ZWRfb25sb2FkOiEwLHdvcmtlcjohMCxmb3JjZV90ZXh0OiExLGRibGNsaWNrX3RvZ2dsZTohMH0sZS5qc3RyZWUuY29yZS5wcm90b3R5cGU9e3BsdWdpbjpmdW5jdGlvbih0LGkpe3ZhciByPWUuanN0cmVlLnBsdWdpbnNbdF07cmV0dXJuIHI/KHRoaXMuX2RhdGFbdF09e30sci5wcm90b3R5cGU9dGhpcyxuZXcgcihpLHRoaXMpKTp0aGlzfSxpbml0OmZ1bmN0aW9uKHQsaSl7dGhpcy5fbW9kZWw9e2RhdGE6e30sY2hhbmdlZDpbXSxmb3JjZV9mdWxsX3JlZHJhdzohMSxyZWRyYXdfdGltZW91dDohMSxkZWZhdWx0X3N0YXRlOntsb2FkZWQ6ITAsb3BlbmVkOiExLHNlbGVjdGVkOiExLGRpc2FibGVkOiExfX0sdGhpcy5fbW9kZWwuZGF0YVtlLmpzdHJlZS5yb290XT17aWQ6ZS5qc3RyZWUucm9vdCxwYXJlbnQ6bnVsbCxwYXJlbnRzOltdLGNoaWxkcmVuOltdLGNoaWxkcmVuX2Q6W10sc3RhdGU6e2xvYWRlZDohMX19LHRoaXMuZWxlbWVudD1lKHQpLmFkZENsYXNzKFwianN0cmVlIGpzdHJlZS1cIit0aGlzLl9pZCksdGhpcy5zZXR0aW5ncz1pLHRoaXMuX2RhdGEuY29yZS5yZWFkeT0hMSx0aGlzLl9kYXRhLmNvcmUubG9hZGVkPSExLHRoaXMuX2RhdGEuY29yZS5ydGw9XCJydGxcIj09PXRoaXMuZWxlbWVudC5jc3MoXCJkaXJlY3Rpb25cIiksdGhpcy5lbGVtZW50W3RoaXMuX2RhdGEuY29yZS5ydGw/XCJhZGRDbGFzc1wiOlwicmVtb3ZlQ2xhc3NcIl0oXCJqc3RyZWUtcnRsXCIpLHRoaXMuZWxlbWVudC5hdHRyKFwicm9sZVwiLFwidHJlZVwiKSx0aGlzLnNldHRpbmdzLmNvcmUubXVsdGlwbGUmJnRoaXMuZWxlbWVudC5hdHRyKFwiYXJpYS1tdWx0aXNlbGVjdGFibGVcIiwhMCksdGhpcy5lbGVtZW50LmF0dHIoXCJ0YWJpbmRleFwiKXx8dGhpcy5lbGVtZW50LmF0dHIoXCJ0YWJpbmRleFwiLFwiMFwiKSx0aGlzLmJpbmQoKSx0aGlzLnRyaWdnZXIoXCJpbml0XCIpLHRoaXMuX2RhdGEuY29yZS5vcmlnaW5hbF9jb250YWluZXJfaHRtbD10aGlzLmVsZW1lbnQuZmluZChcIiA+IHVsID4gbGlcIikuY2xvbmUoITApLHRoaXMuX2RhdGEuY29yZS5vcmlnaW5hbF9jb250YWluZXJfaHRtbC5maW5kKFwibGlcIikuYWRkQmFjaygpLmNvbnRlbnRzKCkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIDM9PT10aGlzLm5vZGVUeXBlJiYoIXRoaXMubm9kZVZhbHVlfHwvXlxccyskLy50ZXN0KHRoaXMubm9kZVZhbHVlKSl9KS5yZW1vdmUoKSx0aGlzLmVsZW1lbnQuaHRtbChcIjx1bCBjbGFzcz0nanN0cmVlLWNvbnRhaW5lci11bCBqc3RyZWUtY2hpbGRyZW4nIHJvbGU9J2dyb3VwJz48bGkgaWQ9J2pcIit0aGlzLl9pZCtcIl9sb2FkaW5nJyBjbGFzcz0nanN0cmVlLWluaXRpYWwtbm9kZSBqc3RyZWUtbG9hZGluZyBqc3RyZWUtbGVhZiBqc3RyZWUtbGFzdCcgcm9sZT0ndHJlZS1pdGVtJz48aSBjbGFzcz0nanN0cmVlLWljb24ganN0cmVlLW9jbCc+PC9pPjxhIGNsYXNzPSdqc3RyZWUtYW5jaG9yJyBocmVmPScjJz48aSBjbGFzcz0nanN0cmVlLWljb24ganN0cmVlLXRoZW1laWNvbi1oaWRkZW4nPjwvaT5cIit0aGlzLmdldF9zdHJpbmcoXCJMb2FkaW5nIC4uLlwiKStcIjwvYT48L2xpPjwvdWw+XCIpLHRoaXMuZWxlbWVudC5hdHRyKFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCIsXCJqXCIrdGhpcy5faWQrXCJfbG9hZGluZ1wiKSx0aGlzLl9kYXRhLmNvcmUubGlfaGVpZ2h0PXRoaXMuZ2V0X2NvbnRhaW5lcl91bCgpLmNoaWxkcmVuKFwibGlcIikuZmlyc3QoKS5oZWlnaHQoKXx8MjQsdGhpcy50cmlnZ2VyKFwibG9hZGluZ1wiKSx0aGlzLmxvYWRfbm9kZShlLmpzdHJlZS5yb290KX0sZGVzdHJveTpmdW5jdGlvbihlKXtpZih0aGlzLl93cmspdHJ5e3dpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHRoaXMuX3dyayksdGhpcy5fd3JrPW51bGx9Y2F0Y2godCl7fWV8fHRoaXMuZWxlbWVudC5lbXB0eSgpLHRoaXMudGVhcmRvd24oKX0sdGVhcmRvd246ZnVuY3Rpb24oKXt0aGlzLnVuYmluZCgpLHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcyhcImpzdHJlZVwiKS5yZW1vdmVEYXRhKFwianN0cmVlXCIpLmZpbmQoXCJbY2xhc3NePSdqc3RyZWUnXVwiKS5hZGRCYWNrKCkuYXR0cihcImNsYXNzXCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbGFzc05hbWUucmVwbGFjZSgvanN0cmVlW14gXSp8JC9naSxcIlwiKX0pLHRoaXMuZWxlbWVudD1udWxsfSxiaW5kOmZ1bmN0aW9uKCl7dmFyIHQ9XCJcIixpPW51bGwscj0wO3RoaXMuZWxlbWVudC5vbihcImRibGNsaWNrLmpzdHJlZVwiLGZ1bmN0aW9uKGUpe2lmKGUudGFyZ2V0LnRhZ05hbWUmJlwiaW5wdXRcIj09PWUudGFyZ2V0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSlyZXR1cm4hMDtpZihsLnNlbGVjdGlvbiYmbC5zZWxlY3Rpb24uZW1wdHkpbC5zZWxlY3Rpb24uZW1wdHkoKTtlbHNlIGlmKHdpbmRvdy5nZXRTZWxlY3Rpb24pe3ZhciB0PXdpbmRvdy5nZXRTZWxlY3Rpb24oKTt0cnl7dC5yZW1vdmVBbGxSYW5nZXMoKSx0LmNvbGxhcHNlKCl9Y2F0Y2goaSl7fX19KS5vbihcIm1vdXNlZG93bi5qc3RyZWVcIixlLnByb3h5KGZ1bmN0aW9uKGUpe2UudGFyZ2V0PT09dGhpcy5lbGVtZW50WzBdJiYoZS5wcmV2ZW50RGVmYXVsdCgpLHI9K25ldyBEYXRlKX0sdGhpcykpLm9uKFwibW91c2Vkb3duLmpzdHJlZVwiLFwiLmpzdHJlZS1vY2xcIixmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCl9KS5vbihcImNsaWNrLmpzdHJlZVwiLFwiLmpzdHJlZS1vY2xcIixlLnByb3h5KGZ1bmN0aW9uKGUpe3RoaXMudG9nZ2xlX25vZGUoZS50YXJnZXQpfSx0aGlzKSkub24oXCJkYmxjbGljay5qc3RyZWVcIixcIi5qc3RyZWUtYW5jaG9yXCIsZS5wcm94eShmdW5jdGlvbihlKXtyZXR1cm4gZS50YXJnZXQudGFnTmFtZSYmXCJpbnB1dFwiPT09ZS50YXJnZXQudGFnTmFtZS50b0xvd2VyQ2FzZSgpPyEwOnZvaWQodGhpcy5zZXR0aW5ncy5jb3JlLmRibGNsaWNrX3RvZ2dsZSYmdGhpcy50b2dnbGVfbm9kZShlLnRhcmdldCkpfSx0aGlzKSkub24oXCJjbGljay5qc3RyZWVcIixcIi5qc3RyZWUtYW5jaG9yXCIsZS5wcm94eShmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCksdC5jdXJyZW50VGFyZ2V0IT09bC5hY3RpdmVFbGVtZW50JiZlKHQuY3VycmVudFRhcmdldCkuZm9jdXMoKSx0aGlzLmFjdGl2YXRlX25vZGUodC5jdXJyZW50VGFyZ2V0LHQpfSx0aGlzKSkub24oXCJrZXlkb3duLmpzdHJlZVwiLFwiLmpzdHJlZS1hbmNob3JcIixlLnByb3h5KGZ1bmN0aW9uKHQpe2lmKHQudGFyZ2V0LnRhZ05hbWUmJlwiaW5wdXRcIj09PXQudGFyZ2V0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSlyZXR1cm4hMDtpZigzMiE9PXQud2hpY2gmJjEzIT09dC53aGljaCYmKHQuc2hpZnRLZXl8fHQuY3RybEtleXx8dC5hbHRLZXl8fHQubWV0YUtleSkpcmV0dXJuITA7dmFyIGk9bnVsbDtzd2l0Y2godGhpcy5fZGF0YS5jb3JlLnJ0bCYmKDM3PT09dC53aGljaD90LndoaWNoPTM5OjM5PT09dC53aGljaCYmKHQud2hpY2g9MzcpKSx0LndoaWNoKXtjYXNlIDMyOnQuY3RybEtleSYmKHQudHlwZT1cImNsaWNrXCIsZSh0LmN1cnJlbnRUYXJnZXQpLnRyaWdnZXIodCkpO2JyZWFrO2Nhc2UgMTM6dC50eXBlPVwiY2xpY2tcIixlKHQuY3VycmVudFRhcmdldCkudHJpZ2dlcih0KTticmVhaztjYXNlIDM3OnQucHJldmVudERlZmF1bHQoKSx0aGlzLmlzX29wZW4odC5jdXJyZW50VGFyZ2V0KT90aGlzLmNsb3NlX25vZGUodC5jdXJyZW50VGFyZ2V0KTooaT10aGlzLmdldF9wYXJlbnQodC5jdXJyZW50VGFyZ2V0KSxpJiZpLmlkIT09ZS5qc3RyZWUucm9vdCYmdGhpcy5nZXRfbm9kZShpLCEwKS5jaGlsZHJlbihcIi5qc3RyZWUtYW5jaG9yXCIpLmZvY3VzKCkpO2JyZWFrO2Nhc2UgMzg6dC5wcmV2ZW50RGVmYXVsdCgpLGk9dGhpcy5nZXRfcHJldl9kb20odC5jdXJyZW50VGFyZ2V0KSxpJiZpLmxlbmd0aCYmaS5jaGlsZHJlbihcIi5qc3RyZWUtYW5jaG9yXCIpLmZvY3VzKCk7YnJlYWs7Y2FzZSAzOTp0LnByZXZlbnREZWZhdWx0KCksdGhpcy5pc19jbG9zZWQodC5jdXJyZW50VGFyZ2V0KT90aGlzLm9wZW5fbm9kZSh0LmN1cnJlbnRUYXJnZXQsZnVuY3Rpb24oZSl7dGhpcy5nZXRfbm9kZShlLCEwKS5jaGlsZHJlbihcIi5qc3RyZWUtYW5jaG9yXCIpLmZvY3VzKCl9KTp0aGlzLmlzX29wZW4odC5jdXJyZW50VGFyZ2V0KSYmKGk9dGhpcy5nZXRfbm9kZSh0LmN1cnJlbnRUYXJnZXQsITApLmNoaWxkcmVuKFwiLmpzdHJlZS1jaGlsZHJlblwiKVswXSxpJiZlKHRoaXMuX2ZpcnN0Q2hpbGQoaSkpLmNoaWxkcmVuKFwiLmpzdHJlZS1hbmNob3JcIikuZm9jdXMoKSk7YnJlYWs7Y2FzZSA0MDp0LnByZXZlbnREZWZhdWx0KCksaT10aGlzLmdldF9uZXh0X2RvbSh0LmN1cnJlbnRUYXJnZXQpLGkmJmkubGVuZ3RoJiZpLmNoaWxkcmVuKFwiLmpzdHJlZS1hbmNob3JcIikuZm9jdXMoKTticmVhaztjYXNlIDEwNjp0aGlzLm9wZW5fYWxsKCk7YnJlYWs7Y2FzZSAzNjp0LnByZXZlbnREZWZhdWx0KCksaT10aGlzLl9maXJzdENoaWxkKHRoaXMuZ2V0X2NvbnRhaW5lcl91bCgpWzBdKSxpJiZlKGkpLmNoaWxkcmVuKFwiLmpzdHJlZS1hbmNob3JcIikuZmlsdGVyKFwiOnZpc2libGVcIikuZm9jdXMoKTticmVhaztjYXNlIDM1OnQucHJldmVudERlZmF1bHQoKSx0aGlzLmVsZW1lbnQuZmluZChcIi5qc3RyZWUtYW5jaG9yXCIpLmZpbHRlcihcIjp2aXNpYmxlXCIpLmxhc3QoKS5mb2N1cygpfX0sdGhpcykpLm9uKFwibG9hZF9ub2RlLmpzdHJlZVwiLGUucHJveHkoZnVuY3Rpb24odCxpKXtpLnN0YXR1cyYmKGkubm9kZS5pZCE9PWUuanN0cmVlLnJvb3R8fHRoaXMuX2RhdGEuY29yZS5sb2FkZWR8fCh0aGlzLl9kYXRhLmNvcmUubG9hZGVkPSEwLHRoaXMuX2ZpcnN0Q2hpbGQodGhpcy5nZXRfY29udGFpbmVyX3VsKClbMF0pJiZ0aGlzLmVsZW1lbnQuYXR0cihcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiLHRoaXMuX2ZpcnN0Q2hpbGQodGhpcy5nZXRfY29udGFpbmVyX3VsKClbMF0pLmlkKSx0aGlzLnRyaWdnZXIoXCJsb2FkZWRcIikpLHRoaXMuX2RhdGEuY29yZS5yZWFkeXx8c2V0VGltZW91dChlLnByb3h5KGZ1bmN0aW9uKCl7aWYodGhpcy5lbGVtZW50JiYhdGhpcy5nZXRfY29udGFpbmVyX3VsKCkuZmluZChcIi5qc3RyZWUtbG9hZGluZ1wiKS5sZW5ndGgpe2lmKHRoaXMuX2RhdGEuY29yZS5yZWFkeT0hMCx0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQubGVuZ3RoKXtpZih0aGlzLnNldHRpbmdzLmNvcmUuZXhwYW5kX3NlbGVjdGVkX29ubG9hZCl7dmFyIHQsaSxyPVtdO2Zvcih0PTAsaT10aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQubGVuZ3RoO2k+dDt0Kyspcj1yLmNvbmNhdCh0aGlzLl9tb2RlbC5kYXRhW3RoaXMuX2RhdGEuY29yZS5zZWxlY3RlZFt0XV0ucGFyZW50cyk7Zm9yKHI9ZS52YWthdGEuYXJyYXlfdW5pcXVlKHIpLHQ9MCxpPXIubGVuZ3RoO2k+dDt0KyspdGhpcy5vcGVuX25vZGUoclt0XSwhMSwwKX10aGlzLnRyaWdnZXIoXCJjaGFuZ2VkXCIse2FjdGlvbjpcInJlYWR5XCIsc2VsZWN0ZWQ6dGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkfSl9dGhpcy50cmlnZ2VyKFwicmVhZHlcIil9fSx0aGlzKSwwKSl9LHRoaXMpKS5vbihcImtleXByZXNzLmpzdHJlZVwiLGUucHJveHkoZnVuY3Rpb24ocil7aWYoci50YXJnZXQudGFnTmFtZSYmXCJpbnB1dFwiPT09ci50YXJnZXQudGFnTmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybiEwO2kmJmNsZWFyVGltZW91dChpKSxpPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt0PVwiXCJ9LDUwMCk7dmFyIHM9U3RyaW5nLmZyb21DaGFyQ29kZShyLndoaWNoKS50b0xvd2VyQ2FzZSgpLG49dGhpcy5lbGVtZW50LmZpbmQoXCIuanN0cmVlLWFuY2hvclwiKS5maWx0ZXIoXCI6dmlzaWJsZVwiKSxhPW4uaW5kZXgobC5hY3RpdmVFbGVtZW50KXx8MCxvPSExO2lmKHQrPXMsdC5sZW5ndGg+MSl7aWYobi5zbGljZShhKS5lYWNoKGUucHJveHkoZnVuY3Rpb24oaSxyKXtyZXR1cm4gMD09PWUocikudGV4dCgpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0KT8oZShyKS5mb2N1cygpLG89ITAsITEpOnZvaWQgMH0sdGhpcykpLG8pcmV0dXJuO2lmKG4uc2xpY2UoMCxhKS5lYWNoKGUucHJveHkoZnVuY3Rpb24oaSxyKXtyZXR1cm4gMD09PWUocikudGV4dCgpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0KT8oZShyKS5mb2N1cygpLG89ITAsITEpOnZvaWQgMH0sdGhpcykpLG8pcmV0dXJufWlmKG5ldyBSZWdFeHAoXCJeXCIrcy5yZXBsYWNlKC9bLVxcL1xcXFxeJCorPy4oKXxbXFxde31dL2csXCJcXFxcJCZcIikrXCIrJFwiKS50ZXN0KHQpKXtpZihuLnNsaWNlKGErMSkuZWFjaChlLnByb3h5KGZ1bmN0aW9uKHQsaSl7cmV0dXJuIGUoaSkudGV4dCgpLnRvTG93ZXJDYXNlKCkuY2hhckF0KDApPT09cz8oZShpKS5mb2N1cygpLG89ITAsITEpOnZvaWQgMH0sdGhpcykpLG8pcmV0dXJuO2lmKG4uc2xpY2UoMCxhKzEpLmVhY2goZS5wcm94eShmdW5jdGlvbih0LGkpe3JldHVybiBlKGkpLnRleHQoKS50b0xvd2VyQ2FzZSgpLmNoYXJBdCgwKT09PXM/KGUoaSkuZm9jdXMoKSxvPSEwLCExKTp2b2lkIDB9LHRoaXMpKSxvKXJldHVybn19LHRoaXMpKS5vbihcImluaXQuanN0cmVlXCIsZS5wcm94eShmdW5jdGlvbigpe3ZhciBlPXRoaXMuc2V0dGluZ3MuY29yZS50aGVtZXM7dGhpcy5fZGF0YS5jb3JlLnRoZW1lcy5kb3RzPWUuZG90cyx0aGlzLl9kYXRhLmNvcmUudGhlbWVzLnN0cmlwZXM9ZS5zdHJpcGVzLHRoaXMuX2RhdGEuY29yZS50aGVtZXMuaWNvbnM9ZS5pY29ucyx0aGlzLnNldF90aGVtZShlLm5hbWV8fFwiZGVmYXVsdFwiLGUudXJsKSx0aGlzLnNldF90aGVtZV92YXJpYW50KGUudmFyaWFudCl9LHRoaXMpKS5vbihcImxvYWRpbmcuanN0cmVlXCIsZS5wcm94eShmdW5jdGlvbigpe3RoaXNbdGhpcy5fZGF0YS5jb3JlLnRoZW1lcy5kb3RzP1wic2hvd19kb3RzXCI6XCJoaWRlX2RvdHNcIl0oKSx0aGlzW3RoaXMuX2RhdGEuY29yZS50aGVtZXMuaWNvbnM/XCJzaG93X2ljb25zXCI6XCJoaWRlX2ljb25zXCJdKCksdGhpc1t0aGlzLl9kYXRhLmNvcmUudGhlbWVzLnN0cmlwZXM/XCJzaG93X3N0cmlwZXNcIjpcImhpZGVfc3RyaXBlc1wiXSgpfSx0aGlzKSkub24oXCJibHVyLmpzdHJlZVwiLFwiLmpzdHJlZS1hbmNob3JcIixlLnByb3h5KGZ1bmN0aW9uKHQpe3RoaXMuX2RhdGEuY29yZS5mb2N1c2VkPW51bGwsZSh0LmN1cnJlbnRUYXJnZXQpLmZpbHRlcihcIi5qc3RyZWUtaG92ZXJlZFwiKS5tb3VzZWxlYXZlKCksdGhpcy5lbGVtZW50LmF0dHIoXCJ0YWJpbmRleFwiLFwiMFwiKX0sdGhpcykpLm9uKFwiZm9jdXMuanN0cmVlXCIsXCIuanN0cmVlLWFuY2hvclwiLGUucHJveHkoZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5nZXRfbm9kZSh0LmN1cnJlbnRUYXJnZXQpO2kmJmkuaWQmJih0aGlzLl9kYXRhLmNvcmUuZm9jdXNlZD1pLmlkKSx0aGlzLmVsZW1lbnQuZmluZChcIi5qc3RyZWUtaG92ZXJlZFwiKS5ub3QodC5jdXJyZW50VGFyZ2V0KS5tb3VzZWxlYXZlKCksZSh0LmN1cnJlbnRUYXJnZXQpLm1vdXNlZW50ZXIoKSx0aGlzLmVsZW1lbnQuYXR0cihcInRhYmluZGV4XCIsXCItMVwiKX0sdGhpcykpLm9uKFwiZm9jdXMuanN0cmVlXCIsZS5wcm94eShmdW5jdGlvbigpe2lmKCtuZXcgRGF0ZS1yPjUwMCYmIXRoaXMuX2RhdGEuY29yZS5mb2N1c2VkKXtyPTA7dmFyIGU9dGhpcy5nZXRfbm9kZSh0aGlzLmVsZW1lbnQuYXR0cihcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiKSwhMCk7ZSYmZS5maW5kKFwiPiAuanN0cmVlLWFuY2hvclwiKS5mb2N1cygpfX0sdGhpcykpLm9uKFwibW91c2VlbnRlci5qc3RyZWVcIixcIi5qc3RyZWUtYW5jaG9yXCIsZS5wcm94eShmdW5jdGlvbihlKXt0aGlzLmhvdmVyX25vZGUoZS5jdXJyZW50VGFyZ2V0KX0sdGhpcykpLm9uKFwibW91c2VsZWF2ZS5qc3RyZWVcIixcIi5qc3RyZWUtYW5jaG9yXCIsZS5wcm94eShmdW5jdGlvbihlKXt0aGlzLmRlaG92ZXJfbm9kZShlLmN1cnJlbnRUYXJnZXQpfSx0aGlzKSl9LHVuYmluZDpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5vZmYoXCIuanN0cmVlXCIpLGUobCkub2ZmKFwiLmpzdHJlZS1cIit0aGlzLl9pZCl9LHRyaWdnZXI6ZnVuY3Rpb24oZSx0KXt0fHwodD17fSksdC5pbnN0YW5jZT10aGlzLHRoaXMuZWxlbWVudC50cmlnZ2VySGFuZGxlcihlLnJlcGxhY2UoXCIuanN0cmVlXCIsXCJcIikrXCIuanN0cmVlXCIsdCl9LGdldF9jb250YWluZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50fSxnZXRfY29udGFpbmVyX3VsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxlbWVudC5jaGlsZHJlbihcIi5qc3RyZWUtY2hpbGRyZW5cIikuZmlyc3QoKX0sZ2V0X3N0cmluZzpmdW5jdGlvbih0KXt2YXIgaT10aGlzLnNldHRpbmdzLmNvcmUuc3RyaW5ncztyZXR1cm4gZS5pc0Z1bmN0aW9uKGkpP2kuY2FsbCh0aGlzLHQpOmkmJmlbdF0/aVt0XTp0fSxfZmlyc3RDaGlsZDpmdW5jdGlvbihlKXtmb3IoZT1lP2UuZmlyc3RDaGlsZDpudWxsO251bGwhPT1lJiYxIT09ZS5ub2RlVHlwZTspZT1lLm5leHRTaWJsaW5nO3JldHVybiBlfSxfbmV4dFNpYmxpbmc6ZnVuY3Rpb24oZSl7Zm9yKGU9ZT9lLm5leHRTaWJsaW5nOm51bGw7bnVsbCE9PWUmJjEhPT1lLm5vZGVUeXBlOyllPWUubmV4dFNpYmxpbmc7cmV0dXJuIGV9LF9wcmV2aW91c1NpYmxpbmc6ZnVuY3Rpb24oZSl7Zm9yKGU9ZT9lLnByZXZpb3VzU2libGluZzpudWxsO251bGwhPT1lJiYxIT09ZS5ub2RlVHlwZTspZT1lLnByZXZpb3VzU2libGluZztyZXR1cm4gZX0sZ2V0X25vZGU6ZnVuY3Rpb24odCxpKXt0JiZ0LmlkJiYodD10LmlkKTt2YXIgcjt0cnl7aWYodGhpcy5fbW9kZWwuZGF0YVt0XSl0PXRoaXMuX21vZGVsLmRhdGFbdF07ZWxzZSBpZihcInN0cmluZ1wiPT10eXBlb2YgdCYmdGhpcy5fbW9kZWwuZGF0YVt0LnJlcGxhY2UoL14jLyxcIlwiKV0pdD10aGlzLl9tb2RlbC5kYXRhW3QucmVwbGFjZSgvXiMvLFwiXCIpXTtlbHNlIGlmKFwic3RyaW5nXCI9PXR5cGVvZiB0JiYocj1lKFwiI1wiK3QucmVwbGFjZShlLmpzdHJlZS5pZHJlZ2V4LFwiXFxcXCQmXCIpLHRoaXMuZWxlbWVudCkpLmxlbmd0aCYmdGhpcy5fbW9kZWwuZGF0YVtyLmNsb3Nlc3QoXCIuanN0cmVlLW5vZGVcIikuYXR0cihcImlkXCIpXSl0PXRoaXMuX21vZGVsLmRhdGFbci5jbG9zZXN0KFwiLmpzdHJlZS1ub2RlXCIpLmF0dHIoXCJpZFwiKV07ZWxzZSBpZigocj1lKHQsdGhpcy5lbGVtZW50KSkubGVuZ3RoJiZ0aGlzLl9tb2RlbC5kYXRhW3IuY2xvc2VzdChcIi5qc3RyZWUtbm9kZVwiKS5hdHRyKFwiaWRcIildKXQ9dGhpcy5fbW9kZWwuZGF0YVtyLmNsb3Nlc3QoXCIuanN0cmVlLW5vZGVcIikuYXR0cihcImlkXCIpXTtlbHNle2lmKCEocj1lKHQsdGhpcy5lbGVtZW50KSkubGVuZ3RofHwhci5oYXNDbGFzcyhcImpzdHJlZVwiKSlyZXR1cm4hMTt0PXRoaXMuX21vZGVsLmRhdGFbZS5qc3RyZWUucm9vdF19cmV0dXJuIGkmJih0PXQuaWQ9PT1lLmpzdHJlZS5yb290P3RoaXMuZWxlbWVudDplKFwiI1wiK3QuaWQucmVwbGFjZShlLmpzdHJlZS5pZHJlZ2V4LFwiXFxcXCQmXCIpLHRoaXMuZWxlbWVudCkpLHR9Y2F0Y2gocyl7cmV0dXJuITF9fSxnZXRfcGF0aDpmdW5jdGlvbih0LGkscil7aWYodD10LnBhcmVudHM/dDp0aGlzLmdldF9ub2RlKHQpLCF0fHx0LmlkPT09ZS5qc3RyZWUucm9vdHx8IXQucGFyZW50cylyZXR1cm4hMTt2YXIgcyxuLGE9W107Zm9yKGEucHVzaChyP3QuaWQ6dC50ZXh0KSxzPTAsbj10LnBhcmVudHMubGVuZ3RoO24+cztzKyspYS5wdXNoKHI/dC5wYXJlbnRzW3NdOnRoaXMuZ2V0X3RleHQodC5wYXJlbnRzW3NdKSk7cmV0dXJuIGE9YS5yZXZlcnNlKCkuc2xpY2UoMSksaT9hLmpvaW4oaSk6YX0sZ2V0X25leHRfZG9tOmZ1bmN0aW9uKHQsaSl7dmFyIHI7aWYodD10aGlzLmdldF9ub2RlKHQsITApLHRbMF09PT10aGlzLmVsZW1lbnRbMF0pe2ZvcihyPXRoaXMuX2ZpcnN0Q2hpbGQodGhpcy5nZXRfY29udGFpbmVyX3VsKClbMF0pO3ImJjA9PT1yLm9mZnNldEhlaWdodDspcj10aGlzLl9uZXh0U2libGluZyhyKTtyZXR1cm4gcj9lKHIpOiExfWlmKCF0fHwhdC5sZW5ndGgpcmV0dXJuITE7aWYoaSl7cj10WzBdO2RvIHI9dGhpcy5fbmV4dFNpYmxpbmcocik7d2hpbGUociYmMD09PXIub2Zmc2V0SGVpZ2h0KTtyZXR1cm4gcj9lKHIpOiExfWlmKHQuaGFzQ2xhc3MoXCJqc3RyZWUtb3BlblwiKSl7Zm9yKHI9dGhpcy5fZmlyc3RDaGlsZCh0LmNoaWxkcmVuKFwiLmpzdHJlZS1jaGlsZHJlblwiKVswXSk7ciYmMD09PXIub2Zmc2V0SGVpZ2h0OylyPXRoaXMuX25leHRTaWJsaW5nKHIpO2lmKG51bGwhPT1yKXJldHVybiBlKHIpfXI9dFswXTtkbyByPXRoaXMuX25leHRTaWJsaW5nKHIpO3doaWxlKHImJjA9PT1yLm9mZnNldEhlaWdodCk7cmV0dXJuIG51bGwhPT1yP2Uocik6dC5wYXJlbnRzVW50aWwoXCIuanN0cmVlXCIsXCIuanN0cmVlLW5vZGVcIikubmV4dEFsbChcIi5qc3RyZWUtbm9kZTp2aXNpYmxlXCIpLmZpcnN0KCl9LGdldF9wcmV2X2RvbTpmdW5jdGlvbih0LGkpe3ZhciByO2lmKHQ9dGhpcy5nZXRfbm9kZSh0LCEwKSx0WzBdPT09dGhpcy5lbGVtZW50WzBdKXtmb3Iocj10aGlzLmdldF9jb250YWluZXJfdWwoKVswXS5sYXN0Q2hpbGQ7ciYmMD09PXIub2Zmc2V0SGVpZ2h0OylyPXRoaXMuX3ByZXZpb3VzU2libGluZyhyKTtyZXR1cm4gcj9lKHIpOiExfWlmKCF0fHwhdC5sZW5ndGgpcmV0dXJuITE7aWYoaSl7cj10WzBdO2RvIHI9dGhpcy5fcHJldmlvdXNTaWJsaW5nKHIpO3doaWxlKHImJjA9PT1yLm9mZnNldEhlaWdodCk7cmV0dXJuIHI/ZShyKTohMX1yPXRbMF07ZG8gcj10aGlzLl9wcmV2aW91c1NpYmxpbmcocik7d2hpbGUociYmMD09PXIub2Zmc2V0SGVpZ2h0KTtpZihudWxsIT09cil7Zm9yKHQ9ZShyKTt0Lmhhc0NsYXNzKFwianN0cmVlLW9wZW5cIik7KXQ9dC5jaGlsZHJlbihcIi5qc3RyZWUtY2hpbGRyZW5cIikuZmlyc3QoKS5jaGlsZHJlbihcIi5qc3RyZWUtbm9kZTp2aXNpYmxlOmxhc3RcIik7cmV0dXJuIHR9cmV0dXJuIHI9dFswXS5wYXJlbnROb2RlLnBhcmVudE5vZGUsciYmci5jbGFzc05hbWUmJi0xIT09ci5jbGFzc05hbWUuaW5kZXhPZihcImpzdHJlZS1ub2RlXCIpP2Uocik6ITF9LGdldF9wYXJlbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9dGhpcy5nZXRfbm9kZSh0KSx0JiZ0LmlkIT09ZS5qc3RyZWUucm9vdD90LnBhcmVudDohMX0sZ2V0X2NoaWxkcmVuX2RvbTpmdW5jdGlvbihlKXtyZXR1cm4gZT10aGlzLmdldF9ub2RlKGUsITApLGVbMF09PT10aGlzLmVsZW1lbnRbMF0/dGhpcy5nZXRfY29udGFpbmVyX3VsKCkuY2hpbGRyZW4oXCIuanN0cmVlLW5vZGVcIik6ZSYmZS5sZW5ndGg/ZS5jaGlsZHJlbihcIi5qc3RyZWUtY2hpbGRyZW5cIikuY2hpbGRyZW4oXCIuanN0cmVlLW5vZGVcIik6ITF9LGlzX3BhcmVudDpmdW5jdGlvbihlKXtyZXR1cm4gZT10aGlzLmdldF9ub2RlKGUpLGUmJihlLnN0YXRlLmxvYWRlZD09PSExfHxlLmNoaWxkcmVuLmxlbmd0aD4wKX0saXNfbG9hZGVkOmZ1bmN0aW9uKGUpe3JldHVybiBlPXRoaXMuZ2V0X25vZGUoZSksZSYmZS5zdGF0ZS5sb2FkZWR9LGlzX2xvYWRpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9dGhpcy5nZXRfbm9kZShlKSxlJiZlLnN0YXRlJiZlLnN0YXRlLmxvYWRpbmd9LGlzX29wZW46ZnVuY3Rpb24oZSl7cmV0dXJuIGU9dGhpcy5nZXRfbm9kZShlKSxlJiZlLnN0YXRlLm9wZW5lZH0saXNfY2xvc2VkOmZ1bmN0aW9uKGUpe3JldHVybiBlPXRoaXMuZ2V0X25vZGUoZSksZSYmdGhpcy5pc19wYXJlbnQoZSkmJiFlLnN0YXRlLm9wZW5lZH0saXNfbGVhZjpmdW5jdGlvbihlKXtyZXR1cm4hdGhpcy5pc19wYXJlbnQoZSl9LGxvYWRfbm9kZTpmdW5jdGlvbih0LGkpe3ZhciByLHMsbixhLG87aWYoZS5pc0FycmF5KHQpKXJldHVybiB0aGlzLl9sb2FkX25vZGVzKHQuc2xpY2UoKSxpKSwhMDtpZih0PXRoaXMuZ2V0X25vZGUodCksIXQpcmV0dXJuIGkmJmkuY2FsbCh0aGlzLHQsITEpLCExO2lmKHQuc3RhdGUubG9hZGVkKXtmb3IodC5zdGF0ZS5sb2FkZWQ9ITEscj0wLHM9dC5jaGlsZHJlbl9kLmxlbmd0aDtzPnI7cisrKXtmb3Iobj0wLGE9dC5wYXJlbnRzLmxlbmd0aDthPm47bisrKXRoaXMuX21vZGVsLmRhdGFbdC5wYXJlbnRzW25dXS5jaGlsZHJlbl9kPWUudmFrYXRhLmFycmF5X3JlbW92ZV9pdGVtKHRoaXMuX21vZGVsLmRhdGFbdC5wYXJlbnRzW25dXS5jaGlsZHJlbl9kLHQuY2hpbGRyZW5fZFtyXSk7dGhpcy5fbW9kZWwuZGF0YVt0LmNoaWxkcmVuX2Rbcl1dLnN0YXRlLnNlbGVjdGVkJiYobz0hMCx0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQ9ZS52YWthdGEuYXJyYXlfcmVtb3ZlX2l0ZW0odGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLHQuY2hpbGRyZW5fZFtyXSkpLGRlbGV0ZSB0aGlzLl9tb2RlbC5kYXRhW3QuY2hpbGRyZW5fZFtyXV19dC5jaGlsZHJlbj1bXSx0LmNoaWxkcmVuX2Q9W10sbyYmdGhpcy50cmlnZ2VyKFwiY2hhbmdlZFwiLHthY3Rpb246XCJsb2FkX25vZGVcIixub2RlOnQsc2VsZWN0ZWQ6dGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkfSl9cmV0dXJuIHQuc3RhdGUuZmFpbGVkPSExLHQuc3RhdGUubG9hZGluZz0hMCx0aGlzLmdldF9ub2RlKHQsITApLmFkZENsYXNzKFwianN0cmVlLWxvYWRpbmdcIikuYXR0cihcImFyaWEtYnVzeVwiLCEwKSx0aGlzLl9sb2FkX25vZGUodCxlLnByb3h5KGZ1bmN0aW9uKGUpe3Q9dGhpcy5fbW9kZWwuZGF0YVt0LmlkXSx0LnN0YXRlLmxvYWRpbmc9ITEsdC5zdGF0ZS5sb2FkZWQ9ZSx0LnN0YXRlLmZhaWxlZD0hdC5zdGF0ZS5sb2FkZWQ7dmFyIHI9dGhpcy5nZXRfbm9kZSh0LCEwKSxzPTAsbj0wLGE9dGhpcy5fbW9kZWwuZGF0YSxvPSExO2ZvcihzPTAsbj10LmNoaWxkcmVuLmxlbmd0aDtuPnM7cysrKWlmKGFbdC5jaGlsZHJlbltzXV0mJiFhW3QuY2hpbGRyZW5bc11dLnN0YXRlLmhpZGRlbil7bz0hMDticmVha310LnN0YXRlLmxvYWRlZCYmIW8mJnImJnIubGVuZ3RoJiYhci5oYXNDbGFzcyhcImpzdHJlZS1sZWFmXCIpJiZyLnJlbW92ZUNsYXNzKFwianN0cmVlLWNsb3NlZCBqc3RyZWUtb3BlblwiKS5hZGRDbGFzcyhcImpzdHJlZS1sZWFmXCIpLHIucmVtb3ZlQ2xhc3MoXCJqc3RyZWUtbG9hZGluZ1wiKS5hdHRyKFwiYXJpYS1idXN5XCIsITEpLHRoaXMudHJpZ2dlcihcImxvYWRfbm9kZVwiLHtub2RlOnQsc3RhdHVzOmV9KSxpJiZpLmNhbGwodGhpcyx0LGUpfSx0aGlzKSksITB9LF9sb2FkX25vZGVzOmZ1bmN0aW9uKGUsdCxpKXt2YXIgcixzLG49ITAsYT1mdW5jdGlvbigpe3RoaXMuX2xvYWRfbm9kZXMoZSx0LCEwKX0sbz10aGlzLl9tb2RlbC5kYXRhLGQ9W107Zm9yKHI9MCxzPWUubGVuZ3RoO3M+cjtyKyspIW9bZVtyXV18fChvW2Vbcl1dLnN0YXRlLmxvYWRlZHx8b1tlW3JdXS5zdGF0ZS5mYWlsZWQpJiZpfHwodGhpcy5pc19sb2FkaW5nKGVbcl0pfHx0aGlzLmxvYWRfbm9kZShlW3JdLGEpLG49ITEpO2lmKG4pe2ZvcihyPTAscz1lLmxlbmd0aDtzPnI7cisrKW9bZVtyXV0mJm9bZVtyXV0uc3RhdGUubG9hZGVkJiZkLnB1c2goZVtyXSk7dCYmIXQuZG9uZSYmKHQuY2FsbCh0aGlzLGQpLHQuZG9uZT0hMCl9fSxsb2FkX2FsbDpmdW5jdGlvbih0LGkpe2lmKHR8fCh0PWUuanN0cmVlLnJvb3QpLHQ9dGhpcy5nZXRfbm9kZSh0KSwhdClyZXR1cm4hMTt2YXIgcixzLG49W10sYT10aGlzLl9tb2RlbC5kYXRhLG89YVt0LmlkXS5jaGlsZHJlbl9kO2Zvcih0LnN0YXRlJiYhdC5zdGF0ZS5sb2FkZWQmJm4ucHVzaCh0LmlkKSxyPTAscz1vLmxlbmd0aDtzPnI7cisrKWFbb1tyXV0mJmFbb1tyXV0uc3RhdGUmJiFhW29bcl1dLnN0YXRlLmxvYWRlZCYmbi5wdXNoKG9bcl0pO24ubGVuZ3RoP3RoaXMuX2xvYWRfbm9kZXMobixmdW5jdGlvbigpe3RoaXMubG9hZF9hbGwodCxpKX0pOihpJiZpLmNhbGwodGhpcyx0KSx0aGlzLnRyaWdnZXIoXCJsb2FkX2FsbFwiLHtub2RlOnR9KSl9LF9sb2FkX25vZGU6ZnVuY3Rpb24odCxpKXt2YXIgcixzPXRoaXMuc2V0dGluZ3MuY29yZS5kYXRhO3JldHVybiBzP2UuaXNGdW5jdGlvbihzKT9zLmNhbGwodGhpcyx0LGUucHJveHkoZnVuY3Rpb24ocil7cj09PSExJiZpLmNhbGwodGhpcywhMSksdGhpc1tcInN0cmluZ1wiPT10eXBlb2Ygcj9cIl9hcHBlbmRfaHRtbF9kYXRhXCI6XCJfYXBwZW5kX2pzb25fZGF0YVwiXSh0LFwic3RyaW5nXCI9PXR5cGVvZiByP2UoZS5wYXJzZUhUTUwocikpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiAzIT09dGhpcy5ub2RlVHlwZX0pOnIsZnVuY3Rpb24oZSl7aS5jYWxsKHRoaXMsZSl9KX0sdGhpcykpOlwib2JqZWN0XCI9PXR5cGVvZiBzP3MudXJsPyhzPWUuZXh0ZW5kKCEwLHt9LHMpLGUuaXNGdW5jdGlvbihzLnVybCkmJihzLnVybD1zLnVybC5jYWxsKHRoaXMsdCkpLGUuaXNGdW5jdGlvbihzLmRhdGEpJiYocy5kYXRhPXMuZGF0YS5jYWxsKHRoaXMsdCkpLGUuYWpheChzKS5kb25lKGUucHJveHkoZnVuY3Rpb24ocixzLG4pe3ZhciBhPW4uZ2V0UmVzcG9uc2VIZWFkZXIoXCJDb250ZW50LVR5cGVcIik7cmV0dXJuIGEmJi0xIT09YS5pbmRleE9mKFwianNvblwiKXx8XCJvYmplY3RcIj09dHlwZW9mIHI/dGhpcy5fYXBwZW5kX2pzb25fZGF0YSh0LHIsZnVuY3Rpb24oZSl7aS5jYWxsKHRoaXMsZSl9KTphJiYtMSE9PWEuaW5kZXhPZihcImh0bWxcIil8fFwic3RyaW5nXCI9PXR5cGVvZiByP3RoaXMuX2FwcGVuZF9odG1sX2RhdGEodCxlKGUucGFyc2VIVE1MKHIpKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gMyE9PXRoaXMubm9kZVR5cGV9KSxmdW5jdGlvbihlKXtpLmNhbGwodGhpcyxlKX0pOih0aGlzLl9kYXRhLmNvcmUubGFzdF9lcnJvcj17ZXJyb3I6XCJhamF4XCIscGx1Z2luOlwiY29yZVwiLGlkOlwiY29yZV8wNFwiLHJlYXNvbjpcIkNvdWxkIG5vdCBsb2FkIG5vZGVcIixkYXRhOkpTT04uc3RyaW5naWZ5KHtpZDp0LmlkLHhocjpufSl9LHRoaXMuc2V0dGluZ3MuY29yZS5lcnJvci5jYWxsKHRoaXMsdGhpcy5fZGF0YS5jb3JlLmxhc3RfZXJyb3IpLGkuY2FsbCh0aGlzLCExKSl9LHRoaXMpKS5mYWlsKGUucHJveHkoZnVuY3Rpb24oZSl7aS5jYWxsKHRoaXMsITEpLHRoaXMuX2RhdGEuY29yZS5sYXN0X2Vycm9yPXtlcnJvcjpcImFqYXhcIixwbHVnaW46XCJjb3JlXCIsaWQ6XCJjb3JlXzA0XCIscmVhc29uOlwiQ291bGQgbm90IGxvYWQgbm9kZVwiLGRhdGE6SlNPTi5zdHJpbmdpZnkoe2lkOnQuaWQseGhyOmV9KX0sdGhpcy5zZXR0aW5ncy5jb3JlLmVycm9yLmNhbGwodGhpcyx0aGlzLl9kYXRhLmNvcmUubGFzdF9lcnJvcil9LHRoaXMpKSk6KHI9ZS5pc0FycmF5KHMpfHxlLmlzUGxhaW5PYmplY3Qocyk/SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzKSk6cyx0LmlkPT09ZS5qc3RyZWUucm9vdD90aGlzLl9hcHBlbmRfanNvbl9kYXRhKHQscixmdW5jdGlvbihlKXtpLmNhbGwodGhpcyxlKX0pOih0aGlzLl9kYXRhLmNvcmUubGFzdF9lcnJvcj17ZXJyb3I6XCJub2RhdGFcIixwbHVnaW46XCJjb3JlXCIsaWQ6XCJjb3JlXzA1XCIscmVhc29uOlwiQ291bGQgbm90IGxvYWQgbm9kZVwiLGRhdGE6SlNPTi5zdHJpbmdpZnkoe2lkOnQuaWR9KX0sdGhpcy5zZXR0aW5ncy5jb3JlLmVycm9yLmNhbGwodGhpcyx0aGlzLl9kYXRhLmNvcmUubGFzdF9lcnJvciksaS5jYWxsKHRoaXMsITEpKSk6XCJzdHJpbmdcIj09dHlwZW9mIHM/dC5pZD09PWUuanN0cmVlLnJvb3Q/dGhpcy5fYXBwZW5kX2h0bWxfZGF0YSh0LGUoZS5wYXJzZUhUTUwocykpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiAzIT09dGhpcy5ub2RlVHlwZX0pLGZ1bmN0aW9uKGUpe2kuY2FsbCh0aGlzLGUpfSk6KHRoaXMuX2RhdGEuY29yZS5sYXN0X2Vycm9yPXtlcnJvcjpcIm5vZGF0YVwiLHBsdWdpbjpcImNvcmVcIixpZDpcImNvcmVfMDZcIixyZWFzb246XCJDb3VsZCBub3QgbG9hZCBub2RlXCIsZGF0YTpKU09OLnN0cmluZ2lmeSh7aWQ6dC5pZH0pfSx0aGlzLnNldHRpbmdzLmNvcmUuZXJyb3IuY2FsbCh0aGlzLHRoaXMuX2RhdGEuY29yZS5sYXN0X2Vycm9yKSxpLmNhbGwodGhpcywhMSkpOmkuY2FsbCh0aGlzLCExKTp0LmlkPT09ZS5qc3RyZWUucm9vdD90aGlzLl9hcHBlbmRfaHRtbF9kYXRhKHQsdGhpcy5fZGF0YS5jb3JlLm9yaWdpbmFsX2NvbnRhaW5lcl9odG1sLmNsb25lKCEwKSxmdW5jdGlvbihlKXtpLmNhbGwodGhpcyxlKX0pOmkuY2FsbCh0aGlzLCExKX0sX25vZGVfY2hhbmdlZDpmdW5jdGlvbihlKXtlPXRoaXMuZ2V0X25vZGUoZSksZSYmdGhpcy5fbW9kZWwuY2hhbmdlZC5wdXNoKGUuaWQpfSxfYXBwZW5kX2h0bWxfZGF0YTpmdW5jdGlvbih0LGkscil7dD10aGlzLmdldF9ub2RlKHQpLHQuY2hpbGRyZW49W10sdC5jaGlsZHJlbl9kPVtdO3ZhciBzLG4sYSxvPWkuaXMoXCJ1bFwiKT9pLmNoaWxkcmVuKCk6aSxkPXQuaWQsYz1bXSxsPVtdLGg9dGhpcy5fbW9kZWwuZGF0YSxfPWhbZF0sdT10aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQubGVuZ3RoO2ZvcihvLmVhY2goZS5wcm94eShmdW5jdGlvbih0LGkpe3M9dGhpcy5fcGFyc2VfbW9kZWxfZnJvbV9odG1sKGUoaSksZCxfLnBhcmVudHMuY29uY2F0KCkpLHMmJihjLnB1c2gocyksbC5wdXNoKHMpLGhbc10uY2hpbGRyZW5fZC5sZW5ndGgmJihsPWwuY29uY2F0KGhbc10uY2hpbGRyZW5fZCkpKX0sdGhpcykpLF8uY2hpbGRyZW49YyxfLmNoaWxkcmVuX2Q9bCxuPTAsYT1fLnBhcmVudHMubGVuZ3RoO2E+bjtuKyspaFtfLnBhcmVudHNbbl1dLmNoaWxkcmVuX2Q9aFtfLnBhcmVudHNbbl1dLmNoaWxkcmVuX2QuY29uY2F0KGwpO3RoaXMudHJpZ2dlcihcIm1vZGVsXCIse25vZGVzOmwscGFyZW50OmR9KSxkIT09ZS5qc3RyZWUucm9vdD8odGhpcy5fbm9kZV9jaGFuZ2VkKGQpLHRoaXMucmVkcmF3KCkpOih0aGlzLmdldF9jb250YWluZXJfdWwoKS5jaGlsZHJlbihcIi5qc3RyZWUtaW5pdGlhbC1ub2RlXCIpLnJlbW92ZSgpLHRoaXMucmVkcmF3KCEwKSksdGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLmxlbmd0aCE9PXUmJnRoaXMudHJpZ2dlcihcImNoYW5nZWRcIix7YWN0aW9uOlwibW9kZWxcIixzZWxlY3RlZDp0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWR9KSxyLmNhbGwodGhpcywhMCl9LF9hcHBlbmRfanNvbl9kYXRhOmZ1bmN0aW9uKHQsaSxyLHMpe2lmKG51bGwhPT10aGlzLmVsZW1lbnQpe3Q9dGhpcy5nZXRfbm9kZSh0KSx0LmNoaWxkcmVuPVtdLHQuY2hpbGRyZW5fZD1bXSxpLmQmJihpPWkuZCxcInN0cmluZ1wiPT10eXBlb2YgaSYmKGk9SlNPTi5wYXJzZShpKSkpLGUuaXNBcnJheShpKXx8KGk9W2ldKTt2YXIgbj1udWxsLGE9e2RmOnRoaXMuX21vZGVsLmRlZmF1bHRfc3RhdGUsZGF0OmkscGFyOnQuaWQsbTp0aGlzLl9tb2RlbC5kYXRhLHRfaWQ6dGhpcy5faWQsdF9jbnQ6dGhpcy5fY250LHNlbDp0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWR9LG89ZnVuY3Rpb24oZSx0KXtlLmRhdGEmJihlPWUuZGF0YSk7dmFyIGkscixzLG4sYT1lLmRhdCxvPWUucGFyLGQ9W10sYz1bXSxsPVtdLGg9ZS5kZixfPWUudF9pZCx1PWUudF9jbnQsZz1lLm0sZj1nW29dLHA9ZS5zZWwsbT1mdW5jdGlvbihlLGkscil7cj1yP3IuY29uY2F0KCk6W10saSYmci51bnNoaWZ0KGkpO3ZhciBzLG4sYSxvLGQ9ZS5pZC50b1N0cmluZygpLGM9e2lkOmQsdGV4dDplLnRleHR8fFwiXCIsaWNvbjplLmljb24hPT10P2UuaWNvbjohMCxwYXJlbnQ6aSxwYXJlbnRzOnIsY2hpbGRyZW46ZS5jaGlsZHJlbnx8W10sY2hpbGRyZW5fZDplLmNoaWxkcmVuX2R8fFtdLGRhdGE6ZS5kYXRhLHN0YXRlOnt9LGxpX2F0dHI6e2lkOiExfSxhX2F0dHI6e2hyZWY6XCIjXCJ9LG9yaWdpbmFsOiExfTtmb3IocyBpbiBoKWguaGFzT3duUHJvcGVydHkocykmJihjLnN0YXRlW3NdPWhbc10pO2lmKGUmJmUuZGF0YSYmZS5kYXRhLmpzdHJlZSYmZS5kYXRhLmpzdHJlZS5pY29uJiYoYy5pY29uPWUuZGF0YS5qc3RyZWUuaWNvbiksKGMuaWNvbj09PXR8fG51bGw9PT1jLmljb258fFwiXCI9PT1jLmljb24pJiYoYy5pY29uPSEwKSxlJiZlLmRhdGEmJihjLmRhdGE9ZS5kYXRhLGUuZGF0YS5qc3RyZWUpKWZvcihzIGluIGUuZGF0YS5qc3RyZWUpZS5kYXRhLmpzdHJlZS5oYXNPd25Qcm9wZXJ0eShzKSYmKGMuc3RhdGVbc109ZS5kYXRhLmpzdHJlZVtzXSk7aWYoZSYmXCJvYmplY3RcIj09dHlwZW9mIGUuc3RhdGUpZm9yKHMgaW4gZS5zdGF0ZSllLnN0YXRlLmhhc093blByb3BlcnR5KHMpJiYoYy5zdGF0ZVtzXT1lLnN0YXRlW3NdKTtpZihlJiZcIm9iamVjdFwiPT10eXBlb2YgZS5saV9hdHRyKWZvcihzIGluIGUubGlfYXR0cillLmxpX2F0dHIuaGFzT3duUHJvcGVydHkocykmJihjLmxpX2F0dHJbc109ZS5saV9hdHRyW3NdKTtpZihjLmxpX2F0dHIuaWR8fChjLmxpX2F0dHIuaWQ9ZCksZSYmXCJvYmplY3RcIj09dHlwZW9mIGUuYV9hdHRyKWZvcihzIGluIGUuYV9hdHRyKWUuYV9hdHRyLmhhc093blByb3BlcnR5KHMpJiYoYy5hX2F0dHJbc109ZS5hX2F0dHJbc10pO2ZvcihlJiZlLmNoaWxkcmVuJiZlLmNoaWxkcmVuPT09ITAmJihjLnN0YXRlLmxvYWRlZD0hMSxjLmNoaWxkcmVuPVtdLGMuY2hpbGRyZW5fZD1bXSksZ1tjLmlkXT1jLHM9MCxuPWMuY2hpbGRyZW4ubGVuZ3RoO24+cztzKyspYT1tKGdbYy5jaGlsZHJlbltzXV0sYy5pZCxyKSxvPWdbYV0sYy5jaGlsZHJlbl9kLnB1c2goYSksby5jaGlsZHJlbl9kLmxlbmd0aCYmKGMuY2hpbGRyZW5fZD1jLmNoaWxkcmVuX2QuY29uY2F0KG8uY2hpbGRyZW5fZCkpO3JldHVybiBkZWxldGUgZS5kYXRhLGRlbGV0ZSBlLmNoaWxkcmVuLGdbYy5pZF0ub3JpZ2luYWw9ZSxjLnN0YXRlLnNlbGVjdGVkJiZsLnB1c2goYy5pZCksYy5pZH0sdj1mdW5jdGlvbihlLGkscil7cj1yP3IuY29uY2F0KCk6W10saSYmci51bnNoaWZ0KGkpO3ZhciBzLG4sYSxvLGQsYz0hMTtkbyBjPVwialwiK18rXCJfXCIrICsrdTt3aGlsZShnW2NdKTtkPXtpZDohMSx0ZXh0Olwic3RyaW5nXCI9PXR5cGVvZiBlP2U6XCJcIixpY29uOlwib2JqZWN0XCI9PXR5cGVvZiBlJiZlLmljb24hPT10P2UuaWNvbjohMCxwYXJlbnQ6aSxwYXJlbnRzOnIsY2hpbGRyZW46W10sY2hpbGRyZW5fZDpbXSxkYXRhOm51bGwsc3RhdGU6e30sbGlfYXR0cjp7aWQ6ITF9LGFfYXR0cjp7aHJlZjpcIiNcIn0sb3JpZ2luYWw6ITF9O2ZvcihzIGluIGgpaC5oYXNPd25Qcm9wZXJ0eShzKSYmKGQuc3RhdGVbc109aFtzXSk7aWYoZSYmZS5pZCYmKGQuaWQ9ZS5pZC50b1N0cmluZygpKSxlJiZlLnRleHQmJihkLnRleHQ9ZS50ZXh0KSxlJiZlLmRhdGEmJmUuZGF0YS5qc3RyZWUmJmUuZGF0YS5qc3RyZWUuaWNvbiYmKGQuaWNvbj1lLmRhdGEuanN0cmVlLmljb24pLChkLmljb249PT10fHxudWxsPT09ZC5pY29ufHxcIlwiPT09ZC5pY29uKSYmKGQuaWNvbj0hMCksZSYmZS5kYXRhJiYoZC5kYXRhPWUuZGF0YSxlLmRhdGEuanN0cmVlKSlmb3IocyBpbiBlLmRhdGEuanN0cmVlKWUuZGF0YS5qc3RyZWUuaGFzT3duUHJvcGVydHkocykmJihkLnN0YXRlW3NdPWUuZGF0YS5qc3RyZWVbc10pO2lmKGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlLnN0YXRlKWZvcihzIGluIGUuc3RhdGUpZS5zdGF0ZS5oYXNPd25Qcm9wZXJ0eShzKSYmKGQuc3RhdGVbc109ZS5zdGF0ZVtzXSk7aWYoZSYmXCJvYmplY3RcIj09dHlwZW9mIGUubGlfYXR0cilmb3IocyBpbiBlLmxpX2F0dHIpZS5saV9hdHRyLmhhc093blByb3BlcnR5KHMpJiYoZC5saV9hdHRyW3NdPWUubGlfYXR0cltzXSk7aWYoZC5saV9hdHRyLmlkJiYhZC5pZCYmKGQuaWQ9ZC5saV9hdHRyLmlkLnRvU3RyaW5nKCkpLGQuaWR8fChkLmlkPWMpLGQubGlfYXR0ci5pZHx8KGQubGlfYXR0ci5pZD1kLmlkKSxlJiZcIm9iamVjdFwiPT10eXBlb2YgZS5hX2F0dHIpZm9yKHMgaW4gZS5hX2F0dHIpZS5hX2F0dHIuaGFzT3duUHJvcGVydHkocykmJihkLmFfYXR0cltzXT1lLmFfYXR0cltzXSk7aWYoZSYmZS5jaGlsZHJlbiYmZS5jaGlsZHJlbi5sZW5ndGgpe2ZvcihzPTAsbj1lLmNoaWxkcmVuLmxlbmd0aDtuPnM7cysrKWE9dihlLmNoaWxkcmVuW3NdLGQuaWQsciksbz1nW2FdLGQuY2hpbGRyZW4ucHVzaChhKSxvLmNoaWxkcmVuX2QubGVuZ3RoJiYoZC5jaGlsZHJlbl9kPWQuY2hpbGRyZW5fZC5jb25jYXQoby5jaGlsZHJlbl9kKSk7ZC5jaGlsZHJlbl9kPWQuY2hpbGRyZW5fZC5jb25jYXQoZC5jaGlsZHJlbil9cmV0dXJuIGUmJmUuY2hpbGRyZW4mJmUuY2hpbGRyZW49PT0hMCYmKGQuc3RhdGUubG9hZGVkPSExLGQuY2hpbGRyZW49W10sZC5jaGlsZHJlbl9kPVtdKSxkZWxldGUgZS5kYXRhLGRlbGV0ZSBlLmNoaWxkcmVuLGQub3JpZ2luYWw9ZSxnW2QuaWRdPWQsZC5zdGF0ZS5zZWxlY3RlZCYmbC5wdXNoKGQuaWQpLGQuaWR9O2lmKGEubGVuZ3RoJiZhWzBdLmlkIT09dCYmYVswXS5wYXJlbnQhPT10KXtmb3Iocj0wLHM9YS5sZW5ndGg7cz5yO3IrKylhW3JdLmNoaWxkcmVufHwoYVtyXS5jaGlsZHJlbj1bXSksZ1thW3JdLmlkLnRvU3RyaW5nKCldPWFbcl07Zm9yKHI9MCxzPWEubGVuZ3RoO3M+cjtyKyspZ1thW3JdLnBhcmVudC50b1N0cmluZygpXS5jaGlsZHJlbi5wdXNoKGFbcl0uaWQudG9TdHJpbmcoKSksZi5jaGlsZHJlbl9kLnB1c2goYVtyXS5pZC50b1N0cmluZygpKTtmb3Iocj0wLHM9Zi5jaGlsZHJlbi5sZW5ndGg7cz5yO3IrKylpPW0oZ1tmLmNoaWxkcmVuW3JdXSxvLGYucGFyZW50cy5jb25jYXQoKSksYy5wdXNoKGkpLGdbaV0uY2hpbGRyZW5fZC5sZW5ndGgmJihjPWMuY29uY2F0KGdbaV0uY2hpbGRyZW5fZCkpO2ZvcihyPTAscz1mLnBhcmVudHMubGVuZ3RoO3M+cjtyKyspZ1tmLnBhcmVudHNbcl1dLmNoaWxkcmVuX2Q9Z1tmLnBhcmVudHNbcl1dLmNoaWxkcmVuX2QuY29uY2F0KGMpO249e2NudDp1LG1vZDpnLHNlbDpwLHBhcjpvLGRwYzpjLGFkZDpsfX1lbHNle2ZvcihyPTAscz1hLmxlbmd0aDtzPnI7cisrKWk9dihhW3JdLG8sZi5wYXJlbnRzLmNvbmNhdCgpKSxpJiYoZC5wdXNoKGkpLGMucHVzaChpKSxnW2ldLmNoaWxkcmVuX2QubGVuZ3RoJiYoYz1jLmNvbmNhdChnW2ldLmNoaWxkcmVuX2QpKSk7Zm9yKGYuY2hpbGRyZW49ZCxmLmNoaWxkcmVuX2Q9YyxyPTAscz1mLnBhcmVudHMubGVuZ3RoO3M+cjtyKyspZ1tmLnBhcmVudHNbcl1dLmNoaWxkcmVuX2Q9Z1tmLnBhcmVudHNbcl1dLmNoaWxkcmVuX2QuY29uY2F0KGMpO249e2NudDp1LG1vZDpnLHNlbDpwLHBhcjpvLGRwYzpjLGFkZDpsfX1yZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93LmRvY3VtZW50P246dm9pZCBwb3N0TWVzc2FnZShuKX0sZD1mdW5jdGlvbih0LGkpe2lmKG51bGwhPT10aGlzLmVsZW1lbnQpe2lmKHRoaXMuX2NudD10LmNudCx0aGlzLl9tb2RlbC5kYXRhPXQubW9kLGkpe3ZhciBzLG4sYT10LmFkZCxvPXQuc2VsLGQ9dGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLnNsaWNlKCksYz10aGlzLl9tb2RlbC5kYXRhO2lmKG8ubGVuZ3RoIT09ZC5sZW5ndGh8fGUudmFrYXRhLmFycmF5X3VuaXF1ZShvLmNvbmNhdChkKSkubGVuZ3RoIT09by5sZW5ndGgpe2ZvcihzPTAsbj1vLmxlbmd0aDtuPnM7cysrKS0xPT09ZS5pbkFycmF5KG9bc10sYSkmJi0xPT09ZS5pbkFycmF5KG9bc10sZCkmJihjW29bc11dLnN0YXRlLnNlbGVjdGVkPSExKTtmb3Iocz0wLG49ZC5sZW5ndGg7bj5zO3MrKyktMT09PWUuaW5BcnJheShkW3NdLG8pJiYoY1tkW3NdXS5zdGF0ZS5zZWxlY3RlZD0hMCl9fXQuYWRkLmxlbmd0aCYmKHRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZD10aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQuY29uY2F0KHQuYWRkKSksdGhpcy50cmlnZ2VyKFwibW9kZWxcIix7bm9kZXM6dC5kcGMscGFyZW50OnQucGFyfSksdC5wYXIhPT1lLmpzdHJlZS5yb290Pyh0aGlzLl9ub2RlX2NoYW5nZWQodC5wYXIpLHRoaXMucmVkcmF3KCkpOnRoaXMucmVkcmF3KCEwKSx0LmFkZC5sZW5ndGgmJnRoaXMudHJpZ2dlcihcImNoYW5nZWRcIix7YWN0aW9uOlwibW9kZWxcIixzZWxlY3RlZDp0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWR9KSxyLmNhbGwodGhpcywhMCl9fTtpZih0aGlzLnNldHRpbmdzLmNvcmUud29ya2VyJiZ3aW5kb3cuQmxvYiYmd2luZG93LlVSTCYmd2luZG93Lldvcmtlcil0cnl7bnVsbD09PXRoaXMuX3dyayYmKHRoaXMuX3dyaz13aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgd2luZG93LkJsb2IoW1wic2VsZi5vbm1lc3NhZ2UgPSBcIitvLnRvU3RyaW5nKCldLHt0eXBlOlwidGV4dC9qYXZhc2NyaXB0XCJ9KSkpLCF0aGlzLl9kYXRhLmNvcmUud29ya2luZ3x8cz8odGhpcy5fZGF0YS5jb3JlLndvcmtpbmc9ITAsbj1uZXcgd2luZG93Lldvcmtlcih0aGlzLl93cmspLG4ub25tZXNzYWdlPWUucHJveHkoZnVuY3Rpb24oZSl7ZC5jYWxsKHRoaXMsZS5kYXRhLCEwKTt0cnl7bi50ZXJtaW5hdGUoKSxuPW51bGx9Y2F0Y2godCl7fXRoaXMuX2RhdGEuY29yZS53b3JrZXJfcXVldWUubGVuZ3RoP3RoaXMuX2FwcGVuZF9qc29uX2RhdGEuYXBwbHkodGhpcyx0aGlzLl9kYXRhLmNvcmUud29ya2VyX3F1ZXVlLnNoaWZ0KCkpOnRoaXMuX2RhdGEuY29yZS53b3JraW5nPSExfSx0aGlzKSxhLnBhcj9uLnBvc3RNZXNzYWdlKGEpOnRoaXMuX2RhdGEuY29yZS53b3JrZXJfcXVldWUubGVuZ3RoP3RoaXMuX2FwcGVuZF9qc29uX2RhdGEuYXBwbHkodGhpcyx0aGlzLl9kYXRhLmNvcmUud29ya2VyX3F1ZXVlLnNoaWZ0KCkpOnRoaXMuX2RhdGEuY29yZS53b3JraW5nPSExKTp0aGlzLl9kYXRhLmNvcmUud29ya2VyX3F1ZXVlLnB1c2goW3QsaSxyLCEwXSl9Y2F0Y2goYyl7ZC5jYWxsKHRoaXMsbyhhKSwhMSksdGhpcy5fZGF0YS5jb3JlLndvcmtlcl9xdWV1ZS5sZW5ndGg/dGhpcy5fYXBwZW5kX2pzb25fZGF0YS5hcHBseSh0aGlzLHRoaXMuX2RhdGEuY29yZS53b3JrZXJfcXVldWUuc2hpZnQoKSk6dGhpcy5fZGF0YS5jb3JlLndvcmtpbmc9ITF9ZWxzZSBkLmNhbGwodGhpcyxvKGEpLCExKX19LF9wYXJzZV9tb2RlbF9mcm9tX2h0bWw6ZnVuY3Rpb24oaSxyLHMpe3M9cz9bXS5jb25jYXQocyk6W10sciYmcy51bnNoaWZ0KHIpO3ZhciBuLGEsbyxkLGMsbD10aGlzLl9tb2RlbC5kYXRhLGg9e2lkOiExLHRleHQ6ITEsaWNvbjohMCxwYXJlbnQ6cixwYXJlbnRzOnMsY2hpbGRyZW46W10sY2hpbGRyZW5fZDpbXSxkYXRhOm51bGwsc3RhdGU6e30sbGlfYXR0cjp7aWQ6ITF9LGFfYXR0cjp7aHJlZjpcIiNcIn0sb3JpZ2luYWw6ITF9O2ZvcihvIGluIHRoaXMuX21vZGVsLmRlZmF1bHRfc3RhdGUpdGhpcy5fbW9kZWwuZGVmYXVsdF9zdGF0ZS5oYXNPd25Qcm9wZXJ0eShvKSYmKGguc3RhdGVbb109dGhpcy5fbW9kZWwuZGVmYXVsdF9zdGF0ZVtvXSk7aWYoZD1lLnZha2F0YS5hdHRyaWJ1dGVzKGksITApLGUuZWFjaChkLGZ1bmN0aW9uKHQsaSl7cmV0dXJuIGk9ZS50cmltKGkpLGkubGVuZ3RoPyhoLmxpX2F0dHJbdF09aSx2b2lkKFwiaWRcIj09PXQmJihoLmlkPWkudG9TdHJpbmcoKSkpKTohMH0pLGQ9aS5jaGlsZHJlbihcImFcIikuZmlyc3QoKSxkLmxlbmd0aCYmKGQ9ZS52YWthdGEuYXR0cmlidXRlcyhkLCEwKSxlLmVhY2goZCxmdW5jdGlvbih0LGkpe2k9ZS50cmltKGkpLGkubGVuZ3RoJiYoaC5hX2F0dHJbdF09aSl9KSksZD1pLmNoaWxkcmVuKFwiYVwiKS5maXJzdCgpLmxlbmd0aD9pLmNoaWxkcmVuKFwiYVwiKS5maXJzdCgpLmNsb25lKCk6aS5jbG9uZSgpLGQuY2hpbGRyZW4oXCJpbnMsIGksIHVsXCIpLnJlbW92ZSgpLGQ9ZC5odG1sKCksZD1lKFwiPGRpdiAvPlwiKS5odG1sKGQpLGgudGV4dD10aGlzLnNldHRpbmdzLmNvcmUuZm9yY2VfdGV4dD9kLnRleHQoKTpkLmh0bWwoKSxkPWkuZGF0YSgpLGguZGF0YT1kP2UuZXh0ZW5kKCEwLHt9LGQpOm51bGwsaC5zdGF0ZS5vcGVuZWQ9aS5oYXNDbGFzcyhcImpzdHJlZS1vcGVuXCIpLGguc3RhdGUuc2VsZWN0ZWQ9aS5jaGlsZHJlbihcImFcIikuaGFzQ2xhc3MoXCJqc3RyZWUtY2xpY2tlZFwiKSxoLnN0YXRlLmRpc2FibGVkPWkuY2hpbGRyZW4oXCJhXCIpLmhhc0NsYXNzKFwianN0cmVlLWRpc2FibGVkXCIpLGguZGF0YSYmaC5kYXRhLmpzdHJlZSlmb3IobyBpbiBoLmRhdGEuanN0cmVlKWguZGF0YS5qc3RyZWUuaGFzT3duUHJvcGVydHkobykmJihoLnN0YXRlW29dPWguZGF0YS5qc3RyZWVbb10pO2Q9aS5jaGlsZHJlbihcImFcIikuY2hpbGRyZW4oXCIuanN0cmVlLXRoZW1laWNvblwiKSxkLmxlbmd0aCYmKGguaWNvbj1kLmhhc0NsYXNzKFwianN0cmVlLXRoZW1laWNvbi1oaWRkZW5cIik/ITE6ZC5hdHRyKFwicmVsXCIpKSxoLnN0YXRlLmljb24hPT10JiYoaC5pY29uPWguc3RhdGUuaWNvbiksKGguaWNvbj09PXR8fG51bGw9PT1oLmljb258fFwiXCI9PT1oLmljb24pJiYoaC5pY29uPSEwKSxkPWkuY2hpbGRyZW4oXCJ1bFwiKS5jaGlsZHJlbihcImxpXCIpO2RvIGM9XCJqXCIrdGhpcy5faWQrXCJfXCIrICsrdGhpcy5fY250O3doaWxlKGxbY10pO3JldHVybiBoLmlkPWgubGlfYXR0ci5pZD9oLmxpX2F0dHIuaWQudG9TdHJpbmcoKTpjLGQubGVuZ3RoPyhkLmVhY2goZS5wcm94eShmdW5jdGlvbih0LGkpe249dGhpcy5fcGFyc2VfbW9kZWxfZnJvbV9odG1sKGUoaSksaC5pZCxzKSxhPXRoaXMuX21vZGVsLmRhdGFbbl0saC5jaGlsZHJlbi5wdXNoKG4pLGEuY2hpbGRyZW5fZC5sZW5ndGgmJihoLmNoaWxkcmVuX2Q9aC5jaGlsZHJlbl9kLmNvbmNhdChhLmNoaWxkcmVuX2QpKX0sdGhpcykpLGguY2hpbGRyZW5fZD1oLmNoaWxkcmVuX2QuY29uY2F0KGguY2hpbGRyZW4pKTppLmhhc0NsYXNzKFwianN0cmVlLWNsb3NlZFwiKSYmKGguc3RhdGUubG9hZGVkPSExKSxoLmxpX2F0dHJbXCJjbGFzc1wiXSYmKGgubGlfYXR0cltcImNsYXNzXCJdPWgubGlfYXR0cltcImNsYXNzXCJdLnJlcGxhY2UoXCJqc3RyZWUtY2xvc2VkXCIsXCJcIikucmVwbGFjZShcImpzdHJlZS1vcGVuXCIsXCJcIikpLGguYV9hdHRyW1wiY2xhc3NcIl0mJihoLmFfYXR0cltcImNsYXNzXCJdPWguYV9hdHRyW1wiY2xhc3NcIl0ucmVwbGFjZShcImpzdHJlZS1jbGlja2VkXCIsXCJcIikucmVwbGFjZShcImpzdHJlZS1kaXNhYmxlZFwiLFwiXCIpKSxsW2guaWRdPWgsaC5zdGF0ZS5zZWxlY3RlZCYmdGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLnB1c2goaC5pZCksaC5pZH0sX3BhcnNlX21vZGVsX2Zyb21fZmxhdF9qc29uOmZ1bmN0aW9uKGUsaSxyKXtyPXI/ci5jb25jYXQoKTpbXSxpJiZyLnVuc2hpZnQoaSk7dmFyIHMsbixhLG8sZD1lLmlkLnRvU3RyaW5nKCksYz10aGlzLl9tb2RlbC5kYXRhLGw9dGhpcy5fbW9kZWwuZGVmYXVsdF9zdGF0ZSxoPXtpZDpkLHRleHQ6ZS50ZXh0fHxcIlwiLGljb246ZS5pY29uIT09dD9lLmljb246ITAscGFyZW50OmkscGFyZW50czpyLGNoaWxkcmVuOmUuY2hpbGRyZW58fFtdLGNoaWxkcmVuX2Q6ZS5jaGlsZHJlbl9kfHxbXSxkYXRhOmUuZGF0YSxzdGF0ZTp7fSxsaV9hdHRyOntpZDohMX0sYV9hdHRyOntocmVmOlwiI1wifSxvcmlnaW5hbDohMX07Zm9yKHMgaW4gbClsLmhhc093blByb3BlcnR5KHMpJiYoaC5zdGF0ZVtzXT1sW3NdKTtpZihlJiZlLmRhdGEmJmUuZGF0YS5qc3RyZWUmJmUuZGF0YS5qc3RyZWUuaWNvbiYmKGguaWNvbj1lLmRhdGEuanN0cmVlLmljb24pLChoLmljb249PT10fHxudWxsPT09aC5pY29ufHxcIlwiPT09aC5pY29uKSYmKGguaWNvbj0hMCksZSYmZS5kYXRhJiYoaC5kYXRhPWUuZGF0YSxlLmRhdGEuanN0cmVlKSlmb3IocyBpbiBlLmRhdGEuanN0cmVlKWUuZGF0YS5qc3RyZWUuaGFzT3duUHJvcGVydHkocykmJihoLnN0YXRlW3NdPWUuZGF0YS5qc3RyZWVbc10pO2lmKGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlLnN0YXRlKWZvcihzIGluIGUuc3RhdGUpZS5zdGF0ZS5oYXNPd25Qcm9wZXJ0eShzKSYmKGguc3RhdGVbc109ZS5zdGF0ZVtzXSk7aWYoZSYmXCJvYmplY3RcIj09dHlwZW9mIGUubGlfYXR0cilmb3IocyBpbiBlLmxpX2F0dHIpZS5saV9hdHRyLmhhc093blByb3BlcnR5KHMpJiYoaC5saV9hdHRyW3NdPWUubGlfYXR0cltzXSk7aWYoaC5saV9hdHRyLmlkfHwoaC5saV9hdHRyLmlkPWQpLGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlLmFfYXR0cilmb3IocyBpbiBlLmFfYXR0cillLmFfYXR0ci5oYXNPd25Qcm9wZXJ0eShzKSYmKGguYV9hdHRyW3NdPWUuYV9hdHRyW3NdKTtmb3IoZSYmZS5jaGlsZHJlbiYmZS5jaGlsZHJlbj09PSEwJiYoaC5zdGF0ZS5sb2FkZWQ9ITEsaC5jaGlsZHJlbj1bXSxoLmNoaWxkcmVuX2Q9W10pLGNbaC5pZF09aCxzPTAsbj1oLmNoaWxkcmVuLmxlbmd0aDtuPnM7cysrKWE9dGhpcy5fcGFyc2VfbW9kZWxfZnJvbV9mbGF0X2pzb24oY1toLmNoaWxkcmVuW3NdXSxoLmlkLHIpLG89Y1thXSxoLmNoaWxkcmVuX2QucHVzaChhKSxvLmNoaWxkcmVuX2QubGVuZ3RoJiYoaC5jaGlsZHJlbl9kPWguY2hpbGRyZW5fZC5jb25jYXQoby5jaGlsZHJlbl9kKSk7cmV0dXJuIGRlbGV0ZSBlLmRhdGEsZGVsZXRlIGUuY2hpbGRyZW4sY1toLmlkXS5vcmlnaW5hbD1lLGguc3RhdGUuc2VsZWN0ZWQmJnRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZC5wdXNoKGguaWQpLGguaWR9LF9wYXJzZV9tb2RlbF9mcm9tX2pzb246ZnVuY3Rpb24oZSxpLHIpe3I9cj9yLmNvbmNhdCgpOltdLGkmJnIudW5zaGlmdChpKTt2YXIgcyxuLGEsbyxkLGM9ITEsbD10aGlzLl9tb2RlbC5kYXRhLGg9dGhpcy5fbW9kZWwuZGVmYXVsdF9zdGF0ZTtkbyBjPVwialwiK3RoaXMuX2lkK1wiX1wiKyArK3RoaXMuX2NudDt3aGlsZShsW2NdKTtkPXtpZDohMSx0ZXh0Olwic3RyaW5nXCI9PXR5cGVvZiBlP2U6XCJcIixpY29uOlwib2JqZWN0XCI9PXR5cGVvZiBlJiZlLmljb24hPT10P2UuaWNvbjohMCxwYXJlbnQ6aSxwYXJlbnRzOnIsY2hpbGRyZW46W10sY2hpbGRyZW5fZDpbXSxkYXRhOm51bGwsc3RhdGU6e30sbGlfYXR0cjp7aWQ6ITF9LGFfYXR0cjp7aHJlZjpcIiNcIn0sb3JpZ2luYWw6ITF9O2ZvcihzIGluIGgpaC5oYXNPd25Qcm9wZXJ0eShzKSYmKGQuc3RhdGVbc109aFtzXSk7aWYoZSYmZS5pZCYmKGQuaWQ9ZS5pZC50b1N0cmluZygpKSxlJiZlLnRleHQmJihkLnRleHQ9ZS50ZXh0KSxlJiZlLmRhdGEmJmUuZGF0YS5qc3RyZWUmJmUuZGF0YS5qc3RyZWUuaWNvbiYmKGQuaWNvbj1lLmRhdGEuanN0cmVlLmljb24pLChkLmljb249PT10fHxudWxsPT09ZC5pY29ufHxcIlwiPT09ZC5pY29uKSYmKGQuaWNvbj0hMCksZSYmZS5kYXRhJiYoZC5kYXRhPWUuZGF0YSxlLmRhdGEuanN0cmVlKSlmb3IocyBpbiBlLmRhdGEuanN0cmVlKWUuZGF0YS5qc3RyZWUuaGFzT3duUHJvcGVydHkocykmJihkLnN0YXRlW3NdPWUuZGF0YS5qc3RyZWVbc10pO2lmKGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlLnN0YXRlKWZvcihzIGluIGUuc3RhdGUpZS5zdGF0ZS5oYXNPd25Qcm9wZXJ0eShzKSYmKGQuc3RhdGVbc109ZS5zdGF0ZVtzXSk7aWYoZSYmXCJvYmplY3RcIj09dHlwZW9mIGUubGlfYXR0cilmb3IocyBpbiBlLmxpX2F0dHIpZS5saV9hdHRyLmhhc093blByb3BlcnR5KHMpJiYoZC5saV9hdHRyW3NdPWUubGlfYXR0cltzXSk7aWYoZC5saV9hdHRyLmlkJiYhZC5pZCYmKGQuaWQ9ZC5saV9hdHRyLmlkLnRvU3RyaW5nKCkpLGQuaWR8fChkLmlkPWMpLGQubGlfYXR0ci5pZHx8KGQubGlfYXR0ci5pZD1kLmlkKSxlJiZcIm9iamVjdFwiPT10eXBlb2YgZS5hX2F0dHIpZm9yKHMgaW4gZS5hX2F0dHIpZS5hX2F0dHIuaGFzT3duUHJvcGVydHkocykmJihkLmFfYXR0cltzXT1lLmFfYXR0cltzXSk7aWYoZSYmZS5jaGlsZHJlbiYmZS5jaGlsZHJlbi5sZW5ndGgpe2ZvcihzPTAsbj1lLmNoaWxkcmVuLmxlbmd0aDtuPnM7cysrKWE9dGhpcy5fcGFyc2VfbW9kZWxfZnJvbV9qc29uKGUuY2hpbGRyZW5bc10sZC5pZCxyKSxvPWxbYV0sZC5jaGlsZHJlbi5wdXNoKGEpLG8uY2hpbGRyZW5fZC5sZW5ndGgmJihkLmNoaWxkcmVuX2Q9ZC5jaGlsZHJlbl9kLmNvbmNhdChvLmNoaWxkcmVuX2QpKTtkLmNoaWxkcmVuX2Q9ZC5jaGlsZHJlbl9kLmNvbmNhdChkLmNoaWxkcmVuKX1yZXR1cm4gZSYmZS5jaGlsZHJlbiYmZS5jaGlsZHJlbj09PSEwJiYoZC5zdGF0ZS5sb2FkZWQ9ITEsZC5jaGlsZHJlbj1bXSxkLmNoaWxkcmVuX2Q9W10pLGRlbGV0ZSBlLmRhdGEsZGVsZXRlIGUuY2hpbGRyZW4sZC5vcmlnaW5hbD1lLGxbZC5pZF09ZCxkLnN0YXRlLnNlbGVjdGVkJiZ0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQucHVzaChkLmlkKSxkLmlkfSxfcmVkcmF3OmZ1bmN0aW9uKCl7dmFyIHQsaSxyLHM9dGhpcy5fbW9kZWwuZm9yY2VfZnVsbF9yZWRyYXc/dGhpcy5fbW9kZWwuZGF0YVtlLmpzdHJlZS5yb290XS5jaGlsZHJlbi5jb25jYXQoW10pOnRoaXMuX21vZGVsLmNoYW5nZWQuY29uY2F0KFtdKSxuPWwuY3JlYXRlRWxlbWVudChcIlVMXCIpLGE9dGhpcy5fZGF0YS5jb3JlLmZvY3VzZWQ7Zm9yKGk9MCxyPXMubGVuZ3RoO3I+aTtpKyspdD10aGlzLnJlZHJhd19ub2RlKHNbaV0sITAsdGhpcy5fbW9kZWwuZm9yY2VfZnVsbF9yZWRyYXcpLHQmJnRoaXMuX21vZGVsLmZvcmNlX2Z1bGxfcmVkcmF3JiZuLmFwcGVuZENoaWxkKHQpO3RoaXMuX21vZGVsLmZvcmNlX2Z1bGxfcmVkcmF3JiYobi5jbGFzc05hbWU9dGhpcy5nZXRfY29udGFpbmVyX3VsKClbMF0uY2xhc3NOYW1lLG4uc2V0QXR0cmlidXRlKFwicm9sZVwiLFwiZ3JvdXBcIiksdGhpcy5lbGVtZW50LmVtcHR5KCkuYXBwZW5kKG4pKSxudWxsIT09YSYmKHQ9dGhpcy5nZXRfbm9kZShhLCEwKSx0JiZ0Lmxlbmd0aCYmdC5jaGlsZHJlbihcIi5qc3RyZWUtYW5jaG9yXCIpWzBdIT09bC5hY3RpdmVFbGVtZW50P3QuY2hpbGRyZW4oXCIuanN0cmVlLWFuY2hvclwiKS5mb2N1cygpOnRoaXMuX2RhdGEuY29yZS5mb2N1c2VkPW51bGwpLHRoaXMuX21vZGVsLmZvcmNlX2Z1bGxfcmVkcmF3PSExLHRoaXMuX21vZGVsLmNoYW5nZWQ9W10sdGhpcy50cmlnZ2VyKFwicmVkcmF3XCIse25vZGVzOnN9KX0scmVkcmF3OmZ1bmN0aW9uKGUpe2UmJih0aGlzLl9tb2RlbC5mb3JjZV9mdWxsX3JlZHJhdz0hMCksdGhpcy5fcmVkcmF3KCl9LGRyYXdfY2hpbGRyZW46ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5nZXRfbm9kZSh0KSxyPSExLHM9ITEsbj0hMSxhPWw7aWYoIWkpcmV0dXJuITE7aWYoaS5pZD09PWUuanN0cmVlLnJvb3QpcmV0dXJuIHRoaXMucmVkcmF3KCEwKTtpZih0PXRoaXMuZ2V0X25vZGUodCwhMCksIXR8fCF0Lmxlbmd0aClyZXR1cm4hMTtpZih0LmNoaWxkcmVuKFwiLmpzdHJlZS1jaGlsZHJlblwiKS5yZW1vdmUoKSx0PXRbMF0saS5jaGlsZHJlbi5sZW5ndGgmJmkuc3RhdGUubG9hZGVkKXtmb3Iobj1hLmNyZWF0ZUVsZW1lbnQoXCJVTFwiKSxuLnNldEF0dHJpYnV0ZShcInJvbGVcIixcImdyb3VwXCIpLG4uY2xhc3NOYW1lPVwianN0cmVlLWNoaWxkcmVuXCIscj0wLHM9aS5jaGlsZHJlbi5sZW5ndGg7cz5yO3IrKyluLmFwcGVuZENoaWxkKHRoaXMucmVkcmF3X25vZGUoaS5jaGlsZHJlbltyXSwhMCwhMCkpO3QuYXBwZW5kQ2hpbGQobil9fSxyZWRyYXdfbm9kZTpmdW5jdGlvbih0LGkscixzKXt2YXIgbj10aGlzLmdldF9ub2RlKHQpLGE9ITEsbz0hMSxkPSExLGM9ITEsXz0hMSx1PSExLGc9XCJcIixmPWwscD10aGlzLl9tb2RlbC5kYXRhLG09ITEsdj1udWxsLGo9MCx5PTAsaz0hMSx4PSExO2lmKCFuKXJldHVybiExO2lmKG4uaWQ9PT1lLmpzdHJlZS5yb290KXJldHVybiB0aGlzLnJlZHJhdyghMCk7aWYoaT1pfHwwPT09bi5jaGlsZHJlbi5sZW5ndGgsdD1sLnF1ZXJ5U2VsZWN0b3I/dGhpcy5lbGVtZW50WzBdLnF1ZXJ5U2VsZWN0b3IoXCIjXCIrKC0xIT09XCIwMTIzNDU2Nzg5XCIuaW5kZXhPZihuLmlkWzBdKT9cIlxcXFwzXCIrbi5pZFswXStcIiBcIituLmlkLnN1YnN0cigxKS5yZXBsYWNlKGUuanN0cmVlLmlkcmVnZXgsXCJcXFxcJCZcIik6bi5pZC5yZXBsYWNlKGUuanN0cmVlLmlkcmVnZXgsXCJcXFxcJCZcIikpKTpsLmdldEVsZW1lbnRCeUlkKG4uaWQpKXQ9ZSh0KSxyfHwoYT10LnBhcmVudCgpLnBhcmVudCgpWzBdLGE9PT10aGlzLmVsZW1lbnRbMF0mJihhPW51bGwpLG89dC5pbmRleCgpKSxpfHwhbi5jaGlsZHJlbi5sZW5ndGh8fHQuY2hpbGRyZW4oXCIuanN0cmVlLWNoaWxkcmVuXCIpLmxlbmd0aHx8KGk9ITApLFxuaXx8KGQ9dC5jaGlsZHJlbihcIi5qc3RyZWUtY2hpbGRyZW5cIilbMF0pLG09dC5jaGlsZHJlbihcIi5qc3RyZWUtYW5jaG9yXCIpWzBdPT09bC5hY3RpdmVFbGVtZW50LHQucmVtb3ZlKCk7ZWxzZSBpZihpPSEwLCFyKXtpZihhPW4ucGFyZW50IT09ZS5qc3RyZWUucm9vdD9lKFwiI1wiK24ucGFyZW50LnJlcGxhY2UoZS5qc3RyZWUuaWRyZWdleCxcIlxcXFwkJlwiKSx0aGlzLmVsZW1lbnQpWzBdOm51bGwsIShudWxsPT09YXx8YSYmcFtuLnBhcmVudF0uc3RhdGUub3BlbmVkKSlyZXR1cm4hMTtvPWUuaW5BcnJheShuLmlkLG51bGw9PT1hP3BbZS5qc3RyZWUucm9vdF0uY2hpbGRyZW46cFtuLnBhcmVudF0uY2hpbGRyZW4pfXQ9aC5jbG9uZU5vZGUoITApLGc9XCJqc3RyZWUtbm9kZSBcIjtmb3IoYyBpbiBuLmxpX2F0dHIpaWYobi5saV9hdHRyLmhhc093blByb3BlcnR5KGMpKXtpZihcImlkXCI9PT1jKWNvbnRpbnVlO1wiY2xhc3NcIiE9PWM/dC5zZXRBdHRyaWJ1dGUoYyxuLmxpX2F0dHJbY10pOmcrPW4ubGlfYXR0cltjXX1mb3Iobi5hX2F0dHIuaWR8fChuLmFfYXR0ci5pZD1uLmlkK1wiX2FuY2hvclwiKSx0LnNldEF0dHJpYnV0ZShcImFyaWEtc2VsZWN0ZWRcIiwhIW4uc3RhdGUuc2VsZWN0ZWQpLHQuc2V0QXR0cmlidXRlKFwiYXJpYS1sZXZlbFwiLG4ucGFyZW50cy5sZW5ndGgpLHQuc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbGxlZGJ5XCIsbi5hX2F0dHIuaWQpLG4uc3RhdGUuZGlzYWJsZWQmJnQuc2V0QXR0cmlidXRlKFwiYXJpYS1kaXNhYmxlZFwiLCEwKSxjPTAsXz1uLmNoaWxkcmVuLmxlbmd0aDtfPmM7YysrKWlmKCFwW24uY2hpbGRyZW5bY11dLnN0YXRlLmhpZGRlbil7az0hMDticmVha31pZihudWxsIT09bi5wYXJlbnQmJnBbbi5wYXJlbnRdJiYhbi5zdGF0ZS5oaWRkZW4mJihjPWUuaW5BcnJheShuLmlkLHBbbi5wYXJlbnRdLmNoaWxkcmVuKSx4PW4uaWQsLTEhPT1jKSlmb3IoYysrLF89cFtuLnBhcmVudF0uY2hpbGRyZW4ubGVuZ3RoO18+YyYmKHBbcFtuLnBhcmVudF0uY2hpbGRyZW5bY11dLnN0YXRlLmhpZGRlbnx8KHg9cFtuLnBhcmVudF0uY2hpbGRyZW5bY10pLHg9PT1uLmlkKTtjKyspO24uc3RhdGUuaGlkZGVuJiYoZys9XCIganN0cmVlLWhpZGRlblwiKSxuLnN0YXRlLmxvYWRlZCYmIWs/Zys9XCIganN0cmVlLWxlYWZcIjooZys9bi5zdGF0ZS5vcGVuZWQmJm4uc3RhdGUubG9hZGVkP1wiIGpzdHJlZS1vcGVuXCI6XCIganN0cmVlLWNsb3NlZFwiLHQuc2V0QXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiLG4uc3RhdGUub3BlbmVkJiZuLnN0YXRlLmxvYWRlZCkpLHg9PT1uLmlkJiYoZys9XCIganN0cmVlLWxhc3RcIiksdC5pZD1uLmlkLHQuY2xhc3NOYW1lPWcsZz0obi5zdGF0ZS5zZWxlY3RlZD9cIiBqc3RyZWUtY2xpY2tlZFwiOlwiXCIpKyhuLnN0YXRlLmRpc2FibGVkP1wiIGpzdHJlZS1kaXNhYmxlZFwiOlwiXCIpO2ZvcihfIGluIG4uYV9hdHRyKWlmKG4uYV9hdHRyLmhhc093blByb3BlcnR5KF8pKXtpZihcImhyZWZcIj09PV8mJlwiI1wiPT09bi5hX2F0dHJbX10pY29udGludWU7XCJjbGFzc1wiIT09Xz90LmNoaWxkTm9kZXNbMV0uc2V0QXR0cmlidXRlKF8sbi5hX2F0dHJbX10pOmcrPVwiIFwiK24uYV9hdHRyW19dfWlmKGcubGVuZ3RoJiYodC5jaGlsZE5vZGVzWzFdLmNsYXNzTmFtZT1cImpzdHJlZS1hbmNob3IgXCIrZyksKG4uaWNvbiYmbi5pY29uIT09ITB8fG4uaWNvbj09PSExKSYmKG4uaWNvbj09PSExP3QuY2hpbGROb2Rlc1sxXS5jaGlsZE5vZGVzWzBdLmNsYXNzTmFtZSs9XCIganN0cmVlLXRoZW1laWNvbi1oaWRkZW5cIjotMT09PW4uaWNvbi5pbmRleE9mKFwiL1wiKSYmLTE9PT1uLmljb24uaW5kZXhPZihcIi5cIik/dC5jaGlsZE5vZGVzWzFdLmNoaWxkTm9kZXNbMF0uY2xhc3NOYW1lKz1cIiBcIituLmljb24rXCIganN0cmVlLXRoZW1laWNvbi1jdXN0b21cIjoodC5jaGlsZE5vZGVzWzFdLmNoaWxkTm9kZXNbMF0uc3R5bGUuYmFja2dyb3VuZEltYWdlPVwidXJsKFwiK24uaWNvbitcIilcIix0LmNoaWxkTm9kZXNbMV0uY2hpbGROb2Rlc1swXS5zdHlsZS5iYWNrZ3JvdW5kUG9zaXRpb249XCJjZW50ZXIgY2VudGVyXCIsdC5jaGlsZE5vZGVzWzFdLmNoaWxkTm9kZXNbMF0uc3R5bGUuYmFja2dyb3VuZFNpemU9XCJhdXRvXCIsdC5jaGlsZE5vZGVzWzFdLmNoaWxkTm9kZXNbMF0uY2xhc3NOYW1lKz1cIiBqc3RyZWUtdGhlbWVpY29uLWN1c3RvbVwiKSksdGhpcy5zZXR0aW5ncy5jb3JlLmZvcmNlX3RleHQ/dC5jaGlsZE5vZGVzWzFdLmFwcGVuZENoaWxkKGYuY3JlYXRlVGV4dE5vZGUobi50ZXh0KSk6dC5jaGlsZE5vZGVzWzFdLmlubmVySFRNTCs9bi50ZXh0LGkmJm4uY2hpbGRyZW4ubGVuZ3RoJiYobi5zdGF0ZS5vcGVuZWR8fHMpJiZuLnN0YXRlLmxvYWRlZCl7Zm9yKHU9Zi5jcmVhdGVFbGVtZW50KFwiVUxcIiksdS5zZXRBdHRyaWJ1dGUoXCJyb2xlXCIsXCJncm91cFwiKSx1LmNsYXNzTmFtZT1cImpzdHJlZS1jaGlsZHJlblwiLGM9MCxfPW4uY2hpbGRyZW4ubGVuZ3RoO18+YztjKyspdS5hcHBlbmRDaGlsZCh0aGlzLnJlZHJhd19ub2RlKG4uY2hpbGRyZW5bY10saSwhMCkpO3QuYXBwZW5kQ2hpbGQodSl9aWYoZCYmdC5hcHBlbmRDaGlsZChkKSwhcil7Zm9yKGF8fChhPXRoaXMuZWxlbWVudFswXSksYz0wLF89YS5jaGlsZE5vZGVzLmxlbmd0aDtfPmM7YysrKWlmKGEuY2hpbGROb2Rlc1tjXSYmYS5jaGlsZE5vZGVzW2NdLmNsYXNzTmFtZSYmLTEhPT1hLmNoaWxkTm9kZXNbY10uY2xhc3NOYW1lLmluZGV4T2YoXCJqc3RyZWUtY2hpbGRyZW5cIikpe3Y9YS5jaGlsZE5vZGVzW2NdO2JyZWFrfXZ8fCh2PWYuY3JlYXRlRWxlbWVudChcIlVMXCIpLHYuc2V0QXR0cmlidXRlKFwicm9sZVwiLFwiZ3JvdXBcIiksdi5jbGFzc05hbWU9XCJqc3RyZWUtY2hpbGRyZW5cIixhLmFwcGVuZENoaWxkKHYpKSxhPXYsbzxhLmNoaWxkTm9kZXMubGVuZ3RoP2EuaW5zZXJ0QmVmb3JlKHQsYS5jaGlsZE5vZGVzW29dKTphLmFwcGVuZENoaWxkKHQpLG0mJihqPXRoaXMuZWxlbWVudFswXS5zY3JvbGxUb3AseT10aGlzLmVsZW1lbnRbMF0uc2Nyb2xsTGVmdCx0LmNoaWxkTm9kZXNbMV0uZm9jdXMoKSx0aGlzLmVsZW1lbnRbMF0uc2Nyb2xsVG9wPWosdGhpcy5lbGVtZW50WzBdLnNjcm9sbExlZnQ9eSl9cmV0dXJuIG4uc3RhdGUub3BlbmVkJiYhbi5zdGF0ZS5sb2FkZWQmJihuLnN0YXRlLm9wZW5lZD0hMSxzZXRUaW1lb3V0KGUucHJveHkoZnVuY3Rpb24oKXt0aGlzLm9wZW5fbm9kZShuLmlkLCExLDApfSx0aGlzKSwwKSksdH0sb3Blbl9ub2RlOmZ1bmN0aW9uKGkscixzKXt2YXIgbixhLG8sZDtpZihlLmlzQXJyYXkoaSkpe2ZvcihpPWkuc2xpY2UoKSxuPTAsYT1pLmxlbmd0aDthPm47bisrKXRoaXMub3Blbl9ub2RlKGlbbl0scixzKTtyZXR1cm4hMH1yZXR1cm4gaT10aGlzLmdldF9ub2RlKGkpLGkmJmkuaWQhPT1lLmpzdHJlZS5yb290PyhzPXM9PT10P3RoaXMuc2V0dGluZ3MuY29yZS5hbmltYXRpb246cyx0aGlzLmlzX2Nsb3NlZChpKT90aGlzLmlzX2xvYWRlZChpKT8obz10aGlzLmdldF9ub2RlKGksITApLGQ9dGhpcyxvLmxlbmd0aCYmKHMmJm8uY2hpbGRyZW4oXCIuanN0cmVlLWNoaWxkcmVuXCIpLmxlbmd0aCYmby5jaGlsZHJlbihcIi5qc3RyZWUtY2hpbGRyZW5cIikuc3RvcCghMCwhMCksaS5jaGlsZHJlbi5sZW5ndGgmJiF0aGlzLl9maXJzdENoaWxkKG8uY2hpbGRyZW4oXCIuanN0cmVlLWNoaWxkcmVuXCIpWzBdKSYmdGhpcy5kcmF3X2NoaWxkcmVuKGkpLHM/KHRoaXMudHJpZ2dlcihcImJlZm9yZV9vcGVuXCIse25vZGU6aX0pLG8uY2hpbGRyZW4oXCIuanN0cmVlLWNoaWxkcmVuXCIpLmNzcyhcImRpc3BsYXlcIixcIm5vbmVcIikuZW5kKCkucmVtb3ZlQ2xhc3MoXCJqc3RyZWUtY2xvc2VkXCIpLmFkZENsYXNzKFwianN0cmVlLW9wZW5cIikuYXR0cihcImFyaWEtZXhwYW5kZWRcIiwhMCkuY2hpbGRyZW4oXCIuanN0cmVlLWNoaWxkcmVuXCIpLnN0b3AoITAsITApLnNsaWRlRG93bihzLGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5kaXNwbGF5PVwiXCIsZC50cmlnZ2VyKFwiYWZ0ZXJfb3BlblwiLHtub2RlOml9KX0pKToodGhpcy50cmlnZ2VyKFwiYmVmb3JlX29wZW5cIix7bm9kZTppfSksb1swXS5jbGFzc05hbWU9b1swXS5jbGFzc05hbWUucmVwbGFjZShcImpzdHJlZS1jbG9zZWRcIixcImpzdHJlZS1vcGVuXCIpLG9bMF0uc2V0QXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiLCEwKSkpLGkuc3RhdGUub3BlbmVkPSEwLHImJnIuY2FsbCh0aGlzLGksITApLG8ubGVuZ3RofHx0aGlzLnRyaWdnZXIoXCJiZWZvcmVfb3BlblwiLHtub2RlOml9KSx0aGlzLnRyaWdnZXIoXCJvcGVuX25vZGVcIix7bm9kZTppfSkscyYmby5sZW5ndGh8fHRoaXMudHJpZ2dlcihcImFmdGVyX29wZW5cIix7bm9kZTppfSksITApOnRoaXMuaXNfbG9hZGluZyhpKT9zZXRUaW1lb3V0KGUucHJveHkoZnVuY3Rpb24oKXt0aGlzLm9wZW5fbm9kZShpLHIscyl9LHRoaXMpLDUwMCk6dm9pZCB0aGlzLmxvYWRfbm9kZShpLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/dGhpcy5vcGVuX25vZGUoZSxyLHMpOnI/ci5jYWxsKHRoaXMsZSwhMSk6ITF9KToociYmci5jYWxsKHRoaXMsaSwhMSksITEpKTohMX0sX29wZW5fdG86ZnVuY3Rpb24odCl7aWYodD10aGlzLmdldF9ub2RlKHQpLCF0fHx0LmlkPT09ZS5qc3RyZWUucm9vdClyZXR1cm4hMTt2YXIgaSxyLHM9dC5wYXJlbnRzO2ZvcihpPTAscj1zLmxlbmd0aDtyPmk7aSs9MSlpIT09ZS5qc3RyZWUucm9vdCYmdGhpcy5vcGVuX25vZGUoc1tpXSwhMSwwKTtyZXR1cm4gZShcIiNcIit0LmlkLnJlcGxhY2UoZS5qc3RyZWUuaWRyZWdleCxcIlxcXFwkJlwiKSx0aGlzLmVsZW1lbnQpfSxjbG9zZV9ub2RlOmZ1bmN0aW9uKGkscil7dmFyIHMsbixhLG87aWYoZS5pc0FycmF5KGkpKXtmb3IoaT1pLnNsaWNlKCkscz0wLG49aS5sZW5ndGg7bj5zO3MrKyl0aGlzLmNsb3NlX25vZGUoaVtzXSxyKTtyZXR1cm4hMH1yZXR1cm4gaT10aGlzLmdldF9ub2RlKGkpLGkmJmkuaWQhPT1lLmpzdHJlZS5yb290P3RoaXMuaXNfY2xvc2VkKGkpPyExOihyPXI9PT10P3RoaXMuc2V0dGluZ3MuY29yZS5hbmltYXRpb246cixhPXRoaXMsbz10aGlzLmdldF9ub2RlKGksITApLG8ubGVuZ3RoJiYocj9vLmNoaWxkcmVuKFwiLmpzdHJlZS1jaGlsZHJlblwiKS5hdHRyKFwic3R5bGVcIixcImRpc3BsYXk6YmxvY2sgIWltcG9ydGFudFwiKS5lbmQoKS5yZW1vdmVDbGFzcyhcImpzdHJlZS1vcGVuXCIpLmFkZENsYXNzKFwianN0cmVlLWNsb3NlZFwiKS5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLCExKS5jaGlsZHJlbihcIi5qc3RyZWUtY2hpbGRyZW5cIikuc3RvcCghMCwhMCkuc2xpZGVVcChyLGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5kaXNwbGF5PVwiXCIsby5jaGlsZHJlbihcIi5qc3RyZWUtY2hpbGRyZW5cIikucmVtb3ZlKCksYS50cmlnZ2VyKFwiYWZ0ZXJfY2xvc2VcIix7bm9kZTppfSl9KToob1swXS5jbGFzc05hbWU9b1swXS5jbGFzc05hbWUucmVwbGFjZShcImpzdHJlZS1vcGVuXCIsXCJqc3RyZWUtY2xvc2VkXCIpLG8uYXR0cihcImFyaWEtZXhwYW5kZWRcIiwhMSkuY2hpbGRyZW4oXCIuanN0cmVlLWNoaWxkcmVuXCIpLnJlbW92ZSgpKSksaS5zdGF0ZS5vcGVuZWQ9ITEsdGhpcy50cmlnZ2VyKFwiY2xvc2Vfbm9kZVwiLHtub2RlOml9KSx2b2lkKHImJm8ubGVuZ3RofHx0aGlzLnRyaWdnZXIoXCJhZnRlcl9jbG9zZVwiLHtub2RlOml9KSkpOiExfSx0b2dnbGVfbm9kZTpmdW5jdGlvbih0KXt2YXIgaSxyO2lmKGUuaXNBcnJheSh0KSl7Zm9yKHQ9dC5zbGljZSgpLGk9MCxyPXQubGVuZ3RoO3I+aTtpKyspdGhpcy50b2dnbGVfbm9kZSh0W2ldKTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5pc19jbG9zZWQodCk/dGhpcy5vcGVuX25vZGUodCk6dGhpcy5pc19vcGVuKHQpP3RoaXMuY2xvc2Vfbm9kZSh0KTp2b2lkIDB9LG9wZW5fYWxsOmZ1bmN0aW9uKHQsaSxyKXtpZih0fHwodD1lLmpzdHJlZS5yb290KSx0PXRoaXMuZ2V0X25vZGUodCksIXQpcmV0dXJuITE7dmFyIHMsbixhLG89dC5pZD09PWUuanN0cmVlLnJvb3Q/dGhpcy5nZXRfY29udGFpbmVyX3VsKCk6dGhpcy5nZXRfbm9kZSh0LCEwKTtpZighby5sZW5ndGgpe2ZvcihzPTAsbj10LmNoaWxkcmVuX2QubGVuZ3RoO24+cztzKyspdGhpcy5pc19jbG9zZWQodGhpcy5fbW9kZWwuZGF0YVt0LmNoaWxkcmVuX2Rbc11dKSYmKHRoaXMuX21vZGVsLmRhdGFbdC5jaGlsZHJlbl9kW3NdXS5zdGF0ZS5vcGVuZWQ9ITApO3JldHVybiB0aGlzLnRyaWdnZXIoXCJvcGVuX2FsbFwiLHtub2RlOnR9KX1yPXJ8fG8sYT10aGlzLG89dGhpcy5pc19jbG9zZWQodCk/by5maW5kKFwiLmpzdHJlZS1jbG9zZWRcIikuYWRkQmFjaygpOm8uZmluZChcIi5qc3RyZWUtY2xvc2VkXCIpLG8uZWFjaChmdW5jdGlvbigpe2Eub3Blbl9ub2RlKHRoaXMsZnVuY3Rpb24oZSx0KXt0JiZ0aGlzLmlzX3BhcmVudChlKSYmdGhpcy5vcGVuX2FsbChlLGkscil9LGl8fDApfSksMD09PXIuZmluZChcIi5qc3RyZWUtY2xvc2VkXCIpLmxlbmd0aCYmdGhpcy50cmlnZ2VyKFwib3Blbl9hbGxcIix7bm9kZTp0aGlzLmdldF9ub2RlKHIpfSl9LGNsb3NlX2FsbDpmdW5jdGlvbih0LGkpe2lmKHR8fCh0PWUuanN0cmVlLnJvb3QpLHQ9dGhpcy5nZXRfbm9kZSh0KSwhdClyZXR1cm4hMTt2YXIgcixzLG49dC5pZD09PWUuanN0cmVlLnJvb3Q/dGhpcy5nZXRfY29udGFpbmVyX3VsKCk6dGhpcy5nZXRfbm9kZSh0LCEwKSxhPXRoaXM7Zm9yKG4ubGVuZ3RoJiYobj10aGlzLmlzX29wZW4odCk/bi5maW5kKFwiLmpzdHJlZS1vcGVuXCIpLmFkZEJhY2soKTpuLmZpbmQoXCIuanN0cmVlLW9wZW5cIiksZShuLmdldCgpLnJldmVyc2UoKSkuZWFjaChmdW5jdGlvbigpe2EuY2xvc2Vfbm9kZSh0aGlzLGl8fDApfSkpLHI9MCxzPXQuY2hpbGRyZW5fZC5sZW5ndGg7cz5yO3IrKyl0aGlzLl9tb2RlbC5kYXRhW3QuY2hpbGRyZW5fZFtyXV0uc3RhdGUub3BlbmVkPSExO3RoaXMudHJpZ2dlcihcImNsb3NlX2FsbFwiLHtub2RlOnR9KX0saXNfZGlzYWJsZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9dGhpcy5nZXRfbm9kZShlKSxlJiZlLnN0YXRlJiZlLnN0YXRlLmRpc2FibGVkfSxlbmFibGVfbm9kZTpmdW5jdGlvbih0KXt2YXIgaSxyO2lmKGUuaXNBcnJheSh0KSl7Zm9yKHQ9dC5zbGljZSgpLGk9MCxyPXQubGVuZ3RoO3I+aTtpKyspdGhpcy5lbmFibGVfbm9kZSh0W2ldKTtyZXR1cm4hMH1yZXR1cm4gdD10aGlzLmdldF9ub2RlKHQpLHQmJnQuaWQhPT1lLmpzdHJlZS5yb290Pyh0LnN0YXRlLmRpc2FibGVkPSExLHRoaXMuZ2V0X25vZGUodCwhMCkuY2hpbGRyZW4oXCIuanN0cmVlLWFuY2hvclwiKS5yZW1vdmVDbGFzcyhcImpzdHJlZS1kaXNhYmxlZFwiKS5hdHRyKFwiYXJpYS1kaXNhYmxlZFwiLCExKSx2b2lkIHRoaXMudHJpZ2dlcihcImVuYWJsZV9ub2RlXCIse25vZGU6dH0pKTohMX0sZGlzYWJsZV9ub2RlOmZ1bmN0aW9uKHQpe3ZhciBpLHI7aWYoZS5pc0FycmF5KHQpKXtmb3IodD10LnNsaWNlKCksaT0wLHI9dC5sZW5ndGg7cj5pO2krKyl0aGlzLmRpc2FibGVfbm9kZSh0W2ldKTtyZXR1cm4hMH1yZXR1cm4gdD10aGlzLmdldF9ub2RlKHQpLHQmJnQuaWQhPT1lLmpzdHJlZS5yb290Pyh0LnN0YXRlLmRpc2FibGVkPSEwLHRoaXMuZ2V0X25vZGUodCwhMCkuY2hpbGRyZW4oXCIuanN0cmVlLWFuY2hvclwiKS5hZGRDbGFzcyhcImpzdHJlZS1kaXNhYmxlZFwiKS5hdHRyKFwiYXJpYS1kaXNhYmxlZFwiLCEwKSx2b2lkIHRoaXMudHJpZ2dlcihcImRpc2FibGVfbm9kZVwiLHtub2RlOnR9KSk6ITF9LGhpZGVfbm9kZTpmdW5jdGlvbih0LGkpe3ZhciByLHM7aWYoZS5pc0FycmF5KHQpKXtmb3IodD10LnNsaWNlKCkscj0wLHM9dC5sZW5ndGg7cz5yO3IrKyl0aGlzLmhpZGVfbm9kZSh0W3JdLCEwKTtyZXR1cm4gdGhpcy5yZWRyYXcoKSwhMH1yZXR1cm4gdD10aGlzLmdldF9ub2RlKHQpLHQmJnQuaWQhPT1lLmpzdHJlZS5yb290P3ZvaWQodC5zdGF0ZS5oaWRkZW58fCh0LnN0YXRlLmhpZGRlbj0hMCx0aGlzLl9ub2RlX2NoYW5nZWQodC5wYXJlbnQpLGl8fHRoaXMucmVkcmF3KCksdGhpcy50cmlnZ2VyKFwiaGlkZV9ub2RlXCIse25vZGU6dH0pKSk6ITF9LHNob3dfbm9kZTpmdW5jdGlvbih0LGkpe3ZhciByLHM7aWYoZS5pc0FycmF5KHQpKXtmb3IodD10LnNsaWNlKCkscj0wLHM9dC5sZW5ndGg7cz5yO3IrKyl0aGlzLnNob3dfbm9kZSh0W3JdLCEwKTtyZXR1cm4gdGhpcy5yZWRyYXcoKSwhMH1yZXR1cm4gdD10aGlzLmdldF9ub2RlKHQpLHQmJnQuaWQhPT1lLmpzdHJlZS5yb290P3ZvaWQodC5zdGF0ZS5oaWRkZW4mJih0LnN0YXRlLmhpZGRlbj0hMSx0aGlzLl9ub2RlX2NoYW5nZWQodC5wYXJlbnQpLGl8fHRoaXMucmVkcmF3KCksdGhpcy50cmlnZ2VyKFwic2hvd19ub2RlXCIse25vZGU6dH0pKSk6ITF9LGhpZGVfYWxsOmZ1bmN0aW9uKHQpe3ZhciBpLHI9dGhpcy5fbW9kZWwuZGF0YSxzPVtdO2ZvcihpIGluIHIpci5oYXNPd25Qcm9wZXJ0eShpKSYmaSE9PWUuanN0cmVlLnJvb3QmJiFyW2ldLnN0YXRlLmhpZGRlbiYmKHJbaV0uc3RhdGUuaGlkZGVuPSEwLHMucHVzaChpKSk7cmV0dXJuIHRoaXMuX21vZGVsLmZvcmNlX2Z1bGxfcmVkcmF3PSEwLHR8fHRoaXMucmVkcmF3KCksdGhpcy50cmlnZ2VyKFwiaGlkZV9hbGxcIix7bm9kZXM6c30pLHN9LHNob3dfYWxsOmZ1bmN0aW9uKHQpe3ZhciBpLHI9dGhpcy5fbW9kZWwuZGF0YSxzPVtdO2ZvcihpIGluIHIpci5oYXNPd25Qcm9wZXJ0eShpKSYmaSE9PWUuanN0cmVlLnJvb3QmJnJbaV0uc3RhdGUuaGlkZGVuJiYocltpXS5zdGF0ZS5oaWRkZW49ITEscy5wdXNoKGkpKTtyZXR1cm4gdGhpcy5fbW9kZWwuZm9yY2VfZnVsbF9yZWRyYXc9ITAsdHx8dGhpcy5yZWRyYXcoKSx0aGlzLnRyaWdnZXIoXCJzaG93X2FsbFwiLHtub2RlczpzfSksc30sYWN0aXZhdGVfbm9kZTpmdW5jdGlvbihlLGkpe2lmKHRoaXMuaXNfZGlzYWJsZWQoZSkpcmV0dXJuITE7aWYoaSYmXCJvYmplY3RcIj09dHlwZW9mIGl8fChpPXt9KSx0aGlzLl9kYXRhLmNvcmUubGFzdF9jbGlja2VkPXRoaXMuX2RhdGEuY29yZS5sYXN0X2NsaWNrZWQmJnRoaXMuX2RhdGEuY29yZS5sYXN0X2NsaWNrZWQuaWQhPT10P3RoaXMuZ2V0X25vZGUodGhpcy5fZGF0YS5jb3JlLmxhc3RfY2xpY2tlZC5pZCk6bnVsbCx0aGlzLl9kYXRhLmNvcmUubGFzdF9jbGlja2VkJiYhdGhpcy5fZGF0YS5jb3JlLmxhc3RfY2xpY2tlZC5zdGF0ZS5zZWxlY3RlZCYmKHRoaXMuX2RhdGEuY29yZS5sYXN0X2NsaWNrZWQ9bnVsbCksIXRoaXMuX2RhdGEuY29yZS5sYXN0X2NsaWNrZWQmJnRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZC5sZW5ndGgmJih0aGlzLl9kYXRhLmNvcmUubGFzdF9jbGlja2VkPXRoaXMuZ2V0X25vZGUodGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkW3RoaXMuX2RhdGEuY29yZS5zZWxlY3RlZC5sZW5ndGgtMV0pKSx0aGlzLnNldHRpbmdzLmNvcmUubXVsdGlwbGUmJihpLm1ldGFLZXl8fGkuY3RybEtleXx8aS5zaGlmdEtleSkmJighaS5zaGlmdEtleXx8dGhpcy5fZGF0YS5jb3JlLmxhc3RfY2xpY2tlZCYmdGhpcy5nZXRfcGFyZW50KGUpJiZ0aGlzLmdldF9wYXJlbnQoZSk9PT10aGlzLl9kYXRhLmNvcmUubGFzdF9jbGlja2VkLnBhcmVudCkpaWYoaS5zaGlmdEtleSl7dmFyIHIscyxuPXRoaXMuZ2V0X25vZGUoZSkuaWQsYT10aGlzLl9kYXRhLmNvcmUubGFzdF9jbGlja2VkLmlkLG89dGhpcy5nZXRfbm9kZSh0aGlzLl9kYXRhLmNvcmUubGFzdF9jbGlja2VkLnBhcmVudCkuY2hpbGRyZW4sZD0hMTtmb3Iocj0wLHM9by5sZW5ndGg7cz5yO3IrPTEpb1tyXT09PW4mJihkPSFkKSxvW3JdPT09YSYmKGQ9IWQpLHRoaXMuaXNfZGlzYWJsZWQob1tyXSl8fCFkJiZvW3JdIT09biYmb1tyXSE9PWE/dGhpcy5kZXNlbGVjdF9ub2RlKG9bcl0sITAsaSk6dGhpcy5zZWxlY3Rfbm9kZShvW3JdLCEwLCExLGkpO3RoaXMudHJpZ2dlcihcImNoYW5nZWRcIix7YWN0aW9uOlwic2VsZWN0X25vZGVcIixub2RlOnRoaXMuZ2V0X25vZGUoZSksc2VsZWN0ZWQ6dGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLGV2ZW50Oml9KX1lbHNlIHRoaXMuaXNfc2VsZWN0ZWQoZSk/dGhpcy5kZXNlbGVjdF9ub2RlKGUsITEsaSk6dGhpcy5zZWxlY3Rfbm9kZShlLCExLCExLGkpO2Vsc2UhdGhpcy5zZXR0aW5ncy5jb3JlLm11bHRpcGxlJiYoaS5tZXRhS2V5fHxpLmN0cmxLZXl8fGkuc2hpZnRLZXkpJiZ0aGlzLmlzX3NlbGVjdGVkKGUpP3RoaXMuZGVzZWxlY3Rfbm9kZShlLCExLGkpOih0aGlzLmRlc2VsZWN0X2FsbCghMCksdGhpcy5zZWxlY3Rfbm9kZShlLCExLCExLGkpLHRoaXMuX2RhdGEuY29yZS5sYXN0X2NsaWNrZWQ9dGhpcy5nZXRfbm9kZShlKSk7dGhpcy50cmlnZ2VyKFwiYWN0aXZhdGVfbm9kZVwiLHtub2RlOnRoaXMuZ2V0X25vZGUoZSksZXZlbnQ6aX0pfSxob3Zlcl9ub2RlOmZ1bmN0aW9uKGUpe2lmKGU9dGhpcy5nZXRfbm9kZShlLCEwKSwhZXx8IWUubGVuZ3RofHxlLmNoaWxkcmVuKFwiLmpzdHJlZS1ob3ZlcmVkXCIpLmxlbmd0aClyZXR1cm4hMTt2YXIgdD10aGlzLmVsZW1lbnQuZmluZChcIi5qc3RyZWUtaG92ZXJlZFwiKSxpPXRoaXMuZWxlbWVudDt0JiZ0Lmxlbmd0aCYmdGhpcy5kZWhvdmVyX25vZGUodCksZS5jaGlsZHJlbihcIi5qc3RyZWUtYW5jaG9yXCIpLmFkZENsYXNzKFwianN0cmVlLWhvdmVyZWRcIiksdGhpcy50cmlnZ2VyKFwiaG92ZXJfbm9kZVwiLHtub2RlOnRoaXMuZ2V0X25vZGUoZSl9KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aS5hdHRyKFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCIsZVswXS5pZCl9LDApfSxkZWhvdmVyX25vZGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9dGhpcy5nZXRfbm9kZShlLCEwKSxlJiZlLmxlbmd0aCYmZS5jaGlsZHJlbihcIi5qc3RyZWUtaG92ZXJlZFwiKS5sZW5ndGg/KGUuY2hpbGRyZW4oXCIuanN0cmVlLWFuY2hvclwiKS5yZW1vdmVDbGFzcyhcImpzdHJlZS1ob3ZlcmVkXCIpLHZvaWQgdGhpcy50cmlnZ2VyKFwiZGVob3Zlcl9ub2RlXCIse25vZGU6dGhpcy5nZXRfbm9kZShlKX0pKTohMX0sc2VsZWN0X25vZGU6ZnVuY3Rpb24odCxpLHIscyl7dmFyIG4sYSxvO2lmKGUuaXNBcnJheSh0KSl7Zm9yKHQ9dC5zbGljZSgpLGE9MCxvPXQubGVuZ3RoO28+YTthKyspdGhpcy5zZWxlY3Rfbm9kZSh0W2FdLGkscixzKTtyZXR1cm4hMH1yZXR1cm4gdD10aGlzLmdldF9ub2RlKHQpLHQmJnQuaWQhPT1lLmpzdHJlZS5yb290PyhuPXRoaXMuZ2V0X25vZGUodCwhMCksdm9pZCh0LnN0YXRlLnNlbGVjdGVkfHwodC5zdGF0ZS5zZWxlY3RlZD0hMCx0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQucHVzaCh0LmlkKSxyfHwobj10aGlzLl9vcGVuX3RvKHQpKSxuJiZuLmxlbmd0aCYmbi5hdHRyKFwiYXJpYS1zZWxlY3RlZFwiLCEwKS5jaGlsZHJlbihcIi5qc3RyZWUtYW5jaG9yXCIpLmFkZENsYXNzKFwianN0cmVlLWNsaWNrZWRcIiksdGhpcy50cmlnZ2VyKFwic2VsZWN0X25vZGVcIix7bm9kZTp0LHNlbGVjdGVkOnRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZCxldmVudDpzfSksaXx8dGhpcy50cmlnZ2VyKFwiY2hhbmdlZFwiLHthY3Rpb246XCJzZWxlY3Rfbm9kZVwiLG5vZGU6dCxzZWxlY3RlZDp0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQsZXZlbnQ6c30pKSkpOiExfSxkZXNlbGVjdF9ub2RlOmZ1bmN0aW9uKHQsaSxyKXt2YXIgcyxuLGE7aWYoZS5pc0FycmF5KHQpKXtmb3IodD10LnNsaWNlKCkscz0wLG49dC5sZW5ndGg7bj5zO3MrKyl0aGlzLmRlc2VsZWN0X25vZGUodFtzXSxpLHIpO3JldHVybiEwfXJldHVybiB0PXRoaXMuZ2V0X25vZGUodCksdCYmdC5pZCE9PWUuanN0cmVlLnJvb3Q/KGE9dGhpcy5nZXRfbm9kZSh0LCEwKSx2b2lkKHQuc3RhdGUuc2VsZWN0ZWQmJih0LnN0YXRlLnNlbGVjdGVkPSExLHRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZD1lLnZha2F0YS5hcnJheV9yZW1vdmVfaXRlbSh0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQsdC5pZCksYS5sZW5ndGgmJmEuYXR0cihcImFyaWEtc2VsZWN0ZWRcIiwhMSkuY2hpbGRyZW4oXCIuanN0cmVlLWFuY2hvclwiKS5yZW1vdmVDbGFzcyhcImpzdHJlZS1jbGlja2VkXCIpLHRoaXMudHJpZ2dlcihcImRlc2VsZWN0X25vZGVcIix7bm9kZTp0LHNlbGVjdGVkOnRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZCxldmVudDpyfSksaXx8dGhpcy50cmlnZ2VyKFwiY2hhbmdlZFwiLHthY3Rpb246XCJkZXNlbGVjdF9ub2RlXCIsbm9kZTp0LHNlbGVjdGVkOnRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZCxldmVudDpyfSkpKSk6ITF9LHNlbGVjdF9hbGw6ZnVuY3Rpb24odCl7dmFyIGkscixzPXRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZC5jb25jYXQoW10pO2Zvcih0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQ9dGhpcy5fbW9kZWwuZGF0YVtlLmpzdHJlZS5yb290XS5jaGlsZHJlbl9kLmNvbmNhdCgpLGk9MCxyPXRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZC5sZW5ndGg7cj5pO2krKyl0aGlzLl9tb2RlbC5kYXRhW3RoaXMuX2RhdGEuY29yZS5zZWxlY3RlZFtpXV0mJih0aGlzLl9tb2RlbC5kYXRhW3RoaXMuX2RhdGEuY29yZS5zZWxlY3RlZFtpXV0uc3RhdGUuc2VsZWN0ZWQ9ITApO3RoaXMucmVkcmF3KCEwKSx0aGlzLnRyaWdnZXIoXCJzZWxlY3RfYWxsXCIse3NlbGVjdGVkOnRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZH0pLHR8fHRoaXMudHJpZ2dlcihcImNoYW5nZWRcIix7YWN0aW9uOlwic2VsZWN0X2FsbFwiLHNlbGVjdGVkOnRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZCxvbGRfc2VsZWN0aW9uOnN9KX0sZGVzZWxlY3RfYWxsOmZ1bmN0aW9uKGUpe3ZhciB0LGkscj10aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQuY29uY2F0KFtdKTtmb3IodD0wLGk9dGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLmxlbmd0aDtpPnQ7dCsrKXRoaXMuX21vZGVsLmRhdGFbdGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkW3RdXSYmKHRoaXMuX21vZGVsLmRhdGFbdGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkW3RdXS5zdGF0ZS5zZWxlY3RlZD0hMSk7dGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkPVtdLHRoaXMuZWxlbWVudC5maW5kKFwiLmpzdHJlZS1jbGlja2VkXCIpLnJlbW92ZUNsYXNzKFwianN0cmVlLWNsaWNrZWRcIikucGFyZW50KCkuYXR0cihcImFyaWEtc2VsZWN0ZWRcIiwhMSksdGhpcy50cmlnZ2VyKFwiZGVzZWxlY3RfYWxsXCIse3NlbGVjdGVkOnRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZCxub2RlOnJ9KSxlfHx0aGlzLnRyaWdnZXIoXCJjaGFuZ2VkXCIse2FjdGlvbjpcImRlc2VsZWN0X2FsbFwiLHNlbGVjdGVkOnRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZCxvbGRfc2VsZWN0aW9uOnJ9KX0saXNfc2VsZWN0ZWQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9dGhpcy5nZXRfbm9kZSh0KSx0JiZ0LmlkIT09ZS5qc3RyZWUucm9vdD90LnN0YXRlLnNlbGVjdGVkOiExfSxnZXRfc2VsZWN0ZWQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQ/ZS5tYXAodGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLGUucHJveHkoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZ2V0X25vZGUoZSl9LHRoaXMpKTp0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQuc2xpY2UoKX0sZ2V0X3RvcF9zZWxlY3RlZDpmdW5jdGlvbih0KXt2YXIgaSxyLHMsbixhPXRoaXMuZ2V0X3NlbGVjdGVkKCEwKSxvPXt9O2ZvcihpPTAscj1hLmxlbmd0aDtyPmk7aSsrKW9bYVtpXS5pZF09YVtpXTtmb3IoaT0wLHI9YS5sZW5ndGg7cj5pO2krKylmb3Iocz0wLG49YVtpXS5jaGlsZHJlbl9kLmxlbmd0aDtuPnM7cysrKW9bYVtpXS5jaGlsZHJlbl9kW3NdXSYmZGVsZXRlIG9bYVtpXS5jaGlsZHJlbl9kW3NdXTthPVtdO2ZvcihpIGluIG8pby5oYXNPd25Qcm9wZXJ0eShpKSYmYS5wdXNoKGkpO3JldHVybiB0P2UubWFwKGEsZS5wcm94eShmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5nZXRfbm9kZShlKX0sdGhpcykpOmF9LGdldF9ib3R0b21fc2VsZWN0ZWQ6ZnVuY3Rpb24odCl7dmFyIGkscixzPXRoaXMuZ2V0X3NlbGVjdGVkKCEwKSxuPVtdO2ZvcihpPTAscj1zLmxlbmd0aDtyPmk7aSsrKXNbaV0uY2hpbGRyZW4ubGVuZ3RofHxuLnB1c2goc1tpXS5pZCk7cmV0dXJuIHQ/ZS5tYXAobixlLnByb3h5KGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmdldF9ub2RlKGUpfSx0aGlzKSk6bn0sZ2V0X3N0YXRlOmZ1bmN0aW9uKCl7dmFyIHQsaT17Y29yZTp7b3BlbjpbXSxzY3JvbGw6e2xlZnQ6dGhpcy5lbGVtZW50LnNjcm9sbExlZnQoKSx0b3A6dGhpcy5lbGVtZW50LnNjcm9sbFRvcCgpfSxzZWxlY3RlZDpbXX19O2Zvcih0IGluIHRoaXMuX21vZGVsLmRhdGEpdGhpcy5fbW9kZWwuZGF0YS5oYXNPd25Qcm9wZXJ0eSh0KSYmdCE9PWUuanN0cmVlLnJvb3QmJih0aGlzLl9tb2RlbC5kYXRhW3RdLnN0YXRlLm9wZW5lZCYmaS5jb3JlLm9wZW4ucHVzaCh0KSx0aGlzLl9tb2RlbC5kYXRhW3RdLnN0YXRlLnNlbGVjdGVkJiZpLmNvcmUuc2VsZWN0ZWQucHVzaCh0KSk7cmV0dXJuIGl9LHNldF9zdGF0ZTpmdW5jdGlvbihpLHIpe2lmKGkpe2lmKGkuY29yZSl7dmFyIHMsbjtpZihpLmNvcmUub3BlbilyZXR1cm4gZS5pc0FycmF5KGkuY29yZS5vcGVuKSYmaS5jb3JlLm9wZW4ubGVuZ3RoP3RoaXMuX2xvYWRfbm9kZXMoaS5jb3JlLm9wZW4sZnVuY3Rpb24oZSl7dGhpcy5vcGVuX25vZGUoZSwhMSwwKSxkZWxldGUgaS5jb3JlLm9wZW4sdGhpcy5zZXRfc3RhdGUoaSxyKX0sITApOihkZWxldGUgaS5jb3JlLm9wZW4sdGhpcy5zZXRfc3RhdGUoaSxyKSksITE7aWYoaS5jb3JlLnNjcm9sbClyZXR1cm4gaS5jb3JlLnNjcm9sbCYmaS5jb3JlLnNjcm9sbC5sZWZ0IT09dCYmdGhpcy5lbGVtZW50LnNjcm9sbExlZnQoaS5jb3JlLnNjcm9sbC5sZWZ0KSxpLmNvcmUuc2Nyb2xsJiZpLmNvcmUuc2Nyb2xsLnRvcCE9PXQmJnRoaXMuZWxlbWVudC5zY3JvbGxUb3AoaS5jb3JlLnNjcm9sbC50b3ApLGRlbGV0ZSBpLmNvcmUuc2Nyb2xsLHRoaXMuc2V0X3N0YXRlKGksciksITE7aWYoaS5jb3JlLnNlbGVjdGVkKXJldHVybiBzPXRoaXMsdGhpcy5kZXNlbGVjdF9hbGwoKSxlLmVhY2goaS5jb3JlLnNlbGVjdGVkLGZ1bmN0aW9uKGUsdCl7cy5zZWxlY3Rfbm9kZSh0LCExLCEwKX0pLGRlbGV0ZSBpLmNvcmUuc2VsZWN0ZWQsdGhpcy5zZXRfc3RhdGUoaSxyKSwhMTtmb3IobiBpbiBpKWkuaGFzT3duUHJvcGVydHkobikmJlwiY29yZVwiIT09biYmLTE9PT1lLmluQXJyYXkobix0aGlzLnNldHRpbmdzLnBsdWdpbnMpJiZkZWxldGUgaVtuXTtpZihlLmlzRW1wdHlPYmplY3QoaS5jb3JlKSlyZXR1cm4gZGVsZXRlIGkuY29yZSx0aGlzLnNldF9zdGF0ZShpLHIpLCExfXJldHVybiBlLmlzRW1wdHlPYmplY3QoaSk/KGk9bnVsbCxyJiZyLmNhbGwodGhpcyksdGhpcy50cmlnZ2VyKFwic2V0X3N0YXRlXCIpLCExKTohMH1yZXR1cm4hMX0scmVmcmVzaDpmdW5jdGlvbih0LGkpe3RoaXMuX2RhdGEuY29yZS5zdGF0ZT1pPT09ITA/e306dGhpcy5nZXRfc3RhdGUoKSxpJiZlLmlzRnVuY3Rpb24oaSkmJih0aGlzLl9kYXRhLmNvcmUuc3RhdGU9aS5jYWxsKHRoaXMsdGhpcy5fZGF0YS5jb3JlLnN0YXRlKSksdGhpcy5fY250PTAsdGhpcy5fbW9kZWwuZGF0YT17fSx0aGlzLl9tb2RlbC5kYXRhW2UuanN0cmVlLnJvb3RdPXtpZDplLmpzdHJlZS5yb290LHBhcmVudDpudWxsLHBhcmVudHM6W10sY2hpbGRyZW46W10sY2hpbGRyZW5fZDpbXSxzdGF0ZTp7bG9hZGVkOiExfX0sdGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkPVtdLHRoaXMuX2RhdGEuY29yZS5sYXN0X2NsaWNrZWQ9bnVsbCx0aGlzLl9kYXRhLmNvcmUuZm9jdXNlZD1udWxsO3ZhciByPXRoaXMuZ2V0X2NvbnRhaW5lcl91bCgpWzBdLmNsYXNzTmFtZTt0fHwodGhpcy5lbGVtZW50Lmh0bWwoXCI8dWwgY2xhc3M9J1wiK3IrXCInIHJvbGU9J2dyb3VwJz48bGkgY2xhc3M9J2pzdHJlZS1pbml0aWFsLW5vZGUganN0cmVlLWxvYWRpbmcganN0cmVlLWxlYWYganN0cmVlLWxhc3QnIHJvbGU9J3RyZWVpdGVtJyBpZD0nalwiK3RoaXMuX2lkK1wiX2xvYWRpbmcnPjxpIGNsYXNzPSdqc3RyZWUtaWNvbiBqc3RyZWUtb2NsJz48L2k+PGEgY2xhc3M9J2pzdHJlZS1hbmNob3InIGhyZWY9JyMnPjxpIGNsYXNzPSdqc3RyZWUtaWNvbiBqc3RyZWUtdGhlbWVpY29uLWhpZGRlbic+PC9pPlwiK3RoaXMuZ2V0X3N0cmluZyhcIkxvYWRpbmcgLi4uXCIpK1wiPC9hPjwvbGk+PC91bD5cIiksdGhpcy5lbGVtZW50LmF0dHIoXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIixcImpcIit0aGlzLl9pZCtcIl9sb2FkaW5nXCIpKSx0aGlzLmxvYWRfbm9kZShlLmpzdHJlZS5yb290LGZ1bmN0aW9uKHQsaSl7aSYmKHRoaXMuZ2V0X2NvbnRhaW5lcl91bCgpWzBdLmNsYXNzTmFtZT1yLHRoaXMuX2ZpcnN0Q2hpbGQodGhpcy5nZXRfY29udGFpbmVyX3VsKClbMF0pJiZ0aGlzLmVsZW1lbnQuYXR0cihcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiLHRoaXMuX2ZpcnN0Q2hpbGQodGhpcy5nZXRfY29udGFpbmVyX3VsKClbMF0pLmlkKSx0aGlzLnNldF9zdGF0ZShlLmV4dGVuZCghMCx7fSx0aGlzLl9kYXRhLmNvcmUuc3RhdGUpLGZ1bmN0aW9uKCl7dGhpcy50cmlnZ2VyKFwicmVmcmVzaFwiKX0pKSx0aGlzLl9kYXRhLmNvcmUuc3RhdGU9bnVsbH0pfSxyZWZyZXNoX25vZGU6ZnVuY3Rpb24odCl7aWYodD10aGlzLmdldF9ub2RlKHQpLCF0fHx0LmlkPT09ZS5qc3RyZWUucm9vdClyZXR1cm4hMTt2YXIgaT1bXSxyPVtdO3RoaXMuX2RhdGEuY29yZS5zZWxlY3RlZC5jb25jYXQoW10pO3IucHVzaCh0LmlkKSx0LnN0YXRlLm9wZW5lZD09PSEwJiZpLnB1c2godC5pZCksdGhpcy5nZXRfbm9kZSh0LCEwKS5maW5kKFwiLmpzdHJlZS1vcGVuXCIpLmVhY2goZnVuY3Rpb24oKXtpLnB1c2godGhpcy5pZCl9KSx0aGlzLl9sb2FkX25vZGVzKHIsZS5wcm94eShmdW5jdGlvbihlKXt0aGlzLm9wZW5fbm9kZShpLCExLDApLHRoaXMuc2VsZWN0X25vZGUodGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkKSx0aGlzLnRyaWdnZXIoXCJyZWZyZXNoX25vZGVcIix7bm9kZTp0LG5vZGVzOmV9KX0sdGhpcykpfSxzZXRfaWQ6ZnVuY3Rpb24odCxpKXtpZih0PXRoaXMuZ2V0X25vZGUodCksIXR8fHQuaWQ9PT1lLmpzdHJlZS5yb290KXJldHVybiExO3ZhciByLHMsbj10aGlzLl9tb2RlbC5kYXRhO2ZvcihpPWkudG9TdHJpbmcoKSxuW3QucGFyZW50XS5jaGlsZHJlbltlLmluQXJyYXkodC5pZCxuW3QucGFyZW50XS5jaGlsZHJlbildPWkscj0wLHM9dC5wYXJlbnRzLmxlbmd0aDtzPnI7cisrKW5bdC5wYXJlbnRzW3JdXS5jaGlsZHJlbl9kW2UuaW5BcnJheSh0LmlkLG5bdC5wYXJlbnRzW3JdXS5jaGlsZHJlbl9kKV09aTtmb3Iocj0wLHM9dC5jaGlsZHJlbi5sZW5ndGg7cz5yO3IrKyluW3QuY2hpbGRyZW5bcl1dLnBhcmVudD1pO2ZvcihyPTAscz10LmNoaWxkcmVuX2QubGVuZ3RoO3M+cjtyKyspblt0LmNoaWxkcmVuX2Rbcl1dLnBhcmVudHNbZS5pbkFycmF5KHQuaWQsblt0LmNoaWxkcmVuX2Rbcl1dLnBhcmVudHMpXT1pO3JldHVybiByPWUuaW5BcnJheSh0LmlkLHRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZCksLTEhPT1yJiYodGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkW3JdPWkpLHI9dGhpcy5nZXRfbm9kZSh0LmlkLCEwKSxyJiYoci5hdHRyKFwiaWRcIixpKS5jaGlsZHJlbihcIi5qc3RyZWUtYW5jaG9yXCIpLmF0dHIoXCJpZFwiLGkrXCJfYW5jaG9yXCIpLmVuZCgpLmF0dHIoXCJhcmlhLWxhYmVsbGVkYnlcIixpK1wiX2FuY2hvclwiKSx0aGlzLmVsZW1lbnQuYXR0cihcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiKT09PXQuaWQmJnRoaXMuZWxlbWVudC5hdHRyKFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCIsaSkpLGRlbGV0ZSBuW3QuaWRdLHQuaWQ9aSx0LmxpX2F0dHIuaWQ9aSxuW2ldPXQsITB9LGdldF90ZXh0OmZ1bmN0aW9uKHQpe3JldHVybiB0PXRoaXMuZ2V0X25vZGUodCksdCYmdC5pZCE9PWUuanN0cmVlLnJvb3Q/dC50ZXh0OiExfSxzZXRfdGV4dDpmdW5jdGlvbih0LGkpe3ZhciByLHM7aWYoZS5pc0FycmF5KHQpKXtmb3IodD10LnNsaWNlKCkscj0wLHM9dC5sZW5ndGg7cz5yO3IrKyl0aGlzLnNldF90ZXh0KHRbcl0saSk7cmV0dXJuITB9cmV0dXJuIHQ9dGhpcy5nZXRfbm9kZSh0KSx0JiZ0LmlkIT09ZS5qc3RyZWUucm9vdD8odC50ZXh0PWksdGhpcy5nZXRfbm9kZSh0LCEwKS5sZW5ndGgmJnRoaXMucmVkcmF3X25vZGUodC5pZCksdGhpcy50cmlnZ2VyKFwic2V0X3RleHRcIix7b2JqOnQsdGV4dDppfSksITApOiExfSxnZXRfanNvbjpmdW5jdGlvbih0LGkscil7aWYodD10aGlzLmdldF9ub2RlKHR8fGUuanN0cmVlLnJvb3QpLCF0KXJldHVybiExO2kmJmkuZmxhdCYmIXImJihyPVtdKTt2YXIgcyxuLGE9e2lkOnQuaWQsdGV4dDp0LnRleHQsaWNvbjp0aGlzLmdldF9pY29uKHQpLGxpX2F0dHI6ZS5leHRlbmQoITAse30sdC5saV9hdHRyKSxhX2F0dHI6ZS5leHRlbmQoITAse30sdC5hX2F0dHIpLHN0YXRlOnt9LGRhdGE6aSYmaS5ub19kYXRhPyExOmUuZXh0ZW5kKCEwLHt9LHQuZGF0YSl9O2lmKGkmJmkuZmxhdD9hLnBhcmVudD10LnBhcmVudDphLmNoaWxkcmVuPVtdLCFpfHwhaS5ub19zdGF0ZSlmb3IocyBpbiB0LnN0YXRlKXQuc3RhdGUuaGFzT3duUHJvcGVydHkocykmJihhLnN0YXRlW3NdPXQuc3RhdGVbc10pO2lmKGkmJmkubm9faWQmJihkZWxldGUgYS5pZCxhLmxpX2F0dHImJmEubGlfYXR0ci5pZCYmZGVsZXRlIGEubGlfYXR0ci5pZCxhLmFfYXR0ciYmYS5hX2F0dHIuaWQmJmRlbGV0ZSBhLmFfYXR0ci5pZCksaSYmaS5mbGF0JiZ0LmlkIT09ZS5qc3RyZWUucm9vdCYmci5wdXNoKGEpLCFpfHwhaS5ub19jaGlsZHJlbilmb3Iocz0wLG49dC5jaGlsZHJlbi5sZW5ndGg7bj5zO3MrKylpJiZpLmZsYXQ/dGhpcy5nZXRfanNvbih0LmNoaWxkcmVuW3NdLGkscik6YS5jaGlsZHJlbi5wdXNoKHRoaXMuZ2V0X2pzb24odC5jaGlsZHJlbltzXSxpKSk7cmV0dXJuIGkmJmkuZmxhdD9yOnQuaWQ9PT1lLmpzdHJlZS5yb290P2EuY2hpbGRyZW46YX0sY3JlYXRlX25vZGU6ZnVuY3Rpb24oaSxyLHMsbixhKXtpZihudWxsPT09aSYmKGk9ZS5qc3RyZWUucm9vdCksaT10aGlzLmdldF9ub2RlKGkpLCFpKXJldHVybiExO2lmKHM9cz09PXQ/XCJsYXN0XCI6cywhcy50b1N0cmluZygpLm1hdGNoKC9eKGJlZm9yZXxhZnRlcikkLykmJiFhJiYhdGhpcy5pc19sb2FkZWQoaSkpcmV0dXJuIHRoaXMubG9hZF9ub2RlKGksZnVuY3Rpb24oKXt0aGlzLmNyZWF0ZV9ub2RlKGkscixzLG4sITApfSk7cnx8KHI9e3RleHQ6dGhpcy5nZXRfc3RyaW5nKFwiTmV3IG5vZGVcIil9KSxcInN0cmluZ1wiPT10eXBlb2YgciYmKHI9e3RleHQ6cn0pLHIudGV4dD09PXQmJihyLnRleHQ9dGhpcy5nZXRfc3RyaW5nKFwiTmV3IG5vZGVcIikpO3ZhciBvLGQsYyxsO3N3aXRjaChpLmlkPT09ZS5qc3RyZWUucm9vdCYmKFwiYmVmb3JlXCI9PT1zJiYocz1cImZpcnN0XCIpLFwiYWZ0ZXJcIj09PXMmJihzPVwibGFzdFwiKSkscyl7Y2FzZVwiYmVmb3JlXCI6bz10aGlzLmdldF9ub2RlKGkucGFyZW50KSxzPWUuaW5BcnJheShpLmlkLG8uY2hpbGRyZW4pLGk9bzticmVhaztjYXNlXCJhZnRlclwiOm89dGhpcy5nZXRfbm9kZShpLnBhcmVudCkscz1lLmluQXJyYXkoaS5pZCxvLmNoaWxkcmVuKSsxLGk9bzticmVhaztjYXNlXCJpbnNpZGVcIjpjYXNlXCJmaXJzdFwiOnM9MDticmVhaztjYXNlXCJsYXN0XCI6cz1pLmNoaWxkcmVuLmxlbmd0aDticmVhaztkZWZhdWx0OnN8fChzPTApfWlmKHM+aS5jaGlsZHJlbi5sZW5ndGgmJihzPWkuY2hpbGRyZW4ubGVuZ3RoKSxyLmlkfHwoci5pZD0hMCksIXRoaXMuY2hlY2soXCJjcmVhdGVfbm9kZVwiLHIsaSxzKSlyZXR1cm4gdGhpcy5zZXR0aW5ncy5jb3JlLmVycm9yLmNhbGwodGhpcyx0aGlzLl9kYXRhLmNvcmUubGFzdF9lcnJvciksITE7aWYoci5pZD09PSEwJiZkZWxldGUgci5pZCxyPXRoaXMuX3BhcnNlX21vZGVsX2Zyb21fanNvbihyLGkuaWQsaS5wYXJlbnRzLmNvbmNhdCgpKSwhcilyZXR1cm4hMTtmb3Iobz10aGlzLmdldF9ub2RlKHIpLGQ9W10sZC5wdXNoKHIpLGQ9ZC5jb25jYXQoby5jaGlsZHJlbl9kKSx0aGlzLnRyaWdnZXIoXCJtb2RlbFwiLHtub2RlczpkLHBhcmVudDppLmlkfSksaS5jaGlsZHJlbl9kPWkuY2hpbGRyZW5fZC5jb25jYXQoZCksYz0wLGw9aS5wYXJlbnRzLmxlbmd0aDtsPmM7YysrKXRoaXMuX21vZGVsLmRhdGFbaS5wYXJlbnRzW2NdXS5jaGlsZHJlbl9kPXRoaXMuX21vZGVsLmRhdGFbaS5wYXJlbnRzW2NdXS5jaGlsZHJlbl9kLmNvbmNhdChkKTtmb3Iocj1vLG89W10sYz0wLGw9aS5jaGlsZHJlbi5sZW5ndGg7bD5jO2MrKylvW2M+PXM/YysxOmNdPWkuY2hpbGRyZW5bY107cmV0dXJuIG9bc109ci5pZCxpLmNoaWxkcmVuPW8sdGhpcy5yZWRyYXdfbm9kZShpLCEwKSxuJiZuLmNhbGwodGhpcyx0aGlzLmdldF9ub2RlKHIpKSx0aGlzLnRyaWdnZXIoXCJjcmVhdGVfbm9kZVwiLHtub2RlOnRoaXMuZ2V0X25vZGUocikscGFyZW50OmkuaWQscG9zaXRpb246c30pLHIuaWR9LHJlbmFtZV9ub2RlOmZ1bmN0aW9uKHQsaSl7dmFyIHIscyxuO2lmKGUuaXNBcnJheSh0KSl7Zm9yKHQ9dC5zbGljZSgpLHI9MCxzPXQubGVuZ3RoO3M+cjtyKyspdGhpcy5yZW5hbWVfbm9kZSh0W3JdLGkpO3JldHVybiEwfXJldHVybiB0PXRoaXMuZ2V0X25vZGUodCksdCYmdC5pZCE9PWUuanN0cmVlLnJvb3Q/KG49dC50ZXh0LHRoaXMuY2hlY2soXCJyZW5hbWVfbm9kZVwiLHQsdGhpcy5nZXRfcGFyZW50KHQpLGkpPyh0aGlzLnNldF90ZXh0KHQsaSksdGhpcy50cmlnZ2VyKFwicmVuYW1lX25vZGVcIix7bm9kZTp0LHRleHQ6aSxvbGQ6bn0pLCEwKToodGhpcy5zZXR0aW5ncy5jb3JlLmVycm9yLmNhbGwodGhpcyx0aGlzLl9kYXRhLmNvcmUubGFzdF9lcnJvciksITEpKTohMX0sZGVsZXRlX25vZGU6ZnVuY3Rpb24odCl7dmFyIGkscixzLG4sYSxvLGQsYyxsLGgsXyx1O2lmKGUuaXNBcnJheSh0KSl7Zm9yKHQ9dC5zbGljZSgpLGk9MCxyPXQubGVuZ3RoO3I+aTtpKyspdGhpcy5kZWxldGVfbm9kZSh0W2ldKTtyZXR1cm4hMH1pZih0PXRoaXMuZ2V0X25vZGUodCksIXR8fHQuaWQ9PT1lLmpzdHJlZS5yb290KXJldHVybiExO2lmKHM9dGhpcy5nZXRfbm9kZSh0LnBhcmVudCksbj1lLmluQXJyYXkodC5pZCxzLmNoaWxkcmVuKSxoPSExLCF0aGlzLmNoZWNrKFwiZGVsZXRlX25vZGVcIix0LHMsbikpcmV0dXJuIHRoaXMuc2V0dGluZ3MuY29yZS5lcnJvci5jYWxsKHRoaXMsdGhpcy5fZGF0YS5jb3JlLmxhc3RfZXJyb3IpLCExO2ZvcigtMSE9PW4mJihzLmNoaWxkcmVuPWUudmFrYXRhLmFycmF5X3JlbW92ZShzLmNoaWxkcmVuLG4pKSxhPXQuY2hpbGRyZW5fZC5jb25jYXQoW10pLGEucHVzaCh0LmlkKSxjPTAsbD1hLmxlbmd0aDtsPmM7YysrKXtmb3Iobz0wLGQ9dC5wYXJlbnRzLmxlbmd0aDtkPm87bysrKW49ZS5pbkFycmF5KGFbY10sdGhpcy5fbW9kZWwuZGF0YVt0LnBhcmVudHNbb11dLmNoaWxkcmVuX2QpLC0xIT09biYmKHRoaXMuX21vZGVsLmRhdGFbdC5wYXJlbnRzW29dXS5jaGlsZHJlbl9kPWUudmFrYXRhLmFycmF5X3JlbW92ZSh0aGlzLl9tb2RlbC5kYXRhW3QucGFyZW50c1tvXV0uY2hpbGRyZW5fZCxuKSk7dGhpcy5fbW9kZWwuZGF0YVthW2NdXS5zdGF0ZS5zZWxlY3RlZCYmKGg9ITAsbj1lLmluQXJyYXkoYVtjXSx0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQpLC0xIT09biYmKHRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZD1lLnZha2F0YS5hcnJheV9yZW1vdmUodGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLG4pKSl9Zm9yKHRoaXMudHJpZ2dlcihcImRlbGV0ZV9ub2RlXCIse25vZGU6dCxwYXJlbnQ6cy5pZH0pLGgmJnRoaXMudHJpZ2dlcihcImNoYW5nZWRcIix7YWN0aW9uOlwiZGVsZXRlX25vZGVcIixub2RlOnQsc2VsZWN0ZWQ6dGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLHBhcmVudDpzLmlkfSksYz0wLGw9YS5sZW5ndGg7bD5jO2MrKylkZWxldGUgdGhpcy5fbW9kZWwuZGF0YVthW2NdXTtyZXR1cm4tMSE9PWUuaW5BcnJheSh0aGlzLl9kYXRhLmNvcmUuZm9jdXNlZCxhKSYmKHRoaXMuX2RhdGEuY29yZS5mb2N1c2VkPW51bGwsXz10aGlzLmVsZW1lbnRbMF0uc2Nyb2xsVG9wLHU9dGhpcy5lbGVtZW50WzBdLnNjcm9sbExlZnQscy5pZD09PWUuanN0cmVlLnJvb3Q/dGhpcy5nZXRfbm9kZSh0aGlzLl9tb2RlbC5kYXRhW2UuanN0cmVlLnJvb3RdLmNoaWxkcmVuWzBdLCEwKS5jaGlsZHJlbihcIi5qc3RyZWUtYW5jaG9yXCIpLmZvY3VzKCk6dGhpcy5nZXRfbm9kZShzLCEwKS5jaGlsZHJlbihcIi5qc3RyZWUtYW5jaG9yXCIpLmZvY3VzKCksdGhpcy5lbGVtZW50WzBdLnNjcm9sbFRvcD1fLHRoaXMuZWxlbWVudFswXS5zY3JvbGxMZWZ0PXUpLHRoaXMucmVkcmF3X25vZGUocywhMCksITB9LGNoZWNrOmZ1bmN0aW9uKHQsaSxyLHMsbil7aT1pJiZpLmlkP2k6dGhpcy5nZXRfbm9kZShpKSxyPXImJnIuaWQ/cjp0aGlzLmdldF9ub2RlKHIpO3ZhciBhPXQubWF0Y2goL15tb3ZlX25vZGV8Y29weV9ub2RlfGNyZWF0ZV9ub2RlJC9pKT9yOmksbz10aGlzLnNldHRpbmdzLmNvcmUuY2hlY2tfY2FsbGJhY2s7cmV0dXJuXCJtb3ZlX25vZGVcIiE9PXQmJlwiY29weV9ub2RlXCIhPT10fHxuJiZuLmlzX211bHRpfHwoaS5pZCE9PXIuaWR8fFwiY29weV9ub2RlXCI9PT10KSYmZS5pbkFycmF5KGkuaWQsci5jaGlsZHJlbikhPT1zJiYtMT09PWUuaW5BcnJheShyLmlkLGkuY2hpbGRyZW5fZCk/KGEmJmEuZGF0YSYmKGE9YS5kYXRhKSxhJiZhLmZ1bmN0aW9ucyYmKGEuZnVuY3Rpb25zW3RdPT09ITF8fGEuZnVuY3Rpb25zW3RdPT09ITApPyhhLmZ1bmN0aW9uc1t0XT09PSExJiYodGhpcy5fZGF0YS5jb3JlLmxhc3RfZXJyb3I9e2Vycm9yOlwiY2hlY2tcIixwbHVnaW46XCJjb3JlXCIsaWQ6XCJjb3JlXzAyXCIscmVhc29uOlwiTm9kZSBkYXRhIHByZXZlbnRzIGZ1bmN0aW9uOiBcIit0LGRhdGE6SlNPTi5zdHJpbmdpZnkoe2Noazp0LHBvczpzLG9iajppJiZpLmlkP2kuaWQ6ITEscGFyOnImJnIuaWQ/ci5pZDohMX0pfSksYS5mdW5jdGlvbnNbdF0pOm89PT0hMXx8ZS5pc0Z1bmN0aW9uKG8pJiZvLmNhbGwodGhpcyx0LGkscixzLG4pPT09ITF8fG8mJm9bdF09PT0hMT8odGhpcy5fZGF0YS5jb3JlLmxhc3RfZXJyb3I9e2Vycm9yOlwiY2hlY2tcIixwbHVnaW46XCJjb3JlXCIsaWQ6XCJjb3JlXzAzXCIscmVhc29uOlwiVXNlciBjb25maWcgZm9yIGNvcmUuY2hlY2tfY2FsbGJhY2sgcHJldmVudHMgZnVuY3Rpb246IFwiK3QsZGF0YTpKU09OLnN0cmluZ2lmeSh7Y2hrOnQscG9zOnMsb2JqOmkmJmkuaWQ/aS5pZDohMSxwYXI6ciYmci5pZD9yLmlkOiExfSl9LCExKTohMCk6KHRoaXMuX2RhdGEuY29yZS5sYXN0X2Vycm9yPXtlcnJvcjpcImNoZWNrXCIscGx1Z2luOlwiY29yZVwiLGlkOlwiY29yZV8wMVwiLHJlYXNvbjpcIk1vdmluZyBwYXJlbnQgaW5zaWRlIGNoaWxkXCIsZGF0YTpKU09OLnN0cmluZ2lmeSh7Y2hrOnQscG9zOnMsb2JqOmkmJmkuaWQ/aS5pZDohMSxwYXI6ciYmci5pZD9yLmlkOiExfSl9LCExKX0sbGFzdF9lcnJvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kYXRhLmNvcmUubGFzdF9lcnJvcn0sbW92ZV9ub2RlOmZ1bmN0aW9uKGkscixzLG4sYSxvLGQpe3ZhciBjLGwsaCxfLHUsZyxmLHAsbSx2LGoseSxrLHg7aWYocj10aGlzLmdldF9ub2RlKHIpLHM9cz09PXQ/MDpzLCFyKXJldHVybiExO2lmKCFzLnRvU3RyaW5nKCkubWF0Y2goL14oYmVmb3JlfGFmdGVyKSQvKSYmIWEmJiF0aGlzLmlzX2xvYWRlZChyKSlyZXR1cm4gdGhpcy5sb2FkX25vZGUocixmdW5jdGlvbigpe3RoaXMubW92ZV9ub2RlKGkscixzLG4sITAsITEsZCl9KTtpZihlLmlzQXJyYXkoaSkpe2lmKDEhPT1pLmxlbmd0aCl7Zm9yKGM9MCxsPWkubGVuZ3RoO2w+YztjKyspKG09dGhpcy5tb3ZlX25vZGUoaVtjXSxyLHMsbixhLCExLGQpKSYmKHI9bSxzPVwiYWZ0ZXJcIik7cmV0dXJuIHRoaXMucmVkcmF3KCksITB9aT1pWzBdfWlmKGk9aSYmaS5pZD9pOnRoaXMuZ2V0X25vZGUoaSksIWl8fGkuaWQ9PT1lLmpzdHJlZS5yb290KXJldHVybiExO2lmKGg9KGkucGFyZW50fHxlLmpzdHJlZS5yb290KS50b1N0cmluZygpLHU9cy50b1N0cmluZygpLm1hdGNoKC9eKGJlZm9yZXxhZnRlcikkLykmJnIuaWQhPT1lLmpzdHJlZS5yb290P3RoaXMuZ2V0X25vZGUoci5wYXJlbnQpOnIsZz1kP2Q6dGhpcy5fbW9kZWwuZGF0YVtpLmlkXT90aGlzOmUuanN0cmVlLnJlZmVyZW5jZShpLmlkKSxmPSFnfHwhZy5faWR8fHRoaXMuX2lkIT09Zy5faWQsXz1nJiZnLl9pZCYmaCYmZy5fbW9kZWwuZGF0YVtoXSYmZy5fbW9kZWwuZGF0YVtoXS5jaGlsZHJlbj9lLmluQXJyYXkoaS5pZCxnLl9tb2RlbC5kYXRhW2hdLmNoaWxkcmVuKTotMSxnJiZnLl9pZCYmKGk9Zy5fbW9kZWwuZGF0YVtpLmlkXSksZilyZXR1cm4obT10aGlzLmNvcHlfbm9kZShpLHIscyxuLGEsITEsZCkpPyhnJiZnLmRlbGV0ZV9ub2RlKGkpLG0pOiExO3N3aXRjaChyLmlkPT09ZS5qc3RyZWUucm9vdCYmKFwiYmVmb3JlXCI9PT1zJiYocz1cImZpcnN0XCIpLFwiYWZ0ZXJcIj09PXMmJihzPVwibGFzdFwiKSkscyl7Y2FzZVwiYmVmb3JlXCI6cz1lLmluQXJyYXkoci5pZCx1LmNoaWxkcmVuKTticmVhaztjYXNlXCJhZnRlclwiOnM9ZS5pbkFycmF5KHIuaWQsdS5jaGlsZHJlbikrMTticmVhaztjYXNlXCJpbnNpZGVcIjpjYXNlXCJmaXJzdFwiOnM9MDticmVhaztjYXNlXCJsYXN0XCI6cz11LmNoaWxkcmVuLmxlbmd0aDticmVhaztkZWZhdWx0OnN8fChzPTApfWlmKHM+dS5jaGlsZHJlbi5sZW5ndGgmJihzPXUuY2hpbGRyZW4ubGVuZ3RoKSwhdGhpcy5jaGVjayhcIm1vdmVfbm9kZVwiLGksdSxzLHtjb3JlOiEwLG9yaWdpbjpkLGlzX211bHRpOmcmJmcuX2lkJiZnLl9pZCE9PXRoaXMuX2lkLGlzX2ZvcmVpZ246IWd8fCFnLl9pZH0pKXJldHVybiB0aGlzLnNldHRpbmdzLmNvcmUuZXJyb3IuY2FsbCh0aGlzLHRoaXMuX2RhdGEuY29yZS5sYXN0X2Vycm9yKSwhMTtpZihpLnBhcmVudD09PXUuaWQpe2ZvcihwPXUuY2hpbGRyZW4uY29uY2F0KCksbT1lLmluQXJyYXkoaS5pZCxwKSwtMSE9PW0mJihwPWUudmFrYXRhLmFycmF5X3JlbW92ZShwLG0pLHM+bSYmcy0tKSxtPVtdLHY9MCxqPXAubGVuZ3RoO2o+djt2KyspbVt2Pj1zP3YrMTp2XT1wW3ZdO21bc109aS5pZCx1LmNoaWxkcmVuPW0sdGhpcy5fbm9kZV9jaGFuZ2VkKHUuaWQpLHRoaXMucmVkcmF3KHUuaWQ9PT1lLmpzdHJlZS5yb290KX1lbHNle2ZvcihtPWkuY2hpbGRyZW5fZC5jb25jYXQoKSxtLnB1c2goaS5pZCksdj0wLGo9aS5wYXJlbnRzLmxlbmd0aDtqPnY7disrKXtmb3IocD1bXSx4PWcuX21vZGVsLmRhdGFbaS5wYXJlbnRzW3ZdXS5jaGlsZHJlbl9kLHk9MCxrPXgubGVuZ3RoO2s+eTt5KyspLTE9PT1lLmluQXJyYXkoeFt5XSxtKSYmcC5wdXNoKHhbeV0pO2cuX21vZGVsLmRhdGFbaS5wYXJlbnRzW3ZdXS5jaGlsZHJlbl9kPXB9Zm9yKGcuX21vZGVsLmRhdGFbaF0uY2hpbGRyZW49ZS52YWthdGEuYXJyYXlfcmVtb3ZlX2l0ZW0oZy5fbW9kZWwuZGF0YVtoXS5jaGlsZHJlbixpLmlkKSx2PTAsaj11LnBhcmVudHMubGVuZ3RoO2o+djt2KyspdGhpcy5fbW9kZWwuZGF0YVt1LnBhcmVudHNbdl1dLmNoaWxkcmVuX2Q9dGhpcy5fbW9kZWwuZGF0YVt1LnBhcmVudHNbdl1dLmNoaWxkcmVuX2QuY29uY2F0KG0pO2ZvcihwPVtdLHY9MCxqPXUuY2hpbGRyZW4ubGVuZ3RoO2o+djt2KyspcFt2Pj1zP3YrMTp2XT11LmNoaWxkcmVuW3ZdO2ZvcihwW3NdPWkuaWQsdS5jaGlsZHJlbj1wLHUuY2hpbGRyZW5fZC5wdXNoKGkuaWQpLHUuY2hpbGRyZW5fZD11LmNoaWxkcmVuX2QuY29uY2F0KGkuY2hpbGRyZW5fZCksaS5wYXJlbnQ9dS5pZCxtPXUucGFyZW50cy5jb25jYXQoKSxtLnVuc2hpZnQodS5pZCkseD1pLnBhcmVudHMubGVuZ3RoLGkucGFyZW50cz1tLG09bS5jb25jYXQoKSx2PTAsaj1pLmNoaWxkcmVuX2QubGVuZ3RoO2o+djt2KyspdGhpcy5fbW9kZWwuZGF0YVtpLmNoaWxkcmVuX2Rbdl1dLnBhcmVudHM9dGhpcy5fbW9kZWwuZGF0YVtpLmNoaWxkcmVuX2Rbdl1dLnBhcmVudHMuc2xpY2UoMCwtMSp4KSxBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0aGlzLl9tb2RlbC5kYXRhW2kuY2hpbGRyZW5fZFt2XV0ucGFyZW50cyxtKTsoaD09PWUuanN0cmVlLnJvb3R8fHUuaWQ9PT1lLmpzdHJlZS5yb290KSYmKHRoaXMuX21vZGVsLmZvcmNlX2Z1bGxfcmVkcmF3PSEwKSx0aGlzLl9tb2RlbC5mb3JjZV9mdWxsX3JlZHJhd3x8KHRoaXMuX25vZGVfY2hhbmdlZChoKSx0aGlzLl9ub2RlX2NoYW5nZWQodS5pZCkpLG98fHRoaXMucmVkcmF3KCl9cmV0dXJuIG4mJm4uY2FsbCh0aGlzLGksdSxzKSx0aGlzLnRyaWdnZXIoXCJtb3ZlX25vZGVcIix7bm9kZTppLHBhcmVudDp1LmlkLHBvc2l0aW9uOnMsb2xkX3BhcmVudDpoLG9sZF9wb3NpdGlvbjpfLGlzX211bHRpOmcmJmcuX2lkJiZnLl9pZCE9PXRoaXMuX2lkLGlzX2ZvcmVpZ246IWd8fCFnLl9pZCxvbGRfaW5zdGFuY2U6ZyxuZXdfaW5zdGFuY2U6dGhpc30pLGkuaWR9LGNvcHlfbm9kZTpmdW5jdGlvbihpLHIscyxuLGEsbyxkKXt2YXIgYyxsLGgsXyx1LGcsZixwLG0sdixqO2lmKHI9dGhpcy5nZXRfbm9kZShyKSxzPXM9PT10PzA6cywhcilyZXR1cm4hMTtpZighcy50b1N0cmluZygpLm1hdGNoKC9eKGJlZm9yZXxhZnRlcikkLykmJiFhJiYhdGhpcy5pc19sb2FkZWQocikpcmV0dXJuIHRoaXMubG9hZF9ub2RlKHIsZnVuY3Rpb24oKXt0aGlzLmNvcHlfbm9kZShpLHIscyxuLCEwLCExLGQpfSk7aWYoZS5pc0FycmF5KGkpKXtpZigxIT09aS5sZW5ndGgpe2ZvcihjPTAsbD1pLmxlbmd0aDtsPmM7YysrKShfPXRoaXMuY29weV9ub2RlKGlbY10scixzLG4sYSwhMCxkKSkmJihyPV8scz1cImFmdGVyXCIpO3JldHVybiB0aGlzLnJlZHJhdygpLCEwfWk9aVswXX1pZihpPWkmJmkuaWQ/aTp0aGlzLmdldF9ub2RlKGkpLCFpfHxpLmlkPT09ZS5qc3RyZWUucm9vdClyZXR1cm4hMTtzd2l0Y2gocD0oaS5wYXJlbnR8fGUuanN0cmVlLnJvb3QpLnRvU3RyaW5nKCksbT1zLnRvU3RyaW5nKCkubWF0Y2goL14oYmVmb3JlfGFmdGVyKSQvKSYmci5pZCE9PWUuanN0cmVlLnJvb3Q/dGhpcy5nZXRfbm9kZShyLnBhcmVudCk6cix2PWQ/ZDp0aGlzLl9tb2RlbC5kYXRhW2kuaWRdP3RoaXM6ZS5qc3RyZWUucmVmZXJlbmNlKGkuaWQpLGo9IXZ8fCF2Ll9pZHx8dGhpcy5faWQhPT12Ll9pZCx2JiZ2Ll9pZCYmKGk9di5fbW9kZWwuZGF0YVtpLmlkXSksci5pZD09PWUuanN0cmVlLnJvb3QmJihcImJlZm9yZVwiPT09cyYmKHM9XCJmaXJzdFwiKSxcImFmdGVyXCI9PT1zJiYocz1cImxhc3RcIikpLHMpe2Nhc2VcImJlZm9yZVwiOnM9ZS5pbkFycmF5KHIuaWQsbS5jaGlsZHJlbik7YnJlYWs7Y2FzZVwiYWZ0ZXJcIjpzPWUuaW5BcnJheShyLmlkLG0uY2hpbGRyZW4pKzE7YnJlYWs7Y2FzZVwiaW5zaWRlXCI6Y2FzZVwiZmlyc3RcIjpzPTA7YnJlYWs7Y2FzZVwibGFzdFwiOnM9bS5jaGlsZHJlbi5sZW5ndGg7YnJlYWs7ZGVmYXVsdDpzfHwocz0wKX1pZihzPm0uY2hpbGRyZW4ubGVuZ3RoJiYocz1tLmNoaWxkcmVuLmxlbmd0aCksIXRoaXMuY2hlY2soXCJjb3B5X25vZGVcIixpLG0scyx7Y29yZTohMCxvcmlnaW46ZCxpc19tdWx0aTp2JiZ2Ll9pZCYmdi5faWQhPT10aGlzLl9pZCxpc19mb3JlaWduOiF2fHwhdi5faWR9KSlyZXR1cm4gdGhpcy5zZXR0aW5ncy5jb3JlLmVycm9yLmNhbGwodGhpcyx0aGlzLl9kYXRhLmNvcmUubGFzdF9lcnJvciksITE7aWYoZj12P3YuZ2V0X2pzb24oaSx7bm9faWQ6ITAsbm9fZGF0YTohMCxub19zdGF0ZTohMH0pOmksIWYpcmV0dXJuITE7aWYoZi5pZD09PSEwJiZkZWxldGUgZi5pZCxmPXRoaXMuX3BhcnNlX21vZGVsX2Zyb21fanNvbihmLG0uaWQsbS5wYXJlbnRzLmNvbmNhdCgpKSwhZilyZXR1cm4hMTtmb3IoXz10aGlzLmdldF9ub2RlKGYpLGkmJmkuc3RhdGUmJmkuc3RhdGUubG9hZGVkPT09ITEmJihfLnN0YXRlLmxvYWRlZD0hMSksaD1bXSxoLnB1c2goZiksaD1oLmNvbmNhdChfLmNoaWxkcmVuX2QpLHRoaXMudHJpZ2dlcihcIm1vZGVsXCIse25vZGVzOmgscGFyZW50Om0uaWR9KSx1PTAsZz1tLnBhcmVudHMubGVuZ3RoO2c+dTt1KyspdGhpcy5fbW9kZWwuZGF0YVttLnBhcmVudHNbdV1dLmNoaWxkcmVuX2Q9dGhpcy5fbW9kZWwuZGF0YVttLnBhcmVudHNbdV1dLmNoaWxkcmVuX2QuY29uY2F0KGgpO2ZvcihoPVtdLHU9MCxnPW0uY2hpbGRyZW4ubGVuZ3RoO2c+dTt1KyspaFt1Pj1zP3UrMTp1XT1tLmNoaWxkcmVuW3VdO3JldHVybiBoW3NdPV8uaWQsbS5jaGlsZHJlbj1oLG0uY2hpbGRyZW5fZC5wdXNoKF8uaWQpLG0uY2hpbGRyZW5fZD1tLmNoaWxkcmVuX2QuY29uY2F0KF8uY2hpbGRyZW5fZCksbS5pZD09PWUuanN0cmVlLnJvb3QmJih0aGlzLl9tb2RlbC5mb3JjZV9mdWxsX3JlZHJhdz0hMCksdGhpcy5fbW9kZWwuZm9yY2VfZnVsbF9yZWRyYXd8fHRoaXMuX25vZGVfY2hhbmdlZChtLmlkKSxvfHx0aGlzLnJlZHJhdyhtLmlkPT09ZS5qc3RyZWUucm9vdCksbiYmbi5jYWxsKHRoaXMsXyxtLHMpLHRoaXMudHJpZ2dlcihcImNvcHlfbm9kZVwiLHtub2RlOl8sb3JpZ2luYWw6aSxwYXJlbnQ6bS5pZCxwb3NpdGlvbjpzLG9sZF9wYXJlbnQ6cCxvbGRfcG9zaXRpb246diYmdi5faWQmJnAmJnYuX21vZGVsLmRhdGFbcF0mJnYuX21vZGVsLmRhdGFbcF0uY2hpbGRyZW4/ZS5pbkFycmF5KGkuaWQsdi5fbW9kZWwuZGF0YVtwXS5jaGlsZHJlbik6LTEsaXNfbXVsdGk6diYmdi5faWQmJnYuX2lkIT09dGhpcy5faWQsaXNfZm9yZWlnbjohdnx8IXYuX2lkLG9sZF9pbnN0YW5jZTp2LG5ld19pbnN0YW5jZTp0aGlzfSksXy5pZH0sY3V0OmZ1bmN0aW9uKHQpe2lmKHR8fCh0PXRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZC5jb25jYXQoKSksZS5pc0FycmF5KHQpfHwodD1bdF0pLCF0Lmxlbmd0aClyZXR1cm4hMTt2YXIgaSxyLHMsZD1bXTtmb3Iocj0wLHM9dC5sZW5ndGg7cz5yO3IrKylpPXRoaXMuZ2V0X25vZGUodFtyXSksaSYmaS5pZCYmaS5pZCE9PWUuanN0cmVlLnJvb3QmJmQucHVzaChpKTtyZXR1cm4gZC5sZW5ndGg/KG49ZCxvPXRoaXMsYT1cIm1vdmVfbm9kZVwiLHZvaWQgdGhpcy50cmlnZ2VyKFwiY3V0XCIse25vZGU6dH0pKTohMX0sY29weTpmdW5jdGlvbih0KXtpZih0fHwodD10aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQuY29uY2F0KCkpLGUuaXNBcnJheSh0KXx8KHQ9W3RdKSwhdC5sZW5ndGgpcmV0dXJuITE7dmFyIGkscixzLGQ9W107Zm9yKHI9MCxzPXQubGVuZ3RoO3M+cjtyKyspaT10aGlzLmdldF9ub2RlKHRbcl0pLGkmJmkuaWQmJmkuaWQhPT1lLmpzdHJlZS5yb290JiZkLnB1c2goaSk7cmV0dXJuIGQubGVuZ3RoPyhuPWQsbz10aGlzLGE9XCJjb3B5X25vZGVcIix2b2lkIHRoaXMudHJpZ2dlcihcImNvcHlcIix7bm9kZTp0fSkpOiExfSxnZXRfYnVmZmVyOmZ1bmN0aW9uKCl7cmV0dXJue21vZGU6YSxub2RlOm4saW5zdDpvfX0sY2FuX3Bhc3RlOmZ1bmN0aW9uKCl7cmV0dXJuIGEhPT0hMSYmbiE9PSExfSxwYXN0ZTpmdW5jdGlvbihlLHQpe3JldHVybiBlPXRoaXMuZ2V0X25vZGUoZSksZSYmYSYmYS5tYXRjaCgvXihjb3B5X25vZGV8bW92ZV9ub2RlKSQvKSYmbj8odGhpc1thXShuLGUsdCwhMSwhMSwhMSxvKSYmdGhpcy50cmlnZ2VyKFwicGFzdGVcIix7cGFyZW50OmUuaWQsbm9kZTpuLG1vZGU6YX0pLG49ITEsYT0hMSx2b2lkKG89ITEpKTohMX0sY2xlYXJfYnVmZmVyOmZ1bmN0aW9uKCl7bj0hMSxhPSExLG89ITEsdGhpcy50cmlnZ2VyKFwiY2xlYXJfYnVmZmVyXCIpfSxlZGl0OmZ1bmN0aW9uKHQsaSxyKXt2YXIgcyxuLGEsbyxkLGMsbCxoLF8sdT0hMTtyZXR1cm4odD10aGlzLmdldF9ub2RlKHQpKT90aGlzLnNldHRpbmdzLmNvcmUuY2hlY2tfY2FsbGJhY2s9PT0hMT8odGhpcy5fZGF0YS5jb3JlLmxhc3RfZXJyb3I9e2Vycm9yOlwiY2hlY2tcIixwbHVnaW46XCJjb3JlXCIsaWQ6XCJjb3JlXzA3XCIscmVhc29uOlwiQ291bGQgbm90IGVkaXQgbm9kZSBiZWNhdXNlIG9mIGNoZWNrX2NhbGxiYWNrXCJ9LHRoaXMuc2V0dGluZ3MuY29yZS5lcnJvci5jYWxsKHRoaXMsdGhpcy5fZGF0YS5jb3JlLmxhc3RfZXJyb3IpLCExKTooXz10LGk9XCJzdHJpbmdcIj09dHlwZW9mIGk/aTp0LnRleHQsdGhpcy5zZXRfdGV4dCh0LFwiXCIpLHQ9dGhpcy5fb3Blbl90byh0KSxfLnRleHQ9aSxzPXRoaXMuX2RhdGEuY29yZS5ydGwsbj10aGlzLmVsZW1lbnQud2lkdGgoKSx0aGlzLl9kYXRhLmNvcmUuZm9jdXNlZD1fLmlkLGE9dC5jaGlsZHJlbihcIi5qc3RyZWUtYW5jaG9yXCIpLmZvY3VzKCksbz1lKFwiPHNwYW4+XCIpLGQ9aSxjPWUoXCI8ZGl2IC8+XCIse2Nzczp7cG9zaXRpb246XCJhYnNvbHV0ZVwiLHRvcDpcIi0yMDBweFwiLGxlZnQ6cz9cIjBweFwiOlwiLTEwMDBweFwiLHZpc2liaWxpdHk6XCJoaWRkZW5cIn19KS5hcHBlbmRUbyhcImJvZHlcIiksbD1lKFwiPGlucHV0IC8+XCIse3ZhbHVlOmQsXCJjbGFzc1wiOlwianN0cmVlLXJlbmFtZS1pbnB1dFwiLGNzczp7cGFkZGluZzpcIjBcIixib3JkZXI6XCIxcHggc29saWQgc2lsdmVyXCIsXCJib3gtc2l6aW5nXCI6XCJib3JkZXItYm94XCIsZGlzcGxheTpcImlubGluZS1ibG9ja1wiLGhlaWdodDp0aGlzLl9kYXRhLmNvcmUubGlfaGVpZ2h0K1wicHhcIixsaW5lSGVpZ2h0OnRoaXMuX2RhdGEuY29yZS5saV9oZWlnaHQrXCJweFwiLHdpZHRoOlwiMTUwcHhcIn0sYmx1cjplLnByb3h5KGZ1bmN0aW9uKGkpe2kuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksaS5wcmV2ZW50RGVmYXVsdCgpO3ZhciBzLG49by5jaGlsZHJlbihcIi5qc3RyZWUtcmVuYW1lLWlucHV0XCIpLGw9bi52YWwoKSxoPXRoaXMuc2V0dGluZ3MuY29yZS5mb3JjZV90ZXh0O1wiXCI9PT1sJiYobD1kKSxjLnJlbW92ZSgpLG8ucmVwbGFjZVdpdGgoYSksby5yZW1vdmUoKSxkPWg/ZDplKFwiPGRpdj48L2Rpdj5cIikuYXBwZW5kKGUucGFyc2VIVE1MKGQpKS5odG1sKCksdGhpcy5zZXRfdGV4dCh0LGQpLHM9ISF0aGlzLnJlbmFtZV9ub2RlKHQsaD9lKFwiPGRpdj48L2Rpdj5cIikudGV4dChsKS50ZXh0KCk6ZShcIjxkaXY+PC9kaXY+XCIpLmFwcGVuZChlLnBhcnNlSFRNTChsKSkuaHRtbCgpKSxzfHx0aGlzLnNldF90ZXh0KHQsZCksdGhpcy5fZGF0YS5jb3JlLmZvY3VzZWQ9Xy5pZCxzZXRUaW1lb3V0KGUucHJveHkoZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldF9ub2RlKF8uaWQsITApO2UubGVuZ3RoJiYodGhpcy5fZGF0YS5jb3JlLmZvY3VzZWQ9Xy5pZCxlLmNoaWxkcmVuKFwiLmpzdHJlZS1hbmNob3JcIikuZm9jdXMoKSl9LHRoaXMpLDApLHImJnIuY2FsbCh0aGlzLF8scyx1KX0sdGhpcyksa2V5ZG93bjpmdW5jdGlvbihlKXt2YXIgdD1lLndoaWNoOzI3PT09dCYmKHU9ITAsdGhpcy52YWx1ZT1kKSwoMjc9PT10fHwxMz09PXR8fDM3PT09dHx8Mzg9PT10fHwzOT09PXR8fDQwPT09dHx8MzI9PT10KSYmZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSwoMjc9PT10fHwxMz09PXQpJiYoZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuYmx1cigpKX0sY2xpY2s6ZnVuY3Rpb24oZSl7ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX0sbW91c2Vkb3duOmZ1bmN0aW9uKGUpe2Uuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9LGtleXVwOmZ1bmN0aW9uKGUpe2wud2lkdGgoTWF0aC5taW4oYy50ZXh0KFwicFdcIit0aGlzLnZhbHVlKS53aWR0aCgpLG4pKX0sa2V5cHJlc3M6ZnVuY3Rpb24oZSl7cmV0dXJuIDEzPT09ZS53aGljaD8hMTp2b2lkIDB9fSksaD17Zm9udEZhbWlseTphLmNzcyhcImZvbnRGYW1pbHlcIil8fFwiXCIsZm9udFNpemU6YS5jc3MoXCJmb250U2l6ZVwiKXx8XCJcIixmb250V2VpZ2h0OmEuY3NzKFwiZm9udFdlaWdodFwiKXx8XCJcIixmb250U3R5bGU6YS5jc3MoXCJmb250U3R5bGVcIil8fFwiXCIsZm9udFN0cmV0Y2g6YS5jc3MoXCJmb250U3RyZXRjaFwiKXx8XCJcIixmb250VmFyaWFudDphLmNzcyhcImZvbnRWYXJpYW50XCIpfHxcIlwiLGxldHRlclNwYWNpbmc6YS5jc3MoXCJsZXR0ZXJTcGFjaW5nXCIpfHxcIlwiLHdvcmRTcGFjaW5nOmEuY3NzKFwid29yZFNwYWNpbmdcIil8fFwiXCJ9LG8uYXR0cihcImNsYXNzXCIsYS5hdHRyKFwiY2xhc3NcIikpLmFwcGVuZChhLmNvbnRlbnRzKCkuY2xvbmUoKSkuYXBwZW5kKGwpLGEucmVwbGFjZVdpdGgobyksYy5jc3MoaCksdm9pZCBsLmNzcyhoKS53aWR0aChNYXRoLm1pbihjLnRleHQoXCJwV1wiK2xbMF0udmFsdWUpLndpZHRoKCksbikpWzBdLnNlbGVjdCgpKTohMX0sc2V0X3RoZW1lOmZ1bmN0aW9uKHQsaSl7aWYoIXQpcmV0dXJuITE7aWYoaT09PSEwKXt2YXIgcj10aGlzLnNldHRpbmdzLmNvcmUudGhlbWVzLmRpcjtyfHwocj1lLmpzdHJlZS5wYXRoK1wiL3RoZW1lc1wiKSxpPXIrXCIvXCIrdCtcIi9zdHlsZS5jc3NcIn1pJiYtMT09PWUuaW5BcnJheShpLGQpJiYoZShcImhlYWRcIikuYXBwZW5kKCc8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgaHJlZj1cIicraSsnXCIgdHlwZT1cInRleHQvY3NzXCIgLz4nKSxkLnB1c2goaSkpLHRoaXMuX2RhdGEuY29yZS50aGVtZXMubmFtZSYmdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKFwianN0cmVlLVwiK3RoaXMuX2RhdGEuY29yZS50aGVtZXMubmFtZSksXG50aGlzLl9kYXRhLmNvcmUudGhlbWVzLm5hbWU9dCx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoXCJqc3RyZWUtXCIrdCksdGhpcy5lbGVtZW50W3RoaXMuc2V0dGluZ3MuY29yZS50aGVtZXMucmVzcG9uc2l2ZT9cImFkZENsYXNzXCI6XCJyZW1vdmVDbGFzc1wiXShcImpzdHJlZS1cIit0K1wiLXJlc3BvbnNpdmVcIiksdGhpcy50cmlnZ2VyKFwic2V0X3RoZW1lXCIse3RoZW1lOnR9KX0sZ2V0X3RoZW1lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RhdGEuY29yZS50aGVtZXMubmFtZX0sc2V0X3RoZW1lX3ZhcmlhbnQ6ZnVuY3Rpb24oZSl7dGhpcy5fZGF0YS5jb3JlLnRoZW1lcy52YXJpYW50JiZ0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoXCJqc3RyZWUtXCIrdGhpcy5fZGF0YS5jb3JlLnRoZW1lcy5uYW1lK1wiLVwiK3RoaXMuX2RhdGEuY29yZS50aGVtZXMudmFyaWFudCksdGhpcy5fZGF0YS5jb3JlLnRoZW1lcy52YXJpYW50PWUsZSYmdGhpcy5lbGVtZW50LmFkZENsYXNzKFwianN0cmVlLVwiK3RoaXMuX2RhdGEuY29yZS50aGVtZXMubmFtZStcIi1cIit0aGlzLl9kYXRhLmNvcmUudGhlbWVzLnZhcmlhbnQpfSxnZXRfdGhlbWVfdmFyaWFudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kYXRhLmNvcmUudGhlbWVzLnZhcmlhbnR9LHNob3dfc3RyaXBlczpmdW5jdGlvbigpe3RoaXMuX2RhdGEuY29yZS50aGVtZXMuc3RyaXBlcz0hMCx0aGlzLmdldF9jb250YWluZXJfdWwoKS5hZGRDbGFzcyhcImpzdHJlZS1zdHJpcGVkXCIpfSxoaWRlX3N0cmlwZXM6ZnVuY3Rpb24oKXt0aGlzLl9kYXRhLmNvcmUudGhlbWVzLnN0cmlwZXM9ITEsdGhpcy5nZXRfY29udGFpbmVyX3VsKCkucmVtb3ZlQ2xhc3MoXCJqc3RyZWUtc3RyaXBlZFwiKX0sdG9nZ2xlX3N0cmlwZXM6ZnVuY3Rpb24oKXt0aGlzLl9kYXRhLmNvcmUudGhlbWVzLnN0cmlwZXM/dGhpcy5oaWRlX3N0cmlwZXMoKTp0aGlzLnNob3dfc3RyaXBlcygpfSxzaG93X2RvdHM6ZnVuY3Rpb24oKXt0aGlzLl9kYXRhLmNvcmUudGhlbWVzLmRvdHM9ITAsdGhpcy5nZXRfY29udGFpbmVyX3VsKCkucmVtb3ZlQ2xhc3MoXCJqc3RyZWUtbm8tZG90c1wiKX0saGlkZV9kb3RzOmZ1bmN0aW9uKCl7dGhpcy5fZGF0YS5jb3JlLnRoZW1lcy5kb3RzPSExLHRoaXMuZ2V0X2NvbnRhaW5lcl91bCgpLmFkZENsYXNzKFwianN0cmVlLW5vLWRvdHNcIil9LHRvZ2dsZV9kb3RzOmZ1bmN0aW9uKCl7dGhpcy5fZGF0YS5jb3JlLnRoZW1lcy5kb3RzP3RoaXMuaGlkZV9kb3RzKCk6dGhpcy5zaG93X2RvdHMoKX0sc2hvd19pY29uczpmdW5jdGlvbigpe3RoaXMuX2RhdGEuY29yZS50aGVtZXMuaWNvbnM9ITAsdGhpcy5nZXRfY29udGFpbmVyX3VsKCkucmVtb3ZlQ2xhc3MoXCJqc3RyZWUtbm8taWNvbnNcIil9LGhpZGVfaWNvbnM6ZnVuY3Rpb24oKXt0aGlzLl9kYXRhLmNvcmUudGhlbWVzLmljb25zPSExLHRoaXMuZ2V0X2NvbnRhaW5lcl91bCgpLmFkZENsYXNzKFwianN0cmVlLW5vLWljb25zXCIpfSx0b2dnbGVfaWNvbnM6ZnVuY3Rpb24oKXt0aGlzLl9kYXRhLmNvcmUudGhlbWVzLmljb25zP3RoaXMuaGlkZV9pY29ucygpOnRoaXMuc2hvd19pY29ucygpfSxzZXRfaWNvbjpmdW5jdGlvbihpLHIpe3ZhciBzLG4sYSxvO2lmKGUuaXNBcnJheShpKSl7Zm9yKGk9aS5zbGljZSgpLHM9MCxuPWkubGVuZ3RoO24+cztzKyspdGhpcy5zZXRfaWNvbihpW3NdLHIpO3JldHVybiEwfXJldHVybiBpPXRoaXMuZ2V0X25vZGUoaSksaSYmaS5pZCE9PWUuanN0cmVlLnJvb3Q/KG89aS5pY29uLGkuaWNvbj1yPT09ITB8fG51bGw9PT1yfHxyPT09dHx8XCJcIj09PXI/ITA6cixhPXRoaXMuZ2V0X25vZGUoaSwhMCkuY2hpbGRyZW4oXCIuanN0cmVlLWFuY2hvclwiKS5jaGlsZHJlbihcIi5qc3RyZWUtdGhlbWVpY29uXCIpLHI9PT0hMT90aGlzLmhpZGVfaWNvbihpKTpyPT09ITB8fG51bGw9PT1yfHxyPT09dHx8XCJcIj09PXI/KGEucmVtb3ZlQ2xhc3MoXCJqc3RyZWUtdGhlbWVpY29uLWN1c3RvbSBcIitvKS5jc3MoXCJiYWNrZ3JvdW5kXCIsXCJcIikucmVtb3ZlQXR0cihcInJlbFwiKSxvPT09ITEmJnRoaXMuc2hvd19pY29uKGkpKTotMT09PXIuaW5kZXhPZihcIi9cIikmJi0xPT09ci5pbmRleE9mKFwiLlwiKT8oYS5yZW1vdmVDbGFzcyhvKS5jc3MoXCJiYWNrZ3JvdW5kXCIsXCJcIiksYS5hZGRDbGFzcyhyK1wiIGpzdHJlZS10aGVtZWljb24tY3VzdG9tXCIpLmF0dHIoXCJyZWxcIixyKSxvPT09ITEmJnRoaXMuc2hvd19pY29uKGkpKTooYS5yZW1vdmVDbGFzcyhvKS5jc3MoXCJiYWNrZ3JvdW5kXCIsXCJcIiksYS5hZGRDbGFzcyhcImpzdHJlZS10aGVtZWljb24tY3VzdG9tXCIpLmNzcyhcImJhY2tncm91bmRcIixcInVybCgnXCIrcitcIicpIGNlbnRlciBjZW50ZXIgbm8tcmVwZWF0XCIpLmF0dHIoXCJyZWxcIixyKSxvPT09ITEmJnRoaXMuc2hvd19pY29uKGkpKSwhMCk6ITF9LGdldF9pY29uOmZ1bmN0aW9uKHQpe3JldHVybiB0PXRoaXMuZ2V0X25vZGUodCksdCYmdC5pZCE9PWUuanN0cmVlLnJvb3Q/dC5pY29uOiExfSxoaWRlX2ljb246ZnVuY3Rpb24odCl7dmFyIGkscjtpZihlLmlzQXJyYXkodCkpe2Zvcih0PXQuc2xpY2UoKSxpPTAscj10Lmxlbmd0aDtyPmk7aSsrKXRoaXMuaGlkZV9pY29uKHRbaV0pO3JldHVybiEwfXJldHVybiB0PXRoaXMuZ2V0X25vZGUodCksdCYmdCE9PWUuanN0cmVlLnJvb3Q/KHQuaWNvbj0hMSx0aGlzLmdldF9ub2RlKHQsITApLmNoaWxkcmVuKFwiLmpzdHJlZS1hbmNob3JcIikuY2hpbGRyZW4oXCIuanN0cmVlLXRoZW1laWNvblwiKS5hZGRDbGFzcyhcImpzdHJlZS10aGVtZWljb24taGlkZGVuXCIpLCEwKTohMX0sc2hvd19pY29uOmZ1bmN0aW9uKHQpe3ZhciBpLHIscztpZihlLmlzQXJyYXkodCkpe2Zvcih0PXQuc2xpY2UoKSxpPTAscj10Lmxlbmd0aDtyPmk7aSsrKXRoaXMuc2hvd19pY29uKHRbaV0pO3JldHVybiEwfXJldHVybiB0PXRoaXMuZ2V0X25vZGUodCksdCYmdCE9PWUuanN0cmVlLnJvb3Q/KHM9dGhpcy5nZXRfbm9kZSh0LCEwKSx0Lmljb249cy5sZW5ndGg/cy5jaGlsZHJlbihcIi5qc3RyZWUtYW5jaG9yXCIpLmNoaWxkcmVuKFwiLmpzdHJlZS10aGVtZWljb25cIikuYXR0cihcInJlbFwiKTohMCx0Lmljb258fCh0Lmljb249ITApLHMuY2hpbGRyZW4oXCIuanN0cmVlLWFuY2hvclwiKS5jaGlsZHJlbihcIi5qc3RyZWUtdGhlbWVpY29uXCIpLnJlbW92ZUNsYXNzKFwianN0cmVlLXRoZW1laWNvbi1oaWRkZW5cIiksITApOiExfX0sZS52YWthdGE9e30sZS52YWthdGEuYXR0cmlidXRlcz1mdW5jdGlvbih0LGkpe3Q9ZSh0KVswXTt2YXIgcj1pP3t9OltdO3JldHVybiB0JiZ0LmF0dHJpYnV0ZXMmJmUuZWFjaCh0LmF0dHJpYnV0ZXMsZnVuY3Rpb24odCxzKXstMT09PWUuaW5BcnJheShzLm5hbWUudG9Mb3dlckNhc2UoKSxbXCJzdHlsZVwiLFwiY29udGVudGVkaXRhYmxlXCIsXCJoYXNmb2N1c1wiLFwidGFiaW5kZXhcIl0pJiZudWxsIT09cy52YWx1ZSYmXCJcIiE9PWUudHJpbShzLnZhbHVlKSYmKGk/cltzLm5hbWVdPXMudmFsdWU6ci5wdXNoKHMubmFtZSkpfSkscn0sZS52YWthdGEuYXJyYXlfdW5pcXVlPWZ1bmN0aW9uKGUpe3ZhciBpLHIscz1bXSxuPXt9O2ZvcihpPTAscj1lLmxlbmd0aDtyPmk7aSsrKW5bZVtpXV09PT10JiYocy5wdXNoKGVbaV0pLG5bZVtpXV09ITApO3JldHVybiBzfSxlLnZha2F0YS5hcnJheV9yZW1vdmU9ZnVuY3Rpb24oZSx0LGkpe3ZhciByPWUuc2xpY2UoKGl8fHQpKzF8fGUubGVuZ3RoKTtyZXR1cm4gZS5sZW5ndGg9MD50P2UubGVuZ3RoK3Q6dCxlLnB1c2guYXBwbHkoZSxyKSxlfSxlLnZha2F0YS5hcnJheV9yZW1vdmVfaXRlbT1mdW5jdGlvbih0LGkpe3ZhciByPWUuaW5BcnJheShpLHQpO3JldHVybi0xIT09cj9lLnZha2F0YS5hcnJheV9yZW1vdmUodCxyKTp0fSxlLmpzdHJlZS5wbHVnaW5zLmNoYW5nZWQ9ZnVuY3Rpb24oZSx0KXt2YXIgaT1bXTt0aGlzLnRyaWdnZXI9ZnVuY3Rpb24oZSxyKXt2YXIgcyxuO2lmKHJ8fChyPXt9KSxcImNoYW5nZWRcIj09PWUucmVwbGFjZShcIi5qc3RyZWVcIixcIlwiKSl7ci5jaGFuZ2VkPXtzZWxlY3RlZDpbXSxkZXNlbGVjdGVkOltdfTt2YXIgYT17fTtmb3Iocz0wLG49aS5sZW5ndGg7bj5zO3MrKylhW2lbc11dPTE7Zm9yKHM9MCxuPXIuc2VsZWN0ZWQubGVuZ3RoO24+cztzKyspYVtyLnNlbGVjdGVkW3NdXT9hW3Iuc2VsZWN0ZWRbc11dPTI6ci5jaGFuZ2VkLnNlbGVjdGVkLnB1c2goci5zZWxlY3RlZFtzXSk7Zm9yKHM9MCxuPWkubGVuZ3RoO24+cztzKyspMT09PWFbaVtzXV0mJnIuY2hhbmdlZC5kZXNlbGVjdGVkLnB1c2goaVtzXSk7aT1yLnNlbGVjdGVkLnNsaWNlKCl9dC50cmlnZ2VyLmNhbGwodGhpcyxlLHIpfSx0aGlzLnJlZnJlc2g9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gaT1bXSx0LnJlZnJlc2guYXBwbHkodGhpcyxhcmd1bWVudHMpfX07dmFyIF89bC5jcmVhdGVFbGVtZW50KFwiSVwiKTtfLmNsYXNzTmFtZT1cImpzdHJlZS1pY29uIGpzdHJlZS1jaGVja2JveFwiLF8uc2V0QXR0cmlidXRlKFwicm9sZVwiLFwicHJlc2VudGF0aW9uXCIpLGUuanN0cmVlLmRlZmF1bHRzLmNoZWNrYm94PXt2aXNpYmxlOiEwLHRocmVlX3N0YXRlOiEwLHdob2xlX25vZGU6ITAsa2VlcF9zZWxlY3RlZF9zdHlsZTohMCxjYXNjYWRlOlwiXCIsdGllX3NlbGVjdGlvbjohMH0sZS5qc3RyZWUucGx1Z2lucy5jaGVja2JveD1mdW5jdGlvbihpLHIpe3RoaXMuYmluZD1mdW5jdGlvbigpe3IuYmluZC5jYWxsKHRoaXMpLHRoaXMuX2RhdGEuY2hlY2tib3gudXRvPSExLHRoaXMuX2RhdGEuY2hlY2tib3guc2VsZWN0ZWQ9W10sdGhpcy5zZXR0aW5ncy5jaGVja2JveC50aHJlZV9zdGF0ZSYmKHRoaXMuc2V0dGluZ3MuY2hlY2tib3guY2FzY2FkZT1cInVwK2Rvd24rdW5kZXRlcm1pbmVkXCIpLHRoaXMuZWxlbWVudC5vbihcImluaXQuanN0cmVlXCIsZS5wcm94eShmdW5jdGlvbigpe3RoaXMuX2RhdGEuY2hlY2tib3gudmlzaWJsZT10aGlzLnNldHRpbmdzLmNoZWNrYm94LnZpc2libGUsdGhpcy5zZXR0aW5ncy5jaGVja2JveC5rZWVwX3NlbGVjdGVkX3N0eWxlfHx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoXCJqc3RyZWUtY2hlY2tib3gtbm8tY2xpY2tlZFwiKSx0aGlzLnNldHRpbmdzLmNoZWNrYm94LnRpZV9zZWxlY3Rpb24mJnRoaXMuZWxlbWVudC5hZGRDbGFzcyhcImpzdHJlZS1jaGVja2JveC1zZWxlY3Rpb25cIil9LHRoaXMpKS5vbihcImxvYWRpbmcuanN0cmVlXCIsZS5wcm94eShmdW5jdGlvbigpe3RoaXNbdGhpcy5fZGF0YS5jaGVja2JveC52aXNpYmxlP1wic2hvd19jaGVja2JveGVzXCI6XCJoaWRlX2NoZWNrYm94ZXNcIl0oKX0sdGhpcykpLC0xIT09dGhpcy5zZXR0aW5ncy5jaGVja2JveC5jYXNjYWRlLmluZGV4T2YoXCJ1bmRldGVybWluZWRcIikmJnRoaXMuZWxlbWVudC5vbihcImNoYW5nZWQuanN0cmVlIHVuY2hlY2tfbm9kZS5qc3RyZWUgY2hlY2tfbm9kZS5qc3RyZWUgdW5jaGVja19hbGwuanN0cmVlIGNoZWNrX2FsbC5qc3RyZWUgbW92ZV9ub2RlLmpzdHJlZSBjb3B5X25vZGUuanN0cmVlIHJlZHJhdy5qc3RyZWUgb3Blbl9ub2RlLmpzdHJlZVwiLGUucHJveHkoZnVuY3Rpb24oKXt0aGlzLl9kYXRhLmNoZWNrYm94LnV0byYmY2xlYXJUaW1lb3V0KHRoaXMuX2RhdGEuY2hlY2tib3gudXRvKSx0aGlzLl9kYXRhLmNoZWNrYm94LnV0bz1zZXRUaW1lb3V0KGUucHJveHkodGhpcy5fdW5kZXRlcm1pbmVkLHRoaXMpLDUwKX0sdGhpcykpLHRoaXMuc2V0dGluZ3MuY2hlY2tib3gudGllX3NlbGVjdGlvbnx8dGhpcy5lbGVtZW50Lm9uKFwibW9kZWwuanN0cmVlXCIsZS5wcm94eShmdW5jdGlvbihlLHQpe3ZhciBpLHIscz10aGlzLl9tb2RlbC5kYXRhLG49KHNbdC5wYXJlbnRdLHQubm9kZXMpO2ZvcihpPTAscj1uLmxlbmd0aDtyPmk7aSsrKXNbbltpXV0uc3RhdGUuY2hlY2tlZD1zW25baV1dLnN0YXRlLmNoZWNrZWR8fHNbbltpXV0ub3JpZ2luYWwmJnNbbltpXV0ub3JpZ2luYWwuc3RhdGUmJnNbbltpXV0ub3JpZ2luYWwuc3RhdGUuY2hlY2tlZCxzW25baV1dLnN0YXRlLmNoZWNrZWQmJnRoaXMuX2RhdGEuY2hlY2tib3guc2VsZWN0ZWQucHVzaChuW2ldKX0sdGhpcykpLCgtMSE9PXRoaXMuc2V0dGluZ3MuY2hlY2tib3guY2FzY2FkZS5pbmRleE9mKFwidXBcIil8fC0xIT09dGhpcy5zZXR0aW5ncy5jaGVja2JveC5jYXNjYWRlLmluZGV4T2YoXCJkb3duXCIpKSYmdGhpcy5lbGVtZW50Lm9uKFwibW9kZWwuanN0cmVlXCIsZS5wcm94eShmdW5jdGlvbih0LGkpe3ZhciByLHMsbixhLG8sZCxjPXRoaXMuX21vZGVsLmRhdGEsbD1jW2kucGFyZW50XSxoPWkubm9kZXMsXz1bXSx1PXRoaXMuc2V0dGluZ3MuY2hlY2tib3guY2FzY2FkZSxnPXRoaXMuc2V0dGluZ3MuY2hlY2tib3gudGllX3NlbGVjdGlvbjtpZigtMSE9PXUuaW5kZXhPZihcImRvd25cIikpaWYobC5zdGF0ZVtnP1wic2VsZWN0ZWRcIjpcImNoZWNrZWRcIl0pe2ZvcihzPTAsbj1oLmxlbmd0aDtuPnM7cysrKWNbaFtzXV0uc3RhdGVbZz9cInNlbGVjdGVkXCI6XCJjaGVja2VkXCJdPSEwO3RoaXMuX2RhdGFbZz9cImNvcmVcIjpcImNoZWNrYm94XCJdLnNlbGVjdGVkPXRoaXMuX2RhdGFbZz9cImNvcmVcIjpcImNoZWNrYm94XCJdLnNlbGVjdGVkLmNvbmNhdChoKX1lbHNlIGZvcihzPTAsbj1oLmxlbmd0aDtuPnM7cysrKWlmKGNbaFtzXV0uc3RhdGVbZz9cInNlbGVjdGVkXCI6XCJjaGVja2VkXCJdKXtmb3IoYT0wLG89Y1toW3NdXS5jaGlsZHJlbl9kLmxlbmd0aDtvPmE7YSsrKWNbY1toW3NdXS5jaGlsZHJlbl9kW2FdXS5zdGF0ZVtnP1wic2VsZWN0ZWRcIjpcImNoZWNrZWRcIl09ITA7dGhpcy5fZGF0YVtnP1wiY29yZVwiOlwiY2hlY2tib3hcIl0uc2VsZWN0ZWQ9dGhpcy5fZGF0YVtnP1wiY29yZVwiOlwiY2hlY2tib3hcIl0uc2VsZWN0ZWQuY29uY2F0KGNbaFtzXV0uY2hpbGRyZW5fZCl9aWYoLTEhPT11LmluZGV4T2YoXCJ1cFwiKSl7Zm9yKHM9MCxuPWwuY2hpbGRyZW5fZC5sZW5ndGg7bj5zO3MrKyljW2wuY2hpbGRyZW5fZFtzXV0uY2hpbGRyZW4ubGVuZ3RofHxfLnB1c2goY1tsLmNoaWxkcmVuX2Rbc11dLnBhcmVudCk7Zm9yKF89ZS52YWthdGEuYXJyYXlfdW5pcXVlKF8pLGE9MCxvPV8ubGVuZ3RoO28+YTthKyspZm9yKGw9Y1tfW2FdXTtsJiZsLmlkIT09ZS5qc3RyZWUucm9vdDspe2ZvcihyPTAscz0wLG49bC5jaGlsZHJlbi5sZW5ndGg7bj5zO3MrKylyKz1jW2wuY2hpbGRyZW5bc11dLnN0YXRlW2c/XCJzZWxlY3RlZFwiOlwiY2hlY2tlZFwiXTtpZihyIT09bilicmVhaztsLnN0YXRlW2c/XCJzZWxlY3RlZFwiOlwiY2hlY2tlZFwiXT0hMCx0aGlzLl9kYXRhW2c/XCJjb3JlXCI6XCJjaGVja2JveFwiXS5zZWxlY3RlZC5wdXNoKGwuaWQpLGQ9dGhpcy5nZXRfbm9kZShsLCEwKSxkJiZkLmxlbmd0aCYmZC5hdHRyKFwiYXJpYS1zZWxlY3RlZFwiLCEwKS5jaGlsZHJlbihcIi5qc3RyZWUtYW5jaG9yXCIpLmFkZENsYXNzKGc/XCJqc3RyZWUtY2xpY2tlZFwiOlwianN0cmVlLWNoZWNrZWRcIiksbD10aGlzLmdldF9ub2RlKGwucGFyZW50KX19dGhpcy5fZGF0YVtnP1wiY29yZVwiOlwiY2hlY2tib3hcIl0uc2VsZWN0ZWQ9ZS52YWthdGEuYXJyYXlfdW5pcXVlKHRoaXMuX2RhdGFbZz9cImNvcmVcIjpcImNoZWNrYm94XCJdLnNlbGVjdGVkKX0sdGhpcykpLm9uKHRoaXMuc2V0dGluZ3MuY2hlY2tib3gudGllX3NlbGVjdGlvbj9cInNlbGVjdF9ub2RlLmpzdHJlZVwiOlwiY2hlY2tfbm9kZS5qc3RyZWVcIixlLnByb3h5KGZ1bmN0aW9uKHQsaSl7dmFyIHIscyxuLGEsbz1pLm5vZGUsZD10aGlzLl9tb2RlbC5kYXRhLGM9dGhpcy5nZXRfbm9kZShvLnBhcmVudCksbD10aGlzLmdldF9ub2RlKG8sITApLGg9dGhpcy5zZXR0aW5ncy5jaGVja2JveC5jYXNjYWRlLF89dGhpcy5zZXR0aW5ncy5jaGVja2JveC50aWVfc2VsZWN0aW9uO2lmKC0xIT09aC5pbmRleE9mKFwiZG93blwiKSlmb3IodGhpcy5fZGF0YVtfP1wiY29yZVwiOlwiY2hlY2tib3hcIl0uc2VsZWN0ZWQ9ZS52YWthdGEuYXJyYXlfdW5pcXVlKHRoaXMuX2RhdGFbXz9cImNvcmVcIjpcImNoZWNrYm94XCJdLnNlbGVjdGVkLmNvbmNhdChvLmNoaWxkcmVuX2QpKSxyPTAscz1vLmNoaWxkcmVuX2QubGVuZ3RoO3M+cjtyKyspYT1kW28uY2hpbGRyZW5fZFtyXV0sYS5zdGF0ZVtfP1wic2VsZWN0ZWRcIjpcImNoZWNrZWRcIl09ITAsYSYmYS5vcmlnaW5hbCYmYS5vcmlnaW5hbC5zdGF0ZSYmYS5vcmlnaW5hbC5zdGF0ZS51bmRldGVybWluZWQmJihhLm9yaWdpbmFsLnN0YXRlLnVuZGV0ZXJtaW5lZD0hMSk7aWYoLTEhPT1oLmluZGV4T2YoXCJ1cFwiKSlmb3IoO2MmJmMuaWQhPT1lLmpzdHJlZS5yb290Oyl7Zm9yKG49MCxyPTAscz1jLmNoaWxkcmVuLmxlbmd0aDtzPnI7cisrKW4rPWRbYy5jaGlsZHJlbltyXV0uc3RhdGVbXz9cInNlbGVjdGVkXCI6XCJjaGVja2VkXCJdO2lmKG4hPT1zKWJyZWFrO2Muc3RhdGVbXz9cInNlbGVjdGVkXCI6XCJjaGVja2VkXCJdPSEwLHRoaXMuX2RhdGFbXz9cImNvcmVcIjpcImNoZWNrYm94XCJdLnNlbGVjdGVkLnB1c2goYy5pZCksYT10aGlzLmdldF9ub2RlKGMsITApLGEmJmEubGVuZ3RoJiZhLmF0dHIoXCJhcmlhLXNlbGVjdGVkXCIsITApLmNoaWxkcmVuKFwiLmpzdHJlZS1hbmNob3JcIikuYWRkQ2xhc3MoXz9cImpzdHJlZS1jbGlja2VkXCI6XCJqc3RyZWUtY2hlY2tlZFwiKSxjPXRoaXMuZ2V0X25vZGUoYy5wYXJlbnQpfS0xIT09aC5pbmRleE9mKFwiZG93blwiKSYmbC5sZW5ndGgmJmwuZmluZChcIi5qc3RyZWUtYW5jaG9yXCIpLmFkZENsYXNzKF8/XCJqc3RyZWUtY2xpY2tlZFwiOlwianN0cmVlLWNoZWNrZWRcIikucGFyZW50KCkuYXR0cihcImFyaWEtc2VsZWN0ZWRcIiwhMCl9LHRoaXMpKS5vbih0aGlzLnNldHRpbmdzLmNoZWNrYm94LnRpZV9zZWxlY3Rpb24/XCJkZXNlbGVjdF9hbGwuanN0cmVlXCI6XCJ1bmNoZWNrX2FsbC5qc3RyZWVcIixlLnByb3h5KGZ1bmN0aW9uKHQsaSl7dmFyIHIscyxuLGE9dGhpcy5nZXRfbm9kZShlLmpzdHJlZS5yb290KSxvPXRoaXMuX21vZGVsLmRhdGE7Zm9yKHI9MCxzPWEuY2hpbGRyZW5fZC5sZW5ndGg7cz5yO3IrKyluPW9bYS5jaGlsZHJlbl9kW3JdXSxuJiZuLm9yaWdpbmFsJiZuLm9yaWdpbmFsLnN0YXRlJiZuLm9yaWdpbmFsLnN0YXRlLnVuZGV0ZXJtaW5lZCYmKG4ub3JpZ2luYWwuc3RhdGUudW5kZXRlcm1pbmVkPSExKX0sdGhpcykpLm9uKHRoaXMuc2V0dGluZ3MuY2hlY2tib3gudGllX3NlbGVjdGlvbj9cImRlc2VsZWN0X25vZGUuanN0cmVlXCI6XCJ1bmNoZWNrX25vZGUuanN0cmVlXCIsZS5wcm94eShmdW5jdGlvbih0LGkpe3ZhciByLHMsbixhPWkubm9kZSxvPXRoaXMuZ2V0X25vZGUoYSwhMCksZD10aGlzLnNldHRpbmdzLmNoZWNrYm94LmNhc2NhZGUsYz10aGlzLnNldHRpbmdzLmNoZWNrYm94LnRpZV9zZWxlY3Rpb247aWYoYSYmYS5vcmlnaW5hbCYmYS5vcmlnaW5hbC5zdGF0ZSYmYS5vcmlnaW5hbC5zdGF0ZS51bmRldGVybWluZWQmJihhLm9yaWdpbmFsLnN0YXRlLnVuZGV0ZXJtaW5lZD0hMSksLTEhPT1kLmluZGV4T2YoXCJkb3duXCIpKWZvcihyPTAscz1hLmNoaWxkcmVuX2QubGVuZ3RoO3M+cjtyKyspbj10aGlzLl9tb2RlbC5kYXRhW2EuY2hpbGRyZW5fZFtyXV0sbi5zdGF0ZVtjP1wic2VsZWN0ZWRcIjpcImNoZWNrZWRcIl09ITEsbiYmbi5vcmlnaW5hbCYmbi5vcmlnaW5hbC5zdGF0ZSYmbi5vcmlnaW5hbC5zdGF0ZS51bmRldGVybWluZWQmJihuLm9yaWdpbmFsLnN0YXRlLnVuZGV0ZXJtaW5lZD0hMSk7aWYoLTEhPT1kLmluZGV4T2YoXCJ1cFwiKSlmb3Iocj0wLHM9YS5wYXJlbnRzLmxlbmd0aDtzPnI7cisrKW49dGhpcy5fbW9kZWwuZGF0YVthLnBhcmVudHNbcl1dLG4uc3RhdGVbYz9cInNlbGVjdGVkXCI6XCJjaGVja2VkXCJdPSExLG4mJm4ub3JpZ2luYWwmJm4ub3JpZ2luYWwuc3RhdGUmJm4ub3JpZ2luYWwuc3RhdGUudW5kZXRlcm1pbmVkJiYobi5vcmlnaW5hbC5zdGF0ZS51bmRldGVybWluZWQ9ITEpLG49dGhpcy5nZXRfbm9kZShhLnBhcmVudHNbcl0sITApLG4mJm4ubGVuZ3RoJiZuLmF0dHIoXCJhcmlhLXNlbGVjdGVkXCIsITEpLmNoaWxkcmVuKFwiLmpzdHJlZS1hbmNob3JcIikucmVtb3ZlQ2xhc3MoYz9cImpzdHJlZS1jbGlja2VkXCI6XCJqc3RyZWUtY2hlY2tlZFwiKTtmb3Iobj1bXSxyPTAscz10aGlzLl9kYXRhW2M/XCJjb3JlXCI6XCJjaGVja2JveFwiXS5zZWxlY3RlZC5sZW5ndGg7cz5yO3IrKyktMSE9PWQuaW5kZXhPZihcImRvd25cIikmJi0xIT09ZS5pbkFycmF5KHRoaXMuX2RhdGFbYz9cImNvcmVcIjpcImNoZWNrYm94XCJdLnNlbGVjdGVkW3JdLGEuY2hpbGRyZW5fZCl8fC0xIT09ZC5pbmRleE9mKFwidXBcIikmJi0xIT09ZS5pbkFycmF5KHRoaXMuX2RhdGFbYz9cImNvcmVcIjpcImNoZWNrYm94XCJdLnNlbGVjdGVkW3JdLGEucGFyZW50cyl8fG4ucHVzaCh0aGlzLl9kYXRhW2M/XCJjb3JlXCI6XCJjaGVja2JveFwiXS5zZWxlY3RlZFtyXSk7dGhpcy5fZGF0YVtjP1wiY29yZVwiOlwiY2hlY2tib3hcIl0uc2VsZWN0ZWQ9ZS52YWthdGEuYXJyYXlfdW5pcXVlKG4pLC0xIT09ZC5pbmRleE9mKFwiZG93blwiKSYmby5sZW5ndGgmJm8uZmluZChcIi5qc3RyZWUtYW5jaG9yXCIpLnJlbW92ZUNsYXNzKGM/XCJqc3RyZWUtY2xpY2tlZFwiOlwianN0cmVlLWNoZWNrZWRcIikucGFyZW50KCkuYXR0cihcImFyaWEtc2VsZWN0ZWRcIiwhMSl9LHRoaXMpKSwtMSE9PXRoaXMuc2V0dGluZ3MuY2hlY2tib3guY2FzY2FkZS5pbmRleE9mKFwidXBcIikmJnRoaXMuZWxlbWVudC5vbihcImRlbGV0ZV9ub2RlLmpzdHJlZVwiLGUucHJveHkoZnVuY3Rpb24odCxpKXtmb3IodmFyIHIscyxuLGEsbz10aGlzLmdldF9ub2RlKGkucGFyZW50KSxkPXRoaXMuX21vZGVsLmRhdGEsYz10aGlzLnNldHRpbmdzLmNoZWNrYm94LnRpZV9zZWxlY3Rpb247byYmby5pZCE9PWUuanN0cmVlLnJvb3QmJiFvLnN0YXRlW2M/XCJzZWxlY3RlZFwiOlwiY2hlY2tlZFwiXTspe2ZvcihuPTAscj0wLHM9by5jaGlsZHJlbi5sZW5ndGg7cz5yO3IrKyluKz1kW28uY2hpbGRyZW5bcl1dLnN0YXRlW2M/XCJzZWxlY3RlZFwiOlwiY2hlY2tlZFwiXTtpZighKHM+MCYmbj09PXMpKWJyZWFrO28uc3RhdGVbYz9cInNlbGVjdGVkXCI6XCJjaGVja2VkXCJdPSEwLHRoaXMuX2RhdGFbYz9cImNvcmVcIjpcImNoZWNrYm94XCJdLnNlbGVjdGVkLnB1c2goby5pZCksYT10aGlzLmdldF9ub2RlKG8sITApLGEmJmEubGVuZ3RoJiZhLmF0dHIoXCJhcmlhLXNlbGVjdGVkXCIsITApLmNoaWxkcmVuKFwiLmpzdHJlZS1hbmNob3JcIikuYWRkQ2xhc3MoYz9cImpzdHJlZS1jbGlja2VkXCI6XCJqc3RyZWUtY2hlY2tlZFwiKSxvPXRoaXMuZ2V0X25vZGUoby5wYXJlbnQpfX0sdGhpcykpLm9uKFwibW92ZV9ub2RlLmpzdHJlZVwiLGUucHJveHkoZnVuY3Rpb24odCxpKXt2YXIgcixzLG4sYSxvLGQ9aS5pc19tdWx0aSxjPWkub2xkX3BhcmVudCxsPXRoaXMuZ2V0X25vZGUoaS5wYXJlbnQpLGg9dGhpcy5fbW9kZWwuZGF0YSxfPXRoaXMuc2V0dGluZ3MuY2hlY2tib3gudGllX3NlbGVjdGlvbjtpZighZClmb3Iocj10aGlzLmdldF9ub2RlKGMpO3ImJnIuaWQhPT1lLmpzdHJlZS5yb290JiYhci5zdGF0ZVtfP1wic2VsZWN0ZWRcIjpcImNoZWNrZWRcIl07KXtmb3Iocz0wLG49MCxhPXIuY2hpbGRyZW4ubGVuZ3RoO2E+bjtuKyspcys9aFtyLmNoaWxkcmVuW25dXS5zdGF0ZVtfP1wic2VsZWN0ZWRcIjpcImNoZWNrZWRcIl07aWYoIShhPjAmJnM9PT1hKSlicmVhaztyLnN0YXRlW18/XCJzZWxlY3RlZFwiOlwiY2hlY2tlZFwiXT0hMCx0aGlzLl9kYXRhW18/XCJjb3JlXCI6XCJjaGVja2JveFwiXS5zZWxlY3RlZC5wdXNoKHIuaWQpLG89dGhpcy5nZXRfbm9kZShyLCEwKSxvJiZvLmxlbmd0aCYmby5hdHRyKFwiYXJpYS1zZWxlY3RlZFwiLCEwKS5jaGlsZHJlbihcIi5qc3RyZWUtYW5jaG9yXCIpLmFkZENsYXNzKF8/XCJqc3RyZWUtY2xpY2tlZFwiOlwianN0cmVlLWNoZWNrZWRcIikscj10aGlzLmdldF9ub2RlKHIucGFyZW50KX1mb3Iocj1sO3ImJnIuaWQhPT1lLmpzdHJlZS5yb290Oyl7Zm9yKHM9MCxuPTAsYT1yLmNoaWxkcmVuLmxlbmd0aDthPm47bisrKXMrPWhbci5jaGlsZHJlbltuXV0uc3RhdGVbXz9cInNlbGVjdGVkXCI6XCJjaGVja2VkXCJdO2lmKHM9PT1hKXIuc3RhdGVbXz9cInNlbGVjdGVkXCI6XCJjaGVja2VkXCJdfHwoci5zdGF0ZVtfP1wic2VsZWN0ZWRcIjpcImNoZWNrZWRcIl09ITAsdGhpcy5fZGF0YVtfP1wiY29yZVwiOlwiY2hlY2tib3hcIl0uc2VsZWN0ZWQucHVzaChyLmlkKSxvPXRoaXMuZ2V0X25vZGUociwhMCksbyYmby5sZW5ndGgmJm8uYXR0cihcImFyaWEtc2VsZWN0ZWRcIiwhMCkuY2hpbGRyZW4oXCIuanN0cmVlLWFuY2hvclwiKS5hZGRDbGFzcyhfP1wianN0cmVlLWNsaWNrZWRcIjpcImpzdHJlZS1jaGVja2VkXCIpKTtlbHNle2lmKCFyLnN0YXRlW18/XCJzZWxlY3RlZFwiOlwiY2hlY2tlZFwiXSlicmVhaztyLnN0YXRlW18/XCJzZWxlY3RlZFwiOlwiY2hlY2tlZFwiXT0hMSx0aGlzLl9kYXRhW18/XCJjb3JlXCI6XCJjaGVja2JveFwiXS5zZWxlY3RlZD1lLnZha2F0YS5hcnJheV9yZW1vdmVfaXRlbSh0aGlzLl9kYXRhW18/XCJjb3JlXCI6XCJjaGVja2JveFwiXS5zZWxlY3RlZCxyLmlkKSxvPXRoaXMuZ2V0X25vZGUociwhMCksbyYmby5sZW5ndGgmJm8uYXR0cihcImFyaWEtc2VsZWN0ZWRcIiwhMSkuY2hpbGRyZW4oXCIuanN0cmVlLWFuY2hvclwiKS5yZW1vdmVDbGFzcyhfP1wianN0cmVlLWNsaWNrZWRcIjpcImpzdHJlZS1jaGVja2VkXCIpfXI9dGhpcy5nZXRfbm9kZShyLnBhcmVudCl9fSx0aGlzKSl9LHRoaXMuX3VuZGV0ZXJtaW5lZD1mdW5jdGlvbigpe2lmKG51bGwhPT10aGlzLmVsZW1lbnQpe3ZhciBpLHIscyxuLGE9e30sbz10aGlzLl9tb2RlbC5kYXRhLGQ9dGhpcy5zZXR0aW5ncy5jaGVja2JveC50aWVfc2VsZWN0aW9uLGM9dGhpcy5fZGF0YVtkP1wiY29yZVwiOlwiY2hlY2tib3hcIl0uc2VsZWN0ZWQsbD1bXSxoPXRoaXM7Zm9yKGk9MCxyPWMubGVuZ3RoO3I+aTtpKyspaWYob1tjW2ldXSYmb1tjW2ldXS5wYXJlbnRzKWZvcihzPTAsbj1vW2NbaV1dLnBhcmVudHMubGVuZ3RoO24+cztzKyspYVtvW2NbaV1dLnBhcmVudHNbc11dPT09dCYmb1tjW2ldXS5wYXJlbnRzW3NdIT09ZS5qc3RyZWUucm9vdCYmKGFbb1tjW2ldXS5wYXJlbnRzW3NdXT0hMCxsLnB1c2gob1tjW2ldXS5wYXJlbnRzW3NdKSk7Zm9yKHRoaXMuZWxlbWVudC5maW5kKFwiLmpzdHJlZS1jbG9zZWRcIikubm90KFwiOmhhcyguanN0cmVlLWNoaWxkcmVuKVwiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQsYz1oLmdldF9ub2RlKHRoaXMpO2lmKGMuc3RhdGUubG9hZGVkKXtmb3IoaT0wLHI9Yy5jaGlsZHJlbl9kLmxlbmd0aDtyPmk7aSsrKWlmKGQ9b1tjLmNoaWxkcmVuX2RbaV1dLCFkLnN0YXRlLmxvYWRlZCYmZC5vcmlnaW5hbCYmZC5vcmlnaW5hbC5zdGF0ZSYmZC5vcmlnaW5hbC5zdGF0ZS51bmRldGVybWluZWQmJmQub3JpZ2luYWwuc3RhdGUudW5kZXRlcm1pbmVkPT09ITApZm9yKGFbZC5pZF09PT10JiZkLmlkIT09ZS5qc3RyZWUucm9vdCYmKGFbZC5pZF09ITAsbC5wdXNoKGQuaWQpKSxzPTAsbj1kLnBhcmVudHMubGVuZ3RoO24+cztzKyspYVtkLnBhcmVudHNbc11dPT09dCYmZC5wYXJlbnRzW3NdIT09ZS5qc3RyZWUucm9vdCYmKGFbZC5wYXJlbnRzW3NdXT0hMCxsLnB1c2goZC5wYXJlbnRzW3NdKSl9ZWxzZSBpZihjLm9yaWdpbmFsJiZjLm9yaWdpbmFsLnN0YXRlJiZjLm9yaWdpbmFsLnN0YXRlLnVuZGV0ZXJtaW5lZCYmYy5vcmlnaW5hbC5zdGF0ZS51bmRldGVybWluZWQ9PT0hMClmb3IoYVtjLmlkXT09PXQmJmMuaWQhPT1lLmpzdHJlZS5yb290JiYoYVtjLmlkXT0hMCxsLnB1c2goYy5pZCkpLHM9MCxuPWMucGFyZW50cy5sZW5ndGg7bj5zO3MrKylhW2MucGFyZW50c1tzXV09PT10JiZjLnBhcmVudHNbc10hPT1lLmpzdHJlZS5yb290JiYoYVtjLnBhcmVudHNbc11dPSEwLGwucHVzaChjLnBhcmVudHNbc10pKX0pLHRoaXMuZWxlbWVudC5maW5kKFwiLmpzdHJlZS11bmRldGVybWluZWRcIikucmVtb3ZlQ2xhc3MoXCJqc3RyZWUtdW5kZXRlcm1pbmVkXCIpLGk9MCxyPWwubGVuZ3RoO3I+aTtpKyspb1tsW2ldXS5zdGF0ZVtkP1wic2VsZWN0ZWRcIjpcImNoZWNrZWRcIl18fChjPXRoaXMuZ2V0X25vZGUobFtpXSwhMCksYyYmYy5sZW5ndGgmJmMuY2hpbGRyZW4oXCIuanN0cmVlLWFuY2hvclwiKS5jaGlsZHJlbihcIi5qc3RyZWUtY2hlY2tib3hcIikuYWRkQ2xhc3MoXCJqc3RyZWUtdW5kZXRlcm1pbmVkXCIpKX19LHRoaXMucmVkcmF3X25vZGU9ZnVuY3Rpb24odCxpLHMsbil7aWYodD1yLnJlZHJhd19ub2RlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIGEsbyxkPW51bGwsYz1udWxsO2ZvcihhPTAsbz10LmNoaWxkTm9kZXMubGVuZ3RoO28+YTthKyspaWYodC5jaGlsZE5vZGVzW2FdJiZ0LmNoaWxkTm9kZXNbYV0uY2xhc3NOYW1lJiYtMSE9PXQuY2hpbGROb2Rlc1thXS5jbGFzc05hbWUuaW5kZXhPZihcImpzdHJlZS1hbmNob3JcIikpe2Q9dC5jaGlsZE5vZGVzW2FdO2JyZWFrfWQmJighdGhpcy5zZXR0aW5ncy5jaGVja2JveC50aWVfc2VsZWN0aW9uJiZ0aGlzLl9tb2RlbC5kYXRhW3QuaWRdLnN0YXRlLmNoZWNrZWQmJihkLmNsYXNzTmFtZSs9XCIganN0cmVlLWNoZWNrZWRcIiksYz1fLmNsb25lTm9kZSghMSksdGhpcy5fbW9kZWwuZGF0YVt0LmlkXS5zdGF0ZS5jaGVja2JveF9kaXNhYmxlZCYmKGMuY2xhc3NOYW1lKz1cIiBqc3RyZWUtY2hlY2tib3gtZGlzYWJsZWRcIiksZC5pbnNlcnRCZWZvcmUoYyxkLmNoaWxkTm9kZXNbMF0pKX1yZXR1cm4gc3x8LTE9PT10aGlzLnNldHRpbmdzLmNoZWNrYm94LmNhc2NhZGUuaW5kZXhPZihcInVuZGV0ZXJtaW5lZFwiKXx8KHRoaXMuX2RhdGEuY2hlY2tib3gudXRvJiZjbGVhclRpbWVvdXQodGhpcy5fZGF0YS5jaGVja2JveC51dG8pLHRoaXMuX2RhdGEuY2hlY2tib3gudXRvPXNldFRpbWVvdXQoZS5wcm94eSh0aGlzLl91bmRldGVybWluZWQsdGhpcyksNTApKSx0fSx0aGlzLnNob3dfY2hlY2tib3hlcz1mdW5jdGlvbigpe3RoaXMuX2RhdGEuY29yZS50aGVtZXMuY2hlY2tib3hlcz0hMCx0aGlzLmdldF9jb250YWluZXJfdWwoKS5yZW1vdmVDbGFzcyhcImpzdHJlZS1uby1jaGVja2JveGVzXCIpfSx0aGlzLmhpZGVfY2hlY2tib3hlcz1mdW5jdGlvbigpe3RoaXMuX2RhdGEuY29yZS50aGVtZXMuY2hlY2tib3hlcz0hMSx0aGlzLmdldF9jb250YWluZXJfdWwoKS5hZGRDbGFzcyhcImpzdHJlZS1uby1jaGVja2JveGVzXCIpfSx0aGlzLnRvZ2dsZV9jaGVja2JveGVzPWZ1bmN0aW9uKCl7dGhpcy5fZGF0YS5jb3JlLnRoZW1lcy5jaGVja2JveGVzP3RoaXMuaGlkZV9jaGVja2JveGVzKCk6dGhpcy5zaG93X2NoZWNrYm94ZXMoKX0sdGhpcy5pc191bmRldGVybWluZWQ9ZnVuY3Rpb24odCl7dD10aGlzLmdldF9ub2RlKHQpO3ZhciBpLHIscz10aGlzLnNldHRpbmdzLmNoZWNrYm94LmNhc2NhZGUsbj10aGlzLnNldHRpbmdzLmNoZWNrYm94LnRpZV9zZWxlY3Rpb24sYT10aGlzLl9kYXRhW24/XCJjb3JlXCI6XCJjaGVja2JveFwiXS5zZWxlY3RlZCxvPXRoaXMuX21vZGVsLmRhdGE7aWYoIXR8fHQuc3RhdGVbbj9cInNlbGVjdGVkXCI6XCJjaGVja2VkXCJdPT09ITB8fC0xPT09cy5pbmRleE9mKFwidW5kZXRlcm1pbmVkXCIpfHwtMT09PXMuaW5kZXhPZihcImRvd25cIikmJi0xPT09cy5pbmRleE9mKFwidXBcIikpcmV0dXJuITE7aWYoIXQuc3RhdGUubG9hZGVkJiZ0Lm9yaWdpbmFsLnN0YXRlLnVuZGV0ZXJtaW5lZD09PSEwKXJldHVybiEwO2ZvcihpPTAscj10LmNoaWxkcmVuX2QubGVuZ3RoO3I+aTtpKyspaWYoLTEhPT1lLmluQXJyYXkodC5jaGlsZHJlbl9kW2ldLGEpfHwhb1t0LmNoaWxkcmVuX2RbaV1dLnN0YXRlLmxvYWRlZCYmb1t0LmNoaWxkcmVuX2RbaV1dLm9yaWdpbmFsLnN0YXRlLnVuZGV0ZXJtaW5lZClyZXR1cm4hMDtyZXR1cm4hMX0sdGhpcy5kaXNhYmxlX2NoZWNrYm94PWZ1bmN0aW9uKHQpe3ZhciBpLHIscztpZihlLmlzQXJyYXkodCkpe2Zvcih0PXQuc2xpY2UoKSxpPTAscj10Lmxlbmd0aDtyPmk7aSsrKXRoaXMuZGlzYWJsZV9jaGVja2JveCh0W2ldKTtyZXR1cm4hMH1yZXR1cm4gdD10aGlzLmdldF9ub2RlKHQpLHQmJnQuaWQhPT1lLmpzdHJlZS5yb290PyhzPXRoaXMuZ2V0X25vZGUodCwhMCksdm9pZCh0LnN0YXRlLmNoZWNrYm94X2Rpc2FibGVkfHwodC5zdGF0ZS5jaGVja2JveF9kaXNhYmxlZD0hMCxzJiZzLmxlbmd0aCYmcy5jaGlsZHJlbihcIi5qc3RyZWUtYW5jaG9yXCIpLmNoaWxkcmVuKFwiLmpzdHJlZS1jaGVja2JveFwiKS5hZGRDbGFzcyhcImpzdHJlZS1jaGVja2JveC1kaXNhYmxlZFwiKSx0aGlzLnRyaWdnZXIoXCJkaXNhYmxlX2NoZWNrYm94XCIse25vZGU6dH0pKSkpOiExfSx0aGlzLmVuYWJsZV9jaGVja2JveD1mdW5jdGlvbih0KXt2YXIgaSxyLHM7aWYoZS5pc0FycmF5KHQpKXtmb3IodD10LnNsaWNlKCksaT0wLHI9dC5sZW5ndGg7cj5pO2krKyl0aGlzLmVuYWJsZV9jaGVja2JveCh0W2ldKTtyZXR1cm4hMH1yZXR1cm4gdD10aGlzLmdldF9ub2RlKHQpLHQmJnQuaWQhPT1lLmpzdHJlZS5yb290PyhzPXRoaXMuZ2V0X25vZGUodCwhMCksdm9pZCh0LnN0YXRlLmNoZWNrYm94X2Rpc2FibGVkJiYodC5zdGF0ZS5jaGVja2JveF9kaXNhYmxlZD0hMSxzJiZzLmxlbmd0aCYmcy5jaGlsZHJlbihcIi5qc3RyZWUtYW5jaG9yXCIpLmNoaWxkcmVuKFwiLmpzdHJlZS1jaGVja2JveFwiKS5yZW1vdmVDbGFzcyhcImpzdHJlZS1jaGVja2JveC1kaXNhYmxlZFwiKSx0aGlzLnRyaWdnZXIoXCJlbmFibGVfY2hlY2tib3hcIix7bm9kZTp0fSkpKSk6ITF9LHRoaXMuYWN0aXZhdGVfbm9kZT1mdW5jdGlvbih0LGkpe3JldHVybiBlKGkudGFyZ2V0KS5oYXNDbGFzcyhcImpzdHJlZS1jaGVja2JveC1kaXNhYmxlZFwiKT8hMToodGhpcy5zZXR0aW5ncy5jaGVja2JveC50aWVfc2VsZWN0aW9uJiYodGhpcy5zZXR0aW5ncy5jaGVja2JveC53aG9sZV9ub2RlfHxlKGkudGFyZ2V0KS5oYXNDbGFzcyhcImpzdHJlZS1jaGVja2JveFwiKSkmJihpLmN0cmxLZXk9ITApLHRoaXMuc2V0dGluZ3MuY2hlY2tib3gudGllX3NlbGVjdGlvbnx8IXRoaXMuc2V0dGluZ3MuY2hlY2tib3gud2hvbGVfbm9kZSYmIWUoaS50YXJnZXQpLmhhc0NsYXNzKFwianN0cmVlLWNoZWNrYm94XCIpP3IuYWN0aXZhdGVfbm9kZS5jYWxsKHRoaXMsdCxpKTp0aGlzLmlzX2Rpc2FibGVkKHQpPyExOih0aGlzLmlzX2NoZWNrZWQodCk/dGhpcy51bmNoZWNrX25vZGUodCxpKTp0aGlzLmNoZWNrX25vZGUodCxpKSx2b2lkIHRoaXMudHJpZ2dlcihcImFjdGl2YXRlX25vZGVcIix7bm9kZTp0aGlzLmdldF9ub2RlKHQpfSkpKX0sdGhpcy5jaGVja19ub2RlPWZ1bmN0aW9uKHQsaSl7aWYodGhpcy5zZXR0aW5ncy5jaGVja2JveC50aWVfc2VsZWN0aW9uKXJldHVybiB0aGlzLnNlbGVjdF9ub2RlKHQsITEsITAsaSk7dmFyIHIscyxuO2lmKGUuaXNBcnJheSh0KSl7Zm9yKHQ9dC5zbGljZSgpLHM9MCxuPXQubGVuZ3RoO24+cztzKyspdGhpcy5jaGVja19ub2RlKHRbc10saSk7cmV0dXJuITB9cmV0dXJuIHQ9dGhpcy5nZXRfbm9kZSh0KSx0JiZ0LmlkIT09ZS5qc3RyZWUucm9vdD8ocj10aGlzLmdldF9ub2RlKHQsITApLHZvaWQodC5zdGF0ZS5jaGVja2VkfHwodC5zdGF0ZS5jaGVja2VkPSEwLHRoaXMuX2RhdGEuY2hlY2tib3guc2VsZWN0ZWQucHVzaCh0LmlkKSxyJiZyLmxlbmd0aCYmci5jaGlsZHJlbihcIi5qc3RyZWUtYW5jaG9yXCIpLmFkZENsYXNzKFwianN0cmVlLWNoZWNrZWRcIiksdGhpcy50cmlnZ2VyKFwiY2hlY2tfbm9kZVwiLHtub2RlOnQsc2VsZWN0ZWQ6dGhpcy5fZGF0YS5jaGVja2JveC5zZWxlY3RlZCxldmVudDppfSkpKSk6ITF9LHRoaXMudW5jaGVja19ub2RlPWZ1bmN0aW9uKHQsaSl7aWYodGhpcy5zZXR0aW5ncy5jaGVja2JveC50aWVfc2VsZWN0aW9uKXJldHVybiB0aGlzLmRlc2VsZWN0X25vZGUodCwhMSxpKTt2YXIgcixzLG47aWYoZS5pc0FycmF5KHQpKXtmb3IodD10LnNsaWNlKCkscj0wLHM9dC5sZW5ndGg7cz5yO3IrKyl0aGlzLnVuY2hlY2tfbm9kZSh0W3JdLGkpO3JldHVybiEwfXJldHVybiB0PXRoaXMuZ2V0X25vZGUodCksdCYmdC5pZCE9PWUuanN0cmVlLnJvb3Q/KG49dGhpcy5nZXRfbm9kZSh0LCEwKSx2b2lkKHQuc3RhdGUuY2hlY2tlZCYmKHQuc3RhdGUuY2hlY2tlZD0hMSx0aGlzLl9kYXRhLmNoZWNrYm94LnNlbGVjdGVkPWUudmFrYXRhLmFycmF5X3JlbW92ZV9pdGVtKHRoaXMuX2RhdGEuY2hlY2tib3guc2VsZWN0ZWQsdC5pZCksbi5sZW5ndGgmJm4uY2hpbGRyZW4oXCIuanN0cmVlLWFuY2hvclwiKS5yZW1vdmVDbGFzcyhcImpzdHJlZS1jaGVja2VkXCIpLHRoaXMudHJpZ2dlcihcInVuY2hlY2tfbm9kZVwiLHtub2RlOnQsc2VsZWN0ZWQ6dGhpcy5fZGF0YS5jaGVja2JveC5zZWxlY3RlZCxldmVudDppfSkpKSk6ITF9LHRoaXMuY2hlY2tfYWxsPWZ1bmN0aW9uKCl7aWYodGhpcy5zZXR0aW5ncy5jaGVja2JveC50aWVfc2VsZWN0aW9uKXJldHVybiB0aGlzLnNlbGVjdF9hbGwoKTt2YXIgdCxpO3RoaXMuX2RhdGEuY2hlY2tib3guc2VsZWN0ZWQuY29uY2F0KFtdKTtmb3IodGhpcy5fZGF0YS5jaGVja2JveC5zZWxlY3RlZD10aGlzLl9tb2RlbC5kYXRhW2UuanN0cmVlLnJvb3RdLmNoaWxkcmVuX2QuY29uY2F0KCksdD0wLGk9dGhpcy5fZGF0YS5jaGVja2JveC5zZWxlY3RlZC5sZW5ndGg7aT50O3QrKyl0aGlzLl9tb2RlbC5kYXRhW3RoaXMuX2RhdGEuY2hlY2tib3guc2VsZWN0ZWRbdF1dJiYodGhpcy5fbW9kZWwuZGF0YVt0aGlzLl9kYXRhLmNoZWNrYm94LnNlbGVjdGVkW3RdXS5zdGF0ZS5jaGVja2VkPSEwKTt0aGlzLnJlZHJhdyghMCksdGhpcy50cmlnZ2VyKFwiY2hlY2tfYWxsXCIse3NlbGVjdGVkOnRoaXMuX2RhdGEuY2hlY2tib3guc2VsZWN0ZWR9KX0sdGhpcy51bmNoZWNrX2FsbD1mdW5jdGlvbigpe2lmKHRoaXMuc2V0dGluZ3MuY2hlY2tib3gudGllX3NlbGVjdGlvbilyZXR1cm4gdGhpcy5kZXNlbGVjdF9hbGwoKTt2YXIgZSx0LGk9dGhpcy5fZGF0YS5jaGVja2JveC5zZWxlY3RlZC5jb25jYXQoW10pO2ZvcihlPTAsdD10aGlzLl9kYXRhLmNoZWNrYm94LnNlbGVjdGVkLmxlbmd0aDt0PmU7ZSsrKXRoaXMuX21vZGVsLmRhdGFbdGhpcy5fZGF0YS5jaGVja2JveC5zZWxlY3RlZFtlXV0mJih0aGlzLl9tb2RlbC5kYXRhW3RoaXMuX2RhdGEuY2hlY2tib3guc2VsZWN0ZWRbZV1dLnN0YXRlLmNoZWNrZWQ9ITEpO3RoaXMuX2RhdGEuY2hlY2tib3guc2VsZWN0ZWQ9W10sdGhpcy5lbGVtZW50LmZpbmQoXCIuanN0cmVlLWNoZWNrZWRcIikucmVtb3ZlQ2xhc3MoXCJqc3RyZWUtY2hlY2tlZFwiKSx0aGlzLnRyaWdnZXIoXCJ1bmNoZWNrX2FsbFwiLHtzZWxlY3RlZDp0aGlzLl9kYXRhLmNoZWNrYm94LnNlbGVjdGVkLG5vZGU6aX0pfSx0aGlzLmlzX2NoZWNrZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2V0dGluZ3MuY2hlY2tib3gudGllX3NlbGVjdGlvbj90aGlzLmlzX3NlbGVjdGVkKHQpOih0PXRoaXMuZ2V0X25vZGUodCksdCYmdC5pZCE9PWUuanN0cmVlLnJvb3Q/dC5zdGF0ZS5jaGVja2VkOiExKX0sdGhpcy5nZXRfY2hlY2tlZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zZXR0aW5ncy5jaGVja2JveC50aWVfc2VsZWN0aW9uP3RoaXMuZ2V0X3NlbGVjdGVkKHQpOnQ/ZS5tYXAodGhpcy5fZGF0YS5jaGVja2JveC5zZWxlY3RlZCxlLnByb3h5KGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmdldF9ub2RlKGUpfSx0aGlzKSk6dGhpcy5fZGF0YS5jaGVja2JveC5zZWxlY3RlZH0sdGhpcy5nZXRfdG9wX2NoZWNrZWQ9ZnVuY3Rpb24odCl7aWYodGhpcy5zZXR0aW5ncy5jaGVja2JveC50aWVfc2VsZWN0aW9uKXJldHVybiB0aGlzLmdldF90b3Bfc2VsZWN0ZWQodCk7dmFyIGkscixzLG4sYT10aGlzLmdldF9jaGVja2VkKCEwKSxvPXt9O2ZvcihpPTAscj1hLmxlbmd0aDtyPmk7aSsrKW9bYVtpXS5pZF09YVtpXTtmb3IoaT0wLHI9YS5sZW5ndGg7cj5pO2krKylmb3Iocz0wLG49YVtpXS5jaGlsZHJlbl9kLmxlbmd0aDtuPnM7cysrKW9bYVtpXS5jaGlsZHJlbl9kW3NdXSYmZGVsZXRlIG9bYVtpXS5jaGlsZHJlbl9kW3NdXTthPVtdO2ZvcihpIGluIG8pby5oYXNPd25Qcm9wZXJ0eShpKSYmYS5wdXNoKGkpO3JldHVybiB0P2UubWFwKGEsZS5wcm94eShmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5nZXRfbm9kZShlKX0sdGhpcykpOmF9LHRoaXMuZ2V0X2JvdHRvbV9jaGVja2VkPWZ1bmN0aW9uKHQpe2lmKHRoaXMuc2V0dGluZ3MuY2hlY2tib3gudGllX3NlbGVjdGlvbilyZXR1cm4gdGhpcy5nZXRfYm90dG9tX3NlbGVjdGVkKHQpO3ZhciBpLHIscz10aGlzLmdldF9jaGVja2VkKCEwKSxuPVtdO2ZvcihpPTAscj1zLmxlbmd0aDtyPmk7aSsrKXNbaV0uY2hpbGRyZW4ubGVuZ3RofHxuLnB1c2goc1tpXS5pZCk7cmV0dXJuIHQ/ZS5tYXAobixlLnByb3h5KGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmdldF9ub2RlKGUpfSx0aGlzKSk6bn0sdGhpcy5sb2FkX25vZGU9ZnVuY3Rpb24odCxpKXt2YXIgcyxuLGEsbztpZighZS5pc0FycmF5KHQpJiYhdGhpcy5zZXR0aW5ncy5jaGVja2JveC50aWVfc2VsZWN0aW9uJiYobz10aGlzLmdldF9ub2RlKHQpLG8mJm8uc3RhdGUubG9hZGVkKSlmb3Iocz0wLG49by5jaGlsZHJlbl9kLmxlbmd0aDtuPnM7cysrKXRoaXMuX21vZGVsLmRhdGFbby5jaGlsZHJlbl9kW3NdXS5zdGF0ZS5jaGVja2VkJiYoYT0hMCx0aGlzLl9kYXRhLmNoZWNrYm94LnNlbGVjdGVkPWUudmFrYXRhLmFycmF5X3JlbW92ZV9pdGVtKHRoaXMuX2RhdGEuY2hlY2tib3guc2VsZWN0ZWQsby5jaGlsZHJlbl9kW3NdKSk7cmV0dXJuIHIubG9hZF9ub2RlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdGhpcy5nZXRfc3RhdGU9ZnVuY3Rpb24oKXt2YXIgZT1yLmdldF9zdGF0ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHRoaXMuc2V0dGluZ3MuY2hlY2tib3gudGllX3NlbGVjdGlvbj9lOihlLmNoZWNrYm94PXRoaXMuX2RhdGEuY2hlY2tib3guc2VsZWN0ZWQuc2xpY2UoKSxlKX0sdGhpcy5zZXRfc3RhdGU9ZnVuY3Rpb24odCxpKXt2YXIgcz1yLnNldF9zdGF0ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYocyYmdC5jaGVja2JveCl7aWYoIXRoaXMuc2V0dGluZ3MuY2hlY2tib3gudGllX3NlbGVjdGlvbil7dGhpcy51bmNoZWNrX2FsbCgpO3ZhciBuPXRoaXM7ZS5lYWNoKHQuY2hlY2tib3gsZnVuY3Rpb24oZSx0KXtuLmNoZWNrX25vZGUodCl9KX1yZXR1cm4gZGVsZXRlIHQuY2hlY2tib3gsdGhpcy5zZXRfc3RhdGUodCxpKSwhMX1yZXR1cm4gc30sdGhpcy5yZWZyZXNoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuc2V0dGluZ3MuY2hlY2tib3gudGllX3NlbGVjdGlvbnx8KHRoaXMuX2RhdGEuY2hlY2tib3guc2VsZWN0ZWQ9W10pLHIucmVmcmVzaC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSxlLmpzdHJlZS5kZWZhdWx0cy5jb25kaXRpb25hbHNlbGVjdD1mdW5jdGlvbigpe3JldHVybiEwfSxlLmpzdHJlZS5wbHVnaW5zLmNvbmRpdGlvbmFsc2VsZWN0PWZ1bmN0aW9uKGUsdCl7dGhpcy5hY3RpdmF0ZV9ub2RlPWZ1bmN0aW9uKGUsaSl7dGhpcy5zZXR0aW5ncy5jb25kaXRpb25hbHNlbGVjdC5jYWxsKHRoaXMsdGhpcy5nZXRfbm9kZShlKSxpKSYmdC5hY3RpdmF0ZV9ub2RlLmNhbGwodGhpcyxlLGkpfX0sZS5qc3RyZWUuZGVmYXVsdHMuY29udGV4dG1lbnU9e3NlbGVjdF9ub2RlOiEwLHNob3dfYXRfbm9kZTohMCxpdGVtczpmdW5jdGlvbih0LGkpe3JldHVybntjcmVhdGU6e3NlcGFyYXRvcl9iZWZvcmU6ITEsc2VwYXJhdG9yX2FmdGVyOiEwLF9kaXNhYmxlZDohMSxsYWJlbDpcIkNyZWF0ZVwiLGFjdGlvbjpmdW5jdGlvbih0KXt2YXIgaT1lLmpzdHJlZS5yZWZlcmVuY2UodC5yZWZlcmVuY2UpLHI9aS5nZXRfbm9kZSh0LnJlZmVyZW5jZSk7aS5jcmVhdGVfbm9kZShyLHt9LFwibGFzdFwiLGZ1bmN0aW9uKGUpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtpLmVkaXQoZSl9LDApfSl9fSxyZW5hbWU6e3NlcGFyYXRvcl9iZWZvcmU6ITEsc2VwYXJhdG9yX2FmdGVyOiExLF9kaXNhYmxlZDohMSxsYWJlbDpcIlJlbmFtZVwiLGFjdGlvbjpmdW5jdGlvbih0KXt2YXIgaT1lLmpzdHJlZS5yZWZlcmVuY2UodC5yZWZlcmVuY2UpLHI9aS5nZXRfbm9kZSh0LnJlZmVyZW5jZSk7aS5lZGl0KHIpfX0scmVtb3ZlOntzZXBhcmF0b3JfYmVmb3JlOiExLGljb246ITEsc2VwYXJhdG9yX2FmdGVyOiExLF9kaXNhYmxlZDohMSxsYWJlbDpcIkRlbGV0ZVwiLGFjdGlvbjpmdW5jdGlvbih0KXt2YXIgaT1lLmpzdHJlZS5yZWZlcmVuY2UodC5yZWZlcmVuY2UpLHI9aS5nZXRfbm9kZSh0LnJlZmVyZW5jZSk7aS5pc19zZWxlY3RlZChyKT9pLmRlbGV0ZV9ub2RlKGkuZ2V0X3NlbGVjdGVkKCkpOmkuZGVsZXRlX25vZGUocil9fSxjY3A6e3NlcGFyYXRvcl9iZWZvcmU6ITAsaWNvbjohMSxzZXBhcmF0b3JfYWZ0ZXI6ITEsbGFiZWw6XCJFZGl0XCIsYWN0aW9uOiExLHN1Ym1lbnU6e2N1dDp7c2VwYXJhdG9yX2JlZm9yZTohMSxzZXBhcmF0b3JfYWZ0ZXI6ITEsbGFiZWw6XCJDdXRcIixhY3Rpb246ZnVuY3Rpb24odCl7dmFyIGk9ZS5qc3RyZWUucmVmZXJlbmNlKHQucmVmZXJlbmNlKSxyPWkuZ2V0X25vZGUodC5yZWZlcmVuY2UpO2kuaXNfc2VsZWN0ZWQocik/aS5jdXQoaS5nZXRfdG9wX3NlbGVjdGVkKCkpOmkuY3V0KHIpfX0sY29weTp7c2VwYXJhdG9yX2JlZm9yZTohMSxpY29uOiExLHNlcGFyYXRvcl9hZnRlcjohMSxsYWJlbDpcIkNvcHlcIixhY3Rpb246ZnVuY3Rpb24odCl7dmFyIGk9ZS5qc3RyZWUucmVmZXJlbmNlKHQucmVmZXJlbmNlKSxyPWkuZ2V0X25vZGUodC5yZWZlcmVuY2UpO2kuaXNfc2VsZWN0ZWQocik/aS5jb3B5KGkuZ2V0X3RvcF9zZWxlY3RlZCgpKTppLmNvcHkocil9fSxwYXN0ZTp7c2VwYXJhdG9yX2JlZm9yZTohMSxpY29uOiExLF9kaXNhYmxlZDpmdW5jdGlvbih0KXtyZXR1cm4hZS5qc3RyZWUucmVmZXJlbmNlKHQucmVmZXJlbmNlKS5jYW5fcGFzdGUoKX0sc2VwYXJhdG9yX2FmdGVyOiExLGxhYmVsOlwiUGFzdGVcIixhY3Rpb246ZnVuY3Rpb24odCl7dmFyIGk9ZS5qc3RyZWUucmVmZXJlbmNlKHQucmVmZXJlbmNlKSxyPWkuZ2V0X25vZGUodC5yZWZlcmVuY2UpO2kucGFzdGUocil9fX19fX19LGUuanN0cmVlLnBsdWdpbnMuY29udGV4dG1lbnU9ZnVuY3Rpb24oaSxyKXt0aGlzLmJpbmQ9ZnVuY3Rpb24oKXtyLmJpbmQuY2FsbCh0aGlzKTt2YXIgdCxpLHM9MCxuPW51bGw7dGhpcy5lbGVtZW50Lm9uKFwiY29udGV4dG1lbnUuanN0cmVlXCIsXCIuanN0cmVlLWFuY2hvclwiLGUucHJveHkoZnVuY3Rpb24oZSx0KXtlLnByZXZlbnREZWZhdWx0KCkscz1lLmN0cmxLZXk/K25ldyBEYXRlOjAsKHR8fG4pJiYocz0rbmV3IERhdGUrMWU0KSxuJiZjbGVhclRpbWVvdXQobiksdGhpcy5pc19sb2FkaW5nKGUuY3VycmVudFRhcmdldCl8fHRoaXMuc2hvd19jb250ZXh0bWVudShlLmN1cnJlbnRUYXJnZXQsZS5wYWdlWCxlLnBhZ2VZLGUpfSx0aGlzKSkub24oXCJjbGljay5qc3RyZWVcIixcIi5qc3RyZWUtYW5jaG9yXCIsZS5wcm94eShmdW5jdGlvbih0KXt0aGlzLl9kYXRhLmNvbnRleHRtZW51LnZpc2libGUmJighc3x8K25ldyBEYXRlLXM+MjUwKSYmZS52YWthdGEuY29udGV4dC5oaWRlKCkscz0wfSx0aGlzKSkub24oXCJ0b3VjaHN0YXJ0LmpzdHJlZVwiLFwiLmpzdHJlZS1hbmNob3JcIixmdW5jdGlvbihyKXtyLm9yaWdpbmFsRXZlbnQmJnIub3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlcyYmci5vcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdJiYodD1yLnBhZ2VYLGk9ci5wYWdlWSxuPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlKHIuY3VycmVudFRhcmdldCkudHJpZ2dlcihcImNvbnRleHRtZW51XCIsITApfSw3NTApKX0pLm9uKFwidG91Y2htb3ZlLnZha2F0YS5qc3RyZWVcIixmdW5jdGlvbihlKXtuJiZlLm9yaWdpbmFsRXZlbnQmJmUub3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlcyYmZS5vcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdJiYoTWF0aC5hYnModC1lLnBhZ2VYKT41MHx8TWF0aC5hYnMoaS1lLnBhZ2VZKT41MCkmJmNsZWFyVGltZW91dChuKX0pLm9uKFwidG91Y2hlbmQudmFrYXRhLmpzdHJlZVwiLGZ1bmN0aW9uKGUpe24mJmNsZWFyVGltZW91dChuKX0pLGUobCkub24oXCJjb250ZXh0X2hpZGUudmFrYXRhLmpzdHJlZVwiLGUucHJveHkoZnVuY3Rpb24oKXt0aGlzLl9kYXRhLmNvbnRleHRtZW51LnZpc2libGU9ITF9LHRoaXMpKX0sdGhpcy50ZWFyZG93bj1mdW5jdGlvbigpe3RoaXMuX2RhdGEuY29udGV4dG1lbnUudmlzaWJsZSYmZS52YWthdGEuY29udGV4dC5oaWRlKCksci50ZWFyZG93bi5jYWxsKHRoaXMpfSx0aGlzLnNob3dfY29udGV4dG1lbnU9ZnVuY3Rpb24oaSxyLHMsbil7aWYoaT10aGlzLmdldF9ub2RlKGkpLCFpfHxpLmlkPT09ZS5qc3RyZWUucm9vdClyZXR1cm4hMTt2YXIgYT10aGlzLnNldHRpbmdzLmNvbnRleHRtZW51LG89dGhpcy5nZXRfbm9kZShpLCEwKSxkPW8uY2hpbGRyZW4oXCIuanN0cmVlLWFuY2hvclwiKSxjPSExLGw9ITE7KGEuc2hvd19hdF9ub2RlfHxyPT09dHx8cz09PXQpJiYoYz1kLm9mZnNldCgpLHI9Yy5sZWZ0LHM9Yy50b3ArdGhpcy5fZGF0YS5jb3JlLmxpX2hlaWdodCksdGhpcy5zZXR0aW5ncy5jb250ZXh0bWVudS5zZWxlY3Rfbm9kZSYmIXRoaXMuaXNfc2VsZWN0ZWQoaSkmJnRoaXMuYWN0aXZhdGVfbm9kZShpLG4pLGw9YS5pdGVtcyxlLmlzRnVuY3Rpb24obCkmJihsPWwuY2FsbCh0aGlzLGksZS5wcm94eShmdW5jdGlvbihlKXt0aGlzLl9zaG93X2NvbnRleHRtZW51KGkscixzLGUpfSx0aGlzKSkpLGUuaXNQbGFpbk9iamVjdChsKSYmdGhpcy5fc2hvd19jb250ZXh0bWVudShpLHIscyxsKX0sdGhpcy5fc2hvd19jb250ZXh0bWVudT1mdW5jdGlvbih0LGkscixzKXt2YXIgbj10aGlzLmdldF9ub2RlKHQsITApLGE9bi5jaGlsZHJlbihcIi5qc3RyZWUtYW5jaG9yXCIpO2UobCkub25lKFwiY29udGV4dF9zaG93LnZha2F0YS5qc3RyZWVcIixlLnByb3h5KGZ1bmN0aW9uKHQsaSl7dmFyIHI9XCJqc3RyZWUtY29udGV4dG1lbnUganN0cmVlLVwiK3RoaXMuZ2V0X3RoZW1lKCkrXCItY29udGV4dG1lbnVcIjtlKGkuZWxlbWVudCkuYWRkQ2xhc3Mocil9LHRoaXMpKSx0aGlzLl9kYXRhLmNvbnRleHRtZW51LnZpc2libGU9ITAsZS52YWthdGEuY29udGV4dC5zaG93KGEse3g6aSx5OnJ9LHMpLHRoaXMudHJpZ2dlcihcInNob3dfY29udGV4dG1lbnVcIix7bm9kZTp0LHg6aSx5OnJ9KX19LGZ1bmN0aW9uKGUpe3ZhciB0PSExLGk9e2VsZW1lbnQ6ITEscmVmZXJlbmNlOiExLHBvc2l0aW9uX3g6MCxwb3NpdGlvbl95OjAsaXRlbXM6W10saHRtbDpcIlwiLGlzX3Zpc2libGU6ITF9O2UudmFrYXRhLmNvbnRleHQ9e3NldHRpbmdzOntoaWRlX29ubW91c2VsZWF2ZTowLGljb25zOiEwfSxfdHJpZ2dlcjpmdW5jdGlvbih0KXtlKGwpLnRyaWdnZXJIYW5kbGVyKFwiY29udGV4dF9cIit0K1wiLnZha2F0YVwiLHtyZWZlcmVuY2U6aS5yZWZlcmVuY2UsZWxlbWVudDppLmVsZW1lbnQscG9zaXRpb246e3g6aS5wb3NpdGlvbl94LHk6aS5wb3NpdGlvbl95fX0pfSxfZXhlY3V0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdD1pLml0ZW1zW3RdLHQmJighdC5fZGlzYWJsZWR8fGUuaXNGdW5jdGlvbih0Ll9kaXNhYmxlZCkmJiF0Ll9kaXNhYmxlZCh7aXRlbTp0LHJlZmVyZW5jZTppLnJlZmVyZW5jZSxlbGVtZW50OmkuZWxlbWVudH0pKSYmdC5hY3Rpb24/dC5hY3Rpb24uY2FsbChudWxsLHtpdGVtOnQscmVmZXJlbmNlOmkucmVmZXJlbmNlLGVsZW1lbnQ6aS5lbGVtZW50LHBvc2l0aW9uOnt4OmkucG9zaXRpb25feCx5OmkucG9zaXRpb25feX19KTohMX0sX3BhcnNlOmZ1bmN0aW9uKHQscil7aWYoIXQpcmV0dXJuITE7cnx8KGkuaHRtbD1cIlwiLGkuaXRlbXM9W10pO3ZhciBzLG49XCJcIixhPSExO3JldHVybiByJiYobis9XCI8dWw+XCIpLGUuZWFjaCh0LGZ1bmN0aW9uKHQscil7cmV0dXJuIHI/KGkuaXRlbXMucHVzaChyKSwhYSYmci5zZXBhcmF0b3JfYmVmb3JlJiYobis9XCI8bGkgY2xhc3M9J3Zha2F0YS1jb250ZXh0LXNlcGFyYXRvcic+PGEgaHJlZj0nIycgXCIrKGUudmFrYXRhLmNvbnRleHQuc2V0dGluZ3MuaWNvbnM/XCJcIjonc3R5bGU9XCJtYXJnaW4tbGVmdDowcHg7XCInKStcIj4mIzE2MDs8L2E+PC9saT5cIiksYT0hMSxuKz1cIjxsaSBjbGFzcz0nXCIrKHIuX2NsYXNzfHxcIlwiKSsoci5fZGlzYWJsZWQ9PT0hMHx8ZS5pc0Z1bmN0aW9uKHIuX2Rpc2FibGVkKSYmci5fZGlzYWJsZWQoe2l0ZW06cixyZWZlcmVuY2U6aS5yZWZlcmVuY2UsZWxlbWVudDppLmVsZW1lbnR9KT9cIiB2YWthdGEtY29udGV4dG1lbnUtZGlzYWJsZWQgXCI6XCJcIikrXCInIFwiKyhyLnNob3J0Y3V0P1wiIGRhdGEtc2hvcnRjdXQ9J1wiK3Iuc2hvcnRjdXQrXCInIFwiOlwiXCIpK1wiPlwiLG4rPVwiPGEgaHJlZj0nIycgcmVsPSdcIisoaS5pdGVtcy5sZW5ndGgtMSkrXCInPlwiLGUudmFrYXRhLmNvbnRleHQuc2V0dGluZ3MuaWNvbnMmJihuKz1cIjxpIFwiLHIuaWNvbiYmKG4rPS0xIT09ci5pY29uLmluZGV4T2YoXCIvXCIpfHwtMSE9PXIuaWNvbi5pbmRleE9mKFwiLlwiKT9cIiBzdHlsZT0nYmFja2dyb3VuZDp1cmwoXFxcIlwiK3IuaWNvbitcIlxcXCIpIGNlbnRlciBjZW50ZXIgbm8tcmVwZWF0JyBcIjpcIiBjbGFzcz0nXCIrci5pY29uK1wiJyBcIiksbis9XCI+PC9pPjxzcGFuIGNsYXNzPSd2YWthdGEtY29udGV4dG1lbnUtc2VwJz4mIzE2MDs8L3NwYW4+XCIpLG4rPShlLmlzRnVuY3Rpb24oci5sYWJlbCk/ci5sYWJlbCh7aXRlbTp0LHJlZmVyZW5jZTppLnJlZmVyZW5jZSxlbGVtZW50OmkuZWxlbWVudH0pOnIubGFiZWwpKyhyLnNob3J0Y3V0PycgPHNwYW4gY2xhc3M9XCJ2YWthdGEtY29udGV4dG1lbnUtc2hvcnRjdXQgdmFrYXRhLWNvbnRleHRtZW51LXNob3J0Y3V0LScrci5zaG9ydGN1dCsnXCI+Jysoci5zaG9ydGN1dF9sYWJlbHx8XCJcIikrXCI8L3NwYW4+XCI6XCJcIikrXCI8L2E+XCIsci5zdWJtZW51JiYocz1lLnZha2F0YS5jb250ZXh0Ll9wYXJzZShyLnN1Ym1lbnUsITApLHMmJihuKz1zKSksbis9XCI8L2xpPlwiLHZvaWQoci5zZXBhcmF0b3JfYWZ0ZXImJihuKz1cIjxsaSBjbGFzcz0ndmFrYXRhLWNvbnRleHQtc2VwYXJhdG9yJz48YSBocmVmPScjJyBcIisoZS52YWthdGEuY29udGV4dC5zZXR0aW5ncy5pY29ucz9cIlwiOidzdHlsZT1cIm1hcmdpbi1sZWZ0OjBweDtcIicpK1wiPiYjMTYwOzwvYT48L2xpPlwiLGE9ITApKSk6ITB9KSxuPW4ucmVwbGFjZSgvPGxpIGNsYXNzXFw9J3Zha2F0YS1jb250ZXh0LXNlcGFyYXRvcidcXD48XFwvbGlcXD4kLyxcIlwiKSxyJiYobis9XCI8L3VsPlwiKSxyfHwoaS5odG1sPW4sZS52YWthdGEuY29udGV4dC5fdHJpZ2dlcihcInBhcnNlXCIpKSxuLmxlbmd0aD4xMD9uOiExfSxfc2hvd19zdWJtZW51OmZ1bmN0aW9uKGkpe2lmKGk9ZShpKSxpLmxlbmd0aCYmaS5jaGlsZHJlbihcInVsXCIpLmxlbmd0aCl7dmFyIHI9aS5jaGlsZHJlbihcInVsXCIpLHM9aS5vZmZzZXQoKS5sZWZ0K2kub3V0ZXJXaWR0aCgpLG49aS5vZmZzZXQoKS50b3AsYT1yLndpZHRoKCksbz1yLmhlaWdodCgpLGQ9ZSh3aW5kb3cpLndpZHRoKCkrZSh3aW5kb3cpLnNjcm9sbExlZnQoKSxjPWUod2luZG93KS5oZWlnaHQoKStlKHdpbmRvdykuc2Nyb2xsVG9wKCk7dD9pW3MtKGErMTAraS5vdXRlcldpZHRoKCkpPDA/XCJhZGRDbGFzc1wiOlwicmVtb3ZlQ2xhc3NcIl0oXCJ2YWthdGEtY29udGV4dC1sZWZ0XCIpOmlbcythKzEwPmQ/XCJhZGRDbGFzc1wiOlwicmVtb3ZlQ2xhc3NcIl0oXCJ2YWthdGEtY29udGV4dC1yaWdodFwiKSxuK28rMTA+YyYmci5jc3MoXCJib3R0b21cIixcIi0xcHhcIiksci5zaG93KCl9fSxzaG93OmZ1bmN0aW9uKHIscyxuKXt2YXIgYSxvLGQsYyxsLGgsXyx1LGc9ITA7c3dpdGNoKGkuZWxlbWVudCYmaS5lbGVtZW50Lmxlbmd0aCYmaS5lbGVtZW50LndpZHRoKFwiXCIpLGcpe2Nhc2UhcyYmIXI6cmV0dXJuITE7Y2FzZSEhcyYmISFyOmkucmVmZXJlbmNlPXIsaS5wb3NpdGlvbl94PXMueCxpLnBvc2l0aW9uX3k9cy55O2JyZWFrO2Nhc2UhcyYmISFyOmkucmVmZXJlbmNlPXIsYT1yLm9mZnNldCgpLGkucG9zaXRpb25feD1hLmxlZnQrci5vdXRlckhlaWdodCgpLGkucG9zaXRpb25feT1hLnRvcDticmVhaztjYXNlISFzJiYhcjppLnBvc2l0aW9uX3g9cy54LGkucG9zaXRpb25feT1zLnl9ciYmIW4mJmUocikuZGF0YShcInZha2F0YV9jb250ZXh0bWVudVwiKSYmKG49ZShyKS5kYXRhKFwidmFrYXRhX2NvbnRleHRtZW51XCIpKSxlLnZha2F0YS5jb250ZXh0Ll9wYXJzZShuKSYmaS5lbGVtZW50Lmh0bWwoaS5odG1sKSxpLml0ZW1zLmxlbmd0aCYmKGkuZWxlbWVudC5hcHBlbmRUbyhcImJvZHlcIiksbz1pLmVsZW1lbnQsZD1pLnBvc2l0aW9uX3gsYz1pLnBvc2l0aW9uX3ksbD1vLndpZHRoKCksaD1vLmhlaWdodCgpLF89ZSh3aW5kb3cpLndpZHRoKCkrZSh3aW5kb3cpLnNjcm9sbExlZnQoKSx1PWUod2luZG93KS5oZWlnaHQoKStlKHdpbmRvdykuc2Nyb2xsVG9wKCksdCYmKGQtPW8ub3V0ZXJXaWR0aCgpLWUocikub3V0ZXJXaWR0aCgpLGQ8ZSh3aW5kb3cpLnNjcm9sbExlZnQoKSsyMCYmKGQ9ZSh3aW5kb3cpLnNjcm9sbExlZnQoKSsyMCkpLGQrbCsyMD5fJiYoZD1fLShsKzIwKSksYytoKzIwPnUmJihjPXUtKGgrMjApKSxpLmVsZW1lbnQuY3NzKHtsZWZ0OmQsdG9wOmN9KS5zaG93KCkuZmluZChcImFcIikuZmlyc3QoKS5mb2N1cygpLnBhcmVudCgpLmFkZENsYXNzKFwidmFrYXRhLWNvbnRleHQtaG92ZXJcIiksaS5pc192aXNpYmxlPSEwLGUudmFrYXRhLmNvbnRleHQuX3RyaWdnZXIoXCJzaG93XCIpKX0saGlkZTpmdW5jdGlvbigpe2kuaXNfdmlzaWJsZSYmKGkuZWxlbWVudC5oaWRlKCkuZmluZChcInVsXCIpLmhpZGUoKS5lbmQoKS5maW5kKFwiOmZvY3VzXCIpLmJsdXIoKS5lbmQoKS5kZXRhY2goKSxpLmlzX3Zpc2libGU9ITEsZS52YWthdGEuY29udGV4dC5fdHJpZ2dlcihcImhpZGVcIikpfX0sZShmdW5jdGlvbigpe3Q9XCJydGxcIj09PWUoXCJib2R5XCIpLmNzcyhcImRpcmVjdGlvblwiKTt2YXIgcj0hMTtpLmVsZW1lbnQ9ZShcIjx1bCBjbGFzcz0ndmFrYXRhLWNvbnRleHQnPjwvdWw+XCIpLGkuZWxlbWVudC5vbihcIm1vdXNlZW50ZXJcIixcImxpXCIsZnVuY3Rpb24odCl7dC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSxlLmNvbnRhaW5zKHRoaXMsdC5yZWxhdGVkVGFyZ2V0KXx8KHImJmNsZWFyVGltZW91dChyKSxpLmVsZW1lbnQuZmluZChcIi52YWthdGEtY29udGV4dC1ob3ZlclwiKS5yZW1vdmVDbGFzcyhcInZha2F0YS1jb250ZXh0LWhvdmVyXCIpLmVuZCgpLGUodGhpcykuc2libGluZ3MoKS5maW5kKFwidWxcIikuaGlkZSgpLmVuZCgpLmVuZCgpLnBhcmVudHNVbnRpbChcIi52YWthdGEtY29udGV4dFwiLFwibGlcIikuYWRkQmFjaygpLmFkZENsYXNzKFwidmFrYXRhLWNvbnRleHQtaG92ZXJcIiksZS52YWthdGEuY29udGV4dC5fc2hvd19zdWJtZW51KHRoaXMpKX0pLm9uKFwibW91c2VsZWF2ZVwiLFwibGlcIixmdW5jdGlvbih0KXtlLmNvbnRhaW5zKHRoaXMsdC5yZWxhdGVkVGFyZ2V0KXx8ZSh0aGlzKS5maW5kKFwiLnZha2F0YS1jb250ZXh0LWhvdmVyXCIpLmFkZEJhY2soKS5yZW1vdmVDbGFzcyhcInZha2F0YS1jb250ZXh0LWhvdmVyXCIpfSkub24oXCJtb3VzZWxlYXZlXCIsZnVuY3Rpb24odCl7ZSh0aGlzKS5maW5kKFwiLnZha2F0YS1jb250ZXh0LWhvdmVyXCIpLnJlbW92ZUNsYXNzKFwidmFrYXRhLWNvbnRleHQtaG92ZXJcIiksZS52YWthdGEuY29udGV4dC5zZXR0aW5ncy5oaWRlX29ubW91c2VsZWF2ZSYmKHI9c2V0VGltZW91dChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtlLnZha2F0YS5jb250ZXh0LmhpZGUoKX19KHRoaXMpLGUudmFrYXRhLmNvbnRleHQuc2V0dGluZ3MuaGlkZV9vbm1vdXNlbGVhdmUpKX0pLm9uKFwiY2xpY2tcIixcImFcIixmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCksZSh0aGlzKS5ibHVyKCkucGFyZW50KCkuaGFzQ2xhc3MoXCJ2YWthdGEtY29udGV4dC1kaXNhYmxlZFwiKXx8ZS52YWthdGEuY29udGV4dC5fZXhlY3V0ZShlKHRoaXMpLmF0dHIoXCJyZWxcIikpPT09ITF8fGUudmFrYXRhLmNvbnRleHQuaGlkZSgpfSkub24oXCJrZXlkb3duXCIsXCJhXCIsZnVuY3Rpb24odCl7dmFyIHI9bnVsbDtzd2l0Y2godC53aGljaCl7Y2FzZSAxMzpjYXNlIDMyOnQudHlwZT1cIm1vdXNldXBcIix0LnByZXZlbnREZWZhdWx0KCksZSh0LmN1cnJlbnRUYXJnZXQpLnRyaWdnZXIodCk7YnJlYWs7Y2FzZSAzNzppLmlzX3Zpc2libGUmJihpLmVsZW1lbnQuZmluZChcIi52YWthdGEtY29udGV4dC1ob3ZlclwiKS5sYXN0KCkuY2xvc2VzdChcImxpXCIpLmZpcnN0KCkuZmluZChcInVsXCIpLmhpZGUoKS5maW5kKFwiLnZha2F0YS1jb250ZXh0LWhvdmVyXCIpLnJlbW92ZUNsYXNzKFwidmFrYXRhLWNvbnRleHQtaG92ZXJcIikuZW5kKCkuZW5kKCkuY2hpbGRyZW4oXCJhXCIpLmZvY3VzKCksdC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx0LnByZXZlbnREZWZhdWx0KCkpO2JyZWFrO2Nhc2UgMzg6aS5pc192aXNpYmxlJiYocj1pLmVsZW1lbnQuZmluZChcInVsOnZpc2libGVcIikuYWRkQmFjaygpLmxhc3QoKS5jaGlsZHJlbihcIi52YWthdGEtY29udGV4dC1ob3ZlclwiKS5yZW1vdmVDbGFzcyhcInZha2F0YS1jb250ZXh0LWhvdmVyXCIpLnByZXZBbGwoXCJsaTpub3QoLnZha2F0YS1jb250ZXh0LXNlcGFyYXRvcilcIikuZmlyc3QoKSxyLmxlbmd0aHx8KHI9aS5lbGVtZW50LmZpbmQoXCJ1bDp2aXNpYmxlXCIpLmFkZEJhY2soKS5sYXN0KCkuY2hpbGRyZW4oXCJsaTpub3QoLnZha2F0YS1jb250ZXh0LXNlcGFyYXRvcilcIikubGFzdCgpKSxyLmFkZENsYXNzKFwidmFrYXRhLWNvbnRleHQtaG92ZXJcIikuY2hpbGRyZW4oXCJhXCIpLmZvY3VzKCksdC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx0LnByZXZlbnREZWZhdWx0KCkpO2JyZWFrO2Nhc2UgMzk6aS5pc192aXNpYmxlJiYoaS5lbGVtZW50LmZpbmQoXCIudmFrYXRhLWNvbnRleHQtaG92ZXJcIikubGFzdCgpLmNoaWxkcmVuKFwidWxcIikuc2hvdygpLmNoaWxkcmVuKFwibGk6bm90KC52YWthdGEtY29udGV4dC1zZXBhcmF0b3IpXCIpLnJlbW92ZUNsYXNzKFwidmFrYXRhLWNvbnRleHQtaG92ZXJcIikuZmlyc3QoKS5hZGRDbGFzcyhcInZha2F0YS1jb250ZXh0LWhvdmVyXCIpLmNoaWxkcmVuKFwiYVwiKS5mb2N1cygpLHQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdC5wcmV2ZW50RGVmYXVsdCgpKTticmVhaztjYXNlIDQwOmkuaXNfdmlzaWJsZSYmKHI9aS5lbGVtZW50LmZpbmQoXCJ1bDp2aXNpYmxlXCIpLmFkZEJhY2soKS5sYXN0KCkuY2hpbGRyZW4oXCIudmFrYXRhLWNvbnRleHQtaG92ZXJcIikucmVtb3ZlQ2xhc3MoXCJ2YWthdGEtY29udGV4dC1ob3ZlclwiKS5uZXh0QWxsKFwibGk6bm90KC52YWthdGEtY29udGV4dC1zZXBhcmF0b3IpXCIpLmZpcnN0KCksci5sZW5ndGh8fChyPWkuZWxlbWVudC5maW5kKFwidWw6dmlzaWJsZVwiKS5hZGRCYWNrKCkubGFzdCgpLmNoaWxkcmVuKFwibGk6bm90KC52YWthdGEtY29udGV4dC1zZXBhcmF0b3IpXCIpLmZpcnN0KCkpLHIuYWRkQ2xhc3MoXCJ2YWthdGEtY29udGV4dC1ob3ZlclwiKS5jaGlsZHJlbihcImFcIikuZm9jdXMoKSx0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLHQucHJldmVudERlZmF1bHQoKSk7YnJlYWs7Y2FzZSAyNzplLnZha2F0YS5jb250ZXh0LmhpZGUoKSx0LnByZXZlbnREZWZhdWx0KCl9fSkub24oXCJrZXlkb3duXCIsZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpO3ZhciB0PWkuZWxlbWVudC5maW5kKFwiLnZha2F0YS1jb250ZXh0bWVudS1zaG9ydGN1dC1cIitlLndoaWNoKS5wYXJlbnQoKTt0LnBhcmVudCgpLm5vdChcIi52YWthdGEtY29udGV4dC1kaXNhYmxlZFwiKSYmdC5jbGljaygpfSksZShsKS5vbihcIm1vdXNlZG93bi52YWthdGEuanN0cmVlXCIsZnVuY3Rpb24odCl7aS5pc192aXNpYmxlJiYhZS5jb250YWlucyhpLmVsZW1lbnRbMF0sdC50YXJnZXQpJiZlLnZha2F0YS5jb250ZXh0LmhpZGUoKX0pLm9uKFwiY29udGV4dF9zaG93LnZha2F0YS5qc3RyZWVcIixmdW5jdGlvbihlLHIpe2kuZWxlbWVudC5maW5kKFwibGk6aGFzKHVsKVwiKS5jaGlsZHJlbihcImFcIikuYWRkQ2xhc3MoXCJ2YWthdGEtY29udGV4dC1wYXJlbnRcIiksdCYmaS5lbGVtZW50LmFkZENsYXNzKFwidmFrYXRhLWNvbnRleHQtcnRsXCIpLmNzcyhcImRpcmVjdGlvblwiLFwicnRsXCIpLGkuZWxlbWVudC5maW5kKFwidWxcIikuaGlkZSgpLmVuZCgpfSl9KX0oZSksZS5qc3RyZWUuZGVmYXVsdHMuZG5kPXtjb3B5OiEwLG9wZW5fdGltZW91dDo1MDAsaXNfZHJhZ2dhYmxlOiEwLGNoZWNrX3doaWxlX2RyYWdnaW5nOiEwLGFsd2F5c19jb3B5OiExLGluc2lkZV9wb3M6MCxkcmFnX3NlbGVjdGlvbjohMCx0b3VjaDohMCxsYXJnZV9kcm9wX3RhcmdldDohMSxsYXJnZV9kcmFnX3RhcmdldDohMX0sZS5qc3RyZWUucGx1Z2lucy5kbmQ9ZnVuY3Rpb24odCxpKXt0aGlzLmJpbmQ9ZnVuY3Rpb24oKXtpLmJpbmQuY2FsbCh0aGlzKSx0aGlzLmVsZW1lbnQub24oXCJtb3VzZWRvd24uanN0cmVlIHRvdWNoc3RhcnQuanN0cmVlXCIsdGhpcy5zZXR0aW5ncy5kbmQubGFyZ2VfZHJhZ190YXJnZXQ/XCIuanN0cmVlLW5vZGVcIjpcIi5qc3RyZWUtYW5jaG9yXCIsZS5wcm94eShmdW5jdGlvbih0KXtcbmlmKHRoaXMuc2V0dGluZ3MuZG5kLmxhcmdlX2RyYWdfdGFyZ2V0JiZlKHQudGFyZ2V0KS5jbG9zZXN0KFwiLmpzdHJlZS1ub2RlXCIpWzBdIT09dC5jdXJyZW50VGFyZ2V0KXJldHVybiEwO2lmKFwidG91Y2hzdGFydFwiPT09dC50eXBlJiYoIXRoaXMuc2V0dGluZ3MuZG5kLnRvdWNofHxcInNlbGVjdGVkXCI9PT10aGlzLnNldHRpbmdzLmRuZC50b3VjaCYmIWUodC5jdXJyZW50VGFyZ2V0KS5jbG9zZXN0KFwiLmpzdHJlZS1ub2RlXCIpLmNoaWxkcmVuKFwiLmpzdHJlZS1hbmNob3JcIikuaGFzQ2xhc3MoXCJqc3RyZWUtY2xpY2tlZFwiKSkpcmV0dXJuITA7dmFyIGk9dGhpcy5nZXRfbm9kZSh0LnRhcmdldCkscj10aGlzLmlzX3NlbGVjdGVkKGkpJiZ0aGlzLnNldHRpbmdzLmRuZC5kcmFnX3NlbGVjdGlvbj90aGlzLmdldF90b3Bfc2VsZWN0ZWQoKS5sZW5ndGg6MSxzPXI+MT9yK1wiIFwiK3RoaXMuZ2V0X3N0cmluZyhcIm5vZGVzXCIpOnRoaXMuZ2V0X3RleHQodC5jdXJyZW50VGFyZ2V0KTtyZXR1cm4gdGhpcy5zZXR0aW5ncy5jb3JlLmZvcmNlX3RleHQmJihzPWUudmFrYXRhLmh0bWwuZXNjYXBlKHMpKSxpJiZpLmlkJiZpLmlkIT09ZS5qc3RyZWUucm9vdCYmKDE9PT10LndoaWNofHxcInRvdWNoc3RhcnRcIj09PXQudHlwZSkmJih0aGlzLnNldHRpbmdzLmRuZC5pc19kcmFnZ2FibGU9PT0hMHx8ZS5pc0Z1bmN0aW9uKHRoaXMuc2V0dGluZ3MuZG5kLmlzX2RyYWdnYWJsZSkmJnRoaXMuc2V0dGluZ3MuZG5kLmlzX2RyYWdnYWJsZS5jYWxsKHRoaXMscj4xP3RoaXMuZ2V0X3RvcF9zZWxlY3RlZCghMCk6W2ldLHQpKT8odGhpcy5lbGVtZW50LnRyaWdnZXIoXCJtb3VzZWRvd24uanN0cmVlXCIpLGUudmFrYXRhLmRuZC5zdGFydCh0LHtqc3RyZWU6ITAsb3JpZ2luOnRoaXMsb2JqOnRoaXMuZ2V0X25vZGUoaSwhMCksbm9kZXM6cj4xP3RoaXMuZ2V0X3RvcF9zZWxlY3RlZCgpOltpLmlkXX0sJzxkaXYgaWQ9XCJqc3RyZWUtZG5kXCIgY2xhc3M9XCJqc3RyZWUtJyt0aGlzLmdldF90aGVtZSgpK1wiIGpzdHJlZS1cIit0aGlzLmdldF90aGVtZSgpK1wiLVwiK3RoaXMuZ2V0X3RoZW1lX3ZhcmlhbnQoKStcIiBcIisodGhpcy5zZXR0aW5ncy5jb3JlLnRoZW1lcy5yZXNwb25zaXZlP1wiIGpzdHJlZS1kbmQtcmVzcG9uc2l2ZVwiOlwiXCIpKydcIj48aSBjbGFzcz1cImpzdHJlZS1pY29uIGpzdHJlZS1lclwiPjwvaT4nK3MrJzxpbnMgY2xhc3M9XCJqc3RyZWUtY29weVwiIHN0eWxlPVwiZGlzcGxheTpub25lO1wiPis8L2lucz48L2Rpdj4nKSk6dm9pZCAwfSx0aGlzKSl9fSxlKGZ1bmN0aW9uKCl7dmFyIHQ9ITEsaT0hMSxyPSExLHM9ITEsbj1lKCc8ZGl2IGlkPVwianN0cmVlLW1hcmtlclwiPiYjMTYwOzwvZGl2PicpLmhpZGUoKTtlKGwpLm9uKFwiZG5kX3N0YXJ0LnZha2F0YS5qc3RyZWVcIixmdW5jdGlvbihlLGkpe3Q9ITEscj0hMSxpJiZpLmRhdGEmJmkuZGF0YS5qc3RyZWUmJm4uYXBwZW5kVG8oXCJib2R5XCIpfSkub24oXCJkbmRfbW92ZS52YWthdGEuanN0cmVlXCIsZnVuY3Rpb24oYSxvKXtpZihzJiZjbGVhclRpbWVvdXQocyksbyYmby5kYXRhJiZvLmRhdGEuanN0cmVlJiYoIW8uZXZlbnQudGFyZ2V0LmlkfHxcImpzdHJlZS1tYXJrZXJcIiE9PW8uZXZlbnQudGFyZ2V0LmlkKSl7cj1vLmV2ZW50O3ZhciBkLGMsbCxoLF8sdSxnLGYscCxtLHYsaix5LGsseD1lLmpzdHJlZS5yZWZlcmVuY2Uoby5ldmVudC50YXJnZXQpLGI9ITEsdz0hMSxDPSExO2lmKHgmJnguX2RhdGEmJnguX2RhdGEuZG5kKWlmKG4uYXR0cihcImNsYXNzXCIsXCJqc3RyZWUtXCIreC5nZXRfdGhlbWUoKSsoeC5zZXR0aW5ncy5jb3JlLnRoZW1lcy5yZXNwb25zaXZlP1wiIGpzdHJlZS1kbmQtcmVzcG9uc2l2ZVwiOlwiXCIpKSxvLmhlbHBlci5jaGlsZHJlbigpLmF0dHIoXCJjbGFzc1wiLFwianN0cmVlLVwiK3guZ2V0X3RoZW1lKCkrXCIganN0cmVlLVwiK3guZ2V0X3RoZW1lKCkrXCItXCIreC5nZXRfdGhlbWVfdmFyaWFudCgpK1wiIFwiKyh4LnNldHRpbmdzLmNvcmUudGhlbWVzLnJlc3BvbnNpdmU/XCIganN0cmVlLWRuZC1yZXNwb25zaXZlXCI6XCJcIikpLmZpbmQoXCIuanN0cmVlLWNvcHlcIikuZmlyc3QoKVtvLmRhdGEub3JpZ2luJiYoby5kYXRhLm9yaWdpbi5zZXR0aW5ncy5kbmQuYWx3YXlzX2NvcHl8fG8uZGF0YS5vcmlnaW4uc2V0dGluZ3MuZG5kLmNvcHkmJihvLmV2ZW50Lm1ldGFLZXl8fG8uZXZlbnQuY3RybEtleSkpP1wic2hvd1wiOlwiaGlkZVwiXSgpLG8uZXZlbnQudGFyZ2V0IT09eC5lbGVtZW50WzBdJiZvLmV2ZW50LnRhcmdldCE9PXguZ2V0X2NvbnRhaW5lcl91bCgpWzBdfHwwIT09eC5nZXRfY29udGFpbmVyX3VsKCkuY2hpbGRyZW4oKS5sZW5ndGgpe2lmKGI9eC5zZXR0aW5ncy5kbmQubGFyZ2VfZHJvcF90YXJnZXQ/ZShvLmV2ZW50LnRhcmdldCkuY2xvc2VzdChcIi5qc3RyZWUtbm9kZVwiKS5jaGlsZHJlbihcIi5qc3RyZWUtYW5jaG9yXCIpOmUoby5ldmVudC50YXJnZXQpLmNsb3Nlc3QoXCIuanN0cmVlLWFuY2hvclwiKSxiJiZiLmxlbmd0aCYmYi5wYXJlbnQoKS5pcyhcIi5qc3RyZWUtY2xvc2VkLCAuanN0cmVlLW9wZW4sIC5qc3RyZWUtbGVhZlwiKSYmKHc9Yi5vZmZzZXQoKSxDPW8uZXZlbnQucGFnZVktdy50b3AsbD1iLm91dGVySGVpZ2h0KCksdT1sLzM+Qz9bXCJiXCIsXCJpXCIsXCJhXCJdOkM+bC1sLzM/W1wiYVwiLFwiaVwiLFwiYlwiXTpDPmwvMj9bXCJpXCIsXCJhXCIsXCJiXCJdOltcImlcIixcImJcIixcImFcIl0sZS5lYWNoKHUsZnVuY3Rpb24ocixhKXtzd2l0Y2goYSl7Y2FzZVwiYlwiOmQ9dy5sZWZ0LTYsYz13LnRvcCxoPXguZ2V0X3BhcmVudChiKSxfPWIucGFyZW50KCkuaW5kZXgoKTticmVhaztjYXNlXCJpXCI6eT14LnNldHRpbmdzLmRuZC5pbnNpZGVfcG9zLGs9eC5nZXRfbm9kZShiLnBhcmVudCgpKSxkPXcubGVmdC0yLGM9dy50b3ArbC8yKzEsaD1rLmlkLF89XCJmaXJzdFwiPT09eT8wOlwibGFzdFwiPT09eT9rLmNoaWxkcmVuLmxlbmd0aDpNYXRoLm1pbih5LGsuY2hpbGRyZW4ubGVuZ3RoKTticmVhaztjYXNlXCJhXCI6ZD13LmxlZnQtNixjPXcudG9wK2wsaD14LmdldF9wYXJlbnQoYiksXz1iLnBhcmVudCgpLmluZGV4KCkrMX1mb3IoZz0hMCxmPTAscD1vLmRhdGEubm9kZXMubGVuZ3RoO3A+ZjtmKyspaWYobT1vLmRhdGEub3JpZ2luJiYoby5kYXRhLm9yaWdpbi5zZXR0aW5ncy5kbmQuYWx3YXlzX2NvcHl8fG8uZGF0YS5vcmlnaW4uc2V0dGluZ3MuZG5kLmNvcHkmJihvLmV2ZW50Lm1ldGFLZXl8fG8uZXZlbnQuY3RybEtleSkpP1wiY29weV9ub2RlXCI6XCJtb3ZlX25vZGVcIix2PV8sXCJtb3ZlX25vZGVcIj09PW0mJlwiYVwiPT09YSYmby5kYXRhLm9yaWdpbiYmby5kYXRhLm9yaWdpbj09PXgmJmg9PT14LmdldF9wYXJlbnQoby5kYXRhLm5vZGVzW2ZdKSYmKGo9eC5nZXRfbm9kZShoKSx2PmUuaW5BcnJheShvLmRhdGEubm9kZXNbZl0sai5jaGlsZHJlbikmJih2LT0xKSksZz1nJiYoeCYmeC5zZXR0aW5ncyYmeC5zZXR0aW5ncy5kbmQmJnguc2V0dGluZ3MuZG5kLmNoZWNrX3doaWxlX2RyYWdnaW5nPT09ITF8fHguY2hlY2sobSxvLmRhdGEub3JpZ2luJiZvLmRhdGEub3JpZ2luIT09eD9vLmRhdGEub3JpZ2luLmdldF9ub2RlKG8uZGF0YS5ub2Rlc1tmXSk6by5kYXRhLm5vZGVzW2ZdLGgsdix7ZG5kOiEwLHJlZjp4LmdldF9ub2RlKGIucGFyZW50KCkpLHBvczphLG9yaWdpbjpvLmRhdGEub3JpZ2luLGlzX211bHRpOm8uZGF0YS5vcmlnaW4mJm8uZGF0YS5vcmlnaW4hPT14LGlzX2ZvcmVpZ246IW8uZGF0YS5vcmlnaW59KSksIWcpe3gmJngubGFzdF9lcnJvciYmKGk9eC5sYXN0X2Vycm9yKCkpO2JyZWFrfXJldHVyblwiaVwiPT09YSYmYi5wYXJlbnQoKS5pcyhcIi5qc3RyZWUtY2xvc2VkXCIpJiZ4LnNldHRpbmdzLmRuZC5vcGVuX3RpbWVvdXQmJihzPXNldFRpbWVvdXQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtlLm9wZW5fbm9kZSh0KX19KHgsYikseC5zZXR0aW5ncy5kbmQub3Blbl90aW1lb3V0KSksZz8odD17aW5zOngscGFyOmgscG9zOlwiaVwiIT09YXx8XCJsYXN0XCIhPT15fHwwIT09X3x8eC5pc19sb2FkZWQoayk/XzpcImxhc3RcIn0sbi5jc3Moe2xlZnQ6ZCtcInB4XCIsdG9wOmMrXCJweFwifSkuc2hvdygpLG8uaGVscGVyLmZpbmQoXCIuanN0cmVlLWljb25cIikuZmlyc3QoKS5yZW1vdmVDbGFzcyhcImpzdHJlZS1lclwiKS5hZGRDbGFzcyhcImpzdHJlZS1va1wiKSxpPXt9LHU9ITAsITEpOnZvaWQgMH0pLHU9PT0hMCkpcmV0dXJufWVsc2V7Zm9yKGc9ITAsZj0wLHA9by5kYXRhLm5vZGVzLmxlbmd0aDtwPmYmJihnPWcmJnguY2hlY2soby5kYXRhLm9yaWdpbiYmKG8uZGF0YS5vcmlnaW4uc2V0dGluZ3MuZG5kLmFsd2F5c19jb3B5fHxvLmRhdGEub3JpZ2luLnNldHRpbmdzLmRuZC5jb3B5JiYoby5ldmVudC5tZXRhS2V5fHxvLmV2ZW50LmN0cmxLZXkpKT9cImNvcHlfbm9kZVwiOlwibW92ZV9ub2RlXCIsby5kYXRhLm9yaWdpbiYmby5kYXRhLm9yaWdpbiE9PXg/by5kYXRhLm9yaWdpbi5nZXRfbm9kZShvLmRhdGEubm9kZXNbZl0pOm8uZGF0YS5ub2Rlc1tmXSxlLmpzdHJlZS5yb290LFwibGFzdFwiLHtkbmQ6ITAscmVmOnguZ2V0X25vZGUoZS5qc3RyZWUucm9vdCkscG9zOlwiaVwiLG9yaWdpbjpvLmRhdGEub3JpZ2luLGlzX211bHRpOm8uZGF0YS5vcmlnaW4mJm8uZGF0YS5vcmlnaW4hPT14LGlzX2ZvcmVpZ246IW8uZGF0YS5vcmlnaW59KSxnKTtmKyspO2lmKGcpcmV0dXJuIHQ9e2luczp4LHBhcjplLmpzdHJlZS5yb290LHBvczpcImxhc3RcIn0sbi5oaWRlKCksdm9pZCBvLmhlbHBlci5maW5kKFwiLmpzdHJlZS1pY29uXCIpLmZpcnN0KCkucmVtb3ZlQ2xhc3MoXCJqc3RyZWUtZXJcIikuYWRkQ2xhc3MoXCJqc3RyZWUtb2tcIil9dD0hMSxvLmhlbHBlci5maW5kKFwiLmpzdHJlZS1pY29uXCIpLnJlbW92ZUNsYXNzKFwianN0cmVlLW9rXCIpLmFkZENsYXNzKFwianN0cmVlLWVyXCIpLG4uaGlkZSgpfX0pLm9uKFwiZG5kX3Njcm9sbC52YWthdGEuanN0cmVlXCIsZnVuY3Rpb24oZSxpKXtpJiZpLmRhdGEmJmkuZGF0YS5qc3RyZWUmJihuLmhpZGUoKSx0PSExLHI9ITEsaS5oZWxwZXIuZmluZChcIi5qc3RyZWUtaWNvblwiKS5maXJzdCgpLnJlbW92ZUNsYXNzKFwianN0cmVlLW9rXCIpLmFkZENsYXNzKFwianN0cmVlLWVyXCIpKX0pLm9uKFwiZG5kX3N0b3AudmFrYXRhLmpzdHJlZVwiLGZ1bmN0aW9uKGEsbyl7aWYocyYmY2xlYXJUaW1lb3V0KHMpLG8mJm8uZGF0YSYmby5kYXRhLmpzdHJlZSl7bi5oaWRlKCkuZGV0YWNoKCk7dmFyIGQsYyxsPVtdO2lmKHQpe2ZvcihkPTAsYz1vLmRhdGEubm9kZXMubGVuZ3RoO2M+ZDtkKyspbFtkXT1vLmRhdGEub3JpZ2luP28uZGF0YS5vcmlnaW4uZ2V0X25vZGUoby5kYXRhLm5vZGVzW2RdKTpvLmRhdGEubm9kZXNbZF07dC5pbnNbby5kYXRhLm9yaWdpbiYmKG8uZGF0YS5vcmlnaW4uc2V0dGluZ3MuZG5kLmFsd2F5c19jb3B5fHxvLmRhdGEub3JpZ2luLnNldHRpbmdzLmRuZC5jb3B5JiYoby5ldmVudC5tZXRhS2V5fHxvLmV2ZW50LmN0cmxLZXkpKT9cImNvcHlfbm9kZVwiOlwibW92ZV9ub2RlXCJdKGwsdC5wYXIsdC5wb3MsITEsITEsITEsby5kYXRhLm9yaWdpbil9ZWxzZSBkPWUoby5ldmVudC50YXJnZXQpLmNsb3Nlc3QoXCIuanN0cmVlXCIpLGQubGVuZ3RoJiZpJiZpLmVycm9yJiZcImNoZWNrXCI9PT1pLmVycm9yJiYoZD1kLmpzdHJlZSghMCksZCYmZC5zZXR0aW5ncy5jb3JlLmVycm9yLmNhbGwodGhpcyxpKSk7cj0hMSx0PSExfX0pLm9uKFwia2V5dXAuanN0cmVlIGtleWRvd24uanN0cmVlXCIsZnVuY3Rpb24odCxpKXtpPWUudmFrYXRhLmRuZC5fZ2V0KCksaSYmaS5kYXRhJiZpLmRhdGEuanN0cmVlJiYoaS5oZWxwZXIuZmluZChcIi5qc3RyZWUtY29weVwiKS5maXJzdCgpW2kuZGF0YS5vcmlnaW4mJihpLmRhdGEub3JpZ2luLnNldHRpbmdzLmRuZC5hbHdheXNfY29weXx8aS5kYXRhLm9yaWdpbi5zZXR0aW5ncy5kbmQuY29weSYmKHQubWV0YUtleXx8dC5jdHJsS2V5KSk/XCJzaG93XCI6XCJoaWRlXCJdKCksciYmKHIubWV0YUtleT10Lm1ldGFLZXksci5jdHJsS2V5PXQuY3RybEtleSxlLnZha2F0YS5kbmQuX3RyaWdnZXIoXCJtb3ZlXCIscikpKX0pfSksZnVuY3Rpb24oZSl7ZS52YWthdGEuaHRtbD17ZGl2OmUoXCI8ZGl2IC8+XCIpLGVzY2FwZTpmdW5jdGlvbih0KXtyZXR1cm4gZS52YWthdGEuaHRtbC5kaXYudGV4dCh0KS5odG1sKCl9LHN0cmlwOmZ1bmN0aW9uKHQpe3JldHVybiBlLnZha2F0YS5odG1sLmRpdi5lbXB0eSgpLmFwcGVuZChlLnBhcnNlSFRNTCh0KSkudGV4dCgpfX07dmFyIHQ9e2VsZW1lbnQ6ITEsdGFyZ2V0OiExLGlzX2Rvd246ITEsaXNfZHJhZzohMSxoZWxwZXI6ITEsaGVscGVyX3c6MCxkYXRhOiExLGluaXRfeDowLGluaXRfeTowLHNjcm9sbF9sOjAsc2Nyb2xsX3Q6MCxzY3JvbGxfZTohMSxzY3JvbGxfaTohMSxpc190b3VjaDohMX07ZS52YWthdGEuZG5kPXtzZXR0aW5nczp7c2Nyb2xsX3NwZWVkOjEwLHNjcm9sbF9wcm94aW1pdHk6MjAsaGVscGVyX2xlZnQ6NSxoZWxwZXJfdG9wOjEwLHRocmVzaG9sZDo1LHRocmVzaG9sZF90b3VjaDo1MH0sX3RyaWdnZXI6ZnVuY3Rpb24odCxpKXt2YXIgcj1lLnZha2F0YS5kbmQuX2dldCgpO3IuZXZlbnQ9aSxlKGwpLnRyaWdnZXJIYW5kbGVyKFwiZG5kX1wiK3QrXCIudmFrYXRhXCIscil9LF9nZXQ6ZnVuY3Rpb24oKXtyZXR1cm57ZGF0YTp0LmRhdGEsZWxlbWVudDp0LmVsZW1lbnQsaGVscGVyOnQuaGVscGVyfX0sX2NsZWFuOmZ1bmN0aW9uKCl7dC5oZWxwZXImJnQuaGVscGVyLnJlbW92ZSgpLHQuc2Nyb2xsX2kmJihjbGVhckludGVydmFsKHQuc2Nyb2xsX2kpLHQuc2Nyb2xsX2k9ITEpLHQ9e2VsZW1lbnQ6ITEsdGFyZ2V0OiExLGlzX2Rvd246ITEsaXNfZHJhZzohMSxoZWxwZXI6ITEsaGVscGVyX3c6MCxkYXRhOiExLGluaXRfeDowLGluaXRfeTowLHNjcm9sbF9sOjAsc2Nyb2xsX3Q6MCxzY3JvbGxfZTohMSxzY3JvbGxfaTohMSxpc190b3VjaDohMX0sZShsKS5vZmYoXCJtb3VzZW1vdmUudmFrYXRhLmpzdHJlZSB0b3VjaG1vdmUudmFrYXRhLmpzdHJlZVwiLGUudmFrYXRhLmRuZC5kcmFnKSxlKGwpLm9mZihcIm1vdXNldXAudmFrYXRhLmpzdHJlZSB0b3VjaGVuZC52YWthdGEuanN0cmVlXCIsZS52YWthdGEuZG5kLnN0b3ApfSxfc2Nyb2xsOmZ1bmN0aW9uKGkpe2lmKCF0LnNjcm9sbF9lfHwhdC5zY3JvbGxfbCYmIXQuc2Nyb2xsX3QpcmV0dXJuIHQuc2Nyb2xsX2kmJihjbGVhckludGVydmFsKHQuc2Nyb2xsX2kpLHQuc2Nyb2xsX2k9ITEpLCExO2lmKCF0LnNjcm9sbF9pKXJldHVybiB0LnNjcm9sbF9pPXNldEludGVydmFsKGUudmFrYXRhLmRuZC5fc2Nyb2xsLDEwMCksITE7aWYoaT09PSEwKXJldHVybiExO3ZhciByPXQuc2Nyb2xsX2Uuc2Nyb2xsVG9wKCkscz10LnNjcm9sbF9lLnNjcm9sbExlZnQoKTt0LnNjcm9sbF9lLnNjcm9sbFRvcChyK3Quc2Nyb2xsX3QqZS52YWthdGEuZG5kLnNldHRpbmdzLnNjcm9sbF9zcGVlZCksdC5zY3JvbGxfZS5zY3JvbGxMZWZ0KHMrdC5zY3JvbGxfbCplLnZha2F0YS5kbmQuc2V0dGluZ3Muc2Nyb2xsX3NwZWVkKSwociE9PXQuc2Nyb2xsX2Uuc2Nyb2xsVG9wKCl8fHMhPT10LnNjcm9sbF9lLnNjcm9sbExlZnQoKSkmJmUudmFrYXRhLmRuZC5fdHJpZ2dlcihcInNjcm9sbFwiLHQuc2Nyb2xsX2UpfSxzdGFydDpmdW5jdGlvbihpLHIscyl7XCJ0b3VjaHN0YXJ0XCI9PT1pLnR5cGUmJmkub3JpZ2luYWxFdmVudCYmaS5vcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzJiZpLm9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0mJihpLnBhZ2VYPWkub3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWCxpLnBhZ2VZPWkub3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWSxpLnRhcmdldD1sLmVsZW1lbnRGcm9tUG9pbnQoaS5vcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VYLXdpbmRvdy5wYWdlWE9mZnNldCxpLm9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVktd2luZG93LnBhZ2VZT2Zmc2V0KSksdC5pc19kcmFnJiZlLnZha2F0YS5kbmQuc3RvcCh7fSk7dHJ5e2kuY3VycmVudFRhcmdldC51bnNlbGVjdGFibGU9XCJvblwiLGkuY3VycmVudFRhcmdldC5vbnNlbGVjdHN0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuITF9LGkuY3VycmVudFRhcmdldC5zdHlsZSYmKGkuY3VycmVudFRhcmdldC5zdHlsZS5Nb3pVc2VyU2VsZWN0PVwibm9uZVwiKX1jYXRjaChuKXt9cmV0dXJuIHQuaW5pdF94PWkucGFnZVgsdC5pbml0X3k9aS5wYWdlWSx0LmRhdGE9cix0LmlzX2Rvd249ITAsdC5lbGVtZW50PWkuY3VycmVudFRhcmdldCx0LnRhcmdldD1pLnRhcmdldCx0LmlzX3RvdWNoPVwidG91Y2hzdGFydFwiPT09aS50eXBlLHMhPT0hMSYmKHQuaGVscGVyPWUoXCI8ZGl2IGlkPSd2YWthdGEtZG5kJz48L2Rpdj5cIikuaHRtbChzKS5jc3Moe2Rpc3BsYXk6XCJibG9ja1wiLG1hcmdpbjpcIjBcIixwYWRkaW5nOlwiMFwiLHBvc2l0aW9uOlwiYWJzb2x1dGVcIix0b3A6XCItMjAwMHB4XCIsbGluZUhlaWdodDpcIjE2cHhcIix6SW5kZXg6XCIxMDAwMFwifSkpLGUobCkub24oXCJtb3VzZW1vdmUudmFrYXRhLmpzdHJlZSB0b3VjaG1vdmUudmFrYXRhLmpzdHJlZVwiLGUudmFrYXRhLmRuZC5kcmFnKSxlKGwpLm9uKFwibW91c2V1cC52YWthdGEuanN0cmVlIHRvdWNoZW5kLnZha2F0YS5qc3RyZWVcIixlLnZha2F0YS5kbmQuc3RvcCksITF9LGRyYWc6ZnVuY3Rpb24oaSl7aWYoXCJ0b3VjaG1vdmVcIj09PWkudHlwZSYmaS5vcmlnaW5hbEV2ZW50JiZpLm9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXMmJmkub3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlc1swXSYmKGkucGFnZVg9aS5vcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VYLGkucGFnZVk9aS5vcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VZLGkudGFyZ2V0PWwuZWxlbWVudEZyb21Qb2ludChpLm9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVgtd2luZG93LnBhZ2VYT2Zmc2V0LGkub3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWS13aW5kb3cucGFnZVlPZmZzZXQpKSx0LmlzX2Rvd24pe2lmKCF0LmlzX2RyYWcpe2lmKCEoTWF0aC5hYnMoaS5wYWdlWC10LmluaXRfeCk+KHQuaXNfdG91Y2g/ZS52YWthdGEuZG5kLnNldHRpbmdzLnRocmVzaG9sZF90b3VjaDplLnZha2F0YS5kbmQuc2V0dGluZ3MudGhyZXNob2xkKXx8TWF0aC5hYnMoaS5wYWdlWS10LmluaXRfeSk+KHQuaXNfdG91Y2g/ZS52YWthdGEuZG5kLnNldHRpbmdzLnRocmVzaG9sZF90b3VjaDplLnZha2F0YS5kbmQuc2V0dGluZ3MudGhyZXNob2xkKSkpcmV0dXJuO3QuaGVscGVyJiYodC5oZWxwZXIuYXBwZW5kVG8oXCJib2R5XCIpLHQuaGVscGVyX3c9dC5oZWxwZXIub3V0ZXJXaWR0aCgpKSx0LmlzX2RyYWc9ITAsZS52YWthdGEuZG5kLl90cmlnZ2VyKFwic3RhcnRcIixpKX12YXIgcj0hMSxzPSExLG49ITEsYT0hMSxvPSExLGQ9ITEsYz0hMSxoPSExLF89ITEsdT0hMTtyZXR1cm4gdC5zY3JvbGxfdD0wLHQuc2Nyb2xsX2w9MCx0LnNjcm9sbF9lPSExLGUoZShpLnRhcmdldCkucGFyZW50c1VudGlsKFwiYm9keVwiKS5hZGRCYWNrKCkuZ2V0KCkucmV2ZXJzZSgpKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4vXmF1dG98c2Nyb2xsJC8udGVzdChlKHRoaXMpLmNzcyhcIm92ZXJmbG93XCIpKSYmKHRoaXMuc2Nyb2xsSGVpZ2h0PnRoaXMub2Zmc2V0SGVpZ2h0fHx0aGlzLnNjcm9sbFdpZHRoPnRoaXMub2Zmc2V0V2lkdGgpfSkuZWFjaChmdW5jdGlvbigpe3ZhciByPWUodGhpcykscz1yLm9mZnNldCgpO3JldHVybiB0aGlzLnNjcm9sbEhlaWdodD50aGlzLm9mZnNldEhlaWdodCYmKHMudG9wK3IuaGVpZ2h0KCktaS5wYWdlWTxlLnZha2F0YS5kbmQuc2V0dGluZ3Muc2Nyb2xsX3Byb3hpbWl0eSYmKHQuc2Nyb2xsX3Q9MSksaS5wYWdlWS1zLnRvcDxlLnZha2F0YS5kbmQuc2V0dGluZ3Muc2Nyb2xsX3Byb3hpbWl0eSYmKHQuc2Nyb2xsX3Q9LTEpKSx0aGlzLnNjcm9sbFdpZHRoPnRoaXMub2Zmc2V0V2lkdGgmJihzLmxlZnQrci53aWR0aCgpLWkucGFnZVg8ZS52YWthdGEuZG5kLnNldHRpbmdzLnNjcm9sbF9wcm94aW1pdHkmJih0LnNjcm9sbF9sPTEpLGkucGFnZVgtcy5sZWZ0PGUudmFrYXRhLmRuZC5zZXR0aW5ncy5zY3JvbGxfcHJveGltaXR5JiYodC5zY3JvbGxfbD0tMSkpLHQuc2Nyb2xsX3R8fHQuc2Nyb2xsX2w/KHQuc2Nyb2xsX2U9ZSh0aGlzKSwhMSk6dm9pZCAwfSksdC5zY3JvbGxfZXx8KHI9ZShsKSxzPWUod2luZG93KSxuPXIuaGVpZ2h0KCksYT1zLmhlaWdodCgpLG89ci53aWR0aCgpLGQ9cy53aWR0aCgpLGM9ci5zY3JvbGxUb3AoKSxoPXIuc2Nyb2xsTGVmdCgpLG4+YSYmaS5wYWdlWS1jPGUudmFrYXRhLmRuZC5zZXR0aW5ncy5zY3JvbGxfcHJveGltaXR5JiYodC5zY3JvbGxfdD0tMSksbj5hJiZhLShpLnBhZ2VZLWMpPGUudmFrYXRhLmRuZC5zZXR0aW5ncy5zY3JvbGxfcHJveGltaXR5JiYodC5zY3JvbGxfdD0xKSxvPmQmJmkucGFnZVgtaDxlLnZha2F0YS5kbmQuc2V0dGluZ3Muc2Nyb2xsX3Byb3hpbWl0eSYmKHQuc2Nyb2xsX2w9LTEpLG8+ZCYmZC0oaS5wYWdlWC1oKTxlLnZha2F0YS5kbmQuc2V0dGluZ3Muc2Nyb2xsX3Byb3hpbWl0eSYmKHQuc2Nyb2xsX2w9MSksKHQuc2Nyb2xsX3R8fHQuc2Nyb2xsX2wpJiYodC5zY3JvbGxfZT1yKSksdC5zY3JvbGxfZSYmZS52YWthdGEuZG5kLl9zY3JvbGwoITApLHQuaGVscGVyJiYoXz1wYXJzZUludChpLnBhZ2VZK2UudmFrYXRhLmRuZC5zZXR0aW5ncy5oZWxwZXJfdG9wLDEwKSx1PXBhcnNlSW50KGkucGFnZVgrZS52YWthdGEuZG5kLnNldHRpbmdzLmhlbHBlcl9sZWZ0LDEwKSxuJiZfKzI1Pm4mJihfPW4tNTApLG8mJnUrdC5oZWxwZXJfdz5vJiYodT1vLSh0LmhlbHBlcl93KzIpKSx0LmhlbHBlci5jc3Moe2xlZnQ6dStcInB4XCIsdG9wOl8rXCJweFwifSkpLGUudmFrYXRhLmRuZC5fdHJpZ2dlcihcIm1vdmVcIixpKSwhMX19LHN0b3A6ZnVuY3Rpb24oaSl7aWYoXCJ0b3VjaGVuZFwiPT09aS50eXBlJiZpLm9yaWdpbmFsRXZlbnQmJmkub3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlcyYmaS5vcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdJiYoaS5wYWdlWD1pLm9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVgsaS5wYWdlWT1pLm9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVksaS50YXJnZXQ9bC5lbGVtZW50RnJvbVBvaW50KGkub3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWC13aW5kb3cucGFnZVhPZmZzZXQsaS5vcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VZLXdpbmRvdy5wYWdlWU9mZnNldCkpLHQuaXNfZHJhZyllLnZha2F0YS5kbmQuX3RyaWdnZXIoXCJzdG9wXCIsaSk7ZWxzZSBpZihcInRvdWNoZW5kXCI9PT1pLnR5cGUmJmkudGFyZ2V0PT09dC50YXJnZXQpe3ZhciByPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlKGkudGFyZ2V0KS5jbGljaygpfSwxMDApO2UoaS50YXJnZXQpLm9uZShcImNsaWNrXCIsZnVuY3Rpb24oKXtyJiZjbGVhclRpbWVvdXQocil9KX1yZXR1cm4gZS52YWthdGEuZG5kLl9jbGVhbigpLCExfX19KGUpLGUuanN0cmVlLmRlZmF1bHRzLm1hc3Nsb2FkPW51bGwsZS5qc3RyZWUucGx1Z2lucy5tYXNzbG9hZD1mdW5jdGlvbih0LGkpe3RoaXMuaW5pdD1mdW5jdGlvbihlLHQpe2kuaW5pdC5jYWxsKHRoaXMsZSx0KSx0aGlzLl9kYXRhLm1hc3Nsb2FkPXt9fSx0aGlzLl9sb2FkX25vZGVzPWZ1bmN0aW9uKHQscixzKXt2YXIgbj10aGlzLnNldHRpbmdzLm1hc3Nsb2FkO3JldHVybiBzJiYhZS5pc0VtcHR5T2JqZWN0KHRoaXMuX2RhdGEubWFzc2xvYWQpP2kuX2xvYWRfbm9kZXMuY2FsbCh0aGlzLHQscixzKTplLmlzRnVuY3Rpb24obik/bi5jYWxsKHRoaXMsdCxlLnByb3h5KGZ1bmN0aW9uKGUpe2lmKGUpZm9yKHZhciBuIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShuKSYmKHRoaXMuX2RhdGEubWFzc2xvYWRbbl09ZVtuXSk7aS5fbG9hZF9ub2Rlcy5jYWxsKHRoaXMsdCxyLHMpfSx0aGlzKSk6XCJvYmplY3RcIj09dHlwZW9mIG4mJm4mJm4udXJsPyhuPWUuZXh0ZW5kKCEwLHt9LG4pLGUuaXNGdW5jdGlvbihuLnVybCkmJihuLnVybD1uLnVybC5jYWxsKHRoaXMsdCkpLGUuaXNGdW5jdGlvbihuLmRhdGEpJiYobi5kYXRhPW4uZGF0YS5jYWxsKHRoaXMsdCkpLGUuYWpheChuKS5kb25lKGUucHJveHkoZnVuY3Rpb24oZSxuLGEpe2lmKGUpZm9yKHZhciBvIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShvKSYmKHRoaXMuX2RhdGEubWFzc2xvYWRbb109ZVtvXSk7aS5fbG9hZF9ub2Rlcy5jYWxsKHRoaXMsdCxyLHMpfSx0aGlzKSkuZmFpbChlLnByb3h5KGZ1bmN0aW9uKGUpe2kuX2xvYWRfbm9kZXMuY2FsbCh0aGlzLHQscixzKX0sdGhpcykpKTppLl9sb2FkX25vZGVzLmNhbGwodGhpcyx0LHIscyl9LHRoaXMuX2xvYWRfbm9kZT1mdW5jdGlvbih0LHIpe3ZhciBzPXRoaXMuX2RhdGEubWFzc2xvYWRbdC5pZF07cmV0dXJuIHM/dGhpc1tcInN0cmluZ1wiPT10eXBlb2Ygcz9cIl9hcHBlbmRfaHRtbF9kYXRhXCI6XCJfYXBwZW5kX2pzb25fZGF0YVwiXSh0LFwic3RyaW5nXCI9PXR5cGVvZiBzP2UoZS5wYXJzZUhUTUwocykpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiAzIT09dGhpcy5ub2RlVHlwZX0pOnMsZnVuY3Rpb24oZSl7ci5jYWxsKHRoaXMsZSksZGVsZXRlIHRoaXMuX2RhdGEubWFzc2xvYWRbdC5pZF19KTppLl9sb2FkX25vZGUuY2FsbCh0aGlzLHQscil9fSxlLmpzdHJlZS5kZWZhdWx0cy5zZWFyY2g9e2FqYXg6ITEsZnV6enk6ITEsY2FzZV9zZW5zaXRpdmU6ITEsc2hvd19vbmx5X21hdGNoZXM6ITEsc2hvd19vbmx5X21hdGNoZXNfY2hpbGRyZW46ITEsY2xvc2Vfb3BlbmVkX29uY2xlYXI6ITAsc2VhcmNoX2xlYXZlc19vbmx5OiExLHNlYXJjaF9jYWxsYmFjazohMX0sZS5qc3RyZWUucGx1Z2lucy5zZWFyY2g9ZnVuY3Rpb24oaSxyKXt0aGlzLmJpbmQ9ZnVuY3Rpb24oKXtyLmJpbmQuY2FsbCh0aGlzKSx0aGlzLl9kYXRhLnNlYXJjaC5zdHI9XCJcIix0aGlzLl9kYXRhLnNlYXJjaC5kb209ZSgpLHRoaXMuX2RhdGEuc2VhcmNoLnJlcz1bXSx0aGlzLl9kYXRhLnNlYXJjaC5vcG49W10sdGhpcy5fZGF0YS5zZWFyY2guc29tPSExLHRoaXMuX2RhdGEuc2VhcmNoLnNtYz0hMSx0aGlzLl9kYXRhLnNlYXJjaC5oZG49W10sdGhpcy5lbGVtZW50Lm9uKFwic2VhcmNoLmpzdHJlZVwiLGUucHJveHkoZnVuY3Rpb24odCxpKXtpZih0aGlzLl9kYXRhLnNlYXJjaC5zb20mJmkucmVzLmxlbmd0aCl7dmFyIHIscyxuPXRoaXMuX21vZGVsLmRhdGEsYT1bXTtmb3Iocj0wLHM9aS5yZXMubGVuZ3RoO3M+cjtyKyspbltpLnJlc1tyXV0mJiFuW2kucmVzW3JdXS5zdGF0ZS5oaWRkZW4mJihhLnB1c2goaS5yZXNbcl0pLGE9YS5jb25jYXQobltpLnJlc1tyXV0ucGFyZW50cyksdGhpcy5fZGF0YS5zZWFyY2guc21jJiYoYT1hLmNvbmNhdChuW2kucmVzW3JdXS5jaGlsZHJlbl9kKSkpO2E9ZS52YWthdGEuYXJyYXlfcmVtb3ZlX2l0ZW0oZS52YWthdGEuYXJyYXlfdW5pcXVlKGEpLGUuanN0cmVlLnJvb3QpLHRoaXMuX2RhdGEuc2VhcmNoLmhkbj10aGlzLmhpZGVfYWxsKCEwKSx0aGlzLnNob3dfbm9kZShhKX19LHRoaXMpKS5vbihcImNsZWFyX3NlYXJjaC5qc3RyZWVcIixlLnByb3h5KGZ1bmN0aW9uKGUsdCl7dGhpcy5fZGF0YS5zZWFyY2guc29tJiZ0LnJlcy5sZW5ndGgmJnRoaXMuc2hvd19ub2RlKHRoaXMuX2RhdGEuc2VhcmNoLmhkbil9LHRoaXMpKX0sdGhpcy5zZWFyY2g9ZnVuY3Rpb24oaSxyLHMsbixhLG8pe2lmKGk9PT0hMXx8XCJcIj09PWUudHJpbShpLnRvU3RyaW5nKCkpKXJldHVybiB0aGlzLmNsZWFyX3NlYXJjaCgpO249dGhpcy5nZXRfbm9kZShuKSxuPW4mJm4uaWQ/bi5pZDpudWxsLGk9aS50b1N0cmluZygpO3ZhciBkLGMsbD10aGlzLnNldHRpbmdzLnNlYXJjaCxoPWwuYWpheD9sLmFqYXg6ITEsXz10aGlzLl9tb2RlbC5kYXRhLHU9bnVsbCxnPVtdLGY9W107aWYodGhpcy5fZGF0YS5zZWFyY2gucmVzLmxlbmd0aCYmIWEmJnRoaXMuY2xlYXJfc2VhcmNoKCkscz09PXQmJihzPWwuc2hvd19vbmx5X21hdGNoZXMpLG89PT10JiYobz1sLnNob3dfb25seV9tYXRjaGVzX2NoaWxkcmVuKSwhciYmaCE9PSExKXJldHVybiBlLmlzRnVuY3Rpb24oaCk/aC5jYWxsKHRoaXMsaSxlLnByb3h5KGZ1bmN0aW9uKHQpe3QmJnQuZCYmKHQ9dC5kKSx0aGlzLl9sb2FkX25vZGVzKGUuaXNBcnJheSh0KT9lLnZha2F0YS5hcnJheV91bmlxdWUodCk6W10sZnVuY3Rpb24oKXt0aGlzLnNlYXJjaChpLCEwLHMsbixhKX0sITApfSx0aGlzKSxuKTooaD1lLmV4dGVuZCh7fSxoKSxoLmRhdGF8fChoLmRhdGE9e30pLGguZGF0YS5zdHI9aSxuJiYoaC5kYXRhLmluc2lkZT1uKSxlLmFqYXgoaCkuZmFpbChlLnByb3h5KGZ1bmN0aW9uKCl7dGhpcy5fZGF0YS5jb3JlLmxhc3RfZXJyb3I9e2Vycm9yOlwiYWpheFwiLHBsdWdpbjpcInNlYXJjaFwiLGlkOlwic2VhcmNoXzAxXCIscmVhc29uOlwiQ291bGQgbm90IGxvYWQgc2VhcmNoIHBhcmVudHNcIixkYXRhOkpTT04uc3RyaW5naWZ5KGgpfSx0aGlzLnNldHRpbmdzLmNvcmUuZXJyb3IuY2FsbCh0aGlzLHRoaXMuX2RhdGEuY29yZS5sYXN0X2Vycm9yKX0sdGhpcykpLmRvbmUoZS5wcm94eShmdW5jdGlvbih0KXt0JiZ0LmQmJih0PXQuZCksdGhpcy5fbG9hZF9ub2RlcyhlLmlzQXJyYXkodCk/ZS52YWthdGEuYXJyYXlfdW5pcXVlKHQpOltdLGZ1bmN0aW9uKCl7dGhpcy5zZWFyY2goaSwhMCxzLG4sYSl9LCEwKX0sdGhpcykpKTtpZihhfHwodGhpcy5fZGF0YS5zZWFyY2guc3RyPWksdGhpcy5fZGF0YS5zZWFyY2guZG9tPWUoKSx0aGlzLl9kYXRhLnNlYXJjaC5yZXM9W10sdGhpcy5fZGF0YS5zZWFyY2gub3BuPVtdLHRoaXMuX2RhdGEuc2VhcmNoLnNvbT1zLHRoaXMuX2RhdGEuc2VhcmNoLnNtYz1vKSx1PW5ldyBlLnZha2F0YS5zZWFyY2goaSwhMCx7Y2FzZVNlbnNpdGl2ZTpsLmNhc2Vfc2Vuc2l0aXZlLGZ1enp5OmwuZnV6enl9KSxlLmVhY2goX1tuP246ZS5qc3RyZWUucm9vdF0uY2hpbGRyZW5fZCxmdW5jdGlvbihlLHQpe3ZhciByPV9bdF07ci50ZXh0JiYoIWwuc2VhcmNoX2xlYXZlc19vbmx5fHxyLnN0YXRlLmxvYWRlZCYmMD09PXIuY2hpbGRyZW4ubGVuZ3RoKSYmKGwuc2VhcmNoX2NhbGxiYWNrJiZsLnNlYXJjaF9jYWxsYmFjay5jYWxsKHRoaXMsaSxyKXx8IWwuc2VhcmNoX2NhbGxiYWNrJiZ1LnNlYXJjaChyLnRleHQpLmlzTWF0Y2gpJiYoZy5wdXNoKHQpLGY9Zi5jb25jYXQoci5wYXJlbnRzKSl9KSxnLmxlbmd0aCl7Zm9yKGY9ZS52YWthdGEuYXJyYXlfdW5pcXVlKGYpLGQ9MCxjPWYubGVuZ3RoO2M+ZDtkKyspZltkXSE9PWUuanN0cmVlLnJvb3QmJl9bZltkXV0mJnRoaXMub3Blbl9ub2RlKGZbZF0sbnVsbCwwKT09PSEwJiZ0aGlzLl9kYXRhLnNlYXJjaC5vcG4ucHVzaChmW2RdKTthPyh0aGlzLl9kYXRhLnNlYXJjaC5kb209dGhpcy5fZGF0YS5zZWFyY2guZG9tLmFkZChlKHRoaXMuZWxlbWVudFswXS5xdWVyeVNlbGVjdG9yQWxsKFwiI1wiK2UubWFwKGcsZnVuY3Rpb24odCl7cmV0dXJuLTEhPT1cIjAxMjM0NTY3ODlcIi5pbmRleE9mKHRbMF0pP1wiXFxcXDNcIit0WzBdK1wiIFwiK3Quc3Vic3RyKDEpLnJlcGxhY2UoZS5qc3RyZWUuaWRyZWdleCxcIlxcXFwkJlwiKTp0LnJlcGxhY2UoZS5qc3RyZWUuaWRyZWdleCxcIlxcXFwkJlwiKX0pLmpvaW4oXCIsICNcIikpKSksdGhpcy5fZGF0YS5zZWFyY2gucmVzPWUudmFrYXRhLmFycmF5X3VuaXF1ZSh0aGlzLl9kYXRhLnNlYXJjaC5yZXMuY29uY2F0KGcpKSk6KHRoaXMuX2RhdGEuc2VhcmNoLmRvbT1lKHRoaXMuZWxlbWVudFswXS5xdWVyeVNlbGVjdG9yQWxsKFwiI1wiK2UubWFwKGcsZnVuY3Rpb24odCl7cmV0dXJuLTEhPT1cIjAxMjM0NTY3ODlcIi5pbmRleE9mKHRbMF0pP1wiXFxcXDNcIit0WzBdK1wiIFwiK3Quc3Vic3RyKDEpLnJlcGxhY2UoZS5qc3RyZWUuaWRyZWdleCxcIlxcXFwkJlwiKTp0LnJlcGxhY2UoZS5qc3RyZWUuaWRyZWdleCxcIlxcXFwkJlwiKX0pLmpvaW4oXCIsICNcIikpKSx0aGlzLl9kYXRhLnNlYXJjaC5yZXM9ZyksdGhpcy5fZGF0YS5zZWFyY2guZG9tLmNoaWxkcmVuKFwiLmpzdHJlZS1hbmNob3JcIikuYWRkQ2xhc3MoXCJqc3RyZWUtc2VhcmNoXCIpfXRoaXMudHJpZ2dlcihcInNlYXJjaFwiLHtub2Rlczp0aGlzLl9kYXRhLnNlYXJjaC5kb20sc3RyOmkscmVzOnRoaXMuX2RhdGEuc2VhcmNoLnJlcyxzaG93X29ubHlfbWF0Y2hlczpzfSl9LHRoaXMuY2xlYXJfc2VhcmNoPWZ1bmN0aW9uKCl7dGhpcy5zZXR0aW5ncy5zZWFyY2guY2xvc2Vfb3BlbmVkX29uY2xlYXImJnRoaXMuY2xvc2Vfbm9kZSh0aGlzLl9kYXRhLnNlYXJjaC5vcG4sMCksdGhpcy50cmlnZ2VyKFwiY2xlYXJfc2VhcmNoXCIse25vZGVzOnRoaXMuX2RhdGEuc2VhcmNoLmRvbSxzdHI6dGhpcy5fZGF0YS5zZWFyY2guc3RyLHJlczp0aGlzLl9kYXRhLnNlYXJjaC5yZXN9KSx0aGlzLl9kYXRhLnNlYXJjaC5yZXMubGVuZ3RoJiYodGhpcy5fZGF0YS5zZWFyY2guZG9tPWUodGhpcy5lbGVtZW50WzBdLnF1ZXJ5U2VsZWN0b3JBbGwoXCIjXCIrZS5tYXAodGhpcy5fZGF0YS5zZWFyY2gucmVzLGZ1bmN0aW9uKHQpe3JldHVybi0xIT09XCIwMTIzNDU2Nzg5XCIuaW5kZXhPZih0WzBdKT9cIlxcXFwzXCIrdFswXStcIiBcIit0LnN1YnN0cigxKS5yZXBsYWNlKGUuanN0cmVlLmlkcmVnZXgsXCJcXFxcJCZcIik6dC5yZXBsYWNlKGUuanN0cmVlLmlkcmVnZXgsXCJcXFxcJCZcIil9KS5qb2luKFwiLCAjXCIpKSksdGhpcy5fZGF0YS5zZWFyY2guZG9tLmNoaWxkcmVuKFwiLmpzdHJlZS1hbmNob3JcIikucmVtb3ZlQ2xhc3MoXCJqc3RyZWUtc2VhcmNoXCIpKSx0aGlzLl9kYXRhLnNlYXJjaC5zdHI9XCJcIix0aGlzLl9kYXRhLnNlYXJjaC5yZXM9W10sdGhpcy5fZGF0YS5zZWFyY2gub3BuPVtdLHRoaXMuX2RhdGEuc2VhcmNoLmRvbT1lKCl9LHRoaXMucmVkcmF3X25vZGU9ZnVuY3Rpb24odCxpLHMsbil7aWYodD1yLnJlZHJhd19ub2RlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0JiYtMSE9PWUuaW5BcnJheSh0LmlkLHRoaXMuX2RhdGEuc2VhcmNoLnJlcykpe3ZhciBhLG8sZD1udWxsO2ZvcihhPTAsbz10LmNoaWxkTm9kZXMubGVuZ3RoO28+YTthKyspaWYodC5jaGlsZE5vZGVzW2FdJiZ0LmNoaWxkTm9kZXNbYV0uY2xhc3NOYW1lJiYtMSE9PXQuY2hpbGROb2Rlc1thXS5jbGFzc05hbWUuaW5kZXhPZihcImpzdHJlZS1hbmNob3JcIikpe2Q9dC5jaGlsZE5vZGVzW2FdO2JyZWFrfWQmJihkLmNsYXNzTmFtZSs9XCIganN0cmVlLXNlYXJjaFwiKX1yZXR1cm4gdH19LGZ1bmN0aW9uKGUpe2UudmFrYXRhLnNlYXJjaD1mdW5jdGlvbih0LGkscil7cj1yfHx7fSxyPWUuZXh0ZW5kKHt9LGUudmFrYXRhLnNlYXJjaC5kZWZhdWx0cyxyKSxyLmZ1enp5IT09ITEmJihyLmZ1enp5PSEwKSx0PXIuY2FzZVNlbnNpdGl2ZT90OnQudG9Mb3dlckNhc2UoKTt2YXIgcyxuLGEsbyxkPXIubG9jYXRpb24sYz1yLmRpc3RhbmNlLGw9ci50aHJlc2hvbGQsaD10Lmxlbmd0aDtyZXR1cm4gaD4zMiYmKHIuZnV6enk9ITEpLHIuZnV6enkmJihzPTE8PGgtMSxuPWZ1bmN0aW9uKCl7dmFyIGU9e30saT0wO2ZvcihpPTA7aD5pO2krKyllW3QuY2hhckF0KGkpXT0wO2ZvcihpPTA7aD5pO2krKyllW3QuY2hhckF0KGkpXXw9MTw8aC1pLTE7cmV0dXJuIGV9KCksYT1mdW5jdGlvbihlLHQpe3ZhciBpPWUvaCxyPU1hdGguYWJzKGQtdCk7cmV0dXJuIGM/aStyL2M6cj8xOml9KSxvPWZ1bmN0aW9uKGUpe2lmKGU9ci5jYXNlU2Vuc2l0aXZlP2U6ZS50b0xvd2VyQ2FzZSgpLHQ9PT1lfHwtMSE9PWUuaW5kZXhPZih0KSlyZXR1cm57aXNNYXRjaDohMCxzY29yZTowfTtpZighci5mdXp6eSlyZXR1cm57aXNNYXRjaDohMSxzY29yZToxfTt2YXIgaSxvLGMsXyx1LGcsZixwLG0sdj1lLmxlbmd0aCxqPWwseT1lLmluZGV4T2YodCxkKSxrPWgrdix4PTEsYj1bXTtmb3IoLTEhPT15JiYoaj1NYXRoLm1pbihhKDAseSksaikseT1lLmxhc3RJbmRleE9mKHQsZCtoKSwtMSE9PXkmJihqPU1hdGgubWluKGEoMCx5KSxqKSkpLHk9LTEsaT0wO2g+aTtpKyspe2ZvcihjPTAsXz1rO18+YzspYShpLGQrXyk8PWo/Yz1fOms9XyxfPU1hdGguZmxvb3IoKGstYykvMitjKTtmb3Ioaz1fLGc9TWF0aC5tYXgoMSxkLV8rMSksZj1NYXRoLm1pbihkK18sdikraCxwPW5ldyBBcnJheShmKzIpLHBbZisxXT0oMTw8aSktMSxvPWY7bz49ZztvLS0paWYobT1uW2UuY2hhckF0KG8tMSldLDA9PT1pP3Bbb109KHBbbysxXTw8MXwxKSZtOnBbb109KHBbbysxXTw8MXwxKSZtfCgodVtvKzFdfHVbb10pPDwxfDEpfHVbbysxXSxwW29dJnMmJih4PWEoaSxvLTEpLGo+PXgpKXtpZihqPXgseT1vLTEsYi5wdXNoKHkpLCEoeT5kKSlicmVhaztnPU1hdGgubWF4KDEsMipkLXkpfWlmKGEoaSsxLGQpPmopYnJlYWs7dT1wfXJldHVybntpc01hdGNoOnk+PTAsc2NvcmU6eH19LGk9PT0hMD97c2VhcmNoOm99Om8oaSl9LGUudmFrYXRhLnNlYXJjaC5kZWZhdWx0cz17bG9jYXRpb246MCxkaXN0YW5jZToxMDAsdGhyZXNob2xkOi42LGZ1enp5OiExLGNhc2VTZW5zaXRpdmU6ITF9fShlKSxlLmpzdHJlZS5kZWZhdWx0cy5zb3J0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZ2V0X3RleHQoZSk+dGhpcy5nZXRfdGV4dCh0KT8xOi0xfSxlLmpzdHJlZS5wbHVnaW5zLnNvcnQ9ZnVuY3Rpb24odCxpKXt0aGlzLmJpbmQ9ZnVuY3Rpb24oKXtpLmJpbmQuY2FsbCh0aGlzKSx0aGlzLmVsZW1lbnQub24oXCJtb2RlbC5qc3RyZWVcIixlLnByb3h5KGZ1bmN0aW9uKGUsdCl7dGhpcy5zb3J0KHQucGFyZW50LCEwKX0sdGhpcykpLm9uKFwicmVuYW1lX25vZGUuanN0cmVlIGNyZWF0ZV9ub2RlLmpzdHJlZVwiLGUucHJveHkoZnVuY3Rpb24oZSx0KXt0aGlzLnNvcnQodC5wYXJlbnR8fHQubm9kZS5wYXJlbnQsITEpLHRoaXMucmVkcmF3X25vZGUodC5wYXJlbnR8fHQubm9kZS5wYXJlbnQsITApfSx0aGlzKSkub24oXCJtb3ZlX25vZGUuanN0cmVlIGNvcHlfbm9kZS5qc3RyZWVcIixlLnByb3h5KGZ1bmN0aW9uKGUsdCl7dGhpcy5zb3J0KHQucGFyZW50LCExKSx0aGlzLnJlZHJhd19ub2RlKHQucGFyZW50LCEwKX0sdGhpcykpfSx0aGlzLnNvcnQ9ZnVuY3Rpb24odCxpKXt2YXIgcixzO2lmKHQ9dGhpcy5nZXRfbm9kZSh0KSx0JiZ0LmNoaWxkcmVuJiZ0LmNoaWxkcmVuLmxlbmd0aCYmKHQuY2hpbGRyZW4uc29ydChlLnByb3h5KHRoaXMuc2V0dGluZ3Muc29ydCx0aGlzKSksaSkpZm9yKHI9MCxzPXQuY2hpbGRyZW5fZC5sZW5ndGg7cz5yO3IrKyl0aGlzLnNvcnQodC5jaGlsZHJlbl9kW3JdLCExKX19O3ZhciB1PSExO2UuanN0cmVlLmRlZmF1bHRzLnN0YXRlPXtrZXk6XCJqc3RyZWVcIixldmVudHM6XCJjaGFuZ2VkLmpzdHJlZSBvcGVuX25vZGUuanN0cmVlIGNsb3NlX25vZGUuanN0cmVlIGNoZWNrX25vZGUuanN0cmVlIHVuY2hlY2tfbm9kZS5qc3RyZWVcIix0dGw6ITEsZmlsdGVyOiExfSxlLmpzdHJlZS5wbHVnaW5zLnN0YXRlPWZ1bmN0aW9uKHQsaSl7dGhpcy5iaW5kPWZ1bmN0aW9uKCl7aS5iaW5kLmNhbGwodGhpcyk7dmFyIHQ9ZS5wcm94eShmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5vbih0aGlzLnNldHRpbmdzLnN0YXRlLmV2ZW50cyxlLnByb3h5KGZ1bmN0aW9uKCl7dSYmY2xlYXJUaW1lb3V0KHUpLHU9c2V0VGltZW91dChlLnByb3h5KGZ1bmN0aW9uKCl7dGhpcy5zYXZlX3N0YXRlKCl9LHRoaXMpLDEwMCl9LHRoaXMpKSx0aGlzLnRyaWdnZXIoXCJzdGF0ZV9yZWFkeVwiKX0sdGhpcyk7dGhpcy5lbGVtZW50Lm9uKFwicmVhZHkuanN0cmVlXCIsZS5wcm94eShmdW5jdGlvbihlLGkpe3RoaXMuZWxlbWVudC5vbmUoXCJyZXN0b3JlX3N0YXRlLmpzdHJlZVwiLHQpLHRoaXMucmVzdG9yZV9zdGF0ZSgpfHx0KCl9LHRoaXMpKX0sdGhpcy5zYXZlX3N0YXRlPWZ1bmN0aW9uKCl7dmFyIHQ9e3N0YXRlOnRoaXMuZ2V0X3N0YXRlKCksdHRsOnRoaXMuc2V0dGluZ3Muc3RhdGUudHRsLHNlYzorbmV3IERhdGV9O2UudmFrYXRhLnN0b3JhZ2Uuc2V0KHRoaXMuc2V0dGluZ3Muc3RhdGUua2V5LEpTT04uc3RyaW5naWZ5KHQpKX0sdGhpcy5yZXN0b3JlX3N0YXRlPWZ1bmN0aW9uKCl7dmFyIHQ9ZS52YWthdGEuc3RvcmFnZS5nZXQodGhpcy5zZXR0aW5ncy5zdGF0ZS5rZXkpO2lmKHQpdHJ5e3Q9SlNPTi5wYXJzZSh0KX1jYXRjaChpKXtyZXR1cm4hMX1yZXR1cm4gdCYmdC50dGwmJnQuc2VjJiYrbmV3IERhdGUtdC5zZWM+dC50dGw/ITE6KHQmJnQuc3RhdGUmJih0PXQuc3RhdGUpLHQmJmUuaXNGdW5jdGlvbih0aGlzLnNldHRpbmdzLnN0YXRlLmZpbHRlcikmJih0PXRoaXMuc2V0dGluZ3Muc3RhdGUuZmlsdGVyLmNhbGwodGhpcyx0KSksdD8odGhpcy5lbGVtZW50Lm9uZShcInNldF9zdGF0ZS5qc3RyZWVcIixmdW5jdGlvbihpLHIpe3IuaW5zdGFuY2UudHJpZ2dlcihcInJlc3RvcmVfc3RhdGVcIix7c3RhdGU6ZS5leHRlbmQoITAse30sdCl9KX0pLHRoaXMuc2V0X3N0YXRlKHQpLCEwKTohMSl9LHRoaXMuY2xlYXJfc3RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gZS52YWthdGEuc3RvcmFnZS5kZWwodGhpcy5zZXR0aW5ncy5zdGF0ZS5rZXkpfX0sZnVuY3Rpb24oZSx0KXtlLnZha2F0YS5zdG9yYWdlPXtzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGUsdCl9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGUpfSxkZWw6ZnVuY3Rpb24oZSl7cmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShlKX19fShlKSxlLmpzdHJlZS5kZWZhdWx0cy50eXBlcz17XCJkZWZhdWx0XCI6e319LGUuanN0cmVlLmRlZmF1bHRzLnR5cGVzW2UuanN0cmVlLnJvb3RdPXt9LGUuanN0cmVlLnBsdWdpbnMudHlwZXM9ZnVuY3Rpb24oaSxyKXt0aGlzLmluaXQ9ZnVuY3Rpb24oaSxzKXt2YXIgbixhO2lmKHMmJnMudHlwZXMmJnMudHlwZXNbXCJkZWZhdWx0XCJdKWZvcihuIGluIHMudHlwZXMpaWYoXCJkZWZhdWx0XCIhPT1uJiZuIT09ZS5qc3RyZWUucm9vdCYmcy50eXBlcy5oYXNPd25Qcm9wZXJ0eShuKSlmb3IoYSBpbiBzLnR5cGVzW1wiZGVmYXVsdFwiXSlzLnR5cGVzW1wiZGVmYXVsdFwiXS5oYXNPd25Qcm9wZXJ0eShhKSYmcy50eXBlc1tuXVthXT09PXQmJihzLnR5cGVzW25dW2FdPXMudHlwZXNbXCJkZWZhdWx0XCJdW2FdKTtyLmluaXQuY2FsbCh0aGlzLGkscyksdGhpcy5fbW9kZWwuZGF0YVtlLmpzdHJlZS5yb290XS50eXBlPWUuanN0cmVlLnJvb3R9LHRoaXMucmVmcmVzaD1mdW5jdGlvbih0LGkpe3IucmVmcmVzaC5jYWxsKHRoaXMsdCxpKSx0aGlzLl9tb2RlbC5kYXRhW2UuanN0cmVlLnJvb3RdLnR5cGU9ZS5qc3RyZWUucm9vdH0sdGhpcy5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50Lm9uKFwibW9kZWwuanN0cmVlXCIsZS5wcm94eShmdW5jdGlvbihpLHIpe3ZhciBzLG4sYT10aGlzLl9tb2RlbC5kYXRhLG89ci5ub2RlcyxkPXRoaXMuc2V0dGluZ3MudHlwZXMsYz1cImRlZmF1bHRcIjtmb3Iocz0wLG49by5sZW5ndGg7bj5zO3MrKyljPVwiZGVmYXVsdFwiLGFbb1tzXV0ub3JpZ2luYWwmJmFbb1tzXV0ub3JpZ2luYWwudHlwZSYmZFthW29bc11dLm9yaWdpbmFsLnR5cGVdJiYoYz1hW29bc11dLm9yaWdpbmFsLnR5cGUpLGFbb1tzXV0uZGF0YSYmYVtvW3NdXS5kYXRhLmpzdHJlZSYmYVtvW3NdXS5kYXRhLmpzdHJlZS50eXBlJiZkW2Fbb1tzXV0uZGF0YS5qc3RyZWUudHlwZV0mJihjPWFbb1tzXV0uZGF0YS5qc3RyZWUudHlwZSksYVtvW3NdXS50eXBlPWMsYVtvW3NdXS5pY29uPT09ITAmJmRbY10uaWNvbiE9PXQmJihhW29bc11dLmljb249ZFtjXS5pY29uKTthW2UuanN0cmVlLnJvb3RdLnR5cGU9ZS5qc3RyZWUucm9vdH0sdGhpcykpLHIuYmluZC5jYWxsKHRoaXMpfSx0aGlzLmdldF9qc29uPWZ1bmN0aW9uKHQsaSxzKXt2YXIgbixhLG89dGhpcy5fbW9kZWwuZGF0YSxkPWk/ZS5leHRlbmQoITAse30saSx7bm9faWQ6ITF9KTp7fSxjPXIuZ2V0X2pzb24uY2FsbCh0aGlzLHQsZCxzKTtpZihjPT09ITEpcmV0dXJuITE7aWYoZS5pc0FycmF5KGMpKWZvcihuPTAsYT1jLmxlbmd0aDthPm47bisrKWNbbl0udHlwZT1jW25dLmlkJiZvW2Nbbl0uaWRdJiZvW2Nbbl0uaWRdLnR5cGU/b1tjW25dLmlkXS50eXBlOlwiZGVmYXVsdFwiLGkmJmkubm9faWQmJihkZWxldGUgY1tuXS5pZCxjW25dLmxpX2F0dHImJmNbbl0ubGlfYXR0ci5pZCYmZGVsZXRlIGNbbl0ubGlfYXR0ci5pZCxjW25dLmFfYXR0ciYmY1tuXS5hX2F0dHIuaWQmJmRlbGV0ZSBjW25dLmFfYXR0ci5pZCk7ZWxzZSBjLnR5cGU9Yy5pZCYmb1tjLmlkXSYmb1tjLmlkXS50eXBlP29bYy5pZF0udHlwZTpcImRlZmF1bHRcIixpJiZpLm5vX2lkJiYoYz10aGlzLl9kZWxldGVfaWRzKGMpKTtyZXR1cm4gY30sdGhpcy5fZGVsZXRlX2lkcz1mdW5jdGlvbih0KXtpZihlLmlzQXJyYXkodCkpe2Zvcih2YXIgaT0wLHI9dC5sZW5ndGg7cj5pO2krKyl0W2ldPXRoaXMuX2RlbGV0ZV9pZHModFtpXSk7cmV0dXJuIHR9cmV0dXJuIGRlbGV0ZSB0LmlkLHQubGlfYXR0ciYmdC5saV9hdHRyLmlkJiZkZWxldGUgdC5saV9hdHRyLmlkLHQuYV9hdHRyJiZ0LmFfYXR0ci5pZCYmZGVsZXRlIHQuYV9hdHRyLmlkLHQuY2hpbGRyZW4mJmUuaXNBcnJheSh0LmNoaWxkcmVuKSYmKHQuY2hpbGRyZW49dGhpcy5fZGVsZXRlX2lkcyh0LmNoaWxkcmVuKSksdH0sdGhpcy5jaGVjaz1mdW5jdGlvbihpLHMsbixhLG8pe2lmKHIuY2hlY2suY2FsbCh0aGlzLGkscyxuLGEsbyk9PT0hMSlyZXR1cm4hMTtzPXMmJnMuaWQ/czp0aGlzLmdldF9ub2RlKHMpLG49biYmbi5pZD9uOnRoaXMuZ2V0X25vZGUobik7dmFyIGQsYyxsLGgsXz1zJiZzLmlkP28mJm8ub3JpZ2luP28ub3JpZ2luOmUuanN0cmVlLnJlZmVyZW5jZShzLmlkKTpudWxsO3N3aXRjaChfPV8mJl8uX21vZGVsJiZfLl9tb2RlbC5kYXRhP18uX21vZGVsLmRhdGE6bnVsbCxpKXtjYXNlXCJjcmVhdGVfbm9kZVwiOmNhc2VcIm1vdmVfbm9kZVwiOmNhc2VcImNvcHlfbm9kZVwiOmlmKFwibW92ZV9ub2RlXCIhPT1pfHwtMT09PWUuaW5BcnJheShzLmlkLG4uY2hpbGRyZW4pKXtpZihkPXRoaXMuZ2V0X3J1bGVzKG4pLGQubWF4X2NoaWxkcmVuIT09dCYmLTEhPT1kLm1heF9jaGlsZHJlbiYmZC5tYXhfY2hpbGRyZW49PT1uLmNoaWxkcmVuLmxlbmd0aClyZXR1cm4gdGhpcy5fZGF0YS5jb3JlLmxhc3RfZXJyb3I9e2Vycm9yOlwiY2hlY2tcIixwbHVnaW46XCJ0eXBlc1wiLGlkOlwidHlwZXNfMDFcIixyZWFzb246XCJtYXhfY2hpbGRyZW4gcHJldmVudHMgZnVuY3Rpb246IFwiK2ksZGF0YTpKU09OLnN0cmluZ2lmeSh7Y2hrOmkscG9zOmEsb2JqOnMmJnMuaWQ/cy5pZDohMSxwYXI6biYmbi5pZD9uLmlkOiExfSl9LCExO2lmKGQudmFsaWRfY2hpbGRyZW4hPT10JiYtMSE9PWQudmFsaWRfY2hpbGRyZW4mJi0xPT09ZS5pbkFycmF5KHMudHlwZXx8XCJkZWZhdWx0XCIsZC52YWxpZF9jaGlsZHJlbikpcmV0dXJuIHRoaXMuX2RhdGEuY29yZS5sYXN0X2Vycm9yPXtlcnJvcjpcImNoZWNrXCIscGx1Z2luOlwidHlwZXNcIixpZDpcInR5cGVzXzAyXCIscmVhc29uOlwidmFsaWRfY2hpbGRyZW4gcHJldmVudHMgZnVuY3Rpb246IFwiK2ksZGF0YTpKU09OLnN0cmluZ2lmeSh7Y2hrOmkscG9zOmEsb2JqOnMmJnMuaWQ/cy5pZDohMSxwYXI6biYmbi5pZD9uLmlkOiExfSl9LCExO2lmKF8mJnMuY2hpbGRyZW5fZCYmcy5wYXJlbnRzKXtmb3IoYz0wLGw9MCxoPXMuY2hpbGRyZW5fZC5sZW5ndGg7aD5sO2wrKyljPU1hdGgubWF4KGMsX1tzLmNoaWxkcmVuX2RbbF1dLnBhcmVudHMubGVuZ3RoKTtjPWMtcy5wYXJlbnRzLmxlbmd0aCsxfSgwPj1jfHxjPT09dCkmJihjPTEpO2Rve2lmKGQubWF4X2RlcHRoIT09dCYmLTEhPT1kLm1heF9kZXB0aCYmZC5tYXhfZGVwdGg8YylyZXR1cm4gdGhpcy5fZGF0YS5jb3JlLmxhc3RfZXJyb3I9e2Vycm9yOlwiY2hlY2tcIixwbHVnaW46XCJ0eXBlc1wiLGlkOlwidHlwZXNfMDNcIixyZWFzb246XCJtYXhfZGVwdGggcHJldmVudHMgZnVuY3Rpb246IFwiK2ksZGF0YTpKU09OLnN0cmluZ2lmeSh7Y2hrOmkscG9zOmEsb2JqOnMmJnMuaWQ/cy5pZDohMSxwYXI6biYmbi5pZD9uLmlkOiExfSl9LCExO249dGhpcy5nZXRfbm9kZShuLnBhcmVudCksZD10aGlzLmdldF9ydWxlcyhuKSxjKyt9d2hpbGUobil9fXJldHVybiEwfSx0aGlzLmdldF9ydWxlcz1mdW5jdGlvbihlKXtpZihlPXRoaXMuZ2V0X25vZGUoZSksIWUpcmV0dXJuITE7dmFyIGk9dGhpcy5nZXRfdHlwZShlLCEwKTtyZXR1cm4gaS5tYXhfZGVwdGg9PT10JiYoaS5tYXhfZGVwdGg9LTEpLGkubWF4X2NoaWxkcmVuPT09dCYmKGkubWF4X2NoaWxkcmVuPS0xKSxpLnZhbGlkX2NoaWxkcmVuPT09dCYmKGkudmFsaWRfY2hpbGRyZW49LTEpLGl9LHRoaXMuZ2V0X3R5cGU9ZnVuY3Rpb24odCxpKXtyZXR1cm4gdD10aGlzLmdldF9ub2RlKHQpLHQ/aT9lLmV4dGVuZCh7dHlwZTp0LnR5cGV9LHRoaXMuc2V0dGluZ3MudHlwZXNbdC50eXBlXSk6dC50eXBlOiExfSx0aGlzLnNldF90eXBlPWZ1bmN0aW9uKGkscil7dmFyIHMsbixhLG8sZDtpZihlLmlzQXJyYXkoaSkpe2ZvcihpPWkuc2xpY2UoKSxuPTAsYT1pLmxlbmd0aDthPm47bisrKXRoaXMuc2V0X3R5cGUoaVtuXSxyKTtyZXR1cm4hMH1yZXR1cm4gcz10aGlzLnNldHRpbmdzLnR5cGVzLGk9dGhpcy5nZXRfbm9kZShpKSxzW3JdJiZpPyhvPWkudHlwZSxkPXRoaXMuZ2V0X2ljb24oaSksaS50eXBlPXIsKGQ9PT0hMHx8c1tvXSYmc1tvXS5pY29uIT09dCYmZD09PXNbb10uaWNvbikmJnRoaXMuc2V0X2ljb24oaSxzW3JdLmljb24hPT10P3Nbcl0uaWNvbjohMCksITApOiExfX0sZS5qc3RyZWUuZGVmYXVsdHMudW5pcXVlPXtjYXNlX3NlbnNpdGl2ZTohMSxkdXBsaWNhdGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZStcIiAoXCIrdCtcIilcIn19LGUuanN0cmVlLnBsdWdpbnMudW5pcXVlPWZ1bmN0aW9uKGkscil7dGhpcy5jaGVjaz1mdW5jdGlvbih0LGkscyxuLGEpe2lmKHIuY2hlY2suY2FsbCh0aGlzLHQsaSxzLG4sYSk9PT0hMSlyZXR1cm4hMTtpZihpPWkmJmkuaWQ/aTp0aGlzLmdldF9ub2RlKGkpLHM9cyYmcy5pZD9zOnRoaXMuZ2V0X25vZGUocyksIXN8fCFzLmNoaWxkcmVuKXJldHVybiEwO3ZhciBvLGQsYz1cInJlbmFtZV9ub2RlXCI9PT10P246aS50ZXh0LGw9W10saD10aGlzLnNldHRpbmdzLnVuaXF1ZS5jYXNlX3NlbnNpdGl2ZSxfPXRoaXMuX21vZGVsLmRhdGE7Zm9yKG89MCxkPXMuY2hpbGRyZW4ubGVuZ3RoO2Q+bztvKyspbC5wdXNoKGg/X1tzLmNoaWxkcmVuW29dXS50ZXh0Ol9bcy5jaGlsZHJlbltvXV0udGV4dC50b0xvd2VyQ2FzZSgpKTtzd2l0Y2goaHx8KGM9Yy50b0xvd2VyQ2FzZSgpKSx0KXtjYXNlXCJkZWxldGVfbm9kZVwiOnJldHVybiEwO2Nhc2VcInJlbmFtZV9ub2RlXCI6cmV0dXJuIG89LTE9PT1lLmluQXJyYXkoYyxsKXx8aS50ZXh0JiZpLnRleHRbaD9cInRvU3RyaW5nXCI6XCJ0b0xvd2VyQ2FzZVwiXSgpPT09YyxvfHwodGhpcy5fZGF0YS5jb3JlLmxhc3RfZXJyb3I9e2Vycm9yOlwiY2hlY2tcIixwbHVnaW46XCJ1bmlxdWVcIixpZDpcInVuaXF1ZV8wMVwiLHJlYXNvbjpcIkNoaWxkIHdpdGggbmFtZSBcIitjK1wiIGFscmVhZHkgZXhpc3RzLiBQcmV2ZW50aW5nOiBcIit0LGRhdGE6SlNPTi5zdHJpbmdpZnkoe2Noazp0LHBvczpuLG9iajppJiZpLmlkP2kuaWQ6ITEscGFyOnMmJnMuaWQ/cy5pZDohMX0pfSksbztjYXNlXCJjcmVhdGVfbm9kZVwiOnJldHVybiBvPS0xPT09ZS5pbkFycmF5KGMsbCksb3x8KHRoaXMuX2RhdGEuY29yZS5sYXN0X2Vycm9yPXtlcnJvcjpcImNoZWNrXCIscGx1Z2luOlwidW5pcXVlXCIsaWQ6XCJ1bmlxdWVfMDRcIixyZWFzb246XCJDaGlsZCB3aXRoIG5hbWUgXCIrYytcIiBhbHJlYWR5IGV4aXN0cy4gUHJldmVudGluZzogXCIrdCxkYXRhOkpTT04uc3RyaW5naWZ5KHtjaGs6dCxwb3M6bixvYmo6aSYmaS5pZD9pLmlkOiExLHBhcjpzJiZzLmlkP3MuaWQ6ITF9KX0pLG87Y2FzZVwiY29weV9ub2RlXCI6cmV0dXJuIG89LTE9PT1lLmluQXJyYXkoYyxsKSxvfHwodGhpcy5fZGF0YS5jb3JlLmxhc3RfZXJyb3I9e2Vycm9yOlwiY2hlY2tcIixwbHVnaW46XCJ1bmlxdWVcIixpZDpcInVuaXF1ZV8wMlwiLHJlYXNvbjpcIkNoaWxkIHdpdGggbmFtZSBcIitjK1wiIGFscmVhZHkgZXhpc3RzLiBQcmV2ZW50aW5nOiBcIit0LGRhdGE6SlNPTi5zdHJpbmdpZnkoe2Noazp0LHBvczpuLG9iajppJiZpLmlkP2kuaWQ6ITEscGFyOnMmJnMuaWQ/cy5pZDohMX0pfSksbztjYXNlXCJtb3ZlX25vZGVcIjpyZXR1cm4gbz1pLnBhcmVudD09PXMuaWQmJighYXx8IWEuaXNfbXVsdGkpfHwtMT09PWUuaW5BcnJheShjLGwpLG98fCh0aGlzLl9kYXRhLmNvcmUubGFzdF9lcnJvcj17ZXJyb3I6XCJjaGVja1wiLHBsdWdpbjpcInVuaXF1ZVwiLGlkOlwidW5pcXVlXzAzXCIscmVhc29uOlwiQ2hpbGQgd2l0aCBuYW1lIFwiK2MrXCIgYWxyZWFkeSBleGlzdHMuIFByZXZlbnRpbmc6IFwiK3QsZGF0YTpKU09OLnN0cmluZ2lmeSh7Y2hrOnQscG9zOm4sb2JqOmkmJmkuaWQ/aS5pZDohMSxwYXI6cyYmcy5pZD9zLmlkOiExfSl9KSxvfXJldHVybiEwfSx0aGlzLmNyZWF0ZV9ub2RlPWZ1bmN0aW9uKGkscyxuLGEsbyl7aWYoIXN8fHMudGV4dD09PXQpe2lmKG51bGw9PT1pJiYoaT1lLmpzdHJlZS5yb290KSxpPXRoaXMuZ2V0X25vZGUoaSksIWkpcmV0dXJuIHIuY3JlYXRlX25vZGUuY2FsbCh0aGlzLGkscyxuLGEsbyk7aWYobj1uPT09dD9cImxhc3RcIjpuLCFuLnRvU3RyaW5nKCkubWF0Y2goL14oYmVmb3JlfGFmdGVyKSQvKSYmIW8mJiF0aGlzLmlzX2xvYWRlZChpKSlyZXR1cm4gci5jcmVhdGVfbm9kZS5jYWxsKHRoaXMsaSxzLG4sYSxvKTtzfHwocz17fSk7dmFyIGQsYyxsLGgsXyx1PXRoaXMuX21vZGVsLmRhdGEsZz10aGlzLnNldHRpbmdzLnVuaXF1ZS5jYXNlX3NlbnNpdGl2ZSxmPXRoaXMuc2V0dGluZ3MudW5pcXVlLmR1cGxpY2F0ZTtmb3IoYz1kPXRoaXMuZ2V0X3N0cmluZyhcIk5ldyBub2RlXCIpLGw9W10saD0wLF89aS5jaGlsZHJlbi5sZW5ndGg7Xz5oO2grKylsLnB1c2goZz91W2kuY2hpbGRyZW5baF1dLnRleHQ6dVtpLmNoaWxkcmVuW2hdXS50ZXh0LnRvTG93ZXJDYXNlKCkpO2ZvcihoPTE7LTEhPT1lLmluQXJyYXkoZz9jOmMudG9Mb3dlckNhc2UoKSxsKTspYz1mLmNhbGwodGhpcyxkLCsraCkudG9TdHJpbmcoKTtzLnRleHQ9Y31yZXR1cm4gci5jcmVhdGVfbm9kZS5jYWxsKHRoaXMsaSxzLG4sYSxvKX19O3ZhciBnPWwuY3JlYXRlRWxlbWVudChcIkRJVlwiKTtpZihnLnNldEF0dHJpYnV0ZShcInVuc2VsZWN0YWJsZVwiLFwib25cIiksZy5zZXRBdHRyaWJ1dGUoXCJyb2xlXCIsXCJwcmVzZW50YXRpb25cIiksZy5jbGFzc05hbWU9XCJqc3RyZWUtd2hvbGVyb3dcIixnLmlubmVySFRNTD1cIiYjMTYwO1wiLGUuanN0cmVlLnBsdWdpbnMud2hvbGVyb3c9ZnVuY3Rpb24odCxpKXt0aGlzLmJpbmQ9ZnVuY3Rpb24oKXtpLmJpbmQuY2FsbCh0aGlzKSx0aGlzLmVsZW1lbnQub24oXCJyZWFkeS5qc3RyZWUgc2V0X3N0YXRlLmpzdHJlZVwiLGUucHJveHkoZnVuY3Rpb24oKXt0aGlzLmhpZGVfZG90cygpfSx0aGlzKSkub24oXCJpbml0LmpzdHJlZSBsb2FkaW5nLmpzdHJlZSByZWFkeS5qc3RyZWVcIixlLnByb3h5KGZ1bmN0aW9uKCl7dGhpcy5nZXRfY29udGFpbmVyX3VsKCkuYWRkQ2xhc3MoXCJqc3RyZWUtd2hvbGVyb3ctdWxcIil9LHRoaXMpKS5vbihcImRlc2VsZWN0X2FsbC5qc3RyZWVcIixlLnByb3h5KGZ1bmN0aW9uKGUsdCl7dGhpcy5lbGVtZW50LmZpbmQoXCIuanN0cmVlLXdob2xlcm93LWNsaWNrZWRcIikucmVtb3ZlQ2xhc3MoXCJqc3RyZWUtd2hvbGVyb3ctY2xpY2tlZFwiKX0sdGhpcykpLm9uKFwiY2hhbmdlZC5qc3RyZWVcIixlLnByb3h5KGZ1bmN0aW9uKGUsdCl7dGhpcy5lbGVtZW50LmZpbmQoXCIuanN0cmVlLXdob2xlcm93LWNsaWNrZWRcIikucmVtb3ZlQ2xhc3MoXCJqc3RyZWUtd2hvbGVyb3ctY2xpY2tlZFwiKTt2YXIgaSxyLHM9ITE7Zm9yKGk9MCxyPXQuc2VsZWN0ZWQubGVuZ3RoO3I+aTtpKyspcz10aGlzLmdldF9ub2RlKHQuc2VsZWN0ZWRbaV0sITApLHMmJnMubGVuZ3RoJiZzLmNoaWxkcmVuKFwiLmpzdHJlZS13aG9sZXJvd1wiKS5hZGRDbGFzcyhcImpzdHJlZS13aG9sZXJvdy1jbGlja2VkXCIpfSx0aGlzKSkub24oXCJvcGVuX25vZGUuanN0cmVlXCIsZS5wcm94eShmdW5jdGlvbihlLHQpe3RoaXMuZ2V0X25vZGUodC5ub2RlLCEwKS5maW5kKFwiLmpzdHJlZS1jbGlja2VkXCIpLnBhcmVudCgpLmNoaWxkcmVuKFwiLmpzdHJlZS13aG9sZXJvd1wiKS5hZGRDbGFzcyhcImpzdHJlZS13aG9sZXJvdy1jbGlja2VkXCIpfSx0aGlzKSkub24oXCJob3Zlcl9ub2RlLmpzdHJlZSBkZWhvdmVyX25vZGUuanN0cmVlXCIsZS5wcm94eShmdW5jdGlvbihlLHQpe1wiaG92ZXJfbm9kZVwiPT09ZS50eXBlJiZ0aGlzLmlzX2Rpc2FibGVkKHQubm9kZSl8fHRoaXMuZ2V0X25vZGUodC5ub2RlLCEwKS5jaGlsZHJlbihcIi5qc3RyZWUtd2hvbGVyb3dcIilbXCJob3Zlcl9ub2RlXCI9PT1lLnR5cGU/XCJhZGRDbGFzc1wiOlwicmVtb3ZlQ2xhc3NcIl0oXCJqc3RyZWUtd2hvbGVyb3ctaG92ZXJlZFwiKX0sdGhpcykpLm9uKFwiY29udGV4dG1lbnUuanN0cmVlXCIsXCIuanN0cmVlLXdob2xlcm93XCIsZS5wcm94eShmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCk7dmFyIGk9ZS5FdmVudChcImNvbnRleHRtZW51XCIse21ldGFLZXk6dC5tZXRhS2V5LGN0cmxLZXk6dC5jdHJsS2V5LGFsdEtleTp0LmFsdEtleSxzaGlmdEtleTp0LnNoaWZ0S2V5LHBhZ2VYOnQucGFnZVgscGFnZVk6dC5wYWdlWX0pO2UodC5jdXJyZW50VGFyZ2V0KS5jbG9zZXN0KFwiLmpzdHJlZS1ub2RlXCIpLmNoaWxkcmVuKFwiLmpzdHJlZS1hbmNob3JcIikuZmlyc3QoKS50cmlnZ2VyKGkpfSx0aGlzKSkub24oXCJjbGljay5qc3RyZWVcIixcIi5qc3RyZWUtd2hvbGVyb3dcIixmdW5jdGlvbih0KXt0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO3ZhciBpPWUuRXZlbnQoXCJjbGlja1wiLHttZXRhS2V5OnQubWV0YUtleSxjdHJsS2V5OnQuY3RybEtleSxhbHRLZXk6dC5hbHRLZXksc2hpZnRLZXk6dC5zaGlmdEtleX0pO2UodC5jdXJyZW50VGFyZ2V0KS5jbG9zZXN0KFwiLmpzdHJlZS1ub2RlXCIpLmNoaWxkcmVuKFwiLmpzdHJlZS1hbmNob3JcIikuZmlyc3QoKS50cmlnZ2VyKGkpLmZvY3VzKCl9KS5vbihcImNsaWNrLmpzdHJlZVwiLFwiLmpzdHJlZS1sZWFmID4gLmpzdHJlZS1vY2xcIixlLnByb3h5KGZ1bmN0aW9uKHQpe3Quc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7dmFyIGk9ZS5FdmVudChcImNsaWNrXCIse21ldGFLZXk6dC5tZXRhS2V5LGN0cmxLZXk6dC5jdHJsS2V5LGFsdEtleTp0LmFsdEtleSxzaGlmdEtleTp0LnNoaWZ0S2V5fSk7ZSh0LmN1cnJlbnRUYXJnZXQpLmNsb3Nlc3QoXCIuanN0cmVlLW5vZGVcIikuY2hpbGRyZW4oXCIuanN0cmVlLWFuY2hvclwiKS5maXJzdCgpLnRyaWdnZXIoaSkuZm9jdXMoKX0sdGhpcykpLm9uKFwibW91c2VvdmVyLmpzdHJlZVwiLFwiLmpzdHJlZS13aG9sZXJvdywgLmpzdHJlZS1pY29uXCIsZS5wcm94eShmdW5jdGlvbihlKXtyZXR1cm4gZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx0aGlzLmlzX2Rpc2FibGVkKGUuY3VycmVudFRhcmdldCl8fHRoaXMuaG92ZXJfbm9kZShlLmN1cnJlbnRUYXJnZXQpLCExfSx0aGlzKSkub24oXCJtb3VzZWxlYXZlLmpzdHJlZVwiLFwiLmpzdHJlZS1ub2RlXCIsZS5wcm94eShmdW5jdGlvbihlKXt0aGlzLmRlaG92ZXJfbm9kZShlLmN1cnJlbnRUYXJnZXQpfSx0aGlzKSl9LHRoaXMudGVhcmRvd249ZnVuY3Rpb24oKXt0aGlzLnNldHRpbmdzLndob2xlcm93JiZ0aGlzLmVsZW1lbnQuZmluZChcIi5qc3RyZWUtd2hvbGVyb3dcIikucmVtb3ZlKCksaS50ZWFyZG93bi5jYWxsKHRoaXMpfSx0aGlzLnJlZHJhd19ub2RlPWZ1bmN0aW9uKHQscixzLG4pe2lmKHQ9aS5yZWRyYXdfbm9kZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBhPWcuY2xvbmVOb2RlKCEwKTstMSE9PWUuaW5BcnJheSh0LmlkLHRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZCkmJihhLmNsYXNzTmFtZSs9XCIganN0cmVlLXdob2xlcm93LWNsaWNrZWRcIiksdGhpcy5fZGF0YS5jb3JlLmZvY3VzZWQmJnRoaXMuX2RhdGEuY29yZS5mb2N1c2VkPT09dC5pZCYmKGEuY2xhc3NOYW1lKz1cIiBqc3RyZWUtd2hvbGVyb3ctaG92ZXJlZFwiKSx0Lmluc2VydEJlZm9yZShhLHQuY2hpbGROb2Rlc1swXSl9cmV0dXJuIHR9fSxsLnJlZ2lzdGVyRWxlbWVudCYmT2JqZWN0JiZPYmplY3QuY3JlYXRlKXt2YXIgZj1PYmplY3QuY3JlYXRlKEhUTUxFbGVtZW50LnByb3RvdHlwZSk7Zi5jcmVhdGVkQ2FsbGJhY2s9ZnVuY3Rpb24oKXt2YXIgdCxpPXtjb3JlOnt9LHBsdWdpbnM6W119O2Zvcih0IGluIGUuanN0cmVlLnBsdWdpbnMpZS5qc3RyZWUucGx1Z2lucy5oYXNPd25Qcm9wZXJ0eSh0KSYmdGhpcy5hdHRyaWJ1dGVzW3RdJiYoaS5wbHVnaW5zLnB1c2godCksdGhpcy5nZXRBdHRyaWJ1dGUodCkmJkpTT04ucGFyc2UodGhpcy5nZXRBdHRyaWJ1dGUodCkpJiYoaVt0XT1KU09OLnBhcnNlKHRoaXMuZ2V0QXR0cmlidXRlKHQpKSkpO2Zvcih0IGluIGUuanN0cmVlLmRlZmF1bHRzLmNvcmUpZS5qc3RyZWUuZGVmYXVsdHMuY29yZS5oYXNPd25Qcm9wZXJ0eSh0KSYmdGhpcy5hdHRyaWJ1dGVzW3RdJiYoaS5jb3JlW3RdPUpTT04ucGFyc2UodGhpcy5nZXRBdHRyaWJ1dGUodCkpfHx0aGlzLmdldEF0dHJpYnV0ZSh0KSk7ZSh0aGlzKS5qc3RyZWUoaSl9O3RyeXtsLnJlZ2lzdGVyRWxlbWVudChcInZha2F0YS1qc3RyZWVcIix7cHJvdG90eXBlOmZ9KX1jYXRjaChwKXt9fX19KTsiLCIvKlxuICogaHR0cDovL2dpdGh1Yi5jb20vZGVpdGNoL2pzdHJlZS1ncmlkXG4gKlxuICogVGhpcyBwbHVnaW4gaGFuZGxlcyBhZGRpbmcgYSBncmlkIHRvIGEgdHJlZSB0byBkaXNwbGF5IGFkZGl0aW9uYWwgZGF0YVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZTpcbiAqICAgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcbiAqXG4gKiBXb3JrcyBvbmx5IHdpdGgganN0cmVlIHZlcnNpb24gPj0gMy4wLjBcbiAqXG4gKiAkRGF0ZTogMjAxNS0xMS0yOSAkXG4gKiAkUmV2aXNpb246ICAzLjQuMiAkXG4gKi9cbiFmdW5jdGlvbihlKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImpxdWVyeVwiLFwianN0cmVlXCJdLGUpOmUoalF1ZXJ5KX0oZnVuY3Rpb24oZSl7dmFyIHQsaSxyLHMsZCxuPS9eXFxzKiQvZyxhPS9bXFxcXDomIV58KClcXFtcXF08PkAqJyt+I1wiOyw9IFxcLyR7fSVdL2csbz1mdW5jdGlvbihlKXtyZXR1cm4oZXx8XCJcIikucmVwbGFjZShhLFwiXFxcXCQmXCIpfSxsPVwiZGF0YS1qc3RyZWVncmlkXCIsaD1cIl9EQVRBX1wiLGM9MjQscD0hMSxnPVwianNncmlkX1wiLHU9XCJfY29sXCIsZj0xMCx2PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZmluZChcImRpdltcIitsK1wiPSdcIit0K1wiJ11cIil9LG09ITEsaj1udWxsLF89MCx3PTA7cz0vPFxcLz9bXj5dKz4vZ2kscj1mdW5jdGlvbih0LGkpe3ZhciByLHMsZCxuO3JldHVybiBpLl9ncmlkU2V0dGluZ3M9aS5fZ3JpZFNldHRpbmdzfHx7fSxpLl9ncmlkU2V0dGluZ3MuaW5kZW50PjA/bj1pLl9ncmlkU2V0dGluZ3MuaW5kZW50OihyPWUoXCI8ZGl2PjwvZGl2PlwiKSxzPXQucHJldihcImlcIiksZD1zLnBhcmVudCgpLHIuYWRkQ2xhc3MoaS5nZXRfbm9kZShcIiNcIiwhMCkuYXR0cihcImNsYXNzXCIpKSxkLmFwcGVuZFRvKHIpLHIuYXBwZW5kVG8oZShcImJvZHlcIikpLG49cy53aWR0aCgpfHxjLGQuZGV0YWNoKCksci5yZW1vdmUoKSxpLl9ncmlkU2V0dGluZ3MuaW5kZW50PW4pLG59LGQ9ZnVuY3Rpb24oZSx0KXt2YXIgaSxyPWUuZ2V0X25vZGUodCkscz1yLmNoaWxkcmVuO3JldHVybiBpPSFzfHxzLmxlbmd0aDw9MHx8IXIuc3RhdGUub3BlbmVkP3Q6ZChlLHNbcy5sZW5ndGgtMV0pfSx0PWZ1bmN0aW9uKGUsdCl7dmFyIGkscyxkPXBhcnNlSW50KHQuc2V0dGluZ3MuZ3JpZC5jb2x1bW5zWzBdLndpZHRoLDEwKStwYXJzZUludCh0Ll9ncmlkU2V0dGluZ3MudHJlZVdpZHRoRGlmZiwxMCk7cmV0dXJuIGk9dC5nZXRfbm9kZShlKS5wYXJlbnRzLmxlbmd0aCxzPWQtaSpyKGUsdCksZH0saT1mdW5jdGlvbihlLHQsaSl7dmFyIHIsZD1cImFcIj09PWUuZ2V0KDApLnRhZ05hbWUudG9Mb3dlckNhc2UoKT9lOmUuY2hpbGRyZW4oXCJhXCIpLG49aS5zZXR0aW5ncy5ncmlkLmNvbHVtbnNbMF07cj1cIlwiLG4udGl0bGUmJihuLnRpdGxlPT09aD9yPWkuZ2V0X3RleHQodCk6dC5hdHRyKG4udGl0bGUpJiYocj10LmF0dHIobi50aXRsZSkpKSxyPXIucmVwbGFjZShzLFwiXCIpLHImJmQuYXR0cihcInRpdGxlXCIscil9LGUuanN0cmVlLmRlZmF1bHRzLmdyaWQ9e3dpZHRoOlwiYXV0b1wifSxlLmpzdHJlZS5wbHVnaW5zLmdyaWQ9ZnVuY3Rpb24odCxyKXt0aGlzLl9pbml0aWFsaXplPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2luaXRpYWxpemVkKXt2YXIgdCxpLHI9dGhpcy5zZXR0aW5ncy5ncmlkfHx7fSxzPXRoaXMuZWxlbWVudCxkPXMucGFyZW50KCksbj10aGlzLl9ncmlkU2V0dGluZ3M9e2NvbHVtbnM6ci5jb2x1bW5zfHxbXSx0cmVlQ2xhc3M6XCJqc3RyZWUtZ3JpZC1jb2wtMFwiLGNvbnRleHQ6ci5jb250ZXh0bWVudXx8ITEsY29sdW1uV2lkdGg6ci5jb2x1bW5XaWR0aCxkZWZhdWx0Q29uZjp7XCIqZGlzcGxheVwiOlwiaW5saW5lXCIsXCIqK2Rpc3BsYXlcIjpcImlubGluZVwifSxpc1RoZW1lcm9sbGVyOiEhdGhpcy5fZGF0YS50aGVtZXJvbGxlcix0cmVlV2lkdGhEaWZmOjAscmVzaXphYmxlOnIucmVzaXphYmxlLHN0YXRlZnVsOnIuc3RhdGVmdWwsaW5kZW50OjB9LGE9bi5jb2x1bW5zLG89MDtmb3IoaT0wO2k8ci5jb2x1bW5zLmxlbmd0aDtpKyspaWYoci5jb2x1bW5zW2ldLnRyZWUpe289aTticmVha310aGlzLnVuaXE9TWF0aC5jZWlsKDFlMypNYXRoLnJhbmRvbSgpKSx0aGlzLnRyZWVjb2w9byx0aGlzLnJvb3RpZD1zLmF0dHIoXCJpZFwiKTt2YXIgbD0vbXNpZS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkpO2lmKGwpe3ZhciBoPXBhcnNlRmxvYXQobmF2aWdhdG9yLmFwcFZlcnNpb24uc3BsaXQoXCJNU0lFXCIpWzFdKTs4PmgmJihuLmRlZmF1bHRDb25mLmRpc3BsYXk9XCJpbmxpbmVcIixuLmRlZmF1bHRDb25mLnpvb209XCIxXCIpfWZvcihwfHwocD0hMCx0PVtcIi5qc3RyZWUtZ3JpZC1jZWxsIHt2ZXJ0aWNhbC1hbGlnbjogdG9wOyBvdmVyZmxvdzpoaWRkZW47bWFyZ2luLWxlZnQ6MDtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDogMTAwJTtwYWRkaW5nLWxlZnQ6N3B4O3doaXRlLXNwYWNlOiBub3dyYXA7fVwiLFwiLmpzdHJlZS1ncmlkLWNlbGwgc3BhbiB7bWFyZ2luLXJpZ2h0OjBweDttYXJnaW4tcmlnaHQ6MHB4OypkaXNwbGF5OmlubGluZTsqK2Rpc3BsYXk6aW5saW5lO3doaXRlLXNwYWNlOiBub3dyYXA7fVwiLFwiLmpzdHJlZS1ncmlkLXNlcGFyYXRvciB7cG9zaXRpb246YWJzb2x1dGU7IHRvcDowOyByaWdodDowOyBoZWlnaHQ6MjRweDsgbWFyZ2luLWxlZnQ6IC0ycHg7IGJvcmRlci13aWR0aDogMCAycHggMCAwOyAqZGlzcGxheTppbmxpbmU7ICorZGlzcGxheTppbmxpbmU7IG1hcmdpbi1yaWdodDowcHg7d2lkdGg6MHB4O31cIixcIi5qc3RyZWUtZ3JpZC1oZWFkZXItY2VsbCB7b3ZlcmZsb3c6IGhpZGRlbjsgd2hpdGUtc3BhY2U6IG5vd3JhcDtwYWRkaW5nOiAxcHggM3B4IDJweCA1cHg7fVwiLFwiLmpzdHJlZS1ncmlkLWhlYWRlci10aGVtZXJvbGxlciB7Ym9yZGVyOiAwOyBwYWRkaW5nOiAxcHggM3B4O31cIixcIi5qc3RyZWUtZ3JpZC1oZWFkZXItcmVndWxhciB7cG9zaXRpb246cmVsYXRpdmU7IGJhY2tncm91bmQtY29sb3I6ICNFQkYzRkQ7fVwiLFwiLmpzdHJlZS1ncmlkLXJlc2l6YWJsZS1zZXBhcmF0b3Ige2N1cnNvcjogY29sLXJlc2l6ZTsgd2lkdGg6IDJweDt9XCIsXCIuanN0cmVlLWdyaWQtc2VwYXJhdG9yLXJlZ3VsYXIge2JvcmRlci1jb2xvcjogI2QwZDBkMDsgYm9yZGVyLXN0eWxlOiBzb2xpZDt9XCIsXCIuanN0cmVlLWdyaWQtY2VsbC10aGVtZXJvbGxlciB7Ym9yZGVyOiBub25lICFpbXBvcnRhbnQ7IGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7fVwiLFwiLmpzdHJlZS1ncmlkLXdyYXBwZXIge3dpZHRoOiAxMDAlOyBvdmVyZmxvdy14OiBhdXRvO31cIixcIi5qc3RyZWUtZ3JpZC1taWR3cmFwcGVyIHtkaXNwbGF5OiB0YWJsZS1yb3c7IG92ZXJmbG93OiB2aXNpYmxlO31cIixcIi5qc3RyZWUtZ3JpZC13aWR0aC1hdXRvIHt3aWR0aDphdXRvO2Rpc3BsYXk6YmxvY2s7fVwiLFwiLmpzdHJlZS1ncmlkLWNvbHVtbiB7ZGlzcGxheTogdGFibGUtY2VsbDsgb3ZlcmZsb3c6IGhpZGRlbjt9XCIsXCIuanN0cmVlLWdyaWQtY29sLTAge3dpZHRoOiAxMDAlO31cIl0sZSgnPHN0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wiPicrdC5qb2luKFwiXFxuXCIpK1wiPC9zdHlsZT5cIikuYXBwZW5kVG8oXCJoZWFkXCIpKSx0aGlzLmdyaWRXcmFwcGVyPWUoXCI8ZGl2PjwvZGl2PlwiKS5hZGRDbGFzcyhcImpzdHJlZS1ncmlkLXdyYXBwZXJcIikuYXBwZW5kVG8oZCksdGhpcy5taWRXcmFwcGVyPWUoXCI8ZGl2PjwvZGl2PlwiKS5hZGRDbGFzcyhcImpzdHJlZS1ncmlkLW1pZHdyYXBwZXJcIikuYXBwZW5kVG8odGhpcy5ncmlkV3JhcHBlciksci53aWR0aCYmdGhpcy5ncmlkV3JhcHBlci53aWR0aChyLndpZHRoKSxpPTA7aTxhLmxlbmd0aDtpKyspZShcIjxkaXY+PC9kaXY+XCIpLmFkZENsYXNzKFwianN0cmVlLWdyaWQtY29sdW1uIGpzdHJlZS1ncmlkLWNvbHVtbi1cIitpK1wiIGpzdHJlZS1ncmlkLWNvbHVtbi1yb290LVwiK3RoaXMucm9vdGlkKS5hcHBlbmRUbyh0aGlzLm1pZFdyYXBwZXIpO3RoaXMubWlkV3JhcHBlci5jaGlsZHJlbihcImRpdjplcShcIitvK1wiKVwiKS5hcHBlbmQocykscy5hZGRDbGFzcyhcImpzdHJlZS1ncmlkLWNlbGxcIiksdGhpcy5faW5pdGlhbGl6ZWQ9ITB9fSx0aGlzLmluaXQ9ZnVuY3Rpb24oZSx0KXtyLmluaXQuY2FsbCh0aGlzLGUsdCksdGhpcy5faW5pdGlhbGl6ZSgpfSx0aGlzLmJpbmQ9ZnVuY3Rpb24oKXtyLmJpbmQuY2FsbCh0aGlzKSx0aGlzLl9pbml0aWFsaXplKCksdGhpcy5lbGVtZW50Lm9uKFwibW92ZV9ub2RlLmpzdHJlZSBjcmVhdGVfbm9kZS5qc3RyZWUgY2xlYW5fbm9kZS5qc3RyZWUgY2hhbmdlX25vZGUuanN0cmVlXCIsZS5wcm94eShmdW5jdGlvbihlLHQpe3RoaXMuZ2V0X25vZGUodHx8XCIjXCIsITApO3JldHVybiAnJywhMX0sdGhpcykpLm9uKFwiZGVsZXRlX25vZGUuanN0cmVlXCIsZS5wcm94eShmdW5jdGlvbihlLHQpe2lmKHZvaWQgMCE9PXQubm9kZS5pZCl7dmFyIGkscj10aGlzLmdyaWRXcmFwcGVyLHM9W3Qubm9kZS5pZF07Zm9yKHQubm9kZSYmdC5ub2RlLmNoaWxkcmVuX2QmJihzPXMuY29uY2F0KHQubm9kZS5jaGlsZHJlbl9kKSksaT0wO2k8cy5sZW5ndGg7aSsrKXYocixzW2ldKS5yZW1vdmUoKX19LHRoaXMpKS5vbihcImNsb3NlX25vZGUuanN0cmVlXCIsZS5wcm94eShmdW5jdGlvbihlLHQpe3RoaXMuX2hpZGVfZ3JpZCh0Lm5vZGUpfSx0aGlzKSkub24oXCJvcGVuX25vZGUuanN0cmVlXCIsZS5wcm94eShmdW5jdGlvbihlLHQpe30sdGhpcykpLm9uKFwibG9hZF9ub2RlLmpzdHJlZVwiLGUucHJveHkoZnVuY3Rpb24oZSx0KXt9LHRoaXMpKS5vbihcImxvYWRlZC5qc3RyZWVcIixlLnByb3h5KGZ1bmN0aW9uKGUpe3RoaXMuX3ByZXBhcmVfaGVhZGVycygpLHRoaXMuZWxlbWVudC50cmlnZ2VyKFwibG9hZGVkX2dyaWQuanN0cmVlXCIpfSx0aGlzKSkub24oXCJyZWFkeS5qc3RyZWVcIixlLnByb3h5KGZ1bmN0aW9uKHQsaSl7dmFyIHI9dGhpcy5lbGVtZW50LmZpbmQoXCJsaSBhOmZpcnN0XCIpLm91dGVySGVpZ2h0KCk7ZSgnPHN0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wiPmRpdi5qc3RyZWUtZ3JpZC1jZWxsLXJvb3QtJyt0aGlzLnJvb3RpZCtcIiB7bGluZS1oZWlnaHQ6IFwiK3IrXCJweH08L3N0eWxlPlwiKS5hcHBlbmRUbyhcImhlYWRcIiksdGhpcy5ncmlkV3JhcHBlci5hZGRDbGFzcyh0aGlzLmVsZW1lbnQuYXR0cihcImNsYXNzXCIpKX0sdGhpcykpLm9uKFwibW92ZV9ub2RlLmpzdHJlZVwiLGUucHJveHkoZnVuY3Rpb24odCxpKXt2YXIgcj1pLm5ld19pbnN0YW5jZS5lbGVtZW50O3IuZmluZChcImxpID4gYVwiKS5lYWNoKGUucHJveHkoZnVuY3Rpb24oZSx0KXt9LHRoaXMpKX0sdGhpcykpLm9uKFwiaG92ZXJfbm9kZS5qc3RyZWVcIixlLnByb3h5KGZ1bmN0aW9uKGUsdCxpKXt2YXIgcj10Lm5vZGUuaWQ7bnVsbCE9PXRoaXMuX2hvdmVyX25vZGUmJnZvaWQgMCE9PXRoaXMuX2hvdmVyX25vZGUmJnYodGhpcy5ncmlkV3JhcHBlcix0aGlzLl9ob3Zlcl9ub2RlKS5yZW1vdmVDbGFzcyhcImpzdHJlZS1ob3ZlcmVkXCIpLHRoaXMuX2hvdmVyX25vZGU9cix2KHRoaXMuZ3JpZFdyYXBwZXIscikuYWRkQ2xhc3MoXCJqc3RyZWUtaG92ZXJlZFwiKX0sdGhpcykpLm9uKFwiZGVob3Zlcl9ub2RlLmpzdHJlZVwiLGUucHJveHkoZnVuY3Rpb24oZSx0LGkpe3ZhciByPXQubm9kZS5pZDt0aGlzLl9ob3Zlcl9ub2RlPW51bGwsdih0aGlzLmdyaWRXcmFwcGVyLHIpLnJlbW92ZUNsYXNzKFwianN0cmVlLWhvdmVyZWRcIil9LHRoaXMpKS5vbihcInNlbGVjdF9ub2RlLmpzdHJlZVwiLGUucHJveHkoZnVuY3Rpb24oZSx0LGkpe3ZhciByPXQubm9kZS5pZDt2KHRoaXMuZ3JpZFdyYXBwZXIscikuYWRkQ2xhc3MoXCJqc3RyZWUtY2xpY2tlZFwiKSx0aGlzLmdldF9ub2RlKHQubm9kZS5pZCwhMCkuY2hpbGRyZW4oXCJkaXYuanN0cmVlLWdyaWQtY2VsbFwiKS5hZGRDbGFzcyhcImpzdHJlZS1jbGlja2VkXCIpfSx0aGlzKSkub24oXCJkZXNlbGVjdF9ub2RlLmpzdHJlZVwiLGUucHJveHkoZnVuY3Rpb24oZSx0LGkpe3ZhciByPXQubm9kZS5pZDt2KHRoaXMuZ3JpZFdyYXBwZXIscikucmVtb3ZlQ2xhc3MoXCJqc3RyZWUtY2xpY2tlZFwiKX0sdGhpcykpLm9uKFwiZGVzZWxlY3RfYWxsLmpzdHJlZVwiLGUucHJveHkoZnVuY3Rpb24oZSx0LGkpe3ZhciByLHM9dC5ub2RlfHxbXTtmb3Iocj0wO3I8cy5sZW5ndGg7cisrKXYodGhpcy5ncmlkV3JhcHBlcixzW3JdKS5yZW1vdmVDbGFzcyhcImpzdHJlZS1jbGlja2VkXCIpfSx0aGlzKSkub24oXCJzZWFyY2guanN0cmVlXCIsZS5wcm94eShmdW5jdGlvbihlLHQpe3ZhciBpPXRoaXMuZ3JpZFdyYXBwZXI7cmV0dXJuIHRoaXMuX2RhdGEuc2VhcmNoLnNvbSYmdC5ub2Rlcy5sZW5ndGgmJihpLmZpbmQoXCJkaXYuanN0cmVlLWdyaWQtY2VsbC1yZWd1bGFyXCIpLmhpZGUoKSx0Lm5vZGVzLmFkZCh0Lm5vZGVzLnBhcmVudHNVbnRpbChcIi5qc3RyZWVcIikpLmZpbHRlcihcIi5qc3RyZWUtbm9kZVwiKS5lYWNoKGZ1bmN0aW9uKGUsdCl7dmFyIHI9dC5pZDtyJiZ2KGkscikuc2hvdygpfSkpLCEwfSx0aGlzKSkub24oXCJjbGVhcl9zZWFyY2guanN0cmVlXCIsZS5wcm94eShmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmdyaWRXcmFwcGVyLmZpbmQoXCJkaXYuanN0cmVlLWdyaWQtY2VsbFwiKS5zaG93KCksITB9LHRoaXMpKSx0aGlzLl9ncmlkU2V0dGluZ3MuaXNUaGVtZXJvbGxlciYmdGhpcy5lbGVtZW50Lm9uKFwic2VsZWN0X25vZGUuanN0cmVlXCIsZS5wcm94eShmdW5jdGlvbihlLHQpe3QucnNsdC5vYmouY2hpbGRyZW4oXCJhXCIpLm5leHRBbGwoXCJkaXZcIikuYWRkQ2xhc3MoXCJ1aS1zdGF0ZS1hY3RpdmVcIil9LHRoaXMpKS5vbihcImRlc2VsZWN0X25vZGUuanN0cmVlIGRlc2VsZWN0X2FsbC5qc3RyZWVcIixlLnByb3h5KGZ1bmN0aW9uKGUsdCl7dC5yc2x0Lm9iai5jaGlsZHJlbihcImFcIikubmV4dEFsbChcImRpdlwiKS5yZW1vdmVDbGFzcyhcInVpLXN0YXRlLWFjdGl2ZVwiKX0sdGhpcykpLm9uKFwiaG92ZXJfbm9kZS5qc3RyZWVcIixlLnByb3h5KGZ1bmN0aW9uKGUsdCl7dC5yc2x0Lm9iai5jaGlsZHJlbihcImFcIikubmV4dEFsbChcImRpdlwiKS5hZGRDbGFzcyhcInVpLXN0YXRlLWhvdmVyXCIpfSx0aGlzKSkub24oXCJkZWhvdmVyX25vZGUuanN0cmVlXCIsZS5wcm94eShmdW5jdGlvbihlLHQpe3QucnNsdC5vYmouY2hpbGRyZW4oXCJhXCIpLm5leHRBbGwoXCJkaXZcIikucmVtb3ZlQ2xhc3MoXCJ1aS1zdGF0ZS1ob3ZlclwiKX0sdGhpcykpLHRoaXMuX2dyaWRTZXR0aW5ncy5zdGF0ZWZ1bCYmdGhpcy5lbGVtZW50Lm9uKFwicmVzaXplX2NvbHVtbi5qc3RyZWUtZ3JpZFwiLGUucHJveHkoZnVuY3Rpb24oZSx0LGkpe2xvY2FsU3RvcmFnZVtcImpzdHJlZS1yb290LVwiK3RoaXMucm9vdGlkK1wiLWNvbHVtbi1cIit0XT1pfSx0aGlzKSl9LHRoaXMudGVhcmRvd249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdyaWRXcmFwcGVyLHQ9dGhpcy5lbGVtZW50LGk9ZS5wYXJlbnQoKTt0LmRldGFjaCgpLGUucmVtb3ZlKCksaS5hcHBlbmQodCksci50ZWFyZG93bi5jYWxsKHRoaXMpfSx0aGlzLl9jbGVhbl9ncmlkPWZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy5ncmlkV3JhcHBlcjtlP3YoaSx0KS5yZW1vdmUoKTppLmZpbmQoXCJkaXYuanN0cmVlLWdyaWQtY2VsbC1yZWd1bGFyXCIpLnJlbW92ZSgpfSx0aGlzLl9wcmVwYXJlX2hlYWRlcnM9ZnVuY3Rpb24oKXt2YXIgdCxpLHIscyxkLG4sYSxvLGwsaCxjPXRoaXMuX2dyaWRTZXR0aW5ncyxwPWMuY29sdW1uc3x8W10sZz1jLmNvbHVtbldpZHRoLHU9Yy5yZXNpemFibGV8fCExLHY9Yy5pc1RoZW1lcm9sbGVyLHg9dj9cInRoZW1lcm9sbGVyXCI6XCJyZWd1bGFyXCIseT0hMSxDPXRoaXMuZ3JpZHBhcmVudCxiPXRoaXMucm9vdGlkLFc9Yy5kZWZhdWx0Q29uZixTPTAsej0wO2Zvcih0aGlzLnBhcmVudD1DLGk9MDtpPHAubGVuZ3RoO2krKylkPXBbaV0uaGVhZGVyQ2xhc3N8fFwiXCIsbj1wW2ldLmNvbHVtbkNsYXNzfHxcIlwiLGE9cFtpXS5oZWFkZXJ8fFwiXCIsYSYmKHk9ITApLHM9Yy5zdGF0ZWZ1bCYmbG9jYWxTdG9yYWdlW1wianN0cmVlLXJvb3QtXCIrYitcIi1jb2x1bW4tXCIraV0/bG9jYWxTdG9yYWdlW1wianN0cmVlLXJvb3QtXCIrYitcIi1jb2x1bW4tXCIraV06cFtpXS53aWR0aHx8ZyxTPXY/NzoxMCxcImF1dG9cIiE9PXMmJlwic3RyaW5nXCIhPXR5cGVvZiBzJiYocy09Uyksbz0wPT09aT8zOjAscj10aGlzLm1pZFdyYXBwZXIuY2hpbGRyZW4oXCJkaXYuanN0cmVlLWdyaWQtY29sdW1uLVwiK2kpLGw9ZShcIjxkaXY+PC9kaXY+XCIpLmNzcyhXKS5jc3Moe1wibWFyZ2luLWxlZnRcIjpvfSkuYWRkQ2xhc3MoXCJqc3RyZWUtZ3JpZC1kaXYtXCIrdGhpcy51bmlxK1wiLVwiK2krXCIgXCIrKHY/XCJ1aS13aWRnZXQtaGVhZGVyIFwiOlwiXCIpK1wiIGpzdHJlZS1ncmlkLWhlYWRlciBqc3RyZWUtZ3JpZC1oZWFkZXItY2VsbCBqc3RyZWUtZ3JpZC1oZWFkZXItXCIreCtcIiBcIitkK1wiIFwiK24pLmh0bWwoYSksbC5hZGRDbGFzcygodj9cInVpLXdpZGdldC1oZWFkZXIgXCI6XCJcIikrXCJqc3RyZWUtZ3JpZC1oZWFkZXIganN0cmVlLWdyaWQtaGVhZGVyLVwiK3gpLGwucHJlcGVuZFRvKHIpLHorPWwub3V0ZXJXaWR0aCgpLGg9ZShcIjxkaXYgY2xhc3M9J2pzdHJlZS1ncmlkLXNlcGFyYXRvciBqc3RyZWUtZ3JpZC1zZXBhcmF0b3ItXCIreCsodj9cIiB1aS13aWRnZXQtaGVhZGVyXCI6XCJcIikrKHU/XCIganN0cmVlLWdyaWQtcmVzaXphYmxlLXNlcGFyYXRvclwiOlwiXCIpK1wiJz4mbmJzcDs8L2Rpdj5cIikuYXBwZW5kVG8obCksci53aWR0aChzKSxyLmNzcyhcIm1pbi13aWR0aFwiLHMpLHIuY3NzKFwibWF4LXdpZHRoXCIscyk7bC5hZGRDbGFzcygodj9cInVpLXdpZGdldC1oZWFkZXIgXCI6XCJcIikrXCJqc3RyZWUtZ3JpZC1oZWFkZXIganN0cmVlLWdyaWQtaGVhZGVyLWxhc3QganN0cmVlLWdyaWQtaGVhZGVyLVwiK3gpLHZvaWQgMD09PXBbcC5sZW5ndGgtMV0ud2lkdGgmJih6LT1zLHIuY3NzKHt3aWR0aDpcImF1dG9cIn0pLGwuYWRkQ2xhc3MoXCJqc3RyZWUtZ3JpZC13aWR0aC1hdXRvXCIpLm5leHQoXCIuanN0cmVlLWdyaWQtc2VwYXJhdG9yXCIpLnJlbW92ZSgpKSx5P2MuaGVhZGVyPXQ6ZShcImRpdi5qc3RyZWUtZ3JpZC1oZWFkZXJcIikuaGlkZSgpLCF0aGlzLmJvdW5kJiZ1JiYodGhpcy5ib3VuZD0hMCxlKGRvY3VtZW50KS5tb3VzZXVwKGZ1bmN0aW9uKCl7dmFyIHQsaSxyLHMsZCxuO20mJihuPWoucHJldkFsbChcIi5qc3RyZWUtZ3JpZC1jb2x1bW5cIikubGVuZ3RoLGQ9ai5jbG9zZXN0KFwiLmpzdHJlZS1ncmlkLXdyYXBwZXJcIikuZmluZChcIi5qc3RyZWVcIiksdD1lLmpzdHJlZS5yZWZlcmVuY2UoZCksaT10LnNldHRpbmdzLmdyaWQuY29sdW1ucyxzPWoucGFyZW50KCkuY2hpbGRyZW4oXCJkaXYuanN0cmVlLWdyaWQtY29sdW1uXCIpLChpc05hTihuKXx8MD5uKSYmKHQuX2dyaWRTZXR0aW5ncy50cmVlV2lkdGhEaWZmPWQuZmluZChcImluczplcSgwKVwiKS53aWR0aCgpK2QuZmluZChcImE6ZXEoMClcIikud2lkdGgoKS10Ll9ncmlkU2V0dGluZ3MuY29sdW1uc1swXS53aWR0aCkscj10Ll9ncmlkU2V0dGluZ3MuY29sdW1uc1tuXS53aWR0aD1wYXJzZUZsb2F0KGouY3NzKFwid2lkdGhcIikpLG09ITEsaj1udWxsLGQudHJpZ2dlcihcInJlc2l6ZV9jb2x1bW4uanN0cmVlLWdyaWRcIixbbixyXSkpfSkubW91c2Vtb3ZlKGZ1bmN0aW9uKGUpe2lmKG0pe3c9ZS5wYWdlWDt2YXIgdCxpLHIscz13LV87MCE9PXMmJih0PWoud2lkdGgoKSxpPXBhcnNlRmxvYXQoai5jc3MoXCJ3aWR0aFwiKSksaXx8KGk9ai5pbm5lcldpZHRoKCkpLHM9MD5zP01hdGgubWF4KHMsLXQpOnMscj1pK3MsKHM+MHx8dD4wKSYmcj5mJiYoai53aWR0aChyK1wicHhcIiksai5jc3MoXCJtaW4td2lkdGhcIixyK1wicHhcIiksai5jc3MoXCJtYXgtd2lkdGhcIixyK1wicHhcIiksXz13KSl9fSksdGhpcy5ncmlkV3JhcHBlci5vbihcInNlbGVjdHN0YXJ0XCIsXCIuanN0cmVlLWdyaWQtcmVzaXphYmxlLXNlcGFyYXRvclwiLGZ1bmN0aW9uKCl7cmV0dXJuITF9KS5vbihcIm1vdXNlZG93blwiLFwiLmpzdHJlZS1ncmlkLXJlc2l6YWJsZS1zZXBhcmF0b3JcIixmdW5jdGlvbih0KXtyZXR1cm4gbT0hMCxfPXQucGFnZVgsaj1lKHRoaXMpLmNsb3Nlc3QoXCJkaXYuanN0cmVlLWdyaWQtY29sdW1uXCIpLCExfSkub24oXCJkYmxjbGlja1wiLFwiLmpzdHJlZS1ncmlkLXJlc2l6YWJsZS1zZXBhcmF0b3JcIixmdW5jdGlvbih0KXt2YXIgaSxyLHM9ZSh0aGlzKSxkPXMuY2xvc2VzdChcImRpdi5qc3RyZWUtZ3JpZC1jb2x1bW5cIiksbj1wYXJzZUZsb2F0KGQuY3NzKFwid2lkdGhcIikpLGE9MCxvPWQucHJldkFsbChcIi5qc3RyZWUtZ3JpZC1jb2x1bW5cIikubGVuZ3RoLGw9ZC53aWR0aCgpO2QuZmluZChcIi5qc3RyZWUtZ3JpZC1jZWxsXCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgdCxpPWUodGhpcyk7aS5jc3MoXCJwb3NpdGlvblwiLFwiYWJzb2x1dGVcIiksaS5jc3MoXCJ3aWR0aFwiLFwiYXV0b1wiKSx0PWkub3V0ZXJXaWR0aCgpLGkuY3NzKFwicG9zaXRpb25cIixcInJlbGF0aXZlXCIpLHQ+YSYmKGE9dCl9KSxpPWEtbixpPTA+aT9NYXRoLm1heChpLC1sKTppLHI9bitpK1wicHhcIixkLndpZHRoKHIpLGQuY3NzKFwibWluLXdpZHRoXCIsciksZC5jc3MoXCJtYXgtd2lkdGhcIixyKSxlKHRoaXMpLmNsb3Nlc3QoXCIuanN0cmVlLWdyaWQtd3JhcHBlclwiKS5maW5kKFwiLmpzdHJlZVwiKS50cmlnZ2VyKFwicmVzaXplX2NvbHVtbi5qc3RyZWUtZ3JpZFwiLFtvLHJdKX0pKX0sdGhpcy5yZWRyYXdfbm9kZT1mdW5jdGlvbihlLHQsaSxzKXtyZXR1cm4gZT1yLnJlZHJhd19ub2RlLmNhbGwodGhpcyxlLHQsaSxzKSxlJiZ0aGlzLl9wcmVwYXJlX2dyaWQoZSksZX0sdGhpcy5yZWZyZXNoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NsZWFuX2dyaWQoKSxyLnJlZnJlc2guYXBwbHkodGhpcyxhcmd1bWVudHMpfSx0aGlzLnNldF9pZD1mdW5jdGlvbihlLHQpe3ZhciBpO2UmJihpPWUuaWQpO3ZhciBzPXIuc2V0X2lkLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZihzJiZ2b2lkIDAhPT1pKXt2YXIgZCxuPXRoaXMuZ3JpZFdyYXBwZXIsYT1baV07Zm9yKGUmJmUuY2hpbGRyZW5fZCYmKGE9YS5jb25jYXQoZS5jaGlsZHJlbl9kKSksZD0wO2Q8YS5sZW5ndGg7ZCsrKXYobixhW2RdKS5hdHRyKGwsZS5pZCkuYXR0cihcImlkXCIsZytlLmlkK3UrKGQrMSkpLnJlbW92ZUNsYXNzKGcraSt1KS5hZGRDbGFzcyhnK2UuaWQrdSl9cmV0dXJuIHN9LHRoaXMuX2hpZGVfZ3JpZD1mdW5jdGlvbihlKXt2YXIgdCxpPWUmJmUuY2hpbGRyZW5fZD9lLmNoaWxkcmVuX2Q6W107Zm9yKHQ9MDt0PGkubGVuZ3RoO3QrKyl2KHRoaXMuZ3JpZFdyYXBwZXIsaVt0XSkucmVtb3ZlKCl9LHRoaXMuaG9sZGluZ0NlbGxzPXt9LHRoaXMuZ2V0SG9sZGluZ0NlbGxzPWZ1bmN0aW9uKHQsaSxyKXt2YXIgcyxkLG49ZSgpLGE9dC5jaGlsZHJlbnx8W107Zm9yKGQ9MDtkPGEubGVuZ3RoO2QrKylzPWcrbyhhW2RdKSt1K2kscltzXSYmdC5zdGF0ZS5vcGVuZWQmJihuPW4uYWRkKHJbc10pLmFkZCh0aGlzLmdldEhvbGRpbmdDZWxscyh0aGlzLmdldF9ub2RlKGFbZF0pLGkscikpKTtyZXR1cm4gbn0sdGhpcy5fZWRpdD1mdW5jdGlvbih0LGkscil7aWYoIXQpcmV0dXJuITE7aWYoIXIpcmV0dXJuITE7cj1lKHIpLFwiZGl2XCI9PT1yLnByb3AoXCJ0YWdOYW1lXCIpLnRvTG93ZXJDYXNlKCkmJihyPXIuY2hpbGRyZW4oXCJzcGFuOmZpcnN0XCIpKTt2YXIgcz10aGlzLl9kYXRhLmNvcmUucnRsLGQ9dGhpcy5lbGVtZW50LndpZHRoKCksbj10LmRhdGFbaS52YWx1ZV0sYT1lKFwiPGRpdiAvPlwiLHtjc3M6e3Bvc2l0aW9uOlwiYWJzb2x1dGVcIix0b3A6XCItMjAwcHhcIixsZWZ0OnM/XCIwcHhcIjpcIi0xMDAwcHhcIix2aXNpYmlsaXR5OlwiaGlkZGVuXCJ9fSkuYXBwZW5kVG8oXCJib2R5XCIpLG89ZShcIjxpbnB1dCAvPlwiLHt2YWx1ZTpuLFwiY2xhc3NcIjpcImpzdHJlZS1yZW5hbWUtaW5wdXRcIixjc3M6e3BhZGRpbmc6XCIwXCIsYm9yZGVyOlwiMXB4IHNvbGlkIHNpbHZlclwiLFwiYm94LXNpemluZ1wiOlwiYm9yZGVyLWJveFwiLGRpc3BsYXk6XCJpbmxpbmUtYmxvY2tcIixoZWlnaHQ6dGhpcy5fZGF0YS5jb3JlLmxpX2hlaWdodCtcInB4XCIsbGluZUhlaWdodDp0aGlzLl9kYXRhLmNvcmUubGlfaGVpZ2h0K1wicHhcIix3aWR0aDpcIjE1MHB4XCJ9LGJsdXI6ZS5wcm94eShmdW5jdGlvbigpe3ZhciBlPW8udmFsKCk7XCJcIj09PWV8fGU9PT1uP2U9bjoodC5kYXRhW2kudmFsdWVdPWUsdGhpcy5lbGVtZW50LnRyaWdnZXIoXCJ1cGRhdGVfY2VsbC5qc3RyZWUtZ3JpZFwiLHtub2RlOnQsY29sOmkudmFsdWUsdmFsdWU6ZSxvbGQ6bn0pLHRoaXMuX3ByZXBhcmVfZ3JpZCh0aGlzLmdldF9ub2RlKHQsITApKSksby5yZW1vdmUoKSxyLnNob3coKX0sdGhpcyksa2V5ZG93bjpmdW5jdGlvbihlKXt2YXIgdD1lLndoaWNoOzI3PT09dCYmKHRoaXMudmFsdWU9biksKDI3PT09dHx8MTM9PT10fHwzNz09PXR8fDM4PT09dHx8Mzk9PT10fHw0MD09PXR8fDMyPT09dCkmJmUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksKDI3PT09dHx8MTM9PT10KSYmKGUucHJldmVudERlZmF1bHQoKSx0aGlzLmJsdXIoKSl9LGNsaWNrOmZ1bmN0aW9uKGUpe2Uuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9LG1vdXNlZG93bjpmdW5jdGlvbihlKXtlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfSxrZXl1cDpmdW5jdGlvbihlKXtvLndpZHRoKE1hdGgubWluKGEudGV4dChcInBXXCIrdGhpcy52YWx1ZSkud2lkdGgoKSxkKSl9LGtleXByZXNzOmZ1bmN0aW9uKGUpe3JldHVybiAxMz09PWUud2hpY2g/ITE6dm9pZCAwfX0pLGw9e2ZvbnRGYW1pbHk6ci5jc3MoXCJmb250RmFtaWx5XCIpfHxcIlwiLGZvbnRTaXplOnIuY3NzKFwiZm9udFNpemVcIil8fFwiXCIsZm9udFdlaWdodDpyLmNzcyhcImZvbnRXZWlnaHRcIil8fFwiXCIsZm9udFN0eWxlOnIuY3NzKFwiZm9udFN0eWxlXCIpfHxcIlwiLGZvbnRTdHJldGNoOnIuY3NzKFwiZm9udFN0cmV0Y2hcIil8fFwiXCIsZm9udFZhcmlhbnQ6ci5jc3MoXCJmb250VmFyaWFudFwiKXx8XCJcIixsZXR0ZXJTcGFjaW5nOnIuY3NzKFwibGV0dGVyU3BhY2luZ1wiKXx8XCJcIix3b3JkU3BhY2luZzpyLmNzcyhcIndvcmRTcGFjaW5nXCIpfHxcIlwifTtyLmhpZGUoKSxyLnBhcmVudCgpLmFwcGVuZChvKSxvLmNzcyhsKS53aWR0aChNYXRoLm1pbihhLnRleHQoXCJwV1wiK29bMF0udmFsdWUpLndpZHRoKCksZCkpWzBdLnNlbGVjdCgpfSx0aGlzLl9wcmVwYXJlX2dyaWQ9ZnVuY3Rpb24odCl7dmFyIHIsYSxoLGMscCxmLG0saixfLHcseCx5LEMsYixXLFMseixrLFQsQSxQLEYsVixxLEQsTCxNLE4sSSxCPXRoaXMuX2dyaWRTZXR0aW5ncyxIPUIudHJlZUNsYXNzLEU9dGhpcyxVPUIuY29sdW1uc3x8W10sWD1CLmlzVGhlbWVyb2xsZXIsJD10aGlzLmVsZW1lbnQsUT10aGlzLnJvb3RpZCxZPVg/XCJ0aGVtZXJvbGxlclwiOlwicmVndWxhclwiLEc9dGhpcy5nZXRfbm9kZSh0KSxKPUIuY29sdW1uV2lkdGgsSz1CLmRlZmF1bHRDb25mLE89ZnVuY3Rpb24odCxpLHIscyxkKXtyZXR1cm4gZnVuY3Rpb24oZCl7aS5jaGlsZHJlbihcIi5qc3RyZWUtYW5jaG9yXCIpLnRyaWdnZXIoXCJjbGljay5qc3RyZWVcIixkKSx0LnRyaWdnZXIoXCJzZWxlY3RfY2VsbC5qc3RyZWUtZ3JpZFwiLFt7dmFsdWU6cixjb2x1bW46cy5oZWFkZXIsbm9kZTppLGdyaWQ6ZSh0aGlzKSxzb3VyY2VOYW1lOnMudmFsdWV9XSl9fSxSPWZ1bmN0aW9uKHQsaSxyLHMsZCl7cmV0dXJuIGZ1bmN0aW9uKHQpe0IuY29udGV4dCYmKHQucHJldmVudERlZmF1bHQoKSxlLnZha2F0YS5jb250ZXh0LnNob3codGhpcyx7eDp0LnBhZ2VYLHk6dC5wYWdlWX0se2VkaXQ6e2xhYmVsOlwiRWRpdFwiLGFjdGlvbjpmdW5jdGlvbihlKXt2YXIgcj1kLmdldF9ub2RlKGkpO0UuX2VkaXQocixzLHQudGFyZ2V0KX19fSkpfX0sWj1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbigpe3QuaG92ZXJfbm9kZShlKX19LGVlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dC5kZWhvdmVyX25vZGUoZSl9fSx0ZT10aGlzLm1pZFdyYXBwZXIsaWU9Ry5pZCxyZT10aGlzLmdldF9ub2RlKEcucGFyZW50KS5jaGlsZHJlbixzZT1qUXVlcnkuaW5BcnJheShpZSxyZSksZGU9dGhpcy5ob2xkaW5nQ2VsbHMsbmU9ITE7aWYocj1lKHQpLF89ci5jaGlsZHJlbihcImFcIiksMT09PV8ubGVuZ3RoKXtmb3IoST0hRy5zdGF0ZS5vcGVuZWQsUz1nK28oaWUpK3Usej1cIiNcIj09PUcucGFyZW50P251bGw6Ry5wYXJlbnQsXy5hZGRDbGFzcyhIKSxpKF8scixFKSx3PV8sYz0wO2M8VS5sZW5ndGg7YysrKXRoaXMudHJlZWNvbCE9PWMmJihEPVVbY10sTj10ZS5jaGlsZHJlbihcImRpdjplcShcIitjK1wiKVwiKSxmPUQuY2VsbENsYXNzfHxcIlwiLG09RC53aWRlQ2VsbENsYXNzfHxcIlwiLGo9RC5jb2x1bW5DbGFzc3x8XCJcIixOLmFkZENsYXNzKGopLHA9dm9pZCAwIT09RC52YWx1ZSYmbnVsbCE9PUQudmFsdWU/XCJmdW5jdGlvblwiPT10eXBlb2YgRC52YWx1ZT9ELnZhbHVlKEcpOm51bGwhPT1HLmRhdGEmJnZvaWQgMCE9PUcuZGF0YSYmdm9pZCAwIT09Ry5kYXRhW0QudmFsdWVdP0cuZGF0YVtELnZhbHVlXTpcIlwiOlwiXCIsXCJmdW5jdGlvblwiPT10eXBlb2YgRC5mb3JtYXQmJihwPUQuZm9ybWF0KHApKSxELmltYWdlcz8oaD1ELmltYWdlc1twXXx8RC5pbWFnZXNbXCJkZWZhdWx0XCJdLGgmJihMPVwiKlwiPT09aFswXT8nPHNwYW4gY2xhc3M9XCInK2guc3Vic3RyKDEpKydcIj48L3NwYW4+JzonPGltZyBzcmM9XCInK2grJ1wiPicpKTpMPXAsKHZvaWQgMD09PUx8fG51bGw9PT1MfHxuLnRlc3QoTCkpJiYoTD1cIiZuYnNwO1wiKSx4PUQudmFsdWVDbGFzcyYmbnVsbCE9PUcuZGF0YSYmdm9pZCAwIT09Ry5kYXRhP0cuZGF0YVtELnZhbHVlQ2xhc3NdfHxcIlwiOlwiXCIseCYmRC52YWx1ZUNsYXNzUHJlZml4JiZcIlwiIT09RC52YWx1ZUNsYXNzUHJlZml4JiYoeD1ELnZhbHVlQ2xhc3NQcmVmaXgreCkseT1ELndpZGVWYWx1ZUNsYXNzJiZudWxsIT09Ry5kYXRhJiZ2b2lkIDAhPT1HLmRhdGE/Ry5kYXRhW0Qud2lkZVZhbHVlQ2xhc3NdfHxcIlwiOlwiXCIseSYmRC53aWRlVmFsdWVDbGFzc1ByZWZpeCYmXCJcIiE9PUQud2lkZVZhbHVlQ2xhc3NQcmVmaXgmJih5PUQud2lkZVZhbHVlQ2xhc3NQcmVmaXgreSksVz1ELnRpdGxlJiZudWxsIT09Ry5kYXRhJiZ2b2lkIDAhPT1HLmRhdGE/Ry5kYXRhW0QudGl0bGVdfHxcIlwiOlwiXCIsVz1XLnJlcGxhY2UocyxcIlwiKSxiPTcsYT1ELndpZHRofHxKLFwiYXV0b1wiIT09YSYmKGE9TXx8YS1iKSx3PXYoTixpZSksKCF3fHx3Lmxlbmd0aDwxKSYmKHc9ZShcIjxkaXY+PC9kaXY+XCIpLGUoXCI8c3Bhbj48L3NwYW4+XCIpLmFwcGVuZFRvKHcpLHcuYXR0cihcImlkXCIsUytjKSx3LmFkZENsYXNzKFMpLHcuYXR0cihsLGllKSksQT0wPj1zZT9HLnBhcmVudDpkKHRoaXMscmVbc2UtMV0pLFQ9dihOLEEpLEY9c2U+PXJlLmxlbmd0aC0xP1wiTlVMTFwiOnJlW3NlKzFdLFA9dihOLEYpLHE9Ry5jaGlsZHJlbiYmRy5jaGlsZHJlbi5sZW5ndGg+MD9HLmNoaWxkcmVuWzBdOlwiTlVMTFwiLFY9dihOLHEpLGs9dihOLHopLHo/KGsmJmsubGVuZ3RoPjA/KFQmJlQubGVuZ3RoPjA/dy5pbnNlcnRBZnRlcihUKTpWJiZWLmxlbmd0aD4wP3cuaW5zZXJ0QmVmb3JlKFYpOlAmJlAubGVuZ3RoPjA/dy5pbnNlcnRCZWZvcmUoUCk6dy5pbnNlcnRBZnRlcihrKSxuZT0hMCk6bmU9ITEsZGVbUytjXT13KTooVCYmVC5sZW5ndGg+MD93Lmluc2VydEFmdGVyKFQpOlYmJlYubGVuZ3RoPjA/dy5pbnNlcnRCZWZvcmUoVik6UCYmUC5sZW5ndGg+MD93Lmluc2VydEJlZm9yZShQKTp3LmFwcGVuZFRvKE4pLG5lPSEwKSxuZSYmdy5hZnRlcih0aGlzLmdldEhvbGRpbmdDZWxscyhHLGMsZGUpKSxDPXcuY2hpbGRyZW4oXCJzcGFuXCIpLEMuYWRkQ2xhc3MoZitcIiBcIit4KS5odG1sKEwpLHc9dy5jc3MoSykuYWRkQ2xhc3MoXCJqc3RyZWUtZ3JpZC1jZWxsIGpzdHJlZS1ncmlkLWNlbGwtcmVndWxhciBqc3RyZWUtZ3JpZC1jZWxsLXJvb3QtXCIrUStcIiBqc3RyZWUtZ3JpZC1jZWxsLVwiK1krXCIgXCIrbStcIiBcIit5KyhYP1wiIHVpLXN0YXRlLWRlZmF1bHRcIjpcIlwiKSkuYWRkQ2xhc3MoXCJqc3RyZWUtZ3JpZC1jb2wtXCIrYyksdy5jbGljayhPKCQscixwLEQsdGhpcykpLHcub24oXCJjb250ZXh0bWVudVwiLFIoJCxyLHAsRCx0aGlzKSksdy5ob3ZlcihaKHIsdGhpcyksZWUocix0aGlzKSksVyYmQy5hdHRyKFwidGl0bGVcIixXKSk7dy5hZGRDbGFzcyhcImpzdHJlZS1ncmlkLWNlbGwtbGFzdFwiKyhYP1wiIHVpLXN0YXRlLWRlZmF1bHRcIjpcIlwiKSksdm9pZCAwPT09VVtVLmxlbmd0aC0xXS53aWR0aCYmdy5hZGRDbGFzcyhcImpzdHJlZS1ncmlkLXdpZHRoLWF1dG9cIikubmV4dChcIi5qc3RyZWUtZ3JpZC1zZXBhcmF0b3JcIikucmVtb3ZlKCl9dGhpcy5lbGVtZW50LmNzcyh7XCJvdmVyZmxvdy15XCI6XCJhdXRvICFpbXBvcnRhbnRcIn0pfSx0aGlzLmhvbGRpbmdDZWxscz17fX19KTsiLCIvKlxuICogQ29weXJpZ2h0IGh0dHBzOi8vZ2l0aHViLmNvbS9kaXZpby9kamFuZ28tY21zXG4gKi9cblxuLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbi8vIE5BTUVTUEFDRVNcbi8qKlxuICogQG1vZHVsZSBDTVNcbiAqL1xudmFyIENNUyA9IHdpbmRvdy5DTVMgfHwge307XG5cbi8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4vLyBNT0RBTFxuKGZ1bmN0aW9uICgkKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBhZ2V0cmVlIGlzIGxvYWRlZCB2aWEgYC9hZG1pbi9jbXMvcGFnZWAgYW5kIGhhcyBhIGN1c3RvbSBhZG1pblxuICAgICAqIHRlbXBsYXRlcyBzdG9yZWQgd2l0aGluIGB0ZW1wbGF0ZXMvYWRtaW4vY21zL3BhZ2UvdHJlZWAuXG4gICAgICpcbiAgICAgKiBAY2xhc3MgUGFnZVRyZWVcbiAgICAgKiBAbmFtZXNwYWNlIENNU1xuICAgICAqIEB1c2VzIENNUy5BUEkuSGVscGVyc1xuICAgICAqL1xuICAgIENNUy5QYWdlVHJlZSA9IG5ldyBDTVMuQ2xhc3Moe1xuICAgICAgICAvLyBUT0RPIGFkZCBtZWNoYW5pY3MgdG8gc2V0IHRoZSBob21lIHBhZ2VcbiAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gaW5pdGlhbGl6ZShvcHRpb25zKSB7XG4gICAgICAgICAgICAvLyBvcHRpb25zIGFyZSBsb2FkZWQgZnJvbSB0aGUgcGFnZXRyZWUgaHRtbCBub2RlXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSAkKCcuanMtY21zLXBhZ2V0cmVlJykuZGF0YSgnanNvbicpO1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zID0gJC5leHRlbmQodHJ1ZSwge30sIHRoaXMub3B0aW9ucywgb3B0aW9ucyk7XG5cbiAgICAgICAgICAgIC8vIHN0YXRlcyBhbmQgZXZlbnRzXG4gICAgICAgICAgICB0aGlzLmNsaWNrID0gJ2NsaWNrLmNtcy5wYWdldHJlZSc7XG4gICAgICAgICAgICB0aGlzLmNhY2hlID0ge1xuICAgICAgICAgICAgICAgIGlkOiBudWxsLFxuICAgICAgICAgICAgICAgIHRhcmdldDogbnVsbCxcbiAgICAgICAgICAgICAgICB0eXBlOiAnJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc1RpbWVyID0gMTAwMDtcblxuICAgICAgICAgICAgLy8gZWxlbWVudHNcbiAgICAgICAgICAgIHRoaXMuX3NldHVwVUkoKTtcbiAgICAgICAgICAgIHRoaXMuX2V2ZW50cygpO1xuXG4gICAgICAgICAgICAvLyBjYW5jZWwgaWYgcGFndHJlZSBpcyBub3QgYXZhaWxhYmxlXG4gICAgICAgICAgICBpZiAoISQuaXNFbXB0eU9iamVjdCh0aGlzLm9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0dXAoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogU3RvcmVzIGFsbCBqUXVlcnkgcmVmZXJlbmNlcyB3aXRoaW4gYHRoaXMudWlgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIF9zZXR1cFVJXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqL1xuICAgICAgICBfc2V0dXBVSTogZnVuY3Rpb24gX3NldHVwVUkoKSB7XG4gICAgICAgICAgICB2YXIgcGFnZXRyZWUgPSAkKCcuY21zLXBhZ2V0cmVlJyk7XG4gICAgICAgICAgICB0aGlzLnVpID0ge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50OiAkKGRvY3VtZW50KSxcbiAgICAgICAgICAgICAgICBjb250YWluZXI6IHBhZ2V0cmVlLFxuICAgICAgICAgICAgICAgIGRvY3VtZW50OiAkKGRvY3VtZW50KSxcbiAgICAgICAgICAgICAgICB0cmVlOiBwYWdldHJlZS5maW5kKCcuanMtY21zLXBhZ2V0cmVlJyksXG4gICAgICAgICAgICAgICAgZGlhbG9nOiAkKCcuanMtY21zLXRyZWUtZGlhbG9nJyksXG4gICAgICAgICAgICAgICAgc2l0ZUZvcm06ICQoJy5qcy1jbXMtcGFnZXRyZWUtc2l0ZS1mb3JtJylcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldHRpbmcgdXAgdGhlIGpzdHJlZSBhbmQgdGhlIHJlbGF0ZWQgY29sdW1ucy5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBfc2V0dXBcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICovXG4gICAgICAgIF9zZXR1cDogZnVuY3Rpb24gX3NldHVwKCkge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIGNvbHVtbnMgPSBbXTtcbiAgICAgICAgICAgIHZhciBvYmogPSB7XG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2U6IHRoaXMub3B0aW9ucy5sYW5nLmNvZGUsXG4gICAgICAgICAgICAgICAgb3Blbk5vZGVzOiBbXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHZhciBkYXRhID0gZmFsc2U7XG5cbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IGFqYXggcmVxdWVzdCBzZW5kIHRoZSBjc3JmIHRva2VuXG4gICAgICAgICAgICBDTVMuQVBJLkhlbHBlcnMuY3NyZih0aGlzLm9wdGlvbnMuY3NyZik7XG5cbiAgICAgICAgICAgIC8vIHNldHVwIGNvbHVtbiBoZWFkaW5nc1xuICAgICAgICAgICAgJC5lYWNoKHRoaXMub3B0aW9ucy5jb2x1bW5zLCBmdW5jdGlvbiAoaW5kZXgsIG9iaikge1xuICAgICAgICAgICAgICAgIGlmIChvYmoua2V5ID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgZmlyc3Qgcm93IGlzIGFscmVhZHkgcG9wdWxhdGVkLCB0byBhdm9pZCBvdmVyd3JpdGVzXG4gICAgICAgICAgICAgICAgICAgIC8vIGp1c3QgbGVhdmUgdGhlIFwia2V5XCIgcGFyYW0gZW1wdHlcbiAgICAgICAgICAgICAgICAgICAgY29sdW1ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcjogb2JqLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IG9iai53aWR0aCB8fCAnMSUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkZUNlbGxDbGFzczogb2JqLmNsc1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyOiBvYmoudGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCBuZWVkcyB0byBoYXZlIHRoZSBcImNvbGRlXCIgZm9ybWF0IGFuZCBub3QgXCJjb2wtZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzIGpzdHJlZSB3aWxsIGNvbnZlcnQgXCJjb2wtZGVcIiB0byBcImNvbGRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbHNvIHdlIHN0cmlwIGRhc2hlcywgaW4gY2FzZSBsYW5ndWFnZSBjb2RlIGNvbnRhaW5zIGl0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZS5nLiB6aC1oYW5zLCB6aC1jbiBldGNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5kYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmRhdGFbJ2NvbCcgKyBvYmoua2V5LnJlcGxhY2UoJy0nLCAnJyldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IG9iai53aWR0aCB8fCAnMSUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkZUNlbGxDbGFzczogb2JqLmNsc1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gcHJlcGFyZSBkYXRhXG4gICAgICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5maWx0ZXJlZCkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSB7XG4gICAgICAgICAgICAgICAgICAgIHVybDogdGhpcy5vcHRpb25zLnVybHMudHJlZSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcjJyBpcyByZW5kZXJlZCBpZiBpdHMgdGhlIHJvb3Qgbm9kZSwgdGhlcmUgd2Ugb25seVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FyZSBhYm91dCBgb2JqLm9wZW5Ob2Rlc2AsIGluIHRoZSBmb2xsb3dpbmcgY2FzZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgYXJlIHJlcXVlc3RpbmcgYSBzcGVjaWZpYyBub2RlXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5pZCAhPT0gJyMnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLnBhZ2VJZCA9IHRoYXQuX3N0b3JlTm9kZUlkKG5vZGUuZGF0YS5pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iai5wYWdlSWQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIHN0b3JlIHRoZSBvcGVuZWQgaXRlbXMgaW5zaWRlIHRoZSBsb2NhbHN0b3JhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzIHdlIGhhdmUgdG8gbG9hZCB0aGUgcGFnZXRyZWUgd2l0aCB0aGUgcHJldmlvdXMgb3BlbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzdGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqLm9wZW5Ob2RlcyA9IHRoYXQuX2dldFN0b3JlZE5vZGVJZHMoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBzZXQgdGhlIHNpdGUgaWQgdG8gZ2V0IHRoZSBjb3JyZWN0IHRyZWVcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iai5zaXRlID0gdGhhdC5vcHRpb25zLnNpdGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiaW5kIG9wdGlvbnMgdG8gdGhlIGpzdHJlZSBpbnN0YW5jZVxuICAgICAgICAgICAgdGhpcy51aS50cmVlLmpzdHJlZSh7XG4gICAgICAgICAgICAgICAgY29yZToge1xuICAgICAgICAgICAgICAgICAgICAvLyBkaXNhYmxlIG9wZW4vY2xvc2UgYW5pbWF0aW9uc1xuICAgICAgICAgICAgICAgICAgICBhbmltYXRpb246IDAsXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvcmUgc2V0dGluZyB0byBhbGxvdyBhY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrX2NhbGxiYWNrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYW5jZWwgZHJhZ2dpbmcgd2hlbiBmaWx0ZXJpbmcgaXMgYWN0aXZlIGJ5IHNldHRpbmcgYGZhbHNlYFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0aGF0Lm9wdGlvbnMuZmlsdGVyZWQpID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL3d3dy5qc3RyZWUuY29tL2FwaS8jLz9mPSQuanN0cmVlLmRlZmF1bHRzLmNvcmUuZGF0YVxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAvLyBzdHJpbmdzIHVzZWQgd2l0aGluIGpzdHJlZSB0aGF0IGFyZSBjYWxsZWQgdXNpbmcgYGdldF9zdHJpbmdgXG4gICAgICAgICAgICAgICAgICAgIHN0cmluZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdMb2FkaW5nIC4uLic6IHRoaXMub3B0aW9ucy5sYW5nLmxvYWRpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAnTmV3IG5vZGUnOiB0aGlzLm9wdGlvbnMubGFuZy5uZXdOb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ25vZGVzJzogdGhpcy5vcHRpb25zLmxhbmcubm9kZXNcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5zaG93RXJyb3IoZXJyb3IucmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgdGhlbWVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnZGphbmdvLWNtcydcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgLy8gZGlzYWJsZSB0aGUgbXVsdGkgc2VsZWN0aW9uIG9mIG5vZGVzIGZvciBub3dcbiAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGU6IGZhbHNlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAvLyBhY3RpdmF0ZSBkcmFnIGFuZCBkcm9wIHBsdWdpblxuICAgICAgICAgICAgICAgIHBsdWdpbnMgOiBbJ2RuZCcsICdzZWFyY2gnLCAnZ3JpZCddLFxuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3LmpzdHJlZS5jb20vYXBpLyMvP2Y9JC5qc3RyZWUuZGVmYXVsdHMuZG5kXG4gICAgICAgICAgICAgICAgZG5kOiB7XG4gICAgICAgICAgICAgICAgICAgIGluc2lkZV9wb3M6ICdsYXN0JyxcbiAgICAgICAgICAgICAgICAgICAgLy8gZGlzYWJsZSB0aGUgbXVsdGkgc2VsZWN0aW9uIG9mIG5vZGVzIGZvciBub3dcbiAgICAgICAgICAgICAgICAgICAgZHJhZ19zZWxlY3Rpb246IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAvLyBkaXNhYmxlIGRyYWdnaW5nIGlmIGZpbHRlcmVkXG4gICAgICAgICAgICAgICAgICAgIGlzX2RyYWdnYWJsZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0aGF0Lm9wdGlvbnMuZmlsdGVyZWQpID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAvLyBkaXNhYmxlIENNRC9DVFJMIGNvcHlcbiAgICAgICAgICAgICAgICAgICAgY29weTogZmFsc2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kZWl0Y2gvanN0cmVlLWdyaWRcbiAgICAgICAgICAgICAgICBncmlkOiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbHVtbnMgYXJlIHByb3ZpZGVkIGZyb20gYmFzZS5odG1sIG9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uczogY29sdW1uc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXRzIHVwIGFsbCB0aGUgZXZlbnQgaGFuZGxlcnMsIHN1Y2ggYXMgb3BlbmluZyBhbmQgbW92aW5nLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIF9ldmVudHNcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICovXG4gICAgICAgIF9ldmVudHM6IGZ1bmN0aW9uIF9ldmVudHMoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG5cbiAgICAgICAgICAgIC8vIHNldCBldmVudHMgZm9yIHRoZSBub2RlSWQgdXBkYXRlc1xuICAgICAgICAgICAgdGhpcy51aS50cmVlLm9uKCdhZnRlcl9jbG9zZS5qc3RyZWUnLCBmdW5jdGlvbiAoZSwgZWwpIHtcbiAgICAgICAgICAgICAgICB0aGF0Ll9yZW1vdmVOb2RlSWQoZWwubm9kZS5kYXRhLmlkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy51aS50cmVlLm9uKCdhZnRlcl9vcGVuLmpzdHJlZScsIGZ1bmN0aW9uIChlLCBlbCkge1xuICAgICAgICAgICAgICAgIHRoYXQuX3N0b3JlTm9kZUlkKGVsLm5vZGUuZGF0YS5pZCk7XG4gICAgICAgICAgICAgICAgdGhhdC5fY2hlY2tIZWxwZXJzKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gc3RvcmUgbW92ZWQgcG9zaXRpb24gbm9kZVxuICAgICAgICAgICAgdGhpcy51aS50cmVlLm9uKCdtb3ZlX25vZGUuanN0cmVlIGNvcHlfbm9kZS5qc3RyZWUnLCBmdW5jdGlvbiAoZSwgb2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGF0LmNhY2hlLnR5cGUgfHwgdGhhdC5jYWNoZS50eXBlID09PSAnY3V0Jykge1xuICAgICAgICAgICAgICAgICAgICB0aGF0Ll9tb3ZlTm9kZSh0aGF0Ll9nZXROb2RlUG9zaXRpb24ob2JqKSkuZG9uZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSB0aGF0LnVpLnRyZWUuanN0cmVlKHRydWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5faGlkZV9ncmlkKGluc3RhbmNlLmdldF9ub2RlKG9iai5wYXJlbnQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmoucGFyZW50ID09PSAnIycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5yZWZyZXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgdG8gcmVmcmVzaCBwYXJlbnQsIGJlY2F1c2UgcmVmcmVzaCBvbmx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVmcmVzaGVzIGNoaWxkcmVuIG9mIHRoZSBub2RlLCBuZXZlciB0aGUgbm9kZSBpdHNlbGZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5yZWZyZXNoX25vZGUob2JqLnBhcmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoYXQuX2NvcHlOb2RlKG9iaik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gb3BlbiB0aGUgcGFyZW50IG5vZGUgaWYgd2UgdHJpZ2dlciBhbiBlbGVtZW50XG4gICAgICAgICAgICAgICAgLy8gaWYgbm90IGFscmVhZHkgb3BlbmVkXG4gICAgICAgICAgICAgICAgdGhhdC51aS50cmVlLmpzdHJlZSgnb3Blbl9ub2RlJywgb2JqLnBhcmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gc2V0IGV2ZW50IGZvciBjdXQgYW5kIHBhc3RlXG4gICAgICAgICAgICB0aGlzLnVpLmNvbnRhaW5lci5vbih0aGlzLmNsaWNrLCAnLmpzLWNtcy10cmVlLWl0ZW0tY3V0JywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhhdC5fY3V0T3JDb3B5KHsgdHlwZTogJ2N1dCcsIGVsZW1lbnQ6ICQodGhpcykgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gc2V0IGV2ZW50IGZvciBjdXQgYW5kIHBhc3RlXG4gICAgICAgICAgICB0aGlzLnVpLmNvbnRhaW5lci5vbih0aGlzLmNsaWNrLCAnLmpzLWNtcy10cmVlLWl0ZW0tY29weScsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoYXQuX2N1dE9yQ29weSh7IHR5cGU6ICdjb3B5JywgZWxlbWVudDogJCh0aGlzKSB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBhdHRhY2ggZXZlbnRzIHRvIHBhc3RlXG4gICAgICAgICAgICB0aGlzLnVpLmNvbnRhaW5lci5vbih0aGlzLmNsaWNrLCAnLmNtcy10cmVlLWl0ZW0taGVscGVycyBhJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhhdC5fcGFzdGUoZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gYWR2YW5jZWQgc2V0dGluZ3MgbGluayBoYW5kbGluZ1xuICAgICAgICAgICAgdGhpcy51aS5jb250YWluZXIub24odGhpcy5jbGljaywgJy5qcy1jbXMtdHJlZS1hZHZhbmNlZC1zZXR0aW5ncycsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGUuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICQodGhpcykuZGF0YSgndXJsJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIGFkZCBldmVudHMgZm9yIGVycm9yIHJlbG9hZCAobWVzc2FnZWxpc3QpXG4gICAgICAgICAgICB0aGlzLnVpLmRvY3VtZW50Lm9uKHRoaXMuY2xpY2ssICcubWVzc2FnZWxpc3QgLmNtcy10cmVlLXJlbG9hZCcsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoYXQuX3JlbG9hZEhlbHBlcigpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIHByb3BhZ25hdGUgdGhlIHNpdGVzIGRyb3Bkb3duIHRvIHRoZSBoaWRkZW4gc2l0ZXMgZm9ybVxuICAgICAgICAgICAgdGhpcy51aS5jb250YWluZXIuZmluZCgnLmpzLWNtcy1wYWdldHJlZS1zaXRlLXRyaWdnZXInKS5vbih0aGlzLmNsaWNrLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAvLyBwcmV2ZW50IGlmIHBhcmVudCBpcyBhY3RpdmVcbiAgICAgICAgICAgICAgICBpZiAoJCh0aGlzKS5wYXJlbnQoKS5oYXNDbGFzcygnYWN0aXZlJykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGF0LnVpLnNpdGVGb3JtLmZpbmQoJ3NlbGVjdCcpXG4gICAgICAgICAgICAgICAgICAgIC52YWwoJCh0aGlzKS5kYXRhKCkuaWQpLmVuZCgpLnN1Ym1pdCgpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIGFkZGl0aW9uYWwgZXZlbnQgaGFuZGxlcnNcbiAgICAgICAgICAgIHRoaXMuX3NldFRvb2x0aXBzKCk7XG4gICAgICAgICAgICB0aGlzLl9zZXRTZWFyY2goKTtcblxuICAgICAgICAgICAgLy8gbWFrZSBzdXJlIGFqYXggcG9zdCByZXF1ZXN0cyBhcmUgd29ya2luZ1xuICAgICAgICAgICAgdGhpcy5fc2V0QWpheFBvc3QoJy5qcy1jbXMtdHJlZS1pdGVtLW1lbnUgYScpO1xuICAgICAgICAgICAgdGhpcy5fc2V0QWpheFBvc3QoJy5qcy1jbXMtdHJlZS1sYW5nLXRyaWdnZXInKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogSGVscGVyIHRvIHByb2Nlc3MgdGhlIGN1dCBhbmQgY29weSBldmVudHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2QgX2N1dE9yQ29weVxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdHNdXG4gICAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy50eXBlXSBlaXRoZXIgJ2N1dCcgb3IgJ2NvcHknXG4gICAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5lbGVtZW50XSBvcmlnaW5hdGVkIHRyaWdnZXIgZWxlbWVudFxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgX2N1dE9yQ29weTogZnVuY3Rpb24gX2N1dE9yQ29weShvYmopIHtcbiAgICAgICAgICAgIC8vIHByZXZlbnQgYWN0aW9ucyBpZiB5b3UgdHJ5IHRvIGNvcHkgYSBwYWdlIHdpdGggYW4gYXBwaG9va1xuICAgICAgICAgICAgaWYgKG9iai50eXBlID09PSAnY29weScgJiYgb2JqLmVsZW1lbnQuZGF0YSgpLmFwcGhvb2spIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcih0aGlzLm9wdGlvbnMubGFuZy5hcHBob29rKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBqc1RyZWVJZCA9IHRoaXMuX2dldE5vZGVJZChvYmouZWxlbWVudC5jbG9zZXN0KCcuanN0cmVlLWdyaWQtY2VsbCcpKTtcbiAgICAgICAgICAgIC8vIHJlc2V0cyBpZiB3ZSBjbGljayBhZ2FpblxuICAgICAgICAgICAgaWYgKHRoaXMuY2FjaGUudHlwZSA9PT0gb2JqLnR5cGUgJiYganNUcmVlSWQgPT09IHRoaXMuY2FjaGUuaWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlLnR5cGUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuX2hpZGVIZWxwZXJzKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gY2FjaGUgdGhlIG5vZGUgYW5kIHR5cGUgc28gYF9zaG93SGVscGVyc2BcbiAgICAgICAgICAgICAgICAvLyB3aWxsIHRyaWdnZXIgdGhlIGNvcnJlY3QgYmVoYXZpb3VyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZS50YXJnZXQgPSBvYmouZWxlbWVudDtcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlLnR5cGUgPSBvYmoudHlwZTtcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlLmlkID0ganNUcmVlSWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvd0hlbHBlcnMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGVja0hlbHBlcnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogSGVscGVyIHRvIHByb2Nlc3MgdGhlIHBhc3RlIGV2ZW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIF9wYXN0ZVxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IGV2ZW50IG9yaWdpbmF0ZWQgZXZlbnQgaGFuZGxlclxuICAgICAgICAgKi9cbiAgICAgICAgX3Bhc3RlOiBmdW5jdGlvbiBfcGFzdGUoZXZlbnQpIHtcbiAgICAgICAgICAgIC8vIGhpZGUgaGVscGVycyBhZnRlciB3ZSBwaWNrZWQgb25lXG4gICAgICAgICAgICB0aGlzLl9oaWRlSGVscGVycygpO1xuXG4gICAgICAgICAgICB2YXIgY29weUZyb21JZCA9IHRoaXMuX2dldE5vZGVJZCh0aGlzLmNhY2hlLnRhcmdldCk7XG4gICAgICAgICAgICB2YXIgY29weVRvSWQgPSB0aGlzLl9nZXROb2RlSWQoJChldmVudC5jdXJyZW50VGFyZ2V0KSk7XG5cbiAgICAgICAgICAgIC8vIGNvcHlUb0lkIGNvbnRhaW5zIGBqc3RyZWUtMWAsIGFzc2lnbiB0byByb290XG4gICAgICAgICAgICBpZiAoY29weVRvSWQuaW5kZXhPZignanN0cmVlLTEnKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgY29weVRvSWQgPSAnIyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmNhY2hlLnR5cGUgPT09ICdjdXQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51aS50cmVlLmpzdHJlZSgnY3V0JywgY29weUZyb21JZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudWkudHJlZS5qc3RyZWUoJ2NvcHknLCBjb3B5RnJvbUlkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy51aS50cmVlLmpzdHJlZSgncGFzdGUnLCBjb3B5VG9JZCwgJ2xhc3QnKTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGUudHlwZSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmNhY2hlLnRhcmdldCA9IG51bGw7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJlaXZlcyBhIGxpc3Qgb2Ygbm9kZXMgZnJvbSBsb2NhbCBzdG9yYWdlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIF9nZXRTdG9yZWROb2RlSWRzXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEByZXR1cm4ge0FycmF5fSBsaXN0IG9mIGlkc1xuICAgICAgICAgKi9cbiAgICAgICAgX2dldFN0b3JlZE5vZGVJZHM6IGZ1bmN0aW9uIF9nZXRTdG9yZWROb2RlSWRzKCkge1xuICAgICAgICAgICAgcmV0dXJuIENNUy5zZXR0aW5ncy5wYWdldHJlZSB8fCBbXTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogU3RvcmVzIGEgbm9kZSBpbiBsb2NhbCBzdG9yYWdlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIF9zdG9yZU5vZGVJZFxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gaWQgdG8gYmUgc3RvcmVkXG4gICAgICAgICAqIEByZXR1cm4ge1N0cmluZ30gaWQgdGhhdCBoYXMgYmVlbiBzdG9yZWRcbiAgICAgICAgICovXG4gICAgICAgIF9zdG9yZU5vZGVJZDogZnVuY3Rpb24gX3N0b3JlTm9kZUlkKGlkKSB7XG4gICAgICAgICAgICB2YXIgbnVtYmVyID0gaWQ7XG4gICAgICAgICAgICB2YXIgc3RvcmFnZSA9IHRoaXMuX2dldFN0b3JlZE5vZGVJZHMoKTtcblxuICAgICAgICAgICAgLy8gc3RvcmUgdmFsdWUgb25seSBpZiBpdCBpc24ndCB0aGVyZSB5ZXRcbiAgICAgICAgICAgIGlmIChzdG9yYWdlLmluZGV4T2YobnVtYmVyKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBzdG9yYWdlLnB1c2gobnVtYmVyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQ01TLnNldHRpbmdzLnBhZ2V0cmVlID0gc3RvcmFnZTtcbiAgICAgICAgICAgIENNUy5BUEkuSGVscGVycy5zZXRTZXR0aW5ncyhDTVMuc2V0dGluZ3MpO1xuXG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZW1vdmVzIGEgbm9kZSBpbiBsb2NhbCBzdG9yYWdlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIF9yZW1vdmVOb2RlSWRcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGlkIHRvIGJlIHN0b3JlZFxuICAgICAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IGlkIHRoYXQgaGFzIGJlZW4gcmVtb3ZlZFxuICAgICAgICAgKi9cbiAgICAgICAgX3JlbW92ZU5vZGVJZDogZnVuY3Rpb24gX3JlbW92ZU5vZGVJZChpZCkge1xuICAgICAgICAgICAgdmFyIG51bWJlciA9IGlkO1xuICAgICAgICAgICAgdmFyIHN0b3JhZ2UgPSB0aGlzLl9nZXRTdG9yZWROb2RlSWRzKCk7XG4gICAgICAgICAgICB2YXIgaW5kZXggPSBzdG9yYWdlLmluZGV4T2YobnVtYmVyKTtcblxuICAgICAgICAgICAgLy8gcmVtb3ZlIGdpdmVuIGlkIGZyb20gc3RvcmFnZVxuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIHN0b3JhZ2Uuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQ01TLnNldHRpbmdzLnBhZ2V0cmVlID0gc3RvcmFnZTtcbiAgICAgICAgICAgIENNUy5BUEkuSGVscGVycy5zZXRTZXR0aW5ncyhDTVMuc2V0dGluZ3MpO1xuXG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBNb3ZlcyBhIG5vZGUgYWZ0ZXIgZHJhZyAmIGRyb3AuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2QgX21vdmVOb2RlXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c11cbiAgICAgICAgICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLmlkXSBjdXJyZW50IGVsZW1lbnQgaWQgZm9yIHVybCBtYXRjaGluZ1xuICAgICAgICAgKiBAcGFyYW0ge051bWJlcn0gW29wdHMudGFyZ2V0XSB0YXJnZXQgc2libGluZyBvciBwYXJlbnRcbiAgICAgICAgICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLnBvc2l0aW9uXSBlaXRoZXIgYGxlZnRgLCBgcmlnaHRgIG9yIGBsYXN0LWNoaWxkYFxuICAgICAgICAgKiBAcmV0dXJucyB7JC5EZWZlcnJlZH0gYWpheCByZXF1ZXN0IG9iamVjdFxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgX21vdmVOb2RlOiBmdW5jdGlvbiBfbW92ZU5vZGUob2JqKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICBvYmouc2l0ZSA9IHRoYXQub3B0aW9ucy5zaXRlO1xuXG4gICAgICAgICAgICByZXR1cm4gJC5hamF4KHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgICAgICAgICAgICB1cmw6IHRoYXQub3B0aW9ucy51cmxzLm1vdmUucmVwbGFjZSgne2lkfScsIG9iai5pZCksXG4gICAgICAgICAgICAgICAgZGF0YTogb2JqXG4gICAgICAgICAgICB9KS5kb25lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0aGF0Ll9zaG93U3VjY2VzcyhvYmouaWQpO1xuICAgICAgICAgICAgfSkuZmFpbChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGF0LnNob3dFcnJvcihlcnJvci5zdGF0dXNUZXh0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb3BpZXMgYSBub2RlIGludG8gdGhlIHNlbGVjdGVkIG5vZGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2QgX2NvcHlOb2RlXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjb3B5RnJvbUlkIGVsZW1lbnQgdG8gYmUgY3V0XG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjb3B5VG9JZCBkZXN0aW5hdGlvbiB0byBpbmplY3RcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICovXG4gICAgICAgIF9jb3B5Tm9kZTogZnVuY3Rpb24gX2NvcHlOb2RlKG9iaikge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGF0Ll9nZXROb2RlUG9zaXRpb24ob2JqKTtcbiAgICAgICAgICAgIHZhciBkYXRhID0ge1xuICAgICAgICAgICAgICAgIHNpdGU6IHRoaXMub3B0aW9ucy5zaXRlLFxuICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gcmVmZXIgdG8gdGhlIG9yaWdpbmFsIGl0ZW0gaGVyZSwgYXMgdGhlIGNvcGllZFxuICAgICAgICAgICAgICAgIC8vIG5vZGUgd2lsbCBoYXZlIG5vIGRhdGEgYXR0cmlidXRlcyBzdG9yZWQgYXQgaXQgKG5vdCBhIGNsb25lKVxuICAgICAgICAgICAgICAgIGlkOiBvYmoub3JpZ2luYWwuZGF0YS5pZCxcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogbm9kZS5wb3NpdGlvblxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gdGFyZ2V0IHByb3ZpZGVkLCB0aGUgbm9kZSBsYW5kcyBpbiByb290XG4gICAgICAgICAgICBpZiAobm9kZS50YXJnZXQpIHtcbiAgICAgICAgICAgICAgICBkYXRhLnRhcmdldCA9IG5vZGUudGFyZ2V0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGxvYWQgYSBkaWFsb2cgZmlyc3QsIHRvIGNoZWNrIGlmIHBlcm1pc3Npb25zIHNob3VsZFxuICAgICAgICAgICAgLy8gYmUgY29waWVkIG9yIG5vdFxuICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgICAgICAgICAgICB1cmw6IHRoYXQub3B0aW9ucy51cmxzLmNvcHlQZXJtaXNzaW9uLnJlcGxhY2UoJ3tpZH0nLCBkYXRhLmlkKSxcbiAgICAgICAgICAgICAgICBkYXRhOiBkYXRhXG4gICAgICAgICAgICAvLyB0aGUgZGlhbG9nIGlzIGxvYWRlZCB2aWEgdGhlIGFqYXggcmVzcG9ucyBvcmlnaW5hdGluZyBmcm9tXG4gICAgICAgICAgICAvLyBgdGVtcGxhdGVzL2FkbWluL2Ntcy9wYWdlL3RyZWUvY29weV9wcmVtaXNzaW9ucy5odG1sYFxuICAgICAgICAgICAgfSkuZG9uZShmdW5jdGlvbiAoZGlhbG9nKSB7XG4gICAgICAgICAgICAgICAgdGhhdC51aS5kaWFsb2cuYXBwZW5kKGRpYWxvZyk7XG4gICAgICAgICAgICB9KS5mYWlsKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHRoYXQuc2hvd0Vycm9yKGVycm9yLnN0YXR1c1RleHQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIGF0dGFjaCBldmVudHMgdG8gdGhlIHBlcm1pc3Npb24gZGlhbG9nXG4gICAgICAgICAgICB0aGlzLnVpLmRpYWxvZy5vZmYodGhpcy5jbGljaywgJy5jYW5jZWwnKS5vbih0aGlzLmNsaWNrLCAnLmNhbmNlbCcsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBqdXN0IGNvcGllZCBub2RlXG4gICAgICAgICAgICAgICAgdGhhdC51aS50cmVlLmpzdHJlZSgnZGVsZXRlX25vZGUnLCBvYmoubm9kZS5pZCk7XG4gICAgICAgICAgICAgICAgJCgnLmpzLWNtcy1kaWFsb2cnKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAkKCcuanMtY21zLWRpYWxvZy1kaW1tZXInKS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH0pLm9mZih0aGlzLmNsaWNrLCAnLnN1Ym1pdCcpLm9uKHRoaXMuY2xpY2ssICcuc3VibWl0JywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdmFyIGZvcm1EYXRhID0gJCh0aGlzKS5jbG9zZXN0KCdmb3JtJykuc2VyaWFsaXplKCkuc3BsaXQoJyYnKTtcbiAgICAgICAgICAgICAgICAvLyBsb29wIHRocm91Z2ggZm9ybSBkYXRhIGFuZCBhdHRhY2ggdG8gb2JqXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb3JtRGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBkYXRhW2Zvcm1EYXRhW2ldLnNwbGl0KCc9JylbMF1dID0gZm9ybURhdGFbaV0uc3BsaXQoJz0nKVsxXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gc2VuZCB0aGUgcmVhbCBhamF4IHJlcXVlc3QgZm9yIGNvcHlpbmcgdGhlIHBsdWdpblxuICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHRoYXQub3B0aW9ucy51cmxzLmNvcHkucmVwbGFjZSgne2lkfScsIGRhdGEuaWQpLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhXG4gICAgICAgICAgICAgICAgfSkuZG9uZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoYXQuX3JlbG9hZEhlbHBlcigpO1xuICAgICAgICAgICAgICAgIH0pLmZhaWwoZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoYXQuc2hvd0Vycm9yKGVycm9yLnN0YXR1c1RleHQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgZWxlbWVudCBmcm9tIGFueSBzdWIgbm9kZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2QgX2dldEVsZW1lbnRcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtqUXVlcnl9IGVsIGpRdWVyeSBub2RlIGZvcm0gd2hlcmUgdG8gc2VhcmNoXG4gICAgICAgICAqIEByZXR1cm4ge1N0cmluZ3xCb29sZWFufSBqc1RyZWUgbm9kZSBlbGVtZW50IGlkXG4gICAgICAgICAqL1xuICAgICAgICBfZ2V0Tm9kZUlkOiBmdW5jdGlvbiBfZ2V0RWxlbWVudChlbCkge1xuICAgICAgICAgICAgdmFyIGNscyA9IGVsLmNsb3Nlc3QoJy5qc3RyZWUtZ3JpZC1jZWxsJykuYXR0cignY2xhc3MnKTtcblxuICAgICAgICAgICAgcmV0dXJuIChjbHMpID8gY2xzLnJlcGxhY2UoLy4qanNncmlkXyguKz8pX2NvbC4qLywgJyQxJykgOiBmYWxzZTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyB0aGUgbmV3IG5vZGUgcG9zaXRpb24gYWZ0ZXIgbW92aW5nLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIF9nZXROb2RlUG9zaXRpb25cbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iaiBqc3RyZWUgbW92ZSBvYmplY3RcbiAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBldmFsdWF0ZWQgb2JqZWN0IHdpdGggcGFyYW1zXG4gICAgICAgICAqL1xuICAgICAgICBfZ2V0Tm9kZVBvc2l0aW9uOiBmdW5jdGlvbiBfZ2V0Tm9kZVBvc2l0aW9uKG9iaikge1xuICAgICAgICAgICAgdmFyIGRhdGEgPSB7fTtcbiAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy51aS50cmVlLmpzdHJlZSgnZ2V0X25vZGUnLCBvYmoubm9kZS5wYXJlbnQpO1xuXG4gICAgICAgICAgICBkYXRhLnBvc2l0aW9uID0gb2JqLnBvc2l0aW9uO1xuXG4gICAgICAgICAgICAvLyBqc3RyZWUgaW5kaWNhdGVzIG5vIHBhcmVudCB3aXRoIGAjYCwgaW4gdGhpcyBjYXNlIHdlIGRvIG5vdFxuICAgICAgICAgICAgLy8gbmVlZCB0byBzZXQgdGhlIHRhcmdldCBhdHRyaWJ1dGUgYXQgYWxsXG4gICAgICAgICAgICBpZiAob2JqLnBhcmVudCAhPT0gJyMnKSB7XG4gICAgICAgICAgICAgICAgZGF0YS50YXJnZXQgPSBub2RlLmRhdGEuaWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHNvbWUgZnVuY3Rpb25zIGxpa2UgY29weSBjcmVhdGUgYSBuZXcgZWxlbWVudCB3aXRoIGEgbmV3IGlkLFxuICAgICAgICAgICAgLy8gaW4gdGhpcyBjYXNlIHdlIG5lZWQgdG8gc2V0IGBkYXRhLmlkYCBtYW51YWxseVxuICAgICAgICAgICAgaWYgKG9iai5ub2RlICYmIG9iai5ub2RlLmRhdGEpIHtcbiAgICAgICAgICAgICAgICBkYXRhLmlkID0gb2JqLm5vZGUuZGF0YS5pZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldHMgdXAgZ2VuZXJhbCB0b29sdGlwcyB0aGF0IGNhbiBoYXZlIGEgbGlzdCBvZiBsaW5rcyBvciBjb250ZW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIF9zZXRUb29sdGlwc1xuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgX3NldFRvb2x0aXBzOiBmdW5jdGlvbiBfc2V0VG9vbHRpcHMoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgdHJpZ2dlckNscyA9ICcuanMtY21zLXRyZWUtdG9vbHRpcC10cmlnZ2VyJztcbiAgICAgICAgICAgIHZhciBjb250YWluZXJDbHMgPSAnLmpzLWNtcy10cmVlLXRvb2x0aXAtY29udGFpbmVyJztcbiAgICAgICAgICAgIHZhciB0cmlnZ2VycztcbiAgICAgICAgICAgIHZhciBjb250YWluZXJzO1xuICAgICAgICAgICAgdmFyIGluZGV4O1xuXG4gICAgICAgICAgICAvLyBhdHRhY2ggZXZlbnQgdG8gdGhlIHRyaWdnZXJcbiAgICAgICAgICAgIHRoaXMudWkuY29udGFpbmVyLm9uKHRoaXMuY2xpY2ssIHRyaWdnZXJDbHMsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgICAgICAgICB0cmlnZ2VycyA9ICQodHJpZ2dlckNscyk7XG4gICAgICAgICAgICAgICAgY29udGFpbmVycyA9ICQoY29udGFpbmVyQ2xzKTtcbiAgICAgICAgICAgICAgICBpbmRleCA9IHRyaWdnZXJzLmluZGV4KHRoaXMpO1xuXG4gICAgICAgICAgICAgICAgLy8gY2FuY2VsIGlmIG9wZW5lZCB0b29sdGlwIGlzIHRyaWdnZXJlZCBhZ2FpblxuICAgICAgICAgICAgICAgIGlmIChjb250YWluZXJzLmVxKGluZGV4KS5pcygnOnZpc2libGUnKSkge1xuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJzLnJlbW92ZUNsYXNzKCdjbXMtdHJlZS10b29sdGlwLWNvbnRhaW5lci1vcGVuJyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2Ugc2hvdyB0aGUgZHJvcGRvd25cbiAgICAgICAgICAgICAgICBjb250YWluZXJzXG4gICAgICAgICAgICAgICAgICAgIC5yZW1vdmVDbGFzcygnY21zLXRyZWUtdG9vbHRpcC1jb250YWluZXItb3BlbicpXG4gICAgICAgICAgICAgICAgICAgIC5lcShpbmRleClcbiAgICAgICAgICAgICAgICAgICAgLmFkZENsYXNzKCdjbXMtdHJlZS10b29sdGlwLWNvbnRhaW5lci1vcGVuJyk7XG5cbiAgICAgICAgICAgICAgICB0aGF0LnVpLmRvY3VtZW50Lm9uZSh0aGF0LmNsaWNrLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcnMucmVtb3ZlQ2xhc3MoJ2Ntcy10cmVlLXRvb2x0aXAtY29udGFpbmVyLW9wZW4nKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBzdG9wIHByb3BhZ25hdGlvbiBvbiB0aGUgZWxlbWVudFxuICAgICAgICAgICAgdGhpcy51aS5jb250YWluZXIub24odGhpcy5jbGljaywgY29udGFpbmVyQ2xzLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogVHJpZ2dlcnMgdGhlIGxpbmtzIGBocmVmYCBhcyBhamF4IHBvc3QgcmVxdWVzdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBfc2V0QWpheFBvc3RcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtqUXVlcnl9IHRyaWdnZXIgalF1ZXJ5IGxpbmsgdGFyZ2V0XG4gICAgICAgICAqL1xuICAgICAgICBfc2V0QWpheFBvc3Q6IGZ1bmN0aW9uIF9zZXRBamF4UG9zdCh0cmlnZ2VyKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG5cbiAgICAgICAgICAgIHRoaXMudWkuY29udGFpbmVyLm9uKHRoaXMuY2xpY2ssIHRyaWdnZXIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQodGhpcykuYXR0cignaHJlZicpXG4gICAgICAgICAgICAgICAgfSkuZG9uZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuc2VsZiAhPT0gd2luZG93LnRvcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgd2UncmUgaW4gdGhlIHNpZGVmcmFtZSB3ZSBoYXZlIHRvIGFjdHVhbGx5XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiB3ZSBhcmUgcHVibGlzaGluZyBhIHBhZ2Ugd2UncmUgY3VycmVudGx5IGluXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIGlmIHRoZSBzbHVnIGRpZCBjaGFuZ2Ugd2Ugd291bGQgbmVlZCB0b1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVkaXJlY3QgdG8gdGhhdCBuZXcgc2x1Z1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJvYmxlbSBoZXJlIGlzIHRoYXQgaW4gY2FzZSBvZiB0aGUgYXBwaG9va2VkIHBhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBtb2RlbCBhbmQgcGsgYXJlIGVtcHR5IGFuZCByZWxvYWRCcm93c2VyIGRvZXNuJ3QgcmVhbGx5XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBkbyBhbnl0aGluZyAtIHNvIGhlcmUgd2Ugc3BlY2lmaWNhbGx5IGZvcmNlIHRoZSBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBiZSB0aGUgZGF0YSBhYm91dCB0aGUgcGFnZSBhbmQgbm90IHRoZSBtb2RlbFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudCA9ICh3aW5kb3cucGFyZW50ID8gd2luZG93LnBhcmVudCA6IHdpbmRvdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRSBzaG91bGRuJ3QgYmUgaGFyZGNvZGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWw6ICdjbXMucGFnZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGs6IHBhcmVudC5DTVMuY29uZmlnLnJlcXVlc3QucGFnZV9pZFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIENNUy5BUEkuSGVscGVycy5yZWxvYWRCcm93c2VyKGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2Ugc2ltcGx5IHJlbG9hZCB0aGUgcGFnZVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5fcmVsb2FkSGVscGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KS5mYWlsKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICB0aGF0LnNob3dFcnJvcihlcnJvci5zdGF0dXNUZXh0KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXRzIGV2ZW50cyBmb3IgdGhlIHNlYXJjaCBvbiB0aGUgaGVhZGVyLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIF9zZXRTZWFyY2hcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICovXG4gICAgICAgIF9zZXRTZWFyY2g6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcblxuICAgICAgICAgICAgdmFyIGZpbHRlckFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIGZpbHRlclRyaWdnZXIgPSB0aGlzLnVpLmNvbnRhaW5lci5maW5kKCcuanMtY21zLXBhZ2V0cmVlLWhlYWRlci1maWx0ZXItdHJpZ2dlcicpO1xuICAgICAgICAgICAgdmFyIGZpbHRlckNvbnRhaW5lciA9IHRoaXMudWkuY29udGFpbmVyLmZpbmQoJy5qcy1jbXMtcGFnZXRyZWUtaGVhZGVyLWZpbHRlci1jb250YWluZXInKTtcbiAgICAgICAgICAgIHZhciBmaWx0ZXJDbG9zZSA9IGZpbHRlckNvbnRhaW5lci5maW5kKCcuanMtY21zLXBhZ2V0cmVlLWhlYWRlci1zZWFyY2gtY2xvc2UnKTtcbiAgICAgICAgICAgIHZhciBmaWx0ZXJDbGFzcyA9ICdjbXMtcGFnZXRyZWUtaGVhZGVyLWZpbHRlci1hY3RpdmUnO1xuXG4gICAgICAgICAgICB2YXIgdmlzaWJsZUZvcm0gPSB0aGlzLnVpLmNvbnRhaW5lci5maW5kKCcuanMtY21zLXBhZ2V0cmVlLWhlYWRlci1zZWFyY2gnKTtcbiAgICAgICAgICAgIHZhciBoaWRkZW5Gb3JtID0gdGhpcy51aS5jb250YWluZXIuZmluZCgnLmpzLWNtcy1wYWdldHJlZS1oZWFkZXItc2VhcmNoLWNvcHkgZm9ybScpO1xuXG4gICAgICAgICAgICB2YXIgc2VhcmNoQ29udGFpbmVyID0gdGhpcy51aS5jb250YWluZXIuZmluZCgnLmNtcy1wYWdldHJlZS1oZWFkZXItZmlsdGVyJyk7XG4gICAgICAgICAgICB2YXIgc2VhcmNoRmllbGQgPSBzZWFyY2hDb250YWluZXIuZmluZCgnI2ZpZWxkLXNlYXJjaGJhcicpO1xuICAgICAgICAgICAgdmFyIHRpbWVvdXQgPSAyMDA7XG5cbiAgICAgICAgICAgIC8vIGFkZCBhY3RpdmUgY2xhc3Mgd2hlbiBmb2N1c2luZyB0aGUgc2VhcmNoIGZpZWxkXG4gICAgICAgICAgICBzZWFyY2hGaWVsZC5vbignZm9jdXMnLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgc2VhcmNoQ29udGFpbmVyLmFkZENsYXNzKGZpbHRlckNsYXNzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2VhcmNoRmllbGQub24oJ2JsdXInLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgLy8gdGltZW91dCBpcyByZXF1aXJlZCB0byBwcmV2ZW50IHRoZSBzZWFyY2ggZmllbGQgZnJvbSBqdW1waW5nXG4gICAgICAgICAgICAgICAgLy8gYmV0d2VlbiBlbmxhcmdpbmcgYW5kIHNocmlua2luZ1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbHRlckFjdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoQ29udGFpbmVyLnJlbW92ZUNsYXNzKGZpbHRlckNsYXNzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIHRpbWVvdXQpO1xuICAgICAgICAgICAgICAgIHRoYXQudWkuZG9jdW1lbnQub2ZmKHRoYXQuY2xpY2spO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIHNob3dzL2hpZGVzIGZpbHRlciBib3hcbiAgICAgICAgICAgIGZpbHRlclRyaWdnZXIuYWRkKGZpbHRlckNsb3NlKS5vbih0aGlzLmNsaWNrLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGlmICghZmlsdGVyQWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckNvbnRhaW5lci5zaG93KCk7XG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaENvbnRhaW5lci5hZGRDbGFzcyhmaWx0ZXJDbGFzcyk7XG4gICAgICAgICAgICAgICAgICAgIHRoYXQudWkuZG9jdW1lbnQub24odGhhdC5jbGljaywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyQWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclRyaWdnZXIudHJpZ2dlcih0aGF0LmNsaWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyQ29udGFpbmVyLmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoQ29udGFpbmVyLnJlbW92ZUNsYXNzKGZpbHRlckNsYXNzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhhdC51aS5kb2N1bWVudC5vZmYodGhhdC5jbGljayk7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBwcmV2ZW50IGNsb3Npbmcgd2hlbiBvbiBmaWx0ZXIgY29udGFpbmVyXG4gICAgICAgICAgICBmaWx0ZXJDb250YWluZXIub24oJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIGFkZCBoaWRkZW4gZmllbGRzIHRvIHRoZSBmb3JtIHRvIG1haW50YWluIGZpbHRlciBwYXJhbXNcbiAgICAgICAgICAgIHZpc2libGVGb3JtLmFwcGVuZChoaWRkZW5Gb3JtLmZpbmQoJ2lucHV0W3R5cGU9XCJoaWRkZW5cIl0nKSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNob3dzIHBhc3RlIGhlbHBlcnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2QgX3Nob3dIZWxwZXJzXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqL1xuICAgICAgICBfc2hvd0hlbHBlcnM6IGZ1bmN0aW9uIF9zaG93SGVscGVycygpIHtcbiAgICAgICAgICAgIC8vIGhlbHBlcnMgYXJlIGdlbmVyYXRlZCBvbiB0aGUgZmx5LCBzbyB3ZSBuZWVkIHRvIHJlZmVyZW5jZVxuICAgICAgICAgICAgLy8gdGhlbSBldmVyeSBzaW5nbGUgdGltZVxuICAgICAgICAgICAgJCgnLmNtcy10cmVlLWl0ZW0taGVscGVycycpLnJlbW92ZUNsYXNzKCdjbXMtaGlkZGVuJyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEhpZGVzIHBhc3RlIGhlbHBlcnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2QgX2hpZGVIZWxwZXJzXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqL1xuICAgICAgICBfaGlkZUhlbHBlcnM6IGZ1bmN0aW9uIF9oaWRlSGVscGVycygpIHtcbiAgICAgICAgICAgIC8vIGhlbHBlcnMgYXJlIGdlbmVyYXRlZCBvbiB0aGUgZmx5LCBzbyB3ZSBuZWVkIHRvIHJlZmVyZW5jZVxuICAgICAgICAgICAgLy8gdGhlbSBldmVyeSBzaW5nbGUgdGltZVxuICAgICAgICAgICAgJCgnLmNtcy10cmVlLWl0ZW0taGVscGVycycpLmFkZENsYXNzKCdjbXMtaGlkZGVuJyk7XG4gICAgICAgICAgICB0aGlzLmNhY2hlLmlkID0gbnVsbDtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ2hlY2tzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBoZWxwZXJzIGFmdGVyIGBhZnRlcl9vcGVuLmpzdHJlZWBcbiAgICAgICAgICogb3IgYF9jdXRPckNvcHlgIGlzIHRyaWdnZXJlZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBfY2hlY2tIZWxwZXJzXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqL1xuICAgICAgICBfY2hlY2tIZWxwZXJzOiBmdW5jdGlvbiBfY2hlY2tIZWxwZXJzKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FjaGUudHlwZSAmJiB0aGlzLmNhY2hlLmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvd0hlbHBlcnModGhpcy5jYWNoZS50eXBlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaGlkZSBjdXQgZWxlbWVudCBhbmQgaXQncyBkZXNjZW5kYW50cycgcGFzdGUgaGVscGVycyBpZiBpdCBpcyB2aXNpYmxlXG4gICAgICAgICAgICBpZiAodGhpcy5jYWNoZS50eXBlID09PSAnY3V0JyAmJiB0aGlzLmNhY2hlLnRhcmdldCkge1xuICAgICAgICAgICAgICAgIHZhciBkZXNjZW5kYW50SWRzID0gdGhpcy51aS50cmVlLmpzdHJlZSh0cnVlKS5nZXRfbm9kZSh0aGlzLmNhY2hlLmlkKS5jaGlsZHJlbl9kO1xuXG4gICAgICAgICAgICAgICAgW3RoaXMuY2FjaGUuaWRdLmNvbmNhdChkZXNjZW5kYW50SWRzKS5mb3JFYWNoKGZ1bmN0aW9uIChpZCkge1xuICAgICAgICAgICAgICAgICAgICAkKCcuanNncmlkXycgKyBpZCArICdfY29sIC5jbXMtdHJlZS1pdGVtLWhlbHBlcnMnKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmFkZENsYXNzKCdjbXMtaGlkZGVuJyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNob3dzIHN1Y2Nlc3MgbWVzc2FnZSBvbiBub2RlIGFmdGVyIHN1Y2Nlc3NmdWwgYWN0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIF9zaG93U3VjY2Vzc1xuICAgICAgICAgKiBAcGFyYW0ge051bWJlcn0gaWQgaWQgb2YgdGhlIGVsZW1lbnQgdG8gYWRkIHRoZSBzdWNjZXNzIGNsYXNzXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqL1xuICAgICAgICBfc2hvd1N1Y2Nlc3M6IGZ1bmN0aW9uIF9zaG93U3VjY2VzcyhpZCkge1xuICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLnVpLnRyZWUuZmluZCgnbGlbZGF0YS1pZD1cIicgKyBpZCArICdcIl0nKTtcbiAgICAgICAgICAgIGVsZW1lbnQuYWRkQ2xhc3MoJ2Ntcy10cmVlLW5vZGUtc3VjY2VzcycpO1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVDbGFzcygnY21zLXRyZWUtbm9kZS1zdWNjZXNzJyk7XG4gICAgICAgICAgICB9LCB0aGlzLnN1Y2Nlc3NUaW1lcik7XG4gICAgICAgICAgICAvLyBoaWRlIGVsZW1lbnRzXG4gICAgICAgICAgICB0aGlzLl9oaWRlSGVscGVycygpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDaGVja3MgaWYgd2Ugc2hvdWxkIHJlbG9hZCB0aGUgaWZyYW1lIG9yIGVudGlyZSB3aW5kb3cuIEZvciB0aGlzIHdlXG4gICAgICAgICAqIG5lZWQgdG8gc2tpcCBgQ01TLkFQSS5IZWxwZXJzLnJlbG9hZEJyb3dzZXIoKTtgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIF9yZWxvYWRIZWxwZXJcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICovXG4gICAgICAgIF9yZWxvYWRIZWxwZXI6IGZ1bmN0aW9uIF9yZWxvYWRIZWxwZXIoKSB7XG4gICAgICAgICAgICBpZiAod2luZG93LnNlbGYgIT09IHdpbmRvdy50b3ApIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIENNUy5BUEkuSGVscGVycy5yZWxvYWRCcm93c2VyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIERpc3BsYXlzIGFuIGVycm9yIHdpdGhpbiB0aGUgZGphbmdvIFVJLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNob3dFcnJvclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBzdHJpbmcgbWVzc2FnZSB0byBkaXNwbGF5XG4gICAgICAgICAqL1xuICAgICAgICBzaG93RXJyb3I6IGZ1bmN0aW9uIHNob3dFcnJvcihtZXNzYWdlKSB7XG4gICAgICAgICAgICB2YXIgbWVzc2FnZXMgPSAkKCcubWVzc2FnZWxpc3QnKTtcbiAgICAgICAgICAgIHZhciBicmVhZGNydW1iID0gJCgnLmJyZWFkY3J1bWJzJyk7XG4gICAgICAgICAgICB2YXIgcmVsb2FkID0gdGhpcy5vcHRpb25zLmxhbmcucmVsb2FkO1xuICAgICAgICAgICAgdmFyIHRwbCA9ICcnICtcbiAgICAgICAgICAgICAgICAnPHVsIGNsYXNzPVwibWVzc2FnZWxpc3RcIj4nICtcbiAgICAgICAgICAgICAgICAnICAgPGxpIGNsYXNzPVwiZXJyb3JcIj4nICtcbiAgICAgICAgICAgICAgICAnICAgICAgIHttc2d9ICcgK1xuICAgICAgICAgICAgICAgICcgICAgICAgPGEgaHJlZj1cIiNyZWxvYWRcIiBjbGFzcz1cImNtcy10cmVlLXJlbG9hZFwiPiAnICsgcmVsb2FkICsgJyA8L2E+JyArXG4gICAgICAgICAgICAgICAgJyAgIDwvbGk+JyArXG4gICAgICAgICAgICAgICAgJzwvdWw+JztcbiAgICAgICAgICAgIHZhciBtc2cgPSB0cGwucmVwbGFjZSgne21zZ30nLCAnPHN0cm9uZz4nICsgdGhpcy5vcHRpb25zLmxhbmcuZXJyb3IgKyAnPC9zdHJvbmc+ICcgKyBtZXNzYWdlKTtcblxuICAgICAgICAgICAgbWVzc2FnZXMubGVuZ3RoID8gbWVzc2FnZXMucmVwbGFjZVdpdGgobXNnKSA6IGJyZWFkY3J1bWIuYWZ0ZXIobXNnKTtcbiAgICAgICAgfVxuXG4gICAgfSk7XG5cbiAgICAvLyBzaG9ydGhhbmQgZm9yIGpRdWVyeShkb2N1bWVudCkucmVhZHkoKTtcbiAgICAkKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gbG9hZCBjbXMgc2V0dGluZ3MgYmVmb3JlaGFuZFxuICAgICAgICAvLyBoYXZlIHRvIHNldCB0b29sYmFyIHRvIFwiZXhwYW5kZWRcIiBieSBkZWZhdWx0XG4gICAgICAgIC8vIG90aGVyd2lzZSBpbml0aWFsaXphdGlvbiB3aWxsIGJlIGluY29ycmVjdCB3aGVuIHlvdVxuICAgICAgICAvLyBnbyBmaXJzdCB0byBwYWdlcyBhbmQgdGhlbiB0byBub3JtYWwgcGFnZVxuICAgICAgICBDTVMuY29uZmlnID0ge1xuICAgICAgICAgICAgc2V0dGluZ3M6IHtcbiAgICAgICAgICAgICAgICB0b29sYmFyOiAnZXhwYW5kZWQnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdXJsczoge1xuICAgICAgICAgICAgICAgIHNldHRpbmdzOiAkKCcuanMtY21zLXBhZ2V0cmVlJykuZGF0YSgnc2V0dGluZ3MtdXJsJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgQ01TLnNldHRpbmdzID0gQ01TLkFQSS5IZWxwZXJzLmdldFNldHRpbmdzKCk7XG4gICAgICAgIC8vIGF1dG9sb2FkIHRoZSBwYWdldHJlZVxuICAgICAgICBuZXcgQ01TLlBhZ2VUcmVlKCk7XG4gICAgfSk7XG5cbn0pKENNUy4kKTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpzdHJlZS5taW4uanMiLCJqc3RyZWUuZ3JpZC5taW4uanMiLCJjbXMucGFnZXRyZWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUNiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJidW5kbGUuYWRtaW4ucGFnZXRyZWUubWluLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAgICBUSElTIEZJTEUgSEFTIEJFRU4gTUFOVUFMTFkgUEFUQ0hFRCBVTlRJTCBQUiAjMTM0MiBHRVRTIFJFTEVBU0VEXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL3Zha2F0YS9qc3RyZWUvcHVsbC8xMzQyL2ZpbGVzXG4gKi9cbiFmdW5jdGlvbihlKXtcInVzZSBzdHJpY3RcIjtcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImpxdWVyeVwiXSxlKTpcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlJiZtb2R1bGUuZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1lKHJlcXVpcmUoXCJqcXVlcnlcIikpOmUoalF1ZXJ5KX0oZnVuY3Rpb24oZSx0KXtcInVzZSBzdHJpY3RcIjtpZighZS5qc3RyZWUpe3ZhciBpLHIscz0wLG49ITEsYT0hMSxvPSExLGQ9W10sYz1lKFwic2NyaXB0Omxhc3RcIikuYXR0cihcInNyY1wiKSxsPXdpbmRvdy5kb2N1bWVudCxoPWwuY3JlYXRlRWxlbWVudChcIkxJXCIpO2guc2V0QXR0cmlidXRlKFwicm9sZVwiLFwidHJlZWl0ZW1cIiksaT1sLmNyZWF0ZUVsZW1lbnQoXCJJXCIpLGkuY2xhc3NOYW1lPVwianN0cmVlLWljb24ganN0cmVlLW9jbFwiLGkuc2V0QXR0cmlidXRlKFwicm9sZVwiLFwicHJlc2VudGF0aW9uXCIpLGguYXBwZW5kQ2hpbGQoaSksaT1sLmNyZWF0ZUVsZW1lbnQoXCJBXCIpLGkuY2xhc3NOYW1lPVwianN0cmVlLWFuY2hvclwiLGkuc2V0QXR0cmlidXRlKFwiaHJlZlwiLFwiI1wiKSxpLnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsXCItMVwiKSxyPWwuY3JlYXRlRWxlbWVudChcIklcIiksci5jbGFzc05hbWU9XCJqc3RyZWUtaWNvbiBqc3RyZWUtdGhlbWVpY29uXCIsci5zZXRBdHRyaWJ1dGUoXCJyb2xlXCIsXCJwcmVzZW50YXRpb25cIiksaS5hcHBlbmRDaGlsZChyKSxoLmFwcGVuZENoaWxkKGkpLGk9cj1udWxsLGUuanN0cmVlPXt2ZXJzaW9uOlwiMy4yLjFcIixkZWZhdWx0czp7cGx1Z2luczpbXX0scGx1Z2luczp7fSxwYXRoOmMmJi0xIT09Yy5pbmRleE9mKFwiL1wiKT9jLnJlcGxhY2UoL1xcL1teXFwvXSskLyxcIlwiKTpcIlwiLGlkcmVnZXg6L1tcXFxcOiYhXnwoKVxcW1xcXTw+QConK34jXCI7Liw9XFwtIFxcLyR7fSU/YF0vZyxyb290OlwiI1wifSxlLmpzdHJlZS5jcmVhdGU9ZnVuY3Rpb24odCxpKXt2YXIgcj1uZXcgZS5qc3RyZWUuY29yZSgrK3MpLG49aTtyZXR1cm4gaT1lLmV4dGVuZCghMCx7fSxlLmpzdHJlZS5kZWZhdWx0cyxpKSxuJiZuLnBsdWdpbnMmJihpLnBsdWdpbnM9bi5wbHVnaW5zKSxlLmVhY2goaS5wbHVnaW5zLGZ1bmN0aW9uKGUsdCl7XCJjb3JlXCIhPT1lJiYocj1yLnBsdWdpbih0LGlbdF0pKX0pLGUodCkuZGF0YShcImpzdHJlZVwiLHIpLHIuaW5pdCh0LGkpLHJ9LGUuanN0cmVlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtlKFwiLmpzdHJlZTpqc3RyZWVcIikuanN0cmVlKFwiZGVzdHJveVwiKSxlKGwpLm9mZihcIi5qc3RyZWVcIil9LGUuanN0cmVlLmNvcmU9ZnVuY3Rpb24oZSl7dGhpcy5faWQ9ZSx0aGlzLl9jbnQ9MCx0aGlzLl93cms9bnVsbCx0aGlzLl9kYXRhPXtjb3JlOnt0aGVtZXM6e25hbWU6ITEsZG90czohMSxpY29uczohMX0sc2VsZWN0ZWQ6W10sbGFzdF9lcnJvcjp7fSx3b3JraW5nOiExLHdvcmtlcl9xdWV1ZTpbXSxmb2N1c2VkOm51bGx9fX0sZS5qc3RyZWUucmVmZXJlbmNlPWZ1bmN0aW9uKHQpe3ZhciBpPW51bGwscj1udWxsO2lmKCF0fHwhdC5pZHx8dC50YWdOYW1lJiZ0Lm5vZGVUeXBlfHwodD10LmlkKSwhcnx8IXIubGVuZ3RoKXRyeXtyPWUodCl9Y2F0Y2gocyl7fWlmKCFyfHwhci5sZW5ndGgpdHJ5e3I9ZShcIiNcIit0LnJlcGxhY2UoZS5qc3RyZWUuaWRyZWdleCxcIlxcXFwkJlwiKSl9Y2F0Y2gocyl7fXJldHVybiByJiZyLmxlbmd0aCYmKHI9ci5jbG9zZXN0KFwiLmpzdHJlZVwiKSkubGVuZ3RoJiYocj1yLmRhdGEoXCJqc3RyZWVcIikpP2k9cjplKFwiLmpzdHJlZVwiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9ZSh0aGlzKS5kYXRhKFwianN0cmVlXCIpO3JldHVybiByJiZyLl9tb2RlbC5kYXRhW3RdPyhpPXIsITEpOnZvaWQgMH0pLGl9LGUuZm4uanN0cmVlPWZ1bmN0aW9uKGkpe3ZhciByPVwic3RyaW5nXCI9PXR5cGVvZiBpLHM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLG49bnVsbDtyZXR1cm4gaSE9PSEwfHx0aGlzLmxlbmd0aD8odGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGE9ZS5qc3RyZWUucmVmZXJlbmNlKHRoaXMpLG89ciYmYT9hW2ldOm51bGw7cmV0dXJuIG49ciYmbz9vLmFwcGx5KGEscyk6bnVsbCxhfHxyfHxpIT09dCYmIWUuaXNQbGFpbk9iamVjdChpKXx8ZS5qc3RyZWUuY3JlYXRlKHRoaXMsaSksKGEmJiFyfHxpPT09ITApJiYobj1hfHwhMSksbnVsbCE9PW4mJm4hPT10PyExOnZvaWQgMH0pLG51bGwhPT1uJiZuIT09dD9uOnRoaXMpOiExfSxlLmV4cHJbXCI6XCJdLmpzdHJlZT1lLmV4cHIuY3JlYXRlUHNldWRvKGZ1bmN0aW9uKGkpe3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gZShpKS5oYXNDbGFzcyhcImpzdHJlZVwiKSYmZShpKS5kYXRhKFwianN0cmVlXCIpIT09dH19KSxlLmpzdHJlZS5kZWZhdWx0cy5jb3JlPXtkYXRhOiExLHN0cmluZ3M6ITEsY2hlY2tfY2FsbGJhY2s6ITEsZXJyb3I6ZS5ub29wLGFuaW1hdGlvbjoyMDAsbXVsdGlwbGU6ITAsdGhlbWVzOntuYW1lOiExLHVybDohMSxkaXI6ITEsZG90czohMCxpY29uczohMCxzdHJpcGVzOiExLHZhcmlhbnQ6ITEscmVzcG9uc2l2ZTohMX0sZXhwYW5kX3NlbGVjdGVkX29ubG9hZDohMCx3b3JrZXI6ITAsZm9yY2VfdGV4dDohMSxkYmxjbGlja190b2dnbGU6ITB9LGUuanN0cmVlLmNvcmUucHJvdG90eXBlPXtwbHVnaW46ZnVuY3Rpb24odCxpKXt2YXIgcj1lLmpzdHJlZS5wbHVnaW5zW3RdO3JldHVybiByPyh0aGlzLl9kYXRhW3RdPXt9LHIucHJvdG90eXBlPXRoaXMsbmV3IHIoaSx0aGlzKSk6dGhpc30saW5pdDpmdW5jdGlvbih0LGkpe3RoaXMuX21vZGVsPXtkYXRhOnt9LGNoYW5nZWQ6W10sZm9yY2VfZnVsbF9yZWRyYXc6ITEscmVkcmF3X3RpbWVvdXQ6ITEsZGVmYXVsdF9zdGF0ZTp7bG9hZGVkOiEwLG9wZW5lZDohMSxzZWxlY3RlZDohMSxkaXNhYmxlZDohMX19LHRoaXMuX21vZGVsLmRhdGFbZS5qc3RyZWUucm9vdF09e2lkOmUuanN0cmVlLnJvb3QscGFyZW50Om51bGwscGFyZW50czpbXSxjaGlsZHJlbjpbXSxjaGlsZHJlbl9kOltdLHN0YXRlOntsb2FkZWQ6ITF9fSx0aGlzLmVsZW1lbnQ9ZSh0KS5hZGRDbGFzcyhcImpzdHJlZSBqc3RyZWUtXCIrdGhpcy5faWQpLHRoaXMuc2V0dGluZ3M9aSx0aGlzLl9kYXRhLmNvcmUucmVhZHk9ITEsdGhpcy5fZGF0YS5jb3JlLmxvYWRlZD0hMSx0aGlzLl9kYXRhLmNvcmUucnRsPVwicnRsXCI9PT10aGlzLmVsZW1lbnQuY3NzKFwiZGlyZWN0aW9uXCIpLHRoaXMuZWxlbWVudFt0aGlzLl9kYXRhLmNvcmUucnRsP1wiYWRkQ2xhc3NcIjpcInJlbW92ZUNsYXNzXCJdKFwianN0cmVlLXJ0bFwiKSx0aGlzLmVsZW1lbnQuYXR0cihcInJvbGVcIixcInRyZWVcIiksdGhpcy5zZXR0aW5ncy5jb3JlLm11bHRpcGxlJiZ0aGlzLmVsZW1lbnQuYXR0cihcImFyaWEtbXVsdGlzZWxlY3RhYmxlXCIsITApLHRoaXMuZWxlbWVudC5hdHRyKFwidGFiaW5kZXhcIil8fHRoaXMuZWxlbWVudC5hdHRyKFwidGFiaW5kZXhcIixcIjBcIiksdGhpcy5iaW5kKCksdGhpcy50cmlnZ2VyKFwiaW5pdFwiKSx0aGlzLl9kYXRhLmNvcmUub3JpZ2luYWxfY29udGFpbmVyX2h0bWw9dGhpcy5lbGVtZW50LmZpbmQoXCIgPiB1bCA+IGxpXCIpLmNsb25lKCEwKSx0aGlzLl9kYXRhLmNvcmUub3JpZ2luYWxfY29udGFpbmVyX2h0bWwuZmluZChcImxpXCIpLmFkZEJhY2soKS5jb250ZW50cygpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiAzPT09dGhpcy5ub2RlVHlwZSYmKCF0aGlzLm5vZGVWYWx1ZXx8L15cXHMrJC8udGVzdCh0aGlzLm5vZGVWYWx1ZSkpfSkucmVtb3ZlKCksdGhpcy5lbGVtZW50Lmh0bWwoXCI8dWwgY2xhc3M9J2pzdHJlZS1jb250YWluZXItdWwganN0cmVlLWNoaWxkcmVuJyByb2xlPSdncm91cCc+PGxpIGlkPSdqXCIrdGhpcy5faWQrXCJfbG9hZGluZycgY2xhc3M9J2pzdHJlZS1pbml0aWFsLW5vZGUganN0cmVlLWxvYWRpbmcganN0cmVlLWxlYWYganN0cmVlLWxhc3QnIHJvbGU9J3RyZWUtaXRlbSc+PGkgY2xhc3M9J2pzdHJlZS1pY29uIGpzdHJlZS1vY2wnPjwvaT48YSBjbGFzcz0nanN0cmVlLWFuY2hvcicgaHJlZj0nIyc+PGkgY2xhc3M9J2pzdHJlZS1pY29uIGpzdHJlZS10aGVtZWljb24taGlkZGVuJz48L2k+XCIrdGhpcy5nZXRfc3RyaW5nKFwiTG9hZGluZyAuLi5cIikrXCI8L2E+PC9saT48L3VsPlwiKSx0aGlzLmVsZW1lbnQuYXR0cihcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiLFwialwiK3RoaXMuX2lkK1wiX2xvYWRpbmdcIiksdGhpcy5fZGF0YS5jb3JlLmxpX2hlaWdodD10aGlzLmdldF9jb250YWluZXJfdWwoKS5jaGlsZHJlbihcImxpXCIpLmZpcnN0KCkuaGVpZ2h0KCl8fDI0LHRoaXMudHJpZ2dlcihcImxvYWRpbmdcIiksdGhpcy5sb2FkX25vZGUoZS5qc3RyZWUucm9vdCl9LGRlc3Ryb3k6ZnVuY3Rpb24oZSl7aWYodGhpcy5fd3JrKXRyeXt3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTCh0aGlzLl93cmspLHRoaXMuX3dyaz1udWxsfWNhdGNoKHQpe31lfHx0aGlzLmVsZW1lbnQuZW1wdHkoKSx0aGlzLnRlYXJkb3duKCl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7dGhpcy51bmJpbmQoKSx0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoXCJqc3RyZWVcIikucmVtb3ZlRGF0YShcImpzdHJlZVwiKS5maW5kKFwiW2NsYXNzXj0nanN0cmVlJ11cIikuYWRkQmFjaygpLmF0dHIoXCJjbGFzc1wiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xhc3NOYW1lLnJlcGxhY2UoL2pzdHJlZVteIF0qfCQvZ2ksXCJcIil9KSx0aGlzLmVsZW1lbnQ9bnVsbH0sYmluZDpmdW5jdGlvbigpe3ZhciB0PVwiXCIsaT1udWxsLHI9MDt0aGlzLmVsZW1lbnQub24oXCJkYmxjbGljay5qc3RyZWVcIixmdW5jdGlvbihlKXtpZihlLnRhcmdldC50YWdOYW1lJiZcImlucHV0XCI9PT1lLnRhcmdldC50YWdOYW1lLnRvTG93ZXJDYXNlKCkpcmV0dXJuITA7aWYobC5zZWxlY3Rpb24mJmwuc2VsZWN0aW9uLmVtcHR5KWwuc2VsZWN0aW9uLmVtcHR5KCk7ZWxzZSBpZih3aW5kb3cuZ2V0U2VsZWN0aW9uKXt2YXIgdD13aW5kb3cuZ2V0U2VsZWN0aW9uKCk7dHJ5e3QucmVtb3ZlQWxsUmFuZ2VzKCksdC5jb2xsYXBzZSgpfWNhdGNoKGkpe319fSkub24oXCJtb3VzZWRvd24uanN0cmVlXCIsZS5wcm94eShmdW5jdGlvbihlKXtlLnRhcmdldD09PXRoaXMuZWxlbWVudFswXSYmKGUucHJldmVudERlZmF1bHQoKSxyPStuZXcgRGF0ZSl9LHRoaXMpKS5vbihcIm1vdXNlZG93bi5qc3RyZWVcIixcIi5qc3RyZWUtb2NsXCIsZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpfSkub24oXCJjbGljay5qc3RyZWVcIixcIi5qc3RyZWUtb2NsXCIsZS5wcm94eShmdW5jdGlvbihlKXt0aGlzLnRvZ2dsZV9ub2RlKGUudGFyZ2V0KX0sdGhpcykpLm9uKFwiZGJsY2xpY2suanN0cmVlXCIsXCIuanN0cmVlLWFuY2hvclwiLGUucHJveHkoZnVuY3Rpb24oZSl7cmV0dXJuIGUudGFyZ2V0LnRhZ05hbWUmJlwiaW5wdXRcIj09PWUudGFyZ2V0LnRhZ05hbWUudG9Mb3dlckNhc2UoKT8hMDp2b2lkKHRoaXMuc2V0dGluZ3MuY29yZS5kYmxjbGlja190b2dnbGUmJnRoaXMudG9nZ2xlX25vZGUoZS50YXJnZXQpKX0sdGhpcykpLm9uKFwiY2xpY2suanN0cmVlXCIsXCIuanN0cmVlLWFuY2hvclwiLGUucHJveHkoZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpLHQuY3VycmVudFRhcmdldCE9PWwuYWN0aXZlRWxlbWVudCYmZSh0LmN1cnJlbnRUYXJnZXQpLmZvY3VzKCksdGhpcy5hY3RpdmF0ZV9ub2RlKHQuY3VycmVudFRhcmdldCx0KX0sdGhpcykpLm9uKFwia2V5ZG93bi5qc3RyZWVcIixcIi5qc3RyZWUtYW5jaG9yXCIsZS5wcm94eShmdW5jdGlvbih0KXtpZih0LnRhcmdldC50YWdOYW1lJiZcImlucHV0XCI9PT10LnRhcmdldC50YWdOYW1lLnRvTG93ZXJDYXNlKCkpcmV0dXJuITA7aWYoMzIhPT10LndoaWNoJiYxMyE9PXQud2hpY2gmJih0LnNoaWZ0S2V5fHx0LmN0cmxLZXl8fHQuYWx0S2V5fHx0Lm1ldGFLZXkpKXJldHVybiEwO3ZhciBpPW51bGw7c3dpdGNoKHRoaXMuX2RhdGEuY29yZS5ydGwmJigzNz09PXQud2hpY2g/dC53aGljaD0zOTozOT09PXQud2hpY2gmJih0LndoaWNoPTM3KSksdC53aGljaCl7Y2FzZSAzMjp0LmN0cmxLZXkmJih0LnR5cGU9XCJjbGlja1wiLGUodC5jdXJyZW50VGFyZ2V0KS50cmlnZ2VyKHQpKTticmVhaztjYXNlIDEzOnQudHlwZT1cImNsaWNrXCIsZSh0LmN1cnJlbnRUYXJnZXQpLnRyaWdnZXIodCk7YnJlYWs7Y2FzZSAzNzp0LnByZXZlbnREZWZhdWx0KCksdGhpcy5pc19vcGVuKHQuY3VycmVudFRhcmdldCk/dGhpcy5jbG9zZV9ub2RlKHQuY3VycmVudFRhcmdldCk6KGk9dGhpcy5nZXRfcGFyZW50KHQuY3VycmVudFRhcmdldCksaSYmaS5pZCE9PWUuanN0cmVlLnJvb3QmJnRoaXMuZ2V0X25vZGUoaSwhMCkuY2hpbGRyZW4oXCIuanN0cmVlLWFuY2hvclwiKS5mb2N1cygpKTticmVhaztjYXNlIDM4OnQucHJldmVudERlZmF1bHQoKSxpPXRoaXMuZ2V0X3ByZXZfZG9tKHQuY3VycmVudFRhcmdldCksaSYmaS5sZW5ndGgmJmkuY2hpbGRyZW4oXCIuanN0cmVlLWFuY2hvclwiKS5mb2N1cygpO2JyZWFrO2Nhc2UgMzk6dC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaXNfY2xvc2VkKHQuY3VycmVudFRhcmdldCk/dGhpcy5vcGVuX25vZGUodC5jdXJyZW50VGFyZ2V0LGZ1bmN0aW9uKGUpe3RoaXMuZ2V0X25vZGUoZSwhMCkuY2hpbGRyZW4oXCIuanN0cmVlLWFuY2hvclwiKS5mb2N1cygpfSk6dGhpcy5pc19vcGVuKHQuY3VycmVudFRhcmdldCkmJihpPXRoaXMuZ2V0X25vZGUodC5jdXJyZW50VGFyZ2V0LCEwKS5jaGlsZHJlbihcIi5qc3RyZWUtY2hpbGRyZW5cIilbMF0saSYmZSh0aGlzLl9maXJzdENoaWxkKGkpKS5jaGlsZHJlbihcIi5qc3RyZWUtYW5jaG9yXCIpLmZvY3VzKCkpO2JyZWFrO2Nhc2UgNDA6dC5wcmV2ZW50RGVmYXVsdCgpLGk9dGhpcy5nZXRfbmV4dF9kb20odC5jdXJyZW50VGFyZ2V0KSxpJiZpLmxlbmd0aCYmaS5jaGlsZHJlbihcIi5qc3RyZWUtYW5jaG9yXCIpLmZvY3VzKCk7YnJlYWs7Y2FzZSAxMDY6dGhpcy5vcGVuX2FsbCgpO2JyZWFrO2Nhc2UgMzY6dC5wcmV2ZW50RGVmYXVsdCgpLGk9dGhpcy5fZmlyc3RDaGlsZCh0aGlzLmdldF9jb250YWluZXJfdWwoKVswXSksaSYmZShpKS5jaGlsZHJlbihcIi5qc3RyZWUtYW5jaG9yXCIpLmZpbHRlcihcIjp2aXNpYmxlXCIpLmZvY3VzKCk7YnJlYWs7Y2FzZSAzNTp0LnByZXZlbnREZWZhdWx0KCksdGhpcy5lbGVtZW50LmZpbmQoXCIuanN0cmVlLWFuY2hvclwiKS5maWx0ZXIoXCI6dmlzaWJsZVwiKS5sYXN0KCkuZm9jdXMoKX19LHRoaXMpKS5vbihcImxvYWRfbm9kZS5qc3RyZWVcIixlLnByb3h5KGZ1bmN0aW9uKHQsaSl7aS5zdGF0dXMmJihpLm5vZGUuaWQhPT1lLmpzdHJlZS5yb290fHx0aGlzLl9kYXRhLmNvcmUubG9hZGVkfHwodGhpcy5fZGF0YS5jb3JlLmxvYWRlZD0hMCx0aGlzLl9maXJzdENoaWxkKHRoaXMuZ2V0X2NvbnRhaW5lcl91bCgpWzBdKSYmdGhpcy5lbGVtZW50LmF0dHIoXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIix0aGlzLl9maXJzdENoaWxkKHRoaXMuZ2V0X2NvbnRhaW5lcl91bCgpWzBdKS5pZCksdGhpcy50cmlnZ2VyKFwibG9hZGVkXCIpKSx0aGlzLl9kYXRhLmNvcmUucmVhZHl8fHNldFRpbWVvdXQoZS5wcm94eShmdW5jdGlvbigpe2lmKHRoaXMuZWxlbWVudCYmIXRoaXMuZ2V0X2NvbnRhaW5lcl91bCgpLmZpbmQoXCIuanN0cmVlLWxvYWRpbmdcIikubGVuZ3RoKXtpZih0aGlzLl9kYXRhLmNvcmUucmVhZHk9ITAsdGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLmxlbmd0aCl7aWYodGhpcy5zZXR0aW5ncy5jb3JlLmV4cGFuZF9zZWxlY3RlZF9vbmxvYWQpe3ZhciB0LGkscj1bXTtmb3IodD0wLGk9dGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLmxlbmd0aDtpPnQ7dCsrKXI9ci5jb25jYXQodGhpcy5fbW9kZWwuZGF0YVt0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWRbdF1dLnBhcmVudHMpO2ZvcihyPWUudmFrYXRhLmFycmF5X3VuaXF1ZShyKSx0PTAsaT1yLmxlbmd0aDtpPnQ7dCsrKXRoaXMub3Blbl9ub2RlKHJbdF0sITEsMCl9dGhpcy50cmlnZ2VyKFwiY2hhbmdlZFwiLHthY3Rpb246XCJyZWFkeVwiLHNlbGVjdGVkOnRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZH0pfXRoaXMudHJpZ2dlcihcInJlYWR5XCIpfX0sdGhpcyksMCkpfSx0aGlzKSkub24oXCJrZXlwcmVzcy5qc3RyZWVcIixlLnByb3h5KGZ1bmN0aW9uKHIpe2lmKHIudGFyZ2V0LnRhZ05hbWUmJlwiaW5wdXRcIj09PXIudGFyZ2V0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSlyZXR1cm4hMDtpJiZjbGVhclRpbWVvdXQoaSksaT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dD1cIlwifSw1MDApO3ZhciBzPVN0cmluZy5mcm9tQ2hhckNvZGUoci53aGljaCkudG9Mb3dlckNhc2UoKSxuPXRoaXMuZWxlbWVudC5maW5kKFwiLmpzdHJlZS1hbmNob3JcIikuZmlsdGVyKFwiOnZpc2libGVcIiksYT1uLmluZGV4KGwuYWN0aXZlRWxlbWVudCl8fDAsbz0hMTtpZih0Kz1zLHQubGVuZ3RoPjEpe2lmKG4uc2xpY2UoYSkuZWFjaChlLnByb3h5KGZ1bmN0aW9uKGkscil7cmV0dXJuIDA9PT1lKHIpLnRleHQoKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YodCk/KGUocikuZm9jdXMoKSxvPSEwLCExKTp2b2lkIDB9LHRoaXMpKSxvKXJldHVybjtpZihuLnNsaWNlKDAsYSkuZWFjaChlLnByb3h5KGZ1bmN0aW9uKGkscil7cmV0dXJuIDA9PT1lKHIpLnRleHQoKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YodCk/KGUocikuZm9jdXMoKSxvPSEwLCExKTp2b2lkIDB9LHRoaXMpKSxvKXJldHVybn1pZihuZXcgUmVnRXhwKFwiXlwiK3MucmVwbGFjZSgvWy1cXC9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLFwiXFxcXCQmXCIpK1wiKyRcIikudGVzdCh0KSl7aWYobi5zbGljZShhKzEpLmVhY2goZS5wcm94eShmdW5jdGlvbih0LGkpe3JldHVybiBlKGkpLnRleHQoKS50b0xvd2VyQ2FzZSgpLmNoYXJBdCgwKT09PXM/KGUoaSkuZm9jdXMoKSxvPSEwLCExKTp2b2lkIDB9LHRoaXMpKSxvKXJldHVybjtpZihuLnNsaWNlKDAsYSsxKS5lYWNoKGUucHJveHkoZnVuY3Rpb24odCxpKXtyZXR1cm4gZShpKS50ZXh0KCkudG9Mb3dlckNhc2UoKS5jaGFyQXQoMCk9PT1zPyhlKGkpLmZvY3VzKCksbz0hMCwhMSk6dm9pZCAwfSx0aGlzKSksbylyZXR1cm59fSx0aGlzKSkub24oXCJpbml0LmpzdHJlZVwiLGUucHJveHkoZnVuY3Rpb24oKXt2YXIgZT10aGlzLnNldHRpbmdzLmNvcmUudGhlbWVzO3RoaXMuX2RhdGEuY29yZS50aGVtZXMuZG90cz1lLmRvdHMsdGhpcy5fZGF0YS5jb3JlLnRoZW1lcy5zdHJpcGVzPWUuc3RyaXBlcyx0aGlzLl9kYXRhLmNvcmUudGhlbWVzLmljb25zPWUuaWNvbnMsdGhpcy5zZXRfdGhlbWUoZS5uYW1lfHxcImRlZmF1bHRcIixlLnVybCksdGhpcy5zZXRfdGhlbWVfdmFyaWFudChlLnZhcmlhbnQpfSx0aGlzKSkub24oXCJsb2FkaW5nLmpzdHJlZVwiLGUucHJveHkoZnVuY3Rpb24oKXt0aGlzW3RoaXMuX2RhdGEuY29yZS50aGVtZXMuZG90cz9cInNob3dfZG90c1wiOlwiaGlkZV9kb3RzXCJdKCksdGhpc1t0aGlzLl9kYXRhLmNvcmUudGhlbWVzLmljb25zP1wic2hvd19pY29uc1wiOlwiaGlkZV9pY29uc1wiXSgpLHRoaXNbdGhpcy5fZGF0YS5jb3JlLnRoZW1lcy5zdHJpcGVzP1wic2hvd19zdHJpcGVzXCI6XCJoaWRlX3N0cmlwZXNcIl0oKX0sdGhpcykpLm9uKFwiYmx1ci5qc3RyZWVcIixcIi5qc3RyZWUtYW5jaG9yXCIsZS5wcm94eShmdW5jdGlvbih0KXt0aGlzLl9kYXRhLmNvcmUuZm9jdXNlZD1udWxsLGUodC5jdXJyZW50VGFyZ2V0KS5maWx0ZXIoXCIuanN0cmVlLWhvdmVyZWRcIikubW91c2VsZWF2ZSgpLHRoaXMuZWxlbWVudC5hdHRyKFwidGFiaW5kZXhcIixcIjBcIil9LHRoaXMpKS5vbihcImZvY3VzLmpzdHJlZVwiLFwiLmpzdHJlZS1hbmNob3JcIixlLnByb3h5KGZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuZ2V0X25vZGUodC5jdXJyZW50VGFyZ2V0KTtpJiZpLmlkJiYodGhpcy5fZGF0YS5jb3JlLmZvY3VzZWQ9aS5pZCksdGhpcy5lbGVtZW50LmZpbmQoXCIuanN0cmVlLWhvdmVyZWRcIikubm90KHQuY3VycmVudFRhcmdldCkubW91c2VsZWF2ZSgpLGUodC5jdXJyZW50VGFyZ2V0KS5tb3VzZWVudGVyKCksdGhpcy5lbGVtZW50LmF0dHIoXCJ0YWJpbmRleFwiLFwiLTFcIil9LHRoaXMpKS5vbihcImZvY3VzLmpzdHJlZVwiLGUucHJveHkoZnVuY3Rpb24oKXtpZigrbmV3IERhdGUtcj41MDAmJiF0aGlzLl9kYXRhLmNvcmUuZm9jdXNlZCl7cj0wO3ZhciBlPXRoaXMuZ2V0X25vZGUodGhpcy5lbGVtZW50LmF0dHIoXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIiksITApO2UmJmUuZmluZChcIj4gLmpzdHJlZS1hbmNob3JcIikuZm9jdXMoKX19LHRoaXMpKS5vbihcIm1vdXNlZW50ZXIuanN0cmVlXCIsXCIuanN0cmVlLWFuY2hvclwiLGUucHJveHkoZnVuY3Rpb24oZSl7dGhpcy5ob3Zlcl9ub2RlKGUuY3VycmVudFRhcmdldCl9LHRoaXMpKS5vbihcIm1vdXNlbGVhdmUuanN0cmVlXCIsXCIuanN0cmVlLWFuY2hvclwiLGUucHJveHkoZnVuY3Rpb24oZSl7dGhpcy5kZWhvdmVyX25vZGUoZS5jdXJyZW50VGFyZ2V0KX0sdGhpcykpfSx1bmJpbmQ6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQub2ZmKFwiLmpzdHJlZVwiKSxlKGwpLm9mZihcIi5qc3RyZWUtXCIrdGhpcy5faWQpfSx0cmlnZ2VyOmZ1bmN0aW9uKGUsdCl7dHx8KHQ9e30pLHQuaW5zdGFuY2U9dGhpcyx0aGlzLmVsZW1lbnQudHJpZ2dlckhhbmRsZXIoZS5yZXBsYWNlKFwiLmpzdHJlZVwiLFwiXCIpK1wiLmpzdHJlZVwiLHQpfSxnZXRfY29udGFpbmVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxlbWVudH0sZ2V0X2NvbnRhaW5lcl91bDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnQuY2hpbGRyZW4oXCIuanN0cmVlLWNoaWxkcmVuXCIpLmZpcnN0KCl9LGdldF9zdHJpbmc6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5zZXR0aW5ncy5jb3JlLnN0cmluZ3M7cmV0dXJuIGUuaXNGdW5jdGlvbihpKT9pLmNhbGwodGhpcyx0KTppJiZpW3RdP2lbdF06dH0sX2ZpcnN0Q2hpbGQ6ZnVuY3Rpb24oZSl7Zm9yKGU9ZT9lLmZpcnN0Q2hpbGQ6bnVsbDtudWxsIT09ZSYmMSE9PWUubm9kZVR5cGU7KWU9ZS5uZXh0U2libGluZztyZXR1cm4gZX0sX25leHRTaWJsaW5nOmZ1bmN0aW9uKGUpe2ZvcihlPWU/ZS5uZXh0U2libGluZzpudWxsO251bGwhPT1lJiYxIT09ZS5ub2RlVHlwZTspZT1lLm5leHRTaWJsaW5nO3JldHVybiBlfSxfcHJldmlvdXNTaWJsaW5nOmZ1bmN0aW9uKGUpe2ZvcihlPWU/ZS5wcmV2aW91c1NpYmxpbmc6bnVsbDtudWxsIT09ZSYmMSE9PWUubm9kZVR5cGU7KWU9ZS5wcmV2aW91c1NpYmxpbmc7cmV0dXJuIGV9LGdldF9ub2RlOmZ1bmN0aW9uKHQsaSl7dCYmdC5pZCYmKHQ9dC5pZCk7dmFyIHI7dHJ5e2lmKHRoaXMuX21vZGVsLmRhdGFbdF0pdD10aGlzLl9tb2RlbC5kYXRhW3RdO2Vsc2UgaWYoXCJzdHJpbmdcIj09dHlwZW9mIHQmJnRoaXMuX21vZGVsLmRhdGFbdC5yZXBsYWNlKC9eIy8sXCJcIildKXQ9dGhpcy5fbW9kZWwuZGF0YVt0LnJlcGxhY2UoL14jLyxcIlwiKV07ZWxzZSBpZihcInN0cmluZ1wiPT10eXBlb2YgdCYmKHI9ZShcIiNcIit0LnJlcGxhY2UoZS5qc3RyZWUuaWRyZWdleCxcIlxcXFwkJlwiKSx0aGlzLmVsZW1lbnQpKS5sZW5ndGgmJnRoaXMuX21vZGVsLmRhdGFbci5jbG9zZXN0KFwiLmpzdHJlZS1ub2RlXCIpLmF0dHIoXCJpZFwiKV0pdD10aGlzLl9tb2RlbC5kYXRhW3IuY2xvc2VzdChcIi5qc3RyZWUtbm9kZVwiKS5hdHRyKFwiaWRcIildO2Vsc2UgaWYoKHI9ZSh0LHRoaXMuZWxlbWVudCkpLmxlbmd0aCYmdGhpcy5fbW9kZWwuZGF0YVtyLmNsb3Nlc3QoXCIuanN0cmVlLW5vZGVcIikuYXR0cihcImlkXCIpXSl0PXRoaXMuX21vZGVsLmRhdGFbci5jbG9zZXN0KFwiLmpzdHJlZS1ub2RlXCIpLmF0dHIoXCJpZFwiKV07ZWxzZXtpZighKHI9ZSh0LHRoaXMuZWxlbWVudCkpLmxlbmd0aHx8IXIuaGFzQ2xhc3MoXCJqc3RyZWVcIikpcmV0dXJuITE7dD10aGlzLl9tb2RlbC5kYXRhW2UuanN0cmVlLnJvb3RdfXJldHVybiBpJiYodD10LmlkPT09ZS5qc3RyZWUucm9vdD90aGlzLmVsZW1lbnQ6ZShcIiNcIit0LmlkLnJlcGxhY2UoZS5qc3RyZWUuaWRyZWdleCxcIlxcXFwkJlwiKSx0aGlzLmVsZW1lbnQpKSx0fWNhdGNoKHMpe3JldHVybiExfX0sZ2V0X3BhdGg6ZnVuY3Rpb24odCxpLHIpe2lmKHQ9dC5wYXJlbnRzP3Q6dGhpcy5nZXRfbm9kZSh0KSwhdHx8dC5pZD09PWUuanN0cmVlLnJvb3R8fCF0LnBhcmVudHMpcmV0dXJuITE7dmFyIHMsbixhPVtdO2ZvcihhLnB1c2gocj90LmlkOnQudGV4dCkscz0wLG49dC5wYXJlbnRzLmxlbmd0aDtuPnM7cysrKWEucHVzaChyP3QucGFyZW50c1tzXTp0aGlzLmdldF90ZXh0KHQucGFyZW50c1tzXSkpO3JldHVybiBhPWEucmV2ZXJzZSgpLnNsaWNlKDEpLGk/YS5qb2luKGkpOmF9LGdldF9uZXh0X2RvbTpmdW5jdGlvbih0LGkpe3ZhciByO2lmKHQ9dGhpcy5nZXRfbm9kZSh0LCEwKSx0WzBdPT09dGhpcy5lbGVtZW50WzBdKXtmb3Iocj10aGlzLl9maXJzdENoaWxkKHRoaXMuZ2V0X2NvbnRhaW5lcl91bCgpWzBdKTtyJiYwPT09ci5vZmZzZXRIZWlnaHQ7KXI9dGhpcy5fbmV4dFNpYmxpbmcocik7cmV0dXJuIHI/ZShyKTohMX1pZighdHx8IXQubGVuZ3RoKXJldHVybiExO2lmKGkpe3I9dFswXTtkbyByPXRoaXMuX25leHRTaWJsaW5nKHIpO3doaWxlKHImJjA9PT1yLm9mZnNldEhlaWdodCk7cmV0dXJuIHI/ZShyKTohMX1pZih0Lmhhc0NsYXNzKFwianN0cmVlLW9wZW5cIikpe2ZvcihyPXRoaXMuX2ZpcnN0Q2hpbGQodC5jaGlsZHJlbihcIi5qc3RyZWUtY2hpbGRyZW5cIilbMF0pO3ImJjA9PT1yLm9mZnNldEhlaWdodDspcj10aGlzLl9uZXh0U2libGluZyhyKTtpZihudWxsIT09cilyZXR1cm4gZShyKX1yPXRbMF07ZG8gcj10aGlzLl9uZXh0U2libGluZyhyKTt3aGlsZShyJiYwPT09ci5vZmZzZXRIZWlnaHQpO3JldHVybiBudWxsIT09cj9lKHIpOnQucGFyZW50c1VudGlsKFwiLmpzdHJlZVwiLFwiLmpzdHJlZS1ub2RlXCIpLm5leHRBbGwoXCIuanN0cmVlLW5vZGU6dmlzaWJsZVwiKS5maXJzdCgpfSxnZXRfcHJldl9kb206ZnVuY3Rpb24odCxpKXt2YXIgcjtpZih0PXRoaXMuZ2V0X25vZGUodCwhMCksdFswXT09PXRoaXMuZWxlbWVudFswXSl7Zm9yKHI9dGhpcy5nZXRfY29udGFpbmVyX3VsKClbMF0ubGFzdENoaWxkO3ImJjA9PT1yLm9mZnNldEhlaWdodDspcj10aGlzLl9wcmV2aW91c1NpYmxpbmcocik7cmV0dXJuIHI/ZShyKTohMX1pZighdHx8IXQubGVuZ3RoKXJldHVybiExO2lmKGkpe3I9dFswXTtkbyByPXRoaXMuX3ByZXZpb3VzU2libGluZyhyKTt3aGlsZShyJiYwPT09ci5vZmZzZXRIZWlnaHQpO3JldHVybiByP2Uocik6ITF9cj10WzBdO2RvIHI9dGhpcy5fcHJldmlvdXNTaWJsaW5nKHIpO3doaWxlKHImJjA9PT1yLm9mZnNldEhlaWdodCk7aWYobnVsbCE9PXIpe2Zvcih0PWUocik7dC5oYXNDbGFzcyhcImpzdHJlZS1vcGVuXCIpOyl0PXQuY2hpbGRyZW4oXCIuanN0cmVlLWNoaWxkcmVuXCIpLmZpcnN0KCkuY2hpbGRyZW4oXCIuanN0cmVlLW5vZGU6dmlzaWJsZTpsYXN0XCIpO3JldHVybiB0fXJldHVybiByPXRbMF0ucGFyZW50Tm9kZS5wYXJlbnROb2RlLHImJnIuY2xhc3NOYW1lJiYtMSE9PXIuY2xhc3NOYW1lLmluZGV4T2YoXCJqc3RyZWUtbm9kZVwiKT9lKHIpOiExfSxnZXRfcGFyZW50OmZ1bmN0aW9uKHQpe3JldHVybiB0PXRoaXMuZ2V0X25vZGUodCksdCYmdC5pZCE9PWUuanN0cmVlLnJvb3Q/dC5wYXJlbnQ6ITF9LGdldF9jaGlsZHJlbl9kb206ZnVuY3Rpb24oZSl7cmV0dXJuIGU9dGhpcy5nZXRfbm9kZShlLCEwKSxlWzBdPT09dGhpcy5lbGVtZW50WzBdP3RoaXMuZ2V0X2NvbnRhaW5lcl91bCgpLmNoaWxkcmVuKFwiLmpzdHJlZS1ub2RlXCIpOmUmJmUubGVuZ3RoP2UuY2hpbGRyZW4oXCIuanN0cmVlLWNoaWxkcmVuXCIpLmNoaWxkcmVuKFwiLmpzdHJlZS1ub2RlXCIpOiExfSxpc19wYXJlbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9dGhpcy5nZXRfbm9kZShlKSxlJiYoZS5zdGF0ZS5sb2FkZWQ9PT0hMXx8ZS5jaGlsZHJlbi5sZW5ndGg+MCl9LGlzX2xvYWRlZDpmdW5jdGlvbihlKXtyZXR1cm4gZT10aGlzLmdldF9ub2RlKGUpLGUmJmUuc3RhdGUubG9hZGVkfSxpc19sb2FkaW5nOmZ1bmN0aW9uKGUpe3JldHVybiBlPXRoaXMuZ2V0X25vZGUoZSksZSYmZS5zdGF0ZSYmZS5zdGF0ZS5sb2FkaW5nfSxpc19vcGVuOmZ1bmN0aW9uKGUpe3JldHVybiBlPXRoaXMuZ2V0X25vZGUoZSksZSYmZS5zdGF0ZS5vcGVuZWR9LGlzX2Nsb3NlZDpmdW5jdGlvbihlKXtyZXR1cm4gZT10aGlzLmdldF9ub2RlKGUpLGUmJnRoaXMuaXNfcGFyZW50KGUpJiYhZS5zdGF0ZS5vcGVuZWR9LGlzX2xlYWY6ZnVuY3Rpb24oZSl7cmV0dXJuIXRoaXMuaXNfcGFyZW50KGUpfSxsb2FkX25vZGU6ZnVuY3Rpb24odCxpKXt2YXIgcixzLG4sYSxvO2lmKGUuaXNBcnJheSh0KSlyZXR1cm4gdGhpcy5fbG9hZF9ub2Rlcyh0LnNsaWNlKCksaSksITA7aWYodD10aGlzLmdldF9ub2RlKHQpLCF0KXJldHVybiBpJiZpLmNhbGwodGhpcyx0LCExKSwhMTtpZih0LnN0YXRlLmxvYWRlZCl7Zm9yKHQuc3RhdGUubG9hZGVkPSExLHI9MCxzPXQuY2hpbGRyZW5fZC5sZW5ndGg7cz5yO3IrKyl7Zm9yKG49MCxhPXQucGFyZW50cy5sZW5ndGg7YT5uO24rKyl0aGlzLl9tb2RlbC5kYXRhW3QucGFyZW50c1tuXV0uY2hpbGRyZW5fZD1lLnZha2F0YS5hcnJheV9yZW1vdmVfaXRlbSh0aGlzLl9tb2RlbC5kYXRhW3QucGFyZW50c1tuXV0uY2hpbGRyZW5fZCx0LmNoaWxkcmVuX2Rbcl0pO3RoaXMuX21vZGVsLmRhdGFbdC5jaGlsZHJlbl9kW3JdXS5zdGF0ZS5zZWxlY3RlZCYmKG89ITAsdGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkPWUudmFrYXRhLmFycmF5X3JlbW92ZV9pdGVtKHRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZCx0LmNoaWxkcmVuX2Rbcl0pKSxkZWxldGUgdGhpcy5fbW9kZWwuZGF0YVt0LmNoaWxkcmVuX2Rbcl1dfXQuY2hpbGRyZW49W10sdC5jaGlsZHJlbl9kPVtdLG8mJnRoaXMudHJpZ2dlcihcImNoYW5nZWRcIix7YWN0aW9uOlwibG9hZF9ub2RlXCIsbm9kZTp0LHNlbGVjdGVkOnRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZH0pfXJldHVybiB0LnN0YXRlLmZhaWxlZD0hMSx0LnN0YXRlLmxvYWRpbmc9ITAsdGhpcy5nZXRfbm9kZSh0LCEwKS5hZGRDbGFzcyhcImpzdHJlZS1sb2FkaW5nXCIpLmF0dHIoXCJhcmlhLWJ1c3lcIiwhMCksdGhpcy5fbG9hZF9ub2RlKHQsZS5wcm94eShmdW5jdGlvbihlKXt0PXRoaXMuX21vZGVsLmRhdGFbdC5pZF0sdC5zdGF0ZS5sb2FkaW5nPSExLHQuc3RhdGUubG9hZGVkPWUsdC5zdGF0ZS5mYWlsZWQ9IXQuc3RhdGUubG9hZGVkO3ZhciByPXRoaXMuZ2V0X25vZGUodCwhMCkscz0wLG49MCxhPXRoaXMuX21vZGVsLmRhdGEsbz0hMTtmb3Iocz0wLG49dC5jaGlsZHJlbi5sZW5ndGg7bj5zO3MrKylpZihhW3QuY2hpbGRyZW5bc11dJiYhYVt0LmNoaWxkcmVuW3NdXS5zdGF0ZS5oaWRkZW4pe289ITA7YnJlYWt9dC5zdGF0ZS5sb2FkZWQmJiFvJiZyJiZyLmxlbmd0aCYmIXIuaGFzQ2xhc3MoXCJqc3RyZWUtbGVhZlwiKSYmci5yZW1vdmVDbGFzcyhcImpzdHJlZS1jbG9zZWQganN0cmVlLW9wZW5cIikuYWRkQ2xhc3MoXCJqc3RyZWUtbGVhZlwiKSxyLnJlbW92ZUNsYXNzKFwianN0cmVlLWxvYWRpbmdcIikuYXR0cihcImFyaWEtYnVzeVwiLCExKSx0aGlzLnRyaWdnZXIoXCJsb2FkX25vZGVcIix7bm9kZTp0LHN0YXR1czplfSksaSYmaS5jYWxsKHRoaXMsdCxlKX0sdGhpcykpLCEwfSxfbG9hZF9ub2RlczpmdW5jdGlvbihlLHQsaSl7dmFyIHIscyxuPSEwLGE9ZnVuY3Rpb24oKXt0aGlzLl9sb2FkX25vZGVzKGUsdCwhMCl9LG89dGhpcy5fbW9kZWwuZGF0YSxkPVtdO2ZvcihyPTAscz1lLmxlbmd0aDtzPnI7cisrKSFvW2Vbcl1dfHwob1tlW3JdXS5zdGF0ZS5sb2FkZWR8fG9bZVtyXV0uc3RhdGUuZmFpbGVkKSYmaXx8KHRoaXMuaXNfbG9hZGluZyhlW3JdKXx8dGhpcy5sb2FkX25vZGUoZVtyXSxhKSxuPSExKTtpZihuKXtmb3Iocj0wLHM9ZS5sZW5ndGg7cz5yO3IrKylvW2Vbcl1dJiZvW2Vbcl1dLnN0YXRlLmxvYWRlZCYmZC5wdXNoKGVbcl0pO3QmJiF0LmRvbmUmJih0LmNhbGwodGhpcyxkKSx0LmRvbmU9ITApfX0sbG9hZF9hbGw6ZnVuY3Rpb24odCxpKXtpZih0fHwodD1lLmpzdHJlZS5yb290KSx0PXRoaXMuZ2V0X25vZGUodCksIXQpcmV0dXJuITE7dmFyIHIscyxuPVtdLGE9dGhpcy5fbW9kZWwuZGF0YSxvPWFbdC5pZF0uY2hpbGRyZW5fZDtmb3IodC5zdGF0ZSYmIXQuc3RhdGUubG9hZGVkJiZuLnB1c2godC5pZCkscj0wLHM9by5sZW5ndGg7cz5yO3IrKylhW29bcl1dJiZhW29bcl1dLnN0YXRlJiYhYVtvW3JdXS5zdGF0ZS5sb2FkZWQmJm4ucHVzaChvW3JdKTtuLmxlbmd0aD90aGlzLl9sb2FkX25vZGVzKG4sZnVuY3Rpb24oKXt0aGlzLmxvYWRfYWxsKHQsaSl9KTooaSYmaS5jYWxsKHRoaXMsdCksdGhpcy50cmlnZ2VyKFwibG9hZF9hbGxcIix7bm9kZTp0fSkpfSxfbG9hZF9ub2RlOmZ1bmN0aW9uKHQsaSl7dmFyIHIscz10aGlzLnNldHRpbmdzLmNvcmUuZGF0YTtyZXR1cm4gcz9lLmlzRnVuY3Rpb24ocyk/cy5jYWxsKHRoaXMsdCxlLnByb3h5KGZ1bmN0aW9uKHIpe3I9PT0hMSYmaS5jYWxsKHRoaXMsITEpLHRoaXNbXCJzdHJpbmdcIj09dHlwZW9mIHI/XCJfYXBwZW5kX2h0bWxfZGF0YVwiOlwiX2FwcGVuZF9qc29uX2RhdGFcIl0odCxcInN0cmluZ1wiPT10eXBlb2Ygcj9lKGUucGFyc2VIVE1MKHIpKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gMyE9PXRoaXMubm9kZVR5cGV9KTpyLGZ1bmN0aW9uKGUpe2kuY2FsbCh0aGlzLGUpfSl9LHRoaXMpKTpcIm9iamVjdFwiPT10eXBlb2Ygcz9zLnVybD8ocz1lLmV4dGVuZCghMCx7fSxzKSxlLmlzRnVuY3Rpb24ocy51cmwpJiYocy51cmw9cy51cmwuY2FsbCh0aGlzLHQpKSxlLmlzRnVuY3Rpb24ocy5kYXRhKSYmKHMuZGF0YT1zLmRhdGEuY2FsbCh0aGlzLHQpKSxlLmFqYXgocykuZG9uZShlLnByb3h5KGZ1bmN0aW9uKHIscyxuKXt2YXIgYT1uLmdldFJlc3BvbnNlSGVhZGVyKFwiQ29udGVudC1UeXBlXCIpO3JldHVybiBhJiYtMSE9PWEuaW5kZXhPZihcImpzb25cIil8fFwib2JqZWN0XCI9PXR5cGVvZiByP3RoaXMuX2FwcGVuZF9qc29uX2RhdGEodCxyLGZ1bmN0aW9uKGUpe2kuY2FsbCh0aGlzLGUpfSk6YSYmLTEhPT1hLmluZGV4T2YoXCJodG1sXCIpfHxcInN0cmluZ1wiPT10eXBlb2Ygcj90aGlzLl9hcHBlbmRfaHRtbF9kYXRhKHQsZShlLnBhcnNlSFRNTChyKSkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIDMhPT10aGlzLm5vZGVUeXBlfSksZnVuY3Rpb24oZSl7aS5jYWxsKHRoaXMsZSl9KToodGhpcy5fZGF0YS5jb3JlLmxhc3RfZXJyb3I9e2Vycm9yOlwiYWpheFwiLHBsdWdpbjpcImNvcmVcIixpZDpcImNvcmVfMDRcIixyZWFzb246XCJDb3VsZCBub3QgbG9hZCBub2RlXCIsZGF0YTpKU09OLnN0cmluZ2lmeSh7aWQ6dC5pZCx4aHI6bn0pfSx0aGlzLnNldHRpbmdzLmNvcmUuZXJyb3IuY2FsbCh0aGlzLHRoaXMuX2RhdGEuY29yZS5sYXN0X2Vycm9yKSxpLmNhbGwodGhpcywhMSkpfSx0aGlzKSkuZmFpbChlLnByb3h5KGZ1bmN0aW9uKGUpe2kuY2FsbCh0aGlzLCExKSx0aGlzLl9kYXRhLmNvcmUubGFzdF9lcnJvcj17ZXJyb3I6XCJhamF4XCIscGx1Z2luOlwiY29yZVwiLGlkOlwiY29yZV8wNFwiLHJlYXNvbjpcIkNvdWxkIG5vdCBsb2FkIG5vZGVcIixkYXRhOkpTT04uc3RyaW5naWZ5KHtpZDp0LmlkLHhocjplfSl9LHRoaXMuc2V0dGluZ3MuY29yZS5lcnJvci5jYWxsKHRoaXMsdGhpcy5fZGF0YS5jb3JlLmxhc3RfZXJyb3IpfSx0aGlzKSkpOihyPWUuaXNBcnJheShzKXx8ZS5pc1BsYWluT2JqZWN0KHMpP0pTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocykpOnMsdC5pZD09PWUuanN0cmVlLnJvb3Q/dGhpcy5fYXBwZW5kX2pzb25fZGF0YSh0LHIsZnVuY3Rpb24oZSl7aS5jYWxsKHRoaXMsZSl9KToodGhpcy5fZGF0YS5jb3JlLmxhc3RfZXJyb3I9e2Vycm9yOlwibm9kYXRhXCIscGx1Z2luOlwiY29yZVwiLGlkOlwiY29yZV8wNVwiLHJlYXNvbjpcIkNvdWxkIG5vdCBsb2FkIG5vZGVcIixkYXRhOkpTT04uc3RyaW5naWZ5KHtpZDp0LmlkfSl9LHRoaXMuc2V0dGluZ3MuY29yZS5lcnJvci5jYWxsKHRoaXMsdGhpcy5fZGF0YS5jb3JlLmxhc3RfZXJyb3IpLGkuY2FsbCh0aGlzLCExKSkpOlwic3RyaW5nXCI9PXR5cGVvZiBzP3QuaWQ9PT1lLmpzdHJlZS5yb290P3RoaXMuX2FwcGVuZF9odG1sX2RhdGEodCxlKGUucGFyc2VIVE1MKHMpKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gMyE9PXRoaXMubm9kZVR5cGV9KSxmdW5jdGlvbihlKXtpLmNhbGwodGhpcyxlKX0pOih0aGlzLl9kYXRhLmNvcmUubGFzdF9lcnJvcj17ZXJyb3I6XCJub2RhdGFcIixwbHVnaW46XCJjb3JlXCIsaWQ6XCJjb3JlXzA2XCIscmVhc29uOlwiQ291bGQgbm90IGxvYWQgbm9kZVwiLGRhdGE6SlNPTi5zdHJpbmdpZnkoe2lkOnQuaWR9KX0sdGhpcy5zZXR0aW5ncy5jb3JlLmVycm9yLmNhbGwodGhpcyx0aGlzLl9kYXRhLmNvcmUubGFzdF9lcnJvciksaS5jYWxsKHRoaXMsITEpKTppLmNhbGwodGhpcywhMSk6dC5pZD09PWUuanN0cmVlLnJvb3Q/dGhpcy5fYXBwZW5kX2h0bWxfZGF0YSh0LHRoaXMuX2RhdGEuY29yZS5vcmlnaW5hbF9jb250YWluZXJfaHRtbC5jbG9uZSghMCksZnVuY3Rpb24oZSl7aS5jYWxsKHRoaXMsZSl9KTppLmNhbGwodGhpcywhMSl9LF9ub2RlX2NoYW5nZWQ6ZnVuY3Rpb24oZSl7ZT10aGlzLmdldF9ub2RlKGUpLGUmJnRoaXMuX21vZGVsLmNoYW5nZWQucHVzaChlLmlkKX0sX2FwcGVuZF9odG1sX2RhdGE6ZnVuY3Rpb24odCxpLHIpe3Q9dGhpcy5nZXRfbm9kZSh0KSx0LmNoaWxkcmVuPVtdLHQuY2hpbGRyZW5fZD1bXTt2YXIgcyxuLGEsbz1pLmlzKFwidWxcIik/aS5jaGlsZHJlbigpOmksZD10LmlkLGM9W10sbD1bXSxoPXRoaXMuX21vZGVsLmRhdGEsXz1oW2RdLHU9dGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLmxlbmd0aDtmb3Ioby5lYWNoKGUucHJveHkoZnVuY3Rpb24odCxpKXtzPXRoaXMuX3BhcnNlX21vZGVsX2Zyb21faHRtbChlKGkpLGQsXy5wYXJlbnRzLmNvbmNhdCgpKSxzJiYoYy5wdXNoKHMpLGwucHVzaChzKSxoW3NdLmNoaWxkcmVuX2QubGVuZ3RoJiYobD1sLmNvbmNhdChoW3NdLmNoaWxkcmVuX2QpKSl9LHRoaXMpKSxfLmNoaWxkcmVuPWMsXy5jaGlsZHJlbl9kPWwsbj0wLGE9Xy5wYXJlbnRzLmxlbmd0aDthPm47bisrKWhbXy5wYXJlbnRzW25dXS5jaGlsZHJlbl9kPWhbXy5wYXJlbnRzW25dXS5jaGlsZHJlbl9kLmNvbmNhdChsKTt0aGlzLnRyaWdnZXIoXCJtb2RlbFwiLHtub2RlczpsLHBhcmVudDpkfSksZCE9PWUuanN0cmVlLnJvb3Q/KHRoaXMuX25vZGVfY2hhbmdlZChkKSx0aGlzLnJlZHJhdygpKToodGhpcy5nZXRfY29udGFpbmVyX3VsKCkuY2hpbGRyZW4oXCIuanN0cmVlLWluaXRpYWwtbm9kZVwiKS5yZW1vdmUoKSx0aGlzLnJlZHJhdyghMCkpLHRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZC5sZW5ndGghPT11JiZ0aGlzLnRyaWdnZXIoXCJjaGFuZ2VkXCIse2FjdGlvbjpcIm1vZGVsXCIsc2VsZWN0ZWQ6dGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkfSksci5jYWxsKHRoaXMsITApfSxfYXBwZW5kX2pzb25fZGF0YTpmdW5jdGlvbih0LGkscixzKXtpZihudWxsIT09dGhpcy5lbGVtZW50KXt0PXRoaXMuZ2V0X25vZGUodCksdC5jaGlsZHJlbj1bXSx0LmNoaWxkcmVuX2Q9W10saS5kJiYoaT1pLmQsXCJzdHJpbmdcIj09dHlwZW9mIGkmJihpPUpTT04ucGFyc2UoaSkpKSxlLmlzQXJyYXkoaSl8fChpPVtpXSk7dmFyIG49bnVsbCxhPXtkZjp0aGlzLl9tb2RlbC5kZWZhdWx0X3N0YXRlLGRhdDppLHBhcjp0LmlkLG06dGhpcy5fbW9kZWwuZGF0YSx0X2lkOnRoaXMuX2lkLHRfY250OnRoaXMuX2NudCxzZWw6dGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkfSxvPWZ1bmN0aW9uKGUsdCl7ZS5kYXRhJiYoZT1lLmRhdGEpO3ZhciBpLHIscyxuLGE9ZS5kYXQsbz1lLnBhcixkPVtdLGM9W10sbD1bXSxoPWUuZGYsXz1lLnRfaWQsdT1lLnRfY250LGc9ZS5tLGY9Z1tvXSxwPWUuc2VsLG09ZnVuY3Rpb24oZSxpLHIpe3I9cj9yLmNvbmNhdCgpOltdLGkmJnIudW5zaGlmdChpKTt2YXIgcyxuLGEsbyxkPWUuaWQudG9TdHJpbmcoKSxjPXtpZDpkLHRleHQ6ZS50ZXh0fHxcIlwiLGljb246ZS5pY29uIT09dD9lLmljb246ITAscGFyZW50OmkscGFyZW50czpyLGNoaWxkcmVuOmUuY2hpbGRyZW58fFtdLGNoaWxkcmVuX2Q6ZS5jaGlsZHJlbl9kfHxbXSxkYXRhOmUuZGF0YSxzdGF0ZTp7fSxsaV9hdHRyOntpZDohMX0sYV9hdHRyOntocmVmOlwiI1wifSxvcmlnaW5hbDohMX07Zm9yKHMgaW4gaCloLmhhc093blByb3BlcnR5KHMpJiYoYy5zdGF0ZVtzXT1oW3NdKTtpZihlJiZlLmRhdGEmJmUuZGF0YS5qc3RyZWUmJmUuZGF0YS5qc3RyZWUuaWNvbiYmKGMuaWNvbj1lLmRhdGEuanN0cmVlLmljb24pLChjLmljb249PT10fHxudWxsPT09Yy5pY29ufHxcIlwiPT09Yy5pY29uKSYmKGMuaWNvbj0hMCksZSYmZS5kYXRhJiYoYy5kYXRhPWUuZGF0YSxlLmRhdGEuanN0cmVlKSlmb3IocyBpbiBlLmRhdGEuanN0cmVlKWUuZGF0YS5qc3RyZWUuaGFzT3duUHJvcGVydHkocykmJihjLnN0YXRlW3NdPWUuZGF0YS5qc3RyZWVbc10pO2lmKGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlLnN0YXRlKWZvcihzIGluIGUuc3RhdGUpZS5zdGF0ZS5oYXNPd25Qcm9wZXJ0eShzKSYmKGMuc3RhdGVbc109ZS5zdGF0ZVtzXSk7aWYoZSYmXCJvYmplY3RcIj09dHlwZW9mIGUubGlfYXR0cilmb3IocyBpbiBlLmxpX2F0dHIpZS5saV9hdHRyLmhhc093blByb3BlcnR5KHMpJiYoYy5saV9hdHRyW3NdPWUubGlfYXR0cltzXSk7aWYoYy5saV9hdHRyLmlkfHwoYy5saV9hdHRyLmlkPWQpLGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlLmFfYXR0cilmb3IocyBpbiBlLmFfYXR0cillLmFfYXR0ci5oYXNPd25Qcm9wZXJ0eShzKSYmKGMuYV9hdHRyW3NdPWUuYV9hdHRyW3NdKTtmb3IoZSYmZS5jaGlsZHJlbiYmZS5jaGlsZHJlbj09PSEwJiYoYy5zdGF0ZS5sb2FkZWQ9ITEsYy5jaGlsZHJlbj1bXSxjLmNoaWxkcmVuX2Q9W10pLGdbYy5pZF09YyxzPTAsbj1jLmNoaWxkcmVuLmxlbmd0aDtuPnM7cysrKWE9bShnW2MuY2hpbGRyZW5bc11dLGMuaWQsciksbz1nW2FdLGMuY2hpbGRyZW5fZC5wdXNoKGEpLG8uY2hpbGRyZW5fZC5sZW5ndGgmJihjLmNoaWxkcmVuX2Q9Yy5jaGlsZHJlbl9kLmNvbmNhdChvLmNoaWxkcmVuX2QpKTtyZXR1cm4gZGVsZXRlIGUuZGF0YSxkZWxldGUgZS5jaGlsZHJlbixnW2MuaWRdLm9yaWdpbmFsPWUsYy5zdGF0ZS5zZWxlY3RlZCYmbC5wdXNoKGMuaWQpLGMuaWR9LHY9ZnVuY3Rpb24oZSxpLHIpe3I9cj9yLmNvbmNhdCgpOltdLGkmJnIudW5zaGlmdChpKTt2YXIgcyxuLGEsbyxkLGM9ITE7ZG8gYz1cImpcIitfK1wiX1wiKyArK3U7d2hpbGUoZ1tjXSk7ZD17aWQ6ITEsdGV4dDpcInN0cmluZ1wiPT10eXBlb2YgZT9lOlwiXCIsaWNvbjpcIm9iamVjdFwiPT10eXBlb2YgZSYmZS5pY29uIT09dD9lLmljb246ITAscGFyZW50OmkscGFyZW50czpyLGNoaWxkcmVuOltdLGNoaWxkcmVuX2Q6W10sZGF0YTpudWxsLHN0YXRlOnt9LGxpX2F0dHI6e2lkOiExfSxhX2F0dHI6e2hyZWY6XCIjXCJ9LG9yaWdpbmFsOiExfTtmb3IocyBpbiBoKWguaGFzT3duUHJvcGVydHkocykmJihkLnN0YXRlW3NdPWhbc10pO2lmKGUmJmUuaWQmJihkLmlkPWUuaWQudG9TdHJpbmcoKSksZSYmZS50ZXh0JiYoZC50ZXh0PWUudGV4dCksZSYmZS5kYXRhJiZlLmRhdGEuanN0cmVlJiZlLmRhdGEuanN0cmVlLmljb24mJihkLmljb249ZS5kYXRhLmpzdHJlZS5pY29uKSwoZC5pY29uPT09dHx8bnVsbD09PWQuaWNvbnx8XCJcIj09PWQuaWNvbikmJihkLmljb249ITApLGUmJmUuZGF0YSYmKGQuZGF0YT1lLmRhdGEsZS5kYXRhLmpzdHJlZSkpZm9yKHMgaW4gZS5kYXRhLmpzdHJlZSllLmRhdGEuanN0cmVlLmhhc093blByb3BlcnR5KHMpJiYoZC5zdGF0ZVtzXT1lLmRhdGEuanN0cmVlW3NdKTtpZihlJiZcIm9iamVjdFwiPT10eXBlb2YgZS5zdGF0ZSlmb3IocyBpbiBlLnN0YXRlKWUuc3RhdGUuaGFzT3duUHJvcGVydHkocykmJihkLnN0YXRlW3NdPWUuc3RhdGVbc10pO2lmKGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlLmxpX2F0dHIpZm9yKHMgaW4gZS5saV9hdHRyKWUubGlfYXR0ci5oYXNPd25Qcm9wZXJ0eShzKSYmKGQubGlfYXR0cltzXT1lLmxpX2F0dHJbc10pO2lmKGQubGlfYXR0ci5pZCYmIWQuaWQmJihkLmlkPWQubGlfYXR0ci5pZC50b1N0cmluZygpKSxkLmlkfHwoZC5pZD1jKSxkLmxpX2F0dHIuaWR8fChkLmxpX2F0dHIuaWQ9ZC5pZCksZSYmXCJvYmplY3RcIj09dHlwZW9mIGUuYV9hdHRyKWZvcihzIGluIGUuYV9hdHRyKWUuYV9hdHRyLmhhc093blByb3BlcnR5KHMpJiYoZC5hX2F0dHJbc109ZS5hX2F0dHJbc10pO2lmKGUmJmUuY2hpbGRyZW4mJmUuY2hpbGRyZW4ubGVuZ3RoKXtmb3Iocz0wLG49ZS5jaGlsZHJlbi5sZW5ndGg7bj5zO3MrKylhPXYoZS5jaGlsZHJlbltzXSxkLmlkLHIpLG89Z1thXSxkLmNoaWxkcmVuLnB1c2goYSksby5jaGlsZHJlbl9kLmxlbmd0aCYmKGQuY2hpbGRyZW5fZD1kLmNoaWxkcmVuX2QuY29uY2F0KG8uY2hpbGRyZW5fZCkpO2QuY2hpbGRyZW5fZD1kLmNoaWxkcmVuX2QuY29uY2F0KGQuY2hpbGRyZW4pfXJldHVybiBlJiZlLmNoaWxkcmVuJiZlLmNoaWxkcmVuPT09ITAmJihkLnN0YXRlLmxvYWRlZD0hMSxkLmNoaWxkcmVuPVtdLGQuY2hpbGRyZW5fZD1bXSksZGVsZXRlIGUuZGF0YSxkZWxldGUgZS5jaGlsZHJlbixkLm9yaWdpbmFsPWUsZ1tkLmlkXT1kLGQuc3RhdGUuc2VsZWN0ZWQmJmwucHVzaChkLmlkKSxkLmlkfTtpZihhLmxlbmd0aCYmYVswXS5pZCE9PXQmJmFbMF0ucGFyZW50IT09dCl7Zm9yKHI9MCxzPWEubGVuZ3RoO3M+cjtyKyspYVtyXS5jaGlsZHJlbnx8KGFbcl0uY2hpbGRyZW49W10pLGdbYVtyXS5pZC50b1N0cmluZygpXT1hW3JdO2ZvcihyPTAscz1hLmxlbmd0aDtzPnI7cisrKWdbYVtyXS5wYXJlbnQudG9TdHJpbmcoKV0uY2hpbGRyZW4ucHVzaChhW3JdLmlkLnRvU3RyaW5nKCkpLGYuY2hpbGRyZW5fZC5wdXNoKGFbcl0uaWQudG9TdHJpbmcoKSk7Zm9yKHI9MCxzPWYuY2hpbGRyZW4ubGVuZ3RoO3M+cjtyKyspaT1tKGdbZi5jaGlsZHJlbltyXV0sbyxmLnBhcmVudHMuY29uY2F0KCkpLGMucHVzaChpKSxnW2ldLmNoaWxkcmVuX2QubGVuZ3RoJiYoYz1jLmNvbmNhdChnW2ldLmNoaWxkcmVuX2QpKTtmb3Iocj0wLHM9Zi5wYXJlbnRzLmxlbmd0aDtzPnI7cisrKWdbZi5wYXJlbnRzW3JdXS5jaGlsZHJlbl9kPWdbZi5wYXJlbnRzW3JdXS5jaGlsZHJlbl9kLmNvbmNhdChjKTtuPXtjbnQ6dSxtb2Q6ZyxzZWw6cCxwYXI6byxkcGM6YyxhZGQ6bH19ZWxzZXtmb3Iocj0wLHM9YS5sZW5ndGg7cz5yO3IrKylpPXYoYVtyXSxvLGYucGFyZW50cy5jb25jYXQoKSksaSYmKGQucHVzaChpKSxjLnB1c2goaSksZ1tpXS5jaGlsZHJlbl9kLmxlbmd0aCYmKGM9Yy5jb25jYXQoZ1tpXS5jaGlsZHJlbl9kKSkpO2ZvcihmLmNoaWxkcmVuPWQsZi5jaGlsZHJlbl9kPWMscj0wLHM9Zi5wYXJlbnRzLmxlbmd0aDtzPnI7cisrKWdbZi5wYXJlbnRzW3JdXS5jaGlsZHJlbl9kPWdbZi5wYXJlbnRzW3JdXS5jaGlsZHJlbl9kLmNvbmNhdChjKTtuPXtjbnQ6dSxtb2Q6ZyxzZWw6cCxwYXI6byxkcGM6YyxhZGQ6bH19cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdy5kb2N1bWVudD9uOnZvaWQgcG9zdE1lc3NhZ2Uobil9LGQ9ZnVuY3Rpb24odCxpKXtpZihudWxsIT09dGhpcy5lbGVtZW50KXtpZih0aGlzLl9jbnQ9dC5jbnQsdGhpcy5fbW9kZWwuZGF0YT10Lm1vZCxpKXt2YXIgcyxuLGE9dC5hZGQsbz10LnNlbCxkPXRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZC5zbGljZSgpLGM9dGhpcy5fbW9kZWwuZGF0YTtpZihvLmxlbmd0aCE9PWQubGVuZ3RofHxlLnZha2F0YS5hcnJheV91bmlxdWUoby5jb25jYXQoZCkpLmxlbmd0aCE9PW8ubGVuZ3RoKXtmb3Iocz0wLG49by5sZW5ndGg7bj5zO3MrKyktMT09PWUuaW5BcnJheShvW3NdLGEpJiYtMT09PWUuaW5BcnJheShvW3NdLGQpJiYoY1tvW3NdXS5zdGF0ZS5zZWxlY3RlZD0hMSk7Zm9yKHM9MCxuPWQubGVuZ3RoO24+cztzKyspLTE9PT1lLmluQXJyYXkoZFtzXSxvKSYmKGNbZFtzXV0uc3RhdGUuc2VsZWN0ZWQ9ITApfX10LmFkZC5sZW5ndGgmJih0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQ9dGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLmNvbmNhdCh0LmFkZCkpLHRoaXMudHJpZ2dlcihcIm1vZGVsXCIse25vZGVzOnQuZHBjLHBhcmVudDp0LnBhcn0pLHQucGFyIT09ZS5qc3RyZWUucm9vdD8odGhpcy5fbm9kZV9jaGFuZ2VkKHQucGFyKSx0aGlzLnJlZHJhdygpKTp0aGlzLnJlZHJhdyghMCksdC5hZGQubGVuZ3RoJiZ0aGlzLnRyaWdnZXIoXCJjaGFuZ2VkXCIse2FjdGlvbjpcIm1vZGVsXCIsc2VsZWN0ZWQ6dGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkfSksci5jYWxsKHRoaXMsITApfX07aWYodGhpcy5zZXR0aW5ncy5jb3JlLndvcmtlciYmd2luZG93LkJsb2ImJndpbmRvdy5VUkwmJndpbmRvdy5Xb3JrZXIpdHJ5e251bGw9PT10aGlzLl93cmsmJih0aGlzLl93cms9d2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwobmV3IHdpbmRvdy5CbG9iKFtcInNlbGYub25tZXNzYWdlID0gXCIrby50b1N0cmluZygpXSx7dHlwZTpcInRleHQvamF2YXNjcmlwdFwifSkpKSwhdGhpcy5fZGF0YS5jb3JlLndvcmtpbmd8fHM/KHRoaXMuX2RhdGEuY29yZS53b3JraW5nPSEwLG49bmV3IHdpbmRvdy5Xb3JrZXIodGhpcy5fd3JrKSxuLm9ubWVzc2FnZT1lLnByb3h5KGZ1bmN0aW9uKGUpe2QuY2FsbCh0aGlzLGUuZGF0YSwhMCk7dHJ5e24udGVybWluYXRlKCksbj1udWxsfWNhdGNoKHQpe310aGlzLl9kYXRhLmNvcmUud29ya2VyX3F1ZXVlLmxlbmd0aD90aGlzLl9hcHBlbmRfanNvbl9kYXRhLmFwcGx5KHRoaXMsdGhpcy5fZGF0YS5jb3JlLndvcmtlcl9xdWV1ZS5zaGlmdCgpKTp0aGlzLl9kYXRhLmNvcmUud29ya2luZz0hMX0sdGhpcyksYS5wYXI/bi5wb3N0TWVzc2FnZShhKTp0aGlzLl9kYXRhLmNvcmUud29ya2VyX3F1ZXVlLmxlbmd0aD90aGlzLl9hcHBlbmRfanNvbl9kYXRhLmFwcGx5KHRoaXMsdGhpcy5fZGF0YS5jb3JlLndvcmtlcl9xdWV1ZS5zaGlmdCgpKTp0aGlzLl9kYXRhLmNvcmUud29ya2luZz0hMSk6dGhpcy5fZGF0YS5jb3JlLndvcmtlcl9xdWV1ZS5wdXNoKFt0LGksciwhMF0pfWNhdGNoKGMpe2QuY2FsbCh0aGlzLG8oYSksITEpLHRoaXMuX2RhdGEuY29yZS53b3JrZXJfcXVldWUubGVuZ3RoP3RoaXMuX2FwcGVuZF9qc29uX2RhdGEuYXBwbHkodGhpcyx0aGlzLl9kYXRhLmNvcmUud29ya2VyX3F1ZXVlLnNoaWZ0KCkpOnRoaXMuX2RhdGEuY29yZS53b3JraW5nPSExfWVsc2UgZC5jYWxsKHRoaXMsbyhhKSwhMSl9fSxfcGFyc2VfbW9kZWxfZnJvbV9odG1sOmZ1bmN0aW9uKGkscixzKXtzPXM/W10uY29uY2F0KHMpOltdLHImJnMudW5zaGlmdChyKTt2YXIgbixhLG8sZCxjLGw9dGhpcy5fbW9kZWwuZGF0YSxoPXtpZDohMSx0ZXh0OiExLGljb246ITAscGFyZW50OnIscGFyZW50czpzLGNoaWxkcmVuOltdLGNoaWxkcmVuX2Q6W10sZGF0YTpudWxsLHN0YXRlOnt9LGxpX2F0dHI6e2lkOiExfSxhX2F0dHI6e2hyZWY6XCIjXCJ9LG9yaWdpbmFsOiExfTtmb3IobyBpbiB0aGlzLl9tb2RlbC5kZWZhdWx0X3N0YXRlKXRoaXMuX21vZGVsLmRlZmF1bHRfc3RhdGUuaGFzT3duUHJvcGVydHkobykmJihoLnN0YXRlW29dPXRoaXMuX21vZGVsLmRlZmF1bHRfc3RhdGVbb10pO2lmKGQ9ZS52YWthdGEuYXR0cmlidXRlcyhpLCEwKSxlLmVhY2goZCxmdW5jdGlvbih0LGkpe3JldHVybiBpPWUudHJpbShpKSxpLmxlbmd0aD8oaC5saV9hdHRyW3RdPWksdm9pZChcImlkXCI9PT10JiYoaC5pZD1pLnRvU3RyaW5nKCkpKSk6ITB9KSxkPWkuY2hpbGRyZW4oXCJhXCIpLmZpcnN0KCksZC5sZW5ndGgmJihkPWUudmFrYXRhLmF0dHJpYnV0ZXMoZCwhMCksZS5lYWNoKGQsZnVuY3Rpb24odCxpKXtpPWUudHJpbShpKSxpLmxlbmd0aCYmKGguYV9hdHRyW3RdPWkpfSkpLGQ9aS5jaGlsZHJlbihcImFcIikuZmlyc3QoKS5sZW5ndGg/aS5jaGlsZHJlbihcImFcIikuZmlyc3QoKS5jbG9uZSgpOmkuY2xvbmUoKSxkLmNoaWxkcmVuKFwiaW5zLCBpLCB1bFwiKS5yZW1vdmUoKSxkPWQuaHRtbCgpLGQ9ZShcIjxkaXYgLz5cIikuaHRtbChkKSxoLnRleHQ9dGhpcy5zZXR0aW5ncy5jb3JlLmZvcmNlX3RleHQ/ZC50ZXh0KCk6ZC5odG1sKCksZD1pLmRhdGEoKSxoLmRhdGE9ZD9lLmV4dGVuZCghMCx7fSxkKTpudWxsLGguc3RhdGUub3BlbmVkPWkuaGFzQ2xhc3MoXCJqc3RyZWUtb3BlblwiKSxoLnN0YXRlLnNlbGVjdGVkPWkuY2hpbGRyZW4oXCJhXCIpLmhhc0NsYXNzKFwianN0cmVlLWNsaWNrZWRcIiksaC5zdGF0ZS5kaXNhYmxlZD1pLmNoaWxkcmVuKFwiYVwiKS5oYXNDbGFzcyhcImpzdHJlZS1kaXNhYmxlZFwiKSxoLmRhdGEmJmguZGF0YS5qc3RyZWUpZm9yKG8gaW4gaC5kYXRhLmpzdHJlZSloLmRhdGEuanN0cmVlLmhhc093blByb3BlcnR5KG8pJiYoaC5zdGF0ZVtvXT1oLmRhdGEuanN0cmVlW29dKTtkPWkuY2hpbGRyZW4oXCJhXCIpLmNoaWxkcmVuKFwiLmpzdHJlZS10aGVtZWljb25cIiksZC5sZW5ndGgmJihoLmljb249ZC5oYXNDbGFzcyhcImpzdHJlZS10aGVtZWljb24taGlkZGVuXCIpPyExOmQuYXR0cihcInJlbFwiKSksaC5zdGF0ZS5pY29uIT09dCYmKGguaWNvbj1oLnN0YXRlLmljb24pLChoLmljb249PT10fHxudWxsPT09aC5pY29ufHxcIlwiPT09aC5pY29uKSYmKGguaWNvbj0hMCksZD1pLmNoaWxkcmVuKFwidWxcIikuY2hpbGRyZW4oXCJsaVwiKTtkbyBjPVwialwiK3RoaXMuX2lkK1wiX1wiKyArK3RoaXMuX2NudDt3aGlsZShsW2NdKTtyZXR1cm4gaC5pZD1oLmxpX2F0dHIuaWQ/aC5saV9hdHRyLmlkLnRvU3RyaW5nKCk6YyxkLmxlbmd0aD8oZC5lYWNoKGUucHJveHkoZnVuY3Rpb24odCxpKXtuPXRoaXMuX3BhcnNlX21vZGVsX2Zyb21faHRtbChlKGkpLGguaWQscyksYT10aGlzLl9tb2RlbC5kYXRhW25dLGguY2hpbGRyZW4ucHVzaChuKSxhLmNoaWxkcmVuX2QubGVuZ3RoJiYoaC5jaGlsZHJlbl9kPWguY2hpbGRyZW5fZC5jb25jYXQoYS5jaGlsZHJlbl9kKSl9LHRoaXMpKSxoLmNoaWxkcmVuX2Q9aC5jaGlsZHJlbl9kLmNvbmNhdChoLmNoaWxkcmVuKSk6aS5oYXNDbGFzcyhcImpzdHJlZS1jbG9zZWRcIikmJihoLnN0YXRlLmxvYWRlZD0hMSksaC5saV9hdHRyW1wiY2xhc3NcIl0mJihoLmxpX2F0dHJbXCJjbGFzc1wiXT1oLmxpX2F0dHJbXCJjbGFzc1wiXS5yZXBsYWNlKFwianN0cmVlLWNsb3NlZFwiLFwiXCIpLnJlcGxhY2UoXCJqc3RyZWUtb3BlblwiLFwiXCIpKSxoLmFfYXR0cltcImNsYXNzXCJdJiYoaC5hX2F0dHJbXCJjbGFzc1wiXT1oLmFfYXR0cltcImNsYXNzXCJdLnJlcGxhY2UoXCJqc3RyZWUtY2xpY2tlZFwiLFwiXCIpLnJlcGxhY2UoXCJqc3RyZWUtZGlzYWJsZWRcIixcIlwiKSksbFtoLmlkXT1oLGguc3RhdGUuc2VsZWN0ZWQmJnRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZC5wdXNoKGguaWQpLGguaWR9LF9wYXJzZV9tb2RlbF9mcm9tX2ZsYXRfanNvbjpmdW5jdGlvbihlLGkscil7cj1yP3IuY29uY2F0KCk6W10saSYmci51bnNoaWZ0KGkpO3ZhciBzLG4sYSxvLGQ9ZS5pZC50b1N0cmluZygpLGM9dGhpcy5fbW9kZWwuZGF0YSxsPXRoaXMuX21vZGVsLmRlZmF1bHRfc3RhdGUsaD17aWQ6ZCx0ZXh0OmUudGV4dHx8XCJcIixpY29uOmUuaWNvbiE9PXQ/ZS5pY29uOiEwLHBhcmVudDppLHBhcmVudHM6cixjaGlsZHJlbjplLmNoaWxkcmVufHxbXSxjaGlsZHJlbl9kOmUuY2hpbGRyZW5fZHx8W10sZGF0YTplLmRhdGEsc3RhdGU6e30sbGlfYXR0cjp7aWQ6ITF9LGFfYXR0cjp7aHJlZjpcIiNcIn0sb3JpZ2luYWw6ITF9O2ZvcihzIGluIGwpbC5oYXNPd25Qcm9wZXJ0eShzKSYmKGguc3RhdGVbc109bFtzXSk7aWYoZSYmZS5kYXRhJiZlLmRhdGEuanN0cmVlJiZlLmRhdGEuanN0cmVlLmljb24mJihoLmljb249ZS5kYXRhLmpzdHJlZS5pY29uKSwoaC5pY29uPT09dHx8bnVsbD09PWguaWNvbnx8XCJcIj09PWguaWNvbikmJihoLmljb249ITApLGUmJmUuZGF0YSYmKGguZGF0YT1lLmRhdGEsZS5kYXRhLmpzdHJlZSkpZm9yKHMgaW4gZS5kYXRhLmpzdHJlZSllLmRhdGEuanN0cmVlLmhhc093blByb3BlcnR5KHMpJiYoaC5zdGF0ZVtzXT1lLmRhdGEuanN0cmVlW3NdKTtpZihlJiZcIm9iamVjdFwiPT10eXBlb2YgZS5zdGF0ZSlmb3IocyBpbiBlLnN0YXRlKWUuc3RhdGUuaGFzT3duUHJvcGVydHkocykmJihoLnN0YXRlW3NdPWUuc3RhdGVbc10pO2lmKGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlLmxpX2F0dHIpZm9yKHMgaW4gZS5saV9hdHRyKWUubGlfYXR0ci5oYXNPd25Qcm9wZXJ0eShzKSYmKGgubGlfYXR0cltzXT1lLmxpX2F0dHJbc10pO2lmKGgubGlfYXR0ci5pZHx8KGgubGlfYXR0ci5pZD1kKSxlJiZcIm9iamVjdFwiPT10eXBlb2YgZS5hX2F0dHIpZm9yKHMgaW4gZS5hX2F0dHIpZS5hX2F0dHIuaGFzT3duUHJvcGVydHkocykmJihoLmFfYXR0cltzXT1lLmFfYXR0cltzXSk7Zm9yKGUmJmUuY2hpbGRyZW4mJmUuY2hpbGRyZW49PT0hMCYmKGguc3RhdGUubG9hZGVkPSExLGguY2hpbGRyZW49W10saC5jaGlsZHJlbl9kPVtdKSxjW2guaWRdPWgscz0wLG49aC5jaGlsZHJlbi5sZW5ndGg7bj5zO3MrKylhPXRoaXMuX3BhcnNlX21vZGVsX2Zyb21fZmxhdF9qc29uKGNbaC5jaGlsZHJlbltzXV0saC5pZCxyKSxvPWNbYV0saC5jaGlsZHJlbl9kLnB1c2goYSksby5jaGlsZHJlbl9kLmxlbmd0aCYmKGguY2hpbGRyZW5fZD1oLmNoaWxkcmVuX2QuY29uY2F0KG8uY2hpbGRyZW5fZCkpO3JldHVybiBkZWxldGUgZS5kYXRhLGRlbGV0ZSBlLmNoaWxkcmVuLGNbaC5pZF0ub3JpZ2luYWw9ZSxoLnN0YXRlLnNlbGVjdGVkJiZ0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQucHVzaChoLmlkKSxoLmlkfSxfcGFyc2VfbW9kZWxfZnJvbV9qc29uOmZ1bmN0aW9uKGUsaSxyKXtyPXI/ci5jb25jYXQoKTpbXSxpJiZyLnVuc2hpZnQoaSk7dmFyIHMsbixhLG8sZCxjPSExLGw9dGhpcy5fbW9kZWwuZGF0YSxoPXRoaXMuX21vZGVsLmRlZmF1bHRfc3RhdGU7ZG8gYz1cImpcIit0aGlzLl9pZCtcIl9cIisgKyt0aGlzLl9jbnQ7d2hpbGUobFtjXSk7ZD17aWQ6ITEsdGV4dDpcInN0cmluZ1wiPT10eXBlb2YgZT9lOlwiXCIsaWNvbjpcIm9iamVjdFwiPT10eXBlb2YgZSYmZS5pY29uIT09dD9lLmljb246ITAscGFyZW50OmkscGFyZW50czpyLGNoaWxkcmVuOltdLGNoaWxkcmVuX2Q6W10sZGF0YTpudWxsLHN0YXRlOnt9LGxpX2F0dHI6e2lkOiExfSxhX2F0dHI6e2hyZWY6XCIjXCJ9LG9yaWdpbmFsOiExfTtmb3IocyBpbiBoKWguaGFzT3duUHJvcGVydHkocykmJihkLnN0YXRlW3NdPWhbc10pO2lmKGUmJmUuaWQmJihkLmlkPWUuaWQudG9TdHJpbmcoKSksZSYmZS50ZXh0JiYoZC50ZXh0PWUudGV4dCksZSYmZS5kYXRhJiZlLmRhdGEuanN0cmVlJiZlLmRhdGEuanN0cmVlLmljb24mJihkLmljb249ZS5kYXRhLmpzdHJlZS5pY29uKSwoZC5pY29uPT09dHx8bnVsbD09PWQuaWNvbnx8XCJcIj09PWQuaWNvbikmJihkLmljb249ITApLGUmJmUuZGF0YSYmKGQuZGF0YT1lLmRhdGEsZS5kYXRhLmpzdHJlZSkpZm9yKHMgaW4gZS5kYXRhLmpzdHJlZSllLmRhdGEuanN0cmVlLmhhc093blByb3BlcnR5KHMpJiYoZC5zdGF0ZVtzXT1lLmRhdGEuanN0cmVlW3NdKTtpZihlJiZcIm9iamVjdFwiPT10eXBlb2YgZS5zdGF0ZSlmb3IocyBpbiBlLnN0YXRlKWUuc3RhdGUuaGFzT3duUHJvcGVydHkocykmJihkLnN0YXRlW3NdPWUuc3RhdGVbc10pO2lmKGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlLmxpX2F0dHIpZm9yKHMgaW4gZS5saV9hdHRyKWUubGlfYXR0ci5oYXNPd25Qcm9wZXJ0eShzKSYmKGQubGlfYXR0cltzXT1lLmxpX2F0dHJbc10pO2lmKGQubGlfYXR0ci5pZCYmIWQuaWQmJihkLmlkPWQubGlfYXR0ci5pZC50b1N0cmluZygpKSxkLmlkfHwoZC5pZD1jKSxkLmxpX2F0dHIuaWR8fChkLmxpX2F0dHIuaWQ9ZC5pZCksZSYmXCJvYmplY3RcIj09dHlwZW9mIGUuYV9hdHRyKWZvcihzIGluIGUuYV9hdHRyKWUuYV9hdHRyLmhhc093blByb3BlcnR5KHMpJiYoZC5hX2F0dHJbc109ZS5hX2F0dHJbc10pO2lmKGUmJmUuY2hpbGRyZW4mJmUuY2hpbGRyZW4ubGVuZ3RoKXtmb3Iocz0wLG49ZS5jaGlsZHJlbi5sZW5ndGg7bj5zO3MrKylhPXRoaXMuX3BhcnNlX21vZGVsX2Zyb21fanNvbihlLmNoaWxkcmVuW3NdLGQuaWQsciksbz1sW2FdLGQuY2hpbGRyZW4ucHVzaChhKSxvLmNoaWxkcmVuX2QubGVuZ3RoJiYoZC5jaGlsZHJlbl9kPWQuY2hpbGRyZW5fZC5jb25jYXQoby5jaGlsZHJlbl9kKSk7ZC5jaGlsZHJlbl9kPWQuY2hpbGRyZW5fZC5jb25jYXQoZC5jaGlsZHJlbil9cmV0dXJuIGUmJmUuY2hpbGRyZW4mJmUuY2hpbGRyZW49PT0hMCYmKGQuc3RhdGUubG9hZGVkPSExLGQuY2hpbGRyZW49W10sZC5jaGlsZHJlbl9kPVtdKSxkZWxldGUgZS5kYXRhLGRlbGV0ZSBlLmNoaWxkcmVuLGQub3JpZ2luYWw9ZSxsW2QuaWRdPWQsZC5zdGF0ZS5zZWxlY3RlZCYmdGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLnB1c2goZC5pZCksZC5pZH0sX3JlZHJhdzpmdW5jdGlvbigpe3ZhciB0LGkscixzPXRoaXMuX21vZGVsLmZvcmNlX2Z1bGxfcmVkcmF3P3RoaXMuX21vZGVsLmRhdGFbZS5qc3RyZWUucm9vdF0uY2hpbGRyZW4uY29uY2F0KFtdKTp0aGlzLl9tb2RlbC5jaGFuZ2VkLmNvbmNhdChbXSksbj1sLmNyZWF0ZUVsZW1lbnQoXCJVTFwiKSxhPXRoaXMuX2RhdGEuY29yZS5mb2N1c2VkO2ZvcihpPTAscj1zLmxlbmd0aDtyPmk7aSsrKXQ9dGhpcy5yZWRyYXdfbm9kZShzW2ldLCEwLHRoaXMuX21vZGVsLmZvcmNlX2Z1bGxfcmVkcmF3KSx0JiZ0aGlzLl9tb2RlbC5mb3JjZV9mdWxsX3JlZHJhdyYmbi5hcHBlbmRDaGlsZCh0KTt0aGlzLl9tb2RlbC5mb3JjZV9mdWxsX3JlZHJhdyYmKG4uY2xhc3NOYW1lPXRoaXMuZ2V0X2NvbnRhaW5lcl91bCgpWzBdLmNsYXNzTmFtZSxuLnNldEF0dHJpYnV0ZShcInJvbGVcIixcImdyb3VwXCIpLHRoaXMuZWxlbWVudC5lbXB0eSgpLmFwcGVuZChuKSksbnVsbCE9PWEmJih0PXRoaXMuZ2V0X25vZGUoYSwhMCksdCYmdC5sZW5ndGgmJnQuY2hpbGRyZW4oXCIuanN0cmVlLWFuY2hvclwiKVswXSE9PWwuYWN0aXZlRWxlbWVudD90LmNoaWxkcmVuKFwiLmpzdHJlZS1hbmNob3JcIikuZm9jdXMoKTp0aGlzLl9kYXRhLmNvcmUuZm9jdXNlZD1udWxsKSx0aGlzLl9tb2RlbC5mb3JjZV9mdWxsX3JlZHJhdz0hMSx0aGlzLl9tb2RlbC5jaGFuZ2VkPVtdLHRoaXMudHJpZ2dlcihcInJlZHJhd1wiLHtub2RlczpzfSl9LHJlZHJhdzpmdW5jdGlvbihlKXtlJiYodGhpcy5fbW9kZWwuZm9yY2VfZnVsbF9yZWRyYXc9ITApLHRoaXMuX3JlZHJhdygpfSxkcmF3X2NoaWxkcmVuOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuZ2V0X25vZGUodCkscj0hMSxzPSExLG49ITEsYT1sO2lmKCFpKXJldHVybiExO2lmKGkuaWQ9PT1lLmpzdHJlZS5yb290KXJldHVybiB0aGlzLnJlZHJhdyghMCk7aWYodD10aGlzLmdldF9ub2RlKHQsITApLCF0fHwhdC5sZW5ndGgpcmV0dXJuITE7aWYodC5jaGlsZHJlbihcIi5qc3RyZWUtY2hpbGRyZW5cIikucmVtb3ZlKCksdD10WzBdLGkuY2hpbGRyZW4ubGVuZ3RoJiZpLnN0YXRlLmxvYWRlZCl7Zm9yKG49YS5jcmVhdGVFbGVtZW50KFwiVUxcIiksbi5zZXRBdHRyaWJ1dGUoXCJyb2xlXCIsXCJncm91cFwiKSxuLmNsYXNzTmFtZT1cImpzdHJlZS1jaGlsZHJlblwiLHI9MCxzPWkuY2hpbGRyZW4ubGVuZ3RoO3M+cjtyKyspbi5hcHBlbmRDaGlsZCh0aGlzLnJlZHJhd19ub2RlKGkuY2hpbGRyZW5bcl0sITAsITApKTt0LmFwcGVuZENoaWxkKG4pfX0scmVkcmF3X25vZGU6ZnVuY3Rpb24odCxpLHIscyl7dmFyIG49dGhpcy5nZXRfbm9kZSh0KSxhPSExLG89ITEsZD0hMSxjPSExLF89ITEsdT0hMSxnPVwiXCIsZj1sLHA9dGhpcy5fbW9kZWwuZGF0YSxtPSExLHY9bnVsbCxqPTAseT0wLGs9ITEseD0hMTtpZighbilyZXR1cm4hMTtpZihuLmlkPT09ZS5qc3RyZWUucm9vdClyZXR1cm4gdGhpcy5yZWRyYXcoITApO2lmKGk9aXx8MD09PW4uY2hpbGRyZW4ubGVuZ3RoLHQ9bC5xdWVyeVNlbGVjdG9yP3RoaXMuZWxlbWVudFswXS5xdWVyeVNlbGVjdG9yKFwiI1wiKygtMSE9PVwiMDEyMzQ1Njc4OVwiLmluZGV4T2Yobi5pZFswXSk/XCJcXFxcM1wiK24uaWRbMF0rXCIgXCIrbi5pZC5zdWJzdHIoMSkucmVwbGFjZShlLmpzdHJlZS5pZHJlZ2V4LFwiXFxcXCQmXCIpOm4uaWQucmVwbGFjZShlLmpzdHJlZS5pZHJlZ2V4LFwiXFxcXCQmXCIpKSk6bC5nZXRFbGVtZW50QnlJZChuLmlkKSl0PWUodCkscnx8KGE9dC5wYXJlbnQoKS5wYXJlbnQoKVswXSxhPT09dGhpcy5lbGVtZW50WzBdJiYoYT1udWxsKSxvPXQuaW5kZXgoKSksaXx8IW4uY2hpbGRyZW4ubGVuZ3RofHx0LmNoaWxkcmVuKFwiLmpzdHJlZS1jaGlsZHJlblwiKS5sZW5ndGh8fChpPSEwKSxcbml8fChkPXQuY2hpbGRyZW4oXCIuanN0cmVlLWNoaWxkcmVuXCIpWzBdKSxtPXQuY2hpbGRyZW4oXCIuanN0cmVlLWFuY2hvclwiKVswXT09PWwuYWN0aXZlRWxlbWVudCx0LnJlbW92ZSgpO2Vsc2UgaWYoaT0hMCwhcil7aWYoYT1uLnBhcmVudCE9PWUuanN0cmVlLnJvb3Q/ZShcIiNcIituLnBhcmVudC5yZXBsYWNlKGUuanN0cmVlLmlkcmVnZXgsXCJcXFxcJCZcIiksdGhpcy5lbGVtZW50KVswXTpudWxsLCEobnVsbD09PWF8fGEmJnBbbi5wYXJlbnRdLnN0YXRlLm9wZW5lZCkpcmV0dXJuITE7bz1lLmluQXJyYXkobi5pZCxudWxsPT09YT9wW2UuanN0cmVlLnJvb3RdLmNoaWxkcmVuOnBbbi5wYXJlbnRdLmNoaWxkcmVuKX10PWguY2xvbmVOb2RlKCEwKSxnPVwianN0cmVlLW5vZGUgXCI7Zm9yKGMgaW4gbi5saV9hdHRyKWlmKG4ubGlfYXR0ci5oYXNPd25Qcm9wZXJ0eShjKSl7aWYoXCJpZFwiPT09Yyljb250aW51ZTtcImNsYXNzXCIhPT1jP3Quc2V0QXR0cmlidXRlKGMsbi5saV9hdHRyW2NdKTpnKz1uLmxpX2F0dHJbY119Zm9yKG4uYV9hdHRyLmlkfHwobi5hX2F0dHIuaWQ9bi5pZCtcIl9hbmNob3JcIiksdC5zZXRBdHRyaWJ1dGUoXCJhcmlhLXNlbGVjdGVkXCIsISFuLnN0YXRlLnNlbGVjdGVkKSx0LnNldEF0dHJpYnV0ZShcImFyaWEtbGV2ZWxcIixuLnBhcmVudHMubGVuZ3RoKSx0LnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxsZWRieVwiLG4uYV9hdHRyLmlkKSxuLnN0YXRlLmRpc2FibGVkJiZ0LnNldEF0dHJpYnV0ZShcImFyaWEtZGlzYWJsZWRcIiwhMCksYz0wLF89bi5jaGlsZHJlbi5sZW5ndGg7Xz5jO2MrKylpZighcFtuLmNoaWxkcmVuW2NdXS5zdGF0ZS5oaWRkZW4pe2s9ITA7YnJlYWt9aWYobnVsbCE9PW4ucGFyZW50JiZwW24ucGFyZW50XSYmIW4uc3RhdGUuaGlkZGVuJiYoYz1lLmluQXJyYXkobi5pZCxwW24ucGFyZW50XS5jaGlsZHJlbikseD1uLmlkLC0xIT09YykpZm9yKGMrKyxfPXBbbi5wYXJlbnRdLmNoaWxkcmVuLmxlbmd0aDtfPmMmJihwW3Bbbi5wYXJlbnRdLmNoaWxkcmVuW2NdXS5zdGF0ZS5oaWRkZW58fCh4PXBbbi5wYXJlbnRdLmNoaWxkcmVuW2NdKSx4PT09bi5pZCk7YysrKTtuLnN0YXRlLmhpZGRlbiYmKGcrPVwiIGpzdHJlZS1oaWRkZW5cIiksbi5zdGF0ZS5sb2FkZWQmJiFrP2crPVwiIGpzdHJlZS1sZWFmXCI6KGcrPW4uc3RhdGUub3BlbmVkJiZuLnN0YXRlLmxvYWRlZD9cIiBqc3RyZWUtb3BlblwiOlwiIGpzdHJlZS1jbG9zZWRcIix0LnNldEF0dHJpYnV0ZShcImFyaWEtZXhwYW5kZWRcIixuLnN0YXRlLm9wZW5lZCYmbi5zdGF0ZS5sb2FkZWQpKSx4PT09bi5pZCYmKGcrPVwiIGpzdHJlZS1sYXN0XCIpLHQuaWQ9bi5pZCx0LmNsYXNzTmFtZT1nLGc9KG4uc3RhdGUuc2VsZWN0ZWQ/XCIganN0cmVlLWNsaWNrZWRcIjpcIlwiKSsobi5zdGF0ZS5kaXNhYmxlZD9cIiBqc3RyZWUtZGlzYWJsZWRcIjpcIlwiKTtmb3IoXyBpbiBuLmFfYXR0cilpZihuLmFfYXR0ci5oYXNPd25Qcm9wZXJ0eShfKSl7aWYoXCJocmVmXCI9PT1fJiZcIiNcIj09PW4uYV9hdHRyW19dKWNvbnRpbnVlO1wiY2xhc3NcIiE9PV8/dC5jaGlsZE5vZGVzWzFdLnNldEF0dHJpYnV0ZShfLG4uYV9hdHRyW19dKTpnKz1cIiBcIituLmFfYXR0cltfXX1pZihnLmxlbmd0aCYmKHQuY2hpbGROb2Rlc1sxXS5jbGFzc05hbWU9XCJqc3RyZWUtYW5jaG9yIFwiK2cpLChuLmljb24mJm4uaWNvbiE9PSEwfHxuLmljb249PT0hMSkmJihuLmljb249PT0hMT90LmNoaWxkTm9kZXNbMV0uY2hpbGROb2Rlc1swXS5jbGFzc05hbWUrPVwiIGpzdHJlZS10aGVtZWljb24taGlkZGVuXCI6LTE9PT1uLmljb24uaW5kZXhPZihcIi9cIikmJi0xPT09bi5pY29uLmluZGV4T2YoXCIuXCIpP3QuY2hpbGROb2Rlc1sxXS5jaGlsZE5vZGVzWzBdLmNsYXNzTmFtZSs9XCIgXCIrbi5pY29uK1wiIGpzdHJlZS10aGVtZWljb24tY3VzdG9tXCI6KHQuY2hpbGROb2Rlc1sxXS5jaGlsZE5vZGVzWzBdLnN0eWxlLmJhY2tncm91bmRJbWFnZT1cInVybChcIituLmljb24rXCIpXCIsdC5jaGlsZE5vZGVzWzFdLmNoaWxkTm9kZXNbMF0uc3R5bGUuYmFja2dyb3VuZFBvc2l0aW9uPVwiY2VudGVyIGNlbnRlclwiLHQuY2hpbGROb2Rlc1sxXS5jaGlsZE5vZGVzWzBdLnN0eWxlLmJhY2tncm91bmRTaXplPVwiYXV0b1wiLHQuY2hpbGROb2Rlc1sxXS5jaGlsZE5vZGVzWzBdLmNsYXNzTmFtZSs9XCIganN0cmVlLXRoZW1laWNvbi1jdXN0b21cIikpLHRoaXMuc2V0dGluZ3MuY29yZS5mb3JjZV90ZXh0P3QuY2hpbGROb2Rlc1sxXS5hcHBlbmRDaGlsZChmLmNyZWF0ZVRleHROb2RlKG4udGV4dCkpOnQuY2hpbGROb2Rlc1sxXS5pbm5lckhUTUwrPW4udGV4dCxpJiZuLmNoaWxkcmVuLmxlbmd0aCYmKG4uc3RhdGUub3BlbmVkfHxzKSYmbi5zdGF0ZS5sb2FkZWQpe2Zvcih1PWYuY3JlYXRlRWxlbWVudChcIlVMXCIpLHUuc2V0QXR0cmlidXRlKFwicm9sZVwiLFwiZ3JvdXBcIiksdS5jbGFzc05hbWU9XCJqc3RyZWUtY2hpbGRyZW5cIixjPTAsXz1uLmNoaWxkcmVuLmxlbmd0aDtfPmM7YysrKXUuYXBwZW5kQ2hpbGQodGhpcy5yZWRyYXdfbm9kZShuLmNoaWxkcmVuW2NdLGksITApKTt0LmFwcGVuZENoaWxkKHUpfWlmKGQmJnQuYXBwZW5kQ2hpbGQoZCksIXIpe2ZvcihhfHwoYT10aGlzLmVsZW1lbnRbMF0pLGM9MCxfPWEuY2hpbGROb2Rlcy5sZW5ndGg7Xz5jO2MrKylpZihhLmNoaWxkTm9kZXNbY10mJmEuY2hpbGROb2Rlc1tjXS5jbGFzc05hbWUmJi0xIT09YS5jaGlsZE5vZGVzW2NdLmNsYXNzTmFtZS5pbmRleE9mKFwianN0cmVlLWNoaWxkcmVuXCIpKXt2PWEuY2hpbGROb2Rlc1tjXTticmVha312fHwodj1mLmNyZWF0ZUVsZW1lbnQoXCJVTFwiKSx2LnNldEF0dHJpYnV0ZShcInJvbGVcIixcImdyb3VwXCIpLHYuY2xhc3NOYW1lPVwianN0cmVlLWNoaWxkcmVuXCIsYS5hcHBlbmRDaGlsZCh2KSksYT12LG88YS5jaGlsZE5vZGVzLmxlbmd0aD9hLmluc2VydEJlZm9yZSh0LGEuY2hpbGROb2Rlc1tvXSk6YS5hcHBlbmRDaGlsZCh0KSxtJiYoaj10aGlzLmVsZW1lbnRbMF0uc2Nyb2xsVG9wLHk9dGhpcy5lbGVtZW50WzBdLnNjcm9sbExlZnQsdC5jaGlsZE5vZGVzWzFdLmZvY3VzKCksdGhpcy5lbGVtZW50WzBdLnNjcm9sbFRvcD1qLHRoaXMuZWxlbWVudFswXS5zY3JvbGxMZWZ0PXkpfXJldHVybiBuLnN0YXRlLm9wZW5lZCYmIW4uc3RhdGUubG9hZGVkJiYobi5zdGF0ZS5vcGVuZWQ9ITEsc2V0VGltZW91dChlLnByb3h5KGZ1bmN0aW9uKCl7dGhpcy5vcGVuX25vZGUobi5pZCwhMSwwKX0sdGhpcyksMCkpLHR9LG9wZW5fbm9kZTpmdW5jdGlvbihpLHIscyl7dmFyIG4sYSxvLGQ7aWYoZS5pc0FycmF5KGkpKXtmb3IoaT1pLnNsaWNlKCksbj0wLGE9aS5sZW5ndGg7YT5uO24rKyl0aGlzLm9wZW5fbm9kZShpW25dLHIscyk7cmV0dXJuITB9cmV0dXJuIGk9dGhpcy5nZXRfbm9kZShpKSxpJiZpLmlkIT09ZS5qc3RyZWUucm9vdD8ocz1zPT09dD90aGlzLnNldHRpbmdzLmNvcmUuYW5pbWF0aW9uOnMsdGhpcy5pc19jbG9zZWQoaSk/dGhpcy5pc19sb2FkZWQoaSk/KG89dGhpcy5nZXRfbm9kZShpLCEwKSxkPXRoaXMsby5sZW5ndGgmJihzJiZvLmNoaWxkcmVuKFwiLmpzdHJlZS1jaGlsZHJlblwiKS5sZW5ndGgmJm8uY2hpbGRyZW4oXCIuanN0cmVlLWNoaWxkcmVuXCIpLnN0b3AoITAsITApLGkuY2hpbGRyZW4ubGVuZ3RoJiYhdGhpcy5fZmlyc3RDaGlsZChvLmNoaWxkcmVuKFwiLmpzdHJlZS1jaGlsZHJlblwiKVswXSkmJnRoaXMuZHJhd19jaGlsZHJlbihpKSxzPyh0aGlzLnRyaWdnZXIoXCJiZWZvcmVfb3BlblwiLHtub2RlOml9KSxvLmNoaWxkcmVuKFwiLmpzdHJlZS1jaGlsZHJlblwiKS5jc3MoXCJkaXNwbGF5XCIsXCJub25lXCIpLmVuZCgpLnJlbW92ZUNsYXNzKFwianN0cmVlLWNsb3NlZFwiKS5hZGRDbGFzcyhcImpzdHJlZS1vcGVuXCIpLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsITApLmNoaWxkcmVuKFwiLmpzdHJlZS1jaGlsZHJlblwiKS5zdG9wKCEwLCEwKS5zbGlkZURvd24ocyxmdW5jdGlvbigpe3RoaXMuc3R5bGUuZGlzcGxheT1cIlwiLGQudHJpZ2dlcihcImFmdGVyX29wZW5cIix7bm9kZTppfSl9KSk6KHRoaXMudHJpZ2dlcihcImJlZm9yZV9vcGVuXCIse25vZGU6aX0pLG9bMF0uY2xhc3NOYW1lPW9bMF0uY2xhc3NOYW1lLnJlcGxhY2UoXCJqc3RyZWUtY2xvc2VkXCIsXCJqc3RyZWUtb3BlblwiKSxvWzBdLnNldEF0dHJpYnV0ZShcImFyaWEtZXhwYW5kZWRcIiwhMCkpKSxpLnN0YXRlLm9wZW5lZD0hMCxyJiZyLmNhbGwodGhpcyxpLCEwKSxvLmxlbmd0aHx8dGhpcy50cmlnZ2VyKFwiYmVmb3JlX29wZW5cIix7bm9kZTppfSksdGhpcy50cmlnZ2VyKFwib3Blbl9ub2RlXCIse25vZGU6aX0pLHMmJm8ubGVuZ3RofHx0aGlzLnRyaWdnZXIoXCJhZnRlcl9vcGVuXCIse25vZGU6aX0pLCEwKTp0aGlzLmlzX2xvYWRpbmcoaSk/c2V0VGltZW91dChlLnByb3h5KGZ1bmN0aW9uKCl7dGhpcy5vcGVuX25vZGUoaSxyLHMpfSx0aGlzKSw1MDApOnZvaWQgdGhpcy5sb2FkX25vZGUoaSxmdW5jdGlvbihlLHQpe3JldHVybiB0P3RoaXMub3Blbl9ub2RlKGUscixzKTpyP3IuY2FsbCh0aGlzLGUsITEpOiExfSk6KHImJnIuY2FsbCh0aGlzLGksITEpLCExKSk6ITF9LF9vcGVuX3RvOmZ1bmN0aW9uKHQpe2lmKHQ9dGhpcy5nZXRfbm9kZSh0KSwhdHx8dC5pZD09PWUuanN0cmVlLnJvb3QpcmV0dXJuITE7dmFyIGkscixzPXQucGFyZW50cztmb3IoaT0wLHI9cy5sZW5ndGg7cj5pO2krPTEpaSE9PWUuanN0cmVlLnJvb3QmJnRoaXMub3Blbl9ub2RlKHNbaV0sITEsMCk7cmV0dXJuIGUoXCIjXCIrdC5pZC5yZXBsYWNlKGUuanN0cmVlLmlkcmVnZXgsXCJcXFxcJCZcIiksdGhpcy5lbGVtZW50KX0sY2xvc2Vfbm9kZTpmdW5jdGlvbihpLHIpe3ZhciBzLG4sYSxvO2lmKGUuaXNBcnJheShpKSl7Zm9yKGk9aS5zbGljZSgpLHM9MCxuPWkubGVuZ3RoO24+cztzKyspdGhpcy5jbG9zZV9ub2RlKGlbc10scik7cmV0dXJuITB9cmV0dXJuIGk9dGhpcy5nZXRfbm9kZShpKSxpJiZpLmlkIT09ZS5qc3RyZWUucm9vdD90aGlzLmlzX2Nsb3NlZChpKT8hMToocj1yPT09dD90aGlzLnNldHRpbmdzLmNvcmUuYW5pbWF0aW9uOnIsYT10aGlzLG89dGhpcy5nZXRfbm9kZShpLCEwKSxvLmxlbmd0aCYmKHI/by5jaGlsZHJlbihcIi5qc3RyZWUtY2hpbGRyZW5cIikuYXR0cihcInN0eWxlXCIsXCJkaXNwbGF5OmJsb2NrICFpbXBvcnRhbnRcIikuZW5kKCkucmVtb3ZlQ2xhc3MoXCJqc3RyZWUtb3BlblwiKS5hZGRDbGFzcyhcImpzdHJlZS1jbG9zZWRcIikuYXR0cihcImFyaWEtZXhwYW5kZWRcIiwhMSkuY2hpbGRyZW4oXCIuanN0cmVlLWNoaWxkcmVuXCIpLnN0b3AoITAsITApLnNsaWRlVXAocixmdW5jdGlvbigpe3RoaXMuc3R5bGUuZGlzcGxheT1cIlwiLG8uY2hpbGRyZW4oXCIuanN0cmVlLWNoaWxkcmVuXCIpLnJlbW92ZSgpLGEudHJpZ2dlcihcImFmdGVyX2Nsb3NlXCIse25vZGU6aX0pfSk6KG9bMF0uY2xhc3NOYW1lPW9bMF0uY2xhc3NOYW1lLnJlcGxhY2UoXCJqc3RyZWUtb3BlblwiLFwianN0cmVlLWNsb3NlZFwiKSxvLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsITEpLmNoaWxkcmVuKFwiLmpzdHJlZS1jaGlsZHJlblwiKS5yZW1vdmUoKSkpLGkuc3RhdGUub3BlbmVkPSExLHRoaXMudHJpZ2dlcihcImNsb3NlX25vZGVcIix7bm9kZTppfSksdm9pZChyJiZvLmxlbmd0aHx8dGhpcy50cmlnZ2VyKFwiYWZ0ZXJfY2xvc2VcIix7bm9kZTppfSkpKTohMX0sdG9nZ2xlX25vZGU6ZnVuY3Rpb24odCl7dmFyIGkscjtpZihlLmlzQXJyYXkodCkpe2Zvcih0PXQuc2xpY2UoKSxpPTAscj10Lmxlbmd0aDtyPmk7aSsrKXRoaXMudG9nZ2xlX25vZGUodFtpXSk7cmV0dXJuITB9cmV0dXJuIHRoaXMuaXNfY2xvc2VkKHQpP3RoaXMub3Blbl9ub2RlKHQpOnRoaXMuaXNfb3Blbih0KT90aGlzLmNsb3NlX25vZGUodCk6dm9pZCAwfSxvcGVuX2FsbDpmdW5jdGlvbih0LGkscil7aWYodHx8KHQ9ZS5qc3RyZWUucm9vdCksdD10aGlzLmdldF9ub2RlKHQpLCF0KXJldHVybiExO3ZhciBzLG4sYSxvPXQuaWQ9PT1lLmpzdHJlZS5yb290P3RoaXMuZ2V0X2NvbnRhaW5lcl91bCgpOnRoaXMuZ2V0X25vZGUodCwhMCk7aWYoIW8ubGVuZ3RoKXtmb3Iocz0wLG49dC5jaGlsZHJlbl9kLmxlbmd0aDtuPnM7cysrKXRoaXMuaXNfY2xvc2VkKHRoaXMuX21vZGVsLmRhdGFbdC5jaGlsZHJlbl9kW3NdXSkmJih0aGlzLl9tb2RlbC5kYXRhW3QuY2hpbGRyZW5fZFtzXV0uc3RhdGUub3BlbmVkPSEwKTtyZXR1cm4gdGhpcy50cmlnZ2VyKFwib3Blbl9hbGxcIix7bm9kZTp0fSl9cj1yfHxvLGE9dGhpcyxvPXRoaXMuaXNfY2xvc2VkKHQpP28uZmluZChcIi5qc3RyZWUtY2xvc2VkXCIpLmFkZEJhY2soKTpvLmZpbmQoXCIuanN0cmVlLWNsb3NlZFwiKSxvLmVhY2goZnVuY3Rpb24oKXthLm9wZW5fbm9kZSh0aGlzLGZ1bmN0aW9uKGUsdCl7dCYmdGhpcy5pc19wYXJlbnQoZSkmJnRoaXMub3Blbl9hbGwoZSxpLHIpfSxpfHwwKX0pLDA9PT1yLmZpbmQoXCIuanN0cmVlLWNsb3NlZFwiKS5sZW5ndGgmJnRoaXMudHJpZ2dlcihcIm9wZW5fYWxsXCIse25vZGU6dGhpcy5nZXRfbm9kZShyKX0pfSxjbG9zZV9hbGw6ZnVuY3Rpb24odCxpKXtpZih0fHwodD1lLmpzdHJlZS5yb290KSx0PXRoaXMuZ2V0X25vZGUodCksIXQpcmV0dXJuITE7dmFyIHIscyxuPXQuaWQ9PT1lLmpzdHJlZS5yb290P3RoaXMuZ2V0X2NvbnRhaW5lcl91bCgpOnRoaXMuZ2V0X25vZGUodCwhMCksYT10aGlzO2ZvcihuLmxlbmd0aCYmKG49dGhpcy5pc19vcGVuKHQpP24uZmluZChcIi5qc3RyZWUtb3BlblwiKS5hZGRCYWNrKCk6bi5maW5kKFwiLmpzdHJlZS1vcGVuXCIpLGUobi5nZXQoKS5yZXZlcnNlKCkpLmVhY2goZnVuY3Rpb24oKXthLmNsb3NlX25vZGUodGhpcyxpfHwwKX0pKSxyPTAscz10LmNoaWxkcmVuX2QubGVuZ3RoO3M+cjtyKyspdGhpcy5fbW9kZWwuZGF0YVt0LmNoaWxkcmVuX2Rbcl1dLnN0YXRlLm9wZW5lZD0hMTt0aGlzLnRyaWdnZXIoXCJjbG9zZV9hbGxcIix7bm9kZTp0fSl9LGlzX2Rpc2FibGVkOmZ1bmN0aW9uKGUpe3JldHVybiBlPXRoaXMuZ2V0X25vZGUoZSksZSYmZS5zdGF0ZSYmZS5zdGF0ZS5kaXNhYmxlZH0sZW5hYmxlX25vZGU6ZnVuY3Rpb24odCl7dmFyIGkscjtpZihlLmlzQXJyYXkodCkpe2Zvcih0PXQuc2xpY2UoKSxpPTAscj10Lmxlbmd0aDtyPmk7aSsrKXRoaXMuZW5hYmxlX25vZGUodFtpXSk7cmV0dXJuITB9cmV0dXJuIHQ9dGhpcy5nZXRfbm9kZSh0KSx0JiZ0LmlkIT09ZS5qc3RyZWUucm9vdD8odC5zdGF0ZS5kaXNhYmxlZD0hMSx0aGlzLmdldF9ub2RlKHQsITApLmNoaWxkcmVuKFwiLmpzdHJlZS1hbmNob3JcIikucmVtb3ZlQ2xhc3MoXCJqc3RyZWUtZGlzYWJsZWRcIikuYXR0cihcImFyaWEtZGlzYWJsZWRcIiwhMSksdm9pZCB0aGlzLnRyaWdnZXIoXCJlbmFibGVfbm9kZVwiLHtub2RlOnR9KSk6ITF9LGRpc2FibGVfbm9kZTpmdW5jdGlvbih0KXt2YXIgaSxyO2lmKGUuaXNBcnJheSh0KSl7Zm9yKHQ9dC5zbGljZSgpLGk9MCxyPXQubGVuZ3RoO3I+aTtpKyspdGhpcy5kaXNhYmxlX25vZGUodFtpXSk7cmV0dXJuITB9cmV0dXJuIHQ9dGhpcy5nZXRfbm9kZSh0KSx0JiZ0LmlkIT09ZS5qc3RyZWUucm9vdD8odC5zdGF0ZS5kaXNhYmxlZD0hMCx0aGlzLmdldF9ub2RlKHQsITApLmNoaWxkcmVuKFwiLmpzdHJlZS1hbmNob3JcIikuYWRkQ2xhc3MoXCJqc3RyZWUtZGlzYWJsZWRcIikuYXR0cihcImFyaWEtZGlzYWJsZWRcIiwhMCksdm9pZCB0aGlzLnRyaWdnZXIoXCJkaXNhYmxlX25vZGVcIix7bm9kZTp0fSkpOiExfSxoaWRlX25vZGU6ZnVuY3Rpb24odCxpKXt2YXIgcixzO2lmKGUuaXNBcnJheSh0KSl7Zm9yKHQ9dC5zbGljZSgpLHI9MCxzPXQubGVuZ3RoO3M+cjtyKyspdGhpcy5oaWRlX25vZGUodFtyXSwhMCk7cmV0dXJuIHRoaXMucmVkcmF3KCksITB9cmV0dXJuIHQ9dGhpcy5nZXRfbm9kZSh0KSx0JiZ0LmlkIT09ZS5qc3RyZWUucm9vdD92b2lkKHQuc3RhdGUuaGlkZGVufHwodC5zdGF0ZS5oaWRkZW49ITAsdGhpcy5fbm9kZV9jaGFuZ2VkKHQucGFyZW50KSxpfHx0aGlzLnJlZHJhdygpLHRoaXMudHJpZ2dlcihcImhpZGVfbm9kZVwiLHtub2RlOnR9KSkpOiExfSxzaG93X25vZGU6ZnVuY3Rpb24odCxpKXt2YXIgcixzO2lmKGUuaXNBcnJheSh0KSl7Zm9yKHQ9dC5zbGljZSgpLHI9MCxzPXQubGVuZ3RoO3M+cjtyKyspdGhpcy5zaG93X25vZGUodFtyXSwhMCk7cmV0dXJuIHRoaXMucmVkcmF3KCksITB9cmV0dXJuIHQ9dGhpcy5nZXRfbm9kZSh0KSx0JiZ0LmlkIT09ZS5qc3RyZWUucm9vdD92b2lkKHQuc3RhdGUuaGlkZGVuJiYodC5zdGF0ZS5oaWRkZW49ITEsdGhpcy5fbm9kZV9jaGFuZ2VkKHQucGFyZW50KSxpfHx0aGlzLnJlZHJhdygpLHRoaXMudHJpZ2dlcihcInNob3dfbm9kZVwiLHtub2RlOnR9KSkpOiExfSxoaWRlX2FsbDpmdW5jdGlvbih0KXt2YXIgaSxyPXRoaXMuX21vZGVsLmRhdGEscz1bXTtmb3IoaSBpbiByKXIuaGFzT3duUHJvcGVydHkoaSkmJmkhPT1lLmpzdHJlZS5yb290JiYhcltpXS5zdGF0ZS5oaWRkZW4mJihyW2ldLnN0YXRlLmhpZGRlbj0hMCxzLnB1c2goaSkpO3JldHVybiB0aGlzLl9tb2RlbC5mb3JjZV9mdWxsX3JlZHJhdz0hMCx0fHx0aGlzLnJlZHJhdygpLHRoaXMudHJpZ2dlcihcImhpZGVfYWxsXCIse25vZGVzOnN9KSxzfSxzaG93X2FsbDpmdW5jdGlvbih0KXt2YXIgaSxyPXRoaXMuX21vZGVsLmRhdGEscz1bXTtmb3IoaSBpbiByKXIuaGFzT3duUHJvcGVydHkoaSkmJmkhPT1lLmpzdHJlZS5yb290JiZyW2ldLnN0YXRlLmhpZGRlbiYmKHJbaV0uc3RhdGUuaGlkZGVuPSExLHMucHVzaChpKSk7cmV0dXJuIHRoaXMuX21vZGVsLmZvcmNlX2Z1bGxfcmVkcmF3PSEwLHR8fHRoaXMucmVkcmF3KCksdGhpcy50cmlnZ2VyKFwic2hvd19hbGxcIix7bm9kZXM6c30pLHN9LGFjdGl2YXRlX25vZGU6ZnVuY3Rpb24oZSxpKXtpZih0aGlzLmlzX2Rpc2FibGVkKGUpKXJldHVybiExO2lmKGkmJlwib2JqZWN0XCI9PXR5cGVvZiBpfHwoaT17fSksdGhpcy5fZGF0YS5jb3JlLmxhc3RfY2xpY2tlZD10aGlzLl9kYXRhLmNvcmUubGFzdF9jbGlja2VkJiZ0aGlzLl9kYXRhLmNvcmUubGFzdF9jbGlja2VkLmlkIT09dD90aGlzLmdldF9ub2RlKHRoaXMuX2RhdGEuY29yZS5sYXN0X2NsaWNrZWQuaWQpOm51bGwsdGhpcy5fZGF0YS5jb3JlLmxhc3RfY2xpY2tlZCYmIXRoaXMuX2RhdGEuY29yZS5sYXN0X2NsaWNrZWQuc3RhdGUuc2VsZWN0ZWQmJih0aGlzLl9kYXRhLmNvcmUubGFzdF9jbGlja2VkPW51bGwpLCF0aGlzLl9kYXRhLmNvcmUubGFzdF9jbGlja2VkJiZ0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQubGVuZ3RoJiYodGhpcy5fZGF0YS5jb3JlLmxhc3RfY2xpY2tlZD10aGlzLmdldF9ub2RlKHRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZFt0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQubGVuZ3RoLTFdKSksdGhpcy5zZXR0aW5ncy5jb3JlLm11bHRpcGxlJiYoaS5tZXRhS2V5fHxpLmN0cmxLZXl8fGkuc2hpZnRLZXkpJiYoIWkuc2hpZnRLZXl8fHRoaXMuX2RhdGEuY29yZS5sYXN0X2NsaWNrZWQmJnRoaXMuZ2V0X3BhcmVudChlKSYmdGhpcy5nZXRfcGFyZW50KGUpPT09dGhpcy5fZGF0YS5jb3JlLmxhc3RfY2xpY2tlZC5wYXJlbnQpKWlmKGkuc2hpZnRLZXkpe3ZhciByLHMsbj10aGlzLmdldF9ub2RlKGUpLmlkLGE9dGhpcy5fZGF0YS5jb3JlLmxhc3RfY2xpY2tlZC5pZCxvPXRoaXMuZ2V0X25vZGUodGhpcy5fZGF0YS5jb3JlLmxhc3RfY2xpY2tlZC5wYXJlbnQpLmNoaWxkcmVuLGQ9ITE7Zm9yKHI9MCxzPW8ubGVuZ3RoO3M+cjtyKz0xKW9bcl09PT1uJiYoZD0hZCksb1tyXT09PWEmJihkPSFkKSx0aGlzLmlzX2Rpc2FibGVkKG9bcl0pfHwhZCYmb1tyXSE9PW4mJm9bcl0hPT1hP3RoaXMuZGVzZWxlY3Rfbm9kZShvW3JdLCEwLGkpOnRoaXMuc2VsZWN0X25vZGUob1tyXSwhMCwhMSxpKTt0aGlzLnRyaWdnZXIoXCJjaGFuZ2VkXCIse2FjdGlvbjpcInNlbGVjdF9ub2RlXCIsbm9kZTp0aGlzLmdldF9ub2RlKGUpLHNlbGVjdGVkOnRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZCxldmVudDppfSl9ZWxzZSB0aGlzLmlzX3NlbGVjdGVkKGUpP3RoaXMuZGVzZWxlY3Rfbm9kZShlLCExLGkpOnRoaXMuc2VsZWN0X25vZGUoZSwhMSwhMSxpKTtlbHNlIXRoaXMuc2V0dGluZ3MuY29yZS5tdWx0aXBsZSYmKGkubWV0YUtleXx8aS5jdHJsS2V5fHxpLnNoaWZ0S2V5KSYmdGhpcy5pc19zZWxlY3RlZChlKT90aGlzLmRlc2VsZWN0X25vZGUoZSwhMSxpKToodGhpcy5kZXNlbGVjdF9hbGwoITApLHRoaXMuc2VsZWN0X25vZGUoZSwhMSwhMSxpKSx0aGlzLl9kYXRhLmNvcmUubGFzdF9jbGlja2VkPXRoaXMuZ2V0X25vZGUoZSkpO3RoaXMudHJpZ2dlcihcImFjdGl2YXRlX25vZGVcIix7bm9kZTp0aGlzLmdldF9ub2RlKGUpLGV2ZW50Oml9KX0saG92ZXJfbm9kZTpmdW5jdGlvbihlKXtpZihlPXRoaXMuZ2V0X25vZGUoZSwhMCksIWV8fCFlLmxlbmd0aHx8ZS5jaGlsZHJlbihcIi5qc3RyZWUtaG92ZXJlZFwiKS5sZW5ndGgpcmV0dXJuITE7dmFyIHQ9dGhpcy5lbGVtZW50LmZpbmQoXCIuanN0cmVlLWhvdmVyZWRcIiksaT10aGlzLmVsZW1lbnQ7dCYmdC5sZW5ndGgmJnRoaXMuZGVob3Zlcl9ub2RlKHQpLGUuY2hpbGRyZW4oXCIuanN0cmVlLWFuY2hvclwiKS5hZGRDbGFzcyhcImpzdHJlZS1ob3ZlcmVkXCIpLHRoaXMudHJpZ2dlcihcImhvdmVyX25vZGVcIix7bm9kZTp0aGlzLmdldF9ub2RlKGUpfSksc2V0VGltZW91dChmdW5jdGlvbigpe2kuYXR0cihcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiLGVbMF0uaWQpfSwwKX0sZGVob3Zlcl9ub2RlOmZ1bmN0aW9uKGUpe3JldHVybiBlPXRoaXMuZ2V0X25vZGUoZSwhMCksZSYmZS5sZW5ndGgmJmUuY2hpbGRyZW4oXCIuanN0cmVlLWhvdmVyZWRcIikubGVuZ3RoPyhlLmNoaWxkcmVuKFwiLmpzdHJlZS1hbmNob3JcIikucmVtb3ZlQ2xhc3MoXCJqc3RyZWUtaG92ZXJlZFwiKSx2b2lkIHRoaXMudHJpZ2dlcihcImRlaG92ZXJfbm9kZVwiLHtub2RlOnRoaXMuZ2V0X25vZGUoZSl9KSk6ITF9LHNlbGVjdF9ub2RlOmZ1bmN0aW9uKHQsaSxyLHMpe3ZhciBuLGEsbztpZihlLmlzQXJyYXkodCkpe2Zvcih0PXQuc2xpY2UoKSxhPTAsbz10Lmxlbmd0aDtvPmE7YSsrKXRoaXMuc2VsZWN0X25vZGUodFthXSxpLHIscyk7cmV0dXJuITB9cmV0dXJuIHQ9dGhpcy5nZXRfbm9kZSh0KSx0JiZ0LmlkIT09ZS5qc3RyZWUucm9vdD8obj10aGlzLmdldF9ub2RlKHQsITApLHZvaWQodC5zdGF0ZS5zZWxlY3RlZHx8KHQuc3RhdGUuc2VsZWN0ZWQ9ITAsdGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLnB1c2godC5pZCkscnx8KG49dGhpcy5fb3Blbl90byh0KSksbiYmbi5sZW5ndGgmJm4uYXR0cihcImFyaWEtc2VsZWN0ZWRcIiwhMCkuY2hpbGRyZW4oXCIuanN0cmVlLWFuY2hvclwiKS5hZGRDbGFzcyhcImpzdHJlZS1jbGlja2VkXCIpLHRoaXMudHJpZ2dlcihcInNlbGVjdF9ub2RlXCIse25vZGU6dCxzZWxlY3RlZDp0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQsZXZlbnQ6c30pLGl8fHRoaXMudHJpZ2dlcihcImNoYW5nZWRcIix7YWN0aW9uOlwic2VsZWN0X25vZGVcIixub2RlOnQsc2VsZWN0ZWQ6dGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLGV2ZW50OnN9KSkpKTohMX0sZGVzZWxlY3Rfbm9kZTpmdW5jdGlvbih0LGkscil7dmFyIHMsbixhO2lmKGUuaXNBcnJheSh0KSl7Zm9yKHQ9dC5zbGljZSgpLHM9MCxuPXQubGVuZ3RoO24+cztzKyspdGhpcy5kZXNlbGVjdF9ub2RlKHRbc10saSxyKTtyZXR1cm4hMH1yZXR1cm4gdD10aGlzLmdldF9ub2RlKHQpLHQmJnQuaWQhPT1lLmpzdHJlZS5yb290PyhhPXRoaXMuZ2V0X25vZGUodCwhMCksdm9pZCh0LnN0YXRlLnNlbGVjdGVkJiYodC5zdGF0ZS5zZWxlY3RlZD0hMSx0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQ9ZS52YWthdGEuYXJyYXlfcmVtb3ZlX2l0ZW0odGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLHQuaWQpLGEubGVuZ3RoJiZhLmF0dHIoXCJhcmlhLXNlbGVjdGVkXCIsITEpLmNoaWxkcmVuKFwiLmpzdHJlZS1hbmNob3JcIikucmVtb3ZlQ2xhc3MoXCJqc3RyZWUtY2xpY2tlZFwiKSx0aGlzLnRyaWdnZXIoXCJkZXNlbGVjdF9ub2RlXCIse25vZGU6dCxzZWxlY3RlZDp0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQsZXZlbnQ6cn0pLGl8fHRoaXMudHJpZ2dlcihcImNoYW5nZWRcIix7YWN0aW9uOlwiZGVzZWxlY3Rfbm9kZVwiLG5vZGU6dCxzZWxlY3RlZDp0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQsZXZlbnQ6cn0pKSkpOiExfSxzZWxlY3RfYWxsOmZ1bmN0aW9uKHQpe3ZhciBpLHIscz10aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQuY29uY2F0KFtdKTtmb3IodGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkPXRoaXMuX21vZGVsLmRhdGFbZS5qc3RyZWUucm9vdF0uY2hpbGRyZW5fZC5jb25jYXQoKSxpPTAscj10aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQubGVuZ3RoO3I+aTtpKyspdGhpcy5fbW9kZWwuZGF0YVt0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWRbaV1dJiYodGhpcy5fbW9kZWwuZGF0YVt0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWRbaV1dLnN0YXRlLnNlbGVjdGVkPSEwKTt0aGlzLnJlZHJhdyghMCksdGhpcy50cmlnZ2VyKFwic2VsZWN0X2FsbFwiLHtzZWxlY3RlZDp0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWR9KSx0fHx0aGlzLnRyaWdnZXIoXCJjaGFuZ2VkXCIse2FjdGlvbjpcInNlbGVjdF9hbGxcIixzZWxlY3RlZDp0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQsb2xkX3NlbGVjdGlvbjpzfSl9LGRlc2VsZWN0X2FsbDpmdW5jdGlvbihlKXt2YXIgdCxpLHI9dGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLmNvbmNhdChbXSk7Zm9yKHQ9MCxpPXRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZC5sZW5ndGg7aT50O3QrKyl0aGlzLl9tb2RlbC5kYXRhW3RoaXMuX2RhdGEuY29yZS5zZWxlY3RlZFt0XV0mJih0aGlzLl9tb2RlbC5kYXRhW3RoaXMuX2RhdGEuY29yZS5zZWxlY3RlZFt0XV0uc3RhdGUuc2VsZWN0ZWQ9ITEpO3RoaXMuX2RhdGEuY29yZS5zZWxlY3RlZD1bXSx0aGlzLmVsZW1lbnQuZmluZChcIi5qc3RyZWUtY2xpY2tlZFwiKS5yZW1vdmVDbGFzcyhcImpzdHJlZS1jbGlja2VkXCIpLnBhcmVudCgpLmF0dHIoXCJhcmlhLXNlbGVjdGVkXCIsITEpLHRoaXMudHJpZ2dlcihcImRlc2VsZWN0X2FsbFwiLHtzZWxlY3RlZDp0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQsbm9kZTpyfSksZXx8dGhpcy50cmlnZ2VyKFwiY2hhbmdlZFwiLHthY3Rpb246XCJkZXNlbGVjdF9hbGxcIixzZWxlY3RlZDp0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQsb2xkX3NlbGVjdGlvbjpyfSl9LGlzX3NlbGVjdGVkOmZ1bmN0aW9uKHQpe3JldHVybiB0PXRoaXMuZ2V0X25vZGUodCksdCYmdC5pZCE9PWUuanN0cmVlLnJvb3Q/dC5zdGF0ZS5zZWxlY3RlZDohMX0sZ2V0X3NlbGVjdGVkOmZ1bmN0aW9uKHQpe3JldHVybiB0P2UubWFwKHRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZCxlLnByb3h5KGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmdldF9ub2RlKGUpfSx0aGlzKSk6dGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLnNsaWNlKCl9LGdldF90b3Bfc2VsZWN0ZWQ6ZnVuY3Rpb24odCl7dmFyIGkscixzLG4sYT10aGlzLmdldF9zZWxlY3RlZCghMCksbz17fTtmb3IoaT0wLHI9YS5sZW5ndGg7cj5pO2krKylvW2FbaV0uaWRdPWFbaV07Zm9yKGk9MCxyPWEubGVuZ3RoO3I+aTtpKyspZm9yKHM9MCxuPWFbaV0uY2hpbGRyZW5fZC5sZW5ndGg7bj5zO3MrKylvW2FbaV0uY2hpbGRyZW5fZFtzXV0mJmRlbGV0ZSBvW2FbaV0uY2hpbGRyZW5fZFtzXV07YT1bXTtmb3IoaSBpbiBvKW8uaGFzT3duUHJvcGVydHkoaSkmJmEucHVzaChpKTtyZXR1cm4gdD9lLm1hcChhLGUucHJveHkoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZ2V0X25vZGUoZSl9LHRoaXMpKTphfSxnZXRfYm90dG9tX3NlbGVjdGVkOmZ1bmN0aW9uKHQpe3ZhciBpLHIscz10aGlzLmdldF9zZWxlY3RlZCghMCksbj1bXTtmb3IoaT0wLHI9cy5sZW5ndGg7cj5pO2krKylzW2ldLmNoaWxkcmVuLmxlbmd0aHx8bi5wdXNoKHNbaV0uaWQpO3JldHVybiB0P2UubWFwKG4sZS5wcm94eShmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5nZXRfbm9kZShlKX0sdGhpcykpOm59LGdldF9zdGF0ZTpmdW5jdGlvbigpe3ZhciB0LGk9e2NvcmU6e29wZW46W10sc2Nyb2xsOntsZWZ0OnRoaXMuZWxlbWVudC5zY3JvbGxMZWZ0KCksdG9wOnRoaXMuZWxlbWVudC5zY3JvbGxUb3AoKX0sc2VsZWN0ZWQ6W119fTtmb3IodCBpbiB0aGlzLl9tb2RlbC5kYXRhKXRoaXMuX21vZGVsLmRhdGEuaGFzT3duUHJvcGVydHkodCkmJnQhPT1lLmpzdHJlZS5yb290JiYodGhpcy5fbW9kZWwuZGF0YVt0XS5zdGF0ZS5vcGVuZWQmJmkuY29yZS5vcGVuLnB1c2godCksdGhpcy5fbW9kZWwuZGF0YVt0XS5zdGF0ZS5zZWxlY3RlZCYmaS5jb3JlLnNlbGVjdGVkLnB1c2godCkpO3JldHVybiBpfSxzZXRfc3RhdGU6ZnVuY3Rpb24oaSxyKXtpZihpKXtpZihpLmNvcmUpe3ZhciBzLG47aWYoaS5jb3JlLm9wZW4pcmV0dXJuIGUuaXNBcnJheShpLmNvcmUub3BlbikmJmkuY29yZS5vcGVuLmxlbmd0aD90aGlzLl9sb2FkX25vZGVzKGkuY29yZS5vcGVuLGZ1bmN0aW9uKGUpe3RoaXMub3Blbl9ub2RlKGUsITEsMCksZGVsZXRlIGkuY29yZS5vcGVuLHRoaXMuc2V0X3N0YXRlKGkscil9LCEwKTooZGVsZXRlIGkuY29yZS5vcGVuLHRoaXMuc2V0X3N0YXRlKGkscikpLCExO2lmKGkuY29yZS5zY3JvbGwpcmV0dXJuIGkuY29yZS5zY3JvbGwmJmkuY29yZS5zY3JvbGwubGVmdCE9PXQmJnRoaXMuZWxlbWVudC5zY3JvbGxMZWZ0KGkuY29yZS5zY3JvbGwubGVmdCksaS5jb3JlLnNjcm9sbCYmaS5jb3JlLnNjcm9sbC50b3AhPT10JiZ0aGlzLmVsZW1lbnQuc2Nyb2xsVG9wKGkuY29yZS5zY3JvbGwudG9wKSxkZWxldGUgaS5jb3JlLnNjcm9sbCx0aGlzLnNldF9zdGF0ZShpLHIpLCExO2lmKGkuY29yZS5zZWxlY3RlZClyZXR1cm4gcz10aGlzLHRoaXMuZGVzZWxlY3RfYWxsKCksZS5lYWNoKGkuY29yZS5zZWxlY3RlZCxmdW5jdGlvbihlLHQpe3Muc2VsZWN0X25vZGUodCwhMSwhMCl9KSxkZWxldGUgaS5jb3JlLnNlbGVjdGVkLHRoaXMuc2V0X3N0YXRlKGksciksITE7Zm9yKG4gaW4gaSlpLmhhc093blByb3BlcnR5KG4pJiZcImNvcmVcIiE9PW4mJi0xPT09ZS5pbkFycmF5KG4sdGhpcy5zZXR0aW5ncy5wbHVnaW5zKSYmZGVsZXRlIGlbbl07aWYoZS5pc0VtcHR5T2JqZWN0KGkuY29yZSkpcmV0dXJuIGRlbGV0ZSBpLmNvcmUsdGhpcy5zZXRfc3RhdGUoaSxyKSwhMX1yZXR1cm4gZS5pc0VtcHR5T2JqZWN0KGkpPyhpPW51bGwsciYmci5jYWxsKHRoaXMpLHRoaXMudHJpZ2dlcihcInNldF9zdGF0ZVwiKSwhMSk6ITB9cmV0dXJuITF9LHJlZnJlc2g6ZnVuY3Rpb24odCxpKXt0aGlzLl9kYXRhLmNvcmUuc3RhdGU9aT09PSEwP3t9OnRoaXMuZ2V0X3N0YXRlKCksaSYmZS5pc0Z1bmN0aW9uKGkpJiYodGhpcy5fZGF0YS5jb3JlLnN0YXRlPWkuY2FsbCh0aGlzLHRoaXMuX2RhdGEuY29yZS5zdGF0ZSkpLHRoaXMuX2NudD0wLHRoaXMuX21vZGVsLmRhdGE9e30sdGhpcy5fbW9kZWwuZGF0YVtlLmpzdHJlZS5yb290XT17aWQ6ZS5qc3RyZWUucm9vdCxwYXJlbnQ6bnVsbCxwYXJlbnRzOltdLGNoaWxkcmVuOltdLGNoaWxkcmVuX2Q6W10sc3RhdGU6e2xvYWRlZDohMX19LHRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZD1bXSx0aGlzLl9kYXRhLmNvcmUubGFzdF9jbGlja2VkPW51bGwsdGhpcy5fZGF0YS5jb3JlLmZvY3VzZWQ9bnVsbDt2YXIgcj10aGlzLmdldF9jb250YWluZXJfdWwoKVswXS5jbGFzc05hbWU7dHx8KHRoaXMuZWxlbWVudC5odG1sKFwiPHVsIGNsYXNzPSdcIityK1wiJyByb2xlPSdncm91cCc+PGxpIGNsYXNzPSdqc3RyZWUtaW5pdGlhbC1ub2RlIGpzdHJlZS1sb2FkaW5nIGpzdHJlZS1sZWFmIGpzdHJlZS1sYXN0JyByb2xlPSd0cmVlaXRlbScgaWQ9J2pcIit0aGlzLl9pZCtcIl9sb2FkaW5nJz48aSBjbGFzcz0nanN0cmVlLWljb24ganN0cmVlLW9jbCc+PC9pPjxhIGNsYXNzPSdqc3RyZWUtYW5jaG9yJyBocmVmPScjJz48aSBjbGFzcz0nanN0cmVlLWljb24ganN0cmVlLXRoZW1laWNvbi1oaWRkZW4nPjwvaT5cIit0aGlzLmdldF9zdHJpbmcoXCJMb2FkaW5nIC4uLlwiKStcIjwvYT48L2xpPjwvdWw+XCIpLHRoaXMuZWxlbWVudC5hdHRyKFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCIsXCJqXCIrdGhpcy5faWQrXCJfbG9hZGluZ1wiKSksdGhpcy5sb2FkX25vZGUoZS5qc3RyZWUucm9vdCxmdW5jdGlvbih0LGkpe2kmJih0aGlzLmdldF9jb250YWluZXJfdWwoKVswXS5jbGFzc05hbWU9cix0aGlzLl9maXJzdENoaWxkKHRoaXMuZ2V0X2NvbnRhaW5lcl91bCgpWzBdKSYmdGhpcy5lbGVtZW50LmF0dHIoXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIix0aGlzLl9maXJzdENoaWxkKHRoaXMuZ2V0X2NvbnRhaW5lcl91bCgpWzBdKS5pZCksdGhpcy5zZXRfc3RhdGUoZS5leHRlbmQoITAse30sdGhpcy5fZGF0YS5jb3JlLnN0YXRlKSxmdW5jdGlvbigpe3RoaXMudHJpZ2dlcihcInJlZnJlc2hcIil9KSksdGhpcy5fZGF0YS5jb3JlLnN0YXRlPW51bGx9KX0scmVmcmVzaF9ub2RlOmZ1bmN0aW9uKHQpe2lmKHQ9dGhpcy5nZXRfbm9kZSh0KSwhdHx8dC5pZD09PWUuanN0cmVlLnJvb3QpcmV0dXJuITE7dmFyIGk9W10scj1bXTt0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQuY29uY2F0KFtdKTtyLnB1c2godC5pZCksdC5zdGF0ZS5vcGVuZWQ9PT0hMCYmaS5wdXNoKHQuaWQpLHRoaXMuZ2V0X25vZGUodCwhMCkuZmluZChcIi5qc3RyZWUtb3BlblwiKS5lYWNoKGZ1bmN0aW9uKCl7aS5wdXNoKHRoaXMuaWQpfSksdGhpcy5fbG9hZF9ub2RlcyhyLGUucHJveHkoZnVuY3Rpb24oZSl7dGhpcy5vcGVuX25vZGUoaSwhMSwwKSx0aGlzLnNlbGVjdF9ub2RlKHRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZCksdGhpcy50cmlnZ2VyKFwicmVmcmVzaF9ub2RlXCIse25vZGU6dCxub2RlczplfSl9LHRoaXMpKX0sc2V0X2lkOmZ1bmN0aW9uKHQsaSl7aWYodD10aGlzLmdldF9ub2RlKHQpLCF0fHx0LmlkPT09ZS5qc3RyZWUucm9vdClyZXR1cm4hMTt2YXIgcixzLG49dGhpcy5fbW9kZWwuZGF0YTtmb3IoaT1pLnRvU3RyaW5nKCksblt0LnBhcmVudF0uY2hpbGRyZW5bZS5pbkFycmF5KHQuaWQsblt0LnBhcmVudF0uY2hpbGRyZW4pXT1pLHI9MCxzPXQucGFyZW50cy5sZW5ndGg7cz5yO3IrKyluW3QucGFyZW50c1tyXV0uY2hpbGRyZW5fZFtlLmluQXJyYXkodC5pZCxuW3QucGFyZW50c1tyXV0uY2hpbGRyZW5fZCldPWk7Zm9yKHI9MCxzPXQuY2hpbGRyZW4ubGVuZ3RoO3M+cjtyKyspblt0LmNoaWxkcmVuW3JdXS5wYXJlbnQ9aTtmb3Iocj0wLHM9dC5jaGlsZHJlbl9kLmxlbmd0aDtzPnI7cisrKW5bdC5jaGlsZHJlbl9kW3JdXS5wYXJlbnRzW2UuaW5BcnJheSh0LmlkLG5bdC5jaGlsZHJlbl9kW3JdXS5wYXJlbnRzKV09aTtyZXR1cm4gcj1lLmluQXJyYXkodC5pZCx0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQpLC0xIT09ciYmKHRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZFtyXT1pKSxyPXRoaXMuZ2V0X25vZGUodC5pZCwhMCksciYmKHIuYXR0cihcImlkXCIsaSkuY2hpbGRyZW4oXCIuanN0cmVlLWFuY2hvclwiKS5hdHRyKFwiaWRcIixpK1wiX2FuY2hvclwiKS5lbmQoKS5hdHRyKFwiYXJpYS1sYWJlbGxlZGJ5XCIsaStcIl9hbmNob3JcIiksdGhpcy5lbGVtZW50LmF0dHIoXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIik9PT10LmlkJiZ0aGlzLmVsZW1lbnQuYXR0cihcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiLGkpKSxkZWxldGUgblt0LmlkXSx0LmlkPWksdC5saV9hdHRyLmlkPWksbltpXT10LCEwfSxnZXRfdGV4dDpmdW5jdGlvbih0KXtyZXR1cm4gdD10aGlzLmdldF9ub2RlKHQpLHQmJnQuaWQhPT1lLmpzdHJlZS5yb290P3QudGV4dDohMX0sc2V0X3RleHQ6ZnVuY3Rpb24odCxpKXt2YXIgcixzO2lmKGUuaXNBcnJheSh0KSl7Zm9yKHQ9dC5zbGljZSgpLHI9MCxzPXQubGVuZ3RoO3M+cjtyKyspdGhpcy5zZXRfdGV4dCh0W3JdLGkpO3JldHVybiEwfXJldHVybiB0PXRoaXMuZ2V0X25vZGUodCksdCYmdC5pZCE9PWUuanN0cmVlLnJvb3Q/KHQudGV4dD1pLHRoaXMuZ2V0X25vZGUodCwhMCkubGVuZ3RoJiZ0aGlzLnJlZHJhd19ub2RlKHQuaWQpLHRoaXMudHJpZ2dlcihcInNldF90ZXh0XCIse29iajp0LHRleHQ6aX0pLCEwKTohMX0sZ2V0X2pzb246ZnVuY3Rpb24odCxpLHIpe2lmKHQ9dGhpcy5nZXRfbm9kZSh0fHxlLmpzdHJlZS5yb290KSwhdClyZXR1cm4hMTtpJiZpLmZsYXQmJiFyJiYocj1bXSk7dmFyIHMsbixhPXtpZDp0LmlkLHRleHQ6dC50ZXh0LGljb246dGhpcy5nZXRfaWNvbih0KSxsaV9hdHRyOmUuZXh0ZW5kKCEwLHt9LHQubGlfYXR0ciksYV9hdHRyOmUuZXh0ZW5kKCEwLHt9LHQuYV9hdHRyKSxzdGF0ZTp7fSxkYXRhOmkmJmkubm9fZGF0YT8hMTplLmV4dGVuZCghMCx7fSx0LmRhdGEpfTtpZihpJiZpLmZsYXQ/YS5wYXJlbnQ9dC5wYXJlbnQ6YS5jaGlsZHJlbj1bXSwhaXx8IWkubm9fc3RhdGUpZm9yKHMgaW4gdC5zdGF0ZSl0LnN0YXRlLmhhc093blByb3BlcnR5KHMpJiYoYS5zdGF0ZVtzXT10LnN0YXRlW3NdKTtpZihpJiZpLm5vX2lkJiYoZGVsZXRlIGEuaWQsYS5saV9hdHRyJiZhLmxpX2F0dHIuaWQmJmRlbGV0ZSBhLmxpX2F0dHIuaWQsYS5hX2F0dHImJmEuYV9hdHRyLmlkJiZkZWxldGUgYS5hX2F0dHIuaWQpLGkmJmkuZmxhdCYmdC5pZCE9PWUuanN0cmVlLnJvb3QmJnIucHVzaChhKSwhaXx8IWkubm9fY2hpbGRyZW4pZm9yKHM9MCxuPXQuY2hpbGRyZW4ubGVuZ3RoO24+cztzKyspaSYmaS5mbGF0P3RoaXMuZ2V0X2pzb24odC5jaGlsZHJlbltzXSxpLHIpOmEuY2hpbGRyZW4ucHVzaCh0aGlzLmdldF9qc29uKHQuY2hpbGRyZW5bc10saSkpO3JldHVybiBpJiZpLmZsYXQ/cjp0LmlkPT09ZS5qc3RyZWUucm9vdD9hLmNoaWxkcmVuOmF9LGNyZWF0ZV9ub2RlOmZ1bmN0aW9uKGkscixzLG4sYSl7aWYobnVsbD09PWkmJihpPWUuanN0cmVlLnJvb3QpLGk9dGhpcy5nZXRfbm9kZShpKSwhaSlyZXR1cm4hMTtpZihzPXM9PT10P1wibGFzdFwiOnMsIXMudG9TdHJpbmcoKS5tYXRjaCgvXihiZWZvcmV8YWZ0ZXIpJC8pJiYhYSYmIXRoaXMuaXNfbG9hZGVkKGkpKXJldHVybiB0aGlzLmxvYWRfbm9kZShpLGZ1bmN0aW9uKCl7dGhpcy5jcmVhdGVfbm9kZShpLHIscyxuLCEwKX0pO3J8fChyPXt0ZXh0OnRoaXMuZ2V0X3N0cmluZyhcIk5ldyBub2RlXCIpfSksXCJzdHJpbmdcIj09dHlwZW9mIHImJihyPXt0ZXh0OnJ9KSxyLnRleHQ9PT10JiYoci50ZXh0PXRoaXMuZ2V0X3N0cmluZyhcIk5ldyBub2RlXCIpKTt2YXIgbyxkLGMsbDtzd2l0Y2goaS5pZD09PWUuanN0cmVlLnJvb3QmJihcImJlZm9yZVwiPT09cyYmKHM9XCJmaXJzdFwiKSxcImFmdGVyXCI9PT1zJiYocz1cImxhc3RcIikpLHMpe2Nhc2VcImJlZm9yZVwiOm89dGhpcy5nZXRfbm9kZShpLnBhcmVudCkscz1lLmluQXJyYXkoaS5pZCxvLmNoaWxkcmVuKSxpPW87YnJlYWs7Y2FzZVwiYWZ0ZXJcIjpvPXRoaXMuZ2V0X25vZGUoaS5wYXJlbnQpLHM9ZS5pbkFycmF5KGkuaWQsby5jaGlsZHJlbikrMSxpPW87YnJlYWs7Y2FzZVwiaW5zaWRlXCI6Y2FzZVwiZmlyc3RcIjpzPTA7YnJlYWs7Y2FzZVwibGFzdFwiOnM9aS5jaGlsZHJlbi5sZW5ndGg7YnJlYWs7ZGVmYXVsdDpzfHwocz0wKX1pZihzPmkuY2hpbGRyZW4ubGVuZ3RoJiYocz1pLmNoaWxkcmVuLmxlbmd0aCksci5pZHx8KHIuaWQ9ITApLCF0aGlzLmNoZWNrKFwiY3JlYXRlX25vZGVcIixyLGkscykpcmV0dXJuIHRoaXMuc2V0dGluZ3MuY29yZS5lcnJvci5jYWxsKHRoaXMsdGhpcy5fZGF0YS5jb3JlLmxhc3RfZXJyb3IpLCExO2lmKHIuaWQ9PT0hMCYmZGVsZXRlIHIuaWQscj10aGlzLl9wYXJzZV9tb2RlbF9mcm9tX2pzb24ocixpLmlkLGkucGFyZW50cy5jb25jYXQoKSksIXIpcmV0dXJuITE7Zm9yKG89dGhpcy5nZXRfbm9kZShyKSxkPVtdLGQucHVzaChyKSxkPWQuY29uY2F0KG8uY2hpbGRyZW5fZCksdGhpcy50cmlnZ2VyKFwibW9kZWxcIix7bm9kZXM6ZCxwYXJlbnQ6aS5pZH0pLGkuY2hpbGRyZW5fZD1pLmNoaWxkcmVuX2QuY29uY2F0KGQpLGM9MCxsPWkucGFyZW50cy5sZW5ndGg7bD5jO2MrKyl0aGlzLl9tb2RlbC5kYXRhW2kucGFyZW50c1tjXV0uY2hpbGRyZW5fZD10aGlzLl9tb2RlbC5kYXRhW2kucGFyZW50c1tjXV0uY2hpbGRyZW5fZC5jb25jYXQoZCk7Zm9yKHI9byxvPVtdLGM9MCxsPWkuY2hpbGRyZW4ubGVuZ3RoO2w+YztjKyspb1tjPj1zP2MrMTpjXT1pLmNoaWxkcmVuW2NdO3JldHVybiBvW3NdPXIuaWQsaS5jaGlsZHJlbj1vLHRoaXMucmVkcmF3X25vZGUoaSwhMCksbiYmbi5jYWxsKHRoaXMsdGhpcy5nZXRfbm9kZShyKSksdGhpcy50cmlnZ2VyKFwiY3JlYXRlX25vZGVcIix7bm9kZTp0aGlzLmdldF9ub2RlKHIpLHBhcmVudDppLmlkLHBvc2l0aW9uOnN9KSxyLmlkfSxyZW5hbWVfbm9kZTpmdW5jdGlvbih0LGkpe3ZhciByLHMsbjtpZihlLmlzQXJyYXkodCkpe2Zvcih0PXQuc2xpY2UoKSxyPTAscz10Lmxlbmd0aDtzPnI7cisrKXRoaXMucmVuYW1lX25vZGUodFtyXSxpKTtyZXR1cm4hMH1yZXR1cm4gdD10aGlzLmdldF9ub2RlKHQpLHQmJnQuaWQhPT1lLmpzdHJlZS5yb290PyhuPXQudGV4dCx0aGlzLmNoZWNrKFwicmVuYW1lX25vZGVcIix0LHRoaXMuZ2V0X3BhcmVudCh0KSxpKT8odGhpcy5zZXRfdGV4dCh0LGkpLHRoaXMudHJpZ2dlcihcInJlbmFtZV9ub2RlXCIse25vZGU6dCx0ZXh0Omksb2xkOm59KSwhMCk6KHRoaXMuc2V0dGluZ3MuY29yZS5lcnJvci5jYWxsKHRoaXMsdGhpcy5fZGF0YS5jb3JlLmxhc3RfZXJyb3IpLCExKSk6ITF9LGRlbGV0ZV9ub2RlOmZ1bmN0aW9uKHQpe3ZhciBpLHIscyxuLGEsbyxkLGMsbCxoLF8sdTtpZihlLmlzQXJyYXkodCkpe2Zvcih0PXQuc2xpY2UoKSxpPTAscj10Lmxlbmd0aDtyPmk7aSsrKXRoaXMuZGVsZXRlX25vZGUodFtpXSk7cmV0dXJuITB9aWYodD10aGlzLmdldF9ub2RlKHQpLCF0fHx0LmlkPT09ZS5qc3RyZWUucm9vdClyZXR1cm4hMTtpZihzPXRoaXMuZ2V0X25vZGUodC5wYXJlbnQpLG49ZS5pbkFycmF5KHQuaWQscy5jaGlsZHJlbiksaD0hMSwhdGhpcy5jaGVjayhcImRlbGV0ZV9ub2RlXCIsdCxzLG4pKXJldHVybiB0aGlzLnNldHRpbmdzLmNvcmUuZXJyb3IuY2FsbCh0aGlzLHRoaXMuX2RhdGEuY29yZS5sYXN0X2Vycm9yKSwhMTtmb3IoLTEhPT1uJiYocy5jaGlsZHJlbj1lLnZha2F0YS5hcnJheV9yZW1vdmUocy5jaGlsZHJlbixuKSksYT10LmNoaWxkcmVuX2QuY29uY2F0KFtdKSxhLnB1c2godC5pZCksYz0wLGw9YS5sZW5ndGg7bD5jO2MrKyl7Zm9yKG89MCxkPXQucGFyZW50cy5sZW5ndGg7ZD5vO28rKyluPWUuaW5BcnJheShhW2NdLHRoaXMuX21vZGVsLmRhdGFbdC5wYXJlbnRzW29dXS5jaGlsZHJlbl9kKSwtMSE9PW4mJih0aGlzLl9tb2RlbC5kYXRhW3QucGFyZW50c1tvXV0uY2hpbGRyZW5fZD1lLnZha2F0YS5hcnJheV9yZW1vdmUodGhpcy5fbW9kZWwuZGF0YVt0LnBhcmVudHNbb11dLmNoaWxkcmVuX2QsbikpO3RoaXMuX21vZGVsLmRhdGFbYVtjXV0uc3RhdGUuc2VsZWN0ZWQmJihoPSEwLG49ZS5pbkFycmF5KGFbY10sdGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkKSwtMSE9PW4mJih0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQ9ZS52YWthdGEuYXJyYXlfcmVtb3ZlKHRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZCxuKSkpfWZvcih0aGlzLnRyaWdnZXIoXCJkZWxldGVfbm9kZVwiLHtub2RlOnQscGFyZW50OnMuaWR9KSxoJiZ0aGlzLnRyaWdnZXIoXCJjaGFuZ2VkXCIse2FjdGlvbjpcImRlbGV0ZV9ub2RlXCIsbm9kZTp0LHNlbGVjdGVkOnRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZCxwYXJlbnQ6cy5pZH0pLGM9MCxsPWEubGVuZ3RoO2w+YztjKyspZGVsZXRlIHRoaXMuX21vZGVsLmRhdGFbYVtjXV07cmV0dXJuLTEhPT1lLmluQXJyYXkodGhpcy5fZGF0YS5jb3JlLmZvY3VzZWQsYSkmJih0aGlzLl9kYXRhLmNvcmUuZm9jdXNlZD1udWxsLF89dGhpcy5lbGVtZW50WzBdLnNjcm9sbFRvcCx1PXRoaXMuZWxlbWVudFswXS5zY3JvbGxMZWZ0LHMuaWQ9PT1lLmpzdHJlZS5yb290P3RoaXMuZ2V0X25vZGUodGhpcy5fbW9kZWwuZGF0YVtlLmpzdHJlZS5yb290XS5jaGlsZHJlblswXSwhMCkuY2hpbGRyZW4oXCIuanN0cmVlLWFuY2hvclwiKS5mb2N1cygpOnRoaXMuZ2V0X25vZGUocywhMCkuY2hpbGRyZW4oXCIuanN0cmVlLWFuY2hvclwiKS5mb2N1cygpLHRoaXMuZWxlbWVudFswXS5zY3JvbGxUb3A9Xyx0aGlzLmVsZW1lbnRbMF0uc2Nyb2xsTGVmdD11KSx0aGlzLnJlZHJhd19ub2RlKHMsITApLCEwfSxjaGVjazpmdW5jdGlvbih0LGkscixzLG4pe2k9aSYmaS5pZD9pOnRoaXMuZ2V0X25vZGUoaSkscj1yJiZyLmlkP3I6dGhpcy5nZXRfbm9kZShyKTt2YXIgYT10Lm1hdGNoKC9ebW92ZV9ub2RlfGNvcHlfbm9kZXxjcmVhdGVfbm9kZSQvaSk/cjppLG89dGhpcy5zZXR0aW5ncy5jb3JlLmNoZWNrX2NhbGxiYWNrO3JldHVyblwibW92ZV9ub2RlXCIhPT10JiZcImNvcHlfbm9kZVwiIT09dHx8biYmbi5pc19tdWx0aXx8KGkuaWQhPT1yLmlkfHxcImNvcHlfbm9kZVwiPT09dCkmJmUuaW5BcnJheShpLmlkLHIuY2hpbGRyZW4pIT09cyYmLTE9PT1lLmluQXJyYXkoci5pZCxpLmNoaWxkcmVuX2QpPyhhJiZhLmRhdGEmJihhPWEuZGF0YSksYSYmYS5mdW5jdGlvbnMmJihhLmZ1bmN0aW9uc1t0XT09PSExfHxhLmZ1bmN0aW9uc1t0XT09PSEwKT8oYS5mdW5jdGlvbnNbdF09PT0hMSYmKHRoaXMuX2RhdGEuY29yZS5sYXN0X2Vycm9yPXtlcnJvcjpcImNoZWNrXCIscGx1Z2luOlwiY29yZVwiLGlkOlwiY29yZV8wMlwiLHJlYXNvbjpcIk5vZGUgZGF0YSBwcmV2ZW50cyBmdW5jdGlvbjogXCIrdCxkYXRhOkpTT04uc3RyaW5naWZ5KHtjaGs6dCxwb3M6cyxvYmo6aSYmaS5pZD9pLmlkOiExLHBhcjpyJiZyLmlkP3IuaWQ6ITF9KX0pLGEuZnVuY3Rpb25zW3RdKTpvPT09ITF8fGUuaXNGdW5jdGlvbihvKSYmby5jYWxsKHRoaXMsdCxpLHIscyxuKT09PSExfHxvJiZvW3RdPT09ITE/KHRoaXMuX2RhdGEuY29yZS5sYXN0X2Vycm9yPXtlcnJvcjpcImNoZWNrXCIscGx1Z2luOlwiY29yZVwiLGlkOlwiY29yZV8wM1wiLHJlYXNvbjpcIlVzZXIgY29uZmlnIGZvciBjb3JlLmNoZWNrX2NhbGxiYWNrIHByZXZlbnRzIGZ1bmN0aW9uOiBcIit0LGRhdGE6SlNPTi5zdHJpbmdpZnkoe2Noazp0LHBvczpzLG9iajppJiZpLmlkP2kuaWQ6ITEscGFyOnImJnIuaWQ/ci5pZDohMX0pfSwhMSk6ITApOih0aGlzLl9kYXRhLmNvcmUubGFzdF9lcnJvcj17ZXJyb3I6XCJjaGVja1wiLHBsdWdpbjpcImNvcmVcIixpZDpcImNvcmVfMDFcIixyZWFzb246XCJNb3ZpbmcgcGFyZW50IGluc2lkZSBjaGlsZFwiLGRhdGE6SlNPTi5zdHJpbmdpZnkoe2Noazp0LHBvczpzLG9iajppJiZpLmlkP2kuaWQ6ITEscGFyOnImJnIuaWQ/ci5pZDohMX0pfSwhMSl9LGxhc3RfZXJyb3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGF0YS5jb3JlLmxhc3RfZXJyb3J9LG1vdmVfbm9kZTpmdW5jdGlvbihpLHIscyxuLGEsbyxkKXt2YXIgYyxsLGgsXyx1LGcsZixwLG0sdixqLHksayx4O2lmKHI9dGhpcy5nZXRfbm9kZShyKSxzPXM9PT10PzA6cywhcilyZXR1cm4hMTtpZighcy50b1N0cmluZygpLm1hdGNoKC9eKGJlZm9yZXxhZnRlcikkLykmJiFhJiYhdGhpcy5pc19sb2FkZWQocikpcmV0dXJuIHRoaXMubG9hZF9ub2RlKHIsZnVuY3Rpb24oKXt0aGlzLm1vdmVfbm9kZShpLHIscyxuLCEwLCExLGQpfSk7aWYoZS5pc0FycmF5KGkpKXtpZigxIT09aS5sZW5ndGgpe2ZvcihjPTAsbD1pLmxlbmd0aDtsPmM7YysrKShtPXRoaXMubW92ZV9ub2RlKGlbY10scixzLG4sYSwhMSxkKSkmJihyPW0scz1cImFmdGVyXCIpO3JldHVybiB0aGlzLnJlZHJhdygpLCEwfWk9aVswXX1pZihpPWkmJmkuaWQ/aTp0aGlzLmdldF9ub2RlKGkpLCFpfHxpLmlkPT09ZS5qc3RyZWUucm9vdClyZXR1cm4hMTtpZihoPShpLnBhcmVudHx8ZS5qc3RyZWUucm9vdCkudG9TdHJpbmcoKSx1PXMudG9TdHJpbmcoKS5tYXRjaCgvXihiZWZvcmV8YWZ0ZXIpJC8pJiZyLmlkIT09ZS5qc3RyZWUucm9vdD90aGlzLmdldF9ub2RlKHIucGFyZW50KTpyLGc9ZD9kOnRoaXMuX21vZGVsLmRhdGFbaS5pZF0/dGhpczplLmpzdHJlZS5yZWZlcmVuY2UoaS5pZCksZj0hZ3x8IWcuX2lkfHx0aGlzLl9pZCE9PWcuX2lkLF89ZyYmZy5faWQmJmgmJmcuX21vZGVsLmRhdGFbaF0mJmcuX21vZGVsLmRhdGFbaF0uY2hpbGRyZW4/ZS5pbkFycmF5KGkuaWQsZy5fbW9kZWwuZGF0YVtoXS5jaGlsZHJlbik6LTEsZyYmZy5faWQmJihpPWcuX21vZGVsLmRhdGFbaS5pZF0pLGYpcmV0dXJuKG09dGhpcy5jb3B5X25vZGUoaSxyLHMsbixhLCExLGQpKT8oZyYmZy5kZWxldGVfbm9kZShpKSxtKTohMTtzd2l0Y2goci5pZD09PWUuanN0cmVlLnJvb3QmJihcImJlZm9yZVwiPT09cyYmKHM9XCJmaXJzdFwiKSxcImFmdGVyXCI9PT1zJiYocz1cImxhc3RcIikpLHMpe2Nhc2VcImJlZm9yZVwiOnM9ZS5pbkFycmF5KHIuaWQsdS5jaGlsZHJlbik7YnJlYWs7Y2FzZVwiYWZ0ZXJcIjpzPWUuaW5BcnJheShyLmlkLHUuY2hpbGRyZW4pKzE7YnJlYWs7Y2FzZVwiaW5zaWRlXCI6Y2FzZVwiZmlyc3RcIjpzPTA7YnJlYWs7Y2FzZVwibGFzdFwiOnM9dS5jaGlsZHJlbi5sZW5ndGg7YnJlYWs7ZGVmYXVsdDpzfHwocz0wKX1pZihzPnUuY2hpbGRyZW4ubGVuZ3RoJiYocz11LmNoaWxkcmVuLmxlbmd0aCksIXRoaXMuY2hlY2soXCJtb3ZlX25vZGVcIixpLHUscyx7Y29yZTohMCxvcmlnaW46ZCxpc19tdWx0aTpnJiZnLl9pZCYmZy5faWQhPT10aGlzLl9pZCxpc19mb3JlaWduOiFnfHwhZy5faWR9KSlyZXR1cm4gdGhpcy5zZXR0aW5ncy5jb3JlLmVycm9yLmNhbGwodGhpcyx0aGlzLl9kYXRhLmNvcmUubGFzdF9lcnJvciksITE7aWYoaS5wYXJlbnQ9PT11LmlkKXtmb3IocD11LmNoaWxkcmVuLmNvbmNhdCgpLG09ZS5pbkFycmF5KGkuaWQscCksLTEhPT1tJiYocD1lLnZha2F0YS5hcnJheV9yZW1vdmUocCxtKSxzPm0mJnMtLSksbT1bXSx2PTAsaj1wLmxlbmd0aDtqPnY7disrKW1bdj49cz92KzE6dl09cFt2XTttW3NdPWkuaWQsdS5jaGlsZHJlbj1tLHRoaXMuX25vZGVfY2hhbmdlZCh1LmlkKSx0aGlzLnJlZHJhdyh1LmlkPT09ZS5qc3RyZWUucm9vdCl9ZWxzZXtmb3IobT1pLmNoaWxkcmVuX2QuY29uY2F0KCksbS5wdXNoKGkuaWQpLHY9MCxqPWkucGFyZW50cy5sZW5ndGg7aj52O3YrKyl7Zm9yKHA9W10seD1nLl9tb2RlbC5kYXRhW2kucGFyZW50c1t2XV0uY2hpbGRyZW5fZCx5PTAsaz14Lmxlbmd0aDtrPnk7eSsrKS0xPT09ZS5pbkFycmF5KHhbeV0sbSkmJnAucHVzaCh4W3ldKTtnLl9tb2RlbC5kYXRhW2kucGFyZW50c1t2XV0uY2hpbGRyZW5fZD1wfWZvcihnLl9tb2RlbC5kYXRhW2hdLmNoaWxkcmVuPWUudmFrYXRhLmFycmF5X3JlbW92ZV9pdGVtKGcuX21vZGVsLmRhdGFbaF0uY2hpbGRyZW4saS5pZCksdj0wLGo9dS5wYXJlbnRzLmxlbmd0aDtqPnY7disrKXRoaXMuX21vZGVsLmRhdGFbdS5wYXJlbnRzW3ZdXS5jaGlsZHJlbl9kPXRoaXMuX21vZGVsLmRhdGFbdS5wYXJlbnRzW3ZdXS5jaGlsZHJlbl9kLmNvbmNhdChtKTtmb3IocD1bXSx2PTAsaj11LmNoaWxkcmVuLmxlbmd0aDtqPnY7disrKXBbdj49cz92KzE6dl09dS5jaGlsZHJlblt2XTtmb3IocFtzXT1pLmlkLHUuY2hpbGRyZW49cCx1LmNoaWxkcmVuX2QucHVzaChpLmlkKSx1LmNoaWxkcmVuX2Q9dS5jaGlsZHJlbl9kLmNvbmNhdChpLmNoaWxkcmVuX2QpLGkucGFyZW50PXUuaWQsbT11LnBhcmVudHMuY29uY2F0KCksbS51bnNoaWZ0KHUuaWQpLHg9aS5wYXJlbnRzLmxlbmd0aCxpLnBhcmVudHM9bSxtPW0uY29uY2F0KCksdj0wLGo9aS5jaGlsZHJlbl9kLmxlbmd0aDtqPnY7disrKXRoaXMuX21vZGVsLmRhdGFbaS5jaGlsZHJlbl9kW3ZdXS5wYXJlbnRzPXRoaXMuX21vZGVsLmRhdGFbaS5jaGlsZHJlbl9kW3ZdXS5wYXJlbnRzLnNsaWNlKDAsLTEqeCksQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodGhpcy5fbW9kZWwuZGF0YVtpLmNoaWxkcmVuX2Rbdl1dLnBhcmVudHMsbSk7KGg9PT1lLmpzdHJlZS5yb290fHx1LmlkPT09ZS5qc3RyZWUucm9vdCkmJih0aGlzLl9tb2RlbC5mb3JjZV9mdWxsX3JlZHJhdz0hMCksdGhpcy5fbW9kZWwuZm9yY2VfZnVsbF9yZWRyYXd8fCh0aGlzLl9ub2RlX2NoYW5nZWQoaCksdGhpcy5fbm9kZV9jaGFuZ2VkKHUuaWQpKSxvfHx0aGlzLnJlZHJhdygpfXJldHVybiBuJiZuLmNhbGwodGhpcyxpLHUscyksdGhpcy50cmlnZ2VyKFwibW92ZV9ub2RlXCIse25vZGU6aSxwYXJlbnQ6dS5pZCxwb3NpdGlvbjpzLG9sZF9wYXJlbnQ6aCxvbGRfcG9zaXRpb246Xyxpc19tdWx0aTpnJiZnLl9pZCYmZy5faWQhPT10aGlzLl9pZCxpc19mb3JlaWduOiFnfHwhZy5faWQsb2xkX2luc3RhbmNlOmcsbmV3X2luc3RhbmNlOnRoaXN9KSxpLmlkfSxjb3B5X25vZGU6ZnVuY3Rpb24oaSxyLHMsbixhLG8sZCl7dmFyIGMsbCxoLF8sdSxnLGYscCxtLHYsajtpZihyPXRoaXMuZ2V0X25vZGUocikscz1zPT09dD8wOnMsIXIpcmV0dXJuITE7aWYoIXMudG9TdHJpbmcoKS5tYXRjaCgvXihiZWZvcmV8YWZ0ZXIpJC8pJiYhYSYmIXRoaXMuaXNfbG9hZGVkKHIpKXJldHVybiB0aGlzLmxvYWRfbm9kZShyLGZ1bmN0aW9uKCl7dGhpcy5jb3B5X25vZGUoaSxyLHMsbiwhMCwhMSxkKX0pO2lmKGUuaXNBcnJheShpKSl7aWYoMSE9PWkubGVuZ3RoKXtmb3IoYz0wLGw9aS5sZW5ndGg7bD5jO2MrKykoXz10aGlzLmNvcHlfbm9kZShpW2NdLHIscyxuLGEsITAsZCkpJiYocj1fLHM9XCJhZnRlclwiKTtyZXR1cm4gdGhpcy5yZWRyYXcoKSwhMH1pPWlbMF19aWYoaT1pJiZpLmlkP2k6dGhpcy5nZXRfbm9kZShpKSwhaXx8aS5pZD09PWUuanN0cmVlLnJvb3QpcmV0dXJuITE7c3dpdGNoKHA9KGkucGFyZW50fHxlLmpzdHJlZS5yb290KS50b1N0cmluZygpLG09cy50b1N0cmluZygpLm1hdGNoKC9eKGJlZm9yZXxhZnRlcikkLykmJnIuaWQhPT1lLmpzdHJlZS5yb290P3RoaXMuZ2V0X25vZGUoci5wYXJlbnQpOnIsdj1kP2Q6dGhpcy5fbW9kZWwuZGF0YVtpLmlkXT90aGlzOmUuanN0cmVlLnJlZmVyZW5jZShpLmlkKSxqPSF2fHwhdi5faWR8fHRoaXMuX2lkIT09di5faWQsdiYmdi5faWQmJihpPXYuX21vZGVsLmRhdGFbaS5pZF0pLHIuaWQ9PT1lLmpzdHJlZS5yb290JiYoXCJiZWZvcmVcIj09PXMmJihzPVwiZmlyc3RcIiksXCJhZnRlclwiPT09cyYmKHM9XCJsYXN0XCIpKSxzKXtjYXNlXCJiZWZvcmVcIjpzPWUuaW5BcnJheShyLmlkLG0uY2hpbGRyZW4pO2JyZWFrO2Nhc2VcImFmdGVyXCI6cz1lLmluQXJyYXkoci5pZCxtLmNoaWxkcmVuKSsxO2JyZWFrO2Nhc2VcImluc2lkZVwiOmNhc2VcImZpcnN0XCI6cz0wO2JyZWFrO2Nhc2VcImxhc3RcIjpzPW0uY2hpbGRyZW4ubGVuZ3RoO2JyZWFrO2RlZmF1bHQ6c3x8KHM9MCl9aWYocz5tLmNoaWxkcmVuLmxlbmd0aCYmKHM9bS5jaGlsZHJlbi5sZW5ndGgpLCF0aGlzLmNoZWNrKFwiY29weV9ub2RlXCIsaSxtLHMse2NvcmU6ITAsb3JpZ2luOmQsaXNfbXVsdGk6diYmdi5faWQmJnYuX2lkIT09dGhpcy5faWQsaXNfZm9yZWlnbjohdnx8IXYuX2lkfSkpcmV0dXJuIHRoaXMuc2V0dGluZ3MuY29yZS5lcnJvci5jYWxsKHRoaXMsdGhpcy5fZGF0YS5jb3JlLmxhc3RfZXJyb3IpLCExO2lmKGY9dj92LmdldF9qc29uKGkse25vX2lkOiEwLG5vX2RhdGE6ITAsbm9fc3RhdGU6ITB9KTppLCFmKXJldHVybiExO2lmKGYuaWQ9PT0hMCYmZGVsZXRlIGYuaWQsZj10aGlzLl9wYXJzZV9tb2RlbF9mcm9tX2pzb24oZixtLmlkLG0ucGFyZW50cy5jb25jYXQoKSksIWYpcmV0dXJuITE7Zm9yKF89dGhpcy5nZXRfbm9kZShmKSxpJiZpLnN0YXRlJiZpLnN0YXRlLmxvYWRlZD09PSExJiYoXy5zdGF0ZS5sb2FkZWQ9ITEpLGg9W10saC5wdXNoKGYpLGg9aC5jb25jYXQoXy5jaGlsZHJlbl9kKSx0aGlzLnRyaWdnZXIoXCJtb2RlbFwiLHtub2RlczpoLHBhcmVudDptLmlkfSksdT0wLGc9bS5wYXJlbnRzLmxlbmd0aDtnPnU7dSsrKXRoaXMuX21vZGVsLmRhdGFbbS5wYXJlbnRzW3VdXS5jaGlsZHJlbl9kPXRoaXMuX21vZGVsLmRhdGFbbS5wYXJlbnRzW3VdXS5jaGlsZHJlbl9kLmNvbmNhdChoKTtmb3IoaD1bXSx1PTAsZz1tLmNoaWxkcmVuLmxlbmd0aDtnPnU7dSsrKWhbdT49cz91KzE6dV09bS5jaGlsZHJlblt1XTtyZXR1cm4gaFtzXT1fLmlkLG0uY2hpbGRyZW49aCxtLmNoaWxkcmVuX2QucHVzaChfLmlkKSxtLmNoaWxkcmVuX2Q9bS5jaGlsZHJlbl9kLmNvbmNhdChfLmNoaWxkcmVuX2QpLG0uaWQ9PT1lLmpzdHJlZS5yb290JiYodGhpcy5fbW9kZWwuZm9yY2VfZnVsbF9yZWRyYXc9ITApLHRoaXMuX21vZGVsLmZvcmNlX2Z1bGxfcmVkcmF3fHx0aGlzLl9ub2RlX2NoYW5nZWQobS5pZCksb3x8dGhpcy5yZWRyYXcobS5pZD09PWUuanN0cmVlLnJvb3QpLG4mJm4uY2FsbCh0aGlzLF8sbSxzKSx0aGlzLnRyaWdnZXIoXCJjb3B5X25vZGVcIix7bm9kZTpfLG9yaWdpbmFsOmkscGFyZW50Om0uaWQscG9zaXRpb246cyxvbGRfcGFyZW50OnAsb2xkX3Bvc2l0aW9uOnYmJnYuX2lkJiZwJiZ2Ll9tb2RlbC5kYXRhW3BdJiZ2Ll9tb2RlbC5kYXRhW3BdLmNoaWxkcmVuP2UuaW5BcnJheShpLmlkLHYuX21vZGVsLmRhdGFbcF0uY2hpbGRyZW4pOi0xLGlzX211bHRpOnYmJnYuX2lkJiZ2Ll9pZCE9PXRoaXMuX2lkLGlzX2ZvcmVpZ246IXZ8fCF2Ll9pZCxvbGRfaW5zdGFuY2U6dixuZXdfaW5zdGFuY2U6dGhpc30pLF8uaWR9LGN1dDpmdW5jdGlvbih0KXtpZih0fHwodD10aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQuY29uY2F0KCkpLGUuaXNBcnJheSh0KXx8KHQ9W3RdKSwhdC5sZW5ndGgpcmV0dXJuITE7dmFyIGkscixzLGQ9W107Zm9yKHI9MCxzPXQubGVuZ3RoO3M+cjtyKyspaT10aGlzLmdldF9ub2RlKHRbcl0pLGkmJmkuaWQmJmkuaWQhPT1lLmpzdHJlZS5yb290JiZkLnB1c2goaSk7cmV0dXJuIGQubGVuZ3RoPyhuPWQsbz10aGlzLGE9XCJtb3ZlX25vZGVcIix2b2lkIHRoaXMudHJpZ2dlcihcImN1dFwiLHtub2RlOnR9KSk6ITF9LGNvcHk6ZnVuY3Rpb24odCl7aWYodHx8KHQ9dGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLmNvbmNhdCgpKSxlLmlzQXJyYXkodCl8fCh0PVt0XSksIXQubGVuZ3RoKXJldHVybiExO3ZhciBpLHIscyxkPVtdO2ZvcihyPTAscz10Lmxlbmd0aDtzPnI7cisrKWk9dGhpcy5nZXRfbm9kZSh0W3JdKSxpJiZpLmlkJiZpLmlkIT09ZS5qc3RyZWUucm9vdCYmZC5wdXNoKGkpO3JldHVybiBkLmxlbmd0aD8obj1kLG89dGhpcyxhPVwiY29weV9ub2RlXCIsdm9pZCB0aGlzLnRyaWdnZXIoXCJjb3B5XCIse25vZGU6dH0pKTohMX0sZ2V0X2J1ZmZlcjpmdW5jdGlvbigpe3JldHVybnttb2RlOmEsbm9kZTpuLGluc3Q6b319LGNhbl9wYXN0ZTpmdW5jdGlvbigpe3JldHVybiBhIT09ITEmJm4hPT0hMX0scGFzdGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT10aGlzLmdldF9ub2RlKGUpLGUmJmEmJmEubWF0Y2goL14oY29weV9ub2RlfG1vdmVfbm9kZSkkLykmJm4/KHRoaXNbYV0obixlLHQsITEsITEsITEsbykmJnRoaXMudHJpZ2dlcihcInBhc3RlXCIse3BhcmVudDplLmlkLG5vZGU6bixtb2RlOmF9KSxuPSExLGE9ITEsdm9pZChvPSExKSk6ITF9LGNsZWFyX2J1ZmZlcjpmdW5jdGlvbigpe249ITEsYT0hMSxvPSExLHRoaXMudHJpZ2dlcihcImNsZWFyX2J1ZmZlclwiKX0sZWRpdDpmdW5jdGlvbih0LGkscil7dmFyIHMsbixhLG8sZCxjLGwsaCxfLHU9ITE7cmV0dXJuKHQ9dGhpcy5nZXRfbm9kZSh0KSk/dGhpcy5zZXR0aW5ncy5jb3JlLmNoZWNrX2NhbGxiYWNrPT09ITE/KHRoaXMuX2RhdGEuY29yZS5sYXN0X2Vycm9yPXtlcnJvcjpcImNoZWNrXCIscGx1Z2luOlwiY29yZVwiLGlkOlwiY29yZV8wN1wiLHJlYXNvbjpcIkNvdWxkIG5vdCBlZGl0IG5vZGUgYmVjYXVzZSBvZiBjaGVja19jYWxsYmFja1wifSx0aGlzLnNldHRpbmdzLmNvcmUuZXJyb3IuY2FsbCh0aGlzLHRoaXMuX2RhdGEuY29yZS5sYXN0X2Vycm9yKSwhMSk6KF89dCxpPVwic3RyaW5nXCI9PXR5cGVvZiBpP2k6dC50ZXh0LHRoaXMuc2V0X3RleHQodCxcIlwiKSx0PXRoaXMuX29wZW5fdG8odCksXy50ZXh0PWkscz10aGlzLl9kYXRhLmNvcmUucnRsLG49dGhpcy5lbGVtZW50LndpZHRoKCksdGhpcy5fZGF0YS5jb3JlLmZvY3VzZWQ9Xy5pZCxhPXQuY2hpbGRyZW4oXCIuanN0cmVlLWFuY2hvclwiKS5mb2N1cygpLG89ZShcIjxzcGFuPlwiKSxkPWksYz1lKFwiPGRpdiAvPlwiLHtjc3M6e3Bvc2l0aW9uOlwiYWJzb2x1dGVcIix0b3A6XCItMjAwcHhcIixsZWZ0OnM/XCIwcHhcIjpcIi0xMDAwcHhcIix2aXNpYmlsaXR5OlwiaGlkZGVuXCJ9fSkuYXBwZW5kVG8oXCJib2R5XCIpLGw9ZShcIjxpbnB1dCAvPlwiLHt2YWx1ZTpkLFwiY2xhc3NcIjpcImpzdHJlZS1yZW5hbWUtaW5wdXRcIixjc3M6e3BhZGRpbmc6XCIwXCIsYm9yZGVyOlwiMXB4IHNvbGlkIHNpbHZlclwiLFwiYm94LXNpemluZ1wiOlwiYm9yZGVyLWJveFwiLGRpc3BsYXk6XCJpbmxpbmUtYmxvY2tcIixoZWlnaHQ6dGhpcy5fZGF0YS5jb3JlLmxpX2hlaWdodCtcInB4XCIsbGluZUhlaWdodDp0aGlzLl9kYXRhLmNvcmUubGlfaGVpZ2h0K1wicHhcIix3aWR0aDpcIjE1MHB4XCJ9LGJsdXI6ZS5wcm94eShmdW5jdGlvbihpKXtpLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLGkucHJldmVudERlZmF1bHQoKTt2YXIgcyxuPW8uY2hpbGRyZW4oXCIuanN0cmVlLXJlbmFtZS1pbnB1dFwiKSxsPW4udmFsKCksaD10aGlzLnNldHRpbmdzLmNvcmUuZm9yY2VfdGV4dDtcIlwiPT09bCYmKGw9ZCksYy5yZW1vdmUoKSxvLnJlcGxhY2VXaXRoKGEpLG8ucmVtb3ZlKCksZD1oP2Q6ZShcIjxkaXY+PC9kaXY+XCIpLmFwcGVuZChlLnBhcnNlSFRNTChkKSkuaHRtbCgpLHRoaXMuc2V0X3RleHQodCxkKSxzPSEhdGhpcy5yZW5hbWVfbm9kZSh0LGg/ZShcIjxkaXY+PC9kaXY+XCIpLnRleHQobCkudGV4dCgpOmUoXCI8ZGl2PjwvZGl2PlwiKS5hcHBlbmQoZS5wYXJzZUhUTUwobCkpLmh0bWwoKSksc3x8dGhpcy5zZXRfdGV4dCh0LGQpLHRoaXMuX2RhdGEuY29yZS5mb2N1c2VkPV8uaWQsc2V0VGltZW91dChlLnByb3h5KGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRfbm9kZShfLmlkLCEwKTtlLmxlbmd0aCYmKHRoaXMuX2RhdGEuY29yZS5mb2N1c2VkPV8uaWQsZS5jaGlsZHJlbihcIi5qc3RyZWUtYW5jaG9yXCIpLmZvY3VzKCkpfSx0aGlzKSwwKSxyJiZyLmNhbGwodGhpcyxfLHMsdSl9LHRoaXMpLGtleWRvd246ZnVuY3Rpb24oZSl7dmFyIHQ9ZS53aGljaDsyNz09PXQmJih1PSEwLHRoaXMudmFsdWU9ZCksKDI3PT09dHx8MTM9PT10fHwzNz09PXR8fDM4PT09dHx8Mzk9PT10fHw0MD09PXR8fDMyPT09dCkmJmUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksKDI3PT09dHx8MTM9PT10KSYmKGUucHJldmVudERlZmF1bHQoKSx0aGlzLmJsdXIoKSl9LGNsaWNrOmZ1bmN0aW9uKGUpe2Uuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9LG1vdXNlZG93bjpmdW5jdGlvbihlKXtlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfSxrZXl1cDpmdW5jdGlvbihlKXtsLndpZHRoKE1hdGgubWluKGMudGV4dChcInBXXCIrdGhpcy52YWx1ZSkud2lkdGgoKSxuKSl9LGtleXByZXNzOmZ1bmN0aW9uKGUpe3JldHVybiAxMz09PWUud2hpY2g/ITE6dm9pZCAwfX0pLGg9e2ZvbnRGYW1pbHk6YS5jc3MoXCJmb250RmFtaWx5XCIpfHxcIlwiLGZvbnRTaXplOmEuY3NzKFwiZm9udFNpemVcIil8fFwiXCIsZm9udFdlaWdodDphLmNzcyhcImZvbnRXZWlnaHRcIil8fFwiXCIsZm9udFN0eWxlOmEuY3NzKFwiZm9udFN0eWxlXCIpfHxcIlwiLGZvbnRTdHJldGNoOmEuY3NzKFwiZm9udFN0cmV0Y2hcIil8fFwiXCIsZm9udFZhcmlhbnQ6YS5jc3MoXCJmb250VmFyaWFudFwiKXx8XCJcIixsZXR0ZXJTcGFjaW5nOmEuY3NzKFwibGV0dGVyU3BhY2luZ1wiKXx8XCJcIix3b3JkU3BhY2luZzphLmNzcyhcIndvcmRTcGFjaW5nXCIpfHxcIlwifSxvLmF0dHIoXCJjbGFzc1wiLGEuYXR0cihcImNsYXNzXCIpKS5hcHBlbmQoYS5jb250ZW50cygpLmNsb25lKCkpLmFwcGVuZChsKSxhLnJlcGxhY2VXaXRoKG8pLGMuY3NzKGgpLHZvaWQgbC5jc3MoaCkud2lkdGgoTWF0aC5taW4oYy50ZXh0KFwicFdcIitsWzBdLnZhbHVlKS53aWR0aCgpLG4pKVswXS5zZWxlY3QoKSk6ITF9LHNldF90aGVtZTpmdW5jdGlvbih0LGkpe2lmKCF0KXJldHVybiExO2lmKGk9PT0hMCl7dmFyIHI9dGhpcy5zZXR0aW5ncy5jb3JlLnRoZW1lcy5kaXI7cnx8KHI9ZS5qc3RyZWUucGF0aCtcIi90aGVtZXNcIiksaT1yK1wiL1wiK3QrXCIvc3R5bGUuY3NzXCJ9aSYmLTE9PT1lLmluQXJyYXkoaSxkKSYmKGUoXCJoZWFkXCIpLmFwcGVuZCgnPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIGhyZWY9XCInK2krJ1wiIHR5cGU9XCJ0ZXh0L2Nzc1wiIC8+JyksZC5wdXNoKGkpKSx0aGlzLl9kYXRhLmNvcmUudGhlbWVzLm5hbWUmJnRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcyhcImpzdHJlZS1cIit0aGlzLl9kYXRhLmNvcmUudGhlbWVzLm5hbWUpLFxudGhpcy5fZGF0YS5jb3JlLnRoZW1lcy5uYW1lPXQsdGhpcy5lbGVtZW50LmFkZENsYXNzKFwianN0cmVlLVwiK3QpLHRoaXMuZWxlbWVudFt0aGlzLnNldHRpbmdzLmNvcmUudGhlbWVzLnJlc3BvbnNpdmU/XCJhZGRDbGFzc1wiOlwicmVtb3ZlQ2xhc3NcIl0oXCJqc3RyZWUtXCIrdCtcIi1yZXNwb25zaXZlXCIpLHRoaXMudHJpZ2dlcihcInNldF90aGVtZVwiLHt0aGVtZTp0fSl9LGdldF90aGVtZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kYXRhLmNvcmUudGhlbWVzLm5hbWV9LHNldF90aGVtZV92YXJpYW50OmZ1bmN0aW9uKGUpe3RoaXMuX2RhdGEuY29yZS50aGVtZXMudmFyaWFudCYmdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKFwianN0cmVlLVwiK3RoaXMuX2RhdGEuY29yZS50aGVtZXMubmFtZStcIi1cIit0aGlzLl9kYXRhLmNvcmUudGhlbWVzLnZhcmlhbnQpLHRoaXMuX2RhdGEuY29yZS50aGVtZXMudmFyaWFudD1lLGUmJnRoaXMuZWxlbWVudC5hZGRDbGFzcyhcImpzdHJlZS1cIit0aGlzLl9kYXRhLmNvcmUudGhlbWVzLm5hbWUrXCItXCIrdGhpcy5fZGF0YS5jb3JlLnRoZW1lcy52YXJpYW50KX0sZ2V0X3RoZW1lX3ZhcmlhbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGF0YS5jb3JlLnRoZW1lcy52YXJpYW50fSxzaG93X3N0cmlwZXM6ZnVuY3Rpb24oKXt0aGlzLl9kYXRhLmNvcmUudGhlbWVzLnN0cmlwZXM9ITAsdGhpcy5nZXRfY29udGFpbmVyX3VsKCkuYWRkQ2xhc3MoXCJqc3RyZWUtc3RyaXBlZFwiKX0saGlkZV9zdHJpcGVzOmZ1bmN0aW9uKCl7dGhpcy5fZGF0YS5jb3JlLnRoZW1lcy5zdHJpcGVzPSExLHRoaXMuZ2V0X2NvbnRhaW5lcl91bCgpLnJlbW92ZUNsYXNzKFwianN0cmVlLXN0cmlwZWRcIil9LHRvZ2dsZV9zdHJpcGVzOmZ1bmN0aW9uKCl7dGhpcy5fZGF0YS5jb3JlLnRoZW1lcy5zdHJpcGVzP3RoaXMuaGlkZV9zdHJpcGVzKCk6dGhpcy5zaG93X3N0cmlwZXMoKX0sc2hvd19kb3RzOmZ1bmN0aW9uKCl7dGhpcy5fZGF0YS5jb3JlLnRoZW1lcy5kb3RzPSEwLHRoaXMuZ2V0X2NvbnRhaW5lcl91bCgpLnJlbW92ZUNsYXNzKFwianN0cmVlLW5vLWRvdHNcIil9LGhpZGVfZG90czpmdW5jdGlvbigpe3RoaXMuX2RhdGEuY29yZS50aGVtZXMuZG90cz0hMSx0aGlzLmdldF9jb250YWluZXJfdWwoKS5hZGRDbGFzcyhcImpzdHJlZS1uby1kb3RzXCIpfSx0b2dnbGVfZG90czpmdW5jdGlvbigpe3RoaXMuX2RhdGEuY29yZS50aGVtZXMuZG90cz90aGlzLmhpZGVfZG90cygpOnRoaXMuc2hvd19kb3RzKCl9LHNob3dfaWNvbnM6ZnVuY3Rpb24oKXt0aGlzLl9kYXRhLmNvcmUudGhlbWVzLmljb25zPSEwLHRoaXMuZ2V0X2NvbnRhaW5lcl91bCgpLnJlbW92ZUNsYXNzKFwianN0cmVlLW5vLWljb25zXCIpfSxoaWRlX2ljb25zOmZ1bmN0aW9uKCl7dGhpcy5fZGF0YS5jb3JlLnRoZW1lcy5pY29ucz0hMSx0aGlzLmdldF9jb250YWluZXJfdWwoKS5hZGRDbGFzcyhcImpzdHJlZS1uby1pY29uc1wiKX0sdG9nZ2xlX2ljb25zOmZ1bmN0aW9uKCl7dGhpcy5fZGF0YS5jb3JlLnRoZW1lcy5pY29ucz90aGlzLmhpZGVfaWNvbnMoKTp0aGlzLnNob3dfaWNvbnMoKX0sc2V0X2ljb246ZnVuY3Rpb24oaSxyKXt2YXIgcyxuLGEsbztpZihlLmlzQXJyYXkoaSkpe2ZvcihpPWkuc2xpY2UoKSxzPTAsbj1pLmxlbmd0aDtuPnM7cysrKXRoaXMuc2V0X2ljb24oaVtzXSxyKTtyZXR1cm4hMH1yZXR1cm4gaT10aGlzLmdldF9ub2RlKGkpLGkmJmkuaWQhPT1lLmpzdHJlZS5yb290PyhvPWkuaWNvbixpLmljb249cj09PSEwfHxudWxsPT09cnx8cj09PXR8fFwiXCI9PT1yPyEwOnIsYT10aGlzLmdldF9ub2RlKGksITApLmNoaWxkcmVuKFwiLmpzdHJlZS1hbmNob3JcIikuY2hpbGRyZW4oXCIuanN0cmVlLXRoZW1laWNvblwiKSxyPT09ITE/dGhpcy5oaWRlX2ljb24oaSk6cj09PSEwfHxudWxsPT09cnx8cj09PXR8fFwiXCI9PT1yPyhhLnJlbW92ZUNsYXNzKFwianN0cmVlLXRoZW1laWNvbi1jdXN0b20gXCIrbykuY3NzKFwiYmFja2dyb3VuZFwiLFwiXCIpLnJlbW92ZUF0dHIoXCJyZWxcIiksbz09PSExJiZ0aGlzLnNob3dfaWNvbihpKSk6LTE9PT1yLmluZGV4T2YoXCIvXCIpJiYtMT09PXIuaW5kZXhPZihcIi5cIik/KGEucmVtb3ZlQ2xhc3MobykuY3NzKFwiYmFja2dyb3VuZFwiLFwiXCIpLGEuYWRkQ2xhc3MocitcIiBqc3RyZWUtdGhlbWVpY29uLWN1c3RvbVwiKS5hdHRyKFwicmVsXCIsciksbz09PSExJiZ0aGlzLnNob3dfaWNvbihpKSk6KGEucmVtb3ZlQ2xhc3MobykuY3NzKFwiYmFja2dyb3VuZFwiLFwiXCIpLGEuYWRkQ2xhc3MoXCJqc3RyZWUtdGhlbWVpY29uLWN1c3RvbVwiKS5jc3MoXCJiYWNrZ3JvdW5kXCIsXCJ1cmwoJ1wiK3IrXCInKSBjZW50ZXIgY2VudGVyIG5vLXJlcGVhdFwiKS5hdHRyKFwicmVsXCIsciksbz09PSExJiZ0aGlzLnNob3dfaWNvbihpKSksITApOiExfSxnZXRfaWNvbjpmdW5jdGlvbih0KXtyZXR1cm4gdD10aGlzLmdldF9ub2RlKHQpLHQmJnQuaWQhPT1lLmpzdHJlZS5yb290P3QuaWNvbjohMX0saGlkZV9pY29uOmZ1bmN0aW9uKHQpe3ZhciBpLHI7aWYoZS5pc0FycmF5KHQpKXtmb3IodD10LnNsaWNlKCksaT0wLHI9dC5sZW5ndGg7cj5pO2krKyl0aGlzLmhpZGVfaWNvbih0W2ldKTtyZXR1cm4hMH1yZXR1cm4gdD10aGlzLmdldF9ub2RlKHQpLHQmJnQhPT1lLmpzdHJlZS5yb290Pyh0Lmljb249ITEsdGhpcy5nZXRfbm9kZSh0LCEwKS5jaGlsZHJlbihcIi5qc3RyZWUtYW5jaG9yXCIpLmNoaWxkcmVuKFwiLmpzdHJlZS10aGVtZWljb25cIikuYWRkQ2xhc3MoXCJqc3RyZWUtdGhlbWVpY29uLWhpZGRlblwiKSwhMCk6ITF9LHNob3dfaWNvbjpmdW5jdGlvbih0KXt2YXIgaSxyLHM7aWYoZS5pc0FycmF5KHQpKXtmb3IodD10LnNsaWNlKCksaT0wLHI9dC5sZW5ndGg7cj5pO2krKyl0aGlzLnNob3dfaWNvbih0W2ldKTtyZXR1cm4hMH1yZXR1cm4gdD10aGlzLmdldF9ub2RlKHQpLHQmJnQhPT1lLmpzdHJlZS5yb290PyhzPXRoaXMuZ2V0X25vZGUodCwhMCksdC5pY29uPXMubGVuZ3RoP3MuY2hpbGRyZW4oXCIuanN0cmVlLWFuY2hvclwiKS5jaGlsZHJlbihcIi5qc3RyZWUtdGhlbWVpY29uXCIpLmF0dHIoXCJyZWxcIik6ITAsdC5pY29ufHwodC5pY29uPSEwKSxzLmNoaWxkcmVuKFwiLmpzdHJlZS1hbmNob3JcIikuY2hpbGRyZW4oXCIuanN0cmVlLXRoZW1laWNvblwiKS5yZW1vdmVDbGFzcyhcImpzdHJlZS10aGVtZWljb24taGlkZGVuXCIpLCEwKTohMX19LGUudmFrYXRhPXt9LGUudmFrYXRhLmF0dHJpYnV0ZXM9ZnVuY3Rpb24odCxpKXt0PWUodClbMF07dmFyIHI9aT97fTpbXTtyZXR1cm4gdCYmdC5hdHRyaWJ1dGVzJiZlLmVhY2godC5hdHRyaWJ1dGVzLGZ1bmN0aW9uKHQscyl7LTE9PT1lLmluQXJyYXkocy5uYW1lLnRvTG93ZXJDYXNlKCksW1wic3R5bGVcIixcImNvbnRlbnRlZGl0YWJsZVwiLFwiaGFzZm9jdXNcIixcInRhYmluZGV4XCJdKSYmbnVsbCE9PXMudmFsdWUmJlwiXCIhPT1lLnRyaW0ocy52YWx1ZSkmJihpP3Jbcy5uYW1lXT1zLnZhbHVlOnIucHVzaChzLm5hbWUpKX0pLHJ9LGUudmFrYXRhLmFycmF5X3VuaXF1ZT1mdW5jdGlvbihlKXt2YXIgaSxyLHM9W10sbj17fTtmb3IoaT0wLHI9ZS5sZW5ndGg7cj5pO2krKyluW2VbaV1dPT09dCYmKHMucHVzaChlW2ldKSxuW2VbaV1dPSEwKTtyZXR1cm4gc30sZS52YWthdGEuYXJyYXlfcmVtb3ZlPWZ1bmN0aW9uKGUsdCxpKXt2YXIgcj1lLnNsaWNlKChpfHx0KSsxfHxlLmxlbmd0aCk7cmV0dXJuIGUubGVuZ3RoPTA+dD9lLmxlbmd0aCt0OnQsZS5wdXNoLmFwcGx5KGUsciksZX0sZS52YWthdGEuYXJyYXlfcmVtb3ZlX2l0ZW09ZnVuY3Rpb24odCxpKXt2YXIgcj1lLmluQXJyYXkoaSx0KTtyZXR1cm4tMSE9PXI/ZS52YWthdGEuYXJyYXlfcmVtb3ZlKHQscik6dH0sZS5qc3RyZWUucGx1Z2lucy5jaGFuZ2VkPWZ1bmN0aW9uKGUsdCl7dmFyIGk9W107dGhpcy50cmlnZ2VyPWZ1bmN0aW9uKGUscil7dmFyIHMsbjtpZihyfHwocj17fSksXCJjaGFuZ2VkXCI9PT1lLnJlcGxhY2UoXCIuanN0cmVlXCIsXCJcIikpe3IuY2hhbmdlZD17c2VsZWN0ZWQ6W10sZGVzZWxlY3RlZDpbXX07dmFyIGE9e307Zm9yKHM9MCxuPWkubGVuZ3RoO24+cztzKyspYVtpW3NdXT0xO2ZvcihzPTAsbj1yLnNlbGVjdGVkLmxlbmd0aDtuPnM7cysrKWFbci5zZWxlY3RlZFtzXV0/YVtyLnNlbGVjdGVkW3NdXT0yOnIuY2hhbmdlZC5zZWxlY3RlZC5wdXNoKHIuc2VsZWN0ZWRbc10pO2ZvcihzPTAsbj1pLmxlbmd0aDtuPnM7cysrKTE9PT1hW2lbc11dJiZyLmNoYW5nZWQuZGVzZWxlY3RlZC5wdXNoKGlbc10pO2k9ci5zZWxlY3RlZC5zbGljZSgpfXQudHJpZ2dlci5jYWxsKHRoaXMsZSxyKX0sdGhpcy5yZWZyZXNoPWZ1bmN0aW9uKGUscil7cmV0dXJuIGk9W10sdC5yZWZyZXNoLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19O3ZhciBfPWwuY3JlYXRlRWxlbWVudChcIklcIik7Xy5jbGFzc05hbWU9XCJqc3RyZWUtaWNvbiBqc3RyZWUtY2hlY2tib3hcIixfLnNldEF0dHJpYnV0ZShcInJvbGVcIixcInByZXNlbnRhdGlvblwiKSxlLmpzdHJlZS5kZWZhdWx0cy5jaGVja2JveD17dmlzaWJsZTohMCx0aHJlZV9zdGF0ZTohMCx3aG9sZV9ub2RlOiEwLGtlZXBfc2VsZWN0ZWRfc3R5bGU6ITAsY2FzY2FkZTpcIlwiLHRpZV9zZWxlY3Rpb246ITB9LGUuanN0cmVlLnBsdWdpbnMuY2hlY2tib3g9ZnVuY3Rpb24oaSxyKXt0aGlzLmJpbmQ9ZnVuY3Rpb24oKXtyLmJpbmQuY2FsbCh0aGlzKSx0aGlzLl9kYXRhLmNoZWNrYm94LnV0bz0hMSx0aGlzLl9kYXRhLmNoZWNrYm94LnNlbGVjdGVkPVtdLHRoaXMuc2V0dGluZ3MuY2hlY2tib3gudGhyZWVfc3RhdGUmJih0aGlzLnNldHRpbmdzLmNoZWNrYm94LmNhc2NhZGU9XCJ1cCtkb3duK3VuZGV0ZXJtaW5lZFwiKSx0aGlzLmVsZW1lbnQub24oXCJpbml0LmpzdHJlZVwiLGUucHJveHkoZnVuY3Rpb24oKXt0aGlzLl9kYXRhLmNoZWNrYm94LnZpc2libGU9dGhpcy5zZXR0aW5ncy5jaGVja2JveC52aXNpYmxlLHRoaXMuc2V0dGluZ3MuY2hlY2tib3gua2VlcF9zZWxlY3RlZF9zdHlsZXx8dGhpcy5lbGVtZW50LmFkZENsYXNzKFwianN0cmVlLWNoZWNrYm94LW5vLWNsaWNrZWRcIiksdGhpcy5zZXR0aW5ncy5jaGVja2JveC50aWVfc2VsZWN0aW9uJiZ0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoXCJqc3RyZWUtY2hlY2tib3gtc2VsZWN0aW9uXCIpfSx0aGlzKSkub24oXCJsb2FkaW5nLmpzdHJlZVwiLGUucHJveHkoZnVuY3Rpb24oKXt0aGlzW3RoaXMuX2RhdGEuY2hlY2tib3gudmlzaWJsZT9cInNob3dfY2hlY2tib3hlc1wiOlwiaGlkZV9jaGVja2JveGVzXCJdKCl9LHRoaXMpKSwtMSE9PXRoaXMuc2V0dGluZ3MuY2hlY2tib3guY2FzY2FkZS5pbmRleE9mKFwidW5kZXRlcm1pbmVkXCIpJiZ0aGlzLmVsZW1lbnQub24oXCJjaGFuZ2VkLmpzdHJlZSB1bmNoZWNrX25vZGUuanN0cmVlIGNoZWNrX25vZGUuanN0cmVlIHVuY2hlY2tfYWxsLmpzdHJlZSBjaGVja19hbGwuanN0cmVlIG1vdmVfbm9kZS5qc3RyZWUgY29weV9ub2RlLmpzdHJlZSByZWRyYXcuanN0cmVlIG9wZW5fbm9kZS5qc3RyZWVcIixlLnByb3h5KGZ1bmN0aW9uKCl7dGhpcy5fZGF0YS5jaGVja2JveC51dG8mJmNsZWFyVGltZW91dCh0aGlzLl9kYXRhLmNoZWNrYm94LnV0byksdGhpcy5fZGF0YS5jaGVja2JveC51dG89c2V0VGltZW91dChlLnByb3h5KHRoaXMuX3VuZGV0ZXJtaW5lZCx0aGlzKSw1MCl9LHRoaXMpKSx0aGlzLnNldHRpbmdzLmNoZWNrYm94LnRpZV9zZWxlY3Rpb258fHRoaXMuZWxlbWVudC5vbihcIm1vZGVsLmpzdHJlZVwiLGUucHJveHkoZnVuY3Rpb24oZSx0KXt2YXIgaSxyLHM9dGhpcy5fbW9kZWwuZGF0YSxuPShzW3QucGFyZW50XSx0Lm5vZGVzKTtmb3IoaT0wLHI9bi5sZW5ndGg7cj5pO2krKylzW25baV1dLnN0YXRlLmNoZWNrZWQ9c1tuW2ldXS5zdGF0ZS5jaGVja2VkfHxzW25baV1dLm9yaWdpbmFsJiZzW25baV1dLm9yaWdpbmFsLnN0YXRlJiZzW25baV1dLm9yaWdpbmFsLnN0YXRlLmNoZWNrZWQsc1tuW2ldXS5zdGF0ZS5jaGVja2VkJiZ0aGlzLl9kYXRhLmNoZWNrYm94LnNlbGVjdGVkLnB1c2gobltpXSl9LHRoaXMpKSwoLTEhPT10aGlzLnNldHRpbmdzLmNoZWNrYm94LmNhc2NhZGUuaW5kZXhPZihcInVwXCIpfHwtMSE9PXRoaXMuc2V0dGluZ3MuY2hlY2tib3guY2FzY2FkZS5pbmRleE9mKFwiZG93blwiKSkmJnRoaXMuZWxlbWVudC5vbihcIm1vZGVsLmpzdHJlZVwiLGUucHJveHkoZnVuY3Rpb24odCxpKXt2YXIgcixzLG4sYSxvLGQsYz10aGlzLl9tb2RlbC5kYXRhLGw9Y1tpLnBhcmVudF0saD1pLm5vZGVzLF89W10sdT10aGlzLnNldHRpbmdzLmNoZWNrYm94LmNhc2NhZGUsZz10aGlzLnNldHRpbmdzLmNoZWNrYm94LnRpZV9zZWxlY3Rpb247aWYoLTEhPT11LmluZGV4T2YoXCJkb3duXCIpKWlmKGwuc3RhdGVbZz9cInNlbGVjdGVkXCI6XCJjaGVja2VkXCJdKXtmb3Iocz0wLG49aC5sZW5ndGg7bj5zO3MrKyljW2hbc11dLnN0YXRlW2c/XCJzZWxlY3RlZFwiOlwiY2hlY2tlZFwiXT0hMDt0aGlzLl9kYXRhW2c/XCJjb3JlXCI6XCJjaGVja2JveFwiXS5zZWxlY3RlZD10aGlzLl9kYXRhW2c/XCJjb3JlXCI6XCJjaGVja2JveFwiXS5zZWxlY3RlZC5jb25jYXQoaCl9ZWxzZSBmb3Iocz0wLG49aC5sZW5ndGg7bj5zO3MrKylpZihjW2hbc11dLnN0YXRlW2c/XCJzZWxlY3RlZFwiOlwiY2hlY2tlZFwiXSl7Zm9yKGE9MCxvPWNbaFtzXV0uY2hpbGRyZW5fZC5sZW5ndGg7bz5hO2ErKyljW2NbaFtzXV0uY2hpbGRyZW5fZFthXV0uc3RhdGVbZz9cInNlbGVjdGVkXCI6XCJjaGVja2VkXCJdPSEwO3RoaXMuX2RhdGFbZz9cImNvcmVcIjpcImNoZWNrYm94XCJdLnNlbGVjdGVkPXRoaXMuX2RhdGFbZz9cImNvcmVcIjpcImNoZWNrYm94XCJdLnNlbGVjdGVkLmNvbmNhdChjW2hbc11dLmNoaWxkcmVuX2QpfWlmKC0xIT09dS5pbmRleE9mKFwidXBcIikpe2ZvcihzPTAsbj1sLmNoaWxkcmVuX2QubGVuZ3RoO24+cztzKyspY1tsLmNoaWxkcmVuX2Rbc11dLmNoaWxkcmVuLmxlbmd0aHx8Xy5wdXNoKGNbbC5jaGlsZHJlbl9kW3NdXS5wYXJlbnQpO2ZvcihfPWUudmFrYXRhLmFycmF5X3VuaXF1ZShfKSxhPTAsbz1fLmxlbmd0aDtvPmE7YSsrKWZvcihsPWNbX1thXV07bCYmbC5pZCE9PWUuanN0cmVlLnJvb3Q7KXtmb3Iocj0wLHM9MCxuPWwuY2hpbGRyZW4ubGVuZ3RoO24+cztzKyspcis9Y1tsLmNoaWxkcmVuW3NdXS5zdGF0ZVtnP1wic2VsZWN0ZWRcIjpcImNoZWNrZWRcIl07aWYociE9PW4pYnJlYWs7bC5zdGF0ZVtnP1wic2VsZWN0ZWRcIjpcImNoZWNrZWRcIl09ITAsdGhpcy5fZGF0YVtnP1wiY29yZVwiOlwiY2hlY2tib3hcIl0uc2VsZWN0ZWQucHVzaChsLmlkKSxkPXRoaXMuZ2V0X25vZGUobCwhMCksZCYmZC5sZW5ndGgmJmQuYXR0cihcImFyaWEtc2VsZWN0ZWRcIiwhMCkuY2hpbGRyZW4oXCIuanN0cmVlLWFuY2hvclwiKS5hZGRDbGFzcyhnP1wianN0cmVlLWNsaWNrZWRcIjpcImpzdHJlZS1jaGVja2VkXCIpLGw9dGhpcy5nZXRfbm9kZShsLnBhcmVudCl9fXRoaXMuX2RhdGFbZz9cImNvcmVcIjpcImNoZWNrYm94XCJdLnNlbGVjdGVkPWUudmFrYXRhLmFycmF5X3VuaXF1ZSh0aGlzLl9kYXRhW2c/XCJjb3JlXCI6XCJjaGVja2JveFwiXS5zZWxlY3RlZCl9LHRoaXMpKS5vbih0aGlzLnNldHRpbmdzLmNoZWNrYm94LnRpZV9zZWxlY3Rpb24/XCJzZWxlY3Rfbm9kZS5qc3RyZWVcIjpcImNoZWNrX25vZGUuanN0cmVlXCIsZS5wcm94eShmdW5jdGlvbih0LGkpe3ZhciByLHMsbixhLG89aS5ub2RlLGQ9dGhpcy5fbW9kZWwuZGF0YSxjPXRoaXMuZ2V0X25vZGUoby5wYXJlbnQpLGw9dGhpcy5nZXRfbm9kZShvLCEwKSxoPXRoaXMuc2V0dGluZ3MuY2hlY2tib3guY2FzY2FkZSxfPXRoaXMuc2V0dGluZ3MuY2hlY2tib3gudGllX3NlbGVjdGlvbjtpZigtMSE9PWguaW5kZXhPZihcImRvd25cIikpZm9yKHRoaXMuX2RhdGFbXz9cImNvcmVcIjpcImNoZWNrYm94XCJdLnNlbGVjdGVkPWUudmFrYXRhLmFycmF5X3VuaXF1ZSh0aGlzLl9kYXRhW18/XCJjb3JlXCI6XCJjaGVja2JveFwiXS5zZWxlY3RlZC5jb25jYXQoby5jaGlsZHJlbl9kKSkscj0wLHM9by5jaGlsZHJlbl9kLmxlbmd0aDtzPnI7cisrKWE9ZFtvLmNoaWxkcmVuX2Rbcl1dLGEuc3RhdGVbXz9cInNlbGVjdGVkXCI6XCJjaGVja2VkXCJdPSEwLGEmJmEub3JpZ2luYWwmJmEub3JpZ2luYWwuc3RhdGUmJmEub3JpZ2luYWwuc3RhdGUudW5kZXRlcm1pbmVkJiYoYS5vcmlnaW5hbC5zdGF0ZS51bmRldGVybWluZWQ9ITEpO2lmKC0xIT09aC5pbmRleE9mKFwidXBcIikpZm9yKDtjJiZjLmlkIT09ZS5qc3RyZWUucm9vdDspe2ZvcihuPTAscj0wLHM9Yy5jaGlsZHJlbi5sZW5ndGg7cz5yO3IrKyluKz1kW2MuY2hpbGRyZW5bcl1dLnN0YXRlW18/XCJzZWxlY3RlZFwiOlwiY2hlY2tlZFwiXTtpZihuIT09cylicmVhaztjLnN0YXRlW18/XCJzZWxlY3RlZFwiOlwiY2hlY2tlZFwiXT0hMCx0aGlzLl9kYXRhW18/XCJjb3JlXCI6XCJjaGVja2JveFwiXS5zZWxlY3RlZC5wdXNoKGMuaWQpLGE9dGhpcy5nZXRfbm9kZShjLCEwKSxhJiZhLmxlbmd0aCYmYS5hdHRyKFwiYXJpYS1zZWxlY3RlZFwiLCEwKS5jaGlsZHJlbihcIi5qc3RyZWUtYW5jaG9yXCIpLmFkZENsYXNzKF8/XCJqc3RyZWUtY2xpY2tlZFwiOlwianN0cmVlLWNoZWNrZWRcIiksYz10aGlzLmdldF9ub2RlKGMucGFyZW50KX0tMSE9PWguaW5kZXhPZihcImRvd25cIikmJmwubGVuZ3RoJiZsLmZpbmQoXCIuanN0cmVlLWFuY2hvclwiKS5hZGRDbGFzcyhfP1wianN0cmVlLWNsaWNrZWRcIjpcImpzdHJlZS1jaGVja2VkXCIpLnBhcmVudCgpLmF0dHIoXCJhcmlhLXNlbGVjdGVkXCIsITApfSx0aGlzKSkub24odGhpcy5zZXR0aW5ncy5jaGVja2JveC50aWVfc2VsZWN0aW9uP1wiZGVzZWxlY3RfYWxsLmpzdHJlZVwiOlwidW5jaGVja19hbGwuanN0cmVlXCIsZS5wcm94eShmdW5jdGlvbih0LGkpe3ZhciByLHMsbixhPXRoaXMuZ2V0X25vZGUoZS5qc3RyZWUucm9vdCksbz10aGlzLl9tb2RlbC5kYXRhO2ZvcihyPTAscz1hLmNoaWxkcmVuX2QubGVuZ3RoO3M+cjtyKyspbj1vW2EuY2hpbGRyZW5fZFtyXV0sbiYmbi5vcmlnaW5hbCYmbi5vcmlnaW5hbC5zdGF0ZSYmbi5vcmlnaW5hbC5zdGF0ZS51bmRldGVybWluZWQmJihuLm9yaWdpbmFsLnN0YXRlLnVuZGV0ZXJtaW5lZD0hMSl9LHRoaXMpKS5vbih0aGlzLnNldHRpbmdzLmNoZWNrYm94LnRpZV9zZWxlY3Rpb24/XCJkZXNlbGVjdF9ub2RlLmpzdHJlZVwiOlwidW5jaGVja19ub2RlLmpzdHJlZVwiLGUucHJveHkoZnVuY3Rpb24odCxpKXt2YXIgcixzLG4sYT1pLm5vZGUsbz10aGlzLmdldF9ub2RlKGEsITApLGQ9dGhpcy5zZXR0aW5ncy5jaGVja2JveC5jYXNjYWRlLGM9dGhpcy5zZXR0aW5ncy5jaGVja2JveC50aWVfc2VsZWN0aW9uO2lmKGEmJmEub3JpZ2luYWwmJmEub3JpZ2luYWwuc3RhdGUmJmEub3JpZ2luYWwuc3RhdGUudW5kZXRlcm1pbmVkJiYoYS5vcmlnaW5hbC5zdGF0ZS51bmRldGVybWluZWQ9ITEpLC0xIT09ZC5pbmRleE9mKFwiZG93blwiKSlmb3Iocj0wLHM9YS5jaGlsZHJlbl9kLmxlbmd0aDtzPnI7cisrKW49dGhpcy5fbW9kZWwuZGF0YVthLmNoaWxkcmVuX2Rbcl1dLG4uc3RhdGVbYz9cInNlbGVjdGVkXCI6XCJjaGVja2VkXCJdPSExLG4mJm4ub3JpZ2luYWwmJm4ub3JpZ2luYWwuc3RhdGUmJm4ub3JpZ2luYWwuc3RhdGUudW5kZXRlcm1pbmVkJiYobi5vcmlnaW5hbC5zdGF0ZS51bmRldGVybWluZWQ9ITEpO2lmKC0xIT09ZC5pbmRleE9mKFwidXBcIikpZm9yKHI9MCxzPWEucGFyZW50cy5sZW5ndGg7cz5yO3IrKyluPXRoaXMuX21vZGVsLmRhdGFbYS5wYXJlbnRzW3JdXSxuLnN0YXRlW2M/XCJzZWxlY3RlZFwiOlwiY2hlY2tlZFwiXT0hMSxuJiZuLm9yaWdpbmFsJiZuLm9yaWdpbmFsLnN0YXRlJiZuLm9yaWdpbmFsLnN0YXRlLnVuZGV0ZXJtaW5lZCYmKG4ub3JpZ2luYWwuc3RhdGUudW5kZXRlcm1pbmVkPSExKSxuPXRoaXMuZ2V0X25vZGUoYS5wYXJlbnRzW3JdLCEwKSxuJiZuLmxlbmd0aCYmbi5hdHRyKFwiYXJpYS1zZWxlY3RlZFwiLCExKS5jaGlsZHJlbihcIi5qc3RyZWUtYW5jaG9yXCIpLnJlbW92ZUNsYXNzKGM/XCJqc3RyZWUtY2xpY2tlZFwiOlwianN0cmVlLWNoZWNrZWRcIik7Zm9yKG49W10scj0wLHM9dGhpcy5fZGF0YVtjP1wiY29yZVwiOlwiY2hlY2tib3hcIl0uc2VsZWN0ZWQubGVuZ3RoO3M+cjtyKyspLTEhPT1kLmluZGV4T2YoXCJkb3duXCIpJiYtMSE9PWUuaW5BcnJheSh0aGlzLl9kYXRhW2M/XCJjb3JlXCI6XCJjaGVja2JveFwiXS5zZWxlY3RlZFtyXSxhLmNoaWxkcmVuX2QpfHwtMSE9PWQuaW5kZXhPZihcInVwXCIpJiYtMSE9PWUuaW5BcnJheSh0aGlzLl9kYXRhW2M/XCJjb3JlXCI6XCJjaGVja2JveFwiXS5zZWxlY3RlZFtyXSxhLnBhcmVudHMpfHxuLnB1c2godGhpcy5fZGF0YVtjP1wiY29yZVwiOlwiY2hlY2tib3hcIl0uc2VsZWN0ZWRbcl0pO3RoaXMuX2RhdGFbYz9cImNvcmVcIjpcImNoZWNrYm94XCJdLnNlbGVjdGVkPWUudmFrYXRhLmFycmF5X3VuaXF1ZShuKSwtMSE9PWQuaW5kZXhPZihcImRvd25cIikmJm8ubGVuZ3RoJiZvLmZpbmQoXCIuanN0cmVlLWFuY2hvclwiKS5yZW1vdmVDbGFzcyhjP1wianN0cmVlLWNsaWNrZWRcIjpcImpzdHJlZS1jaGVja2VkXCIpLnBhcmVudCgpLmF0dHIoXCJhcmlhLXNlbGVjdGVkXCIsITEpfSx0aGlzKSksLTEhPT10aGlzLnNldHRpbmdzLmNoZWNrYm94LmNhc2NhZGUuaW5kZXhPZihcInVwXCIpJiZ0aGlzLmVsZW1lbnQub24oXCJkZWxldGVfbm9kZS5qc3RyZWVcIixlLnByb3h5KGZ1bmN0aW9uKHQsaSl7Zm9yKHZhciByLHMsbixhLG89dGhpcy5nZXRfbm9kZShpLnBhcmVudCksZD10aGlzLl9tb2RlbC5kYXRhLGM9dGhpcy5zZXR0aW5ncy5jaGVja2JveC50aWVfc2VsZWN0aW9uO28mJm8uaWQhPT1lLmpzdHJlZS5yb290JiYhby5zdGF0ZVtjP1wic2VsZWN0ZWRcIjpcImNoZWNrZWRcIl07KXtmb3Iobj0wLHI9MCxzPW8uY2hpbGRyZW4ubGVuZ3RoO3M+cjtyKyspbis9ZFtvLmNoaWxkcmVuW3JdXS5zdGF0ZVtjP1wic2VsZWN0ZWRcIjpcImNoZWNrZWRcIl07aWYoIShzPjAmJm49PT1zKSlicmVhaztvLnN0YXRlW2M/XCJzZWxlY3RlZFwiOlwiY2hlY2tlZFwiXT0hMCx0aGlzLl9kYXRhW2M/XCJjb3JlXCI6XCJjaGVja2JveFwiXS5zZWxlY3RlZC5wdXNoKG8uaWQpLGE9dGhpcy5nZXRfbm9kZShvLCEwKSxhJiZhLmxlbmd0aCYmYS5hdHRyKFwiYXJpYS1zZWxlY3RlZFwiLCEwKS5jaGlsZHJlbihcIi5qc3RyZWUtYW5jaG9yXCIpLmFkZENsYXNzKGM/XCJqc3RyZWUtY2xpY2tlZFwiOlwianN0cmVlLWNoZWNrZWRcIiksbz10aGlzLmdldF9ub2RlKG8ucGFyZW50KX19LHRoaXMpKS5vbihcIm1vdmVfbm9kZS5qc3RyZWVcIixlLnByb3h5KGZ1bmN0aW9uKHQsaSl7dmFyIHIscyxuLGEsbyxkPWkuaXNfbXVsdGksYz1pLm9sZF9wYXJlbnQsbD10aGlzLmdldF9ub2RlKGkucGFyZW50KSxoPXRoaXMuX21vZGVsLmRhdGEsXz10aGlzLnNldHRpbmdzLmNoZWNrYm94LnRpZV9zZWxlY3Rpb247aWYoIWQpZm9yKHI9dGhpcy5nZXRfbm9kZShjKTtyJiZyLmlkIT09ZS5qc3RyZWUucm9vdCYmIXIuc3RhdGVbXz9cInNlbGVjdGVkXCI6XCJjaGVja2VkXCJdOyl7Zm9yKHM9MCxuPTAsYT1yLmNoaWxkcmVuLmxlbmd0aDthPm47bisrKXMrPWhbci5jaGlsZHJlbltuXV0uc3RhdGVbXz9cInNlbGVjdGVkXCI6XCJjaGVja2VkXCJdO2lmKCEoYT4wJiZzPT09YSkpYnJlYWs7ci5zdGF0ZVtfP1wic2VsZWN0ZWRcIjpcImNoZWNrZWRcIl09ITAsdGhpcy5fZGF0YVtfP1wiY29yZVwiOlwiY2hlY2tib3hcIl0uc2VsZWN0ZWQucHVzaChyLmlkKSxvPXRoaXMuZ2V0X25vZGUociwhMCksbyYmby5sZW5ndGgmJm8uYXR0cihcImFyaWEtc2VsZWN0ZWRcIiwhMCkuY2hpbGRyZW4oXCIuanN0cmVlLWFuY2hvclwiKS5hZGRDbGFzcyhfP1wianN0cmVlLWNsaWNrZWRcIjpcImpzdHJlZS1jaGVja2VkXCIpLHI9dGhpcy5nZXRfbm9kZShyLnBhcmVudCl9Zm9yKHI9bDtyJiZyLmlkIT09ZS5qc3RyZWUucm9vdDspe2ZvcihzPTAsbj0wLGE9ci5jaGlsZHJlbi5sZW5ndGg7YT5uO24rKylzKz1oW3IuY2hpbGRyZW5bbl1dLnN0YXRlW18/XCJzZWxlY3RlZFwiOlwiY2hlY2tlZFwiXTtpZihzPT09YSlyLnN0YXRlW18/XCJzZWxlY3RlZFwiOlwiY2hlY2tlZFwiXXx8KHIuc3RhdGVbXz9cInNlbGVjdGVkXCI6XCJjaGVja2VkXCJdPSEwLHRoaXMuX2RhdGFbXz9cImNvcmVcIjpcImNoZWNrYm94XCJdLnNlbGVjdGVkLnB1c2goci5pZCksbz10aGlzLmdldF9ub2RlKHIsITApLG8mJm8ubGVuZ3RoJiZvLmF0dHIoXCJhcmlhLXNlbGVjdGVkXCIsITApLmNoaWxkcmVuKFwiLmpzdHJlZS1hbmNob3JcIikuYWRkQ2xhc3MoXz9cImpzdHJlZS1jbGlja2VkXCI6XCJqc3RyZWUtY2hlY2tlZFwiKSk7ZWxzZXtpZighci5zdGF0ZVtfP1wic2VsZWN0ZWRcIjpcImNoZWNrZWRcIl0pYnJlYWs7ci5zdGF0ZVtfP1wic2VsZWN0ZWRcIjpcImNoZWNrZWRcIl09ITEsdGhpcy5fZGF0YVtfP1wiY29yZVwiOlwiY2hlY2tib3hcIl0uc2VsZWN0ZWQ9ZS52YWthdGEuYXJyYXlfcmVtb3ZlX2l0ZW0odGhpcy5fZGF0YVtfP1wiY29yZVwiOlwiY2hlY2tib3hcIl0uc2VsZWN0ZWQsci5pZCksbz10aGlzLmdldF9ub2RlKHIsITApLG8mJm8ubGVuZ3RoJiZvLmF0dHIoXCJhcmlhLXNlbGVjdGVkXCIsITEpLmNoaWxkcmVuKFwiLmpzdHJlZS1hbmNob3JcIikucmVtb3ZlQ2xhc3MoXz9cImpzdHJlZS1jbGlja2VkXCI6XCJqc3RyZWUtY2hlY2tlZFwiKX1yPXRoaXMuZ2V0X25vZGUoci5wYXJlbnQpfX0sdGhpcykpfSx0aGlzLl91bmRldGVybWluZWQ9ZnVuY3Rpb24oKXtpZihudWxsIT09dGhpcy5lbGVtZW50KXt2YXIgaSxyLHMsbixhPXt9LG89dGhpcy5fbW9kZWwuZGF0YSxkPXRoaXMuc2V0dGluZ3MuY2hlY2tib3gudGllX3NlbGVjdGlvbixjPXRoaXMuX2RhdGFbZD9cImNvcmVcIjpcImNoZWNrYm94XCJdLnNlbGVjdGVkLGw9W10saD10aGlzO2ZvcihpPTAscj1jLmxlbmd0aDtyPmk7aSsrKWlmKG9bY1tpXV0mJm9bY1tpXV0ucGFyZW50cylmb3Iocz0wLG49b1tjW2ldXS5wYXJlbnRzLmxlbmd0aDtuPnM7cysrKWFbb1tjW2ldXS5wYXJlbnRzW3NdXT09PXQmJm9bY1tpXV0ucGFyZW50c1tzXSE9PWUuanN0cmVlLnJvb3QmJihhW29bY1tpXV0ucGFyZW50c1tzXV09ITAsbC5wdXNoKG9bY1tpXV0ucGFyZW50c1tzXSkpO2Zvcih0aGlzLmVsZW1lbnQuZmluZChcIi5qc3RyZWUtY2xvc2VkXCIpLm5vdChcIjpoYXMoLmpzdHJlZS1jaGlsZHJlbilcIikuZWFjaChmdW5jdGlvbigpe3ZhciBkLGM9aC5nZXRfbm9kZSh0aGlzKTtpZihjLnN0YXRlLmxvYWRlZCl7Zm9yKGk9MCxyPWMuY2hpbGRyZW5fZC5sZW5ndGg7cj5pO2krKylpZihkPW9bYy5jaGlsZHJlbl9kW2ldXSwhZC5zdGF0ZS5sb2FkZWQmJmQub3JpZ2luYWwmJmQub3JpZ2luYWwuc3RhdGUmJmQub3JpZ2luYWwuc3RhdGUudW5kZXRlcm1pbmVkJiZkLm9yaWdpbmFsLnN0YXRlLnVuZGV0ZXJtaW5lZD09PSEwKWZvcihhW2QuaWRdPT09dCYmZC5pZCE9PWUuanN0cmVlLnJvb3QmJihhW2QuaWRdPSEwLGwucHVzaChkLmlkKSkscz0wLG49ZC5wYXJlbnRzLmxlbmd0aDtuPnM7cysrKWFbZC5wYXJlbnRzW3NdXT09PXQmJmQucGFyZW50c1tzXSE9PWUuanN0cmVlLnJvb3QmJihhW2QucGFyZW50c1tzXV09ITAsbC5wdXNoKGQucGFyZW50c1tzXSkpfWVsc2UgaWYoYy5vcmlnaW5hbCYmYy5vcmlnaW5hbC5zdGF0ZSYmYy5vcmlnaW5hbC5zdGF0ZS51bmRldGVybWluZWQmJmMub3JpZ2luYWwuc3RhdGUudW5kZXRlcm1pbmVkPT09ITApZm9yKGFbYy5pZF09PT10JiZjLmlkIT09ZS5qc3RyZWUucm9vdCYmKGFbYy5pZF09ITAsbC5wdXNoKGMuaWQpKSxzPTAsbj1jLnBhcmVudHMubGVuZ3RoO24+cztzKyspYVtjLnBhcmVudHNbc11dPT09dCYmYy5wYXJlbnRzW3NdIT09ZS5qc3RyZWUucm9vdCYmKGFbYy5wYXJlbnRzW3NdXT0hMCxsLnB1c2goYy5wYXJlbnRzW3NdKSl9KSx0aGlzLmVsZW1lbnQuZmluZChcIi5qc3RyZWUtdW5kZXRlcm1pbmVkXCIpLnJlbW92ZUNsYXNzKFwianN0cmVlLXVuZGV0ZXJtaW5lZFwiKSxpPTAscj1sLmxlbmd0aDtyPmk7aSsrKW9bbFtpXV0uc3RhdGVbZD9cInNlbGVjdGVkXCI6XCJjaGVja2VkXCJdfHwoYz10aGlzLmdldF9ub2RlKGxbaV0sITApLGMmJmMubGVuZ3RoJiZjLmNoaWxkcmVuKFwiLmpzdHJlZS1hbmNob3JcIikuY2hpbGRyZW4oXCIuanN0cmVlLWNoZWNrYm94XCIpLmFkZENsYXNzKFwianN0cmVlLXVuZGV0ZXJtaW5lZFwiKSl9fSx0aGlzLnJlZHJhd19ub2RlPWZ1bmN0aW9uKHQsaSxzLG4pe2lmKHQ9ci5yZWRyYXdfbm9kZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBhLG8sZD1udWxsLGM9bnVsbDtmb3IoYT0wLG89dC5jaGlsZE5vZGVzLmxlbmd0aDtvPmE7YSsrKWlmKHQuY2hpbGROb2Rlc1thXSYmdC5jaGlsZE5vZGVzW2FdLmNsYXNzTmFtZSYmLTEhPT10LmNoaWxkTm9kZXNbYV0uY2xhc3NOYW1lLmluZGV4T2YoXCJqc3RyZWUtYW5jaG9yXCIpKXtkPXQuY2hpbGROb2Rlc1thXTticmVha31kJiYoIXRoaXMuc2V0dGluZ3MuY2hlY2tib3gudGllX3NlbGVjdGlvbiYmdGhpcy5fbW9kZWwuZGF0YVt0LmlkXS5zdGF0ZS5jaGVja2VkJiYoZC5jbGFzc05hbWUrPVwiIGpzdHJlZS1jaGVja2VkXCIpLGM9Xy5jbG9uZU5vZGUoITEpLHRoaXMuX21vZGVsLmRhdGFbdC5pZF0uc3RhdGUuY2hlY2tib3hfZGlzYWJsZWQmJihjLmNsYXNzTmFtZSs9XCIganN0cmVlLWNoZWNrYm94LWRpc2FibGVkXCIpLGQuaW5zZXJ0QmVmb3JlKGMsZC5jaGlsZE5vZGVzWzBdKSl9cmV0dXJuIHN8fC0xPT09dGhpcy5zZXR0aW5ncy5jaGVja2JveC5jYXNjYWRlLmluZGV4T2YoXCJ1bmRldGVybWluZWRcIil8fCh0aGlzLl9kYXRhLmNoZWNrYm94LnV0byYmY2xlYXJUaW1lb3V0KHRoaXMuX2RhdGEuY2hlY2tib3gudXRvKSx0aGlzLl9kYXRhLmNoZWNrYm94LnV0bz1zZXRUaW1lb3V0KGUucHJveHkodGhpcy5fdW5kZXRlcm1pbmVkLHRoaXMpLDUwKSksdH0sdGhpcy5zaG93X2NoZWNrYm94ZXM9ZnVuY3Rpb24oKXt0aGlzLl9kYXRhLmNvcmUudGhlbWVzLmNoZWNrYm94ZXM9ITAsdGhpcy5nZXRfY29udGFpbmVyX3VsKCkucmVtb3ZlQ2xhc3MoXCJqc3RyZWUtbm8tY2hlY2tib3hlc1wiKX0sdGhpcy5oaWRlX2NoZWNrYm94ZXM9ZnVuY3Rpb24oKXt0aGlzLl9kYXRhLmNvcmUudGhlbWVzLmNoZWNrYm94ZXM9ITEsdGhpcy5nZXRfY29udGFpbmVyX3VsKCkuYWRkQ2xhc3MoXCJqc3RyZWUtbm8tY2hlY2tib3hlc1wiKX0sdGhpcy50b2dnbGVfY2hlY2tib3hlcz1mdW5jdGlvbigpe3RoaXMuX2RhdGEuY29yZS50aGVtZXMuY2hlY2tib3hlcz90aGlzLmhpZGVfY2hlY2tib3hlcygpOnRoaXMuc2hvd19jaGVja2JveGVzKCl9LHRoaXMuaXNfdW5kZXRlcm1pbmVkPWZ1bmN0aW9uKHQpe3Q9dGhpcy5nZXRfbm9kZSh0KTt2YXIgaSxyLHM9dGhpcy5zZXR0aW5ncy5jaGVja2JveC5jYXNjYWRlLG49dGhpcy5zZXR0aW5ncy5jaGVja2JveC50aWVfc2VsZWN0aW9uLGE9dGhpcy5fZGF0YVtuP1wiY29yZVwiOlwiY2hlY2tib3hcIl0uc2VsZWN0ZWQsbz10aGlzLl9tb2RlbC5kYXRhO2lmKCF0fHx0LnN0YXRlW24/XCJzZWxlY3RlZFwiOlwiY2hlY2tlZFwiXT09PSEwfHwtMT09PXMuaW5kZXhPZihcInVuZGV0ZXJtaW5lZFwiKXx8LTE9PT1zLmluZGV4T2YoXCJkb3duXCIpJiYtMT09PXMuaW5kZXhPZihcInVwXCIpKXJldHVybiExO2lmKCF0LnN0YXRlLmxvYWRlZCYmdC5vcmlnaW5hbC5zdGF0ZS51bmRldGVybWluZWQ9PT0hMClyZXR1cm4hMDtmb3IoaT0wLHI9dC5jaGlsZHJlbl9kLmxlbmd0aDtyPmk7aSsrKWlmKC0xIT09ZS5pbkFycmF5KHQuY2hpbGRyZW5fZFtpXSxhKXx8IW9bdC5jaGlsZHJlbl9kW2ldXS5zdGF0ZS5sb2FkZWQmJm9bdC5jaGlsZHJlbl9kW2ldXS5vcmlnaW5hbC5zdGF0ZS51bmRldGVybWluZWQpcmV0dXJuITA7cmV0dXJuITF9LHRoaXMuZGlzYWJsZV9jaGVja2JveD1mdW5jdGlvbih0KXt2YXIgaSxyLHM7aWYoZS5pc0FycmF5KHQpKXtmb3IodD10LnNsaWNlKCksaT0wLHI9dC5sZW5ndGg7cj5pO2krKyl0aGlzLmRpc2FibGVfY2hlY2tib3godFtpXSk7cmV0dXJuITB9cmV0dXJuIHQ9dGhpcy5nZXRfbm9kZSh0KSx0JiZ0LmlkIT09ZS5qc3RyZWUucm9vdD8ocz10aGlzLmdldF9ub2RlKHQsITApLHZvaWQodC5zdGF0ZS5jaGVja2JveF9kaXNhYmxlZHx8KHQuc3RhdGUuY2hlY2tib3hfZGlzYWJsZWQ9ITAscyYmcy5sZW5ndGgmJnMuY2hpbGRyZW4oXCIuanN0cmVlLWFuY2hvclwiKS5jaGlsZHJlbihcIi5qc3RyZWUtY2hlY2tib3hcIikuYWRkQ2xhc3MoXCJqc3RyZWUtY2hlY2tib3gtZGlzYWJsZWRcIiksdGhpcy50cmlnZ2VyKFwiZGlzYWJsZV9jaGVja2JveFwiLHtub2RlOnR9KSkpKTohMX0sdGhpcy5lbmFibGVfY2hlY2tib3g9ZnVuY3Rpb24odCl7dmFyIGkscixzO2lmKGUuaXNBcnJheSh0KSl7Zm9yKHQ9dC5zbGljZSgpLGk9MCxyPXQubGVuZ3RoO3I+aTtpKyspdGhpcy5lbmFibGVfY2hlY2tib3godFtpXSk7cmV0dXJuITB9cmV0dXJuIHQ9dGhpcy5nZXRfbm9kZSh0KSx0JiZ0LmlkIT09ZS5qc3RyZWUucm9vdD8ocz10aGlzLmdldF9ub2RlKHQsITApLHZvaWQodC5zdGF0ZS5jaGVja2JveF9kaXNhYmxlZCYmKHQuc3RhdGUuY2hlY2tib3hfZGlzYWJsZWQ9ITEscyYmcy5sZW5ndGgmJnMuY2hpbGRyZW4oXCIuanN0cmVlLWFuY2hvclwiKS5jaGlsZHJlbihcIi5qc3RyZWUtY2hlY2tib3hcIikucmVtb3ZlQ2xhc3MoXCJqc3RyZWUtY2hlY2tib3gtZGlzYWJsZWRcIiksdGhpcy50cmlnZ2VyKFwiZW5hYmxlX2NoZWNrYm94XCIse25vZGU6dH0pKSkpOiExfSx0aGlzLmFjdGl2YXRlX25vZGU9ZnVuY3Rpb24odCxpKXtyZXR1cm4gZShpLnRhcmdldCkuaGFzQ2xhc3MoXCJqc3RyZWUtY2hlY2tib3gtZGlzYWJsZWRcIik/ITE6KHRoaXMuc2V0dGluZ3MuY2hlY2tib3gudGllX3NlbGVjdGlvbiYmKHRoaXMuc2V0dGluZ3MuY2hlY2tib3gud2hvbGVfbm9kZXx8ZShpLnRhcmdldCkuaGFzQ2xhc3MoXCJqc3RyZWUtY2hlY2tib3hcIikpJiYoaS5jdHJsS2V5PSEwKSx0aGlzLnNldHRpbmdzLmNoZWNrYm94LnRpZV9zZWxlY3Rpb258fCF0aGlzLnNldHRpbmdzLmNoZWNrYm94Lndob2xlX25vZGUmJiFlKGkudGFyZ2V0KS5oYXNDbGFzcyhcImpzdHJlZS1jaGVja2JveFwiKT9yLmFjdGl2YXRlX25vZGUuY2FsbCh0aGlzLHQsaSk6dGhpcy5pc19kaXNhYmxlZCh0KT8hMToodGhpcy5pc19jaGVja2VkKHQpP3RoaXMudW5jaGVja19ub2RlKHQsaSk6dGhpcy5jaGVja19ub2RlKHQsaSksdm9pZCB0aGlzLnRyaWdnZXIoXCJhY3RpdmF0ZV9ub2RlXCIse25vZGU6dGhpcy5nZXRfbm9kZSh0KX0pKSl9LHRoaXMuY2hlY2tfbm9kZT1mdW5jdGlvbih0LGkpe2lmKHRoaXMuc2V0dGluZ3MuY2hlY2tib3gudGllX3NlbGVjdGlvbilyZXR1cm4gdGhpcy5zZWxlY3Rfbm9kZSh0LCExLCEwLGkpO3ZhciByLHMsbjtpZihlLmlzQXJyYXkodCkpe2Zvcih0PXQuc2xpY2UoKSxzPTAsbj10Lmxlbmd0aDtuPnM7cysrKXRoaXMuY2hlY2tfbm9kZSh0W3NdLGkpO3JldHVybiEwfXJldHVybiB0PXRoaXMuZ2V0X25vZGUodCksdCYmdC5pZCE9PWUuanN0cmVlLnJvb3Q/KHI9dGhpcy5nZXRfbm9kZSh0LCEwKSx2b2lkKHQuc3RhdGUuY2hlY2tlZHx8KHQuc3RhdGUuY2hlY2tlZD0hMCx0aGlzLl9kYXRhLmNoZWNrYm94LnNlbGVjdGVkLnB1c2godC5pZCksciYmci5sZW5ndGgmJnIuY2hpbGRyZW4oXCIuanN0cmVlLWFuY2hvclwiKS5hZGRDbGFzcyhcImpzdHJlZS1jaGVja2VkXCIpLHRoaXMudHJpZ2dlcihcImNoZWNrX25vZGVcIix7bm9kZTp0LHNlbGVjdGVkOnRoaXMuX2RhdGEuY2hlY2tib3guc2VsZWN0ZWQsZXZlbnQ6aX0pKSkpOiExfSx0aGlzLnVuY2hlY2tfbm9kZT1mdW5jdGlvbih0LGkpe2lmKHRoaXMuc2V0dGluZ3MuY2hlY2tib3gudGllX3NlbGVjdGlvbilyZXR1cm4gdGhpcy5kZXNlbGVjdF9ub2RlKHQsITEsaSk7dmFyIHIscyxuO2lmKGUuaXNBcnJheSh0KSl7Zm9yKHQ9dC5zbGljZSgpLHI9MCxzPXQubGVuZ3RoO3M+cjtyKyspdGhpcy51bmNoZWNrX25vZGUodFtyXSxpKTtyZXR1cm4hMH1yZXR1cm4gdD10aGlzLmdldF9ub2RlKHQpLHQmJnQuaWQhPT1lLmpzdHJlZS5yb290PyhuPXRoaXMuZ2V0X25vZGUodCwhMCksdm9pZCh0LnN0YXRlLmNoZWNrZWQmJih0LnN0YXRlLmNoZWNrZWQ9ITEsdGhpcy5fZGF0YS5jaGVja2JveC5zZWxlY3RlZD1lLnZha2F0YS5hcnJheV9yZW1vdmVfaXRlbSh0aGlzLl9kYXRhLmNoZWNrYm94LnNlbGVjdGVkLHQuaWQpLG4ubGVuZ3RoJiZuLmNoaWxkcmVuKFwiLmpzdHJlZS1hbmNob3JcIikucmVtb3ZlQ2xhc3MoXCJqc3RyZWUtY2hlY2tlZFwiKSx0aGlzLnRyaWdnZXIoXCJ1bmNoZWNrX25vZGVcIix7bm9kZTp0LHNlbGVjdGVkOnRoaXMuX2RhdGEuY2hlY2tib3guc2VsZWN0ZWQsZXZlbnQ6aX0pKSkpOiExfSx0aGlzLmNoZWNrX2FsbD1mdW5jdGlvbigpe2lmKHRoaXMuc2V0dGluZ3MuY2hlY2tib3gudGllX3NlbGVjdGlvbilyZXR1cm4gdGhpcy5zZWxlY3RfYWxsKCk7dmFyIHQsaTt0aGlzLl9kYXRhLmNoZWNrYm94LnNlbGVjdGVkLmNvbmNhdChbXSk7Zm9yKHRoaXMuX2RhdGEuY2hlY2tib3guc2VsZWN0ZWQ9dGhpcy5fbW9kZWwuZGF0YVtlLmpzdHJlZS5yb290XS5jaGlsZHJlbl9kLmNvbmNhdCgpLHQ9MCxpPXRoaXMuX2RhdGEuY2hlY2tib3guc2VsZWN0ZWQubGVuZ3RoO2k+dDt0KyspdGhpcy5fbW9kZWwuZGF0YVt0aGlzLl9kYXRhLmNoZWNrYm94LnNlbGVjdGVkW3RdXSYmKHRoaXMuX21vZGVsLmRhdGFbdGhpcy5fZGF0YS5jaGVja2JveC5zZWxlY3RlZFt0XV0uc3RhdGUuY2hlY2tlZD0hMCk7dGhpcy5yZWRyYXcoITApLHRoaXMudHJpZ2dlcihcImNoZWNrX2FsbFwiLHtzZWxlY3RlZDp0aGlzLl9kYXRhLmNoZWNrYm94LnNlbGVjdGVkfSl9LHRoaXMudW5jaGVja19hbGw9ZnVuY3Rpb24oKXtpZih0aGlzLnNldHRpbmdzLmNoZWNrYm94LnRpZV9zZWxlY3Rpb24pcmV0dXJuIHRoaXMuZGVzZWxlY3RfYWxsKCk7dmFyIGUsdCxpPXRoaXMuX2RhdGEuY2hlY2tib3guc2VsZWN0ZWQuY29uY2F0KFtdKTtmb3IoZT0wLHQ9dGhpcy5fZGF0YS5jaGVja2JveC5zZWxlY3RlZC5sZW5ndGg7dD5lO2UrKyl0aGlzLl9tb2RlbC5kYXRhW3RoaXMuX2RhdGEuY2hlY2tib3guc2VsZWN0ZWRbZV1dJiYodGhpcy5fbW9kZWwuZGF0YVt0aGlzLl9kYXRhLmNoZWNrYm94LnNlbGVjdGVkW2VdXS5zdGF0ZS5jaGVja2VkPSExKTt0aGlzLl9kYXRhLmNoZWNrYm94LnNlbGVjdGVkPVtdLHRoaXMuZWxlbWVudC5maW5kKFwiLmpzdHJlZS1jaGVja2VkXCIpLnJlbW92ZUNsYXNzKFwianN0cmVlLWNoZWNrZWRcIiksdGhpcy50cmlnZ2VyKFwidW5jaGVja19hbGxcIix7c2VsZWN0ZWQ6dGhpcy5fZGF0YS5jaGVja2JveC5zZWxlY3RlZCxub2RlOml9KX0sdGhpcy5pc19jaGVja2VkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNldHRpbmdzLmNoZWNrYm94LnRpZV9zZWxlY3Rpb24/dGhpcy5pc19zZWxlY3RlZCh0KToodD10aGlzLmdldF9ub2RlKHQpLHQmJnQuaWQhPT1lLmpzdHJlZS5yb290P3Quc3RhdGUuY2hlY2tlZDohMSl9LHRoaXMuZ2V0X2NoZWNrZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2V0dGluZ3MuY2hlY2tib3gudGllX3NlbGVjdGlvbj90aGlzLmdldF9zZWxlY3RlZCh0KTp0P2UubWFwKHRoaXMuX2RhdGEuY2hlY2tib3guc2VsZWN0ZWQsZS5wcm94eShmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5nZXRfbm9kZShlKX0sdGhpcykpOnRoaXMuX2RhdGEuY2hlY2tib3guc2VsZWN0ZWR9LHRoaXMuZ2V0X3RvcF9jaGVja2VkPWZ1bmN0aW9uKHQpe2lmKHRoaXMuc2V0dGluZ3MuY2hlY2tib3gudGllX3NlbGVjdGlvbilyZXR1cm4gdGhpcy5nZXRfdG9wX3NlbGVjdGVkKHQpO3ZhciBpLHIscyxuLGE9dGhpcy5nZXRfY2hlY2tlZCghMCksbz17fTtmb3IoaT0wLHI9YS5sZW5ndGg7cj5pO2krKylvW2FbaV0uaWRdPWFbaV07Zm9yKGk9MCxyPWEubGVuZ3RoO3I+aTtpKyspZm9yKHM9MCxuPWFbaV0uY2hpbGRyZW5fZC5sZW5ndGg7bj5zO3MrKylvW2FbaV0uY2hpbGRyZW5fZFtzXV0mJmRlbGV0ZSBvW2FbaV0uY2hpbGRyZW5fZFtzXV07YT1bXTtmb3IoaSBpbiBvKW8uaGFzT3duUHJvcGVydHkoaSkmJmEucHVzaChpKTtyZXR1cm4gdD9lLm1hcChhLGUucHJveHkoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZ2V0X25vZGUoZSl9LHRoaXMpKTphfSx0aGlzLmdldF9ib3R0b21fY2hlY2tlZD1mdW5jdGlvbih0KXtpZih0aGlzLnNldHRpbmdzLmNoZWNrYm94LnRpZV9zZWxlY3Rpb24pcmV0dXJuIHRoaXMuZ2V0X2JvdHRvbV9zZWxlY3RlZCh0KTt2YXIgaSxyLHM9dGhpcy5nZXRfY2hlY2tlZCghMCksbj1bXTtmb3IoaT0wLHI9cy5sZW5ndGg7cj5pO2krKylzW2ldLmNoaWxkcmVuLmxlbmd0aHx8bi5wdXNoKHNbaV0uaWQpO3JldHVybiB0P2UubWFwKG4sZS5wcm94eShmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5nZXRfbm9kZShlKX0sdGhpcykpOm59LHRoaXMubG9hZF9ub2RlPWZ1bmN0aW9uKHQsaSl7dmFyIHMsbixhLG87aWYoIWUuaXNBcnJheSh0KSYmIXRoaXMuc2V0dGluZ3MuY2hlY2tib3gudGllX3NlbGVjdGlvbiYmKG89dGhpcy5nZXRfbm9kZSh0KSxvJiZvLnN0YXRlLmxvYWRlZCkpZm9yKHM9MCxuPW8uY2hpbGRyZW5fZC5sZW5ndGg7bj5zO3MrKyl0aGlzLl9tb2RlbC5kYXRhW28uY2hpbGRyZW5fZFtzXV0uc3RhdGUuY2hlY2tlZCYmKGE9ITAsdGhpcy5fZGF0YS5jaGVja2JveC5zZWxlY3RlZD1lLnZha2F0YS5hcnJheV9yZW1vdmVfaXRlbSh0aGlzLl9kYXRhLmNoZWNrYm94LnNlbGVjdGVkLG8uY2hpbGRyZW5fZFtzXSkpO3JldHVybiByLmxvYWRfbm9kZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHRoaXMuZ2V0X3N0YXRlPWZ1bmN0aW9uKCl7dmFyIGU9ci5nZXRfc3RhdGUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiB0aGlzLnNldHRpbmdzLmNoZWNrYm94LnRpZV9zZWxlY3Rpb24/ZTooZS5jaGVja2JveD10aGlzLl9kYXRhLmNoZWNrYm94LnNlbGVjdGVkLnNsaWNlKCksZSl9LHRoaXMuc2V0X3N0YXRlPWZ1bmN0aW9uKHQsaSl7dmFyIHM9ci5zZXRfc3RhdGUuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKHMmJnQuY2hlY2tib3gpe2lmKCF0aGlzLnNldHRpbmdzLmNoZWNrYm94LnRpZV9zZWxlY3Rpb24pe3RoaXMudW5jaGVja19hbGwoKTt2YXIgbj10aGlzO2UuZWFjaCh0LmNoZWNrYm94LGZ1bmN0aW9uKGUsdCl7bi5jaGVja19ub2RlKHQpfSl9cmV0dXJuIGRlbGV0ZSB0LmNoZWNrYm94LHRoaXMuc2V0X3N0YXRlKHQsaSksITF9cmV0dXJuIHN9LHRoaXMucmVmcmVzaD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnNldHRpbmdzLmNoZWNrYm94LnRpZV9zZWxlY3Rpb258fCh0aGlzLl9kYXRhLmNoZWNrYm94LnNlbGVjdGVkPVtdKSxyLnJlZnJlc2guYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sZS5qc3RyZWUuZGVmYXVsdHMuY29uZGl0aW9uYWxzZWxlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sZS5qc3RyZWUucGx1Z2lucy5jb25kaXRpb25hbHNlbGVjdD1mdW5jdGlvbihlLHQpe3RoaXMuYWN0aXZhdGVfbm9kZT1mdW5jdGlvbihlLGkpe3RoaXMuc2V0dGluZ3MuY29uZGl0aW9uYWxzZWxlY3QuY2FsbCh0aGlzLHRoaXMuZ2V0X25vZGUoZSksaSkmJnQuYWN0aXZhdGVfbm9kZS5jYWxsKHRoaXMsZSxpKX19LGUuanN0cmVlLmRlZmF1bHRzLmNvbnRleHRtZW51PXtzZWxlY3Rfbm9kZTohMCxzaG93X2F0X25vZGU6ITAsaXRlbXM6ZnVuY3Rpb24odCxpKXtyZXR1cm57Y3JlYXRlOntzZXBhcmF0b3JfYmVmb3JlOiExLHNlcGFyYXRvcl9hZnRlcjohMCxfZGlzYWJsZWQ6ITEsbGFiZWw6XCJDcmVhdGVcIixhY3Rpb246ZnVuY3Rpb24odCl7dmFyIGk9ZS5qc3RyZWUucmVmZXJlbmNlKHQucmVmZXJlbmNlKSxyPWkuZ2V0X25vZGUodC5yZWZlcmVuY2UpO2kuY3JlYXRlX25vZGUocix7fSxcImxhc3RcIixmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aS5lZGl0KGUpfSwwKX0pfX0scmVuYW1lOntzZXBhcmF0b3JfYmVmb3JlOiExLHNlcGFyYXRvcl9hZnRlcjohMSxfZGlzYWJsZWQ6ITEsbGFiZWw6XCJSZW5hbWVcIixhY3Rpb246ZnVuY3Rpb24odCl7dmFyIGk9ZS5qc3RyZWUucmVmZXJlbmNlKHQucmVmZXJlbmNlKSxyPWkuZ2V0X25vZGUodC5yZWZlcmVuY2UpO2kuZWRpdChyKX19LHJlbW92ZTp7c2VwYXJhdG9yX2JlZm9yZTohMSxpY29uOiExLHNlcGFyYXRvcl9hZnRlcjohMSxfZGlzYWJsZWQ6ITEsbGFiZWw6XCJEZWxldGVcIixhY3Rpb246ZnVuY3Rpb24odCl7dmFyIGk9ZS5qc3RyZWUucmVmZXJlbmNlKHQucmVmZXJlbmNlKSxyPWkuZ2V0X25vZGUodC5yZWZlcmVuY2UpO2kuaXNfc2VsZWN0ZWQocik/aS5kZWxldGVfbm9kZShpLmdldF9zZWxlY3RlZCgpKTppLmRlbGV0ZV9ub2RlKHIpfX0sY2NwOntzZXBhcmF0b3JfYmVmb3JlOiEwLGljb246ITEsc2VwYXJhdG9yX2FmdGVyOiExLGxhYmVsOlwiRWRpdFwiLGFjdGlvbjohMSxzdWJtZW51OntjdXQ6e3NlcGFyYXRvcl9iZWZvcmU6ITEsc2VwYXJhdG9yX2FmdGVyOiExLGxhYmVsOlwiQ3V0XCIsYWN0aW9uOmZ1bmN0aW9uKHQpe3ZhciBpPWUuanN0cmVlLnJlZmVyZW5jZSh0LnJlZmVyZW5jZSkscj1pLmdldF9ub2RlKHQucmVmZXJlbmNlKTtpLmlzX3NlbGVjdGVkKHIpP2kuY3V0KGkuZ2V0X3RvcF9zZWxlY3RlZCgpKTppLmN1dChyKX19LGNvcHk6e3NlcGFyYXRvcl9iZWZvcmU6ITEsaWNvbjohMSxzZXBhcmF0b3JfYWZ0ZXI6ITEsbGFiZWw6XCJDb3B5XCIsYWN0aW9uOmZ1bmN0aW9uKHQpe3ZhciBpPWUuanN0cmVlLnJlZmVyZW5jZSh0LnJlZmVyZW5jZSkscj1pLmdldF9ub2RlKHQucmVmZXJlbmNlKTtpLmlzX3NlbGVjdGVkKHIpP2kuY29weShpLmdldF90b3Bfc2VsZWN0ZWQoKSk6aS5jb3B5KHIpfX0scGFzdGU6e3NlcGFyYXRvcl9iZWZvcmU6ITEsaWNvbjohMSxfZGlzYWJsZWQ6ZnVuY3Rpb24odCl7cmV0dXJuIWUuanN0cmVlLnJlZmVyZW5jZSh0LnJlZmVyZW5jZSkuY2FuX3Bhc3RlKCl9LHNlcGFyYXRvcl9hZnRlcjohMSxsYWJlbDpcIlBhc3RlXCIsYWN0aW9uOmZ1bmN0aW9uKHQpe3ZhciBpPWUuanN0cmVlLnJlZmVyZW5jZSh0LnJlZmVyZW5jZSkscj1pLmdldF9ub2RlKHQucmVmZXJlbmNlKTtpLnBhc3RlKHIpfX19fX19fSxlLmpzdHJlZS5wbHVnaW5zLmNvbnRleHRtZW51PWZ1bmN0aW9uKGkscil7dGhpcy5iaW5kPWZ1bmN0aW9uKCl7ci5iaW5kLmNhbGwodGhpcyk7dmFyIHQsaSxzPTAsbj1udWxsO3RoaXMuZWxlbWVudC5vbihcImNvbnRleHRtZW51LmpzdHJlZVwiLFwiLmpzdHJlZS1hbmNob3JcIixlLnByb3h5KGZ1bmN0aW9uKGUsdCl7ZS5wcmV2ZW50RGVmYXVsdCgpLHM9ZS5jdHJsS2V5PytuZXcgRGF0ZTowLCh0fHxuKSYmKHM9K25ldyBEYXRlKzFlNCksbiYmY2xlYXJUaW1lb3V0KG4pLHRoaXMuaXNfbG9hZGluZyhlLmN1cnJlbnRUYXJnZXQpfHx0aGlzLnNob3dfY29udGV4dG1lbnUoZS5jdXJyZW50VGFyZ2V0LGUucGFnZVgsZS5wYWdlWSxlKX0sdGhpcykpLm9uKFwiY2xpY2suanN0cmVlXCIsXCIuanN0cmVlLWFuY2hvclwiLGUucHJveHkoZnVuY3Rpb24odCl7dGhpcy5fZGF0YS5jb250ZXh0bWVudS52aXNpYmxlJiYoIXN8fCtuZXcgRGF0ZS1zPjI1MCkmJmUudmFrYXRhLmNvbnRleHQuaGlkZSgpLHM9MH0sdGhpcykpLm9uKFwidG91Y2hzdGFydC5qc3RyZWVcIixcIi5qc3RyZWUtYW5jaG9yXCIsZnVuY3Rpb24ocil7ci5vcmlnaW5hbEV2ZW50JiZyLm9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXMmJnIub3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlc1swXSYmKHQ9ci5wYWdlWCxpPXIucGFnZVksbj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZShyLmN1cnJlbnRUYXJnZXQpLnRyaWdnZXIoXCJjb250ZXh0bWVudVwiLCEwKX0sNzUwKSl9KS5vbihcInRvdWNobW92ZS52YWthdGEuanN0cmVlXCIsZnVuY3Rpb24oZSl7biYmZS5vcmlnaW5hbEV2ZW50JiZlLm9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXMmJmUub3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlc1swXSYmKE1hdGguYWJzKHQtZS5wYWdlWCk+NTB8fE1hdGguYWJzKGktZS5wYWdlWSk+NTApJiZjbGVhclRpbWVvdXQobil9KS5vbihcInRvdWNoZW5kLnZha2F0YS5qc3RyZWVcIixmdW5jdGlvbihlKXtuJiZjbGVhclRpbWVvdXQobil9KSxlKGwpLm9uKFwiY29udGV4dF9oaWRlLnZha2F0YS5qc3RyZWVcIixlLnByb3h5KGZ1bmN0aW9uKCl7dGhpcy5fZGF0YS5jb250ZXh0bWVudS52aXNpYmxlPSExfSx0aGlzKSl9LHRoaXMudGVhcmRvd249ZnVuY3Rpb24oKXt0aGlzLl9kYXRhLmNvbnRleHRtZW51LnZpc2libGUmJmUudmFrYXRhLmNvbnRleHQuaGlkZSgpLHIudGVhcmRvd24uY2FsbCh0aGlzKX0sdGhpcy5zaG93X2NvbnRleHRtZW51PWZ1bmN0aW9uKGkscixzLG4pe2lmKGk9dGhpcy5nZXRfbm9kZShpKSwhaXx8aS5pZD09PWUuanN0cmVlLnJvb3QpcmV0dXJuITE7dmFyIGE9dGhpcy5zZXR0aW5ncy5jb250ZXh0bWVudSxvPXRoaXMuZ2V0X25vZGUoaSwhMCksZD1vLmNoaWxkcmVuKFwiLmpzdHJlZS1hbmNob3JcIiksYz0hMSxsPSExOyhhLnNob3dfYXRfbm9kZXx8cj09PXR8fHM9PT10KSYmKGM9ZC5vZmZzZXQoKSxyPWMubGVmdCxzPWMudG9wK3RoaXMuX2RhdGEuY29yZS5saV9oZWlnaHQpLHRoaXMuc2V0dGluZ3MuY29udGV4dG1lbnUuc2VsZWN0X25vZGUmJiF0aGlzLmlzX3NlbGVjdGVkKGkpJiZ0aGlzLmFjdGl2YXRlX25vZGUoaSxuKSxsPWEuaXRlbXMsZS5pc0Z1bmN0aW9uKGwpJiYobD1sLmNhbGwodGhpcyxpLGUucHJveHkoZnVuY3Rpb24oZSl7dGhpcy5fc2hvd19jb250ZXh0bWVudShpLHIscyxlKX0sdGhpcykpKSxlLmlzUGxhaW5PYmplY3QobCkmJnRoaXMuX3Nob3dfY29udGV4dG1lbnUoaSxyLHMsbCl9LHRoaXMuX3Nob3dfY29udGV4dG1lbnU9ZnVuY3Rpb24odCxpLHIscyl7dmFyIG49dGhpcy5nZXRfbm9kZSh0LCEwKSxhPW4uY2hpbGRyZW4oXCIuanN0cmVlLWFuY2hvclwiKTtlKGwpLm9uZShcImNvbnRleHRfc2hvdy52YWthdGEuanN0cmVlXCIsZS5wcm94eShmdW5jdGlvbih0LGkpe3ZhciByPVwianN0cmVlLWNvbnRleHRtZW51IGpzdHJlZS1cIit0aGlzLmdldF90aGVtZSgpK1wiLWNvbnRleHRtZW51XCI7ZShpLmVsZW1lbnQpLmFkZENsYXNzKHIpfSx0aGlzKSksdGhpcy5fZGF0YS5jb250ZXh0bWVudS52aXNpYmxlPSEwLGUudmFrYXRhLmNvbnRleHQuc2hvdyhhLHt4OmkseTpyfSxzKSx0aGlzLnRyaWdnZXIoXCJzaG93X2NvbnRleHRtZW51XCIse25vZGU6dCx4OmkseTpyfSl9fSxmdW5jdGlvbihlKXt2YXIgdD0hMSxpPXtlbGVtZW50OiExLHJlZmVyZW5jZTohMSxwb3NpdGlvbl94OjAscG9zaXRpb25feTowLGl0ZW1zOltdLGh0bWw6XCJcIixpc192aXNpYmxlOiExfTtlLnZha2F0YS5jb250ZXh0PXtzZXR0aW5nczp7aGlkZV9vbm1vdXNlbGVhdmU6MCxpY29uczohMH0sX3RyaWdnZXI6ZnVuY3Rpb24odCl7ZShsKS50cmlnZ2VySGFuZGxlcihcImNvbnRleHRfXCIrdCtcIi52YWthdGFcIix7cmVmZXJlbmNlOmkucmVmZXJlbmNlLGVsZW1lbnQ6aS5lbGVtZW50LHBvc2l0aW9uOnt4OmkucG9zaXRpb25feCx5OmkucG9zaXRpb25feX19KX0sX2V4ZWN1dGU6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9aS5pdGVtc1t0XSx0JiYoIXQuX2Rpc2FibGVkfHxlLmlzRnVuY3Rpb24odC5fZGlzYWJsZWQpJiYhdC5fZGlzYWJsZWQoe2l0ZW06dCxyZWZlcmVuY2U6aS5yZWZlcmVuY2UsZWxlbWVudDppLmVsZW1lbnR9KSkmJnQuYWN0aW9uP3QuYWN0aW9uLmNhbGwobnVsbCx7aXRlbTp0LHJlZmVyZW5jZTppLnJlZmVyZW5jZSxlbGVtZW50OmkuZWxlbWVudCxwb3NpdGlvbjp7eDppLnBvc2l0aW9uX3gseTppLnBvc2l0aW9uX3l9fSk6ITF9LF9wYXJzZTpmdW5jdGlvbih0LHIpe2lmKCF0KXJldHVybiExO3J8fChpLmh0bWw9XCJcIixpLml0ZW1zPVtdKTt2YXIgcyxuPVwiXCIsYT0hMTtyZXR1cm4gciYmKG4rPVwiPHVsPlwiKSxlLmVhY2godCxmdW5jdGlvbih0LHIpe3JldHVybiByPyhpLml0ZW1zLnB1c2gociksIWEmJnIuc2VwYXJhdG9yX2JlZm9yZSYmKG4rPVwiPGxpIGNsYXNzPSd2YWthdGEtY29udGV4dC1zZXBhcmF0b3InPjxhIGhyZWY9JyMnIFwiKyhlLnZha2F0YS5jb250ZXh0LnNldHRpbmdzLmljb25zP1wiXCI6J3N0eWxlPVwibWFyZ2luLWxlZnQ6MHB4O1wiJykrXCI+JiMxNjA7PC9hPjwvbGk+XCIpLGE9ITEsbis9XCI8bGkgY2xhc3M9J1wiKyhyLl9jbGFzc3x8XCJcIikrKHIuX2Rpc2FibGVkPT09ITB8fGUuaXNGdW5jdGlvbihyLl9kaXNhYmxlZCkmJnIuX2Rpc2FibGVkKHtpdGVtOnIscmVmZXJlbmNlOmkucmVmZXJlbmNlLGVsZW1lbnQ6aS5lbGVtZW50fSk/XCIgdmFrYXRhLWNvbnRleHRtZW51LWRpc2FibGVkIFwiOlwiXCIpK1wiJyBcIisoci5zaG9ydGN1dD9cIiBkYXRhLXNob3J0Y3V0PSdcIityLnNob3J0Y3V0K1wiJyBcIjpcIlwiKStcIj5cIixuKz1cIjxhIGhyZWY9JyMnIHJlbD0nXCIrKGkuaXRlbXMubGVuZ3RoLTEpK1wiJz5cIixlLnZha2F0YS5jb250ZXh0LnNldHRpbmdzLmljb25zJiYobis9XCI8aSBcIixyLmljb24mJihuKz0tMSE9PXIuaWNvbi5pbmRleE9mKFwiL1wiKXx8LTEhPT1yLmljb24uaW5kZXhPZihcIi5cIik/XCIgc3R5bGU9J2JhY2tncm91bmQ6dXJsKFxcXCJcIityLmljb24rXCJcXFwiKSBjZW50ZXIgY2VudGVyIG5vLXJlcGVhdCcgXCI6XCIgY2xhc3M9J1wiK3IuaWNvbitcIicgXCIpLG4rPVwiPjwvaT48c3BhbiBjbGFzcz0ndmFrYXRhLWNvbnRleHRtZW51LXNlcCc+JiMxNjA7PC9zcGFuPlwiKSxuKz0oZS5pc0Z1bmN0aW9uKHIubGFiZWwpP3IubGFiZWwoe2l0ZW06dCxyZWZlcmVuY2U6aS5yZWZlcmVuY2UsZWxlbWVudDppLmVsZW1lbnR9KTpyLmxhYmVsKSsoci5zaG9ydGN1dD8nIDxzcGFuIGNsYXNzPVwidmFrYXRhLWNvbnRleHRtZW51LXNob3J0Y3V0IHZha2F0YS1jb250ZXh0bWVudS1zaG9ydGN1dC0nK3Iuc2hvcnRjdXQrJ1wiPicrKHIuc2hvcnRjdXRfbGFiZWx8fFwiXCIpK1wiPC9zcGFuPlwiOlwiXCIpK1wiPC9hPlwiLHIuc3VibWVudSYmKHM9ZS52YWthdGEuY29udGV4dC5fcGFyc2Uoci5zdWJtZW51LCEwKSxzJiYobis9cykpLG4rPVwiPC9saT5cIix2b2lkKHIuc2VwYXJhdG9yX2FmdGVyJiYobis9XCI8bGkgY2xhc3M9J3Zha2F0YS1jb250ZXh0LXNlcGFyYXRvcic+PGEgaHJlZj0nIycgXCIrKGUudmFrYXRhLmNvbnRleHQuc2V0dGluZ3MuaWNvbnM/XCJcIjonc3R5bGU9XCJtYXJnaW4tbGVmdDowcHg7XCInKStcIj4mIzE2MDs8L2E+PC9saT5cIixhPSEwKSkpOiEwfSksbj1uLnJlcGxhY2UoLzxsaSBjbGFzc1xcPSd2YWthdGEtY29udGV4dC1zZXBhcmF0b3InXFw+PFxcL2xpXFw+JC8sXCJcIiksciYmKG4rPVwiPC91bD5cIikscnx8KGkuaHRtbD1uLGUudmFrYXRhLmNvbnRleHQuX3RyaWdnZXIoXCJwYXJzZVwiKSksbi5sZW5ndGg+MTA/bjohMX0sX3Nob3dfc3VibWVudTpmdW5jdGlvbihpKXtpZihpPWUoaSksaS5sZW5ndGgmJmkuY2hpbGRyZW4oXCJ1bFwiKS5sZW5ndGgpe3ZhciByPWkuY2hpbGRyZW4oXCJ1bFwiKSxzPWkub2Zmc2V0KCkubGVmdCtpLm91dGVyV2lkdGgoKSxuPWkub2Zmc2V0KCkudG9wLGE9ci53aWR0aCgpLG89ci5oZWlnaHQoKSxkPWUod2luZG93KS53aWR0aCgpK2Uod2luZG93KS5zY3JvbGxMZWZ0KCksYz1lKHdpbmRvdykuaGVpZ2h0KCkrZSh3aW5kb3cpLnNjcm9sbFRvcCgpO3Q/aVtzLShhKzEwK2kub3V0ZXJXaWR0aCgpKTwwP1wiYWRkQ2xhc3NcIjpcInJlbW92ZUNsYXNzXCJdKFwidmFrYXRhLWNvbnRleHQtbGVmdFwiKTppW3MrYSsxMD5kP1wiYWRkQ2xhc3NcIjpcInJlbW92ZUNsYXNzXCJdKFwidmFrYXRhLWNvbnRleHQtcmlnaHRcIiksbitvKzEwPmMmJnIuY3NzKFwiYm90dG9tXCIsXCItMXB4XCIpLHIuc2hvdygpfX0sc2hvdzpmdW5jdGlvbihyLHMsbil7dmFyIGEsbyxkLGMsbCxoLF8sdSxnPSEwO3N3aXRjaChpLmVsZW1lbnQmJmkuZWxlbWVudC5sZW5ndGgmJmkuZWxlbWVudC53aWR0aChcIlwiKSxnKXtjYXNlIXMmJiFyOnJldHVybiExO2Nhc2UhIXMmJiEhcjppLnJlZmVyZW5jZT1yLGkucG9zaXRpb25feD1zLngsaS5wb3NpdGlvbl95PXMueTticmVhaztjYXNlIXMmJiEhcjppLnJlZmVyZW5jZT1yLGE9ci5vZmZzZXQoKSxpLnBvc2l0aW9uX3g9YS5sZWZ0K3Iub3V0ZXJIZWlnaHQoKSxpLnBvc2l0aW9uX3k9YS50b3A7YnJlYWs7Y2FzZSEhcyYmIXI6aS5wb3NpdGlvbl94PXMueCxpLnBvc2l0aW9uX3k9cy55fXImJiFuJiZlKHIpLmRhdGEoXCJ2YWthdGFfY29udGV4dG1lbnVcIikmJihuPWUocikuZGF0YShcInZha2F0YV9jb250ZXh0bWVudVwiKSksZS52YWthdGEuY29udGV4dC5fcGFyc2UobikmJmkuZWxlbWVudC5odG1sKGkuaHRtbCksaS5pdGVtcy5sZW5ndGgmJihpLmVsZW1lbnQuYXBwZW5kVG8oXCJib2R5XCIpLG89aS5lbGVtZW50LGQ9aS5wb3NpdGlvbl94LGM9aS5wb3NpdGlvbl95LGw9by53aWR0aCgpLGg9by5oZWlnaHQoKSxfPWUod2luZG93KS53aWR0aCgpK2Uod2luZG93KS5zY3JvbGxMZWZ0KCksdT1lKHdpbmRvdykuaGVpZ2h0KCkrZSh3aW5kb3cpLnNjcm9sbFRvcCgpLHQmJihkLT1vLm91dGVyV2lkdGgoKS1lKHIpLm91dGVyV2lkdGgoKSxkPGUod2luZG93KS5zY3JvbGxMZWZ0KCkrMjAmJihkPWUod2luZG93KS5zY3JvbGxMZWZ0KCkrMjApKSxkK2wrMjA+XyYmKGQ9Xy0obCsyMCkpLGMraCsyMD51JiYoYz11LShoKzIwKSksaS5lbGVtZW50LmNzcyh7bGVmdDpkLHRvcDpjfSkuc2hvdygpLmZpbmQoXCJhXCIpLmZpcnN0KCkuZm9jdXMoKS5wYXJlbnQoKS5hZGRDbGFzcyhcInZha2F0YS1jb250ZXh0LWhvdmVyXCIpLGkuaXNfdmlzaWJsZT0hMCxlLnZha2F0YS5jb250ZXh0Ll90cmlnZ2VyKFwic2hvd1wiKSl9LGhpZGU6ZnVuY3Rpb24oKXtpLmlzX3Zpc2libGUmJihpLmVsZW1lbnQuaGlkZSgpLmZpbmQoXCJ1bFwiKS5oaWRlKCkuZW5kKCkuZmluZChcIjpmb2N1c1wiKS5ibHVyKCkuZW5kKCkuZGV0YWNoKCksaS5pc192aXNpYmxlPSExLGUudmFrYXRhLmNvbnRleHQuX3RyaWdnZXIoXCJoaWRlXCIpKX19LGUoZnVuY3Rpb24oKXt0PVwicnRsXCI9PT1lKFwiYm9keVwiKS5jc3MoXCJkaXJlY3Rpb25cIik7dmFyIHI9ITE7aS5lbGVtZW50PWUoXCI8dWwgY2xhc3M9J3Zha2F0YS1jb250ZXh0Jz48L3VsPlwiKSxpLmVsZW1lbnQub24oXCJtb3VzZWVudGVyXCIsXCJsaVwiLGZ1bmN0aW9uKHQpe3Quc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksZS5jb250YWlucyh0aGlzLHQucmVsYXRlZFRhcmdldCl8fChyJiZjbGVhclRpbWVvdXQociksaS5lbGVtZW50LmZpbmQoXCIudmFrYXRhLWNvbnRleHQtaG92ZXJcIikucmVtb3ZlQ2xhc3MoXCJ2YWthdGEtY29udGV4dC1ob3ZlclwiKS5lbmQoKSxlKHRoaXMpLnNpYmxpbmdzKCkuZmluZChcInVsXCIpLmhpZGUoKS5lbmQoKS5lbmQoKS5wYXJlbnRzVW50aWwoXCIudmFrYXRhLWNvbnRleHRcIixcImxpXCIpLmFkZEJhY2soKS5hZGRDbGFzcyhcInZha2F0YS1jb250ZXh0LWhvdmVyXCIpLGUudmFrYXRhLmNvbnRleHQuX3Nob3dfc3VibWVudSh0aGlzKSl9KS5vbihcIm1vdXNlbGVhdmVcIixcImxpXCIsZnVuY3Rpb24odCl7ZS5jb250YWlucyh0aGlzLHQucmVsYXRlZFRhcmdldCl8fGUodGhpcykuZmluZChcIi52YWthdGEtY29udGV4dC1ob3ZlclwiKS5hZGRCYWNrKCkucmVtb3ZlQ2xhc3MoXCJ2YWthdGEtY29udGV4dC1ob3ZlclwiKX0pLm9uKFwibW91c2VsZWF2ZVwiLGZ1bmN0aW9uKHQpe2UodGhpcykuZmluZChcIi52YWthdGEtY29udGV4dC1ob3ZlclwiKS5yZW1vdmVDbGFzcyhcInZha2F0YS1jb250ZXh0LWhvdmVyXCIpLGUudmFrYXRhLmNvbnRleHQuc2V0dGluZ3MuaGlkZV9vbm1vdXNlbGVhdmUmJihyPXNldFRpbWVvdXQoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7ZS52YWthdGEuY29udGV4dC5oaWRlKCl9fSh0aGlzKSxlLnZha2F0YS5jb250ZXh0LnNldHRpbmdzLmhpZGVfb25tb3VzZWxlYXZlKSl9KS5vbihcImNsaWNrXCIsXCJhXCIsZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpLGUodGhpcykuYmx1cigpLnBhcmVudCgpLmhhc0NsYXNzKFwidmFrYXRhLWNvbnRleHQtZGlzYWJsZWRcIil8fGUudmFrYXRhLmNvbnRleHQuX2V4ZWN1dGUoZSh0aGlzKS5hdHRyKFwicmVsXCIpKT09PSExfHxlLnZha2F0YS5jb250ZXh0LmhpZGUoKX0pLm9uKFwia2V5ZG93blwiLFwiYVwiLGZ1bmN0aW9uKHQpe3ZhciByPW51bGw7c3dpdGNoKHQud2hpY2gpe2Nhc2UgMTM6Y2FzZSAzMjp0LnR5cGU9XCJtb3VzZXVwXCIsdC5wcmV2ZW50RGVmYXVsdCgpLGUodC5jdXJyZW50VGFyZ2V0KS50cmlnZ2VyKHQpO2JyZWFrO2Nhc2UgMzc6aS5pc192aXNpYmxlJiYoaS5lbGVtZW50LmZpbmQoXCIudmFrYXRhLWNvbnRleHQtaG92ZXJcIikubGFzdCgpLmNsb3Nlc3QoXCJsaVwiKS5maXJzdCgpLmZpbmQoXCJ1bFwiKS5oaWRlKCkuZmluZChcIi52YWthdGEtY29udGV4dC1ob3ZlclwiKS5yZW1vdmVDbGFzcyhcInZha2F0YS1jb250ZXh0LWhvdmVyXCIpLmVuZCgpLmVuZCgpLmNoaWxkcmVuKFwiYVwiKS5mb2N1cygpLHQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdC5wcmV2ZW50RGVmYXVsdCgpKTticmVhaztjYXNlIDM4OmkuaXNfdmlzaWJsZSYmKHI9aS5lbGVtZW50LmZpbmQoXCJ1bDp2aXNpYmxlXCIpLmFkZEJhY2soKS5sYXN0KCkuY2hpbGRyZW4oXCIudmFrYXRhLWNvbnRleHQtaG92ZXJcIikucmVtb3ZlQ2xhc3MoXCJ2YWthdGEtY29udGV4dC1ob3ZlclwiKS5wcmV2QWxsKFwibGk6bm90KC52YWthdGEtY29udGV4dC1zZXBhcmF0b3IpXCIpLmZpcnN0KCksci5sZW5ndGh8fChyPWkuZWxlbWVudC5maW5kKFwidWw6dmlzaWJsZVwiKS5hZGRCYWNrKCkubGFzdCgpLmNoaWxkcmVuKFwibGk6bm90KC52YWthdGEtY29udGV4dC1zZXBhcmF0b3IpXCIpLmxhc3QoKSksci5hZGRDbGFzcyhcInZha2F0YS1jb250ZXh0LWhvdmVyXCIpLmNoaWxkcmVuKFwiYVwiKS5mb2N1cygpLHQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdC5wcmV2ZW50RGVmYXVsdCgpKTticmVhaztjYXNlIDM5OmkuaXNfdmlzaWJsZSYmKGkuZWxlbWVudC5maW5kKFwiLnZha2F0YS1jb250ZXh0LWhvdmVyXCIpLmxhc3QoKS5jaGlsZHJlbihcInVsXCIpLnNob3coKS5jaGlsZHJlbihcImxpOm5vdCgudmFrYXRhLWNvbnRleHQtc2VwYXJhdG9yKVwiKS5yZW1vdmVDbGFzcyhcInZha2F0YS1jb250ZXh0LWhvdmVyXCIpLmZpcnN0KCkuYWRkQ2xhc3MoXCJ2YWthdGEtY29udGV4dC1ob3ZlclwiKS5jaGlsZHJlbihcImFcIikuZm9jdXMoKSx0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLHQucHJldmVudERlZmF1bHQoKSk7YnJlYWs7Y2FzZSA0MDppLmlzX3Zpc2libGUmJihyPWkuZWxlbWVudC5maW5kKFwidWw6dmlzaWJsZVwiKS5hZGRCYWNrKCkubGFzdCgpLmNoaWxkcmVuKFwiLnZha2F0YS1jb250ZXh0LWhvdmVyXCIpLnJlbW92ZUNsYXNzKFwidmFrYXRhLWNvbnRleHQtaG92ZXJcIikubmV4dEFsbChcImxpOm5vdCgudmFrYXRhLWNvbnRleHQtc2VwYXJhdG9yKVwiKS5maXJzdCgpLHIubGVuZ3RofHwocj1pLmVsZW1lbnQuZmluZChcInVsOnZpc2libGVcIikuYWRkQmFjaygpLmxhc3QoKS5jaGlsZHJlbihcImxpOm5vdCgudmFrYXRhLWNvbnRleHQtc2VwYXJhdG9yKVwiKS5maXJzdCgpKSxyLmFkZENsYXNzKFwidmFrYXRhLWNvbnRleHQtaG92ZXJcIikuY2hpbGRyZW4oXCJhXCIpLmZvY3VzKCksdC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx0LnByZXZlbnREZWZhdWx0KCkpO2JyZWFrO2Nhc2UgMjc6ZS52YWthdGEuY29udGV4dC5oaWRlKCksdC5wcmV2ZW50RGVmYXVsdCgpfX0pLm9uKFwia2V5ZG93blwiLGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKTt2YXIgdD1pLmVsZW1lbnQuZmluZChcIi52YWthdGEtY29udGV4dG1lbnUtc2hvcnRjdXQtXCIrZS53aGljaCkucGFyZW50KCk7dC5wYXJlbnQoKS5ub3QoXCIudmFrYXRhLWNvbnRleHQtZGlzYWJsZWRcIikmJnQuY2xpY2soKX0pLGUobCkub24oXCJtb3VzZWRvd24udmFrYXRhLmpzdHJlZVwiLGZ1bmN0aW9uKHQpe2kuaXNfdmlzaWJsZSYmIWUuY29udGFpbnMoaS5lbGVtZW50WzBdLHQudGFyZ2V0KSYmZS52YWthdGEuY29udGV4dC5oaWRlKCl9KS5vbihcImNvbnRleHRfc2hvdy52YWthdGEuanN0cmVlXCIsZnVuY3Rpb24oZSxyKXtpLmVsZW1lbnQuZmluZChcImxpOmhhcyh1bClcIikuY2hpbGRyZW4oXCJhXCIpLmFkZENsYXNzKFwidmFrYXRhLWNvbnRleHQtcGFyZW50XCIpLHQmJmkuZWxlbWVudC5hZGRDbGFzcyhcInZha2F0YS1jb250ZXh0LXJ0bFwiKS5jc3MoXCJkaXJlY3Rpb25cIixcInJ0bFwiKSxpLmVsZW1lbnQuZmluZChcInVsXCIpLmhpZGUoKS5lbmQoKX0pfSl9KGUpLGUuanN0cmVlLmRlZmF1bHRzLmRuZD17Y29weTohMCxvcGVuX3RpbWVvdXQ6NTAwLGlzX2RyYWdnYWJsZTohMCxjaGVja193aGlsZV9kcmFnZ2luZzohMCxhbHdheXNfY29weTohMSxpbnNpZGVfcG9zOjAsZHJhZ19zZWxlY3Rpb246ITAsdG91Y2g6ITAsbGFyZ2VfZHJvcF90YXJnZXQ6ITEsbGFyZ2VfZHJhZ190YXJnZXQ6ITF9LGUuanN0cmVlLnBsdWdpbnMuZG5kPWZ1bmN0aW9uKHQsaSl7dGhpcy5iaW5kPWZ1bmN0aW9uKCl7aS5iaW5kLmNhbGwodGhpcyksdGhpcy5lbGVtZW50Lm9uKFwibW91c2Vkb3duLmpzdHJlZSB0b3VjaHN0YXJ0LmpzdHJlZVwiLHRoaXMuc2V0dGluZ3MuZG5kLmxhcmdlX2RyYWdfdGFyZ2V0P1wiLmpzdHJlZS1ub2RlXCI6XCIuanN0cmVlLWFuY2hvclwiLGUucHJveHkoZnVuY3Rpb24odCl7XG5pZih0aGlzLnNldHRpbmdzLmRuZC5sYXJnZV9kcmFnX3RhcmdldCYmZSh0LnRhcmdldCkuY2xvc2VzdChcIi5qc3RyZWUtbm9kZVwiKVswXSE9PXQuY3VycmVudFRhcmdldClyZXR1cm4hMDtpZihcInRvdWNoc3RhcnRcIj09PXQudHlwZSYmKCF0aGlzLnNldHRpbmdzLmRuZC50b3VjaHx8XCJzZWxlY3RlZFwiPT09dGhpcy5zZXR0aW5ncy5kbmQudG91Y2gmJiFlKHQuY3VycmVudFRhcmdldCkuY2xvc2VzdChcIi5qc3RyZWUtbm9kZVwiKS5jaGlsZHJlbihcIi5qc3RyZWUtYW5jaG9yXCIpLmhhc0NsYXNzKFwianN0cmVlLWNsaWNrZWRcIikpKXJldHVybiEwO3ZhciBpPXRoaXMuZ2V0X25vZGUodC50YXJnZXQpLHI9dGhpcy5pc19zZWxlY3RlZChpKSYmdGhpcy5zZXR0aW5ncy5kbmQuZHJhZ19zZWxlY3Rpb24/dGhpcy5nZXRfdG9wX3NlbGVjdGVkKCkubGVuZ3RoOjEscz1yPjE/citcIiBcIit0aGlzLmdldF9zdHJpbmcoXCJub2Rlc1wiKTp0aGlzLmdldF90ZXh0KHQuY3VycmVudFRhcmdldCk7cmV0dXJuIHRoaXMuc2V0dGluZ3MuY29yZS5mb3JjZV90ZXh0JiYocz1lLnZha2F0YS5odG1sLmVzY2FwZShzKSksaSYmaS5pZCYmaS5pZCE9PWUuanN0cmVlLnJvb3QmJigxPT09dC53aGljaHx8XCJ0b3VjaHN0YXJ0XCI9PT10LnR5cGUpJiYodGhpcy5zZXR0aW5ncy5kbmQuaXNfZHJhZ2dhYmxlPT09ITB8fGUuaXNGdW5jdGlvbih0aGlzLnNldHRpbmdzLmRuZC5pc19kcmFnZ2FibGUpJiZ0aGlzLnNldHRpbmdzLmRuZC5pc19kcmFnZ2FibGUuY2FsbCh0aGlzLHI+MT90aGlzLmdldF90b3Bfc2VsZWN0ZWQoITApOltpXSx0KSk/KHRoaXMuZWxlbWVudC50cmlnZ2VyKFwibW91c2Vkb3duLmpzdHJlZVwiKSxlLnZha2F0YS5kbmQuc3RhcnQodCx7anN0cmVlOiEwLG9yaWdpbjp0aGlzLG9iajp0aGlzLmdldF9ub2RlKGksITApLG5vZGVzOnI+MT90aGlzLmdldF90b3Bfc2VsZWN0ZWQoKTpbaS5pZF19LCc8ZGl2IGlkPVwianN0cmVlLWRuZFwiIGNsYXNzPVwianN0cmVlLScrdGhpcy5nZXRfdGhlbWUoKStcIiBqc3RyZWUtXCIrdGhpcy5nZXRfdGhlbWUoKStcIi1cIit0aGlzLmdldF90aGVtZV92YXJpYW50KCkrXCIgXCIrKHRoaXMuc2V0dGluZ3MuY29yZS50aGVtZXMucmVzcG9uc2l2ZT9cIiBqc3RyZWUtZG5kLXJlc3BvbnNpdmVcIjpcIlwiKSsnXCI+PGkgY2xhc3M9XCJqc3RyZWUtaWNvbiBqc3RyZWUtZXJcIj48L2k+JytzKyc8aW5zIGNsYXNzPVwianN0cmVlLWNvcHlcIiBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIj4rPC9pbnM+PC9kaXY+JykpOnZvaWQgMH0sdGhpcykpfX0sZShmdW5jdGlvbigpe3ZhciB0PSExLGk9ITEscj0hMSxzPSExLG49ZSgnPGRpdiBpZD1cImpzdHJlZS1tYXJrZXJcIj4mIzE2MDs8L2Rpdj4nKS5oaWRlKCk7ZShsKS5vbihcImRuZF9zdGFydC52YWthdGEuanN0cmVlXCIsZnVuY3Rpb24oZSxpKXt0PSExLHI9ITEsaSYmaS5kYXRhJiZpLmRhdGEuanN0cmVlJiZuLmFwcGVuZFRvKFwiYm9keVwiKX0pLm9uKFwiZG5kX21vdmUudmFrYXRhLmpzdHJlZVwiLGZ1bmN0aW9uKGEsbyl7aWYocyYmY2xlYXJUaW1lb3V0KHMpLG8mJm8uZGF0YSYmby5kYXRhLmpzdHJlZSYmKCFvLmV2ZW50LnRhcmdldC5pZHx8XCJqc3RyZWUtbWFya2VyXCIhPT1vLmV2ZW50LnRhcmdldC5pZCkpe3I9by5ldmVudDt2YXIgZCxjLGwsaCxfLHUsZyxmLHAsbSx2LGoseSxrLHg9ZS5qc3RyZWUucmVmZXJlbmNlKG8uZXZlbnQudGFyZ2V0KSxiPSExLHc9ITEsQz0hMTtpZih4JiZ4Ll9kYXRhJiZ4Ll9kYXRhLmRuZClpZihuLmF0dHIoXCJjbGFzc1wiLFwianN0cmVlLVwiK3guZ2V0X3RoZW1lKCkrKHguc2V0dGluZ3MuY29yZS50aGVtZXMucmVzcG9uc2l2ZT9cIiBqc3RyZWUtZG5kLXJlc3BvbnNpdmVcIjpcIlwiKSksby5oZWxwZXIuY2hpbGRyZW4oKS5hdHRyKFwiY2xhc3NcIixcImpzdHJlZS1cIit4LmdldF90aGVtZSgpK1wiIGpzdHJlZS1cIit4LmdldF90aGVtZSgpK1wiLVwiK3guZ2V0X3RoZW1lX3ZhcmlhbnQoKStcIiBcIisoeC5zZXR0aW5ncy5jb3JlLnRoZW1lcy5yZXNwb25zaXZlP1wiIGpzdHJlZS1kbmQtcmVzcG9uc2l2ZVwiOlwiXCIpKS5maW5kKFwiLmpzdHJlZS1jb3B5XCIpLmZpcnN0KClbby5kYXRhLm9yaWdpbiYmKG8uZGF0YS5vcmlnaW4uc2V0dGluZ3MuZG5kLmFsd2F5c19jb3B5fHxvLmRhdGEub3JpZ2luLnNldHRpbmdzLmRuZC5jb3B5JiYoby5ldmVudC5tZXRhS2V5fHxvLmV2ZW50LmN0cmxLZXkpKT9cInNob3dcIjpcImhpZGVcIl0oKSxvLmV2ZW50LnRhcmdldCE9PXguZWxlbWVudFswXSYmby5ldmVudC50YXJnZXQhPT14LmdldF9jb250YWluZXJfdWwoKVswXXx8MCE9PXguZ2V0X2NvbnRhaW5lcl91bCgpLmNoaWxkcmVuKCkubGVuZ3RoKXtpZihiPXguc2V0dGluZ3MuZG5kLmxhcmdlX2Ryb3BfdGFyZ2V0P2Uoby5ldmVudC50YXJnZXQpLmNsb3Nlc3QoXCIuanN0cmVlLW5vZGVcIikuY2hpbGRyZW4oXCIuanN0cmVlLWFuY2hvclwiKTplKG8uZXZlbnQudGFyZ2V0KS5jbG9zZXN0KFwiLmpzdHJlZS1hbmNob3JcIiksYiYmYi5sZW5ndGgmJmIucGFyZW50KCkuaXMoXCIuanN0cmVlLWNsb3NlZCwgLmpzdHJlZS1vcGVuLCAuanN0cmVlLWxlYWZcIikmJih3PWIub2Zmc2V0KCksQz1vLmV2ZW50LnBhZ2VZLXcudG9wLGw9Yi5vdXRlckhlaWdodCgpLHU9bC8zPkM/W1wiYlwiLFwiaVwiLFwiYVwiXTpDPmwtbC8zP1tcImFcIixcImlcIixcImJcIl06Qz5sLzI/W1wiaVwiLFwiYVwiLFwiYlwiXTpbXCJpXCIsXCJiXCIsXCJhXCJdLGUuZWFjaCh1LGZ1bmN0aW9uKHIsYSl7c3dpdGNoKGEpe2Nhc2VcImJcIjpkPXcubGVmdC02LGM9dy50b3AsaD14LmdldF9wYXJlbnQoYiksXz1iLnBhcmVudCgpLmluZGV4KCk7YnJlYWs7Y2FzZVwiaVwiOnk9eC5zZXR0aW5ncy5kbmQuaW5zaWRlX3BvcyxrPXguZ2V0X25vZGUoYi5wYXJlbnQoKSksZD13LmxlZnQtMixjPXcudG9wK2wvMisxLGg9ay5pZCxfPVwiZmlyc3RcIj09PXk/MDpcImxhc3RcIj09PXk/ay5jaGlsZHJlbi5sZW5ndGg6TWF0aC5taW4oeSxrLmNoaWxkcmVuLmxlbmd0aCk7YnJlYWs7Y2FzZVwiYVwiOmQ9dy5sZWZ0LTYsYz13LnRvcCtsLGg9eC5nZXRfcGFyZW50KGIpLF89Yi5wYXJlbnQoKS5pbmRleCgpKzF9Zm9yKGc9ITAsZj0wLHA9by5kYXRhLm5vZGVzLmxlbmd0aDtwPmY7ZisrKWlmKG09by5kYXRhLm9yaWdpbiYmKG8uZGF0YS5vcmlnaW4uc2V0dGluZ3MuZG5kLmFsd2F5c19jb3B5fHxvLmRhdGEub3JpZ2luLnNldHRpbmdzLmRuZC5jb3B5JiYoby5ldmVudC5tZXRhS2V5fHxvLmV2ZW50LmN0cmxLZXkpKT9cImNvcHlfbm9kZVwiOlwibW92ZV9ub2RlXCIsdj1fLFwibW92ZV9ub2RlXCI9PT1tJiZcImFcIj09PWEmJm8uZGF0YS5vcmlnaW4mJm8uZGF0YS5vcmlnaW49PT14JiZoPT09eC5nZXRfcGFyZW50KG8uZGF0YS5ub2Rlc1tmXSkmJihqPXguZ2V0X25vZGUoaCksdj5lLmluQXJyYXkoby5kYXRhLm5vZGVzW2ZdLGouY2hpbGRyZW4pJiYodi09MSkpLGc9ZyYmKHgmJnguc2V0dGluZ3MmJnguc2V0dGluZ3MuZG5kJiZ4LnNldHRpbmdzLmRuZC5jaGVja193aGlsZV9kcmFnZ2luZz09PSExfHx4LmNoZWNrKG0sby5kYXRhLm9yaWdpbiYmby5kYXRhLm9yaWdpbiE9PXg/by5kYXRhLm9yaWdpbi5nZXRfbm9kZShvLmRhdGEubm9kZXNbZl0pOm8uZGF0YS5ub2Rlc1tmXSxoLHYse2RuZDohMCxyZWY6eC5nZXRfbm9kZShiLnBhcmVudCgpKSxwb3M6YSxvcmlnaW46by5kYXRhLm9yaWdpbixpc19tdWx0aTpvLmRhdGEub3JpZ2luJiZvLmRhdGEub3JpZ2luIT09eCxpc19mb3JlaWduOiFvLmRhdGEub3JpZ2lufSkpLCFnKXt4JiZ4Lmxhc3RfZXJyb3ImJihpPXgubGFzdF9lcnJvcigpKTticmVha31yZXR1cm5cImlcIj09PWEmJmIucGFyZW50KCkuaXMoXCIuanN0cmVlLWNsb3NlZFwiKSYmeC5zZXR0aW5ncy5kbmQub3Blbl90aW1lb3V0JiYocz1zZXRUaW1lb3V0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7ZS5vcGVuX25vZGUodCl9fSh4LGIpLHguc2V0dGluZ3MuZG5kLm9wZW5fdGltZW91dCkpLGc/KHQ9e2luczp4LHBhcjpoLHBvczpcImlcIiE9PWF8fFwibGFzdFwiIT09eXx8MCE9PV98fHguaXNfbG9hZGVkKGspP186XCJsYXN0XCJ9LG4uY3NzKHtsZWZ0OmQrXCJweFwiLHRvcDpjK1wicHhcIn0pLnNob3coKSxvLmhlbHBlci5maW5kKFwiLmpzdHJlZS1pY29uXCIpLmZpcnN0KCkucmVtb3ZlQ2xhc3MoXCJqc3RyZWUtZXJcIikuYWRkQ2xhc3MoXCJqc3RyZWUtb2tcIiksaT17fSx1PSEwLCExKTp2b2lkIDB9KSx1PT09ITApKXJldHVybn1lbHNle2ZvcihnPSEwLGY9MCxwPW8uZGF0YS5ub2Rlcy5sZW5ndGg7cD5mJiYoZz1nJiZ4LmNoZWNrKG8uZGF0YS5vcmlnaW4mJihvLmRhdGEub3JpZ2luLnNldHRpbmdzLmRuZC5hbHdheXNfY29weXx8by5kYXRhLm9yaWdpbi5zZXR0aW5ncy5kbmQuY29weSYmKG8uZXZlbnQubWV0YUtleXx8by5ldmVudC5jdHJsS2V5KSk/XCJjb3B5X25vZGVcIjpcIm1vdmVfbm9kZVwiLG8uZGF0YS5vcmlnaW4mJm8uZGF0YS5vcmlnaW4hPT14P28uZGF0YS5vcmlnaW4uZ2V0X25vZGUoby5kYXRhLm5vZGVzW2ZdKTpvLmRhdGEubm9kZXNbZl0sZS5qc3RyZWUucm9vdCxcImxhc3RcIix7ZG5kOiEwLHJlZjp4LmdldF9ub2RlKGUuanN0cmVlLnJvb3QpLHBvczpcImlcIixvcmlnaW46by5kYXRhLm9yaWdpbixpc19tdWx0aTpvLmRhdGEub3JpZ2luJiZvLmRhdGEub3JpZ2luIT09eCxpc19mb3JlaWduOiFvLmRhdGEub3JpZ2lufSksZyk7ZisrKTtpZihnKXJldHVybiB0PXtpbnM6eCxwYXI6ZS5qc3RyZWUucm9vdCxwb3M6XCJsYXN0XCJ9LG4uaGlkZSgpLHZvaWQgby5oZWxwZXIuZmluZChcIi5qc3RyZWUtaWNvblwiKS5maXJzdCgpLnJlbW92ZUNsYXNzKFwianN0cmVlLWVyXCIpLmFkZENsYXNzKFwianN0cmVlLW9rXCIpfXQ9ITEsby5oZWxwZXIuZmluZChcIi5qc3RyZWUtaWNvblwiKS5yZW1vdmVDbGFzcyhcImpzdHJlZS1va1wiKS5hZGRDbGFzcyhcImpzdHJlZS1lclwiKSxuLmhpZGUoKX19KS5vbihcImRuZF9zY3JvbGwudmFrYXRhLmpzdHJlZVwiLGZ1bmN0aW9uKGUsaSl7aSYmaS5kYXRhJiZpLmRhdGEuanN0cmVlJiYobi5oaWRlKCksdD0hMSxyPSExLGkuaGVscGVyLmZpbmQoXCIuanN0cmVlLWljb25cIikuZmlyc3QoKS5yZW1vdmVDbGFzcyhcImpzdHJlZS1va1wiKS5hZGRDbGFzcyhcImpzdHJlZS1lclwiKSl9KS5vbihcImRuZF9zdG9wLnZha2F0YS5qc3RyZWVcIixmdW5jdGlvbihhLG8pe2lmKHMmJmNsZWFyVGltZW91dChzKSxvJiZvLmRhdGEmJm8uZGF0YS5qc3RyZWUpe24uaGlkZSgpLmRldGFjaCgpO3ZhciBkLGMsbD1bXTtpZih0KXtmb3IoZD0wLGM9by5kYXRhLm5vZGVzLmxlbmd0aDtjPmQ7ZCsrKWxbZF09by5kYXRhLm9yaWdpbj9vLmRhdGEub3JpZ2luLmdldF9ub2RlKG8uZGF0YS5ub2Rlc1tkXSk6by5kYXRhLm5vZGVzW2RdO3QuaW5zW28uZGF0YS5vcmlnaW4mJihvLmRhdGEub3JpZ2luLnNldHRpbmdzLmRuZC5hbHdheXNfY29weXx8by5kYXRhLm9yaWdpbi5zZXR0aW5ncy5kbmQuY29weSYmKG8uZXZlbnQubWV0YUtleXx8by5ldmVudC5jdHJsS2V5KSk/XCJjb3B5X25vZGVcIjpcIm1vdmVfbm9kZVwiXShsLHQucGFyLHQucG9zLCExLCExLCExLG8uZGF0YS5vcmlnaW4pfWVsc2UgZD1lKG8uZXZlbnQudGFyZ2V0KS5jbG9zZXN0KFwiLmpzdHJlZVwiKSxkLmxlbmd0aCYmaSYmaS5lcnJvciYmXCJjaGVja1wiPT09aS5lcnJvciYmKGQ9ZC5qc3RyZWUoITApLGQmJmQuc2V0dGluZ3MuY29yZS5lcnJvci5jYWxsKHRoaXMsaSkpO3I9ITEsdD0hMX19KS5vbihcImtleXVwLmpzdHJlZSBrZXlkb3duLmpzdHJlZVwiLGZ1bmN0aW9uKHQsaSl7aT1lLnZha2F0YS5kbmQuX2dldCgpLGkmJmkuZGF0YSYmaS5kYXRhLmpzdHJlZSYmKGkuaGVscGVyLmZpbmQoXCIuanN0cmVlLWNvcHlcIikuZmlyc3QoKVtpLmRhdGEub3JpZ2luJiYoaS5kYXRhLm9yaWdpbi5zZXR0aW5ncy5kbmQuYWx3YXlzX2NvcHl8fGkuZGF0YS5vcmlnaW4uc2V0dGluZ3MuZG5kLmNvcHkmJih0Lm1ldGFLZXl8fHQuY3RybEtleSkpP1wic2hvd1wiOlwiaGlkZVwiXSgpLHImJihyLm1ldGFLZXk9dC5tZXRhS2V5LHIuY3RybEtleT10LmN0cmxLZXksZS52YWthdGEuZG5kLl90cmlnZ2VyKFwibW92ZVwiLHIpKSl9KX0pLGZ1bmN0aW9uKGUpe2UudmFrYXRhLmh0bWw9e2RpdjplKFwiPGRpdiAvPlwiKSxlc2NhcGU6ZnVuY3Rpb24odCl7cmV0dXJuIGUudmFrYXRhLmh0bWwuZGl2LnRleHQodCkuaHRtbCgpfSxzdHJpcDpmdW5jdGlvbih0KXtyZXR1cm4gZS52YWthdGEuaHRtbC5kaXYuZW1wdHkoKS5hcHBlbmQoZS5wYXJzZUhUTUwodCkpLnRleHQoKX19O3ZhciB0PXtlbGVtZW50OiExLHRhcmdldDohMSxpc19kb3duOiExLGlzX2RyYWc6ITEsaGVscGVyOiExLGhlbHBlcl93OjAsZGF0YTohMSxpbml0X3g6MCxpbml0X3k6MCxzY3JvbGxfbDowLHNjcm9sbF90OjAsc2Nyb2xsX2U6ITEsc2Nyb2xsX2k6ITEsaXNfdG91Y2g6ITF9O2UudmFrYXRhLmRuZD17c2V0dGluZ3M6e3Njcm9sbF9zcGVlZDoxMCxzY3JvbGxfcHJveGltaXR5OjIwLGhlbHBlcl9sZWZ0OjUsaGVscGVyX3RvcDoxMCx0aHJlc2hvbGQ6NSx0aHJlc2hvbGRfdG91Y2g6NTB9LF90cmlnZ2VyOmZ1bmN0aW9uKHQsaSl7dmFyIHI9ZS52YWthdGEuZG5kLl9nZXQoKTtyLmV2ZW50PWksZShsKS50cmlnZ2VySGFuZGxlcihcImRuZF9cIit0K1wiLnZha2F0YVwiLHIpfSxfZ2V0OmZ1bmN0aW9uKCl7cmV0dXJue2RhdGE6dC5kYXRhLGVsZW1lbnQ6dC5lbGVtZW50LGhlbHBlcjp0LmhlbHBlcn19LF9jbGVhbjpmdW5jdGlvbigpe3QuaGVscGVyJiZ0LmhlbHBlci5yZW1vdmUoKSx0LnNjcm9sbF9pJiYoY2xlYXJJbnRlcnZhbCh0LnNjcm9sbF9pKSx0LnNjcm9sbF9pPSExKSx0PXtlbGVtZW50OiExLHRhcmdldDohMSxpc19kb3duOiExLGlzX2RyYWc6ITEsaGVscGVyOiExLGhlbHBlcl93OjAsZGF0YTohMSxpbml0X3g6MCxpbml0X3k6MCxzY3JvbGxfbDowLHNjcm9sbF90OjAsc2Nyb2xsX2U6ITEsc2Nyb2xsX2k6ITEsaXNfdG91Y2g6ITF9LGUobCkub2ZmKFwibW91c2Vtb3ZlLnZha2F0YS5qc3RyZWUgdG91Y2htb3ZlLnZha2F0YS5qc3RyZWVcIixlLnZha2F0YS5kbmQuZHJhZyksZShsKS5vZmYoXCJtb3VzZXVwLnZha2F0YS5qc3RyZWUgdG91Y2hlbmQudmFrYXRhLmpzdHJlZVwiLGUudmFrYXRhLmRuZC5zdG9wKX0sX3Njcm9sbDpmdW5jdGlvbihpKXtpZighdC5zY3JvbGxfZXx8IXQuc2Nyb2xsX2wmJiF0LnNjcm9sbF90KXJldHVybiB0LnNjcm9sbF9pJiYoY2xlYXJJbnRlcnZhbCh0LnNjcm9sbF9pKSx0LnNjcm9sbF9pPSExKSwhMTtpZighdC5zY3JvbGxfaSlyZXR1cm4gdC5zY3JvbGxfaT1zZXRJbnRlcnZhbChlLnZha2F0YS5kbmQuX3Njcm9sbCwxMDApLCExO2lmKGk9PT0hMClyZXR1cm4hMTt2YXIgcj10LnNjcm9sbF9lLnNjcm9sbFRvcCgpLHM9dC5zY3JvbGxfZS5zY3JvbGxMZWZ0KCk7dC5zY3JvbGxfZS5zY3JvbGxUb3Aocit0LnNjcm9sbF90KmUudmFrYXRhLmRuZC5zZXR0aW5ncy5zY3JvbGxfc3BlZWQpLHQuc2Nyb2xsX2Uuc2Nyb2xsTGVmdChzK3Quc2Nyb2xsX2wqZS52YWthdGEuZG5kLnNldHRpbmdzLnNjcm9sbF9zcGVlZCksKHIhPT10LnNjcm9sbF9lLnNjcm9sbFRvcCgpfHxzIT09dC5zY3JvbGxfZS5zY3JvbGxMZWZ0KCkpJiZlLnZha2F0YS5kbmQuX3RyaWdnZXIoXCJzY3JvbGxcIix0LnNjcm9sbF9lKX0sc3RhcnQ6ZnVuY3Rpb24oaSxyLHMpe1widG91Y2hzdGFydFwiPT09aS50eXBlJiZpLm9yaWdpbmFsRXZlbnQmJmkub3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlcyYmaS5vcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdJiYoaS5wYWdlWD1pLm9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVgsaS5wYWdlWT1pLm9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVksaS50YXJnZXQ9bC5lbGVtZW50RnJvbVBvaW50KGkub3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWC13aW5kb3cucGFnZVhPZmZzZXQsaS5vcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VZLXdpbmRvdy5wYWdlWU9mZnNldCkpLHQuaXNfZHJhZyYmZS52YWthdGEuZG5kLnN0b3Aoe30pO3RyeXtpLmN1cnJlbnRUYXJnZXQudW5zZWxlY3RhYmxlPVwib25cIixpLmN1cnJlbnRUYXJnZXQub25zZWxlY3RzdGFydD1mdW5jdGlvbigpe3JldHVybiExfSxpLmN1cnJlbnRUYXJnZXQuc3R5bGUmJihpLmN1cnJlbnRUYXJnZXQuc3R5bGUuTW96VXNlclNlbGVjdD1cIm5vbmVcIil9Y2F0Y2gobil7fXJldHVybiB0LmluaXRfeD1pLnBhZ2VYLHQuaW5pdF95PWkucGFnZVksdC5kYXRhPXIsdC5pc19kb3duPSEwLHQuZWxlbWVudD1pLmN1cnJlbnRUYXJnZXQsdC50YXJnZXQ9aS50YXJnZXQsdC5pc190b3VjaD1cInRvdWNoc3RhcnRcIj09PWkudHlwZSxzIT09ITEmJih0LmhlbHBlcj1lKFwiPGRpdiBpZD0ndmFrYXRhLWRuZCc+PC9kaXY+XCIpLmh0bWwocykuY3NzKHtkaXNwbGF5OlwiYmxvY2tcIixtYXJnaW46XCIwXCIscGFkZGluZzpcIjBcIixwb3NpdGlvbjpcImFic29sdXRlXCIsdG9wOlwiLTIwMDBweFwiLGxpbmVIZWlnaHQ6XCIxNnB4XCIsekluZGV4OlwiMTAwMDBcIn0pKSxlKGwpLm9uKFwibW91c2Vtb3ZlLnZha2F0YS5qc3RyZWUgdG91Y2htb3ZlLnZha2F0YS5qc3RyZWVcIixlLnZha2F0YS5kbmQuZHJhZyksZShsKS5vbihcIm1vdXNldXAudmFrYXRhLmpzdHJlZSB0b3VjaGVuZC52YWthdGEuanN0cmVlXCIsZS52YWthdGEuZG5kLnN0b3ApLCExfSxkcmFnOmZ1bmN0aW9uKGkpe2lmKFwidG91Y2htb3ZlXCI9PT1pLnR5cGUmJmkub3JpZ2luYWxFdmVudCYmaS5vcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzJiZpLm9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0mJihpLnBhZ2VYPWkub3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWCxpLnBhZ2VZPWkub3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWSxpLnRhcmdldD1sLmVsZW1lbnRGcm9tUG9pbnQoaS5vcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VYLXdpbmRvdy5wYWdlWE9mZnNldCxpLm9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVktd2luZG93LnBhZ2VZT2Zmc2V0KSksdC5pc19kb3duKXtpZighdC5pc19kcmFnKXtpZighKE1hdGguYWJzKGkucGFnZVgtdC5pbml0X3gpPih0LmlzX3RvdWNoP2UudmFrYXRhLmRuZC5zZXR0aW5ncy50aHJlc2hvbGRfdG91Y2g6ZS52YWthdGEuZG5kLnNldHRpbmdzLnRocmVzaG9sZCl8fE1hdGguYWJzKGkucGFnZVktdC5pbml0X3kpPih0LmlzX3RvdWNoP2UudmFrYXRhLmRuZC5zZXR0aW5ncy50aHJlc2hvbGRfdG91Y2g6ZS52YWthdGEuZG5kLnNldHRpbmdzLnRocmVzaG9sZCkpKXJldHVybjt0LmhlbHBlciYmKHQuaGVscGVyLmFwcGVuZFRvKFwiYm9keVwiKSx0LmhlbHBlcl93PXQuaGVscGVyLm91dGVyV2lkdGgoKSksdC5pc19kcmFnPSEwLGUudmFrYXRhLmRuZC5fdHJpZ2dlcihcInN0YXJ0XCIsaSl9dmFyIHI9ITEscz0hMSxuPSExLGE9ITEsbz0hMSxkPSExLGM9ITEsaD0hMSxfPSExLHU9ITE7cmV0dXJuIHQuc2Nyb2xsX3Q9MCx0LnNjcm9sbF9sPTAsdC5zY3JvbGxfZT0hMSxlKGUoaS50YXJnZXQpLnBhcmVudHNVbnRpbChcImJvZHlcIikuYWRkQmFjaygpLmdldCgpLnJldmVyc2UoKSkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuL15hdXRvfHNjcm9sbCQvLnRlc3QoZSh0aGlzKS5jc3MoXCJvdmVyZmxvd1wiKSkmJih0aGlzLnNjcm9sbEhlaWdodD50aGlzLm9mZnNldEhlaWdodHx8dGhpcy5zY3JvbGxXaWR0aD50aGlzLm9mZnNldFdpZHRoKX0pLmVhY2goZnVuY3Rpb24oKXt2YXIgcj1lKHRoaXMpLHM9ci5vZmZzZXQoKTtyZXR1cm4gdGhpcy5zY3JvbGxIZWlnaHQ+dGhpcy5vZmZzZXRIZWlnaHQmJihzLnRvcCtyLmhlaWdodCgpLWkucGFnZVk8ZS52YWthdGEuZG5kLnNldHRpbmdzLnNjcm9sbF9wcm94aW1pdHkmJih0LnNjcm9sbF90PTEpLGkucGFnZVktcy50b3A8ZS52YWthdGEuZG5kLnNldHRpbmdzLnNjcm9sbF9wcm94aW1pdHkmJih0LnNjcm9sbF90PS0xKSksdGhpcy5zY3JvbGxXaWR0aD50aGlzLm9mZnNldFdpZHRoJiYocy5sZWZ0K3Iud2lkdGgoKS1pLnBhZ2VYPGUudmFrYXRhLmRuZC5zZXR0aW5ncy5zY3JvbGxfcHJveGltaXR5JiYodC5zY3JvbGxfbD0xKSxpLnBhZ2VYLXMubGVmdDxlLnZha2F0YS5kbmQuc2V0dGluZ3Muc2Nyb2xsX3Byb3hpbWl0eSYmKHQuc2Nyb2xsX2w9LTEpKSx0LnNjcm9sbF90fHx0LnNjcm9sbF9sPyh0LnNjcm9sbF9lPWUodGhpcyksITEpOnZvaWQgMH0pLHQuc2Nyb2xsX2V8fChyPWUobCkscz1lKHdpbmRvdyksbj1yLmhlaWdodCgpLGE9cy5oZWlnaHQoKSxvPXIud2lkdGgoKSxkPXMud2lkdGgoKSxjPXIuc2Nyb2xsVG9wKCksaD1yLnNjcm9sbExlZnQoKSxuPmEmJmkucGFnZVktYzxlLnZha2F0YS5kbmQuc2V0dGluZ3Muc2Nyb2xsX3Byb3hpbWl0eSYmKHQuc2Nyb2xsX3Q9LTEpLG4+YSYmYS0oaS5wYWdlWS1jKTxlLnZha2F0YS5kbmQuc2V0dGluZ3Muc2Nyb2xsX3Byb3hpbWl0eSYmKHQuc2Nyb2xsX3Q9MSksbz5kJiZpLnBhZ2VYLWg8ZS52YWthdGEuZG5kLnNldHRpbmdzLnNjcm9sbF9wcm94aW1pdHkmJih0LnNjcm9sbF9sPS0xKSxvPmQmJmQtKGkucGFnZVgtaCk8ZS52YWthdGEuZG5kLnNldHRpbmdzLnNjcm9sbF9wcm94aW1pdHkmJih0LnNjcm9sbF9sPTEpLCh0LnNjcm9sbF90fHx0LnNjcm9sbF9sKSYmKHQuc2Nyb2xsX2U9cikpLHQuc2Nyb2xsX2UmJmUudmFrYXRhLmRuZC5fc2Nyb2xsKCEwKSx0LmhlbHBlciYmKF89cGFyc2VJbnQoaS5wYWdlWStlLnZha2F0YS5kbmQuc2V0dGluZ3MuaGVscGVyX3RvcCwxMCksdT1wYXJzZUludChpLnBhZ2VYK2UudmFrYXRhLmRuZC5zZXR0aW5ncy5oZWxwZXJfbGVmdCwxMCksbiYmXysyNT5uJiYoXz1uLTUwKSxvJiZ1K3QuaGVscGVyX3c+byYmKHU9by0odC5oZWxwZXJfdysyKSksdC5oZWxwZXIuY3NzKHtsZWZ0OnUrXCJweFwiLHRvcDpfK1wicHhcIn0pKSxlLnZha2F0YS5kbmQuX3RyaWdnZXIoXCJtb3ZlXCIsaSksITF9fSxzdG9wOmZ1bmN0aW9uKGkpe2lmKFwidG91Y2hlbmRcIj09PWkudHlwZSYmaS5vcmlnaW5hbEV2ZW50JiZpLm9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXMmJmkub3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlc1swXSYmKGkucGFnZVg9aS5vcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VYLGkucGFnZVk9aS5vcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VZLGkudGFyZ2V0PWwuZWxlbWVudEZyb21Qb2ludChpLm9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVgtd2luZG93LnBhZ2VYT2Zmc2V0LGkub3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWS13aW5kb3cucGFnZVlPZmZzZXQpKSx0LmlzX2RyYWcpZS52YWthdGEuZG5kLl90cmlnZ2VyKFwic3RvcFwiLGkpO2Vsc2UgaWYoXCJ0b3VjaGVuZFwiPT09aS50eXBlJiZpLnRhcmdldD09PXQudGFyZ2V0KXt2YXIgcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZShpLnRhcmdldCkuY2xpY2soKX0sMTAwKTtlKGkudGFyZ2V0KS5vbmUoXCJjbGlja1wiLGZ1bmN0aW9uKCl7ciYmY2xlYXJUaW1lb3V0KHIpfSl9cmV0dXJuIGUudmFrYXRhLmRuZC5fY2xlYW4oKSwhMX19fShlKSxlLmpzdHJlZS5kZWZhdWx0cy5tYXNzbG9hZD1udWxsLGUuanN0cmVlLnBsdWdpbnMubWFzc2xvYWQ9ZnVuY3Rpb24odCxpKXt0aGlzLmluaXQ9ZnVuY3Rpb24oZSx0KXtpLmluaXQuY2FsbCh0aGlzLGUsdCksdGhpcy5fZGF0YS5tYXNzbG9hZD17fX0sdGhpcy5fbG9hZF9ub2Rlcz1mdW5jdGlvbih0LHIscyl7dmFyIG49dGhpcy5zZXR0aW5ncy5tYXNzbG9hZDtyZXR1cm4gcyYmIWUuaXNFbXB0eU9iamVjdCh0aGlzLl9kYXRhLm1hc3Nsb2FkKT9pLl9sb2FkX25vZGVzLmNhbGwodGhpcyx0LHIscyk6ZS5pc0Z1bmN0aW9uKG4pP24uY2FsbCh0aGlzLHQsZS5wcm94eShmdW5jdGlvbihlKXtpZihlKWZvcih2YXIgbiBpbiBlKWUuaGFzT3duUHJvcGVydHkobikmJih0aGlzLl9kYXRhLm1hc3Nsb2FkW25dPWVbbl0pO2kuX2xvYWRfbm9kZXMuY2FsbCh0aGlzLHQscixzKX0sdGhpcykpOlwib2JqZWN0XCI9PXR5cGVvZiBuJiZuJiZuLnVybD8obj1lLmV4dGVuZCghMCx7fSxuKSxlLmlzRnVuY3Rpb24obi51cmwpJiYobi51cmw9bi51cmwuY2FsbCh0aGlzLHQpKSxlLmlzRnVuY3Rpb24obi5kYXRhKSYmKG4uZGF0YT1uLmRhdGEuY2FsbCh0aGlzLHQpKSxlLmFqYXgobikuZG9uZShlLnByb3h5KGZ1bmN0aW9uKGUsbixhKXtpZihlKWZvcih2YXIgbyBpbiBlKWUuaGFzT3duUHJvcGVydHkobykmJih0aGlzLl9kYXRhLm1hc3Nsb2FkW29dPWVbb10pO2kuX2xvYWRfbm9kZXMuY2FsbCh0aGlzLHQscixzKX0sdGhpcykpLmZhaWwoZS5wcm94eShmdW5jdGlvbihlKXtpLl9sb2FkX25vZGVzLmNhbGwodGhpcyx0LHIscyl9LHRoaXMpKSk6aS5fbG9hZF9ub2Rlcy5jYWxsKHRoaXMsdCxyLHMpfSx0aGlzLl9sb2FkX25vZGU9ZnVuY3Rpb24odCxyKXt2YXIgcz10aGlzLl9kYXRhLm1hc3Nsb2FkW3QuaWRdO3JldHVybiBzP3RoaXNbXCJzdHJpbmdcIj09dHlwZW9mIHM/XCJfYXBwZW5kX2h0bWxfZGF0YVwiOlwiX2FwcGVuZF9qc29uX2RhdGFcIl0odCxcInN0cmluZ1wiPT10eXBlb2Ygcz9lKGUucGFyc2VIVE1MKHMpKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gMyE9PXRoaXMubm9kZVR5cGV9KTpzLGZ1bmN0aW9uKGUpe3IuY2FsbCh0aGlzLGUpLGRlbGV0ZSB0aGlzLl9kYXRhLm1hc3Nsb2FkW3QuaWRdfSk6aS5fbG9hZF9ub2RlLmNhbGwodGhpcyx0LHIpfX0sZS5qc3RyZWUuZGVmYXVsdHMuc2VhcmNoPXthamF4OiExLGZ1enp5OiExLGNhc2Vfc2Vuc2l0aXZlOiExLHNob3dfb25seV9tYXRjaGVzOiExLHNob3dfb25seV9tYXRjaGVzX2NoaWxkcmVuOiExLGNsb3NlX29wZW5lZF9vbmNsZWFyOiEwLHNlYXJjaF9sZWF2ZXNfb25seTohMSxzZWFyY2hfY2FsbGJhY2s6ITF9LGUuanN0cmVlLnBsdWdpbnMuc2VhcmNoPWZ1bmN0aW9uKGkscil7dGhpcy5iaW5kPWZ1bmN0aW9uKCl7ci5iaW5kLmNhbGwodGhpcyksdGhpcy5fZGF0YS5zZWFyY2guc3RyPVwiXCIsdGhpcy5fZGF0YS5zZWFyY2guZG9tPWUoKSx0aGlzLl9kYXRhLnNlYXJjaC5yZXM9W10sdGhpcy5fZGF0YS5zZWFyY2gub3BuPVtdLHRoaXMuX2RhdGEuc2VhcmNoLnNvbT0hMSx0aGlzLl9kYXRhLnNlYXJjaC5zbWM9ITEsdGhpcy5fZGF0YS5zZWFyY2guaGRuPVtdLHRoaXMuZWxlbWVudC5vbihcInNlYXJjaC5qc3RyZWVcIixlLnByb3h5KGZ1bmN0aW9uKHQsaSl7aWYodGhpcy5fZGF0YS5zZWFyY2guc29tJiZpLnJlcy5sZW5ndGgpe3ZhciByLHMsbj10aGlzLl9tb2RlbC5kYXRhLGE9W107Zm9yKHI9MCxzPWkucmVzLmxlbmd0aDtzPnI7cisrKW5baS5yZXNbcl1dJiYhbltpLnJlc1tyXV0uc3RhdGUuaGlkZGVuJiYoYS5wdXNoKGkucmVzW3JdKSxhPWEuY29uY2F0KG5baS5yZXNbcl1dLnBhcmVudHMpLHRoaXMuX2RhdGEuc2VhcmNoLnNtYyYmKGE9YS5jb25jYXQobltpLnJlc1tyXV0uY2hpbGRyZW5fZCkpKTthPWUudmFrYXRhLmFycmF5X3JlbW92ZV9pdGVtKGUudmFrYXRhLmFycmF5X3VuaXF1ZShhKSxlLmpzdHJlZS5yb290KSx0aGlzLl9kYXRhLnNlYXJjaC5oZG49dGhpcy5oaWRlX2FsbCghMCksdGhpcy5zaG93X25vZGUoYSl9fSx0aGlzKSkub24oXCJjbGVhcl9zZWFyY2guanN0cmVlXCIsZS5wcm94eShmdW5jdGlvbihlLHQpe3RoaXMuX2RhdGEuc2VhcmNoLnNvbSYmdC5yZXMubGVuZ3RoJiZ0aGlzLnNob3dfbm9kZSh0aGlzLl9kYXRhLnNlYXJjaC5oZG4pfSx0aGlzKSl9LHRoaXMuc2VhcmNoPWZ1bmN0aW9uKGkscixzLG4sYSxvKXtpZihpPT09ITF8fFwiXCI9PT1lLnRyaW0oaS50b1N0cmluZygpKSlyZXR1cm4gdGhpcy5jbGVhcl9zZWFyY2goKTtuPXRoaXMuZ2V0X25vZGUobiksbj1uJiZuLmlkP24uaWQ6bnVsbCxpPWkudG9TdHJpbmcoKTt2YXIgZCxjLGw9dGhpcy5zZXR0aW5ncy5zZWFyY2gsaD1sLmFqYXg/bC5hamF4OiExLF89dGhpcy5fbW9kZWwuZGF0YSx1PW51bGwsZz1bXSxmPVtdO2lmKHRoaXMuX2RhdGEuc2VhcmNoLnJlcy5sZW5ndGgmJiFhJiZ0aGlzLmNsZWFyX3NlYXJjaCgpLHM9PT10JiYocz1sLnNob3dfb25seV9tYXRjaGVzKSxvPT09dCYmKG89bC5zaG93X29ubHlfbWF0Y2hlc19jaGlsZHJlbiksIXImJmghPT0hMSlyZXR1cm4gZS5pc0Z1bmN0aW9uKGgpP2guY2FsbCh0aGlzLGksZS5wcm94eShmdW5jdGlvbih0KXt0JiZ0LmQmJih0PXQuZCksdGhpcy5fbG9hZF9ub2RlcyhlLmlzQXJyYXkodCk/ZS52YWthdGEuYXJyYXlfdW5pcXVlKHQpOltdLGZ1bmN0aW9uKCl7dGhpcy5zZWFyY2goaSwhMCxzLG4sYSl9LCEwKX0sdGhpcyksbik6KGg9ZS5leHRlbmQoe30saCksaC5kYXRhfHwoaC5kYXRhPXt9KSxoLmRhdGEuc3RyPWksbiYmKGguZGF0YS5pbnNpZGU9biksZS5hamF4KGgpLmZhaWwoZS5wcm94eShmdW5jdGlvbigpe3RoaXMuX2RhdGEuY29yZS5sYXN0X2Vycm9yPXtlcnJvcjpcImFqYXhcIixwbHVnaW46XCJzZWFyY2hcIixpZDpcInNlYXJjaF8wMVwiLHJlYXNvbjpcIkNvdWxkIG5vdCBsb2FkIHNlYXJjaCBwYXJlbnRzXCIsZGF0YTpKU09OLnN0cmluZ2lmeShoKX0sdGhpcy5zZXR0aW5ncy5jb3JlLmVycm9yLmNhbGwodGhpcyx0aGlzLl9kYXRhLmNvcmUubGFzdF9lcnJvcil9LHRoaXMpKS5kb25lKGUucHJveHkoZnVuY3Rpb24odCl7dCYmdC5kJiYodD10LmQpLHRoaXMuX2xvYWRfbm9kZXMoZS5pc0FycmF5KHQpP2UudmFrYXRhLmFycmF5X3VuaXF1ZSh0KTpbXSxmdW5jdGlvbigpe3RoaXMuc2VhcmNoKGksITAscyxuLGEpfSwhMCl9LHRoaXMpKSk7aWYoYXx8KHRoaXMuX2RhdGEuc2VhcmNoLnN0cj1pLHRoaXMuX2RhdGEuc2VhcmNoLmRvbT1lKCksdGhpcy5fZGF0YS5zZWFyY2gucmVzPVtdLHRoaXMuX2RhdGEuc2VhcmNoLm9wbj1bXSx0aGlzLl9kYXRhLnNlYXJjaC5zb209cyx0aGlzLl9kYXRhLnNlYXJjaC5zbWM9byksdT1uZXcgZS52YWthdGEuc2VhcmNoKGksITAse2Nhc2VTZW5zaXRpdmU6bC5jYXNlX3NlbnNpdGl2ZSxmdXp6eTpsLmZ1enp5fSksZS5lYWNoKF9bbj9uOmUuanN0cmVlLnJvb3RdLmNoaWxkcmVuX2QsZnVuY3Rpb24oZSx0KXt2YXIgcj1fW3RdO3IudGV4dCYmKCFsLnNlYXJjaF9sZWF2ZXNfb25seXx8ci5zdGF0ZS5sb2FkZWQmJjA9PT1yLmNoaWxkcmVuLmxlbmd0aCkmJihsLnNlYXJjaF9jYWxsYmFjayYmbC5zZWFyY2hfY2FsbGJhY2suY2FsbCh0aGlzLGkscil8fCFsLnNlYXJjaF9jYWxsYmFjayYmdS5zZWFyY2goci50ZXh0KS5pc01hdGNoKSYmKGcucHVzaCh0KSxmPWYuY29uY2F0KHIucGFyZW50cykpfSksZy5sZW5ndGgpe2ZvcihmPWUudmFrYXRhLmFycmF5X3VuaXF1ZShmKSxkPTAsYz1mLmxlbmd0aDtjPmQ7ZCsrKWZbZF0hPT1lLmpzdHJlZS5yb290JiZfW2ZbZF1dJiZ0aGlzLm9wZW5fbm9kZShmW2RdLG51bGwsMCk9PT0hMCYmdGhpcy5fZGF0YS5zZWFyY2gub3BuLnB1c2goZltkXSk7YT8odGhpcy5fZGF0YS5zZWFyY2guZG9tPXRoaXMuX2RhdGEuc2VhcmNoLmRvbS5hZGQoZSh0aGlzLmVsZW1lbnRbMF0ucXVlcnlTZWxlY3RvckFsbChcIiNcIitlLm1hcChnLGZ1bmN0aW9uKHQpe3JldHVybi0xIT09XCIwMTIzNDU2Nzg5XCIuaW5kZXhPZih0WzBdKT9cIlxcXFwzXCIrdFswXStcIiBcIit0LnN1YnN0cigxKS5yZXBsYWNlKGUuanN0cmVlLmlkcmVnZXgsXCJcXFxcJCZcIik6dC5yZXBsYWNlKGUuanN0cmVlLmlkcmVnZXgsXCJcXFxcJCZcIil9KS5qb2luKFwiLCAjXCIpKSkpLHRoaXMuX2RhdGEuc2VhcmNoLnJlcz1lLnZha2F0YS5hcnJheV91bmlxdWUodGhpcy5fZGF0YS5zZWFyY2gucmVzLmNvbmNhdChnKSkpOih0aGlzLl9kYXRhLnNlYXJjaC5kb209ZSh0aGlzLmVsZW1lbnRbMF0ucXVlcnlTZWxlY3RvckFsbChcIiNcIitlLm1hcChnLGZ1bmN0aW9uKHQpe3JldHVybi0xIT09XCIwMTIzNDU2Nzg5XCIuaW5kZXhPZih0WzBdKT9cIlxcXFwzXCIrdFswXStcIiBcIit0LnN1YnN0cigxKS5yZXBsYWNlKGUuanN0cmVlLmlkcmVnZXgsXCJcXFxcJCZcIik6dC5yZXBsYWNlKGUuanN0cmVlLmlkcmVnZXgsXCJcXFxcJCZcIil9KS5qb2luKFwiLCAjXCIpKSksdGhpcy5fZGF0YS5zZWFyY2gucmVzPWcpLHRoaXMuX2RhdGEuc2VhcmNoLmRvbS5jaGlsZHJlbihcIi5qc3RyZWUtYW5jaG9yXCIpLmFkZENsYXNzKFwianN0cmVlLXNlYXJjaFwiKX10aGlzLnRyaWdnZXIoXCJzZWFyY2hcIix7bm9kZXM6dGhpcy5fZGF0YS5zZWFyY2guZG9tLHN0cjppLHJlczp0aGlzLl9kYXRhLnNlYXJjaC5yZXMsc2hvd19vbmx5X21hdGNoZXM6c30pfSx0aGlzLmNsZWFyX3NlYXJjaD1mdW5jdGlvbigpe3RoaXMuc2V0dGluZ3Muc2VhcmNoLmNsb3NlX29wZW5lZF9vbmNsZWFyJiZ0aGlzLmNsb3NlX25vZGUodGhpcy5fZGF0YS5zZWFyY2gub3BuLDApLHRoaXMudHJpZ2dlcihcImNsZWFyX3NlYXJjaFwiLHtub2Rlczp0aGlzLl9kYXRhLnNlYXJjaC5kb20sc3RyOnRoaXMuX2RhdGEuc2VhcmNoLnN0cixyZXM6dGhpcy5fZGF0YS5zZWFyY2gucmVzfSksdGhpcy5fZGF0YS5zZWFyY2gucmVzLmxlbmd0aCYmKHRoaXMuX2RhdGEuc2VhcmNoLmRvbT1lKHRoaXMuZWxlbWVudFswXS5xdWVyeVNlbGVjdG9yQWxsKFwiI1wiK2UubWFwKHRoaXMuX2RhdGEuc2VhcmNoLnJlcyxmdW5jdGlvbih0KXtyZXR1cm4tMSE9PVwiMDEyMzQ1Njc4OVwiLmluZGV4T2YodFswXSk/XCJcXFxcM1wiK3RbMF0rXCIgXCIrdC5zdWJzdHIoMSkucmVwbGFjZShlLmpzdHJlZS5pZHJlZ2V4LFwiXFxcXCQmXCIpOnQucmVwbGFjZShlLmpzdHJlZS5pZHJlZ2V4LFwiXFxcXCQmXCIpfSkuam9pbihcIiwgI1wiKSkpLHRoaXMuX2RhdGEuc2VhcmNoLmRvbS5jaGlsZHJlbihcIi5qc3RyZWUtYW5jaG9yXCIpLnJlbW92ZUNsYXNzKFwianN0cmVlLXNlYXJjaFwiKSksdGhpcy5fZGF0YS5zZWFyY2guc3RyPVwiXCIsdGhpcy5fZGF0YS5zZWFyY2gucmVzPVtdLHRoaXMuX2RhdGEuc2VhcmNoLm9wbj1bXSx0aGlzLl9kYXRhLnNlYXJjaC5kb209ZSgpfSx0aGlzLnJlZHJhd19ub2RlPWZ1bmN0aW9uKHQsaSxzLG4pe2lmKHQ9ci5yZWRyYXdfbm9kZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdCYmLTEhPT1lLmluQXJyYXkodC5pZCx0aGlzLl9kYXRhLnNlYXJjaC5yZXMpKXt2YXIgYSxvLGQ9bnVsbDtmb3IoYT0wLG89dC5jaGlsZE5vZGVzLmxlbmd0aDtvPmE7YSsrKWlmKHQuY2hpbGROb2Rlc1thXSYmdC5jaGlsZE5vZGVzW2FdLmNsYXNzTmFtZSYmLTEhPT10LmNoaWxkTm9kZXNbYV0uY2xhc3NOYW1lLmluZGV4T2YoXCJqc3RyZWUtYW5jaG9yXCIpKXtkPXQuY2hpbGROb2Rlc1thXTticmVha31kJiYoZC5jbGFzc05hbWUrPVwiIGpzdHJlZS1zZWFyY2hcIil9cmV0dXJuIHR9fSxmdW5jdGlvbihlKXtlLnZha2F0YS5zZWFyY2g9ZnVuY3Rpb24odCxpLHIpe3I9cnx8e30scj1lLmV4dGVuZCh7fSxlLnZha2F0YS5zZWFyY2guZGVmYXVsdHMsciksci5mdXp6eSE9PSExJiYoci5mdXp6eT0hMCksdD1yLmNhc2VTZW5zaXRpdmU/dDp0LnRvTG93ZXJDYXNlKCk7dmFyIHMsbixhLG8sZD1yLmxvY2F0aW9uLGM9ci5kaXN0YW5jZSxsPXIudGhyZXNob2xkLGg9dC5sZW5ndGg7cmV0dXJuIGg+MzImJihyLmZ1enp5PSExKSxyLmZ1enp5JiYocz0xPDxoLTEsbj1mdW5jdGlvbigpe3ZhciBlPXt9LGk9MDtmb3IoaT0wO2g+aTtpKyspZVt0LmNoYXJBdChpKV09MDtmb3IoaT0wO2g+aTtpKyspZVt0LmNoYXJBdChpKV18PTE8PGgtaS0xO3JldHVybiBlfSgpLGE9ZnVuY3Rpb24oZSx0KXt2YXIgaT1lL2gscj1NYXRoLmFicyhkLXQpO3JldHVybiBjP2krci9jOnI/MTppfSksbz1mdW5jdGlvbihlKXtpZihlPXIuY2FzZVNlbnNpdGl2ZT9lOmUudG9Mb3dlckNhc2UoKSx0PT09ZXx8LTEhPT1lLmluZGV4T2YodCkpcmV0dXJue2lzTWF0Y2g6ITAsc2NvcmU6MH07aWYoIXIuZnV6enkpcmV0dXJue2lzTWF0Y2g6ITEsc2NvcmU6MX07dmFyIGksbyxjLF8sdSxnLGYscCxtLHY9ZS5sZW5ndGgsaj1sLHk9ZS5pbmRleE9mKHQsZCksaz1oK3YseD0xLGI9W107Zm9yKC0xIT09eSYmKGo9TWF0aC5taW4oYSgwLHkpLGopLHk9ZS5sYXN0SW5kZXhPZih0LGQraCksLTEhPT15JiYoaj1NYXRoLm1pbihhKDAseSksaikpKSx5PS0xLGk9MDtoPmk7aSsrKXtmb3IoYz0wLF89aztfPmM7KWEoaSxkK18pPD1qP2M9XzprPV8sXz1NYXRoLmZsb29yKChrLWMpLzIrYyk7Zm9yKGs9XyxnPU1hdGgubWF4KDEsZC1fKzEpLGY9TWF0aC5taW4oZCtfLHYpK2gscD1uZXcgQXJyYXkoZisyKSxwW2YrMV09KDE8PGkpLTEsbz1mO28+PWc7by0tKWlmKG09bltlLmNoYXJBdChvLTEpXSwwPT09aT9wW29dPShwW28rMV08PDF8MSkmbTpwW29dPShwW28rMV08PDF8MSkmbXwoKHVbbysxXXx1W29dKTw8MXwxKXx1W28rMV0scFtvXSZzJiYoeD1hKGksby0xKSxqPj14KSl7aWYoaj14LHk9by0xLGIucHVzaCh5KSwhKHk+ZCkpYnJlYWs7Zz1NYXRoLm1heCgxLDIqZC15KX1pZihhKGkrMSxkKT5qKWJyZWFrO3U9cH1yZXR1cm57aXNNYXRjaDp5Pj0wLHNjb3JlOnh9fSxpPT09ITA/e3NlYXJjaDpvfTpvKGkpfSxlLnZha2F0YS5zZWFyY2guZGVmYXVsdHM9e2xvY2F0aW9uOjAsZGlzdGFuY2U6MTAwLHRocmVzaG9sZDouNixmdXp6eTohMSxjYXNlU2Vuc2l0aXZlOiExfX0oZSksZS5qc3RyZWUuZGVmYXVsdHMuc29ydD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmdldF90ZXh0KGUpPnRoaXMuZ2V0X3RleHQodCk/MTotMX0sZS5qc3RyZWUucGx1Z2lucy5zb3J0PWZ1bmN0aW9uKHQsaSl7dGhpcy5iaW5kPWZ1bmN0aW9uKCl7aS5iaW5kLmNhbGwodGhpcyksdGhpcy5lbGVtZW50Lm9uKFwibW9kZWwuanN0cmVlXCIsZS5wcm94eShmdW5jdGlvbihlLHQpe3RoaXMuc29ydCh0LnBhcmVudCwhMCl9LHRoaXMpKS5vbihcInJlbmFtZV9ub2RlLmpzdHJlZSBjcmVhdGVfbm9kZS5qc3RyZWVcIixlLnByb3h5KGZ1bmN0aW9uKGUsdCl7dGhpcy5zb3J0KHQucGFyZW50fHx0Lm5vZGUucGFyZW50LCExKSx0aGlzLnJlZHJhd19ub2RlKHQucGFyZW50fHx0Lm5vZGUucGFyZW50LCEwKX0sdGhpcykpLm9uKFwibW92ZV9ub2RlLmpzdHJlZSBjb3B5X25vZGUuanN0cmVlXCIsZS5wcm94eShmdW5jdGlvbihlLHQpe3RoaXMuc29ydCh0LnBhcmVudCwhMSksdGhpcy5yZWRyYXdfbm9kZSh0LnBhcmVudCwhMCl9LHRoaXMpKX0sdGhpcy5zb3J0PWZ1bmN0aW9uKHQsaSl7dmFyIHIscztpZih0PXRoaXMuZ2V0X25vZGUodCksdCYmdC5jaGlsZHJlbiYmdC5jaGlsZHJlbi5sZW5ndGgmJih0LmNoaWxkcmVuLnNvcnQoZS5wcm94eSh0aGlzLnNldHRpbmdzLnNvcnQsdGhpcykpLGkpKWZvcihyPTAscz10LmNoaWxkcmVuX2QubGVuZ3RoO3M+cjtyKyspdGhpcy5zb3J0KHQuY2hpbGRyZW5fZFtyXSwhMSl9fTt2YXIgdT0hMTtlLmpzdHJlZS5kZWZhdWx0cy5zdGF0ZT17a2V5OlwianN0cmVlXCIsZXZlbnRzOlwiY2hhbmdlZC5qc3RyZWUgb3Blbl9ub2RlLmpzdHJlZSBjbG9zZV9ub2RlLmpzdHJlZSBjaGVja19ub2RlLmpzdHJlZSB1bmNoZWNrX25vZGUuanN0cmVlXCIsdHRsOiExLGZpbHRlcjohMX0sZS5qc3RyZWUucGx1Z2lucy5zdGF0ZT1mdW5jdGlvbih0LGkpe3RoaXMuYmluZD1mdW5jdGlvbigpe2kuYmluZC5jYWxsKHRoaXMpO3ZhciB0PWUucHJveHkoZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQub24odGhpcy5zZXR0aW5ncy5zdGF0ZS5ldmVudHMsZS5wcm94eShmdW5jdGlvbigpe3UmJmNsZWFyVGltZW91dCh1KSx1PXNldFRpbWVvdXQoZS5wcm94eShmdW5jdGlvbigpe3RoaXMuc2F2ZV9zdGF0ZSgpfSx0aGlzKSwxMDApfSx0aGlzKSksdGhpcy50cmlnZ2VyKFwic3RhdGVfcmVhZHlcIil9LHRoaXMpO3RoaXMuZWxlbWVudC5vbihcInJlYWR5LmpzdHJlZVwiLGUucHJveHkoZnVuY3Rpb24oZSxpKXt0aGlzLmVsZW1lbnQub25lKFwicmVzdG9yZV9zdGF0ZS5qc3RyZWVcIix0KSx0aGlzLnJlc3RvcmVfc3RhdGUoKXx8dCgpfSx0aGlzKSl9LHRoaXMuc2F2ZV9zdGF0ZT1mdW5jdGlvbigpe3ZhciB0PXtzdGF0ZTp0aGlzLmdldF9zdGF0ZSgpLHR0bDp0aGlzLnNldHRpbmdzLnN0YXRlLnR0bCxzZWM6K25ldyBEYXRlfTtlLnZha2F0YS5zdG9yYWdlLnNldCh0aGlzLnNldHRpbmdzLnN0YXRlLmtleSxKU09OLnN0cmluZ2lmeSh0KSl9LHRoaXMucmVzdG9yZV9zdGF0ZT1mdW5jdGlvbigpe3ZhciB0PWUudmFrYXRhLnN0b3JhZ2UuZ2V0KHRoaXMuc2V0dGluZ3Muc3RhdGUua2V5KTtpZih0KXRyeXt0PUpTT04ucGFyc2UodCl9Y2F0Y2goaSl7cmV0dXJuITF9cmV0dXJuIHQmJnQudHRsJiZ0LnNlYyYmK25ldyBEYXRlLXQuc2VjPnQudHRsPyExOih0JiZ0LnN0YXRlJiYodD10LnN0YXRlKSx0JiZlLmlzRnVuY3Rpb24odGhpcy5zZXR0aW5ncy5zdGF0ZS5maWx0ZXIpJiYodD10aGlzLnNldHRpbmdzLnN0YXRlLmZpbHRlci5jYWxsKHRoaXMsdCkpLHQ/KHRoaXMuZWxlbWVudC5vbmUoXCJzZXRfc3RhdGUuanN0cmVlXCIsZnVuY3Rpb24oaSxyKXtyLmluc3RhbmNlLnRyaWdnZXIoXCJyZXN0b3JlX3N0YXRlXCIse3N0YXRlOmUuZXh0ZW5kKCEwLHt9LHQpfSl9KSx0aGlzLnNldF9zdGF0ZSh0KSwhMCk6ITEpfSx0aGlzLmNsZWFyX3N0YXRlPWZ1bmN0aW9uKCl7cmV0dXJuIGUudmFrYXRhLnN0b3JhZ2UuZGVsKHRoaXMuc2V0dGluZ3Muc3RhdGUua2V5KX19LGZ1bmN0aW9uKGUsdCl7ZS52YWthdGEuc3RvcmFnZT17c2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShlLHQpfSxnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShlKX0sZGVsOmZ1bmN0aW9uKGUpe3JldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oZSl9fX0oZSksZS5qc3RyZWUuZGVmYXVsdHMudHlwZXM9e1wiZGVmYXVsdFwiOnt9fSxlLmpzdHJlZS5kZWZhdWx0cy50eXBlc1tlLmpzdHJlZS5yb290XT17fSxlLmpzdHJlZS5wbHVnaW5zLnR5cGVzPWZ1bmN0aW9uKGkscil7dGhpcy5pbml0PWZ1bmN0aW9uKGkscyl7dmFyIG4sYTtpZihzJiZzLnR5cGVzJiZzLnR5cGVzW1wiZGVmYXVsdFwiXSlmb3IobiBpbiBzLnR5cGVzKWlmKFwiZGVmYXVsdFwiIT09biYmbiE9PWUuanN0cmVlLnJvb3QmJnMudHlwZXMuaGFzT3duUHJvcGVydHkobikpZm9yKGEgaW4gcy50eXBlc1tcImRlZmF1bHRcIl0pcy50eXBlc1tcImRlZmF1bHRcIl0uaGFzT3duUHJvcGVydHkoYSkmJnMudHlwZXNbbl1bYV09PT10JiYocy50eXBlc1tuXVthXT1zLnR5cGVzW1wiZGVmYXVsdFwiXVthXSk7ci5pbml0LmNhbGwodGhpcyxpLHMpLHRoaXMuX21vZGVsLmRhdGFbZS5qc3RyZWUucm9vdF0udHlwZT1lLmpzdHJlZS5yb290fSx0aGlzLnJlZnJlc2g9ZnVuY3Rpb24odCxpKXtyLnJlZnJlc2guY2FsbCh0aGlzLHQsaSksdGhpcy5fbW9kZWwuZGF0YVtlLmpzdHJlZS5yb290XS50eXBlPWUuanN0cmVlLnJvb3R9LHRoaXMuYmluZD1mdW5jdGlvbigpe3RoaXMuZWxlbWVudC5vbihcIm1vZGVsLmpzdHJlZVwiLGUucHJveHkoZnVuY3Rpb24oaSxyKXt2YXIgcyxuLGE9dGhpcy5fbW9kZWwuZGF0YSxvPXIubm9kZXMsZD10aGlzLnNldHRpbmdzLnR5cGVzLGM9XCJkZWZhdWx0XCI7Zm9yKHM9MCxuPW8ubGVuZ3RoO24+cztzKyspYz1cImRlZmF1bHRcIixhW29bc11dLm9yaWdpbmFsJiZhW29bc11dLm9yaWdpbmFsLnR5cGUmJmRbYVtvW3NdXS5vcmlnaW5hbC50eXBlXSYmKGM9YVtvW3NdXS5vcmlnaW5hbC50eXBlKSxhW29bc11dLmRhdGEmJmFbb1tzXV0uZGF0YS5qc3RyZWUmJmFbb1tzXV0uZGF0YS5qc3RyZWUudHlwZSYmZFthW29bc11dLmRhdGEuanN0cmVlLnR5cGVdJiYoYz1hW29bc11dLmRhdGEuanN0cmVlLnR5cGUpLGFbb1tzXV0udHlwZT1jLGFbb1tzXV0uaWNvbj09PSEwJiZkW2NdLmljb24hPT10JiYoYVtvW3NdXS5pY29uPWRbY10uaWNvbik7YVtlLmpzdHJlZS5yb290XS50eXBlPWUuanN0cmVlLnJvb3R9LHRoaXMpKSxyLmJpbmQuY2FsbCh0aGlzKX0sdGhpcy5nZXRfanNvbj1mdW5jdGlvbih0LGkscyl7dmFyIG4sYSxvPXRoaXMuX21vZGVsLmRhdGEsZD1pP2UuZXh0ZW5kKCEwLHt9LGkse25vX2lkOiExfSk6e30sYz1yLmdldF9qc29uLmNhbGwodGhpcyx0LGQscyk7aWYoYz09PSExKXJldHVybiExO2lmKGUuaXNBcnJheShjKSlmb3Iobj0wLGE9Yy5sZW5ndGg7YT5uO24rKyljW25dLnR5cGU9Y1tuXS5pZCYmb1tjW25dLmlkXSYmb1tjW25dLmlkXS50eXBlP29bY1tuXS5pZF0udHlwZTpcImRlZmF1bHRcIixpJiZpLm5vX2lkJiYoZGVsZXRlIGNbbl0uaWQsY1tuXS5saV9hdHRyJiZjW25dLmxpX2F0dHIuaWQmJmRlbGV0ZSBjW25dLmxpX2F0dHIuaWQsY1tuXS5hX2F0dHImJmNbbl0uYV9hdHRyLmlkJiZkZWxldGUgY1tuXS5hX2F0dHIuaWQpO2Vsc2UgYy50eXBlPWMuaWQmJm9bYy5pZF0mJm9bYy5pZF0udHlwZT9vW2MuaWRdLnR5cGU6XCJkZWZhdWx0XCIsaSYmaS5ub19pZCYmKGM9dGhpcy5fZGVsZXRlX2lkcyhjKSk7cmV0dXJuIGN9LHRoaXMuX2RlbGV0ZV9pZHM9ZnVuY3Rpb24odCl7aWYoZS5pc0FycmF5KHQpKXtmb3IodmFyIGk9MCxyPXQubGVuZ3RoO3I+aTtpKyspdFtpXT10aGlzLl9kZWxldGVfaWRzKHRbaV0pO3JldHVybiB0fXJldHVybiBkZWxldGUgdC5pZCx0LmxpX2F0dHImJnQubGlfYXR0ci5pZCYmZGVsZXRlIHQubGlfYXR0ci5pZCx0LmFfYXR0ciYmdC5hX2F0dHIuaWQmJmRlbGV0ZSB0LmFfYXR0ci5pZCx0LmNoaWxkcmVuJiZlLmlzQXJyYXkodC5jaGlsZHJlbikmJih0LmNoaWxkcmVuPXRoaXMuX2RlbGV0ZV9pZHModC5jaGlsZHJlbikpLHR9LHRoaXMuY2hlY2s9ZnVuY3Rpb24oaSxzLG4sYSxvKXtpZihyLmNoZWNrLmNhbGwodGhpcyxpLHMsbixhLG8pPT09ITEpcmV0dXJuITE7cz1zJiZzLmlkP3M6dGhpcy5nZXRfbm9kZShzKSxuPW4mJm4uaWQ/bjp0aGlzLmdldF9ub2RlKG4pO3ZhciBkLGMsbCxoLF89cyYmcy5pZD9vJiZvLm9yaWdpbj9vLm9yaWdpbjplLmpzdHJlZS5yZWZlcmVuY2Uocy5pZCk6bnVsbDtzd2l0Y2goXz1fJiZfLl9tb2RlbCYmXy5fbW9kZWwuZGF0YT9fLl9tb2RlbC5kYXRhOm51bGwsaSl7Y2FzZVwiY3JlYXRlX25vZGVcIjpjYXNlXCJtb3ZlX25vZGVcIjpjYXNlXCJjb3B5X25vZGVcIjppZihcIm1vdmVfbm9kZVwiIT09aXx8LTE9PT1lLmluQXJyYXkocy5pZCxuLmNoaWxkcmVuKSl7aWYoZD10aGlzLmdldF9ydWxlcyhuKSxkLm1heF9jaGlsZHJlbiE9PXQmJi0xIT09ZC5tYXhfY2hpbGRyZW4mJmQubWF4X2NoaWxkcmVuPT09bi5jaGlsZHJlbi5sZW5ndGgpcmV0dXJuIHRoaXMuX2RhdGEuY29yZS5sYXN0X2Vycm9yPXtlcnJvcjpcImNoZWNrXCIscGx1Z2luOlwidHlwZXNcIixpZDpcInR5cGVzXzAxXCIscmVhc29uOlwibWF4X2NoaWxkcmVuIHByZXZlbnRzIGZ1bmN0aW9uOiBcIitpLGRhdGE6SlNPTi5zdHJpbmdpZnkoe2NoazppLHBvczphLG9iajpzJiZzLmlkP3MuaWQ6ITEscGFyOm4mJm4uaWQ/bi5pZDohMX0pfSwhMTtpZihkLnZhbGlkX2NoaWxkcmVuIT09dCYmLTEhPT1kLnZhbGlkX2NoaWxkcmVuJiYtMT09PWUuaW5BcnJheShzLnR5cGV8fFwiZGVmYXVsdFwiLGQudmFsaWRfY2hpbGRyZW4pKXJldHVybiB0aGlzLl9kYXRhLmNvcmUubGFzdF9lcnJvcj17ZXJyb3I6XCJjaGVja1wiLHBsdWdpbjpcInR5cGVzXCIsaWQ6XCJ0eXBlc18wMlwiLHJlYXNvbjpcInZhbGlkX2NoaWxkcmVuIHByZXZlbnRzIGZ1bmN0aW9uOiBcIitpLGRhdGE6SlNPTi5zdHJpbmdpZnkoe2NoazppLHBvczphLG9iajpzJiZzLmlkP3MuaWQ6ITEscGFyOm4mJm4uaWQ/bi5pZDohMX0pfSwhMTtpZihfJiZzLmNoaWxkcmVuX2QmJnMucGFyZW50cyl7Zm9yKGM9MCxsPTAsaD1zLmNoaWxkcmVuX2QubGVuZ3RoO2g+bDtsKyspYz1NYXRoLm1heChjLF9bcy5jaGlsZHJlbl9kW2xdXS5wYXJlbnRzLmxlbmd0aCk7Yz1jLXMucGFyZW50cy5sZW5ndGgrMX0oMD49Y3x8Yz09PXQpJiYoYz0xKTtkb3tpZihkLm1heF9kZXB0aCE9PXQmJi0xIT09ZC5tYXhfZGVwdGgmJmQubWF4X2RlcHRoPGMpcmV0dXJuIHRoaXMuX2RhdGEuY29yZS5sYXN0X2Vycm9yPXtlcnJvcjpcImNoZWNrXCIscGx1Z2luOlwidHlwZXNcIixpZDpcInR5cGVzXzAzXCIscmVhc29uOlwibWF4X2RlcHRoIHByZXZlbnRzIGZ1bmN0aW9uOiBcIitpLGRhdGE6SlNPTi5zdHJpbmdpZnkoe2NoazppLHBvczphLG9iajpzJiZzLmlkP3MuaWQ6ITEscGFyOm4mJm4uaWQ/bi5pZDohMX0pfSwhMTtuPXRoaXMuZ2V0X25vZGUobi5wYXJlbnQpLGQ9dGhpcy5nZXRfcnVsZXMobiksYysrfXdoaWxlKG4pfX1yZXR1cm4hMH0sdGhpcy5nZXRfcnVsZXM9ZnVuY3Rpb24oZSl7aWYoZT10aGlzLmdldF9ub2RlKGUpLCFlKXJldHVybiExO3ZhciBpPXRoaXMuZ2V0X3R5cGUoZSwhMCk7cmV0dXJuIGkubWF4X2RlcHRoPT09dCYmKGkubWF4X2RlcHRoPS0xKSxpLm1heF9jaGlsZHJlbj09PXQmJihpLm1heF9jaGlsZHJlbj0tMSksaS52YWxpZF9jaGlsZHJlbj09PXQmJihpLnZhbGlkX2NoaWxkcmVuPS0xKSxpfSx0aGlzLmdldF90eXBlPWZ1bmN0aW9uKHQsaSl7cmV0dXJuIHQ9dGhpcy5nZXRfbm9kZSh0KSx0P2k/ZS5leHRlbmQoe3R5cGU6dC50eXBlfSx0aGlzLnNldHRpbmdzLnR5cGVzW3QudHlwZV0pOnQudHlwZTohMX0sdGhpcy5zZXRfdHlwZT1mdW5jdGlvbihpLHIpe3ZhciBzLG4sYSxvLGQ7aWYoZS5pc0FycmF5KGkpKXtmb3IoaT1pLnNsaWNlKCksbj0wLGE9aS5sZW5ndGg7YT5uO24rKyl0aGlzLnNldF90eXBlKGlbbl0scik7cmV0dXJuITB9cmV0dXJuIHM9dGhpcy5zZXR0aW5ncy50eXBlcyxpPXRoaXMuZ2V0X25vZGUoaSksc1tyXSYmaT8obz1pLnR5cGUsZD10aGlzLmdldF9pY29uKGkpLGkudHlwZT1yLChkPT09ITB8fHNbb10mJnNbb10uaWNvbiE9PXQmJmQ9PT1zW29dLmljb24pJiZ0aGlzLnNldF9pY29uKGksc1tyXS5pY29uIT09dD9zW3JdLmljb246ITApLCEwKTohMX19LGUuanN0cmVlLmRlZmF1bHRzLnVuaXF1ZT17Y2FzZV9zZW5zaXRpdmU6ITEsZHVwbGljYXRlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrXCIgKFwiK3QrXCIpXCJ9fSxlLmpzdHJlZS5wbHVnaW5zLnVuaXF1ZT1mdW5jdGlvbihpLHIpe3RoaXMuY2hlY2s9ZnVuY3Rpb24odCxpLHMsbixhKXtpZihyLmNoZWNrLmNhbGwodGhpcyx0LGkscyxuLGEpPT09ITEpcmV0dXJuITE7aWYoaT1pJiZpLmlkP2k6dGhpcy5nZXRfbm9kZShpKSxzPXMmJnMuaWQ/czp0aGlzLmdldF9ub2RlKHMpLCFzfHwhcy5jaGlsZHJlbilyZXR1cm4hMDt2YXIgbyxkLGM9XCJyZW5hbWVfbm9kZVwiPT09dD9uOmkudGV4dCxsPVtdLGg9dGhpcy5zZXR0aW5ncy51bmlxdWUuY2FzZV9zZW5zaXRpdmUsXz10aGlzLl9tb2RlbC5kYXRhO2ZvcihvPTAsZD1zLmNoaWxkcmVuLmxlbmd0aDtkPm87bysrKWwucHVzaChoP19bcy5jaGlsZHJlbltvXV0udGV4dDpfW3MuY2hpbGRyZW5bb11dLnRleHQudG9Mb3dlckNhc2UoKSk7c3dpdGNoKGh8fChjPWMudG9Mb3dlckNhc2UoKSksdCl7Y2FzZVwiZGVsZXRlX25vZGVcIjpyZXR1cm4hMDtjYXNlXCJyZW5hbWVfbm9kZVwiOnJldHVybiBvPS0xPT09ZS5pbkFycmF5KGMsbCl8fGkudGV4dCYmaS50ZXh0W2g/XCJ0b1N0cmluZ1wiOlwidG9Mb3dlckNhc2VcIl0oKT09PWMsb3x8KHRoaXMuX2RhdGEuY29yZS5sYXN0X2Vycm9yPXtlcnJvcjpcImNoZWNrXCIscGx1Z2luOlwidW5pcXVlXCIsaWQ6XCJ1bmlxdWVfMDFcIixyZWFzb246XCJDaGlsZCB3aXRoIG5hbWUgXCIrYytcIiBhbHJlYWR5IGV4aXN0cy4gUHJldmVudGluZzogXCIrdCxkYXRhOkpTT04uc3RyaW5naWZ5KHtjaGs6dCxwb3M6bixvYmo6aSYmaS5pZD9pLmlkOiExLHBhcjpzJiZzLmlkP3MuaWQ6ITF9KX0pLG87Y2FzZVwiY3JlYXRlX25vZGVcIjpyZXR1cm4gbz0tMT09PWUuaW5BcnJheShjLGwpLG98fCh0aGlzLl9kYXRhLmNvcmUubGFzdF9lcnJvcj17ZXJyb3I6XCJjaGVja1wiLHBsdWdpbjpcInVuaXF1ZVwiLGlkOlwidW5pcXVlXzA0XCIscmVhc29uOlwiQ2hpbGQgd2l0aCBuYW1lIFwiK2MrXCIgYWxyZWFkeSBleGlzdHMuIFByZXZlbnRpbmc6IFwiK3QsZGF0YTpKU09OLnN0cmluZ2lmeSh7Y2hrOnQscG9zOm4sb2JqOmkmJmkuaWQ/aS5pZDohMSxwYXI6cyYmcy5pZD9zLmlkOiExfSl9KSxvO2Nhc2VcImNvcHlfbm9kZVwiOnJldHVybiBvPS0xPT09ZS5pbkFycmF5KGMsbCksb3x8KHRoaXMuX2RhdGEuY29yZS5sYXN0X2Vycm9yPXtlcnJvcjpcImNoZWNrXCIscGx1Z2luOlwidW5pcXVlXCIsaWQ6XCJ1bmlxdWVfMDJcIixyZWFzb246XCJDaGlsZCB3aXRoIG5hbWUgXCIrYytcIiBhbHJlYWR5IGV4aXN0cy4gUHJldmVudGluZzogXCIrdCxkYXRhOkpTT04uc3RyaW5naWZ5KHtjaGs6dCxwb3M6bixvYmo6aSYmaS5pZD9pLmlkOiExLHBhcjpzJiZzLmlkP3MuaWQ6ITF9KX0pLG87Y2FzZVwibW92ZV9ub2RlXCI6cmV0dXJuIG89aS5wYXJlbnQ9PT1zLmlkJiYoIWF8fCFhLmlzX211bHRpKXx8LTE9PT1lLmluQXJyYXkoYyxsKSxvfHwodGhpcy5fZGF0YS5jb3JlLmxhc3RfZXJyb3I9e2Vycm9yOlwiY2hlY2tcIixwbHVnaW46XCJ1bmlxdWVcIixpZDpcInVuaXF1ZV8wM1wiLHJlYXNvbjpcIkNoaWxkIHdpdGggbmFtZSBcIitjK1wiIGFscmVhZHkgZXhpc3RzLiBQcmV2ZW50aW5nOiBcIit0LGRhdGE6SlNPTi5zdHJpbmdpZnkoe2Noazp0LHBvczpuLG9iajppJiZpLmlkP2kuaWQ6ITEscGFyOnMmJnMuaWQ/cy5pZDohMX0pfSksb31yZXR1cm4hMH0sdGhpcy5jcmVhdGVfbm9kZT1mdW5jdGlvbihpLHMsbixhLG8pe2lmKCFzfHxzLnRleHQ9PT10KXtpZihudWxsPT09aSYmKGk9ZS5qc3RyZWUucm9vdCksaT10aGlzLmdldF9ub2RlKGkpLCFpKXJldHVybiByLmNyZWF0ZV9ub2RlLmNhbGwodGhpcyxpLHMsbixhLG8pO2lmKG49bj09PXQ/XCJsYXN0XCI6biwhbi50b1N0cmluZygpLm1hdGNoKC9eKGJlZm9yZXxhZnRlcikkLykmJiFvJiYhdGhpcy5pc19sb2FkZWQoaSkpcmV0dXJuIHIuY3JlYXRlX25vZGUuY2FsbCh0aGlzLGkscyxuLGEsbyk7c3x8KHM9e30pO3ZhciBkLGMsbCxoLF8sdT10aGlzLl9tb2RlbC5kYXRhLGc9dGhpcy5zZXR0aW5ncy51bmlxdWUuY2FzZV9zZW5zaXRpdmUsZj10aGlzLnNldHRpbmdzLnVuaXF1ZS5kdXBsaWNhdGU7Zm9yKGM9ZD10aGlzLmdldF9zdHJpbmcoXCJOZXcgbm9kZVwiKSxsPVtdLGg9MCxfPWkuY2hpbGRyZW4ubGVuZ3RoO18+aDtoKyspbC5wdXNoKGc/dVtpLmNoaWxkcmVuW2hdXS50ZXh0OnVbaS5jaGlsZHJlbltoXV0udGV4dC50b0xvd2VyQ2FzZSgpKTtmb3IoaD0xOy0xIT09ZS5pbkFycmF5KGc/YzpjLnRvTG93ZXJDYXNlKCksbCk7KWM9Zi5jYWxsKHRoaXMsZCwrK2gpLnRvU3RyaW5nKCk7cy50ZXh0PWN9cmV0dXJuIHIuY3JlYXRlX25vZGUuY2FsbCh0aGlzLGkscyxuLGEsbyl9fTt2YXIgZz1sLmNyZWF0ZUVsZW1lbnQoXCJESVZcIik7aWYoZy5zZXRBdHRyaWJ1dGUoXCJ1bnNlbGVjdGFibGVcIixcIm9uXCIpLGcuc2V0QXR0cmlidXRlKFwicm9sZVwiLFwicHJlc2VudGF0aW9uXCIpLGcuY2xhc3NOYW1lPVwianN0cmVlLXdob2xlcm93XCIsZy5pbm5lckhUTUw9XCImIzE2MDtcIixlLmpzdHJlZS5wbHVnaW5zLndob2xlcm93PWZ1bmN0aW9uKHQsaSl7dGhpcy5iaW5kPWZ1bmN0aW9uKCl7aS5iaW5kLmNhbGwodGhpcyksdGhpcy5lbGVtZW50Lm9uKFwicmVhZHkuanN0cmVlIHNldF9zdGF0ZS5qc3RyZWVcIixlLnByb3h5KGZ1bmN0aW9uKCl7dGhpcy5oaWRlX2RvdHMoKX0sdGhpcykpLm9uKFwiaW5pdC5qc3RyZWUgbG9hZGluZy5qc3RyZWUgcmVhZHkuanN0cmVlXCIsZS5wcm94eShmdW5jdGlvbigpe3RoaXMuZ2V0X2NvbnRhaW5lcl91bCgpLmFkZENsYXNzKFwianN0cmVlLXdob2xlcm93LXVsXCIpfSx0aGlzKSkub24oXCJkZXNlbGVjdF9hbGwuanN0cmVlXCIsZS5wcm94eShmdW5jdGlvbihlLHQpe3RoaXMuZWxlbWVudC5maW5kKFwiLmpzdHJlZS13aG9sZXJvdy1jbGlja2VkXCIpLnJlbW92ZUNsYXNzKFwianN0cmVlLXdob2xlcm93LWNsaWNrZWRcIil9LHRoaXMpKS5vbihcImNoYW5nZWQuanN0cmVlXCIsZS5wcm94eShmdW5jdGlvbihlLHQpe3RoaXMuZWxlbWVudC5maW5kKFwiLmpzdHJlZS13aG9sZXJvdy1jbGlja2VkXCIpLnJlbW92ZUNsYXNzKFwianN0cmVlLXdob2xlcm93LWNsaWNrZWRcIik7dmFyIGkscixzPSExO2ZvcihpPTAscj10LnNlbGVjdGVkLmxlbmd0aDtyPmk7aSsrKXM9dGhpcy5nZXRfbm9kZSh0LnNlbGVjdGVkW2ldLCEwKSxzJiZzLmxlbmd0aCYmcy5jaGlsZHJlbihcIi5qc3RyZWUtd2hvbGVyb3dcIikuYWRkQ2xhc3MoXCJqc3RyZWUtd2hvbGVyb3ctY2xpY2tlZFwiKX0sdGhpcykpLm9uKFwib3Blbl9ub2RlLmpzdHJlZVwiLGUucHJveHkoZnVuY3Rpb24oZSx0KXt0aGlzLmdldF9ub2RlKHQubm9kZSwhMCkuZmluZChcIi5qc3RyZWUtY2xpY2tlZFwiKS5wYXJlbnQoKS5jaGlsZHJlbihcIi5qc3RyZWUtd2hvbGVyb3dcIikuYWRkQ2xhc3MoXCJqc3RyZWUtd2hvbGVyb3ctY2xpY2tlZFwiKX0sdGhpcykpLm9uKFwiaG92ZXJfbm9kZS5qc3RyZWUgZGVob3Zlcl9ub2RlLmpzdHJlZVwiLGUucHJveHkoZnVuY3Rpb24oZSx0KXtcImhvdmVyX25vZGVcIj09PWUudHlwZSYmdGhpcy5pc19kaXNhYmxlZCh0Lm5vZGUpfHx0aGlzLmdldF9ub2RlKHQubm9kZSwhMCkuY2hpbGRyZW4oXCIuanN0cmVlLXdob2xlcm93XCIpW1wiaG92ZXJfbm9kZVwiPT09ZS50eXBlP1wiYWRkQ2xhc3NcIjpcInJlbW92ZUNsYXNzXCJdKFwianN0cmVlLXdob2xlcm93LWhvdmVyZWRcIil9LHRoaXMpKS5vbihcImNvbnRleHRtZW51LmpzdHJlZVwiLFwiLmpzdHJlZS13aG9sZXJvd1wiLGUucHJveHkoZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpO3ZhciBpPWUuRXZlbnQoXCJjb250ZXh0bWVudVwiLHttZXRhS2V5OnQubWV0YUtleSxjdHJsS2V5OnQuY3RybEtleSxhbHRLZXk6dC5hbHRLZXksc2hpZnRLZXk6dC5zaGlmdEtleSxwYWdlWDp0LnBhZ2VYLHBhZ2VZOnQucGFnZVl9KTtlKHQuY3VycmVudFRhcmdldCkuY2xvc2VzdChcIi5qc3RyZWUtbm9kZVwiKS5jaGlsZHJlbihcIi5qc3RyZWUtYW5jaG9yXCIpLmZpcnN0KCkudHJpZ2dlcihpKX0sdGhpcykpLm9uKFwiY2xpY2suanN0cmVlXCIsXCIuanN0cmVlLXdob2xlcm93XCIsZnVuY3Rpb24odCl7dC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTt2YXIgaT1lLkV2ZW50KFwiY2xpY2tcIix7bWV0YUtleTp0Lm1ldGFLZXksY3RybEtleTp0LmN0cmxLZXksYWx0S2V5OnQuYWx0S2V5LHNoaWZ0S2V5OnQuc2hpZnRLZXl9KTtlKHQuY3VycmVudFRhcmdldCkuY2xvc2VzdChcIi5qc3RyZWUtbm9kZVwiKS5jaGlsZHJlbihcIi5qc3RyZWUtYW5jaG9yXCIpLmZpcnN0KCkudHJpZ2dlcihpKS5mb2N1cygpfSkub24oXCJjbGljay5qc3RyZWVcIixcIi5qc3RyZWUtbGVhZiA+IC5qc3RyZWUtb2NsXCIsZS5wcm94eShmdW5jdGlvbih0KXt0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO3ZhciBpPWUuRXZlbnQoXCJjbGlja1wiLHttZXRhS2V5OnQubWV0YUtleSxjdHJsS2V5OnQuY3RybEtleSxhbHRLZXk6dC5hbHRLZXksc2hpZnRLZXk6dC5zaGlmdEtleX0pO2UodC5jdXJyZW50VGFyZ2V0KS5jbG9zZXN0KFwiLmpzdHJlZS1ub2RlXCIpLmNoaWxkcmVuKFwiLmpzdHJlZS1hbmNob3JcIikuZmlyc3QoKS50cmlnZ2VyKGkpLmZvY3VzKCl9LHRoaXMpKS5vbihcIm1vdXNlb3Zlci5qc3RyZWVcIixcIi5qc3RyZWUtd2hvbGVyb3csIC5qc3RyZWUtaWNvblwiLGUucHJveHkoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdGhpcy5pc19kaXNhYmxlZChlLmN1cnJlbnRUYXJnZXQpfHx0aGlzLmhvdmVyX25vZGUoZS5jdXJyZW50VGFyZ2V0KSwhMX0sdGhpcykpLm9uKFwibW91c2VsZWF2ZS5qc3RyZWVcIixcIi5qc3RyZWUtbm9kZVwiLGUucHJveHkoZnVuY3Rpb24oZSl7dGhpcy5kZWhvdmVyX25vZGUoZS5jdXJyZW50VGFyZ2V0KX0sdGhpcykpfSx0aGlzLnRlYXJkb3duPWZ1bmN0aW9uKCl7dGhpcy5zZXR0aW5ncy53aG9sZXJvdyYmdGhpcy5lbGVtZW50LmZpbmQoXCIuanN0cmVlLXdob2xlcm93XCIpLnJlbW92ZSgpLGkudGVhcmRvd24uY2FsbCh0aGlzKX0sdGhpcy5yZWRyYXdfbm9kZT1mdW5jdGlvbih0LHIscyxuKXtpZih0PWkucmVkcmF3X25vZGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgYT1nLmNsb25lTm9kZSghMCk7LTEhPT1lLmluQXJyYXkodC5pZCx0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQpJiYoYS5jbGFzc05hbWUrPVwiIGpzdHJlZS13aG9sZXJvdy1jbGlja2VkXCIpLHRoaXMuX2RhdGEuY29yZS5mb2N1c2VkJiZ0aGlzLl9kYXRhLmNvcmUuZm9jdXNlZD09PXQuaWQmJihhLmNsYXNzTmFtZSs9XCIganN0cmVlLXdob2xlcm93LWhvdmVyZWRcIiksdC5pbnNlcnRCZWZvcmUoYSx0LmNoaWxkTm9kZXNbMF0pfXJldHVybiB0fX0sbC5yZWdpc3RlckVsZW1lbnQmJk9iamVjdCYmT2JqZWN0LmNyZWF0ZSl7dmFyIGY9T2JqZWN0LmNyZWF0ZShIVE1MRWxlbWVudC5wcm90b3R5cGUpO2YuY3JlYXRlZENhbGxiYWNrPWZ1bmN0aW9uKCl7dmFyIHQsaT17Y29yZTp7fSxwbHVnaW5zOltdfTtmb3IodCBpbiBlLmpzdHJlZS5wbHVnaW5zKWUuanN0cmVlLnBsdWdpbnMuaGFzT3duUHJvcGVydHkodCkmJnRoaXMuYXR0cmlidXRlc1t0XSYmKGkucGx1Z2lucy5wdXNoKHQpLHRoaXMuZ2V0QXR0cmlidXRlKHQpJiZKU09OLnBhcnNlKHRoaXMuZ2V0QXR0cmlidXRlKHQpKSYmKGlbdF09SlNPTi5wYXJzZSh0aGlzLmdldEF0dHJpYnV0ZSh0KSkpKTtmb3IodCBpbiBlLmpzdHJlZS5kZWZhdWx0cy5jb3JlKWUuanN0cmVlLmRlZmF1bHRzLmNvcmUuaGFzT3duUHJvcGVydHkodCkmJnRoaXMuYXR0cmlidXRlc1t0XSYmKGkuY29yZVt0XT1KU09OLnBhcnNlKHRoaXMuZ2V0QXR0cmlidXRlKHQpKXx8dGhpcy5nZXRBdHRyaWJ1dGUodCkpO2UodGhpcykuanN0cmVlKGkpfTt0cnl7bC5yZWdpc3RlckVsZW1lbnQoXCJ2YWthdGEtanN0cmVlXCIse3Byb3RvdHlwZTpmfSl9Y2F0Y2gocCl7fX19fSk7IiwiLypcbiAqIGh0dHA6Ly9naXRodWIuY29tL2RlaXRjaC9qc3RyZWUtZ3JpZFxuICpcbiAqIFRoaXMgcGx1Z2luIGhhbmRsZXMgYWRkaW5nIGEgZ3JpZCB0byBhIHRyZWUgdG8gZGlzcGxheSBhZGRpdGlvbmFsIGRhdGFcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2U6XG4gKiAgIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG4gKlxuICogV29ya3Mgb25seSB3aXRoIGpzdHJlZSB2ZXJzaW9uID49IDMuMC4wXG4gKlxuICogJERhdGU6IDIwMTUtMTEtMjkgJFxuICogJFJldmlzaW9uOiAgMy40LjIgJFxuICovXG4hZnVuY3Rpb24oZSl7XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCJqcXVlcnlcIixcImpzdHJlZVwiXSxlKTplKGpRdWVyeSl9KGZ1bmN0aW9uKGUpe3ZhciB0LGkscixzLGQsbj0vXlxccyokL2csYT0vW1xcXFw6JiFefCgpXFxbXFxdPD5AKicrfiNcIjssPSBcXC8ke30lXS9nLG89ZnVuY3Rpb24oZSl7cmV0dXJuKGV8fFwiXCIpLnJlcGxhY2UoYSxcIlxcXFwkJlwiKX0sbD1cImRhdGEtanN0cmVlZ3JpZFwiLGg9XCJfREFUQV9cIixjPTI0LHA9ITEsZz1cImpzZ3JpZF9cIix1PVwiX2NvbFwiLGY9MTAsdj1mdW5jdGlvbihlLHQpe3JldHVybiBlLmZpbmQoXCJkaXZbXCIrbCtcIj0nXCIrdCtcIiddXCIpfSxtPSExLGo9bnVsbCxfPTAsdz0wO3M9LzxcXC8/W14+XSs+L2dpLHI9ZnVuY3Rpb24odCxpKXt2YXIgcixzLGQsbjtyZXR1cm4gaS5fZ3JpZFNldHRpbmdzPWkuX2dyaWRTZXR0aW5nc3x8e30saS5fZ3JpZFNldHRpbmdzLmluZGVudD4wP249aS5fZ3JpZFNldHRpbmdzLmluZGVudDoocj1lKFwiPGRpdj48L2Rpdj5cIikscz10LnByZXYoXCJpXCIpLGQ9cy5wYXJlbnQoKSxyLmFkZENsYXNzKGkuZ2V0X25vZGUoXCIjXCIsITApLmF0dHIoXCJjbGFzc1wiKSksZC5hcHBlbmRUbyhyKSxyLmFwcGVuZFRvKGUoXCJib2R5XCIpKSxuPXMud2lkdGgoKXx8YyxkLmRldGFjaCgpLHIucmVtb3ZlKCksaS5fZ3JpZFNldHRpbmdzLmluZGVudD1uKSxufSxkPWZ1bmN0aW9uKGUsdCl7dmFyIGkscj1lLmdldF9ub2RlKHQpLHM9ci5jaGlsZHJlbjtyZXR1cm4gaT0hc3x8cy5sZW5ndGg8PTB8fCFyLnN0YXRlLm9wZW5lZD90OmQoZSxzW3MubGVuZ3RoLTFdKX0sdD1mdW5jdGlvbihlLHQpe3ZhciBpLHMsZD1wYXJzZUludCh0LnNldHRpbmdzLmdyaWQuY29sdW1uc1swXS53aWR0aCwxMCkrcGFyc2VJbnQodC5fZ3JpZFNldHRpbmdzLnRyZWVXaWR0aERpZmYsMTApO3JldHVybiBpPXQuZ2V0X25vZGUoZSkucGFyZW50cy5sZW5ndGgscz1kLWkqcihlLHQpLGR9LGk9ZnVuY3Rpb24oZSx0LGkpe3ZhciByLGQ9XCJhXCI9PT1lLmdldCgwKS50YWdOYW1lLnRvTG93ZXJDYXNlKCk/ZTplLmNoaWxkcmVuKFwiYVwiKSxuPWkuc2V0dGluZ3MuZ3JpZC5jb2x1bW5zWzBdO3I9XCJcIixuLnRpdGxlJiYobi50aXRsZT09PWg/cj1pLmdldF90ZXh0KHQpOnQuYXR0cihuLnRpdGxlKSYmKHI9dC5hdHRyKG4udGl0bGUpKSkscj1yLnJlcGxhY2UocyxcIlwiKSxyJiZkLmF0dHIoXCJ0aXRsZVwiLHIpfSxlLmpzdHJlZS5kZWZhdWx0cy5ncmlkPXt3aWR0aDpcImF1dG9cIn0sZS5qc3RyZWUucGx1Z2lucy5ncmlkPWZ1bmN0aW9uKHQscil7dGhpcy5faW5pdGlhbGl6ZT1mdW5jdGlvbigpe2lmKCF0aGlzLl9pbml0aWFsaXplZCl7dmFyIHQsaSxyPXRoaXMuc2V0dGluZ3MuZ3JpZHx8e30scz10aGlzLmVsZW1lbnQsZD1zLnBhcmVudCgpLG49dGhpcy5fZ3JpZFNldHRpbmdzPXtjb2x1bW5zOnIuY29sdW1uc3x8W10sdHJlZUNsYXNzOlwianN0cmVlLWdyaWQtY29sLTBcIixjb250ZXh0OnIuY29udGV4dG1lbnV8fCExLGNvbHVtbldpZHRoOnIuY29sdW1uV2lkdGgsZGVmYXVsdENvbmY6e1wiKmRpc3BsYXlcIjpcImlubGluZVwiLFwiKitkaXNwbGF5XCI6XCJpbmxpbmVcIn0saXNUaGVtZXJvbGxlcjohIXRoaXMuX2RhdGEudGhlbWVyb2xsZXIsdHJlZVdpZHRoRGlmZjowLHJlc2l6YWJsZTpyLnJlc2l6YWJsZSxzdGF0ZWZ1bDpyLnN0YXRlZnVsLGluZGVudDowfSxhPW4uY29sdW1ucyxvPTA7Zm9yKGk9MDtpPHIuY29sdW1ucy5sZW5ndGg7aSsrKWlmKHIuY29sdW1uc1tpXS50cmVlKXtvPWk7YnJlYWt9dGhpcy51bmlxPU1hdGguY2VpbCgxZTMqTWF0aC5yYW5kb20oKSksdGhpcy50cmVlY29sPW8sdGhpcy5yb290aWQ9cy5hdHRyKFwiaWRcIik7dmFyIGw9L21zaWUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpKTtpZihsKXt2YXIgaD1wYXJzZUZsb2F0KG5hdmlnYXRvci5hcHBWZXJzaW9uLnNwbGl0KFwiTVNJRVwiKVsxXSk7OD5oJiYobi5kZWZhdWx0Q29uZi5kaXNwbGF5PVwiaW5saW5lXCIsbi5kZWZhdWx0Q29uZi56b29tPVwiMVwiKX1mb3IocHx8KHA9ITAsdD1bXCIuanN0cmVlLWdyaWQtY2VsbCB7dmVydGljYWwtYWxpZ246IHRvcDsgb3ZlcmZsb3c6aGlkZGVuO21hcmdpbi1sZWZ0OjA7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6IDEwMCU7cGFkZGluZy1sZWZ0OjdweDt3aGl0ZS1zcGFjZTogbm93cmFwO31cIixcIi5qc3RyZWUtZ3JpZC1jZWxsIHNwYW4ge21hcmdpbi1yaWdodDowcHg7bWFyZ2luLXJpZ2h0OjBweDsqZGlzcGxheTppbmxpbmU7KitkaXNwbGF5OmlubGluZTt3aGl0ZS1zcGFjZTogbm93cmFwO31cIixcIi5qc3RyZWUtZ3JpZC1zZXBhcmF0b3Ige3Bvc2l0aW9uOmFic29sdXRlOyB0b3A6MDsgcmlnaHQ6MDsgaGVpZ2h0OjI0cHg7IG1hcmdpbi1sZWZ0OiAtMnB4OyBib3JkZXItd2lkdGg6IDAgMnB4IDAgMDsgKmRpc3BsYXk6aW5saW5lOyAqK2Rpc3BsYXk6aW5saW5lOyBtYXJnaW4tcmlnaHQ6MHB4O3dpZHRoOjBweDt9XCIsXCIuanN0cmVlLWdyaWQtaGVhZGVyLWNlbGwge292ZXJmbG93OiBoaWRkZW47IHdoaXRlLXNwYWNlOiBub3dyYXA7cGFkZGluZzogMXB4IDNweCAycHggNXB4O31cIixcIi5qc3RyZWUtZ3JpZC1oZWFkZXItdGhlbWVyb2xsZXIge2JvcmRlcjogMDsgcGFkZGluZzogMXB4IDNweDt9XCIsXCIuanN0cmVlLWdyaWQtaGVhZGVyLXJlZ3VsYXIge3Bvc2l0aW9uOnJlbGF0aXZlOyBiYWNrZ3JvdW5kLWNvbG9yOiAjRUJGM0ZEO31cIixcIi5qc3RyZWUtZ3JpZC1yZXNpemFibGUtc2VwYXJhdG9yIHtjdXJzb3I6IGNvbC1yZXNpemU7IHdpZHRoOiAycHg7fVwiLFwiLmpzdHJlZS1ncmlkLXNlcGFyYXRvci1yZWd1bGFyIHtib3JkZXItY29sb3I6ICNkMGQwZDA7IGJvcmRlci1zdHlsZTogc29saWQ7fVwiLFwiLmpzdHJlZS1ncmlkLWNlbGwtdGhlbWVyb2xsZXIge2JvcmRlcjogbm9uZSAhaW1wb3J0YW50OyBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O31cIixcIi5qc3RyZWUtZ3JpZC13cmFwcGVyIHt3aWR0aDogMTAwJTsgb3ZlcmZsb3cteDogYXV0bzt9XCIsXCIuanN0cmVlLWdyaWQtbWlkd3JhcHBlciB7ZGlzcGxheTogdGFibGUtcm93OyBvdmVyZmxvdzogdmlzaWJsZTt9XCIsXCIuanN0cmVlLWdyaWQtd2lkdGgtYXV0byB7d2lkdGg6YXV0bztkaXNwbGF5OmJsb2NrO31cIixcIi5qc3RyZWUtZ3JpZC1jb2x1bW4ge2Rpc3BsYXk6IHRhYmxlLWNlbGw7IG92ZXJmbG93OiBoaWRkZW47fVwiLFwiLmpzdHJlZS1ncmlkLWNvbC0wIHt3aWR0aDogMTAwJTt9XCJdLGUoJzxzdHlsZSB0eXBlPVwidGV4dC9jc3NcIj4nK3Quam9pbihcIlxcblwiKStcIjwvc3R5bGU+XCIpLmFwcGVuZFRvKFwiaGVhZFwiKSksdGhpcy5ncmlkV3JhcHBlcj1lKFwiPGRpdj48L2Rpdj5cIikuYWRkQ2xhc3MoXCJqc3RyZWUtZ3JpZC13cmFwcGVyXCIpLmFwcGVuZFRvKGQpLHRoaXMubWlkV3JhcHBlcj1lKFwiPGRpdj48L2Rpdj5cIikuYWRkQ2xhc3MoXCJqc3RyZWUtZ3JpZC1taWR3cmFwcGVyXCIpLmFwcGVuZFRvKHRoaXMuZ3JpZFdyYXBwZXIpLHIud2lkdGgmJnRoaXMuZ3JpZFdyYXBwZXIud2lkdGgoci53aWR0aCksaT0wO2k8YS5sZW5ndGg7aSsrKWUoXCI8ZGl2PjwvZGl2PlwiKS5hZGRDbGFzcyhcImpzdHJlZS1ncmlkLWNvbHVtbiBqc3RyZWUtZ3JpZC1jb2x1bW4tXCIraStcIiBqc3RyZWUtZ3JpZC1jb2x1bW4tcm9vdC1cIit0aGlzLnJvb3RpZCkuYXBwZW5kVG8odGhpcy5taWRXcmFwcGVyKTt0aGlzLm1pZFdyYXBwZXIuY2hpbGRyZW4oXCJkaXY6ZXEoXCIrbytcIilcIikuYXBwZW5kKHMpLHMuYWRkQ2xhc3MoXCJqc3RyZWUtZ3JpZC1jZWxsXCIpLHRoaXMuX2luaXRpYWxpemVkPSEwfX0sdGhpcy5pbml0PWZ1bmN0aW9uKGUsdCl7ci5pbml0LmNhbGwodGhpcyxlLHQpLHRoaXMuX2luaXRpYWxpemUoKX0sdGhpcy5iaW5kPWZ1bmN0aW9uKCl7ci5iaW5kLmNhbGwodGhpcyksdGhpcy5faW5pdGlhbGl6ZSgpLHRoaXMuZWxlbWVudC5vbihcIm1vdmVfbm9kZS5qc3RyZWUgY3JlYXRlX25vZGUuanN0cmVlIGNsZWFuX25vZGUuanN0cmVlIGNoYW5nZV9ub2RlLmpzdHJlZVwiLGUucHJveHkoZnVuY3Rpb24oZSx0KXt0aGlzLmdldF9ub2RlKHR8fFwiI1wiLCEwKTtyZXR1cm4gJycsITF9LHRoaXMpKS5vbihcImRlbGV0ZV9ub2RlLmpzdHJlZVwiLGUucHJveHkoZnVuY3Rpb24oZSx0KXtpZih2b2lkIDAhPT10Lm5vZGUuaWQpe3ZhciBpLHI9dGhpcy5ncmlkV3JhcHBlcixzPVt0Lm5vZGUuaWRdO2Zvcih0Lm5vZGUmJnQubm9kZS5jaGlsZHJlbl9kJiYocz1zLmNvbmNhdCh0Lm5vZGUuY2hpbGRyZW5fZCkpLGk9MDtpPHMubGVuZ3RoO2krKyl2KHIsc1tpXSkucmVtb3ZlKCl9fSx0aGlzKSkub24oXCJjbG9zZV9ub2RlLmpzdHJlZVwiLGUucHJveHkoZnVuY3Rpb24oZSx0KXt0aGlzLl9oaWRlX2dyaWQodC5ub2RlKX0sdGhpcykpLm9uKFwib3Blbl9ub2RlLmpzdHJlZVwiLGUucHJveHkoZnVuY3Rpb24oZSx0KXt9LHRoaXMpKS5vbihcImxvYWRfbm9kZS5qc3RyZWVcIixlLnByb3h5KGZ1bmN0aW9uKGUsdCl7fSx0aGlzKSkub24oXCJsb2FkZWQuanN0cmVlXCIsZS5wcm94eShmdW5jdGlvbihlKXt0aGlzLl9wcmVwYXJlX2hlYWRlcnMoKSx0aGlzLmVsZW1lbnQudHJpZ2dlcihcImxvYWRlZF9ncmlkLmpzdHJlZVwiKX0sdGhpcykpLm9uKFwicmVhZHkuanN0cmVlXCIsZS5wcm94eShmdW5jdGlvbih0LGkpe3ZhciByPXRoaXMuZWxlbWVudC5maW5kKFwibGkgYTpmaXJzdFwiKS5vdXRlckhlaWdodCgpO2UoJzxzdHlsZSB0eXBlPVwidGV4dC9jc3NcIj5kaXYuanN0cmVlLWdyaWQtY2VsbC1yb290LScrdGhpcy5yb290aWQrXCIge2xpbmUtaGVpZ2h0OiBcIityK1wicHh9PC9zdHlsZT5cIikuYXBwZW5kVG8oXCJoZWFkXCIpLHRoaXMuZ3JpZFdyYXBwZXIuYWRkQ2xhc3ModGhpcy5lbGVtZW50LmF0dHIoXCJjbGFzc1wiKSl9LHRoaXMpKS5vbihcIm1vdmVfbm9kZS5qc3RyZWVcIixlLnByb3h5KGZ1bmN0aW9uKHQsaSl7dmFyIHI9aS5uZXdfaW5zdGFuY2UuZWxlbWVudDtyLmZpbmQoXCJsaSA+IGFcIikuZWFjaChlLnByb3h5KGZ1bmN0aW9uKGUsdCl7fSx0aGlzKSl9LHRoaXMpKS5vbihcImhvdmVyX25vZGUuanN0cmVlXCIsZS5wcm94eShmdW5jdGlvbihlLHQsaSl7dmFyIHI9dC5ub2RlLmlkO251bGwhPT10aGlzLl9ob3Zlcl9ub2RlJiZ2b2lkIDAhPT10aGlzLl9ob3Zlcl9ub2RlJiZ2KHRoaXMuZ3JpZFdyYXBwZXIsdGhpcy5faG92ZXJfbm9kZSkucmVtb3ZlQ2xhc3MoXCJqc3RyZWUtaG92ZXJlZFwiKSx0aGlzLl9ob3Zlcl9ub2RlPXIsdih0aGlzLmdyaWRXcmFwcGVyLHIpLmFkZENsYXNzKFwianN0cmVlLWhvdmVyZWRcIil9LHRoaXMpKS5vbihcImRlaG92ZXJfbm9kZS5qc3RyZWVcIixlLnByb3h5KGZ1bmN0aW9uKGUsdCxpKXt2YXIgcj10Lm5vZGUuaWQ7dGhpcy5faG92ZXJfbm9kZT1udWxsLHYodGhpcy5ncmlkV3JhcHBlcixyKS5yZW1vdmVDbGFzcyhcImpzdHJlZS1ob3ZlcmVkXCIpfSx0aGlzKSkub24oXCJzZWxlY3Rfbm9kZS5qc3RyZWVcIixlLnByb3h5KGZ1bmN0aW9uKGUsdCxpKXt2YXIgcj10Lm5vZGUuaWQ7dih0aGlzLmdyaWRXcmFwcGVyLHIpLmFkZENsYXNzKFwianN0cmVlLWNsaWNrZWRcIiksdGhpcy5nZXRfbm9kZSh0Lm5vZGUuaWQsITApLmNoaWxkcmVuKFwiZGl2LmpzdHJlZS1ncmlkLWNlbGxcIikuYWRkQ2xhc3MoXCJqc3RyZWUtY2xpY2tlZFwiKX0sdGhpcykpLm9uKFwiZGVzZWxlY3Rfbm9kZS5qc3RyZWVcIixlLnByb3h5KGZ1bmN0aW9uKGUsdCxpKXt2YXIgcj10Lm5vZGUuaWQ7dih0aGlzLmdyaWRXcmFwcGVyLHIpLnJlbW92ZUNsYXNzKFwianN0cmVlLWNsaWNrZWRcIil9LHRoaXMpKS5vbihcImRlc2VsZWN0X2FsbC5qc3RyZWVcIixlLnByb3h5KGZ1bmN0aW9uKGUsdCxpKXt2YXIgcixzPXQubm9kZXx8W107Zm9yKHI9MDtyPHMubGVuZ3RoO3IrKyl2KHRoaXMuZ3JpZFdyYXBwZXIsc1tyXSkucmVtb3ZlQ2xhc3MoXCJqc3RyZWUtY2xpY2tlZFwiKX0sdGhpcykpLm9uKFwic2VhcmNoLmpzdHJlZVwiLGUucHJveHkoZnVuY3Rpb24oZSx0KXt2YXIgaT10aGlzLmdyaWRXcmFwcGVyO3JldHVybiB0aGlzLl9kYXRhLnNlYXJjaC5zb20mJnQubm9kZXMubGVuZ3RoJiYoaS5maW5kKFwiZGl2LmpzdHJlZS1ncmlkLWNlbGwtcmVndWxhclwiKS5oaWRlKCksdC5ub2Rlcy5hZGQodC5ub2Rlcy5wYXJlbnRzVW50aWwoXCIuanN0cmVlXCIpKS5maWx0ZXIoXCIuanN0cmVlLW5vZGVcIikuZWFjaChmdW5jdGlvbihlLHQpe3ZhciByPXQuaWQ7ciYmdihpLHIpLnNob3coKX0pKSwhMH0sdGhpcykpLm9uKFwiY2xlYXJfc2VhcmNoLmpzdHJlZVwiLGUucHJveHkoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5ncmlkV3JhcHBlci5maW5kKFwiZGl2LmpzdHJlZS1ncmlkLWNlbGxcIikuc2hvdygpLCEwfSx0aGlzKSksdGhpcy5fZ3JpZFNldHRpbmdzLmlzVGhlbWVyb2xsZXImJnRoaXMuZWxlbWVudC5vbihcInNlbGVjdF9ub2RlLmpzdHJlZVwiLGUucHJveHkoZnVuY3Rpb24oZSx0KXt0LnJzbHQub2JqLmNoaWxkcmVuKFwiYVwiKS5uZXh0QWxsKFwiZGl2XCIpLmFkZENsYXNzKFwidWktc3RhdGUtYWN0aXZlXCIpfSx0aGlzKSkub24oXCJkZXNlbGVjdF9ub2RlLmpzdHJlZSBkZXNlbGVjdF9hbGwuanN0cmVlXCIsZS5wcm94eShmdW5jdGlvbihlLHQpe3QucnNsdC5vYmouY2hpbGRyZW4oXCJhXCIpLm5leHRBbGwoXCJkaXZcIikucmVtb3ZlQ2xhc3MoXCJ1aS1zdGF0ZS1hY3RpdmVcIil9LHRoaXMpKS5vbihcImhvdmVyX25vZGUuanN0cmVlXCIsZS5wcm94eShmdW5jdGlvbihlLHQpe3QucnNsdC5vYmouY2hpbGRyZW4oXCJhXCIpLm5leHRBbGwoXCJkaXZcIikuYWRkQ2xhc3MoXCJ1aS1zdGF0ZS1ob3ZlclwiKX0sdGhpcykpLm9uKFwiZGVob3Zlcl9ub2RlLmpzdHJlZVwiLGUucHJveHkoZnVuY3Rpb24oZSx0KXt0LnJzbHQub2JqLmNoaWxkcmVuKFwiYVwiKS5uZXh0QWxsKFwiZGl2XCIpLnJlbW92ZUNsYXNzKFwidWktc3RhdGUtaG92ZXJcIil9LHRoaXMpKSx0aGlzLl9ncmlkU2V0dGluZ3Muc3RhdGVmdWwmJnRoaXMuZWxlbWVudC5vbihcInJlc2l6ZV9jb2x1bW4uanN0cmVlLWdyaWRcIixlLnByb3h5KGZ1bmN0aW9uKGUsdCxpKXtsb2NhbFN0b3JhZ2VbXCJqc3RyZWUtcm9vdC1cIit0aGlzLnJvb3RpZCtcIi1jb2x1bW4tXCIrdF09aX0sdGhpcykpfSx0aGlzLnRlYXJkb3duPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5ncmlkV3JhcHBlcix0PXRoaXMuZWxlbWVudCxpPWUucGFyZW50KCk7dC5kZXRhY2goKSxlLnJlbW92ZSgpLGkuYXBwZW5kKHQpLHIudGVhcmRvd24uY2FsbCh0aGlzKX0sdGhpcy5fY2xlYW5fZ3JpZD1mdW5jdGlvbihlLHQpe3ZhciBpPXRoaXMuZ3JpZFdyYXBwZXI7ZT92KGksdCkucmVtb3ZlKCk6aS5maW5kKFwiZGl2LmpzdHJlZS1ncmlkLWNlbGwtcmVndWxhclwiKS5yZW1vdmUoKX0sdGhpcy5fcHJlcGFyZV9oZWFkZXJzPWZ1bmN0aW9uKCl7dmFyIHQsaSxyLHMsZCxuLGEsbyxsLGgsYz10aGlzLl9ncmlkU2V0dGluZ3MscD1jLmNvbHVtbnN8fFtdLGc9Yy5jb2x1bW5XaWR0aCx1PWMucmVzaXphYmxlfHwhMSx2PWMuaXNUaGVtZXJvbGxlcix4PXY/XCJ0aGVtZXJvbGxlclwiOlwicmVndWxhclwiLHk9ITEsQz10aGlzLmdyaWRwYXJlbnQsYj10aGlzLnJvb3RpZCxXPWMuZGVmYXVsdENvbmYsUz0wLHo9MDtmb3IodGhpcy5wYXJlbnQ9QyxpPTA7aTxwLmxlbmd0aDtpKyspZD1wW2ldLmhlYWRlckNsYXNzfHxcIlwiLG49cFtpXS5jb2x1bW5DbGFzc3x8XCJcIixhPXBbaV0uaGVhZGVyfHxcIlwiLGEmJih5PSEwKSxzPWMuc3RhdGVmdWwmJmxvY2FsU3RvcmFnZVtcImpzdHJlZS1yb290LVwiK2IrXCItY29sdW1uLVwiK2ldP2xvY2FsU3RvcmFnZVtcImpzdHJlZS1yb290LVwiK2IrXCItY29sdW1uLVwiK2ldOnBbaV0ud2lkdGh8fGcsUz12Pzc6MTAsXCJhdXRvXCIhPT1zJiZcInN0cmluZ1wiIT10eXBlb2YgcyYmKHMtPVMpLG89MD09PWk/MzowLHI9dGhpcy5taWRXcmFwcGVyLmNoaWxkcmVuKFwiZGl2LmpzdHJlZS1ncmlkLWNvbHVtbi1cIitpKSxsPWUoXCI8ZGl2PjwvZGl2PlwiKS5jc3MoVykuY3NzKHtcIm1hcmdpbi1sZWZ0XCI6b30pLmFkZENsYXNzKFwianN0cmVlLWdyaWQtZGl2LVwiK3RoaXMudW5pcStcIi1cIitpK1wiIFwiKyh2P1widWktd2lkZ2V0LWhlYWRlciBcIjpcIlwiKStcIiBqc3RyZWUtZ3JpZC1oZWFkZXIganN0cmVlLWdyaWQtaGVhZGVyLWNlbGwganN0cmVlLWdyaWQtaGVhZGVyLVwiK3grXCIgXCIrZCtcIiBcIituKS5odG1sKGEpLGwuYWRkQ2xhc3MoKHY/XCJ1aS13aWRnZXQtaGVhZGVyIFwiOlwiXCIpK1wianN0cmVlLWdyaWQtaGVhZGVyIGpzdHJlZS1ncmlkLWhlYWRlci1cIit4KSxsLnByZXBlbmRUbyhyKSx6Kz1sLm91dGVyV2lkdGgoKSxoPWUoXCI8ZGl2IGNsYXNzPSdqc3RyZWUtZ3JpZC1zZXBhcmF0b3IganN0cmVlLWdyaWQtc2VwYXJhdG9yLVwiK3grKHY/XCIgdWktd2lkZ2V0LWhlYWRlclwiOlwiXCIpKyh1P1wiIGpzdHJlZS1ncmlkLXJlc2l6YWJsZS1zZXBhcmF0b3JcIjpcIlwiKStcIic+Jm5ic3A7PC9kaXY+XCIpLmFwcGVuZFRvKGwpLHIud2lkdGgocyksci5jc3MoXCJtaW4td2lkdGhcIixzKSxyLmNzcyhcIm1heC13aWR0aFwiLHMpO2wuYWRkQ2xhc3MoKHY/XCJ1aS13aWRnZXQtaGVhZGVyIFwiOlwiXCIpK1wianN0cmVlLWdyaWQtaGVhZGVyIGpzdHJlZS1ncmlkLWhlYWRlci1sYXN0IGpzdHJlZS1ncmlkLWhlYWRlci1cIit4KSx2b2lkIDA9PT1wW3AubGVuZ3RoLTFdLndpZHRoJiYoei09cyxyLmNzcyh7d2lkdGg6XCJhdXRvXCJ9KSxsLmFkZENsYXNzKFwianN0cmVlLWdyaWQtd2lkdGgtYXV0b1wiKS5uZXh0KFwiLmpzdHJlZS1ncmlkLXNlcGFyYXRvclwiKS5yZW1vdmUoKSkseT9jLmhlYWRlcj10OmUoXCJkaXYuanN0cmVlLWdyaWQtaGVhZGVyXCIpLmhpZGUoKSwhdGhpcy5ib3VuZCYmdSYmKHRoaXMuYm91bmQ9ITAsZShkb2N1bWVudCkubW91c2V1cChmdW5jdGlvbigpe3ZhciB0LGkscixzLGQsbjttJiYobj1qLnByZXZBbGwoXCIuanN0cmVlLWdyaWQtY29sdW1uXCIpLmxlbmd0aCxkPWouY2xvc2VzdChcIi5qc3RyZWUtZ3JpZC13cmFwcGVyXCIpLmZpbmQoXCIuanN0cmVlXCIpLHQ9ZS5qc3RyZWUucmVmZXJlbmNlKGQpLGk9dC5zZXR0aW5ncy5ncmlkLmNvbHVtbnMscz1qLnBhcmVudCgpLmNoaWxkcmVuKFwiZGl2LmpzdHJlZS1ncmlkLWNvbHVtblwiKSwoaXNOYU4obil8fDA+bikmJih0Ll9ncmlkU2V0dGluZ3MudHJlZVdpZHRoRGlmZj1kLmZpbmQoXCJpbnM6ZXEoMClcIikud2lkdGgoKStkLmZpbmQoXCJhOmVxKDApXCIpLndpZHRoKCktdC5fZ3JpZFNldHRpbmdzLmNvbHVtbnNbMF0ud2lkdGgpLHI9dC5fZ3JpZFNldHRpbmdzLmNvbHVtbnNbbl0ud2lkdGg9cGFyc2VGbG9hdChqLmNzcyhcIndpZHRoXCIpKSxtPSExLGo9bnVsbCxkLnRyaWdnZXIoXCJyZXNpemVfY29sdW1uLmpzdHJlZS1ncmlkXCIsW24scl0pKX0pLm1vdXNlbW92ZShmdW5jdGlvbihlKXtpZihtKXt3PWUucGFnZVg7dmFyIHQsaSxyLHM9dy1fOzAhPT1zJiYodD1qLndpZHRoKCksaT1wYXJzZUZsb2F0KGouY3NzKFwid2lkdGhcIikpLGl8fChpPWouaW5uZXJXaWR0aCgpKSxzPTA+cz9NYXRoLm1heChzLC10KTpzLHI9aStzLChzPjB8fHQ+MCkmJnI+ZiYmKGoud2lkdGgocitcInB4XCIpLGouY3NzKFwibWluLXdpZHRoXCIscitcInB4XCIpLGouY3NzKFwibWF4LXdpZHRoXCIscitcInB4XCIpLF89dykpfX0pLHRoaXMuZ3JpZFdyYXBwZXIub24oXCJzZWxlY3RzdGFydFwiLFwiLmpzdHJlZS1ncmlkLXJlc2l6YWJsZS1zZXBhcmF0b3JcIixmdW5jdGlvbigpe3JldHVybiExfSkub24oXCJtb3VzZWRvd25cIixcIi5qc3RyZWUtZ3JpZC1yZXNpemFibGUtc2VwYXJhdG9yXCIsZnVuY3Rpb24odCl7cmV0dXJuIG09ITAsXz10LnBhZ2VYLGo9ZSh0aGlzKS5jbG9zZXN0KFwiZGl2LmpzdHJlZS1ncmlkLWNvbHVtblwiKSwhMX0pLm9uKFwiZGJsY2xpY2tcIixcIi5qc3RyZWUtZ3JpZC1yZXNpemFibGUtc2VwYXJhdG9yXCIsZnVuY3Rpb24odCl7dmFyIGkscixzPWUodGhpcyksZD1zLmNsb3Nlc3QoXCJkaXYuanN0cmVlLWdyaWQtY29sdW1uXCIpLG49cGFyc2VGbG9hdChkLmNzcyhcIndpZHRoXCIpKSxhPTAsbz1kLnByZXZBbGwoXCIuanN0cmVlLWdyaWQtY29sdW1uXCIpLmxlbmd0aCxsPWQud2lkdGgoKTtkLmZpbmQoXCIuanN0cmVlLWdyaWQtY2VsbFwiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQsaT1lKHRoaXMpO2kuY3NzKFwicG9zaXRpb25cIixcImFic29sdXRlXCIpLGkuY3NzKFwid2lkdGhcIixcImF1dG9cIiksdD1pLm91dGVyV2lkdGgoKSxpLmNzcyhcInBvc2l0aW9uXCIsXCJyZWxhdGl2ZVwiKSx0PmEmJihhPXQpfSksaT1hLW4saT0wPmk/TWF0aC5tYXgoaSwtbCk6aSxyPW4raStcInB4XCIsZC53aWR0aChyKSxkLmNzcyhcIm1pbi13aWR0aFwiLHIpLGQuY3NzKFwibWF4LXdpZHRoXCIsciksZSh0aGlzKS5jbG9zZXN0KFwiLmpzdHJlZS1ncmlkLXdyYXBwZXJcIikuZmluZChcIi5qc3RyZWVcIikudHJpZ2dlcihcInJlc2l6ZV9jb2x1bW4uanN0cmVlLWdyaWRcIixbbyxyXSl9KSl9LHRoaXMucmVkcmF3X25vZGU9ZnVuY3Rpb24oZSx0LGkscyl7cmV0dXJuIGU9ci5yZWRyYXdfbm9kZS5jYWxsKHRoaXMsZSx0LGkscyksZSYmdGhpcy5fcHJlcGFyZV9ncmlkKGUpLGV9LHRoaXMucmVmcmVzaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jbGVhbl9ncmlkKCksci5yZWZyZXNoLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdGhpcy5zZXRfaWQ9ZnVuY3Rpb24oZSx0KXt2YXIgaTtlJiYoaT1lLmlkKTt2YXIgcz1yLnNldF9pZC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYocyYmdm9pZCAwIT09aSl7dmFyIGQsbj10aGlzLmdyaWRXcmFwcGVyLGE9W2ldO2ZvcihlJiZlLmNoaWxkcmVuX2QmJihhPWEuY29uY2F0KGUuY2hpbGRyZW5fZCkpLGQ9MDtkPGEubGVuZ3RoO2QrKyl2KG4sYVtkXSkuYXR0cihsLGUuaWQpLmF0dHIoXCJpZFwiLGcrZS5pZCt1KyhkKzEpKS5yZW1vdmVDbGFzcyhnK2krdSkuYWRkQ2xhc3MoZytlLmlkK3UpfXJldHVybiBzfSx0aGlzLl9oaWRlX2dyaWQ9ZnVuY3Rpb24oZSl7dmFyIHQsaT1lJiZlLmNoaWxkcmVuX2Q/ZS5jaGlsZHJlbl9kOltdO2Zvcih0PTA7dDxpLmxlbmd0aDt0Kyspdih0aGlzLmdyaWRXcmFwcGVyLGlbdF0pLnJlbW92ZSgpfSx0aGlzLmhvbGRpbmdDZWxscz17fSx0aGlzLmdldEhvbGRpbmdDZWxscz1mdW5jdGlvbih0LGkscil7dmFyIHMsZCxuPWUoKSxhPXQuY2hpbGRyZW58fFtdO2ZvcihkPTA7ZDxhLmxlbmd0aDtkKyspcz1nK28oYVtkXSkrdStpLHJbc10mJnQuc3RhdGUub3BlbmVkJiYobj1uLmFkZChyW3NdKS5hZGQodGhpcy5nZXRIb2xkaW5nQ2VsbHModGhpcy5nZXRfbm9kZShhW2RdKSxpLHIpKSk7cmV0dXJuIG59LHRoaXMuX2VkaXQ9ZnVuY3Rpb24odCxpLHIpe2lmKCF0KXJldHVybiExO2lmKCFyKXJldHVybiExO3I9ZShyKSxcImRpdlwiPT09ci5wcm9wKFwidGFnTmFtZVwiKS50b0xvd2VyQ2FzZSgpJiYocj1yLmNoaWxkcmVuKFwic3BhbjpmaXJzdFwiKSk7dmFyIHM9dGhpcy5fZGF0YS5jb3JlLnJ0bCxkPXRoaXMuZWxlbWVudC53aWR0aCgpLG49dC5kYXRhW2kudmFsdWVdLGE9ZShcIjxkaXYgLz5cIix7Y3NzOntwb3NpdGlvbjpcImFic29sdXRlXCIsdG9wOlwiLTIwMHB4XCIsbGVmdDpzP1wiMHB4XCI6XCItMTAwMHB4XCIsdmlzaWJpbGl0eTpcImhpZGRlblwifX0pLmFwcGVuZFRvKFwiYm9keVwiKSxvPWUoXCI8aW5wdXQgLz5cIix7dmFsdWU6bixcImNsYXNzXCI6XCJqc3RyZWUtcmVuYW1lLWlucHV0XCIsY3NzOntwYWRkaW5nOlwiMFwiLGJvcmRlcjpcIjFweCBzb2xpZCBzaWx2ZXJcIixcImJveC1zaXppbmdcIjpcImJvcmRlci1ib3hcIixkaXNwbGF5OlwiaW5saW5lLWJsb2NrXCIsaGVpZ2h0OnRoaXMuX2RhdGEuY29yZS5saV9oZWlnaHQrXCJweFwiLGxpbmVIZWlnaHQ6dGhpcy5fZGF0YS5jb3JlLmxpX2hlaWdodCtcInB4XCIsd2lkdGg6XCIxNTBweFwifSxibHVyOmUucHJveHkoZnVuY3Rpb24oKXt2YXIgZT1vLnZhbCgpO1wiXCI9PT1lfHxlPT09bj9lPW46KHQuZGF0YVtpLnZhbHVlXT1lLHRoaXMuZWxlbWVudC50cmlnZ2VyKFwidXBkYXRlX2NlbGwuanN0cmVlLWdyaWRcIix7bm9kZTp0LGNvbDppLnZhbHVlLHZhbHVlOmUsb2xkOm59KSx0aGlzLl9wcmVwYXJlX2dyaWQodGhpcy5nZXRfbm9kZSh0LCEwKSkpLG8ucmVtb3ZlKCksci5zaG93KCl9LHRoaXMpLGtleWRvd246ZnVuY3Rpb24oZSl7dmFyIHQ9ZS53aGljaDsyNz09PXQmJih0aGlzLnZhbHVlPW4pLCgyNz09PXR8fDEzPT09dHx8Mzc9PT10fHwzOD09PXR8fDM5PT09dHx8NDA9PT10fHwzMj09PXQpJiZlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLCgyNz09PXR8fDEzPT09dCkmJihlLnByZXZlbnREZWZhdWx0KCksdGhpcy5ibHVyKCkpfSxjbGljazpmdW5jdGlvbihlKXtlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfSxtb3VzZWRvd246ZnVuY3Rpb24oZSl7ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX0sa2V5dXA6ZnVuY3Rpb24oZSl7by53aWR0aChNYXRoLm1pbihhLnRleHQoXCJwV1wiK3RoaXMudmFsdWUpLndpZHRoKCksZCkpfSxrZXlwcmVzczpmdW5jdGlvbihlKXtyZXR1cm4gMTM9PT1lLndoaWNoPyExOnZvaWQgMH19KSxsPXtmb250RmFtaWx5OnIuY3NzKFwiZm9udEZhbWlseVwiKXx8XCJcIixmb250U2l6ZTpyLmNzcyhcImZvbnRTaXplXCIpfHxcIlwiLGZvbnRXZWlnaHQ6ci5jc3MoXCJmb250V2VpZ2h0XCIpfHxcIlwiLGZvbnRTdHlsZTpyLmNzcyhcImZvbnRTdHlsZVwiKXx8XCJcIixmb250U3RyZXRjaDpyLmNzcyhcImZvbnRTdHJldGNoXCIpfHxcIlwiLGZvbnRWYXJpYW50OnIuY3NzKFwiZm9udFZhcmlhbnRcIil8fFwiXCIsbGV0dGVyU3BhY2luZzpyLmNzcyhcImxldHRlclNwYWNpbmdcIil8fFwiXCIsd29yZFNwYWNpbmc6ci5jc3MoXCJ3b3JkU3BhY2luZ1wiKXx8XCJcIn07ci5oaWRlKCksci5wYXJlbnQoKS5hcHBlbmQobyksby5jc3MobCkud2lkdGgoTWF0aC5taW4oYS50ZXh0KFwicFdcIitvWzBdLnZhbHVlKS53aWR0aCgpLGQpKVswXS5zZWxlY3QoKX0sdGhpcy5fcHJlcGFyZV9ncmlkPWZ1bmN0aW9uKHQpe3ZhciByLGEsaCxjLHAsZixtLGosXyx3LHgseSxDLGIsVyxTLHosayxULEEsUCxGLFYscSxELEwsTSxOLEksQj10aGlzLl9ncmlkU2V0dGluZ3MsSD1CLnRyZWVDbGFzcyxFPXRoaXMsVT1CLmNvbHVtbnN8fFtdLFg9Qi5pc1RoZW1lcm9sbGVyLCQ9dGhpcy5lbGVtZW50LFE9dGhpcy5yb290aWQsWT1YP1widGhlbWVyb2xsZXJcIjpcInJlZ3VsYXJcIixHPXRoaXMuZ2V0X25vZGUodCksSj1CLmNvbHVtbldpZHRoLEs9Qi5kZWZhdWx0Q29uZixPPWZ1bmN0aW9uKHQsaSxyLHMsZCl7cmV0dXJuIGZ1bmN0aW9uKGQpe2kuY2hpbGRyZW4oXCIuanN0cmVlLWFuY2hvclwiKS50cmlnZ2VyKFwiY2xpY2suanN0cmVlXCIsZCksdC50cmlnZ2VyKFwic2VsZWN0X2NlbGwuanN0cmVlLWdyaWRcIixbe3ZhbHVlOnIsY29sdW1uOnMuaGVhZGVyLG5vZGU6aSxncmlkOmUodGhpcyksc291cmNlTmFtZTpzLnZhbHVlfV0pfX0sUj1mdW5jdGlvbih0LGkscixzLGQpe3JldHVybiBmdW5jdGlvbih0KXtCLmNvbnRleHQmJih0LnByZXZlbnREZWZhdWx0KCksZS52YWthdGEuY29udGV4dC5zaG93KHRoaXMse3g6dC5wYWdlWCx5OnQucGFnZVl9LHtlZGl0OntsYWJlbDpcIkVkaXRcIixhY3Rpb246ZnVuY3Rpb24oZSl7dmFyIHI9ZC5nZXRfbm9kZShpKTtFLl9lZGl0KHIscyx0LnRhcmdldCl9fX0pKX19LFo9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0LmhvdmVyX25vZGUoZSl9fSxlZT1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbigpe3QuZGVob3Zlcl9ub2RlKGUpfX0sdGU9dGhpcy5taWRXcmFwcGVyLGllPUcuaWQscmU9dGhpcy5nZXRfbm9kZShHLnBhcmVudCkuY2hpbGRyZW4sc2U9alF1ZXJ5LmluQXJyYXkoaWUscmUpLGRlPXRoaXMuaG9sZGluZ0NlbGxzLG5lPSExO2lmKHI9ZSh0KSxfPXIuY2hpbGRyZW4oXCJhXCIpLDE9PT1fLmxlbmd0aCl7Zm9yKEk9IUcuc3RhdGUub3BlbmVkLFM9ZytvKGllKSt1LHo9XCIjXCI9PT1HLnBhcmVudD9udWxsOkcucGFyZW50LF8uYWRkQ2xhc3MoSCksaShfLHIsRSksdz1fLGM9MDtjPFUubGVuZ3RoO2MrKyl0aGlzLnRyZWVjb2whPT1jJiYoRD1VW2NdLE49dGUuY2hpbGRyZW4oXCJkaXY6ZXEoXCIrYytcIilcIiksZj1ELmNlbGxDbGFzc3x8XCJcIixtPUQud2lkZUNlbGxDbGFzc3x8XCJcIixqPUQuY29sdW1uQ2xhc3N8fFwiXCIsTi5hZGRDbGFzcyhqKSxwPXZvaWQgMCE9PUQudmFsdWUmJm51bGwhPT1ELnZhbHVlP1wiZnVuY3Rpb25cIj09dHlwZW9mIEQudmFsdWU/RC52YWx1ZShHKTpudWxsIT09Ry5kYXRhJiZ2b2lkIDAhPT1HLmRhdGEmJnZvaWQgMCE9PUcuZGF0YVtELnZhbHVlXT9HLmRhdGFbRC52YWx1ZV06XCJcIjpcIlwiLFwiZnVuY3Rpb25cIj09dHlwZW9mIEQuZm9ybWF0JiYocD1ELmZvcm1hdChwKSksRC5pbWFnZXM/KGg9RC5pbWFnZXNbcF18fEQuaW1hZ2VzW1wiZGVmYXVsdFwiXSxoJiYoTD1cIipcIj09PWhbMF0/JzxzcGFuIGNsYXNzPVwiJytoLnN1YnN0cigxKSsnXCI+PC9zcGFuPic6JzxpbWcgc3JjPVwiJytoKydcIj4nKSk6TD1wLCh2b2lkIDA9PT1MfHxudWxsPT09THx8bi50ZXN0KEwpKSYmKEw9XCImbmJzcDtcIikseD1ELnZhbHVlQ2xhc3MmJm51bGwhPT1HLmRhdGEmJnZvaWQgMCE9PUcuZGF0YT9HLmRhdGFbRC52YWx1ZUNsYXNzXXx8XCJcIjpcIlwiLHgmJkQudmFsdWVDbGFzc1ByZWZpeCYmXCJcIiE9PUQudmFsdWVDbGFzc1ByZWZpeCYmKHg9RC52YWx1ZUNsYXNzUHJlZml4K3gpLHk9RC53aWRlVmFsdWVDbGFzcyYmbnVsbCE9PUcuZGF0YSYmdm9pZCAwIT09Ry5kYXRhP0cuZGF0YVtELndpZGVWYWx1ZUNsYXNzXXx8XCJcIjpcIlwiLHkmJkQud2lkZVZhbHVlQ2xhc3NQcmVmaXgmJlwiXCIhPT1ELndpZGVWYWx1ZUNsYXNzUHJlZml4JiYoeT1ELndpZGVWYWx1ZUNsYXNzUHJlZml4K3kpLFc9RC50aXRsZSYmbnVsbCE9PUcuZGF0YSYmdm9pZCAwIT09Ry5kYXRhP0cuZGF0YVtELnRpdGxlXXx8XCJcIjpcIlwiLFc9Vy5yZXBsYWNlKHMsXCJcIiksYj03LGE9RC53aWR0aHx8SixcImF1dG9cIiE9PWEmJihhPU18fGEtYiksdz12KE4saWUpLCghd3x8dy5sZW5ndGg8MSkmJih3PWUoXCI8ZGl2PjwvZGl2PlwiKSxlKFwiPHNwYW4+PC9zcGFuPlwiKS5hcHBlbmRUbyh3KSx3LmF0dHIoXCJpZFwiLFMrYyksdy5hZGRDbGFzcyhTKSx3LmF0dHIobCxpZSkpLEE9MD49c2U/Ry5wYXJlbnQ6ZCh0aGlzLHJlW3NlLTFdKSxUPXYoTixBKSxGPXNlPj1yZS5sZW5ndGgtMT9cIk5VTExcIjpyZVtzZSsxXSxQPXYoTixGKSxxPUcuY2hpbGRyZW4mJkcuY2hpbGRyZW4ubGVuZ3RoPjA/Ry5jaGlsZHJlblswXTpcIk5VTExcIixWPXYoTixxKSxrPXYoTix6KSx6PyhrJiZrLmxlbmd0aD4wPyhUJiZULmxlbmd0aD4wP3cuaW5zZXJ0QWZ0ZXIoVCk6ViYmVi5sZW5ndGg+MD93Lmluc2VydEJlZm9yZShWKTpQJiZQLmxlbmd0aD4wP3cuaW5zZXJ0QmVmb3JlKFApOncuaW5zZXJ0QWZ0ZXIoayksbmU9ITApOm5lPSExLGRlW1MrY109dyk6KFQmJlQubGVuZ3RoPjA/dy5pbnNlcnRBZnRlcihUKTpWJiZWLmxlbmd0aD4wP3cuaW5zZXJ0QmVmb3JlKFYpOlAmJlAubGVuZ3RoPjA/dy5pbnNlcnRCZWZvcmUoUCk6dy5hcHBlbmRUbyhOKSxuZT0hMCksbmUmJncuYWZ0ZXIodGhpcy5nZXRIb2xkaW5nQ2VsbHMoRyxjLGRlKSksQz13LmNoaWxkcmVuKFwic3BhblwiKSxDLmFkZENsYXNzKGYrXCIgXCIreCkuaHRtbChMKSx3PXcuY3NzKEspLmFkZENsYXNzKFwianN0cmVlLWdyaWQtY2VsbCBqc3RyZWUtZ3JpZC1jZWxsLXJlZ3VsYXIganN0cmVlLWdyaWQtY2VsbC1yb290LVwiK1ErXCIganN0cmVlLWdyaWQtY2VsbC1cIitZK1wiIFwiK20rXCIgXCIreSsoWD9cIiB1aS1zdGF0ZS1kZWZhdWx0XCI6XCJcIikpLmFkZENsYXNzKFwianN0cmVlLWdyaWQtY29sLVwiK2MpLHcuY2xpY2soTygkLHIscCxELHRoaXMpKSx3Lm9uKFwiY29udGV4dG1lbnVcIixSKCQscixwLEQsdGhpcykpLHcuaG92ZXIoWihyLHRoaXMpLGVlKHIsdGhpcykpLFcmJkMuYXR0cihcInRpdGxlXCIsVykpO3cuYWRkQ2xhc3MoXCJqc3RyZWUtZ3JpZC1jZWxsLWxhc3RcIisoWD9cIiB1aS1zdGF0ZS1kZWZhdWx0XCI6XCJcIikpLHZvaWQgMD09PVVbVS5sZW5ndGgtMV0ud2lkdGgmJncuYWRkQ2xhc3MoXCJqc3RyZWUtZ3JpZC13aWR0aC1hdXRvXCIpLm5leHQoXCIuanN0cmVlLWdyaWQtc2VwYXJhdG9yXCIpLnJlbW92ZSgpfXRoaXMuZWxlbWVudC5jc3Moe1wib3ZlcmZsb3cteVwiOlwiYXV0byAhaW1wb3J0YW50XCJ9KX0sdGhpcy5ob2xkaW5nQ2VsbHM9e319fSk7IiwiLypcbiAqIENvcHlyaWdodCBodHRwczovL2dpdGh1Yi5jb20vZGl2aW8vZGphbmdvLWNtc1xuICovXG5cbi8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4vLyBOQU1FU1BBQ0VTXG4vKipcbiAqIEBtb2R1bGUgQ01TXG4gKi9cbnZhciBDTVMgPSB3aW5kb3cuQ01TIHx8IHt9O1xuXG4vLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuLy8gTU9EQUxcbihmdW5jdGlvbiAoJCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIC8qKlxuICAgICAqIFRoZSBwYWdldHJlZSBpcyBsb2FkZWQgdmlhIGAvYWRtaW4vY21zL3BhZ2VgIGFuZCBoYXMgYSBjdXN0b20gYWRtaW5cbiAgICAgKiB0ZW1wbGF0ZXMgc3RvcmVkIHdpdGhpbiBgdGVtcGxhdGVzL2FkbWluL2Ntcy9wYWdlL3RyZWVgLlxuICAgICAqXG4gICAgICogQGNsYXNzIFBhZ2VUcmVlXG4gICAgICogQG5hbWVzcGFjZSBDTVNcbiAgICAgKiBAdXNlcyBDTVMuQVBJLkhlbHBlcnNcbiAgICAgKi9cbiAgICBDTVMuUGFnZVRyZWUgPSBuZXcgQ01TLkNsYXNzKHtcbiAgICAgICAgLy8gVE9ETyBhZGQgbWVjaGFuaWNzIHRvIHNldCB0aGUgaG9tZSBwYWdlXG4gICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uIGluaXRpYWxpemUob3B0aW9ucykge1xuICAgICAgICAgICAgLy8gb3B0aW9ucyBhcmUgbG9hZGVkIGZyb20gdGhlIHBhZ2V0cmVlIGh0bWwgbm9kZVxuICAgICAgICAgICAgdGhpcy5vcHRpb25zID0gJCgnLmpzLWNtcy1wYWdldHJlZScpLmRhdGEoJ2pzb24nKTtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9ICQuZXh0ZW5kKHRydWUsIHt9LCB0aGlzLm9wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgICAgICAgICAvLyBzdGF0ZXMgYW5kIGV2ZW50c1xuICAgICAgICAgICAgdGhpcy5jbGljayA9ICdjbGljay5jbXMucGFnZXRyZWUnO1xuICAgICAgICAgICAgdGhpcy5jYWNoZSA9IHtcbiAgICAgICAgICAgICAgICBpZDogbnVsbCxcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IG51bGwsXG4gICAgICAgICAgICAgICAgdHlwZTogJydcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3NUaW1lciA9IDEwMDA7XG5cbiAgICAgICAgICAgIC8vIGVsZW1lbnRzXG4gICAgICAgICAgICB0aGlzLl9zZXR1cFVJKCk7XG4gICAgICAgICAgICB0aGlzLl9ldmVudHMoKTtcblxuICAgICAgICAgICAgLy8gY2FuY2VsIGlmIHBhZ3RyZWUgaXMgbm90IGF2YWlsYWJsZVxuICAgICAgICAgICAgaWYgKCEkLmlzRW1wdHlPYmplY3QodGhpcy5vcHRpb25zKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldHVwKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFN0b3JlcyBhbGwgalF1ZXJ5IHJlZmVyZW5jZXMgd2l0aGluIGB0aGlzLnVpYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBfc2V0dXBVSVxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgX3NldHVwVUk6IGZ1bmN0aW9uIF9zZXR1cFVJKCkge1xuICAgICAgICAgICAgdmFyIHBhZ2V0cmVlID0gJCgnLmNtcy1wYWdldHJlZScpO1xuICAgICAgICAgICAgdGhpcy51aSA9IHtcbiAgICAgICAgICAgICAgICBjb250YWluZXI6IHBhZ2V0cmVlLFxuICAgICAgICAgICAgICAgIGRvY3VtZW50OiAkKGRvY3VtZW50KSxcbiAgICAgICAgICAgICAgICB0cmVlOiBwYWdldHJlZS5maW5kKCcuanMtY21zLXBhZ2V0cmVlJyksXG4gICAgICAgICAgICAgICAgZGlhbG9nOiAkKCcuanMtY21zLXRyZWUtZGlhbG9nJyksXG4gICAgICAgICAgICAgICAgc2l0ZUZvcm06ICQoJy5qcy1jbXMtcGFnZXRyZWUtc2l0ZS1mb3JtJylcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldHRpbmcgdXAgdGhlIGpzdHJlZSBhbmQgdGhlIHJlbGF0ZWQgY29sdW1ucy5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBfc2V0dXBcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICovXG4gICAgICAgIF9zZXR1cDogZnVuY3Rpb24gX3NldHVwKCkge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIGNvbHVtbnMgPSBbXTtcbiAgICAgICAgICAgIHZhciBvYmogPSB7XG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2U6IHRoaXMub3B0aW9ucy5sYW5nLmNvZGUsXG4gICAgICAgICAgICAgICAgb3Blbk5vZGVzOiBbXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHZhciBkYXRhID0gZmFsc2U7XG5cbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IGFqYXggcmVxdWVzdCBzZW5kIHRoZSBjc3JmIHRva2VuXG4gICAgICAgICAgICBDTVMuQVBJLkhlbHBlcnMuY3NyZih0aGlzLm9wdGlvbnMuY3NyZik7XG5cbiAgICAgICAgICAgIC8vIHNldHVwIGNvbHVtbiBoZWFkaW5nc1xuICAgICAgICAgICAgJC5lYWNoKHRoaXMub3B0aW9ucy5jb2x1bW5zLCBmdW5jdGlvbiAoaW5kZXgsIG9iaikge1xuICAgICAgICAgICAgICAgIGlmIChvYmoua2V5ID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgZmlyc3Qgcm93IGlzIGFscmVhZHkgcG9wdWxhdGVkLCB0byBhdm9pZCBvdmVyd3JpdGVzXG4gICAgICAgICAgICAgICAgICAgIC8vIGp1c3QgbGVhdmUgdGhlIFwia2V5XCIgcGFyYW0gZW1wdHlcbiAgICAgICAgICAgICAgICAgICAgY29sdW1ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcjogb2JqLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IG9iai53aWR0aCB8fCAnMSUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkZUNlbGxDbGFzczogb2JqLmNsc1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyOiBvYmoudGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCBuZWVkcyB0byBoYXZlIHRoZSBcImNvbGRlXCIgZm9ybWF0IGFuZCBub3QgXCJjb2wtZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzIGpzdHJlZSB3aWxsIGNvbnZlcnQgXCJjb2wtZGVcIiB0byBcImNvbGRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbHNvIHdlIHN0cmlwIGRhc2hlcywgaW4gY2FzZSBsYW5ndWFnZSBjb2RlIGNvbnRhaW5zIGl0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZS5nLiB6aC1oYW5zLCB6aC1jbiBldGNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5kYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmRhdGFbJ2NvbCcgKyBvYmoua2V5LnJlcGxhY2UoJy0nLCAnJyldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IG9iai53aWR0aCB8fCAnMSUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkZUNlbGxDbGFzczogb2JqLmNsc1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gcHJlcGFyZSBkYXRhXG4gICAgICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5maWx0ZXJlZCkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSB7XG4gICAgICAgICAgICAgICAgICAgIHVybDogdGhpcy5vcHRpb25zLnVybHMudHJlZSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcjJyBpcyByZW5kZXJlZCBpZiBpdHMgdGhlIHJvb3Qgbm9kZSwgdGhlcmUgd2Ugb25seVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FyZSBhYm91dCBgb2JqLm9wZW5Ob2Rlc2AsIGluIHRoZSBmb2xsb3dpbmcgY2FzZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgYXJlIHJlcXVlc3RpbmcgYSBzcGVjaWZpYyBub2RlXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5pZCAhPT0gJyMnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLnBhZ2VJZCA9IHRoYXQuX3N0b3JlTm9kZUlkKG5vZGUuZGF0YS5pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iai5wYWdlSWQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIHN0b3JlIHRoZSBvcGVuZWQgaXRlbXMgaW5zaWRlIHRoZSBsb2NhbHN0b3JhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzIHdlIGhhdmUgdG8gbG9hZCB0aGUgcGFnZXRyZWUgd2l0aCB0aGUgcHJldmlvdXMgb3BlbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzdGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqLm9wZW5Ob2RlcyA9IHRoYXQuX2dldFN0b3JlZE5vZGVJZHMoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBzZXQgdGhlIHNpdGUgaWQgdG8gZ2V0IHRoZSBjb3JyZWN0IHRyZWVcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iai5zaXRlID0gdGhhdC5vcHRpb25zLnNpdGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiaW5kIG9wdGlvbnMgdG8gdGhlIGpzdHJlZSBpbnN0YW5jZVxuICAgICAgICAgICAgdGhpcy51aS50cmVlLmpzdHJlZSh7XG4gICAgICAgICAgICAgICAgY29yZToge1xuICAgICAgICAgICAgICAgICAgICAvLyBkaXNhYmxlIG9wZW4vY2xvc2UgYW5pbWF0aW9uc1xuICAgICAgICAgICAgICAgICAgICBhbmltYXRpb246IDAsXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvcmUgc2V0dGluZyB0byBhbGxvdyBhY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrX2NhbGxiYWNrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYW5jZWwgZHJhZ2dpbmcgd2hlbiBmaWx0ZXJpbmcgaXMgYWN0aXZlIGJ5IHNldHRpbmcgYGZhbHNlYFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0aGF0Lm9wdGlvbnMuZmlsdGVyZWQpID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL3d3dy5qc3RyZWUuY29tL2FwaS8jLz9mPSQuanN0cmVlLmRlZmF1bHRzLmNvcmUuZGF0YVxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAvLyBzdHJpbmdzIHVzZWQgd2l0aGluIGpzdHJlZSB0aGF0IGFyZSBjYWxsZWQgdXNpbmcgYGdldF9zdHJpbmdgXG4gICAgICAgICAgICAgICAgICAgIHN0cmluZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdMb2FkaW5nIC4uLic6IHRoaXMub3B0aW9ucy5sYW5nLmxvYWRpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAnTmV3IG5vZGUnOiB0aGlzLm9wdGlvbnMubGFuZy5uZXdOb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ25vZGVzJzogdGhpcy5vcHRpb25zLmxhbmcubm9kZXNcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5zaG93RXJyb3IoZXJyb3IucmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgdGhlbWVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnZGphbmdvLWNtcydcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgLy8gZGlzYWJsZSB0aGUgbXVsdGkgc2VsZWN0aW9uIG9mIG5vZGVzIGZvciBub3dcbiAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGU6IGZhbHNlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAvLyBhY3RpdmF0ZSBkcmFnIGFuZCBkcm9wIHBsdWdpblxuICAgICAgICAgICAgICAgIHBsdWdpbnMgOiBbJ2RuZCcsICdzZWFyY2gnLCAnZ3JpZCddLFxuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3LmpzdHJlZS5jb20vYXBpLyMvP2Y9JC5qc3RyZWUuZGVmYXVsdHMuZG5kXG4gICAgICAgICAgICAgICAgZG5kOiB7XG4gICAgICAgICAgICAgICAgICAgIGluc2lkZV9wb3M6ICdsYXN0JyxcbiAgICAgICAgICAgICAgICAgICAgLy8gZGlzYWJsZSB0aGUgbXVsdGkgc2VsZWN0aW9uIG9mIG5vZGVzIGZvciBub3dcbiAgICAgICAgICAgICAgICAgICAgZHJhZ19zZWxlY3Rpb246IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAvLyBkaXNhYmxlIGRyYWdnaW5nIGlmIGZpbHRlcmVkXG4gICAgICAgICAgICAgICAgICAgIGlzX2RyYWdnYWJsZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0aGF0Lm9wdGlvbnMuZmlsdGVyZWQpID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAvLyBkaXNhYmxlIENNRC9DVFJMIGNvcHlcbiAgICAgICAgICAgICAgICAgICAgY29weTogZmFsc2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kZWl0Y2gvanN0cmVlLWdyaWRcbiAgICAgICAgICAgICAgICBncmlkOiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbHVtbnMgYXJlIHByb3ZpZGVkIGZyb20gYmFzZS5odG1sIG9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uczogY29sdW1uc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXRzIHVwIGFsbCB0aGUgZXZlbnQgaGFuZGxlcnMsIHN1Y2ggYXMgb3BlbmluZyBhbmQgbW92aW5nLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIF9ldmVudHNcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICovXG4gICAgICAgIF9ldmVudHM6IGZ1bmN0aW9uIF9ldmVudHMoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG5cbiAgICAgICAgICAgIC8vIHNldCBldmVudHMgZm9yIHRoZSBub2RlSWQgdXBkYXRlc1xuICAgICAgICAgICAgdGhpcy51aS50cmVlLm9uKCdhZnRlcl9jbG9zZS5qc3RyZWUnLCBmdW5jdGlvbiAoZSwgZWwpIHtcbiAgICAgICAgICAgICAgICB0aGF0Ll9yZW1vdmVOb2RlSWQoZWwubm9kZS5kYXRhLmlkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy51aS50cmVlLm9uKCdhZnRlcl9vcGVuLmpzdHJlZScsIGZ1bmN0aW9uIChlLCBlbCkge1xuICAgICAgICAgICAgICAgIHRoYXQuX3N0b3JlTm9kZUlkKGVsLm5vZGUuZGF0YS5pZCk7XG4gICAgICAgICAgICAgICAgdGhhdC5fY2hlY2tIZWxwZXJzKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gc3RvcmUgbW92ZWQgcG9zaXRpb24gbm9kZVxuICAgICAgICAgICAgdGhpcy51aS50cmVlLm9uKCdtb3ZlX25vZGUuanN0cmVlIGNvcHlfbm9kZS5qc3RyZWUnLCBmdW5jdGlvbiAoZSwgb2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGF0LmNhY2hlLnR5cGUgfHwgdGhhdC5jYWNoZS50eXBlID09PSAnY3V0Jykge1xuICAgICAgICAgICAgICAgICAgICB0aGF0Ll9tb3ZlTm9kZSh0aGF0Ll9nZXROb2RlUG9zaXRpb24ob2JqKSkuZG9uZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSB0aGF0LnVpLnRyZWUuanN0cmVlKHRydWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5faGlkZV9ncmlkKGluc3RhbmNlLmdldF9ub2RlKG9iai5wYXJlbnQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmoucGFyZW50ID09PSAnIycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5yZWZyZXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgdG8gcmVmcmVzaCBwYXJlbnQsIGJlY2F1c2UgcmVmcmVzaCBvbmx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVmcmVzaGVzIGNoaWxkcmVuIG9mIHRoZSBub2RlLCBuZXZlciB0aGUgbm9kZSBpdHNlbGZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5yZWZyZXNoX25vZGUob2JqLnBhcmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoYXQuX2NvcHlOb2RlKG9iaik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gb3BlbiB0aGUgcGFyZW50IG5vZGUgaWYgd2UgdHJpZ2dlciBhbiBlbGVtZW50XG4gICAgICAgICAgICAgICAgLy8gaWYgbm90IGFscmVhZHkgb3BlbmVkXG4gICAgICAgICAgICAgICAgdGhhdC51aS50cmVlLmpzdHJlZSgnb3Blbl9ub2RlJywgb2JqLnBhcmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gc2V0IGV2ZW50IGZvciBjdXQgYW5kIHBhc3RlXG4gICAgICAgICAgICB0aGlzLnVpLmNvbnRhaW5lci5vbih0aGlzLmNsaWNrLCAnLmpzLWNtcy10cmVlLWl0ZW0tY3V0JywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhhdC5fY3V0T3JDb3B5KHsgdHlwZTogJ2N1dCcsIGVsZW1lbnQ6ICQodGhpcykgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gc2V0IGV2ZW50IGZvciBjdXQgYW5kIHBhc3RlXG4gICAgICAgICAgICB0aGlzLnVpLmNvbnRhaW5lci5vbih0aGlzLmNsaWNrLCAnLmpzLWNtcy10cmVlLWl0ZW0tY29weScsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoYXQuX2N1dE9yQ29weSh7IHR5cGU6ICdjb3B5JywgZWxlbWVudDogJCh0aGlzKSB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBhdHRhY2ggZXZlbnRzIHRvIHBhc3RlXG4gICAgICAgICAgICB0aGlzLnVpLmNvbnRhaW5lci5vbih0aGlzLmNsaWNrLCAnLmNtcy10cmVlLWl0ZW0taGVscGVycyBhJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhhdC5fcGFzdGUoZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gYWR2YW5jZWQgc2V0dGluZ3MgbGluayBoYW5kbGluZ1xuICAgICAgICAgICAgdGhpcy51aS5jb250YWluZXIub24odGhpcy5jbGljaywgJy5qcy1jbXMtdHJlZS1hZHZhbmNlZC1zZXR0aW5ncycsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGUuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICQodGhpcykuZGF0YSgndXJsJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIGFkZCBldmVudHMgZm9yIGVycm9yIHJlbG9hZCAobWVzc2FnZWxpc3QpXG4gICAgICAgICAgICB0aGlzLnVpLmRvY3VtZW50Lm9uKHRoaXMuY2xpY2ssICcubWVzc2FnZWxpc3QgLmNtcy10cmVlLXJlbG9hZCcsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoYXQuX3JlbG9hZEhlbHBlcigpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIHByb3BhZ25hdGUgdGhlIHNpdGVzIGRyb3Bkb3duIHRvIHRoZSBoaWRkZW4gc2l0ZXMgZm9ybVxuICAgICAgICAgICAgdGhpcy51aS5jb250YWluZXIuZmluZCgnLmpzLWNtcy1wYWdldHJlZS1zaXRlLXRyaWdnZXInKS5vbih0aGlzLmNsaWNrLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAvLyBwcmV2ZW50IGlmIHBhcmVudCBpcyBhY3RpdmVcbiAgICAgICAgICAgICAgICBpZiAoJCh0aGlzKS5wYXJlbnQoKS5oYXNDbGFzcygnYWN0aXZlJykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGF0LnVpLnNpdGVGb3JtLmZpbmQoJ3NlbGVjdCcpXG4gICAgICAgICAgICAgICAgICAgIC52YWwoJCh0aGlzKS5kYXRhKCkuaWQpLmVuZCgpLnN1Ym1pdCgpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIGFkZGl0aW9uYWwgZXZlbnQgaGFuZGxlcnNcbiAgICAgICAgICAgIHRoaXMuX3NldFRvb2x0aXBzKCk7XG4gICAgICAgICAgICB0aGlzLl9zZXRTZWFyY2goKTtcblxuICAgICAgICAgICAgLy8gbWFrZSBzdXJlIGFqYXggcG9zdCByZXF1ZXN0cyBhcmUgd29ya2luZ1xuICAgICAgICAgICAgdGhpcy5fc2V0QWpheFBvc3QoJy5qcy1jbXMtdHJlZS1pdGVtLW1lbnUgYScpO1xuICAgICAgICAgICAgdGhpcy5fc2V0QWpheFBvc3QoJy5qcy1jbXMtdHJlZS1sYW5nLXRyaWdnZXInKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogSGVscGVyIHRvIHByb2Nlc3MgdGhlIGN1dCBhbmQgY29weSBldmVudHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2QgX2N1dE9yQ29weVxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdHNdXG4gICAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy50eXBlXSBlaXRoZXIgJ2N1dCcgb3IgJ2NvcHknXG4gICAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5lbGVtZW50XSBvcmlnaW5hdGVkIHRyaWdnZXIgZWxlbWVudFxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgX2N1dE9yQ29weTogZnVuY3Rpb24gX2N1dE9yQ29weShvYmopIHtcbiAgICAgICAgICAgIC8vIHByZXZlbnQgYWN0aW9ucyBpZiB5b3UgdHJ5IHRvIGNvcHkgYSBwYWdlIHdpdGggYW4gYXBwaG9va1xuICAgICAgICAgICAgaWYgKG9iai50eXBlID09PSAnY29weScgJiYgb2JqLmVsZW1lbnQuZGF0YSgpLmFwcGhvb2spIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcih0aGlzLm9wdGlvbnMubGFuZy5hcHBob29rKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBqc1RyZWVJZCA9IHRoaXMuX2dldE5vZGVJZChvYmouZWxlbWVudC5jbG9zZXN0KCcuanN0cmVlLWdyaWQtY2VsbCcpKTtcbiAgICAgICAgICAgIC8vIHJlc2V0cyBpZiB3ZSBjbGljayBhZ2FpblxuICAgICAgICAgICAgaWYgKHRoaXMuY2FjaGUudHlwZSA9PT0gb2JqLnR5cGUgJiYganNUcmVlSWQgPT09IHRoaXMuY2FjaGUuaWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlLnR5cGUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuX2hpZGVIZWxwZXJzKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gY2FjaGUgdGhlIG5vZGUgYW5kIHR5cGUgc28gYF9zaG93SGVscGVyc2BcbiAgICAgICAgICAgICAgICAvLyB3aWxsIHRyaWdnZXIgdGhlIGNvcnJlY3QgYmVoYXZpb3VyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZS50YXJnZXQgPSBvYmouZWxlbWVudDtcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlLnR5cGUgPSBvYmoudHlwZTtcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlLmlkID0ganNUcmVlSWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvd0hlbHBlcnMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGVja0hlbHBlcnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogSGVscGVyIHRvIHByb2Nlc3MgdGhlIHBhc3RlIGV2ZW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIF9wYXN0ZVxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IGV2ZW50IG9yaWdpbmF0ZWQgZXZlbnQgaGFuZGxlclxuICAgICAgICAgKi9cbiAgICAgICAgX3Bhc3RlOiBmdW5jdGlvbiBfcGFzdGUoZXZlbnQpIHtcbiAgICAgICAgICAgIC8vIGhpZGUgaGVscGVycyBhZnRlciB3ZSBwaWNrZWQgb25lXG4gICAgICAgICAgICB0aGlzLl9oaWRlSGVscGVycygpO1xuXG4gICAgICAgICAgICB2YXIgY29weUZyb21JZCA9IHRoaXMuX2dldE5vZGVJZCh0aGlzLmNhY2hlLnRhcmdldCk7XG4gICAgICAgICAgICB2YXIgY29weVRvSWQgPSB0aGlzLl9nZXROb2RlSWQoJChldmVudC5jdXJyZW50VGFyZ2V0KSk7XG5cbiAgICAgICAgICAgIC8vIGNvcHlUb0lkIGNvbnRhaW5zIGBqc3RyZWUtMWAsIGFzc2lnbiB0byByb290XG4gICAgICAgICAgICBpZiAoY29weVRvSWQuaW5kZXhPZignanN0cmVlLTEnKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgY29weVRvSWQgPSAnIyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmNhY2hlLnR5cGUgPT09ICdjdXQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51aS50cmVlLmpzdHJlZSgnY3V0JywgY29weUZyb21JZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudWkudHJlZS5qc3RyZWUoJ2NvcHknLCBjb3B5RnJvbUlkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy51aS50cmVlLmpzdHJlZSgncGFzdGUnLCBjb3B5VG9JZCwgJ2xhc3QnKTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGUudHlwZSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmNhY2hlLnRhcmdldCA9IG51bGw7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHJlaXZlcyBhIGxpc3Qgb2Ygbm9kZXMgZnJvbSBsb2NhbCBzdG9yYWdlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIF9nZXRTdG9yZWROb2RlSWRzXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqIEByZXR1cm4ge0FycmF5fSBsaXN0IG9mIGlkc1xuICAgICAgICAgKi9cbiAgICAgICAgX2dldFN0b3JlZE5vZGVJZHM6IGZ1bmN0aW9uIF9nZXRTdG9yZWROb2RlSWRzKCkge1xuICAgICAgICAgICAgcmV0dXJuIENNUy5zZXR0aW5ncy5wYWdldHJlZSB8fCBbXTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogU3RvcmVzIGEgbm9kZSBpbiBsb2NhbCBzdG9yYWdlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIF9zdG9yZU5vZGVJZFxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gaWQgdG8gYmUgc3RvcmVkXG4gICAgICAgICAqIEByZXR1cm4ge1N0cmluZ30gaWQgdGhhdCBoYXMgYmVlbiBzdG9yZWRcbiAgICAgICAgICovXG4gICAgICAgIF9zdG9yZU5vZGVJZDogZnVuY3Rpb24gX3N0b3JlTm9kZUlkKGlkKSB7XG4gICAgICAgICAgICB2YXIgbnVtYmVyID0gaWQ7XG4gICAgICAgICAgICB2YXIgc3RvcmFnZSA9IHRoaXMuX2dldFN0b3JlZE5vZGVJZHMoKTtcblxuICAgICAgICAgICAgLy8gc3RvcmUgdmFsdWUgb25seSBpZiBpdCBpc24ndCB0aGVyZSB5ZXRcbiAgICAgICAgICAgIGlmIChzdG9yYWdlLmluZGV4T2YobnVtYmVyKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBzdG9yYWdlLnB1c2gobnVtYmVyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQ01TLnNldHRpbmdzLnBhZ2V0cmVlID0gc3RvcmFnZTtcbiAgICAgICAgICAgIENNUy5BUEkuSGVscGVycy5zZXRTZXR0aW5ncyhDTVMuc2V0dGluZ3MpO1xuXG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZW1vdmVzIGEgbm9kZSBpbiBsb2NhbCBzdG9yYWdlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIF9yZW1vdmVOb2RlSWRcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGlkIHRvIGJlIHN0b3JlZFxuICAgICAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IGlkIHRoYXQgaGFzIGJlZW4gcmVtb3ZlZFxuICAgICAgICAgKi9cbiAgICAgICAgX3JlbW92ZU5vZGVJZDogZnVuY3Rpb24gX3JlbW92ZU5vZGVJZChpZCkge1xuICAgICAgICAgICAgdmFyIG51bWJlciA9IGlkO1xuICAgICAgICAgICAgdmFyIHN0b3JhZ2UgPSB0aGlzLl9nZXRTdG9yZWROb2RlSWRzKCk7XG4gICAgICAgICAgICB2YXIgaW5kZXggPSBzdG9yYWdlLmluZGV4T2YobnVtYmVyKTtcblxuICAgICAgICAgICAgLy8gcmVtb3ZlIGdpdmVuIGlkIGZyb20gc3RvcmFnZVxuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIHN0b3JhZ2Uuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQ01TLnNldHRpbmdzLnBhZ2V0cmVlID0gc3RvcmFnZTtcbiAgICAgICAgICAgIENNUy5BUEkuSGVscGVycy5zZXRTZXR0aW5ncyhDTVMuc2V0dGluZ3MpO1xuXG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBNb3ZlcyBhIG5vZGUgYWZ0ZXIgZHJhZyAmIGRyb3AuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2QgX21vdmVOb2RlXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c11cbiAgICAgICAgICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLmlkXSBjdXJyZW50IGVsZW1lbnQgaWQgZm9yIHVybCBtYXRjaGluZ1xuICAgICAgICAgKiBAcGFyYW0ge051bWJlcn0gW29wdHMudGFyZ2V0XSB0YXJnZXQgc2libGluZyBvciBwYXJlbnRcbiAgICAgICAgICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLnBvc2l0aW9uXSBlaXRoZXIgYGxlZnRgLCBgcmlnaHRgIG9yIGBsYXN0LWNoaWxkYFxuICAgICAgICAgKiBAcmV0dXJucyB7JC5EZWZlcnJlZH0gYWpheCByZXF1ZXN0IG9iamVjdFxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgX21vdmVOb2RlOiBmdW5jdGlvbiBfbW92ZU5vZGUob2JqKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICBvYmouc2l0ZSA9IHRoYXQub3B0aW9ucy5zaXRlO1xuXG4gICAgICAgICAgICByZXR1cm4gJC5hamF4KHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgICAgICAgICAgICB1cmw6IHRoYXQub3B0aW9ucy51cmxzLm1vdmUucmVwbGFjZSgne2lkfScsIG9iai5pZCksXG4gICAgICAgICAgICAgICAgZGF0YTogb2JqXG4gICAgICAgICAgICB9KS5kb25lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0aGF0Ll9zaG93U3VjY2VzcyhvYmouaWQpO1xuICAgICAgICAgICAgfSkuZmFpbChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGF0LnNob3dFcnJvcihlcnJvci5zdGF0dXNUZXh0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb3BpZXMgYSBub2RlIGludG8gdGhlIHNlbGVjdGVkIG5vZGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2QgX2NvcHlOb2RlXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjb3B5RnJvbUlkIGVsZW1lbnQgdG8gYmUgY3V0XG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjb3B5VG9JZCBkZXN0aW5hdGlvbiB0byBpbmplY3RcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICovXG4gICAgICAgIF9jb3B5Tm9kZTogZnVuY3Rpb24gX2NvcHlOb2RlKG9iaikge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGF0Ll9nZXROb2RlUG9zaXRpb24ob2JqKTtcbiAgICAgICAgICAgIHZhciBkYXRhID0ge1xuICAgICAgICAgICAgICAgIHNpdGU6IHRoaXMub3B0aW9ucy5zaXRlLFxuICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gcmVmZXIgdG8gdGhlIG9yaWdpbmFsIGl0ZW0gaGVyZSwgYXMgdGhlIGNvcGllZFxuICAgICAgICAgICAgICAgIC8vIG5vZGUgd2lsbCBoYXZlIG5vIGRhdGEgYXR0cmlidXRlcyBzdG9yZWQgYXQgaXQgKG5vdCBhIGNsb25lKVxuICAgICAgICAgICAgICAgIGlkOiBvYmoub3JpZ2luYWwuZGF0YS5pZCxcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogbm9kZS5wb3NpdGlvblxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gdGFyZ2V0IHByb3ZpZGVkLCB0aGUgbm9kZSBsYW5kcyBpbiByb290XG4gICAgICAgICAgICBpZiAobm9kZS50YXJnZXQpIHtcbiAgICAgICAgICAgICAgICBkYXRhLnRhcmdldCA9IG5vZGUudGFyZ2V0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGxvYWQgYSBkaWFsb2cgZmlyc3QsIHRvIGNoZWNrIGlmIHBlcm1pc3Npb25zIHNob3VsZFxuICAgICAgICAgICAgLy8gYmUgY29waWVkIG9yIG5vdFxuICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgICAgICAgICAgICB1cmw6IHRoYXQub3B0aW9ucy51cmxzLmNvcHlQZXJtaXNzaW9uLnJlcGxhY2UoJ3tpZH0nLCBkYXRhLmlkKSxcbiAgICAgICAgICAgICAgICBkYXRhOiBkYXRhXG4gICAgICAgICAgICAvLyB0aGUgZGlhbG9nIGlzIGxvYWRlZCB2aWEgdGhlIGFqYXggcmVzcG9ucyBvcmlnaW5hdGluZyBmcm9tXG4gICAgICAgICAgICAvLyBgdGVtcGxhdGVzL2FkbWluL2Ntcy9wYWdlL3RyZWUvY29weV9wcmVtaXNzaW9ucy5odG1sYFxuICAgICAgICAgICAgfSkuZG9uZShmdW5jdGlvbiAoZGlhbG9nKSB7XG4gICAgICAgICAgICAgICAgdGhhdC51aS5kaWFsb2cuYXBwZW5kKGRpYWxvZyk7XG4gICAgICAgICAgICB9KS5mYWlsKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHRoYXQuc2hvd0Vycm9yKGVycm9yLnN0YXR1c1RleHQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIGF0dGFjaCBldmVudHMgdG8gdGhlIHBlcm1pc3Npb24gZGlhbG9nXG4gICAgICAgICAgICB0aGlzLnVpLmRpYWxvZy5vZmYodGhpcy5jbGljaywgJy5jYW5jZWwnKS5vbih0aGlzLmNsaWNrLCAnLmNhbmNlbCcsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBqdXN0IGNvcGllZCBub2RlXG4gICAgICAgICAgICAgICAgdGhhdC51aS50cmVlLmpzdHJlZSgnZGVsZXRlX25vZGUnLCBvYmoubm9kZS5pZCk7XG4gICAgICAgICAgICAgICAgJCgnLmpzLWNtcy1kaWFsb2cnKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAkKCcuanMtY21zLWRpYWxvZy1kaW1tZXInKS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH0pLm9mZih0aGlzLmNsaWNrLCAnLnN1Ym1pdCcpLm9uKHRoaXMuY2xpY2ssICcuc3VibWl0JywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdmFyIGZvcm1EYXRhID0gJCh0aGlzKS5jbG9zZXN0KCdmb3JtJykuc2VyaWFsaXplKCkuc3BsaXQoJyYnKTtcbiAgICAgICAgICAgICAgICAvLyBsb29wIHRocm91Z2ggZm9ybSBkYXRhIGFuZCBhdHRhY2ggdG8gb2JqXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb3JtRGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBkYXRhW2Zvcm1EYXRhW2ldLnNwbGl0KCc9JylbMF1dID0gZm9ybURhdGFbaV0uc3BsaXQoJz0nKVsxXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gc2VuZCB0aGUgcmVhbCBhamF4IHJlcXVlc3QgZm9yIGNvcHlpbmcgdGhlIHBsdWdpblxuICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHRoYXQub3B0aW9ucy51cmxzLmNvcHkucmVwbGFjZSgne2lkfScsIGRhdGEuaWQpLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhXG4gICAgICAgICAgICAgICAgfSkuZG9uZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoYXQuX3JlbG9hZEhlbHBlcigpO1xuICAgICAgICAgICAgICAgIH0pLmZhaWwoZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoYXQuc2hvd0Vycm9yKGVycm9yLnN0YXR1c1RleHQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgZWxlbWVudCBmcm9tIGFueSBzdWIgbm9kZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2QgX2dldEVsZW1lbnRcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtqUXVlcnl9IGVsIGpRdWVyeSBub2RlIGZvcm0gd2hlcmUgdG8gc2VhcmNoXG4gICAgICAgICAqIEByZXR1cm4ge1N0cmluZ3xCb29sZWFufSBqc1RyZWUgbm9kZSBlbGVtZW50IGlkXG4gICAgICAgICAqL1xuICAgICAgICBfZ2V0Tm9kZUlkOiBmdW5jdGlvbiBfZ2V0RWxlbWVudChlbCkge1xuICAgICAgICAgICAgdmFyIGNscyA9IGVsLmNsb3Nlc3QoJy5qc3RyZWUtZ3JpZC1jZWxsJykuYXR0cignY2xhc3MnKTtcblxuICAgICAgICAgICAgcmV0dXJuIChjbHMpID8gY2xzLnJlcGxhY2UoLy4qanNncmlkXyguKz8pX2NvbC4qLywgJyQxJykgOiBmYWxzZTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyB0aGUgbmV3IG5vZGUgcG9zaXRpb24gYWZ0ZXIgbW92aW5nLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIF9nZXROb2RlUG9zaXRpb25cbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iaiBqc3RyZWUgbW92ZSBvYmplY3RcbiAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBldmFsdWF0ZWQgb2JqZWN0IHdpdGggcGFyYW1zXG4gICAgICAgICAqL1xuICAgICAgICBfZ2V0Tm9kZVBvc2l0aW9uOiBmdW5jdGlvbiBfZ2V0Tm9kZVBvc2l0aW9uKG9iaikge1xuICAgICAgICAgICAgdmFyIGRhdGEgPSB7fTtcbiAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy51aS50cmVlLmpzdHJlZSgnZ2V0X25vZGUnLCBvYmoubm9kZS5wYXJlbnQpO1xuXG4gICAgICAgICAgICBkYXRhLnBvc2l0aW9uID0gb2JqLnBvc2l0aW9uO1xuXG4gICAgICAgICAgICAvLyBqc3RyZWUgaW5kaWNhdGVzIG5vIHBhcmVudCB3aXRoIGAjYCwgaW4gdGhpcyBjYXNlIHdlIGRvIG5vdFxuICAgICAgICAgICAgLy8gbmVlZCB0byBzZXQgdGhlIHRhcmdldCBhdHRyaWJ1dGUgYXQgYWxsXG4gICAgICAgICAgICBpZiAob2JqLnBhcmVudCAhPT0gJyMnKSB7XG4gICAgICAgICAgICAgICAgZGF0YS50YXJnZXQgPSBub2RlLmRhdGEuaWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHNvbWUgZnVuY3Rpb25zIGxpa2UgY29weSBjcmVhdGUgYSBuZXcgZWxlbWVudCB3aXRoIGEgbmV3IGlkLFxuICAgICAgICAgICAgLy8gaW4gdGhpcyBjYXNlIHdlIG5lZWQgdG8gc2V0IGBkYXRhLmlkYCBtYW51YWxseVxuICAgICAgICAgICAgaWYgKG9iai5ub2RlICYmIG9iai5ub2RlLmRhdGEpIHtcbiAgICAgICAgICAgICAgICBkYXRhLmlkID0gb2JqLm5vZGUuZGF0YS5pZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldHMgdXAgZ2VuZXJhbCB0b29sdGlwcyB0aGF0IGNhbiBoYXZlIGEgbGlzdCBvZiBsaW5rcyBvciBjb250ZW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIF9zZXRUb29sdGlwc1xuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgX3NldFRvb2x0aXBzOiBmdW5jdGlvbiBfc2V0VG9vbHRpcHMoKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgdHJpZ2dlckNscyA9ICcuanMtY21zLXRyZWUtdG9vbHRpcC10cmlnZ2VyJztcbiAgICAgICAgICAgIHZhciBjb250YWluZXJDbHMgPSAnLmpzLWNtcy10cmVlLXRvb2x0aXAtY29udGFpbmVyJztcbiAgICAgICAgICAgIHZhciB0cmlnZ2VycztcbiAgICAgICAgICAgIHZhciBjb250YWluZXJzO1xuICAgICAgICAgICAgdmFyIGluZGV4O1xuXG4gICAgICAgICAgICAvLyBhdHRhY2ggZXZlbnQgdG8gdGhlIHRyaWdnZXJcbiAgICAgICAgICAgIHRoaXMudWkuY29udGFpbmVyLm9uKHRoaXMuY2xpY2ssIHRyaWdnZXJDbHMsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgICAgICAgICB0cmlnZ2VycyA9ICQodHJpZ2dlckNscyk7XG4gICAgICAgICAgICAgICAgY29udGFpbmVycyA9ICQoY29udGFpbmVyQ2xzKTtcbiAgICAgICAgICAgICAgICBpbmRleCA9IHRyaWdnZXJzLmluZGV4KHRoaXMpO1xuXG4gICAgICAgICAgICAgICAgLy8gY2FuY2VsIGlmIG9wZW5lZCB0b29sdGlwIGlzIHRyaWdnZXJlZCBhZ2FpblxuICAgICAgICAgICAgICAgIGlmIChjb250YWluZXJzLmVxKGluZGV4KS5pcygnOnZpc2libGUnKSkge1xuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJzLnJlbW92ZUNsYXNzKCdjbXMtdHJlZS10b29sdGlwLWNvbnRhaW5lci1vcGVuJyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2Ugc2hvdyB0aGUgZHJvcGRvd25cbiAgICAgICAgICAgICAgICBjb250YWluZXJzXG4gICAgICAgICAgICAgICAgICAgIC5yZW1vdmVDbGFzcygnY21zLXRyZWUtdG9vbHRpcC1jb250YWluZXItb3BlbicpXG4gICAgICAgICAgICAgICAgICAgIC5lcShpbmRleClcbiAgICAgICAgICAgICAgICAgICAgLmFkZENsYXNzKCdjbXMtdHJlZS10b29sdGlwLWNvbnRhaW5lci1vcGVuJyk7XG5cbiAgICAgICAgICAgICAgICB0aGF0LnVpLmRvY3VtZW50Lm9uZSh0aGF0LmNsaWNrLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcnMucmVtb3ZlQ2xhc3MoJ2Ntcy10cmVlLXRvb2x0aXAtY29udGFpbmVyLW9wZW4nKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBzdG9wIHByb3BhZ25hdGlvbiBvbiB0aGUgZWxlbWVudFxuICAgICAgICAgICAgdGhpcy51aS5jb250YWluZXIub24odGhpcy5jbGljaywgY29udGFpbmVyQ2xzLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogVHJpZ2dlcnMgdGhlIGxpbmtzIGBocmVmYCBhcyBhamF4IHBvc3QgcmVxdWVzdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBfc2V0QWpheFBvc3RcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICogQHBhcmFtIHtqUXVlcnl9IHRyaWdnZXIgalF1ZXJ5IGxpbmsgdGFyZ2V0XG4gICAgICAgICAqL1xuICAgICAgICBfc2V0QWpheFBvc3Q6IGZ1bmN0aW9uIF9zZXRBamF4UG9zdCh0cmlnZ2VyKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG5cbiAgICAgICAgICAgIHRoaXMudWkuY29udGFpbmVyLm9uKHRoaXMuY2xpY2ssIHRyaWdnZXIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQodGhpcykuYXR0cignaHJlZicpXG4gICAgICAgICAgICAgICAgfSkuZG9uZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuc2VsZiAhPT0gd2luZG93LnRvcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgd2UncmUgaW4gdGhlIHNpZGVmcmFtZSB3ZSBoYXZlIHRvIGFjdHVhbGx5XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiB3ZSBhcmUgcHVibGlzaGluZyBhIHBhZ2Ugd2UncmUgY3VycmVudGx5IGluXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIGlmIHRoZSBzbHVnIGRpZCBjaGFuZ2Ugd2Ugd291bGQgbmVlZCB0b1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVkaXJlY3QgdG8gdGhhdCBuZXcgc2x1Z1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJvYmxlbSBoZXJlIGlzIHRoYXQgaW4gY2FzZSBvZiB0aGUgYXBwaG9va2VkIHBhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBtb2RlbCBhbmQgcGsgYXJlIGVtcHR5IGFuZCByZWxvYWRCcm93c2VyIGRvZXNuJ3QgcmVhbGx5XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBkbyBhbnl0aGluZyAtIHNvIGhlcmUgd2Ugc3BlY2lmaWNhbGx5IGZvcmNlIHRoZSBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBiZSB0aGUgZGF0YSBhYm91dCB0aGUgcGFnZSBhbmQgbm90IHRoZSBtb2RlbFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudCA9ICh3aW5kb3cucGFyZW50ID8gd2luZG93LnBhcmVudCA6IHdpbmRvdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRSBzaG91bGRuJ3QgYmUgaGFyZGNvZGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWw6ICdjbXMucGFnZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGs6IHBhcmVudC5DTVMuY29uZmlnLnJlcXVlc3QucGFnZV9pZFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIENNUy5BUEkuSGVscGVycy5yZWxvYWRCcm93c2VyKGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2Ugc2ltcGx5IHJlbG9hZCB0aGUgcGFnZVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5fcmVsb2FkSGVscGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KS5mYWlsKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICB0aGF0LnNob3dFcnJvcihlcnJvci5zdGF0dXNUZXh0KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXRzIGV2ZW50cyBmb3IgdGhlIHNlYXJjaCBvbiB0aGUgaGVhZGVyLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIF9zZXRTZWFyY2hcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICovXG4gICAgICAgIF9zZXRTZWFyY2g6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcblxuICAgICAgICAgICAgdmFyIGZpbHRlckFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIGZpbHRlclRyaWdnZXIgPSB0aGlzLnVpLmNvbnRhaW5lci5maW5kKCcuanMtY21zLXBhZ2V0cmVlLWhlYWRlci1maWx0ZXItdHJpZ2dlcicpO1xuICAgICAgICAgICAgdmFyIGZpbHRlckNvbnRhaW5lciA9IHRoaXMudWkuY29udGFpbmVyLmZpbmQoJy5qcy1jbXMtcGFnZXRyZWUtaGVhZGVyLWZpbHRlci1jb250YWluZXInKTtcbiAgICAgICAgICAgIHZhciBmaWx0ZXJDbG9zZSA9IGZpbHRlckNvbnRhaW5lci5maW5kKCcuanMtY21zLXBhZ2V0cmVlLWhlYWRlci1zZWFyY2gtY2xvc2UnKTtcbiAgICAgICAgICAgIHZhciBmaWx0ZXJDbGFzcyA9ICdjbXMtcGFnZXRyZWUtaGVhZGVyLWZpbHRlci1hY3RpdmUnO1xuXG4gICAgICAgICAgICB2YXIgdmlzaWJsZUZvcm0gPSB0aGlzLnVpLmNvbnRhaW5lci5maW5kKCcuanMtY21zLXBhZ2V0cmVlLWhlYWRlci1zZWFyY2gnKTtcbiAgICAgICAgICAgIHZhciBoaWRkZW5Gb3JtID0gdGhpcy51aS5jb250YWluZXIuZmluZCgnLmpzLWNtcy1wYWdldHJlZS1oZWFkZXItc2VhcmNoLWNvcHkgZm9ybScpO1xuXG4gICAgICAgICAgICB2YXIgc2VhcmNoQ29udGFpbmVyID0gdGhpcy51aS5jb250YWluZXIuZmluZCgnLmNtcy1wYWdldHJlZS1oZWFkZXItZmlsdGVyJyk7XG4gICAgICAgICAgICB2YXIgc2VhcmNoRmllbGQgPSBzZWFyY2hDb250YWluZXIuZmluZCgnI2ZpZWxkLXNlYXJjaGJhcicpO1xuICAgICAgICAgICAgdmFyIHRpbWVvdXQgPSAyMDA7XG5cbiAgICAgICAgICAgIC8vIGFkZCBhY3RpdmUgY2xhc3Mgd2hlbiBmb2N1c2luZyB0aGUgc2VhcmNoIGZpZWxkXG4gICAgICAgICAgICBzZWFyY2hGaWVsZC5vbignZm9jdXMnLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgc2VhcmNoQ29udGFpbmVyLmFkZENsYXNzKGZpbHRlckNsYXNzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2VhcmNoRmllbGQub24oJ2JsdXInLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgLy8gdGltZW91dCBpcyByZXF1aXJlZCB0byBwcmV2ZW50IHRoZSBzZWFyY2ggZmllbGQgZnJvbSBqdW1waW5nXG4gICAgICAgICAgICAgICAgLy8gYmV0d2VlbiBlbmxhcmdpbmcgYW5kIHNocmlua2luZ1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbHRlckFjdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoQ29udGFpbmVyLnJlbW92ZUNsYXNzKGZpbHRlckNsYXNzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIHRpbWVvdXQpO1xuICAgICAgICAgICAgICAgIHRoYXQudWkuZG9jdW1lbnQub2ZmKHRoYXQuY2xpY2spO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIHNob3dzL2hpZGVzIGZpbHRlciBib3hcbiAgICAgICAgICAgIGZpbHRlclRyaWdnZXIuYWRkKGZpbHRlckNsb3NlKS5vbih0aGlzLmNsaWNrLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGlmICghZmlsdGVyQWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckNvbnRhaW5lci5zaG93KCk7XG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaENvbnRhaW5lci5hZGRDbGFzcyhmaWx0ZXJDbGFzcyk7XG4gICAgICAgICAgICAgICAgICAgIHRoYXQudWkuZG9jdW1lbnQub24odGhhdC5jbGljaywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyQWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclRyaWdnZXIudHJpZ2dlcih0aGF0LmNsaWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyQ29udGFpbmVyLmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoQ29udGFpbmVyLnJlbW92ZUNsYXNzKGZpbHRlckNsYXNzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhhdC51aS5kb2N1bWVudC5vZmYodGhhdC5jbGljayk7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBwcmV2ZW50IGNsb3Npbmcgd2hlbiBvbiBmaWx0ZXIgY29udGFpbmVyXG4gICAgICAgICAgICBmaWx0ZXJDb250YWluZXIub24oJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIGFkZCBoaWRkZW4gZmllbGRzIHRvIHRoZSBmb3JtIHRvIG1haW50YWluIGZpbHRlciBwYXJhbXNcbiAgICAgICAgICAgIHZpc2libGVGb3JtLmFwcGVuZChoaWRkZW5Gb3JtLmZpbmQoJ2lucHV0W3R5cGU9XCJoaWRkZW5cIl0nKSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNob3dzIHBhc3RlIGhlbHBlcnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2QgX3Nob3dIZWxwZXJzXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqL1xuICAgICAgICBfc2hvd0hlbHBlcnM6IGZ1bmN0aW9uIF9zaG93SGVscGVycygpIHtcbiAgICAgICAgICAgIC8vIGhlbHBlcnMgYXJlIGdlbmVyYXRlZCBvbiB0aGUgZmx5LCBzbyB3ZSBuZWVkIHRvIHJlZmVyZW5jZVxuICAgICAgICAgICAgLy8gdGhlbSBldmVyeSBzaW5nbGUgdGltZVxuICAgICAgICAgICAgJCgnLmNtcy10cmVlLWl0ZW0taGVscGVycycpLnJlbW92ZUNsYXNzKCdjbXMtaGlkZGVuJyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEhpZGVzIHBhc3RlIGhlbHBlcnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2QgX2hpZGVIZWxwZXJzXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqL1xuICAgICAgICBfaGlkZUhlbHBlcnM6IGZ1bmN0aW9uIF9oaWRlSGVscGVycygpIHtcbiAgICAgICAgICAgIC8vIGhlbHBlcnMgYXJlIGdlbmVyYXRlZCBvbiB0aGUgZmx5LCBzbyB3ZSBuZWVkIHRvIHJlZmVyZW5jZVxuICAgICAgICAgICAgLy8gdGhlbSBldmVyeSBzaW5nbGUgdGltZVxuICAgICAgICAgICAgJCgnLmNtcy10cmVlLWl0ZW0taGVscGVycycpLmFkZENsYXNzKCdjbXMtaGlkZGVuJyk7XG4gICAgICAgICAgICB0aGlzLmNhY2hlLmlkID0gbnVsbDtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ2hlY2tzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBoZWxwZXJzIGFmdGVyIGBhZnRlcl9vcGVuLmpzdHJlZWBcbiAgICAgICAgICogb3IgYF9jdXRPckNvcHlgIGlzIHRyaWdnZXJlZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBfY2hlY2tIZWxwZXJzXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqL1xuICAgICAgICBfY2hlY2tIZWxwZXJzOiBmdW5jdGlvbiBfY2hlY2tIZWxwZXJzKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FjaGUudHlwZSAmJiB0aGlzLmNhY2hlLmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvd0hlbHBlcnModGhpcy5jYWNoZS50eXBlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaGlkZSBjdXQgZWxlbWVudCBhbmQgaXQncyBkZXNjZW5kYW50cycgcGFzdGUgaGVscGVycyBpZiBpdCBpcyB2aXNpYmxlXG4gICAgICAgICAgICBpZiAodGhpcy5jYWNoZS50eXBlID09PSAnY3V0JyAmJiB0aGlzLmNhY2hlLnRhcmdldCkge1xuICAgICAgICAgICAgICAgIHZhciBkZXNjZW5kYW50SWRzID0gdGhpcy51aS50cmVlLmpzdHJlZSh0cnVlKS5nZXRfbm9kZSh0aGlzLmNhY2hlLmlkKS5jaGlsZHJlbl9kO1xuXG4gICAgICAgICAgICAgICAgW3RoaXMuY2FjaGUuaWRdLmNvbmNhdChkZXNjZW5kYW50SWRzKS5mb3JFYWNoKGZ1bmN0aW9uIChpZCkge1xuICAgICAgICAgICAgICAgICAgICAkKCcuanNncmlkXycgKyBpZCArICdfY29sIC5jbXMtdHJlZS1pdGVtLWhlbHBlcnMnKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmFkZENsYXNzKCdjbXMtaGlkZGVuJyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNob3dzIHN1Y2Nlc3MgbWVzc2FnZSBvbiBub2RlIGFmdGVyIHN1Y2Nlc3NmdWwgYWN0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIF9zaG93U3VjY2Vzc1xuICAgICAgICAgKiBAcGFyYW0ge051bWJlcn0gaWQgaWQgb2YgdGhlIGVsZW1lbnQgdG8gYWRkIHRoZSBzdWNjZXNzIGNsYXNzXG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqL1xuICAgICAgICBfc2hvd1N1Y2Nlc3M6IGZ1bmN0aW9uIF9zaG93U3VjY2VzcyhpZCkge1xuICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLnVpLnRyZWUuZmluZCgnbGlbZGF0YS1pZD1cIicgKyBpZCArICdcIl0nKTtcbiAgICAgICAgICAgIGVsZW1lbnQuYWRkQ2xhc3MoJ2Ntcy10cmVlLW5vZGUtc3VjY2VzcycpO1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVDbGFzcygnY21zLXRyZWUtbm9kZS1zdWNjZXNzJyk7XG4gICAgICAgICAgICB9LCB0aGlzLnN1Y2Nlc3NUaW1lcik7XG4gICAgICAgICAgICAvLyBoaWRlIGVsZW1lbnRzXG4gICAgICAgICAgICB0aGlzLl9oaWRlSGVscGVycygpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDaGVja3MgaWYgd2Ugc2hvdWxkIHJlbG9hZCB0aGUgaWZyYW1lIG9yIGVudGlyZSB3aW5kb3cuIEZvciB0aGlzIHdlXG4gICAgICAgICAqIG5lZWQgdG8gc2tpcCBgQ01TLkFQSS5IZWxwZXJzLnJlbG9hZEJyb3dzZXIoKTtgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIF9yZWxvYWRIZWxwZXJcbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICovXG4gICAgICAgIF9yZWxvYWRIZWxwZXI6IGZ1bmN0aW9uIF9yZWxvYWRIZWxwZXIoKSB7XG4gICAgICAgICAgICBpZiAod2luZG93LnNlbGYgIT09IHdpbmRvdy50b3ApIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIENNUy5BUEkuSGVscGVycy5yZWxvYWRCcm93c2VyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIERpc3BsYXlzIGFuIGVycm9yIHdpdGhpbiB0aGUgZGphbmdvIFVJLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHNob3dFcnJvclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBzdHJpbmcgbWVzc2FnZSB0byBkaXNwbGF5XG4gICAgICAgICAqL1xuICAgICAgICBzaG93RXJyb3I6IGZ1bmN0aW9uIHNob3dFcnJvcihtZXNzYWdlKSB7XG4gICAgICAgICAgICB2YXIgbWVzc2FnZXMgPSAkKCcubWVzc2FnZWxpc3QnKTtcbiAgICAgICAgICAgIHZhciBicmVhZGNydW1iID0gJCgnLmJyZWFkY3J1bWJzJyk7XG4gICAgICAgICAgICB2YXIgcmVsb2FkID0gdGhpcy5vcHRpb25zLmxhbmcucmVsb2FkO1xuICAgICAgICAgICAgdmFyIHRwbCA9ICcnICtcbiAgICAgICAgICAgICAgICAnPHVsIGNsYXNzPVwibWVzc2FnZWxpc3RcIj4nICtcbiAgICAgICAgICAgICAgICAnICAgPGxpIGNsYXNzPVwiZXJyb3JcIj4nICtcbiAgICAgICAgICAgICAgICAnICAgICAgIHttc2d9ICcgK1xuICAgICAgICAgICAgICAgICcgICAgICAgPGEgaHJlZj1cIiNyZWxvYWRcIiBjbGFzcz1cImNtcy10cmVlLXJlbG9hZFwiPiAnICsgcmVsb2FkICsgJyA8L2E+JyArXG4gICAgICAgICAgICAgICAgJyAgIDwvbGk+JyArXG4gICAgICAgICAgICAgICAgJzwvdWw+JztcbiAgICAgICAgICAgIHZhciBtc2cgPSB0cGwucmVwbGFjZSgne21zZ30nLCAnPHN0cm9uZz4nICsgdGhpcy5vcHRpb25zLmxhbmcuZXJyb3IgKyAnPC9zdHJvbmc+ICcgKyBtZXNzYWdlKTtcblxuICAgICAgICAgICAgbWVzc2FnZXMubGVuZ3RoID8gbWVzc2FnZXMucmVwbGFjZVdpdGgobXNnKSA6IGJyZWFkY3J1bWIuYWZ0ZXIobXNnKTtcbiAgICAgICAgfVxuXG4gICAgfSk7XG5cbiAgICAvLyBzaG9ydGhhbmQgZm9yIGpRdWVyeShkb2N1bWVudCkucmVhZHkoKTtcbiAgICAkKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gbG9hZCBjbXMgc2V0dGluZ3MgYmVmb3JlaGFuZFxuICAgICAgICAvLyBoYXZlIHRvIHNldCB0b29sYmFyIHRvIFwiZXhwYW5kZWRcIiBieSBkZWZhdWx0XG4gICAgICAgIC8vIG90aGVyd2lzZSBpbml0aWFsaXphdGlvbiB3aWxsIGJlIGluY29ycmVjdCB3aGVuIHlvdVxuICAgICAgICAvLyBnbyBmaXJzdCB0byBwYWdlcyBhbmQgdGhlbiB0byBub3JtYWwgcGFnZVxuICAgICAgICBDTVMuY29uZmlnID0ge1xuICAgICAgICAgICAgc2V0dGluZ3M6IHtcbiAgICAgICAgICAgICAgICB0b29sYmFyOiAnZXhwYW5kZWQnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdXJsczoge1xuICAgICAgICAgICAgICAgIHNldHRpbmdzOiAkKCcuanMtY21zLXBhZ2V0cmVlJykuZGF0YSgnc2V0dGluZ3MtdXJsJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgQ01TLnNldHRpbmdzID0gQ01TLkFQSS5IZWxwZXJzLmdldFNldHRpbmdzKCk7XG4gICAgICAgIC8vIGF1dG9sb2FkIHRoZSBwYWdldHJlZVxuICAgICAgICBuZXcgQ01TLlBhZ2VUcmVlKCk7XG4gICAgfSk7XG5cbn0pKENNUy4kKTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== \ No newline at end of file diff --git a/cms/static/cms/sass/components/_pagetree.scss b/cms/static/cms/sass/components/_pagetree.scss index 51e3bf72a85..bc8c8fba811 100644 --- a/cms/static/cms/sass/components/_pagetree.scss +++ b/cms/static/cms/sass/components/_pagetree.scss @@ -71,6 +71,9 @@ background-color: $white; } } +.cms-admin-sideframe .cms-pagetree-header { + margin-top: -25px; +} .cms-pagetree-header-title { padding-top: 6px; diff --git a/cms/templates/admin/cms/page/tree/base.html b/cms/templates/admin/cms/page/tree/base.html index cb01a4a5e97..da264409429 100644 --- a/cms/templates/admin/cms/page/tree/base.html +++ b/cms/templates/admin/cms/page/tree/base.html @@ -141,7 +141,7 @@

{% trans "Main Navigation" %}

{# INFO: javascript is loaded from cms.pagetree.js #} {% if cl.get_items or cl.get_items and cl.is_filtered %}
-