diff --git a/app/my.js b/app/my.js index ab202117..15dc54b0 100644 --- a/app/my.js +++ b/app/my.js @@ -114,6 +114,25 @@ function selectorMatches(selector,labels){ } } +Date.prototype.Format = function(fmt) +{ //author: meizz + var o = { + "M+" : this.getMonth()+1, //月份 + "d+" : this.getDate(), //日 + "h+" : this.getHours(), //小时 + "m+" : this.getMinutes(), //分 + "s+" : this.getSeconds(), //秒 + "q+" : Math.floor((this.getMonth()+3)/3), //季度 + "S" : this.getMilliseconds() //毫秒 + }; + if(/(y+)/.test(fmt)) + fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length)); + for(var k in o) + if(new RegExp("("+ k +")").test(fmt)) + fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length))); + return fmt; +} + exports.randomString = randomString; exports.Recursion = Recursion; exports.compObj = compObj; diff --git a/app/readPlacedivision.js b/app/readPlacedivision.js new file mode 100644 index 00000000..35330a31 --- /dev/null +++ b/app/readPlacedivision.js @@ -0,0 +1,81 @@ +/* +read a object from jiangsu province , such as nanjing with some information +读取江苏的某个地区的信息,以及系统信息 + */ + +var system_arr = [{"sys_name":"部门预算","sys_id":239},{"sys_name":"非税收入收缴管理系统","sys_id":0},{"sys_name":"预算执行系统","sys_id":1},{"sys_name":"资产管理系统","sys_id":2},{"sys_name":"用友财政综合管理信息系统","sys_id":3},{"sys_name":"用友A++","sys_id":4},{"sys_name":"浦口财政一体化","sys_id":5},{"sys_name":"栖霞区财政业务信息管理系统","sys_id":6},{"sys_name":"一体化系统","sys_id":7},{"sys_name":"财政管理一体化系统","sys_id":8},{"sys_name":"滨江开发区财政分局","sys_id":9},{"sys_name":"江宁经济技术开发区财政分局","sys_id":10},{"sys_name":"江宁科学园财政分局","sys_id":11},{"sys_name":"财政一体化系统","sys_id":12},{"sys_name":"A++财政一体化平台","sys_id":13},{"sys_name":"非税系统","sys_id":14},{"sys_name":"一体化预算执行系统","sys_id":15},{"sys_name":"一体化","sys_id":16},{"sys_name":"国库集中支付管理信息系统","sys_id":17},{"sys_name":"国库集中支付","sys_id":18},{"sys_name":"财政专户核算及非税系统","sys_id":19},{"sys_name":"集中支付系统","sys_id":20},{"sys_name":"财政专户核算系统","sys_id":21},{"sys_name":"非税收缴系统","sys_id":22},{"sys_name":"财政一体化平台","sys_id":23},{"sys_name":"富深预算执行","sys_id":24},{"sys_name":"用友非税及票据","sys_id":25},{"sys_name":"用友预算执行","sys_id":26},{"sys_name":"江苏省财政预算执行系统","sys_id":27},{"sys_name":"用友通用软件","sys_id":28},{"sys_name":"联友软件/通用财务","sys_id":29},{"sys_name":"用友GRPG-U8R10财政管理软件","sys_id":30},{"sys_name":"用友GPP-R10财政管理软件","sys_id":31},{"sys_name":"富深协通财政一体化管理信息系统","sys_id":32},{"sys_name":"财务统一核算系统","sys_id":33},{"sys_name":"公共财政管理软件","sys_id":34},{"sys_name":"A++财政一体化信息平台","sys_id":35},{"sys_name":"新中大公共财务管理软件","sys_id":36},{"sys_name":"富深财政一体化管理系统","sys_id":37},{"sys_name":"新中大公共财政管理系统","sys_id":38},{"sys_name":"富深协通财政一体化业务管理系统软件","sys_id":39},{"sys_name":"新中大公共财政管理软件Gsoft","sys_id":40},{"sys_name":"财政一体化业务系统","sys_id":41},{"sys_name":"财政一体化软件","sys_id":42},{"sys_name":"非税收入系统","sys_id":43},{"sys_name":"总预算系统","sys_id":44},{"sys_name":"国库集中支付系统","sys_id":45},{"sys_name":"用款计划系统","sys_id":46},{"sys_name":"指标管理系统","sys_id":47},{"sys_name":"财政综合业务管理平台","sys_id":48},{"sys_name":"财政一体化管理信息系统","sys_id":49},{"sys_name":"工资统发","sys_id":50},{"sys_name":"国有资产","sys_id":51},{"sys_name":"乡镇非税收入","sys_id":52},{"sys_name":"乡镇集中支付","sys_id":53},{"sys_name":"非税征缴系统","sys_id":54},{"sys_name":"预算编制与执行系统","sys_id":55},{"sys_name":"预算管理综合业务平台","sys_id":56},{"sys_name":"u8管理软件","sys_id":57},{"sys_name":"财政指标管理系统","sys_id":58},{"sys_name":"用友GRP-R9财务管理软件","sys_id":59},{"sys_name":"用友GRP-U8财政管理软件","sys_id":60},{"sys_name":"账务处理系统","sys_id":61},{"sys_name":"R9i财政管理软件","sys_id":62},{"sys_name":"u8财政管理软件","sys_id":63},{"sys_name":"相城区财政综合管理信息系统","sys_id":64},{"sys_name":"财政非税综合管理系统","sys_id":65},{"sys_name":"财政综合管理平台","sys_id":66},{"sys_name":"吴江区财政一体化","sys_id":67},{"sys_name":"用友R9","sys_id":68},{"sys_name":"财政公共应用服务平台","sys_id":69},{"sys_name":"金蝶K/3创新管理平台","sys_id":70},{"sys_name":"账务数据系统","sys_id":71},{"sys_name":"公共财政服务平台","sys_id":72},{"sys_name":"会计核算系统","sys_id":73},{"sys_name":"项目库","sys_id":74},{"sys_name":"财政总预算(外)专户管理系统","sys_id":75},{"sys_name":"城建资金专户管理系统","sys_id":76},{"sys_name":"农保专户管理系统","sys_id":77},{"sys_name":"农业发展基金专户管理系统","sys_id":78},{"sys_name":"失地农民保障资金专户","sys_id":79},{"sys_name":"非税收入征管系统","sys_id":80},{"sys_name":"工资统发人员信息","sys_id":81},{"sys_name":"预算指标-国库集中支付系统","sys_id":82},{"sys_name":"总预算会计核算系统","sys_id":83},{"sys_name":"部门预算编审系统","sys_id":84},{"sys_name":"公务消费管理系统","sys_id":85},{"sys_name":"国有资产管理系统","sys_id":86},{"sys_name":"区镇财政管理“一体化”系统","sys_id":87},{"sys_name":"县本级财政管理“一体化”系统","sys_id":88},{"sys_name":"用友政务","sys_id":89},{"sys_name":"财政专户核算(行政口专项资金)","sys_id":90},{"sys_name":"财政专户核算(经建口专项资金)","sys_id":91},{"sys_name":"财政专户核算(农业保险专账)","sys_id":92},{"sys_name":"财政专户核算(农业综合开发专账)","sys_id":93},{"sys_name":"财政专户核算(社保资金专账)","sys_id":94},{"sys_name":"财政专户核算(土地出让专账)","sys_id":95},{"sys_name":"财政专户核算(综合口专项资金)","sys_id":96},{"sys_name":"非税收入管理系统","sys_id":97},{"sys_name":"农业专向及农业发展基金专项","sys_id":98},{"sys_name":"总预算会计核算","sys_id":99},{"sys_name":"金财工程一体化支撑平台","sys_id":100},{"sys_name":"非税收缴","sys_id":101},{"sys_name":"学校预算执行","sys_id":102},{"sys_name":"预算执行","sys_id":103},{"sys_name":"专项资金","sys_id":104},{"sys_name":"总预算","sys_id":105},{"sys_name":"部门预算系统","sys_id":106},{"sys_name":"财政专户核算","sys_id":107},{"sys_name":"财政专户账务系统","sys_id":108},{"sys_name":"富深财政一体化业务管理系统","sys_id":109},{"sys_name":"国有资产系统","sys_id":110},{"sys_name":"国库专项资金管理系统","sys_id":111},{"sys_name":"非税收缴管理系统","sys_id":112},{"sys_name":"财政管理系统(新农保)","sys_id":113},{"sys_name":"财政管理系统(城市居民医疗统筹)","sys_id":114},{"sys_name":"财政管理系统(集中支付中心)","sys_id":115},{"sys_name":"财政管理系统(解困金)","sys_id":116},{"sys_name":"财政管理系统(旧城改造)","sys_id":117},{"sys_name":"财政管理系统(社保资金账户)","sys_id":118},{"sys_name":"财政管理系统(土地出让专帐)","sys_id":119},{"sys_name":"财政管理系统(预拨及非集中支付中心)","sys_id":120},{"sys_name":"财政管理系统(预算外资金)","sys_id":121},{"sys_name":"总预算会计","sys_id":122},{"sys_name":"财务核算系统","sys_id":123},{"sys_name":"工资统发系统","sys_id":124},{"sys_name":"预算编审系统","sys_id":125},{"sys_name":"预算管理系统","sys_id":126},{"sys_name":"预算外资金(从联网审计中取数)","sys_id":127},{"sys_name":"G6-E财务管理系统","sys_id":128},{"sys_name":"新中大公共财政管理软件","sys_id":129},{"sys_name":"用友GRP/R9财政管理软件","sys_id":130},{"sys_name":"用友GRP-U8R10","sys_id":131},{"sys_name":"财政一体化管理系统(基建户)","sys_id":132},{"sys_name":"财政一体化管理系统(集中支付中心)","sys_id":133},{"sys_name":"财政一体化管理系统(农业综合开发)","sys_id":134},{"sys_name":"财政一体化管理系统(预算外资金)","sys_id":135},{"sys_name":"财政一体化管理系统(支农专户)","sys_id":136},{"sys_name":"财政一体化管理系统(总预算)","sys_id":137},{"sys_name":"国资管理系统","sys_id":138},{"sys_name":"乡财县管系统","sys_id":139},{"sys_name":"预算编制管理系统","sys_id":140},{"sys_name":"盐城市_市本级_部门预算","sys_id":141},{"sys_name":"盐城市_市本级_非税收管理系统","sys_id":142},{"sys_name":"盐城市_市本级_预算执行系统","sys_id":143},{"sys_name":"盐城市_亭湖区_财政专户","sys_id":144},{"sys_name":"盐城市_亭湖区_非税收入管理","sys_id":145},{"sys_name":"盐城市_亭湖区_国库集中支付管理","sys_id":146},{"sys_name":"盐城市_亭湖区_预算指标管理","sys_id":147},{"sys_name":"盐城市_亭湖区_总预算会计核算","sys_id":148},{"sys_name":"盐城市_盐都区_财政专户核算系统","sys_id":149},{"sys_name":"盐城市_盐都区_非税收入管理系统","sys_id":150},{"sys_name":"盐城市_盐都区_国库集中支付系统","sys_id":151},{"sys_name":"盐城市_盐都区_总预算会计核算系统","sys_id":152},{"sys_name":"盐城市_响水县_部门预算管理系统","sys_id":153},{"sys_name":"盐城市_响水县_财政一体化信息系统","sys_id":154},{"sys_name":"盐城市_响水县_非税收入收缴管理系统","sys_id":155},{"sys_name":"盐城市_滨海县财政一体化","sys_id":156},{"sys_name":"盐城市_阜宁县_财政管理软件","sys_id":157},{"sys_name":"盐城市_阜宁县_财政管理软件用友U8","sys_id":158},{"sys_name":"盐城市_射阳县_财政预算执行一体化系统","sys_id":159},{"sys_name":"盐城市_建湖县_非税收缴","sys_id":160},{"sys_name":"盐城市_建湖县_财政一体化","sys_id":161},{"sys_name":"盐城市_建湖县_国库集中支付","sys_id":162},{"sys_name":"盐城市_东台市_部门预算编审系统","sys_id":163},{"sys_name":"盐城市_东台市_财政一体化信息系统","sys_id":164},{"sys_name":"盐城市_东台市_财政专户核算系统","sys_id":165},{"sys_name":"盐城市_东台市_非税收入收缴管理系统","sys_id":166},{"sys_name":"盐城市_东台市_总预算会计核算系统","sys_id":167},{"sys_name":"盐城市_大丰区_部门预算系统","sys_id":168},{"sys_name":"盐城市_大丰区_财政一体化","sys_id":169},{"sys_name":"盐城市_大丰区_总预算会计核算财务软件","sys_id":170},{"sys_name":"盐城市_经济技术开发区_部门预算软件","sys_id":171},{"sys_name":"盐城市_经济技术开发区_国库集中支付","sys_id":172},{"sys_name":"老非税收入征缴系统","sys_id":173},{"sys_name":"扬州财政一体化信息管理系统","sys_id":174},{"sys_name":"非税收入征收","sys_id":175},{"sys_name":"部门预算编制","sys_id":176},{"sys_name":"非税收入收缴","sys_id":177},{"sys_name":"行政事业性单位国有资产管理","sys_id":178},{"sys_name":"财政业务系统","sys_id":179},{"sys_name":"财政业务综合系统","sys_id":180},{"sys_name":"江都开发区预算执行系统","sys_id":181},{"sys_name":"财政一体化","sys_id":182},{"sys_name":"富深协通财政一体化业务管理系统","sys_id":183},{"sys_name":"富深协通非税收缴系统","sys_id":184},{"sys_name":"富深协通工资统发系统","sys_id":185},{"sys_name":"非税收入","sys_id":186},{"sys_name":"财政综合业务系统","sys_id":187},{"sys_name":"泰州市_市本级_部门预算系统","sys_id":188},{"sys_name":"泰州市_市本级_非税收入系统","sys_id":189},{"sys_name":"泰州市_市本级_绩效管理系统","sys_id":190},{"sys_name":"泰州市_市本级_预算执行系统","sys_id":191},{"sys_name":"泰州市_市本级_综合治税系统","sys_id":192},{"sys_name":"泰州市_海陵区_部门预算编制系统","sys_id":193},{"sys_name":"泰州市_海陵区_县区财政一体化","sys_id":194},{"sys_name":"泰州市_高港区_预算执行系统","sys_id":195},{"sys_name":"泰州市_姜堰区_部门预算系统","sys_id":196},{"sys_name":"泰州市_姜堰区_财政一体化系统","sys_id":197},{"sys_name":"泰州市_姜堰区_非税收缴系统","sys_id":198},{"sys_name":"泰州市_姜堰区_预算执行系统","sys_id":199},{"sys_name":"泰州市_医药高新区_财政一体化系统","sys_id":200},{"sys_name":"泰州市_兴化市_部门预算","sys_id":201},{"sys_name":"泰州市_兴化市_非税收缴","sys_id":202},{"sys_name":"泰州市_兴化市_国库集中支付","sys_id":203},{"sys_name":"泰州市_靖江市_预算执行系统","sys_id":204},{"sys_name":"泰州市_靖江市_非税收入收缴","sys_id":205},{"sys_name":"泰州市_靖江市_部门预算编审系统","sys_id":206},{"sys_name":"泰州市_泰兴市_部门预算系统","sys_id":207},{"sys_name":"泰州市_泰兴市_非税收入管理系统","sys_id":208},{"sys_name":"泰州市_泰兴市_预算执行系统","sys_id":209},{"sys_name":"部门预算管理系统","sys_id":210},{"sys_name":"财政一体化平台及国库集中支付系统","sys_id":211},{"sys_name":"新中大非税收入管理","sys_id":212},{"sys_name":"联友财务管理系统","sys_id":213},{"sys_name":"国库集中支付、指标管理系统","sys_id":214},{"sys_name":"开发区总预算系统","sys_id":215},{"sys_name":"国库账务系统","sys_id":216},{"sys_name":"化学工业园区非税收入管理系统","sys_id":217},{"sys_name":"非税收入账套","sys_id":218},{"sys_name":"化学工业园区预算执行系统","sys_id":219},{"sys_name":"会计核算","sys_id":220},{"sys_name":"总预算会计账","sys_id":221},{"sys_name":"预算内外收支核算系统","sys_id":222},{"sys_name":"账户核算系统","sys_id":223},{"sys_name":"总预算核算系统","sys_id":224},{"sys_name":"账务处理系统(收支分类改革升级版)","sys_id":225},{"sys_name":"财政预算外业务","sys_id":226},{"sys_name":"用友U8R10财政一体化平台","sys_id":227},{"sys_name":"开发区财政系统","sys_id":228},{"sys_name":"高新区总预算系统","sys_id":229},{"sys_name":"开发区公共财政服务平台","sys_id":230},{"sys_name":"用友GRP-U8管理软件","sys_id":231},{"sys_name":"盐城市_城南新区_国库集中支付系统","sys_id":232},{"sys_name":"盐城市_城南新区_总预算账务处理系统","sys_id":233},{"sys_name":"财政预算指标管理","sys_id":234},{"sys_name":"泰州市_市本级_行政管理系统","sys_id":235},{"sys_name":"新中大财务软件","sys_id":236},{"sys_name":"开发区新中大财务核算系统","sys_id":237},{"sys_name":"开发区账务系统","sys_id":238}] +var origin_place_arr = [{"city_code":"3201","city":"南京市","county":"市本级","county_code":"320100","sys_name":"部门预算","sys_code":"BMYS"},{"city_code":"3201","city":"南京市","county":"市本级","county_code":"320100","sys_name":"非税收入收缴管理系统","sys_code":"FSSR"},{"city_code":"3201","city":"南京市","county":"市本级","county_code":"320100","sys_name":"预算执行系统","sys_code":"YSZX"},{"city_code":"3201","city":"南京市","county":"市本级","county_code":"320100","sys_name":"资产管理系统","sys_code":"ZCGL"},{"city_code":"3201","city":"南京市","county":"玄武区","county_code":"320102","sys_name":"预算执行系统","sys_code":"YSZX"},{"city_code":"3201","city":"南京市","county":"秦淮区","county_code":"320104","sys_name":"用友财政综合管理信息系统","sys_code":"YTH"},{"city_code":"3201","city":"南京市","county":"建邺区","county_code":"320105","sys_name":"预算执行系统","sys_code":"YSZX"},{"city_code":"3201","city":"南京市","county":"鼓楼区","county_code":"320106","sys_name":"用友A++","sys_code":"YTH"},{"city_code":"3201","city":"南京市","county":"浦口区","county_code":"320111","sys_name":"浦口财政一体化","sys_code":"YTH"},{"city_code":"3201","city":"南京市","county":"栖霞区","county_code":"320113","sys_name":"栖霞区财政业务信息管理系统","sys_code":"YTH"},{"city_code":"3201","city":"南京市","county":"雨花台区","county_code":"320114","sys_name":"一体化系统","sys_code":"YTH"},{"city_code":"3201","city":"南京市","county":"江宁区","county_code":"320115","sys_name":"财政管理一体化系统","sys_code":"YTH"},{"city_code":"3201","city":"南京市","county":"江宁区","county_code":"320115","sys_name":"滨江开发区财政分局","sys_code":"YTH"},{"city_code":"3201","city":"南京市","county":"江宁区","county_code":"320115","sys_name":"江宁经济技术开发区财政分局","sys_code":"YTH"},{"city_code":"3201","city":"南京市","county":"江宁区","county_code":"320115","sys_name":"江宁科学园财政分局","sys_code":"YTH"},{"city_code":"3201","city":"南京市","county":"六合区","county_code":"320116","sys_name":"一体化系统","sys_code":"YTH"},{"city_code":"3201","city":"南京市","county":"高淳区","county_code":"320118","sys_name":"财政一体化系统","sys_code":"YTH"},{"city_code":"3201","city":"南京市","county":"溧水区","county_code":"320124","sys_name":"A++财政一体化平台","sys_code":"YTH"},{"city_code":"3202","city":"无锡市","county":"市本级","county_code":"320200","sys_name":"财政一体化系统","sys_code":"YTH"},{"city_code":"3202","city":"无锡市","county":"市本级","county_code":"320200","sys_name":"非税收入收缴管理系统","sys_code":"FSSR"},{"city_code":"3202","city":"无锡市","county":"崇安区","county_code":"320202","sys_name":"非税系统","sys_code":"FSSR"},{"city_code":"3202","city":"无锡市","county":"崇安区","county_code":"320202","sys_name":"一体化预算执行系统","sys_code":"YTH"},{"city_code":"3202","city":"无锡市","county":"南长区","county_code":"320203","sys_name":"非税系统","sys_code":"FSSR"},{"city_code":"3202","city":"无锡市","county":"南长区","county_code":"320203","sys_name":"一体化","sys_code":"YTH"},{"city_code":"3202","city":"无锡市","county":"北塘区","county_code":"320204","sys_name":"国库集中支付管理信息系统","sys_code":"GKZF"},{"city_code":"3202","city":"无锡市","county":"锡山区","county_code":"320205","sys_name":"国库集中支付","sys_code":"GKZF"},{"city_code":"3202","city":"无锡市","county":"锡山区","county_code":"320205","sys_name":"财政专户核算及非税系统","sys_code":"ZHHS_FSSR"},{"city_code":"3202","city":"无锡市","county":"惠山区","county_code":"320206","sys_name":"财政一体化系统","sys_code":"YTH"},{"city_code":"3202","city":"无锡市","county":"滨湖区","county_code":"320211","sys_name":"集中支付系统","sys_code":"GKZF"},{"city_code":"3202","city":"无锡市","county":"滨湖区","county_code":"320211","sys_name":"非税系统","sys_code":"FSSR"},{"city_code":"3202","city":"无锡市","county":"滨湖区","county_code":"320211","sys_name":"财政专户核算系统","sys_code":"ZHHS"},{"city_code":"3202","city":"无锡市","county":"新区","county_code":"320214","sys_name":"预算执行系统","sys_code":"YSZX"},{"city_code":"3202","city":"无锡市","county":"新区","county_code":"320214","sys_name":"非税收缴系统","sys_code":"FSSR"},{"city_code":"3202","city":"无锡市","county":"新区","county_code":"320214","sys_name":"财政专户核算系统","sys_code":"ZHHS"},{"city_code":"3202","city":"无锡市","county":"江阴市","county_code":"320281","sys_name":"财政一体化平台","sys_code":"YTH"},{"city_code":"3202","city":"无锡市","county":"宜兴市","county_code":"320282","sys_name":"非税收缴系统","sys_code":"FSSR"},{"city_code":"3202","city":"无锡市","county":"宜兴市","county_code":"320282","sys_name":"财政一体化平台","sys_code":"YTH"},{"city_code":"3203","city":"徐州市","county":"市本级","county_code":"320300","sys_name":"富深预算执行","sys_code":"YSZX"},{"city_code":"3203","city":"徐州市","county":"市本级","county_code":"320300","sys_name":"用友非税及票据","sys_code":"FSSR"},{"city_code":"3203","city":"徐州市","county":"市本级","county_code":"320300","sys_name":"用友预算执行","sys_code":"YSZX"},{"city_code":"3203","city":"徐州市","county":"鼓楼区","county_code":"320302","sys_name":"江苏省财政预算执行系统","sys_code":"YSZX"},{"city_code":"3203","city":"徐州市","county":"鼓楼区","county_code":"320302","sys_name":"用友通用软件","sys_code":"KJHS"},{"city_code":"3203","city":"徐州市","county":"云龙区","county_code":"320303","sys_name":"江苏省财政预算执行系统","sys_code":"YSZX"},{"city_code":"3203","city":"徐州市","county":"云龙区","county_code":"320303","sys_name":"联友软件/通用财务","sys_code":"KJHS"},{"city_code":"3203","city":"徐州市","county":"云龙区","county_code":"320303","sys_name":"用友GRPG-U8R10财政管理软件","sys_code":"YSZX"},{"city_code":"3203","city":"徐州市","county":"贾汪区","county_code":"320305","sys_name":"用友GPP-R10财政管理软件","sys_code":"KJHS"},{"city_code":"3203","city":"徐州市","county":"泉山区","county_code":"320311","sys_name":"富深协通财政一体化管理信息系统","sys_code":"YTH"},{"city_code":"3203","city":"徐州市","county":"铜山区","county_code":"320312","sys_name":"财务统一核算系统","sys_code":"KJHS"},{"city_code":"3203","city":"徐州市","county":"铜山区","county_code":"320312","sys_name":"非税收入收缴管理系统","sys_code":"FSSR"},{"city_code":"3203","city":"徐州市","county":"铜山区","county_code":"320312","sys_name":"公共财政管理软件","sys_code":"YSZX"},{"city_code":"3203","city":"徐州市","county":"丰县","county_code":"320321","sys_name":"A++财政一体化信息平台","sys_code":"YTH"},{"city_code":"3203","city":"徐州市","county":"丰县","county_code":"320321","sys_name":"新中大公共财务管理软件","sys_code":"KJHS"},{"city_code":"3203","city":"徐州市","county":"沛县","county_code":"320322","sys_name":"富深财政一体化管理系统","sys_code":"YTH"},{"city_code":"3203","city":"徐州市","county":"沛县","county_code":"320322","sys_name":"新中大公共财政管理系统","sys_code":"KJHS"},{"city_code":"3203","city":"徐州市","county":"睢宁县","county_code":"320324","sys_name":"富深协通财政一体化业务管理系统软件","sys_code":"YTH"},{"city_code":"3203","city":"徐州市","county":"睢宁县","county_code":"320324","sys_name":"新中大公共财政管理软件Gsoft","sys_code":"KJHS"},{"city_code":"3203","city":"徐州市","county":"新沂市","county_code":"320381","sys_name":"江苏省财政预算执行系统","sys_code":"YSZX"},{"city_code":"3203","city":"徐州市","county":"邳州","county_code":"320382","sys_name":"财政一体化系统","sys_code":"YTH"},{"city_code":"3204","city":"常州市","county":"本级","county_code":"320400","sys_name":"财政一体化业务系统","sys_code":"YTH"},{"city_code":"3204","city":"常州市","county":"天宁区","county_code":"320402","sys_name":"财政一体化软件","sys_code":"YTH"},{"city_code":"3204","city":"常州市","county":"天宁区","county_code":"320402","sys_name":"非税收入系统","sys_code":"FSSR"},{"city_code":"3204","city":"常州市","county":"天宁区","county_code":"320402","sys_name":"总预算系统","sys_code":"YSZX"},{"city_code":"3204","city":"常州市","county":"钟楼区","county_code":"320404","sys_name":"非税收入系统","sys_code":"FSSR"},{"city_code":"3204","city":"常州市","county":"钟楼区","county_code":"320404","sys_name":"国库集中支付系统","sys_code":"GKZF"},{"city_code":"3204","city":"常州市","county":"钟楼区","county_code":"320404","sys_name":"用款计划系统","sys_code":"JHGL"},{"city_code":"3204","city":"常州市","county":"钟楼区","county_code":"320404","sys_name":"指标管理系统","sys_code":"ZBGL"},{"city_code":"3204","city":"常州市","county":"钟楼区","county_code":"320404","sys_name":"总预算系统","sys_code":"ZYS"},{"city_code":"3204","city":"常州市","county":"新北区","county_code":"320411","sys_name":"财政综合业务管理平台","sys_code":"YTH"},{"city_code":"3204","city":"常州市","county":"武进区","county_code":"320412","sys_name":"财政一体化管理信息系统","sys_code":"YTH"},{"city_code":"3204","city":"常州市","county":"溧阳市","county_code":"320481","sys_name":"部门预算","sys_code":"BMYS"},{"city_code":"3204","city":"常州市","county":"溧阳市","county_code":"320481","sys_name":"工资统发","sys_code":"GZTF"},{"city_code":"3204","city":"常州市","county":"溧阳市","county_code":"320481","sys_name":"国有资产","sys_code":"ZCGL"},{"city_code":"3204","city":"常州市","county":"溧阳市","county_code":"320481","sys_name":"乡镇非税收入","sys_code":"XZFS"},{"city_code":"3204","city":"常州市","county":"溧阳市","county_code":"320481","sys_name":"乡镇集中支付","sys_code":"XZGK"},{"city_code":"3204","city":"常州市","county":"金坛区","county_code":"320482","sys_name":"预算执行系统","sys_code":"YSZX"},{"city_code":"3205","city":"苏州市","county":"市本级","county_code":"320500","sys_name":"非税征缴系统","sys_code":"FSSR"},{"city_code":"3205","city":"苏州市","county":"市本级","county_code":"320500","sys_name":"预算编制与执行系统","sys_code":"YSZX"},{"city_code":"3205","city":"苏州市","county":"工业园区","county_code":"320501","sys_name":"预算管理综合业务平台","sys_code":"YSGL"},{"city_code":"3205","city":"苏州市","county":"虎丘区","county_code":"320505","sys_name":"u8管理软件","sys_code":"CZGL"},{"city_code":"3205","city":"苏州市","county":"虎丘区","county_code":"320505","sys_name":"财政指标管理系统","sys_code":"ZBGL"},{"city_code":"3205","city":"苏州市","county":"虎丘区","county_code":"320505","sys_name":"国库集中支付系统","sys_code":"GKZF"},{"city_code":"3205","city":"苏州市","county":"虎丘区","county_code":"320505","sys_name":"用友GRP-R9财务管理软件","sys_code":"CWGL"},{"city_code":"3205","city":"苏州市","county":"虎丘区","county_code":"320505","sys_name":"用友GRP-U8财政管理软件","sys_code":"CWGL"},{"city_code":"3205","city":"苏州市","county":"虎丘区","county_code":"320505","sys_name":"账务处理系统","sys_code":"ZWCL"},{"city_code":"3205","city":"苏州市","county":"吴中区","county_code":"320506","sys_name":"R9i财政管理软件","sys_code":"CZGL"},{"city_code":"3205","city":"苏州市","county":"吴中区","county_code":"320506","sys_name":"部门预算","sys_code":"BMYS"},{"city_code":"3205","city":"苏州市","county":"吴中区","county_code":"320506","sys_name":"财政一体化平台","sys_code":"YTH"},{"city_code":"3205","city":"苏州市","county":"吴中区","county_code":"320506","sys_name":"非税系统","sys_code":"FSSR"},{"city_code":"3205","city":"苏州市","county":"相城区","county_code":"320507","sys_name":"u8财政管理软件","sys_code":"CZGL"},{"city_code":"3205","city":"苏州市","county":"相城区","county_code":"320507","sys_name":"相城区财政综合管理信息系统","sys_code":"YTH"},{"city_code":"3205","city":"苏州市","county":"姑苏区","county_code":"320508","sys_name":"财政非税综合管理系统","sys_code":"FSSR"},{"city_code":"3205","city":"苏州市","county":"姑苏区","county_code":"320508","sys_name":"财政综合管理平台","sys_code":"YTH"},{"city_code":"3205","city":"苏州市","county":"吴江区","county_code":"320509","sys_name":"吴江区财政一体化","sys_code":"YTH"},{"city_code":"3205","city":"苏州市","county":"常熟市","county_code":"320581","sys_name":"非税收入收缴管理系统","sys_code":"FSSR"},{"city_code":"3205","city":"苏州市","county":"常熟市","county_code":"320581","sys_name":"用友R9","sys_code":"KJHS"},{"city_code":"3205","city":"苏州市","county":"常熟市","county_code":"320581","sys_name":"预算执行系统","sys_code":"YSZX"},{"city_code":"3205","city":"苏州市","county":"张家港市","county_code":"320582","sys_name":"财政公共应用服务平台","sys_code":"GGFW"},{"city_code":"3205","city":"苏州市","county":"张家港市","county_code":"320582","sys_name":"金蝶K/3创新管理平台","sys_code":"CZGL"},{"city_code":"3205","city":"苏州市","county":"张家港市","county_code":"320582","sys_name":"账务数据系统","sys_code":"KJHS"},{"city_code":"3205","city":"苏州市","county":"昆山市","county_code":"320583","sys_name":"非税收入收缴管理系统","sys_code":"FSSR"},{"city_code":"3205","city":"苏州市","county":"昆山市","county_code":"320583","sys_name":"公共财政服务平台","sys_code":"GGFW"},{"city_code":"3205","city":"苏州市","county":"昆山市","county_code":"320583","sys_name":"国库集中支付系统","sys_code":"GKZF"},{"city_code":"3205","city":"苏州市","county":"太仓市","county_code":"320585","sys_name":"非税收入系统","sys_code":"FSSR"},{"city_code":"3205","city":"苏州市","county":"太仓市","county_code":"320585","sys_name":"会计核算系统","sys_code":"KJHS"},{"city_code":"3205","city":"苏州市","county":"太仓市","county_code":"320585","sys_name":"项目库","sys_code":"XMK"},{"city_code":"3205","city":"苏州市","county":"太仓市","county_code":"320585","sys_name":"预算执行系统","sys_code":"YSZX"},{"city_code":"3206","city":"南通市","county":"本级","county_code":"320600","sys_name":"预算执行系统","sys_code":"YSZX"},{"city_code":"3206","city":"南通市","county":"崇川区","county_code":"320602","sys_name":"预算执行系统","sys_code":"YSZX"},{"city_code":"3206","city":"南通市","county":"港闸区","county_code":"320611","sys_name":"财政总预算(外)专户管理系统","sys_code":"YSWZH"},{"city_code":"3206","city":"南通市","county":"港闸区","county_code":"320611","sys_name":"城建资金专户管理系统","sys_code":"CJZH"},{"city_code":"3206","city":"南通市","county":"港闸区","county_code":"320611","sys_name":"农保专户管理系统","sys_code":"NBZH"},{"city_code":"3206","city":"南通市","county":"港闸区","county_code":"320611","sys_name":"农业发展基金专户管理系统","sys_code":"NFJJ"},{"city_code":"3206","city":"南通市","county":"港闸区","county_code":"320611","sys_name":"失地农民保障资金专户","sys_code":"SDNM"},{"city_code":"3206","city":"南通市","county":"港闸区","county_code":"320611","sys_name":"预算执行系统","sys_code":"YSZX"},{"city_code":"3206","city":"南通市","county":"通州区","county_code":"320612","sys_name":"非税收入征管系统","sys_code":"FSSR"},{"city_code":"3206","city":"南通市","county":"通州区","county_code":"320612","sys_name":"工资统发人员信息","sys_code":"GZTF"},{"city_code":"3206","city":"南通市","county":"通州区","county_code":"320612","sys_name":"预算指标-国库集中支付系统","sys_code":"YSZX"},{"city_code":"3206","city":"南通市","county":"通州区","county_code":"320612","sys_name":"总预算会计核算系统","sys_code":"KJHS"},{"city_code":"3206","city":"南通市","county":"海安县","county_code":"320621","sys_name":"部门预算编审系统","sys_code":"BMYS"},{"city_code":"3206","city":"南通市","county":"海安县","county_code":"320621","sys_name":"公务消费管理系统","sys_code":"GWXF"},{"city_code":"3206","city":"南通市","county":"海安县","county_code":"320621","sys_name":"国有资产管理系统","sys_code":"ZCGL"},{"city_code":"3206","city":"南通市","county":"海安县","county_code":"320621","sys_name":"区镇财政管理“一体化”系统","sys_code":"XZYTH"},{"city_code":"3206","city":"南通市","county":"海安县","county_code":"320621","sys_name":"县本级财政管理“一体化”系统","sys_code":"YTH"},{"city_code":"3206","city":"南通市","county":"如东县","county_code":"320623","sys_name":"用友政务","sys_code":"YTH"},{"city_code":"3206","city":"南通市","county":"启东市","county_code":"320681","sys_name":"财政专户核算(行政口专项资金)","sys_code":"ZHXZ"},{"city_code":"3206","city":"南通市","county":"启东市","county_code":"320681","sys_name":"财政专户核算(经建口专项资金)","sys_code":"ZHJJ"},{"city_code":"3206","city":"南通市","county":"启东市","county_code":"320681","sys_name":"财政专户核算(农业保险专账)","sys_code":"ZHNB"},{"city_code":"3206","city":"南通市","county":"启东市","county_code":"320681","sys_name":"财政专户核算(农业综合开发专账)","sys_code":"ZHNF"},{"city_code":"3206","city":"南通市","county":"启东市","county_code":"320681","sys_name":"财政专户核算(社保资金专账)","sys_code":"ZHSB"},{"city_code":"3206","city":"南通市","county":"启东市","county_code":"320681","sys_name":"财政专户核算(土地出让专账)","sys_code":"ZHTD"},{"city_code":"3206","city":"南通市","county":"启东市","county_code":"320681","sys_name":"财政专户核算(综合口专项资金)","sys_code":"ZHZH"},{"city_code":"3206","city":"南通市","county":"启东市","county_code":"320681","sys_name":"非税收入管理系统","sys_code":"FSSR"},{"city_code":"3206","city":"南通市","county":"启东市","county_code":"320681","sys_name":"农业专向及农业发展基金专项","sys_code":"NFZX"},{"city_code":"3206","city":"南通市","county":"启东市","county_code":"320681","sys_name":"预算执行系统","sys_code":"YSZX"},{"city_code":"3206","city":"南通市","county":"启东市","county_code":"320681","sys_name":"总预算会计核算","sys_code":"KJHS"},{"city_code":"3206","city":"南通市","county":"如皋市","county_code":"320682","sys_name":"金财工程一体化支撑平台","sys_code":"YTH"},{"city_code":"3206","city":"南通市","county":"海门市","county_code":"320684","sys_name":"非税收缴","sys_code":"FSSR"},{"city_code":"3206","city":"南通市","county":"海门市","county_code":"320684","sys_name":"学校预算执行","sys_code":"YSZXXX"},{"city_code":"3206","city":"南通市","county":"海门市","county_code":"320684","sys_name":"预算执行","sys_code":"YSZX"},{"city_code":"3206","city":"南通市","county":"海门市","county_code":"320684","sys_name":"预算执行系统","sys_code":"YSZX"},{"city_code":"3206","city":"南通市","county":"海门市","county_code":"320684","sys_name":"专项资金","sys_code":"ZXZJ"},{"city_code":"3206","city":"南通市","county":"海门市","county_code":"320684","sys_name":"总预算","sys_code":"ZYS"},{"city_code":"3207","city":"连云港市","county":"市本级","county_code":"320700","sys_name":"部门预算系统","sys_code":"BMYS"},{"city_code":"3207","city":"连云港市","county":"市本级","county_code":"320700","sys_name":"财政专户核算","sys_code":"ZHHS"},{"city_code":"3207","city":"连云港市","county":"市本级","county_code":"320700","sys_name":"非税收入系统","sys_code":"FSSR"},{"city_code":"3207","city":"连云港市","county":"市本级","county_code":"320700","sys_name":"预算执行系统","sys_code":"YSZX"},{"city_code":"3207","city":"连云港市","county":"连云区","county_code":"320703","sys_name":"财政专户账务系统","sys_code":"ZHHS"},{"city_code":"3207","city":"连云港市","county":"连云区","county_code":"320703","sys_name":"富深财政一体化管理系统","sys_code":"YTH"},{"city_code":"3207","city":"连云港市","county":"海州区","county_code":"320706","sys_name":"富深财政一体化业务管理系统","sys_code":""},{"city_code":"3207","city":"连云港市","county":"海州区","county_code":"320706","sys_name":"新中大公共财政管理系统","sys_code":""},{"city_code":"3207","city":"连云港市","county":"赣榆区","county_code":"320721","sys_name":"财政一体化平台","sys_code":"YTH"},{"city_code":"3207","city":"连云港市","county":"赣榆区","county_code":"320721","sys_name":"国有资产系统","sys_code":"CZGL"},{"city_code":"3207","city":"连云港市","county":"东海县","county_code":"320722","sys_name":"部门预算系统","sys_code":"BMYS"},{"city_code":"3207","city":"连云港市","county":"东海县","county_code":"320722","sys_name":"国库专项资金管理系统","sys_code":"ZXZJ"},{"city_code":"3207","city":"连云港市","county":"东海县","county_code":"320722","sys_name":"国有资产管理系统","sys_code":"ZCGL"},{"city_code":"3207","city":"连云港市","county":"东海县","county_code":"320722","sys_name":"预算执行系统","sys_code":"YSZX"},{"city_code":"3207","city":"连云港市","county":"灌云县","county_code":"320723","sys_name":"财政一体化平台","sys_code":"YTH"},{"city_code":"3207","city":"连云港市","county":"灌南县","county_code":"320724","sys_name":"非税系统","sys_code":"FSSR"},{"city_code":"3207","city":"连云港市","county":"灌南县","county_code":"320724","sys_name":"预算执行系统","sys_code":"YSZX"},{"city_code":"3208","city":"淮安市","county":"市本级","county_code":"320800","sys_name":"非税收缴管理系统","sys_code":"FSSR"},{"city_code":"3208","city":"淮安市","county":"市本级","county_code":"320800","sys_name":"预算执行系统","sys_code":"YSZX"},{"city_code":"3208","city":"淮安市","county":"清河区","county_code":"320802","sys_name":"财政管理系统(新农保)","sys_code":"ZHNB"},{"city_code":"3208","city":"淮安市","county":"清河区","county_code":"320802","sys_name":"财政管理系统(城市居民医疗统筹)","sys_code":"ZHYB"},{"city_code":"3208","city":"淮安市","county":"清河区","county_code":"320802","sys_name":"财政管理系统(集中支付中心)","sys_code":"GKZF"},{"city_code":"3208","city":"淮安市","county":"清河区","county_code":"320802","sys_name":"财政管理系统(解困金)","sys_code":"ZHJK"},{"city_code":"3208","city":"淮安市","county":"清河区","county_code":"320802","sys_name":"财政管理系统(旧城改造)","sys_code":"ZHCG"},{"city_code":"3208","city":"淮安市","county":"清河区","county_code":"320802","sys_name":"财政管理系统(社保资金账户)","sys_code":"ZHSB"},{"city_code":"3208","city":"淮安市","county":"清河区","county_code":"320802","sys_name":"财政管理系统(土地出让专帐)","sys_code":"ZHTD"},{"city_code":"3208","city":"淮安市","county":"清河区","county_code":"320802","sys_name":"财政管理系统(预拨及非集中支付中心)","sys_code":"ZHYB"},{"city_code":"3208","city":"淮安市","county":"清河区","county_code":"320802","sys_name":"财政管理系统(预算外资金)","sys_code":"YSW"},{"city_code":"3208","city":"淮安市","county":"清河区","county_code":"320802","sys_name":"总预算会计","sys_code":"KJHS"},{"city_code":"3208","city":"淮安市","county":"淮安区","county_code":"320803","sys_name":"财务核算系统","sys_code":"KJHS"},{"city_code":"3208","city":"淮安市","county":"淮安区","county_code":"320803","sys_name":"非税收入管理系统","sys_code":"FSSR"},{"city_code":"3208","city":"淮安市","county":"淮安区","county_code":"320803","sys_name":"工资统发系统","sys_code":"GZTF"},{"city_code":"3208","city":"淮安市","county":"淮安区","county_code":"320803","sys_name":"用友政务","sys_code":"YYZW"},{"city_code":"3208","city":"淮安市","county":"淮安区","county_code":"320803","sys_name":"预算编审系统","sys_code":"BMYS"},{"city_code":"3208","city":"淮安市","county":"淮安区","county_code":"320803","sys_name":"预算管理系统","sys_code":"YSGL"},{"city_code":"3208","city":"淮安市","county":"淮安区","county_code":"320803","sys_name":"预算外资金(从联网审计中取数)","sys_code":"YSW"},{"city_code":"3208","city":"淮安市","county":"淮安区","county_code":"320803","sys_name":"预算编审系统","sys_code":"YSBS"},{"city_code":"3208","city":"淮安市","county":"淮阴区","county_code":"320804","sys_name":"G6-E财务管理系统","sys_code":"CWGL"},{"city_code":"3208","city":"淮安市","county":"淮阴区","county_code":"320804","sys_name":"江苏省财政预算执行系统","sys_code":"YSZX"},{"city_code":"3208","city":"淮安市","county":"淮阴区","county_code":"320804","sys_name":"新中大公共财政管理软件","sys_code":"CZGL"},{"city_code":"3208","city":"淮安市","county":"淮阴区","county_code":"320804","sys_name":"用友GRP/R9财政管理软件","sys_code":"CZGL"},{"city_code":"3208","city":"淮安市","county":"淮阴区","county_code":"320804","sys_name":"用友GRP-U8R10","sys_code":"CWGL"},{"city_code":"3208","city":"淮安市","county":"淮安区","county_code":"320803","sys_name":"预算编审系统","sys_code":"YSBS"},{"city_code":"3208","city":"淮安市","county":"清浦区","county_code":"320811","sys_name":"财政一体化管理系统(基建户)","sys_code":"ZHJJ"},{"city_code":"3208","city":"淮安市","county":"清浦区","county_code":"320811","sys_name":"财政一体化管理系统(集中支付中心)","sys_code":"GKZF"},{"city_code":"3208","city":"淮安市","county":"清浦区","county_code":"320811","sys_name":"财政一体化管理系统(农业综合开发)","sys_code":"ZHNF"},{"city_code":"3208","city":"淮安市","county":"清浦区","county_code":"320811","sys_name":"财政一体化管理系统(预算外资金)","sys_code":"YSW"},{"city_code":"3208","city":"淮安市","county":"清浦区","county_code":"320811","sys_name":"财政一体化管理系统(支农专户)","sys_code":"ZHZN"},{"city_code":"3208","city":"淮安市","county":"清浦区","county_code":"320811","sys_name":"财政一体化管理系统(总预算)","sys_code":"KJHS"},{"city_code":"3208","city":"淮安市","county":"涟水县","county_code":"320826","sys_name":"非税征缴系统","sys_code":"FSSR"},{"city_code":"3208","city":"淮安市","county":"涟水县","county_code":"320826","sys_name":"国资管理系统","sys_code":"ZCGL"},{"city_code":"3208","city":"淮安市","county":"涟水县","county_code":"320826","sys_name":"乡财县管系统","sys_code":"XCXG"},{"city_code":"3208","city":"淮安市","county":"涟水县","county_code":"320826","sys_name":"乡财县管系统","sys_code":"XCXG"},{"city_code":"3208","city":"淮安市","county":"涟水县","county_code":"320826","sys_name":"预算编制管理系统","sys_code":"YSBS"},{"city_code":"3208","city":"淮安市","county":"涟水县","county_code":"320826","sys_name":"预算执行系统","sys_code":"YSZX"},{"city_code":"3208","city":"淮安市","county":"洪泽县","county_code":"320829","sys_name":"非税收入管理系统","sys_code":"FSSR"},{"city_code":"3208","city":"淮安市","county":"洪泽县","county_code":"320829","sys_name":"预算执行系统","sys_code":"YSZX"},{"city_code":"3208","city":"淮安市","county":"盱眙县","county_code":"320830","sys_name":"财政一体化平台","sys_code":"YTH"},{"city_code":"3208","city":"淮安市","county":"金湖县","county_code":"320831","sys_name":"预算执行系统","sys_code":"YSZX"},{"city_code":"3209","city":"盐城市","county":"市本级","county_code":"320900","sys_name":"盐城市_市本级_部门预算","sys_code":"BMYS"},{"city_code":"3209","city":"盐城市","county":"市本级","county_code":"320900","sys_name":"盐城市_市本级_非税收管理系统","sys_code":"FSSR"},{"city_code":"3209","city":"盐城市","county":"市本级","county_code":"320900","sys_name":"盐城市_市本级_预算执行系统","sys_code":"YSZX"},{"city_code":"3209","city":"盐城市","county":"亭湖区","county_code":"320902","sys_name":"盐城市_亭湖区_财政专户","sys_code":"ZHHS"},{"city_code":"3209","city":"盐城市","county":"亭湖区","county_code":"320902","sys_name":"盐城市_亭湖区_非税收入管理","sys_code":"FSSR"},{"city_code":"3209","city":"盐城市","county":"亭湖区","county_code":"320902","sys_name":"盐城市_亭湖区_国库集中支付管理","sys_code":"GKZF"},{"city_code":"3209","city":"盐城市","county":"亭湖区","county_code":"320902","sys_name":"盐城市_亭湖区_预算指标管理","sys_code":"ZBGL"},{"city_code":"3209","city":"盐城市","county":"亭湖区","county_code":"320902","sys_name":"盐城市_亭湖区_总预算会计核算","sys_code":"KJHS"},{"city_code":"3209","city":"盐城市","county":"盐都区","county_code":"320903","sys_name":"盐城市_盐都区_财政专户核算系统","sys_code":"ZHHS"},{"city_code":"3209","city":"盐城市","county":"盐都区","county_code":"320903","sys_name":"盐城市_盐都区_非税收入管理系统","sys_code":"FSSR"},{"city_code":"3209","city":"盐城市","county":"盐都区","county_code":"320903","sys_name":"盐城市_盐都区_国库集中支付系统","sys_code":"GKZF"},{"city_code":"3209","city":"盐城市","county":"盐都区","county_code":"320903","sys_name":"盐城市_盐都区_总预算会计核算系统","sys_code":"KJHS"},{"city_code":"3209","city":"盐城市","county":"响水县","county_code":"320921","sys_name":"盐城市_响水县_部门预算管理系统","sys_code":"BMYS"},{"city_code":"3209","city":"盐城市","county":"响水县","county_code":"320921","sys_name":"盐城市_响水县_财政一体化信息系统","sys_code":"YTH"},{"city_code":"3209","city":"盐城市","county":"响水县","county_code":"320921","sys_name":"盐城市_响水县_非税收入收缴管理系统","sys_code":"FSSR"},{"city_code":"3209","city":"盐城市","county":"滨海县","county_code":"320922","sys_name":"盐城市_滨海县财政一体化","sys_code":"YTH"},{"city_code":"3209","city":"盐城市","county":"阜宁县","county_code":"320923","sys_name":"盐城市_阜宁县_财政管理软件","sys_code":"CZGL"},{"city_code":"3209","city":"盐城市","county":"阜宁县","county_code":"320923","sys_name":"盐城市_阜宁县_财政管理软件用友U8","sys_code":"YYZW"},{"city_code":"3209","city":"盐城市","county":"射阳县","county_code":"320924","sys_name":"盐城市_射阳县_财政预算执行一体化系统","sys_code":"YTH"},{"city_code":"3209","city":"盐城市","county":"建湖县","county_code":"320925","sys_name":"盐城市_建湖县_非税收缴","sys_code":"FSSR"},{"city_code":"3209","city":"盐城市","county":"建湖县","county_code":"320925","sys_name":"盐城市_建湖县_财政一体化","sys_code":"YTH"},{"city_code":"3209","city":"盐城市","county":"建湖县","county_code":"320925","sys_name":"盐城市_建湖县_国库集中支付","sys_code":"GKZF"},{"city_code":"3209","city":"盐城市","county":"东台市","county_code":"320981","sys_name":"盐城市_东台市_部门预算编审系统","sys_code":"BMYS"},{"city_code":"3209","city":"盐城市","county":"东台市","county_code":"320981","sys_name":"盐城市_东台市_财政一体化信息系统","sys_code":"YTH"},{"city_code":"3209","city":"盐城市","county":"东台市","county_code":"320981","sys_name":"盐城市_东台市_财政专户核算系统","sys_code":"ZHHS"},{"city_code":"3209","city":"盐城市","county":"东台市","county_code":"320981","sys_name":"盐城市_东台市_非税收入收缴管理系统","sys_code":"FSSR"},{"city_code":"3209","city":"盐城市","county":"东台市","county_code":"320981","sys_name":"盐城市_东台市_总预算会计核算系统","sys_code":"KJHS"},{"city_code":"3209","city":"盐城市","county":"大丰区","county_code":"320982","sys_name":"盐城市_大丰区_部门预算系统","sys_code":"BMYS"},{"city_code":"3209","city":"盐城市","county":"大丰区","county_code":"320982","sys_name":"盐城市_大丰区_财政一体化","sys_code":"YTH"},{"city_code":"3209","city":"盐城市","county":"大丰区","county_code":"320982","sys_name":"盐城市_大丰区_总预算会计核算财务软件","sys_code":"KJHS"},{"city_code":"3209","city":"盐城市","county":"经济技术开发区","county_code":"320991","sys_name":"盐城市_经济技术开发区_部门预算软件","sys_code":"BMYS"},{"city_code":"3209","city":"盐城市","county":"经济技术开发区","county_code":"320991","sys_name":"盐城市_经济技术开发区_国库集中支付","sys_code":"GKZF"},{"city_code":"3210","city":"扬州市","county":"市本级","county_code":"321000","sys_name":"财政专户核算","sys_code":"ZHHS"},{"city_code":"3210","city":"扬州市","county":"市本级","county_code":"321000","sys_name":"老非税收入征缴系统","sys_code":"FSSR"},{"city_code":"3210","city":"扬州市","county":"市本级","county_code":"321000","sys_name":"扬州财政一体化信息管理系统","sys_code":"YTH"},{"city_code":"3210","city":"扬州市","county":"广陵区","county_code":"321002","sys_name":"财政一体化系统","sys_code":"YTH"},{"city_code":"3210","city":"扬州市","county":"广陵区","county_code":"321002","sys_name":"非税收入管理系统","sys_code":"FSSR"},{"city_code":"3210","city":"扬州市","county":"邗江区","county_code":"321003","sys_name":"财政一体化系统","sys_code":"YTH"},{"city_code":"3210","city":"扬州市","county":"邗江区","county_code":"321003","sys_name":"非税系统","sys_code":"FSSR"},{"city_code":"3210","city":"扬州市","county":"邗江区","county_code":"321003","sys_name":"预算执行系统","sys_code":"YSZX"},{"city_code":"3210","city":"扬州市","county":"宝应县","county_code":"321023","sys_name":"非税收入征收","sys_code":"FSSR"},{"city_code":"3210","city":"扬州市","county":"宝应县","county_code":"321023","sys_name":"预算执行系统","sys_code":"YSZX"},{"city_code":"3210","city":"扬州市","county":"仪征市","county_code":"321081","sys_name":"部门预算编制","sys_code":"BMYS"},{"city_code":"3210","city":"扬州市","county":"仪征市","county_code":"321081","sys_name":"非税收入收缴","sys_code":"FSSR"},{"city_code":"3210","city":"扬州市","county":"仪征市","county_code":"321081","sys_name":"行政事业性单位国有资产管理","sys_code":"ZCGL"},{"city_code":"3210","city":"扬州市","county":"仪征市","county_code":"321081","sys_name":"预算执行系统","sys_code":"YSZX"},{"city_code":"3210","city":"扬州市","county":"高邮市","county_code":"321084","sys_name":"财政业务系统","sys_code":"YTH"},{"city_code":"3210","city":"扬州市","county":"江都区","county_code":"321088","sys_name":"财政业务综合系统","sys_code":"ZHYW"},{"city_code":"3210","city":"扬州市","county":"江都区","county_code":"321088","sys_name":"江都开发区预算执行系统","sys_code":"YSZX"},{"city_code":"3211","city":"镇江市","county":"市本级","county_code":"321100","sys_name":"财政一体化","sys_code":"YTH"},{"city_code":"3211","city":"镇江市","county":"京口区","county_code":"321102","sys_name":"富深协通财政一体化业务管理系统","sys_code":"YTH"},{"city_code":"3211","city":"镇江市","county":"京口区","county_code":"321102","sys_name":"富深协通非税收缴系统","sys_code":"FSSR"},{"city_code":"3211","city":"镇江市","county":"京口区","county_code":"321102","sys_name":"富深协通工资统发系统","sys_code":"GZTF"},{"city_code":"3211","city":"镇江市","county":"润州区","county_code":"321111","sys_name":"部门预算系统","sys_code":"BMYS"},{"city_code":"3211","city":"镇江市","county":"润州区","county_code":"321111","sys_name":"财政一体化","sys_code":"YTH"},{"city_code":"3211","city":"镇江市","county":"润州区","county_code":"321111","sys_name":"非税收入","sys_code":"FSSR"},{"city_code":"3211","city":"镇江市","county":"丹徒区","county_code":"321112","sys_name":"财政综合业务系统","sys_code":"YTH"},{"city_code":"3211","city":"镇江市","county":"丹阳市","county_code":"321181","sys_name":"部门预算系统","sys_code":"BMYS"},{"city_code":"3211","city":"镇江市","county":"丹阳市","county_code":"321181","sys_name":"预算执行系统","sys_code":"YSZX"},{"city_code":"3211","city":"镇江市","county":"扬中市","county_code":"321182","sys_name":"部门预算系统","sys_code":"BMYS"},{"city_code":"3211","city":"镇江市","county":"扬中市","county_code":"321182","sys_name":"预算执行系统","sys_code":"YSZX"},{"city_code":"3211","city":"镇江市","county":"句容市","county_code":"321183","sys_name":"非税收入","sys_code":"FSSR"},{"city_code":"3211","city":"镇江市","county":"句容市","county_code":"321183","sys_name":"预算执行系统","sys_code":"YSZX"},{"city_code":"3212","city":"泰州市","county":"市本级","county_code":"321200","sys_name":"泰州市_市本级_部门预算系统","sys_code":"BMYS"},{"city_code":"3212","city":"泰州市","county":"市本级","county_code":"321200","sys_name":"泰州市_市本级_非税收入系统","sys_code":"FSSR"},{"city_code":"3212","city":"泰州市","county":"市本级","county_code":"321200","sys_name":"泰州市_市本级_绩效管理系统","sys_code":"JXGL"},{"city_code":"3212","city":"泰州市","county":"市本级","county_code":"321200","sys_name":"泰州市_市本级_预算执行系统","sys_code":"YSZX"},{"city_code":"3212","city":"泰州市","county":"市本级","county_code":"321200","sys_name":"泰州市_市本级_综合治税系统","sys_code":"ZHZS"},{"city_code":"3212","city":"泰州市","county":"海陵区","county_code":"321202","sys_name":"泰州市_海陵区_部门预算编制系统","sys_code":"BMYS"},{"city_code":"3212","city":"泰州市","county":"海陵区","county_code":"321202","sys_name":"泰州市_海陵区_县区财政一体化","sys_code":"YTH"},{"city_code":"3212","city":"泰州市","county":"高港区","county_code":"321203","sys_name":"泰州市_高港区_预算执行系统","sys_code":"YSZX"},{"city_code":"3212","city":"泰州市","county":"姜堰区","county_code":"321204","sys_name":"泰州市_姜堰区_部门预算系统","sys_code":"BMYS"},{"city_code":"3212","city":"泰州市","county":"姜堰区","county_code":"321204","sys_name":"泰州市_姜堰区_财政一体化系统","sys_code":"YTH"},{"city_code":"3212","city":"泰州市","county":"姜堰区","county_code":"321204","sys_name":"泰州市_姜堰区_非税收缴系统","sys_code":"FSSR"},{"city_code":"3212","city":"泰州市","county":"姜堰区","county_code":"321204","sys_name":"泰州市_姜堰区_预算执行系统","sys_code":"YSZX"},{"city_code":"3212","city":"泰州市","county":"医药高新区","county_code":"321205","sys_name":"泰州市_医药高新区_财政一体化系统","sys_code":"YTH"},{"city_code":"3212","city":"泰州市","county":"兴化市","county_code":"321281","sys_name":"泰州市_兴化市_部门预算","sys_code":"BMYS"},{"city_code":"3212","city":"泰州市","county":"兴化市","county_code":"321281","sys_name":"泰州市_兴化市_非税收缴","sys_code":"FSSR"},{"city_code":"3212","city":"泰州市","county":"兴化市","county_code":"321281","sys_name":"泰州市_兴化市_国库集中支付","sys_code":"GKZF"},{"city_code":"3212","city":"泰州市","county":"靖江市","county_code":"321282","sys_name":"泰州市_靖江市_预算执行系统","sys_code":"YSZX"},{"city_code":"3212","city":"泰州市","county":"靖江市","county_code":"321282","sys_name":"泰州市_靖江市_非税收入收缴","sys_code":"FSSR"},{"city_code":"3212","city":"泰州市","county":"靖江市","county_code":"321282","sys_name":"泰州市_靖江市_部门预算编审系统","sys_code":"BMYS"},{"city_code":"3212","city":"泰州市","county":"泰兴市","county_code":"321283","sys_name":"泰州市_泰兴市_部门预算系统","sys_code":"BMYS"},{"city_code":"3212","city":"泰州市","county":"泰兴市","county_code":"321283","sys_name":"泰州市_泰兴市_非税收入管理系统","sys_code":"FSSR"},{"city_code":"3212","city":"泰州市","county":"泰兴市","county_code":"321283","sys_name":"泰州市_泰兴市_预算执行系统","sys_code":"BMYS"},{"city_code":"3213","city":"宿迁市","county":"市本级","county_code":"321300","sys_name":"部门预算管理系统","sys_code":"BMYS"},{"city_code":"3213","city":"宿迁市","county":"市本级","county_code":"321300","sys_name":"非税收入管理系统","sys_code":"FSSR"},{"city_code":"3213","city":"宿迁市","county":"市本级","county_code":"321300","sys_name":"预算执行系统","sys_code":"YSZX"},{"city_code":"3213","city":"宿迁市","county":"宿城区","county_code":"321302","sys_name":"财政一体化平台及国库集中支付系统","sys_code":"GKZF"},{"city_code":"3213","city":"宿迁市","county":"宿城区","county_code":"321302","sys_name":"新中大非税收入管理","sys_code":"FSSR"},{"city_code":"3213","city":"宿迁市","county":"宿城区","county_code":"321302","sys_name":"总预算会计核算系统","sys_code":"KJHS"},{"city_code":"3213","city":"宿迁市","county":"宿豫区","county_code":"321311","sys_name":"非税收缴管理系统","sys_code":"FSSR"},{"city_code":"3213","city":"宿迁市","county":"宿豫区","county_code":"321311","sys_name":"联友财务管理系统","sys_code":"CWGL"},{"city_code":"3213","city":"宿迁市","county":"宿豫区","county_code":"321311","sys_name":"预算执行系统","sys_code":"YSZX"},{"city_code":"3213","city":"宿迁市","county":"沭阳县","county_code":"321322","sys_name":"非税收入管理系统","sys_code":"FSSR"},{"city_code":"3213","city":"宿迁市","county":"沭阳县","county_code":"321322","sys_name":"国库集中支付、指标管理系统","sys_code":"YSZX"},{"city_code":"3213","city":"宿迁市","county":"沭阳县","county_code":"321322","sys_name":"开发区总预算系统","sys_code":"BMYS"},{"city_code":"3213","city":"宿迁市","county":"沭阳县","county_code":"321322","sys_name":"总预算会计核算","sys_code":"KJHS"},{"city_code":"3213","city":"宿迁市","county":"泗阳县","county_code":"321323","sys_name":"预算执行","sys_code":"YSZX"},{"city_code":"3213","city":"宿迁市","county":"泗洪县","county_code":"321324","sys_name":"部门预算系统","sys_code":"BMYS"},{"city_code":"3213","city":"宿迁市","county":"泗洪县","county_code":"321324","sys_name":"非税收入管理系统","sys_code":"FSSR"},{"city_code":"3213","city":"宿迁市","county":"泗洪县","county_code":"321324","sys_name":"国库集中支付系统","sys_code":"GKZF"},{"city_code":"3213","city":"宿迁市","county":"泗洪县","county_code":"321324","sys_name":"国库账务系统","sys_code":"KJHS"},{"city_code":"3201","city":"南京市","county":"高新区","county_code":"320100GXQ","sys_name":"预算执行系统","sys_code":"YSZX"},{"city_code":"3201","city":"南京市","county":"化工园区","county_code":"320100HGY","sys_name":"化学工业园区非税收入管理系统","sys_code":"FSSR"},{"city_code":"3201","city":"南京市","county":"经济技术开发区","county_code":"320100JKQ","sys_name":"非税收入账套","sys_code":"FSZT"},{"city_code":"3201","city":"南京市","county":"化工园区","county_code":"320101HGY","sys_name":"化学工业园区预算执行系统","sys_code":"YSZX"},{"city_code":"3201","city":"南京市","county":"经济技术开发区","county_code":"320101JKQ","sys_name":"预算执行系统","sys_code":"YSZX"},{"city_code":"3201","city":"南京市","county":"化工园区","county_code":"320102HGY","sys_name":"会计核算","sys_code":"KYHS"},{"city_code":"3201","city":"南京市","county":"经济技术开发区","county_code":"320102JKQ","sys_name":"总预算会计账","sys_code":"KJHS"},{"city_code":"3202","city":"无锡市","county":"锡山开发区","county_code":"320205KFQ","sys_name":"预算内外收支核算系统","sys_code":"KJHS"},{"city_code":"3202","city":"无锡市","county":"滨湖区马山开发区","county_code":"320211KFQ","sys_name":"账户核算系统","sys_code":"ZHHS"},{"city_code":"3202","city":"无锡市","county":"江阴开发区","county_code":"320281kfq","sys_name":"财政一体化平台","sys_code":"YTH"},{"city_code":"3202","city":"无锡市","county":"江阴开发区","county_code":"320281kfq","sys_name":"账户核算系统","sys_code":"ZHHS"},{"city_code":"3202","city":"无锡市","county":"宜兴环科园","county_code":"320282KFQ","sys_name":"财务核算系统","sys_code":"ZHHS"},{"city_code":"3202","city":"无锡市","county":"宜兴开发区","county_code":"320282KFQ","sys_name":"总预算核算系统","sys_code":"ZHHS"},{"city_code":"3203","city":"徐州市","county":"经济技术开发区","county_code":"320300JKQ","sys_name":"富深协通财政一体化业务管理系统软件","sys_code":"YTH"},{"city_code":"3203","city":"徐州市","county":"经济技术开发区","county_code":"320300JKQ","sys_name":"账务处理系统(收支分类改革升级版)","sys_code":"KJHS"},{"city_code":"3204","city":"常州市","county":"天宁经开区","county_code":"320402JKQ","sys_name":"账务处理系统","sys_code":"KJHS"},{"city_code":"3204","city":"常州市","county":"钟楼区开发区","county_code":"320404KFQ","sys_name":"国库集中支付系统","sys_code":"GKZF"},{"city_code":"3204","city":"常州市","county":"钟楼区开发区","county_code":"320405KFQ","sys_name":"用款计划系统","sys_code":"JHGL"},{"city_code":"3204","city":"常州市","county":"钟楼区开发区","county_code":"320406KFQ","sys_name":"指标管理系统","sys_code":"ZBGL"},{"city_code":"3204","city":"常州市","county":"钟楼区开发区","county_code":"320407KFQ","sys_name":"总预算系统","sys_code":"ZYS"},{"city_code":"3204","city":"常州市","county":"经开区","county_code":"320412JKQ","sys_name":"财政预算外业务","sys_code":"YSW"},{"city_code":"3204","city":"常州市","county":"经开区","county_code":"320412JKQ","sys_name":"非税收缴系统","sys_code":"FSSR"},{"city_code":"3204","city":"常州市","county":"经开区","county_code":"320412JKQ","sys_name":"预算执行系统","sys_code":"YSZX"},{"city_code":"3204","city":"常州市","county":"武进高新区","county_code":"320413GXQ","sys_name":"财政一体化管理信息系统","sys_code":"YTH"},{"city_code":"3204","city":"常州市","county":"溧阳中关村","county_code":"320481ZGC","sys_name":"用友U8R10财政一体化平台","sys_code":"YTH"},{"city_code":"3204","city":"常州市","county":"溧阳中关村开发区","county_code":"320481ZGCKF","sys_name":"用友U8R10财政一体化平台","sys_code":"YTH"},{"city_code":"3205","city":"苏州市","county":"相城区开发区","county_code":"320507KFQ","sys_name":"开发区财政系统","sys_code":"YTH"},{"city_code":"3205","city":"苏州市","county":"常熟市高新区","county_code":"320581GXQ","sys_name":"高新区总预算系统","sys_code":"ZYS"},{"city_code":"3205","city":"苏州市","county":"昆山市开发区","county_code":"320583KFQ","sys_name":"开发区公共财政服务平台","sys_code":"YTH"},{"city_code":"3205","city":"苏州市","county":"太仓市新区","county_code":"320585XQ","sys_name":"非税收入系统","sys_code":"FSSR"},{"city_code":"3205","city":"苏州市","county":"太仓市新区","county_code":"320586XQ","sys_name":"会计核算系统","sys_code":"KJHS"},{"city_code":"3205","city":"苏州市","county":"太仓市新区","county_code":"320587XQ","sys_name":"预算执行系统","sys_code":"YSZX"},{"city_code":"3206","city":"南通市","county":"开发区","county_code":"320600KFQ","sys_name":"预算执行系统","sys_code":"YSZX"},{"city_code":"3206","city":"南通市","county":"苏通园区","county_code":"320600STY","sys_name":"预算执行系统","sys_code":"YSZX"},{"city_code":"3206","city":"南通市","county":"通州湾示范区","county_code":"320600TZW","sys_name":"预算执行系统","sys_code":"YSZX"},{"city_code":"3207","city":"连云港市","county":"开发区","county_code":"320701KFQ","sys_name":"非税收入","sys_code":"FSSR"},{"city_code":"3208","city":"淮安市","county":"开发区","county_code":"320800KFQ","sys_name":"用友GRP-U8管理软件","sys_code":"YTH"},{"city_code":"3209","city":"盐城市","county":"城南新区","county_code":"320900CZXQ","sys_name":"盐城市_城南新区_国库集中支付系统","sys_code":"GKZF"},{"city_code":"3209","city":"盐城市","county":"城南新区","county_code":"320901CZXQ","sys_name":"盐城市_城南新区_总预算账务处理系统","sys_code":"KJHS"},{"city_code":"3210","city":"扬州市","county":"化工园区","county_code":"321000HGY","sys_name":"预算执行系统","sys_code":"YSZX"},{"city_code":"3210","city":"扬州市","county":"开发区","county_code":"321000KFQ","sys_name":"非税收入收缴","sys_code":"FSSR"},{"city_code":"3210","city":"扬州市","county":"科技新城","county_code":"321000KJC","sys_name":"预算执行系统","sys_code":"YSZX"},{"city_code":"3210","city":"扬州市","county":"蜀冈-瘦西湖风景名胜区","county_code":"321000SXH","sys_name":"财政预算指标管理","sys_code":"ZBGL"},{"city_code":"3210","city":"扬州市","county":"蜀冈-瘦西湖风景名胜区","county_code":"321000SXH","sys_name":"总预算会计核算","sys_code":"KJHS"},{"city_code":"3210","city":"扬州市","county":"开发区","county_code":"321001KFQ","sys_name":"一体化系统","sys_code":"YTH"},{"city_code":"3210","city":"扬州市","county":"开发区","county_code":"321002KFQ","sys_name":"预算执行系统","sys_code":"YSZX"},{"city_code":"3210","city":"扬州市","county":"高邮开发区","county_code":"321084KFQ","sys_name":"财政业务系统","sys_code":"YTH"},{"city_code":"3211","city":"镇江市","county":"新区","county_code":"321100XQ","sys_name":"财政一体化","sys_code":"YTH"},{"city_code":"3212","city":"泰州市","county":"市本级","county_code":"321200","sys_name":"泰州市_市本级_行政管理系统","sys_code":"XZGL"},{"city_code":"3213","city":"宿迁市","county":"湖滨新城","county_code":"321300HBXC","sys_name":"新中大财务软件","sys_code":"KJHS"},{"city_code":"3213","city":"宿迁市","county":"经开区","county_code":"321300JKQ","sys_name":"新中大公共财政管理软件","sys_code":"YTH"},{"city_code":"3213","city":"宿迁市","county":"洋河新区","county_code":"321300YHXQ","sys_name":"预算执行系统","sys_code":"YSZX"},{"city_code":"3213","city":"宿迁市","county":"宿豫区开发区","county_code":"321311KFQ","sys_name":"开发区新中大财务核算系统","sys_code":"KJHS"},{"city_code":"3213","city":"宿迁市","county":"泗洪县开发区","county_code":"321324KFQ","sys_name":"开发区账务系统","sys_code":"KJHS"}] + +function getCountyByCode(code){ + //var jsobj = JSON.parse(origin_place_arr); + var jsobj = origin_place_arr; + + var jsonlength = jsobj.length; + for (var i = 0; i < jsonlength; i++) { + if(jsobj[i].county_code == code){ + return jsobj[i].city+jsobj[i].county; + } + } + return code; +} + +function getCodeByCounty(place){ + place = place.replace(/\s*\t*/gim,""); + //var jsobj = JSON.parse(origin_place_arr); + var jsobj = origin_place_arr; + + var jsonlength = jsobj.length; + for (var i = 0; i < jsonlength; i++) { + if(jsobj[i].city === "" || jsobj[i].city == undefined) + continue; + if(jsobj[i].county === "" || jsobj[i].county == undefined) + continue; + if((place.indexOf(jsobj[i].city) != -1) && (place.indexOf(jsobj[i].county) != -1)){ + return jsobj[i].county_code; + } + } + return place; +} + +function getSystemNameById(id){ + var temJson = system_arr; + var sys_size = temJson.length; + for (var i = 0; i < sys_size; i++) { + if(temJson[i].sys_id == id){ + return temJson[i].sys_name; + } + } + return id; +} + + + +function getIdBySystemName(name){ + var temJson = system_arr; + var sys_size = temJson.length; + for (var i = 0; i < sys_size; i++) { + if(temJson[i].sys_name == name){ + return temJson[i].sys_id; + } + } + return name; +} + +function getCodeBySystemName(name){ + var jsobj = origin_place_arr; + + var jsonlength = jsobj.length; + for (var i = 0; i < jsonlength; i++) { + if(jsobj[i].sys_name == name){ + return jsobj[i].sys_code; + } + } + return name; +} + + +exports.getCountyByCode = getCountyByCode; +exports.getCodeByCounty = getCodeByCounty; +exports.getSystemNameById = getSystemNameById; +exports.getIdBySystemName = getIdBySystemName; +exports.getCodeBySystemName = getCodeBySystemName; diff --git a/app/version.txt b/app/version.txt new file mode 100644 index 00000000..d8263ee9 --- /dev/null +++ b/app/version.txt @@ -0,0 +1 @@ +2 \ No newline at end of file diff --git a/app/xmloperation.js b/app/xmloperation.js index 5efaf5f4..e9dce68d 100644 --- a/app/xmloperation.js +++ b/app/xmloperation.js @@ -3,6 +3,10 @@ var fs = require('fs'); var dom = require("xmldom").DOMParser; var select = require('xpath.js'); +//var dataDetailPath = "/home/server_data/data-detail.xml" +//var dataPath = "/home/server_data/data.xml" +//var versionPath = "/home/server_data/version.txt" + var dataDetailPath = "/home/server_data/data-detail.xml" var dataPath = "/home/server_data/data.xml" var versionPath = "/home/server_data/version.txt" @@ -76,7 +80,7 @@ function mkdataForPage(collecttime, realtype, realpath, realbatch, realid, realn {//�����ӵİ汾 var nodestr = ""; if(dataNodes[i].indexOf(id) != -1){ - nodestr = nodestr + "\n"; isexist = "1"; dataNodes[i] = dataNodes[i] + nodestr; @@ -95,7 +99,7 @@ function mkdataForPage(collecttime, realtype, realpath, realbatch, realid, realn if(items.length == 1){ //�����ӵ�ϵͳ��---�汾��Ϣ�� nodestr = nodestr + "\n"; - nodestr = nodestr + "\n\n"; isexist = "1"; dataNodes[i] = dataNodes[i] + nodestr; @@ -104,7 +108,7 @@ function mkdataForPage(collecttime, realtype, realpath, realbatch, realid, realn else{ var items = dataNodes[i].split("\n"; - nodestr = nodestr + "\n\n"; isexist = "1"; nodestr = items[0] +"\n" + nodestr +"\n\n"; @@ -548,11 +552,55 @@ function saveByIdToXml(collecttime, type, dataTimes, id, name, province, city, c } -exports.getVersionPath = getVersionPath; -exports.mkdataForPage = mkdataForPage -exports.saveByIdToXml = saveByIdToXml +function savehuizong(collecttime, type, id, name, realpath, fakename){ + var typestr = "id=\""+type+"\""; + var data = fs.readFileSync(dataPath, "utf-8"); + data = data.toString(); + var node_arr = data.split("\n\t"; + var temhuizonglastSize = tem_arr.length ; + //判断有多少 + if (temhuizonglastSize <= 2) { + if(temhuizonglastSize == 2 && tem_arr[1].indexOf(">") != -1){ + node_arr[i] = tem_arr[0]+nodeData + ""; + } + else{ + node_arr[i] = tem_arr[0]+nodeData; + } + + } + else{ + node_arr[i] = tem_arr[0]+nodeData; + var nodestrtem = ""; + for (var k = 1; k < temhuizonglastSize; k++) { + nodestrtem = nodestrtem + "\n"; + } + node_arr[i] = node_arr[i] + nodestrtem; + } + break; + } + } + var result_str = node_arr[0]; + for (var j = 1; j < node_arr_size; j++) { + result_str = result_str +"; pods: any[]; hosts: any[]; diff --git a/d.ts/kubernetes/ts/readPlacedivision.d.ts b/d.ts/kubernetes/ts/readPlacedivision.d.ts new file mode 100644 index 00000000..d0df9305 --- /dev/null +++ b/d.ts/kubernetes/ts/readPlacedivision.d.ts @@ -0,0 +1,7 @@ +declare module Kubernetes { + function getCountyByCode(code: any): any; + function getCodeByCounty(place: any): any; + function getSystemNameById(id: any): any; + function getIdBySystemName(name: any): any; + function getCodeBySystemName(name: any): any; +} diff --git a/d.ts/kubernetes/ts/utilHelpers.d.ts b/d.ts/kubernetes/ts/utilHelpers.d.ts index 2c2483f0..b4a9f9d1 100644 --- a/d.ts/kubernetes/ts/utilHelpers.d.ts +++ b/d.ts/kubernetes/ts/utilHelpers.d.ts @@ -21,6 +21,8 @@ declare module Kubernetes { "labels": { "style": string; "status": string; + "isExtract": string; + "isTarget": any; }; }; "spec": { @@ -51,6 +53,9 @@ declare module Kubernetes { }; }; } - function findLabelValue(value: string, key: string): string; function labelToChinese(labels: any): {}; + function findSameNameReplicationControllers(replicationControllers: any, name: any): any; + function isFilterRC(rc: any): boolean; + function isInclude(rcs: any, rc: any): boolean; + function labelChangeToChines(value: string, key: string): string; } diff --git a/defs.d.ts b/defs.d.ts new file mode 100644 index 00000000..e10239be --- /dev/null +++ b/defs.d.ts @@ -0,0 +1,71 @@ +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// diff --git a/dist/hawtio-kubernetes.css b/dist/hawtio-kubernetes.css index fca41fb7..fead30e4 100644 --- a/dist/hawtio-kubernetes.css +++ b/dist/hawtio-kubernetes.css @@ -200,6 +200,9 @@ legend { .k8s-badge-system { background-color: darkmagenta; } +.k8s-badge-target { + background-color: Red; +} .environment-row a { color: black; diff --git a/dist/hawtio-kubernetes.js b/dist/hawtio-kubernetes.js index c92f70a3..c10a235f 100644 --- a/dist/hawtio-kubernetes.js +++ b/dist/hawtio-kubernetes.js @@ -1755,7 +1755,8 @@ var Kubernetes; 'batch': 'k8s-badge-batch', 'region': 'k8s-badge-region', 'type': 'k8s-badge-type', - 'system': 'k8s-badge-system' + 'system': 'k8s-badge-system', + 'isTarget': 'k8s-badge-target' }; function containerLabelClass(labelType) { if (!(labelType in labelColors)) { @@ -1937,6 +1938,7 @@ var Kubernetes; var client = Kubernetes.createKubernetesClient('replicationcontrollers', 'default'); var RCTemplate = new Kubernetes.resourceRCTemplate(); var rcTemplate = RCTemplate.createRC(obj); + //console.log(rcTemplate); client.put(rcTemplate, function (obj) { console.log("Created: ", obj); if (angular.isFunction(onCompleteFn)) { @@ -1945,37 +1947,6 @@ var Kubernetes; }); } Kubernetes.createRC = createRC; - function updateReplicationControllerLabels($http, KubernetesApiURL, replicationController, newLabels, onCompleteFn) { - if (onCompleteFn === void 0) { onCompleteFn = null; } - var id = getName(replicationController); - var namespace = getNamespace(replicationController) || ""; - var url = kubernetesUrlForKind(KubernetesApiURL, "ReplicationController", namespace, id); - $http.get(url). - success(function (data, status, headers, config) { - if (data) { - var desiredLabels = data.metadata; - if (!desiredLabels) { - desiredLabels = {}; - data.metadata = desiredLabels; - } - desiredLabels.labels = newLabels; - $http.put(url, data). - success(function (data, status, headers, config) { - Kubernetes.log.debug("updated controller " + url); - if (angular.isFunction(onCompleteFn)) { - onCompleteFn(); - } - }). - error(function (data, status, headers, config) { - Kubernetes.log.warn("Failed to save " + url + " " + data + " " + status); - }); - } - }). - error(function (data, status, headers, config) { - Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); - }); - } - Kubernetes.updateReplicationControllerLabels = updateReplicationControllerLabels; function connectOracle($http, $timeout, url, connectParam, rcName, delayTime) { $timeout(function () { $http({ @@ -2010,1272 +1981,1070 @@ var Kubernetes; return answer; } Kubernetes.getOracleStatus = getOracleStatus; -})(Kubernetes || (Kubernetes = {})); - -/// -var Developer; -(function (Developer) { - function enrichWorkspaces(projects) { - angular.forEach(projects, function (project) { - enrichWorkspace(project); - }); - return projects; - } - Developer.enrichWorkspaces = enrichWorkspaces; - function enrichWorkspace(build) { - if (build) { - var name = Kubernetes.getName(build); - build.$name = name; - build.$sortOrder = 0 - build.number; - var nameArray = name.split("-"); - var nameArrayLength = nameArray.length; - build.$shortName = (nameArrayLength > 4) ? nameArray.slice(0, nameArrayLength - 4).join("-") : name.substring(0, 30); - var labels = Kubernetes.getLabels(build); - build.$creationDate = asDate(Kubernetes.getCreationTimestamp(build)); - build.$labelsText = Kubernetes.labelsToString(labels); - if (name) { - build.$projectsLink = UrlHelpers.join("workspaces", name); - build.$runtimeLink = UrlHelpers.join("kubernetes/namespace/", name, "/apps"); - build.$viewLink = build.$projectsLink; - } - } - return build; - } - Developer.enrichWorkspace = enrichWorkspace; - function asDate(value) { - return value ? new Date(value) : null; - } - Developer.asDate = asDate; - function enrichJenkinsJobs(jobsData, projectId, jobName) { - if (jobsData) { - angular.forEach(jobsData.jobs, function (job) { - enrichJenkinsJob(job, projectId, jobName); - }); + function getOracleName(name) { + var results = name.split("-"); + if (results.length === 2) { + return "汇总数据库" + "(" + results[1] + ")"; } - return jobsData; - } - Developer.enrichJenkinsJobs = enrichJenkinsJobs; - function enrichJenkinsJob(job, projectId, jobName) { - if (job) { - jobName = jobName || job.name || projectId; - job.$jobId = jobName; - job.$project = projectId || jobName; - var lastBuild = job.lastBuild; - var lastBuildResult = lastBuild ? lastBuild.result : "NOT_STARTED"; - var $iconClass = createBuildStatusIconClass(lastBuildResult); - job.$lastBuildNumber = enrichJenkinsBuild(job, lastBuild); - job.$lastSuccessfulBuildNumber = enrichJenkinsBuild(job, job.lastSuccessfulBuild); - job.$lastFailedlBuildNumber = enrichJenkinsBuild(job, job.lastFailedlBuild); - if (lastBuild) { - job.$duration = lastBuild.duration; - job.$timestamp = asDate(lastBuild.timestamp); - } - var jobUrl = (job || {}).url; - if (!jobUrl || !jobUrl.startsWith("http")) { - var jenkinsUrl = jenkinsLink(); - if (jenkinsUrl) { - jobUrl = UrlHelpers.join(jenkinsUrl, "job", jobName); - } - } - if (jobUrl) { - job.$jobLink = jobUrl; - var workspaceName = Kubernetes.currentKubernetesNamespace(); - job.$pipelinesLink = UrlHelpers.join("/workspaces", workspaceName, "projects", job.$project, "jenkinsJob", jobName, "pipelines"); - job.$buildsLink = UrlHelpers.join("/workspaces", workspaceName, "projects", job.$project, "jenkinsJob", jobName); - } - job.$iconClass = $iconClass; - angular.forEach(job.builds, function (build) { - enrichJenkinsBuild(job, build); - }); + else if (results.length === 3) { + return Kubernetes.getCountyByCode(results[0]) + "_" + Kubernetes.getSystemNameById(results[1]); } - return job; - } - Developer.enrichJenkinsJob = enrichJenkinsJob; - function createBuildStatusIconClass(result) { - var $iconClass = "fa fa-spinner fa-spin"; - if (result) { - if (result === "FAILURE" || result === "FAILED") { - // TODO not available yet - $iconClass = "fa fa-exclamation-circle red"; - } - else if (result === "ABORTED" || result === "INTERUPTED") { - $iconClass = "fa fa-circle grey"; - } - else if (result === "SUCCESS" || result === "COMPLETE" || result === "COMPLETED") { - $iconClass = "fa fa-check-circle green"; - } - else if (result === "NOT_STARTED") { - $iconClass = "fa fa-circle-thin grey"; - } + else { + return name; } - return $iconClass; } - Developer.createBuildStatusIconClass = createBuildStatusIconClass; - function createBuildStatusBackgroundClass(result) { - var $iconClass = "build-pending"; - if (result) { - if (result === "FAILURE" || result === "FAILED") { - $iconClass = "build-fail"; - } - else if (result === "ABORTED" || result === "INTERUPTED") { - $iconClass = "build-aborted"; - } - else if (result === "SUCCESS" || result === "COMPLETE" || result === "COMPLETED") { - $iconClass = "build-success"; - } - else if (result === "NOT_STARTED") { - $iconClass = "build-not-started"; - } + Kubernetes.getOracleName = getOracleName; + function extractDataToOracle($http, selectedReplicationControllers, targetReplicationController) { + //console.log(targetReplicationController.length); + if (selectedReplicationControllers.length === 1 && (getName(selectedReplicationControllers[0]) === getName(targetReplicationController))) { + alert("您选择的数据库中不包含需要汇总的数据库,导致汇总操作失败,请重新选择!"); + return; } - return $iconClass; - } - Developer.createBuildStatusBackgroundClass = createBuildStatusBackgroundClass; - function enrichJenkinsBuild(job, build) { - var number = null; - if (build) { - build.$duration = build.duration; - build.$timestamp = asDate(build.timestamp); - var projectId = job.$project; - var jobName = job.$jobId || projectId; - var buildId = build.id; - number = build.number; - var workspaceName = Kubernetes.currentKubernetesNamespace(); - var $iconClass = createBuildStatusIconClass(build.result); - var jobUrl = (job || {}).url; - if (!jobUrl || !jobUrl.startsWith("http")) { - var jenkinsUrl = jenkinsLink(); - if (jenkinsUrl) { - jobUrl = UrlHelpers.join(jenkinsUrl, "job", jobName); - } - } - if (jobUrl) { - build.$jobLink = jobUrl; - if (buildId) { - //build.$logsLink = UrlHelpers.join(build.$buildLink, "console"); - build.$logsLink = UrlHelpers.join("/workspaces", workspaceName, "projects", projectId, "jenkinsJob", jobName, "log", buildId); - build.$pipelineLink = UrlHelpers.join("/workspaces", workspaceName, "projects", projectId, "jenkinsJob", jobName, "pipeline", buildId); - build.$buildsLink = UrlHelpers.join("/workspaces", workspaceName, "projects", projectId, "jenkinsJob", jobName); - //build.$buildLink = UrlHelpers.join(jobUrl, build.id); - build.$buildLink = build.$logsLink; - } + var answer = checkoutOracleRCIsRunning(targetReplicationController) && targetReplicationController; + var oracleConnectParam = [{ + OracleName: getName(targetReplicationController), + connectHost: getHost(targetReplicationController.$pods[0]), + connectPort: targetReplicationController.$pods[0].spec.containers[0].ports[0].hostPort, + isTarget: true + }]; + selectedReplicationControllers.forEach(function (rc) { + if (getName(rc) !== getName(targetReplicationController)) { + answer = answer && checkoutOracleRCIsRunning(rc); + oracleConnectParam.push({ + OracleName: getName(rc), + connectHost: getHost(rc.$pods[0]), + connectPort: rc.$pods[0].spec.containers[0].ports[0].hostPort, + isTarget: false + }); } - build.$iconClass = $iconClass; - } - return number; - } - Developer.enrichJenkinsBuild = enrichJenkinsBuild; - function jenkinsLink() { - var ServiceRegistry = Kubernetes.inject("ServiceRegistry"); - if (ServiceRegistry) { - return ServiceRegistry.serviceLink(Developer.jenkinsServiceName); + }); + if (answer) { + $http({ + url: '/extractOracleData', + method: 'POST', + params: { param: oracleConnectParam } + }).success(function (data, header, config, status) { + console.log("success"); + }).error(function (data, header, config, status) { + //log.warn("Failed to connect " + connectParam + " " + data + " " + status); + }); } - return null; - } - Developer.jenkinsLink = jenkinsLink; - function forgeReadyLink() { - var ServiceRegistry = Kubernetes.inject("ServiceRegistry"); - if (ServiceRegistry) { - return ServiceRegistry.serviceReadyLink(Kubernetes.fabric8ForgeServiceName); + else { + alert("您选择的汇总数据库或需要汇总的数据库中存在未启动成功的数据库,导致汇总操作失败,请重新选择!"); } - return null; } - Developer.forgeReadyLink = forgeReadyLink; - function enrichJenkinsPipelineJob(job, projectId, jobId) { - if (job) { - job.$project = projectId; - job.$jobId = jobId; - angular.forEach(job.builds, function (build) { - enrichJenkinsStages(build, projectId, jobId); - }); + Kubernetes.extractDataToOracle = extractDataToOracle; + function checkoutOracleRCIsRunning(rc) { + if (rc.$podCounters.ready && rc.$oracleStatus == 2) { + return true; } - } - Developer.enrichJenkinsPipelineJob = enrichJenkinsPipelineJob; - function enrichJenkinsStages(build, projectId, jobName) { - if (build) { - build.$project = projectId; - build.$jobId = jobName; - build.$timestamp = asDate(build.timeInMillis); - build.$iconClass = createBuildStatusIconClass(build.result || "NOT_STARTED"); - var workspaceName = Kubernetes.currentKubernetesNamespace(); - var parameters = build.parameters; - var $parameterCount = 0; - var $parameterText = "No parameters"; - if (parameters) { - $parameterCount = _.keys(parameters).length || 0; - $parameterText = Kubernetes.labelsToString(parameters, " "); - } - build.$parameterCount = $parameterCount; - build.$parameterText = $parameterText; - var jenkinsUrl = jenkinsLink(); - if (jenkinsUrl) { - var url = build.url; - if (url) { - } - } - build.$logLink = UrlHelpers.join("/workspaces", workspaceName, "projects", projectId, "jenkinsJob", jobName, "log", build.id); - build.$viewLink = build.$logLink; - angular.forEach(build.stages, function (stage) { - enrichJenkinsStage(stage, build); - }); + else { + return false; } - return build; } - Developer.enrichJenkinsStages = enrichJenkinsStages; - function enrichJenkinsStage(stage, build) { - if (build === void 0) { build = null; } - if (stage) { - if (build) { - stage.$buildId = build.id; - stage.$project = build.$project; - } - var projectId = build.$project; - var jobName = build.$jobId || projectId; - var buildId = build.id; - var workspaceName = Kubernetes.currentKubernetesNamespace(); - stage.$backgroundClass = createBuildStatusBackgroundClass(stage.status); - stage.$iconClass = createBuildStatusIconClass(stage.status); - stage.$startTime = asDate(stage.startTime); - if (!stage.duration) { - stage.duration = 0; - } - var jenkinsUrl = jenkinsLink(); - if (jenkinsUrl) { - var url = stage.url; - if (url) { - stage.$viewLink = UrlHelpers.join(jenkinsUrl, url); - stage.$logLink = UrlHelpers.join(stage.$viewLink, "log"); - if (projectId && buildId) { - stage.$logLink = UrlHelpers.join("/workspaces", workspaceName, "projects", projectId, "jenkinsJob", jobName, "log", buildId); + Kubernetes.checkoutOracleRCIsRunning = checkoutOracleRCIsRunning; +})(Kubernetes || (Kubernetes = {})); + +/// +/// +var Kubernetes; +(function (Kubernetes) { + Kubernetes._module = angular.module(Kubernetes.pluginName, ['hawtio-core', 'hawtio-ui', 'ui.codemirror', 'ui.validate', 'kubernetesUI']); + Kubernetes.controller = PluginHelpers.createControllerFunction(Kubernetes._module, Kubernetes.pluginName); + Kubernetes.route = PluginHelpers.createRoutingFunction(Kubernetes.templatePath); + Kubernetes._module.config(['$routeProvider', function ($routeProvider) { + $routeProvider + .when(UrlHelpers.join(Kubernetes.context, '/pods'), Kubernetes.route('pods.html', false)) + .when(UrlHelpers.join(Kubernetes.context, 'replicationControllers'), Kubernetes.route('replicationControllers.html', false)) + .when(UrlHelpers.join(Kubernetes.context, 'services'), Kubernetes.route('services.html', false)) + .when(UrlHelpers.join(Kubernetes.context, 'events'), Kubernetes.route('events.html', false)) + .when(UrlHelpers.join(Kubernetes.context, 'apps'), Kubernetes.route('apps.html', false)) + .when(UrlHelpers.join(Kubernetes.context, 'apps/:namespace'), Kubernetes.route('apps.html', false)) + .when(UrlHelpers.join(Kubernetes.context, 'templates'), Kubernetes.route('templates.html', false)) + .when(UrlHelpers.join(Kubernetes.context, 'hosts'), Kubernetes.route('hosts.html', false)) + .when(UrlHelpers.join(Kubernetes.context, 'hosts/:id'), Kubernetes.route('host.html', true)) + .when(UrlHelpers.join(Kubernetes.context, 'pipelines'), Kubernetes.route('pipelines.html', false)) + .when(UrlHelpers.join(Kubernetes.context, 'overview'), Kubernetes.route('overview.html', true)) + .when(Kubernetes.context, { redirectTo: UrlHelpers.join(Kubernetes.context, 'replicationControllers') }); + angular.forEach([Kubernetes.context, "/workspaces/:workspace/projects/:project"], function (context) { + $routeProvider + .when(UrlHelpers.join(context, '/namespace/:namespace/podCreate'), Kubernetes.route('podCreate.html', false)) + .when(UrlHelpers.join(context, '/namespace/:namespace/podEdit/:id'), Kubernetes.route('podEdit.html', false)) + .when(UrlHelpers.join(context, '/namespace/:namespace/pods'), Kubernetes.route('pods.html', false)) + .when(UrlHelpers.join(context, '/namespace/:namespace/pods/:id'), Kubernetes.route('pod.html', false)) + .when(UrlHelpers.join(context, '/namespace/:namespace/replicationControllers'), Kubernetes.route('replicationControllers.html', false)) + .when(UrlHelpers.join(context, '/namespace/:namespace/replicationControllers/:id'), Kubernetes.route('replicationController.html', false)) + .when(UrlHelpers.join(context, '/namespace/:namespace/replicationControllerCreate'), Kubernetes.route('replicationControllerCreate.html', false)) + .when(UrlHelpers.join(context, '/namespace/:namespace/replicationControllerEdit/:id'), Kubernetes.route('replicationControllerEdit.html', false)) + .when(UrlHelpers.join(context, '/namespace/:namespace/secrets'), Kubernetes.route('secrets.html', false)) + .when(UrlHelpers.join(context, '/namespace/:namespace/secrets/:id'), Kubernetes.route('secret.html', false)) + .when(UrlHelpers.join(context, '/namespace/:namespace/secretCreate'), Kubernetes.route('secret.html', false)) + .when(UrlHelpers.join(context, '/namespace/:namespace/services'), Kubernetes.route('services.html', false)) + .when(UrlHelpers.join(context, '/namespace/:namespace/services/:id'), Kubernetes.route('service.html', false)) + .when(UrlHelpers.join(context, '/namespace/:namespace/serviceCreate'), Kubernetes.route('serviceCreate.html', false)) + .when(UrlHelpers.join(context, '/namespace/:namespace/serviceEdit/:id'), Kubernetes.route('serviceEdit.html', false)) + .when(UrlHelpers.join(context, '/namespace/:namespace/events'), Kubernetes.route('events.html', false)) + .when(UrlHelpers.join(context, '/namespace/:namespace/apps'), Kubernetes.route('apps.html', false)) + .when(UrlHelpers.join(context, '/namespace/:namespace/overview'), Kubernetes.route('overview.html', true)) + .when(UrlHelpers.join(context, '/namespace/:namespace/templates/:targetNamespace'), Kubernetes.route('templates.html', false)) + .when(UrlHelpers.join(context, '/namespace/:namespace'), Kubernetes.route('apps.html', false)) + .when(UrlHelpers.join(context, 'builds'), Kubernetes.route('builds.html', false)) + .when(UrlHelpers.join(context, 'builds/:id'), Kubernetes.route('build.html', true)) + .when(UrlHelpers.join(context, 'buildLogs/:id'), Kubernetes.route('buildLogs.html', true)) + .when(UrlHelpers.join(context, 'buildConfigs'), Kubernetes.route('buildConfigs.html', false)) + .when(UrlHelpers.join(context, 'buildConfigs/:id'), Kubernetes.route('buildConfig.html', true)) + .when(UrlHelpers.join(context, 'buildConfigEdit/:id'), Kubernetes.route('buildConfigEdit.html', true)) + .when(UrlHelpers.join(context, 'deploymentConfigs'), Kubernetes.route('deploymentConfigs.html', false)) + .when(UrlHelpers.join(context, 'deploymentConfigs/:id'), Kubernetes.route('deploymentConfig.html', true)) + .when(UrlHelpers.join(context, 'imageRepositories'), Kubernetes.route('imageRepositories.html', false)); + }); + angular.forEach([Kubernetes.context, "/workspaces/:workspace", "/workspaces/:workspace/projects/:project"], function (context) { + $routeProvider + .when(UrlHelpers.join(context, 'buildConfigEdit'), Kubernetes.route('buildConfigEdit.html', true)) + .when(UrlHelpers.join(context, 'buildConfigEdit/:id'), Kubernetes.route('buildConfigEdit.html', true)) + .when(UrlHelpers.join(context, 'importProject'), Kubernetes.route('importProject.html', true)); + }); + }]); + Kubernetes._module.factory('AppLibraryURL', ['$rootScope', function ($rootScope) { + return UrlHelpers.join(Kubernetes.kubernetesApiUrl(), "/proxy", Kubernetes.kubernetesNamespacePath(), "/services/app-library"); + }]); + Kubernetes._module.factory('WikiGitUrlPrefix', function () { + return UrlHelpers.join(Kubernetes.kubernetesApiUrl(), "/proxy", Kubernetes.kubernetesNamespacePath(), "services/app-library"); + }); + Kubernetes._module.factory('wikiRepository', ["$location", "localStorage", function ($location, localStorage) { + return false; + }]); + Kubernetes._module.factory('ConnectDialogService', ['$rootScope', function ($rootScope) { + return { + dialog: new UI.Dialog(), + saveCredentials: false, + userName: null, + password: null, + jolokiaUrl: null, + containerName: null, + view: null + }; + }]); + Kubernetes._module.filter('kubernetesPageLink', function () { return Kubernetes.entityPageLink; }); + Kubernetes._module.filter('relativeTime', function () { + return function (date) { + return humandate.relativeTime(date); + }; + }); + Kubernetes._module.run(['viewRegistry', 'ServiceRegistry', 'HawtioNav', 'KubernetesModel', '$templateCache', function (viewRegistry, ServiceRegistry, HawtioNav, KubernetesModel, $templateCache) { + Kubernetes.log.debug("Running"); + viewRegistry['kubernetes'] = Kubernetes.templatePath + 'layoutKubernetes.html'; + var builder = HawtioNav.builder(); + var apps = builder.id('kube-apps') + .href(function () { return UrlHelpers.join(Kubernetes.context, 'apps'); }) + .title(function () { return 'Apps'; }) + .build(); + var services = builder.id('kube-services') + .href(function () { return UrlHelpers.join(Kubernetes.context, 'services'); }) + .title(function () { return 'Services'; }) + .build(); + var controllers = builder.id('kube-controllers') + .href(function () { return UrlHelpers.join(Kubernetes.context, 'replicationControllers'); }) + .title(function () { return 'oracle服务'; }) + .build(); + var pods = builder.id('kube-pods') + .href(function () { return UrlHelpers.join(Kubernetes.context, 'pods'); }) + .title(function () { return '测试页面'; }) + .build(); + var events = builder.id('kube-events') + .href(function () { return UrlHelpers.join(Kubernetes.context, 'events'); }) + .title(function () { return '服务启动日志'; }) + .build(); + var hosts = builder.id('kube-hosts') + .href(function () { return UrlHelpers.join(Kubernetes.context, 'hosts'); }) + .title(function () { return '集群节点'; }) + .build(); + var overview = builder.id('kube-overview') + .href(function () { return UrlHelpers.join(Kubernetes.context, 'overview'); }) + .title(function () { return 'Diagram'; }) + .build(); + var builds = builder.id('kube-builds') + .href(function () { return UrlHelpers.join(Kubernetes.context, 'builds'); }) + .title(function () { return 'Builds'; }) + .build(); + var buildConfigs = builder.id('kube-buildConfigs') + .href(function () { return UrlHelpers.join(Kubernetes.context, 'buildConfigs'); }) + .title(function () { return 'Build Configs'; }) + .build(); + var deploys = builder.id('kube-deploys') + .href(function () { return UrlHelpers.join(Kubernetes.context, 'deploymentConfigs'); }) + .title(function () { return 'Deploys'; }) + .build(); + var imageRepositories = builder.id('kube-imageRepositories') + .href(function () { return UrlHelpers.join(Kubernetes.context, 'imageRepositories'); }) + .title(function () { return 'Registries'; }) + .build(); + var pipelines = builder.id('kube-pipelines') + .href(function () { return UrlHelpers.join(Kubernetes.context, 'pipelines'); }) + .title(function () { return 'Pipelines'; }) + .build(); + var repos = builder.id('kube-repos') + .href(function () { return "/forge/repos"; }) + .isValid(function () { return ServiceRegistry.hasService(Kubernetes.fabric8ForgeServiceName) && ServiceRegistry.hasService(Kubernetes.gogsServiceName); }) + .title(function () { return 'Repositories'; }) + .build(); + var mainTab = builder.id('kubernetes') + .rank(100) + .defaultPage({ + rank: 20, + isValid: function (yes, no) { + yes(); + } + }) + .href(function () { return Kubernetes.context; }) + .title(function () { return '服务集群'; }) + .tabs(controllers, events) + .build(); + HawtioNav.add(mainTab); + /* testKubernetesModel + HawtioNav.add({ + id: 'k8sAppSwitcher', + title: () => '', // not used as 'template' below overrides this + isValid: () => KubernetesModel.serviceApps.length > 0, + context: true, + template: () => $templateCache.get(UrlHelpers.join(templatePath, 'serviceApps.html')) + }); + */ + var projectsTab = builder.id('openshift') + .rank(100) + .href(function () { return UrlHelpers.join(Kubernetes.context, 'buildConfigs') + '?sub-tab=kube-buildConfigs'; }) + .title(function () { return 'Projects'; }) + .tabs(repos, buildConfigs, builds, deploys, imageRepositories) + .build(); + //HawtioNav.add(projectsTab); + }]); + hawtioPluginLoader.registerPreBootstrapTask({ + name: 'KubernetesInit', + task: function (next) { + $.getScript('osconsole/config.js') + .done(function (script, textStatus) { + var config = Kubernetes.osConfig = window['OPENSHIFT_CONFIG']; + Kubernetes.log.debug("Fetched OAuth config: ", config); + var master = config.master_uri; + if (!master && config.api && config.api.k8s) { + var masterUri = new URI().host(config.api.k8s.hostPort).path("").query(""); + if (config.api.k8s.proto) { + masterUri.protocol(config.api.k8s.proto); } + master = masterUri.toString(); } - } + OSOAuthConfig = config.openshift; + GoogleOAuthConfig = config.google; + KeycloakConfig = config.keycloak; + if (OSOAuthConfig && !master) { + // TODO auth.master_uri no longer used right? + // master = OSOAuthConfig.master_uri; + if (!master) { + var oauth_authorize_uri = OSOAuthConfig.oauth_authorize_uri; + if (oauth_authorize_uri) { + var text = oauth_authorize_uri; + var idx = text.indexOf("://"); + if (idx > 0) { + idx += 3; + idx = text.indexOf("/", idx); + if (idx > 0) { + master = text.substring(0, ++idx); + } + } + } + } + } + if ((!Kubernetes.masterUrl || Kubernetes.masterUrl === "/") && (!master || master === "/")) { + // lets default the master to the current protocol and host/port + // in case the master url is "/" and we are + // serving up static content from inside /api/v1/namespaces/default/services/fabric8 or something like that + var href = location.href; + if (href) { + master = new URI(href).query("").path("").toString(); + } + } + if (master) { + Kubernetes.masterUrl = master; + next(); + return; + } + }) + .fail(function (response) { + Kubernetes.log.debug("Error fetching OAUTH config: ", response); + }) + .always(function () { + next(); + }); } - } - Developer.enrichJenkinsStage = enrichJenkinsStage; -})(Developer || (Developer = {})); + }, true); + hawtioPluginLoader.addModule('ngResource'); + hawtioPluginLoader.addModule(Kubernetes.pluginName); +})(Kubernetes || (Kubernetes = {})); /// -var Developer; -(function (Developer) { - Developer.context = '/workspaces'; - Developer.hash = '#' + Developer.context; - Developer.pluginName = 'Developer'; - Developer.pluginPath = 'plugins/developer/'; - Developer.templatePath = Developer.pluginPath + 'html/'; - Developer.log = Logger.get(Developer.pluginName); - Developer.jenkinsServiceName = "jenkins"; - Developer.jenkinsServiceNameAndPort = Developer.jenkinsServiceName + ":http"; - Developer.jenkinsHttpConfig = { - headers: { - Accept: "application/json, text/x-json, text/plain" - } - }; - /** - * Returns true if the value hasn't changed from the last cached JSON version of this object - */ - function hasObjectChanged(value, state) { - var json = angular.toJson(value || ""); - var oldJson = state.json; - state.json = json; - return !oldJson || json !== oldJson; - } - Developer.hasObjectChanged = hasObjectChanged; - function projectForScope($scope) { - if ($scope) { - return $scope.buildConfig || $scope.entity || ($scope.model || {}).project; - } - return null; - } - Developer.projectForScope = projectForScope; - /** - * Lets load the project versions for the given namespace - */ - function loadProjectVersions($scope, $element, project, env, ns, answer, caches) { - var projectAnnotation = "project"; - var versionAnnotation = "version"; - var projectNamespace = project.$namespace; - var projectName = project.$name; - var cache = caches[ns]; - if (!cache) { - cache = {}; - caches[ns] = cache; - } - var status = { - rcs: [], - pods: [], - routes: [], - services: [] - }; - var imageStreamTags = []; - function updateModel() { - var projectInfos = {}; - var model = $scope.model || {}; - angular.forEach(status.rcs, function (item) { - var metadata = item.metadata || {}; - var name = metadata.name; - var labels = metadata.labels || {}; - var annotations = metadata.annotations || {}; - var spec = item.spec || {}; - var selector = spec.selector; - var project = labels[projectAnnotation]; - var version = labels[versionAnnotation]; - // lets try the S2I defaults... - if (!project) { - project = labels["app"]; +/// +var Kubernetes; +(function (Kubernetes) { + Kubernetes.Apps = Kubernetes.controller("Apps", ["$scope", "KubernetesModel", "KubernetesServices", "KubernetesReplicationControllers", "KubernetesPods", "KubernetesState", "KubernetesApiURL", "$templateCache", "$location", "$routeParams", "$http", "$dialog", "$timeout", + function ($scope, KubernetesModel, KubernetesServices, KubernetesReplicationControllers, KubernetesPods, KubernetesState, KubernetesApiURL, $templateCache, $location, $routeParams, $http, $dialog, $timeout) { + $scope.model = KubernetesModel; + $scope.apps = []; + $scope.allApps = []; + $scope.kubernetes = KubernetesState; + $scope.fetched = false; + $scope.json = ''; + ControllerHelpers.bindModelToSearchParam($scope, $location, 'id', '_id', undefined); + ControllerHelpers.bindModelToSearchParam($scope, $location, 'appSelectorShow', 'openApp', undefined); + ControllerHelpers.bindModelToSearchParam($scope, $location, 'mode', 'mode', 'detail'); + var branch = $scope.branch || "master"; + var namespace = null; + function appMatches(app) { + var filterText = $scope.appSelector.filterText; + if (filterText) { + return Core.matchFilterIgnoreCase(app.groupId, filterText) || + Core.matchFilterIgnoreCase(app.artifactId, filterText) || + Core.matchFilterIgnoreCase(app.name, filterText) || + Core.matchFilterIgnoreCase(app.description, filterText); } - if (!version) { - version = annotations["openshift.io/deployment-config.latest-version"]; + else { + return true; } - if (project && version && project === projectName) { - var projects = projectInfos[project]; - if (!projects) { - projects = { - project: project, - versions: {} - }; - projectInfos[project] = projects; + } + function appRunning(app) { + return $scope.model.apps.any(function (running) { return running.appPath === app.appPath; }); + } + $scope.tableConfig = { + data: 'model.apps', + showSelectionCheckbox: true, + enableRowClickSelection: false, + multiSelect: true, + selectedItems: [], + filterOptions: { + filterText: $location.search()["q"] || '' + }, + columnDefs: [ + { field: '$name', displayName: 'App', cellTemplate: $templateCache.get(UrlHelpers.join(Kubernetes.templatePath, "appIconTemlate.html")) }, + { field: '$servicesText', displayName: 'Services', cellTemplate: $templateCache.get(UrlHelpers.join(Kubernetes.templatePath, "appServicesTemplate.html")) }, + { field: '$replicationControllersText', displayName: 'Controllers', cellTemplate: $templateCache.get(UrlHelpers.join(Kubernetes.templatePath, "appReplicationControllerTemplate.html")) }, + { field: '$podCount', displayName: 'Pods', cellTemplate: $templateCache.get(UrlHelpers.join(Kubernetes.templatePath, "appPodCountsAndLinkTemplate.html")) }, + { field: '$creationDate', displayName: 'Deployed', cellTemplate: $templateCache.get(UrlHelpers.join(Kubernetes.templatePath, "appDeployedTemplate.html")) } + ] + }; + Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); + $scope.expandedPods = []; + $scope.$on('do-resize', function ($event, controller) { + $scope.resizeDialog.open(controller); + }); + $scope.podExpanded = function (pod) { + var id = Kubernetes.getName(pod); + return id && ($scope.expandedPods || []).indexOf(id) >= 0; + }; + $scope.expandPod = function (pod) { + var id = Kubernetes.getName(pod); + if (id) { + $scope.expandedPods.push(id); + } + }; + $scope.collapsePod = function (pod) { + var id = Kubernetes.getName(pod); + if (id) { + _.remove($scope.expandedPods, function (v) { return id === v; }); + } + }; + $scope.$on('$routeUpdate', function ($event) { + Kubernetes.setJson($scope, $location.search()['_id'], $scope.model.apps); + }); + function deleteApp(app, onCompleteFn) { + function deleteServices(services, service, onCompletedFn) { + if (!service || !services) { + return onCompletedFn(); } - var versionInfo = projects.versions[version]; - if (!versionInfo) { - versionInfo = { - replicationControllers: {} - }; - projects.versions[version] = versionInfo; + var id = Kubernetes.getName(service); + if (!id) { + Kubernetes.log.warn("No ID for service " + angular.toJson(service)); } - if (name) { - versionInfo.replicationControllers[name] = item; - item.$name = name; - if (projectNamespace && projectName) { - item.$viewLink = UrlHelpers.join("/workspaces/", projectNamespace, "projects", projectName, "namespace", ns, "replicationControllers", name); - } - else { - Developer.log.warn("Missing project data! " + projectNamespace + " name " + projectName); - } - item.$services = []; - var rcLink = null; - status.services.forEach(function (service) { - var repSelector = Kubernetes.getSelector(item); - var serviceSelector = Kubernetes.getSelector(service); - if (serviceSelector && repSelector && - Kubernetes.selectorMatches(serviceSelector, repSelector) && - Kubernetes.getNamespace(service) === Kubernetes.getNamespace(item)) { - status.routes.forEach(function (route) { - var serviceName = Kubernetes.getName(service); - if (serviceName === Kubernetes.getName(route)) { - service["$route"] = route; - service["$host"] = Core.pathGet(route, ["spec", "host"]); - item.$services.push(service); - if (!rcLink) { - var url = Kubernetes.serviceLinkUrl(service, true); - if (url) { - // TODO find icon etc? - rcLink = { - name: serviceName, - href: url - }; - } - } - } - }); - } + else { + KubernetesServices.delete({ + id: id + }, undefined, function () { + Kubernetes.log.debug("Deleted service: ", id); + deleteServices(services, services.shift(), onCompletedFn); + }, function (error) { + Kubernetes.log.debug("Error deleting service: ", error); + deleteServices(services, services.shift(), onCompletedFn); }); - item["$serviceLink"] = rcLink; } - item.$buildId = annotations["fabric8.io/build-id"] || item.$buildId; - item.$buildUrl = annotations["fabric8.io/build-url"] || item.$buildUrl; - item.$gitCommit = annotations["fabric8.io/git-commit"] || item.$gitCommit; - item.$gitUrl = annotations["fabric8.io/git-url"] || item.$gitUrl; - item.$gitBranch = annotations["fabric8.io/git-branch"] || item.$gitBranch; - if (!item.$gitCommit) { - var image = getImage(item); - if (image) { - if (!$scope.$isWatchImages) { - $scope.$isWatchImages = true; - Kubernetes.watch($scope, $element, "images", null, function (data) { - imageStreamTags = data; - checkForMissingMetadata(); - }); - } - else { - checkForMissingMetadata(); - } - } - function getImage(item) { - var image = ""; - // lets see if we can find the commit id from a S2I image name - // TODO needs this issue fixed to find it via an OpenShift annotation: - // https://github.com/openshift/origin/issues/6241 - var containers = Core.pathGet(item, ["spec", "template", "spec", "containers"]); - if (containers && containers.length) { - var container = containers[0]; - if (container) { - image = container.image; - } - } - return image; - } - function checkForMissingMetadata() { - angular.forEach(projects.versions, function (vi) { - angular.forEach(vi.replicationControllers, function (item, name) { - if (!item.$gitCommit) { - var image = getImage(item); - if (image) { - angular.forEach(imageStreamTags, function (imageStreamTag) { - var imageName = imageStreamTag.dockerImageReference; - if (imageName && imageName === image) { - var foundISTag = imageStreamTag; - var manifestJSON = imageStreamTag.dockerImageManifest; - if (manifestJSON) { - var manifest = angular.fromJson(manifestJSON) || {}; - var history = manifest.history; - if (history && history.length) { - var v1 = history[0].v1Compatibility; - if (v1) { - var data = angular.fromJson(v1); - var env = Core.pathGet(data, ["config", "Env"]); - angular.forEach(env, function (envExp) { - if (envExp) { - var values = envExp.split("="); - if (values.length === 2 && values[0] == "OPENSHIFT_BUILD_NAME") { - var buildName = values[1]; - if (buildName) { - item.$buildId = buildName; - item.$buildUrl = Developer.projectWorkspaceLink(ns, projectName, "buildLogs/" + buildName); - } - } - } - }); - var labels = Core.pathGet(data, ["config", "Labels"]); - if (labels) { - item.$gitCommit = labels["io.openshift.build.commit.id"] || item.$gitCommit; - item.$gitCommitAuthor = labels["io.openshift.build.commit.author"] || item.$gitCommitAuthor; - item.$gitCommitDate = labels["io.openshift.build.commit.date"] || item.$gitCommitDate; - item.$gitCommitMessage = labels["io.openshift.build.commit.message"] || item.$gitCommitMessage; - item.$gitBranch = labels["io.openshift.build.commit.ref"] || item.$gitBranch; - if (!item.$gitUrl && item.$gitCommit) { - item.$gitUrl = Developer.projectWorkspaceLink(ns, projectName, "wiki/commitDetail///" + item.$gitCommit); - } - } - } - } - } - } - }); - } - } - }); - }); - } + } + function deleteReplicationControllers(replicationControllers, replicationController, onCompletedFn) { + if (!replicationController || !replicationControllers) { + return onCompletedFn(); } - if (selector) { - var selectorText = Kubernetes.labelsToString(selector, ","); - var podLinkUrl = UrlHelpers.join(Developer.projectLink(projectName), "namespace", ns, "pods"); - item.pods = []; - item.$podCounters = Kubernetes.createPodCounters(selector, status.pods, item.pods, selectorText, podLinkUrl); + var id = Kubernetes.getName(replicationController); + if (!id) { + Kubernetes.log.warn("No ID for replicationController " + angular.toJson(replicationController)); + } + else { + KubernetesReplicationControllers.delete({ + id: id + }, undefined, function () { + Kubernetes.log.debug("Deleted replicationController: ", id); + deleteReplicationControllers(replicationControllers, replicationControllers.shift(), onCompletedFn); + }, function (error) { + Kubernetes.log.debug("Error deleting replicationController: ", error); + deleteReplicationControllers(replicationControllers, replicationControllers.shift(), onCompletedFn); + }); } } - }); - // lets check for a project name if we have lots of RCs with no pods, lets remove them! - angular.forEach(projectInfos, function (project, projectName) { - var rcsNoPods = []; - var rcsWithPods = []; - angular.forEach(project.versions, function (versionInfo) { - var rcs = versionInfo.replicationControllers; - angular.forEach(rcs, function (item, name) { - var count = Kubernetes.podCounterTotal(item.$podCounters); - if (count) { - rcsWithPods.push(name); + function deletePods(pods, pod, onCompletedFn) { + if (!pod || !pods) { + return onCompletedFn(); + } + var id = Kubernetes.getName(pod); + if (!id) { + Kubernetes.log.warn("No ID for pod " + angular.toJson(pod)); + } + else { + KubernetesPods.delete({ + id: id + }, undefined, function () { + Kubernetes.log.debug("Deleted pod: ", id); + deletePods(pods, pods.shift(), onCompletedFn); + }, function (error) { + Kubernetes.log.debug("Error deleting pod: ", error); + deletePods(pods, pods.shift(), onCompletedFn); + }); + } + } + var services = [].concat(app.services); + deleteServices(services, services.shift(), function () { + var replicationControllers = [].concat(app.replicationControllers); + deleteReplicationControllers(replicationControllers, replicationControllers.shift(), function () { + var pods = [].concat(app.pods); + deletePods(pods, pods.shift(), onCompleteFn); + }); + }); + } + $scope.deleteSingleApp = function (app) { + $scope.deletePrompt([app]); + }; + $scope.deletePrompt = function (selected) { + if (angular.isString(selected)) { + selected = [{ + id: selected + }]; + } + UI.multiItemConfirmActionDialog({ + collection: selected, + index: '$name', + onClose: function (result) { + if (result) { + function deleteSelected(selected, next) { + if (next) { + var id = next.name; + Kubernetes.log.debug("deleting: ", id); + deleteApp(next, function () { + Kubernetes.log.debug("deleted: ", id); + deleteSelected(selected, selected.shift()); + }); + } + } + deleteSelected(selected, selected.shift()); } - else { - rcsNoPods.push(function () { - delete rcs[name]; - }); + }, + title: 'Delete Apps?', + action: 'The following Apps will be deleted:', + okText: 'Delete', + okClass: 'btn-danger', + custom: "This operation is permanent once completed!", + customClass: "alert alert-warning" + }).open(); + }; + $scope.appSelector = { + filterText: "", + folders: [], + selectedApps: [], + isOpen: function (folder) { + if ($scope.appSelector.filterText !== '' || folder.expanded) { + return "opened"; + } + return "closed"; + }, + getSelectedClass: function (app) { + if (app.abstract) { + return "abstract"; + } + if (app.selected) { + return "selected"; + } + return ""; + }, + showApp: function (app) { + return appMatches(app) && !appRunning(app); + }, + showFolder: function (folder) { + return !$scope.appSelector.filterText || folder.apps.some(function (app) { return appMatches(app) && !appRunning(app); }); + }, + clearSelected: function () { + angular.forEach($scope.model.appFolders, function (folder) { + angular.forEach(folder.apps, function (app) { + app.selected = false; + }); + }); + $scope.appSelector.selectedApps = []; + Core.$apply($scope); + }, + updateSelected: function () { + // lets update the selected apps + var selectedApps = []; + angular.forEach($scope.model.appFolders, function (folder) { + var apps = folder.apps.filter(function (app) { return app.selected; }); + if (apps) { + selectedApps = selectedApps.concat(apps); } }); - }); - if (rcsWithPods.length) { - // lets remove all the empty RCs - angular.forEach(rcsNoPods, function (fn) { - fn(); + $scope.appSelector.selectedApps = _.sortBy(selectedApps, "name"); + }, + select: function (app, flag) { + app.selected = flag; + $scope.appSelector.updateSelected(); + }, + hasSelection: function () { + return $scope.model.appFolders.any(function (folder) { return folder.apps.any(function (app) { return app.selected; }); }); + }, + runSelectedApps: function () { + // lets run all the selected apps + angular.forEach($scope.appSelector.selectedApps, function (app) { + var name = app.name; + var metadataPath = app.metadataPath; + if (metadataPath) { + // lets load the json/yaml + //var url = gitPathToUrl(Wiki.gitRelativeURL(branch, metadataPath)); + var url = Kubernetes.gitPathToUrl(metadataPath, branch); + if (url) { + $http.get(url). + success(function (data, status, headers, config) { + if (data) { + // lets convert the json object structure into a string + var json = angular.toJson(data); + var fn = function () { }; + Kubernetes.runApp($location, $scope, $http, KubernetesApiURL, json, name, fn, namespace); + } + }). + error(function (data, status, headers, config) { + $scope.summaryHtml = null; + Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); + }); + } + } }); + // lets go back to the apps view + $scope.appSelector.clearSelected(); + $scope.appSelectorShow = false; } - }); - if (hasObjectChanged(projectInfos, cache)) { - Developer.log.debug("project versions has changed!"); - answer[ns] = projectInfos; - } - } - Kubernetes.watch($scope, $element, "replicationcontrollers", ns, function (data) { - if (data) { - status.rcs = data; - updateModel(); - } - }); - Kubernetes.watch($scope, $element, "services", ns, function (data) { - if (data) { - status.services = data; - updateModel(); - } - }); - Kubernetes.watch($scope, $element, "routes", ns, function (data) { - if (data) { - status.routes = data; - updateModel(); - } - }); - Kubernetes.watch($scope, $element, "pods", ns, function (data) { - if (data) { - status.pods = data; - updateModel(); - } - }); - } - Developer.loadProjectVersions = loadProjectVersions; -})(Developer || (Developer = {})); + }; + }]); +})(Kubernetes || (Kubernetes = {})); /// -var Developer; -(function (Developer) { - /* - function homeBreadcrumb() { - return { - href: "/home", - label: "Home", - title: "Go to the home page" - } - } - */ - function developBreadcrumb() { - return { - href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces"), - label: "Develop", - title: "View all the apps for a project" - }; - } - function operateBreadcrumb() { - return { - href: UrlHelpers.join(HawtioCore.documentBase(), "/namespaces"), - label: "Manage", - title: "Manage the projects and resources inside them" - }; - } - function workspaceLink() { - return UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", Kubernetes.currentKubernetesNamespace()); - } - Developer.workspaceLink = workspaceLink; - function projectLink(projectId) { - var link = workspaceLink(); - if (projectId) { - return UrlHelpers.join(link, "/projects", projectId); - } - else { - return link; - } - } - Developer.projectLink = projectLink; - function createWorkspacesBreadcrumbs(developPerspective) { - /* - if (developPerspective) { - return [ - //homeBreadcrumb(), - developBreadcrumb() - ]; - } else { - return [ - //homeBreadcrumb(), - operateBreadcrumb() - ]; - } - */ - return []; - } - Developer.createWorkspacesBreadcrumbs = createWorkspacesBreadcrumbs; - function createWorkspacesSubNavBars(developPerspective) { - return activateCurrent([ - developBreadcrumb(), - operateBreadcrumb() - ]); - } - Developer.createWorkspacesSubNavBars = createWorkspacesSubNavBars; - function createWorkspaceBreadcrumbs(children, workspaceName) { - if (children === void 0) { children = null; } - if (workspaceName === void 0) { workspaceName = null; } - var answer = [ - //homeBreadcrumb(), - developBreadcrumb() - ]; - if (!workspaceName) { - workspaceName = Kubernetes.currentKubernetesNamespace(); - } - if (workspaceName) { - answer.push({ - href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces/", workspaceName), - label: workspaceName, - title: "View the project: " + workspaceName +/// +/// +var Kubernetes; +(function (Kubernetes) { + Kubernetes._module.directive("hawtioBreadcrumbs", ['HawtioBreadcrumbs', function (HawtioBreadcrumbs) { + return { + /* + templateUrl: Kubernetes.templatePath + 'breadcrumbs.html' + */ + link: function (scope, element, attrs) { + HawtioBreadcrumbs.apply(scope.$eval('breadcrumbConfig')); + } + }; + }]); +})(Kubernetes || (Kubernetes = {})); + +/// +/// +/// +var Kubernetes; +(function (Kubernetes) { + Kubernetes.BuildController = Kubernetes.controller("BuildController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", + function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { + $scope.kubernetes = KubernetesState; + $scope.model = KubernetesModel; + $scope.id = $routeParams["id"]; + $scope.schema = KubernetesSchema; + $scope.config = KubernetesSchema.definitions.os_build_Build; + Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); + $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs($scope.id); + $scope.subTabConfig = Developer.createProjectSubNavBars($scope.id, null, $scope); + $scope.$on('kubernetesModelUpdated', function () { + updateData(); }); - return processChildren(answer, children); - } - return answer; - } - Developer.createWorkspaceBreadcrumbs = createWorkspaceBreadcrumbs; - function createEnvironmentBreadcrumbs($scope, $location, $routeParams) { - var ns = Kubernetes.currentKubernetesNamespace(); - var namespacesLink = UrlHelpers.join(HawtioCore.documentBase(), "/kubernetes/namespace"); - var workspaceName = $routeParams.workspace; - var project = $routeParams.project; - if (workspaceName && project) { - var projectLink = UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", project); - $scope.$projectLink = projectLink; - $scope.$projectNamespaceLink = UrlHelpers.join(projectLink, "namespace", ns); - namespacesLink = UrlHelpers.join(projectLink, "namespace"); - // TODO use the logical name? - var envName = ns; - var buildConfig = null; - if ($scope.model) { - buildConfig = $scope.model.getProject(project, workspaceName); - if (buildConfig) { - // lets find the label for the namespace - var env = _.find(buildConfig.environments, { namespace: ns }); - if (env) { - envName = env['label'] || envName; - } - Developer.log.info("env found: " + env + " for nameppace " + ns + " on buildConfig: " + buildConfig); + $scope.$on('$routeUpdate', function ($event) { + updateData(); + }); + updateData(); + function updateData() { + $scope.item = null; + if ($scope.id) { + var url = Kubernetes.buildRestUrl($scope.id); + $http.get(url). + success(function (data, status, headers, config) { + if (data) { + $scope.entity = Kubernetes.enrichBuild(data); + } + $scope.fetched = true; + Core.$apply($scope); + }). + error(function (data, status, headers, config) { + Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); + }); } - } - var children = [ - { - href: UrlHelpers.join(projectLink, "environments"), - label: "Environments", - title: "View the environments for this project" - }, - { - href: UrlHelpers.join(namespacesLink, ns, "apps"), - label: envName, - title: "View the runtime of the workspace: " + ns + else { + $scope.fetched = true; + Core.$apply($scope); } - ]; - return createProjectBreadcrumbs(project, children, workspaceName); - } - else { - if (!workspaceName) { - workspaceName = Kubernetes.currentKubernetesNamespace(); } - return activateCurrent([ - //homeBreadcrumb(), - operateBreadcrumb(), - { - href: UrlHelpers.join(namespacesLink, ns, "apps"), - label: workspaceName, - title: "View the runtime of the workspace: " + ns + }]); +})(Kubernetes || (Kubernetes = {})); + +/// +/// +/// +var Kubernetes; +(function (Kubernetes) { + Kubernetes.BuildConfigController = Kubernetes.controller("BuildConfigController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", + function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { + $scope.kubernetes = KubernetesState; + $scope.model = KubernetesModel; + $scope.id = $routeParams["id"]; + $scope.schema = KubernetesSchema; + $scope.config = KubernetesSchema.definitions.os_build_BuildConfig; + Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); + $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs($scope.id); + $scope.subTabConfig = Developer.createProjectSubNavBars($scope.id); + $scope.$on('kubernetesModelUpdated', function () { + updateData(); + }); + $scope.$on('$routeUpdate', function ($event) { + updateData(); + }); + updateData(); + function updateData() { + $scope.item = null; + if ($scope.id) { + var url = Kubernetes.buildConfigRestUrl($scope.id); + $http.get(url). + success(function (data, status, headers, config) { + if (data) { + $scope.entity = data; + var sortedBuilds = null; + Kubernetes.enrichBuildConfig(data, sortedBuilds); + $scope.model.setProject($scope.entity); + } + $scope.fetched = true; + Core.$apply($scope); + }). + error(function (data, status, headers, config) { + Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); + }); + } + else { + $scope.fetched = true; + Core.$apply($scope); } - ]); - } - } - Developer.createEnvironmentBreadcrumbs = createEnvironmentBreadcrumbs; - function createProjectBreadcrumbs(projectName, children, workspaceName) { - if (projectName === void 0) { projectName = null; } - if (children === void 0) { children = null; } - if (workspaceName === void 0) { workspaceName = null; } - if (!workspaceName) { - workspaceName = Kubernetes.currentKubernetesNamespace(); - } - var answer = createWorkspaceBreadcrumbs(null, workspaceName); - if (workspaceName) { - if (projectName) { - answer.push({ - href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects"), - label: "Apps", - title: "View all the apps in this project" - }); - answer.push({ - href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName), - label: projectName, - title: "View the project: " + projectName - }); } - return processChildren(answer, children); - } - return answer; - } - Developer.createProjectBreadcrumbs = createProjectBreadcrumbs; - function createProjectSettingsBreadcrumbs(projectName, workspaceName) { - if (workspaceName === void 0) { workspaceName = null; } - var children = [{ - label: "Settings", - title: "View the settings of this app" - }]; - if (!projectName) { - var children = [{ - label: "New App", - title: "Lets make a new app" - }]; - } - return createProjectBreadcrumbs(projectName, children, workspaceName); - } - Developer.createProjectSettingsBreadcrumbs = createProjectSettingsBreadcrumbs; - function createWorkspaceSubNavBars() { - var workspaceName = Kubernetes.currentKubernetesNamespace(); - return activateCurrent([ - { - href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName), - label: "Apps", - class: "fa fa-rocket", - title: "View the apps in this project" - }, - { - isValid: function () { return Developer.jenkinsLink(); }, - href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "jenkinsJob"), - label: "Builds", - class: "fa fa-code", - title: "View the builds in this project" - }, - { - href: UrlHelpers.join(HawtioCore.documentBase(), "/kubernetes/namespace", workspaceName, "apps"), - label: "Runtime", - class: "fa fa-gears", - title: "View the runtime resources in this project" + }]); +})(Kubernetes || (Kubernetes = {})); + +/// +/// +/// +var Kubernetes; +(function (Kubernetes) { + Kubernetes.BuildConfigEditController = Kubernetes._module.controller("Kubernetes.BuildConfigEditController", ["$scope", "$element", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "K8SClientFactory", "SchemaRegistry", function ($scope, $element, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, K8SClientFactory, SchemaRegistry) { + $scope.kubernetes = KubernetesState; + $scope.model = KubernetesModel; + $scope.id = $routeParams["project"] || $routeParams["id"]; + $scope.schema = KubernetesSchema; + var mode = $scope.$eval('mode') || 'edit'; + Kubernetes.log.debug("Mode: ", mode); + var specConfig = SchemaRegistry.getSchema('io.fabric8.openshift.api.model.BuildConfigSpec'); + var gitBuildSource = SchemaRegistry.getSchema('io.fabric8.openshift.api.model.GitBuildSource'); + var buildSource = SchemaRegistry.getSchema('io.fabric8.openshift.api.model.BuildSource'); + var buildOutput = SchemaRegistry.getSchema('io.fabric8.openshift.api.model.BuildOutput'); + var resources = SchemaRegistry.getSchema('io.fabric8.kubernetes.api.model.ResourceRequirements'); + var revision = SchemaRegistry.getSchema('io.fabric8.openshift.api.model.SourceRevision'); + var strategy = SchemaRegistry.getSchema('io.fabric8.openshift.api.model.BuildStrategy'); + var customStrategy = SchemaRegistry.getSchema('io.fabric8.openshift.api.model.CustomBuildStrategy'); + var buildTriggerPolicy = SchemaRegistry.getSchema('io.fabric8.openshift.api.model.BuildTriggerPolicy'); + var getSecrets = function () { + return $scope.secrets; + }; + var secretSchemaType = "fabric8_SecretReference"; + var secretSchemaRef = "#/definitions/" + secretSchemaType; + var secretSchemaJavaType = "io.fabric8.console.SecretReference"; + var secretNameElement = { + "type": "string", + "enum": getSecrets, + required: true + }; + var secretSchema = { + "type": "object", + properties: { + "name": secretNameElement }, - { - href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "detail"), - label: "Details", - class: "fa fa-gear", - title: "View the project details" - } - ]); - } - Developer.createWorkspaceSubNavBars = createWorkspaceSubNavBars; - function createBuildsLink(workspaceName, projectName, jenkinsJobId) { - workspaceName = workspaceName || Kubernetes.currentKubernetesNamespace(); - return UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName, "jenkinsJob", jenkinsJobId); - } - function createProjectSubNavBars(projectName, jenkinsJobId, $scope) { - if (jenkinsJobId === void 0) { jenkinsJobId = null; } - if ($scope === void 0) { $scope = null; } - var workspaceName = Kubernetes.currentKubernetesNamespace(); - var projectLink = UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName); - var buildsLink = UrlHelpers.join(projectLink, "builds"); - if (!jenkinsJobId) { - jenkinsJobId = projectName; - } - var jenkinsBuildLink = null; - var pipelinesLink = null; - if (projectName && jenkinsJobId) { - jenkinsBuildLink = createBuildsLink(workspaceName, projectName, jenkinsJobId); - pipelinesLink = UrlHelpers.join(jenkinsBuildLink, "pipelines"); - } - function isJenkinsBuild() { - var answer = Developer.jenkinsLink() && jenkinsBuildLink; - if (answer && $scope) { - var entity = Developer.projectForScope($scope); - if (entity) { - return answer && entity.$jenkinsJob; - } + javaType: secretSchemaJavaType + }; + SchemaRegistry.addSchema(secretSchemaType, secretSchema); + // lets switch to the new secrets types: + var sourceSecretProperty = Core.pathGet(buildSource, ["properties", "sourceSecret"]); + angular.forEach([ + Core.pathGet(customStrategy, ["properties", "pullSecret"]), + sourceSecretProperty, + ], function (schemaType) { + if (schemaType) { + schemaType["type"] = secretSchemaType; + schemaType["$ref"] = secretSchemaRef; + schemaType["javaType"] = secretSchemaJavaType; } - return answer; + }); + // lets try make the buildSource's sourceSecret mandatory + //schemaSetRequired(customStrategy, 'pullSecret'); + Kubernetes.schemaSetRequired(buildSource, 'sourceSecret'); + if (sourceSecretProperty) { + Core.pathSet(sourceSecretProperty, ['properties', 'required'], true); + Core.pathSet(sourceSecretProperty, ['properties', 'input-attributes', 'required'], true); } - var answer = [ - { - href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName), - label: "All Apps", - class: 'fa fa-angle-double-left', - title: "View the apps in this project" + $scope.customStrategy = customStrategy; + $scope.buildSource = buildSource; + $scope.secrets = []; + // $scope.config = KubernetesSchema.definitions.os_build_BuildConfig; + //$scope.specConfig = KubernetesSchema.definitions.os_build_BuildConfigSpec; + // + specConfig.style = HawtioForms.FormStyle.STANDARD; + specConfig.properties['triggers']['label-attributes'] = { + style: 'display: none;' + }; + gitBuildSource.controls = ['uri', 'ref', '*']; + buildSource.properties['type'].type = 'hidden'; + buildSource.properties['type']['default'] = 'Git'; + buildSource.controls = ['git', 'contextDir', 'sourceSecret', '*']; + gitBuildSource['hideLegend'] = true; + buildSource['hideLegend'] = true; + buildOutput['hideLegend'] = true; + resources['hideLegend'] = true; + revision['hideLegend'] = true; + strategy['hideLegend'] = true; + strategy.controls = ['type', '*']; + strategy.properties['type'] = { + type: 'text', + enum: [{ + 'value': 'Custom', + 'label': 'Custom' + }, { + 'value': 'Docker', + 'label': 'Docker' + }, { + 'value': 'Source', + 'label': 'Source' + }] + }; + customStrategy['control-group-attributes'] = { + 'ng-show': "entity.type == 'Custom'" + }; + strategy.properties['dockerStrategy']['control-group-attributes'] = { + 'ng-show': "entity.type == 'Docker'" + }; + strategy.properties['sourceStrategy']['control-group-attributes'] = { + 'ng-show': "entity.type == 'Source'" + }; + buildTriggerPolicy.controls = ['type', '*']; + buildTriggerPolicy.properties['type'] = { + type: 'string', + enum: [{ + 'value': 'Github', + 'label': 'Github' + }, { + 'value': 'ImageChange', + 'label': 'Image Change' + }, { + 'value': 'Generic', + 'label': 'Generic' + }] + }; + buildTriggerPolicy.properties['generic']['control-group-attributes'] = { + 'ng-show': "entity.type == 'Generic'" + }; + buildTriggerPolicy.properties['github']['control-group-attributes'] = { + 'ng-show': "entity.type == 'Github'" + }; + buildTriggerPolicy.properties['imageChange']['control-group-attributes'] = { + 'ng-show': "entity.type == 'ImageChange'" + }; + // re-arranging the controls + //specConfig.controls = ['source', '*']; + // tabs + specConfig.tabs = { + "Source": ["source"], + "Revision": ["revision"], + "Output": ["output"], + "Resources": ["resources"], + "Strategy": ["strategy"], + "Triggers": ["triggers"], + "Service Account": ["serviceAccount"] + }; + /* + * wizard, needs an 'onFinish' function in the scope + specConfig.wizard = { + pages: { + Source: { + controls: ["source"] }, - { - template: "
" + Revision: { + controls: ["revision"] }, - { - href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName, "environments"), - isActive: function (subTab, path) { - //console.log("subTab: ", subTab, " path: ", path); - if (path === subTab.href) { - return true; - } - var rootPath = subTab.href.replace(/\/environments/, ''); - if (path === rootPath) { - return true; - } - return false; - }, - //href: UrlHelpers.join("/workspaces", workspaceName, "projects", projectName), - label: "Dashboard", - class: "fa fa-tachometer", - title: "View the app dashboard for the activity, environments and pipelines" + Output: { + controls: ["output"] }, - { - isValid: function () { return isJenkinsBuild() && pipelinesLink; }, - id: "pipelines", - href: pipelinesLink, - label: "Pipelines", - class: "fa fa-ellipsis-h", - title: "View the pipeline builds for this app" + Resources: { + controls: ["resources"] }, - { - isValid: function () { return !isJenkinsBuild(); }, - href: buildsLink, - label: "Builds", - class: "fa fa-bars", - title: "View the builds for this app" + Strategy: { + controls: ["strategy"] }, - { - isValid: function () { return isJenkinsBuild(); }, - id: "builds", - href: jenkinsBuildLink, - label: "Builds", - class: "fa fa-bars", - title: "View the Jenkins builds for this app" + Triggers: { + controls: ["triggers"] }, - { - isValid: function () { return isJenkinsBuild(); }, - href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName, "jenkinsJob", jenkinsJobId, "metrics"), - label: "Metrics", - class: "fa fa-bar-chart", - title: "View the metrics for this project" + "Service Account": { + controls: ["serviceAccount"] + } + } + }; + */ + $scope.entity = { + "apiVersion": "v1", + "kind": "BuildConfig", + "metadata": { + "name": "", + "labels": {} }, - /* - { - href: UrlHelpers.join("/workspaces", workspaceName, "projects", projectName, "tools"), - label: "Tools", - title: "View the tools for this project" - }, - */ - { - href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName, "buildConfigEdit"), - label: "Settings", - class: "fa fa-cog", - title: "View the app configuration", - isActive: function (subTab, path) { - if (_.endsWith(path, '/buildConfigEdit')) { - return true; - } - if (_.endsWith(path, '/forge/secrets')) { - return true; - } - if (_.endsWith(path, '/forge/command/devops-edit')) { - return true; + "spec": { + "source": { + "type": "Git" + }, + "strategy": { + "type": "Custom", + "customStrategy": { + "from": { + "kind": "DockerImage", + "name": "fabric8/openshift-s2i-jenkins-trigger" + }, + "env": [ + { + "name": "BASE_URI", + "value": jenkinsUrl + }, + { + "name": "JOB_NAME", + "value": jobName + } + ] } - return false; } } - ]; - var context = { - workspaceName: workspaceName, - projectName: projectName, - projectLink: projectLink, - jenkinsJobId: jenkinsJobId, - $scope: $scope }; - angular.forEach(Developer.customProjectSubTabFactories, function (fn) { - if (angular.isFunction(fn)) { - var subtab = fn(context); - if (subtab) { - if (angular.isArray(subtab)) { - angular.forEach(subtab, function (t) { - answer.push(t); - }); - } - else { - answer.push(subtab); - } + $scope.$watch('entity.spec.source.git.uri', function (val) { + if (!val) { + return; + } + var lastBit = val.match(/[^\/]+$/)[0]; + if (lastBit) { + var name = lastBit.replace(/\.git$/, ''); + Kubernetes.log.debug("name: ", name); + if (!Core.isBlank(name) + && Core.isBlank(Core.pathGet($scope.entity, ['metadata', 'name']))) { + Core.pathSet($scope.entity, ['metadata', 'name'], name); } } }); - return activateCurrent(answer); - } - Developer.createProjectSubNavBars = createProjectSubNavBars; - function createProjectSettingsSubNavBars(projectName, jenkinsJobId) { - if (jenkinsJobId === void 0) { jenkinsJobId = null; } - if (!projectName) { - return []; - } - var workspaceName = Kubernetes.currentKubernetesNamespace(); - var projectLink = UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName); - if (!jenkinsJobId) { - jenkinsJobId = projectName; + Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); + $scope.breadcrumbConfig = Developer.createProjectSettingsBreadcrumbs($scope.projectId); + $scope.subTabConfig = Developer.createProjectSubNavBars($scope.projectId); + $scope.tabs = Developer.createProjectSettingsSubNavBars($scope.projectId); + Kubernetes.watch($scope, $element, "secrets", $scope.namespace, onSecrets); + $scope.buildConfigClient = K8SClientFactory.create("buildconfigs", $scope.namespace); + $element.on('$destroy', function () { + $scope.$destroy(); + }); + $scope.$on('$destroy', function () { + K8SClientFactory.destroy($scope.buildConfigClient); + }); + /* + $scope.$on('kubernetesModelUpdated', function () { + updateData(); + }); + + */ + $scope.$on('$routeUpdate', function ($event) { + updateData(); + }); + $scope.save = function () { + Kubernetes.log.info("Saving!"); + var entity = $scope.entity; + var spec = (entity || {}).spec || {}; + // TODO update the jenkins job name! + // lets delete lots of cruft + var strategy = spec.strategy || {}; + delete strategy["dockerStrategy"]; + delete strategy["sourceStrategy"]; + delete spec["revision"]; + delete spec["output"]; + delete spec["resources"]; + var strategyPullSecretName = Core.pathGet(spec, ["strategy", "customStrategy", "pullSecret", "name"]); + var sourceSecretName = Core.pathGet(spec, ["source", "sourceSecret", "name"]); + Kubernetes.log.info("sourceSecretName: " + sourceSecretName); + Kubernetes.log.info("strategyPullSecretName: " + strategyPullSecretName); + if (!strategyPullSecretName && sourceSecretName) { + Core.pathSet(spec, ["strategy", "customStrategy", "pullSecret", "name"], sourceSecretName); + } + /* + // TODO hack until the put deals with updates + var metadata = entity.metadata; + if (metadata) { + delete metadata["resourceVersion"]; + } + */ + Kubernetes.log.info(angular.toJson(entity, true)); + $scope.buildConfigClient.put(entity, function (obj) { + Kubernetes.log.info("build config created!"); + var link = Developer.projectSecretsLink($scope.namespace, Kubernetes.getName(entity)); + if (link) { + Kubernetes.log.info("Navigating to: " + link); + $location.path(link); + } + else { + Kubernetes.log.warn("Could not find the edit pipeline link!"); + } + }); + }; + updateData(); + var jenkinsUrl = Developer.jenkinsLink(); + var jobName = ""; + function updateData() { + $scope.item = null; + if ($scope.id) { + var url = Kubernetes.buildConfigRestUrl($scope.id); + $http.get(url). + success(function (data, status, headers, config) { + if (data) { + $scope.entity = data; + var buildConfig = angular.copy(data); + var sortedBuilds = null; + Kubernetes.enrichBuildConfig(buildConfig, sortedBuilds); + $scope.buildConfig = buildConfig; + } + $scope.spec = ($scope.entity || {}).spec || {}; + $scope.fetched = true; + // lets update the tabs + $scope.subTabConfig = Developer.createProjectSubNavBars($scope.projectId, null, $scope); + Core.$apply($scope); + }). + error(function (data, status, headers, config) { + Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); + }); + } + else { + $scope.fetched = true; + $scope.spec = $scope.entity.spec; + Core.$apply($scope); + } } - var answer = [ - { - href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName, "buildConfigEdit"), - label: "Core", - title: "View the core build configuration" - }, - { - href: projectSecretsLink(workspaceName, projectName), - label: "Secrets", - title: "View or change the secrets used to edit source code in the source control system" - }, - { - href: editPipelineLink(workspaceName, projectName), - label: "Pipeline", - title: "View the DevOps and pipeline configuration" - }, - { - isValid: function () { return forgeProjectHasBuilder("maven"); }, - href: editMavenBuildLink(workspaceName, projectName), - label: "Maven", - title: "View the Maven build configuration" + function onSecrets(secrets) { + var array = []; + angular.forEach(secrets, function (secret) { + var name = Kubernetes.getName(secret); + if (name) { + array.push({ + label: name, + value: name, + "attributes": { + "title": name + }, + $secret: secret + }); + } + }); + $scope.secrets = _.sortBy(array, "label"); + var specSourceSecretNamePath = ['spec', 'source', 'sourceSecret', 'name']; + if ($scope.entity && !Core.pathGet($scope.entity, specSourceSecretNamePath)) { + var defaultSecretName = findDefaultImportSecretName(secrets); + Core.pathSet($scope.entity, specSourceSecretNamePath, defaultSecretName); } - ]; - return activateCurrent(answer); - } - Developer.createProjectSettingsSubNavBars = createProjectSettingsSubNavBars; - function forgeProjectHasBuilder(name) { - var forgeProject = Kubernetes.inject("ForgeProject"); - if (forgeProject) { - return forgeProject.hasBuilder(name); } - return false; - } - Developer.forgeProjectHasBuilder = forgeProjectHasBuilder; - function forgeProjectHasPerspective(name) { - var forgeProject = Kubernetes.inject("ForgeProject"); - if (forgeProject) { - return forgeProject.hasPerspective(name); - } - return false; - } - Developer.forgeProjectHasPerspective = forgeProjectHasPerspective; - function editPipelineLinkScope($scope) { - return editPipelineLink($scope.namespace, $scope.projectId || $scope.projectName || $scope.project); - } - Developer.editPipelineLinkScope = editPipelineLinkScope; - function createProjectLink(workspaceName) { - if (workspaceName === void 0) { workspaceName = null; } - if (!workspaceName) { - workspaceName = Kubernetes.currentKubernetesNamespace(); - } - return UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "/forge/createProject"); - } - Developer.createProjectLink = createProjectLink; - function editPipelineLink(workspaceName, projectName) { - return projectWorkspaceLink(workspaceName, projectName, "forge/command/devops-edit"); - } - Developer.editPipelineLink = editPipelineLink; - function editMavenBuildLink(workspaceName, projectName) { - return projectWorkspaceLink(workspaceName, projectName, "forge/command/fabric8-setup"); - } - Developer.editMavenBuildLink = editMavenBuildLink; - function projectSecretsLink(workspaceName, projectName) { - return projectWorkspaceLink(workspaceName, projectName, "forge/secrets", false); - } - Developer.projectSecretsLink = projectSecretsLink; - function secretsNamespaceLink(workspaceName, projectName, secretsNamespace) { - var prefix = projectWorkspaceLink(workspaceName, projectName, "") || "kubernetes"; - return UrlHelpers.join(prefix, "namespace", secretsNamespace, "secrets"); - } - Developer.secretsNamespaceLink = secretsNamespaceLink; - function projectWorkspaceLink(workspaceName, projectName, path, ignoreBlankProject) { - if (ignoreBlankProject === void 0) { ignoreBlankProject = true; } - if (ignoreBlankProject && !projectName) { - return ""; - } - if (!workspaceName) { - workspaceName = Kubernetes.currentKubernetesNamespace(); - } - return UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName, path); - } - Developer.projectWorkspaceLink = projectWorkspaceLink; - Developer.customProjectSubTabFactories = []; - function createJenkinsBreadcrumbs(projectName, jobId, buildId) { - var workspaceName = Kubernetes.currentKubernetesNamespace(); - var children = [ - { - id: "builds", - href: createBuildsLink(workspaceName, projectName, jobId), - label: "Builds", - title: "View the builds for this app" - } - ]; - if (buildId) { - children.push({ - id: "", - href: "", - label: "#" + buildId, - title: "Build #" + buildId + function findDefaultImportSecretName(secrets) { + var answer = null; + angular.forEach(secrets, function (secret) { + var name = Kubernetes.getName(secret); + if (!answer && name && name.startsWith("jenkins-login")) { + answer = name; + } }); - } - return createProjectBreadcrumbs(projectName, children); - } - Developer.createJenkinsBreadcrumbs = createJenkinsBreadcrumbs; - function createJenkinsSubNavBars(projectName, jenkinsJobId, buildId, extraOption) { - if (extraOption === void 0) { extraOption = null; } - var answer = createProjectSubNavBars(projectName, jenkinsJobId); - if (extraOption) { - extraOption.active = true; - answer.push(extraOption); - } - return answer; - } - Developer.createJenkinsSubNavBars = createJenkinsSubNavBars; - function createEnvironmentSubNavBars($scope, $location, $routeParams) { - var ns = Kubernetes.currentKubernetesNamespace(); - var workspaceName = $routeParams.workspace; - var project = $routeParams.project; - var projectLink = UrlHelpers.join(HawtioCore.documentBase(), "/kubernetes"); - if (workspaceName && project) { - projectLink = UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", project); - } - var namespacesLink = UrlHelpers.join(projectLink, "namespace"); - return activateCurrent([ - { - href: UrlHelpers.join(projectLink, "environments"), - label: "<< Back To App", - title: "Go back to the Dashboard for this App", - isValid: function () { return project; } - }, - { - href: UrlHelpers.join(namespacesLink, ns, "apps"), - label: "Overview", - class: "fa fa-list", - title: "Overview of all the apps for this project" - }, - { - href: UrlHelpers.join(namespacesLink, ns, "services"), - label: "Services", - class: "fa fa-plug", - title: "View the apps for this project" - }, - { - href: UrlHelpers.join(namespacesLink, ns, "replicationControllers"), - label: "Controllers", - class: "fa fa-clone", - title: "View the Replication Controllers for this project" - }, - { - href: UrlHelpers.join(namespacesLink, ns, "pods"), - label: "Pods", - class: "fa fa-puzzle-piece", - title: "View the pods for this project" - }, - { - href: UrlHelpers.join(namespacesLink, ns, "events"), - label: "Events", - class: "fa fa-newspaper-o", - title: "View the events for this project" - }, - { - href: UrlHelpers.join(namespacesLink, ns, "secrets"), - label: "Secrets", - class: "fa fa-key", - title: "View the secrets for this project" - }, - { - href: UrlHelpers.join(HawtioCore.documentBase(), "/kubernetes/hosts"), - label: "Nodes", - class: "fa fa-server", - title: "View the nodes for this project" - }, - { - href: UrlHelpers.join(namespacesLink, ns, "overview"), - label: "Diagram", - class: "fa fa-sitemap", - title: "View all the objects in this project and their relationship" - }, - { - href: UrlHelpers.join(namespacesLink, ns, "angryPods"), - label: "Angry Pods", - class: "fa fa-gamepad", - title: "Try the Angry Pods game!" - }, - ]); - } - Developer.createEnvironmentSubNavBars = createEnvironmentSubNavBars; - function namespaceLink($scope, $routeParams, path) { - if (path === void 0) { path = null; } - var ns = Kubernetes.currentKubernetesNamespace(); - var workspaceName = $routeParams.workspace; - var project = $routeParams.project; - var projectLink = UrlHelpers.join(HawtioCore.documentBase(), "/kubernetes"); - if (workspaceName && project) { - projectLink = UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", project); - } - return UrlHelpers.join(projectLink, "namespace", ns, path); - } - Developer.namespaceLink = namespaceLink; - /** - * Removes the URL query string if its inside the given text - */ - function trimQuery(text) { - if (text) { - var idx = text.indexOf("?"); - if (idx >= 0) { - return text.substring(0, idx); + if (!answer) { + angular.forEach(secrets, function (secret) { + var name = Kubernetes.getName(secret); + if (!answer && name && name.startsWith("jenkins-token")) { + answer = name; + } + }); } + return answer; } - return text; - } - function activateCurrent(navBarItems) { - navBarItems = _.compact(navBarItems); - var injector = HawtioCore.injector; - var $location = injector ? injector.get("$location") : null; - if ($location) { - var path = trimQuery($location.path()); - var found = false; - function makeActive(item) { - item.active = true; - found = true; - } - angular.forEach(navBarItems, function (item) { - if (item) { - if (angular.isFunction(item.isActive)) { - if (!found && item.isActive(item, path)) { - makeActive(item); - } + switch (mode) { + case 'create': + delete specConfig.tabs; + _.forIn(buildSource.properties, function (property, name) { + if (name !== 'git') { + Kubernetes.log.info("Hiding property: ", name); + property.hidden = true; + } + }); + _.forIn(gitBuildSource.properties, function (property, name) { + if (name !== 'uri') { + Kubernetes.log.info("Hiding property: ", name); + property.hidden = true; } else { - var href = item.href; - var trimHref = trimQuery(href); - if (!found && trimHref && trimHref === path) { - makeActive(item); - } + property.label = "Git URL"; + property['input-attributes'] = { + 'required': true + }; } - } - }); - } - return navBarItems; - } - function processChildren(answer, children) { - if (children) { - if (angular.isArray(children)) { - answer = answer.concat(children); - } - else { - answer.push(children); - } + }); + _.forIn(specConfig.properties, function (property, name) { + if (name !== 'source') { + Kubernetes.log.info("Hiding property: ", name); + property.hidden = true; + } + }); + break; + case 'edit': + default: } - activateCurrent(answer); - return answer; - } -})(Developer || (Developer = {})); + $scope.specConfig = specConfig; + }]); +})(Kubernetes || (Kubernetes = {})); /// -/// -/// -/// -/// - -/// -/// -var Developer; -(function (Developer) { - Developer._module = angular.module(Developer.pluginName, ['hawtio-core', 'hawtio-ui', 'ui.codemirror', 'nvd3', 'treeControl']); - Developer.controller = PluginHelpers.createControllerFunction(Developer._module, Developer.pluginName); - Developer.route = PluginHelpers.createRoutingFunction(Developer.templatePath); - Developer._module.config(['$routeProvider', function ($routeProvider) { - $routeProvider.when(Developer.context, Developer.route('workspaces.html', false)) - .when("/namespaces", Developer.route('workspaces.html', false)) - .when(UrlHelpers.join(Developer.context, '/:namespace'), Developer.route('projects.html', false)) - .when(UrlHelpers.join(Developer.context, '/:namespace/detail'), Developer.route('workspace.html', false)) - .when(UrlHelpers.join(Developer.context, '/:namespace/jenkinsJob'), Developer.route('jenkinsJobs.html', false)) - .when(UrlHelpers.join(Developer.context, '/:namespace/projects'), Developer.route('projects.html', false)) - .when(UrlHelpers.join(Developer.context, '/:namespace/projects/:id'), Developer.route('environments.html', false)) - .when(UrlHelpers.join(Developer.context, '/:namespace/projects/:id/detail'), Kubernetes.route('buildConfig.html', false)) - .when(UrlHelpers.join(Developer.context, '/:namespace/projects/:id/builds'), Kubernetes.route('builds.html', false)) - .when(UrlHelpers.join(Developer.context, '/:namespace/projects/:id/environments'), Developer.route('environments.html', false)) - .when(UrlHelpers.join(Developer.context, '/:namespace/projects/:id/jenkinsJob/:job'), Developer.route('jenkinsJob.html', false)) - .when(UrlHelpers.join(Developer.context, '/:namespace/projects/:id/jenkinsJob/:job/log/:build'), Developer.route('jenkinsLog.html', false)) - .when(UrlHelpers.join(Developer.context, '/:namespace/projects/:id/jenkinsJob/:job/pipelines'), Developer.route('pipelines.html', false)) - .when(UrlHelpers.join(Developer.context, '/:namespace/projects/:id/jenkinsJob/:job/pipeline/:build'), Developer.route('pipeline.html', false)) - .when(UrlHelpers.join(Developer.context, '/:namespace/projects/:id/jenkinsJob/:job/metrics'), Developer.route('jenkinsMetrics.html', false)) - .when(UrlHelpers.join(Developer.context, '/:namespace/projects/:id/jenkinsMetrics'), Developer.route('jenkinsMetrics.html', false)) - .when(UrlHelpers.join(Developer.context, '/:namespace/projects/:id/tools'), Developer.route('tools.html', false)) - .when(UrlHelpers.join(Developer.context, '/:workspace/projects/:project/environments/:namespace'), Developer.route('environment.html', false)) - .when(UrlHelpers.join(Developer.context, '/:workspace/projects/:project/environments/:namespace'), Developer.route('environment.html', false)) - .when(UrlHelpers.join(Developer.context, '/Aggregate/overview'), Developer.route('addDataFile.html', false)) - .otherwise("/workspaces"); - }]); - Developer._module.run(['viewRegistry', 'ServiceRegistry', 'HawtioNav', 'KubernetesModel', '$templateCache', 'DataInfoModel', function (viewRegistry, ServiceRegistry, HawtioNav, KubernetesModel, $templateCache, DataInfoModel) { - Developer.log.debug("Running"); - viewRegistry['workspaces'] = Kubernetes.templatePath + 'layoutKubernetes.html'; - viewRegistry['namespaces'] = Kubernetes.templatePath + 'layoutKubernetes.html'; - var builder = HawtioNav.builder(); - var workspaces = builder.id('workspaces') - .href(function () { return Developer.context; }) - .title(function () { return '查看'; }) - .build(); - /* - var workspaceOverview = builder.id('workspaces') - .href(() => UrlHelpers.join(context, 'overview')) - .title(() => 'Workspace') - .build(); - */ - /* var dataadd = builder.id('dataadd') - .href(() => context) - .title(() => '汇总') - .build(); - */ - var Aggregate = builder.id('Aggregate;') - .rank(200) - .href(function () { return Developer.context; }) - .title(function () { return '数据汇总'; }) - .tabs(workspaces) - .build(); - HawtioNav.add(Aggregate); - }]); - Developer._module.filter('asTrustedHtml', ['$sce', function ($sce) { - return function (text) { - return $sce.trustAsHtml(text); - }; - }]); - hawtioPluginLoader.addModule(Developer.pluginName); - // for scroll-glue directive - hawtioPluginLoader.addModule('luegg.directives'); -})(Developer || (Developer = {})); - -/// -var Developer; -(function (Developer) { - Developer._module.controller('Developer.EnvironmentPanelController', ["$scope", "$element", "$location", "$routeParams", "KubernetesModel", "$http", "$timeout", "KubernetesState", "KubernetesApiURL", function ($scope, $element, $location, $routeParams, KubernetesModel, $http, $timeout, KubernetesState, KubernetesApiURL) { - $scope.envVersions = {}; - $scope.model = KubernetesModel; - $scope.env = $scope.$eval('env'); - $scope.buildConfig = $scope.$eval('entity'); - $scope.open = true; - $scope.toggle = function () { return $scope.open = !$scope.open; }; - var caches = {}; - Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); - Developer.loadProjectVersions($scope, $element, $scope.buildConfig, $scope.env, $scope.env.namespace, $scope.envVersions, caches); - }]); -})(Developer || (Developer = {})); - -/// -/// -/// -/// -/// -var Developer; -(function (Developer) { - Developer.HomeController = Developer.controller("HomeController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", - function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { - $scope.namespace = Kubernetes.currentKubernetesNamespace(); - }]); -})(Developer || (Developer = {})); - -/// -/// -/// -/// -/// -var Developer; -(function (Developer) { - Developer.JenkinsJobController = Developer.controller("JenkinsJobController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "ServiceRegistry", - function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, ServiceRegistry) { +/// +var Kubernetes; +(function (Kubernetes) { + Kubernetes.BuildConfigsController = Kubernetes.controller("BuildConfigsController", ["$scope", "KubernetesModel", "KubernetesState", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", + function ($scope, KubernetesModel, KubernetesState, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; - $scope.id = $routeParams["id"]; - $scope.jobId = $routeParams["job"]; - $scope.schema = KubernetesSchema; - $scope.entityChangedCache = {}; - Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); - $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs($scope.id); - $scope.subTabConfig = Developer.createProjectSubNavBars($scope.id, $scope.jobId); - $scope.$on('kubernetesModelUpdated', function () { - updateData(); - }); - $scope.$on('$routeUpdate', function ($event) { - updateData(); - }); $scope.tableConfig = { - data: 'job.builds', + data: 'model.buildconfigs', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, @@ -3285,83 +3054,190 @@ var Developer; }, columnDefs: [ { - field: '$sortOrder', + field: 'metadata.name', displayName: 'Name', - cellTemplate: $templateCache.get("jenkinsBuildIdTemplate.html") + cellTemplate: $templateCache.get("buildConfigLinkTemplate.html") }, + /* + { + field: 'spec.source.type', + displayName: 'Source' + }, + */ { - field: '$buildLink', - displayName: 'Views', - cellTemplate: $templateCache.get("jenkinsBuildButtonsTemplate.html") + field: 'spec.source.git.uri', + displayName: 'Repository' }, + /* + { + field: 'spec.strategy.type', + displayName: 'Strategy' + }, + { + field: 'spec.strategy.stiStrategy.image', + displayName: 'Source Image' + }, + { + field: 'spec.output.imageTag', + displayName: 'Output Image' + }, + */ { - field: '$duration', - displayName: 'Duration', - cellTemplate: $templateCache.get("jenkinsBuildDurationTemplate.html") + field: '$fabric8CodeViews', + displayName: 'Code', + width: "***", + minWidth: 500, + cellTemplate: $templateCache.get("buildConfigCodeViewsTemplate.html") }, { - field: '$timestamp', - displayName: 'Time Started', - cellTemplate: $templateCache.get("jenkinsBuildTimestampTemplate.html") + field: '$fabric8BuildViews', + displayName: 'Builds', + width: "***", + minWidth: 500, + cellTemplate: $templateCache.get("buildConfigBuildViewsTemplate.html") + }, + { + field: '$fabric8EnvironmentViews', + displayName: 'Environments', + width: "***", + minWidth: 500, + cellTemplate: $templateCache.get("buildConfigEnvironmentViewsTemplate.html") + }, + { + field: '$fabric8TeamViews', + displayName: 'People', + width: "***", + minWidth: 500, + cellTemplate: $templateCache.get("buildConfigTeamViewsTemplate.html") } ] }; - updateData(); - function updateData() { - if ($scope.jobId) { - var url = Kubernetes.kubernetesProxyUrlForServiceCurrentNamespace(Developer.jenkinsServiceNameAndPort, UrlHelpers.join("job", $scope.jobId, "api/json?depth=1")); - if (url && (!$scope.job || Kubernetes.keepPollingModel)) { - $http.get(url). - success(function (data, status, headers, config) { - if (data) { - Developer.enrichJenkinsJob(data, $scope.id, $scope.jobId); - if (Developer.hasObjectChanged(data, $scope.entityChangedCache)) { - Developer.log.info("entity has changed!"); - $scope.job = data; + Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); + // TODO + // $scope.isLoggedIntoGogs = Forge.isLoggedIntoGogs; + $scope.deletePrompt = function (selected) { + UI.multiItemConfirmActionDialog({ + collection: selected, + index: '$name', + onClose: function (result) { + if (result) { + function deleteSelected(selected, next) { + if (next) { + deleteEntity(next, function () { + deleteSelected(selected, selected.shift()); + }); + } + else { + updateData(); } } - $scope.model.fetched = true; - Core.$apply($scope); - }). - error(function (data, status, headers, config) { - Developer.log.warn("Failed to load " + url + " " + data + " " + status); - }); - } + deleteSelected(selected, selected.shift()); + } + }, + title: 'Delete Build Configs?', + action: 'The following Build Configs will be deleted:', + okText: 'Delete', + okClass: 'btn-danger', + custom: "This operation is permanent once completed!", + customClass: "alert alert-warning" + }).open(); + }; + function deleteEntity(selection, nextCallback) { + var name = (selection || {}).$name; + if (name) { + console.log("About to delete build config: " + name); + var url = Kubernetes.buildConfigRestUrl(name); + $http.delete(url). + success(function (data, status, headers, config) { + nextCallback(); + }). + error(function (data, status, headers, config) { + Kubernetes.log.warn("Failed to delete build config on " + url + " " + data + " " + status); + }); } else { - $scope.model.fetched = true; - Core.$apply($scope); + console.log("warning: no name for selection: " + angular.toJson(selection)); } } + function updateData() { + } + updateData(); }]); -})(Developer || (Developer = {})); +})(Kubernetes || (Kubernetes = {})); /// -/// -/// -/// -/// -var Developer; -(function (Developer) { - Developer.JenkinsJobsController = Developer.controller("JenkinsJobsController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "ServiceRegistry", - function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, ServiceRegistry) { +/// +/// +var Kubernetes; +(function (Kubernetes) { + Kubernetes.BuildLogsController = Kubernetes.controller("BuildLogsController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", + function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["id"]; $scope.schema = KubernetesSchema; - $scope.jenkins = null; - $scope.entityChangedCache = {}; + $scope.config = KubernetesSchema.definitions.os_build_Build; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); - $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs(); - $scope.subTabConfig = Developer.createWorkspaceSubNavBars(); $scope.$on('kubernetesModelUpdated', function () { updateData(); }); $scope.$on('$routeUpdate', function ($event) { updateData(); }); + $scope.logsText = "Loading logs..."; + updateData(); + function updateData() { + $scope.item = null; + if ($scope.id) { + var url = Kubernetes.buildRestUrl($scope.id); + $http.get(url). + success(function (data, status, headers, config) { + if (data) { + $scope.entity = Kubernetes.enrichBuild(data); + } + $scope.fetched = true; + Core.$apply($scope); + }). + error(function (data, status, headers, config) { + Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); + }); + url = Kubernetes.buildLogsRestUrl($scope.id); + $http.get(url). + success(function (data, status) { + $scope.logsText = data; + Core.$apply($scope); + }). + error(function (data, status) { + $scope.logsText = "Failed to load logs from: " + url + " " + data + " status: " + status; + Core.$apply($scope); + }). + catch(function (error) { + $scope.logsText = "Failed to load logs: " + angular.toJson(error, true); + Core.$apply($scope); + }); + } + else { + $scope.fetched = true; + Core.$apply($scope); + } + } + }]); +})(Kubernetes || (Kubernetes = {})); + +/// +/// +var Kubernetes; +(function (Kubernetes) { + Kubernetes.BuildsController = Kubernetes.controller("BuildsController", ["$scope", "KubernetesModel", "KubernetesState", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", + function ($scope, KubernetesModel, KubernetesState, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { + $scope.kubernetes = KubernetesState; + $scope.model = KubernetesModel; + $scope.buildConfigId = $routeParams["id"]; + $scope.$on('kubernetesModelUpdated', function () { + Core.$apply($scope); + }); $scope.tableConfig = { - data: 'jenkins.jobs', + data: 'model.builds', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, @@ -3371,4853 +3247,3865 @@ var Developer; }, columnDefs: [ { - field: 'name', + field: 'metadata.name', displayName: 'Name', - cellTemplate: $templateCache.get("jenkinsJobNameTemplate.html") + cellTemplate: $templateCache.get("buildLinkTemplate.html") }, { - field: '$buildLink', - displayName: 'Views', - cellTemplate: $templateCache.get("jenkinsJobButtonsTemplate.html") + field: '$creationDate', + displayName: 'Time', + defaultSort: true, + cellTemplate: $templateCache.get("buildTimeTemplate.html") }, { - field: '$lastSuccessfulBuildNumber', - displayName: 'Last Success', - cellTemplate: $templateCache.get("jenkinsLastSuccessTemplate.html") + field: 'status', + displayName: 'Status', + cellTemplate: $templateCache.get("buildStatusTemplate.html") }, { - field: '$lastFailedlBuildNumber', - displayName: 'Last Failure', - cellTemplate: $templateCache.get("jenkinsLastFailureTemplate.html") + field: '$logsLink', + displayName: 'Logs', + cellTemplate: $templateCache.get("buildLogsTemplate.html") }, { - field: '$duration', - displayName: 'Last Duration', - cellTemplate: $templateCache.get("jenkinsBuildDurationTemplate.html") + field: '$podLink', + displayName: 'Build Pod', + cellTemplate: $templateCache.get("buildPodTemplate.html") }, + /* + { + field: 'parameters.source.type', + displayName: 'Source' + }, + */ { - field: '$timestamp', - displayName: 'Time Started', - cellTemplate: $templateCache.get("jenkinsBuildTimestampTemplate.html") - } - ] + field: 'spec.source.git.uri', + displayName: 'Repository', + cellTemplate: $templateCache.get("buildRepositoryTemplate.html") + }, + { + field: 'spec.strategy.type', + displayName: 'Strategy' + }, + { + field: 'spec.strategy.sourceStrategy.from.name', + displayName: 'Source Image' + }, + { + field: 'spec.output.to.name', + displayName: 'Output Image' + }] }; - updateData(); + Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); + $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs($scope.buildConfigId); + $scope.subTabConfig = Developer.createProjectSubNavBars($scope.buildConfigId, null, $scope); + $scope.$on('kubernetesModelUpdated', function () { + updateData(); + }); function updateData() { - // TODO only need depth 2 to be able to fetch the lastBuild - var url = Kubernetes.kubernetesProxyUrlForServiceCurrentNamespace(Developer.jenkinsServiceNameAndPort, "api/json?depth=2"); - Developer.log.info(""); - if (url && (!$scope.jenkins || Kubernetes.keepPollingModel)) { - $http.get(url, Developer.jenkinsHttpConfig). - success(function (data, status, headers, config) { - if (data) { - Developer.enrichJenkinsJobs(data, $scope.id, $scope.id); - if (Developer.hasObjectChanged(data, $scope.entityChangedCache)) { - Developer.log.info("entity has changed!"); - $scope.jenkins = data; - } - } - $scope.model.fetched = true; - Core.$apply($scope); - }). - error(function (data, status, headers, config) { - Developer.log.warn("Failed to load " + url + " " + data + " " + status); - }); + if ($scope.model) { + var builds = $scope.model.builds; + var buildConfigId = $scope.buildConfigId; + Kubernetes.enrichBuilds(builds); + $scope.fetched = true; + if (buildConfigId) { + $scope.buildConfig = $scope.model.getBuildConfig(buildConfigId); + } } } + updateData(); + /* + $scope.$keepPolling = () => keepPollingModel; + $scope.fetch = PollHelpers.setupPolling($scope, (next:() => void) => { + var url = buildsRestURL(); + $http.get(url). + success(function (data, status, headers, config) { + if (data) { + //console.log("got data " + angular.toJson(data, true)); + $scope.builds = enrichBuilds(data.items); + $scope.fetched = true; + + if ($scope.model) { + $scope.buildConfig = $scope.model.getBuildConfig($scope.buildConfigId); + } + } + Core.$apply($scope); + next(); + }). + error(function (data, status, headers, config) { + log.warn("Failed to load " + url + " " + data + " " + status); + Core.$apply($scope); + next(); + }); + }); + + $scope.fetch(); + */ }]); -})(Developer || (Developer = {})); +})(Kubernetes || (Kubernetes = {})); /// /// +/// var Kubernetes; (function (Kubernetes) { - Kubernetes._module = angular.module(Kubernetes.pluginName, ['hawtio-core', 'hawtio-ui', 'ui.codemirror', 'ui.validate', 'kubernetesUI']); - Kubernetes.controller = PluginHelpers.createControllerFunction(Kubernetes._module, Kubernetes.pluginName); - Kubernetes.route = PluginHelpers.createRoutingFunction(Kubernetes.templatePath); - Kubernetes._module.config(['$routeProvider', function ($routeProvider) { - $routeProvider - .when(UrlHelpers.join(Kubernetes.context, '/pods'), Kubernetes.route('pods.html', false)) - .when(UrlHelpers.join(Kubernetes.context, 'replicationControllers'), Kubernetes.route('replicationControllers.html', false)) - .when(UrlHelpers.join(Kubernetes.context, 'services'), Kubernetes.route('services.html', false)) - .when(UrlHelpers.join(Kubernetes.context, 'events'), Kubernetes.route('events.html', false)) - .when(UrlHelpers.join(Kubernetes.context, 'apps'), Kubernetes.route('apps.html', false)) - .when(UrlHelpers.join(Kubernetes.context, 'apps/:namespace'), Kubernetes.route('apps.html', false)) - .when(UrlHelpers.join(Kubernetes.context, 'templates'), Kubernetes.route('templates.html', false)) - .when(UrlHelpers.join(Kubernetes.context, 'hosts'), Kubernetes.route('hosts.html', false)) - .when(UrlHelpers.join(Kubernetes.context, 'hosts/:id'), Kubernetes.route('host.html', true)) - .when(UrlHelpers.join(Kubernetes.context, 'pipelines'), Kubernetes.route('pipelines.html', false)) - .when(UrlHelpers.join(Kubernetes.context, 'overview'), Kubernetes.route('overview.html', true)) - .when(Kubernetes.context, { redirectTo: UrlHelpers.join(Kubernetes.context, 'replicationControllers') }); - angular.forEach([Kubernetes.context, "/workspaces/:workspace/projects/:project"], function (context) { - $routeProvider - .when(UrlHelpers.join(context, '/namespace/:namespace/podCreate'), Kubernetes.route('podCreate.html', false)) - .when(UrlHelpers.join(context, '/namespace/:namespace/podEdit/:id'), Kubernetes.route('podEdit.html', false)) - .when(UrlHelpers.join(context, '/namespace/:namespace/pods'), Kubernetes.route('pods.html', false)) - .when(UrlHelpers.join(context, '/namespace/:namespace/pods/:id'), Kubernetes.route('pod.html', false)) - .when(UrlHelpers.join(context, '/namespace/:namespace/replicationControllers'), Kubernetes.route('replicationControllers.html', false)) - .when(UrlHelpers.join(context, '/namespace/:namespace/replicationControllers/:id'), Kubernetes.route('replicationController.html', false)) - .when(UrlHelpers.join(context, '/namespace/:namespace/replicationControllerCreate'), Kubernetes.route('replicationControllerCreate.html', false)) - .when(UrlHelpers.join(context, '/namespace/:namespace/replicationControllerEdit/:id'), Kubernetes.route('replicationControllerEdit.html', false)) - .when(UrlHelpers.join(context, '/namespace/:namespace/secrets'), Kubernetes.route('secrets.html', false)) - .when(UrlHelpers.join(context, '/namespace/:namespace/secrets/:id'), Kubernetes.route('secret.html', false)) - .when(UrlHelpers.join(context, '/namespace/:namespace/secretCreate'), Kubernetes.route('secret.html', false)) - .when(UrlHelpers.join(context, '/namespace/:namespace/services'), Kubernetes.route('services.html', false)) - .when(UrlHelpers.join(context, '/namespace/:namespace/services/:id'), Kubernetes.route('service.html', false)) - .when(UrlHelpers.join(context, '/namespace/:namespace/serviceCreate'), Kubernetes.route('serviceCreate.html', false)) - .when(UrlHelpers.join(context, '/namespace/:namespace/serviceEdit/:id'), Kubernetes.route('serviceEdit.html', false)) - .when(UrlHelpers.join(context, '/namespace/:namespace/events'), Kubernetes.route('events.html', false)) - .when(UrlHelpers.join(context, '/namespace/:namespace/apps'), Kubernetes.route('apps.html', false)) - .when(UrlHelpers.join(context, '/namespace/:namespace/overview'), Kubernetes.route('overview.html', true)) - .when(UrlHelpers.join(context, '/namespace/:namespace/templates/:targetNamespace'), Kubernetes.route('templates.html', false)) - .when(UrlHelpers.join(context, '/namespace/:namespace'), Kubernetes.route('apps.html', false)) - .when(UrlHelpers.join(context, 'builds'), Kubernetes.route('builds.html', false)) - .when(UrlHelpers.join(context, 'builds/:id'), Kubernetes.route('build.html', true)) - .when(UrlHelpers.join(context, 'buildLogs/:id'), Kubernetes.route('buildLogs.html', true)) - .when(UrlHelpers.join(context, 'buildConfigs'), Kubernetes.route('buildConfigs.html', false)) - .when(UrlHelpers.join(context, 'buildConfigs/:id'), Kubernetes.route('buildConfig.html', true)) - .when(UrlHelpers.join(context, 'buildConfigEdit/:id'), Kubernetes.route('buildConfigEdit.html', true)) - .when(UrlHelpers.join(context, 'deploymentConfigs'), Kubernetes.route('deploymentConfigs.html', false)) - .when(UrlHelpers.join(context, 'deploymentConfigs/:id'), Kubernetes.route('deploymentConfig.html', true)) - .when(UrlHelpers.join(context, 'imageRepositories'), Kubernetes.route('imageRepositories.html', false)); - }); - angular.forEach([Kubernetes.context, "/workspaces/:workspace", "/workspaces/:workspace/projects/:project"], function (context) { - $routeProvider - .when(UrlHelpers.join(context, 'buildConfigEdit'), Kubernetes.route('buildConfigEdit.html', true)) - .when(UrlHelpers.join(context, 'buildConfigEdit/:id'), Kubernetes.route('buildConfigEdit.html', true)) - .when(UrlHelpers.join(context, 'importProject'), Kubernetes.route('importProject.html', true)); - }); - }]); - Kubernetes._module.factory('AppLibraryURL', ['$rootScope', function ($rootScope) { - return UrlHelpers.join(Kubernetes.kubernetesApiUrl(), "/proxy", Kubernetes.kubernetesNamespacePath(), "/services/app-library"); - }]); - Kubernetes._module.factory('WikiGitUrlPrefix', function () { - return UrlHelpers.join(Kubernetes.kubernetesApiUrl(), "/proxy", Kubernetes.kubernetesNamespacePath(), "services/app-library"); - }); - Kubernetes._module.factory('wikiRepository', ["$location", "localStorage", function ($location, localStorage) { - return false; - }]); - Kubernetes._module.factory('ConnectDialogService', ['$rootScope', function ($rootScope) { - return { - dialog: new UI.Dialog(), - saveCredentials: false, - userName: null, - password: null, - jolokiaUrl: null, - containerName: null, - view: null + // controller for connecting to a remote container via jolokia + Kubernetes.ConnectController = Kubernetes.controller("ConnectController", [ + "$scope", "localStorage", "userDetails", "ConnectDialogService", "$browser", + function ($scope, localStorage, userDetails, ConnectDialogService, $browser) { + $scope.doConnect = function (entity) { + var connectUrl = new URI().path(UrlHelpers.join(HawtioCore.documentBase(), '/java/index.html')); + var returnTo = new URI().toString(); + var title = entity.metadata.name || 'Untitled Container'; + var token = userDetails.token || ''; + connectUrl.hash(token).query({ + jolokiaUrl: entity.$jolokiaUrl, + title: title, + returnTo: returnTo + }); + Kubernetes.log.debug("Connect URI: ", connectUrl.toString()); + window.open(connectUrl.toString()); }; }]); - Kubernetes._module.filter('kubernetesPageLink', function () { return Kubernetes.entityPageLink; }); - Kubernetes._module.filter('relativeTime', function () { - return function (date) { - return humandate.relativeTime(date); - }; - }); - Kubernetes._module.run(['viewRegistry', 'ServiceRegistry', 'HawtioNav', 'KubernetesModel', '$templateCache', function (viewRegistry, ServiceRegistry, HawtioNav, KubernetesModel, $templateCache) { - Kubernetes.log.debug("Running"); - viewRegistry['kubernetes'] = Kubernetes.templatePath + 'layoutKubernetes.html'; - var builder = HawtioNav.builder(); - var apps = builder.id('kube-apps') - .href(function () { return UrlHelpers.join(Kubernetes.context, 'apps'); }) - .title(function () { return 'Apps'; }) - .build(); - var services = builder.id('kube-services') - .href(function () { return UrlHelpers.join(Kubernetes.context, 'services'); }) - .title(function () { return 'Services'; }) - .build(); - var controllers = builder.id('kube-controllers') - .href(function () { return UrlHelpers.join(Kubernetes.context, 'replicationControllers'); }) - .title(function () { return 'oracle服务'; }) - .build(); - var pods = builder.id('kube-pods') - .href(function () { return UrlHelpers.join(Kubernetes.context, 'pods'); }) - .title(function () { return '测试页面'; }) - .build(); - var events = builder.id('kube-events') - .href(function () { return UrlHelpers.join(Kubernetes.context, 'events'); }) - .title(function () { return '服务启动日志'; }) - .build(); - var hosts = builder.id('kube-hosts') - .href(function () { return UrlHelpers.join(Kubernetes.context, 'hosts'); }) - .title(function () { return '集群节点'; }) - .build(); - var overview = builder.id('kube-overview') - .href(function () { return UrlHelpers.join(Kubernetes.context, 'overview'); }) - .title(function () { return 'Diagram'; }) - .build(); - var builds = builder.id('kube-builds') - .href(function () { return UrlHelpers.join(Kubernetes.context, 'builds'); }) - .title(function () { return 'Builds'; }) - .build(); - var buildConfigs = builder.id('kube-buildConfigs') - .href(function () { return UrlHelpers.join(Kubernetes.context, 'buildConfigs'); }) - .title(function () { return 'Build Configs'; }) - .build(); - var deploys = builder.id('kube-deploys') - .href(function () { return UrlHelpers.join(Kubernetes.context, 'deploymentConfigs'); }) - .title(function () { return 'Deploys'; }) - .build(); - var imageRepositories = builder.id('kube-imageRepositories') - .href(function () { return UrlHelpers.join(Kubernetes.context, 'imageRepositories'); }) - .title(function () { return 'Registries'; }) - .build(); - var pipelines = builder.id('kube-pipelines') - .href(function () { return UrlHelpers.join(Kubernetes.context, 'pipelines'); }) - .title(function () { return 'Pipelines'; }) - .build(); - var repos = builder.id('kube-repos') - .href(function () { return "/forge/repos"; }) - .isValid(function () { return ServiceRegistry.hasService(Kubernetes.fabric8ForgeServiceName) && ServiceRegistry.hasService(Kubernetes.gogsServiceName); }) - .title(function () { return 'Repositories'; }) - .build(); - var mainTab = builder.id('kubernetes') - .rank(100) - .defaultPage({ - rank: 20, - isValid: function (yes, no) { - yes(); - } - }) - .href(function () { return Kubernetes.context; }) - .title(function () { return '服务集群'; }) - .tabs(controllers, events) - .build(); - HawtioNav.add(mainTab); - /* testKubernetesModel - HawtioNav.add({ - id: 'k8sAppSwitcher', - title: () => '', // not used as 'template' below overrides this - isValid: () => KubernetesModel.serviceApps.length > 0, - context: true, - template: () => $templateCache.get(UrlHelpers.join(templatePath, 'serviceApps.html')) - }); - */ - var projectsTab = builder.id('openshift') - .rank(100) - .href(function () { return UrlHelpers.join(Kubernetes.context, 'buildConfigs') + '?sub-tab=kube-buildConfigs'; }) - .title(function () { return 'Projects'; }) - .tabs(repos, buildConfigs, builds, deploys, imageRepositories) - .build(); - //HawtioNav.add(projectsTab); - }]); - hawtioPluginLoader.registerPreBootstrapTask({ - name: 'KubernetesInit', - task: function (next) { - $.getScript('osconsole/config.js') - .done(function (script, textStatus) { - var config = Kubernetes.osConfig = window['OPENSHIFT_CONFIG']; - Kubernetes.log.debug("Fetched OAuth config: ", config); - var master = config.master_uri; - if (!master && config.api && config.api.k8s) { - var masterUri = new URI().host(config.api.k8s.hostPort).path("").query(""); - if (config.api.k8s.proto) { - masterUri.protocol(config.api.k8s.proto); - } - master = masterUri.toString(); - } - OSOAuthConfig = config.openshift; - GoogleOAuthConfig = config.google; - KeycloakConfig = config.keycloak; - if (OSOAuthConfig && !master) { - // TODO auth.master_uri no longer used right? - // master = OSOAuthConfig.master_uri; - if (!master) { - var oauth_authorize_uri = OSOAuthConfig.oauth_authorize_uri; - if (oauth_authorize_uri) { - var text = oauth_authorize_uri; - var idx = text.indexOf("://"); - if (idx > 0) { - idx += 3; - idx = text.indexOf("/", idx); - if (idx > 0) { - master = text.substring(0, ++idx); - } - } - } - } - } - if ((!Kubernetes.masterUrl || Kubernetes.masterUrl === "/") && (!master || master === "/")) { - // lets default the master to the current protocol and host/port - // in case the master url is "/" and we are - // serving up static content from inside /api/v1/namespaces/default/services/fabric8 or something like that - var href = location.href; - if (href) { - master = new URI(href).query("").path("").toString(); - } - } - if (master) { - Kubernetes.masterUrl = master; - next(); - return; - } - }) - .fail(function (response) { - Kubernetes.log.debug("Error fetching OAUTH config: ", response); - }) - .always(function () { - next(); - }); - } - }, true); - hawtioPluginLoader.addModule('ngResource'); - hawtioPluginLoader.addModule(Kubernetes.pluginName); })(Kubernetes || (Kubernetes = {})); /// /// var Kubernetes; (function (Kubernetes) { - Kubernetes.FABRIC8_PROJECT_JSON = "fabric8ProjectJson"; - function byId(thing) { - return thing.id; - } - function createKey(namespace, id, kind) { - return (namespace || "") + "-" + (kind || 'undefined').toLowerCase() + '-' + (id || 'undefined').replace(/\./g, '-'); - } - function populateKey(item) { - var result = item; - result['_key'] = createKey(Kubernetes.getNamespace(item), Kubernetes.getName(item), Kubernetes.getKind(item)); - return result; - } - function populateKeys(items) { - var result = []; - angular.forEach(items, function (item) { - result.push(populateKey(item)); - }); - return result; - } - function selectPods(pods, namespace, labels) { - return pods.filter(function (pod) { - return Kubernetes.getNamespace(pod) === namespace && Kubernetes.selectorMatches(labels, Kubernetes.getLabels(pod)); - }); - } - /** - * The object which keeps track of all the pods, replication controllers, services and their associations - */ - var KubernetesModelService = (function () { - function KubernetesModelService() { - this.kubernetes = null; - this.apps = []; - this.services = []; - this.replicationcontrollers = []; - this.pods = []; - this.hosts = []; - //public namespaces = []; - this.routes = []; - this.templates = []; - this.redraw = false; - this.resourceVersions = {}; - // various views on the data - this.podsByHost = {}; - this.servicesByKey = {}; - this.replicationControllersByKey = {}; - this.podsByKey = {}; - this.appInfos = []; - this.appViews = []; - this.appFolders = []; - this.fetched = false; - this.buildconfigs = []; - this.events = []; - this.workspaces = []; - this.projects = []; - this.project = null; + var dataInfoModelService = (function () { + function dataInfoModelService() { + this.serverdata = {}; + this.promiseobject = {}; + this.localdata = {}; + this.selectednodes = []; + this.resumablejs = []; + this.selecteditems = []; + this.serveritems = []; + this.uploadprocess = {}; + this.uploadedStatus = ""; + this.folderList = { + length: 0 + }; } - Object.defineProperty(KubernetesModelService.prototype, "replicationControllers", { + Object.defineProperty(dataInfoModelService.prototype, "uploadProcess", { get: function () { - return this.replicationcontrollers; - }, - set: function (replicationControllers) { - this.replicationcontrollers = replicationControllers; + return this.uploadprocess; + }, + set: function (uploadProcess) { + this.uploadprocess = uploadProcess; }, enumerable: true, configurable: true }); - Object.defineProperty(KubernetesModelService.prototype, "namespaces", { + Object.defineProperty(dataInfoModelService.prototype, "serverItems", { get: function () { - return this.kubernetes.namespaces; + return this.serveritems; + }, + set: function (serverItems) { + this.serveritems = serverItems; }, enumerable: true, configurable: true }); - Object.defineProperty(KubernetesModelService.prototype, "showRunButton", { + Object.defineProperty(dataInfoModelService.prototype, "resumableJs", { get: function () { - if (Kubernetes.isOpenShift) { - return true; - } - return _.any(this.services, function (service) { - var name = Kubernetes.getName(service); - if (name === "templates") { - var podCounters = service.$podCounters; - return podCounters && (podCounters.valid || podCounters.ready); - } - else { - return false; - } - }); + return this.resumableJs; + }, + set: function (resumableJs) { + this.resumablejs = resumableJs; }, enumerable: true, configurable: true }); - Object.defineProperty(KubernetesModelService.prototype, "serviceApps", { + Object.defineProperty(dataInfoModelService.prototype, "selectedItems", { get: function () { - return _.filter(this.services, function (s) { - return s.$host && s.$serviceUrl && s.$podCount; - }); + return this.selecteditems; + }, + set: function (selectedItems) { + this.selecteditems = selectedItems; }, enumerable: true, configurable: true }); - KubernetesModelService.prototype.$keepPolling = function () { - return Kubernetes.keepPollingModel; - }; - KubernetesModelService.prototype.orRedraw = function (flag) { - this.redraw = this.redraw || flag; - }; - KubernetesModelService.prototype.getService = function (namespace, id) { - return this.servicesByKey[createKey(namespace, id, 'service')]; - }; - KubernetesModelService.prototype.getReplicationController = function (namespace, id) { - return this.replicationControllersByKey[createKey(namespace, id, 'replicationController')]; - }; - KubernetesModelService.prototype.getPod = function (namespace, id) { - return this.podsByKey[createKey(namespace, id, 'pod')]; - }; - KubernetesModelService.prototype.podsForNamespace = function (namespace) { - if (namespace === void 0) { namespace = this.currentNamespace(); } - return _.filter(this.pods, { namespace: namespace }); - }; - KubernetesModelService.prototype.getBuildConfig = function (name) { - return _.find(this.buildconfigs, { $name: name }); + Object.defineProperty(dataInfoModelService.prototype, "selectedNodes", { + get: function () { + return this.selectednodes; + }, + set: function (selectedNodes) { + this.selectednodes = selectedNodes; + }, + enumerable: true, + configurable: true + }); + dataInfoModelService.prototype.isContainsNodes = function (node) { + for (var item in this.selectednodes) { + if (this.selectednodes[item].id === node.id) + return true; + } + return false; }; - KubernetesModelService.prototype.getProject = function (name, ns) { - if (ns === void 0) { ns = this.currentNamespace(); } - var buildConfig = this.project; - if (!buildConfig) { - var text = localStorage[Kubernetes.FABRIC8_PROJECT_JSON]; - if (text) { - try { - buildConfig = angular.fromJson(text); - } - catch (e) { - Kubernetes.log.warn("Could not parse json for " + Kubernetes.FABRIC8_PROJECT_JSON + ". Was: " + text + ". " + e, e); - } - } + dataInfoModelService.prototype.findNodes = function (node) { + var id = "-1"; + if (typeof (node) === "object") { + id = node.id; } - if (buildConfig && ns != Kubernetes.getNamespace(buildConfig) && name != buildConfig.$name) { - buildConfig = this.getBuildConfig(name); + else if (typeof (node) === "number") { + id = node.toString(); } - return buildConfig; - }; - KubernetesModelService.prototype.setProject = function (buildConfig) { - this.project = buildConfig; - if (buildConfig) { - // lets store in local storage - var localStorage = Kubernetes.inject("localStorage"); - if (localStorage) { - localStorage[Kubernetes.FABRIC8_PROJECT_JSON] = angular.toJson(buildConfig); - } + else if (typeof (node) === "string") { + id = node; } - }; - /** - * Returns the current selected namespace or the default namespace - */ - KubernetesModelService.prototype.currentNamespace = function () { - var answer = null; - if (this.kubernetes) { - answer = this.kubernetes.selectedNamespace; + else { + return "-1"; } - return answer || Kubernetes.defaultNamespace; + for (var item in this.selectednodes) { + if (this.selectednodes[item].id === id) + return item; + } + return "-1"; }; - KubernetesModelService.prototype.updateIconUrlAndAppInfo = function (entity, nameField) { - var answer = null; - var id = Kubernetes.getName(entity); - entity.$iconUrl = Core.pathGet(entity, ['metadata', 'annotations', 'fabric8.' + id + '/iconUrl']); - entity.$info = Core.pathGet(entity, ['metadata', 'annotations', 'fabric8.' + id + '/summary']); - if (entity.$iconUrl) { - return; + dataInfoModelService.prototype.findItemIndex = function (item) { + var id = -1; + if (typeof (item) === "object") { + id = item.id; } - if (id && nameField) { - (this.templates || []).forEach(function (template) { - var metadata = template.metadata; - if (metadata) { - var annotations = metadata.annotations || {}; - var iconUrl = annotations["fabric8." + id + "/iconUrl"] || annotations["fabric8/iconUrl"]; - if (iconUrl) { - (template.objects || []).forEach(function (item) { - var entityName = Kubernetes.getName(item); - if (id === entityName) { - entity.$iconUrl = iconUrl; - } - }); - } - } - }); - (this.appInfos || []).forEach(function (appInfo) { - var iconPath = appInfo.iconPath; - if (iconPath && !answer && iconPath !== "null") { - var iconUrl = Kubernetes.gitPathToUrl(iconPath); - var ids = Core.pathGet(appInfo, ["names", nameField]); - angular.forEach(ids, function (appId) { - if (appId === id) { - entity.$iconUrl = iconUrl; - entity.appPath = appInfo.appPath; - entity.$info = appInfo; - } - }); - } - }); + else if (typeof (item) === "number") { + id = item.toString(); } - if (!entity.$iconUrl) { - entity.$iconUrl = Kubernetes.defaultIconUrl; + else if (typeof (item) === "string") { + id = item; + } + else { + return -1; + } + for (var it in this.selecteditems) { + if (this.selecteditems[it].id === id) + return it; } + return -1; }; - KubernetesModelService.prototype.maybeInit = function () { - var _this = this; - this.fetched = true; - this.servicesByKey = {}; - this.podsByKey = {}; - this.replicationControllersByKey = {}; - this.pods.forEach(function (pod) { - if (!pod.kind) - pod.kind = "Pod"; - _this.podsByKey[pod._key] = pod; - var host = Kubernetes.getHost(pod); - pod.$labelsText = Kubernetes.labelsToString(Kubernetes.getLabels(pod)); - if (host) { - pod.$labelsText += Kubernetes.labelFilterTextSeparator + "host=" + host; - } - pod.$iconUrl = Kubernetes.defaultIconUrl; - _this.discoverPodConnections(pod); - pod.$containerPorts = []; - var podStatus = pod.status || {}; - var startTime = podStatus.startTime; - pod.$startTime = null; - if (startTime) { - pod.$startTime = new Date(startTime); - } - var createdTime = Kubernetes.getCreationTimestamp(pod); - pod.$createdTime = null; - pod.$age = null; - if (createdTime) { - pod.$createdTime = new Date(createdTime); - pod.$age = humandate.relativeTime(pod.$createdTime); + dataInfoModelService.prototype.createFolderList = function (files, rootPath) { + for (var i = 0; i < files.length; i++) { + var relativePath = files[i].webkitRelativePath.replace(RegExp("^" + rootPath + "/"), ""); + var paths = relativePath.split("/"); + if (!this.folderList.hasOwnProperty(paths[0])) { + this.folderList[paths[0]] = { + length: 0 + }; + this.folderList.length++; } - var ready = Kubernetes.isReady(pod); - pod.$ready = ready; - pod.$statusCss = Kubernetes.statusTextToCssClass(podStatus.phase, ready); - var maxRestartCount = 0; - angular.forEach(Core.pathGet(pod, ["status", "containerStatuses"]), function (status) { - var restartCount = status.restartCount; - if (restartCount) { - if (restartCount > maxRestartCount) { - maxRestartCount = restartCount; - } - } - }); - if (maxRestartCount) { - pod.$restartCount = maxRestartCount; + var Obj = this.folderList[paths[0]]; + Obj[Obj.length] = files[i]; + Obj.length++; + this.folderList[paths[0]] = Obj; + } + }; + dataInfoModelService.prototype.updateNodeById = function (nodeId, key, value) { + for (var item in this.selectednodes) { + var node = this.selectednodes[item]; + if (node.id === nodeId) { + node[key] = value; + break; } - var imageNames = ""; - angular.forEach(Core.pathGet(pod, ["spec", "containers"]), function (container) { - var image = container.image; - if (image) { - if (!imageNames) { - imageNames = image; - } - else { - imageNames = imageNames + " " + image; - } - var idx = image.lastIndexOf(":"); - if (idx > 0) { - image = image.substring(0, idx); - } - var paths = image.split("/", 3); - if (paths.length) { - var answer = null; - if (paths.length == 3) { - answer = paths[1] + "/" + paths[2]; - } - else if (paths.length == 2) { - answer = paths[0] + "/" + paths[1]; - } - else { - answer = paths[0] + "/" + paths[1]; - } - container.$imageLink = UrlHelpers.join("https://registry.hub.docker.com/u/", answer); - } - } - angular.forEach(container.ports, function (port) { - var containerPort = port.containerPort; - if (containerPort) { - pod.$containerPorts.push(containerPort); - } - }); - }); - pod.$imageNames = imageNames; - var podStatus = podStatus; - var podSpec = (pod.spec || {}); - pod.$podIP = podStatus.podIP; - pod.$host = podSpec.host || podSpec.nodeName || podStatus.hostIP; + } + }; + Object.defineProperty(dataInfoModelService.prototype, "serverData", { + get: function () { + return this.serverData; + }, + set: function (serverData) { + this.serverdata = serverData; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(dataInfoModelService.prototype, "promiseObject", { + get: function () { + return this.promiseobject; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(dataInfoModelService.prototype, "promise", { + set: function (promiseObject) { + this.promiseobject = promiseObject; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(dataInfoModelService.prototype, "localData", { + get: function () { + return this.localdata; + }, + set: function (localData) { + this.localdata = localData; + }, + enumerable: true, + configurable: true + }); + dataInfoModelService.prototype.updataDataModel = function () { + this.promiseobject.success(function (data, header, config, status) { + this.serverdata = data; }); - this.services.forEach(function (service) { - if (!service.kind) - service.kind = "Service"; - _this.servicesByKey[service._key] = service; - var selector = Kubernetes.getSelector(service); - service.$pods = []; - if (!service.$podCounters) { - service.$podCounters = {}; - } - var podLinkUrl = UrlHelpers.join("/kubernetes/namespace", service.metadata.namespace, "pods"); - _.assign(service.$podCounters, selector ? Kubernetes.createPodCounters(selector, _this.pods, service.$pods, Kubernetes.labelsToString(selector, ","), podLinkUrl) : {}); - service.$podCount = service.$pods.length; - var selectedPods = service.$pods; - service.connectTo = selectedPods.map(function (pod) { - return pod._key; - }).join(','); - service.$labelsText = Kubernetes.labelsToString(Kubernetes.getLabels(service)); - _this.updateIconUrlAndAppInfo(service, "serviceNames"); - var spec = service.spec || {}; - service.$portalIP = spec.portalIP; - service.$selectorText = Kubernetes.labelsToString(spec.selector); - var ports = _.map(spec.ports || [], "port"); - service.$ports = ports; - service.$portsText = ports.join(", "); - var iconUrl = service.$iconUrl; - if (iconUrl && selectedPods) { - selectedPods.forEach(function (pod) { - pod.$iconUrl = iconUrl; - }); - } - service.$serviceUrl = Kubernetes.serviceLinkUrl(service); + this.promiseobject.error(function (data, status, hedaers, config) { + this.serverdata = {}; }); - this.replicationControllers.forEach(function (replicationController) { - if (!replicationController.kind) - replicationController.kind = "ReplicationController"; - _this.replicationControllersByKey[replicationController._key] = replicationController; - var selector = Kubernetes.getSelector(replicationController); - replicationController.$pods = []; - replicationController.$podCounters = selector ? Kubernetes.createPodCounters(selector, _this.pods, replicationController.$pods) : null; - replicationController.$podCount = replicationController.$pods.length; - replicationController.$replicas = (replicationController.spec || {}).replicas; - replicationController.$oracleStatus = Kubernetes.getOracleStatus(Kubernetes.getLabels(replicationController)); - var selectedPods = replicationController.$pods; - replicationController.connectTo = selectedPods.map(function (pod) { - return pod._key; - }).join(','); - replicationController.$labelsText = Kubernetes.labelsToString(Kubernetes.getLabels(replicationController)); - replicationController.metadata.labels = Kubernetes.labelToChinese(Kubernetes.getLabels(replicationController)); - _this.updateIconUrlAndAppInfo(replicationController, "replicationControllerNames"); - var iconUrl = replicationController.$iconUrl; - if (iconUrl && selectedPods) { - selectedPods.forEach(function (pod) { - pod.$iconUrl = iconUrl; - }); - } + }; + return dataInfoModelService; + }()); + Kubernetes.dataInfoModelService = dataInfoModelService; + Kubernetes._module.factory('DataInfoModel', ['$http', function ($http) { + var $scope = new dataInfoModelService(); + $scope.promiseobject = $http({ + url: '/xmlformserver', + method: 'POST' }); - // services may not map to an icon but their pods may do via the RC - // so lets default it... - this.services.forEach(function (service) { - var iconUrl = service.$iconUrl; - var selectedPods = service.$pods; - if (selectedPods) { - if (!iconUrl || iconUrl === Kubernetes.defaultIconUrl) { - iconUrl = null; - selectedPods.forEach(function (pod) { - if (!iconUrl) { - iconUrl = pod.$iconUrl; - if (iconUrl) { - service.$iconUrl = iconUrl; - } - } - }); - } - } + updateDataFromServer($scope.serverdata, function (data, header, config, status) { + $scope.serverdata = data; }); - this.updateApps(); - var podsByHost = {}; - this.pods.forEach(function (pod) { - var host = Kubernetes.getHost(pod); - var podsForHost = podsByHost[host]; - if (!podsForHost) { - podsForHost = []; - podsByHost[host] = podsForHost; - } - podsForHost.push(pod); + function updateDataFromServer(data, callback) { + $http({ + url: '/xmlformserver', + method: 'POST' + }).success(function (data, header, config, status) { + if (data) + callback(data, header, config, status); + }).error(function (data, header, config, status) { + console.log("error"); + }); + } + ; + return $scope; + }]); +})(Kubernetes || (Kubernetes = {})); + +/// +/// +/// +var Kubernetes; +(function (Kubernetes) { + Kubernetes.DeploymentConfigController = Kubernetes.controller("DeploymentConfigController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", + function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { + $scope.kubernetes = KubernetesState; + $scope.model = KubernetesModel; + $scope.id = $routeParams["id"]; + $scope.schema = KubernetesSchema; + $scope.config = KubernetesSchema.definitions.os_deploy_DeploymentConfig; + Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); + $scope.$on('kubernetesModelUpdated', function () { + updateData(); }); - this.podsByHost = podsByHost; - var tmpHosts = []; - for (var hostKey in podsByHost) { - var hostPods = []; - var podCounters = Kubernetes.createPodCounters(function (pod) { return Kubernetes.getHost(pod) === hostKey; }, this.pods, hostPods, "host=" + hostKey); - var hostIP = null; - if (hostPods.length) { - var pod = hostPods[0]; - var currentState = pod.status; - if (currentState) { - hostIP = currentState.hostIP; - } + $scope.$on('$routeUpdate', function ($event) { + updateData(); + }); + updateData(); + function updateData() { + $scope.item = null; + if ($scope.id) { + var url = Kubernetes.deploymentConfigRestUrl($scope.id); + $http.get(url). + success(function (data, status, headers, config) { + if (data) { + $scope.entity = data; + Kubernetes.enrichDeploymentConfig(data); + } + $scope.fetched = true; + Core.$apply($scope); + }). + error(function (data, status, headers, config) { + Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); + }); + } + else { + $scope.fetched = true; + Core.$apply($scope); } - var hostDetails = { - name: hostKey, - id: hostKey, - elementId: hostKey.replace(/\./g, '_'), - hostIP: hostIP, - pods: hostPods, - kind: "Host", - $podCounters: podCounters, - $iconUrl: Kubernetes.hostIconUrl - }; - tmpHosts.push(hostDetails); } - this.hosts = tmpHosts; - Kubernetes.enrichBuildConfigs(this.buildconfigs); - Kubernetes.enrichEvents(this.events, this); - }; - KubernetesModelService.prototype.updateApps = function () { - var _this = this; - try { - // lets create the app views by trying to join controllers / services / pods that are related - var appViews = []; - this.replicationControllers.forEach(function (replicationController) { - var name = Kubernetes.getName(replicationController); - var $iconUrl = replicationController.$iconUrl; - appViews.push({ - appPath: "/dummyPath/" + name, - $name: name, - $info: { - $iconUrl: $iconUrl - }, - $iconUrl: $iconUrl, - replicationControllers: [replicationController], - pods: replicationController.$pods || [], - services: [] - }); - }); - var noMatches = []; - this.services.forEach(function (service) { - // now lets see if we can find an app with an RC of the same selector - var matchesApp = null; - appViews.forEach(function (appView) { - appView.replicationControllers.forEach(function (replicationController) { - var repSelector = Kubernetes.getSelector(replicationController); - if (repSelector && - Kubernetes.selectorMatches(repSelector, Kubernetes.getSelector(service)) && - Kubernetes.getNamespace(service) === Kubernetes.getNamespace(replicationController)) { - matchesApp = appView; - } - }); - }); - if (matchesApp) { - matchesApp.services.push(service); - } - else { - noMatches.push(service); - } - }); - Kubernetes.log.debug("no matches: ", noMatches); - noMatches.forEach(function (service) { - var appView = _.find(appViews, function (appView) { - return _.any(appView.replicationControllers, function (rc) { - return _.startsWith(Kubernetes.getName(rc), Kubernetes.getName(service)); - }); - }); - if (appView) { - appView.services.push(service); - } - else { - var $iconUrl = service.$iconUrl; - appViews.push({ - appPath: "/dummyPath/" + name, - $name: name, - $info: { - $iconUrl: $iconUrl - }, - $iconUrl: $iconUrl, - replicationControllers: [], - pods: service.$pods || [], - services: [service] - }); + }]); +})(Kubernetes || (Kubernetes = {})); + +/// +/// +var Kubernetes; +(function (Kubernetes) { + Kubernetes.DeploymentConfigsController = Kubernetes.controller("DeploymentConfigsController", ["$scope", "KubernetesModel", "KubernetesState", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", + function ($scope, KubernetesModel, KubernetesState, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { + $scope.kubernetes = KubernetesState; + $scope.model = KubernetesModel; + $scope.$on('kubernetesModelUpdated', function () { + Core.$apply($scope); + }); + $scope.labelClass = Kubernetes.containerLabelClass; + $scope.tableConfig = { + data: 'deploymentConfigs', + showSelectionCheckbox: true, + enableRowClickSelection: false, + multiSelect: true, + selectedItems: [], + filterOptions: { + filterText: $location.search()["q"] || '' + }, + columnDefs: [ + { + field: 'metadata.name', + displayName: 'Name', + cellTemplate: $templateCache.get("deploymentConfigLinkTemplate.html") + }, + { + field: 'metadata.namespace', + displayName: 'Namespace' + }, + { + field: '$imageChangeParams.automatic', + displayName: 'Automatic' + }, + { + field: '$imageChangeParams.$containerNames', + displayName: 'Container Names' + }, + { + field: '$imageChangeParams.from.name', + displayName: 'From image' + }, + { + field: '$imageChangeParams.tag', + displayName: 'Tag' + }, + { + field: 'template.controllerTemplate.podTemplate.tags', + displayName: 'Labels', + cellTemplate: $templateCache.get("deploymentConfigLabelTemplate.html") } - }); - angular.forEach(this.routes, function (route) { - var metadata = route.metadata || {}; - var spec = route.spec || {}; - var serviceName = Core.pathGet(spec, ["to", "name"]); - var host = spec.host; - var namespace = Kubernetes.getNamespace(route); - if (serviceName && host) { - var service = _this.getService(namespace, serviceName); - if (service) { - service.$host = host; - // TODO we could use some annotations / metadata to deduce what URL we should use to open this - // service in the console. For now just assume its http: - if (host) { - var hostUrl = host; - if (hostUrl.indexOf("://") < 0) { - hostUrl = "http://" + host; + ] + }; + Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); + $scope.deletePrompt = function (selected) { + UI.multiItemConfirmActionDialog({ + collection: selected, + index: '$name', + onClose: function (result) { + if (result) { + function deleteSelected(selected, next) { + if (next) { + deleteEntity(next, function () { + deleteSelected(selected, selected.shift()); + }); + } + else { + updateData(); } - service.$connectUrl = UrlHelpers.join(hostUrl, "/"); - } - // TODO definitely need that annotation, temp hack for apiman link - if (Kubernetes.getName(service) === 'apiman' && host) { - service.$connectUrl = new URI().host(service.$host) - .path('apimanui/index.html') - .query({}) - .hash(URI.encode(angular.toJson({ - backTo: new URI().toString(), - token: HawtioOAuth.getOAuthToken() - }))).toString(); - } - } - else { - Kubernetes.log.debug("Could not find service " + serviceName + " namespace " + namespace + " for route: " + metadata.name); - } - } - }); - appViews = _.sortBy(populateKeys(appViews), function (appView) { return appView._key; }); - ArrayHelpers.sync(this.appViews, appViews, '$name'); - if (this.appInfos && this.appViews) { - var folderMap = {}; - var folders = []; - var appMap = {}; - angular.forEach(this.appInfos, function (appInfo) { - if (!appInfo.$iconUrl && appInfo.iconPath && appInfo.iconPath !== "null") { - appInfo.$iconUrl = Kubernetes.gitPathToUrl(appInfo.iconPath); - } - var appPath = appInfo.appPath; - if (appPath) { - appMap[appPath] = appInfo; - var idx = appPath.lastIndexOf("/"); - var folderPath = ""; - if (idx >= 0) { - folderPath = appPath.substring(0, idx); - } - folderPath = Core.trimLeading(folderPath, "/"); - var folder = folderMap[folderPath]; - if (!folder) { - folder = { - path: folderPath, - expanded: true, - apps: [] - }; - folders.push(folder); - folderMap[folderPath] = folder; - } - folder.apps.push(appInfo); - } - }); - this.appFolders = _.sortBy(folders, "path"); - var apps = []; - var defaultInfo = { - $iconUrl: Kubernetes.defaultIconUrl - }; - angular.forEach(this.appViews, function (appView) { - try { - var appPath = appView.appPath; - /* - TODO - appView.$select = () => { - Kubernetes.setJson($scope, appView.id, $scope.model.apps); - }; - */ - var appInfo = angular.copy(defaultInfo); - if (appPath) { - appInfo = appMap[appPath] || appInfo; - } - if (!appView.$info) { - appView.$info = defaultInfo; - appView.$info = appInfo; - } - appView.id = appPath; - if (!appView.$name) { - appView.$name = appInfo.name || appView.$name; - } - if (!appView.$iconUrl) { - appView.$iconUrl = appInfo.$iconUrl; } - apps.push(appView); - appView.$podCounters = Kubernetes.createAppViewPodCounters(appView); - appView.$podCount = (appView.pods || []).length; - appView.$replicationControllersText = (appView.replicationControllers || []).map(function (i) { return i["_key"]; }).join(" "); - appView.$servicesText = (appView.services || []).map(function (i) { return i["_key"]; }).join(" "); - appView.$serviceViews = Kubernetes.createAppViewServiceViews(appView); - } - catch (e) { - Kubernetes.log.warn("Failed to update appViews: " + e); + deleteSelected(selected, selected.shift()); } + }, + title: 'Delete Deployment?', + action: 'The following Deployments will be deleted:', + okText: 'Delete', + okClass: 'btn-danger', + custom: "This operation is permanent once completed!", + customClass: "alert alert-warning" + }).open(); + }; + function deleteEntity(selection, nextCallback) { + var name = (selection || {}).$name; + if (name) { + console.log("About to delete deployment config: " + name); + var url = Kubernetes.deploymentConfigRestUrl(name); + $http.delete(url). + success(function (data, status, headers, config) { + nextCallback(); + }). + error(function (data, status, headers, config) { + Kubernetes.log.warn("Failed to delete deployment config on " + url + " " + data + " " + status); }); - //this.apps = apps; - this.apps = this.appViews; + } + else { + console.log("warning: no name for selection: " + angular.toJson(selection)); } } - catch (e) { - Kubernetes.log.warn("Caught error: " + e); - } - }; - KubernetesModelService.prototype.discoverPodConnections = function (entity) { - var info = Core.pathGet(entity, ["status", "info"]); - var hostPort = null; - var currentState = entity.status || {}; - var desiredState = entity.spec || {}; - var podId = Kubernetes.getName(entity); - var host = currentState["hostIP"]; - var podIP = currentState["podIP"]; - var hasDocker = false; - var foundContainerPort = null; - if (desiredState) { - var containers = desiredState.containers; - angular.forEach(containers, function (container) { - if (!hostPort) { - var ports = container.ports; - angular.forEach(ports, function (port) { - if (!hostPort) { - var containerPort = port.containerPort; - var portName = port.name; - var containerHostPort = port.hostPort; - if (containerPort === 8778 || "jolokia" === portName) { - if (containerPort) { - if (podIP) { - foundContainerPort = containerPort; - } - if (containerHostPort) { - hostPort = containerHostPort; - } - } - } - } - }); + function updateData() { + var url = Kubernetes.deploymentConfigsRestURL(); + $http.get(url). + success(function (data, status, headers, config) { + if (data) { + //console.log("got data " + angular.toJson(data, true)); + $scope.deploymentConfigs = Kubernetes.enrichDeploymentConfigs(data.items); + $scope.fetched = true; + Core.$apply($scope); } + }). + error(function (data, status, headers, config) { + Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); }); } - if (foundContainerPort && podId && Kubernetes.isRunning(currentState)) { - if (!Kubernetes.isOpenShift) { - // TODO temp workaround for k8s on GKE https://github.com/kubernetes/kubernetes/issues/17172 - entity.$jolokiaUrl = UrlHelpers.join(Kubernetes.masterApiUrl(), "api", Kubernetes.defaultApiVersion, "proxy", "namespaces", entity.metadata.namespace, "pods", - //"https:" + podId + ":" + foundContainerPort, - podId + ":" + foundContainerPort, "jolokia/"); - } - else { - entity.$jolokiaUrl = UrlHelpers.join(Kubernetes.masterApiUrl(), "api", Kubernetes.defaultApiVersion, "namespaces", entity.metadata.namespace, "pods", "https:" + podId + ":" + foundContainerPort, "proxy/jolokia/"); - } - } - }; - return KubernetesModelService; - }()); - Kubernetes.KubernetesModelService = KubernetesModelService; - function getTemplateService(model) { - var key = createKey('default', 'templates', 'service'); - var answer = model.servicesByKey[key]; - Kubernetes.log.debug("found template service: ", answer); - return answer; - } - /** - * Creates a model service which keeps track of all the pods, replication controllers and services along - * with their associations and status - */ - Kubernetes._module.factory('KubernetesModel', ['$rootScope', '$http', 'KubernetesApiURL', 'KubernetesState', 'WatcherService', '$location', '$resource', function ($rootScope, $http, AppLibraryURL, KubernetesState, watcher, $location, $resource) { - var $scope = new KubernetesModelService(); + updateData(); + }]); +})(Kubernetes || (Kubernetes = {})); + +/// +/// +/// +var Kubernetes; +(function (Kubernetes) { + Kubernetes.EventsController = Kubernetes.controller("EventsController", ["$scope", "KubernetesModel", "KubernetesServices", "KubernetesPods", "KubernetesState", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", + function ($scope, KubernetesModel, KubernetesServices, KubernetesPods, KubernetesState, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; - // create all of our resource classes - var typeNames = watcher.getTypes(); - _.forEach(typeNames, function (type) { - var urlTemplate = Kubernetes.uriTemplateForKubernetesKind(type); - $scope[type + 'Resource'] = Kubernetes.createResource(type, urlTemplate, $resource, $scope); - }); - if (!Kubernetes.isOpenShift) { - // register custom URL factories for templates/projects - watcher.registerCustomUrlFunction(KubernetesAPI.WatchTypes.BUILD_CONFIGS, function (options) { - var templateService = getTemplateService($scope); - if (templateService) { - return UrlHelpers.join(templateService.proxyUrl, '/oapi/v1/namespaces/default/buildconfigs/'); - } - return null; - }); - // register custom URL factories for templates/projects - watcher.registerCustomUrlFunction(KubernetesAPI.WatchTypes.TEMPLATES, function (options) { - var templateService = getTemplateService($scope); - if (templateService) { - return UrlHelpers.join(templateService.proxyUrl, '/oapi/v1/namespaces/default/templates/'); - } - return null; - }); - } - // register for all updates on objects - watcher.registerListener(function (objects) { - var types = watcher.getTypes(); - _.forEach(types, function (type) { - switch (type) { - case Kubernetes.WatchTypes.SERVICES: - var items = populateKeys(objects[type]); - angular.forEach(items, function (item) { - item.proxyUrl = Kubernetes.kubernetesProxyUrlForService(Kubernetes.kubernetesApiUrl(), item); - }); - $scope[type] = items; - break; - case Kubernetes.WatchTypes.TEMPLATES: - case Kubernetes.WatchTypes.ROUTES: - case Kubernetes.WatchTypes.BUILDS: - case Kubernetes.WatchTypes.BUILD_CONFIGS: - case Kubernetes.WatchTypes.IMAGE_STREAMS: - // don't put a break here :-) - default: - $scope[type] = populateKeys(objects[type]); + $scope.model = KubernetesModel; + ControllerHelpers.bindModelToSearchParam($scope, $location, 'mode', 'mode', 'list'); + $scope.tableConfig = { + data: 'model.events', + showSelectionCheckbox: true, + enableRowClickSelection: false, + multiSelect: true, + selectedItems: [], + filterOptions: { + filterText: $location.search()["q"] || '' + }, + columnDefs: [ + { field: '$firstTimestamp', + displayName: 'First Seen', + cellTemplate: $templateCache.get("firstTimestampTemplate.html") + }, + { field: '$lastTimestamp', + displayName: 'Last Seen', + cellTemplate: $templateCache.get("lastTimestampTemplate.html") + }, + { field: 'count', + displayName: 'Count' + }, + { field: 'involvedObject.name', + displayName: 'Name', + cellTemplate: $templateCache.get("eventNameTemplate.html") + }, + { field: 'involvedObject.kind', + displayName: 'Kind', + cellTemplate: $templateCache.get("eventKindTemplate.html") + }, + { field: 'involvedObject.fieldPath', + displayName: 'Subject' + }, + { field: 'reason', + displayName: 'Reason' + }, + { field: 'source', + displayName: 'Source', + cellTemplate: $templateCache.get("eventSourceTemplate.html") + }, + { field: 'message', + displayName: 'Message' } - Kubernetes.log.debug("Type: ", type, " object: ", $scope[type]); - }); - $scope.maybeInit(); - $rootScope.$broadcast('kubernetesModelUpdated', $scope); - Core.$apply($rootScope); - }); - // set the selected namespace if set in the location bar - // otherwise use whatever previously selected namespace is - // available - var search = $location.search(); - if ('namespace' in search) { - watcher.setNamespace(search['namespace']); - } - function selectPods(pods, namespace, labels) { - return pods.filter(function (pod) { - return Kubernetes.getNamespace(pod) === namespace && Kubernetes.selectorMatches(labels, Kubernetes.getLabels(pod)); - }); - } - return $scope; + ] + }; + Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); }]); })(Kubernetes || (Kubernetes = {})); /// -/// -/// -/// -/// -/// -/// -/// -var Developer; -(function (Developer) { - function clickApprove(element, url) { - var $scope = angular.element(element).scope(); - if ($scope) { - $scope.approve(url, element.text); - } +/// +var Kubernetes; +(function (Kubernetes) { + Kubernetes.FABRIC8_PROJECT_JSON = "fabric8ProjectJson"; + function byId(thing) { + return thing.id; } - Developer.clickApprove = clickApprove; - Developer.JenkinsLogController = Developer._module.controller("Developer.JenkinsLogController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "$modal", "KubernetesApiURL", "ServiceRegistry", "$element", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, $modal, KubernetesApiURL, ServiceRegistry, $element) { - $scope.kubernetes = KubernetesState; - $scope.model = KubernetesModel; - $scope.selectedBuild = $scope.$eval('build') || $scope.$eval('selectedBuild'); - $scope.id = $scope.$eval('build.id') || $routeParams["id"]; - $scope.schema = KubernetesSchema; - $scope.entityChangedCache = {}; - $element.on('$destroy', function () { - $scope.$destroy(); - }); - $scope.log = { - html: "", - start: 0, - firstIdx: null - }; - $scope.$on('kubernetesModelUpdated', function () { - updateJenkinsLink(); - Core.$apply($scope); - }); - $scope.$on('jenkinsSelectedBuild', function (event, build) { - Developer.log.info("==== jenkins build selected! " + build.id + " " + build.$jobId); - $scope.selectedBuild = build; + function createKey(namespace, id, kind) { + return (namespace || "") + "-" + (kind || 'undefined').toLowerCase() + '-' + (id || 'undefined').replace(/\./g, '-'); + } + function populateKey(item) { + var result = item; + result['_key'] = createKey(Kubernetes.getNamespace(item), Kubernetes.getName(item), Kubernetes.getKind(item)); + return result; + } + function populateKeys(items) { + var result = []; + angular.forEach(items, function (item) { + result.push(populateKey(item)); }); - $scope.$watch('selectedBuild', function (selectedBuild) { - Developer.log.info("Selected build updated: ", selectedBuild); - $scope.fetch(); + return result; + } + function selectPods(pods, namespace, labels) { + return pods.filter(function (pod) { + return Kubernetes.getNamespace(pod) === namespace && Kubernetes.selectorMatches(labels, Kubernetes.getLabels(pod)); }); - Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); - $scope.breadcrumbConfig = Developer.createJenkinsBreadcrumbs($scope.id, getJobId(), getBuildId()); - $scope.subTabConfig = Developer.createJenkinsSubNavBars($scope.id, getJobId(), getBuildId(), { - label: "Log", - title: "Views the logs of this build" - }); - function getJobId() { - // lets allow the parent scope to be used too for when this is used as a panel - return $routeParams["job"] || ($scope.selectedBuild || {}).$jobId; - } - $scope.getJobId = getJobId; - function getBuildId() { - // lets allow the parent scope to be used too for when this is used as a panel - return $routeParams["build"] || ($scope.selectedBuild || {}).id; + } + /** + * The object which keeps track of all the pods, replication controllers, services and their associations + */ + var KubernetesModelService = (function () { + function KubernetesModelService() { + this.kubernetes = null; + this.apps = []; + this.services = []; + this.replicationcontrollers = []; + this.filterReplicationcontrollers = []; + this.pods = []; + this.hosts = []; + //public namespaces = []; + this.routes = []; + this.templates = []; + this.redraw = false; + this.resourceVersions = {}; + // various views on the data + this.podsByHost = {}; + this.servicesByKey = {}; + this.replicationControllersByKey = {}; + this.podsByKey = {}; + this.appInfos = []; + this.appViews = []; + this.appFolders = []; + this.fetched = false; + this.buildconfigs = []; + this.events = []; + this.workspaces = []; + this.projects = []; + this.project = null; } - $scope.getBuildId = getBuildId; - function updateJenkinsLink() { - var jenkinsUrl = Developer.jenkinsLink(); - if (jenkinsUrl) { - $scope.$viewJenkinsBuildLink = UrlHelpers.join(jenkinsUrl, "job", getJobId(), getBuildId()); - $scope.$viewJenkinsLogLink = UrlHelpers.join($scope.$viewJenkinsBuildLink, "console"); + Object.defineProperty(KubernetesModelService.prototype, "replicationControllers", { + /*public get filterReplicationcontrollers():Array { + return this.filterReplicationcontrollers; } - } - var querySize = 50000; - $scope.approve = function (url, operation) { - var modal = $modal.open({ - templateUrl: UrlHelpers.join(Developer.templatePath, 'jenkinsApproveModal.html'), - controller: ['$scope', '$modalInstance', function ($scope, $modalInstance) { - $scope.operation = operation; - $scope.header = operation + "?"; - $scope.ok = function () { - modal.close(); - postToJenkins(url, operation); - }; - $scope.cancel = function () { - modal.dismiss(); - }; - }] - }); - }; - function postToJenkins(uri, operation) { - var url = Kubernetes.kubernetesProxyUrlForServiceCurrentNamespace(Developer.jenkinsServiceNameAndPort, uri); - if (url) { - var body = null; - var config = { - headers: {} - }; - Developer.log.info("posting to jenkinsUrl: " + url); - $http.post(url, body, config). - success(function (data, status, headers, config) { - Developer.log.info("Managed to " + operation + " at " + url); - }). - error(function (data, status, headers, config) { - Developer.log.warn("Failed " + operation + " job at " + url + " " + data + " " + status); + + public set filterReplicationcontrollers(filterReplicationcontrollers:Array) { + this.filterReplicationcontrollers = filterReplicationcontrollers; + }*/ + get: function () { + return this.replicationcontrollers; + }, + set: function (replicationControllers) { + this.replicationcontrollers = replicationControllers; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(KubernetesModelService.prototype, "namespaces", { + get: function () { + return this.kubernetes.namespaces; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(KubernetesModelService.prototype, "showRunButton", { + get: function () { + if (Kubernetes.isOpenShift) { + return true; + } + return _.any(this.services, function (service) { + var name = Kubernetes.getName(service); + if (name === "templates") { + var podCounters = service.$podCounters; + return podCounters && (podCounters.valid || podCounters.ready); + } + else { + return false; + } + }); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(KubernetesModelService.prototype, "serviceApps", { + get: function () { + return _.filter(this.services, function (s) { + return s.$host && s.$serviceUrl && s.$podCount; }); + }, + enumerable: true, + configurable: true + }); + KubernetesModelService.prototype.$keepPolling = function () { + return Kubernetes.keepPollingModel; + }; + KubernetesModelService.prototype.orRedraw = function (flag) { + this.redraw = this.redraw || flag; + }; + KubernetesModelService.prototype.getService = function (namespace, id) { + return this.servicesByKey[createKey(namespace, id, 'service')]; + }; + KubernetesModelService.prototype.getReplicationController = function (namespace, id) { + return this.replicationControllersByKey[createKey(namespace, id, 'replicationController')]; + }; + KubernetesModelService.prototype.getPod = function (namespace, id) { + return this.podsByKey[createKey(namespace, id, 'pod')]; + }; + KubernetesModelService.prototype.podsForNamespace = function (namespace) { + if (namespace === void 0) { namespace = this.currentNamespace(); } + return _.filter(this.pods, { namespace: namespace }); + }; + KubernetesModelService.prototype.getBuildConfig = function (name) { + return _.find(this.buildconfigs, { $name: name }); + }; + KubernetesModelService.prototype.getProject = function (name, ns) { + if (ns === void 0) { ns = this.currentNamespace(); } + var buildConfig = this.project; + if (!buildConfig) { + var text = localStorage[Kubernetes.FABRIC8_PROJECT_JSON]; + if (text) { + try { + buildConfig = angular.fromJson(text); + } + catch (e) { + Kubernetes.log.warn("Could not parse json for " + Kubernetes.FABRIC8_PROJECT_JSON + ". Was: " + text + ". " + e, e); + } + } } - else { - Developer.log.warn("Cannot post to jenkins URI: " + uri + " as no jenkins found!"); + if (buildConfig && ns != Kubernetes.getNamespace(buildConfig) && name != buildConfig.$name) { + buildConfig = this.getBuildConfig(name); } - } - $scope.$keepPolling = function () { return Kubernetes.keepPollingModel; }; - $scope.fetch = PollHelpers.setupPolling($scope, function (next) { - if ($scope.$eval('hideLogs && !build.building')) { - Developer.log.debug("Log hidden, not fetching logs"); - return; + return buildConfig; + }; + KubernetesModelService.prototype.setProject = function (buildConfig) { + this.project = buildConfig; + if (buildConfig) { + // lets store in local storage + var localStorage = Kubernetes.inject("localStorage"); + if (localStorage) { + localStorage[Kubernetes.FABRIC8_PROJECT_JSON] = angular.toJson(buildConfig); + } } - else { - Developer.log.debug("Fetching logs for build: ", $scope.$eval('build')); + }; + /** + * Returns the current selected namespace or the default namespace + */ + KubernetesModelService.prototype.currentNamespace = function () { + var answer = null; + if (this.kubernetes) { + answer = this.kubernetes.selectedNamespace; } - var buildId = getBuildId(); - var jobId = getJobId(); - //log.info("=== jenkins log querying job " + jobId + " build " + buildId + " selected build " + $scope.selectedBuild); - if (jobId && buildId) { - if ($scope.buildId !== buildId || $scope.jobId !== jobId) { - // lets clear the query - $scope.log = { - html: "", - start: 0, - firstIdx: null - }; - } - $scope.buildId = buildId; - $scope.jobId = jobId; - var url = Kubernetes.kubernetesProxyUrlForServiceCurrentNamespace(Developer.jenkinsServiceNameAndPort, UrlHelpers.join("job", jobId, buildId, "fabric8/logHtml?tail=1&start=" + $scope.log.start + "&size=" + querySize)); - if ($scope.log.firstIdx !== null) { - url += "&first=" + $scope.log.firstIdx; - } - if (url && (!$scope.log.fetched || Kubernetes.keepPollingModel)) { - $http.get(url). - success(function (data, status, headers, config) { - if (data) { - var replaceClusterIPsInHtml = replaceClusterIpFunction(); - if (!$scope.log.logs) { - $scope.log.logs = []; + return answer || Kubernetes.defaultNamespace; + }; + KubernetesModelService.prototype.updateIconUrlAndAppInfo = function (entity, nameField) { + var answer = null; + var id = Kubernetes.getName(entity); + entity.$iconUrl = Core.pathGet(entity, ['metadata', 'annotations', 'fabric8.' + id + '/iconUrl']); + entity.$info = Core.pathGet(entity, ['metadata', 'annotations', 'fabric8.' + id + '/summary']); + if (entity.$iconUrl) { + return; + } + if (id && nameField) { + (this.templates || []).forEach(function (template) { + var metadata = template.metadata; + if (metadata) { + var annotations = metadata.annotations || {}; + var iconUrl = annotations["fabric8." + id + "/iconUrl"] || annotations["fabric8/iconUrl"]; + if (iconUrl) { + (template.objects || []).forEach(function (item) { + var entityName = Kubernetes.getName(item); + if (id === entityName) { + entity.$iconUrl = iconUrl; + } + }); + } + } + }); + (this.appInfos || []).forEach(function (appInfo) { + var iconPath = appInfo.iconPath; + if (iconPath && !answer && iconPath !== "null") { + var iconUrl = Kubernetes.gitPathToUrl(iconPath); + var ids = Core.pathGet(appInfo, ["names", nameField]); + angular.forEach(ids, function (appId) { + if (appId === id) { + entity.$iconUrl = iconUrl; + entity.appPath = appInfo.appPath; + entity.$info = appInfo; } - var lines = data.lines; - var returnedLength = data.returnedLength; - var logLength = data.logLength; - var returnedStart = data.start; - var earlierLog = false; - if (angular.isDefined(returnedStart)) { - earlierLog = returnedStart < $scope.log.start; - } - var lineSplit = data.lineSplit; - // log.info("start was: " + $scope.log.start + " first: " + $scope.log.firstIdx + " => returnedLength: " + returnedLength + " logLength: " + logLength + " returnedStart: " + returnedStart + " earlierLog: " + earlierLog + " lineSplit: " + lineSplit); - if (lines) { - var currentLogs = $scope.log.logs; - // lets re-join split lines - if (lineSplit && currentLogs.length) { - var lastIndex; - var restOfLine; - if (earlierLog) { - lastIndex = 0; - restOfLine = lines.pop(); - if (restOfLine) { - currentLogs[lastIndex] = replaceClusterIPsInHtml(restOfLine + currentLogs[lastIndex]); - } - } - else { - lastIndex = currentLogs.length - 1; - restOfLine = lines.shift(); - if (restOfLine) { - currentLogs[lastIndex] = replaceClusterIPsInHtml(currentLogs[lastIndex] + restOfLine); - } - } - } - for (var i = 0; i < lines.length; i++) { - lines[i] = replaceClusterIPsInHtml(lines[i]); - } - if (earlierLog) { - $scope.log.logs = lines.concat(currentLogs); - } - else { - $scope.log.logs = currentLogs.concat(lines); - } - } - var moveForward = true; - if (angular.isDefined(returnedStart)) { - if (returnedStart > $scope.log.start && $scope.log.start === 0) { - // we've jumped to the end of the file to read the tail of it - $scope.log.start = returnedStart; - $scope.log.firstIdx = returnedStart; - } - else if ($scope.log.firstIdx === null) { - // lets remember where the first request started - $scope.log.firstIdx = returnedStart; - } - else if (returnedStart < $scope.log.firstIdx) { - // we've got an earlier bit of the log - // after starting at the tail - // so lets move firstIdx backwards and leave start as it is (at the end of the file) - $scope.log.firstIdx = returnedStart; - moveForward = false; - } - } - if (moveForward && returnedLength && !earlierLog) { - $scope.log.start += returnedLength; - if (logLength && $scope.log.start > logLength) { - $scope.log.start = logLength; - } - } - updateJenkinsLink(); - } - $scope.log.fetched = true; - // Core.$apply($scope); - next(); - }). - error(function (data, status, headers, config) { - Developer.log.warn("Failed to load " + url + " " + data + " " + status); - next(); - }); - } - } - else { - $scope.log.fetched = true; - Core.$apply($scope); - next(); + }); + } + }); } - }); - if (angular.isFunction($scope.fetch)) { - $scope.fetch(); - } - function replaceClusterIpFunction() { - function createReplaceFunction(from, to) { - return function (text) { return replaceText(text, from, to); }; + if (!entity.$iconUrl) { + entity.$iconUrl = Kubernetes.defaultIconUrl; } - var replacements = []; - angular.forEach($scope.model.services, function (service) { - var $portalIP = service.$portalIP; - var $serviceUrl = service.$serviceUrl; - var $portsText = service.$portsText; - if ($portalIP && $serviceUrl) { - var idx = $serviceUrl.indexOf("://"); - if (idx > 0) { - var replaceWith = $serviceUrl.substring(idx, $serviceUrl.length); - if (!replaceWith.endsWith("/")) { - replaceWith += "/"; - } - if (replaceWith.length > 4) { - replacements.push(createReplaceFunction("://" + $portalIP + "/", replaceWith)); - if ($portsText) { - var suffix = ":" + $portsText; - var serviceWithPort = replaceWith.substring(0, replaceWith.length - 1); - if (!serviceWithPort.endsWith(suffix)) { - serviceWithPort += suffix; - } - serviceWithPort += "/"; - replacements.push(createReplaceFunction("://" + $portalIP + ":" + $portsText + "/", serviceWithPort)); - } + }; + KubernetesModelService.prototype.maybeInit = function () { + var _this = this; + this.fetched = true; + this.servicesByKey = {}; + this.podsByKey = {}; + this.replicationControllersByKey = {}; + this.pods.forEach(function (pod) { + if (!pod.kind) + pod.kind = "Pod"; + _this.podsByKey[pod._key] = pod; + var host = Kubernetes.getHost(pod); + pod.$labelsText = Kubernetes.labelsToString(Kubernetes.getLabels(pod)); + if (host) { + pod.$labelsText += Kubernetes.labelFilterTextSeparator + "host=" + host; + } + pod.$iconUrl = Kubernetes.defaultIconUrl; + _this.discoverPodConnections(pod); + pod.$containerPorts = []; + var podStatus = pod.status || {}; + var startTime = podStatus.startTime; + pod.$startTime = null; + if (startTime) { + pod.$startTime = new Date(startTime); + } + var createdTime = Kubernetes.getCreationTimestamp(pod); + pod.$createdTime = null; + pod.$age = null; + if (createdTime) { + pod.$createdTime = new Date(createdTime); + pod.$age = humandate.relativeTime(pod.$createdTime); + } + var ready = Kubernetes.isReady(pod); + pod.$ready = ready; + pod.$statusCss = Kubernetes.statusTextToCssClass(podStatus.phase, ready); + var maxRestartCount = 0; + angular.forEach(Core.pathGet(pod, ["status", "containerStatuses"]), function (status) { + var restartCount = status.restartCount; + if (restartCount) { + if (restartCount > maxRestartCount) { + maxRestartCount = restartCount; } } - } - }); - function addReplaceFn(from, to) { - replacements.push(function (text) { - return replaceText(text, from, to); }); - } - addReplaceFn("[INFO]", "[INFO]"); - addReplaceFn("[WARN]", "[WARN]"); - addReplaceFn("[WARNING]", "[WARNING]"); - addReplaceFn("[ERROR]", "[ERROR]"); - addReplaceFn("FAILURE", "FAILURE"); - addReplaceFn("SUCCESS", "SUCCESS"); - // lets try convert the Proceed / Abort links - replacements.push(function (text) { - var prefix = "= 0) { - idx = text.indexOf(prefix, idx); - if (idx >= 0) { - var start = idx + prefix.length; - var endQuote = text.indexOf("'", start + 1); - if (endQuote <= 0) { - break; + if (maxRestartCount) { + pod.$restartCount = maxRestartCount; + } + var imageNames = ""; + angular.forEach(Core.pathGet(pod, ["spec", "containers"]), function (container) { + var image = container.image; + if (image) { + if (!imageNames) { + imageNames = image; } - var endDoubleQuote = text.indexOf('"', endQuote + 1); - if (endDoubleQuote <= 0) { - break; + else { + imageNames = imageNames + " " + image; + } + var idx = image.lastIndexOf(":"); + if (idx > 0) { + image = image.substring(0, idx); + } + var paths = image.split("/", 3); + if (paths.length) { + var answer = null; + if (paths.length == 3) { + answer = paths[1] + "/" + paths[2]; + } + else if (paths.length == 2) { + answer = paths[0] + "/" + paths[1]; + } + else { + answer = paths[0] + "/" + paths[1]; + } + container.$imageLink = UrlHelpers.join("https://registry.hub.docker.com/u/", answer); } - var url = text.substring(start, endQuote); - // TODO using $compile is a tad complex, for now lets cheat with a little onclick ;) - //text = text.substring(0, idx) + " '" + to + "'"); - var idx = 0; - while (true) { - idx = text.indexOf(from, idx); - if (idx >= 0) { - text = text.substring(0, idx) + to + text.substring(idx + from.length); - idx += to.length; - } - else { - break; - } - } - } - return text; - } - }]); -})(Developer || (Developer = {})); - -/// -/// -/// -/// -/// -var Developer; -(function (Developer) { - Developer.JenkinsMetricsController = Developer.controller("JenkinsMetricsController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "ServiceRegistry", - function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, ServiceRegistry) { - $scope.kubernetes = KubernetesState; - $scope.model = KubernetesModel; - $scope.id = $routeParams["id"]; - $scope.jobId = $routeParams["job"]; - $scope.schema = KubernetesSchema; - $scope.jenkins = null; - $scope.entityChangedCache = {}; - Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); - $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs($scope.id); - $scope.subTabConfig = Developer.createProjectSubNavBars($scope.id, $scope.jobId); - $scope.$on('kubernetesModelUpdated', function () { - updateData(); - }); - $scope.$on('$routeUpdate', function ($event) { - updateData(); + pod.$imageNames = imageNames; + var podStatus = podStatus; + var podSpec = (pod.spec || {}); + pod.$podIP = podStatus.podIP; + pod.$host = podSpec.host || podSpec.nodeName || podStatus.hostIP; }); - $scope.options = { - chart: { - type: 'discreteBarChart', - autorefresh: false, - height: 450, - margin: { - top: 20, - right: 20, - bottom: 60, - left: 45 - }, - clipEdge: true, - staggerLabels: false, - transitionDuration: 500, - stacked: false, - interactive: true, - tooltip: { - enabled: true, - contentGenerator: function (args) { - var data = args.data || {}; - return data.tooltip; - }, - }, - color: function (d, i) { - return d.color; - }, - xAxis: { - axisLabel: 'Builds', - showMaxMin: false, - tickFormat: function (d) { - return "#" + d; - } - }, - yAxis: { - axisLabel: 'Build Duration (seconds)', - tickFormat: function (d) { - return d3.format(',.1f')(d); - } - } - } - }; - $scope.data = []; - updateData(); - function barColourForBuildResult(result) { - if (result) { - if (result === "FAILURE" || result === "FAILED") { - return "red"; - } - else if (result === "ABORTED" || result === "INTERUPTED") { - return "tan"; - } - else if (result === "SUCCESS") { - return "green"; - } - else if (result === "NOT_STARTED") { - return "lightgrey"; - } - } - return "darkgrey"; - } - function updateChartData() { - var useSingleSet = true; - var buildsSucceeded = []; - var buildsFailed = []; - var successBuildKey = "Succeeded builds"; - var failedBuildKey = "Failed builds"; - if (useSingleSet) { - successBuildKey = "Builds"; + this.services.forEach(function (service) { + if (!service.kind) + service.kind = "Service"; + _this.servicesByKey[service._key] = service; + var selector = Kubernetes.getSelector(service); + service.$pods = []; + if (!service.$podCounters) { + service.$podCounters = {}; } - var count = 0; - var builds = _.sortBy($scope.metrics.builds || [], "number"); - angular.forEach(builds, function (build) { - var x = build.number; - var y = build.duration / 1000; - var date = Developer.asDate(build.timeInMillis); - var result = build.result || "NOT_STARTED"; - var color = barColourForBuildResult(result); - var iconClass = Developer.createBuildStatusIconClass(result); - var tooltip = '

' + build.displayName + '

' + - '

duration: ' + y + ' seconds

'; - if (date) { - tooltip += '

started: ' + date + '

'; - } - if (result) { - tooltip += '

result: ' + result + '

'; - } - if (x) { - var data = buildsSucceeded; - var key = successBuildKey; - if (!successBuildKey && (!result || !result.startsWith("SUCC"))) { - data = buildsFailed; - key = failedBuildKey; - } - data.push({ - tooltip: tooltip, - color: color, - x: x, y: y }); - } - }); - $scope.data = []; - if (buildsSucceeded.length) { - $scope.data.push({ - key: successBuildKey, - values: buildsSucceeded + var podLinkUrl = UrlHelpers.join("/kubernetes/namespace", service.metadata.namespace, "pods"); + _.assign(service.$podCounters, selector ? Kubernetes.createPodCounters(selector, _this.pods, service.$pods, Kubernetes.labelsToString(selector, ","), podLinkUrl) : {}); + service.$podCount = service.$pods.length; + var selectedPods = service.$pods; + service.connectTo = selectedPods.map(function (pod) { + return pod._key; + }).join(','); + service.$labelsText = Kubernetes.labelsToString(Kubernetes.getLabels(service)); + _this.updateIconUrlAndAppInfo(service, "serviceNames"); + var spec = service.spec || {}; + service.$portalIP = spec.portalIP; + service.$selectorText = Kubernetes.labelsToString(spec.selector); + var ports = _.map(spec.ports || [], "port"); + service.$ports = ports; + service.$portsText = ports.join(", "); + var iconUrl = service.$iconUrl; + if (iconUrl && selectedPods) { + selectedPods.forEach(function (pod) { + pod.$iconUrl = iconUrl; }); } - if (buildsFailed.length) { - $scope.data.push({ - key: failedBuildKey, - values: buildsFailed + service.$serviceUrl = Kubernetes.serviceLinkUrl(service); + }); + this.replicationControllers.forEach(function (replicationController) { + if (!replicationController.kind) + replicationController.kind = "ReplicationController"; + _this.replicationControllersByKey[replicationController._key] = replicationController; + var selector = Kubernetes.getSelector(replicationController); + replicationController.$pods = []; + if (Kubernetes.isFilterRC(replicationController) && !Kubernetes.isInclude(_this.filterReplicationcontrollers, replicationController)) + _this.filterReplicationcontrollers.push(replicationController); + replicationController.$podCounters = selector ? Kubernetes.createPodCounters(selector, _this.pods, replicationController.$pods) : null; + replicationController.$podCount = replicationController.$pods.length; + replicationController.$replicas = (replicationController.spec || {}).replicas; + replicationController.$oracleName = Kubernetes.getOracleName(Kubernetes.getName(replicationController)); + //console.log(getName(replicationController)); + replicationController.$oracleStatus = Kubernetes.getOracleStatus(Kubernetes.getLabels(replicationController)); + var selectedPods = replicationController.$pods; + replicationController.connectTo = selectedPods.map(function (pod) { + return pod._key; + }).join(','); + replicationController.$labelsText = Kubernetes.labelsToString(Kubernetes.getLabels(replicationController)); + replicationController.metadata.labels = Kubernetes.labelToChinese(Kubernetes.getLabels(replicationController)); + _this.updateIconUrlAndAppInfo(replicationController, "replicationControllerNames"); + var iconUrl = replicationController.$iconUrl; + if (iconUrl && selectedPods) { + selectedPods.forEach(function (pod) { + pod.$iconUrl = iconUrl; }); } - $scope.api.updateWithData($scope.data); - $timeout(function () { - $scope.api.update(); - }, 50); - } - function updateData() { - var metricsPath = $scope.jobId ? UrlHelpers.join("job", $scope.jobId, "fabric8/metrics") : "fabric8/metrics"; - var url = Kubernetes.kubernetesProxyUrlForServiceCurrentNamespace(Developer.jenkinsServiceNameAndPort, metricsPath); - Developer.log.info(""); - if (url && (!$scope.jenkins || Kubernetes.keepPollingModel)) { - $http.get(url, Developer.jenkinsHttpConfig). - success(function (data, status, headers, config) { - if (data) { - if (Developer.hasObjectChanged(data, $scope.entityChangedCache)) { - Developer.log.info("entity has changed!"); - $scope.metrics = data; - updateChartData(); + }); + // services may not map to an icon but their pods may do via the RC + // so lets default it... + this.services.forEach(function (service) { + var iconUrl = service.$iconUrl; + var selectedPods = service.$pods; + if (selectedPods) { + if (!iconUrl || iconUrl === Kubernetes.defaultIconUrl) { + iconUrl = null; + selectedPods.forEach(function (pod) { + if (!iconUrl) { + iconUrl = pod.$iconUrl; + if (iconUrl) { + service.$iconUrl = iconUrl; + } } - } - $scope.model.fetched = true; - Core.$apply($scope); - }). - error(function (data, status, headers, config) { - Developer.log.warn("Failed to load " + url + " " + data + " " + status); - }); - } - } - }]); -})(Developer || (Developer = {})); - -/// -/// -/// -/// -/// -var Developer; -(function (Developer) { - Developer.NavBarController = Developer.controller("NavBarController", ["$scope", "$location", "$routeParams", "$timeout", "KubernetesApiURL", - function ($scope, $location, $routeParams, $timeout) { - $scope.isValid = function (item) { - if (item) { - var value = item.isValid; - if (angular.isFunction(value)) { - return value(item); - } - else { - return angular.isUndefined(value) || value; + }); } } - return false; - }; - }]); -})(Developer || (Developer = {})); - -/// -/// -/// -/// -/// -var Developer; -(function (Developer) { - Developer.PipelineController = Developer.controller("PipelineController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "ServiceRegistry", - function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, ServiceRegistry) { - $scope.kubernetes = KubernetesState; - $scope.kubeModel = KubernetesModel; - $scope.id = $routeParams["id"]; - $scope.jobId = $routeParams["job"]; - $scope.buildId = $routeParams["build"]; - $scope.schema = KubernetesSchema; - $scope.entityChangedCache = {}; - $scope.model = { - stages: null - }; - Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); - $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs($scope.id); - $scope.subTabConfig = Developer.createProjectSubNavBars($scope.id, $scope.jobId); - $scope.$on('kubernetesModelUpdated', function () { - updateData(); }); - $scope.$on('$routeUpdate', function ($event) { - updateData(); + this.updateApps(); + var podsByHost = {}; + this.pods.forEach(function (pod) { + var host = Kubernetes.getHost(pod); + var podsForHost = podsByHost[host]; + if (!podsForHost) { + podsForHost = []; + podsByHost[host] = podsForHost; + } + podsForHost.push(pod); }); - updateData(); - function updateData() { - if ($scope.jobId) { - var url = Kubernetes.kubernetesProxyUrlForServiceCurrentNamespace(Developer.jenkinsServiceNameAndPort, UrlHelpers.join("job", $scope.jobId, $scope.buildId, "fabric8/stages/")); - if (url && (!$scope.model.stages || Kubernetes.keepPollingModel)) { - $http.get(url). - success(function (data, status, headers, config) { - if (data) { - Developer.enrichJenkinsStages(data, $scope.id, $scope.jobId); - if (Developer.hasObjectChanged(data, $scope.entityChangedCache)) { - Developer.log.info("entity has changed!"); - $scope.build = data; - $scope.model.stages = data.stages; - } - } - $scope.model.fetched = true; - Core.$apply($scope); - }). - error(function (data, status, headers, config) { - Developer.log.warn("Failed to load " + url + " " + data + " " + status); - $scope.model.fetched = true; - }); + this.podsByHost = podsByHost; + var tmpHosts = []; + for (var hostKey in podsByHost) { + var hostPods = []; + var podCounters = Kubernetes.createPodCounters(function (pod) { return Kubernetes.getHost(pod) === hostKey; }, this.pods, hostPods, "host=" + hostKey); + var hostIP = null; + if (hostPods.length) { + var pod = hostPods[0]; + var currentState = pod.status; + if (currentState) { + hostIP = currentState.hostIP; } } - else { - $scope.model.fetched = true; - Core.$apply($scope); - } - } - }]); -})(Developer || (Developer = {})); - -/// -/// -/// -/// -/// -var Developer; -(function (Developer) { - Developer._module.directive("pipelineView", function () { - return { - templateUrl: Developer.templatePath + 'pipelineView.html' - }; - }); -})(Developer || (Developer = {})); - -/// -/// -/// -/// -/// -/// -var Developer; -(function (Developer) { - Developer.PipelinesController = Developer._module.controller("Developer.PipelinesController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "ServiceRegistry", "$element", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, ServiceRegistry, $element) { - $scope.kubernetes = KubernetesState; - $scope.kubeModel = KubernetesModel; - $scope.id = $routeParams["id"]; - $scope.jobId = $scope.jobId || $routeParams["job"]; - $scope.schema = KubernetesSchema; - $scope.entityChangedCache = {}; - $element.on('$destroy', function () { - $scope.$destroy(); - }); - $scope.model = { - job: null, - pendingOnly: $scope.pendingPipelinesOnly - }; - Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); - $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs($scope.id); - $scope.subTabConfig = Developer.createProjectSubNavBars($scope.id, $scope.jobId); - $scope.$on('kubernetesModelUpdated', function () { - updateData(); - }); - $scope.$on('$routeUpdate', function ($event) { - updateData(); - }); - $scope.$watch('model.pendingOnly', function ($event) { - updateData(); - }); - $scope.selectBuild = function (build) { - var id = build.id; - if (id) { - if (id !== $scope.selectedBuildId) { - $scope.selectedBuildId = id; - $scope.$broadcast("jenkinsSelectedBuild", build); - } + var hostDetails = { + name: hostKey, + id: hostKey, + elementId: hostKey.replace(/\./g, '_'), + hostIP: hostIP, + pods: hostPods, + kind: "Host", + $podCounters: podCounters, + $iconUrl: Kubernetes.hostIconUrl + }; + tmpHosts.push(hostDetails); } + this.hosts = tmpHosts; + Kubernetes.enrichBuildConfigs(this.buildconfigs); + Kubernetes.enrichEvents(this.events, this); }; - var updateData = _.debounce(function () { - var entity = $scope.entity; - if ($scope.jobId) { - if ((!entity || entity.$jenkinsJob)) { - var queryPath = "fabric8/stages/"; - if ($scope.model.pendingOnly) { - queryPath = "fabric8/pendingStages/"; - } - var url = Kubernetes.kubernetesProxyUrlForServiceCurrentNamespace(Developer.jenkinsServiceNameAndPort, UrlHelpers.join("job", $scope.jobId, queryPath)); - if (url && (!$scope.model.job || Kubernetes.keepPollingModel)) { - $http.get(url). - success(function (data, status, headers, config) { - if (data) { - Developer.enrichJenkinsPipelineJob(data, $scope.id, $scope.jobId); - if (Developer.hasObjectChanged(data, $scope.entityChangedCache)) { - Developer.log.info("entity has changed!"); - $scope.model.job = data; - var builds = data.builds; - if (builds && builds.length) { - $scope.selectBuild(builds[0]); - } - } + KubernetesModelService.prototype.updateApps = function () { + var _this = this; + try { + // lets create the app views by trying to join controllers / services / pods that are related + var appViews = []; + this.replicationControllers.forEach(function (replicationController) { + var name = Kubernetes.getName(replicationController); + var $iconUrl = replicationController.$iconUrl; + appViews.push({ + appPath: "/dummyPath/" + name, + $name: name, + $info: { + $iconUrl: $iconUrl + }, + $iconUrl: $iconUrl, + replicationControllers: [replicationController], + pods: replicationController.$pods || [], + services: [] + }); + }); + var noMatches = []; + this.services.forEach(function (service) { + // now lets see if we can find an app with an RC of the same selector + var matchesApp = null; + appViews.forEach(function (appView) { + appView.replicationControllers.forEach(function (replicationController) { + var repSelector = Kubernetes.getSelector(replicationController); + if (repSelector && + Kubernetes.selectorMatches(repSelector, Kubernetes.getSelector(service)) && + Kubernetes.getNamespace(service) === Kubernetes.getNamespace(replicationController)) { + matchesApp = appView; } - $scope.model.fetched = true; - Core.$apply($scope); - }). - error(function (data, status, headers, config) { - Developer.log.warn("Failed to load " + url + " " + data + " " + status); - $scope.model.fetched = true; }); + }); + if (matchesApp) { + matchesApp.services.push(service); } - } - else { - if ($scope.model) { - Kubernetes.enrichBuilds($scope.kubeModel.builds); - var builds = []; - angular.forEach($scope.kubeModel.builds, function (build) { - var labels = Kubernetes.getLabels(build); - var app = labels["app"]; - if (app === $scope.projectId) { - builds.push(build); - } + else { + noMatches.push(service); + } + }); + Kubernetes.log.debug("no matches: ", noMatches); + noMatches.forEach(function (service) { + var appView = _.find(appViews, function (appView) { + return _.any(appView.replicationControllers, function (rc) { + return _.startsWith(Kubernetes.getName(rc), Kubernetes.getName(service)); }); - builds = _.sortBy(builds, "$creationDate").reverse(); - var allBuilds = builds; - if (allBuilds.length > 1) { - builds = _.filter(allBuilds, function (b) { return !b.$creationDate; }); - if (!builds.length) { - builds = [allBuilds[0]]; - } - } - var pipelines = []; - angular.forEach(builds, function (build) { - var buildStatus = build.status || {}; - var result = buildStatus.phase || ""; - var resultUpperCase = result.toUpperCase(); - var description = ""; - var $viewLink = build.$viewLink; - var $logLink = build.$logsLink; - var $timestamp = build.$creationDate; - var duration = buildStatus.duration; - if (duration) { - // 17s = 17,000,000,000 on openshift - duration = duration / 1000000; - } - var displayName = Kubernetes.getName(build); - var $iconClass = Developer.createBuildStatusIconClass(resultUpperCase); - var $backgroundClass = Developer.createBuildStatusBackgroundClass(resultUpperCase); - var stage = { - stageName: "OpenShift Build", - $viewLink: $viewLink, - $logLink: $logLink, - $startTime: $timestamp, - duration: duration, - status: result, - $iconClass: $iconClass, - $backgroundClass: $backgroundClass - }; - var pipeline = { - description: description, - displayName: displayName, - $viewLink: $viewLink, - $logLink: $logLink, - $timestamp: $timestamp, - duration: duration, - stages: [stage] - }; - pipelines.push(pipeline); + }); + if (appView) { + appView.services.push(service); + } + else { + var $iconUrl = service.$iconUrl; + appViews.push({ + appPath: "/dummyPath/" + name, + $name: name, + $info: { + $iconUrl: $iconUrl + }, + $iconUrl: $iconUrl, + replicationControllers: [], + pods: service.$pods || [], + services: [service] }); - // lets filter the OpenShift builds and make a pipeline from that - $scope.model.job = { - $jobId: $scope.jobId, - $project: $scope.projectId, - builds: pipelines - }; } - $scope.model.fetched = true; - Core.$apply($scope); - } - } - else { - $scope.model.fetched = true; - Core.$apply($scope); - } - }, 50); - updateData(); - }]); -})(Developer || (Developer = {})); - -/// -/// -/// -/// -/// -var Developer; -(function (Developer) { - Developer.ProjectController = Developer.controller("ProjectController", ["$scope", "$element", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", - function ($scope, $element, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { - $scope.kubernetes = KubernetesState; - $scope.model = KubernetesModel; - $scope.id = $routeParams["id"]; - $scope.schema = KubernetesSchema; - $scope.config = KubernetesSchema.definitions.os_build_BuildConfig; - $scope.entityChangedCache = {}; - $scope.envVersionsCache = {}; - $scope.envNSCaches = {}; - $scope.envVersions = {}; - Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); - $scope.breadcrumbConfig = []; //Developer.createProjectBreadcrumbs($scope.id); - updateTabs(); - // this is used for the pendingPipelines view - $scope.jobId = $scope.id; - $scope.pendingPipelinesOnly = true; - $scope.$on('jenkinsSelectedBuild', function (event, build) { - $scope.selectedBuild = build; - }); - // TODO this should be unnecessary but seems sometiems this watch doesn't always trigger unless you hit reload on this page - if ($scope.model.buildconfigs) { - onBuildConfigs($scope.model.buildconfigs); - } - Kubernetes.watch($scope, $element, "buildconfigs", $scope.namespace, onBuildConfigs); - function onBuildConfigs(buildConfigs) { - angular.forEach(buildConfigs, function (data) { - var name = Kubernetes.getName(data); - if (name === $scope.id) { - var sortedBuilds = null; - Kubernetes.enrichBuildConfig(data, sortedBuilds); - if (Developer.hasObjectChanged(data, $scope.entityChangedCache)) { - Developer.log.info("entity has changed!"); - $scope.entity = data; - $scope.entity.$build = (data.$fabric8CodeViews || {})['fabric8.link.browseGogs.view']; - $scope.model.setProject($scope.entity); + }); + angular.forEach(this.routes, function (route) { + var metadata = route.metadata || {}; + var spec = route.spec || {}; + var serviceName = Core.pathGet(spec, ["to", "name"]); + var host = spec.host; + var namespace = Kubernetes.getNamespace(route); + if (serviceName && host) { + var service = _this.getService(namespace, serviceName); + if (service) { + service.$host = host; + // TODO we could use some annotations / metadata to deduce what URL we should use to open this + // service in the console. For now just assume its http: + if (host) { + var hostUrl = host; + if (hostUrl.indexOf("://") < 0) { + hostUrl = "http://" + host; + } + service.$connectUrl = UrlHelpers.join(hostUrl, "/"); + } + // TODO definitely need that annotation, temp hack for apiman link + if (Kubernetes.getName(service) === 'apiman' && host) { + service.$connectUrl = new URI().host(service.$host) + .path('apimanui/index.html') + .query({}) + .hash(URI.encode(angular.toJson({ + backTo: new URI().toString(), + token: HawtioOAuth.getOAuthToken() + }))).toString(); + } + } + else { + Kubernetes.log.debug("Could not find service " + serviceName + " namespace " + namespace + " for route: " + metadata.name); } - updateEnvironmentWatch(); - updateTabs(); } }); - $scope.model.fetched = true; - Core.$apply($scope); - } - /** - * We have updated the entity so lets make sure we are watching all the environments to find - * the project versions for each namespace - */ - function updateEnvironmentWatch() { - var project = $scope.entity; - if (project) { - var jenkinsJob = project.$jenkinsJob; - if (jenkinsJob) { - var buildsTab = _.find($scope.subTabConfig, { id: "builds" }); - if (buildsTab) { - buildsTab["href"] = UrlHelpers.join("/workspaces", Kubernetes.currentKubernetesNamespace(), "projects", $scope.id, "jenkinsJob", jenkinsJob); + appViews = _.sortBy(populateKeys(appViews), function (appView) { return appView._key; }); + ArrayHelpers.sync(this.appViews, appViews, '$name'); + if (this.appInfos && this.appViews) { + var folderMap = {}; + var folders = []; + var appMap = {}; + angular.forEach(this.appInfos, function (appInfo) { + if (!appInfo.$iconUrl && appInfo.iconPath && appInfo.iconPath !== "null") { + appInfo.$iconUrl = Kubernetes.gitPathToUrl(appInfo.iconPath); } - } - angular.forEach(project.environments, function (env) { - var ns = env.namespace; - var caches = $scope.envNSCaches[ns]; - if (!caches) { - caches = {}; - $scope.envNSCaches[ns] = caches; - Developer.loadProjectVersions($scope, $element, project, env, ns, $scope.envVersions, caches); + var appPath = appInfo.appPath; + if (appPath) { + appMap[appPath] = appInfo; + var idx = appPath.lastIndexOf("/"); + var folderPath = ""; + if (idx >= 0) { + folderPath = appPath.substring(0, idx); + } + folderPath = Core.trimLeading(folderPath, "/"); + var folder = folderMap[folderPath]; + if (!folder) { + folder = { + path: folderPath, + expanded: true, + apps: [] + }; + folders.push(folder); + folderMap[folderPath] = folder; + } + folder.apps.push(appInfo); + } + }); + this.appFolders = _.sortBy(folders, "path"); + var apps = []; + var defaultInfo = { + $iconUrl: Kubernetes.defaultIconUrl + }; + angular.forEach(this.appViews, function (appView) { + try { + var appPath = appView.appPath; + /* + TODO + appView.$select = () => { + Kubernetes.setJson($scope, appView.id, $scope.model.apps); + }; + */ + var appInfo = angular.copy(defaultInfo); + if (appPath) { + appInfo = appMap[appPath] || appInfo; + } + if (!appView.$info) { + appView.$info = defaultInfo; + appView.$info = appInfo; + } + appView.id = appPath; + if (!appView.$name) { + appView.$name = appInfo.name || appView.$name; + } + if (!appView.$iconUrl) { + appView.$iconUrl = appInfo.$iconUrl; + } + apps.push(appView); + appView.$podCounters = Kubernetes.createAppViewPodCounters(appView); + appView.$podCount = (appView.pods || []).length; + appView.$replicationControllersText = (appView.replicationControllers || []).map(function (i) { return i["_key"]; }).join(" "); + appView.$servicesText = (appView.services || []).map(function (i) { return i["_key"]; }).join(" "); + appView.$serviceViews = Kubernetes.createAppViewServiceViews(appView); + } + catch (e) { + Kubernetes.log.warn("Failed to update appViews: " + e); } }); + //this.apps = apps; + this.apps = this.appViews; } } - function updateTabs() { - $scope.subTabConfig = Developer.createProjectSubNavBars($scope.id, null, $scope); - } - }]); -})(Developer || (Developer = {})); - -/// -var Developer; -(function (Developer) { - Developer._module.controller('Developer.ProjectSelector', ['$scope', '$routeParams', 'KubernetesModel', function ($scope, $routeParams, KubernetesModel) { - var projectId = $routeParams['projectId'] || $routeParams['project'] || $routeParams['id']; - if (projectId) { - $scope.projectId = projectId; - $scope.model = KubernetesModel; - $scope.$watch('model.buildconfigs', function (buildconfigs) { - $scope.projects = buildconfigs; - }); - } - else { - Developer.log.info("no project ID in routeParams: ", $routeParams); + catch (e) { + Kubernetes.log.warn("Caught error: " + e); } - }]); -})(Developer || (Developer = {})); - -/// -/// -/// -/// -/// -var Developer; -(function (Developer) { - Developer.ProjectsController = Developer.controller("ProjectsController", ["$scope", "KubernetesModel", "KubernetesState", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", - function ($scope, KubernetesModel, KubernetesState, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { - $scope.kubernetes = KubernetesState; - $scope.model = KubernetesModel; - $scope.tableConfig = { - data: 'model.buildconfigs', - showSelectionCheckbox: true, - enableRowClickSelection: false, - multiSelect: true, - selectedItems: [], - filterOptions: { - filterText: $location.search()["q"] || '' - }, - columnDefs: [ - { - field: '$name', - displayName: 'Name', - cellTemplate: $templateCache.get("idTemplate.html") - }, - /* - { - field: 'spec.source.type', - displayName: 'Source' - }, - */ - { - field: 'spec.source.git.uri', - displayName: 'Repository' - }, - /* - { - field: 'spec.strategy.type', - displayName: 'Strategy' - }, - { - field: 'spec.strategy.stiStrategy.image', - displayName: 'Source Image' - }, - { - field: 'spec.output.imageTag', - displayName: 'Output Image' - }, - */ - { - field: 'metadata.description', - displayName: 'Description' - }, - { - field: '$creationDate', - displayName: 'Created', - cellTemplate: $templateCache.get("creationTimeTemplate.html") - }, - { - field: '$labelsText', - displayName: 'Labels', - cellTemplate: $templateCache.get("labelTemplate.html") + }; + KubernetesModelService.prototype.discoverPodConnections = function (entity) { + var info = Core.pathGet(entity, ["status", "info"]); + var hostPort = null; + var currentState = entity.status || {}; + var desiredState = entity.spec || {}; + var podId = Kubernetes.getName(entity); + var host = currentState["hostIP"]; + var podIP = currentState["podIP"]; + var hasDocker = false; + var foundContainerPort = null; + if (desiredState) { + var containers = desiredState.containers; + angular.forEach(containers, function (container) { + if (!hostPort) { + var ports = container.ports; + angular.forEach(ports, function (port) { + if (!hostPort) { + var containerPort = port.containerPort; + var portName = port.name; + var containerHostPort = port.hostPort; + if (containerPort === 8778 || "jolokia" === portName) { + if (containerPort) { + if (podIP) { + foundContainerPort = containerPort; + } + if (containerHostPort) { + hostPort = containerHostPort; + } + } + } + } + }); } - ] + }); + } + if (foundContainerPort && podId && Kubernetes.isRunning(currentState)) { + if (!Kubernetes.isOpenShift) { + // TODO temp workaround for k8s on GKE https://github.com/kubernetes/kubernetes/issues/17172 + entity.$jolokiaUrl = UrlHelpers.join(Kubernetes.masterApiUrl(), "api", Kubernetes.defaultApiVersion, "proxy", "namespaces", entity.metadata.namespace, "pods", + //"https:" + podId + ":" + foundContainerPort, + podId + ":" + foundContainerPort, "jolokia/"); + } + else { + entity.$jolokiaUrl = UrlHelpers.join(Kubernetes.masterApiUrl(), "api", Kubernetes.defaultApiVersion, "namespaces", entity.metadata.namespace, "pods", "https:" + podId + ":" + foundContainerPort, "proxy/jolokia/"); + } + } + }; + return KubernetesModelService; + }()); + Kubernetes.KubernetesModelService = KubernetesModelService; + function getTemplateService(model) { + var key = createKey('default', 'templates', 'service'); + var answer = model.servicesByKey[key]; + Kubernetes.log.debug("found template service: ", answer); + return answer; + } + /** + * Creates a model service which keeps track of all the pods, replication controllers and services along + * with their associations and status + */ + Kubernetes._module.factory('KubernetesModel', ['$rootScope', '$http', 'KubernetesApiURL', 'KubernetesState', 'WatcherService', '$location', '$resource', function ($rootScope, $http, AppLibraryURL, KubernetesState, watcher, $location, $resource) { + var $scope = new KubernetesModelService(); + $scope.kubernetes = KubernetesState; + // create all of our resource classes + var typeNames = watcher.getTypes(); + _.forEach(typeNames, function (type) { + var urlTemplate = Kubernetes.uriTemplateForKubernetesKind(type); + $scope[type + 'Resource'] = Kubernetes.createResource(type, urlTemplate, $resource, $scope); + }); + if (!Kubernetes.isOpenShift) { + // register custom URL factories for templates/projects + watcher.registerCustomUrlFunction(KubernetesAPI.WatchTypes.BUILD_CONFIGS, function (options) { + var templateService = getTemplateService($scope); + if (templateService) { + return UrlHelpers.join(templateService.proxyUrl, '/oapi/v1/namespaces/default/buildconfigs/'); + } + return null; + }); + // register custom URL factories for templates/projects + watcher.registerCustomUrlFunction(KubernetesAPI.WatchTypes.TEMPLATES, function (options) { + var templateService = getTemplateService($scope); + if (templateService) { + return UrlHelpers.join(templateService.proxyUrl, '/oapi/v1/namespaces/default/templates/'); + } + return null; + }); + } + // register for all updates on objects + watcher.registerListener(function (objects) { + var types = watcher.getTypes(); + _.forEach(types, function (type) { + switch (type) { + case Kubernetes.WatchTypes.SERVICES: + var items = populateKeys(objects[type]); + angular.forEach(items, function (item) { + item.proxyUrl = Kubernetes.kubernetesProxyUrlForService(Kubernetes.kubernetesApiUrl(), item); + }); + $scope[type] = items; + break; + case Kubernetes.WatchTypes.TEMPLATES: + case Kubernetes.WatchTypes.ROUTES: + case Kubernetes.WatchTypes.BUILDS: + case Kubernetes.WatchTypes.BUILD_CONFIGS: + case Kubernetes.WatchTypes.IMAGE_STREAMS: + // don't put a break here :-) + default: + $scope[type] = populateKeys(objects[type]); + } + Kubernetes.log.debug("Type: ", type, " object: ", $scope[type]); + }); + $scope.maybeInit(); + $rootScope.$broadcast('kubernetesModelUpdated', $scope); + Core.$apply($rootScope); + }); + // set the selected namespace if set in the location bar + // otherwise use whatever previously selected namespace is + // available + var search = $location.search(); + if ('namespace' in search) { + watcher.setNamespace(search['namespace']); + } + function selectPods(pods, namespace, labels) { + return pods.filter(function (pod) { + return Kubernetes.getNamespace(pod) === namespace && Kubernetes.selectorMatches(labels, Kubernetes.getLabels(pod)); + }); + } + return $scope; + }]); +})(Kubernetes || (Kubernetes = {})); + +/// +/// +/// +/// +var Kubernetes; +(function (Kubernetes) { + Kubernetes.HostController = Kubernetes.controller("HostController", ["$scope", "KubernetesModel", "KubernetesState", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", + function ($scope, KubernetesModel, KubernetesState, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { + $scope.kubernetes = KubernetesState; + $scope.model = KubernetesModel; + $scope.rawModel = null; + $scope.itemConfig = { + properties: {} }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); - $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs(); - $scope.subTabConfig = Developer.createWorkspaceSubNavBars(); - // TODO - //$scope.isLoggedIntoGogs = Forge.isLoggedIntoGogs; - $scope.deletePrompt = function (selected) { - UI.multiItemConfirmActionDialog({ - collection: selected, - index: '$name', - onClose: function (result) { - if (result) { - function deleteSelected(selected, next) { - if (next) { - deleteEntity(next, function () { - deleteSelected(selected, selected.shift()); - }); - } - else { - } - } - deleteSelected(selected, selected.shift()); - } - }, - title: 'Delete Apps', - action: 'The following Apps will be deleted:', - okText: 'Delete', - okClass: 'btn-danger', - custom: "This operation is permanent once completed!", - customClass: "alert alert-warning" - }).open(); + $scope.$on('kubernetesModelUpdated', function () { + updateData(); + }); + $scope.$on('$routeUpdate', function ($event) { + updateData(); + }); + $scope.flipRaw = function () { + $scope.rawMode = !$scope.rawMode; + Core.$apply($scope); }; - function deleteEntity(selection, nextCallback) { - var name = (selection || {}).$name; - var jenkinsJob = selection.$jenkinsJob; - var publicJenkinsUrl = Developer.jenkinsLink(); - //var jenkinsUrl = Core.pathGet(selection, ["$fabric8Views", "fabric8.link.jenkins.job", "url"]); - if (name) { - console.log("About to delete build config: " + name); - var url = Kubernetes.buildConfigRestUrl(name); - $http.delete(url). + updateData(); + function updateData() { + $scope.id = $routeParams["id"]; + $scope.item = null; + if ($scope.id) { + var url = UrlHelpers.join(KubernetesApiURL, "nodes", $scope.id); + $http.get(url). success(function (data, status, headers, config) { - nextCallback(); + if (data) { + $scope.item = data; + } + if ($scope.item) { + $scope.rawModel = Kubernetes.toRawYaml($scope.item); + } }). error(function (data, status, headers, config) { - Developer.log.warn("Failed to delete build config on " + url + " " + data + " " + status); - nextCallback(); + Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); }); } else { - console.log("warning: no name for selection: " + angular.toJson(selection)); - } - if (jenkinsJob && publicJenkinsUrl) { - var url = Kubernetes.kubernetesProxyUrlForServiceCurrentNamespace(Developer.jenkinsServiceNameAndPort, UrlHelpers.join("job", jenkinsJob, "doDelete")); - var body = ""; - var config = { - headers: { - 'Content-Type': "text/plain" - } - }; - Developer.log.info("posting to jenkinsUrl: " + url); - $http.post(url, body, config). - success(function (data, status, headers, config) { - Developer.log.info("Managed to delete " + url); - }). - error(function (data, status, headers, config) { - Developer.log.warn("Failed to delete jenkins job at " + url + " " + data + " " + status); - }); + $scope.rawModel = null; + Core.$apply($scope); } } - /* - $scope.$keepPolling = () => Kubernetes.keepPollingModel; - $scope.fetch = PollHelpers.setupPolling($scope, (next:() => void) => { - var url = Kubernetes.buildConfigsRestURL(); - $http.get(url). - success(function (data, status, headers, config) { - if (data) { - //console.log("got data " + angular.toJson(data, true)); - var sortedBuilds = null; - $scope.buildConfigs = Kubernetes.enrichBuildConfigs(data.items, sortedBuilds); - $scope.model.fetched = true; - Core.$apply($scope); - next(); - } - }). - error(function (data, status, headers, config) { - log.warn("Failed to load " + url + " " + data + " " + status); - next(); - }); - }); - - $scope.fetch(); - */ }]); -})(Developer || (Developer = {})); +})(Kubernetes || (Kubernetes = {})); /// -/// -/// -/// -/// -var Developer; -(function (Developer) { - Developer.WorkspaceController = Developer.controller("WorkspaceController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", - function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { - $scope.kubernetes = KubernetesState; - $scope.model = KubernetesModel; - $scope.id = $routeParams["namespace"]; - $scope.schema = KubernetesSchema; - $scope.config = KubernetesSchema.definitions.kubernetes_Namespace; - Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); - $scope.breadcrumbConfig = Developer.createWorkspaceBreadcrumbs(); - $scope.subTabConfig = Developer.createWorkspaceSubNavBars(); - $scope.$keepPolling = function () { return Kubernetes.keepPollingModel; }; - $scope.fetch = PollHelpers.setupPolling($scope, function (next) { - $scope.item = null; - if ($scope.id) { - var url = UrlHelpers.join(Kubernetes.resourcesUriForKind("Projects"), $scope.id); - Developer.log.info("Loading url: " + url); - $http.get(url). - success(function (data, status, headers, config) { - if (data) { - $scope.entity = Developer.enrichWorkspace(data); +var Kubernetes; +(function (Kubernetes) { + Kubernetes.hostPorts = []; + /** + * Sorts the the ip field + * + * @param ip the ip such as '10.1.2.13' + * @returns {any} + */ + function sortByPodIp(ip) { + // i guess there is maybe nicer ways of sort this without parsing and slicing + var regex = /(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/; + var groups = regex.exec(ip); + if (angular.isDefined(groups)) { + var g1 = ("00" + groups[1]).slice(-3); + var g2 = ("00" + groups[2]).slice(-3); + var g3 = ("00" + groups[3]).slice(-3); + var g4 = ("00" + groups[4]).slice(-3); + var answer = g1 + g2 + g3 + g4; + return answer; + } + else { + return 0; + } + } + Kubernetes.sortByPodIp = sortByPodIp; + function ramdomPort() { + var hostPort = Math.floor(30000 + Math.random() * (65535 - 30000)); + while (Kubernetes.hostPorts.indexOf(hostPort) === 0) { + hostPort = Math.floor(30000 + Math.random() * (65535 - 30000)); + } + Kubernetes.hostPorts.push(hostPort); + return hostPort; + } + Kubernetes.ramdomPort = ramdomPort; + function getRandomString(len) { + len = len || 32; + var $chars = 'abcdefhijkmnprstwxyz'; // 默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1 + var maxPos = $chars.length; + var pwd = ''; + for (var i = 0; i < len; i++) { + pwd += $chars.charAt(Math.floor(Math.random() * maxPos)); + } + return pwd; + } + Kubernetes.getRandomString = getRandomString; + var resourceRCTemplate = (function () { + function resourceRCTemplate() { + this.image = "s1:latest"; + this.names = ["admin", "cfgtoollogs", "checkpoints", "diag", "flash-recovery-area", "oradata"]; + } + resourceRCTemplate.prototype.createRC = function (Obj) { + var labels = { + "style": "oracle", + "status": "0", + "isExtract": "0", + "isTarget": Obj.isTarget + }; + for (var item in Obj.labels) + labels[item] = Obj.labels[item]; + return { + "apiVersion": Kubernetes.defaultApiVersion, + "kind": "ReplicationController", + "metadata": { + "name": Obj.name, + "labels": labels + }, + "spec": { + replicas: Obj.replicas || 1, + "template": this.createTemplate(Obj) + } + }; + }; + resourceRCTemplate.prototype.createVolumeMounts = function () { + var volumeMounts = []; + for (var item in this.names) { + if (this.names[item] === 'flash-recovery-area') + volumeMounts.push({ + "name": this.names[item], + "mountPath": "/opt/oracle/app/flash_recovery_area" + }); + else + volumeMounts.push({ + "name": this.names[item], + "mountPath": "/opt/oracle/app/" + this.names[item] + }); + } + return volumeMounts; + }; + resourceRCTemplate.prototype.createVolumes = function (rootPath) { + var volumes = []; + for (var item in this.names) { + if (this.names[item] === 'flash-recovery-area') + volumes.push({ + "name": this.names[item], + "hostPath": { + "path": rootPath + "flash_recovery_area" } - $scope.model.fetched = true; - Core.$apply($scope); - next(); - }). - error(function (data, status, headers, config) { - Developer.log.warn("Failed to load " + url + " " + data + " " + status); - next(); }); - } - else { - $scope.model.fetched = true; - Core.$apply($scope); - next(); - } + else + volumes.push({ + "name": this.names[item], + "hostPath": { + "path": rootPath + this.names[item] + } + }); + } + return volumes; + }; + resourceRCTemplate.prototype.createContainers = function (Obj) { + var containers = []; + containers.push({ + "name": "oracle", + "image": this.image, + "imagePullPolicy": "IfNotPresent", + "command": ["/assets/entrypoint.sh"], + "ports": [ + { + "containerPort": 1521, + "hostPort": Obj.port || ramdomPort() + }], + "volumeMounts": this.createVolumeMounts() }); - $scope.fetch(); - }]); -})(Developer || (Developer = {})); - -/// -/// -/// -/// -/// -var Developer; -(function (Developer) { - Developer.WorkspacesController = Developer.controller("WorkspacesController", ["$scope", "OracleStatusModel", "KubernetesModel", "KubernetesState", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "DataInfoModel", "$interval", - function ($scope, OracleStatusModel, KubernetesModel, KubernetesState, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, DataInfoModel, $interval) { - $scope.model = DataInfoModel; - $scope.items = []; - $scope.localitems = []; - var rootPath = ""; - var FilterList = { - length: 0 - }; - update(); - $scope.treeOptions = { - nodeChildren: "children", - dirSelectable: true, - multiSelection: false, - injectClasses: { - ul: "a1", - li: "a2", - liSelected: "a7", - iExpanded: "a3", - iCollapsed: "a4", - iLeaf: "a5", - label: "a6", - labelSelected: "a8" + return containers; + }; + resourceRCTemplate.prototype.createTemplate = function (Obj) { + return { + "metadata": { + //"name": Obj.name, + "labels": Obj.labels + }, + "spec": { + "terminationGracePeriodSeconds": 0, + "containers": this.createContainers(Obj), + "volumes": this.createVolumes(Obj.path) } }; - $scope.treeOptionss = { - nodeChildren: "children", - dirSelectable: true, - multiSelection: true, - injectClasses: { - ul: "a1", - li: "a2", - liSelected: "a7", - iExpanded: "a3", - iCollapsed: "a4", - iLeaf: "a5", - label: "a6", - labelSelected: "a8" - } - }; - $scope.showSelected = function (node, selected) { - $scope.model.serveritems = []; - var array = new Array(); - if (selected) { - if (node.children.length > 0) { - array.unshift(node); - while (array.length > 0) { - var childNode = array.pop(); - if (childNode.children.length > 0) { - for (var i = 0; i < childNode.children.length; i++) - array.unshift(childNode.children[i]); - } - else { - if (childNode.hasOwnProperty("path")) - $scope.model.serveritems.push(childNode); - } + }; + return resourceRCTemplate; + }()); + Kubernetes.resourceRCTemplate = resourceRCTemplate; + function labelToChinese(labels) { + var answer = {}; + angular.forEach(labels, function (value, key) { + answer[key] = labelChangeToChines(value, key); + }); + return answer; + } + Kubernetes.labelToChinese = labelToChinese; + function findSameNameReplicationControllers(replicationControllers, name) { + var names = []; + replicationControllers.forEach(function (rc) { + var rcName = Kubernetes.getName(rc); + if (rcName.indexof(name) !== -1) + names.push(rcName); + }); + if (names.length === 0) { + return name + "_1"; + } + else { + var max = 0; + names.forEach(function (value) { + var answer = value.split("_"); + var key = parseInt(answer[1]); + if (max < key) + max = key; + }); + return name + (max + 1); + } + } + Kubernetes.findSameNameReplicationControllers = findSameNameReplicationControllers; + function isFilterRC(rc) { + var answer = false; + angular.forEach(Core.pathGet(rc, ["metadata", "labels"]), function (value, key) { + if (key === 'isTarget' && value === 'true') { + answer = true; + } + }); + return answer; + } + Kubernetes.isFilterRC = isFilterRC; + function isInclude(rcs, rc) { + for (var i in rcs) { + if (Kubernetes.getName(rcs[i]) === Kubernetes.getName(rc)) + return true; + } + return false; + } + Kubernetes.isInclude = isInclude; + function labelChangeToChines(value, key) { + var trueValue = ''; + switch (key) { + case 'type': + if (value === '01') + trueValue = '财政'; + else if (value === '02') + trueValue = '社保'; + else + trueValue = value; + break; + case 'batch': + if (value === 'A') + trueValue = '批次A'; + else if (value === 'B') + trueValue = '批次B'; + else + trueValue = value; + break; + case 'region': + trueValue = Kubernetes.getCountyByCode(value); + break; + case 'system': + trueValue = Kubernetes.getSystemNameById(value); + break; + case 'version': + var reg = new RegExp('^[0-9]$').exec(value); + if (reg) + trueValue = '版本' + reg[0]; + else + trueValue = value; + break; + case 'isTarget': + if (value === 'true') + trueValue = '汇总数据库'; + else + trueValue = value; + break; + default: + trueValue = value; + } + return trueValue; + } + Kubernetes.labelChangeToChines = labelChangeToChines; +})(Kubernetes || (Kubernetes = {})); + +/// +/// +/// +/// +var Kubernetes; +(function (Kubernetes) { + Kubernetes.HostsController = Kubernetes.controller("HostsController", ["$scope", "KubernetesModel", "KubernetesPods", "KubernetesState", "ServiceRegistry", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", + function ($scope, KubernetesModel, KubernetesPods, KubernetesState, ServiceRegistry, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { + $scope.kubernetes = KubernetesState; + $scope.model = KubernetesModel; + $scope.$on('kubernetesModelUpdated', function () { + Core.$apply($scope); + }); + $scope.tableConfig = { + data: 'model.hosts', + showSelectionCheckbox: false, + enableRowClickSelection: false, + multiSelect: false, + selectedItems: [], + filterOptions: { + filterText: $location.search()["q"] || '' + }, + columnDefs: [ + { + field: 'id', + displayName: 'Name', + defaultSort: true, + cellTemplate: $templateCache.get("idTemplate.html") + }, + { + field: 'hostIP', + displayName: 'IP', + customSortField: function (field) { + // use a custom sort to sort ip address + return Kubernetes.sortByPodIp(field.hostIP); + } + }, + { field: '$podsLink', + displayName: 'Pods', + cellTemplate: $templateCache.get("podCountsAndLinkTemplate.html"), + customSortField: function (field) { + // need to concat all the pod counters + var ready = field.$podCounters.ready || 0; + var valid = field.$podCounters.valid || 0; + var waiting = field.$podCounters.waiting || 0; + var error = field.$podCounters.error || 0; + return ready + valid + waiting + error; } } - else { - if (node.hasOwnProperty("path")) - $scope.model.serveritems.push(node); + ] + }; + Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); + }]); +})(Kubernetes || (Kubernetes = {})); + +/// +/// +var Kubernetes; +(function (Kubernetes) { + Kubernetes.ImageRepositoriesController = Kubernetes.controller("ImageRepositoriesController", ["$scope", "KubernetesModel", "KubernetesState", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", + function ($scope, KubernetesModel, KubernetesState, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { + $scope.kubernetes = KubernetesState; + $scope.model = KubernetesModel; + $scope.$on('kubernetesModelUpdated', function () { + Core.$apply($scope); + }); + $scope.tableConfig = { + data: 'imageRepositories', + showSelectionCheckbox: true, + enableRowClickSelection: false, + multiSelect: true, + selectedItems: [], + filterOptions: { + filterText: $location.search()["q"] || '' + }, + columnDefs: [ + { + field: 'metadata.name', + displayName: 'Name' + }, + { + field: 'metadata.namespace', + displayName: 'Namespace' + }, + { + field: 'status.dockerImageRepository', + displayName: 'Docker Registry' + }, + { + field: 'tags', + displayName: 'Tags', + cellTemplate: $templateCache.get('imageRegistryLabelTemplate.html') } + ] + }; + var labelColors = { + 'prod': 'background-blue', + 'valid': 'background-light-green', + 'test': 'background-light-grey' + }; + $scope.labelClass = function (labelType) { + if (!(labelType in labelColors)) { + return 'mouse-pointer'; } + else + return labelColors[labelType] + ' mouse-pointer'; }; - $scope.dataForTheTree = $scope.model.serverdata; - $scope.dataForTheTreeLocal = $scope.model.localdata; - $scope.$watch('model.serverdata', function (newValue, oldValue) { - if (newValue) { - $scope.dataForTheTree = $scope.model.serverdata; + Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); + $scope.deletePrompt = function (selected) { + UI.multiItemConfirmActionDialog({ + collection: selected, + index: '$name', + onClose: function (result) { + if (result) { + function deleteSelected(selected, next) { + if (next) { + deleteEntity(next, function () { + deleteSelected(selected, selected.shift()); + }); + } + else { + updateData(); + } + } + deleteSelected(selected, selected.shift()); + } + }, + title: 'Delete Image Repository?', + action: 'The following Image Repositories will be deleted:', + okText: 'Delete', + okClass: 'btn-danger', + custom: "This operation is permanent once completed!", + customClass: "alert alert-warning" + }).open(); + }; + function deleteEntity(selection, nextCallback) { + var name = (selection || {}).$name; + if (name) { + console.log("About to delete image repository: " + name); + var url = Kubernetes.imageRepositoryRestUrl(name); + $http.delete(url). + success(function (data, status, headers, config) { + nextCallback(); + }). + error(function (data, status, headers, config) { + Kubernetes.log.warn("Failed to delete image repository on " + url + " " + data + " " + status); + }); } - }); - $scope.$watch('model.localdata', function (newValue, oldValue) { - if (newValue) { - $scope.dataForTheTreeLocal = $scope.model.localdata; + else { + console.log("warning: no name for selection: " + angular.toJson(selection)); } - }); - $scope.upLoadXMLFile = function (files) { - FilterList.length = 0; - if (files.length > 0) { - var j = 0; - for (var i = 0; i < files.length; i++) { - if (files[i].name.indexOf("data.xml") != -1) { - //console.log(files[i]); - rootPath = files[i].webkitRelativePath.replace(/\/data.xml$/, ""); - var reader = new FileReader(); - var resultString = "{\"name\": \"数据\", \"children\":["; - reader.onload = function () { - var str = event.target.result; - // alert(str); - var item = ""; - var itemEnd = ""; - // ´ý·µ»ØµÄ½á¹û£º - if (str != undefined) { - // Õû¸öxml ÍêÕûÊý¾Ý£ºxmldata - var xmldata = str.toString(); - // °´¶ÔÏó·ÖµÄÊý¾Ý£º - var itemArray = xmldata.split(item); - var itemsize = itemArray.length; - for (var k = 1; k < itemsize; k++) { - var itemvalue = itemArray[k].split(itemEnd); - // province - var provinceValueTemp = itemvalue[0].split(""); - var provinceValue = provinceValueTemp[provinceValueTemp.length - 1].split("")[0]; - //city - var cityValueTemp = itemvalue[0].split(""); - var cityValue = cityValueTemp[cityValueTemp.length - 1].split("")[0]; - // county - var countyValueTemp = itemvalue[0].split(""); - var countyValue = countyValueTemp[countyValueTemp.length - 1].split("")[0]; - // - var codeValueTemp = itemvalue[0].split(""); - var codeValue = codeValueTemp[codeValueTemp.length - 1].split("")[0]; - // - var sys_nameValueTemp = itemvalue[0].split(""); - var sys_nameValue = sys_nameValueTemp[sys_nameValueTemp.length - 1].split("")[0]; - // - var character_setValueTemp = itemvalue[0].split(""); - var character_setValue = character_setValueTemp[character_setValueTemp.length - 1].split("")[0]; - // - var sys_name_codeValueTemp = itemvalue[0].split(""); - var sys_name_codeValue = sys_name_codeValueTemp[sys_name_codeValueTemp.length - 1].split("")[0]; - // - var contactValueTemp = itemvalue[0].split(""); - var contactValue = contactValueTemp[contactValueTemp.length - 1].split("")[0]; - // - var phoneValueTemp = itemvalue[0].split(""); - var phoneValue = phoneValueTemp[phoneValueTemp.length - 1].split("")[0]; - // - var dateValueTemp = itemvalue[0].split(""); - var dateValue = dateValueTemp[dateValueTemp.length - 1].split("")[0]; - //id : - var itemId = codeValue + "_" + sys_name_codeValue; - // http get version - var rid = itemId; //.replace(/\"/g, ""); - // TODO typeValue 通过前端页面获取或者??,财政01或社保02 - var typeValue = "01"; - // TODO batchValue 通过前端页面获取或者??,批次A :大写的A,批次B :大写的B, - var batchValue = "A"; - var itemname = cityValue + countyValue + sys_nameValue; - var versionid = 1; - var xhr = new XMLHttpRequest(); - xhr.onreadystatechange = function () { - if (xhr.readyState == 4) { - if (xhr.status == 200) { - versionid = xhr.responseText; - } - } - }; - xhr.open("get", "/getversion?id=" + rid, false); - xhr.send(null); - var jsobj = JSON.parse(versionid); - var xmlversion = jsobj.id; - var properValue = "{\"id\":\"" + itemId + "\", \"name\":\"" + itemname + "\", \"city\":\"" + - cityValue + "\", \"county\":\"" + countyValue + "\", \"system\":\"" + - sys_nameValue + "\", \"type\":\"" + typeValue + "\",\"batch\":\"" + - batchValue + "\",\"version\":\"" + xmlversion + "\", \"province\":\"" + - provinceValue + "\", \"code\":\"" + - codeValue + "\", \"character_set\":\"" + - character_setValue + "\", \"sys_name_code\":\"" + - sys_name_codeValue + "\", \"contact\":\"" + - contactValue + "\", \"phone\":\"" + - phoneValue + "\", \"date\":\"" + - dateValue + "\"}"; - resultString = resultString + properValue; - if (k < itemsize - 1) { - resultString = resultString + ", "; - } - } - resultString = resultString + "]}"; - } - $scope.$apply(function () { - $scope.model.localdata = JSON.parse(resultString.toString()); - }); - }; - reader.readAsText(files[i], "utf-8"); - } - else { - FilterList.length += 1; - var file_id = files[i].name.replace(/\.\w*$/, ''); - // var file_id=file[i].webkitRelativePath.replace(/^[a-z]*\/$/,''); - // file_id = file_id.replace(/\/\w+$/,''); - FilterList[j++] = files[i]; - } + } + function updateData() { + var url = Kubernetes.imageRepositoriesRestURL(); + $http.get(url). + success(function (data, status, headers, config) { + if (data) { + //console.log("got data " + angular.toJson(data, true)); + $scope.imageRepositories = Kubernetes.enrichImageRepositories(data.items); + $scope.fetched = true; + Core.$apply($scope); } + }). + error(function (data, status, headers, config) { + Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); + }); + } + updateData(); + }]); +})(Kubernetes || (Kubernetes = {})); + +/// +/// +var Kubernetes; +(function (Kubernetes) { + function selectSubNavBar($scope, tabName, newSubTabLabel) { + var foundTab = null; + angular.forEach($scope.subTabConfig, function (tab) { + if (tabName === tab.label || tabName === tab.id) { + foundTab = tab; + } + }); + var breadcrumbConfig = $scope.breadcrumbConfig; + if (foundTab && breadcrumbConfig) { + breadcrumbConfig.push(foundTab); + $scope.subTabConfig = [ + { + label: newSubTabLabel } - $scope.model.uploadprocess = {}; - }; - $scope.upLoadFiles = function () { - if ($scope.model.uploadedStatus == "once") { - return; - } - $scope.model.uploadedStatus = "once"; - $scope.model.createFolderList(FilterList, rootPath); - if ($scope.model.folderList.length > 0 && $scope.model.selectednodes.length > 0) { - var isNotExited = []; - var isExited = []; - for (var node in $scope.model.selectednodes) { - if (!$scope.model.folderList.hasOwnProperty($scope.model.selectednodes[node].id)) { - isNotExited.push($scope.model.selectednodes[node]); - } - else { - if ($scope.model.uploadprocess[$scope.model.selectednodes[node].id] === 'undefined' || $scope.model.uploadprocess[$scope.model.selectednodes[node].id] === 0) - isExited.push($scope.model.selectednodes[node]); + ]; + } + } + Kubernetes.selectSubNavBar = selectSubNavBar; +})(Kubernetes || (Kubernetes = {})); + +/// +var Kubernetes; +(function (Kubernetes) { + Kubernetes.schema = { + "id": "http://fabric8.io/fabric8/v2/Schema#", + "$schema": "http://json-schema.org/schema#", + "definitions": { + "api_RootPaths": { + "type": "object", + "description": "", + "properties": { + "paths": { + "type": "array", + "description": "", + "items": { + "type": "string", + "description": "" } } - if (isNotExited.length > 0) { - var str = "以下数据文件不存在:\n\r文件名:\n"; - for (var item in isNotExited) - str += isNotExited[item].id + "\n"; - alert(str); + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.RootPaths" + }, + "kubernetes_AWSElasticBlockStoreVolumeSource": { + "type": "object", + "description": "", + "properties": { + "fsType": { + "type": "string", + "description": "file system type to mount" + }, + "partition": { + "type": "integer", + "description": "partition on the disk to mount (e.g." + }, + "readOnly": { + "type": "boolean", + "description": "read-only if true" + }, + "volumeID": { + "type": "string", + "description": "unique id of the PD resource in AWS; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#awselasticblockstore" } - if (isExited.length <= 0) { - alert("数据文件中没有可用上传的文件!"); + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.AWSElasticBlockStoreVolumeSource" + }, + "kubernetes_Capabilities": { + "type": "object", + "description": "", + "properties": { + "add": { + "type": "array", + "description": "added capabilities", + "items": { + "type": "string", + "description": "added capabilities" + } + }, + "drop": { + "type": "array", + "description": "droped capabilities", + "items": { + "type": "string", + "description": "droped capabilities" + } } - else { - var isuploaad = 1, i = 0; - var timerForUpload = setInterval(function () { - if (i >= isExited.length) { - clearInterval(timerForUpload); - } - if (isuploaad == 1) { - var r = new Resumable({ - target: '/uploadfiles', - chunkSize: 50 * 1024 * 1024, - simultaneousUploads: 400, - testChunks: true, - throttleProgressCallbacks: 1 - }); - var xhr = new XMLHttpRequest(); - xhr.open("GET", "/getclientip", true); - xhr.onreadystatechange = function () { - if (xhr.readyState == 4) { - if (xhr.status == 200) { - r.setip(xhr.responseText); - } - } - }; - xhr.send(null); - r.on('fileAdded', function (file) { - r.upload(); - }); - $scope.model.resumablejs.push({ - dirname: isExited[i].id, - resumable: r - }); - r.setRootPath(isExited[i].type + "/" + isExited[i].batch + "/" + isExited[i].id + "/" + isExited[i].version + "/"); - r.myLoadFiles($scope.model.folderList[isExited[i].id]); - r.upload(); - r.on('fileProgress', function (file) { - var file_id = file.relativePath.replace(/^[a-z]*\/$/, ''); - var filestr = ""; - var reg = /\/[0-9]*_*[0-9]*\//g; - var resultstr; - while ((resultstr = reg.exec(file_id)) != null) { - filestr = resultstr[0]; - } - file_id = filestr.replace(/\/*/g, ''); - r.setFileId(file_id); - //$scope.$apply(function(){ - $scope.model.uploadprocess[file_id] = Math.floor(r.progress() * 98); - //}); - }); - r.on('complete', function () { - var timerForchmod = setInterval(function () { - var pathjson = "\"path\":\"" + r.getrootPath() + "\""; - var datamessage = { "path": r.getrootPath(), "filenum": $scope.model.folderList[isExited[i - 1].id].length }; - $scope.model.uploadprocess[r.getFileId()] = Math.round(r.progress() * 99); - $http({ - url: '/setchmod2dir', - method: 'GET', - params: datamessage - }).success(function (data, header, config, status) { - if (data) { - //console.log(data); - var clientdata = data; - if (clientdata == "chmod") { - sendDateMessage(isExited[i - 1]); - r.setisnowcheck("1"); - r.mkRetfileUploadSucceed(); - clearInterval(timerForchmod); - } - } - }).error(function (data, header, config, status) { - console.log("-----sendDateMessage-------------" + status); - }); - }, 5000); - }); - i++; - isuploaad = 0; - r.on('fileuploadendsucceed', function () { - $scope.model.uploadprocess[r.getFileId()] = Math.floor(r.progress() * 100); - $timeout(function () { - $http({ - url: '/xmlformserver', - method: 'Post' - }).success(function (data, header, config, status) { - if (data) { - $scope.model.serverdata = data; - } - }).error(function (data, header, config, status) { - console.log("error"); - }); - }, 2000); - isuploaad = 1; - }); - } - }, 2000); + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.Capabilities" + }, + "kubernetes_CephFSVolumeSource": { + "type": "object", + "description": "", + "properties": { + "monitors": { + "type": "array", + "description": "a collection of Ceph monitors", + "items": { + "type": "string", + "description": "a collection of Ceph monitors" + } + }, + "readOnly": { + "type": "boolean", + "description": "Ceph fs to be mounted with read-only permissions" + }, + "secretFile": { + "type": "string", + "description": "path to secret for rados user; default is /etc/ceph/user.secret; optional" + }, + "secretRef": { + "$ref": "#/definitions/kubernetes_LocalObjectReference", + "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" + }, + "user": { + "type": "string", + "description": "rados user name; default is admin; optional" } - } - else { - alert("您没有选择需要上传的数据文件,或你选择的文件中不存在指定格式的数据文件!"); - } - }; - function sendDateMessage(datamessage) { - $http({ - url: '/sendDateMessage', - method: 'GET', - params: datamessage - }).success(function (data, header, config, status) { - if (data) - var clientdata = data; - }).error(function (data, header, config, status) { - }); - } - $scope.downLoadFiles = function () { - Kubernetes.connectOracle($http, $timeout, "192.168.0.103:64182", "320614-54-1", 500); - }; - $scope.isSelected = function (node) { - var index = $scope.model.findItemIndex(node); - if (index !== -1) { - $scope.model.selecteditems.splice(index, 1); - } - else { - $scope.model.selecteditems.push(node); - } - }; - $scope.showSelectedLocal = function (node, selected) { - var index = $scope.model.findNodes(node); - if (index !== "-1") { - if ($scope.model.uploadprocess[node.id] === 0) - $scope.model.selectednodes.splice(index, 1); - } - else { - $scope.model.uploadprocess[node.id] = 0; - $scope.model.selectednodes.push(node); - } - }; - $scope.startOracle = function () { - if ($scope.model.selecteditems.length > 0) { - for (var id in $scope.model.selecteditems) { - var Obj = createRCObj($scope.model.selecteditems[id]); - if (!checkIsRunning(KubernetesModel.replicationControllers, Obj)) { - Kubernetes.createRC(Obj, function (rc) { - console.log(rc.metadata.name); - Kubernetes.connectOracle($http, $timeout, "/connectToOracle", "", rc.metadata.name, 0); - }); + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.CephFSVolumeSource" + }, + "kubernetes_Container": { + "type": "object", + "description": "", + "properties": { + "args": { + "type": "array", + "description": "command array; the docker image's cmd is used if this is not provided; arguments to the entrypoint; cannot be updated; variable references $(VAR_NAME) are expanded using the container's environment variables; if a variable cannot be resolved", + "items": { + "type": "string", + "description": "command array; the docker image's cmd is used if this is not provided; arguments to the entrypoint; cannot be updated; variable references $(VAR_NAME) are expanded using the container's environment variables; if a variable cannot be resolved" + } + }, + "command": { + "type": "array", + "description": "entrypoint array; not executed within a shell; the docker image's entrypoint is used if this is not provided; cannot be updated; variable references $(VAR_NAME) are expanded using the container's environment variables; if a variable cannot be resolved", + "items": { + "type": "string", + "description": "entrypoint array; not executed within a shell; the docker image's entrypoint is used if this is not provided; cannot be updated; variable references $(VAR_NAME) are expanded using the container's environment variables; if a variable cannot be resolved" + } + }, + "env": { + "type": "array", + "description": "list of environment variables to set in the container; cannot be updated", + "items": { + "$ref": "#/definitions/kubernetes_EnvVar", + "javaType": "io.fabric8.kubernetes.api.model.EnvVar" + } + }, + "image": { + "type": "string", + "description": "Docker image name; see http://releases.k8s.io/HEAD/docs/user-guide/images.md" + }, + "imagePullPolicy": { + "type": "string", + "description": "image pull policy; one of Always" + }, + "lifecycle": { + "$ref": "#/definitions/kubernetes_Lifecycle", + "javaType": "io.fabric8.kubernetes.api.model.Lifecycle" + }, + "livenessProbe": { + "$ref": "#/definitions/kubernetes_Probe", + "javaType": "io.fabric8.kubernetes.api.model.Probe" + }, + "name": { + "type": "string", + "description": "name of the container; must be a DNS_LABEL and unique within the pod; cannot be updated", + "maxLength": 63, + "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?$" + }, + "ports": { + "type": "array", + "description": "list of ports to expose from the container; cannot be updated", + "items": { + "$ref": "#/definitions/kubernetes_ContainerPort", + "javaType": "io.fabric8.kubernetes.api.model.ContainerPort" + } + }, + "readinessProbe": { + "$ref": "#/definitions/kubernetes_Probe", + "javaType": "io.fabric8.kubernetes.api.model.Probe" + }, + "resources": { + "$ref": "#/definitions/kubernetes_ResourceRequirements", + "javaType": "io.fabric8.kubernetes.api.model.ResourceRequirements" + }, + "securityContext": { + "$ref": "#/definitions/kubernetes_SecurityContext", + "javaType": "io.fabric8.kubernetes.api.model.SecurityContext" + }, + "stdin": { + "type": "boolean", + "description": "Whether this container should allocate a buffer for stdin in the container runtime; default is false" + }, + "terminationMessagePath": { + "type": "string", + "description": "path at which the file to which the container's termination message will be written is mounted into the container's filesystem; message written is intended to be brief final status" + }, + "tty": { + "type": "boolean", + "description": "Whether this container should allocate a TTY for itself" + }, + "volumeMounts": { + "type": "array", + "description": "pod volumes to mount into the container's filesyste; cannot be updated", + "items": { + "$ref": "#/definitions/kubernetes_VolumeMount", + "javaType": "io.fabric8.kubernetes.api.model.VolumeMount" } + }, + "workingDir": { + "type": "string", + "description": "container's working directory; defaults to image's default; cannot be updated" } - } - }; - function checkIsRunning(replicationControllers, item) { - for (var rc in replicationControllers) { - if (item.name === replicationControllers[rc].metadata.name) - return true; - } - return false; - } - function createRCObj(item) { - var array = item.id.split("_"); - return { - "name": array[2] + "-" + array[3] + "-" + array[4], - "labels": { - "type": array[0], - "batch": array[1], - "region": array[2], - "system": array[3], - "version": array[4] + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.Container" + }, + "kubernetes_ContainerPort": { + "type": "object", + "description": "", + "properties": { + "containerPort": { + "type": "integer", + "description": "number of port to expose on the pod's IP address" }, - "path": item.path + "app/" - }; - } - function setchmod2dir(datamessage) { - $http({ - url: '/setchmod2dir', - method: 'GET', - params: datamessage - }).success(function (data, header, config, status) { - if (data) - var clientdata = data; - }).error(function (data, header, config, status) { - console.log("-----sendDateMessage-------------" + status); - }); - } - function update() { - for (var i = 0; i < $scope.model.resumablejs.length; i++) { - var dirId = $scope.model.resumablejs[i].dirname; - var r = $scope.model.resumablejs[i].resumable; - r.on('fileProgress', function (file) { - $scope.$apply(function () { - $scope.model.uploadprocess[dirId] = Math.floor(r.progress() * 100); - console.log(dirId + ":" + Math.floor(r.progress() * 100)); - }); - }); - } - } - }]); -})(Developer || (Developer = {})); - -/// -/// -var Kubernetes; -(function (Kubernetes) { - Kubernetes.Apps = Kubernetes.controller("Apps", ["$scope", "KubernetesModel", "KubernetesServices", "KubernetesReplicationControllers", "KubernetesPods", "KubernetesState", "KubernetesApiURL", "$templateCache", "$location", "$routeParams", "$http", "$dialog", "$timeout", - function ($scope, KubernetesModel, KubernetesServices, KubernetesReplicationControllers, KubernetesPods, KubernetesState, KubernetesApiURL, $templateCache, $location, $routeParams, $http, $dialog, $timeout) { - $scope.model = KubernetesModel; - $scope.apps = []; - $scope.allApps = []; - $scope.kubernetes = KubernetesState; - $scope.fetched = false; - $scope.json = ''; - ControllerHelpers.bindModelToSearchParam($scope, $location, 'id', '_id', undefined); - ControllerHelpers.bindModelToSearchParam($scope, $location, 'appSelectorShow', 'openApp', undefined); - ControllerHelpers.bindModelToSearchParam($scope, $location, 'mode', 'mode', 'detail'); - var branch = $scope.branch || "master"; - var namespace = null; - function appMatches(app) { - var filterText = $scope.appSelector.filterText; - if (filterText) { - return Core.matchFilterIgnoreCase(app.groupId, filterText) || - Core.matchFilterIgnoreCase(app.artifactId, filterText) || - Core.matchFilterIgnoreCase(app.name, filterText) || - Core.matchFilterIgnoreCase(app.description, filterText); - } - else { - return true; - } - } - function appRunning(app) { - return $scope.model.apps.any(function (running) { return running.appPath === app.appPath; }); - } - $scope.tableConfig = { - data: 'model.apps', - showSelectionCheckbox: true, - enableRowClickSelection: false, - multiSelect: true, - selectedItems: [], - filterOptions: { - filterText: $location.search()["q"] || '' + "hostIP": { + "type": "string", + "description": "host IP to bind the port to" + }, + "hostPort": { + "type": "integer", + "description": "number of port to expose on the host; most containers do not need this" + }, + "name": { + "type": "string", + "description": "name for the port that can be referred to by services; must be an IANA_SVC_NAME and unique within the pod" + }, + "protocol": { + "type": "string", + "description": "protocol for port; must be UDP or TCP; TCP if unspecified" + } }, - columnDefs: [ - { field: '$name', displayName: 'App', cellTemplate: $templateCache.get(UrlHelpers.join(Kubernetes.templatePath, "appIconTemlate.html")) }, - { field: '$servicesText', displayName: 'Services', cellTemplate: $templateCache.get(UrlHelpers.join(Kubernetes.templatePath, "appServicesTemplate.html")) }, - { field: '$replicationControllersText', displayName: 'Controllers', cellTemplate: $templateCache.get(UrlHelpers.join(Kubernetes.templatePath, "appReplicationControllerTemplate.html")) }, - { field: '$podCount', displayName: 'Pods', cellTemplate: $templateCache.get(UrlHelpers.join(Kubernetes.templatePath, "appPodCountsAndLinkTemplate.html")) }, - { field: '$creationDate', displayName: 'Deployed', cellTemplate: $templateCache.get(UrlHelpers.join(Kubernetes.templatePath, "appDeployedTemplate.html")) } - ] - }; - Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); - $scope.expandedPods = []; - $scope.$on('do-resize', function ($event, controller) { - $scope.resizeDialog.open(controller); - }); - $scope.podExpanded = function (pod) { - var id = Kubernetes.getName(pod); - return id && ($scope.expandedPods || []).indexOf(id) >= 0; - }; - $scope.expandPod = function (pod) { - var id = Kubernetes.getName(pod); - if (id) { - $scope.expandedPods.push(id); - } - }; - $scope.collapsePod = function (pod) { - var id = Kubernetes.getName(pod); - if (id) { - _.remove($scope.expandedPods, function (v) { return id === v; }); - } - }; - $scope.$on('$routeUpdate', function ($event) { - Kubernetes.setJson($scope, $location.search()['_id'], $scope.model.apps); - }); - function deleteApp(app, onCompleteFn) { - function deleteServices(services, service, onCompletedFn) { - if (!service || !services) { - return onCompletedFn(); + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.ContainerPort" + }, + "kubernetes_ContainerState": { + "type": "object", + "description": "", + "properties": { + "running": { + "$ref": "#/definitions/kubernetes_ContainerStateRunning", + "javaType": "io.fabric8.kubernetes.api.model.ContainerStateRunning" + }, + "terminated": { + "$ref": "#/definitions/kubernetes_ContainerStateTerminated", + "javaType": "io.fabric8.kubernetes.api.model.ContainerStateTerminated" + }, + "waiting": { + "$ref": "#/definitions/kubernetes_ContainerStateWaiting", + "javaType": "io.fabric8.kubernetes.api.model.ContainerStateWaiting" } - var id = Kubernetes.getName(service); - if (!id) { - Kubernetes.log.warn("No ID for service " + angular.toJson(service)); + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.ContainerState" + }, + "kubernetes_ContainerStateRunning": { + "type": "object", + "description": "", + "properties": { + "startedAt": { + "type": "string", + "description": "time at which the container was last (re-)started" } - else { - KubernetesServices.delete({ - id: id - }, undefined, function () { - Kubernetes.log.debug("Deleted service: ", id); - deleteServices(services, services.shift(), onCompletedFn); - }, function (error) { - Kubernetes.log.debug("Error deleting service: ", error); - deleteServices(services, services.shift(), onCompletedFn); - }); + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.ContainerStateRunning" + }, + "kubernetes_ContainerStateTerminated": { + "type": "object", + "description": "", + "properties": { + "containerID": { + "type": "string", + "description": "container's ID in the format 'docker://\u003ccontainer_id\u003e'" + }, + "exitCode": { + "type": "integer", + "description": "exit status from the last termination of the container" + }, + "finishedAt": { + "type": "string", + "description": "time at which the container last terminated" + }, + "message": { + "type": "string", + "description": "message regarding the last termination of the container" + }, + "reason": { + "type": "string", + "description": "(brief) reason from the last termination of the container" + }, + "signal": { + "type": "integer", + "description": "signal from the last termination of the container" + }, + "startedAt": { + "type": "string", + "description": "time at which previous execution of the container started" } - } - function deleteReplicationControllers(replicationControllers, replicationController, onCompletedFn) { - if (!replicationController || !replicationControllers) { - return onCompletedFn(); + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.ContainerStateTerminated" + }, + "kubernetes_ContainerStateWaiting": { + "type": "object", + "description": "", + "properties": { + "reason": { + "type": "string", + "description": "(brief) reason the container is not yet running" } - var id = Kubernetes.getName(replicationController); - if (!id) { - Kubernetes.log.warn("No ID for replicationController " + angular.toJson(replicationController)); + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.ContainerStateWaiting" + }, + "kubernetes_ContainerStatus": { + "type": "object", + "description": "", + "properties": { + "containerID": { + "type": "string", + "description": "container's ID in the format 'docker://\u003ccontainer_id\u003e'; see http://releases.k8s.io/HEAD/docs/user-guide/container-environment.md#container-information" + }, + "image": { + "type": "string", + "description": "image of the container; see http://releases.k8s.io/HEAD/docs/user-guide/images.md" + }, + "imageID": { + "type": "string", + "description": "ID of the container's image" + }, + "lastState": { + "$ref": "#/definitions/kubernetes_ContainerState", + "javaType": "io.fabric8.kubernetes.api.model.ContainerState" + }, + "name": { + "type": "string", + "description": "name of the container; must be a DNS_LABEL and unique within the pod; cannot be updated", + "maxLength": 63, + "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?$" + }, + "ready": { + "type": "boolean", + "description": "specifies whether the container has passed its readiness probe" + }, + "restartCount": { + "type": "integer", + "description": "the number of times the container has been restarted" + }, + "state": { + "$ref": "#/definitions/kubernetes_ContainerState", + "javaType": "io.fabric8.kubernetes.api.model.ContainerState" } - else { - KubernetesReplicationControllers.delete({ - id: id - }, undefined, function () { - Kubernetes.log.debug("Deleted replicationController: ", id); - deleteReplicationControllers(replicationControllers, replicationControllers.shift(), onCompletedFn); - }, function (error) { - Kubernetes.log.debug("Error deleting replicationController: ", error); - deleteReplicationControllers(replicationControllers, replicationControllers.shift(), onCompletedFn); - }); + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.ContainerStatus" + }, + "kubernetes_EmptyDirVolumeSource": { + "type": "object", + "description": "", + "properties": { + "medium": { + "type": "string", + "description": "type of storage used to back the volume; must be an empty string (default) or Memory; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#emptydir" } - } - function deletePods(pods, pod, onCompletedFn) { - if (!pod || !pods) { - return onCompletedFn(); - } - var id = Kubernetes.getName(pod); - if (!id) { - Kubernetes.log.warn("No ID for pod " + angular.toJson(pod)); + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.EmptyDirVolumeSource" + }, + "kubernetes_EndpointAddress": { + "type": "object", + "description": "", + "properties": { + "ip": { + "type": "string", + "description": "IP address of the endpoint" + }, + "targetRef": { + "$ref": "#/definitions/kubernetes_ObjectReference", + "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" } - else { - KubernetesPods.delete({ - id: id - }, undefined, function () { - Kubernetes.log.debug("Deleted pod: ", id); - deletePods(pods, pods.shift(), onCompletedFn); - }, function (error) { - Kubernetes.log.debug("Error deleting pod: ", error); - deletePods(pods, pods.shift(), onCompletedFn); - }); + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.EndpointAddress" + }, + "kubernetes_EndpointPort": { + "type": "object", + "description": "", + "properties": { + "name": { + "type": "string", + "description": "name of this port", + "maxLength": 63, + "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?$" + }, + "port": { + "type": "integer", + "description": "port number of the endpoint" + }, + "protocol": { + "type": "string", + "description": "protocol for this port; must be UDP or TCP; TCP if unspecified" } - } - var services = [].concat(app.services); - deleteServices(services, services.shift(), function () { - var replicationControllers = [].concat(app.replicationControllers); - deleteReplicationControllers(replicationControllers, replicationControllers.shift(), function () { - var pods = [].concat(app.pods); - deletePods(pods, pods.shift(), onCompleteFn); - }); - }); - } - $scope.deleteSingleApp = function (app) { - $scope.deletePrompt([app]); - }; - $scope.deletePrompt = function (selected) { - if (angular.isString(selected)) { - selected = [{ - id: selected - }]; - } - UI.multiItemConfirmActionDialog({ - collection: selected, - index: '$name', - onClose: function (result) { - if (result) { - function deleteSelected(selected, next) { - if (next) { - var id = next.name; - Kubernetes.log.debug("deleting: ", id); - deleteApp(next, function () { - Kubernetes.log.debug("deleted: ", id); - deleteSelected(selected, selected.shift()); - }); - } - } - deleteSelected(selected, selected.shift()); + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.EndpointPort" + }, + "kubernetes_EndpointSubset": { + "type": "object", + "description": "", + "properties": { + "addresses": { + "type": "array", + "description": "IP addresses which offer the related ports", + "items": { + "$ref": "#/definitions/kubernetes_EndpointAddress", + "javaType": "io.fabric8.kubernetes.api.model.EndpointAddress" } }, - title: 'Delete Apps?', - action: 'The following Apps will be deleted:', - okText: 'Delete', - okClass: 'btn-danger', - custom: "This operation is permanent once completed!", - customClass: "alert alert-warning" - }).open(); - }; - $scope.appSelector = { - filterText: "", - folders: [], - selectedApps: [], - isOpen: function (folder) { - if ($scope.appSelector.filterText !== '' || folder.expanded) { - return "opened"; + "ports": { + "type": "array", + "description": "port numbers available on the related IP addresses", + "items": { + "$ref": "#/definitions/kubernetes_EndpointPort", + "javaType": "io.fabric8.kubernetes.api.model.EndpointPort" + } } - return "closed"; }, - getSelectedClass: function (app) { - if (app.abstract) { - return "abstract"; - } - if (app.selected) { - return "selected"; + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.EndpointSubset" + }, + "kubernetes_Endpoints": { + "type": "object", + "description": "", + "properties": { + "apiVersion": { + "type": "string", + "description": "", + "default": "v1", + "required": true, + "enum": [ + "v1" + ] + }, + "kind": { + "type": "string", + "description": "", + "default": "Endpoints", + "required": true + }, + "metadata": { + "$ref": "#/definitions/kubernetes_ObjectMeta", + "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" + }, + "subsets": { + "type": "array", + "description": "sets of addresses and ports that comprise a service", + "items": { + "$ref": "#/definitions/kubernetes_EndpointSubset", + "javaType": "io.fabric8.kubernetes.api.model.EndpointSubset" + } } - return ""; - }, - showApp: function (app) { - return appMatches(app) && !appRunning(app); - }, - showFolder: function (folder) { - return !$scope.appSelector.filterText || folder.apps.some(function (app) { return appMatches(app) && !appRunning(app); }); - }, - clearSelected: function () { - angular.forEach($scope.model.appFolders, function (folder) { - angular.forEach(folder.apps, function (app) { - app.selected = false; - }); - }); - $scope.appSelector.selectedApps = []; - Core.$apply($scope); }, - updateSelected: function () { - // lets update the selected apps - var selectedApps = []; - angular.forEach($scope.model.appFolders, function (folder) { - var apps = folder.apps.filter(function (app) { return app.selected; }); - if (apps) { - selectedApps = selectedApps.concat(apps); + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.Endpoints", + "javaInterfaces": [ + "io.fabric8.kubernetes.api.model.HasMetadata" + ] + }, + "kubernetes_EndpointsList": { + "type": "object", + "description": "", + "properties": { + "apiVersion": { + "type": "string", + "description": "", + "default": "v1", + "required": true, + "enum": [ + "v1" + ] + }, + "items": { + "type": "array", + "description": "list of endpoints", + "items": { + "$ref": "#/definitions/kubernetes_Endpoints", + "javaType": "io.fabric8.kubernetes.api.model.Endpoints" } - }); - $scope.appSelector.selectedApps = _.sortBy(selectedApps, "name"); - }, - select: function (app, flag) { - app.selected = flag; - $scope.appSelector.updateSelected(); + }, + "kind": { + "type": "string", + "description": "", + "default": "EndpointsList", + "required": true + }, + "metadata": { + "$ref": "#/definitions/kubernetes_ListMeta", + "javaType": "io.fabric8.kubernetes.api.model.ListMeta" + } }, - hasSelection: function () { - return $scope.model.appFolders.any(function (folder) { return folder.apps.any(function (app) { return app.selected; }); }); + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.EndpointsList", + "javaInterfaces": [ + "io.fabric8.kubernetes.api.model.KubernetesResource", + "io.fabric8.kubernetes.api.model.KubernetesResourceList" + ] + }, + "kubernetes_EnvVar": { + "type": "object", + "description": "", + "properties": { + "name": { + "type": "string", + "description": "name of the environment variable; must be a C_IDENTIFIER", + "pattern": "^[A-Za-z_][A-Za-z0-9_]*$" + }, + "value": { + "type": "string", + "description": "value of the environment variable; defaults to empty string; variable references $(VAR_NAME) are expanded using the previously defined environment varibles in the container and any service environment variables; if a variable cannot be resolved" + }, + "valueFrom": { + "$ref": "#/definitions/kubernetes_EnvVarSource", + "javaType": "io.fabric8.kubernetes.api.model.EnvVarSource" + } }, - runSelectedApps: function () { - // lets run all the selected apps - angular.forEach($scope.appSelector.selectedApps, function (app) { - var name = app.name; - var metadataPath = app.metadataPath; - if (metadataPath) { - // lets load the json/yaml - //var url = gitPathToUrl(Wiki.gitRelativeURL(branch, metadataPath)); - var url = Kubernetes.gitPathToUrl(metadataPath, branch); - if (url) { - $http.get(url). - success(function (data, status, headers, config) { - if (data) { - // lets convert the json object structure into a string - var json = angular.toJson(data); - var fn = function () { }; - Kubernetes.runApp($location, $scope, $http, KubernetesApiURL, json, name, fn, namespace); - } - }). - error(function (data, status, headers, config) { - $scope.summaryHtml = null; - Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); - }); - } + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.EnvVar" + }, + "kubernetes_EnvVarSource": { + "type": "object", + "description": "", + "properties": { + "fieldRef": { + "$ref": "#/definitions/kubernetes_ObjectFieldSelector", + "javaType": "io.fabric8.kubernetes.api.model.ObjectFieldSelector" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.EnvVarSource" + }, + "kubernetes_Event": { + "type": "object", + "description": "", + "properties": { + "apiVersion": { + "type": "string", + "description": "", + "default": "v1", + "required": true, + "enum": [ + "v1" + ] + }, + "count": { + "type": "integer", + "description": "the number of times this event has occurred" + }, + "firstTimestamp": { + "type": "string", + "description": "the time at which the event was first recorded" + }, + "involvedObject": { + "$ref": "#/definitions/kubernetes_ObjectReference", + "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" + }, + "kind": { + "type": "string", + "description": "", + "default": "Event", + "required": true + }, + "lastTimestamp": { + "type": "string", + "description": "the time at which the most recent occurrence of this event was recorded" + }, + "message": { + "type": "string", + "description": "human-readable description of the status of this operation" + }, + "metadata": { + "$ref": "#/definitions/kubernetes_ObjectMeta", + "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" + }, + "reason": { + "type": "string", + "description": "short" + }, + "source": { + "$ref": "#/definitions/kubernetes_EventSource", + "javaType": "io.fabric8.kubernetes.api.model.EventSource" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.Event", + "javaInterfaces": [ + "io.fabric8.kubernetes.api.model.HasMetadata" + ] + }, + "kubernetes_EventList": { + "type": "object", + "description": "", + "properties": { + "apiVersion": { + "type": "string", + "description": "", + "default": "v1", + "required": true, + "enum": [ + "v1" + ] + }, + "items": { + "type": "array", + "description": "list of events", + "items": { + "$ref": "#/definitions/kubernetes_Event", + "javaType": "io.fabric8.kubernetes.api.model.Event" } - }); - // lets go back to the apps view - $scope.appSelector.clearSelected(); - $scope.appSelectorShow = false; - } - }; - }]); -})(Kubernetes || (Kubernetes = {})); - -/// -/// -/// -var Kubernetes; -(function (Kubernetes) { - Kubernetes._module.directive("hawtioBreadcrumbs", ['HawtioBreadcrumbs', function (HawtioBreadcrumbs) { - return { - /* - templateUrl: Kubernetes.templatePath + 'breadcrumbs.html' - */ - link: function (scope, element, attrs) { - HawtioBreadcrumbs.apply(scope.$eval('breadcrumbConfig')); - } - }; - }]); -})(Kubernetes || (Kubernetes = {})); - -/// -/// -/// -var Kubernetes; -(function (Kubernetes) { - Kubernetes.BuildController = Kubernetes.controller("BuildController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", - function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { - $scope.kubernetes = KubernetesState; - $scope.model = KubernetesModel; - $scope.id = $routeParams["id"]; - $scope.schema = KubernetesSchema; - $scope.config = KubernetesSchema.definitions.os_build_Build; - Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); - $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs($scope.id); - $scope.subTabConfig = Developer.createProjectSubNavBars($scope.id, null, $scope); - $scope.$on('kubernetesModelUpdated', function () { - updateData(); - }); - $scope.$on('$routeUpdate', function ($event) { - updateData(); - }); - updateData(); - function updateData() { - $scope.item = null; - if ($scope.id) { - var url = Kubernetes.buildRestUrl($scope.id); - $http.get(url). - success(function (data, status, headers, config) { - if (data) { - $scope.entity = Kubernetes.enrichBuild(data); + }, + "kind": { + "type": "string", + "description": "", + "default": "EventList", + "required": true + }, + "metadata": { + "$ref": "#/definitions/kubernetes_ListMeta", + "javaType": "io.fabric8.kubernetes.api.model.ListMeta" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.EventList", + "javaInterfaces": [ + "io.fabric8.kubernetes.api.model.KubernetesResource", + "io.fabric8.kubernetes.api.model.KubernetesResourceList" + ] + }, + "kubernetes_EventSource": { + "type": "object", + "description": "", + "properties": { + "component": { + "type": "string", + "description": "component that generated the event" + }, + "host": { + "type": "string", + "description": "name of the host where the event is generated" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.EventSource" + }, + "kubernetes_ExecAction": { + "type": "object", + "description": "", + "properties": { + "command": { + "type": "array", + "description": "command line to execute inside the container; working directory for the command is root ('/') in the container's file system; the command is exec'd", + "items": { + "type": "string", + "description": "command line to execute inside the container; working directory for the command is root ('/') in the container's file system; the command is exec'd" } - $scope.fetched = true; - Core.$apply($scope); - }). - error(function (data, status, headers, config) { - Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); - }); - } - else { - $scope.fetched = true; - Core.$apply($scope); - } - } - }]); -})(Kubernetes || (Kubernetes = {})); - -/// -/// -/// -var Kubernetes; -(function (Kubernetes) { - Kubernetes.BuildConfigController = Kubernetes.controller("BuildConfigController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", - function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { - $scope.kubernetes = KubernetesState; - $scope.model = KubernetesModel; - $scope.id = $routeParams["id"]; - $scope.schema = KubernetesSchema; - $scope.config = KubernetesSchema.definitions.os_build_BuildConfig; - Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); - $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs($scope.id); - $scope.subTabConfig = Developer.createProjectSubNavBars($scope.id); - $scope.$on('kubernetesModelUpdated', function () { - updateData(); - }); - $scope.$on('$routeUpdate', function ($event) { - updateData(); - }); - updateData(); - function updateData() { - $scope.item = null; - if ($scope.id) { - var url = Kubernetes.buildConfigRestUrl($scope.id); - $http.get(url). - success(function (data, status, headers, config) { - if (data) { - $scope.entity = data; - var sortedBuilds = null; - Kubernetes.enrichBuildConfig(data, sortedBuilds); - $scope.model.setProject($scope.entity); - } - $scope.fetched = true; - Core.$apply($scope); - }). - error(function (data, status, headers, config) { - Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); - }); - } - else { - $scope.fetched = true; - Core.$apply($scope); - } - } - }]); -})(Kubernetes || (Kubernetes = {})); - -/// -/// -/// -var Kubernetes; -(function (Kubernetes) { - Kubernetes.BuildConfigEditController = Kubernetes._module.controller("Kubernetes.BuildConfigEditController", ["$scope", "$element", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "K8SClientFactory", "SchemaRegistry", function ($scope, $element, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, K8SClientFactory, SchemaRegistry) { - $scope.kubernetes = KubernetesState; - $scope.model = KubernetesModel; - $scope.id = $routeParams["project"] || $routeParams["id"]; - $scope.schema = KubernetesSchema; - var mode = $scope.$eval('mode') || 'edit'; - Kubernetes.log.debug("Mode: ", mode); - var specConfig = SchemaRegistry.getSchema('io.fabric8.openshift.api.model.BuildConfigSpec'); - var gitBuildSource = SchemaRegistry.getSchema('io.fabric8.openshift.api.model.GitBuildSource'); - var buildSource = SchemaRegistry.getSchema('io.fabric8.openshift.api.model.BuildSource'); - var buildOutput = SchemaRegistry.getSchema('io.fabric8.openshift.api.model.BuildOutput'); - var resources = SchemaRegistry.getSchema('io.fabric8.kubernetes.api.model.ResourceRequirements'); - var revision = SchemaRegistry.getSchema('io.fabric8.openshift.api.model.SourceRevision'); - var strategy = SchemaRegistry.getSchema('io.fabric8.openshift.api.model.BuildStrategy'); - var customStrategy = SchemaRegistry.getSchema('io.fabric8.openshift.api.model.CustomBuildStrategy'); - var buildTriggerPolicy = SchemaRegistry.getSchema('io.fabric8.openshift.api.model.BuildTriggerPolicy'); - var getSecrets = function () { - return $scope.secrets; - }; - var secretSchemaType = "fabric8_SecretReference"; - var secretSchemaRef = "#/definitions/" + secretSchemaType; - var secretSchemaJavaType = "io.fabric8.console.SecretReference"; - var secretNameElement = { - "type": "string", - "enum": getSecrets, - required: true - }; - var secretSchema = { - "type": "object", - properties: { - "name": secretNameElement + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.ExecAction" }, - javaType: secretSchemaJavaType - }; - SchemaRegistry.addSchema(secretSchemaType, secretSchema); - // lets switch to the new secrets types: - var sourceSecretProperty = Core.pathGet(buildSource, ["properties", "sourceSecret"]); - angular.forEach([ - Core.pathGet(customStrategy, ["properties", "pullSecret"]), - sourceSecretProperty, - ], function (schemaType) { - if (schemaType) { - schemaType["type"] = secretSchemaType; - schemaType["$ref"] = secretSchemaRef; - schemaType["javaType"] = secretSchemaJavaType; - } - }); - // lets try make the buildSource's sourceSecret mandatory - //schemaSetRequired(customStrategy, 'pullSecret'); - Kubernetes.schemaSetRequired(buildSource, 'sourceSecret'); - if (sourceSecretProperty) { - Core.pathSet(sourceSecretProperty, ['properties', 'required'], true); - Core.pathSet(sourceSecretProperty, ['properties', 'input-attributes', 'required'], true); - } - $scope.customStrategy = customStrategy; - $scope.buildSource = buildSource; - $scope.secrets = []; - // $scope.config = KubernetesSchema.definitions.os_build_BuildConfig; - //$scope.specConfig = KubernetesSchema.definitions.os_build_BuildConfigSpec; - // - specConfig.style = HawtioForms.FormStyle.STANDARD; - specConfig.properties['triggers']['label-attributes'] = { - style: 'display: none;' - }; - gitBuildSource.controls = ['uri', 'ref', '*']; - buildSource.properties['type'].type = 'hidden'; - buildSource.properties['type']['default'] = 'Git'; - buildSource.controls = ['git', 'contextDir', 'sourceSecret', '*']; - gitBuildSource['hideLegend'] = true; - buildSource['hideLegend'] = true; - buildOutput['hideLegend'] = true; - resources['hideLegend'] = true; - revision['hideLegend'] = true; - strategy['hideLegend'] = true; - strategy.controls = ['type', '*']; - strategy.properties['type'] = { - type: 'text', - enum: [{ - 'value': 'Custom', - 'label': 'Custom' - }, { - 'value': 'Docker', - 'label': 'Docker' - }, { - 'value': 'Source', - 'label': 'Source' - }] - }; - customStrategy['control-group-attributes'] = { - 'ng-show': "entity.type == 'Custom'" - }; - strategy.properties['dockerStrategy']['control-group-attributes'] = { - 'ng-show': "entity.type == 'Docker'" - }; - strategy.properties['sourceStrategy']['control-group-attributes'] = { - 'ng-show': "entity.type == 'Source'" - }; - buildTriggerPolicy.controls = ['type', '*']; - buildTriggerPolicy.properties['type'] = { - type: 'string', - enum: [{ - 'value': 'Github', - 'label': 'Github' - }, { - 'value': 'ImageChange', - 'label': 'Image Change' - }, { - 'value': 'Generic', - 'label': 'Generic' - }] - }; - buildTriggerPolicy.properties['generic']['control-group-attributes'] = { - 'ng-show': "entity.type == 'Generic'" - }; - buildTriggerPolicy.properties['github']['control-group-attributes'] = { - 'ng-show': "entity.type == 'Github'" - }; - buildTriggerPolicy.properties['imageChange']['control-group-attributes'] = { - 'ng-show': "entity.type == 'ImageChange'" - }; - // re-arranging the controls - //specConfig.controls = ['source', '*']; - // tabs - specConfig.tabs = { - "Source": ["source"], - "Revision": ["revision"], - "Output": ["output"], - "Resources": ["resources"], - "Strategy": ["strategy"], - "Triggers": ["triggers"], - "Service Account": ["serviceAccount"] - }; - /* - * wizard, needs an 'onFinish' function in the scope - specConfig.wizard = { - pages: { - Source: { - controls: ["source"] + "kubernetes_GCEPersistentDiskVolumeSource": { + "type": "object", + "description": "", + "properties": { + "fsType": { + "type": "string", + "description": "file system type to mount" + }, + "partition": { + "type": "integer", + "description": "partition on the disk to mount (e.g." + }, + "pdName": { + "type": "string", + "description": "unique name of the PD resource in GCE; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#gcepersistentdisk" + }, + "readOnly": { + "type": "boolean", + "description": "read-only if true" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.GCEPersistentDiskVolumeSource" }, - Revision: { - controls: ["revision"] + "kubernetes_GitRepoVolumeSource": { + "type": "object", + "description": "", + "properties": { + "repository": { + "type": "string", + "description": "repository URL" + }, + "revision": { + "type": "string", + "description": "commit hash for the specified revision" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.GitRepoVolumeSource" }, - Output: { - controls: ["output"] + "kubernetes_GlusterfsVolumeSource": { + "type": "object", + "description": "", + "properties": { + "endpoints": { + "type": "string", + "description": "gluster hosts endpoints name; see http://releases.k8s.io/HEAD/examples/glusterfs/README.md#create-a-pod" + }, + "path": { + "type": "string", + "description": "path to gluster volume; see http://releases.k8s.io/HEAD/examples/glusterfs/README.md#create-a-pod" + }, + "readOnly": { + "type": "boolean", + "description": "glusterfs volume to be mounted with read-only permissions; see http://releases.k8s.io/HEAD/examples/glusterfs/README.md#create-a-pod" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.GlusterfsVolumeSource" }, - Resources: { - controls: ["resources"] + "kubernetes_HTTPGetAction": { + "type": "object", + "description": "", + "properties": { + "host": { + "type": "string", + "description": "hostname to connect to; defaults to pod IP" + }, + "path": { + "type": "string", + "description": "path to access on the HTTP server" + }, + "port": { + "$ref": "#/definitions/kubernetes_util_IntOrString", + "javaType": "io.fabric8.kubernetes.api.model.IntOrString" + }, + "scheme": { + "type": "string", + "description": "scheme to connect with" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.HTTPGetAction" }, - Strategy: { - controls: ["strategy"] + "kubernetes_Handler": { + "type": "object", + "description": "", + "properties": { + "exec": { + "$ref": "#/definitions/kubernetes_ExecAction", + "javaType": "io.fabric8.kubernetes.api.model.ExecAction" + }, + "httpGet": { + "$ref": "#/definitions/kubernetes_HTTPGetAction", + "javaType": "io.fabric8.kubernetes.api.model.HTTPGetAction" + }, + "tcpSocket": { + "$ref": "#/definitions/kubernetes_TCPSocketAction", + "javaType": "io.fabric8.kubernetes.api.model.TCPSocketAction" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.Handler" }, - Triggers: { - controls: ["triggers"] + "kubernetes_HostPathVolumeSource": { + "type": "object", + "description": "", + "properties": { + "path": { + "type": "string", + "description": "path of the directory on the host; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#hostpath" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.HostPathVolumeSource" }, - "Service Account": { - controls: ["serviceAccount"] - } - } - }; - */ - $scope.entity = { - "apiVersion": "v1", - "kind": "BuildConfig", - "metadata": { - "name": "", - "labels": {} + "kubernetes_ISCSIVolumeSource": { + "type": "object", + "description": "", + "properties": { + "fsType": { + "type": "string", + "description": "file system type to mount" + }, + "iqn": { + "type": "string", + "description": "iSCSI Qualified Name" + }, + "lun": { + "type": "integer", + "description": "iscsi target lun number" + }, + "readOnly": { + "type": "boolean", + "description": "read-only if true" + }, + "targetPortal": { + "type": "string", + "description": "iSCSI target portal" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.ISCSIVolumeSource" }, - "spec": { - "source": { - "type": "Git" + "kubernetes_Lifecycle": { + "type": "object", + "description": "", + "properties": { + "postStart": { + "$ref": "#/definitions/kubernetes_Handler", + "javaType": "io.fabric8.kubernetes.api.model.Handler" + }, + "preStop": { + "$ref": "#/definitions/kubernetes_Handler", + "javaType": "io.fabric8.kubernetes.api.model.Handler" + } }, - "strategy": { - "type": "Custom", - "customStrategy": { - "from": { - "kind": "DockerImage", - "name": "fabric8/openshift-s2i-jenkins-trigger" - }, - "env": [ - { - "name": "BASE_URI", - "value": jenkinsUrl - }, - { - "name": "JOB_NAME", - "value": jobName - } + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.Lifecycle" + }, + "kubernetes_List": { + "type": "object", + "description": "", + "properties": { + "apiVersion": { + "type": "string", + "description": "", + "default": "v1", + "required": true, + "enum": [ + "v1" ] + }, + "items": { + "type": "array", + "description": "list of objects", + "items": { + "$ref": "#/definitions/kubernetes_runtime_RawExtension", + "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" + } + }, + "kind": { + "type": "string", + "description": "", + "default": "List", + "required": true + }, + "metadata": { + "$ref": "#/definitions/kubernetes_ListMeta", + "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } - } - } - }; - $scope.$watch('entity.spec.source.git.uri', function (val) { - if (!val) { - return; - } - var lastBit = val.match(/[^\/]+$/)[0]; - if (lastBit) { - var name = lastBit.replace(/\.git$/, ''); - Kubernetes.log.debug("name: ", name); - if (!Core.isBlank(name) - && Core.isBlank(Core.pathGet($scope.entity, ['metadata', 'name']))) { - Core.pathSet($scope.entity, ['metadata', 'name'], name); - } - } - }); - Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); - $scope.breadcrumbConfig = Developer.createProjectSettingsBreadcrumbs($scope.projectId); - $scope.subTabConfig = Developer.createProjectSubNavBars($scope.projectId); - $scope.tabs = Developer.createProjectSettingsSubNavBars($scope.projectId); - Kubernetes.watch($scope, $element, "secrets", $scope.namespace, onSecrets); - $scope.buildConfigClient = K8SClientFactory.create("buildconfigs", $scope.namespace); - $element.on('$destroy', function () { - $scope.$destroy(); - }); - $scope.$on('$destroy', function () { - K8SClientFactory.destroy($scope.buildConfigClient); - }); - /* - $scope.$on('kubernetesModelUpdated', function () { - updateData(); - }); - - */ - $scope.$on('$routeUpdate', function ($event) { - updateData(); - }); - $scope.save = function () { - Kubernetes.log.info("Saving!"); - var entity = $scope.entity; - var spec = (entity || {}).spec || {}; - // TODO update the jenkins job name! - // lets delete lots of cruft - var strategy = spec.strategy || {}; - delete strategy["dockerStrategy"]; - delete strategy["sourceStrategy"]; - delete spec["revision"]; - delete spec["output"]; - delete spec["resources"]; - var strategyPullSecretName = Core.pathGet(spec, ["strategy", "customStrategy", "pullSecret", "name"]); - var sourceSecretName = Core.pathGet(spec, ["source", "sourceSecret", "name"]); - Kubernetes.log.info("sourceSecretName: " + sourceSecretName); - Kubernetes.log.info("strategyPullSecretName: " + strategyPullSecretName); - if (!strategyPullSecretName && sourceSecretName) { - Core.pathSet(spec, ["strategy", "customStrategy", "pullSecret", "name"], sourceSecretName); - } - /* - // TODO hack until the put deals with updates - var metadata = entity.metadata; - if (metadata) { - delete metadata["resourceVersion"]; - } - */ - Kubernetes.log.info(angular.toJson(entity, true)); - $scope.buildConfigClient.put(entity, function (obj) { - Kubernetes.log.info("build config created!"); - var link = Developer.projectSecretsLink($scope.namespace, Kubernetes.getName(entity)); - if (link) { - Kubernetes.log.info("Navigating to: " + link); - $location.path(link); - } - else { - Kubernetes.log.warn("Could not find the edit pipeline link!"); - } - }); - }; - updateData(); - var jenkinsUrl = Developer.jenkinsLink(); - var jobName = ""; - function updateData() { - $scope.item = null; - if ($scope.id) { - var url = Kubernetes.buildConfigRestUrl($scope.id); - $http.get(url). - success(function (data, status, headers, config) { - if (data) { - $scope.entity = data; - var buildConfig = angular.copy(data); - var sortedBuilds = null; - Kubernetes.enrichBuildConfig(buildConfig, sortedBuilds); - $scope.buildConfig = buildConfig; + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.BaseKubernetesList", + "javaInterfaces": [ + "io.fabric8.kubernetes.api.model.KubernetesResource", + "io.fabric8.kubernetes.api.model.KubernetesResourceList" + ] + }, + "kubernetes_ListMeta": { + "type": "object", + "description": "", + "properties": { + "resourceVersion": { + "type": "string", + "description": "string that identifies the internal version of this object that can be used by clients to determine when objects have changed; populated by the system" + }, + "selfLink": { + "type": "string", + "description": "URL for the object; populated by the system" } - $scope.spec = ($scope.entity || {}).spec || {}; - $scope.fetched = true; - // lets update the tabs - $scope.subTabConfig = Developer.createProjectSubNavBars($scope.projectId, null, $scope); - Core.$apply($scope); - }). - error(function (data, status, headers, config) { - Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); - }); - } - else { - $scope.fetched = true; - $scope.spec = $scope.entity.spec; - Core.$apply($scope); - } - } - function onSecrets(secrets) { - var array = []; - angular.forEach(secrets, function (secret) { - var name = Kubernetes.getName(secret); - if (name) { - array.push({ - label: name, - value: name, - "attributes": { - "title": name - }, - $secret: secret - }); - } - }); - $scope.secrets = _.sortBy(array, "label"); - var specSourceSecretNamePath = ['spec', 'source', 'sourceSecret', 'name']; - if ($scope.entity && !Core.pathGet($scope.entity, specSourceSecretNamePath)) { - var defaultSecretName = findDefaultImportSecretName(secrets); - Core.pathSet($scope.entity, specSourceSecretNamePath, defaultSecretName); - } - } - function findDefaultImportSecretName(secrets) { - var answer = null; - angular.forEach(secrets, function (secret) { - var name = Kubernetes.getName(secret); - if (!answer && name && name.startsWith("jenkins-login")) { - answer = name; - } - }); - if (!answer) { - angular.forEach(secrets, function (secret) { - var name = Kubernetes.getName(secret); - if (!answer && name && name.startsWith("jenkins-token")) { - answer = name; + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.ListMeta" + }, + "kubernetes_LoadBalancerIngress": { + "type": "object", + "description": "", + "properties": { + "hostname": { + "type": "string", + "description": "hostname of ingress point" + }, + "ip": { + "type": "string", + "description": "IP address of ingress point" } - }); - } - return answer; - } - switch (mode) { - case 'create': - delete specConfig.tabs; - _.forIn(buildSource.properties, function (property, name) { - if (name !== 'git') { - Kubernetes.log.info("Hiding property: ", name); - property.hidden = true; + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.LoadBalancerIngress" + }, + "kubernetes_LoadBalancerStatus": { + "type": "object", + "description": "", + "properties": { + "ingress": { + "type": "array", + "description": "load-balancer ingress points", + "items": { + "$ref": "#/definitions/kubernetes_LoadBalancerIngress", + "javaType": "io.fabric8.kubernetes.api.model.LoadBalancerIngress" + } } - }); - _.forIn(gitBuildSource.properties, function (property, name) { - if (name !== 'uri') { - Kubernetes.log.info("Hiding property: ", name); - property.hidden = true; + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.LoadBalancerStatus" + }, + "kubernetes_LocalObjectReference": { + "type": "object", + "description": "", + "properties": { + "name": { + "type": "string", + "description": "name of the referent; see http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#names" } - else { - property.label = "Git URL"; - property['input-attributes'] = { - 'required': true - }; + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" + }, + "kubernetes_MetadataFile": { + "type": "object", + "description": "", + "properties": { + "fieldRef": { + "$ref": "#/definitions/kubernetes_ObjectFieldSelector", + "javaType": "io.fabric8.kubernetes.api.model.ObjectFieldSelector" + }, + "name": { + "type": "string", + "description": "the name of the file to be created" } - }); - _.forIn(specConfig.properties, function (property, name) { - if (name !== 'source') { - Kubernetes.log.info("Hiding property: ", name); - property.hidden = true; + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.MetadataFile" + }, + "kubernetes_MetadataVolumeSource": { + "type": "object", + "description": "", + "properties": { + "items": { + "type": "array", + "description": "list of metadata files", + "items": { + "$ref": "#/definitions/kubernetes_MetadataFile", + "javaType": "io.fabric8.kubernetes.api.model.MetadataFile" + } } - }); - break; - case 'edit': - default: - } - $scope.specConfig = specConfig; - }]); -})(Kubernetes || (Kubernetes = {})); - -/// -/// -var Kubernetes; -(function (Kubernetes) { - Kubernetes.BuildConfigsController = Kubernetes.controller("BuildConfigsController", ["$scope", "KubernetesModel", "KubernetesState", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", - function ($scope, KubernetesModel, KubernetesState, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { - $scope.kubernetes = KubernetesState; - $scope.model = KubernetesModel; - $scope.tableConfig = { - data: 'model.buildconfigs', - showSelectionCheckbox: true, - enableRowClickSelection: false, - multiSelect: true, - selectedItems: [], - filterOptions: { - filterText: $location.search()["q"] || '' }, - columnDefs: [ - { - field: 'metadata.name', - displayName: 'Name', - cellTemplate: $templateCache.get("buildConfigLinkTemplate.html") + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.MetadataVolumeSource" + }, + "kubernetes_NFSVolumeSource": { + "type": "object", + "description": "", + "properties": { + "path": { + "type": "string", + "description": "the path that is exported by the NFS server; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#nfs" }, - /* - { - field: 'spec.source.type', - displayName: 'Source' - }, - */ - { - field: 'spec.source.git.uri', - displayName: 'Repository' + "readOnly": { + "type": "boolean", + "description": "forces the NFS export to be mounted with read-only permissions; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#nfs" }, - /* - { - field: 'spec.strategy.type', - displayName: 'Strategy' - }, - { - field: 'spec.strategy.stiStrategy.image', - displayName: 'Source Image' - }, - { - field: 'spec.output.imageTag', - displayName: 'Output Image' - }, - */ - { - field: '$fabric8CodeViews', - displayName: 'Code', - width: "***", - minWidth: 500, - cellTemplate: $templateCache.get("buildConfigCodeViewsTemplate.html") + "server": { + "type": "string", + "description": "the hostname or IP address of the NFS server; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#nfs" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.NFSVolumeSource" + }, + "kubernetes_Namespace": { + "type": "object", + "description": "", + "properties": { + "apiVersion": { + "type": "string", + "description": "", + "default": "v1", + "required": true, + "enum": [ + "v1" + ] }, - { - field: '$fabric8BuildViews', - displayName: 'Builds', - width: "***", - minWidth: 500, - cellTemplate: $templateCache.get("buildConfigBuildViewsTemplate.html") + "kind": { + "type": "string", + "description": "", + "default": "Namespace", + "required": true }, - { - field: '$fabric8EnvironmentViews', - displayName: 'Environments', - width: "***", - minWidth: 500, - cellTemplate: $templateCache.get("buildConfigEnvironmentViewsTemplate.html") + "metadata": { + "$ref": "#/definitions/kubernetes_ObjectMeta", + "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, - { - field: '$fabric8TeamViews', - displayName: 'People', - width: "***", - minWidth: 500, - cellTemplate: $templateCache.get("buildConfigTeamViewsTemplate.html") + "spec": { + "$ref": "#/definitions/kubernetes_NamespaceSpec", + "javaType": "io.fabric8.kubernetes.api.model.NamespaceSpec" + }, + "status": { + "$ref": "#/definitions/kubernetes_NamespaceStatus", + "javaType": "io.fabric8.kubernetes.api.model.NamespaceStatus" } + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.Namespace", + "javaInterfaces": [ + "io.fabric8.kubernetes.api.model.HasMetadata" ] - }; - Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); - // TODO - // $scope.isLoggedIntoGogs = Forge.isLoggedIntoGogs; - $scope.deletePrompt = function (selected) { - UI.multiItemConfirmActionDialog({ - collection: selected, - index: '$name', - onClose: function (result) { - if (result) { - function deleteSelected(selected, next) { - if (next) { - deleteEntity(next, function () { - deleteSelected(selected, selected.shift()); - }); - } - else { - updateData(); - } - } - deleteSelected(selected, selected.shift()); + }, + "kubernetes_NamespaceList": { + "type": "object", + "description": "", + "properties": { + "apiVersion": { + "type": "string", + "description": "", + "default": "v1", + "required": true, + "enum": [ + "v1" + ] + }, + "items": { + "type": "array", + "description": "items is the list of Namespace objects in the list; see http://releases.k8s.io/HEAD/docs/user-guide/namespaces.md", + "items": { + "$ref": "#/definitions/kubernetes_Namespace", + "javaType": "io.fabric8.kubernetes.api.model.Namespace" } }, - title: 'Delete Build Configs?', - action: 'The following Build Configs will be deleted:', - okText: 'Delete', - okClass: 'btn-danger', - custom: "This operation is permanent once completed!", - customClass: "alert alert-warning" - }).open(); - }; - function deleteEntity(selection, nextCallback) { - var name = (selection || {}).$name; - if (name) { - console.log("About to delete build config: " + name); - var url = Kubernetes.buildConfigRestUrl(name); - $http.delete(url). - success(function (data, status, headers, config) { - nextCallback(); - }). - error(function (data, status, headers, config) { - Kubernetes.log.warn("Failed to delete build config on " + url + " " + data + " " + status); - }); - } - else { - console.log("warning: no name for selection: " + angular.toJson(selection)); - } - } - function updateData() { - } - updateData(); - }]); -})(Kubernetes || (Kubernetes = {})); - -/// -/// -/// -var Kubernetes; -(function (Kubernetes) { - Kubernetes.BuildLogsController = Kubernetes.controller("BuildLogsController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", - function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { - $scope.kubernetes = KubernetesState; - $scope.model = KubernetesModel; - $scope.id = $routeParams["id"]; - $scope.schema = KubernetesSchema; - $scope.config = KubernetesSchema.definitions.os_build_Build; - Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); - $scope.$on('kubernetesModelUpdated', function () { - updateData(); - }); - $scope.$on('$routeUpdate', function ($event) { - updateData(); - }); - $scope.logsText = "Loading logs..."; - updateData(); - function updateData() { - $scope.item = null; - if ($scope.id) { - var url = Kubernetes.buildRestUrl($scope.id); - $http.get(url). - success(function (data, status, headers, config) { - if (data) { - $scope.entity = Kubernetes.enrichBuild(data); + "kind": { + "type": "string", + "description": "", + "default": "NamespaceList", + "required": true + }, + "metadata": { + "$ref": "#/definitions/kubernetes_ListMeta", + "javaType": "io.fabric8.kubernetes.api.model.ListMeta" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.NamespaceList", + "javaInterfaces": [ + "io.fabric8.kubernetes.api.model.KubernetesResource", + "io.fabric8.kubernetes.api.model.KubernetesResourceList" + ] + }, + "kubernetes_NamespaceSpec": { + "type": "object", + "description": "", + "properties": { + "finalizers": { + "type": "array", + "description": "an opaque list of values that must be empty to permanently remove object from storage; see http://releases.k8s.io/HEAD/docs/design/namespaces.md#finalizers", + "items": { + "type": "string", + "description": "an opaque list of values that must be empty to permanently remove object from storage; see http://releases.k8s.io/HEAD/docs/design/namespaces.md#finalizers" } - $scope.fetched = true; - Core.$apply($scope); - }). - error(function (data, status, headers, config) { - Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); - }); - url = Kubernetes.buildLogsRestUrl($scope.id); - $http.get(url). - success(function (data, status) { - $scope.logsText = data; - Core.$apply($scope); - }). - error(function (data, status) { - $scope.logsText = "Failed to load logs from: " + url + " " + data + " status: " + status; - Core.$apply($scope); - }). - catch(function (error) { - $scope.logsText = "Failed to load logs: " + angular.toJson(error, true); - Core.$apply($scope); - }); - } - else { - $scope.fetched = true; - Core.$apply($scope); - } - } - }]); -})(Kubernetes || (Kubernetes = {})); - -/// -/// -var Kubernetes; -(function (Kubernetes) { - Kubernetes.BuildsController = Kubernetes.controller("BuildsController", ["$scope", "KubernetesModel", "KubernetesState", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", - function ($scope, KubernetesModel, KubernetesState, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { - $scope.kubernetes = KubernetesState; - $scope.model = KubernetesModel; - $scope.buildConfigId = $routeParams["id"]; - $scope.$on('kubernetesModelUpdated', function () { - Core.$apply($scope); - }); - $scope.tableConfig = { - data: 'model.builds', - showSelectionCheckbox: true, - enableRowClickSelection: false, - multiSelect: true, - selectedItems: [], - filterOptions: { - filterText: $location.search()["q"] || '' + } }, - columnDefs: [ - { - field: 'metadata.name', - displayName: 'Name', - cellTemplate: $templateCache.get("buildLinkTemplate.html") - }, - { - field: '$creationDate', - displayName: 'Time', - defaultSort: true, - cellTemplate: $templateCache.get("buildTimeTemplate.html") + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.NamespaceSpec" + }, + "kubernetes_NamespaceStatus": { + "type": "object", + "description": "", + "properties": { + "phase": { + "type": "string", + "description": "phase is the current lifecycle phase of the namespace; see http://releases.k8s.io/HEAD/docs/design/namespaces.md#phases" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.NamespaceStatus" + }, + "kubernetes_Node": { + "type": "object", + "description": "", + "properties": { + "apiVersion": { + "type": "string", + "description": "", + "default": "v1", + "required": true, + "enum": [ + "v1" + ] }, - { - field: 'status', - displayName: 'Status', - cellTemplate: $templateCache.get("buildStatusTemplate.html") + "kind": { + "type": "string", + "description": "", + "default": "Node", + "required": true }, - { - field: '$logsLink', - displayName: 'Logs', - cellTemplate: $templateCache.get("buildLogsTemplate.html") + "metadata": { + "$ref": "#/definitions/kubernetes_ObjectMeta", + "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, - { - field: '$podLink', - displayName: 'Build Pod', - cellTemplate: $templateCache.get("buildPodTemplate.html") + "spec": { + "$ref": "#/definitions/kubernetes_NodeSpec", + "javaType": "io.fabric8.kubernetes.api.model.NodeSpec" }, - /* - { - field: 'parameters.source.type', - displayName: 'Source' - }, - */ - { - field: 'spec.source.git.uri', - displayName: 'Repository', - cellTemplate: $templateCache.get("buildRepositoryTemplate.html") + "status": { + "$ref": "#/definitions/kubernetes_NodeStatus", + "javaType": "io.fabric8.kubernetes.api.model.NodeStatus" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.Node", + "javaInterfaces": [ + "io.fabric8.kubernetes.api.model.HasMetadata" + ] + }, + "kubernetes_NodeAddress": { + "type": "object", + "description": "", + "properties": { + "address": { + "type": "string", + "description": "the node address" }, - { - field: 'spec.strategy.type', - displayName: 'Strategy' + "type": { + "type": "string", + "description": "node address type" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.NodeAddress" + }, + "kubernetes_NodeCondition": { + "type": "object", + "description": "", + "properties": { + "lastHeartbeatTime": { + "type": "string", + "description": "last time we got an update on a given condition" }, - { - field: 'spec.strategy.sourceStrategy.from.name', - displayName: 'Source Image' + "lastTransitionTime": { + "type": "string", + "description": "last time the condition transit from one status to another" }, - { - field: 'spec.output.to.name', - displayName: 'Output Image' - }] - }; - Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); - $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs($scope.buildConfigId); - $scope.subTabConfig = Developer.createProjectSubNavBars($scope.buildConfigId, null, $scope); - $scope.$on('kubernetesModelUpdated', function () { - updateData(); - }); - function updateData() { - if ($scope.model) { - var builds = $scope.model.builds; - var buildConfigId = $scope.buildConfigId; - Kubernetes.enrichBuilds(builds); - $scope.fetched = true; - if (buildConfigId) { - $scope.buildConfig = $scope.model.getBuildConfig(buildConfigId); - } - } - } - updateData(); - /* - $scope.$keepPolling = () => keepPollingModel; - $scope.fetch = PollHelpers.setupPolling($scope, (next:() => void) => { - var url = buildsRestURL(); - $http.get(url). - success(function (data, status, headers, config) { - if (data) { - //console.log("got data " + angular.toJson(data, true)); - $scope.builds = enrichBuilds(data.items); - $scope.fetched = true; - - if ($scope.model) { - $scope.buildConfig = $scope.model.getBuildConfig($scope.buildConfigId); + "message": { + "type": "string", + "description": "human readable message indicating details about last transition" + }, + "reason": { + "type": "string", + "description": "(brief) reason for the condition's last transition" + }, + "status": { + "type": "string", + "description": "status of the condition" + }, + "type": { + "type": "string", + "description": "type of node condition" } - } - Core.$apply($scope); - next(); - }). - error(function (data, status, headers, config) { - log.warn("Failed to load " + url + " " + data + " " + status); - Core.$apply($scope); - next(); - }); - }); - - $scope.fetch(); - */ - }]); -})(Kubernetes || (Kubernetes = {})); - -/// -/// -/// -var Kubernetes; -(function (Kubernetes) { - // controller for connecting to a remote container via jolokia - Kubernetes.ConnectController = Kubernetes.controller("ConnectController", [ - "$scope", "localStorage", "userDetails", "ConnectDialogService", "$browser", - function ($scope, localStorage, userDetails, ConnectDialogService, $browser) { - $scope.doConnect = function (entity) { - var connectUrl = new URI().path(UrlHelpers.join(HawtioCore.documentBase(), '/java/index.html')); - var returnTo = new URI().toString(); - var title = entity.metadata.name || 'Untitled Container'; - var token = userDetails.token || ''; - connectUrl.hash(token).query({ - jolokiaUrl: entity.$jolokiaUrl, - title: title, - returnTo: returnTo - }); - Kubernetes.log.debug("Connect URI: ", connectUrl.toString()); - window.open(connectUrl.toString()); - }; - }]); -})(Kubernetes || (Kubernetes = {})); - -/// -/// -var Kubernetes; -(function (Kubernetes) { - var dataInfoModelService = (function () { - function dataInfoModelService() { - this.serverdata = {}; - this.promiseobject = {}; - this.localdata = {}; - this.selectednodes = []; - this.resumablejs = []; - this.selecteditems = []; - this.serveritems = []; - this.uploadprocess = {}; - this.uploadedStatus = ""; - this.folderList = { - length: 0 - }; - } - Object.defineProperty(dataInfoModelService.prototype, "uploadProcess", { - get: function () { - return this.uploadprocess; - }, - set: function (uploadProcess) { - this.uploadprocess = uploadProcess; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(dataInfoModelService.prototype, "serverItems", { - get: function () { - return this.serveritems; - }, - set: function (serverItems) { - this.serveritems = serverItems; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(dataInfoModelService.prototype, "resumableJs", { - get: function () { - return this.resumableJs; + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.NodeCondition" }, - set: function (resumableJs) { - this.resumablejs = resumableJs; + "kubernetes_NodeList": { + "type": "object", + "description": "", + "properties": { + "apiVersion": { + "type": "string", + "description": "", + "default": "v1", + "required": true, + "enum": [ + "v1" + ] + }, + "items": { + "type": "array", + "description": "list of nodes", + "items": { + "$ref": "#/definitions/kubernetes_Node", + "javaType": "io.fabric8.kubernetes.api.model.Node" + } + }, + "kind": { + "type": "string", + "description": "", + "default": "NodeList", + "required": true + }, + "metadata": { + "$ref": "#/definitions/kubernetes_ListMeta", + "javaType": "io.fabric8.kubernetes.api.model.ListMeta" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.NodeList", + "javaInterfaces": [ + "io.fabric8.kubernetes.api.model.KubernetesResource", + "io.fabric8.kubernetes.api.model.KubernetesResourceList" + ] }, - enumerable: true, - configurable: true - }); - Object.defineProperty(dataInfoModelService.prototype, "selectedItems", { - get: function () { - return this.selecteditems; + "kubernetes_NodeSpec": { + "type": "object", + "description": "", + "properties": { + "externalID": { + "type": "string", + "description": "deprecated. External ID assigned to the node by some machine database (e.g. a cloud provider). Defaults to node name when empty." + }, + "podCIDR": { + "type": "string", + "description": "pod IP range assigned to the node" + }, + "providerID": { + "type": "string", + "description": "ID of the node assigned by the cloud provider in the format: \u003cProviderName\u003e://\u003cProviderSpecificNodeID\u003e" + }, + "unschedulable": { + "type": "boolean", + "description": "disable pod scheduling on the node; see http://releases.k8s.io/HEAD/docs/admin/node.md#manual-node-administration" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.NodeSpec" }, - set: function (selectedItems) { - this.selecteditems = selectedItems; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(dataInfoModelService.prototype, "selectedNodes", { - get: function () { - return this.selectednodes; - }, - set: function (selectedNodes) { - this.selectednodes = selectedNodes; + "kubernetes_NodeStatus": { + "type": "object", + "description": "", + "properties": { + "addresses": { + "type": "array", + "description": "list of addresses reachable to the node; see http://releases.k8s.io/HEAD/docs/admin/node.md#node-addresses", + "items": { + "$ref": "#/definitions/kubernetes_NodeAddress", + "javaType": "io.fabric8.kubernetes.api.model.NodeAddress" + } + }, + "capacity": { + "type": "object", + "description": "compute resource capacity of the node; see http://releases.k8s.io/HEAD/docs/user-guide/compute-resources.md", + "additionalProperties": { + "$ref": "#/definitions/kubernetes_resource_Quantity", + "javaType": "io.fabric8.kubernetes.api.model.Quantity" + }, + "javaType": "java.util.Map\u003cString,io.fabric8.kubernetes.api.model.Quantity\u003e" + }, + "conditions": { + "type": "array", + "description": "list of node conditions observed; see http://releases.k8s.io/HEAD/docs/admin/node.md#node-condition", + "items": { + "$ref": "#/definitions/kubernetes_NodeCondition", + "javaType": "io.fabric8.kubernetes.api.model.NodeCondition" + } + }, + "nodeInfo": { + "$ref": "#/definitions/kubernetes_NodeSystemInfo", + "javaType": "io.fabric8.kubernetes.api.model.NodeSystemInfo" + }, + "phase": { + "type": "string", + "description": "most recently observed lifecycle phase of the node; see http://releases.k8s.io/HEAD/docs/admin/node.md#node-phase" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.NodeStatus" }, - enumerable: true, - configurable: true - }); - dataInfoModelService.prototype.isContainsNodes = function (node) { - for (var item in this.selectednodes) { - if (this.selectednodes[item].id === node.id) - return true; - } - return false; - }; - dataInfoModelService.prototype.findNodes = function (node) { - var id = "-1"; - if (typeof (node) === "object") { - id = node.id; - } - else if (typeof (node) === "number") { - id = node.toString(); - } - else if (typeof (node) === "string") { - id = node; - } - else { - return "-1"; - } - for (var item in this.selectednodes) { - if (this.selectednodes[item].id === id) - return item; - } - return "-1"; - }; - dataInfoModelService.prototype.findItemIndex = function (item) { - var id = -1; - if (typeof (item) === "object") { - id = item.id; - } - else if (typeof (item) === "number") { - id = item.toString(); - } - else if (typeof (item) === "string") { - id = item; - } - else { - return -1; - } - for (var it in this.selecteditems) { - if (this.selecteditems[it].id === id) - return it; - } - return -1; - }; - dataInfoModelService.prototype.createFolderList = function (files, rootPath) { - for (var i = 0; i < files.length; i++) { - var relativePath = files[i].webkitRelativePath.replace(RegExp("^" + rootPath + "/"), ""); - var paths = relativePath.split("/"); - if (!this.folderList.hasOwnProperty(paths[0])) { - this.folderList[paths[0]] = { - length: 0 - }; - this.folderList.length++; - } - var Obj = this.folderList[paths[0]]; - Obj[Obj.length] = files[i]; - Obj.length++; - this.folderList[paths[0]] = Obj; - } - }; - dataInfoModelService.prototype.updateNodeById = function (nodeId, key, value) { - for (var item in this.selectednodes) { - var node = this.selectednodes[item]; - if (node.id === nodeId) { - node[key] = value; - break; - } - } - }; - Object.defineProperty(dataInfoModelService.prototype, "serverData", { - get: function () { - return this.serverData; + "kubernetes_NodeSystemInfo": { + "type": "object", + "description": "", + "properties": { + "bootID": { + "type": "string", + "description": "boot id is the boot-id reported by the node" + }, + "containerRuntimeVersion": { + "type": "string", + "description": "Container runtime version reported by the node through runtime remote API (e.g. docker://1.5.0)" + }, + "kernelVersion": { + "type": "string", + "description": "Kernel version reported by the node from 'uname -r' (e.g. 3.16.0-0.bpo.4-amd64)" + }, + "kubeProxyVersion": { + "type": "string", + "description": "Kube-proxy version reported by the node" + }, + "kubeletVersion": { + "type": "string", + "description": "Kubelet version reported by the node" + }, + "machineID": { + "type": "string", + "description": "machine-id reported by the node" + }, + "osImage": { + "type": "string", + "description": "OS image used reported by the node from /etc/os-release (e.g. Debian GNU/Linux 7 (wheezy))" + }, + "systemUUID": { + "type": "string", + "description": "system-uuid reported by the node" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.NodeSystemInfo" }, - set: function (serverData) { - this.serverdata = serverData; + "kubernetes_ObjectFieldSelector": { + "type": "object", + "description": "", + "properties": { + "apiVersion": { + "type": "string", + "description": "version of the schema that fieldPath is written in terms of; defaults to v1" + }, + "fieldPath": { + "type": "string", + "description": "path of the field to select in the specified API version" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.ObjectFieldSelector" }, - enumerable: true, - configurable: true - }); - Object.defineProperty(dataInfoModelService.prototype, "promiseObject", { - get: function () { - return this.promiseobject; + "kubernetes_ObjectMeta": { + "type": "object", + "description": "", + "properties": { + "annotations": { + "type": "object", + "description": "map of string keys and values that can be used by external tooling to store and retrieve arbitrary metadata about objects; see http://releases.k8s.io/HEAD/docs/user-guide/annotations.md", + "additionalProperties": { + "type": "string", + "description": "map of string keys and values that can be used by external tooling to store and retrieve arbitrary metadata about objects; see http://releases.k8s.io/HEAD/docs/user-guide/annotations.md" + }, + "javaType": "java.util.Map\u003cString,String\u003e" + }, + "creationTimestamp": { + "type": "string", + "description": "RFC 3339 date and time at which the object was created; populated by the system" + }, + "deletionTimestamp": { + "type": "string", + "description": "RFC 3339 date and time at which the object will be deleted; populated by the system when a graceful deletion is requested" + }, + "generateName": { + "type": "string", + "description": "an optional prefix to use to generate a unique name; has the same validation rules as name; optional" + }, + "generation": { + "type": "integer", + "description": "a sequence number representing a specific generation of the desired state; populated by the system; read-only", + "javaType": "Long" + }, + "labels": { + "type": "object", + "description": "map of string keys and values that can be used to organize and categorize objects; may match selectors of replication controllers and services; see http://releases.k8s.io/HEAD/docs/user-guide/labels.md", + "additionalProperties": { + "type": "string", + "description": "map of string keys and values that can be used to organize and categorize objects; may match selectors of replication controllers and services; see http://releases.k8s.io/HEAD/docs/user-guide/labels.md" + }, + "javaType": "java.util.Map\u003cString,String\u003e" + }, + "name": { + "type": "string", + "description": "string that identifies an object. Must be unique within a namespace; cannot be updated; see http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#names", + "maxLength": 63, + "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?$" + }, + "namespace": { + "type": "string", + "description": "namespace of the object; must be a DNS_LABEL; cannot be updated; see http://releases.k8s.io/HEAD/docs/user-guide/namespaces.md", + "maxLength": 253, + "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$" + }, + "resourceVersion": { + "type": "string", + "description": "string that identifies the internal version of this object that can be used by clients to determine when objects have changed; populated by the system" + }, + "selfLink": { + "type": "string", + "description": "URL for the object; populated by the system" + }, + "uid": { + "type": "string", + "description": "unique UUID across space and time; populated by the system; read-only; see http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#uids" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, - enumerable: true, - configurable: true - }); - Object.defineProperty(dataInfoModelService.prototype, "promise", { - set: function (promiseObject) { - this.promiseobject = promiseObject; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(dataInfoModelService.prototype, "localData", { - get: function () { - return this.localdata; - }, - set: function (localData) { - this.localdata = localData; - }, - enumerable: true, - configurable: true - }); - dataInfoModelService.prototype.updataDataModel = function () { - this.promiseobject.success(function (data, header, config, status) { - this.serverdata = data; - }); - this.promiseobject.error(function (data, status, hedaers, config) { - this.serverdata = {}; - }); - }; - return dataInfoModelService; - }()); - Kubernetes.dataInfoModelService = dataInfoModelService; - Kubernetes._module.factory('DataInfoModel', ['$http', function ($http) { - var $scope = new dataInfoModelService(); - $scope.promiseobject = $http({ - url: '/xmlformserver', - method: 'POST' - }); - updateDataFromServer($scope.serverdata, function (data, header, config, status) { - $scope.serverdata = data; - }); - function updateDataFromServer(data, callback) { - $http({ - url: '/xmlformserver', - method: 'POST' - }).success(function (data, header, config, status) { - if (data) - callback(data, header, config, status); - }).error(function (data, header, config, status) { - console.log("error"); - }); - } - ; - return $scope; - }]); -})(Kubernetes || (Kubernetes = {})); - -/// -/// -/// -var Kubernetes; -(function (Kubernetes) { - Kubernetes.DeploymentConfigController = Kubernetes.controller("DeploymentConfigController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", - function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { - $scope.kubernetes = KubernetesState; - $scope.model = KubernetesModel; - $scope.id = $routeParams["id"]; - $scope.schema = KubernetesSchema; - $scope.config = KubernetesSchema.definitions.os_deploy_DeploymentConfig; - Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); - $scope.$on('kubernetesModelUpdated', function () { - updateData(); - }); - $scope.$on('$routeUpdate', function ($event) { - updateData(); - }); - updateData(); - function updateData() { - $scope.item = null; - if ($scope.id) { - var url = Kubernetes.deploymentConfigRestUrl($scope.id); - $http.get(url). - success(function (data, status, headers, config) { - if (data) { - $scope.entity = data; - Kubernetes.enrichDeploymentConfig(data); - } - $scope.fetched = true; - Core.$apply($scope); - }). - error(function (data, status, headers, config) { - Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); - }); - } - else { - $scope.fetched = true; - Core.$apply($scope); - } - } - }]); -})(Kubernetes || (Kubernetes = {})); - -/// -/// -var Kubernetes; -(function (Kubernetes) { - Kubernetes.DeploymentConfigsController = Kubernetes.controller("DeploymentConfigsController", ["$scope", "KubernetesModel", "KubernetesState", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", - function ($scope, KubernetesModel, KubernetesState, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { - $scope.kubernetes = KubernetesState; - $scope.model = KubernetesModel; - $scope.$on('kubernetesModelUpdated', function () { - Core.$apply($scope); - }); - $scope.labelClass = Kubernetes.containerLabelClass; - $scope.tableConfig = { - data: 'deploymentConfigs', - showSelectionCheckbox: true, - enableRowClickSelection: false, - multiSelect: true, - selectedItems: [], - filterOptions: { - filterText: $location.search()["q"] || '' - }, - columnDefs: [ - { - field: 'metadata.name', - displayName: 'Name', - cellTemplate: $templateCache.get("deploymentConfigLinkTemplate.html") + "kubernetes_ObjectReference": { + "type": "object", + "description": "", + "properties": { + "apiVersion": { + "type": "string", + "description": "API version of the referent" }, - { - field: 'metadata.namespace', - displayName: 'Namespace' + "fieldPath": { + "type": "string", + "description": "if referring to a piece of an object instead of an entire object" }, - { - field: '$imageChangeParams.automatic', - displayName: 'Automatic' + "kind": { + "type": "string", + "description": "kind of the referent; see http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds" }, - { - field: '$imageChangeParams.$containerNames', - displayName: 'Container Names' + "name": { + "type": "string", + "description": "name of the referent; see http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#names" }, - { - field: '$imageChangeParams.from.name', - displayName: 'From image' + "namespace": { + "type": "string", + "description": "namespace of the referent; see http://releases.k8s.io/HEAD/docs/user-guide/namespaces.md" }, - { - field: '$imageChangeParams.tag', - displayName: 'Tag' + "resourceVersion": { + "type": "string", + "description": "specific resourceVersion to which this reference is made" }, - { - field: 'template.controllerTemplate.podTemplate.tags', - displayName: 'Labels', - cellTemplate: $templateCache.get("deploymentConfigLabelTemplate.html") + "uid": { + "type": "string", + "description": "uid of the referent; see http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#uids" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" + }, + "kubernetes_PersistentVolume": { + "type": "object", + "description": "", + "properties": { + "apiVersion": { + "type": "string", + "description": "", + "default": "v1", + "required": true, + "enum": [ + "v1" + ] + }, + "kind": { + "type": "string", + "description": "", + "default": "PersistentVolume", + "required": true + }, + "metadata": { + "$ref": "#/definitions/kubernetes_ObjectMeta", + "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/kubernetes_PersistentVolumeSpec", + "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeSpec" + }, + "status": { + "$ref": "#/definitions/kubernetes_PersistentVolumeStatus", + "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeStatus" } + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.PersistentVolume", + "javaInterfaces": [ + "io.fabric8.kubernetes.api.model.HasMetadata" ] - }; - Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); - $scope.deletePrompt = function (selected) { - UI.multiItemConfirmActionDialog({ - collection: selected, - index: '$name', - onClose: function (result) { - if (result) { - function deleteSelected(selected, next) { - if (next) { - deleteEntity(next, function () { - deleteSelected(selected, selected.shift()); - }); - } - else { - updateData(); - } - } - deleteSelected(selected, selected.shift()); - } + }, + "kubernetes_PersistentVolumeClaim": { + "type": "object", + "description": "", + "properties": { + "apiVersion": { + "type": "string", + "description": "", + "default": "v1", + "required": true, + "enum": [ + "v1" + ] }, - title: 'Delete Deployment?', - action: 'The following Deployments will be deleted:', - okText: 'Delete', - okClass: 'btn-danger', - custom: "This operation is permanent once completed!", - customClass: "alert alert-warning" - }).open(); - }; - function deleteEntity(selection, nextCallback) { - var name = (selection || {}).$name; - if (name) { - console.log("About to delete deployment config: " + name); - var url = Kubernetes.deploymentConfigRestUrl(name); - $http.delete(url). - success(function (data, status, headers, config) { - nextCallback(); - }). - error(function (data, status, headers, config) { - Kubernetes.log.warn("Failed to delete deployment config on " + url + " " + data + " " + status); - }); - } - else { - console.log("warning: no name for selection: " + angular.toJson(selection)); - } - } - function updateData() { - var url = Kubernetes.deploymentConfigsRestURL(); - $http.get(url). - success(function (data, status, headers, config) { - if (data) { - //console.log("got data " + angular.toJson(data, true)); - $scope.deploymentConfigs = Kubernetes.enrichDeploymentConfigs(data.items); - $scope.fetched = true; - Core.$apply($scope); + "kind": { + "type": "string", + "description": "", + "default": "PersistentVolumeClaim", + "required": true + }, + "metadata": { + "$ref": "#/definitions/kubernetes_ObjectMeta", + "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/kubernetes_PersistentVolumeClaimSpec", + "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimSpec" + }, + "status": { + "$ref": "#/definitions/kubernetes_PersistentVolumeClaimStatus", + "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimStatus" } - }). - error(function (data, status, headers, config) { - Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); - }); - } - updateData(); - }]); -})(Kubernetes || (Kubernetes = {})); - -/// -/// -/// -var Kubernetes; -(function (Kubernetes) { - Kubernetes.EventsController = Kubernetes.controller("EventsController", ["$scope", "KubernetesModel", "KubernetesServices", "KubernetesPods", "KubernetesState", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", - function ($scope, KubernetesModel, KubernetesServices, KubernetesPods, KubernetesState, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { - $scope.kubernetes = KubernetesState; - $scope.model = KubernetesModel; - ControllerHelpers.bindModelToSearchParam($scope, $location, 'mode', 'mode', 'list'); - $scope.tableConfig = { - data: 'model.events', - showSelectionCheckbox: true, - enableRowClickSelection: false, - multiSelect: true, - selectedItems: [], - filterOptions: { - filterText: $location.search()["q"] || '' }, - columnDefs: [ - { field: '$firstTimestamp', - displayName: 'First Seen', - cellTemplate: $templateCache.get("firstTimestampTemplate.html") + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaim", + "javaInterfaces": [ + "io.fabric8.kubernetes.api.model.HasMetadata" + ] + }, + "kubernetes_PersistentVolumeClaimList": { + "type": "object", + "description": "", + "properties": { + "apiVersion": { + "type": "string", + "description": "", + "default": "v1", + "required": true, + "enum": [ + "v1" + ] }, - { field: '$lastTimestamp', - displayName: 'Last Seen', - cellTemplate: $templateCache.get("lastTimestampTemplate.html") + "items": { + "type": "array", + "description": "a list of persistent volume claims; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#persistentvolumeclaims", + "items": { + "$ref": "#/definitions/kubernetes_PersistentVolumeClaim", + "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaim" + } }, - { field: 'count', - displayName: 'Count' + "kind": { + "type": "string", + "description": "", + "default": "PersistentVolumeClaimList", + "required": true }, - { field: 'involvedObject.name', - displayName: 'Name', - cellTemplate: $templateCache.get("eventNameTemplate.html") + "metadata": { + "$ref": "#/definitions/kubernetes_ListMeta", + "javaType": "io.fabric8.kubernetes.api.model.ListMeta" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimList", + "javaInterfaces": [ + "io.fabric8.kubernetes.api.model.KubernetesResource", + "io.fabric8.kubernetes.api.model.KubernetesResourceList" + ] + }, + "kubernetes_PersistentVolumeClaimSpec": { + "type": "object", + "description": "", + "properties": { + "accessModes": { + "type": "array", + "description": "the desired access modes the volume should have; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#access-modes-1", + "items": { + "type": "string", + "description": "the desired access modes the volume should have; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#access-modes-1" + } }, - { field: 'involvedObject.kind', - displayName: 'Kind', - cellTemplate: $templateCache.get("eventKindTemplate.html") + "resources": { + "$ref": "#/definitions/kubernetes_ResourceRequirements", + "javaType": "io.fabric8.kubernetes.api.model.ResourceRequirements" }, - { field: 'involvedObject.fieldPath', - displayName: 'Subject' + "volumeName": { + "type": "string", + "description": "the binding reference to the persistent volume backing this claim" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimSpec" + }, + "kubernetes_PersistentVolumeClaimStatus": { + "type": "object", + "description": "", + "properties": { + "accessModes": { + "type": "array", + "description": "the actual access modes the volume has; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#access-modes-1", + "items": { + "type": "string", + "description": "the actual access modes the volume has; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#access-modes-1" + } }, - { field: 'reason', - displayName: 'Reason' + "capacity": { + "type": "object", + "description": "the actual resources the volume has", + "additionalProperties": { + "$ref": "#/definitions/kubernetes_resource_Quantity", + "javaType": "io.fabric8.kubernetes.api.model.Quantity" + }, + "javaType": "java.util.Map\u003cString,io.fabric8.kubernetes.api.model.Quantity\u003e" }, - { field: 'source', - displayName: 'Source', - cellTemplate: $templateCache.get("eventSourceTemplate.html") + "phase": { + "type": "string", + "description": "the current phase of the claim" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimStatus" + }, + "kubernetes_PersistentVolumeClaimVolumeSource": { + "type": "object", + "description": "", + "properties": { + "claimName": { + "type": "string", + "description": "the name of the claim in the same namespace to be mounted as a volume; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#persistentvolumeclaims" }, - { field: 'message', - displayName: 'Message' + "readOnly": { + "type": "boolean", + "description": "mount volume as read-only when true; default false" } - ] - }; - Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); - }]); -})(Kubernetes || (Kubernetes = {})); - -/// -/// -/// -/// -var Kubernetes; -(function (Kubernetes) { - Kubernetes.HostController = Kubernetes.controller("HostController", ["$scope", "KubernetesModel", "KubernetesState", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", - function ($scope, KubernetesModel, KubernetesState, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { - $scope.kubernetes = KubernetesState; - $scope.model = KubernetesModel; - $scope.rawModel = null; - $scope.itemConfig = { - properties: {} - }; - Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); - $scope.$on('kubernetesModelUpdated', function () { - updateData(); - }); - $scope.$on('$routeUpdate', function ($event) { - updateData(); - }); - $scope.flipRaw = function () { - $scope.rawMode = !$scope.rawMode; - Core.$apply($scope); - }; - updateData(); - function updateData() { - $scope.id = $routeParams["id"]; - $scope.item = null; - if ($scope.id) { - var url = UrlHelpers.join(KubernetesApiURL, "nodes", $scope.id); - $http.get(url). - success(function (data, status, headers, config) { - if (data) { - $scope.item = data; + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimVolumeSource" + }, + "kubernetes_PersistentVolumeList": { + "type": "object", + "description": "", + "properties": { + "apiVersion": { + "type": "string", + "description": "", + "default": "v1", + "required": true, + "enum": [ + "v1" + ] + }, + "items": { + "type": "array", + "description": "list of persistent volumes; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md", + "items": { + "$ref": "#/definitions/kubernetes_PersistentVolume", + "javaType": "io.fabric8.kubernetes.api.model.PersistentVolume" } - if ($scope.item) { - $scope.rawModel = Kubernetes.toRawYaml($scope.item); - } - }). - error(function (data, status, headers, config) { - Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); - }); - } - else { - $scope.rawModel = null; - Core.$apply($scope); - } - } - }]); -})(Kubernetes || (Kubernetes = {})); - -/// -var Kubernetes; -(function (Kubernetes) { - Kubernetes.hostPorts = []; - /** - * Sorts the the ip field - * - * @param ip the ip such as '10.1.2.13' - * @returns {any} - */ - function sortByPodIp(ip) { - // i guess there is maybe nicer ways of sort this without parsing and slicing - var regex = /(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/; - var groups = regex.exec(ip); - if (angular.isDefined(groups)) { - var g1 = ("00" + groups[1]).slice(-3); - var g2 = ("00" + groups[2]).slice(-3); - var g3 = ("00" + groups[3]).slice(-3); - var g4 = ("00" + groups[4]).slice(-3); - var answer = g1 + g2 + g3 + g4; - return answer; - } - else { - return 0; - } - } - Kubernetes.sortByPodIp = sortByPodIp; - function ramdomPort() { - var hostPort = Math.floor(30000 + Math.random() * (65535 - 30000)); - while (Kubernetes.hostPorts.indexOf(hostPort) === 0) { - hostPort = Math.floor(30000 + Math.random() * (65535 - 30000)); - } - Kubernetes.hostPorts.push(hostPort); - return hostPort; - } - Kubernetes.ramdomPort = ramdomPort; - function getRandomString(len) { - len = len || 32; - var $chars = 'abcdefhijkmnprstwxyz'; // 默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1 - var maxPos = $chars.length; - var pwd = ''; - for (var i = 0; i < len; i++) { - pwd += $chars.charAt(Math.floor(Math.random() * maxPos)); - } - return pwd; - } - Kubernetes.getRandomString = getRandomString; - var resourceRCTemplate = (function () { - function resourceRCTemplate() { - this.image = "s1:latest"; - this.names = ["admin", "cfgtoollogs", "checkpoints", "diag", "flash-recovery-area", "oradata"]; - } - resourceRCTemplate.prototype.createRC = function (Obj) { - var labels = { - "style": "oracle", - "status": "0" - }; - for (var item in Obj.labels) - labels[item] = Obj.labels[item]; - return { - "apiVersion": Kubernetes.defaultApiVersion, - "kind": "ReplicationController", - "metadata": { - "name": Obj.name, - "labels": labels - }, - "spec": { - replicas: Obj.replicas || 1, - "template": this.createTemplate(Obj) - } - }; - }; - resourceRCTemplate.prototype.createVolumeMounts = function () { - var volumeMounts = []; - for (var item in this.names) { - if (this.names[item] === 'flash-recovery-area') - volumeMounts.push({ - "name": this.names[item], - "mountPath": "/opt/oracle/app/flash_recovery_area" - }); - else - volumeMounts.push({ - "name": this.names[item], - "mountPath": "/opt/oracle/app/" + this.names[item] - }); - } - return volumeMounts; - }; - resourceRCTemplate.prototype.createVolumes = function (rootPath) { - var volumes = []; - for (var item in this.names) { - if (this.names[item] === 'flash-recovery-area') - volumes.push({ - "name": this.names[item], - "hostPath": { - "path": rootPath + "flash_recovery_area" - } - }); - else - volumes.push({ - "name": this.names[item], - "hostPath": { - "path": rootPath + this.names[item] - } - }); - } - return volumes; - }; - resourceRCTemplate.prototype.createContainers = function (Obj) { - var containers = []; - containers.push({ - "name": "oracle", - "image": this.image, - "imagePullPolicy": "IfNotPresent", - "command": ["/assets/entrypoint.sh"], - "ports": [ - { - "containerPort": 1521, - "hostPort": Obj.port || ramdomPort() - }], - "volumeMounts": this.createVolumeMounts() - }); - return containers; - }; - resourceRCTemplate.prototype.createTemplate = function (Obj) { - return { - "metadata": { - //"name": Obj.name, - "labels": Obj.labels - }, - "spec": { - "terminationGracePeriodSeconds": 0, - "containers": this.createContainers(Obj), - "volumes": this.createVolumes(Obj.path) - } - }; - }; - return resourceRCTemplate; - }()); - Kubernetes.resourceRCTemplate = resourceRCTemplate; - function findLabelValue(value, key) { - var trueValue = ''; - switch (value) { - case '01': - trueValue = '财政'; - break; - case '02': - trueValue = '社保'; - break; - case 'A': - trueValue = '批次A'; - break; - case 'B': - trueValue = '批次B'; - break; - default: - if (key === "version") { - var reg = new RegExp('^[0-9]$').exec(value); - if (reg) - trueValue = '版本' + reg[0]; - else - trueValue = value; - } - else - trueValue = value; - } - return trueValue; - } - Kubernetes.findLabelValue = findLabelValue; - function labelToChinese(labels) { - var answer = {}; - angular.forEach(labels, function (value, key) { - answer[key] = findLabelValue(value, key); - }); - return answer; - } - Kubernetes.labelToChinese = labelToChinese; -})(Kubernetes || (Kubernetes = {})); - -/// -/// -/// -/// -var Kubernetes; -(function (Kubernetes) { - Kubernetes.HostsController = Kubernetes.controller("HostsController", ["$scope", "KubernetesModel", "KubernetesPods", "KubernetesState", "ServiceRegistry", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", - function ($scope, KubernetesModel, KubernetesPods, KubernetesState, ServiceRegistry, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { - $scope.kubernetes = KubernetesState; - $scope.model = KubernetesModel; - $scope.$on('kubernetesModelUpdated', function () { - Core.$apply($scope); - }); - $scope.tableConfig = { - data: 'model.hosts', - showSelectionCheckbox: false, - enableRowClickSelection: false, - multiSelect: false, - selectedItems: [], - filterOptions: { - filterText: $location.search()["q"] || '' - }, - columnDefs: [ - { - field: 'id', - displayName: 'Name', - defaultSort: true, - cellTemplate: $templateCache.get("idTemplate.html") }, - { - field: 'hostIP', - displayName: 'IP', - customSortField: function (field) { - // use a custom sort to sort ip address - return Kubernetes.sortByPodIp(field.hostIP); - } + "kind": { + "type": "string", + "description": "", + "default": "PersistentVolumeList", + "required": true }, - { field: '$podsLink', - displayName: 'Pods', - cellTemplate: $templateCache.get("podCountsAndLinkTemplate.html"), - customSortField: function (field) { - // need to concat all the pod counters - var ready = field.$podCounters.ready || 0; - var valid = field.$podCounters.valid || 0; - var waiting = field.$podCounters.waiting || 0; - var error = field.$podCounters.error || 0; - return ready + valid + waiting + error; - } + "metadata": { + "$ref": "#/definitions/kubernetes_ListMeta", + "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } - ] - }; - Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); - }]); -})(Kubernetes || (Kubernetes = {})); - -/// -/// -var Kubernetes; -(function (Kubernetes) { - Kubernetes.ImageRepositoriesController = Kubernetes.controller("ImageRepositoriesController", ["$scope", "KubernetesModel", "KubernetesState", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", - function ($scope, KubernetesModel, KubernetesState, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { - $scope.kubernetes = KubernetesState; - $scope.model = KubernetesModel; - $scope.$on('kubernetesModelUpdated', function () { - Core.$apply($scope); - }); - $scope.tableConfig = { - data: 'imageRepositories', - showSelectionCheckbox: true, - enableRowClickSelection: false, - multiSelect: true, - selectedItems: [], - filterOptions: { - filterText: $location.search()["q"] || '' }, - columnDefs: [ - { - field: 'metadata.name', - displayName: 'Name' + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeList", + "javaInterfaces": [ + "io.fabric8.kubernetes.api.model.KubernetesResource", + "io.fabric8.kubernetes.api.model.KubernetesResourceList" + ] + }, + "kubernetes_PersistentVolumeSource": { + "type": "object", + "description": "", + "properties": { + "awsElasticBlockStore": { + "$ref": "#/definitions/kubernetes_AWSElasticBlockStoreVolumeSource", + "javaType": "io.fabric8.kubernetes.api.model.AWSElasticBlockStoreVolumeSource" }, - { - field: 'metadata.namespace', - displayName: 'Namespace' + "cephfs": { + "$ref": "#/definitions/kubernetes_CephFSVolumeSource", + "javaType": "io.fabric8.kubernetes.api.model.CephFSVolumeSource" }, - { - field: 'status.dockerImageRepository', - displayName: 'Docker Registry' + "gcePersistentDisk": { + "$ref": "#/definitions/kubernetes_GCEPersistentDiskVolumeSource", + "javaType": "io.fabric8.kubernetes.api.model.GCEPersistentDiskVolumeSource" }, - { - field: 'tags', - displayName: 'Tags', - cellTemplate: $templateCache.get('imageRegistryLabelTemplate.html') - } - ] - }; - var labelColors = { - 'prod': 'background-blue', - 'valid': 'background-light-green', - 'test': 'background-light-grey' - }; - $scope.labelClass = function (labelType) { - if (!(labelType in labelColors)) { - return 'mouse-pointer'; - } - else - return labelColors[labelType] + ' mouse-pointer'; - }; - Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); - $scope.deletePrompt = function (selected) { - UI.multiItemConfirmActionDialog({ - collection: selected, - index: '$name', - onClose: function (result) { - if (result) { - function deleteSelected(selected, next) { - if (next) { - deleteEntity(next, function () { - deleteSelected(selected, selected.shift()); - }); - } - else { - updateData(); - } - } - deleteSelected(selected, selected.shift()); - } + "glusterfs": { + "$ref": "#/definitions/kubernetes_GlusterfsVolumeSource", + "javaType": "io.fabric8.kubernetes.api.model.GlusterfsVolumeSource" }, - title: 'Delete Image Repository?', - action: 'The following Image Repositories will be deleted:', - okText: 'Delete', - okClass: 'btn-danger', - custom: "This operation is permanent once completed!", - customClass: "alert alert-warning" - }).open(); - }; - function deleteEntity(selection, nextCallback) { - var name = (selection || {}).$name; - if (name) { - console.log("About to delete image repository: " + name); - var url = Kubernetes.imageRepositoryRestUrl(name); - $http.delete(url). - success(function (data, status, headers, config) { - nextCallback(); - }). - error(function (data, status, headers, config) { - Kubernetes.log.warn("Failed to delete image repository on " + url + " " + data + " " + status); - }); - } - else { - console.log("warning: no name for selection: " + angular.toJson(selection)); - } - } - function updateData() { - var url = Kubernetes.imageRepositoriesRestURL(); - $http.get(url). - success(function (data, status, headers, config) { - if (data) { - //console.log("got data " + angular.toJson(data, true)); - $scope.imageRepositories = Kubernetes.enrichImageRepositories(data.items); - $scope.fetched = true; - Core.$apply($scope); + "hostPath": { + "$ref": "#/definitions/kubernetes_HostPathVolumeSource", + "javaType": "io.fabric8.kubernetes.api.model.HostPathVolumeSource" + }, + "iscsi": { + "$ref": "#/definitions/kubernetes_ISCSIVolumeSource", + "javaType": "io.fabric8.kubernetes.api.model.ISCSIVolumeSource" + }, + "nfs": { + "$ref": "#/definitions/kubernetes_NFSVolumeSource", + "javaType": "io.fabric8.kubernetes.api.model.NFSVolumeSource" + }, + "rbd": { + "$ref": "#/definitions/kubernetes_RBDVolumeSource", + "javaType": "io.fabric8.kubernetes.api.model.RBDVolumeSource" } - }). - error(function (data, status, headers, config) { - Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); - }); - } - updateData(); - }]); -})(Kubernetes || (Kubernetes = {})); - -/// -/// -var Kubernetes; -(function (Kubernetes) { - function selectSubNavBar($scope, tabName, newSubTabLabel) { - var foundTab = null; - angular.forEach($scope.subTabConfig, function (tab) { - if (tabName === tab.label || tabName === tab.id) { - foundTab = tab; - } - }); - var breadcrumbConfig = $scope.breadcrumbConfig; - if (foundTab && breadcrumbConfig) { - breadcrumbConfig.push(foundTab); - $scope.subTabConfig = [ - { - label: newSubTabLabel - } - ]; - } - } - Kubernetes.selectSubNavBar = selectSubNavBar; -})(Kubernetes || (Kubernetes = {})); - -/// -var Kubernetes; -(function (Kubernetes) { - Kubernetes.schema = { - "id": "http://fabric8.io/fabric8/v2/Schema#", - "$schema": "http://json-schema.org/schema#", - "definitions": { - "api_RootPaths": { + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeSource" + }, + "kubernetes_PersistentVolumeSpec": { "type": "object", "description": "", "properties": { - "paths": { + "accessModes": { "type": "array", - "description": "", + "description": "all ways the volume can be mounted; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#access-modes", "items": { "type": "string", - "description": "" + "description": "all ways the volume can be mounted; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#access-modes" } + }, + "awsElasticBlockStore": { + "$ref": "#/definitions/kubernetes_AWSElasticBlockStoreVolumeSource", + "javaType": "io.fabric8.kubernetes.api.model.AWSElasticBlockStoreVolumeSource" + }, + "capacity": { + "type": "object", + "description": "a description of the persistent volume's resources and capacityr; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#capacity", + "additionalProperties": { + "$ref": "#/definitions/kubernetes_resource_Quantity", + "javaType": "io.fabric8.kubernetes.api.model.Quantity" + }, + "javaType": "java.util.Map\u003cString,io.fabric8.kubernetes.api.model.Quantity\u003e" + }, + "cephfs": { + "$ref": "#/definitions/kubernetes_CephFSVolumeSource", + "javaType": "io.fabric8.kubernetes.api.model.CephFSVolumeSource" + }, + "claimRef": { + "$ref": "#/definitions/kubernetes_ObjectReference", + "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" + }, + "gcePersistentDisk": { + "$ref": "#/definitions/kubernetes_GCEPersistentDiskVolumeSource", + "javaType": "io.fabric8.kubernetes.api.model.GCEPersistentDiskVolumeSource" + }, + "glusterfs": { + "$ref": "#/definitions/kubernetes_GlusterfsVolumeSource", + "javaType": "io.fabric8.kubernetes.api.model.GlusterfsVolumeSource" + }, + "hostPath": { + "$ref": "#/definitions/kubernetes_HostPathVolumeSource", + "javaType": "io.fabric8.kubernetes.api.model.HostPathVolumeSource" + }, + "iscsi": { + "$ref": "#/definitions/kubernetes_ISCSIVolumeSource", + "javaType": "io.fabric8.kubernetes.api.model.ISCSIVolumeSource" + }, + "nfs": { + "$ref": "#/definitions/kubernetes_NFSVolumeSource", + "javaType": "io.fabric8.kubernetes.api.model.NFSVolumeSource" + }, + "persistentVolumeReclaimPolicy": { + "type": "string", + "description": "what happens to a volume when released from its claim; Valid options are Retain (default) and Recycle. Recyling must be supported by the volume plugin underlying this persistent volume. See http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#recycling-policy" + }, + "rbd": { + "$ref": "#/definitions/kubernetes_RBDVolumeSource", + "javaType": "io.fabric8.kubernetes.api.model.RBDVolumeSource" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.RootPaths" + "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeSpec" }, - "kubernetes_AWSElasticBlockStoreVolumeSource": { + "kubernetes_PersistentVolumeStatus": { "type": "object", "description": "", "properties": { - "fsType": { + "message": { "type": "string", - "description": "file system type to mount" - }, - "partition": { - "type": "integer", - "description": "partition on the disk to mount (e.g." + "description": "human-readable message indicating details about why the volume is in this state" }, - "readOnly": { - "type": "boolean", - "description": "read-only if true" + "phase": { + "type": "string", + "description": "the current phase of a persistent volume; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#phase" }, - "volumeID": { + "reason": { "type": "string", - "description": "unique id of the PD resource in AWS; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#awselasticblockstore" + "description": "(brief) reason the volume is not is not available" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.AWSElasticBlockStoreVolumeSource" + "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeStatus" }, - "kubernetes_Capabilities": { + "kubernetes_Pod": { "type": "object", "description": "", "properties": { - "add": { - "type": "array", - "description": "added capabilities", - "items": { - "type": "string", - "description": "added capabilities" - } - }, - "drop": { - "type": "array", - "description": "droped capabilities", - "items": { - "type": "string", - "description": "droped capabilities" - } + "apiVersion": { + "type": "string", + "description": "", + "default": "v1", + "required": true, + "enum": [ + "v1" + ] + }, + "kind": { + "type": "string", + "description": "", + "default": "Pod", + "required": true + }, + "metadata": { + "$ref": "#/definitions/kubernetes_ObjectMeta", + "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/kubernetes_PodSpec", + "javaType": "io.fabric8.kubernetes.api.model.PodSpec" + }, + "status": { + "$ref": "#/definitions/kubernetes_PodStatus", + "javaType": "io.fabric8.kubernetes.api.model.PodStatus" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.Capabilities" + "javaType": "io.fabric8.kubernetes.api.model.Pod", + "javaInterfaces": [ + "io.fabric8.kubernetes.api.model.HasMetadata" + ] }, - "kubernetes_CephFSVolumeSource": { + "kubernetes_PodCondition": { "type": "object", "description": "", "properties": { - "monitors": { - "type": "array", - "description": "a collection of Ceph monitors", - "items": { - "type": "string", - "description": "a collection of Ceph monitors" - } - }, - "readOnly": { - "type": "boolean", - "description": "Ceph fs to be mounted with read-only permissions" - }, - "secretFile": { + "status": { "type": "string", - "description": "path to secret for rados user; default is /etc/ceph/user.secret; optional" - }, - "secretRef": { - "$ref": "#/definitions/kubernetes_LocalObjectReference", - "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" + "description": "status of the condition" }, - "user": { + "type": { "type": "string", - "description": "rados user name; default is admin; optional" + "description": "kind of the condition" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.CephFSVolumeSource" + "javaType": "io.fabric8.kubernetes.api.model.PodCondition" }, - "kubernetes_Container": { + "kubernetes_PodList": { "type": "object", "description": "", "properties": { - "args": { - "type": "array", - "description": "command array; the docker image's cmd is used if this is not provided; arguments to the entrypoint; cannot be updated; variable references $(VAR_NAME) are expanded using the container's environment variables; if a variable cannot be resolved", - "items": { - "type": "string", - "description": "command array; the docker image's cmd is used if this is not provided; arguments to the entrypoint; cannot be updated; variable references $(VAR_NAME) are expanded using the container's environment variables; if a variable cannot be resolved" - } + "apiVersion": { + "type": "string", + "description": "", + "default": "v1", + "required": true, + "enum": [ + "v1" + ] }, - "command": { + "items": { "type": "array", - "description": "entrypoint array; not executed within a shell; the docker image's entrypoint is used if this is not provided; cannot be updated; variable references $(VAR_NAME) are expanded using the container's environment variables; if a variable cannot be resolved", + "description": "list of pods; see http://releases.k8s.io/HEAD/docs/user-guide/pods.md", "items": { - "type": "string", - "description": "entrypoint array; not executed within a shell; the docker image's entrypoint is used if this is not provided; cannot be updated; variable references $(VAR_NAME) are expanded using the container's environment variables; if a variable cannot be resolved" + "$ref": "#/definitions/kubernetes_Pod", + "javaType": "io.fabric8.kubernetes.api.model.Pod" } }, - "env": { + "kind": { + "type": "string", + "description": "", + "default": "PodList", + "required": true + }, + "metadata": { + "$ref": "#/definitions/kubernetes_ListMeta", + "javaType": "io.fabric8.kubernetes.api.model.ListMeta" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.PodList", + "javaInterfaces": [ + "io.fabric8.kubernetes.api.model.KubernetesResource", + "io.fabric8.kubernetes.api.model.KubernetesResourceList" + ] + }, + "kubernetes_PodSpec": { + "type": "object", + "description": "", + "properties": { + "activeDeadlineSeconds": { + "type": "integer", + "description": "", + "javaType": "Long" + }, + "containers": { "type": "array", - "description": "list of environment variables to set in the container; cannot be updated", + "description": "list of containers belonging to the pod; cannot be updated; containers cannot currently be added or removed; there must be at least one container in a Pod; see http://releases.k8s.io/HEAD/docs/user-guide/containers.md", "items": { - "$ref": "#/definitions/kubernetes_EnvVar", - "javaType": "io.fabric8.kubernetes.api.model.EnvVar" + "$ref": "#/definitions/kubernetes_Container", + "javaType": "io.fabric8.kubernetes.api.model.Container" } }, - "image": { + "dnsPolicy": { "type": "string", - "description": "Docker image name; see http://releases.k8s.io/HEAD/docs/user-guide/images.md" + "description": "DNS policy for containers within the pod; one of 'ClusterFirst' or 'Default'" }, - "imagePullPolicy": { + "host": { "type": "string", - "description": "image pull policy; one of Always" - }, - "lifecycle": { - "$ref": "#/definitions/kubernetes_Lifecycle", - "javaType": "io.fabric8.kubernetes.api.model.Lifecycle" - }, - "livenessProbe": { - "$ref": "#/definitions/kubernetes_Probe", - "javaType": "io.fabric8.kubernetes.api.model.Probe" + "description": "deprecated" }, - "name": { - "type": "string", - "description": "name of the container; must be a DNS_LABEL and unique within the pod; cannot be updated", - "maxLength": 63, - "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?$" + "hostNetwork": { + "type": "boolean", + "description": "host networking requested for this pod" }, - "ports": { + "imagePullSecrets": { "type": "array", - "description": "list of ports to expose from the container; cannot be updated", + "description": "list of references to secrets in the same namespace available for pulling the container images; see http://releases.k8s.io/HEAD/docs/user-guide/images.md#specifying-imagepullsecrets-on-a-pod", "items": { - "$ref": "#/definitions/kubernetes_ContainerPort", - "javaType": "io.fabric8.kubernetes.api.model.ContainerPort" + "$ref": "#/definitions/kubernetes_LocalObjectReference", + "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" } }, - "readinessProbe": { - "$ref": "#/definitions/kubernetes_Probe", - "javaType": "io.fabric8.kubernetes.api.model.Probe" + "nodeName": { + "type": "string", + "description": "node requested for this pod" }, - "resources": { - "$ref": "#/definitions/kubernetes_ResourceRequirements", - "javaType": "io.fabric8.kubernetes.api.model.ResourceRequirements" + "nodeSelector": { + "type": "object", + "description": "selector which must match a node's labels for the pod to be scheduled on that node; see http://releases.k8s.io/HEAD/docs/user-guide/node-selection/README.md", + "additionalProperties": { + "type": "string", + "description": "selector which must match a node's labels for the pod to be scheduled on that node; see http://releases.k8s.io/HEAD/docs/user-guide/node-selection/README.md" + }, + "javaType": "java.util.Map\u003cString,String\u003e" }, - "securityContext": { - "$ref": "#/definitions/kubernetes_SecurityContext", - "javaType": "io.fabric8.kubernetes.api.model.SecurityContext" + "restartPolicy": { + "type": "string", + "description": "restart policy for all containers within the pod; one of Always" }, - "stdin": { - "type": "boolean", - "description": "Whether this container should allocate a buffer for stdin in the container runtime; default is false" + "serviceAccount": { + "type": "string", + "description": "deprecated; use serviceAccountName instead" }, - "terminationMessagePath": { + "serviceAccountName": { "type": "string", - "description": "path at which the file to which the container's termination message will be written is mounted into the container's filesystem; message written is intended to be brief final status" + "description": "name of the ServiceAccount to use to run this pod; see http://releases.k8s.io/HEAD/docs/design/service_accounts.md" }, - "tty": { - "type": "boolean", - "description": "Whether this container should allocate a TTY for itself" + "terminationGracePeriodSeconds": { + "type": "integer", + "description": "optional duration in seconds the pod needs to terminate gracefully; may be decreased in delete request; value must be non-negative integer; the value zero indicates delete immediately; if this value is not set", + "javaType": "Long" }, - "volumeMounts": { + "volumes": { "type": "array", - "description": "pod volumes to mount into the container's filesyste; cannot be updated", + "description": "list of volumes that can be mounted by containers belonging to the pod; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md", "items": { - "$ref": "#/definitions/kubernetes_VolumeMount", - "javaType": "io.fabric8.kubernetes.api.model.VolumeMount" + "$ref": "#/definitions/kubernetes_Volume", + "javaType": "io.fabric8.kubernetes.api.model.Volume" } - }, - "workingDir": { - "type": "string", - "description": "container's working directory; defaults to image's default; cannot be updated" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.Container" + "javaType": "io.fabric8.kubernetes.api.model.PodSpec" }, - "kubernetes_ContainerPort": { + "kubernetes_PodStatus": { "type": "object", "description": "", "properties": { - "containerPort": { - "type": "integer", - "description": "number of port to expose on the pod's IP address" + "conditions": { + "type": "array", + "description": "current service state of pod; see http://releases.k8s.io/HEAD/docs/user-guide/pod-states.md#pod-conditions", + "items": { + "$ref": "#/definitions/kubernetes_PodCondition", + "javaType": "io.fabric8.kubernetes.api.model.PodCondition" + } + }, + "containerStatuses": { + "type": "array", + "description": "list of container statuses; see http://releases.k8s.io/HEAD/docs/user-guide/pod-states.md#container-statuses", + "items": { + "$ref": "#/definitions/kubernetes_ContainerStatus", + "javaType": "io.fabric8.kubernetes.api.model.ContainerStatus" + } }, "hostIP": { "type": "string", - "description": "host IP to bind the port to" + "description": "IP address of the host to which the pod is assigned; empty if not yet scheduled" }, - "hostPort": { - "type": "integer", - "description": "number of port to expose on the host; most containers do not need this" + "message": { + "type": "string", + "description": "human readable message indicating details about why the pod is in this condition" }, - "name": { + "phase": { "type": "string", - "description": "name for the port that can be referred to by services; must be an IANA_SVC_NAME and unique within the pod" + "description": "current condition of the pod; see http://releases.k8s.io/HEAD/docs/user-guide/pod-states.md#pod-phase" }, - "protocol": { + "podIP": { "type": "string", - "description": "protocol for port; must be UDP or TCP; TCP if unspecified" + "description": "IP address allocated to the pod; routable at least within the cluster; empty if not yet allocated" + }, + "reason": { + "type": "string", + "description": "(brief-CamelCase) reason indicating details about why the pod is in this condition" + }, + "startTime": { + "type": "string", + "description": "RFC 3339 date and time at which the object was acknowledged by the Kubelet. This is before the Kubelet pulled the container image(s) for the pod." } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.ContainerPort" + "javaType": "io.fabric8.kubernetes.api.model.PodStatus" }, - "kubernetes_ContainerState": { + "kubernetes_PodTemplateSpec": { "type": "object", "description": "", "properties": { - "running": { - "$ref": "#/definitions/kubernetes_ContainerStateRunning", - "javaType": "io.fabric8.kubernetes.api.model.ContainerStateRunning" - }, - "terminated": { - "$ref": "#/definitions/kubernetes_ContainerStateTerminated", - "javaType": "io.fabric8.kubernetes.api.model.ContainerStateTerminated" + "metadata": { + "$ref": "#/definitions/kubernetes_ObjectMeta", + "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, - "waiting": { - "$ref": "#/definitions/kubernetes_ContainerStateWaiting", - "javaType": "io.fabric8.kubernetes.api.model.ContainerStateWaiting" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.ContainerState" - }, - "kubernetes_ContainerStateRunning": { - "type": "object", - "description": "", - "properties": { - "startedAt": { - "type": "string", - "description": "time at which the container was last (re-)started" + "spec": { + "$ref": "#/definitions/kubernetes_PodSpec", + "javaType": "io.fabric8.kubernetes.api.model.PodSpec" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.ContainerStateRunning" + "javaType": "io.fabric8.kubernetes.api.model.PodTemplateSpec" }, - "kubernetes_ContainerStateTerminated": { + "kubernetes_Probe": { "type": "object", "description": "", "properties": { - "containerID": { - "type": "string", - "description": "container's ID in the format 'docker://\u003ccontainer_id\u003e'" - }, - "exitCode": { - "type": "integer", - "description": "exit status from the last termination of the container" + "exec": { + "$ref": "#/definitions/kubernetes_ExecAction", + "javaType": "io.fabric8.kubernetes.api.model.ExecAction" }, - "finishedAt": { - "type": "string", - "description": "time at which the container last terminated" + "httpGet": { + "$ref": "#/definitions/kubernetes_HTTPGetAction", + "javaType": "io.fabric8.kubernetes.api.model.HTTPGetAction" }, - "message": { - "type": "string", - "description": "message regarding the last termination of the container" + "initialDelaySeconds": { + "type": "integer", + "description": "number of seconds after the container has started before liveness probes are initiated; see http://releases.k8s.io/HEAD/docs/user-guide/pod-states.md#container-probes", + "javaType": "Long" }, - "reason": { - "type": "string", - "description": "(brief) reason from the last termination of the container" + "tcpSocket": { + "$ref": "#/definitions/kubernetes_TCPSocketAction", + "javaType": "io.fabric8.kubernetes.api.model.TCPSocketAction" }, - "signal": { + "timeoutSeconds": { "type": "integer", - "description": "signal from the last termination of the container" - }, - "startedAt": { - "type": "string", - "description": "time at which previous execution of the container started" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.ContainerStateTerminated" - }, - "kubernetes_ContainerStateWaiting": { - "type": "object", - "description": "", - "properties": { - "reason": { - "type": "string", - "description": "(brief) reason the container is not yet running" + "description": "number of seconds after which liveness probes timeout; defaults to 1 second; see http://releases.k8s.io/HEAD/docs/user-guide/pod-states.md#container-probes", + "javaType": "Long" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.ContainerStateWaiting" + "javaType": "io.fabric8.kubernetes.api.model.Probe" }, - "kubernetes_ContainerStatus": { + "kubernetes_RBDVolumeSource": { "type": "object", "description": "", "properties": { - "containerID": { + "fsType": { "type": "string", - "description": "container's ID in the format 'docker://\u003ccontainer_id\u003e'; see http://releases.k8s.io/HEAD/docs/user-guide/container-environment.md#container-information" + "description": "file system type to mount" }, "image": { "type": "string", - "description": "image of the container; see http://releases.k8s.io/HEAD/docs/user-guide/images.md" + "description": "rados image name; see http://releases.k8s.io/HEAD/examples/rbd/README.md#how-to-use-it" }, - "imageID": { + "keyring": { "type": "string", - "description": "ID of the container's image" + "description": "keyring is the path to key ring for rados user; default is /etc/ceph/keyring; optional; see http://releases.k8s.io/HEAD/examples/rbd/README.md#how-to-use-it" }, - "lastState": { - "$ref": "#/definitions/kubernetes_ContainerState", - "javaType": "io.fabric8.kubernetes.api.model.ContainerState" + "monitors": { + "type": "array", + "description": "a collection of Ceph monitors; see http://releases.k8s.io/HEAD/examples/rbd/README.md#how-to-use-it", + "items": { + "type": "string", + "description": "a collection of Ceph monitors; see http://releases.k8s.io/HEAD/examples/rbd/README.md#how-to-use-it" + } }, - "name": { + "pool": { "type": "string", - "description": "name of the container; must be a DNS_LABEL and unique within the pod; cannot be updated", - "maxLength": 63, - "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?$" + "description": "rados pool name; default is rbd; optional; see http://releases.k8s.io/HEAD/examples/rbd/README.md#how-to-use-it" }, - "ready": { + "readOnly": { "type": "boolean", - "description": "specifies whether the container has passed its readiness probe" - }, - "restartCount": { - "type": "integer", - "description": "the number of times the container has been restarted" - }, - "state": { - "$ref": "#/definitions/kubernetes_ContainerState", - "javaType": "io.fabric8.kubernetes.api.model.ContainerState" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.ContainerStatus" - }, - "kubernetes_EmptyDirVolumeSource": { - "type": "object", - "description": "", - "properties": { - "medium": { - "type": "string", - "description": "type of storage used to back the volume; must be an empty string (default) or Memory; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#emptydir" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.EmptyDirVolumeSource" - }, - "kubernetes_EndpointAddress": { - "type": "object", - "description": "", - "properties": { - "ip": { - "type": "string", - "description": "IP address of the endpoint" - }, - "targetRef": { - "$ref": "#/definitions/kubernetes_ObjectReference", - "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.EndpointAddress" - }, - "kubernetes_EndpointPort": { - "type": "object", - "description": "", - "properties": { - "name": { - "type": "string", - "description": "name of this port", - "maxLength": 63, - "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?$" + "description": "rbd volume to be mounted with read-only permissions; see http://releases.k8s.io/HEAD/examples/rbd/README.md#how-to-use-it" }, - "port": { - "type": "integer", - "description": "port number of the endpoint" + "secretRef": { + "$ref": "#/definitions/kubernetes_LocalObjectReference", + "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" }, - "protocol": { + "user": { "type": "string", - "description": "protocol for this port; must be UDP or TCP; TCP if unspecified" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.EndpointPort" - }, - "kubernetes_EndpointSubset": { - "type": "object", - "description": "", - "properties": { - "addresses": { - "type": "array", - "description": "IP addresses which offer the related ports", - "items": { - "$ref": "#/definitions/kubernetes_EndpointAddress", - "javaType": "io.fabric8.kubernetes.api.model.EndpointAddress" - } - }, - "ports": { - "type": "array", - "description": "port numbers available on the related IP addresses", - "items": { - "$ref": "#/definitions/kubernetes_EndpointPort", - "javaType": "io.fabric8.kubernetes.api.model.EndpointPort" - } + "description": "rados user name; default is admin; optional; see http://releases.k8s.io/HEAD/examples/rbd/README.md#how-to-use-it" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.EndpointSubset" + "javaType": "io.fabric8.kubernetes.api.model.RBDVolumeSource" }, - "kubernetes_Endpoints": { + "kubernetes_ReplicationController": { "type": "object", "description": "", "properties": { @@ -8233,29 +7121,29 @@ var Kubernetes; "kind": { "type": "string", "description": "", - "default": "Endpoints", + "default": "ReplicationController", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, - "subsets": { - "type": "array", - "description": "sets of addresses and ports that comprise a service", - "items": { - "$ref": "#/definitions/kubernetes_EndpointSubset", - "javaType": "io.fabric8.kubernetes.api.model.EndpointSubset" - } + "spec": { + "$ref": "#/definitions/kubernetes_ReplicationControllerSpec", + "javaType": "io.fabric8.kubernetes.api.model.ReplicationControllerSpec" + }, + "status": { + "$ref": "#/definitions/kubernetes_ReplicationControllerStatus", + "javaType": "io.fabric8.kubernetes.api.model.ReplicationControllerStatus" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.Endpoints", + "javaType": "io.fabric8.kubernetes.api.model.ReplicationController", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, - "kubernetes_EndpointsList": { + "kubernetes_ReplicationControllerList": { "type": "object", "description": "", "properties": { @@ -8270,16 +7158,16 @@ var Kubernetes; }, "items": { "type": "array", - "description": "list of endpoints", + "description": "list of replication controllers; see http://releases.k8s.io/HEAD/docs/user-guide/replication-controller.md", "items": { - "$ref": "#/definitions/kubernetes_Endpoints", - "javaType": "io.fabric8.kubernetes.api.model.Endpoints" + "$ref": "#/definitions/kubernetes_ReplicationController", + "javaType": "io.fabric8.kubernetes.api.model.ReplicationController" } }, "kind": { "type": "string", "description": "", - "default": "EndpointsList", + "default": "ReplicationControllerList", "required": true }, "metadata": { @@ -8288,46 +7176,55 @@ var Kubernetes; } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.EndpointsList", + "javaType": "io.fabric8.kubernetes.api.model.ReplicationControllerList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, - "kubernetes_EnvVar": { + "kubernetes_ReplicationControllerSpec": { "type": "object", "description": "", "properties": { - "name": { - "type": "string", - "description": "name of the environment variable; must be a C_IDENTIFIER", - "pattern": "^[A-Za-z_][A-Za-z0-9_]*$" + "replicas": { + "type": "integer", + "description": "number of replicas desired; defaults to 1; see http://releases.k8s.io/HEAD/docs/user-guide/replication-controller.md#what-is-a-replication-controller" }, - "value": { - "type": "string", - "description": "value of the environment variable; defaults to empty string; variable references $(VAR_NAME) are expanded using the previously defined environment varibles in the container and any service environment variables; if a variable cannot be resolved" + "selector": { + "type": "object", + "description": "label keys and values that must match in order to be controlled by this replication controller", + "additionalProperties": { + "type": "string", + "description": "label keys and values that must match in order to be controlled by this replication controller" + }, + "javaType": "java.util.Map\u003cString,String\u003e" }, - "valueFrom": { - "$ref": "#/definitions/kubernetes_EnvVarSource", - "javaType": "io.fabric8.kubernetes.api.model.EnvVarSource" + "template": { + "$ref": "#/definitions/kubernetes_PodTemplateSpec", + "javaType": "io.fabric8.kubernetes.api.model.PodTemplateSpec" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.EnvVar" + "javaType": "io.fabric8.kubernetes.api.model.ReplicationControllerSpec" }, - "kubernetes_EnvVarSource": { + "kubernetes_ReplicationControllerStatus": { "type": "object", "description": "", "properties": { - "fieldRef": { - "$ref": "#/definitions/kubernetes_ObjectFieldSelector", - "javaType": "io.fabric8.kubernetes.api.model.ObjectFieldSelector" + "observedGeneration": { + "type": "integer", + "description": "reflects the generation of the most recently observed replication controller", + "javaType": "Long" + }, + "replicas": { + "type": "integer", + "description": "most recently oberved number of replicas; see http://releases.k8s.io/HEAD/docs/user-guide/replication-controller.md#what-is-a-replication-controller" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.EnvVarSource" + "javaType": "io.fabric8.kubernetes.api.model.ReplicationControllerStatus" }, - "kubernetes_Event": { + "kubernetes_ResourceQuota": { "type": "object", "description": "", "properties": { @@ -8340,52 +7237,32 @@ var Kubernetes; "v1" ] }, - "count": { - "type": "integer", - "description": "the number of times this event has occurred" - }, - "firstTimestamp": { - "type": "string", - "description": "the time at which the event was first recorded" - }, - "involvedObject": { - "$ref": "#/definitions/kubernetes_ObjectReference", - "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" - }, "kind": { "type": "string", "description": "", - "default": "Event", + "default": "ResourceQuota", "required": true }, - "lastTimestamp": { - "type": "string", - "description": "the time at which the most recent occurrence of this event was recorded" - }, - "message": { - "type": "string", - "description": "human-readable description of the status of this operation" - }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, - "reason": { - "type": "string", - "description": "short" + "spec": { + "$ref": "#/definitions/kubernetes_ResourceQuotaSpec", + "javaType": "io.fabric8.kubernetes.api.model.ResourceQuotaSpec" }, - "source": { - "$ref": "#/definitions/kubernetes_EventSource", - "javaType": "io.fabric8.kubernetes.api.model.EventSource" + "status": { + "$ref": "#/definitions/kubernetes_ResourceQuotaStatus", + "javaType": "io.fabric8.kubernetes.api.model.ResourceQuotaStatus" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.Event", + "javaType": "io.fabric8.kubernetes.api.model.ResourceQuota", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, - "kubernetes_EventList": { + "kubernetes_ResourceQuotaList": { "type": "object", "description": "", "properties": { @@ -8400,16 +7277,16 @@ var Kubernetes; }, "items": { "type": "array", - "description": "list of events", + "description": "items is a list of ResourceQuota objects; see http://releases.k8s.io/HEAD/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota", "items": { - "$ref": "#/definitions/kubernetes_Event", - "javaType": "io.fabric8.kubernetes.api.model.Event" + "$ref": "#/definitions/kubernetes_ResourceQuota", + "javaType": "io.fabric8.kubernetes.api.model.ResourceQuota" } }, "kind": { "type": "string", "description": "", - "default": "EventList", + "default": "ResourceQuotaList", "required": true }, "metadata": { @@ -8418,205 +7295,192 @@ var Kubernetes; } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.EventList", + "javaType": "io.fabric8.kubernetes.api.model.ResourceQuotaList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, - "kubernetes_EventSource": { + "kubernetes_ResourceQuotaSpec": { "type": "object", "description": "", "properties": { - "component": { - "type": "string", - "description": "component that generated the event" + "hard": { + "type": "object", + "description": "hard is the set of desired hard limits for each named resource; see http://releases.k8s.io/HEAD/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota", + "additionalProperties": { + "$ref": "#/definitions/kubernetes_resource_Quantity", + "javaType": "io.fabric8.kubernetes.api.model.Quantity" + }, + "javaType": "java.util.Map\u003cString,io.fabric8.kubernetes.api.model.Quantity\u003e" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.ResourceQuotaSpec" + }, + "kubernetes_ResourceQuotaStatus": { + "type": "object", + "description": "", + "properties": { + "hard": { + "type": "object", + "description": "hard is the set of enforced hard limits for each named resource; see http://releases.k8s.io/HEAD/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota", + "additionalProperties": { + "$ref": "#/definitions/kubernetes_resource_Quantity", + "javaType": "io.fabric8.kubernetes.api.model.Quantity" + }, + "javaType": "java.util.Map\u003cString,io.fabric8.kubernetes.api.model.Quantity\u003e" }, - "host": { - "type": "string", - "description": "name of the host where the event is generated" + "used": { + "type": "object", + "description": "used is the current observed total usage of the resource in the namespace", + "additionalProperties": { + "$ref": "#/definitions/kubernetes_resource_Quantity", + "javaType": "io.fabric8.kubernetes.api.model.Quantity" + }, + "javaType": "java.util.Map\u003cString,io.fabric8.kubernetes.api.model.Quantity\u003e" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.EventSource" + "javaType": "io.fabric8.kubernetes.api.model.ResourceQuotaStatus" }, - "kubernetes_ExecAction": { + "kubernetes_ResourceRequirements": { "type": "object", "description": "", "properties": { - "command": { - "type": "array", - "description": "command line to execute inside the container; working directory for the command is root ('/') in the container's file system; the command is exec'd", - "items": { - "type": "string", - "description": "command line to execute inside the container; working directory for the command is root ('/') in the container's file system; the command is exec'd" - } + "limits": { + "type": "object", + "description": "Maximum amount of compute resources allowed; see http://releases.k8s.io/HEAD/docs/design/resources.md#resource-specifications", + "additionalProperties": { + "$ref": "#/definitions/kubernetes_resource_Quantity", + "javaType": "io.fabric8.kubernetes.api.model.Quantity" + }, + "javaType": "java.util.Map\u003cString,io.fabric8.kubernetes.api.model.Quantity\u003e" + }, + "requests": { + "type": "object", + "description": "Minimum amount of resources requested; if Requests is omitted for a container", + "additionalProperties": { + "$ref": "#/definitions/kubernetes_resource_Quantity", + "javaType": "io.fabric8.kubernetes.api.model.Quantity" + }, + "javaType": "java.util.Map\u003cString,io.fabric8.kubernetes.api.model.Quantity\u003e" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.ExecAction" + "javaType": "io.fabric8.kubernetes.api.model.ResourceRequirements" }, - "kubernetes_GCEPersistentDiskVolumeSource": { + "kubernetes_RunAsUserStrategyOptions": { "type": "object", "description": "", "properties": { - "fsType": { + "type": { "type": "string", - "description": "file system type to mount" + "description": "strategy used to generate RunAsUser" }, - "partition": { + "uid": { "type": "integer", - "description": "partition on the disk to mount (e.g." + "description": "the uid to always run as; required for MustRunAs", + "javaType": "Long" }, - "pdName": { - "type": "string", - "description": "unique name of the PD resource in GCE; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#gcepersistentdisk" + "uidRangeMax": { + "type": "integer", + "description": "max value for range based allocators", + "javaType": "Long" }, - "readOnly": { - "type": "boolean", - "description": "read-only if true" + "uidRangeMin": { + "type": "integer", + "description": "min value for range based allocators", + "javaType": "Long" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.GCEPersistentDiskVolumeSource" + "javaType": "io.fabric8.kubernetes.api.model.RunAsUserStrategyOptions" }, - "kubernetes_GitRepoVolumeSource": { + "kubernetes_SELinuxContextStrategyOptions": { "type": "object", "description": "", "properties": { - "repository": { - "type": "string", - "description": "repository URL" + "seLinuxOptions": { + "$ref": "#/definitions/kubernetes_SELinuxOptions", + "javaType": "io.fabric8.kubernetes.api.model.SELinuxOptions" }, - "revision": { + "type": { "type": "string", - "description": "commit hash for the specified revision" + "description": "strategy used to generate the SELinux context" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.GitRepoVolumeSource" + "javaType": "io.fabric8.kubernetes.api.model.SELinuxContextStrategyOptions" }, - "kubernetes_GlusterfsVolumeSource": { + "kubernetes_SELinuxOptions": { "type": "object", "description": "", "properties": { - "endpoints": { + "level": { "type": "string", - "description": "gluster hosts endpoints name; see http://releases.k8s.io/HEAD/examples/glusterfs/README.md#create-a-pod" + "description": "the level label to apply to the container; see http://releases.k8s.io/HEAD/docs/user-guide/labels.md" }, - "path": { + "role": { "type": "string", - "description": "path to gluster volume; see http://releases.k8s.io/HEAD/examples/glusterfs/README.md#create-a-pod" + "description": "the role label to apply to the container; see http://releases.k8s.io/HEAD/docs/user-guide/labels.md" }, - "readOnly": { - "type": "boolean", - "description": "glusterfs volume to be mounted with read-only permissions; see http://releases.k8s.io/HEAD/examples/glusterfs/README.md#create-a-pod" + "type": { + "type": "string", + "description": "the type label to apply to the container; see http://releases.k8s.io/HEAD/docs/user-guide/labels.md" + }, + "user": { + "type": "string", + "description": "the user label to apply to the container; see http://releases.k8s.io/HEAD/docs/user-guide/labels.md" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.GlusterfsVolumeSource" + "javaType": "io.fabric8.kubernetes.api.model.SELinuxOptions" }, - "kubernetes_HTTPGetAction": { + "kubernetes_Secret": { "type": "object", "description": "", "properties": { - "host": { + "apiVersion": { "type": "string", - "description": "hostname to connect to; defaults to pod IP" + "description": "", + "default": "v1", + "required": true, + "enum": [ + "v1" + ] }, - "path": { + "data": { + "type": "object", + "description": "data contains the secret data. Each key must be a valid DNS_SUBDOMAIN or leading dot followed by valid DNS_SUBDOMAIN. Each value must be a base64 encoded string as described in https://tools.ietf.org/html/rfc4648#section-4", + "additionalProperties": { + "type": "string", + "description": "data contains the secret data. Each key must be a valid DNS_SUBDOMAIN or leading dot followed by valid DNS_SUBDOMAIN. Each value must be a base64 encoded string as described in https://tools.ietf.org/html/rfc4648#section-4" + }, + "javaType": "java.util.Map\u003cString,String\u003e" + }, + "kind": { "type": "string", - "description": "path to access on the HTTP server" + "description": "", + "default": "Secret", + "required": true }, - "port": { - "$ref": "#/definitions/kubernetes_util_IntOrString", - "javaType": "io.fabric8.kubernetes.api.model.IntOrString" + "metadata": { + "$ref": "#/definitions/kubernetes_ObjectMeta", + "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, - "scheme": { + "type": { "type": "string", - "description": "scheme to connect with" + "description": "type facilitates programmatic handling of secret data" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.HTTPGetAction" + "javaType": "io.fabric8.kubernetes.api.model.Secret", + "javaInterfaces": [ + "io.fabric8.kubernetes.api.model.HasMetadata" + ] }, - "kubernetes_Handler": { - "type": "object", - "description": "", - "properties": { - "exec": { - "$ref": "#/definitions/kubernetes_ExecAction", - "javaType": "io.fabric8.kubernetes.api.model.ExecAction" - }, - "httpGet": { - "$ref": "#/definitions/kubernetes_HTTPGetAction", - "javaType": "io.fabric8.kubernetes.api.model.HTTPGetAction" - }, - "tcpSocket": { - "$ref": "#/definitions/kubernetes_TCPSocketAction", - "javaType": "io.fabric8.kubernetes.api.model.TCPSocketAction" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.Handler" - }, - "kubernetes_HostPathVolumeSource": { - "type": "object", - "description": "", - "properties": { - "path": { - "type": "string", - "description": "path of the directory on the host; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#hostpath" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.HostPathVolumeSource" - }, - "kubernetes_ISCSIVolumeSource": { - "type": "object", - "description": "", - "properties": { - "fsType": { - "type": "string", - "description": "file system type to mount" - }, - "iqn": { - "type": "string", - "description": "iSCSI Qualified Name" - }, - "lun": { - "type": "integer", - "description": "iscsi target lun number" - }, - "readOnly": { - "type": "boolean", - "description": "read-only if true" - }, - "targetPortal": { - "type": "string", - "description": "iSCSI target portal" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.ISCSIVolumeSource" - }, - "kubernetes_Lifecycle": { - "type": "object", - "description": "", - "properties": { - "postStart": { - "$ref": "#/definitions/kubernetes_Handler", - "javaType": "io.fabric8.kubernetes.api.model.Handler" - }, - "preStop": { - "$ref": "#/definitions/kubernetes_Handler", - "javaType": "io.fabric8.kubernetes.api.model.Handler" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.Lifecycle" - }, - "kubernetes_List": { + "kubernetes_SecretList": { "type": "object", "description": "", "properties": { @@ -8631,16 +7495,16 @@ var Kubernetes; }, "items": { "type": "array", - "description": "list of objects", + "description": "items is a list of secret objects; see http://releases.k8s.io/HEAD/docs/user-guide/secrets.md", "items": { - "$ref": "#/definitions/kubernetes_runtime_RawExtension", - "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" + "$ref": "#/definitions/kubernetes_Secret", + "javaType": "io.fabric8.kubernetes.api.model.Secret" } }, "kind": { "type": "string", "description": "", - "default": "List", + "default": "SecretList", "required": true }, "metadata": { @@ -8649,128 +7513,81 @@ var Kubernetes; } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.BaseKubernetesList", + "javaType": "io.fabric8.kubernetes.api.model.SecretList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, - "kubernetes_ListMeta": { + "kubernetes_SecretVolumeSource": { "type": "object", "description": "", "properties": { - "resourceVersion": { - "type": "string", - "description": "string that identifies the internal version of this object that can be used by clients to determine when objects have changed; populated by the system" - }, - "selfLink": { + "secretName": { "type": "string", - "description": "URL for the object; populated by the system" + "description": "secretName is the name of a secret in the pod's namespace; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#secrets" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.ListMeta" + "javaType": "io.fabric8.kubernetes.api.model.SecretVolumeSource" }, - "kubernetes_LoadBalancerIngress": { + "kubernetes_SecurityContext": { "type": "object", "description": "", "properties": { - "hostname": { - "type": "string", - "description": "hostname of ingress point" + "capabilities": { + "$ref": "#/definitions/kubernetes_Capabilities", + "javaType": "io.fabric8.kubernetes.api.model.Capabilities" }, - "ip": { - "type": "string", - "description": "IP address of ingress point" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.LoadBalancerIngress" - }, - "kubernetes_LoadBalancerStatus": { - "type": "object", - "description": "", - "properties": { - "ingress": { - "type": "array", - "description": "load-balancer ingress points", - "items": { - "$ref": "#/definitions/kubernetes_LoadBalancerIngress", - "javaType": "io.fabric8.kubernetes.api.model.LoadBalancerIngress" - } - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.LoadBalancerStatus" - }, - "kubernetes_LocalObjectReference": { - "type": "object", - "description": "", - "properties": { - "name": { - "type": "string", - "description": "name of the referent; see http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#names" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" - }, - "kubernetes_MetadataFile": { - "type": "object", - "description": "", - "properties": { - "fieldRef": { - "$ref": "#/definitions/kubernetes_ObjectFieldSelector", - "javaType": "io.fabric8.kubernetes.api.model.ObjectFieldSelector" + "privileged": { + "type": "boolean", + "description": "run the container in privileged mode; see http://releases.k8s.io/HEAD/docs/design/security_context.md#security-context" }, - "name": { - "type": "string", - "description": "the name of the file to be created" + "runAsNonRoot": { + "type": "boolean", + "description": "indicates the container must be run as a non-root user either by specifying the runAsUser or in the image specification" + }, + "runAsUser": { + "type": "integer", + "description": "the user id that runs the first process in the container; see http://releases.k8s.io/HEAD/docs/design/security_context.md#security-context", + "javaType": "Long" + }, + "seLinuxOptions": { + "$ref": "#/definitions/kubernetes_SELinuxOptions", + "javaType": "io.fabric8.kubernetes.api.model.SELinuxOptions" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.MetadataFile" + "javaType": "io.fabric8.kubernetes.api.model.SecurityContext" }, - "kubernetes_MetadataVolumeSource": { + "kubernetes_SecurityContextConstraints": { "type": "object", "description": "", "properties": { - "items": { + "allowHostDirVolumePlugin": { + "type": "boolean", + "description": "allow the use of the host dir volume plugin" + }, + "allowHostNetwork": { + "type": "boolean", + "description": "allow the use of the hostNetwork in the pod spec" + }, + "allowHostPorts": { + "type": "boolean", + "description": "allow the use of the host ports in the containers" + }, + "allowPrivilegedContainer": { + "type": "boolean", + "description": "allow containers to run as privileged" + }, + "allowedCapabilities": { "type": "array", - "description": "list of metadata files", + "description": "capabilities that are allowed to be added", "items": { - "$ref": "#/definitions/kubernetes_MetadataFile", - "javaType": "io.fabric8.kubernetes.api.model.MetadataFile" + "type": "string", + "description": "capabilities that are allowed to be added" } - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.MetadataVolumeSource" - }, - "kubernetes_NFSVolumeSource": { - "type": "object", - "description": "", - "properties": { - "path": { - "type": "string", - "description": "the path that is exported by the NFS server; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#nfs" }, - "readOnly": { - "type": "boolean", - "description": "forces the NFS export to be mounted with read-only permissions; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#nfs" - }, - "server": { - "type": "string", - "description": "the hostname or IP address of the NFS server; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#nfs" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.NFSVolumeSource" - }, - "kubernetes_Namespace": { - "type": "object", - "description": "", - "properties": { "apiVersion": { "type": "string", "description": "", @@ -8780,32 +7597,48 @@ var Kubernetes; "v1" ] }, + "groups": { + "type": "array", + "description": "groups allowed to use this SecurityContextConstraints", + "items": { + "type": "string", + "description": "groups allowed to use this SecurityContextConstraints" + } + }, "kind": { "type": "string", "description": "", - "default": "Namespace", + "default": "SecurityContextConstraints", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, - "spec": { - "$ref": "#/definitions/kubernetes_NamespaceSpec", - "javaType": "io.fabric8.kubernetes.api.model.NamespaceSpec" + "runAsUser": { + "$ref": "#/definitions/kubernetes_RunAsUserStrategyOptions", + "javaType": "io.fabric8.kubernetes.api.model.RunAsUserStrategyOptions" }, - "status": { - "$ref": "#/definitions/kubernetes_NamespaceStatus", - "javaType": "io.fabric8.kubernetes.api.model.NamespaceStatus" + "seLinuxContext": { + "$ref": "#/definitions/kubernetes_SELinuxContextStrategyOptions", + "javaType": "io.fabric8.kubernetes.api.model.SELinuxContextStrategyOptions" + }, + "users": { + "type": "array", + "description": "users allowed to use this SecurityContextConstraints", + "items": { + "type": "string", + "description": "users allowed to use this SecurityContextConstraints" + } } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.Namespace", + "javaType": "io.fabric8.kubernetes.api.model.SecurityContextConstraints", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, - "kubernetes_NamespaceList": { + "kubernetes_SecurityContextConstraintsList": { "type": "object", "description": "", "properties": { @@ -8820,16 +7653,16 @@ var Kubernetes; }, "items": { "type": "array", - "description": "items is the list of Namespace objects in the list; see http://releases.k8s.io/HEAD/docs/user-guide/namespaces.md", + "description": "", "items": { - "$ref": "#/definitions/kubernetes_Namespace", - "javaType": "io.fabric8.kubernetes.api.model.Namespace" + "$ref": "#/definitions/kubernetes_SecurityContextConstraints", + "javaType": "io.fabric8.kubernetes.api.model.SecurityContextConstraints" } }, "kind": { "type": "string", "description": "", - "default": "NamespaceList", + "default": "SecurityContextConstraintsList", "required": true }, "metadata": { @@ -8838,41 +7671,13 @@ var Kubernetes; } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.NamespaceList", + "javaType": "io.fabric8.kubernetes.api.model.SecurityContextConstraintsList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, - "kubernetes_NamespaceSpec": { - "type": "object", - "description": "", - "properties": { - "finalizers": { - "type": "array", - "description": "an opaque list of values that must be empty to permanently remove object from storage; see http://releases.k8s.io/HEAD/docs/design/namespaces.md#finalizers", - "items": { - "type": "string", - "description": "an opaque list of values that must be empty to permanently remove object from storage; see http://releases.k8s.io/HEAD/docs/design/namespaces.md#finalizers" - } - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.NamespaceSpec" - }, - "kubernetes_NamespaceStatus": { - "type": "object", - "description": "", - "properties": { - "phase": { - "type": "string", - "description": "phase is the current lifecycle phase of the namespace; see http://releases.k8s.io/HEAD/docs/design/namespaces.md#phases" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.NamespaceStatus" - }, - "kubernetes_Node": { + "kubernetes_Service": { "type": "object", "description": "", "properties": { @@ -8888,7 +7693,7 @@ var Kubernetes; "kind": { "type": "string", "description": "", - "default": "Node", + "default": "Service", "required": true }, "metadata": { @@ -8896,69 +7701,106 @@ var Kubernetes; "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { - "$ref": "#/definitions/kubernetes_NodeSpec", - "javaType": "io.fabric8.kubernetes.api.model.NodeSpec" + "$ref": "#/definitions/kubernetes_ServiceSpec", + "javaType": "io.fabric8.kubernetes.api.model.ServiceSpec" }, "status": { - "$ref": "#/definitions/kubernetes_NodeStatus", - "javaType": "io.fabric8.kubernetes.api.model.NodeStatus" + "$ref": "#/definitions/kubernetes_ServiceStatus", + "javaType": "io.fabric8.kubernetes.api.model.ServiceStatus" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.Node", + "javaType": "io.fabric8.kubernetes.api.model.Service", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, - "kubernetes_NodeAddress": { + "kubernetes_ServiceAccount": { "type": "object", "description": "", "properties": { - "address": { + "apiVersion": { "type": "string", - "description": "the node address" + "description": "", + "default": "v1", + "required": true, + "enum": [ + "v1" + ] }, - "type": { + "imagePullSecrets": { + "type": "array", + "description": "list of references to secrets in the same namespace available for pulling container images; see http://releases.k8s.io/HEAD/docs/user-guide/secrets.md#manually-specifying-an-imagepullsecret", + "items": { + "$ref": "#/definitions/kubernetes_LocalObjectReference", + "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" + } + }, + "kind": { "type": "string", - "description": "node address type" + "description": "", + "default": "ServiceAccount", + "required": true + }, + "metadata": { + "$ref": "#/definitions/kubernetes_ObjectMeta", + "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" + }, + "secrets": { + "type": "array", + "description": "list of secrets that can be used by pods running as this service account; see http://releases.k8s.io/HEAD/docs/user-guide/secrets.md", + "items": { + "$ref": "#/definitions/kubernetes_ObjectReference", + "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" + } } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.NodeAddress" + "javaType": "io.fabric8.kubernetes.api.model.ServiceAccount", + "javaInterfaces": [ + "io.fabric8.kubernetes.api.model.HasMetadata" + ] }, - "kubernetes_NodeCondition": { + "kubernetes_ServiceAccountList": { "type": "object", "description": "", "properties": { - "lastHeartbeatTime": { - "type": "string", - "description": "last time we got an update on a given condition" - }, - "lastTransitionTime": { - "type": "string", - "description": "last time the condition transit from one status to another" - }, - "message": { + "apiVersion": { "type": "string", - "description": "human readable message indicating details about last transition" + "description": "", + "default": "v1", + "required": true, + "enum": [ + "v1" + ] }, - "reason": { - "type": "string", - "description": "(brief) reason for the condition's last transition" + "items": { + "type": "array", + "description": "list of ServiceAccounts; see http://releases.k8s.io/HEAD/docs/design/service_accounts.md#service-accounts", + "items": { + "$ref": "#/definitions/kubernetes_ServiceAccount", + "javaType": "io.fabric8.kubernetes.api.model.ServiceAccount" + } }, - "status": { + "kind": { "type": "string", - "description": "status of the condition" + "description": "", + "default": "ServiceAccountList", + "required": true }, - "type": { - "type": "string", - "description": "type of node condition" + "metadata": { + "$ref": "#/definitions/kubernetes_ListMeta", + "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.NodeCondition" + "javaType": "io.fabric8.kubernetes.api.model.ServiceAccountList", + "javaInterfaces": [ + "io.fabric8.kubernetes.api.model.KubernetesResource", + "io.fabric8.kubernetes.api.model.KubernetesResourceList" + ] }, - "kubernetes_NodeList": { + "kubernetes_ServiceList": { "type": "object", "description": "", "properties": { @@ -8973,16 +7815,16 @@ var Kubernetes; }, "items": { "type": "array", - "description": "list of nodes", + "description": "list of services", "items": { - "$ref": "#/definitions/kubernetes_Node", - "javaType": "io.fabric8.kubernetes.api.model.Node" + "$ref": "#/definitions/kubernetes_Service", + "javaType": "io.fabric8.kubernetes.api.model.Service" } }, "kind": { "type": "string", "description": "", - "default": "NodeList", + "default": "ServiceList", "required": true }, "metadata": { @@ -8991,585 +7833,713 @@ var Kubernetes; } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.NodeList", + "javaType": "io.fabric8.kubernetes.api.model.ServiceList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, - "kubernetes_NodeSpec": { + "kubernetes_ServicePort": { "type": "object", "description": "", "properties": { - "externalID": { + "name": { "type": "string", - "description": "deprecated. External ID assigned to the node by some machine database (e.g. a cloud provider). Defaults to node name when empty." + "description": "the name of this port; optional if only one port is defined", + "maxLength": 63, + "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?$" }, - "podCIDR": { - "type": "string", - "description": "pod IP range assigned to the node" + "nodePort": { + "type": "integer", + "description": "the port on each node on which this service is exposed when type=NodePort or LoadBalancer; usually assigned by the system; if specified" }, - "providerID": { + "port": { + "type": "integer", + "description": "the port number that is exposed" + }, + "protocol": { "type": "string", - "description": "ID of the node assigned by the cloud provider in the format: \u003cProviderName\u003e://\u003cProviderSpecificNodeID\u003e" + "description": "the protocol used by this port; must be UDP or TCP; TCP if unspecified" }, - "unschedulable": { - "type": "boolean", - "description": "disable pod scheduling on the node; see http://releases.k8s.io/HEAD/docs/admin/node.md#manual-node-administration" + "targetPort": { + "$ref": "#/definitions/kubernetes_util_IntOrString", + "javaType": "io.fabric8.kubernetes.api.model.IntOrString" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.NodeSpec" + "javaType": "io.fabric8.kubernetes.api.model.ServicePort" }, - "kubernetes_NodeStatus": { + "kubernetes_ServiceSpec": { "type": "object", "description": "", "properties": { - "addresses": { + "clusterIP": { + "type": "string", + "description": "IP address of the service; usually assigned by the system; if specified" + }, + "deprecatedPublicIPs": { "type": "array", - "description": "list of addresses reachable to the node; see http://releases.k8s.io/HEAD/docs/admin/node.md#node-addresses", + "description": "deprecated. externally visible IPs (e.g. load balancers) that should be proxied to this service", "items": { - "$ref": "#/definitions/kubernetes_NodeAddress", - "javaType": "io.fabric8.kubernetes.api.model.NodeAddress" + "type": "string", + "description": "deprecated. externally visible IPs (e.g. load balancers) that should be proxied to this service" } }, - "capacity": { - "type": "object", - "description": "compute resource capacity of the node; see http://releases.k8s.io/HEAD/docs/user-guide/compute-resources.md", - "additionalProperties": { - "$ref": "#/definitions/kubernetes_resource_Quantity", - "javaType": "io.fabric8.kubernetes.api.model.Quantity" - }, - "javaType": "java.util.Map\u003cString,io.fabric8.kubernetes.api.model.Quantity\u003e" + "portalIP": { + "type": "string", + "description": "deprecated" }, - "conditions": { + "ports": { "type": "array", - "description": "list of node conditions observed; see http://releases.k8s.io/HEAD/docs/admin/node.md#node-condition", + "description": "ports exposed by the service; see http://releases.k8s.io/HEAD/docs/user-guide/services.md#virtual-ips-and-service-proxies", "items": { - "$ref": "#/definitions/kubernetes_NodeCondition", - "javaType": "io.fabric8.kubernetes.api.model.NodeCondition" + "$ref": "#/definitions/kubernetes_ServicePort", + "javaType": "io.fabric8.kubernetes.api.model.ServicePort" } }, - "nodeInfo": { - "$ref": "#/definitions/kubernetes_NodeSystemInfo", - "javaType": "io.fabric8.kubernetes.api.model.NodeSystemInfo" + "selector": { + "type": "object", + "description": "label keys and values that must match in order to receive traffic for this service; if empty", + "additionalProperties": { + "type": "string", + "description": "label keys and values that must match in order to receive traffic for this service; if empty" + }, + "javaType": "java.util.Map\u003cString,String\u003e" }, - "phase": { + "sessionAffinity": { "type": "string", - "description": "most recently observed lifecycle phase of the node; see http://releases.k8s.io/HEAD/docs/admin/node.md#node-phase" + "description": "enable client IP based session affinity; must be ClientIP or None; defaults to None; see http://releases.k8s.io/HEAD/docs/user-guide/services.md#virtual-ips-and-service-proxies" + }, + "type": { + "type": "string", + "description": "type of this service; must be ClusterIP" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.NodeStatus" + "javaType": "io.fabric8.kubernetes.api.model.ServiceSpec" }, - "kubernetes_NodeSystemInfo": { + "kubernetes_ServiceStatus": { "type": "object", "description": "", "properties": { - "bootID": { + "loadBalancer": { + "$ref": "#/definitions/kubernetes_LoadBalancerStatus", + "javaType": "io.fabric8.kubernetes.api.model.LoadBalancerStatus" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.ServiceStatus" + }, + "kubernetes_Status": { + "type": "object", + "description": "", + "properties": { + "apiVersion": { "type": "string", - "description": "boot id is the boot-id reported by the node" + "description": "", + "default": "v1", + "required": true, + "enum": [ + "v1" + ] }, - "containerRuntimeVersion": { - "type": "string", - "description": "Container runtime version reported by the node through runtime remote API (e.g. docker://1.5.0)" + "code": { + "type": "integer", + "description": "suggested HTTP return code for this status; 0 if not set" }, - "kernelVersion": { - "type": "string", - "description": "Kernel version reported by the node from 'uname -r' (e.g. 3.16.0-0.bpo.4-amd64)" + "details": { + "$ref": "#/definitions/kubernetes_StatusDetails", + "javaType": "io.fabric8.kubernetes.api.model.StatusDetails" }, - "kubeProxyVersion": { + "kind": { "type": "string", - "description": "Kube-proxy version reported by the node" + "description": "", + "default": "Status", + "required": true }, - "kubeletVersion": { + "message": { "type": "string", - "description": "Kubelet version reported by the node" + "description": "human-readable description of the status of this operation" }, - "machineID": { - "type": "string", - "description": "machine-id reported by the node" + "metadata": { + "$ref": "#/definitions/kubernetes_ListMeta", + "javaType": "io.fabric8.kubernetes.api.model.ListMeta" }, - "osImage": { + "reason": { "type": "string", - "description": "OS image used reported by the node from /etc/os-release (e.g. Debian GNU/Linux 7 (wheezy))" + "description": "machine-readable description of why this operation is in the 'Failure' status; if this value is empty there is no information available; a reason clarifies an HTTP status code but does not override it" }, - "systemUUID": { + "status": { "type": "string", - "description": "system-uuid reported by the node" + "description": "status of the operation; either Success" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.NodeSystemInfo" + "javaType": "io.fabric8.kubernetes.api.model.Status" }, - "kubernetes_ObjectFieldSelector": { + "kubernetes_StatusCause": { "type": "object", "description": "", "properties": { - "apiVersion": { + "field": { "type": "string", - "description": "version of the schema that fieldPath is written in terms of; defaults to v1" + "description": "field of the resource that has caused this error" }, - "fieldPath": { + "message": { "type": "string", - "description": "path of the field to select in the specified API version" + "description": "human-readable description of the cause of the error; this field may be presented as-is to a reader" + }, + "reason": { + "type": "string", + "description": "machine-readable description of the cause of the error; if this value is empty there is no information available" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.ObjectFieldSelector" + "javaType": "io.fabric8.kubernetes.api.model.StatusCause" }, - "kubernetes_ObjectMeta": { + "kubernetes_StatusDetails": { "type": "object", "description": "", "properties": { - "annotations": { - "type": "object", - "description": "map of string keys and values that can be used by external tooling to store and retrieve arbitrary metadata about objects; see http://releases.k8s.io/HEAD/docs/user-guide/annotations.md", - "additionalProperties": { - "type": "string", - "description": "map of string keys and values that can be used by external tooling to store and retrieve arbitrary metadata about objects; see http://releases.k8s.io/HEAD/docs/user-guide/annotations.md" - }, - "javaType": "java.util.Map\u003cString,String\u003e" - }, - "creationTimestamp": { - "type": "string", - "description": "RFC 3339 date and time at which the object was created; populated by the system" - }, - "deletionTimestamp": { - "type": "string", - "description": "RFC 3339 date and time at which the object will be deleted; populated by the system when a graceful deletion is requested" + "causes": { + "type": "array", + "description": "the Causes array includes more details associated with the StatusReason failure; not all StatusReasons may provide detailed causes", + "items": { + "$ref": "#/definitions/kubernetes_StatusCause", + "javaType": "io.fabric8.kubernetes.api.model.StatusCause" + } }, - "generateName": { + "kind": { "type": "string", - "description": "an optional prefix to use to generate a unique name; has the same validation rules as name; optional" - }, - "generation": { - "type": "integer", - "description": "a sequence number representing a specific generation of the desired state; populated by the system; read-only", - "javaType": "Long" - }, - "labels": { - "type": "object", - "description": "map of string keys and values that can be used to organize and categorize objects; may match selectors of replication controllers and services; see http://releases.k8s.io/HEAD/docs/user-guide/labels.md", - "additionalProperties": { - "type": "string", - "description": "map of string keys and values that can be used to organize and categorize objects; may match selectors of replication controllers and services; see http://releases.k8s.io/HEAD/docs/user-guide/labels.md" - }, - "javaType": "java.util.Map\u003cString,String\u003e" + "description": "the kind attribute of the resource associated with the status StatusReason; on some operations may differ from the requested resource Kind; see http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds" }, "name": { "type": "string", - "description": "string that identifies an object. Must be unique within a namespace; cannot be updated; see http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#names", - "maxLength": 63, - "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?$" - }, - "namespace": { - "type": "string", - "description": "namespace of the object; must be a DNS_LABEL; cannot be updated; see http://releases.k8s.io/HEAD/docs/user-guide/namespaces.md", - "maxLength": 253, - "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$" - }, - "resourceVersion": { - "type": "string", - "description": "string that identifies the internal version of this object that can be used by clients to determine when objects have changed; populated by the system" - }, - "selfLink": { - "type": "string", - "description": "URL for the object; populated by the system" + "description": "the name attribute of the resource associated with the status StatusReason (when there is a single name which can be described)" }, - "uid": { - "type": "string", - "description": "unique UUID across space and time; populated by the system; read-only; see http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#uids" + "retryAfterSeconds": { + "type": "integer", + "description": "the number of seconds before the client should attempt to retry this operation" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" + "javaType": "io.fabric8.kubernetes.api.model.StatusDetails" }, - "kubernetes_ObjectReference": { + "kubernetes_TCPSocketAction": { + "type": "object", + "description": "", + "properties": { + "port": { + "$ref": "#/definitions/kubernetes_util_IntOrString", + "javaType": "io.fabric8.kubernetes.api.model.IntOrString" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.TCPSocketAction" + }, + "kubernetes_TypeMeta": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", - "description": "API version of the referent" - }, - "fieldPath": { - "type": "string", - "description": "if referring to a piece of an object instead of an entire object" + "description": "version of the schema the object should have; see http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#resources" }, "kind": { "type": "string", - "description": "kind of the referent; see http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds" + "description": "kind of object" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.TypeMeta" + }, + "kubernetes_Volume": { + "type": "object", + "description": "", + "properties": { + "awsElasticBlockStore": { + "$ref": "#/definitions/kubernetes_AWSElasticBlockStoreVolumeSource", + "javaType": "io.fabric8.kubernetes.api.model.AWSElasticBlockStoreVolumeSource" + }, + "cephfs": { + "$ref": "#/definitions/kubernetes_CephFSVolumeSource", + "javaType": "io.fabric8.kubernetes.api.model.CephFSVolumeSource" + }, + "emptyDir": { + "$ref": "#/definitions/kubernetes_EmptyDirVolumeSource", + "javaType": "io.fabric8.kubernetes.api.model.EmptyDirVolumeSource" + }, + "gcePersistentDisk": { + "$ref": "#/definitions/kubernetes_GCEPersistentDiskVolumeSource", + "javaType": "io.fabric8.kubernetes.api.model.GCEPersistentDiskVolumeSource" + }, + "gitRepo": { + "$ref": "#/definitions/kubernetes_GitRepoVolumeSource", + "javaType": "io.fabric8.kubernetes.api.model.GitRepoVolumeSource" + }, + "glusterfs": { + "$ref": "#/definitions/kubernetes_GlusterfsVolumeSource", + "javaType": "io.fabric8.kubernetes.api.model.GlusterfsVolumeSource" + }, + "hostPath": { + "$ref": "#/definitions/kubernetes_HostPathVolumeSource", + "javaType": "io.fabric8.kubernetes.api.model.HostPathVolumeSource" + }, + "iscsi": { + "$ref": "#/definitions/kubernetes_ISCSIVolumeSource", + "javaType": "io.fabric8.kubernetes.api.model.ISCSIVolumeSource" + }, + "metadata": { + "$ref": "#/definitions/kubernetes_MetadataVolumeSource", + "javaType": "io.fabric8.kubernetes.api.model.MetadataVolumeSource" }, "name": { "type": "string", - "description": "name of the referent; see http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#names" + "description": "volume name; must be a DNS_LABEL and unique within the pod; see http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#names", + "maxLength": 63, + "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?$" }, - "namespace": { - "type": "string", - "description": "namespace of the referent; see http://releases.k8s.io/HEAD/docs/user-guide/namespaces.md" + "nfs": { + "$ref": "#/definitions/kubernetes_NFSVolumeSource", + "javaType": "io.fabric8.kubernetes.api.model.NFSVolumeSource" }, - "resourceVersion": { - "type": "string", - "description": "specific resourceVersion to which this reference is made" + "persistentVolumeClaim": { + "$ref": "#/definitions/kubernetes_PersistentVolumeClaimVolumeSource", + "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimVolumeSource" }, - "uid": { - "type": "string", - "description": "uid of the referent; see http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#uids" + "rbd": { + "$ref": "#/definitions/kubernetes_RBDVolumeSource", + "javaType": "io.fabric8.kubernetes.api.model.RBDVolumeSource" + }, + "secret": { + "$ref": "#/definitions/kubernetes_SecretVolumeSource", + "javaType": "io.fabric8.kubernetes.api.model.SecretVolumeSource" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" + "javaType": "io.fabric8.kubernetes.api.model.Volume" }, - "kubernetes_PersistentVolume": { + "kubernetes_VolumeMount": { "type": "object", "description": "", "properties": { - "apiVersion": { + "mountPath": { "type": "string", - "description": "", - "default": "v1", - "required": true, - "enum": [ - "v1" - ] + "description": "path within the container at which the volume should be mounted" }, - "kind": { + "name": { "type": "string", - "description": "", - "default": "PersistentVolume", - "required": true - }, - "metadata": { - "$ref": "#/definitions/kubernetes_ObjectMeta", - "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" - }, - "spec": { - "$ref": "#/definitions/kubernetes_PersistentVolumeSpec", - "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeSpec" + "description": "name of the volume to mount" }, - "status": { - "$ref": "#/definitions/kubernetes_PersistentVolumeStatus", - "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeStatus" + "readOnly": { + "type": "boolean", + "description": "mounted read-only if true" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.PersistentVolume", - "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.HasMetadata" - ] + "javaType": "io.fabric8.kubernetes.api.model.VolumeMount" }, - "kubernetes_PersistentVolumeClaim": { + "kubernetes_VolumeSource": { "type": "object", "description": "", "properties": { - "apiVersion": { - "type": "string", - "description": "", - "default": "v1", - "required": true, - "enum": [ - "v1" - ] + "awsElasticBlockStore": { + "$ref": "#/definitions/kubernetes_AWSElasticBlockStoreVolumeSource", + "javaType": "io.fabric8.kubernetes.api.model.AWSElasticBlockStoreVolumeSource" }, - "kind": { - "type": "string", - "description": "", - "default": "PersistentVolumeClaim", - "required": true + "cephfs": { + "$ref": "#/definitions/kubernetes_CephFSVolumeSource", + "javaType": "io.fabric8.kubernetes.api.model.CephFSVolumeSource" + }, + "emptyDir": { + "$ref": "#/definitions/kubernetes_EmptyDirVolumeSource", + "javaType": "io.fabric8.kubernetes.api.model.EmptyDirVolumeSource" + }, + "gcePersistentDisk": { + "$ref": "#/definitions/kubernetes_GCEPersistentDiskVolumeSource", + "javaType": "io.fabric8.kubernetes.api.model.GCEPersistentDiskVolumeSource" + }, + "gitRepo": { + "$ref": "#/definitions/kubernetes_GitRepoVolumeSource", + "javaType": "io.fabric8.kubernetes.api.model.GitRepoVolumeSource" + }, + "glusterfs": { + "$ref": "#/definitions/kubernetes_GlusterfsVolumeSource", + "javaType": "io.fabric8.kubernetes.api.model.GlusterfsVolumeSource" + }, + "hostPath": { + "$ref": "#/definitions/kubernetes_HostPathVolumeSource", + "javaType": "io.fabric8.kubernetes.api.model.HostPathVolumeSource" + }, + "iscsi": { + "$ref": "#/definitions/kubernetes_ISCSIVolumeSource", + "javaType": "io.fabric8.kubernetes.api.model.ISCSIVolumeSource" }, "metadata": { - "$ref": "#/definitions/kubernetes_ObjectMeta", - "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" + "$ref": "#/definitions/kubernetes_MetadataVolumeSource", + "javaType": "io.fabric8.kubernetes.api.model.MetadataVolumeSource" }, - "spec": { - "$ref": "#/definitions/kubernetes_PersistentVolumeClaimSpec", - "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimSpec" + "nfs": { + "$ref": "#/definitions/kubernetes_NFSVolumeSource", + "javaType": "io.fabric8.kubernetes.api.model.NFSVolumeSource" }, - "status": { - "$ref": "#/definitions/kubernetes_PersistentVolumeClaimStatus", - "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimStatus" + "persistentVolumeClaim": { + "$ref": "#/definitions/kubernetes_PersistentVolumeClaimVolumeSource", + "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimVolumeSource" + }, + "rbd": { + "$ref": "#/definitions/kubernetes_RBDVolumeSource", + "javaType": "io.fabric8.kubernetes.api.model.RBDVolumeSource" + }, + "secret": { + "$ref": "#/definitions/kubernetes_SecretVolumeSource", + "javaType": "io.fabric8.kubernetes.api.model.SecretVolumeSource" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaim", - "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.HasMetadata" - ] + "javaType": "io.fabric8.kubernetes.api.model.VolumeSource" }, - "kubernetes_PersistentVolumeClaimList": { + "kubernetes_config_AuthInfo": { "type": "object", "description": "", "properties": { - "apiVersion": { + "client-certificate": { "type": "string", - "description": "", - "default": "v1", - "required": true, - "enum": [ - "v1" - ] + "description": "" }, - "items": { + "client-certificate-data": { + "type": "string", + "description": "" + }, + "client-key": { + "type": "string", + "description": "" + }, + "client-key-data": { + "type": "string", + "description": "" + }, + "extensions": { "type": "array", - "description": "a list of persistent volume claims; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#persistentvolumeclaims", + "description": "", "items": { - "$ref": "#/definitions/kubernetes_PersistentVolumeClaim", - "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaim" + "$ref": "#/definitions/kubernetes_config_NamedExtension", + "javaType": "io.fabric8.kubernetes.api.model.NamedExtension" } }, - "kind": { + "password": { "type": "string", - "description": "", - "default": "PersistentVolumeClaimList", - "required": true + "description": "" }, - "metadata": { - "$ref": "#/definitions/kubernetes_ListMeta", - "javaType": "io.fabric8.kubernetes.api.model.ListMeta" + "token": { + "type": "string", + "description": "" + }, + "username": { + "type": "string", + "description": "" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimList", - "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.KubernetesResource", - "io.fabric8.kubernetes.api.model.KubernetesResourceList" - ] + "javaType": "io.fabric8.kubernetes.api.model.AuthInfo" }, - "kubernetes_PersistentVolumeClaimSpec": { + "kubernetes_config_Cluster": { "type": "object", "description": "", "properties": { - "accessModes": { + "api-version": { + "type": "string", + "description": "" + }, + "certificate-authority": { + "type": "string", + "description": "" + }, + "certificate-authority-data": { + "type": "string", + "description": "" + }, + "extensions": { "type": "array", - "description": "the desired access modes the volume should have; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#access-modes-1", + "description": "", "items": { - "type": "string", - "description": "the desired access modes the volume should have; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#access-modes-1" + "$ref": "#/definitions/kubernetes_config_NamedExtension", + "javaType": "io.fabric8.kubernetes.api.model.NamedExtension" } }, - "resources": { - "$ref": "#/definitions/kubernetes_ResourceRequirements", - "javaType": "io.fabric8.kubernetes.api.model.ResourceRequirements" + "insecure-skip-tls-verify": { + "type": "boolean", + "description": "" }, - "volumeName": { + "server": { "type": "string", - "description": "the binding reference to the persistent volume backing this claim" + "description": "" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimSpec" + "javaType": "io.fabric8.kubernetes.api.model.Cluster" }, - "kubernetes_PersistentVolumeClaimStatus": { + "kubernetes_config_Config": { "type": "object", "description": "", "properties": { - "accessModes": { + "apiVersion": { + "type": "string", + "description": "" + }, + "clusters": { "type": "array", - "description": "the actual access modes the volume has; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#access-modes-1", + "description": "", "items": { - "type": "string", - "description": "the actual access modes the volume has; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#access-modes-1" + "$ref": "#/definitions/kubernetes_config_NamedCluster", + "javaType": "io.fabric8.kubernetes.api.model.NamedCluster" } }, - "capacity": { - "type": "object", - "description": "the actual resources the volume has", - "additionalProperties": { - "$ref": "#/definitions/kubernetes_resource_Quantity", - "javaType": "io.fabric8.kubernetes.api.model.Quantity" - }, - "javaType": "java.util.Map\u003cString,io.fabric8.kubernetes.api.model.Quantity\u003e" + "contexts": { + "type": "array", + "description": "", + "items": { + "$ref": "#/definitions/kubernetes_config_NamedContext", + "javaType": "io.fabric8.kubernetes.api.model.NamedContext" + } }, - "phase": { + "current-context": { "type": "string", - "description": "the current phase of the claim" + "description": "" + }, + "extensions": { + "type": "array", + "description": "", + "items": { + "$ref": "#/definitions/kubernetes_config_NamedExtension", + "javaType": "io.fabric8.kubernetes.api.model.NamedExtension" + } + }, + "kind": { + "type": "string", + "description": "" + }, + "preferences": { + "$ref": "#/definitions/kubernetes_config_Preferences", + "javaType": "io.fabric8.kubernetes.api.model.Preferences" + }, + "users": { + "type": "array", + "description": "", + "items": { + "$ref": "#/definitions/kubernetes_config_NamedAuthInfo", + "javaType": "io.fabric8.kubernetes.api.model.NamedAuthInfo" + } } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimStatus" + "javaType": "io.fabric8.kubernetes.api.model.Config" }, - "kubernetes_PersistentVolumeClaimVolumeSource": { + "kubernetes_config_Context": { "type": "object", "description": "", "properties": { - "claimName": { + "cluster": { "type": "string", - "description": "the name of the claim in the same namespace to be mounted as a volume; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#persistentvolumeclaims" + "description": "" }, - "readOnly": { - "type": "boolean", - "description": "mount volume as read-only when true; default false" + "extensions": { + "type": "array", + "description": "", + "items": { + "$ref": "#/definitions/kubernetes_config_NamedExtension", + "javaType": "io.fabric8.kubernetes.api.model.NamedExtension" + } + }, + "namespace": { + "type": "string", + "description": "" + }, + "user": { + "type": "string", + "description": "" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimVolumeSource" + "javaType": "io.fabric8.kubernetes.api.model.Context" }, - "kubernetes_PersistentVolumeList": { + "kubernetes_config_NamedAuthInfo": { "type": "object", "description": "", "properties": { - "apiVersion": { + "name": { "type": "string", - "description": "", - "default": "v1", - "required": true, - "enum": [ - "v1" - ] + "description": "" }, - "items": { - "type": "array", - "description": "list of persistent volumes; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md", - "items": { - "$ref": "#/definitions/kubernetes_PersistentVolume", - "javaType": "io.fabric8.kubernetes.api.model.PersistentVolume" - } + "user": { + "$ref": "#/definitions/kubernetes_config_AuthInfo", + "javaType": "io.fabric8.kubernetes.api.model.AuthInfo" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.NamedAuthInfo" + }, + "kubernetes_config_NamedCluster": { + "type": "object", + "description": "", + "properties": { + "cluster": { + "$ref": "#/definitions/kubernetes_config_Cluster", + "javaType": "io.fabric8.kubernetes.api.model.Cluster" }, - "kind": { + "name": { "type": "string", - "description": "", - "default": "PersistentVolumeList", - "required": true - }, - "metadata": { - "$ref": "#/definitions/kubernetes_ListMeta", - "javaType": "io.fabric8.kubernetes.api.model.ListMeta" + "description": "" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeList", - "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.KubernetesResource", - "io.fabric8.kubernetes.api.model.KubernetesResourceList" - ] + "javaType": "io.fabric8.kubernetes.api.model.NamedCluster" }, - "kubernetes_PersistentVolumeSource": { + "kubernetes_config_NamedContext": { "type": "object", "description": "", "properties": { - "awsElasticBlockStore": { - "$ref": "#/definitions/kubernetes_AWSElasticBlockStoreVolumeSource", - "javaType": "io.fabric8.kubernetes.api.model.AWSElasticBlockStoreVolumeSource" - }, - "cephfs": { - "$ref": "#/definitions/kubernetes_CephFSVolumeSource", - "javaType": "io.fabric8.kubernetes.api.model.CephFSVolumeSource" - }, - "gcePersistentDisk": { - "$ref": "#/definitions/kubernetes_GCEPersistentDiskVolumeSource", - "javaType": "io.fabric8.kubernetes.api.model.GCEPersistentDiskVolumeSource" - }, - "glusterfs": { - "$ref": "#/definitions/kubernetes_GlusterfsVolumeSource", - "javaType": "io.fabric8.kubernetes.api.model.GlusterfsVolumeSource" - }, - "hostPath": { - "$ref": "#/definitions/kubernetes_HostPathVolumeSource", - "javaType": "io.fabric8.kubernetes.api.model.HostPathVolumeSource" - }, - "iscsi": { - "$ref": "#/definitions/kubernetes_ISCSIVolumeSource", - "javaType": "io.fabric8.kubernetes.api.model.ISCSIVolumeSource" + "context": { + "$ref": "#/definitions/kubernetes_config_Context", + "javaType": "io.fabric8.kubernetes.api.model.Context" }, - "nfs": { - "$ref": "#/definitions/kubernetes_NFSVolumeSource", - "javaType": "io.fabric8.kubernetes.api.model.NFSVolumeSource" + "name": { + "type": "string", + "description": "" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.NamedContext" + }, + "kubernetes_config_NamedExtension": { + "type": "object", + "description": "", + "properties": { + "extension": { + "$ref": "#/definitions/kubernetes_runtime_RawExtension", + "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" }, - "rbd": { - "$ref": "#/definitions/kubernetes_RBDVolumeSource", - "javaType": "io.fabric8.kubernetes.api.model.RBDVolumeSource" + "name": { + "type": "string", + "description": "" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeSource" + "javaType": "io.fabric8.kubernetes.api.model.NamedExtension" }, - "kubernetes_PersistentVolumeSpec": { + "kubernetes_config_Preferences": { "type": "object", "description": "", "properties": { - "accessModes": { + "colors": { + "type": "boolean", + "description": "" + }, + "extensions": { "type": "array", - "description": "all ways the volume can be mounted; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#access-modes", + "description": "", "items": { - "type": "string", - "description": "all ways the volume can be mounted; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#access-modes" + "$ref": "#/definitions/kubernetes_config_NamedExtension", + "javaType": "io.fabric8.kubernetes.api.model.NamedExtension" } + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.Preferences" + }, + "kubernetes_resource_Quantity": { + "type": "object", + "description": "", + "properties": { + "Amount": { + "$ref": "#/definitions/speter_inf_Dec", + "javaType": "io.fabric8.openshift.api.model.Dec" }, - "awsElasticBlockStore": { - "$ref": "#/definitions/kubernetes_AWSElasticBlockStoreVolumeSource", - "javaType": "io.fabric8.kubernetes.api.model.AWSElasticBlockStoreVolumeSource" - }, - "capacity": { - "type": "object", - "description": "a description of the persistent volume's resources and capacityr; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#capacity", - "additionalProperties": { - "$ref": "#/definitions/kubernetes_resource_Quantity", - "javaType": "io.fabric8.kubernetes.api.model.Quantity" - }, - "javaType": "java.util.Map\u003cString,io.fabric8.kubernetes.api.model.Quantity\u003e" - }, - "cephfs": { - "$ref": "#/definitions/kubernetes_CephFSVolumeSource", - "javaType": "io.fabric8.kubernetes.api.model.CephFSVolumeSource" - }, - "claimRef": { - "$ref": "#/definitions/kubernetes_ObjectReference", - "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" - }, - "gcePersistentDisk": { - "$ref": "#/definitions/kubernetes_GCEPersistentDiskVolumeSource", - "javaType": "io.fabric8.kubernetes.api.model.GCEPersistentDiskVolumeSource" - }, - "glusterfs": { - "$ref": "#/definitions/kubernetes_GlusterfsVolumeSource", - "javaType": "io.fabric8.kubernetes.api.model.GlusterfsVolumeSource" - }, - "hostPath": { - "$ref": "#/definitions/kubernetes_HostPathVolumeSource", - "javaType": "io.fabric8.kubernetes.api.model.HostPathVolumeSource" - }, - "iscsi": { - "$ref": "#/definitions/kubernetes_ISCSIVolumeSource", - "javaType": "io.fabric8.kubernetes.api.model.ISCSIVolumeSource" + "Format": { + "type": "string", + "description": "" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.Quantity" + }, + "kubernetes_runtime_RawExtension": { + "type": "object", + "description": "", + "properties": { + "RawJSON": { + "type": "string", + "description": "" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" + }, + "kubernetes_util_IntOrString": { + "type": "object", + "description": "", + "properties": { + "IntVal": { + "type": "integer", + "description": "" }, - "nfs": { - "$ref": "#/definitions/kubernetes_NFSVolumeSource", - "javaType": "io.fabric8.kubernetes.api.model.NFSVolumeSource" + "Kind": { + "type": "integer", + "description": "" }, - "persistentVolumeReclaimPolicy": { + "StrVal": { "type": "string", - "description": "what happens to a volume when released from its claim; Valid options are Retain (default) and Recycle. Recyling must be supported by the volume plugin underlying this persistent volume. See http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#recycling-policy" + "description": "" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.kubernetes.api.model.IntOrString" + }, + "kubernetes_watch_WatchEvent": { + "type": "object", + "description": "", + "properties": { + "object": { + "$ref": "#/definitions/kubernetes_runtime_RawExtension", + "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" }, - "rbd": { - "$ref": "#/definitions/kubernetes_RBDVolumeSource", - "javaType": "io.fabric8.kubernetes.api.model.RBDVolumeSource" + "type": { + "type": "string", + "description": "the type of watch event; may be ADDED" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeSpec" + "javaType": "io.fabric8.kubernetes.api.model.WatchEvent" }, - "kubernetes_PersistentVolumeStatus": { + "os_authorization_AuthorizationAttributes": { "type": "object", "description": "", "properties": { - "message": { + "content": { + "$ref": "#/definitions/kubernetes_runtime_RawExtension", + "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" + }, + "namespace": { "type": "string", - "description": "human-readable message indicating details about why the volume is in this state" + "description": "namespace of the action being requested" }, - "phase": { + "resource": { "type": "string", - "description": "the current phase of a persistent volume; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#phase" + "description": "one of the existing resource types" }, - "reason": { + "resourceName": { "type": "string", - "description": "(brief) reason the volume is not is not available" + "description": "name of the resource being requested for a get or delete" + }, + "verb": { + "type": "string", + "description": "one of get" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeStatus" + "javaType": "io.fabric8.openshift.api.model.AuthorizationAttributes" }, - "kubernetes_Pod": { + "os_authorization_ClusterPolicy": { "type": "object", "description": "", "properties": { @@ -9585,45 +8555,79 @@ var Kubernetes; "kind": { "type": "string", "description": "", - "default": "Pod", + "default": "ClusterPolicy", "required": true }, + "lastModified": { + "type": "string", + "description": "last time any part of the object was created" + }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, - "spec": { - "$ref": "#/definitions/kubernetes_PodSpec", - "javaType": "io.fabric8.kubernetes.api.model.PodSpec" - }, - "status": { - "$ref": "#/definitions/kubernetes_PodStatus", - "javaType": "io.fabric8.kubernetes.api.model.PodStatus" + "roles": { + "type": "array", + "description": "all the roles held by this policy", + "items": { + "$ref": "#/definitions/os_authorization_NamedClusterRole", + "javaType": "io.fabric8.openshift.api.model.NamedClusterRole" + } } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.Pod", + "javaType": "io.fabric8.openshift.api.model.ClusterPolicy", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, - "kubernetes_PodCondition": { + "os_authorization_ClusterPolicyBinding": { "type": "object", "description": "", "properties": { - "status": { + "apiVersion": { "type": "string", - "description": "status of the condition" + "description": "", + "default": "v1", + "required": true, + "enum": [ + "v1" + ] }, - "type": { + "kind": { "type": "string", - "description": "kind of the condition" + "description": "", + "default": "ClusterPolicyBinding", + "required": true + }, + "lastModified": { + "type": "string", + "description": "last time any part of the object was created" + }, + "metadata": { + "$ref": "#/definitions/kubernetes_ObjectMeta", + "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" + }, + "policyRef": { + "$ref": "#/definitions/kubernetes_ObjectReference", + "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" + }, + "roleBindings": { + "type": "array", + "description": "all the role bindings held by this policy", + "items": { + "$ref": "#/definitions/os_authorization_NamedClusterRoleBinding", + "javaType": "io.fabric8.openshift.api.model.NamedClusterRoleBinding" + } } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.PodCondition" + "javaType": "io.fabric8.openshift.api.model.ClusterPolicyBinding", + "javaInterfaces": [ + "io.fabric8.kubernetes.api.model.HasMetadata" + ] }, - "kubernetes_PodList": { + "os_authorization_ClusterPolicyBindingList": { "type": "object", "description": "", "properties": { @@ -9638,16 +8642,16 @@ var Kubernetes; }, "items": { "type": "array", - "description": "list of pods; see http://releases.k8s.io/HEAD/docs/user-guide/pods.md", + "description": "list of cluster policy bindings", "items": { - "$ref": "#/definitions/kubernetes_Pod", - "javaType": "io.fabric8.kubernetes.api.model.Pod" + "$ref": "#/definitions/os_authorization_ClusterPolicyBinding", + "javaType": "io.fabric8.openshift.api.model.ClusterPolicyBinding" } }, "kind": { "type": "string", "description": "", - "default": "PodList", + "default": "ClusterPolicyBindingList", "required": true }, "metadata": { @@ -9656,230 +8660,337 @@ var Kubernetes; } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.PodList", + "javaType": "io.fabric8.openshift.api.model.ClusterPolicyBindingList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, - "kubernetes_PodSpec": { + "os_authorization_ClusterPolicyList": { "type": "object", "description": "", "properties": { - "activeDeadlineSeconds": { - "type": "integer", + "apiVersion": { + "type": "string", "description": "", - "javaType": "Long" + "default": "v1", + "required": true, + "enum": [ + "v1" + ] }, - "containers": { + "items": { "type": "array", - "description": "list of containers belonging to the pod; cannot be updated; containers cannot currently be added or removed; there must be at least one container in a Pod; see http://releases.k8s.io/HEAD/docs/user-guide/containers.md", + "description": "list of cluster policies", "items": { - "$ref": "#/definitions/kubernetes_Container", - "javaType": "io.fabric8.kubernetes.api.model.Container" + "$ref": "#/definitions/os_authorization_ClusterPolicy", + "javaType": "io.fabric8.openshift.api.model.ClusterPolicy" } }, - "dnsPolicy": { + "kind": { "type": "string", - "description": "DNS policy for containers within the pod; one of 'ClusterFirst' or 'Default'" + "description": "", + "default": "ClusterPolicyList", + "required": true }, - "host": { + "metadata": { + "$ref": "#/definitions/kubernetes_ListMeta", + "javaType": "io.fabric8.kubernetes.api.model.ListMeta" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.openshift.api.model.ClusterPolicyList", + "javaInterfaces": [ + "io.fabric8.kubernetes.api.model.KubernetesResource", + "io.fabric8.kubernetes.api.model.KubernetesResourceList" + ] + }, + "os_authorization_ClusterRole": { + "type": "object", + "description": "", + "properties": { + "apiVersion": { "type": "string", - "description": "deprecated" + "description": "", + "default": "v1", + "required": true, + "enum": [ + "v1" + ] }, - "hostNetwork": { - "type": "boolean", - "description": "host networking requested for this pod" + "kind": { + "type": "string", + "description": "", + "default": "ClusterRole", + "required": true }, - "imagePullSecrets": { + "metadata": { + "$ref": "#/definitions/kubernetes_ObjectMeta", + "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" + }, + "rules": { "type": "array", - "description": "list of references to secrets in the same namespace available for pulling the container images; see http://releases.k8s.io/HEAD/docs/user-guide/images.md#specifying-imagepullsecrets-on-a-pod", + "description": "list of policy rules", "items": { - "$ref": "#/definitions/kubernetes_LocalObjectReference", - "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" + "$ref": "#/definitions/os_authorization_PolicyRule", + "javaType": "io.fabric8.openshift.api.model.PolicyRule" } - }, - "nodeName": { + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.openshift.api.model.ClusterRole", + "javaInterfaces": [ + "io.fabric8.kubernetes.api.model.HasMetadata" + ] + }, + "os_authorization_ClusterRoleBinding": { + "type": "object", + "description": "", + "properties": { + "apiVersion": { "type": "string", - "description": "node requested for this pod" + "description": "", + "default": "v1", + "required": true, + "enum": [ + "v1" + ] }, - "nodeSelector": { - "type": "object", - "description": "selector which must match a node's labels for the pod to be scheduled on that node; see http://releases.k8s.io/HEAD/docs/user-guide/node-selection/README.md", - "additionalProperties": { + "groupNames": { + "type": "array", + "description": "all the groups directly bound to the role", + "items": { "type": "string", - "description": "selector which must match a node's labels for the pod to be scheduled on that node; see http://releases.k8s.io/HEAD/docs/user-guide/node-selection/README.md" - }, - "javaType": "java.util.Map\u003cString,String\u003e" + "description": "all the groups directly bound to the role" + } }, - "restartPolicy": { + "kind": { "type": "string", - "description": "restart policy for all containers within the pod; one of Always" + "description": "", + "default": "ClusterRoleBinding", + "required": true }, - "serviceAccount": { - "type": "string", - "description": "deprecated; use serviceAccountName instead" + "metadata": { + "$ref": "#/definitions/kubernetes_ObjectMeta", + "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, - "serviceAccountName": { - "type": "string", - "description": "name of the ServiceAccount to use to run this pod; see http://releases.k8s.io/HEAD/docs/design/service_accounts.md" + "roleRef": { + "$ref": "#/definitions/kubernetes_ObjectReference", + "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, - "terminationGracePeriodSeconds": { - "type": "integer", - "description": "optional duration in seconds the pod needs to terminate gracefully; may be decreased in delete request; value must be non-negative integer; the value zero indicates delete immediately; if this value is not set", - "javaType": "Long" + "subjects": { + "type": "array", + "description": "references to subjects bound to the role. Only User", + "items": { + "$ref": "#/definitions/kubernetes_ObjectReference", + "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" + } }, - "volumes": { + "userNames": { "type": "array", - "description": "list of volumes that can be mounted by containers belonging to the pod; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md", + "description": "all user names directly bound to the role", "items": { - "$ref": "#/definitions/kubernetes_Volume", - "javaType": "io.fabric8.kubernetes.api.model.Volume" + "type": "string", + "description": "all user names directly bound to the role" } } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.PodSpec" + "javaType": "io.fabric8.openshift.api.model.ClusterRoleBinding", + "javaInterfaces": [ + "io.fabric8.kubernetes.api.model.HasMetadata" + ] }, - "kubernetes_PodStatus": { + "os_authorization_ClusterRoleBindingList": { "type": "object", "description": "", "properties": { - "conditions": { - "type": "array", - "description": "current service state of pod; see http://releases.k8s.io/HEAD/docs/user-guide/pod-states.md#pod-conditions", - "items": { - "$ref": "#/definitions/kubernetes_PodCondition", - "javaType": "io.fabric8.kubernetes.api.model.PodCondition" - } + "apiVersion": { + "type": "string", + "description": "", + "default": "v1", + "required": true, + "enum": [ + "v1" + ] }, - "containerStatuses": { + "items": { "type": "array", - "description": "list of container statuses; see http://releases.k8s.io/HEAD/docs/user-guide/pod-states.md#container-statuses", + "description": "list of cluster role bindings", "items": { - "$ref": "#/definitions/kubernetes_ContainerStatus", - "javaType": "io.fabric8.kubernetes.api.model.ContainerStatus" + "$ref": "#/definitions/os_authorization_ClusterRoleBinding", + "javaType": "io.fabric8.openshift.api.model.ClusterRoleBinding" } }, - "hostIP": { - "type": "string", - "description": "IP address of the host to which the pod is assigned; empty if not yet scheduled" - }, - "message": { - "type": "string", - "description": "human readable message indicating details about why the pod is in this condition" - }, - "phase": { - "type": "string", - "description": "current condition of the pod; see http://releases.k8s.io/HEAD/docs/user-guide/pod-states.md#pod-phase" - }, - "podIP": { - "type": "string", - "description": "IP address allocated to the pod; routable at least within the cluster; empty if not yet allocated" - }, - "reason": { + "kind": { "type": "string", - "description": "(brief-CamelCase) reason indicating details about why the pod is in this condition" + "description": "", + "default": "ClusterRoleBindingList", + "required": true }, - "startTime": { - "type": "string", - "description": "RFC 3339 date and time at which the object was acknowledged by the Kubelet. This is before the Kubelet pulled the container image(s) for the pod." + "metadata": { + "$ref": "#/definitions/kubernetes_ListMeta", + "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.PodStatus" - }, - "kubernetes_PodTemplateSpec": { + "javaType": "io.fabric8.openshift.api.model.ClusterRoleBindingList", + "javaInterfaces": [ + "io.fabric8.kubernetes.api.model.KubernetesResource", + "io.fabric8.kubernetes.api.model.KubernetesResourceList" + ] + }, + "os_authorization_LocalSubjectAccessReview": { "type": "object", "description": "", "properties": { - "metadata": { - "$ref": "#/definitions/kubernetes_ObjectMeta", - "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" + "TypeMeta": { + "$ref": "#/definitions/kubernetes_TypeMeta", + "javaType": "io.fabric8.kubernetes.api.model.TypeMeta" }, - "spec": { - "$ref": "#/definitions/kubernetes_PodSpec", - "javaType": "io.fabric8.kubernetes.api.model.PodSpec" + "content": { + "$ref": "#/definitions/kubernetes_runtime_RawExtension", + "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" + }, + "groups": { + "type": "array", + "description": "optional", + "items": { + "type": "string", + "description": "optional" + } + }, + "namespace": { + "type": "string", + "description": "namespace of the action being requested" + }, + "resource": { + "type": "string", + "description": "one of the existing resource types" + }, + "resourceName": { + "type": "string", + "description": "name of the resource being requested for a get or delete" + }, + "user": { + "type": "string", + "description": "optional" + }, + "verb": { + "type": "string", + "description": "one of get" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.PodTemplateSpec" + "javaType": "io.fabric8.openshift.api.model.LocalSubjectAccessReview" }, - "kubernetes_Probe": { + "os_authorization_NamedClusterRole": { "type": "object", "description": "", "properties": { - "exec": { - "$ref": "#/definitions/kubernetes_ExecAction", - "javaType": "io.fabric8.kubernetes.api.model.ExecAction" + "name": { + "type": "string", + "description": "name of the cluster role" }, - "httpGet": { - "$ref": "#/definitions/kubernetes_HTTPGetAction", - "javaType": "io.fabric8.kubernetes.api.model.HTTPGetAction" + "role": { + "$ref": "#/definitions/os_authorization_ClusterRole", + "javaType": "io.fabric8.openshift.api.model.ClusterRole" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.openshift.api.model.NamedClusterRole" + }, + "os_authorization_NamedClusterRoleBinding": { + "type": "object", + "description": "", + "properties": { + "name": { + "type": "string", + "description": "name of the cluster role binding" }, - "initialDelaySeconds": { - "type": "integer", - "description": "number of seconds after the container has started before liveness probes are initiated; see http://releases.k8s.io/HEAD/docs/user-guide/pod-states.md#container-probes", - "javaType": "Long" + "roleBinding": { + "$ref": "#/definitions/os_authorization_ClusterRoleBinding", + "javaType": "io.fabric8.openshift.api.model.ClusterRoleBinding" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.openshift.api.model.NamedClusterRoleBinding" + }, + "os_authorization_NamedRole": { + "type": "object", + "description": "", + "properties": { + "name": { + "type": "string", + "description": "name of the role" }, - "tcpSocket": { - "$ref": "#/definitions/kubernetes_TCPSocketAction", - "javaType": "io.fabric8.kubernetes.api.model.TCPSocketAction" + "role": { + "$ref": "#/definitions/os_authorization_Role", + "javaType": "io.fabric8.openshift.api.model.Role" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.openshift.api.model.NamedRole" + }, + "os_authorization_NamedRoleBinding": { + "type": "object", + "description": "", + "properties": { + "name": { + "type": "string", + "description": "name of the roleBinding" }, - "timeoutSeconds": { - "type": "integer", - "description": "number of seconds after which liveness probes timeout; defaults to 1 second; see http://releases.k8s.io/HEAD/docs/user-guide/pod-states.md#container-probes", - "javaType": "Long" + "roleBinding": { + "$ref": "#/definitions/os_authorization_RoleBinding", + "javaType": "io.fabric8.openshift.api.model.RoleBinding" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.Probe" + "javaType": "io.fabric8.openshift.api.model.NamedRoleBinding" }, - "kubernetes_RBDVolumeSource": { + "os_authorization_Policy": { "type": "object", "description": "", "properties": { - "fsType": { + "apiVersion": { "type": "string", - "description": "file system type to mount" + "description": "", + "default": "v1", + "required": true, + "enum": [ + "v1" + ] }, - "image": { + "kind": { "type": "string", - "description": "rados image name; see http://releases.k8s.io/HEAD/examples/rbd/README.md#how-to-use-it" + "description": "", + "default": "Policy", + "required": true }, - "keyring": { + "lastModified": { "type": "string", - "description": "keyring is the path to key ring for rados user; default is /etc/ceph/keyring; optional; see http://releases.k8s.io/HEAD/examples/rbd/README.md#how-to-use-it" + "description": "last time that any part of the policy was created" }, - "monitors": { + "metadata": { + "$ref": "#/definitions/kubernetes_ObjectMeta", + "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" + }, + "roles": { "type": "array", - "description": "a collection of Ceph monitors; see http://releases.k8s.io/HEAD/examples/rbd/README.md#how-to-use-it", + "description": "roles held by this policy", "items": { - "type": "string", - "description": "a collection of Ceph monitors; see http://releases.k8s.io/HEAD/examples/rbd/README.md#how-to-use-it" + "$ref": "#/definitions/os_authorization_NamedRole", + "javaType": "io.fabric8.openshift.api.model.NamedRole" } - }, - "pool": { - "type": "string", - "description": "rados pool name; default is rbd; optional; see http://releases.k8s.io/HEAD/examples/rbd/README.md#how-to-use-it" - }, - "readOnly": { - "type": "boolean", - "description": "rbd volume to be mounted with read-only permissions; see http://releases.k8s.io/HEAD/examples/rbd/README.md#how-to-use-it" - }, - "secretRef": { - "$ref": "#/definitions/kubernetes_LocalObjectReference", - "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" - }, - "user": { - "type": "string", - "description": "rados user name; default is admin; optional; see http://releases.k8s.io/HEAD/examples/rbd/README.md#how-to-use-it" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.RBDVolumeSource" + "javaType": "io.fabric8.openshift.api.model.Policy", + "javaInterfaces": [ + "io.fabric8.kubernetes.api.model.HasMetadata" + ] }, - "kubernetes_ReplicationController": { + "os_authorization_PolicyBinding": { "type": "object", "description": "", "properties": { @@ -9895,29 +9006,37 @@ var Kubernetes; "kind": { "type": "string", "description": "", - "default": "ReplicationController", + "default": "PolicyBinding", "required": true }, + "lastModified": { + "type": "string", + "description": "last time that any part of the object was created" + }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, - "spec": { - "$ref": "#/definitions/kubernetes_ReplicationControllerSpec", - "javaType": "io.fabric8.kubernetes.api.model.ReplicationControllerSpec" + "policyRef": { + "$ref": "#/definitions/kubernetes_ObjectReference", + "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, - "status": { - "$ref": "#/definitions/kubernetes_ReplicationControllerStatus", - "javaType": "io.fabric8.kubernetes.api.model.ReplicationControllerStatus" + "roleBindings": { + "type": "array", + "description": "all roleBindings held by this policyBinding", + "items": { + "$ref": "#/definitions/os_authorization_NamedRoleBinding", + "javaType": "io.fabric8.openshift.api.model.NamedRoleBinding" + } } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.ReplicationController", + "javaType": "io.fabric8.openshift.api.model.PolicyBinding", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, - "kubernetes_ReplicationControllerList": { + "os_authorization_PolicyBindingList": { "type": "object", "description": "", "properties": { @@ -9932,16 +9051,16 @@ var Kubernetes; }, "items": { "type": "array", - "description": "list of replication controllers; see http://releases.k8s.io/HEAD/docs/user-guide/replication-controller.md", + "description": "list of policy bindings", "items": { - "$ref": "#/definitions/kubernetes_ReplicationController", - "javaType": "io.fabric8.kubernetes.api.model.ReplicationController" + "$ref": "#/definitions/os_authorization_PolicyBinding", + "javaType": "io.fabric8.openshift.api.model.PolicyBinding" } }, "kind": { "type": "string", "description": "", - "default": "ReplicationControllerList", + "default": "PolicyBindingList", "required": true }, "metadata": { @@ -9950,55 +9069,96 @@ var Kubernetes; } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.ReplicationControllerList", + "javaType": "io.fabric8.openshift.api.model.PolicyBindingList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, - "kubernetes_ReplicationControllerSpec": { + "os_authorization_PolicyList": { "type": "object", "description": "", "properties": { - "replicas": { - "type": "integer", - "description": "number of replicas desired; defaults to 1; see http://releases.k8s.io/HEAD/docs/user-guide/replication-controller.md#what-is-a-replication-controller" + "apiVersion": { + "type": "string", + "description": "", + "default": "v1", + "required": true, + "enum": [ + "v1" + ] }, - "selector": { - "type": "object", - "description": "label keys and values that must match in order to be controlled by this replication controller", - "additionalProperties": { - "type": "string", - "description": "label keys and values that must match in order to be controlled by this replication controller" - }, - "javaType": "java.util.Map\u003cString,String\u003e" + "items": { + "type": "array", + "description": "list of policies", + "items": { + "$ref": "#/definitions/os_authorization_Policy", + "javaType": "io.fabric8.openshift.api.model.Policy" + } }, - "template": { - "$ref": "#/definitions/kubernetes_PodTemplateSpec", - "javaType": "io.fabric8.kubernetes.api.model.PodTemplateSpec" + "kind": { + "type": "string", + "description": "", + "default": "PolicyList", + "required": true + }, + "metadata": { + "$ref": "#/definitions/kubernetes_ListMeta", + "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.ReplicationControllerSpec" - }, - "kubernetes_ReplicationControllerStatus": { + "javaType": "io.fabric8.openshift.api.model.PolicyList", + "javaInterfaces": [ + "io.fabric8.kubernetes.api.model.KubernetesResource", + "io.fabric8.kubernetes.api.model.KubernetesResourceList" + ] + }, + "os_authorization_PolicyRule": { "type": "object", "description": "", "properties": { - "observedGeneration": { - "type": "integer", - "description": "reflects the generation of the most recently observed replication controller", - "javaType": "Long" + "attributeRestrictions": { + "$ref": "#/definitions/kubernetes_runtime_RawExtension", + "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" }, - "replicas": { - "type": "integer", - "description": "most recently oberved number of replicas; see http://releases.k8s.io/HEAD/docs/user-guide/replication-controller.md#what-is-a-replication-controller" + "nonResourceURLs": { + "type": "array", + "description": "set of partial urls that a user should have access to. *s are allowed", + "items": { + "type": "string", + "description": "set of partial urls that a user should have access to. *s are allowed" + } + }, + "resourceNames": { + "type": "array", + "description": "optional white list of names that the rule applies to. An empty set means that everything is allowed.", + "items": { + "type": "string", + "description": "optional white list of names that the rule applies to. An empty set means that everything is allowed." + } + }, + "resources": { + "type": "array", + "description": "list of resources this rule applies to. * represents all resources.", + "items": { + "type": "string", + "description": "list of resources this rule applies to. * represents all resources." + } + }, + "verbs": { + "type": "array", + "description": "list of verbs that apply to ALL the resourceKinds and attributeRestrictions contained in this rule. The verb * represents all kinds.", + "items": { + "type": "string", + "description": "list of verbs that apply to ALL the resourceKinds and attributeRestrictions contained in this rule. The verb * represents all kinds." + } } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.ReplicationControllerStatus" + "javaType": "io.fabric8.openshift.api.model.PolicyRule" }, - "kubernetes_ResourceQuota": { + "os_authorization_Role": { "type": "object", "description": "", "properties": { @@ -10014,29 +9174,29 @@ var Kubernetes; "kind": { "type": "string", "description": "", - "default": "ResourceQuota", + "default": "Role", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, - "spec": { - "$ref": "#/definitions/kubernetes_ResourceQuotaSpec", - "javaType": "io.fabric8.kubernetes.api.model.ResourceQuotaSpec" - }, - "status": { - "$ref": "#/definitions/kubernetes_ResourceQuotaStatus", - "javaType": "io.fabric8.kubernetes.api.model.ResourceQuotaStatus" + "rules": { + "type": "array", + "description": "all the rules for this role", + "items": { + "$ref": "#/definitions/os_authorization_PolicyRule", + "javaType": "io.fabric8.openshift.api.model.PolicyRule" + } } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.ResourceQuota", + "javaType": "io.fabric8.openshift.api.model.Role", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, - "kubernetes_ResourceQuotaList": { + "os_authorization_RoleBinding": { "type": "object", "description": "", "properties": { @@ -10049,172 +9209,192 @@ var Kubernetes; "v1" ] }, - "items": { + "groupNames": { "type": "array", - "description": "items is a list of ResourceQuota objects; see http://releases.k8s.io/HEAD/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota", + "description": "all the groups directly bound to the role", "items": { - "$ref": "#/definitions/kubernetes_ResourceQuota", - "javaType": "io.fabric8.kubernetes.api.model.ResourceQuota" + "type": "string", + "description": "all the groups directly bound to the role" } }, "kind": { "type": "string", "description": "", - "default": "ResourceQuotaList", + "default": "RoleBinding", "required": true }, "metadata": { - "$ref": "#/definitions/kubernetes_ListMeta", - "javaType": "io.fabric8.kubernetes.api.model.ListMeta" + "$ref": "#/definitions/kubernetes_ObjectMeta", + "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" + }, + "roleRef": { + "$ref": "#/definitions/kubernetes_ObjectReference", + "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" + }, + "subjects": { + "type": "array", + "description": "references to subjects bound to the role. Only User", + "items": { + "$ref": "#/definitions/kubernetes_ObjectReference", + "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" + } + }, + "userNames": { + "type": "array", + "description": "all the usernames directly bound to the role", + "items": { + "type": "string", + "description": "all the usernames directly bound to the role" + } } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.ResourceQuotaList", + "javaType": "io.fabric8.openshift.api.model.RoleBinding", "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.KubernetesResource", - "io.fabric8.kubernetes.api.model.KubernetesResourceList" + "io.fabric8.kubernetes.api.model.HasMetadata" ] }, - "kubernetes_ResourceQuotaSpec": { - "type": "object", - "description": "", - "properties": { - "hard": { - "type": "object", - "description": "hard is the set of desired hard limits for each named resource; see http://releases.k8s.io/HEAD/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota", - "additionalProperties": { - "$ref": "#/definitions/kubernetes_resource_Quantity", - "javaType": "io.fabric8.kubernetes.api.model.Quantity" - }, - "javaType": "java.util.Map\u003cString,io.fabric8.kubernetes.api.model.Quantity\u003e" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.ResourceQuotaSpec" - }, - "kubernetes_ResourceQuotaStatus": { + "os_authorization_RoleBindingList": { "type": "object", "description": "", "properties": { - "hard": { - "type": "object", - "description": "hard is the set of enforced hard limits for each named resource; see http://releases.k8s.io/HEAD/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota", - "additionalProperties": { - "$ref": "#/definitions/kubernetes_resource_Quantity", - "javaType": "io.fabric8.kubernetes.api.model.Quantity" - }, - "javaType": "java.util.Map\u003cString,io.fabric8.kubernetes.api.model.Quantity\u003e" + "apiVersion": { + "type": "string", + "description": "", + "default": "v1", + "required": true, + "enum": [ + "v1" + ] }, - "used": { - "type": "object", - "description": "used is the current observed total usage of the resource in the namespace", - "additionalProperties": { - "$ref": "#/definitions/kubernetes_resource_Quantity", - "javaType": "io.fabric8.kubernetes.api.model.Quantity" - }, - "javaType": "java.util.Map\u003cString,io.fabric8.kubernetes.api.model.Quantity\u003e" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.ResourceQuotaStatus" - }, - "kubernetes_ResourceRequirements": { - "type": "object", - "description": "", - "properties": { - "limits": { - "type": "object", - "description": "Maximum amount of compute resources allowed; see http://releases.k8s.io/HEAD/docs/design/resources.md#resource-specifications", - "additionalProperties": { - "$ref": "#/definitions/kubernetes_resource_Quantity", - "javaType": "io.fabric8.kubernetes.api.model.Quantity" - }, - "javaType": "java.util.Map\u003cString,io.fabric8.kubernetes.api.model.Quantity\u003e" + "items": { + "type": "array", + "description": "list of role bindings", + "items": { + "$ref": "#/definitions/os_authorization_RoleBinding", + "javaType": "io.fabric8.openshift.api.model.RoleBinding" + } }, - "requests": { - "type": "object", - "description": "Minimum amount of resources requested; if Requests is omitted for a container", - "additionalProperties": { - "$ref": "#/definitions/kubernetes_resource_Quantity", - "javaType": "io.fabric8.kubernetes.api.model.Quantity" - }, - "javaType": "java.util.Map\u003cString,io.fabric8.kubernetes.api.model.Quantity\u003e" + "kind": { + "type": "string", + "description": "", + "default": "RoleBindingList", + "required": true + }, + "metadata": { + "$ref": "#/definitions/kubernetes_ListMeta", + "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.ResourceRequirements" + "javaType": "io.fabric8.openshift.api.model.RoleBindingList", + "javaInterfaces": [ + "io.fabric8.kubernetes.api.model.KubernetesResource", + "io.fabric8.kubernetes.api.model.KubernetesResourceList" + ] }, - "kubernetes_RunAsUserStrategyOptions": { + "os_authorization_RoleList": { "type": "object", "description": "", "properties": { - "type": { + "apiVersion": { "type": "string", - "description": "strategy used to generate RunAsUser" + "description": "", + "default": "v1", + "required": true, + "enum": [ + "v1" + ] }, - "uid": { - "type": "integer", - "description": "the uid to always run as; required for MustRunAs", - "javaType": "Long" + "items": { + "type": "array", + "description": "list of roles", + "items": { + "$ref": "#/definitions/os_authorization_Role", + "javaType": "io.fabric8.openshift.api.model.Role" + } }, - "uidRangeMax": { - "type": "integer", - "description": "max value for range based allocators", - "javaType": "Long" + "kind": { + "type": "string", + "description": "", + "default": "RoleList", + "required": true }, - "uidRangeMin": { - "type": "integer", - "description": "min value for range based allocators", - "javaType": "Long" + "metadata": { + "$ref": "#/definitions/kubernetes_ListMeta", + "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.RunAsUserStrategyOptions" + "javaType": "io.fabric8.openshift.api.model.RoleList", + "javaInterfaces": [ + "io.fabric8.kubernetes.api.model.KubernetesResource", + "io.fabric8.kubernetes.api.model.KubernetesResourceList" + ] }, - "kubernetes_SELinuxContextStrategyOptions": { + "os_authorization_SubjectAccessReview": { "type": "object", "description": "", "properties": { - "seLinuxOptions": { - "$ref": "#/definitions/kubernetes_SELinuxOptions", - "javaType": "io.fabric8.kubernetes.api.model.SELinuxOptions" - }, - "type": { + "apiVersion": { "type": "string", - "description": "strategy used to generate the SELinux context" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.SELinuxContextStrategyOptions" - }, - "kubernetes_SELinuxOptions": { - "type": "object", - "description": "", - "properties": { - "level": { + "description": "", + "default": "v1", + "required": true, + "enum": [ + "v1" + ] + }, + "content": { + "$ref": "#/definitions/kubernetes_runtime_RawExtension", + "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" + }, + "groups": { + "type": "array", + "description": "optional", + "items": { + "type": "string", + "description": "optional" + } + }, + "kind": { "type": "string", - "description": "the level label to apply to the container; see http://releases.k8s.io/HEAD/docs/user-guide/labels.md" + "description": "", + "default": "SubjectAccessReview", + "required": true }, - "role": { + "namespace": { "type": "string", - "description": "the role label to apply to the container; see http://releases.k8s.io/HEAD/docs/user-guide/labels.md" + "description": "namespace of the action being requested" }, - "type": { + "resource": { "type": "string", - "description": "the type label to apply to the container; see http://releases.k8s.io/HEAD/docs/user-guide/labels.md" + "description": "one of the existing resource types" + }, + "resourceName": { + "type": "string", + "description": "name of the resource being requested for a get or delete" }, "user": { "type": "string", - "description": "the user label to apply to the container; see http://releases.k8s.io/HEAD/docs/user-guide/labels.md" + "description": "optional" + }, + "verb": { + "type": "string", + "description": "one of get" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.SELinuxOptions" + "javaType": "io.fabric8.openshift.api.model.SubjectAccessReview" }, - "kubernetes_Secret": { + "os_authorization_SubjectAccessReviewResponse": { "type": "object", "description": "", "properties": { + "allowed": { + "type": "boolean", + "description": "true if the action would be allowed" + }, "apiVersion": { "type": "string", "description": "", @@ -10224,37 +9404,25 @@ var Kubernetes; "v1" ] }, - "data": { - "type": "object", - "description": "data contains the secret data. Each key must be a valid DNS_SUBDOMAIN or leading dot followed by valid DNS_SUBDOMAIN. Each value must be a base64 encoded string as described in https://tools.ietf.org/html/rfc4648#section-4", - "additionalProperties": { - "type": "string", - "description": "data contains the secret data. Each key must be a valid DNS_SUBDOMAIN or leading dot followed by valid DNS_SUBDOMAIN. Each value must be a base64 encoded string as described in https://tools.ietf.org/html/rfc4648#section-4" - }, - "javaType": "java.util.Map\u003cString,String\u003e" - }, "kind": { "type": "string", "description": "", - "default": "Secret", + "default": "SubjectAccessReviewResponse", "required": true }, - "metadata": { - "$ref": "#/definitions/kubernetes_ObjectMeta", - "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" + "namespace": { + "type": "string", + "description": "the namespace used for the access review" }, - "type": { + "reason": { "type": "string", - "description": "type facilitates programmatic handling of secret data" + "description": "reason is optional" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.Secret", - "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.HasMetadata" - ] + "javaType": "io.fabric8.openshift.api.model.SubjectAccessReviewResponse" }, - "kubernetes_SecretList": { + "os_build_Build": { "type": "object", "description": "", "properties": { @@ -10267,101 +9435,35 @@ var Kubernetes; "v1" ] }, - "items": { - "type": "array", - "description": "items is a list of secret objects; see http://releases.k8s.io/HEAD/docs/user-guide/secrets.md", - "items": { - "$ref": "#/definitions/kubernetes_Secret", - "javaType": "io.fabric8.kubernetes.api.model.Secret" - } - }, "kind": { "type": "string", "description": "", - "default": "SecretList", + "default": "Build", "required": true }, "metadata": { - "$ref": "#/definitions/kubernetes_ListMeta", - "javaType": "io.fabric8.kubernetes.api.model.ListMeta" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.SecretList", - "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.KubernetesResource", - "io.fabric8.kubernetes.api.model.KubernetesResourceList" - ] - }, - "kubernetes_SecretVolumeSource": { - "type": "object", - "description": "", - "properties": { - "secretName": { - "type": "string", - "description": "secretName is the name of a secret in the pod's namespace; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#secrets" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.SecretVolumeSource" - }, - "kubernetes_SecurityContext": { - "type": "object", - "description": "", - "properties": { - "capabilities": { - "$ref": "#/definitions/kubernetes_Capabilities", - "javaType": "io.fabric8.kubernetes.api.model.Capabilities" - }, - "privileged": { - "type": "boolean", - "description": "run the container in privileged mode; see http://releases.k8s.io/HEAD/docs/design/security_context.md#security-context" - }, - "runAsNonRoot": { - "type": "boolean", - "description": "indicates the container must be run as a non-root user either by specifying the runAsUser or in the image specification" + "$ref": "#/definitions/kubernetes_ObjectMeta", + "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, - "runAsUser": { - "type": "integer", - "description": "the user id that runs the first process in the container; see http://releases.k8s.io/HEAD/docs/design/security_context.md#security-context", - "javaType": "Long" + "spec": { + "$ref": "#/definitions/os_build_BuildSpec", + "javaType": "io.fabric8.openshift.api.model.BuildSpec" }, - "seLinuxOptions": { - "$ref": "#/definitions/kubernetes_SELinuxOptions", - "javaType": "io.fabric8.kubernetes.api.model.SELinuxOptions" + "status": { + "$ref": "#/definitions/os_build_BuildStatus", + "javaType": "io.fabric8.openshift.api.model.BuildStatus" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.SecurityContext" + "javaType": "io.fabric8.openshift.api.model.Build", + "javaInterfaces": [ + "io.fabric8.kubernetes.api.model.HasMetadata" + ] }, - "kubernetes_SecurityContextConstraints": { + "os_build_BuildConfig": { "type": "object", "description": "", "properties": { - "allowHostDirVolumePlugin": { - "type": "boolean", - "description": "allow the use of the host dir volume plugin" - }, - "allowHostNetwork": { - "type": "boolean", - "description": "allow the use of the hostNetwork in the pod spec" - }, - "allowHostPorts": { - "type": "boolean", - "description": "allow the use of the host ports in the containers" - }, - "allowPrivilegedContainer": { - "type": "boolean", - "description": "allow containers to run as privileged" - }, - "allowedCapabilities": { - "type": "array", - "description": "capabilities that are allowed to be added", - "items": { - "type": "string", - "description": "capabilities that are allowed to be added" - } - }, "apiVersion": { "type": "string", "description": "", @@ -10371,48 +9473,32 @@ var Kubernetes; "v1" ] }, - "groups": { - "type": "array", - "description": "groups allowed to use this SecurityContextConstraints", - "items": { - "type": "string", - "description": "groups allowed to use this SecurityContextConstraints" - } - }, "kind": { "type": "string", "description": "", - "default": "SecurityContextConstraints", + "default": "BuildConfig", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, - "runAsUser": { - "$ref": "#/definitions/kubernetes_RunAsUserStrategyOptions", - "javaType": "io.fabric8.kubernetes.api.model.RunAsUserStrategyOptions" - }, - "seLinuxContext": { - "$ref": "#/definitions/kubernetes_SELinuxContextStrategyOptions", - "javaType": "io.fabric8.kubernetes.api.model.SELinuxContextStrategyOptions" + "spec": { + "$ref": "#/definitions/os_build_BuildConfigSpec", + "javaType": "io.fabric8.openshift.api.model.BuildConfigSpec" }, - "users": { - "type": "array", - "description": "users allowed to use this SecurityContextConstraints", - "items": { - "type": "string", - "description": "users allowed to use this SecurityContextConstraints" - } + "status": { + "$ref": "#/definitions/os_build_BuildConfigStatus", + "javaType": "io.fabric8.openshift.api.model.BuildConfigStatus" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.SecurityContextConstraints", + "javaType": "io.fabric8.openshift.api.model.BuildConfig", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, - "kubernetes_SecurityContextConstraintsList": { + "os_build_BuildConfigList": { "type": "object", "description": "", "properties": { @@ -10427,16 +9513,16 @@ var Kubernetes; }, "items": { "type": "array", - "description": "", + "description": "list of build configs", "items": { - "$ref": "#/definitions/kubernetes_SecurityContextConstraints", - "javaType": "io.fabric8.kubernetes.api.model.SecurityContextConstraints" + "$ref": "#/definitions/os_build_BuildConfig", + "javaType": "io.fabric8.openshift.api.model.BuildConfig" } }, "kind": { "type": "string", "description": "", - "default": "SecurityContextConstraintsList", + "default": "BuildConfigList", "required": true }, "metadata": { @@ -10445,97 +9531,65 @@ var Kubernetes; } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.SecurityContextConstraintsList", + "javaType": "io.fabric8.openshift.api.model.BuildConfigList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, - "kubernetes_Service": { + "os_build_BuildConfigSpec": { "type": "object", "description": "", "properties": { - "apiVersion": { - "type": "string", - "description": "", - "default": "v1", - "required": true, - "enum": [ - "v1" - ] - }, - "kind": { - "type": "string", - "description": "", - "default": "Service", - "required": true + "output": { + "$ref": "#/definitions/os_build_BuildOutput", + "javaType": "io.fabric8.openshift.api.model.BuildOutput" }, - "metadata": { - "$ref": "#/definitions/kubernetes_ObjectMeta", - "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" + "resources": { + "$ref": "#/definitions/kubernetes_ResourceRequirements", + "javaType": "io.fabric8.kubernetes.api.model.ResourceRequirements" }, - "spec": { - "$ref": "#/definitions/kubernetes_ServiceSpec", - "javaType": "io.fabric8.kubernetes.api.model.ServiceSpec" + "revision": { + "$ref": "#/definitions/os_build_SourceRevision", + "javaType": "io.fabric8.openshift.api.model.SourceRevision" }, - "status": { - "$ref": "#/definitions/kubernetes_ServiceStatus", - "javaType": "io.fabric8.kubernetes.api.model.ServiceStatus" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.Service", - "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.HasMetadata" - ] - }, - "kubernetes_ServiceAccount": { - "type": "object", - "description": "", - "properties": { - "apiVersion": { + "serviceAccount": { "type": "string", - "description": "", - "default": "v1", - "required": true, - "enum": [ - "v1" - ] - }, - "imagePullSecrets": { - "type": "array", - "description": "list of references to secrets in the same namespace available for pulling container images; see http://releases.k8s.io/HEAD/docs/user-guide/secrets.md#manually-specifying-an-imagepullsecret", - "items": { - "$ref": "#/definitions/kubernetes_LocalObjectReference", - "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" - } + "description": "the name of the service account to use to run pods created by the build" }, - "kind": { - "type": "string", - "description": "", - "default": "ServiceAccount", - "required": true + "source": { + "$ref": "#/definitions/os_build_BuildSource", + "javaType": "io.fabric8.openshift.api.model.BuildSource" }, - "metadata": { - "$ref": "#/definitions/kubernetes_ObjectMeta", - "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" + "strategy": { + "$ref": "#/definitions/os_build_BuildStrategy", + "javaType": "io.fabric8.openshift.api.model.BuildStrategy" }, - "secrets": { + "triggers": { "type": "array", - "description": "list of secrets that can be used by pods running as this service account; see http://releases.k8s.io/HEAD/docs/user-guide/secrets.md", + "description": "determines how new builds can be launched from a build config. if no triggers are defined", "items": { - "$ref": "#/definitions/kubernetes_ObjectReference", - "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" + "$ref": "#/definitions/os_build_BuildTriggerPolicy", + "javaType": "io.fabric8.openshift.api.model.BuildTriggerPolicy" } } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.ServiceAccount", - "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.HasMetadata" - ] + "javaType": "io.fabric8.openshift.api.model.BuildConfigSpec" }, - "kubernetes_ServiceAccountList": { + "os_build_BuildConfigStatus": { + "type": "object", + "description": "", + "properties": { + "lastVersion": { + "type": "integer", + "description": "used to inform about number of last triggered build" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.openshift.api.model.BuildConfigStatus" + }, + "os_build_BuildList": { "type": "object", "description": "", "properties": { @@ -10550,16 +9604,16 @@ var Kubernetes; }, "items": { "type": "array", - "description": "list of ServiceAccounts; see http://releases.k8s.io/HEAD/docs/design/service_accounts.md#service-accounts", + "description": "list of builds", "items": { - "$ref": "#/definitions/kubernetes_ServiceAccount", - "javaType": "io.fabric8.kubernetes.api.model.ServiceAccount" + "$ref": "#/definitions/os_build_Build", + "javaType": "io.fabric8.openshift.api.model.Build" } }, "kind": { "type": "string", "description": "", - "default": "ServiceAccountList", + "default": "BuildList", "required": true }, "metadata": { @@ -10568,13 +9622,29 @@ var Kubernetes; } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.ServiceAccountList", + "javaType": "io.fabric8.openshift.api.model.BuildList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, - "kubernetes_ServiceList": { + "os_build_BuildOutput": { + "type": "object", + "description": "", + "properties": { + "pushSecret": { + "$ref": "#/definitions/kubernetes_LocalObjectReference", + "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" + }, + "to": { + "$ref": "#/definitions/kubernetes_ObjectReference", + "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.openshift.api.model.BuildOutput" + }, + "os_build_BuildRequest": { "type": "object", "description": "", "properties": { @@ -10587,821 +9657,762 @@ var Kubernetes; "v1" ] }, - "items": { - "type": "array", - "description": "list of services", - "items": { - "$ref": "#/definitions/kubernetes_Service", - "javaType": "io.fabric8.kubernetes.api.model.Service" - } + "from": { + "$ref": "#/definitions/kubernetes_ObjectReference", + "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "kind": { "type": "string", "description": "", - "default": "ServiceList", + "default": "BuildRequest", "required": true }, + "lastVersion": { + "type": "integer", + "description": "LastVersion of the BuildConfig that triggered this build" + }, "metadata": { - "$ref": "#/definitions/kubernetes_ListMeta", - "javaType": "io.fabric8.kubernetes.api.model.ListMeta" + "$ref": "#/definitions/kubernetes_ObjectMeta", + "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" + }, + "revision": { + "$ref": "#/definitions/os_build_SourceRevision", + "javaType": "io.fabric8.openshift.api.model.SourceRevision" + }, + "triggeredByImage": { + "$ref": "#/definitions/kubernetes_ObjectReference", + "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.ServiceList", + "javaType": "io.fabric8.openshift.api.model.BuildRequest", "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.KubernetesResource", - "io.fabric8.kubernetes.api.model.KubernetesResourceList" + "io.fabric8.kubernetes.api.model.HasMetadata" ] }, - "kubernetes_ServicePort": { + "os_build_BuildSource": { "type": "object", "description": "", "properties": { - "name": { + "contextDir": { "type": "string", - "description": "the name of this port; optional if only one port is defined", - "maxLength": 63, - "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?$" + "description": "specifies sub-directory where the source code for the application exists" }, - "nodePort": { - "type": "integer", - "description": "the port on each node on which this service is exposed when type=NodePort or LoadBalancer; usually assigned by the system; if specified" + "git": { + "$ref": "#/definitions/os_build_GitBuildSource", + "javaType": "io.fabric8.openshift.api.model.GitBuildSource" }, - "port": { - "type": "integer", - "description": "the port number that is exposed" + "sourceSecret": { + "$ref": "#/definitions/kubernetes_LocalObjectReference", + "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" }, - "protocol": { + "type": { "type": "string", - "description": "the protocol used by this port; must be UDP or TCP; TCP if unspecified" - }, - "targetPort": { - "$ref": "#/definitions/kubernetes_util_IntOrString", - "javaType": "io.fabric8.kubernetes.api.model.IntOrString" + "description": "type of source control management system" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.ServicePort" + "javaType": "io.fabric8.openshift.api.model.BuildSource" }, - "kubernetes_ServiceSpec": { + "os_build_BuildSpec": { "type": "object", "description": "", "properties": { - "clusterIP": { + "output": { + "$ref": "#/definitions/os_build_BuildOutput", + "javaType": "io.fabric8.openshift.api.model.BuildOutput" + }, + "resources": { + "$ref": "#/definitions/kubernetes_ResourceRequirements", + "javaType": "io.fabric8.kubernetes.api.model.ResourceRequirements" + }, + "revision": { + "$ref": "#/definitions/os_build_SourceRevision", + "javaType": "io.fabric8.openshift.api.model.SourceRevision" + }, + "serviceAccount": { "type": "string", - "description": "IP address of the service; usually assigned by the system; if specified" + "description": "the name of the service account to use to run pods created by the build" }, - "deprecatedPublicIPs": { - "type": "array", - "description": "deprecated. externally visible IPs (e.g. load balancers) that should be proxied to this service", - "items": { - "type": "string", - "description": "deprecated. externally visible IPs (e.g. load balancers) that should be proxied to this service" - } + "source": { + "$ref": "#/definitions/os_build_BuildSource", + "javaType": "io.fabric8.openshift.api.model.BuildSource" }, - "portalIP": { + "strategy": { + "$ref": "#/definitions/os_build_BuildStrategy", + "javaType": "io.fabric8.openshift.api.model.BuildStrategy" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.openshift.api.model.BuildSpec" + }, + "os_build_BuildStatus": { + "type": "object", + "description": "", + "properties": { + "cancelled": { + "type": "boolean", + "description": "describes if a canceling event was triggered for the build" + }, + "completionTimestamp": { "type": "string", - "description": "deprecated" + "description": "server time when the pod running this build stopped running" }, - "ports": { - "type": "array", - "description": "ports exposed by the service; see http://releases.k8s.io/HEAD/docs/user-guide/services.md#virtual-ips-and-service-proxies", - "items": { - "$ref": "#/definitions/kubernetes_ServicePort", - "javaType": "io.fabric8.kubernetes.api.model.ServicePort" - } + "config": { + "$ref": "#/definitions/kubernetes_ObjectReference", + "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, - "selector": { - "type": "object", - "description": "label keys and values that must match in order to receive traffic for this service; if empty", - "additionalProperties": { - "type": "string", - "description": "label keys and values that must match in order to receive traffic for this service; if empty" - }, - "javaType": "java.util.Map\u003cString,String\u003e" + "duration": { + "type": "integer", + "description": "amount of time the build has been running", + "javaType": "Long" }, - "sessionAffinity": { + "message": { "type": "string", - "description": "enable client IP based session affinity; must be ClientIP or None; defaults to None; see http://releases.k8s.io/HEAD/docs/user-guide/services.md#virtual-ips-and-service-proxies" + "description": "human-readable message indicating details about why the build has this status" }, - "type": { + "phase": { "type": "string", - "description": "type of this service; must be ClusterIP" + "description": "observed point in the build lifecycle" + }, + "startTimestamp": { + "type": "string", + "description": "server time when this build started running in a pod" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.ServiceSpec" + "javaType": "io.fabric8.openshift.api.model.BuildStatus" }, - "kubernetes_ServiceStatus": { + "os_build_BuildStrategy": { "type": "object", "description": "", "properties": { - "loadBalancer": { - "$ref": "#/definitions/kubernetes_LoadBalancerStatus", - "javaType": "io.fabric8.kubernetes.api.model.LoadBalancerStatus" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.ServiceStatus" - }, - "kubernetes_Status": { - "type": "object", - "description": "", - "properties": { - "apiVersion": { - "type": "string", - "description": "", - "default": "v1", - "required": true, - "enum": [ - "v1" - ] - }, - "code": { - "type": "integer", - "description": "suggested HTTP return code for this status; 0 if not set" - }, - "details": { - "$ref": "#/definitions/kubernetes_StatusDetails", - "javaType": "io.fabric8.kubernetes.api.model.StatusDetails" - }, - "kind": { - "type": "string", - "description": "", - "default": "Status", - "required": true - }, - "message": { - "type": "string", - "description": "human-readable description of the status of this operation" + "customStrategy": { + "$ref": "#/definitions/os_build_CustomBuildStrategy", + "javaType": "io.fabric8.openshift.api.model.CustomBuildStrategy" }, - "metadata": { - "$ref": "#/definitions/kubernetes_ListMeta", - "javaType": "io.fabric8.kubernetes.api.model.ListMeta" + "dockerStrategy": { + "$ref": "#/definitions/os_build_DockerBuildStrategy", + "javaType": "io.fabric8.openshift.api.model.DockerBuildStrategy" }, - "reason": { - "type": "string", - "description": "machine-readable description of why this operation is in the 'Failure' status; if this value is empty there is no information available; a reason clarifies an HTTP status code but does not override it" + "sourceStrategy": { + "$ref": "#/definitions/os_build_SourceBuildStrategy", + "javaType": "io.fabric8.openshift.api.model.SourceBuildStrategy" }, - "status": { + "type": { "type": "string", - "description": "status of the operation; either Success" + "description": "identifies the type of build strategy" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.Status" + "javaType": "io.fabric8.openshift.api.model.BuildStrategy" }, - "kubernetes_StatusCause": { + "os_build_BuildTriggerPolicy": { "type": "object", "description": "", "properties": { - "field": { - "type": "string", - "description": "field of the resource that has caused this error" + "generic": { + "$ref": "#/definitions/os_build_WebHookTrigger", + "javaType": "io.fabric8.openshift.api.model.WebHookTrigger" }, - "message": { - "type": "string", - "description": "human-readable description of the cause of the error; this field may be presented as-is to a reader" + "github": { + "$ref": "#/definitions/os_build_WebHookTrigger", + "javaType": "io.fabric8.openshift.api.model.WebHookTrigger" }, - "reason": { + "imageChange": { + "$ref": "#/definitions/os_build_ImageChangeTrigger", + "javaType": "io.fabric8.openshift.api.model.ImageChangeTrigger" + }, + "type": { "type": "string", - "description": "machine-readable description of the cause of the error; if this value is empty there is no information available" + "description": "type of build trigger" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.StatusCause" + "javaType": "io.fabric8.openshift.api.model.BuildTriggerPolicy" }, - "kubernetes_StatusDetails": { + "os_build_CustomBuildStrategy": { "type": "object", "description": "", "properties": { - "causes": { + "env": { "type": "array", - "description": "the Causes array includes more details associated with the StatusReason failure; not all StatusReasons may provide detailed causes", + "description": "additional environment variables you want to pass into a builder container", "items": { - "$ref": "#/definitions/kubernetes_StatusCause", - "javaType": "io.fabric8.kubernetes.api.model.StatusCause" + "$ref": "#/definitions/kubernetes_EnvVar", + "javaType": "io.fabric8.kubernetes.api.model.EnvVar" } }, - "kind": { - "type": "string", - "description": "the kind attribute of the resource associated with the status StatusReason; on some operations may differ from the requested resource Kind; see http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds" + "exposeDockerSocket": { + "type": "boolean", + "description": "allow running Docker commands (and build Docker images) from inside the container" }, - "name": { - "type": "string", - "description": "the name attribute of the resource associated with the status StatusReason (when there is a single name which can be described)" + "forcePull": { + "type": "boolean", + "description": "forces pulling of builder image from remote registry if true" }, - "retryAfterSeconds": { - "type": "integer", - "description": "the number of seconds before the client should attempt to retry this operation" + "from": { + "$ref": "#/definitions/kubernetes_ObjectReference", + "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" + }, + "pullSecret": { + "$ref": "#/definitions/kubernetes_LocalObjectReference", + "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.StatusDetails" + "javaType": "io.fabric8.openshift.api.model.CustomBuildStrategy" }, - "kubernetes_TCPSocketAction": { + "os_build_DockerBuildStrategy": { "type": "object", "description": "", "properties": { - "port": { - "$ref": "#/definitions/kubernetes_util_IntOrString", - "javaType": "io.fabric8.kubernetes.api.model.IntOrString" + "env": { + "type": "array", + "description": "additional environment variables you want to pass into a builder container", + "items": { + "$ref": "#/definitions/kubernetes_EnvVar", + "javaType": "io.fabric8.kubernetes.api.model.EnvVar" + } + }, + "forcePull": { + "type": "boolean", + "description": "forces the source build to pull the image if true" + }, + "from": { + "$ref": "#/definitions/kubernetes_ObjectReference", + "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" + }, + "noCache": { + "type": "boolean", + "description": "if true" + }, + "pullSecret": { + "$ref": "#/definitions/kubernetes_LocalObjectReference", + "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.TCPSocketAction" + "javaType": "io.fabric8.openshift.api.model.DockerBuildStrategy" }, - "kubernetes_TypeMeta": { + "os_build_GitBuildSource": { "type": "object", "description": "", "properties": { - "apiVersion": { + "httpProxy": { "type": "string", - "description": "version of the schema the object should have; see http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#resources" + "description": "specifies a http proxy to be used during git clone operations" }, - "kind": { + "httpsProxy": { "type": "string", - "description": "kind of object" + "description": "specifies a https proxy to be used during git clone operations" + }, + "ref": { + "type": "string", + "description": "identifies the branch/tag/ref to build" + }, + "uri": { + "type": "string", + "description": "points to the source that will be built" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.TypeMeta" + "javaType": "io.fabric8.openshift.api.model.GitBuildSource" }, - "kubernetes_Volume": { + "os_build_GitSourceRevision": { "type": "object", "description": "", "properties": { - "awsElasticBlockStore": { - "$ref": "#/definitions/kubernetes_AWSElasticBlockStoreVolumeSource", - "javaType": "io.fabric8.kubernetes.api.model.AWSElasticBlockStoreVolumeSource" - }, - "cephfs": { - "$ref": "#/definitions/kubernetes_CephFSVolumeSource", - "javaType": "io.fabric8.kubernetes.api.model.CephFSVolumeSource" - }, - "emptyDir": { - "$ref": "#/definitions/kubernetes_EmptyDirVolumeSource", - "javaType": "io.fabric8.kubernetes.api.model.EmptyDirVolumeSource" - }, - "gcePersistentDisk": { - "$ref": "#/definitions/kubernetes_GCEPersistentDiskVolumeSource", - "javaType": "io.fabric8.kubernetes.api.model.GCEPersistentDiskVolumeSource" - }, - "gitRepo": { - "$ref": "#/definitions/kubernetes_GitRepoVolumeSource", - "javaType": "io.fabric8.kubernetes.api.model.GitRepoVolumeSource" - }, - "glusterfs": { - "$ref": "#/definitions/kubernetes_GlusterfsVolumeSource", - "javaType": "io.fabric8.kubernetes.api.model.GlusterfsVolumeSource" - }, - "hostPath": { - "$ref": "#/definitions/kubernetes_HostPathVolumeSource", - "javaType": "io.fabric8.kubernetes.api.model.HostPathVolumeSource" - }, - "iscsi": { - "$ref": "#/definitions/kubernetes_ISCSIVolumeSource", - "javaType": "io.fabric8.kubernetes.api.model.ISCSIVolumeSource" - }, - "metadata": { - "$ref": "#/definitions/kubernetes_MetadataVolumeSource", - "javaType": "io.fabric8.kubernetes.api.model.MetadataVolumeSource" + "author": { + "$ref": "#/definitions/os_build_SourceControlUser", + "javaType": "io.fabric8.openshift.api.model.SourceControlUser" }, - "name": { + "commit": { "type": "string", - "description": "volume name; must be a DNS_LABEL and unique within the pod; see http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#names", - "maxLength": 63, - "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?$" - }, - "nfs": { - "$ref": "#/definitions/kubernetes_NFSVolumeSource", - "javaType": "io.fabric8.kubernetes.api.model.NFSVolumeSource" - }, - "persistentVolumeClaim": { - "$ref": "#/definitions/kubernetes_PersistentVolumeClaimVolumeSource", - "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimVolumeSource" + "description": "hash identifying a specific commit" }, - "rbd": { - "$ref": "#/definitions/kubernetes_RBDVolumeSource", - "javaType": "io.fabric8.kubernetes.api.model.RBDVolumeSource" + "committer": { + "$ref": "#/definitions/os_build_SourceControlUser", + "javaType": "io.fabric8.openshift.api.model.SourceControlUser" }, - "secret": { - "$ref": "#/definitions/kubernetes_SecretVolumeSource", - "javaType": "io.fabric8.kubernetes.api.model.SecretVolumeSource" + "message": { + "type": "string", + "description": "description of a specific commit" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.Volume" + "javaType": "io.fabric8.openshift.api.model.GitSourceRevision" }, - "kubernetes_VolumeMount": { + "os_build_ImageChangeTrigger": { "type": "object", "description": "", "properties": { - "mountPath": { - "type": "string", - "description": "path within the container at which the volume should be mounted" + "from": { + "$ref": "#/definitions/kubernetes_ObjectReference", + "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, - "name": { + "lastTriggeredImageID": { "type": "string", - "description": "name of the volume to mount" - }, - "readOnly": { - "type": "boolean", - "description": "mounted read-only if true" + "description": "used internally to save last used image ID for build" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.VolumeMount" + "javaType": "io.fabric8.openshift.api.model.ImageChangeTrigger" }, - "kubernetes_VolumeSource": { + "os_build_SourceBuildStrategy": { "type": "object", "description": "", "properties": { - "awsElasticBlockStore": { - "$ref": "#/definitions/kubernetes_AWSElasticBlockStoreVolumeSource", - "javaType": "io.fabric8.kubernetes.api.model.AWSElasticBlockStoreVolumeSource" - }, - "cephfs": { - "$ref": "#/definitions/kubernetes_CephFSVolumeSource", - "javaType": "io.fabric8.kubernetes.api.model.CephFSVolumeSource" - }, - "emptyDir": { - "$ref": "#/definitions/kubernetes_EmptyDirVolumeSource", - "javaType": "io.fabric8.kubernetes.api.model.EmptyDirVolumeSource" - }, - "gcePersistentDisk": { - "$ref": "#/definitions/kubernetes_GCEPersistentDiskVolumeSource", - "javaType": "io.fabric8.kubernetes.api.model.GCEPersistentDiskVolumeSource" - }, - "gitRepo": { - "$ref": "#/definitions/kubernetes_GitRepoVolumeSource", - "javaType": "io.fabric8.kubernetes.api.model.GitRepoVolumeSource" - }, - "glusterfs": { - "$ref": "#/definitions/kubernetes_GlusterfsVolumeSource", - "javaType": "io.fabric8.kubernetes.api.model.GlusterfsVolumeSource" - }, - "hostPath": { - "$ref": "#/definitions/kubernetes_HostPathVolumeSource", - "javaType": "io.fabric8.kubernetes.api.model.HostPathVolumeSource" - }, - "iscsi": { - "$ref": "#/definitions/kubernetes_ISCSIVolumeSource", - "javaType": "io.fabric8.kubernetes.api.model.ISCSIVolumeSource" + "env": { + "type": "array", + "description": "additional environment variables you want to pass into a builder container", + "items": { + "$ref": "#/definitions/kubernetes_EnvVar", + "javaType": "io.fabric8.kubernetes.api.model.EnvVar" + } }, - "metadata": { - "$ref": "#/definitions/kubernetes_MetadataVolumeSource", - "javaType": "io.fabric8.kubernetes.api.model.MetadataVolumeSource" + "forcePull": { + "type": "boolean", + "description": "forces the source build to pull the image if true" }, - "nfs": { - "$ref": "#/definitions/kubernetes_NFSVolumeSource", - "javaType": "io.fabric8.kubernetes.api.model.NFSVolumeSource" + "from": { + "$ref": "#/definitions/kubernetes_ObjectReference", + "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, - "persistentVolumeClaim": { - "$ref": "#/definitions/kubernetes_PersistentVolumeClaimVolumeSource", - "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimVolumeSource" + "incremental": { + "type": "boolean", + "description": "forces the source build to do incremental builds if true" }, - "rbd": { - "$ref": "#/definitions/kubernetes_RBDVolumeSource", - "javaType": "io.fabric8.kubernetes.api.model.RBDVolumeSource" + "pullSecret": { + "$ref": "#/definitions/kubernetes_LocalObjectReference", + "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" }, - "secret": { - "$ref": "#/definitions/kubernetes_SecretVolumeSource", - "javaType": "io.fabric8.kubernetes.api.model.SecretVolumeSource" + "scripts": { + "type": "string", + "description": "location of the source scripts" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.VolumeSource" + "javaType": "io.fabric8.openshift.api.model.SourceBuildStrategy" }, - "kubernetes_config_AuthInfo": { + "os_build_SourceControlUser": { "type": "object", "description": "", "properties": { - "client-certificate": { - "type": "string", - "description": "" - }, - "client-certificate-data": { - "type": "string", - "description": "" - }, - "client-key": { - "type": "string", - "description": "" - }, - "client-key-data": { - "type": "string", - "description": "" - }, - "extensions": { - "type": "array", - "description": "", - "items": { - "$ref": "#/definitions/kubernetes_config_NamedExtension", - "javaType": "io.fabric8.kubernetes.api.model.NamedExtension" - } - }, - "password": { - "type": "string", - "description": "" - }, - "token": { + "email": { "type": "string", - "description": "" + "description": "e-mail of the source control user" }, - "username": { + "name": { "type": "string", - "description": "" + "description": "name of the source control user" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.AuthInfo" + "javaType": "io.fabric8.openshift.api.model.SourceControlUser" }, - "kubernetes_config_Cluster": { + "os_build_SourceRevision": { "type": "object", "description": "", "properties": { - "api-version": { - "type": "string", - "description": "" - }, - "certificate-authority": { - "type": "string", - "description": "" - }, - "certificate-authority-data": { - "type": "string", - "description": "" - }, - "extensions": { - "type": "array", - "description": "", - "items": { - "$ref": "#/definitions/kubernetes_config_NamedExtension", - "javaType": "io.fabric8.kubernetes.api.model.NamedExtension" - } - }, - "insecure-skip-tls-verify": { - "type": "boolean", - "description": "" + "git": { + "$ref": "#/definitions/os_build_GitSourceRevision", + "javaType": "io.fabric8.openshift.api.model.GitSourceRevision" }, - "server": { + "type": { "type": "string", - "description": "" + "description": "type of the build source" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.Cluster" + "javaType": "io.fabric8.openshift.api.model.SourceRevision" }, - "kubernetes_config_Config": { + "os_build_WebHookTrigger": { "type": "object", "description": "", "properties": { - "apiVersion": { - "type": "string", - "description": "" - }, - "clusters": { - "type": "array", - "description": "", - "items": { - "$ref": "#/definitions/kubernetes_config_NamedCluster", - "javaType": "io.fabric8.kubernetes.api.model.NamedCluster" - } - }, - "contexts": { - "type": "array", - "description": "", - "items": { - "$ref": "#/definitions/kubernetes_config_NamedContext", - "javaType": "io.fabric8.kubernetes.api.model.NamedContext" - } - }, - "current-context": { - "type": "string", - "description": "" - }, - "extensions": { - "type": "array", - "description": "", - "items": { - "$ref": "#/definitions/kubernetes_config_NamedExtension", - "javaType": "io.fabric8.kubernetes.api.model.NamedExtension" - } - }, - "kind": { + "secret": { "type": "string", - "description": "" - }, - "preferences": { - "$ref": "#/definitions/kubernetes_config_Preferences", - "javaType": "io.fabric8.kubernetes.api.model.Preferences" - }, - "users": { - "type": "array", - "description": "", - "items": { - "$ref": "#/definitions/kubernetes_config_NamedAuthInfo", - "javaType": "io.fabric8.kubernetes.api.model.NamedAuthInfo" - } + "description": "secret used to validate requests" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.Config" + "javaType": "io.fabric8.openshift.api.model.WebHookTrigger" }, - "kubernetes_config_Context": { + "os_deploy_CustomDeploymentStrategyParams": { "type": "object", "description": "", "properties": { - "cluster": { - "type": "string", - "description": "" - }, - "extensions": { + "command": { "type": "array", - "description": "", + "description": "optionally overrides the container command (default is specified by the image)", "items": { - "$ref": "#/definitions/kubernetes_config_NamedExtension", - "javaType": "io.fabric8.kubernetes.api.model.NamedExtension" + "type": "string", + "description": "optionally overrides the container command (default is specified by the image)" } }, - "namespace": { - "type": "string", - "description": "" + "environment": { + "type": "array", + "description": "environment variables provided to the deployment process container", + "items": { + "$ref": "#/definitions/kubernetes_EnvVar", + "javaType": "io.fabric8.kubernetes.api.model.EnvVar" + } }, - "user": { + "image": { "type": "string", - "description": "" + "description": "a Docker image which can carry out a deployment" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.Context" + "javaType": "io.fabric8.openshift.api.model.CustomDeploymentStrategyParams" }, - "kubernetes_config_NamedAuthInfo": { + "os_deploy_DeploymentCause": { "type": "object", "description": "", "properties": { - "name": { - "type": "string", - "description": "" + "imageTrigger": { + "$ref": "#/definitions/os_deploy_DeploymentCauseImageTrigger", + "javaType": "io.fabric8.openshift.api.model.DeploymentCauseImageTrigger" }, - "user": { - "$ref": "#/definitions/kubernetes_config_AuthInfo", - "javaType": "io.fabric8.kubernetes.api.model.AuthInfo" + "type": { + "type": "string", + "description": "the type of trigger that resulted in a new deployment" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.NamedAuthInfo" + "javaType": "io.fabric8.openshift.api.model.DeploymentCause" }, - "kubernetes_config_NamedCluster": { + "os_deploy_DeploymentCauseImageTrigger": { "type": "object", "description": "", "properties": { - "cluster": { - "$ref": "#/definitions/kubernetes_config_Cluster", - "javaType": "io.fabric8.kubernetes.api.model.Cluster" - }, - "name": { - "type": "string", - "description": "" + "from": { + "$ref": "#/definitions/kubernetes_ObjectReference", + "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.NamedCluster" + "javaType": "io.fabric8.openshift.api.model.DeploymentCauseImageTrigger" }, - "kubernetes_config_NamedContext": { + "os_deploy_DeploymentConfig": { "type": "object", "description": "", "properties": { - "context": { - "$ref": "#/definitions/kubernetes_config_Context", - "javaType": "io.fabric8.kubernetes.api.model.Context" - }, - "name": { + "apiVersion": { "type": "string", - "description": "" + "description": "", + "default": "v1", + "required": true, + "enum": [ + "v1" + ] + }, + "kind": { + "type": "string", + "description": "", + "default": "DeploymentConfig", + "required": true + }, + "metadata": { + "$ref": "#/definitions/kubernetes_ObjectMeta", + "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/os_deploy_DeploymentConfigSpec", + "javaType": "io.fabric8.openshift.api.model.DeploymentConfigSpec" + }, + "status": { + "$ref": "#/definitions/os_deploy_DeploymentConfigStatus", + "javaType": "io.fabric8.openshift.api.model.DeploymentConfigStatus" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.NamedContext" + "javaType": "io.fabric8.openshift.api.model.DeploymentConfig", + "javaInterfaces": [ + "io.fabric8.kubernetes.api.model.HasMetadata" + ] }, - "kubernetes_config_NamedExtension": { + "os_deploy_DeploymentConfigList": { "type": "object", "description": "", "properties": { - "extension": { - "$ref": "#/definitions/kubernetes_runtime_RawExtension", - "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" + "apiVersion": { + "type": "string", + "description": "", + "default": "v1", + "required": true, + "enum": [ + "v1" + ] }, - "name": { + "items": { + "type": "array", + "description": "a list of deployment configs", + "items": { + "$ref": "#/definitions/os_deploy_DeploymentConfig", + "javaType": "io.fabric8.openshift.api.model.DeploymentConfig" + } + }, + "kind": { "type": "string", - "description": "" + "description": "", + "default": "DeploymentConfigList", + "required": true + }, + "metadata": { + "$ref": "#/definitions/kubernetes_ListMeta", + "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.NamedExtension" + "javaType": "io.fabric8.openshift.api.model.DeploymentConfigList", + "javaInterfaces": [ + "io.fabric8.kubernetes.api.model.KubernetesResource", + "io.fabric8.kubernetes.api.model.KubernetesResourceList" + ] }, - "kubernetes_config_Preferences": { + "os_deploy_DeploymentConfigSpec": { "type": "object", "description": "", "properties": { - "colors": { - "type": "boolean", - "description": "" + "replicas": { + "type": "integer", + "description": "the desired number of replicas" }, - "extensions": { + "selector": { + "type": "object", + "description": "a label query over pods that should match the replicas count", + "additionalProperties": { + "type": "string", + "description": "a label query over pods that should match the replicas count" + }, + "javaType": "java.util.Map\u003cString,String\u003e" + }, + "strategy": { + "$ref": "#/definitions/os_deploy_DeploymentStrategy", + "javaType": "io.fabric8.openshift.api.model.DeploymentStrategy" + }, + "template": { + "$ref": "#/definitions/kubernetes_PodTemplateSpec", + "javaType": "io.fabric8.kubernetes.api.model.PodTemplateSpec" + }, + "triggers": { "type": "array", - "description": "", + "description": "how new deployments are triggered", "items": { - "$ref": "#/definitions/kubernetes_config_NamedExtension", - "javaType": "io.fabric8.kubernetes.api.model.NamedExtension" + "$ref": "#/definitions/os_deploy_DeploymentTriggerPolicy", + "javaType": "io.fabric8.openshift.api.model.DeploymentTriggerPolicy" } } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.Preferences" + "javaType": "io.fabric8.openshift.api.model.DeploymentConfigSpec" }, - "kubernetes_resource_Quantity": { + "os_deploy_DeploymentConfigStatus": { "type": "object", "description": "", "properties": { - "Amount": { - "$ref": "#/definitions/speter_inf_Dec", - "javaType": "io.fabric8.openshift.api.model.Dec" + "details": { + "$ref": "#/definitions/os_deploy_DeploymentDetails", + "javaType": "io.fabric8.openshift.api.model.DeploymentDetails" }, - "Format": { - "type": "string", - "description": "" + "latestVersion": { + "type": "integer", + "description": "used to determine whether the current deployment is out of sync" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.Quantity" + "javaType": "io.fabric8.openshift.api.model.DeploymentConfigStatus" }, - "kubernetes_runtime_RawExtension": { + "os_deploy_DeploymentDetails": { "type": "object", "description": "", "properties": { - "RawJSON": { + "causes": { + "type": "array", + "description": "extended data associated with all the causes for creating a new deployment", + "items": { + "$ref": "#/definitions/os_deploy_DeploymentCause", + "javaType": "io.fabric8.openshift.api.model.DeploymentCause" + } + }, + "message": { "type": "string", - "description": "" + "description": "a user specified change message" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" + "javaType": "io.fabric8.openshift.api.model.DeploymentDetails" }, - "kubernetes_util_IntOrString": { + "os_deploy_DeploymentStrategy": { "type": "object", "description": "", "properties": { - "IntVal": { - "type": "integer", - "description": "" + "customParams": { + "$ref": "#/definitions/os_deploy_CustomDeploymentStrategyParams", + "javaType": "io.fabric8.openshift.api.model.CustomDeploymentStrategyParams" }, - "Kind": { - "type": "integer", - "description": "" + "recreateParams": { + "$ref": "#/definitions/os_deploy_RecreateDeploymentStrategyParams", + "javaType": "io.fabric8.openshift.api.model.RecreateDeploymentStrategyParams" }, - "StrVal": { + "resources": { + "$ref": "#/definitions/kubernetes_ResourceRequirements", + "javaType": "io.fabric8.kubernetes.api.model.ResourceRequirements" + }, + "rollingParams": { + "$ref": "#/definitions/os_deploy_RollingDeploymentStrategyParams", + "javaType": "io.fabric8.openshift.api.model.RollingDeploymentStrategyParams" + }, + "type": { "type": "string", - "description": "" + "description": "the name of a deployment strategy" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.IntOrString" + "javaType": "io.fabric8.openshift.api.model.DeploymentStrategy" }, - "kubernetes_watch_WatchEvent": { + "os_deploy_DeploymentTriggerImageChangeParams": { "type": "object", "description": "", "properties": { - "object": { - "$ref": "#/definitions/kubernetes_runtime_RawExtension", - "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" + "automatic": { + "type": "boolean", + "description": "whether detection of a new tag value should trigger a deployment" }, - "type": { + "containerNames": { + "type": "array", + "description": "restricts tag updates to a set of container names in the pod", + "items": { + "type": "string", + "description": "restricts tag updates to a set of container names in the pod" + } + }, + "from": { + "$ref": "#/definitions/kubernetes_ObjectReference", + "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" + }, + "lastTriggeredImage": { "type": "string", - "description": "the type of watch event; may be ADDED" + "description": "the last image to be triggered" } }, "additionalProperties": true, - "javaType": "io.fabric8.kubernetes.api.model.WatchEvent" + "javaType": "io.fabric8.openshift.api.model.DeploymentTriggerImageChangeParams" }, - "os_authorization_AuthorizationAttributes": { + "os_deploy_DeploymentTriggerPolicy": { "type": "object", "description": "", "properties": { - "content": { - "$ref": "#/definitions/kubernetes_runtime_RawExtension", - "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" - }, - "namespace": { - "type": "string", - "description": "namespace of the action being requested" - }, - "resource": { - "type": "string", - "description": "one of the existing resource types" - }, - "resourceName": { - "type": "string", - "description": "name of the resource being requested for a get or delete" + "imageChangeParams": { + "$ref": "#/definitions/os_deploy_DeploymentTriggerImageChangeParams", + "javaType": "io.fabric8.openshift.api.model.DeploymentTriggerImageChangeParams" }, - "verb": { + "type": { "type": "string", - "description": "one of get" + "description": "the type of the trigger" } }, "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.AuthorizationAttributes" + "javaType": "io.fabric8.openshift.api.model.DeploymentTriggerPolicy" }, - "os_authorization_ClusterPolicy": { + "os_deploy_ExecNewPodHook": { "type": "object", "description": "", "properties": { - "apiVersion": { - "type": "string", - "description": "", - "default": "v1", - "required": true, - "enum": [ - "v1" - ] - }, - "kind": { - "type": "string", - "description": "", - "default": "ClusterPolicy", - "required": true + "command": { + "type": "array", + "description": "the hook command and its arguments", + "items": { + "type": "string", + "description": "the hook command and its arguments" + } }, - "lastModified": { + "containerName": { "type": "string", - "description": "last time any part of the object was created" - }, - "metadata": { - "$ref": "#/definitions/kubernetes_ObjectMeta", - "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" + "description": "the name of a container from the pod template whose image will be used for the hook container" }, - "roles": { + "env": { "type": "array", - "description": "all the roles held by this policy", + "description": "environment variables provided to the hook container", "items": { - "$ref": "#/definitions/os_authorization_NamedClusterRole", - "javaType": "io.fabric8.openshift.api.model.NamedClusterRole" + "$ref": "#/definitions/kubernetes_EnvVar", + "javaType": "io.fabric8.kubernetes.api.model.EnvVar" } } }, "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.ClusterPolicy", - "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.HasMetadata" - ] + "javaType": "io.fabric8.openshift.api.model.ExecNewPodHook" }, - "os_authorization_ClusterPolicyBinding": { + "os_deploy_LifecycleHook": { "type": "object", "description": "", "properties": { - "apiVersion": { - "type": "string", - "description": "", - "default": "v1", - "required": true, - "enum": [ - "v1" - ] + "execNewPod": { + "$ref": "#/definitions/os_deploy_ExecNewPodHook", + "javaType": "io.fabric8.openshift.api.model.ExecNewPodHook" }, - "kind": { + "failurePolicy": { "type": "string", - "description": "", - "default": "ClusterPolicyBinding", - "required": true + "description": "what action to take if the hook fails" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.openshift.api.model.LifecycleHook" + }, + "os_deploy_RecreateDeploymentStrategyParams": { + "type": "object", + "description": "", + "properties": { + "post": { + "$ref": "#/definitions/os_deploy_LifecycleHook", + "javaType": "io.fabric8.openshift.api.model.LifecycleHook" }, - "lastModified": { - "type": "string", - "description": "last time any part of the object was created" + "pre": { + "$ref": "#/definitions/os_deploy_LifecycleHook", + "javaType": "io.fabric8.openshift.api.model.LifecycleHook" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.openshift.api.model.RecreateDeploymentStrategyParams" + }, + "os_deploy_RollingDeploymentStrategyParams": { + "type": "object", + "description": "", + "properties": { + "intervalSeconds": { + "type": "integer", + "description": "the time to wait between polling deployment status after update", + "javaType": "Long" }, - "metadata": { - "$ref": "#/definitions/kubernetes_ObjectMeta", - "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" + "post": { + "$ref": "#/definitions/os_deploy_LifecycleHook", + "javaType": "io.fabric8.openshift.api.model.LifecycleHook" }, - "policyRef": { - "$ref": "#/definitions/kubernetes_ObjectReference", - "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" + "pre": { + "$ref": "#/definitions/os_deploy_LifecycleHook", + "javaType": "io.fabric8.openshift.api.model.LifecycleHook" }, - "roleBindings": { - "type": "array", - "description": "all the role bindings held by this policy", - "items": { - "$ref": "#/definitions/os_authorization_NamedClusterRoleBinding", - "javaType": "io.fabric8.openshift.api.model.NamedClusterRoleBinding" - } + "timeoutSeconds": { + "type": "integer", + "description": "the time to wait for updates before giving up", + "javaType": "Long" + }, + "updatePercent": { + "type": "integer", + "description": "the percentage of replicas to scale up or down each interval (negative value switches scale order to down/up instead of up/down)" + }, + "updatePeriodSeconds": { + "type": "integer", + "description": "the time to wait between individual pod updates", + "javaType": "Long" } }, "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.ClusterPolicyBinding", - "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.HasMetadata" - ] + "javaType": "io.fabric8.openshift.api.model.RollingDeploymentStrategyParams" }, - "os_authorization_ClusterPolicyBindingList": { + "os_image_Image": { "type": "object", "description": "", "properties": { @@ -11414,33 +10425,40 @@ var Kubernetes; "v1" ] }, - "items": { - "type": "array", - "description": "list of cluster policy bindings", - "items": { - "$ref": "#/definitions/os_authorization_ClusterPolicyBinding", - "javaType": "io.fabric8.openshift.api.model.ClusterPolicyBinding" - } + "dockerImageManifest": { + "type": "string", + "description": "raw JSON of the manifest" + }, + "dockerImageMetadata": { + "$ref": "#/definitions/kubernetes_runtime_RawExtension", + "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" + }, + "dockerImageMetadataVersion": { + "type": "string", + "description": "conveys version of the object" + }, + "dockerImageReference": { + "type": "string", + "description": "string that can be used to pull this image" }, "kind": { "type": "string", "description": "", - "default": "ClusterPolicyBindingList", + "default": "Image", "required": true }, "metadata": { - "$ref": "#/definitions/kubernetes_ListMeta", - "javaType": "io.fabric8.kubernetes.api.model.ListMeta" + "$ref": "#/definitions/kubernetes_ObjectMeta", + "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" } }, "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.ClusterPolicyBindingList", + "javaType": "io.fabric8.openshift.api.model.Image", "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.KubernetesResource", - "io.fabric8.kubernetes.api.model.KubernetesResourceList" + "io.fabric8.kubernetes.api.model.HasMetadata" ] }, - "os_authorization_ClusterPolicyList": { + "os_image_ImageList": { "type": "object", "description": "", "properties": { @@ -11455,16 +10473,16 @@ var Kubernetes; }, "items": { "type": "array", - "description": "list of cluster policies", + "description": "list of image objects", "items": { - "$ref": "#/definitions/os_authorization_ClusterPolicy", - "javaType": "io.fabric8.openshift.api.model.ClusterPolicy" + "$ref": "#/definitions/os_image_Image", + "javaType": "io.fabric8.openshift.api.model.Image" } }, "kind": { "type": "string", "description": "", - "default": "ClusterPolicyList", + "default": "ImageList", "required": true }, "metadata": { @@ -11473,13 +10491,13 @@ var Kubernetes; } }, "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.ClusterPolicyList", + "javaType": "io.fabric8.openshift.api.model.ImageList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, - "os_authorization_ClusterRole": { + "os_image_ImageStream": { "type": "object", "description": "", "properties": { @@ -11495,29 +10513,29 @@ var Kubernetes; "kind": { "type": "string", "description": "", - "default": "ClusterRole", + "default": "ImageStream", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, - "rules": { - "type": "array", - "description": "list of policy rules", - "items": { - "$ref": "#/definitions/os_authorization_PolicyRule", - "javaType": "io.fabric8.openshift.api.model.PolicyRule" - } + "spec": { + "$ref": "#/definitions/os_image_ImageStreamSpec", + "javaType": "io.fabric8.openshift.api.model.ImageStreamSpec" + }, + "status": { + "$ref": "#/definitions/os_image_ImageStreamStatus", + "javaType": "io.fabric8.openshift.api.model.ImageStreamStatus" } }, "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.ClusterRole", + "javaType": "io.fabric8.openshift.api.model.ImageStream", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, - "os_authorization_ClusterRoleBinding": { + "os_image_ImageStreamList": { "type": "object", "description": "", "properties": { @@ -11530,199 +10548,138 @@ var Kubernetes; "v1" ] }, - "groupNames": { + "items": { "type": "array", - "description": "all the groups directly bound to the role", + "description": "list of image stream objects", "items": { - "type": "string", - "description": "all the groups directly bound to the role" + "$ref": "#/definitions/os_image_ImageStream", + "javaType": "io.fabric8.openshift.api.model.ImageStream" } }, "kind": { "type": "string", "description": "", - "default": "ClusterRoleBinding", + "default": "ImageStreamList", "required": true }, "metadata": { - "$ref": "#/definitions/kubernetes_ObjectMeta", - "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" - }, - "roleRef": { - "$ref": "#/definitions/kubernetes_ObjectReference", - "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" - }, - "subjects": { - "type": "array", - "description": "references to subjects bound to the role. Only User", - "items": { - "$ref": "#/definitions/kubernetes_ObjectReference", - "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" - } - }, - "userNames": { - "type": "array", - "description": "all user names directly bound to the role", - "items": { - "type": "string", - "description": "all user names directly bound to the role" - } + "$ref": "#/definitions/kubernetes_ListMeta", + "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.ClusterRoleBinding", + "javaType": "io.fabric8.openshift.api.model.ImageStreamList", "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.HasMetadata" + "io.fabric8.kubernetes.api.model.KubernetesResource", + "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, - "os_authorization_ClusterRoleBindingList": { + "os_image_ImageStreamSpec": { "type": "object", "description": "", "properties": { - "apiVersion": { + "dockerImageRepository": { "type": "string", - "description": "", - "default": "v1", - "required": true, - "enum": [ - "v1" - ] + "description": "optional field if specified this stream is backed by a Docker repository on this server" }, - "items": { + "tags": { "type": "array", - "description": "list of cluster role bindings", + "description": "map arbitrary string values to specific image locators", "items": { - "$ref": "#/definitions/os_authorization_ClusterRoleBinding", - "javaType": "io.fabric8.openshift.api.model.ClusterRoleBinding" + "$ref": "#/definitions/os_image_NamedTagReference", + "javaType": "io.fabric8.openshift.api.model.NamedTagReference" } - }, - "kind": { - "type": "string", - "description": "", - "default": "ClusterRoleBindingList", - "required": true - }, - "metadata": { - "$ref": "#/definitions/kubernetes_ListMeta", - "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.ClusterRoleBindingList", - "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.KubernetesResource", - "io.fabric8.kubernetes.api.model.KubernetesResourceList" - ] + "javaType": "io.fabric8.openshift.api.model.ImageStreamSpec" }, - "os_authorization_LocalSubjectAccessReview": { + "os_image_ImageStreamStatus": { "type": "object", "description": "", "properties": { - "TypeMeta": { - "$ref": "#/definitions/kubernetes_TypeMeta", - "javaType": "io.fabric8.kubernetes.api.model.TypeMeta" - }, - "content": { - "$ref": "#/definitions/kubernetes_runtime_RawExtension", - "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" + "dockerImageRepository": { + "type": "string", + "description": "represents the effective location this stream may be accessed at" }, - "groups": { + "tags": { "type": "array", - "description": "optional", + "description": "historical record of images associated with each tag", "items": { - "type": "string", - "description": "optional" + "$ref": "#/definitions/os_image_NamedTagEventList", + "javaType": "io.fabric8.openshift.api.model.NamedTagEventList" } - }, - "namespace": { - "type": "string", - "description": "namespace of the action being requested" - }, - "resource": { - "type": "string", - "description": "one of the existing resource types" - }, - "resourceName": { - "type": "string", - "description": "name of the resource being requested for a get or delete" - }, - "user": { - "type": "string", - "description": "optional" - }, - "verb": { - "type": "string", - "description": "one of get" } }, "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.LocalSubjectAccessReview" + "javaType": "io.fabric8.openshift.api.model.ImageStreamStatus" }, - "os_authorization_NamedClusterRole": { + "os_image_NamedTagEventList": { "type": "object", "description": "", "properties": { - "name": { - "type": "string", - "description": "name of the cluster role" + "items": { + "type": "array", + "description": "list of tag events related to the tag", + "items": { + "$ref": "#/definitions/os_image_TagEvent", + "javaType": "io.fabric8.openshift.api.model.TagEvent" + } }, - "role": { - "$ref": "#/definitions/os_authorization_ClusterRole", - "javaType": "io.fabric8.openshift.api.model.ClusterRole" + "tag": { + "type": "string", + "description": "the tag" } }, "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.NamedClusterRole" + "javaType": "io.fabric8.openshift.api.model.NamedTagEventList" }, - "os_authorization_NamedClusterRoleBinding": { + "os_image_NamedTagReference": { "type": "object", "description": "", "properties": { + "annotations": { + "type": "object", + "description": "annotations associated with images using this tag", + "additionalProperties": { + "type": "string", + "description": "annotations associated with images using this tag" + }, + "javaType": "java.util.Map\u003cString,String\u003e" + }, + "from": { + "$ref": "#/definitions/kubernetes_ObjectReference", + "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" + }, "name": { "type": "string", - "description": "name of the cluster role binding" - }, - "roleBinding": { - "$ref": "#/definitions/os_authorization_ClusterRoleBinding", - "javaType": "io.fabric8.openshift.api.model.ClusterRoleBinding" + "description": "name of tag" } }, "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.NamedClusterRoleBinding" + "javaType": "io.fabric8.openshift.api.model.NamedTagReference" }, - "os_authorization_NamedRole": { + "os_image_TagEvent": { "type": "object", "description": "", "properties": { - "name": { + "created": { "type": "string", - "description": "name of the role" + "description": "when the event was created" }, - "role": { - "$ref": "#/definitions/os_authorization_Role", - "javaType": "io.fabric8.openshift.api.model.Role" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.NamedRole" - }, - "os_authorization_NamedRoleBinding": { - "type": "object", - "description": "", - "properties": { - "name": { + "dockerImageReference": { "type": "string", - "description": "name of the roleBinding" + "description": "the string that can be used to pull this image" }, - "roleBinding": { - "$ref": "#/definitions/os_authorization_RoleBinding", - "javaType": "io.fabric8.openshift.api.model.RoleBinding" + "image": { + "type": "string", + "description": "the image" } }, "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.NamedRoleBinding" + "javaType": "io.fabric8.openshift.api.model.TagEvent" }, - "os_authorization_Policy": { + "os_oauth_OAuthAccessToken": { "type": "object", "description": "", "properties": { @@ -11735,36 +10692,61 @@ var Kubernetes; "v1" ] }, + "authorizeToken": { + "type": "string", + "description": "contains the token that authorized this token" + }, + "clientName": { + "type": "string", + "description": "references the client that created this token" + }, + "expiresIn": { + "type": "integer", + "description": "is the seconds from creation time before this token expires", + "javaType": "Long" + }, "kind": { "type": "string", "description": "", - "default": "Policy", + "default": "OAuthAccessToken", "required": true }, - "lastModified": { - "type": "string", - "description": "last time that any part of the policy was created" - }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, - "roles": { + "redirectURI": { + "type": "string", + "description": "redirection URI associated with the token" + }, + "refreshToken": { + "type": "string", + "description": "optional value by which this token can be renewed" + }, + "scopes": { "type": "array", - "description": "roles held by this policy", + "description": "list of requested scopes", "items": { - "$ref": "#/definitions/os_authorization_NamedRole", - "javaType": "io.fabric8.openshift.api.model.NamedRole" + "type": "string", + "description": "list of requested scopes" } + }, + "userName": { + "type": "string", + "description": "user name associated with this token" + }, + "userUID": { + "type": "string", + "description": "unique UID associated with this token" } }, "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.Policy", + "javaType": "io.fabric8.openshift.api.model.OAuthAccessToken", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, - "os_authorization_PolicyBinding": { + "os_oauth_OAuthAccessTokenList": { "type": "object", "description": "", "properties": { @@ -11777,40 +10759,33 @@ var Kubernetes; "v1" ] }, + "items": { + "type": "array", + "description": "list of oauth access tokens", + "items": { + "$ref": "#/definitions/os_oauth_OAuthAccessToken", + "javaType": "io.fabric8.openshift.api.model.OAuthAccessToken" + } + }, "kind": { "type": "string", "description": "", - "default": "PolicyBinding", + "default": "OAuthAccessTokenList", "required": true }, - "lastModified": { - "type": "string", - "description": "last time that any part of the object was created" - }, "metadata": { - "$ref": "#/definitions/kubernetes_ObjectMeta", - "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" - }, - "policyRef": { - "$ref": "#/definitions/kubernetes_ObjectReference", - "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" - }, - "roleBindings": { - "type": "array", - "description": "all roleBindings held by this policyBinding", - "items": { - "$ref": "#/definitions/os_authorization_NamedRoleBinding", - "javaType": "io.fabric8.openshift.api.model.NamedRoleBinding" - } + "$ref": "#/definitions/kubernetes_ListMeta", + "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.PolicyBinding", + "javaType": "io.fabric8.openshift.api.model.OAuthAccessTokenList", "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.HasMetadata" + "io.fabric8.kubernetes.api.model.KubernetesResource", + "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, - "os_authorization_PolicyBindingList": { + "os_oauth_OAuthAuthorizeToken": { "type": "object", "description": "", "properties": { @@ -11823,33 +10798,57 @@ var Kubernetes; "v1" ] }, - "items": { - "type": "array", - "description": "list of policy bindings", - "items": { - "$ref": "#/definitions/os_authorization_PolicyBinding", - "javaType": "io.fabric8.openshift.api.model.PolicyBinding" - } + "clientName": { + "type": "string", + "description": "references the client that created this token" + }, + "expiresIn": { + "type": "integer", + "description": "seconds from creation time before this token expires", + "javaType": "Long" }, "kind": { "type": "string", "description": "", - "default": "PolicyBindingList", + "default": "OAuthAuthorizeToken", "required": true }, "metadata": { - "$ref": "#/definitions/kubernetes_ListMeta", - "javaType": "io.fabric8.kubernetes.api.model.ListMeta" + "$ref": "#/definitions/kubernetes_ObjectMeta", + "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" + }, + "redirectURI": { + "type": "string", + "description": "redirection URI associated with the token" + }, + "scopes": { + "type": "array", + "description": "list of requested scopes", + "items": { + "type": "string", + "description": "list of requested scopes" + } + }, + "state": { + "type": "string", + "description": "state data from request" + }, + "userName": { + "type": "string", + "description": "user name associated with this token" + }, + "userUID": { + "type": "string", + "description": "unique UID associated with this token. userUID and userName must both match for this token to be valid" } }, "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.PolicyBindingList", + "javaType": "io.fabric8.openshift.api.model.OAuthAuthorizeToken", "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.KubernetesResource", - "io.fabric8.kubernetes.api.model.KubernetesResourceList" + "io.fabric8.kubernetes.api.model.HasMetadata" ] }, - "os_authorization_PolicyList": { + "os_oauth_OAuthAuthorizeTokenList": { "type": "object", "description": "", "properties": { @@ -11864,16 +10863,16 @@ var Kubernetes; }, "items": { "type": "array", - "description": "list of policies", + "description": "list of oauth authorization tokens", "items": { - "$ref": "#/definitions/os_authorization_Policy", - "javaType": "io.fabric8.openshift.api.model.Policy" + "$ref": "#/definitions/os_oauth_OAuthAuthorizeToken", + "javaType": "io.fabric8.openshift.api.model.OAuthAuthorizeToken" } }, "kind": { "type": "string", "description": "", - "default": "PolicyList", + "default": "OAuthAuthorizeTokenList", "required": true }, "metadata": { @@ -11882,95 +10881,59 @@ var Kubernetes; } }, "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.PolicyList", + "javaType": "io.fabric8.openshift.api.model.OAuthAuthorizeTokenList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, - "os_authorization_PolicyRule": { + "os_oauth_OAuthClient": { "type": "object", "description": "", "properties": { - "attributeRestrictions": { - "$ref": "#/definitions/kubernetes_runtime_RawExtension", - "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" - }, - "nonResourceURLs": { - "type": "array", - "description": "set of partial urls that a user should have access to. *s are allowed", - "items": { - "type": "string", - "description": "set of partial urls that a user should have access to. *s are allowed" - } - }, - "resourceNames": { - "type": "array", - "description": "optional white list of names that the rule applies to. An empty set means that everything is allowed.", - "items": { - "type": "string", - "description": "optional white list of names that the rule applies to. An empty set means that everything is allowed." - } - }, - "resources": { - "type": "array", - "description": "list of resources this rule applies to. * represents all resources.", - "items": { - "type": "string", - "description": "list of resources this rule applies to. * represents all resources." - } - }, - "verbs": { - "type": "array", - "description": "list of verbs that apply to ALL the resourceKinds and attributeRestrictions contained in this rule. The verb * represents all kinds.", - "items": { - "type": "string", - "description": "list of verbs that apply to ALL the resourceKinds and attributeRestrictions contained in this rule. The verb * represents all kinds." - } - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.PolicyRule" - }, - "os_authorization_Role": { - "type": "object", - "description": "", - "properties": { - "apiVersion": { - "type": "string", - "description": "", - "default": "v1", - "required": true, - "enum": [ - "v1" - ] + "apiVersion": { + "type": "string", + "description": "", + "default": "v1", + "required": true, + "enum": [ + "v1" + ] }, "kind": { "type": "string", "description": "", - "default": "Role", + "default": "OAuthClient", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, - "rules": { + "redirectURIs": { "type": "array", - "description": "all the rules for this role", + "description": "valid redirection URIs associated with a client", "items": { - "$ref": "#/definitions/os_authorization_PolicyRule", - "javaType": "io.fabric8.openshift.api.model.PolicyRule" + "type": "string", + "description": "valid redirection URIs associated with a client" } + }, + "respondWithChallenges": { + "type": "boolean", + "description": "indicates whether the client wants authentication needed responses made in the form of challenges instead of redirects" + }, + "secret": { + "type": "string", + "description": "unique secret associated with a client" } }, "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.Role", + "javaType": "io.fabric8.openshift.api.model.OAuthClient", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, - "os_authorization_RoleBinding": { + "os_oauth_OAuthClientAuthorization": { "type": "object", "description": "", "properties": { @@ -11983,52 +10946,44 @@ var Kubernetes; "v1" ] }, - "groupNames": { - "type": "array", - "description": "all the groups directly bound to the role", - "items": { - "type": "string", - "description": "all the groups directly bound to the role" - } + "clientName": { + "type": "string", + "description": "references the client that created this authorization" }, "kind": { "type": "string", "description": "", - "default": "RoleBinding", + "default": "OAuthClientAuthorization", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, - "roleRef": { - "$ref": "#/definitions/kubernetes_ObjectReference", - "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" - }, - "subjects": { - "type": "array", - "description": "references to subjects bound to the role. Only User", - "items": { - "$ref": "#/definitions/kubernetes_ObjectReference", - "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" - } - }, - "userNames": { + "scopes": { "type": "array", - "description": "all the usernames directly bound to the role", + "description": "list of granted scopes", "items": { "type": "string", - "description": "all the usernames directly bound to the role" + "description": "list of granted scopes" } + }, + "userName": { + "type": "string", + "description": "user name that authorized this client" + }, + "userUID": { + "type": "string", + "description": "unique UID associated with this authorization. userUID and userName must both match for this authorization to be valid" } }, "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.RoleBinding", + "javaType": "io.fabric8.openshift.api.model.OAuthClientAuthorization", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, - "os_authorization_RoleBindingList": { + "os_oauth_OAuthClientAuthorizationList": { "type": "object", "description": "", "properties": { @@ -12043,16 +10998,16 @@ var Kubernetes; }, "items": { "type": "array", - "description": "list of role bindings", + "description": "list of oauth client authorizations", "items": { - "$ref": "#/definitions/os_authorization_RoleBinding", - "javaType": "io.fabric8.openshift.api.model.RoleBinding" + "$ref": "#/definitions/os_oauth_OAuthClientAuthorization", + "javaType": "io.fabric8.openshift.api.model.OAuthClientAuthorization" } }, "kind": { "type": "string", "description": "", - "default": "RoleBindingList", + "default": "OAuthClientAuthorizationList", "required": true }, "metadata": { @@ -12061,13 +11016,13 @@ var Kubernetes; } }, "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.RoleBindingList", + "javaType": "io.fabric8.openshift.api.model.OAuthClientAuthorizationList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, - "os_authorization_RoleList": { + "os_oauth_OAuthClientList": { "type": "object", "description": "", "properties": { @@ -12082,16 +11037,16 @@ var Kubernetes; }, "items": { "type": "array", - "description": "list of roles", + "description": "list of oauth clients", "items": { - "$ref": "#/definitions/os_authorization_Role", - "javaType": "io.fabric8.openshift.api.model.Role" + "$ref": "#/definitions/os_oauth_OAuthClient", + "javaType": "io.fabric8.openshift.api.model.OAuthClient" } }, "kind": { "type": "string", "description": "", - "default": "RoleList", + "default": "OAuthClientList", "required": true }, "metadata": { @@ -12100,13 +11055,13 @@ var Kubernetes; } }, "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.RoleList", + "javaType": "io.fabric8.openshift.api.model.OAuthClientList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, - "os_authorization_SubjectAccessReview": { + "os_project_Project": { "type": "object", "description": "", "properties": { @@ -12119,56 +11074,35 @@ var Kubernetes; "v1" ] }, - "content": { - "$ref": "#/definitions/kubernetes_runtime_RawExtension", - "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" - }, - "groups": { - "type": "array", - "description": "optional", - "items": { - "type": "string", - "description": "optional" - } - }, "kind": { "type": "string", "description": "", - "default": "SubjectAccessReview", + "default": "Project", "required": true }, - "namespace": { - "type": "string", - "description": "namespace of the action being requested" - }, - "resource": { - "type": "string", - "description": "one of the existing resource types" - }, - "resourceName": { - "type": "string", - "description": "name of the resource being requested for a get or delete" + "metadata": { + "$ref": "#/definitions/kubernetes_ObjectMeta", + "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, - "user": { - "type": "string", - "description": "optional" + "spec": { + "$ref": "#/definitions/os_project_ProjectSpec", + "javaType": "io.fabric8.openshift.api.model.ProjectSpec" }, - "verb": { - "type": "string", - "description": "one of get" + "status": { + "$ref": "#/definitions/os_project_ProjectStatus", + "javaType": "io.fabric8.openshift.api.model.ProjectStatus" } }, "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.SubjectAccessReview" + "javaType": "io.fabric8.openshift.api.model.Project", + "javaInterfaces": [ + "io.fabric8.kubernetes.api.model.HasMetadata" + ] }, - "os_authorization_SubjectAccessReviewResponse": { + "os_project_ProjectList": { "type": "object", "description": "", "properties": { - "allowed": { - "type": "boolean", - "description": "true if the action would be allowed" - }, "apiVersion": { "type": "string", "description": "", @@ -12178,25 +11112,33 @@ var Kubernetes; "v1" ] }, + "items": { + "type": "array", + "description": "list of projects", + "items": { + "$ref": "#/definitions/os_project_Project", + "javaType": "io.fabric8.openshift.api.model.Project" + } + }, "kind": { "type": "string", "description": "", - "default": "SubjectAccessReviewResponse", + "default": "ProjectList", "required": true }, - "namespace": { - "type": "string", - "description": "the namespace used for the access review" - }, - "reason": { - "type": "string", - "description": "reason is optional" + "metadata": { + "$ref": "#/definitions/kubernetes_ListMeta", + "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.SubjectAccessReviewResponse" + "javaType": "io.fabric8.openshift.api.model.ProjectList", + "javaInterfaces": [ + "io.fabric8.kubernetes.api.model.KubernetesResource", + "io.fabric8.kubernetes.api.model.KubernetesResourceList" + ] }, - "os_build_Build": { + "os_project_ProjectRequest": { "type": "object", "description": "", "properties": { @@ -12209,40 +11151,68 @@ var Kubernetes; "v1" ] }, + "description": { + "type": "string", + "description": "description to apply to a project" + }, + "displayName": { + "type": "string", + "description": "display name to apply to a project" + }, "kind": { "type": "string", "description": "", - "default": "Build", + "default": "ProjectRequest", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" - }, - "spec": { - "$ref": "#/definitions/os_build_BuildSpec", - "javaType": "io.fabric8.openshift.api.model.BuildSpec" - }, - "status": { - "$ref": "#/definitions/os_build_BuildStatus", - "javaType": "io.fabric8.openshift.api.model.BuildStatus" } }, "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.Build", + "javaType": "io.fabric8.openshift.api.model.ProjectRequest", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, - "os_build_BuildConfig": { + "os_project_ProjectSpec": { "type": "object", "description": "", "properties": { - "apiVersion": { + "finalizers": { + "type": "array", + "description": "an opaque list of values that must be empty to permanently remove object from storage", + "items": { + "type": "string", + "description": "an opaque list of values that must be empty to permanently remove object from storage" + } + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.openshift.api.model.ProjectSpec" + }, + "os_project_ProjectStatus": { + "type": "object", + "description": "", + "properties": { + "phase": { "type": "string", - "description": "", - "default": "v1", - "required": true, + "description": "phase is the current lifecycle phase of the project" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.openshift.api.model.ProjectStatus" + }, + "os_route_Route": { + "type": "object", + "description": "", + "properties": { + "apiVersion": { + "type": "string", + "description": "", + "default": "v1", + "required": true, "enum": [ "v1" ] @@ -12250,7 +11220,7 @@ var Kubernetes; "kind": { "type": "string", "description": "", - "default": "BuildConfig", + "default": "Route", "required": true }, "metadata": { @@ -12258,21 +11228,21 @@ var Kubernetes; "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { - "$ref": "#/definitions/os_build_BuildConfigSpec", - "javaType": "io.fabric8.openshift.api.model.BuildConfigSpec" + "$ref": "#/definitions/os_route_RouteSpec", + "javaType": "io.fabric8.openshift.api.model.RouteSpec" }, "status": { - "$ref": "#/definitions/os_build_BuildConfigStatus", - "javaType": "io.fabric8.openshift.api.model.BuildConfigStatus" + "$ref": "#/definitions/os_route_RouteStatus", + "javaType": "io.fabric8.openshift.api.model.RouteStatus" } }, "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.BuildConfig", + "javaType": "io.fabric8.openshift.api.model.Route", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, - "os_build_BuildConfigList": { + "os_route_RouteList": { "type": "object", "description": "", "properties": { @@ -12287,16 +11257,16 @@ var Kubernetes; }, "items": { "type": "array", - "description": "list of build configs", + "description": "list of routes", "items": { - "$ref": "#/definitions/os_build_BuildConfig", - "javaType": "io.fabric8.openshift.api.model.BuildConfig" + "$ref": "#/definitions/os_route_Route", + "javaType": "io.fabric8.openshift.api.model.Route" } }, "kind": { "type": "string", "description": "", - "default": "BuildConfigList", + "default": "RouteList", "required": true }, "metadata": { @@ -12305,65 +11275,158 @@ var Kubernetes; } }, "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.BuildConfigList", + "javaType": "io.fabric8.openshift.api.model.RouteList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, - "os_build_BuildConfigSpec": { + "os_route_RouteSpec": { "type": "object", "description": "", "properties": { - "output": { - "$ref": "#/definitions/os_build_BuildOutput", - "javaType": "io.fabric8.openshift.api.model.BuildOutput" + "host": { + "type": "string", + "description": "optional: alias/dns that points to the service" }, - "resources": { - "$ref": "#/definitions/kubernetes_ResourceRequirements", - "javaType": "io.fabric8.kubernetes.api.model.ResourceRequirements" + "path": { + "type": "string", + "description": "optional: path that the router watches to route traffic to the service" }, - "revision": { - "$ref": "#/definitions/os_build_SourceRevision", - "javaType": "io.fabric8.openshift.api.model.SourceRevision" + "tls": { + "$ref": "#/definitions/os_route_TLSConfig", + "javaType": "io.fabric8.openshift.api.model.TLSConfig" }, - "serviceAccount": { + "to": { + "$ref": "#/definitions/kubernetes_ObjectReference", + "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.openshift.api.model.RouteSpec" + }, + "os_route_RouteStatus": { + "type": "object", + "description": "", + "additionalProperties": true, + "javaType": "io.fabric8.openshift.api.model.RouteStatus" + }, + "os_route_TLSConfig": { + "type": "object", + "description": "", + "properties": { + "caCertificate": { "type": "string", - "description": "the name of the service account to use to run pods created by the build" + "description": "provides the cert authority certificate contents" }, - "source": { - "$ref": "#/definitions/os_build_BuildSource", - "javaType": "io.fabric8.openshift.api.model.BuildSource" + "certificate": { + "type": "string", + "description": "provides certificate contents" }, - "strategy": { - "$ref": "#/definitions/os_build_BuildStrategy", - "javaType": "io.fabric8.openshift.api.model.BuildStrategy" + "destinationCACertificate": { + "type": "string", + "description": "provides the contents of the ca certificate of the final destination. When using re-encrypt termination this file should be provided in order to have routers use it for health checks on the secure connection" }, - "triggers": { - "type": "array", - "description": "determines how new builds can be launched from a build config. if no triggers are defined", - "items": { - "$ref": "#/definitions/os_build_BuildTriggerPolicy", - "javaType": "io.fabric8.openshift.api.model.BuildTriggerPolicy" - } + "key": { + "type": "string", + "description": "provides key file contents" + }, + "termination": { + "type": "string", + "description": "indicates termination type. if not set" } }, "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.BuildConfigSpec" + "javaType": "io.fabric8.openshift.api.model.TLSConfig" }, - "os_build_BuildConfigStatus": { + "os_template_Parameter": { "type": "object", "description": "", "properties": { - "lastVersion": { - "type": "integer", - "description": "used to inform about number of last triggered build" + "description": { + "type": "string", + "description": "optional: describes the parameter" + }, + "from": { + "type": "string", + "description": "input value for the generator" + }, + "generate": { + "type": "string", + "description": "optional: generate specifies the generator to be used to generate random string from an input value specified by the from field. the result string is stored in the value field. if not specified" + }, + "name": { + "type": "string", + "description": "name of the parameter" + }, + "required": { + "type": "boolean", + "description": "indicates the parameter must have a non-empty value or be generated" + }, + "value": { + "type": "string", + "description": "optional: holds the parameter data. if specified" } }, "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.BuildConfigStatus" + "javaType": "io.fabric8.openshift.api.model.Parameter" }, - "os_build_BuildList": { + "os_template_Template": { + "type": "object", + "description": "", + "properties": { + "apiVersion": { + "type": "string", + "description": "", + "default": "v1", + "required": true, + "enum": [ + "v1" + ] + }, + "kind": { + "type": "string", + "description": "", + "default": "Template", + "required": true + }, + "labels": { + "type": "object", + "description": "optional: list of lables that are applied to every object during the template to config transformation", + "additionalProperties": { + "type": "string", + "description": "optional: list of lables that are applied to every object during the template to config transformation" + }, + "javaType": "java.util.Map\u003cString,String\u003e" + }, + "metadata": { + "$ref": "#/definitions/kubernetes_ObjectMeta", + "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" + }, + "objects": { + "type": "array", + "description": "list of objects to include in the template", + "items": { + "$ref": "#/definitions/kubernetes_runtime_RawExtension", + "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" + } + }, + "parameters": { + "type": "array", + "description": "optional: list of parameters used during template to config transformation", + "items": { + "$ref": "#/definitions/os_template_Parameter", + "javaType": "io.fabric8.openshift.api.model.Parameter" + } + } + }, + "additionalProperties": true, + "javaType": "io.fabric8.openshift.api.model.Template", + "javaInterfaces": [ + "io.fabric8.kubernetes.api.model.HasMetadata" + ] + }, + "os_template_TemplateList": { "type": "object", "description": "", "properties": { @@ -12378,16 +11441,16 @@ var Kubernetes; }, "items": { "type": "array", - "description": "list of builds", + "description": "list of templates", "items": { - "$ref": "#/definitions/os_build_Build", - "javaType": "io.fabric8.openshift.api.model.Build" + "$ref": "#/definitions/os_template_Template", + "javaType": "io.fabric8.openshift.api.model.Template" } }, "kind": { "type": "string", "description": "", - "default": "BuildList", + "default": "TemplateList", "required": true }, "metadata": { @@ -12396,29 +11459,13 @@ var Kubernetes; } }, "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.BuildList", + "javaType": "io.fabric8.openshift.api.model.TemplateList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, - "os_build_BuildOutput": { - "type": "object", - "description": "", - "properties": { - "pushSecret": { - "$ref": "#/definitions/kubernetes_LocalObjectReference", - "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" - }, - "to": { - "$ref": "#/definitions/kubernetes_ObjectReference", - "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.BuildOutput" - }, - "os_build_BuildRequest": { + "os_user_Group": { "type": "object", "description": "", "properties": { @@ -12431,2346 +11478,525 @@ var Kubernetes; "v1" ] }, - "from": { - "$ref": "#/definitions/kubernetes_ObjectReference", - "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" - }, "kind": { "type": "string", "description": "", - "default": "BuildRequest", + "default": "Group", "required": true }, - "lastVersion": { - "type": "integer", - "description": "LastVersion of the BuildConfig that triggered this build" - }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, - "revision": { - "$ref": "#/definitions/os_build_SourceRevision", - "javaType": "io.fabric8.openshift.api.model.SourceRevision" - }, - "triggeredByImage": { - "$ref": "#/definitions/kubernetes_ObjectReference", - "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" + "users": { + "type": "array", + "description": "list of users in this group", + "items": { + "type": "string", + "description": "list of users in this group" + } } }, "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.BuildRequest", + "javaType": "io.fabric8.openshift.api.model.Group", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, - "os_build_BuildSource": { + "os_user_GroupList": { "type": "object", "description": "", "properties": { - "contextDir": { + "apiVersion": { "type": "string", - "description": "specifies sub-directory where the source code for the application exists" - }, - "git": { - "$ref": "#/definitions/os_build_GitBuildSource", - "javaType": "io.fabric8.openshift.api.model.GitBuildSource" + "description": "", + "default": "v1", + "required": true, + "enum": [ + "v1" + ] }, - "sourceSecret": { - "$ref": "#/definitions/kubernetes_LocalObjectReference", - "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" + "items": { + "type": "array", + "description": "list of groups", + "items": { + "$ref": "#/definitions/os_user_Group", + "javaType": "io.fabric8.openshift.api.model.Group" + } }, - "type": { + "kind": { "type": "string", - "description": "type of source control management system" + "description": "", + "default": "GroupList", + "required": true + }, + "metadata": { + "$ref": "#/definitions/kubernetes_ListMeta", + "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.BuildSource" + "javaType": "io.fabric8.openshift.api.model.GroupList", + "javaInterfaces": [ + "io.fabric8.kubernetes.api.model.KubernetesResource", + "io.fabric8.kubernetes.api.model.KubernetesResourceList" + ] }, - "os_build_BuildSpec": { + "os_user_Identity": { "type": "object", "description": "", "properties": { - "output": { - "$ref": "#/definitions/os_build_BuildOutput", - "javaType": "io.fabric8.openshift.api.model.BuildOutput" + "apiVersion": { + "type": "string", + "description": "", + "default": "v1", + "required": true, + "enum": [ + "v1" + ] }, - "resources": { - "$ref": "#/definitions/kubernetes_ResourceRequirements", - "javaType": "io.fabric8.kubernetes.api.model.ResourceRequirements" + "extra": { + "type": "object", + "description": "extra information for this identity", + "additionalProperties": { + "type": "string", + "description": "extra information for this identity" + }, + "javaType": "java.util.Map\u003cString,String\u003e" }, - "revision": { - "$ref": "#/definitions/os_build_SourceRevision", - "javaType": "io.fabric8.openshift.api.model.SourceRevision" + "kind": { + "type": "string", + "description": "", + "default": "Identity", + "required": true }, - "serviceAccount": { + "metadata": { + "$ref": "#/definitions/kubernetes_ObjectMeta", + "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" + }, + "providerName": { "type": "string", - "description": "the name of the service account to use to run pods created by the build" + "description": "source of identity information" }, - "source": { - "$ref": "#/definitions/os_build_BuildSource", - "javaType": "io.fabric8.openshift.api.model.BuildSource" + "providerUserName": { + "type": "string", + "description": "uniquely represents this identity in the scope of the provider" }, - "strategy": { - "$ref": "#/definitions/os_build_BuildStrategy", - "javaType": "io.fabric8.openshift.api.model.BuildStrategy" + "user": { + "$ref": "#/definitions/kubernetes_ObjectReference", + "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" } }, "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.BuildSpec" + "javaType": "io.fabric8.openshift.api.model.Identity", + "javaInterfaces": [ + "io.fabric8.kubernetes.api.model.HasMetadata" + ] }, - "os_build_BuildStatus": { + "os_user_IdentityList": { "type": "object", "description": "", "properties": { - "cancelled": { - "type": "boolean", - "description": "describes if a canceling event was triggered for the build" - }, - "completionTimestamp": { + "apiVersion": { "type": "string", - "description": "server time when the pod running this build stopped running" - }, - "config": { - "$ref": "#/definitions/kubernetes_ObjectReference", - "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" - }, - "duration": { - "type": "integer", - "description": "amount of time the build has been running", - "javaType": "Long" + "description": "", + "default": "v1", + "required": true, + "enum": [ + "v1" + ] }, - "message": { - "type": "string", - "description": "human-readable message indicating details about why the build has this status" + "items": { + "type": "array", + "description": "list of identities", + "items": { + "$ref": "#/definitions/os_user_Identity", + "javaType": "io.fabric8.openshift.api.model.Identity" + } }, - "phase": { + "kind": { "type": "string", - "description": "observed point in the build lifecycle" + "description": "", + "default": "IdentityList", + "required": true }, - "startTimestamp": { - "type": "string", - "description": "server time when this build started running in a pod" + "metadata": { + "$ref": "#/definitions/kubernetes_ListMeta", + "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.BuildStatus" + "javaType": "io.fabric8.openshift.api.model.IdentityList", + "javaInterfaces": [ + "io.fabric8.kubernetes.api.model.KubernetesResource", + "io.fabric8.kubernetes.api.model.KubernetesResourceList" + ] }, - "os_build_BuildStrategy": { + "os_user_User": { "type": "object", "description": "", "properties": { - "customStrategy": { - "$ref": "#/definitions/os_build_CustomBuildStrategy", - "javaType": "io.fabric8.openshift.api.model.CustomBuildStrategy" + "apiVersion": { + "type": "string", + "description": "", + "default": "v1", + "required": true, + "enum": [ + "v1" + ] }, - "dockerStrategy": { - "$ref": "#/definitions/os_build_DockerBuildStrategy", - "javaType": "io.fabric8.openshift.api.model.DockerBuildStrategy" + "fullName": { + "type": "string", + "description": "full name of user" }, - "sourceStrategy": { - "$ref": "#/definitions/os_build_SourceBuildStrategy", - "javaType": "io.fabric8.openshift.api.model.SourceBuildStrategy" + "groups": { + "type": "array", + "description": "list of groups", + "items": { + "type": "string", + "description": "list of groups" + } }, - "type": { + "identities": { + "type": "array", + "description": "list of identities", + "items": { + "type": "string", + "description": "list of identities" + } + }, + "kind": { "type": "string", - "description": "identifies the type of build strategy" + "description": "", + "default": "User", + "required": true + }, + "metadata": { + "$ref": "#/definitions/kubernetes_ObjectMeta", + "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" } }, "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.BuildStrategy" + "javaType": "io.fabric8.openshift.api.model.User", + "javaInterfaces": [ + "io.fabric8.kubernetes.api.model.HasMetadata" + ] }, - "os_build_BuildTriggerPolicy": { + "os_user_UserList": { "type": "object", "description": "", "properties": { - "generic": { - "$ref": "#/definitions/os_build_WebHookTrigger", - "javaType": "io.fabric8.openshift.api.model.WebHookTrigger" - }, - "github": { - "$ref": "#/definitions/os_build_WebHookTrigger", - "javaType": "io.fabric8.openshift.api.model.WebHookTrigger" + "apiVersion": { + "type": "string", + "description": "", + "default": "v1", + "required": true, + "enum": [ + "v1" + ] }, - "imageChange": { - "$ref": "#/definitions/os_build_ImageChangeTrigger", - "javaType": "io.fabric8.openshift.api.model.ImageChangeTrigger" + "items": { + "type": "array", + "description": "list of users", + "items": { + "$ref": "#/definitions/os_user_User", + "javaType": "io.fabric8.openshift.api.model.User" + } }, - "type": { + "kind": { "type": "string", - "description": "type of build trigger" + "description": "", + "default": "UserList", + "required": true + }, + "metadata": { + "$ref": "#/definitions/kubernetes_ListMeta", + "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.BuildTriggerPolicy" + "javaType": "io.fabric8.openshift.api.model.UserList", + "javaInterfaces": [ + "io.fabric8.kubernetes.api.model.KubernetesResource", + "io.fabric8.kubernetes.api.model.KubernetesResourceList" + ] }, - "os_build_CustomBuildStrategy": { + "speter_inf_Dec": { "type": "object", "description": "", - "properties": { - "env": { - "type": "array", - "description": "additional environment variables you want to pass into a builder container", - "items": { - "$ref": "#/definitions/kubernetes_EnvVar", - "javaType": "io.fabric8.kubernetes.api.model.EnvVar" - } - }, - "exposeDockerSocket": { - "type": "boolean", - "description": "allow running Docker commands (and build Docker images) from inside the container" - }, - "forcePull": { - "type": "boolean", - "description": "forces pulling of builder image from remote registry if true" - }, - "from": { - "$ref": "#/definitions/kubernetes_ObjectReference", - "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" - }, - "pullSecret": { - "$ref": "#/definitions/kubernetes_LocalObjectReference", - "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" - } - }, "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.CustomBuildStrategy" + "javaType": "io.fabric8.openshift.api.model.Dec" + } + }, + "type": "object", + "properties": { + "BaseKubernetesList": { + "$ref": "#/definitions/kubernetes_List", + "javaType": "io.fabric8.kubernetes.api.model.BaseKubernetesList" }, - "os_build_DockerBuildStrategy": { - "type": "object", - "description": "", - "properties": { - "env": { - "type": "array", - "description": "additional environment variables you want to pass into a builder container", - "items": { - "$ref": "#/definitions/kubernetes_EnvVar", - "javaType": "io.fabric8.kubernetes.api.model.EnvVar" - } - }, - "forcePull": { - "type": "boolean", - "description": "forces the source build to pull the image if true" - }, - "from": { - "$ref": "#/definitions/kubernetes_ObjectReference", - "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" - }, - "noCache": { - "type": "boolean", - "description": "if true" - }, - "pullSecret": { - "$ref": "#/definitions/kubernetes_LocalObjectReference", - "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.DockerBuildStrategy" + "BuildConfigList": { + "$ref": "#/definitions/os_build_BuildConfigList", + "javaType": "io.fabric8.openshift.api.model.BuildConfigList" }, - "os_build_GitBuildSource": { - "type": "object", - "description": "", - "properties": { - "httpProxy": { - "type": "string", - "description": "specifies a http proxy to be used during git clone operations" - }, - "httpsProxy": { - "type": "string", - "description": "specifies a https proxy to be used during git clone operations" - }, - "ref": { - "type": "string", - "description": "identifies the branch/tag/ref to build" - }, - "uri": { - "type": "string", - "description": "points to the source that will be built" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.GitBuildSource" + "BuildList": { + "$ref": "#/definitions/os_build_BuildList", + "javaType": "io.fabric8.openshift.api.model.BuildList" }, - "os_build_GitSourceRevision": { - "type": "object", - "description": "", - "properties": { - "author": { - "$ref": "#/definitions/os_build_SourceControlUser", - "javaType": "io.fabric8.openshift.api.model.SourceControlUser" - }, - "commit": { - "type": "string", - "description": "hash identifying a specific commit" - }, - "committer": { - "$ref": "#/definitions/os_build_SourceControlUser", - "javaType": "io.fabric8.openshift.api.model.SourceControlUser" - }, - "message": { - "type": "string", - "description": "description of a specific commit" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.GitSourceRevision" + "BuildRequest": { + "$ref": "#/definitions/os_build_BuildRequest", + "javaType": "io.fabric8.openshift.api.model.BuildRequest" }, - "os_build_ImageChangeTrigger": { - "type": "object", - "description": "", - "properties": { - "from": { - "$ref": "#/definitions/kubernetes_ObjectReference", - "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" - }, - "lastTriggeredImageID": { - "type": "string", - "description": "used internally to save last used image ID for build" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.ImageChangeTrigger" + "ClusterPolicy": { + "$ref": "#/definitions/os_authorization_ClusterPolicy", + "javaType": "io.fabric8.openshift.api.model.ClusterPolicy" }, - "os_build_SourceBuildStrategy": { - "type": "object", - "description": "", - "properties": { - "env": { - "type": "array", - "description": "additional environment variables you want to pass into a builder container", - "items": { - "$ref": "#/definitions/kubernetes_EnvVar", - "javaType": "io.fabric8.kubernetes.api.model.EnvVar" - } - }, - "forcePull": { - "type": "boolean", - "description": "forces the source build to pull the image if true" - }, - "from": { - "$ref": "#/definitions/kubernetes_ObjectReference", - "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" - }, - "incremental": { - "type": "boolean", - "description": "forces the source build to do incremental builds if true" - }, - "pullSecret": { - "$ref": "#/definitions/kubernetes_LocalObjectReference", - "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" - }, - "scripts": { - "type": "string", - "description": "location of the source scripts" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.SourceBuildStrategy" + "ClusterPolicyBinding": { + "$ref": "#/definitions/os_authorization_ClusterPolicyBinding", + "javaType": "io.fabric8.openshift.api.model.ClusterPolicyBinding" }, - "os_build_SourceControlUser": { - "type": "object", - "description": "", - "properties": { - "email": { - "type": "string", - "description": "e-mail of the source control user" - }, - "name": { - "type": "string", - "description": "name of the source control user" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.SourceControlUser" + "ClusterPolicyBindingList": { + "$ref": "#/definitions/os_authorization_ClusterPolicyBindingList", + "javaType": "io.fabric8.openshift.api.model.ClusterPolicyBindingList" }, - "os_build_SourceRevision": { - "type": "object", - "description": "", - "properties": { - "git": { - "$ref": "#/definitions/os_build_GitSourceRevision", - "javaType": "io.fabric8.openshift.api.model.GitSourceRevision" - }, - "type": { - "type": "string", - "description": "type of the build source" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.SourceRevision" + "ClusterPolicyList": { + "$ref": "#/definitions/os_authorization_ClusterPolicyList", + "javaType": "io.fabric8.openshift.api.model.ClusterPolicyList" }, - "os_build_WebHookTrigger": { - "type": "object", - "description": "", - "properties": { - "secret": { - "type": "string", - "description": "secret used to validate requests" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.WebHookTrigger" + "ClusterRoleBinding": { + "$ref": "#/definitions/os_authorization_ClusterRoleBinding", + "javaType": "io.fabric8.openshift.api.model.ClusterRoleBinding" }, - "os_deploy_CustomDeploymentStrategyParams": { - "type": "object", - "description": "", - "properties": { - "command": { - "type": "array", - "description": "optionally overrides the container command (default is specified by the image)", - "items": { - "type": "string", - "description": "optionally overrides the container command (default is specified by the image)" - } - }, - "environment": { - "type": "array", - "description": "environment variables provided to the deployment process container", - "items": { - "$ref": "#/definitions/kubernetes_EnvVar", - "javaType": "io.fabric8.kubernetes.api.model.EnvVar" - } - }, - "image": { - "type": "string", - "description": "a Docker image which can carry out a deployment" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.CustomDeploymentStrategyParams" + "ClusterRoleBindingList": { + "$ref": "#/definitions/os_authorization_ClusterRoleBindingList", + "javaType": "io.fabric8.openshift.api.model.ClusterRoleBindingList" }, - "os_deploy_DeploymentCause": { - "type": "object", - "description": "", - "properties": { - "imageTrigger": { - "$ref": "#/definitions/os_deploy_DeploymentCauseImageTrigger", - "javaType": "io.fabric8.openshift.api.model.DeploymentCauseImageTrigger" - }, - "type": { - "type": "string", - "description": "the type of trigger that resulted in a new deployment" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.DeploymentCause" + "Config": { + "$ref": "#/definitions/kubernetes_config_Config", + "javaType": "io.fabric8.kubernetes.api.model.Config" }, - "os_deploy_DeploymentCauseImageTrigger": { - "type": "object", - "description": "", - "properties": { - "from": { - "$ref": "#/definitions/kubernetes_ObjectReference", - "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.DeploymentCauseImageTrigger" + "ContainerStatus": { + "$ref": "#/definitions/kubernetes_ContainerStatus", + "javaType": "io.fabric8.kubernetes.api.model.ContainerStatus" }, - "os_deploy_DeploymentConfig": { - "type": "object", - "description": "", - "properties": { - "apiVersion": { - "type": "string", - "description": "", - "default": "v1", - "required": true, - "enum": [ - "v1" - ] - }, - "kind": { - "type": "string", - "description": "", - "default": "DeploymentConfig", - "required": true - }, - "metadata": { - "$ref": "#/definitions/kubernetes_ObjectMeta", - "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" - }, - "spec": { - "$ref": "#/definitions/os_deploy_DeploymentConfigSpec", - "javaType": "io.fabric8.openshift.api.model.DeploymentConfigSpec" - }, - "status": { - "$ref": "#/definitions/os_deploy_DeploymentConfigStatus", - "javaType": "io.fabric8.openshift.api.model.DeploymentConfigStatus" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.DeploymentConfig", - "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.HasMetadata" - ] + "DeploymentConfigList": { + "$ref": "#/definitions/os_deploy_DeploymentConfigList", + "javaType": "io.fabric8.openshift.api.model.DeploymentConfigList" }, - "os_deploy_DeploymentConfigList": { - "type": "object", - "description": "", - "properties": { - "apiVersion": { - "type": "string", - "description": "", - "default": "v1", - "required": true, - "enum": [ - "v1" - ] - }, - "items": { - "type": "array", - "description": "a list of deployment configs", - "items": { - "$ref": "#/definitions/os_deploy_DeploymentConfig", - "javaType": "io.fabric8.openshift.api.model.DeploymentConfig" - } - }, - "kind": { - "type": "string", - "description": "", - "default": "DeploymentConfigList", - "required": true - }, - "metadata": { - "$ref": "#/definitions/kubernetes_ListMeta", - "javaType": "io.fabric8.kubernetes.api.model.ListMeta" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.DeploymentConfigList", - "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.KubernetesResource", - "io.fabric8.kubernetes.api.model.KubernetesResourceList" - ] + "Endpoints": { + "$ref": "#/definitions/kubernetes_Endpoints", + "javaType": "io.fabric8.kubernetes.api.model.Endpoints" }, - "os_deploy_DeploymentConfigSpec": { - "type": "object", - "description": "", - "properties": { - "replicas": { - "type": "integer", - "description": "the desired number of replicas" - }, - "selector": { - "type": "object", - "description": "a label query over pods that should match the replicas count", - "additionalProperties": { - "type": "string", - "description": "a label query over pods that should match the replicas count" - }, - "javaType": "java.util.Map\u003cString,String\u003e" - }, - "strategy": { - "$ref": "#/definitions/os_deploy_DeploymentStrategy", - "javaType": "io.fabric8.openshift.api.model.DeploymentStrategy" - }, - "template": { - "$ref": "#/definitions/kubernetes_PodTemplateSpec", - "javaType": "io.fabric8.kubernetes.api.model.PodTemplateSpec" - }, - "triggers": { - "type": "array", - "description": "how new deployments are triggered", - "items": { - "$ref": "#/definitions/os_deploy_DeploymentTriggerPolicy", - "javaType": "io.fabric8.openshift.api.model.DeploymentTriggerPolicy" - } - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.DeploymentConfigSpec" + "EndpointsList": { + "$ref": "#/definitions/kubernetes_EndpointsList", + "javaType": "io.fabric8.kubernetes.api.model.EndpointsList" }, - "os_deploy_DeploymentConfigStatus": { - "type": "object", - "description": "", - "properties": { - "details": { - "$ref": "#/definitions/os_deploy_DeploymentDetails", - "javaType": "io.fabric8.openshift.api.model.DeploymentDetails" - }, - "latestVersion": { - "type": "integer", - "description": "used to determine whether the current deployment is out of sync" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.DeploymentConfigStatus" + "EnvVar": { + "$ref": "#/definitions/kubernetes_EnvVar", + "javaType": "io.fabric8.kubernetes.api.model.EnvVar" }, - "os_deploy_DeploymentDetails": { - "type": "object", - "description": "", - "properties": { - "causes": { - "type": "array", - "description": "extended data associated with all the causes for creating a new deployment", - "items": { - "$ref": "#/definitions/os_deploy_DeploymentCause", - "javaType": "io.fabric8.openshift.api.model.DeploymentCause" - } - }, - "message": { - "type": "string", - "description": "a user specified change message" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.DeploymentDetails" + "EventList": { + "$ref": "#/definitions/kubernetes_EventList", + "javaType": "io.fabric8.kubernetes.api.model.EventList" }, - "os_deploy_DeploymentStrategy": { - "type": "object", - "description": "", - "properties": { - "customParams": { - "$ref": "#/definitions/os_deploy_CustomDeploymentStrategyParams", - "javaType": "io.fabric8.openshift.api.model.CustomDeploymentStrategyParams" - }, - "recreateParams": { - "$ref": "#/definitions/os_deploy_RecreateDeploymentStrategyParams", - "javaType": "io.fabric8.openshift.api.model.RecreateDeploymentStrategyParams" - }, - "resources": { - "$ref": "#/definitions/kubernetes_ResourceRequirements", - "javaType": "io.fabric8.kubernetes.api.model.ResourceRequirements" - }, - "rollingParams": { - "$ref": "#/definitions/os_deploy_RollingDeploymentStrategyParams", - "javaType": "io.fabric8.openshift.api.model.RollingDeploymentStrategyParams" - }, - "type": { - "type": "string", - "description": "the name of a deployment strategy" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.DeploymentStrategy" + "Group": { + "$ref": "#/definitions/os_user_Group", + "javaType": "io.fabric8.openshift.api.model.Group" }, - "os_deploy_DeploymentTriggerImageChangeParams": { - "type": "object", - "description": "", - "properties": { - "automatic": { - "type": "boolean", - "description": "whether detection of a new tag value should trigger a deployment" - }, - "containerNames": { - "type": "array", - "description": "restricts tag updates to a set of container names in the pod", - "items": { - "type": "string", - "description": "restricts tag updates to a set of container names in the pod" - } - }, - "from": { - "$ref": "#/definitions/kubernetes_ObjectReference", - "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" - }, - "lastTriggeredImage": { - "type": "string", - "description": "the last image to be triggered" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.DeploymentTriggerImageChangeParams" + "GroupList": { + "$ref": "#/definitions/os_user_GroupList", + "javaType": "io.fabric8.openshift.api.model.GroupList" }, - "os_deploy_DeploymentTriggerPolicy": { - "type": "object", - "description": "", - "properties": { - "imageChangeParams": { - "$ref": "#/definitions/os_deploy_DeploymentTriggerImageChangeParams", - "javaType": "io.fabric8.openshift.api.model.DeploymentTriggerImageChangeParams" - }, - "type": { - "type": "string", - "description": "the type of the trigger" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.DeploymentTriggerPolicy" + "Identity": { + "$ref": "#/definitions/os_user_Identity", + "javaType": "io.fabric8.openshift.api.model.Identity" }, - "os_deploy_ExecNewPodHook": { - "type": "object", - "description": "", - "properties": { - "command": { - "type": "array", - "description": "the hook command and its arguments", - "items": { - "type": "string", - "description": "the hook command and its arguments" - } - }, - "containerName": { - "type": "string", - "description": "the name of a container from the pod template whose image will be used for the hook container" - }, - "env": { - "type": "array", - "description": "environment variables provided to the hook container", - "items": { - "$ref": "#/definitions/kubernetes_EnvVar", - "javaType": "io.fabric8.kubernetes.api.model.EnvVar" - } - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.ExecNewPodHook" + "IdentityList": { + "$ref": "#/definitions/os_user_IdentityList", + "javaType": "io.fabric8.openshift.api.model.IdentityList" }, - "os_deploy_LifecycleHook": { - "type": "object", - "description": "", - "properties": { - "execNewPod": { - "$ref": "#/definitions/os_deploy_ExecNewPodHook", - "javaType": "io.fabric8.openshift.api.model.ExecNewPodHook" - }, - "failurePolicy": { - "type": "string", - "description": "what action to take if the hook fails" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.LifecycleHook" + "ImageList": { + "$ref": "#/definitions/os_image_ImageList", + "javaType": "io.fabric8.openshift.api.model.ImageList" }, - "os_deploy_RecreateDeploymentStrategyParams": { - "type": "object", - "description": "", - "properties": { - "post": { - "$ref": "#/definitions/os_deploy_LifecycleHook", - "javaType": "io.fabric8.openshift.api.model.LifecycleHook" - }, - "pre": { - "$ref": "#/definitions/os_deploy_LifecycleHook", - "javaType": "io.fabric8.openshift.api.model.LifecycleHook" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.RecreateDeploymentStrategyParams" + "ImageStreamList": { + "$ref": "#/definitions/os_image_ImageStreamList", + "javaType": "io.fabric8.openshift.api.model.ImageStreamList" }, - "os_deploy_RollingDeploymentStrategyParams": { - "type": "object", - "description": "", - "properties": { - "intervalSeconds": { - "type": "integer", - "description": "the time to wait between polling deployment status after update", - "javaType": "Long" - }, - "post": { - "$ref": "#/definitions/os_deploy_LifecycleHook", - "javaType": "io.fabric8.openshift.api.model.LifecycleHook" - }, - "pre": { - "$ref": "#/definitions/os_deploy_LifecycleHook", - "javaType": "io.fabric8.openshift.api.model.LifecycleHook" - }, - "timeoutSeconds": { - "type": "integer", - "description": "the time to wait for updates before giving up", - "javaType": "Long" - }, - "updatePercent": { - "type": "integer", - "description": "the percentage of replicas to scale up or down each interval (negative value switches scale order to down/up instead of up/down)" - }, - "updatePeriodSeconds": { - "type": "integer", - "description": "the time to wait between individual pod updates", - "javaType": "Long" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.RollingDeploymentStrategyParams" + "LocalSubjectAccessReview": { + "$ref": "#/definitions/os_authorization_LocalSubjectAccessReview", + "javaType": "io.fabric8.openshift.api.model.LocalSubjectAccessReview" }, - "os_image_Image": { - "type": "object", - "description": "", - "properties": { - "apiVersion": { - "type": "string", - "description": "", - "default": "v1", - "required": true, - "enum": [ - "v1" - ] - }, - "dockerImageManifest": { - "type": "string", - "description": "raw JSON of the manifest" - }, - "dockerImageMetadata": { - "$ref": "#/definitions/kubernetes_runtime_RawExtension", - "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" - }, - "dockerImageMetadataVersion": { - "type": "string", - "description": "conveys version of the object" - }, - "dockerImageReference": { - "type": "string", - "description": "string that can be used to pull this image" - }, - "kind": { - "type": "string", - "description": "", - "default": "Image", - "required": true - }, - "metadata": { - "$ref": "#/definitions/kubernetes_ObjectMeta", - "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.Image", - "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.HasMetadata" - ] + "Namespace": { + "$ref": "#/definitions/kubernetes_Namespace", + "javaType": "io.fabric8.kubernetes.api.model.Namespace" }, - "os_image_ImageList": { - "type": "object", - "description": "", - "properties": { - "apiVersion": { - "type": "string", - "description": "", - "default": "v1", - "required": true, - "enum": [ - "v1" - ] - }, - "items": { - "type": "array", - "description": "list of image objects", - "items": { - "$ref": "#/definitions/os_image_Image", - "javaType": "io.fabric8.openshift.api.model.Image" - } - }, - "kind": { - "type": "string", - "description": "", - "default": "ImageList", - "required": true - }, - "metadata": { - "$ref": "#/definitions/kubernetes_ListMeta", - "javaType": "io.fabric8.kubernetes.api.model.ListMeta" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.ImageList", - "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.KubernetesResource", - "io.fabric8.kubernetes.api.model.KubernetesResourceList" - ] + "NamespaceList": { + "$ref": "#/definitions/kubernetes_NamespaceList", + "javaType": "io.fabric8.kubernetes.api.model.NamespaceList" }, - "os_image_ImageStream": { - "type": "object", - "description": "", - "properties": { - "apiVersion": { - "type": "string", - "description": "", - "default": "v1", - "required": true, - "enum": [ - "v1" - ] - }, - "kind": { - "type": "string", - "description": "", - "default": "ImageStream", - "required": true - }, - "metadata": { - "$ref": "#/definitions/kubernetes_ObjectMeta", - "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" - }, - "spec": { - "$ref": "#/definitions/os_image_ImageStreamSpec", - "javaType": "io.fabric8.openshift.api.model.ImageStreamSpec" - }, - "status": { - "$ref": "#/definitions/os_image_ImageStreamStatus", - "javaType": "io.fabric8.openshift.api.model.ImageStreamStatus" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.ImageStream", - "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.HasMetadata" - ] + "Node": { + "$ref": "#/definitions/kubernetes_Node", + "javaType": "io.fabric8.kubernetes.api.model.Node" }, - "os_image_ImageStreamList": { - "type": "object", - "description": "", - "properties": { - "apiVersion": { - "type": "string", - "description": "", - "default": "v1", - "required": true, - "enum": [ - "v1" - ] - }, - "items": { - "type": "array", - "description": "list of image stream objects", - "items": { - "$ref": "#/definitions/os_image_ImageStream", - "javaType": "io.fabric8.openshift.api.model.ImageStream" - } - }, - "kind": { - "type": "string", - "description": "", - "default": "ImageStreamList", - "required": true - }, - "metadata": { - "$ref": "#/definitions/kubernetes_ListMeta", - "javaType": "io.fabric8.kubernetes.api.model.ListMeta" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.ImageStreamList", - "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.KubernetesResource", - "io.fabric8.kubernetes.api.model.KubernetesResourceList" - ] + "NodeList": { + "$ref": "#/definitions/kubernetes_NodeList", + "javaType": "io.fabric8.kubernetes.api.model.NodeList" }, - "os_image_ImageStreamSpec": { - "type": "object", - "description": "", - "properties": { - "dockerImageRepository": { - "type": "string", - "description": "optional field if specified this stream is backed by a Docker repository on this server" - }, - "tags": { - "type": "array", - "description": "map arbitrary string values to specific image locators", - "items": { - "$ref": "#/definitions/os_image_NamedTagReference", - "javaType": "io.fabric8.openshift.api.model.NamedTagReference" - } - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.ImageStreamSpec" + "OAuthAccessToken": { + "$ref": "#/definitions/os_oauth_OAuthAccessToken", + "javaType": "io.fabric8.openshift.api.model.OAuthAccessToken" }, - "os_image_ImageStreamStatus": { - "type": "object", - "description": "", - "properties": { - "dockerImageRepository": { - "type": "string", - "description": "represents the effective location this stream may be accessed at" - }, - "tags": { - "type": "array", - "description": "historical record of images associated with each tag", - "items": { - "$ref": "#/definitions/os_image_NamedTagEventList", - "javaType": "io.fabric8.openshift.api.model.NamedTagEventList" - } - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.ImageStreamStatus" + "OAuthAccessTokenList": { + "$ref": "#/definitions/os_oauth_OAuthAccessTokenList", + "javaType": "io.fabric8.openshift.api.model.OAuthAccessTokenList" }, - "os_image_NamedTagEventList": { - "type": "object", - "description": "", - "properties": { - "items": { - "type": "array", - "description": "list of tag events related to the tag", - "items": { - "$ref": "#/definitions/os_image_TagEvent", - "javaType": "io.fabric8.openshift.api.model.TagEvent" - } - }, - "tag": { - "type": "string", - "description": "the tag" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.NamedTagEventList" + "OAuthAuthorizeToken": { + "$ref": "#/definitions/os_oauth_OAuthAuthorizeToken", + "javaType": "io.fabric8.openshift.api.model.OAuthAuthorizeToken" }, - "os_image_NamedTagReference": { - "type": "object", - "description": "", - "properties": { - "annotations": { - "type": "object", - "description": "annotations associated with images using this tag", - "additionalProperties": { - "type": "string", - "description": "annotations associated with images using this tag" - }, - "javaType": "java.util.Map\u003cString,String\u003e" - }, - "from": { - "$ref": "#/definitions/kubernetes_ObjectReference", - "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" - }, - "name": { - "type": "string", - "description": "name of tag" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.NamedTagReference" + "OAuthAuthorizeTokenList": { + "$ref": "#/definitions/os_oauth_OAuthAuthorizeTokenList", + "javaType": "io.fabric8.openshift.api.model.OAuthAuthorizeTokenList" }, - "os_image_TagEvent": { - "type": "object", - "description": "", - "properties": { - "created": { - "type": "string", - "description": "when the event was created" - }, - "dockerImageReference": { - "type": "string", - "description": "the string that can be used to pull this image" - }, - "image": { - "type": "string", - "description": "the image" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.TagEvent" + "OAuthClient": { + "$ref": "#/definitions/os_oauth_OAuthClient", + "javaType": "io.fabric8.openshift.api.model.OAuthClient" }, - "os_oauth_OAuthAccessToken": { - "type": "object", - "description": "", - "properties": { - "apiVersion": { - "type": "string", - "description": "", - "default": "v1", - "required": true, - "enum": [ - "v1" - ] - }, - "authorizeToken": { - "type": "string", - "description": "contains the token that authorized this token" - }, - "clientName": { - "type": "string", - "description": "references the client that created this token" - }, - "expiresIn": { - "type": "integer", - "description": "is the seconds from creation time before this token expires", - "javaType": "Long" - }, - "kind": { - "type": "string", - "description": "", - "default": "OAuthAccessToken", - "required": true - }, - "metadata": { - "$ref": "#/definitions/kubernetes_ObjectMeta", - "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" - }, - "redirectURI": { - "type": "string", - "description": "redirection URI associated with the token" - }, - "refreshToken": { - "type": "string", - "description": "optional value by which this token can be renewed" - }, - "scopes": { - "type": "array", - "description": "list of requested scopes", - "items": { - "type": "string", - "description": "list of requested scopes" - } - }, - "userName": { - "type": "string", - "description": "user name associated with this token" - }, - "userUID": { - "type": "string", - "description": "unique UID associated with this token" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.OAuthAccessToken", - "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.HasMetadata" - ] + "OAuthClientAuthorization": { + "$ref": "#/definitions/os_oauth_OAuthClientAuthorization", + "javaType": "io.fabric8.openshift.api.model.OAuthClientAuthorization" }, - "os_oauth_OAuthAccessTokenList": { - "type": "object", - "description": "", - "properties": { - "apiVersion": { - "type": "string", - "description": "", - "default": "v1", - "required": true, - "enum": [ - "v1" - ] - }, - "items": { - "type": "array", - "description": "list of oauth access tokens", - "items": { - "$ref": "#/definitions/os_oauth_OAuthAccessToken", - "javaType": "io.fabric8.openshift.api.model.OAuthAccessToken" - } - }, - "kind": { - "type": "string", - "description": "", - "default": "OAuthAccessTokenList", - "required": true - }, - "metadata": { - "$ref": "#/definitions/kubernetes_ListMeta", - "javaType": "io.fabric8.kubernetes.api.model.ListMeta" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.OAuthAccessTokenList", - "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.KubernetesResource", - "io.fabric8.kubernetes.api.model.KubernetesResourceList" - ] + "OAuthClientAuthorizationList": { + "$ref": "#/definitions/os_oauth_OAuthClientAuthorizationList", + "javaType": "io.fabric8.openshift.api.model.OAuthClientAuthorizationList" }, - "os_oauth_OAuthAuthorizeToken": { - "type": "object", - "description": "", - "properties": { - "apiVersion": { - "type": "string", - "description": "", - "default": "v1", - "required": true, - "enum": [ - "v1" - ] - }, - "clientName": { - "type": "string", - "description": "references the client that created this token" - }, - "expiresIn": { - "type": "integer", - "description": "seconds from creation time before this token expires", - "javaType": "Long" - }, - "kind": { - "type": "string", - "description": "", - "default": "OAuthAuthorizeToken", - "required": true - }, - "metadata": { - "$ref": "#/definitions/kubernetes_ObjectMeta", - "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" - }, - "redirectURI": { - "type": "string", - "description": "redirection URI associated with the token" - }, - "scopes": { - "type": "array", - "description": "list of requested scopes", - "items": { - "type": "string", - "description": "list of requested scopes" - } - }, - "state": { - "type": "string", - "description": "state data from request" - }, - "userName": { - "type": "string", - "description": "user name associated with this token" - }, - "userUID": { - "type": "string", - "description": "unique UID associated with this token. userUID and userName must both match for this token to be valid" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.OAuthAuthorizeToken", - "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.HasMetadata" - ] + "OAuthClientList": { + "$ref": "#/definitions/os_oauth_OAuthClientList", + "javaType": "io.fabric8.openshift.api.model.OAuthClientList" }, - "os_oauth_OAuthAuthorizeTokenList": { - "type": "object", - "description": "", - "properties": { - "apiVersion": { - "type": "string", - "description": "", - "default": "v1", - "required": true, - "enum": [ - "v1" - ] - }, - "items": { - "type": "array", - "description": "list of oauth authorization tokens", - "items": { - "$ref": "#/definitions/os_oauth_OAuthAuthorizeToken", - "javaType": "io.fabric8.openshift.api.model.OAuthAuthorizeToken" - } - }, - "kind": { - "type": "string", - "description": "", - "default": "OAuthAuthorizeTokenList", - "required": true - }, - "metadata": { - "$ref": "#/definitions/kubernetes_ListMeta", - "javaType": "io.fabric8.kubernetes.api.model.ListMeta" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.OAuthAuthorizeTokenList", - "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.KubernetesResource", - "io.fabric8.kubernetes.api.model.KubernetesResourceList" - ] + "ObjectMeta": { + "$ref": "#/definitions/kubernetes_ObjectMeta", + "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, - "os_oauth_OAuthClient": { - "type": "object", - "description": "", - "properties": { - "apiVersion": { - "type": "string", - "description": "", - "default": "v1", - "required": true, - "enum": [ - "v1" - ] - }, - "kind": { - "type": "string", - "description": "", - "default": "OAuthClient", - "required": true - }, - "metadata": { - "$ref": "#/definitions/kubernetes_ObjectMeta", - "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" - }, - "redirectURIs": { - "type": "array", - "description": "valid redirection URIs associated with a client", - "items": { - "type": "string", - "description": "valid redirection URIs associated with a client" - } - }, - "respondWithChallenges": { - "type": "boolean", - "description": "indicates whether the client wants authentication needed responses made in the form of challenges instead of redirects" - }, - "secret": { - "type": "string", - "description": "unique secret associated with a client" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.OAuthClient", - "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.HasMetadata" - ] + "PersistentVolume": { + "$ref": "#/definitions/kubernetes_PersistentVolume", + "javaType": "io.fabric8.kubernetes.api.model.PersistentVolume" }, - "os_oauth_OAuthClientAuthorization": { - "type": "object", - "description": "", - "properties": { - "apiVersion": { - "type": "string", - "description": "", - "default": "v1", - "required": true, - "enum": [ - "v1" - ] - }, - "clientName": { - "type": "string", - "description": "references the client that created this authorization" - }, - "kind": { - "type": "string", - "description": "", - "default": "OAuthClientAuthorization", - "required": true - }, - "metadata": { - "$ref": "#/definitions/kubernetes_ObjectMeta", - "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" - }, - "scopes": { - "type": "array", - "description": "list of granted scopes", - "items": { - "type": "string", - "description": "list of granted scopes" - } - }, - "userName": { - "type": "string", - "description": "user name that authorized this client" - }, - "userUID": { - "type": "string", - "description": "unique UID associated with this authorization. userUID and userName must both match for this authorization to be valid" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.OAuthClientAuthorization", - "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.HasMetadata" - ] + "PersistentVolumeClaim": { + "$ref": "#/definitions/kubernetes_PersistentVolumeClaim", + "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaim" }, - "os_oauth_OAuthClientAuthorizationList": { - "type": "object", - "description": "", - "properties": { - "apiVersion": { - "type": "string", - "description": "", - "default": "v1", - "required": true, - "enum": [ - "v1" - ] - }, - "items": { - "type": "array", - "description": "list of oauth client authorizations", - "items": { - "$ref": "#/definitions/os_oauth_OAuthClientAuthorization", - "javaType": "io.fabric8.openshift.api.model.OAuthClientAuthorization" - } - }, - "kind": { - "type": "string", - "description": "", - "default": "OAuthClientAuthorizationList", - "required": true - }, - "metadata": { - "$ref": "#/definitions/kubernetes_ListMeta", - "javaType": "io.fabric8.kubernetes.api.model.ListMeta" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.OAuthClientAuthorizationList", - "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.KubernetesResource", - "io.fabric8.kubernetes.api.model.KubernetesResourceList" - ] + "PersistentVolumeClaimList": { + "$ref": "#/definitions/kubernetes_PersistentVolumeClaimList", + "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimList" }, - "os_oauth_OAuthClientList": { - "type": "object", - "description": "", - "properties": { - "apiVersion": { - "type": "string", - "description": "", - "default": "v1", - "required": true, - "enum": [ - "v1" - ] - }, - "items": { - "type": "array", - "description": "list of oauth clients", - "items": { - "$ref": "#/definitions/os_oauth_OAuthClient", - "javaType": "io.fabric8.openshift.api.model.OAuthClient" - } - }, - "kind": { - "type": "string", - "description": "", - "default": "OAuthClientList", - "required": true - }, - "metadata": { - "$ref": "#/definitions/kubernetes_ListMeta", - "javaType": "io.fabric8.kubernetes.api.model.ListMeta" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.OAuthClientList", - "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.KubernetesResource", - "io.fabric8.kubernetes.api.model.KubernetesResourceList" - ] + "PersistentVolumeList": { + "$ref": "#/definitions/kubernetes_PersistentVolumeList", + "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeList" }, - "os_project_Project": { - "type": "object", - "description": "", - "properties": { - "apiVersion": { - "type": "string", - "description": "", - "default": "v1", - "required": true, - "enum": [ - "v1" - ] - }, - "kind": { - "type": "string", - "description": "", - "default": "Project", - "required": true - }, - "metadata": { - "$ref": "#/definitions/kubernetes_ObjectMeta", - "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" - }, - "spec": { - "$ref": "#/definitions/os_project_ProjectSpec", - "javaType": "io.fabric8.openshift.api.model.ProjectSpec" - }, - "status": { - "$ref": "#/definitions/os_project_ProjectStatus", - "javaType": "io.fabric8.openshift.api.model.ProjectStatus" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.Project", - "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.HasMetadata" - ] + "PodList": { + "$ref": "#/definitions/kubernetes_PodList", + "javaType": "io.fabric8.kubernetes.api.model.PodList" }, - "os_project_ProjectList": { - "type": "object", - "description": "", - "properties": { - "apiVersion": { - "type": "string", - "description": "", - "default": "v1", - "required": true, - "enum": [ - "v1" - ] - }, - "items": { - "type": "array", - "description": "list of projects", - "items": { - "$ref": "#/definitions/os_project_Project", - "javaType": "io.fabric8.openshift.api.model.Project" - } - }, - "kind": { - "type": "string", - "description": "", - "default": "ProjectList", - "required": true - }, - "metadata": { - "$ref": "#/definitions/kubernetes_ListMeta", - "javaType": "io.fabric8.kubernetes.api.model.ListMeta" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.ProjectList", - "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.KubernetesResource", - "io.fabric8.kubernetes.api.model.KubernetesResourceList" - ] + "Policy": { + "$ref": "#/definitions/os_authorization_Policy", + "javaType": "io.fabric8.openshift.api.model.Policy" }, - "os_project_ProjectRequest": { - "type": "object", - "description": "", - "properties": { - "apiVersion": { - "type": "string", - "description": "", - "default": "v1", - "required": true, - "enum": [ - "v1" - ] - }, - "description": { - "type": "string", - "description": "description to apply to a project" - }, - "displayName": { - "type": "string", - "description": "display name to apply to a project" - }, - "kind": { - "type": "string", - "description": "", - "default": "ProjectRequest", - "required": true - }, - "metadata": { - "$ref": "#/definitions/kubernetes_ObjectMeta", - "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.ProjectRequest", - "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.HasMetadata" - ] + "PolicyBinding": { + "$ref": "#/definitions/os_authorization_PolicyBinding", + "javaType": "io.fabric8.openshift.api.model.PolicyBinding" }, - "os_project_ProjectSpec": { - "type": "object", - "description": "", - "properties": { - "finalizers": { - "type": "array", - "description": "an opaque list of values that must be empty to permanently remove object from storage", - "items": { - "type": "string", - "description": "an opaque list of values that must be empty to permanently remove object from storage" - } - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.ProjectSpec" + "PolicyBindingList": { + "$ref": "#/definitions/os_authorization_PolicyBindingList", + "javaType": "io.fabric8.openshift.api.model.PolicyBindingList" }, - "os_project_ProjectStatus": { - "type": "object", - "description": "", - "properties": { - "phase": { - "type": "string", - "description": "phase is the current lifecycle phase of the project" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.ProjectStatus" + "PolicyList": { + "$ref": "#/definitions/os_authorization_PolicyList", + "javaType": "io.fabric8.openshift.api.model.PolicyList" }, - "os_route_Route": { - "type": "object", - "description": "", - "properties": { - "apiVersion": { - "type": "string", - "description": "", - "default": "v1", - "required": true, - "enum": [ - "v1" - ] - }, - "kind": { - "type": "string", - "description": "", - "default": "Route", - "required": true - }, - "metadata": { - "$ref": "#/definitions/kubernetes_ObjectMeta", - "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" - }, - "spec": { - "$ref": "#/definitions/os_route_RouteSpec", - "javaType": "io.fabric8.openshift.api.model.RouteSpec" - }, - "status": { - "$ref": "#/definitions/os_route_RouteStatus", - "javaType": "io.fabric8.openshift.api.model.RouteStatus" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.Route", - "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.HasMetadata" - ] + "Project": { + "$ref": "#/definitions/os_project_Project", + "javaType": "io.fabric8.openshift.api.model.Project" }, - "os_route_RouteList": { - "type": "object", - "description": "", - "properties": { - "apiVersion": { - "type": "string", - "description": "", - "default": "v1", - "required": true, - "enum": [ - "v1" - ] - }, - "items": { - "type": "array", - "description": "list of routes", - "items": { - "$ref": "#/definitions/os_route_Route", - "javaType": "io.fabric8.openshift.api.model.Route" - } - }, - "kind": { - "type": "string", - "description": "", - "default": "RouteList", - "required": true - }, - "metadata": { - "$ref": "#/definitions/kubernetes_ListMeta", - "javaType": "io.fabric8.kubernetes.api.model.ListMeta" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.RouteList", - "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.KubernetesResource", - "io.fabric8.kubernetes.api.model.KubernetesResourceList" - ] + "ProjectList": { + "$ref": "#/definitions/os_project_ProjectList", + "javaType": "io.fabric8.openshift.api.model.ProjectList" }, - "os_route_RouteSpec": { - "type": "object", - "description": "", - "properties": { - "host": { - "type": "string", - "description": "optional: alias/dns that points to the service" - }, - "path": { - "type": "string", - "description": "optional: path that the router watches to route traffic to the service" - }, - "tls": { - "$ref": "#/definitions/os_route_TLSConfig", - "javaType": "io.fabric8.openshift.api.model.TLSConfig" - }, - "to": { - "$ref": "#/definitions/kubernetes_ObjectReference", - "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.RouteSpec" + "ProjectRequest": { + "$ref": "#/definitions/os_project_ProjectRequest", + "javaType": "io.fabric8.openshift.api.model.ProjectRequest" }, - "os_route_RouteStatus": { - "type": "object", - "description": "", - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.RouteStatus" + "Quantity": { + "$ref": "#/definitions/kubernetes_resource_Quantity", + "javaType": "io.fabric8.kubernetes.api.model.Quantity" }, - "os_route_TLSConfig": { - "type": "object", - "description": "", - "properties": { - "caCertificate": { - "type": "string", - "description": "provides the cert authority certificate contents" - }, - "certificate": { - "type": "string", - "description": "provides certificate contents" - }, - "destinationCACertificate": { - "type": "string", - "description": "provides the contents of the ca certificate of the final destination. When using re-encrypt termination this file should be provided in order to have routers use it for health checks on the secure connection" - }, - "key": { - "type": "string", - "description": "provides key file contents" - }, - "termination": { - "type": "string", - "description": "indicates termination type. if not set" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.TLSConfig" + "ReplicationControllerList": { + "$ref": "#/definitions/kubernetes_ReplicationControllerList", + "javaType": "io.fabric8.kubernetes.api.model.ReplicationControllerList" }, - "os_template_Parameter": { - "type": "object", - "description": "", - "properties": { - "description": { - "type": "string", - "description": "optional: describes the parameter" - }, - "from": { - "type": "string", - "description": "input value for the generator" - }, - "generate": { - "type": "string", - "description": "optional: generate specifies the generator to be used to generate random string from an input value specified by the from field. the result string is stored in the value field. if not specified" - }, - "name": { - "type": "string", - "description": "name of the parameter" - }, - "required": { - "type": "boolean", - "description": "indicates the parameter must have a non-empty value or be generated" - }, - "value": { - "type": "string", - "description": "optional: holds the parameter data. if specified" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.Parameter" + "ResourceQuota": { + "$ref": "#/definitions/kubernetes_ResourceQuota", + "javaType": "io.fabric8.kubernetes.api.model.ResourceQuota" }, - "os_template_Template": { - "type": "object", - "description": "", - "properties": { - "apiVersion": { - "type": "string", - "description": "", - "default": "v1", - "required": true, - "enum": [ - "v1" - ] - }, - "kind": { - "type": "string", - "description": "", - "default": "Template", - "required": true - }, - "labels": { - "type": "object", - "description": "optional: list of lables that are applied to every object during the template to config transformation", - "additionalProperties": { - "type": "string", - "description": "optional: list of lables that are applied to every object during the template to config transformation" - }, - "javaType": "java.util.Map\u003cString,String\u003e" - }, - "metadata": { - "$ref": "#/definitions/kubernetes_ObjectMeta", - "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" - }, - "objects": { - "type": "array", - "description": "list of objects to include in the template", - "items": { - "$ref": "#/definitions/kubernetes_runtime_RawExtension", - "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" - } - }, - "parameters": { - "type": "array", - "description": "optional: list of parameters used during template to config transformation", - "items": { - "$ref": "#/definitions/os_template_Parameter", - "javaType": "io.fabric8.openshift.api.model.Parameter" - } - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.Template", - "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.HasMetadata" - ] + "ResourceQuotaList": { + "$ref": "#/definitions/kubernetes_ResourceQuotaList", + "javaType": "io.fabric8.kubernetes.api.model.ResourceQuotaList" }, - "os_template_TemplateList": { - "type": "object", - "description": "", - "properties": { - "apiVersion": { - "type": "string", - "description": "", - "default": "v1", - "required": true, - "enum": [ - "v1" - ] - }, - "items": { - "type": "array", - "description": "list of templates", - "items": { - "$ref": "#/definitions/os_template_Template", - "javaType": "io.fabric8.openshift.api.model.Template" - } - }, - "kind": { - "type": "string", - "description": "", - "default": "TemplateList", - "required": true - }, - "metadata": { - "$ref": "#/definitions/kubernetes_ListMeta", - "javaType": "io.fabric8.kubernetes.api.model.ListMeta" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.TemplateList", - "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.KubernetesResource", - "io.fabric8.kubernetes.api.model.KubernetesResourceList" - ] + "Role": { + "$ref": "#/definitions/os_authorization_Role", + "javaType": "io.fabric8.openshift.api.model.Role" }, - "os_user_Group": { - "type": "object", - "description": "", - "properties": { - "apiVersion": { - "type": "string", - "description": "", - "default": "v1", - "required": true, - "enum": [ - "v1" - ] - }, - "kind": { - "type": "string", - "description": "", - "default": "Group", - "required": true - }, - "metadata": { - "$ref": "#/definitions/kubernetes_ObjectMeta", - "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" - }, - "users": { - "type": "array", - "description": "list of users in this group", - "items": { - "type": "string", - "description": "list of users in this group" - } - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.Group", - "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.HasMetadata" - ] + "RoleBinding": { + "$ref": "#/definitions/os_authorization_RoleBinding", + "javaType": "io.fabric8.openshift.api.model.RoleBinding" }, - "os_user_GroupList": { - "type": "object", - "description": "", - "properties": { - "apiVersion": { - "type": "string", - "description": "", - "default": "v1", - "required": true, - "enum": [ - "v1" - ] - }, - "items": { - "type": "array", - "description": "list of groups", - "items": { - "$ref": "#/definitions/os_user_Group", - "javaType": "io.fabric8.openshift.api.model.Group" - } - }, - "kind": { - "type": "string", - "description": "", - "default": "GroupList", - "required": true - }, - "metadata": { - "$ref": "#/definitions/kubernetes_ListMeta", - "javaType": "io.fabric8.kubernetes.api.model.ListMeta" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.GroupList", - "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.KubernetesResource", - "io.fabric8.kubernetes.api.model.KubernetesResourceList" - ] + "RoleBindingList": { + "$ref": "#/definitions/os_authorization_RoleBindingList", + "javaType": "io.fabric8.openshift.api.model.RoleBindingList" }, - "os_user_Identity": { - "type": "object", - "description": "", - "properties": { - "apiVersion": { - "type": "string", - "description": "", - "default": "v1", - "required": true, - "enum": [ - "v1" - ] - }, - "extra": { - "type": "object", - "description": "extra information for this identity", - "additionalProperties": { - "type": "string", - "description": "extra information for this identity" - }, - "javaType": "java.util.Map\u003cString,String\u003e" - }, - "kind": { - "type": "string", - "description": "", - "default": "Identity", - "required": true - }, - "metadata": { - "$ref": "#/definitions/kubernetes_ObjectMeta", - "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" - }, - "providerName": { - "type": "string", - "description": "source of identity information" - }, - "providerUserName": { - "type": "string", - "description": "uniquely represents this identity in the scope of the provider" - }, - "user": { - "$ref": "#/definitions/kubernetes_ObjectReference", - "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.Identity", - "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.HasMetadata" - ] + "RoleList": { + "$ref": "#/definitions/os_authorization_RoleList", + "javaType": "io.fabric8.openshift.api.model.RoleList" }, - "os_user_IdentityList": { - "type": "object", - "description": "", - "properties": { - "apiVersion": { - "type": "string", - "description": "", - "default": "v1", - "required": true, - "enum": [ - "v1" - ] - }, - "items": { - "type": "array", - "description": "list of identities", - "items": { - "$ref": "#/definitions/os_user_Identity", - "javaType": "io.fabric8.openshift.api.model.Identity" - } - }, - "kind": { - "type": "string", - "description": "", - "default": "IdentityList", - "required": true - }, - "metadata": { - "$ref": "#/definitions/kubernetes_ListMeta", - "javaType": "io.fabric8.kubernetes.api.model.ListMeta" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.IdentityList", - "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.KubernetesResource", - "io.fabric8.kubernetes.api.model.KubernetesResourceList" - ] + "RootPaths": { + "$ref": "#/definitions/api_RootPaths", + "javaType": "io.fabric8.kubernetes.api.model.RootPaths" }, - "os_user_User": { - "type": "object", - "description": "", - "properties": { - "apiVersion": { - "type": "string", - "description": "", - "default": "v1", - "required": true, - "enum": [ - "v1" - ] - }, - "fullName": { - "type": "string", - "description": "full name of user" - }, - "groups": { - "type": "array", - "description": "list of groups", - "items": { - "type": "string", - "description": "list of groups" - } - }, - "identities": { - "type": "array", - "description": "list of identities", - "items": { - "type": "string", - "description": "list of identities" - } - }, - "kind": { - "type": "string", - "description": "", - "default": "User", - "required": true - }, - "metadata": { - "$ref": "#/definitions/kubernetes_ObjectMeta", - "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.User", - "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.HasMetadata" - ] + "RouteList": { + "$ref": "#/definitions/os_route_RouteList", + "javaType": "io.fabric8.openshift.api.model.RouteList" }, - "os_user_UserList": { - "type": "object", - "description": "", - "properties": { - "apiVersion": { - "type": "string", - "description": "", - "default": "v1", - "required": true, - "enum": [ - "v1" - ] - }, - "items": { - "type": "array", - "description": "list of users", - "items": { - "$ref": "#/definitions/os_user_User", - "javaType": "io.fabric8.openshift.api.model.User" - } - }, - "kind": { - "type": "string", - "description": "", - "default": "UserList", - "required": true - }, - "metadata": { - "$ref": "#/definitions/kubernetes_ListMeta", - "javaType": "io.fabric8.kubernetes.api.model.ListMeta" - } - }, - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.UserList", - "javaInterfaces": [ - "io.fabric8.kubernetes.api.model.KubernetesResource", - "io.fabric8.kubernetes.api.model.KubernetesResourceList" - ] + "Secret": { + "$ref": "#/definitions/kubernetes_Secret", + "javaType": "io.fabric8.kubernetes.api.model.Secret" }, - "speter_inf_Dec": { - "type": "object", - "description": "", - "additionalProperties": true, - "javaType": "io.fabric8.openshift.api.model.Dec" - } - }, - "type": "object", - "properties": { - "BaseKubernetesList": { - "$ref": "#/definitions/kubernetes_List", - "javaType": "io.fabric8.kubernetes.api.model.BaseKubernetesList" + "SecretList": { + "$ref": "#/definitions/kubernetes_SecretList", + "javaType": "io.fabric8.kubernetes.api.model.SecretList" }, - "BuildConfigList": { - "$ref": "#/definitions/os_build_BuildConfigList", - "javaType": "io.fabric8.openshift.api.model.BuildConfigList" + "SecurityContextConstraints": { + "$ref": "#/definitions/kubernetes_SecurityContextConstraints", + "javaType": "io.fabric8.kubernetes.api.model.SecurityContextConstraints" }, - "BuildList": { - "$ref": "#/definitions/os_build_BuildList", - "javaType": "io.fabric8.openshift.api.model.BuildList" + "SecurityContextConstraintsList": { + "$ref": "#/definitions/kubernetes_SecurityContextConstraintsList", + "javaType": "io.fabric8.kubernetes.api.model.SecurityContextConstraintsList" }, - "BuildRequest": { - "$ref": "#/definitions/os_build_BuildRequest", - "javaType": "io.fabric8.openshift.api.model.BuildRequest" + "ServiceAccount": { + "$ref": "#/definitions/kubernetes_ServiceAccount", + "javaType": "io.fabric8.kubernetes.api.model.ServiceAccount" }, - "ClusterPolicy": { - "$ref": "#/definitions/os_authorization_ClusterPolicy", - "javaType": "io.fabric8.openshift.api.model.ClusterPolicy" + "ServiceAccountList": { + "$ref": "#/definitions/kubernetes_ServiceAccountList", + "javaType": "io.fabric8.kubernetes.api.model.ServiceAccountList" }, - "ClusterPolicyBinding": { - "$ref": "#/definitions/os_authorization_ClusterPolicyBinding", - "javaType": "io.fabric8.openshift.api.model.ClusterPolicyBinding" + "ServiceList": { + "$ref": "#/definitions/kubernetes_ServiceList", + "javaType": "io.fabric8.kubernetes.api.model.ServiceList" }, - "ClusterPolicyBindingList": { - "$ref": "#/definitions/os_authorization_ClusterPolicyBindingList", - "javaType": "io.fabric8.openshift.api.model.ClusterPolicyBindingList" - }, - "ClusterPolicyList": { - "$ref": "#/definitions/os_authorization_ClusterPolicyList", - "javaType": "io.fabric8.openshift.api.model.ClusterPolicyList" - }, - "ClusterRoleBinding": { - "$ref": "#/definitions/os_authorization_ClusterRoleBinding", - "javaType": "io.fabric8.openshift.api.model.ClusterRoleBinding" - }, - "ClusterRoleBindingList": { - "$ref": "#/definitions/os_authorization_ClusterRoleBindingList", - "javaType": "io.fabric8.openshift.api.model.ClusterRoleBindingList" - }, - "Config": { - "$ref": "#/definitions/kubernetes_config_Config", - "javaType": "io.fabric8.kubernetes.api.model.Config" - }, - "ContainerStatus": { - "$ref": "#/definitions/kubernetes_ContainerStatus", - "javaType": "io.fabric8.kubernetes.api.model.ContainerStatus" - }, - "DeploymentConfigList": { - "$ref": "#/definitions/os_deploy_DeploymentConfigList", - "javaType": "io.fabric8.openshift.api.model.DeploymentConfigList" - }, - "Endpoints": { - "$ref": "#/definitions/kubernetes_Endpoints", - "javaType": "io.fabric8.kubernetes.api.model.Endpoints" - }, - "EndpointsList": { - "$ref": "#/definitions/kubernetes_EndpointsList", - "javaType": "io.fabric8.kubernetes.api.model.EndpointsList" - }, - "EnvVar": { - "$ref": "#/definitions/kubernetes_EnvVar", - "javaType": "io.fabric8.kubernetes.api.model.EnvVar" - }, - "EventList": { - "$ref": "#/definitions/kubernetes_EventList", - "javaType": "io.fabric8.kubernetes.api.model.EventList" - }, - "Group": { - "$ref": "#/definitions/os_user_Group", - "javaType": "io.fabric8.openshift.api.model.Group" - }, - "GroupList": { - "$ref": "#/definitions/os_user_GroupList", - "javaType": "io.fabric8.openshift.api.model.GroupList" - }, - "Identity": { - "$ref": "#/definitions/os_user_Identity", - "javaType": "io.fabric8.openshift.api.model.Identity" - }, - "IdentityList": { - "$ref": "#/definitions/os_user_IdentityList", - "javaType": "io.fabric8.openshift.api.model.IdentityList" - }, - "ImageList": { - "$ref": "#/definitions/os_image_ImageList", - "javaType": "io.fabric8.openshift.api.model.ImageList" - }, - "ImageStreamList": { - "$ref": "#/definitions/os_image_ImageStreamList", - "javaType": "io.fabric8.openshift.api.model.ImageStreamList" - }, - "LocalSubjectAccessReview": { - "$ref": "#/definitions/os_authorization_LocalSubjectAccessReview", - "javaType": "io.fabric8.openshift.api.model.LocalSubjectAccessReview" - }, - "Namespace": { - "$ref": "#/definitions/kubernetes_Namespace", - "javaType": "io.fabric8.kubernetes.api.model.Namespace" - }, - "NamespaceList": { - "$ref": "#/definitions/kubernetes_NamespaceList", - "javaType": "io.fabric8.kubernetes.api.model.NamespaceList" - }, - "Node": { - "$ref": "#/definitions/kubernetes_Node", - "javaType": "io.fabric8.kubernetes.api.model.Node" - }, - "NodeList": { - "$ref": "#/definitions/kubernetes_NodeList", - "javaType": "io.fabric8.kubernetes.api.model.NodeList" - }, - "OAuthAccessToken": { - "$ref": "#/definitions/os_oauth_OAuthAccessToken", - "javaType": "io.fabric8.openshift.api.model.OAuthAccessToken" - }, - "OAuthAccessTokenList": { - "$ref": "#/definitions/os_oauth_OAuthAccessTokenList", - "javaType": "io.fabric8.openshift.api.model.OAuthAccessTokenList" - }, - "OAuthAuthorizeToken": { - "$ref": "#/definitions/os_oauth_OAuthAuthorizeToken", - "javaType": "io.fabric8.openshift.api.model.OAuthAuthorizeToken" - }, - "OAuthAuthorizeTokenList": { - "$ref": "#/definitions/os_oauth_OAuthAuthorizeTokenList", - "javaType": "io.fabric8.openshift.api.model.OAuthAuthorizeTokenList" - }, - "OAuthClient": { - "$ref": "#/definitions/os_oauth_OAuthClient", - "javaType": "io.fabric8.openshift.api.model.OAuthClient" - }, - "OAuthClientAuthorization": { - "$ref": "#/definitions/os_oauth_OAuthClientAuthorization", - "javaType": "io.fabric8.openshift.api.model.OAuthClientAuthorization" - }, - "OAuthClientAuthorizationList": { - "$ref": "#/definitions/os_oauth_OAuthClientAuthorizationList", - "javaType": "io.fabric8.openshift.api.model.OAuthClientAuthorizationList" - }, - "OAuthClientList": { - "$ref": "#/definitions/os_oauth_OAuthClientList", - "javaType": "io.fabric8.openshift.api.model.OAuthClientList" - }, - "ObjectMeta": { - "$ref": "#/definitions/kubernetes_ObjectMeta", - "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" - }, - "PersistentVolume": { - "$ref": "#/definitions/kubernetes_PersistentVolume", - "javaType": "io.fabric8.kubernetes.api.model.PersistentVolume" - }, - "PersistentVolumeClaim": { - "$ref": "#/definitions/kubernetes_PersistentVolumeClaim", - "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaim" - }, - "PersistentVolumeClaimList": { - "$ref": "#/definitions/kubernetes_PersistentVolumeClaimList", - "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimList" - }, - "PersistentVolumeList": { - "$ref": "#/definitions/kubernetes_PersistentVolumeList", - "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeList" - }, - "PodList": { - "$ref": "#/definitions/kubernetes_PodList", - "javaType": "io.fabric8.kubernetes.api.model.PodList" - }, - "Policy": { - "$ref": "#/definitions/os_authorization_Policy", - "javaType": "io.fabric8.openshift.api.model.Policy" - }, - "PolicyBinding": { - "$ref": "#/definitions/os_authorization_PolicyBinding", - "javaType": "io.fabric8.openshift.api.model.PolicyBinding" - }, - "PolicyBindingList": { - "$ref": "#/definitions/os_authorization_PolicyBindingList", - "javaType": "io.fabric8.openshift.api.model.PolicyBindingList" - }, - "PolicyList": { - "$ref": "#/definitions/os_authorization_PolicyList", - "javaType": "io.fabric8.openshift.api.model.PolicyList" - }, - "Project": { - "$ref": "#/definitions/os_project_Project", - "javaType": "io.fabric8.openshift.api.model.Project" - }, - "ProjectList": { - "$ref": "#/definitions/os_project_ProjectList", - "javaType": "io.fabric8.openshift.api.model.ProjectList" - }, - "ProjectRequest": { - "$ref": "#/definitions/os_project_ProjectRequest", - "javaType": "io.fabric8.openshift.api.model.ProjectRequest" - }, - "Quantity": { - "$ref": "#/definitions/kubernetes_resource_Quantity", - "javaType": "io.fabric8.kubernetes.api.model.Quantity" - }, - "ReplicationControllerList": { - "$ref": "#/definitions/kubernetes_ReplicationControllerList", - "javaType": "io.fabric8.kubernetes.api.model.ReplicationControllerList" - }, - "ResourceQuota": { - "$ref": "#/definitions/kubernetes_ResourceQuota", - "javaType": "io.fabric8.kubernetes.api.model.ResourceQuota" - }, - "ResourceQuotaList": { - "$ref": "#/definitions/kubernetes_ResourceQuotaList", - "javaType": "io.fabric8.kubernetes.api.model.ResourceQuotaList" - }, - "Role": { - "$ref": "#/definitions/os_authorization_Role", - "javaType": "io.fabric8.openshift.api.model.Role" - }, - "RoleBinding": { - "$ref": "#/definitions/os_authorization_RoleBinding", - "javaType": "io.fabric8.openshift.api.model.RoleBinding" - }, - "RoleBindingList": { - "$ref": "#/definitions/os_authorization_RoleBindingList", - "javaType": "io.fabric8.openshift.api.model.RoleBindingList" - }, - "RoleList": { - "$ref": "#/definitions/os_authorization_RoleList", - "javaType": "io.fabric8.openshift.api.model.RoleList" - }, - "RootPaths": { - "$ref": "#/definitions/api_RootPaths", - "javaType": "io.fabric8.kubernetes.api.model.RootPaths" - }, - "RouteList": { - "$ref": "#/definitions/os_route_RouteList", - "javaType": "io.fabric8.openshift.api.model.RouteList" - }, - "Secret": { - "$ref": "#/definitions/kubernetes_Secret", - "javaType": "io.fabric8.kubernetes.api.model.Secret" - }, - "SecretList": { - "$ref": "#/definitions/kubernetes_SecretList", - "javaType": "io.fabric8.kubernetes.api.model.SecretList" - }, - "SecurityContextConstraints": { - "$ref": "#/definitions/kubernetes_SecurityContextConstraints", - "javaType": "io.fabric8.kubernetes.api.model.SecurityContextConstraints" - }, - "SecurityContextConstraintsList": { - "$ref": "#/definitions/kubernetes_SecurityContextConstraintsList", - "javaType": "io.fabric8.kubernetes.api.model.SecurityContextConstraintsList" - }, - "ServiceAccount": { - "$ref": "#/definitions/kubernetes_ServiceAccount", - "javaType": "io.fabric8.kubernetes.api.model.ServiceAccount" - }, - "ServiceAccountList": { - "$ref": "#/definitions/kubernetes_ServiceAccountList", - "javaType": "io.fabric8.kubernetes.api.model.ServiceAccountList" - }, - "ServiceList": { - "$ref": "#/definitions/kubernetes_ServiceList", - "javaType": "io.fabric8.kubernetes.api.model.ServiceList" - }, - "Status": { - "$ref": "#/definitions/kubernetes_Status", - "javaType": "io.fabric8.kubernetes.api.model.Status" + "Status": { + "$ref": "#/definitions/kubernetes_Status", + "javaType": "io.fabric8.kubernetes.api.model.Status" }, "SubjectAccessReview": { "$ref": "#/definitions/os_authorization_SubjectAccessReview", @@ -14809,314 +12035,2914 @@ var Kubernetes; }; })(Kubernetes || (Kubernetes = {})); -/// -/// +/// +/// +var Kubernetes; +(function (Kubernetes) { + var hiddenProperties = ['status', 'deletionTimestamp']; + function withProperty(schema, name, action) { + if (schema.properties[name]) { + action(schema.properties[name]); + } + } + function hideProperties(schema) { + _.forEach(hiddenProperties, function (property) { + withProperty(schema, property, function (property) { + property.hidden = true; + }); + }); + } + Kubernetes._module.factory('KubernetesSchema', ['SchemaRegistry', function (schemas) { + Kubernetes.configureSchema(); + schemas.addListener("k8s schema customizer", function (name, schema) { + if (schema.properties) { + if (schema.properties.name) { + schema.controls = ['name', '*']; + } + withProperty(schema, 'portalIP', function (property) { + property.label = "Portal IP"; + }); + withProperty(schema, 'publicIPs', function (property) { + property.label = "Public IPs"; + }); + withProperty(schema, 'Spec', function (property) { + property.label = 'false'; + }); + withProperty(schema, 'Metadata', function (property) { + property.label = 'false'; + }); + hideProperties(schema); + } + if (_.endsWith(name, "ServiceSpec")) { + schema.controls = ["portalIP", "createExternalLoadBalancer", "sessionAffinity", "publicIPs", "ports", "selector", "*"]; + withProperty(schema, 'sessionAffinity', function (property) { + Kubernetes.log.debug("Schema: ", schema); + property.enum = ['None', 'ClientIP']; + property.default = 'None'; + }); + } + if (_.endsWith(name, "Service")) { + schema.controls = undefined; + schema.tabs = { + 'Basic Information': ['metadata'], + 'Details': ['*'] + }; + Kubernetes.log.debug("Name: ", name, " Schema: ", schema); + } + }); + schemas.addSchema('kubernetes', Kubernetes.schema); + // now lets iterate and add all the definitions too + angular.forEach(Kubernetes.schema.definitions, function (definition, typeName) { + //schemas.addSchema(typeName, definition); + schemas.addSchema("#/definitions/" + typeName, definition); + }); + return Kubernetes.schema; + }]); +})(Kubernetes || (Kubernetes = {})); + +/// +var Kubernetes; +(function (Kubernetes) { + // facade this to the watcher service + var KubernetesStateImpl = (function () { + function KubernetesStateImpl(watcher) { + this.watcher = watcher; + } + Object.defineProperty(KubernetesStateImpl.prototype, "namespaces", { + get: function () { + return _.map(this.watcher.getObjects(Kubernetes.WatchTypes.NAMESPACES), function (namespace) { + return namespace.metadata.name; + }); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(KubernetesStateImpl.prototype, "selectedNamespace", { + get: function () { + return this.watcher.getNamespace(); + }, + set: function (namespace) { + this.watcher.setNamespace(namespace); + }, + enumerable: true, + configurable: true + }); + return KubernetesStateImpl; + }()); + Kubernetes._module.factory('KubernetesState', ['WatcherService', function (watcher) { + return new KubernetesStateImpl(watcher); + }]); + // TODO this doesn't need to be a service really + Kubernetes._module.factory('KubernetesApiURL', function () { return Kubernetes.kubernetesApiUrl(); }); + // TODO we'll get rid of this... + Kubernetes._module.factory('KubernetesVersion', [function () { + return { + query: function () { return null; } + }; + }]); + // TODO let's move these into KubernetesModel so controllers don't have to inject them separately + Kubernetes._module.factory('KubernetesPods', ['KubernetesModel', function (KubernetesModel) { + return KubernetesModel['podsResource']; + }]); + Kubernetes._module.factory('KubernetesReplicationControllers', ['KubernetesModel', function (KubernetesModel) { + return KubernetesModel['replicationcontrollersResource']; + }]); + Kubernetes._module.factory('KubernetesServices', ['KubernetesModel', function (KubernetesModel) { + return KubernetesModel['servicesResource']; + }]); +})(Kubernetes || (Kubernetes = {})); + +/// +/// +/// +/// +var Kubernetes; +(function (Kubernetes) { + Kubernetes.FileDropController = Kubernetes.controller("FileDropController", ["$scope", "KubernetesModel", "FileUploader", '$http', function ($scope, model, FileUploader, $http) { + var log = Logger.get('kubernetes-file-uploader'); + var uploader = $scope.uploader = new FileUploader({ + autoUpload: false, + removeAfterUpload: true, + url: Kubernetes.kubernetesApiUrl() + }); + $scope.uploader.onAfterAddingFile = function (file) { + var reader = new FileReader(); + reader.onload = function () { + if (reader.readyState === 2) { + log.debug("File added: ", file); + var data = reader.result; + var obj = null; + if (_.endsWith(file._file.name, '.json')) { + log.debug("Parsing JSON file"); + try { + obj = angular.fromJson(data); + } + catch (err) { + log.debug("Failed to read dropped file ", file._file.name, ": ", err); + return; + } + } + else if (_.endsWith(file._file.name, '.yaml')) { + log.debug("Parsing YAML file"); + try { + obj = jsyaml.load(data); + } + catch (err) { + log.debug("Failed to read dropped file ", file._file.name, ": ", err); + return; + } + } + else { + log.debug("Unknown file type for file: ", file._file.name); + return; + } + log.debug("Dropped object: ", obj); + if (!KubernetesAPI.getNamespace(obj)) { + obj.metadata.namespace = model.currentNamespace(); + } + KubernetesAPI.put({ + object: obj, + success: function (data) { + Core.notification("success", "Applied " + file._file.name); + }, + error: function (err) { + log.info("Got error applying", file._file.name, ": ", err); + Core.notification("warning", "Failed to apply " + file._file.name + ", error: " + err.message); + } + }); + } + }; + reader.readAsText(file._file); + }; + $scope.uploader.onBeforeUploadItem = function (item) { + log.debug("Uploading: ", item); + //Core.notification('info', 'Uploading ' + item); + }; + $scope.uploader.onSuccessItem = function (item) { + log.debug("onSuccessItem: ", item); + }; + $scope.uploader.onErrorItem = function (item, response, status) { + log.debug("Failed to apply, response: ", response, " status: ", status); + }; + }]); + Kubernetes.NamespaceController = Kubernetes.controller('NamespaceController', ['$scope', 'WatcherService', function ($scope, watcher) { + $scope.namespaces = watcher.getObjects('namespaces'); + $scope.$watchCollection('namespaces', function (newValue, oldValue) { + if (newValue !== oldValue) { + $scope.namespace = watcher.getNamespace(); + } + }); + $scope.$watch('namespace', function (newValue, oldValue) { + if (newValue !== oldValue) { + if (newValue !== oldValue) { + watcher.setNamespace(newValue); + } + } + }); + }]); + Kubernetes.TopLevel = Kubernetes.controller("TopLevel", ["$scope", "KubernetesVersion", "KubernetesState", function ($scope, KubernetesVersion, KubernetesState) { + $scope.version = undefined; + $scope.showAppView = Kubernetes.isAppView(); + $scope.isActive = function (href) { + return Kubernetes.isLinkActive(href); + }; + $scope.mode = 'yaml'; + $scope.rawMode = true; + $scope.dirty = false; + $scope.readOnly = true; + $scope.rawModel = null; + $scope.$on('hawtioEditor_default_dirty', function ($event, dirty) { + $scope.dirty = dirty; + }); + $scope.save = function (rawModel) { + var obj = null; + var str = rawModel.replace(/\t/g, " "); + try { + obj = jsyaml.load(str); + } + catch (err) { + Core.notification("warning", "Failed to save object, error: \"" + err + "\""); + } + if (!obj) { + return; + } + $scope.readOnly = true; + KubernetesAPI.put({ + object: obj, + success: function (data) { + $scope.dirty = false; + Core.notification("success", "Saved object " + Kubernetes.getName(obj)); + Core.$apply($scope); + }, + error: function (err) { + console.log("Got error: ", err); + Core.notification("warning", "Failed to save object, error: \"" + err.message + "\""); + $scope.dirty = false; + Core.$apply($scope); + } + }); + }; + $scope.kubernetes = KubernetesState; + KubernetesVersion.query(function (response) { + $scope.version = response; + }); + }]); +})(Kubernetes || (Kubernetes = {})); + +/// +var Kubernetes; +(function (Kubernetes) { + Kubernetes.NamespaceController = Kubernetes.controller("NamespaceController", ["$scope", "WatcherService", function ($scope, watcher) { + $scope.watcher = watcher; + $scope.namespaceObjects = watcher.getObjects('namespaces'); + $scope.namespace = watcher.getNamespace(); + $scope.namespaces = []; + $scope.$watch('namespace', function (newValue, oldValue) { + if (newValue !== oldValue) { + watcher.setNamespace(newValue); + } + }); + $scope.$watch('watcher.getNamespace()', function (newValue, oldValue) { + if (newValue !== oldValue) { + $scope.namespace = newValue; + } + }); + $scope.$watchCollection('namespaceObjects', function (namespaceObjects) { + $scope.namespaces = _.map(namespaceObjects, function (namespace) { return namespace.metadata.name; }); + }); + }]); +})(Kubernetes || (Kubernetes = {})); + +/// +/// +/// +var Kubernetes; +(function (Kubernetes) { + var OverviewDirective = Kubernetes._module.directive("kubernetesOverview", ["$templateCache", "$compile", "$interpolate", "$timeout", "$window", "KubernetesState", 'KubernetesModel', function ($templateCache, $compile, $interpolate, $timeout, $window, KubernetesState, KubernetesModel) { + var log = Logger.get('kubernetes-overview'); + var model = KubernetesModel; + var state = KubernetesState; + return { + restrict: 'E', + replace: true, + link: function (scope, element, attr) { + scope.model = model; + element.css({ visibility: 'hidden' }); + scope.getEntity = function (type, key) { + switch (type) { + case 'host': + return model.podsByHost[key]; + case 'pod': + return model.podsByKey[key]; + case 'replicationController': + return model.replicationControllersByKey[key]; + case 'service': + return model.servicesByKey[key]; + default: + return undefined; + } + }; + scope.kubernetes = state; + scope.customizeDefaultOptions = function (options) { + options.Endpoint = ['Blank', {}]; + }; + scope.mouseEnter = function ($event) { + if (scope.jsPlumb) { + angular.element($event.currentTarget).addClass("hovered"); + scope.jsPlumb.getEndpoints($event.currentTarget).forEach(function (endpoint) { + endpoint.connections.forEach(function (connection) { + if (!connection.isHover()) { + connection.setHover(true); + connection.endpoints.forEach(function (e) { + scope.mouseEnter({ + currentTarget: e.element + }); + }); + } + }); + }); + } + }; + scope.mouseLeave = function ($event) { + if (scope.jsPlumb) { + angular.element($event.currentTarget).removeClass("hovered"); + scope.jsPlumb.getEndpoints($event.currentTarget).forEach(function (endpoint) { + endpoint.connections.forEach(function (connection) { + if (connection.isHover()) { + connection.setHover(false); + connection.endpoints.forEach(function (e) { + scope.mouseLeave({ + currentTarget: e.element + }); + }); + } + }); + }); + } + }; + /* + scope.customizeEndpointOptions = (jsPlumb, node, options) => { + var type = node.el.attr('data-type'); + // log.debug("endpoint type: ", type); + switch (type) { + case 'pod': + break; + case 'service': + break; + case 'replicationController': + break; + } + }; + */ + scope.customizeConnectionOptions = function (jsPlumb, edge, params, options) { + var type = edge.source.el.attr('data-type'); + options.connector = ["Bezier", { curviness: 50, stub: 25, alwaysRespectStubs: true }]; + params.paintStyle = { + lineWidth: 2, + strokeStyle: '#5555cc' + }; + switch (type) { + case 'pod': + break; + case 'service': + params.anchors = [ + ["Continuous", { faces: ["right"] }], + ["Continuous", { faces: ["left"] }] + ]; + break; + case 'replicationController': + params.anchors = [ + ["Perimeter", { shape: "Circle" }], + ["Continuous", { faces: ["right"] }] + ]; + break; + } + //log.debug("connection source type: ", type); + return options; + }; + function interpolate(template, config) { + return $interpolate(template)(config); + } + function createElement(template, thingName, thing) { + var config = {}; + config[thingName] = thing; + return interpolate(template, config); + } + function createElements(template, thingName, things) { + return things.map(function (thing) { + return createElement(template, thingName, thing); + }); + } + function appendNewElements(parentEl, template, thingName, things) { + things.forEach(function (thing) { + var key = thing['_key'] || thing['elementId'] || thing['id']; + var existing = parentEl.find("#" + key); + if (!existing.length) { + log.debug("existing: ", existing, " key: ", key); + parentEl.append($compile(createElement(template, thingName, thing))(scope)); + } + }); + } + function namespaceFilter(item) { + return Kubernetes.getNamespace(item) === scope.kubernetes.selectedNamespace; + } + function firstDraw() { + log.debug("First draw"); + element.empty(); + var services = model.services; + var replicationControllers = model.replicationControllers; + var pods = model.pods; + var hosts = model.hosts; + // log.debug("hosts: ", model.hosts); + var parentEl = angular.element($templateCache.get("overviewTemplate.html")); + var servicesEl = parentEl.find(".services"); + var hostsEl = parentEl.find(".hosts"); + var replicationControllersEl = parentEl.find(".replicationControllers"); + servicesEl.append(createElements($templateCache.get("serviceTemplate.html"), 'service', services.filter(namespaceFilter))); + replicationControllersEl.append(createElements($templateCache.get("replicationControllerTemplate.html"), 'replicationController', replicationControllers.filter(namespaceFilter))); + hosts.forEach(function (host) { + var hostEl = angular.element(createElement($templateCache.get("overviewHostTemplate.html"), 'host', host)); + var podContainer = angular.element(hostEl.find('.pod-container')); + podContainer.append(createElements($templateCache.get("podTemplate.html"), "pod", host.pods)); + hostsEl.append(hostEl); + }); + //parentEl.append(createElements($templateCache.get("podTemplate.html"), 'pod', pods)); + element.append($compile(parentEl)(scope)); + $timeout(function () { element.css({ visibility: 'visible' }); }, 250); + } + function update() { + scope.$emit('jsplumbDoWhileSuspended', function () { + log.debug("Update"); + var services = model.services; + var replicationControllers = model.replicationControllers; + var pods = model.pods; + var hosts = model.hosts; + var parentEl = element.find('[hawtio-jsplumb]'); + var children = parentEl.find('.jsplumb-node'); + children.each(function (index, c) { + var child = angular.element(c); + var key = child.attr('id'); + log.debug('key: ', key); + if (Core.isBlank(key)) { + return; + } + var type = child.attr('data-type'); + switch (type) { + case 'host': + if (key in model.podsByHost) { + return; + } + break; + case 'service': + if (key in model.servicesByKey && Kubernetes.getNamespace(model.servicesByKey[key]) == scope.kubernetes.selectedNamespace) { + var service = model.servicesByKey[key]; + child.attr('connect-to', service.connectTo); + return; + } + break; + case 'pod': + /* + if (hasId(pods, id)) { + return; + } + */ + if (key in model.podsByKey) { + return; + } + break; + case 'replicationController': + if (key in model.replicationControllersByKey) { + var replicationController = model.replicationControllersByKey[key]; + child.attr('connect-to', replicationController.connectTo); + return; + } + break; + default: + log.debug("Ignoring element with unknown type"); + return; + } + log.debug("Removing: ", key); + child.remove(); + }); + var servicesEl = element.find(".services"); + var replicationControllersEl = element.find(".replicationControllers"); + var hostsEl = element.find(".hosts"); + appendNewElements(servicesEl, $templateCache.get("serviceTemplate.html"), "service", services); + appendNewElements(replicationControllersEl, $templateCache.get("replicationControllerTemplate.html"), "replicationController", replicationControllers); + appendNewElements(hostsEl, $templateCache.get("overviewHostTemplate.html"), "host", hosts); + hosts.forEach(function (host) { + var hostEl = angular.element(hostsEl.find("#" + host.elementId)); + var podContainer = angular.element(hostEl.find('.pod-container')); + appendNewElements(podContainer, $templateCache.get("podTemplate.html"), "pod", host.pods); + }); + }); + } + function refreshDrawing() { + log.debug("Refreshing drawing"); + if (element.children().length === 0) { + firstDraw(); + } + else { + update(); + } + Core.$apply(scope); + } + scope.$on('kubernetesModelUpdated', _.debounce(refreshDrawing, 500, { trailing: true })); + setTimeout(refreshDrawing, 100); + } + }; + }]); + var OverviewBoxController = Kubernetes.controller("OverviewBoxController", ["$scope", "$location", function ($scope, $location) { + $scope.viewDetails = function (entity, path) { + if (entity) { + var namespace = Kubernetes.getNamespace(entity); + var id = Kubernetes.getName(entity); + $location.path(UrlHelpers.join('/kubernetes/namespace', namespace, path, id)); + } + else { + Kubernetes.log.warn("No entity for viewDetails!"); + } + }; + }]); + var scopeName = "OverviewController"; + var OverviewController = Kubernetes.controller(scopeName, ["$scope", "$location", "$http", "$timeout", "$routeParams", "KubernetesModel", "KubernetesState", "KubernetesApiURL", function ($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL) { + $scope.name = scopeName; + $scope.kubernetes = KubernetesState; + $scope.model = KubernetesModel; + Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); + //$scope.subTabConfig = []; + }]); +})(Kubernetes || (Kubernetes = {})); + +/// +/// +var Kubernetes; +(function (Kubernetes) { + Kubernetes.PipelinesController = Kubernetes.controller("PipelinesController", ["$scope", "KubernetesModel", "KubernetesState", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", + function ($scope, KubernetesModel, KubernetesState, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { + $scope.kubernetes = KubernetesState; + $scope.model = KubernetesModel; + Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); + /** + * Lets update the various data to join them together to a pipeline model + */ + function updateData() { + var pipelineSteps = {}; + if ($scope.buildConfigs && $scope.builds && $scope.deploymentConfigs) { + Kubernetes.enrichBuildConfigs($scope.buildConfigs, $scope.builds); + $scope.fetched = true; + angular.forEach($scope.buildConfigs, function (buildConfig) { + var pipelineKey = createPipelineKey(buildConfig); + if (pipelineKey) { + pipelineSteps[pipelineKey] = { + buildConfig: buildConfig, + builds: [], + triggeredBy: null, + triggersSteps: [], + $class: 'pipeline-build' + }; + } + }); + angular.forEach($scope.builds, function (build) { + var pipelineKey = createPipelineKey(build); + if (pipelineKey) { + var pipeline = pipelineSteps[pipelineKey]; + if (!pipeline) { + //console.log("warning no pipeline generated for buildConfig for key " + pipelineKey + " for build " + angular.toJson(build, true)); + console.log("warning no pipeline generated for buildConfig for key " + pipelineKey + " for build " + build.$name); + } + else { + pipeline.builds.push(build); + } + } + }); + // TODO now we need to look at the triggers to figure out which pipelineSteps triggers each pipelineStep + // now lets create an array of all pipelines, starting from the first known step with a list of the steps + var pipelines = []; + angular.forEach(pipelineSteps, function (pipelineStep, key) { + if (!pipelineStep.triggeredBy) { + // we are a root step.... + pipelines.push(pipelineStep); + // now lets add all the steps for this key... + pipelineStep.triggersSteps.push(pipelineStep); + angular.forEach(pipelineSteps, function (step) { + if (step.triggeredBy === key) { + pipelineStep.triggersSteps.push(step); + } + }); + } + }); + angular.forEach($scope.deploymentConfigs, function (deploymentConfig) { + if (!deploymentConfig.kind) { + deploymentConfig.kind = "DeploymentConfig"; + } + angular.forEach(deploymentConfig.triggers, function (trigger) { + var type = trigger.type; + var imageChangeParams = trigger.imageChangeParams; + if (imageChangeParams && type === "ImageChange") { + var from = imageChangeParams.from; + if (from) { + var name = from.name; + if (from.kind === "ImageRepository") { + var tag = imageChangeParams.tag || "latest"; + if (name) { + // now lets find a pipeline step which fires from this + angular.forEach(pipelineSteps, function (pipelineStep, key) { + var to = Core.pathGet(pipelineStep, ["buildConfig", "parameters", "output", "to"]); + if (to && (to.kind === "ImageRepository" || to.kind === "ImageStream")) { + var toName = to.name; + if (toName === name) { + var selector = Core.pathGet(deploymentConfig, ["template", "controllerTemplate", "selector"]); + var pods = []; + var $podCounters = selector ? Kubernetes.createPodCounters(selector, KubernetesModel.podsForNamespace(), pods) : null; + var deployPipelineStep = { + buildConfig: deploymentConfig, + $class: 'pipeline-deploy', + $podCounters: $podCounters, + $pods: pods + }; + pipelineStep.triggersSteps.push(deployPipelineStep); + } + } + }); + } + } + } + } + }); + }); + $scope.pipelines = pipelines; + } + } + /** + * Lets create a unique key for build / config we can use to do linking of builds / configs / triggers + */ + function createPipelineKey(buildConfig) { + return Core.pathGet(buildConfig, ["parameters", "source", "git", "uri"]); + } + $scope.$keepPolling = function () { return Kubernetes.keepPollingModel; }; + $scope.fetch = PollHelpers.setupPolling($scope, function (next) { + var ready = 0; + var numServices = 3; + function maybeNext() { + if (++ready >= numServices) { + next(); + } + } + var url = Kubernetes.buildsRestURL(); + $http.get(url). + success(function (data, status, headers, config) { + if (data) { + $scope.builds = Kubernetes.enrichBuilds(data.items); + updateData(); + } + maybeNext(); + }). + error(function (data, status, headers, config) { + Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); + maybeNext(); + }); + url = Kubernetes.buildConfigsRestURL(); + $http.get(url). + success(function (data, status, headers, config) { + if (data) { + $scope.buildConfigs = data.items; + updateData(); + } + maybeNext(); + }). + error(function (data, status, headers, config) { + Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); + maybeNext(); + }); + url = Kubernetes.deploymentConfigsRestURL(); + $http.get(url). + success(function (data, status, headers, config) { + if (data) { + $scope.deploymentConfigs = data.items; + updateData(); + } + maybeNext(); + }). + error(function (data, status, headers, config) { + Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); + maybeNext(); + }); + }); + $scope.fetch(); + }]); +})(Kubernetes || (Kubernetes = {})); + +/// +/// +/// +var Kubernetes; +(function (Kubernetes) { + Kubernetes.PodController = Kubernetes.controller("PodController", ["$scope", "KubernetesModel", "KubernetesState", "ServiceRegistry", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "$window", "KubernetesApiURL", + function ($scope, KubernetesModel, KubernetesState, ServiceRegistry, $templateCache, $location, $routeParams, $http, $timeout, $window, KubernetesApiURL) { + $scope.kubernetes = KubernetesState; + $scope.model = KubernetesModel; + $scope.rawModel = null; + $scope.itemConfig = { + properties: { + 'containers/image$': { + template: $templateCache.get('imageTemplate.html') + }, + 'status/phase': { + template: $templateCache.get('statusTemplate.html') + }, + '\\/Env\\/': { + template: $templateCache.get('envItemTemplate.html') + }, + '^\\/labels$': { + template: $templateCache.get('labelTemplate.html') + }, + '\\/env\\/key$': { + hidden: true + } + } + }; + Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); + $scope.$on('kubernetesModelUpdated', function () { + updateData(); + }); + $scope.$on('$routeUpdate', function ($event) { + updateData(); + }); + $scope.$watch('model.pods', function (newValue, oldValue) { + updateData(); + }, true); + $scope.flipRaw = function () { + $scope.rawMode = !$scope.rawMode; + Core.$apply($scope); + }; + $scope.openLogs = function () { + var pods = [$scope.item]; + Kubernetes.openLogsForPods(ServiceRegistry, $window, KubernetesModel.currentNamespace(), pods); + }; + updateData(); + function updateData() { + $scope.id = $routeParams["id"]; + $scope.item = $scope.model.getPod(KubernetesState.selectedNamespace, $scope.id); + if ($scope.item) { + $scope.rawModel = Kubernetes.toRawYaml($scope.item); + } + Core.$apply($scope); + } + }]); +})(Kubernetes || (Kubernetes = {})); + +/// +/// +/// +var Kubernetes; +(function (Kubernetes) { + Kubernetes.PodEditController = Kubernetes.controller("PodEditController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "SchemaRegistry", + function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, schemas) { + $scope.kubernetes = KubernetesState; + $scope.model = KubernetesModel; + $scope.id = $routeParams["id"]; + $scope.schema = KubernetesSchema; + $scope.config = schemas.cloneSchema("io.fabric8.kubernetes.api.model.Pod"); + //$scope.config = KubernetesSchema.definitions.kubernetes_v1beta2_Pod; + Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); + $scope.$on('$routeUpdate', function ($event) { + updateData(); + }); + updateData(); + function updateData() { + if ($scope.id) { + $scope.entity = $scope.model.getPod(KubernetesState.selectedNamespace, $scope.id); + Core.$apply($scope); + $scope.fetched = true; + } + else { + $scope.fetched = true; + } + } + $scope.save = function () { + console.log($scope.entity); + }; + }]); +})(Kubernetes || (Kubernetes = {})); + +/// +var Kubernetes; +(function (Kubernetes) { + var log = Logger.get('kubernetes-watcher'); + var k8sTypes = KubernetesAPI.NamespacedTypes.k8sTypes; + var osTypes = KubernetesAPI.NamespacedTypes.osTypes; + var self = {}; + var updateFunction = function () { + log.debug("Objects changed, firing listeners"); + var objects = {}; + _.forEach(self.getTypes(), function (type) { + objects[type] = self.getObjects(type); + }); + _.forEach(self.listeners, function (listener) { + listener(objects); + }); + }; + var debouncedUpdate = _.debounce(updateFunction, 75, { trailing: true }); + var namespaceWatch = { + selected: undefined, + watch: undefined, + objects: [], + objectMap: {}, + watches: {} + }; + hawtioPluginLoader.registerPreBootstrapTask({ + name: 'KubernetesWatcherInit', + depends: ['KubernetesApiDiscovery'], + task: function (next) { + var booted = false; + if (Kubernetes.isOpenShift) { + log.info("Backend is an Openshift instance"); + } + else { + log.info("Backend is a vanilla Kubernetes instance"); + } + namespaceWatch.watch = KubernetesAPI.watch({ + kind: KubernetesAPI.WatchTypes.NAMESPACES, + success: function (objects) { + namespaceWatch.objects = objects; + if (!booted) { + booted = true; + self.setNamespace(localStorage[Kubernetes.Constants.NAMESPACE_STORAGE_KEY] || Kubernetes.defaultNamespace); + next(); + } + log.debug("Got namespaces: ", namespaceWatch.objects); + }, error: function (error) { + log.warn("Error fetching namespaces: ", error); + // TODO is this necessary? + //HawtioOAuth.doLogout(); + if (!booted) { + booted = true; + next(); + } + } + }); + } + }); + hawtioPluginLoader.registerPreBootstrapTask({ + name: 'KubernetesApiDiscovery', + depends: ['hawtio-oauth'], + task: function (next) { + Kubernetes.isOpenShift = false; + var userProfile = HawtioOAuth.getUserProfile(); + log.debug("User profile: ", userProfile); + if (userProfile && userProfile.provider === "hawtio-google-oauth") { + log.debug("Possibly running on GCE"); + // api master is on GCE + $.ajax({ + url: UrlHelpers.join(Kubernetes.masterApiUrl(), 'api', 'v1', 'namespaces'), + complete: function (jqXHR, textStatus) { + if (textStatus === "success") { + log.debug("jqXHR: ", jqXHR); + userProfile.oldToken = userProfile.token; + userProfile.token = undefined; + $.ajaxSetup({ + beforeSend: function (request) { + } + }); + } + next(); + }, + beforeSend: function (request) { + } + }); + } + else { + log.debug("Not running on GCE"); + // double-check if we're on vanilla k8s or openshift + var rootUri = new URI(Kubernetes.masterApiUrl()).path("/oapi").query("").toString(); + log.debug("Checking for an openshift backend"); + HawtioOAuth.authenticatedHttpRequest({ + url: rootUri, + success: function (data) { + if (data) { + Kubernetes.isOpenShift = true; + } + next(); + }, + error: function (jqXHR, textStatus, errorThrown) { + var error = KubernetesAPI.getErrorObject(jqXHR); + if (!error) { + log.debug("Failed to find root paths: ", textStatus, ": ", errorThrown); + } + else { + log.debug("Failed to find root paths: ", error); + } + Kubernetes.isOpenShift = false; + next(); + } + }); + } + } + }); + var customUrlHandlers = {}; + self.setNamespace = function (namespace) { + if (namespace === namespaceWatch.selected) { + return; + } + if (namespaceWatch.selected) { + log.debug("Stopping current watches"); + _.forOwn(namespaceWatch.watches, function (watch, key) { + if (!KubernetesAPI.namespaced(key)) { + return; + } + log.debug("Disconnecting watch: ", key); + watch.disconnect(); + }); + _.forEach(_.keys(namespaceWatch.watches), function (key) { + if (!KubernetesAPI.namespaced(key)) { + return; + } + log.debug("Deleting kind: ", key); + delete namespaceWatch.watches[key]; + }); + } + namespaceWatch.selected = namespace; + if (namespace) { + _.forEach(self.getTypes(), function (kind) { + if (kind === KubernetesAPI.WatchTypes.NAMESPACES) { + return; + } + if (!namespaceWatch.watches[kind]) { + log.debug("Creating watch for kind: ", kind); + var config = { + kind: kind, + namespace: KubernetesAPI.namespaced(kind) ? namespace : undefined, + success: function (objects) { + watch.objects = objects; + debouncedUpdate(); + } + }; + if (kind in customUrlHandlers) { + config.urlFunction = customUrlHandlers[kind]; + } + var watch = KubernetesAPI.watch(config); + watch.config = config; + namespaceWatch.watches[kind] = watch; + } + }); + } + }; + self.hasWebSocket = true; + self.getNamespace = function () { return namespaceWatch.selected; }; + self.registerCustomUrlFunction = function (kind, url) { + customUrlHandlers[kind] = url; + if (kind in namespaceWatch.watches) { + var watch = namespaceWatch.watches[kind]; + var config = watch.config; + config.urlFunction = url; + watch.disconnect(); + delete namespaceWatch.watches[kind]; + config.success = function (objects) { + watch.objects = objects; + debouncedUpdate(); + }; + watch = KubernetesAPI.watch(config); + watch.config = config; + namespaceWatch.watches[kind] = watch; + } + }; + self.getTypes = function () { + var filter = function (kind) { + // filter out stuff we don't care about yet + switch (kind) { + case KubernetesAPI.WatchTypes.OAUTH_CLIENTS: + case KubernetesAPI.WatchTypes.IMAGE_STREAMS: + case KubernetesAPI.WatchTypes.POLICIES: + case KubernetesAPI.WatchTypes.ROLES: + case KubernetesAPI.WatchTypes.ROLE_BINDINGS: + case KubernetesAPI.WatchTypes.POLICY_BINDINGS: + case KubernetesAPI.WatchTypes.PERSISTENT_VOLUME_CLAIMS: + case KubernetesAPI.WatchTypes.PERSISTENT_VOLUMES: + case KubernetesAPI.WatchTypes.ENDPOINTS: + case KubernetesAPI.WatchTypes.RESOURCE_QUOTAS: + case KubernetesAPI.WatchTypes.SERVICE_ACCOUNTS: + return false; + default: + return true; + } + }; + var answer = k8sTypes.concat([Kubernetes.WatchTypes.NAMESPACES]); + if (Kubernetes.isOpenShift) { + answer = answer.concat(osTypes); + } + else { + answer = answer.concat(KubernetesAPI.WatchTypes.TEMPLATES); + answer = answer.concat(KubernetesAPI.WatchTypes.BUILD_CONFIGS); + } + return _.filter(answer, filter); + }; + self.getObjects = function (kind) { + if (kind === Kubernetes.WatchTypes.NAMESPACES) { + return namespaceWatch.objects; + } + if (kind in namespaceWatch.watches) { + return namespaceWatch.watches[kind].objects; + } + else { + return undefined; + } + }; + self.listeners = []; + // listener gets notified after a bunch of changes have occurred + self.registerListener = function (fn) { + self.listeners.push(fn); + }; + var projectsHandle = undefined; + // kick off the project watcher a bit sooner also + hawtioPluginLoader.registerPreBootstrapTask({ + name: 'ProjectsWatcher', + depends: ['KubernetesApiDiscovery'], + task: function (next) { + if (Kubernetes.isOpenShift) { + projectsHandle = KubernetesAPI.watch({ + kind: KubernetesAPI.WatchTypes.PROJECTS, + namespace: undefined, + success: function (objects) { + if (self.listeners && self.listeners.length) { + log.debug("got projects: ", objects); + _.forEach(self.listeners, function (listener) { + listener({ + projects: objects + }); + }); + } + } + }); + } + next(); + } + }); + Kubernetes._module.service('WatcherService', ['userDetails', '$rootScope', '$timeout', function (userDetails, $rootScope, $timeout) { + return self; + }]); +})(Kubernetes || (Kubernetes = {})); + +/// +/// +var Kubernetes; +(function (Kubernetes) { + var log = Logger.get("kubernetes-term-windows"); + Kubernetes._module.config(["kubernetesContainerSocketProvider", function (kubernetesContainerSocketProvider) { + kubernetesContainerSocketProvider.WebSocketFactory = "CustomWebSockets"; + }]); + Kubernetes._module.factory('CustomWebSockets', ["userDetails", function (userDetails) { + return function CustomWebSocket(url, protocols) { + var paths = url.split('?'); + if (!_.startsWith(paths[0], Kubernetes.masterApiUrl())) { + paths[0] = UrlHelpers.join(Kubernetes.masterApiUrl(), paths[0]); + } + url = KubernetesAPI.wsUrl(paths[0]); + url.search(paths[1] + '&access_token=' + userDetails.token); + log.debug("Using ws url: ", url.toString()); + return new WebSocket(url.toString(), protocols); + }; + }]); + Kubernetes._module.service('TerminalService', ["$rootScope", "$document", "$compile", "$templateCache", function ($rootScope, $document, $compile, $templateCache) { + var body = $document.find('body'); + function positionTerminals(terminals) { + var total = _.keys(terminals).length; + var dist = (body.width() - 225) / total; + var position = 5; + angular.forEach(terminals, function (value, key) { + if (!value.scope.docked) { + return; + } + value.el.css('left', position + 'px'); + position = position + dist; + }); + } + var defaultTemplate = $templateCache.get(UrlHelpers.join(Kubernetes.templatePath, 'termShell.html')); + var self = { + positionTerminals: function () { + positionTerminals(self.terminals); + }, + terminals: {}, + newTerminal: function (podLink, containerName, template) { + if (template === void 0) { template = defaultTemplate; } + var terminalId = UrlHelpers.join(podLink, containerName); + if (terminalId in self.terminals) { + log.debug("Already a terminal with id: ", terminalId); + self.raiseTerminal(terminalId); + return terminalId; + } + var scope = $rootScope.$new(); + scope.podLink = podLink; + scope.containerName = containerName; + scope.id = terminalId; + scope.docked = true; + var el = $($compile(template)(scope)); + var term = { + scope: scope, + el: el + }; + body.append(el); + self.terminals[terminalId] = term; + positionTerminals(self.terminals); + return terminalId; + }, + closeTerminal: function (id) { + var term = self.terminals[id]; + if (term) { + term.el.remove(); + delete self.terminals[id]; + positionTerminals(self.terminals); + } + }, + raiseTerminal: function (id) { + angular.forEach(self.terminals, function (value, key) { + if (key === id) { + value.el.css('z-index', '4000'); + value.el.find('.terminal').focus(); + } + else { + value.el.css('z-index', '3000'); + } + }); + } + }; + return self; + }]); + function addWindowActions(scope, element, TerminalService) { + var moved = false; + var lastX = 0; + var lastY = 0; + var header = element.find('.terminal-title'); + var body = element.find('.terminal-body'); + element.on('$destroy', function () { + $('#main').css({ display: 'inherit' }); + }); + var HEIGHT = 348; + var WIDTH = 600; + var TITLE_HEIGHT = 35; + var NAV_OFFSET = 46; + element.css({ + height: HEIGHT, + width: WIDTH + }); + header.css({ + height: TITLE_HEIGHT + }); + body.css({ + position: 'absolute', + top: 35, + left: 0, + right: 0, + bottom: 0 + }); + scope.close = function () { + TerminalService.closeTerminal(scope.id); + }; + scope.raise = function () { + TerminalService.raiseTerminal(scope.id); + }; + scope.$watch('docked', function (docked) { + if (docked) { + element.width(WIDTH); + if (!element.hasClass('minimized')) { + element.height(HEIGHT); + } + } + }); + scope.startResize = function (e) { + e.preventDefault(); + log.debug("Start resize"); + scope.resizing = true; + element.on('mouseup', scope.stopResize); + $(document).on('mousemove', scope.doResize); + $(document).on('mouseleave', scope.stopResize); + }; + scope.doResize = function (e) { + if (scope.resizing) { + log.debug("Resizing, e: ", e); + if (!moved) { + lastX = e.clientX; + lastY = e.clientY; + moved = true; + return; + } + var height = element.height(); + var width = element.width(); + var deltaX = e.clientX - lastX; + var deltaY = e.clientY - lastY; + var newHeight = height + deltaY; + var newWidth = width + deltaX; + if (newHeight > 35 && newWidth > 80) { + element.height(height + deltaY); + element.width(width + deltaX); + } + lastX = e.clientX; + lastY = e.clientY; + } + }; + scope.stopResize = function (e) { + scope.resizing = false; + moved = false; + element.off('mouseup', scope.stopResize); + $(document).off('mousemove', scope.doResize); + $(document).off('mouseleave', scope.stopResize); + }; + scope.mouseDown = function (e) { + e.preventDefault(); + if (element.hasClass('minimized') || element.hasClass('maximized')) { + return; + } + scope.dragging = true; + element.on('mouseup', scope.mouseUp); + $(document).on('mousemove', scope.mouseMove); + $(document).on('mouseleave', scope.mouseUp); + }; + scope.mouseUp = function (e) { + e.preventDefault(); + scope.dragging = false; + moved = false; + var height = element.height(); + var offset = element.offset(); + var winHeight = $(window).height(); + if (offset.top > (winHeight - height - 20)) { + element.css({ top: "inherit", left: "inherit" }); + scope.docked = true; + TerminalService.positionTerminals(); + } + else { + scope.docked = false; + } + element.off('mouseup', scope.mouseUp); + $(document).off('mousemove', scope.mouseMove); + $(document).off('mouseleave', scope.mouseUp); + }; + scope.mouseMove = function (e) { + if (scope.dragging) { + if (!moved) { + lastX = e.clientX; + lastY = e.clientY; + moved = true; + return; + } + var deltaX = e.clientX - lastX; + var deltaY = e.clientY - lastY; + var elOffset = element.offset(); + element.offset({ top: elOffset.top + deltaY, left: elOffset.left + deltaX }); + lastX = e.clientX; + lastY = e.clientY; + } + }; + function restoreWindow(scope, element) { + if (scope.offset) { + element.offset(scope.offset); + scope.docked = false; + } + if (scope.height) { + element.height(scope.height); + } + if (scope.width) { + element.width(scope.width); + } + } + function saveWindow(scope, element) { + scope.offset = element.offset(); + scope.height = element.height(); + scope.width = element.width(); + } + scope.maximized = function () { + return element.hasClass('maximized'); + }; + scope.maximize = function ($e) { + $e.preventDefault(); + if (element.hasClass('minimized')) { + scope.minimize(); + } + if (element.hasClass('maximized')) { + restoreWindow(scope, element); + $('#main').css({ display: 'inherit' }); + } + else { + saveWindow(scope, element); + $('#main').css({ display: 'none' }); + element.css({ + height: 'inherit', + bottom: 0, + width: '100%', + top: NAV_OFFSET, + left: 0 + }); + } + element.toggleClass('maximized'); + }; + scope.minimize = function ($e) { + $e.preventDefault(); + if (element.hasClass('maximized')) { + scope.maximize(); + } + if (element.hasClass('minimized')) { + restoreWindow(scope, element); + } + else { + saveWindow(scope, element); + scope.docked = true; + element.css({ height: TITLE_HEIGHT, top: "inherit", left: "inherit" }); + TerminalService.positionTerminals(); + } + element.toggleClass('minimized'); + }; + } + Kubernetes.addWindowActions = addWindowActions; + Kubernetes._module.directive('terminalWindow', ["$compile", "TerminalService", function ($compile, TerminalService) { + return { + restrict: 'A', + scope: false, + link: function (scope, element, attr) { + addWindowActions(scope, element, TerminalService); + var body = element.find('.terminal-body'); + body.append($compile('')(scope)); + } + }; + }]); +})(Kubernetes || (Kubernetes = {})); + +/// +/// +var Kubernetes; +(function (Kubernetes) { + var log = Logger.get("kubernetes-pod-logs"); + Kubernetes._module.service("PodLogReplacements", function () { + return []; + }); + Kubernetes._module.run(["PodLogReplacements", function (PodLogReplacements) { + var log = Logger.get("pod-log-replacers"); + // Add ANSI escape character replacer + // adapted from https://github.com/mmalecki/ansispan + var colors = { + '30': 'black', + '31': 'red', + '32': 'green', + '33': 'yellow', + '34': 'blue', + '35': 'purple', + '36': 'cyan', + '37': 'white' + }; + PodLogReplacements.push(function (msg) { + if (!msg) { + return msg; + } + var end = ""; + _.forOwn(colors, function (color, code) { + var start = ""; + msg = msg.replace(new RegExp('\033\\[' + code + 'm', 'g'), start); + msg = msg.replace(new RegExp('\033\\[0;' + code + 'm', 'g'), start); + }); + msg = msg.replace(/\033\[1m/g, '').replace(/\033\[22m/g, ''); + msg = msg.replace(/\033\[3m/g, '').replace(/\033\[23m/g, ''); + msg = msg.replace(/\033\[m/g, end); + msg = msg.replace(/\033\[0m/g, end); + msg = msg.replace(/\033\[39m/g, end); + msg = msg.replace(/\033\[2m/g, ''); + msg = msg.replace(/\033\[0;39m/g, end); + log.debug("Running replacement on message: ", msg); + return msg; + }); + }]); + Kubernetes._module.controller("Kubernetes.PodLogLinkController", ["$scope", "TerminalService", "$templateCache", function ($scope, TerminalService, $templateCache) { + $scope.openLogs = function (entity) { + log.debug("Open logs: ", entity); + TerminalService.newTerminal(entity.metadata.selfLink, entity.metadata.name, $templateCache.get(UrlHelpers.join(Kubernetes.templatePath, 'logShell.html'))); + }; + }]); + Kubernetes._module.directive('podLogDisplay', ["userDetails", "PodLogReplacements", function (userDetails, PodLogReplacements) { + return { + restrict: 'E', + template: "\n \n ", + link: function (scope, element, attr) { + var link = scope.$eval('podLink'); + var name = scope.$eval('containerName'); + if (!link) { + return; + } + scope.fetched = false; + scope.previous = false; + scope.messages = []; + link = UrlHelpers.join(Kubernetes.masterApiUrl(), link, 'log'); + link = KubernetesAPI.wsUrl(link); + link.search({ + follow: true, + tailLines: 1000, + access_token: userDetails.token + }); + var messages = []; + var pullMessages = _.debounce(function () { + scope.messages = scope.messages.concat(_.remove(messages, function () { return true; }).map(function (msg) { + PodLogReplacements.forEach(function (replFunc) { + if (angular.isFunction(replFunc)) { + msg = replFunc(msg); + } + }); + return msg; + })); + if (!scope.fetched) { + scope.fetched = true; + } + Core.$apply(scope); + }, 1000); + function initSocket(link) { + scope.fetched = false; + messages.length = 0; + scope.messages.length = 0; + var ws = new WebSocket(link.toString(), 'base64.binary.k8s.io'); + ws.onmessage = function (event) { + try { + var message = window.atob(event.data); + messages.push(message); + pullMessages(); + } + catch (err) { + } + }; + return ws; + } + var ws = initSocket(link); + scope.$watch('previous', function (value, old) { + if (value !== old) { + if (link.hasSearch('previous')) { + link.removeSearch('previous').addSearch('previous', scope.previous); + } + else { + link.addSearch('previous', scope.previous); + } + ws.close(); + ws = initSocket(link); + } + }); + element.on('$destroy', function () { + if (ws) { + try { + ws.close(); + } + catch (err) { + } + delete ws; + } + }); + } + }; + }]); + Kubernetes._module.directive('podLogWindow', ["$compile", "TerminalService", function ($compile, TerminalService) { + return { + restrict: 'A', + scope: false, + link: function (scope, element, attr) { + Kubernetes.addWindowActions(scope, element, TerminalService); + scope.atBottom = true; + scope.$watch('atBottom', function (val) { + console.log("atBottom: ", val); + }); + } + }; + }]); +})(Kubernetes || (Kubernetes = {})); + +/// +/// +/// +var Kubernetes; +(function (Kubernetes) { + Kubernetes.EnvItem = Kubernetes.controller("EnvItem", ["$scope", function ($scope) { + var parts = $scope.data.split('='); + $scope.key = parts.shift(); + $scope.value = parts.join('='); + }]); + // main controller for the page + Kubernetes.Pods = Kubernetes.controller("Pods", ["$scope", "KubernetesModel", "KubernetesPods", "KubernetesState", "ServiceRegistry", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", + function ($scope, KubernetesModel, KubernetesPods, KubernetesState, ServiceRegistry, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { + $scope.kubernetes = KubernetesState; + $scope.model = KubernetesModel; + $scope.$on('kubernetesModelUpdated', function () { + Core.$apply($scope); + }); + $scope.itemSchema = Forms.createFormConfiguration(); + $scope.tableConfig = { + data: 'model.pods', + showSelectionCheckbox: true, + enableRowClickSelection: false, + multiSelect: true, + selectedItems: [], + filterOptions: { + filterText: $location.search()["q"] || '' + }, + columnDefs: [ + { + field: '_key', + displayName: 'Name', + defaultSort: true, + cellTemplate: $templateCache.get("idTemplate.html") + }, + { + field: '$statusCss', + displayName: 'Status', + cellTemplate: $templateCache.get("statusTemplate.html") + }, + { field: '$eventCount', + displayName: 'Events', + cellTemplate: $templateCache.get("eventSummaryTemplate.html") + }, + { + field: '$restartCount', + displayName: 'Restarts' + }, + { + field: '$createdTime', + displayName: 'Age', + cellTemplate: $templateCache.get("ageTemplate.html") + }, + { + field: '$imageNames', + displayName: 'Images', + cellTemplate: $templateCache.get("imageTemplate.html") + }, + { + field: '$host', + displayName: 'Host', + cellTemplate: $templateCache.get("hostTemplate.html") + }, + { + field: '$labelsText', + displayName: 'Labels', + cellTemplate: $templateCache.get("labelTemplate.html") + }, + { + field: '$podIP', + displayName: 'Pod IP', + customSortField: function (field) { + return Kubernetes.sortByPodIp(field.$podIP); + } + } + ] + }; + $scope.openLogs = function () { + var pods = $scope.tableConfig.selectedItems; + if (!pods || !pods.length) { + if ($scope.id) { + var item = $scope.item; + if (item) { + pods = [item]; + } + } + } + Kubernetes.openLogsForPods(ServiceRegistry, $window, KubernetesModel.currentNamespace(), pods); + }; + Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); + $scope.deletePrompt = function (selected) { + if (angular.isString(selected)) { + selected = [{ + id: selected + }]; + } + UI.multiItemConfirmActionDialog({ + collection: selected, + index: 'metadata.name', + onClose: function (result) { + if (result) { + function deleteSelected(selected, next) { + if (next) { + Kubernetes.log.debug("deleting: ", Kubernetes.getName(next)); + KubernetesPods.delete({ + id: Kubernetes.getName(next) + }, undefined, function () { + Kubernetes.log.debug("deleted: ", Kubernetes.getName(next)); + deleteSelected(selected, selected.shift()); + }, function (error) { + Kubernetes.log.debug("Error deleting: ", error); + deleteSelected(selected, selected.shift()); + }); + } + } + deleteSelected(selected, selected.shift()); + } + }, + title: 'Delete pods?', + action: 'The following pods will be deleted:', + okText: 'Delete', + okClass: 'btn-danger', + custom: "This operation is permanent once completed!", + customClass: "alert alert-warning" + }).open(); + }; + $scope.createPods = function () { + var xhr = new XMLHttpRequest(); + xhr.onreadystatechange = function () { + if (xhr.readyState == 4) { + if (xhr.status == 200) { + var obj = JSON.parse(xhr.responseText); + var object = { + "name": "newpod", + "labels": { + "aim": "test", + "app": "oracle" + }, + "path": '/home/', + "port": 1525 + }; + Kubernetes.createRC(object); + } + else { + } + } + }; + xhr.open("POST", "/oracleAppPath", false); //与服务器连接并发送 + xhr.send(null); + }; + }]); +})(Kubernetes || (Kubernetes = {})); + +/* +read a object from jiangsu province , such as nanjing with some information +读取江苏的某个地区的信息,以及系统信息 + */ +var Kubernetes; +(function (Kubernetes) { + var system_arr = [{ "sys_name": "部门预算", "sys_id": "1" }, { "sys_name": "非税收入收缴管理系统", "sys_id": "2" }, + { "sys_name": "预算执行系统", "sys_id": "3" }, { "sys_name": "资产管理系统", "sys_id": "4" }, { "sys_name": "用友财政综合管理信息系统", "sys_id": "5" }, + { "sys_name": "用友A++", "sys_id": "6" }, { "sys_name": "浦口财政一体化", "sys_id": "7" }, { "sys_name": "栖霞区财政业务信息管理系统", "sys_id": "8" }, + { "sys_name": "一体化系统", "sys_id": "9" }, { "sys_name": "财政管理一体化系统", "sys_id": "10" }, { "sys_name": "滨江开发区财政分局", "sys_id": "11" }, + { "sys_name": "江宁经济技术开发区财政分局", "sys_id": "12" }, { "sys_name": "江宁科学园财政分局", "sys_id": "13" }, { "sys_name": "财政一体化系统", "sys_id": "14" }, + { "sys_name": "A++财政一体化平台", "sys_id": "15" }, { "sys_name": "非税系统", "sys_id": "16" }, { "sys_name": "一体化预算执行系统", "sys_id": "17" }, + { "sys_name": "一体化", "sys_id": "18" }, { "sys_name": "国库集中支付管理信息系统", "sys_id": "19" }, { "sys_name": "国库集中支付", "sys_id": "20" }, + { "sys_name": "财政专户核算及非税系统", "sys_id": "21" }, { "sys_name": "集中支付系统", "sys_id": "22" }, { "sys_name": "财政专户核算系统", "sys_id": "23" }, + { "sys_name": "非税收缴系统", "sys_id": "24" }, { "sys_name": "财政一体化平台", "sys_id": "25" }, { "sys_name": "富深预算执行", "sys_id": "26" }, + { "sys_name": "用友非税及票据", "sys_id": "27" }, { "sys_name": "用友预算执行", "sys_id": "28" }, { "sys_name": "江苏省财政预算执行系统", "sys_id": "29" }, + { "sys_name": "用友通用软件", "sys_id": "30" }, { "sys_name": "联友软件/通用财务", "sys_id": "31" }, { "sys_name": "用友GRPG-U8R10财政管理软件", "sys_id": "32" }, + { "sys_name": "用友GPP-R10财政管理软件", "sys_id": "33" }, { "sys_name": "富深协通财政一体化管理信息系统", "sys_id": "34" }, { "sys_name": "财务统一核算系统", "sys_id": "35" }, + { "sys_name": "公共财政管理软件", "sys_id": "36" }, { "sys_name": "A++财政一体化信息平台", "sys_id": "37" }, { "sys_name": "新中大公共财务管理软件", "sys_id": "38" }, + { "sys_name": "富深财政一体化管理系统", "sys_id": "39" }, { "sys_name": "新中大公共财政管理系统", "sys_id": "40" }, { "sys_name": "富深协通财政一体化业务管理系统软件", "sys_id": "41" }, + { "sys_name": "新中大公共财政管理软件Gsoft", "sys_id": "42" }, { "sys_name": "财政一体化业务系统", "sys_id": "43" }, { "sys_name": "财政一体化软件", "sys_id": "44" }, + { "sys_name": "非税收入系统", "sys_id": "45" }, { "sys_name": "总预算系统", "sys_id": "46" }, { "sys_name": "国库集中支付系统", "sys_id": "47" }, { "sys_name": "用款计划系统", "sys_id": "48" }, + { "sys_name": "指标管理系统", "sys_id": "49" }, { "sys_name": "财政综合业务管理平台", "sys_id": "50" }, { "sys_name": "财政一体化管理信息系统", "sys_id": "51" }, { "sys_name": "工资统发", "sys_id": "52" }, + { "sys_name": "国有资产", "sys_id": "53" }, { "sys_name": "乡镇非税收入", "sys_id": "54" }, { "sys_name": "乡镇集中支付", "sys_id": "55" }, { "sys_name": "非税征缴系统", "sys_id": "56" }, + { "sys_name": "预算编制与执行系统", "sys_id": "57" }, { "sys_name": "预算管理综合业务平台", "sys_id": "58" }, { "sys_name": "u8管理软件", "sys_id": "59" }, { "sys_name": "财政指标管理系统", "sys_id": "60" }, + { "sys_name": "用友GRP-R9财务管理软件", "sys_id": "61" }, { "sys_name": "用友GRP-U8财政管理软件", "sys_id": "62" }, { "sys_name": "账务处理系统", "sys_id": "63" }, { "sys_name": "R9i财政管理软件", "sys_id": "64" }, + { "sys_name": "u8财政管理软件", "sys_id": "65" }, { "sys_name": "相城区财政综合管理信息系统", "sys_id": "66" }, { "sys_name": "财政非税综合管理系统", "sys_id": "67" }, { "sys_name": "财政综合管理平台", "sys_id": "68" }, + { "sys_name": "吴江区财政一体化", "sys_id": "69" }, { "sys_name": "用友R9", "sys_id": "70" }, { "sys_name": "财政公共应用服务平台", "sys_id": "71" }, { "sys_name": "金蝶K/3创新管理平台", "sys_id": "72" }, { "sys_name": "账务数据系统", "sys_id": "73" }, + { "sys_name": "公共财政服务平台", "sys_id": "74" }, { "sys_name": "会计核算系统", "sys_id": "75" }, { "sys_name": "项目库", "sys_id": "76" }, { "sys_name": "财政总预算(外)专户管理系统", "sys_id": "77" }, + { "sys_name": "城建资金专户管理系统", "sys_id": "78" }, { "sys_name": "农保专户管理系统", "sys_id": "79" }, { "sys_name": "农业发展基金专户管理系统", "sys_id": "80" }, + { "sys_name": "失地农民保障资金专户", "sys_id": "81" }, { "sys_name": "非税收入征管系统", "sys_id": "82" }, { "sys_name": "工资统发人员信息", "sys_id": "83" }, + { "sys_name": "预算指标-国库集中支付系统", "sys_id": "84" }, { "sys_name": "总预算会计核算系统", "sys_id": "85" }, { "sys_name": "部门预算编审系统", "sys_id": "86" }, + { "sys_name": "公务消费管理系统", "sys_id": "87" }, { "sys_name": "国有资产管理系统", "sys_id": "88" }, { "sys_name": "区镇财政管理“一体化”系统", "sys_id": "89" }, + { "sys_name": "县本级财政管理“一体化”系统", "sys_id": "90" }, { "sys_name": "用友政务", "sys_id": "91" }, { "sys_name": "财政专户核算(行政口专项资金)", "sys_id": "92" }, + { "sys_name": "财政专户核算(经建口专项资金)", "sys_id": "93" }, { "sys_name": "财政专户核算(农业保险专账)", "sys_id": "94" }, { "sys_name": "财政专户核算(农业综合开发专账)", "sys_id": "95" }, + { "sys_name": "财政专户核算(社保资金专账)", "sys_id": "96" }, { "sys_name": "财政专户核算(土地出让专账)", "sys_id": "97" }, { "sys_name": "财政专户核算(综合口专项资金)", "sys_id": "98" }, + { "sys_name": "非税收入管理系统", "sys_id": "99" }, { "sys_name": "农业专向及农业发展基金专项", "sys_id": "100" }, { "sys_name": "总预算会计核算", "sys_id": "101" }, { "sys_name": "金财工程一体化支撑平台", "sys_id": "102" }, + { "sys_name": "非税收缴", "sys_id": "103" }, { "sys_name": "学校预算执行", "sys_id": "104" }, { "sys_name": "预算执行", "sys_id": "105" }, { "sys_name": "专项资金", "sys_id": "106" }, + { "sys_name": "总预算", "sys_id": "107" }, { "sys_name": "部门预算系统", "sys_id": "108" }, { "sys_name": "财政专户核算", "sys_id": "109" }, { "sys_name": "财政专户账务系统", "sys_id": "110" }, + { "sys_name": "富深财政一体化业务管理系统", "sys_id": "111" }, { "sys_name": "国有资产系统", "sys_id": "112" }, { "sys_name": "国库专项资金管理系统", "sys_id": "113" }, + { "sys_name": "非税收缴管理系统", "sys_id": "114" }, { "sys_name": "财政管理系统(新农保)", "sys_id": "115" }, { "sys_name": "财政管理系统(城市居民医疗统筹)", "sys_id": "116" }, + { "sys_name": "财政管理系统(集中支付中心)", "sys_id": "117" }, { "sys_name": "财政管理系统(解困金)", "sys_id": "118" }, { "sys_name": "财政管理系统(旧城改造)", "sys_id": "119" }, + { "sys_name": "财政管理系统(社保资金账户)", "sys_id": "120" }, { "sys_name": "财政管理系统(土地出让专帐)", "sys_id": "121" }, { "sys_name": "财政管理系统(预拨及非集中支付中心)", "sys_id": "122" }, + { "sys_name": "财政管理系统(预算外资金)", "sys_id": "123" }, { "sys_name": "总预算会计", "sys_id": "124" }, { "sys_name": "财务核算系统", "sys_id": "125" }, { "sys_name": "工资统发系统", "sys_id": "126" }, + { "sys_name": "预算编审系统", "sys_id": "127" }, { "sys_name": "预算管理系统", "sys_id": "128" }, { "sys_name": "预算外资金(从联网审计中取数)", "sys_id": "129" }, + { "sys_name": "G6-E财务管理系统", "sys_id": "130" }, { "sys_name": "新中大公共财政管理软件", "sys_id": "131" }, { "sys_name": "用友GRP/R9财政管理软件", "sys_id": "132" }, + { "sys_name": "用友GRP-U8R10", "sys_id": "133" }, { "sys_name": "财政一体化管理系统(基建户)", "sys_id": "134" }, { "sys_name": "财政一体化管理系统(集中支付中心)", "sys_id": "135" }, + { "sys_name": "财政一体化管理系统(农业综合开发)", "sys_id": "136" }, { "sys_name": "财政一体化管理系统(预算外资金)", "sys_id": "137" }, { "sys_name": "财政一体化管理系统(支农专户)", "sys_id": "138" }, + { "sys_name": "财政一体化管理系统(总预算)", "sys_id": "139" }, { "sys_name": "国资管理系统", "sys_id": "140" }, { "sys_name": "乡财县管系统", "sys_id": "141" }, { "sys_name": "预算编制管理系统", "sys_id": "142" }, + { "sys_name": "盐城市_市本级_部门预算", "sys_id": "143" }, { "sys_name": "盐城市_市本级_非税收管理系统", "sys_id": "144" }, { "sys_name": "盐城市_市本级_预算执行系统", "sys_id": "145" }, + { "sys_name": "盐城市_亭湖区_财政专户", "sys_id": "146" }, { "sys_name": "盐城市_亭湖区_非税收入管理", "sys_id": "147" }, { "sys_name": "盐城市_亭湖区_国库集中支付管理", "sys_id": "148" }, + { "sys_name": "盐城市_亭湖区_预算指标管理", "sys_id": "149" }, { "sys_name": "盐城市_亭湖区_总预算会计核算", "sys_id": "150" }, { "sys_name": "盐城市_盐都区_财政专户核算系统", "sys_id": "151" }, + { "sys_name": "盐城市_盐都区_非税收入管理系统", "sys_id": "152" }, { "sys_name": "盐城市_盐都区_国库集中支付系统", "sys_id": "153" }, { "sys_name": "盐城市_盐都区_总预算会计核算系统", "sys_id": "154" }, + { "sys_name": "盐城市_响水县_部门预算管理系统", "sys_id": "155" }, { "sys_name": "盐城市_响水县_财政一体化信息系统", "sys_id": "156" }, { "sys_name": "盐城市_响水县_非税收入收缴管理系统", "sys_id": "157" }, + { "sys_name": "盐城市_滨海县财政一体化", "sys_id": "158" }, { "sys_name": "盐城市_阜宁县_财政管理软件", "sys_id": "159" }, { "sys_name": "盐城市_阜宁县_财政管理软件用友U8", "sys_id": "160" }, + { "sys_name": "盐城市_射阳县_财政预算执行一体化系统", "sys_id": "161" }, { "sys_name": "盐城市_建湖县_非税收缴", "sys_id": "162" }, + { "sys_name": "盐城市_建湖县_财政一体化", "sys_id": "163" }, { "sys_name": "盐城市_建湖县_国库集中支付", "sys_id": "164" }, + { "sys_name": "盐城市_东台市_部门预算编审系统", "sys_id": "165" }, { "sys_name": "盐城市_东台市_财政一体化信息系统", "sys_id": "166" }, + { "sys_name": "盐城市_东台市_财政专户核算系统", "sys_id": "167" }, { "sys_name": "盐城市_东台市_非税收入收缴管理系统", "sys_id": "168" }, + { "sys_name": "盐城市_东台市_总预算会计核算系统", "sys_id": "169" }, { "sys_name": "盐城市_大丰区_部门预算系统", "sys_id": "170" }, + { "sys_name": "盐城市_大丰区_财政一体化", "sys_id": "171" }, { "sys_name": "盐城市_大丰区_总预算会计核算财务软件", "sys_id": "172" }, + { "sys_name": "盐城市_经济技术开发区_部门预算软件", "sys_id": "173" }, { "sys_name": "盐城市_经济技术开发区_国库集中支付", "sys_id": "174" }, + { "sys_name": "老非税收入征缴系统", "sys_id": "175" }, { "sys_name": "扬州财政一体化信息管理系统", "sys_id": "176" }, { "sys_name": "非税收入征收", "sys_id": "177" }, + { "sys_name": "部门预算编制", "sys_id": "178" }, { "sys_name": "非税收入收缴", "sys_id": "179" }, { "sys_name": "行政事业性单位国有资产管理", "sys_id": "180" }, + { "sys_name": "财政业务系统", "sys_id": "181" }, { "sys_name": "财政业务综合系统", "sys_id": "182" }, { "sys_name": "江都开发区预算执行系统", "sys_id": "183" }, + { "sys_name": "财政一体化", "sys_id": "184" }, { "sys_name": "富深协通财政一体化业务管理系统", "sys_id": "185" }, { "sys_name": "富深协通非税收缴系统", "sys_id": "186" }, + { "sys_name": "富深协通工资统发系统", "sys_id": "187" }, { "sys_name": "非税收入", "sys_id": "188" }, { "sys_name": "财政综合业务系统", "sys_id": "189" }, + { "sys_name": "泰州市_市本级_部门预算系统", "sys_id": "190" }, { "sys_name": "泰州市_市本级_非税收入系统", "sys_id": "191" }, { "sys_name": "泰州市_市本级_绩效管理系统", "sys_id": "192" }, + { "sys_name": "泰州市_市本级_预算执行系统", "sys_id": "193" }, { "sys_name": "泰州市_市本级_综合治税系统", "sys_id": "194" }, { "sys_name": "泰州市_海陵区_部门预算编制系统", "sys_id": "195" }, + { "sys_name": "泰州市_海陵区_县区财政一体化", "sys_id": "196" }, { "sys_name": "泰州市_高港区_预算执行系统", "sys_id": "197" }, + { "sys_name": "泰州市_姜堰区_部门预算系统", "sys_id": "198" }, { "sys_name": "泰州市_姜堰区_财政一体化系统", "sys_id": "199" }, + { "sys_name": "泰州市_姜堰区_非税收缴系统", "sys_id": "200" }, { "sys_name": "泰州市_姜堰区_预算执行系统", "sys_id": "201" }, + { "sys_name": "泰州市_医药高新区_财政一体化系统", "sys_id": "202" }, { "sys_name": "泰州市_兴化市_部门预算", "sys_id": "203" }, + { "sys_name": "泰州市_兴化市_非税收缴", "sys_id": "204" }, { "sys_name": "泰州市_兴化市_国库集中支付", "sys_id": "205" }, + { "sys_name": "泰州市_靖江市_预算执行系统", "sys_id": "206" }, { "sys_name": "泰州市_靖江市_非税收入收缴", "sys_id": "207" }, + { "sys_name": "泰州市_靖江市_部门预算编审系统", "sys_id": "208" }, { "sys_name": "泰州市_泰兴市_部门预算系统", "sys_id": "209" }, + { "sys_name": "泰州市_泰兴市_非税收入管理系统", "sys_id": "210" }, { "sys_name": "泰州市_泰兴市_预算执行系统", "sys_id": "211" }, + { "sys_name": "部门预算管理系统", "sys_id": "212" }, { "sys_name": "财政一体化平台及国库集中支付系统", "sys_id": "213" }, + { "sys_name": "新中大非税收入管理", "sys_id": "214" }, { "sys_name": "联友财务管理系统", "sys_id": "215" }, { "sys_name": "国库集中支付、指标管理系统", "sys_id": "216" }, + { "sys_name": "开发区总预算系统", "sys_id": "217" }, { "sys_name": "国库账务系统", "sys_id": "218" }, { "sys_name": "化学工业园区非税收入管理系统", "sys_id": "219" }, + { "sys_name": "非税收入账套", "sys_id": "220" }, { "sys_name": "化学工业园区预算执行系统", "sys_id": "221" }, { "sys_name": "会计核算", "sys_id": "222" }, + { "sys_name": "总预算会计账", "sys_id": "223" }, { "sys_name": "预算内外收支核算系统", "sys_id": "224" }, { "sys_name": "账户核算系统", "sys_id": "225" }, + { "sys_name": "总预算核算系统", "sys_id": "226" }, { "sys_name": "账务处理系统(收支分类改革升级版)", "sys_id": "227" }, { "sys_name": "财政预算外业务", "sys_id": "228" }, + { "sys_name": "用友U8R10财政一体化平台", "sys_id": "229" }, { "sys_name": "开发区财政系统", "sys_id": "230" }, { "sys_name": "高新区总预算系统", "sys_id": "231" }, + { "sys_name": "开发区公共财政服务平台", "sys_id": "232" }, { "sys_name": "用友GRP-U8管理软件", "sys_id": "233" }, { "sys_name": "盐城市_城南新区_国库集中支付系统", "sys_id": "234" }, + { "sys_name": "盐城市_城南新区_总预算账务处理系统", "sys_id": "235" }, { "sys_name": "财政预算指标管理", "sys_id": "236" }, { "sys_name": "泰州市_市本级_行政管理系统", "sys_id": "237" }, + { "sys_name": "新中大财务软件", "sys_id": "238" }, { "sys_name": "开发区新中大财务核算系统", "sys_id": "239" }, { "sys_name": "开发区账务系统", "sys_id": "240" }]; + var origin_place_arr = [{ "city_code": "3201", "city": "南京市", "county": "市本级", "county_code": "320100", "sys_name": "部门预算", "sys_code": "BMYS" }, + { "city_code": "3201", "city": "南京市", "county": "市本级", "county_code": "320100", "sys_name": "非税收入收缴管理系统", "sys_code": "FSSR" }, + { "city_code": "3201", "city": "南京市", "county": "市本级", "county_code": "320100", "sys_name": "预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3201", "city": "南京市", "county": "市本级", "county_code": "320100", "sys_name": "资产管理系统", "sys_code": "ZCGL" }, + { "city_code": "3201", "city": "南京市", "county": "玄武区", "county_code": "320102", "sys_name": "预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3201", "city": "南京市", "county": "秦淮区", "county_code": "320104", "sys_name": "用友财政综合管理信息系统", "sys_code": "YTH" }, + { "city_code": "3201", "city": "南京市", "county": "建邺区", "county_code": "320105", "sys_name": "预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3201", "city": "南京市", "county": "鼓楼区", "county_code": "320106", "sys_name": "用友A++", "sys_code": "YTH" }, + { "city_code": "3201", "city": "南京市", "county": "浦口区", "county_code": "320111", "sys_name": "浦口财政一体化", "sys_code": "YTH" }, + { "city_code": "3201", "city": "南京市", "county": "栖霞区", "county_code": "320113", "sys_name": "栖霞区财政业务信息管理系统", "sys_code": "YTH" }, + { "city_code": "3201", "city": "南京市", "county": "雨花台区", "county_code": "320114", "sys_name": "一体化系统", "sys_code": "YTH" }, + { "city_code": "3201", "city": "南京市", "county": "江宁区", "county_code": "320115", "sys_name": "财政管理一体化系统", "sys_code": "YTH" }, + { "city_code": "3201", "city": "南京市", "county": "江宁区", "county_code": "320115", "sys_name": "滨江开发区财政分局", "sys_code": "YTH" }, + { "city_code": "3201", "city": "南京市", "county": "江宁区", "county_code": "320115", "sys_name": "江宁经济技术开发区财政分局", "sys_code": "YTH" }, + { "city_code": "3201", "city": "南京市", "county": "江宁区", "county_code": "320115", "sys_name": "江宁科学园财政分局", "sys_code": "YTH" }, + { "city_code": "3201", "city": "南京市", "county": "六合区", "county_code": "320116", "sys_name": "一体化系统", "sys_code": "YTH" }, + { "city_code": "3201", "city": "南京市", "county": "高淳区", "county_code": "320118", "sys_name": "财政一体化系统", "sys_code": "YTH" }, + { "city_code": "3201", "city": "南京市", "county": "溧水区", "county_code": "320124", "sys_name": "A++财政一体化平台", "sys_code": "YTH" }, + { "city_code": "3202", "city": "无锡市", "county": "市本级", "county_code": "320200", "sys_name": "财政一体化系统", "sys_code": "YTH" }, + { "city_code": "3202", "city": "无锡市", "county": "市本级", "county_code": "320200", "sys_name": "非税收入收缴管理系统", "sys_code": "FSSR" }, + { "city_code": "3202", "city": "无锡市", "county": "崇安区", "county_code": "320202", "sys_name": "非税系统", "sys_code": "FSSR" }, + { "city_code": "3202", "city": "无锡市", "county": "崇安区", "county_code": "320202", "sys_name": "一体化预算执行系统", "sys_code": "YTH" }, + { "city_code": "3202", "city": "无锡市", "county": "南长区", "county_code": "320203", "sys_name": "非税系统", "sys_code": "FSSR" }, + { "city_code": "3202", "city": "无锡市", "county": "南长区", "county_code": "320203", "sys_name": "一体化", "sys_code": "YTH" }, + { "city_code": "3202", "city": "无锡市", "county": "北塘区", "county_code": "320204", "sys_name": "国库集中支付管理信息系统", "sys_code": "GKZF" }, + { "city_code": "3202", "city": "无锡市", "county": "锡山区", "county_code": "320205", "sys_name": "国库集中支付", "sys_code": "GKZF" }, + { "city_code": "3202", "city": "无锡市", "county": "锡山区", "county_code": "320205", "sys_name": "财政专户核算及非税系统", "sys_code": "ZHHS_FSSR" }, + { "city_code": "3202", "city": "无锡市", "county": "惠山区", "county_code": "320206", "sys_name": "财政一体化系统", "sys_code": "YTH" }, + { "city_code": "3202", "city": "无锡市", "county": "滨湖区", "county_code": "320211", "sys_name": "集中支付系统", "sys_code": "GKZF" }, + { "city_code": "3202", "city": "无锡市", "county": "滨湖区", "county_code": "320211", "sys_name": "非税系统", "sys_code": "FSSR" }, + { "city_code": "3202", "city": "无锡市", "county": "滨湖区", "county_code": "320211", "sys_name": "财政专户核算系统", "sys_code": "ZHHS" }, + { "city_code": "3202", "city": "无锡市", "county": "新区", "county_code": "320214", "sys_name": "预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3202", "city": "无锡市", "county": "新区", "county_code": "320214", "sys_name": "非税收缴系统", "sys_code": "FSSR" }, + { "city_code": "3202", "city": "无锡市", "county": "新区", "county_code": "320214", "sys_name": "财政专户核算系统", "sys_code": "ZHHS" }, + { "city_code": "3202", "city": "无锡市", "county": "江阴市", "county_code": "320281", "sys_name": "财政一体化平台", "sys_code": "YTH" }, + { "city_code": "3202", "city": "无锡市", "county": "宜兴市", "county_code": "320282", "sys_name": "非税收缴系统", "sys_code": "FSSR" }, + { "city_code": "3202", "city": "无锡市", "county": "宜兴市", "county_code": "320282", "sys_name": "财政一体化平台", "sys_code": "YTH" }, + { "city_code": "3203", "city": "徐州市", "county": "市本级", "county_code": "320300", "sys_name": "富深预算执行", "sys_code": "YSZX" }, + { "city_code": "3203", "city": "徐州市", "county": "市本级", "county_code": "320300", "sys_name": "用友非税及票据", "sys_code": "FSSR" }, + { "city_code": "3203", "city": "徐州市", "county": "市本级", "county_code": "320300", "sys_name": "用友预算执行", "sys_code": "YSZX" }, + { "city_code": "3203", "city": "徐州市", "county": "鼓楼区", "county_code": "320302", "sys_name": "江苏省财政预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3203", "city": "徐州市", "county": "鼓楼区", "county_code": "320302", "sys_name": "用友通用软件", "sys_code": "KJHS" }, + { "city_code": "3203", "city": "徐州市", "county": "云龙区", "county_code": "320303", "sys_name": "江苏省财政预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3203", "city": "徐州市", "county": "云龙区", "county_code": "320303", "sys_name": "联友软件/通用财务", "sys_code": "KJHS" }, + { "city_code": "3203", "city": "徐州市", "county": "云龙区", "county_code": "320303", "sys_name": "用友GRPG-U8R10财政管理软件", "sys_code": "YSZX" }, + { "city_code": "3203", "city": "徐州市", "county": "贾汪区", "county_code": "320305", "sys_name": "用友GPP-R10财政管理软件", "sys_code": "KJHS" }, + { "city_code": "3203", "city": "徐州市", "county": "泉山区", "county_code": "320311", "sys_name": "富深协通财政一体化管理信息系统", "sys_code": "YTH" }, + { "city_code": "3203", "city": "徐州市", "county": "铜山区", "county_code": "320312", "sys_name": "财务统一核算系统", "sys_code": "KJHS" }, + { "city_code": "3203", "city": "徐州市", "county": "铜山区", "county_code": "320312", "sys_name": "非税收入收缴管理系统", "sys_code": "FSSR" }, + { "city_code": "3203", "city": "徐州市", "county": "铜山区", "county_code": "320312", "sys_name": "公共财政管理软件", "sys_code": "YSZX" }, + { "city_code": "3203", "city": "徐州市", "county": "丰县", "county_code": "320321", "sys_name": "A++财政一体化信息平台", "sys_code": "YTH" }, + { "city_code": "3203", "city": "徐州市", "county": "丰县", "county_code": "320321", "sys_name": "新中大公共财务管理软件", "sys_code": "KJHS" }, + { "city_code": "3203", "city": "徐州市", "county": "沛县", "county_code": "320322", "sys_name": "富深财政一体化管理系统", "sys_code": "YTH" }, + { "city_code": "3203", "city": "徐州市", "county": "沛县", "county_code": "320322", "sys_name": "新中大公共财政管理系统", "sys_code": "KJHS" }, + { "city_code": "3203", "city": "徐州市", "county": "睢宁县", "county_code": "320324", "sys_name": "富深协通财政一体化业务管理系统软件", "sys_code": "YTH" }, + { "city_code": "3203", "city": "徐州市", "county": "睢宁县", "county_code": "320324", "sys_name": "新中大公共财政管理软件Gsoft", "sys_code": "KJHS" }, + { "city_code": "3203", "city": "徐州市", "county": "新沂市", "county_code": "320381", "sys_name": "江苏省财政预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3203", "city": "徐州市", "county": "邳州", "county_code": "320382", "sys_name": "财政一体化系统", "sys_code": "YTH" }, + { "city_code": "3204", "city": "常州市", "county": "本级", "county_code": "320400", "sys_name": "财政一体化业务系统", "sys_code": "YTH" }, + { "city_code": "3204", "city": "常州市", "county": "天宁区", "county_code": "320402", "sys_name": "财政一体化软件", "sys_code": "YTH" }, + { "city_code": "3204", "city": "常州市", "county": "天宁区", "county_code": "320402", "sys_name": "非税收入系统", "sys_code": "FSSR" }, + { "city_code": "3204", "city": "常州市", "county": "天宁区", "county_code": "320402", "sys_name": "总预算系统", "sys_code": "YSZX" }, + { "city_code": "3204", "city": "常州市", "county": "钟楼区", "county_code": "320404", "sys_name": "非税收入系统", "sys_code": "FSSR" }, + { "city_code": "3204", "city": "常州市", "county": "钟楼区", "county_code": "320404", "sys_name": "国库集中支付系统", "sys_code": "GKZF" }, + { "city_code": "3204", "city": "常州市", "county": "钟楼区", "county_code": "320404", "sys_name": "用款计划系统", "sys_code": "JHGL" }, + { "city_code": "3204", "city": "常州市", "county": "钟楼区", "county_code": "320404", "sys_name": "指标管理系统", "sys_code": "ZBGL" }, + { "city_code": "3204", "city": "常州市", "county": "钟楼区", "county_code": "320404", "sys_name": "总预算系统", "sys_code": "ZYS" }, + { "city_code": "3204", "city": "常州市", "county": "新北区", "county_code": "320411", "sys_name": "财政综合业务管理平台", "sys_code": "YTH" }, + { "city_code": "3204", "city": "常州市", "county": "武进区", "county_code": "320412", "sys_name": "财政一体化管理信息系统", "sys_code": "YTH" }, + { "city_code": "3204", "city": "常州市", "county": "溧阳市", "county_code": "320481", "sys_name": "部门预算", "sys_code": "BMYS" }, + { "city_code": "3204", "city": "常州市", "county": "溧阳市", "county_code": "320481", "sys_name": "工资统发", "sys_code": "GZTF" }, + { "city_code": "3204", "city": "常州市", "county": "溧阳市", "county_code": "320481", "sys_name": "国有资产", "sys_code": "ZCGL" }, + { "city_code": "3204", "city": "常州市", "county": "溧阳市", "county_code": "320481", "sys_name": "乡镇非税收入", "sys_code": "XZFS" }, + { "city_code": "3204", "city": "常州市", "county": "溧阳市", "county_code": "320481", "sys_name": "乡镇集中支付", "sys_code": "XZGK" }, + { "city_code": "3204", "city": "常州市", "county": "金坛区", "county_code": "320482", "sys_name": "预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3205", "city": "苏州市", "county": "市本级", "county_code": "320500", "sys_name": "非税征缴系统", "sys_code": "FSSR" }, + { "city_code": "3205", "city": "苏州市", "county": "市本级", "county_code": "320500", "sys_name": "预算编制与执行系统", "sys_code": "YSZX" }, + { "city_code": "3205", "city": "苏州市", "county": "工业园区", "county_code": "320501", "sys_name": "预算管理综合业务平台", "sys_code": "YSGL" }, + { "city_code": "3205", "city": "苏州市", "county": "虎丘区", "county_code": "320505", "sys_name": "u8管理软件", "sys_code": "CZGL" }, + { "city_code": "3205", "city": "苏州市", "county": "虎丘区", "county_code": "320505", "sys_name": "财政指标管理系统", "sys_code": "ZBGL" }, + { "city_code": "3205", "city": "苏州市", "county": "虎丘区", "county_code": "320505", "sys_name": "国库集中支付系统", "sys_code": "GKZF" }, + { "city_code": "3205", "city": "苏州市", "county": "虎丘区", "county_code": "320505", "sys_name": "用友GRP-R9财务管理软件", "sys_code": "CWGL" }, + { "city_code": "3205", "city": "苏州市", "county": "虎丘区", "county_code": "320505", "sys_name": "用友GRP-U8财政管理软件", "sys_code": "CWGL" }, + { "city_code": "3205", "city": "苏州市", "county": "虎丘区", "county_code": "320505", "sys_name": "账务处理系统", "sys_code": "ZWCL" }, + { "city_code": "3205", "city": "苏州市", "county": "吴中区", "county_code": "320506", "sys_name": "R9i财政管理软件", "sys_code": "CZGL" }, + { "city_code": "3205", "city": "苏州市", "county": "吴中区", "county_code": "320506", "sys_name": "部门预算", "sys_code": "BMYS" }, + { "city_code": "3205", "city": "苏州市", "county": "吴中区", "county_code": "320506", "sys_name": "财政一体化平台", "sys_code": "YTH" }, + { "city_code": "3205", "city": "苏州市", "county": "吴中区", "county_code": "320506", "sys_name": "非税系统", "sys_code": "FSSR" }, + { "city_code": "3205", "city": "苏州市", "county": "相城区", "county_code": "320507", "sys_name": "u8财政管理软件", "sys_code": "CZGL" }, + { "city_code": "3205", "city": "苏州市", "county": "相城区", "county_code": "320507", "sys_name": "相城区财政综合管理信息系统", "sys_code": "YTH" }, + { "city_code": "3205", "city": "苏州市", "county": "姑苏区", "county_code": "320508", "sys_name": "财政非税综合管理系统", "sys_code": "FSSR" }, + { "city_code": "3205", "city": "苏州市", "county": "姑苏区", "county_code": "320508", "sys_name": "财政综合管理平台", "sys_code": "YTH" }, + { "city_code": "3205", "city": "苏州市", "county": "吴江区", "county_code": "320509", "sys_name": "吴江区财政一体化", "sys_code": "YTH" }, + { "city_code": "3205", "city": "苏州市", "county": "常熟市", "county_code": "320581", "sys_name": "非税收入收缴管理系统", "sys_code": "FSSR" }, + { "city_code": "3205", "city": "苏州市", "county": "常熟市", "county_code": "320581", "sys_name": "用友R9", "sys_code": "KJHS" }, + { "city_code": "3205", "city": "苏州市", "county": "常熟市", "county_code": "320581", "sys_name": "预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3205", "city": "苏州市", "county": "张家港市", "county_code": "320582", "sys_name": "财政公共应用服务平台", "sys_code": "GGFW" }, + { "city_code": "3205", "city": "苏州市", "county": "张家港市", "county_code": "320582", "sys_name": "金蝶K/3创新管理平台", "sys_code": "CZGL" }, + { "city_code": "3205", "city": "苏州市", "county": "张家港市", "county_code": "320582", "sys_name": "账务数据系统", "sys_code": "KJHS" }, + { "city_code": "3205", "city": "苏州市", "county": "昆山市", "county_code": "320583", "sys_name": "非税收入收缴管理系统", "sys_code": "FSSR" }, + { "city_code": "3205", "city": "苏州市", "county": "昆山市", "county_code": "320583", "sys_name": "公共财政服务平台", "sys_code": "GGFW" }, + { "city_code": "3205", "city": "苏州市", "county": "昆山市", "county_code": "320583", "sys_name": "国库集中支付系统", "sys_code": "GKZF" }, + { "city_code": "3205", "city": "苏州市", "county": "太仓市", "county_code": "320585", "sys_name": "非税收入系统", "sys_code": "FSSR" }, + { "city_code": "3205", "city": "苏州市", "county": "太仓市", "county_code": "320585", "sys_name": "会计核算系统", "sys_code": "KJHS" }, + { "city_code": "3205", "city": "苏州市", "county": "太仓市", "county_code": "320585", "sys_name": "项目库", "sys_code": "XMK" }, + { "city_code": "3205", "city": "苏州市", "county": "太仓市", "county_code": "320585", "sys_name": "预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3206", "city": "南通市", "county": "本级", "county_code": "320600", "sys_name": "预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3206", "city": "南通市", "county": "崇川区", "county_code": "320602", "sys_name": "预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3206", "city": "南通市", "county": "港闸区", "county_code": "320611", "sys_name": "财政总预算(外)专户管理系统", "sys_code": "YSWZH" }, + { "city_code": "3206", "city": "南通市", "county": "港闸区", "county_code": "320611", "sys_name": "城建资金专户管理系统", "sys_code": "CJZH" }, + { "city_code": "3206", "city": "南通市", "county": "港闸区", "county_code": "320611", "sys_name": "农保专户管理系统", "sys_code": "NBZH" }, + { "city_code": "3206", "city": "南通市", "county": "港闸区", "county_code": "320611", "sys_name": "农业发展基金专户管理系统", "sys_code": "NFJJ" }, + { "city_code": "3206", "city": "南通市", "county": "港闸区", "county_code": "320611", "sys_name": "失地农民保障资金专户", "sys_code": "SDNM" }, + { "city_code": "3206", "city": "南通市", "county": "港闸区", "county_code": "320611", "sys_name": "预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3206", "city": "南通市", "county": "通州区", "county_code": "320612", "sys_name": "非税收入征管系统", "sys_code": "FSSR" }, + { "city_code": "3206", "city": "南通市", "county": "通州区", "county_code": "320612", "sys_name": "工资统发人员信息", "sys_code": "GZTF" }, + { "city_code": "3206", "city": "南通市", "county": "通州区", "county_code": "320612", "sys_name": "预算指标-国库集中支付系统", "sys_code": "YSZX" }, + { "city_code": "3206", "city": "南通市", "county": "通州区", "county_code": "320612", "sys_name": "总预算会计核算系统", "sys_code": "KJHS" }, + { "city_code": "3206", "city": "南通市", "county": "海安县", "county_code": "320621", "sys_name": "部门预算编审系统", "sys_code": "BMYS" }, + { "city_code": "3206", "city": "南通市", "county": "海安县", "county_code": "320621", "sys_name": "公务消费管理系统", "sys_code": "GWXF" }, + { "city_code": "3206", "city": "南通市", "county": "海安县", "county_code": "320621", "sys_name": "国有资产管理系统", "sys_code": "ZCGL" }, + { "city_code": "3206", "city": "南通市", "county": "海安县", "county_code": "320621", "sys_name": "区镇财政管理“一体化”系统", "sys_code": "XZYTH" }, + { "city_code": "3206", "city": "南通市", "county": "海安县", "county_code": "320621", "sys_name": "县本级财政管理“一体化”系统", "sys_code": "YTH" }, + { "city_code": "3206", "city": "南通市", "county": "如东县", "county_code": "320623", "sys_name": "用友政务", "sys_code": "YTH" }, + { "city_code": "3206", "city": "南通市", "county": "启东市", "county_code": "320681", "sys_name": "财政专户核算(行政口专项资金)", "sys_code": "ZHXZ" }, + { "city_code": "3206", "city": "南通市", "county": "启东市", "county_code": "320681", "sys_name": "财政专户核算(经建口专项资金)", "sys_code": "ZHJJ" }, + { "city_code": "3206", "city": "南通市", "county": "启东市", "county_code": "320681", "sys_name": "财政专户核算(农业保险专账)", "sys_code": "ZHNB" }, + { "city_code": "3206", "city": "南通市", "county": "启东市", "county_code": "320681", "sys_name": "财政专户核算(农业综合开发专账)", "sys_code": "ZHNF" }, + { "city_code": "3206", "city": "南通市", "county": "启东市", "county_code": "320681", "sys_name": "财政专户核算(社保资金专账)", "sys_code": "ZHSB" }, + { "city_code": "3206", "city": "南通市", "county": "启东市", "county_code": "320681", "sys_name": "财政专户核算(土地出让专账)", "sys_code": "ZHTD" }, + { "city_code": "3206", "city": "南通市", "county": "启东市", "county_code": "320681", "sys_name": "财政专户核算(综合口专项资金)", "sys_code": "ZHZH" }, + { "city_code": "3206", "city": "南通市", "county": "启东市", "county_code": "320681", "sys_name": "非税收入管理系统", "sys_code": "FSSR" }, + { "city_code": "3206", "city": "南通市", "county": "启东市", "county_code": "320681", "sys_name": "农业专向及农业发展基金专项", "sys_code": "NFZX" }, + { "city_code": "3206", "city": "南通市", "county": "启东市", "county_code": "320681", "sys_name": "预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3206", "city": "南通市", "county": "启东市", "county_code": "320681", "sys_name": "总预算会计核算", "sys_code": "KJHS" }, + { "city_code": "3206", "city": "南通市", "county": "如皋市", "county_code": "320682", "sys_name": "金财工程一体化支撑平台", "sys_code": "YTH" }, + { "city_code": "3206", "city": "南通市", "county": "海门市", "county_code": "320684", "sys_name": "非税收缴", "sys_code": "FSSR" }, + { "city_code": "3206", "city": "南通市", "county": "海门市", "county_code": "320684", "sys_name": "学校预算执行", "sys_code": "YSZXXX" }, + { "city_code": "3206", "city": "南通市", "county": "海门市", "county_code": "320684", "sys_name": "预算执行", "sys_code": "YSZX" }, + { "city_code": "3206", "city": "南通市", "county": "海门市", "county_code": "320684", "sys_name": "预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3206", "city": "南通市", "county": "海门市", "county_code": "320684", "sys_name": "专项资金", "sys_code": "ZXZJ" }, + { "city_code": "3206", "city": "南通市", "county": "海门市", "county_code": "320684", "sys_name": "总预算", "sys_code": "ZYS" }, + { "city_code": "3207", "city": "连云港市", "county": "市本级", "county_code": "320700", "sys_name": "部门预算系统", "sys_code": "BMYS" }, + { "city_code": "3207", "city": "连云港市", "county": "市本级", "county_code": "320700", "sys_name": "财政专户核算", "sys_code": "ZHHS" }, + { "city_code": "3207", "city": "连云港市", "county": "市本级", "county_code": "320700", "sys_name": "非税收入系统", "sys_code": "FSSR" }, + { "city_code": "3207", "city": "连云港市", "county": "市本级", "county_code": "320700", "sys_name": "预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3207", "city": "连云港市", "county": "连云区", "county_code": "320703", "sys_name": "财政专户账务系统", "sys_code": "ZHHS" }, + { "city_code": "3207", "city": "连云港市", "county": "连云区", "county_code": "320703", "sys_name": "富深财政一体化管理系统", "sys_code": "YTH" }, + { "city_code": "3207", "city": "连云港市", "county": "海州区", "county_code": "320706", "sys_name": "富深财政一体化业务管理系统", "sys_code": "" }, + { "city_code": "3207", "city": "连云港市", "county": "海州区", "county_code": "320706", "sys_name": "新中大公共财政管理系统", "sys_code": "" }, + { "city_code": "3207", "city": "连云港市", "county": "赣榆区", "county_code": "320721", "sys_name": "财政一体化平台", "sys_code": "YTH" }, + { "city_code": "3207", "city": "连云港市", "county": "赣榆区", "county_code": "320721", "sys_name": "国有资产系统", "sys_code": "CZGL" }, + { "city_code": "3207", "city": "连云港市", "county": "东海县", "county_code": "320722", "sys_name": "部门预算系统", "sys_code": "BMYS" }, + { "city_code": "3207", "city": "连云港市", "county": "东海县", "county_code": "320722", "sys_name": "国库专项资金管理系统", "sys_code": "ZXZJ" }, + { "city_code": "3207", "city": "连云港市", "county": "东海县", "county_code": "320722", "sys_name": "国有资产管理系统", "sys_code": "ZCGL" }, + { "city_code": "3207", "city": "连云港市", "county": "东海县", "county_code": "320722", "sys_name": "预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3207", "city": "连云港市", "county": "灌云县", "county_code": "320723", "sys_name": "财政一体化平台", "sys_code": "YTH" }, + { "city_code": "3207", "city": "连云港市", "county": "灌南县", "county_code": "320724", "sys_name": "非税系统", "sys_code": "FSSR" }, + { "city_code": "3207", "city": "连云港市", "county": "灌南县", "county_code": "320724", "sys_name": "预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3208", "city": "淮安市", "county": "市本级", "county_code": "320800", "sys_name": "非税收缴管理系统", "sys_code": "FSSR" }, + { "city_code": "3208", "city": "淮安市", "county": "市本级", "county_code": "320800", "sys_name": "预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3208", "city": "淮安市", "county": "清河区", "county_code": "320802", "sys_name": "财政管理系统(新农保)", "sys_code": "ZHNB" }, + { "city_code": "3208", "city": "淮安市", "county": "清河区", "county_code": "320802", "sys_name": "财政管理系统(城市居民医疗统筹)", "sys_code": "ZHYB" }, + { "city_code": "3208", "city": "淮安市", "county": "清河区", "county_code": "320802", "sys_name": "财政管理系统(集中支付中心)", "sys_code": "GKZF" }, + { "city_code": "3208", "city": "淮安市", "county": "清河区", "county_code": "320802", "sys_name": "财政管理系统(解困金)", "sys_code": "ZHJK" }, + { "city_code": "3208", "city": "淮安市", "county": "清河区", "county_code": "320802", "sys_name": "财政管理系统(旧城改造)", "sys_code": "ZHCG" }, + { "city_code": "3208", "city": "淮安市", "county": "清河区", "county_code": "320802", "sys_name": "财政管理系统(社保资金账户)", "sys_code": "ZHSB" }, + { "city_code": "3208", "city": "淮安市", "county": "清河区", "county_code": "320802", "sys_name": "财政管理系统(土地出让专帐)", "sys_code": "ZHTD" }, + { "city_code": "3208", "city": "淮安市", "county": "清河区", "county_code": "320802", "sys_name": "财政管理系统(预拨及非集中支付中心)", "sys_code": "ZHYB" }, + { "city_code": "3208", "city": "淮安市", "county": "清河区", "county_code": "320802", "sys_name": "财政管理系统(预算外资金)", "sys_code": "YSW" }, + { "city_code": "3208", "city": "淮安市", "county": "清河区", "county_code": "320802", "sys_name": "总预算会计", "sys_code": "KJHS" }, + { "city_code": "3208", "city": "淮安市", "county": "淮安区", "county_code": "320803", "sys_name": "财务核算系统", "sys_code": "KJHS" }, + { "city_code": "3208", "city": "淮安市", "county": "淮安区", "county_code": "320803", "sys_name": "非税收入管理系统", "sys_code": "FSSR" }, + { "city_code": "3208", "city": "淮安市", "county": "淮安区", "county_code": "320803", "sys_name": "工资统发系统", "sys_code": "GZTF" }, + { "city_code": "3208", "city": "淮安市", "county": "淮安区", "county_code": "320803", "sys_name": "用友政务", "sys_code": "YYZW" }, + { "city_code": "3208", "city": "淮安市", "county": "淮安区", "county_code": "320803", "sys_name": "预算编审系统", "sys_code": "BMYS" }, + { "city_code": "3208", "city": "淮安市", "county": "淮安区", "county_code": "320803", "sys_name": "预算管理系统", "sys_code": "YSGL" }, + { "city_code": "3208", "city": "淮安市", "county": "淮安区", "county_code": "320803", "sys_name": "预算外资金(从联网审计中取数)", "sys_code": "YSW" }, + { "city_code": "3208", "city": "淮安市", "county": "淮安区", "county_code": "320803", "sys_name": "预算编审系统", "sys_code": "YSBS" }, + { "city_code": "3208", "city": "淮安市", "county": "淮阴区", "county_code": "320804", "sys_name": "G6-E财务管理系统", "sys_code": "CWGL" }, + { "city_code": "3208", "city": "淮安市", "county": "淮阴区", "county_code": "320804", "sys_name": "江苏省财政预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3208", "city": "淮安市", "county": "淮阴区", "county_code": "320804", "sys_name": "新中大公共财政管理软件", "sys_code": "CZGL" }, + { "city_code": "3208", "city": "淮安市", "county": "淮阴区", "county_code": "320804", "sys_name": "用友GRP/R9财政管理软件", "sys_code": "CZGL" }, + { "city_code": "3208", "city": "淮安市", "county": "淮阴区", "county_code": "320804", "sys_name": "用友GRP-U8R10", "sys_code": "CWGL" }, + { "city_code": "3208", "city": "淮安市", "county": "淮安区", "county_code": "320803", "sys_name": "预算编审系统", "sys_code": "YSBS" }, + { "city_code": "3208", "city": "淮安市", "county": "清浦区", "county_code": "320811", "sys_name": "财政一体化管理系统(基建户)", "sys_code": "ZHJJ" }, + { "city_code": "3208", "city": "淮安市", "county": "清浦区", "county_code": "320811", "sys_name": "财政一体化管理系统(集中支付中心)", "sys_code": "GKZF" }, + { "city_code": "3208", "city": "淮安市", "county": "清浦区", "county_code": "320811", "sys_name": "财政一体化管理系统(农业综合开发)", "sys_code": "ZHNF" }, + { "city_code": "3208", "city": "淮安市", "county": "清浦区", "county_code": "320811", "sys_name": "财政一体化管理系统(预算外资金)", "sys_code": "YSW" }, + { "city_code": "3208", "city": "淮安市", "county": "清浦区", "county_code": "320811", "sys_name": "财政一体化管理系统(支农专户)", "sys_code": "ZHZN" }, + { "city_code": "3208", "city": "淮安市", "county": "清浦区", "county_code": "320811", "sys_name": "财政一体化管理系统(总预算)", "sys_code": "KJHS" }, + { "city_code": "3208", "city": "淮安市", "county": "涟水县", "county_code": "320826", "sys_name": "非税征缴系统", "sys_code": "FSSR" }, + { "city_code": "3208", "city": "淮安市", "county": "涟水县", "county_code": "320826", "sys_name": "国资管理系统", "sys_code": "ZCGL" }, + { "city_code": "3208", "city": "淮安市", "county": "涟水县", "county_code": "320826", "sys_name": "乡财县管系统", "sys_code": "XCXG" }, + { "city_code": "3208", "city": "淮安市", "county": "涟水县", "county_code": "320826", "sys_name": "乡财县管系统", "sys_code": "XCXG" }, + { "city_code": "3208", "city": "淮安市", "county": "涟水县", "county_code": "320826", "sys_name": "预算编制管理系统", "sys_code": "YSBS" }, + { "city_code": "3208", "city": "淮安市", "county": "涟水县", "county_code": "320826", "sys_name": "预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3208", "city": "淮安市", "county": "洪泽县", "county_code": "320829", "sys_name": "非税收入管理系统", "sys_code": "FSSR" }, + { "city_code": "3208", "city": "淮安市", "county": "洪泽县", "county_code": "320829", "sys_name": "预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3208", "city": "淮安市", "county": "盱眙县", "county_code": "320830", "sys_name": "财政一体化平台", "sys_code": "YTH" }, + { "city_code": "3208", "city": "淮安市", "county": "金湖县", "county_code": "320831", "sys_name": "预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3209", "city": "盐城市", "county": "市本级", "county_code": "320900", "sys_name": "盐城市_市本级_部门预算", "sys_code": "BMYS" }, + { "city_code": "3209", "city": "盐城市", "county": "市本级", "county_code": "320900", "sys_name": "盐城市_市本级_非税收管理系统", "sys_code": "FSSR" }, + { "city_code": "3209", "city": "盐城市", "county": "市本级", "county_code": "320900", "sys_name": "盐城市_市本级_预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3209", "city": "盐城市", "county": "亭湖区", "county_code": "320902", "sys_name": "盐城市_亭湖区_财政专户", "sys_code": "ZHHS" }, + { "city_code": "3209", "city": "盐城市", "county": "亭湖区", "county_code": "320902", "sys_name": "盐城市_亭湖区_非税收入管理", "sys_code": "FSSR" }, + { "city_code": "3209", "city": "盐城市", "county": "亭湖区", "county_code": "320902", "sys_name": "盐城市_亭湖区_国库集中支付管理", "sys_code": "GKZF" }, + { "city_code": "3209", "city": "盐城市", "county": "亭湖区", "county_code": "320902", "sys_name": "盐城市_亭湖区_预算指标管理", "sys_code": "ZBGL" }, + { "city_code": "3209", "city": "盐城市", "county": "亭湖区", "county_code": "320902", "sys_name": "盐城市_亭湖区_总预算会计核算", "sys_code": "KJHS" }, + { "city_code": "3209", "city": "盐城市", "county": "盐都区", "county_code": "320903", "sys_name": "盐城市_盐都区_财政专户核算系统", "sys_code": "ZHHS" }, + { "city_code": "3209", "city": "盐城市", "county": "盐都区", "county_code": "320903", "sys_name": "盐城市_盐都区_非税收入管理系统", "sys_code": "FSSR" }, + { "city_code": "3209", "city": "盐城市", "county": "盐都区", "county_code": "320903", "sys_name": "盐城市_盐都区_国库集中支付系统", "sys_code": "GKZF" }, + { "city_code": "3209", "city": "盐城市", "county": "盐都区", "county_code": "320903", "sys_name": "盐城市_盐都区_总预算会计核算系统", "sys_code": "KJHS" }, + { "city_code": "3209", "city": "盐城市", "county": "响水县", "county_code": "320921", "sys_name": "盐城市_响水县_部门预算管理系统", "sys_code": "BMYS" }, + { "city_code": "3209", "city": "盐城市", "county": "响水县", "county_code": "320921", "sys_name": "盐城市_响水县_财政一体化信息系统", "sys_code": "YTH" }, + { "city_code": "3209", "city": "盐城市", "county": "响水县", "county_code": "320921", "sys_name": "盐城市_响水县_非税收入收缴管理系统", "sys_code": "FSSR" }, + { "city_code": "3209", "city": "盐城市", "county": "滨海县", "county_code": "320922", "sys_name": "盐城市_滨海县财政一体化", "sys_code": "YTH" }, + { "city_code": "3209", "city": "盐城市", "county": "阜宁县", "county_code": "320923", "sys_name": "盐城市_阜宁县_财政管理软件", "sys_code": "CZGL" }, + { "city_code": "3209", "city": "盐城市", "county": "阜宁县", "county_code": "320923", "sys_name": "盐城市_阜宁县_财政管理软件用友U8", "sys_code": "YYZW" }, + { "city_code": "3209", "city": "盐城市", "county": "射阳县", "county_code": "320924", "sys_name": "盐城市_射阳县_财政预算执行一体化系统", "sys_code": "YTH" }, + { "city_code": "3209", "city": "盐城市", "county": "建湖县", "county_code": "320925", "sys_name": "盐城市_建湖县_非税收缴", "sys_code": "FSSR" }, + { "city_code": "3209", "city": "盐城市", "county": "建湖县", "county_code": "320925", "sys_name": "盐城市_建湖县_财政一体化", "sys_code": "YTH" }, + { "city_code": "3209", "city": "盐城市", "county": "建湖县", "county_code": "320925", "sys_name": "盐城市_建湖县_国库集中支付", "sys_code": "GKZF" }, + { "city_code": "3209", "city": "盐城市", "county": "东台市", "county_code": "320981", "sys_name": "盐城市_东台市_部门预算编审系统", "sys_code": "BMYS" }, + { "city_code": "3209", "city": "盐城市", "county": "东台市", "county_code": "320981", "sys_name": "盐城市_东台市_财政一体化信息系统", "sys_code": "YTH" }, + { "city_code": "3209", "city": "盐城市", "county": "东台市", "county_code": "320981", "sys_name": "盐城市_东台市_财政专户核算系统", "sys_code": "ZHHS" }, + { "city_code": "3209", "city": "盐城市", "county": "东台市", "county_code": "320981", "sys_name": "盐城市_东台市_非税收入收缴管理系统", "sys_code": "FSSR" }, + { "city_code": "3209", "city": "盐城市", "county": "东台市", "county_code": "320981", "sys_name": "盐城市_东台市_总预算会计核算系统", "sys_code": "KJHS" }, + { "city_code": "3209", "city": "盐城市", "county": "大丰区", "county_code": "320982", "sys_name": "盐城市_大丰区_部门预算系统", "sys_code": "BMYS" }, + { "city_code": "3209", "city": "盐城市", "county": "大丰区", "county_code": "320982", "sys_name": "盐城市_大丰区_财政一体化", "sys_code": "YTH" }, + { "city_code": "3209", "city": "盐城市", "county": "大丰区", "county_code": "320982", "sys_name": "盐城市_大丰区_总预算会计核算财务软件", "sys_code": "KJHS" }, + { "city_code": "3209", "city": "盐城市", "county": "经济技术开发区", "county_code": "320991", "sys_name": "盐城市_经济技术开发区_部门预算软件", "sys_code": "BMYS" }, + { "city_code": "3209", "city": "盐城市", "county": "经济技术开发区", "county_code": "320991", "sys_name": "盐城市_经济技术开发区_国库集中支付", "sys_code": "GKZF" }, + { "city_code": "3210", "city": "扬州市", "county": "市本级", "county_code": "321000", "sys_name": "财政专户核算", "sys_code": "ZHHS" }, + { "city_code": "3210", "city": "扬州市", "county": "市本级", "county_code": "321000", "sys_name": "老非税收入征缴系统", "sys_code": "FSSR" }, + { "city_code": "3210", "city": "扬州市", "county": "市本级", "county_code": "321000", "sys_name": "扬州财政一体化信息管理系统", "sys_code": "YTH" }, + { "city_code": "3210", "city": "扬州市", "county": "广陵区", "county_code": "321002", "sys_name": "财政一体化系统", "sys_code": "YTH" }, + { "city_code": "3210", "city": "扬州市", "county": "广陵区", "county_code": "321002", "sys_name": "非税收入管理系统", "sys_code": "FSSR" }, + { "city_code": "3210", "city": "扬州市", "county": "邗江区", "county_code": "321003", "sys_name": "财政一体化系统", "sys_code": "YTH" }, + { "city_code": "3210", "city": "扬州市", "county": "邗江区", "county_code": "321003", "sys_name": "非税系统", "sys_code": "FSSR" }, + { "city_code": "3210", "city": "扬州市", "county": "邗江区", "county_code": "321003", "sys_name": "预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3210", "city": "扬州市", "county": "宝应县", "county_code": "321023", "sys_name": "非税收入征收", "sys_code": "FSSR" }, + { "city_code": "3210", "city": "扬州市", "county": "宝应县", "county_code": "321023", "sys_name": "预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3210", "city": "扬州市", "county": "仪征市", "county_code": "321081", "sys_name": "部门预算编制", "sys_code": "BMYS" }, + { "city_code": "3210", "city": "扬州市", "county": "仪征市", "county_code": "321081", "sys_name": "非税收入收缴", "sys_code": "FSSR" }, + { "city_code": "3210", "city": "扬州市", "county": "仪征市", "county_code": "321081", "sys_name": "行政事业性单位国有资产管理", "sys_code": "ZCGL" }, + { "city_code": "3210", "city": "扬州市", "county": "仪征市", "county_code": "321081", "sys_name": "预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3210", "city": "扬州市", "county": "高邮市", "county_code": "321084", "sys_name": "财政业务系统", "sys_code": "YTH" }, + { "city_code": "3210", "city": "扬州市", "county": "江都区", "county_code": "321088", "sys_name": "财政业务综合系统", "sys_code": "ZHYW" }, + { "city_code": "3210", "city": "扬州市", "county": "江都区", "county_code": "321088", "sys_name": "江都开发区预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3211", "city": "镇江市", "county": "市本级", "county_code": "321100", "sys_name": "财政一体化", "sys_code": "YTH" }, + { "city_code": "3211", "city": "镇江市", "county": "京口区", "county_code": "321102", "sys_name": "富深协通财政一体化业务管理系统", "sys_code": "YTH" }, + { "city_code": "3211", "city": "镇江市", "county": "京口区", "county_code": "321102", "sys_name": "富深协通非税收缴系统", "sys_code": "FSSR" }, + { "city_code": "3211", "city": "镇江市", "county": "京口区", "county_code": "321102", "sys_name": "富深协通工资统发系统", "sys_code": "GZTF" }, + { "city_code": "3211", "city": "镇江市", "county": "润州区", "county_code": "321111", "sys_name": "部门预算系统", "sys_code": "BMYS" }, + { "city_code": "3211", "city": "镇江市", "county": "润州区", "county_code": "321111", "sys_name": "财政一体化", "sys_code": "YTH" }, + { "city_code": "3211", "city": "镇江市", "county": "润州区", "county_code": "321111", "sys_name": "非税收入", "sys_code": "FSSR" }, + { "city_code": "3211", "city": "镇江市", "county": "丹徒区", "county_code": "321112", "sys_name": "财政综合业务系统", "sys_code": "YTH" }, + { "city_code": "3211", "city": "镇江市", "county": "丹阳市", "county_code": "321181", "sys_name": "部门预算系统", "sys_code": "BMYS" }, + { "city_code": "3211", "city": "镇江市", "county": "丹阳市", "county_code": "321181", "sys_name": "预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3211", "city": "镇江市", "county": "扬中市", "county_code": "321182", "sys_name": "部门预算系统", "sys_code": "BMYS" }, + { "city_code": "3211", "city": "镇江市", "county": "扬中市", "county_code": "321182", "sys_name": "预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3211", "city": "镇江市", "county": "句容市", "county_code": "321183", "sys_name": "非税收入", "sys_code": "FSSR" }, + { "city_code": "3211", "city": "镇江市", "county": "句容市", "county_code": "321183", "sys_name": "预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3212", "city": "泰州市", "county": "市本级", "county_code": "321200", "sys_name": "泰州市_市本级_部门预算系统", "sys_code": "BMYS" }, + { "city_code": "3212", "city": "泰州市", "county": "市本级", "county_code": "321200", "sys_name": "泰州市_市本级_非税收入系统", "sys_code": "FSSR" }, + { "city_code": "3212", "city": "泰州市", "county": "市本级", "county_code": "321200", "sys_name": "泰州市_市本级_绩效管理系统", "sys_code": "JXGL" }, + { "city_code": "3212", "city": "泰州市", "county": "市本级", "county_code": "321200", "sys_name": "泰州市_市本级_预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3212", "city": "泰州市", "county": "市本级", "county_code": "321200", "sys_name": "泰州市_市本级_综合治税系统", "sys_code": "ZHZS" }, + { "city_code": "3212", "city": "泰州市", "county": "海陵区", "county_code": "321202", "sys_name": "泰州市_海陵区_部门预算编制系统", "sys_code": "BMYS" }, + { "city_code": "3212", "city": "泰州市", "county": "海陵区", "county_code": "321202", "sys_name": "泰州市_海陵区_县区财政一体化", "sys_code": "YTH" }, + { "city_code": "3212", "city": "泰州市", "county": "高港区", "county_code": "321203", "sys_name": "泰州市_高港区_预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3212", "city": "泰州市", "county": "姜堰区", "county_code": "321204", "sys_name": "泰州市_姜堰区_部门预算系统", "sys_code": "BMYS" }, + { "city_code": "3212", "city": "泰州市", "county": "姜堰区", "county_code": "321204", "sys_name": "泰州市_姜堰区_财政一体化系统", "sys_code": "YTH" }, + { "city_code": "3212", "city": "泰州市", "county": "姜堰区", "county_code": "321204", "sys_name": "泰州市_姜堰区_非税收缴系统", "sys_code": "FSSR" }, + { "city_code": "3212", "city": "泰州市", "county": "姜堰区", "county_code": "321204", "sys_name": "泰州市_姜堰区_预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3212", "city": "泰州市", "county": "医药高新区", "county_code": "321205", "sys_name": "泰州市_医药高新区_财政一体化系统", "sys_code": "YTH" }, + { "city_code": "3212", "city": "泰州市", "county": "兴化市", "county_code": "321281", "sys_name": "泰州市_兴化市_部门预算", "sys_code": "BMYS" }, + { "city_code": "3212", "city": "泰州市", "county": "兴化市", "county_code": "321281", "sys_name": "泰州市_兴化市_非税收缴", "sys_code": "FSSR" }, + { "city_code": "3212", "city": "泰州市", "county": "兴化市", "county_code": "321281", "sys_name": "泰州市_兴化市_国库集中支付", "sys_code": "GKZF" }, + { "city_code": "3212", "city": "泰州市", "county": "靖江市", "county_code": "321282", "sys_name": "泰州市_靖江市_预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3212", "city": "泰州市", "county": "靖江市", "county_code": "321282", "sys_name": "泰州市_靖江市_非税收入收缴", "sys_code": "FSSR" }, + { "city_code": "3212", "city": "泰州市", "county": "靖江市", "county_code": "321282", "sys_name": "泰州市_靖江市_部门预算编审系统", "sys_code": "BMYS" }, + { "city_code": "3212", "city": "泰州市", "county": "泰兴市", "county_code": "321283", "sys_name": "泰州市_泰兴市_部门预算系统", "sys_code": "BMYS" }, + { "city_code": "3212", "city": "泰州市", "county": "泰兴市", "county_code": "321283", "sys_name": "泰州市_泰兴市_非税收入管理系统", "sys_code": "FSSR" }, + { "city_code": "3212", "city": "泰州市", "county": "泰兴市", "county_code": "321283", "sys_name": "泰州市_泰兴市_预算执行系统", "sys_code": "BMYS" }, + { "city_code": "3213", "city": "宿迁市", "county": "市本级", "county_code": "321300", "sys_name": "部门预算管理系统", "sys_code": "BMYS" }, + { "city_code": "3213", "city": "宿迁市", "county": "市本级", "county_code": "321300", "sys_name": "非税收入管理系统", "sys_code": "FSSR" }, + { "city_code": "3213", "city": "宿迁市", "county": "市本级", "county_code": "321300", "sys_name": "预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3213", "city": "宿迁市", "county": "宿城区", "county_code": "321302", "sys_name": "财政一体化平台及国库集中支付系统", "sys_code": "GKZF" }, + { "city_code": "3213", "city": "宿迁市", "county": "宿城区", "county_code": "321302", "sys_name": "新中大非税收入管理", "sys_code": "FSSR" }, + { "city_code": "3213", "city": "宿迁市", "county": "宿城区", "county_code": "321302", "sys_name": "总预算会计核算系统", "sys_code": "KJHS" }, + { "city_code": "3213", "city": "宿迁市", "county": "宿豫区", "county_code": "321311", "sys_name": "非税收缴管理系统", "sys_code": "FSSR" }, + { "city_code": "3213", "city": "宿迁市", "county": "宿豫区", "county_code": "321311", "sys_name": "联友财务管理系统", "sys_code": "CWGL" }, + { "city_code": "3213", "city": "宿迁市", "county": "宿豫区", "county_code": "321311", "sys_name": "预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3213", "city": "宿迁市", "county": "沭阳县", "county_code": "321322", "sys_name": "非税收入管理系统", "sys_code": "FSSR" }, + { "city_code": "3213", "city": "宿迁市", "county": "沭阳县", "county_code": "321322", "sys_name": "国库集中支付、指标管理系统", "sys_code": "YSZX" }, + { "city_code": "3213", "city": "宿迁市", "county": "沭阳县", "county_code": "321322", "sys_name": "开发区总预算系统", "sys_code": "BMYS" }, + { "city_code": "3213", "city": "宿迁市", "county": "沭阳县", "county_code": "321322", "sys_name": "总预算会计核算", "sys_code": "KJHS" }, + { "city_code": "3213", "city": "宿迁市", "county": "泗阳县", "county_code": "321323", "sys_name": "预算执行", "sys_code": "YSZX" }, + { "city_code": "3213", "city": "宿迁市", "county": "泗洪县", "county_code": "321324", "sys_name": "部门预算系统", "sys_code": "BMYS" }, + { "city_code": "3213", "city": "宿迁市", "county": "泗洪县", "county_code": "321324", "sys_name": "非税收入管理系统", "sys_code": "FSSR" }, + { "city_code": "3213", "city": "宿迁市", "county": "泗洪县", "county_code": "321324", "sys_name": "国库集中支付系统", "sys_code": "GKZF" }, + { "city_code": "3213", "city": "宿迁市", "county": "泗洪县", "county_code": "321324", "sys_name": "国库账务系统", "sys_code": "KJHS" }, + { "city_code": "3201", "city": "南京市", "county": "高新区", "county_code": "320100GXQ", "sys_name": "预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3201", "city": "南京市", "county": "化工园区", "county_code": "320100HGY", "sys_name": "化学工业园区非税收入管理系统", "sys_code": "FSSR" }, + { "city_code": "3201", "city": "南京市", "county": "经济技术开发区", "county_code": "320100JKQ", "sys_name": "非税收入账套", "sys_code": "FSZT" }, + { "city_code": "3201", "city": "南京市", "county": "化工园区", "county_code": "320101HGY", "sys_name": "化学工业园区预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3201", "city": "南京市", "county": "经济技术开发区", "county_code": "320101JKQ", "sys_name": "预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3201", "city": "南京市", "county": "化工园区", "county_code": "320102HGY", "sys_name": "会计核算", "sys_code": "KYHS" }, + { "city_code": "3201", "city": "南京市", "county": "经济技术开发区", "county_code": "320102JKQ", "sys_name": "总预算会计账", "sys_code": "KJHS" }, + { "city_code": "3202", "city": "无锡市", "county": "锡山开发区", "county_code": "320205KFQ", "sys_name": "预算内外收支核算系统", "sys_code": "KJHS" }, + { "city_code": "3202", "city": "无锡市", "county": "滨湖区马山开发区", "county_code": "320211KFQ", "sys_name": "账户核算系统", "sys_code": "ZHHS" }, + { "city_code": "3202", "city": "无锡市", "county": "江阴开发区", "county_code": "320281kfq", "sys_name": "财政一体化平台", "sys_code": "YTH" }, + { "city_code": "3202", "city": "无锡市", "county": "江阴开发区", "county_code": "320281kfq", "sys_name": "账户核算系统", "sys_code": "ZHHS" }, + { "city_code": "3202", "city": "无锡市", "county": "宜兴环科园", "county_code": "320282KFQ", "sys_name": "财务核算系统", "sys_code": "ZHHS" }, + { "city_code": "3202", "city": "无锡市", "county": "宜兴开发区", "county_code": "320282KFQ", "sys_name": "总预算核算系统", "sys_code": "ZHHS" }, + { "city_code": "3203", "city": "徐州市", "county": "经济技术开发区", "county_code": "320300JKQ", "sys_name": "富深协通财政一体化业务管理系统软件", "sys_code": "YTH" }, + { "city_code": "3203", "city": "徐州市", "county": "经济技术开发区", "county_code": "320300JKQ", "sys_name": "账务处理系统(收支分类改革升级版)", "sys_code": "KJHS" }, + { "city_code": "3204", "city": "常州市", "county": "天宁经开区", "county_code": "320402JKQ", "sys_name": "账务处理系统", "sys_code": "KJHS" }, + { "city_code": "3204", "city": "常州市", "county": "钟楼区开发区", "county_code": "320404KFQ", "sys_name": "国库集中支付系统", "sys_code": "GKZF" }, + { "city_code": "3204", "city": "常州市", "county": "钟楼区开发区", "county_code": "320405KFQ", "sys_name": "用款计划系统", "sys_code": "JHGL" }, + { "city_code": "3204", "city": "常州市", "county": "钟楼区开发区", "county_code": "320406KFQ", "sys_name": "指标管理系统", "sys_code": "ZBGL" }, + { "city_code": "3204", "city": "常州市", "county": "钟楼区开发区", "county_code": "320407KFQ", "sys_name": "总预算系统", "sys_code": "ZYS" }, + { "city_code": "3204", "city": "常州市", "county": "经开区", "county_code": "320412JKQ", "sys_name": "财政预算外业务", "sys_code": "YSW" }, + { "city_code": "3204", "city": "常州市", "county": "经开区", "county_code": "320412JKQ", "sys_name": "非税收缴系统", "sys_code": "FSSR" }, + { "city_code": "3204", "city": "常州市", "county": "经开区", "county_code": "320412JKQ", "sys_name": "预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3204", "city": "常州市", "county": "武进高新区", "county_code": "320413GXQ", "sys_name": "财政一体化管理信息系统", "sys_code": "YTH" }, + { "city_code": "3204", "city": "常州市", "county": "溧阳中关村", "county_code": "320481ZGC", "sys_name": "用友U8R10财政一体化平台", "sys_code": "YTH" }, + { "city_code": "3204", "city": "常州市", "county": "溧阳中关村开发区", "county_code": "320481ZGCKF", "sys_name": "用友U8R10财政一体化平台", "sys_code": "YTH" }, + { "city_code": "3205", "city": "苏州市", "county": "相城区开发区", "county_code": "320507KFQ", "sys_name": "开发区财政系统", "sys_code": "YTH" }, + { "city_code": "3205", "city": "苏州市", "county": "常熟市高新区", "county_code": "320581GXQ", "sys_name": "高新区总预算系统", "sys_code": "ZYS" }, + { "city_code": "3205", "city": "苏州市", "county": "昆山市开发区", "county_code": "320583KFQ", "sys_name": "开发区公共财政服务平台", "sys_code": "YTH" }, + { "city_code": "3205", "city": "苏州市", "county": "太仓市新区", "county_code": "320585XQ", "sys_name": "非税收入系统", "sys_code": "FSSR" }, + { "city_code": "3205", "city": "苏州市", "county": "太仓市新区", "county_code": "320586XQ", "sys_name": "会计核算系统", "sys_code": "KJHS" }, + { "city_code": "3205", "city": "苏州市", "county": "太仓市新区", "county_code": "320587XQ", "sys_name": "预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3206", "city": "南通市", "county": "开发区", "county_code": "320600KFQ", "sys_name": "预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3206", "city": "南通市", "county": "苏通园区", "county_code": "320600STY", "sys_name": "预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3206", "city": "南通市", "county": "通州湾示范区", "county_code": "320600TZW", "sys_name": "预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3207", "city": "连云港市", "county": "开发区", "county_code": "320701KFQ", "sys_name": "非税收入", "sys_code": "FSSR" }, + { "city_code": "3208", "city": "淮安市", "county": "开发区", "county_code": "320800KFQ", "sys_name": "用友GRP-U8管理软件", "sys_code": "YTH" }, + { "city_code": "3209", "city": "盐城市", "county": "城南新区", "county_code": "320900CZXQ", "sys_name": "盐城市_城南新区_国库集中支付系统", "sys_code": "GKZF" }, + { "city_code": "3209", "city": "盐城市", "county": "城南新区", "county_code": "320901CZXQ", "sys_name": "盐城市_城南新区_总预算账务处理系统", "sys_code": "KJHS" }, + { "city_code": "3210", "city": "扬州市", "county": "化工园区", "county_code": "321000HGY", "sys_name": "预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3210", "city": "扬州市", "county": "开发区", "county_code": "321000KFQ", "sys_name": "非税收入收缴", "sys_code": "FSSR" }, + { "city_code": "3210", "city": "扬州市", "county": "科技新城", "county_code": "321000KJC", "sys_name": "预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3210", "city": "扬州市", "county": "蜀冈-瘦西湖风景名胜区", "county_code": "321000SXH", "sys_name": "财政预算指标管理", "sys_code": "ZBGL" }, + { "city_code": "3210", "city": "扬州市", "county": "蜀冈-瘦西湖风景名胜区", "county_code": "321000SXH", "sys_name": "总预算会计核算", "sys_code": "KJHS" }, + { "city_code": "3210", "city": "扬州市", "county": "开发区", "county_code": "321001KFQ", "sys_name": "一体化系统", "sys_code": "YTH" }, + { "city_code": "3210", "city": "扬州市", "county": "开发区", "county_code": "321002KFQ", "sys_name": "预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3210", "city": "扬州市", "county": "高邮开发区", "county_code": "321084KFQ", "sys_name": "财政业务系统", "sys_code": "YTH" }, + { "city_code": "3211", "city": "镇江市", "county": "新区", "county_code": "321100XQ", "sys_name": "财政一体化", "sys_code": "YTH" }, + { "city_code": "3212", "city": "泰州市", "county": "市本级", "county_code": "321200", "sys_name": "泰州市_市本级_行政管理系统", "sys_code": "XZGL" }, + { "city_code": "3213", "city": "宿迁市", "county": "湖滨新城", "county_code": "321300HBXC", "sys_name": "新中大财务软件", "sys_code": "KJHS" }, + { "city_code": "3213", "city": "宿迁市", "county": "经开区", "county_code": "321300JKQ", "sys_name": "新中大公共财政管理软件", "sys_code": "YTH" }, + { "city_code": "3213", "city": "宿迁市", "county": "洋河新区", "county_code": "321300YHXQ", "sys_name": "预算执行系统", "sys_code": "YSZX" }, + { "city_code": "3213", "city": "宿迁市", "county": "宿豫区开发区", "county_code": "321311KFQ", "sys_name": "开发区新中大财务核算系统", "sys_code": "KJHS" }, + { "city_code": "3213", "city": "宿迁市", "county": "泗洪县开发区", "county_code": "321324KFQ", "sys_name": "开发区账务系统", "sys_code": "KJHS" }]; + function getCountyByCode(code) { + //var jsobj = JSON.parse(origin_place_arr); + var jsobj = origin_place_arr; + var jsonlength = jsobj.length; + for (var i = 0; i < jsonlength; i++) { + if (jsobj[i].county_code == code) { + return jsobj[i].city + jsobj[i].county; + } + } + return code; + } + Kubernetes.getCountyByCode = getCountyByCode; + function getCodeByCounty(place) { + place = place.replace(/\s*\t*/gim, ""); + //var jsobj = JSON.parse(origin_place_arr); + var jsobj = origin_place_arr; + var jsonlength = jsobj.length; + for (var i = 0; i < jsonlength; i++) { + if (jsobj[i].city === "" || jsobj[i].city == undefined) + continue; + if (jsobj[i].county === "" || jsobj[i].county == undefined) + continue; + if ((place.indexOf(jsobj[i].city) != -1) && (place.indexOf(jsobj[i].county) != -1)) { + return jsobj[i].county_code; + } + } + return place; + } + Kubernetes.getCodeByCounty = getCodeByCounty; + function getSystemNameById(id) { + var temJson = system_arr; + var sys_size = temJson.length; + for (var i = 0; i < sys_size; i++) { + if (temJson[i].sys_id == id) { + return temJson[i].sys_name; + } + } + return id; + } + Kubernetes.getSystemNameById = getSystemNameById; + function getIdBySystemName(name) { + var temJson = system_arr; + var sys_size = temJson.length; + for (var i = 0; i < sys_size; i++) { + if (temJson[i].sys_name == name) { + return temJson[i].sys_id; + } + } + return name; + } + Kubernetes.getIdBySystemName = getIdBySystemName; + function getCodeBySystemName(name) { + var jsobj = origin_place_arr; + var jsonlength = jsobj.length; + for (var i = 0; i < jsonlength; i++) { + if (jsobj[i].sys_name == name) { + return jsobj[i].sys_code; + } + } + return name; + } + Kubernetes.getCodeBySystemName = getCodeBySystemName; +})(Kubernetes || (Kubernetes = {})); + +/// +/// +/// +var Kubernetes; +(function (Kubernetes) { + Kubernetes.ReplicationControllerController = Kubernetes.controller("ReplicationControllerController", ["$scope", "KubernetesModel", "KubernetesState", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", + function ($scope, KubernetesModel, KubernetesState, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { + $scope.kubernetes = KubernetesState; + $scope.model = KubernetesModel; + $scope.rawModel = null; + Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); + $scope.itemConfig = { + properties: { + '^\\/labels$': { + template: $templateCache.get('labelTemplate.html') + } + } + }; + $scope.$on('kubernetesModelUpdated', function () { + updateData(); + }); + $scope.$on('$routeUpdate', function ($event) { + updateData(); + }); + $scope.$watch('model.pods', function (newValue, oldValue) { + updateData(); + }, true); + $scope.flipRaw = function () { + $scope.rawMode = !$scope.rawMode; + Core.$apply($scope); + }; + updateData(); + function updateData() { + if ($scope.dirty) { + return; + } + $scope.id = $routeParams["id"]; + $scope.item = $scope.model.getReplicationController(KubernetesState.selectedNamespace, $scope.id); + if ($scope.item) { + $scope.rawModel = Kubernetes.toRawYaml($scope.item); + } + Core.$apply($scope); + } + }]); +})(Kubernetes || (Kubernetes = {})); + +/// +/// +/// +var Kubernetes; +(function (Kubernetes) { + Kubernetes.ReplicationControllerEditController = Kubernetes.controller("ReplicationControllerEditController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "SchemaRegistry", + function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, schemas) { + $scope.kubernetes = KubernetesState; + $scope.model = KubernetesModel; + $scope.id = $routeParams["id"]; + $scope.schema = KubernetesSchema; + Kubernetes.log.debug("Schema: ", $scope.schema); + $scope.config = schemas.cloneSchema("io.fabric8.kubernetes.api.model.ReplicationController"); + //$$scope.config = KubernetesSchema.definitions.kubernetes_v1beta3_ReplicationController; + Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); + $scope.$on('$routeUpdate', function ($event) { + updateData(); + }); + updateData(); + function updateData() { + if ($scope.id) { + $scope.entity = $scope.model.getReplicationController(KubernetesState.selectedNamespace, $scope.id); + Core.$apply($scope); + $scope.fetched = true; + } + else { + $scope.fetched = true; + } + } + }]); +})(Kubernetes || (Kubernetes = {})); + +/// +/// +/// +var Kubernetes; +(function (Kubernetes) { + Kubernetes.ReplicationControllers = Kubernetes.controller("ReplicationControllers", ["$scope", "KubernetesModel", "DataInfoModel", "KubernetesReplicationControllers", "KubernetesPods", "KubernetesState", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", + function ($scope, KubernetesModel, DataInfoModel, KubernetesReplicationControllers, KubernetesPods, KubernetesState, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { + $scope.kubernetes = KubernetesState; + $scope.model = KubernetesModel; + $scope.filterReplicationControllers = $scope.model.filterReplicationcontrollers; + $scope.tableConfig = { + data: 'model.replicationControllers', + showSelectionCheckbox: true, + enableRowClickSelection: false, + multiSelect: true, + selectedItems: [], + filterOptions: { + filterText: $location.search()["q"] || '' + }, + columnDefs: [ + { field: '$oracleName', + displayName: '服务名称', + cellTemplate: $templateCache.get("idTemplate.html") + }, + //{ field: '$replicas', + // displayName: 'Scale', + // cellTemplate:$templateCache.get("desiredReplicas.html") + //}, + { field: '$pods.age', + displayName: '启动时间', + cellTemplate: $templateCache.get("ageTemplate.html") + }, + { field: '$labelsText', + displayName: '数据标签', + cellTemplate: $templateCache.get("labelTemplate.html") + }, + { field: '$pods', + displayName: '连接参数', + cellTemplate: $templateCache.get("connectParamTemplate.html") + }, + { field: '$pods[0].$eventCount', + displayName: '服务启动日志', + cellTemplate: $templateCache.get("eventSummaryTemplate.html") + }, + { field: '$podCounters', + displayName: '服务状态', + cellTemplate: $templateCache.get("podCountsAndLinkTemplate.html"), + customSortField: function (field) { + if (field.$podCounters.ready) { + return 3; + } + else if (field.$podCounters.valid || field.$podCounters.waiting) { + return 2; + } + else if (field.$podCounters.error) { + return 0; + } + else { + return 1; + } + } + } + ] + }; + Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); + $scope.deletePrompt = function (selected) { + if (angular.isString(selected)) { + selected = [{ + id: selected + }]; + } + UI.multiItemConfirmActionDialog({ + collection: selected, + index: 'metadata.name', + onClose: function (result) { + if (result) { + function deleteSelected(selected, next) { + if (next) { + Kubernetes.log.debug("deleting: ", Kubernetes.getName(next)); + Kubernetes.resizeController($http, KubernetesApiURL, next, 0, function () { + Kubernetes.log.debug("updated number of replicas"); + KubernetesReplicationControllers.delete({ + id: Kubernetes.getName(next) + }, undefined, function () { + Kubernetes.log.debug("deleted: ", Kubernetes.getName(next)); + if (next.metadata.labels.style === "oracle") { + console.log("delete " + next.metadata.name); + Kubernetes.connectOracle($http, $timeout, "/cancelOracleConection", "", Kubernetes.getName(next), 0); + } + deleteSelected(selected, selected.shift()); + }, function (error) { + Kubernetes.log.debug("Error deleting: ", error); + deleteSelected(selected, selected.shift()); + }); + }); + } + } + deleteSelected(selected, selected.shift()); + } + }, + title: '是否需要删除oracle服务?', + action: '以下的oracle服务将会被删除:', + okText: '删除', + okClass: 'btn-danger', + custom: "该服务删除后将会清除oracle对应服务的端口等资源占用,但不删除数据文件,是否删除,请确认!", + customClass: "alert alert-warning", + cancelText: "取消" + }).open(); + }; + $scope.createRCs = function () { + var xhr = new XMLHttpRequest(); + xhr.onreadystatechange = function () { + if (xhr.readyState == 4) { + if (xhr.status == 200) { + var obj = JSON.parse(xhr.responseText); + //console.log(obj.path); + var name = obj.name; + //console.log(name + "=====" +port); + var object = { + "name": name, + "labels": { + "name": name + }, + "path": obj.path, + "isTarget": "true" + }; + console.log(object); + Kubernetes.createRC(object, function (rc) { + $http({ + url: '/xmlformserver', + method: 'Post' + }).success(function (data, header, config, status) { + if (data) { + DataInfoModel.serverdata = data; + } + }).error(function (data, header, config, status) { + console.log("error"); + }); + Kubernetes.connectOracle($http, $timeout, "/connectToOracle", "", Kubernetes.getName(rc), 0); + }); + } + else if (xhr.status == 403) { + alert("两次创建oracle服务时间间隔需要超过2分钟!"); + } + else { + } + } + }; + xhr.open("POST", "/oracleAppPath", false); //与服务器连接并发送 + xhr.send(null); + }; + $scope.stopPrompt = function (selected) { + if (angular.isString(selected)) { + selected = [{ + id: selected + }]; + } + UI.multiItemConfirmActionDialog({ + collection: selected, + index: 'metadata.name', + onClose: function (result) { + if (result) { + function stopSelected(selected, next) { + if (next) { + Kubernetes.resizeController($http, KubernetesApiURL, next, 0, function () { + if (next.metadata.labels.style === "oracle") { + console.log("stop " + next.metadata.name); + Kubernetes.connectOracle($http, $timeout, "/cancelOracleConection", "", Kubernetes.getName(next), 0); + } + stopSelected(selected, selected.shift()); + }); + } + } + stopSelected(selected, selected.shift()); + } + }, + title: '是否需要停止oracle服务?', + action: '以下的oracle服务将会被停止:', + okText: '停止', + okClass: 'btn-danger', + custom: "该服务停止后将无法继续提供连接访问服务,但可通过启动按钮重新启动该服务以进行访问。是否停止,请确认", + customClass: "alert alert-warning", + cancelText: "取消" + }).open(); + }; + $scope.reStartPrompt = function (selected) { + function startSelected(selected, next) { + if (next) { + if (next.$replicas === 0) + Kubernetes.resizeController($http, KubernetesApiURL, next, 1, function () { + console.log("restart " + next.metadata.name); + Kubernetes.connectOracle($http, $timeout, "/connectToOracle", "", Kubernetes.getName(next), 0); + startSelected(selected, selected.shift()); + }); + } + } + startSelected(selected, selected.shift()); + }; + $scope.extractData = { + items: null, + selectedItem: $scope.filterReplicationControllers[0] || "", + dialog: new UI.Dialog(), + onOk: function () { + var extractData = $scope.extractData; + extractData.dialog.close(); + var filterReplicationController = extractData.selectedItem; + Kubernetes.extractDataToOracle($http, extractData.items, filterReplicationController); + extractData.selectedItem = $scope.filterReplicationControllers[0] || ""; + }, + open: function (selected) { + var extractData = $scope.extractData; + extractData.dialog.open(); + extractData.selectedItem = $scope.filterReplicationControllers[0] || ""; + extractData.items = selected; + $timeout(function () { + $('#newDataName').focus(); + }, 50); + }, + close: function () { + $scope.extractData.dialog.close(); + } + }; + }]); +})(Kubernetes || (Kubernetes = {})); + +/// +/// var Kubernetes; (function (Kubernetes) { - var hiddenProperties = ['status', 'deletionTimestamp']; - function withProperty(schema, name, action) { - if (schema.properties[name]) { - action(schema.properties[name]); + function schemaSetRequired(schema, propertyName, isRequired) { + if (isRequired === void 0) { isRequired = true; } + if (schema && propertyName) { + var required = schema.required; + if (isRequired) { + if (!required) { + required = []; + schema.required = required; + } + if (!_.contains(required, propertyName)) { + required.push(propertyName); + } + } + else { + if (required) { + var idx = required.indexOf(propertyName); + if (idx >= 0) { + required.splice(idx, 1); + } + } + } } } - function hideProperties(schema) { - _.forEach(hiddenProperties, function (property) { - withProperty(schema, property, function (property) { - property.hidden = true; + Kubernetes.schemaSetRequired = schemaSetRequired; +})(Kubernetes || (Kubernetes = {})); + +/// +/// +/// +var Kubernetes; +(function (Kubernetes) { + Kubernetes.SecretController = Kubernetes.controller("SecretController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "K8SClientFactory", + function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, K8SClientFactory) { + $scope.kubernetes = KubernetesState; + $scope.model = KubernetesModel; + $scope.id = $routeParams["id"]; + Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); + Kubernetes.selectSubNavBar($scope, "Secrets", $scope.id ? "Edit Secret: " + $scope.id : "Create Secret"); + var kubeClient = Kubernetes.createKubernetesClient("secrets"); + var onSaveUrl = $location.search()["savedUrl"]; + var createKind = $location.search()["kind"]; + $scope.sshKeys = Kubernetes.sshSecretDataKeys; + $scope.httpsKeys = Kubernetes.httpsSecretDataKeys; + var secretLabels = { + "ssh-key": "SSH private key", + "ssh-key.pub": "SSH public key", + "ca.crt": "CA Certificate", + ".dockercfg": "Docker config", + "username": "User name" + }; + var secretTooltips = { + "ssh-key": "SSH private key text contents", + "ca.crt": "Certificate Authority (CA) Certificate", + ".dockercfg": "Docker configuration token" + }; + $scope.$on('kubernetesModelUpdated', function () { + if ($scope.id && !$scope.secret) { + updateData(); + } }); - }); - } - Kubernetes._module.factory('KubernetesSchema', ['SchemaRegistry', function (schemas) { - Kubernetes.configureSchema(); - schemas.addListener("k8s schema customizer", function (name, schema) { - if (schema.properties) { - if (schema.properties.name) { - schema.controls = ['name', '*']; + $scope.$on('$routeUpdate', function ($event) { + updateData(); + }); + $scope.propertyKeys = function () { + return _.keys(secretLabels); + }; + $scope.checkNameUnique = function (value) { + var answer = true; + angular.forEach($scope.model.secrets, function (secret) { + var name = Kubernetes.getName(secret); + if (value === name) { + answer = false; + } + }); + return answer; + }; + $scope.checkFieldUnique = function (key) { + return $scope.entity.properties[key] ? false : true; + }; + $scope.hasAllKeys = function (keys) { + var answer = keys && keys.length; + angular.forEach(keys, function (key) { + if (!$scope.entity.properties[key]) { + answer = false; + } + }); + return answer; + }; + $scope.addFieldDialog = { + controller: null, + newReplicas: 0, + dialog: new UI.Dialog(), + onOk: function () { + $scope.addFieldDialog.dialog.close(); + $scope.addDataField(); + }, + open: function (controller) { + var addFieldDialog = $scope.addFieldDialog; + addFieldDialog.dialog.open(); + $timeout(function () { + $('#newDataName').focus(); + }, 50); + }, + close: function () { + $scope.addFieldDialog.dialog.close(); + } + }; + $scope.entityChanged = function () { + $scope.changed = true; + }; + $scope.addFields = function (keys) { + angular.forEach(keys, function (key) { return addField(key); }); + Core.$apply($scope); + }; + function addField(key) { + var property = createProperty(key, ""); + $scope.entity.properties[key] = property; + $scope.entity.newDataKey = ""; + $scope.showAddDataFieldForm = false; + $scope.entityChanged(); + } + $scope.addDataField = function () { + var key = $scope.entity.newDataKey; + if (key) { + addField(key); + Core.$apply($scope); + } + }; + $scope.deleteProperty = function (key) { + if (key) { + delete $scope.entity.properties[key]; + $scope.entityChanged(); + Core.$apply($scope); + } + }; + $scope.cancel = function () { + updateData(); + }; + $scope.save = function () { + var entity = $scope.entity || {}; + var name = entity.name; + if (name) { + if (!$scope.secret) { + $scope.secret = { + apiVersion: Kubernetes.defaultApiVersion, + kind: "Secret", + metadata: { + name: "" + }, + data: {} + }; } - withProperty(schema, 'portalIP', function (property) { - property.label = "Portal IP"; - }); - withProperty(schema, 'publicIPs', function (property) { - property.label = "Public IPs"; - }); - withProperty(schema, 'Spec', function (property) { - property.label = 'false'; + var data = {}; + angular.forEach(entity.properties, function (property) { + var key = property.key; + var value = property.value || ""; + if (key) { + data[key] = window.btoa(value); + } }); - withProperty(schema, 'Metadata', function (property) { - property.label = 'false'; + $scope.secret.metadata.name = name; + $scope.secret.data = data; + Core.notification('info', "Saving secret " + name); + kubeClient.put($scope.secret, function (data) { + var secretsLink = onSaveUrl || Developer.namespaceLink($scope, $routeParams, "secrets"); + var params = {}; + if (onSaveUrl) { + params['secret'] = name; + } + $location.path(secretsLink); + $location.search(params); + Kubernetes.log.info("navigating to URL: " + secretsLink + " with params " + angular.toJson($location.search())); + }, function (err) { + Core.notification('error', "Failed to secret " + name + "\n" + err); }); - hideProperties(schema); } - if (_.endsWith(name, "ServiceSpec")) { - schema.controls = ["portalIP", "createExternalLoadBalancer", "sessionAffinity", "publicIPs", "ports", "selector", "*"]; - withProperty(schema, 'sessionAffinity', function (property) { - Kubernetes.log.debug("Schema: ", schema); - property.enum = ['None', 'ClientIP']; - property.default = 'None'; + }; + updateData(); + function createProperty(key, text) { + var label = secretLabels[key] || Core.humanizeValue(key); + var tooltip = secretTooltips[key] || "Value of the " + label; + var rows = 5; + var lines = text.split("\n").length + 1; + if (lines > rows) { + rows = lines; + } + var type = "textarea"; + if (key === "username") { + type = "text"; + if (!text) { + text = Kubernetes.currentUserName(); + } + } + else if (key === "password") { + type = "password"; + } + var property = { + key: key, + label: label, + tooltip: tooltip, + rows: rows, + value: text, + type: type + }; + return property; + } + function updateData() { + $scope.item = null; + $scope.changed = false; + $scope.entity = { + name: $scope.id, + properties: {} + }; + if ($scope.id) { + angular.forEach($scope.model.secrets, function (secret) { + var name = Kubernetes.getName(secret); + if (name === $scope.id) { + $scope.secret = secret; + angular.forEach(secret.data, function (value, key) { + var text = ""; + if (angular.isString(value) && value) { + text = window.atob(value); + } + var property = createProperty(key, text); + $scope.entity.properties[key] = property; + }); + $scope.fetched = true; + Core.$apply($scope); + } }); } - if (_.endsWith(name, "Service")) { - schema.controls = undefined; - schema.tabs = { - 'Basic Information': ['metadata'], - 'Details': ['*'] - }; - Kubernetes.log.debug("Name: ", name, " Schema: ", schema); + else { + if (createKind === "ssh") { + $scope.addFields($scope.sshKeys); + } + else if (createKind === "https") { + $scope.addFields($scope.httpsKeys); + } + $scope.fetched = true; + Core.$apply($scope); } - }); - schemas.addSchema('kubernetes', Kubernetes.schema); - // now lets iterate and add all the definitions too - angular.forEach(Kubernetes.schema.definitions, function (definition, typeName) { - //schemas.addSchema(typeName, definition); - schemas.addSchema("#/definitions/" + typeName, definition); - }); - return Kubernetes.schema; - }]); -})(Kubernetes || (Kubernetes = {})); - -/// -var Kubernetes; -(function (Kubernetes) { - // facade this to the watcher service - var KubernetesStateImpl = (function () { - function KubernetesStateImpl(watcher) { - this.watcher = watcher; - } - Object.defineProperty(KubernetesStateImpl.prototype, "namespaces", { - get: function () { - return _.map(this.watcher.getObjects(Kubernetes.WatchTypes.NAMESPACES), function (namespace) { - return namespace.metadata.name; - }); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(KubernetesStateImpl.prototype, "selectedNamespace", { - get: function () { - return this.watcher.getNamespace(); - }, - set: function (namespace) { - this.watcher.setNamespace(namespace); - }, - enumerable: true, - configurable: true - }); - return KubernetesStateImpl; - }()); - Kubernetes._module.factory('KubernetesState', ['WatcherService', function (watcher) { - return new KubernetesStateImpl(watcher); - }]); - // TODO this doesn't need to be a service really - Kubernetes._module.factory('KubernetesApiURL', function () { return Kubernetes.kubernetesApiUrl(); }); - // TODO we'll get rid of this... - Kubernetes._module.factory('KubernetesVersion', [function () { - return { - query: function () { return null; } - }; - }]); - // TODO let's move these into KubernetesModel so controllers don't have to inject them separately - Kubernetes._module.factory('KubernetesPods', ['KubernetesModel', function (KubernetesModel) { - return KubernetesModel['podsResource']; - }]); - Kubernetes._module.factory('KubernetesReplicationControllers', ['KubernetesModel', function (KubernetesModel) { - return KubernetesModel['replicationcontrollersResource']; - }]); - Kubernetes._module.factory('KubernetesServices', ['KubernetesModel', function (KubernetesModel) { - return KubernetesModel['servicesResource']; + } }]); })(Kubernetes || (Kubernetes = {})); /// -/// /// /// +/// var Kubernetes; (function (Kubernetes) { - Kubernetes.FileDropController = Kubernetes.controller("FileDropController", ["$scope", "KubernetesModel", "FileUploader", '$http', function ($scope, model, FileUploader, $http) { - var log = Logger.get('kubernetes-file-uploader'); - var uploader = $scope.uploader = new FileUploader({ - autoUpload: false, - removeAfterUpload: true, - url: Kubernetes.kubernetesApiUrl() + Kubernetes.SecretsController = Kubernetes.controller("SecretsController", ["$scope", "KubernetesModel", "KubernetesState", "ServiceRegistry", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", + function ($scope, KubernetesModel, KubernetesState, ServiceRegistry, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { + $scope.kubernetes = KubernetesState; + $scope.model = KubernetesModel; + $scope.$on('kubernetesModelUpdated', function () { + Core.$apply($scope); }); - $scope.uploader.onAfterAddingFile = function (file) { - var reader = new FileReader(); - reader.onload = function () { - if (reader.readyState === 2) { - log.debug("File added: ", file); - var data = reader.result; - var obj = null; - if (_.endsWith(file._file.name, '.json')) { - log.debug("Parsing JSON file"); - try { - obj = angular.fromJson(data); - } - catch (err) { - log.debug("Failed to read dropped file ", file._file.name, ": ", err); - return; - } - } - else if (_.endsWith(file._file.name, '.yaml')) { - log.debug("Parsing YAML file"); - try { - obj = jsyaml.load(data); - } - catch (err) { - log.debug("Failed to read dropped file ", file._file.name, ": ", err); - return; + $scope.$createSecretLink = Developer.namespaceLink($scope, $routeParams, "secretCreate"); + var kubeClient = Kubernetes.createKubernetesClient("secrets"); + $scope.tableConfig = { + data: 'model.secrets', + showSelectionCheckbox: true, + enableRowClickSelection: false, + multiSelect: true, + selectedItems: [], + filterOptions: { + filterText: $location.search()["q"] || '' + }, + columnDefs: [ + { + field: '_key', + displayName: 'Name', + defaultSort: true, + cellTemplate: $templateCache.get("idTemplate.html") + }, + { + field: '$labelsText', + displayName: 'Labels', + cellTemplate: $templateCache.get("labelTemplate.html") + }, + ] + }; + $scope.deletePrompt = function (selected) { + UI.multiItemConfirmActionDialog({ + collection: selected, + index: 'metadata.name', + onClose: function (result) { + if (result) { + function deleteSelected(selected, next) { + if (next) { + kubeClient.delete(next, function () { + deleteSelected(selected, selected.shift()); + }); + } + else { + } } + deleteSelected(selected, selected.shift()); } - else { - log.debug("Unknown file type for file: ", file._file.name); - return; - } - log.debug("Dropped object: ", obj); - if (!KubernetesAPI.getNamespace(obj)) { - obj.metadata.namespace = model.currentNamespace(); - } - KubernetesAPI.put({ - object: obj, - success: function (data) { - Core.notification("success", "Applied " + file._file.name); - }, - error: function (err) { - log.info("Got error applying", file._file.name, ": ", err); - Core.notification("warning", "Failed to apply " + file._file.name + ", error: " + err.message); - } - }); - } - }; - reader.readAsText(file._file); - }; - $scope.uploader.onBeforeUploadItem = function (item) { - log.debug("Uploading: ", item); - //Core.notification('info', 'Uploading ' + item); - }; - $scope.uploader.onSuccessItem = function (item) { - log.debug("onSuccessItem: ", item); - }; - $scope.uploader.onErrorItem = function (item, response, status) { - log.debug("Failed to apply, response: ", response, " status: ", status); + }, + title: 'Delete Secrets', + action: 'The following Secrets will be deleted:', + okText: 'Delete', + okClass: 'btn-danger', + custom: "This operation is permanent once completed!", + customClass: "alert alert-warning" + }).open(); }; + Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); }]); - Kubernetes.NamespaceController = Kubernetes.controller('NamespaceController', ['$scope', 'WatcherService', function ($scope, watcher) { - $scope.namespaces = watcher.getObjects('namespaces'); - $scope.$watchCollection('namespaces', function (newValue, oldValue) { - if (newValue !== oldValue) { - $scope.namespace = watcher.getNamespace(); - } - }); - $scope.$watch('namespace', function (newValue, oldValue) { - if (newValue !== oldValue) { - if (newValue !== oldValue) { - watcher.setNamespace(newValue); +})(Kubernetes || (Kubernetes = {})); + +/// +/// +/// +var Kubernetes; +(function (Kubernetes) { + Kubernetes.ServiceController = Kubernetes.controller("ServiceController", ["$scope", "KubernetesModel", "KubernetesState", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", + function ($scope, KubernetesModel, KubernetesState, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { + $scope.kubernetes = KubernetesState; + $scope.model = KubernetesModel; + $scope.rawModel = null; + Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); + $scope.itemConfig = { + properties: { + '^\\/labels$': { + template: $templateCache.get('labelTemplate.html') } } - }); - }]); - Kubernetes.TopLevel = Kubernetes.controller("TopLevel", ["$scope", "KubernetesVersion", "KubernetesState", function ($scope, KubernetesVersion, KubernetesState) { - $scope.version = undefined; - $scope.showAppView = Kubernetes.isAppView(); - $scope.isActive = function (href) { - return Kubernetes.isLinkActive(href); }; - $scope.mode = 'yaml'; - $scope.rawMode = true; - $scope.dirty = false; - $scope.readOnly = true; - $scope.rawModel = null; - $scope.$on('hawtioEditor_default_dirty', function ($event, dirty) { - $scope.dirty = dirty; + $scope.$on('kubernetesModelUpdated', function () { + updateData(); }); - $scope.save = function (rawModel) { - var obj = null; - var str = rawModel.replace(/\t/g, " "); - try { - obj = jsyaml.load(str); - } - catch (err) { - Core.notification("warning", "Failed to save object, error: \"" + err + "\""); - } - if (!obj) { - return; - } - $scope.readOnly = true; - KubernetesAPI.put({ - object: obj, - success: function (data) { - $scope.dirty = false; - Core.notification("success", "Saved object " + Kubernetes.getName(obj)); - Core.$apply($scope); - }, - error: function (err) { - console.log("Got error: ", err); - Core.notification("warning", "Failed to save object, error: \"" + err.message + "\""); - $scope.dirty = false; - Core.$apply($scope); - } - }); - }; - $scope.kubernetes = KubernetesState; - KubernetesVersion.query(function (response) { - $scope.version = response; + $scope.$watch('model.services', function (newValue, oldValue) { + updateData(); + }, true); + $scope.$on('$routeUpdate', function ($event) { + updateData(); }); + $scope.flipRaw = function () { + $scope.rawMode = !$scope.rawMode; + Core.$apply($scope); + }; + updateData(); + function updateData() { + $scope.id = $routeParams["id"]; + $scope.namespace = $routeParams["namespace"] || KubernetesState.selectedNamespace; + $scope.item = $scope.model.getService($scope.namespace, $scope.id); + if ($scope.item) { + $scope.rawModel = Kubernetes.toRawYaml($scope.item); + } + Core.$apply($scope); + } }]); })(Kubernetes || (Kubernetes = {})); +/// +/// /// var Kubernetes; (function (Kubernetes) { - Kubernetes.NamespaceController = Kubernetes.controller("NamespaceController", ["$scope", "WatcherService", function ($scope, watcher) { - $scope.watcher = watcher; - $scope.namespaceObjects = watcher.getObjects('namespaces'); - $scope.namespace = watcher.getNamespace(); - $scope.namespaces = []; - $scope.$watch('namespace', function (newValue, oldValue) { - if (newValue !== oldValue) { - watcher.setNamespace(newValue); - } + Kubernetes.ServiceEditController = Kubernetes.controller("ServiceEditController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "SchemaRegistry", + function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, schemas) { + $scope.kubernetes = KubernetesState; + $scope.model = KubernetesModel; + $scope.id = $routeParams["id"]; + $scope.schema = KubernetesSchema; + $scope.config = schemas.cloneSchema("io.fabric8.kubernetes.api.model.Service"); + //$scope.config = KubernetesSchema.definitions.kubernetes_v1beta2_Service; + Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); + $scope.$on('$routeUpdate', function ($event) { + updateData(); }); - $scope.$watch('watcher.getNamespace()', function (newValue, oldValue) { - if (newValue !== oldValue) { - $scope.namespace = newValue; + updateData(); + function updateData() { + if ($scope.id) { + $scope.entity = $scope.model.getService(KubernetesState.selectedNamespace, $scope.id); + Core.$apply($scope); + $scope.fetched = true; } - }); - $scope.$watchCollection('namespaceObjects', function (namespaceObjects) { - $scope.namespaces = _.map(namespaceObjects, function (namespace) { return namespace.metadata.name; }); - }); + else { + $scope.fetched = true; + } + } }]); })(Kubernetes || (Kubernetes = {})); /// +/// /// +/// var Kubernetes; (function (Kubernetes) { - var oracleModelService = (function () { - function oracleModelService() { - this.oraclecontrollers = []; + Kubernetes._module.factory('ServiceRegistry', [function () { + return new ServiceRegistryService(); + }]); + /** + * Represents a simple interface to service discovery that can be used early on in the application lifecycle before the + * underlying model has been created via dependency injection + */ + var ServiceRegistryService = (function () { + function ServiceRegistryService() { + this.model = null; } - Object.defineProperty(oracleModelService.prototype, "oracleControllers", { - get: function () { - return this.oraclecontrollers; - }, - set: function (oracleControllers) { - this.oraclecontrollers = oracleControllers; - }, - enumerable: true, - configurable: true - }); - oracleModelService.prototype.findIndexOfOracleControllers = function (oracleControllers, name) { - for (var index in oracleControllers) - if (oracleControllers[index].name === name) - return index; - return -1; + /** + * Returns true if there is a service available for the given ID or false + */ + ServiceRegistryService.prototype.hasService = function (serviceName) { + return this.findService(serviceName) ? true : false; + }; + /** + * Returns the service for the given service name (ID) or null if it cannot be found + * + * @param serviceName the name of the service to look for + * @return {null} + */ + ServiceRegistryService.prototype.findService = function (serviceName) { + var answer = null; + if (serviceName) { + var model = this.getModel(); + if (model) { + var namespace = model.currentNamespace(); + return model.getService(namespace, serviceName); + } + } + return answer; + }; + /** + * Returns the service link for the given service name + * + * @param serviceName the name of the service + * @return {null} + */ + ServiceRegistryService.prototype.serviceLink = function (serviceName) { + var service = this.findService(serviceName); + return Kubernetes.serviceLinkUrl(service); + }; + /** + * Returns the service link for the given service name if its ready (has at least one ready pod) + * + * @param serviceName the name of the service + * @return {null} + */ + ServiceRegistryService.prototype.serviceReadyLink = function (serviceName) { + var service = this.findService(serviceName); + if (Kubernetes.readyPodCount(service)) { + return Kubernetes.serviceLinkUrl(service); + } + else { + return null; + } + }; + ServiceRegistryService.prototype.getModel = function () { + var answer = this.model; + // lets allow lazy load so we can be invoked before the injector has been created + if (!answer) { + var injector = HawtioCore.injector; + if (injector) { + this.model = injector.get('KubernetesModel'); + } + } + answer = this.model; + return answer; }; - return oracleModelService; + return ServiceRegistryService; }()); - Kubernetes.oracleModelService = oracleModelService; - Kubernetes._module.factory('OracleStatusModel', [function () { - return new oracleModelService(); - }]); + Kubernetes.ServiceRegistryService = ServiceRegistryService; })(Kubernetes || (Kubernetes = {})); /// @@ -15124,418 +14950,195 @@ var Kubernetes; /// var Kubernetes; (function (Kubernetes) { - var OverviewDirective = Kubernetes._module.directive("kubernetesOverview", ["$templateCache", "$compile", "$interpolate", "$timeout", "$window", "KubernetesState", 'KubernetesModel', function ($templateCache, $compile, $interpolate, $timeout, $window, KubernetesState, KubernetesModel) { - var log = Logger.get('kubernetes-overview'); - var model = KubernetesModel; - var state = KubernetesState; - return { - restrict: 'E', - replace: true, - link: function (scope, element, attr) { - scope.model = model; - element.css({ visibility: 'hidden' }); - scope.getEntity = function (type, key) { - switch (type) { - case 'host': - return model.podsByHost[key]; - case 'pod': - return model.podsByKey[key]; - case 'replicationController': - return model.replicationControllersByKey[key]; - case 'service': - return model.servicesByKey[key]; - default: - return undefined; - } - }; - scope.kubernetes = state; - scope.customizeDefaultOptions = function (options) { - options.Endpoint = ['Blank', {}]; - }; - scope.mouseEnter = function ($event) { - if (scope.jsPlumb) { - angular.element($event.currentTarget).addClass("hovered"); - scope.jsPlumb.getEndpoints($event.currentTarget).forEach(function (endpoint) { - endpoint.connections.forEach(function (connection) { - if (!connection.isHover()) { - connection.setHover(true); - connection.endpoints.forEach(function (e) { - scope.mouseEnter({ - currentTarget: e.element - }); - }); - } - }); - }); - } - }; - scope.mouseLeave = function ($event) { - if (scope.jsPlumb) { - angular.element($event.currentTarget).removeClass("hovered"); - scope.jsPlumb.getEndpoints($event.currentTarget).forEach(function (endpoint) { - endpoint.connections.forEach(function (connection) { - if (connection.isHover()) { - connection.setHover(false); - connection.endpoints.forEach(function (e) { - scope.mouseLeave({ - currentTarget: e.element - }); - }); - } - }); - }); - } - }; - /* - scope.customizeEndpointOptions = (jsPlumb, node, options) => { - var type = node.el.attr('data-type'); - // log.debug("endpoint type: ", type); - switch (type) { - case 'pod': - break; - case 'service': - break; - case 'replicationController': - break; - } - }; - */ - scope.customizeConnectionOptions = function (jsPlumb, edge, params, options) { - var type = edge.source.el.attr('data-type'); - options.connector = ["Bezier", { curviness: 50, stub: 25, alwaysRespectStubs: true }]; - params.paintStyle = { - lineWidth: 2, - strokeStyle: '#5555cc' - }; - switch (type) { - case 'pod': - break; - case 'service': - params.anchors = [ - ["Continuous", { faces: ["right"] }], - ["Continuous", { faces: ["left"] }] - ]; - break; - case 'replicationController': - params.anchors = [ - ["Perimeter", { shape: "Circle" }], - ["Continuous", { faces: ["right"] }] - ]; - break; - } - //log.debug("connection source type: ", type); - return options; - }; - function interpolate(template, config) { - return $interpolate(template)(config); - } - function createElement(template, thingName, thing) { - var config = {}; - config[thingName] = thing; - return interpolate(template, config); - } - function createElements(template, thingName, things) { - return things.map(function (thing) { - return createElement(template, thingName, thing); - }); - } - function appendNewElements(parentEl, template, thingName, things) { - things.forEach(function (thing) { - var key = thing['_key'] || thing['elementId'] || thing['id']; - var existing = parentEl.find("#" + key); - if (!existing.length) { - log.debug("existing: ", existing, " key: ", key); - parentEl.append($compile(createElement(template, thingName, thing))(scope)); - } - }); - } - function namespaceFilter(item) { - return Kubernetes.getNamespace(item) === scope.kubernetes.selectedNamespace; - } - function firstDraw() { - log.debug("First draw"); - element.empty(); - var services = model.services; - var replicationControllers = model.replicationControllers; - var pods = model.pods; - var hosts = model.hosts; - // log.debug("hosts: ", model.hosts); - var parentEl = angular.element($templateCache.get("overviewTemplate.html")); - var servicesEl = parentEl.find(".services"); - var hostsEl = parentEl.find(".hosts"); - var replicationControllersEl = parentEl.find(".replicationControllers"); - servicesEl.append(createElements($templateCache.get("serviceTemplate.html"), 'service', services.filter(namespaceFilter))); - replicationControllersEl.append(createElements($templateCache.get("replicationControllerTemplate.html"), 'replicationController', replicationControllers.filter(namespaceFilter))); - hosts.forEach(function (host) { - var hostEl = angular.element(createElement($templateCache.get("overviewHostTemplate.html"), 'host', host)); - var podContainer = angular.element(hostEl.find('.pod-container')); - podContainer.append(createElements($templateCache.get("podTemplate.html"), "pod", host.pods)); - hostsEl.append(hostEl); - }); - //parentEl.append(createElements($templateCache.get("podTemplate.html"), 'pod', pods)); - element.append($compile(parentEl)(scope)); - $timeout(function () { element.css({ visibility: 'visible' }); }, 250); - } - function update() { - scope.$emit('jsplumbDoWhileSuspended', function () { - log.debug("Update"); - var services = model.services; - var replicationControllers = model.replicationControllers; - var pods = model.pods; - var hosts = model.hosts; - var parentEl = element.find('[hawtio-jsplumb]'); - var children = parentEl.find('.jsplumb-node'); - children.each(function (index, c) { - var child = angular.element(c); - var key = child.attr('id'); - log.debug('key: ', key); - if (Core.isBlank(key)) { - return; - } - var type = child.attr('data-type'); - switch (type) { - case 'host': - if (key in model.podsByHost) { - return; - } - break; - case 'service': - if (key in model.servicesByKey && Kubernetes.getNamespace(model.servicesByKey[key]) == scope.kubernetes.selectedNamespace) { - var service = model.servicesByKey[key]; - child.attr('connect-to', service.connectTo); - return; - } - break; - case 'pod': - /* - if (hasId(pods, id)) { - return; - } - */ - if (key in model.podsByKey) { - return; - } - break; - case 'replicationController': - if (key in model.replicationControllersByKey) { - var replicationController = model.replicationControllersByKey[key]; - child.attr('connect-to', replicationController.connectTo); - return; - } - break; - default: - log.debug("Ignoring element with unknown type"); - return; - } - log.debug("Removing: ", key); - child.remove(); - }); - var servicesEl = element.find(".services"); - var replicationControllersEl = element.find(".replicationControllers"); - var hostsEl = element.find(".hosts"); - appendNewElements(servicesEl, $templateCache.get("serviceTemplate.html"), "service", services); - appendNewElements(replicationControllersEl, $templateCache.get("replicationControllerTemplate.html"), "replicationController", replicationControllers); - appendNewElements(hostsEl, $templateCache.get("overviewHostTemplate.html"), "host", hosts); - hosts.forEach(function (host) { - var hostEl = angular.element(hostsEl.find("#" + host.elementId)); - var podContainer = angular.element(hostEl.find('.pod-container')); - appendNewElements(podContainer, $templateCache.get("podTemplate.html"), "pod", host.pods); - }); - }); - } - function refreshDrawing() { - log.debug("Refreshing drawing"); - if (element.children().length === 0) { - firstDraw(); - } - else { - update(); + Kubernetes.ServiceApps = Kubernetes._module.controller('Kubernetes.ServiceApps', ["$scope", "KubernetesModel", function ($scope, KubernetesModel) { + $scope.model = KubernetesModel; + }]); + Kubernetes.Services = Kubernetes.controller("Services", ["$scope", "KubernetesModel", "KubernetesServices", "KubernetesPods", "KubernetesState", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", + function ($scope, KubernetesModel, KubernetesServices, KubernetesPods, KubernetesState, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { + $scope.kubernetes = KubernetesState; + $scope.model = KubernetesModel; + ControllerHelpers.bindModelToSearchParam($scope, $location, 'mode', 'mode', 'list'); + $scope.tableConfig = { + data: 'model.services', + showSelectionCheckbox: true, + enableRowClickSelection: false, + multiSelect: true, + selectedItems: [], + filterOptions: { + filterText: $location.search()["q"] || '' + }, + columnDefs: [ + { field: '_key', + displayName: 'Name', + cellTemplate: $templateCache.get("idTemplate.html") + }, + { field: '$serviceUrl', + displayName: 'Address', + cellTemplate: $templateCache.get("portalAddress.html") + }, + { field: '$podCount', + displayName: 'Pods', + cellTemplate: $templateCache.get("podCountsAndLinkTemplate.html"), + customSortField: function (field) { + // need to concat all the pod counters + var ready = field.$podCounters.ready || 0; + var valid = field.$podCounters.valid || 0; + var waiting = field.$podCounters.waiting || 0; + var error = field.$podCounters.error || 0; + return ready + valid + waiting + error; } - Core.$apply(scope); + }, + { field: '$selectorText', + displayName: 'Selector', + cellTemplate: $templateCache.get("selectorTemplate.html") + }, + { field: '$labelsText', + displayName: 'Labels', + cellTemplate: $templateCache.get("labelTemplate.html") } - scope.$on('kubernetesModelUpdated', _.debounce(refreshDrawing, 500, { trailing: true })); - setTimeout(refreshDrawing, 100); - } + ] }; - }]); - var OverviewBoxController = Kubernetes.controller("OverviewBoxController", ["$scope", "$location", function ($scope, $location) { - $scope.viewDetails = function (entity, path) { - if (entity) { - var namespace = Kubernetes.getNamespace(entity); - var id = Kubernetes.getName(entity); - $location.path(UrlHelpers.join('/kubernetes/namespace', namespace, path, id)); - } - else { - Kubernetes.log.warn("No entity for viewDetails!"); + Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); + $scope.deletePrompt = function (selected) { + if (angular.isString(selected)) { + selected = [{ + id: selected + }]; } + UI.multiItemConfirmActionDialog({ + collection: selected, + index: 'metadata.name', + onClose: function (result) { + if (result) { + function deleteSelected(selected, next) { + if (next) { + Kubernetes.log.debug("deleting: ", Kubernetes.getName(next)); + KubernetesServices.delete({ + id: Kubernetes.getName(next) + }, undefined, function () { + Kubernetes.log.debug("deleted: ", Kubernetes.getName(next)); + deleteSelected(selected, selected.shift()); + }, function (error) { + Kubernetes.log.debug("Error deleting: ", error); + deleteSelected(selected, selected.shift()); + }); + } + } + deleteSelected(selected, selected.shift()); + } + }, + title: 'Delete services?', + action: 'The following services will be deleted:', + okText: 'Delete', + okClass: 'btn-danger', + custom: "This operation is permanent once completed!", + customClass: "alert alert-warning" + }).open(); }; }]); - var scopeName = "OverviewController"; - var OverviewController = Kubernetes.controller(scopeName, ["$scope", "$location", "$http", "$timeout", "$routeParams", "KubernetesModel", "KubernetesState", "KubernetesApiURL", function ($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL) { - $scope.name = scopeName; - $scope.kubernetes = KubernetesState; - $scope.model = KubernetesModel; - Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); - //$scope.subTabConfig = []; - }]); })(Kubernetes || (Kubernetes = {})); /// +/// /// var Kubernetes; (function (Kubernetes) { - Kubernetes.PipelinesController = Kubernetes.controller("PipelinesController", ["$scope", "KubernetesModel", "KubernetesState", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", - function ($scope, KubernetesModel, KubernetesState, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { - $scope.kubernetes = KubernetesState; - $scope.model = KubernetesModel; - Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); - /** - * Lets update the various data to join them together to a pipeline model - */ - function updateData() { - var pipelineSteps = {}; - if ($scope.buildConfigs && $scope.builds && $scope.deploymentConfigs) { - Kubernetes.enrichBuildConfigs($scope.buildConfigs, $scope.builds); - $scope.fetched = true; - angular.forEach($scope.buildConfigs, function (buildConfig) { - var pipelineKey = createPipelineKey(buildConfig); - if (pipelineKey) { - pipelineSteps[pipelineKey] = { - buildConfig: buildConfig, - builds: [], - triggeredBy: null, - triggersSteps: [], - $class: 'pipeline-build' - }; - } - }); - angular.forEach($scope.builds, function (build) { - var pipelineKey = createPipelineKey(build); - if (pipelineKey) { - var pipeline = pipelineSteps[pipelineKey]; - if (!pipeline) { - //console.log("warning no pipeline generated for buildConfig for key " + pipelineKey + " for build " + angular.toJson(build, true)); - console.log("warning no pipeline generated for buildConfig for key " + pipelineKey + " for build " + build.$name); - } - else { - pipeline.builds.push(build); - } - } - }); - // TODO now we need to look at the triggers to figure out which pipelineSteps triggers each pipelineStep - // now lets create an array of all pipelines, starting from the first known step with a list of the steps - var pipelines = []; - angular.forEach(pipelineSteps, function (pipelineStep, key) { - if (!pipelineStep.triggeredBy) { - // we are a root step.... - pipelines.push(pipelineStep); - // now lets add all the steps for this key... - pipelineStep.triggersSteps.push(pipelineStep); - angular.forEach(pipelineSteps, function (step) { - if (step.triggeredBy === key) { - pipelineStep.triggersSteps.push(step); - } - }); - } - }); - angular.forEach($scope.deploymentConfigs, function (deploymentConfig) { - if (!deploymentConfig.kind) { - deploymentConfig.kind = "DeploymentConfig"; + // controller for the status icon cell + Kubernetes.PodStatus = Kubernetes.controller("PodStatus", ["$scope", function ($scope) { + $scope.statusMapping = function (text) { + return Kubernetes.statusTextToCssClass(text); + }; + }]); + Kubernetes._module.controller("Kubernetes.TermController", ["$scope", "TerminalService", function ($scope, TerminalService) { + $scope.canConnectTo = function (container) { + if (container.securityContext && container.securityContext.privileged) { + return false; + } + return true; + }; + $scope.openTerminal = function (selfLink, containerName) { + var id = TerminalService.newTerminal(selfLink, containerName); + Kubernetes.log.debug("Created terminal, id: ", id); + }; + }]); + // controller that deals with the labels per pod + Kubernetes.Labels = Kubernetes.controller("Labels", ["$scope", "$location", function ($scope, $location) { + $scope.labels = []; + var labelKeyWeights = { + "region": 1, + "system": 2, + "type": 3, + "batch": 4, + "version": 5 + }; + $scope.$watch('entity', function (newValue, oldValue) { + if (newValue) { + // log.debug("labels: ", newValue); + // massage the labels a bit + $scope.labels = []; + angular.forEach(Core.pathGet($scope.entity, ["metadata", "labels"]), function (value, key) { + if (key === 'fabric8' || key === 'style' || key === 'status' || (key === 'isTarget' && value === 'false') || key === 'isExtract' || key === 'name') { + // TODO not sure what this is for, the container type? + return; } - angular.forEach(deploymentConfig.triggers, function (trigger) { - var type = trigger.type; - var imageChangeParams = trigger.imageChangeParams; - if (imageChangeParams && type === "ImageChange") { - var from = imageChangeParams.from; - if (from) { - var name = from.name; - if (from.kind === "ImageRepository") { - var tag = imageChangeParams.tag || "latest"; - if (name) { - // now lets find a pipeline step which fires from this - angular.forEach(pipelineSteps, function (pipelineStep, key) { - var to = Core.pathGet(pipelineStep, ["buildConfig", "parameters", "output", "to"]); - if (to && (to.kind === "ImageRepository" || to.kind === "ImageStream")) { - var toName = to.name; - if (toName === name) { - var selector = Core.pathGet(deploymentConfig, ["template", "controllerTemplate", "selector"]); - var pods = []; - var $podCounters = selector ? Kubernetes.createPodCounters(selector, KubernetesModel.podsForNamespace(), pods) : null; - var deployPipelineStep = { - buildConfig: deploymentConfig, - $class: 'pipeline-deploy', - $podCounters: $podCounters, - $pods: pods - }; - pipelineStep.triggersSteps.push(deployPipelineStep); - } - } - }); - } - } - } - } + $scope.labels.push({ + key: key, + title: value }); }); - $scope.pipelines = pipelines; - } - } - /** - * Lets create a unique key for build / config we can use to do linking of builds / configs / triggers - */ - function createPipelineKey(buildConfig) { - return Core.pathGet(buildConfig, ["parameters", "source", "git", "uri"]); - } - $scope.$keepPolling = function () { return Kubernetes.keepPollingModel; }; - $scope.fetch = PollHelpers.setupPolling($scope, function (next) { - var ready = 0; - var numServices = 3; - function maybeNext() { - if (++ready >= numServices) { - next(); - } - } - var url = Kubernetes.buildsRestURL(); - $http.get(url). - success(function (data, status, headers, config) { - if (data) { - $scope.builds = Kubernetes.enrichBuilds(data.items); - updateData(); - } - maybeNext(); - }). - error(function (data, status, headers, config) { - Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); - maybeNext(); - }); - url = Kubernetes.buildConfigsRestURL(); - $http.get(url). - success(function (data, status, headers, config) { - if (data) { - $scope.buildConfigs = data.items; - updateData(); - } - maybeNext(); - }). - error(function (data, status, headers, config) { - Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); - maybeNext(); - }); - url = Kubernetes.deploymentConfigsRestURL(); - $http.get(url). - success(function (data, status, headers, config) { - if (data) { - $scope.deploymentConfigs = data.items; - updateData(); - } - maybeNext(); - }). - error(function (data, status, headers, config) { - Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); - maybeNext(); - }); + // lets sort by key but lets make sure that we weight certain labels so they are first + $scope.labels = $scope.labels.sort(function (a, b) { + function getWeight(key) { + return labelKeyWeights[key] || 0; + } + var n1 = a["key"]; + var n2 = b["key"]; + var w1 = getWeight(n1); + var w2 = getWeight(n2); + var diff = w1 - w2; + if (diff < 0) { + return -1; + } + else if (diff > 0) { + return 1; + } + if (n1 && n2) { + if (n1 > n2) { + return 1; + } + else if (n1 < n2) { + return -1; + } + else { + return 0; + } + } + else { + if (n1 === n2) { + return 0; + } + else if (n1) { + return 1; + } + else { + return -1; + } + } + }); + } }); - $scope.fetch(); + $scope.handleClick = function (entity, labelType, value) { + // log.debug("handleClick, entity: ", entity, " key: ", labelType, " value: ", value); + $scope.$emit('labelFilterUpdate', value.title); + }; + $scope.labelClass = Kubernetes.containerLabelClass; + }]); + //服务状态过滤 + Kubernetes.Status = Kubernetes.controller('Status', ["$scope", "$http", "$interval", "$location", "KubernetesApiURL", function ($scope, $http, $interval, $location, KubernetesApiURL) { + // $scope.$watch('entity', (newValue, oldValue) => { + // if(newValue) + // console.log(newValue); + // },true); }]); })(Kubernetes || (Kubernetes = {})); @@ -15544,795 +15147,1672 @@ var Kubernetes; /// var Kubernetes; (function (Kubernetes) { - Kubernetes.PodController = Kubernetes.controller("PodController", ["$scope", "KubernetesModel", "KubernetesState", "ServiceRegistry", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "$window", "KubernetesApiURL", - function ($scope, KubernetesModel, KubernetesState, ServiceRegistry, $templateCache, $location, $routeParams, $http, $timeout, $window, KubernetesApiURL) { - $scope.kubernetes = KubernetesState; - $scope.model = KubernetesModel; - $scope.rawModel = null; - $scope.itemConfig = { - properties: { - 'containers/image$': { - template: $templateCache.get('imageTemplate.html') - }, - 'status/phase': { - template: $templateCache.get('statusTemplate.html') - }, - '\\/Env\\/': { - template: $templateCache.get('envItemTemplate.html') - }, - '^\\/labels$': { - template: $templateCache.get('labelTemplate.html') - }, - '\\/env\\/key$': { - hidden: true - } + Kubernetes._module.directive("hawtioTabs", ['HawtioSubTabs', function (HawtioSubTabs) { + return { + link: function (scope, element, attrs) { + HawtioSubTabs.apply(scope.$eval('subTabConfig')); } }; + }]); +})(Kubernetes || (Kubernetes = {})); + +/// +var Kubernetes; +(function (Kubernetes) { + Kubernetes.TemplateController = Kubernetes.controller("TemplateController", [ + "$scope", "$location", "$http", "$timeout", "$routeParams", "marked", "$templateCache", "$modal", "KubernetesModel", "KubernetesState", "KubernetesApiURL", + function ($scope, $location, $http, $timeout, $routeParams, marked, $templateCache, $modal, KubernetesModel, KubernetesState, KubernetesApiURL) { + var model = $scope.model = KubernetesModel; + $scope.filterText = $location.search()["q"]; + $scope.targetNamespace = $routeParams.targetNamespace; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); - $scope.$on('kubernetesModelUpdated', function () { - updateData(); + $scope.$watchCollection('model.namespaces', function () { + if (!$scope.targetNamespace) { + $scope.targetNamespace = model.currentNamespace(); + } }); - $scope.$on('$routeUpdate', function ($event) { - updateData(); + var returnTo = new URI($location.search()['returnTo'] || '/kubernetes/apps'); + function goBack() { + $location.path(returnTo.path()).search(returnTo.query(true)); + } + function getAnnotations(obj) { + return Core.pathGet(obj, ['metadata', 'annotations']); + } + function getValueFor(obj, key) { + var annotations = getAnnotations(obj); + if (!annotations) { + return ""; + } + var name = Kubernetes.getName(obj); + if (name) { + var fullKey = "fabric8." + name + "/" + key; + var answer = annotations[fullKey]; + if (answer) { + return answer; + } + } + var key = _.find(_.keys(annotations), function (k) { return _.endsWith(k, key); }); + if (key) { + return annotations[key]; + } + else { + return ""; + } + } + $scope.cancel = function () { + if ($scope.formConfig) { + delete $scope.formConfig; + delete $scope.entity; + $scope.objects = undefined; + return; + } + goBack(); + }; + /* + $scope.$watch('model.templates.length', (newValue) => { + if (newValue === 0) { + goBack(); + } }); - $scope.$watch('model.pods', function (newValue, oldValue) { - updateData(); - }, true); - $scope.flipRaw = function () { - $scope.rawMode = !$scope.rawMode; - Core.$apply($scope); + */ + $scope.filterTemplates = function (template) { + if (Core.isBlank($scope.filterText)) { + return true; + } + return _.contains(angular.toJson(template), $scope.filterText.toLowerCase()); }; - $scope.openLogs = function () { - var pods = [$scope.item]; - Kubernetes.openLogsForPods(ServiceRegistry, $window, KubernetesModel.currentNamespace(), pods); + $scope.openFullDescription = function (template) { + var text = marked(getValueFor(template, 'description') || 'No description'); + var modal = $modal.open({ + templateUrl: UrlHelpers.join(Kubernetes.templatePath, 'templateDescription.html'), + controller: ['$scope', '$modalInstance', function ($scope, $modalInstance) { + $scope.text = text, + $scope.ok = function () { + modal.close(); + }; + }] + }); }; - updateData(); - function updateData() { - $scope.id = $routeParams["id"]; - $scope.item = $scope.model.getPod(KubernetesState.selectedNamespace, $scope.id); - if ($scope.item) { - $scope.rawModel = Kubernetes.toRawYaml($scope.item); + $scope.getDescription = function (template) { + var answer = $(marked(getValueFor(template, 'description') || 'No description')); + var textDefault = answer.html(); + var maxLength = 200; + if (textDefault.length > maxLength) { + var truncated = $.trim(textDefault).substring(0, maxLength).split(' ').slice(0, -1).join(' '); + answer.html(truncated + '...'); + answer.append($templateCache.get('truncatedDescriptionTag.html')); + } + return answer.html(); + }; + $scope.getIconUrl = function (template) { + return getValueFor(template, 'iconUrl') || Kubernetes.defaultIconUrl; + }; + $scope.deployTemplate = function (template) { + Kubernetes.log.debug("Template parameters: ", template.parameters); + Kubernetes.log.debug("Template objects: ", template.objects); + Kubernetes.log.debug("Template annotations: ", template.metadata.annotations); + var templateAnnotations = template.metadata.annotations; + if (templateAnnotations) { + _.forEach(template.objects, function (object) { + var annotations = object.metadata.annotations || {}; + var name = Kubernetes.getName(object); + var matches = _.filter(_.keys(templateAnnotations), function (key) { return key.match('.' + name + '/'); }); + matches.forEach(function (match) { + if (!(match in annotations)) { + annotations[match] = templateAnnotations[match]; + } + }); + object.metadata.annotations = annotations; + }); + } + var routeServiceName = undefined; + var service = _.find(template.objects, function (obj) { + if (Kubernetes.getKind(obj) === "Service") { + var ports = Kubernetes.getPorts(obj); + if (ports && ports.length === 1) { + return true; + } + } + else { + return false; + } + }); + if (service) { + routeServiceName = Kubernetes.getName(service); + } + Kubernetes.log.debug("Service: ", service); + if ((!routeServiceName || !Kubernetes.isOpenShift) && (!template.parameters || template.parameters.length === 0)) { + Kubernetes.log.debug("No parameters required, deploying objects"); + applyObjects(template.objects); + return; + } + var formConfig = { + style: HawtioForms.FormStyle.STANDARD, + hideLegend: true, + properties: {} + }; + var params = template.parameters; + _.forEach(params, function (param) { + var property = {}; + property.label = _.startCase(param.name); + property.description = param.description; + property.default = param.value; + // TODO, do parameters support types? + property.type = 'string'; + formConfig.properties[param.name] = property; + }); + if (routeServiceName && Kubernetes.isOpenShift) { + formConfig.properties.createRoute = { + type: 'boolean', + default: true, + label: "Create Route" + }; + /* + formConfig.properties.routeName = { + type: 'string', + label: 'Route Name', + default: routeServiceName, + 'control-group-attributes': { + 'ng-show': 'entity.createRoute' + } + }; + */ + formConfig.properties.routeServiceName = { + type: 'hidden', + default: routeServiceName + }; + var namespace = Kubernetes.currentKubernetesNamespace(); + // TODO store this in localStorage! + var domain = "vagrant.f8"; + var defaultRouteHostSuffix = '.' + (namespace === "default" ? "" : namespace + ".") + domain; + formConfig.properties.routeHostname = { + type: 'string', + default: defaultRouteHostSuffix, + label: "Route host name suffix", + 'control-group-attributes': { + 'ng-show': 'entity.createRoute' + } + }; } - Core.$apply($scope); + $scope.entity = {}; + $scope.formConfig = formConfig; + $scope.objects = template.objects; + Kubernetes.log.debug("Form config: ", formConfig); + }; + function substitute(str, data) { + return str.replace(/\${\w*}/g, function (match) { + var key = match.replace(/\${/, '').replace(/}/, '').trim(); + return data[key] || match; + }); } - }]); -})(Kubernetes || (Kubernetes = {})); - -/// -/// -/// -var Kubernetes; -(function (Kubernetes) { - Kubernetes.PodEditController = Kubernetes.controller("PodEditController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "SchemaRegistry", - function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, schemas) { - $scope.kubernetes = KubernetesState; - $scope.model = KubernetesModel; - $scope.id = $routeParams["id"]; - $scope.schema = KubernetesSchema; - $scope.config = schemas.cloneSchema("io.fabric8.kubernetes.api.model.Pod"); - //$scope.config = KubernetesSchema.definitions.kubernetes_v1beta2_Pod; - Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); - $scope.$on('$routeUpdate', function ($event) { - updateData(); - }); - updateData(); - function updateData() { - if ($scope.id) { - $scope.entity = $scope.model.getPod(KubernetesState.selectedNamespace, $scope.id); - Core.$apply($scope); - $scope.fetched = true; + ; + $scope.substituteAndDeployTemplate = function () { + var objects = $scope.objects; + var objectsText = angular.toJson(objects, true); + // pull these out of the entity object so they're not used in substitutions + var createRoute = $scope.entity.createRoute; + var routeHostnameSuffix = $scope.entity.routeHostname || ""; + var routeName = $scope.entity.routeName; + var routeServiceName = $scope.entity.routeServiceName; + delete $scope.entity.createRoute; + delete $scope.entity.routeHostname; + delete $scope.entity.routeName; + delete $scope.entity.routeServiceName; + objectsText = substitute(objectsText, $scope.entity); + objects = angular.fromJson(objectsText); + if (createRoute) { + var routes = []; + angular.forEach(objects, function (object) { + var kind = object.kind; + var name = Kubernetes.getName(object); + if (name && "Service" === kind) { + var routeHostname = name + routeHostnameSuffix; + var route = { + kind: "Route", + apiVersion: Kubernetes.defaultOSApiVersion, + metadata: { + name: name, + }, + spec: { + host: routeHostname, + to: { + kind: "Service", + name: name + } + } + }; + routes.push(route); + } + }); + objects = objects.concat(routes); + } + if ($scope.targetNamespace !== model.currentNamespace()) { + $scope.$on('WatcherNamespaceChanged', function () { + Kubernetes.log.debug("Namespace changed"); + setTimeout(function () { + applyObjects(objects); + Core.$apply($scope); + }, 500); + }); + Core.notification('info', "Switching to namespace " + $scope.targetNamespace + " and deploying template"); + model.kubernetes.selectedNamespace = $scope.targetNamespace; } else { - $scope.fetched = true; + applyObjects(objects); } + }; + function applyObjects(objects) { + var projectClient = Kubernetes.createKubernetesClient("projects"); + _.forEach(objects, function (object) { + Kubernetes.log.debug("Object: ", object); + var kind = Kubernetes.getKind(object); + var name = Kubernetes.getName(object); + var ns = Kubernetes.getNamespace(object); + if (kind && name) { + if (ns && ns !== Kubernetes.currentKubernetesNamespace()) { + var project = { + apiVersion: Kubernetes.defaultApiVersion, + kind: "Project", + metadata: { + name: ns, + labels: {} + } + }; + projectClient.put(project, function (data) { + Kubernetes.log.info("Created namespace: " + ns); + }, function (err) { + Kubernetes.log.warn("Failed to create namespace: " + ns + ": " + angular.toJson(err)); + }); + } + var pluralKind = kind.toLowerCase() + "s"; + var kubeClient = Kubernetes.createKubernetesClient(pluralKind, ns); + kubeClient.put(object, function (data) { + Kubernetes.log.info("updated " + kind + " name: " + name + (ns ? " ns: " + ns : "")); + }, function (err) { + Kubernetes.log.warn("Failed to update " + kind + " name: " + name + (ns ? " ns: " + ns : "") + " error: " + angular.toJson(err)); + }); + } + }); + goBack(); } - $scope.save = function () { - console.log($scope.entity); + $scope.deleteTemplate = function (template) { + UI.multiItemConfirmActionDialog({ + collection: [template], + index: 'metadata.name', + onClose: function (result) { + if (result) { + KubernetesModel['templatesResource'].delete({ + id: template.metadata.name + }, undefined, function () { + KubernetesModel['templatesResource'].query(function (data) { + KubernetesModel.templates = data.items; + }); + }, function (error) { + Kubernetes.log.debug("Error deleting template: ", error); + }); + } + }, + title: 'Delete Template?', + action: 'The following template will be deleted:', + okText: 'Delete', + okClass: 'btn-danger', + custom: "This operation is permanent once completed!", + customClass: "alert alert-warning" + }).open(); }; }]); })(Kubernetes || (Kubernetes = {})); -/// -var Kubernetes; -(function (Kubernetes) { - var log = Logger.get('kubernetes-watcher'); - var k8sTypes = KubernetesAPI.NamespacedTypes.k8sTypes; - var osTypes = KubernetesAPI.NamespacedTypes.osTypes; - var self = {}; - var updateFunction = function () { - log.debug("Objects changed, firing listeners"); - var objects = {}; - _.forEach(self.getTypes(), function (type) { - objects[type] = self.getObjects(type); - }); - _.forEach(self.listeners, function (listener) { - listener(objects); +/// +var Developer; +(function (Developer) { + function enrichWorkspaces(projects) { + angular.forEach(projects, function (project) { + enrichWorkspace(project); }); - }; - var debouncedUpdate = _.debounce(updateFunction, 75, { trailing: true }); - var namespaceWatch = { - selected: undefined, - watch: undefined, - objects: [], - objectMap: {}, - watches: {} - }; - hawtioPluginLoader.registerPreBootstrapTask({ - name: 'KubernetesWatcherInit', - depends: ['KubernetesApiDiscovery'], - task: function (next) { - var booted = false; - if (Kubernetes.isOpenShift) { - log.info("Backend is an Openshift instance"); - } - else { - log.info("Backend is a vanilla Kubernetes instance"); + return projects; + } + Developer.enrichWorkspaces = enrichWorkspaces; + function enrichWorkspace(build) { + if (build) { + var name = Kubernetes.getName(build); + build.$name = name; + build.$sortOrder = 0 - build.number; + var nameArray = name.split("-"); + var nameArrayLength = nameArray.length; + build.$shortName = (nameArrayLength > 4) ? nameArray.slice(0, nameArrayLength - 4).join("-") : name.substring(0, 30); + var labels = Kubernetes.getLabels(build); + build.$creationDate = asDate(Kubernetes.getCreationTimestamp(build)); + build.$labelsText = Kubernetes.labelsToString(labels); + if (name) { + build.$projectsLink = UrlHelpers.join("workspaces", name); + build.$runtimeLink = UrlHelpers.join("kubernetes/namespace/", name, "/apps"); + build.$viewLink = build.$projectsLink; } - namespaceWatch.watch = KubernetesAPI.watch({ - kind: KubernetesAPI.WatchTypes.NAMESPACES, - success: function (objects) { - namespaceWatch.objects = objects; - if (!booted) { - booted = true; - self.setNamespace(localStorage[Kubernetes.Constants.NAMESPACE_STORAGE_KEY] || Kubernetes.defaultNamespace); - next(); - } - log.debug("Got namespaces: ", namespaceWatch.objects); - }, error: function (error) { - log.warn("Error fetching namespaces: ", error); - // TODO is this necessary? - //HawtioOAuth.doLogout(); - if (!booted) { - booted = true; - next(); - } + } + return build; + } + Developer.enrichWorkspace = enrichWorkspace; + function asDate(value) { + return value ? new Date(value) : null; + } + Developer.asDate = asDate; + function enrichJenkinsJobs(jobsData, projectId, jobName) { + if (jobsData) { + angular.forEach(jobsData.jobs, function (job) { + enrichJenkinsJob(job, projectId, jobName); + }); + } + return jobsData; + } + Developer.enrichJenkinsJobs = enrichJenkinsJobs; + function enrichJenkinsJob(job, projectId, jobName) { + if (job) { + jobName = jobName || job.name || projectId; + job.$jobId = jobName; + job.$project = projectId || jobName; + var lastBuild = job.lastBuild; + var lastBuildResult = lastBuild ? lastBuild.result : "NOT_STARTED"; + var $iconClass = createBuildStatusIconClass(lastBuildResult); + job.$lastBuildNumber = enrichJenkinsBuild(job, lastBuild); + job.$lastSuccessfulBuildNumber = enrichJenkinsBuild(job, job.lastSuccessfulBuild); + job.$lastFailedlBuildNumber = enrichJenkinsBuild(job, job.lastFailedlBuild); + if (lastBuild) { + job.$duration = lastBuild.duration; + job.$timestamp = asDate(lastBuild.timestamp); + } + var jobUrl = (job || {}).url; + if (!jobUrl || !jobUrl.startsWith("http")) { + var jenkinsUrl = jenkinsLink(); + if (jenkinsUrl) { + jobUrl = UrlHelpers.join(jenkinsUrl, "job", jobName); } + } + if (jobUrl) { + job.$jobLink = jobUrl; + var workspaceName = Kubernetes.currentKubernetesNamespace(); + job.$pipelinesLink = UrlHelpers.join("/workspaces", workspaceName, "projects", job.$project, "jenkinsJob", jobName, "pipelines"); + job.$buildsLink = UrlHelpers.join("/workspaces", workspaceName, "projects", job.$project, "jenkinsJob", jobName); + } + job.$iconClass = $iconClass; + angular.forEach(job.builds, function (build) { + enrichJenkinsBuild(job, build); }); } - }); - hawtioPluginLoader.registerPreBootstrapTask({ - name: 'KubernetesApiDiscovery', - depends: ['hawtio-oauth'], - task: function (next) { - Kubernetes.isOpenShift = false; - var userProfile = HawtioOAuth.getUserProfile(); - log.debug("User profile: ", userProfile); - if (userProfile && userProfile.provider === "hawtio-google-oauth") { - log.debug("Possibly running on GCE"); - // api master is on GCE - $.ajax({ - url: UrlHelpers.join(Kubernetes.masterApiUrl(), 'api', 'v1', 'namespaces'), - complete: function (jqXHR, textStatus) { - if (textStatus === "success") { - log.debug("jqXHR: ", jqXHR); - userProfile.oldToken = userProfile.token; - userProfile.token = undefined; - $.ajaxSetup({ - beforeSend: function (request) { - } - }); - } - next(); - }, - beforeSend: function (request) { - } - }); + return job; + } + Developer.enrichJenkinsJob = enrichJenkinsJob; + function createBuildStatusIconClass(result) { + var $iconClass = "fa fa-spinner fa-spin"; + if (result) { + if (result === "FAILURE" || result === "FAILED") { + // TODO not available yet + $iconClass = "fa fa-exclamation-circle red"; } - else { - log.debug("Not running on GCE"); - // double-check if we're on vanilla k8s or openshift - var rootUri = new URI(Kubernetes.masterApiUrl()).path("/oapi").query("").toString(); - log.debug("Checking for an openshift backend"); - HawtioOAuth.authenticatedHttpRequest({ - url: rootUri, - success: function (data) { - if (data) { - Kubernetes.isOpenShift = true; - } - next(); - }, - error: function (jqXHR, textStatus, errorThrown) { - var error = KubernetesAPI.getErrorObject(jqXHR); - if (!error) { - log.debug("Failed to find root paths: ", textStatus, ": ", errorThrown); - } - else { - log.debug("Failed to find root paths: ", error); - } - Kubernetes.isOpenShift = false; - next(); - } - }); + else if (result === "ABORTED" || result === "INTERUPTED") { + $iconClass = "fa fa-circle grey"; + } + else if (result === "SUCCESS" || result === "COMPLETE" || result === "COMPLETED") { + $iconClass = "fa fa-check-circle green"; + } + else if (result === "NOT_STARTED") { + $iconClass = "fa fa-circle-thin grey"; } } - }); - var customUrlHandlers = {}; - self.setNamespace = function (namespace) { - if (namespace === namespaceWatch.selected) { - return; + return $iconClass; + } + Developer.createBuildStatusIconClass = createBuildStatusIconClass; + function createBuildStatusBackgroundClass(result) { + var $iconClass = "build-pending"; + if (result) { + if (result === "FAILURE" || result === "FAILED") { + $iconClass = "build-fail"; + } + else if (result === "ABORTED" || result === "INTERUPTED") { + $iconClass = "build-aborted"; + } + else if (result === "SUCCESS" || result === "COMPLETE" || result === "COMPLETED") { + $iconClass = "build-success"; + } + else if (result === "NOT_STARTED") { + $iconClass = "build-not-started"; + } } - if (namespaceWatch.selected) { - log.debug("Stopping current watches"); - _.forOwn(namespaceWatch.watches, function (watch, key) { - if (!KubernetesAPI.namespaced(key)) { - return; + return $iconClass; + } + Developer.createBuildStatusBackgroundClass = createBuildStatusBackgroundClass; + function enrichJenkinsBuild(job, build) { + var number = null; + if (build) { + build.$duration = build.duration; + build.$timestamp = asDate(build.timestamp); + var projectId = job.$project; + var jobName = job.$jobId || projectId; + var buildId = build.id; + number = build.number; + var workspaceName = Kubernetes.currentKubernetesNamespace(); + var $iconClass = createBuildStatusIconClass(build.result); + var jobUrl = (job || {}).url; + if (!jobUrl || !jobUrl.startsWith("http")) { + var jenkinsUrl = jenkinsLink(); + if (jenkinsUrl) { + jobUrl = UrlHelpers.join(jenkinsUrl, "job", jobName); } - log.debug("Disconnecting watch: ", key); - watch.disconnect(); - }); - _.forEach(_.keys(namespaceWatch.watches), function (key) { - if (!KubernetesAPI.namespaced(key)) { - return; + } + if (jobUrl) { + build.$jobLink = jobUrl; + if (buildId) { + //build.$logsLink = UrlHelpers.join(build.$buildLink, "console"); + build.$logsLink = UrlHelpers.join("/workspaces", workspaceName, "projects", projectId, "jenkinsJob", jobName, "log", buildId); + build.$pipelineLink = UrlHelpers.join("/workspaces", workspaceName, "projects", projectId, "jenkinsJob", jobName, "pipeline", buildId); + build.$buildsLink = UrlHelpers.join("/workspaces", workspaceName, "projects", projectId, "jenkinsJob", jobName); + //build.$buildLink = UrlHelpers.join(jobUrl, build.id); + build.$buildLink = build.$logsLink; } - log.debug("Deleting kind: ", key); - delete namespaceWatch.watches[key]; + } + build.$iconClass = $iconClass; + } + return number; + } + Developer.enrichJenkinsBuild = enrichJenkinsBuild; + function jenkinsLink() { + var ServiceRegistry = Kubernetes.inject("ServiceRegistry"); + if (ServiceRegistry) { + return ServiceRegistry.serviceLink(Developer.jenkinsServiceName); + } + return null; + } + Developer.jenkinsLink = jenkinsLink; + function forgeReadyLink() { + var ServiceRegistry = Kubernetes.inject("ServiceRegistry"); + if (ServiceRegistry) { + return ServiceRegistry.serviceReadyLink(Kubernetes.fabric8ForgeServiceName); + } + return null; + } + Developer.forgeReadyLink = forgeReadyLink; + function enrichJenkinsPipelineJob(job, projectId, jobId) { + if (job) { + job.$project = projectId; + job.$jobId = jobId; + angular.forEach(job.builds, function (build) { + enrichJenkinsStages(build, projectId, jobId); }); } - namespaceWatch.selected = namespace; - if (namespace) { - _.forEach(self.getTypes(), function (kind) { - if (kind === KubernetesAPI.WatchTypes.NAMESPACES) { - return; + } + Developer.enrichJenkinsPipelineJob = enrichJenkinsPipelineJob; + function enrichJenkinsStages(build, projectId, jobName) { + if (build) { + build.$project = projectId; + build.$jobId = jobName; + build.$timestamp = asDate(build.timeInMillis); + build.$iconClass = createBuildStatusIconClass(build.result || "NOT_STARTED"); + var workspaceName = Kubernetes.currentKubernetesNamespace(); + var parameters = build.parameters; + var $parameterCount = 0; + var $parameterText = "No parameters"; + if (parameters) { + $parameterCount = _.keys(parameters).length || 0; + $parameterText = Kubernetes.labelsToString(parameters, " "); + } + build.$parameterCount = $parameterCount; + build.$parameterText = $parameterText; + var jenkinsUrl = jenkinsLink(); + if (jenkinsUrl) { + var url = build.url; + if (url) { } - if (!namespaceWatch.watches[kind]) { - log.debug("Creating watch for kind: ", kind); - var config = { - kind: kind, - namespace: KubernetesAPI.namespaced(kind) ? namespace : undefined, - success: function (objects) { - watch.objects = objects; - debouncedUpdate(); - } - }; - if (kind in customUrlHandlers) { - config.urlFunction = customUrlHandlers[kind]; + } + build.$logLink = UrlHelpers.join("/workspaces", workspaceName, "projects", projectId, "jenkinsJob", jobName, "log", build.id); + build.$viewLink = build.$logLink; + angular.forEach(build.stages, function (stage) { + enrichJenkinsStage(stage, build); + }); + } + return build; + } + Developer.enrichJenkinsStages = enrichJenkinsStages; + function enrichJenkinsStage(stage, build) { + if (build === void 0) { build = null; } + if (stage) { + if (build) { + stage.$buildId = build.id; + stage.$project = build.$project; + } + var projectId = build.$project; + var jobName = build.$jobId || projectId; + var buildId = build.id; + var workspaceName = Kubernetes.currentKubernetesNamespace(); + stage.$backgroundClass = createBuildStatusBackgroundClass(stage.status); + stage.$iconClass = createBuildStatusIconClass(stage.status); + stage.$startTime = asDate(stage.startTime); + if (!stage.duration) { + stage.duration = 0; + } + var jenkinsUrl = jenkinsLink(); + if (jenkinsUrl) { + var url = stage.url; + if (url) { + stage.$viewLink = UrlHelpers.join(jenkinsUrl, url); + stage.$logLink = UrlHelpers.join(stage.$viewLink, "log"); + if (projectId && buildId) { + stage.$logLink = UrlHelpers.join("/workspaces", workspaceName, "projects", projectId, "jenkinsJob", jobName, "log", buildId); } - var watch = KubernetesAPI.watch(config); - watch.config = config; - namespaceWatch.watches[kind] = watch; } - }); - } - }; - self.hasWebSocket = true; - self.getNamespace = function () { return namespaceWatch.selected; }; - self.registerCustomUrlFunction = function (kind, url) { - customUrlHandlers[kind] = url; - if (kind in namespaceWatch.watches) { - var watch = namespaceWatch.watches[kind]; - var config = watch.config; - config.urlFunction = url; - watch.disconnect(); - delete namespaceWatch.watches[kind]; - config.success = function (objects) { - watch.objects = objects; - debouncedUpdate(); - }; - watch = KubernetesAPI.watch(config); - watch.config = config; - namespaceWatch.watches[kind] = watch; - } - }; - self.getTypes = function () { - var filter = function (kind) { - // filter out stuff we don't care about yet - switch (kind) { - case KubernetesAPI.WatchTypes.OAUTH_CLIENTS: - case KubernetesAPI.WatchTypes.IMAGE_STREAMS: - case KubernetesAPI.WatchTypes.POLICIES: - case KubernetesAPI.WatchTypes.ROLES: - case KubernetesAPI.WatchTypes.ROLE_BINDINGS: - case KubernetesAPI.WatchTypes.POLICY_BINDINGS: - case KubernetesAPI.WatchTypes.PERSISTENT_VOLUME_CLAIMS: - case KubernetesAPI.WatchTypes.PERSISTENT_VOLUMES: - case KubernetesAPI.WatchTypes.ENDPOINTS: - case KubernetesAPI.WatchTypes.RESOURCE_QUOTAS: - case KubernetesAPI.WatchTypes.SERVICE_ACCOUNTS: - return false; - default: - return true; } - }; - var answer = k8sTypes.concat([Kubernetes.WatchTypes.NAMESPACES]); - if (Kubernetes.isOpenShift) { - answer = answer.concat(osTypes); } - else { - answer = answer.concat(KubernetesAPI.WatchTypes.TEMPLATES); - answer = answer.concat(KubernetesAPI.WatchTypes.BUILD_CONFIGS); + } + Developer.enrichJenkinsStage = enrichJenkinsStage; +})(Developer || (Developer = {})); + +/// +var Developer; +(function (Developer) { + Developer.context = '/workspaces'; + Developer.hash = '#' + Developer.context; + Developer.pluginName = 'Developer'; + Developer.pluginPath = 'plugins/developer/'; + Developer.templatePath = Developer.pluginPath + 'html/'; + Developer.log = Logger.get(Developer.pluginName); + Developer.jenkinsServiceName = "jenkins"; + Developer.jenkinsServiceNameAndPort = Developer.jenkinsServiceName + ":http"; + Developer.jenkinsHttpConfig = { + headers: { + Accept: "application/json, text/x-json, text/plain" } - return _.filter(answer, filter); }; - self.getObjects = function (kind) { - if (kind === Kubernetes.WatchTypes.NAMESPACES) { - return namespaceWatch.objects; - } - if (kind in namespaceWatch.watches) { - return namespaceWatch.watches[kind].objects; + /** + * Returns true if the value hasn't changed from the last cached JSON version of this object + */ + function hasObjectChanged(value, state) { + var json = angular.toJson(value || ""); + var oldJson = state.json; + state.json = json; + return !oldJson || json !== oldJson; + } + Developer.hasObjectChanged = hasObjectChanged; + function projectForScope($scope) { + if ($scope) { + return $scope.buildConfig || $scope.entity || ($scope.model || {}).project; } - else { - return undefined; + return null; + } + Developer.projectForScope = projectForScope; + /** + * Lets load the project versions for the given namespace + */ + function loadProjectVersions($scope, $element, project, env, ns, answer, caches) { + var projectAnnotation = "project"; + var versionAnnotation = "version"; + var projectNamespace = project.$namespace; + var projectName = project.$name; + var cache = caches[ns]; + if (!cache) { + cache = {}; + caches[ns] = cache; } - }; - self.listeners = []; - // listener gets notified after a bunch of changes have occurred - self.registerListener = function (fn) { - self.listeners.push(fn); - }; - var projectsHandle = undefined; - // kick off the project watcher a bit sooner also - hawtioPluginLoader.registerPreBootstrapTask({ - name: 'ProjectsWatcher', - depends: ['KubernetesApiDiscovery'], - task: function (next) { - if (Kubernetes.isOpenShift) { - projectsHandle = KubernetesAPI.watch({ - kind: KubernetesAPI.WatchTypes.PROJECTS, - namespace: undefined, - success: function (objects) { - if (self.listeners && self.listeners.length) { - log.debug("got projects: ", objects); - _.forEach(self.listeners, function (listener) { - listener({ - projects: objects + var status = { + rcs: [], + pods: [], + routes: [], + services: [] + }; + var imageStreamTags = []; + function updateModel() { + var projectInfos = {}; + var model = $scope.model || {}; + angular.forEach(status.rcs, function (item) { + var metadata = item.metadata || {}; + var name = metadata.name; + var labels = metadata.labels || {}; + var annotations = metadata.annotations || {}; + var spec = item.spec || {}; + var selector = spec.selector; + var project = labels[projectAnnotation]; + var version = labels[versionAnnotation]; + // lets try the S2I defaults... + if (!project) { + project = labels["app"]; + } + if (!version) { + version = annotations["openshift.io/deployment-config.latest-version"]; + } + if (project && version && project === projectName) { + var projects = projectInfos[project]; + if (!projects) { + projects = { + project: project, + versions: {} + }; + projectInfos[project] = projects; + } + var versionInfo = projects.versions[version]; + if (!versionInfo) { + versionInfo = { + replicationControllers: {} + }; + projects.versions[version] = versionInfo; + } + if (name) { + versionInfo.replicationControllers[name] = item; + item.$name = name; + if (projectNamespace && projectName) { + item.$viewLink = UrlHelpers.join("/workspaces/", projectNamespace, "projects", projectName, "namespace", ns, "replicationControllers", name); + } + else { + Developer.log.warn("Missing project data! " + projectNamespace + " name " + projectName); + } + item.$services = []; + var rcLink = null; + status.services.forEach(function (service) { + var repSelector = Kubernetes.getSelector(item); + var serviceSelector = Kubernetes.getSelector(service); + if (serviceSelector && repSelector && + Kubernetes.selectorMatches(serviceSelector, repSelector) && + Kubernetes.getNamespace(service) === Kubernetes.getNamespace(item)) { + status.routes.forEach(function (route) { + var serviceName = Kubernetes.getName(service); + if (serviceName === Kubernetes.getName(route)) { + service["$route"] = route; + service["$host"] = Core.pathGet(route, ["spec", "host"]); + item.$services.push(service); + if (!rcLink) { + var url = Kubernetes.serviceLinkUrl(service, true); + if (url) { + // TODO find icon etc? + rcLink = { + name: serviceName, + href: url + }; + } + } + } + }); + } + }); + item["$serviceLink"] = rcLink; + } + item.$buildId = annotations["fabric8.io/build-id"] || item.$buildId; + item.$buildUrl = annotations["fabric8.io/build-url"] || item.$buildUrl; + item.$gitCommit = annotations["fabric8.io/git-commit"] || item.$gitCommit; + item.$gitUrl = annotations["fabric8.io/git-url"] || item.$gitUrl; + item.$gitBranch = annotations["fabric8.io/git-branch"] || item.$gitBranch; + if (!item.$gitCommit) { + var image = getImage(item); + if (image) { + if (!$scope.$isWatchImages) { + $scope.$isWatchImages = true; + Kubernetes.watch($scope, $element, "images", null, function (data) { + imageStreamTags = data; + checkForMissingMetadata(); + }); + } + else { + checkForMissingMetadata(); + } + } + function getImage(item) { + var image = ""; + // lets see if we can find the commit id from a S2I image name + // TODO needs this issue fixed to find it via an OpenShift annotation: + // https://github.com/openshift/origin/issues/6241 + var containers = Core.pathGet(item, ["spec", "template", "spec", "containers"]); + if (containers && containers.length) { + var container = containers[0]; + if (container) { + image = container.image; + } + } + return image; + } + function checkForMissingMetadata() { + angular.forEach(projects.versions, function (vi) { + angular.forEach(vi.replicationControllers, function (item, name) { + if (!item.$gitCommit) { + var image = getImage(item); + if (image) { + angular.forEach(imageStreamTags, function (imageStreamTag) { + var imageName = imageStreamTag.dockerImageReference; + if (imageName && imageName === image) { + var foundISTag = imageStreamTag; + var manifestJSON = imageStreamTag.dockerImageManifest; + if (manifestJSON) { + var manifest = angular.fromJson(manifestJSON) || {}; + var history = manifest.history; + if (history && history.length) { + var v1 = history[0].v1Compatibility; + if (v1) { + var data = angular.fromJson(v1); + var env = Core.pathGet(data, ["config", "Env"]); + angular.forEach(env, function (envExp) { + if (envExp) { + var values = envExp.split("="); + if (values.length === 2 && values[0] == "OPENSHIFT_BUILD_NAME") { + var buildName = values[1]; + if (buildName) { + item.$buildId = buildName; + item.$buildUrl = Developer.projectWorkspaceLink(ns, projectName, "buildLogs/" + buildName); + } + } + } + }); + var labels = Core.pathGet(data, ["config", "Labels"]); + if (labels) { + item.$gitCommit = labels["io.openshift.build.commit.id"] || item.$gitCommit; + item.$gitCommitAuthor = labels["io.openshift.build.commit.author"] || item.$gitCommitAuthor; + item.$gitCommitDate = labels["io.openshift.build.commit.date"] || item.$gitCommitDate; + item.$gitCommitMessage = labels["io.openshift.build.commit.message"] || item.$gitCommitMessage; + item.$gitBranch = labels["io.openshift.build.commit.ref"] || item.$gitBranch; + if (!item.$gitUrl && item.$gitCommit) { + item.$gitUrl = Developer.projectWorkspaceLink(ns, projectName, "wiki/commitDetail///" + item.$gitCommit); + } + } + } + } + } + } + }); + } + } }); }); } } - }); - } - next(); - } - }); - Kubernetes._module.service('WatcherService', ['userDetails', '$rootScope', '$timeout', function (userDetails, $rootScope, $timeout) { - return self; - }]); -})(Kubernetes || (Kubernetes = {})); - -/// -/// -var Kubernetes; -(function (Kubernetes) { - var log = Logger.get("kubernetes-term-windows"); - Kubernetes._module.config(["kubernetesContainerSocketProvider", function (kubernetesContainerSocketProvider) { - kubernetesContainerSocketProvider.WebSocketFactory = "CustomWebSockets"; - }]); - Kubernetes._module.factory('CustomWebSockets', ["userDetails", function (userDetails) { - return function CustomWebSocket(url, protocols) { - var paths = url.split('?'); - if (!_.startsWith(paths[0], Kubernetes.masterApiUrl())) { - paths[0] = UrlHelpers.join(Kubernetes.masterApiUrl(), paths[0]); - } - url = KubernetesAPI.wsUrl(paths[0]); - url.search(paths[1] + '&access_token=' + userDetails.token); - log.debug("Using ws url: ", url.toString()); - return new WebSocket(url.toString(), protocols); - }; - }]); - Kubernetes._module.service('TerminalService', ["$rootScope", "$document", "$compile", "$templateCache", function ($rootScope, $document, $compile, $templateCache) { - var body = $document.find('body'); - function positionTerminals(terminals) { - var total = _.keys(terminals).length; - var dist = (body.width() - 225) / total; - var position = 5; - angular.forEach(terminals, function (value, key) { - if (!value.scope.docked) { - return; - } - value.el.css('left', position + 'px'); - position = position + dist; - }); - } - var defaultTemplate = $templateCache.get(UrlHelpers.join(Kubernetes.templatePath, 'termShell.html')); - var self = { - positionTerminals: function () { - positionTerminals(self.terminals); - }, - terminals: {}, - newTerminal: function (podLink, containerName, template) { - if (template === void 0) { template = defaultTemplate; } - var terminalId = UrlHelpers.join(podLink, containerName); - if (terminalId in self.terminals) { - log.debug("Already a terminal with id: ", terminalId); - self.raiseTerminal(terminalId); - return terminalId; - } - var scope = $rootScope.$new(); - scope.podLink = podLink; - scope.containerName = containerName; - scope.id = terminalId; - scope.docked = true; - var el = $($compile(template)(scope)); - var term = { - scope: scope, - el: el - }; - body.append(el); - self.terminals[terminalId] = term; - positionTerminals(self.terminals); - return terminalId; - }, - closeTerminal: function (id) { - var term = self.terminals[id]; - if (term) { - term.el.remove(); - delete self.terminals[id]; - positionTerminals(self.terminals); - } - }, - raiseTerminal: function (id) { - angular.forEach(self.terminals, function (value, key) { - if (key === id) { - value.el.css('z-index', '4000'); - value.el.find('.terminal').focus(); - } - else { - value.el.css('z-index', '3000'); + if (selector) { + var selectorText = Kubernetes.labelsToString(selector, ","); + var podLinkUrl = UrlHelpers.join(Developer.projectLink(projectName), "namespace", ns, "pods"); + item.pods = []; + item.$podCounters = Kubernetes.createPodCounters(selector, status.pods, item.pods, selectorText, podLinkUrl); } - }); - } - }; - return self; - }]); - function addWindowActions(scope, element, TerminalService) { - var moved = false; - var lastX = 0; - var lastY = 0; - var header = element.find('.terminal-title'); - var body = element.find('.terminal-body'); - element.on('$destroy', function () { - $('#main').css({ display: 'inherit' }); - }); - var HEIGHT = 348; - var WIDTH = 600; - var TITLE_HEIGHT = 35; - var NAV_OFFSET = 46; - element.css({ - height: HEIGHT, - width: WIDTH - }); - header.css({ - height: TITLE_HEIGHT - }); - body.css({ - position: 'absolute', - top: 35, - left: 0, - right: 0, - bottom: 0 - }); - scope.close = function () { - TerminalService.closeTerminal(scope.id); - }; - scope.raise = function () { - TerminalService.raiseTerminal(scope.id); - }; - scope.$watch('docked', function (docked) { - if (docked) { - element.width(WIDTH); - if (!element.hasClass('minimized')) { - element.height(HEIGHT); - } - } - }); - scope.startResize = function (e) { - e.preventDefault(); - log.debug("Start resize"); - scope.resizing = true; - element.on('mouseup', scope.stopResize); - $(document).on('mousemove', scope.doResize); - $(document).on('mouseleave', scope.stopResize); - }; - scope.doResize = function (e) { - if (scope.resizing) { - log.debug("Resizing, e: ", e); - if (!moved) { - lastX = e.clientX; - lastY = e.clientY; - moved = true; - return; - } - var height = element.height(); - var width = element.width(); - var deltaX = e.clientX - lastX; - var deltaY = e.clientY - lastY; - var newHeight = height + deltaY; - var newWidth = width + deltaX; - if (newHeight > 35 && newWidth > 80) { - element.height(height + deltaY); - element.width(width + deltaX); - } - lastX = e.clientX; - lastY = e.clientY; - } - }; - scope.stopResize = function (e) { - scope.resizing = false; - moved = false; - element.off('mouseup', scope.stopResize); - $(document).off('mousemove', scope.doResize); - $(document).off('mouseleave', scope.stopResize); - }; - scope.mouseDown = function (e) { - e.preventDefault(); - if (element.hasClass('minimized') || element.hasClass('maximized')) { - return; - } - scope.dragging = true; - element.on('mouseup', scope.mouseUp); - $(document).on('mousemove', scope.mouseMove); - $(document).on('mouseleave', scope.mouseUp); - }; - scope.mouseUp = function (e) { - e.preventDefault(); - scope.dragging = false; - moved = false; - var height = element.height(); - var offset = element.offset(); - var winHeight = $(window).height(); - if (offset.top > (winHeight - height - 20)) { - element.css({ top: "inherit", left: "inherit" }); - scope.docked = true; - TerminalService.positionTerminals(); - } - else { - scope.docked = false; - } - element.off('mouseup', scope.mouseUp); - $(document).off('mousemove', scope.mouseMove); - $(document).off('mouseleave', scope.mouseUp); - }; - scope.mouseMove = function (e) { - if (scope.dragging) { - if (!moved) { - lastX = e.clientX; - lastY = e.clientY; - moved = true; - return; } - var deltaX = e.clientX - lastX; - var deltaY = e.clientY - lastY; - var elOffset = element.offset(); - element.offset({ top: elOffset.top + deltaY, left: elOffset.left + deltaX }); - lastX = e.clientX; - lastY = e.clientY; + }); + // lets check for a project name if we have lots of RCs with no pods, lets remove them! + angular.forEach(projectInfos, function (project, projectName) { + var rcsNoPods = []; + var rcsWithPods = []; + angular.forEach(project.versions, function (versionInfo) { + var rcs = versionInfo.replicationControllers; + angular.forEach(rcs, function (item, name) { + var count = Kubernetes.podCounterTotal(item.$podCounters); + if (count) { + rcsWithPods.push(name); + } + else { + rcsNoPods.push(function () { + delete rcs[name]; + }); + } + }); + }); + if (rcsWithPods.length) { + // lets remove all the empty RCs + angular.forEach(rcsNoPods, function (fn) { + fn(); + }); + } + }); + if (hasObjectChanged(projectInfos, cache)) { + Developer.log.debug("project versions has changed!"); + answer[ns] = projectInfos; } - }; - function restoreWindow(scope, element) { - if (scope.offset) { - element.offset(scope.offset); - scope.docked = false; + } + Kubernetes.watch($scope, $element, "replicationcontrollers", ns, function (data) { + if (data) { + status.rcs = data; + updateModel(); } - if (scope.height) { - element.height(scope.height); + }); + Kubernetes.watch($scope, $element, "services", ns, function (data) { + if (data) { + status.services = data; + updateModel(); } - if (scope.width) { - element.width(scope.width); + }); + Kubernetes.watch($scope, $element, "routes", ns, function (data) { + if (data) { + status.routes = data; + updateModel(); } + }); + Kubernetes.watch($scope, $element, "pods", ns, function (data) { + if (data) { + status.pods = data; + updateModel(); + } + }); + } + Developer.loadProjectVersions = loadProjectVersions; +})(Developer || (Developer = {})); + +/// +var Developer; +(function (Developer) { + /* + function homeBreadcrumb() { + return { + href: "/home", + label: "Home", + title: "Go to the home page" } - function saveWindow(scope, element) { - scope.offset = element.offset(); - scope.height = element.height(); - scope.width = element.width(); - } - scope.maximized = function () { - return element.hasClass('maximized'); + } + */ + function developBreadcrumb() { + return { + href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces"), + label: "Develop", + title: "View all the apps for a project" }; - scope.maximize = function ($e) { - $e.preventDefault(); - if (element.hasClass('minimized')) { - scope.minimize(); - } - if (element.hasClass('maximized')) { - restoreWindow(scope, element); - $('#main').css({ display: 'inherit' }); - } - else { - saveWindow(scope, element); - $('#main').css({ display: 'none' }); - element.css({ - height: 'inherit', - bottom: 0, - width: '100%', - top: NAV_OFFSET, - left: 0 - }); - } - element.toggleClass('maximized'); + } + function operateBreadcrumb() { + return { + href: UrlHelpers.join(HawtioCore.documentBase(), "/namespaces"), + label: "Manage", + title: "Manage the projects and resources inside them" }; - scope.minimize = function ($e) { - $e.preventDefault(); - if (element.hasClass('maximized')) { - scope.maximize(); + } + function workspaceLink() { + return UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", Kubernetes.currentKubernetesNamespace()); + } + Developer.workspaceLink = workspaceLink; + function projectLink(projectId) { + var link = workspaceLink(); + if (projectId) { + return UrlHelpers.join(link, "/projects", projectId); + } + else { + return link; + } + } + Developer.projectLink = projectLink; + function createWorkspacesBreadcrumbs(developPerspective) { + /* + if (developPerspective) { + return [ + //homeBreadcrumb(), + developBreadcrumb() + ]; + } else { + return [ + //homeBreadcrumb(), + operateBreadcrumb() + ]; } - if (element.hasClass('minimized')) { - restoreWindow(scope, element); + */ + return []; + } + Developer.createWorkspacesBreadcrumbs = createWorkspacesBreadcrumbs; + function createWorkspacesSubNavBars(developPerspective) { + return activateCurrent([ + developBreadcrumb(), + operateBreadcrumb() + ]); + } + Developer.createWorkspacesSubNavBars = createWorkspacesSubNavBars; + function createWorkspaceBreadcrumbs(children, workspaceName) { + if (children === void 0) { children = null; } + if (workspaceName === void 0) { workspaceName = null; } + var answer = [ + //homeBreadcrumb(), + developBreadcrumb() + ]; + if (!workspaceName) { + workspaceName = Kubernetes.currentKubernetesNamespace(); + } + if (workspaceName) { + answer.push({ + href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces/", workspaceName), + label: workspaceName, + title: "View the project: " + workspaceName + }); + return processChildren(answer, children); + } + return answer; + } + Developer.createWorkspaceBreadcrumbs = createWorkspaceBreadcrumbs; + function createEnvironmentBreadcrumbs($scope, $location, $routeParams) { + var ns = Kubernetes.currentKubernetesNamespace(); + var namespacesLink = UrlHelpers.join(HawtioCore.documentBase(), "/kubernetes/namespace"); + var workspaceName = $routeParams.workspace; + var project = $routeParams.project; + if (workspaceName && project) { + var projectLink = UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", project); + $scope.$projectLink = projectLink; + $scope.$projectNamespaceLink = UrlHelpers.join(projectLink, "namespace", ns); + namespacesLink = UrlHelpers.join(projectLink, "namespace"); + // TODO use the logical name? + var envName = ns; + var buildConfig = null; + if ($scope.model) { + buildConfig = $scope.model.getProject(project, workspaceName); + if (buildConfig) { + // lets find the label for the namespace + var env = _.find(buildConfig.environments, { namespace: ns }); + if (env) { + envName = env['label'] || envName; + } + Developer.log.info("env found: " + env + " for nameppace " + ns + " on buildConfig: " + buildConfig); + } } - else { - saveWindow(scope, element); - scope.docked = true; - element.css({ height: TITLE_HEIGHT, top: "inherit", left: "inherit" }); - TerminalService.positionTerminals(); + var children = [ + { + href: UrlHelpers.join(projectLink, "environments"), + label: "Environments", + title: "View the environments for this project" + }, + { + href: UrlHelpers.join(namespacesLink, ns, "apps"), + label: envName, + title: "View the runtime of the workspace: " + ns + } + ]; + return createProjectBreadcrumbs(project, children, workspaceName); + } + else { + if (!workspaceName) { + workspaceName = Kubernetes.currentKubernetesNamespace(); + } + return activateCurrent([ + //homeBreadcrumb(), + operateBreadcrumb(), + { + href: UrlHelpers.join(namespacesLink, ns, "apps"), + label: workspaceName, + title: "View the runtime of the workspace: " + ns + } + ]); + } + } + Developer.createEnvironmentBreadcrumbs = createEnvironmentBreadcrumbs; + function createProjectBreadcrumbs(projectName, children, workspaceName) { + if (projectName === void 0) { projectName = null; } + if (children === void 0) { children = null; } + if (workspaceName === void 0) { workspaceName = null; } + if (!workspaceName) { + workspaceName = Kubernetes.currentKubernetesNamespace(); + } + var answer = createWorkspaceBreadcrumbs(null, workspaceName); + if (workspaceName) { + if (projectName) { + answer.push({ + href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects"), + label: "Apps", + title: "View all the apps in this project" + }); + answer.push({ + href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName), + label: projectName, + title: "View the project: " + projectName + }); } - element.toggleClass('minimized'); - }; + return processChildren(answer, children); + } + return answer; } - Kubernetes.addWindowActions = addWindowActions; - Kubernetes._module.directive('terminalWindow', ["$compile", "TerminalService", function ($compile, TerminalService) { - return { - restrict: 'A', - scope: false, - link: function (scope, element, attr) { - addWindowActions(scope, element, TerminalService); - var body = element.find('.terminal-body'); - body.append($compile('')(scope)); + Developer.createProjectBreadcrumbs = createProjectBreadcrumbs; + function createProjectSettingsBreadcrumbs(projectName, workspaceName) { + if (workspaceName === void 0) { workspaceName = null; } + var children = [{ + label: "Settings", + title: "View the settings of this app" + }]; + if (!projectName) { + var children = [{ + label: "New App", + title: "Lets make a new app" + }]; + } + return createProjectBreadcrumbs(projectName, children, workspaceName); + } + Developer.createProjectSettingsBreadcrumbs = createProjectSettingsBreadcrumbs; + function createWorkspaceSubNavBars() { + var workspaceName = Kubernetes.currentKubernetesNamespace(); + return activateCurrent([ + { + href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName), + label: "Apps", + class: "fa fa-rocket", + title: "View the apps in this project" + }, + { + isValid: function () { return Developer.jenkinsLink(); }, + href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "jenkinsJob"), + label: "Builds", + class: "fa fa-code", + title: "View the builds in this project" + }, + { + href: UrlHelpers.join(HawtioCore.documentBase(), "/kubernetes/namespace", workspaceName, "apps"), + label: "Runtime", + class: "fa fa-gears", + title: "View the runtime resources in this project" + }, + { + href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "detail"), + label: "Details", + class: "fa fa-gear", + title: "View the project details" } - }; - }]); -})(Kubernetes || (Kubernetes = {})); - -/// -/// -var Kubernetes; -(function (Kubernetes) { - var log = Logger.get("kubernetes-pod-logs"); - Kubernetes._module.service("PodLogReplacements", function () { - return []; - }); - Kubernetes._module.run(["PodLogReplacements", function (PodLogReplacements) { - var log = Logger.get("pod-log-replacers"); - // Add ANSI escape character replacer - // adapted from https://github.com/mmalecki/ansispan - var colors = { - '30': 'black', - '31': 'red', - '32': 'green', - '33': 'yellow', - '34': 'blue', - '35': 'purple', - '36': 'cyan', - '37': 'white' - }; - PodLogReplacements.push(function (msg) { - if (!msg) { - return msg; + ]); + } + Developer.createWorkspaceSubNavBars = createWorkspaceSubNavBars; + function createBuildsLink(workspaceName, projectName, jenkinsJobId) { + workspaceName = workspaceName || Kubernetes.currentKubernetesNamespace(); + return UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName, "jenkinsJob", jenkinsJobId); + } + function createProjectSubNavBars(projectName, jenkinsJobId, $scope) { + if (jenkinsJobId === void 0) { jenkinsJobId = null; } + if ($scope === void 0) { $scope = null; } + var workspaceName = Kubernetes.currentKubernetesNamespace(); + var projectLink = UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName); + var buildsLink = UrlHelpers.join(projectLink, "builds"); + if (!jenkinsJobId) { + jenkinsJobId = projectName; + } + var jenkinsBuildLink = null; + var pipelinesLink = null; + if (projectName && jenkinsJobId) { + jenkinsBuildLink = createBuildsLink(workspaceName, projectName, jenkinsJobId); + pipelinesLink = UrlHelpers.join(jenkinsBuildLink, "pipelines"); + } + function isJenkinsBuild() { + var answer = Developer.jenkinsLink() && jenkinsBuildLink; + if (answer && $scope) { + var entity = Developer.projectForScope($scope); + if (entity) { + return answer && entity.$jenkinsJob; + } } - var end = ""; - _.forOwn(colors, function (color, code) { - var start = ""; - msg = msg.replace(new RegExp('\033\\[' + code + 'm', 'g'), start); - msg = msg.replace(new RegExp('\033\\[0;' + code + 'm', 'g'), start); - }); - msg = msg.replace(/\033\[1m/g, '').replace(/\033\[22m/g, ''); - msg = msg.replace(/\033\[3m/g, '').replace(/\033\[23m/g, ''); - msg = msg.replace(/\033\[m/g, end); - msg = msg.replace(/\033\[0m/g, end); - msg = msg.replace(/\033\[39m/g, end); - msg = msg.replace(/\033\[2m/g, ''); - msg = msg.replace(/\033\[0;39m/g, end); - log.debug("Running replacement on message: ", msg); - return msg; - }); - }]); - Kubernetes._module.controller("Kubernetes.PodLogLinkController", ["$scope", "TerminalService", "$templateCache", function ($scope, TerminalService, $templateCache) { - $scope.openLogs = function (entity) { - log.debug("Open logs: ", entity); - TerminalService.newTerminal(entity.metadata.selfLink, entity.metadata.name, $templateCache.get(UrlHelpers.join(Kubernetes.templatePath, 'logShell.html'))); - }; - }]); - Kubernetes._module.directive('podLogDisplay', ["userDetails", "PodLogReplacements", function (userDetails, PodLogReplacements) { - return { - restrict: 'E', - template: "\n
\n

Please wait, fetching logs...

\n

View previous container logs?

\n

\n
\n ", - link: function (scope, element, attr) { - var link = scope.$eval('podLink'); - var name = scope.$eval('containerName'); - if (!link) { - return; + return answer; + } + var answer = [ + { + href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName), + label: "All Apps", + class: 'fa fa-angle-double-left', + title: "View the apps in this project" + }, + { + template: "
" + }, + { + href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName, "environments"), + isActive: function (subTab, path) { + //console.log("subTab: ", subTab, " path: ", path); + if (path === subTab.href) { + return true; + } + var rootPath = subTab.href.replace(/\/environments/, ''); + if (path === rootPath) { + return true; + } + return false; + }, + //href: UrlHelpers.join("/workspaces", workspaceName, "projects", projectName), + label: "Dashboard", + class: "fa fa-tachometer", + title: "View the app dashboard for the activity, environments and pipelines" + }, + { + isValid: function () { return isJenkinsBuild() && pipelinesLink; }, + id: "pipelines", + href: pipelinesLink, + label: "Pipelines", + class: "fa fa-ellipsis-h", + title: "View the pipeline builds for this app" + }, + { + isValid: function () { return !isJenkinsBuild(); }, + href: buildsLink, + label: "Builds", + class: "fa fa-bars", + title: "View the builds for this app" + }, + { + isValid: function () { return isJenkinsBuild(); }, + id: "builds", + href: jenkinsBuildLink, + label: "Builds", + class: "fa fa-bars", + title: "View the Jenkins builds for this app" + }, + { + isValid: function () { return isJenkinsBuild(); }, + href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName, "jenkinsJob", jenkinsJobId, "metrics"), + label: "Metrics", + class: "fa fa-bar-chart", + title: "View the metrics for this project" + }, + /* + { + href: UrlHelpers.join("/workspaces", workspaceName, "projects", projectName, "tools"), + label: "Tools", + title: "View the tools for this project" + }, + */ + { + href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName, "buildConfigEdit"), + label: "Settings", + class: "fa fa-cog", + title: "View the app configuration", + isActive: function (subTab, path) { + if (_.endsWith(path, '/buildConfigEdit')) { + return true; + } + if (_.endsWith(path, '/forge/secrets')) { + return true; + } + if (_.endsWith(path, '/forge/command/devops-edit')) { + return true; + } + return false; } - scope.fetched = false; - scope.previous = false; - scope.messages = []; - link = UrlHelpers.join(Kubernetes.masterApiUrl(), link, 'log'); - link = KubernetesAPI.wsUrl(link); - link.search({ - follow: true, - tailLines: 1000, - access_token: userDetails.token - }); - var messages = []; - var pullMessages = _.debounce(function () { - scope.messages = scope.messages.concat(_.remove(messages, function () { return true; }).map(function (msg) { - PodLogReplacements.forEach(function (replFunc) { - if (angular.isFunction(replFunc)) { - msg = replFunc(msg); - } + } + ]; + var context = { + workspaceName: workspaceName, + projectName: projectName, + projectLink: projectLink, + jenkinsJobId: jenkinsJobId, + $scope: $scope + }; + angular.forEach(Developer.customProjectSubTabFactories, function (fn) { + if (angular.isFunction(fn)) { + var subtab = fn(context); + if (subtab) { + if (angular.isArray(subtab)) { + angular.forEach(subtab, function (t) { + answer.push(t); }); - return msg; - })); - if (!scope.fetched) { - scope.fetched = true; } - Core.$apply(scope); - }, 1000); - function initSocket(link) { - scope.fetched = false; - messages.length = 0; - scope.messages.length = 0; - var ws = new WebSocket(link.toString(), 'base64.binary.k8s.io'); - ws.onmessage = function (event) { - try { - var message = window.atob(event.data); - messages.push(message); - pullMessages(); - } - catch (err) { - } - }; - return ws; + else { + answer.push(subtab); + } } - var ws = initSocket(link); - scope.$watch('previous', function (value, old) { - if (value !== old) { - if (link.hasSearch('previous')) { - link.removeSearch('previous').addSearch('previous', scope.previous); - } - else { - link.addSearch('previous', scope.previous); + } + }); + return activateCurrent(answer); + } + Developer.createProjectSubNavBars = createProjectSubNavBars; + function createProjectSettingsSubNavBars(projectName, jenkinsJobId) { + if (jenkinsJobId === void 0) { jenkinsJobId = null; } + if (!projectName) { + return []; + } + var workspaceName = Kubernetes.currentKubernetesNamespace(); + var projectLink = UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName); + if (!jenkinsJobId) { + jenkinsJobId = projectName; + } + var answer = [ + { + href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName, "buildConfigEdit"), + label: "Core", + title: "View the core build configuration" + }, + { + href: projectSecretsLink(workspaceName, projectName), + label: "Secrets", + title: "View or change the secrets used to edit source code in the source control system" + }, + { + href: editPipelineLink(workspaceName, projectName), + label: "Pipeline", + title: "View the DevOps and pipeline configuration" + }, + { + isValid: function () { return forgeProjectHasBuilder("maven"); }, + href: editMavenBuildLink(workspaceName, projectName), + label: "Maven", + title: "View the Maven build configuration" + } + ]; + return activateCurrent(answer); + } + Developer.createProjectSettingsSubNavBars = createProjectSettingsSubNavBars; + function forgeProjectHasBuilder(name) { + var forgeProject = Kubernetes.inject("ForgeProject"); + if (forgeProject) { + return forgeProject.hasBuilder(name); + } + return false; + } + Developer.forgeProjectHasBuilder = forgeProjectHasBuilder; + function forgeProjectHasPerspective(name) { + var forgeProject = Kubernetes.inject("ForgeProject"); + if (forgeProject) { + return forgeProject.hasPerspective(name); + } + return false; + } + Developer.forgeProjectHasPerspective = forgeProjectHasPerspective; + function editPipelineLinkScope($scope) { + return editPipelineLink($scope.namespace, $scope.projectId || $scope.projectName || $scope.project); + } + Developer.editPipelineLinkScope = editPipelineLinkScope; + function createProjectLink(workspaceName) { + if (workspaceName === void 0) { workspaceName = null; } + if (!workspaceName) { + workspaceName = Kubernetes.currentKubernetesNamespace(); + } + return UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "/forge/createProject"); + } + Developer.createProjectLink = createProjectLink; + function editPipelineLink(workspaceName, projectName) { + return projectWorkspaceLink(workspaceName, projectName, "forge/command/devops-edit"); + } + Developer.editPipelineLink = editPipelineLink; + function editMavenBuildLink(workspaceName, projectName) { + return projectWorkspaceLink(workspaceName, projectName, "forge/command/fabric8-setup"); + } + Developer.editMavenBuildLink = editMavenBuildLink; + function projectSecretsLink(workspaceName, projectName) { + return projectWorkspaceLink(workspaceName, projectName, "forge/secrets", false); + } + Developer.projectSecretsLink = projectSecretsLink; + function secretsNamespaceLink(workspaceName, projectName, secretsNamespace) { + var prefix = projectWorkspaceLink(workspaceName, projectName, "") || "kubernetes"; + return UrlHelpers.join(prefix, "namespace", secretsNamespace, "secrets"); + } + Developer.secretsNamespaceLink = secretsNamespaceLink; + function projectWorkspaceLink(workspaceName, projectName, path, ignoreBlankProject) { + if (ignoreBlankProject === void 0) { ignoreBlankProject = true; } + if (ignoreBlankProject && !projectName) { + return ""; + } + if (!workspaceName) { + workspaceName = Kubernetes.currentKubernetesNamespace(); + } + return UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName, path); + } + Developer.projectWorkspaceLink = projectWorkspaceLink; + Developer.customProjectSubTabFactories = []; + function createJenkinsBreadcrumbs(projectName, jobId, buildId) { + var workspaceName = Kubernetes.currentKubernetesNamespace(); + var children = [ + { + id: "builds", + href: createBuildsLink(workspaceName, projectName, jobId), + label: "Builds", + title: "View the builds for this app" + } + ]; + if (buildId) { + children.push({ + id: "", + href: "", + label: "#" + buildId, + title: "Build #" + buildId + }); + } + return createProjectBreadcrumbs(projectName, children); + } + Developer.createJenkinsBreadcrumbs = createJenkinsBreadcrumbs; + function createJenkinsSubNavBars(projectName, jenkinsJobId, buildId, extraOption) { + if (extraOption === void 0) { extraOption = null; } + var answer = createProjectSubNavBars(projectName, jenkinsJobId); + if (extraOption) { + extraOption.active = true; + answer.push(extraOption); + } + return answer; + } + Developer.createJenkinsSubNavBars = createJenkinsSubNavBars; + function createEnvironmentSubNavBars($scope, $location, $routeParams) { + var ns = Kubernetes.currentKubernetesNamespace(); + var workspaceName = $routeParams.workspace; + var project = $routeParams.project; + var projectLink = UrlHelpers.join(HawtioCore.documentBase(), "/kubernetes"); + if (workspaceName && project) { + projectLink = UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", project); + } + var namespacesLink = UrlHelpers.join(projectLink, "namespace"); + return activateCurrent([ + { + href: UrlHelpers.join(projectLink, "environments"), + label: "<< Back To App", + title: "Go back to the Dashboard for this App", + isValid: function () { return project; } + }, + { + href: UrlHelpers.join(namespacesLink, ns, "apps"), + label: "Overview", + class: "fa fa-list", + title: "Overview of all the apps for this project" + }, + { + href: UrlHelpers.join(namespacesLink, ns, "services"), + label: "Services", + class: "fa fa-plug", + title: "View the apps for this project" + }, + { + href: UrlHelpers.join(namespacesLink, ns, "replicationControllers"), + label: "Controllers", + class: "fa fa-clone", + title: "View the Replication Controllers for this project" + }, + { + href: UrlHelpers.join(namespacesLink, ns, "pods"), + label: "Pods", + class: "fa fa-puzzle-piece", + title: "View the pods for this project" + }, + { + href: UrlHelpers.join(namespacesLink, ns, "events"), + label: "Events", + class: "fa fa-newspaper-o", + title: "View the events for this project" + }, + { + href: UrlHelpers.join(namespacesLink, ns, "secrets"), + label: "Secrets", + class: "fa fa-key", + title: "View the secrets for this project" + }, + { + href: UrlHelpers.join(HawtioCore.documentBase(), "/kubernetes/hosts"), + label: "Nodes", + class: "fa fa-server", + title: "View the nodes for this project" + }, + { + href: UrlHelpers.join(namespacesLink, ns, "overview"), + label: "Diagram", + class: "fa fa-sitemap", + title: "View all the objects in this project and their relationship" + }, + { + href: UrlHelpers.join(namespacesLink, ns, "angryPods"), + label: "Angry Pods", + class: "fa fa-gamepad", + title: "Try the Angry Pods game!" + }, + ]); + } + Developer.createEnvironmentSubNavBars = createEnvironmentSubNavBars; + function namespaceLink($scope, $routeParams, path) { + if (path === void 0) { path = null; } + var ns = Kubernetes.currentKubernetesNamespace(); + var workspaceName = $routeParams.workspace; + var project = $routeParams.project; + var projectLink = UrlHelpers.join(HawtioCore.documentBase(), "/kubernetes"); + if (workspaceName && project) { + projectLink = UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", project); + } + return UrlHelpers.join(projectLink, "namespace", ns, path); + } + Developer.namespaceLink = namespaceLink; + /** + * Removes the URL query string if its inside the given text + */ + function trimQuery(text) { + if (text) { + var idx = text.indexOf("?"); + if (idx >= 0) { + return text.substring(0, idx); + } + } + return text; + } + function activateCurrent(navBarItems) { + navBarItems = _.compact(navBarItems); + var injector = HawtioCore.injector; + var $location = injector ? injector.get("$location") : null; + if ($location) { + var path = trimQuery($location.path()); + var found = false; + function makeActive(item) { + item.active = true; + found = true; + } + angular.forEach(navBarItems, function (item) { + if (item) { + if (angular.isFunction(item.isActive)) { + if (!found && item.isActive(item, path)) { + makeActive(item); } - ws.close(); - ws = initSocket(link); } - }); - element.on('$destroy', function () { - if (ws) { - try { - ws.close(); - } - catch (err) { + else { + var href = item.href; + var trimHref = trimQuery(href); + if (!found && trimHref && trimHref === path) { + makeActive(item); } - delete ws; } - }); + } + }); + } + return navBarItems; + } + function processChildren(answer, children) { + if (children) { + if (angular.isArray(children)) { + answer = answer.concat(children); } - }; + else { + answer.push(children); + } + } + activateCurrent(answer); + return answer; + } +})(Developer || (Developer = {})); + +/// +/// +/// +/// +/// + +/// +/// +var Developer; +(function (Developer) { + Developer._module = angular.module(Developer.pluginName, ['hawtio-core', 'hawtio-ui', 'ui.codemirror', 'nvd3', 'treeControl']); + Developer.controller = PluginHelpers.createControllerFunction(Developer._module, Developer.pluginName); + Developer.route = PluginHelpers.createRoutingFunction(Developer.templatePath); + Developer._module.config(['$routeProvider', function ($routeProvider) { + $routeProvider.when(Developer.context, Developer.route('workspaces.html', false)) + .when("/namespaces", Developer.route('workspaces.html', false)) + .when(UrlHelpers.join(Developer.context, '/:namespace'), Developer.route('projects.html', false)) + .when(UrlHelpers.join(Developer.context, '/:namespace/detail'), Developer.route('workspace.html', false)) + .when(UrlHelpers.join(Developer.context, '/:namespace/jenkinsJob'), Developer.route('jenkinsJobs.html', false)) + .when(UrlHelpers.join(Developer.context, '/:namespace/projects'), Developer.route('projects.html', false)) + .when(UrlHelpers.join(Developer.context, '/:namespace/projects/:id'), Developer.route('environments.html', false)) + .when(UrlHelpers.join(Developer.context, '/:namespace/projects/:id/detail'), Kubernetes.route('buildConfig.html', false)) + .when(UrlHelpers.join(Developer.context, '/:namespace/projects/:id/builds'), Kubernetes.route('builds.html', false)) + .when(UrlHelpers.join(Developer.context, '/:namespace/projects/:id/environments'), Developer.route('environments.html', false)) + .when(UrlHelpers.join(Developer.context, '/:namespace/projects/:id/jenkinsJob/:job'), Developer.route('jenkinsJob.html', false)) + .when(UrlHelpers.join(Developer.context, '/:namespace/projects/:id/jenkinsJob/:job/log/:build'), Developer.route('jenkinsLog.html', false)) + .when(UrlHelpers.join(Developer.context, '/:namespace/projects/:id/jenkinsJob/:job/pipelines'), Developer.route('pipelines.html', false)) + .when(UrlHelpers.join(Developer.context, '/:namespace/projects/:id/jenkinsJob/:job/pipeline/:build'), Developer.route('pipeline.html', false)) + .when(UrlHelpers.join(Developer.context, '/:namespace/projects/:id/jenkinsJob/:job/metrics'), Developer.route('jenkinsMetrics.html', false)) + .when(UrlHelpers.join(Developer.context, '/:namespace/projects/:id/jenkinsMetrics'), Developer.route('jenkinsMetrics.html', false)) + .when(UrlHelpers.join(Developer.context, '/:namespace/projects/:id/tools'), Developer.route('tools.html', false)) + .when(UrlHelpers.join(Developer.context, '/:workspace/projects/:project/environments/:namespace'), Developer.route('environment.html', false)) + .when(UrlHelpers.join(Developer.context, '/:workspace/projects/:project/environments/:namespace'), Developer.route('environment.html', false)) + .when(UrlHelpers.join(Developer.context, '/Aggregate/overview'), Developer.route('addDataFile.html', false)) + .otherwise("/workspaces"); + }]); + Developer._module.run(['viewRegistry', 'ServiceRegistry', 'HawtioNav', 'KubernetesModel', '$templateCache', 'DataInfoModel', function (viewRegistry, ServiceRegistry, HawtioNav, KubernetesModel, $templateCache, DataInfoModel) { + Developer.log.debug("Running"); + viewRegistry['workspaces'] = Kubernetes.templatePath + 'layoutKubernetes.html'; + viewRegistry['namespaces'] = Kubernetes.templatePath + 'layoutKubernetes.html'; + var builder = HawtioNav.builder(); + var workspaces = builder.id('workspaces') + .href(function () { return Developer.context; }) + .title(function () { return '查看'; }) + .build(); + /* + var workspaceOverview = builder.id('workspaces') + .href(() => UrlHelpers.join(context, 'overview')) + .title(() => 'Workspace') + .build(); + */ + /* var dataadd = builder.id('dataadd') + .href(() => context) + .title(() => '汇总') + .build(); + */ + var Aggregate = builder.id('Aggregate;') + .rank(200) + .href(function () { return Developer.context; }) + .title(function () { return '数据汇总'; }) + .tabs(workspaces) + .build(); + HawtioNav.add(Aggregate); + }]); + Developer._module.filter('asTrustedHtml', ['$sce', function ($sce) { + return function (text) { + return $sce.trustAsHtml(text); + }; + }]); + hawtioPluginLoader.addModule(Developer.pluginName); + // for scroll-glue directive + hawtioPluginLoader.addModule('luegg.directives'); +})(Developer || (Developer = {})); + +/// +var Developer; +(function (Developer) { + Developer._module.controller('Developer.EnvironmentPanelController', ["$scope", "$element", "$location", "$routeParams", "KubernetesModel", "$http", "$timeout", "KubernetesState", "KubernetesApiURL", function ($scope, $element, $location, $routeParams, KubernetesModel, $http, $timeout, KubernetesState, KubernetesApiURL) { + $scope.envVersions = {}; + $scope.model = KubernetesModel; + $scope.env = $scope.$eval('env'); + $scope.buildConfig = $scope.$eval('entity'); + $scope.open = true; + $scope.toggle = function () { return $scope.open = !$scope.open; }; + var caches = {}; + Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); + Developer.loadProjectVersions($scope, $element, $scope.buildConfig, $scope.env, $scope.env.namespace, $scope.envVersions, caches); }]); - Kubernetes._module.directive('podLogWindow', ["$compile", "TerminalService", function ($compile, TerminalService) { - return { - restrict: 'A', - scope: false, - link: function (scope, element, attr) { - Kubernetes.addWindowActions(scope, element, TerminalService); - scope.atBottom = true; - scope.$watch('atBottom', function (val) { - console.log("atBottom: ", val); - }); +})(Developer || (Developer = {})); + +/// +/// +/// +/// +/// +var Developer; +(function (Developer) { + Developer.HomeController = Developer.controller("HomeController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", + function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { + $scope.namespace = Kubernetes.currentKubernetesNamespace(); + }]); +})(Developer || (Developer = {})); + +/// +/// +/// +/// +/// +var Developer; +(function (Developer) { + Developer.JenkinsJobController = Developer.controller("JenkinsJobController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "ServiceRegistry", + function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, ServiceRegistry) { + $scope.kubernetes = KubernetesState; + $scope.model = KubernetesModel; + $scope.id = $routeParams["id"]; + $scope.jobId = $routeParams["job"]; + $scope.schema = KubernetesSchema; + $scope.entityChangedCache = {}; + Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); + $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs($scope.id); + $scope.subTabConfig = Developer.createProjectSubNavBars($scope.id, $scope.jobId); + $scope.$on('kubernetesModelUpdated', function () { + updateData(); + }); + $scope.$on('$routeUpdate', function ($event) { + updateData(); + }); + $scope.tableConfig = { + data: 'job.builds', + showSelectionCheckbox: true, + enableRowClickSelection: false, + multiSelect: true, + selectedItems: [], + filterOptions: { + filterText: $location.search()["q"] || '' + }, + columnDefs: [ + { + field: '$sortOrder', + displayName: 'Name', + cellTemplate: $templateCache.get("jenkinsBuildIdTemplate.html") + }, + { + field: '$buildLink', + displayName: 'Views', + cellTemplate: $templateCache.get("jenkinsBuildButtonsTemplate.html") + }, + { + field: '$duration', + displayName: 'Duration', + cellTemplate: $templateCache.get("jenkinsBuildDurationTemplate.html") + }, + { + field: '$timestamp', + displayName: 'Time Started', + cellTemplate: $templateCache.get("jenkinsBuildTimestampTemplate.html") + } + ] + }; + updateData(); + function updateData() { + if ($scope.jobId) { + var url = Kubernetes.kubernetesProxyUrlForServiceCurrentNamespace(Developer.jenkinsServiceNameAndPort, UrlHelpers.join("job", $scope.jobId, "api/json?depth=1")); + if (url && (!$scope.job || Kubernetes.keepPollingModel)) { + $http.get(url). + success(function (data, status, headers, config) { + if (data) { + Developer.enrichJenkinsJob(data, $scope.id, $scope.jobId); + if (Developer.hasObjectChanged(data, $scope.entityChangedCache)) { + Developer.log.info("entity has changed!"); + $scope.job = data; + } + } + $scope.model.fetched = true; + Core.$apply($scope); + }). + error(function (data, status, headers, config) { + Developer.log.warn("Failed to load " + url + " " + data + " " + status); + }); + } + } + else { + $scope.model.fetched = true; + Core.$apply($scope); + } } - }; - }]); -})(Kubernetes || (Kubernetes = {})); + }]); +})(Developer || (Developer = {})); /// -/// -/// -var Kubernetes; -(function (Kubernetes) { - Kubernetes.EnvItem = Kubernetes.controller("EnvItem", ["$scope", function ($scope) { - var parts = $scope.data.split('='); - $scope.key = parts.shift(); - $scope.value = parts.join('='); - }]); - // main controller for the page - Kubernetes.Pods = Kubernetes.controller("Pods", ["$scope", "KubernetesModel", "KubernetesPods", "KubernetesState", "ServiceRegistry", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", - function ($scope, KubernetesModel, KubernetesPods, KubernetesState, ServiceRegistry, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { +/// +/// +/// +/// +var Developer; +(function (Developer) { + Developer.JenkinsJobsController = Developer.controller("JenkinsJobsController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "ServiceRegistry", + function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, ServiceRegistry) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; + $scope.id = $routeParams["id"]; + $scope.schema = KubernetesSchema; + $scope.jenkins = null; + $scope.entityChangedCache = {}; + Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); + $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs(); + $scope.subTabConfig = Developer.createWorkspaceSubNavBars(); $scope.$on('kubernetesModelUpdated', function () { - Core.$apply($scope); + updateData(); + }); + $scope.$on('$routeUpdate', function ($event) { + updateData(); }); - $scope.itemSchema = Forms.createFormConfiguration(); $scope.tableConfig = { - data: 'model.pods', + data: 'jenkins.jobs', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, @@ -16342,884 +16822,913 @@ var Kubernetes; }, columnDefs: [ { - field: '_key', + field: 'name', displayName: 'Name', - defaultSort: true, - cellTemplate: $templateCache.get("idTemplate.html") - }, - { - field: '$statusCss', - displayName: 'Status', - cellTemplate: $templateCache.get("statusTemplate.html") - }, - { field: '$eventCount', - displayName: 'Events', - cellTemplate: $templateCache.get("eventSummaryTemplate.html") - }, - { - field: '$restartCount', - displayName: 'Restarts' + cellTemplate: $templateCache.get("jenkinsJobNameTemplate.html") }, { - field: '$createdTime', - displayName: 'Age', - cellTemplate: $templateCache.get("ageTemplate.html") + field: '$buildLink', + displayName: 'Views', + cellTemplate: $templateCache.get("jenkinsJobButtonsTemplate.html") }, { - field: '$imageNames', - displayName: 'Images', - cellTemplate: $templateCache.get("imageTemplate.html") + field: '$lastSuccessfulBuildNumber', + displayName: 'Last Success', + cellTemplate: $templateCache.get("jenkinsLastSuccessTemplate.html") }, { - field: '$host', - displayName: 'Host', - cellTemplate: $templateCache.get("hostTemplate.html") + field: '$lastFailedlBuildNumber', + displayName: 'Last Failure', + cellTemplate: $templateCache.get("jenkinsLastFailureTemplate.html") }, { - field: '$labelsText', - displayName: 'Labels', - cellTemplate: $templateCache.get("labelTemplate.html") + field: '$duration', + displayName: 'Last Duration', + cellTemplate: $templateCache.get("jenkinsBuildDurationTemplate.html") }, { - field: '$podIP', - displayName: 'Pod IP', - customSortField: function (field) { - return Kubernetes.sortByPodIp(field.$podIP); - } + field: '$timestamp', + displayName: 'Time Started', + cellTemplate: $templateCache.get("jenkinsBuildTimestampTemplate.html") } ] }; - $scope.openLogs = function () { - var pods = $scope.tableConfig.selectedItems; - if (!pods || !pods.length) { - if ($scope.id) { - var item = $scope.item; - if (item) { - pods = [item]; - } - } - } - Kubernetes.openLogsForPods(ServiceRegistry, $window, KubernetesModel.currentNamespace(), pods); - }; - Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); - $scope.deletePrompt = function (selected) { - if (angular.isString(selected)) { - selected = [{ - id: selected - }]; - } - UI.multiItemConfirmActionDialog({ - collection: selected, - index: 'metadata.name', - onClose: function (result) { - if (result) { - function deleteSelected(selected, next) { - if (next) { - Kubernetes.log.debug("deleting: ", Kubernetes.getName(next)); - KubernetesPods.delete({ - id: Kubernetes.getName(next) - }, undefined, function () { - Kubernetes.log.debug("deleted: ", Kubernetes.getName(next)); - deleteSelected(selected, selected.shift()); - }, function (error) { - Kubernetes.log.debug("Error deleting: ", error); - deleteSelected(selected, selected.shift()); - }); - } - } - deleteSelected(selected, selected.shift()); - } - }, - title: 'Delete pods?', - action: 'The following pods will be deleted:', - okText: 'Delete', - okClass: 'btn-danger', - custom: "This operation is permanent once completed!", - customClass: "alert alert-warning" - }).open(); - }; - $scope.createPods = function () { - var xhr = new XMLHttpRequest(); - xhr.onreadystatechange = function () { - if (xhr.readyState == 4) { - if (xhr.status == 200) { - var obj = JSON.parse(xhr.responseText); - var object = { - "name": "newpod", - "labels": { - "aim": "test", - "app": "oracle" - }, - "path": '/home/', - "port": 1525 - }; - Kubernetes.createRC(object); - } - else { - } - } - }; - xhr.open("POST", "/oracleAppPath", false); //与服务器连接并发送 - xhr.send(null); - }; - }]); -})(Kubernetes || (Kubernetes = {})); - -/// -/// -/// -var Kubernetes; -(function (Kubernetes) { - Kubernetes.ReplicationControllerController = Kubernetes.controller("ReplicationControllerController", ["$scope", "KubernetesModel", "KubernetesState", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", - function ($scope, KubernetesModel, KubernetesState, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { - $scope.kubernetes = KubernetesState; - $scope.model = KubernetesModel; - $scope.rawModel = null; - Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); - $scope.itemConfig = { - properties: { - '^\\/labels$': { - template: $templateCache.get('labelTemplate.html') - } - } - }; - $scope.$on('kubernetesModelUpdated', function () { - updateData(); - }); - $scope.$on('$routeUpdate', function ($event) { - updateData(); - }); - $scope.$watch('model.pods', function (newValue, oldValue) { - updateData(); - }, true); - $scope.flipRaw = function () { - $scope.rawMode = !$scope.rawMode; - Core.$apply($scope); - }; - updateData(); - function updateData() { - if ($scope.dirty) { - return; - } - $scope.id = $routeParams["id"]; - $scope.item = $scope.model.getReplicationController(KubernetesState.selectedNamespace, $scope.id); - if ($scope.item) { - $scope.rawModel = Kubernetes.toRawYaml($scope.item); - } - Core.$apply($scope); - } - }]); -})(Kubernetes || (Kubernetes = {})); - -/// -/// -/// -var Kubernetes; -(function (Kubernetes) { - Kubernetes.ReplicationControllerEditController = Kubernetes.controller("ReplicationControllerEditController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "SchemaRegistry", - function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, schemas) { - $scope.kubernetes = KubernetesState; - $scope.model = KubernetesModel; - $scope.id = $routeParams["id"]; - $scope.schema = KubernetesSchema; - Kubernetes.log.debug("Schema: ", $scope.schema); - $scope.config = schemas.cloneSchema("io.fabric8.kubernetes.api.model.ReplicationController"); - //$$scope.config = KubernetesSchema.definitions.kubernetes_v1beta3_ReplicationController; - Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); - $scope.$on('$routeUpdate', function ($event) { - updateData(); - }); updateData(); function updateData() { - if ($scope.id) { - $scope.entity = $scope.model.getReplicationController(KubernetesState.selectedNamespace, $scope.id); - Core.$apply($scope); - $scope.fetched = true; - } - else { - $scope.fetched = true; + // TODO only need depth 2 to be able to fetch the lastBuild + var url = Kubernetes.kubernetesProxyUrlForServiceCurrentNamespace(Developer.jenkinsServiceNameAndPort, "api/json?depth=2"); + Developer.log.info(""); + if (url && (!$scope.jenkins || Kubernetes.keepPollingModel)) { + $http.get(url, Developer.jenkinsHttpConfig). + success(function (data, status, headers, config) { + if (data) { + Developer.enrichJenkinsJobs(data, $scope.id, $scope.id); + if (Developer.hasObjectChanged(data, $scope.entityChangedCache)) { + Developer.log.info("entity has changed!"); + $scope.jenkins = data; + } + } + $scope.model.fetched = true; + Core.$apply($scope); + }). + error(function (data, status, headers, config) { + Developer.log.warn("Failed to load " + url + " " + data + " " + status); + }); } } }]); -})(Kubernetes || (Kubernetes = {})); +})(Developer || (Developer = {})); /// -/// -/// -var Kubernetes; -(function (Kubernetes) { - Kubernetes.ReplicationControllers = Kubernetes.controller("ReplicationControllers", ["$scope", "OracleStatusModel", "KubernetesModel", "KubernetesReplicationControllers", "KubernetesPods", "KubernetesState", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", - function ($scope, OracleStatusModel, KubernetesModel, KubernetesReplicationControllers, KubernetesPods, KubernetesState, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { - $scope.kubernetes = KubernetesState; - $scope.model = KubernetesModel; - $scope.tableConfig = { - data: 'model.replicationControllers', - showSelectionCheckbox: true, - enableRowClickSelection: false, - multiSelect: true, - selectedItems: [], - filterOptions: { - filterText: $location.search()["q"] || '' - }, - columnDefs: [ - { field: '_key', - displayName: '服务名称', - cellTemplate: $templateCache.get("idTemplate.html") - }, - //{ field: '$replicas', - // displayName: 'Scale', - // cellTemplate:$templateCache.get("desiredReplicas.html") - //}, - { field: '$pods.age', - displayName: '启动时间', - cellTemplate: $templateCache.get("ageTemplate.html") - }, - { field: '$labelsText', - displayName: '数据标签', - cellTemplate: $templateCache.get("labelTemplate.html") - }, - { field: '$pods', - displayName: '连接参数', - cellTemplate: $templateCache.get("connectParamTemplate.html") - }, - { field: '$pods[0].$eventCount', - displayName: '服务启动日志', - cellTemplate: $templateCache.get("eventSummaryTemplate.html") - }, - { field: '$podCounters', - displayName: '服务状态', - cellTemplate: $templateCache.get("podCountsAndLinkTemplate.html"), - customSortField: function (field) { - if (field.$podCounters.ready) { - return 3; +/// +/// +/// +/// +/// +/// +/// +var Developer; +(function (Developer) { + function clickApprove(element, url) { + var $scope = angular.element(element).scope(); + if ($scope) { + $scope.approve(url, element.text); + } + } + Developer.clickApprove = clickApprove; + Developer.JenkinsLogController = Developer._module.controller("Developer.JenkinsLogController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "$modal", "KubernetesApiURL", "ServiceRegistry", "$element", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, $modal, KubernetesApiURL, ServiceRegistry, $element) { + $scope.kubernetes = KubernetesState; + $scope.model = KubernetesModel; + $scope.selectedBuild = $scope.$eval('build') || $scope.$eval('selectedBuild'); + $scope.id = $scope.$eval('build.id') || $routeParams["id"]; + $scope.schema = KubernetesSchema; + $scope.entityChangedCache = {}; + $element.on('$destroy', function () { + $scope.$destroy(); + }); + $scope.log = { + html: "", + start: 0, + firstIdx: null + }; + $scope.$on('kubernetesModelUpdated', function () { + updateJenkinsLink(); + Core.$apply($scope); + }); + $scope.$on('jenkinsSelectedBuild', function (event, build) { + Developer.log.info("==== jenkins build selected! " + build.id + " " + build.$jobId); + $scope.selectedBuild = build; + }); + $scope.$watch('selectedBuild', function (selectedBuild) { + Developer.log.info("Selected build updated: ", selectedBuild); + $scope.fetch(); + }); + Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); + $scope.breadcrumbConfig = Developer.createJenkinsBreadcrumbs($scope.id, getJobId(), getBuildId()); + $scope.subTabConfig = Developer.createJenkinsSubNavBars($scope.id, getJobId(), getBuildId(), { + label: "Log", + title: "Views the logs of this build" + }); + function getJobId() { + // lets allow the parent scope to be used too for when this is used as a panel + return $routeParams["job"] || ($scope.selectedBuild || {}).$jobId; + } + $scope.getJobId = getJobId; + function getBuildId() { + // lets allow the parent scope to be used too for when this is used as a panel + return $routeParams["build"] || ($scope.selectedBuild || {}).id; + } + $scope.getBuildId = getBuildId; + function updateJenkinsLink() { + var jenkinsUrl = Developer.jenkinsLink(); + if (jenkinsUrl) { + $scope.$viewJenkinsBuildLink = UrlHelpers.join(jenkinsUrl, "job", getJobId(), getBuildId()); + $scope.$viewJenkinsLogLink = UrlHelpers.join($scope.$viewJenkinsBuildLink, "console"); + } + } + var querySize = 50000; + $scope.approve = function (url, operation) { + var modal = $modal.open({ + templateUrl: UrlHelpers.join(Developer.templatePath, 'jenkinsApproveModal.html'), + controller: ['$scope', '$modalInstance', function ($scope, $modalInstance) { + $scope.operation = operation; + $scope.header = operation + "?"; + $scope.ok = function () { + modal.close(); + postToJenkins(url, operation); + }; + $scope.cancel = function () { + modal.dismiss(); + }; + }] + }); + }; + function postToJenkins(uri, operation) { + var url = Kubernetes.kubernetesProxyUrlForServiceCurrentNamespace(Developer.jenkinsServiceNameAndPort, uri); + if (url) { + var body = null; + var config = { + headers: {} + }; + Developer.log.info("posting to jenkinsUrl: " + url); + $http.post(url, body, config). + success(function (data, status, headers, config) { + Developer.log.info("Managed to " + operation + " at " + url); + }). + error(function (data, status, headers, config) { + Developer.log.warn("Failed " + operation + " job at " + url + " " + data + " " + status); + }); + } + else { + Developer.log.warn("Cannot post to jenkins URI: " + uri + " as no jenkins found!"); + } + } + $scope.$keepPolling = function () { return Kubernetes.keepPollingModel; }; + $scope.fetch = PollHelpers.setupPolling($scope, function (next) { + if ($scope.$eval('hideLogs && !build.building')) { + Developer.log.debug("Log hidden, not fetching logs"); + return; + } + else { + Developer.log.debug("Fetching logs for build: ", $scope.$eval('build')); + } + var buildId = getBuildId(); + var jobId = getJobId(); + //log.info("=== jenkins log querying job " + jobId + " build " + buildId + " selected build " + $scope.selectedBuild); + if (jobId && buildId) { + if ($scope.buildId !== buildId || $scope.jobId !== jobId) { + // lets clear the query + $scope.log = { + html: "", + start: 0, + firstIdx: null + }; + } + $scope.buildId = buildId; + $scope.jobId = jobId; + var url = Kubernetes.kubernetesProxyUrlForServiceCurrentNamespace(Developer.jenkinsServiceNameAndPort, UrlHelpers.join("job", jobId, buildId, "fabric8/logHtml?tail=1&start=" + $scope.log.start + "&size=" + querySize)); + if ($scope.log.firstIdx !== null) { + url += "&first=" + $scope.log.firstIdx; + } + if (url && (!$scope.log.fetched || Kubernetes.keepPollingModel)) { + $http.get(url). + success(function (data, status, headers, config) { + if (data) { + var replaceClusterIPsInHtml = replaceClusterIpFunction(); + if (!$scope.log.logs) { + $scope.log.logs = []; } - else if (field.$podCounters.valid || field.$podCounters.waiting) { - return 2; + var lines = data.lines; + var returnedLength = data.returnedLength; + var logLength = data.logLength; + var returnedStart = data.start; + var earlierLog = false; + if (angular.isDefined(returnedStart)) { + earlierLog = returnedStart < $scope.log.start; } - else if (field.$podCounters.error) { - return 0; + var lineSplit = data.lineSplit; + // log.info("start was: " + $scope.log.start + " first: " + $scope.log.firstIdx + " => returnedLength: " + returnedLength + " logLength: " + logLength + " returnedStart: " + returnedStart + " earlierLog: " + earlierLog + " lineSplit: " + lineSplit); + if (lines) { + var currentLogs = $scope.log.logs; + // lets re-join split lines + if (lineSplit && currentLogs.length) { + var lastIndex; + var restOfLine; + if (earlierLog) { + lastIndex = 0; + restOfLine = lines.pop(); + if (restOfLine) { + currentLogs[lastIndex] = replaceClusterIPsInHtml(restOfLine + currentLogs[lastIndex]); + } + } + else { + lastIndex = currentLogs.length - 1; + restOfLine = lines.shift(); + if (restOfLine) { + currentLogs[lastIndex] = replaceClusterIPsInHtml(currentLogs[lastIndex] + restOfLine); + } + } + } + for (var i = 0; i < lines.length; i++) { + lines[i] = replaceClusterIPsInHtml(lines[i]); + } + if (earlierLog) { + $scope.log.logs = lines.concat(currentLogs); + } + else { + $scope.log.logs = currentLogs.concat(lines); + } } - else { - return 1; + var moveForward = true; + if (angular.isDefined(returnedStart)) { + if (returnedStart > $scope.log.start && $scope.log.start === 0) { + // we've jumped to the end of the file to read the tail of it + $scope.log.start = returnedStart; + $scope.log.firstIdx = returnedStart; + } + else if ($scope.log.firstIdx === null) { + // lets remember where the first request started + $scope.log.firstIdx = returnedStart; + } + else if (returnedStart < $scope.log.firstIdx) { + // we've got an earlier bit of the log + // after starting at the tail + // so lets move firstIdx backwards and leave start as it is (at the end of the file) + $scope.log.firstIdx = returnedStart; + moveForward = false; + } + } + if (moveForward && returnedLength && !earlierLog) { + $scope.log.start += returnedLength; + if (logLength && $scope.log.start > logLength) { + $scope.log.start = logLength; + } } + updateJenkinsLink(); } - } - ] - }; - Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); - $scope.deletePrompt = function (selected) { - if (angular.isString(selected)) { - selected = [{ - id: selected - }]; + $scope.log.fetched = true; + // Core.$apply($scope); + next(); + }). + error(function (data, status, headers, config) { + Developer.log.warn("Failed to load " + url + " " + data + " " + status); + next(); + }); } - UI.multiItemConfirmActionDialog({ - collection: selected, - index: 'metadata.name', - onClose: function (result) { - if (result) { - function deleteSelected(selected, next) { - if (next) { - Kubernetes.log.debug("deleting: ", Kubernetes.getName(next)); - Kubernetes.resizeController($http, KubernetesApiURL, next, 0, function () { - Kubernetes.log.debug("updated number of replicas"); - KubernetesReplicationControllers.delete({ - id: Kubernetes.getName(next) - }, undefined, function () { - Kubernetes.log.debug("deleted: ", Kubernetes.getName(next)); - if (next.metadata.labels.style === "oracle") { - console.log("delete " + next.metadata.name); - Kubernetes.connectOracle($http, $timeout, "/cancelOracleConection", "", Kubernetes.getName(next), 0); - } - deleteSelected(selected, selected.shift()); - }, function (error) { - Kubernetes.log.debug("Error deleting: ", error); - deleteSelected(selected, selected.shift()); - }); - }); + } + else { + $scope.log.fetched = true; + Core.$apply($scope); + next(); + } + }); + if (angular.isFunction($scope.fetch)) { + $scope.fetch(); + } + function replaceClusterIpFunction() { + function createReplaceFunction(from, to) { + return function (text) { return replaceText(text, from, to); }; + } + var replacements = []; + angular.forEach($scope.model.services, function (service) { + var $portalIP = service.$portalIP; + var $serviceUrl = service.$serviceUrl; + var $portsText = service.$portsText; + if ($portalIP && $serviceUrl) { + var idx = $serviceUrl.indexOf("://"); + if (idx > 0) { + var replaceWith = $serviceUrl.substring(idx, $serviceUrl.length); + if (!replaceWith.endsWith("/")) { + replaceWith += "/"; + } + if (replaceWith.length > 4) { + replacements.push(createReplaceFunction("://" + $portalIP + "/", replaceWith)); + if ($portsText) { + var suffix = ":" + $portsText; + var serviceWithPort = replaceWith.substring(0, replaceWith.length - 1); + if (!serviceWithPort.endsWith(suffix)) { + serviceWithPort += suffix; } + serviceWithPort += "/"; + replacements.push(createReplaceFunction("://" + $portalIP + ":" + $portsText + "/", serviceWithPort)); } - deleteSelected(selected, selected.shift()); - } - }, - title: '是否需要删除oracle服务?', - action: '以下的oracle服务将会被删除:', - okText: '删除', - okClass: 'btn-danger', - custom: "该服务删除后将会清除oracle对应服务的端口等资源占用,但不删除数据文件,是否删除,请确认!", - customClass: "alert alert-warning", - cancelText: "取消" - }).open(); - }; - $scope.createRCs = function () { - var xhr = new XMLHttpRequest(); - xhr.onreadystatechange = function () { - if (xhr.readyState == 4) { - if (xhr.status == 200) { - var obj = JSON.parse(xhr.responseText); - console.log(obj.path); - var name = Kubernetes.getRandomString(8); - //console.log(name + "=====" +port); - var object = { - "name": name, - "labels": { - "name": name - }, - "path": obj.path, - }; - Kubernetes.createRC(object, function (rc) { - Kubernetes.connectOracle($http, $timeout, "/connectToOracle", "", Kubernetes.getName(rc), 0); - }); - } - else if (xhr.status == 403) { - alert("两次创建oracle服务时间间隔需要超过1分钟!"); - } - else { } } - }; - xhr.open("POST", "/oracleAppPath", false); //与服务器连接并发送 - xhr.send(null); - }; - $scope.stopPrompt = function (selected) { - if (angular.isString(selected)) { - selected = [{ - id: selected - }]; } - UI.multiItemConfirmActionDialog({ - collection: selected, - index: 'metadata.name', - onClose: function (result) { - if (result) { - function stopSelected(selected, next) { - if (next) { - Kubernetes.resizeController($http, KubernetesApiURL, next, 0, function () { - if (next.metadata.labels.style === "oracle") { - console.log("stop " + next.metadata.name); - Kubernetes.connectOracle($http, $timeout, "/cancelOracleConection", "", Kubernetes.getName(next), 0); - } - stopSelected(selected, selected.shift()); - }); - } - } - stopSelected(selected, selected.shift()); + }); + function addReplaceFn(from, to) { + replacements.push(function (text) { + return replaceText(text, from, to); + }); + } + addReplaceFn("[INFO]", "[INFO]"); + addReplaceFn("[WARN]", "[WARN]"); + addReplaceFn("[WARNING]", "[WARNING]"); + addReplaceFn("[ERROR]", "[ERROR]"); + addReplaceFn("FAILURE", "FAILURE"); + addReplaceFn("SUCCESS", "SUCCESS"); + // lets try convert the Proceed / Abort links + replacements.push(function (text) { + var prefix = "= 0) { + idx = text.indexOf(prefix, idx); + if (idx >= 0) { + var start = idx + prefix.length; + var endQuote = text.indexOf("'", start + 1); + if (endQuote <= 0) { + break; } - }, - title: '是否需要停止oracle服务?', - action: '以下的oracle服务将会被停止:', - okText: '停止', - okClass: 'btn-danger', - custom: "该服务停止后将无法继续提供连接访问服务,但可通过启动按钮重新启动该服务以进行访问。是否停止,请确认", - customClass: "alert alert-warning", - cancelText: "取消" - }).open(); - }; - $scope.reStartPrompt = function (selected) { - function startSelected(selected, next) { - if (next) { - if (next.$replicas === 0) - Kubernetes.resizeController($http, KubernetesApiURL, next, 1, function () { - console.log("restart " + next.metadata.name); - Kubernetes.connectOracle($http, $timeout, "/connectToOracle", "", Kubernetes.getName(next), 0); - startSelected(selected, selected.shift()); - }); + var endDoubleQuote = text.indexOf('"', endQuote + 1); + if (endDoubleQuote <= 0) { + break; + } + var url = text.substring(start, endQuote); + // TODO using $compile is a tad complex, for now lets cheat with a little onclick ;) + //text = text.substring(0, idx) + " -/// -var Kubernetes; -(function (Kubernetes) { - function schemaSetRequired(schema, propertyName, isRequired) { - if (isRequired === void 0) { isRequired = true; } - if (schema && propertyName) { - var required = schema.required; - if (isRequired) { - if (!required) { - required = []; - schema.required = required; - } - if (!_.contains(required, propertyName)) { - required.push(propertyName); - } - } - else { - if (required) { - var idx = required.indexOf(propertyName); + } + function replaceText(text, from, to) { + if (from && to && text) { + //log.info("Replacing '" + from + "' => '" + to + "'"); + var idx = 0; + while (true) { + idx = text.indexOf(from, idx); if (idx >= 0) { - required.splice(idx, 1); + text = text.substring(0, idx) + to + text.substring(idx + from.length); + idx += to.length; + } + else { + break; } } } + return text; } - } - Kubernetes.schemaSetRequired = schemaSetRequired; -})(Kubernetes || (Kubernetes = {})); + }]); +})(Developer || (Developer = {})); /// -/// -/// -var Kubernetes; -(function (Kubernetes) { - Kubernetes.SecretController = Kubernetes.controller("SecretController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "K8SClientFactory", - function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, K8SClientFactory) { +/// +/// +/// +/// +var Developer; +(function (Developer) { + Developer.JenkinsMetricsController = Developer.controller("JenkinsMetricsController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "ServiceRegistry", + function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, ServiceRegistry) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["id"]; + $scope.jobId = $routeParams["job"]; + $scope.schema = KubernetesSchema; + $scope.jenkins = null; + $scope.entityChangedCache = {}; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); - Kubernetes.selectSubNavBar($scope, "Secrets", $scope.id ? "Edit Secret: " + $scope.id : "Create Secret"); - var kubeClient = Kubernetes.createKubernetesClient("secrets"); - var onSaveUrl = $location.search()["savedUrl"]; - var createKind = $location.search()["kind"]; - $scope.sshKeys = Kubernetes.sshSecretDataKeys; - $scope.httpsKeys = Kubernetes.httpsSecretDataKeys; - var secretLabels = { - "ssh-key": "SSH private key", - "ssh-key.pub": "SSH public key", - "ca.crt": "CA Certificate", - ".dockercfg": "Docker config", - "username": "User name" - }; - var secretTooltips = { - "ssh-key": "SSH private key text contents", - "ca.crt": "Certificate Authority (CA) Certificate", - ".dockercfg": "Docker configuration token" - }; + $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs($scope.id); + $scope.subTabConfig = Developer.createProjectSubNavBars($scope.id, $scope.jobId); $scope.$on('kubernetesModelUpdated', function () { - if ($scope.id && !$scope.secret) { - updateData(); - } + updateData(); }); $scope.$on('$routeUpdate', function ($event) { updateData(); }); - $scope.propertyKeys = function () { - return _.keys(secretLabels); - }; - $scope.checkNameUnique = function (value) { - var answer = true; - angular.forEach($scope.model.secrets, function (secret) { - var name = Kubernetes.getName(secret); - if (value === name) { - answer = false; + $scope.options = { + chart: { + type: 'discreteBarChart', + autorefresh: false, + height: 450, + margin: { + top: 20, + right: 20, + bottom: 60, + left: 45 + }, + clipEdge: true, + staggerLabels: false, + transitionDuration: 500, + stacked: false, + interactive: true, + tooltip: { + enabled: true, + contentGenerator: function (args) { + var data = args.data || {}; + return data.tooltip; + }, + }, + color: function (d, i) { + return d.color; + }, + xAxis: { + axisLabel: 'Builds', + showMaxMin: false, + tickFormat: function (d) { + return "#" + d; + } + }, + yAxis: { + axisLabel: 'Build Duration (seconds)', + tickFormat: function (d) { + return d3.format(',.1f')(d); + } } - }); - return answer; - }; - $scope.checkFieldUnique = function (key) { - return $scope.entity.properties[key] ? false : true; + } }; - $scope.hasAllKeys = function (keys) { - var answer = keys && keys.length; - angular.forEach(keys, function (key) { - if (!$scope.entity.properties[key]) { - answer = false; + $scope.data = []; + updateData(); + function barColourForBuildResult(result) { + if (result) { + if (result === "FAILURE" || result === "FAILED") { + return "red"; + } + else if (result === "ABORTED" || result === "INTERUPTED") { + return "tan"; + } + else if (result === "SUCCESS") { + return "green"; + } + else if (result === "NOT_STARTED") { + return "lightgrey"; } - }); - return answer; - }; - $scope.addFieldDialog = { - controller: null, - newReplicas: 0, - dialog: new UI.Dialog(), - onOk: function () { - $scope.addFieldDialog.dialog.close(); - $scope.addDataField(); - }, - open: function (controller) { - var addFieldDialog = $scope.addFieldDialog; - addFieldDialog.dialog.open(); - $timeout(function () { - $('#newDataName').focus(); - }, 50); - }, - close: function () { - $scope.addFieldDialog.dialog.close(); } - }; - $scope.entityChanged = function () { - $scope.changed = true; - }; - $scope.addFields = function (keys) { - angular.forEach(keys, function (key) { return addField(key); }); - Core.$apply($scope); - }; - function addField(key) { - var property = createProperty(key, ""); - $scope.entity.properties[key] = property; - $scope.entity.newDataKey = ""; - $scope.showAddDataFieldForm = false; - $scope.entityChanged(); + return "darkgrey"; } - $scope.addDataField = function () { - var key = $scope.entity.newDataKey; - if (key) { - addField(key); - Core.$apply($scope); - } - }; - $scope.deleteProperty = function (key) { - if (key) { - delete $scope.entity.properties[key]; - $scope.entityChanged(); - Core.$apply($scope); + function updateChartData() { + var useSingleSet = true; + var buildsSucceeded = []; + var buildsFailed = []; + var successBuildKey = "Succeeded builds"; + var failedBuildKey = "Failed builds"; + if (useSingleSet) { + successBuildKey = "Builds"; } - }; - $scope.cancel = function () { - updateData(); - }; - $scope.save = function () { - var entity = $scope.entity || {}; - var name = entity.name; - if (name) { - if (!$scope.secret) { - $scope.secret = { - apiVersion: Kubernetes.defaultApiVersion, - kind: "Secret", - metadata: { - name: "" - }, - data: {} - }; + var count = 0; + var builds = _.sortBy($scope.metrics.builds || [], "number"); + angular.forEach(builds, function (build) { + var x = build.number; + var y = build.duration / 1000; + var date = Developer.asDate(build.timeInMillis); + var result = build.result || "NOT_STARTED"; + var color = barColourForBuildResult(result); + var iconClass = Developer.createBuildStatusIconClass(result); + var tooltip = '

' + build.displayName + '

' + + '

duration: ' + y + ' seconds

'; + if (date) { + tooltip += '

started: ' + date + '

'; } - var data = {}; - angular.forEach(entity.properties, function (property) { - var key = property.key; - var value = property.value || ""; - if (key) { - data[key] = window.btoa(value); - } - }); - $scope.secret.metadata.name = name; - $scope.secret.data = data; - Core.notification('info', "Saving secret " + name); - kubeClient.put($scope.secret, function (data) { - var secretsLink = onSaveUrl || Developer.namespaceLink($scope, $routeParams, "secrets"); - var params = {}; - if (onSaveUrl) { - params['secret'] = name; + if (result) { + tooltip += '

result: ' + result + '

'; + } + if (x) { + var data = buildsSucceeded; + var key = successBuildKey; + if (!successBuildKey && (!result || !result.startsWith("SUCC"))) { + data = buildsFailed; + key = failedBuildKey; } - $location.path(secretsLink); - $location.search(params); - Kubernetes.log.info("navigating to URL: " + secretsLink + " with params " + angular.toJson($location.search())); - }, function (err) { - Core.notification('error', "Failed to secret " + name + "\n" + err); - }); - } - }; - updateData(); - function createProperty(key, text) { - var label = secretLabels[key] || Core.humanizeValue(key); - var tooltip = secretTooltips[key] || "Value of the " + label; - var rows = 5; - var lines = text.split("\n").length + 1; - if (lines > rows) { - rows = lines; - } - var type = "textarea"; - if (key === "username") { - type = "text"; - if (!text) { - text = Kubernetes.currentUserName(); + data.push({ + tooltip: tooltip, + color: color, + x: x, y: y }); } + }); + $scope.data = []; + if (buildsSucceeded.length) { + $scope.data.push({ + key: successBuildKey, + values: buildsSucceeded + }); } - else if (key === "password") { - type = "password"; - } - var property = { - key: key, - label: label, - tooltip: tooltip, - rows: rows, - value: text, - type: type - }; - return property; + if (buildsFailed.length) { + $scope.data.push({ + key: failedBuildKey, + values: buildsFailed + }); + } + $scope.api.updateWithData($scope.data); + $timeout(function () { + $scope.api.update(); + }, 50); } function updateData() { - $scope.item = null; - $scope.changed = false; - $scope.entity = { - name: $scope.id, - properties: {} - }; - if ($scope.id) { - angular.forEach($scope.model.secrets, function (secret) { - var name = Kubernetes.getName(secret); - if (name === $scope.id) { - $scope.secret = secret; - angular.forEach(secret.data, function (value, key) { - var text = ""; - if (angular.isString(value) && value) { - text = window.atob(value); - } - var property = createProperty(key, text); - $scope.entity.properties[key] = property; - }); - $scope.fetched = true; - Core.$apply($scope); + var metricsPath = $scope.jobId ? UrlHelpers.join("job", $scope.jobId, "fabric8/metrics") : "fabric8/metrics"; + var url = Kubernetes.kubernetesProxyUrlForServiceCurrentNamespace(Developer.jenkinsServiceNameAndPort, metricsPath); + Developer.log.info(""); + if (url && (!$scope.jenkins || Kubernetes.keepPollingModel)) { + $http.get(url, Developer.jenkinsHttpConfig). + success(function (data, status, headers, config) { + if (data) { + if (Developer.hasObjectChanged(data, $scope.entityChangedCache)) { + Developer.log.info("entity has changed!"); + $scope.metrics = data; + updateChartData(); + } } + $scope.model.fetched = true; + Core.$apply($scope); + }). + error(function (data, status, headers, config) { + Developer.log.warn("Failed to load " + url + " " + data + " " + status); }); } - else { - if (createKind === "ssh") { - $scope.addFields($scope.sshKeys); + } + }]); +})(Developer || (Developer = {})); + +/// +/// +/// +/// +/// +var Developer; +(function (Developer) { + Developer.NavBarController = Developer.controller("NavBarController", ["$scope", "$location", "$routeParams", "$timeout", "KubernetesApiURL", + function ($scope, $location, $routeParams, $timeout) { + $scope.isValid = function (item) { + if (item) { + var value = item.isValid; + if (angular.isFunction(value)) { + return value(item); } - else if (createKind === "https") { - $scope.addFields($scope.httpsKeys); + else { + return angular.isUndefined(value) || value; } - $scope.fetched = true; - Core.$apply($scope); } - } + return false; + }; }]); -})(Kubernetes || (Kubernetes = {})); +})(Developer || (Developer = {})); /// -/// -/// -/// -var Kubernetes; -(function (Kubernetes) { - Kubernetes.SecretsController = Kubernetes.controller("SecretsController", ["$scope", "KubernetesModel", "KubernetesState", "ServiceRegistry", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", - function ($scope, KubernetesModel, KubernetesState, ServiceRegistry, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { +/// +/// +/// +/// +var Developer; +(function (Developer) { + Developer.PipelineController = Developer.controller("PipelineController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "ServiceRegistry", + function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, ServiceRegistry) { $scope.kubernetes = KubernetesState; - $scope.model = KubernetesModel; + $scope.kubeModel = KubernetesModel; + $scope.id = $routeParams["id"]; + $scope.jobId = $routeParams["job"]; + $scope.buildId = $routeParams["build"]; + $scope.schema = KubernetesSchema; + $scope.entityChangedCache = {}; + $scope.model = { + stages: null + }; + Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); + $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs($scope.id); + $scope.subTabConfig = Developer.createProjectSubNavBars($scope.id, $scope.jobId); $scope.$on('kubernetesModelUpdated', function () { - Core.$apply($scope); + updateData(); }); - $scope.$createSecretLink = Developer.namespaceLink($scope, $routeParams, "secretCreate"); - var kubeClient = Kubernetes.createKubernetesClient("secrets"); - $scope.tableConfig = { - data: 'model.secrets', - showSelectionCheckbox: true, - enableRowClickSelection: false, - multiSelect: true, - selectedItems: [], - filterOptions: { - filterText: $location.search()["q"] || '' - }, - columnDefs: [ - { - field: '_key', - displayName: 'Name', - defaultSort: true, - cellTemplate: $templateCache.get("idTemplate.html") - }, - { - field: '$labelsText', - displayName: 'Labels', - cellTemplate: $templateCache.get("labelTemplate.html") - }, - ] - }; - $scope.deletePrompt = function (selected) { - UI.multiItemConfirmActionDialog({ - collection: selected, - index: 'metadata.name', - onClose: function (result) { - if (result) { - function deleteSelected(selected, next) { - if (next) { - kubeClient.delete(next, function () { - deleteSelected(selected, selected.shift()); - }); + $scope.$on('$routeUpdate', function ($event) { + updateData(); + }); + updateData(); + function updateData() { + if ($scope.jobId) { + var url = Kubernetes.kubernetesProxyUrlForServiceCurrentNamespace(Developer.jenkinsServiceNameAndPort, UrlHelpers.join("job", $scope.jobId, $scope.buildId, "fabric8/stages/")); + if (url && (!$scope.model.stages || Kubernetes.keepPollingModel)) { + $http.get(url). + success(function (data, status, headers, config) { + if (data) { + Developer.enrichJenkinsStages(data, $scope.id, $scope.jobId); + if (Developer.hasObjectChanged(data, $scope.entityChangedCache)) { + Developer.log.info("entity has changed!"); + $scope.build = data; + $scope.model.stages = data.stages; } - else { + } + $scope.model.fetched = true; + Core.$apply($scope); + }). + error(function (data, status, headers, config) { + Developer.log.warn("Failed to load " + url + " " + data + " " + status); + $scope.model.fetched = true; + }); + } + } + else { + $scope.model.fetched = true; + Core.$apply($scope); + } + } + }]); +})(Developer || (Developer = {})); + +/// +/// +/// +/// +/// +var Developer; +(function (Developer) { + Developer._module.directive("pipelineView", function () { + return { + templateUrl: Developer.templatePath + 'pipelineView.html' + }; + }); +})(Developer || (Developer = {})); + +/// +/// +/// +/// +/// +/// +var Developer; +(function (Developer) { + Developer.PipelinesController = Developer._module.controller("Developer.PipelinesController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "ServiceRegistry", "$element", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, ServiceRegistry, $element) { + $scope.kubernetes = KubernetesState; + $scope.kubeModel = KubernetesModel; + $scope.id = $routeParams["id"]; + $scope.jobId = $scope.jobId || $routeParams["job"]; + $scope.schema = KubernetesSchema; + $scope.entityChangedCache = {}; + $element.on('$destroy', function () { + $scope.$destroy(); + }); + $scope.model = { + job: null, + pendingOnly: $scope.pendingPipelinesOnly + }; + Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); + $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs($scope.id); + $scope.subTabConfig = Developer.createProjectSubNavBars($scope.id, $scope.jobId); + $scope.$on('kubernetesModelUpdated', function () { + updateData(); + }); + $scope.$on('$routeUpdate', function ($event) { + updateData(); + }); + $scope.$watch('model.pendingOnly', function ($event) { + updateData(); + }); + $scope.selectBuild = function (build) { + var id = build.id; + if (id) { + if (id !== $scope.selectedBuildId) { + $scope.selectedBuildId = id; + $scope.$broadcast("jenkinsSelectedBuild", build); + } + } + }; + var updateData = _.debounce(function () { + var entity = $scope.entity; + if ($scope.jobId) { + if ((!entity || entity.$jenkinsJob)) { + var queryPath = "fabric8/stages/"; + if ($scope.model.pendingOnly) { + queryPath = "fabric8/pendingStages/"; + } + var url = Kubernetes.kubernetesProxyUrlForServiceCurrentNamespace(Developer.jenkinsServiceNameAndPort, UrlHelpers.join("job", $scope.jobId, queryPath)); + if (url && (!$scope.model.job || Kubernetes.keepPollingModel)) { + $http.get(url). + success(function (data, status, headers, config) { + if (data) { + Developer.enrichJenkinsPipelineJob(data, $scope.id, $scope.jobId); + if (Developer.hasObjectChanged(data, $scope.entityChangedCache)) { + Developer.log.info("entity has changed!"); + $scope.model.job = data; + var builds = data.builds; + if (builds && builds.length) { + $scope.selectBuild(builds[0]); + } } } - deleteSelected(selected, selected.shift()); - } - }, - title: 'Delete Secrets', - action: 'The following Secrets will be deleted:', - okText: 'Delete', - okClass: 'btn-danger', - custom: "This operation is permanent once completed!", - customClass: "alert alert-warning" - }).open(); - }; - Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); - }]); -})(Kubernetes || (Kubernetes = {})); - -/// -/// -/// -var Kubernetes; -(function (Kubernetes) { - Kubernetes.ServiceController = Kubernetes.controller("ServiceController", ["$scope", "KubernetesModel", "KubernetesState", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", - function ($scope, KubernetesModel, KubernetesState, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { - $scope.kubernetes = KubernetesState; - $scope.model = KubernetesModel; - $scope.rawModel = null; - Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); - $scope.itemConfig = { - properties: { - '^\\/labels$': { - template: $templateCache.get('labelTemplate.html') + $scope.model.fetched = true; + Core.$apply($scope); + }). + error(function (data, status, headers, config) { + Developer.log.warn("Failed to load " + url + " " + data + " " + status); + $scope.model.fetched = true; + }); } } - }; - $scope.$on('kubernetesModelUpdated', function () { - updateData(); - }); - $scope.$watch('model.services', function (newValue, oldValue) { - updateData(); - }, true); - $scope.$on('$routeUpdate', function ($event) { - updateData(); - }); - $scope.flipRaw = function () { - $scope.rawMode = !$scope.rawMode; - Core.$apply($scope); - }; - updateData(); - function updateData() { - $scope.id = $routeParams["id"]; - $scope.namespace = $routeParams["namespace"] || KubernetesState.selectedNamespace; - $scope.item = $scope.model.getService($scope.namespace, $scope.id); - if ($scope.item) { - $scope.rawModel = Kubernetes.toRawYaml($scope.item); + else { + if ($scope.model) { + Kubernetes.enrichBuilds($scope.kubeModel.builds); + var builds = []; + angular.forEach($scope.kubeModel.builds, function (build) { + var labels = Kubernetes.getLabels(build); + var app = labels["app"]; + if (app === $scope.projectId) { + builds.push(build); + } + }); + builds = _.sortBy(builds, "$creationDate").reverse(); + var allBuilds = builds; + if (allBuilds.length > 1) { + builds = _.filter(allBuilds, function (b) { return !b.$creationDate; }); + if (!builds.length) { + builds = [allBuilds[0]]; + } + } + var pipelines = []; + angular.forEach(builds, function (build) { + var buildStatus = build.status || {}; + var result = buildStatus.phase || ""; + var resultUpperCase = result.toUpperCase(); + var description = ""; + var $viewLink = build.$viewLink; + var $logLink = build.$logsLink; + var $timestamp = build.$creationDate; + var duration = buildStatus.duration; + if (duration) { + // 17s = 17,000,000,000 on openshift + duration = duration / 1000000; + } + var displayName = Kubernetes.getName(build); + var $iconClass = Developer.createBuildStatusIconClass(resultUpperCase); + var $backgroundClass = Developer.createBuildStatusBackgroundClass(resultUpperCase); + var stage = { + stageName: "OpenShift Build", + $viewLink: $viewLink, + $logLink: $logLink, + $startTime: $timestamp, + duration: duration, + status: result, + $iconClass: $iconClass, + $backgroundClass: $backgroundClass + }; + var pipeline = { + description: description, + displayName: displayName, + $viewLink: $viewLink, + $logLink: $logLink, + $timestamp: $timestamp, + duration: duration, + stages: [stage] + }; + pipelines.push(pipeline); + }); + // lets filter the OpenShift builds and make a pipeline from that + $scope.model.job = { + $jobId: $scope.jobId, + $project: $scope.projectId, + builds: pipelines + }; + } + $scope.model.fetched = true; + Core.$apply($scope); } + } + else { + $scope.model.fetched = true; Core.$apply($scope); } - }]); -})(Kubernetes || (Kubernetes = {})); + }, 50); + updateData(); + }]); +})(Developer || (Developer = {})); /// -/// -/// -var Kubernetes; -(function (Kubernetes) { - Kubernetes.ServiceEditController = Kubernetes.controller("ServiceEditController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "SchemaRegistry", - function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, schemas) { +/// +/// +/// +/// +var Developer; +(function (Developer) { + Developer.ProjectController = Developer.controller("ProjectController", ["$scope", "$element", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", + function ($scope, $element, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["id"]; $scope.schema = KubernetesSchema; - $scope.config = schemas.cloneSchema("io.fabric8.kubernetes.api.model.Service"); - //$scope.config = KubernetesSchema.definitions.kubernetes_v1beta2_Service; + $scope.config = KubernetesSchema.definitions.os_build_BuildConfig; + $scope.entityChangedCache = {}; + $scope.envVersionsCache = {}; + $scope.envNSCaches = {}; + $scope.envVersions = {}; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); - $scope.$on('$routeUpdate', function ($event) { - updateData(); + $scope.breadcrumbConfig = []; //Developer.createProjectBreadcrumbs($scope.id); + updateTabs(); + // this is used for the pendingPipelines view + $scope.jobId = $scope.id; + $scope.pendingPipelinesOnly = true; + $scope.$on('jenkinsSelectedBuild', function (event, build) { + $scope.selectedBuild = build; }); - updateData(); - function updateData() { - if ($scope.id) { - $scope.entity = $scope.model.getService(KubernetesState.selectedNamespace, $scope.id); - Core.$apply($scope); - $scope.fetched = true; - } - else { - $scope.fetched = true; - } + // TODO this should be unnecessary but seems sometiems this watch doesn't always trigger unless you hit reload on this page + if ($scope.model.buildconfigs) { + onBuildConfigs($scope.model.buildconfigs); } - }]); -})(Kubernetes || (Kubernetes = {})); - -/// -/// -/// -/// -var Kubernetes; -(function (Kubernetes) { - Kubernetes._module.factory('ServiceRegistry', [function () { - return new ServiceRegistryService(); - }]); - /** - * Represents a simple interface to service discovery that can be used early on in the application lifecycle before the - * underlying model has been created via dependency injection - */ - var ServiceRegistryService = (function () { - function ServiceRegistryService() { - this.model = null; - } - /** - * Returns true if there is a service available for the given ID or false - */ - ServiceRegistryService.prototype.hasService = function (serviceName) { - return this.findService(serviceName) ? true : false; - }; - /** - * Returns the service for the given service name (ID) or null if it cannot be found - * - * @param serviceName the name of the service to look for - * @return {null} - */ - ServiceRegistryService.prototype.findService = function (serviceName) { - var answer = null; - if (serviceName) { - var model = this.getModel(); - if (model) { - var namespace = model.currentNamespace(); - return model.getService(namespace, serviceName); + Kubernetes.watch($scope, $element, "buildconfigs", $scope.namespace, onBuildConfigs); + function onBuildConfigs(buildConfigs) { + angular.forEach(buildConfigs, function (data) { + var name = Kubernetes.getName(data); + if (name === $scope.id) { + var sortedBuilds = null; + Kubernetes.enrichBuildConfig(data, sortedBuilds); + if (Developer.hasObjectChanged(data, $scope.entityChangedCache)) { + Developer.log.info("entity has changed!"); + $scope.entity = data; + $scope.entity.$build = (data.$fabric8CodeViews || {})['fabric8.link.browseGogs.view']; + $scope.model.setProject($scope.entity); + } + updateEnvironmentWatch(); + updateTabs(); + } + }); + $scope.model.fetched = true; + Core.$apply($scope); + } + /** + * We have updated the entity so lets make sure we are watching all the environments to find + * the project versions for each namespace + */ + function updateEnvironmentWatch() { + var project = $scope.entity; + if (project) { + var jenkinsJob = project.$jenkinsJob; + if (jenkinsJob) { + var buildsTab = _.find($scope.subTabConfig, { id: "builds" }); + if (buildsTab) { + buildsTab["href"] = UrlHelpers.join("/workspaces", Kubernetes.currentKubernetesNamespace(), "projects", $scope.id, "jenkinsJob", jenkinsJob); + } + } + angular.forEach(project.environments, function (env) { + var ns = env.namespace; + var caches = $scope.envNSCaches[ns]; + if (!caches) { + caches = {}; + $scope.envNSCaches[ns] = caches; + Developer.loadProjectVersions($scope, $element, project, env, ns, $scope.envVersions, caches); + } + }); } } - return answer; - }; - /** - * Returns the service link for the given service name - * - * @param serviceName the name of the service - * @return {null} - */ - ServiceRegistryService.prototype.serviceLink = function (serviceName) { - var service = this.findService(serviceName); - return Kubernetes.serviceLinkUrl(service); - }; - /** - * Returns the service link for the given service name if its ready (has at least one ready pod) - * - * @param serviceName the name of the service - * @return {null} - */ - ServiceRegistryService.prototype.serviceReadyLink = function (serviceName) { - var service = this.findService(serviceName); - if (Kubernetes.readyPodCount(service)) { - return Kubernetes.serviceLinkUrl(service); + function updateTabs() { + $scope.subTabConfig = Developer.createProjectSubNavBars($scope.id, null, $scope); } - else { - return null; + }]); +})(Developer || (Developer = {})); + +/// +var Developer; +(function (Developer) { + Developer._module.controller('Developer.ProjectSelector', ['$scope', '$routeParams', 'KubernetesModel', function ($scope, $routeParams, KubernetesModel) { + var projectId = $routeParams['projectId'] || $routeParams['project'] || $routeParams['id']; + if (projectId) { + $scope.projectId = projectId; + $scope.model = KubernetesModel; + $scope.$watch('model.buildconfigs', function (buildconfigs) { + $scope.projects = buildconfigs; + }); } - }; - ServiceRegistryService.prototype.getModel = function () { - var answer = this.model; - // lets allow lazy load so we can be invoked before the injector has been created - if (!answer) { - var injector = HawtioCore.injector; - if (injector) { - this.model = injector.get('KubernetesModel'); - } + else { + Developer.log.info("no project ID in routeParams: ", $routeParams); } - answer = this.model; - return answer; - }; - return ServiceRegistryService; - }()); - Kubernetes.ServiceRegistryService = ServiceRegistryService; -})(Kubernetes || (Kubernetes = {})); + }]); +})(Developer || (Developer = {})); /// -/// -/// -var Kubernetes; -(function (Kubernetes) { - Kubernetes.ServiceApps = Kubernetes._module.controller('Kubernetes.ServiceApps', ["$scope", "KubernetesModel", function ($scope, KubernetesModel) { - $scope.model = KubernetesModel; - }]); - Kubernetes.Services = Kubernetes.controller("Services", ["$scope", "KubernetesModel", "KubernetesServices", "KubernetesPods", "KubernetesState", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", - function ($scope, KubernetesModel, KubernetesServices, KubernetesPods, KubernetesState, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { +/// +/// +/// +/// +var Developer; +(function (Developer) { + Developer.ProjectsController = Developer.controller("ProjectsController", ["$scope", "KubernetesModel", "KubernetesState", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", + function ($scope, KubernetesModel, KubernetesState, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; - ControllerHelpers.bindModelToSearchParam($scope, $location, 'mode', 'mode', 'list'); $scope.tableConfig = { - data: 'model.services', + data: 'model.buildconfigs', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, @@ -17228,498 +17737,629 @@ var Kubernetes; filterText: $location.search()["q"] || '' }, columnDefs: [ - { field: '_key', + { + field: '$name', displayName: 'Name', cellTemplate: $templateCache.get("idTemplate.html") }, - { field: '$serviceUrl', - displayName: 'Address', - cellTemplate: $templateCache.get("portalAddress.html") + /* + { + field: 'spec.source.type', + displayName: 'Source' + }, + */ + { + field: 'spec.source.git.uri', + displayName: 'Repository' }, - { field: '$podCount', - displayName: 'Pods', - cellTemplate: $templateCache.get("podCountsAndLinkTemplate.html"), - customSortField: function (field) { - // need to concat all the pod counters - var ready = field.$podCounters.ready || 0; - var valid = field.$podCounters.valid || 0; - var waiting = field.$podCounters.waiting || 0; - var error = field.$podCounters.error || 0; - return ready + valid + waiting + error; - } + /* + { + field: 'spec.strategy.type', + displayName: 'Strategy' + }, + { + field: 'spec.strategy.stiStrategy.image', + displayName: 'Source Image' + }, + { + field: 'spec.output.imageTag', + displayName: 'Output Image' + }, + */ + { + field: 'metadata.description', + displayName: 'Description' }, - { field: '$selectorText', - displayName: 'Selector', - cellTemplate: $templateCache.get("selectorTemplate.html") + { + field: '$creationDate', + displayName: 'Created', + cellTemplate: $templateCache.get("creationTimeTemplate.html") }, - { field: '$labelsText', + { + field: '$labelsText', displayName: 'Labels', cellTemplate: $templateCache.get("labelTemplate.html") } ] }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); + $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs(); + $scope.subTabConfig = Developer.createWorkspaceSubNavBars(); + // TODO + //$scope.isLoggedIntoGogs = Forge.isLoggedIntoGogs; $scope.deletePrompt = function (selected) { - if (angular.isString(selected)) { - selected = [{ - id: selected - }]; - } UI.multiItemConfirmActionDialog({ collection: selected, - index: 'metadata.name', + index: '$name', onClose: function (result) { if (result) { function deleteSelected(selected, next) { if (next) { - Kubernetes.log.debug("deleting: ", Kubernetes.getName(next)); - KubernetesServices.delete({ - id: Kubernetes.getName(next) - }, undefined, function () { - Kubernetes.log.debug("deleted: ", Kubernetes.getName(next)); - deleteSelected(selected, selected.shift()); - }, function (error) { - Kubernetes.log.debug("Error deleting: ", error); + deleteEntity(next, function () { deleteSelected(selected, selected.shift()); }); } + else { + } } deleteSelected(selected, selected.shift()); } }, - title: 'Delete services?', - action: 'The following services will be deleted:', + title: 'Delete Apps', + action: 'The following Apps will be deleted:', okText: 'Delete', okClass: 'btn-danger', custom: "This operation is permanent once completed!", customClass: "alert alert-warning" }).open(); }; + function deleteEntity(selection, nextCallback) { + var name = (selection || {}).$name; + var jenkinsJob = selection.$jenkinsJob; + var publicJenkinsUrl = Developer.jenkinsLink(); + //var jenkinsUrl = Core.pathGet(selection, ["$fabric8Views", "fabric8.link.jenkins.job", "url"]); + if (name) { + console.log("About to delete build config: " + name); + var url = Kubernetes.buildConfigRestUrl(name); + $http.delete(url). + success(function (data, status, headers, config) { + nextCallback(); + }). + error(function (data, status, headers, config) { + Developer.log.warn("Failed to delete build config on " + url + " " + data + " " + status); + nextCallback(); + }); + } + else { + console.log("warning: no name for selection: " + angular.toJson(selection)); + } + if (jenkinsJob && publicJenkinsUrl) { + var url = Kubernetes.kubernetesProxyUrlForServiceCurrentNamespace(Developer.jenkinsServiceNameAndPort, UrlHelpers.join("job", jenkinsJob, "doDelete")); + var body = ""; + var config = { + headers: { + 'Content-Type': "text/plain" + } + }; + Developer.log.info("posting to jenkinsUrl: " + url); + $http.post(url, body, config). + success(function (data, status, headers, config) { + Developer.log.info("Managed to delete " + url); + }). + error(function (data, status, headers, config) { + Developer.log.warn("Failed to delete jenkins job at " + url + " " + data + " " + status); + }); + } + } + /* + $scope.$keepPolling = () => Kubernetes.keepPollingModel; + $scope.fetch = PollHelpers.setupPolling($scope, (next:() => void) => { + var url = Kubernetes.buildConfigsRestURL(); + $http.get(url). + success(function (data, status, headers, config) { + if (data) { + //console.log("got data " + angular.toJson(data, true)); + var sortedBuilds = null; + $scope.buildConfigs = Kubernetes.enrichBuildConfigs(data.items, sortedBuilds); + $scope.model.fetched = true; + Core.$apply($scope); + next(); + } + }). + error(function (data, status, headers, config) { + log.warn("Failed to load " + url + " " + data + " " + status); + next(); + }); + }); + + $scope.fetch(); + */ + }]); +})(Developer || (Developer = {})); + +/// +/// +/// +/// +/// +var Developer; +(function (Developer) { + Developer.WorkspaceController = Developer.controller("WorkspaceController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", + function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { + $scope.kubernetes = KubernetesState; + $scope.model = KubernetesModel; + $scope.id = $routeParams["namespace"]; + $scope.schema = KubernetesSchema; + $scope.config = KubernetesSchema.definitions.kubernetes_Namespace; + Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); + $scope.breadcrumbConfig = Developer.createWorkspaceBreadcrumbs(); + $scope.subTabConfig = Developer.createWorkspaceSubNavBars(); + $scope.$keepPolling = function () { return Kubernetes.keepPollingModel; }; + $scope.fetch = PollHelpers.setupPolling($scope, function (next) { + $scope.item = null; + if ($scope.id) { + var url = UrlHelpers.join(Kubernetes.resourcesUriForKind("Projects"), $scope.id); + Developer.log.info("Loading url: " + url); + $http.get(url). + success(function (data, status, headers, config) { + if (data) { + $scope.entity = Developer.enrichWorkspace(data); + } + $scope.model.fetched = true; + Core.$apply($scope); + next(); + }). + error(function (data, status, headers, config) { + Developer.log.warn("Failed to load " + url + " " + data + " " + status); + next(); + }); + } + else { + $scope.model.fetched = true; + Core.$apply($scope); + next(); + } + }); + $scope.fetch(); }]); -})(Kubernetes || (Kubernetes = {})); +})(Developer || (Developer = {})); /// -/// -/// -var Kubernetes; -(function (Kubernetes) { - // controller for the status icon cell - Kubernetes.PodStatus = Kubernetes.controller("PodStatus", ["$scope", function ($scope) { - $scope.statusMapping = function (text) { - return Kubernetes.statusTextToCssClass(text); +/// +/// +/// +/// +var Developer; +(function (Developer) { + Developer.WorkspacesController = Developer.controller("WorkspacesController", ["$scope", "KubernetesModel", "KubernetesState", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "DataInfoModel", "$interval", + function ($scope, KubernetesModel, KubernetesState, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, DataInfoModel, $interval) { + $scope.model = DataInfoModel; + $scope.items = []; + $scope.localitems = []; + var rootPath = ""; + var FilterList = { + length: 0 }; - }]); - Kubernetes._module.controller("Kubernetes.TermController", ["$scope", "TerminalService", function ($scope, TerminalService) { - $scope.canConnectTo = function (container) { - if (container.securityContext && container.securityContext.privileged) { - return false; - } - return true; - }; - $scope.openTerminal = function (selfLink, containerName) { - var id = TerminalService.newTerminal(selfLink, containerName); - Kubernetes.log.debug("Created terminal, id: ", id); - }; - }]); - // controller that deals with the labels per pod - Kubernetes.Labels = Kubernetes.controller("Labels", ["$scope", "$location", function ($scope, $location) { - $scope.labels = []; - var labelKeyWeights = { - "name": 1, - "replicationController": 2, - "group": 3 + update(); + $scope.treeOptions = { + nodeChildren: "children", + dirSelectable: true, + multiSelection: false, + injectClasses: { + ul: "a1", + li: "a2", + liSelected: "a7", + iExpanded: "a3", + iCollapsed: "a4", + iLeaf: "a5", + label: "a6", + labelSelected: "a8" + } }; - $scope.$watch('entity', function (newValue, oldValue) { - if (newValue) { - // log.debug("labels: ", newValue); - // massage the labels a bit - $scope.labels = []; - angular.forEach(Core.pathGet($scope.entity, ["metadata", "labels"]), function (value, key) { - if (key === 'fabric8' || key === 'style' || key === 'status') { - // TODO not sure what this is for, the container type? - return; - } - $scope.labels.push({ - key: key, - title: value - }); - }); - // lets sort by key but lets make sure that we weight certain labels so they are first - $scope.labels = $scope.labels.sort(function (a, b) { - function getWeight(key) { - return labelKeyWeights[key] || 1000; - } - var n1 = a["key"]; - var n2 = b["key"]; - var w1 = getWeight(n1); - var w2 = getWeight(n2); - var diff = w1 - w2; - if (diff < 0) { - return -1; - } - else if (diff > 0) { - return 1; - } - if (n1 && n2) { - if (n1 > n2) { - return 1; - } - else if (n1 < n2) { - return -1; + $scope.treeOptionss = { + nodeChildren: "children", + dirSelectable: true, + multiSelection: true, + injectClasses: { + ul: "a1", + li: "a2", + liSelected: "a7", + iExpanded: "a3", + iCollapsed: "a4", + iLeaf: "a5", + label: "a6", + labelSelected: "a8" + } + }; + $scope.showSelected = function (node, selected) { + $scope.model.serveritems = []; + var array = new Array(); + if (selected) { + if (node.children.length > 0) { + array.unshift(node); + while (array.length > 0) { + var childNode = array.pop(); + if (childNode.children.length > 0) { + for (var i = 0; i < childNode.children.length; i++) + array.unshift(childNode.children[i]); } else { - return 0; + if (childNode.hasOwnProperty("path")) + $scope.model.serveritems.push(childNode); } } - else { - if (n1 === n2) { - return 0; - } - else if (n1) { - return 1; - } - else { - return -1; - } + } + else { + if (node.hasOwnProperty("path")) + $scope.model.serveritems.push(node); + } + } + }; + $scope.dataForTheTree = $scope.model.serverdata; + $scope.dataForTheTreeLocal = $scope.model.localdata; + $scope.$watch('model.serverdata', function (newValue, oldValue) { + if (newValue) { + $scope.dataForTheTree = $scope.model.serverdata; + } + }); + $scope.$watch('model.localdata', function (newValue, oldValue) { + if (newValue) { + $scope.dataForTheTreeLocal = $scope.model.localdata; + } + }); + $scope.upLoadXMLFile = function (files) { + FilterList.length = 0; + if (files.length > 0) { + var j = 0; + for (var i = 0; i < files.length; i++) { + if (files[i].name.indexOf("data.xml") != -1) { + //console.log(files[i]); + rootPath = files[i].webkitRelativePath.replace(/\/data.xml$/, ""); + var reader = new FileReader(); + var resultString = "{\"name\": \"数据\", \"children\":["; + reader.onload = function () { + var str = event.target.result; + // alert(str); + var item = ""; + var itemEnd = ""; + // ´ý·µ»ØµÄ½á¹û£º + if (str != undefined) { + // Õû¸öxml ÍêÕûÊý¾Ý£ºxmldata + var xmldata = str.toString(); + // °´¶ÔÏó·ÖµÄÊý¾Ý£º + var itemArray = xmldata.split(item); + var itemsize = itemArray.length; + for (var k = 1; k < itemsize; k++) { + var itemvalue = itemArray[k].split(itemEnd); + // province + var provinceValueTemp = itemvalue[0].split(""); + var provinceValue = provinceValueTemp[provinceValueTemp.length - 1].split("")[0]; + //city + var cityValueTemp = itemvalue[0].split(""); + var cityValue = cityValueTemp[cityValueTemp.length - 1].split("")[0]; + // county + var countyValueTemp = itemvalue[0].split(""); + var countyValue = countyValueTemp[countyValueTemp.length - 1].split("")[0]; + // + var codeValueTemp = itemvalue[0].split(""); + var codeValue = codeValueTemp[codeValueTemp.length - 1].split("")[0]; + // + var sys_nameValueTemp = itemvalue[0].split(""); + var sys_nameValue = sys_nameValueTemp[sys_nameValueTemp.length - 1].split("")[0]; + // + var character_setValueTemp = itemvalue[0].split(""); + var character_setValue = character_setValueTemp[character_setValueTemp.length - 1].split("")[0]; + // + var sys_name_codeValueTemp = itemvalue[0].split(""); + var sys_name_codeValue = sys_name_codeValueTemp[sys_name_codeValueTemp.length - 1].split("")[0]; + // + var contactValueTemp = itemvalue[0].split(""); + var contactValue = contactValueTemp[contactValueTemp.length - 1].split("")[0]; + // + var phoneValueTemp = itemvalue[0].split(""); + var phoneValue = phoneValueTemp[phoneValueTemp.length - 1].split("")[0]; + // + var dateValueTemp = itemvalue[0].split(""); + var dateValue = dateValueTemp[dateValueTemp.length - 1].split("")[0]; + //id : + var itemId = codeValue + "_" + sys_name_codeValue; + // http get version + var rid = itemId; //.replace(/\"/g, ""); + // TODO typeValue 通过前端页面获取或者??,财政01或社保02 + var typeValue = "01"; + // TODO batchValue 通过前端页面获取或者??,批次A :大写的A,批次B :大写的B, + var batchValue = "A"; + var itemname = cityValue + countyValue + sys_nameValue; + var versionid = 1; + var xhr = new XMLHttpRequest(); + xhr.onreadystatechange = function () { + if (xhr.readyState == 4) { + if (xhr.status == 200) { + versionid = xhr.responseText; + } + } + }; + xhr.open("get", "/getversion?id=" + rid, false); + xhr.send(null); + var jsobj = JSON.parse(versionid); + var xmlversion = jsobj.id; + var properValue = "{\"id\":\"" + itemId + "\", \"name\":\"" + itemname + "\", \"city\":\"" + + cityValue + "\", \"county\":\"" + countyValue + "\", \"system\":\"" + + sys_nameValue + "\", \"type\":\"" + typeValue + "\",\"batch\":\"" + + batchValue + "\",\"version\":\"" + xmlversion + "\", \"province\":\"" + + provinceValue + "\", \"code\":\"" + + codeValue + "\", \"character_set\":\"" + + character_setValue + "\", \"sys_name_code\":\"" + + sys_name_codeValue + "\", \"contact\":\"" + + contactValue + "\", \"phone\":\"" + + phoneValue + "\", \"date\":\"" + + dateValue + "\"}"; + resultString = resultString + properValue; + if (k < itemsize - 1) { + resultString = resultString + ", "; + } + } + resultString = resultString + "]}"; + } + $scope.$apply(function () { + $scope.model.localdata = JSON.parse(resultString.toString()); + }); + }; + reader.readAsText(files[i], "utf-8"); + } + else { + FilterList.length += 1; + var file_id = files[i].name.replace(/\.\w*$/, ''); + // var file_id=file[i].webkitRelativePath.replace(/^[a-z]*\/$/,''); + // file_id = file_id.replace(/\/\w+$/,''); + FilterList[j++] = files[i]; } - }); - } - }); - $scope.handleClick = function (entity, labelType, value) { - // log.debug("handleClick, entity: ", entity, " key: ", labelType, " value: ", value); - $scope.$emit('labelFilterUpdate', value.title); - }; - $scope.labelClass = Kubernetes.containerLabelClass; - }]); - //服务状态过滤 - Kubernetes.Status = Kubernetes.controller('Status', ["$scope", "$http", "$interval", "$location", "KubernetesApiURL", function ($scope, $http, $interval, $location, KubernetesApiURL) { - $scope.$watch('entity', function (newValue, oldValue) { - if (newValue) - console.log(newValue); - }, true); - }]); -})(Kubernetes || (Kubernetes = {})); - -/// -/// -/// -var Kubernetes; -(function (Kubernetes) { - Kubernetes._module.directive("hawtioTabs", ['HawtioSubTabs', function (HawtioSubTabs) { - return { - link: function (scope, element, attrs) { - HawtioSubTabs.apply(scope.$eval('subTabConfig')); - } - }; - }]); -})(Kubernetes || (Kubernetes = {})); - -/// -var Kubernetes; -(function (Kubernetes) { - Kubernetes.TemplateController = Kubernetes.controller("TemplateController", [ - "$scope", "$location", "$http", "$timeout", "$routeParams", "marked", "$templateCache", "$modal", "KubernetesModel", "KubernetesState", "KubernetesApiURL", - function ($scope, $location, $http, $timeout, $routeParams, marked, $templateCache, $modal, KubernetesModel, KubernetesState, KubernetesApiURL) { - var model = $scope.model = KubernetesModel; - $scope.filterText = $location.search()["q"]; - $scope.targetNamespace = $routeParams.targetNamespace; - Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); - $scope.$watchCollection('model.namespaces', function () { - if (!$scope.targetNamespace) { - $scope.targetNamespace = model.currentNamespace(); - } - }); - var returnTo = new URI($location.search()['returnTo'] || '/kubernetes/apps'); - function goBack() { - $location.path(returnTo.path()).search(returnTo.query(true)); - } - function getAnnotations(obj) { - return Core.pathGet(obj, ['metadata', 'annotations']); - } - function getValueFor(obj, key) { - var annotations = getAnnotations(obj); - if (!annotations) { - return ""; - } - var name = Kubernetes.getName(obj); - if (name) { - var fullKey = "fabric8." + name + "/" + key; - var answer = annotations[fullKey]; - if (answer) { - return answer; } } - var key = _.find(_.keys(annotations), function (k) { return _.endsWith(k, key); }); - if (key) { - return annotations[key]; - } - else { - return ""; - } - } - $scope.cancel = function () { - if ($scope.formConfig) { - delete $scope.formConfig; - delete $scope.entity; - $scope.objects = undefined; - return; - } - goBack(); - }; - /* - $scope.$watch('model.templates.length', (newValue) => { - if (newValue === 0) { - goBack(); - } - }); - */ - $scope.filterTemplates = function (template) { - if (Core.isBlank($scope.filterText)) { - return true; - } - return _.contains(angular.toJson(template), $scope.filterText.toLowerCase()); - }; - $scope.openFullDescription = function (template) { - var text = marked(getValueFor(template, 'description') || 'No description'); - var modal = $modal.open({ - templateUrl: UrlHelpers.join(Kubernetes.templatePath, 'templateDescription.html'), - controller: ['$scope', '$modalInstance', function ($scope, $modalInstance) { - $scope.text = text, - $scope.ok = function () { - modal.close(); - }; - }] - }); - }; - $scope.getDescription = function (template) { - var answer = $(marked(getValueFor(template, 'description') || 'No description')); - var textDefault = answer.html(); - var maxLength = 200; - if (textDefault.length > maxLength) { - var truncated = $.trim(textDefault).substring(0, maxLength).split(' ').slice(0, -1).join(' '); - answer.html(truncated + '...'); - answer.append($templateCache.get('truncatedDescriptionTag.html')); - } - return answer.html(); - }; - $scope.getIconUrl = function (template) { - return getValueFor(template, 'iconUrl') || Kubernetes.defaultIconUrl; + $scope.model.uploadprocess = {}; }; - $scope.deployTemplate = function (template) { - Kubernetes.log.debug("Template parameters: ", template.parameters); - Kubernetes.log.debug("Template objects: ", template.objects); - Kubernetes.log.debug("Template annotations: ", template.metadata.annotations); - var templateAnnotations = template.metadata.annotations; - if (templateAnnotations) { - _.forEach(template.objects, function (object) { - var annotations = object.metadata.annotations || {}; - var name = Kubernetes.getName(object); - var matches = _.filter(_.keys(templateAnnotations), function (key) { return key.match('.' + name + '/'); }); - matches.forEach(function (match) { - if (!(match in annotations)) { - annotations[match] = templateAnnotations[match]; - } - }); - object.metadata.annotations = annotations; - }); + $scope.upLoadFiles = function () { + if ($scope.model.uploadedStatus == "once") { + return; } - var routeServiceName = undefined; - var service = _.find(template.objects, function (obj) { - if (Kubernetes.getKind(obj) === "Service") { - var ports = Kubernetes.getPorts(obj); - if (ports && ports.length === 1) { - return true; + $scope.model.uploadedStatus = "once"; + $scope.model.createFolderList(FilterList, rootPath); + if ($scope.model.folderList.length > 0 && $scope.model.selectednodes.length > 0) { + var isNotExited = []; + var isExited = []; + for (var node in $scope.model.selectednodes) { + if (!$scope.model.folderList.hasOwnProperty($scope.model.selectednodes[node].id)) { + isNotExited.push($scope.model.selectednodes[node]); + } + else { + if ($scope.model.uploadprocess[$scope.model.selectednodes[node].id] === 'undefined' || $scope.model.uploadprocess[$scope.model.selectednodes[node].id] === 0) + isExited.push($scope.model.selectednodes[node]); } } + if (isNotExited.length > 0) { + var str = "以下数据文件不存在:\n\r文件名:\n"; + for (var item in isNotExited) + str += isNotExited[item].id + "\n"; + alert(str); + } + if (isExited.length <= 0) { + alert("数据文件中没有可用上传的文件!"); + } else { - return false; + var isuploaad = 1, i = 0; + var timerForUpload = $interval(function () { + if (i >= isExited.length) { + // clearInterval(timerForUpload); + $interval.cancel(timerForUpload); + } + if (isuploaad == 1) { + var r = new Resumable({ + target: '/uploadfiles', + chunkSize: 50 * 1024 * 1024, + simultaneousUploads: 400, + testChunks: true, + throttleProgressCallbacks: 1 + }); + var xhr = new XMLHttpRequest(); + xhr.open("GET", "/getclientip", true); + xhr.onreadystatechange = function () { + if (xhr.readyState == 4) { + if (xhr.status == 200) { + r.setip(xhr.responseText); + } + } + }; + xhr.send(null); + r.on('fileAdded', function (file) { + r.upload(); + update(); + }); + $scope.model.resumablejs.push({ + dirname: isExited[i].id, + resumable: r + }); + r.setRootPath(isExited[i].type + "/" + isExited[i].batch + "/" + isExited[i].id + "/" + isExited[i].version + "/"); + r.myLoadFiles($scope.model.folderList[isExited[i].id]); + r.upload(); + r.on('fileProgress', function (file) { + var file_id = file.relativePath.replace(/^[a-z]*\/$/, ''); + var filestr = ""; + var reg = /\/[0-9]*_*[0-9]*\//g; + var resultstr; + while ((resultstr = reg.exec(file_id)) != null) { + filestr = resultstr[0]; + } + file_id = filestr.replace(/\/*/g, ''); + r.setFileId(file_id); + // $scope.$apply(function(){ + $scope.model.uploadprocess[file_id] = Math.floor(r.progress() * 98); + // }); + }); + r.on('complete', function () { + var timerForchmod = setInterval(function () { + var pathjson = "\"path\":\"" + r.getrootPath() + "\""; + var datamessage = { "path": r.getrootPath(), "filenum": $scope.model.folderList[isExited[i - 1].id].length }; + $scope.model.uploadprocess[r.getFileId()] = Math.round(r.progress() * 99); + $http({ + url: '/setchmod2dir', + method: 'GET', + params: datamessage + }).success(function (data, header, config, status) { + if (data) { + //console.log(data); + var clientdata = data; + if (clientdata == "chmod") { + sendDateMessage(isExited[i - 1]); + r.setisnowcheck("1"); + r.mkRetfileUploadSucceed(); + clearInterval(timerForchmod); + } + } + }).error(function (data, header, config, status) { + console.log("-----sendDateMessage-------------" + status); + }); + }, 5000); + }); + i++; + isuploaad = 0; + r.on('fileuploadendsucceed', function () { + $scope.model.uploadprocess[r.getFileId()] = Math.floor(r.progress() * 100); + $timeout(function () { + $http({ + url: '/xmlformserver', + method: 'Post' + }).success(function (data, header, config, status) { + if (data) { + $scope.model.serverdata = data; + } + }).error(function (data, header, config, status) { + console.log("error"); + }); + }, 2000); + isuploaad = 1; + }); + } + }, 2000); } - }); - if (service) { - routeServiceName = Kubernetes.getName(service); - } - Kubernetes.log.debug("Service: ", service); - if ((!routeServiceName || !Kubernetes.isOpenShift) && (!template.parameters || template.parameters.length === 0)) { - Kubernetes.log.debug("No parameters required, deploying objects"); - applyObjects(template.objects); - return; } - var formConfig = { - style: HawtioForms.FormStyle.STANDARD, - hideLegend: true, - properties: {} - }; - var params = template.parameters; - _.forEach(params, function (param) { - var property = {}; - property.label = _.startCase(param.name); - property.description = param.description; - property.default = param.value; - // TODO, do parameters support types? - property.type = 'string'; - formConfig.properties[param.name] = property; - }); - if (routeServiceName && Kubernetes.isOpenShift) { - formConfig.properties.createRoute = { - type: 'boolean', - default: true, - label: "Create Route" - }; - /* - formConfig.properties.routeName = { - type: 'string', - label: 'Route Name', - default: routeServiceName, - 'control-group-attributes': { - 'ng-show': 'entity.createRoute' - } - }; - */ - formConfig.properties.routeServiceName = { - type: 'hidden', - default: routeServiceName - }; - var namespace = Kubernetes.currentKubernetesNamespace(); - // TODO store this in localStorage! - var domain = "vagrant.f8"; - var defaultRouteHostSuffix = '.' + (namespace === "default" ? "" : namespace + ".") + domain; - formConfig.properties.routeHostname = { - type: 'string', - default: defaultRouteHostSuffix, - label: "Route host name suffix", - 'control-group-attributes': { - 'ng-show': 'entity.createRoute' - } - }; + else { + alert("您没有选择需要上传的数据文件,或你选择的文件中不存在指定格式的数据文件!"); } - $scope.entity = {}; - $scope.formConfig = formConfig; - $scope.objects = template.objects; - Kubernetes.log.debug("Form config: ", formConfig); }; - function substitute(str, data) { - return str.replace(/\${\w*}/g, function (match) { - var key = match.replace(/\${/, '').replace(/}/, '').trim(); - return data[key] || match; + function sendDateMessage(datamessage) { + $http({ + url: '/sendDateMessage', + method: 'GET', + params: datamessage + }).success(function (data, header, config, status) { + if (data) + var clientdata = data; + }).error(function (data, header, config, status) { }); } - ; - $scope.substituteAndDeployTemplate = function () { - var objects = $scope.objects; - var objectsText = angular.toJson(objects, true); - // pull these out of the entity object so they're not used in substitutions - var createRoute = $scope.entity.createRoute; - var routeHostnameSuffix = $scope.entity.routeHostname || ""; - var routeName = $scope.entity.routeName; - var routeServiceName = $scope.entity.routeServiceName; - delete $scope.entity.createRoute; - delete $scope.entity.routeHostname; - delete $scope.entity.routeName; - delete $scope.entity.routeServiceName; - objectsText = substitute(objectsText, $scope.entity); - objects = angular.fromJson(objectsText); - if (createRoute) { - var routes = []; - angular.forEach(objects, function (object) { - var kind = object.kind; - var name = Kubernetes.getName(object); - if (name && "Service" === kind) { - var routeHostname = name + routeHostnameSuffix; - var route = { - kind: "Route", - apiVersion: Kubernetes.defaultOSApiVersion, - metadata: { - name: name, - }, - spec: { - host: routeHostname, - to: { - kind: "Service", - name: name - } - } - }; - routes.push(route); - } - }); - objects = objects.concat(routes); + $scope.downLoadFiles = function () { + Kubernetes.connectOracle($http, $timeout, "192.168.0.103:64182", "320614-54-1", 500); + }; + $scope.isSelected = function (node) { + var index = $scope.model.findItemIndex(node); + if (index !== -1) { + $scope.model.selecteditems.splice(index, 1); } - if ($scope.targetNamespace !== model.currentNamespace()) { - $scope.$on('WatcherNamespaceChanged', function () { - Kubernetes.log.debug("Namespace changed"); - setTimeout(function () { - applyObjects(objects); - Core.$apply($scope); - }, 500); - }); - Core.notification('info', "Switching to namespace " + $scope.targetNamespace + " and deploying template"); - model.kubernetes.selectedNamespace = $scope.targetNamespace; + else { + $scope.model.selecteditems.push(node); + } + }; + $scope.showSelectedLocal = function (node, selected) { + var index = $scope.model.findNodes(node); + if (index !== "-1") { + if ($scope.model.uploadprocess[node.id] === 0) + $scope.model.selectednodes.splice(index, 1); } else { - applyObjects(objects); + $scope.model.uploadprocess[node.id] = 0; + $scope.model.selectednodes.push(node); } }; - function applyObjects(objects) { - var projectClient = Kubernetes.createKubernetesClient("projects"); - _.forEach(objects, function (object) { - Kubernetes.log.debug("Object: ", object); - var kind = Kubernetes.getKind(object); - var name = Kubernetes.getName(object); - var ns = Kubernetes.getNamespace(object); - if (kind && name) { - if (ns && ns !== Kubernetes.currentKubernetesNamespace()) { - var project = { - apiVersion: Kubernetes.defaultApiVersion, - kind: "Project", - metadata: { - name: ns, - labels: {} - } - }; - projectClient.put(project, function (data) { - Kubernetes.log.info("Created namespace: " + ns); - }, function (err) { - Kubernetes.log.warn("Failed to create namespace: " + ns + ": " + angular.toJson(err)); + $scope.startOracle = function () { + if ($scope.model.selecteditems.length > 0) { + for (var id in $scope.model.selecteditems) { + var Obj = createRCObj($scope.model.selecteditems[id]); + if (!checkIsRunning(KubernetesModel.replicationControllers, Obj)) { + Kubernetes.createRC(Obj, function (rc) { + console.log(rc.metadata.name); + Kubernetes.connectOracle($http, $timeout, "/connectToOracle", "", rc.metadata.name, 0); }); } - var pluralKind = kind.toLowerCase() + "s"; - var kubeClient = Kubernetes.createKubernetesClient(pluralKind, ns); - kubeClient.put(object, function (data) { - Kubernetes.log.info("updated " + kind + " name: " + name + (ns ? " ns: " + ns : "")); - }, function (err) { - Kubernetes.log.warn("Failed to update " + kind + " name: " + name + (ns ? " ns: " + ns : "") + " error: " + angular.toJson(err)); - }); } + } + }; + function checkIsRunning(replicationControllers, item) { + for (var rc in replicationControllers) { + if (item.name === replicationControllers[rc].metadata.name) + return true; + } + return false; + } + function createRCObj(item) { + var array = item.id.split("_"); + if (array[0] === "10") { + //console.log(item); + return { + "name": item.fakename, + "labels": { + "name": item.fakename + }, + "path": item.path + "app/", + "isTarget": "true" + }; + } + else { + return { + "name": array[2] + "-" + array[3] + "-" + array[4], + "labels": { + "type": array[0], + "batch": array[1], + "region": array[2], + "system": array[3], + "version": array[4] + }, + "path": item.path + "app/", + "isTarget": "false" + }; + } + } + function setchmod2dir(datamessage) { + $http({ + url: '/setchmod2dir', + method: 'GET', + params: datamessage + }).success(function (data, header, config, status) { + if (data) + var clientdata = data; + }).error(function (data, header, config, status) { + console.log("-----sendDateMessage-------------" + status); }); - goBack(); } - $scope.deleteTemplate = function (template) { - UI.multiItemConfirmActionDialog({ - collection: [template], - index: 'metadata.name', - onClose: function (result) { - if (result) { - KubernetesModel['templatesResource'].delete({ - id: template.metadata.name - }, undefined, function () { - KubernetesModel['templatesResource'].query(function (data) { - KubernetesModel.templates = data.items; - }); - }, function (error) { - Kubernetes.log.debug("Error deleting template: ", error); + function update() { + for (var i = 0; i < $scope.model.resumablejs.length; i++) { + var dirId = $scope.model.resumablejs[i].dirname; + var r = $scope.model.resumablejs[i].resumable; + r.on('fileProgress', function (file) { + if (r.getisnowcheck().indexOf("0") == -1) { + $scope.$apply(function () { + $scope.model.uploadprocess[dirId] = Math.floor(r.progress() * 100); }); } - }, - title: 'Delete Template?', - action: 'The following template will be deleted:', - okText: 'Delete', - okClass: 'btn-danger', - custom: "This operation is permanent once completed!", - customClass: "alert alert-warning" - }).open(); - }; + else { + $scope.$apply(function () { + $scope.model.uploadprocess[dirId] = Math.floor(r.progress() * 98); + }); + } + }); + } + } }]); -})(Kubernetes || (Kubernetes = {})); +})(Developer || (Developer = {})); /// var Navigation; @@ -17852,7 +18492,7 @@ var Navigation; hawtioPluginLoader.addModule(Navigation.pluginName); })(Navigation || (Navigation = {})); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluY2x1ZGVzLnRzIiwia3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzSW50ZXJmYWNlcy50cyIsImt1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHMiLCJkZXZlbG9wZXIvdHMvZGV2ZWxvcGVyRW5yaWNoZXJzLnRzIiwiZGV2ZWxvcGVyL3RzL2RldmVsb3BlckhlbHBlcnMudHMiLCJkZXZlbG9wZXIvdHMvZGV2ZWxvcGVyTmF2aWdhdGlvbi50cyIsImRldmVsb3Blci90cy9GaWxlTW9kZS50cyIsImRldmVsb3Blci90cy9kZXZlbG9wZXJQbHVnaW4udHMiLCJkZXZlbG9wZXIvdHMvZW52aXJvbm1lbnRQYW5lbC50cyIsImRldmVsb3Blci90cy9ob21lLnRzIiwiZGV2ZWxvcGVyL3RzL2plbmtpbnNKb2IudHMiLCJkZXZlbG9wZXIvdHMvamVua2luc0pvYnMudHMiLCJrdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNQbHVnaW4udHMiLCJrdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNNb2RlbC50cyIsImRldmVsb3Blci90cy9qZW5raW5zTG9nLnRzIiwiZGV2ZWxvcGVyL3RzL2plbmtpbnNNZXRyaWNzLnRzIiwiZGV2ZWxvcGVyL3RzL25hdmJhci50cyIsImRldmVsb3Blci90cy9waXBlbGluZS50cyIsImRldmVsb3Blci90cy9waXBlbGluZURpcmVjdGl2ZS50cyIsImRldmVsb3Blci90cy9waXBlbGluZXMudHMiLCJkZXZlbG9wZXIvdHMvcHJvamVjdC50cyIsImRldmVsb3Blci90cy9wcm9qZWN0U2VsZWN0b3IudHMiLCJkZXZlbG9wZXIvdHMvcHJvamVjdHMudHMiLCJkZXZlbG9wZXIvdHMvd29ya3NwYWNlLnRzIiwiZGV2ZWxvcGVyL3RzL3dvcmtzcGFjZXMudHMiLCJrdWJlcm5ldGVzL3RzL2FwcHMudHMiLCJrdWJlcm5ldGVzL3RzL2JyZWFkY3J1bWJzLnRzIiwia3ViZXJuZXRlcy90cy9idWlsZC50cyIsImt1YmVybmV0ZXMvdHMvYnVpbGRDb25maWcudHMiLCJrdWJlcm5ldGVzL3RzL2J1aWxkQ29uZmlnRWRpdC50cyIsImt1YmVybmV0ZXMvdHMvYnVpbGRDb25maWdzLnRzIiwia3ViZXJuZXRlcy90cy9idWlsZExvZ3MudHMiLCJrdWJlcm5ldGVzL3RzL2J1aWxkcy50cyIsImt1YmVybmV0ZXMvdHMvY29ubmVjdC50cyIsImt1YmVybmV0ZXMvdHMvZGF0YUluZm5Nb2RlbC50cyIsImt1YmVybmV0ZXMvdHMvZGVwbG95bWVudENvbmZpZy50cyIsImt1YmVybmV0ZXMvdHMvZGVwbG95bWVudENvbmZpZ3MudHMiLCJrdWJlcm5ldGVzL3RzL2V2ZW50cy50cyIsImt1YmVybmV0ZXMvdHMvaG9zdC50cyIsImt1YmVybmV0ZXMvdHMvdXRpbEhlbHBlcnMudHMiLCJrdWJlcm5ldGVzL3RzL2hvc3RzLnRzIiwia3ViZXJuZXRlcy90cy9pbWFnZVJlcG9zaXRvcmllcy50cyIsImt1YmVybmV0ZXMvdHMva3ViZXJuZXRlc05hdmlnYXRpb24udHMiLCJrdWJlcm5ldGVzL3RzL3NjaGVtYS50cyIsImt1YmVybmV0ZXMvdHMva3ViZXJuZXRlc1NjaGVtYS50cyIsImt1YmVybmV0ZXMvdHMva3ViZXJuZXRlc1NlcnZpY2VzLnRzIiwia3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzVG9wTGV2ZWwudHMiLCJrdWJlcm5ldGVzL3RzL25hbWVzcGFjZS50cyIsImt1YmVybmV0ZXMvdHMvb3JhY2xlU3RhdHVzTW9kZWwudHMiLCJrdWJlcm5ldGVzL3RzL292ZXJ2aWV3LnRzIiwia3ViZXJuZXRlcy90cy9waXBlbGluZXMudHMiLCJrdWJlcm5ldGVzL3RzL3BvZC50cyIsImt1YmVybmV0ZXMvdHMvcG9kRWRpdC50cyIsImt1YmVybmV0ZXMvdHMvd2F0Y2hlci50cyIsImt1YmVybmV0ZXMvdHMvdGVybS50cyIsImt1YmVybmV0ZXMvdHMvcG9kTG9ncy50cyIsImt1YmVybmV0ZXMvdHMvcG9kcy50cyIsImt1YmVybmV0ZXMvdHMvcmVwbGljYXRpb25Db250cm9sbGVyLnRzIiwia3ViZXJuZXRlcy90cy9yZXBsaWNhdGlvbkNvbnRyb2xsZXJFZGl0LnRzIiwia3ViZXJuZXRlcy90cy9yZXBsaWNhdGlvbkNvbnRyb2xsZXJzLnRzIiwia3ViZXJuZXRlcy90cy9zY2hlbWFIZWxwZXJzLnRzIiwia3ViZXJuZXRlcy90cy9zZWNyZXQudHMiLCJrdWJlcm5ldGVzL3RzL3NlY3JldHMudHMiLCJrdWJlcm5ldGVzL3RzL3NlcnZpY2UudHMiLCJrdWJlcm5ldGVzL3RzL3NlcnZpY2VFZGl0LnRzIiwia3ViZXJuZXRlcy90cy9zZXJ2aWNlUmVnaXN0cnkudHMiLCJrdWJlcm5ldGVzL3RzL3NlcnZpY2VzLnRzIiwia3ViZXJuZXRlcy90cy9zaGFyZWRDb250cm9sbGVycy50cyIsImt1YmVybmV0ZXMvdHMvdGFicy50cyIsImt1YmVybmV0ZXMvdHMvdGVtcGxhdGVzLnRzIiwibmF2aWdhdGlvbi90cy9uYXZpZ2F0aW9uUGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNEQUFzRDtBQUN0RCwrREFBK0Q7QUFDL0Qsc0RBQXNEO0FBQ3RELG1EQUFtRDtBQUNuRCwwREFBMEQ7O0FDSjFELElBQU8sVUFBVSxDQWtKaEI7QUFsSkQsV0FBTyxVQUFVLEVBQUMsQ0FBQztJQUVqQjtRQUFBO1FBRUEsQ0FBQztRQURDLHNCQUFJLHlDQUFxQjtpQkFBekIsY0FBcUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQzs7O1dBQUE7UUFDdkUsYUFBQztJQUFELENBRkEsQUFFQyxJQUFBO0lBRlksaUJBQU0sU0FFbEIsQ0FBQTtJQUVVLG9CQUFTLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQztJQThDckM7UUFBQTtRQTBCQSxDQUFDO1FBekJBLHNCQUFrQix1QkFBUztpQkFBM0IsY0FBdUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7OztXQUFBO1FBQzVELHNCQUFrQixvQkFBTTtpQkFBeEIsY0FBb0MsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7OztXQUFBO1FB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Q0FBQztvQkFDcEMsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQzthQUNGLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRUosa0JBQU8sQ0FBQyxTQUFTLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxVQUFDLGlCQUFpQjtZQUNuRixNQUFNLENBQUM7Z0JBQ0wsUUFBUSxFQUFFLEdBQUc7Z0JBQ2IsS0FBSyxFQUFFLEVBQUU7Z0JBQ1QsUUFBUSxFQUFFLGdvQkFXVDtnQkFDRCxJQUFJLEVBQUUsVUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUs7b0JBQzFCLEtBQUssQ0FBQyxXQUFXLEdBQUcsaUJBQWlCLENBQUM7b0JBQ3RDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsRUFBRSxVQUFDLGdCQUFnQjt3QkFDM0QsS0FBSyxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO29CQUM1QyxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO2FBQ0YsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFSiw2Q0FBNkM7SUFDN0Msa0JBQWtCLENBQUMsU0FBUyxDQUFDLHFCQUFVLENBQUMsQ0FBQztBQUUzQyxDQUFDLEVBcktNLFVBQVUsS0FBVixVQUFVLFFBcUtoQiIsImZpbGUiOiJjb21waWxlZC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi9saWJzL2hhd3Rpby1mb3Jtcy9kZWZzLmQudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vbGlicy9oYXd0aW8ta3ViZXJuZXRlcy1hcGkvZGVmcy5kLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uL2xpYnMvaGF3dGlvLW9hdXRoL2RlZnMuZC50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi9saWJzL2hhd3Rpby11aS9kZWZzLmQudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vbGlicy9oYXd0aW8tdXRpbGl0aWVzL2RlZnMuZC50c1wiLz5cblxuZGVjbGFyZSB2YXIgaHVtYW5kYXRlO1xuZGVjbGFyZSB2YXIganN5YW1sOmFueTtcblxuIiwibW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIGV4cG9ydCBjbGFzcyBjb25zdHMge1xuICAgIGdldCBOQU1FU1BBQ0VfU1RPUkFHRV9LRVkoKTpzdHJpbmcgeyByZXR1cm4gXCJrOHNTZWxlY3RlZE5hbWVzcGFjZVwiOyB9XG4gIH1cblxuICBleHBvcnQgdmFyIENvbnN0YW50cyA9IG5ldyBjb25zdHMoKTtcblx0XG4gIGV4cG9ydCBpbnRlcmZhY2UgQXBpTG9jYXRpb24ge1xuICAgIHByb3RvPzpzdHJpbmc7XG4gICAgaG9zdFBvcnQ6c3RyaW5nO1xuICAgIHByZWZpeDpzdHJpbmc7XG4gIH1cbiAgXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXBpTG9jYXRpb25zIHtcbiAgICBvcGVuc2hpZnQ/OiBBcGlMb2NhdGlvbjtcbiAgICBrOHM/OiBBcGlMb2NhdGlvbjtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgS3ViZXJuZXRlc0NvbmZpZyB7XG4gICAgbWFzdGVyX3VyaT86IHN0cmluZztcbiAgICBhcGk/OiBBcGlMb2NhdGlvbnM7XG4gICAgb3BlbnNoaWZ0PzogT3BlblNoaWZ0T0F1dGhDb25maWc7XG4gICAgZ29vZ2xlPzogR29vZ2xlT0F1dGhDb25maWc7XG4gICAga2V5Y2xvYWs/OiBLZXlDbG9ha0F1dGhDb25maWc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIE9wZW5TaGlmdE9BdXRoQ29uZmlnIHtcbiAgICBvYXV0aF9hdXRob3JpemVfdXJpOnN0cmluZztcbiAgICBvYXV0aF9jbGllbnRfaWQ6c3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBHb29nbGVPQXV0aENvbmZpZyB7XG4gICAgYXV0aGVudGljYXRpb25VUkk6c3RyaW5nO1xuICAgIGF1dGhvcml6YXRpb25VUkk6c3RyaW5nO1xuICAgIGNsaWVudElkOnN0cmluZztcbiAgICBjbGllbnRTZWNyZXQ6c3RyaW5nO1xuICAgIHJlZGlyZWN0VVJJOnN0cmluZztcbiAgICBzY29wZTpzdHJpbmc7XG4gICAgdG9rZW5VUkk/OnN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgS2V5Q2xvYWtBdXRoQ29uZmlnIHtcbiAgICBvYXV0aF9hdXRob3JpemVfdXJpOnN0cmluZztcbiAgICBvYXV0aF9jbGllbnRfaWQ6c3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBLdWJlcm5ldGVzU3RhdGUge1xuICAgIG5hbWVzcGFjZXM6IEFycmF5PHN0cmluZz47XG4gICAgc2VsZWN0ZWROYW1lc3BhY2U6IHN0cmluZztcbiAgfVxuXG5cdGV4cG9ydCBjbGFzcyBXYXRjaFR5cGVzIHtcblx0XHRwdWJsaWMgc3RhdGljIGdldCBFTkRQT0lOVFMoKTpzdHJpbmcgeyByZXR1cm4gXCJlbmRwb2ludHNcIjsgfVxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IEVWRU5UUygpOnN0cmluZyB7IHJldHVybiBcImV2ZW50c1wiOyB9XG4gICAgcHVibGljIHN0YXRpYyBnZXQgTkFNRVNQQUNFUygpOnN0cmluZyB7IHJldHVybiBcIm5hbWVzcGFjZXNcIjsgfVxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IE5PREVTKCk6c3RyaW5nIHsgcmV0dXJuIFwibm9kZXNcIjsgfVxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IFBFUlNJU1RFTlRfVk9MVU1FUygpOnN0cmluZyB7IHJldHVybiBcInBlcnNpc3RlbnR2b2x1bWVzXCI7IH1cblx0XHRwdWJsaWMgc3RhdGljIGdldCBQRVJTSVNURU5UX1ZPTFVNRV9DTEFJTVMoKTpzdHJpbmcgeyByZXR1cm4gXCJwZXJzaXN0ZW50dm9sdW1lY2xhaW1zXCI7IH1cblx0XHRwdWJsaWMgc3RhdGljIGdldCBQT0RTKCk6c3RyaW5nIHsgcmV0dXJuIFwicG9kc1wiOyB9XG5cdFx0cHVibGljIHN0YXRpYyBnZXQgUkVQTElDQVRJT05fQ09OVFJPTExFUlMoKTpzdHJpbmcgeyByZXR1cm4gXCJyZXBsaWNhdGlvbmNvbnRyb2xsZXJzXCI7IH1cblx0XHRwdWJsaWMgc3RhdGljIGdldCBSRVNPVVJDRV9RVU9UQVMoKTpzdHJpbmcgeyByZXR1cm4gXCJyZXNvdXJjZXF1b3Rhc1wiOyB9XG5cdFx0cHVibGljIHN0YXRpYyBnZXQgT0FVVEhfQ0xJRU5UUygpOnN0cmluZyB7IHJldHVybiBcIm9hdXRoY2xpZW50c1wiOyB9XG5cdFx0cHVibGljIHN0YXRpYyBnZXQgU0VDUkVUUygpOnN0cmluZyB7IHJldHVybiBcInNlY3JldHNcIjsgfVxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IFNFUlZJQ0VTKCk6c3RyaW5nIHsgcmV0dXJuIFwic2VydmljZXNcIjsgfVxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IFNFUlZJQ0VfQUNDT1VOVFMoKTpzdHJpbmcgeyByZXR1cm4gXCJzZXJ2aWNlYWNjb3VudHNcIjsgfVxuXG5cdFx0cHVibGljIHN0YXRpYyBnZXQgVEVNUExBVEVTKCk6c3RyaW5nIHsgcmV0dXJuIFwidGVtcGxhdGVzXCI7IH1cblx0XHRwdWJsaWMgc3RhdGljIGdldCBST1VURVMoKTpzdHJpbmcgeyByZXR1cm4gXCJyb3V0ZXNcIjsgfVxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IEJVSUxEX0NPTkZJR1MoKTpzdHJpbmcgeyByZXR1cm4gXCJidWlsZGNvbmZpZ3NcIjsgfVxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IEJVSUxEUygpOnN0cmluZyB7IHJldHVybiBcImJ1aWxkc1wiOyB9XG5cdFx0cHVibGljIHN0YXRpYyBnZXQgREVQTE9ZTUVOVF9DT05GSUdTKCk6c3RyaW5nIHsgcmV0dXJuIFwiZGVwbG95bWVudGNvbmZpZ3NcIjsgfVxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IElNQUdFX1NUUkVBTVMoKTpzdHJpbmcgeyByZXR1cm4gXCJpbWFnZXN0cmVhbXNcIjsgfVxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IFBPTElDSUVTKCk6c3RyaW5nIHsgcmV0dXJuIFwicG9saWNpZXNcIjsgfVxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IFBPTElDWV9CSU5ESU5HUygpOnN0cmluZyB7IHJldHVybiBcInBvbGljeWJpbmRpbmdzXCI7IH1cbiAgICBwdWJsaWMgc3RhdGljIGdldCBQUk9KRUNUUygpOnN0cmluZyB7IHJldHVybiBcInByb2plY3RzXCI7IH1cblx0XHRwdWJsaWMgc3RhdGljIGdldCBST0xFX0JJTkRJTkdTKCk6c3RyaW5nIHsgcmV0dXJuIFwicm9sZWJpbmRpbmdzXCI7IH1cblx0XHRwdWJsaWMgc3RhdGljIGdldCBST0xFUygpOnN0cmluZyB7IHJldHVybiBcInJvbGVzXCI7IH1cblx0fVxuXG4gIGV4cG9ydCBjbGFzcyBOYW1lc3BhY2VkVHlwZXMge1xuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IGs4c1R5cGVzKCk6QXJyYXk8c3RyaW5nPiB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBXYXRjaFR5cGVzLkVORFBPSU5UUyxcbiAgICAgICAgV2F0Y2hUeXBlcy5FVkVOVFMsXG4gICAgICAgIFdhdGNoVHlwZXMuTk9ERVMsXG4gICAgICAgIFdhdGNoVHlwZXMuUEVSU0lTVEVOVF9WT0xVTUVTLFxuICAgICAgICBXYXRjaFR5cGVzLlBFUlNJU1RFTlRfVk9MVU1FX0NMQUlNUyxcbiAgICAgICAgV2F0Y2hUeXBlcy5QT0RTLFxuICAgICAgICBXYXRjaFR5cGVzLlJFUExJQ0FUSU9OX0NPTlRST0xMRVJTLFxuICAgICAgICBXYXRjaFR5cGVzLlJFU09VUkNFX1FVT1RBUyxcbiAgICAgICAgV2F0Y2hUeXBlcy5QRVJTSVNURU5UX1ZPTFVNRVMsXG4gICAgICAgIFdhdGNoVHlwZXMuU0VDUkVUUyxcbiAgICAgICAgV2F0Y2hUeXBlcy5TRVJWSUNFUyxcbiAgICAgICAgV2F0Y2hUeXBlcy5TRVJWSUNFX0FDQ09VTlRTXG4gICAgICBdO1xuICAgIH1cbiAgICBwdWJsaWMgc3RhdGljIGdldCBvc1R5cGVzKCk6QXJyYXk8c3RyaW5nPiB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBXYXRjaFR5cGVzLlRFTVBMQVRFUyxcbiAgICAgICAgV2F0Y2hUeXBlcy5CVUlMRF9DT05GSUdTLFxuICAgICAgICBXYXRjaFR5cGVzLlJPVVRFUyxcbiAgICAgICAgV2F0Y2hUeXBlcy5CVUlMRFMsXG4gICAgICAgIFdhdGNoVHlwZXMuQlVJTERfQ09ORklHUyxcbiAgICAgICAgV2F0Y2hUeXBlcy5ERVBMT1lNRU5UX0NPTkZJR1MsXG4gICAgICAgIFdhdGNoVHlwZXMuSU1BR0VfU1RSRUFNUyxcbiAgICAgICAgV2F0Y2hUeXBlcy5PQVVUSF9DTElFTlRTLFxuICAgICAgICBXYXRjaFR5cGVzLlBPTElDSUVTLFxuICAgICAgICBXYXRjaFR5cGVzLlBPTElDWV9CSU5ESU5HUyxcbiAgICAgICAgV2F0Y2hUeXBlcy5QUk9KRUNUUyxcbiAgICAgICAgLy9XYXRjaFR5cGVzLlJPTEVfQklORElOR1MsXG4gICAgICAgIC8vV2F0Y2hUeXBlcy5ST0xFU1xuICAgICAgXTtcbiAgICB9XG4gIH1cblx0XG5cdGV4cG9ydCBjbGFzcyBXYXRjaEFjdGlvbnMge1xuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IEFOWSgpOnN0cmluZyB7IHJldHVybiBcIipcIjsgfVxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IEFEREVEKCk6c3RyaW5nIHsgcmV0dXJuIFwiQURERURcIjsgfVxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IE1PRElGSUVEKCk6c3RyaW5nIHsgcmV0dXJuIFwiTU9ESUZJRURcIjsgfVxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IERFTEVURUQoKTpzdHJpbmcgeyByZXR1cm4gXCJERUxFVEVEXCI7IH1cblx0fVxuXHRcblx0ZXhwb3J0IGludGVyZmFjZSBPYmplY3RNYXAge1xuXHRcdFt1aWQ6c3RyaW5nXTogYW55O1x0XHRcblx0fVxuXHRcblx0ZXhwb3J0IGludGVyZmFjZSBXYXRjaGVyU2VydmljZSB7XG5cdFx0aGFzV2ViU29ja2V0OiBib29sZWFuO1xuXHRcdGFkZEN1c3RvbWl6ZXI6ICh0eXBlOiBzdHJpbmcsIGN1c3RvbWl6ZXI6IChvYmo6YW55KSA9PiB2b2lkKSA9PiB2b2lkO1xuXHRcdGdldFR5cGVzOiAoKSA9PiBBcnJheTxzdHJpbmc+O1xuXHRcdGdldE5hbWVzcGFjZTogKCkgPT4gc3RyaW5nO1xuXHRcdHNldE5hbWVzcGFjZTogKG5hbWVzcGFjZTogc3RyaW5nKSA9PiB2b2lkO1xuXHRcdGdldE9iamVjdHM6ICh0eXBlOiBzdHJpbmcpID0+IEFycmF5PGFueT47XG5cdFx0Z2V0T2JqZWN0TWFwOiAodHlwZTogc3RyaW5nKSA9PiBPYmplY3RNYXA7XG5cdFx0YWRkQWN0aW9uOiAodHlwZTogc3RyaW5nLCBhY3Rpb246IHN0cmluZywgZm46IChvYmo6YW55KSA9PiB2b2lkKSA9PiB2b2lkO1xuXHRcdHJlZ2lzdGVyTGlzdGVuZXI6IChmbjoob2JqZWN0czpPYmplY3RNYXApID0+IHZvaWQpID0+IHZvaWQ7XG4gICAgcmVnaXN0ZXJDdXN0b21VcmxGdW5jdGlvbjogKGtpbmQ6c3RyaW5nLCB1cmw6KGtpbmQ6c3RyaW5nKSA9PiBzdHJpbmcpID0+IHZvaWQ7XG5cdH1cblxuICBleHBvcnQgaW50ZXJmYWNlIEt1YmVQb2Qge1xuICAgIGlkOnN0cmluZztcbiAgICBuYW1lc3BhY2U6c3RyaW5nO1xuICB9XG5cblx0XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0ludGVyZmFjZXMudHNcIi8+XG5tb2R1bGUgS3ViZXJuZXRlcyB7XG5cbiAgZXhwb3J0IHZhciBjb250ZXh0ID0gJy9rdWJlcm5ldGVzJztcbiAgZXhwb3J0IHZhciBoYXNoID0gJyMnICsgY29udGV4dDtcbiAgZXhwb3J0IHZhciBkZWZhdWx0Um91dGUgPSBoYXNoICsgJy9hcHBzJztcbiAgZXhwb3J0IHZhciBwbHVnaW5OYW1lID0gJ0t1YmVybmV0ZXMnO1xuICBleHBvcnQgdmFyIHBsdWdpblBhdGggPSAncGx1Z2lucy9rdWJlcm5ldGVzLyc7XG4gIGV4cG9ydCB2YXIgdGVtcGxhdGVQYXRoID0gcGx1Z2luUGF0aCArICdodG1sLyc7XG4gIGV4cG9ydCB2YXIgbG9nOkxvZ2dpbmcuTG9nZ2VyID0gTG9nZ2VyLmdldChwbHVnaW5OYW1lKTtcblxuICBleHBvcnQgdmFyIGtlZXBQb2xsaW5nTW9kZWwgPSB0cnVlO1xuXG4gIGV4cG9ydCB2YXIgZGVmYXVsdEljb25VcmwgPSBDb3JlLnVybChcIi9pbWcva3ViZXJuZXRlcy5zdmdcIik7XG4gIGV4cG9ydCB2YXIgaG9zdEljb25VcmwgPSBDb3JlLnVybChcIi9pbWcvaG9zdC5zdmdcIik7XG5cbiAgLy8gdGhpcyBnZXRzIHNldCBhcyBhIHByZS1ib290c3RyYXAgdGFza1xuICBleHBvcnQgdmFyIG9zQ29uZmlnOkt1YmVybmV0ZXNDb25maWcgPSB1bmRlZmluZWQ7XG4gIGV4cG9ydCB2YXIgbWFzdGVyVXJsID0gXCJcIjtcblxuICBleHBvcnQgdmFyIGRlZmF1bHRBcGlWZXJzaW9uID0gXCJ2MVwiO1xuICBleHBvcnQgdmFyIGRlZmF1bHRPU0FwaVZlcnNpb24gPSBcInYxXCI7XG4gIGV4cG9ydCB2YXIgbGFiZWxGaWx0ZXJUZXh0U2VwYXJhdG9yID0gXCIsXCI7XG5cbiAgZXhwb3J0IHZhciBkZWZhdWx0TmFtZXNwYWNlID0gXCJkZWZhdWx0XCI7XG5cbiAgZXhwb3J0IHZhciBhcHBTdWZmaXggPSBcIi5hcHBcIjtcblxuICAvLyBrdWJlcm5ldGVzIHNlcnZpY2UgbmFtZXNcbiAgZXhwb3J0IHZhciBraWJhbmFTZXJ2aWNlTmFtZSA9IFwia2liYW5hXCI7XG4gIGV4cG9ydCB2YXIgZmFicmljOEZvcmdlU2VydmljZU5hbWUgPSBcImZhYnJpYzgtZm9yZ2VcIjtcbiAgZXhwb3J0IHZhciBnb2dzU2VydmljZU5hbWUgPSBcImdvZ3NcIjtcbiAgZXhwb3J0IHZhciBqZW5raW5zU2VydmljZU5hbWUgPSBcImplbmtpbnNcIjtcbiAgZXhwb3J0IHZhciBhcGltYW5TZXJ2aWNlTmFtZSA9ICdhcGltYW4nO1xuICBleHBvcnQgdmFyIGlzT3BlblNoaWZ0ID0gdHJ1ZTtcblxuICBleHBvcnQgdmFyIHNzaFNlY3JldERhdGFLZXlzID0gW1wic3NoLWtleVwiLCBcInNzaC1rZXkucHViXCJdO1xuICBleHBvcnQgdmFyIGh0dHBzU2VjcmV0RGF0YUtleXMgPSBbXCJ1c2VybmFtZVwiLCBcInBhc3N3b3JkXCJdO1xuXG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGt1YmVybmV0ZXNOYW1lc3BhY2VQYXRoKCkge1xuICAgIHZhciBucyA9IGN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XG4gICAgaWYgKG5zKSB7XG4gICAgICByZXR1cm4gXCIvbmFtZXNwYWNlcy9cIiArIG5zO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gYXBpUHJlZml4KCkge1xuICAgIHZhciBwcmVmaXggPSBDb3JlLnBhdGhHZXQob3NDb25maWcsIFsnYXBpJywgJ2s4cycsICdwcmVmaXgnXSk7XG4gICAgaWYgKCFwcmVmaXgpIHtcbiAgICAgIHByZWZpeCA9ICdhcGknO1xuICAgIH1cbiAgICByZXR1cm4gQ29yZS50cmltTGVhZGluZyhwcmVmaXgsICcvJyk7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gb3NBcGlQcmVmaXgoKSB7XG4gICAgdmFyIHByZWZpeCA9IENvcmUucGF0aEdldChvc0NvbmZpZywgWydhcGknLCAnb3BlbnNoaWZ0JywgJ3ByZWZpeCddKTtcbiAgICBpZiAoIXByZWZpeCkge1xuICAgICAgcHJlZml4ID0gJ29hcGknO1xuICAgIH1cbiAgICB2YXIgYW5zd2VyID0gQ29yZS50cmltTGVhZGluZyhwcmVmaXgsICcvJyk7XG4gICAgaWYgKCFpc09wZW5TaGlmdCkge1xuICAgICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihhcGlQcmVmaXgoKSwgZGVmYXVsdE9TQXBpVmVyc2lvbiwgXCJwcm94eVwiLCBrdWJlcm5ldGVzTmFtZXNwYWNlUGF0aCgpLCBcInNlcnZpY2VzL3RlbXBsYXRlc1wiLCBhbnN3ZXIpO1xuICAgIH1cbiAgICByZXR1cm4gYW5zd2VyO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIG1hc3RlckFwaVVybCgpIHtcbiAgICByZXR1cm4gbWFzdGVyVXJsIHx8IFwiXCI7XG4gIH1cblxuICAvKiogV0FSTklORyAtIHRoaXMgZXhjbHVkZXMgdGhlIGhvc3QgbmFtZSAtIHlvdSBwcm9iYWJseSB3YW50IHRvIHVzZToga3ViZXJuZXRlc0FwaVVybCgpIGluc3RlYWQhISAqL1xuICBleHBvcnQgZnVuY3Rpb24ga3ViZXJuZXRlc0FwaVByZWZpeCgpIHtcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKGFwaVByZWZpeCgpLCBkZWZhdWx0QXBpVmVyc2lvbik7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gb3BlbnNoaWZ0QXBpUHJlZml4KCkge1xuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4ob3NBcGlQcmVmaXgoKSwgZGVmYXVsdE9TQXBpVmVyc2lvbik7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gcHJlZml4Rm9yVHlwZSh0eXBlOnN0cmluZykge1xuICAgIGlmICh0eXBlID09PSBXYXRjaFR5cGVzLk5BTUVTUEFDRVMpIHtcbiAgICAgIHJldHVybiBrdWJlcm5ldGVzQXBpUHJlZml4KCk7XG4gICAgfVxuICAgIGlmIChfLmFueShOYW1lc3BhY2VkVHlwZXMuazhzVHlwZXMsICh0KSA9PiB0ID09PSB0eXBlKSkge1xuICAgICAgcmV0dXJuIGt1YmVybmV0ZXNBcGlQcmVmaXgoKTtcbiAgICB9XG4gICAgaWYgKF8uYW55KE5hbWVzcGFjZWRUeXBlcy5vc1R5cGVzLCAodCkgPT4gdCA9PT0gdHlwZSkpIHtcbiAgICAgIHJldHVybiBvcGVuc2hpZnRBcGlQcmVmaXgoKTtcbiAgICB9XG4gICAgLy8gbGV0cyBhc3N1bWUgaXRzIGFuIE9wZW5TaGlmdCBleHRlbnNpb24gdHlwZVxuICAgIHJldHVybiBvcGVuc2hpZnRBcGlQcmVmaXgoKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBrdWJlcm5ldGVzQXBpVXJsKCkge1xuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4obWFzdGVyQXBpVXJsKCksIGt1YmVybmV0ZXNBcGlQcmVmaXgoKSk7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gb3BlbnNoaWZ0QXBpVXJsKCkge1xuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4obWFzdGVyQXBpVXJsKCksIG9wZW5zaGlmdEFwaVByZWZpeCgpKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiByZXNvdXJjZXNVcmlGb3JLaW5kKHR5cGUsIG5zID0gbnVsbCkge1xuICAgIGlmICghbnMpIHtcbiAgICAgIG5zID0gY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihtYXN0ZXJBcGlVcmwoKSwgcHJlZml4Rm9yVHlwZSh0eXBlKSwgbmFtZXNwYWNlUGF0aEZvcktpbmQodHlwZSwgbnMpKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiB1cmlUZW1wbGF0ZUZvckt1YmVybmV0ZXNLaW5kKHR5cGUpIHtcbiAgICB2YXIgdXJsVGVtcGxhdGUgPSAnJztcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgV2F0Y2hUeXBlcy5OQU1FU1BBQ0VTOlxuICAgICAgY2FzZSBcIk5hbWVzcGFjZXNcIjpcbiAgICAgICAgdXJsVGVtcGxhdGUgPSBVcmxIZWxwZXJzLmpvaW4oJ25hbWVzcGFjZXMnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFdhdGNoVHlwZXMuT0FVVEhfQ0xJRU5UUzpcbiAgICAgIGNhc2UgXCJPQXV0aENsaWVudHNcIjpcbiAgICAgIGNhc2UgXCJPQXV0aENsaWVudFwiOlxuICAgICAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKCdvYXV0aGNsaWVudHMnKTtcbiAgICAgIGNhc2UgV2F0Y2hUeXBlcy5QUk9KRUNUUzpcbiAgICAgIGNhc2UgXCJQcm9qZWN0c1wiOlxuICAgICAgICB1cmxUZW1wbGF0ZSA9IFVybEhlbHBlcnMuam9pbigncHJvamVjdHMnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB1cmxUZW1wbGF0ZSA9IFVybEhlbHBlcnMuam9pbignbmFtZXNwYWNlcy86bmFtZXNwYWNlJywgdHlwZSwgJzppZCcpO1xuICAgIH1cbiAgICByZXR1cm4gdXJsVGVtcGxhdGU7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gbmFtZXNwYWNlUGF0aEZvcktpbmQodHlwZSwgbnMpIHtcbiAgICB2YXIgdXJsVGVtcGxhdGUgPSAnJztcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgV2F0Y2hUeXBlcy5OQU1FU1BBQ0VTOlxuICAgICAgY2FzZSBcIk5hbWVzcGFjZXNcIjpcbiAgICAgIGNhc2UgXCJOYW1lc3BhY2VcIjpcbiAgICAgICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbignbmFtZXNwYWNlcycpO1xuICAgICAgY2FzZSBXYXRjaFR5cGVzLk5PREVTOlxuICAgICAgY2FzZSBcIk5vZGVzXCI6XG4gICAgICBjYXNlIFwibm9kZVwiOlxuICAgICAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKCdub2RlcycpO1xuICAgICAgY2FzZSBXYXRjaFR5cGVzLlBST0pFQ1RTOlxuICAgICAgY2FzZSBcIlByb2plY3RzXCI6XG4gICAgICBjYXNlIFwiUHJvamVjdFwiOlxuICAgICAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKCdwcm9qZWN0cycpO1xuICAgICAgY2FzZSBXYXRjaFR5cGVzLk9BVVRIX0NMSUVOVFM6XG4gICAgICBjYXNlIFwiT0F1dGhDbGllbnRzXCI6XG4gICAgICBjYXNlIFwiT0F1dGhDbGllbnRcIjpcbiAgICAgICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbignb2F1dGhjbGllbnRzJyk7XG4gICAgICBjYXNlIFdhdGNoVHlwZXMuUEVSU0lTVEVOVF9WT0xVTUVTOlxuICAgICAgY2FzZSBcIlBlcnNpc3RlbnRWb2x1bWVzXCI6XG4gICAgICBjYXNlIFwiUGVyc2lzdGVudFZvbHVtZVwiOlxuICAgICAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKCdwZXJzaXN0ZW50dm9sdW1lcycpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbignbmFtZXNwYWNlcycsIG5zLCB0eXBlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGV2YWx1ZSBmcm9tIHRoZSBpbmplY3RvciBpZiBpdHMgYXZhaWxhYmxlIG9yIG51bGxcbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiBpbmplY3Q8VD4obmFtZSk6VCB7XG4gICAgdmFyIGluamVjdG9yID0gSGF3dGlvQ29yZS5pbmplY3RvcjtcbiAgICByZXR1cm4gaW5qZWN0b3IgPyBpbmplY3Rvci5nZXQ8VD4obmFtZSkgOiBudWxsO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlc291cmNlKHRoaW5nOnN0cmluZywgdXJsVGVtcGxhdGU6c3RyaW5nLCAkcmVzb3VyY2U6IG5nLnJlc291cmNlLklSZXNvdXJjZVNlcnZpY2UsIEt1YmVybmV0ZXNNb2RlbCkge1xuICAgIHZhciBwcmVmaXggPSBwcmVmaXhGb3JUeXBlKHRoaW5nKTtcbiAgICBpZiAoIXByZWZpeCkge1xuICAgICAgbG9nLmRlYnVnKFwiSW52YWxpZCB0eXBlIGdpdmVuOiBcIiwgdGhpbmcpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIHBhcmFtcyA9IDxhbnk+IHtcbiAgICAgIG5hbWVzcGFjZTogY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2VcbiAgICB9XG4gICAgc3dpdGNoICh0aGluZykge1xuICAgICAgY2FzZSBXYXRjaFR5cGVzLk5BTUVTUEFDRVM6XG4gICAgICBjYXNlIFdhdGNoVHlwZXMuT0FVVEhfQ0xJRU5UUzpcbiAgICAgIGNhc2UgV2F0Y2hUeXBlcy5OT0RFUzpcbiAgICAgIGNhc2UgV2F0Y2hUeXBlcy5QUk9KRUNUUzpcbiAgICAgIGNhc2UgV2F0Y2hUeXBlcy5PQVVUSF9DTElFTlRTOlxuICAgICAgY2FzZSBXYXRjaFR5cGVzLlBFUlNJU1RFTlRfVk9MVU1FUzpcbiAgICAgIHBhcmFtcyA9IHt9O1xuICAgIH1cblxuICAgIHZhciB1cmwgPSBVcmxIZWxwZXJzLmpvaW4obWFzdGVyQXBpVXJsKCksIHByZWZpeCwgdXJsVGVtcGxhdGUpO1xuICAgIGxvZy5kZWJ1ZyhcIlVybCBmb3IgXCIsIHRoaW5nLCBcIjogXCIsIHVybCk7XG4gICAgdmFyIHJlc291cmNlID0gJHJlc291cmNlKHVybCwgbnVsbCwge1xuICAgICAgcXVlcnk6IHsgbWV0aG9kOiAnR0VUJywgaXNBcnJheTogZmFsc2UsIHBhcmFtczogcGFyYW1zfSxcbiAgICAgIGNyZWF0ZTogeyBtZXRob2Q6ICdQT1NUJywgcGFyYW1zOiBwYXJhbXN9LFxuICAgICAgc2F2ZTogeyBtZXRob2Q6ICdQVVQnLCBwYXJhbXM6IHBhcmFtc30sXG4gICAgICBkZWxldGU6IHsgbWV0aG9kOiAnREVMRVRFJywgcGFyYW1zOiBfLmV4dGVuZCh7XG4gICAgICAgIGlkOiAnQGlkJ1xuICAgICAgfSwgcGFyYW1zKX1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzb3VyY2U7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gaW1hZ2VSZXBvc2l0b3JpZXNSZXN0VVJMKCkge1xuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4ob3BlbnNoaWZ0QXBpVXJsKCksIGt1YmVybmV0ZXNOYW1lc3BhY2VQYXRoKCksIFwiL2ltYWdlc3RyZWFtc1wiKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBkZXBsb3ltZW50Q29uZmlnc1Jlc3RVUkwoKSB7XG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihvcGVuc2hpZnRBcGlVcmwoKSwga3ViZXJuZXRlc05hbWVzcGFjZVBhdGgoKSwgXCIvZGVwbG95bWVudGNvbmZpZ3NcIik7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gYnVpbGRzUmVzdFVSTCgpIHtcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKG9wZW5zaGlmdEFwaVVybCgpLCBrdWJlcm5ldGVzTmFtZXNwYWNlUGF0aCgpLCBcIi9idWlsZHNcIik7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gYnVpbGRDb25maWdIb29rc1Jlc3RVUkwoKSB7XG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihvcGVuc2hpZnRBcGlVcmwoKSwga3ViZXJuZXRlc05hbWVzcGFjZVBhdGgoKSwgXCIvYnVpbGRjb25maWdob29rc1wiKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBidWlsZENvbmZpZ3NSZXN0VVJMKCkge1xuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4ob3BlbnNoaWZ0QXBpVXJsKCksIGt1YmVybmV0ZXNOYW1lc3BhY2VQYXRoKCksIFwiL2J1aWxkY29uZmlnc1wiKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiByb3V0ZXNSZXN0VVJMKCkge1xuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4ob3BlbnNoaWZ0QXBpVXJsKCksIGt1YmVybmV0ZXNOYW1lc3BhY2VQYXRoKCksIFwiL3JvdXRlc1wiKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiB0ZW1wbGF0ZXNSZXN0VVJMKCkge1xuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4ob3BlbnNoaWZ0QXBpVXJsKCksIGt1YmVybmV0ZXNOYW1lc3BhY2VQYXRoKCksIFwiL3RlbXBsYXRlc1wiKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXROYW1lc3BhY2UoZW50aXR5KSB7XG4gICAgdmFyIGFuc3dlciA9IENvcmUucGF0aEdldChlbnRpdHksIFtcIm1ldGFkYXRhXCIsIFwibmFtZXNwYWNlXCJdKTtcbiAgICByZXR1cm4gYW5zd2VyID8gYW5zd2VyIDogY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRMYWJlbHMoZW50aXR5KSB7XG4gICAgdmFyIGFuc3dlciA9IENvcmUucGF0aEdldChlbnRpdHksIFtcIm1ldGFkYXRhXCIsIFwibGFiZWxzXCJdKTtcbiAgICByZXR1cm4gYW5zd2VyID8gYW5zd2VyIDoge307XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZ2V0TmFtZShlbnRpdHkpIHtcbiAgICBpZiAoYW5ndWxhci5pc1N0cmluZyhlbnRpdHkpKSB7XG4gICAgICByZXR1cm4gZW50aXR5O1xuICAgIH1cbiAgICByZXR1cm4gQ29yZS5wYXRoR2V0KGVudGl0eSwgW1wibWV0YWRhdGFcIiwgXCJuYW1lXCJdKSB8fCBDb3JlLnBhdGhHZXQoZW50aXR5LCBcIm5hbWVcIikgfHwgQ29yZS5wYXRoR2V0KGVudGl0eSwgXCJpZFwiKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRLaW5kKGVudGl0eSkge1xuICAgIHJldHVybiBDb3JlLnBhdGhHZXQoZW50aXR5LCBbXCJtZXRhZGF0YVwiLCBcImtpbmRcIl0pIHx8IENvcmUucGF0aEdldChlbnRpdHksIFwia2luZFwiKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3RvcihlbnRpdHkpIHtcbiAgICByZXR1cm4gQ29yZS5wYXRoR2V0KGVudGl0eSwgW1wic3BlY1wiLCBcInNlbGVjdG9yXCJdKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRIb3N0KHBvZCkge1xuICAgIHJldHVybiBDb3JlLnBhdGhHZXQocG9kLCBbXCJzcGVjXCIsIFwiaG9zdFwiXSkgfHwgQ29yZS5wYXRoR2V0KHBvZCwgW1wic3BlY1wiLCBcIm5vZGVOYW1lXCJdKSB8fCBDb3JlLnBhdGhHZXQocG9kLCBbXCJzdGF0dXNcIiwgXCJob3N0SVBcIl0pO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGdldFN0YXR1cyhwb2QpIHtcbiAgICByZXR1cm4gQ29yZS5wYXRoR2V0KHBvZCwgW1wic3RhdHVzXCIsIFwicGhhc2VcIl0pO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGdldFBvcnRzKHNlcnZpY2UpIHtcbiAgICByZXR1cm4gQ29yZS5wYXRoR2V0KHNlcnZpY2UsIFtcInNwZWNcIiwgXCJwb3J0c1wiXSk7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZ2V0Q3JlYXRpb25UaW1lc3RhbXAoZW50aXR5KSB7XG4gICAgcmV0dXJuIENvcmUucGF0aEdldChlbnRpdHksIFtcIm1ldGFkYXRhXCIsIFwiY3JlYXRpb25UaW1lc3RhbXBcIl0pO1xuICB9O1xuXG4gIC8vdmFyIGZhYnJpY0RvbWFpbiA9IEZhYnJpYy5qbXhEb21haW47XG4gIHZhciBmYWJyaWNEb21haW4gPSBcImlvLmZhYnJpYzhcIjtcbiAgZXhwb3J0IHZhciBtYmVhbiA9IGZhYnJpY0RvbWFpbiArIFwiOnR5cGU9S3ViZXJuZXRlc1wiO1xuICBleHBvcnQgdmFyIG1hbmFnZXJNQmVhbiA9IGZhYnJpY0RvbWFpbiArIFwiOnR5cGU9S3ViZXJuZXRlc01hbmFnZXJcIjtcbiAgZXhwb3J0IHZhciBhcHBWaWV3TUJlYW4gPSBmYWJyaWNEb21haW4gKyBcIjp0eXBlPUFwcFZpZXdcIjtcblxuICBleHBvcnQgZnVuY3Rpb24gaXNLdWJlcm5ldGVzKHdvcmtzcGFjZT8pIHtcbiAgICAvLyByZXR1cm4gd29ya3NwYWNlLnRyZWVDb250YWluc0RvbWFpbkFuZFByb3BlcnRpZXMoZmFicmljRG9tYWluLCB7dHlwZTogXCJLdWJlcm5ldGVzXCJ9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBpc0t1YmVybmV0ZXNUZW1wbGF0ZU1hbmFnZXIod29ya3NwYWNlPykge1xuICAgIC8vIHJldHVybiB3b3Jrc3BhY2UudHJlZUNvbnRhaW5zRG9tYWluQW5kUHJvcGVydGllcyhmYWJyaWNEb21haW4sIHt0eXBlOiBcIkt1YmVybmV0ZXNUZW1wbGF0ZU1hbmFnZXJcIn0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzQXBwVmlldyh3b3Jrc3BhY2U/KSB7XG4gICAgLy8gcmV0dXJuIHdvcmtzcGFjZS50cmVlQ29udGFpbnNEb21haW5BbmRQcm9wZXJ0aWVzKGZhYnJpY0RvbWFpbiwge3R5cGU6IFwiQXBwVmlld1wifSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZ2V0U3RyaXBwZWRQYXRoTmFtZSgpOnN0cmluZyB7XG4gICAgdmFyIHBhdGhOYW1lID0gQ29yZS50cmltTGVhZGluZygodGhpcy4kbG9jYXRpb24ucGF0aCgpIHx8ICcvJyksIFwiI1wiKTtcbiAgICBwYXRoTmFtZSA9IHBhdGhOYW1lLnJlcGxhY2UoL15cXC8vLCAnJyk7XG4gICAgcmV0dXJuIHBhdGhOYW1lO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGxpbmtDb250YWlucyguLi53b3JkczpTdHJpbmdbXSk6Ym9vbGVhbiB7XG4gICAgdmFyIHBhdGhOYW1lID0gdGhpcy5nZXRTdHJpcHBlZFBhdGhOYW1lKCk7XG4gICAgcmV0dXJuIF8uZXZlcnkod29yZHMsICh3b3JkOnN0cmluZykgPT4gcGF0aE5hbWUuaW5kZXhPZih3b3JkKSAhPT0gMCk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIGxpbmsgaXMgYWN0aXZlLiBUaGUgbGluayBjYW4gb21pdCB0aGUgbGVhZGluZyAjIG9yIC8gaWYgbmVjZXNzYXJ5LlxuICAgKiBUaGUgcXVlcnkgcGFyYW1ldGVycyBvZiB0aGUgVVJMIGFyZSBpZ25vcmVkIGluIHRoZSBjb21wYXJpc29uLlxuICAgKiBAbWV0aG9kIGlzTGlua0FjdGl2ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gaHJlZlxuICAgKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIGlmIHRoZSBnaXZlbiBsaW5rIGlzIGFjdGl2ZVxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzTGlua0FjdGl2ZShocmVmOnN0cmluZyk6Ym9vbGVhbiB7XG4gICAgLy8gbGV0cyB0cmltIHRoZSBsZWFkaW5nIHNsYXNoXG4gICAgdmFyIHBhdGhOYW1lID0gZ2V0U3RyaXBwZWRQYXRoTmFtZSgpO1xuXG4gICAgdmFyIGxpbmsgPSBDb3JlLnRyaW1MZWFkaW5nKGhyZWYsIFwiI1wiKTtcbiAgICBsaW5rID0gbGluay5yZXBsYWNlKC9eXFwvLywgJycpO1xuICAgIC8vIHN0cmlwIGFueSBxdWVyeSBhcmd1bWVudHNcbiAgICB2YXIgaWR4ID0gbGluay5pbmRleE9mKCc/Jyk7XG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBsaW5rID0gbGluay5zdWJzdHJpbmcoMCwgaWR4KTtcbiAgICB9XG4gICAgaWYgKCFwYXRoTmFtZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBsaW5rID09PSBwYXRoTmFtZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIF8uc3RhcnRzV2l0aChwYXRoTmFtZSwgbGluayk7XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIHNldEpzb24oJHNjb3BlLCBpZCwgY29sbGVjdGlvbikge1xuICAgICRzY29wZS5pZCA9IGlkO1xuICAgIGlmICghJHNjb3BlLmZldGNoZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFpZCkge1xuICAgICAgJHNjb3BlLmpzb24gPSAnJztcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFjb2xsZWN0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBpdGVtID0gY29sbGVjdGlvbi5maW5kKChpdGVtKSA9PiB7IHJldHVybiBnZXROYW1lKGl0ZW0pID09PSBpZDsgfSk7XG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgICRzY29wZS5qc29uID0gYW5ndWxhci50b0pzb24oaXRlbSwgdHJ1ZSk7XG4gICAgICAkc2NvcGUuaXRlbSA9IGl0ZW07XG4gICAgfSBlbHNlIHtcbiAgICAgICRzY29wZS5pZCA9IHVuZGVmaW5lZDtcbiAgICAgICRzY29wZS5qc29uID0gJyc7XG4gICAgICAkc2NvcGUuaXRlbSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbGFiZWxzIHRleHQgc3RyaW5nIHVzaW5nIHRoZSA8Y29kZT5rZXkxPXZhbHVlMSxrZXkyPXZhbHVlMiwuLi4uPC9jb2RlPiBmb3JtYXRcbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiBsYWJlbHNUb1N0cmluZyhsYWJlbHMsIHNlcGVyYXRvclRleHQgPSBsYWJlbEZpbHRlclRleHRTZXBhcmF0b3IpIHtcbiAgICB2YXIgYW5zd2VyID0gXCJcIjtcbiAgICBhbmd1bGFyLmZvckVhY2gobGFiZWxzLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgdmFyIHNlcGFyYXRvciA9IGFuc3dlciA/IHNlcGVyYXRvclRleHQgOiBcIlwiO1xuXG4gICAgICBhbnN3ZXIgKz0gc2VwYXJhdG9yICsga2V5ICsgXCI9XCIgKyB2YWx1ZTtcbiAgICB9KTtcbiAgICByZXR1cm4gYW5zd2VyO1xuICB9XG5cblxuICBleHBvcnQgZnVuY3Rpb24gaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKSB7XG4gICAgJHNjb3BlLmJhc2VVcmkgPSBDb3JlLnRyaW1UcmFpbGluZyhDb3JlLnVybChcIi9cIikgfHwgXCJcIiwgXCIvXCIpIHx8IFwiXCI7XG5cbiAgICB2YXIgaW5qZWN0b3IgPSBIYXd0aW9Db3JlLmluamVjdG9yO1xuXG4gICAgZnVuY3Rpb24gaGFzU2VydmljZShuYW1lKSB7XG4gICAgICBpZiAoaW5qZWN0b3IpIHtcbiAgICAgICAgdmFyIFNlcnZpY2VSZWdpc3RyeSA9IGluamVjdG9yLmdldDxhbnk+KFwiU2VydmljZVJlZ2lzdHJ5XCIpO1xuICAgICAgICBpZiAoU2VydmljZVJlZ2lzdHJ5KSB7XG4gICAgICAgICAgcmV0dXJuIFNlcnZpY2VSZWdpc3RyeS5oYXNTZXJ2aWNlKG5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgJHNjb3BlLmhhc1NlcnZpY2VLaWJhbmEgPSAoKSA9PiBoYXNTZXJ2aWNlKGtpYmFuYVNlcnZpY2VOYW1lKTtcbiAgICAkc2NvcGUuaGFzU2VydmljZUdvZ3MgPSAoKSA9PiBoYXNTZXJ2aWNlKGdvZ3NTZXJ2aWNlTmFtZSk7XG4gICAgJHNjb3BlLmhhc1NlcnZpY2VGb3JnZSA9ICgpID0+IGhhc1NlcnZpY2UoZmFicmljOEZvcmdlU2VydmljZU5hbWUpO1xuICAgICRzY29wZS5oYXNTZXJ2aWNlQXBpbWFuID0gKCkgPT4gaGFzU2VydmljZShhcGltYW5TZXJ2aWNlTmFtZSk7XG5cbiAgICAkc2NvcGUudmlld1RlbXBsYXRlcyA9ICgpID0+IHtcbiAgICAgIHZhciByZXR1cm5UbyA9ICRsb2NhdGlvbi51cmwoKTtcbiAgICAgICRsb2NhdGlvbi5wYXRoKCcva3ViZXJuZXRlcy90ZW1wbGF0ZXMnKS5zZWFyY2goeydyZXR1cm5Ubyc6IHJldHVyblRvfSk7XG4gICAgfTtcblxuICAgICRzY29wZS5uYW1lc3BhY2UgPSAkcm91dGVQYXJhbXMubmFtZXNwYWNlIHx8ICRzY29wZS5uYW1lc3BhY2UgfHwgS3ViZXJuZXRlc1N0YXRlLnNlbGVjdGVkTmFtZXNwYWNlIHx8IGRlZmF1bHROYW1lc3BhY2U7XG4gICAgaWYgKCRzY29wZS5uYW1lc3BhY2UgIT0gS3ViZXJuZXRlc1N0YXRlLnNlbGVjdGVkTmFtZXNwYWNlKSB7XG4gICAgICBLdWJlcm5ldGVzU3RhdGUuc2VsZWN0ZWROYW1lc3BhY2UgPSAkc2NvcGUubmFtZXNwYWNlO1xuXG4gICAgICAvLyBsZXRzIHNob3cgcGFnZSBpcyBnb2luZyB0byByZWxvYWRcbiAgICAgIGlmICgkc2NvcGUubW9kZWwpIHtcbiAgICAgICAgJHNjb3BlLm1vZGVsLmZldGNoZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgS3ViZXJuZXRlcy5zZXRDdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgkc2NvcGUubmFtZXNwYWNlKTtcblxuICAgICRzY29wZS5mb3JnZUVuYWJsZWQgPSBpc0ZvcmdlRW5hYmxlZCgpO1xuXG4gICAgJHNjb3BlLnByb2plY3RJZCA9ICRyb3V0ZVBhcmFtc1tcInByb2plY3RcIl0gfHwgJHNjb3BlLnByb2plY3RJZCB8fCAkc2NvcGUuaWQ7XG4gICAgdmFyIHNob3dQcm9qZWN0TmF2QmFycyA9IGZhbHNlO1xuICAgIGlmICgkc2NvcGUucHJvamVjdElkICYmIHNob3dQcm9qZWN0TmF2QmFycykge1xuICAgICAgJHNjb3BlLmJyZWFkY3J1bWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdEJyZWFkY3J1bWJzKCRzY29wZS5wcm9qZWN0SWQpO1xuICAgICAgJHNjb3BlLnN1YlRhYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVQcm9qZWN0U3ViTmF2QmFycygkc2NvcGUucHJvamVjdElkLCBudWxsLCAkc2NvcGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAkc2NvcGUuYnJlYWRjcnVtYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVFbnZpcm9ubWVudEJyZWFkY3J1bWJzKCRzY29wZSwgJGxvY2F0aW9uLCAkcm91dGVQYXJhbXMpO1xuICAgICAgJHNjb3BlLnN1YlRhYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVFbnZpcm9ubWVudFN1Yk5hdkJhcnMoJHNjb3BlLCAkbG9jYXRpb24sICRyb3V0ZVBhcmFtcyk7XG4gICAgfVxuXG4gICAgaWYgKCRzY29wZS5wcm9qZWN0SWQpIHtcbiAgICAgICRzY29wZS4kcHJvamVjdExpbmsgPSBEZXZlbG9wZXIucHJvamVjdExpbmsoJHNjb3BlLnByb2plY3RJZCk7XG4gICAgfVxuXG4gICAgJHNjb3BlLmxpbmsgPSAoaHJlZikgPT4ge1xuICAgICAgaWYgKCFocmVmKSB7XG4gICAgICAgIHJldHVybiBocmVmO1xuICAgICAgfVxuICAgICAgaWYgKCRzY29wZS4kcHJvamVjdExpbmspIHtcbiAgICAgICAgcmV0dXJuIERldmVsb3Blci5uYW1lc3BhY2VMaW5rKCRzY29wZSwgJHJvdXRlUGFyYW1zLCBocmVmLnJlcGxhY2UoL15cXC9rdWJlcm5ldGVzLywgJycpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBocmVmO1xuICAgICAgfVxuICAgIH1cblxuICAgICRzY29wZS5jb2RlTWlycm9yT3B0aW9ucyA9IHtcbiAgICAgIGxpbmVXcmFwcGluZyA6IHRydWUsXG4gICAgICBsaW5lTnVtYmVyczogdHJ1ZSxcbiAgICAgIHJlYWRPbmx5OiAnbm9jdXJzb3InLFxuICAgICAgbW9kZToge25hbWU6IFwiamF2YXNjcmlwdFwiLCBqc29uOiB0cnVlfVxuICAgIH07XG5cbiAgICAkc2NvcGUucmVzaXplRGlhbG9nID0ge1xuICAgICAgY29udHJvbGxlcjogbnVsbCxcbiAgICAgIG5ld1JlcGxpY2FzOiAwLFxuICAgICAgZGlhbG9nOiBuZXcgVUkuRGlhbG9nKCksXG4gICAgICBvbk9rOiAoKSA9PiB7XG4gICAgICAgIHZhciByZXNpemVEaWFsb2cgPSAkc2NvcGUucmVzaXplRGlhbG9nO1xuICAgICAgICByZXNpemVEaWFsb2cuZGlhbG9nLmNsb3NlKCk7XG4gICAgICAgIHJlc2l6ZUNvbnRyb2xsZXIoJGh0dHAsIEt1YmVybmV0ZXNBcGlVUkwsIHJlc2l6ZURpYWxvZy5jb250cm9sbGVyLCByZXNpemVEaWFsb2cubmV3UmVwbGljYXMsICgpID0+IHsgbG9nLmRlYnVnKFwidXBkYXRlZCBudW1iZXIgb2YgcmVwbGljYXNcIik7IH0pXG4gICAgICB9LFxuICAgICAgb3BlbjogKGNvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgdmFyIHJlc2l6ZURpYWxvZyA9ICRzY29wZS5yZXNpemVEaWFsb2c7XG4gICAgICAgIHJlc2l6ZURpYWxvZy5jb250cm9sbGVyID0gY29udHJvbGxlcjtcbiAgICAgICAgcmVzaXplRGlhbG9nLm5ld1JlcGxpY2FzID0gQ29yZS5wYXRoR2V0KGNvbnRyb2xsZXIsIFtcInN0YXR1c1wiLCBcInJlcGxpY2FzXCJdKTtcbiAgICAgICAgcmVzaXplRGlhbG9nLmRpYWxvZy5vcGVuKCk7XG5cbiAgICAgICAgJHRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICQoJyNyZXBsaWNhcycpLmZvY3VzKCk7XG4gICAgICAgIH0sIDUwKTtcbiAgICAgIH0sXG4gICAgICBjbG9zZTogKCkgPT4ge1xuICAgICAgICAkc2NvcGUucmVzaXplRGlhbG9nLmRpYWxvZy5jbG9zZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAkc2NvcGUudHJpZ2dlckJ1aWxkID0gKGJ1aWxkQ29uZmlnKSA9PiB7XG4gICAgICB2YXIgdXJsID0gYnVpbGRDb25maWcuJHRyaWdnZXJVcmw7XG4gICAgICBjb25zb2xlLmxvZyhcInRyaWdnZXJpbmcgYnVpbGQgYXQgdXJsOiBcIiArIHVybCk7XG4gICAgICBpZiAodXJsKSB7XG4gICAgICAgIC8vdmFyIGRhdGEgPSB7fTtcbiAgICAgICAgdmFyIGRhdGEgPSBudWxsO1xuICAgICAgICB2YXIgY29uZmlnID0ge1xuICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiBcImFwcGxpY2F0aW9uL2pzb25cIlxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG5hbWUgPSBDb3JlLnBhdGhHZXQoYnVpbGRDb25maWcsIFtcIm1ldGFkYXRhXCIsIFwibmFtZVwiXSk7XG4gICAgICAgIENvcmUubm90aWZpY2F0aW9uKCdpbmZvJywgXCJUcmlnZ2VyaW5nIGJ1aWxkIFwiICsgbmFtZSk7XG4gICAgICAgICRodHRwLnBvc3QodXJsLCBkYXRhLCBjb25maWcpLlxuICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcInRyaWdnZXIgd29ya2VkISBnb3QgZGF0YSBcIiArIGFuZ3VsYXIudG9Kc29uKGRhdGEsIHRydWUpKTtcbiAgICAgICAgICAgIC8vIFRPRE8gc2hvdWxkIHdlIHNob3cgc29tZSBsaW5rIHRvIHRoZSBidWlsZFxuICAgICAgICAgICAgQ29yZS5ub3RpZmljYXRpb24oJ2luZm8nLCBcIkJ1aWxkaW5nIFwiICsgbmFtZSk7XG4gICAgICAgICAgfSkuXG4gICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xuICAgICAgICAgICAgQ29yZS5ub3RpZmljYXRpb24oJ2Vycm9yJywgXCJGYWlsZWQgdG8gdHJpZ2dlciBidWlsZCBmb3IgXCIgKyBuYW1lICsgXCIuIFJldHVybmVkIGNvZGU6IFwiICsgc3RhdHVzICsgXCIgXCIgKyBkYXRhKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIHRoZSBVUkwgaWYgdGhlIGZpbHRlciBpcyBjaGFuZ2VkXG4gICAgJHNjb3BlLiR3YXRjaChcInRhYmxlQ29uZmlnLmZpbHRlck9wdGlvbnMuZmlsdGVyVGV4dFwiLCAodGV4dCkgPT4ge1xuICAgICAgLy92YXIgZmlsdGVyVGV4dCA9IEt1YmVybmV0ZXMuZmluZFZhbGVPZkxhYmVscyh0ZXh0KTtcbiAgICAgICRsb2NhdGlvbi5zZWFyY2goXCJxXCIsIHRleHQpO1xuICAgIH0pO1xuXG4gICAgJHNjb3BlLiRvbihcImxhYmVsRmlsdGVyVXBkYXRlXCIsICgkZXZlbnQsIHRleHQpID0+IHtcbiAgICAgIHZhciBmaWx0ZXJPcHRpb25zID0gKCRzY29wZS50YWJsZUNvbmZpZyB8fCB7fSkuZmlsdGVyT3B0aW9ucyB8fCB7fTtcbiAgICAgIHZhciBjdXJyZW50RmlsdGVyID0gZmlsdGVyT3B0aW9ucy5maWx0ZXJUZXh0O1xuICAgICAgaWYgKENvcmUuaXNCbGFuayhjdXJyZW50RmlsdGVyKSkge1xuICAgICAgICBmaWx0ZXJPcHRpb25zLmZpbHRlclRleHQgPSB0ZXh0O1xuICAgICAgfWVsc2V7XG4gICAgICAgIHZhciBleHByZXNzaW9ucyA9IGN1cnJlbnRGaWx0ZXIuc3BsaXQoL1xccysvKTtcbiAgICAgICAgaWYgKGV4cHJlc3Npb25zLmluZGV4T2YodGV4dCkgIT09IC0xKSB7XG4gICAgICAgICAgLy8gbGV0cyBleGNsdWRlIHRoaXMgZmlsdGVyIGV4cHJlc3Npb25cbiAgICAgICAgICBleHByZXNzaW9ucyA9IGV4cHJlc3Npb25zLnJlbW92ZSh0ZXh0KTtcbiAgICAgICAgICBmaWx0ZXJPcHRpb25zLmZpbHRlclRleHQgPSBleHByZXNzaW9ucy5qb2luKFwiIFwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWx0ZXJPcHRpb25zLmZpbHRlclRleHQgPSBjdXJyZW50RmlsdGVyICsgXCIgXCIgKyB0ZXh0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAkc2NvcGUuaWQgPSB1bmRlZmluZWQ7XG4gICAgfSk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcG9kcyB0aGF0IGFyZSByZWFkeVxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIHJlYWR5UG9kQ291bnQoc2VydmljZSkge1xuICAgIHZhciBjb3VudCA9IDA7XG4gICAgYW5ndWxhci5mb3JFYWNoKChzZXJ2aWNlIHx8IHt9KS4kcG9kcywgKHBvZCk9PiB7XG4gICAgICBpZiAocG9kLiRyZWFkeSkge1xuICAgICAgICBjb3VudCsrO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjb3VudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzZXJ2aWNlIGxpbmsgVVJMIGZvciBlaXRoZXIgdGhlIHNlcnZpY2UgbmFtZSBvciB0aGUgc2VydmljZSBvYmplY3RcbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiBzZXJ2aWNlTGlua1VybChzZXJ2aWNlLCBodHRwT25seSA9IGZhbHNlKSB7XG4gICAgaWYgKGFuZ3VsYXIuaXNPYmplY3Qoc2VydmljZSkpIHtcbiAgICAgIHZhciBwb3J0YWxJUCA9IHNlcnZpY2UuJGhvc3Q7XG4gICAgICAvLyBsZXRzIGFzc3VtZSBubyBjdXN0b20gcG9ydCBmb3Igbm93IGZvciBleHRlcm5hbCByb3V0ZXNcbiAgICAgIHZhciBwb3J0ID0gbnVsbDtcbiAgICAgIHZhciBwcm90b2NvbCA9IFwiaHR0cDovL1wiO1xuICAgICAgdmFyIHNwZWMgPSBzZXJ2aWNlLnNwZWM7XG4gICAgICBpZiAoc3BlYykge1xuICAgICAgICBpZiAoIXBvcnRhbElQKSB7XG4gICAgICAgICAgcG9ydGFsSVAgPSBzcGVjLnBvcnRhbElQO1xuICAgICAgICB9XG4gICAgICAgIHZhciBoYXNIdHRwcyA9IGZhbHNlO1xuICAgICAgICB2YXIgaGFzSHR0cCA9IGZhbHNlO1xuICAgICAgICBhbmd1bGFyLmZvckVhY2goc3BlYy5wb3J0cywgKHBvcnRTcGVjKSA9PiB7XG4gICAgICAgICAgdmFyIHAgPSBwb3J0U3BlYy5wb3J0O1xuICAgICAgICAgIGlmIChwKSB7XG4gICAgICAgICAgICBpZiAocCA9PT0gNDQzKSB7XG4gICAgICAgICAgICAgIGhhc0h0dHBzID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocCA9PT0gODApIHtcbiAgICAgICAgICAgICAgaGFzSHR0cCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXBvcnQpIHtcbiAgICAgICAgICAgICAgcG9ydCA9IHA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFoYXNIdHRwcyAmJiAhaGFzSHR0cCAmJiBwb3J0KSB7XG4gICAgICAgICAgLy8gbGV0cyB0cmVhdCA4MDgwIGFzIGh0dHAgd2hpY2ggaXMgYSBjb21tb24gc2VydmljZSB0byBleHBvcnRcbiAgICAgICAgICBpZiAocG9ydCA9PT0gODA4MCkge1xuICAgICAgICAgICAgaGFzSHR0cCA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIGlmIChwb3J0ID09PSA4NDQzKSB7XG4gICAgICAgICAgICBoYXNIdHRwcyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocG9ydGFsSVApIHtcbiAgICAgICAgaWYgKGhhc0h0dHBzKSB7XG4gICAgICAgICAgcmV0dXJuIFwiaHR0cHM6Ly9cIiArIHBvcnRhbElQO1xuICAgICAgICB9IGVsc2UgaWYgKGhhc0h0dHApIHtcbiAgICAgICAgICByZXR1cm4gXCJodHRwOi8vXCIgKyBwb3J0YWxJUDtcbiAgICAgICAgfSBlbHNlIGlmICghaHR0cE9ubHkpIHtcbiAgICAgICAgICBpZiAocG9ydCkge1xuICAgICAgICAgICAgcmV0dXJuIHByb3RvY29sICsgcG9ydGFsSVAgKyBcIjpcIiArIHBvcnQgKyBcIi9cIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHByb3RvY29sICsgcG9ydGFsSVA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzZXJ2aWNlKSB7XG4gICAgICB2YXIgc2VydmljZUlkID0gc2VydmljZS50b1N0cmluZygpO1xuICAgICAgaWYgKHNlcnZpY2VJZCkge1xuICAgICAgICB2YXIgU2VydmljZVJlZ2lzdHJ5ID0gZ2V0U2VydmljZVJlZ2lzdHJ5KCk7XG4gICAgICAgIGlmIChTZXJ2aWNlUmVnaXN0cnkpIHtcbiAgICAgICAgICByZXR1cm4gU2VydmljZVJlZ2lzdHJ5LnNlcnZpY2VMaW5rKHNlcnZpY2VJZCkgfHwgXCJcIjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZiBjb3VudGVycyBmb3IgdGhlIHBvZENvdW50ZXJzIG9iamVjdFxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIHBvZENvdW50ZXJUb3RhbCgkcG9kQ291bnRlcnMpIHtcbiAgICB2YXIgYW5zd2VyID0gMDtcbiAgICBpZiAoJHBvZENvdW50ZXJzKSB7XG4gICAgICBhbmd1bGFyLmZvckVhY2goW1wicmVhZHlcIiwgXCJ2YWxpZFwiLCBcIndhaXRpbmdcIiwgXCJlcnJvclwiXSwgKG5hbWUpID0+IHtcbiAgICAgICAgdmFyIHZhbHVlID0gJHBvZENvdW50ZXJzW25hbWVdIHx8IDA7XG4gICAgICAgIGFuc3dlciArPSB2YWx1ZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYW5zd2VyO1xuICB9XG5cbiAgLyoqXG4gICAqIEdpdmVuIHRoZSBsaXN0IG9mIHBvZHMgbGV0cyBpdGVyYXRlIHRocm91Z2ggdGhlbSBhbmQgZmluZCBhbGwgcG9kcyBtYXRjaGluZyB0aGUgc2VsZWN0b3JcbiAgICogYW5kIHJldHVybiBjb3VudGVycyBiYXNlZCBvbiB0aGUgc3RhdHVzIG9mIHRoZSBwb2RcbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQb2RDb3VudGVycyhzZWxlY3RvciwgcG9kcywgb3V0cHV0UG9kcyA9IFtdLCBwb2RMaW5rUXVlcnkgPSBudWxsLCBwb2RMaW5rVXJsID0gbnVsbCkge1xuICAgIGlmICghcG9kTGlua1VybCkge1xuICAgICAgcG9kTGlua1VybCA9IFwiL2t1YmVybmV0ZXMvcG9kc1wiO1xuICAgIH1cbiAgICB2YXIgZmlsdGVyRm47XG4gICAgaWYgKGFuZ3VsYXIuaXNGdW5jdGlvbihzZWxlY3RvcikpIHtcbiAgICAgIGZpbHRlckZuID0gc2VsZWN0b3I7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpbHRlckZuID0gKHBvZCkgPT4gc2VsZWN0b3JNYXRjaGVzKHNlbGVjdG9yLCBnZXRMYWJlbHMocG9kKSk7XG4gICAgfVxuICAgIHZhciBhbnN3ZXIgPSB7XG4gICAgICBwb2RzTGluazogXCJcIixcbiAgICAgIHJlYWR5OiAwLFxuICAgICAgdmFsaWQ6IDAsXG4gICAgICB3YWl0aW5nOiAwLFxuICAgICAgZXJyb3I6IDBcbiAgICB9O1xuICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgaWYgKCFwb2RMaW5rUXVlcnkpIHtcbiAgICAgICAgcG9kTGlua1F1ZXJ5ID0gS3ViZXJuZXRlcy5sYWJlbHNUb1N0cmluZyhzZWxlY3RvciwgXCIgXCIpO1xuICAgICAgfVxuICAgICAgYW5zd2VyLnBvZHNMaW5rID0gcG9kTGlua1VybCArIFwiP3E9XCIgKyBlbmNvZGVVUklDb21wb25lbnQocG9kTGlua1F1ZXJ5KTtcbiAgICAgIGFuZ3VsYXIuZm9yRWFjaChwb2RzLCBwb2QgPT4ge1xuICAgICAgICBpZiAoZmlsdGVyRm4ocG9kKSkge1xuICAgICAgICAgIG91dHB1dFBvZHMucHVzaChwb2QpO1xuICAgICAgICAgIHZhciBzdGF0dXMgPSBnZXRTdGF0dXMocG9kKTtcbiAgICAgICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICB2YXIgbG93ZXIgPSBzdGF0dXMudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGlmIChsb3dlci5zdGFydHNXaXRoKFwicnVuXCIpKSB7XG4gICAgICAgICAgICAgIGlmIChpc1JlYWR5KHBvZCkpIHtcbiAgICAgICAgICAgICAgICBhbnN3ZXIucmVhZHkgKz0gMTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhbnN3ZXIudmFsaWQgKz0gMTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChsb3dlci5zdGFydHNXaXRoKFwid2FpdFwiKSB8fCBsb3dlci5zdGFydHNXaXRoKFwicGVuZFwiKSkge1xuICAgICAgICAgICAgICBhbnN3ZXIud2FpdGluZyArPSAxO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChsb3dlci5zdGFydHNXaXRoKFwidGVybVwiKSB8fCBsb3dlci5zdGFydHNXaXRoKFwiZXJyb3JcIikgfHwgbG93ZXIuc3RhcnRzV2l0aChcImZhaWxcIikpIHtcbiAgICAgICAgICAgICAgYW5zd2VyLmVycm9yICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFuc3dlci5lcnJvciArPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhbnN3ZXI7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgdGhlIGdpdmVuIGpzb24gaW50byBhbiBhcnJheSBvZiBpdGVtcy4gSWYgdGhlIGpzb24gY29udGFpbnMgYSBuZXN0ZWQgc2V0IG9mIGl0ZW1zIHRoZW4gdGhhdCBpcyBzb3J0ZWQ7IHNvIHRoYXQgc2VydmljZXNcbiAgICogYXJlIHByb2Nlc3NlZCBmaXJzdDsgdGhlbiB0dXJuZWQgaW50byBhbiBhcnJheS4gT3RoZXJ3aXNlIHRoZSBqc29uIGlzIHB1dCBpbnRvIGFuIGFycmF5IHNvIGl0IGNhbiBiZSBwcm9jZXNzZWQgcG9seW1vcnBoaWNhbGx5XG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24gY29udmVydEt1YmVybmV0ZXNKc29uVG9JdGVtcyhqc29uKSB7XG4gICAgdmFyIGl0ZW1zID0ganNvbi5pdGVtcztcbiAgICBpZiAoYW5ndWxhci5pc0FycmF5KGl0ZW1zKSkge1xuICAgICAgLy8gVE9ETyB3ZSBjb3VsZCBjaGVjayBmb3IgTGlzdCBvciBDb25maWcgdHlwZXMgaGVyZSBhbmQgd2FybiBpZiBub3RcblxuICAgICAgLy8gc29ydCB0aGUgc2VydmljZXMgZmlyc3RcbiAgICAgIHZhciBhbnN3ZXIgPSBbXTtcbiAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgaWYgKGl0ZW0ua2luZCA9PT0gXCJTZXJ2aWNlXCIpIHtcbiAgICAgICAgICBhbnN3ZXIucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgIGlmIChpdGVtLmtpbmQgIT09IFwiU2VydmljZVwiKSB7XG4gICAgICAgICAgYW5zd2VyLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGFuc3dlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtqc29uXTtcbiAgICB9XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gaXNWMWJldGExT3IyKCkge1xuICAgIHJldHVybiBkZWZhdWx0QXBpVmVyc2lvbiA9PT0gXCJ2MWJldGExXCIgfHwgZGVmYXVsdEFwaVZlcnNpb24gPT09IFwidjFiZXRhMlwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBsaW5rIHRvIHRoZSBkZXRhaWwgcGFnZSBmb3IgdGhlIGdpdmVuIGVudGl0eVxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIGVudGl0eVBhZ2VMaW5rKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGZ1bmN0aW9uIGdldExpbmsoZW50aXR5KSB7XG4gICAgICAgIHZhciB2aWV3TGluayA9IGVudGl0eVtcIiR2aWV3TGlua1wiXTtcbiAgICAgICAgaWYgKHZpZXdMaW5rKSB7XG4gICAgICAgICAgcmV0dXJuIHZpZXdMaW5rO1xuICAgICAgICB9XG4gICAgICAgIHZhciBpZCA9IGdldE5hbWUoZW50aXR5KTtcbiAgICAgICAgdmFyIGtpbmQgPSBnZXRLaW5kKGVudGl0eSk7XG4gICAgICAgIGlmIChraW5kICYmIGlkKSB7XG4gICAgICAgICAgdmFyIHBhdGggPSBraW5kLnN1YnN0cmluZygwLCAxKS50b0xvd2VyQ2FzZSgpICsga2luZC5zdWJzdHJpbmcoMSkgKyBcInNcIjtcbiAgICAgICAgICB2YXIgbmFtZXNwYWNlID0gZ2V0TmFtZXNwYWNlKGVudGl0eSk7XG4gICAgICAgICAgaWYgKG5hbWVzcGFjZSAmJiAhaXNJZ25vcmVOYW1lc3BhY2VLaW5kKGtpbmQpKSB7XG4gICAgICAgICAgICByZXR1cm4gQ29yZS51cmwoVXJsSGVscGVycy5qb2luKCcva3ViZXJuZXRlcy9uYW1lc3BhY2UnLCBuYW1lc3BhY2UsIHBhdGgsIGlkKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBDb3JlLnVybChVcmxIZWxwZXJzLmpvaW4oJy9rdWJlcm5ldGVzJywgcGF0aCwgaWQpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBiYXNlTGluayA9IGdldExpbmsob2JqKTtcbiAgICAgIGlmICghSGF3dGlvQ29yZS5pbmplY3RvciB8fCAhYmFzZUxpbmspIHtcbiAgICAgICAgcmV0dXJuIGJhc2VMaW5rO1xuICAgICAgfVxuICAgICAgdmFyICRyb3V0ZVBhcmFtcyA9IEhhd3Rpb0NvcmUuaW5qZWN0b3IuZ2V0PG5nLnJvdXRlLklSb3V0ZVBhcmFtc1NlcnZpY2U+KCckcm91dGVQYXJhbXMnKTtcbiAgICAgIHZhciBwcm9qZWN0SWQgPSAkcm91dGVQYXJhbXNbJ3Byb2plY3QnXSB8fCAkcm91dGVQYXJhbXNbJ3Byb2plY3QnXTtcbiAgICAgIGlmICghcHJvamVjdElkKSB7XG4gICAgICAgIHJldHVybiBiYXNlTGluaztcbiAgICAgIH1cbiAgICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oRGV2ZWxvcGVyLnByb2plY3RMaW5rKHByb2plY3RJZCksIGJhc2VMaW5rLnJlcGxhY2UoL15cXC9rdWJlcm5ldGVzXFwvLywgJycpKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuXG4gIGV4cG9ydCBmdW5jdGlvbiByZXNvdXJjZUtpbmRUb1VyaVBhdGgoa2luZCkge1xuICAgIHZhciBraW5kUGF0aCA9IGtpbmQudG9Mb3dlckNhc2UoKSArIFwic1wiO1xuICAgIGlmIChraW5kUGF0aCA9PT0gXCJyZXBsaWNhdGlvbkNvbnRyb2xsZXJzXCIgJiYgIWlzVjFiZXRhMU9yMigpKSB7XG4gICAgICBraW5kUGF0aCA9IFwicmVwbGljYXRpb25jb250cm9sbGVyc1wiO1xuICAgIH1cbiAgICByZXR1cm4ga2luZFBhdGg7XG4gIH1cblxuICBmdW5jdGlvbiBpc0lnbm9yZU5hbWVzcGFjZUtpbmQoa2luZCkge1xuICAgIHJldHVybiBraW5kID09PSBcIkhvc3RcIiB8fCBraW5kID09PSBcIk1pbmlvblwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHJvb3QgVVJMIGZvciB0aGUga2luZFxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIGt1YmVybmV0ZXNVcmxGb3JLaW5kKEt1YmVybmV0ZXNBcGlVUkwsIGtpbmQsIG5hbWVzcGFjZSA9IG51bGwsIHBhdGggPSBudWxsKSB7XG4gICAgdmFyIHBhdGhTZWdtZW50ID0gXCJcIjtcbiAgICBpZiAocGF0aCkge1xuICAgICAgcGF0aFNlZ21lbnQgPSBcIi9cIiArIENvcmUudHJpbUxlYWRpbmcocGF0aCwgXCIvXCIpO1xuICAgIH1cbiAgICB2YXIga2luZFBhdGggPSByZXNvdXJjZUtpbmRUb1VyaVBhdGgoa2luZCk7XG4gICAgdmFyIGlnbm9yZU5hbWVzcGFjZSA9IGlzSWdub3JlTmFtZXNwYWNlS2luZChraW5kKTtcbiAgICBpZiAoaXNWMWJldGExT3IyKCkgfHwgaWdub3JlTmFtZXNwYWNlKSB7XG4gICAgICB2YXIgcG9zdGZpeCA9IFwiXCI7XG4gICAgICBpZiAobmFtZXNwYWNlICYmICFpZ25vcmVOYW1lc3BhY2UpIHtcbiAgICAgICAgcG9zdGZpeCA9IFwiP25hbWVzcGFjZT1cIiArIG5hbWVzcGFjZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oS3ViZXJuZXRlc0FwaVVSTCwga2luZFBhdGgsIHBhdGhTZWdtZW50LCBwb3N0Zml4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihLdWJlcm5ldGVzQXBpVVJMLCBcIi9uYW1lc3BhY2VzL1wiLCBuYW1lc3BhY2UgLCBraW5kUGF0aCwgcGF0aFNlZ21lbnQpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYmFzZSBVUkwgZm9yIHRoZSBraW5kIG9mIGt1YmVybmV0ZXMgcmVzb3VyY2Ugb3IgbnVsbCBpZiBpdCBjYW5ub3QgYmUgZm91bmRcbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiBrdWJlcm5ldGVzVXJsRm9ySXRlbUtpbmQoS3ViZXJuZXRlc0FwaVVSTCwganNvbikge1xuICAgIHZhciBraW5kID0ganNvbi5raW5kO1xuICAgIGlmIChraW5kKSB7XG4gICAgICByZXR1cm4ga3ViZXJuZXRlc1VybEZvcktpbmQoS3ViZXJuZXRlc0FwaVVSTCwga2luZCwganNvbi5uYW1lc3BhY2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2cud2FybihcIklnbm9yaW5nIG1pc3Npbmcga2luZCBcIiArIGtpbmQgKyBcIiBmb3Iga3ViZXJuZXRlcyBqc29uOiBcIiArIGFuZ3VsYXIudG9Kc29uKGpzb24pKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBrdWJlcm5ldGVzUHJveHlVcmxGb3JTZXJ2aWNlKEt1YmVybmV0ZXNBcGlVUkwsIHNlcnZpY2UsIHBhdGggPSBudWxsKSB7XG4gICAgdmFyIHBhdGhTZWdtZW50ID0gXCJcIjtcbiAgICBpZiAocGF0aCkge1xuICAgICAgcGF0aFNlZ21lbnQgPSBcIi9cIiArIENvcmUudHJpbUxlYWRpbmcocGF0aCwgXCIvXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXRoU2VnbWVudCA9IFwiL1wiO1xuICAgIH1cbiAgICB2YXIgbmFtZXNwYWNlID0gZ2V0TmFtZXNwYWNlKHNlcnZpY2UpO1xuICAgIGlmIChpc1YxYmV0YTFPcjIoKSkge1xuICAgICAgdmFyIHBvc3RmaXggPSBcIj9uYW1lc3BhY2U9XCIgKyBuYW1lc3BhY2U7XG4gICAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKEt1YmVybmV0ZXNBcGlVUkwsIFwiL3Byb3h5XCIsICBrdWJlcm5ldGVzTmFtZXNwYWNlUGF0aCgpLCBcIi9zZXJ2aWNlcy9cIiArIGdldE5hbWUoc2VydmljZSkgKyBwYXRoU2VnbWVudCArIHBvc3RmaXgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKEt1YmVybmV0ZXNBcGlVUkwsIFwiL3Byb3h5L25hbWVzcGFjZXMvXCIsIG5hbWVzcGFjZSwgXCIvc2VydmljZXMvXCIgKyBnZXROYW1lKHNlcnZpY2UpICsgcGF0aFNlZ21lbnQpO1xuICAgIH1cbiAgfVxuXG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGt1YmVybmV0ZXNQcm94eVVybEZvclNlcnZpY2VDdXJyZW50TmFtZXNwYWNlKHNlcnZpY2UsIHBhdGggPSBudWxsKSB7XG4gICAgdmFyIGFwaVByZWZpeCA9IFVybEhlbHBlcnMuam9pbihrdWJlcm5ldGVzQXBpVXJsKCkpO1xuICAgIHJldHVybiBrdWJlcm5ldGVzUHJveHlVcmxGb3JTZXJ2aWNlKGFwaVByZWZpeCwgc2VydmljZSwgcGF0aCk7XG5cbiAgfVxuICBleHBvcnQgZnVuY3Rpb24gYnVpbGRDb25maWdSZXN0VXJsKGlkKSB7XG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihidWlsZENvbmZpZ3NSZXN0VVJMKCksIGlkKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBkZXBsb3ltZW50Q29uZmlnUmVzdFVybChpZCkge1xuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oZGVwbG95bWVudENvbmZpZ3NSZXN0VVJMKCksIGlkKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBpbWFnZVJlcG9zaXRvcnlSZXN0VXJsKGlkKSB7XG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihpbWFnZVJlcG9zaXRvcmllc1Jlc3RVUkwoKSwgaWQpO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkUmVzdFVybChpZCkge1xuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oYnVpbGRzUmVzdFVSTCgpLCBpZCk7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gYnVpbGRMb2dzUmVzdFVybChpZCkge1xuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oYnVpbGRzUmVzdFVSTCgpLCBpZCwgXCJsb2dcIik7XG4gIH1cblxuICAvKipcbiAgICogUnVucyB0aGUgZ2l2ZW4gYXBwbGljYXRpb24gSlNPTlxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIHJ1bkFwcCgkbG9jYXRpb24sICRzY29wZSwgJGh0dHAsIEt1YmVybmV0ZXNBcGlVUkwsIGpzb24sIG5hbWUgPSBcIkFwcFwiLCBvblN1Y2Nlc3NGbiA9IG51bGwsIG5hbWVzcGFjZSA9IG51bGwsIG9uQ29tcGxldGVGbiA9IG51bGwpIHtcbiAgICBpZiAoanNvbikge1xuICAgICAgaWYgKGFuZ3VsYXIuaXNTdHJpbmcoanNvbikpIHtcbiAgICAgICAganNvbiA9IGFuZ3VsYXIuZnJvbUpzb24oanNvbik7XG4gICAgICB9XG4gICAgICBuYW1lID0gbmFtZSB8fCBcIkFwcFwiO1xuICAgICAgdmFyIHBvc3RmaXggPSBuYW1lc3BhY2UgPyBcIiBpbiBuYW1lc3BhY2UgXCIgKyBuYW1lc3BhY2UgOiBcIlwiO1xuICAgICAgQ29yZS5ub3RpZmljYXRpb24oJ2luZm8nLCBcIlJ1bm5pbmcgXCIgKyBuYW1lICsgcG9zdGZpeCk7XG5cbiAgICAgIHZhciBpdGVtcyA9IGNvbnZlcnRLdWJlcm5ldGVzSnNvblRvSXRlbXMoanNvbik7XG4gICAgICBhbmd1bGFyLmZvckVhY2goaXRlbXMsIChpdGVtKSA9PiB7XG4gICAgICAgIHZhciB1cmwgPSBrdWJlcm5ldGVzVXJsRm9ySXRlbUtpbmQoS3ViZXJuZXRlc0FwaVVSTCwgaXRlbSk7XG4gICAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgICAkaHR0cC5wb3N0KHVybCwgaXRlbSkuXG4gICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICBsb2cuZGVidWcoXCJHb3Qgc3RhdHVzOiBcIiArIHN0YXR1cyArIFwiIG9uIHVybDogXCIgKyB1cmwgKyBcIiBkYXRhOiBcIiArIGRhdGEgKyBcIiBhZnRlciBwb3N0aW5nOiBcIiArIGFuZ3VsYXIudG9Kc29uKGl0ZW0pKTtcbiAgICAgICAgICAgICAgaWYgKGFuZ3VsYXIuaXNGdW5jdGlvbihvbkNvbXBsZXRlRm4pKSB7XG4gICAgICAgICAgICAgICAgb25Db21wbGV0ZUZuKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgICAgIH0pLlxuICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBudWxsO1xuICAgICAgICAgICAgaWYgKGFuZ3VsYXIuaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgICAgICAgICAgbWVzc2FnZSA9IGRhdGEubWVzc2FnZTtcbiAgICAgICAgICAgICAgdmFyIHJlYXNvbiA9IGRhdGEucmVhc29uO1xuICAgICAgICAgICAgICBpZiAocmVhc29uID09PSBcIkFscmVhZHlFeGlzdHNcIikge1xuICAgICAgICAgICAgICAgIC8vIGxldHMgaWdub3JlIGR1cGxpY2F0ZXNcbiAgICAgICAgICAgICAgICBsb2cuZGVidWcoXCJlbnRpdHkgYWxyZWFkeSBleGlzdHMgYXQgXCIgKyB1cmwpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFtZXNzYWdlKSB7XG4gICAgICAgICAgICAgIG1lc3NhZ2UgPSBcIkZhaWxlZCB0byBQT1NUIHRvIFwiICsgdXJsICsgXCIgZ290IHN0YXR1czogXCIgKyBzdGF0dXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBzYXZlIFwiICsgdXJsICsgXCIgc3RhdHVzOiBcIiArIHN0YXR1cyArIFwiIHJlc3BvbnNlOiBcIiArIGFuZ3VsYXIudG9Kc29uKGRhdGEsIHRydWUpKTtcbiAgICAgICAgICAgIENvcmUubm90aWZpY2F0aW9uKCdlcnJvcicsIG1lc3NhZ2UpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBwb2QgaXMgcnVubmluZ1xuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzUnVubmluZyhwb2RDdXJyZW50U3RhdGUpIHtcbiAgICB2YXIgc3RhdHVzID0gKHBvZEN1cnJlbnRTdGF0ZSB8fCB7fSkucGhhc2U7XG4gICAgaWYgKHN0YXR1cykge1xuICAgICAgdmFyIGxvd2VyID0gc3RhdHVzLnRvTG93ZXJDYXNlKCk7XG4gICAgICByZXR1cm4gbG93ZXIuc3RhcnRzV2l0aChcInJ1blwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGxhYmVscyBvYmplY3QgaGFzIGFsbCBvZiB0aGUga2V5L3ZhbHVlIHBhaXJzIGZyb20gdGhlIHNlbGVjdG9yXG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24gc2VsZWN0b3JNYXRjaGVzKHNlbGVjdG9yLCBsYWJlbHMpIHtcbiAgICBpZiAoYW5ndWxhci5pc09iamVjdChsYWJlbHMpKSB7XG4gICAgICB2YXIgYW5zd2VyID0gdHJ1ZTtcbiAgICAgIHZhciBjb3VudCA9IDA7XG4gICAgICBhbmd1bGFyLmZvckVhY2goc2VsZWN0b3IsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICAgIGlmIChhbnN3ZXIgJiYgbGFiZWxzW2tleV0gIT09IHZhbHVlKSB7XG4gICAgICAgICAgYW5zd2VyID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGFuc3dlciAmJiBjb3VudCA+IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgc2VydmljZSByZWdpc3RyeVxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIGdldFNlcnZpY2VSZWdpc3RyeSgpIHtcbiAgICB2YXIgaW5qZWN0b3IgPSBIYXd0aW9Db3JlLmluamVjdG9yO1xuICAgIHJldHVybiBpbmplY3RvciA/IGluamVjdG9yLmdldDxhbnk+KFwiU2VydmljZVJlZ2lzdHJ5XCIpIDogbnVsbDtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBsaW5rIHRvIHRoZSBraWJhbmEgbG9ncyB3ZWIgYXBwbGljYXRpb25cbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiBraWJhbmFMb2dzTGluayhTZXJ2aWNlUmVnaXN0cnkpIHtcbiAgICB2YXIgbGluayA9IFNlcnZpY2VSZWdpc3RyeS5zZXJ2aWNlTGluayhraWJhbmFTZXJ2aWNlTmFtZSk7XG4gICAgaWYgKGxpbmspIHtcbiAgICAgIGlmICghbGluay5lbmRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgbGluayArPSBcIi9cIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsaW5rICsgXCIjL2Rhc2hib2FyZC9GYWJyaWM4XCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBvcGVuTG9nc0ZvclBvZHMoU2VydmljZVJlZ2lzdHJ5LCAkd2luZG93LCBuYW1lc3BhY2UsIHBvZHMpIHtcbiAgICB2YXIgbGluayA9IGtpYmFuYUxvZ3NMaW5rKFNlcnZpY2VSZWdpc3RyeSk7XG4gICAgaWYgKGxpbmspIHtcbiAgICAgIHZhciBxdWVyeSA9IFwiXCI7XG4gICAgICB2YXIgY291bnQgPSAwO1xuICAgICAgYW5ndWxhci5mb3JFYWNoKHBvZHMsIChpdGVtKSA9PiB7XG4gICAgICAgIHZhciBpZCA9IGdldE5hbWUoaXRlbSk7XG4gICAgICAgIGlmIChpZCkge1xuICAgICAgICAgIHZhciBzcGFjZSA9IHF1ZXJ5ID8gXCIgT1IgXCIgOiBcIlwiO1xuICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgcXVlcnkgKz0gc3BhY2UgKyAnXCInICsgaWQgKyAnXCInO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChxdWVyeSkge1xuICAgICAgICBpZiAoY291bnQgPiAxKSB7XG4gICAgICAgICAgcXVlcnkgPSBcIihcIiArIHF1ZXJ5ICsgXCIpXCI7XG4gICAgICAgIH1cbiAgICAgICAgcXVlcnkgPSAna3ViZXJuZXRlcy5uYW1lc3BhY2VfbmFtZTpcIicgKyBuYW1lc3BhY2UgKyAnXCIgQU5EIGt1YmVybmV0ZXMucG9kX25hbWU6JyArIHF1ZXJ5O1xuICAgICAgICBsaW5rICs9IFwiP19hPShxdWVyeToocXVlcnlfc3RyaW5nOihxdWVyeTonXCIgKyBxdWVyeSArIFwiJykpKVwiO1xuICAgICAgICB2YXIgbmV3V2luZG93ID0gJHdpbmRvdy5vcGVuKGxpbmssIFwidmlld0xvZ3NcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIHJlc2l6ZUNvbnRyb2xsZXIoJGh0dHAsIEt1YmVybmV0ZXNBcGlVUkwsIHJlcGxpY2F0aW9uQ29udHJvbGxlciwgbmV3UmVwbGljYXMsIG9uQ29tcGxldGVGbiA9IG51bGwpIHtcbiAgICB2YXIgaWQgPSBnZXROYW1lKHJlcGxpY2F0aW9uQ29udHJvbGxlcik7XG4gICAgdmFyIG5hbWVzcGFjZSA9IGdldE5hbWVzcGFjZShyZXBsaWNhdGlvbkNvbnRyb2xsZXIpIHx8IFwiXCI7XG4gICAgdmFyIHVybCA9IGt1YmVybmV0ZXNVcmxGb3JLaW5kKEt1YmVybmV0ZXNBcGlVUkwsIFwiUmVwbGljYXRpb25Db250cm9sbGVyXCIsIG5hbWVzcGFjZSwgaWQpO1xuICAgICRodHRwLmdldCh1cmwpLlxuICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICB2YXIgZGVzaXJlZFN0YXRlID0gZGF0YS5zcGVjO1xuICAgICAgICAgIGlmICghZGVzaXJlZFN0YXRlKSB7XG4gICAgICAgICAgICBkZXNpcmVkU3RhdGUgPSB7fTtcbiAgICAgICAgICAgIGRhdGEuc3BlYyA9IGRlc2lyZWRTdGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVzaXJlZFN0YXRlLnJlcGxpY2FzID0gbmV3UmVwbGljYXM7XG4gICAgICAgICAgJGh0dHAucHV0KHVybCwgZGF0YSkuXG4gICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICBsb2cuZGVidWcoXCJ1cGRhdGVkIGNvbnRyb2xsZXIgXCIgKyB1cmwpO1xuICAgICAgICAgICAgICBpZiAoYW5ndWxhci5pc0Z1bmN0aW9uKG9uQ29tcGxldGVGbikpIHtcbiAgICAgICAgICAgICAgICBvbkNvbXBsZXRlRm4oKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkuXG4gICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBzYXZlIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KS5cbiAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xuICAgICAgfSk7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gc3RhdHVzVGV4dFRvQ3NzQ2xhc3ModGV4dCwgcmVhZHkgPSBmYWxzZSkge1xuICAgIGlmICh0ZXh0KSB7XG4gICAgICB2YXIgbG93ZXIgPSB0ZXh0LnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAobG93ZXIuc3RhcnRzV2l0aChcInJ1blwiKSB8fCBsb3dlci5zdGFydHNXaXRoKFwib2tcIikpIHtcbiAgICAgICAgaWYgKCFyZWFkeSkge1xuICAgICAgICAgIHJldHVybiBcImZhIGZhLXNwaW5uZXIgZmEtc3BpbiBncmVlblwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnZmEgZmEtcGxheS1jaXJjbGUgZ3JlZW4nO1xuICAgICAgfSBlbHNlIGlmIChsb3dlci5zdGFydHNXaXRoKFwid2FpdFwiKSB8fCBsb3dlci5zdGFydHNXaXRoKFwicGVuZFwiKSkge1xuICAgICAgICByZXR1cm4gJ2ZhIGZhLWRvd25sb2FkJztcbiAgICAgIH0gZWxzZSBpZiAobG93ZXIuc3RhcnRzV2l0aChcInRlcm1cIikgfHwgbG93ZXIuc3RhcnRzV2l0aChcImVycm9yXCIpIHx8IGxvd2VyLnN0YXJ0c1dpdGgoXCJmYWlsXCIpKSB7XG4gICAgICAgIHJldHVybiAnZmEgZmEtb2ZmIG9yYW5nZSc7XG4gICAgICB9IGVsc2UgaWYgKGxvd2VyLnN0YXJ0c1dpdGgoXCJzdWNjZWVkZWRcIikpIHtcbiAgICAgICAgcmV0dXJuICdmYSBmYS1jaGVjay1jaXJjbGUtbyBncmVlbic7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAnZmEgZmEtcXVlc3Rpb24gcmVkJztcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBwb2RTdGF0dXMocG9kKSB7XG4gICAgcmV0dXJuIGdldFN0YXR1cyhwb2QpO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzUmVhZHkocG9kKSB7XG4gICAgdmFyIHN0YXR1cyA9IHBvZC5zdGF0dXMgfHwge307XG4gICAgdmFyIGFuc3dlciA9IGZhbHNlO1xuICAgIGFuZ3VsYXIuZm9yRWFjaChzdGF0dXMuY29uZGl0aW9ucywgKGNvbmRpdGlvbikgPT4ge1xuICAgICAgdmFyIHQgPSBjb25kaXRpb24udHlwZTtcbiAgICAgIGlmICh0ICYmIHQgPT09IFwiUmVhZHlcIikge1xuICAgICAgICB2YXIgc3RhdHVzID0gY29uZGl0aW9uLnN0YXR1cztcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gXCJUcnVlXCIpIHtcbiAgICAgICAgICBhbnN3ZXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGFuc3dlcjtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBcHBWaWV3UG9kQ291bnRlcnMoYXBwVmlldykge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHZhciBtYXAgPSB7fTtcbiAgICB2YXIgcG9kcyA9IGFwcFZpZXcucG9kcztcbiAgICB2YXIgbG93ZXN0RGF0ZSA9IG51bGw7XG4gICAgYW5ndWxhci5mb3JFYWNoKHBvZHMsIHBvZCA9PiB7XG4gICAgICB2YXIgc2VsZWN0b3IgPSBnZXRMYWJlbHMocG9kKTtcbiAgICAgIHZhciBzZWxlY3RvclRleHQgPSBLdWJlcm5ldGVzLmxhYmVsc1RvU3RyaW5nKHNlbGVjdG9yLCBcIiBcIik7XG4gICAgICB2YXIgYW5zd2VyID0gbWFwW3NlbGVjdG9yXTtcbiAgICAgIGlmICghYW5zd2VyKSB7XG4gICAgICAgIGFuc3dlciA9IHtcbiAgICAgICAgICBsYWJlbFRleHQ6IHNlbGVjdG9yVGV4dCxcbiAgICAgICAgICBwb2RzTGluazogVXJsSGVscGVycy5qb2luKFwiL2t1YmVybmV0ZXMvbmFtZXNwYWNlL1wiLCBwb2QubWV0YWRhdGEubmFtZXNwYWNlLCBcInBvZHM/cT1cIiArIGVuY29kZVVSSUNvbXBvbmVudChzZWxlY3RvclRleHQpKSxcbiAgICAgICAgICB2YWxpZDogMCxcbiAgICAgICAgICB3YWl0aW5nOiAwLFxuICAgICAgICAgIGVycm9yOiAwXG4gICAgICAgIH07XG4gICAgICAgIG1hcFtzZWxlY3Rvcl0gPSBhbnN3ZXI7XG4gICAgICAgIGFycmF5LnB1c2goYW5zd2VyKTtcbiAgICAgIH1cbiAgICAgIHZhciBzdGF0dXMgPSAocG9kU3RhdHVzKHBvZCkgfHwgXCJFcnJvclwiKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKHN0YXR1cy5zdGFydHNXaXRoKFwicnVuXCIpIHx8IHN0YXR1cy5zdGFydHNXaXRoKFwib2tcIikpIHtcbiAgICAgICAgYW5zd2VyLnZhbGlkICs9IDE7XG4gICAgICB9IGVsc2UgaWYgKHN0YXR1cy5zdGFydHNXaXRoKFwid2FpdFwiKSB8fCBzdGF0dXMuc3RhcnRzV2l0aChcInB3bmRcIikpIHtcbiAgICAgICAgYW5zd2VyLndhaXRpbmcgKz0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFuc3dlci5lcnJvciArPSAxO1xuICAgICAgfVxuICAgICAgdmFyIGNyZWF0aW9uVGltZXN0YW1wID0gZ2V0Q3JlYXRpb25UaW1lc3RhbXAocG9kKTtcbiAgICAgIGlmIChjcmVhdGlvblRpbWVzdGFtcCkge1xuICAgICAgICB2YXIgZCA9IG5ldyBEYXRlKGNyZWF0aW9uVGltZXN0YW1wKTtcbiAgICAgICAgaWYgKCFsb3dlc3REYXRlIHx8IGQgPCBsb3dlc3REYXRlKSB7XG4gICAgICAgICAgbG93ZXN0RGF0ZSA9IGQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBhcHBWaWV3LiRjcmVhdGlvbkRhdGUgPSBsb3dlc3REYXRlO1xuICAgIHJldHVybiBhcnJheTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBcHBWaWV3U2VydmljZVZpZXdzKGFwcFZpZXcpIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICB2YXIgcG9kcyA9IGFwcFZpZXcucG9kcztcbiAgICBhbmd1bGFyLmZvckVhY2gocG9kcywgcG9kID0+IHtcbiAgICAgIHZhciBpZCA9IGdldE5hbWUocG9kKTtcbiAgICAgIGlmIChpZCkge1xuICAgICAgICB2YXIgYWJicmV2ID0gaWQ7XG4gICAgICAgIHZhciBpZHggPSBpZC5pbmRleE9mKFwiLVwiKTtcbiAgICAgICAgaWYgKGlkeCA+IDEpIHtcbiAgICAgICAgICBhYmJyZXYgPSBpZC5zdWJzdHJpbmcoMCwgaWR4KTtcbiAgICAgICAgfVxuICAgICAgICBwb2QuaWRBYmJyZXYgPSBhYmJyZXY7XG4gICAgICB9XG4gICAgICBwb2Quc3RhdHVzQ2xhc3MgPSBzdGF0dXNUZXh0VG9Dc3NDbGFzcyhwb2RTdGF0dXMocG9kKSwgaXNSZWFkeShwb2QpKTtcbiAgICB9KTtcblxuICAgIHZhciBzZXJ2aWNlcyA9IGFwcFZpZXcuc2VydmljZXMgfHwgW107XG4gICAgdmFyIHJlcGxpY2F0aW9uQ29udHJvbGxlcnMgPSBhcHBWaWV3LnJlcGxpY2F0aW9uQ29udHJvbGxlcnMgfHwgW107XG4gICAgdmFyIHNpemUgPSBNYXRoLm1heChzZXJ2aWNlcy5sZW5ndGgsIHJlcGxpY2F0aW9uQ29udHJvbGxlcnMubGVuZ3RoLCAxKTtcbiAgICB2YXIgYXBwTmFtZSA9IGFwcFZpZXcuJGluZm8ubmFtZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgdmFyIHNlcnZpY2UgPSBzZXJ2aWNlc1tpXTtcbiAgICAgIHZhciByZXBsaWNhdGlvbkNvbnRyb2xsZXIgPSByZXBsaWNhdGlvbkNvbnRyb2xsZXJzW2ldO1xuICAgICAgdmFyIGNvbnRyb2xsZXJJZCA9IGdldE5hbWUocmVwbGljYXRpb25Db250cm9sbGVyKTtcbiAgICAgIHZhciBuYW1lID0gZ2V0TmFtZShzZXJ2aWNlKSB8fCBjb250cm9sbGVySWQ7XG4gICAgICB2YXIgYWRkcmVzcyA9IENvcmUucGF0aEdldChzZXJ2aWNlLCBbXCJzcGVjXCIsIFwicG9ydGFsSVBcIl0pO1xuICAgICAgaWYgKCFuYW1lICYmIHBvZHMubGVuZ3RoKSB7XG4gICAgICAgIG5hbWUgPSBwb2RzWzBdLmlkQWJicmV2O1xuICAgICAgfVxuICAgICAgaWYgKCFhcHBWaWV3LiRpbmZvLm5hbWUpIHtcbiAgICAgICAgYXBwVmlldy4kaW5mby5uYW1lID0gbmFtZTtcbiAgICAgIH1cbiAgICAgIGlmICghYXBwVmlldy5pZCAmJiBwb2RzLmxlbmd0aCkge1xuICAgICAgICBhcHBWaWV3LmlkID0gZ2V0TmFtZShwb2RzWzBdKTtcbiAgICAgIH1cbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICBhcHBOYW1lID0gbmFtZTtcbiAgICAgIH1cbiAgICAgIHZhciBwb2RDb3VudCA9IHBvZHMubGVuZ3RoO1xuICAgICAgdmFyIHBvZENvdW50VGV4dCA9IHBvZENvdW50ICsgXCIgcG9kXCIgKyAocG9kQ291bnQgPiAxID8gXCJzXCIgOiBcIlwiKTtcbiAgICAgIHZhciB2aWV3ID0ge1xuICAgICAgICBhcHBOYW1lOiBhcHBOYW1lIHx8IG5hbWUsXG4gICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgIGNyZWF0ZWREYXRlOiBhcHBWaWV3LiRjcmVhdGlvbkRhdGUsXG4gICAgICAgIHBvZENvdW50OiBwb2RDb3VudCxcbiAgICAgICAgcG9kQ291bnRUZXh0OiBwb2RDb3VudFRleHQsXG4gICAgICAgIGFkZHJlc3M6IGFkZHJlc3MsXG4gICAgICAgIGNvbnRyb2xsZXJJZDogY29udHJvbGxlcklkLFxuICAgICAgICBzZXJ2aWNlOiBzZXJ2aWNlLFxuICAgICAgICByZXBsaWNhdGlvbkNvbnRyb2xsZXI6IHJlcGxpY2F0aW9uQ29udHJvbGxlcixcbiAgICAgICAgcG9kczogcG9kc1xuICAgICAgfTtcbiAgICAgIGFycmF5LnB1c2godmlldyk7XG4gICAgfVxuICAgIHJldHVybiBhcnJheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjb252ZXJ0cyBhIGdpdCBwYXRoIGludG8gYW4gYWNjZXNzaWJsZSBVUkwgZm9yIHRoZSBicm93c2VyXG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24gZ2l0UGF0aFRvVXJsKGljb25QYXRoLCBicmFuY2ggPSBcIm1hc3RlclwiKSB7XG4gICAgcmV0dXJuIChIYXd0aW9Db3JlLmluamVjdG9yLmdldDxzdHJpbmc+KCdBcHBMaWJyYXJ5VVJMJykgfHwgJycpICsgXCIvZ2l0L1wiICsgYnJhbmNoICsgaWNvblBhdGg7XG4gIH1cblxuICBmdW5jdGlvbiBhc0RhdGUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPyBuZXcgRGF0ZSh2YWx1ZSkgOiBudWxsO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGVucmljaEJ1aWxkQ29uZmlnKGJ1aWxkQ29uZmlnLCBzb3J0ZWRCdWlsZHMpIHtcbiAgICBpZiAoYnVpbGRDb25maWcpIHtcbiAgICAgIHZhciB0cmlnZ2VyVXJsOnN0cmluZyA9IG51bGw7XG4gICAgICB2YXIgbWV0YWRhdGEgPSBidWlsZENvbmZpZy5tZXRhZGF0YSB8fCB7fTtcbiAgICAgIHZhciBuYW1lID0gbWV0YWRhdGEubmFtZTtcbiAgICAgIGJ1aWxkQ29uZmlnLiRuYW1lID0gbmFtZTtcbiAgICAgIHZhciBwcm9qZWN0TGluayA9IERldmVsb3Blci5wcm9qZWN0TGluayhuYW1lKTtcbiAgICAgIHZhciBucyA9IG1ldGFkYXRhLm5hbWVzcGFjZSB8fCBjdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xuICAgICAgYnVpbGRDb25maWcuJG5hbWVzcGFjZSA9IG5zO1xuICAgICAgYnVpbGRDb25maWcuZW52aXJvbm1lbnRzID0gW107XG4gICAgICBidWlsZENvbmZpZy4kY3JlYXRpb25EYXRlID0gYXNEYXRlKEt1YmVybmV0ZXMuZ2V0Q3JlYXRpb25UaW1lc3RhbXAoYnVpbGRDb25maWcpKTtcbiAgICAgIGJ1aWxkQ29uZmlnLiRsYWJlbHNUZXh0ID0gS3ViZXJuZXRlcy5sYWJlbHNUb1N0cmluZyhnZXRMYWJlbHMoYnVpbGRDb25maWcpKTtcblxuICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgYnVpbGRDb25maWcuJHZpZXdMaW5rID0gVXJsSGVscGVycy5qb2luKFwid29ya3NwYWNlc1wiLCBucywgXCJwcm9qZWN0c1wiLCBuYW1lLCBcImVudmlyb25tZW50c1wiKTtcbiAgICAgICAgYnVpbGRDb25maWcuJGVkaXRMaW5rID0gVXJsSGVscGVycy5qb2luKFwid29ya3NwYWNlc1wiLCBucywgXCJwcm9qZWN0c1wiLCBuYW1lLCBcImJ1aWxkQ29uZmlnRWRpdFwiKTtcblxuICAgICAgICBhbmd1bGFyLmZvckVhY2goW2ZhbHNlLCB0cnVlXSwgKGZsYWcpID0+IHtcbiAgICAgICAgICBhbmd1bGFyLmZvckVhY2goYnVpbGRDb25maWcudHJpZ2dlcnMsICh0cmlnZ2VyKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRyaWdnZXJVcmwpIHtcbiAgICAgICAgICAgICAgdmFyIHR5cGUgPSB0cmlnZ2VyLnR5cGU7XG4gICAgICAgICAgICAgIGlmICh0eXBlID09PSBcImdlbmVyaWNcIiB8fCBmbGFnKSB7XG4gICAgICAgICAgICAgICAgdmFyIGdlbmVyaWMgPSB0cmlnZ2VyW3R5cGVdO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlICYmIGdlbmVyaWMpIHtcbiAgICAgICAgICAgICAgICAgIHZhciBzZWNyZXQgPSBnZW5lcmljLnNlY3JldDtcbiAgICAgICAgICAgICAgICAgIGlmIChzZWNyZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlclVybCA9IFVybEhlbHBlcnMuam9pbihidWlsZENvbmZpZ0hvb2tzUmVzdFVSTCgpLCBuYW1lLCBzZWNyZXQsIHR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBidWlsZENvbmZpZy4kdHJpZ2dlclVybCA9IHRyaWdnZXJVcmw7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGxldHMgZmluZCB0aGUgbGF0ZXN0IGJ1aWxkLi4uXG4gICAgICAgIGlmIChzb3J0ZWRCdWlsZHMpIHtcbiAgICAgICAgICBidWlsZENvbmZpZy4kbGFzdEJ1aWxkID0gXy5maW5kKHNvcnRlZEJ1aWxkcywge1xuICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgbGFiZWxzOiB7XG4gICAgICAgICAgICAgICAgYnVpbGRjb25maWc6IG5hbWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgJGZhYnJpYzhWaWV3cyA9IHt9O1xuXG4gICAgICBmdW5jdGlvbiBkZWZhdWx0UHJvcGVydGllc0lmTm90RXhpc3QobmFtZSwgb2JqZWN0LCBhdXRvQ3JlYXRlID0gZmFsc2UpIHtcbiAgICAgICAgdmFyIHZpZXcgPSAkZmFicmljOFZpZXdzW25hbWVdO1xuICAgICAgICBpZiAoYXV0b0NyZWF0ZSAmJiAhdmlldykge1xuICAgICAgICAgIHZpZXcgPSB7fVxuICAgICAgICAgICRmYWJyaWM4Vmlld3NbbmFtZV0gPSB2aWV3O1xuICAgICAgICB9XG4gICAgICAgIGlmICh2aWV3KSB7XG4gICAgICAgICAgYW5ndWxhci5mb3JFYWNoKG9iamVjdCwgKHZhbHVlLCBwcm9wZXJ0eSkgPT4ge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSB2aWV3W3Byb3BlcnR5XTtcbiAgICAgICAgICAgIGlmICghY3VycmVudCkge1xuICAgICAgICAgICAgICB2aWV3W3Byb3BlcnR5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGRlZmF1bHRQcm9wZXJ0aWVzSWZOb3RFeGlzdFN0YXJ0c1dpdGgocHJlZml4LCBvYmplY3QsIGF1dG9DcmVhdGUgPSBmYWxzZSkge1xuICAgICAgICBhbmd1bGFyLmZvckVhY2goJGZhYnJpYzhWaWV3cywgKHZpZXcsIG5hbWUpID0+IHtcbiAgICAgICAgICBpZiAodmlldyAmJiBuYW1lLnN0YXJ0c1dpdGgocHJlZml4KSkge1xuICAgICAgICAgICAgYW5ndWxhci5mb3JFYWNoKG9iamVjdCwgKHZhbHVlLCBwcm9wZXJ0eSkgPT4ge1xuICAgICAgICAgICAgICB2YXIgY3VycmVudCA9IHZpZXdbcHJvcGVydHldO1xuICAgICAgICAgICAgICBpZiAoIWN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICB2aWV3W3Byb3BlcnR5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB2YXIgbGFiZWxzID0gbWV0YWRhdGEubGFiZWxzIHx8IHt9O1xuICAgICAgdmFyIGFubm90YXRpb25zID0gbWV0YWRhdGEuYW5ub3RhdGlvbnMgfHwge307XG5cbiAgICAgIC8vIGxldHMgZGVmYXVsdCB0aGUgcmVwbyBhbmQgdXNlclxuICAgICAgYnVpbGRDb25maWcuJHVzZXIgPSBhbm5vdGF0aW9uc1tcImZhYnJpYzguamVua2lucy91c2VyXCJdIHx8IGxhYmVsc1tcInVzZXJcIl07XG4gICAgICBidWlsZENvbmZpZy4kcmVwbyA9IGFubm90YXRpb25zW1wiZmFicmljOC5qZW5raW5zL3JlcG9cIl0gfHwgbGFiZWxzW1wicmVwb1wiXTtcblxuICAgICAgYW5ndWxhci5mb3JFYWNoKGFubm90YXRpb25zLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICB2YXIgcGFydHMgPSBrZXkuc3BsaXQoJy8nLCAyKTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICB2YXIgbGlua0lkID0gcGFydHNbMF07XG4gICAgICAgICAgdmFyIHByb3BlcnR5ID0gcGFydHNbMV07XG4gICAgICAgICAgaWYgKGxpbmtJZCAmJiBwcm9wZXJ0eSAmJiBsaW5rSWQuc3RhcnRzV2l0aChcImZhYnJpYzgubGlua1wiKSkge1xuICAgICAgICAgICAgdmFyIGxpbmsgPSAkZmFicmljOFZpZXdzW2xpbmtJZF07XG4gICAgICAgICAgICBpZiAoIWxpbmspIHtcbiAgICAgICAgICAgICAgbGluayA9IHtcbiAgICAgICAgICAgICAgICBjbGFzczogbGlua0lkXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICRmYWJyaWM4Vmlld3NbbGlua0lkXSA9IGxpbms7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsaW5rW3Byb3BlcnR5XSA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChidWlsZENvbmZpZy4kdXNlciAmJiBidWlsZENvbmZpZy4kcmVwbykge1xuICAgICAgICAvLyBicm93c2UgZ29ncyByZXBvIHZpZXdcbiAgICAgICAgdmFyIGdvZ3NVcmwgPSBzZXJ2aWNlTGlua1VybChnb2dzU2VydmljZU5hbWUpO1xuICAgICAgICBpZiAoZ29nc1VybCkge1xuICAgICAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzSWZOb3RFeGlzdChcImZhYnJpYzgubGluay5icm93c2VHb2dzLnZpZXdcIiwge1xuICAgICAgICAgICAgbGFiZWw6IFwiQnJvd3NlLi4uXCIsXG4gICAgICAgICAgICB1cmw6IFVybEhlbHBlcnMuam9pbihnb2dzVXJsLCBidWlsZENvbmZpZy4kdXNlciwgYnVpbGRDb25maWcuJHJlcG8pLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiQnJvd3NlIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIHJlcG9zaXRvcnlcIixcbiAgICAgICAgICAgIGljb25DbGFzczogXCJmYSBmYS1leHRlcm5hbC1saW5rXCJcbiAgICAgICAgICB9LCB0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJ1biBmb3JnZSBjb21tYW5kcyB2aWV3XG4gICAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzSWZOb3RFeGlzdChcImZhYnJpYzgubGluay5mb3JnZUNvbW1hbmQudmlld1wiLCB7XG4gICAgICAgICAgbGFiZWw6IFwiQ29tbWFuZC4uLlwiLFxuICAgICAgICAgIHVybDogVXJsSGVscGVycy5qb2luKHByb2plY3RMaW5rLCBcIi9mb3JnZS9jb21tYW5kcy91c2VyXCIsIGJ1aWxkQ29uZmlnLiR1c2VyLCBidWlsZENvbmZpZy4kcmVwbyksXG4gICAgICAgICAgZGVzY3JpcHRpb246IFwiUGVyZm9ybSBhbiBhY3Rpb24gb24gdGhpcyBwcm9qZWN0XCIsXG4gICAgICAgICAgaWNvbkNsYXNzOiBcImZhIGZhLXBsYXktY2lyY2xlXCJcbiAgICAgICAgfSwgdHJ1ZSk7XG5cblxuICAgICAgICAvLyBjb25maWd1cmUgZGV2b3BzIHZpZXdcbiAgICAgICAgZGVmYXVsdFByb3BlcnRpZXNJZk5vdEV4aXN0KFwiZmFicmljOC5saW5rLmZvcmdlQ29tbWFuZC5kZXZvcHMuc2V0dGluZ3NcIiwge1xuICAgICAgICAgIGxhYmVsOiBcIlNldHRpbmdzXCIsXG4gICAgICAgICAgdXJsOiBVcmxIZWxwZXJzLmpvaW4ocHJvamVjdExpbmssIFwiL2ZvcmdlL2NvbW1hbmQvZGV2b3BzLWVkaXQvdXNlclwiLCBidWlsZENvbmZpZy4kdXNlciwgYnVpbGRDb25maWcuJHJlcG8pLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkNvbmZpZ3VyZSB0aGUgRGV2T3BzIHNldHRpbmdzIGZvciB0aGlzIHByb2plY3RcIixcbiAgICAgICAgICBpY29uQ2xhc3M6IFwiZmEgZmEtcGVuY2lsLXNxdWFyZS1vXCJcbiAgICAgICAgfSwgdHJ1ZSk7XG5cbiAgICAgIH1cblxuICAgICAgLy8gYWRkIHNvbWUgaWNvbnMgYW5kIGRlc2NyaXB0aW9uc1xuICAgICAgZGVmYXVsdFByb3BlcnRpZXNJZk5vdEV4aXN0KFwiZmFicmljOC5saW5rLnJlcG9zaXRvcnkuYnJvd3NlXCIsIHtcbiAgICAgICAgbGFiZWw6IFwiQnJvd3NlLi4uXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIkJyb3dzZSB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyByZXBvc2l0b3J5XCIsXG4gICAgICAgIGljb25DbGFzczogXCJmYSBmYS1leHRlcm5hbC1saW5rXCJcbiAgICAgIH0pO1xuICAgICAgZGVmYXVsdFByb3BlcnRpZXNJZk5vdEV4aXN0KFwiZmFicmljOC5saW5rLmplbmtpbnMuam9iXCIsIHtcbiAgICAgICAgaWNvbkNsYXNzOiBcImZhIGZhLXRhc2tzXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlZpZXcgdGhlIEplbmtpbnMgSm9iIGZvciB0aGlzIGJ1aWxkXCJcbiAgICAgIH0pO1xuICAgICAgZGVmYXVsdFByb3BlcnRpZXNJZk5vdEV4aXN0KFwiZmFicmljOC5saW5rLmplbmtpbnMubW9uaXRvclwiLCB7XG4gICAgICAgIGljb25DbGFzczogXCJmYSBmYS10YWNob21ldGVyXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlZpZXcgdGhlIEplbmtpbnMgTW9uaXRvciBkYXNoYm9hcmQgZm9yIHRoaXMgcHJvamVjdFwiXG4gICAgICB9KTtcbiAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzSWZOb3RFeGlzdChcImZhYnJpYzgubGluay5qZW5raW5zLnBpcGVsaW5lXCIsIHtcbiAgICAgICAgaWNvbkNsYXNzOiBcImZhIGZhLWFycm93LWNpcmNsZS1vLXJpZ2h0XCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlZpZXcgdGhlIEplbmtpbnMgUGlwZWxpbmUgZm9yIHRoaXMgcHJvamVjdFwiXG4gICAgICB9KTtcbiAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzSWZOb3RFeGlzdChcImZhYnJpYzgubGluay5sZXRzY2hhdC5yb29tXCIsIHtcbiAgICAgICAgaWNvbkNsYXNzOiBcImZhIGZhLWNvbW1lbnRcIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiQ2hhdCByb29tIGZvciB0aGlzIHByb2plY3RcIlxuICAgICAgfSk7XG4gICAgICBkZWZhdWx0UHJvcGVydGllc0lmTm90RXhpc3QoXCJmYWJyaWM4LmxpbmsubGV0c2NoYXQucm9vbVwiLCB7XG4gICAgICAgIGljb25DbGFzczogXCJmYSBmYS1jb21tZW50XCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIkNoYXQgcm9vbSBmb3IgdGhpcyBwcm9qZWN0XCJcbiAgICAgIH0pO1xuICAgICAgZGVmYXVsdFByb3BlcnRpZXNJZk5vdEV4aXN0KFwiZmFicmljOC5saW5rLnRhaWdhXCIsIHtcbiAgICAgICAgaWNvbkNsYXNzOiBcImZhIGZhLWNoZWNrLXNxdWFyZS1vXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIklzc3VlIHRyYWNrZXIgZm9yIHRoaXMgcHJvamVjdFwiXG4gICAgICB9KTtcbiAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzSWZOb3RFeGlzdChcImZhYnJpYzgubGluay5pc3N1ZXNcIiwge1xuICAgICAgICBpY29uQ2xhc3M6IFwiZmEgZmEtY2hlY2stc3F1YXJlLW9cIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiSXNzdWVzIGZvciB0aGlzIHByb2plY3RcIlxuICAgICAgfSk7XG4gICAgICBkZWZhdWx0UHJvcGVydGllc0lmTm90RXhpc3QoXCJmYWJyaWM4LmxpbmsucmVsZWFzZXNcIiwge1xuICAgICAgICBpY29uQ2xhc3M6IFwiZmEgZmEtdGFnXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIklzc3VlcyBmb3IgdGhpcyBwcm9qZWN0XCJcbiAgICAgIH0pO1xuICAgICAgZGVmYXVsdFByb3BlcnRpZXNJZk5vdEV4aXN0KFwiZmFicmljOC5saW5rLnRhaWdhLnRlYW1cIiwge1xuICAgICAgICBpY29uQ2xhc3M6IFwiZmEgZmEtdXNlcnNcIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiVGVhbSBtZW1iZXJzIGZvciB0aGlzIHByb2plY3RcIlxuICAgICAgfSk7XG4gICAgICBkZWZhdWx0UHJvcGVydGllc0lmTm90RXhpc3QoXCJmYWJyaWM4LmxpbmsudGVhbVwiLCB7XG4gICAgICAgIGljb25DbGFzczogXCJmYSBmYS11c2Vyc1wiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJUZWFtIG1lbWJlcnMgZm9yIHRoaXMgcHJvamVjdFwiXG4gICAgICB9KTtcbiAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzSWZOb3RFeGlzdFN0YXJ0c1dpdGgoXCJmYWJyaWM4LmxpbmsuZW52aXJvbm1lbnQuXCIsIHtcbiAgICAgICAgaWNvbkNsYXNzOiBcImZhIGZhLWNsb3VkXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBrdWJlcm5ldGVzIG5hbWVzcGFjZSBmb3IgdGhpcyBlbnZpcm9ubWVudFwiXG4gICAgICB9KTtcblxuXG4gICAgICAvLyBsZXRzIHB1dCB0aGUgdmlld3MgaW50byBzZWN0aW9ucy4uLlxuICAgICAgdmFyICRmYWJyaWM4Q29kZVZpZXdzID0ge307XG4gICAgICB2YXIgJGZhYnJpYzhCdWlsZFZpZXdzID0ge307XG4gICAgICB2YXIgJGZhYnJpYzhUZWFtVmlld3MgPSB7fTtcbiAgICAgIHZhciAkZmFicmljOEVudmlyb25tZW50Vmlld3MgPSB7fTtcbiAgICAgIGFuZ3VsYXIuZm9yRWFjaCgkZmFicmljOFZpZXdzLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICB2YXIgdmlldztcbiAgICAgICAgaWYgKGtleS5pbmRleE9mKFwidGFpZ2FcIikgPiAwIHx8IGtleS5pbmRleE9mKFwiLmlzc3VlXCIpID4gMCB8fCBrZXkuaW5kZXhPZihcImxldHNjaGF0XCIpID4gMHx8IGtleS5pbmRleE9mKFwiLnRlYW1cIikgPiAwKSB7XG4gICAgICAgICAgdmlldyA9ICRmYWJyaWM4VGVhbVZpZXdzO1xuICAgICAgICB9IGVsc2UgaWYgKGtleS5pbmRleE9mKFwiamVua2luc1wiKSA+IDApIHtcbiAgICAgICAgICB2aWV3ID0gJGZhYnJpYzhCdWlsZFZpZXdzO1xuICAgICAgICB9IGVsc2UgaWYgKGtleS5pbmRleE9mKFwiLmVudmlyb25tZW50LlwiKSA+IDApIHtcbiAgICAgICAgICB2aWV3ID0gJGZhYnJpYzhFbnZpcm9ubWVudFZpZXdzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZpZXcgPSAkZmFicmljOENvZGVWaWV3cztcbiAgICAgICAgfVxuICAgICAgICB2aWV3W2tleV0gPSB2YWx1ZTtcbiAgICAgIH0pO1xuXG5cbiAgICAgIGJ1aWxkQ29uZmlnLiRmYWJyaWM4Vmlld3MgPSAkZmFicmljOFZpZXdzO1xuICAgICAgYnVpbGRDb25maWcuJGZhYnJpYzhDb2RlVmlld3MgPSAkZmFicmljOENvZGVWaWV3cztcbiAgICAgIGJ1aWxkQ29uZmlnLiRmYWJyaWM4QnVpbGRWaWV3cyA9ICRmYWJyaWM4QnVpbGRWaWV3cztcbiAgICAgIGJ1aWxkQ29uZmlnLiRmYWJyaWM4RW52aXJvbm1lbnRWaWV3cyA9ICRmYWJyaWM4RW52aXJvbm1lbnRWaWV3cztcbiAgICAgIGJ1aWxkQ29uZmlnLiRmYWJyaWM4VGVhbVZpZXdzID0gJGZhYnJpYzhUZWFtVmlld3M7XG5cbiAgICAgIHZhciAkamVua2luc0pvYiA9IGFubm90YXRpb25zW1wiZmFicmljOC5pby9qZW5raW5zLWpvYlwiXTtcbiAgICAgIGlmICghJGplbmtpbnNKb2IgJiYgJGZhYnJpYzhWaWV3c1tcImZhYnJpYzgubGluay5qZW5raW5zLmpvYlwiXSkge1xuICAgICAgICAkamVua2luc0pvYiA9IG5hbWU7XG4gICAgICB9XG4gICAgICBidWlsZENvbmZpZy4kamVua2luc0pvYiA9ICRqZW5raW5zSm9iO1xuXG4gICAgICBhbmd1bGFyLmZvckVhY2goJGZhYnJpYzhFbnZpcm9ubWVudFZpZXdzLCAoZW52KSA9PiB7XG4gICAgICAgIHZhciBjID0gZW52LmNsYXNzO1xuICAgICAgICB2YXIgcHJlZml4ID0gXCJmYWJyaWM4LmxpbmsuZW52aXJvbm1lbnQuXCI7XG4gICAgICAgIGlmIChjICYmIGMuc3RhcnRzV2l0aChwcmVmaXgpKSB7XG4gICAgICAgICAgdmFyIGVucyA9IGMuc3Vic3RyaW5nKHByZWZpeC5sZW5ndGgpO1xuICAgICAgICAgIGVudi5uYW1lc3BhY2UgPSBlbnM7XG4gICAgICAgICAgZW52LnVybCA9IFVybEhlbHBlcnMuam9pbihcIi93b3Jrc3BhY2VzXCIsIG5zLCBcInByb2plY3RzXCIsIG5hbWUsIFwibmFtZXNwYWNlXCIsIGVucyk7XG4gICAgICAgIH1cbiAgICAgICAgYnVpbGRDb25maWcuZW52aXJvbm1lbnRzLnB1c2goZW52KTtcbiAgICAgIH0pO1xuICAgICAgaWYgKCFidWlsZENvbmZpZy5lbnZpcm9ubWVudHMubGVuZ3RoKSB7XG4gICAgICAgIC8vIGxldHMgY3JlYXRlIGEgc2luZ2xlIGVudmlyb25tZW50XG4gICAgICAgIHZhciBlbnMgPSBucztcbiAgICAgICAgdmFyIGVudiA9IHtcbiAgICAgICAgICBuYW1lc3BhY2U6IGVucyxcbiAgICAgICAgICBsYWJlbDogXCJDdXJyZW50XCIsXG4gICAgICAgICAgZGVzY3JpcHRpb246IFwiVGhlIGVudmlyb25lbW50IHRoYXQgdGhpcyBwcm9qZWN0IGlzIGJ1aWx0IGFuZCBydW4gaW5zaWRlXCIsXG4gICAgICAgICAgaWNvbkNsYXNzOiBcImZhIGZhLWNsb3VkXCIsXG4gICAgICAgICAgdXJsOiBVcmxIZWxwZXJzLmpvaW4oXCIvd29ya3NwYWNlc1wiLCBucywgXCJwcm9qZWN0c1wiLCBuYW1lLCBcIm5hbWVzcGFjZVwiLCBlbnMpXG4gICAgICAgIH07XG4gICAgICAgIGJ1aWxkQ29uZmlnLmVudmlyb25tZW50cy5wdXNoKGVudik7XG5cbiAgICAgIH1cblxuICAgICAgYnVpbGRDb25maWcuZW52aXJvbm1lbnRzID0gYnVpbGRDb25maWcuZW52aXJvbm1lbnRzLnJldmVyc2UoKTtcblxuICAgICAgYnVpbGRDb25maWcudG9vbHMgPSBbXTtcbiAgICAgIGFuZ3VsYXIuZm9yRWFjaCgkZmFicmljOENvZGVWaWV3cywgKGVudikgPT4ge1xuICAgICAgICBidWlsZENvbmZpZy50b29scy5wdXNoKGVudik7XG4gICAgICB9KTtcbiAgICAgIGFuZ3VsYXIuZm9yRWFjaCgkZmFicmljOFRlYW1WaWV3cywgKGVudikgPT4ge1xuICAgICAgICBidWlsZENvbmZpZy50b29scy5wdXNoKGVudik7XG4gICAgICB9KTtcblxuICAgIH1cbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBlbnJpY2hCdWlsZENvbmZpZ3MoYnVpbGRDb25maWdzLCBzb3J0ZWRCdWlsZHMgPSBudWxsKSB7XG4gICAgYW5ndWxhci5mb3JFYWNoKGJ1aWxkQ29uZmlncywgKGJ1aWxkQ29uZmlnKSA9PiB7XG4gICAgICBlbnJpY2hCdWlsZENvbmZpZyhidWlsZENvbmZpZywgc29ydGVkQnVpbGRzKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYnVpbGRDb25maWdzO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGVucmljaEJ1aWxkcyhidWlsZHMpIHtcbiAgICBhbmd1bGFyLmZvckVhY2goYnVpbGRzLCAoYnVpbGQpID0+IHtcbiAgICAgIGVucmljaEJ1aWxkKGJ1aWxkKTtcbiAgICB9KTtcbiAgICByZXR1cm4gXy5zb3J0QnkoYnVpbGRzLCBcIiRjcmVhdGlvbkRhdGVcIikucmV2ZXJzZSgpO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGVucmljaEJ1aWxkKGJ1aWxkKSB7XG4gICAgaWYgKGJ1aWxkKSB7XG4gICAgICB2YXIgbWV0YWRhdGEgPSBidWlsZC5tZXRhZGF0YSB8fCB7fTtcbiAgICAgIHZhciBhbm5vdGF0aW9ucyA9IG1ldGFkYXRhLmFubm90YXRpb25zIHx8IHt9O1xuICAgICAgdmFyIG5hbWUgPSBnZXROYW1lKGJ1aWxkKTtcbiAgICAgIHZhciBuYW1lc3BhY2UgPSBnZXROYW1lc3BhY2UoYnVpbGQpO1xuICAgICAgYnVpbGQuJG5hbWUgPSBuYW1lO1xuICAgICAgYnVpbGQuJG5hbWVzcGFjZSA9IG5hbWVzcGFjZTtcblxuICAgICAgdmFyIG5hbWVBcnJheSA9IG5hbWUuc3BsaXQoXCItXCIpO1xuICAgICAgdmFyIG5hbWVBcnJheUxlbmd0aCA9IG5hbWVBcnJheS5sZW5ndGg7XG4gICAgICBidWlsZC4kc2hvcnROYW1lID0gKG5hbWVBcnJheUxlbmd0aCA+IDQpID8gbmFtZUFycmF5LnNsaWNlKDAsIG5hbWVBcnJheUxlbmd0aCAtIDQpLmpvaW4oXCItXCIpIDogbmFtZS5zdWJzdHJpbmcoMCwgMzApO1xuXG4gICAgICB2YXIgbGFiZWxzID0gZ2V0TGFiZWxzKGJ1aWxkKTtcbiAgICAgIHZhciBjb25maWdJZCA9IGxhYmVscy5idWlsZGNvbmZpZztcbiAgICAgIGJ1aWxkLiRjb25maWdJZCA9IGNvbmZpZ0lkO1xuICAgICAgaWYgKGNvbmZpZ0lkKSB7XG4gICAgICAgIC8vYnVpbGQuJGNvbmZpZ0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4oXCJrdWJlcm5ldGVzL2J1aWxkQ29uZmlnc1wiLCBjb25maWdJZCk7XG4gICAgICAgIGJ1aWxkLiRjb25maWdMaW5rID0gVXJsSGVscGVycy5qb2luKFwid29ya3NwYWNlc1wiLCBjdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpLCBcInByb2plY3RzXCIsIGNvbmZpZ0lkKTtcbiAgICAgIH1cbiAgICAgIHZhciBjcmVhdGlvblRpbWVzdGFtcCA9IGdldENyZWF0aW9uVGltZXN0YW1wKGJ1aWxkKTtcbiAgICAgIGlmIChjcmVhdGlvblRpbWVzdGFtcCkge1xuICAgICAgICB2YXIgZCA9IG5ldyBEYXRlKGNyZWF0aW9uVGltZXN0YW1wKTtcbiAgICAgICAgYnVpbGQuJGNyZWF0aW9uRGF0ZSA9IGQ7XG4gICAgICB9XG4gICAgICBpZiAobmFtZSkge1xuICAgICAgICAvL2J1aWxkLiR2aWV3TGluayA9IFVybEhlbHBlcnMuam9pbihcImt1YmVybmV0ZXMvYnVpbGRzXCIsIG5hbWUpO1xuICAgICAgICB2YXIgcHJvamVjdExpbmsgPSBVcmxIZWxwZXJzLmpvaW4oXCJ3b3Jrc3BhY2VzXCIsIGN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCksIFwicHJvamVjdHNcIiwgY29uZmlnSWQpO1xuICAgICAgICBidWlsZC4kdmlld0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4ocHJvamVjdExpbmssIFwiYnVpbGRzXCIsIG5hbWUpO1xuICAgICAgICAvL2J1aWxkLiRsb2dzTGluayA9IFVybEhlbHBlcnMuam9pbihcImt1YmVybmV0ZXMvYnVpbGRMb2dzXCIsIG5hbWUpO1xuICAgICAgICBidWlsZC4kbG9nc0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4ocHJvamVjdExpbmssIFwiYnVpbGRMb2dzXCIsIG5hbWUpO1xuICAgICAgfVxuICAgICAgYnVpbGQucG9kTmFtZSA9IGJ1aWxkLnBvZE5hbWUgfHwgYW5ub3RhdGlvbnNbXCJvcGVuc2hpZnQuaW8vYnVpbGQucG9kLW5hbWVcIl07XG4gICAgICB2YXIgcG9kTmFtZSA9IGJ1aWxkLnBvZE5hbWU7XG4gICAgICBpZiAocG9kTmFtZSAmJiBuYW1lc3BhY2UpIHtcbiAgICAgICAgdmFyIHBvZE5hbWVBcnJheSA9IHBvZE5hbWUuc3BsaXQoXCItXCIpO1xuICAgICAgICB2YXIgcG9kTmFtZUFycmF5TGVuZ3RoID0gcG9kTmFtZUFycmF5Lmxlbmd0aDtcbiAgICAgICAgYnVpbGQuJHBvZFNob3J0TmFtZSA9IChwb2ROYW1lQXJyYXlMZW5ndGggPiA1KSA/IHBvZE5hbWVBcnJheVtwb2ROYW1lQXJyYXlMZW5ndGggLSA1XSA6IHBvZE5hbWUuc3Vic3RyaW5nKDAsIDMwKTtcbiAgICAgICAgYnVpbGQuJHBvZExpbmsgPSBVcmxIZWxwZXJzLmpvaW4oXCJrdWJlcm5ldGVzL25hbWVzcGFjZVwiLCBuYW1lc3BhY2UsIFwicG9kc1wiLCBwb2ROYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGJ1aWxkO1xuICB9XG5cblxuICBleHBvcnQgZnVuY3Rpb24gZW5yaWNoRGVwbG95bWVudENvbmZpZyhkZXBsb3ltZW50Q29uZmlnKSB7XG4gICAgaWYgKGRlcGxveW1lbnRDb25maWcpIHtcbiAgICAgIHZhciB0cmlnZ2VyVXJsOnN0cmluZyA9IG51bGw7XG4gICAgICB2YXIgbmFtZSA9IENvcmUucGF0aEdldChkZXBsb3ltZW50Q29uZmlnLCBbXCJtZXRhZGF0YVwiLCBcIm5hbWVcIl0pO1xuICAgICAgZGVwbG95bWVudENvbmZpZy4kbmFtZSA9IG5hbWU7XG4gICAgICB2YXIgZm91bmQgPSBmYWxzZTtcbiAgICAgIGFuZ3VsYXIuZm9yRWFjaChkZXBsb3ltZW50Q29uZmlnLnRyaWdnZXJzLCAodHJpZ2dlcikgPT4ge1xuICAgICAgICB2YXIgdHlwZSA9IHRyaWdnZXIudHlwZTtcbiAgICAgICAgaWYgKCFkZXBsb3ltZW50Q29uZmlnLiRpbWFnZUNoYW5nZVBhcmFtcyAmJiB0eXBlID09PSBcIkltYWdlQ2hhbmdlXCIpIHtcbiAgICAgICAgICB2YXIgaW1hZ2VDaGFuZ2VQYXJhbXMgPSB0cmlnZ2VyLmltYWdlQ2hhbmdlUGFyYW1zO1xuICAgICAgICAgIGlmIChpbWFnZUNoYW5nZVBhcmFtcykge1xuICAgICAgICAgICAgdmFyIGNvbnRhaW5lck5hbWVzID0gaW1hZ2VDaGFuZ2VQYXJhbXMuY29udGFpbmVyTmFtZXMgfHwgW107XG4gICAgICAgICAgICBpbWFnZUNoYW5nZVBhcmFtcy4kY29udGFpbmVyTmFtZXMgPSBjb250YWluZXJOYW1lcy5qb2luKFwiIFwiKTtcbiAgICAgICAgICAgIGRlcGxveW1lbnRDb25maWcuJGltYWdlQ2hhbmdlUGFyYW1zID0gaW1hZ2VDaGFuZ2VQYXJhbXM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZW5yaWNoRGVwbG95bWVudENvbmZpZ3MoZGVwbG95bWVudENvbmZpZ3MpIHtcbiAgICBhbmd1bGFyLmZvckVhY2goZGVwbG95bWVudENvbmZpZ3MsIChkZXBsb3ltZW50Q29uZmlnKSA9PiB7XG4gICAgICBlbnJpY2hEZXBsb3ltZW50Q29uZmlnKGRlcGxveW1lbnRDb25maWcpO1xuICAgIH0pO1xuICAgIHJldHVybiBkZXBsb3ltZW50Q29uZmlncztcbiAgfVxuXG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGVucmljaEV2ZW50KGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICB2YXIgbWV0YWRhdGEgPSBldmVudC5tZXRhZGF0YSB8fCB7fTtcblxuICAgICAgdmFyIGZpcnN0VGltZXN0YW1wID0gZXZlbnQuZmlyc3RUaW1lc3RhbXA7XG4gICAgICBpZiAoZmlyc3RUaW1lc3RhbXApIHtcbiAgICAgICAgdmFyIGQgPSBuZXcgRGF0ZShmaXJzdFRpbWVzdGFtcCk7XG4gICAgICAgIGV2ZW50LiRmaXJzdFRpbWVzdGFtcCA9IGQ7XG4gICAgICB9XG4gICAgICB2YXIgbGFzdFRpbWVzdGFtcCA9IGV2ZW50Lmxhc3RUaW1lc3RhbXA7XG4gICAgICBpZiAobGFzdFRpbWVzdGFtcCkge1xuICAgICAgICB2YXIgZCA9IG5ldyBEYXRlKGxhc3RUaW1lc3RhbXApO1xuICAgICAgICBldmVudC4kbGFzdFRpbWVzdGFtcCA9IGQ7XG4gICAgICB9XG4gICAgICB2YXIgbGFiZWxzID0gYW5ndWxhci5jb3B5KGV2ZW50LnNvdXJjZSB8fCB7fSk7XG4gICAgICB2YXIgaW52b2x2ZWRPYmplY3QgPSBldmVudC5pbnZvbHZlZE9iamVjdCB8fCB7fTtcbiAgICAgIHZhciBuYW1lID0gaW52b2x2ZWRPYmplY3QubmFtZTtcbiAgICAgIHZhciBraW5kID0gaW52b2x2ZWRPYmplY3Qua2luZDtcbiAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgIGxhYmVsc1snbmFtZSddID0gbmFtZTtcbiAgICAgIH1cbiAgICAgIGlmIChraW5kKSB7XG4gICAgICAgIGxhYmVsc1sna2luZCddID0ga2luZDtcbiAgICAgIH1cbiAgICAgIGV2ZW50LiRsYWJlbHNUZXh0ID0gS3ViZXJuZXRlcy5sYWJlbHNUb1N0cmluZyhsYWJlbHMpO1xuXG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGVucmljaEV2ZW50cyhldmVudHMsIG1vZGVsID0gbnVsbCkge1xuICAgIGFuZ3VsYXIuZm9yRWFjaChldmVudHMsIChldmVudCkgPT4ge1xuICAgICAgZW5yaWNoRXZlbnQoZXZlbnQpO1xuICAgIH0pO1xuXG4gICAgLy8gbGV0cyB1cGRhdGUgbGlua3MgdG8gdGhlIGV2ZW50cyBmb3IgZWFjaCBwb2QgYW5kIFJDXG4gICAgaWYgKG1vZGVsKSB7XG4gICAgICBmdW5jdGlvbiBjbGVhckV2ZW50cyhlbnRpdHkpIHtcbiAgICAgICAgZW50aXR5LiRldmVudHMgPSBbXTtcbiAgICAgICAgZW50aXR5LiRldmVudHNMaW5rID0gbnVsbDtcbiAgICAgICAgZW50aXR5LiRldmVudENvdW50ID0gMDtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gdXBkYXRlRXZlbnQoZW50aXR5LCBldmVudCkge1xuICAgICAgICBpZiAoZW50aXR5KSB7XG4gICAgICAgICAgZW50aXR5LiRldmVudHMucHVzaChldmVudCk7XG4gICAgICAgICAgaWYgKCFlbnRpdHkuJGV2ZW50c0xpbmspIHtcbiAgICAgICAgICAgIGVudGl0eS4kZXZlbnRzTGluayA9IFVybEhlbHBlcnMuam9pbihcIi9rdWJlcm5ldGVzL25hbWVzcGFjZS9cIiwgY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKSwgXCJldmVudHNcIikgKyBcIj9xPWtpbmQlM0RcIiArIGVudGl0eS5raW5kICsgXCIlMjBuYW1lJTNEXCIgKyBlbnRpdHkubWV0YWRhdGEubmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZW50aXR5LiRldmVudENvdW50ID0gZW50aXR5LiRldmVudHMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBwb2RzID0gbW9kZWwucG9kcyB8fCBbXTtcbiAgICAgIHZhciByY3MgPSBtb2RlbC5yZXBsaWNhdGlvbkNvbnRyb2xsZXJzIHx8IFtdO1xuICAgICAgYW5ndWxhci5mb3JFYWNoKHBvZHMsIGNsZWFyRXZlbnRzKTtcbiAgICAgIGFuZ3VsYXIuZm9yRWFjaChyY3MsIGNsZWFyRXZlbnRzKTtcblxuICAgICAgYW5ndWxhci5mb3JFYWNoKGV2ZW50cywgKGV2ZW50KSA9PiB7XG4gICAgICAgIHZhciBpbnZvbHZlZE9iamVjdCA9IGV2ZW50Lmludm9sdmVkT2JqZWN0IHx8IHt9O1xuICAgICAgICB2YXIgbmFtZSA9IGludm9sdmVkT2JqZWN0Lm5hbWU7XG4gICAgICAgIHZhciBraW5kID0gaW52b2x2ZWRPYmplY3Qua2luZDtcbiAgICAgICAgdmFyIG5zID0gbW9kZWwuY3VycmVudE5hbWVzcGFjZSgpO1xuICAgICAgICBpZiAobmFtZSAmJiBraW5kICYmIG5zKSB7XG4gICAgICAgICAgdmFyIGVudGl0eSA9IG51bGw7XG4gICAgICAgICAgaWYgKGtpbmQgPT09IFwiUmVwbGljYXRpb25Db250cm9sbGVyXCIpIHtcbiAgICAgICAgICAgIGVudGl0eSA9IG1vZGVsLmdldFJlcGxpY2F0aW9uQ29udHJvbGxlcihucywgbmFtZSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChraW5kID09PSBcIlBvZFwiKSB7XG4gICAgICAgICAgICBlbnRpdHkgPSBtb2RlbC5nZXRQb2QobnMsIG5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZW50aXR5KSB7XG4gICAgICAgICAgICB1cGRhdGVFdmVudChlbnRpdHksIGV2ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZXZlbnRzO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGVucmljaEltYWdlUmVwb3NpdG9yeShpbWFnZVJlcG9zaXRvcnkpIHtcbiAgICBpZiAoaW1hZ2VSZXBvc2l0b3J5KSB7XG4gICAgICB2YXIgdHJpZ2dlclVybDpzdHJpbmcgPSBudWxsO1xuICAgICAgdmFyIG5hbWUgPSBDb3JlLnBhdGhHZXQoaW1hZ2VSZXBvc2l0b3J5LCBbXCJtZXRhZGF0YVwiLCBcIm5hbWVcIl0pO1xuICAgICAgaW1hZ2VSZXBvc2l0b3J5LiRuYW1lID0gbmFtZTtcbiAgICB9XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZW5yaWNoSW1hZ2VSZXBvc2l0b3JpZXMoaW1hZ2VSZXBvc2l0b3JpZXMpIHtcbiAgICBhbmd1bGFyLmZvckVhY2goaW1hZ2VSZXBvc2l0b3JpZXMsIChpbWFnZVJlcG9zaXRvcnkpID0+IHtcbiAgICAgIGVucmljaEltYWdlUmVwb3NpdG9yeShpbWFnZVJlcG9zaXRvcnkpO1xuICAgIH0pO1xuICAgIHJldHVybiBpbWFnZVJlcG9zaXRvcmllcztcbiAgfVxuXG5cbiAgdmFyIGxhYmVsQ29sb3JzID0ge1xuICAgICdiYXRjaCc6ICdrOHMtYmFkZ2UtYmF0Y2gnLFxuICAgICdyZWdpb24nOiAnazhzLWJhZGdlLXJlZ2lvbicsXG4gICAgJ3R5cGUnOiAnazhzLWJhZGdlLXR5cGUnLFxuICAgICdzeXN0ZW0nOiAnazhzLWJhZGdlLXN5c3RlbSdcbiAgfTtcblxuICBleHBvcnQgZnVuY3Rpb24gY29udGFpbmVyTGFiZWxDbGFzcyhsYWJlbFR5cGU6c3RyaW5nKSB7XG4gICAgaWYgKCEobGFiZWxUeXBlIGluIGxhYmVsQ29sb3JzKSkge1xuICAgICAgcmV0dXJuICdtb3VzZS1wb2ludGVyJztcbiAgICB9XG4gICAgZWxzZSByZXR1cm4gbGFiZWxDb2xvcnNbbGFiZWxUeXBlXSArICcgbW91c2UtcG9pbnRlcic7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGZhYnJpYzggZm9yZ2UgcGx1Z2luIGlzIGVuYWJsZWRcbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiBpc0ZvcmdlRW5hYmxlZCgpIHtcbiAgICAvLyBUT0RPIHNob3VsZCByZXR1cm4gdHJ1ZSBpZiB0aGUgc2VydmljZSBcImZhYnJpYzgtZm9yZ2VcIiBpcyB2YWxpZFxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQga3ViZXJuZXRlcyBzZWxlY3RlZCBuYW1lc3BhY2Ugb3IgdGhlIGRlZmF1bHQgb25lXG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24gY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKSB7XG4gICAgdmFyIGluamVjdG9yID0gSGF3dGlvQ29yZS5pbmplY3RvcjtcbiAgICBpZiAoaW5qZWN0b3IpIHtcbiAgICAgIHZhciBLdWJlcm5ldGVzU3RhdGUgPSBpbmplY3Rvci5nZXQ8YW55PihcIkt1YmVybmV0ZXNTdGF0ZVwiKSB8fCB7fTtcbiAgICAgIHJldHVybiBLdWJlcm5ldGVzU3RhdGUuc2VsZWN0ZWROYW1lc3BhY2UgfHwgZGVmYXVsdE5hbWVzcGFjZTtcbiAgICB9XG4gICAgcmV0dXJuIGRlZmF1bHROYW1lc3BhY2U7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gc2V0Q3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UobnMpIHtcbiAgICBpZiAobnMpIHtcbiAgICAgIHZhciBLdWJlcm5ldGVzU3RhdGUgPSBpbmplY3Q8YW55PihcIkt1YmVybmV0ZXNTdGF0ZVwiKSB8fCB7fTtcbiAgICAgIEt1YmVybmV0ZXNTdGF0ZS5zZWxlY3RlZE5hbWVzcGFjZSA9IG5zO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmVzIHRoZSBqc29uIHNjaGVtYVxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ3VyZVNjaGVtYSgpIHtcbiAgICBhbmd1bGFyLmZvckVhY2goc2NoZW1hLmRlZmluaXRpb25zLCAoZGVmaW5pdGlvbiwgbmFtZSkgPT4ge1xuICAgICAgdmFyIHByb3BlcnRpZXMgPSBkZWZpbml0aW9uLnByb3BlcnRpZXM7XG4gICAgICBpZiAocHJvcGVydGllcykge1xuICAgICAgICB2YXIgaGlkZVByb3BlcnRpZXMgPSBbXCJjcmVhdGlvblRpbWVzdGFtcFwiLCBcImtpbmRcIiwgXCJhcGlWZXJzaW9uXCIsIFwiYW5ub3RhdGlvbnNcIiwgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiLCBcIm5hbWVzcGFjZVwiLCBcInJlc291cmNlVmVyc2lvblwiLCBcInNlbGZMaW5rXCIsIFwidWlkXCJdO1xuICAgICAgICBhbmd1bGFyLmZvckVhY2goaGlkZVByb3BlcnRpZXMsIChwcm9wZXJ0eU5hbWUpID0+IHtcbiAgICAgICAgICB2YXIgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV07XG4gICAgICAgICAgaWYgKHByb3BlcnR5KSB7XG4gICAgICAgICAgICBwcm9wZXJ0eVtcImhpZGRlblwiXSAgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGFuZ3VsYXIuZm9yRWFjaChwcm9wZXJ0aWVzLCAocHJvcGVydHksIHByb3BlcnR5TmFtZSkgPT4ge1xuICAgICAgICAgIHZhciByZWYgPSBwcm9wZXJ0eVtcIiRyZWZcIl07XG4gICAgICAgICAgdmFyIHR5cGUgPSBwcm9wZXJ0eVtcInR5cGVcIl07XG4gICAgICAgICAgaWYgKHJlZiAmJiAoIXR5cGUgfHwgdHlwZSA9PT0gXCJvYmplY3RcIikpIHtcbiAgICAgICAgICAgIHByb3BlcnR5W1widHlwZVwiXSA9IHJlZjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHR5cGUgPT09IFwiYXJyYXlcIikge1xuICAgICAgICAgICAgdmFyIGl0ZW1zID0gcHJvcGVydHlbXCJpdGVtc1wiXTtcbiAgICAgICAgICAgIGlmIChpdGVtcykge1xuICAgICAgICAgICAgICB2YXIgcmVmID0gaXRlbXNbXCIkcmVmXCJdO1xuICAgICAgICAgICAgICB2YXIgdHlwZSA9IGl0ZW1zW1widHlwZVwiXTtcbiAgICAgICAgICAgICAgaWYgKHJlZiAmJiAoIXR5cGUgfHwgdHlwZSA9PT0gXCJvYmplY3RcIikpIHtcbiAgICAgICAgICAgICAgICBpdGVtc1tcInR5cGVcIl0gPSByZWY7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBzY2hlbWEuZGVmaW5pdGlvbnMub3NfYnVpbGRfV2ViSG9va1RyaWdnZXIucHJvcGVydGllcy5zZWNyZXQudHlwZSA9IFwicGFzc3dvcmRcIjtcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIExldHMgcmVtb3ZlIGFueSBlbnJpY2hlZCBkYXRhIHRvIGxlYXZlIHRoZSBvcmlnaW5hbCBqc29uIGludGFjdFxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIHVuZW5yaWNoKGl0ZW0pIHtcbiAgICB2YXIgbyA9IF8uY2xvbmVEZWVwKGl0ZW0pO1xuICAgIGFuZ3VsYXIuZm9yRWFjaChvLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgaWYgKGtleS5zdGFydHNXaXRoKFwiJFwiKSB8fCBrZXkuc3RhcnRzV2l0aChcIl9cIikpIHtcbiAgICAgICAgZGVsZXRlIG9ba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBkZWxldGUgb1snY29ubmVjdFRvJ107XG4gICAgcmV0dXJuIG87XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdW5lbnJpY2hlZCBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdFxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIHRvUmF3SnNvbihpdGVtKSB7XG4gICAgdmFyIG8gPSB1bmVucmljaChpdGVtKTtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkobywgbnVsbCwgMik7IC8vIHNwYWNpbmcgbGV2ZWwgPSAyXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdW5lbnJpY2hlZCBZQU1MIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdFxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIHRvUmF3WWFtbChpdGVtKSB7XG4gICAgdmFyIG8gPSB1bmVucmljaChpdGVtKTtcbiAgICByZXR1cm4ganN5YW1sLmR1bXAobywgeyBpbmRlbnQ6IDIgfSk7XG4gIH1cblxuXG4gIGV4cG9ydCBmdW5jdGlvbiB3YXRjaCgkc2NvcGU6IGFueSwgJGVsZW1lbnQ6IGFueSwga2luZCwgbnMsIGZuLCBsYWJlbFNlbGVjdG9yID0gbnVsbCkge1xuICAgICB2YXIgY29ubmVjdGlvbiA9IEt1YmVybmV0ZXNBUEkud2F0Y2goe1xuICAgICAgICBraW5kOiBraW5kLFxuICAgICAgICBuYW1lc3BhY2U6IG5zLFxuICAgICAgICBsYWJlbFNlbGVjdG9yOiBsYWJlbFNlbGVjdG9yLFxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAob2JqZWN0cykge1xuICAgICAgICAgIGZuKG9iamVjdHMpO1xuICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgJGVsZW1lbnQub24oJyRkZXN0cm95JywgKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhcIlN0YXRpYyBjb250cm9sbGVyW1wiICsga2luZCArIFwiLCBcIiArIG5zICsgXCJdIGVsZW1lbnQgZGVzdHJveWVkXCIpO1xuICAgICAgICAkc2NvcGUuJGRlc3Ryb3koKTtcbiAgICAgIH0pO1xuICAgICAgJHNjb3BlLiRvbignJGRlc3Ryb3knLCAoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiU3RhdGljIGNvbnRyb2xsZXJbXCIgKyBraW5kICsgXCIsIFwiICsgbnMgKyBcIl0gc2NvcGUgZGVzdHJveWVkXCIpO1xuICAgICAgICBjb25uZWN0aW9uLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH0pO1xuICAgICAgdmFyIG9sZERlbGV0ZVNjb3BlRm4gPSAkc2NvcGUuZGVsZXRlU2NvcGU7XG4gICAgICAkc2NvcGUuZGVsZXRlU2NvcGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICRlbGVtZW50LnJlbW92ZSgpO1xuICAgICAgICBpZiAoYW5ndWxhci5pc0Z1bmN0aW9uKG9sZERlbGV0ZVNjb3BlRm4pKSB7XG4gICAgICAgICAgb2xkRGVsZXRlU2NvcGVGbigpO1xuICAgICAgICB9XG4gICAgICB9XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlS3ViZXJuZXRlc0NsaWVudChraW5kLCBucyA9IG51bGwpIHtcbiAgICB2YXIgSzhTQ2xpZW50RmFjdG9yeSA9IGluamVjdDxhbnk+KFwiSzhTQ2xpZW50RmFjdG9yeVwiKTtcbiAgICBpZiAoIUs4U0NsaWVudEZhY3RvcnkpIHtcbiAgICAgIGxvZy53YXJuKFwiQ291bGQgbm90IGZpbmQgaW5qZWN0ZWQgSzhTQ2xpZW50RmFjdG9yeSFcIik7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKGtpbmQgPT09IFwicHJvamVjdHNcIiB8fCBraW5kID09PSBcIm5hbWVzcGFjZXNcIikge1xuICAgICAgbnMgPSBudWxsO1xuICAgIH0gZWxzZSBpZiAoIW5zKSB7XG4gICAgICBucyA9IEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIEs4U0NsaWVudEZhY3RvcnkuY3JlYXRlKGtpbmQsIG5zKTtcbiAgfVxuXG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGN1cnJlbnRVc2VyTmFtZSgpIHtcbiAgICB2YXIgdXNlckRldGFpbHMgPSBIYXd0aW9PQXV0aC5nZXRVc2VyUHJvZmlsZSgpO1xuICAgIHZhciBhbnN3ZXIgPSBudWxsO1xuICAgIGlmICh1c2VyRGV0YWlscykge1xuICAgICAgYW5zd2VyID0gZ2V0TmFtZSh1c2VyRGV0YWlscyk7XG4gICAgfVxuICAgIHJldHVybiBhbnN3ZXIgfHwgXCJhZG1pblwiO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU5hbWVzcGFjZShucywgY2xpZW50Pykge1xuICAgIGlmICghY2xpZW50KSB7XG4gICAgICBjbGllbnQgPSBpc09wZW5TaGlmdCA/IEt1YmVybmV0ZXMuY3JlYXRlS3ViZXJuZXRlc0NsaWVudCgncHJvamVjdHMnKSA6IEt1YmVybmV0ZXMuY3JlYXRlS3ViZXJuZXRlc0NsaWVudCgnbmFtZXNwYWNlcycpO1xuICAgIH1cbiAgICBpZiAobnMgJiYgbnMgIT09IGN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCkpIHtcbiAgICAgIHZhciBvYmplY3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb246IEt1YmVybmV0ZXMuZGVmYXVsdEFwaVZlcnNpb24sXG4gICAgICAgIGtpbmQ6IGlzT3BlblNoaWZ0ID8gJ1Byb2plY3QnIDogJ05hbWVzcGFjZScsXG4gICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgbmFtZTogbnMsXG4gICAgICAgICAgbGFiZWxzOiB7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY2xpZW50LnB1dChvYmplY3QsXG4gICAgICAgIChkYXRhKSA9PiB7XG4gICAgICAgICAgbG9nLmluZm8oXCJDcmVhdGVkIG5hbWVzcGFjZTogXCIgKyBucylcbiAgICAgICAgfSxcbiAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGNyZWF0ZSBuYW1lc3BhY2U6IFwiICsgbnMgKyBcIjogXCIgKyBhbmd1bGFyLnRvSnNvbihlcnIpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJDKG9iaiwgb25Db21wbGV0ZUZuID0gbnVsbCl7XG4gICAgdmFyIGNsaWVudCA9ICBLdWJlcm5ldGVzLmNyZWF0ZUt1YmVybmV0ZXNDbGllbnQoJ3JlcGxpY2F0aW9uY29udHJvbGxlcnMnLCdkZWZhdWx0Jyk7XG4gICAgdmFyIFJDVGVtcGxhdGUgPSBuZXcgcmVzb3VyY2VSQ1RlbXBsYXRlKCk7XG4gICAgdmFyIHJjVGVtcGxhdGUgPSBSQ1RlbXBsYXRlLmNyZWF0ZVJDKG9iaik7XG4gICAgY2xpZW50LnB1dChyY1RlbXBsYXRlLCBmdW5jdGlvbihvYmopIHtcbiAgICAgICBjb25zb2xlLmxvZyhcIkNyZWF0ZWQ6IFwiLCBvYmopO1xuICAgICAgIGlmIChhbmd1bGFyLmlzRnVuY3Rpb24ob25Db21wbGV0ZUZuKSkge1xuICAgICAgICAgICBvbkNvbXBsZXRlRm4ob2JqKTtcbiAgICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gdXBkYXRlUmVwbGljYXRpb25Db250cm9sbGVyTGFiZWxzKCRodHRwLCBLdWJlcm5ldGVzQXBpVVJMLCByZXBsaWNhdGlvbkNvbnRyb2xsZXIsIG5ld0xhYmVscywgb25Db21wbGV0ZUZuID0gbnVsbCl7XG4gICAgdmFyIGlkID0gZ2V0TmFtZShyZXBsaWNhdGlvbkNvbnRyb2xsZXIpO1xuICAgIHZhciBuYW1lc3BhY2UgPSBnZXROYW1lc3BhY2UocmVwbGljYXRpb25Db250cm9sbGVyKSB8fCBcIlwiO1xuICAgIHZhciB1cmwgPSBrdWJlcm5ldGVzVXJsRm9yS2luZChLdWJlcm5ldGVzQXBpVVJMLCBcIlJlcGxpY2F0aW9uQ29udHJvbGxlclwiLCBuYW1lc3BhY2UsIGlkKTtcbiAgICAkaHR0cC5nZXQodXJsKS5cbiAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgdmFyIGRlc2lyZWRMYWJlbHMgPSBkYXRhLm1ldGFkYXRhO1xuICAgICAgICAgIGlmICghZGVzaXJlZExhYmVscykge1xuICAgICAgICAgICAgZGVzaXJlZExhYmVscyA9IHt9O1xuICAgICAgICAgICAgZGF0YS5tZXRhZGF0YSA9IGRlc2lyZWRMYWJlbHM7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlc2lyZWRMYWJlbHMubGFiZWxzID0gbmV3TGFiZWxzO1xuICAgICAgICAgICRodHRwLnB1dCh1cmwsIGRhdGEpLlxuICAgICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgICAgbG9nLmRlYnVnKFwidXBkYXRlZCBjb250cm9sbGVyIFwiICsgdXJsKTtcbiAgICAgICAgICAgICAgaWYgKGFuZ3VsYXIuaXNGdW5jdGlvbihvbkNvbXBsZXRlRm4pKSB7XG4gICAgICAgICAgICAgICAgb25Db21wbGV0ZUZuKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLlxuICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gc2F2ZSBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSkuXG4gICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgIGV4cG9ydCBmdW5jdGlvbiBjb25uZWN0T3JhY2xlKCRodHRwLCAkdGltZW91dCwgdXJsLCBjb25uZWN0UGFyYW0sIHJjTmFtZSwgZGVsYXlUaW1lKXtcbiAgICAgICAkdGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICRodHRwKHtcbiAgICAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgICAgbWV0aG9kOidQT1NUJyxcbiAgICAgICAgICAgICAgIHBhcmFtczp7b3JhY2xlTmFtZTogcmNOYW1lLCBwYXJhbTogY29ubmVjdFBhcmFtfVxuICAgICAgICAgICB9KS5zdWNjZXNzKGZ1bmN0aW9uKGRhdGEsaGVhZGVyLGNvbmZpZyxzdGF0dXMpe1xuICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJzdWNjZXNzXCIpO1xuICAgICAgICAgICB9KS5lcnJvcihmdW5jdGlvbihkYXRhLGhlYWRlcixjb25maWcsc3RhdHVzKXtcbiAgICAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGNvbm5lY3QgXCIgKyBjb25uZWN0UGFyYW0gKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XG4gICAgICAgICAgIH0pO1xuICAgICAgfSwgZGVsYXlUaW1lKTtcbiAgIH1cblxuICAgZXhwb3J0IGZ1bmN0aW9uIGdldE9yYWNsZVN0YXR1cyhsYWJlbHMpe1xuICAgICAgIHZhciBhbnN3ZXIgPSAtMTtcbiAgICAgICBpZih0eXBlb2YobGFiZWxzKSA9PT0gJ29iamVjdCcgJiYgbGFiZWxzLmhhc093blByb3BlcnR5KFwic3RhdHVzXCIpKXtcbiAgICAgICAgICAgc3dpdGNoKGxhYmVscy5zdGF0dXMpe1xuICAgICAgICAgICAgICAgY2FzZSAnMCc6XG4gICAgICAgICAgICAgICAgICBhbnN3ZXIgPSAwO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICBjYXNlICcxJzpcbiAgICAgICAgICAgICAgICAgIGFuc3dlciA9IDE7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgIGNhc2UgJzInOlxuICAgICAgICAgICAgICAgICAgYW5zd2VyID0gMjtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGFuc3dlciA9IC0xO1xuICAgICAgICAgICB9XG4gICAgICAgfVxuICAgICAgIHJldHVybiBhbnN3ZXI7XG4gICB9XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG5tb2R1bGUgRGV2ZWxvcGVyIHtcblxuICBleHBvcnQgZnVuY3Rpb24gZW5yaWNoV29ya3NwYWNlcyhwcm9qZWN0cykge1xuICAgIGFuZ3VsYXIuZm9yRWFjaChwcm9qZWN0cywgKHByb2plY3QpID0+IHtcbiAgICAgIGVucmljaFdvcmtzcGFjZShwcm9qZWN0KTtcbiAgICB9KTtcbiAgICByZXR1cm4gcHJvamVjdHM7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZW5yaWNoV29ya3NwYWNlKGJ1aWxkKSB7XG4gICAgaWYgKGJ1aWxkKSB7XG4gICAgICB2YXIgbmFtZSA9IEt1YmVybmV0ZXMuZ2V0TmFtZShidWlsZCk7XG4gICAgICBidWlsZC4kbmFtZSA9IG5hbWU7XG4gICAgICBidWlsZC4kc29ydE9yZGVyID0gMCAtIGJ1aWxkLm51bWJlcjtcblxuICAgICAgdmFyIG5hbWVBcnJheSA9IG5hbWUuc3BsaXQoXCItXCIpO1xuICAgICAgdmFyIG5hbWVBcnJheUxlbmd0aCA9IG5hbWVBcnJheS5sZW5ndGg7XG4gICAgICBidWlsZC4kc2hvcnROYW1lID0gKG5hbWVBcnJheUxlbmd0aCA+IDQpID8gbmFtZUFycmF5LnNsaWNlKDAsIG5hbWVBcnJheUxlbmd0aCAtIDQpLmpvaW4oXCItXCIpIDogbmFtZS5zdWJzdHJpbmcoMCwgMzApO1xuXG4gICAgICB2YXIgbGFiZWxzID0gS3ViZXJuZXRlcy5nZXRMYWJlbHMoYnVpbGQpO1xuICAgICAgYnVpbGQuJGNyZWF0aW9uRGF0ZSA9IGFzRGF0ZShLdWJlcm5ldGVzLmdldENyZWF0aW9uVGltZXN0YW1wKGJ1aWxkKSk7XG4gICAgICBidWlsZC4kbGFiZWxzVGV4dCA9IEt1YmVybmV0ZXMubGFiZWxzVG9TdHJpbmcobGFiZWxzKTtcblxuICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgYnVpbGQuJHByb2plY3RzTGluayA9IFVybEhlbHBlcnMuam9pbihcIndvcmtzcGFjZXNcIiwgbmFtZSk7XG4gICAgICAgIGJ1aWxkLiRydW50aW1lTGluayA9IFVybEhlbHBlcnMuam9pbihcImt1YmVybmV0ZXMvbmFtZXNwYWNlL1wiLCBuYW1lLCBcIi9hcHBzXCIpO1xuICAgICAgICBidWlsZC4kdmlld0xpbmsgPSBidWlsZC4kcHJvamVjdHNMaW5rO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYnVpbGQ7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gYXNEYXRlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlID8gbmV3IERhdGUodmFsdWUpIDogbnVsbDtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBlbnJpY2hKZW5raW5zSm9icyhqb2JzRGF0YSwgcHJvamVjdElkLCBqb2JOYW1lKSB7XG4gICAgaWYgKGpvYnNEYXRhKSB7XG4gICAgICBhbmd1bGFyLmZvckVhY2goam9ic0RhdGEuam9icywgKGpvYikgPT4ge1xuICAgICAgICBlbnJpY2hKZW5raW5zSm9iKGpvYiwgcHJvamVjdElkLCBqb2JOYW1lKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gam9ic0RhdGE7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZW5yaWNoSmVua2luc0pvYihqb2IsIHByb2plY3RJZCwgam9iTmFtZSkge1xuICAgIGlmIChqb2IpIHtcbiAgICAgIGpvYk5hbWUgPSBqb2JOYW1lIHx8IGpvYi5uYW1lIHx8IHByb2plY3RJZDtcbiAgICAgIGpvYi4kam9iSWQgPSBqb2JOYW1lO1xuICAgICAgam9iLiRwcm9qZWN0ID0gcHJvamVjdElkIHx8IGpvYk5hbWU7XG4gICAgICB2YXIgbGFzdEJ1aWxkID0gam9iLmxhc3RCdWlsZDtcbiAgICAgIHZhciBsYXN0QnVpbGRSZXN1bHQgPSBsYXN0QnVpbGQgPyBsYXN0QnVpbGQucmVzdWx0IDogXCJOT1RfU1RBUlRFRFwiO1xuICAgICAgdmFyICRpY29uQ2xhc3MgPSBjcmVhdGVCdWlsZFN0YXR1c0ljb25DbGFzcyhsYXN0QnVpbGRSZXN1bHQpO1xuXG4gICAgICBqb2IuJGxhc3RCdWlsZE51bWJlciA9IGVucmljaEplbmtpbnNCdWlsZChqb2IsIGxhc3RCdWlsZCk7XG4gICAgICBqb2IuJGxhc3RTdWNjZXNzZnVsQnVpbGROdW1iZXIgPSBlbnJpY2hKZW5raW5zQnVpbGQoam9iLCBqb2IubGFzdFN1Y2Nlc3NmdWxCdWlsZCk7XG4gICAgICBqb2IuJGxhc3RGYWlsZWRsQnVpbGROdW1iZXIgPSBlbnJpY2hKZW5raW5zQnVpbGQoam9iLCBqb2IubGFzdEZhaWxlZGxCdWlsZCk7XG5cbiAgICAgIGlmIChsYXN0QnVpbGQpIHtcbiAgICAgICAgam9iLiRkdXJhdGlvbiA9IGxhc3RCdWlsZC5kdXJhdGlvbjtcbiAgICAgICAgam9iLiR0aW1lc3RhbXAgPSBhc0RhdGUobGFzdEJ1aWxkLnRpbWVzdGFtcCk7XG4gICAgICB9XG4gICAgICB2YXIgam9iVXJsID0gKGpvYiB8fCB7fSkudXJsO1xuICAgICAgaWYgKCFqb2JVcmwgfHwgIWpvYlVybC5zdGFydHNXaXRoKFwiaHR0cFwiKSkge1xuICAgICAgICB2YXIgamVua2luc1VybCA9IGplbmtpbnNMaW5rKCk7XG4gICAgICAgIGlmIChqZW5raW5zVXJsKSB7XG4gICAgICAgICAgam9iVXJsID0gVXJsSGVscGVycy5qb2luKGplbmtpbnNVcmwsIFwiam9iXCIsIGpvYk5hbWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChqb2JVcmwpIHtcbiAgICAgICAgam9iLiRqb2JMaW5rID0gam9iVXJsO1xuICAgICAgICB2YXIgd29ya3NwYWNlTmFtZSA9IEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcbiAgICAgICAgam9iLiRwaXBlbGluZXNMaW5rID0gVXJsSGVscGVycy5qb2luKFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJwcm9qZWN0c1wiLCBqb2IuJHByb2plY3QsIFwiamVua2luc0pvYlwiLCBqb2JOYW1lLCBcInBpcGVsaW5lc1wiKTtcbiAgICAgICAgam9iLiRidWlsZHNMaW5rID0gVXJsSGVscGVycy5qb2luKFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJwcm9qZWN0c1wiLCBqb2IuJHByb2plY3QsIFwiamVua2luc0pvYlwiLCBqb2JOYW1lKTtcbiAgICAgIH1cbiAgICAgIGpvYi4kaWNvbkNsYXNzID0gJGljb25DbGFzcztcblxuICAgICAgYW5ndWxhci5mb3JFYWNoKGpvYi5idWlsZHMsIChidWlsZCkgPT4ge1xuICAgICAgICBlbnJpY2hKZW5raW5zQnVpbGQoam9iLCBidWlsZCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGpvYjtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCdWlsZFN0YXR1c0ljb25DbGFzcyhyZXN1bHQpIHtcbiAgICB2YXIgJGljb25DbGFzcyA9IFwiZmEgZmEtc3Bpbm5lciBmYS1zcGluXCI7XG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgaWYgKHJlc3VsdCA9PT0gXCJGQUlMVVJFXCIgfHwgcmVzdWx0ID09PSBcIkZBSUxFRFwiKSB7XG4gICAgICAgIC8vIFRPRE8gbm90IGF2YWlsYWJsZSB5ZXRcbiAgICAgICAgJGljb25DbGFzcyA9IFwiZmEgZmEtZXhjbGFtYXRpb24tY2lyY2xlIHJlZFwiO1xuICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT09IFwiQUJPUlRFRFwiIHx8IHJlc3VsdCA9PT0gXCJJTlRFUlVQVEVEXCIpIHtcbiAgICAgICAgJGljb25DbGFzcyA9IFwiZmEgZmEtY2lyY2xlIGdyZXlcIjtcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0ID09PSBcIlNVQ0NFU1NcIiB8fCByZXN1bHQgPT09IFwiQ09NUExFVEVcIiB8fCByZXN1bHQgPT09IFwiQ09NUExFVEVEXCIpIHtcbiAgICAgICAgJGljb25DbGFzcyA9IFwiZmEgZmEtY2hlY2stY2lyY2xlIGdyZWVuXCI7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gXCJOT1RfU1RBUlRFRFwiKSB7XG4gICAgICAgICRpY29uQ2xhc3MgPSBcImZhIGZhLWNpcmNsZS10aGluIGdyZXlcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICRpY29uQ2xhc3M7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlQnVpbGRTdGF0dXNCYWNrZ3JvdW5kQ2xhc3MocmVzdWx0KSB7XG4gICAgdmFyICRpY29uQ2xhc3MgPSBcImJ1aWxkLXBlbmRpbmdcIjtcbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICBpZiAocmVzdWx0ID09PSBcIkZBSUxVUkVcIiB8fCByZXN1bHQgPT09IFwiRkFJTEVEXCIpIHtcbiAgICAgICAgJGljb25DbGFzcyA9IFwiYnVpbGQtZmFpbFwiO1xuICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT09IFwiQUJPUlRFRFwiIHx8IHJlc3VsdCA9PT0gXCJJTlRFUlVQVEVEXCIpIHtcbiAgICAgICAgJGljb25DbGFzcyA9IFwiYnVpbGQtYWJvcnRlZFwiO1xuICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT09IFwiU1VDQ0VTU1wiIHx8IHJlc3VsdCA9PT0gXCJDT01QTEVURVwiIHx8IHJlc3VsdCA9PT0gXCJDT01QTEVURURcIikge1xuICAgICAgICAkaWNvbkNsYXNzID0gXCJidWlsZC1zdWNjZXNzXCI7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gXCJOT1RfU1RBUlRFRFwiKSB7XG4gICAgICAgICRpY29uQ2xhc3MgPSBcImJ1aWxkLW5vdC1zdGFydGVkXCI7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAkaWNvbkNsYXNzO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGVucmljaEplbmtpbnNCdWlsZChqb2IsIGJ1aWxkKSB7XG4gICAgdmFyIG51bWJlciA9IG51bGw7XG4gICAgaWYgKGJ1aWxkKSB7XG4gICAgICBidWlsZC4kZHVyYXRpb24gPSBidWlsZC5kdXJhdGlvbjtcbiAgICAgIGJ1aWxkLiR0aW1lc3RhbXAgPSBhc0RhdGUoYnVpbGQudGltZXN0YW1wKTtcbiAgICAgIHZhciBwcm9qZWN0SWQgPSBqb2IuJHByb2plY3Q7XG4gICAgICB2YXIgam9iTmFtZSA9IGpvYi4kam9iSWQgfHwgcHJvamVjdElkO1xuICAgICAgdmFyIGJ1aWxkSWQgPSBidWlsZC5pZDtcbiAgICAgIG51bWJlciA9IGJ1aWxkLm51bWJlcjtcbiAgICAgIHZhciB3b3Jrc3BhY2VOYW1lID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xuXG4gICAgICB2YXIgJGljb25DbGFzcyA9IGNyZWF0ZUJ1aWxkU3RhdHVzSWNvbkNsYXNzKGJ1aWxkLnJlc3VsdCk7XG4gICAgICB2YXIgam9iVXJsID0gKGpvYiB8fCB7fSkudXJsO1xuICAgICAgaWYgKCFqb2JVcmwgfHwgIWpvYlVybC5zdGFydHNXaXRoKFwiaHR0cFwiKSkge1xuICAgICAgICB2YXIgamVua2luc1VybCA9IGplbmtpbnNMaW5rKCk7XG4gICAgICAgIGlmIChqZW5raW5zVXJsKSB7XG4gICAgICAgICAgam9iVXJsID0gVXJsSGVscGVycy5qb2luKGplbmtpbnNVcmwsIFwiam9iXCIsIGpvYk5hbWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChqb2JVcmwpIHtcbiAgICAgICAgYnVpbGQuJGpvYkxpbmsgPSBqb2JVcmw7XG4gICAgICAgIGlmIChidWlsZElkKSB7XG4gICAgICAgICAgLy9idWlsZC4kbG9nc0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4oYnVpbGQuJGJ1aWxkTGluaywgXCJjb25zb2xlXCIpO1xuICAgICAgICAgIGJ1aWxkLiRsb2dzTGluayA9IFVybEhlbHBlcnMuam9pbihcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiwgcHJvamVjdElkLCBcImplbmtpbnNKb2JcIiwgam9iTmFtZSwgXCJsb2dcIiwgYnVpbGRJZCk7XG4gICAgICAgICAgYnVpbGQuJHBpcGVsaW5lTGluayA9IFVybEhlbHBlcnMuam9pbihcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiwgcHJvamVjdElkLCBcImplbmtpbnNKb2JcIiwgam9iTmFtZSwgXCJwaXBlbGluZVwiLCBidWlsZElkKTtcbiAgICAgICAgICBidWlsZC4kYnVpbGRzTGluayA9IFVybEhlbHBlcnMuam9pbihcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiwgcHJvamVjdElkLCBcImplbmtpbnNKb2JcIiwgam9iTmFtZSk7XG4gICAgICAgICAgLy9idWlsZC4kYnVpbGRMaW5rID0gVXJsSGVscGVycy5qb2luKGpvYlVybCwgYnVpbGQuaWQpO1xuICAgICAgICAgIGJ1aWxkLiRidWlsZExpbmsgPSBidWlsZC4kbG9nc0xpbms7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJ1aWxkLiRpY29uQ2xhc3MgPSAkaWNvbkNsYXNzO1xuICAgIH1cbiAgICByZXR1cm4gbnVtYmVyO1xuICB9XG5cblxuICBleHBvcnQgZnVuY3Rpb24gamVua2luc0xpbmsoKSB7XG4gICAgdmFyIFNlcnZpY2VSZWdpc3RyeSA9IEt1YmVybmV0ZXMuaW5qZWN0PGFueT4oXCJTZXJ2aWNlUmVnaXN0cnlcIik7XG4gICAgaWYgKFNlcnZpY2VSZWdpc3RyeSkge1xuICAgICAgcmV0dXJuIFNlcnZpY2VSZWdpc3RyeS5zZXJ2aWNlTGluayhqZW5raW5zU2VydmljZU5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBmb3JnZVJlYWR5TGluaygpIHtcbiAgICB2YXIgU2VydmljZVJlZ2lzdHJ5ID0gS3ViZXJuZXRlcy5pbmplY3Q8YW55PihcIlNlcnZpY2VSZWdpc3RyeVwiKTtcbiAgICBpZiAoU2VydmljZVJlZ2lzdHJ5KSB7XG4gICAgICByZXR1cm4gU2VydmljZVJlZ2lzdHJ5LnNlcnZpY2VSZWFkeUxpbmsoS3ViZXJuZXRlcy5mYWJyaWM4Rm9yZ2VTZXJ2aWNlTmFtZSk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGVucmljaEplbmtpbnNQaXBlbGluZUpvYihqb2IsIHByb2plY3RJZCwgam9iSWQpIHtcbiAgICBpZiAoam9iKSB7XG4gICAgICBqb2IuJHByb2plY3QgPSBwcm9qZWN0SWQ7XG4gICAgICBqb2IuJGpvYklkID0gam9iSWQ7XG4gICAgICBhbmd1bGFyLmZvckVhY2goam9iLmJ1aWxkcywgKGJ1aWxkKSA9PiB7XG4gICAgICAgIGVucmljaEplbmtpbnNTdGFnZXMoYnVpbGQsIHByb2plY3RJZCwgam9iSWQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGVucmljaEplbmtpbnNTdGFnZXMoYnVpbGQsIHByb2plY3RJZCwgam9iTmFtZSkge1xuICAgIGlmIChidWlsZCkge1xuICAgICAgYnVpbGQuJHByb2plY3QgPSBwcm9qZWN0SWQ7XG4gICAgICBidWlsZC4kam9iSWQgPSBqb2JOYW1lO1xuICAgICAgYnVpbGQuJHRpbWVzdGFtcCA9IGFzRGF0ZShidWlsZC50aW1lSW5NaWxsaXMpO1xuICAgICAgYnVpbGQuJGljb25DbGFzcyA9IGNyZWF0ZUJ1aWxkU3RhdHVzSWNvbkNsYXNzKGJ1aWxkLnJlc3VsdCB8fCBcIk5PVF9TVEFSVEVEXCIpO1xuXG4gICAgICB2YXIgd29ya3NwYWNlTmFtZSA9IEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcbiAgICAgIHZhciBwYXJhbWV0ZXJzID0gYnVpbGQucGFyYW1ldGVycztcbiAgICAgIHZhciAkcGFyYW1ldGVyQ291bnQgPSAwO1xuICAgICAgdmFyICRwYXJhbWV0ZXJUZXh0ID0gXCJObyBwYXJhbWV0ZXJzXCI7XG4gICAgICBpZiAocGFyYW1ldGVycykge1xuICAgICAgICAkcGFyYW1ldGVyQ291bnQgPSBfLmtleXMocGFyYW1ldGVycykubGVuZ3RoIHx8IDA7XG4gICAgICAgICRwYXJhbWV0ZXJUZXh0ID0gS3ViZXJuZXRlcy5sYWJlbHNUb1N0cmluZyhwYXJhbWV0ZXJzLCBcIiBcIik7XG4gICAgICB9XG4gICAgICBidWlsZC4kcGFyYW1ldGVyQ291bnQgPSAkcGFyYW1ldGVyQ291bnQ7XG4gICAgICBidWlsZC4kcGFyYW1ldGVyVGV4dCA9ICRwYXJhbWV0ZXJUZXh0O1xuICAgICAgdmFyIGplbmtpbnNVcmwgPSBqZW5raW5zTGluaygpO1xuICAgICAgaWYgKGplbmtpbnNVcmwpIHtcbiAgICAgICAgdmFyIHVybCA9IGJ1aWxkLnVybDtcbiAgICAgICAgaWYgKHVybCkge1xuLypcbiAgICAgICAgICBidWlsZC4kdmlld0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4oamVua2luc1VybCwgdXJsKTtcbiAgICAgICAgICBidWlsZC4kbG9nTGluayA9IFVybEhlbHBlcnMuam9pbihidWlsZC4kdmlld0xpbmssIFwibG9nXCIpO1xuKi9cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnVpbGQuJGxvZ0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4oXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIHByb2plY3RJZCwgXCJqZW5raW5zSm9iXCIsIGpvYk5hbWUsIFwibG9nXCIsIGJ1aWxkLmlkKTtcbiAgICAgIGJ1aWxkLiR2aWV3TGluayA9IGJ1aWxkLiRsb2dMaW5rO1xuXG4gICAgICBhbmd1bGFyLmZvckVhY2goYnVpbGQuc3RhZ2VzLCAoc3RhZ2UpID0+IHtcbiAgICAgICAgZW5yaWNoSmVua2luc1N0YWdlKHN0YWdlLCBidWlsZCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1aWxkO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGVucmljaEplbmtpbnNTdGFnZShzdGFnZSwgYnVpbGQgPSBudWxsKSB7XG4gICAgaWYgKHN0YWdlKSB7XG4gICAgICBpZiAoYnVpbGQpIHtcbiAgICAgICAgc3RhZ2UuJGJ1aWxkSWQgPSBidWlsZC5pZDtcbiAgICAgICAgc3RhZ2UuJHByb2plY3QgPSBidWlsZC4kcHJvamVjdDtcbiAgICAgIH1cbiAgICAgIHZhciBwcm9qZWN0SWQgPSBidWlsZC4kcHJvamVjdDtcbiAgICAgIHZhciBqb2JOYW1lID0gYnVpbGQuJGpvYklkIHx8IHByb2plY3RJZDtcbiAgICAgIHZhciBidWlsZElkID0gYnVpbGQuaWQ7XG4gICAgICB2YXIgd29ya3NwYWNlTmFtZSA9IEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcbiAgICAgIHN0YWdlLiRiYWNrZ3JvdW5kQ2xhc3MgPSAgY3JlYXRlQnVpbGRTdGF0dXNCYWNrZ3JvdW5kQ2xhc3Moc3RhZ2Uuc3RhdHVzKTtcbiAgICAgIHN0YWdlLiRpY29uQ2xhc3MgPSBjcmVhdGVCdWlsZFN0YXR1c0ljb25DbGFzcyhzdGFnZS5zdGF0dXMpO1xuICAgICAgc3RhZ2UuJHN0YXJ0VGltZSA9IGFzRGF0ZShzdGFnZS5zdGFydFRpbWUpO1xuICAgICAgaWYgKCFzdGFnZS5kdXJhdGlvbikge1xuICAgICAgICBzdGFnZS5kdXJhdGlvbiA9IDA7XG4gICAgICB9XG4gICAgICB2YXIgamVua2luc1VybCA9IGplbmtpbnNMaW5rKCk7XG4gICAgICBpZiAoamVua2luc1VybCkge1xuICAgICAgICB2YXIgdXJsID0gc3RhZ2UudXJsO1xuICAgICAgICBpZiAodXJsKSB7XG4gICAgICAgICAgc3RhZ2UuJHZpZXdMaW5rID0gVXJsSGVscGVycy5qb2luKGplbmtpbnNVcmwsIHVybCk7XG4gICAgICAgICAgc3RhZ2UuJGxvZ0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4oc3RhZ2UuJHZpZXdMaW5rLCBcImxvZ1wiKTtcbiAgICAgICAgICBpZiAocHJvamVjdElkICYmIGJ1aWxkSWQpIHtcbiAgICAgICAgICAgIHN0YWdlLiRsb2dMaW5rID0gVXJsSGVscGVycy5qb2luKFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJwcm9qZWN0c1wiLCBwcm9qZWN0SWQsIFwiamVua2luc0pvYlwiLCBqb2JOYW1lLCBcImxvZ1wiLCBidWlsZElkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbm1vZHVsZSBEZXZlbG9wZXIge1xuXG4gIGV4cG9ydCB2YXIgY29udGV4dCA9ICcvd29ya3NwYWNlcyc7XG4gIGV4cG9ydCB2YXIgaGFzaCA9ICcjJyArIGNvbnRleHQ7XG4gIGV4cG9ydCB2YXIgcGx1Z2luTmFtZSA9ICdEZXZlbG9wZXInO1xuICBleHBvcnQgdmFyIHBsdWdpblBhdGggPSAncGx1Z2lucy9kZXZlbG9wZXIvJztcbiAgZXhwb3J0IHZhciB0ZW1wbGF0ZVBhdGggPSBwbHVnaW5QYXRoICsgJ2h0bWwvJztcbiAgZXhwb3J0IHZhciBsb2c6TG9nZ2luZy5Mb2dnZXIgPSBMb2dnZXIuZ2V0KHBsdWdpbk5hbWUpO1xuXG4gIGV4cG9ydCB2YXIgamVua2luc1NlcnZpY2VOYW1lID0gXCJqZW5raW5zXCI7XG4gIGV4cG9ydCB2YXIgamVua2luc1NlcnZpY2VOYW1lQW5kUG9ydCA9IGplbmtpbnNTZXJ2aWNlTmFtZSArIFwiOmh0dHBcIjtcblxuICBleHBvcnQgdmFyIGplbmtpbnNIdHRwQ29uZmlnID0ge1xuICAgIGhlYWRlcnM6IHtcbiAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3gtanNvbiwgdGV4dC9wbGFpblwiXG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHZhbHVlIGhhc24ndCBjaGFuZ2VkIGZyb20gdGhlIGxhc3QgY2FjaGVkIEpTT04gdmVyc2lvbiBvZiB0aGlzIG9iamVjdFxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIGhhc09iamVjdENoYW5nZWQodmFsdWUsIHN0YXRlKSB7XG4gICAgdmFyIGpzb24gPSBhbmd1bGFyLnRvSnNvbih2YWx1ZSB8fCBcIlwiKTtcbiAgICB2YXIgb2xkSnNvbiA9IHN0YXRlLmpzb247XG4gICAgc3RhdGUuanNvbiA9IGpzb247XG4gICAgcmV0dXJuICFvbGRKc29uIHx8IGpzb24gIT09IG9sZEpzb247XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gcHJvamVjdEZvclNjb3BlKCRzY29wZSkge1xuICAgIGlmICgkc2NvcGUpIHtcbiAgICAgIHJldHVybiAkc2NvcGUuYnVpbGRDb25maWcgfHwgJHNjb3BlLmVudGl0eSB8fCAoJHNjb3BlLm1vZGVsIHx8IHt9KS5wcm9qZWN0O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvKipcbiAgICogTGV0cyBsb2FkIHRoZSBwcm9qZWN0IHZlcnNpb25zIGZvciB0aGUgZ2l2ZW4gbmFtZXNwYWNlXG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24gbG9hZFByb2plY3RWZXJzaW9ucygkc2NvcGUsICRlbGVtZW50LCBwcm9qZWN0LCBlbnYsIG5zLCBhbnN3ZXIsIGNhY2hlcykge1xuICAgIHZhciBwcm9qZWN0QW5ub3RhdGlvbiA9IFwicHJvamVjdFwiO1xuICAgIHZhciB2ZXJzaW9uQW5ub3RhdGlvbiA9IFwidmVyc2lvblwiO1xuXG4gICAgdmFyIHByb2plY3ROYW1lc3BhY2UgPSBwcm9qZWN0LiRuYW1lc3BhY2U7XG4gICAgdmFyIHByb2plY3ROYW1lID0gcHJvamVjdC4kbmFtZTtcblxuICAgIHZhciBjYWNoZSA9IGNhY2hlc1tuc107XG4gICAgaWYgKCFjYWNoZSkge1xuICAgICAgY2FjaGUgPSB7fTtcbiAgICAgIGNhY2hlc1tuc10gPSBjYWNoZTtcbiAgICB9XG5cbiAgICB2YXIgc3RhdHVzID0ge1xuICAgICAgcmNzOiBbXSxcbiAgICAgIHBvZHM6IFtdLFxuICAgICAgcm91dGVzOiBbXSxcbiAgICAgIHNlcnZpY2VzOiBbXVxuICAgIH07XG5cbiAgICB2YXIgaW1hZ2VTdHJlYW1UYWdzID0gW107XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVNb2RlbCgpIHtcbiAgICAgIHZhciBwcm9qZWN0SW5mb3MgPSB7fTtcbiAgICAgIHZhciBtb2RlbCA9ICRzY29wZS5tb2RlbCB8fCB7fTtcblxuICAgICAgYW5ndWxhci5mb3JFYWNoKHN0YXR1cy5yY3MsIChpdGVtKSA9PiB7XG4gICAgICAgIHZhciBtZXRhZGF0YSA9IGl0ZW0ubWV0YWRhdGEgfHwge307XG4gICAgICAgIHZhciBuYW1lID0gbWV0YWRhdGEubmFtZTtcbiAgICAgICAgdmFyIGxhYmVscyA9IG1ldGFkYXRhLmxhYmVscyB8fCB7fTtcbiAgICAgICAgdmFyIGFubm90YXRpb25zID0gbWV0YWRhdGEuYW5ub3RhdGlvbnMgfHwge307XG4gICAgICAgIHZhciBzcGVjID0gaXRlbS5zcGVjIHx8IHt9O1xuICAgICAgICB2YXIgc2VsZWN0b3IgPSBzcGVjLnNlbGVjdG9yO1xuXG4gICAgICAgIHZhciBwcm9qZWN0ID0gbGFiZWxzW3Byb2plY3RBbm5vdGF0aW9uXTtcbiAgICAgICAgdmFyIHZlcnNpb24gPSBsYWJlbHNbdmVyc2lvbkFubm90YXRpb25dO1xuXG4gICAgICAgIC8vIGxldHMgdHJ5IHRoZSBTMkkgZGVmYXVsdHMuLi5cbiAgICAgICAgaWYgKCFwcm9qZWN0KSB7XG4gICAgICAgICAgcHJvamVjdCA9IGxhYmVsc1tcImFwcFwiXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXZlcnNpb24pIHtcbiAgICAgICAgICB2ZXJzaW9uID0gYW5ub3RhdGlvbnNbXCJvcGVuc2hpZnQuaW8vZGVwbG95bWVudC1jb25maWcubGF0ZXN0LXZlcnNpb25cIl1cbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvamVjdCAmJiB2ZXJzaW9uICYmIHByb2plY3QgPT09IHByb2plY3ROYW1lKSB7XG4gICAgICAgICAgdmFyIHByb2plY3RzID0gcHJvamVjdEluZm9zW3Byb2plY3RdO1xuICAgICAgICAgIGlmICghcHJvamVjdHMpIHtcbiAgICAgICAgICAgIHByb2plY3RzID0ge1xuICAgICAgICAgICAgICBwcm9qZWN0OiBwcm9qZWN0LFxuICAgICAgICAgICAgICB2ZXJzaW9uczoge31cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBwcm9qZWN0SW5mb3NbcHJvamVjdF0gPSBwcm9qZWN0cztcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIHZlcnNpb25JbmZvID0gcHJvamVjdHMudmVyc2lvbnNbdmVyc2lvbl07XG4gICAgICAgICAgaWYgKCF2ZXJzaW9uSW5mbykge1xuICAgICAgICAgICAgdmVyc2lvbkluZm8gPSB7XG4gICAgICAgICAgICAgIHJlcGxpY2F0aW9uQ29udHJvbGxlcnM6IHt9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcHJvamVjdHMudmVyc2lvbnNbdmVyc2lvbl0gPSB2ZXJzaW9uSW5mbztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICAgIHZlcnNpb25JbmZvLnJlcGxpY2F0aW9uQ29udHJvbGxlcnNbbmFtZV0gPSBpdGVtO1xuICAgICAgICAgICAgaXRlbS4kbmFtZSA9IG5hbWU7XG4gICAgICAgICAgICBpZiAocHJvamVjdE5hbWVzcGFjZSAmJiBwcm9qZWN0TmFtZSkge1xuICAgICAgICAgICAgICBpdGVtLiR2aWV3TGluayA9IFVybEhlbHBlcnMuam9pbihcIi93b3Jrc3BhY2VzL1wiLCBwcm9qZWN0TmFtZXNwYWNlLCBcInByb2plY3RzXCIsIHByb2plY3ROYW1lLCBcIm5hbWVzcGFjZVwiLCBucywgXCJyZXBsaWNhdGlvbkNvbnRyb2xsZXJzXCIsIG5hbWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbG9nLndhcm4oXCJNaXNzaW5nIHByb2plY3QgZGF0YSEgXCIgKyBwcm9qZWN0TmFtZXNwYWNlICsgXCIgbmFtZSBcIiArIHByb2plY3ROYW1lKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaXRlbS4kc2VydmljZXMgPSBbXTtcbiAgICAgICAgICAgIHZhciByY0xpbmsgPSBudWxsO1xuICAgICAgICAgICAgc3RhdHVzLnNlcnZpY2VzLmZvckVhY2goKHNlcnZpY2UpID0+IHtcbiAgICAgICAgICAgICAgdmFyIHJlcFNlbGVjdG9yID0gS3ViZXJuZXRlcy5nZXRTZWxlY3RvcihpdGVtKTtcbiAgICAgICAgICAgICAgdmFyIHNlcnZpY2VTZWxlY3RvciA9IEt1YmVybmV0ZXMuZ2V0U2VsZWN0b3Ioc2VydmljZSk7XG4gICAgICAgICAgICAgIGlmIChzZXJ2aWNlU2VsZWN0b3IgJiYgcmVwU2VsZWN0b3IgJiZcbiAgICAgICAgICAgICAgICBLdWJlcm5ldGVzLnNlbGVjdG9yTWF0Y2hlcyhzZXJ2aWNlU2VsZWN0b3IsIHJlcFNlbGVjdG9yKSAmJlxuICAgICAgICAgICAgICAgIEt1YmVybmV0ZXMuZ2V0TmFtZXNwYWNlKHNlcnZpY2UpID09PSBLdWJlcm5ldGVzLmdldE5hbWVzcGFjZShpdGVtKSkge1xuICAgICAgICAgICAgICAgIHN0YXR1cy5yb3V0ZXMuZm9yRWFjaCgocm91dGUpID0+IHtcbiAgICAgICAgICAgICAgICAgIHZhciBzZXJ2aWNlTmFtZSA9IEt1YmVybmV0ZXMuZ2V0TmFtZShzZXJ2aWNlKTtcbiAgICAgICAgICAgICAgICAgIGlmIChzZXJ2aWNlTmFtZSA9PT0gS3ViZXJuZXRlcy5nZXROYW1lKHJvdXRlKSkge1xuICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlW1wiJHJvdXRlXCJdID0gcm91dGU7XG4gICAgICAgICAgICAgICAgICAgIHNlcnZpY2VbXCIkaG9zdFwiXSA9IENvcmUucGF0aEdldChyb3V0ZSwgW1wic3BlY1wiLCBcImhvc3RcIl0pO1xuICAgICAgICAgICAgICAgICAgICBpdGVtLiRzZXJ2aWNlcy5wdXNoKHNlcnZpY2UpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJjTGluaykge1xuICAgICAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSBLdWJlcm5ldGVzLnNlcnZpY2VMaW5rVXJsKHNlcnZpY2UsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE8gZmluZCBpY29uIGV0Yz9cbiAgICAgICAgICAgICAgICAgICAgICAgIHJjTGluayA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogc2VydmljZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY6IHVybFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpdGVtW1wiJHNlcnZpY2VMaW5rXCJdID0gcmNMaW5rO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpdGVtLiRidWlsZElkID0gYW5ub3RhdGlvbnNbXCJmYWJyaWM4LmlvL2J1aWxkLWlkXCJdIHx8IGl0ZW0uJGJ1aWxkSWQ7XG4gICAgICAgICAgaXRlbS4kYnVpbGRVcmwgPSBhbm5vdGF0aW9uc1tcImZhYnJpYzguaW8vYnVpbGQtdXJsXCJdIHx8IGl0ZW0uJGJ1aWxkVXJsO1xuICAgICAgICAgIGl0ZW0uJGdpdENvbW1pdCA9IGFubm90YXRpb25zW1wiZmFicmljOC5pby9naXQtY29tbWl0XCJdIHx8IGl0ZW0uJGdpdENvbW1pdDtcbiAgICAgICAgICBpdGVtLiRnaXRVcmwgPSBhbm5vdGF0aW9uc1tcImZhYnJpYzguaW8vZ2l0LXVybFwiXSB8fCBpdGVtLiRnaXRVcmw7XG4gICAgICAgICAgaXRlbS4kZ2l0QnJhbmNoID0gYW5ub3RhdGlvbnNbXCJmYWJyaWM4LmlvL2dpdC1icmFuY2hcIl0gfHwgaXRlbS4kZ2l0QnJhbmNoO1xuICAgICAgICAgIGlmICghaXRlbS4kZ2l0Q29tbWl0KSB7XG4gICAgICAgICAgICB2YXIgaW1hZ2UgPSBnZXRJbWFnZShpdGVtKTtcbiAgICAgICAgICAgIGlmIChpbWFnZSkge1xuICAgICAgICAgICAgICBpZiAoISRzY29wZS4kaXNXYXRjaEltYWdlcykge1xuICAgICAgICAgICAgICAgICRzY29wZS4kaXNXYXRjaEltYWdlcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgS3ViZXJuZXRlcy53YXRjaCgkc2NvcGUsICRlbGVtZW50LCBcImltYWdlc1wiLCBudWxsLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgaW1hZ2VTdHJlYW1UYWdzID0gZGF0YTtcbiAgICAgICAgICAgICAgICAgIGNoZWNrRm9yTWlzc2luZ01ldGFkYXRhKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2hlY2tGb3JNaXNzaW5nTWV0YWRhdGEoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiBnZXRJbWFnZShpdGVtKSB7XG4gICAgICAgICAgICAgIHZhciBpbWFnZSA9IFwiXCI7XG4gICAgICAgICAgICAgIC8vIGxldHMgc2VlIGlmIHdlIGNhbiBmaW5kIHRoZSBjb21taXQgaWQgZnJvbSBhIFMySSBpbWFnZSBuYW1lXG4gICAgICAgICAgICAgIC8vIFRPRE8gbmVlZHMgdGhpcyBpc3N1ZSBmaXhlZCB0byBmaW5kIGl0IHZpYSBhbiBPcGVuU2hpZnQgYW5ub3RhdGlvbjpcbiAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL29wZW5zaGlmdC9vcmlnaW4vaXNzdWVzLzYyNDFcbiAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lcnMgPSBDb3JlLnBhdGhHZXQoaXRlbSwgW1wic3BlY1wiLCBcInRlbXBsYXRlXCIsIFwic3BlY1wiLCBcImNvbnRhaW5lcnNcIl0pO1xuICAgICAgICAgICAgICBpZiAoY29udGFpbmVycyAmJiBjb250YWluZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBjb250YWluZXJzWzBdO1xuICAgICAgICAgICAgICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICAgIGltYWdlID0gY29udGFpbmVyLmltYWdlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gaW1hZ2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNoZWNrRm9yTWlzc2luZ01ldGFkYXRhKCkge1xuICAgICAgICAgICAgICBhbmd1bGFyLmZvckVhY2gocHJvamVjdHMudmVyc2lvbnMsICh2aSkgPT4ge1xuICAgICAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaCh2aS5yZXBsaWNhdGlvbkNvbnRyb2xsZXJzLCAoaXRlbSwgbmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKCFpdGVtLiRnaXRDb21taXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGltYWdlID0gZ2V0SW1hZ2UoaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbWFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChpbWFnZVN0cmVhbVRhZ3MsIChpbWFnZVN0cmVhbVRhZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGltYWdlTmFtZSA9IGltYWdlU3RyZWFtVGFnLmRvY2tlckltYWdlUmVmZXJlbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGltYWdlTmFtZSAmJiBpbWFnZU5hbWUgPT09IGltYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3VuZElTVGFnID0gaW1hZ2VTdHJlYW1UYWc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYW5pZmVzdEpTT04gPSBpbWFnZVN0cmVhbVRhZy5kb2NrZXJJbWFnZU1hbmlmZXN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFuaWZlc3RKU09OKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hbmlmZXN0ID0gYW5ndWxhci5mcm9tSnNvbihtYW5pZmVzdEpTT04pIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoaXN0b3J5ID0gbWFuaWZlc3QuaGlzdG9yeTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGlzdG9yeSAmJiBoaXN0b3J5Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHYxID0gaGlzdG9yeVswXS52MUNvbXBhdGliaWxpdHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodjEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBhbmd1bGFyLmZyb21Kc29uKHYxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVudiA9IENvcmUucGF0aEdldChkYXRhLCBbXCJjb25maWdcIiwgXCJFbnZcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmd1bGFyLmZvckVhY2goZW52LCAoZW52RXhwKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudkV4cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IGVudkV4cC5zcGxpdChcIj1cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMiAmJiB2YWx1ZXNbMF0gPT0gXCJPUEVOU0hJRlRfQlVJTERfTkFNRVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBidWlsZE5hbWUgPSB2YWx1ZXNbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWlsZE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLiRidWlsZElkID0gYnVpbGROYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uJGJ1aWxkVXJsID0gRGV2ZWxvcGVyLnByb2plY3RXb3Jrc3BhY2VMaW5rKG5zLCBwcm9qZWN0TmFtZSwgXCJidWlsZExvZ3MvXCIgKyBidWlsZE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhYmVscyA9IENvcmUucGF0aEdldChkYXRhLCBbXCJjb25maWdcIiwgXCJMYWJlbHNcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFiZWxzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS4kZ2l0Q29tbWl0ID0gbGFiZWxzW1wiaW8ub3BlbnNoaWZ0LmJ1aWxkLmNvbW1pdC5pZFwiXSB8fCBpdGVtLiRnaXRDb21taXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS4kZ2l0Q29tbWl0QXV0aG9yID0gbGFiZWxzW1wiaW8ub3BlbnNoaWZ0LmJ1aWxkLmNvbW1pdC5hdXRob3JcIl0gfHwgaXRlbS4kZ2l0Q29tbWl0QXV0aG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uJGdpdENvbW1pdERhdGUgPSBsYWJlbHNbXCJpby5vcGVuc2hpZnQuYnVpbGQuY29tbWl0LmRhdGVcIl0gfHwgaXRlbS4kZ2l0Q29tbWl0RGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLiRnaXRDb21taXRNZXNzYWdlID0gbGFiZWxzW1wiaW8ub3BlbnNoaWZ0LmJ1aWxkLmNvbW1pdC5tZXNzYWdlXCJdIHx8IGl0ZW0uJGdpdENvbW1pdE1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS4kZ2l0QnJhbmNoID0gbGFiZWxzW1wiaW8ub3BlbnNoaWZ0LmJ1aWxkLmNvbW1pdC5yZWZcIl0gfHwgaXRlbS4kZ2l0QnJhbmNoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpdGVtLiRnaXRVcmwgJiYgaXRlbS4kZ2l0Q29tbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLiRnaXRVcmwgPSBEZXZlbG9wZXIucHJvamVjdFdvcmtzcGFjZUxpbmsobnMsIHByb2plY3ROYW1lLCBcIndpa2kvY29tbWl0RGV0YWlsLy8vXCIgKyBpdGVtLiRnaXRDb21taXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgICAgICAgdmFyIHNlbGVjdG9yVGV4dCA9IEt1YmVybmV0ZXMubGFiZWxzVG9TdHJpbmcoc2VsZWN0b3IsIFwiLFwiKTtcbiAgICAgICAgICAgIHZhciBwb2RMaW5rVXJsID0gVXJsSGVscGVycy5qb2luKHByb2plY3RMaW5rKHByb2plY3ROYW1lKSwgXCJuYW1lc3BhY2VcIiwgbnMsIFwicG9kc1wiKTtcbiAgICAgICAgICAgIGl0ZW0ucG9kcyA9IFtdO1xuICAgICAgICAgICAgaXRlbS4kcG9kQ291bnRlcnMgPSBLdWJlcm5ldGVzLmNyZWF0ZVBvZENvdW50ZXJzKHNlbGVjdG9yLCBzdGF0dXMucG9kcywgaXRlbS5wb2RzLCBzZWxlY3RvclRleHQsIHBvZExpbmtVcmwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIGxldHMgY2hlY2sgZm9yIGEgcHJvamVjdCBuYW1lIGlmIHdlIGhhdmUgbG90cyBvZiBSQ3Mgd2l0aCBubyBwb2RzLCBsZXRzIHJlbW92ZSB0aGVtIVxuICAgICAgYW5ndWxhci5mb3JFYWNoKHByb2plY3RJbmZvcywgKHByb2plY3QsIHByb2plY3ROYW1lKSA9PiB7XG4gICAgICAgIHZhciByY3NOb1BvZHMgPSBbXTtcbiAgICAgICAgdmFyIHJjc1dpdGhQb2RzID0gW107XG4gICAgICAgIGFuZ3VsYXIuZm9yRWFjaChwcm9qZWN0LnZlcnNpb25zLCAodmVyc2lvbkluZm8pID0+IHtcbiAgICAgICAgICB2YXIgcmNzID0gdmVyc2lvbkluZm8ucmVwbGljYXRpb25Db250cm9sbGVycztcbiAgICAgICAgICBhbmd1bGFyLmZvckVhY2gocmNzLCAoaXRlbSwgbmFtZSkgPT4ge1xuICAgICAgICAgICAgdmFyIGNvdW50ID0gS3ViZXJuZXRlcy5wb2RDb3VudGVyVG90YWwoaXRlbS4kcG9kQ291bnRlcnMpO1xuICAgICAgICAgICAgaWYgKGNvdW50KSB7XG4gICAgICAgICAgICAgIHJjc1dpdGhQb2RzLnB1c2gobmFtZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByY3NOb1BvZHMucHVzaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHJjc1tuYW1lXTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAocmNzV2l0aFBvZHMubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gbGV0cyByZW1vdmUgYWxsIHRoZSBlbXB0eSBSQ3NcbiAgICAgICAgICBhbmd1bGFyLmZvckVhY2gocmNzTm9Qb2RzLCAoZm4pID0+IHtcbiAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoaGFzT2JqZWN0Q2hhbmdlZChwcm9qZWN0SW5mb3MsIGNhY2hlKSkge1xuICAgICAgICBsb2cuZGVidWcoXCJwcm9qZWN0IHZlcnNpb25zIGhhcyBjaGFuZ2VkIVwiKTtcbiAgICAgICAgYW5zd2VyW25zXSA9IHByb2plY3RJbmZvcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBLdWJlcm5ldGVzLndhdGNoKCRzY29wZSwgJGVsZW1lbnQsIFwicmVwbGljYXRpb25jb250cm9sbGVyc1wiLCBucywgKGRhdGEpID0+IHtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIHN0YXR1cy5yY3MgPSBkYXRhO1xuICAgICAgICB1cGRhdGVNb2RlbCgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIEt1YmVybmV0ZXMud2F0Y2goJHNjb3BlLCAkZWxlbWVudCwgXCJzZXJ2aWNlc1wiLCBucywgKGRhdGEpID0+IHtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIHN0YXR1cy5zZXJ2aWNlcyA9IGRhdGE7XG4gICAgICAgIHVwZGF0ZU1vZGVsKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgS3ViZXJuZXRlcy53YXRjaCgkc2NvcGUsICRlbGVtZW50LCBcInJvdXRlc1wiLCBucywgKGRhdGEpID0+IHtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIHN0YXR1cy5yb3V0ZXMgPSBkYXRhO1xuICAgICAgICB1cGRhdGVNb2RlbCgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIEt1YmVybmV0ZXMud2F0Y2goJHNjb3BlLCAkZWxlbWVudCwgXCJwb2RzXCIsIG5zLCAoZGF0YSkgPT4ge1xuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgc3RhdHVzLnBvZHMgPSBkYXRhO1xuICAgICAgICB1cGRhdGVNb2RlbCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cblxufSIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbm1vZHVsZSBEZXZlbG9wZXIge1xuXG4vKlxuICBmdW5jdGlvbiBob21lQnJlYWRjcnVtYigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaHJlZjogXCIvaG9tZVwiLFxuICAgICAgbGFiZWw6IFwiSG9tZVwiLFxuICAgICAgdGl0bGU6IFwiR28gdG8gdGhlIGhvbWUgcGFnZVwiXG4gICAgfVxuICB9XG4qL1xuICBmdW5jdGlvbiBkZXZlbG9wQnJlYWRjcnVtYigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiksXG4gICAgICBsYWJlbDogXCJEZXZlbG9wXCIsXG4gICAgICB0aXRsZTogXCJWaWV3IGFsbCB0aGUgYXBwcyBmb3IgYSBwcm9qZWN0XCJcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIG9wZXJhdGVCcmVhZGNydW1iKCkge1xuICAgIHJldHVybiB7XG4gICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvbmFtZXNwYWNlc1wiKSxcbiAgICAgIGxhYmVsOiBcIk1hbmFnZVwiLFxuICAgICAgdGl0bGU6IFwiTWFuYWdlIHRoZSBwcm9qZWN0cyBhbmQgcmVzb3VyY2VzIGluc2lkZSB0aGVtXCJcbiAgICB9O1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIHdvcmtzcGFjZUxpbmsoKSB7XG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKSk7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gcHJvamVjdExpbmsocHJvamVjdElkKSB7XG4gICAgdmFyIGxpbmsgPSB3b3Jrc3BhY2VMaW5rKCk7XG4gICAgaWYgKHByb2plY3RJZCkge1xuICAgICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihsaW5rLCBcIi9wcm9qZWN0c1wiLCBwcm9qZWN0SWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbGluaztcbiAgICB9XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlV29ya3NwYWNlc0JyZWFkY3J1bWJzKGRldmVsb3BQZXJzcGVjdGl2ZSkge1xuLypcbiAgICBpZiAoZGV2ZWxvcFBlcnNwZWN0aXZlKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICAvL2hvbWVCcmVhZGNydW1iKCksXG4gICAgICAgIGRldmVsb3BCcmVhZGNydW1iKClcbiAgICAgIF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIC8vaG9tZUJyZWFkY3J1bWIoKSxcbiAgICAgICAgb3BlcmF0ZUJyZWFkY3J1bWIoKVxuICAgICAgXTtcbiAgICB9XG4qL1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdvcmtzcGFjZXNTdWJOYXZCYXJzKGRldmVsb3BQZXJzcGVjdGl2ZSkge1xuICAgICAgcmV0dXJuIGFjdGl2YXRlQ3VycmVudChbXG4gICAgICAgIGRldmVsb3BCcmVhZGNydW1iKCksXG4gICAgICAgIG9wZXJhdGVCcmVhZGNydW1iKClcbiAgICAgIF0pO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdvcmtzcGFjZUJyZWFkY3J1bWJzKGNoaWxkcmVuID0gbnVsbCwgd29ya3NwYWNlTmFtZSA9IG51bGwpIHtcbiAgICB2YXIgYW5zd2VyID0gW1xuICAgICAgLy9ob21lQnJlYWRjcnVtYigpLFxuICAgICAgZGV2ZWxvcEJyZWFkY3J1bWIoKVxuICAgIF07XG4gICAgaWYgKCF3b3Jrc3BhY2VOYW1lKSB7XG4gICAgICB3b3Jrc3BhY2VOYW1lID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xuICAgIH1cbiAgICBpZiAod29ya3NwYWNlTmFtZSkge1xuICAgICAgYW5zd2VyLnB1c2goXG4gICAgICAgIHtcbiAgICAgICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlcy9cIiwgd29ya3NwYWNlTmFtZSksXG4gICAgICAgICAgbGFiZWw6IHdvcmtzcGFjZU5hbWUsXG4gICAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgcHJvamVjdDogXCIgKyB3b3Jrc3BhY2VOYW1lXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICByZXR1cm4gcHJvY2Vzc0NoaWxkcmVuKGFuc3dlciwgY2hpbGRyZW4pO1xuICAgIH1cbiAgICByZXR1cm4gYW5zd2VyO1xuICB9XG5cblxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlRW52aXJvbm1lbnRCcmVhZGNydW1icygkc2NvcGUsICRsb2NhdGlvbiwgJHJvdXRlUGFyYW1zKSB7XG4gICAgdmFyIG5zID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xuICAgIHZhciBuYW1lc3BhY2VzTGluayA9IFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi9rdWJlcm5ldGVzL25hbWVzcGFjZVwiKTtcbiAgICB2YXIgd29ya3NwYWNlTmFtZSA9ICRyb3V0ZVBhcmFtcy53b3Jrc3BhY2U7XG4gICAgdmFyIHByb2plY3QgPSAkcm91dGVQYXJhbXMucHJvamVjdDtcbiAgICBpZiAod29ya3NwYWNlTmFtZSAmJiBwcm9qZWN0KSB7XG4gICAgICB2YXIgcHJvamVjdExpbmsgPSBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIHByb2plY3QpO1xuICAgICAgJHNjb3BlLiRwcm9qZWN0TGluayA9IHByb2plY3RMaW5rO1xuICAgICAgJHNjb3BlLiRwcm9qZWN0TmFtZXNwYWNlTGluayA9IFVybEhlbHBlcnMuam9pbihwcm9qZWN0TGluaywgXCJuYW1lc3BhY2VcIiwgbnMpO1xuICAgICAgbmFtZXNwYWNlc0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4ocHJvamVjdExpbmssIFwibmFtZXNwYWNlXCIpO1xuICAgICAgLy8gVE9ETyB1c2UgdGhlIGxvZ2ljYWwgbmFtZT9cbiAgICAgIHZhciBlbnZOYW1lID0gbnM7XG4gICAgICB2YXIgYnVpbGRDb25maWcgPSBudWxsO1xuICAgICAgaWYgKCRzY29wZS5tb2RlbCkge1xuICAgICAgICBidWlsZENvbmZpZyA9ICRzY29wZS5tb2RlbC5nZXRQcm9qZWN0KHByb2plY3QsIHdvcmtzcGFjZU5hbWUpO1xuICAgICAgICBpZiAoYnVpbGRDb25maWcpIHtcbiAgICAgICAgICAvLyBsZXRzIGZpbmQgdGhlIGxhYmVsIGZvciB0aGUgbmFtZXNwYWNlXG4gICAgICAgICAgdmFyIGVudiA9IF8uZmluZChidWlsZENvbmZpZy5lbnZpcm9ubWVudHMsIHsgbmFtZXNwYWNlOiBuc30pO1xuICAgICAgICAgIGlmIChlbnYpIHtcbiAgICAgICAgICAgIGVudk5hbWUgPSBlbnZbJ2xhYmVsJ10gfHwgZW52TmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbG9nLmluZm8oXCJlbnYgZm91bmQ6IFwiICsgZW52ICsgXCIgZm9yIG5hbWVwcGFjZSBcIiArIG5zICsgXCIgb24gYnVpbGRDb25maWc6IFwiICsgYnVpbGRDb25maWcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgY2hpbGRyZW4gPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKHByb2plY3RMaW5rLCBcImVudmlyb25tZW50c1wiKSxcbiAgICAgICAgICAgIGxhYmVsOiBcIkVudmlyb25tZW50c1wiLFxuICAgICAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgZW52aXJvbm1lbnRzIGZvciB0aGlzIHByb2plY3RcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKG5hbWVzcGFjZXNMaW5rLCBucywgXCJhcHBzXCIpLFxuICAgICAgICAgICAgbGFiZWw6IGVudk5hbWUsXG4gICAgICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBydW50aW1lIG9mIHRoZSB3b3Jrc3BhY2U6IFwiICsgbnNcbiAgICAgICAgICB9XG4gICAgICAgICAgXTtcbiAgICAgIHJldHVybiBjcmVhdGVQcm9qZWN0QnJlYWRjcnVtYnMocHJvamVjdCwgY2hpbGRyZW4sIHdvcmtzcGFjZU5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXdvcmtzcGFjZU5hbWUpIHtcbiAgICAgICAgd29ya3NwYWNlTmFtZSA9IEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY3RpdmF0ZUN1cnJlbnQoW1xuICAgICAgICAvL2hvbWVCcmVhZGNydW1iKCksXG4gICAgICAgIG9wZXJhdGVCcmVhZGNydW1iKCksXG4gICAgICAgIHtcbiAgICAgICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4obmFtZXNwYWNlc0xpbmssIG5zLCBcImFwcHNcIiksXG4gICAgICAgICAgbGFiZWw6IHdvcmtzcGFjZU5hbWUsXG4gICAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgcnVudGltZSBvZiB0aGUgd29ya3NwYWNlOiBcIiArIG5zXG4gICAgICAgIH1cbiAgICAgIF0pO1xuICAgIH1cbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm9qZWN0QnJlYWRjcnVtYnMocHJvamVjdE5hbWUgPSBudWxsLCBjaGlsZHJlbiA9IG51bGwsIHdvcmtzcGFjZU5hbWUgPSBudWxsKSB7XG4gICAgaWYgKCF3b3Jrc3BhY2VOYW1lKSB7XG4gICAgICB3b3Jrc3BhY2VOYW1lID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xuICAgIH1cbiAgICB2YXIgYW5zd2VyID0gY3JlYXRlV29ya3NwYWNlQnJlYWRjcnVtYnMobnVsbCwgd29ya3NwYWNlTmFtZSk7XG4gICAgaWYgKHdvcmtzcGFjZU5hbWUpIHtcbiAgICAgIGlmIChwcm9qZWN0TmFtZSkge1xuICAgICAgICBhbnN3ZXIucHVzaChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIpLFxuICAgICAgICAgICAgbGFiZWw6IFwiQXBwc1wiLFxuICAgICAgICAgICAgdGl0bGU6IFwiVmlldyBhbGwgdGhlIGFwcHMgaW4gdGhpcyBwcm9qZWN0XCJcbiAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgYW5zd2VyLnB1c2goXG4gICAgICAgICAge1xuICAgICAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJwcm9qZWN0c1wiLCBwcm9qZWN0TmFtZSksXG4gICAgICAgICAgICBsYWJlbDogcHJvamVjdE5hbWUsXG4gICAgICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBwcm9qZWN0OiBcIiArIHByb2plY3ROYW1lXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHByb2Nlc3NDaGlsZHJlbihhbnN3ZXIsIGNoaWxkcmVuKTtcbiAgICB9XG4gICAgcmV0dXJuIGFuc3dlcjtcbiAgfVxuXG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByb2plY3RTZXR0aW5nc0JyZWFkY3J1bWJzKHByb2plY3ROYW1lLCB3b3Jrc3BhY2VOYW1lID0gbnVsbCkge1xuICAgIHZhciBjaGlsZHJlbiA9IFt7XG4gICAgICBsYWJlbDogXCJTZXR0aW5nc1wiLFxuICAgICAgdGl0bGU6IFwiVmlldyB0aGUgc2V0dGluZ3Mgb2YgdGhpcyBhcHBcIlxuICAgIH1dO1xuICAgIGlmICghcHJvamVjdE5hbWUpIHtcbiAgICAgIHZhciBjaGlsZHJlbiA9IFt7XG4gICAgICAgIGxhYmVsOiBcIk5ldyBBcHBcIixcbiAgICAgICAgdGl0bGU6IFwiTGV0cyBtYWtlIGEgbmV3IGFwcFwiXG4gICAgICB9XTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZVByb2plY3RCcmVhZGNydW1icyhwcm9qZWN0TmFtZSwgY2hpbGRyZW4sIHdvcmtzcGFjZU5hbWUpO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdvcmtzcGFjZVN1Yk5hdkJhcnMoKSB7XG4gICAgdmFyIHdvcmtzcGFjZU5hbWUgPSBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XG4gICAgcmV0dXJuIGFjdGl2YXRlQ3VycmVudChbXG4gICAgICB7XG4gICAgICAgIGhyZWY6IFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUpLFxuICAgICAgICBsYWJlbDogXCJBcHBzXCIsXG4gICAgICAgIGNsYXNzOiBcImZhIGZhLXJvY2tldFwiLFxuICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBhcHBzIGluIHRoaXMgcHJvamVjdFwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpc1ZhbGlkOiAoKSA9PiBqZW5raW5zTGluaygpLFxuICAgICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcImplbmtpbnNKb2JcIiksXG4gICAgICAgIGxhYmVsOiBcIkJ1aWxkc1wiLFxuICAgICAgICBjbGFzczogXCJmYSBmYS1jb2RlXCIsXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIGJ1aWxkcyBpbiB0aGlzIHByb2plY3RcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL2t1YmVybmV0ZXMvbmFtZXNwYWNlXCIsIHdvcmtzcGFjZU5hbWUsIFwiYXBwc1wiKSxcbiAgICAgICAgbGFiZWw6IFwiUnVudGltZVwiLFxuICAgICAgICBjbGFzczogXCJmYSBmYS1nZWFyc1wiLFxuICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBydW50aW1lIHJlc291cmNlcyBpbiB0aGlzIHByb2plY3RcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJkZXRhaWxcIiksXG4gICAgICAgIGxhYmVsOiBcIkRldGFpbHNcIixcbiAgICAgICAgY2xhc3M6IFwiZmEgZmEtZ2VhclwiLFxuICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBwcm9qZWN0IGRldGFpbHNcIlxuICAgICAgfVxuICAgIF0pO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQnVpbGRzTGluayh3b3Jrc3BhY2VOYW1lLCBwcm9qZWN0TmFtZSwgamVua2luc0pvYklkKSB7XG4gICAgd29ya3NwYWNlTmFtZSA9IHdvcmtzcGFjZU5hbWUgfHwgS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIHByb2plY3ROYW1lLCBcImplbmtpbnNKb2JcIiwgamVua2luc0pvYklkKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm9qZWN0U3ViTmF2QmFycyhwcm9qZWN0TmFtZSwgamVua2luc0pvYklkID0gbnVsbCwgJHNjb3BlID0gbnVsbCkge1xuICAgIHZhciB3b3Jrc3BhY2VOYW1lID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xuICAgIHZhciBwcm9qZWN0TGluayA9IFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiwgcHJvamVjdE5hbWUpO1xuICAgIHZhciBidWlsZHNMaW5rID0gVXJsSGVscGVycy5qb2luKHByb2plY3RMaW5rLCBcImJ1aWxkc1wiKTtcbiAgICBpZiAoIWplbmtpbnNKb2JJZCkge1xuICAgICAgamVua2luc0pvYklkID0gcHJvamVjdE5hbWU7XG4gICAgfVxuICAgIHZhciBqZW5raW5zQnVpbGRMaW5rID0gbnVsbDtcbiAgICB2YXIgcGlwZWxpbmVzTGluayA9IG51bGw7XG4gICAgaWYgKHByb2plY3ROYW1lICYmIGplbmtpbnNKb2JJZCkge1xuICAgICAgamVua2luc0J1aWxkTGluayA9IGNyZWF0ZUJ1aWxkc0xpbmsod29ya3NwYWNlTmFtZSwgcHJvamVjdE5hbWUsIGplbmtpbnNKb2JJZCk7XG4gICAgICBwaXBlbGluZXNMaW5rID0gVXJsSGVscGVycy5qb2luKGplbmtpbnNCdWlsZExpbmssIFwicGlwZWxpbmVzXCIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzSmVua2luc0J1aWxkKCkge1xuICAgICAgdmFyIGFuc3dlciA9IGplbmtpbnNMaW5rKCkgJiYgamVua2luc0J1aWxkTGluaztcbiAgICAgIGlmIChhbnN3ZXIgJiYgJHNjb3BlKSB7XG4gICAgICAgIHZhciBlbnRpdHkgPSBEZXZlbG9wZXIucHJvamVjdEZvclNjb3BlKCRzY29wZSk7XG4gICAgICAgIGlmIChlbnRpdHkpIHtcbiAgICAgICAgICByZXR1cm4gYW5zd2VyICYmIGVudGl0eS4kamVua2luc0pvYjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFuc3dlcjtcbiAgICB9XG5cbiAgICB2YXIgYW5zd2VyID0gW1xuICAgICAge1xuICAgICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lKSxcbiAgICAgICAgbGFiZWw6IFwiQWxsIEFwcHNcIixcbiAgICAgICAgY2xhc3M6ICdmYSBmYS1hbmdsZS1kb3VibGUtbGVmdCcsXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIGFwcHMgaW4gdGhpcyBwcm9qZWN0XCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRlbXBsYXRlOiBgPGRpdiBuZy1pbmNsdWRlPVwiJ3BsdWdpbnMvZGV2ZWxvcGVyL2h0bWwvcHJvamVjdFNlbGVjdG9yLmh0bWwnXCI+PC9kaXY+YFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJwcm9qZWN0c1wiLCBwcm9qZWN0TmFtZSwgXCJlbnZpcm9ubWVudHNcIiksXG4gICAgICAgIGlzQWN0aXZlOiAoc3ViVGFiLCBwYXRoKSA9PiB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhcInN1YlRhYjogXCIsIHN1YlRhYiwgXCIgcGF0aDogXCIsIHBhdGgpO1xuICAgICAgICAgIGlmIChwYXRoID09PSBzdWJUYWIuaHJlZikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciByb290UGF0aCA9IHN1YlRhYi5ocmVmLnJlcGxhY2UoL1xcL2Vudmlyb25tZW50cy8sICcnKTtcbiAgICAgICAgICBpZiAocGF0aCA9PT0gcm9vdFBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICAgIC8vaHJlZjogVXJsSGVscGVycy5qb2luKFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJwcm9qZWN0c1wiLCBwcm9qZWN0TmFtZSksXG4gICAgICAgIGxhYmVsOiBcIkRhc2hib2FyZFwiLFxuICAgICAgICBjbGFzczogXCJmYSBmYS10YWNob21ldGVyXCIsXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIGFwcCBkYXNoYm9hcmQgZm9yIHRoZSBhY3Rpdml0eSwgZW52aXJvbm1lbnRzIGFuZCBwaXBlbGluZXNcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaXNWYWxpZDogKCkgPT4gaXNKZW5raW5zQnVpbGQoKSAmJiBwaXBlbGluZXNMaW5rLFxuICAgICAgICBpZDogXCJwaXBlbGluZXNcIixcbiAgICAgICAgaHJlZjogcGlwZWxpbmVzTGluayxcbiAgICAgICAgbGFiZWw6IFwiUGlwZWxpbmVzXCIsXG4gICAgICAgIGNsYXNzOiBcImZhIGZhLWVsbGlwc2lzLWhcIixcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgcGlwZWxpbmUgYnVpbGRzIGZvciB0aGlzIGFwcFwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpc1ZhbGlkOiAoKSA9PiAhaXNKZW5raW5zQnVpbGQoKSxcbiAgICAgICAgaHJlZjogYnVpbGRzTGluayxcbiAgICAgICAgbGFiZWw6IFwiQnVpbGRzXCIsXG4gICAgICAgIGNsYXNzOiBcImZhIGZhLWJhcnNcIixcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgYnVpbGRzIGZvciB0aGlzIGFwcFwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpc1ZhbGlkOiAoKSA9PiBpc0plbmtpbnNCdWlsZCgpLFxuICAgICAgICBpZDogXCJidWlsZHNcIixcbiAgICAgICAgaHJlZjogamVua2luc0J1aWxkTGluayxcbiAgICAgICAgbGFiZWw6IFwiQnVpbGRzXCIsXG4gICAgICAgIGNsYXNzOiBcImZhIGZhLWJhcnNcIixcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgSmVua2lucyBidWlsZHMgZm9yIHRoaXMgYXBwXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlzVmFsaWQ6ICgpID0+IGlzSmVua2luc0J1aWxkKCksXG4gICAgICAgIGhyZWY6IFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiwgcHJvamVjdE5hbWUsIFwiamVua2luc0pvYlwiLCBqZW5raW5zSm9iSWQsIFwibWV0cmljc1wiKSxcbiAgICAgICAgbGFiZWw6IFwiTWV0cmljc1wiLFxuICAgICAgICBjbGFzczogXCJmYSBmYS1iYXItY2hhcnRcIixcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgbWV0cmljcyBmb3IgdGhpcyBwcm9qZWN0XCJcbiAgICAgIH0sXG4vKlxuICAgICAge1xuICAgICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4oXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIHByb2plY3ROYW1lLCBcInRvb2xzXCIpLFxuICAgICAgICBsYWJlbDogXCJUb29sc1wiLFxuICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSB0b29scyBmb3IgdGhpcyBwcm9qZWN0XCJcbiAgICAgIH0sXG4qL1xuICAgICAge1xuICAgICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIHByb2plY3ROYW1lLCBcImJ1aWxkQ29uZmlnRWRpdFwiKSxcbiAgICAgICAgbGFiZWw6IFwiU2V0dGluZ3NcIixcbiAgICAgICAgY2xhc3M6IFwiZmEgZmEtY29nXCIsXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIGFwcCBjb25maWd1cmF0aW9uXCIsXG4gICAgICAgIGlzQWN0aXZlOiAoc3ViVGFiLCBwYXRoKSA9PiB7XG4gICAgICAgICAgaWYgKF8uZW5kc1dpdGgocGF0aCwgJy9idWlsZENvbmZpZ0VkaXQnKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChfLmVuZHNXaXRoKHBhdGgsICcvZm9yZ2Uvc2VjcmV0cycpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKF8uZW5kc1dpdGgocGF0aCwgJy9mb3JnZS9jb21tYW5kL2Rldm9wcy1lZGl0JykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdO1xuXG4gICAgdmFyIGNvbnRleHQgPSB7XG4gICAgICB3b3Jrc3BhY2VOYW1lOiB3b3Jrc3BhY2VOYW1lLFxuICAgICAgcHJvamVjdE5hbWU6IHByb2plY3ROYW1lLFxuICAgICAgcHJvamVjdExpbms6IHByb2plY3RMaW5rLFxuICAgICAgamVua2luc0pvYklkOiBqZW5raW5zSm9iSWQsXG4gICAgICAkc2NvcGU6ICRzY29wZVxuICAgIH07XG4gICAgYW5ndWxhci5mb3JFYWNoKGN1c3RvbVByb2plY3RTdWJUYWJGYWN0b3JpZXMsIChmbikgPT4ge1xuICAgICAgaWYgKGFuZ3VsYXIuaXNGdW5jdGlvbihmbikpIHtcbiAgICAgICAgdmFyIHN1YnRhYiA9IGZuKGNvbnRleHQpO1xuICAgICAgICBpZiAoc3VidGFiKSB7XG4gICAgICAgICAgaWYgKGFuZ3VsYXIuaXNBcnJheShzdWJ0YWIpKSB7XG4gICAgICAgICAgICBhbmd1bGFyLmZvckVhY2goc3VidGFiLCAodCkgPT4ge1xuICAgICAgICAgICAgICBhbnN3ZXIucHVzaCh0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhbnN3ZXIucHVzaChzdWJ0YWIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFjdGl2YXRlQ3VycmVudChhbnN3ZXIpO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByb2plY3RTZXR0aW5nc1N1Yk5hdkJhcnMocHJvamVjdE5hbWUsIGplbmtpbnNKb2JJZCA9IG51bGwpIHtcbiAgICBpZiAoIXByb2plY3ROYW1lKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHZhciB3b3Jrc3BhY2VOYW1lID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xuICAgIHZhciBwcm9qZWN0TGluayA9IFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiwgcHJvamVjdE5hbWUpO1xuICAgIGlmICghamVua2luc0pvYklkKSB7XG4gICAgICBqZW5raW5zSm9iSWQgPSBwcm9qZWN0TmFtZTtcbiAgICB9XG4gICAgdmFyIGFuc3dlciA9IFtcbiAgICAgIHtcbiAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJwcm9qZWN0c1wiLCBwcm9qZWN0TmFtZSwgXCJidWlsZENvbmZpZ0VkaXRcIiksXG4gICAgICAgIGxhYmVsOiBcIkNvcmVcIixcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgY29yZSBidWlsZCBjb25maWd1cmF0aW9uXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGhyZWY6IHByb2plY3RTZWNyZXRzTGluayh3b3Jrc3BhY2VOYW1lLCBwcm9qZWN0TmFtZSksXG4gICAgICAgIGxhYmVsOiBcIlNlY3JldHNcIixcbiAgICAgICAgdGl0bGU6IFwiVmlldyBvciBjaGFuZ2UgdGhlIHNlY3JldHMgdXNlZCB0byBlZGl0IHNvdXJjZSBjb2RlIGluIHRoZSBzb3VyY2UgY29udHJvbCBzeXN0ZW1cIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaHJlZjogZWRpdFBpcGVsaW5lTGluayh3b3Jrc3BhY2VOYW1lLCBwcm9qZWN0TmFtZSksXG4gICAgICAgIGxhYmVsOiBcIlBpcGVsaW5lXCIsXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIERldk9wcyBhbmQgcGlwZWxpbmUgY29uZmlndXJhdGlvblwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpc1ZhbGlkOiAoKSA9PiBmb3JnZVByb2plY3RIYXNCdWlsZGVyKFwibWF2ZW5cIiksXG4gICAgICAgIGhyZWY6IGVkaXRNYXZlbkJ1aWxkTGluayh3b3Jrc3BhY2VOYW1lLCBwcm9qZWN0TmFtZSksXG4gICAgICAgIGxhYmVsOiBcIk1hdmVuXCIsXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIE1hdmVuIGJ1aWxkIGNvbmZpZ3VyYXRpb25cIlxuICAgICAgfVxuICAgIF07XG4gICAgcmV0dXJuIGFjdGl2YXRlQ3VycmVudChhbnN3ZXIpO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGZvcmdlUHJvamVjdEhhc0J1aWxkZXIobmFtZSkge1xuICAgIHZhciBmb3JnZVByb2plY3QgPSBLdWJlcm5ldGVzLmluamVjdDxhbnk+KFwiRm9yZ2VQcm9qZWN0XCIpO1xuICAgIGlmIChmb3JnZVByb2plY3QpIHtcbiAgICAgIHJldHVybiBmb3JnZVByb2plY3QuaGFzQnVpbGRlcihuYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGZvcmdlUHJvamVjdEhhc1BlcnNwZWN0aXZlKG5hbWUpIHtcbiAgICB2YXIgZm9yZ2VQcm9qZWN0ID0gS3ViZXJuZXRlcy5pbmplY3Q8YW55PihcIkZvcmdlUHJvamVjdFwiKTtcbiAgICBpZiAoZm9yZ2VQcm9qZWN0KSB7XG4gICAgICByZXR1cm4gZm9yZ2VQcm9qZWN0Lmhhc1BlcnNwZWN0aXZlKG5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZWRpdFBpcGVsaW5lTGlua1Njb3BlKCRzY29wZSkge1xuICAgIHJldHVybiBlZGl0UGlwZWxpbmVMaW5rKCRzY29wZS5uYW1lc3BhY2UsICRzY29wZS5wcm9qZWN0SWQgfHwgJHNjb3BlLnByb2plY3ROYW1lIHx8ICRzY29wZS5wcm9qZWN0KTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm9qZWN0TGluayh3b3Jrc3BhY2VOYW1lID0gbnVsbCkge1xuICAgIGlmICghd29ya3NwYWNlTmFtZSkge1xuICAgICAgd29ya3NwYWNlTmFtZSA9IEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwiL2ZvcmdlL2NyZWF0ZVByb2plY3RcIik7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZWRpdFBpcGVsaW5lTGluayh3b3Jrc3BhY2VOYW1lLCBwcm9qZWN0TmFtZSkge1xuICAgIHJldHVybiBwcm9qZWN0V29ya3NwYWNlTGluayh3b3Jrc3BhY2VOYW1lLCBwcm9qZWN0TmFtZSwgXCJmb3JnZS9jb21tYW5kL2Rldm9wcy1lZGl0XCIpO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGVkaXRNYXZlbkJ1aWxkTGluayh3b3Jrc3BhY2VOYW1lLCBwcm9qZWN0TmFtZSkge1xuICAgIHJldHVybiBwcm9qZWN0V29ya3NwYWNlTGluayh3b3Jrc3BhY2VOYW1lLCBwcm9qZWN0TmFtZSwgXCJmb3JnZS9jb21tYW5kL2ZhYnJpYzgtc2V0dXBcIik7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gcHJvamVjdFNlY3JldHNMaW5rKHdvcmtzcGFjZU5hbWUsIHByb2plY3ROYW1lKSB7XG4gICAgcmV0dXJuIHByb2plY3RXb3Jrc3BhY2VMaW5rKHdvcmtzcGFjZU5hbWUsIHByb2plY3ROYW1lLCBcImZvcmdlL3NlY3JldHNcIiwgZmFsc2UpO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIHNlY3JldHNOYW1lc3BhY2VMaW5rKHdvcmtzcGFjZU5hbWUsIHByb2plY3ROYW1lLCBzZWNyZXRzTmFtZXNwYWNlKSB7XG4gICAgdmFyIHByZWZpeCA9IHByb2plY3RXb3Jrc3BhY2VMaW5rKHdvcmtzcGFjZU5hbWUsIHByb2plY3ROYW1lLCBcIlwiKSB8fCBcImt1YmVybmV0ZXNcIjtcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKHByZWZpeCwgXCJuYW1lc3BhY2VcIiwgc2VjcmV0c05hbWVzcGFjZSwgXCJzZWNyZXRzXCIpO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIHByb2plY3RXb3Jrc3BhY2VMaW5rKHdvcmtzcGFjZU5hbWUsIHByb2plY3ROYW1lLCBwYXRoLCBpZ25vcmVCbGFua1Byb2plY3QgPSB0cnVlKSB7XG4gICAgaWYgKGlnbm9yZUJsYW5rUHJvamVjdCAmJiAhcHJvamVjdE5hbWUpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgICBpZiAoIXdvcmtzcGFjZU5hbWUpIHtcbiAgICAgIHdvcmtzcGFjZU5hbWUgPSBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XG4gICAgfVxuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIHByb2plY3ROYW1lLCBwYXRoKTtcbiAgfVxuXG4gIGV4cG9ydCB2YXIgY3VzdG9tUHJvamVjdFN1YlRhYkZhY3RvcmllcyA9IFtdO1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVKZW5raW5zQnJlYWRjcnVtYnMocHJvamVjdE5hbWUsIGpvYklkLCBidWlsZElkKSB7XG4gICAgdmFyIHdvcmtzcGFjZU5hbWUgPSBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XG4gICAgdmFyIGNoaWxkcmVuID0gW1xuICAgICAge1xuICAgICAgICBpZDogXCJidWlsZHNcIixcbiAgICAgICAgaHJlZjogY3JlYXRlQnVpbGRzTGluayh3b3Jrc3BhY2VOYW1lLCBwcm9qZWN0TmFtZSwgam9iSWQpLFxuICAgICAgICBsYWJlbDogXCJCdWlsZHNcIixcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgYnVpbGRzIGZvciB0aGlzIGFwcFwiXG4gICAgICB9XG4gICAgXTtcbiAgICBpZiAoYnVpbGRJZCkge1xuICAgICAgY2hpbGRyZW4ucHVzaCh7XG4gICAgICAgIGlkOiBcIlwiLFxuICAgICAgICBocmVmOiBcIlwiLFxuICAgICAgICBsYWJlbDogXCIjXCIgKyBidWlsZElkLFxuICAgICAgICB0aXRsZTogXCJCdWlsZCAjXCIgKyBidWlsZElkXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZVByb2plY3RCcmVhZGNydW1icyhwcm9qZWN0TmFtZSwgY2hpbGRyZW4pO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUplbmtpbnNTdWJOYXZCYXJzKHByb2plY3ROYW1lLCBqZW5raW5zSm9iSWQsIGJ1aWxkSWQsIGV4dHJhT3B0aW9uOiBhbnkgPSBudWxsKSB7XG4gICAgdmFyIGFuc3dlciA9IGNyZWF0ZVByb2plY3RTdWJOYXZCYXJzKHByb2plY3ROYW1lLCBqZW5raW5zSm9iSWQpO1xuICAgIGlmIChleHRyYU9wdGlvbikge1xuICAgICAgZXh0cmFPcHRpb24uYWN0aXZlID0gdHJ1ZTtcbiAgICAgIGFuc3dlci5wdXNoKGV4dHJhT3B0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIGFuc3dlcjtcbiAgfVxuXG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVudmlyb25tZW50U3ViTmF2QmFycygkc2NvcGUsICRsb2NhdGlvbiwgJHJvdXRlUGFyYW1zKSB7XG4gICAgdmFyIG5zID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xuICAgIHZhciB3b3Jrc3BhY2VOYW1lID0gJHJvdXRlUGFyYW1zLndvcmtzcGFjZTtcbiAgICB2YXIgcHJvamVjdCA9ICRyb3V0ZVBhcmFtcy5wcm9qZWN0O1xuICAgIHZhciBwcm9qZWN0TGluayA9IFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi9rdWJlcm5ldGVzXCIpO1xuICAgIGlmICh3b3Jrc3BhY2VOYW1lICYmIHByb2plY3QpIHtcbiAgICAgIHByb2plY3RMaW5rID0gVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJwcm9qZWN0c1wiLCBwcm9qZWN0KTtcbiAgICB9XG4gICAgdmFyIG5hbWVzcGFjZXNMaW5rID0gVXJsSGVscGVycy5qb2luKHByb2plY3RMaW5rLCBcIm5hbWVzcGFjZVwiKTtcbiAgICByZXR1cm4gYWN0aXZhdGVDdXJyZW50KFtcbiAgICAgIHtcbiAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKHByb2plY3RMaW5rLCBcImVudmlyb25tZW50c1wiKSxcbiAgICAgICAgbGFiZWw6IFwiPDwgQmFjayBUbyBBcHBcIixcbiAgICAgICAgdGl0bGU6IFwiR28gYmFjayB0byB0aGUgRGFzaGJvYXJkIGZvciB0aGlzIEFwcFwiLFxuICAgICAgICBpc1ZhbGlkOiAoKSA9PiBwcm9qZWN0XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4obmFtZXNwYWNlc0xpbmssIG5zLCBcImFwcHNcIiksXG4gICAgICAgIGxhYmVsOiBcIk92ZXJ2aWV3XCIsXG4gICAgICAgIGNsYXNzOiBcImZhIGZhLWxpc3RcIixcbiAgICAgICAgdGl0bGU6IFwiT3ZlcnZpZXcgb2YgYWxsIHRoZSBhcHBzIGZvciB0aGlzIHByb2plY3RcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKG5hbWVzcGFjZXNMaW5rLCBucywgXCJzZXJ2aWNlc1wiKSxcbiAgICAgICAgbGFiZWw6IFwiU2VydmljZXNcIixcbiAgICAgICAgY2xhc3M6IFwiZmEgZmEtcGx1Z1wiLFxuICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBhcHBzIGZvciB0aGlzIHByb2plY3RcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKG5hbWVzcGFjZXNMaW5rLCBucywgXCJyZXBsaWNhdGlvbkNvbnRyb2xsZXJzXCIpLFxuICAgICAgICBsYWJlbDogXCJDb250cm9sbGVyc1wiLFxuICAgICAgICBjbGFzczogXCJmYSBmYS1jbG9uZVwiLFxuICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBSZXBsaWNhdGlvbiBDb250cm9sbGVycyBmb3IgdGhpcyBwcm9qZWN0XCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGhyZWY6IFVybEhlbHBlcnMuam9pbihuYW1lc3BhY2VzTGluaywgbnMsIFwicG9kc1wiKSxcbiAgICAgICAgbGFiZWw6IFwiUG9kc1wiLFxuICAgICAgICBjbGFzczogXCJmYSBmYS1wdXp6bGUtcGllY2VcIixcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgcG9kcyBmb3IgdGhpcyBwcm9qZWN0XCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGhyZWY6IFVybEhlbHBlcnMuam9pbihuYW1lc3BhY2VzTGluaywgbnMsIFwiZXZlbnRzXCIpLFxuICAgICAgICBsYWJlbDogXCJFdmVudHNcIixcbiAgICAgICAgY2xhc3M6IFwiZmEgZmEtbmV3c3BhcGVyLW9cIixcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgZXZlbnRzIGZvciB0aGlzIHByb2plY3RcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKG5hbWVzcGFjZXNMaW5rLCBucywgXCJzZWNyZXRzXCIpLFxuICAgICAgICBsYWJlbDogXCJTZWNyZXRzXCIsXG4gICAgICAgIGNsYXNzOiBcImZhIGZhLWtleVwiLFxuICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBzZWNyZXRzIGZvciB0aGlzIHByb2plY3RcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL2t1YmVybmV0ZXMvaG9zdHNcIiksXG4gICAgICAgIGxhYmVsOiBcIk5vZGVzXCIsXG4gICAgICAgIGNsYXNzOiBcImZhIGZhLXNlcnZlclwiLFxuICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBub2RlcyBmb3IgdGhpcyBwcm9qZWN0XCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGhyZWY6IFVybEhlbHBlcnMuam9pbihuYW1lc3BhY2VzTGluaywgbnMsIFwib3ZlcnZpZXdcIiksXG4gICAgICAgIGxhYmVsOiBcIkRpYWdyYW1cIixcbiAgICAgICAgY2xhc3M6IFwiZmEgZmEtc2l0ZW1hcFwiLFxuICAgICAgICB0aXRsZTogXCJWaWV3IGFsbCB0aGUgb2JqZWN0cyBpbiB0aGlzIHByb2plY3QgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcFwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4obmFtZXNwYWNlc0xpbmssIG5zLCBcImFuZ3J5UG9kc1wiKSxcbiAgICAgICAgbGFiZWw6IFwiQW5ncnkgUG9kc1wiLFxuICAgICAgICBjbGFzczogXCJmYSBmYS1nYW1lcGFkXCIsXG4gICAgICAgIHRpdGxlOiBcIlRyeSB0aGUgQW5ncnkgUG9kcyBnYW1lIVwiXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG5cblxuICBleHBvcnQgZnVuY3Rpb24gbmFtZXNwYWNlTGluaygkc2NvcGUsICRyb3V0ZVBhcmFtcywgcGF0aCA9IG51bGwpIHtcbiAgICB2YXIgbnMgPSBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XG4gICAgdmFyIHdvcmtzcGFjZU5hbWUgPSAkcm91dGVQYXJhbXMud29ya3NwYWNlO1xuICAgIHZhciBwcm9qZWN0ID0gJHJvdXRlUGFyYW1zLnByb2plY3Q7XG4gICAgdmFyIHByb2plY3RMaW5rID0gVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL2t1YmVybmV0ZXNcIik7XG4gICAgaWYgKHdvcmtzcGFjZU5hbWUgJiYgcHJvamVjdCkge1xuICAgICAgcHJvamVjdExpbmsgPSBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIHByb2plY3QpO1xuICAgIH1cbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKHByb2plY3RMaW5rLCBcIm5hbWVzcGFjZVwiLCBucywgcGF0aCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgVVJMIHF1ZXJ5IHN0cmluZyBpZiBpdHMgaW5zaWRlIHRoZSBnaXZlbiB0ZXh0XG4gICAqL1xuICBmdW5jdGlvbiB0cmltUXVlcnkodGV4dCkge1xuICAgIGlmICh0ZXh0KSB7XG4gICAgICB2YXIgaWR4ID0gdGV4dC5pbmRleE9mKFwiP1wiKTtcbiAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICByZXR1cm4gdGV4dC5zdWJzdHJpbmcoMCwgaWR4KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cblxuICBmdW5jdGlvbiBhY3RpdmF0ZUN1cnJlbnQobmF2QmFySXRlbXMpIHtcbiAgICBuYXZCYXJJdGVtcyA9IF8uY29tcGFjdChuYXZCYXJJdGVtcyk7XG4gICAgdmFyIGluamVjdG9yID0gSGF3dGlvQ29yZS5pbmplY3RvcjtcbiAgICB2YXIgJGxvY2F0aW9uID0gaW5qZWN0b3IgPyBpbmplY3Rvci5nZXQ8bmcuSUxvY2F0aW9uU2VydmljZT4oXCIkbG9jYXRpb25cIikgOiBudWxsO1xuICAgIGlmICgkbG9jYXRpb24pIHtcbiAgICAgIHZhciBwYXRoID0gdHJpbVF1ZXJ5KCRsb2NhdGlvbi5wYXRoKCkpO1xuICAgICAgdmFyIGZvdW5kID0gZmFsc2U7XG4gICAgICBmdW5jdGlvbiBtYWtlQWN0aXZlKGl0ZW0pIHtcbiAgICAgICAgaXRlbS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBhbmd1bGFyLmZvckVhY2gobmF2QmFySXRlbXMsIChpdGVtKSA9PiB7XG4gICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgaWYgKGFuZ3VsYXIuaXNGdW5jdGlvbihpdGVtLmlzQWN0aXZlKSkge1xuICAgICAgICAgICAgaWYgKCFmb3VuZCAmJiBpdGVtLmlzQWN0aXZlKGl0ZW0sIHBhdGgpKSB7XG4gICAgICAgICAgICAgIG1ha2VBY3RpdmUoaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBocmVmID0gaXRlbS5ocmVmO1xuICAgICAgICAgICAgdmFyIHRyaW1IcmVmID0gdHJpbVF1ZXJ5KGhyZWYpO1xuICAgICAgICAgICAgaWYgKCFmb3VuZCAmJiB0cmltSHJlZiAmJiB0cmltSHJlZiA9PT0gcGF0aCkge1xuICAgICAgICAgICAgICBtYWtlQWN0aXZlKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBuYXZCYXJJdGVtcztcbiAgfVxuXG4gIGZ1bmN0aW9uIHByb2Nlc3NDaGlsZHJlbihhbnN3ZXIsIGNoaWxkcmVuKSB7XG4gICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICBpZiAoYW5ndWxhci5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgICAgICBhbnN3ZXIgPSBhbnN3ZXIuY29uY2F0KGNoaWxkcmVuKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFuc3dlci5wdXNoKGNoaWxkcmVuKTtcbiAgICAgIH1cbiAgICB9XG4gICAgYWN0aXZhdGVDdXJyZW50KGFuc3dlcik7XG4gICAgcmV0dXJuIGFuc3dlcjtcbiAgfVxufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4va3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzSGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckVucmljaGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckhlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJOYXZpZ2F0aW9uLnRzXCIvPlxyXG5cclxubW9kdWxlIERldmVsb3BlciB7XHJcbiAgIC8qIGV4cG9ydCB2YXIgRGF0YU92ZXJWaWV3ID0gY29udHJvbGxlcihcIkRhdGFPdmVyVmlld1wiLFxyXG4gICAgICAgIFtcIiRzY29wZVwiLCAgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsICgkc2NvcGUsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCkgPT4ge1xyXG4gICAgICAgICAgICAkc2NvcGUudHJlZU9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBub2RlQ2hpbGRyZW46IFwiY2hpbGRyZW5cIixcclxuICAgICAgICAgICAgICAgIGRpclNlbGVjdGFibGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBpbmplY3RDbGFzc2VzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdWw6IFwiYTFcIixcclxuICAgICAgICAgICAgICAgICAgICBsaTogXCJhMlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGxpU2VsZWN0ZWQ6IFwiYTdcIixcclxuICAgICAgICAgICAgICAgICAgICBpRXhwYW5kZWQ6IFwiYTNcIixcclxuICAgICAgICAgICAgICAgICAgICBpQ29sbGFwc2VkOiBcImE0XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgaUxlYWY6IFwiYTVcIixcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogXCJhNlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsU2VsZWN0ZWQ6IFwiYThcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAkc2NvcGUuZGF0YUZvclRoZVRyZWUgPVxyXG4gICAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgICAgIHsgXCJuYW1lXCIgOiBcIkpvZVwiLCBcImFnZVwiIDogXCIyMVwiLCBcImNoaWxkcmVuXCIgOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgXCJuYW1lXCIgOiBcIlNtaXRoXCIsIFwiYWdlXCIgOiBcIjQyXCIsIFwiY2hpbGRyZW5cIiA6IFtdIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgXCJuYW1lXCIgOiBcIkdhcnlcIiwgXCJhZ2VcIiA6IFwiMjFcIiwgXCJjaGlsZHJlblwiIDogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBcIm5hbWVcIiA6IFwiSmVuaWZlclwiLCBcImFnZVwiIDogXCIyM1wiLCBcImNoaWxkcmVuXCIgOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBcIm5hbWVcIiA6IFwiRGFuaVwiLCBcImFnZVwiIDogXCIzMlwiLCBcImNoaWxkcmVuXCIgOiBbXSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgXCJuYW1lXCIgOiBcIk1heFwiLCBcImFnZVwiIDogXCIzNFwiLCBcImNoaWxkcmVuXCIgOiBbXSB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdfVxyXG4gICAgICAgICAgICAgICAgICAgIF19LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgXCJuYW1lXCIgOiBcIkFsYmVydFwiLCBcImFnZVwiIDogXCIzM1wiLCBcImNoaWxkcmVuXCIgOiBbXSB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgXCJuYW1lXCIgOiBcIlJvblwiLCBcImFnZVwiIDogXCIyOVwiLCBcImNoaWxkcmVuXCIgOiBbXSB9XHJcbiAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgIH1dKTsqL1xyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJIZWxwZXJzLnRzXCIvPlxuXG5tb2R1bGUgRGV2ZWxvcGVyIHtcblxuICBleHBvcnQgdmFyIF9tb2R1bGUgPSBhbmd1bGFyLm1vZHVsZShwbHVnaW5OYW1lLCBbJ2hhd3Rpby1jb3JlJywgJ2hhd3Rpby11aScsICd1aS5jb2RlbWlycm9yJywgJ252ZDMnLCAndHJlZUNvbnRyb2wnXSk7XG4gIGV4cG9ydCB2YXIgY29udHJvbGxlciA9IFBsdWdpbkhlbHBlcnMuY3JlYXRlQ29udHJvbGxlckZ1bmN0aW9uKF9tb2R1bGUsIHBsdWdpbk5hbWUpO1xuICBleHBvcnQgdmFyIHJvdXRlID0gUGx1Z2luSGVscGVycy5jcmVhdGVSb3V0aW5nRnVuY3Rpb24odGVtcGxhdGVQYXRoKTtcblxuICBfbW9kdWxlLmNvbmZpZyhbJyRyb3V0ZVByb3ZpZGVyJywgKCRyb3V0ZVByb3ZpZGVyOm5nLnJvdXRlLklSb3V0ZVByb3ZpZGVyKSA9PiB7XG4gICAgJHJvdXRlUHJvdmlkZXIud2hlbihjb250ZXh0LCByb3V0ZSgnd29ya3NwYWNlcy5odG1sJywgZmFsc2UpKVxuICAgICAgICAgICAgICAgICAgLndoZW4oXCIvbmFtZXNwYWNlc1wiLCByb3V0ZSgnd29ya3NwYWNlcy5odG1sJywgZmFsc2UpKVxuICAgICAgICAgICAgICAgICAgLy8ud2hlbihcIi9ob21lXCIsIHJvdXRlKCdob21lLmh0bWwnLCBmYWxzZSkpXG4gICAgICAgICAgICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy86bmFtZXNwYWNlJyksIHJvdXRlKCdwcm9qZWN0cy5odG1sJywgZmFsc2UpKVxuICAgICAgICAgICAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvOm5hbWVzcGFjZS9kZXRhaWwnKSwgcm91dGUoJ3dvcmtzcGFjZS5odG1sJywgZmFsc2UpKVxuICAgICAgICAgICAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvOm5hbWVzcGFjZS9qZW5raW5zSm9iJyksIHJvdXRlKCdqZW5raW5zSm9icy5odG1sJywgZmFsc2UpKVxuICAgICAgICAgICAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvOm5hbWVzcGFjZS9wcm9qZWN0cycpLCByb3V0ZSgncHJvamVjdHMuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgICAgICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnLzpuYW1lc3BhY2UvcHJvamVjdHMvOmlkJyksIHJvdXRlKCdlbnZpcm9ubWVudHMuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgICAgICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnLzpuYW1lc3BhY2UvcHJvamVjdHMvOmlkL2RldGFpbCcpLCBLdWJlcm5ldGVzLnJvdXRlKCdidWlsZENvbmZpZy5odG1sJywgZmFsc2UpKVxuICAgICAgICAgICAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvOm5hbWVzcGFjZS9wcm9qZWN0cy86aWQvYnVpbGRzJyksIEt1YmVybmV0ZXMucm91dGUoJ2J1aWxkcy5odG1sJywgZmFsc2UpKVxuICAgICAgICAgICAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvOm5hbWVzcGFjZS9wcm9qZWN0cy86aWQvZW52aXJvbm1lbnRzJyksIHJvdXRlKCdlbnZpcm9ubWVudHMuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgICAgICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnLzpuYW1lc3BhY2UvcHJvamVjdHMvOmlkL2plbmtpbnNKb2IvOmpvYicpLCByb3V0ZSgnamVua2luc0pvYi5odG1sJywgZmFsc2UpKVxuICAgICAgICAgICAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvOm5hbWVzcGFjZS9wcm9qZWN0cy86aWQvamVua2luc0pvYi86am9iL2xvZy86YnVpbGQnKSwgcm91dGUoJ2plbmtpbnNMb2cuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgICAgICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnLzpuYW1lc3BhY2UvcHJvamVjdHMvOmlkL2plbmtpbnNKb2IvOmpvYi9waXBlbGluZXMnKSwgcm91dGUoJ3BpcGVsaW5lcy5odG1sJywgZmFsc2UpKVxuICAgICAgICAgICAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvOm5hbWVzcGFjZS9wcm9qZWN0cy86aWQvamVua2luc0pvYi86am9iL3BpcGVsaW5lLzpidWlsZCcpLCByb3V0ZSgncGlwZWxpbmUuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgICAgICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnLzpuYW1lc3BhY2UvcHJvamVjdHMvOmlkL2plbmtpbnNKb2IvOmpvYi9tZXRyaWNzJyksIHJvdXRlKCdqZW5raW5zTWV0cmljcy5odG1sJywgZmFsc2UpKVxuICAgICAgICAgICAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvOm5hbWVzcGFjZS9wcm9qZWN0cy86aWQvamVua2luc01ldHJpY3MnKSwgcm91dGUoJ2plbmtpbnNNZXRyaWNzLmh0bWwnLCBmYWxzZSkpXG4gICAgICAgICAgICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy86bmFtZXNwYWNlL3Byb2plY3RzLzppZC90b29scycpLCByb3V0ZSgndG9vbHMuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgICAgICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnLzp3b3Jrc3BhY2UvcHJvamVjdHMvOnByb2plY3QvZW52aXJvbm1lbnRzLzpuYW1lc3BhY2UnKSwgcm91dGUoJ2Vudmlyb25tZW50Lmh0bWwnLCBmYWxzZSkpXG4gICAgICAgICAgICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy86d29ya3NwYWNlL3Byb2plY3RzLzpwcm9qZWN0L2Vudmlyb25tZW50cy86bmFtZXNwYWNlJyksIHJvdXRlKCdlbnZpcm9ubWVudC5odG1sJywgZmFsc2UpKVxuICAgICAgICAgICAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvQWdncmVnYXRlL292ZXJ2aWV3JyksIHJvdXRlKCdhZGREYXRhRmlsZS5odG1sJywgZmFsc2UpKVxuICAgICAgICAgICAgICAgICAgLm90aGVyd2lzZShcIi93b3Jrc3BhY2VzXCIpO1xuICB9XSk7XG4gIFxuXG4gIF9tb2R1bGUucnVuKFsndmlld1JlZ2lzdHJ5JywgJ1NlcnZpY2VSZWdpc3RyeScsICdIYXd0aW9OYXYnLCAnS3ViZXJuZXRlc01vZGVsJywgJyR0ZW1wbGF0ZUNhY2hlJywgJ0RhdGFJbmZvTW9kZWwnLCh2aWV3UmVnaXN0cnksIFNlcnZpY2VSZWdpc3RyeSwgSGF3dGlvTmF2LCBLdWJlcm5ldGVzTW9kZWwsICR0ZW1wbGF0ZUNhY2hlLCBEYXRhSW5mb01vZGVsKSA9PiB7XG4gICAgbG9nLmRlYnVnKFwiUnVubmluZ1wiKTtcbiAgICB2aWV3UmVnaXN0cnlbJ3dvcmtzcGFjZXMnXSA9IEt1YmVybmV0ZXMudGVtcGxhdGVQYXRoICsgJ2xheW91dEt1YmVybmV0ZXMuaHRtbCc7XG4gICAgdmlld1JlZ2lzdHJ5WyduYW1lc3BhY2VzJ10gPSBLdWJlcm5ldGVzLnRlbXBsYXRlUGF0aCArICdsYXlvdXRLdWJlcm5ldGVzLmh0bWwnO1xuXG4gICAgdmFyIGJ1aWxkZXIgPSBIYXd0aW9OYXYuYnVpbGRlcigpO1xuICAgIHZhciB3b3Jrc3BhY2VzID0gYnVpbGRlci5pZCgnd29ya3NwYWNlcycpXG4gICAgICAgICAgICAgICAgICAgICAgLmhyZWYoKCkgPT4gY29udGV4dClcbiAgICAgICAgICAgICAgICAgICAgICAudGl0bGUoKCkgPT4gJ+afpeeciycpXG4gICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCk7XG4vKlxuICAgIHZhciB3b3Jrc3BhY2VPdmVydmlldyA9IGJ1aWxkZXIuaWQoJ3dvcmtzcGFjZXMnKVxuICAgICAgICAgICAgICAgICAgICAgIC5ocmVmKCgpID0+IFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnb3ZlcnZpZXcnKSlcbiAgICAgICAgICAgICAgICAgICAgICAudGl0bGUoKCkgPT4gJ1dvcmtzcGFjZScpXG4gICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCk7XG4qL1xuLyogICAgdmFyIGRhdGFhZGQgPSBidWlsZGVyLmlkKCdkYXRhYWRkJylcbiAgICAgICAgICAgICAgICAgICAgICAuaHJlZigoKSA9PiBjb250ZXh0KVxuICAgICAgICAgICAgICAgICAgICAgIC50aXRsZSgoKSA9PiAn5rGH5oC7JylcbiAgICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKTtcbiovXG4gICAgdmFyIEFnZ3JlZ2F0ZSA9IGJ1aWxkZXIuaWQoJ0FnZ3JlZ2F0ZTsnKVxuICAgICAgICAgICAgICAgICAgICAgICAgIC5yYW5rKDIwMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAuaHJlZigoKSA9PiBjb250ZXh0KVxuICAgICAgICAgICAgICAgICAgICAgICAgIC50aXRsZSgoKSA9PiAn5pWw5o2u5rGH5oC7JylcbiAgICAgICAgICAgICAgICAgICAgICAgICAvLy5pc1ZhbGlkKCgpID0+ICFDb3JlLmlzUmVtb3RlQ29ubmVjdGlvbigpKVxuICAgICAgICAgICAgICAgICAgICAgICAgIC50YWJzKHdvcmtzcGFjZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICBIYXd0aW9OYXYuYWRkKEFnZ3JlZ2F0ZSk7XG4gIH1dKTtcblxuICBfbW9kdWxlLmZpbHRlcignYXNUcnVzdGVkSHRtbCcsIFsnJHNjZScsIGZ1bmN0aW9uICgkc2NlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgICByZXR1cm4gJHNjZS50cnVzdEFzSHRtbCh0ZXh0KTtcbiAgICB9O1xuICB9XSk7XG5cbiAgaGF3dGlvUGx1Z2luTG9hZGVyLmFkZE1vZHVsZShwbHVnaW5OYW1lKTtcblxuICAvLyBmb3Igc2Nyb2xsLWdsdWUgZGlyZWN0aXZlXG4gIGhhd3Rpb1BsdWdpbkxvYWRlci5hZGRNb2R1bGUoJ2x1ZWdnLmRpcmVjdGl2ZXMnKTtcbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJQbHVnaW4udHNcIi8+XG5cbm1vZHVsZSBEZXZlbG9wZXIge1xuICBfbW9kdWxlLmNvbnRyb2xsZXIoJ0RldmVsb3Blci5FbnZpcm9ubWVudFBhbmVsQ29udHJvbGxlcicsICgkc2NvcGUsICRlbGVtZW50LCAkbG9jYXRpb24sICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcblxuICAgICRzY29wZS5lbnZWZXJzaW9ucyA9IHt9O1xuICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcbiAgICAkc2NvcGUuZW52ID0gJHNjb3BlLiRldmFsKCdlbnYnKTtcbiAgICAkc2NvcGUuYnVpbGRDb25maWcgPSAkc2NvcGUuJGV2YWwoJ2VudGl0eScpO1xuXG4gICAgJHNjb3BlLm9wZW4gPSB0cnVlO1xuXG4gICAgJHNjb3BlLnRvZ2dsZSA9ICgpID0+ICRzY29wZS5vcGVuID0gISRzY29wZS5vcGVuO1xuXG4gICAgdmFyIGNhY2hlcyA9IHt9O1xuXG4gICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xuXG4gICAgbG9hZFByb2plY3RWZXJzaW9ucygkc2NvcGUsICRlbGVtZW50LCAkc2NvcGUuYnVpbGRDb25maWcsICRzY29wZS5lbnYsICRzY29wZS5lbnYubmFtZXNwYWNlLCAkc2NvcGUuZW52VmVyc2lvbnMsIGNhY2hlcyk7XG5cbiAgfSk7XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4va3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzSGVscGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJFbnJpY2hlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVySGVscGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJOYXZpZ2F0aW9uLnRzXCIvPlxuXG5tb2R1bGUgRGV2ZWxvcGVyIHtcblxuICBleHBvcnQgdmFyIEhvbWVDb250cm9sbGVyID0gY29udHJvbGxlcihcIkhvbWVDb250cm9sbGVyXCIsXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiS3ViZXJuZXRlc1NjaGVtYVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcbiAgICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDpLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc1NjaGVtYSxcbiAgICAgICAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xuXG4gICAgICAgICRzY29wZS5uYW1lc3BhY2UgPSBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XG5cbiAgICAgIH1dKTtcbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9rdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckVucmljaGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3Blck5hdmlnYXRpb24udHNcIi8+XG5cbm1vZHVsZSBEZXZlbG9wZXIge1xuXG4gIGV4cG9ydCB2YXIgSmVua2luc0pvYkNvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiSmVua2luc0pvYkNvbnRyb2xsZXJcIixcbiAgICBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCJLdWJlcm5ldGVzU2NoZW1hXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLCBcIlNlcnZpY2VSZWdpc3RyeVwiLFxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLFxuICAgICAgICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMLCBTZXJ2aWNlUmVnaXN0cnkpID0+IHtcblxuICAgICAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAgICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xuICAgICAgICAkc2NvcGUuaWQgPSAkcm91dGVQYXJhbXNbXCJpZFwiXTtcbiAgICAgICAgJHNjb3BlLmpvYklkID0gJHJvdXRlUGFyYW1zW1wiam9iXCJdO1xuICAgICAgICAkc2NvcGUuc2NoZW1hID0gS3ViZXJuZXRlc1NjaGVtYTtcbiAgICAgICAgJHNjb3BlLmVudGl0eUNoYW5nZWRDYWNoZSA9IHt9O1xuXG4gICAgICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcbiAgICAgICAgJHNjb3BlLmJyZWFkY3J1bWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdEJyZWFkY3J1bWJzKCRzY29wZS5pZCk7XG4gICAgICAgICRzY29wZS5zdWJUYWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdFN1Yk5hdkJhcnMoJHNjb3BlLmlkLCAkc2NvcGUuam9iSWQpO1xuXG4gICAgICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdXBkYXRlRGF0YSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICAkc2NvcGUuJG9uKCckcm91dGVVcGRhdGUnLCAoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgdXBkYXRlRGF0YSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICAkc2NvcGUudGFibGVDb25maWcgPSB7XG4gICAgICAgICAgZGF0YTogJ2pvYi5idWlsZHMnLFxuICAgICAgICAgIHNob3dTZWxlY3Rpb25DaGVja2JveDogdHJ1ZSxcbiAgICAgICAgICBlbmFibGVSb3dDbGlja1NlbGVjdGlvbjogZmFsc2UsXG4gICAgICAgICAgbXVsdGlTZWxlY3Q6IHRydWUsXG4gICAgICAgICAgc2VsZWN0ZWRJdGVtczogW10sXG4gICAgICAgICAgZmlsdGVyT3B0aW9uczoge1xuICAgICAgICAgICAgZmlsdGVyVGV4dDogJGxvY2F0aW9uLnNlYXJjaCgpW1wicVwiXSB8fCAnJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgY29sdW1uRGVmczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBmaWVsZDogJyRzb3J0T3JkZXInLFxuICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogJ05hbWUnLFxuICAgICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImplbmtpbnNCdWlsZElkVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZmllbGQ6ICckYnVpbGRMaW5rJyxcbiAgICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdWaWV3cycsXG4gICAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiamVua2luc0J1aWxkQnV0dG9uc1RlbXBsYXRlLmh0bWxcIilcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGZpZWxkOiAnJGR1cmF0aW9uJyxcbiAgICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdEdXJhdGlvbicsXG4gICAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiamVua2luc0J1aWxkRHVyYXRpb25UZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBmaWVsZDogJyR0aW1lc3RhbXAnLFxuICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1RpbWUgU3RhcnRlZCcsXG4gICAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiamVua2luc0J1aWxkVGltZXN0YW1wVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICAgICAgdXBkYXRlRGF0YSgpO1xuXG5cbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcbiAgICAgICAgICBpZiAoJHNjb3BlLmpvYklkKSB7XG4gICAgICAgICAgICB2YXIgdXJsID0gS3ViZXJuZXRlcy5rdWJlcm5ldGVzUHJveHlVcmxGb3JTZXJ2aWNlQ3VycmVudE5hbWVzcGFjZShqZW5raW5zU2VydmljZU5hbWVBbmRQb3J0LCBVcmxIZWxwZXJzLmpvaW4oXCJqb2JcIiwgJHNjb3BlLmpvYklkLCBcImFwaS9qc29uP2RlcHRoPTFcIikpO1xuICAgICAgICAgICAgaWYgKHVybCAmJiAoISRzY29wZS5qb2IgfHwgS3ViZXJuZXRlcy5rZWVwUG9sbGluZ01vZGVsKSkge1xuICAgICAgICAgICAgICAkaHR0cC5nZXQodXJsKS5cbiAgICAgICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5yaWNoSmVua2luc0pvYihkYXRhLCAkc2NvcGUuaWQsICRzY29wZS5qb2JJZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNPYmplY3RDaGFuZ2VkKGRhdGEsICRzY29wZS5lbnRpdHlDaGFuZ2VkQ2FjaGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgbG9nLmluZm8oXCJlbnRpdHkgaGFzIGNoYW5nZWQhXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5qb2IgPSBkYXRhO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAkc2NvcGUubW9kZWwuZmV0Y2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgICAgICAgICAgIH0pLlxuICAgICAgICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJHNjb3BlLm1vZGVsLmZldGNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1dKTtcbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9rdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckVucmljaGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3Blck5hdmlnYXRpb24udHNcIi8+XG5cbm1vZHVsZSBEZXZlbG9wZXIge1xuXG4gIGV4cG9ydCB2YXIgSmVua2luc0pvYnNDb250cm9sbGVyID0gY29udHJvbGxlcihcIkplbmtpbnNKb2JzQ29udHJvbGxlclwiLFxuICAgIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIkt1YmVybmV0ZXNTY2hlbWFcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsIFwiU2VydmljZVJlZ2lzdHJ5XCIsXG4gICAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNTY2hlbWEsXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwsIFNlcnZpY2VSZWdpc3RyeSkgPT4ge1xuXG4gICAgICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xuICAgICAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XG4gICAgICAgICRzY29wZS5pZCA9ICRyb3V0ZVBhcmFtc1tcImlkXCJdO1xuICAgICAgICAkc2NvcGUuc2NoZW1hID0gS3ViZXJuZXRlc1NjaGVtYTtcbiAgICAgICAgJHNjb3BlLmplbmtpbnMgPSBudWxsO1xuICAgICAgICAkc2NvcGUuZW50aXR5Q2hhbmdlZENhY2hlID0ge307XG5cbiAgICAgICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xuICAgICAgICAkc2NvcGUuYnJlYWRjcnVtYkNvbmZpZyA9IGNyZWF0ZVByb2plY3RCcmVhZGNydW1icygpO1xuICAgICAgICAkc2NvcGUuc3ViVGFiQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZVdvcmtzcGFjZVN1Yk5hdkJhcnMoKTtcblxuICAgICAgICAkc2NvcGUuJG9uKCdrdWJlcm5ldGVzTW9kZWxVcGRhdGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHVwZGF0ZURhdGEoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJHNjb3BlLiRvbignJHJvdXRlVXBkYXRlJywgKCRldmVudCkgPT4ge1xuICAgICAgICAgIHVwZGF0ZURhdGEoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJHNjb3BlLnRhYmxlQ29uZmlnID0ge1xuICAgICAgICAgIGRhdGE6ICdqZW5raW5zLmpvYnMnLFxuICAgICAgICAgIHNob3dTZWxlY3Rpb25DaGVja2JveDogdHJ1ZSxcbiAgICAgICAgICBlbmFibGVSb3dDbGlja1NlbGVjdGlvbjogZmFsc2UsXG4gICAgICAgICAgbXVsdGlTZWxlY3Q6IHRydWUsXG4gICAgICAgICAgc2VsZWN0ZWRJdGVtczogW10sXG4gICAgICAgICAgZmlsdGVyT3B0aW9uczoge1xuICAgICAgICAgICAgZmlsdGVyVGV4dDogJGxvY2F0aW9uLnNlYXJjaCgpW1wicVwiXSB8fCAnJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgY29sdW1uRGVmczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBmaWVsZDogJ25hbWUnLFxuICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogJ05hbWUnLFxuICAgICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImplbmtpbnNKb2JOYW1lVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZmllbGQ6ICckYnVpbGRMaW5rJyxcbiAgICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdWaWV3cycsXG4gICAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiamVua2luc0pvYkJ1dHRvbnNUZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBmaWVsZDogJyRsYXN0U3VjY2Vzc2Z1bEJ1aWxkTnVtYmVyJyxcbiAgICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdMYXN0IFN1Y2Nlc3MnLFxuICAgICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImplbmtpbnNMYXN0U3VjY2Vzc1RlbXBsYXRlLmh0bWxcIilcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGZpZWxkOiAnJGxhc3RGYWlsZWRsQnVpbGROdW1iZXInLFxuICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogJ0xhc3QgRmFpbHVyZScsXG4gICAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiamVua2luc0xhc3RGYWlsdXJlVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZmllbGQ6ICckZHVyYXRpb24nLFxuICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogJ0xhc3QgRHVyYXRpb24nLFxuICAgICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImplbmtpbnNCdWlsZER1cmF0aW9uVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZmllbGQ6ICckdGltZXN0YW1wJyxcbiAgICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdUaW1lIFN0YXJ0ZWQnLFxuICAgICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImplbmtpbnNCdWlsZFRpbWVzdGFtcFRlbXBsYXRlLmh0bWxcIilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICAgIHVwZGF0ZURhdGEoKTtcblxuXG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZURhdGEoKSB7XG4gICAgICAgICAgLy8gVE9ETyBvbmx5IG5lZWQgZGVwdGggMiB0byBiZSBhYmxlIHRvIGZldGNoIHRoZSBsYXN0QnVpbGRcbiAgICAgICAgICB2YXIgdXJsID0gS3ViZXJuZXRlcy5rdWJlcm5ldGVzUHJveHlVcmxGb3JTZXJ2aWNlQ3VycmVudE5hbWVzcGFjZShqZW5raW5zU2VydmljZU5hbWVBbmRQb3J0LCBcImFwaS9qc29uP2RlcHRoPTJcIik7XG4gICAgICAgICAgbG9nLmluZm8oXCJcIik7XG4gICAgICAgICAgaWYgKHVybCAmJiAoISRzY29wZS5qZW5raW5zIHx8IEt1YmVybmV0ZXMua2VlcFBvbGxpbmdNb2RlbCkpIHtcbiAgICAgICAgICAgICRodHRwLmdldCh1cmwsIGplbmtpbnNIdHRwQ29uZmlnKS5cbiAgICAgICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgZW5yaWNoSmVua2luc0pvYnMoZGF0YSwgJHNjb3BlLmlkLCAkc2NvcGUuaWQpO1xuICAgICAgICAgICAgICAgICAgaWYgKGhhc09iamVjdENoYW5nZWQoZGF0YSwgJHNjb3BlLmVudGl0eUNoYW5nZWRDYWNoZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9nLmluZm8oXCJlbnRpdHkgaGFzIGNoYW5nZWQhXCIpO1xuICAgICAgICAgICAgICAgICAgICAkc2NvcGUuamVua2lucyA9IGRhdGE7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICRzY29wZS5tb2RlbC5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgICAgICAgICB9KS5cbiAgICAgICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XSk7XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG5cbmRlY2xhcmUgdmFyIE9TT0F1dGhDb25maWc6YW55O1xuZGVjbGFyZSB2YXIgR29vZ2xlT0F1dGhDb25maWc6YW55O1xuZGVjbGFyZSB2YXIgS2V5Y2xvYWtDb25maWc6YW55O1xuXG5tb2R1bGUgS3ViZXJuZXRlcyB7XG5cbiAgZXhwb3J0IHZhciBfbW9kdWxlID0gYW5ndWxhci5tb2R1bGUocGx1Z2luTmFtZSwgWydoYXd0aW8tY29yZScsICdoYXd0aW8tdWknLCAndWkuY29kZW1pcnJvcicsICd1aS52YWxpZGF0ZScsJ2t1YmVybmV0ZXNVSSddKTtcbiAgZXhwb3J0IHZhciBjb250cm9sbGVyID0gUGx1Z2luSGVscGVycy5jcmVhdGVDb250cm9sbGVyRnVuY3Rpb24oX21vZHVsZSwgcGx1Z2luTmFtZSk7XG4gIGV4cG9ydCB2YXIgcm91dGUgPSBQbHVnaW5IZWxwZXJzLmNyZWF0ZVJvdXRpbmdGdW5jdGlvbih0ZW1wbGF0ZVBhdGgpO1xuXG4gIF9tb2R1bGUuY29uZmlnKFsnJHJvdXRlUHJvdmlkZXInLCAoJHJvdXRlUHJvdmlkZXI6bmcucm91dGUuSVJvdXRlUHJvdmlkZXIpID0+IHtcblxuICAgICRyb3V0ZVByb3ZpZGVyXG4gICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9wb2RzJyksIHJvdXRlKCdwb2RzLmh0bWwnLCBmYWxzZSkpXG4gICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ3JlcGxpY2F0aW9uQ29udHJvbGxlcnMnKSwgcm91dGUoJ3JlcGxpY2F0aW9uQ29udHJvbGxlcnMuaHRtbCcsIGZhbHNlKSlcbiAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnc2VydmljZXMnKSwgcm91dGUoJ3NlcnZpY2VzLmh0bWwnLCBmYWxzZSkpXG4gICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2V2ZW50cycpLCByb3V0ZSgnZXZlbnRzLmh0bWwnLCBmYWxzZSkpXG4gICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2FwcHMnKSwgcm91dGUoJ2FwcHMuaHRtbCcsIGZhbHNlKSlcbiAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnYXBwcy86bmFtZXNwYWNlJyksIHJvdXRlKCdhcHBzLmh0bWwnLCBmYWxzZSkpXG4gICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ3RlbXBsYXRlcycpLCByb3V0ZSgndGVtcGxhdGVzLmh0bWwnLCBmYWxzZSkpXG4gICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2hvc3RzJyksIHJvdXRlKCdob3N0cy5odG1sJywgZmFsc2UpKVxuICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdob3N0cy86aWQnKSwgcm91dGUoJ2hvc3QuaHRtbCcsIHRydWUpKVxuICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdwaXBlbGluZXMnKSwgcm91dGUoJ3BpcGVsaW5lcy5odG1sJywgZmFsc2UpKVxuICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdvdmVydmlldycpLCByb3V0ZSgnb3ZlcnZpZXcuaHRtbCcsIHRydWUpKVxuICAgICAgLndoZW4oY29udGV4dCwge3JlZGlyZWN0VG86IFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAncmVwbGljYXRpb25Db250cm9sbGVycycpfSk7XG5cblxuICAgIGFuZ3VsYXIuZm9yRWFjaChbY29udGV4dCwgXCIvd29ya3NwYWNlcy86d29ya3NwYWNlL3Byb2plY3RzLzpwcm9qZWN0XCJdLCAoY29udGV4dCkgPT4ge1xuICAgICAgJHJvdXRlUHJvdmlkZXJcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvbmFtZXNwYWNlLzpuYW1lc3BhY2UvcG9kQ3JlYXRlJyksIHJvdXRlKCdwb2RDcmVhdGUuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvbmFtZXNwYWNlLzpuYW1lc3BhY2UvcG9kRWRpdC86aWQnKSwgcm91dGUoJ3BvZEVkaXQuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvbmFtZXNwYWNlLzpuYW1lc3BhY2UvcG9kcycpLCByb3V0ZSgncG9kcy5odG1sJywgZmFsc2UpKVxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9uYW1lc3BhY2UvOm5hbWVzcGFjZS9wb2RzLzppZCcpLCByb3V0ZSgncG9kLmh0bWwnLCBmYWxzZSkpXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL25hbWVzcGFjZS86bmFtZXNwYWNlL3JlcGxpY2F0aW9uQ29udHJvbGxlcnMnKSwgcm91dGUoJ3JlcGxpY2F0aW9uQ29udHJvbGxlcnMuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvbmFtZXNwYWNlLzpuYW1lc3BhY2UvcmVwbGljYXRpb25Db250cm9sbGVycy86aWQnKSwgcm91dGUoJ3JlcGxpY2F0aW9uQ29udHJvbGxlci5odG1sJywgZmFsc2UpKVxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9uYW1lc3BhY2UvOm5hbWVzcGFjZS9yZXBsaWNhdGlvbkNvbnRyb2xsZXJDcmVhdGUnKSwgcm91dGUoJ3JlcGxpY2F0aW9uQ29udHJvbGxlckNyZWF0ZS5odG1sJywgZmFsc2UpKVxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9uYW1lc3BhY2UvOm5hbWVzcGFjZS9yZXBsaWNhdGlvbkNvbnRyb2xsZXJFZGl0LzppZCcpLCByb3V0ZSgncmVwbGljYXRpb25Db250cm9sbGVyRWRpdC5odG1sJywgZmFsc2UpKVxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9uYW1lc3BhY2UvOm5hbWVzcGFjZS9zZWNyZXRzJyksIHJvdXRlKCdzZWNyZXRzLmh0bWwnLCBmYWxzZSkpXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL25hbWVzcGFjZS86bmFtZXNwYWNlL3NlY3JldHMvOmlkJyksIHJvdXRlKCdzZWNyZXQuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvbmFtZXNwYWNlLzpuYW1lc3BhY2Uvc2VjcmV0Q3JlYXRlJyksIHJvdXRlKCdzZWNyZXQuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvbmFtZXNwYWNlLzpuYW1lc3BhY2Uvc2VydmljZXMnKSwgcm91dGUoJ3NlcnZpY2VzLmh0bWwnLCBmYWxzZSkpXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL25hbWVzcGFjZS86bmFtZXNwYWNlL3NlcnZpY2VzLzppZCcpLCByb3V0ZSgnc2VydmljZS5odG1sJywgZmFsc2UpKVxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9uYW1lc3BhY2UvOm5hbWVzcGFjZS9zZXJ2aWNlQ3JlYXRlJyksIHJvdXRlKCdzZXJ2aWNlQ3JlYXRlLmh0bWwnLCBmYWxzZSkpXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL25hbWVzcGFjZS86bmFtZXNwYWNlL3NlcnZpY2VFZGl0LzppZCcpLCByb3V0ZSgnc2VydmljZUVkaXQuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvbmFtZXNwYWNlLzpuYW1lc3BhY2UvZXZlbnRzJyksIHJvdXRlKCdldmVudHMuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvbmFtZXNwYWNlLzpuYW1lc3BhY2UvYXBwcycpLCByb3V0ZSgnYXBwcy5odG1sJywgZmFsc2UpKVxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9uYW1lc3BhY2UvOm5hbWVzcGFjZS9vdmVydmlldycpLCByb3V0ZSgnb3ZlcnZpZXcuaHRtbCcsIHRydWUpKVxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9uYW1lc3BhY2UvOm5hbWVzcGFjZS90ZW1wbGF0ZXMvOnRhcmdldE5hbWVzcGFjZScpLCByb3V0ZSgndGVtcGxhdGVzLmh0bWwnLCBmYWxzZSkpXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL25hbWVzcGFjZS86bmFtZXNwYWNlJyksIHJvdXRlKCdhcHBzLmh0bWwnLCBmYWxzZSkpXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnYnVpbGRzJyksIHJvdXRlKCdidWlsZHMuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdidWlsZHMvOmlkJyksIHJvdXRlKCdidWlsZC5odG1sJywgdHJ1ZSkpXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnYnVpbGRMb2dzLzppZCcpLCByb3V0ZSgnYnVpbGRMb2dzLmh0bWwnLCB0cnVlKSlcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdidWlsZENvbmZpZ3MnKSwgcm91dGUoJ2J1aWxkQ29uZmlncy5odG1sJywgZmFsc2UpKVxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2J1aWxkQ29uZmlncy86aWQnKSwgcm91dGUoJ2J1aWxkQ29uZmlnLmh0bWwnLCB0cnVlKSlcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdidWlsZENvbmZpZ0VkaXQvOmlkJyksIHJvdXRlKCdidWlsZENvbmZpZ0VkaXQuaHRtbCcsIHRydWUpKVxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2RlcGxveW1lbnRDb25maWdzJyksIHJvdXRlKCdkZXBsb3ltZW50Q29uZmlncy5odG1sJywgZmFsc2UpKVxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2RlcGxveW1lbnRDb25maWdzLzppZCcpLCByb3V0ZSgnZGVwbG95bWVudENvbmZpZy5odG1sJywgdHJ1ZSkpXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnaW1hZ2VSZXBvc2l0b3JpZXMnKSwgcm91dGUoJ2ltYWdlUmVwb3NpdG9yaWVzLmh0bWwnLCBmYWxzZSkpXG4gICAgfSk7XG5cbiAgICBhbmd1bGFyLmZvckVhY2goW2NvbnRleHQsIFwiL3dvcmtzcGFjZXMvOndvcmtzcGFjZVwiLCBcIi93b3Jrc3BhY2VzLzp3b3Jrc3BhY2UvcHJvamVjdHMvOnByb2plY3RcIl0sIChjb250ZXh0KSA9PiB7XG4gICAgICAkcm91dGVQcm92aWRlclxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2J1aWxkQ29uZmlnRWRpdCcpLCByb3V0ZSgnYnVpbGRDb25maWdFZGl0Lmh0bWwnLCB0cnVlKSlcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdidWlsZENvbmZpZ0VkaXQvOmlkJyksIHJvdXRlKCdidWlsZENvbmZpZ0VkaXQuaHRtbCcsIHRydWUpKVxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2ltcG9ydFByb2plY3QnKSwgcm91dGUoJ2ltcG9ydFByb2plY3QuaHRtbCcsIHRydWUpKVxuICAgIH0pO1xuICB9XSk7XG5cblxuICBfbW9kdWxlLmZhY3RvcnkoJ0FwcExpYnJhcnlVUkwnLCBbJyRyb290U2NvcGUnLCAoJHJvb3RTY29wZTpuZy5JUm9vdFNjb3BlU2VydmljZSkgPT4ge1xuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oa3ViZXJuZXRlc0FwaVVybCgpLCBcIi9wcm94eVwiLCBrdWJlcm5ldGVzTmFtZXNwYWNlUGF0aCgpLCBcIi9zZXJ2aWNlcy9hcHAtbGlicmFyeVwiKTtcbiAgfV0pO1xuXG4gIF9tb2R1bGUuZmFjdG9yeSgnV2lraUdpdFVybFByZWZpeCcsICgpID0+IHtcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKGt1YmVybmV0ZXNBcGlVcmwoKSwgXCIvcHJveHlcIiwga3ViZXJuZXRlc05hbWVzcGFjZVBhdGgoKSwgXCJzZXJ2aWNlcy9hcHAtbGlicmFyeVwiKTtcbiAgfSk7XG5cbiAgX21vZHVsZS5mYWN0b3J5KCd3aWtpUmVwb3NpdG9yeScsIFtcIiRsb2NhdGlvblwiLCBcImxvY2FsU3RvcmFnZVwiLCAoJGxvY2F0aW9uLCBsb2NhbFN0b3JhZ2UpID0+IHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1dKTtcblxuICBfbW9kdWxlLmZhY3RvcnkoJ0Nvbm5lY3REaWFsb2dTZXJ2aWNlJywgWyckcm9vdFNjb3BlJywgKCRyb290U2NvcGU6bmcuSVJvb3RTY29wZVNlcnZpY2UpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgZGlhbG9nOiBuZXcgVUkuRGlhbG9nKCksXG4gICAgICBzYXZlQ3JlZGVudGlhbHM6IGZhbHNlLFxuICAgICAgdXNlck5hbWU6IG51bGwsXG4gICAgICBwYXNzd29yZDogbnVsbCxcbiAgICAgIGpvbG9raWFVcmw6IG51bGwsXG4gICAgICBjb250YWluZXJOYW1lOiBudWxsLFxuICAgICAgdmlldzogbnVsbFxuICAgIH07XG4gIH1dKTtcblxuICBfbW9kdWxlLmZpbHRlcigna3ViZXJuZXRlc1BhZ2VMaW5rJywgKCkgPT4gZW50aXR5UGFnZUxpbmspO1xuXG4gIF9tb2R1bGUuZmlsdGVyKCdyZWxhdGl2ZVRpbWUnLCAoKSA9PiB7XG4gICAgcmV0dXJuIChkYXRlKSA9PiB7XG4gICAgICByZXR1cm4gaHVtYW5kYXRlLnJlbGF0aXZlVGltZShkYXRlKTtcbiAgICB9XG4gIH0pO1xuXG4gIF9tb2R1bGUucnVuKFsndmlld1JlZ2lzdHJ5JywgJ1NlcnZpY2VSZWdpc3RyeScsICdIYXd0aW9OYXYnLCAnS3ViZXJuZXRlc01vZGVsJywgJyR0ZW1wbGF0ZUNhY2hlJywgKHZpZXdSZWdpc3RyeSwgU2VydmljZVJlZ2lzdHJ5LCBIYXd0aW9OYXYsIEt1YmVybmV0ZXNNb2RlbCwgJHRlbXBsYXRlQ2FjaGUpID0+IHtcblxuICAgIGxvZy5kZWJ1ZyhcIlJ1bm5pbmdcIik7XG4gICAgdmlld1JlZ2lzdHJ5WydrdWJlcm5ldGVzJ10gPSB0ZW1wbGF0ZVBhdGggKyAnbGF5b3V0S3ViZXJuZXRlcy5odG1sJztcbiAgICB2YXIgYnVpbGRlciA9IEhhd3Rpb05hdi5idWlsZGVyKCk7XG4gICAgdmFyIGFwcHMgPSBidWlsZGVyLmlkKCdrdWJlLWFwcHMnKVxuICAgICAgLmhyZWYoKCkgPT4gVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdhcHBzJykpXG4gICAgICAudGl0bGUoKCkgPT4gJ0FwcHMnKVxuICAgICAgLmJ1aWxkKCk7XG5cbiAgICB2YXIgc2VydmljZXMgPSBidWlsZGVyLmlkKCdrdWJlLXNlcnZpY2VzJylcbiAgICAgIC5ocmVmKCgpID0+IFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnc2VydmljZXMnKSlcbiAgICAgIC50aXRsZSgoKSA9PiAnU2VydmljZXMnKVxuICAgICAgLmJ1aWxkKCk7XG5cbiAgICB2YXIgY29udHJvbGxlcnMgPSBidWlsZGVyLmlkKCdrdWJlLWNvbnRyb2xsZXJzJylcbiAgICAgIC5ocmVmKCgpID0+IFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAncmVwbGljYXRpb25Db250cm9sbGVycycpKVxuICAgICAgLnRpdGxlKCgpID0+ICdvcmFjbGXmnI3liqEnKVxuICAgICAgLmJ1aWxkKCk7XG5cbiAgICB2YXIgcG9kcyA9IGJ1aWxkZXIuaWQoJ2t1YmUtcG9kcycpXG4gICAgICAuaHJlZigoKSA9PiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ3BvZHMnKSlcbiAgICAgIC50aXRsZSgoKSA9PiAn5rWL6K+V6aG16Z2iJylcbiAgICAgIC5idWlsZCgpO1xuXG4gICAgdmFyIGV2ZW50cyA9IGJ1aWxkZXIuaWQoJ2t1YmUtZXZlbnRzJylcbiAgICAgIC5ocmVmKCgpID0+IFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnZXZlbnRzJykpXG4gICAgICAudGl0bGUoKCkgPT4gJ+acjeWKoeWQr+WKqOaXpeW/lycpXG4gICAgICAuYnVpbGQoKTtcblxuICAgIHZhciBob3N0cyA9IGJ1aWxkZXIuaWQoJ2t1YmUtaG9zdHMnKVxuICAgICAgLmhyZWYoKCkgPT4gVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdob3N0cycpKVxuICAgICAgLnRpdGxlKCgpID0+ICfpm4bnvqToioLngrknKVxuICAgICAgLmJ1aWxkKCk7XG5cbiAgICB2YXIgb3ZlcnZpZXcgPSBidWlsZGVyLmlkKCdrdWJlLW92ZXJ2aWV3JylcbiAgICAgIC5ocmVmKCgpID0+IFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnb3ZlcnZpZXcnKSlcbiAgICAgIC50aXRsZSgoKSA9PiAnRGlhZ3JhbScpXG4gICAgICAuYnVpbGQoKTtcblxuICAgIHZhciBidWlsZHMgPSBidWlsZGVyLmlkKCdrdWJlLWJ1aWxkcycpXG4gICAgICAuaHJlZigoKSA9PiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2J1aWxkcycpKVxuICAgICAgLnRpdGxlKCgpID0+ICdCdWlsZHMnKVxuICAgICAgLmJ1aWxkKCk7XG5cbiAgICB2YXIgYnVpbGRDb25maWdzID0gYnVpbGRlci5pZCgna3ViZS1idWlsZENvbmZpZ3MnKVxuICAgICAgLmhyZWYoKCkgPT4gVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdidWlsZENvbmZpZ3MnKSlcbiAgICAgIC50aXRsZSgoKSA9PiAnQnVpbGQgQ29uZmlncycpXG4gICAgICAuYnVpbGQoKTtcblxuICAgIHZhciBkZXBsb3lzID0gYnVpbGRlci5pZCgna3ViZS1kZXBsb3lzJylcbiAgICAgIC5ocmVmKCgpID0+IFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnZGVwbG95bWVudENvbmZpZ3MnKSlcbiAgICAgIC50aXRsZSgoKSA9PiAnRGVwbG95cycpXG4gICAgICAuYnVpbGQoKTtcblxuICAgIHZhciBpbWFnZVJlcG9zaXRvcmllcyA9IGJ1aWxkZXIuaWQoJ2t1YmUtaW1hZ2VSZXBvc2l0b3JpZXMnKVxuICAgICAgLmhyZWYoKCkgPT4gVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdpbWFnZVJlcG9zaXRvcmllcycpKVxuICAgICAgLnRpdGxlKCgpID0+ICdSZWdpc3RyaWVzJylcbiAgICAgIC5idWlsZCgpO1xuXG4gICAgdmFyIHBpcGVsaW5lcyA9IGJ1aWxkZXIuaWQoJ2t1YmUtcGlwZWxpbmVzJylcbiAgICAgIC5ocmVmKCgpID0+IFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAncGlwZWxpbmVzJykpXG4gICAgICAudGl0bGUoKCkgPT4gJ1BpcGVsaW5lcycpXG4gICAgICAuYnVpbGQoKTtcblxuICAgIHZhciByZXBvcyA9IGJ1aWxkZXIuaWQoJ2t1YmUtcmVwb3MnKVxuICAgICAgLmhyZWYoKCkgPT4gXCIvZm9yZ2UvcmVwb3NcIilcbiAgICAgIC5pc1ZhbGlkKCgpID0+IFNlcnZpY2VSZWdpc3RyeS5oYXNTZXJ2aWNlKGZhYnJpYzhGb3JnZVNlcnZpY2VOYW1lKSAmJiBTZXJ2aWNlUmVnaXN0cnkuaGFzU2VydmljZShnb2dzU2VydmljZU5hbWUpKVxuICAgICAgLnRpdGxlKCgpID0+ICdSZXBvc2l0b3JpZXMnKVxuICAgICAgLmJ1aWxkKCk7XG5cbiAgICB2YXIgbWFpblRhYiA9IGJ1aWxkZXIuaWQoJ2t1YmVybmV0ZXMnKVxuICAgICAgLnJhbmsoMTAwKVxuICAgICAgLmRlZmF1bHRQYWdlKHtcbiAgICAgICAgcmFuazogMjAsXG4gICAgICAgIGlzVmFsaWQ6ICh5ZXMsIG5vKSA9PiB7XG4gICAgICAgICAgeWVzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAuaHJlZigoKSA9PiBjb250ZXh0KVxuICAgICAgLnRpdGxlKCgpID0+ICfmnI3liqHpm4bnvqQnKVxuICAgICAgLnRhYnMoY29udHJvbGxlcnMsIGV2ZW50cylcbiAgICAgIC5idWlsZCgpO1xuICAgIEhhd3Rpb05hdi5hZGQobWFpblRhYik7XG5cbiAgICAvKiB0ZXN0S3ViZXJuZXRlc01vZGVsXG4gICAgSGF3dGlvTmF2LmFkZCh7XG4gICAgICBpZDogJ2s4c0FwcFN3aXRjaGVyJyxcbiAgICAgIHRpdGxlOiAoKSA9PiAnJywgLy8gbm90IHVzZWQgYXMgJ3RlbXBsYXRlJyBiZWxvdyBvdmVycmlkZXMgdGhpc1xuICAgICAgaXNWYWxpZDogKCkgPT4gS3ViZXJuZXRlc01vZGVsLnNlcnZpY2VBcHBzLmxlbmd0aCA+IDAsXG4gICAgICBjb250ZXh0OiB0cnVlLFxuICAgICAgdGVtcGxhdGU6ICgpID0+ICR0ZW1wbGF0ZUNhY2hlLmdldChVcmxIZWxwZXJzLmpvaW4odGVtcGxhdGVQYXRoLCAnc2VydmljZUFwcHMuaHRtbCcpKVxuICAgIH0pO1xuICAgICovXG5cbiAgICB2YXIgcHJvamVjdHNUYWIgPSBidWlsZGVyLmlkKCdvcGVuc2hpZnQnKVxuICAgICAgLnJhbmsoMTAwKVxuICAgICAgLmhyZWYoKCkgPT4gVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdidWlsZENvbmZpZ3MnKSArICc/c3ViLXRhYj1rdWJlLWJ1aWxkQ29uZmlncycpXG4gICAgICAudGl0bGUoKCkgPT4gJ1Byb2plY3RzJylcbiAgICAgIC8vIGxldHMgZGlzYWJsZSB0aGUgcGlwZWxpbmVzIHZpZXcgZm9yIG5vd1xuICAgICAgLy8gcGlwZWxpbmVzLFxuICAgICAgLnRhYnMocmVwb3MsIGJ1aWxkQ29uZmlncywgYnVpbGRzLCBkZXBsb3lzLCBpbWFnZVJlcG9zaXRvcmllcylcbiAgICAgIC5idWlsZCgpO1xuXG4gICAgLy9IYXd0aW9OYXYuYWRkKHByb2plY3RzVGFiKTtcbiAgfV0pO1xuXG4gIGhhd3Rpb1BsdWdpbkxvYWRlci5yZWdpc3RlclByZUJvb3RzdHJhcFRhc2soe1xuICAgIG5hbWU6ICdLdWJlcm5ldGVzSW5pdCcsXG4gICAgdGFzazogKG5leHQpID0+IHtcbiAgICAgICQuZ2V0U2NyaXB0KCdvc2NvbnNvbGUvY29uZmlnLmpzJylcbiAgICAgICAgLmRvbmUoKHNjcmlwdCwgdGV4dFN0YXR1cykgPT4ge1xuICAgICAgICAgIHZhciBjb25maWc6S3ViZXJuZXRlc0NvbmZpZyA9IEt1YmVybmV0ZXMub3NDb25maWcgPSB3aW5kb3dbJ09QRU5TSElGVF9DT05GSUcnXTtcbiAgICAgICAgICBsb2cuZGVidWcoXCJGZXRjaGVkIE9BdXRoIGNvbmZpZzogXCIsIGNvbmZpZyk7XG4gICAgICAgICAgdmFyIG1hc3RlcjpzdHJpbmcgPSBjb25maWcubWFzdGVyX3VyaTtcbiAgICAgICAgICBpZiAoIW1hc3RlciAmJiBjb25maWcuYXBpICYmIGNvbmZpZy5hcGkuazhzKSB7XG4gICAgICAgICAgICB2YXIgbWFzdGVyVXJpID0gbmV3IFVSSSgpLmhvc3QoY29uZmlnLmFwaS5rOHMuaG9zdFBvcnQpLnBhdGgoXCJcIikucXVlcnkoXCJcIik7XG4gICAgICAgICAgICBpZiAoY29uZmlnLmFwaS5rOHMucHJvdG8pIHtcbiAgICAgICAgICAgICAgbWFzdGVyVXJpLnByb3RvY29sKGNvbmZpZy5hcGkuazhzLnByb3RvKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hc3RlciA9IG1hc3RlclVyaS50b1N0cmluZygpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIE9TT0F1dGhDb25maWcgPSBjb25maWcub3BlbnNoaWZ0O1xuICAgICAgICAgIEdvb2dsZU9BdXRoQ29uZmlnID0gY29uZmlnLmdvb2dsZTtcbiAgICAgICAgICBLZXljbG9ha0NvbmZpZyA9IGNvbmZpZy5rZXljbG9haztcblxuICAgICAgICAgIGlmIChPU09BdXRoQ29uZmlnICYmICFtYXN0ZXIpIHtcbiAgICAgICAgICAgIC8vIFRPRE8gYXV0aC5tYXN0ZXJfdXJpIG5vIGxvbmdlciB1c2VkIHJpZ2h0P1xuICAgICAgICAgICAgLy8gbWFzdGVyID0gT1NPQXV0aENvbmZpZy5tYXN0ZXJfdXJpO1xuICAgICAgICAgICAgaWYgKCFtYXN0ZXIpIHtcbiAgICAgICAgICAgICAgdmFyIG9hdXRoX2F1dGhvcml6ZV91cmkgPSBPU09BdXRoQ29uZmlnLm9hdXRoX2F1dGhvcml6ZV91cmk7XG4gICAgICAgICAgICAgIGlmIChvYXV0aF9hdXRob3JpemVfdXJpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRleHQgPSBvYXV0aF9hdXRob3JpemVfdXJpO1xuICAgICAgICAgICAgICAgIHZhciBpZHggPSB0ZXh0LmluZGV4T2YoXCI6Ly9cIik7XG4gICAgICAgICAgICAgICAgaWYgKGlkeCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIGlkeCArPSAzO1xuICAgICAgICAgICAgICAgICAgaWR4ID0gdGV4dC5pbmRleE9mKFwiL1wiLCBpZHgpO1xuICAgICAgICAgICAgICAgICAgaWYgKGlkeCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgbWFzdGVyID0gdGV4dC5zdWJzdHJpbmcoMCwgKytpZHgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoKCFLdWJlcm5ldGVzLm1hc3RlclVybCB8fCBLdWJlcm5ldGVzLm1hc3RlclVybCA9PT0gXCIvXCIpICYmICghbWFzdGVyIHx8IG1hc3RlciA9PT0gXCIvXCIpKSB7XG4gICAgICAgICAgICAvLyBsZXRzIGRlZmF1bHQgdGhlIG1hc3RlciB0byB0aGUgY3VycmVudCBwcm90b2NvbCBhbmQgaG9zdC9wb3J0XG4gICAgICAgICAgICAvLyBpbiBjYXNlIHRoZSBtYXN0ZXIgdXJsIGlzIFwiL1wiIGFuZCB3ZSBhcmVcbiAgICAgICAgICAgIC8vIHNlcnZpbmcgdXAgc3RhdGljIGNvbnRlbnQgZnJvbSBpbnNpZGUgL2FwaS92MS9uYW1lc3BhY2VzL2RlZmF1bHQvc2VydmljZXMvZmFicmljOCBvciBzb21ldGhpbmcgbGlrZSB0aGF0XG4gICAgICAgICAgICB2YXIgaHJlZiA9IGxvY2F0aW9uLmhyZWY7XG4gICAgICAgICAgICBpZiAoaHJlZikge1xuICAgICAgICAgICAgICBtYXN0ZXIgPSBuZXcgVVJJKGhyZWYpLnF1ZXJ5KFwiXCIpLnBhdGgoXCJcIikudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG1hc3Rlcikge1xuICAgICAgICAgICAgS3ViZXJuZXRlcy5tYXN0ZXJVcmwgPSBtYXN0ZXI7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuZmFpbCgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBsb2cuZGVidWcoXCJFcnJvciBmZXRjaGluZyBPQVVUSCBjb25maWc6IFwiLCByZXNwb25zZSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5hbHdheXMoKCkgPT4ge1xuICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LCB0cnVlKTtcblxuICBoYXd0aW9QbHVnaW5Mb2FkZXIuYWRkTW9kdWxlKCduZ1Jlc291cmNlJyk7XG4gIGhhd3Rpb1BsdWdpbkxvYWRlci5hZGRNb2R1bGUocGx1Z2luTmFtZSk7XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIGV4cG9ydCB2YXIgRkFCUklDOF9QUk9KRUNUX0pTT04gPSBcImZhYnJpYzhQcm9qZWN0SnNvblwiO1xuXG4gIGZ1bmN0aW9uIGJ5SWQodGhpbmcpIHtcbiAgICByZXR1cm4gdGhpbmcuaWQ7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVLZXkobmFtZXNwYWNlLCBpZCwga2luZCkge1xuICAgIHJldHVybiAobmFtZXNwYWNlIHx8IFwiXCIpICsgXCItXCIgKyAoa2luZCB8fCAndW5kZWZpbmVkJykudG9Mb3dlckNhc2UoKSArICctJyArIChpZCB8fCAndW5kZWZpbmVkJykucmVwbGFjZSgvXFwuL2csICctJyk7XG4gIH1cblxuICBmdW5jdGlvbiBwb3B1bGF0ZUtleShpdGVtKSB7XG4gICAgdmFyIHJlc3VsdCA9IGl0ZW07XG4gICAgcmVzdWx0Wydfa2V5J10gPSBjcmVhdGVLZXkoZ2V0TmFtZXNwYWNlKGl0ZW0pLCBnZXROYW1lKGl0ZW0pLCBnZXRLaW5kKGl0ZW0pKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gcG9wdWxhdGVLZXlzKGl0ZW1zOkFycmF5PGFueT4pIHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgYW5ndWxhci5mb3JFYWNoKGl0ZW1zLCAoaXRlbSkgPT4ge1xuICAgICAgcmVzdWx0LnB1c2gocG9wdWxhdGVLZXkoaXRlbSkpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiBzZWxlY3RQb2RzKHBvZHMsIG5hbWVzcGFjZSwgbGFiZWxzKSB7XG4gICAgcmV0dXJuIHBvZHMuZmlsdGVyKChwb2QpID0+IHtcbiAgICAgIHJldHVybiBnZXROYW1lc3BhY2UocG9kKSA9PT0gbmFtZXNwYWNlICYmIHNlbGVjdG9yTWF0Y2hlcyhsYWJlbHMsIGdldExhYmVscyhwb2QpKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgb2JqZWN0IHdoaWNoIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUgcG9kcywgcmVwbGljYXRpb24gY29udHJvbGxlcnMsIHNlcnZpY2VzIGFuZCB0aGVpciBhc3NvY2lhdGlvbnNcbiAgICovXG4gIGV4cG9ydCBjbGFzcyBLdWJlcm5ldGVzTW9kZWxTZXJ2aWNlIHtcbiAgICBwdWJsaWMga3ViZXJuZXRlcyA9IDxLdWJlcm5ldGVzU3RhdGU+IG51bGw7XG4gICAgcHVibGljIGFwcHMgPSBbXTtcbiAgICBwdWJsaWMgc2VydmljZXMgPSBbXTtcblxuICAgIHB1YmxpYyByZXBsaWNhdGlvbmNvbnRyb2xsZXJzID0gW107XG4gICAgcHVibGljIGdldCByZXBsaWNhdGlvbkNvbnRyb2xsZXJzKCk6QXJyYXk8YW55PiB7XG4gICAgICByZXR1cm4gdGhpcy5yZXBsaWNhdGlvbmNvbnRyb2xsZXJzO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IHJlcGxpY2F0aW9uQ29udHJvbGxlcnMocmVwbGljYXRpb25Db250cm9sbGVyczpBcnJheTxhbnk+KSB7XG4gICAgICB0aGlzLnJlcGxpY2F0aW9uY29udHJvbGxlcnMgPSByZXBsaWNhdGlvbkNvbnRyb2xsZXJzO1xuICAgIH1cbiAgICBwdWJsaWMgcG9kcyA9IFtdO1xuICAgIHB1YmxpYyBob3N0cyA9IFtdO1xuICAgIHB1YmxpYyBnZXQgbmFtZXNwYWNlcygpOkFycmF5PHN0cmluZz4ge1xuICAgICAgcmV0dXJuIHRoaXMua3ViZXJuZXRlcy5uYW1lc3BhY2VzO1xuICAgIH1cbiAgICAvL3B1YmxpYyBuYW1lc3BhY2VzID0gW107XG4gICAgcHVibGljIHJvdXRlcyA9IFtdO1xuICAgIHB1YmxpYyB0ZW1wbGF0ZXMgPSBbXTtcbiAgICBwdWJsaWMgcmVkcmF3ID0gZmFsc2U7XG4gICAgcHVibGljIHJlc291cmNlVmVyc2lvbnMgPSB7fTtcblxuICAgIC8vIHZhcmlvdXMgdmlld3Mgb24gdGhlIGRhdGFcbiAgICBwdWJsaWMgcG9kc0J5SG9zdCA9IHt9O1xuICAgIHB1YmxpYyBzZXJ2aWNlc0J5S2V5ID0ge307XG4gICAgcHVibGljIHJlcGxpY2F0aW9uQ29udHJvbGxlcnNCeUtleSA9IHt9O1xuICAgIHB1YmxpYyBwb2RzQnlLZXkgPSB7fTtcblxuICAgIHB1YmxpYyBhcHBJbmZvcyA9IFtdO1xuICAgIHB1YmxpYyBhcHBWaWV3cyA9IFtdO1xuICAgIHB1YmxpYyBhcHBGb2xkZXJzID0gW107XG5cbiAgICBwdWJsaWMgZmV0Y2hlZCA9IGZhbHNlO1xuICAgIHB1YmxpYyBnZXQgc2hvd1J1bkJ1dHRvbigpOmJvb2xlYW4ge1xuICAgICAgaWYgKGlzT3BlblNoaWZ0KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF8uYW55KHRoaXMuc2VydmljZXMsIChzZXJ2aWNlKSA9PiB7XG4gICAgICAgIHZhciBuYW1lID0gZ2V0TmFtZShzZXJ2aWNlKTtcbiAgICAgICAgaWYgKG5hbWUgPT09IFwidGVtcGxhdGVzXCIpIHtcbiAgICAgICAgICB2YXIgcG9kQ291bnRlcnMgPSBzZXJ2aWNlLiRwb2RDb3VudGVycztcbiAgICAgICAgICByZXR1cm4gcG9kQ291bnRlcnMgJiYgKHBvZENvdW50ZXJzLnZhbGlkIHx8IHBvZENvdW50ZXJzLnJlYWR5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBidWlsZGNvbmZpZ3MgPSBbXTtcbiAgICBwdWJsaWMgZXZlbnRzID0gW107XG4gICAgcHVibGljIHdvcmtzcGFjZXMgPSBbXTtcbiAgICBwdWJsaWMgcHJvamVjdHMgPSBbXTtcbiAgICBwdWJsaWMgcHJvamVjdCA9IG51bGw7XG5cbiAgICBwdWJsaWMgZ2V0IHNlcnZpY2VBcHBzKCk6QXJyYXk8YW55PiB7XG4gICAgICByZXR1cm4gXy5maWx0ZXIodGhpcy5zZXJ2aWNlcywgKHMpID0+IHtcbiAgICAgICAgcmV0dXJuIHMuJGhvc3QgJiYgcy4kc2VydmljZVVybCAmJiBzLiRwb2RDb3VudFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljICRrZWVwUG9sbGluZygpIHtcbiAgICAgIHJldHVybiBrZWVwUG9sbGluZ01vZGVsO1xuICAgIH1cblxuICAgIHB1YmxpYyBvclJlZHJhdyhmbGFnKSB7XG4gICAgICB0aGlzLnJlZHJhdyA9IHRoaXMucmVkcmF3IHx8IGZsYWc7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFNlcnZpY2UobmFtZXNwYWNlLCBpZCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VydmljZXNCeUtleVtjcmVhdGVLZXkobmFtZXNwYWNlLCBpZCwgJ3NlcnZpY2UnKV07XG4gICAgfVxuXG4gICAgcHVibGljIGdldFJlcGxpY2F0aW9uQ29udHJvbGxlcihuYW1lc3BhY2UsIGlkKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXBsaWNhdGlvbkNvbnRyb2xsZXJzQnlLZXlbY3JlYXRlS2V5KG5hbWVzcGFjZSwgaWQsICdyZXBsaWNhdGlvbkNvbnRyb2xsZXInKV07XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBvZChuYW1lc3BhY2UsIGlkKSB7XG4gICAgICByZXR1cm4gdGhpcy5wb2RzQnlLZXlbY3JlYXRlS2V5KG5hbWVzcGFjZSwgaWQsICdwb2QnKV07XG4gICAgfVxuXG4gICAgcHVibGljIHBvZHNGb3JOYW1lc3BhY2UobmFtZXNwYWNlID0gdGhpcy5jdXJyZW50TmFtZXNwYWNlKCkpIHtcbiAgICAgIHJldHVybiBfLmZpbHRlcih0aGlzLnBvZHMsIHsgbmFtZXNwYWNlOiBuYW1lc3BhY2UgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEJ1aWxkQ29uZmlnKG5hbWUpIHtcbiAgICAgIHJldHVybiBfLmZpbmQodGhpcy5idWlsZGNvbmZpZ3MsIHsgJG5hbWU6IG5hbWUgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFByb2plY3QobmFtZSwgbnMgPSB0aGlzLmN1cnJlbnROYW1lc3BhY2UoKSkge1xuICAgICAgdmFyIGJ1aWxkQ29uZmlnID0gdGhpcy5wcm9qZWN0O1xuICAgICAgaWYgKCFidWlsZENvbmZpZykge1xuICAgICAgICB2YXIgdGV4dCA9IGxvY2FsU3RvcmFnZVtGQUJSSUM4X1BST0pFQ1RfSlNPTl07XG4gICAgICAgIGlmICh0ZXh0KSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGJ1aWxkQ29uZmlnID0gYW5ndWxhci5mcm9tSnNvbih0ZXh0KTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBsb2cud2FybihcIkNvdWxkIG5vdCBwYXJzZSBqc29uIGZvciBcIiArIEZBQlJJQzhfUFJPSkVDVF9KU09OICsgXCIuIFdhczogXCIgKyB0ZXh0ICsgXCIuIFwiICsgZSwgZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoYnVpbGRDb25maWcgJiYgbnMgIT0gZ2V0TmFtZXNwYWNlKGJ1aWxkQ29uZmlnKSAmJiBuYW1lICE9IGJ1aWxkQ29uZmlnLiRuYW1lKSB7XG4gICAgICAgIGJ1aWxkQ29uZmlnID0gdGhpcy5nZXRCdWlsZENvbmZpZyhuYW1lKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBidWlsZENvbmZpZztcbiAgICB9XG5cblxuICAgIHB1YmxpYyBzZXRQcm9qZWN0KGJ1aWxkQ29uZmlnKSB7XG4gICAgICB0aGlzLnByb2plY3QgPSBidWlsZENvbmZpZztcbiAgICAgIGlmIChidWlsZENvbmZpZykge1xuICAgICAgICAvLyBsZXRzIHN0b3JlIGluIGxvY2FsIHN0b3JhZ2VcbiAgICAgICAgdmFyIGxvY2FsU3RvcmFnZSA9IGluamVjdChcImxvY2FsU3RvcmFnZVwiKTtcbiAgICAgICAgaWYgKGxvY2FsU3RvcmFnZSkge1xuICAgICAgICAgIGxvY2FsU3RvcmFnZVtGQUJSSUM4X1BST0pFQ1RfSlNPTl0gPSBhbmd1bGFyLnRvSnNvbihidWlsZENvbmZpZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHNlbGVjdGVkIG5hbWVzcGFjZSBvciB0aGUgZGVmYXVsdCBuYW1lc3BhY2VcbiAgICAgKi9cbiAgICBwdWJsaWMgY3VycmVudE5hbWVzcGFjZSgpIHtcbiAgICAgIHZhciBhbnN3ZXIgPSBudWxsO1xuICAgICAgaWYgKHRoaXMua3ViZXJuZXRlcykge1xuICAgICAgICBhbnN3ZXIgPSB0aGlzLmt1YmVybmV0ZXMuc2VsZWN0ZWROYW1lc3BhY2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gYW5zd2VyIHx8IGRlZmF1bHROYW1lc3BhY2U7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHVwZGF0ZUljb25VcmxBbmRBcHBJbmZvKGVudGl0eSwgbmFtZUZpZWxkOiBzdHJpbmcpIHtcbiAgICAgIHZhciBhbnN3ZXIgPSBudWxsO1xuICAgICAgdmFyIGlkID0gZ2V0TmFtZShlbnRpdHkpO1xuICAgICAgZW50aXR5LiRpY29uVXJsID0gQ29yZS5wYXRoR2V0KGVudGl0eSwgWydtZXRhZGF0YScsICdhbm5vdGF0aW9ucycsICdmYWJyaWM4LicgKyBpZCArICcvaWNvblVybCddKTtcbiAgICAgIGVudGl0eS4kaW5mbyA9IENvcmUucGF0aEdldChlbnRpdHksIFsnbWV0YWRhdGEnLCAnYW5ub3RhdGlvbnMnLCAnZmFicmljOC4nICsgaWQgKyAnL3N1bW1hcnknXSk7XG4gICAgICBpZiAoZW50aXR5LiRpY29uVXJsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChpZCAmJiBuYW1lRmllbGQpIHtcbiAgICAgICAgKHRoaXMudGVtcGxhdGVzIHx8IFtdKS5mb3JFYWNoKCh0ZW1wbGF0ZSkgPT4ge1xuICAgICAgICAgIHZhciBtZXRhZGF0YSA9IHRlbXBsYXRlLm1ldGFkYXRhO1xuICAgICAgICAgIGlmIChtZXRhZGF0YSkge1xuICAgICAgICAgICAgdmFyIGFubm90YXRpb25zID0gbWV0YWRhdGEuYW5ub3RhdGlvbnMgfHwge307XG4gICAgICAgICAgICB2YXIgaWNvblVybCA9IGFubm90YXRpb25zW1wiZmFicmljOC5cIiArIGlkICsgXCIvaWNvblVybFwiXSB8fCBhbm5vdGF0aW9uc1tcImZhYnJpYzgvaWNvblVybFwiXTtcbiAgICAgICAgICAgIGlmIChpY29uVXJsKSB7XG4gICAgICAgICAgICAgICh0ZW1wbGF0ZS5vYmplY3RzIHx8IFtdKS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIGVudGl0eU5hbWUgPSBnZXROYW1lKGl0ZW0pO1xuICAgICAgICAgICAgICAgIGlmIChpZCA9PT0gZW50aXR5TmFtZSkge1xuICAgICAgICAgICAgICAgICAgZW50aXR5LiRpY29uVXJsID0gaWNvblVybDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgICh0aGlzLmFwcEluZm9zIHx8IFtdKS5mb3JFYWNoKChhcHBJbmZvKSA9PiB7XG4gICAgICAgICAgdmFyIGljb25QYXRoID0gYXBwSW5mby5pY29uUGF0aDtcbiAgICAgICAgICBpZiAoaWNvblBhdGggJiYgIWFuc3dlciAmJiBpY29uUGF0aCAhPT0gXCJudWxsXCIpIHtcbiAgICAgICAgICAgIHZhciBpY29uVXJsID0gZ2l0UGF0aFRvVXJsKGljb25QYXRoKTtcbiAgICAgICAgICAgIHZhciBpZHMgPSBDb3JlLnBhdGhHZXQoYXBwSW5mbywgW1wibmFtZXNcIiwgbmFtZUZpZWxkXSk7XG4gICAgICAgICAgICBhbmd1bGFyLmZvckVhY2goaWRzLCAoYXBwSWQpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGFwcElkID09PSBpZCkge1xuICAgICAgICAgICAgICAgIGVudGl0eS4kaWNvblVybCA9IGljb25Vcmw7XG4gICAgICAgICAgICAgICAgZW50aXR5LmFwcFBhdGggPSBhcHBJbmZvLmFwcFBhdGg7XG4gICAgICAgICAgICAgICAgZW50aXR5LiRpbmZvID0gYXBwSW5mbztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICghZW50aXR5LiRpY29uVXJsKSB7XG4gICAgICAgIGVudGl0eS4kaWNvblVybCA9IGRlZmF1bHRJY29uVXJsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBtYXliZUluaXQoKSB7XG4gICAgICB0aGlzLmZldGNoZWQgPSB0cnVlO1xuICAgICAgdGhpcy5zZXJ2aWNlc0J5S2V5ID0ge307XG4gICAgICB0aGlzLnBvZHNCeUtleSA9IHt9O1xuICAgICAgdGhpcy5yZXBsaWNhdGlvbkNvbnRyb2xsZXJzQnlLZXkgPSB7fTtcblxuICAgICAgdGhpcy5wb2RzLmZvckVhY2goKHBvZCkgPT4ge1xuICAgICAgICBpZiAoIXBvZC5raW5kKSBwb2Qua2luZCA9IFwiUG9kXCI7XG4gICAgICAgIHRoaXMucG9kc0J5S2V5W3BvZC5fa2V5XSA9IHBvZDtcbiAgICAgICAgdmFyIGhvc3QgPSBnZXRIb3N0KHBvZCk7XG4gICAgICAgIHBvZC4kbGFiZWxzVGV4dCA9IEt1YmVybmV0ZXMubGFiZWxzVG9TdHJpbmcoZ2V0TGFiZWxzKHBvZCkpO1xuICAgICAgICBpZiAoaG9zdCkge1xuICAgICAgICAgIHBvZC4kbGFiZWxzVGV4dCArPSBsYWJlbEZpbHRlclRleHRTZXBhcmF0b3IgKyBcImhvc3Q9XCIgKyBob3N0O1xuICAgICAgICB9XG4gICAgICAgIHBvZC4kaWNvblVybCA9IGRlZmF1bHRJY29uVXJsO1xuICAgICAgICB0aGlzLmRpc2NvdmVyUG9kQ29ubmVjdGlvbnMocG9kKTtcbiAgICAgICAgcG9kLiRjb250YWluZXJQb3J0cyA9IFtdO1xuXG4gICAgICAgIHZhciBwb2RTdGF0dXMgPSBwb2Quc3RhdHVzIHx8IHt9O1xuICAgICAgICB2YXIgc3RhcnRUaW1lID0gcG9kU3RhdHVzLnN0YXJ0VGltZTtcbiAgICAgICAgcG9kLiRzdGFydFRpbWUgPSBudWxsO1xuICAgICAgICBpZiAoc3RhcnRUaW1lKSB7XG4gICAgICAgICAgcG9kLiRzdGFydFRpbWUgPSBuZXcgRGF0ZShzdGFydFRpbWUpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjcmVhdGVkVGltZSA9IGdldENyZWF0aW9uVGltZXN0YW1wKHBvZCk7XG4gICAgICAgIHBvZC4kY3JlYXRlZFRpbWUgPSBudWxsO1xuICAgICAgICBwb2QuJGFnZSA9IG51bGw7XG4gICAgICAgIGlmIChjcmVhdGVkVGltZSkge1xuICAgICAgICAgIHBvZC4kY3JlYXRlZFRpbWUgPSBuZXcgRGF0ZShjcmVhdGVkVGltZSk7XG4gICAgICAgICAgcG9kLiRhZ2UgPSBodW1hbmRhdGUucmVsYXRpdmVUaW1lKHBvZC4kY3JlYXRlZFRpbWUpO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZWFkeSA9IGlzUmVhZHkocG9kKTtcbiAgICAgICAgcG9kLiRyZWFkeSA9IHJlYWR5O1xuICAgICAgICBwb2QuJHN0YXR1c0NzcyA9IHN0YXR1c1RleHRUb0Nzc0NsYXNzKHBvZFN0YXR1cy5waGFzZSwgcmVhZHkpO1xuXG4gICAgICAgIHZhciBtYXhSZXN0YXJ0Q291bnQgPSAwO1xuICAgICAgICBhbmd1bGFyLmZvckVhY2goQ29yZS5wYXRoR2V0KHBvZCwgW1wic3RhdHVzXCIsIFwiY29udGFpbmVyU3RhdHVzZXNcIl0pLCAoc3RhdHVzKSA9PiB7XG4gICAgICAgICAgdmFyIHJlc3RhcnRDb3VudCA9IHN0YXR1cy5yZXN0YXJ0Q291bnQ7XG4gICAgICAgICAgaWYgKHJlc3RhcnRDb3VudCkge1xuICAgICAgICAgICAgaWYgKHJlc3RhcnRDb3VudCA+IG1heFJlc3RhcnRDb3VudCkge1xuICAgICAgICAgICAgICBtYXhSZXN0YXJ0Q291bnQgPSByZXN0YXJ0Q291bnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG1heFJlc3RhcnRDb3VudCApIHtcbiAgICAgICAgICBwb2QuJHJlc3RhcnRDb3VudCA9IG1heFJlc3RhcnRDb3VudDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaW1hZ2VOYW1lcyA9IFwiXCI7XG4gICAgICAgIGFuZ3VsYXIuZm9yRWFjaChDb3JlLnBhdGhHZXQocG9kLCBbXCJzcGVjXCIsIFwiY29udGFpbmVyc1wiXSksIChjb250YWluZXIpID0+IHtcbiAgICAgICAgICB2YXIgaW1hZ2UgPSBjb250YWluZXIuaW1hZ2U7XG4gICAgICAgICAgaWYgKGltYWdlKSB7XG4gICAgICAgICAgICBpZiAoIWltYWdlTmFtZXMpIHtcbiAgICAgICAgICAgICAgaW1hZ2VOYW1lcyA9IGltYWdlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaW1hZ2VOYW1lcyA9IGltYWdlTmFtZXMgKyBcIiBcIiArIGltYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGlkeCA9IGltYWdlLmxhc3RJbmRleE9mKFwiOlwiKTtcbiAgICAgICAgICAgIGlmIChpZHggPiAwKSB7XG4gICAgICAgICAgICAgIGltYWdlID0gaW1hZ2Uuc3Vic3RyaW5nKDAsIGlkeCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgcGF0aHMgPSBpbWFnZS5zcGxpdChcIi9cIiwgMyk7XG4gICAgICAgICAgICBpZiAocGF0aHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHZhciBhbnN3ZXIgPSBudWxsO1xuICAgICAgICAgICAgICBpZiAocGF0aHMubGVuZ3RoID09IDMpIHtcbiAgICAgICAgICAgICAgICBhbnN3ZXIgPSBwYXRoc1sxXSArIFwiL1wiICsgcGF0aHNbMl07XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAocGF0aHMubGVuZ3RoID09IDIpIHtcbiAgICAgICAgICAgICAgICBhbnN3ZXIgPSBwYXRoc1swXSArIFwiL1wiICsgcGF0aHNbMV07XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYW5zd2VyID0gcGF0aHNbMF0gKyBcIi9cIiArIHBhdGhzWzFdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnRhaW5lci4kaW1hZ2VMaW5rID0gVXJsSGVscGVycy5qb2luKFwiaHR0cHM6Ly9yZWdpc3RyeS5odWIuZG9ja2VyLmNvbS91L1wiLCBhbnN3ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBhbmd1bGFyLmZvckVhY2goY29udGFpbmVyLnBvcnRzLCAocG9ydCkgPT4ge1xuICAgICAgICAgICAgdmFyIGNvbnRhaW5lclBvcnQgPSBwb3J0LmNvbnRhaW5lclBvcnQ7XG4gICAgICAgICAgICBpZiAoY29udGFpbmVyUG9ydCkge1xuICAgICAgICAgICAgICBwb2QuJGNvbnRhaW5lclBvcnRzLnB1c2goY29udGFpbmVyUG9ydCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBwb2QuJGltYWdlTmFtZXMgPSBpbWFnZU5hbWVzO1xuICAgICAgICB2YXIgcG9kU3RhdHVzID0gcG9kU3RhdHVzO1xuICAgICAgICB2YXIgcG9kU3BlYyA9IChwb2Quc3BlYyB8fCB7fSk7XG4gICAgICAgIHBvZC4kcG9kSVAgPSBwb2RTdGF0dXMucG9kSVA7XG4gICAgICAgIHBvZC4kaG9zdCA9IHBvZFNwZWMuaG9zdCB8fCBwb2RTcGVjLm5vZGVOYW1lIHx8IHBvZFN0YXR1cy5ob3N0SVA7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5zZXJ2aWNlcy5mb3JFYWNoKChzZXJ2aWNlKSA9PiB7XG4gICAgICAgIGlmICghc2VydmljZS5raW5kKSBzZXJ2aWNlLmtpbmQgPSBcIlNlcnZpY2VcIjtcbiAgICAgICAgdGhpcy5zZXJ2aWNlc0J5S2V5W3NlcnZpY2UuX2tleV0gPSBzZXJ2aWNlO1xuICAgICAgICB2YXIgc2VsZWN0b3IgPSBnZXRTZWxlY3RvcihzZXJ2aWNlKTtcbiAgICAgICAgc2VydmljZS4kcG9kcyA9IFtdO1xuICAgICAgICBpZiAoIXNlcnZpY2UuJHBvZENvdW50ZXJzKSB7XG4gICAgICAgICAgc2VydmljZS4kcG9kQ291bnRlcnMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcG9kTGlua1VybCA9IFVybEhlbHBlcnMuam9pbihcIi9rdWJlcm5ldGVzL25hbWVzcGFjZVwiLCBzZXJ2aWNlLm1ldGFkYXRhLm5hbWVzcGFjZSwgXCJwb2RzXCIpO1xuICAgICAgICBfLmFzc2lnbihzZXJ2aWNlLiRwb2RDb3VudGVycywgc2VsZWN0b3IgPyBjcmVhdGVQb2RDb3VudGVycyhzZWxlY3RvciwgdGhpcy5wb2RzLCBzZXJ2aWNlLiRwb2RzLCBLdWJlcm5ldGVzLmxhYmVsc1RvU3RyaW5nKHNlbGVjdG9yLCBcIixcIiksIHBvZExpbmtVcmwpIDoge30pO1xuICAgICAgICBzZXJ2aWNlLiRwb2RDb3VudCA9IHNlcnZpY2UuJHBvZHMubGVuZ3RoO1xuXG4gICAgICAgIHZhciBzZWxlY3RlZFBvZHMgPSBzZXJ2aWNlLiRwb2RzO1xuICAgICAgICBzZXJ2aWNlLmNvbm5lY3RUbyA9IHNlbGVjdGVkUG9kcy5tYXAoKHBvZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBwb2QuX2tleTtcbiAgICAgICAgfSkuam9pbignLCcpO1xuICAgICAgICBzZXJ2aWNlLiRsYWJlbHNUZXh0ID0gS3ViZXJuZXRlcy5sYWJlbHNUb1N0cmluZyhnZXRMYWJlbHMoc2VydmljZSkpO1xuICAgICAgICB0aGlzLnVwZGF0ZUljb25VcmxBbmRBcHBJbmZvKHNlcnZpY2UsIFwic2VydmljZU5hbWVzXCIpO1xuICAgICAgICB2YXIgc3BlYyA9IHNlcnZpY2Uuc3BlYyB8fCB7fTtcbiAgICAgICAgc2VydmljZS4kcG9ydGFsSVAgPSBzcGVjLnBvcnRhbElQO1xuICAgICAgICBzZXJ2aWNlLiRzZWxlY3RvclRleHQgPSBLdWJlcm5ldGVzLmxhYmVsc1RvU3RyaW5nKHNwZWMuc2VsZWN0b3IpO1xuICAgICAgICB2YXIgcG9ydHMgPSBfLm1hcChzcGVjLnBvcnRzIHx8IFtdLCBcInBvcnRcIik7XG4gICAgICAgIHNlcnZpY2UuJHBvcnRzID0gcG9ydHM7XG4gICAgICAgIHNlcnZpY2UuJHBvcnRzVGV4dCA9IHBvcnRzLmpvaW4oXCIsIFwiKTtcbiAgICAgICAgdmFyIGljb25VcmwgPSBzZXJ2aWNlLiRpY29uVXJsO1xuICAgICAgICBpZiAoaWNvblVybCAmJiBzZWxlY3RlZFBvZHMpIHtcbiAgICAgICAgICBzZWxlY3RlZFBvZHMuZm9yRWFjaCgocG9kKSA9PiB7XG4gICAgICAgICAgICBwb2QuJGljb25VcmwgPSBpY29uVXJsO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHNlcnZpY2UuJHNlcnZpY2VVcmwgPSBzZXJ2aWNlTGlua1VybChzZXJ2aWNlKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnJlcGxpY2F0aW9uQ29udHJvbGxlcnMuZm9yRWFjaCgocmVwbGljYXRpb25Db250cm9sbGVyKSA9PiB7XG4gICAgICAgIGlmICghcmVwbGljYXRpb25Db250cm9sbGVyLmtpbmQpIHJlcGxpY2F0aW9uQ29udHJvbGxlci5raW5kID0gXCJSZXBsaWNhdGlvbkNvbnRyb2xsZXJcIjtcbiAgICAgICAgdGhpcy5yZXBsaWNhdGlvbkNvbnRyb2xsZXJzQnlLZXlbcmVwbGljYXRpb25Db250cm9sbGVyLl9rZXldID0gcmVwbGljYXRpb25Db250cm9sbGVyXG4gICAgICAgICAgdmFyIHNlbGVjdG9yID0gZ2V0U2VsZWN0b3IocmVwbGljYXRpb25Db250cm9sbGVyKTtcbiAgICAgICAgcmVwbGljYXRpb25Db250cm9sbGVyLiRwb2RzID0gW107XG5cbiAgICAgICAgcmVwbGljYXRpb25Db250cm9sbGVyLiRwb2RDb3VudGVycyA9IHNlbGVjdG9yID8gY3JlYXRlUG9kQ291bnRlcnMoc2VsZWN0b3IsIHRoaXMucG9kcywgcmVwbGljYXRpb25Db250cm9sbGVyLiRwb2RzKSA6IG51bGw7XG4gICAgICAgIHJlcGxpY2F0aW9uQ29udHJvbGxlci4kcG9kQ291bnQgPSByZXBsaWNhdGlvbkNvbnRyb2xsZXIuJHBvZHMubGVuZ3RoO1xuICAgICAgICByZXBsaWNhdGlvbkNvbnRyb2xsZXIuJHJlcGxpY2FzID0gKHJlcGxpY2F0aW9uQ29udHJvbGxlci5zcGVjIHx8IHt9KS5yZXBsaWNhcztcblxuICAgICAgICByZXBsaWNhdGlvbkNvbnRyb2xsZXIuJG9yYWNsZVN0YXR1cyA9IGdldE9yYWNsZVN0YXR1cyhnZXRMYWJlbHMocmVwbGljYXRpb25Db250cm9sbGVyKSk7XG5cbiAgICAgICAgdmFyIHNlbGVjdGVkUG9kcyA9IHJlcGxpY2F0aW9uQ29udHJvbGxlci4kcG9kcztcbiAgICAgICAgcmVwbGljYXRpb25Db250cm9sbGVyLmNvbm5lY3RUbyA9IHNlbGVjdGVkUG9kcy5tYXAoKHBvZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBwb2QuX2tleTtcbiAgICAgICAgfSkuam9pbignLCcpO1xuICAgICAgICByZXBsaWNhdGlvbkNvbnRyb2xsZXIuJGxhYmVsc1RleHQgPSBLdWJlcm5ldGVzLmxhYmVsc1RvU3RyaW5nKGdldExhYmVscyhyZXBsaWNhdGlvbkNvbnRyb2xsZXIpKTtcbiAgICAgICAgcmVwbGljYXRpb25Db250cm9sbGVyLm1ldGFkYXRhLmxhYmVscyA9IEt1YmVybmV0ZXMubGFiZWxUb0NoaW5lc2UoZ2V0TGFiZWxzKHJlcGxpY2F0aW9uQ29udHJvbGxlcikpO1xuICAgICAgICB0aGlzLnVwZGF0ZUljb25VcmxBbmRBcHBJbmZvKHJlcGxpY2F0aW9uQ29udHJvbGxlciwgXCJyZXBsaWNhdGlvbkNvbnRyb2xsZXJOYW1lc1wiKTtcbiAgICAgICAgdmFyIGljb25VcmwgPSAgcmVwbGljYXRpb25Db250cm9sbGVyLiRpY29uVXJsO1xuICAgICAgICBpZiAoaWNvblVybCAmJiBzZWxlY3RlZFBvZHMpIHtcbiAgICAgICAgICBzZWxlY3RlZFBvZHMuZm9yRWFjaCgocG9kKSA9PiB7XG4gICAgICAgICAgICBwb2QuJGljb25VcmwgPSBpY29uVXJsO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gc2VydmljZXMgbWF5IG5vdCBtYXAgdG8gYW4gaWNvbiBidXQgdGhlaXIgcG9kcyBtYXkgZG8gdmlhIHRoZSBSQ1xuICAgICAgLy8gc28gbGV0cyBkZWZhdWx0IGl0Li4uXG4gICAgICB0aGlzLnNlcnZpY2VzLmZvckVhY2goKHNlcnZpY2UpID0+IHtcbiAgICAgICAgdmFyIGljb25VcmwgPSBzZXJ2aWNlLiRpY29uVXJsO1xuICAgICAgICB2YXIgc2VsZWN0ZWRQb2RzID0gc2VydmljZS4kcG9kcztcbiAgICAgICAgaWYgKHNlbGVjdGVkUG9kcykge1xuICAgICAgICAgIGlmICghaWNvblVybCB8fCBpY29uVXJsID09PSBkZWZhdWx0SWNvblVybCkge1xuICAgICAgICAgICAgaWNvblVybCA9IG51bGw7XG4gICAgICAgICAgICBzZWxlY3RlZFBvZHMuZm9yRWFjaCgocG9kKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghaWNvblVybCkge1xuICAgICAgICAgICAgICAgIGljb25VcmwgPSBwb2QuJGljb25Vcmw7XG4gICAgICAgICAgICAgICAgaWYgKGljb25VcmwpIHtcbiAgICAgICAgICAgICAgICAgIHNlcnZpY2UuJGljb25VcmwgPSBpY29uVXJsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy51cGRhdGVBcHBzKCk7XG5cbiAgICAgIHZhciBwb2RzQnlIb3N0ID0ge307XG4gICAgICB0aGlzLnBvZHMuZm9yRWFjaCgocG9kKSA9PiB7XG4gICAgICAgIHZhciBob3N0ID0gZ2V0SG9zdChwb2QpO1xuICAgICAgICB2YXIgcG9kc0Zvckhvc3QgPSBwb2RzQnlIb3N0W2hvc3RdO1xuICAgICAgICBpZiAoIXBvZHNGb3JIb3N0KSB7XG4gICAgICAgICAgcG9kc0Zvckhvc3QgPSBbXTtcbiAgICAgICAgICBwb2RzQnlIb3N0W2hvc3RdID0gcG9kc0Zvckhvc3Q7XG4gICAgICAgIH1cbiAgICAgICAgcG9kc0Zvckhvc3QucHVzaChwb2QpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnBvZHNCeUhvc3QgPSBwb2RzQnlIb3N0O1xuXG4gICAgICB2YXIgdG1wSG9zdHMgPSBbXTtcbiAgICAgIGZvciAodmFyIGhvc3RLZXkgaW4gcG9kc0J5SG9zdCkge1xuICAgICAgICB2YXIgaG9zdFBvZHMgPSBbXTtcbiAgICAgICAgdmFyIHBvZENvdW50ZXJzID0gY3JlYXRlUG9kQ291bnRlcnMoKHBvZCkgPT4gZ2V0SG9zdChwb2QpID09PSBob3N0S2V5LCB0aGlzLnBvZHMsIGhvc3RQb2RzLCBcImhvc3Q9XCIgKyBob3N0S2V5KTtcbiAgICAgICAgdmFyIGhvc3RJUCA9IG51bGw7XG4gICAgICAgIGlmIChob3N0UG9kcy5sZW5ndGgpIHtcbiAgICAgICAgICB2YXIgcG9kID0gaG9zdFBvZHNbMF07XG4gICAgICAgICAgdmFyIGN1cnJlbnRTdGF0ZSA9IHBvZC5zdGF0dXM7XG4gICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSkge1xuICAgICAgICAgICAgaG9zdElQID0gY3VycmVudFN0YXRlLmhvc3RJUDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGhvc3REZXRhaWxzID0ge1xuICAgICAgICAgIG5hbWU6IGhvc3RLZXksXG4gICAgICAgICAgaWQ6IGhvc3RLZXksXG4gICAgICAgICAgZWxlbWVudElkOiBob3N0S2V5LnJlcGxhY2UoL1xcLi9nLCAnXycpLFxuICAgICAgICAgIGhvc3RJUDogaG9zdElQLFxuICAgICAgICAgIHBvZHM6IGhvc3RQb2RzLFxuICAgICAgICAgIGtpbmQ6IFwiSG9zdFwiLFxuICAgICAgICAgICAgJHBvZENvdW50ZXJzOiBwb2RDb3VudGVycyxcbiAgICAgICAgICAgICRpY29uVXJsOiBob3N0SWNvblVybFxuICAgICAgICB9O1xuICAgICAgICB0bXBIb3N0cy5wdXNoKGhvc3REZXRhaWxzKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5ob3N0cyA9IHRtcEhvc3RzO1xuXG4gICAgICBlbnJpY2hCdWlsZENvbmZpZ3ModGhpcy5idWlsZGNvbmZpZ3MpO1xuICAgICAgZW5yaWNoRXZlbnRzKHRoaXMuZXZlbnRzLCB0aGlzKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdXBkYXRlQXBwcygpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIGxldHMgY3JlYXRlIHRoZSBhcHAgdmlld3MgYnkgdHJ5aW5nIHRvIGpvaW4gY29udHJvbGxlcnMgLyBzZXJ2aWNlcyAvIHBvZHMgdGhhdCBhcmUgcmVsYXRlZFxuICAgICAgICB2YXIgYXBwVmlld3MgPSBbXTtcblxuICAgICAgICB0aGlzLnJlcGxpY2F0aW9uQ29udHJvbGxlcnMuZm9yRWFjaCgocmVwbGljYXRpb25Db250cm9sbGVyKSA9PiB7XG4gICAgICAgICAgdmFyIG5hbWUgPSBnZXROYW1lKHJlcGxpY2F0aW9uQ29udHJvbGxlcik7XG4gICAgICAgICAgdmFyICRpY29uVXJsID0gcmVwbGljYXRpb25Db250cm9sbGVyLiRpY29uVXJsO1xuICAgICAgICAgIGFwcFZpZXdzLnB1c2goe1xuICAgICAgICAgICAgYXBwUGF0aDogXCIvZHVtbXlQYXRoL1wiICsgbmFtZSxcbiAgICAgICAgICAgICRuYW1lOiBuYW1lLFxuICAgICAgICAgICAgJGluZm86IHtcbiAgICAgICAgICAgICAgJGljb25Vcmw6ICRpY29uVXJsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJGljb25Vcmw6ICRpY29uVXJsLFxuICAgICAgICAgICAgcmVwbGljYXRpb25Db250cm9sbGVyczogW3JlcGxpY2F0aW9uQ29udHJvbGxlcl0sXG4gICAgICAgICAgICBwb2RzOiByZXBsaWNhdGlvbkNvbnRyb2xsZXIuJHBvZHMgfHwgW10sXG4gICAgICAgICAgICBzZXJ2aWNlczogW11cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIG5vTWF0Y2hlcyA9IFtdO1xuICAgICAgICB0aGlzLnNlcnZpY2VzLmZvckVhY2goKHNlcnZpY2UpID0+IHtcbiAgICAgICAgICAvLyBub3cgbGV0cyBzZWUgaWYgd2UgY2FuIGZpbmQgYW4gYXBwIHdpdGggYW4gUkMgb2YgdGhlIHNhbWUgc2VsZWN0b3JcbiAgICAgICAgICB2YXIgbWF0Y2hlc0FwcCA9IG51bGw7XG4gICAgICAgICAgYXBwVmlld3MuZm9yRWFjaCgoYXBwVmlldykgPT4ge1xuICAgICAgICAgICAgYXBwVmlldy5yZXBsaWNhdGlvbkNvbnRyb2xsZXJzLmZvckVhY2goKHJlcGxpY2F0aW9uQ29udHJvbGxlcikgPT4ge1xuICAgICAgICAgICAgICB2YXIgcmVwU2VsZWN0b3IgPSBnZXRTZWxlY3RvcihyZXBsaWNhdGlvbkNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICBpZiAocmVwU2VsZWN0b3IgJiZcbiAgICAgICAgICAgICAgICAgIHNlbGVjdG9yTWF0Y2hlcyhyZXBTZWxlY3RvciwgZ2V0U2VsZWN0b3Ioc2VydmljZSkpICYmXG4gICAgICAgICAgICAgICAgICBnZXROYW1lc3BhY2Uoc2VydmljZSkgPT09IGdldE5hbWVzcGFjZShyZXBsaWNhdGlvbkNvbnRyb2xsZXIpKSB7XG4gICAgICAgICAgICAgICAgbWF0Y2hlc0FwcCA9IGFwcFZpZXc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKG1hdGNoZXNBcHApIHtcbiAgICAgICAgICAgIG1hdGNoZXNBcHAuc2VydmljZXMucHVzaChzZXJ2aWNlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbm9NYXRjaGVzLnB1c2goc2VydmljZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbG9nLmRlYnVnKFwibm8gbWF0Y2hlczogXCIsIG5vTWF0Y2hlcyk7XG4gICAgICAgIG5vTWF0Y2hlcy5mb3JFYWNoKChzZXJ2aWNlKSA9PiB7XG4gICAgICAgICAgdmFyIGFwcFZpZXcgPSBfLmZpbmQoYXBwVmlld3MsIChhcHBWaWV3KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gXy5hbnkoYXBwVmlldy5yZXBsaWNhdGlvbkNvbnRyb2xsZXJzLCAocmMpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIF8uc3RhcnRzV2l0aChnZXROYW1lKHJjKSwgZ2V0TmFtZShzZXJ2aWNlKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoYXBwVmlldykge1xuICAgICAgICAgICAgYXBwVmlldy5zZXJ2aWNlcy5wdXNoKHNlcnZpY2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgJGljb25VcmwgPSBzZXJ2aWNlLiRpY29uVXJsO1xuICAgICAgICAgICAgYXBwVmlld3MucHVzaCh7XG4gICAgICAgICAgICAgIGFwcFBhdGg6IFwiL2R1bW15UGF0aC9cIiArIG5hbWUsXG4gICAgICAgICAgICAgICRuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICAkaW5mbzoge1xuICAgICAgICAgICAgICAgICRpY29uVXJsOiAkaWNvblVybFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICRpY29uVXJsOiAkaWNvblVybCxcbiAgICAgICAgICAgICAgcmVwbGljYXRpb25Db250cm9sbGVyczogW10sXG4gICAgICAgICAgICAgIHBvZHM6IHNlcnZpY2UuJHBvZHMgfHwgW10sXG4gICAgICAgICAgICAgIHNlcnZpY2VzOiBbc2VydmljZV1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgYW5ndWxhci5mb3JFYWNoKHRoaXMucm91dGVzLCAocm91dGUpID0+IHtcbiAgICAgICAgICB2YXIgbWV0YWRhdGEgPSByb3V0ZS5tZXRhZGF0YSB8fCB7fTtcbiAgICAgICAgICB2YXIgc3BlYyA9IHJvdXRlLnNwZWMgfHwge307XG4gICAgICAgICAgdmFyIHNlcnZpY2VOYW1lID0gQ29yZS5wYXRoR2V0KHNwZWMsIFtcInRvXCIsIFwibmFtZVwiXSk7XG4gICAgICAgICAgdmFyIGhvc3QgPSBzcGVjLmhvc3Q7XG4gICAgICAgICAgdmFyIG5hbWVzcGFjZSA9IGdldE5hbWVzcGFjZShyb3V0ZSk7XG4gICAgICAgICAgaWYgKHNlcnZpY2VOYW1lICYmIGhvc3QpIHtcbiAgICAgICAgICAgIHZhciBzZXJ2aWNlID0gdGhpcy5nZXRTZXJ2aWNlKG5hbWVzcGFjZSwgc2VydmljZU5hbWUpO1xuICAgICAgICAgICAgaWYgKHNlcnZpY2UpIHtcbiAgICAgICAgICAgICAgc2VydmljZS4kaG9zdCA9IGhvc3Q7XG5cbiAgICAgICAgICAgICAgLy8gVE9ETyB3ZSBjb3VsZCB1c2Ugc29tZSBhbm5vdGF0aW9ucyAvIG1ldGFkYXRhIHRvIGRlZHVjZSB3aGF0IFVSTCB3ZSBzaG91bGQgdXNlIHRvIG9wZW4gdGhpc1xuICAgICAgICAgICAgICAvLyBzZXJ2aWNlIGluIHRoZSBjb25zb2xlLiBGb3Igbm93IGp1c3QgYXNzdW1lIGl0cyBodHRwOlxuXG4gICAgICAgICAgICAgIGlmIChob3N0KSB7XG4gICAgICAgICAgICAgICAgdmFyIGhvc3RVcmwgPSAgaG9zdDtcbiAgICAgICAgICAgICAgICBpZiAoaG9zdFVybC5pbmRleE9mKFwiOi8vXCIpIDwgMCkge1xuICAgICAgICAgICAgICAgICAgaG9zdFVybCA9IFwiaHR0cDovL1wiICsgaG9zdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2VydmljZS4kY29ubmVjdFVybCA9IFVybEhlbHBlcnMuam9pbihob3N0VXJsLCAgXCIvXCIpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgLy8gVE9ETyBkZWZpbml0ZWx5IG5lZWQgdGhhdCBhbm5vdGF0aW9uLCB0ZW1wIGhhY2sgZm9yIGFwaW1hbiBsaW5rXG4gICAgICAgICAgICAgIGlmIChnZXROYW1lKHNlcnZpY2UpID09PSAnYXBpbWFuJyAmJiBob3N0KSB7XG4gICAgICAgICAgICAgICAgc2VydmljZS4kY29ubmVjdFVybCA9ICg8YW55PiBuZXcgVVJJKCkuaG9zdChzZXJ2aWNlLiRob3N0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5wYXRoKCdhcGltYW51aS9pbmRleC5odG1sJykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnF1ZXJ5KHt9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5oYXNoKFVSSS5lbmNvZGUoYW5ndWxhci50b0pzb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja1RvOiBuZXcgVVJJKCkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiBIYXd0aW9PQXV0aC5nZXRPQXV0aFRva2VuKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSkpLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiQ291bGQgbm90IGZpbmQgc2VydmljZSBcIiArIHNlcnZpY2VOYW1lICsgXCIgbmFtZXNwYWNlIFwiICsgbmFtZXNwYWNlICsgXCIgZm9yIHJvdXRlOiBcIiArIG1ldGFkYXRhLm5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXBwVmlld3MgPSBfLnNvcnRCeShwb3B1bGF0ZUtleXMoYXBwVmlld3MpLCAoYXBwVmlldykgPT4gYXBwVmlldy5fa2V5KTtcblxuICAgICAgICBBcnJheUhlbHBlcnMuc3luYyh0aGlzLmFwcFZpZXdzLCBhcHBWaWV3cywgJyRuYW1lJyk7XG5cbiAgICAgICAgaWYgKHRoaXMuYXBwSW5mb3MgJiYgdGhpcy5hcHBWaWV3cykge1xuICAgICAgICAgIHZhciBmb2xkZXJNYXAgPSB7fTtcbiAgICAgICAgICB2YXIgZm9sZGVycyA9IFtdO1xuICAgICAgICAgIHZhciBhcHBNYXAgPSB7fTtcbiAgICAgICAgICBhbmd1bGFyLmZvckVhY2godGhpcy5hcHBJbmZvcywgKGFwcEluZm8pID0+IHtcbiAgICAgICAgICAgIGlmICghYXBwSW5mby4kaWNvblVybCAmJiBhcHBJbmZvLmljb25QYXRoICYmIGFwcEluZm8uaWNvblBhdGggIT09IFwibnVsbFwiKSB7XG4gICAgICAgICAgICAgIGFwcEluZm8uJGljb25VcmwgPSBnaXRQYXRoVG9VcmwoYXBwSW5mby5pY29uUGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYXBwUGF0aCA9IGFwcEluZm8uYXBwUGF0aDtcbiAgICAgICAgICAgIGlmIChhcHBQYXRoKSB7XG4gICAgICAgICAgICAgIGFwcE1hcFthcHBQYXRoXSA9IGFwcEluZm87XG4gICAgICAgICAgICAgIHZhciBpZHggPSBhcHBQYXRoLmxhc3RJbmRleE9mKFwiL1wiKTtcbiAgICAgICAgICAgICAgdmFyIGZvbGRlclBhdGggPSBcIlwiO1xuICAgICAgICAgICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgICAgICAgICBmb2xkZXJQYXRoID0gYXBwUGF0aC5zdWJzdHJpbmcoMCwgaWR4KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBmb2xkZXJQYXRoID0gQ29yZS50cmltTGVhZGluZyhmb2xkZXJQYXRoLCBcIi9cIik7XG4gICAgICAgICAgICAgIHZhciBmb2xkZXIgPSBmb2xkZXJNYXBbZm9sZGVyUGF0aF07XG4gICAgICAgICAgICAgIGlmICghZm9sZGVyKSB7XG4gICAgICAgICAgICAgICAgZm9sZGVyID0ge1xuICAgICAgICAgICAgICAgICAgcGF0aDogZm9sZGVyUGF0aCxcbiAgICAgICAgICAgICAgICAgIGV4cGFuZGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgYXBwczogW11cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGZvbGRlcnMucHVzaChmb2xkZXIpO1xuICAgICAgICAgICAgICAgIGZvbGRlck1hcFtmb2xkZXJQYXRoXSA9IGZvbGRlcjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBmb2xkZXIuYXBwcy5wdXNoKGFwcEluZm8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuYXBwRm9sZGVycyA9IF8uc29ydEJ5KGZvbGRlcnMsIFwicGF0aFwiKTtcblxuICAgICAgICAgIHZhciBhcHBzID0gW107XG4gICAgICAgICAgdmFyIGRlZmF1bHRJbmZvID0ge1xuICAgICAgICAgICAgJGljb25Vcmw6IGRlZmF1bHRJY29uVXJsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaCh0aGlzLmFwcFZpZXdzLCAoYXBwVmlldzphbnkpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHZhciBhcHBQYXRoID0gYXBwVmlldy5hcHBQYXRoO1xuXG4gICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICBUT0RPXG4gICAgICAgICAgICAgICBhcHBWaWV3LiRzZWxlY3QgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICBLdWJlcm5ldGVzLnNldEpzb24oJHNjb3BlLCBhcHBWaWV3LmlkLCAkc2NvcGUubW9kZWwuYXBwcyk7XG4gICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgICB2YXIgYXBwSW5mbzphbnkgPSBhbmd1bGFyLmNvcHkoZGVmYXVsdEluZm8pO1xuICAgICAgICAgICAgICBpZiAoYXBwUGF0aCkge1xuICAgICAgICAgICAgICAgIGFwcEluZm8gPSBhcHBNYXBbYXBwUGF0aF0gfHwgYXBwSW5mbztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoIWFwcFZpZXcuJGluZm8pIHtcbiAgICAgICAgICAgICAgICBhcHBWaWV3LiRpbmZvID0gZGVmYXVsdEluZm87XG4gICAgICAgICAgICAgICAgYXBwVmlldy4kaW5mbyA9IGFwcEluZm87XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYXBwVmlldy5pZCA9IGFwcFBhdGg7XG4gICAgICAgICAgICAgIGlmICghYXBwVmlldy4kbmFtZSkge1xuICAgICAgICAgICAgICAgIGFwcFZpZXcuJG5hbWUgPSBhcHBJbmZvLm5hbWUgfHwgYXBwVmlldy4kbmFtZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoIWFwcFZpZXcuJGljb25VcmwpIHtcbiAgICAgICAgICAgICAgICBhcHBWaWV3LiRpY29uVXJsID0gYXBwSW5mby4kaWNvblVybDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhcHBzLnB1c2goYXBwVmlldyk7XG4gICAgICAgICAgICAgIGFwcFZpZXcuJHBvZENvdW50ZXJzID0gY3JlYXRlQXBwVmlld1BvZENvdW50ZXJzKGFwcFZpZXcpO1xuICAgICAgICAgICAgICBhcHBWaWV3LiRwb2RDb3VudCA9IChhcHBWaWV3LnBvZHMgfHwgW10pLmxlbmd0aDtcbiAgICAgICAgICAgICAgYXBwVmlldy4kcmVwbGljYXRpb25Db250cm9sbGVyc1RleHQgPSAoYXBwVmlldy5yZXBsaWNhdGlvbkNvbnRyb2xsZXJzIHx8IFtdKS5tYXAoKGkpID0+IGlbXCJfa2V5XCJdKS5qb2luKFwiIFwiKTtcbiAgICAgICAgICAgICAgYXBwVmlldy4kc2VydmljZXNUZXh0PSAoYXBwVmlldy5zZXJ2aWNlcyB8fCBbXSkubWFwKChpKSA9PiBpW1wiX2tleVwiXSkuam9pbihcIiBcIik7XG4gICAgICAgICAgICAgIGFwcFZpZXcuJHNlcnZpY2VWaWV3cyA9IGNyZWF0ZUFwcFZpZXdTZXJ2aWNlVmlld3MoYXBwVmlldyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIHVwZGF0ZSBhcHBWaWV3czogXCIgKyBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICAvL3RoaXMuYXBwcyA9IGFwcHM7XG4gICAgICAgICAgdGhpcy5hcHBzID0gdGhpcy5hcHBWaWV3cztcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2cud2FybihcIkNhdWdodCBlcnJvcjogXCIgKyBlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZGlzY292ZXJQb2RDb25uZWN0aW9ucyhlbnRpdHkpIHtcbiAgICAgIHZhciBpbmZvID0gQ29yZS5wYXRoR2V0KGVudGl0eSwgW1wic3RhdHVzXCIsIFwiaW5mb1wiXSk7XG4gICAgICB2YXIgaG9zdFBvcnQgPSBudWxsO1xuICAgICAgdmFyIGN1cnJlbnRTdGF0ZSA9IGVudGl0eS5zdGF0dXMgfHwge307XG4gICAgICB2YXIgZGVzaXJlZFN0YXRlID0gZW50aXR5LnNwZWMgfHwge307XG4gICAgICB2YXIgcG9kSWQgPSBnZXROYW1lKGVudGl0eSk7XG4gICAgICB2YXIgaG9zdCA9IGN1cnJlbnRTdGF0ZVtcImhvc3RJUFwiXTtcbiAgICAgIHZhciBwb2RJUCA9IGN1cnJlbnRTdGF0ZVtcInBvZElQXCJdO1xuICAgICAgdmFyIGhhc0RvY2tlciA9IGZhbHNlO1xuICAgICAgdmFyIGZvdW5kQ29udGFpbmVyUG9ydCA9IG51bGw7XG4gICAgICBpZiAoZGVzaXJlZFN0YXRlKSB7XG4gICAgICAgIHZhciBjb250YWluZXJzID0gZGVzaXJlZFN0YXRlLmNvbnRhaW5lcnM7XG4gICAgICAgIGFuZ3VsYXIuZm9yRWFjaChjb250YWluZXJzLCAoY29udGFpbmVyKSA9PiB7XG4gICAgICAgICAgaWYgKCFob3N0UG9ydCkge1xuICAgICAgICAgICAgdmFyIHBvcnRzID0gY29udGFpbmVyLnBvcnRzO1xuICAgICAgICAgICAgYW5ndWxhci5mb3JFYWNoKHBvcnRzLCAocG9ydCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWhvc3RQb3J0KSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lclBvcnQgPSBwb3J0LmNvbnRhaW5lclBvcnQ7XG4gICAgICAgICAgICAgICAgdmFyIHBvcnROYW1lID0gcG9ydC5uYW1lO1xuICAgICAgICAgICAgICAgIHZhciBjb250YWluZXJIb3N0UG9ydCA9IHBvcnQuaG9zdFBvcnQ7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lclBvcnQgPT09IDg3NzggfHwgXCJqb2xva2lhXCIgPT09IHBvcnROYW1lKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoY29udGFpbmVyUG9ydCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocG9kSVApIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3VuZENvbnRhaW5lclBvcnQgPSBjb250YWluZXJQb3J0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250YWluZXJIb3N0UG9ydCkge1xuICAgICAgICAgICAgICAgICAgICAgIGhvc3RQb3J0ID0gY29udGFpbmVySG9zdFBvcnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoZm91bmRDb250YWluZXJQb3J0ICYmIHBvZElkICYmIGlzUnVubmluZyhjdXJyZW50U3RhdGUpKSB7XG4gICAgICAgIGlmICghS3ViZXJuZXRlcy5pc09wZW5TaGlmdCkge1xuICAgICAgICAgIC8vIFRPRE8gdGVtcCB3b3JrYXJvdW5kIGZvciBrOHMgb24gR0tFIGh0dHBzOi8vZ2l0aHViLmNvbS9rdWJlcm5ldGVzL2t1YmVybmV0ZXMvaXNzdWVzLzE3MTcyXG4gICAgICAgICAgZW50aXR5LiRqb2xva2lhVXJsID0gVXJsSGVscGVycy5qb2luKEt1YmVybmV0ZXMubWFzdGVyQXBpVXJsKCksXG4gICAgICAgICAgICAgIFwiYXBpXCIsXG4gICAgICAgICAgICAgIEt1YmVybmV0ZXMuZGVmYXVsdEFwaVZlcnNpb24sXG4gICAgICAgICAgICAgIFwicHJveHlcIixcbiAgICAgICAgICAgICAgXCJuYW1lc3BhY2VzXCIsXG4gICAgICAgICAgICAgIGVudGl0eS5tZXRhZGF0YS5uYW1lc3BhY2UgLFxuICAgICAgICAgICAgICBcInBvZHNcIixcbiAgICAgICAgICAgICAgLy9cImh0dHBzOlwiICsgcG9kSWQgKyBcIjpcIiArIGZvdW5kQ29udGFpbmVyUG9ydCxcbiAgICAgICAgICAgICAgcG9kSWQgKyBcIjpcIiArIGZvdW5kQ29udGFpbmVyUG9ydCxcbiAgICAgICAgICAgICAgXCJqb2xva2lhL1wiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbnRpdHkuJGpvbG9raWFVcmwgPSBVcmxIZWxwZXJzLmpvaW4oS3ViZXJuZXRlcy5tYXN0ZXJBcGlVcmwoKSxcbiAgICAgICAgICAgICAgXCJhcGlcIixcbiAgICAgICAgICAgICAgS3ViZXJuZXRlcy5kZWZhdWx0QXBpVmVyc2lvbixcbiAgICAgICAgICAgICAgXCJuYW1lc3BhY2VzXCIsXG4gICAgICAgICAgICAgIGVudGl0eS5tZXRhZGF0YS5uYW1lc3BhY2UgLFxuICAgICAgICAgICAgICBcInBvZHNcIixcbiAgICAgICAgICAgICAgXCJodHRwczpcIiArIHBvZElkICsgXCI6XCIgKyBmb3VuZENvbnRhaW5lclBvcnQsXG4gICAgICAgICAgICAgIFwicHJveHkvam9sb2tpYS9cIik7XG5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFRlbXBsYXRlU2VydmljZShtb2RlbCkge1xuICAgIHZhciBrZXkgPSBjcmVhdGVLZXkoJ2RlZmF1bHQnLCAndGVtcGxhdGVzJywgJ3NlcnZpY2UnKTtcbiAgICB2YXIgYW5zd2VyID0gbW9kZWwuc2VydmljZXNCeUtleVtrZXldO1xuICAgIGxvZy5kZWJ1ZyhcImZvdW5kIHRlbXBsYXRlIHNlcnZpY2U6IFwiLCBhbnN3ZXIpO1xuICAgIHJldHVybiBhbnN3ZXI7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG1vZGVsIHNlcnZpY2Ugd2hpY2gga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSBwb2RzLCByZXBsaWNhdGlvbiBjb250cm9sbGVycyBhbmQgc2VydmljZXMgYWxvbmdcbiAgICogd2l0aCB0aGVpciBhc3NvY2lhdGlvbnMgYW5kIHN0YXR1c1xuICAgKi9cbiAgX21vZHVsZS5mYWN0b3J5KCdLdWJlcm5ldGVzTW9kZWwnLCBbJyRyb290U2NvcGUnLCAnJGh0dHAnLCAnS3ViZXJuZXRlc0FwaVVSTCcsICdLdWJlcm5ldGVzU3RhdGUnLCAnV2F0Y2hlclNlcnZpY2UnLCAnJGxvY2F0aW9uJywgJyRyZXNvdXJjZScsICgkcm9vdFNjb3BlLCAkaHR0cCwgQXBwTGlicmFyeVVSTCwgS3ViZXJuZXRlc1N0YXRlLCB3YXRjaGVyOldhdGNoZXJTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJlc291cmNlOm5nLnJlc291cmNlLklSZXNvdXJjZVNlcnZpY2UpID0+IHtcblxuICAgIHZhciAkc2NvcGUgPSBuZXcgS3ViZXJuZXRlc01vZGVsU2VydmljZSgpO1xuICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xuXG4gICAgLy8gY3JlYXRlIGFsbCBvZiBvdXIgcmVzb3VyY2UgY2xhc3Nlc1xuICAgIHZhciB0eXBlTmFtZXMgPSB3YXRjaGVyLmdldFR5cGVzKCk7XG4gICAgXy5mb3JFYWNoKHR5cGVOYW1lcywgKHR5cGU6c3RyaW5nKSA9PiB7XG4gICAgICB2YXIgdXJsVGVtcGxhdGUgPSB1cmlUZW1wbGF0ZUZvckt1YmVybmV0ZXNLaW5kKHR5cGUpO1xuICAgICAgJHNjb3BlW3R5cGUgKyAnUmVzb3VyY2UnXSA9IGNyZWF0ZVJlc291cmNlKHR5cGUsIHVybFRlbXBsYXRlLCAkcmVzb3VyY2UsICRzY29wZSk7XG4gICAgfSk7XG5cbiAgICBpZiAoIWlzT3BlblNoaWZ0KSB7XG4gICAgICAvLyByZWdpc3RlciBjdXN0b20gVVJMIGZhY3RvcmllcyBmb3IgdGVtcGxhdGVzL3Byb2plY3RzXG4gICAgICB3YXRjaGVyLnJlZ2lzdGVyQ3VzdG9tVXJsRnVuY3Rpb24oS3ViZXJuZXRlc0FQSS5XYXRjaFR5cGVzLkJVSUxEX0NPTkZJR1MsIChvcHRpb25zOkt1YmVybmV0ZXNBUEkuSzhTT3B0aW9ucykgPT4ge1xuICAgICAgICB2YXIgdGVtcGxhdGVTZXJ2aWNlID0gZ2V0VGVtcGxhdGVTZXJ2aWNlKCRzY29wZSk7XG4gICAgICAgIGlmICh0ZW1wbGF0ZVNlcnZpY2UpIHtcbiAgICAgICAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKHRlbXBsYXRlU2VydmljZS5wcm94eVVybCwgJy9vYXBpL3YxL25hbWVzcGFjZXMvZGVmYXVsdC9idWlsZGNvbmZpZ3MvJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9KTtcbiAgICAgIC8vIHJlZ2lzdGVyIGN1c3RvbSBVUkwgZmFjdG9yaWVzIGZvciB0ZW1wbGF0ZXMvcHJvamVjdHNcbiAgICAgIHdhdGNoZXIucmVnaXN0ZXJDdXN0b21VcmxGdW5jdGlvbihLdWJlcm5ldGVzQVBJLldhdGNoVHlwZXMuVEVNUExBVEVTLCAob3B0aW9uczpLdWJlcm5ldGVzQVBJLks4U09wdGlvbnMpID0+IHtcbiAgICAgICAgdmFyIHRlbXBsYXRlU2VydmljZSA9IGdldFRlbXBsYXRlU2VydmljZSgkc2NvcGUpO1xuICAgICAgICBpZiAodGVtcGxhdGVTZXJ2aWNlKSB7XG4gICAgICAgICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbih0ZW1wbGF0ZVNlcnZpY2UucHJveHlVcmwsICcvb2FwaS92MS9uYW1lc3BhY2VzL2RlZmF1bHQvdGVtcGxhdGVzLycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gcmVnaXN0ZXIgZm9yIGFsbCB1cGRhdGVzIG9uIG9iamVjdHNcblx0XHR3YXRjaGVyLnJlZ2lzdGVyTGlzdGVuZXIoKG9iamVjdHM6T2JqZWN0TWFwKSA9PiB7XG5cdFx0XHR2YXIgdHlwZXMgPSB3YXRjaGVyLmdldFR5cGVzKCk7XG5cdFx0XHRfLmZvckVhY2godHlwZXMsICh0eXBlOnN0cmluZykgPT4ge1xuXHRcdFx0XHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRcdFx0XHRjYXNlIFdhdGNoVHlwZXMuU0VSVklDRVM6XG5cdFx0XHRcdFx0XHR2YXIgaXRlbXMgPSBwb3B1bGF0ZUtleXMob2JqZWN0c1t0eXBlXSk7XG5cdFx0XHRcdFx0XHRhbmd1bGFyLmZvckVhY2goaXRlbXMsIChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgIGl0ZW0ucHJveHlVcmwgPSBrdWJlcm5ldGVzUHJveHlVcmxGb3JTZXJ2aWNlKGt1YmVybmV0ZXNBcGlVcmwoKSwgaXRlbSk7XG4gICAgICAgICAgICB9KTtcblx0XHRcdFx0XHRcdCRzY29wZVt0eXBlXSA9IGl0ZW1zO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG4gICAgICAgICAgY2FzZSBXYXRjaFR5cGVzLlRFTVBMQVRFUzpcbiAgICAgICAgICBjYXNlIFdhdGNoVHlwZXMuUk9VVEVTOlxuICAgICAgICAgIGNhc2UgV2F0Y2hUeXBlcy5CVUlMRFM6XG4gICAgICAgICAgY2FzZSBXYXRjaFR5cGVzLkJVSUxEX0NPTkZJR1M6XG4gICAgICAgICAgY2FzZSBXYXRjaFR5cGVzLklNQUdFX1NUUkVBTVM6XG4gICAgICAgICAgICAvLyBkb24ndCBwdXQgYSBicmVhayBoZXJlIDotKVxuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHQkc2NvcGVbdHlwZV0gPSBwb3B1bGF0ZUtleXMob2JqZWN0c1t0eXBlXSk7XG5cdFx0XHRcdH1cbiAgICAgICAgbG9nLmRlYnVnKFwiVHlwZTogXCIsIHR5cGUsIFwiIG9iamVjdDogXCIsICRzY29wZVt0eXBlXSk7XG5cdFx0XHR9KTtcblx0XHRcdCRzY29wZS5tYXliZUluaXQoKTtcbiAgICAgICRyb290U2NvcGUuJGJyb2FkY2FzdCgna3ViZXJuZXRlc01vZGVsVXBkYXRlZCcsICRzY29wZSk7XG4gICAgICBDb3JlLiRhcHBseSgkcm9vdFNjb3BlKTtcblx0XHR9KTtcblxuICAgIC8vIHNldCB0aGUgc2VsZWN0ZWQgbmFtZXNwYWNlIGlmIHNldCBpbiB0aGUgbG9jYXRpb24gYmFyXG4gICAgLy8gb3RoZXJ3aXNlIHVzZSB3aGF0ZXZlciBwcmV2aW91c2x5IHNlbGVjdGVkIG5hbWVzcGFjZSBpc1xuICAgIC8vIGF2YWlsYWJsZVxuICAgIHZhciBzZWFyY2ggPSAkbG9jYXRpb24uc2VhcmNoKCk7XG4gICAgaWYgKCduYW1lc3BhY2UnIGluIHNlYXJjaCkge1xuICAgICAgd2F0Y2hlci5zZXROYW1lc3BhY2Uoc2VhcmNoWyduYW1lc3BhY2UnXSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2VsZWN0UG9kcyhwb2RzLCBuYW1lc3BhY2UsIGxhYmVscykge1xuICAgICAgcmV0dXJuIHBvZHMuZmlsdGVyKChwb2QpID0+IHtcbiAgICAgICAgcmV0dXJuIGdldE5hbWVzcGFjZShwb2QpID09PSBuYW1lc3BhY2UgJiYgc2VsZWN0b3JNYXRjaGVzKGxhYmVscywgZ2V0TGFiZWxzKHBvZCkpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiAkc2NvcGU7XG4gIH1dKTtcblxufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4va3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzSW50ZXJmYWNlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9rdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNNb2RlbC50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJQbHVnaW4udHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyRW5yaWNoZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckhlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyTmF2aWdhdGlvbi50c1wiLz5cblxubW9kdWxlIERldmVsb3BlciB7XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNsaWNrQXBwcm92ZShlbGVtZW50LCB1cmwpIHtcbiAgICB2YXIgJHNjb3BlOiBhbnkgPSBhbmd1bGFyLmVsZW1lbnQoZWxlbWVudCkuc2NvcGUoKTtcbiAgICBpZiAoJHNjb3BlKSB7XG4gICAgICAkc2NvcGUuYXBwcm92ZSh1cmwsIGVsZW1lbnQudGV4dCk7XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IHZhciBKZW5raW5zTG9nQ29udHJvbGxlciA9IF9tb2R1bGUuY29udHJvbGxlcihcIkRldmVsb3Blci5KZW5raW5zTG9nQ29udHJvbGxlclwiLCAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNTY2hlbWEsXG4gICAgICAgICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCAkbW9kYWwsIEt1YmVybmV0ZXNBcGlVUkwsIFNlcnZpY2VSZWdpc3RyeSwgJGVsZW1lbnQpID0+IHtcblxuICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xuICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcblxuICAgICRzY29wZS5zZWxlY3RlZEJ1aWxkID0gJHNjb3BlLiRldmFsKCdidWlsZCcpIHx8ICRzY29wZS4kZXZhbCgnc2VsZWN0ZWRCdWlsZCcpO1xuXG4gICAgJHNjb3BlLmlkID0gJHNjb3BlLiRldmFsKCdidWlsZC5pZCcpIHx8ICRyb3V0ZVBhcmFtc1tcImlkXCJdO1xuICAgICRzY29wZS5zY2hlbWEgPSBLdWJlcm5ldGVzU2NoZW1hO1xuICAgICRzY29wZS5lbnRpdHlDaGFuZ2VkQ2FjaGUgPSB7fTtcblxuICAgICRlbGVtZW50Lm9uKCckZGVzdHJveScsICgpID0+IHtcbiAgICAgICRzY29wZS4kZGVzdHJveSgpO1xuICAgIH0pO1xuXG4gICAgJHNjb3BlLmxvZyA9IHtcbiAgICAgIGh0bWw6IFwiXCIsXG4gICAgICBzdGFydDogMCxcbiAgICAgIGZpcnN0SWR4OiBudWxsXG4gICAgfTtcblxuICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICB1cGRhdGVKZW5raW5zTGluaygpO1xuICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICB9KTtcblxuICAgICRzY29wZS4kb24oJ2plbmtpbnNTZWxlY3RlZEJ1aWxkJywgKGV2ZW50LCBidWlsZCkgPT4ge1xuICAgICAgbG9nLmluZm8oXCI9PT09IGplbmtpbnMgYnVpbGQgc2VsZWN0ZWQhIFwiICsgYnVpbGQuaWQgKyBcIiBcIiArIGJ1aWxkLiRqb2JJZCk7XG4gICAgICAkc2NvcGUuc2VsZWN0ZWRCdWlsZCA9IGJ1aWxkO1xuICAgIH0pO1xuXG5cbiAgICAkc2NvcGUuJHdhdGNoKCdzZWxlY3RlZEJ1aWxkJywgKHNlbGVjdGVkQnVpbGQpID0+IHtcbiAgICAgIGxvZy5pbmZvKFwiU2VsZWN0ZWQgYnVpbGQgdXBkYXRlZDogXCIsIHNlbGVjdGVkQnVpbGQpO1xuICAgICAgJHNjb3BlLmZldGNoKCk7XG4gICAgfSk7XG5cbiAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XG4gICAgJHNjb3BlLmJyZWFkY3J1bWJDb25maWcgPSBjcmVhdGVKZW5raW5zQnJlYWRjcnVtYnMoJHNjb3BlLmlkLCBnZXRKb2JJZCgpLCBnZXRCdWlsZElkKCkpO1xuICAgICRzY29wZS5zdWJUYWJDb25maWcgPSBjcmVhdGVKZW5raW5zU3ViTmF2QmFycygkc2NvcGUuaWQsIGdldEpvYklkKCksIGdldEJ1aWxkSWQoKSwge1xuICAgICAgbGFiZWw6IFwiTG9nXCIsXG4gICAgICB0aXRsZTogXCJWaWV3cyB0aGUgbG9ncyBvZiB0aGlzIGJ1aWxkXCJcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGdldEpvYklkKCkge1xuICAgICAgLy8gbGV0cyBhbGxvdyB0aGUgcGFyZW50IHNjb3BlIHRvIGJlIHVzZWQgdG9vIGZvciB3aGVuIHRoaXMgaXMgdXNlZCBhcyBhIHBhbmVsXG4gICAgICByZXR1cm4gJHJvdXRlUGFyYW1zW1wiam9iXCJdIHx8ICgkc2NvcGUuc2VsZWN0ZWRCdWlsZCB8fCB7fSkuJGpvYklkO1xuICAgIH1cbiAgICAkc2NvcGUuZ2V0Sm9iSWQgPSBnZXRKb2JJZDtcblxuICAgIGZ1bmN0aW9uIGdldEJ1aWxkSWQoKSB7XG4gICAgICAvLyBsZXRzIGFsbG93IHRoZSBwYXJlbnQgc2NvcGUgdG8gYmUgdXNlZCB0b28gZm9yIHdoZW4gdGhpcyBpcyB1c2VkIGFzIGEgcGFuZWxcbiAgICAgIHJldHVybiAkcm91dGVQYXJhbXNbXCJidWlsZFwiXSB8fCAoJHNjb3BlLnNlbGVjdGVkQnVpbGQgfHwge30pLmlkO1xuICAgIH1cbiAgICAkc2NvcGUuZ2V0QnVpbGRJZCA9IGdldEJ1aWxkSWQ7XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVKZW5raW5zTGluaygpIHtcbiAgICAgIHZhciBqZW5raW5zVXJsID0gamVua2luc0xpbmsoKTtcbiAgICAgIGlmIChqZW5raW5zVXJsKSB7XG4gICAgICAgICRzY29wZS4kdmlld0plbmtpbnNCdWlsZExpbmsgPSBVcmxIZWxwZXJzLmpvaW4oamVua2luc1VybCwgXCJqb2JcIiwgZ2V0Sm9iSWQoKSwgZ2V0QnVpbGRJZCgpKTtcbiAgICAgICAgJHNjb3BlLiR2aWV3SmVua2luc0xvZ0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4oJHNjb3BlLiR2aWV3SmVua2luc0J1aWxkTGluaywgXCJjb25zb2xlXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBxdWVyeVNpemUgPSA1MDAwMDtcblxuICAgICRzY29wZS5hcHByb3ZlID0gKHVybCwgb3BlcmF0aW9uKSA9PiB7XG4gICAgICB2YXIgbW9kYWwgPSAkbW9kYWwub3Blbih7XG4gICAgICB0ZW1wbGF0ZVVybDogVXJsSGVscGVycy5qb2luKHRlbXBsYXRlUGF0aCwgJ2plbmtpbnNBcHByb3ZlTW9kYWwuaHRtbCcpLFxuICAgICAgY29udHJvbGxlcjogWyckc2NvcGUnLCAnJG1vZGFsSW5zdGFuY2UnLCAoJHNjb3BlLCAkbW9kYWxJbnN0YW5jZSkgPT4ge1xuICAgICAgICAkc2NvcGUub3BlcmF0aW9uID0gb3BlcmF0aW9uO1xuICAgICAgICAkc2NvcGUuaGVhZGVyID0gb3BlcmF0aW9uICsgXCI/XCI7XG4gICAgICAgICRzY29wZS5vayA9ICgpID0+IHtcbiAgICAgICAgICBtb2RhbC5jbG9zZSgpO1xuICAgICAgICAgIHBvc3RUb0plbmtpbnModXJsLCBvcGVyYXRpb24pO1xuICAgICAgICB9O1xuICAgICAgICAkc2NvcGUuY2FuY2VsID0gKCkgPT4ge1xuICAgICAgICAgIG1vZGFsLmRpc21pc3MoKTtcbiAgICAgICAgfTtcbiAgICAgIH1dXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gcG9zdFRvSmVua2lucyh1cmksIG9wZXJhdGlvbikge1xuICAgICAgdmFyIHVybCA9ICBLdWJlcm5ldGVzLmt1YmVybmV0ZXNQcm94eVVybEZvclNlcnZpY2VDdXJyZW50TmFtZXNwYWNlKGplbmtpbnNTZXJ2aWNlTmFtZUFuZFBvcnQsIHVyaSk7XG4gICAgICBpZiAodXJsKSB7XG4gICAgICAgIHZhciBib2R5ID0gbnVsbDtcbiAgICAgICAgdmFyIGNvbmZpZyA9IHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGxvZy5pbmZvKFwicG9zdGluZyB0byBqZW5raW5zVXJsOiBcIiArIHVybCk7XG4gICAgICAgICRodHRwLnBvc3QodXJsLCBib2R5LCBjb25maWcpLlxuICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICBsb2cuaW5mbyhcIk1hbmFnZWQgdG8gXCIgKyBvcGVyYXRpb24gKyBcIiBhdCBcIiArIHVybCk7XG4gICAgICAgICAgfSkuXG4gICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIFwiICsgb3BlcmF0aW9uICsgXCIgam9iIGF0IFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZy53YXJuKFwiQ2Fubm90IHBvc3QgdG8gamVua2lucyBVUkk6IFwiICsgdXJpICsgXCIgYXMgbm8gamVua2lucyBmb3VuZCFcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJHNjb3BlLiRrZWVwUG9sbGluZyA9ICgpID0+IEt1YmVybmV0ZXMua2VlcFBvbGxpbmdNb2RlbDtcblxuICAgICRzY29wZS5mZXRjaCA9IFBvbGxIZWxwZXJzLnNldHVwUG9sbGluZygkc2NvcGUsIChuZXh0OigpID0+IHZvaWQpID0+IHtcbiAgICAgIGlmICgkc2NvcGUuJGV2YWwoJ2hpZGVMb2dzICYmICFidWlsZC5idWlsZGluZycpKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhcIkxvZyBoaWRkZW4sIG5vdCBmZXRjaGluZyBsb2dzXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cuZGVidWcoXCJGZXRjaGluZyBsb2dzIGZvciBidWlsZDogXCIsICRzY29wZS4kZXZhbCgnYnVpbGQnKSk7XG4gICAgICB9XG4gICAgICB2YXIgYnVpbGRJZCA9IGdldEJ1aWxkSWQoKTtcbiAgICAgIHZhciBqb2JJZCA9IGdldEpvYklkKCk7XG4gICAgICAvL2xvZy5pbmZvKFwiPT09IGplbmtpbnMgbG9nIHF1ZXJ5aW5nIGpvYiBcIiArIGpvYklkICsgXCIgYnVpbGQgXCIgKyBidWlsZElkICsgXCIgc2VsZWN0ZWQgYnVpbGQgXCIgKyAgJHNjb3BlLnNlbGVjdGVkQnVpbGQpO1xuICAgICAgaWYgKGpvYklkICYmIGJ1aWxkSWQpIHtcbiAgICAgICAgaWYgKCRzY29wZS5idWlsZElkICE9PSBidWlsZElkIHx8ICRzY29wZS5qb2JJZCAhPT0gam9iSWQpIHtcbiAgICAgICAgICAvLyBsZXRzIGNsZWFyIHRoZSBxdWVyeVxuICAgICAgICAgICRzY29wZS5sb2cgPSB7XG4gICAgICAgICAgICBodG1sOiBcIlwiLFxuICAgICAgICAgICAgc3RhcnQ6IDAsXG4gICAgICAgICAgICBmaXJzdElkeDogbnVsbFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgJHNjb3BlLmJ1aWxkSWQgPSBidWlsZElkO1xuICAgICAgICAkc2NvcGUuam9iSWQgPSBqb2JJZDtcblxuICAgICAgICB2YXIgdXJsID0gS3ViZXJuZXRlcy5rdWJlcm5ldGVzUHJveHlVcmxGb3JTZXJ2aWNlQ3VycmVudE5hbWVzcGFjZShqZW5raW5zU2VydmljZU5hbWVBbmRQb3J0LCBVcmxIZWxwZXJzLmpvaW4oXCJqb2JcIiwgam9iSWQsIGJ1aWxkSWQsIFwiZmFicmljOC9sb2dIdG1sP3RhaWw9MSZzdGFydD1cIiArICRzY29wZS5sb2cuc3RhcnQgKyBcIiZzaXplPVwiICsgcXVlcnlTaXplKSk7XG4gICAgICAgIGlmICgkc2NvcGUubG9nLmZpcnN0SWR4ICE9PSBudWxsKSB7XG4gICAgICAgICAgdXJsICs9IFwiJmZpcnN0PVwiICsgJHNjb3BlLmxvZy5maXJzdElkeDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXJsICYmICghJHNjb3BlLmxvZy5mZXRjaGVkIHx8IEt1YmVybmV0ZXMua2VlcFBvbGxpbmdNb2RlbCkpIHtcbiAgICAgICAgICAkaHR0cC5nZXQodXJsKS5cbiAgICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlcGxhY2VDbHVzdGVySVBzSW5IdG1sID0gcmVwbGFjZUNsdXN0ZXJJcEZ1bmN0aW9uKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoISRzY29wZS5sb2cubG9ncykge1xuICAgICAgICAgICAgICAgICAgJHNjb3BlLmxvZy5sb2dzID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBsaW5lcyA9IGRhdGEubGluZXM7XG4gICAgICAgICAgICAgICAgdmFyIHJldHVybmVkTGVuZ3RoID0gZGF0YS5yZXR1cm5lZExlbmd0aDtcbiAgICAgICAgICAgICAgICB2YXIgbG9nTGVuZ3RoID0gZGF0YS5sb2dMZW5ndGg7XG4gICAgICAgICAgICAgICAgdmFyIHJldHVybmVkU3RhcnQgPSBkYXRhLnN0YXJ0O1xuICAgICAgICAgICAgICAgIHZhciBlYXJsaWVyTG9nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKGFuZ3VsYXIuaXNEZWZpbmVkKHJldHVybmVkU3RhcnQpKSB7XG4gICAgICAgICAgICAgICAgICBlYXJsaWVyTG9nID0gcmV0dXJuZWRTdGFydCA8ICRzY29wZS5sb2cuc3RhcnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBsaW5lU3BsaXQgPSBkYXRhLmxpbmVTcGxpdDtcbiAgICAgICAgICAgICAgICAvLyBsb2cuaW5mbyhcInN0YXJ0IHdhczogXCIgKyAkc2NvcGUubG9nLnN0YXJ0ICsgXCIgZmlyc3Q6IFwiICsgJHNjb3BlLmxvZy5maXJzdElkeCArIFwiID0+IHJldHVybmVkTGVuZ3RoOiBcIiArIHJldHVybmVkTGVuZ3RoICsgXCIgbG9nTGVuZ3RoOiBcIiArIGxvZ0xlbmd0aCArICBcIiByZXR1cm5lZFN0YXJ0OiBcIiArIHJldHVybmVkU3RhcnQgKyBcIiBlYXJsaWVyTG9nOiBcIiArIGVhcmxpZXJMb2cgKyBcIiBsaW5lU3BsaXQ6IFwiICsgbGluZVNwbGl0KTtcbiAgICAgICAgICAgICAgICBpZiAobGluZXMpIHtcbiAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50TG9ncyA9ICRzY29wZS5sb2cubG9ncztcblxuICAgICAgICAgICAgICAgICAgLy8gbGV0cyByZS1qb2luIHNwbGl0IGxpbmVzXG4gICAgICAgICAgICAgICAgICBpZiAobGluZVNwbGl0ICYmIGN1cnJlbnRMb2dzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbGFzdEluZGV4O1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdE9mTGluZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVhcmxpZXJMb2cpIHtcbiAgICAgICAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgIHJlc3RPZkxpbmUgPSBsaW5lcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdE9mTGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudExvZ3NbbGFzdEluZGV4XSA9IHJlcGxhY2VDbHVzdGVySVBzSW5IdG1sKHJlc3RPZkxpbmUgKyBjdXJyZW50TG9nc1tsYXN0SW5kZXhdKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gY3VycmVudExvZ3MubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICByZXN0T2ZMaW5lID0gbGluZXMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdE9mTGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudExvZ3NbbGFzdEluZGV4XSA9IHJlcGxhY2VDbHVzdGVySVBzSW5IdG1sKGN1cnJlbnRMb2dzW2xhc3RJbmRleF0gKyByZXN0T2ZMaW5lKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgbGluZXNbaV0gPSByZXBsYWNlQ2x1c3RlcklQc0luSHRtbChsaW5lc1tpXSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAoZWFybGllckxvZykge1xuICAgICAgICAgICAgICAgICAgICAkc2NvcGUubG9nLmxvZ3MgPSBsaW5lcy5jb25jYXQoY3VycmVudExvZ3MpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmxvZy5sb2dzID0gY3VycmVudExvZ3MuY29uY2F0KGxpbmVzKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIG1vdmVGb3J3YXJkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoYW5ndWxhci5pc0RlZmluZWQocmV0dXJuZWRTdGFydCkpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChyZXR1cm5lZFN0YXJ0ID4gJHNjb3BlLmxvZy5zdGFydCAmJiAkc2NvcGUubG9nLnN0YXJ0ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHdlJ3ZlIGp1bXBlZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIHRvIHJlYWQgdGhlIHRhaWwgb2YgaXRcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmxvZy5zdGFydCA9IHJldHVybmVkU3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgICRzY29wZS5sb2cuZmlyc3RJZHggPSByZXR1cm5lZFN0YXJ0O1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgkc2NvcGUubG9nLmZpcnN0SWR4ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGxldHMgcmVtZW1iZXIgd2hlcmUgdGhlIGZpcnN0IHJlcXVlc3Qgc3RhcnRlZFxuICAgICAgICAgICAgICAgICAgICAkc2NvcGUubG9nLmZpcnN0SWR4ID0gcmV0dXJuZWRTdGFydDtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmV0dXJuZWRTdGFydCA8ICRzY29wZS5sb2cuZmlyc3RJZHgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gd2UndmUgZ290IGFuIGVhcmxpZXIgYml0IG9mIHRoZSBsb2dcbiAgICAgICAgICAgICAgICAgICAgLy8gYWZ0ZXIgc3RhcnRpbmcgYXQgdGhlIHRhaWxcbiAgICAgICAgICAgICAgICAgICAgLy8gc28gbGV0cyBtb3ZlIGZpcnN0SWR4IGJhY2t3YXJkcyBhbmQgbGVhdmUgc3RhcnQgYXMgaXQgaXMgKGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUpXG4gICAgICAgICAgICAgICAgICAgICRzY29wZS5sb2cuZmlyc3RJZHggPSByZXR1cm5lZFN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICBtb3ZlRm9yd2FyZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobW92ZUZvcndhcmQgJiYgcmV0dXJuZWRMZW5ndGggJiYgIWVhcmxpZXJMb2cpIHtcbiAgICAgICAgICAgICAgICAgICRzY29wZS5sb2cuc3RhcnQgKz0gcmV0dXJuZWRMZW5ndGg7XG4gICAgICAgICAgICAgICAgICBpZiAobG9nTGVuZ3RoICYmICRzY29wZS5sb2cuc3RhcnQgPiBsb2dMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmxvZy5zdGFydCA9IGxvZ0xlbmd0aDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdXBkYXRlSmVua2luc0xpbmsoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAkc2NvcGUubG9nLmZldGNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAvLyBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICB9KS5cbiAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGxvYWQgXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICRzY29wZS5sb2cuZmV0Y2hlZCA9IHRydWU7XG4gICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgIG5leHQoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChhbmd1bGFyLmlzRnVuY3Rpb24oJHNjb3BlLmZldGNoKSkge1xuICAgICAgJHNjb3BlLmZldGNoKCk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiByZXBsYWNlQ2x1c3RlcklwRnVuY3Rpb24oKSB7XG4gICAgICBmdW5jdGlvbiBjcmVhdGVSZXBsYWNlRnVuY3Rpb24oZnJvbSwgdG8pIHtcbiAgICAgICAgcmV0dXJuICh0ZXh0KSA9PiByZXBsYWNlVGV4dCh0ZXh0LCBmcm9tLCB0byk7XG4gICAgICB9XG5cbiAgICAgIHZhciByZXBsYWNlbWVudHMgPSBbXTtcbiAgICAgIGFuZ3VsYXIuZm9yRWFjaCgkc2NvcGUubW9kZWwuc2VydmljZXMsIChzZXJ2aWNlKSA9PiB7XG4gICAgICAgIHZhciAkcG9ydGFsSVAgPSBzZXJ2aWNlLiRwb3J0YWxJUDtcbiAgICAgICAgdmFyICRzZXJ2aWNlVXJsID0gc2VydmljZS4kc2VydmljZVVybDtcbiAgICAgICAgdmFyICRwb3J0c1RleHQgPSBzZXJ2aWNlLiRwb3J0c1RleHQ7XG4gICAgICAgIGlmICgkcG9ydGFsSVAgJiYgJHNlcnZpY2VVcmwpIHtcbiAgICAgICAgICB2YXIgaWR4ID0gJHNlcnZpY2VVcmwuaW5kZXhPZihcIjovL1wiKTtcbiAgICAgICAgICBpZiAoaWR4ID4gMCkge1xuICAgICAgICAgICAgdmFyIHJlcGxhY2VXaXRoID0gJHNlcnZpY2VVcmwuc3Vic3RyaW5nKGlkeCwgJHNlcnZpY2VVcmwubGVuZ3RoKTtcbiAgICAgICAgICAgIGlmICghcmVwbGFjZVdpdGguZW5kc1dpdGgoXCIvXCIpKSB7XG4gICAgICAgICAgICAgIHJlcGxhY2VXaXRoICs9IFwiL1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcGxhY2VXaXRoLmxlbmd0aCA+IDQpIHtcbiAgICAgICAgICAgICAgcmVwbGFjZW1lbnRzLnB1c2goY3JlYXRlUmVwbGFjZUZ1bmN0aW9uKFxuICAgICAgICAgICAgICAgICAgICBcIjovL1wiICsgJHBvcnRhbElQICsgXCIvXCIsXG4gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoXG4gICAgICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgICBpZiAoJHBvcnRzVGV4dCkge1xuICAgICAgICAgICAgICAgIHZhciBzdWZmaXggPSBcIjpcIiArICRwb3J0c1RleHQ7XG4gICAgICAgICAgICAgICAgdmFyIHNlcnZpY2VXaXRoUG9ydCA9IHJlcGxhY2VXaXRoLnN1YnN0cmluZygwLCByZXBsYWNlV2l0aC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgICBpZiAoIXNlcnZpY2VXaXRoUG9ydC5lbmRzV2l0aChzdWZmaXgpKSB7XG4gICAgICAgICAgICAgICAgICBzZXJ2aWNlV2l0aFBvcnQgKz0gc3VmZml4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZXJ2aWNlV2l0aFBvcnQgKz0gXCIvXCI7XG4gICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRzLnB1c2goY3JlYXRlUmVwbGFjZUZ1bmN0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgIFwiOi8vXCIgKyAkcG9ydGFsSVAgKyBcIjpcIiArICRwb3J0c1RleHQgKyBcIi9cIixcbiAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlV2l0aFBvcnRcbiAgICAgICAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGZ1bmN0aW9uIGFkZFJlcGxhY2VGbihmcm9tLCB0bykge1xuICAgICAgICByZXBsYWNlbWVudHMucHVzaCgodGV4dCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZXBsYWNlVGV4dCh0ZXh0LCBmcm9tLCB0byk7XG4gICAgICAgIH0pO1xuXG4gICAgICB9XG4gICAgICBhZGRSZXBsYWNlRm4oXCJbSU5GT11cIiwgXCI8c3BhbiBjbGFzcz0nbG9nLXN1Y2Nlc3MnPltJTkZPXTwvc3Bhbj5cIik7XG4gICAgICBhZGRSZXBsYWNlRm4oXCJbV0FSTl1cIiwgXCI8c3BhbiBjbGFzcz0nbG9nLXdhcm4nPltXQVJOXTwvc3Bhbj5cIik7XG4gICAgICBhZGRSZXBsYWNlRm4oXCJbV0FSTklOR11cIiwgXCI8c3BhbiBjbGFzcz0nbG9nLXdhcm4nPltXQVJOSU5HXTwvc3Bhbj5cIik7XG4gICAgICBhZGRSZXBsYWNlRm4oXCJbRVJST1JdXCIsIFwiPHNwYW4gY2xhc3M9J2xvZy1lcnJvcic+W0VSUk9SXTwvc3Bhbj5cIik7XG4gICAgICBhZGRSZXBsYWNlRm4oXCJGQUlMVVJFXCIsIFwiPHNwYW4gY2xhc3M9J2xvZy1lcnJvcic+RkFJTFVSRTwvc3Bhbj5cIik7XG4gICAgICBhZGRSZXBsYWNlRm4oXCJTVUNDRVNTXCIsIFwiPHNwYW4gY2xhc3M9J2xvZy1zdWNjZXNzJz5TVUNDRVNTPC9zcGFuPlwiKTtcblxuICAgICAgLy8gbGV0cyB0cnkgY29udmVydCB0aGUgUHJvY2VlZCAvIEFib3J0IGxpbmtzXG4gICAgICByZXBsYWNlbWVudHMucHVzaCgodGV4dCkgPT4ge1xuICAgICAgICB2YXIgcHJlZml4ID0gXCI8YSBocmVmPScjJyBvbmNsaWNrPVxcXCJuZXcgQWpheC5SZXF1ZXN0KCdcIjtcbiAgICAgICAgdmFyIGlkeCA9IDA7XG4gICAgICAgIHdoaWxlIChpZHggPj0gMCkge1xuICAgICAgICAgIGlkeCA9IHRleHQuaW5kZXhPZihwcmVmaXgsIGlkeCk7XG4gICAgICAgICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgICAgICB2YXIgc3RhcnQgPSBpZHggKyBwcmVmaXgubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGVuZFF1b3RlID0gdGV4dC5pbmRleE9mKFwiJ1wiLCBzdGFydCArIDEpO1xuICAgICAgICAgICAgaWYgKGVuZFF1b3RlIDw9IDApIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZW5kRG91YmxlUXVvdGUgPSB0ZXh0LmluZGV4T2YoJ1wiJywgZW5kUXVvdGUgKyAxKTtcbiAgICAgICAgICAgIGlmIChlbmREb3VibGVRdW90ZSA8PSAwKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHVybCA9IHRleHQuc3Vic3RyaW5nKHN0YXJ0LCBlbmRRdW90ZSk7XG4gICAgICAgICAgICAvLyBUT0RPIHVzaW5nICRjb21waWxlIGlzIGEgdGFkIGNvbXBsZXgsIGZvciBub3cgbGV0cyBjaGVhdCB3aXRoIGEgbGl0dGxlIG9uY2xpY2sgOylcbiAgICAgICAgICAgIC8vdGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsIGlkeCkgKyBcIjxhIGNsYXNzPSdidG4gYnRuLWRlZmF1bHQgYnRuLWxnJyBuZy1jbGljaz1cXFwiYXBwcm92ZSgnXCIgKyB1cmwgKyBcIicpXFxcIlwiICsgdGV4dC5zdWJzdHJpbmcoZW5kRG91YmxlUXVvdGUgKyAxKTtcbiAgICAgICAgICAgIHRleHQgPSB0ZXh0LnN1YnN0cmluZygwLCBpZHgpICsgXCI8YSBjbGFzcz0nYnRuIGJ0bi1kZWZhdWx0IGJ0bi1sZycgb25jbGljaz1cXFwiRGV2ZWxvcGVyLmNsaWNrQXBwcm92ZSh0aGlzLCAnXCIgKyB1cmwgKyBcIicpXFxcIlwiICsgdGV4dC5zdWJzdHJpbmcoZW5kRG91YmxlUXVvdGUgKyAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmdW5jdGlvbih0ZXh0KSB7XG4gICAgICAgIHZhciBhbnN3ZXIgPSB0ZXh0O1xuICAgICAgICBhbmd1bGFyLmZvckVhY2gocmVwbGFjZW1lbnRzLCAoZm4pID0+IHtcbiAgICAgICAgICBhbnN3ZXIgPSBmbihhbnN3ZXIpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGFuc3dlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXBsYWNlVGV4dCh0ZXh0LCBmcm9tLCB0bykge1xuICAgICAgaWYgKGZyb20gJiYgdG8gJiYgdGV4dCkge1xuICAgICAgICAvL2xvZy5pbmZvKFwiUmVwbGFjaW5nICdcIiArIGZyb20gKyBcIicgPT4gJ1wiICsgdG8gKyBcIidcIik7XG4gICAgICAgIHZhciBpZHggPSAwO1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIGlkeCA9IHRleHQuaW5kZXhPZihmcm9tLCBpZHgpO1xuICAgICAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICAgICAgdGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsIGlkeCkgKyB0byArIHRleHQuc3Vic3RyaW5nKGlkeCArIGZyb20ubGVuZ3RoKTtcbiAgICAgICAgICAgIGlkeCArPSB0by5sZW5ndGg7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuICB9KTtcblxufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyRW5yaWNoZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckhlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyTmF2aWdhdGlvbi50c1wiLz5cblxubW9kdWxlIERldmVsb3BlciB7XG5cbiAgZXhwb3J0IHZhciBKZW5raW5zTWV0cmljc0NvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiSmVua2luc01ldHJpY3NDb250cm9sbGVyXCIsXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiS3ViZXJuZXRlc1NjaGVtYVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIiwgXCJTZXJ2aWNlUmVnaXN0cnlcIixcbiAgICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDpLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc1NjaGVtYSxcbiAgICAgICAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCwgU2VydmljZVJlZ2lzdHJ5KSA9PiB7XG5cbiAgICAgICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XG4gICAgICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcbiAgICAgICAgJHNjb3BlLmlkID0gJHJvdXRlUGFyYW1zW1wiaWRcIl07XG4gICAgICAgICRzY29wZS5qb2JJZCA9ICRyb3V0ZVBhcmFtc1tcImpvYlwiXTtcbiAgICAgICAgJHNjb3BlLnNjaGVtYSA9IEt1YmVybmV0ZXNTY2hlbWE7XG4gICAgICAgICRzY29wZS5qZW5raW5zID0gbnVsbDtcbiAgICAgICAgJHNjb3BlLmVudGl0eUNoYW5nZWRDYWNoZSA9IHt9O1xuXG4gICAgICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcbiAgICAgICAgJHNjb3BlLmJyZWFkY3J1bWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdEJyZWFkY3J1bWJzKCRzY29wZS5pZCk7XG4gICAgICAgICRzY29wZS5zdWJUYWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdFN1Yk5hdkJhcnMoJHNjb3BlLmlkLCAkc2NvcGUuam9iSWQpO1xuXG4gICAgICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdXBkYXRlRGF0YSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICAkc2NvcGUuJG9uKCckcm91dGVVcGRhdGUnLCAoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgdXBkYXRlRGF0YSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICAkc2NvcGUub3B0aW9ucyA9IHtcbiAgICAgICAgICBjaGFydDoge1xuICAgICAgICAgICAgdHlwZTogJ2Rpc2NyZXRlQmFyQ2hhcnQnLFxuICAgICAgICAgICAgYXV0b3JlZnJlc2g6IGZhbHNlLFxuICAgICAgICAgICAgaGVpZ2h0OiA0NTAsXG4gICAgICAgICAgICBtYXJnaW46IHtcbiAgICAgICAgICAgICAgdG9wOiAyMCxcbiAgICAgICAgICAgICAgcmlnaHQ6IDIwLFxuICAgICAgICAgICAgICBib3R0b206IDYwLFxuICAgICAgICAgICAgICBsZWZ0OiA0NVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaXBFZGdlOiB0cnVlLFxuICAgICAgICAgICAgc3RhZ2dlckxhYmVsczogZmFsc2UsXG4gICAgICAgICAgICB0cmFuc2l0aW9uRHVyYXRpb246IDUwMCxcbiAgICAgICAgICAgIHN0YWNrZWQ6IGZhbHNlLFxuICAgICAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgICAgICB0b29sdGlwOiB7XG4gICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICAgIGNvbnRlbnRHZW5lcmF0b3I6IChhcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBhcmdzLmRhdGEgfHwge307XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEudG9vbHRpcDtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb2xvcjogKGQsIGkpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGQuY29sb3I7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeEF4aXM6IHtcbiAgICAgICAgICAgICAgYXhpc0xhYmVsOiAnQnVpbGRzJyxcbiAgICAgICAgICAgICAgc2hvd01heE1pbjogZmFsc2UsXG4gICAgICAgICAgICAgIHRpY2tGb3JtYXQ6IGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiI1wiICsgZDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHlBeGlzOiB7XG4gICAgICAgICAgICAgIGF4aXNMYWJlbDogJ0J1aWxkIER1cmF0aW9uIChzZWNvbmRzKScsXG4gICAgICAgICAgICAgIHRpY2tGb3JtYXQ6IGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGQzLmZvcm1hdCgnLC4xZicpKGQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgICRzY29wZS5kYXRhID0gW107XG5cbiAgICAgICAgdXBkYXRlRGF0YSgpO1xuXG4gICAgICAgIGZ1bmN0aW9uIGJhckNvbG91ckZvckJ1aWxkUmVzdWx0KHJlc3VsdCkge1xuICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IFwiRkFJTFVSRVwiIHx8IHJlc3VsdCA9PT0gXCJGQUlMRURcIikge1xuICAgICAgICAgICAgICByZXR1cm4gXCJyZWRcIjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0ID09PSBcIkFCT1JURURcIiB8fCByZXN1bHQgPT09IFwiSU5URVJVUFRFRFwiKSB7XG4gICAgICAgICAgICAgIHJldHVybiBcInRhblwiO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT09IFwiU1VDQ0VTU1wiKSB7XG4gICAgICAgICAgICAgIHJldHVybiBcImdyZWVuXCI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gXCJOT1RfU1RBUlRFRFwiKSB7XG4gICAgICAgICAgICAgIHJldHVybiBcImxpZ2h0Z3JleVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBcImRhcmtncmV5XCI7XG4gICAgICAgIH1cblxuXG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZUNoYXJ0RGF0YSgpIHtcbiAgICAgICAgICB2YXIgdXNlU2luZ2xlU2V0ID0gdHJ1ZTtcbiAgICAgICAgICB2YXIgYnVpbGRzU3VjY2VlZGVkID0gW107XG4gICAgICAgICAgdmFyIGJ1aWxkc0ZhaWxlZCA9IFtdO1xuICAgICAgICAgIHZhciBzdWNjZXNzQnVpbGRLZXkgPSBcIlN1Y2NlZWRlZCBidWlsZHNcIjtcbiAgICAgICAgICB2YXIgZmFpbGVkQnVpbGRLZXkgPSBcIkZhaWxlZCBidWlsZHNcIjtcblxuICAgICAgICAgIGlmICh1c2VTaW5nbGVTZXQpIHtcbiAgICAgICAgICAgIHN1Y2Nlc3NCdWlsZEtleSA9IFwiQnVpbGRzXCI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGNvdW50ID0gMDtcbiAgICAgICAgICB2YXIgYnVpbGRzID0gXy5zb3J0QnkoJHNjb3BlLm1ldHJpY3MuYnVpbGRzIHx8IFtdLCBcIm51bWJlclwiKTtcbiAgICAgICAgICBhbmd1bGFyLmZvckVhY2goYnVpbGRzLCAoYnVpbGQ6YW55KSA9PiB7XG4gICAgICAgICAgICB2YXIgeCA9IGJ1aWxkLm51bWJlcjtcbiAgICAgICAgICAgIHZhciB5ID0gYnVpbGQuZHVyYXRpb24gLyAxMDAwO1xuICAgICAgICAgICAgdmFyIGRhdGUgPSBEZXZlbG9wZXIuYXNEYXRlKGJ1aWxkLnRpbWVJbk1pbGxpcyk7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gYnVpbGQucmVzdWx0IHx8IFwiTk9UX1NUQVJURURcIjtcbiAgICAgICAgICAgIHZhciBjb2xvciA9IGJhckNvbG91ckZvckJ1aWxkUmVzdWx0KHJlc3VsdCk7XG4gICAgICAgICAgICB2YXIgaWNvbkNsYXNzID0gY3JlYXRlQnVpbGRTdGF0dXNJY29uQ2xhc3MocmVzdWx0KTtcbiAgICAgICAgICAgIHZhciB0b29sdGlwID0gJzxoMz48aSBjbGFzcz1cIicgKyBpY29uQ2xhc3MgKyAnXCI+PC9pPiAnICsgYnVpbGQuZGlzcGxheU5hbWUgKyAnPC9oMz4nICtcbiAgICAgICAgICAgICAgJzxwPmR1cmF0aW9uOiA8Yj4nICsgeSArICc8L2I+IHNlY29uZHM8L3A+JztcbiAgICAgICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgICAgIHRvb2x0aXAgKz0gJzxwPnN0YXJ0ZWQ6IDxiPicgKyBkYXRlICsgJzwvYj48L3A+JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgdG9vbHRpcCArPSAnPHA+cmVzdWx0OiA8Yj4nICsgcmVzdWx0ICsgJzwvYj48L3A+JztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHgpIHtcbiAgICAgICAgICAgICAgdmFyIGRhdGEgPSBidWlsZHNTdWNjZWVkZWQ7XG4gICAgICAgICAgICAgIHZhciBrZXkgPSBzdWNjZXNzQnVpbGRLZXk7XG4gICAgICAgICAgICAgIGlmICghc3VjY2Vzc0J1aWxkS2V5ICYmICghcmVzdWx0IHx8ICFyZXN1bHQuc3RhcnRzV2l0aChcIlNVQ0NcIikpKSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGJ1aWxkc0ZhaWxlZDtcbiAgICAgICAgICAgICAgICBrZXkgPSBmYWlsZWRCdWlsZEtleTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBkYXRhLnB1c2goe1xuICAgICAgICAgICAgICAgIHRvb2x0aXA6IHRvb2x0aXAsXG4gICAgICAgICAgICAgICAgY29sb3I6IGNvbG9yLFxuICAgICAgICAgICAgICAgIHg6IHgsIHk6IHl9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICAkc2NvcGUuZGF0YSA9IFtdO1xuICAgICAgICAgIGlmIChidWlsZHNTdWNjZWVkZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICAkc2NvcGUuZGF0YS5wdXNoKHtcbiAgICAgICAgICAgICAga2V5OiBzdWNjZXNzQnVpbGRLZXksXG4gICAgICAgICAgICAgIHZhbHVlczogYnVpbGRzU3VjY2VlZGVkXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGJ1aWxkc0ZhaWxlZC5sZW5ndGgpIHtcbiAgICAgICAgICAgICRzY29wZS5kYXRhLnB1c2goe1xuICAgICAgICAgICAgICBrZXk6IGZhaWxlZEJ1aWxkS2V5LFxuICAgICAgICAgICAgICB2YWx1ZXM6IGJ1aWxkc0ZhaWxlZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgICRzY29wZS5hcGkudXBkYXRlV2l0aERhdGEoJHNjb3BlLmRhdGEpO1xuXG4gICAgICAgICAgJHRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgJHNjb3BlLmFwaS51cGRhdGUoKTtcbiAgICAgICAgICB9LCA1MCk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xuICAgICAgICAgIHZhciBtZXRyaWNzUGF0aCA9ICRzY29wZS5qb2JJZCA/IFVybEhlbHBlcnMuam9pbihcImpvYlwiLCAkc2NvcGUuam9iSWQsIFwiZmFicmljOC9tZXRyaWNzXCIpIDogXCJmYWJyaWM4L21ldHJpY3NcIjtcbiAgICAgICAgICB2YXIgdXJsID0gS3ViZXJuZXRlcy5rdWJlcm5ldGVzUHJveHlVcmxGb3JTZXJ2aWNlQ3VycmVudE5hbWVzcGFjZShqZW5raW5zU2VydmljZU5hbWVBbmRQb3J0LCBtZXRyaWNzUGF0aCk7XG4gICAgICAgICAgbG9nLmluZm8oXCJcIik7XG4gICAgICAgICAgaWYgKHVybCAmJiAoISRzY29wZS5qZW5raW5zIHx8IEt1YmVybmV0ZXMua2VlcFBvbGxpbmdNb2RlbCkpIHtcbiAgICAgICAgICAgICRodHRwLmdldCh1cmwsIGplbmtpbnNIdHRwQ29uZmlnKS5cbiAgICAgICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgaWYgKGhhc09iamVjdENoYW5nZWQoZGF0YSwgJHNjb3BlLmVudGl0eUNoYW5nZWRDYWNoZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9nLmluZm8oXCJlbnRpdHkgaGFzIGNoYW5nZWQhXCIpO1xuICAgICAgICAgICAgICAgICAgICAkc2NvcGUubWV0cmljcyA9IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUNoYXJ0RGF0YSgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAkc2NvcGUubW9kZWwuZmV0Y2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgICAgICAgfSkuXG4gICAgICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGxvYWQgXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyRW5yaWNoZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckhlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyTmF2aWdhdGlvbi50c1wiLz5cblxubW9kdWxlIERldmVsb3BlciB7XG5cbiAgZXhwb3J0IHZhciBOYXZCYXJDb250cm9sbGVyID0gY29udHJvbGxlcihcIk5hdkJhckNvbnRyb2xsZXJcIixcbiAgICBbXCIkc2NvcGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcbiAgICAgICgkc2NvcGUsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICR0aW1lb3V0KSA9PiB7XG5cbiAgICAgICAgJHNjb3BlLmlzVmFsaWQgPSAoaXRlbSkgPT4ge1xuICAgICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBpdGVtLmlzVmFsaWQ7XG4gICAgICAgICAgICBpZiAoYW5ndWxhci5pc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdmFsdWUoaXRlbSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBhbmd1bGFyLmlzVW5kZWZpbmVkKHZhbHVlKSB8fCB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XSk7XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4va3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzSGVscGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJFbnJpY2hlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVySGVscGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJOYXZpZ2F0aW9uLnRzXCIvPlxuXG5tb2R1bGUgRGV2ZWxvcGVyIHtcblxuICBleHBvcnQgdmFyIFBpcGVsaW5lQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJQaXBlbGluZUNvbnRyb2xsZXJcIixcbiAgICBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCJLdWJlcm5ldGVzU2NoZW1hXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLCBcIlNlcnZpY2VSZWdpc3RyeVwiLFxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLFxuICAgICAgICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMLCBTZXJ2aWNlUmVnaXN0cnkpID0+IHtcblxuICAgICAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAgICAgJHNjb3BlLmt1YmVNb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcbiAgICAgICAgJHNjb3BlLmlkID0gJHJvdXRlUGFyYW1zW1wiaWRcIl07XG4gICAgICAgICRzY29wZS5qb2JJZCA9ICRyb3V0ZVBhcmFtc1tcImpvYlwiXTtcbiAgICAgICAgJHNjb3BlLmJ1aWxkSWQgPSAkcm91dGVQYXJhbXNbXCJidWlsZFwiXTtcbiAgICAgICAgJHNjb3BlLnNjaGVtYSA9IEt1YmVybmV0ZXNTY2hlbWE7XG4gICAgICAgICRzY29wZS5lbnRpdHlDaGFuZ2VkQ2FjaGUgPSB7fTtcblxuICAgICAgICAkc2NvcGUubW9kZWwgPSB7XG4gICAgICAgICAgc3RhZ2VzOiBudWxsXG4gICAgICAgIH07XG4gICAgICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcbiAgICAgICAgJHNjb3BlLmJyZWFkY3J1bWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdEJyZWFkY3J1bWJzKCRzY29wZS5pZCk7XG4gICAgICAgICRzY29wZS5zdWJUYWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdFN1Yk5hdkJhcnMoJHNjb3BlLmlkLCAkc2NvcGUuam9iSWQpO1xuXG4gICAgICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdXBkYXRlRGF0YSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICAkc2NvcGUuJG9uKCckcm91dGVVcGRhdGUnLCAoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgdXBkYXRlRGF0YSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICB1cGRhdGVEYXRhKCk7XG5cbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcbiAgICAgICAgICBpZiAoJHNjb3BlLmpvYklkKSB7XG4gICAgICAgICAgICB2YXIgdXJsID0gS3ViZXJuZXRlcy5rdWJlcm5ldGVzUHJveHlVcmxGb3JTZXJ2aWNlQ3VycmVudE5hbWVzcGFjZShqZW5raW5zU2VydmljZU5hbWVBbmRQb3J0LCBVcmxIZWxwZXJzLmpvaW4oXCJqb2JcIiwgJHNjb3BlLmpvYklkLCAkc2NvcGUuYnVpbGRJZCwgXCJmYWJyaWM4L3N0YWdlcy9cIikpO1xuICAgICAgICAgICAgaWYgKHVybCAmJiAoISRzY29wZS5tb2RlbC5zdGFnZXMgfHwgS3ViZXJuZXRlcy5rZWVwUG9sbGluZ01vZGVsKSkge1xuICAgICAgICAgICAgICAkaHR0cC5nZXQodXJsKS5cbiAgICAgICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5yaWNoSmVua2luc1N0YWdlcyhkYXRhLCAkc2NvcGUuaWQsICRzY29wZS5qb2JJZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNPYmplY3RDaGFuZ2VkKGRhdGEsICRzY29wZS5lbnRpdHlDaGFuZ2VkQ2FjaGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgbG9nLmluZm8oXCJlbnRpdHkgaGFzIGNoYW5nZWQhXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5idWlsZCA9IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLm1vZGVsLnN0YWdlcyA9IGRhdGEuc3RhZ2VzO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAkc2NvcGUubW9kZWwuZmV0Y2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgICAgICAgICAgIH0pLlxuICAgICAgICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcbiAgICAgICAgICAgICAgICAgICRzY29wZS5tb2RlbC5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJHNjb3BlLm1vZGVsLmZldGNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1dKTtcbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9rdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckVucmljaGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3Blck5hdmlnYXRpb24udHNcIi8+XG5cbm1vZHVsZSBEZXZlbG9wZXIge1xuICBfbW9kdWxlLmRpcmVjdGl2ZShcInBpcGVsaW5lVmlld1wiLCAoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRlbXBsYXRlVXJsOiB0ZW1wbGF0ZVBhdGggKyAncGlwZWxpbmVWaWV3Lmh0bWwnXG4gICAgfTtcbiAgfSk7XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4va3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzSGVscGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJQbHVnaW4udHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyRW5yaWNoZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckhlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyTmF2aWdhdGlvbi50c1wiLz5cblxubW9kdWxlIERldmVsb3BlciB7XG5cbiAgZXhwb3J0IHZhciBQaXBlbGluZXNDb250cm9sbGVyID0gX21vZHVsZS5jb250cm9sbGVyKFwiRGV2ZWxvcGVyLlBpcGVsaW5lc0NvbnRyb2xsZXJcIiwgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLFxuICAgICAgICAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCwgU2VydmljZVJlZ2lzdHJ5LCAkZWxlbWVudCkgPT4ge1xuXG4gICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XG4gICAgJHNjb3BlLmt1YmVNb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcbiAgICAkc2NvcGUuaWQgPSAkcm91dGVQYXJhbXNbXCJpZFwiXTtcbiAgICAkc2NvcGUuam9iSWQgPSAkc2NvcGUuam9iSWQgfHwgJHJvdXRlUGFyYW1zW1wiam9iXCJdO1xuICAgICRzY29wZS5zY2hlbWEgPSBLdWJlcm5ldGVzU2NoZW1hO1xuICAgICRzY29wZS5lbnRpdHlDaGFuZ2VkQ2FjaGUgPSB7fTtcblxuICAgICRlbGVtZW50Lm9uKCckZGVzdHJveScsICgpID0+IHtcbiAgICAgICRzY29wZS4kZGVzdHJveSgpO1xuICAgIH0pO1xuXG4gICAgJHNjb3BlLm1vZGVsID0ge1xuICAgICAgam9iOiBudWxsLFxuICAgICAgcGVuZGluZ09ubHk6ICRzY29wZS5wZW5kaW5nUGlwZWxpbmVzT25seVxuICAgIH07XG4gICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xuICAgICRzY29wZS5icmVhZGNydW1iQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZVByb2plY3RCcmVhZGNydW1icygkc2NvcGUuaWQpO1xuICAgICRzY29wZS5zdWJUYWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdFN1Yk5hdkJhcnMoJHNjb3BlLmlkLCAkc2NvcGUuam9iSWQpO1xuXG4gICAgJHNjb3BlLiRvbigna3ViZXJuZXRlc01vZGVsVXBkYXRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHVwZGF0ZURhdGEoKTtcbiAgICB9KTtcblxuICAgICRzY29wZS4kb24oJyRyb3V0ZVVwZGF0ZScsICgkZXZlbnQpID0+IHtcbiAgICAgIHVwZGF0ZURhdGEoKTtcbiAgICB9KTtcblxuICAgICRzY29wZS4kd2F0Y2goJ21vZGVsLnBlbmRpbmdPbmx5JywgKCRldmVudCkgPT4ge1xuICAgICAgdXBkYXRlRGF0YSgpO1xuICAgIH0pO1xuXG4gICAgJHNjb3BlLnNlbGVjdEJ1aWxkID0gKGJ1aWxkKSA9PiB7XG4gICAgICB2YXIgaWQgPSBidWlsZC5pZDtcbiAgICAgIGlmIChpZCkge1xuICAgICAgICBpZiAoaWQgIT09ICRzY29wZS5zZWxlY3RlZEJ1aWxkSWQpIHtcbiAgICAgICAgICAkc2NvcGUuc2VsZWN0ZWRCdWlsZElkID0gaWQ7XG4gICAgICAgICAgJHNjb3BlLiRicm9hZGNhc3QoXCJqZW5raW5zU2VsZWN0ZWRCdWlsZFwiLCBidWlsZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIHVwZGF0ZURhdGEgPSBfLmRlYm91bmNlKCgpID0+IHtcbiAgICAgIHZhciBlbnRpdHkgPSAkc2NvcGUuZW50aXR5O1xuICAgICAgaWYgKCRzY29wZS5qb2JJZCkge1xuICAgICAgICBpZiAoKCFlbnRpdHkgfHwgZW50aXR5LiRqZW5raW5zSm9iKSkge1xuICAgICAgICAgIHZhciBxdWVyeVBhdGggPSBcImZhYnJpYzgvc3RhZ2VzL1wiO1xuICAgICAgICAgIGlmICgkc2NvcGUubW9kZWwucGVuZGluZ09ubHkpIHtcbiAgICAgICAgICAgIHF1ZXJ5UGF0aCA9IFwiZmFicmljOC9wZW5kaW5nU3RhZ2VzL1wiO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgdXJsID0gS3ViZXJuZXRlcy5rdWJlcm5ldGVzUHJveHlVcmxGb3JTZXJ2aWNlQ3VycmVudE5hbWVzcGFjZShqZW5raW5zU2VydmljZU5hbWVBbmRQb3J0LCBVcmxIZWxwZXJzLmpvaW4oXCJqb2JcIiwgJHNjb3BlLmpvYklkLCBxdWVyeVBhdGgpKTtcbiAgICAgICAgICBpZiAodXJsICYmICghJHNjb3BlLm1vZGVsLmpvYiB8fCBLdWJlcm5ldGVzLmtlZXBQb2xsaW5nTW9kZWwpKSB7XG4gICAgICAgICAgICAkaHR0cC5nZXQodXJsKS5cbiAgICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgZW5yaWNoSmVua2luc1BpcGVsaW5lSm9iKGRhdGEsICRzY29wZS5pZCwgJHNjb3BlLmpvYklkKTtcbiAgICAgICAgICAgICAgICBpZiAoaGFzT2JqZWN0Q2hhbmdlZChkYXRhLCAkc2NvcGUuZW50aXR5Q2hhbmdlZENhY2hlKSkge1xuICAgICAgICAgICAgICAgICAgbG9nLmluZm8oXCJlbnRpdHkgaGFzIGNoYW5nZWQhXCIpO1xuICAgICAgICAgICAgICAgICAgJHNjb3BlLm1vZGVsLmpvYiA9IGRhdGE7XG5cbiAgICAgICAgICAgICAgICAgIHZhciBidWlsZHMgPSBkYXRhLmJ1aWxkcztcbiAgICAgICAgICAgICAgICAgIGlmIChidWlsZHMgJiYgYnVpbGRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAkc2NvcGUuc2VsZWN0QnVpbGQoYnVpbGRzWzBdKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgJHNjb3BlLm1vZGVsLmZldGNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgICAgICAgfSkuXG4gICAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcbiAgICAgICAgICAgICAgJHNjb3BlLm1vZGVsLmZldGNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICgkc2NvcGUubW9kZWwpIHtcbiAgICAgICAgICAgIEt1YmVybmV0ZXMuZW5yaWNoQnVpbGRzKCRzY29wZS5rdWJlTW9kZWwuYnVpbGRzKTtcblxuICAgICAgICAgICAgdmFyIGJ1aWxkcyA9IFtdO1xuICAgICAgICAgICAgYW5ndWxhci5mb3JFYWNoKCRzY29wZS5rdWJlTW9kZWwuYnVpbGRzLCAoYnVpbGQpID0+IHtcbiAgICAgICAgICAgICAgdmFyIGxhYmVscyA9IEt1YmVybmV0ZXMuZ2V0TGFiZWxzKGJ1aWxkKTtcbiAgICAgICAgICAgICAgdmFyIGFwcCA9IGxhYmVsc1tcImFwcFwiXTtcbiAgICAgICAgICAgICAgaWYgKGFwcCA9PT0gJHNjb3BlLnByb2plY3RJZCkge1xuICAgICAgICAgICAgICAgIGJ1aWxkcy5wdXNoKGJ1aWxkKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBidWlsZHMgPSBfLnNvcnRCeShidWlsZHMsIFwiJGNyZWF0aW9uRGF0ZVwiKS5yZXZlcnNlKCk7XG4gICAgICAgICAgICB2YXIgYWxsQnVpbGRzID0gYnVpbGRzO1xuICAgICAgICAgICAgaWYgKGFsbEJ1aWxkcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgIGJ1aWxkcyA9IF8uZmlsdGVyKGFsbEJ1aWxkcywgKGIpID0+ICFiLiRjcmVhdGlvbkRhdGUpO1xuICAgICAgICAgICAgICBpZiAoIWJ1aWxkcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBidWlsZHMgPSBbYWxsQnVpbGRzWzBdXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHBpcGVsaW5lcyA9IFtdO1xuICAgICAgICAgICAgYW5ndWxhci5mb3JFYWNoKGJ1aWxkcywgKGJ1aWxkKSA9PiB7XG4gICAgICAgICAgICAgIHZhciBidWlsZFN0YXR1cyA9IGJ1aWxkLnN0YXR1cyB8fCB7fTtcbiAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGJ1aWxkU3RhdHVzLnBoYXNlIHx8IFwiXCI7XG4gICAgICAgICAgICAgIHZhciByZXN1bHRVcHBlckNhc2UgPSByZXN1bHQudG9VcHBlckNhc2UoKTtcblxuICAgICAgICAgICAgICB2YXIgZGVzY3JpcHRpb24gPSBcIlwiO1xuICAgICAgICAgICAgICB2YXIgJHZpZXdMaW5rID0gYnVpbGQuJHZpZXdMaW5rO1xuICAgICAgICAgICAgICB2YXIgJGxvZ0xpbmsgPSBidWlsZC4kbG9nc0xpbms7XG4gICAgICAgICAgICAgIHZhciAkdGltZXN0YW1wID0gYnVpbGQuJGNyZWF0aW9uRGF0ZTtcbiAgICAgICAgICAgICAgdmFyIGR1cmF0aW9uID0gYnVpbGRTdGF0dXMuZHVyYXRpb247XG4gICAgICAgICAgICAgIGlmIChkdXJhdGlvbikge1xuICAgICAgICAgICAgICAgIC8vIDE3cyA9IDE3LDAwMCwwMDAsMDAwIG9uIG9wZW5zaGlmdFxuICAgICAgICAgICAgICAgIGR1cmF0aW9uID0gZHVyYXRpb24gLyAxMDAwMDAwO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHZhciBkaXNwbGF5TmFtZSA9IEt1YmVybmV0ZXMuZ2V0TmFtZShidWlsZCk7XG4gICAgICAgICAgICAgIHZhciAkaWNvbkNsYXNzID0gY3JlYXRlQnVpbGRTdGF0dXNJY29uQ2xhc3MocmVzdWx0VXBwZXJDYXNlKTtcbiAgICAgICAgICAgICAgdmFyICRiYWNrZ3JvdW5kQ2xhc3MgPSBjcmVhdGVCdWlsZFN0YXR1c0JhY2tncm91bmRDbGFzcyhyZXN1bHRVcHBlckNhc2UpO1xuICAgICAgICAgICAgICB2YXIgc3RhZ2UgPSB7XG4gICAgICAgICAgICAgICAgc3RhZ2VOYW1lOiBcIk9wZW5TaGlmdCBCdWlsZFwiLFxuICAgICAgICAgICAgICAgICR2aWV3TGluazogJHZpZXdMaW5rLFxuICAgICAgICAgICAgICAgICRsb2dMaW5rOiAkbG9nTGluayxcbiAgICAgICAgICAgICAgICAkc3RhcnRUaW1lOiAkdGltZXN0YW1wLFxuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbixcbiAgICAgICAgICAgICAgICBzdGF0dXM6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICAkaWNvbkNsYXNzOiAkaWNvbkNsYXNzLFxuICAgICAgICAgICAgICAgICRiYWNrZ3JvdW5kQ2xhc3M6ICRiYWNrZ3JvdW5kQ2xhc3NcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgdmFyIHBpcGVsaW5lID0ge1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgJHZpZXdMaW5rOiAkdmlld0xpbmssXG4gICAgICAgICAgICAgICAgJGxvZ0xpbms6ICRsb2dMaW5rLFxuICAgICAgICAgICAgICAgICR0aW1lc3RhbXA6ICR0aW1lc3RhbXAsXG4gICAgICAgICAgICAgICAgZHVyYXRpb246IGR1cmF0aW9uLFxuICAgICAgICAgICAgICAgIHN0YWdlczogW3N0YWdlXVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBwaXBlbGluZXMucHVzaChwaXBlbGluZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gbGV0cyBmaWx0ZXIgdGhlIE9wZW5TaGlmdCBidWlsZHMgYW5kIG1ha2UgYSBwaXBlbGluZSBmcm9tIHRoYXRcbiAgICAgICAgICAgICRzY29wZS5tb2RlbC5qb2IgPSB7XG4gICAgICAgICAgICAgICRqb2JJZDogJHNjb3BlLmpvYklkLFxuICAgICAgICAgICAgICAkcHJvamVjdDogJHNjb3BlLnByb2plY3RJZCxcbiAgICAgICAgICAgICAgYnVpbGRzOiBwaXBlbGluZXNcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgICRzY29wZS5tb2RlbC5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkc2NvcGUubW9kZWwuZmV0Y2hlZCA9IHRydWU7XG4gICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICB9XG4gICAgfSwgNTApO1xuXG4gICAgdXBkYXRlRGF0YSgpO1xuXG4gIH0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyRW5yaWNoZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckhlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyTmF2aWdhdGlvbi50c1wiLz5cblxubW9kdWxlIERldmVsb3BlciB7XG5cbiAgZXhwb3J0IHZhciBQcm9qZWN0Q29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJQcm9qZWN0Q29udHJvbGxlclwiLFxuICAgIFtcIiRzY29wZVwiLCBcIiRlbGVtZW50XCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiS3ViZXJuZXRlc1NjaGVtYVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcbiAgICAgICgkc2NvcGUsICRlbGVtZW50LCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNTY2hlbWEsXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcblxuICAgICAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAgICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xuICAgICAgICAkc2NvcGUuaWQgPSAkcm91dGVQYXJhbXNbXCJpZFwiXTtcblxuICAgICAgICAkc2NvcGUuc2NoZW1hID0gS3ViZXJuZXRlc1NjaGVtYTtcbiAgICAgICAgJHNjb3BlLmNvbmZpZyA9IEt1YmVybmV0ZXNTY2hlbWEuZGVmaW5pdGlvbnMub3NfYnVpbGRfQnVpbGRDb25maWc7XG4gICAgICAgICRzY29wZS5lbnRpdHlDaGFuZ2VkQ2FjaGUgPSB7fTtcbiAgICAgICAgJHNjb3BlLmVudlZlcnNpb25zQ2FjaGUgPSB7fTtcbiAgICAgICAgJHNjb3BlLmVudk5TQ2FjaGVzID0ge307XG4gICAgICAgICRzY29wZS5lbnZWZXJzaW9ucyA9IHt9O1xuXG4gICAgICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcbiAgICAgICAgJHNjb3BlLmJyZWFkY3J1bWJDb25maWcgPSBbXTsgLy9EZXZlbG9wZXIuY3JlYXRlUHJvamVjdEJyZWFkY3J1bWJzKCRzY29wZS5pZCk7XG4gICAgICAgIHVwZGF0ZVRhYnMoKTtcbiAgICAgICAgLy8gdGhpcyBpcyB1c2VkIGZvciB0aGUgcGVuZGluZ1BpcGVsaW5lcyB2aWV3XG4gICAgICAgICRzY29wZS5qb2JJZCA9ICRzY29wZS5pZDtcbiAgICAgICAgJHNjb3BlLnBlbmRpbmdQaXBlbGluZXNPbmx5ID0gdHJ1ZTtcblxuICAgICAgICAkc2NvcGUuJG9uKCdqZW5raW5zU2VsZWN0ZWRCdWlsZCcsIChldmVudCwgYnVpbGQpID0+IHtcbiAgICAgICAgICAkc2NvcGUuc2VsZWN0ZWRCdWlsZCA9IGJ1aWxkO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBUT0RPIHRoaXMgc2hvdWxkIGJlIHVubmVjZXNzYXJ5IGJ1dCBzZWVtcyBzb21ldGllbXMgdGhpcyB3YXRjaCBkb2Vzbid0IGFsd2F5cyB0cmlnZ2VyIHVubGVzcyB5b3UgaGl0IHJlbG9hZCBvbiB0aGlzIHBhZ2VcbiAgICAgICAgaWYgKCRzY29wZS5tb2RlbC5idWlsZGNvbmZpZ3MpIHtcbiAgICAgICAgICBvbkJ1aWxkQ29uZmlncygkc2NvcGUubW9kZWwuYnVpbGRjb25maWdzKTtcbiAgICAgICAgfVxuICAgICAgICBLdWJlcm5ldGVzLndhdGNoKCRzY29wZSwgJGVsZW1lbnQsIFwiYnVpbGRjb25maWdzXCIsICRzY29wZS5uYW1lc3BhY2UsIG9uQnVpbGRDb25maWdzKTtcblxuICAgICAgICBmdW5jdGlvbiBvbkJ1aWxkQ29uZmlncyhidWlsZENvbmZpZ3MpIHtcbiAgICAgICAgICBhbmd1bGFyLmZvckVhY2goYnVpbGRDb25maWdzLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgdmFyIG5hbWUgPSBLdWJlcm5ldGVzLmdldE5hbWUoZGF0YSk7XG4gICAgICAgICAgICBpZiAobmFtZSA9PT0gJHNjb3BlLmlkKSB7XG4gICAgICAgICAgICAgIHZhciBzb3J0ZWRCdWlsZHMgPSBudWxsO1xuICAgICAgICAgICAgICBLdWJlcm5ldGVzLmVucmljaEJ1aWxkQ29uZmlnKGRhdGEsIHNvcnRlZEJ1aWxkcyk7XG4gICAgICAgICAgICAgIGlmIChoYXNPYmplY3RDaGFuZ2VkKGRhdGEsICRzY29wZS5lbnRpdHlDaGFuZ2VkQ2FjaGUpKSB7XG4gICAgICAgICAgICAgICAgbG9nLmluZm8oXCJlbnRpdHkgaGFzIGNoYW5nZWQhXCIpO1xuICAgICAgICAgICAgICAgICRzY29wZS5lbnRpdHkgPSBkYXRhO1xuICAgICAgICAgICAgICAgICRzY29wZS5lbnRpdHkuJGJ1aWxkID0gKGRhdGEuJGZhYnJpYzhDb2RlVmlld3MgfHwge30pWydmYWJyaWM4LmxpbmsuYnJvd3NlR29ncy52aWV3J107XG4gICAgICAgICAgICAgICAgJHNjb3BlLm1vZGVsLnNldFByb2plY3QoJHNjb3BlLmVudGl0eSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdXBkYXRlRW52aXJvbm1lbnRXYXRjaCgpO1xuICAgICAgICAgICAgICB1cGRhdGVUYWJzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgJHNjb3BlLm1vZGVsLmZldGNoZWQgPSB0cnVlO1xuICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgIH1cblxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBXZSBoYXZlIHVwZGF0ZWQgdGhlIGVudGl0eSBzbyBsZXRzIG1ha2Ugc3VyZSB3ZSBhcmUgd2F0Y2hpbmcgYWxsIHRoZSBlbnZpcm9ubWVudHMgdG8gZmluZFxuICAgICAgICAgKiB0aGUgcHJvamVjdCB2ZXJzaW9ucyBmb3IgZWFjaCBuYW1lc3BhY2VcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZUVudmlyb25tZW50V2F0Y2goKSB7XG4gICAgICAgICAgdmFyIHByb2plY3QgPSAkc2NvcGUuZW50aXR5O1xuICAgICAgICAgIGlmIChwcm9qZWN0KSB7XG4gICAgICAgICAgICB2YXIgamVua2luc0pvYiA9IHByb2plY3QuJGplbmtpbnNKb2I7XG4gICAgICAgICAgICBpZiAoamVua2luc0pvYikge1xuICAgICAgICAgICAgICB2YXIgYnVpbGRzVGFiID0gXy5maW5kKCRzY29wZS5zdWJUYWJDb25maWcsIHtpZDogXCJidWlsZHNcIn0pO1xuICAgICAgICAgICAgICBpZiAoYnVpbGRzVGFiKSB7XG4gICAgICAgICAgICAgICAgYnVpbGRzVGFiW1wiaHJlZlwiXSA9IFVybEhlbHBlcnMuam9pbihcIi93b3Jrc3BhY2VzXCIsIEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKSwgXCJwcm9qZWN0c1wiLCAkc2NvcGUuaWQsIFwiamVua2luc0pvYlwiLCBqZW5raW5zSm9iKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhbmd1bGFyLmZvckVhY2gocHJvamVjdC5lbnZpcm9ubWVudHMsIChlbnYpID0+IHtcbiAgICAgICAgICAgICAgdmFyIG5zID0gZW52Lm5hbWVzcGFjZTtcbiAgICAgICAgICAgICAgdmFyIGNhY2hlcyA9ICRzY29wZS5lbnZOU0NhY2hlc1tuc107XG4gICAgICAgICAgICAgIGlmICghY2FjaGVzKSB7XG4gICAgICAgICAgICAgICAgY2FjaGVzID0ge307XG4gICAgICAgICAgICAgICAgJHNjb3BlLmVudk5TQ2FjaGVzW25zXSA9IGNhY2hlcztcbiAgICAgICAgICAgICAgICBsb2FkUHJvamVjdFZlcnNpb25zKCRzY29wZSwgJGVsZW1lbnQsIHByb2plY3QsIGVudiwgbnMsICRzY29wZS5lbnZWZXJzaW9ucywgY2FjaGVzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlVGFicygpIHtcbiAgICAgICAgICAkc2NvcGUuc3ViVGFiQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZVByb2plY3RTdWJOYXZCYXJzKCRzY29wZS5pZCwgbnVsbCwgJHNjb3BlKTtcbiAgICAgICAgfVxuXG4gICAgICB9XSk7XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyUGx1Z2luLnRzXCIvPlxuXG5tb2R1bGUgRGV2ZWxvcGVyIHtcblxuICBfbW9kdWxlLmNvbnRyb2xsZXIoJ0RldmVsb3Blci5Qcm9qZWN0U2VsZWN0b3InLCBbJyRzY29wZScsICckcm91dGVQYXJhbXMnLCAnS3ViZXJuZXRlc01vZGVsJywgKCRzY29wZSwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwpID0+IHtcbiAgICB2YXIgcHJvamVjdElkID0gJHJvdXRlUGFyYW1zWydwcm9qZWN0SWQnXSB8fCAkcm91dGVQYXJhbXNbJ3Byb2plY3QnXSB8fCAkcm91dGVQYXJhbXNbJ2lkJ107XG4gICAgaWYgKHByb2plY3RJZCkge1xuICAgICAgJHNjb3BlLnByb2plY3RJZCA9IHByb2plY3RJZDtcbiAgICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbFxuICAgICAgJHNjb3BlLiR3YXRjaCgnbW9kZWwuYnVpbGRjb25maWdzJywgKGJ1aWxkY29uZmlncykgPT4ge1xuICAgICAgICAkc2NvcGUucHJvamVjdHMgPSBidWlsZGNvbmZpZ3M7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nLmluZm8oXCJubyBwcm9qZWN0IElEIGluIHJvdXRlUGFyYW1zOiBcIiwgJHJvdXRlUGFyYW1zKTtcbiAgICB9XG4gIH1dKTtcblxufVxuXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4va3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzSGVscGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJFbnJpY2hlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVySGVscGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJOYXZpZ2F0aW9uLnRzXCIvPlxuXG5tb2R1bGUgRGV2ZWxvcGVyIHtcblxuICBleHBvcnQgdmFyIFByb2plY3RzQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJQcm9qZWN0c0NvbnRyb2xsZXJcIiwgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiJGRpYWxvZ1wiLCBcIiR3aW5kb3dcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRsb2NhdGlvblwiLCBcImxvY2FsU3RvcmFnZVwiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXG4gICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCAkZGlhbG9nLCAkd2luZG93LCAkdGVtcGxhdGVDYWNoZSwgJHJvdXRlUGFyYW1zLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgbG9jYWxTdG9yYWdlLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcblxuICAgICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XG4gICAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XG5cbiAgICAgICRzY29wZS50YWJsZUNvbmZpZyA9IHtcbiAgICAgICAgZGF0YTogJ21vZGVsLmJ1aWxkY29uZmlncycsXG4gICAgICAgIHNob3dTZWxlY3Rpb25DaGVja2JveDogdHJ1ZSxcbiAgICAgICAgZW5hYmxlUm93Q2xpY2tTZWxlY3Rpb246IGZhbHNlLFxuICAgICAgICBtdWx0aVNlbGVjdDogdHJ1ZSxcbiAgICAgICAgc2VsZWN0ZWRJdGVtczogW10sXG4gICAgICAgIGZpbHRlck9wdGlvbnM6IHtcbiAgICAgICAgICBmaWx0ZXJUZXh0OiAkbG9jYXRpb24uc2VhcmNoKClbXCJxXCJdIHx8ICcnXG4gICAgICAgIH0sXG4gICAgICAgIGNvbHVtbkRlZnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJyRuYW1lJyxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTmFtZScsXG4gICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImlkVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgIH0sXG4vKlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpZWxkOiAnc3BlYy5zb3VyY2UudHlwZScsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1NvdXJjZSdcbiAgICAgICAgICB9LFxuKi9cbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ3NwZWMuc291cmNlLmdpdC51cmknLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdSZXBvc2l0b3J5J1xuICAgICAgICAgIH0sXG4vKlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpZWxkOiAnc3BlYy5zdHJhdGVneS50eXBlJyxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnU3RyYXRlZ3knXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ3NwZWMuc3RyYXRlZ3kuc3RpU3RyYXRlZ3kuaW1hZ2UnLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdTb3VyY2UgSW1hZ2UnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ3NwZWMub3V0cHV0LmltYWdlVGFnJyxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnT3V0cHV0IEltYWdlJ1xuICAgICAgICAgIH0sXG4qL1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpZWxkOiAnbWV0YWRhdGEuZGVzY3JpcHRpb24nLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdEZXNjcmlwdGlvbidcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpZWxkOiAnJGNyZWF0aW9uRGF0ZScsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ0NyZWF0ZWQnLFxuICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJjcmVhdGlvblRpbWVUZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJyRsYWJlbHNUZXh0JyxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTGFiZWxzJyxcbiAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwibGFiZWxUZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9O1xuXG4gICAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XG5cbiAgICAgICRzY29wZS5icmVhZGNydW1iQ29uZmlnID0gY3JlYXRlUHJvamVjdEJyZWFkY3J1bWJzKCk7XG4gICAgICAkc2NvcGUuc3ViVGFiQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZVdvcmtzcGFjZVN1Yk5hdkJhcnMoKTtcblxuICAgICAgLy8gVE9ET1xuICAgICAgLy8kc2NvcGUuaXNMb2dnZWRJbnRvR29ncyA9IEZvcmdlLmlzTG9nZ2VkSW50b0dvZ3M7XG5cbiAgICAgICRzY29wZS5kZWxldGVQcm9tcHQgPSAoc2VsZWN0ZWQpID0+IHtcbiAgICAgICAgVUkubXVsdGlJdGVtQ29uZmlybUFjdGlvbkRpYWxvZyg8VUkuTXVsdGlJdGVtQ29uZmlybUFjdGlvbk9wdGlvbnM+e1xuICAgICAgICAgIGNvbGxlY3Rpb246IHNlbGVjdGVkLFxuICAgICAgICAgIGluZGV4OiAnJG5hbWUnLFxuICAgICAgICAgIG9uQ2xvc2U6IChyZXN1bHQ6Ym9vbGVhbikgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICBmdW5jdGlvbiBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgbmV4dCkge1xuICAgICAgICAgICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgICAgICAgICBkZWxldGVFbnRpdHkobmV4dCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgLy8gVE9ET1xuICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlRGF0YSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHRpdGxlOiAnRGVsZXRlIEFwcHMnLFxuICAgICAgICAgIGFjdGlvbjogJ1RoZSBmb2xsb3dpbmcgQXBwcyB3aWxsIGJlIGRlbGV0ZWQ6JyxcbiAgICAgICAgICBva1RleHQ6ICdEZWxldGUnLFxuICAgICAgICAgIG9rQ2xhc3M6ICdidG4tZGFuZ2VyJyxcbiAgICAgICAgICBjdXN0b206IFwiVGhpcyBvcGVyYXRpb24gaXMgcGVybWFuZW50IG9uY2UgY29tcGxldGVkIVwiLFxuICAgICAgICAgIGN1c3RvbUNsYXNzOiBcImFsZXJ0IGFsZXJ0LXdhcm5pbmdcIlxuICAgICAgICB9KS5vcGVuKCk7XG4gICAgICB9O1xuXG4gICAgICBmdW5jdGlvbiBkZWxldGVFbnRpdHkoc2VsZWN0aW9uLCBuZXh0Q2FsbGJhY2spIHtcbiAgICAgICAgdmFyIG5hbWUgPSAoc2VsZWN0aW9uIHx8IHt9KS4kbmFtZTtcbiAgICAgICAgdmFyIGplbmtpbnNKb2IgPSBzZWxlY3Rpb24uJGplbmtpbnNKb2I7XG4gICAgICAgIHZhciBwdWJsaWNKZW5raW5zVXJsID0gamVua2luc0xpbmsoKTtcbiAgICAgICAgLy92YXIgamVua2luc1VybCA9IENvcmUucGF0aEdldChzZWxlY3Rpb24sIFtcIiRmYWJyaWM4Vmlld3NcIiwgXCJmYWJyaWM4LmxpbmsuamVua2lucy5qb2JcIiwgXCJ1cmxcIl0pO1xuICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQWJvdXQgdG8gZGVsZXRlIGJ1aWxkIGNvbmZpZzogXCIgKyBuYW1lKTtcbiAgICAgICAgICB2YXIgdXJsID0gS3ViZXJuZXRlcy5idWlsZENvbmZpZ1Jlc3RVcmwobmFtZSk7XG4gICAgICAgICAgJGh0dHAuZGVsZXRlKHVybCkuXG4gICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICBuZXh0Q2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pLlxuICAgICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGRlbGV0ZSBidWlsZCBjb25maWcgb24gXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XG4gICAgICAgICAgICAgIG5leHRDYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJ3YXJuaW5nOiBubyBuYW1lIGZvciBzZWxlY3Rpb246IFwiICsgYW5ndWxhci50b0pzb24oc2VsZWN0aW9uKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoamVua2luc0pvYiAmJiBwdWJsaWNKZW5raW5zVXJsKSB7XG4gICAgICAgICAgdmFyIHVybCA9IEt1YmVybmV0ZXMua3ViZXJuZXRlc1Byb3h5VXJsRm9yU2VydmljZUN1cnJlbnROYW1lc3BhY2UoamVua2luc1NlcnZpY2VOYW1lQW5kUG9ydCwgVXJsSGVscGVycy5qb2luKFwiam9iXCIsIGplbmtpbnNKb2IsIFwiZG9EZWxldGVcIikpO1xuICAgICAgICAgIHZhciBib2R5ID0gXCJcIjtcbiAgICAgICAgICB2YXIgY29uZmlnID0ge1xuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIGxvZy5pbmZvKFwicG9zdGluZyB0byBqZW5raW5zVXJsOiBcIiArIHVybCk7XG4gICAgICAgICAgJGh0dHAucG9zdCh1cmwsIGJvZHksIGNvbmZpZykuXG4gICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICBsb2cuaW5mbyhcIk1hbmFnZWQgdG8gZGVsZXRlIFwiICsgdXJsKTtcbiAgICAgICAgICAgIH0pLlxuICAgICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGRlbGV0ZSBqZW5raW5zIGpvYiBhdCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbi8qXG4gICAgICAkc2NvcGUuJGtlZXBQb2xsaW5nID0gKCkgPT4gS3ViZXJuZXRlcy5rZWVwUG9sbGluZ01vZGVsO1xuICAgICAgJHNjb3BlLmZldGNoID0gUG9sbEhlbHBlcnMuc2V0dXBQb2xsaW5nKCRzY29wZSwgKG5leHQ6KCkgPT4gdm9pZCkgPT4ge1xuICAgICAgICB2YXIgdXJsID0gS3ViZXJuZXRlcy5idWlsZENvbmZpZ3NSZXN0VVJMKCk7XG4gICAgICAgICRodHRwLmdldCh1cmwpLlxuICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiZ290IGRhdGEgXCIgKyBhbmd1bGFyLnRvSnNvbihkYXRhLCB0cnVlKSk7XG4gICAgICAgICAgICAgIHZhciBzb3J0ZWRCdWlsZHMgPSBudWxsO1xuICAgICAgICAgICAgICAkc2NvcGUuYnVpbGRDb25maWdzID0gS3ViZXJuZXRlcy5lbnJpY2hCdWlsZENvbmZpZ3MoZGF0YS5pdGVtcywgc29ydGVkQnVpbGRzKTtcbiAgICAgICAgICAgICAgJHNjb3BlLm1vZGVsLmZldGNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkuXG4gICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgICRzY29wZS5mZXRjaCgpO1xuKi9cbiAgICB9XSk7XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4va3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzSGVscGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJFbnJpY2hlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVySGVscGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJOYXZpZ2F0aW9uLnRzXCIvPlxuXG5tb2R1bGUgRGV2ZWxvcGVyIHtcblxuICBleHBvcnQgdmFyIFdvcmtzcGFjZUNvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiV29ya3NwYWNlQ29udHJvbGxlclwiLFxuICAgIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIkt1YmVybmV0ZXNTY2hlbWFcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXG4gICAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNTY2hlbWEsXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcblxuICAgICAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAgICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xuICAgICAgICAkc2NvcGUuaWQgPSAkcm91dGVQYXJhbXNbXCJuYW1lc3BhY2VcIl07XG4gICAgICAgICRzY29wZS5zY2hlbWEgPSBLdWJlcm5ldGVzU2NoZW1hO1xuICAgICAgICAkc2NvcGUuY29uZmlnID0gS3ViZXJuZXRlc1NjaGVtYS5kZWZpbml0aW9ucy5rdWJlcm5ldGVzX05hbWVzcGFjZTtcblxuICAgICAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XG4gICAgICAgICRzY29wZS5icmVhZGNydW1iQ29uZmlnID0gY3JlYXRlV29ya3NwYWNlQnJlYWRjcnVtYnMoKTtcbiAgICAgICAgJHNjb3BlLnN1YlRhYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVXb3Jrc3BhY2VTdWJOYXZCYXJzKCk7XG5cbiAgICAgICAgJHNjb3BlLiRrZWVwUG9sbGluZyA9ICgpID0+IEt1YmVybmV0ZXMua2VlcFBvbGxpbmdNb2RlbDtcbiAgICAgICAgJHNjb3BlLmZldGNoID0gUG9sbEhlbHBlcnMuc2V0dXBQb2xsaW5nKCRzY29wZSwgKG5leHQ6KCkgPT4gdm9pZCkgPT4ge1xuICAgICAgICAgICRzY29wZS5pdGVtID0gbnVsbDtcbiAgICAgICAgICBpZiAoJHNjb3BlLmlkKSB7XG4gICAgICAgICAgICB2YXIgdXJsID0gVXJsSGVscGVycy5qb2luKEt1YmVybmV0ZXMucmVzb3VyY2VzVXJpRm9yS2luZChcIlByb2plY3RzXCIpLCAkc2NvcGUuaWQpO1xuICAgICAgICAgICAgbG9nLmluZm8oXCJMb2FkaW5nIHVybDogXCIgKyB1cmwpO1xuICAgICAgICAgICAgJGh0dHAuZ2V0KHVybCkuXG4gICAgICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICRzY29wZS5lbnRpdHkgPSBlbnJpY2hXb3Jrc3BhY2UoZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICRzY29wZS5tb2RlbC5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgICAgfSkuXG4gICAgICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGxvYWQgXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XG4gICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJHNjb3BlLm1vZGVsLmZldGNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgICAgIG5leHQoKTtcblxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgJHNjb3BlLmZldGNoKCk7XG4gICAgICB9XSk7XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4va3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzSGVscGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJFbnJpY2hlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVySGVscGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJOYXZpZ2F0aW9uLnRzXCIvPlxuXG5tb2R1bGUgRGV2ZWxvcGVyIHtcblxuICBleHBvcnQgdmFyIFdvcmtzcGFjZXNDb250cm9sbGVyID0gY29udHJvbGxlcihcIldvcmtzcGFjZXNDb250cm9sbGVyXCIsXG4gICAgW1wiJHNjb3BlXCIsIFwiT3JhY2xlU3RhdHVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsIFwiRGF0YUluZm9Nb2RlbFwiLCBcIiRpbnRlcnZhbFwiLFxuICAgICAgKCRzY29wZSwgT3JhY2xlU3RhdHVzTW9kZWwsIEt1YmVybmV0ZXNNb2RlbDpLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSwgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwsIERhdGFJbmZvTW9kZWwsJGludGVydmFsKSA9PiB7XG4gICAgICAgICRzY29wZS5tb2RlbCA9IERhdGFJbmZvTW9kZWw7XG4gICAgICAgICRzY29wZS5pdGVtcz1bXTtcblxuICAgICAgICAkc2NvcGUubG9jYWxpdGVtcz1bXTtcbiAgICAgICAgdmFyIHJvb3RQYXRoPVwiXCI7XG4gICAgICAgIHZhciBGaWx0ZXJMaXN0ID17XG4gICAgICAgICAgICBsZW5ndGg6MFxuICAgICAgICB9O1xuXG4gICAgICAgIHVwZGF0ZSgpO1xuXG4gICAgICAgICRzY29wZS50cmVlT3B0aW9ucyA9IHtcbiAgICAgICAgICBub2RlQ2hpbGRyZW46IFwiY2hpbGRyZW5cIixcbiAgICAgICAgICBkaXJTZWxlY3RhYmxlOiB0cnVlLFxuICAgICAgICAgIG11bHRpU2VsZWN0aW9uOiBmYWxzZSxcbiAgICAgICAgICBpbmplY3RDbGFzc2VzOiB7XG4gICAgICAgICAgICB1bDogXCJhMVwiLFxuICAgICAgICAgICAgbGk6IFwiYTJcIixcbiAgICAgICAgICAgIGxpU2VsZWN0ZWQ6IFwiYTdcIixcbiAgICAgICAgICAgIGlFeHBhbmRlZDogXCJhM1wiLFxuICAgICAgICAgICAgaUNvbGxhcHNlZDogXCJhNFwiLFxuICAgICAgICAgICAgaUxlYWY6IFwiYTVcIixcbiAgICAgICAgICAgIGxhYmVsOiBcImE2XCIsXG4gICAgICAgICAgICBsYWJlbFNlbGVjdGVkOiBcImE4XCJcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgJHNjb3BlLnRyZWVPcHRpb25zcyA9IHtcbiAgICAgICAgICBub2RlQ2hpbGRyZW46IFwiY2hpbGRyZW5cIixcbiAgICAgICAgICBkaXJTZWxlY3RhYmxlOiB0cnVlLFxuICAgICAgICAgIG11bHRpU2VsZWN0aW9uOiB0cnVlLFxuICAgICAgICAgIGluamVjdENsYXNzZXM6IHtcbiAgICAgICAgICAgIHVsOiBcImExXCIsXG4gICAgICAgICAgICBsaTogXCJhMlwiLFxuICAgICAgICAgICAgbGlTZWxlY3RlZDogXCJhN1wiLFxuICAgICAgICAgICAgaUV4cGFuZGVkOiBcImEzXCIsXG4gICAgICAgICAgICBpQ29sbGFwc2VkOiBcImE0XCIsXG4gICAgICAgICAgICBpTGVhZjogXCJhNVwiLFxuICAgICAgICAgICAgbGFiZWw6IFwiYTZcIixcbiAgICAgICAgICAgIGxhYmVsU2VsZWN0ZWQ6IFwiYThcIlxuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAkc2NvcGUuc2hvd1NlbGVjdGVkID0gKG5vZGUsc2VsZWN0ZWQpPT57XG5cbiAgICAgICAgICAgJHNjb3BlLm1vZGVsLnNlcnZlcml0ZW1zID0gW107XG4gICAgICAgICAgIHZhciBhcnJheSA9IG5ldyBBcnJheSgpO1xuICAgICAgICAgICBpZihzZWxlY3RlZCl7XG4gICAgICAgICAgICAgIGlmKG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICAgICAgIGFycmF5LnVuc2hpZnQobm9kZSk7XG4gICAgICAgICAgICAgICAgIHdoaWxlKGFycmF5Lmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGROb2RlPWFycmF5LnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBpZihjaGlsZE5vZGUuY2hpbGRyZW4ubGVuZ3RoPjApe1xuICAgICAgICAgICAgICAgICAgICAgICBmb3IodmFyIGk9MDtpPGNoaWxkTm9kZS5jaGlsZHJlbi5sZW5ndGg7aSsrKVxuICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5LnVuc2hpZnQoY2hpbGROb2RlLmNoaWxkcmVuW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgICAgIGlmKGNoaWxkTm9kZS5oYXNPd25Qcm9wZXJ0eShcInBhdGhcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5tb2RlbC5zZXJ2ZXJpdGVtcy5wdXNoKGNoaWxkTm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgaWYobm9kZS5oYXNPd25Qcm9wZXJ0eShcInBhdGhcIikpXG4gICAgICAgICAgICAgICAgICAgICRzY29wZS5tb2RlbC5zZXJ2ZXJpdGVtcy5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAkc2NvcGUuZGF0YUZvclRoZVRyZWUgPSAkc2NvcGUubW9kZWwuc2VydmVyZGF0YTtcbiAgICAgICAgJHNjb3BlLmRhdGFGb3JUaGVUcmVlTG9jYWwgPSAkc2NvcGUubW9kZWwubG9jYWxkYXRhO1xuXG4gICAgICAgICRzY29wZS4kd2F0Y2goJ21vZGVsLnNlcnZlcmRhdGEnLCBmdW5jdGlvbihuZXdWYWx1ZSxvbGRWYWx1ZSl7XG4gICAgICAgICAgIGlmKG5ld1ZhbHVlKXtcbiAgICAgICAgICAgICAgJHNjb3BlLmRhdGFGb3JUaGVUcmVlID0gJHNjb3BlLm1vZGVsLnNlcnZlcmRhdGE7XG4gICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgJHNjb3BlLiR3YXRjaCgnbW9kZWwubG9jYWxkYXRhJywgZnVuY3Rpb24obmV3VmFsdWUsb2xkVmFsdWUpe1xuICAgICAgICAgICBpZihuZXdWYWx1ZSl7XG4gICAgICAgICAgICAgICRzY29wZS5kYXRhRm9yVGhlVHJlZUxvY2FsID0gJHNjb3BlLm1vZGVsLmxvY2FsZGF0YTtcbiAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAkc2NvcGUudXBMb2FkWE1MRmlsZSA9IChmaWxlcykgPT4ge1xuICAgICAgICAgICBGaWx0ZXJMaXN0Lmxlbmd0aD0wO1xuICAgICAgICAgICBpZihmaWxlcy5sZW5ndGg+MCl7XG4gICAgICAgICAgICAgdmFyIGo9MDtcbiAgICAgICAgICAgICBmb3IodmFyIGk9MDtpPGZpbGVzLmxlbmd0aDtpKyspe1xuICAgICAgICAgICAgICAgaWYoZmlsZXNbaV0ubmFtZS5pbmRleE9mKFwiZGF0YS54bWxcIikhPS0xKXtcbiAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coZmlsZXNbaV0pO1xuICAgICAgICAgICAgICAgICAgcm9vdFBhdGg9ZmlsZXNbaV0ud2Via2l0UmVsYXRpdmVQYXRoLnJlcGxhY2UoL1xcL2RhdGEueG1sJC8sXCJcIik7XG4gICAgICAgICAgICAgICAgICB2YXIgcmVhZGVyPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdFN0cmluZyA9IFwie1xcXCJuYW1lXFxcIjogXFxcIuaVsOaNrlxcXCIsIFxcXCJjaGlsZHJlblxcXCI6W1wiO1xuICAgICAgICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgICAgICB2YXIgc3RyID0gZXZlbnQudGFyZ2V0LnJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgIC8vICAgICBhbGVydChzdHIpO1xuICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSBcIjxEYXRhPlwiO1xuICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW1FbmQgPSBcIjwvRGF0YT5cIjtcbiAgICAgICAgICAgICAgICAgICAgIC8vIMK0w73Ct8K1wrvDmMK1w4TCvcOhwrnDu8KjwrpcbiAgICAgICAgICAgICAgICAgICAgIGlmKHN0ciAhPSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gw5XDu8K4w7Z4bWwgw43DqsOVw7vDisO9wr7DncKjwrp4bWxkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgeG1sZGF0YSA9IHN0ci50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gwrDCtMK2w5TDj8OzwrfDlsK1w4TDisO9wr7DncKjwrpcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtQXJyYXkgPSB4bWxkYXRhLnNwbGl0KGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW1zaXplID0gaXRlbUFycmF5Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcih2YXIgayA9IDE7IGsgPCBpdGVtc2l6ZTsgaysrKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbXZhbHVlID0gaXRlbUFycmF5W2tdLnNwbGl0KGl0ZW1FbmQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByb3ZpbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb3ZpbmNlVmFsdWVUZW1wID0gaXRlbXZhbHVlWzBdLnNwbGl0KFwiPHByb3ZpbmNlPlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvdmluY2VWYWx1ZSA9IHByb3ZpbmNlVmFsdWVUZW1wW3Byb3ZpbmNlVmFsdWVUZW1wLmxlbmd0aC0xXS5zcGxpdChcIjwvcHJvdmluY2U+XCIpWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2NpdHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2l0eVZhbHVlVGVtcCA9IGl0ZW12YWx1ZVswXS5zcGxpdChcIjxjaXR5PlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2l0eVZhbHVlID0gY2l0eVZhbHVlVGVtcFtjaXR5VmFsdWVUZW1wLmxlbmd0aC0xXS5zcGxpdChcIjwvY2l0eT5cIilbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvdW50eVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb3VudHlWYWx1ZVRlbXAgPSBpdGVtdmFsdWVbMF0uc3BsaXQoXCI8Y291bnR5PlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY291bnR5VmFsdWUgPSBjb3VudHlWYWx1ZVRlbXBbY291bnR5VmFsdWVUZW1wLmxlbmd0aC0xXS5zcGxpdChcIjwvY291bnR5PlwiKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPGNvZGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGVWYWx1ZVRlbXAgPSBpdGVtdmFsdWVbMF0uc3BsaXQoXCI8Y29kZT5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGVWYWx1ZSA9IGNvZGVWYWx1ZVRlbXBbY29kZVZhbHVlVGVtcC5sZW5ndGgtMV0uc3BsaXQoXCI8L2NvZGU+XCIpWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPHN5c19uYW1lPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzeXNfbmFtZVZhbHVlVGVtcCA9IGl0ZW12YWx1ZVswXS5zcGxpdChcIjxzeXNfbmFtZT5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN5c19uYW1lVmFsdWUgPSBzeXNfbmFtZVZhbHVlVGVtcFtzeXNfbmFtZVZhbHVlVGVtcC5sZW5ndGgtMV0uc3BsaXQoXCI8L3N5c19uYW1lPlwiKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPGNoYXJhY3Rlcl9zZXQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXJhY3Rlcl9zZXRWYWx1ZVRlbXAgPSBpdGVtdmFsdWVbMF0uc3BsaXQoXCI8Y2hhcmFjdGVyX3NldD5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXJhY3Rlcl9zZXRWYWx1ZSA9IGNoYXJhY3Rlcl9zZXRWYWx1ZVRlbXBbY2hhcmFjdGVyX3NldFZhbHVlVGVtcC5sZW5ndGgtMV0uc3BsaXQoXCI8L2NoYXJhY3Rlcl9zZXQ+XCIpWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPHN5c19uYW1lX2NvZGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN5c19uYW1lX2NvZGVWYWx1ZVRlbXAgPSBpdGVtdmFsdWVbMF0uc3BsaXQoXCI8c3lzX25hbWVfY29kZT5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN5c19uYW1lX2NvZGVWYWx1ZSA9IHN5c19uYW1lX2NvZGVWYWx1ZVRlbXBbc3lzX25hbWVfY29kZVZhbHVlVGVtcC5sZW5ndGgtMV0uc3BsaXQoXCI8L3N5c19uYW1lX2NvZGU+XCIpWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDxjb250YWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250YWN0VmFsdWVUZW1wID0gaXRlbXZhbHVlWzBdLnNwbGl0KFwiPGNvbnRhY3Q+XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250YWN0VmFsdWUgPSBjb250YWN0VmFsdWVUZW1wW2NvbnRhY3RWYWx1ZVRlbXAubGVuZ3RoLTFdLnNwbGl0KFwiPC9jb250YWN0PlwiKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDxwaG9uZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGhvbmVWYWx1ZVRlbXAgPSBpdGVtdmFsdWVbMF0uc3BsaXQoXCI8cGhvbmU+XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwaG9uZVZhbHVlID0gcGhvbmVWYWx1ZVRlbXBbcGhvbmVWYWx1ZVRlbXAubGVuZ3RoLTFdLnNwbGl0KFwiPC9waG9uZT5cIilbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA8ZGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0ZVZhbHVlVGVtcCA9IGl0ZW12YWx1ZVswXS5zcGxpdChcIjxkYXRlPlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0ZVZhbHVlID0gZGF0ZVZhbHVlVGVtcFtkYXRlVmFsdWVUZW1wLmxlbmd0aC0xXS5zcGxpdChcIjwvZGF0ZT5cIilbMF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2lkIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbUlkID0gY29kZVZhbHVlICsgXCJfXCIgKyBzeXNfbmFtZV9jb2RlVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cCBnZXQgdmVyc2lvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByaWQgPSBpdGVtSWQvLy5yZXBsYWNlKC9cXFwiL2csIFwiXCIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyB0eXBlVmFsdWUg6YCa6L+H5YmN56uv6aG16Z2i6I635Y+W5oiW6ICF77yf77yf77yM6LSi5pS/MDHmiJbnpL7kv50wMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0eXBlVmFsdWUgPSBcIjAxXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyBiYXRjaFZhbHVlIOmAmui/h+WJjeerr+mhtemdouiOt+WPluaIluiAhe+8n++8n++8jOaJueasoUEg77ya5aSn5YaZ55qEQe+8jOaJueasoUIg77ya5aSn5YaZ55qEQu+8jFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiYXRjaFZhbHVlID0gXCJBXCI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbW5hbWUgPSBjaXR5VmFsdWUgKyBjb3VudHlWYWx1ZSArIHN5c19uYW1lVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZlcnNpb25pZCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih4aHIucmVhZHlTdGF0ZT09NCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih4aHIuc3RhdHVzPT0yMDApe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbmlkID0geGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIub3BlbihcImdldFwiLFwiL2dldHZlcnNpb24/aWQ9XCIrcmlkLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLnNlbmQobnVsbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIganNvYmogPSBKU09OLnBhcnNlKHZlcnNpb25pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhtbHZlcnNpb24gPSBqc29iai5pZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9wZXJWYWx1ZSA9IFwie1xcXCJpZFxcXCI6XFxcIlwiK2l0ZW1JZCtcIlxcXCIsIFxcXCJuYW1lXFxcIjpcXFwiXCIraXRlbW5hbWUrXCJcXFwiLCBcXFwiY2l0eVxcXCI6XFxcIlwiK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXR5VmFsdWUgKyBcIlxcXCIsIFxcXCJjb3VudHlcXFwiOlxcXCJcIitjb3VudHlWYWx1ZStcIlxcXCIsIFxcXCJzeXN0ZW1cXFwiOlxcXCJcIitcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzX25hbWVWYWx1ZStcIlxcXCIsIFxcXCJ0eXBlXFxcIjpcXFwiXCIgKyB0eXBlVmFsdWUgKyBcIlxcXCIsXFxcImJhdGNoXFxcIjpcXFwiXCIrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhdGNoVmFsdWUrXCJcXFwiLFxcXCJ2ZXJzaW9uXFxcIjpcXFwiXCIreG1sdmVyc2lvbitcIlxcXCIsIFxcXCJwcm92aW5jZVxcXCI6XFxcIlwiK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm92aW5jZVZhbHVlICtcIlxcXCIsIFxcXCJjb2RlXFxcIjpcXFwiXCIrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVWYWx1ZSArXCJcXFwiLCBcXFwiY2hhcmFjdGVyX3NldFxcXCI6XFxcIlwiK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJfc2V0VmFsdWUgK1wiXFxcIiwgXFxcInN5c19uYW1lX2NvZGVcXFwiOlxcXCJcIitcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzX25hbWVfY29kZVZhbHVlICtcIlxcXCIsIFxcXCJjb250YWN0XFxcIjpcXFwiXCIrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhY3RWYWx1ZSArXCJcXFwiLCBcXFwicGhvbmVcXFwiOlxcXCJcIitcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGhvbmVWYWx1ZSArXCJcXFwiLCBcXFwiZGF0ZVxcXCI6XFxcIlwiK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlVmFsdWUgK1wiXFxcIn1cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRTdHJpbmcgPSByZXN1bHRTdHJpbmcgKyBwcm9wZXJWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihrIDwgaXRlbXNpemUtMSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFN0cmluZyA9cmVzdWx0U3RyaW5nK1wiLCBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFN0cmluZyA9IHJlc3VsdFN0cmluZytcIl19XCI7XG4gICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAkc2NvcGUuJGFwcGx5KGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5tb2RlbC5sb2NhbGRhdGEgPSBKU09OLnBhcnNlKHJlc3VsdFN0cmluZy50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZWFkZXIucmVhZEFzVGV4dChmaWxlc1tpXSxcInV0Zi04XCIpO1xuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgICAgICAgICBGaWx0ZXJMaXN0Lmxlbmd0aCs9MTtcbiAgICAgICAgICAgICAgICAgICB2YXIgZmlsZV9pZD1maWxlc1tpXS5uYW1lLnJlcGxhY2UoL1xcLlxcdyokLywnJyk7XG4gICAgICAgICAgICAgICAgICAgLy8gdmFyIGZpbGVfaWQ9ZmlsZVtpXS53ZWJraXRSZWxhdGl2ZVBhdGgucmVwbGFjZSgvXlthLXpdKlxcLyQvLCcnKTtcbiAgICAgICAgICAgICAgICAgICAvL1x0ICBmaWxlX2lkID0gZmlsZV9pZC5yZXBsYWNlKC9cXC9cXHcrJC8sJycpO1xuICAgICAgICAgICAgICAgICAgRmlsdGVyTGlzdFtqKytdPWZpbGVzW2ldO1xuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH1cbiAgICAgICAgICAgfVxuICAgICAgICAgICAkc2NvcGUubW9kZWwudXBsb2FkcHJvY2VzcyA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICRzY29wZS51cExvYWRGaWxlcyA9ICgpPT57XG4gICAgICAgICBpZigkc2NvcGUubW9kZWwudXBsb2FkZWRTdGF0dXMgPT0gXCJvbmNlXCIpe1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgfVxuICAgICAgICAgJHNjb3BlLm1vZGVsLnVwbG9hZGVkU3RhdHVzID0gXCJvbmNlXCI7XG4gICAgICAgICAkc2NvcGUubW9kZWwuY3JlYXRlRm9sZGVyTGlzdChGaWx0ZXJMaXN0LHJvb3RQYXRoKTtcbiAgICAgICAgIGlmKCRzY29wZS5tb2RlbC5mb2xkZXJMaXN0Lmxlbmd0aCA+MCAmJiAkc2NvcGUubW9kZWwuc2VsZWN0ZWRub2Rlcy5sZW5ndGggPjApe1xuICAgICAgICAgICAgdmFyIGlzTm90RXhpdGVkID0gW107XG4gICAgICAgICAgICB2YXIgaXNFeGl0ZWQgPSBbXTtcbiAgICAgICAgICAgIGZvcih2YXIgbm9kZSBpbiAkc2NvcGUubW9kZWwuc2VsZWN0ZWRub2Rlcyl7XG4gICAgICAgICAgICAgICBpZighJHNjb3BlLm1vZGVsLmZvbGRlckxpc3QuaGFzT3duUHJvcGVydHkoJHNjb3BlLm1vZGVsLnNlbGVjdGVkbm9kZXNbbm9kZV0uaWQpKXtcbiAgICAgICAgICAgICAgICAgIGlzTm90RXhpdGVkLnB1c2goJHNjb3BlLm1vZGVsLnNlbGVjdGVkbm9kZXNbbm9kZV0pO1xuICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICBpZigkc2NvcGUubW9kZWwudXBsb2FkcHJvY2Vzc1skc2NvcGUubW9kZWwuc2VsZWN0ZWRub2Rlc1tub2RlXS5pZF0gPT09ICd1bmRlZmluZWQnIHx8ICRzY29wZS5tb2RlbC51cGxvYWRwcm9jZXNzWyRzY29wZS5tb2RlbC5zZWxlY3RlZG5vZGVzW25vZGVdLmlkXSA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgIGlzRXhpdGVkLnB1c2goJHNjb3BlLm1vZGVsLnNlbGVjdGVkbm9kZXNbbm9kZV0pO1xuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoaXNOb3RFeGl0ZWQubGVuZ3RoID4wICl7XG4gICAgICAgICAgICAgICB2YXIgc3RyID0gXCLku6XkuIvmlbDmja7mlofku7bkuI3lrZjlnKg6XFxuXFxy5paH5Lu25ZCNOlxcblwiO1xuICAgICAgICAgICAgICAgZm9yKHZhciBpdGVtIGluIGlzTm90RXhpdGVkKVxuICAgICAgICAgICAgICAgICAgc3RyICs9IGlzTm90RXhpdGVkW2l0ZW1dLmlkK1wiXFxuXCI7XG4gICAgICAgICAgICAgICBhbGVydChzdHIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZihpc0V4aXRlZC5sZW5ndGggPD0wKXtcbiAgICAgICAgICAgICAgIGFsZXJ0KFwi5pWw5o2u5paH5Lu25Lit5rKh5pyJ5Y+v55So5LiK5Lyg55qE5paH5Lu2IVwiKTtcbiAgICAgICAgICAgIH1lbHNle1xuXHRcdFx0ICAgdmFyIGlzdXBsb2FhZCA9IDEsaSA9IDA7XG5cdFx0XHQgICB2YXIgdGltZXJGb3JVcGxvYWQgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpe1xuXHRcdFx0XHQgIGlmKGkgPj0gaXNFeGl0ZWQubGVuZ3RoKXtcblx0XHRcdFx0XHQgY2xlYXJJbnRlcnZhbCh0aW1lckZvclVwbG9hZCk7XG5cdFx0XHRcdCAgfVxuXHRcdFx0XHQgIGlmKGlzdXBsb2FhZCA9PSAxKXtcblx0XHRcdFx0XHQgdmFyIHIgPSBuZXcgUmVzdW1hYmxlKHtcblx0XHRcdFx0XHRcdHRhcmdldDonL3VwbG9hZGZpbGVzJyxcblx0XHRcdFx0XHRcdGNodW5rU2l6ZTo1MCoxMDI0KjEwMjQsXG5cdFx0XHRcdFx0XHRzaW11bHRhbmVvdXNVcGxvYWRzOjQwMCxcblx0XHRcdFx0XHRcdHRlc3RDaHVua3M6dHJ1ZSxcblx0XHRcdFx0XHRcdHRocm90dGxlUHJvZ3Jlc3NDYWxsYmFja3M6MVxuXHRcdFx0XHRcdH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgeGhyLm9wZW4oXCJHRVRcIixcIi9nZXRjbGllbnRpcFwiLHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgICAgICAgaWYoeGhyLnJlYWR5U3RhdGU9PTQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoeGhyLnN0YXR1cz09MjAwKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgci5zZXRpcCh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgeGhyLnNlbmQobnVsbCk7XG5cblx0XHRcdFx0XHRyLm9uKCdmaWxlQWRkZWQnLCBmdW5jdGlvbihmaWxlKXtcblx0XHRcdFx0XHRcdHIudXBsb2FkKCk7XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHQkc2NvcGUubW9kZWwucmVzdW1hYmxlanMucHVzaCh7XG5cdFx0XHRcdFx0ICAgZGlybmFtZSA6IGlzRXhpdGVkW2ldLmlkLFxuXHRcdFx0XHRcdCAgIHJlc3VtYWJsZSA6IHJcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdHIuc2V0Um9vdFBhdGgoaXNFeGl0ZWRbaV0udHlwZStcIi9cIitpc0V4aXRlZFtpXS5iYXRjaCtcIi9cIitpc0V4aXRlZFtpXS5pZCtcIi9cIitpc0V4aXRlZFtpXS52ZXJzaW9uK1wiL1wiKTtcblxuXHRcdFx0XHRcdHIubXlMb2FkRmlsZXMoJHNjb3BlLm1vZGVsLmZvbGRlckxpc3RbaXNFeGl0ZWRbaV0uaWRdKTtcblx0XHRcdFx0XHRyLnVwbG9hZCgpO1xuXG5cdFx0XHRcdFx0ci5vbignZmlsZVByb2dyZXNzJyxmdW5jdGlvbihmaWxlKXtcblx0XHRcdFx0XHRcdHZhciBmaWxlX2lkPWZpbGUucmVsYXRpdmVQYXRoLnJlcGxhY2UoL15bYS16XSpcXC8kLywnJyk7XG5cdFx0XHRcdFx0XHR2YXIgZmlsZXN0ciA9IFwiXCI7XG5cdFx0XHRcdFx0XHR2YXIgcmVnID0gL1xcL1swLTldKl8qWzAtOV0qXFwvL2c7XG5cdFx0XHRcdFx0XHR2YXIgcmVzdWx0c3RyO1xuXHRcdFx0XHRcdFx0d2hpbGUoIChyZXN1bHRzdHIgPSByZWcuZXhlYyhmaWxlX2lkKSkgIT0gbnVsbCl7XG5cdFx0XHRcdFx0XHRcdGZpbGVzdHIgPSByZXN1bHRzdHJbMF07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRmaWxlX2lkID0gZmlsZXN0ci5yZXBsYWNlKC9cXC8qL2csJycpO1xuXHRcdFx0XHRcdFx0ci5zZXRGaWxlSWQoZmlsZV9pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyRzY29wZS4kYXBwbHkoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5tb2RlbC51cGxvYWRwcm9jZXNzW2ZpbGVfaWRdID0gTWF0aC5mbG9vcihyLnByb2dyZXNzKCkqOTgpO1xuXHRcdFx0XHRcdFx0Ly99KTtcblxuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0ci5vbignY29tcGxldGUnLCBmdW5jdGlvbigpe1xuXHRcdFx0XHRcdFx0dmFyIHRpbWVyRm9yY2htb2QgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpe1xuXHRcdFx0XHRcdFx0XHR2YXIgcGF0aGpzb24gPSBcIlxcXCJwYXRoXFxcIjpcXFwiXCIrci5nZXRyb290UGF0aCgpK1wiXFxcIlwiXG5cdFx0XHRcdFx0XHRcdHZhciBkYXRhbWVzc2FnZSA9IHtcInBhdGhcIjpyLmdldHJvb3RQYXRoKCksXCJmaWxlbnVtXCI6JHNjb3BlLm1vZGVsLmZvbGRlckxpc3RbaXNFeGl0ZWRbaS0xXS5pZF0ubGVuZ3RofTtcblx0XHRcdFx0XHRcdFx0JHNjb3BlLm1vZGVsLnVwbG9hZHByb2Nlc3Nbci5nZXRGaWxlSWQoKV0gPSBNYXRoLnJvdW5kKHIucHJvZ3Jlc3MoKSo5OSk7XG5cblx0XHRcdFx0XHRcdFx0JGh0dHAoe1xuXHRcdFx0XHRcdFx0XHQgIHVybDonL3NldGNobW9kMmRpcicsXG5cdFx0XHRcdFx0XHRcdCAgbWV0aG9kOidHRVQnLFxuXHRcdFx0XHRcdFx0XHQgIHBhcmFtczpkYXRhbWVzc2FnZVxuXHRcdFx0XHRcdFx0XHR9KS5zdWNjZXNzKGZ1bmN0aW9uKGRhdGEsaGVhZGVyLGNvbmZpZyxzdGF0dXMpe1xuXHRcdFx0XHRcdFx0XHQgIGlmKGRhdGEpe1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly9jb25zb2xlLmxvZyhkYXRhKTtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBjbGllbnRkYXRhID0gZGF0YTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGNsaWVudGRhdGEgPT0gXCJjaG1vZFwiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kRGF0ZU1lc3NhZ2UoaXNFeGl0ZWRbaS0xXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci5zZXRpc25vd2NoZWNrKFwiMVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLm1rUmV0ZmlsZVVwbG9hZFN1Y2NlZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKHRpbWVyRm9yY2htb2QpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0ICB9XG5cblx0XHRcdFx0XHRcdFx0fSkuZXJyb3IoZnVuY3Rpb24oZGF0YSxoZWFkZXIsY29uZmlnLHN0YXR1cyl7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coXCItLS0tLXNlbmREYXRlTWVzc2FnZS0tLS0tLS0tLS0tLS1cIitzdGF0dXMpO1xuXHRcdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0fSw1MDAwKTtcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdGkrKztcblx0XHRcdFx0XHRpc3VwbG9hYWQgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgIHIub24oJ2ZpbGV1cGxvYWRlbmRzdWNjZWVkJywgZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLm1vZGVsLnVwbG9hZHByb2Nlc3Nbci5nZXRGaWxlSWQoKV0gPSBNYXRoLmZsb29yKHIucHJvZ3Jlc3MoKSoxMDApO1xuICAgICAgICAgICAgICAgICAgICAgICAkdGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICRodHRwKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOicveG1sZm9ybXNlcnZlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDonUG9zdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuc3VjY2VzcyhmdW5jdGlvbihkYXRhLGhlYWRlcixjb25maWcsc3RhdHVzKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihkYXRhKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUubW9kZWwuc2VydmVyZGF0YSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5lcnJvcihmdW5jdGlvbihkYXRhLGhlYWRlcixjb25maWcsc3RhdHVzKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZXJyb3JcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICB9LDIwMDApO1xuICAgICAgICAgICAgICAgICAgICAgICBpc3VwbG9hYWQgPSAxO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH1cblx0XHRcdCAgIH0sMjAwMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIGFsZXJ0KFwi5oKo5rKh5pyJ6YCJ5oup6ZyA6KaB5LiK5Lyg55qE5pWw5o2u5paH5Lu277yM5oiW5L2g6YCJ5oup55qE5paH5Lu25Lit5LiN5a2Y5Zyo5oyH5a6a5qC85byP55qE5pWw5o2u5paH5Lu2IVwiKTtcbiAgICAgICAgIH1cblxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBzZW5kRGF0ZU1lc3NhZ2UoZGF0YW1lc3NhZ2Upe1xuICAgICAgICAgICRodHRwKHtcbiAgICAgICAgICAgICB1cmw6Jy9zZW5kRGF0ZU1lc3NhZ2UnLFxuICAgICAgICAgICAgIG1ldGhvZDonR0VUJyxcbiAgICAgIFx0ICAgICBwYXJhbXM6ZGF0YW1lc3NhZ2VcbiAgICAgICAgICB9KS5zdWNjZXNzKGZ1bmN0aW9uKGRhdGEsaGVhZGVyLGNvbmZpZyxzdGF0dXMpe1xuICAgICAgICAgICAgIGlmKGRhdGEpXG4gICAgICAgICAgICAgdmFyIGNsaWVudGRhdGEgPSBkYXRhO1xuICAgICAgICAgIH0pLmVycm9yKGZ1bmN0aW9uKGRhdGEsaGVhZGVyLGNvbmZpZyxzdGF0dXMpe1xuXG4gICAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgICRzY29wZS5kb3duTG9hZEZpbGVzID0gKCk9PntcbiAgICAgICAgICBLdWJlcm5ldGVzLmNvbm5lY3RPcmFjbGUoJGh0dHAsICR0aW1lb3V0LCBcIjE5Mi4xNjguMC4xMDM6NjQxODJcIiwgXCIzMjA2MTQtNTQtMVwiLCA1MDApO1xuICAgICAgfVxuXG4gICAgICAkc2NvcGUuaXNTZWxlY3RlZD0gKG5vZGUpPT57XG4gICAgICAgICB2YXIgaW5kZXggPSAkc2NvcGUubW9kZWwuZmluZEl0ZW1JbmRleChub2RlKTtcbiAgICAgICAgIGlmKGluZGV4ICE9PSAtMSl7XG4gICAgICAgICAgICAkc2NvcGUubW9kZWwuc2VsZWN0ZWRpdGVtcy5zcGxpY2UoaW5kZXgsMSk7XG4gICAgICAgICB9XG4gICAgICAgICBlbHNle1xuICAgICAgICAgICAgJHNjb3BlLm1vZGVsLnNlbGVjdGVkaXRlbXMucHVzaChub2RlKTtcbiAgICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJHNjb3BlLnNob3dTZWxlY3RlZExvY2FsID0gKG5vZGUsc2VsZWN0ZWQpID0+IHtcbiAgICAgICAgIHZhciBpbmRleCA9ICRzY29wZS5tb2RlbC5maW5kTm9kZXMobm9kZSk7XG4gICAgICAgICBpZihpbmRleCAhPT0gXCItMVwiKXtcbiAgICAgICAgICAgIGlmKCRzY29wZS5tb2RlbC51cGxvYWRwcm9jZXNzW25vZGUuaWRdID09PTApXG4gICAgICAgICAgICAgICAkc2NvcGUubW9kZWwuc2VsZWN0ZWRub2Rlcy5zcGxpY2UoaW5kZXgsMSk7XG4gICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICRzY29wZS5tb2RlbC51cGxvYWRwcm9jZXNzW25vZGUuaWRdID0wO1xuICAgICAgICAgICAgJHNjb3BlLm1vZGVsLnNlbGVjdGVkbm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJHNjb3BlLnN0YXJ0T3JhY2xlID0gKCk9PiB7XG4gICAgICAgICBpZigkc2NvcGUubW9kZWwuc2VsZWN0ZWRpdGVtcy5sZW5ndGggPjApe1xuICAgICAgICAgICAgZm9yKHZhciBpZCBpbiAkc2NvcGUubW9kZWwuc2VsZWN0ZWRpdGVtcyl7XG4gICAgICAgICAgICAgICB2YXIgT2JqID0gY3JlYXRlUkNPYmooJHNjb3BlLm1vZGVsLnNlbGVjdGVkaXRlbXNbaWRdKTtcbiAgICAgICAgICAgICAgIGlmKCFjaGVja0lzUnVubmluZyhLdWJlcm5ldGVzTW9kZWwucmVwbGljYXRpb25Db250cm9sbGVycyxPYmopKXtcbiAgICAgICAgICAgICAgICAgIEt1YmVybmV0ZXMuY3JlYXRlUkMoT2JqLCAocmMpID0+e1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJjLm1ldGFkYXRhLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgIEt1YmVybmV0ZXMuY29ubmVjdE9yYWNsZSgkaHR0cCwgJHRpbWVvdXQsIFwiL2Nvbm5lY3RUb09yYWNsZVwiLCBcIlwiLCByYy5tZXRhZGF0YS5uYW1lLCAwKTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBjaGVja0lzUnVubmluZyhyZXBsaWNhdGlvbkNvbnRyb2xsZXJzLGl0ZW0pe1xuICAgICAgICAgZm9yKHZhciByYyBpbiByZXBsaWNhdGlvbkNvbnRyb2xsZXJzKXtcbiAgICAgICAgICAgIGlmKGl0ZW0ubmFtZSA9PT0gcmVwbGljYXRpb25Db250cm9sbGVyc1tyY10ubWV0YWRhdGEubmFtZSlcbiAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgfVxuICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBjcmVhdGVSQ09iaihpdGVtOiBPYmplY3Qpe1xuICAgICAgICAgdmFyIGFycmF5ID1pdGVtLmlkLnNwbGl0KFwiX1wiKTtcbiAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBcIm5hbWVcIjogYXJyYXlbMl0gKyBcIi1cIiArIGFycmF5WzNdICsgXCItXCIgKyBhcnJheVs0XSxcbiAgICAgICAgICAgIFwibGFiZWxzXCI6IHtcbiAgICAgICAgICAgICAgIFwidHlwZVwiOiBhcnJheVswXSxcbiAgICAgICAgICAgICAgIFwiYmF0Y2hcIjogYXJyYXlbMV0sXG4gICAgICAgICAgICAgICBcInJlZ2lvblwiOiBhcnJheVsyXSxcbiAgICAgICAgICAgICAgIFwic3lzdGVtXCI6IGFycmF5WzNdLFxuICAgICAgICAgICAgICAgXCJ2ZXJzaW9uXCI6IGFycmF5WzRdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJwYXRoXCI6IGl0ZW0ucGF0aCArXCJhcHAvXCJcbiAgICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gc2V0Y2htb2QyZGlyKGRhdGFtZXNzYWdlKXtcbiAgICAgICAgICRodHRwKHtcbiAgICAgICAgICAgIHVybDonL3NldGNobW9kMmRpcicsXG4gICAgICAgICAgICBtZXRob2Q6J0dFVCcsXG4gICAgICAgICAgICBwYXJhbXM6ZGF0YW1lc3NhZ2VcbiAgICAgICAgIH0pLnN1Y2Nlc3MoZnVuY3Rpb24oZGF0YSxoZWFkZXIsY29uZmlnLHN0YXR1cyl7XG4gICAgICAgICAgICBpZihkYXRhKVxuICAgICAgICAgICAgICB2YXIgY2xpZW50ZGF0YSA9IGRhdGE7XG4gICAgICAgICB9KS5lcnJvcihmdW5jdGlvbihkYXRhLGhlYWRlcixjb25maWcsc3RhdHVzKXtcbiAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIi0tLS0tc2VuZERhdGVNZXNzYWdlLS0tLS0tLS0tLS0tLVwiK3N0YXR1cyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiB1cGRhdGUoKXtcbiAgICAgICAgIGZvcih2YXIgaT0wOyBpPCRzY29wZS5tb2RlbC5yZXN1bWFibGVqcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgICAgICB2YXIgZGlySWQgPSAkc2NvcGUubW9kZWwucmVzdW1hYmxlanNbaV0uZGlybmFtZTtcbiAgICAgICAgICAgIHZhciByID0gJHNjb3BlLm1vZGVsLnJlc3VtYWJsZWpzW2ldLnJlc3VtYWJsZTtcbiAgICAgICAgICAgIHIub24oJ2ZpbGVQcm9ncmVzcycsIChmaWxlKSA9PntcbiAgICAgICAgICAgICAgICRzY29wZS4kYXBwbHkoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICRzY29wZS5tb2RlbC51cGxvYWRwcm9jZXNzW2RpcklkXSA9IE1hdGguZmxvb3Ioci5wcm9ncmVzcygpKjEwMCk7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkaXJJZCtcIjpcIitNYXRoLmZsb29yKHIucHJvZ3Jlc3MoKSoxMDApKVxuICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgIH1cbiAgICAgIH1cbiAgfV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcbiAgXG4gIGV4cG9ydCB2YXIgQXBwcyA9IGNvbnRyb2xsZXIoXCJBcHBzXCIsXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1NlcnZpY2VzXCIsIFwiS3ViZXJuZXRlc1JlcGxpY2F0aW9uQ29udHJvbGxlcnNcIiwgXCJLdWJlcm5ldGVzUG9kc1wiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJGRpYWxvZ1wiLCBcIiR0aW1lb3V0XCIsIFxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOiBLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTZXJ2aWNlczpuZy5yZXNvdXJjZS5JUmVzb3VyY2VDbGFzczxhbnk+LCBLdWJlcm5ldGVzUmVwbGljYXRpb25Db250cm9sbGVyczpuZy5yZXNvdXJjZS5JUmVzb3VyY2VDbGFzczxhbnk+LCBLdWJlcm5ldGVzUG9kczpuZy5yZXNvdXJjZS5JUmVzb3VyY2VDbGFzczxhbnk+LCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwsXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJGRpYWxvZywgJHRpbWVvdXQpID0+IHtcblxuICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcblxuICAgICRzY29wZS5hcHBzID0gW107XG4gICAgJHNjb3BlLmFsbEFwcHMgPSBbXTtcbiAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAkc2NvcGUuZmV0Y2hlZCA9IGZhbHNlO1xuICAgICRzY29wZS5qc29uID0gJyc7XG4gICAgQ29udHJvbGxlckhlbHBlcnMuYmluZE1vZGVsVG9TZWFyY2hQYXJhbSgkc2NvcGUsICRsb2NhdGlvbiwgJ2lkJywgJ19pZCcsIHVuZGVmaW5lZCk7XG4gICAgQ29udHJvbGxlckhlbHBlcnMuYmluZE1vZGVsVG9TZWFyY2hQYXJhbSgkc2NvcGUsICRsb2NhdGlvbiwgJ2FwcFNlbGVjdG9yU2hvdycsICdvcGVuQXBwJywgdW5kZWZpbmVkKTtcbiAgICBDb250cm9sbGVySGVscGVycy5iaW5kTW9kZWxUb1NlYXJjaFBhcmFtKCRzY29wZSwgJGxvY2F0aW9uLCAnbW9kZScsICdtb2RlJywgJ2RldGFpbCcpO1xuXG4gICAgdmFyIGJyYW5jaCA9ICRzY29wZS5icmFuY2ggfHwgXCJtYXN0ZXJcIjtcbiAgICB2YXIgbmFtZXNwYWNlID0gbnVsbDtcblxuICAgIGZ1bmN0aW9uIGFwcE1hdGNoZXMoYXBwKSB7XG4gICAgICB2YXIgZmlsdGVyVGV4dCA9ICRzY29wZS5hcHBTZWxlY3Rvci5maWx0ZXJUZXh0O1xuICAgICAgaWYgKGZpbHRlclRleHQpIHtcbiAgICAgICAgcmV0dXJuIENvcmUubWF0Y2hGaWx0ZXJJZ25vcmVDYXNlKGFwcC5ncm91cElkLCBmaWx0ZXJUZXh0KSB8fFxuICAgICAgICAgIENvcmUubWF0Y2hGaWx0ZXJJZ25vcmVDYXNlKGFwcC5hcnRpZmFjdElkLCBmaWx0ZXJUZXh0KSB8fFxuICAgICAgICAgIENvcmUubWF0Y2hGaWx0ZXJJZ25vcmVDYXNlKGFwcC5uYW1lLCBmaWx0ZXJUZXh0KSB8fFxuICAgICAgICAgIENvcmUubWF0Y2hGaWx0ZXJJZ25vcmVDYXNlKGFwcC5kZXNjcmlwdGlvbiwgZmlsdGVyVGV4dCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhcHBSdW5uaW5nKGFwcCkge1xuICAgICAgcmV0dXJuICRzY29wZS5tb2RlbC5hcHBzLmFueSgocnVubmluZykgPT4gcnVubmluZy5hcHBQYXRoID09PSBhcHAuYXBwUGF0aCk7XG4gICAgfVxuXG4gICAgJHNjb3BlLnRhYmxlQ29uZmlnID0ge1xuICAgICAgZGF0YTogJ21vZGVsLmFwcHMnLFxuICAgICAgc2hvd1NlbGVjdGlvbkNoZWNrYm94OiB0cnVlLFxuICAgICAgZW5hYmxlUm93Q2xpY2tTZWxlY3Rpb246IGZhbHNlLFxuICAgICAgbXVsdGlTZWxlY3Q6IHRydWUsXG4gICAgICBzZWxlY3RlZEl0ZW1zOiBbXSxcbiAgICAgIGZpbHRlck9wdGlvbnM6IHtcbiAgICAgICAgZmlsdGVyVGV4dDogJGxvY2F0aW9uLnNlYXJjaCgpW1wicVwiXSB8fCAnJ1xuICAgICAgfSxcbiAgICAgIGNvbHVtbkRlZnM6IFtcbiAgICAgICAgeyBmaWVsZDogJyRuYW1lJywgZGlzcGxheU5hbWU6ICdBcHAnLCBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChVcmxIZWxwZXJzLmpvaW4odGVtcGxhdGVQYXRoLCBcImFwcEljb25UZW1sYXRlLmh0bWxcIikpIH0sXG4gICAgICAgIHsgZmllbGQ6ICckc2VydmljZXNUZXh0JywgZGlzcGxheU5hbWU6ICdTZXJ2aWNlcycsIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFVybEhlbHBlcnMuam9pbih0ZW1wbGF0ZVBhdGgsIFwiYXBwU2VydmljZXNUZW1wbGF0ZS5odG1sXCIpKSB9LFxuICAgICAgICB7IGZpZWxkOiAnJHJlcGxpY2F0aW9uQ29udHJvbGxlcnNUZXh0JywgZGlzcGxheU5hbWU6ICdDb250cm9sbGVycycsIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFVybEhlbHBlcnMuam9pbih0ZW1wbGF0ZVBhdGgsIFwiYXBwUmVwbGljYXRpb25Db250cm9sbGVyVGVtcGxhdGUuaHRtbFwiKSkgfSxcbiAgICAgICAgeyBmaWVsZDogJyRwb2RDb3VudCcsIGRpc3BsYXlOYW1lOiAnUG9kcycsIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFVybEhlbHBlcnMuam9pbih0ZW1wbGF0ZVBhdGgsIFwiYXBwUG9kQ291bnRzQW5kTGlua1RlbXBsYXRlLmh0bWxcIikpIH0sXG4gICAgICAgIHsgZmllbGQ6ICckY3JlYXRpb25EYXRlJywgZGlzcGxheU5hbWU6ICdEZXBsb3llZCcsIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFVybEhlbHBlcnMuam9pbih0ZW1wbGF0ZVBhdGgsIFwiYXBwRGVwbG95ZWRUZW1wbGF0ZS5odG1sXCIpKSB9XG4gICAgICBdXG4gICAgfTtcblxuICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcblxuXG4gICAgJHNjb3BlLmV4cGFuZGVkUG9kcyA9IFtdO1xuXG4gICAgJHNjb3BlLiRvbignZG8tcmVzaXplJywgKCRldmVudCwgY29udHJvbGxlcikgPT4ge1xuICAgICAgJHNjb3BlLnJlc2l6ZURpYWxvZy5vcGVuKGNvbnRyb2xsZXIpO1xuICAgIH0pO1xuXG4gICAgICAgIFxuICAgICRzY29wZS5wb2RFeHBhbmRlZCA9IChwb2QpID0+IHtcbiAgICAgIHZhciBpZCA9IGdldE5hbWUocG9kKVxuICAgICAgcmV0dXJuIGlkICYmICgkc2NvcGUuZXhwYW5kZWRQb2RzIHx8IFtdKS5pbmRleE9mKGlkKSA+PSAwO1xuICAgIH07XG5cbiAgICAkc2NvcGUuZXhwYW5kUG9kID0gKHBvZCkgPT4ge1xuICAgICAgdmFyIGlkID0gZ2V0TmFtZShwb2QpO1xuICAgICAgaWYgKGlkKSB7XG4gICAgICAgICRzY29wZS5leHBhbmRlZFBvZHMucHVzaChpZCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgICRzY29wZS5jb2xsYXBzZVBvZCA9IChwb2QpID0+IHtcbiAgICAgIHZhciBpZCA9IGdldE5hbWUocG9kKTtcbiAgICAgIGlmIChpZCkge1xuICAgICAgICBfLnJlbW92ZSgkc2NvcGUuZXhwYW5kZWRQb2RzLCAodikgPT4gaWQgPT09IHYpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAkc2NvcGUuJG9uKCckcm91dGVVcGRhdGUnLCAoJGV2ZW50KSA9PiB7XG4gICAgICBLdWJlcm5ldGVzLnNldEpzb24oJHNjb3BlLCAkbG9jYXRpb24uc2VhcmNoKClbJ19pZCddLCAkc2NvcGUubW9kZWwuYXBwcyk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBkZWxldGVBcHAoYXBwLCBvbkNvbXBsZXRlRm4pIHtcbiAgICAgIGZ1bmN0aW9uIGRlbGV0ZVNlcnZpY2VzKHNlcnZpY2VzLCBzZXJ2aWNlLCBvbkNvbXBsZXRlZEZuKSB7XG4gICAgICAgIGlmICghc2VydmljZSB8fCAhc2VydmljZXMpIHtcbiAgICAgICAgICByZXR1cm4gb25Db21wbGV0ZWRGbigpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBpZCA9IGdldE5hbWUoc2VydmljZSk7XG4gICAgICAgIGlmICghaWQpIHtcbiAgICAgICAgICBsb2cud2FybihcIk5vIElEIGZvciBzZXJ2aWNlIFwiICsgYW5ndWxhci50b0pzb24oc2VydmljZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIEt1YmVybmV0ZXNTZXJ2aWNlcy5kZWxldGUoe1xuICAgICAgICAgICAgaWQ6IGlkXG4gICAgICAgICAgfSwgdW5kZWZpbmVkLCAoKSA9PiB7XG4gICAgICAgICAgICBsb2cuZGVidWcoXCJEZWxldGVkIHNlcnZpY2U6IFwiLCBpZCk7XG4gICAgICAgICAgICBkZWxldGVTZXJ2aWNlcyhzZXJ2aWNlcywgc2VydmljZXMuc2hpZnQoKSwgb25Db21wbGV0ZWRGbik7XG4gICAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBsb2cuZGVidWcoXCJFcnJvciBkZWxldGluZyBzZXJ2aWNlOiBcIiwgZXJyb3IpO1xuICAgICAgICAgICAgZGVsZXRlU2VydmljZXMoc2VydmljZXMsIHNlcnZpY2VzLnNoaWZ0KCksIG9uQ29tcGxldGVkRm4pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGRlbGV0ZVJlcGxpY2F0aW9uQ29udHJvbGxlcnMocmVwbGljYXRpb25Db250cm9sbGVycywgcmVwbGljYXRpb25Db250cm9sbGVyLCBvbkNvbXBsZXRlZEZuKSB7XG4gICAgICAgIGlmICghcmVwbGljYXRpb25Db250cm9sbGVyIHx8ICFyZXBsaWNhdGlvbkNvbnRyb2xsZXJzKSB7XG4gICAgICAgICAgcmV0dXJuIG9uQ29tcGxldGVkRm4oKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaWQgPSBnZXROYW1lKHJlcGxpY2F0aW9uQ29udHJvbGxlcik7XG4gICAgICAgIGlmICghaWQpIHtcbiAgICAgICAgICBsb2cud2FybihcIk5vIElEIGZvciByZXBsaWNhdGlvbkNvbnRyb2xsZXIgXCIgKyBhbmd1bGFyLnRvSnNvbihyZXBsaWNhdGlvbkNvbnRyb2xsZXIpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBLdWJlcm5ldGVzUmVwbGljYXRpb25Db250cm9sbGVycy5kZWxldGUoe1xuICAgICAgICAgICAgaWQ6IGlkXG4gICAgICAgICAgfSwgdW5kZWZpbmVkLCAoKSA9PiB7XG4gICAgICAgICAgICBsb2cuZGVidWcoXCJEZWxldGVkIHJlcGxpY2F0aW9uQ29udHJvbGxlcjogXCIsIGlkKTtcbiAgICAgICAgICAgIGRlbGV0ZVJlcGxpY2F0aW9uQ29udHJvbGxlcnMocmVwbGljYXRpb25Db250cm9sbGVycywgcmVwbGljYXRpb25Db250cm9sbGVycy5zaGlmdCgpLCBvbkNvbXBsZXRlZEZuKTtcbiAgICAgICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGxvZy5kZWJ1ZyhcIkVycm9yIGRlbGV0aW5nIHJlcGxpY2F0aW9uQ29udHJvbGxlcjogXCIsIGVycm9yKTtcbiAgICAgICAgICAgIGRlbGV0ZVJlcGxpY2F0aW9uQ29udHJvbGxlcnMocmVwbGljYXRpb25Db250cm9sbGVycywgcmVwbGljYXRpb25Db250cm9sbGVycy5zaGlmdCgpLCBvbkNvbXBsZXRlZEZuKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBkZWxldGVQb2RzKHBvZHMsIHBvZCwgb25Db21wbGV0ZWRGbikge1xuICAgICAgICBpZiAoIXBvZCB8fCAhcG9kcykge1xuICAgICAgICAgIHJldHVybiBvbkNvbXBsZXRlZEZuKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGlkID0gZ2V0TmFtZShwb2QpO1xuICAgICAgICBpZiAoIWlkKSB7XG4gICAgICAgICAgbG9nLndhcm4oXCJObyBJRCBmb3IgcG9kIFwiICsgYW5ndWxhci50b0pzb24ocG9kKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgS3ViZXJuZXRlc1BvZHMuZGVsZXRlKHtcbiAgICAgICAgICAgIGlkOiBpZFxuICAgICAgICAgIH0sIHVuZGVmaW5lZCwgKCkgPT4ge1xuICAgICAgICAgICAgbG9nLmRlYnVnKFwiRGVsZXRlZCBwb2Q6IFwiLCBpZCk7XG4gICAgICAgICAgICBkZWxldGVQb2RzKHBvZHMsIHBvZHMuc2hpZnQoKSwgb25Db21wbGV0ZWRGbik7XG4gICAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBsb2cuZGVidWcoXCJFcnJvciBkZWxldGluZyBwb2Q6IFwiLCBlcnJvcik7XG4gICAgICAgICAgICBkZWxldGVQb2RzKHBvZHMsIHBvZHMuc2hpZnQoKSwgb25Db21wbGV0ZWRGbik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHNlcnZpY2VzID0gW10uY29uY2F0KGFwcC5zZXJ2aWNlcyk7XG4gICAgICBkZWxldGVTZXJ2aWNlcyhzZXJ2aWNlcywgc2VydmljZXMuc2hpZnQoKSwgKCkgPT4ge1xuXG4gICAgICAgIHZhciByZXBsaWNhdGlvbkNvbnRyb2xsZXJzID0gW10uY29uY2F0KGFwcC5yZXBsaWNhdGlvbkNvbnRyb2xsZXJzKTtcbiAgICAgICAgZGVsZXRlUmVwbGljYXRpb25Db250cm9sbGVycyhyZXBsaWNhdGlvbkNvbnRyb2xsZXJzLCByZXBsaWNhdGlvbkNvbnRyb2xsZXJzLnNoaWZ0KCksICgpID0+IHtcblxuICAgICAgICAgIHZhciBwb2RzID0gW10uY29uY2F0KGFwcC5wb2RzKTtcbiAgICAgICAgICBkZWxldGVQb2RzKHBvZHMsIHBvZHMuc2hpZnQoKSwgb25Db21wbGV0ZUZuKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAkc2NvcGUuZGVsZXRlU2luZ2xlQXBwID0gKGFwcCkgPT4ge1xuICAgICAgJHNjb3BlLmRlbGV0ZVByb21wdChbYXBwXSk7XG4gICAgfVxuXG4gICAgJHNjb3BlLmRlbGV0ZVByb21wdCA9IChzZWxlY3RlZCkgPT4ge1xuICAgICAgaWYgKGFuZ3VsYXIuaXNTdHJpbmcoc2VsZWN0ZWQpKSB7XG4gICAgICAgIHNlbGVjdGVkID0gW3tcbiAgICAgICAgICBpZDogc2VsZWN0ZWRcbiAgICAgICAgfV07XG4gICAgICB9XG4gICAgICBVSS5tdWx0aUl0ZW1Db25maXJtQWN0aW9uRGlhbG9nKDxVSS5NdWx0aUl0ZW1Db25maXJtQWN0aW9uT3B0aW9ucz57XG4gICAgICAgIGNvbGxlY3Rpb246IHNlbGVjdGVkLFxuICAgICAgICBpbmRleDogJyRuYW1lJyxcbiAgICAgICAgb25DbG9zZTogKHJlc3VsdDpib29sZWFuKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIG5leHQpIHtcbiAgICAgICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWQgPSBuZXh0Lm5hbWU7XG4gICAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiZGVsZXRpbmc6IFwiLCBpZCk7XG4gICAgICAgICAgICAgICAgZGVsZXRlQXBwKG5leHQsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcImRlbGV0ZWQ6IFwiLCBpZCk7XG4gICAgICAgICAgICAgICAgICBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdGl0bGU6ICdEZWxldGUgQXBwcz8nLFxuICAgICAgICBhY3Rpb246ICdUaGUgZm9sbG93aW5nIEFwcHMgd2lsbCBiZSBkZWxldGVkOicsXG4gICAgICAgIG9rVGV4dDogJ0RlbGV0ZScsXG4gICAgICAgIG9rQ2xhc3M6ICdidG4tZGFuZ2VyJyxcbiAgICAgICAgY3VzdG9tOiBcIlRoaXMgb3BlcmF0aW9uIGlzIHBlcm1hbmVudCBvbmNlIGNvbXBsZXRlZCFcIixcbiAgICAgICAgY3VzdG9tQ2xhc3M6IFwiYWxlcnQgYWxlcnQtd2FybmluZ1wiXG4gICAgICB9KS5vcGVuKCk7XG4gICAgfTtcblxuICAgICRzY29wZS5hcHBTZWxlY3RvciA9IHtcbiAgICAgIGZpbHRlclRleHQ6IFwiXCIsXG4gICAgICBmb2xkZXJzOiBbXSxcbiAgICAgIHNlbGVjdGVkQXBwczogW10sXG5cbiAgICAgIGlzT3BlbjogKGZvbGRlcikgPT4ge1xuICAgICAgICBpZiAoJHNjb3BlLmFwcFNlbGVjdG9yLmZpbHRlclRleHQgIT09ICcnIHx8IGZvbGRlci5leHBhbmRlZCkge1xuICAgICAgICAgIHJldHVybiBcIm9wZW5lZFwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcImNsb3NlZFwiO1xuICAgICAgfSxcblxuICAgICAgZ2V0U2VsZWN0ZWRDbGFzczogKGFwcCkgPT4ge1xuICAgICAgICBpZiAoYXBwLmFic3RyYWN0KSB7XG4gICAgICAgICAgcmV0dXJuIFwiYWJzdHJhY3RcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXBwLnNlbGVjdGVkKSB7XG4gICAgICAgICAgcmV0dXJuIFwic2VsZWN0ZWRcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgIH0sXG5cbiAgICAgIHNob3dBcHA6IChhcHApID0+IHtcbiAgICAgICAgcmV0dXJuIGFwcE1hdGNoZXMoYXBwKSAmJiAhYXBwUnVubmluZyhhcHApO1xuICAgICAgfSxcblxuICAgICAgc2hvd0ZvbGRlcjogKGZvbGRlcikgPT4ge1xuICAgICAgICByZXR1cm4gISRzY29wZS5hcHBTZWxlY3Rvci5maWx0ZXJUZXh0IHx8IGZvbGRlci5hcHBzLnNvbWUoKGFwcCkgPT4gYXBwTWF0Y2hlcyhhcHApICYmICFhcHBSdW5uaW5nKGFwcCkpO1xuICAgICAgfSxcblxuICAgICAgY2xlYXJTZWxlY3RlZDogKCkgPT4ge1xuICAgICAgICBhbmd1bGFyLmZvckVhY2goJHNjb3BlLm1vZGVsLmFwcEZvbGRlcnMsIChmb2xkZXIpID0+IHtcbiAgICAgICAgICBhbmd1bGFyLmZvckVhY2goZm9sZGVyLmFwcHMsIChhcHApID0+IHtcbiAgICAgICAgICAgIGFwcC5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgJHNjb3BlLmFwcFNlbGVjdG9yLnNlbGVjdGVkQXBwcyA9IFtdO1xuICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgfSxcblxuICAgICAgdXBkYXRlU2VsZWN0ZWQ6ICgpID0+IHtcbiAgICAgICAgLy8gbGV0cyB1cGRhdGUgdGhlIHNlbGVjdGVkIGFwcHNcbiAgICAgICAgdmFyIHNlbGVjdGVkQXBwcyA9IFtdO1xuICAgICAgICBhbmd1bGFyLmZvckVhY2goJHNjb3BlLm1vZGVsLmFwcEZvbGRlcnMsIChmb2xkZXIpID0+IHtcbiAgICAgICAgICB2YXIgYXBwcyA9IGZvbGRlci5hcHBzLmZpbHRlcigoYXBwKSA9PiBhcHAuc2VsZWN0ZWQpO1xuICAgICAgICAgIGlmIChhcHBzKSB7XG4gICAgICAgICAgICBzZWxlY3RlZEFwcHMgPSBzZWxlY3RlZEFwcHMuY29uY2F0KGFwcHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgICRzY29wZS5hcHBTZWxlY3Rvci5zZWxlY3RlZEFwcHMgPSBfLnNvcnRCeShzZWxlY3RlZEFwcHMsIFwibmFtZVwiKTtcbiAgICAgIH0sXG5cbiAgICAgIHNlbGVjdDogKGFwcCwgZmxhZykgPT4ge1xuICAgICAgICBhcHAuc2VsZWN0ZWQgPSBmbGFnO1xuICAgICAgICAkc2NvcGUuYXBwU2VsZWN0b3IudXBkYXRlU2VsZWN0ZWQoKTtcbiAgICAgIH0sXG5cbiAgICAgIGhhc1NlbGVjdGlvbjogKCkgPT4ge1xuICAgICAgICByZXR1cm4gJHNjb3BlLm1vZGVsLmFwcEZvbGRlcnMuYW55KChmb2xkZXIpID0+IGZvbGRlci5hcHBzLmFueSgoYXBwKSA9PiBhcHAuc2VsZWN0ZWQpKTtcbiAgICAgIH0sXG5cblxuICAgICAgcnVuU2VsZWN0ZWRBcHBzOiAoKSA9PiB7XG4gICAgICAgIC8vIGxldHMgcnVuIGFsbCB0aGUgc2VsZWN0ZWQgYXBwc1xuICAgICAgICBhbmd1bGFyLmZvckVhY2goJHNjb3BlLmFwcFNlbGVjdG9yLnNlbGVjdGVkQXBwcywgKGFwcCkgPT4ge1xuICAgICAgICAgIHZhciBuYW1lID0gYXBwLm5hbWU7XG4gICAgICAgICAgdmFyIG1ldGFkYXRhUGF0aCA9IGFwcC5tZXRhZGF0YVBhdGg7XG4gICAgICAgICAgaWYgKG1ldGFkYXRhUGF0aCkge1xuICAgICAgICAgICAgLy8gbGV0cyBsb2FkIHRoZSBqc29uL3lhbWxcbiAgICAgICAgICAgIC8vdmFyIHVybCA9IGdpdFBhdGhUb1VybChXaWtpLmdpdFJlbGF0aXZlVVJMKGJyYW5jaCwgbWV0YWRhdGFQYXRoKSk7XG4gICAgICAgICAgICB2YXIgdXJsID0gZ2l0UGF0aFRvVXJsKG1ldGFkYXRhUGF0aCwgYnJhbmNoKTtcbiAgICAgICAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgICAgICAgJGh0dHAuZ2V0KHVybCkuXG4gICAgICAgICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGxldHMgY29udmVydCB0aGUganNvbiBvYmplY3Qgc3RydWN0dXJlIGludG8gYSBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgdmFyIGpzb24gPSBhbmd1bGFyLnRvSnNvbihkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZuID0gKCkgPT4ge307XG4gICAgICAgICAgICAgICAgICAgIEt1YmVybmV0ZXMucnVuQXBwKCRsb2NhdGlvbiwgJHNjb3BlLCAkaHR0cCwgS3ViZXJuZXRlc0FwaVVSTCwganNvbiwgbmFtZSwgZm4sIG5hbWVzcGFjZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkuXG4gICAgICAgICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgICAkc2NvcGUuc3VtbWFyeUh0bWwgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBsZXRzIGdvIGJhY2sgdG8gdGhlIGFwcHMgdmlld1xuICAgICAgICAkc2NvcGUuYXBwU2VsZWN0b3IuY2xlYXJTZWxlY3RlZCgpO1xuICAgICAgICAkc2NvcGUuYXBwU2VsZWN0b3JTaG93ID0gZmFsc2U7XG4gICAgICB9XG4gICAgfTtcblxuICB9XSk7XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIF9tb2R1bGUuZGlyZWN0aXZlKFwiaGF3dGlvQnJlYWRjcnVtYnNcIiwgWydIYXd0aW9CcmVhZGNydW1icycsIChIYXd0aW9CcmVhZGNydW1icykgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAvKlxuICAgICAgdGVtcGxhdGVVcmw6IEt1YmVybmV0ZXMudGVtcGxhdGVQYXRoICsgJ2JyZWFkY3J1bWJzLmh0bWwnXG4gICAgICAqL1xuICAgICAgbGluazogKHNjb3BlLCBlbGVtZW50LCBhdHRycykgPT4ge1xuICAgICAgICBIYXd0aW9CcmVhZGNydW1icy5hcHBseShzY29wZS4kZXZhbCgnYnJlYWRjcnVtYkNvbmZpZycpKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XSk7XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIGV4cG9ydCB2YXIgQnVpbGRDb250cm9sbGVyID0gY29udHJvbGxlcihcIkJ1aWxkQ29udHJvbGxlclwiLFxuICAgIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIkt1YmVybmV0ZXNTY2hlbWFcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXG4gICAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNTY2hlbWEsXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcblxuICAgICAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAgICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xuICAgICAgICAkc2NvcGUuaWQgPSAkcm91dGVQYXJhbXNbXCJpZFwiXTtcbiAgICAgICAgJHNjb3BlLnNjaGVtYSA9IEt1YmVybmV0ZXNTY2hlbWE7XG4gICAgICAgICRzY29wZS5jb25maWcgPSBLdWJlcm5ldGVzU2NoZW1hLmRlZmluaXRpb25zLm9zX2J1aWxkX0J1aWxkO1xuXG4gICAgICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcbiAgICAgICAgJHNjb3BlLmJyZWFkY3J1bWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdEJyZWFkY3J1bWJzKCRzY29wZS5pZCk7XG4gICAgICAgICRzY29wZS5zdWJUYWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdFN1Yk5hdkJhcnMoJHNjb3BlLmlkLCBudWxsLCAkc2NvcGUpO1xuXG4gICAgICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdXBkYXRlRGF0YSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICAkc2NvcGUuJG9uKCckcm91dGVVcGRhdGUnLCAoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgdXBkYXRlRGF0YSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICB1cGRhdGVEYXRhKCk7XG5cbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcbiAgICAgICAgICAkc2NvcGUuaXRlbSA9IG51bGw7XG4gICAgICAgICAgaWYgKCRzY29wZS5pZCkge1xuICAgICAgICAgICAgdmFyIHVybCA9IGJ1aWxkUmVzdFVybCgkc2NvcGUuaWQpO1xuICAgICAgICAgICAgJGh0dHAuZ2V0KHVybCkuXG4gICAgICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICRzY29wZS5lbnRpdHkgPSBlbnJpY2hCdWlsZChkYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJHNjb3BlLmZldGNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICAgICAgIH0pLlxuICAgICAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJHNjb3BlLmZldGNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1dKTtcbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSGVscGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxuXG5tb2R1bGUgS3ViZXJuZXRlcyB7XG5cbiAgZXhwb3J0IHZhciBCdWlsZENvbmZpZ0NvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiQnVpbGRDb25maWdDb250cm9sbGVyXCIsXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiS3ViZXJuZXRlc1NjaGVtYVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcbiAgICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDpLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc1NjaGVtYSxcbiAgICAgICAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xuXG4gICAgICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xuICAgICAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XG4gICAgICAgICRzY29wZS5pZCA9ICRyb3V0ZVBhcmFtc1tcImlkXCJdO1xuICAgICAgICAkc2NvcGUuc2NoZW1hID0gS3ViZXJuZXRlc1NjaGVtYTtcbiAgICAgICAgJHNjb3BlLmNvbmZpZyA9IEt1YmVybmV0ZXNTY2hlbWEuZGVmaW5pdGlvbnMub3NfYnVpbGRfQnVpbGRDb25maWc7XG5cbiAgICAgICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xuICAgICAgICAkc2NvcGUuYnJlYWRjcnVtYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVQcm9qZWN0QnJlYWRjcnVtYnMoJHNjb3BlLmlkKTtcbiAgICAgICAgJHNjb3BlLnN1YlRhYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVQcm9qZWN0U3ViTmF2QmFycygkc2NvcGUuaWQpO1xuXG4gICAgICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdXBkYXRlRGF0YSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICAkc2NvcGUuJG9uKCckcm91dGVVcGRhdGUnLCAoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgdXBkYXRlRGF0YSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICB1cGRhdGVEYXRhKCk7XG5cbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcbiAgICAgICAgICAkc2NvcGUuaXRlbSA9IG51bGw7XG4gICAgICAgICAgaWYgKCRzY29wZS5pZCkge1xuICAgICAgICAgICAgdmFyIHVybCA9IGJ1aWxkQ29uZmlnUmVzdFVybCgkc2NvcGUuaWQpO1xuICAgICAgICAgICAgJGh0dHAuZ2V0KHVybCkuXG4gICAgICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICRzY29wZS5lbnRpdHkgPSBkYXRhO1xuICAgICAgICAgICAgICAgICAgdmFyIHNvcnRlZEJ1aWxkcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICBlbnJpY2hCdWlsZENvbmZpZyhkYXRhLCBzb3J0ZWRCdWlsZHMpO1xuICAgICAgICAgICAgICAgICAgJHNjb3BlLm1vZGVsLnNldFByb2plY3QoJHNjb3BlLmVudGl0eSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICRzY29wZS5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgICAgICAgICB9KS5cbiAgICAgICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRzY29wZS5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XSk7XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIGV4cG9ydCB2YXIgQnVpbGRDb25maWdFZGl0Q29udHJvbGxlciA9IF9tb2R1bGUuY29udHJvbGxlcihcIkt1YmVybmV0ZXMuQnVpbGRDb25maWdFZGl0Q29udHJvbGxlclwiLCAoJHNjb3BlLCAkZWxlbWVudCwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLCAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCwgSzhTQ2xpZW50RmFjdG9yeSwgU2NoZW1hUmVnaXN0cnk6SGF3dGlvRm9ybXMuU2NoZW1hUmVnaXN0cnkpID0+IHtcblxuICAgICAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAgICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xuICAgICAgICAkc2NvcGUuaWQgPSAkcm91dGVQYXJhbXNbXCJwcm9qZWN0XCJdIHx8ICRyb3V0ZVBhcmFtc1tcImlkXCJdO1xuICAgICAgICAkc2NvcGUuc2NoZW1hID0gS3ViZXJuZXRlc1NjaGVtYTtcblxuICAgICAgICB2YXIgbW9kZSA9ICRzY29wZS4kZXZhbCgnbW9kZScpIHx8ICdlZGl0JztcblxuICAgICAgICBsb2cuZGVidWcoXCJNb2RlOiBcIiwgbW9kZSk7XG5cblxuICAgICAgICB2YXIgc3BlY0NvbmZpZyA9IFNjaGVtYVJlZ2lzdHJ5LmdldFNjaGVtYSgnaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkQ29uZmlnU3BlYycpO1xuICAgICAgICB2YXIgZ2l0QnVpbGRTb3VyY2UgPSBTY2hlbWFSZWdpc3RyeS5nZXRTY2hlbWEoJ2lvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5HaXRCdWlsZFNvdXJjZScpO1xuICAgICAgICB2YXIgYnVpbGRTb3VyY2UgPSBTY2hlbWFSZWdpc3RyeS5nZXRTY2hlbWEoJ2lvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZFNvdXJjZScpO1xuICAgICAgICB2YXIgYnVpbGRPdXRwdXQgPSBTY2hlbWFSZWdpc3RyeS5nZXRTY2hlbWEoJ2lvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZE91dHB1dCcpO1xuICAgICAgICB2YXIgcmVzb3VyY2VzID0gU2NoZW1hUmVnaXN0cnkuZ2V0U2NoZW1hKCdpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJlc291cmNlUmVxdWlyZW1lbnRzJyk7XG4gICAgICAgIHZhciByZXZpc2lvbiA9IFNjaGVtYVJlZ2lzdHJ5LmdldFNjaGVtYSgnaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlNvdXJjZVJldmlzaW9uJyk7XG4gICAgICAgIHZhciBzdHJhdGVneSA9IFNjaGVtYVJlZ2lzdHJ5LmdldFNjaGVtYSgnaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkU3RyYXRlZ3knKTtcbiAgICAgICAgdmFyIGN1c3RvbVN0cmF0ZWd5ID0gU2NoZW1hUmVnaXN0cnkuZ2V0U2NoZW1hKCdpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQ3VzdG9tQnVpbGRTdHJhdGVneScpO1xuICAgICAgICB2YXIgYnVpbGRUcmlnZ2VyUG9saWN5ID0gU2NoZW1hUmVnaXN0cnkuZ2V0U2NoZW1hKCdpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRUcmlnZ2VyUG9saWN5Jyk7XG5cbiAgICAgICAgdmFyIGdldFNlY3JldHMgPSAoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuICRzY29wZS5zZWNyZXRzO1xuICAgICAgICB9O1xuXG5cbiAgICAgICAgdmFyIHNlY3JldFNjaGVtYVR5cGUgPSBcImZhYnJpYzhfU2VjcmV0UmVmZXJlbmNlXCI7XG4gICAgICAgIHZhciBzZWNyZXRTY2hlbWFSZWYgPSBcIiMvZGVmaW5pdGlvbnMvXCIgKyBzZWNyZXRTY2hlbWFUeXBlO1xuICAgICAgICB2YXIgc2VjcmV0U2NoZW1hSmF2YVR5cGUgPSBcImlvLmZhYnJpYzguY29uc29sZS5TZWNyZXRSZWZlcmVuY2VcIjtcblxuICAgICAgICB2YXIgc2VjcmV0TmFtZUVsZW1lbnQgPSA8SGF3dGlvRm9ybXMuRm9ybUVsZW1lbnQ+IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImVudW1cIjogZ2V0U2VjcmV0cyxcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBzZWNyZXRTY2hlbWE6IEhhd3Rpb0Zvcm1zLkZvcm1Db25maWd1cmF0aW9uID0gPGFueT4ge1xuICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIFwibmFtZVwiOiBzZWNyZXROYW1lRWxlbWVudFxuICAgICAgICAgIH0sXG4gICAgICAgICAgamF2YVR5cGU6IHNlY3JldFNjaGVtYUphdmFUeXBlXG4gICAgICAgIH07XG4gICAgICAgIFNjaGVtYVJlZ2lzdHJ5LmFkZFNjaGVtYShzZWNyZXRTY2hlbWFUeXBlLCBzZWNyZXRTY2hlbWEpO1xuXG4gICAgICAgIC8vIGxldHMgc3dpdGNoIHRvIHRoZSBuZXcgc2VjcmV0cyB0eXBlczpcbiAgICAgICAgdmFyIHNvdXJjZVNlY3JldFByb3BlcnR5ID0gQ29yZS5wYXRoR2V0KGJ1aWxkU291cmNlLCBbXCJwcm9wZXJ0aWVzXCIsIFwic291cmNlU2VjcmV0XCJdKTtcbiAgICAgICAgYW5ndWxhci5mb3JFYWNoKFtcbiAgICAgICAgICBDb3JlLnBhdGhHZXQoY3VzdG9tU3RyYXRlZ3ksIFtcInByb3BlcnRpZXNcIiwgXCJwdWxsU2VjcmV0XCJdKSxcbiAgICAgICAgICBzb3VyY2VTZWNyZXRQcm9wZXJ0eSxcbiAgICAgICAgXSwgKHNjaGVtYVR5cGUpID0+IHtcbiAgICAgICAgICBpZiAoc2NoZW1hVHlwZSkge1xuICAgICAgICAgICAgc2NoZW1hVHlwZVtcInR5cGVcIl0gPSBzZWNyZXRTY2hlbWFUeXBlO1xuICAgICAgICAgICAgc2NoZW1hVHlwZVtcIiRyZWZcIl0gPSBzZWNyZXRTY2hlbWFSZWY7XG4gICAgICAgICAgICBzY2hlbWFUeXBlW1wiamF2YVR5cGVcIl0gPSBzZWNyZXRTY2hlbWFKYXZhVHlwZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGxldHMgdHJ5IG1ha2UgdGhlIGJ1aWxkU291cmNlJ3Mgc291cmNlU2VjcmV0IG1hbmRhdG9yeVxuICAgICAgICAvL3NjaGVtYVNldFJlcXVpcmVkKGN1c3RvbVN0cmF0ZWd5LCAncHVsbFNlY3JldCcpO1xuICAgICAgICBzY2hlbWFTZXRSZXF1aXJlZChidWlsZFNvdXJjZSwgJ3NvdXJjZVNlY3JldCcpO1xuICAgICAgICBpZiAoc291cmNlU2VjcmV0UHJvcGVydHkpIHtcbiAgICAgICAgICBDb3JlLnBhdGhTZXQoc291cmNlU2VjcmV0UHJvcGVydHksIFsncHJvcGVydGllcycsICdyZXF1aXJlZCddLCB0cnVlKTtcbiAgICAgICAgICBDb3JlLnBhdGhTZXQoc291cmNlU2VjcmV0UHJvcGVydHksIFsncHJvcGVydGllcycsICdpbnB1dC1hdHRyaWJ1dGVzJywgJ3JlcXVpcmVkJ10sIHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgJHNjb3BlLmN1c3RvbVN0cmF0ZWd5ID0gY3VzdG9tU3RyYXRlZ3k7XG4gICAgICAgICRzY29wZS5idWlsZFNvdXJjZSA9IGJ1aWxkU291cmNlO1xuXG4gICAgICAgICRzY29wZS5zZWNyZXRzID0gW107XG5cbiAgICAgICAgLy8gJHNjb3BlLmNvbmZpZyA9IEt1YmVybmV0ZXNTY2hlbWEuZGVmaW5pdGlvbnMub3NfYnVpbGRfQnVpbGRDb25maWc7XG4gICAgICAgIC8vJHNjb3BlLnNwZWNDb25maWcgPSBLdWJlcm5ldGVzU2NoZW1hLmRlZmluaXRpb25zLm9zX2J1aWxkX0J1aWxkQ29uZmlnU3BlYztcbiAgICAgICAgLy9cbiAgICAgICAgc3BlY0NvbmZpZy5zdHlsZSA9IEhhd3Rpb0Zvcm1zLkZvcm1TdHlsZS5TVEFOREFSRDtcbiAgICAgICAgc3BlY0NvbmZpZy5wcm9wZXJ0aWVzWyd0cmlnZ2VycyddWydsYWJlbC1hdHRyaWJ1dGVzJ10gPSB7XG4gICAgICAgICAgc3R5bGU6ICdkaXNwbGF5OiBub25lOydcbiAgICAgICAgfTtcblxuICAgICAgICBnaXRCdWlsZFNvdXJjZS5jb250cm9scyA9IFsndXJpJywgJ3JlZicsICcqJ107XG4gICAgICAgIGJ1aWxkU291cmNlLnByb3BlcnRpZXNbJ3R5cGUnXS50eXBlID0gJ2hpZGRlbic7XG4gICAgICAgIGJ1aWxkU291cmNlLnByb3BlcnRpZXNbJ3R5cGUnXVsnZGVmYXVsdCddID0gJ0dpdCc7XG4gICAgICAgIGJ1aWxkU291cmNlLmNvbnRyb2xzID0gWydnaXQnLCAnY29udGV4dERpcicsICdzb3VyY2VTZWNyZXQnLCAnKiddO1xuXG4gICAgICAgIGdpdEJ1aWxkU291cmNlWydoaWRlTGVnZW5kJ10gPSB0cnVlO1xuICAgICAgICBidWlsZFNvdXJjZVsnaGlkZUxlZ2VuZCddID0gdHJ1ZTtcbiAgICAgICAgYnVpbGRPdXRwdXRbJ2hpZGVMZWdlbmQnXSA9IHRydWU7XG4gICAgICAgIHJlc291cmNlc1snaGlkZUxlZ2VuZCddID0gdHJ1ZTtcbiAgICAgICAgcmV2aXNpb25bJ2hpZGVMZWdlbmQnXSA9IHRydWU7XG4gICAgICAgIHN0cmF0ZWd5WydoaWRlTGVnZW5kJ10gPSB0cnVlO1xuXG4gICAgICAgIHN0cmF0ZWd5LmNvbnRyb2xzID0gWyd0eXBlJywgJyonXTtcbiAgICAgICAgc3RyYXRlZ3kucHJvcGVydGllc1sndHlwZSddID0ge1xuICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICBlbnVtOiBbe1xuICAgICAgICAgICAgJ3ZhbHVlJzogJ0N1c3RvbScsXG4gICAgICAgICAgICAnbGFiZWwnOiAnQ3VzdG9tJ1xuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICd2YWx1ZSc6ICdEb2NrZXInLFxuICAgICAgICAgICAgJ2xhYmVsJzogJ0RvY2tlcidcbiAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAndmFsdWUnOiAnU291cmNlJyxcbiAgICAgICAgICAgICdsYWJlbCc6ICdTb3VyY2UnXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgICAgY3VzdG9tU3RyYXRlZ3lbJ2NvbnRyb2wtZ3JvdXAtYXR0cmlidXRlcyddID0ge1xuICAgICAgICAgICduZy1zaG93JzogXCJlbnRpdHkudHlwZSA9PSAnQ3VzdG9tJ1wiXG4gICAgICAgIH07XG4gICAgICAgIHN0cmF0ZWd5LnByb3BlcnRpZXNbJ2RvY2tlclN0cmF0ZWd5J11bJ2NvbnRyb2wtZ3JvdXAtYXR0cmlidXRlcyddID0ge1xuICAgICAgICAgICduZy1zaG93JzogXCJlbnRpdHkudHlwZSA9PSAnRG9ja2VyJ1wiXG4gICAgICAgIH07XG4gICAgICAgIHN0cmF0ZWd5LnByb3BlcnRpZXNbJ3NvdXJjZVN0cmF0ZWd5J11bJ2NvbnRyb2wtZ3JvdXAtYXR0cmlidXRlcyddID0ge1xuICAgICAgICAgICduZy1zaG93JzogXCJlbnRpdHkudHlwZSA9PSAnU291cmNlJ1wiXG4gICAgICAgIH07XG5cbiAgICAgICAgYnVpbGRUcmlnZ2VyUG9saWN5LmNvbnRyb2xzID0gWyd0eXBlJywgJyonXTtcbiAgICAgICAgYnVpbGRUcmlnZ2VyUG9saWN5LnByb3BlcnRpZXNbJ3R5cGUnXSA9IHtcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICBlbnVtOiBbe1xuICAgICAgICAgICAgJ3ZhbHVlJzogJ0dpdGh1YicsXG4gICAgICAgICAgICAnbGFiZWwnOiAnR2l0aHViJ1xuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICd2YWx1ZSc6ICdJbWFnZUNoYW5nZScsXG4gICAgICAgICAgICAnbGFiZWwnOiAnSW1hZ2UgQ2hhbmdlJ1xuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICd2YWx1ZSc6ICdHZW5lcmljJyxcbiAgICAgICAgICAgICdsYWJlbCc6ICdHZW5lcmljJ1xuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICAgIGJ1aWxkVHJpZ2dlclBvbGljeS5wcm9wZXJ0aWVzWydnZW5lcmljJ11bJ2NvbnRyb2wtZ3JvdXAtYXR0cmlidXRlcyddID0ge1xuICAgICAgICAgICduZy1zaG93JzogXCJlbnRpdHkudHlwZSA9PSAnR2VuZXJpYydcIlxuICAgICAgICB9O1xuICAgICAgICBidWlsZFRyaWdnZXJQb2xpY3kucHJvcGVydGllc1snZ2l0aHViJ11bJ2NvbnRyb2wtZ3JvdXAtYXR0cmlidXRlcyddID0ge1xuICAgICAgICAgICduZy1zaG93JzogXCJlbnRpdHkudHlwZSA9PSAnR2l0aHViJ1wiXG4gICAgICAgIH07XG4gICAgICAgIGJ1aWxkVHJpZ2dlclBvbGljeS5wcm9wZXJ0aWVzWydpbWFnZUNoYW5nZSddWydjb250cm9sLWdyb3VwLWF0dHJpYnV0ZXMnXSA9IHtcbiAgICAgICAgICAnbmctc2hvdyc6IFwiZW50aXR5LnR5cGUgPT0gJ0ltYWdlQ2hhbmdlJ1wiXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gcmUtYXJyYW5naW5nIHRoZSBjb250cm9sc1xuICAgICAgICAvL3NwZWNDb25maWcuY29udHJvbHMgPSBbJ3NvdXJjZScsICcqJ107XG4gICAgICAgIFxuICAgICAgICAvLyB0YWJzXG4gICAgICAgIHNwZWNDb25maWcudGFicyA9IHtcbiAgICAgICAgICBcIlNvdXJjZVwiOiBbXCJzb3VyY2VcIl0sXG4gICAgICAgICAgXCJSZXZpc2lvblwiOiBbXCJyZXZpc2lvblwiXSxcbiAgICAgICAgICBcIk91dHB1dFwiOiBbXCJvdXRwdXRcIl0sXG4gICAgICAgICAgXCJSZXNvdXJjZXNcIjogW1wicmVzb3VyY2VzXCJdLFxuICAgICAgICAgIFwiU3RyYXRlZ3lcIjogW1wic3RyYXRlZ3lcIl0sXG4gICAgICAgICAgXCJUcmlnZ2Vyc1wiOiBbXCJ0cmlnZ2Vyc1wiXSxcbiAgICAgICAgICBcIlNlcnZpY2UgQWNjb3VudFwiOiBbXCJzZXJ2aWNlQWNjb3VudFwiXVxuICAgICAgICB9O1xuICAgICAgICAvKlxuICAgICAgICAgKiB3aXphcmQsIG5lZWRzIGFuICdvbkZpbmlzaCcgZnVuY3Rpb24gaW4gdGhlIHNjb3BlXG4gICAgICAgIHNwZWNDb25maWcud2l6YXJkID0gPGFueT57XG4gICAgICAgICAgcGFnZXM6IHtcbiAgICAgICAgICAgIFNvdXJjZToge1xuICAgICAgICAgICAgICBjb250cm9sczogW1wic291cmNlXCJdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgUmV2aXNpb246IHtcbiAgICAgICAgICAgICAgY29udHJvbHM6IFtcInJldmlzaW9uXCJdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgT3V0cHV0OiB7XG4gICAgICAgICAgICAgIGNvbnRyb2xzOiBbXCJvdXRwdXRcIl1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBSZXNvdXJjZXM6IHtcbiAgICAgICAgICAgICAgY29udHJvbHM6IFtcInJlc291cmNlc1wiXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFN0cmF0ZWd5OiB7XG4gICAgICAgICAgICAgIGNvbnRyb2xzOiBbXCJzdHJhdGVneVwiXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFRyaWdnZXJzOiB7XG4gICAgICAgICAgICAgIGNvbnRyb2xzOiBbXCJ0cmlnZ2Vyc1wiXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiU2VydmljZSBBY2NvdW50XCI6IHtcbiAgICAgICAgICAgICAgY29udHJvbHM6IFtcInNlcnZpY2VBY2NvdW50XCJdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAqL1xuXG4gICAgICAgICRzY29wZS5lbnRpdHkgPSB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IFwidjFcIixcbiAgICAgICAgICBcImtpbmRcIjogXCJCdWlsZENvbmZpZ1wiLFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCJuYW1lXCI6IFwiXCIsXG4gICAgICAgICAgICBcImxhYmVsc1wiOiB7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNwZWNcIjoge1xuICAgICAgICAgICAgXCJzb3VyY2VcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJHaXRcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwic3RyYXRlZ3lcIjoge1xuICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcIkN1c3RvbVwiLFxuICAgICAgICAgICAgICAgIFwiY3VzdG9tU3RyYXRlZ3lcIjoge1xuICAgICAgICAgICAgICAgICAgICBcImZyb21cIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJraW5kXCI6IFwiRG9ja2VySW1hZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcImZhYnJpYzgvb3BlbnNoaWZ0LXMyaS1qZW5raW5zLXRyaWdnZXJcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBcImVudlwiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiQkFTRV9VUklcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZhbHVlXCI6IGplbmtpbnNVcmxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiSk9CX05BTUVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZhbHVlXCI6IGpvYk5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgJHNjb3BlLiR3YXRjaCgnZW50aXR5LnNwZWMuc291cmNlLmdpdC51cmknLCAodmFsKSA9PiB7XG4gICAgICAgICAgaWYgKCF2YWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIGxhc3RCaXQgPSB2YWwubWF0Y2goL1teXFwvXSskLylbMF07XG4gICAgICAgICAgaWYgKGxhc3RCaXQpIHtcbiAgICAgICAgICAgIHZhciBuYW1lID0gbGFzdEJpdC5yZXBsYWNlKC9cXC5naXQkLywgJycpO1xuICAgICAgICAgICAgbG9nLmRlYnVnKFwibmFtZTogXCIsIG5hbWUpO1xuICAgICAgICAgICAgaWYgKCFDb3JlLmlzQmxhbmsobmFtZSkgXG4gICAgICAgICAgICAgICYmIENvcmUuaXNCbGFuayhDb3JlLnBhdGhHZXQoJHNjb3BlLmVudGl0eSwgWydtZXRhZGF0YScsICduYW1lJ10pKSkge1xuICAgICAgICAgICAgICBDb3JlLnBhdGhTZXQoJHNjb3BlLmVudGl0eSwgWydtZXRhZGF0YScsICduYW1lJ10sIG5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xuICAgICAgICAkc2NvcGUuYnJlYWRjcnVtYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVQcm9qZWN0U2V0dGluZ3NCcmVhZGNydW1icygkc2NvcGUucHJvamVjdElkKTtcbiAgICAgICAgJHNjb3BlLnN1YlRhYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVQcm9qZWN0U3ViTmF2QmFycygkc2NvcGUucHJvamVjdElkKTtcbiAgICAgICAgJHNjb3BlLnRhYnMgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdFNldHRpbmdzU3ViTmF2QmFycygkc2NvcGUucHJvamVjdElkKTtcblxuICAgICAgICB3YXRjaCgkc2NvcGUsICRlbGVtZW50LCBcInNlY3JldHNcIiwgJHNjb3BlLm5hbWVzcGFjZSwgb25TZWNyZXRzKTtcblxuXG4gICAgICAgICRzY29wZS5idWlsZENvbmZpZ0NsaWVudCA9IEs4U0NsaWVudEZhY3RvcnkuY3JlYXRlKFwiYnVpbGRjb25maWdzXCIsICRzY29wZS5uYW1lc3BhY2UpO1xuXG4gICAgICAgICRlbGVtZW50Lm9uKCckZGVzdHJveScsICgpID0+IHtcbiAgICAgICAgICAkc2NvcGUuJGRlc3Ryb3koKTtcbiAgICAgICAgfSk7XG4gICAgICAgICRzY29wZS4kb24oJyRkZXN0cm95JywgKCkgPT4ge1xuICAgICAgICAgIEs4U0NsaWVudEZhY3RvcnkuZGVzdHJveSgkc2NvcGUuYnVpbGRDb25maWdDbGllbnQpO1xuICAgICAgICB9KTtcblxuLypcbiAgICAgICAgJHNjb3BlLiRvbigna3ViZXJuZXRlc01vZGVsVXBkYXRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB1cGRhdGVEYXRhKCk7XG4gICAgICAgIH0pO1xuXG4qL1xuICAgICAgICAkc2NvcGUuJG9uKCckcm91dGVVcGRhdGUnLCAoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgdXBkYXRlRGF0YSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICAkc2NvcGUuc2F2ZSA9ICgpID0+IHtcbiAgICAgICAgICBsb2cuaW5mbyhcIlNhdmluZyFcIik7XG5cblxuICAgICAgICAgIHZhciBlbnRpdHkgPSAkc2NvcGUuZW50aXR5O1xuICAgICAgICAgIHZhciBzcGVjID0gKGVudGl0eSB8fCB7fSkuc3BlYyB8fCB7fTtcblxuICAgICAgICAgIC8vIFRPRE8gdXBkYXRlIHRoZSBqZW5raW5zIGpvYiBuYW1lIVxuXG4gICAgICAgICAgLy8gbGV0cyBkZWxldGUgbG90cyBvZiBjcnVmdFxuICAgICAgICAgIHZhciBzdHJhdGVneSA9IHNwZWMuc3RyYXRlZ3kgfHwge307XG4gICAgICAgICAgZGVsZXRlIHN0cmF0ZWd5W1wiZG9ja2VyU3RyYXRlZ3lcIl07XG4gICAgICAgICAgZGVsZXRlIHN0cmF0ZWd5W1wic291cmNlU3RyYXRlZ3lcIl07XG5cbiAgICAgICAgICBkZWxldGUgc3BlY1tcInJldmlzaW9uXCJdO1xuICAgICAgICAgIGRlbGV0ZSBzcGVjW1wib3V0cHV0XCJdO1xuICAgICAgICAgIGRlbGV0ZSBzcGVjW1wicmVzb3VyY2VzXCJdO1xuXG4gICAgICAgICAgdmFyIHN0cmF0ZWd5UHVsbFNlY3JldE5hbWUgPSBDb3JlLnBhdGhHZXQoc3BlYywgW1wic3RyYXRlZ3lcIiwgXCJjdXN0b21TdHJhdGVneVwiLCBcInB1bGxTZWNyZXRcIiwgXCJuYW1lXCJdKTtcbiAgICAgICAgICB2YXIgc291cmNlU2VjcmV0TmFtZSA9IENvcmUucGF0aEdldChzcGVjLCBbXCJzb3VyY2VcIiwgXCJzb3VyY2VTZWNyZXRcIiwgXCJuYW1lXCJdKTtcbiAgICAgICAgICBsb2cuaW5mbyhcInNvdXJjZVNlY3JldE5hbWU6IFwiICsgc291cmNlU2VjcmV0TmFtZSk7XG4gICAgICAgICAgbG9nLmluZm8oXCJzdHJhdGVneVB1bGxTZWNyZXROYW1lOiBcIiArIHN0cmF0ZWd5UHVsbFNlY3JldE5hbWUpO1xuICAgICAgICAgIGlmICghc3RyYXRlZ3lQdWxsU2VjcmV0TmFtZSAmJiBzb3VyY2VTZWNyZXROYW1lKSB7XG4gICAgICAgICAgICBDb3JlLnBhdGhTZXQoc3BlYywgW1wic3RyYXRlZ3lcIiwgXCJjdXN0b21TdHJhdGVneVwiLCBcInB1bGxTZWNyZXRcIiwgXCJuYW1lXCJdLCBzb3VyY2VTZWNyZXROYW1lKTtcbiAgICAgICAgICB9XG5cbi8qXG4gICAgICAgICAgLy8gVE9ETyBoYWNrIHVudGlsIHRoZSBwdXQgZGVhbHMgd2l0aCB1cGRhdGVzXG4gICAgICAgICAgdmFyIG1ldGFkYXRhID0gZW50aXR5Lm1ldGFkYXRhO1xuICAgICAgICAgIGlmIChtZXRhZGF0YSkge1xuICAgICAgICAgICAgZGVsZXRlIG1ldGFkYXRhW1wicmVzb3VyY2VWZXJzaW9uXCJdO1xuICAgICAgICAgIH1cbiovXG5cbiAgICAgICAgICBsb2cuaW5mbyhhbmd1bGFyLnRvSnNvbihlbnRpdHksIHRydWUpKTtcblxuICAgICAgICAgICRzY29wZS5idWlsZENvbmZpZ0NsaWVudC5wdXQoZW50aXR5LCAob2JqKSA9PiB7XG4gICAgICAgICAgICBsb2cuaW5mbyhcImJ1aWxkIGNvbmZpZyBjcmVhdGVkIVwiKTtcblxuICAgICAgICAgICAgdmFyIGxpbmsgPSBEZXZlbG9wZXIucHJvamVjdFNlY3JldHNMaW5rKCRzY29wZS5uYW1lc3BhY2UsIGdldE5hbWUoZW50aXR5KSk7XG4gICAgICAgICAgICBpZiAobGluaykge1xuICAgICAgICAgICAgICBsb2cuaW5mbyhcIk5hdmlnYXRpbmcgdG86IFwiKyBsaW5rKTtcbiAgICAgICAgICAgICAgJGxvY2F0aW9uLnBhdGgobGluayk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBsb2cud2FybihcIkNvdWxkIG5vdCBmaW5kIHRoZSBlZGl0IHBpcGVsaW5lIGxpbmshXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgdXBkYXRlRGF0YSgpO1xuXG5cbiAgICAgICAgdmFyIGplbmtpbnNVcmwgPSBEZXZlbG9wZXIuamVua2luc0xpbmsoKTtcbiAgICAgICAgdmFyIGpvYk5hbWUgPSBcIlwiO1xuXG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZURhdGEoKSB7XG4gICAgICAgICAgJHNjb3BlLml0ZW0gPSBudWxsO1xuICAgICAgICAgIGlmICgkc2NvcGUuaWQpIHtcbiAgICAgICAgICAgIHZhciB1cmwgPSBidWlsZENvbmZpZ1Jlc3RVcmwoJHNjb3BlLmlkKTtcbiAgICAgICAgICAgICRodHRwLmdldCh1cmwpLlxuICAgICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAkc2NvcGUuZW50aXR5ID0gZGF0YTtcblxuICAgICAgICAgICAgICAgICAgdmFyIGJ1aWxkQ29uZmlnID0gYW5ndWxhci5jb3B5KGRhdGEpO1xuICAgICAgICAgICAgICAgICAgdmFyIHNvcnRlZEJ1aWxkcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICBLdWJlcm5ldGVzLmVucmljaEJ1aWxkQ29uZmlnKGJ1aWxkQ29uZmlnLCBzb3J0ZWRCdWlsZHMpO1xuICAgICAgICAgICAgICAgICAgJHNjb3BlLmJ1aWxkQ29uZmlnID0gYnVpbGRDb25maWc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICRzY29wZS5zcGVjID0gKCRzY29wZS5lbnRpdHkgfHwge30pLnNwZWMgfHwge307XG4gICAgICAgICAgICAgICAgJHNjb3BlLmZldGNoZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gbGV0cyB1cGRhdGUgdGhlIHRhYnNcbiAgICAgICAgICAgICAgICAkc2NvcGUuc3ViVGFiQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZVByb2plY3RTdWJOYXZCYXJzKCRzY29wZS5wcm9qZWN0SWQsIG51bGwsICRzY29wZSk7XG4gICAgICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgICAgICAgfSkuXG4gICAgICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGxvYWQgXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XG5cbiAgICAgICAgICAgICRzY29wZS5zcGVjID0gJHNjb3BlLmVudGl0eS5zcGVjO1xuICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBvblNlY3JldHMoc2VjcmV0cykge1xuICAgICAgICAgIHZhciBhcnJheSA9IFtdO1xuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChzZWNyZXRzLCAoc2VjcmV0KSA9PiB7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IGdldE5hbWUoc2VjcmV0KTtcbiAgICAgICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgICAgIGFycmF5LnB1c2goe1xuICAgICAgICAgICAgICAgIGxhYmVsOiBuYW1lLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgICAgICAgICAgIFwiYXR0cmlidXRlc1wiOiB7XG4gICAgICAgICAgICAgICAgICBcInRpdGxlXCI6IG5hbWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICRzZWNyZXQ6IHNlY3JldFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICAkc2NvcGUuc2VjcmV0cyA9IF8uc29ydEJ5KGFycmF5LCBcImxhYmVsXCIpO1xuXG4gICAgICAgICAgdmFyIHNwZWNTb3VyY2VTZWNyZXROYW1lUGF0aCA9IFsnc3BlYycsICdzb3VyY2UnLCAnc291cmNlU2VjcmV0JywgJ25hbWUnXTtcbiAgICAgICAgICBpZiAoJHNjb3BlLmVudGl0eSAmJiAhQ29yZS5wYXRoR2V0KCRzY29wZS5lbnRpdHksIHNwZWNTb3VyY2VTZWNyZXROYW1lUGF0aCkpIHtcbiAgICAgICAgICAgIHZhciBkZWZhdWx0U2VjcmV0TmFtZSA9IGZpbmREZWZhdWx0SW1wb3J0U2VjcmV0TmFtZShzZWNyZXRzKTtcbiAgICAgICAgICAgIENvcmUucGF0aFNldCgkc2NvcGUuZW50aXR5LCBzcGVjU291cmNlU2VjcmV0TmFtZVBhdGgsIGRlZmF1bHRTZWNyZXROYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBmaW5kRGVmYXVsdEltcG9ydFNlY3JldE5hbWUoc2VjcmV0cykge1xuICAgICAgICAgIHZhciBhbnN3ZXIgPSBudWxsO1xuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChzZWNyZXRzLCAoc2VjcmV0KSA9PiB7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IGdldE5hbWUoc2VjcmV0KTtcbiAgICAgICAgICAgIGlmICghYW5zd2VyICYmIG5hbWUgJiYgbmFtZS5zdGFydHNXaXRoKFwiamVua2lucy1sb2dpblwiKSkge1xuICAgICAgICAgICAgICBhbnN3ZXIgPSBuYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmICghYW5zd2VyKSB7XG4gICAgICAgICAgICBhbmd1bGFyLmZvckVhY2goc2VjcmV0cywgKHNlY3JldCkgPT4ge1xuICAgICAgICAgICAgICB2YXIgbmFtZSA9IGdldE5hbWUoc2VjcmV0KTtcbiAgICAgICAgICAgICAgaWYgKCFhbnN3ZXIgJiYgbmFtZSAmJiBuYW1lLnN0YXJ0c1dpdGgoXCJqZW5raW5zLXRva2VuXCIpKSB7XG4gICAgICAgICAgICAgICAgYW5zd2VyID0gbmFtZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBhbnN3ZXI7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgICBjYXNlICdjcmVhdGUnOlxuICAgICAgICAgICAgZGVsZXRlIHNwZWNDb25maWcudGFicztcbiAgICAgICAgICAgIF8uZm9ySW4oYnVpbGRTb3VyY2UucHJvcGVydGllcywgKHByb3BlcnR5OmFueSwgbmFtZTpzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgaWYgKG5hbWUgIT09ICdnaXQnKSB7XG4gICAgICAgICAgICAgICAgbG9nLmluZm8oXCJIaWRpbmcgcHJvcGVydHk6IFwiLCBuYW1lKTtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eS5oaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIF8uZm9ySW4oZ2l0QnVpbGRTb3VyY2UucHJvcGVydGllcywgKHByb3BlcnR5OmFueSwgbmFtZTpzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgaWYgKG5hbWUgIT09ICd1cmknKSB7XG4gICAgICAgICAgICAgICAgbG9nLmluZm8oXCJIaWRpbmcgcHJvcGVydHk6IFwiLCBuYW1lKTtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eS5oaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5LmxhYmVsID0gXCJHaXQgVVJMXCI7XG4gICAgICAgICAgICAgICAgcHJvcGVydHlbJ2lucHV0LWF0dHJpYnV0ZXMnXSA9IHtcbiAgICAgICAgICAgICAgICAgICdyZXF1aXJlZCc6IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pOyBcbiAgICAgICAgICAgIF8uZm9ySW4oc3BlY0NvbmZpZy5wcm9wZXJ0aWVzLCAocHJvcGVydHk6YW55LCBuYW1lOnN0cmluZykgPT4ge1xuICAgICAgICAgICAgICBpZiAobmFtZSAhPT0gJ3NvdXJjZScpIHtcbiAgICAgICAgICAgICAgICBsb2cuaW5mbyhcIkhpZGluZyBwcm9wZXJ0eTogXCIsIG5hbWUpO1xuICAgICAgICAgICAgICAgIHByb3BlcnR5LmhpZGRlbiA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnZWRpdCc6XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgfVxuXG4gICAgICAgICRzY29wZS5zcGVjQ29uZmlnID0gc3BlY0NvbmZpZztcbiAgfSk7XG5cbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxuXG5tb2R1bGUgS3ViZXJuZXRlcyB7XG5cbiAgZXhwb3J0IHZhciBCdWlsZENvbmZpZ3NDb250cm9sbGVyID0gY29udHJvbGxlcihcIkJ1aWxkQ29uZmlnc0NvbnRyb2xsZXJcIiwgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiJGRpYWxvZ1wiLCBcIiR3aW5kb3dcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRsb2NhdGlvblwiLCBcImxvY2FsU3RvcmFnZVwiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXG4gICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCAkZGlhbG9nLCAkd2luZG93LCAkdGVtcGxhdGVDYWNoZSwgJHJvdXRlUGFyYW1zLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgbG9jYWxTdG9yYWdlLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcblxuICAgICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XG4gICAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XG5cbiAgICAgICRzY29wZS50YWJsZUNvbmZpZyA9IHtcbiAgICAgICAgZGF0YTogJ21vZGVsLmJ1aWxkY29uZmlncycsXG4gICAgICAgIHNob3dTZWxlY3Rpb25DaGVja2JveDogdHJ1ZSxcbiAgICAgICAgZW5hYmxlUm93Q2xpY2tTZWxlY3Rpb246IGZhbHNlLFxuICAgICAgICBtdWx0aVNlbGVjdDogdHJ1ZSxcbiAgICAgICAgc2VsZWN0ZWRJdGVtczogW10sXG4gICAgICAgIGZpbHRlck9wdGlvbnM6IHtcbiAgICAgICAgICBmaWx0ZXJUZXh0OiAkbG9jYXRpb24uc2VhcmNoKClbXCJxXCJdIHx8ICcnXG4gICAgICAgIH0sXG4gICAgICAgIGNvbHVtbkRlZnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ21ldGFkYXRhLm5hbWUnLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdOYW1lJyxcbiAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiYnVpbGRDb25maWdMaW5rVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgIH0sXG4vKlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpZWxkOiAnc3BlYy5zb3VyY2UudHlwZScsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1NvdXJjZSdcbiAgICAgICAgICB9LFxuKi9cbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ3NwZWMuc291cmNlLmdpdC51cmknLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdSZXBvc2l0b3J5J1xuICAgICAgICAgIH0sXG4vKlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpZWxkOiAnc3BlYy5zdHJhdGVneS50eXBlJyxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnU3RyYXRlZ3knXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ3NwZWMuc3RyYXRlZ3kuc3RpU3RyYXRlZ3kuaW1hZ2UnLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdTb3VyY2UgSW1hZ2UnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ3NwZWMub3V0cHV0LmltYWdlVGFnJyxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnT3V0cHV0IEltYWdlJ1xuICAgICAgICAgIH0sXG4qL1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpZWxkOiAnJGZhYnJpYzhDb2RlVmlld3MnLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdDb2RlJyxcbiAgICAgICAgICAgIHdpZHRoOiBcIioqKlwiLFxuICAgICAgICAgICAgbWluV2lkdGg6IDUwMCxcbiAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiYnVpbGRDb25maWdDb2RlVmlld3NUZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJyRmYWJyaWM4QnVpbGRWaWV3cycsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ0J1aWxkcycsXG4gICAgICAgICAgICB3aWR0aDogXCIqKipcIixcbiAgICAgICAgICAgIG1pbldpZHRoOiA1MDAsXG4gICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImJ1aWxkQ29uZmlnQnVpbGRWaWV3c1RlbXBsYXRlLmh0bWxcIilcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpZWxkOiAnJGZhYnJpYzhFbnZpcm9ubWVudFZpZXdzJyxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnRW52aXJvbm1lbnRzJyxcbiAgICAgICAgICAgIHdpZHRoOiBcIioqKlwiLFxuICAgICAgICAgICAgbWluV2lkdGg6IDUwMCxcbiAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiYnVpbGRDb25maWdFbnZpcm9ubWVudFZpZXdzVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmllbGQ6ICckZmFicmljOFRlYW1WaWV3cycsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1Blb3BsZScsXG4gICAgICAgICAgICB3aWR0aDogXCIqKipcIixcbiAgICAgICAgICAgIG1pbldpZHRoOiA1MDAsXG4gICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImJ1aWxkQ29uZmlnVGVhbVZpZXdzVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfTtcblxuICAgICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xuXG4gICAgICAvLyBUT0RPXG4gICAgICAvLyAkc2NvcGUuaXNMb2dnZWRJbnRvR29ncyA9IEZvcmdlLmlzTG9nZ2VkSW50b0dvZ3M7XG5cbiAgICAgICRzY29wZS5kZWxldGVQcm9tcHQgPSAoc2VsZWN0ZWQpID0+IHtcbiAgICAgICAgVUkubXVsdGlJdGVtQ29uZmlybUFjdGlvbkRpYWxvZyg8VUkuTXVsdGlJdGVtQ29uZmlybUFjdGlvbk9wdGlvbnM+e1xuICAgICAgICAgIGNvbGxlY3Rpb246IHNlbGVjdGVkLFxuICAgICAgICAgIGluZGV4OiAnJG5hbWUnLFxuICAgICAgICAgIG9uQ2xvc2U6IChyZXN1bHQ6Ym9vbGVhbikgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICBmdW5jdGlvbiBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgbmV4dCkge1xuICAgICAgICAgICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgICAgICAgICBkZWxldGVFbnRpdHkobmV4dCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdXBkYXRlRGF0YSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHRpdGxlOiAnRGVsZXRlIEJ1aWxkIENvbmZpZ3M/JyxcbiAgICAgICAgICBhY3Rpb246ICdUaGUgZm9sbG93aW5nIEJ1aWxkIENvbmZpZ3Mgd2lsbCBiZSBkZWxldGVkOicsXG4gICAgICAgICAgb2tUZXh0OiAnRGVsZXRlJyxcbiAgICAgICAgICBva0NsYXNzOiAnYnRuLWRhbmdlcicsXG4gICAgICAgICAgY3VzdG9tOiBcIlRoaXMgb3BlcmF0aW9uIGlzIHBlcm1hbmVudCBvbmNlIGNvbXBsZXRlZCFcIixcbiAgICAgICAgICBjdXN0b21DbGFzczogXCJhbGVydCBhbGVydC13YXJuaW5nXCJcbiAgICAgICAgfSkub3BlbigpO1xuICAgICAgfTtcblxuICAgICAgZnVuY3Rpb24gZGVsZXRlRW50aXR5KHNlbGVjdGlvbiwgbmV4dENhbGxiYWNrKSB7XG4gICAgICAgIHZhciBuYW1lID0gKHNlbGVjdGlvbiB8fCB7fSkuJG5hbWU7XG4gICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJBYm91dCB0byBkZWxldGUgYnVpbGQgY29uZmlnOiBcIiArIG5hbWUpO1xuICAgICAgICAgIHZhciB1cmwgPSBidWlsZENvbmZpZ1Jlc3RVcmwobmFtZSk7XG4gICAgICAgICAgJGh0dHAuZGVsZXRlKHVybCkuXG4gICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICBuZXh0Q2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pLlxuICAgICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGRlbGV0ZSBidWlsZCBjb25maWcgb24gXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIndhcm5pbmc6IG5vIG5hbWUgZm9yIHNlbGVjdGlvbjogXCIgKyBhbmd1bGFyLnRvSnNvbihzZWxlY3Rpb24pKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xuICAgICAgfVxuXG4gICAgICB1cGRhdGVEYXRhKCk7XG4gICAgfV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblxuICBleHBvcnQgdmFyIEJ1aWxkTG9nc0NvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiQnVpbGRMb2dzQ29udHJvbGxlclwiLFxuICAgIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIkt1YmVybmV0ZXNTY2hlbWFcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXG4gICAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNTY2hlbWEsXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcblxuICAgICAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAgICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xuICAgICAgICAkc2NvcGUuaWQgPSAkcm91dGVQYXJhbXNbXCJpZFwiXTtcbiAgICAgICAgJHNjb3BlLnNjaGVtYSA9IEt1YmVybmV0ZXNTY2hlbWE7XG4gICAgICAgICRzY29wZS5jb25maWcgPSBLdWJlcm5ldGVzU2NoZW1hLmRlZmluaXRpb25zLm9zX2J1aWxkX0J1aWxkO1xuXG4gICAgICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcblxuICAgICAgICAkc2NvcGUuJG9uKCdrdWJlcm5ldGVzTW9kZWxVcGRhdGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHVwZGF0ZURhdGEoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJHNjb3BlLiRvbignJHJvdXRlVXBkYXRlJywgKCRldmVudCkgPT4ge1xuICAgICAgICAgIHVwZGF0ZURhdGEoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJHNjb3BlLmxvZ3NUZXh0ID0gXCJMb2FkaW5nIGxvZ3MuLi5cIjtcblxuICAgICAgICB1cGRhdGVEYXRhKCk7XG5cbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcbiAgICAgICAgICAkc2NvcGUuaXRlbSA9IG51bGw7XG4gICAgICAgICAgaWYgKCRzY29wZS5pZCkge1xuICAgICAgICAgICAgdmFyIHVybCA9IGJ1aWxkUmVzdFVybCgkc2NvcGUuaWQpO1xuICAgICAgICAgICAgJGh0dHAuZ2V0KHVybCkuXG4gICAgICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICRzY29wZS5lbnRpdHkgPSBlbnJpY2hCdWlsZChkYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJHNjb3BlLmZldGNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICAgICAgIH0pLlxuICAgICAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdXJsID0gYnVpbGRMb2dzUmVzdFVybCgkc2NvcGUuaWQpO1xuICAgICAgICAgICAgJGh0dHAuZ2V0KHVybCkuXG4gICAgICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cykge1xuICAgICAgICAgICAgICAgICRzY29wZS5sb2dzVGV4dCA9IGRhdGE7XG4gICAgICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgICAgICAgfSkuXG4gICAgICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMpIHtcbiAgICAgICAgICAgICAgICAkc2NvcGUubG9nc1RleHQgPSBcIkZhaWxlZCB0byBsb2FkIGxvZ3MgZnJvbTogXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBzdGF0dXM6IFwiICsgc3RhdHVzO1xuICAgICAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICAgICAgIH0pLlxuICAgICAgICAgICAgICBjYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAkc2NvcGUubG9nc1RleHQgPSBcIkZhaWxlZCB0byBsb2FkIGxvZ3M6IFwiICsgYW5ndWxhci50b0pzb24oZXJyb3IsIHRydWUpO1xuICAgICAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XG4gICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblxuICBleHBvcnQgdmFyIEJ1aWxkc0NvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiQnVpbGRzQ29udHJvbGxlclwiLCBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCIkZGlhbG9nXCIsIFwiJHdpbmRvd1wiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGxvY2F0aW9uXCIsIFwibG9jYWxTdG9yYWdlXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcbiAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsICRkaWFsb2csICR3aW5kb3csICR0ZW1wbGF0ZUNhY2hlLCAkcm91dGVQYXJhbXMsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCBsb2NhbFN0b3JhZ2UsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xuXG4gICAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcbiAgICAgICRzY29wZS5idWlsZENvbmZpZ0lkID0gJHJvdXRlUGFyYW1zW1wiaWRcIl07XG5cbiAgICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICB9KTtcblxuICAgICAgJHNjb3BlLnRhYmxlQ29uZmlnID0ge1xuICAgICAgICBkYXRhOiAnbW9kZWwuYnVpbGRzJyxcbiAgICAgICAgc2hvd1NlbGVjdGlvbkNoZWNrYm94OiB0cnVlLFxuICAgICAgICBlbmFibGVSb3dDbGlja1NlbGVjdGlvbjogZmFsc2UsXG4gICAgICAgIG11bHRpU2VsZWN0OiB0cnVlLFxuICAgICAgICBzZWxlY3RlZEl0ZW1zOiBbXSxcbiAgICAgICAgZmlsdGVyT3B0aW9uczoge1xuICAgICAgICAgIGZpbHRlclRleHQ6ICRsb2NhdGlvbi5zZWFyY2goKVtcInFcIl0gfHwgJydcbiAgICAgICAgfSxcbiAgICAgICAgY29sdW1uRGVmczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpZWxkOiAnbWV0YWRhdGEubmFtZScsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ05hbWUnLFxuICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJidWlsZExpbmtUZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJyRjcmVhdGlvbkRhdGUnLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdUaW1lJyxcbiAgICAgICAgICAgIGRlZmF1bHRTb3J0OiB0cnVlLFxuICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJidWlsZFRpbWVUZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ3N0YXR1cycsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1N0YXR1cycsXG4gICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImJ1aWxkU3RhdHVzVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmllbGQ6ICckbG9nc0xpbmsnLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdMb2dzJyxcbiAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiYnVpbGRMb2dzVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmllbGQ6ICckcG9kTGluaycsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ0J1aWxkIFBvZCcsXG4gICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImJ1aWxkUG9kVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgIH0sXG4vKlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpZWxkOiAncGFyYW1ldGVycy5zb3VyY2UudHlwZScsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1NvdXJjZSdcbiAgICAgICAgICB9LFxuKi9cbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ3NwZWMuc291cmNlLmdpdC51cmknLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdSZXBvc2l0b3J5JyxcbiAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiYnVpbGRSZXBvc2l0b3J5VGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmllbGQ6ICdzcGVjLnN0cmF0ZWd5LnR5cGUnLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdTdHJhdGVneSdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpZWxkOiAnc3BlYy5zdHJhdGVneS5zb3VyY2VTdHJhdGVneS5mcm9tLm5hbWUnLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdTb3VyY2UgSW1hZ2UnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ3NwZWMub3V0cHV0LnRvLm5hbWUnLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdPdXRwdXQgSW1hZ2UnXG4gICAgICAgICAgfV1cbiAgICAgIH07XG5cbiAgICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcbiAgICAgICRzY29wZS5icmVhZGNydW1iQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZVByb2plY3RCcmVhZGNydW1icygkc2NvcGUuYnVpbGRDb25maWdJZCk7XG4gICAgICAkc2NvcGUuc3ViVGFiQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZVByb2plY3RTdWJOYXZCYXJzKCRzY29wZS5idWlsZENvbmZpZ0lkLCBudWxsLCAkc2NvcGUpO1xuXG4gICAgICAkc2NvcGUuJG9uKCdrdWJlcm5ldGVzTW9kZWxVcGRhdGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICB1cGRhdGVEYXRhKCk7XG4gICAgICB9KTtcblxuICAgICAgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcbiAgICAgICAgaWYgKCRzY29wZS5tb2RlbCkge1xuICAgICAgICAgIHZhciBidWlsZHMgPSAkc2NvcGUubW9kZWwuYnVpbGRzO1xuICAgICAgICAgIHZhciBidWlsZENvbmZpZ0lkID0gJHNjb3BlLmJ1aWxkQ29uZmlnSWQ7XG5cbiAgICAgICAgICBlbnJpY2hCdWlsZHMoYnVpbGRzKTtcbiAgICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XG5cbiAgICAgICAgICBpZiAoYnVpbGRDb25maWdJZCkge1xuICAgICAgICAgICAgJHNjb3BlLmJ1aWxkQ29uZmlnID0gJHNjb3BlLm1vZGVsLmdldEJ1aWxkQ29uZmlnKGJ1aWxkQ29uZmlnSWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB1cGRhdGVEYXRhKCk7XG5cblxuICAgICAgLypcbiAgICAgICRzY29wZS4ka2VlcFBvbGxpbmcgPSAoKSA9PiBrZWVwUG9sbGluZ01vZGVsO1xuICAgICAgJHNjb3BlLmZldGNoID0gUG9sbEhlbHBlcnMuc2V0dXBQb2xsaW5nKCRzY29wZSwgKG5leHQ6KCkgPT4gdm9pZCkgPT4ge1xuICAgICAgICB2YXIgdXJsID0gYnVpbGRzUmVzdFVSTCgpO1xuICAgICAgICAkaHR0cC5nZXQodXJsKS5cbiAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcImdvdCBkYXRhIFwiICsgYW5ndWxhci50b0pzb24oZGF0YSwgdHJ1ZSkpO1xuICAgICAgICAgICAgICAkc2NvcGUuYnVpbGRzID0gZW5yaWNoQnVpbGRzKGRhdGEuaXRlbXMpO1xuICAgICAgICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgaWYgKCRzY29wZS5tb2RlbCkge1xuICAgICAgICAgICAgICAgICRzY29wZS5idWlsZENvbmZpZyA9ICRzY29wZS5tb2RlbC5nZXRCdWlsZENvbmZpZygkc2NvcGUuYnVpbGRDb25maWdJZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgfSkuXG4gICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xuICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICAkc2NvcGUuZmV0Y2goKTtcbiAgICAgICovXG4gICAgfV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblxuICAvLyBjb250cm9sbGVyIGZvciBjb25uZWN0aW5nIHRvIGEgcmVtb3RlIGNvbnRhaW5lciB2aWEgam9sb2tpYVxuICBleHBvcnQgdmFyIENvbm5lY3RDb250cm9sbGVyID0gY29udHJvbGxlcihcIkNvbm5lY3RDb250cm9sbGVyXCIsIFtcbiAgICBcIiRzY29wZVwiLCBcImxvY2FsU3RvcmFnZVwiLCBcInVzZXJEZXRhaWxzXCIsIFwiQ29ubmVjdERpYWxvZ1NlcnZpY2VcIiwgXCIkYnJvd3NlclwiLFxuICAgICgkc2NvcGUsIGxvY2FsU3RvcmFnZSwgdXNlckRldGFpbHMsIENvbm5lY3REaWFsb2dTZXJ2aWNlLCAkYnJvd3NlcjpuZy5JQnJvd3NlclNlcnZpY2UpID0+IHtcblxuICAgICAgJHNjb3BlLmRvQ29ubmVjdCA9IChlbnRpdHkpID0+IHtcbiAgICAgICAgdmFyIGNvbm5lY3RVcmw6YW55ID0gbmV3IFVSSSgpLnBhdGgoVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksICcvamF2YS9pbmRleC5odG1sJykpO1xuICAgICAgICB2YXIgcmV0dXJuVG8gPSBuZXcgVVJJKCkudG9TdHJpbmcoKTtcbiAgICAgICAgdmFyIHRpdGxlID0gZW50aXR5Lm1ldGFkYXRhLm5hbWUgfHwgJ1VudGl0bGVkIENvbnRhaW5lcic7XG4gICAgICAgIHZhciB0b2tlbiA9IHVzZXJEZXRhaWxzLnRva2VuIHx8ICcnO1xuICAgICAgICBjb25uZWN0VXJsLmhhc2godG9rZW4pLnF1ZXJ5KHtcbiAgICAgICAgICBqb2xva2lhVXJsOiBlbnRpdHkuJGpvbG9raWFVcmwsXG4gICAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICAgIHJldHVyblRvOiByZXR1cm5Ub1xuICAgICAgICB9KTtcbiAgICAgICAgbG9nLmRlYnVnKFwiQ29ubmVjdCBVUkk6IFwiLCBjb25uZWN0VXJsLnRvU3RyaW5nKCkpO1xuICAgICAgICB3aW5kb3cub3Blbihjb25uZWN0VXJsLnRvU3RyaW5nKCkpO1xuICAgICAgfTtcblxuICAgIH1dKTtcbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxuXG5tb2R1bGUgS3ViZXJuZXRlc3tcbiAgIGV4cG9ydCBjbGFzcyBkYXRhSW5mb01vZGVsU2VydmljZXtcbiAgICAgIHB1YmxpYyBzZXJ2ZXJkYXRhID0ge307XG4gICAgICBwdWJsaWMgcHJvbWlzZW9iamVjdCA9IHt9O1xuICAgICAgcHVibGljIGxvY2FsZGF0YSA9IHt9O1xuICAgICAgcHVibGljIHNlbGVjdGVkbm9kZXMgPSBbXTtcbiAgICAgIHB1YmxpYyByZXN1bWFibGVqcyA9IFtdO1xuICAgICAgcHVibGljIHNlbGVjdGVkaXRlbXMgPSBbXTtcbiAgICAgIHB1YmxpYyBzZXJ2ZXJpdGVtcyA9IFtdO1xuICAgICAgcHVibGljIHVwbG9hZHByb2Nlc3MgPXt9O1xuICAgICAgcHVibGljIHVwbG9hZGVkU3RhdHVzID0gXCJcIjtcblxuICAgICAgcHVibGljIGdldCB1cGxvYWRQcm9jZXNzKCk6T2JqZWN0IHtcbiAgICAgICAgIHJldHVybiB0aGlzLnVwbG9hZHByb2Nlc3NcbiAgICAgIH1cblxuICAgICAgcHVibGljIHNldCB1cGxvYWRQcm9jZXNzKHVwbG9hZFByb2Nlc3M6T2JqZWN0KXtcbiAgICAgICAgIHRoaXMudXBsb2FkcHJvY2VzcyA9IHVwbG9hZFByb2Nlc3M7XG4gICAgICB9XG5cbiAgICAgIHB1YmxpYyBmb2xkZXJMaXN0ID0ge1xuICAgICAgICAgIGxlbmd0aDowXG4gICAgICB9O1xuXG4gICAgICBwdWJsaWMgZ2V0IHNlcnZlckl0ZW1zKCk6QXJyYXk8YW55PiB7XG4gICAgICAgICByZXR1cm4gdGhpcy5zZXJ2ZXJpdGVtcztcbiAgICAgIH1cblxuICAgICAgcHVibGljIHNldCBzZXJ2ZXJJdGVtcyhzZXJ2ZXJJdGVtczogQXJyYXk8YW55Pil7XG4gICAgICAgICB0aGlzLnNlcnZlcml0ZW1zID0gc2VydmVySXRlbXM7XG4gICAgICB9XG5cbiAgICAgIHB1YmxpYyBnZXQgcmVzdW1hYmxlSnMoKTpBcnJheTxhbnk+IHtcbiAgICAgICAgIHJldHVybiB0aGlzLnJlc3VtYWJsZUpzO1xuICAgICAgfVxuXG4gICAgICBwdWJsaWMgc2V0IHJlc3VtYWJsZUpzKHJlc3VtYWJsZUpzOiBBcnJheTxhbnk+KXtcbiAgICAgICAgIHRoaXMucmVzdW1hYmxlanMgPSByZXN1bWFibGVKcztcbiAgICAgIH1cblxuICAgICAgcHVibGljIGdldCBzZWxlY3RlZEl0ZW1zKCk6QXJyYXk8YW55PiB7XG4gICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZGl0ZW1zO1xuICAgICAgfVxuXG4gICAgICBwdWJsaWMgc2V0IHNlbGVjdGVkSXRlbXMoc2VsZWN0ZWRJdGVtczogQXJyYXk8YW55Pil7XG4gICAgICAgICB0aGlzLnNlbGVjdGVkaXRlbXMgPSBzZWxlY3RlZEl0ZW1zO1xuICAgICAgfVxuXG4gICAgICBwdWJsaWMgZ2V0IHNlbGVjdGVkTm9kZXMoKTpBcnJheTxhbnk+IHtcbiAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkbm9kZXM7XG4gICAgICB9XG5cbiAgICAgIHB1YmxpYyBzZXQgc2VsZWN0ZWROb2RlcyhzZWxlY3RlZE5vZGVzOiBBcnJheTxhbnk+KXtcbiAgICAgICAgIHRoaXMuc2VsZWN0ZWRub2RlcyA9IHNlbGVjdGVkTm9kZXM7XG4gICAgICB9XG5cbiAgICAgIHB1YmxpYyBpc0NvbnRhaW5zTm9kZXMobm9kZTogT2JqZWN0KXtcbiAgICAgICAgIGZvcih2YXIgaXRlbSBpbiB0aGlzLnNlbGVjdGVkbm9kZXMpe1xuICAgICAgICAgICAgaWYodGhpcy5zZWxlY3RlZG5vZGVzW2l0ZW1dLmlkID09PSBub2RlLmlkKVxuICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICB9XG4gICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHB1YmxpYyBmaW5kTm9kZXMobm9kZTogYW55KSB7XG4gICAgICAgICB2YXIgaWQgPSBcIi0xXCI7XG4gICAgICAgICBpZih0eXBlb2Yobm9kZSkgPT09IFwib2JqZWN0XCIgKXtcbiAgICAgICAgICAgIGlkID0gbm9kZS5pZDtcbiAgICAgICAgIH1lbHNlIGlmKHR5cGVvZihub2RlKSA9PT0gXCJudW1iZXJcIil7XG4gICAgICAgICAgICBpZCA9bm9kZS50b1N0cmluZygpO1xuICAgICAgICAgfWVsc2UgaWYodHlwZW9mKG5vZGUpID09PSBcInN0cmluZ1wiKXtcbiAgICAgICAgICAgIGlkID0gbm9kZTtcbiAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgcmV0dXJuIFwiLTFcIjtcbiAgICAgICAgIH1cblxuICAgICAgICAgZm9yKHZhciBpdGVtIGluIHRoaXMuc2VsZWN0ZWRub2Rlcyl7XG4gICAgICAgICAgICBpZih0aGlzLnNlbGVjdGVkbm9kZXNbaXRlbV0uaWQgPT09IGlkKVxuICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgICB9XG4gICAgICAgICByZXR1cm4gXCItMVwiO1xuICAgICAgfVxuXG4gICAgICBwdWJsaWMgZmluZEl0ZW1JbmRleChpdGVtOiBhbnkpe1xuICAgICAgICAgdmFyIGlkID0gLTE7XG4gICAgICAgICBpZih0eXBlb2YoaXRlbSkgPT09IFwib2JqZWN0XCIgKXtcbiAgICAgICAgICAgIGlkID0gaXRlbS5pZDtcbiAgICAgICAgIH1lbHNlIGlmKHR5cGVvZihpdGVtKSA9PT0gXCJudW1iZXJcIil7XG4gICAgICAgICAgICBpZCA9aXRlbS50b1N0cmluZygpO1xuICAgICAgICAgfWVsc2UgaWYodHlwZW9mKGl0ZW0pID09PSBcInN0cmluZ1wiKXtcbiAgICAgICAgICAgIGlkID0gaXRlbTtcbiAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgfVxuXG4gICAgICAgICBmb3IodmFyIGl0IGluIHRoaXMuc2VsZWN0ZWRpdGVtcyl7XG4gICAgICAgICAgICBpZih0aGlzLnNlbGVjdGVkaXRlbXNbaXRdLmlkID09PSBpZClcbiAgICAgICAgICAgICAgIHJldHVybiBpdDtcbiAgICAgICAgIH1cbiAgICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cblxuICAgICAgcHVibGljIGNyZWF0ZUZvbGRlckxpc3QoZmlsZXM6IE9iamVjdCAscm9vdFBhdGg6IHN0cmluZyl7XG4gICAgICAgICBmb3IodmFyIGk9MDsgaTwgZmlsZXMubGVuZ3RoOyBpKyspe1xuICAgICAgICAgICAgdmFyIHJlbGF0aXZlUGF0aCA9ICBmaWxlc1tpXS53ZWJraXRSZWxhdGl2ZVBhdGgucmVwbGFjZShSZWdFeHAoXCJeXCIrcm9vdFBhdGgrXCIvXCIpLFwiXCIpO1xuICAgICAgICAgICAgdmFyIHBhdGhzPXJlbGF0aXZlUGF0aC5zcGxpdChcIi9cIik7XG4gICAgICAgICAgICBpZighdGhpcy5mb2xkZXJMaXN0Lmhhc093blByb3BlcnR5KHBhdGhzWzBdKSl7XG4gICAgICAgICAgICAgICB0aGlzLmZvbGRlckxpc3RbcGF0aHNbMF1dPXtcbiAgICAgICAgICAgICAgICAgbGVuZ3RoOjBcbiAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHRoaXMuZm9sZGVyTGlzdC5sZW5ndGgrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBPYmogPSB0aGlzLmZvbGRlckxpc3RbcGF0aHNbMF1dO1xuICAgICAgICAgICAgT2JqW09iai5sZW5ndGhdID0gZmlsZXNbaV07XG4gICAgICAgICAgICBPYmoubGVuZ3RoKys7XG4gICAgICAgICAgICB0aGlzLmZvbGRlckxpc3RbcGF0aHNbMF1dID0gT2JqO1xuICAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwdWJsaWMgdXBkYXRlTm9kZUJ5SWQobm9kZUlkLGtleSx2YWx1ZSl7XG4gICAgICAgICBmb3IodmFyIGl0ZW0gaW4gdGhpcy5zZWxlY3RlZG5vZGVzKXtcbiAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5zZWxlY3RlZG5vZGVzW2l0ZW1dO1xuICAgICAgICAgICAgaWYobm9kZS5pZCA9PT0gbm9kZUlkKXtcbiAgICAgICAgICAgICAgIG5vZGVba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHB1YmxpYyBnZXQgc2VydmVyRGF0YSgpOk9iamVjdCB7XG4gICAgICAgICByZXR1cm4gdGhpcy5zZXJ2ZXJEYXRhO1xuICAgICAgfVxuXG4gICAgICBwdWJsaWMgc2V0IHNlcnZlckRhdGEoc2VydmVyRGF0YTpPYmplY3Qpe1xuICAgICAgICAgdGhpcy5zZXJ2ZXJkYXRhPXNlcnZlckRhdGE7XG4gICAgICB9XG5cbiAgICAgIHB1YmxpYyBnZXQgcHJvbWlzZU9iamVjdCgpOk9iamVjdCB7XG4gICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlb2JqZWN0O1xuICAgICAgfVxuXG4gICAgICBwdWJsaWMgc2V0IHByb21pc2UocHJvbWlzZU9iamVjdDpPYmplY3Qpe1xuICAgICAgICAgdGhpcy5wcm9taXNlb2JqZWN0ID0gcHJvbWlzZU9iamVjdDtcbiAgICAgIH1cblxuICAgICAgcHVibGljIGdldCBsb2NhbERhdGEoKTpPYmplY3Qge1xuICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxkYXRhO1xuICAgICAgfVxuXG4gICAgICBwdWJsaWMgc2V0IGxvY2FsRGF0YShsb2NhbERhdGE6T2JqZWN0KXtcbiAgICAgICAgIHRoaXMubG9jYWxkYXRhID0gbG9jYWxEYXRhO1xuICAgICAgfVxuXG4gICAgICBwdWJsaWMgdXBkYXRhRGF0YU1vZGVsKCl7XG4gICAgICAgICB0aGlzLnByb21pc2VvYmplY3Quc3VjY2VzcyhmdW5jdGlvbihkYXRhLGhlYWRlcixjb25maWcsc3RhdHVzKXtcbiAgICAgICAgICAgIHRoaXMuc2VydmVyZGF0YSA9ZGF0YTtcbiAgICAgICAgIH0pO1xuXG4gICAgICAgICB0aGlzLnByb21pc2VvYmplY3QuZXJyb3IoZnVuY3Rpb24oZGF0YSxzdGF0dXMsaGVkYWVycyxjb25maWcpe1xuICAgICAgICAgICAgdGhpcy5zZXJ2ZXJkYXRhID0ge307XG4gICAgICAgICB9KTtcbiAgICAgIH1cbiAgIH1cbiAgX21vZHVsZS5mYWN0b3J5KCdEYXRhSW5mb01vZGVsJywgWyckaHR0cCcsICgkaHR0cCkgPT4ge1xuICAgICAgdmFyICRzY29wZSA9bmV3IGRhdGFJbmZvTW9kZWxTZXJ2aWNlKCk7XG5cbiAgICAgICRzY29wZS5wcm9taXNlb2JqZWN0PSRodHRwKHtcbiAgICAgICAgIHVybDonL3htbGZvcm1zZXJ2ZXInLFxuICAgICAgICAgbWV0aG9kOidQT1NUJ1xuICAgICAgfSk7XG5cbiAgICAgIHVwZGF0ZURhdGFGcm9tU2VydmVyKCRzY29wZS5zZXJ2ZXJkYXRhLCAoZGF0YSxoZWFkZXIsY29uZmlnLHN0YXR1cykgPT4ge1xuICAgICAgICAgJHNjb3BlLnNlcnZlcmRhdGEgPSBkYXRhO1xuICAgICAgfSk7XG5cbiAgICAgIGZ1bmN0aW9uIHVwZGF0ZURhdGFGcm9tU2VydmVyKGRhdGEsY2FsbGJhY2spe1xuICAgICAgICAgJGh0dHAoe1xuICAgICAgICAgICAgdXJsOicveG1sZm9ybXNlcnZlcicsXG4gICAgICAgICAgICBtZXRob2Q6J1BPU1QnXG4gICAgICAgICB9KS5zdWNjZXNzKGZ1bmN0aW9uKGRhdGEsaGVhZGVyLGNvbmZpZyxzdGF0dXMpe1xuICAgICAgICAgICBpZihkYXRhKVxuICAgICAgICAgICAgIGNhbGxiYWNrKGRhdGEsaGVhZGVyLGNvbmZpZyxzdGF0dXMpO1xuICAgICAgICAgfSkuZXJyb3IoZnVuY3Rpb24oZGF0YSxoZWFkZXIsY29uZmlnLHN0YXR1cyl7XG4gICAgICAgICAgICAgY29uc29sZS5sb2coXCJlcnJvclwiKTtcbiAgICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIHJldHVybiAkc2NvcGU7XG4gIH1dKTtcbn0iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIGV4cG9ydCB2YXIgRGVwbG95bWVudENvbmZpZ0NvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiRGVwbG95bWVudENvbmZpZ0NvbnRyb2xsZXJcIixcbiAgICBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCJLdWJlcm5ldGVzU2NoZW1hXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLFxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLFxuICAgICAgICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XG5cbiAgICAgICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XG4gICAgICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcbiAgICAgICAgJHNjb3BlLmlkID0gJHJvdXRlUGFyYW1zW1wiaWRcIl07XG4gICAgICAgICRzY29wZS5zY2hlbWEgPSBLdWJlcm5ldGVzU2NoZW1hO1xuICAgICAgICAkc2NvcGUuY29uZmlnID0gS3ViZXJuZXRlc1NjaGVtYS5kZWZpbml0aW9ucy5vc19kZXBsb3lfRGVwbG95bWVudENvbmZpZztcblxuICAgICAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XG5cbiAgICAgICAgJHNjb3BlLiRvbigna3ViZXJuZXRlc01vZGVsVXBkYXRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB1cGRhdGVEYXRhKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgICRzY29wZS4kb24oJyRyb3V0ZVVwZGF0ZScsICgkZXZlbnQpID0+IHtcbiAgICAgICAgICB1cGRhdGVEYXRhKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHVwZGF0ZURhdGEoKTtcblxuICAgICAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xuICAgICAgICAgICRzY29wZS5pdGVtID0gbnVsbDtcbiAgICAgICAgICBpZiAoJHNjb3BlLmlkKSB7XG4gICAgICAgICAgICB2YXIgdXJsID0gZGVwbG95bWVudENvbmZpZ1Jlc3RVcmwoJHNjb3BlLmlkKTtcbiAgICAgICAgICAgICRodHRwLmdldCh1cmwpLlxuICAgICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAkc2NvcGUuZW50aXR5ID0gZGF0YTtcbiAgICAgICAgICAgICAgICAgIGVucmljaERlcGxveW1lbnRDb25maWcoZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICRzY29wZS5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgICAgICAgICB9KS5cbiAgICAgICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRzY29wZS5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XSk7XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIGV4cG9ydCB2YXIgRGVwbG95bWVudENvbmZpZ3NDb250cm9sbGVyID0gY29udHJvbGxlcihcIkRlcGxveW1lbnRDb25maWdzQ29udHJvbGxlclwiLCBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCIkZGlhbG9nXCIsIFwiJHdpbmRvd1wiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGxvY2F0aW9uXCIsIFwibG9jYWxTdG9yYWdlXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcbiAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsICRkaWFsb2csICR3aW5kb3csICR0ZW1wbGF0ZUNhY2hlLCAkcm91dGVQYXJhbXMsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCBsb2NhbFN0b3JhZ2UsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xuXG4gICAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcbiAgICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICB9KTtcbiAgICAgICRzY29wZS5sYWJlbENsYXNzID0gY29udGFpbmVyTGFiZWxDbGFzcztcblxuICAgICAgJHNjb3BlLnRhYmxlQ29uZmlnID0ge1xuICAgICAgICBkYXRhOiAnZGVwbG95bWVudENvbmZpZ3MnLFxuICAgICAgICBzaG93U2VsZWN0aW9uQ2hlY2tib3g6IHRydWUsXG4gICAgICAgIGVuYWJsZVJvd0NsaWNrU2VsZWN0aW9uOiBmYWxzZSxcbiAgICAgICAgbXVsdGlTZWxlY3Q6IHRydWUsXG4gICAgICAgIHNlbGVjdGVkSXRlbXM6IFtdLFxuICAgICAgICBmaWx0ZXJPcHRpb25zOiB7XG4gICAgICAgICAgZmlsdGVyVGV4dDogJGxvY2F0aW9uLnNlYXJjaCgpW1wicVwiXSB8fCAnJ1xuICAgICAgICB9LFxuICAgICAgICBjb2x1bW5EZWZzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmllbGQ6ICdtZXRhZGF0YS5uYW1lJyxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTmFtZScsXG4gICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImRlcGxveW1lbnRDb25maWdMaW5rVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmllbGQ6ICdtZXRhZGF0YS5uYW1lc3BhY2UnLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdOYW1lc3BhY2UnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJyRpbWFnZUNoYW5nZVBhcmFtcy5hdXRvbWF0aWMnLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdBdXRvbWF0aWMnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJyRpbWFnZUNoYW5nZVBhcmFtcy4kY29udGFpbmVyTmFtZXMnLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdDb250YWluZXIgTmFtZXMnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJyRpbWFnZUNoYW5nZVBhcmFtcy5mcm9tLm5hbWUnLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdGcm9tIGltYWdlJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmllbGQ6ICckaW1hZ2VDaGFuZ2VQYXJhbXMudGFnJyxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnVGFnJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmllbGQ6ICd0ZW1wbGF0ZS5jb250cm9sbGVyVGVtcGxhdGUucG9kVGVtcGxhdGUudGFncycsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ0xhYmVscycsXG4gICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImRlcGxveW1lbnRDb25maWdMYWJlbFRlbXBsYXRlLmh0bWxcIilcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH07XG5cbiAgICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcblxuICAgICAgJHNjb3BlLmRlbGV0ZVByb21wdCA9IChzZWxlY3RlZCkgPT4ge1xuICAgICAgICBVSS5tdWx0aUl0ZW1Db25maXJtQWN0aW9uRGlhbG9nKDxVSS5NdWx0aUl0ZW1Db25maXJtQWN0aW9uT3B0aW9ucz57XG4gICAgICAgICAgY29sbGVjdGlvbjogc2VsZWN0ZWQsXG4gICAgICAgICAgaW5kZXg6ICckbmFtZScsXG4gICAgICAgICAgb25DbG9zZTogKHJlc3VsdDpib29sZWFuKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgIGZ1bmN0aW9uIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBuZXh0KSB7XG4gICAgICAgICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZUVudGl0eShuZXh0LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB1cGRhdGVEYXRhKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGl0bGU6ICdEZWxldGUgRGVwbG95bWVudD8nLFxuICAgICAgICAgIGFjdGlvbjogJ1RoZSBmb2xsb3dpbmcgRGVwbG95bWVudHMgd2lsbCBiZSBkZWxldGVkOicsXG4gICAgICAgICAgb2tUZXh0OiAnRGVsZXRlJyxcbiAgICAgICAgICBva0NsYXNzOiAnYnRuLWRhbmdlcicsXG4gICAgICAgICAgY3VzdG9tOiBcIlRoaXMgb3BlcmF0aW9uIGlzIHBlcm1hbmVudCBvbmNlIGNvbXBsZXRlZCFcIixcbiAgICAgICAgICBjdXN0b21DbGFzczogXCJhbGVydCBhbGVydC13YXJuaW5nXCJcbiAgICAgICAgfSkub3BlbigpO1xuICAgICAgfTtcblxuICAgICAgZnVuY3Rpb24gZGVsZXRlRW50aXR5KHNlbGVjdGlvbiwgbmV4dENhbGxiYWNrKSB7XG4gICAgICAgIHZhciBuYW1lID0gKHNlbGVjdGlvbiB8fCB7fSkuJG5hbWU7XG4gICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJBYm91dCB0byBkZWxldGUgZGVwbG95bWVudCBjb25maWc6IFwiICsgbmFtZSk7XG4gICAgICAgICAgdmFyIHVybCA9IGRlcGxveW1lbnRDb25maWdSZXN0VXJsKG5hbWUpO1xuICAgICAgICAgICRodHRwLmRlbGV0ZSh1cmwpLlxuICAgICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgICAgbmV4dENhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KS5cbiAgICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBkZWxldGUgZGVwbG95bWVudCBjb25maWcgb24gXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIndhcm5pbmc6IG5vIG5hbWUgZm9yIHNlbGVjdGlvbjogXCIgKyBhbmd1bGFyLnRvSnNvbihzZWxlY3Rpb24pKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xuICAgICAgICB2YXIgdXJsID0gZGVwbG95bWVudENvbmZpZ3NSZXN0VVJMKCk7XG4gICAgICAgICRodHRwLmdldCh1cmwpLlxuICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiZ290IGRhdGEgXCIgKyBhbmd1bGFyLnRvSnNvbihkYXRhLCB0cnVlKSk7XG4gICAgICAgICAgICAgICRzY29wZS5kZXBsb3ltZW50Q29uZmlncyA9IGVucmljaERlcGxveW1lbnRDb25maWdzKGRhdGEuaXRlbXMpO1xuICAgICAgICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkuXG4gICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGVEYXRhKCk7XG4gICAgfV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblxuICBleHBvcnQgdmFyIEV2ZW50c0NvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiRXZlbnRzQ29udHJvbGxlclwiLFxuICAgIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTZXJ2aWNlc1wiLCBcIkt1YmVybmV0ZXNQb2RzXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLFxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOiBLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTZXJ2aWNlczpuZy5yZXNvdXJjZS5JUmVzb3VyY2VDbGFzczxhbnk+LCBLdWJlcm5ldGVzUG9kczpuZy5yZXNvdXJjZS5JUmVzb3VyY2VDbGFzczxhbnk+LCBLdWJlcm5ldGVzU3RhdGUsXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcblxuICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xuICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcblxuICAgIENvbnRyb2xsZXJIZWxwZXJzLmJpbmRNb2RlbFRvU2VhcmNoUGFyYW0oJHNjb3BlLCAkbG9jYXRpb24sICdtb2RlJywgJ21vZGUnLCAnbGlzdCcpO1xuXG4gICAgJHNjb3BlLnRhYmxlQ29uZmlnID0ge1xuICAgICAgZGF0YTogJ21vZGVsLmV2ZW50cycsXG4gICAgICBzaG93U2VsZWN0aW9uQ2hlY2tib3g6IHRydWUsXG4gICAgICBlbmFibGVSb3dDbGlja1NlbGVjdGlvbjogZmFsc2UsXG4gICAgICBtdWx0aVNlbGVjdDogdHJ1ZSxcbiAgICAgIHNlbGVjdGVkSXRlbXM6IFtdLFxuICAgICAgZmlsdGVyT3B0aW9uczoge1xuICAgICAgICBmaWx0ZXJUZXh0OiAkbG9jYXRpb24uc2VhcmNoKClbXCJxXCJdIHx8ICcnXG4gICAgICB9LFxuICAgICAgY29sdW1uRGVmczogW1xuICAgICAgICB7IGZpZWxkOiAnJGZpcnN0VGltZXN0YW1wJyxcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ0ZpcnN0IFNlZW4nLFxuICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiZmlyc3RUaW1lc3RhbXBUZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgIH0sXG4gICAgICAgIHsgZmllbGQ6ICckbGFzdFRpbWVzdGFtcCcsXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdMYXN0IFNlZW4nLFxuICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwibGFzdFRpbWVzdGFtcFRlbXBsYXRlLmh0bWxcIilcbiAgICAgICAgfSxcbiAgICAgICAgeyBmaWVsZDogJ2NvdW50JyxcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ0NvdW50J1xuICAgICAgICB9LFxuICAgICAgICB7IGZpZWxkOiAnaW52b2x2ZWRPYmplY3QubmFtZScsXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdOYW1lJyxcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImV2ZW50TmFtZVRlbXBsYXRlLmh0bWxcIilcbiAgICAgICAgfSxcbiAgICAgICAgeyBmaWVsZDogJ2ludm9sdmVkT2JqZWN0LmtpbmQnLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnS2luZCcsXG4gICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJldmVudEtpbmRUZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgIH0sXG4gICAgICAgIHsgZmllbGQ6ICdpbnZvbHZlZE9iamVjdC5maWVsZFBhdGgnLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnU3ViamVjdCdcbiAgICAgICAgfSxcbiAgICAgICAgeyBmaWVsZDogJ3JlYXNvbicsXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdSZWFzb24nXG4gICAgICAgIH0sXG4gICAgICAgIHsgZmllbGQ6ICdzb3VyY2UnLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnU291cmNlJyxcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImV2ZW50U291cmNlVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICB9LFxuICAgICAgICB7IGZpZWxkOiAnbWVzc2FnZScsXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdNZXNzYWdlJ1xuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcblxuICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcbiAgfV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc01vZGVsLnRzXCIvPlxuXG5tb2R1bGUgS3ViZXJuZXRlcyB7XG5cbiAgZXhwb3J0IHZhciBIb3N0Q29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJIb3N0Q29udHJvbGxlclwiLFxuICAgIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcbiAgICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDpLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSxcbiAgICAgICAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xuXG4gICAgICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xuICAgICAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XG4gICAgICAgICRzY29wZS5yYXdNb2RlbCA9IG51bGw7XG5cbiAgICAgICAgJHNjb3BlLml0ZW1Db25maWcgPSB7XG4gICAgICAgICAgcHJvcGVydGllczoge31cbiAgICAgICAgfTtcblxuICAgICAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XG5cbiAgICAgICAgJHNjb3BlLiRvbigna3ViZXJuZXRlc01vZGVsVXBkYXRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB1cGRhdGVEYXRhKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgICRzY29wZS4kb24oJyRyb3V0ZVVwZGF0ZScsICgkZXZlbnQpID0+IHtcbiAgICAgICAgICB1cGRhdGVEYXRhKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgICRzY29wZS5mbGlwUmF3ID0gKCkgPT4ge1xuICAgICAgICAgICRzY29wZS5yYXdNb2RlID0gISRzY29wZS5yYXdNb2RlO1xuICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdXBkYXRlRGF0YSgpO1xuXG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZURhdGEoKSB7XG4gICAgICAgICAgJHNjb3BlLmlkID0gJHJvdXRlUGFyYW1zW1wiaWRcIl07XG4gICAgICAgICAgJHNjb3BlLml0ZW0gPSBudWxsO1xuICAgICAgICAgIGlmICgkc2NvcGUuaWQpIHtcbiAgICAgICAgICAgIHZhciB1cmwgPSBVcmxIZWxwZXJzLmpvaW4oS3ViZXJuZXRlc0FwaVVSTCwgXCJub2Rlc1wiLCAkc2NvcGUuaWQpO1xuICAgICAgICAgICAgJGh0dHAuZ2V0KHVybCkuXG4gICAgICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICRzY29wZS5pdGVtID0gZGF0YTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCRzY29wZS5pdGVtKSB7XG4gICAgICAgICAgICAgICAgICAkc2NvcGUucmF3TW9kZWwgPSB0b1Jhd1lhbWwoJHNjb3BlLml0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSkuXG4gICAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkc2NvcGUucmF3TW9kZWwgPSBudWxsO1xuICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1dKTtcbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcbiAgZXhwb3J0IHZhciBob3N0UG9ydHMgPVtdO1xuXG4gIC8qKlxuICAgKiBTb3J0cyB0aGUgdGhlIGlwIGZpZWxkXG4gICAqXG4gICAqIEBwYXJhbSBpcCB0aGUgaXAgc3VjaCBhcyAnMTAuMS4yLjEzJ1xuICAgKiBAcmV0dXJucyB7YW55fVxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIHNvcnRCeVBvZElwKGlwKSA6IGFueSB7XG4gICAgLy8gaSBndWVzcyB0aGVyZSBpcyBtYXliZSBuaWNlciB3YXlzIG9mIHNvcnQgdGhpcyB3aXRob3V0IHBhcnNpbmcgYW5kIHNsaWNpbmdcbiAgICB2YXIgcmVnZXggPSAvKFxcZHsxLDN9KVxcLihcXGR7MSwzfSlcXC4oXFxkezEsM30pXFwuKFxcZHsxLDN9KS87XG4gICAgdmFyIGdyb3VwcyA9IHJlZ2V4LmV4ZWMoaXApO1xuICAgIGlmIChhbmd1bGFyLmlzRGVmaW5lZChncm91cHMpKSB7XG4gICAgICB2YXIgZzEgPSAoXCIwMFwiICsgZ3JvdXBzWzFdKS5zbGljZSgtMyk7XG4gICAgICB2YXIgZzIgPSAoXCIwMFwiICsgZ3JvdXBzWzJdKS5zbGljZSgtMyk7XG4gICAgICB2YXIgZzMgPSAoXCIwMFwiICsgZ3JvdXBzWzNdKS5zbGljZSgtMyk7XG4gICAgICB2YXIgZzQgPSAoXCIwMFwiICsgZ3JvdXBzWzRdKS5zbGljZSgtMyk7XG4gICAgICB2YXIgYW5zd2VyID0gZzEgKyBnMiArIGczICsgZzQ7XG4gICAgICByZXR1cm4gYW5zd2VyO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gcmFtZG9tUG9ydCgpOiBudW1iZXJ7XG4gICAgIHZhciBob3N0UG9ydD1NYXRoLmZsb29yKDMwMDAwK01hdGgucmFuZG9tKCkqKDY1NTM1LTMwMDAwKSk7XG4gICAgIHdoaWxlKGhvc3RQb3J0cy5pbmRleE9mKGhvc3RQb3J0KSA9PT0gMCl7XG4gICAgICAgIGhvc3RQb3J0ID0gTWF0aC5mbG9vcigzMDAwMCtNYXRoLnJhbmRvbSgpKig2NTUzNS0zMDAwMCkpO1xuICAgICB9XG4gICAgIGhvc3RQb3J0cy5wdXNoKGhvc3RQb3J0KTtcbiAgICAgcmV0dXJuIGhvc3RQb3J0XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZ2V0UmFuZG9tU3RyaW5nKGxlbiA6IG51bWJlcikgOiBzdHJpbmd7XG4gICAgICBsZW4gPSBsZW4gfHwgMzI7XG4gICAgICB2YXIgJGNoYXJzID0gJ2FiY2RlZmhpamttbnByc3R3eHl6JzsgLy8g6buY6K6k5Y675o6J5LqG5a655piT5re35reG55qE5a2X56ymb09MbCw5Z3EsVnYsVXUsSTFcbiAgICAgIHZhciBtYXhQb3MgPSAkY2hhcnMubGVuZ3RoO1xuICAgICAgdmFyIHB3ZCA9ICcnO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIHB3ZCArPSAkY2hhcnMuY2hhckF0KE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG1heFBvcykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHB3ZDtcbiAgfVxuXG4gIGV4cG9ydCBjbGFzcyByZXNvdXJjZVJDVGVtcGxhdGV7XG5cbiAgICAgcHVibGljIGltYWdlPVwiczE6bGF0ZXN0XCI7XG4gICAgIHB1YmxpYyBuYW1lcyA9IFtcImFkbWluXCIsXCJjZmd0b29sbG9nc1wiLFwiY2hlY2twb2ludHNcIixcImRpYWdcIixcImZsYXNoLXJlY292ZXJ5LWFyZWFcIixcIm9yYWRhdGFcIl07XG5cbiAgICAgcHVibGljIGNyZWF0ZVJDKE9iail7XG4gICAgICAgIHZhciBsYWJlbHMgPSB7XG4gICAgICAgICAgIFwic3R5bGVcIjogXCJvcmFjbGVcIixcbiAgICAgICAgICAgXCJzdGF0dXNcIjogXCIwXCJcbiAgICAgICAgfTtcbiAgICAgICAgZm9yKHZhciBpdGVtIGluIE9iai5sYWJlbHMpXG4gICAgICAgICAgIGxhYmVsc1tpdGVtXSA9IE9iai5sYWJlbHNbaXRlbV07XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgXCJhcGlWZXJzaW9uXCIgOiAgS3ViZXJuZXRlcy5kZWZhdWx0QXBpVmVyc2lvbixcbiAgICAgICAgICAgXCJraW5kXCIgOiBcIlJlcGxpY2F0aW9uQ29udHJvbGxlclwiLFxuICAgICAgICAgICBcIm1ldGFkYXRhXCIgOiB7XG4gICAgICAgICAgICAgIFwibmFtZVwiIDogT2JqLm5hbWUsXG4gICAgICAgICAgICAgIFwibGFiZWxzXCIgOiBsYWJlbHNcbiAgICAgICAgICAgfSxcbiAgICAgICAgICAgXCJzcGVjXCIgOiB7XG4gICAgICAgICAgICAgIHJlcGxpY2FzIDogT2JqLnJlcGxpY2FzIHx8IDEsXG4gICAgICAgICAgICAgIFwidGVtcGxhdGVcIiA6IHRoaXMuY3JlYXRlVGVtcGxhdGUoT2JqKVxuICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgfVxuXG4gICAgIHB1YmxpYyBjcmVhdGVWb2x1bWVNb3VudHMoKXtcbiAgICAgICAgdmFyIHZvbHVtZU1vdW50cyA9IFtdO1xuICAgICAgICBmb3IodmFyIGl0ZW0gaW4gdGhpcy5uYW1lcyl7XG4gICAgICAgICAgIGlmKHRoaXMubmFtZXNbaXRlbV0gPT09ICdmbGFzaC1yZWNvdmVyeS1hcmVhJylcbiAgICAgICAgICAgICAgdm9sdW1lTW91bnRzLnB1c2goe1xuICAgICAgICAgICAgICAgICBcIm5hbWVcIiA6IHRoaXMubmFtZXNbaXRlbV0sXG4gICAgICAgICAgICAgICAgIFwibW91bnRQYXRoXCIgOiBcIi9vcHQvb3JhY2xlL2FwcC9mbGFzaF9yZWNvdmVyeV9hcmVhXCJcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgdm9sdW1lTW91bnRzLnB1c2goe1xuICAgICAgICAgICAgICAgICBcIm5hbWVcIiA6IHRoaXMubmFtZXNbaXRlbV0sXG4gICAgICAgICAgICAgICAgIFwibW91bnRQYXRoXCIgOiBcIi9vcHQvb3JhY2xlL2FwcC9cIiArIHRoaXMubmFtZXNbaXRlbV1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZvbHVtZU1vdW50cztcbiAgICAgfVxuXG4gICAgIHB1YmxpYyBjcmVhdGVWb2x1bWVzKHJvb3RQYXRoIDpzdHJpbmcpe1xuICAgICAgICB2YXIgdm9sdW1lcyA9IFtdO1xuICAgICAgICBmb3IodmFyIGl0ZW0gaW4gdGhpcy5uYW1lcyl7XG4gICAgICAgICAgICBpZih0aGlzLm5hbWVzW2l0ZW1dID09PSAnZmxhc2gtcmVjb3ZlcnktYXJlYScpXG4gICAgICAgICAgICAgICB2b2x1bWVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgXCJuYW1lXCIgOiB0aGlzLm5hbWVzW2l0ZW1dLFxuICAgICAgICAgICAgICAgICAgXCJob3N0UGF0aFwiIDp7XG4gICAgICAgICAgICAgICAgICAgICAgXCJwYXRoXCIgOiByb290UGF0aCArIFwiZmxhc2hfcmVjb3ZlcnlfYXJlYVwiXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgIHZvbHVtZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICBcIm5hbWVcIiA6IHRoaXMubmFtZXNbaXRlbV0sXG4gICAgICAgICAgICAgICAgICBcImhvc3RQYXRoXCIgOntcbiAgICAgICAgICAgICAgICAgICAgICBcInBhdGhcIiA6IHJvb3RQYXRoICsgdGhpcy5uYW1lc1tpdGVtXVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZvbHVtZXM7XG4gICAgIH1cblxuICAgICBwdWJsaWMgY3JlYXRlQ29udGFpbmVycyhPYmope1xuICAgICAgICB2YXIgY29udGFpbmVycyA9IFtdO1xuICAgICAgICBjb250YWluZXJzLnB1c2goXG4gICAgICAgIHtcbiAgICAgICAgICAgXCJuYW1lXCIgOiBcIm9yYWNsZVwiLFxuICAgICAgICAgICBcImltYWdlXCI6IHRoaXMuaW1hZ2UsXG4gICAgICAgICAgIFwiaW1hZ2VQdWxsUG9saWN5XCI6IFwiSWZOb3RQcmVzZW50XCIsXG4gICAgICAgICAgIFwiY29tbWFuZFwiOltcIi9hc3NldHMvZW50cnlwb2ludC5zaFwiXSxcbiAgICAgICAgICAgXCJwb3J0c1wiOiBbXG4gICAgICAgICAgIHtcbiAgICAgICAgICAgICBcImNvbnRhaW5lclBvcnRcIjogMTUyMSxcbiAgICAgICAgICAgICBcImhvc3RQb3J0XCI6IE9iai5wb3J0IHx8IHJhbWRvbVBvcnQoKVxuICAgICAgICAgICB9XSxcbiAgICAgICAgICAgXCJ2b2x1bWVNb3VudHNcIiA6IHRoaXMuY3JlYXRlVm9sdW1lTW91bnRzKClcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjb250YWluZXJzXG4gICAgIH1cblxuICAgICBwdWJsaWMgY3JlYXRlVGVtcGxhdGUoT2JqKXtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFwibWV0YWRhdGFcIjpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgIC8vXCJuYW1lXCI6IE9iai5uYW1lLFxuICAgICAgICAgICAgICAgXCJsYWJlbHNcIjogT2JqLmxhYmVsc1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwic3BlY1wiIDoge1xuICAgICAgICAgICAgICAgIFwidGVybWluYXRpb25HcmFjZVBlcmlvZFNlY29uZHNcIiA6IDAsXG4gICAgICAgICAgICAgICAgXCJjb250YWluZXJzXCIgOiAgdGhpcy5jcmVhdGVDb250YWluZXJzKE9iaiksXG4gICAgICAgICAgICAgICAgXCJ2b2x1bWVzXCIgOiAgdGhpcy5jcmVhdGVWb2x1bWVzKE9iai5wYXRoKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgIH1cbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBmaW5kTGFiZWxWYWx1ZSh2YWx1ZTpzdHJpbmcsIGtleTogc3RyaW5nKTpzdHJpbmcge1xuICAgICB2YXIgdHJ1ZVZhbHVlID0gJyc7XG4gICAgIHN3aXRjaCh2YWx1ZSl7XG4gICAgICAgIGNhc2UgJzAxJzpcbiAgICAgICAgICAgdHJ1ZVZhbHVlID0gJ+i0ouaUvyc7XG4gICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICcwMic6XG4gICAgICAgICAgIHRydWVWYWx1ZSA9ICfnpL7kv50nO1xuICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnQSc6XG4gICAgICAgICAgIHRydWVWYWx1ZSA9ICfmibnmrKFBJztcbiAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0InOlxuICAgICAgICAgICB0cnVlVmFsdWUgPSAn5om55qyhQic7XG4gICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgaWYoa2V5ID09PSBcInZlcnNpb25cIil7XG4gICAgICAgICAgICAgICAgdmFyIHJlZz0gbmV3IFJlZ0V4cCgnXlswLTldJCcpLmV4ZWModmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmKHJlZylcbiAgICAgICAgICAgICAgICAgICB0cnVlVmFsdWUgPSAn54mI5pysJyArIHJlZ1swXTtcbiAgICAgICAgICAgICAgICBlbHNlIHRydWVWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRydWVWYWx1ZSA9IHZhbHVlO1xuICAgICB9XG4gICAgIHJldHVybiB0cnVlVmFsdWVcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBsYWJlbFRvQ2hpbmVzZShsYWJlbHMpe1xuICAgICB2YXIgYW5zd2VyID0ge307XG4gICAgIGFuZ3VsYXIuZm9yRWFjaChsYWJlbHMsKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgYW5zd2VyW2tleV0gPSBmaW5kTGFiZWxWYWx1ZSh2YWx1ZSwga2V5KTtcbiAgICAgfSk7XG4gICAgIHJldHVybiBhbnN3ZXJcbiAgfVxufSIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNNb2RlbC50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJ1dGlsSGVscGVycy50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIGV4cG9ydCB2YXIgSG9zdHNDb250cm9sbGVyID0gY29udHJvbGxlcihcIkhvc3RzQ29udHJvbGxlclwiLCBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzUG9kc1wiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIlNlcnZpY2VSZWdpc3RyeVwiLCBcIiRkaWFsb2dcIiwgXCIkd2luZG93XCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkbG9jYXRpb25cIiwgXCJsb2NhbFN0b3JhZ2VcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLFxuICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDogS3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzUG9kczpuZy5JUHJvbWlzZTxuZy5yZXNvdXJjZS5JUmVzb3VyY2VDbGFzczxhbnk+PiwgS3ViZXJuZXRlc1N0YXRlLCBTZXJ2aWNlUmVnaXN0cnksICRkaWFsb2csICR3aW5kb3csICR0ZW1wbGF0ZUNhY2hlLCAkcm91dGVQYXJhbXMsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCBsb2NhbFN0b3JhZ2UsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xuXG4gICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XG4gICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xuICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgIH0pO1xuXG4gICAgJHNjb3BlLnRhYmxlQ29uZmlnID0ge1xuICAgICAgZGF0YTogJ21vZGVsLmhvc3RzJyxcbiAgICAgIHNob3dTZWxlY3Rpb25DaGVja2JveDogZmFsc2UsXG4gICAgICBlbmFibGVSb3dDbGlja1NlbGVjdGlvbjogZmFsc2UsXG4gICAgICBtdWx0aVNlbGVjdDogZmFsc2UsXG4gICAgICBzZWxlY3RlZEl0ZW1zOiBbXSxcbiAgICAgIGZpbHRlck9wdGlvbnM6IHtcbiAgICAgICAgZmlsdGVyVGV4dDogJGxvY2F0aW9uLnNlYXJjaCgpW1wicVwiXSB8fCAnJ1xuICAgICAgfSxcbiAgICAgIGNvbHVtbkRlZnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpZWxkOiAnaWQnLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTmFtZScsXG4gICAgICAgICAgZGVmYXVsdFNvcnQ6IHRydWUsXG4gICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJpZFRlbXBsYXRlLmh0bWxcIilcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGZpZWxkOiAnaG9zdElQJyxcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ0lQJyxcbiAgICAgICAgICBjdXN0b21Tb3J0RmllbGQ6IChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgLy8gdXNlIGEgY3VzdG9tIHNvcnQgdG8gc29ydCBpcCBhZGRyZXNzXG4gICAgICAgICAgICByZXR1cm4gS3ViZXJuZXRlcy5zb3J0QnlQb2RJcChmaWVsZC5ob3N0SVApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgeyBmaWVsZDogJyRwb2RzTGluaycsXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdQb2RzJyxcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcInBvZENvdW50c0FuZExpbmtUZW1wbGF0ZS5odG1sXCIpLFxuICAgICAgICAgIGN1c3RvbVNvcnRGaWVsZDogKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAvLyBuZWVkIHRvIGNvbmNhdCBhbGwgdGhlIHBvZCBjb3VudGVyc1xuICAgICAgICAgICAgdmFyIHJlYWR5ID0gZmllbGQuJHBvZENvdW50ZXJzLnJlYWR5IHx8IDA7XG4gICAgICAgICAgICB2YXIgdmFsaWQgPSBmaWVsZC4kcG9kQ291bnRlcnMudmFsaWQgfHwgMDtcbiAgICAgICAgICAgIHZhciB3YWl0aW5nID0gZmllbGQuJHBvZENvdW50ZXJzLndhaXRpbmcgfHwgMDtcbiAgICAgICAgICAgIHZhciBlcnJvciA9IGZpZWxkLiRwb2RDb3VudGVycy5lcnJvciB8fCAwO1xuICAgICAgICAgICAgcmV0dXJuIHJlYWR5ICsgdmFsaWQgKyB3YWl0aW5nICsgZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcblxuICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcbiAgfV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblxuICBleHBvcnQgdmFyIEltYWdlUmVwb3NpdG9yaWVzQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJJbWFnZVJlcG9zaXRvcmllc0NvbnRyb2xsZXJcIiwgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiJGRpYWxvZ1wiLCBcIiR3aW5kb3dcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRsb2NhdGlvblwiLCBcImxvY2FsU3RvcmFnZVwiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXG4gICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCAkZGlhbG9nLCAkd2luZG93LCAkdGVtcGxhdGVDYWNoZSwgJHJvdXRlUGFyYW1zLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgbG9jYWxTdG9yYWdlLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcblxuICAgICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XG4gICAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XG4gICAgICAkc2NvcGUuJG9uKCdrdWJlcm5ldGVzTW9kZWxVcGRhdGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgfSk7XG5cbiAgICAgICRzY29wZS50YWJsZUNvbmZpZyA9IHtcbiAgICAgICAgZGF0YTogJ2ltYWdlUmVwb3NpdG9yaWVzJyxcbiAgICAgICAgc2hvd1NlbGVjdGlvbkNoZWNrYm94OiB0cnVlLFxuICAgICAgICBlbmFibGVSb3dDbGlja1NlbGVjdGlvbjogZmFsc2UsXG4gICAgICAgIG11bHRpU2VsZWN0OiB0cnVlLFxuICAgICAgICBzZWxlY3RlZEl0ZW1zOiBbXSxcbiAgICAgICAgZmlsdGVyT3B0aW9uczoge1xuICAgICAgICAgIGZpbHRlclRleHQ6ICRsb2NhdGlvbi5zZWFyY2goKVtcInFcIl0gfHwgJydcbiAgICAgICAgfSxcbiAgICAgICAgY29sdW1uRGVmczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpZWxkOiAnbWV0YWRhdGEubmFtZScsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ05hbWUnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ21ldGFkYXRhLm5hbWVzcGFjZScsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ05hbWVzcGFjZSdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpZWxkOiAnc3RhdHVzLmRvY2tlckltYWdlUmVwb3NpdG9yeScsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ0RvY2tlciBSZWdpc3RyeSdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpZWxkOiAndGFncycsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1RhZ3MnLFxuICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoJ2ltYWdlUmVnaXN0cnlMYWJlbFRlbXBsYXRlLmh0bWwnKVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfTtcblxuICAgICAgdmFyIGxhYmVsQ29sb3JzID0ge1xuICAgICAgICAncHJvZCc6ICdiYWNrZ3JvdW5kLWJsdWUnLFxuICAgICAgICAndmFsaWQnOiAnYmFja2dyb3VuZC1saWdodC1ncmVlbicsXG4gICAgICAgICd0ZXN0JzogJ2JhY2tncm91bmQtbGlnaHQtZ3JleSdcbiAgICAgIH07XG4gICAgICAkc2NvcGUubGFiZWxDbGFzcyA9IChsYWJlbFR5cGU6c3RyaW5nKSA9PiB7XG4gICAgICAgIGlmICghKGxhYmVsVHlwZSBpbiBsYWJlbENvbG9ycykpIHtcbiAgICAgICAgICByZXR1cm4gJ21vdXNlLXBvaW50ZXInO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgcmV0dXJuIGxhYmVsQ29sb3JzW2xhYmVsVHlwZV0gKyAnIG1vdXNlLXBvaW50ZXInO1xuICAgICAgfVxuXG4gICAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XG5cbiAgICAgICRzY29wZS5kZWxldGVQcm9tcHQgPSAoc2VsZWN0ZWQpID0+IHtcbiAgICAgICAgVUkubXVsdGlJdGVtQ29uZmlybUFjdGlvbkRpYWxvZyg8VUkuTXVsdGlJdGVtQ29uZmlybUFjdGlvbk9wdGlvbnM+e1xuICAgICAgICAgIGNvbGxlY3Rpb246IHNlbGVjdGVkLFxuICAgICAgICAgIGluZGV4OiAnJG5hbWUnLFxuICAgICAgICAgIG9uQ2xvc2U6IChyZXN1bHQ6Ym9vbGVhbikgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICBmdW5jdGlvbiBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgbmV4dCkge1xuICAgICAgICAgICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgICAgICAgICBkZWxldGVFbnRpdHkobmV4dCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdXBkYXRlRGF0YSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHRpdGxlOiAnRGVsZXRlIEltYWdlIFJlcG9zaXRvcnk/JyxcbiAgICAgICAgICBhY3Rpb246ICdUaGUgZm9sbG93aW5nIEltYWdlIFJlcG9zaXRvcmllcyB3aWxsIGJlIGRlbGV0ZWQ6JyxcbiAgICAgICAgICBva1RleHQ6ICdEZWxldGUnLFxuICAgICAgICAgIG9rQ2xhc3M6ICdidG4tZGFuZ2VyJyxcbiAgICAgICAgICBjdXN0b206IFwiVGhpcyBvcGVyYXRpb24gaXMgcGVybWFuZW50IG9uY2UgY29tcGxldGVkIVwiLFxuICAgICAgICAgIGN1c3RvbUNsYXNzOiBcImFsZXJ0IGFsZXJ0LXdhcm5pbmdcIlxuICAgICAgICB9KS5vcGVuKCk7XG4gICAgICB9O1xuXG4gICAgICBmdW5jdGlvbiBkZWxldGVFbnRpdHkoc2VsZWN0aW9uLCBuZXh0Q2FsbGJhY2spIHtcbiAgICAgICAgdmFyIG5hbWUgPSAoc2VsZWN0aW9uIHx8IHt9KS4kbmFtZTtcbiAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkFib3V0IHRvIGRlbGV0ZSBpbWFnZSByZXBvc2l0b3J5OiBcIiArIG5hbWUpO1xuICAgICAgICAgIHZhciB1cmwgPSBpbWFnZVJlcG9zaXRvcnlSZXN0VXJsKG5hbWUpO1xuICAgICAgICAgICRodHRwLmRlbGV0ZSh1cmwpLlxuICAgICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgICAgbmV4dENhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KS5cbiAgICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBkZWxldGUgaW1hZ2UgcmVwb3NpdG9yeSBvbiBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwid2FybmluZzogbm8gbmFtZSBmb3Igc2VsZWN0aW9uOiBcIiArIGFuZ3VsYXIudG9Kc29uKHNlbGVjdGlvbikpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHVwZGF0ZURhdGEoKSB7XG4gICAgICAgIHZhciB1cmwgPSBpbWFnZVJlcG9zaXRvcmllc1Jlc3RVUkwoKTtcbiAgICAgICAgJGh0dHAuZ2V0KHVybCkuXG4gICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJnb3QgZGF0YSBcIiArIGFuZ3VsYXIudG9Kc29uKGRhdGEsIHRydWUpKTtcbiAgICAgICAgICAgICAgJHNjb3BlLmltYWdlUmVwb3NpdG9yaWVzID0gZW5yaWNoSW1hZ2VSZXBvc2l0b3JpZXMoZGF0YS5pdGVtcyk7XG4gICAgICAgICAgICAgICRzY29wZS5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KS5cbiAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGxvYWQgXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZURhdGEoKTtcbiAgICB9XSk7XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG5tb2R1bGUgS3ViZXJuZXRlcyB7XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdFN1Yk5hdkJhcigkc2NvcGUsIHRhYk5hbWUsIG5ld1N1YlRhYkxhYmVsKSB7XG4gICAgdmFyIGZvdW5kVGFiID0gbnVsbDtcbiAgICBhbmd1bGFyLmZvckVhY2goJHNjb3BlLnN1YlRhYkNvbmZpZywgKHRhYikgPT4ge1xuICAgICAgaWYgKHRhYk5hbWUgPT09IHRhYi5sYWJlbCB8fCB0YWJOYW1lID09PSB0YWIuaWQpIHtcbiAgICAgICAgZm91bmRUYWIgPSB0YWI7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdmFyIGJyZWFkY3J1bWJDb25maWcgPSAkc2NvcGUuYnJlYWRjcnVtYkNvbmZpZztcbiAgICBpZiAoZm91bmRUYWIgJiYgYnJlYWRjcnVtYkNvbmZpZykge1xuICAgICAgYnJlYWRjcnVtYkNvbmZpZy5wdXNoKGZvdW5kVGFiKTtcbiAgICAgICRzY29wZS5zdWJUYWJDb25maWcgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogbmV3U3ViVGFiTGFiZWxcbiAgICAgICAgfVxuICAgICAgXTtcbiAgICB9XG5cbiAgfVxuXG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcbiBcbiAgZXhwb3J0IHZhciBzY2hlbWEgPSBcbiAge1xuICAgIFwiaWRcIjogXCJodHRwOi8vZmFicmljOC5pby9mYWJyaWM4L3YyL1NjaGVtYSNcIixcbiAgICBcIiRzY2hlbWFcIjogXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL3NjaGVtYSNcIixcbiAgICBcImRlZmluaXRpb25zXCI6IHtcbiAgICAgIFwiYXBpX1Jvb3RQYXRoc1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJwYXRoc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUm9vdFBhdGhzXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfQVdTRWxhc3RpY0Jsb2NrU3RvcmVWb2x1bWVTb3VyY2VcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiZnNUeXBlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImZpbGUgc3lzdGVtIHR5cGUgdG8gbW91bnRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXJ0aXRpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInBhcnRpdGlvbiBvbiB0aGUgZGlzayB0byBtb3VudCAoZS5nLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlYWRPbmx5XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJyZWFkLW9ubHkgaWYgdHJ1ZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInZvbHVtZUlEXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInVuaXF1ZSBpZCBvZiB0aGUgUEQgcmVzb3VyY2UgaW4gQVdTOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS92b2x1bWVzLm1kI2F3c2VsYXN0aWNibG9ja3N0b3JlXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQVdTRWxhc3RpY0Jsb2NrU3RvcmVWb2x1bWVTb3VyY2VcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19DYXBhYmlsaXRpZXNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYWRkXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYWRkZWQgY2FwYWJpbGl0aWVzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhZGRlZCBjYXBhYmlsaXRpZXNcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJkcm9wXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZHJvcGVkIGNhcGFiaWxpdGllc1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZHJvcGVkIGNhcGFiaWxpdGllc1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNhcGFiaWxpdGllc1wiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX0NlcGhGU1ZvbHVtZVNvdXJjZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJtb25pdG9yc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImEgY29sbGVjdGlvbiBvZiBDZXBoIG1vbml0b3JzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhIGNvbGxlY3Rpb24gb2YgQ2VwaCBtb25pdG9yc1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlYWRPbmx5XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJDZXBoIGZzIHRvIGJlIG1vdW50ZWQgd2l0aCByZWFkLW9ubHkgcGVybWlzc2lvbnNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZWNyZXRGaWxlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInBhdGggdG8gc2VjcmV0IGZvciByYWRvcyB1c2VyOyBkZWZhdWx0IGlzIC9ldGMvY2VwaC91c2VyLnNlY3JldDsgb3B0aW9uYWxcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZWNyZXRSZWZcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xvY2FsT2JqZWN0UmVmZXJlbmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Mb2NhbE9iamVjdFJlZmVyZW5jZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInVzZXJcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicmFkb3MgdXNlciBuYW1lOyBkZWZhdWx0IGlzIGFkbWluOyBvcHRpb25hbFwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNlcGhGU1ZvbHVtZVNvdXJjZVwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX0NvbnRhaW5lclwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcmdzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiY29tbWFuZCBhcnJheTsgdGhlIGRvY2tlciBpbWFnZSdzIGNtZCBpcyB1c2VkIGlmIHRoaXMgaXMgbm90IHByb3ZpZGVkOyBhcmd1bWVudHMgdG8gdGhlIGVudHJ5cG9pbnQ7IGNhbm5vdCBiZSB1cGRhdGVkOyB2YXJpYWJsZSByZWZlcmVuY2VzICQoVkFSX05BTUUpIGFyZSBleHBhbmRlZCB1c2luZyB0aGUgY29udGFpbmVyJ3MgZW52aXJvbm1lbnQgdmFyaWFibGVzOyBpZiBhIHZhcmlhYmxlIGNhbm5vdCBiZSByZXNvbHZlZFwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiY29tbWFuZCBhcnJheTsgdGhlIGRvY2tlciBpbWFnZSdzIGNtZCBpcyB1c2VkIGlmIHRoaXMgaXMgbm90IHByb3ZpZGVkOyBhcmd1bWVudHMgdG8gdGhlIGVudHJ5cG9pbnQ7IGNhbm5vdCBiZSB1cGRhdGVkOyB2YXJpYWJsZSByZWZlcmVuY2VzICQoVkFSX05BTUUpIGFyZSBleHBhbmRlZCB1c2luZyB0aGUgY29udGFpbmVyJ3MgZW52aXJvbm1lbnQgdmFyaWFibGVzOyBpZiBhIHZhcmlhYmxlIGNhbm5vdCBiZSByZXNvbHZlZFwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImNvbW1hbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJlbnRyeXBvaW50IGFycmF5OyBub3QgZXhlY3V0ZWQgd2l0aGluIGEgc2hlbGw7IHRoZSBkb2NrZXIgaW1hZ2UncyBlbnRyeXBvaW50IGlzIHVzZWQgaWYgdGhpcyBpcyBub3QgcHJvdmlkZWQ7IGNhbm5vdCBiZSB1cGRhdGVkOyB2YXJpYWJsZSByZWZlcmVuY2VzICQoVkFSX05BTUUpIGFyZSBleHBhbmRlZCB1c2luZyB0aGUgY29udGFpbmVyJ3MgZW52aXJvbm1lbnQgdmFyaWFibGVzOyBpZiBhIHZhcmlhYmxlIGNhbm5vdCBiZSByZXNvbHZlZFwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZW50cnlwb2ludCBhcnJheTsgbm90IGV4ZWN1dGVkIHdpdGhpbiBhIHNoZWxsOyB0aGUgZG9ja2VyIGltYWdlJ3MgZW50cnlwb2ludCBpcyB1c2VkIGlmIHRoaXMgaXMgbm90IHByb3ZpZGVkOyBjYW5ub3QgYmUgdXBkYXRlZDsgdmFyaWFibGUgcmVmZXJlbmNlcyAkKFZBUl9OQU1FKSBhcmUgZXhwYW5kZWQgdXNpbmcgdGhlIGNvbnRhaW5lcidzIGVudmlyb25tZW50IHZhcmlhYmxlczsgaWYgYSB2YXJpYWJsZSBjYW5ub3QgYmUgcmVzb2x2ZWRcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJlbnZcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBzZXQgaW4gdGhlIGNvbnRhaW5lcjsgY2Fubm90IGJlIHVwZGF0ZWRcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRW52VmFyXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVudlZhclwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImltYWdlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRvY2tlciBpbWFnZSBuYW1lOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9pbWFnZXMubWRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpbWFnZVB1bGxQb2xpY3lcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaW1hZ2UgcHVsbCBwb2xpY3k7IG9uZSBvZiBBbHdheXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJsaWZlY3ljbGVcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpZmVjeWNsZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlmZWN5Y2xlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibGl2ZW5lc3NQcm9iZVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUHJvYmVcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlByb2JlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJuYW1lIG9mIHRoZSBjb250YWluZXI7IG11c3QgYmUgYSBETlNfTEFCRUwgYW5kIHVuaXF1ZSB3aXRoaW4gdGhlIHBvZDsgY2Fubm90IGJlIHVwZGF0ZWRcIixcbiAgICAgICAgICAgIFwibWF4TGVuZ3RoXCI6IDYzLFxuICAgICAgICAgICAgXCJwYXR0ZXJuXCI6IFwiXlthLXowLTldKFstYS16MC05XSpbYS16MC05XSk/JFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBvcnRzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBwb3J0cyB0byBleHBvc2UgZnJvbSB0aGUgY29udGFpbmVyOyBjYW5ub3QgYmUgdXBkYXRlZFwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Db250YWluZXJQb3J0XCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNvbnRhaW5lclBvcnRcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZWFkaW5lc3NQcm9iZVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUHJvYmVcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlByb2JlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVzb3VyY2VzXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19SZXNvdXJjZVJlcXVpcmVtZW50c1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVzb3VyY2VSZXF1aXJlbWVudHNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZWN1cml0eUNvbnRleHRcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1NlY3VyaXR5Q29udGV4dFwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VjdXJpdHlDb250ZXh0XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3RkaW5cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIldoZXRoZXIgdGhpcyBjb250YWluZXIgc2hvdWxkIGFsbG9jYXRlIGEgYnVmZmVyIGZvciBzdGRpbiBpbiB0aGUgY29udGFpbmVyIHJ1bnRpbWU7IGRlZmF1bHQgaXMgZmFsc2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0ZXJtaW5hdGlvbk1lc3NhZ2VQYXRoXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInBhdGggYXQgd2hpY2ggdGhlIGZpbGUgdG8gd2hpY2ggdGhlIGNvbnRhaW5lcidzIHRlcm1pbmF0aW9uIG1lc3NhZ2Ugd2lsbCBiZSB3cml0dGVuIGlzIG1vdW50ZWQgaW50byB0aGUgY29udGFpbmVyJ3MgZmlsZXN5c3RlbTsgbWVzc2FnZSB3cml0dGVuIGlzIGludGVuZGVkIHRvIGJlIGJyaWVmIGZpbmFsIHN0YXR1c1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR0eVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiV2hldGhlciB0aGlzIGNvbnRhaW5lciBzaG91bGQgYWxsb2NhdGUgYSBUVFkgZm9yIGl0c2VsZlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInZvbHVtZU1vdW50c1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInBvZCB2b2x1bWVzIHRvIG1vdW50IGludG8gdGhlIGNvbnRhaW5lcidzIGZpbGVzeXN0ZTsgY2Fubm90IGJlIHVwZGF0ZWRcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfVm9sdW1lTW91bnRcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuVm9sdW1lTW91bnRcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ3b3JraW5nRGlyXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImNvbnRhaW5lcidzIHdvcmtpbmcgZGlyZWN0b3J5OyBkZWZhdWx0cyB0byBpbWFnZSdzIGRlZmF1bHQ7IGNhbm5vdCBiZSB1cGRhdGVkXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ29udGFpbmVyXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfQ29udGFpbmVyUG9ydFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJjb250YWluZXJQb3J0XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJudW1iZXIgb2YgcG9ydCB0byBleHBvc2Ugb24gdGhlIHBvZCdzIElQIGFkZHJlc3NcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJob3N0SVBcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaG9zdCBJUCB0byBiaW5kIHRoZSBwb3J0IHRvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaG9zdFBvcnRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm51bWJlciBvZiBwb3J0IHRvIGV4cG9zZSBvbiB0aGUgaG9zdDsgbW9zdCBjb250YWluZXJzIGRvIG5vdCBuZWVkIHRoaXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWUgZm9yIHRoZSBwb3J0IHRoYXQgY2FuIGJlIHJlZmVycmVkIHRvIGJ5IHNlcnZpY2VzOyBtdXN0IGJlIGFuIElBTkFfU1ZDX05BTUUgYW5kIHVuaXF1ZSB3aXRoaW4gdGhlIHBvZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInByb3RvY29sXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInByb3RvY29sIGZvciBwb3J0OyBtdXN0IGJlIFVEUCBvciBUQ1A7IFRDUCBpZiB1bnNwZWNpZmllZFwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNvbnRhaW5lclBvcnRcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19Db250YWluZXJTdGF0ZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJydW5uaW5nXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Db250YWluZXJTdGF0ZVJ1bm5pbmdcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNvbnRhaW5lclN0YXRlUnVubmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInRlcm1pbmF0ZWRcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0NvbnRhaW5lclN0YXRlVGVybWluYXRlZFwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ29udGFpbmVyU3RhdGVUZXJtaW5hdGVkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwid2FpdGluZ1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfQ29udGFpbmVyU3RhdGVXYWl0aW5nXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Db250YWluZXJTdGF0ZVdhaXRpbmdcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Db250YWluZXJTdGF0ZVwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX0NvbnRhaW5lclN0YXRlUnVubmluZ1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJzdGFydGVkQXRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGltZSBhdCB3aGljaCB0aGUgY29udGFpbmVyIHdhcyBsYXN0IChyZS0pc3RhcnRlZFwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNvbnRhaW5lclN0YXRlUnVubmluZ1wiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX0NvbnRhaW5lclN0YXRlVGVybWluYXRlZFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJjb250YWluZXJJRFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJjb250YWluZXIncyBJRCBpbiB0aGUgZm9ybWF0ICdkb2NrZXI6Ly9cXHUwMDNjY29udGFpbmVyX2lkXFx1MDAzZSdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJleGl0Q29kZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZXhpdCBzdGF0dXMgZnJvbSB0aGUgbGFzdCB0ZXJtaW5hdGlvbiBvZiB0aGUgY29udGFpbmVyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZmluaXNoZWRBdFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aW1lIGF0IHdoaWNoIHRoZSBjb250YWluZXIgbGFzdCB0ZXJtaW5hdGVkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWVzc2FnZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJtZXNzYWdlIHJlZ2FyZGluZyB0aGUgbGFzdCB0ZXJtaW5hdGlvbiBvZiB0aGUgY29udGFpbmVyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVhc29uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIihicmllZikgcmVhc29uIGZyb20gdGhlIGxhc3QgdGVybWluYXRpb24gb2YgdGhlIGNvbnRhaW5lclwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNpZ25hbFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic2lnbmFsIGZyb20gdGhlIGxhc3QgdGVybWluYXRpb24gb2YgdGhlIGNvbnRhaW5lclwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInN0YXJ0ZWRBdFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aW1lIGF0IHdoaWNoIHByZXZpb3VzIGV4ZWN1dGlvbiBvZiB0aGUgY29udGFpbmVyIHN0YXJ0ZWRcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Db250YWluZXJTdGF0ZVRlcm1pbmF0ZWRcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19Db250YWluZXJTdGF0ZVdhaXRpbmdcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwicmVhc29uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIihicmllZikgcmVhc29uIHRoZSBjb250YWluZXIgaXMgbm90IHlldCBydW5uaW5nXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ29udGFpbmVyU3RhdGVXYWl0aW5nXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfQ29udGFpbmVyU3RhdHVzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImNvbnRhaW5lcklEXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImNvbnRhaW5lcidzIElEIGluIHRoZSBmb3JtYXQgJ2RvY2tlcjovL1xcdTAwM2Njb250YWluZXJfaWRcXHUwMDNlJzsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvY29udGFpbmVyLWVudmlyb25tZW50Lm1kI2NvbnRhaW5lci1pbmZvcm1hdGlvblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImltYWdlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImltYWdlIG9mIHRoZSBjb250YWluZXI7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL2ltYWdlcy5tZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImltYWdlSURcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSUQgb2YgdGhlIGNvbnRhaW5lcidzIGltYWdlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibGFzdFN0YXRlXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Db250YWluZXJTdGF0ZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ29udGFpbmVyU3RhdGVcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWUgb2YgdGhlIGNvbnRhaW5lcjsgbXVzdCBiZSBhIEROU19MQUJFTCBhbmQgdW5pcXVlIHdpdGhpbiB0aGUgcG9kOyBjYW5ub3QgYmUgdXBkYXRlZFwiLFxuICAgICAgICAgICAgXCJtYXhMZW5ndGhcIjogNjMsXG4gICAgICAgICAgICBcInBhdHRlcm5cIjogXCJeW2EtejAtOV0oWy1hLXowLTldKlthLXowLTldKT8kXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVhZHlcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInNwZWNpZmllcyB3aGV0aGVyIHRoZSBjb250YWluZXIgaGFzIHBhc3NlZCBpdHMgcmVhZGluZXNzIHByb2JlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVzdGFydENvdW50XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBjb250YWluZXIgaGFzIGJlZW4gcmVzdGFydGVkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3RhdGVcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0NvbnRhaW5lclN0YXRlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Db250YWluZXJTdGF0ZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNvbnRhaW5lclN0YXR1c1wiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX0VtcHR5RGlyVm9sdW1lU291cmNlXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcIm1lZGl1bVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0eXBlIG9mIHN0b3JhZ2UgdXNlZCB0byBiYWNrIHRoZSB2b2x1bWU7IG11c3QgYmUgYW4gZW1wdHkgc3RyaW5nIChkZWZhdWx0KSBvciBNZW1vcnk7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3ZvbHVtZXMubWQjZW1wdHlkaXJcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FbXB0eURpclZvbHVtZVNvdXJjZVwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX0VuZHBvaW50QWRkcmVzc1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJpcFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJJUCBhZGRyZXNzIG9mIHRoZSBlbmRwb2ludFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInRhcmdldFJlZlwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RSZWZlcmVuY2VcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FbmRwb2ludEFkZHJlc3NcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19FbmRwb2ludFBvcnRcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJuYW1lIG9mIHRoaXMgcG9ydFwiLFxuICAgICAgICAgICAgXCJtYXhMZW5ndGhcIjogNjMsXG4gICAgICAgICAgICBcInBhdHRlcm5cIjogXCJeW2EtejAtOV0oWy1hLXowLTldKlthLXowLTldKT8kXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicG9ydFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicG9ydCBudW1iZXIgb2YgdGhlIGVuZHBvaW50XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicHJvdG9jb2xcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicHJvdG9jb2wgZm9yIHRoaXMgcG9ydDsgbXVzdCBiZSBVRFAgb3IgVENQOyBUQ1AgaWYgdW5zcGVjaWZpZWRcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FbmRwb2ludFBvcnRcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19FbmRwb2ludFN1YnNldFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhZGRyZXNzZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJJUCBhZGRyZXNzZXMgd2hpY2ggb2ZmZXIgdGhlIHJlbGF0ZWQgcG9ydHNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRW5kcG9pbnRBZGRyZXNzXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVuZHBvaW50QWRkcmVzc1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBvcnRzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicG9ydCBudW1iZXJzIGF2YWlsYWJsZSBvbiB0aGUgcmVsYXRlZCBJUCBhZGRyZXNzZXNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRW5kcG9pbnRQb3J0XCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVuZHBvaW50UG9ydFwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVuZHBvaW50U3Vic2V0XCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfRW5kcG9pbnRzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJFbmRwb2ludHNcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInN1YnNldHNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzZXRzIG9mIGFkZHJlc3NlcyBhbmQgcG9ydHMgdGhhdCBjb21wcmlzZSBhIHNlcnZpY2VcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRW5kcG9pbnRTdWJzZXRcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRW5kcG9pbnRTdWJzZXRcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FbmRwb2ludHNcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19FbmRwb2ludHNMaXN0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBlbmRwb2ludHNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRW5kcG9pbnRzXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVuZHBvaW50c1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJFbmRwb2ludHNMaXN0XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVuZHBvaW50c0xpc3RcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19FbnZWYXJcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJuYW1lIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZTsgbXVzdCBiZSBhIENfSURFTlRJRklFUlwiLFxuICAgICAgICAgICAgXCJwYXR0ZXJuXCI6IFwiXltBLVphLXpfXVtBLVphLXowLTlfXSokXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidmFsdWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidmFsdWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlOyBkZWZhdWx0cyB0byBlbXB0eSBzdHJpbmc7IHZhcmlhYmxlIHJlZmVyZW5jZXMgJChWQVJfTkFNRSkgYXJlIGV4cGFuZGVkIHVzaW5nIHRoZSBwcmV2aW91c2x5IGRlZmluZWQgZW52aXJvbm1lbnQgdmFyaWJsZXMgaW4gdGhlIGNvbnRhaW5lciBhbmQgYW55IHNlcnZpY2UgZW52aXJvbm1lbnQgdmFyaWFibGVzOyBpZiBhIHZhcmlhYmxlIGNhbm5vdCBiZSByZXNvbHZlZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInZhbHVlRnJvbVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRW52VmFyU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FbnZWYXJTb3VyY2VcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FbnZWYXJcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19FbnZWYXJTb3VyY2VcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiZmllbGRSZWZcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdEZpZWxkU2VsZWN0b3JcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdEZpZWxkU2VsZWN0b3JcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FbnZWYXJTb3VyY2VcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19FdmVudFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjb3VudFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIG51bWJlciBvZiB0aW1lcyB0aGlzIGV2ZW50IGhhcyBvY2N1cnJlZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImZpcnN0VGltZXN0YW1wXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSB0aW1lIGF0IHdoaWNoIHRoZSBldmVudCB3YXMgZmlyc3QgcmVjb3JkZWRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpbnZvbHZlZE9iamVjdFwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RSZWZlcmVuY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiRXZlbnRcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJsYXN0VGltZXN0YW1wXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSB0aW1lIGF0IHdoaWNoIHRoZSBtb3N0IHJlY2VudCBvY2N1cnJlbmNlIG9mIHRoaXMgZXZlbnQgd2FzIHJlY29yZGVkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWVzc2FnZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgc3RhdHVzIG9mIHRoaXMgb3BlcmF0aW9uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZWFzb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic2hvcnRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzb3VyY2VcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0V2ZW50U291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FdmVudFNvdXJjZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkV2ZW50XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfRXZlbnRMaXN0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBldmVudHNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRXZlbnRcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRXZlbnRcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiRXZlbnRMaXN0XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkV2ZW50TGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX0V2ZW50U291cmNlXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImNvbXBvbmVudFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJjb21wb25lbnQgdGhhdCBnZW5lcmF0ZWQgdGhlIGV2ZW50XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaG9zdFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJuYW1lIG9mIHRoZSBob3N0IHdoZXJlIHRoZSBldmVudCBpcyBnZW5lcmF0ZWRcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FdmVudFNvdXJjZVwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX0V4ZWNBY3Rpb25cIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiY29tbWFuZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImNvbW1hbmQgbGluZSB0byBleGVjdXRlIGluc2lkZSB0aGUgY29udGFpbmVyOyB3b3JraW5nIGRpcmVjdG9yeSBmb3IgdGhlIGNvbW1hbmQgaXMgcm9vdCAoJy8nKSBpbiB0aGUgY29udGFpbmVyJ3MgZmlsZSBzeXN0ZW07IHRoZSBjb21tYW5kIGlzIGV4ZWMnZFwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiY29tbWFuZCBsaW5lIHRvIGV4ZWN1dGUgaW5zaWRlIHRoZSBjb250YWluZXI7IHdvcmtpbmcgZGlyZWN0b3J5IGZvciB0aGUgY29tbWFuZCBpcyByb290ICgnLycpIGluIHRoZSBjb250YWluZXIncyBmaWxlIHN5c3RlbTsgdGhlIGNvbW1hbmQgaXMgZXhlYydkXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRXhlY0FjdGlvblwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX0dDRVBlcnNpc3RlbnREaXNrVm9sdW1lU291cmNlXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImZzVHlwZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJmaWxlIHN5c3RlbSB0eXBlIHRvIG1vdW50XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFydGl0aW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJwYXJ0aXRpb24gb24gdGhlIGRpc2sgdG8gbW91bnQgKGUuZy5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwZE5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidW5pcXVlIG5hbWUgb2YgdGhlIFBEIHJlc291cmNlIGluIEdDRTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvdm9sdW1lcy5tZCNnY2VwZXJzaXN0ZW50ZGlza1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlYWRPbmx5XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJyZWFkLW9ubHkgaWYgdHJ1ZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkdDRVBlcnNpc3RlbnREaXNrVm9sdW1lU291cmNlXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfR2l0UmVwb1ZvbHVtZVNvdXJjZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJyZXBvc2l0b3J5XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJlcG9zaXRvcnkgVVJMXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmV2aXNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiY29tbWl0IGhhc2ggZm9yIHRoZSBzcGVjaWZpZWQgcmV2aXNpb25cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5HaXRSZXBvVm9sdW1lU291cmNlXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfR2x1c3RlcmZzVm9sdW1lU291cmNlXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImVuZHBvaW50c1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJnbHVzdGVyIGhvc3RzIGVuZHBvaW50cyBuYW1lOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2V4YW1wbGVzL2dsdXN0ZXJmcy9SRUFETUUubWQjY3JlYXRlLWEtcG9kXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGF0aFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJwYXRoIHRvIGdsdXN0ZXIgdm9sdW1lOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2V4YW1wbGVzL2dsdXN0ZXJmcy9SRUFETUUubWQjY3JlYXRlLWEtcG9kXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVhZE9ubHlcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImdsdXN0ZXJmcyB2b2x1bWUgdG8gYmUgbW91bnRlZCB3aXRoIHJlYWQtb25seSBwZXJtaXNzaW9uczsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy9nbHVzdGVyZnMvUkVBRE1FLm1kI2NyZWF0ZS1hLXBvZFwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkdsdXN0ZXJmc1ZvbHVtZVNvdXJjZVwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX0hUVFBHZXRBY3Rpb25cIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiaG9zdFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJob3N0bmFtZSB0byBjb25uZWN0IHRvOyBkZWZhdWx0cyB0byBwb2QgSVBcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXRoXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInBhdGggdG8gYWNjZXNzIG9uIHRoZSBIVFRQIHNlcnZlclwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBvcnRcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX3V0aWxfSW50T3JTdHJpbmdcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkludE9yU3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2NoZW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInNjaGVtZSB0byBjb25uZWN0IHdpdGhcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IVFRQR2V0QWN0aW9uXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfSGFuZGxlclwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJleGVjXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19FeGVjQWN0aW9uXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FeGVjQWN0aW9uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaHR0cEdldFwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfSFRUUEdldEFjdGlvblwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSFRUUEdldEFjdGlvblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInRjcFNvY2tldFwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfVENQU29ja2V0QWN0aW9uXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5UQ1BTb2NrZXRBY3Rpb25cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYW5kbGVyXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfSG9zdFBhdGhWb2x1bWVTb3VyY2VcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwicGF0aFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJwYXRoIG9mIHRoZSBkaXJlY3Rvcnkgb24gdGhlIGhvc3Q7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3ZvbHVtZXMubWQjaG9zdHBhdGhcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Ib3N0UGF0aFZvbHVtZVNvdXJjZVwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX0lTQ1NJVm9sdW1lU291cmNlXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImZzVHlwZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJmaWxlIHN5c3RlbSB0eXBlIHRvIG1vdW50XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaXFuXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImlTQ1NJIFF1YWxpZmllZCBOYW1lXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibHVuXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJpc2NzaSB0YXJnZXQgbHVuIG51bWJlclwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlYWRPbmx5XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJyZWFkLW9ubHkgaWYgdHJ1ZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInRhcmdldFBvcnRhbFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJpU0NTSSB0YXJnZXQgcG9ydGFsXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSVNDU0lWb2x1bWVTb3VyY2VcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19MaWZlY3ljbGVcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwicG9zdFN0YXJ0XCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19IYW5kbGVyXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYW5kbGVyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicHJlU3RvcFwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfSGFuZGxlclwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFuZGxlclwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpZmVjeWNsZVwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX0xpc3RcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIG9iamVjdHNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfcnVudGltZV9SYXdFeHRlbnNpb25cIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiTGlzdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5CYXNlS3ViZXJuZXRlc0xpc3RcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19MaXN0TWV0YVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJyZXNvdXJjZVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic3RyaW5nIHRoYXQgaWRlbnRpZmllcyB0aGUgaW50ZXJuYWwgdmVyc2lvbiBvZiB0aGlzIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIGJ5IGNsaWVudHMgdG8gZGV0ZXJtaW5lIHdoZW4gb2JqZWN0cyBoYXZlIGNoYW5nZWQ7IHBvcHVsYXRlZCBieSB0aGUgc3lzdGVtXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2VsZkxpbmtcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVVJMIGZvciB0aGUgb2JqZWN0OyBwb3B1bGF0ZWQgYnkgdGhlIHN5c3RlbVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfTG9hZEJhbGFuY2VySW5ncmVzc1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJob3N0bmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJob3N0bmFtZSBvZiBpbmdyZXNzIHBvaW50XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaXBcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSVAgYWRkcmVzcyBvZiBpbmdyZXNzIHBvaW50XCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTG9hZEJhbGFuY2VySW5ncmVzc1wiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX0xvYWRCYWxhbmNlclN0YXR1c1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJpbmdyZXNzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibG9hZC1iYWxhbmNlciBpbmdyZXNzIHBvaW50c1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Mb2FkQmFsYW5jZXJJbmdyZXNzXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxvYWRCYWxhbmNlckluZ3Jlc3NcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Mb2FkQmFsYW5jZXJTdGF0dXNcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19Mb2NhbE9iamVjdFJlZmVyZW5jZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWUgb2YgdGhlIHJlZmVyZW50OyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9pZGVudGlmaWVycy5tZCNuYW1lc1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxvY2FsT2JqZWN0UmVmZXJlbmNlXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfTWV0YWRhdGFGaWxlXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImZpZWxkUmVmXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RGaWVsZFNlbGVjdG9yXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RGaWVsZFNlbGVjdG9yXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgbmFtZSBvZiB0aGUgZmlsZSB0byBiZSBjcmVhdGVkXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTWV0YWRhdGFGaWxlXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfTWV0YWRhdGFWb2x1bWVTb3VyY2VcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIG1ldGFkYXRhIGZpbGVzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX01ldGFkYXRhRmlsZVwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5NZXRhZGF0YUZpbGVcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5NZXRhZGF0YVZvbHVtZVNvdXJjZVwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX05GU1ZvbHVtZVNvdXJjZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJwYXRoXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBwYXRoIHRoYXQgaXMgZXhwb3J0ZWQgYnkgdGhlIE5GUyBzZXJ2ZXI7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3ZvbHVtZXMubWQjbmZzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVhZE9ubHlcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImZvcmNlcyB0aGUgTkZTIGV4cG9ydCB0byBiZSBtb3VudGVkIHdpdGggcmVhZC1vbmx5IHBlcm1pc3Npb25zOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS92b2x1bWVzLm1kI25mc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNlcnZlclwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgaG9zdG5hbWUgb3IgSVAgYWRkcmVzcyBvZiB0aGUgTkZTIHNlcnZlcjsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvdm9sdW1lcy5tZCNuZnNcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5ORlNWb2x1bWVTb3VyY2VcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19OYW1lc3BhY2VcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIk5hbWVzcGFjZVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3BlY1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTmFtZXNwYWNlU3BlY1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTmFtZXNwYWNlU3BlY1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInN0YXR1c1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTmFtZXNwYWNlU3RhdHVzXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5OYW1lc3BhY2VTdGF0dXNcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5OYW1lc3BhY2VcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19OYW1lc3BhY2VMaXN0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaXRlbXMgaXMgdGhlIGxpc3Qgb2YgTmFtZXNwYWNlIG9iamVjdHMgaW4gdGhlIGxpc3Q7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL25hbWVzcGFjZXMubWRcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTmFtZXNwYWNlXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5hbWVzcGFjZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJOYW1lc3BhY2VMaXN0XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5hbWVzcGFjZUxpc3RcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19OYW1lc3BhY2VTcGVjXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImZpbmFsaXplcnNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbiBvcGFxdWUgbGlzdCBvZiB2YWx1ZXMgdGhhdCBtdXN0IGJlIGVtcHR5IHRvIHBlcm1hbmVudGx5IHJlbW92ZSBvYmplY3QgZnJvbSBzdG9yYWdlOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvZGVzaWduL25hbWVzcGFjZXMubWQjZmluYWxpemVyc1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYW4gb3BhcXVlIGxpc3Qgb2YgdmFsdWVzIHRoYXQgbXVzdCBiZSBlbXB0eSB0byBwZXJtYW5lbnRseSByZW1vdmUgb2JqZWN0IGZyb20gc3RvcmFnZTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL2Rlc2lnbi9uYW1lc3BhY2VzLm1kI2ZpbmFsaXplcnNcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5OYW1lc3BhY2VTcGVjXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfTmFtZXNwYWNlU3RhdHVzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcInBoYXNlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInBoYXNlIGlzIHRoZSBjdXJyZW50IGxpZmVjeWNsZSBwaGFzZSBvZiB0aGUgbmFtZXNwYWNlOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvZGVzaWduL25hbWVzcGFjZXMubWQjcGhhc2VzXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTmFtZXNwYWNlU3RhdHVzXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfTm9kZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiTm9kZVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3BlY1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTm9kZVNwZWNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5vZGVTcGVjXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3RhdHVzXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Ob2RlU3RhdHVzXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Ob2RlU3RhdHVzXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTm9kZVwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX05vZGVBZGRyZXNzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFkZHJlc3NcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIG5vZGUgYWRkcmVzc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibm9kZSBhZGRyZXNzIHR5cGVcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Ob2RlQWRkcmVzc1wiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX05vZGVDb25kaXRpb25cIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwibGFzdEhlYXJ0YmVhdFRpbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGFzdCB0aW1lIHdlIGdvdCBhbiB1cGRhdGUgb24gYSBnaXZlbiBjb25kaXRpb25cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJsYXN0VHJhbnNpdGlvblRpbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGFzdCB0aW1lIHRoZSBjb25kaXRpb24gdHJhbnNpdCBmcm9tIG9uZSBzdGF0dXMgdG8gYW5vdGhlclwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1lc3NhZ2VcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaHVtYW4gcmVhZGFibGUgbWVzc2FnZSBpbmRpY2F0aW5nIGRldGFpbHMgYWJvdXQgbGFzdCB0cmFuc2l0aW9uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVhc29uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIihicmllZikgcmVhc29uIGZvciB0aGUgY29uZGl0aW9uJ3MgbGFzdCB0cmFuc2l0aW9uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3RhdHVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInN0YXR1cyBvZiB0aGUgY29uZGl0aW9uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0eXBlIG9mIG5vZGUgY29uZGl0aW9uXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTm9kZUNvbmRpdGlvblwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX05vZGVMaXN0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBub2Rlc1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Ob2RlXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5vZGVcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiTm9kZUxpc3RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTm9kZUxpc3RcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19Ob2RlU3BlY1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJleHRlcm5hbElEXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImRlcHJlY2F0ZWQuIEV4dGVybmFsIElEIGFzc2lnbmVkIHRvIHRoZSBub2RlIGJ5IHNvbWUgbWFjaGluZSBkYXRhYmFzZSAoZS5nLiBhIGNsb3VkIHByb3ZpZGVyKS4gRGVmYXVsdHMgdG8gbm9kZSBuYW1lIHdoZW4gZW1wdHkuXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicG9kQ0lEUlwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJwb2QgSVAgcmFuZ2UgYXNzaWduZWQgdG8gdGhlIG5vZGVcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwcm92aWRlcklEXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIklEIG9mIHRoZSBub2RlIGFzc2lnbmVkIGJ5IHRoZSBjbG91ZCBwcm92aWRlciBpbiB0aGUgZm9ybWF0OiBcXHUwMDNjUHJvdmlkZXJOYW1lXFx1MDAzZTovL1xcdTAwM2NQcm92aWRlclNwZWNpZmljTm9kZUlEXFx1MDAzZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInVuc2NoZWR1bGFibGVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImRpc2FibGUgcG9kIHNjaGVkdWxpbmcgb24gdGhlIG5vZGU7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy9hZG1pbi9ub2RlLm1kI21hbnVhbC1ub2RlLWFkbWluaXN0cmF0aW9uXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTm9kZVNwZWNcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19Ob2RlU3RhdHVzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFkZHJlc3Nlc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgYWRkcmVzc2VzIHJlYWNoYWJsZSB0byB0aGUgbm9kZTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL2FkbWluL25vZGUubWQjbm9kZS1hZGRyZXNzZXNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTm9kZUFkZHJlc3NcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTm9kZUFkZHJlc3NcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjYXBhY2l0eVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJjb21wdXRlIHJlc291cmNlIGNhcGFjaXR5IG9mIHRoZSBub2RlOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9jb21wdXRlLXJlc291cmNlcy5tZFwiLFxuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19yZXNvdXJjZV9RdWFudGl0eVwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5RdWFudGl0eVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImphdmEudXRpbC5NYXBcXHUwMDNjU3RyaW5nLGlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUXVhbnRpdHlcXHUwMDNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiY29uZGl0aW9uc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2Ygbm9kZSBjb25kaXRpb25zIG9ic2VydmVkOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvYWRtaW4vbm9kZS5tZCNub2RlLWNvbmRpdGlvblwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Ob2RlQ29uZGl0aW9uXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5vZGVDb25kaXRpb25cIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJub2RlSW5mb1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTm9kZVN5c3RlbUluZm9cIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5vZGVTeXN0ZW1JbmZvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGhhc2VcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibW9zdCByZWNlbnRseSBvYnNlcnZlZCBsaWZlY3ljbGUgcGhhc2Ugb2YgdGhlIG5vZGU7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy9hZG1pbi9ub2RlLm1kI25vZGUtcGhhc2VcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Ob2RlU3RhdHVzXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfTm9kZVN5c3RlbUluZm9cIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYm9vdElEXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImJvb3QgaWQgaXMgdGhlIGJvb3QtaWQgcmVwb3J0ZWQgYnkgdGhlIG5vZGVcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjb250YWluZXJSdW50aW1lVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJDb250YWluZXIgcnVudGltZSB2ZXJzaW9uIHJlcG9ydGVkIGJ5IHRoZSBub2RlIHRocm91Z2ggcnVudGltZSByZW1vdGUgQVBJIChlLmcuIGRvY2tlcjovLzEuNS4wKVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtlcm5lbFZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiS2VybmVsIHZlcnNpb24gcmVwb3J0ZWQgYnkgdGhlIG5vZGUgZnJvbSAndW5hbWUgLXInIChlLmcuIDMuMTYuMC0wLmJwby40LWFtZDY0KVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImt1YmVQcm94eVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiS3ViZS1wcm94eSB2ZXJzaW9uIHJlcG9ydGVkIGJ5IHRoZSBub2RlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia3ViZWxldFZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiS3ViZWxldCB2ZXJzaW9uIHJlcG9ydGVkIGJ5IHRoZSBub2RlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWFjaGluZUlEXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm1hY2hpbmUtaWQgcmVwb3J0ZWQgYnkgdGhlIG5vZGVcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJvc0ltYWdlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk9TIGltYWdlIHVzZWQgcmVwb3J0ZWQgYnkgdGhlIG5vZGUgZnJvbSAvZXRjL29zLXJlbGVhc2UgKGUuZy4gRGViaWFuIEdOVS9MaW51eCA3ICh3aGVlenkpKVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInN5c3RlbVVVSURcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic3lzdGVtLXV1aWQgcmVwb3J0ZWQgYnkgdGhlIG5vZGVcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Ob2RlU3lzdGVtSW5mb1wiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX09iamVjdEZpZWxkU2VsZWN0b3JcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ2ZXJzaW9uIG9mIHRoZSBzY2hlbWEgdGhhdCBmaWVsZFBhdGggaXMgd3JpdHRlbiBpbiB0ZXJtcyBvZjsgZGVmYXVsdHMgdG8gdjFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJmaWVsZFBhdGhcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicGF0aCBvZiB0aGUgZmllbGQgdG8gc2VsZWN0IGluIHRoZSBzcGVjaWZpZWQgQVBJIHZlcnNpb25cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RGaWVsZFNlbGVjdG9yXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfT2JqZWN0TWV0YVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhbm5vdGF0aW9uc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJtYXAgb2Ygc3RyaW5nIGtleXMgYW5kIHZhbHVlcyB0aGF0IGNhbiBiZSB1c2VkIGJ5IGV4dGVybmFsIHRvb2xpbmcgdG8gc3RvcmUgYW5kIHJldHJpZXZlIGFyYml0cmFyeSBtZXRhZGF0YSBhYm91dCBvYmplY3RzOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9hbm5vdGF0aW9ucy5tZFwiLFxuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibWFwIG9mIHN0cmluZyBrZXlzIGFuZCB2YWx1ZXMgdGhhdCBjYW4gYmUgdXNlZCBieSBleHRlcm5hbCB0b29saW5nIHRvIHN0b3JlIGFuZCByZXRyaWV2ZSBhcmJpdHJhcnkgbWV0YWRhdGEgYWJvdXQgb2JqZWN0czsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvYW5ub3RhdGlvbnMubWRcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJqYXZhLnV0aWwuTWFwXFx1MDAzY1N0cmluZyxTdHJpbmdcXHUwMDNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiY3JlYXRpb25UaW1lc3RhbXBcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUkZDIDMzMzkgZGF0ZSBhbmQgdGltZSBhdCB3aGljaCB0aGUgb2JqZWN0IHdhcyBjcmVhdGVkOyBwb3B1bGF0ZWQgYnkgdGhlIHN5c3RlbVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImRlbGV0aW9uVGltZXN0YW1wXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJGQyAzMzM5IGRhdGUgYW5kIHRpbWUgYXQgd2hpY2ggdGhlIG9iamVjdCB3aWxsIGJlIGRlbGV0ZWQ7IHBvcHVsYXRlZCBieSB0aGUgc3lzdGVtIHdoZW4gYSBncmFjZWZ1bCBkZWxldGlvbiBpcyByZXF1ZXN0ZWRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZW5lcmF0ZU5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYW4gb3B0aW9uYWwgcHJlZml4IHRvIHVzZSB0byBnZW5lcmF0ZSBhIHVuaXF1ZSBuYW1lOyBoYXMgdGhlIHNhbWUgdmFsaWRhdGlvbiBydWxlcyBhcyBuYW1lOyBvcHRpb25hbFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdlbmVyYXRpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImEgc2VxdWVuY2UgbnVtYmVyIHJlcHJlc2VudGluZyBhIHNwZWNpZmljIGdlbmVyYXRpb24gb2YgdGhlIGRlc2lyZWQgc3RhdGU7IHBvcHVsYXRlZCBieSB0aGUgc3lzdGVtOyByZWFkLW9ubHlcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJMb25nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibGFiZWxzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm1hcCBvZiBzdHJpbmcga2V5cyBhbmQgdmFsdWVzIHRoYXQgY2FuIGJlIHVzZWQgdG8gb3JnYW5pemUgYW5kIGNhdGVnb3JpemUgb2JqZWN0czsgbWF5IG1hdGNoIHNlbGVjdG9ycyBvZiByZXBsaWNhdGlvbiBjb250cm9sbGVycyBhbmQgc2VydmljZXM7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL2xhYmVscy5tZFwiLFxuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibWFwIG9mIHN0cmluZyBrZXlzIGFuZCB2YWx1ZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBvcmdhbml6ZSBhbmQgY2F0ZWdvcml6ZSBvYmplY3RzOyBtYXkgbWF0Y2ggc2VsZWN0b3JzIG9mIHJlcGxpY2F0aW9uIGNvbnRyb2xsZXJzIGFuZCBzZXJ2aWNlczsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvbGFiZWxzLm1kXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiamF2YS51dGlsLk1hcFxcdTAwM2NTdHJpbmcsU3RyaW5nXFx1MDAzZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic3RyaW5nIHRoYXQgaWRlbnRpZmllcyBhbiBvYmplY3QuIE11c3QgYmUgdW5pcXVlIHdpdGhpbiBhIG5hbWVzcGFjZTsgY2Fubm90IGJlIHVwZGF0ZWQ7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL2lkZW50aWZpZXJzLm1kI25hbWVzXCIsXG4gICAgICAgICAgICBcIm1heExlbmd0aFwiOiA2MyxcbiAgICAgICAgICAgIFwicGF0dGVyblwiOiBcIl5bYS16MC05XShbLWEtejAtOV0qW2EtejAtOV0pPyRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJuYW1lc3BhY2VcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibmFtZXNwYWNlIG9mIHRoZSBvYmplY3Q7IG11c3QgYmUgYSBETlNfTEFCRUw7IGNhbm5vdCBiZSB1cGRhdGVkOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9uYW1lc3BhY2VzLm1kXCIsXG4gICAgICAgICAgICBcIm1heExlbmd0aFwiOiAyNTMsXG4gICAgICAgICAgICBcInBhdHRlcm5cIjogXCJeW2EtejAtOV0oWy1hLXowLTldKlthLXowLTldKT8oXFxcXC5bYS16MC05XShbLWEtejAtOV0qW2EtejAtOV0pPykqJFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlc291cmNlVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzdHJpbmcgdGhhdCBpZGVudGlmaWVzIHRoZSBpbnRlcm5hbCB2ZXJzaW9uIG9mIHRoaXMgb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgYnkgY2xpZW50cyB0byBkZXRlcm1pbmUgd2hlbiBvYmplY3RzIGhhdmUgY2hhbmdlZDsgcG9wdWxhdGVkIGJ5IHRoZSBzeXN0ZW1cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZWxmTGlua1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJVUkwgZm9yIHRoZSBvYmplY3Q7IHBvcHVsYXRlZCBieSB0aGUgc3lzdGVtXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidWlkXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInVuaXF1ZSBVVUlEIGFjcm9zcyBzcGFjZSBhbmQgdGltZTsgcG9wdWxhdGVkIGJ5IHRoZSBzeXN0ZW07IHJlYWQtb25seTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvaWRlbnRpZmllcnMubWQjdWlkc1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19PYmplY3RSZWZlcmVuY2VcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBUEkgdmVyc2lvbiBvZiB0aGUgcmVmZXJlbnRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJmaWVsZFBhdGhcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaWYgcmVmZXJyaW5nIHRvIGEgcGllY2Ugb2YgYW4gb2JqZWN0IGluc3RlYWQgb2YgYW4gZW50aXJlIG9iamVjdFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwia2luZCBvZiB0aGUgcmVmZXJlbnQ7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjdHlwZXMta2luZHNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWUgb2YgdGhlIHJlZmVyZW50OyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9pZGVudGlmaWVycy5tZCNuYW1lc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm5hbWVzcGFjZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJuYW1lc3BhY2Ugb2YgdGhlIHJlZmVyZW50OyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9uYW1lc3BhY2VzLm1kXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVzb3VyY2VWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInNwZWNpZmljIHJlc291cmNlVmVyc2lvbiB0byB3aGljaCB0aGlzIHJlZmVyZW5jZSBpcyBtYWRlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidWlkXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInVpZCBvZiB0aGUgcmVmZXJlbnQ7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL2lkZW50aWZpZXJzLm1kI3VpZHNcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RSZWZlcmVuY2VcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19QZXJzaXN0ZW50Vm9sdW1lXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJQZXJzaXN0ZW50Vm9sdW1lXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzcGVjXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19QZXJzaXN0ZW50Vm9sdW1lU3BlY1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUGVyc2lzdGVudFZvbHVtZVNwZWNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzdGF0dXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1BlcnNpc3RlbnRWb2x1bWVTdGF0dXNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBlcnNpc3RlbnRWb2x1bWVTdGF0dXNcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lXCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfUGVyc2lzdGVudFZvbHVtZUNsYWltXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJQZXJzaXN0ZW50Vm9sdW1lQ2xhaW1cIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNwZWNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1BlcnNpc3RlbnRWb2x1bWVDbGFpbVNwZWNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBlcnNpc3RlbnRWb2x1bWVDbGFpbVNwZWNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzdGF0dXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1BlcnNpc3RlbnRWb2x1bWVDbGFpbVN0YXR1c1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUGVyc2lzdGVudFZvbHVtZUNsYWltU3RhdHVzXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUGVyc2lzdGVudFZvbHVtZUNsYWltXCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfUGVyc2lzdGVudFZvbHVtZUNsYWltTGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImEgbGlzdCBvZiBwZXJzaXN0ZW50IHZvbHVtZSBjbGFpbXM7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3BlcnNpc3RlbnQtdm9sdW1lcy5tZCNwZXJzaXN0ZW50dm9sdW1lY2xhaW1zXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1BlcnNpc3RlbnRWb2x1bWVDbGFpbVwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1cIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiUGVyc2lzdGVudFZvbHVtZUNsYWltTGlzdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1MaXN0XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfUGVyc2lzdGVudFZvbHVtZUNsYWltU3BlY1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhY2Nlc3NNb2Rlc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBkZXNpcmVkIGFjY2VzcyBtb2RlcyB0aGUgdm9sdW1lIHNob3VsZCBoYXZlOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9wZXJzaXN0ZW50LXZvbHVtZXMubWQjYWNjZXNzLW1vZGVzLTFcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBkZXNpcmVkIGFjY2VzcyBtb2RlcyB0aGUgdm9sdW1lIHNob3VsZCBoYXZlOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9wZXJzaXN0ZW50LXZvbHVtZXMubWQjYWNjZXNzLW1vZGVzLTFcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZXNvdXJjZXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1Jlc291cmNlUmVxdWlyZW1lbnRzXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SZXNvdXJjZVJlcXVpcmVtZW50c1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInZvbHVtZU5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIGJpbmRpbmcgcmVmZXJlbmNlIHRvIHRoZSBwZXJzaXN0ZW50IHZvbHVtZSBiYWNraW5nIHRoaXMgY2xhaW1cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1TcGVjXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfUGVyc2lzdGVudFZvbHVtZUNsYWltU3RhdHVzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFjY2Vzc01vZGVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIGFjdHVhbCBhY2Nlc3MgbW9kZXMgdGhlIHZvbHVtZSBoYXM7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3BlcnNpc3RlbnQtdm9sdW1lcy5tZCNhY2Nlc3MtbW9kZXMtMVwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIGFjdHVhbCBhY2Nlc3MgbW9kZXMgdGhlIHZvbHVtZSBoYXM7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3BlcnNpc3RlbnQtdm9sdW1lcy5tZCNhY2Nlc3MtbW9kZXMtMVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImNhcGFjaXR5XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBhY3R1YWwgcmVzb3VyY2VzIHRoZSB2b2x1bWUgaGFzXCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX3Jlc291cmNlX1F1YW50aXR5XCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlF1YW50aXR5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiamF2YS51dGlsLk1hcFxcdTAwM2NTdHJpbmcsaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5RdWFudGl0eVxcdTAwM2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwaGFzZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgY3VycmVudCBwaGFzZSBvZiB0aGUgY2xhaW1cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1TdGF0dXNcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1Wb2x1bWVTb3VyY2VcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiY2xhaW1OYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBuYW1lIG9mIHRoZSBjbGFpbSBpbiB0aGUgc2FtZSBuYW1lc3BhY2UgdG8gYmUgbW91bnRlZCBhcyBhIHZvbHVtZTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvcGVyc2lzdGVudC12b2x1bWVzLm1kI3BlcnNpc3RlbnR2b2x1bWVjbGFpbXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZWFkT25seVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibW91bnQgdm9sdW1lIGFzIHJlYWQtb25seSB3aGVuIHRydWU7IGRlZmF1bHQgZmFsc2VcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1Wb2x1bWVTb3VyY2VcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19QZXJzaXN0ZW50Vm9sdW1lTGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgcGVyc2lzdGVudCB2b2x1bWVzOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9wZXJzaXN0ZW50LXZvbHVtZXMubWRcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUGVyc2lzdGVudFZvbHVtZVwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlBlcnNpc3RlbnRWb2x1bWVMaXN0XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBlcnNpc3RlbnRWb2x1bWVMaXN0XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfUGVyc2lzdGVudFZvbHVtZVNvdXJjZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhd3NFbGFzdGljQmxvY2tTdG9yZVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfQVdTRWxhc3RpY0Jsb2NrU3RvcmVWb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkFXU0VsYXN0aWNCbG9ja1N0b3JlVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiY2VwaGZzXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19DZXBoRlNWb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNlcGhGU1ZvbHVtZVNvdXJjZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdjZVBlcnNpc3RlbnREaXNrXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19HQ0VQZXJzaXN0ZW50RGlza1ZvbHVtZVNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuR0NFUGVyc2lzdGVudERpc2tWb2x1bWVTb3VyY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnbHVzdGVyZnNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0dsdXN0ZXJmc1ZvbHVtZVNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuR2x1c3RlcmZzVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaG9zdFBhdGhcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0hvc3RQYXRoVm9sdW1lU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Ib3N0UGF0aFZvbHVtZVNvdXJjZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImlzY3NpXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19JU0NTSVZvbHVtZVNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSVNDU0lWb2x1bWVTb3VyY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJuZnNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX05GU1ZvbHVtZVNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTkZTVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmJkXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19SQkRWb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJCRFZvbHVtZVNvdXJjZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBlcnNpc3RlbnRWb2x1bWVTb3VyY2VcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19QZXJzaXN0ZW50Vm9sdW1lU3BlY1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhY2Nlc3NNb2Rlc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFsbCB3YXlzIHRoZSB2b2x1bWUgY2FuIGJlIG1vdW50ZWQ7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3BlcnNpc3RlbnQtdm9sdW1lcy5tZCNhY2Nlc3MtbW9kZXNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFsbCB3YXlzIHRoZSB2b2x1bWUgY2FuIGJlIG1vdW50ZWQ7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3BlcnNpc3RlbnQtdm9sdW1lcy5tZCNhY2Nlc3MtbW9kZXNcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJhd3NFbGFzdGljQmxvY2tTdG9yZVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfQVdTRWxhc3RpY0Jsb2NrU3RvcmVWb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkFXU0VsYXN0aWNCbG9ja1N0b3JlVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiY2FwYWNpdHlcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYSBkZXNjcmlwdGlvbiBvZiB0aGUgcGVyc2lzdGVudCB2b2x1bWUncyByZXNvdXJjZXMgYW5kIGNhcGFjaXR5cjsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvcGVyc2lzdGVudC12b2x1bWVzLm1kI2NhcGFjaXR5XCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX3Jlc291cmNlX1F1YW50aXR5XCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlF1YW50aXR5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiamF2YS51dGlsLk1hcFxcdTAwM2NTdHJpbmcsaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5RdWFudGl0eVxcdTAwM2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjZXBoZnNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0NlcGhGU1ZvbHVtZVNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ2VwaEZTVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiY2xhaW1SZWZcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdFJlZmVyZW5jZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0UmVmZXJlbmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2NlUGVyc2lzdGVudERpc2tcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0dDRVBlcnNpc3RlbnREaXNrVm9sdW1lU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5HQ0VQZXJzaXN0ZW50RGlza1ZvbHVtZVNvdXJjZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdsdXN0ZXJmc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfR2x1c3RlcmZzVm9sdW1lU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5HbHVzdGVyZnNWb2x1bWVTb3VyY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJob3N0UGF0aFwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfSG9zdFBhdGhWb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhvc3RQYXRoVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaXNjc2lcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0lTQ1NJVm9sdW1lU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5JU0NTSVZvbHVtZVNvdXJjZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm5mc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTkZTVm9sdW1lU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5ORlNWb2x1bWVTb3VyY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwZXJzaXN0ZW50Vm9sdW1lUmVjbGFpbVBvbGljeVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ3aGF0IGhhcHBlbnMgdG8gYSB2b2x1bWUgd2hlbiByZWxlYXNlZCBmcm9tIGl0cyBjbGFpbTsgVmFsaWQgb3B0aW9ucyBhcmUgUmV0YWluIChkZWZhdWx0KSBhbmQgUmVjeWNsZS4gIFJlY3lsaW5nIG11c3QgYmUgc3VwcG9ydGVkIGJ5IHRoZSB2b2x1bWUgcGx1Z2luIHVuZGVybHlpbmcgdGhpcyBwZXJzaXN0ZW50IHZvbHVtZS4gU2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvcGVyc2lzdGVudC12b2x1bWVzLm1kI3JlY3ljbGluZy1wb2xpY3lcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyYmRcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1JCRFZvbHVtZVNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUkJEVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUGVyc2lzdGVudFZvbHVtZVNwZWNcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19QZXJzaXN0ZW50Vm9sdW1lU3RhdHVzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcIm1lc3NhZ2VcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaHVtYW4tcmVhZGFibGUgbWVzc2FnZSBpbmRpY2F0aW5nIGRldGFpbHMgYWJvdXQgd2h5IHRoZSB2b2x1bWUgaXMgaW4gdGhpcyBzdGF0ZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBoYXNlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBjdXJyZW50IHBoYXNlIG9mIGEgcGVyc2lzdGVudCB2b2x1bWU7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3BlcnNpc3RlbnQtdm9sdW1lcy5tZCNwaGFzZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlYXNvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCIoYnJpZWYpIHJlYXNvbiB0aGUgdm9sdW1lIGlzIG5vdCBpcyBub3QgYXZhaWxhYmxlXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUGVyc2lzdGVudFZvbHVtZVN0YXR1c1wiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1BvZFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiUG9kXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzcGVjXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Qb2RTcGVjXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Qb2RTcGVjXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3RhdHVzXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Qb2RTdGF0dXNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBvZFN0YXR1c1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBvZFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1BvZENvbmRpdGlvblwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJzdGF0dXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic3RhdHVzIG9mIHRoZSBjb25kaXRpb25cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImtpbmQgb2YgdGhlIGNvbmRpdGlvblwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBvZENvbmRpdGlvblwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1BvZExpc3RcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHBvZHM7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3BvZHMubWRcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUG9kXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBvZFwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJQb2RMaXN0XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBvZExpc3RcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19Qb2RTcGVjXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFjdGl2ZURlYWRsaW5lU2Vjb25kc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiTG9uZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImNvbnRhaW5lcnNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIGNvbnRhaW5lcnMgYmVsb25naW5nIHRvIHRoZSBwb2Q7IGNhbm5vdCBiZSB1cGRhdGVkOyBjb250YWluZXJzIGNhbm5vdCBjdXJyZW50bHkgYmUgYWRkZWQgb3IgcmVtb3ZlZDsgdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgY29udGFpbmVyIGluIGEgUG9kOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9jb250YWluZXJzLm1kXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0NvbnRhaW5lclwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Db250YWluZXJcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJkbnNQb2xpY3lcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRE5TIHBvbGljeSBmb3IgY29udGFpbmVycyB3aXRoaW4gdGhlIHBvZDsgb25lIG9mICdDbHVzdGVyRmlyc3QnIG9yICdEZWZhdWx0J1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImhvc3RcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZGVwcmVjYXRlZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImhvc3ROZXR3b3JrXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJob3N0IG5ldHdvcmtpbmcgcmVxdWVzdGVkIGZvciB0aGlzIHBvZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImltYWdlUHVsbFNlY3JldHNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHJlZmVyZW5jZXMgdG8gc2VjcmV0cyBpbiB0aGUgc2FtZSBuYW1lc3BhY2UgYXZhaWxhYmxlIGZvciBwdWxsaW5nIHRoZSBjb250YWluZXIgaW1hZ2VzOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9pbWFnZXMubWQjc3BlY2lmeWluZy1pbWFnZXB1bGxzZWNyZXRzLW9uLWEtcG9kXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xvY2FsT2JqZWN0UmVmZXJlbmNlXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxvY2FsT2JqZWN0UmVmZXJlbmNlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibm9kZU5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibm9kZSByZXF1ZXN0ZWQgZm9yIHRoaXMgcG9kXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibm9kZVNlbGVjdG9yXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInNlbGVjdG9yIHdoaWNoIG11c3QgbWF0Y2ggYSBub2RlJ3MgbGFiZWxzIGZvciB0aGUgcG9kIHRvIGJlIHNjaGVkdWxlZCBvbiB0aGF0IG5vZGU7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL25vZGUtc2VsZWN0aW9uL1JFQURNRS5tZFwiLFxuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic2VsZWN0b3Igd2hpY2ggbXVzdCBtYXRjaCBhIG5vZGUncyBsYWJlbHMgZm9yIHRoZSBwb2QgdG8gYmUgc2NoZWR1bGVkIG9uIHRoYXQgbm9kZTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvbm9kZS1zZWxlY3Rpb24vUkVBRE1FLm1kXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiamF2YS51dGlsLk1hcFxcdTAwM2NTdHJpbmcsU3RyaW5nXFx1MDAzZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlc3RhcnRQb2xpY3lcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicmVzdGFydCBwb2xpY3kgZm9yIGFsbCBjb250YWluZXJzIHdpdGhpbiB0aGUgcG9kOyBvbmUgb2YgQWx3YXlzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2VydmljZUFjY291bnRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZGVwcmVjYXRlZDsgdXNlIHNlcnZpY2VBY2NvdW50TmFtZSBpbnN0ZWFkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2VydmljZUFjY291bnROYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWUgb2YgdGhlIFNlcnZpY2VBY2NvdW50IHRvIHVzZSB0byBydW4gdGhpcyBwb2Q7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy9kZXNpZ24vc2VydmljZV9hY2NvdW50cy5tZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInRlcm1pbmF0aW9uR3JhY2VQZXJpb2RTZWNvbmRzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJvcHRpb25hbCBkdXJhdGlvbiBpbiBzZWNvbmRzIHRoZSBwb2QgbmVlZHMgdG8gdGVybWluYXRlIGdyYWNlZnVsbHk7IG1heSBiZSBkZWNyZWFzZWQgaW4gZGVsZXRlIHJlcXVlc3Q7IHZhbHVlIG11c3QgYmUgbm9uLW5lZ2F0aXZlIGludGVnZXI7IHRoZSB2YWx1ZSB6ZXJvIGluZGljYXRlcyBkZWxldGUgaW1tZWRpYXRlbHk7IGlmIHRoaXMgdmFsdWUgaXMgbm90IHNldFwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcIkxvbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ2b2x1bWVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiB2b2x1bWVzIHRoYXQgY2FuIGJlIG1vdW50ZWQgYnkgY29udGFpbmVycyBiZWxvbmdpbmcgdG8gdGhlIHBvZDsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvdm9sdW1lcy5tZFwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Wb2x1bWVcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuVm9sdW1lXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUG9kU3BlY1wiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1BvZFN0YXR1c1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJjb25kaXRpb25zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiY3VycmVudCBzZXJ2aWNlIHN0YXRlIG9mIHBvZDsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvcG9kLXN0YXRlcy5tZCNwb2QtY29uZGl0aW9uc1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Qb2RDb25kaXRpb25cIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUG9kQ29uZGl0aW9uXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiY29udGFpbmVyU3RhdHVzZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIGNvbnRhaW5lciBzdGF0dXNlczsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvcG9kLXN0YXRlcy5tZCNjb250YWluZXItc3RhdHVzZXNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfQ29udGFpbmVyU3RhdHVzXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNvbnRhaW5lclN0YXR1c1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImhvc3RJUFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJJUCBhZGRyZXNzIG9mIHRoZSBob3N0IHRvIHdoaWNoIHRoZSBwb2QgaXMgYXNzaWduZWQ7IGVtcHR5IGlmIG5vdCB5ZXQgc2NoZWR1bGVkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWVzc2FnZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJodW1hbiByZWFkYWJsZSBtZXNzYWdlIGluZGljYXRpbmcgZGV0YWlscyBhYm91dCB3aHkgdGhlIHBvZCBpcyBpbiB0aGlzIGNvbmRpdGlvblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBoYXNlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImN1cnJlbnQgY29uZGl0aW9uIG9mIHRoZSBwb2Q7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3BvZC1zdGF0ZXMubWQjcG9kLXBoYXNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicG9kSVBcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSVAgYWRkcmVzcyBhbGxvY2F0ZWQgdG8gdGhlIHBvZDsgcm91dGFibGUgYXQgbGVhc3Qgd2l0aGluIHRoZSBjbHVzdGVyOyBlbXB0eSBpZiBub3QgeWV0IGFsbG9jYXRlZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlYXNvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCIoYnJpZWYtQ2FtZWxDYXNlKSByZWFzb24gaW5kaWNhdGluZyBkZXRhaWxzIGFib3V0IHdoeSB0aGUgcG9kIGlzIGluIHRoaXMgY29uZGl0aW9uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3RhcnRUaW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJGQyAzMzM5IGRhdGUgYW5kIHRpbWUgYXQgd2hpY2ggdGhlIG9iamVjdCB3YXMgYWNrbm93bGVkZ2VkIGJ5IHRoZSBLdWJlbGV0LiAgVGhpcyBpcyBiZWZvcmUgdGhlIEt1YmVsZXQgcHVsbGVkIHRoZSBjb250YWluZXIgaW1hZ2UocykgZm9yIHRoZSBwb2QuXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUG9kU3RhdHVzXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfUG9kVGVtcGxhdGVTcGVjXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3BlY1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUG9kU3BlY1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUG9kU3BlY1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBvZFRlbXBsYXRlU3BlY1wiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1Byb2JlXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImV4ZWNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0V4ZWNBY3Rpb25cIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkV4ZWNBY3Rpb25cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJodHRwR2V0XCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19IVFRQR2V0QWN0aW9uXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IVFRQR2V0QWN0aW9uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaW5pdGlhbERlbGF5U2Vjb25kc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibnVtYmVyIG9mIHNlY29uZHMgYWZ0ZXIgdGhlIGNvbnRhaW5lciBoYXMgc3RhcnRlZCBiZWZvcmUgbGl2ZW5lc3MgcHJvYmVzIGFyZSBpbml0aWF0ZWQ7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3BvZC1zdGF0ZXMubWQjY29udGFpbmVyLXByb2Jlc1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcIkxvbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0Y3BTb2NrZXRcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1RDUFNvY2tldEFjdGlvblwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuVENQU29ja2V0QWN0aW9uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidGltZW91dFNlY29uZHNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm51bWJlciBvZiBzZWNvbmRzIGFmdGVyIHdoaWNoIGxpdmVuZXNzIHByb2JlcyB0aW1lb3V0OyBkZWZhdWx0cyB0byAxIHNlY29uZDsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvcG9kLXN0YXRlcy5tZCNjb250YWluZXItcHJvYmVzXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiTG9uZ1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlByb2JlXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfUkJEVm9sdW1lU291cmNlXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImZzVHlwZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJmaWxlIHN5c3RlbSB0eXBlIHRvIG1vdW50XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaW1hZ2VcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicmFkb3MgaW1hZ2UgbmFtZTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy9yYmQvUkVBRE1FLm1kI2hvdy10by11c2UtaXRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXlyaW5nXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImtleXJpbmcgaXMgdGhlIHBhdGggdG8ga2V5IHJpbmcgZm9yIHJhZG9zIHVzZXI7IGRlZmF1bHQgaXMgL2V0Yy9jZXBoL2tleXJpbmc7IG9wdGlvbmFsOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2V4YW1wbGVzL3JiZC9SRUFETUUubWQjaG93LXRvLXVzZS1pdFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1vbml0b3JzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYSBjb2xsZWN0aW9uIG9mIENlcGggbW9uaXRvcnM7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZXhhbXBsZXMvcmJkL1JFQURNRS5tZCNob3ctdG8tdXNlLWl0XCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhIGNvbGxlY3Rpb24gb2YgQ2VwaCBtb25pdG9yczsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy9yYmQvUkVBRE1FLm1kI2hvdy10by11c2UtaXRcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwb29sXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJhZG9zIHBvb2wgbmFtZTsgZGVmYXVsdCBpcyByYmQ7IG9wdGlvbmFsOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2V4YW1wbGVzL3JiZC9SRUFETUUubWQjaG93LXRvLXVzZS1pdFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlYWRPbmx5XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJyYmQgdm9sdW1lIHRvIGJlIG1vdW50ZWQgd2l0aCByZWFkLW9ubHkgcGVybWlzc2lvbnM7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZXhhbXBsZXMvcmJkL1JFQURNRS5tZCNob3ctdG8tdXNlLWl0XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2VjcmV0UmVmXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Mb2NhbE9iamVjdFJlZmVyZW5jZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTG9jYWxPYmplY3RSZWZlcmVuY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1c2VyXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJhZG9zIHVzZXIgbmFtZTsgZGVmYXVsdCBpcyBhZG1pbjsgb3B0aW9uYWw7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZXhhbXBsZXMvcmJkL1JFQURNRS5tZCNob3ctdG8tdXNlLWl0XCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUkJEVm9sdW1lU291cmNlXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfUmVwbGljYXRpb25Db250cm9sbGVyXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJSZXBsaWNhdGlvbkNvbnRyb2xsZXJcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNwZWNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1JlcGxpY2F0aW9uQ29udHJvbGxlclNwZWNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJlcGxpY2F0aW9uQ29udHJvbGxlclNwZWNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzdGF0dXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1JlcGxpY2F0aW9uQ29udHJvbGxlclN0YXR1c1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVwbGljYXRpb25Db250cm9sbGVyU3RhdHVzXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVwbGljYXRpb25Db250cm9sbGVyXCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfUmVwbGljYXRpb25Db250cm9sbGVyTGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgcmVwbGljYXRpb24gY29udHJvbGxlcnM7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3JlcGxpY2F0aW9uLWNvbnRyb2xsZXIubWRcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUmVwbGljYXRpb25Db250cm9sbGVyXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJlcGxpY2F0aW9uQ29udHJvbGxlclwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJSZXBsaWNhdGlvbkNvbnRyb2xsZXJMaXN0XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJlcGxpY2F0aW9uQ29udHJvbGxlckxpc3RcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19SZXBsaWNhdGlvbkNvbnRyb2xsZXJTcGVjXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcInJlcGxpY2FzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJudW1iZXIgb2YgcmVwbGljYXMgZGVzaXJlZDsgZGVmYXVsdHMgdG8gMTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvcmVwbGljYXRpb24tY29udHJvbGxlci5tZCN3aGF0LWlzLWEtcmVwbGljYXRpb24tY29udHJvbGxlclwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNlbGVjdG9yXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxhYmVsIGtleXMgYW5kIHZhbHVlcyB0aGF0IG11c3QgbWF0Y2ggaW4gb3JkZXIgdG8gYmUgY29udHJvbGxlZCBieSB0aGlzIHJlcGxpY2F0aW9uIGNvbnRyb2xsZXJcIixcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxhYmVsIGtleXMgYW5kIHZhbHVlcyB0aGF0IG11c3QgbWF0Y2ggaW4gb3JkZXIgdG8gYmUgY29udHJvbGxlZCBieSB0aGlzIHJlcGxpY2F0aW9uIGNvbnRyb2xsZXJcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJqYXZhLnV0aWwuTWFwXFx1MDAzY1N0cmluZyxTdHJpbmdcXHUwMDNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidGVtcGxhdGVcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1BvZFRlbXBsYXRlU3BlY1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUG9kVGVtcGxhdGVTcGVjXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVwbGljYXRpb25Db250cm9sbGVyU3BlY1wiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1JlcGxpY2F0aW9uQ29udHJvbGxlclN0YXR1c1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJvYnNlcnZlZEdlbmVyYXRpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJlZmxlY3RzIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBtb3N0IHJlY2VudGx5IG9ic2VydmVkIHJlcGxpY2F0aW9uIGNvbnRyb2xsZXJcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJMb25nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVwbGljYXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm1vc3QgcmVjZW50bHkgb2JlcnZlZCBudW1iZXIgb2YgcmVwbGljYXM7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3JlcGxpY2F0aW9uLWNvbnRyb2xsZXIubWQjd2hhdC1pcy1hLXJlcGxpY2F0aW9uLWNvbnRyb2xsZXJcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SZXBsaWNhdGlvbkNvbnRyb2xsZXJTdGF0dXNcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19SZXNvdXJjZVF1b3RhXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJSZXNvdXJjZVF1b3RhXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzcGVjXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19SZXNvdXJjZVF1b3RhU3BlY1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVzb3VyY2VRdW90YVNwZWNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzdGF0dXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1Jlc291cmNlUXVvdGFTdGF0dXNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJlc291cmNlUXVvdGFTdGF0dXNcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SZXNvdXJjZVF1b3RhXCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfUmVzb3VyY2VRdW90YUxpc3RcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJpdGVtcyBpcyBhIGxpc3Qgb2YgUmVzb3VyY2VRdW90YSBvYmplY3RzOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvZGVzaWduL2FkbWlzc2lvbl9jb250cm9sX3Jlc291cmNlX3F1b3RhLm1kI2FkbWlzc2lvbmNvbnRyb2wtcGx1Z2luLXJlc291cmNlcXVvdGFcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUmVzb3VyY2VRdW90YVwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SZXNvdXJjZVF1b3RhXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlJlc291cmNlUXVvdGFMaXN0XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJlc291cmNlUXVvdGFMaXN0XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfUmVzb3VyY2VRdW90YVNwZWNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiaGFyZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJoYXJkIGlzIHRoZSBzZXQgb2YgZGVzaXJlZCBoYXJkIGxpbWl0cyBmb3IgZWFjaCBuYW1lZCByZXNvdXJjZTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL2Rlc2lnbi9hZG1pc3Npb25fY29udHJvbF9yZXNvdXJjZV9xdW90YS5tZCNhZG1pc3Npb25jb250cm9sLXBsdWdpbi1yZXNvdXJjZXF1b3RhXCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX3Jlc291cmNlX1F1YW50aXR5XCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlF1YW50aXR5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiamF2YS51dGlsLk1hcFxcdTAwM2NTdHJpbmcsaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5RdWFudGl0eVxcdTAwM2VcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SZXNvdXJjZVF1b3RhU3BlY1wiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1Jlc291cmNlUXVvdGFTdGF0dXNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiaGFyZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJoYXJkIGlzIHRoZSBzZXQgb2YgZW5mb3JjZWQgaGFyZCBsaW1pdHMgZm9yIGVhY2ggbmFtZWQgcmVzb3VyY2U7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy9kZXNpZ24vYWRtaXNzaW9uX2NvbnRyb2xfcmVzb3VyY2VfcXVvdGEubWQjYWRtaXNzaW9uY29udHJvbC1wbHVnaW4tcmVzb3VyY2VxdW90YVwiLFxuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19yZXNvdXJjZV9RdWFudGl0eVwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5RdWFudGl0eVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImphdmEudXRpbC5NYXBcXHUwMDNjU3RyaW5nLGlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUXVhbnRpdHlcXHUwMDNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidXNlZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ1c2VkIGlzIHRoZSBjdXJyZW50IG9ic2VydmVkIHRvdGFsIHVzYWdlIG9mIHRoZSByZXNvdXJjZSBpbiB0aGUgbmFtZXNwYWNlXCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX3Jlc291cmNlX1F1YW50aXR5XCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlF1YW50aXR5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiamF2YS51dGlsLk1hcFxcdTAwM2NTdHJpbmcsaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5RdWFudGl0eVxcdTAwM2VcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SZXNvdXJjZVF1b3RhU3RhdHVzXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfUmVzb3VyY2VSZXF1aXJlbWVudHNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwibGltaXRzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk1heGltdW0gYW1vdW50IG9mIGNvbXB1dGUgcmVzb3VyY2VzIGFsbG93ZWQ7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy9kZXNpZ24vcmVzb3VyY2VzLm1kI3Jlc291cmNlLXNwZWNpZmljYXRpb25zXCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX3Jlc291cmNlX1F1YW50aXR5XCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlF1YW50aXR5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiamF2YS51dGlsLk1hcFxcdTAwM2NTdHJpbmcsaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5RdWFudGl0eVxcdTAwM2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZXF1ZXN0c1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJNaW5pbXVtIGFtb3VudCBvZiByZXNvdXJjZXMgcmVxdWVzdGVkOyBpZiBSZXF1ZXN0cyBpcyBvbWl0dGVkIGZvciBhIGNvbnRhaW5lclwiLFxuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19yZXNvdXJjZV9RdWFudGl0eVwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5RdWFudGl0eVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImphdmEudXRpbC5NYXBcXHUwMDNjU3RyaW5nLGlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUXVhbnRpdHlcXHUwMDNlXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVzb3VyY2VSZXF1aXJlbWVudHNcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19SdW5Bc1VzZXJTdHJhdGVneU9wdGlvbnNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzdHJhdGVneSB1c2VkIHRvIGdlbmVyYXRlIFJ1bkFzVXNlclwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInVpZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIHVpZCB0byBhbHdheXMgcnVuIGFzOyByZXF1aXJlZCBmb3IgTXVzdFJ1bkFzXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiTG9uZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInVpZFJhbmdlTWF4XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJtYXggdmFsdWUgZm9yIHJhbmdlIGJhc2VkIGFsbG9jYXRvcnNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJMb25nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidWlkUmFuZ2VNaW5cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm1pbiB2YWx1ZSBmb3IgcmFuZ2UgYmFzZWQgYWxsb2NhdG9yc1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcIkxvbmdcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SdW5Bc1VzZXJTdHJhdGVneU9wdGlvbnNcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19TRUxpbnV4Q29udGV4dFN0cmF0ZWd5T3B0aW9uc1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJzZUxpbnV4T3B0aW9uc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfU0VMaW51eE9wdGlvbnNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNFTGludXhPcHRpb25zXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzdHJhdGVneSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBTRUxpbnV4IGNvbnRleHRcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TRUxpbnV4Q29udGV4dFN0cmF0ZWd5T3B0aW9uc1wiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1NFTGludXhPcHRpb25zXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImxldmVsXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBsZXZlbCBsYWJlbCB0byBhcHBseSB0byB0aGUgY29udGFpbmVyOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9sYWJlbHMubWRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyb2xlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSByb2xlIGxhYmVsIHRvIGFwcGx5IHRvIHRoZSBjb250YWluZXI7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL2xhYmVscy5tZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIHR5cGUgbGFiZWwgdG8gYXBwbHkgdG8gdGhlIGNvbnRhaW5lcjsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvbGFiZWxzLm1kXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidXNlclwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgdXNlciBsYWJlbCB0byBhcHBseSB0byB0aGUgY29udGFpbmVyOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9sYWJlbHMubWRcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TRUxpbnV4T3B0aW9uc1wiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1NlY3JldFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJkYXRhXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImRhdGEgY29udGFpbnMgdGhlIHNlY3JldCBkYXRhLiAgRWFjaCBrZXkgbXVzdCBiZSBhIHZhbGlkIEROU19TVUJET01BSU4gb3IgbGVhZGluZyBkb3QgZm9sbG93ZWQgYnkgdmFsaWQgRE5TX1NVQkRPTUFJTi4gIEVhY2ggdmFsdWUgbXVzdCBiZSBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBhcyBkZXNjcmliZWQgaW4gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ2NDgjc2VjdGlvbi00XCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJkYXRhIGNvbnRhaW5zIHRoZSBzZWNyZXQgZGF0YS4gIEVhY2gga2V5IG11c3QgYmUgYSB2YWxpZCBETlNfU1VCRE9NQUlOIG9yIGxlYWRpbmcgZG90IGZvbGxvd2VkIGJ5IHZhbGlkIEROU19TVUJET01BSU4uICBFYWNoIHZhbHVlIG11c3QgYmUgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgYXMgZGVzY3JpYmVkIGluIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0NjQ4I3NlY3Rpb24tNFwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImphdmEudXRpbC5NYXBcXHUwMDNjU3RyaW5nLFN0cmluZ1xcdTAwM2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiU2VjcmV0XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInR5cGUgZmFjaWxpdGF0ZXMgcHJvZ3JhbW1hdGljIGhhbmRsaW5nIG9mIHNlY3JldCBkYXRhXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VjcmV0XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfU2VjcmV0TGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIml0ZW1zIGlzIGEgbGlzdCBvZiBzZWNyZXQgb2JqZWN0czsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvc2VjcmV0cy5tZFwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19TZWNyZXRcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VjcmV0XCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlNlY3JldExpc3RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VjcmV0TGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1NlY3JldFZvbHVtZVNvdXJjZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJzZWNyZXROYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInNlY3JldE5hbWUgaXMgdGhlIG5hbWUgb2YgYSBzZWNyZXQgaW4gdGhlIHBvZCdzIG5hbWVzcGFjZTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvdm9sdW1lcy5tZCNzZWNyZXRzXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VjcmV0Vm9sdW1lU291cmNlXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfU2VjdXJpdHlDb250ZXh0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImNhcGFiaWxpdGllc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfQ2FwYWJpbGl0aWVzXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5DYXBhYmlsaXRpZXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwcml2aWxlZ2VkXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJydW4gdGhlIGNvbnRhaW5lciBpbiBwcml2aWxlZ2VkIG1vZGU7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy9kZXNpZ24vc2VjdXJpdHlfY29udGV4dC5tZCNzZWN1cml0eS1jb250ZXh0XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicnVuQXNOb25Sb290XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJpbmRpY2F0ZXMgdGhlIGNvbnRhaW5lciBtdXN0IGJlIHJ1biBhcyBhIG5vbi1yb290IHVzZXIgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIHJ1bkFzVXNlciBvciBpbiB0aGUgaW1hZ2Ugc3BlY2lmaWNhdGlvblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJ1bkFzVXNlclwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIHVzZXIgaWQgdGhhdCBydW5zIHRoZSBmaXJzdCBwcm9jZXNzIGluIHRoZSBjb250YWluZXI7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy9kZXNpZ24vc2VjdXJpdHlfY29udGV4dC5tZCNzZWN1cml0eS1jb250ZXh0XCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiTG9uZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNlTGludXhPcHRpb25zXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19TRUxpbnV4T3B0aW9uc1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU0VMaW51eE9wdGlvbnNcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZWN1cml0eUNvbnRleHRcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19TZWN1cml0eUNvbnRleHRDb25zdHJhaW50c1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhbGxvd0hvc3REaXJWb2x1bWVQbHVnaW5cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFsbG93IHRoZSB1c2Ugb2YgdGhlIGhvc3QgZGlyIHZvbHVtZSBwbHVnaW5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJhbGxvd0hvc3ROZXR3b3JrXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbGxvdyB0aGUgdXNlIG9mIHRoZSBob3N0TmV0d29yayBpbiB0aGUgcG9kIHNwZWNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJhbGxvd0hvc3RQb3J0c1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYWxsb3cgdGhlIHVzZSBvZiB0aGUgaG9zdCBwb3J0cyBpbiB0aGUgY29udGFpbmVyc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImFsbG93UHJpdmlsZWdlZENvbnRhaW5lclwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYWxsb3cgY29udGFpbmVycyB0byBydW4gYXMgcHJpdmlsZWdlZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImFsbG93ZWRDYXBhYmlsaXRpZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJjYXBhYmlsaXRpZXMgdGhhdCBhcmUgYWxsb3dlZCB0byBiZSBhZGRlZFwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiY2FwYWJpbGl0aWVzIHRoYXQgYXJlIGFsbG93ZWQgdG8gYmUgYWRkZWRcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJncm91cHNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJncm91cHMgYWxsb3dlZCB0byB1c2UgdGhpcyBTZWN1cml0eUNvbnRleHRDb25zdHJhaW50c1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZ3JvdXBzIGFsbG93ZWQgdG8gdXNlIHRoaXMgU2VjdXJpdHlDb250ZXh0Q29uc3RyYWludHNcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiU2VjdXJpdHlDb250ZXh0Q29uc3RyYWludHNcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJ1bkFzVXNlclwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUnVuQXNVc2VyU3RyYXRlZ3lPcHRpb25zXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SdW5Bc1VzZXJTdHJhdGVneU9wdGlvbnNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZUxpbnV4Q29udGV4dFwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfU0VMaW51eENvbnRleHRTdHJhdGVneU9wdGlvbnNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNFTGludXhDb250ZXh0U3RyYXRlZ3lPcHRpb25zXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidXNlcnNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ1c2VycyBhbGxvd2VkIHRvIHVzZSB0aGlzIFNlY3VyaXR5Q29udGV4dENvbnN0cmFpbnRzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ1c2VycyBhbGxvd2VkIHRvIHVzZSB0aGlzIFNlY3VyaXR5Q29udGV4dENvbnN0cmFpbnRzXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VjdXJpdHlDb250ZXh0Q29uc3RyYWludHNcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19TZWN1cml0eUNvbnRleHRDb25zdHJhaW50c0xpc3RcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfU2VjdXJpdHlDb250ZXh0Q29uc3RyYWludHNcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VjdXJpdHlDb250ZXh0Q29uc3RyYWludHNcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiU2VjdXJpdHlDb250ZXh0Q29uc3RyYWludHNMaXN0XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlY3VyaXR5Q29udGV4dENvbnN0cmFpbnRzTGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1NlcnZpY2VcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlNlcnZpY2VcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNwZWNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1NlcnZpY2VTcGVjXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZXJ2aWNlU3BlY1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInN0YXR1c1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfU2VydmljZVN0YXR1c1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VydmljZVN0YXR1c1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlcnZpY2VcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19TZXJ2aWNlQWNjb3VudFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpbWFnZVB1bGxTZWNyZXRzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiByZWZlcmVuY2VzIHRvIHNlY3JldHMgaW4gdGhlIHNhbWUgbmFtZXNwYWNlIGF2YWlsYWJsZSBmb3IgcHVsbGluZyBjb250YWluZXIgaW1hZ2VzOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9zZWNyZXRzLm1kI21hbnVhbGx5LXNwZWNpZnlpbmctYW4taW1hZ2VwdWxsc2VjcmV0XCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xvY2FsT2JqZWN0UmVmZXJlbmNlXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxvY2FsT2JqZWN0UmVmZXJlbmNlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlNlcnZpY2VBY2NvdW50XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZWNyZXRzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBzZWNyZXRzIHRoYXQgY2FuIGJlIHVzZWQgYnkgcG9kcyBydW5uaW5nIGFzIHRoaXMgc2VydmljZSBhY2NvdW50OyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9zZWNyZXRzLm1kXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdFJlZmVyZW5jZVwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RSZWZlcmVuY2VcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZXJ2aWNlQWNjb3VudFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1NlcnZpY2VBY2NvdW50TGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgU2VydmljZUFjY291bnRzOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvZGVzaWduL3NlcnZpY2VfYWNjb3VudHMubWQjc2VydmljZS1hY2NvdW50c1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19TZXJ2aWNlQWNjb3VudFwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZXJ2aWNlQWNjb3VudFwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJTZXJ2aWNlQWNjb3VudExpc3RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VydmljZUFjY291bnRMaXN0XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfU2VydmljZUxpc3RcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHNlcnZpY2VzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1NlcnZpY2VcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VydmljZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJTZXJ2aWNlTGlzdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZXJ2aWNlTGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1NlcnZpY2VQb3J0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIG5hbWUgb2YgdGhpcyBwb3J0OyBvcHRpb25hbCBpZiBvbmx5IG9uZSBwb3J0IGlzIGRlZmluZWRcIixcbiAgICAgICAgICAgIFwibWF4TGVuZ3RoXCI6IDYzLFxuICAgICAgICAgICAgXCJwYXR0ZXJuXCI6IFwiXlthLXowLTldKFstYS16MC05XSpbYS16MC05XSk/JFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm5vZGVQb3J0XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgcG9ydCBvbiBlYWNoIG5vZGUgb24gd2hpY2ggdGhpcyBzZXJ2aWNlIGlzIGV4cG9zZWQgd2hlbiB0eXBlPU5vZGVQb3J0IG9yIExvYWRCYWxhbmNlcjsgdXN1YWxseSBhc3NpZ25lZCBieSB0aGUgc3lzdGVtOyBpZiBzcGVjaWZpZWRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwb3J0XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgcG9ydCBudW1iZXIgdGhhdCBpcyBleHBvc2VkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicHJvdG9jb2xcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIHByb3RvY29sIHVzZWQgYnkgdGhpcyBwb3J0OyBtdXN0IGJlIFVEUCBvciBUQ1A7IFRDUCBpZiB1bnNwZWNpZmllZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInRhcmdldFBvcnRcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX3V0aWxfSW50T3JTdHJpbmdcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkludE9yU3RyaW5nXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VydmljZVBvcnRcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19TZXJ2aWNlU3BlY1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJjbHVzdGVySVBcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSVAgYWRkcmVzcyBvZiB0aGUgc2VydmljZTsgdXN1YWxseSBhc3NpZ25lZCBieSB0aGUgc3lzdGVtOyBpZiBzcGVjaWZpZWRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJkZXByZWNhdGVkUHVibGljSVBzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZGVwcmVjYXRlZC4gZXh0ZXJuYWxseSB2aXNpYmxlIElQcyAoZS5nLiBsb2FkIGJhbGFuY2VycykgdGhhdCBzaG91bGQgYmUgcHJveGllZCB0byB0aGlzIHNlcnZpY2VcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImRlcHJlY2F0ZWQuIGV4dGVybmFsbHkgdmlzaWJsZSBJUHMgKGUuZy4gbG9hZCBiYWxhbmNlcnMpIHRoYXQgc2hvdWxkIGJlIHByb3hpZWQgdG8gdGhpcyBzZXJ2aWNlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicG9ydGFsSVBcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZGVwcmVjYXRlZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBvcnRzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicG9ydHMgZXhwb3NlZCBieSB0aGUgc2VydmljZTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvc2VydmljZXMubWQjdmlydHVhbC1pcHMtYW5kLXNlcnZpY2UtcHJveGllc1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19TZXJ2aWNlUG9ydFwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZXJ2aWNlUG9ydFwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNlbGVjdG9yXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxhYmVsIGtleXMgYW5kIHZhbHVlcyB0aGF0IG11c3QgbWF0Y2ggaW4gb3JkZXIgdG8gcmVjZWl2ZSB0cmFmZmljIGZvciB0aGlzIHNlcnZpY2U7IGlmIGVtcHR5XCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsYWJlbCBrZXlzIGFuZCB2YWx1ZXMgdGhhdCBtdXN0IG1hdGNoIGluIG9yZGVyIHRvIHJlY2VpdmUgdHJhZmZpYyBmb3IgdGhpcyBzZXJ2aWNlOyBpZiBlbXB0eVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImphdmEudXRpbC5NYXBcXHUwMDNjU3RyaW5nLFN0cmluZ1xcdTAwM2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZXNzaW9uQWZmaW5pdHlcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZW5hYmxlIGNsaWVudCBJUCBiYXNlZCBzZXNzaW9uIGFmZmluaXR5OyBtdXN0IGJlIENsaWVudElQIG9yIE5vbmU7IGRlZmF1bHRzIHRvIE5vbmU7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3NlcnZpY2VzLm1kI3ZpcnR1YWwtaXBzLWFuZC1zZXJ2aWNlLXByb3hpZXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInR5cGUgb2YgdGhpcyBzZXJ2aWNlOyBtdXN0IGJlIENsdXN0ZXJJUFwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlcnZpY2VTcGVjXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfU2VydmljZVN0YXR1c1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJsb2FkQmFsYW5jZXJcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xvYWRCYWxhbmNlclN0YXR1c1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTG9hZEJhbGFuY2VyU3RhdHVzXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VydmljZVN0YXR1c1wiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1N0YXR1c1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjb2RlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzdWdnZXN0ZWQgSFRUUCByZXR1cm4gY29kZSBmb3IgdGhpcyBzdGF0dXM7IDAgaWYgbm90IHNldFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImRldGFpbHNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1N0YXR1c0RldGFpbHNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlN0YXR1c0RldGFpbHNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiU3RhdHVzXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWVzc2FnZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgc3RhdHVzIG9mIHRoaXMgb3BlcmF0aW9uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlYXNvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJtYWNoaW5lLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHdoeSB0aGlzIG9wZXJhdGlvbiBpcyBpbiB0aGUgJ0ZhaWx1cmUnIHN0YXR1czsgaWYgdGhpcyB2YWx1ZSBpcyBlbXB0eSB0aGVyZSBpcyBubyBpbmZvcm1hdGlvbiBhdmFpbGFibGU7IGEgcmVhc29uIGNsYXJpZmllcyBhbiBIVFRQIHN0YXR1cyBjb2RlIGJ1dCBkb2VzIG5vdCBvdmVycmlkZSBpdFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInN0YXR1c1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzdGF0dXMgb2YgdGhlIG9wZXJhdGlvbjsgZWl0aGVyIFN1Y2Nlc3NcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TdGF0dXNcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19TdGF0dXNDYXVzZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJmaWVsZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJmaWVsZCBvZiB0aGUgcmVzb3VyY2UgdGhhdCBoYXMgY2F1c2VkIHRoaXMgZXJyb3JcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXNzYWdlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoZSBjYXVzZSBvZiB0aGUgZXJyb3I7IHRoaXMgZmllbGQgbWF5IGJlIHByZXNlbnRlZCBhcy1pcyB0byBhIHJlYWRlclwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlYXNvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJtYWNoaW5lLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoZSBjYXVzZSBvZiB0aGUgZXJyb3I7IGlmIHRoaXMgdmFsdWUgaXMgZW1wdHkgdGhlcmUgaXMgbm8gaW5mb3JtYXRpb24gYXZhaWxhYmxlXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU3RhdHVzQ2F1c2VcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19TdGF0dXNEZXRhaWxzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImNhdXNlc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBDYXVzZXMgYXJyYXkgaW5jbHVkZXMgbW9yZSBkZXRhaWxzIGFzc29jaWF0ZWQgd2l0aCB0aGUgU3RhdHVzUmVhc29uIGZhaWx1cmU7IG5vdCBhbGwgU3RhdHVzUmVhc29ucyBtYXkgcHJvdmlkZSBkZXRhaWxlZCBjYXVzZXNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfU3RhdHVzQ2F1c2VcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU3RhdHVzQ2F1c2VcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBraW5kIGF0dHJpYnV0ZSBvZiB0aGUgcmVzb3VyY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdGF0dXMgU3RhdHVzUmVhc29uOyBvbiBzb21lIG9wZXJhdGlvbnMgbWF5IGRpZmZlciBmcm9tIHRoZSByZXF1ZXN0ZWQgcmVzb3VyY2UgS2luZDsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCN0eXBlcy1raW5kc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIG5hbWUgYXR0cmlidXRlIG9mIHRoZSByZXNvdXJjZSBhc3NvY2lhdGVkIHdpdGggdGhlIHN0YXR1cyBTdGF0dXNSZWFzb24gKHdoZW4gdGhlcmUgaXMgYSBzaW5nbGUgbmFtZSB3aGljaCBjYW4gYmUgZGVzY3JpYmVkKVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJldHJ5QWZ0ZXJTZWNvbmRzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgbnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlIHRoZSBjbGllbnQgc2hvdWxkIGF0dGVtcHQgdG8gcmV0cnkgdGhpcyBvcGVyYXRpb25cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TdGF0dXNEZXRhaWxzXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfVENQU29ja2V0QWN0aW9uXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcInBvcnRcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX3V0aWxfSW50T3JTdHJpbmdcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkludE9yU3RyaW5nXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuVENQU29ja2V0QWN0aW9uXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfVHlwZU1ldGFcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ2ZXJzaW9uIG9mIHRoZSBzY2hlbWEgdGhlIG9iamVjdCBzaG91bGQgaGF2ZTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCNyZXNvdXJjZXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImtpbmQgb2Ygb2JqZWN0XCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuVHlwZU1ldGFcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19Wb2x1bWVcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXdzRWxhc3RpY0Jsb2NrU3RvcmVcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0FXU0VsYXN0aWNCbG9ja1N0b3JlVm9sdW1lU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5BV1NFbGFzdGljQmxvY2tTdG9yZVZvbHVtZVNvdXJjZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImNlcGhmc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfQ2VwaEZTVm9sdW1lU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5DZXBoRlNWb2x1bWVTb3VyY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJlbXB0eURpclwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRW1wdHlEaXJWb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVtcHR5RGlyVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2NlUGVyc2lzdGVudERpc2tcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0dDRVBlcnNpc3RlbnREaXNrVm9sdW1lU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5HQ0VQZXJzaXN0ZW50RGlza1ZvbHVtZVNvdXJjZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdpdFJlcG9cIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0dpdFJlcG9Wb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkdpdFJlcG9Wb2x1bWVTb3VyY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnbHVzdGVyZnNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0dsdXN0ZXJmc1ZvbHVtZVNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuR2x1c3RlcmZzVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaG9zdFBhdGhcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0hvc3RQYXRoVm9sdW1lU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Ib3N0UGF0aFZvbHVtZVNvdXJjZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImlzY3NpXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19JU0NTSVZvbHVtZVNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSVNDU0lWb2x1bWVTb3VyY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTWV0YWRhdGFWb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk1ldGFkYXRhVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ2b2x1bWUgbmFtZTsgbXVzdCBiZSBhIEROU19MQUJFTCBhbmQgdW5pcXVlIHdpdGhpbiB0aGUgcG9kOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9pZGVudGlmaWVycy5tZCNuYW1lc1wiLFxuICAgICAgICAgICAgXCJtYXhMZW5ndGhcIjogNjMsXG4gICAgICAgICAgICBcInBhdHRlcm5cIjogXCJeW2EtejAtOV0oWy1hLXowLTldKlthLXowLTldKT8kXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibmZzXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19ORlNWb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5GU1ZvbHVtZVNvdXJjZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBlcnNpc3RlbnRWb2x1bWVDbGFpbVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUGVyc2lzdGVudFZvbHVtZUNsYWltVm9sdW1lU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1Wb2x1bWVTb3VyY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyYmRcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1JCRFZvbHVtZVNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUkJEVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2VjcmV0XCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19TZWNyZXRWb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlY3JldFZvbHVtZVNvdXJjZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlZvbHVtZVwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1ZvbHVtZU1vdW50XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcIm1vdW50UGF0aFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJwYXRoIHdpdGhpbiB0aGUgY29udGFpbmVyIGF0IHdoaWNoIHRoZSB2b2x1bWUgc2hvdWxkIGJlIG1vdW50ZWRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWUgb2YgdGhlIHZvbHVtZSB0byBtb3VudFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlYWRPbmx5XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJtb3VudGVkIHJlYWQtb25seSBpZiB0cnVlXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuVm9sdW1lTW91bnRcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19Wb2x1bWVTb3VyY2VcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXdzRWxhc3RpY0Jsb2NrU3RvcmVcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0FXU0VsYXN0aWNCbG9ja1N0b3JlVm9sdW1lU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5BV1NFbGFzdGljQmxvY2tTdG9yZVZvbHVtZVNvdXJjZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImNlcGhmc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfQ2VwaEZTVm9sdW1lU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5DZXBoRlNWb2x1bWVTb3VyY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJlbXB0eURpclwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRW1wdHlEaXJWb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVtcHR5RGlyVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2NlUGVyc2lzdGVudERpc2tcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0dDRVBlcnNpc3RlbnREaXNrVm9sdW1lU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5HQ0VQZXJzaXN0ZW50RGlza1ZvbHVtZVNvdXJjZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdpdFJlcG9cIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0dpdFJlcG9Wb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkdpdFJlcG9Wb2x1bWVTb3VyY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnbHVzdGVyZnNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0dsdXN0ZXJmc1ZvbHVtZVNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuR2x1c3RlcmZzVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaG9zdFBhdGhcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0hvc3RQYXRoVm9sdW1lU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Ib3N0UGF0aFZvbHVtZVNvdXJjZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImlzY3NpXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19JU0NTSVZvbHVtZVNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSVNDU0lWb2x1bWVTb3VyY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTWV0YWRhdGFWb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk1ldGFkYXRhVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibmZzXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19ORlNWb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5GU1ZvbHVtZVNvdXJjZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBlcnNpc3RlbnRWb2x1bWVDbGFpbVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUGVyc2lzdGVudFZvbHVtZUNsYWltVm9sdW1lU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1Wb2x1bWVTb3VyY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyYmRcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1JCRFZvbHVtZVNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUkJEVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2VjcmV0XCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19TZWNyZXRWb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlY3JldFZvbHVtZVNvdXJjZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlZvbHVtZVNvdXJjZVwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX2NvbmZpZ19BdXRoSW5mb1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJjbGllbnQtY2VydGlmaWNhdGVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiY2xpZW50LWNlcnRpZmljYXRlLWRhdGFcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiY2xpZW50LWtleVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjbGllbnQta2V5LWRhdGFcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZXh0ZW5zaW9uc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19jb25maWdfTmFtZWRFeHRlbnNpb25cIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTmFtZWRFeHRlbnNpb25cIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXNzd29yZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0b2tlblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1c2VybmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5BdXRoSW5mb1wiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX2NvbmZpZ19DbHVzdGVyXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaS12ZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImNlcnRpZmljYXRlLWF1dGhvcml0eVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjZXJ0aWZpY2F0ZS1hdXRob3JpdHktZGF0YVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJleHRlbnNpb25zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX2NvbmZpZ19OYW1lZEV4dGVuc2lvblwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5OYW1lZEV4dGVuc2lvblwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImluc2VjdXJlLXNraXAtdGxzLXZlcmlmeVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2VydmVyXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNsdXN0ZXJcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19jb25maWdfQ29uZmlnXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiY2x1c3RlcnNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfY29uZmlnX05hbWVkQ2x1c3RlclwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5OYW1lZENsdXN0ZXJcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjb250ZXh0c1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19jb25maWdfTmFtZWRDb250ZXh0XCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5hbWVkQ29udGV4dFwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImN1cnJlbnQtY29udGV4dFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJleHRlbnNpb25zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX2NvbmZpZ19OYW1lZEV4dGVuc2lvblwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5OYW1lZEV4dGVuc2lvblwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicHJlZmVyZW5jZXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX2NvbmZpZ19QcmVmZXJlbmNlc1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUHJlZmVyZW5jZXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1c2Vyc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19jb25maWdfTmFtZWRBdXRoSW5mb1wiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5OYW1lZEF1dGhJbmZvXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ29uZmlnXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfY29uZmlnX0NvbnRleHRcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiY2x1c3RlclwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJleHRlbnNpb25zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX2NvbmZpZ19OYW1lZEV4dGVuc2lvblwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5OYW1lZEV4dGVuc2lvblwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm5hbWVzcGFjZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1c2VyXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNvbnRleHRcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19jb25maWdfTmFtZWRBdXRoSW5mb1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInVzZXJcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX2NvbmZpZ19BdXRoSW5mb1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQXV0aEluZm9cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5OYW1lZEF1dGhJbmZvXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfY29uZmlnX05hbWVkQ2x1c3RlclwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJjbHVzdGVyXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19jb25maWdfQ2x1c3RlclwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ2x1c3RlclwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTmFtZWRDbHVzdGVyXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfY29uZmlnX05hbWVkQ29udGV4dFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJjb250ZXh0XCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19jb25maWdfQ29udGV4dFwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ29udGV4dFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTmFtZWRDb250ZXh0XCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfY29uZmlnX05hbWVkRXh0ZW5zaW9uXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImV4dGVuc2lvblwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfcnVudGltZV9SYXdFeHRlbnNpb25cIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5OYW1lZEV4dGVuc2lvblwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX2NvbmZpZ19QcmVmZXJlbmNlc1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJjb2xvcnNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImV4dGVuc2lvbnNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfY29uZmlnX05hbWVkRXh0ZW5zaW9uXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5hbWVkRXh0ZW5zaW9uXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUHJlZmVyZW5jZXNcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19yZXNvdXJjZV9RdWFudGl0eVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJBbW91bnRcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zcGV0ZXJfaW5mX0RlY1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5EZWNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJGb3JtYXRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUXVhbnRpdHlcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19ydW50aW1lX1Jhd0V4dGVuc2lvblwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJSYXdKU09OXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfdXRpbF9JbnRPclN0cmluZ1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJJbnRWYWxcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIktpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIlN0clZhbFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5JbnRPclN0cmluZ1wiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX3dhdGNoX1dhdGNoRXZlbnRcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwib2JqZWN0XCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19ydW50aW1lX1Jhd0V4dGVuc2lvblwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSB0eXBlIG9mIHdhdGNoIGV2ZW50OyBtYXkgYmUgQURERURcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5XYXRjaEV2ZW50XCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2F1dGhvcml6YXRpb25fQXV0aG9yaXphdGlvbkF0dHJpYnV0ZXNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiY29udGVudFwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfcnVudGltZV9SYXdFeHRlbnNpb25cIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibmFtZXNwYWNlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWVzcGFjZSBvZiB0aGUgYWN0aW9uIGJlaW5nIHJlcXVlc3RlZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlc291cmNlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9uZSBvZiB0aGUgZXhpc3RpbmcgcmVzb3VyY2UgdHlwZXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZXNvdXJjZU5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibmFtZSBvZiB0aGUgcmVzb3VyY2UgYmVpbmcgcmVxdWVzdGVkIGZvciBhIGdldCBvciBkZWxldGVcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ2ZXJiXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9uZSBvZiBnZXRcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkF1dGhvcml6YXRpb25BdHRyaWJ1dGVzXCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2F1dGhvcml6YXRpb25fQ2x1c3RlclBvbGljeVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiQ2x1c3RlclBvbGljeVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImxhc3RNb2RpZmllZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsYXN0IHRpbWUgYW55IHBhcnQgb2YgdGhlIG9iamVjdCB3YXMgY3JlYXRlZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicm9sZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbGwgdGhlIHJvbGVzIGhlbGQgYnkgdGhpcyBwb2xpY3lcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fTmFtZWRDbHVzdGVyUm9sZVwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk5hbWVkQ2x1c3RlclJvbGVcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkNsdXN0ZXJQb2xpY3lcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwib3NfYXV0aG9yaXphdGlvbl9DbHVzdGVyUG9saWN5QmluZGluZ1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiQ2x1c3RlclBvbGljeUJpbmRpbmdcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJsYXN0TW9kaWZpZWRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGFzdCB0aW1lIGFueSBwYXJ0IG9mIHRoZSBvYmplY3Qgd2FzIGNyZWF0ZWRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBvbGljeVJlZlwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RSZWZlcmVuY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyb2xlQmluZGluZ3NcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbGwgdGhlIHJvbGUgYmluZGluZ3MgaGVsZCBieSB0aGlzIHBvbGljeVwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9OYW1lZENsdXN0ZXJSb2xlQmluZGluZ1wiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk5hbWVkQ2x1c3RlclJvbGVCaW5kaW5nXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5DbHVzdGVyUG9saWN5QmluZGluZ1wiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19hdXRob3JpemF0aW9uX0NsdXN0ZXJQb2xpY3lCaW5kaW5nTGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgY2x1c3RlciBwb2xpY3kgYmluZGluZ3NcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fQ2x1c3RlclBvbGljeUJpbmRpbmdcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5DbHVzdGVyUG9saWN5QmluZGluZ1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJDbHVzdGVyUG9saWN5QmluZGluZ0xpc3RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5DbHVzdGVyUG9saWN5QmluZGluZ0xpc3RcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwib3NfYXV0aG9yaXphdGlvbl9DbHVzdGVyUG9saWN5TGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgY2x1c3RlciBwb2xpY2llc1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9DbHVzdGVyUG9saWN5XCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQ2x1c3RlclBvbGljeVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJDbHVzdGVyUG9saWN5TGlzdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkNsdXN0ZXJQb2xpY3lMaXN0XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX2F1dGhvcml6YXRpb25fQ2x1c3RlclJvbGVcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkNsdXN0ZXJSb2xlXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJydWxlc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgcG9saWN5IHJ1bGVzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX1BvbGljeVJ1bGVcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Qb2xpY3lSdWxlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5DbHVzdGVyUm9sZVwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19hdXRob3JpemF0aW9uX0NsdXN0ZXJSb2xlQmluZGluZ1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJncm91cE5hbWVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYWxsIHRoZSBncm91cHMgZGlyZWN0bHkgYm91bmQgdG8gdGhlIHJvbGVcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFsbCB0aGUgZ3JvdXBzIGRpcmVjdGx5IGJvdW5kIHRvIHRoZSByb2xlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkNsdXN0ZXJSb2xlQmluZGluZ1wiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicm9sZVJlZlwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RSZWZlcmVuY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzdWJqZWN0c1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJlZmVyZW5jZXMgdG8gc3ViamVjdHMgYm91bmQgdG8gdGhlIHJvbGUuICBPbmx5IFVzZXJcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInVzZXJOYW1lc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFsbCB1c2VyIG5hbWVzIGRpcmVjdGx5IGJvdW5kIHRvIHRoZSByb2xlXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbGwgdXNlciBuYW1lcyBkaXJlY3RseSBib3VuZCB0byB0aGUgcm9sZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQ2x1c3RlclJvbGVCaW5kaW5nXCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX2F1dGhvcml6YXRpb25fQ2x1c3RlclJvbGVCaW5kaW5nTGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgY2x1c3RlciByb2xlIGJpbmRpbmdzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX0NsdXN0ZXJSb2xlQmluZGluZ1wiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkNsdXN0ZXJSb2xlQmluZGluZ1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJDbHVzdGVyUm9sZUJpbmRpbmdMaXN0XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQ2x1c3RlclJvbGVCaW5kaW5nTGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19hdXRob3JpemF0aW9uX0xvY2FsU3ViamVjdEFjY2Vzc1Jldmlld1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJUeXBlTWV0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfVHlwZU1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlR5cGVNZXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiY29udGVudFwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfcnVudGltZV9SYXdFeHRlbnNpb25cIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ3JvdXBzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib3B0aW9uYWxcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9wdGlvbmFsXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibmFtZXNwYWNlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWVzcGFjZSBvZiB0aGUgYWN0aW9uIGJlaW5nIHJlcXVlc3RlZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlc291cmNlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9uZSBvZiB0aGUgZXhpc3RpbmcgcmVzb3VyY2UgdHlwZXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZXNvdXJjZU5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibmFtZSBvZiB0aGUgcmVzb3VyY2UgYmVpbmcgcmVxdWVzdGVkIGZvciBhIGdldCBvciBkZWxldGVcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1c2VyXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9wdGlvbmFsXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidmVyYlwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJvbmUgb2YgZ2V0XCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Mb2NhbFN1YmplY3RBY2Nlc3NSZXZpZXdcIlxuICAgICAgfSxcbiAgICAgIFwib3NfYXV0aG9yaXphdGlvbl9OYW1lZENsdXN0ZXJSb2xlXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibmFtZSBvZiB0aGUgY2x1c3RlciByb2xlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicm9sZVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fQ2x1c3RlclJvbGVcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQ2x1c3RlclJvbGVcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk5hbWVkQ2x1c3RlclJvbGVcIlxuICAgICAgfSxcbiAgICAgIFwib3NfYXV0aG9yaXphdGlvbl9OYW1lZENsdXN0ZXJSb2xlQmluZGluZ1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWUgb2YgdGhlIGNsdXN0ZXIgcm9sZSBiaW5kaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicm9sZUJpbmRpbmdcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX0NsdXN0ZXJSb2xlQmluZGluZ1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5DbHVzdGVyUm9sZUJpbmRpbmdcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk5hbWVkQ2x1c3RlclJvbGVCaW5kaW5nXCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2F1dGhvcml6YXRpb25fTmFtZWRSb2xlXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibmFtZSBvZiB0aGUgcm9sZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJvbGVcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX1JvbGVcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUm9sZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuTmFtZWRSb2xlXCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2F1dGhvcml6YXRpb25fTmFtZWRSb2xlQmluZGluZ1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWUgb2YgdGhlIHJvbGVCaW5kaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicm9sZUJpbmRpbmdcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX1JvbGVCaW5kaW5nXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlJvbGVCaW5kaW5nXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5OYW1lZFJvbGVCaW5kaW5nXCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2F1dGhvcml6YXRpb25fUG9saWN5XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJQb2xpY3lcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJsYXN0TW9kaWZpZWRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGFzdCB0aW1lIHRoYXQgYW55IHBhcnQgb2YgdGhlIHBvbGljeSB3YXMgY3JlYXRlZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicm9sZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJyb2xlcyBoZWxkIGJ5IHRoaXMgcG9saWN5XCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX05hbWVkUm9sZVwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk5hbWVkUm9sZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUG9saWN5XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX2F1dGhvcml6YXRpb25fUG9saWN5QmluZGluZ1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiUG9saWN5QmluZGluZ1wiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImxhc3RNb2RpZmllZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsYXN0IHRpbWUgdGhhdCBhbnkgcGFydCBvZiB0aGUgb2JqZWN0IHdhcyBjcmVhdGVkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwb2xpY3lSZWZcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdFJlZmVyZW5jZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0UmVmZXJlbmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicm9sZUJpbmRpbmdzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYWxsIHJvbGVCaW5kaW5ncyBoZWxkIGJ5IHRoaXMgcG9saWN5QmluZGluZ1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9OYW1lZFJvbGVCaW5kaW5nXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuTmFtZWRSb2xlQmluZGluZ1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUG9saWN5QmluZGluZ1wiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19hdXRob3JpemF0aW9uX1BvbGljeUJpbmRpbmdMaXN0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBwb2xpY3kgYmluZGluZ3NcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fUG9saWN5QmluZGluZ1wiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlBvbGljeUJpbmRpbmdcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiUG9saWN5QmluZGluZ0xpc3RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Qb2xpY3lCaW5kaW5nTGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19hdXRob3JpemF0aW9uX1BvbGljeUxpc3RcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHBvbGljaWVzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX1BvbGljeVwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlBvbGljeVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJQb2xpY3lMaXN0XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUG9saWN5TGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19hdXRob3JpemF0aW9uX1BvbGljeVJ1bGVcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXR0cmlidXRlUmVzdHJpY3Rpb25zXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19ydW50aW1lX1Jhd0V4dGVuc2lvblwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJub25SZXNvdXJjZVVSTHNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzZXQgb2YgcGFydGlhbCB1cmxzIHRoYXQgYSB1c2VyIHNob3VsZCBoYXZlIGFjY2VzcyB0by4gKnMgYXJlIGFsbG93ZWRcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInNldCBvZiBwYXJ0aWFsIHVybHMgdGhhdCBhIHVzZXIgc2hvdWxkIGhhdmUgYWNjZXNzIHRvLiAqcyBhcmUgYWxsb3dlZFwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlc291cmNlTmFtZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJvcHRpb25hbCB3aGl0ZSBsaXN0IG9mIG5hbWVzIHRoYXQgdGhlIHJ1bGUgYXBwbGllcyB0by4gIEFuIGVtcHR5IHNldCBtZWFucyB0aGF0IGV2ZXJ5dGhpbmcgaXMgYWxsb3dlZC5cIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9wdGlvbmFsIHdoaXRlIGxpc3Qgb2YgbmFtZXMgdGhhdCB0aGUgcnVsZSBhcHBsaWVzIHRvLiAgQW4gZW1wdHkgc2V0IG1lYW5zIHRoYXQgZXZlcnl0aGluZyBpcyBhbGxvd2VkLlwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlc291cmNlc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgcmVzb3VyY2VzIHRoaXMgcnVsZSBhcHBsaWVzIHRvLiAgKiByZXByZXNlbnRzIGFsbCByZXNvdXJjZXMuXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHJlc291cmNlcyB0aGlzIHJ1bGUgYXBwbGllcyB0by4gICogcmVwcmVzZW50cyBhbGwgcmVzb3VyY2VzLlwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInZlcmJzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiB2ZXJicyB0aGF0IGFwcGx5IHRvIEFMTCB0aGUgcmVzb3VyY2VLaW5kcyBhbmQgYXR0cmlidXRlUmVzdHJpY3Rpb25zIGNvbnRhaW5lZCBpbiB0aGlzIHJ1bGUuICBUaGUgdmVyYiAqIHJlcHJlc2VudHMgYWxsIGtpbmRzLlwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiB2ZXJicyB0aGF0IGFwcGx5IHRvIEFMTCB0aGUgcmVzb3VyY2VLaW5kcyBhbmQgYXR0cmlidXRlUmVzdHJpY3Rpb25zIGNvbnRhaW5lZCBpbiB0aGlzIHJ1bGUuICBUaGUgdmVyYiAqIHJlcHJlc2VudHMgYWxsIGtpbmRzLlwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUG9saWN5UnVsZVwiXG4gICAgICB9LFxuICAgICAgXCJvc19hdXRob3JpemF0aW9uX1JvbGVcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlJvbGVcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJ1bGVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYWxsIHRoZSBydWxlcyBmb3IgdGhpcyByb2xlXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX1BvbGljeVJ1bGVcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Qb2xpY3lSdWxlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Sb2xlXCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX2F1dGhvcml6YXRpb25fUm9sZUJpbmRpbmdcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ3JvdXBOYW1lc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFsbCB0aGUgZ3JvdXBzIGRpcmVjdGx5IGJvdW5kIHRvIHRoZSByb2xlXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbGwgdGhlIGdyb3VwcyBkaXJlY3RseSBib3VuZCB0byB0aGUgcm9sZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJSb2xlQmluZGluZ1wiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicm9sZVJlZlwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RSZWZlcmVuY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzdWJqZWN0c1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJlZmVyZW5jZXMgdG8gc3ViamVjdHMgYm91bmQgdG8gdGhlIHJvbGUuICBPbmx5IFVzZXJcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInVzZXJOYW1lc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFsbCB0aGUgdXNlcm5hbWVzIGRpcmVjdGx5IGJvdW5kIHRvIHRoZSByb2xlXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbGwgdGhlIHVzZXJuYW1lcyBkaXJlY3RseSBib3VuZCB0byB0aGUgcm9sZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUm9sZUJpbmRpbmdcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwib3NfYXV0aG9yaXphdGlvbl9Sb2xlQmluZGluZ0xpc3RcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHJvbGUgYmluZGluZ3NcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fUm9sZUJpbmRpbmdcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Sb2xlQmluZGluZ1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJSb2xlQmluZGluZ0xpc3RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Sb2xlQmluZGluZ0xpc3RcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwib3NfYXV0aG9yaXphdGlvbl9Sb2xlTGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2Ygcm9sZXNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fUm9sZVwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlJvbGVcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiUm9sZUxpc3RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Sb2xlTGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19hdXRob3JpemF0aW9uX1N1YmplY3RBY2Nlc3NSZXZpZXdcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiY29udGVudFwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfcnVudGltZV9SYXdFeHRlbnNpb25cIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ3JvdXBzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib3B0aW9uYWxcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9wdGlvbmFsXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlN1YmplY3RBY2Nlc3NSZXZpZXdcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJuYW1lc3BhY2VcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibmFtZXNwYWNlIG9mIHRoZSBhY3Rpb24gYmVpbmcgcmVxdWVzdGVkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVzb3VyY2VcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib25lIG9mIHRoZSBleGlzdGluZyByZXNvdXJjZSB0eXBlc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlc291cmNlTmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJuYW1lIG9mIHRoZSByZXNvdXJjZSBiZWluZyByZXF1ZXN0ZWQgZm9yIGEgZ2V0IG9yIGRlbGV0ZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInVzZXJcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib3B0aW9uYWxcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ2ZXJiXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9uZSBvZiBnZXRcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlN1YmplY3RBY2Nlc3NSZXZpZXdcIlxuICAgICAgfSxcbiAgICAgIFwib3NfYXV0aG9yaXphdGlvbl9TdWJqZWN0QWNjZXNzUmV2aWV3UmVzcG9uc2VcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYWxsb3dlZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidHJ1ZSBpZiB0aGUgYWN0aW9uIHdvdWxkIGJlIGFsbG93ZWRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiU3ViamVjdEFjY2Vzc1Jldmlld1Jlc3BvbnNlXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibmFtZXNwYWNlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBuYW1lc3BhY2UgdXNlZCBmb3IgdGhlIGFjY2VzcyByZXZpZXdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZWFzb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicmVhc29uIGlzIG9wdGlvbmFsXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5TdWJqZWN0QWNjZXNzUmV2aWV3UmVzcG9uc2VcIlxuICAgICAgfSxcbiAgICAgIFwib3NfYnVpbGRfQnVpbGRcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkJ1aWxkXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzcGVjXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfQnVpbGRTcGVjXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkU3BlY1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInN0YXR1c1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2J1aWxkX0J1aWxkU3RhdHVzXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkU3RhdHVzXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19idWlsZF9CdWlsZENvbmZpZ1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiQnVpbGRDb25maWdcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNwZWNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9CdWlsZENvbmZpZ1NwZWNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRDb25maWdTcGVjXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3RhdHVzXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfQnVpbGRDb25maWdTdGF0dXNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRDb25maWdTdGF0dXNcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkQ29uZmlnXCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX2J1aWxkX0J1aWxkQ29uZmlnTGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgYnVpbGQgY29uZmlnc1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfQnVpbGRDb25maWdcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZENvbmZpZ1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJCdWlsZENvbmZpZ0xpc3RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZENvbmZpZ0xpc3RcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwib3NfYnVpbGRfQnVpbGRDb25maWdTcGVjXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcIm91dHB1dFwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2J1aWxkX0J1aWxkT3V0cHV0XCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkT3V0cHV0XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVzb3VyY2VzXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19SZXNvdXJjZVJlcXVpcmVtZW50c1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVzb3VyY2VSZXF1aXJlbWVudHNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZXZpc2lvblwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2J1aWxkX1NvdXJjZVJldmlzaW9uXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlNvdXJjZVJldmlzaW9uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2VydmljZUFjY291bnRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UgYWNjb3VudCB0byB1c2UgdG8gcnVuIHBvZHMgY3JlYXRlZCBieSB0aGUgYnVpbGRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzb3VyY2VcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9CdWlsZFNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZFNvdXJjZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInN0cmF0ZWd5XCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfQnVpbGRTdHJhdGVneVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZFN0cmF0ZWd5XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHJpZ2dlcnNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJkZXRlcm1pbmVzIGhvdyBuZXcgYnVpbGRzIGNhbiBiZSBsYXVuY2hlZCBmcm9tIGEgYnVpbGQgY29uZmlnLiAgaWYgbm8gdHJpZ2dlcnMgYXJlIGRlZmluZWRcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2J1aWxkX0J1aWxkVHJpZ2dlclBvbGljeVwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkVHJpZ2dlclBvbGljeVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRDb25maWdTcGVjXCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2J1aWxkX0J1aWxkQ29uZmlnU3RhdHVzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImxhc3RWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ1c2VkIHRvIGluZm9ybSBhYm91dCBudW1iZXIgb2YgbGFzdCB0cmlnZ2VyZWQgYnVpbGRcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkQ29uZmlnU3RhdHVzXCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2J1aWxkX0J1aWxkTGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgYnVpbGRzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9CdWlsZFwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkJ1aWxkTGlzdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkTGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19idWlsZF9CdWlsZE91dHB1dFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJwdXNoU2VjcmV0XCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Mb2NhbE9iamVjdFJlZmVyZW5jZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTG9jYWxPYmplY3RSZWZlcmVuY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0b1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RSZWZlcmVuY2VcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkT3V0cHV0XCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2J1aWxkX0J1aWxkUmVxdWVzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJmcm9tXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RSZWZlcmVuY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJCdWlsZFJlcXVlc3RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJsYXN0VmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTGFzdFZlcnNpb24gb2YgdGhlIEJ1aWxkQ29uZmlnIHRoYXQgdHJpZ2dlcmVkIHRoaXMgYnVpbGRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJldmlzaW9uXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfU291cmNlUmV2aXNpb25cIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuU291cmNlUmV2aXNpb25cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0cmlnZ2VyZWRCeUltYWdlXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RSZWZlcmVuY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRSZXF1ZXN0XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX2J1aWxkX0J1aWxkU291cmNlXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImNvbnRleHREaXJcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic3BlY2lmaWVzIHN1Yi1kaXJlY3Rvcnkgd2hlcmUgdGhlIHNvdXJjZSBjb2RlIGZvciB0aGUgYXBwbGljYXRpb24gZXhpc3RzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2l0XCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfR2l0QnVpbGRTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuR2l0QnVpbGRTb3VyY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzb3VyY2VTZWNyZXRcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xvY2FsT2JqZWN0UmVmZXJlbmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Mb2NhbE9iamVjdFJlZmVyZW5jZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidHlwZSBvZiBzb3VyY2UgY29udHJvbCBtYW5hZ2VtZW50IHN5c3RlbVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRTb3VyY2VcIlxuICAgICAgfSxcbiAgICAgIFwib3NfYnVpbGRfQnVpbGRTcGVjXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcIm91dHB1dFwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2J1aWxkX0J1aWxkT3V0cHV0XCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkT3V0cHV0XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVzb3VyY2VzXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19SZXNvdXJjZVJlcXVpcmVtZW50c1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVzb3VyY2VSZXF1aXJlbWVudHNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZXZpc2lvblwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2J1aWxkX1NvdXJjZVJldmlzaW9uXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlNvdXJjZVJldmlzaW9uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2VydmljZUFjY291bnRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UgYWNjb3VudCB0byB1c2UgdG8gcnVuIHBvZHMgY3JlYXRlZCBieSB0aGUgYnVpbGRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzb3VyY2VcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9CdWlsZFNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZFNvdXJjZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInN0cmF0ZWd5XCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfQnVpbGRTdHJhdGVneVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZFN0cmF0ZWd5XCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZFNwZWNcIlxuICAgICAgfSxcbiAgICAgIFwib3NfYnVpbGRfQnVpbGRTdGF0dXNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiY2FuY2VsbGVkXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJkZXNjcmliZXMgaWYgYSBjYW5jZWxpbmcgZXZlbnQgd2FzIHRyaWdnZXJlZCBmb3IgdGhlIGJ1aWxkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiY29tcGxldGlvblRpbWVzdGFtcFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzZXJ2ZXIgdGltZSB3aGVuIHRoZSBwb2QgcnVubmluZyB0aGlzIGJ1aWxkIHN0b3BwZWQgcnVubmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImNvbmZpZ1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RSZWZlcmVuY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJkdXJhdGlvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYW1vdW50IG9mIHRpbWUgdGhlIGJ1aWxkIGhhcyBiZWVuIHJ1bm5pbmdcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJMb25nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWVzc2FnZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJodW1hbi1yZWFkYWJsZSBtZXNzYWdlIGluZGljYXRpbmcgZGV0YWlscyBhYm91dCB3aHkgdGhlIGJ1aWxkIGhhcyB0aGlzIHN0YXR1c1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBoYXNlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9ic2VydmVkIHBvaW50IGluIHRoZSBidWlsZCBsaWZlY3ljbGVcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzdGFydFRpbWVzdGFtcFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzZXJ2ZXIgdGltZSB3aGVuIHRoaXMgYnVpbGQgc3RhcnRlZCBydW5uaW5nIGluIGEgcG9kXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZFN0YXR1c1wiXG4gICAgICB9LFxuICAgICAgXCJvc19idWlsZF9CdWlsZFN0cmF0ZWd5XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImN1c3RvbVN0cmF0ZWd5XCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfQ3VzdG9tQnVpbGRTdHJhdGVneVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5DdXN0b21CdWlsZFN0cmF0ZWd5XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZG9ja2VyU3RyYXRlZ3lcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9Eb2NrZXJCdWlsZFN0cmF0ZWd5XCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRvY2tlckJ1aWxkU3RyYXRlZ3lcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzb3VyY2VTdHJhdGVneVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2J1aWxkX1NvdXJjZUJ1aWxkU3RyYXRlZ3lcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuU291cmNlQnVpbGRTdHJhdGVneVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaWRlbnRpZmllcyB0aGUgdHlwZSBvZiBidWlsZCBzdHJhdGVneVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRTdHJhdGVneVwiXG4gICAgICB9LFxuICAgICAgXCJvc19idWlsZF9CdWlsZFRyaWdnZXJQb2xpY3lcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiZ2VuZXJpY1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2J1aWxkX1dlYkhvb2tUcmlnZ2VyXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLldlYkhvb2tUcmlnZ2VyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2l0aHViXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfV2ViSG9va1RyaWdnZXJcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuV2ViSG9va1RyaWdnZXJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpbWFnZUNoYW5nZVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2J1aWxkX0ltYWdlQ2hhbmdlVHJpZ2dlclwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5JbWFnZUNoYW5nZVRyaWdnZXJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInR5cGUgb2YgYnVpbGQgdHJpZ2dlclwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRUcmlnZ2VyUG9saWN5XCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2J1aWxkX0N1c3RvbUJ1aWxkU3RyYXRlZ3lcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiZW52XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgeW91IHdhbnQgdG8gcGFzcyBpbnRvIGEgYnVpbGRlciBjb250YWluZXJcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRW52VmFyXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVudlZhclwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImV4cG9zZURvY2tlclNvY2tldFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYWxsb3cgcnVubmluZyBEb2NrZXIgY29tbWFuZHMgKGFuZCBidWlsZCBEb2NrZXIgaW1hZ2VzKSBmcm9tIGluc2lkZSB0aGUgY29udGFpbmVyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZm9yY2VQdWxsXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJmb3JjZXMgcHVsbGluZyBvZiBidWlsZGVyIGltYWdlIGZyb20gcmVtb3RlIHJlZ2lzdHJ5IGlmIHRydWVcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJmcm9tXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RSZWZlcmVuY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInB1bGxTZWNyZXRcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xvY2FsT2JqZWN0UmVmZXJlbmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Mb2NhbE9iamVjdFJlZmVyZW5jZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQ3VzdG9tQnVpbGRTdHJhdGVneVwiXG4gICAgICB9LFxuICAgICAgXCJvc19idWlsZF9Eb2NrZXJCdWlsZFN0cmF0ZWd5XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImVudlwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFkZGl0aW9uYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzIHlvdSB3YW50IHRvIHBhc3MgaW50byBhIGJ1aWxkZXIgY29udGFpbmVyXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0VudlZhclwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FbnZWYXJcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJmb3JjZVB1bGxcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImZvcmNlcyB0aGUgc291cmNlIGJ1aWxkIHRvIHB1bGwgdGhlIGltYWdlIGlmIHRydWVcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJmcm9tXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RSZWZlcmVuY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm5vQ2FjaGVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImlmIHRydWVcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwdWxsU2VjcmV0XCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Mb2NhbE9iamVjdFJlZmVyZW5jZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTG9jYWxPYmplY3RSZWZlcmVuY2VcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRvY2tlckJ1aWxkU3RyYXRlZ3lcIlxuICAgICAgfSxcbiAgICAgIFwib3NfYnVpbGRfR2l0QnVpbGRTb3VyY2VcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiaHR0cFByb3h5XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInNwZWNpZmllcyBhIGh0dHAgcHJveHkgdG8gYmUgdXNlZCBkdXJpbmcgZ2l0IGNsb25lIG9wZXJhdGlvbnNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJodHRwc1Byb3h5XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInNwZWNpZmllcyBhIGh0dHBzIHByb3h5IHRvIGJlIHVzZWQgZHVyaW5nIGdpdCBjbG9uZSBvcGVyYXRpb25zXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVmXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImlkZW50aWZpZXMgdGhlIGJyYW5jaC90YWcvcmVmIHRvIGJ1aWxkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidXJpXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInBvaW50cyB0byB0aGUgc291cmNlIHRoYXQgd2lsbCBiZSBidWlsdFwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuR2l0QnVpbGRTb3VyY2VcIlxuICAgICAgfSxcbiAgICAgIFwib3NfYnVpbGRfR2l0U291cmNlUmV2aXNpb25cIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXV0aG9yXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfU291cmNlQ29udHJvbFVzZXJcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuU291cmNlQ29udHJvbFVzZXJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjb21taXRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaGFzaCBpZGVudGlmeWluZyBhIHNwZWNpZmljIGNvbW1pdFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImNvbW1pdHRlclwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2J1aWxkX1NvdXJjZUNvbnRyb2xVc2VyXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlNvdXJjZUNvbnRyb2xVc2VyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWVzc2FnZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJkZXNjcmlwdGlvbiBvZiBhIHNwZWNpZmljIGNvbW1pdFwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuR2l0U291cmNlUmV2aXNpb25cIlxuICAgICAgfSxcbiAgICAgIFwib3NfYnVpbGRfSW1hZ2VDaGFuZ2VUcmlnZ2VyXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImZyb21cIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdFJlZmVyZW5jZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0UmVmZXJlbmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibGFzdFRyaWdnZXJlZEltYWdlSURcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidXNlZCBpbnRlcm5hbGx5IHRvIHNhdmUgbGFzdCB1c2VkIGltYWdlIElEIGZvciBidWlsZFwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuSW1hZ2VDaGFuZ2VUcmlnZ2VyXCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2J1aWxkX1NvdXJjZUJ1aWxkU3RyYXRlZ3lcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiZW52XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgeW91IHdhbnQgdG8gcGFzcyBpbnRvIGEgYnVpbGRlciBjb250YWluZXJcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRW52VmFyXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVudlZhclwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImZvcmNlUHVsbFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZm9yY2VzIHRoZSBzb3VyY2UgYnVpbGQgdG8gcHVsbCB0aGUgaW1hZ2UgaWYgdHJ1ZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImZyb21cIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdFJlZmVyZW5jZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0UmVmZXJlbmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaW5jcmVtZW50YWxcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImZvcmNlcyB0aGUgc291cmNlIGJ1aWxkIHRvIGRvIGluY3JlbWVudGFsIGJ1aWxkcyBpZiB0cnVlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicHVsbFNlY3JldFwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTG9jYWxPYmplY3RSZWZlcmVuY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxvY2FsT2JqZWN0UmVmZXJlbmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2NyaXB0c1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsb2NhdGlvbiBvZiB0aGUgc291cmNlIHNjcmlwdHNcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlNvdXJjZUJ1aWxkU3RyYXRlZ3lcIlxuICAgICAgfSxcbiAgICAgIFwib3NfYnVpbGRfU291cmNlQ29udHJvbFVzZXJcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiZW1haWxcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZS1tYWlsIG9mIHRoZSBzb3VyY2UgY29udHJvbCB1c2VyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJuYW1lIG9mIHRoZSBzb3VyY2UgY29udHJvbCB1c2VyXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Tb3VyY2VDb250cm9sVXNlclwiXG4gICAgICB9LFxuICAgICAgXCJvc19idWlsZF9Tb3VyY2VSZXZpc2lvblwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJnaXRcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9HaXRTb3VyY2VSZXZpc2lvblwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5HaXRTb3VyY2VSZXZpc2lvblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidHlwZSBvZiB0aGUgYnVpbGQgc291cmNlXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Tb3VyY2VSZXZpc2lvblwiXG4gICAgICB9LFxuICAgICAgXCJvc19idWlsZF9XZWJIb29rVHJpZ2dlclwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJzZWNyZXRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic2VjcmV0IHVzZWQgdG8gdmFsaWRhdGUgcmVxdWVzdHNcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLldlYkhvb2tUcmlnZ2VyXCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2RlcGxveV9DdXN0b21EZXBsb3ltZW50U3RyYXRlZ3lQYXJhbXNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiY29tbWFuZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9wdGlvbmFsbHkgb3ZlcnJpZGVzIHRoZSBjb250YWluZXIgY29tbWFuZCAoZGVmYXVsdCBpcyBzcGVjaWZpZWQgYnkgdGhlIGltYWdlKVwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib3B0aW9uYWxseSBvdmVycmlkZXMgdGhlIGNvbnRhaW5lciBjb21tYW5kIChkZWZhdWx0IGlzIHNwZWNpZmllZCBieSB0aGUgaW1hZ2UpXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZW52aXJvbm1lbnRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJlbnZpcm9ubWVudCB2YXJpYWJsZXMgcHJvdmlkZWQgdG8gdGhlIGRlcGxveW1lbnQgcHJvY2VzcyBjb250YWluZXJcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRW52VmFyXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVudlZhclwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImltYWdlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImEgRG9ja2VyIGltYWdlIHdoaWNoIGNhbiBjYXJyeSBvdXQgYSBkZXBsb3ltZW50XCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5DdXN0b21EZXBsb3ltZW50U3RyYXRlZ3lQYXJhbXNcIlxuICAgICAgfSxcbiAgICAgIFwib3NfZGVwbG95X0RlcGxveW1lbnRDYXVzZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJpbWFnZVRyaWdnZXJcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19kZXBsb3lfRGVwbG95bWVudENhdXNlSW1hZ2VUcmlnZ2VyXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRlcGxveW1lbnRDYXVzZUltYWdlVHJpZ2dlclwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIHR5cGUgb2YgdHJpZ2dlciB0aGF0IHJlc3VsdGVkIGluIGEgbmV3IGRlcGxveW1lbnRcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRlcGxveW1lbnRDYXVzZVwiXG4gICAgICB9LFxuICAgICAgXCJvc19kZXBsb3lfRGVwbG95bWVudENhdXNlSW1hZ2VUcmlnZ2VyXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImZyb21cIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdFJlZmVyZW5jZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0UmVmZXJlbmNlXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5EZXBsb3ltZW50Q2F1c2VJbWFnZVRyaWdnZXJcIlxuICAgICAgfSxcbiAgICAgIFwib3NfZGVwbG95X0RlcGxveW1lbnRDb25maWdcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkRlcGxveW1lbnRDb25maWdcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNwZWNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19kZXBsb3lfRGVwbG95bWVudENvbmZpZ1NwZWNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuRGVwbG95bWVudENvbmZpZ1NwZWNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzdGF0dXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19kZXBsb3lfRGVwbG95bWVudENvbmZpZ1N0YXR1c1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5EZXBsb3ltZW50Q29uZmlnU3RhdHVzXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5EZXBsb3ltZW50Q29uZmlnXCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX2RlcGxveV9EZXBsb3ltZW50Q29uZmlnTGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImEgbGlzdCBvZiBkZXBsb3ltZW50IGNvbmZpZ3NcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2RlcGxveV9EZXBsb3ltZW50Q29uZmlnXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuRGVwbG95bWVudENvbmZpZ1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJEZXBsb3ltZW50Q29uZmlnTGlzdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRlcGxveW1lbnRDb25maWdMaXN0XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX2RlcGxveV9EZXBsb3ltZW50Q29uZmlnU3BlY1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJyZXBsaWNhc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIGRlc2lyZWQgbnVtYmVyIG9mIHJlcGxpY2FzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2VsZWN0b3JcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYSBsYWJlbCBxdWVyeSBvdmVyIHBvZHMgdGhhdCBzaG91bGQgbWF0Y2ggdGhlIHJlcGxpY2FzIGNvdW50XCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhIGxhYmVsIHF1ZXJ5IG92ZXIgcG9kcyB0aGF0IHNob3VsZCBtYXRjaCB0aGUgcmVwbGljYXMgY291bnRcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJqYXZhLnV0aWwuTWFwXFx1MDAzY1N0cmluZyxTdHJpbmdcXHUwMDNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3RyYXRlZ3lcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19kZXBsb3lfRGVwbG95bWVudFN0cmF0ZWd5XCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRlcGxveW1lbnRTdHJhdGVneVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInRlbXBsYXRlXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Qb2RUZW1wbGF0ZVNwZWNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBvZFRlbXBsYXRlU3BlY1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInRyaWdnZXJzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaG93IG5ldyBkZXBsb3ltZW50cyBhcmUgdHJpZ2dlcmVkXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19kZXBsb3lfRGVwbG95bWVudFRyaWdnZXJQb2xpY3lcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5EZXBsb3ltZW50VHJpZ2dlclBvbGljeVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuRGVwbG95bWVudENvbmZpZ1NwZWNcIlxuICAgICAgfSxcbiAgICAgIFwib3NfZGVwbG95X0RlcGxveW1lbnRDb25maWdTdGF0dXNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiZGV0YWlsc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2RlcGxveV9EZXBsb3ltZW50RGV0YWlsc1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5EZXBsb3ltZW50RGV0YWlsc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImxhdGVzdFZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGN1cnJlbnQgZGVwbG95bWVudCBpcyBvdXQgb2Ygc3luY1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuRGVwbG95bWVudENvbmZpZ1N0YXR1c1wiXG4gICAgICB9LFxuICAgICAgXCJvc19kZXBsb3lfRGVwbG95bWVudERldGFpbHNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiY2F1c2VzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZXh0ZW5kZWQgZGF0YSBhc3NvY2lhdGVkIHdpdGggYWxsIHRoZSBjYXVzZXMgZm9yIGNyZWF0aW5nIGEgbmV3IGRlcGxveW1lbnRcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2RlcGxveV9EZXBsb3ltZW50Q2F1c2VcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5EZXBsb3ltZW50Q2F1c2VcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXNzYWdlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImEgdXNlciBzcGVjaWZpZWQgY2hhbmdlIG1lc3NhZ2VcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRlcGxveW1lbnREZXRhaWxzXCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2RlcGxveV9EZXBsb3ltZW50U3RyYXRlZ3lcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiY3VzdG9tUGFyYW1zXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfZGVwbG95X0N1c3RvbURlcGxveW1lbnRTdHJhdGVneVBhcmFtc1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5DdXN0b21EZXBsb3ltZW50U3RyYXRlZ3lQYXJhbXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZWNyZWF0ZVBhcmFtc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2RlcGxveV9SZWNyZWF0ZURlcGxveW1lbnRTdHJhdGVneVBhcmFtc1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5SZWNyZWF0ZURlcGxveW1lbnRTdHJhdGVneVBhcmFtc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlc291cmNlc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUmVzb3VyY2VSZXF1aXJlbWVudHNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJlc291cmNlUmVxdWlyZW1lbnRzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicm9sbGluZ1BhcmFtc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2RlcGxveV9Sb2xsaW5nRGVwbG95bWVudFN0cmF0ZWd5UGFyYW1zXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlJvbGxpbmdEZXBsb3ltZW50U3RyYXRlZ3lQYXJhbXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBuYW1lIG9mIGEgZGVwbG95bWVudCBzdHJhdGVneVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuRGVwbG95bWVudFN0cmF0ZWd5XCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2RlcGxveV9EZXBsb3ltZW50VHJpZ2dlckltYWdlQ2hhbmdlUGFyYW1zXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImF1dG9tYXRpY1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwid2hldGhlciBkZXRlY3Rpb24gb2YgYSBuZXcgdGFnIHZhbHVlIHNob3VsZCB0cmlnZ2VyIGEgZGVwbG95bWVudFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImNvbnRhaW5lck5hbWVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicmVzdHJpY3RzIHRhZyB1cGRhdGVzIHRvIGEgc2V0IG9mIGNvbnRhaW5lciBuYW1lcyBpbiB0aGUgcG9kXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJyZXN0cmljdHMgdGFnIHVwZGF0ZXMgdG8gYSBzZXQgb2YgY29udGFpbmVyIG5hbWVzIGluIHRoZSBwb2RcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJmcm9tXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RSZWZlcmVuY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImxhc3RUcmlnZ2VyZWRJbWFnZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgbGFzdCBpbWFnZSB0byBiZSB0cmlnZ2VyZWRcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRlcGxveW1lbnRUcmlnZ2VySW1hZ2VDaGFuZ2VQYXJhbXNcIlxuICAgICAgfSxcbiAgICAgIFwib3NfZGVwbG95X0RlcGxveW1lbnRUcmlnZ2VyUG9saWN5XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImltYWdlQ2hhbmdlUGFyYW1zXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfZGVwbG95X0RlcGxveW1lbnRUcmlnZ2VySW1hZ2VDaGFuZ2VQYXJhbXNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuRGVwbG95bWVudFRyaWdnZXJJbWFnZUNoYW5nZVBhcmFtc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIHR5cGUgb2YgdGhlIHRyaWdnZXJcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRlcGxveW1lbnRUcmlnZ2VyUG9saWN5XCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2RlcGxveV9FeGVjTmV3UG9kSG9va1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJjb21tYW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIGhvb2sgY29tbWFuZCBhbmQgaXRzIGFyZ3VtZW50c1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIGhvb2sgY29tbWFuZCBhbmQgaXRzIGFyZ3VtZW50c1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImNvbnRhaW5lck5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIG5hbWUgb2YgYSBjb250YWluZXIgZnJvbSB0aGUgcG9kIHRlbXBsYXRlIHdob3NlIGltYWdlIHdpbGwgYmUgdXNlZCBmb3IgdGhlIGhvb2sgY29udGFpbmVyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZW52XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZW52aXJvbm1lbnQgdmFyaWFibGVzIHByb3ZpZGVkIHRvIHRoZSBob29rIGNvbnRhaW5lclwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19FbnZWYXJcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRW52VmFyXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5FeGVjTmV3UG9kSG9va1wiXG4gICAgICB9LFxuICAgICAgXCJvc19kZXBsb3lfTGlmZWN5Y2xlSG9va1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJleGVjTmV3UG9kXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfZGVwbG95X0V4ZWNOZXdQb2RIb29rXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkV4ZWNOZXdQb2RIb29rXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZmFpbHVyZVBvbGljeVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ3aGF0IGFjdGlvbiB0byB0YWtlIGlmIHRoZSBob29rIGZhaWxzXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5MaWZlY3ljbGVIb29rXCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2RlcGxveV9SZWNyZWF0ZURlcGxveW1lbnRTdHJhdGVneVBhcmFtc1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJwb3N0XCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfZGVwbG95X0xpZmVjeWNsZUhvb2tcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuTGlmZWN5Y2xlSG9va1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInByZVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2RlcGxveV9MaWZlY3ljbGVIb29rXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkxpZmVjeWNsZUhvb2tcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlJlY3JlYXRlRGVwbG95bWVudFN0cmF0ZWd5UGFyYW1zXCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2RlcGxveV9Sb2xsaW5nRGVwbG95bWVudFN0cmF0ZWd5UGFyYW1zXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImludGVydmFsU2Vjb25kc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIHRpbWUgdG8gd2FpdCBiZXR3ZWVuIHBvbGxpbmcgZGVwbG95bWVudCBzdGF0dXMgYWZ0ZXIgdXBkYXRlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiTG9uZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBvc3RcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19kZXBsb3lfTGlmZWN5Y2xlSG9va1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5MaWZlY3ljbGVIb29rXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicHJlXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfZGVwbG95X0xpZmVjeWNsZUhvb2tcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuTGlmZWN5Y2xlSG9va1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInRpbWVvdXRTZWNvbmRzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgdGltZSB0byB3YWl0IGZvciB1cGRhdGVzIGJlZm9yZSBnaXZpbmcgdXBcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJMb25nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidXBkYXRlUGVyY2VudFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIHBlcmNlbnRhZ2Ugb2YgcmVwbGljYXMgdG8gc2NhbGUgdXAgb3IgZG93biBlYWNoIGludGVydmFsIChuZWdhdGl2ZSB2YWx1ZSBzd2l0Y2hlcyBzY2FsZSBvcmRlciB0byBkb3duL3VwIGluc3RlYWQgb2YgdXAvZG93bilcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1cGRhdGVQZXJpb2RTZWNvbmRzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgdGltZSB0byB3YWl0IGJldHdlZW4gaW5kaXZpZHVhbCBwb2QgdXBkYXRlc1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcIkxvbmdcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlJvbGxpbmdEZXBsb3ltZW50U3RyYXRlZ3lQYXJhbXNcIlxuICAgICAgfSxcbiAgICAgIFwib3NfaW1hZ2VfSW1hZ2VcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZG9ja2VySW1hZ2VNYW5pZmVzdFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJyYXcgSlNPTiBvZiB0aGUgbWFuaWZlc3RcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJkb2NrZXJJbWFnZU1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19ydW50aW1lX1Jhd0V4dGVuc2lvblwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJkb2NrZXJJbWFnZU1ldGFkYXRhVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJjb252ZXlzIHZlcnNpb24gb2YgdGhlIG9iamVjdFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImRvY2tlckltYWdlUmVmZXJlbmNlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInN0cmluZyB0aGF0IGNhbiBiZSB1c2VkIHRvIHB1bGwgdGhpcyBpbWFnZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJJbWFnZVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5JbWFnZVwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19pbWFnZV9JbWFnZUxpc3RcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIGltYWdlIG9iamVjdHNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2ltYWdlX0ltYWdlXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuSW1hZ2VcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiSW1hZ2VMaXN0XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuSW1hZ2VMaXN0XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX2ltYWdlX0ltYWdlU3RyZWFtXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJJbWFnZVN0cmVhbVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3BlY1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2ltYWdlX0ltYWdlU3RyZWFtU3BlY1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5JbWFnZVN0cmVhbVNwZWNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzdGF0dXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19pbWFnZV9JbWFnZVN0cmVhbVN0YXR1c1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5JbWFnZVN0cmVhbVN0YXR1c1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuSW1hZ2VTdHJlYW1cIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwib3NfaW1hZ2VfSW1hZ2VTdHJlYW1MaXN0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBpbWFnZSBzdHJlYW0gb2JqZWN0c1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfaW1hZ2VfSW1hZ2VTdHJlYW1cIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5JbWFnZVN0cmVhbVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJJbWFnZVN0cmVhbUxpc3RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5JbWFnZVN0cmVhbUxpc3RcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwib3NfaW1hZ2VfSW1hZ2VTdHJlYW1TcGVjXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImRvY2tlckltYWdlUmVwb3NpdG9yeVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJvcHRpb25hbCBmaWVsZCBpZiBzcGVjaWZpZWQgdGhpcyBzdHJlYW0gaXMgYmFja2VkIGJ5IGEgRG9ja2VyIHJlcG9zaXRvcnkgb24gdGhpcyBzZXJ2ZXJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0YWdzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibWFwIGFyYml0cmFyeSBzdHJpbmcgdmFsdWVzIHRvIHNwZWNpZmljIGltYWdlIGxvY2F0b3JzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19pbWFnZV9OYW1lZFRhZ1JlZmVyZW5jZVwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk5hbWVkVGFnUmVmZXJlbmNlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5JbWFnZVN0cmVhbVNwZWNcIlxuICAgICAgfSxcbiAgICAgIFwib3NfaW1hZ2VfSW1hZ2VTdHJlYW1TdGF0dXNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiZG9ja2VySW1hZ2VSZXBvc2l0b3J5XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJlcHJlc2VudHMgdGhlIGVmZmVjdGl2ZSBsb2NhdGlvbiB0aGlzIHN0cmVhbSBtYXkgYmUgYWNjZXNzZWQgYXRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0YWdzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaGlzdG9yaWNhbCByZWNvcmQgb2YgaW1hZ2VzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIHRhZ1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfaW1hZ2VfTmFtZWRUYWdFdmVudExpc3RcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5OYW1lZFRhZ0V2ZW50TGlzdFwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuSW1hZ2VTdHJlYW1TdGF0dXNcIlxuICAgICAgfSxcbiAgICAgIFwib3NfaW1hZ2VfTmFtZWRUYWdFdmVudExpc3RcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHRhZyBldmVudHMgcmVsYXRlZCB0byB0aGUgdGFnXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19pbWFnZV9UYWdFdmVudFwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlRhZ0V2ZW50XCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidGFnXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSB0YWdcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk5hbWVkVGFnRXZlbnRMaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2ltYWdlX05hbWVkVGFnUmVmZXJlbmNlXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFubm90YXRpb25zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFubm90YXRpb25zIGFzc29jaWF0ZWQgd2l0aCBpbWFnZXMgdXNpbmcgdGhpcyB0YWdcIixcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFubm90YXRpb25zIGFzc29jaWF0ZWQgd2l0aCBpbWFnZXMgdXNpbmcgdGhpcyB0YWdcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJqYXZhLnV0aWwuTWFwXFx1MDAzY1N0cmluZyxTdHJpbmdcXHUwMDNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZnJvbVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RSZWZlcmVuY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWUgb2YgdGFnXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5OYW1lZFRhZ1JlZmVyZW5jZVwiXG4gICAgICB9LFxuICAgICAgXCJvc19pbWFnZV9UYWdFdmVudFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJjcmVhdGVkXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIndoZW4gdGhlIGV2ZW50IHdhcyBjcmVhdGVkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZG9ja2VySW1hZ2VSZWZlcmVuY2VcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIHN0cmluZyB0aGF0IGNhbiBiZSB1c2VkIHRvIHB1bGwgdGhpcyBpbWFnZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImltYWdlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBpbWFnZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuVGFnRXZlbnRcIlxuICAgICAgfSxcbiAgICAgIFwib3Nfb2F1dGhfT0F1dGhBY2Nlc3NUb2tlblwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJhdXRob3JpemVUb2tlblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJjb250YWlucyB0aGUgdG9rZW4gdGhhdCBhdXRob3JpemVkIHRoaXMgdG9rZW5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjbGllbnROYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJlZmVyZW5jZXMgdGhlIGNsaWVudCB0aGF0IGNyZWF0ZWQgdGhpcyB0b2tlblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImV4cGlyZXNJblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaXMgdGhlIHNlY29uZHMgZnJvbSBjcmVhdGlvbiB0aW1lIGJlZm9yZSB0aGlzIHRva2VuIGV4cGlyZXNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJMb25nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIk9BdXRoQWNjZXNzVG9rZW5cIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlZGlyZWN0VVJJXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJlZGlyZWN0aW9uIFVSSSBhc3NvY2lhdGVkIHdpdGggdGhlIHRva2VuXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVmcmVzaFRva2VuXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9wdGlvbmFsIHZhbHVlIGJ5IHdoaWNoIHRoaXMgdG9rZW4gY2FuIGJlIHJlbmV3ZWRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzY29wZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHJlcXVlc3RlZCBzY29wZXNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgcmVxdWVzdGVkIHNjb3Blc1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInVzZXJOYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInVzZXIgbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhpcyB0b2tlblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInVzZXJVSURcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidW5pcXVlIFVJRCBhc3NvY2lhdGVkIHdpdGggdGhpcyB0b2tlblwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuT0F1dGhBY2Nlc3NUb2tlblwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19vYXV0aF9PQXV0aEFjY2Vzc1Rva2VuTGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2Ygb2F1dGggYWNjZXNzIHRva2Vuc1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3Nfb2F1dGhfT0F1dGhBY2Nlc3NUb2tlblwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk9BdXRoQWNjZXNzVG9rZW5cIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiT0F1dGhBY2Nlc3NUb2tlbkxpc3RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5PQXV0aEFjY2Vzc1Rva2VuTGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19vYXV0aF9PQXV0aEF1dGhvcml6ZVRva2VuXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImNsaWVudE5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicmVmZXJlbmNlcyB0aGUgY2xpZW50IHRoYXQgY3JlYXRlZCB0aGlzIHRva2VuXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZXhwaXJlc0luXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzZWNvbmRzIGZyb20gY3JlYXRpb24gdGltZSBiZWZvcmUgdGhpcyB0b2tlbiBleHBpcmVzXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiTG9uZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJPQXV0aEF1dGhvcml6ZVRva2VuXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZWRpcmVjdFVSSVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJyZWRpcmVjdGlvbiBVUkkgYXNzb2NpYXRlZCB3aXRoIHRoZSB0b2tlblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNjb3Blc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgcmVxdWVzdGVkIHNjb3Blc1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiByZXF1ZXN0ZWQgc2NvcGVzXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3RhdGVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic3RhdGUgZGF0YSBmcm9tIHJlcXVlc3RcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1c2VyTmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ1c2VyIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdG9rZW5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1c2VyVUlEXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInVuaXF1ZSBVSUQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdG9rZW4uICB1c2VyVUlEIGFuZCB1c2VyTmFtZSBtdXN0IGJvdGggbWF0Y2ggZm9yIHRoaXMgdG9rZW4gdG8gYmUgdmFsaWRcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk9BdXRoQXV0aG9yaXplVG9rZW5cIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwib3Nfb2F1dGhfT0F1dGhBdXRob3JpemVUb2tlbkxpc3RcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIG9hdXRoIGF1dGhvcml6YXRpb24gdG9rZW5zXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19vYXV0aF9PQXV0aEF1dGhvcml6ZVRva2VuXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuT0F1dGhBdXRob3JpemVUb2tlblwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJPQXV0aEF1dGhvcml6ZVRva2VuTGlzdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk9BdXRoQXV0aG9yaXplVG9rZW5MaXN0XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX29hdXRoX09BdXRoQ2xpZW50XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJPQXV0aENsaWVudFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVkaXJlY3RVUklzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidmFsaWQgcmVkaXJlY3Rpb24gVVJJcyBhc3NvY2lhdGVkIHdpdGggYSBjbGllbnRcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInZhbGlkIHJlZGlyZWN0aW9uIFVSSXMgYXNzb2NpYXRlZCB3aXRoIGEgY2xpZW50XCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVzcG9uZFdpdGhDaGFsbGVuZ2VzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJpbmRpY2F0ZXMgd2hldGhlciB0aGUgY2xpZW50IHdhbnRzIGF1dGhlbnRpY2F0aW9uIG5lZWRlZCByZXNwb25zZXMgbWFkZSBpbiB0aGUgZm9ybSBvZiBjaGFsbGVuZ2VzIGluc3RlYWQgb2YgcmVkaXJlY3RzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2VjcmV0XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInVuaXF1ZSBzZWNyZXQgYXNzb2NpYXRlZCB3aXRoIGEgY2xpZW50XCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5PQXV0aENsaWVudFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19vYXV0aF9PQXV0aENsaWVudEF1dGhvcml6YXRpb25cIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiY2xpZW50TmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJyZWZlcmVuY2VzIHRoZSBjbGllbnQgdGhhdCBjcmVhdGVkIHRoaXMgYXV0aG9yaXphdGlvblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJPQXV0aENsaWVudEF1dGhvcml6YXRpb25cIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNjb3Blc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgZ3JhbnRlZCBzY29wZXNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgZ3JhbnRlZCBzY29wZXNcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1c2VyTmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ1c2VyIG5hbWUgdGhhdCBhdXRob3JpemVkIHRoaXMgY2xpZW50XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidXNlclVJRFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ1bmlxdWUgVUlEIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGF1dGhvcml6YXRpb24uIHVzZXJVSUQgYW5kIHVzZXJOYW1lIG11c3QgYm90aCBtYXRjaCBmb3IgdGhpcyBhdXRob3JpemF0aW9uIHRvIGJlIHZhbGlkXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5PQXV0aENsaWVudEF1dGhvcml6YXRpb25cIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwib3Nfb2F1dGhfT0F1dGhDbGllbnRBdXRob3JpemF0aW9uTGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2Ygb2F1dGggY2xpZW50IGF1dGhvcml6YXRpb25zXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19vYXV0aF9PQXV0aENsaWVudEF1dGhvcml6YXRpb25cIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5PQXV0aENsaWVudEF1dGhvcml6YXRpb25cIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiT0F1dGhDbGllbnRBdXRob3JpemF0aW9uTGlzdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk9BdXRoQ2xpZW50QXV0aG9yaXphdGlvbkxpc3RcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwib3Nfb2F1dGhfT0F1dGhDbGllbnRMaXN0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBvYXV0aCBjbGllbnRzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19vYXV0aF9PQXV0aENsaWVudFwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk9BdXRoQ2xpZW50XCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIk9BdXRoQ2xpZW50TGlzdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk9BdXRoQ2xpZW50TGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19wcm9qZWN0X1Byb2plY3RcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlByb2plY3RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNwZWNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19wcm9qZWN0X1Byb2plY3RTcGVjXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlByb2plY3RTcGVjXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3RhdHVzXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfcHJvamVjdF9Qcm9qZWN0U3RhdHVzXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlByb2plY3RTdGF0dXNcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlByb2plY3RcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwib3NfcHJvamVjdF9Qcm9qZWN0TGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgcHJvamVjdHNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX3Byb2plY3RfUHJvamVjdFwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlByb2plY3RcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiUHJvamVjdExpc3RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Qcm9qZWN0TGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19wcm9qZWN0X1Byb2plY3RSZXF1ZXN0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImRlc2NyaXB0aW9uIHRvIGFwcGx5IHRvIGEgcHJvamVjdFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImRpc3BsYXlOYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImRpc3BsYXkgbmFtZSB0byBhcHBseSB0byBhIHByb2plY3RcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiUHJvamVjdFJlcXVlc3RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUHJvamVjdFJlcXVlc3RcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwib3NfcHJvamVjdF9Qcm9qZWN0U3BlY1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJmaW5hbGl6ZXJzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYW4gb3BhcXVlIGxpc3Qgb2YgdmFsdWVzIHRoYXQgbXVzdCBiZSBlbXB0eSB0byBwZXJtYW5lbnRseSByZW1vdmUgb2JqZWN0IGZyb20gc3RvcmFnZVwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYW4gb3BhcXVlIGxpc3Qgb2YgdmFsdWVzIHRoYXQgbXVzdCBiZSBlbXB0eSB0byBwZXJtYW5lbnRseSByZW1vdmUgb2JqZWN0IGZyb20gc3RvcmFnZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUHJvamVjdFNwZWNcIlxuICAgICAgfSxcbiAgICAgIFwib3NfcHJvamVjdF9Qcm9qZWN0U3RhdHVzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcInBoYXNlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInBoYXNlIGlzIHRoZSBjdXJyZW50IGxpZmVjeWNsZSBwaGFzZSBvZiB0aGUgcHJvamVjdFwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUHJvamVjdFN0YXR1c1wiXG4gICAgICB9LFxuICAgICAgXCJvc19yb3V0ZV9Sb3V0ZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiUm91dGVcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNwZWNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19yb3V0ZV9Sb3V0ZVNwZWNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUm91dGVTcGVjXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3RhdHVzXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3Nfcm91dGVfUm91dGVTdGF0dXNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUm91dGVTdGF0dXNcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlJvdXRlXCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX3JvdXRlX1JvdXRlTGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2Ygcm91dGVzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19yb3V0ZV9Sb3V0ZVwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlJvdXRlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlJvdXRlTGlzdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlJvdXRlTGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19yb3V0ZV9Sb3V0ZVNwZWNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiaG9zdFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJvcHRpb25hbDogYWxpYXMvZG5zIHRoYXQgcG9pbnRzIHRvIHRoZSBzZXJ2aWNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGF0aFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJvcHRpb25hbDogcGF0aCB0aGF0IHRoZSByb3V0ZXIgd2F0Y2hlcyB0byByb3V0ZSB0cmFmZmljIHRvIHRoZSBzZXJ2aWNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidGxzXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3Nfcm91dGVfVExTQ29uZmlnXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlRMU0NvbmZpZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInRvXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RSZWZlcmVuY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUm91dGVTcGVjXCJcbiAgICAgIH0sXG4gICAgICBcIm9zX3JvdXRlX1JvdXRlU3RhdHVzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlJvdXRlU3RhdHVzXCJcbiAgICAgIH0sXG4gICAgICBcIm9zX3JvdXRlX1RMU0NvbmZpZ1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJjYUNlcnRpZmljYXRlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInByb3ZpZGVzIHRoZSBjZXJ0IGF1dGhvcml0eSBjZXJ0aWZpY2F0ZSBjb250ZW50c1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImNlcnRpZmljYXRlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInByb3ZpZGVzIGNlcnRpZmljYXRlIGNvbnRlbnRzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZGVzdGluYXRpb25DQUNlcnRpZmljYXRlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInByb3ZpZGVzIHRoZSBjb250ZW50cyBvZiB0aGUgY2EgY2VydGlmaWNhdGUgb2YgdGhlIGZpbmFsIGRlc3RpbmF0aW9uLiAgV2hlbiB1c2luZyByZS1lbmNyeXB0IHRlcm1pbmF0aW9uIHRoaXMgZmlsZSBzaG91bGQgYmUgcHJvdmlkZWQgaW4gb3JkZXIgdG8gaGF2ZSByb3V0ZXJzIHVzZSBpdCBmb3IgaGVhbHRoIGNoZWNrcyBvbiB0aGUgc2VjdXJlIGNvbm5lY3Rpb25cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXlcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicHJvdmlkZXMga2V5IGZpbGUgY29udGVudHNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0ZXJtaW5hdGlvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJpbmRpY2F0ZXMgdGVybWluYXRpb24gdHlwZS4gIGlmIG5vdCBzZXRcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlRMU0NvbmZpZ1wiXG4gICAgICB9LFxuICAgICAgXCJvc190ZW1wbGF0ZV9QYXJhbWV0ZXJcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib3B0aW9uYWw6IGRlc2NyaWJlcyB0aGUgcGFyYW1ldGVyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZnJvbVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJpbnB1dCB2YWx1ZSBmb3IgdGhlIGdlbmVyYXRvclwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdlbmVyYXRlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9wdGlvbmFsOiBnZW5lcmF0ZSBzcGVjaWZpZXMgdGhlIGdlbmVyYXRvciB0byBiZSB1c2VkIHRvIGdlbmVyYXRlIHJhbmRvbSBzdHJpbmcgZnJvbSBhbiBpbnB1dCB2YWx1ZSBzcGVjaWZpZWQgYnkgdGhlIGZyb20gZmllbGQuICB0aGUgcmVzdWx0IHN0cmluZyBpcyBzdG9yZWQgaW4gdGhlIHZhbHVlIGZpZWxkLiBpZiBub3Qgc3BlY2lmaWVkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJuYW1lIG9mIHRoZSBwYXJhbWV0ZXJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZXF1aXJlZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaW5kaWNhdGVzIHRoZSBwYXJhbWV0ZXIgbXVzdCBoYXZlIGEgbm9uLWVtcHR5IHZhbHVlIG9yIGJlIGdlbmVyYXRlZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInZhbHVlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9wdGlvbmFsOiBob2xkcyB0aGUgcGFyYW1ldGVyIGRhdGEuICBpZiBzcGVjaWZpZWRcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlBhcmFtZXRlclwiXG4gICAgICB9LFxuICAgICAgXCJvc190ZW1wbGF0ZV9UZW1wbGF0ZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiVGVtcGxhdGVcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJsYWJlbHNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib3B0aW9uYWw6IGxpc3Qgb2YgbGFibGVzIHRoYXQgYXJlIGFwcGxpZWQgdG8gZXZlcnkgb2JqZWN0IGR1cmluZyB0aGUgdGVtcGxhdGUgdG8gY29uZmlnIHRyYW5zZm9ybWF0aW9uXCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJvcHRpb25hbDogbGlzdCBvZiBsYWJsZXMgdGhhdCBhcmUgYXBwbGllZCB0byBldmVyeSBvYmplY3QgZHVyaW5nIHRoZSB0ZW1wbGF0ZSB0byBjb25maWcgdHJhbnNmb3JtYXRpb25cIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJqYXZhLnV0aWwuTWFwXFx1MDAzY1N0cmluZyxTdHJpbmdcXHUwMDNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJvYmplY3RzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBvYmplY3RzIHRvIGluY2x1ZGUgaW4gdGhlIHRlbXBsYXRlXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX3J1bnRpbWVfUmF3RXh0ZW5zaW9uXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFyYW1ldGVyc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9wdGlvbmFsOiBsaXN0IG9mIHBhcmFtZXRlcnMgdXNlZCBkdXJpbmcgdGVtcGxhdGUgdG8gY29uZmlnIHRyYW5zZm9ybWF0aW9uXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc190ZW1wbGF0ZV9QYXJhbWV0ZXJcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5QYXJhbWV0ZXJcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlRlbXBsYXRlXCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX3RlbXBsYXRlX1RlbXBsYXRlTGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgdGVtcGxhdGVzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc190ZW1wbGF0ZV9UZW1wbGF0ZVwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlRlbXBsYXRlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlRlbXBsYXRlTGlzdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlRlbXBsYXRlTGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc191c2VyX0dyb3VwXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJHcm91cFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidXNlcnNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHVzZXJzIGluIHRoaXMgZ3JvdXBcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgdXNlcnMgaW4gdGhpcyBncm91cFwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuR3JvdXBcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwib3NfdXNlcl9Hcm91cExpc3RcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIGdyb3Vwc1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfdXNlcl9Hcm91cFwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkdyb3VwXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkdyb3VwTGlzdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkdyb3VwTGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc191c2VyX0lkZW50aXR5XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImV4dHJhXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImV4dHJhIGluZm9ybWF0aW9uIGZvciB0aGlzIGlkZW50aXR5XCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJleHRyYSBpbmZvcm1hdGlvbiBmb3IgdGhpcyBpZGVudGl0eVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImphdmEudXRpbC5NYXBcXHUwMDNjU3RyaW5nLFN0cmluZ1xcdTAwM2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiSWRlbnRpdHlcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInByb3ZpZGVyTmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzb3VyY2Ugb2YgaWRlbnRpdHkgaW5mb3JtYXRpb25cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwcm92aWRlclVzZXJOYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInVuaXF1ZWx5IHJlcHJlc2VudHMgdGhpcyBpZGVudGl0eSBpbiB0aGUgc2NvcGUgb2YgdGhlIHByb3ZpZGVyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidXNlclwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RSZWZlcmVuY2VcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLklkZW50aXR5XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX3VzZXJfSWRlbnRpdHlMaXN0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBpZGVudGl0aWVzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc191c2VyX0lkZW50aXR5XCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuSWRlbnRpdHlcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiSWRlbnRpdHlMaXN0XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuSWRlbnRpdHlMaXN0XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX3VzZXJfVXNlclwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJmdWxsTmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJmdWxsIG5hbWUgb2YgdXNlclwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdyb3Vwc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgZ3JvdXBzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIGdyb3Vwc1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImlkZW50aXRpZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIGlkZW50aXRpZXNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgaWRlbnRpdGllc1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJVc2VyXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlVzZXJcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwib3NfdXNlcl9Vc2VyTGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgdXNlcnNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX3VzZXJfVXNlclwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlVzZXJcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiVXNlckxpc3RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Vc2VyTGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJzcGV0ZXJfaW5mX0RlY1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5EZWNcIlxuICAgICAgfVxuICAgIH0sXG4gICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgIFwiQmFzZUt1YmVybmV0ZXNMaXN0XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQmFzZUt1YmVybmV0ZXNMaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIkJ1aWxkQ29uZmlnTGlzdFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfQnVpbGRDb25maWdMaXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRDb25maWdMaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIkJ1aWxkTGlzdFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfQnVpbGRMaXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRMaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIkJ1aWxkUmVxdWVzdFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfQnVpbGRSZXF1ZXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRSZXF1ZXN0XCJcbiAgICAgIH0sXG4gICAgICBcIkNsdXN0ZXJQb2xpY3lcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fQ2x1c3RlclBvbGljeVwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkNsdXN0ZXJQb2xpY3lcIlxuICAgICAgfSxcbiAgICAgIFwiQ2x1c3RlclBvbGljeUJpbmRpbmdcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fQ2x1c3RlclBvbGljeUJpbmRpbmdcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5DbHVzdGVyUG9saWN5QmluZGluZ1wiXG4gICAgICB9LFxuICAgICAgXCJDbHVzdGVyUG9saWN5QmluZGluZ0xpc3RcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fQ2x1c3RlclBvbGljeUJpbmRpbmdMaXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQ2x1c3RlclBvbGljeUJpbmRpbmdMaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIkNsdXN0ZXJQb2xpY3lMaXN0XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX0NsdXN0ZXJQb2xpY3lMaXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQ2x1c3RlclBvbGljeUxpc3RcIlxuICAgICAgfSxcbiAgICAgIFwiQ2x1c3RlclJvbGVCaW5kaW5nXCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX0NsdXN0ZXJSb2xlQmluZGluZ1wiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkNsdXN0ZXJSb2xlQmluZGluZ1wiXG4gICAgICB9LFxuICAgICAgXCJDbHVzdGVyUm9sZUJpbmRpbmdMaXN0XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX0NsdXN0ZXJSb2xlQmluZGluZ0xpc3RcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5DbHVzdGVyUm9sZUJpbmRpbmdMaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIkNvbmZpZ1wiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19jb25maWdfQ29uZmlnXCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNvbmZpZ1wiXG4gICAgICB9LFxuICAgICAgXCJDb250YWluZXJTdGF0dXNcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfQ29udGFpbmVyU3RhdHVzXCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNvbnRhaW5lclN0YXR1c1wiXG4gICAgICB9LFxuICAgICAgXCJEZXBsb3ltZW50Q29uZmlnTGlzdFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfZGVwbG95X0RlcGxveW1lbnRDb25maWdMaXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuRGVwbG95bWVudENvbmZpZ0xpc3RcIlxuICAgICAgfSxcbiAgICAgIFwiRW5kcG9pbnRzXCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0VuZHBvaW50c1wiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FbmRwb2ludHNcIlxuICAgICAgfSxcbiAgICAgIFwiRW5kcG9pbnRzTGlzdFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19FbmRwb2ludHNMaXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVuZHBvaW50c0xpc3RcIlxuICAgICAgfSxcbiAgICAgIFwiRW52VmFyXCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0VudlZhclwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FbnZWYXJcIlxuICAgICAgfSxcbiAgICAgIFwiRXZlbnRMaXN0XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0V2ZW50TGlzdFwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FdmVudExpc3RcIlxuICAgICAgfSxcbiAgICAgIFwiR3JvdXBcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX3VzZXJfR3JvdXBcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Hcm91cFwiXG4gICAgICB9LFxuICAgICAgXCJHcm91cExpc3RcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX3VzZXJfR3JvdXBMaXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuR3JvdXBMaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIklkZW50aXR5XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc191c2VyX0lkZW50aXR5XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuSWRlbnRpdHlcIlxuICAgICAgfSxcbiAgICAgIFwiSWRlbnRpdHlMaXN0XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc191c2VyX0lkZW50aXR5TGlzdFwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLklkZW50aXR5TGlzdFwiXG4gICAgICB9LFxuICAgICAgXCJJbWFnZUxpc3RcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2ltYWdlX0ltYWdlTGlzdFwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkltYWdlTGlzdFwiXG4gICAgICB9LFxuICAgICAgXCJJbWFnZVN0cmVhbUxpc3RcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2ltYWdlX0ltYWdlU3RyZWFtTGlzdFwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkltYWdlU3RyZWFtTGlzdFwiXG4gICAgICB9LFxuICAgICAgXCJMb2NhbFN1YmplY3RBY2Nlc3NSZXZpZXdcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fTG9jYWxTdWJqZWN0QWNjZXNzUmV2aWV3XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuTG9jYWxTdWJqZWN0QWNjZXNzUmV2aWV3XCJcbiAgICAgIH0sXG4gICAgICBcIk5hbWVzcGFjZVwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19OYW1lc3BhY2VcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTmFtZXNwYWNlXCJcbiAgICAgIH0sXG4gICAgICBcIk5hbWVzcGFjZUxpc3RcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTmFtZXNwYWNlTGlzdFwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5OYW1lc3BhY2VMaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIk5vZGVcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTm9kZVwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Ob2RlXCJcbiAgICAgIH0sXG4gICAgICBcIk5vZGVMaXN0XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX05vZGVMaXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5vZGVMaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIk9BdXRoQWNjZXNzVG9rZW5cIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX29hdXRoX09BdXRoQWNjZXNzVG9rZW5cIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5PQXV0aEFjY2Vzc1Rva2VuXCJcbiAgICAgIH0sXG4gICAgICBcIk9BdXRoQWNjZXNzVG9rZW5MaXN0XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19vYXV0aF9PQXV0aEFjY2Vzc1Rva2VuTGlzdFwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk9BdXRoQWNjZXNzVG9rZW5MaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIk9BdXRoQXV0aG9yaXplVG9rZW5cIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX29hdXRoX09BdXRoQXV0aG9yaXplVG9rZW5cIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5PQXV0aEF1dGhvcml6ZVRva2VuXCJcbiAgICAgIH0sXG4gICAgICBcIk9BdXRoQXV0aG9yaXplVG9rZW5MaXN0XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19vYXV0aF9PQXV0aEF1dGhvcml6ZVRva2VuTGlzdFwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk9BdXRoQXV0aG9yaXplVG9rZW5MaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIk9BdXRoQ2xpZW50XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19vYXV0aF9PQXV0aENsaWVudFwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk9BdXRoQ2xpZW50XCJcbiAgICAgIH0sXG4gICAgICBcIk9BdXRoQ2xpZW50QXV0aG9yaXphdGlvblwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3Nfb2F1dGhfT0F1dGhDbGllbnRBdXRob3JpemF0aW9uXCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuT0F1dGhDbGllbnRBdXRob3JpemF0aW9uXCJcbiAgICAgIH0sXG4gICAgICBcIk9BdXRoQ2xpZW50QXV0aG9yaXphdGlvbkxpc3RcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX29hdXRoX09BdXRoQ2xpZW50QXV0aG9yaXphdGlvbkxpc3RcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5PQXV0aENsaWVudEF1dGhvcml6YXRpb25MaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIk9BdXRoQ2xpZW50TGlzdFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3Nfb2F1dGhfT0F1dGhDbGllbnRMaXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuT0F1dGhDbGllbnRMaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIk9iamVjdE1ldGFcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcbiAgICAgIH0sXG4gICAgICBcIlBlcnNpc3RlbnRWb2x1bWVcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUGVyc2lzdGVudFZvbHVtZVwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lXCJcbiAgICAgIH0sXG4gICAgICBcIlBlcnNpc3RlbnRWb2x1bWVDbGFpbVwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1cIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUGVyc2lzdGVudFZvbHVtZUNsYWltXCJcbiAgICAgIH0sXG4gICAgICBcIlBlcnNpc3RlbnRWb2x1bWVDbGFpbUxpc3RcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUGVyc2lzdGVudFZvbHVtZUNsYWltTGlzdFwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1MaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIlBlcnNpc3RlbnRWb2x1bWVMaXN0XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1BlcnNpc3RlbnRWb2x1bWVMaXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBlcnNpc3RlbnRWb2x1bWVMaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIlBvZExpc3RcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUG9kTGlzdFwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Qb2RMaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIlBvbGljeVwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9Qb2xpY3lcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Qb2xpY3lcIlxuICAgICAgfSxcbiAgICAgIFwiUG9saWN5QmluZGluZ1wiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9Qb2xpY3lCaW5kaW5nXCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUG9saWN5QmluZGluZ1wiXG4gICAgICB9LFxuICAgICAgXCJQb2xpY3lCaW5kaW5nTGlzdFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9Qb2xpY3lCaW5kaW5nTGlzdFwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlBvbGljeUJpbmRpbmdMaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIlBvbGljeUxpc3RcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fUG9saWN5TGlzdFwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlBvbGljeUxpc3RcIlxuICAgICAgfSxcbiAgICAgIFwiUHJvamVjdFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfcHJvamVjdF9Qcm9qZWN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUHJvamVjdFwiXG4gICAgICB9LFxuICAgICAgXCJQcm9qZWN0TGlzdFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfcHJvamVjdF9Qcm9qZWN0TGlzdFwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlByb2plY3RMaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIlByb2plY3RSZXF1ZXN0XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19wcm9qZWN0X1Byb2plY3RSZXF1ZXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUHJvamVjdFJlcXVlc3RcIlxuICAgICAgfSxcbiAgICAgIFwiUXVhbnRpdHlcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfcmVzb3VyY2VfUXVhbnRpdHlcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUXVhbnRpdHlcIlxuICAgICAgfSxcbiAgICAgIFwiUmVwbGljYXRpb25Db250cm9sbGVyTGlzdFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19SZXBsaWNhdGlvbkNvbnRyb2xsZXJMaXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJlcGxpY2F0aW9uQ29udHJvbGxlckxpc3RcIlxuICAgICAgfSxcbiAgICAgIFwiUmVzb3VyY2VRdW90YVwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19SZXNvdXJjZVF1b3RhXCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJlc291cmNlUXVvdGFcIlxuICAgICAgfSxcbiAgICAgIFwiUmVzb3VyY2VRdW90YUxpc3RcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUmVzb3VyY2VRdW90YUxpc3RcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVzb3VyY2VRdW90YUxpc3RcIlxuICAgICAgfSxcbiAgICAgIFwiUm9sZVwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9Sb2xlXCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUm9sZVwiXG4gICAgICB9LFxuICAgICAgXCJSb2xlQmluZGluZ1wiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9Sb2xlQmluZGluZ1wiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlJvbGVCaW5kaW5nXCJcbiAgICAgIH0sXG4gICAgICBcIlJvbGVCaW5kaW5nTGlzdFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9Sb2xlQmluZGluZ0xpc3RcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Sb2xlQmluZGluZ0xpc3RcIlxuICAgICAgfSxcbiAgICAgIFwiUm9sZUxpc3RcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fUm9sZUxpc3RcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Sb2xlTGlzdFwiXG4gICAgICB9LFxuICAgICAgXCJSb290UGF0aHNcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2FwaV9Sb290UGF0aHNcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUm9vdFBhdGhzXCJcbiAgICAgIH0sXG4gICAgICBcIlJvdXRlTGlzdFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3Nfcm91dGVfUm91dGVMaXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUm91dGVMaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIlNlY3JldFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19TZWNyZXRcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VjcmV0XCJcbiAgICAgIH0sXG4gICAgICBcIlNlY3JldExpc3RcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfU2VjcmV0TGlzdFwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZWNyZXRMaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIlNlY3VyaXR5Q29udGV4dENvbnN0cmFpbnRzXCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1NlY3VyaXR5Q29udGV4dENvbnN0cmFpbnRzXCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlY3VyaXR5Q29udGV4dENvbnN0cmFpbnRzXCJcbiAgICAgIH0sXG4gICAgICBcIlNlY3VyaXR5Q29udGV4dENvbnN0cmFpbnRzTGlzdFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19TZWN1cml0eUNvbnRleHRDb25zdHJhaW50c0xpc3RcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VjdXJpdHlDb250ZXh0Q29uc3RyYWludHNMaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIlNlcnZpY2VBY2NvdW50XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1NlcnZpY2VBY2NvdW50XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlcnZpY2VBY2NvdW50XCJcbiAgICAgIH0sXG4gICAgICBcIlNlcnZpY2VBY2NvdW50TGlzdFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19TZXJ2aWNlQWNjb3VudExpc3RcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VydmljZUFjY291bnRMaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIlNlcnZpY2VMaXN0XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1NlcnZpY2VMaXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlcnZpY2VMaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIlN0YXR1c1wiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19TdGF0dXNcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU3RhdHVzXCJcbiAgICAgIH0sXG4gICAgICBcIlN1YmplY3RBY2Nlc3NSZXZpZXdcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fU3ViamVjdEFjY2Vzc1Jldmlld1wiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlN1YmplY3RBY2Nlc3NSZXZpZXdcIlxuICAgICAgfSxcbiAgICAgIFwiU3ViamVjdEFjY2Vzc1Jldmlld1Jlc3BvbnNlXCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX1N1YmplY3RBY2Nlc3NSZXZpZXdSZXNwb25zZVwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlN1YmplY3RBY2Nlc3NSZXZpZXdSZXNwb25zZVwiXG4gICAgICB9LFxuICAgICAgXCJUYWdFdmVudFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfaW1hZ2VfVGFnRXZlbnRcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5UYWdFdmVudFwiXG4gICAgICB9LFxuICAgICAgXCJUZW1wbGF0ZVwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfdGVtcGxhdGVfVGVtcGxhdGVcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5UZW1wbGF0ZVwiXG4gICAgICB9LFxuICAgICAgXCJUZW1wbGF0ZUxpc3RcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX3RlbXBsYXRlX1RlbXBsYXRlTGlzdFwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlRlbXBsYXRlTGlzdFwiXG4gICAgICB9LFxuICAgICAgXCJVc2VyXCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc191c2VyX1VzZXJcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Vc2VyXCJcbiAgICAgIH0sXG4gICAgICBcIlVzZXJMaXN0XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc191c2VyX1VzZXJMaXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuVXNlckxpc3RcIlxuICAgICAgfSxcbiAgICAgIFwiV2F0Y2hFdmVudFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc193YXRjaF9XYXRjaEV2ZW50XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLldhdGNoRXZlbnRcIlxuICAgICAgfVxuICAgIH0sXG4gICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlXG4gIH1cblxuXG59IiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cInNjaGVtYS50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxubW9kdWxlIEt1YmVybmV0ZXMge1xuICBcbiAgXG4gIHZhciBoaWRkZW5Qcm9wZXJ0aWVzID0gWydzdGF0dXMnLCAnZGVsZXRpb25UaW1lc3RhbXAnXTtcblxuICBmdW5jdGlvbiB3aXRoUHJvcGVydHkoc2NoZW1hOmFueSwgbmFtZTpzdHJpbmcsIGFjdGlvbjooYW55KSA9PiB2b2lkKSB7XG4gICAgaWYgKHNjaGVtYS5wcm9wZXJ0aWVzW25hbWVdKSB7XG4gICAgICBhY3Rpb24oc2NoZW1hLnByb3BlcnRpZXNbbmFtZV0pO1xuICAgIH1cbiAgfVxuICBcbiAgZnVuY3Rpb24gaGlkZVByb3BlcnRpZXMoc2NoZW1hKSB7XG4gICAgXy5mb3JFYWNoKGhpZGRlblByb3BlcnRpZXMsIChwcm9wZXJ0eSkgPT4ge1xuICAgICAgd2l0aFByb3BlcnR5KHNjaGVtYSwgcHJvcGVydHksIChwcm9wZXJ0eSkgPT4ge1xuICAgICAgICBwcm9wZXJ0eS5oaWRkZW4gPSB0cnVlO1xuICAgICAgfSlcbiAgICB9KTtcbiAgfVxuICBcbiAgX21vZHVsZS5mYWN0b3J5KCdLdWJlcm5ldGVzU2NoZW1hJywgWydTY2hlbWFSZWdpc3RyeScsIChzY2hlbWFzOkhhd3Rpb0Zvcm1zLlNjaGVtYVJlZ2lzdHJ5KSA9PiB7XG4gICAgY29uZmlndXJlU2NoZW1hKCk7XG4gICAgXG4gICAgc2NoZW1hcy5hZGRMaXN0ZW5lcihcIms4cyBzY2hlbWEgY3VzdG9taXplclwiLCAobmFtZSwgc2NoZW1hKSA9PiB7XG4gICAgICBpZiAoc2NoZW1hLnByb3BlcnRpZXMpIHtcbiAgICAgICAgaWYgKHNjaGVtYS5wcm9wZXJ0aWVzLm5hbWUpIHtcbiAgICAgICAgICBzY2hlbWEuY29udHJvbHMgPSBbJ25hbWUnLCAnKiddO1xuICAgICAgICB9XG4gICAgICAgIHdpdGhQcm9wZXJ0eShzY2hlbWEsICdwb3J0YWxJUCcsIChwcm9wZXJ0eSkgPT4ge1xuICAgICAgICAgIHByb3BlcnR5LmxhYmVsID0gXCJQb3J0YWwgSVBcIlxuICAgICAgICB9KTtcbiAgICAgICAgd2l0aFByb3BlcnR5KHNjaGVtYSwgJ3B1YmxpY0lQcycsIChwcm9wZXJ0eSkgPT4ge1xuICAgICAgICAgIHByb3BlcnR5LmxhYmVsID0gXCJQdWJsaWMgSVBzXCJcbiAgICAgICAgfSk7XG4gICAgICAgIHdpdGhQcm9wZXJ0eShzY2hlbWEsICdTcGVjJywgKHByb3BlcnR5KSA9PiB7XG4gICAgICAgICAgcHJvcGVydHkubGFiZWwgPSAnZmFsc2UnO1xuICAgICAgICB9KTtcbiAgICAgICAgd2l0aFByb3BlcnR5KHNjaGVtYSwgJ01ldGFkYXRhJywgKHByb3BlcnR5KSA9PiB7XG4gICAgICAgICAgcHJvcGVydHkubGFiZWwgPSAnZmFsc2UnO1xuICAgICAgICB9KTtcbiAgICAgICAgaGlkZVByb3BlcnRpZXMoc2NoZW1hKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKF8uZW5kc1dpdGgobmFtZSwgXCJTZXJ2aWNlU3BlY1wiKSkge1xuICAgICAgICBzY2hlbWEuY29udHJvbHMgPSBbXCJwb3J0YWxJUFwiLCBcImNyZWF0ZUV4dGVybmFsTG9hZEJhbGFuY2VyXCIsIFwic2Vzc2lvbkFmZmluaXR5XCIsIFwicHVibGljSVBzXCIsIFwicG9ydHNcIiwgXCJzZWxlY3RvclwiLCBcIipcIl07XG4gICAgICAgIHdpdGhQcm9wZXJ0eShzY2hlbWEsICdzZXNzaW9uQWZmaW5pdHknLCAocHJvcGVydHkpID0+IHtcbiAgICAgICAgICBsb2cuZGVidWcoXCJTY2hlbWE6IFwiLCBzY2hlbWEpO1xuICAgICAgICAgIHByb3BlcnR5LmVudW0gPSBbJ05vbmUnLCAnQ2xpZW50SVAnXTtcbiAgICAgICAgICBwcm9wZXJ0eS5kZWZhdWx0ID0gJ05vbmUnO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKF8uZW5kc1dpdGgobmFtZSwgXCJTZXJ2aWNlXCIpKSB7XG4gICAgICAgIHNjaGVtYS5jb250cm9scyA9IHVuZGVmaW5lZDtcbiAgICAgICAgc2NoZW1hLnRhYnMgPSB7XG4gICAgICAgICAgJ0Jhc2ljIEluZm9ybWF0aW9uJzogWydtZXRhZGF0YSddLFxuICAgICAgICAgICdEZXRhaWxzJzogWycqJ11cbiAgICAgICAgfVxuICAgICAgICBsb2cuZGVidWcoXCJOYW1lOiBcIiwgbmFtZSwgXCIgU2NoZW1hOiBcIiwgc2NoZW1hKTtcbiAgICAgIH1cbiAgICAgXG4gICAgfSk7XG4gICAgXG4gICAgXG4gICAgc2NoZW1hcy5hZGRTY2hlbWEoJ2t1YmVybmV0ZXMnLCA8YW55PiBzY2hlbWEpO1xuICAgIC8vIG5vdyBsZXRzIGl0ZXJhdGUgYW5kIGFkZCBhbGwgdGhlIGRlZmluaXRpb25zIHRvb1xuICAgIGFuZ3VsYXIuZm9yRWFjaChzY2hlbWEuZGVmaW5pdGlvbnMsIChkZWZpbml0aW9uLCB0eXBlTmFtZSkgPT4ge1xuICAgICAgLy9zY2hlbWFzLmFkZFNjaGVtYSh0eXBlTmFtZSwgZGVmaW5pdGlvbik7XG4gICAgICBzY2hlbWFzLmFkZFNjaGVtYShcIiMvZGVmaW5pdGlvbnMvXCIgKyB0eXBlTmFtZSwgZGVmaW5pdGlvbik7XG4gICAgfSk7XG4gICAgcmV0dXJuIHNjaGVtYTtcbiAgfV0pO1xuXG5cbiAgXG59IiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblxuICAvLyBmYWNhZGUgdGhpcyB0byB0aGUgd2F0Y2hlciBzZXJ2aWNlXG4gIGNsYXNzIEt1YmVybmV0ZXNTdGF0ZUltcGwgaW1wbGVtZW50cyBLdWJlcm5ldGVzU3RhdGUge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgd2F0Y2hlcjpXYXRjaGVyU2VydmljZSkge1xuICAgIH1cbiAgICBnZXQgbmFtZXNwYWNlcygpOkFycmF5PHN0cmluZz4ge1xuICAgICAgcmV0dXJuIF8ubWFwKHRoaXMud2F0Y2hlci5nZXRPYmplY3RzKFdhdGNoVHlwZXMuTkFNRVNQQUNFUyksIChuYW1lc3BhY2UpID0+IHtcbiAgICAgICAgcmV0dXJuIG5hbWVzcGFjZS5tZXRhZGF0YS5uYW1lO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGdldCBzZWxlY3RlZE5hbWVzcGFjZSgpOnN0cmluZyB7XG4gICAgICByZXR1cm4gdGhpcy53YXRjaGVyLmdldE5hbWVzcGFjZSgpO1xuICAgIH1cbiAgICBzZXQgc2VsZWN0ZWROYW1lc3BhY2UobmFtZXNwYWNlOnN0cmluZykge1xuICAgICAgdGhpcy53YXRjaGVyLnNldE5hbWVzcGFjZShuYW1lc3BhY2UpO1xuICAgIH1cbiAgfVxuXG4gIF9tb2R1bGUuZmFjdG9yeSgnS3ViZXJuZXRlc1N0YXRlJywgWydXYXRjaGVyU2VydmljZScsICh3YXRjaGVyOldhdGNoZXJTZXJ2aWNlKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBLdWJlcm5ldGVzU3RhdGVJbXBsKHdhdGNoZXIpO1xuICB9XSk7XG5cbiAgLy8gVE9ETyB0aGlzIGRvZXNuJ3QgbmVlZCB0byBiZSBhIHNlcnZpY2UgcmVhbGx5XG4gIF9tb2R1bGUuZmFjdG9yeSgnS3ViZXJuZXRlc0FwaVVSTCcsICgpID0+IGt1YmVybmV0ZXNBcGlVcmwoKSk7XG5cbiAgLy8gVE9ETyB3ZSdsbCBnZXQgcmlkIG9mIHRoaXMuLi5cbiAgX21vZHVsZS5mYWN0b3J5KCdLdWJlcm5ldGVzVmVyc2lvbicsIFsoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHF1ZXJ5OiAoKSA9PiBudWxsXG4gICAgfVxuICB9XSk7XG5cbiAgLy8gVE9ETyBsZXQncyBtb3ZlIHRoZXNlIGludG8gS3ViZXJuZXRlc01vZGVsIHNvIGNvbnRyb2xsZXJzIGRvbid0IGhhdmUgdG8gaW5qZWN0IHRoZW0gc2VwYXJhdGVseVxuICBfbW9kdWxlLmZhY3RvcnkoJ0t1YmVybmV0ZXNQb2RzJywgWydLdWJlcm5ldGVzTW9kZWwnLCAoS3ViZXJuZXRlc01vZGVsKSA9PiB7XG4gICAgcmV0dXJuIEt1YmVybmV0ZXNNb2RlbFsncG9kc1Jlc291cmNlJ107XG4gIH1dKTtcblxuICBfbW9kdWxlLmZhY3RvcnkoJ0t1YmVybmV0ZXNSZXBsaWNhdGlvbkNvbnRyb2xsZXJzJywgWydLdWJlcm5ldGVzTW9kZWwnLCAoS3ViZXJuZXRlc01vZGVsKSA9PiB7XG4gICAgcmV0dXJuIEt1YmVybmV0ZXNNb2RlbFsncmVwbGljYXRpb25jb250cm9sbGVyc1Jlc291cmNlJ107XG4gIH1dKTtcblxuICBfbW9kdWxlLmZhY3RvcnkoJ0t1YmVybmV0ZXNTZXJ2aWNlcycsIFsnS3ViZXJuZXRlc01vZGVsJywgKEt1YmVybmV0ZXNNb2RlbCkgPT4ge1xuICAgIHJldHVybiBLdWJlcm5ldGVzTW9kZWxbJ3NlcnZpY2VzUmVzb3VyY2UnXTtcbiAgfV0pO1xuXG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzTW9kZWwudHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblxuICBleHBvcnQgdmFyIEZpbGVEcm9wQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJGaWxlRHJvcENvbnRyb2xsZXJcIiwgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiRmlsZVVwbG9hZGVyXCIsICckaHR0cCcsICgkc2NvcGUsIG1vZGVsOkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEZpbGVVcGxvYWRlciwgJGh0dHA6bmcuSUh0dHBTZXJ2aWNlKSA9PiB7XG5cbiAgICAgIHZhciBsb2cgPSBMb2dnZXIuZ2V0KCdrdWJlcm5ldGVzLWZpbGUtdXBsb2FkZXInKTtcblxuICAgICAgdmFyIHVwbG9hZGVyID0gJHNjb3BlLnVwbG9hZGVyID0gPEZpbGVVcGxvYWQuRmlsZVVwbG9hZGVyPiBuZXcgRmlsZVVwbG9hZGVyKDxGaWxlVXBsb2FkLklPcHRpb25zPntcbiAgICAgICAgYXV0b1VwbG9hZDogZmFsc2UsXG4gICAgICAgIHJlbW92ZUFmdGVyVXBsb2FkOiB0cnVlLFxuICAgICAgICB1cmw6IGt1YmVybmV0ZXNBcGlVcmwoKVxuICAgICAgfSk7XG5cbiAgICAgICRzY29wZS51cGxvYWRlci5vbkFmdGVyQWRkaW5nRmlsZSA9IChmaWxlKSA9PiB7XG4gICAgICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgIGlmIChyZWFkZXIucmVhZHlTdGF0ZSA9PT0gMikge1xuICAgICAgICAgICAgbG9nLmRlYnVnKFwiRmlsZSBhZGRlZDogXCIsIGZpbGUpOyAgICAgICAgXG4gICAgICAgICAgICB2YXIgZGF0YSA9IHJlYWRlci5yZXN1bHQ7XG4gICAgICAgICAgICB2YXIgb2JqID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChfLmVuZHNXaXRoKGZpbGUuX2ZpbGUubmFtZSwgJy5qc29uJykpIHtcbiAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiUGFyc2luZyBKU09OIGZpbGVcIik7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgb2JqID0gYW5ndWxhci5mcm9tSnNvbihkYXRhKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiRmFpbGVkIHRvIHJlYWQgZHJvcHBlZCBmaWxlIFwiLCBmaWxlLl9maWxlLm5hbWUsIFwiOiBcIiwgZXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXy5lbmRzV2l0aChmaWxlLl9maWxlLm5hbWUsICcueWFtbCcpKSB7XG4gICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcIlBhcnNpbmcgWUFNTCBmaWxlXCIpO1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIG9iaiA9IGpzeWFtbC5sb2FkKGRhdGEpO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBsb2cuZGVidWcoXCJGYWlsZWQgdG8gcmVhZCBkcm9wcGVkIGZpbGUgXCIsIGZpbGUuX2ZpbGUubmFtZSwgXCI6IFwiLCBlcnIpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiVW5rbm93biBmaWxlIHR5cGUgZm9yIGZpbGU6IFwiLCBmaWxlLl9maWxlLm5hbWUpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsb2cuZGVidWcoXCJEcm9wcGVkIG9iamVjdDogXCIsIG9iaik7XG4gICAgICAgICAgICBpZiAoIUt1YmVybmV0ZXNBUEkuZ2V0TmFtZXNwYWNlKG9iaikpIHtcbiAgICAgICAgICAgICAgb2JqLm1ldGFkYXRhLm5hbWVzcGFjZSA9IG1vZGVsLmN1cnJlbnROYW1lc3BhY2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEt1YmVybmV0ZXNBUEkucHV0KHtcbiAgICAgICAgICAgICAgb2JqZWN0OiBvYmosXG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgQ29yZS5ub3RpZmljYXRpb24oXCJzdWNjZXNzXCIsIFwiQXBwbGllZCBcIiArIGZpbGUuX2ZpbGUubmFtZSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgbG9nLmluZm8oXCJHb3QgZXJyb3IgYXBwbHlpbmdcIiwgZmlsZS5fZmlsZS5uYW1lLCBcIjogXCIsIGVycik7XG4gICAgICAgICAgICAgICAgQ29yZS5ub3RpZmljYXRpb24oXCJ3YXJuaW5nXCIsIFwiRmFpbGVkIHRvIGFwcGx5IFwiICsgZmlsZS5fZmlsZS5uYW1lICsgXCIsIGVycm9yOiBcIiArIGVyci5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlYWRlci5yZWFkQXNUZXh0KGZpbGUuX2ZpbGUpO1xuICAgICAgfTtcblxuICAgICAgJHNjb3BlLnVwbG9hZGVyLm9uQmVmb3JlVXBsb2FkSXRlbSA9IChpdGVtKSA9PiB7XG4gICAgICAgIGxvZy5kZWJ1ZyhcIlVwbG9hZGluZzogXCIsIGl0ZW0pO1xuICAgICAgICAvL0NvcmUubm90aWZpY2F0aW9uKCdpbmZvJywgJ1VwbG9hZGluZyAnICsgaXRlbSk7XG4gICAgICB9O1xuXG4gICAgICAkc2NvcGUudXBsb2FkZXIub25TdWNjZXNzSXRlbSA9IChpdGVtOkZpbGVVcGxvYWQuSUZpbGVJdGVtKSA9PiB7XG4gICAgICAgIGxvZy5kZWJ1ZyhcIm9uU3VjY2Vzc0l0ZW06IFwiLCBpdGVtKTtcbiAgICAgIH07XG5cbiAgICAgICRzY29wZS51cGxvYWRlci5vbkVycm9ySXRlbSA9IChpdGVtLCByZXNwb25zZSwgc3RhdHVzKSA9PiB7XG4gICAgICAgIGxvZy5kZWJ1ZyhcIkZhaWxlZCB0byBhcHBseSwgcmVzcG9uc2U6IFwiLCByZXNwb25zZSwgXCIgc3RhdHVzOiBcIiwgc3RhdHVzKTtcbiAgICAgIH1cblxuICB9XSk7XG5cdFxuXHRleHBvcnQgdmFyIE5hbWVzcGFjZUNvbnRyb2xsZXIgPSBjb250cm9sbGVyKCdOYW1lc3BhY2VDb250cm9sbGVyJywgWyckc2NvcGUnLCAnV2F0Y2hlclNlcnZpY2UnLCAoJHNjb3BlLCB3YXRjaGVyOldhdGNoZXJTZXJ2aWNlKSA9PiB7XG5cdFx0JHNjb3BlLm5hbWVzcGFjZXMgPSB3YXRjaGVyLmdldE9iamVjdHMoJ25hbWVzcGFjZXMnKTtcblx0XHQkc2NvcGUuJHdhdGNoQ29sbGVjdGlvbignbmFtZXNwYWNlcycsIChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IHtcblx0XHRcdGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUpIHtcblx0XHRcdFx0JHNjb3BlLm5hbWVzcGFjZSA9IHdhdGNoZXIuZ2V0TmFtZXNwYWNlKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0JHNjb3BlLiR3YXRjaCgnbmFtZXNwYWNlJywgKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgPT4ge1xuXHRcdFx0aWYgKG5ld1ZhbHVlICE9PSBvbGRWYWx1ZSkge1xuXHRcdFx0XHRpZiAobmV3VmFsdWUgIT09IG9sZFZhbHVlKSB7XG5cdFx0XHRcdFx0d2F0Y2hlci5zZXROYW1lc3BhY2UobmV3VmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1dKTtcblxuICBleHBvcnQgdmFyIFRvcExldmVsID0gY29udHJvbGxlcihcIlRvcExldmVsXCIsIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNWZXJzaW9uXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsICgkc2NvcGUsIEt1YmVybmV0ZXNWZXJzaW9uOm5nLnJlc291cmNlLklSZXNvdXJjZUNsYXNzPGFueT4sIEt1YmVybmV0ZXNTdGF0ZSkgPT4ge1xuXG4gICAgJHNjb3BlLnZlcnNpb24gPSB1bmRlZmluZWQ7XG5cbiAgICAkc2NvcGUuc2hvd0FwcFZpZXcgPSBpc0FwcFZpZXcoKTtcblxuICAgICRzY29wZS5pc0FjdGl2ZSA9IChocmVmKSA9PiB7XG4gICAgICByZXR1cm4gaXNMaW5rQWN0aXZlKGhyZWYpO1xuICAgIH07XG5cbiAgICAkc2NvcGUubW9kZSA9ICd5YW1sJztcbiAgICAkc2NvcGUucmF3TW9kZSA9IHRydWU7XG4gICAgJHNjb3BlLmRpcnR5ID0gZmFsc2U7XG4gICAgJHNjb3BlLnJlYWRPbmx5ID0gdHJ1ZTtcbiAgICAkc2NvcGUucmF3TW9kZWwgPSBudWxsO1xuXG4gICAgJHNjb3BlLiRvbignaGF3dGlvRWRpdG9yX2RlZmF1bHRfZGlydHknLCAoJGV2ZW50LCBkaXJ0eSkgPT4ge1xuICAgICAgJHNjb3BlLmRpcnR5ID0gZGlydHk7XG4gICAgfSk7XG5cbiAgICAkc2NvcGUuc2F2ZSA9IChyYXdNb2RlbCkgPT4ge1xuICAgICAgdmFyIG9iajphbnkgPSBudWxsO1xuICAgICAgdmFyIHN0ciA9IHJhd01vZGVsLnJlcGxhY2UoL1xcdC9nLCBcIiAgICBcIik7XG4gICAgICB0cnkge1xuICAgICAgICBvYmogPSBqc3lhbWwubG9hZChzdHIpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIENvcmUubm90aWZpY2F0aW9uKFwid2FybmluZ1wiLCBcIkZhaWxlZCB0byBzYXZlIG9iamVjdCwgZXJyb3I6IFxcXCJcIiArIGVyciArIFwiXFxcIlwiKTtcbiAgICAgIH1cbiAgICAgIGlmICghb2JqKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgICRzY29wZS5yZWFkT25seSA9IHRydWU7XG4gICAgICBLdWJlcm5ldGVzQVBJLnB1dCh7XG4gICAgICAgIG9iamVjdDogb2JqLFxuICAgICAgICBzdWNjZXNzOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICRzY29wZS5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICAgIENvcmUubm90aWZpY2F0aW9uKFwic3VjY2Vzc1wiLCBcIlNhdmVkIG9iamVjdCBcIiArIGdldE5hbWUob2JqKSk7XG4gICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkdvdCBlcnJvcjogXCIsIGVycik7XG4gICAgICAgICAgQ29yZS5ub3RpZmljYXRpb24oXCJ3YXJuaW5nXCIsIFwiRmFpbGVkIHRvIHNhdmUgb2JqZWN0LCBlcnJvcjogXFxcIlwiICsgZXJyLm1lc3NhZ2UgKyBcIlxcXCJcIik7XG4gICAgICAgICAgJHNjb3BlLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuXG4gICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XG5cbiAgICBLdWJlcm5ldGVzVmVyc2lvbi5xdWVyeSgocmVzcG9uc2UpID0+IHtcbiAgICAgICRzY29wZS52ZXJzaW9uID0gcmVzcG9uc2U7XG4gICAgfSk7XG5cbiAgfV0pO1xuXG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblx0XG5cdGV4cG9ydCB2YXIgTmFtZXNwYWNlQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJOYW1lc3BhY2VDb250cm9sbGVyXCIsIFtcIiRzY29wZVwiLCBcIldhdGNoZXJTZXJ2aWNlXCIsICgkc2NvcGUsIHdhdGNoZXI6V2F0Y2hlclNlcnZpY2UpID0+IHtcblx0XHQkc2NvcGUud2F0Y2hlciA9IHdhdGNoZXI7XG5cdFx0JHNjb3BlLm5hbWVzcGFjZU9iamVjdHMgPSB3YXRjaGVyLmdldE9iamVjdHMoJ25hbWVzcGFjZXMnKTtcblx0XHQkc2NvcGUubmFtZXNwYWNlID0gd2F0Y2hlci5nZXROYW1lc3BhY2UoKTtcblx0XHQkc2NvcGUubmFtZXNwYWNlcyA9IFtdO1xuXHRcdCRzY29wZS4kd2F0Y2goJ25hbWVzcGFjZScsIChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IHtcblx0XHRcdGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUpIHtcblx0XHRcdFx0d2F0Y2hlci5zZXROYW1lc3BhY2UobmV3VmFsdWUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdCRzY29wZS4kd2F0Y2goJ3dhdGNoZXIuZ2V0TmFtZXNwYWNlKCknLCAobmV3VmFsdWUsIG9sZFZhbHVlKSA9PiB7XG5cdFx0XHRpZiAobmV3VmFsdWUgIT09IG9sZFZhbHVlKSB7XG5cdFx0XHRcdCRzY29wZS5uYW1lc3BhY2UgPSBuZXdWYWx1ZTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHQkc2NvcGUuJHdhdGNoQ29sbGVjdGlvbignbmFtZXNwYWNlT2JqZWN0cycsIChuYW1lc3BhY2VPYmplY3RzKSA9PiB7XG5cdFx0XHQkc2NvcGUubmFtZXNwYWNlcyA9IF8ubWFwKG5hbWVzcGFjZU9iamVjdHMsIChuYW1lc3BhY2U6YW55KSA9PiBuYW1lc3BhY2UubWV0YWRhdGEubmFtZSk7XG5cdFx0fSlcdFx0XG5cdH1dKTtcblx0XG59IiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVze1xuXG4gICAgZXhwb3J0IGNsYXNzIG9yYWNsZU1vZGVsU2VydmljZXtcbiAgICAgICBwdWJsaWMgb3JhY2xlY29udHJvbGxlcnMgPSBbXSA7XG5cbiAgICAgICBwdWJsaWMgZ2V0IG9yYWNsZUNvbnRyb2xsZXJzKCk6IEFycmF5PGFueT57XG4gICAgICAgICAgcmV0dXJuIHRoaXMub3JhY2xlY29udHJvbGxlcnM7XG4gICAgICAgfVxuXG4gICAgICAgcHVibGljIHNldCBvcmFjbGVDb250cm9sbGVycyhvcmFjbGVDb250cm9sbGVyczogQXJyYXk8YW55Pil7XG4gICAgICAgICAgdGhpcy5vcmFjbGVjb250cm9sbGVycyA9IG9yYWNsZUNvbnRyb2xsZXJzO1xuICAgICAgIH1cblxuICAgICAgIHB1YmxpYyBmaW5kSW5kZXhPZk9yYWNsZUNvbnRyb2xsZXJzKG9yYWNsZUNvbnRyb2xsZXJzOiBBcnJheTxhbnk+LCBuYW1lOiBzdHJpbmcpOiBudW1iZXJ7XG4gICAgICAgICAgZm9yKHZhciBpbmRleCBpbiBvcmFjbGVDb250cm9sbGVycylcbiAgICAgICAgICAgICBpZihvcmFjbGVDb250cm9sbGVyc1tpbmRleF0ubmFtZSA9PT0gbmFtZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgIH1cbiAgICB9XG5cbiAgICBfbW9kdWxlLmZhY3RvcnkoJ09yYWNsZVN0YXR1c01vZGVsJywgWygpID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBvcmFjbGVNb2RlbFNlcnZpY2UoKTtcbiAgICB9XSk7XG59IiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblxuICB2YXIgT3ZlcnZpZXdEaXJlY3RpdmUgPSBfbW9kdWxlLmRpcmVjdGl2ZShcImt1YmVybmV0ZXNPdmVydmlld1wiLCBbXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRjb21waWxlXCIsIFwiJGludGVycG9sYXRlXCIsIFwiJHRpbWVvdXRcIiwgXCIkd2luZG93XCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsICdLdWJlcm5ldGVzTW9kZWwnLCAoJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkY29tcGlsZTpuZy5JQ29tcGlsZVNlcnZpY2UsICRpbnRlcnBvbGF0ZTpuZy5JSW50ZXJwb2xhdGVTZXJ2aWNlLCAkdGltZW91dDpuZy5JVGltZW91dFNlcnZpY2UsICR3aW5kb3c6bmcuSVdpbmRvd1NlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc01vZGVsKSA9PiB7XG5cbiAgICB2YXIgbG9nID0gTG9nZ2VyLmdldCgna3ViZXJuZXRlcy1vdmVydmlldycpO1xuICAgIHZhciBtb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcbiAgICB2YXIgc3RhdGUgPSBLdWJlcm5ldGVzU3RhdGU7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcmVzdHJpY3Q6ICdFJyxcbiAgICAgIHJlcGxhY2U6IHRydWUsXG4gICAgICBsaW5rOiAoc2NvcGUsIGVsZW1lbnQsIGF0dHIpID0+IHtcbiAgICAgICAgc2NvcGUubW9kZWwgPSBtb2RlbDtcbiAgICAgICAgZWxlbWVudC5jc3Moe3Zpc2liaWxpdHk6ICdoaWRkZW4nfSk7XG4gICAgICAgIHNjb3BlLmdldEVudGl0eSA9ICh0eXBlOnN0cmluZywga2V5OnN0cmluZykgPT4ge1xuICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnaG9zdCc6XG4gICAgICAgICAgICAgIHJldHVybiBtb2RlbC5wb2RzQnlIb3N0W2tleV07XG4gICAgICAgICAgICBjYXNlICdwb2QnOlxuICAgICAgICAgICAgICByZXR1cm4gbW9kZWwucG9kc0J5S2V5W2tleV07XG4gICAgICAgICAgICBjYXNlICdyZXBsaWNhdGlvbkNvbnRyb2xsZXInOlxuICAgICAgICAgICAgICByZXR1cm4gbW9kZWwucmVwbGljYXRpb25Db250cm9sbGVyc0J5S2V5W2tleV07XG4gICAgICAgICAgICBjYXNlICdzZXJ2aWNlJzpcbiAgICAgICAgICAgICAgcmV0dXJuIG1vZGVsLnNlcnZpY2VzQnlLZXlba2V5XTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHNjb3BlLmt1YmVybmV0ZXMgPSBzdGF0ZTtcblxuICAgICAgICBzY29wZS5jdXN0b21pemVEZWZhdWx0T3B0aW9ucyA9IChvcHRpb25zKSA9PiB7XG4gICAgICAgICAgb3B0aW9ucy5FbmRwb2ludCA9IFsnQmxhbmsnLCB7fV07XG4gICAgICAgIH07XG4gICAgICAgIHNjb3BlLm1vdXNlRW50ZXIgPSAoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgaWYgKHNjb3BlLmpzUGx1bWIpIHtcbiAgICAgICAgICAgIGFuZ3VsYXIuZWxlbWVudCgkZXZlbnQuY3VycmVudFRhcmdldCkuYWRkQ2xhc3MoXCJob3ZlcmVkXCIpO1xuICAgICAgICAgICAgc2NvcGUuanNQbHVtYi5nZXRFbmRwb2ludHMoJGV2ZW50LmN1cnJlbnRUYXJnZXQpLmZvckVhY2goKGVuZHBvaW50KSA9PiB7XG4gICAgICAgICAgICAgIGVuZHBvaW50LmNvbm5lY3Rpb25zLmZvckVhY2goKGNvbm5lY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbm5lY3Rpb24uaXNIb3ZlcigpKSB7XG4gICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLnNldEhvdmVyKHRydWUpO1xuICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5lbmRwb2ludHMuZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5tb3VzZUVudGVyKHtcbiAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0OiBlLmVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNjb3BlLm1vdXNlTGVhdmUgPSAoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgaWYgKHNjb3BlLmpzUGx1bWIpIHtcbiAgICAgICAgICAgIGFuZ3VsYXIuZWxlbWVudCgkZXZlbnQuY3VycmVudFRhcmdldCkucmVtb3ZlQ2xhc3MoXCJob3ZlcmVkXCIpO1xuICAgICAgICAgICAgc2NvcGUuanNQbHVtYi5nZXRFbmRwb2ludHMoJGV2ZW50LmN1cnJlbnRUYXJnZXQpLmZvckVhY2goKGVuZHBvaW50KSA9PiB7XG4gICAgICAgICAgICAgIGVuZHBvaW50LmNvbm5lY3Rpb25zLmZvckVhY2goKGNvbm5lY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY29ubmVjdGlvbi5pc0hvdmVyKCkpIHtcbiAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uc2V0SG92ZXIoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5lbmRwb2ludHMuZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5tb3VzZUxlYXZlKHtcbiAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0OiBlLmVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qXG4gICAgICAgIHNjb3BlLmN1c3RvbWl6ZUVuZHBvaW50T3B0aW9ucyA9IChqc1BsdW1iLCBub2RlLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgdmFyIHR5cGUgPSBub2RlLmVsLmF0dHIoJ2RhdGEtdHlwZScpO1xuICAgICAgICAgIC8vIGxvZy5kZWJ1ZyhcImVuZHBvaW50IHR5cGU6IFwiLCB0eXBlKTtcbiAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3BvZCc6XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2VydmljZSc6XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncmVwbGljYXRpb25Db250cm9sbGVyJzpcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAqL1xuICAgICAgICBzY29wZS5jdXN0b21pemVDb25uZWN0aW9uT3B0aW9ucyA9IChqc1BsdW1iLCBlZGdlLCBwYXJhbXMsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICB2YXIgdHlwZSA9IGVkZ2Uuc291cmNlLmVsLmF0dHIoJ2RhdGEtdHlwZScpO1xuICAgICAgICAgIG9wdGlvbnMuY29ubmVjdG9yID0gWyBcIkJlemllclwiLCB7IGN1cnZpbmVzczogNTAsIHN0dWI6IDI1LCBhbHdheXNSZXNwZWN0U3R1YnM6IHRydWUgfSBdO1xuICAgICAgICAgIHBhcmFtcy5wYWludFN0eWxlID0ge1xuICAgICAgICAgICAgbGluZVdpZHRoOiAyLFxuICAgICAgICAgICAgc3Ryb2tlU3R5bGU6ICcjNTU1NWNjJ1xuICAgICAgICAgIH07XG4gICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdwb2QnOlxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NlcnZpY2UnOlxuICAgICAgICAgICAgICBwYXJhbXMuYW5jaG9ycyA9IFtcbiAgICAgICAgICAgICAgICBbIFwiQ29udGludW91c1wiLCB7IGZhY2VzOiBbXCJyaWdodFwiXSB9IF0sXG4gICAgICAgICAgICAgICAgWyBcIkNvbnRpbnVvdXNcIiwgeyBmYWNlczogW1wibGVmdFwiXSB9IF0gXG4gICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICBbMSwgMC41LCAwLCAwLCAtMTAsIC05MF0sXG4gICAgICAgICAgICAgICAgWzAsIDAuNSwgMCwgMCwgLTEwLCAtOTBdXG4gICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdyZXBsaWNhdGlvbkNvbnRyb2xsZXInOlxuICAgICAgICAgICAgICBwYXJhbXMuYW5jaG9ycyA9IFtcbiAgICAgICAgICAgICAgICBbIFwiUGVyaW1ldGVyXCIsIHsgc2hhcGU6IFwiQ2lyY2xlXCIgfSBdLFxuICAgICAgICAgICAgICAgIFsgXCJDb250aW51b3VzXCIsIHsgZmFjZXM6IFtcInJpZ2h0XCJdIH0gXVxuICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgWzAsIDAuNSwgMCwgMCwgLTEwLCAtOTBdLFxuICAgICAgICAgICAgICAgIFsxLCAwLjUsIDAsIDAsIC0xMCwgLTkwXVxuICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvL2xvZy5kZWJ1ZyhcImNvbm5lY3Rpb24gc291cmNlIHR5cGU6IFwiLCB0eXBlKTtcbiAgICAgICAgICByZXR1cm4gb3B0aW9ucztcbiAgICAgICAgfTtcbiAgICAgICAgZnVuY3Rpb24gaW50ZXJwb2xhdGUodGVtcGxhdGUsIGNvbmZpZykge1xuICAgICAgICAgIHJldHVybiAkaW50ZXJwb2xhdGUodGVtcGxhdGUpKGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0ZW1wbGF0ZSwgdGhpbmdOYW1lLCB0aGluZykge1xuICAgICAgICAgIHZhciBjb25maWcgPSB7fTtcbiAgICAgICAgICBjb25maWdbdGhpbmdOYW1lXSA9IHRoaW5nO1xuICAgICAgICAgIHJldHVybiBpbnRlcnBvbGF0ZSh0ZW1wbGF0ZSwgY29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50cyh0ZW1wbGF0ZSwgdGhpbmdOYW1lLCB0aGluZ3MpIHtcbiAgICAgICAgICByZXR1cm4gdGhpbmdzLm1hcCgodGhpbmcpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KHRlbXBsYXRlLCB0aGluZ05hbWUsIHRoaW5nKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhcHBlbmROZXdFbGVtZW50cyhwYXJlbnRFbCwgdGVtcGxhdGUsIHRoaW5nTmFtZSwgdGhpbmdzKSB7XG4gICAgICAgICAgdGhpbmdzLmZvckVhY2goKHRoaW5nKSA9PiB7XG4gICAgICAgICAgICB2YXIga2V5ID0gdGhpbmdbJ19rZXknXSB8fCB0aGluZ1snZWxlbWVudElkJ10gfHwgdGhpbmdbJ2lkJ11cbiAgICAgICAgICAgIHZhciBleGlzdGluZyA9IHBhcmVudEVsLmZpbmQoXCIjXCIgKyBrZXkgKTtcbiAgICAgICAgICAgIGlmICghZXhpc3RpbmcubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcImV4aXN0aW5nOiBcIiwgZXhpc3RpbmcsIFwiIGtleTogXCIsIGtleSk7XG4gICAgICAgICAgICAgIHBhcmVudEVsLmFwcGVuZCgkY29tcGlsZShjcmVhdGVFbGVtZW50KHRlbXBsYXRlLCB0aGluZ05hbWUsIHRoaW5nKSkoc2NvcGUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBuYW1lc3BhY2VGaWx0ZXIoaXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIGdldE5hbWVzcGFjZShpdGVtKSA9PT0gc2NvcGUua3ViZXJuZXRlcy5zZWxlY3RlZE5hbWVzcGFjZTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBmaXJzdERyYXcoKSB7XG4gICAgICAgICAgbG9nLmRlYnVnKFwiRmlyc3QgZHJhd1wiKTtcbiAgICAgICAgICBlbGVtZW50LmVtcHR5KCk7XG4gICAgICAgICAgdmFyIHNlcnZpY2VzID0gbW9kZWwuc2VydmljZXM7XG4gICAgICAgICAgdmFyIHJlcGxpY2F0aW9uQ29udHJvbGxlcnMgPSBtb2RlbC5yZXBsaWNhdGlvbkNvbnRyb2xsZXJzO1xuICAgICAgICAgIHZhciBwb2RzID0gbW9kZWwucG9kcztcbiAgICAgICAgICB2YXIgaG9zdHMgPSBtb2RlbC5ob3N0cztcbiAgICAgICAgICAvLyBsb2cuZGVidWcoXCJob3N0czogXCIsIG1vZGVsLmhvc3RzKTtcbiAgICAgICAgICB2YXIgcGFyZW50RWwgPSBhbmd1bGFyLmVsZW1lbnQoJHRlbXBsYXRlQ2FjaGUuZ2V0KFwib3ZlcnZpZXdUZW1wbGF0ZS5odG1sXCIpKTtcbiAgICAgICAgICB2YXIgc2VydmljZXNFbCA9IHBhcmVudEVsLmZpbmQoXCIuc2VydmljZXNcIik7XG4gICAgICAgICAgdmFyIGhvc3RzRWwgPSBwYXJlbnRFbC5maW5kKFwiLmhvc3RzXCIpO1xuICAgICAgICAgIHZhciByZXBsaWNhdGlvbkNvbnRyb2xsZXJzRWwgPSBwYXJlbnRFbC5maW5kKFwiLnJlcGxpY2F0aW9uQ29udHJvbGxlcnNcIik7XG5cbiAgICAgICAgICBzZXJ2aWNlc0VsLmFwcGVuZChjcmVhdGVFbGVtZW50cygkdGVtcGxhdGVDYWNoZS5nZXQoXCJzZXJ2aWNlVGVtcGxhdGUuaHRtbFwiKSwgJ3NlcnZpY2UnLCBzZXJ2aWNlcy5maWx0ZXIobmFtZXNwYWNlRmlsdGVyKSkpO1xuICAgICAgICAgIHJlcGxpY2F0aW9uQ29udHJvbGxlcnNFbC5hcHBlbmQoY3JlYXRlRWxlbWVudHMoJHRlbXBsYXRlQ2FjaGUuZ2V0KFwicmVwbGljYXRpb25Db250cm9sbGVyVGVtcGxhdGUuaHRtbFwiKSwgJ3JlcGxpY2F0aW9uQ29udHJvbGxlcicsIHJlcGxpY2F0aW9uQ29udHJvbGxlcnMuZmlsdGVyKG5hbWVzcGFjZUZpbHRlcikpKTtcblxuICAgICAgICAgIGhvc3RzLmZvckVhY2goKGhvc3QpID0+IHtcbiAgICAgICAgICAgIHZhciBob3N0RWwgPSBhbmd1bGFyLmVsZW1lbnQoY3JlYXRlRWxlbWVudCgkdGVtcGxhdGVDYWNoZS5nZXQoXCJvdmVydmlld0hvc3RUZW1wbGF0ZS5odG1sXCIpLCAnaG9zdCcsIGhvc3QpKTtcbiAgICAgICAgICAgIHZhciBwb2RDb250YWluZXIgPSBhbmd1bGFyLmVsZW1lbnQoaG9zdEVsLmZpbmQoJy5wb2QtY29udGFpbmVyJykpO1xuICAgICAgICAgICAgcG9kQ29udGFpbmVyLmFwcGVuZChjcmVhdGVFbGVtZW50cygkdGVtcGxhdGVDYWNoZS5nZXQoXCJwb2RUZW1wbGF0ZS5odG1sXCIpLCBcInBvZFwiLCBob3N0LnBvZHMpKTtcbiAgICAgICAgICAgIGhvc3RzRWwuYXBwZW5kKGhvc3RFbCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgLy9wYXJlbnRFbC5hcHBlbmQoY3JlYXRlRWxlbWVudHMoJHRlbXBsYXRlQ2FjaGUuZ2V0KFwicG9kVGVtcGxhdGUuaHRtbFwiKSwgJ3BvZCcsIHBvZHMpKTtcbiAgICAgICAgICBlbGVtZW50LmFwcGVuZCgkY29tcGlsZShwYXJlbnRFbCkoc2NvcGUpKTtcbiAgICAgICAgICAkdGltZW91dCgoKSA9PiB7IGVsZW1lbnQuY3NzKHt2aXNpYmlsaXR5OiAndmlzaWJsZSd9KTsgfSwgMjUwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICAgICAgICBzY29wZS4kZW1pdCgnanNwbHVtYkRvV2hpbGVTdXNwZW5kZWQnLCAoKSA9PiB7XG4gICAgICAgICAgICBsb2cuZGVidWcoXCJVcGRhdGVcIik7XG4gICAgICAgICAgICB2YXIgc2VydmljZXMgPSBtb2RlbC5zZXJ2aWNlcztcbiAgICAgICAgICAgIHZhciByZXBsaWNhdGlvbkNvbnRyb2xsZXJzID0gbW9kZWwucmVwbGljYXRpb25Db250cm9sbGVycztcbiAgICAgICAgICAgIHZhciBwb2RzID0gbW9kZWwucG9kcztcbiAgICAgICAgICAgIHZhciBob3N0cyA9IG1vZGVsLmhvc3RzO1xuICAgICAgICAgICAgdmFyIHBhcmVudEVsID0gZWxlbWVudC5maW5kKCdbaGF3dGlvLWpzcGx1bWJdJyk7XG4gICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSBwYXJlbnRFbC5maW5kKCcuanNwbHVtYi1ub2RlJyk7XG4gICAgICAgICAgICBjaGlsZHJlbi5lYWNoKChpbmRleCwgYykgPT4ge1xuICAgICAgICAgICAgICB2YXIgY2hpbGQgPSBhbmd1bGFyLmVsZW1lbnQoYyk7XG4gICAgICAgICAgICAgIHZhciBrZXkgPSBjaGlsZC5hdHRyKCdpZCcpO1xuICAgICAgICAgICAgICBsb2cuZGVidWcoJ2tleTogJywga2V5KTtcbiAgICAgICAgICAgICAgaWYgKENvcmUuaXNCbGFuayhrZXkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHZhciB0eXBlID0gY2hpbGQuYXR0cignZGF0YS10eXBlJyk7XG4gICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2hvc3QnOlxuICAgICAgICAgICAgICAgICAgaWYgKGtleSBpbiBtb2RlbC5wb2RzQnlIb3N0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3NlcnZpY2UnOlxuICAgICAgICAgICAgICAgICAgaWYgKGtleSBpbiBtb2RlbC5zZXJ2aWNlc0J5S2V5ICYmIGdldE5hbWVzcGFjZShtb2RlbC5zZXJ2aWNlc0J5S2V5W2tleV0pID09IHNjb3BlLmt1YmVybmV0ZXMuc2VsZWN0ZWROYW1lc3BhY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlcnZpY2UgPSBtb2RlbC5zZXJ2aWNlc0J5S2V5W2tleV07XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkLmF0dHIoJ2Nvbm5lY3QtdG8nLCBzZXJ2aWNlLmNvbm5lY3RUbyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3BvZCc6XG4gICAgICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgICAgaWYgKGhhc0lkKHBvZHMsIGlkKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgaWYgKGtleSBpbiBtb2RlbC5wb2RzQnlLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAncmVwbGljYXRpb25Db250cm9sbGVyJzpcbiAgICAgICAgICAgICAgICAgIGlmIChrZXkgaW4gbW9kZWwucmVwbGljYXRpb25Db250cm9sbGVyc0J5S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXBsaWNhdGlvbkNvbnRyb2xsZXIgPSBtb2RlbC5yZXBsaWNhdGlvbkNvbnRyb2xsZXJzQnlLZXlba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQuYXR0cignY29ubmVjdC10bycsIHJlcGxpY2F0aW9uQ29udHJvbGxlci5jb25uZWN0VG8pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiSWdub3JpbmcgZWxlbWVudCB3aXRoIHVua25vd24gdHlwZVwiKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsb2cuZGVidWcoXCJSZW1vdmluZzogXCIsIGtleSk7XG4gICAgICAgICAgICAgIGNoaWxkLnJlbW92ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgc2VydmljZXNFbCA9IGVsZW1lbnQuZmluZChcIi5zZXJ2aWNlc1wiKTtcbiAgICAgICAgICAgIHZhciByZXBsaWNhdGlvbkNvbnRyb2xsZXJzRWwgPSBlbGVtZW50LmZpbmQoXCIucmVwbGljYXRpb25Db250cm9sbGVyc1wiKTtcbiAgICAgICAgICAgIHZhciBob3N0c0VsID0gZWxlbWVudC5maW5kKFwiLmhvc3RzXCIpO1xuXG4gICAgICAgICAgICBhcHBlbmROZXdFbGVtZW50cyhzZXJ2aWNlc0VsLCAkdGVtcGxhdGVDYWNoZS5nZXQoXCJzZXJ2aWNlVGVtcGxhdGUuaHRtbFwiKSwgXCJzZXJ2aWNlXCIsIHNlcnZpY2VzKTtcbiAgICAgICAgICAgIGFwcGVuZE5ld0VsZW1lbnRzKHJlcGxpY2F0aW9uQ29udHJvbGxlcnNFbCwgJHRlbXBsYXRlQ2FjaGUuZ2V0KFwicmVwbGljYXRpb25Db250cm9sbGVyVGVtcGxhdGUuaHRtbFwiKSwgXCJyZXBsaWNhdGlvbkNvbnRyb2xsZXJcIiwgcmVwbGljYXRpb25Db250cm9sbGVycyk7XG4gICAgICAgICAgICBhcHBlbmROZXdFbGVtZW50cyhob3N0c0VsLCAkdGVtcGxhdGVDYWNoZS5nZXQoXCJvdmVydmlld0hvc3RUZW1wbGF0ZS5odG1sXCIpLCBcImhvc3RcIiwgaG9zdHMpO1xuICAgICAgICAgICAgaG9zdHMuZm9yRWFjaCgoaG9zdCkgPT4ge1xuICAgICAgICAgICAgICB2YXIgaG9zdEVsID0gYW5ndWxhci5lbGVtZW50KGhvc3RzRWwuZmluZChcIiNcIiArIGhvc3QuZWxlbWVudElkKSk7XG4gICAgICAgICAgICAgIHZhciBwb2RDb250YWluZXIgPSBhbmd1bGFyLmVsZW1lbnQoaG9zdEVsLmZpbmQoJy5wb2QtY29udGFpbmVyJykpO1xuICAgICAgICAgICAgICBhcHBlbmROZXdFbGVtZW50cyhwb2RDb250YWluZXIsICR0ZW1wbGF0ZUNhY2hlLmdldChcInBvZFRlbXBsYXRlLmh0bWxcIiksIFwicG9kXCIsIGhvc3QucG9kcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHJlZnJlc2hEcmF3aW5nKCkge1xuICAgICAgICAgIGxvZy5kZWJ1ZyhcIlJlZnJlc2hpbmcgZHJhd2luZ1wiKTtcbiAgICAgICAgICBpZiAoZWxlbWVudC5jaGlsZHJlbigpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZmlyc3REcmF3KCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVwZGF0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBDb3JlLiRhcHBseShzY29wZSk7XG4gICAgICAgIH1cblxuICAgICAgICBzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBfLmRlYm91bmNlKHJlZnJlc2hEcmF3aW5nLCA1MDAsIHsgdHJhaWxpbmc6IHRydWV9KSk7XG4gICAgICAgIHNldFRpbWVvdXQocmVmcmVzaERyYXdpbmcsIDEwMCk7XG4gICAgICB9XG4gICAgfTtcbiAgfV0pO1xuXG4gIHZhciBPdmVydmlld0JveENvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiT3ZlcnZpZXdCb3hDb250cm9sbGVyXCIsIFtcIiRzY29wZVwiLCBcIiRsb2NhdGlvblwiLCAoJHNjb3BlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSkgPT4ge1xuICAgICRzY29wZS52aWV3RGV0YWlscyA9IChlbnRpdHksIHBhdGg6c3RyaW5nKSA9PiB7XG4gICAgICBpZiAoZW50aXR5KSB7XG4gICAgICAgIHZhciBuYW1lc3BhY2UgPSBnZXROYW1lc3BhY2UoZW50aXR5KTtcbiAgICAgICAgdmFyIGlkID0gZ2V0TmFtZShlbnRpdHkpO1xuICAgICAgICAkbG9jYXRpb24ucGF0aChVcmxIZWxwZXJzLmpvaW4oJy9rdWJlcm5ldGVzL25hbWVzcGFjZScsIG5hbWVzcGFjZSwgcGF0aCwgaWQpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZy53YXJuKFwiTm8gZW50aXR5IGZvciB2aWV3RGV0YWlscyFcIik7XG4gICAgICB9XG4gICAgfVxuICB9XSk7XG5cbiAgdmFyIHNjb3BlTmFtZSA9IFwiT3ZlcnZpZXdDb250cm9sbGVyXCI7XG5cbiAgdmFyIE92ZXJ2aWV3Q29udHJvbGxlciA9IGNvbnRyb2xsZXIoc2NvcGVOYW1lLCBbXCIkc2NvcGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsICgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XG4gICAgJHNjb3BlLm5hbWUgPSBzY29wZU5hbWU7XG4gICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XG4gICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xuXG4gICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xuXG4gICAgLy8kc2NvcGUuc3ViVGFiQ29uZmlnID0gW107XG4gIH1dKTtcblxufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblxuICBleHBvcnQgdmFyIFBpcGVsaW5lc0NvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiUGlwZWxpbmVzQ29udHJvbGxlclwiLCBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCIkZGlhbG9nXCIsIFwiJHdpbmRvd1wiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGxvY2F0aW9uXCIsIFwibG9jYWxTdG9yYWdlXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcbiAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsICRkaWFsb2csICR3aW5kb3csICR0ZW1wbGF0ZUNhY2hlLCAkcm91dGVQYXJhbXMsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCBsb2NhbFN0b3JhZ2UsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xuXG4gICAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcblxuICAgICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xuXG4gICAgICAvKipcbiAgICAgICAqIExldHMgdXBkYXRlIHRoZSB2YXJpb3VzIGRhdGEgdG8gam9pbiB0aGVtIHRvZ2V0aGVyIHRvIGEgcGlwZWxpbmUgbW9kZWxcbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcbiAgICAgICAgdmFyIHBpcGVsaW5lU3RlcHMgPSB7fTtcbiAgICAgICAgaWYgKCRzY29wZS5idWlsZENvbmZpZ3MgJiYgJHNjb3BlLmJ1aWxkcyAmJiAkc2NvcGUuZGVwbG95bWVudENvbmZpZ3MpIHtcbiAgICAgICAgICBlbnJpY2hCdWlsZENvbmZpZ3MoJHNjb3BlLmJ1aWxkQ29uZmlncywgJHNjb3BlLmJ1aWxkcyk7XG4gICAgICAgICAgJHNjb3BlLmZldGNoZWQgPSB0cnVlO1xuXG4gICAgICAgICAgYW5ndWxhci5mb3JFYWNoKCRzY29wZS5idWlsZENvbmZpZ3MsIChidWlsZENvbmZpZykgPT4ge1xuICAgICAgICAgICAgdmFyIHBpcGVsaW5lS2V5ID0gY3JlYXRlUGlwZWxpbmVLZXkoYnVpbGRDb25maWcpO1xuICAgICAgICAgICAgaWYgKHBpcGVsaW5lS2V5KSB7XG4gICAgICAgICAgICAgIHBpcGVsaW5lU3RlcHNbcGlwZWxpbmVLZXldID0ge1xuICAgICAgICAgICAgICAgIGJ1aWxkQ29uZmlnOiBidWlsZENvbmZpZyxcbiAgICAgICAgICAgICAgICBidWlsZHM6IFtdLFxuICAgICAgICAgICAgICAgIHRyaWdnZXJlZEJ5OiBudWxsLFxuICAgICAgICAgICAgICAgIHRyaWdnZXJzU3RlcHM6IFtdLFxuICAgICAgICAgICAgICAgICRjbGFzczogJ3BpcGVsaW5lLWJ1aWxkJ1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYW5ndWxhci5mb3JFYWNoKCRzY29wZS5idWlsZHMsIChidWlsZCkgPT4ge1xuICAgICAgICAgICAgdmFyIHBpcGVsaW5lS2V5ID0gY3JlYXRlUGlwZWxpbmVLZXkoYnVpbGQpO1xuICAgICAgICAgICAgaWYgKHBpcGVsaW5lS2V5KSB7XG4gICAgICAgICAgICAgIHZhciBwaXBlbGluZSA9IHBpcGVsaW5lU3RlcHNbcGlwZWxpbmVLZXldO1xuICAgICAgICAgICAgICBpZiAoIXBpcGVsaW5lKSB7XG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIndhcm5pbmcgbm8gcGlwZWxpbmUgZ2VuZXJhdGVkIGZvciBidWlsZENvbmZpZyBmb3Iga2V5IFwiICsgcGlwZWxpbmVLZXkgKyBcIiBmb3IgYnVpbGQgXCIgKyBhbmd1bGFyLnRvSnNvbihidWlsZCwgdHJ1ZSkpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwid2FybmluZyBubyBwaXBlbGluZSBnZW5lcmF0ZWQgZm9yIGJ1aWxkQ29uZmlnIGZvciBrZXkgXCIgKyBwaXBlbGluZUtleSArIFwiIGZvciBidWlsZCBcIiArIGJ1aWxkLiRuYW1lKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwaXBlbGluZS5idWlsZHMucHVzaChidWlsZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIFRPRE8gbm93IHdlIG5lZWQgdG8gbG9vayBhdCB0aGUgdHJpZ2dlcnMgdG8gZmlndXJlIG91dCB3aGljaCBwaXBlbGluZVN0ZXBzIHRyaWdnZXJzIGVhY2ggcGlwZWxpbmVTdGVwXG5cblxuICAgICAgICAgIC8vIG5vdyBsZXRzIGNyZWF0ZSBhbiBhcnJheSBvZiBhbGwgcGlwZWxpbmVzLCBzdGFydGluZyBmcm9tIHRoZSBmaXJzdCBrbm93biBzdGVwIHdpdGggYSBsaXN0IG9mIHRoZSBzdGVwc1xuXG4gICAgICAgICAgdmFyIHBpcGVsaW5lcyA9IFtdO1xuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChwaXBlbGluZVN0ZXBzLCAocGlwZWxpbmVTdGVwLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmICghcGlwZWxpbmVTdGVwLnRyaWdnZXJlZEJ5KSB7XG4gICAgICAgICAgICAgIC8vIHdlIGFyZSBhIHJvb3Qgc3RlcC4uLi5cbiAgICAgICAgICAgICAgcGlwZWxpbmVzLnB1c2gocGlwZWxpbmVTdGVwKTtcbiAgICAgICAgICAgICAgLy8gbm93IGxldHMgYWRkIGFsbCB0aGUgc3RlcHMgZm9yIHRoaXMga2V5Li4uXG4gICAgICAgICAgICAgIHBpcGVsaW5lU3RlcC50cmlnZ2Vyc1N0ZXBzLnB1c2gocGlwZWxpbmVTdGVwKTtcbiAgICAgICAgICAgICAgYW5ndWxhci5mb3JFYWNoKHBpcGVsaW5lU3RlcHMsIChzdGVwKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHN0ZXAudHJpZ2dlcmVkQnkgPT09IGtleSkge1xuICAgICAgICAgICAgICAgICAgcGlwZWxpbmVTdGVwLnRyaWdnZXJzU3RlcHMucHVzaChzdGVwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgYW5ndWxhci5mb3JFYWNoKCRzY29wZS5kZXBsb3ltZW50Q29uZmlncywgKGRlcGxveW1lbnRDb25maWcpID0+IHtcbiAgICAgICAgICAgIGlmICghZGVwbG95bWVudENvbmZpZy5raW5kKSB7XG4gICAgICAgICAgICAgIGRlcGxveW1lbnRDb25maWcua2luZCA9IFwiRGVwbG95bWVudENvbmZpZ1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYW5ndWxhci5mb3JFYWNoKGRlcGxveW1lbnRDb25maWcudHJpZ2dlcnMsICh0cmlnZ2VyKSA9PiB7XG4gICAgICAgICAgICAgIHZhciB0eXBlID0gdHJpZ2dlci50eXBlO1xuICAgICAgICAgICAgICB2YXIgaW1hZ2VDaGFuZ2VQYXJhbXMgPSB0cmlnZ2VyLmltYWdlQ2hhbmdlUGFyYW1zO1xuICAgICAgICAgICAgICBpZiAoaW1hZ2VDaGFuZ2VQYXJhbXMgJiYgdHlwZSA9PT0gXCJJbWFnZUNoYW5nZVwiKSB7XG4gICAgICAgICAgICAgICAgdmFyIGZyb20gPSBpbWFnZUNoYW5nZVBhcmFtcy5mcm9tO1xuICAgICAgICAgICAgICAgIGlmIChmcm9tKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGZyb20ubmFtZTtcbiAgICAgICAgICAgICAgICAgIGlmIChmcm9tLmtpbmQgPT09IFwiSW1hZ2VSZXBvc2l0b3J5XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhZyA9IGltYWdlQ2hhbmdlUGFyYW1zLnRhZyB8fCBcImxhdGVzdFwiO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdyBsZXRzIGZpbmQgYSBwaXBlbGluZSBzdGVwIHdoaWNoIGZpcmVzIGZyb20gdGhpc1xuICAgICAgICAgICAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChwaXBlbGluZVN0ZXBzLCAocGlwZWxpbmVTdGVwLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0byA9IENvcmUucGF0aEdldChwaXBlbGluZVN0ZXAsIFtcImJ1aWxkQ29uZmlnXCIsIFwicGFyYW1ldGVyc1wiLCBcIm91dHB1dFwiLCBcInRvXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0byAmJiAodG8ua2luZCA9PT0gXCJJbWFnZVJlcG9zaXRvcnlcIiB8fCB0by5raW5kID09PSBcIkltYWdlU3RyZWFtXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b05hbWUgPSB0by5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9OYW1lID09PSBuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdG9yID0gQ29yZS5wYXRoR2V0KGRlcGxveW1lbnRDb25maWcsIFtcInRlbXBsYXRlXCIsIFwiY29udHJvbGxlclRlbXBsYXRlXCIsIFwic2VsZWN0b3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwb2RzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyICRwb2RDb3VudGVycyA9IHNlbGVjdG9yID8gY3JlYXRlUG9kQ291bnRlcnMoc2VsZWN0b3IsIEt1YmVybmV0ZXNNb2RlbC5wb2RzRm9yTmFtZXNwYWNlKCksIHBvZHMpIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVwbG95UGlwZWxpbmVTdGVwID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDb25maWc6IGRlcGxveW1lbnRDb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2xhc3M6ICdwaXBlbGluZS1kZXBsb3knLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBvZENvdW50ZXJzOiAkcG9kQ291bnRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcG9kczogcG9kc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZWxpbmVTdGVwLnRyaWdnZXJzU3RlcHMucHVzaChkZXBsb3lQaXBlbGluZVN0ZXApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgICRzY29wZS5waXBlbGluZXMgPSBwaXBlbGluZXM7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBMZXRzIGNyZWF0ZSBhIHVuaXF1ZSBrZXkgZm9yIGJ1aWxkIC8gY29uZmlnIHdlIGNhbiB1c2UgdG8gZG8gbGlua2luZyBvZiBidWlsZHMgLyBjb25maWdzIC8gdHJpZ2dlcnNcbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gY3JlYXRlUGlwZWxpbmVLZXkoYnVpbGRDb25maWcpIHtcbiAgICAgICAgcmV0dXJuIENvcmUucGF0aEdldChidWlsZENvbmZpZywgW1wicGFyYW1ldGVyc1wiLCBcInNvdXJjZVwiLCBcImdpdFwiLCBcInVyaVwiXSk7XG4gICAgICB9XG5cbiAgICAgICRzY29wZS4ka2VlcFBvbGxpbmcgPSAoKSA9PiBrZWVwUG9sbGluZ01vZGVsO1xuICAgICAgJHNjb3BlLmZldGNoID0gUG9sbEhlbHBlcnMuc2V0dXBQb2xsaW5nKCRzY29wZSwgKG5leHQ6KCkgPT4gdm9pZCkgPT4ge1xuICAgICAgICB2YXIgcmVhZHkgPSAwO1xuICAgICAgICB2YXIgbnVtU2VydmljZXMgPSAzO1xuXG4gICAgICAgIGZ1bmN0aW9uIG1heWJlTmV4dCgpIHtcbiAgICAgICAgICBpZiAoKytyZWFkeSA+PSBudW1TZXJ2aWNlcykge1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB1cmwgPSBidWlsZHNSZXN0VVJMKCk7XG4gICAgICAgICRodHRwLmdldCh1cmwpLlxuICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAkc2NvcGUuYnVpbGRzID0gZW5yaWNoQnVpbGRzKGRhdGEuaXRlbXMpO1xuICAgICAgICAgICAgICB1cGRhdGVEYXRhKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtYXliZU5leHQoKTtcbiAgICAgICAgICB9KS5cbiAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGxvYWQgXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XG4gICAgICAgICAgICBtYXliZU5leHQoKTtcblxuICAgICAgICAgIH0pO1xuICAgICAgICB1cmwgPSBidWlsZENvbmZpZ3NSZXN0VVJMKCk7XG4gICAgICAgICRodHRwLmdldCh1cmwpLlxuICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAkc2NvcGUuYnVpbGRDb25maWdzID0gZGF0YS5pdGVtcztcbiAgICAgICAgICAgICAgdXBkYXRlRGF0YSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbWF5YmVOZXh0KCk7XG4gICAgICAgICAgfSkuXG4gICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xuICAgICAgICAgICAgbWF5YmVOZXh0KCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIHVybCA9IGRlcGxveW1lbnRDb25maWdzUmVzdFVSTCgpO1xuICAgICAgICAkaHR0cC5nZXQodXJsKS5cbiAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgJHNjb3BlLmRlcGxveW1lbnRDb25maWdzID0gZGF0YS5pdGVtcztcbiAgICAgICAgICAgICAgdXBkYXRlRGF0YSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbWF5YmVOZXh0KCk7XG4gICAgICAgICAgfSkuXG4gICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xuICAgICAgICAgICAgbWF5YmVOZXh0KCk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgJHNjb3BlLmZldGNoKCk7XG4gICAgfV0pO1xuXG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIGV4cG9ydCB2YXIgUG9kQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJQb2RDb250cm9sbGVyXCIsXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiU2VydmljZVJlZ2lzdHJ5XCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiJHdpbmRvd1wiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcbiAgICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDogS3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsIFNlcnZpY2VSZWdpc3RyeSxcbiAgICAgICAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgJHdpbmRvdywgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xuXG4gICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XG4gICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xuICAgICRzY29wZS5yYXdNb2RlbCA9IG51bGw7XG5cbiAgICAkc2NvcGUuaXRlbUNvbmZpZyA9IHtcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgJ2NvbnRhaW5lcnMvaW1hZ2UkJzoge1xuICAgICAgICAgIHRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoJ2ltYWdlVGVtcGxhdGUuaHRtbCcpXG4gICAgICAgIH0sXG4gICAgICAgICdzdGF0dXMvcGhhc2UnOiB7XG4gICAgICAgICAgdGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldCgnc3RhdHVzVGVtcGxhdGUuaHRtbCcpXG4gICAgICAgIH0sXG4gICAgICAgICdcXFxcL0VudlxcXFwvJzoge1xuICAgICAgICAgIHRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoJ2Vudkl0ZW1UZW1wbGF0ZS5odG1sJylcbiAgICAgICAgfSxcbiAgICAgICAgJ15cXFxcL2xhYmVscyQnOiB7XG4gICAgICAgICAgdGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldCgnbGFiZWxUZW1wbGF0ZS5odG1sJylcbiAgICAgICAgfSxcbiAgICAgICAgJ1xcXFwvZW52XFxcXC9rZXkkJzoge1xuICAgICAgICAgIGhpZGRlbjogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcblxuICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICB1cGRhdGVEYXRhKCk7XG4gICAgfSk7XG5cbiAgICAkc2NvcGUuJG9uKCckcm91dGVVcGRhdGUnLCAoJGV2ZW50KSA9PiB7XG4gICAgICB1cGRhdGVEYXRhKCk7XG4gICAgfSk7XG5cbiAgICAkc2NvcGUuJHdhdGNoKCdtb2RlbC5wb2RzJywgKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgPT4ge1xuICAgICAgdXBkYXRlRGF0YSgpO1xuICAgIH0sIHRydWUpO1xuXG4gICAgJHNjb3BlLmZsaXBSYXcgPSAoKSA9PiB7XG4gICAgICAkc2NvcGUucmF3TW9kZSA9ICEkc2NvcGUucmF3TW9kZTtcbiAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgfTtcblxuICAgICRzY29wZS5vcGVuTG9ncyA9ICgpID0+IHtcbiAgICAgIHZhciBwb2RzID0gWyRzY29wZS5pdGVtXTtcbiAgICAgIG9wZW5Mb2dzRm9yUG9kcyhTZXJ2aWNlUmVnaXN0cnksICR3aW5kb3csIEt1YmVybmV0ZXNNb2RlbC5jdXJyZW50TmFtZXNwYWNlKCksIHBvZHMpO1xuICAgIH07XG5cbiAgICB1cGRhdGVEYXRhKCk7XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xuICAgICAgJHNjb3BlLmlkID0gJHJvdXRlUGFyYW1zW1wiaWRcIl07XG4gICAgICAkc2NvcGUuaXRlbSA9ICRzY29wZS5tb2RlbC5nZXRQb2QoS3ViZXJuZXRlc1N0YXRlLnNlbGVjdGVkTmFtZXNwYWNlLCAkc2NvcGUuaWQpO1xuICAgICAgaWYgKCRzY29wZS5pdGVtKSB7XG4gICAgICAgICRzY29wZS5yYXdNb2RlbCA9IHRvUmF3WWFtbCgkc2NvcGUuaXRlbSk7XG4gICAgICB9XG4gICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgIH1cbiAgfV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblxuICBleHBvcnQgdmFyIFBvZEVkaXRDb250cm9sbGVyID0gY29udHJvbGxlcihcIlBvZEVkaXRDb250cm9sbGVyXCIsXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiS3ViZXJuZXRlc1NjaGVtYVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIiwgXCJTY2hlbWFSZWdpc3RyeVwiLFxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOiBLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc1NjaGVtYSxcbiAgICAgICAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCwgc2NoZW1hczpIYXd0aW9Gb3Jtcy5TY2hlbWFSZWdpc3RyeSkgPT4ge1xuXG4gICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XG4gICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xuICAgICRzY29wZS5pZCA9ICRyb3V0ZVBhcmFtc1tcImlkXCJdO1xuICAgICRzY29wZS5zY2hlbWEgPSBLdWJlcm5ldGVzU2NoZW1hO1xuICAgICRzY29wZS5jb25maWcgPSBzY2hlbWFzLmNsb25lU2NoZW1hKFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Qb2RcIik7XG4gICAgLy8kc2NvcGUuY29uZmlnID0gS3ViZXJuZXRlc1NjaGVtYS5kZWZpbml0aW9ucy5rdWJlcm5ldGVzX3YxYmV0YTJfUG9kO1xuXG4gICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xuXG4gICAgJHNjb3BlLiRvbignJHJvdXRlVXBkYXRlJywgKCRldmVudCkgPT4ge1xuICAgICAgdXBkYXRlRGF0YSgpO1xuICAgIH0pO1xuXG4gICAgdXBkYXRlRGF0YSgpO1xuXG4gICAgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcbiAgICAgIGlmICgkc2NvcGUuaWQpIHtcbiAgICAgICAgJHNjb3BlLmVudGl0eSA9ICRzY29wZS5tb2RlbC5nZXRQb2QoS3ViZXJuZXRlc1N0YXRlLnNlbGVjdGVkTmFtZXNwYWNlLCAkc2NvcGUuaWQpO1xuICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJHNjb3BlLnNhdmUgPSAoKT0+e1xuICAgICAgY29uc29sZS5sb2coJHNjb3BlLmVudGl0eSk7XG4gICAgfVxuICB9XSk7XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuICB2YXIgbG9nID0gTG9nZ2VyLmdldCgna3ViZXJuZXRlcy13YXRjaGVyJyk7XG5cbiAgdmFyIGs4c1R5cGVzID0gS3ViZXJuZXRlc0FQSS5OYW1lc3BhY2VkVHlwZXMuazhzVHlwZXM7XG4gIHZhciBvc1R5cGVzICA9IEt1YmVybmV0ZXNBUEkuTmFtZXNwYWNlZFR5cGVzLm9zVHlwZXM7XG5cbiAgdmFyIHNlbGYgPSA8YW55PiB7fTtcblxuICB2YXIgdXBkYXRlRnVuY3Rpb24gPSAoKSA9PiB7XG4gICAgXG4gICAgbG9nLmRlYnVnKFwiT2JqZWN0cyBjaGFuZ2VkLCBmaXJpbmcgbGlzdGVuZXJzXCIpO1xuICAgIHZhciBvYmplY3RzID0gPE9iamVjdE1hcD57fTtcbiAgICBfLmZvckVhY2goc2VsZi5nZXRUeXBlcygpLCAodHlwZTpzdHJpbmcpID0+IHtcbiAgICAgIG9iamVjdHNbdHlwZV0gPSBzZWxmLmdldE9iamVjdHModHlwZSk7XG4gICAgfSk7XG4gICAgXy5mb3JFYWNoKHNlbGYubGlzdGVuZXJzLCAobGlzdGVuZXI6KE9iamVjdE1hcCkgPT4gdm9pZCkgPT4ge1xuICAgICAgbGlzdGVuZXIob2JqZWN0cyk7XG4gICAgfSk7XG4gIH07XG4gIHZhciBkZWJvdW5jZWRVcGRhdGUgPSBfLmRlYm91bmNlKHVwZGF0ZUZ1bmN0aW9uLCA3NSwgeyB0cmFpbGluZzogdHJ1ZSB9KTtcblxuICB2YXIgbmFtZXNwYWNlV2F0Y2ggPSB7XG4gICAgc2VsZWN0ZWQ6IHVuZGVmaW5lZCxcbiAgICB3YXRjaDogdW5kZWZpbmVkLFxuICAgIG9iamVjdHM6IFtdLFxuICAgIG9iamVjdE1hcDoge30sXG4gICAgd2F0Y2hlczoge31cbiAgfTtcblxuICBoYXd0aW9QbHVnaW5Mb2FkZXIucmVnaXN0ZXJQcmVCb290c3RyYXBUYXNrKHtcbiAgICBuYW1lOiAnS3ViZXJuZXRlc1dhdGNoZXJJbml0JyxcbiAgICBkZXBlbmRzOiBbJ0t1YmVybmV0ZXNBcGlEaXNjb3ZlcnknXSxcbiAgICB0YXNrOiAobmV4dCkgPT4ge1xuICAgICAgdmFyIGJvb3RlZCA9IGZhbHNlO1xuICAgICAgaWYgKGlzT3BlblNoaWZ0KSB7XG4gICAgICAgIGxvZy5pbmZvKFwiQmFja2VuZCBpcyBhbiBPcGVuc2hpZnQgaW5zdGFuY2VcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cuaW5mbyhcIkJhY2tlbmQgaXMgYSB2YW5pbGxhIEt1YmVybmV0ZXMgaW5zdGFuY2VcIik7XG4gICAgICB9XG4gICAgICBuYW1lc3BhY2VXYXRjaC53YXRjaCA9IEt1YmVybmV0ZXNBUEkud2F0Y2goe1xuICAgICAgICBraW5kOiBLdWJlcm5ldGVzQVBJLldhdGNoVHlwZXMuTkFNRVNQQUNFUyxcbiAgICAgICAgc3VjY2VzczogKG9iamVjdHMpID0+IHtcbiAgICAgICAgICBuYW1lc3BhY2VXYXRjaC5vYmplY3RzID0gb2JqZWN0cztcbiAgICAgICAgICBpZiAoIWJvb3RlZCkge1xuICAgICAgICAgICAgYm9vdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHNlbGYuc2V0TmFtZXNwYWNlKGxvY2FsU3RvcmFnZVtDb25zdGFudHMuTkFNRVNQQUNFX1NUT1JBR0VfS0VZXSB8fCBkZWZhdWx0TmFtZXNwYWNlKTtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbG9nLmRlYnVnKFwiR290IG5hbWVzcGFjZXM6IFwiLCBuYW1lc3BhY2VXYXRjaC5vYmplY3RzKTtcbiAgICAgICAgfSwgZXJyb3I6IChlcnJvcjphbnkpID0+IHtcbiAgICAgICAgICBsb2cud2FybihcIkVycm9yIGZldGNoaW5nIG5hbWVzcGFjZXM6IFwiLCBlcnJvcik7XG4gICAgICAgICAgLy8gVE9ETyBpcyB0aGlzIG5lY2Vzc2FyeT9cbiAgICAgICAgICAvL0hhd3Rpb09BdXRoLmRvTG9nb3V0KCk7XG4gICAgICAgICAgaWYgKCFib290ZWQpIHtcbiAgICAgICAgICAgIGJvb3RlZCA9IHRydWU7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIGhhd3Rpb1BsdWdpbkxvYWRlci5yZWdpc3RlclByZUJvb3RzdHJhcFRhc2soe1xuICAgIG5hbWU6ICdLdWJlcm5ldGVzQXBpRGlzY292ZXJ5JyxcbiAgICBkZXBlbmRzOiBbJ2hhd3Rpby1vYXV0aCddLFxuICAgIHRhc2s6IChuZXh0KSA9PiB7XG4gICAgICBpc09wZW5TaGlmdCA9IGZhbHNlO1xuXG4gICAgICB2YXIgdXNlclByb2ZpbGUgPSBIYXd0aW9PQXV0aC5nZXRVc2VyUHJvZmlsZSgpO1xuICAgICAgbG9nLmRlYnVnKFwiVXNlciBwcm9maWxlOiBcIiwgdXNlclByb2ZpbGUpO1xuICAgICAgaWYgKHVzZXJQcm9maWxlICYmIHVzZXJQcm9maWxlLnByb3ZpZGVyID09PSBcImhhd3Rpby1nb29nbGUtb2F1dGhcIikge1xuICAgICAgICBsb2cuZGVidWcoXCJQb3NzaWJseSBydW5uaW5nIG9uIEdDRVwiKTtcbiAgICAgICAgLy8gYXBpIG1hc3RlciBpcyBvbiBHQ0VcbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICB1cmw6IFVybEhlbHBlcnMuam9pbihtYXN0ZXJBcGlVcmwoKSwgJ2FwaScsICd2MScsICduYW1lc3BhY2VzJyksXG4gICAgICAgICAgY29tcGxldGU6IChqcVhIUiwgdGV4dFN0YXR1cykgPT4ge1xuICAgICAgICAgICAgaWYgKHRleHRTdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcImpxWEhSOiBcIiwganFYSFIpO1xuICAgICAgICAgICAgICB1c2VyUHJvZmlsZS5vbGRUb2tlbiA9IHVzZXJQcm9maWxlLnRva2VuO1xuICAgICAgICAgICAgICB1c2VyUHJvZmlsZS50b2tlbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgJC5hamF4U2V0dXAoe1xuICAgICAgICAgICAgICAgIGJlZm9yZVNlbmQ6IChyZXF1ZXN0KSA9PiB7XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgYmVmb3JlU2VuZDogKHJlcXVlc3QpID0+IHtcblxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cuZGVidWcoXCJOb3QgcnVubmluZyBvbiBHQ0VcIik7XG4gICAgICAgIC8vIGRvdWJsZS1jaGVjayBpZiB3ZSdyZSBvbiB2YW5pbGxhIGs4cyBvciBvcGVuc2hpZnRcbiAgICAgICAgdmFyIHJvb3RVcmkgPSBuZXcgVVJJKG1hc3RlckFwaVVybCgpKS5wYXRoKFwiL29hcGlcIikucXVlcnkoXCJcIikudG9TdHJpbmcoKTtcbiAgICAgICAgbG9nLmRlYnVnKFwiQ2hlY2tpbmcgZm9yIGFuIG9wZW5zaGlmdCBiYWNrZW5kXCIpO1xuICAgICAgICBIYXd0aW9PQXV0aC5hdXRoZW50aWNhdGVkSHR0cFJlcXVlc3Qoe1xuICAgICAgICAgIHVybDogcm9vdFVyaSxcbiAgICAgICAgICBzdWNjZXNzOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgaXNPcGVuU2hpZnQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6IChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pID0+IHtcbiAgICAgICAgICAgIHZhciBlcnJvciA9IEt1YmVybmV0ZXNBUEkuZ2V0RXJyb3JPYmplY3QoanFYSFIpO1xuICAgICAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgICBsb2cuZGVidWcoXCJGYWlsZWQgdG8gZmluZCByb290IHBhdGhzOiBcIiwgdGV4dFN0YXR1cywgXCI6IFwiLCBlcnJvclRocm93bik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBsb2cuZGVidWcoXCJGYWlsZWQgdG8gZmluZCByb290IHBhdGhzOiBcIiwgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaXNPcGVuU2hpZnQgPSBmYWxzZTtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgdmFyIGN1c3RvbVVybEhhbmRsZXJzID0ge307XG5cbiAgc2VsZi5zZXROYW1lc3BhY2UgPSAobmFtZXNwYWNlOiBzdHJpbmcpID0+IHtcbiAgICBpZiAobmFtZXNwYWNlID09PSBuYW1lc3BhY2VXYXRjaC5zZWxlY3RlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobmFtZXNwYWNlV2F0Y2guc2VsZWN0ZWQpIHtcbiAgICAgIGxvZy5kZWJ1ZyhcIlN0b3BwaW5nIGN1cnJlbnQgd2F0Y2hlc1wiKTtcbiAgICAgIF8uZm9yT3duKG5hbWVzcGFjZVdhdGNoLndhdGNoZXMsICh3YXRjaCwga2V5KSA9PiB7XG4gICAgICAgIGlmICghS3ViZXJuZXRlc0FQSS5uYW1lc3BhY2VkKGtleSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbG9nLmRlYnVnKFwiRGlzY29ubmVjdGluZyB3YXRjaDogXCIsIGtleSk7XG4gICAgICAgIHdhdGNoLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH0pO1xuICAgICAgXy5mb3JFYWNoKF8ua2V5cyhuYW1lc3BhY2VXYXRjaC53YXRjaGVzKSwgKGtleSkgPT4ge1xuICAgICAgICBpZiAoIUt1YmVybmV0ZXNBUEkubmFtZXNwYWNlZChrZXkpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxvZy5kZWJ1ZyhcIkRlbGV0aW5nIGtpbmQ6IFwiLCBrZXkpO1xuICAgICAgICBkZWxldGUgbmFtZXNwYWNlV2F0Y2gud2F0Y2hlc1trZXldO1xuICAgICAgfSk7XG4gICAgfVxuICAgIG5hbWVzcGFjZVdhdGNoLnNlbGVjdGVkID0gbmFtZXNwYWNlO1xuICAgIGlmIChuYW1lc3BhY2UpIHtcbiAgICAgIF8uZm9yRWFjaChzZWxmLmdldFR5cGVzKCksIChraW5kOnN0cmluZykgPT4ge1xuICAgICAgICBpZiAoa2luZCA9PT0gS3ViZXJuZXRlc0FQSS5XYXRjaFR5cGVzLk5BTUVTUEFDRVMpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFuYW1lc3BhY2VXYXRjaC53YXRjaGVzW2tpbmRdKSB7XG4gICAgICAgICAgbG9nLmRlYnVnKFwiQ3JlYXRpbmcgd2F0Y2ggZm9yIGtpbmQ6IFwiLCBraW5kKTtcbiAgICAgICAgICB2YXIgY29uZmlnID0gPGFueT4ge1xuICAgICAgICAgICAga2luZDoga2luZCxcbiAgICAgICAgICAgIG5hbWVzcGFjZTogS3ViZXJuZXRlc0FQSS5uYW1lc3BhY2VkKGtpbmQpID8gbmFtZXNwYWNlIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgc3VjY2VzczogKG9iamVjdHMpID0+IHtcbiAgICAgICAgICAgICAgd2F0Y2gub2JqZWN0cyA9IG9iamVjdHM7XG4gICAgICAgICAgICAgIGRlYm91bmNlZFVwZGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKGtpbmQgaW4gY3VzdG9tVXJsSGFuZGxlcnMpIHtcbiAgICAgICAgICAgIGNvbmZpZy51cmxGdW5jdGlvbiA9IGN1c3RvbVVybEhhbmRsZXJzW2tpbmRdO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgd2F0Y2ggPSA8YW55PiBLdWJlcm5ldGVzQVBJLndhdGNoKGNvbmZpZyk7XG4gICAgICAgICAgd2F0Y2guY29uZmlnID0gY29uZmlnO1xuICAgICAgICAgIG5hbWVzcGFjZVdhdGNoLndhdGNoZXNba2luZF0gPSB3YXRjaDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIHNlbGYuaGFzV2ViU29ja2V0ID0gdHJ1ZTtcblxuICBzZWxmLmdldE5hbWVzcGFjZSA9ICgpID0+IG5hbWVzcGFjZVdhdGNoLnNlbGVjdGVkO1xuXG4gIHNlbGYucmVnaXN0ZXJDdXN0b21VcmxGdW5jdGlvbiA9IChraW5kOnN0cmluZywgdXJsOihvcHRpb25zOkt1YmVybmV0ZXNBUEkuSzhTT3B0aW9ucykgPT4gc3RyaW5nKSA9PiB7XG4gICAgY3VzdG9tVXJsSGFuZGxlcnNba2luZF0gPSB1cmw7XG4gICAgaWYgKGtpbmQgaW4gbmFtZXNwYWNlV2F0Y2gud2F0Y2hlcykge1xuICAgICAgdmFyIHdhdGNoID0gbmFtZXNwYWNlV2F0Y2gud2F0Y2hlc1traW5kXTtcbiAgICAgIHZhciBjb25maWcgPSB3YXRjaC5jb25maWc7XG4gICAgICBjb25maWcudXJsRnVuY3Rpb24gPSB1cmw7XG4gICAgICB3YXRjaC5kaXNjb25uZWN0KCk7XG4gICAgICBkZWxldGUgbmFtZXNwYWNlV2F0Y2gud2F0Y2hlc1traW5kXTtcbiAgICAgIGNvbmZpZy5zdWNjZXNzID0gKG9iamVjdHMpID0+IHtcbiAgICAgICAgd2F0Y2gub2JqZWN0cyA9IG9iamVjdHM7XG4gICAgICAgIGRlYm91bmNlZFVwZGF0ZSgpO1xuICAgICAgfVxuICAgICAgd2F0Y2ggPSA8YW55PiBLdWJlcm5ldGVzQVBJLndhdGNoKGNvbmZpZyk7XG4gICAgICB3YXRjaC5jb25maWcgPSBjb25maWc7XG4gICAgICBuYW1lc3BhY2VXYXRjaC53YXRjaGVzW2tpbmRdID0gd2F0Y2g7XG4gICAgfVxuICB9XG5cbiAgc2VsZi5nZXRUeXBlcyA9ICgpID0+IHtcbiAgICB2YXIgZmlsdGVyID0gKGtpbmQ6c3RyaW5nKSA9PiB7XG4gICAgICAvLyBmaWx0ZXIgb3V0IHN0dWZmIHdlIGRvbid0IGNhcmUgYWJvdXQgeWV0XG4gICAgICBzd2l0Y2goa2luZCkge1xuICAgICAgICBjYXNlIEt1YmVybmV0ZXNBUEkuV2F0Y2hUeXBlcy5PQVVUSF9DTElFTlRTOlxuICAgICAgICBjYXNlIEt1YmVybmV0ZXNBUEkuV2F0Y2hUeXBlcy5JTUFHRV9TVFJFQU1TOlxuICAgICAgICBjYXNlIEt1YmVybmV0ZXNBUEkuV2F0Y2hUeXBlcy5QT0xJQ0lFUzpcbiAgICAgICAgY2FzZSBLdWJlcm5ldGVzQVBJLldhdGNoVHlwZXMuUk9MRVM6XG4gICAgICAgIGNhc2UgS3ViZXJuZXRlc0FQSS5XYXRjaFR5cGVzLlJPTEVfQklORElOR1M6XG4gICAgICAgIGNhc2UgS3ViZXJuZXRlc0FQSS5XYXRjaFR5cGVzLlBPTElDWV9CSU5ESU5HUzpcbiAgICAgICAgY2FzZSBLdWJlcm5ldGVzQVBJLldhdGNoVHlwZXMuUEVSU0lTVEVOVF9WT0xVTUVfQ0xBSU1TOlxuICAgICAgICBjYXNlIEt1YmVybmV0ZXNBUEkuV2F0Y2hUeXBlcy5QRVJTSVNURU5UX1ZPTFVNRVM6XG4gICAgICAgIGNhc2UgS3ViZXJuZXRlc0FQSS5XYXRjaFR5cGVzLkVORFBPSU5UUzpcbiAgICAgICAgY2FzZSBLdWJlcm5ldGVzQVBJLldhdGNoVHlwZXMuUkVTT1VSQ0VfUVVPVEFTOlxuICAgICAgICBjYXNlIEt1YmVybmV0ZXNBUEkuV2F0Y2hUeXBlcy5TRVJWSUNFX0FDQ09VTlRTOlxuICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgYW5zd2VyID0gazhzVHlwZXMuY29uY2F0KFtXYXRjaFR5cGVzLk5BTUVTUEFDRVNdKTtcbiAgICBpZiAoaXNPcGVuU2hpZnQpIHtcbiAgICAgIGFuc3dlciA9IGFuc3dlci5jb25jYXQob3NUeXBlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFuc3dlciA9IGFuc3dlci5jb25jYXQoS3ViZXJuZXRlc0FQSS5XYXRjaFR5cGVzLlRFTVBMQVRFUyk7XG4gICAgICBhbnN3ZXIgPSBhbnN3ZXIuY29uY2F0KEt1YmVybmV0ZXNBUEkuV2F0Y2hUeXBlcy5CVUlMRF9DT05GSUdTKTtcbiAgICB9XG4gICAgcmV0dXJuIF8uZmlsdGVyKGFuc3dlciwgZmlsdGVyKTtcbiAgfVxuXG4gIHNlbGYuZ2V0T2JqZWN0cyA9IChraW5kOiBzdHJpbmcpID0+IHtcbiAgICBpZiAoa2luZCA9PT0gV2F0Y2hUeXBlcy5OQU1FU1BBQ0VTKSB7XG4gICAgICByZXR1cm4gbmFtZXNwYWNlV2F0Y2gub2JqZWN0cztcbiAgICB9XG4gICAgaWYgKGtpbmQgaW4gbmFtZXNwYWNlV2F0Y2gud2F0Y2hlcykge1xuICAgICAgcmV0dXJuIG5hbWVzcGFjZVdhdGNoLndhdGNoZXNba2luZF0ub2JqZWN0cztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBzZWxmLmxpc3RlbmVycyA9IDxBcnJheTwoT2JqZWN0TWFwKSA9PiB2b2lkPj4gW107XG5cbiAgLy8gbGlzdGVuZXIgZ2V0cyBub3RpZmllZCBhZnRlciBhIGJ1bmNoIG9mIGNoYW5nZXMgaGF2ZSBvY2N1cnJlZFxuICBzZWxmLnJlZ2lzdGVyTGlzdGVuZXIgPSAoZm46KG9iamVjdHM6T2JqZWN0TWFwKSA9PiB2b2lkKSA9PiB7XG4gICAgc2VsZi5saXN0ZW5lcnMucHVzaChmbik7XG4gIH1cblxuICB2YXIgcHJvamVjdHNIYW5kbGUgPSA8YW55PiB1bmRlZmluZWQ7XG5cbiAgLy8ga2ljayBvZmYgdGhlIHByb2plY3Qgd2F0Y2hlciBhIGJpdCBzb29uZXIgYWxzb1xuICBoYXd0aW9QbHVnaW5Mb2FkZXIucmVnaXN0ZXJQcmVCb290c3RyYXBUYXNrKHtcbiAgICBuYW1lOiAnUHJvamVjdHNXYXRjaGVyJyxcbiAgICBkZXBlbmRzOiBbJ0t1YmVybmV0ZXNBcGlEaXNjb3ZlcnknXSxcbiAgICB0YXNrOiAobmV4dCkgPT4ge1xuICAgICAgaWYgKGlzT3BlblNoaWZ0KSB7XG5cbiAgICAgICAgcHJvamVjdHNIYW5kbGUgPSBLdWJlcm5ldGVzQVBJLndhdGNoKHtcbiAgICAgICAgICBraW5kOiBLdWJlcm5ldGVzQVBJLldhdGNoVHlwZXMuUFJPSkVDVFMsXG4gICAgICAgICAgbmFtZXNwYWNlOiB1bmRlZmluZWQsXG4gICAgICAgICAgc3VjY2VzczogKG9iamVjdHMpID0+IHtcbiAgICAgICAgICAgIGlmIChzZWxmLmxpc3RlbmVycyAmJiBzZWxmLmxpc3RlbmVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiZ290IHByb2plY3RzOiBcIiwgb2JqZWN0cyk7XG4gICAgICAgICAgICAgIF8uZm9yRWFjaChzZWxmLmxpc3RlbmVycywgKGxpc3RlbmVyOihvYmplY3RzOk9iamVjdE1hcCkgPT4gdm9pZCkgPT4ge1xuICAgICAgICAgICAgICAgIGxpc3RlbmVyKHtcbiAgICAgICAgICAgICAgICAgIHByb2plY3RzOiBvYmplY3RzXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBuZXh0KCk7XG4gICAgfVxuICB9KTtcblxuXG5fbW9kdWxlLnNlcnZpY2UoJ1dhdGNoZXJTZXJ2aWNlJywgWyd1c2VyRGV0YWlscycsICckcm9vdFNjb3BlJywgJyR0aW1lb3V0JywgKHVzZXJEZXRhaWxzLCAkcm9vdFNjb3BlLCAkdGltZW91dCkgPT4ge1xuICAgIHJldHVybiBzZWxmO1xufV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwid2F0Y2hlci50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIHZhciBsb2cgPSBMb2dnZXIuZ2V0KFwia3ViZXJuZXRlcy10ZXJtLXdpbmRvd3NcIik7XG5cbiAgX21vZHVsZS5jb25maWcoKGt1YmVybmV0ZXNDb250YWluZXJTb2NrZXRQcm92aWRlcikgPT4ge1xuICAgIGt1YmVybmV0ZXNDb250YWluZXJTb2NrZXRQcm92aWRlci5XZWJTb2NrZXRGYWN0b3J5ID0gXCJDdXN0b21XZWJTb2NrZXRzXCI7XG4gIH0pO1xuXG4gIF9tb2R1bGUuZmFjdG9yeSgnQ3VzdG9tV2ViU29ja2V0cycsICh1c2VyRGV0YWlsczphbnkpID0+IHtcbiAgICByZXR1cm4gZnVuY3Rpb24gQ3VzdG9tV2ViU29ja2V0KHVybCwgcHJvdG9jb2xzKSB7XG4gICAgICB2YXIgcGF0aHMgPSB1cmwuc3BsaXQoJz8nKTtcbiAgICAgIGlmICghXy5zdGFydHNXaXRoKHBhdGhzWzBdLCBtYXN0ZXJBcGlVcmwoKSkpIHtcbiAgICAgICAgcGF0aHNbMF0gPSBVcmxIZWxwZXJzLmpvaW4obWFzdGVyQXBpVXJsKCksIHBhdGhzWzBdKTtcbiAgICAgIH1cbiAgICAgIHVybCA9IEt1YmVybmV0ZXNBUEkud3NVcmwocGF0aHNbMF0pO1xuICAgICAgdXJsLnNlYXJjaChwYXRoc1sxXSArICcmYWNjZXNzX3Rva2VuPScgKyB1c2VyRGV0YWlscy50b2tlbik7XG4gICAgICBsb2cuZGVidWcoXCJVc2luZyB3cyB1cmw6IFwiLCB1cmwudG9TdHJpbmcoKSk7XG4gICAgICByZXR1cm4gbmV3IFdlYlNvY2tldCh1cmwudG9TdHJpbmcoKSwgcHJvdG9jb2xzKTtcbiAgICB9O1xuICB9KTtcblxuICBfbW9kdWxlLnNlcnZpY2UoJ1Rlcm1pbmFsU2VydmljZScsICgkcm9vdFNjb3BlLCAkZG9jdW1lbnQsICRjb21waWxlLCAkdGVtcGxhdGVDYWNoZSkgPT4ge1xuICAgIHZhciBib2R5ID0gJGRvY3VtZW50LmZpbmQoJ2JvZHknKTtcbiAgICBmdW5jdGlvbiBwb3NpdGlvblRlcm1pbmFscyh0ZXJtaW5hbHMpIHtcbiAgICAgIHZhciB0b3RhbCA9IF8ua2V5cyh0ZXJtaW5hbHMpLmxlbmd0aDtcbiAgICAgIHZhciBkaXN0ID0gKGJvZHkud2lkdGgoKSAtIDIyNSkgLyB0b3RhbDtcbiAgICAgIHZhciBwb3NpdGlvbiA9IDU7XG4gICAgICBhbmd1bGFyLmZvckVhY2godGVybWluYWxzLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICBpZiAoIXZhbHVlLnNjb3BlLmRvY2tlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZS5lbC5jc3MoJ2xlZnQnLCBwb3NpdGlvbiArICdweCcpO1xuICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uICsgZGlzdDtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB2YXIgZGVmYXVsdFRlbXBsYXRlID0gJHRlbXBsYXRlQ2FjaGUuZ2V0KFVybEhlbHBlcnMuam9pbih0ZW1wbGF0ZVBhdGgsICd0ZXJtU2hlbGwuaHRtbCcpKTtcbiAgICB2YXIgc2VsZiA9IHtcbiAgICAgIHBvc2l0aW9uVGVybWluYWxzOiAoKSA9PiB7XG4gICAgICAgIHBvc2l0aW9uVGVybWluYWxzKHNlbGYudGVybWluYWxzKTtcbiAgICAgIH0sXG4gICAgICB0ZXJtaW5hbHM6IHt9LFxuICAgICAgbmV3VGVybWluYWw6IChwb2RMaW5rLCBjb250YWluZXJOYW1lLCB0ZW1wbGF0ZSA9IGRlZmF1bHRUZW1wbGF0ZSkgPT4ge1xuICAgICAgICB2YXIgdGVybWluYWxJZCA9IFVybEhlbHBlcnMuam9pbihwb2RMaW5rLCBjb250YWluZXJOYW1lKTtcbiAgICAgICAgaWYgKHRlcm1pbmFsSWQgaW4gc2VsZi50ZXJtaW5hbHMpIHtcbiAgICAgICAgICBsb2cuZGVidWcoXCJBbHJlYWR5IGEgdGVybWluYWwgd2l0aCBpZDogXCIsIHRlcm1pbmFsSWQpO1xuICAgICAgICAgIHNlbGYucmFpc2VUZXJtaW5hbCh0ZXJtaW5hbElkKTtcbiAgICAgICAgICByZXR1cm4gdGVybWluYWxJZDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgc2NvcGUgPSAkcm9vdFNjb3BlLiRuZXcoKTtcbiAgICAgICAgc2NvcGUucG9kTGluayA9IHBvZExpbms7XG4gICAgICAgIHNjb3BlLmNvbnRhaW5lck5hbWUgPSBjb250YWluZXJOYW1lO1xuICAgICAgICBzY29wZS5pZCA9IHRlcm1pbmFsSWQ7XG4gICAgICAgIHNjb3BlLmRvY2tlZCA9IHRydWU7XG4gICAgICAgIHZhciBlbCA9ICQoJGNvbXBpbGUodGVtcGxhdGUpKHNjb3BlKSk7XG4gICAgICAgIHZhciB0ZXJtID0ge1xuICAgICAgICAgIHNjb3BlOiBzY29wZSxcbiAgICAgICAgICBlbDogZWxcbiAgICAgICAgfTtcbiAgICAgICAgYm9keS5hcHBlbmQoZWwpO1xuICAgICAgICBzZWxmLnRlcm1pbmFsc1t0ZXJtaW5hbElkXSA9IHRlcm07XG4gICAgICAgIHBvc2l0aW9uVGVybWluYWxzKHNlbGYudGVybWluYWxzKTtcbiAgICAgICAgcmV0dXJuIHRlcm1pbmFsSWQ7XG4gICAgICB9LFxuICAgICAgY2xvc2VUZXJtaW5hbDogKGlkKSA9PiB7XG4gICAgICAgIHZhciB0ZXJtID0gc2VsZi50ZXJtaW5hbHNbaWRdO1xuICAgICAgICBpZiAodGVybSkge1xuICAgICAgICAgIHRlcm0uZWwucmVtb3ZlKCk7XG4gICAgICAgICAgZGVsZXRlIHNlbGYudGVybWluYWxzW2lkXTtcbiAgICAgICAgICBwb3NpdGlvblRlcm1pbmFscyhzZWxmLnRlcm1pbmFscyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICByYWlzZVRlcm1pbmFsOiAoaWQpID0+IHtcbiAgICAgICAgYW5ndWxhci5mb3JFYWNoKHNlbGYudGVybWluYWxzLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgIGlmIChrZXkgPT09IGlkKSB7XG4gICAgICAgICAgICB2YWx1ZS5lbC5jc3MoJ3otaW5kZXgnLCAnNDAwMCcpO1xuICAgICAgICAgICAgdmFsdWUuZWwuZmluZCgnLnRlcm1pbmFsJykuZm9jdXMoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUuZWwuY3NzKCd6LWluZGV4JywgJzMwMDAnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHNlbGY7XG4gIH0pO1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBhZGRXaW5kb3dBY3Rpb25zKHNjb3BlLCBlbGVtZW50LCBUZXJtaW5hbFNlcnZpY2UpIHtcbiAgICB2YXIgbW92ZWQgPSBmYWxzZTtcbiAgICB2YXIgbGFzdFggPSAwO1xuICAgIHZhciBsYXN0WSA9IDA7XG4gICAgdmFyIGhlYWRlciA9IGVsZW1lbnQuZmluZCgnLnRlcm1pbmFsLXRpdGxlJyk7XG4gICAgdmFyIGJvZHkgPSBlbGVtZW50LmZpbmQoJy50ZXJtaW5hbC1ib2R5Jyk7XG4gICAgZWxlbWVudC5vbignJGRlc3Ryb3knLCAoKSA9PiB7XG4gICAgICAkKCcjbWFpbicpLmNzcyh7IGRpc3BsYXk6ICdpbmhlcml0JyB9KTtcbiAgICB9KTtcblxuICAgIHZhciBIRUlHSFQgPSAzNDg7XG4gICAgdmFyIFdJRFRIID0gNjAwO1xuICAgIHZhciBUSVRMRV9IRUlHSFQgPSAzNTtcbiAgICB2YXIgTkFWX09GRlNFVCA9IDQ2O1xuXG4gICAgZWxlbWVudC5jc3Moe1xuICAgICAgaGVpZ2h0OiBIRUlHSFQsXG4gICAgICB3aWR0aDogV0lEVEhcbiAgICB9KTtcbiAgICBoZWFkZXIuY3NzKHtcbiAgICAgIGhlaWdodDogVElUTEVfSEVJR0hUXG4gICAgfSk7XG4gICAgYm9keS5jc3Moe1xuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICB0b3A6IDM1LFxuICAgICAgbGVmdDogMCxcbiAgICAgIHJpZ2h0OiAwLCBcbiAgICAgIGJvdHRvbTogMFxuICAgIH0pO1xuICAgIHNjb3BlLmNsb3NlID0gKCkgPT4ge1xuICAgICAgVGVybWluYWxTZXJ2aWNlLmNsb3NlVGVybWluYWwoc2NvcGUuaWQpO1xuICAgIH07XG4gICAgc2NvcGUucmFpc2UgPSAoKSA9PiB7XG4gICAgICBUZXJtaW5hbFNlcnZpY2UucmFpc2VUZXJtaW5hbChzY29wZS5pZCk7XG4gICAgfTtcbiAgICBzY29wZS4kd2F0Y2goJ2RvY2tlZCcsIChkb2NrZWQpID0+IHtcbiAgICAgIGlmIChkb2NrZWQpIHtcbiAgICAgICAgZWxlbWVudC53aWR0aChXSURUSCk7XG4gICAgICAgIGlmICghZWxlbWVudC5oYXNDbGFzcygnbWluaW1pemVkJykpIHtcbiAgICAgICAgICBlbGVtZW50LmhlaWdodChIRUlHSFQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgc2NvcGUuc3RhcnRSZXNpemUgPSAoZSkgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgbG9nLmRlYnVnKFwiU3RhcnQgcmVzaXplXCIpO1xuICAgICAgc2NvcGUucmVzaXppbmcgPSB0cnVlO1xuICAgICAgZWxlbWVudC5vbignbW91c2V1cCcsIHNjb3BlLnN0b3BSZXNpemUpO1xuICAgICAgJChkb2N1bWVudCkub24oJ21vdXNlbW92ZScsIHNjb3BlLmRvUmVzaXplKTtcbiAgICAgICQoZG9jdW1lbnQpLm9uKCdtb3VzZWxlYXZlJywgc2NvcGUuc3RvcFJlc2l6ZSk7XG4gICAgfTtcbiAgICBzY29wZS5kb1Jlc2l6ZSA9IChlKSA9PiB7XG4gICAgICBpZiAoc2NvcGUucmVzaXppbmcpIHtcbiAgICAgICAgbG9nLmRlYnVnKFwiUmVzaXppbmcsIGU6IFwiLCBlKTtcbiAgICAgICAgaWYgKCFtb3ZlZCkge1xuICAgICAgICAgIGxhc3RYID0gZS5jbGllbnRYO1xuICAgICAgICAgIGxhc3RZID0gZS5jbGllbnRZO1xuICAgICAgICAgIG1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGhlaWdodCA9IGVsZW1lbnQuaGVpZ2h0KCk7XG4gICAgICAgIHZhciB3aWR0aCA9IGVsZW1lbnQud2lkdGgoKTtcbiAgICAgICAgdmFyIGRlbHRhWCA9IGUuY2xpZW50WCAtIGxhc3RYO1xuICAgICAgICB2YXIgZGVsdGFZID0gZS5jbGllbnRZIC0gbGFzdFk7XG4gICAgICAgIHZhciBuZXdIZWlnaHQgPSBoZWlnaHQgKyBkZWx0YVk7XG4gICAgICAgIHZhciBuZXdXaWR0aCA9IHdpZHRoICsgZGVsdGFYO1xuICAgICAgICBpZiAobmV3SGVpZ2h0ID4gMzUgJiYgbmV3V2lkdGggPiA4MCkge1xuICAgICAgICAgIGVsZW1lbnQuaGVpZ2h0KGhlaWdodCArIGRlbHRhWSk7XG4gICAgICAgICAgZWxlbWVudC53aWR0aCh3aWR0aCArIGRlbHRhWCk7XG4gICAgICAgIH1cbiAgICAgICAgbGFzdFggPSBlLmNsaWVudFg7XG4gICAgICAgIGxhc3RZID0gZS5jbGllbnRZO1xuICAgICAgfVxuICAgIH07XG4gICAgc2NvcGUuc3RvcFJlc2l6ZSA9IChlKSA9PiB7XG4gICAgICBzY29wZS5yZXNpemluZyA9IGZhbHNlO1xuICAgICAgbW92ZWQgPSBmYWxzZTtcbiAgICAgIGVsZW1lbnQub2ZmKCdtb3VzZXVwJywgc2NvcGUuc3RvcFJlc2l6ZSk7XG4gICAgICAkKGRvY3VtZW50KS5vZmYoJ21vdXNlbW92ZScsIHNjb3BlLmRvUmVzaXplKTtcbiAgICAgICQoZG9jdW1lbnQpLm9mZignbW91c2VsZWF2ZScsIHNjb3BlLnN0b3BSZXNpemUpO1xuICAgIH1cbiAgICBzY29wZS5tb3VzZURvd24gPSAoZSkgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgaWYgKGVsZW1lbnQuaGFzQ2xhc3MoJ21pbmltaXplZCcpIHx8IGVsZW1lbnQuaGFzQ2xhc3MoJ21heGltaXplZCcpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHNjb3BlLmRyYWdnaW5nID0gdHJ1ZTtcbiAgICAgIGVsZW1lbnQub24oJ21vdXNldXAnLCBzY29wZS5tb3VzZVVwKTtcbiAgICAgICQoZG9jdW1lbnQpLm9uKCdtb3VzZW1vdmUnLCBzY29wZS5tb3VzZU1vdmUpO1xuICAgICAgJChkb2N1bWVudCkub24oJ21vdXNlbGVhdmUnLCBzY29wZS5tb3VzZVVwKTtcbiAgICB9O1xuICAgIHNjb3BlLm1vdXNlVXAgPSAoZSkgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgc2NvcGUuZHJhZ2dpbmcgPSBmYWxzZTtcbiAgICAgIG1vdmVkID0gZmFsc2U7XG4gICAgICB2YXIgaGVpZ2h0ID0gZWxlbWVudC5oZWlnaHQoKTtcbiAgICAgIHZhciBvZmZzZXQgPSBlbGVtZW50Lm9mZnNldCgpO1xuICAgICAgdmFyIHdpbkhlaWdodCA9ICQod2luZG93KS5oZWlnaHQoKTtcbiAgICAgIGlmIChvZmZzZXQudG9wID4gKHdpbkhlaWdodCAtIGhlaWdodCAtIDIwKSkge1xuICAgICAgICBlbGVtZW50LmNzcyh7IHRvcDogXCJpbmhlcml0XCIsIGxlZnQ6IFwiaW5oZXJpdFwiIH0pO1xuICAgICAgICBzY29wZS5kb2NrZWQgPSB0cnVlO1xuICAgICAgICBUZXJtaW5hbFNlcnZpY2UucG9zaXRpb25UZXJtaW5hbHMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNjb3BlLmRvY2tlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgZWxlbWVudC5vZmYoJ21vdXNldXAnLCBzY29wZS5tb3VzZVVwKTtcbiAgICAgICQoZG9jdW1lbnQpLm9mZignbW91c2Vtb3ZlJywgc2NvcGUubW91c2VNb3ZlKTtcbiAgICAgICQoZG9jdW1lbnQpLm9mZignbW91c2VsZWF2ZScsIHNjb3BlLm1vdXNlVXApO1xuICAgIH07XG4gICAgc2NvcGUubW91c2VNb3ZlID0gKGUpID0+IHtcbiAgICAgIGlmIChzY29wZS5kcmFnZ2luZykge1xuICAgICAgICBpZiAoIW1vdmVkKSB7XG4gICAgICAgICAgbGFzdFggPSBlLmNsaWVudFg7XG4gICAgICAgICAgbGFzdFkgPSBlLmNsaWVudFk7XG4gICAgICAgICAgbW92ZWQgPSB0cnVlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGVsdGFYID0gZS5jbGllbnRYIC0gbGFzdFg7XG4gICAgICAgIHZhciBkZWx0YVkgPSBlLmNsaWVudFkgLSBsYXN0WTtcbiAgICAgICAgdmFyIGVsT2Zmc2V0ID0gZWxlbWVudC5vZmZzZXQoKTtcbiAgICAgICAgZWxlbWVudC5vZmZzZXQoeyB0b3A6IGVsT2Zmc2V0LnRvcCArIGRlbHRhWSwgbGVmdDogZWxPZmZzZXQubGVmdCArIGRlbHRhWCB9KTtcbiAgICAgICAgbGFzdFggPSBlLmNsaWVudFg7XG4gICAgICAgIGxhc3RZID0gZS5jbGllbnRZO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc3RvcmVXaW5kb3coc2NvcGUsIGVsZW1lbnQpIHtcbiAgICAgIGlmIChzY29wZS5vZmZzZXQpIHtcbiAgICAgICAgZWxlbWVudC5vZmZzZXQoc2NvcGUub2Zmc2V0KTtcbiAgICAgICAgc2NvcGUuZG9ja2VkID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoc2NvcGUuaGVpZ2h0KSB7XG4gICAgICAgIGVsZW1lbnQuaGVpZ2h0KHNjb3BlLmhlaWdodCk7XG4gICAgICB9XG4gICAgICBpZiAoc2NvcGUud2lkdGgpIHtcbiAgICAgICAgZWxlbWVudC53aWR0aChzY29wZS53aWR0aCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2F2ZVdpbmRvdyhzY29wZSwgZWxlbWVudCkge1xuICAgICAgc2NvcGUub2Zmc2V0ID0gZWxlbWVudC5vZmZzZXQoKTtcbiAgICAgIHNjb3BlLmhlaWdodCA9IGVsZW1lbnQuaGVpZ2h0KCk7XG4gICAgICBzY29wZS53aWR0aCA9IGVsZW1lbnQud2lkdGgoKTtcbiAgICB9XG5cbiAgICBzY29wZS5tYXhpbWl6ZWQgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gZWxlbWVudC5oYXNDbGFzcygnbWF4aW1pemVkJyk7XG4gICAgfVxuXG4gICAgc2NvcGUubWF4aW1pemUgPSAoJGUpID0+IHtcbiAgICAgICRlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBpZiAoZWxlbWVudC5oYXNDbGFzcygnbWluaW1pemVkJykpIHtcbiAgICAgICAgc2NvcGUubWluaW1pemUoKTtcbiAgICAgIH1cbiAgICAgIGlmIChlbGVtZW50Lmhhc0NsYXNzKCdtYXhpbWl6ZWQnKSkge1xuICAgICAgICByZXN0b3JlV2luZG93KHNjb3BlLCBlbGVtZW50KTtcbiAgICAgICAgJCgnI21haW4nKS5jc3MoeyBkaXNwbGF5OiAnaW5oZXJpdCcgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzYXZlV2luZG93KHNjb3BlLCBlbGVtZW50KTtcbiAgICAgICAgJCgnI21haW4nKS5jc3MoeyBkaXNwbGF5OiAnbm9uZScgfSk7XG4gICAgICAgIGVsZW1lbnQuY3NzKHsgXG4gICAgICAgICAgaGVpZ2h0OiAnaW5oZXJpdCcsIFxuICAgICAgICAgIGJvdHRvbTogMCwgXG4gICAgICAgICAgd2lkdGg6ICcxMDAlJywgXG4gICAgICAgICAgdG9wOiBOQVZfT0ZGU0VULCBcbiAgICAgICAgICBsZWZ0OiAwIFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGVsZW1lbnQudG9nZ2xlQ2xhc3MoJ21heGltaXplZCcpO1xuICAgIH1cbiAgICBzY29wZS5taW5pbWl6ZSA9ICgkZSkgPT4ge1xuICAgICAgJGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGlmIChlbGVtZW50Lmhhc0NsYXNzKCdtYXhpbWl6ZWQnKSkge1xuICAgICAgICBzY29wZS5tYXhpbWl6ZSgpO1xuICAgICAgfVxuICAgICAgaWYgKGVsZW1lbnQuaGFzQ2xhc3MoJ21pbmltaXplZCcpKSB7XG4gICAgICAgIHJlc3RvcmVXaW5kb3coc2NvcGUsIGVsZW1lbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2F2ZVdpbmRvdyhzY29wZSwgZWxlbWVudCk7XG4gICAgICAgIHNjb3BlLmRvY2tlZCA9IHRydWU7XG4gICAgICAgIGVsZW1lbnQuY3NzKHsgaGVpZ2h0OiBUSVRMRV9IRUlHSFQsIHRvcDogXCJpbmhlcml0XCIsIGxlZnQ6IFwiaW5oZXJpdFwiIH0pO1xuICAgICAgICBUZXJtaW5hbFNlcnZpY2UucG9zaXRpb25UZXJtaW5hbHMoKTtcbiAgICAgIH1cbiAgICAgIGVsZW1lbnQudG9nZ2xlQ2xhc3MoJ21pbmltaXplZCcpO1xuICAgIH07XG4gIH1cblxuICBfbW9kdWxlLmRpcmVjdGl2ZSgndGVybWluYWxXaW5kb3cnLCAoJGNvbXBpbGUsIFRlcm1pbmFsU2VydmljZSkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICByZXN0cmljdDogJ0EnLFxuICAgICAgc2NvcGU6IGZhbHNlLFxuICAgICAgbGluazogKHNjb3BlOmFueSwgZWxlbWVudCwgYXR0cikgPT4ge1xuICAgICAgICBhZGRXaW5kb3dBY3Rpb25zKHNjb3BlLCBlbGVtZW50LCBUZXJtaW5hbFNlcnZpY2UpO1xuICAgICAgICB2YXIgYm9keSA9IGVsZW1lbnQuZmluZCgnLnRlcm1pbmFsLWJvZHknKTtcbiAgICAgICAgYm9keS5hcHBlbmQoJGNvbXBpbGUoJzxrdWJlcm5ldGVzLWNvbnRhaW5lci10ZXJtaW5hbCBwb2Q9XCJwb2RMaW5rXCIgY29udGFpbmVyPVwiY29udGFpbmVyTmFtZVwiIGNvbW1hbmQ9XCJiYXNoXCI+PC9rdWJlcm5ldGVzLWNvbnRhaW5lci10ZXJtaW5hbD4nKShzY29wZSkpO1xuICAgICAgfVxuICAgIH07XG4gIH0pO1xufVxuXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJ0ZXJtLnRzXCIvPlxuXG5tb2R1bGUgS3ViZXJuZXRlcyB7XG5cbiAgdmFyIGxvZyA9IExvZ2dlci5nZXQoXCJrdWJlcm5ldGVzLXBvZC1sb2dzXCIpO1xuXG4gIF9tb2R1bGUuc2VydmljZShcIlBvZExvZ1JlcGxhY2VtZW50c1wiLCAoKSA9PiB7XG4gICAgcmV0dXJuIFtdO1xuICB9KTtcblxuICBfbW9kdWxlLnJ1bigoUG9kTG9nUmVwbGFjZW1lbnRzKSA9PiB7XG4gICAgdmFyIGxvZyA9IExvZ2dlci5nZXQoXCJwb2QtbG9nLXJlcGxhY2Vyc1wiKTtcbiAgICAvLyBBZGQgQU5TSSBlc2NhcGUgY2hhcmFjdGVyIHJlcGxhY2VyXG4gICAgLy8gYWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tbWFsZWNraS9hbnNpc3BhblxuICAgIHZhciBjb2xvcnMgPSB7XG4gICAgICAnMzAnOiAnYmxhY2snLFxuICAgICAgJzMxJzogJ3JlZCcsXG4gICAgICAnMzInOiAnZ3JlZW4nLFxuICAgICAgJzMzJzogJ3llbGxvdycsXG4gICAgICAnMzQnOiAnYmx1ZScsXG4gICAgICAnMzUnOiAncHVycGxlJyxcbiAgICAgICczNic6ICdjeWFuJyxcbiAgICAgICczNyc6ICd3aGl0ZScgXG4gICAgfVxuICAgIFBvZExvZ1JlcGxhY2VtZW50cy5wdXNoKChtc2cpID0+IHtcbiAgICAgIGlmICghbXNnKSB7XG4gICAgICAgIHJldHVybiBtc2c7XG4gICAgICB9XG4gICAgICB2YXIgZW5kID0gXCI8L3NwYW4+XCI7XG4gICAgICBfLmZvck93bihjb2xvcnMsIChjb2xvciwgY29kZSkgPT4ge1xuICAgICAgICB2YXIgc3RhcnQgPSBgPHNwYW4gY2xhc3M9XCJgICsgY29sb3IgKyBgXCI+YDtcbiAgICAgICAgbXNnID0gbXNnLnJlcGxhY2UobmV3IFJlZ0V4cCgnXFwwMzNcXFxcWycgKyBjb2RlICsgJ20nLCAnZycpLCBzdGFydClcbiAgICAgICAgbXNnID0gbXNnLnJlcGxhY2UobmV3IFJlZ0V4cCgnXFwwMzNcXFxcWzA7JyArIGNvZGUgKyAnbScsICdnJyksIHN0YXJ0KTtcbiAgICAgIH0pO1xuICAgICAgbXNnID0gbXNnLnJlcGxhY2UoL1xcMDMzXFxbMW0vZywgJzxiPicpLnJlcGxhY2UoL1xcMDMzXFxbMjJtL2csICc8L2I+Jyk7XG4gICAgICBtc2cgPSBtc2cucmVwbGFjZSgvXFwwMzNcXFszbS9nLCAnPGk+JykucmVwbGFjZSgvXFwwMzNcXFsyM20vZywgJzwvaT4nKTtcbiAgICAgIG1zZyA9IG1zZy5yZXBsYWNlKC9cXDAzM1xcW20vZywgZW5kKTtcbiAgICAgIG1zZyA9IG1zZy5yZXBsYWNlKC9cXDAzM1xcWzBtL2csIGVuZCk7XG4gICAgICBtc2cgPSBtc2cucmVwbGFjZSgvXFwwMzNcXFszOW0vZywgZW5kKTtcbiAgICAgIG1zZyA9IG1zZy5yZXBsYWNlKC9cXDAzM1xcWzJtL2csICc8c3Bhbj4nKTtcbiAgICAgIG1zZyA9IG1zZy5yZXBsYWNlKC9cXDAzM1xcWzA7MzltL2csIGVuZCk7XG4gICAgICBsb2cuZGVidWcoXCJSdW5uaW5nIHJlcGxhY2VtZW50IG9uIG1lc3NhZ2U6IFwiLCBtc2cpO1xuICAgICAgcmV0dXJuIG1zZztcbiAgICB9KTtcbiAgfSk7XG5cbiAgX21vZHVsZS5jb250cm9sbGVyKFwiS3ViZXJuZXRlcy5Qb2RMb2dMaW5rQ29udHJvbGxlclwiLCAoJHNjb3BlLCBUZXJtaW5hbFNlcnZpY2UsICR0ZW1wbGF0ZUNhY2hlKSA9PiB7XG5cbiAgICAkc2NvcGUub3BlbkxvZ3MgPSAoZW50aXR5KSA9PiB7XG4gICAgICBsb2cuZGVidWcoXCJPcGVuIGxvZ3M6IFwiLCBlbnRpdHkpO1xuICAgICAgVGVybWluYWxTZXJ2aWNlLm5ld1Rlcm1pbmFsKGVudGl0eS5tZXRhZGF0YS5zZWxmTGluaywgZW50aXR5Lm1ldGFkYXRhLm5hbWUsICR0ZW1wbGF0ZUNhY2hlLmdldChVcmxIZWxwZXJzLmpvaW4odGVtcGxhdGVQYXRoLCAnbG9nU2hlbGwuaHRtbCcpKSk7XG4gICAgfVxuXG4gIH0pO1xuXG4gIF9tb2R1bGUuZGlyZWN0aXZlKCdwb2RMb2dEaXNwbGF5JywgKHVzZXJEZXRhaWxzLCBQb2RMb2dSZXBsYWNlbWVudHMpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVzdHJpY3Q6ICdFJyxcbiAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwb2QtbG9nLWxpbmVzXCI+XG4gICAgICAgICAgPHAgbmctaGlkZT1cImZldGNoZWRcIj5QbGVhc2Ugd2FpdCwgZmV0Y2hpbmcgbG9ncy4uLjwvcD5cbiAgICAgICAgICA8cCBuZy1oaWRlPVwibWVzc2FnZXMubGVuZ3RoIHx8IHByZXZpb3VzXCI+VmlldyA8YSBocmVmPVwiXCIgbmctY2xpY2s9XCJwcmV2aW91cz0hcHJldmlvdXNcIj5wcmV2aW91cyBjb250YWluZXIgbG9nczwvYT4/PC9wPlxuICAgICAgICAgIDxwIG5nLXJlcGVhdD1cIm1lc3NhZ2UgaW4gbWVzc2FnZXMgdHJhY2sgYnkgJGluZGV4XCIgbmctYmluZC1odG1sPVwibWVzc2FnZVwiPjwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICBgLFxuICAgICAgbGluazogKHNjb3BlOmFueSwgZWxlbWVudCwgYXR0cikgPT4ge1xuICAgICAgICB2YXIgbGluayA9IHNjb3BlLiRldmFsKCdwb2RMaW5rJyk7XG4gICAgICAgIHZhciBuYW1lID0gc2NvcGUuJGV2YWwoJ2NvbnRhaW5lck5hbWUnKTtcblxuICAgICAgICBpZiAoIWxpbmspIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzY29wZS5mZXRjaGVkID0gZmFsc2U7XG4gICAgICAgIHNjb3BlLnByZXZpb3VzID0gZmFsc2U7XG4gICAgICAgIHNjb3BlLm1lc3NhZ2VzID0gW107XG5cbiAgICAgICAgbGluayA9IFVybEhlbHBlcnMuam9pbihtYXN0ZXJBcGlVcmwoKSwgbGluaywgJ2xvZycpO1xuICAgICAgICBsaW5rID0gS3ViZXJuZXRlc0FQSS53c1VybChsaW5rKTtcbiAgICAgICAgbGluay5zZWFyY2goe1xuICAgICAgICAgIGZvbGxvdzogdHJ1ZSxcbiAgICAgICAgICB0YWlsTGluZXM6IDEwMDAsXG4gICAgICAgICAgYWNjZXNzX3Rva2VuOiB1c2VyRGV0YWlscy50b2tlblxuICAgICAgICB9KTtcblxuICAgICAgICB2YXIgbWVzc2FnZXMgPSBbXTtcblxuICAgICAgICB2YXIgcHVsbE1lc3NhZ2VzID0gXy5kZWJvdW5jZSgoKSA9PiB7XG4gICAgICAgICAgc2NvcGUubWVzc2FnZXMgPSBzY29wZS5tZXNzYWdlcy5jb25jYXQoXy5yZW1vdmUobWVzc2FnZXMsICgpID0+IHRydWUpLm1hcCgobXNnKSA9PiB7XG4gICAgICAgICAgICBQb2RMb2dSZXBsYWNlbWVudHMuZm9yRWFjaCgocmVwbEZ1bmM6YW55KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChhbmd1bGFyLmlzRnVuY3Rpb24ocmVwbEZ1bmMpKSB7XG4gICAgICAgICAgICAgICAgbXNnID0gcmVwbEZ1bmMobXNnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbXNnO1xuICAgICAgICAgIH0pKTtcbiAgICAgICAgICBpZiAoIXNjb3BlLmZldGNoZWQpIHtcbiAgICAgICAgICAgIHNjb3BlLmZldGNoZWQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBDb3JlLiRhcHBseShzY29wZSk7XG4gICAgICAgIH0sIDEwMDApO1xuXG4gICAgICAgIGZ1bmN0aW9uIGluaXRTb2NrZXQobGluaykge1xuICAgICAgICAgIHNjb3BlLmZldGNoZWQgPSBmYWxzZTtcbiAgICAgICAgICBtZXNzYWdlcy5sZW5ndGggPSAwO1xuICAgICAgICAgIHNjb3BlLm1lc3NhZ2VzLmxlbmd0aCA9IDA7XG4gICAgICAgICAgdmFyIHdzID0gbmV3IFdlYlNvY2tldChsaW5rLnRvU3RyaW5nKCksICdiYXNlNjQuYmluYXJ5Lms4cy5pbycpO1xuICAgICAgICAgIHdzLm9ubWVzc2FnZSA9IChldmVudCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSB3aW5kb3cuYXRvYihldmVudC5kYXRhKTtcbiAgICAgICAgICAgICAgbWVzc2FnZXMucHVzaChtZXNzYWdlKTtcbiAgICAgICAgICAgICAgcHVsbE1lc3NhZ2VzKCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgLy8gd2UnbGwganVzdCBpZ25vcmUgdGhlc2VcbiAgICAgICAgICAgICAgLy9sb2cuZGVidWcoXCJGYWlsZWQgdG8gZGVjb2RlIG1lc3NhZ2U6IFwiLCBldmVudC5kYXRhLCBcIiBlcnJvcjogXCIsIGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB3cztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3cyA9IGluaXRTb2NrZXQobGluayk7XG5cbiAgICAgICAgc2NvcGUuJHdhdGNoKCdwcmV2aW91cycsICh2YWx1ZSwgb2xkKSA9PiB7XG4gICAgICAgICAgaWYgKHZhbHVlICE9PSBvbGQpIHtcbiAgICAgICAgICAgIGlmIChsaW5rLmhhc1NlYXJjaCgncHJldmlvdXMnKSkge1xuICAgICAgICAgICAgICBsaW5rLnJlbW92ZVNlYXJjaCgncHJldmlvdXMnKS5hZGRTZWFyY2goJ3ByZXZpb3VzJywgc2NvcGUucHJldmlvdXMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbGluay5hZGRTZWFyY2goJ3ByZXZpb3VzJywgc2NvcGUucHJldmlvdXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd3MuY2xvc2UoKTtcbiAgICAgICAgICAgIHdzID0gaW5pdFNvY2tldChsaW5rKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGVsZW1lbnQub24oJyRkZXN0cm95JywgKCkgPT4ge1xuICAgICAgICAgIGlmICh3cykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgd3MuY2xvc2UoKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAvLyBub3RoaW5nIHRvIGRvXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWxldGUgd3M7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIF9tb2R1bGUuZGlyZWN0aXZlKCdwb2RMb2dXaW5kb3cnLCAoJGNvbXBpbGUsIFRlcm1pbmFsU2VydmljZSkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICByZXN0cmljdDogJ0EnLFxuICAgICAgc2NvcGU6IGZhbHNlLFxuICAgICAgbGluazogKHNjb3BlOmFueSwgZWxlbWVudCwgYXR0cikgPT4ge1xuICAgICAgICBhZGRXaW5kb3dBY3Rpb25zKHNjb3BlLCBlbGVtZW50LCBUZXJtaW5hbFNlcnZpY2UpO1xuICAgICAgICBzY29wZS5hdEJvdHRvbSA9IHRydWU7XG4gICAgICAgIHNjb3BlLiR3YXRjaCgnYXRCb3R0b20nLCAodmFsKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJhdEJvdHRvbTogXCIsIHZhbCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gIH0pO1xuXG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJ1dGlsSGVscGVycy50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIGV4cG9ydCB2YXIgRW52SXRlbSA9IGNvbnRyb2xsZXIoXCJFbnZJdGVtXCIsIFtcIiRzY29wZVwiLCAoJHNjb3BlKSA9PiB7XG4gICAgdmFyIHBhcnRzID0gJHNjb3BlLmRhdGEuc3BsaXQoJz0nKTtcbiAgICAkc2NvcGUua2V5ID0gcGFydHMuc2hpZnQoKTtcbiAgICAkc2NvcGUudmFsdWUgPSBwYXJ0cy5qb2luKCc9Jyk7XG4gIH1dKTtcblxuICAvLyBtYWluIGNvbnRyb2xsZXIgZm9yIHRoZSBwYWdlXG4gIGV4cG9ydCB2YXIgUG9kcyA9IGNvbnRyb2xsZXIoXCJQb2RzXCIsIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNQb2RzXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiU2VydmljZVJlZ2lzdHJ5XCIsIFwiJGRpYWxvZ1wiLCBcIiR3aW5kb3dcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRsb2NhdGlvblwiLCBcImxvY2FsU3RvcmFnZVwiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXG4gICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOiBLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNQb2RzOm5nLnJlc291cmNlLklSZXNvdXJjZUNsYXNzPGFueT4sIEt1YmVybmV0ZXNTdGF0ZSwgU2VydmljZVJlZ2lzdHJ5LCAkZGlhbG9nLCAkd2luZG93LCAkdGVtcGxhdGVDYWNoZSwgJHJvdXRlUGFyYW1zLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgbG9jYWxTdG9yYWdlLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcblxuICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xuICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcbiAgICAkc2NvcGUuJG9uKCdrdWJlcm5ldGVzTW9kZWxVcGRhdGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICB9KTtcblxuICAgICRzY29wZS5pdGVtU2NoZW1hID0gRm9ybXMuY3JlYXRlRm9ybUNvbmZpZ3VyYXRpb24oKTtcblxuICAgICRzY29wZS50YWJsZUNvbmZpZyA9IHtcbiAgICAgIGRhdGE6ICdtb2RlbC5wb2RzJyxcbiAgICAgIHNob3dTZWxlY3Rpb25DaGVja2JveDogdHJ1ZSxcbiAgICAgIGVuYWJsZVJvd0NsaWNrU2VsZWN0aW9uOiBmYWxzZSxcbiAgICAgIG11bHRpU2VsZWN0OiB0cnVlLFxuICAgICAgc2VsZWN0ZWRJdGVtczogW10sXG4gICAgICBmaWx0ZXJPcHRpb25zOiB7XG4gICAgICAgIGZpbHRlclRleHQ6ICRsb2NhdGlvbi5zZWFyY2goKVtcInFcIl0gfHwgJydcbiAgICAgIH0sXG4gICAgICBjb2x1bW5EZWZzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaWVsZDogJ19rZXknLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTmFtZScsXG4gICAgICAgICAgZGVmYXVsdFNvcnQ6IHRydWUsXG4gICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJpZFRlbXBsYXRlLmh0bWxcIilcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGZpZWxkOiAnJHN0YXR1c0NzcycsXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdTdGF0dXMnLFxuICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwic3RhdHVzVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICB9LFxuICAgICAgICB7IGZpZWxkOiAnJGV2ZW50Q291bnQnLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnRXZlbnRzJyxcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImV2ZW50U3VtbWFyeVRlbXBsYXRlLmh0bWxcIilcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGZpZWxkOiAnJHJlc3RhcnRDb3VudCcsXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdSZXN0YXJ0cydcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGZpZWxkOiAnJGNyZWF0ZWRUaW1lJyxcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ0FnZScsXG4gICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJhZ2VUZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBmaWVsZDogJyRpbWFnZU5hbWVzJyxcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ0ltYWdlcycsXG4gICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJpbWFnZVRlbXBsYXRlLmh0bWxcIilcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGZpZWxkOiAnJGhvc3QnLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnSG9zdCcsXG4gICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJob3N0VGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZmllbGQ6ICckbGFiZWxzVGV4dCcsXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdMYWJlbHMnLFxuICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwibGFiZWxUZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBmaWVsZDogJyRwb2RJUCcsXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdQb2QgSVAnLFxuICAgICAgICAgIGN1c3RvbVNvcnRGaWVsZDogKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gS3ViZXJuZXRlcy5zb3J0QnlQb2RJcChmaWVsZC4kcG9kSVApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH07XG5cbiAgICAkc2NvcGUub3BlbkxvZ3MgPSAoKSA9PiB7XG4gICAgICB2YXIgcG9kcyA9ICRzY29wZS50YWJsZUNvbmZpZy5zZWxlY3RlZEl0ZW1zO1xuICAgICAgaWYgKCFwb2RzIHx8ICFwb2RzLmxlbmd0aCkge1xuICAgICAgICBpZiAoJHNjb3BlLmlkKSB7XG4gICAgICAgICAgdmFyIGl0ZW0gPSAkc2NvcGUuaXRlbTtcbiAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgcG9kcyA9IFtpdGVtXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG9wZW5Mb2dzRm9yUG9kcyhTZXJ2aWNlUmVnaXN0cnksICR3aW5kb3csIEt1YmVybmV0ZXNNb2RlbC5jdXJyZW50TmFtZXNwYWNlKCksIHBvZHMpO1xuICAgIH07XG5cbiAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XG5cbiAgICAkc2NvcGUuZGVsZXRlUHJvbXB0ID0gKHNlbGVjdGVkKSA9PiB7XG4gICAgICBpZiAoYW5ndWxhci5pc1N0cmluZyhzZWxlY3RlZCkpIHtcbiAgICAgICAgc2VsZWN0ZWQgPSBbe1xuICAgICAgICAgIGlkOiBzZWxlY3RlZFxuICAgICAgICB9XTtcbiAgICAgIH1cbiAgICAgIFVJLm11bHRpSXRlbUNvbmZpcm1BY3Rpb25EaWFsb2coPFVJLk11bHRpSXRlbUNvbmZpcm1BY3Rpb25PcHRpb25zPntcbiAgICAgICAgY29sbGVjdGlvbjogc2VsZWN0ZWQsXG4gICAgICAgIGluZGV4OiAnbWV0YWRhdGEubmFtZScsXG4gICAgICAgIG9uQ2xvc2U6IChyZXN1bHQ6Ym9vbGVhbikgPT4ge1xuICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkOkFycmF5PEt1YmVQb2Q+LCBuZXh0Okt1YmVQb2QpIHtcbiAgICAgICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgICAgICBsb2cuZGVidWcoXCJkZWxldGluZzogXCIsIGdldE5hbWUobmV4dCkpO1xuICAgICAgICAgICAgICAgIEt1YmVybmV0ZXNQb2RzLmRlbGV0ZSh7XG4gICAgICAgICAgICAgICAgICBpZDogZ2V0TmFtZShuZXh0KVxuICAgICAgICAgICAgICAgIH0sIHVuZGVmaW5lZCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiZGVsZXRlZDogXCIsIGdldE5hbWUobmV4dCkpO1xuICAgICAgICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpO1xuICAgICAgICAgICAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiRXJyb3IgZGVsZXRpbmc6IFwiLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHRpdGxlOiAnRGVsZXRlIHBvZHM/JyxcbiAgICAgICAgYWN0aW9uOiAnVGhlIGZvbGxvd2luZyBwb2RzIHdpbGwgYmUgZGVsZXRlZDonLFxuICAgICAgICBva1RleHQ6ICdEZWxldGUnLFxuICAgICAgICBva0NsYXNzOiAnYnRuLWRhbmdlcicsXG4gICAgICAgIGN1c3RvbTogXCJUaGlzIG9wZXJhdGlvbiBpcyBwZXJtYW5lbnQgb25jZSBjb21wbGV0ZWQhXCIsXG4gICAgICAgIGN1c3RvbUNsYXNzOiBcImFsZXJ0IGFsZXJ0LXdhcm5pbmdcIlxuICAgICAgfSkub3BlbigpO1xuICAgIH07XG5cbiAgICAkc2NvcGUuY3JlYXRlUG9kcz0gKCkgPT4ge1xuICAgICAgdmFyIHhocj0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xuICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT0gNCkgey8vNOihqOekuuaVsOaNruW3sue7j+iwg+eUqOWujOaIkFxuICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09IDIwMCkgey8vSFRUUOeahOeKtuaAgeeggVxuICAgICAgICAgICAgdmFyIG9iaj1KU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgdmFyIG9iamVjdCA9IHtcbiAgICAgICAgICAgICAgIFwibmFtZVwiOiBcIm5ld3BvZFwiLFxuICAgICAgICAgICAgICAgXCJsYWJlbHNcIjoge1xuICAgICAgICAgICAgICAgICBcImFpbVwiOiBcInRlc3RcIixcbiAgICAgICAgICAgICAgICAgXCJhcHBcIjogXCJvcmFjbGVcIlxuICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgIFwicGF0aFwiOiAnL2hvbWUvJyxcbiAgICAgICAgICAgICAgIFwicG9ydFwiOiAxNTI1XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBLdWJlcm5ldGVzLmNyZWF0ZVJDKG9iamVjdCk7XG5cbiAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAvL2FsdGVyKFwic2hpYmFpXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHhoci5vcGVuKFwiUE9TVFwiLCBcIi9vcmFjbGVBcHBQYXRoXCIsIGZhbHNlKTsvL+S4juacjeWKoeWZqOi/nuaOpeW5tuWPkemAgVxuICAgICAgeGhyLnNlbmQobnVsbCk7XG4gICAgfTtcbiAgfV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblxuICBleHBvcnQgdmFyIFJlcGxpY2F0aW9uQ29udHJvbGxlckNvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiUmVwbGljYXRpb25Db250cm9sbGVyQ29udHJvbGxlclwiLFxuICAgIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcbiAgICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDogS3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcblxuICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xuICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcbiAgICAkc2NvcGUucmF3TW9kZWwgPSBudWxsXG5cbiAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XG5cbiAgICAkc2NvcGUuaXRlbUNvbmZpZyA9IHtcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgJ15cXFxcL2xhYmVscyQnOiB7XG4gICAgICAgICAgdGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldCgnbGFiZWxUZW1wbGF0ZS5odG1sJylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICAkc2NvcGUuJG9uKCdrdWJlcm5ldGVzTW9kZWxVcGRhdGVkJywgKCkgPT4ge1xuICAgICAgdXBkYXRlRGF0YSgpO1xuICAgIH0pO1xuXG4gICAgJHNjb3BlLiRvbignJHJvdXRlVXBkYXRlJywgKCRldmVudCkgPT4ge1xuICAgICAgdXBkYXRlRGF0YSgpO1xuICAgIH0pO1xuXG4gICAgJHNjb3BlLiR3YXRjaCgnbW9kZWwucG9kcycsIChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IHtcbiAgICAgIHVwZGF0ZURhdGEoKTtcbiAgICB9LCB0cnVlKTtcblxuICAgICRzY29wZS5mbGlwUmF3ID0gKCkgPT4ge1xuICAgICAgJHNjb3BlLnJhd01vZGUgPSAhJHNjb3BlLnJhd01vZGU7XG4gICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgIH07XG5cbiAgICB1cGRhdGVEYXRhKCk7XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xuICAgICAgaWYgKCRzY29wZS5kaXJ0eSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAkc2NvcGUuaWQgPSAkcm91dGVQYXJhbXNbXCJpZFwiXTtcbiAgICAgICRzY29wZS5pdGVtID0gJHNjb3BlLm1vZGVsLmdldFJlcGxpY2F0aW9uQ29udHJvbGxlcihLdWJlcm5ldGVzU3RhdGUuc2VsZWN0ZWROYW1lc3BhY2UsICRzY29wZS5pZCk7XG4gICAgICBpZiAoJHNjb3BlLml0ZW0pIHtcbiAgICAgICAgJHNjb3BlLnJhd01vZGVsID0gdG9SYXdZYW1sKCRzY29wZS5pdGVtKTtcbiAgICAgIH1cbiAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgfVxuICB9XSk7XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIGV4cG9ydCB2YXIgUmVwbGljYXRpb25Db250cm9sbGVyRWRpdENvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiUmVwbGljYXRpb25Db250cm9sbGVyRWRpdENvbnRyb2xsZXJcIixcbiAgICBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCJLdWJlcm5ldGVzU2NoZW1hXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLCBcIlNjaGVtYVJlZ2lzdHJ5XCIsXG4gICAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6IEt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLFxuICAgICAgICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMLCBzY2hlbWFzOkhhd3Rpb0Zvcm1zLlNjaGVtYVJlZ2lzdHJ5KSA9PiB7XG5cbiAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XG4gICAgJHNjb3BlLmlkID0gJHJvdXRlUGFyYW1zW1wiaWRcIl07XG4gICAgJHNjb3BlLnNjaGVtYSA9IEt1YmVybmV0ZXNTY2hlbWE7XG4gICAgbG9nLmRlYnVnKFwiU2NoZW1hOiBcIiwgJHNjb3BlLnNjaGVtYSk7XG4gICAgJHNjb3BlLmNvbmZpZyA9IHNjaGVtYXMuY2xvbmVTY2hlbWEoXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJlcGxpY2F0aW9uQ29udHJvbGxlclwiKTtcbiAgICAvLyQkc2NvcGUuY29uZmlnID0gS3ViZXJuZXRlc1NjaGVtYS5kZWZpbml0aW9ucy5rdWJlcm5ldGVzX3YxYmV0YTNfUmVwbGljYXRpb25Db250cm9sbGVyO1xuXG4gICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xuXG4gICAgJHNjb3BlLiRvbignJHJvdXRlVXBkYXRlJywgKCRldmVudCkgPT4ge1xuICAgICAgdXBkYXRlRGF0YSgpO1xuICAgIH0pO1xuXG4gICAgdXBkYXRlRGF0YSgpO1xuXG4gICAgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcbiAgICAgIGlmICgkc2NvcGUuaWQpIHtcbiAgICAgICAgJHNjb3BlLmVudGl0eSA9ICRzY29wZS5tb2RlbC5nZXRSZXBsaWNhdGlvbkNvbnRyb2xsZXIoS3ViZXJuZXRlc1N0YXRlLnNlbGVjdGVkTmFtZXNwYWNlLCAkc2NvcGUuaWQpO1xuICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XSk7XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIGV4cG9ydCB2YXIgUmVwbGljYXRpb25Db250cm9sbGVycyA9IGNvbnRyb2xsZXIoXCJSZXBsaWNhdGlvbkNvbnRyb2xsZXJzXCIsXG4gICAgW1wiJHNjb3BlXCIsIFwiT3JhY2xlU3RhdHVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzUmVwbGljYXRpb25Db250cm9sbGVyc1wiLCBcIkt1YmVybmV0ZXNQb2RzXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLFxuICAgICAgKCRzY29wZSwgT3JhY2xlU3RhdHVzTW9kZWwsIEt1YmVybmV0ZXNNb2RlbDogS3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzUmVwbGljYXRpb25Db250cm9sbGVyczpuZy5yZXNvdXJjZS5JUmVzb3VyY2VDbGFzczxhbnk+LCBLdWJlcm5ldGVzUG9kczpuZy5yZXNvdXJjZS5JUmVzb3VyY2VDbGFzczxhbnk+LCBLdWJlcm5ldGVzU3RhdGUsXG4gICAgICAgJHRlbXBsYXRlQ2FjaGUsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xuXG4gICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XG4gICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xuXG4gICAgJHNjb3BlLnRhYmxlQ29uZmlnID0ge1xuICAgICAgZGF0YTogJ21vZGVsLnJlcGxpY2F0aW9uQ29udHJvbGxlcnMnLFxuICAgICAgc2hvd1NlbGVjdGlvbkNoZWNrYm94OiB0cnVlLFxuICAgICAgZW5hYmxlUm93Q2xpY2tTZWxlY3Rpb246IGZhbHNlLFxuICAgICAgbXVsdGlTZWxlY3Q6IHRydWUsXG4gICAgICBzZWxlY3RlZEl0ZW1zOiBbXSxcbiAgICAgIGZpbHRlck9wdGlvbnM6IHtcbiAgICAgICAgZmlsdGVyVGV4dDogJGxvY2F0aW9uLnNlYXJjaCgpW1wicVwiXSB8fCAnJ1xuICAgICAgfSxcbiAgICAgY29sdW1uRGVmczogW1xuICAgICAgICAgeyBmaWVsZDogJ19rZXknLFxuICAgICAgICAgICBkaXNwbGF5TmFtZTogJ+acjeWKoeWQjeensCcsXG4gICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiaWRUZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgICB9LFxuICAgICAgICAgLy97IGZpZWxkOiAnJHJlcGxpY2FzJyxcbiAgICAgICAgIC8vICBkaXNwbGF5TmFtZTogJ1NjYWxlJyxcbiAgICAgICAgIC8vICBjZWxsVGVtcGxhdGU6JHRlbXBsYXRlQ2FjaGUuZ2V0KFwiZGVzaXJlZFJlcGxpY2FzLmh0bWxcIilcbiAgICAgICAgIC8vfSxcbiAgICAgICAgIHsgZmllbGQ6ICckcG9kcy5hZ2UnLFxuICAgICAgICAgICBkaXNwbGF5TmFtZTogJ+WQr+WKqOaXtumXtCcsXG4gICAgICAgICAgIGNlbGxUZW1wbGF0ZTokdGVtcGxhdGVDYWNoZS5nZXQoXCJhZ2VUZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgICB9LFxuICAgICAgICAgeyBmaWVsZDogJyRsYWJlbHNUZXh0JyxcbiAgICAgICAgICAgZGlzcGxheU5hbWU6ICfmlbDmja7moIfnrb4nLFxuICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImxhYmVsVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgfSxcbiAgICAgICAgIHsgZmllbGQ6ICckcG9kcycsXG4gICAgICAgICAgIGRpc3BsYXlOYW1lOiAn6L+e5o6l5Y+C5pWwJyxcbiAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJjb25uZWN0UGFyYW1UZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgICB9LFxuICAgICAgICAgeyBmaWVsZDogJyRwb2RzWzBdLiRldmVudENvdW50JyxcbiAgICAgICAgICAgZGlzcGxheU5hbWU6ICfmnI3liqHlkK/liqjml6Xlv5cnLFxuICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImV2ZW50U3VtbWFyeVRlbXBsYXRlLmh0bWxcIilcbiAgICAgICAgIH0sXG4gICAgICAgICB7IGZpZWxkOiAnJHBvZENvdW50ZXJzJyxcbiAgICAgICAgICAgZGlzcGxheU5hbWU6ICfmnI3liqHnirbmgIEnLFxuICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcInBvZENvdW50c0FuZExpbmtUZW1wbGF0ZS5odG1sXCIpLFxuICAgICAgICAgICBjdXN0b21Tb3J0RmllbGQ6IChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgIGlmKGZpZWxkLiRwb2RDb3VudGVycy5yZWFkeSApe1xuICAgICAgICAgICAgICAgIHJldHVybiAzO1xuICAgICAgICAgICAgIH1lbHNlIGlmKGZpZWxkLiRwb2RDb3VudGVycy52YWxpZCB8fCBmaWVsZC4kcG9kQ291bnRlcnMud2FpdGluZyl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDI7XG4gICAgICAgICAgICAgfWVsc2UgaWYoZmllbGQuJHBvZENvdW50ZXJzLmVycm9yKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgICB9XG4gICAgICAgICAgIH1cbiAgICAgICAgIH1cbiAgICAgICBdXG4gICAgfVxuXG4gICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xuXG4gICAgJHNjb3BlLmRlbGV0ZVByb21wdCA9IChzZWxlY3RlZCkgPT4ge1xuICAgICAgaWYgKGFuZ3VsYXIuaXNTdHJpbmcoc2VsZWN0ZWQpKSB7XG4gICAgICAgIHNlbGVjdGVkID0gW3tcbiAgICAgICAgICBpZDogc2VsZWN0ZWRcbiAgICAgICAgfV07XG4gICAgICB9XG4gICAgICBVSS5tdWx0aUl0ZW1Db25maXJtQWN0aW9uRGlhbG9nKDxVSS5NdWx0aUl0ZW1Db25maXJtQWN0aW9uT3B0aW9ucz57XG4gICAgICAgIGNvbGxlY3Rpb246IHNlbGVjdGVkLFxuICAgICAgICBpbmRleDogJ21ldGFkYXRhLm5hbWUnLFxuICAgICAgICBvbkNsb3NlOiAocmVzdWx0OmJvb2xlYW4pID0+IHtcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBkZWxldGVTZWxlY3RlZChzZWxlY3RlZDpBcnJheTxLdWJlUG9kPiwgbmV4dDpLdWJlUG9kKSB7XG4gICAgICAgICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiZGVsZXRpbmc6IFwiLCBnZXROYW1lKG5leHQpKTtcbiAgICAgICAgICAgICAgICBLdWJlcm5ldGVzLnJlc2l6ZUNvbnRyb2xsZXIoJGh0dHAsIEt1YmVybmV0ZXNBcGlVUkwsIG5leHQsIDAsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgbG9nLmRlYnVnKFwidXBkYXRlZCBudW1iZXIgb2YgcmVwbGljYXNcIik7XG4gICAgICAgICAgICAgICAgICAgS3ViZXJuZXRlc1JlcGxpY2F0aW9uQ29udHJvbGxlcnMuZGVsZXRlKHtcbiAgICAgICAgICAgICAgICAgICAgIGlkOiBnZXROYW1lKG5leHQpXG4gICAgICAgICAgICAgICAgICAgfSwgdW5kZWZpbmVkLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICBsb2cuZGVidWcoXCJkZWxldGVkOiBcIiwgZ2V0TmFtZShuZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgICBpZihuZXh0Lm1ldGFkYXRhLmxhYmVscy5zdHlsZSA9PT0gXCJvcmFjbGVcIil7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImRlbGV0ZSBcIiArIG5leHQubWV0YWRhdGEubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBLdWJlcm5ldGVzLmNvbm5lY3RPcmFjbGUoJGh0dHAsICR0aW1lb3V0LCBcIi9jYW5jZWxPcmFjbGVDb25lY3Rpb25cIiwgXCJcIiwgZ2V0TmFtZShuZXh0KSwgMCk7XG4gICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XG4gICAgICAgICAgICAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICBsb2cuZGVidWcoXCJFcnJvciBkZWxldGluZzogXCIsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcbiAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvKkt1YmVybmV0ZXNSZXBsaWNhdGlvbkNvbnRyb2xsZXJzLmRlbGV0ZSh7XG4gICAgICAgICAgICAgICAgICBpZDogZ2V0TmFtZShuZXh0KVxuICAgICAgICAgICAgICAgIH0sIHVuZGVmaW5lZCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiZGVsZXRlZDogXCIsIGdldE5hbWUobmV4dCkpO1xuICAgICAgICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpO1xuICAgICAgICAgICAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiRXJyb3IgZGVsZXRpbmc6IFwiLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XG4gICAgICAgICAgICAgICAgfSk7Ki9cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdGl0bGU6ICfmmK/lkKbpnIDopoHliKDpmaRvcmFjbGXmnI3liqHvvJ8nLFxuICAgICAgICBhY3Rpb246ICfku6XkuIvnmoRvcmFjbGXmnI3liqHlsIbkvJrooqvliKDpmaQ6JyxcbiAgICAgICAgb2tUZXh0OiAn5Yig6ZmkJyxcbiAgICAgICAgb2tDbGFzczogJ2J0bi1kYW5nZXInLFxuICAgICAgICBjdXN0b206IFwi6K+l5pyN5Yqh5Yig6Zmk5ZCO5bCG5Lya5riF6Zmkb3JhY2xl5a+55bqU5pyN5Yqh55qE56uv5Y+j562J6LWE5rqQ5Y2g55So77yM5L2G5LiN5Yig6Zmk5pWw5o2u5paH5Lu277yM5piv5ZCm5Yig6Zmk77yM6K+356Gu6K6k77yBXCIsXG4gICAgICAgIGN1c3RvbUNsYXNzOiBcImFsZXJ0IGFsZXJ0LXdhcm5pbmdcIixcbiAgICAgICAgY2FuY2VsVGV4dDogXCLlj5bmtohcIlxuICAgICAgfSkub3BlbigpO1xuICAgIH1cblxuICAgICRzY29wZS5jcmVhdGVSQ3M9ICgpID0+IHtcbiAgICAgIHZhciB4aHI9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9ICgpID0+IHtcbiAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09IDQpIHsvLzTooajnpLrmlbDmja7lt7Lnu4/osIPnlKjlrozmiJBcbiAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PSAyMDApIHsvL0hUVFDnmoTnirbmgIHnoIFcbiAgICAgICAgICAgIHZhciBvYmo9SlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKG9iai5wYXRoKTtcbiAgICAgICAgICAgIHZhciBuYW1lID0gS3ViZXJuZXRlcy5nZXRSYW5kb21TdHJpbmcoOCk7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKG5hbWUgKyBcIj09PT09XCIgK3BvcnQpO1xuICAgICAgICAgICAgdmFyIG9iamVjdCA9IHtcbiAgICAgICAgICAgICAgIFwibmFtZVwiOiBuYW1lLFxuICAgICAgICAgICAgICAgXCJsYWJlbHNcIjoge1xuICAgICAgICAgICAgICAgICAgXCJuYW1lXCIgOiBuYW1lXG4gICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgXCJwYXRoXCI6IG9iai5wYXRoLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgS3ViZXJuZXRlcy5jcmVhdGVSQyhvYmplY3QsIChyYykgPT57XG4gICAgICAgICAgICAgICBLdWJlcm5ldGVzLmNvbm5lY3RPcmFjbGUoJGh0dHAsICR0aW1lb3V0LCBcIi9jb25uZWN0VG9PcmFjbGVcIiwgXCJcIiwgZ2V0TmFtZShyYyksIDApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfWVsc2UgaWYoeGhyLnN0YXR1cyA9PSA0MDMpe1xuICAgICAgICAgICAgIGFsZXJ0KFwi5Lik5qyh5Yib5bu6b3JhY2xl5pyN5Yqh5pe26Ze06Ze06ZqU6ZyA6KaB6LaF6L+HMeWIhumSnyFcIik7XG4gICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgeGhyLm9wZW4oXCJQT1NUXCIsIFwiL29yYWNsZUFwcFBhdGhcIiwgZmFsc2UpOy8v5LiO5pyN5Yqh5Zmo6L+e5o6l5bm25Y+R6YCBXG4gICAgICB4aHIuc2VuZChudWxsKTtcbiAgICB9XG5cbiAgICAkc2NvcGUuc3RvcFByb21wdCA9IChzZWxlY3RlZCkgPT57XG4gICAgICBpZiAoYW5ndWxhci5pc1N0cmluZyhzZWxlY3RlZCkpIHtcbiAgICAgICAgc2VsZWN0ZWQgPSBbe1xuICAgICAgICAgIGlkOiBzZWxlY3RlZFxuICAgICAgICB9XTtcbiAgICAgIH1cblxuICAgICAgVUkubXVsdGlJdGVtQ29uZmlybUFjdGlvbkRpYWxvZyg8VUkuTXVsdGlJdGVtQ29uZmlybUFjdGlvbk9wdGlvbnM+e1xuICAgICAgICBjb2xsZWN0aW9uOiBzZWxlY3RlZCxcbiAgICAgICAgaW5kZXg6ICdtZXRhZGF0YS5uYW1lJyxcbiAgICAgICAgb25DbG9zZTogKHJlc3VsdDpib29sZWFuKSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgZnVuY3Rpb24gc3RvcFNlbGVjdGVkKHNlbGVjdGVkOkFycmF5PEt1YmVQb2Q+LCBuZXh0Okt1YmVQb2QpIHtcbiAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgS3ViZXJuZXRlcy5yZXNpemVDb250cm9sbGVyKCRodHRwLCBLdWJlcm5ldGVzQXBpVVJMLCBuZXh0LCAwLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgIGlmKG5leHQubWV0YWRhdGEubGFiZWxzLnN0eWxlID09PSBcIm9yYWNsZVwiKXtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJzdG9wIFwiICsgbmV4dC5tZXRhZGF0YS5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgS3ViZXJuZXRlcy5jb25uZWN0T3JhY2xlKCRodHRwLCAkdGltZW91dCwgXCIvY2FuY2VsT3JhY2xlQ29uZWN0aW9uXCIsIFwiXCIsIGdldE5hbWUobmV4dCksIDApO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgIHN0b3BTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XG4gICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICB9XG4gICAgICAgICAgIH1cbiAgICAgICAgICAgc3RvcFNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcbiAgICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB0aXRsZTogJ+aYr+WQpumcgOimgeWBnOatom9yYWNsZeacjeWKoe+8nycsXG4gICAgICBhY3Rpb246ICfku6XkuIvnmoRvcmFjbGXmnI3liqHlsIbkvJrooqvlgZzmraI6JyxcbiAgICAgIG9rVGV4dDogJ+WBnOatoicsXG4gICAgICBva0NsYXNzOiAnYnRuLWRhbmdlcicsXG4gICAgICBjdXN0b206IFwi6K+l5pyN5Yqh5YGc5q2i5ZCO5bCG5peg5rOV57un57ut5o+Q5L6b6L+e5o6l6K6/6Zeu5pyN5Yqh77yM5L2G5Y+v6YCa6L+H5ZCv5Yqo5oyJ6ZKu6YeN5paw5ZCv5Yqo6K+l5pyN5Yqh5Lul6L+b6KGM6K6/6Zeu44CC5piv5ZCm5YGc5q2i77yM6K+356Gu6K6kXCIsXG4gICAgICBjdXN0b21DbGFzczogXCJhbGVydCBhbGVydC13YXJuaW5nXCIsXG4gICAgICBjYW5jZWxUZXh0OiBcIuWPlua2iFwiXG4gICAgfSkub3BlbigpO1xuICAgfVxuXG4gICAkc2NvcGUucmVTdGFydFByb21wdCA9IChzZWxlY3RlZCkgPT4ge1xuICAgICAgZnVuY3Rpb24gc3RhcnRTZWxlY3RlZChzZWxlY3RlZDpBcnJheTxLdWJlUG9kPiwgbmV4dDpLdWJlUG9kKXtcbiAgICAgICAgIGlmKG5leHQpe1xuICAgICAgICAgICAgaWYobmV4dC4kcmVwbGljYXMgPT09IDApXG4gICAgICAgICAgICAgICBLdWJlcm5ldGVzLnJlc2l6ZUNvbnRyb2xsZXIoJGh0dHAsIEt1YmVybmV0ZXNBcGlVUkwsIG5leHQsIDEsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcInJlc3RhcnQgXCIgKyBuZXh0Lm1ldGFkYXRhLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgIEt1YmVybmV0ZXMuY29ubmVjdE9yYWNsZSgkaHR0cCwgJHRpbWVvdXQsIFwiL2Nvbm5lY3RUb09yYWNsZVwiLCBcIlwiLCBnZXROYW1lKG5leHQpLCAwKTtcbiAgICAgICAgICAgICAgICAgICBzdGFydFNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcbiAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgfVxuICAgICAgfVxuICAgICAgc3RhcnRTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XG4gICB9XG5cbiAgfV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNJbnRlcmZhY2VzLnRzXCIvPlxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBzY2hlbWFTZXRSZXF1aXJlZChzY2hlbWEsIHByb3BlcnR5TmFtZSwgaXNSZXF1aXJlZCA9IHRydWUpIHtcbiAgICBpZiAoc2NoZW1hICYmIHByb3BlcnR5TmFtZSkge1xuICAgICAgdmFyIHJlcXVpcmVkID0gc2NoZW1hLnJlcXVpcmVkO1xuICAgICAgaWYgKGlzUmVxdWlyZWQpIHtcbiAgICAgICAgaWYgKCFyZXF1aXJlZCkge1xuICAgICAgICAgIHJlcXVpcmVkID0gW107XG4gICAgICAgICAgc2NoZW1hLnJlcXVpcmVkID0gcmVxdWlyZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFfLmNvbnRhaW5zKHJlcXVpcmVkLCBwcm9wZXJ0eU5hbWUpKSB7XG4gICAgICAgICAgcmVxdWlyZWQucHVzaChwcm9wZXJ0eU5hbWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocmVxdWlyZWQpIHtcbiAgICAgICAgICB2YXIgaWR4ID0gcmVxdWlyZWQuaW5kZXhPZihwcm9wZXJ0eU5hbWUpO1xuICAgICAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICAgICAgcmVxdWlyZWQuc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIGV4cG9ydCB2YXIgU2VjcmV0Q29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJTZWNyZXRDb250cm9sbGVyXCIsXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiS3ViZXJuZXRlc1NjaGVtYVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIiwgXCJLOFNDbGllbnRGYWN0b3J5XCIsXG4gICAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNTY2hlbWEsXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwsIEs4U0NsaWVudEZhY3RvcnkpID0+IHtcblxuICAgICAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAgICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xuICAgICAgICAkc2NvcGUuaWQgPSAkcm91dGVQYXJhbXNbXCJpZFwiXTtcblxuICAgICAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XG4gICAgICAgIHNlbGVjdFN1Yk5hdkJhcigkc2NvcGUsIFwiU2VjcmV0c1wiLCAkc2NvcGUuaWQgPyBcIkVkaXQgU2VjcmV0OiBcIiArICRzY29wZS5pZCA6IFwiQ3JlYXRlIFNlY3JldFwiKTtcblxuICAgICAgICB2YXIga3ViZUNsaWVudCA9IGNyZWF0ZUt1YmVybmV0ZXNDbGllbnQoXCJzZWNyZXRzXCIpO1xuXG4gICAgICAgIHZhciBvblNhdmVVcmwgPSAkbG9jYXRpb24uc2VhcmNoKClbXCJzYXZlZFVybFwiXTtcbiAgICAgICAgdmFyIGNyZWF0ZUtpbmQgPSAkbG9jYXRpb24uc2VhcmNoKClbXCJraW5kXCJdO1xuXG4gICAgICAgICRzY29wZS5zc2hLZXlzID0gc3NoU2VjcmV0RGF0YUtleXM7XG4gICAgICAgICRzY29wZS5odHRwc0tleXMgPSBodHRwc1NlY3JldERhdGFLZXlzO1xuXG4gICAgICAgIHZhciBzZWNyZXRMYWJlbHMgPSB7XG4gICAgICAgICAgXCJzc2gta2V5XCI6IFwiU1NIIHByaXZhdGUga2V5XCIsXG4gICAgICAgICAgXCJzc2gta2V5LnB1YlwiOiBcIlNTSCBwdWJsaWMga2V5XCIsXG4gICAgICAgICAgXCJjYS5jcnRcIjogXCJDQSBDZXJ0aWZpY2F0ZVwiLFxuICAgICAgICAgIFwiLmRvY2tlcmNmZ1wiOiBcIkRvY2tlciBjb25maWdcIixcbiAgICAgICAgICBcInVzZXJuYW1lXCI6IFwiVXNlciBuYW1lXCJcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHNlY3JldFRvb2x0aXBzID0ge1xuICAgICAgICAgIFwic3NoLWtleVwiOiBcIlNTSCBwcml2YXRlIGtleSB0ZXh0IGNvbnRlbnRzXCIsXG4gICAgICAgICAgXCJjYS5jcnRcIjogXCJDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgKENBKSBDZXJ0aWZpY2F0ZVwiLFxuICAgICAgICAgIFwiLmRvY2tlcmNmZ1wiOiBcIkRvY2tlciBjb25maWd1cmF0aW9uIHRva2VuXCJcbiAgICAgICAgfTtcblxuXG4gICAgICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKCRzY29wZS5pZCAmJiAhJHNjb3BlLnNlY3JldCkge1xuICAgICAgICAgICAgdXBkYXRlRGF0YSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgJHNjb3BlLiRvbignJHJvdXRlVXBkYXRlJywgKCRldmVudCkgPT4ge1xuICAgICAgICAgIHVwZGF0ZURhdGEoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJHNjb3BlLnByb3BlcnR5S2V5cyA9ICgpID0+IHtcbiAgICAgICAgICByZXR1cm4gXy5rZXlzKHNlY3JldExhYmVscyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgJHNjb3BlLmNoZWNrTmFtZVVuaXF1ZSA9ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgIHZhciBhbnN3ZXIgPSB0cnVlO1xuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaCgkc2NvcGUubW9kZWwuc2VjcmV0cywgKHNlY3JldCkgPT4ge1xuICAgICAgICAgICAgdmFyIG5hbWUgPSBnZXROYW1lKHNlY3JldCk7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IG5hbWUpIHtcbiAgICAgICAgICAgICAgYW5zd2VyID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIGFuc3dlcjtcbiAgICAgICAgfTtcblxuICAgICAgICAkc2NvcGUuY2hlY2tGaWVsZFVuaXF1ZSA9IChrZXkpID0+IHtcbiAgICAgICAgICByZXR1cm4gJHNjb3BlLmVudGl0eS5wcm9wZXJ0aWVzW2tleV0gPyBmYWxzZSA6IHRydWU7XG4gICAgICAgIH07XG5cbiAgICAgICAgJHNjb3BlLmhhc0FsbEtleXMgPSAoa2V5cykgPT4ge1xuICAgICAgICAgIHZhciBhbnN3ZXIgPSBrZXlzICYmIGtleXMubGVuZ3RoO1xuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChrZXlzLCAoa2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoISRzY29wZS5lbnRpdHkucHJvcGVydGllc1trZXldKSB7XG4gICAgICAgICAgICAgIGFuc3dlciA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBhbnN3ZXI7XG4gICAgICAgIH07XG5cbiAgICAgICAgJHNjb3BlLmFkZEZpZWxkRGlhbG9nID0ge1xuICAgICAgICAgIGNvbnRyb2xsZXI6IG51bGwsXG4gICAgICAgICAgbmV3UmVwbGljYXM6IDAsXG4gICAgICAgICAgZGlhbG9nOiBuZXcgVUkuRGlhbG9nKCksXG4gICAgICAgICAgb25PazogKCkgPT4ge1xuICAgICAgICAgICAgJHNjb3BlLmFkZEZpZWxkRGlhbG9nLmRpYWxvZy5jbG9zZSgpO1xuICAgICAgICAgICAgJHNjb3BlLmFkZERhdGFGaWVsZCgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgb3BlbjogKGNvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgICAgIHZhciBhZGRGaWVsZERpYWxvZyA9ICRzY29wZS5hZGRGaWVsZERpYWxvZztcbiAgICAgICAgICAgIGFkZEZpZWxkRGlhbG9nLmRpYWxvZy5vcGVuKCk7XG5cbiAgICAgICAgICAgICR0aW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgJCgnI25ld0RhdGFOYW1lJykuZm9jdXMoKTtcbiAgICAgICAgICAgIH0sIDUwKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNsb3NlOiAoKSA9PiB7XG4gICAgICAgICAgICAkc2NvcGUuYWRkRmllbGREaWFsb2cuZGlhbG9nLmNsb3NlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG5cblxuICAgICAgICAkc2NvcGUuZW50aXR5Q2hhbmdlZCA9ICgpID0+IHtcbiAgICAgICAgICAkc2NvcGUuY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH07XG5cbiAgICAgICAgJHNjb3BlLmFkZEZpZWxkcyA9IChrZXlzKSA9PiB7XG4gICAgICAgICAgYW5ndWxhci5mb3JFYWNoKGtleXMsIChrZXkpID0+IGFkZEZpZWxkKGtleSkpO1xuICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gYWRkRmllbGQoa2V5KSB7XG4gICAgICAgICAgdmFyIHByb3BlcnR5ID0gY3JlYXRlUHJvcGVydHkoa2V5LCBcIlwiKTtcbiAgICAgICAgICAkc2NvcGUuZW50aXR5LnByb3BlcnRpZXNba2V5XSA9IHByb3BlcnR5O1xuICAgICAgICAgICRzY29wZS5lbnRpdHkubmV3RGF0YUtleSA9IFwiXCI7XG4gICAgICAgICAgJHNjb3BlLnNob3dBZGREYXRhRmllbGRGb3JtID0gZmFsc2U7XG4gICAgICAgICAgJHNjb3BlLmVudGl0eUNoYW5nZWQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgICRzY29wZS5hZGREYXRhRmllbGQgPSAoKSA9PiB7XG4gICAgICAgICAgdmFyIGtleSA9ICRzY29wZS5lbnRpdHkubmV3RGF0YUtleTtcbiAgICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBhZGRGaWVsZChrZXkpO1xuICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgJHNjb3BlLmRlbGV0ZVByb3BlcnR5ID0gKGtleSkgPT4ge1xuICAgICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgIGRlbGV0ZSAkc2NvcGUuZW50aXR5LnByb3BlcnRpZXNba2V5XTtcbiAgICAgICAgICAgICRzY29wZS5lbnRpdHlDaGFuZ2VkKCk7XG4gICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAkc2NvcGUuY2FuY2VsID0gKCkgPT4ge1xuICAgICAgICAgIHVwZGF0ZURhdGEoKTtcbiAgICAgICAgfTtcblxuICAgICAgICAkc2NvcGUuc2F2ZSA9ICgpID0+IHtcbiAgICAgICAgICB2YXIgZW50aXR5ID0gJHNjb3BlLmVudGl0eSB8fCB7fTtcbiAgICAgICAgICB2YXIgbmFtZSA9IGVudGl0eS5uYW1lO1xuICAgICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgICBpZiAoISRzY29wZS5zZWNyZXQpIHtcbiAgICAgICAgICAgICAgJHNjb3BlLnNlY3JldCA9IHtcbiAgICAgICAgICAgICAgICBhcGlWZXJzaW9uOiBLdWJlcm5ldGVzLmRlZmF1bHRBcGlWZXJzaW9uLFxuICAgICAgICAgICAgICAgIGtpbmQ6IFwiU2VjcmV0XCIsXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6IFwiXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGRhdGE6IHt9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBkYXRhID0ge307XG4gICAgICAgICAgICBhbmd1bGFyLmZvckVhY2goZW50aXR5LnByb3BlcnRpZXMsIChwcm9wZXJ0eSkgPT4ge1xuICAgICAgICAgICAgICB2YXIga2V5ID0gcHJvcGVydHkua2V5O1xuICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBwcm9wZXJ0eS52YWx1ZSB8fCBcIlwiO1xuICAgICAgICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgZGF0YVtrZXldID0gd2luZG93LmJ0b2EodmFsdWUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICRzY29wZS5zZWNyZXQubWV0YWRhdGEubmFtZSA9IG5hbWU7XG4gICAgICAgICAgICAkc2NvcGUuc2VjcmV0LmRhdGEgPSBkYXRhO1xuXG4gICAgICAgICAgICBDb3JlLm5vdGlmaWNhdGlvbignaW5mbycsIFwiU2F2aW5nIHNlY3JldCBcIiArIG5hbWUpO1xuXG4gICAgICAgICAgICBrdWJlQ2xpZW50LnB1dCgkc2NvcGUuc2VjcmV0LFxuICAgICAgICAgICAgICAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBzZWNyZXRzTGluayA9IG9uU2F2ZVVybCB8fCBEZXZlbG9wZXIubmFtZXNwYWNlTGluaygkc2NvcGUsICRyb3V0ZVBhcmFtcywgXCJzZWNyZXRzXCIpO1xuICAgICAgICAgICAgICAgIHZhciBwYXJhbXMgPSB7fTtcbiAgICAgICAgICAgICAgICBpZiAob25TYXZlVXJsKSB7XG4gICAgICAgICAgICAgICAgICBwYXJhbXNbJ3NlY3JldCddID0gbmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJGxvY2F0aW9uLnBhdGgoc2VjcmV0c0xpbmspO1xuICAgICAgICAgICAgICAgICRsb2NhdGlvbi5zZWFyY2gocGFyYW1zKTtcbiAgICAgICAgICAgICAgICBsb2cuaW5mbyhcIm5hdmlnYXRpbmcgdG8gVVJMOiBcIiArIHNlY3JldHNMaW5rICsgXCIgd2l0aCBwYXJhbXMgXCIgKyBhbmd1bGFyLnRvSnNvbigkbG9jYXRpb24uc2VhcmNoKCkpKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIENvcmUubm90aWZpY2F0aW9uKCdlcnJvcicsIFwiRmFpbGVkIHRvIHNlY3JldCBcIiArIG5hbWUgKyBcIlxcblwiICsgZXJyKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHVwZGF0ZURhdGEoKTtcblxuICAgICAgICBmdW5jdGlvbiBjcmVhdGVQcm9wZXJ0eShrZXksIHRleHQpIHtcbiAgICAgICAgICB2YXIgbGFiZWwgPSBzZWNyZXRMYWJlbHNba2V5XSB8fCBDb3JlLmh1bWFuaXplVmFsdWUoa2V5KTtcbiAgICAgICAgICB2YXIgdG9vbHRpcCA9IHNlY3JldFRvb2x0aXBzW2tleV0gfHwgXCJWYWx1ZSBvZiB0aGUgXCIgKyBsYWJlbDtcblxuICAgICAgICAgIHZhciByb3dzID0gNTtcbiAgICAgICAgICB2YXIgbGluZXMgPSB0ZXh0LnNwbGl0KFwiXFxuXCIpLmxlbmd0aCArIDE7XG4gICAgICAgICAgaWYgKGxpbmVzID4gcm93cykge1xuICAgICAgICAgICAgcm93cyA9IGxpbmVzO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgdHlwZSA9IFwidGV4dGFyZWFcIjtcbiAgICAgICAgICBpZiAoa2V5ID09PSBcInVzZXJuYW1lXCIpIHtcbiAgICAgICAgICAgIHR5cGUgPSBcInRleHRcIjtcbiAgICAgICAgICAgIGlmICghdGV4dCkge1xuICAgICAgICAgICAgICB0ZXh0ID0gY3VycmVudFVzZXJOYW1lKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09IFwicGFzc3dvcmRcIikge1xuICAgICAgICAgICAgdHlwZSA9IFwicGFzc3dvcmRcIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIHByb3BlcnR5ID0ge1xuICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICBsYWJlbDogbGFiZWwsXG4gICAgICAgICAgICB0b29sdGlwOiB0b29sdGlwLFxuICAgICAgICAgICAgcm93czogcm93cyxcbiAgICAgICAgICAgIHZhbHVlOiB0ZXh0LFxuICAgICAgICAgICAgdHlwZTogdHlwZVxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIHByb3BlcnR5O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcbiAgICAgICAgICAkc2NvcGUuaXRlbSA9IG51bGw7XG4gICAgICAgICAgJHNjb3BlLmNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgICAkc2NvcGUuZW50aXR5ID0ge1xuICAgICAgICAgICAgbmFtZTogJHNjb3BlLmlkLFxuICAgICAgICAgICAgcHJvcGVydGllczoge31cbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmICgkc2NvcGUuaWQpIHtcbiAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaCgkc2NvcGUubW9kZWwuc2VjcmV0cywgKHNlY3JldCkgPT4ge1xuICAgICAgICAgICAgICB2YXIgbmFtZSA9IGdldE5hbWUoc2VjcmV0KTtcbiAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICRzY29wZS5pZCkge1xuICAgICAgICAgICAgICAgICRzY29wZS5zZWNyZXQgPSBzZWNyZXQ7XG4gICAgICAgICAgICAgICAgYW5ndWxhci5mb3JFYWNoKHNlY3JldC5kYXRhLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgdmFyIHRleHQgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgaWYgKGFuZ3VsYXIuaXNTdHJpbmcodmFsdWUpICYmIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSB3aW5kb3cuYXRvYih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB2YXIgcHJvcGVydHkgPSBjcmVhdGVQcm9wZXJ0eShrZXksIHRleHQpO1xuICAgICAgICAgICAgICAgICAgJHNjb3BlLmVudGl0eS5wcm9wZXJ0aWVzW2tleV0gPSBwcm9wZXJ0eTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChjcmVhdGVLaW5kID09PSBcInNzaFwiKSB7XG4gICAgICAgICAgICAgICRzY29wZS5hZGRGaWVsZHMoJHNjb3BlLnNzaEtleXMpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjcmVhdGVLaW5kID09PSBcImh0dHBzXCIpIHtcbiAgICAgICAgICAgICAgJHNjb3BlLmFkZEZpZWxkcygkc2NvcGUuaHR0cHNLZXlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICRzY29wZS5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XSk7XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzTW9kZWwudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwidXRpbEhlbHBlcnMudHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblxuICBleHBvcnQgdmFyIFNlY3JldHNDb250cm9sbGVyID0gY29udHJvbGxlcihcIlNlY3JldHNDb250cm9sbGVyXCIsIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIlNlcnZpY2VSZWdpc3RyeVwiLCBcIiRkaWFsb2dcIiwgXCIkd2luZG93XCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkbG9jYXRpb25cIiwgXCJsb2NhbFN0b3JhZ2VcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLFxuICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDogS3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsIFNlcnZpY2VSZWdpc3RyeSwgJGRpYWxvZywgJHdpbmRvdywgJHRlbXBsYXRlQ2FjaGUsICRyb3V0ZVBhcmFtcywgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsIGxvY2FsU3RvcmFnZSwgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XG5cbiAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XG4gICAgJHNjb3BlLiRvbigna3ViZXJuZXRlc01vZGVsVXBkYXRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgfSk7XG5cbiAgICAkc2NvcGUuJGNyZWF0ZVNlY3JldExpbmsgPSBEZXZlbG9wZXIubmFtZXNwYWNlTGluaygkc2NvcGUsICRyb3V0ZVBhcmFtcywgXCJzZWNyZXRDcmVhdGVcIik7XG5cbiAgICB2YXIga3ViZUNsaWVudCA9IGNyZWF0ZUt1YmVybmV0ZXNDbGllbnQoXCJzZWNyZXRzXCIpO1xuXG4gICAgJHNjb3BlLnRhYmxlQ29uZmlnID0ge1xuICAgICAgZGF0YTogJ21vZGVsLnNlY3JldHMnLFxuICAgICAgc2hvd1NlbGVjdGlvbkNoZWNrYm94OiB0cnVlLFxuICAgICAgZW5hYmxlUm93Q2xpY2tTZWxlY3Rpb246IGZhbHNlLFxuICAgICAgbXVsdGlTZWxlY3Q6IHRydWUsXG4gICAgICBzZWxlY3RlZEl0ZW1zOiBbXSxcbiAgICAgIGZpbHRlck9wdGlvbnM6IHtcbiAgICAgICAgZmlsdGVyVGV4dDogJGxvY2F0aW9uLnNlYXJjaCgpW1wicVwiXSB8fCAnJ1xuICAgICAgfSxcbiAgICAgIGNvbHVtbkRlZnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpZWxkOiAnX2tleScsXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdOYW1lJyxcbiAgICAgICAgICBkZWZhdWx0U29ydDogdHJ1ZSxcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImlkVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZmllbGQ6ICckbGFiZWxzVGV4dCcsXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdMYWJlbHMnLFxuICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwibGFiZWxUZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgIH0sXG4gICAgICBdXG4gICAgfTtcblxuICAgICRzY29wZS5kZWxldGVQcm9tcHQgPSAoc2VsZWN0ZWQpID0+IHtcbiAgICAgICBVSS5tdWx0aUl0ZW1Db25maXJtQWN0aW9uRGlhbG9nKDxVSS5NdWx0aUl0ZW1Db25maXJtQWN0aW9uT3B0aW9ucz57XG4gICAgICAgICBjb2xsZWN0aW9uOiBzZWxlY3RlZCxcbiAgICAgICAgIGluZGV4OiAnbWV0YWRhdGEubmFtZScsXG4gICAgICAgICBvbkNsb3NlOiAocmVzdWx0OmJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgIGZ1bmN0aW9uIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBuZXh0KSB7XG4gICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICBrdWJlQ2xpZW50LmRlbGV0ZShuZXh0LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpO1xuICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICAgICAgICAgLy8gdXBkYXRlRGF0YSgpO1xuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcbiAgICAgICAgICAgfVxuICAgICAgICAgfSxcbiAgICAgICAgIHRpdGxlOiAnRGVsZXRlIFNlY3JldHMnLFxuICAgICAgICAgYWN0aW9uOiAnVGhlIGZvbGxvd2luZyBTZWNyZXRzIHdpbGwgYmUgZGVsZXRlZDonLFxuICAgICAgICAgb2tUZXh0OiAnRGVsZXRlJyxcbiAgICAgICAgIG9rQ2xhc3M6ICdidG4tZGFuZ2VyJyxcbiAgICAgICAgIGN1c3RvbTogXCJUaGlzIG9wZXJhdGlvbiBpcyBwZXJtYW5lbnQgb25jZSBjb21wbGV0ZWQhXCIsXG4gICAgICAgICBjdXN0b21DbGFzczogXCJhbGVydCBhbGVydC13YXJuaW5nXCJcbiAgICAgICB9KS5vcGVuKCk7XG4gICAgIH07XG5cbiAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XG4gIH1dKTtcbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSGVscGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxuXG5tb2R1bGUgS3ViZXJuZXRlcyB7XG5cbiAgZXhwb3J0IHZhciBTZXJ2aWNlQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJTZXJ2aWNlQ29udHJvbGxlclwiLFxuICAgIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcbiAgICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDogS3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcblxuICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xuICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcbiAgICAkc2NvcGUucmF3TW9kZWwgPSBudWxsO1xuXG4gICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xuXG4gICAgJHNjb3BlLml0ZW1Db25maWcgPSB7XG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICdeXFxcXC9sYWJlbHMkJzoge1xuICAgICAgICAgIHRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoJ2xhYmVsVGVtcGxhdGUuaHRtbCcpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgJHNjb3BlLiRvbigna3ViZXJuZXRlc01vZGVsVXBkYXRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHVwZGF0ZURhdGEoKTtcbiAgICB9KTtcblxuICAgICRzY29wZS4kd2F0Y2goJ21vZGVsLnNlcnZpY2VzJywgKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgPT4ge1xuICAgICAgdXBkYXRlRGF0YSgpO1xuICAgIH0sIHRydWUpO1xuXG4gICAgJHNjb3BlLiRvbignJHJvdXRlVXBkYXRlJywgKCRldmVudCkgPT4ge1xuICAgICAgdXBkYXRlRGF0YSgpO1xuICAgIH0pO1xuXG4gICAgJHNjb3BlLmZsaXBSYXcgPSAoKSA9PiB7XG4gICAgICAkc2NvcGUucmF3TW9kZSA9ICEkc2NvcGUucmF3TW9kZTtcbiAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgfTtcblxuICAgIHVwZGF0ZURhdGEoKTtcblxuICAgIGZ1bmN0aW9uIHVwZGF0ZURhdGEoKSB7XG4gICAgICAkc2NvcGUuaWQgPSAkcm91dGVQYXJhbXNbXCJpZFwiXTtcbiAgICAgICRzY29wZS5uYW1lc3BhY2UgPSAkcm91dGVQYXJhbXNbXCJuYW1lc3BhY2VcIl0gfHwgS3ViZXJuZXRlc1N0YXRlLnNlbGVjdGVkTmFtZXNwYWNlO1xuICAgICAgJHNjb3BlLml0ZW0gPSAkc2NvcGUubW9kZWwuZ2V0U2VydmljZSgkc2NvcGUubmFtZXNwYWNlLCAkc2NvcGUuaWQpO1xuICAgICAgaWYgKCRzY29wZS5pdGVtKSB7XG4gICAgICAgICRzY29wZS5yYXdNb2RlbCA9IHRvUmF3WWFtbCgkc2NvcGUuaXRlbSk7XG4gICAgICB9XG4gICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgIH1cbiAgfV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblxuICBleHBvcnQgdmFyIFNlcnZpY2VFZGl0Q29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJTZXJ2aWNlRWRpdENvbnRyb2xsZXJcIixcbiAgICBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCJLdWJlcm5ldGVzU2NoZW1hXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLCBcIlNjaGVtYVJlZ2lzdHJ5XCIsXG4gICAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6IEt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLFxuICAgICAgICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMLCBzY2hlbWFzOkhhd3Rpb0Zvcm1zLlNjaGVtYVJlZ2lzdHJ5KSA9PiB7XG5cbiAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XG4gICAgJHNjb3BlLmlkID0gJHJvdXRlUGFyYW1zW1wiaWRcIl07XG4gICAgJHNjb3BlLnNjaGVtYSA9IEt1YmVybmV0ZXNTY2hlbWE7XG4gICAgJHNjb3BlLmNvbmZpZyA9IHNjaGVtYXMuY2xvbmVTY2hlbWEoXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlcnZpY2VcIik7XG4gICAgLy8kc2NvcGUuY29uZmlnID0gS3ViZXJuZXRlc1NjaGVtYS5kZWZpbml0aW9ucy5rdWJlcm5ldGVzX3YxYmV0YTJfU2VydmljZTtcblxuICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcblxuICAgICRzY29wZS4kb24oJyRyb3V0ZVVwZGF0ZScsICgkZXZlbnQpID0+IHtcbiAgICAgIHVwZGF0ZURhdGEoKTtcbiAgICB9KTtcblxuICAgIHVwZGF0ZURhdGEoKTtcblxuICAgIGZ1bmN0aW9uIHVwZGF0ZURhdGEoKSB7XG4gICAgICBpZiAoJHNjb3BlLmlkKSB7XG4gICAgICAgICRzY29wZS5lbnRpdHkgPSAkc2NvcGUubW9kZWwuZ2V0U2VydmljZShLdWJlcm5ldGVzU3RhdGUuc2VsZWN0ZWROYW1lc3BhY2UsICRzY29wZS5pZCk7XG4gICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICRzY29wZS5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICRzY29wZS5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1dKTtcbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSGVscGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNNb2RlbC50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIF9tb2R1bGUuZmFjdG9yeSgnU2VydmljZVJlZ2lzdHJ5JywgWygpID0+IHtcbiAgICByZXR1cm4gbmV3IFNlcnZpY2VSZWdpc3RyeVNlcnZpY2UoKTtcbiAgfV0pO1xuXG4gIC8qKlxuICAgKiBSZXByZXNlbnRzIGEgc2ltcGxlIGludGVyZmFjZSB0byBzZXJ2aWNlIGRpc2NvdmVyeSB0aGF0IGNhbiBiZSB1c2VkIGVhcmx5IG9uIGluIHRoZSBhcHBsaWNhdGlvbiBsaWZlY3ljbGUgYmVmb3JlIHRoZVxuICAgKiB1bmRlcmx5aW5nIG1vZGVsIGhhcyBiZWVuIGNyZWF0ZWQgdmlhIGRlcGVuZGVuY3kgaW5qZWN0aW9uXG4gICAqL1xuICBleHBvcnQgY2xhc3MgU2VydmljZVJlZ2lzdHJ5U2VydmljZSB7XG4gICAgcHJpdmF0ZSBtb2RlbDpLdWJlcm5ldGVzTW9kZWxTZXJ2aWNlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBpcyBhIHNlcnZpY2UgYXZhaWxhYmxlIGZvciB0aGUgZ2l2ZW4gSUQgb3IgZmFsc2VcbiAgICAgKi9cbiAgICBwdWJsaWMgaGFzU2VydmljZShzZXJ2aWNlTmFtZTogc3RyaW5nKSB7XG4gICAgICByZXR1cm4gdGhpcy5maW5kU2VydmljZShzZXJ2aWNlTmFtZSkgPyB0cnVlIDogZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgc2VydmljZSBmb3IgdGhlIGdpdmVuIHNlcnZpY2UgbmFtZSAoSUQpIG9yIG51bGwgaWYgaXQgY2Fubm90IGJlIGZvdW5kXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2VydmljZU5hbWUgdGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UgdG8gbG9vayBmb3JcbiAgICAgKiBAcmV0dXJuIHtudWxsfVxuICAgICAqL1xuICAgIHB1YmxpYyBmaW5kU2VydmljZShzZXJ2aWNlTmFtZTogc3RyaW5nKSB7XG4gICAgICB2YXIgYW5zd2VyID0gbnVsbDtcbiAgICAgIGlmIChzZXJ2aWNlTmFtZSkge1xuICAgICAgICB2YXIgbW9kZWwgPSB0aGlzLmdldE1vZGVsKCk7XG4gICAgICAgIGlmIChtb2RlbCkge1xuICAgICAgICAgIHZhciBuYW1lc3BhY2UgPSBtb2RlbC5jdXJyZW50TmFtZXNwYWNlKCk7XG4gICAgICAgICAgcmV0dXJuIG1vZGVsLmdldFNlcnZpY2UobmFtZXNwYWNlICxzZXJ2aWNlTmFtZSk7XG4vKlxuICAgICAgICBUT0RPIGxldHMgb25seSBsb29rIGluIHRoZSBjdXJyZW50IG5hbWVzcGFjZVxuICAgICAgICBhbmd1bGFyLmZvckVhY2gobW9kZWwuc2VydmljZXMsIChzZXJ2aWNlKSA9PiB7XG4gICAgICAgICAgaWYgKHNlcnZpY2VOYW1lID09PSBnZXROYW1lKHNlcnZpY2UpKSB7XG4gICAgICAgICAgICBhbnN3ZXIgPSBzZXJ2aWNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4qL1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYW5zd2VyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHNlcnZpY2UgbGluayBmb3IgdGhlIGdpdmVuIHNlcnZpY2UgbmFtZVxuICAgICAqXG4gICAgICogQHBhcmFtIHNlcnZpY2VOYW1lIHRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlXG4gICAgICogQHJldHVybiB7bnVsbH1cbiAgICAgKi9cbiAgICBwdWJsaWMgc2VydmljZUxpbmsoc2VydmljZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICB2YXIgc2VydmljZSA9IHRoaXMuZmluZFNlcnZpY2Uoc2VydmljZU5hbWUpO1xuICAgICAgcmV0dXJuIHNlcnZpY2VMaW5rVXJsKHNlcnZpY2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHNlcnZpY2UgbGluayBmb3IgdGhlIGdpdmVuIHNlcnZpY2UgbmFtZSBpZiBpdHMgcmVhZHkgKGhhcyBhdCBsZWFzdCBvbmUgcmVhZHkgcG9kKVxuICAgICAqXG4gICAgICogQHBhcmFtIHNlcnZpY2VOYW1lIHRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlXG4gICAgICogQHJldHVybiB7bnVsbH1cbiAgICAgKi9cbiAgICBwdWJsaWMgc2VydmljZVJlYWR5TGluayhzZXJ2aWNlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgIHZhciBzZXJ2aWNlID0gdGhpcy5maW5kU2VydmljZShzZXJ2aWNlTmFtZSk7XG4gICAgICBpZiAocmVhZHlQb2RDb3VudChzZXJ2aWNlKSkge1xuICAgICAgICByZXR1cm4gc2VydmljZUxpbmtVcmwoc2VydmljZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE1vZGVsKCk6S3ViZXJuZXRlc01vZGVsU2VydmljZSB7XG4gICAgICB2YXIgYW5zd2VyID0gdGhpcy5tb2RlbDtcbiAgICAgIC8vIGxldHMgYWxsb3cgbGF6eSBsb2FkIHNvIHdlIGNhbiBiZSBpbnZva2VkIGJlZm9yZSB0aGUgaW5qZWN0b3IgaGFzIGJlZW4gY3JlYXRlZFxuICAgICAgaWYgKCFhbnN3ZXIpIHtcbiAgICAgICAgdmFyIGluamVjdG9yID0gSGF3dGlvQ29yZS5pbmplY3RvcjtcbiAgICAgICAgaWYgKGluamVjdG9yKSB7XG4gICAgICAgICAgdGhpcy5tb2RlbCA9IGluamVjdG9yLmdldDxLdWJlcm5ldGVzTW9kZWxTZXJ2aWNlPignS3ViZXJuZXRlc01vZGVsJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGFuc3dlciA9IHRoaXMubW9kZWw7XG4gICAgICByZXR1cm4gYW5zd2VyO1xuICAgIH1cbiAgfVxufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblxuICBleHBvcnQgdmFyIFNlcnZpY2VBcHBzID0gX21vZHVsZS5jb250cm9sbGVyKCdLdWJlcm5ldGVzLlNlcnZpY2VBcHBzJywgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsKSA9PiB7XG4gICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xuICB9KTtcblxuICBleHBvcnQgdmFyIFNlcnZpY2VzID0gY29udHJvbGxlcihcIlNlcnZpY2VzXCIsXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1NlcnZpY2VzXCIsIFwiS3ViZXJuZXRlc1BvZHNcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXG4gICAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6IEt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1NlcnZpY2VzOm5nLnJlc291cmNlLklSZXNvdXJjZUNsYXNzPGFueT4sIEt1YmVybmV0ZXNQb2RzOm5nLnJlc291cmNlLklSZXNvdXJjZUNsYXNzPGFueT4sIEt1YmVybmV0ZXNTdGF0ZSxcbiAgICAgICAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xuXG4gICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XG4gICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xuXG4gICAgQ29udHJvbGxlckhlbHBlcnMuYmluZE1vZGVsVG9TZWFyY2hQYXJhbSgkc2NvcGUsICRsb2NhdGlvbiwgJ21vZGUnLCAnbW9kZScsICdsaXN0Jyk7XG5cbiAgICAkc2NvcGUudGFibGVDb25maWcgPSB7XG4gICAgICBkYXRhOiAnbW9kZWwuc2VydmljZXMnLFxuICAgICAgc2hvd1NlbGVjdGlvbkNoZWNrYm94OiB0cnVlLFxuICAgICAgZW5hYmxlUm93Q2xpY2tTZWxlY3Rpb246IGZhbHNlLFxuICAgICAgbXVsdGlTZWxlY3Q6IHRydWUsXG4gICAgICBzZWxlY3RlZEl0ZW1zOiBbXSxcbiAgICAgIGZpbHRlck9wdGlvbnM6IHtcbiAgICAgICAgZmlsdGVyVGV4dDogJGxvY2F0aW9uLnNlYXJjaCgpW1wicVwiXSB8fCAnJ1xuICAgICAgfSxcbiAgICAgIGNvbHVtbkRlZnM6IFtcbiAgICAgICAgeyBmaWVsZDogJ19rZXknLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTmFtZScsXG4gICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJpZFRlbXBsYXRlLmh0bWxcIilcbiAgICAgICAgfSxcbiAgICAgICAgeyBmaWVsZDogJyRzZXJ2aWNlVXJsJyxcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ0FkZHJlc3MnLFxuICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwicG9ydGFsQWRkcmVzcy5odG1sXCIpXG4gICAgICAgIH0sXG4gICAgICAgIHsgZmllbGQ6ICckcG9kQ291bnQnLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnUG9kcycsXG4gICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJwb2RDb3VudHNBbmRMaW5rVGVtcGxhdGUuaHRtbFwiKSxcbiAgICAgICAgICBjdXN0b21Tb3J0RmllbGQ6IChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgLy8gbmVlZCB0byBjb25jYXQgYWxsIHRoZSBwb2QgY291bnRlcnNcbiAgICAgICAgICAgIHZhciByZWFkeSA9IGZpZWxkLiRwb2RDb3VudGVycy5yZWFkeSB8fCAwO1xuICAgICAgICAgICAgdmFyIHZhbGlkID0gZmllbGQuJHBvZENvdW50ZXJzLnZhbGlkIHx8IDA7XG4gICAgICAgICAgICB2YXIgd2FpdGluZyA9IGZpZWxkLiRwb2RDb3VudGVycy53YWl0aW5nIHx8IDA7XG4gICAgICAgICAgICB2YXIgZXJyb3IgPSBmaWVsZC4kcG9kQ291bnRlcnMuZXJyb3IgfHwgMDtcbiAgICAgICAgICAgIHJldHVybiByZWFkeSArIHZhbGlkICsgd2FpdGluZyArIGVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgeyBmaWVsZDogJyRzZWxlY3RvclRleHQnLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnU2VsZWN0b3InLFxuICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwic2VsZWN0b3JUZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgIH0sXG4gICAgICAgIHsgZmllbGQ6ICckbGFiZWxzVGV4dCcsXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdMYWJlbHMnLFxuICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwibGFiZWxUZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9O1xuXG4gICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xuXG4gICAgJHNjb3BlLmRlbGV0ZVByb21wdCA9IChzZWxlY3RlZCkgPT4ge1xuICAgICAgaWYgKGFuZ3VsYXIuaXNTdHJpbmcoc2VsZWN0ZWQpKSB7XG4gICAgICAgIHNlbGVjdGVkID0gW3tcbiAgICAgICAgICBpZDogc2VsZWN0ZWRcbiAgICAgICAgfV07XG4gICAgICB9XG4gICAgICBVSS5tdWx0aUl0ZW1Db25maXJtQWN0aW9uRGlhbG9nKDxVSS5NdWx0aUl0ZW1Db25maXJtQWN0aW9uT3B0aW9ucz57XG4gICAgICAgIGNvbGxlY3Rpb246IHNlbGVjdGVkLFxuICAgICAgICBpbmRleDogJ21ldGFkYXRhLm5hbWUnLFxuICAgICAgICBvbkNsb3NlOiAocmVzdWx0OmJvb2xlYW4pID0+IHtcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBkZWxldGVTZWxlY3RlZChzZWxlY3RlZDpBcnJheTxLdWJlUG9kPiwgbmV4dDpLdWJlUG9kKSB7XG4gICAgICAgICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiZGVsZXRpbmc6IFwiLCBnZXROYW1lKG5leHQpKTtcbiAgICAgICAgICAgICAgICBLdWJlcm5ldGVzU2VydmljZXMuZGVsZXRlKHtcbiAgICAgICAgICAgICAgICAgIGlkOiBnZXROYW1lKG5leHQpXG4gICAgICAgICAgICAgICAgfSwgdW5kZWZpbmVkLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBsb2cuZGVidWcoXCJkZWxldGVkOiBcIiwgZ2V0TmFtZShuZXh0KSk7XG4gICAgICAgICAgICAgICAgICBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XG4gICAgICAgICAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICBsb2cuZGVidWcoXCJFcnJvciBkZWxldGluZzogXCIsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdGl0bGU6ICdEZWxldGUgc2VydmljZXM/JyxcbiAgICAgICAgYWN0aW9uOiAnVGhlIGZvbGxvd2luZyBzZXJ2aWNlcyB3aWxsIGJlIGRlbGV0ZWQ6JyxcbiAgICAgICAgb2tUZXh0OiAnRGVsZXRlJyxcbiAgICAgICAgb2tDbGFzczogJ2J0bi1kYW5nZXInLFxuICAgICAgICBjdXN0b206IFwiVGhpcyBvcGVyYXRpb24gaXMgcGVybWFuZW50IG9uY2UgY29tcGxldGVkIVwiLFxuICAgICAgICBjdXN0b21DbGFzczogXCJhbGVydCBhbGVydC13YXJuaW5nXCJcbiAgICAgIH0pLm9wZW4oKTtcbiAgICB9O1xuXG4gIH1dKTtcbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSGVscGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxuXG5tb2R1bGUgS3ViZXJuZXRlcyB7XG5cbiAgLy8gY29udHJvbGxlciBmb3IgdGhlIHN0YXR1cyBpY29uIGNlbGxcbiAgZXhwb3J0IHZhciBQb2RTdGF0dXMgPSBjb250cm9sbGVyKFwiUG9kU3RhdHVzXCIsIFtcIiRzY29wZVwiLCAoJHNjb3BlKSA9PiB7XG4gICAgJHNjb3BlLnN0YXR1c01hcHBpbmcgPSAodGV4dCkgPT4ge1xuICAgICAgcmV0dXJuIHN0YXR1c1RleHRUb0Nzc0NsYXNzKHRleHQpO1xuICAgIH1cbiAgfV0pO1xuXG4gIF9tb2R1bGUuY29udHJvbGxlcihcIkt1YmVybmV0ZXMuVGVybUNvbnRyb2xsZXJcIiwgKCRzY29wZSwgVGVybWluYWxTZXJ2aWNlKSA9PiB7XG4gICAgJHNjb3BlLmNhbkNvbm5lY3RUbyA9IChjb250YWluZXIpID0+IHtcbiAgICAgIGlmIChjb250YWluZXIuc2VjdXJpdHlDb250ZXh0ICYmIGNvbnRhaW5lci5zZWN1cml0eUNvbnRleHQucHJpdmlsZWdlZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgJHNjb3BlLm9wZW5UZXJtaW5hbCA9IChzZWxmTGluaywgY29udGFpbmVyTmFtZSkgPT4ge1xuICAgICAgdmFyIGlkID0gVGVybWluYWxTZXJ2aWNlLm5ld1Rlcm1pbmFsKHNlbGZMaW5rLCBjb250YWluZXJOYW1lKTtcbiAgICAgIGxvZy5kZWJ1ZyhcIkNyZWF0ZWQgdGVybWluYWwsIGlkOiBcIiwgaWQpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gY29udHJvbGxlciB0aGF0IGRlYWxzIHdpdGggdGhlIGxhYmVscyBwZXIgcG9kXG4gIGV4cG9ydCB2YXIgTGFiZWxzID0gY29udHJvbGxlcihcIkxhYmVsc1wiLCBbXCIkc2NvcGVcIiwgXCIkbG9jYXRpb25cIiwgKCRzY29wZSwgJGxvY2F0aW9uKSA9PiB7XG4gICAgJHNjb3BlLmxhYmVscyA9IFtdO1xuICAgIHZhciBsYWJlbEtleVdlaWdodHMgPSB7XG4gICAgICBcIm5hbWVcIjogMSxcbiAgICAgIFwicmVwbGljYXRpb25Db250cm9sbGVyXCI6IDIsXG4gICAgICBcImdyb3VwXCI6IDNcbiAgICB9O1xuICAgICRzY29wZS4kd2F0Y2goJ2VudGl0eScsIChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IHtcbiAgICAgIGlmIChuZXdWYWx1ZSkge1xuICAgICAgICAvLyBsb2cuZGVidWcoXCJsYWJlbHM6IFwiLCBuZXdWYWx1ZSk7XG4gICAgICAgIC8vIG1hc3NhZ2UgdGhlIGxhYmVscyBhIGJpdFxuICAgICAgICAkc2NvcGUubGFiZWxzID0gW107XG4gICAgICAgIGFuZ3VsYXIuZm9yRWFjaChDb3JlLnBhdGhHZXQoJHNjb3BlLmVudGl0eSwgW1wibWV0YWRhdGFcIiwgXCJsYWJlbHNcIl0pLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgIGlmIChrZXkgPT09ICdmYWJyaWM4JyB8fCBrZXkgPT09ICdzdHlsZScgfHwga2V5ID09PSAnc3RhdHVzJykge1xuICAgICAgICAgICAgLy8gVE9ETyBub3Qgc3VyZSB3aGF0IHRoaXMgaXMgZm9yLCB0aGUgY29udGFpbmVyIHR5cGU/XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgJHNjb3BlLmxhYmVscy5wdXNoKHtcbiAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgdGl0bGU6IHZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vICBsZXRzIHNvcnQgYnkga2V5IGJ1dCBsZXRzIG1ha2Ugc3VyZSB0aGF0IHdlIHdlaWdodCBjZXJ0YWluIGxhYmVscyBzbyB0aGV5IGFyZSBmaXJzdFxuICAgICAgICAkc2NvcGUubGFiZWxzID0gJHNjb3BlLmxhYmVscy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgZnVuY3Rpb24gZ2V0V2VpZ2h0KGtleSkge1xuICAgICAgICAgICAgcmV0dXJuIGxhYmVsS2V5V2VpZ2h0c1trZXldIHx8IDEwMDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBuMSA9IGFbXCJrZXlcIl07XG4gICAgICAgICAgdmFyIG4yID0gYltcImtleVwiXTtcbiAgICAgICAgICB2YXIgdzEgPSBnZXRXZWlnaHQobjEpO1xuICAgICAgICAgIHZhciB3MiA9IGdldFdlaWdodChuMik7XG4gICAgICAgICAgdmFyIGRpZmYgPSB3MSAtIHcyO1xuICAgICAgICAgIGlmIChkaWZmIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZGlmZiA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobjEgJiYgbjIpIHtcbiAgICAgICAgICAgIGlmIChuMSA+IG4yKSB7XG4gICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChuMSA8IG4yKSB7XG4gICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAobjEgPT09IG4yKSB7XG4gICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChuMSkge1xuICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgJHNjb3BlLmhhbmRsZUNsaWNrID0gKGVudGl0eSwgbGFiZWxUeXBlOnN0cmluZywgdmFsdWUpID0+IHtcbiAgICAgIC8vIGxvZy5kZWJ1ZyhcImhhbmRsZUNsaWNrLCBlbnRpdHk6IFwiLCBlbnRpdHksIFwiIGtleTogXCIsIGxhYmVsVHlwZSwgXCIgdmFsdWU6IFwiLCB2YWx1ZSk7XG4gICAgICAkc2NvcGUuJGVtaXQoJ2xhYmVsRmlsdGVyVXBkYXRlJywgdmFsdWUudGl0bGUpXG4gICAgfVxuXG4gICAgJHNjb3BlLmxhYmVsQ2xhc3MgPSBjb250YWluZXJMYWJlbENsYXNzO1xuICB9XSk7XG5cbiAgLy/mnI3liqHnirbmgIHov4fmu6RcbiAgZXhwb3J0IHZhciBTdGF0dXMgPSBjb250cm9sbGVyKCdTdGF0dXMnLCBbXCIkc2NvcGVcIiwgXCIkaHR0cFwiLCBcIiRpbnRlcnZhbFwiLCBcIiRsb2NhdGlvblwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIiwgKCRzY29wZSwgJGh0dHAsICRpbnRlcnZhbCwgJGxvY2F0aW9uLCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XG4gICAgICAkc2NvcGUuJHdhdGNoKCdlbnRpdHknLCAobmV3VmFsdWUsIG9sZFZhbHVlKSA9PiB7XG4gICAgICAgICAgaWYobmV3VmFsdWUpXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKG5ld1ZhbHVlKTtcbiAgICAgIH0sdHJ1ZSk7XG4gIH1dKTtcbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSGVscGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxuXG5tb2R1bGUgS3ViZXJuZXRlcyB7XG5cbiAgX21vZHVsZS5kaXJlY3RpdmUoXCJoYXd0aW9UYWJzXCIsIFsnSGF3dGlvU3ViVGFicycsIChIYXd0aW9TdWJUYWJzKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxpbms6IChzY29wZSwgZWxlbWVudCwgYXR0cnMpID0+IHtcbiAgICAgICAgSGF3dGlvU3ViVGFicy5hcHBseShzY29wZS4kZXZhbCgnc3ViVGFiQ29uZmlnJykpO1xuICAgICAgfVxuICAgIH07XG4gIH1dKTtcbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxuXG5tb2R1bGUgS3ViZXJuZXRlcyB7XG4gIGV4cG9ydCB2YXIgVGVtcGxhdGVDb250cm9sbGVyID0gY29udHJvbGxlcihcIlRlbXBsYXRlQ29udHJvbGxlclwiLCBbXG4gICAgXCIkc2NvcGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwibWFya2VkXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbW9kYWxcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXG4gICAgKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgbWFya2VkLCAkdGVtcGxhdGVDYWNoZSwgJG1vZGFsLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xuICAgIHZhciBtb2RlbCA9ICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcbiAgICAkc2NvcGUuZmlsdGVyVGV4dCA9ICRsb2NhdGlvbi5zZWFyY2goKVtcInFcIl07XG5cbiAgICAkc2NvcGUudGFyZ2V0TmFtZXNwYWNlID0gJHJvdXRlUGFyYW1zLnRhcmdldE5hbWVzcGFjZTtcbiAgICBpbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xuXG4gICAgJHNjb3BlLiR3YXRjaENvbGxlY3Rpb24oJ21vZGVsLm5hbWVzcGFjZXMnLCAoKSA9PiB7XG4gICAgICBpZiAoISRzY29wZS50YXJnZXROYW1lc3BhY2UpIHtcbiAgICAgICAgJHNjb3BlLnRhcmdldE5hbWVzcGFjZSA9IG1vZGVsLmN1cnJlbnROYW1lc3BhY2UoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciByZXR1cm5UbyA9IG5ldyBVUkkoJGxvY2F0aW9uLnNlYXJjaCgpWydyZXR1cm5UbyddIHx8ICcva3ViZXJuZXRlcy9hcHBzJyk7XG5cbiAgICBmdW5jdGlvbiBnb0JhY2soKSB7XG4gICAgICAkbG9jYXRpb24ucGF0aChyZXR1cm5Uby5wYXRoKCkpLnNlYXJjaChyZXR1cm5Uby5xdWVyeSh0cnVlKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0QW5ub3RhdGlvbnMob2JqKSB7XG4gICAgICByZXR1cm4gQ29yZS5wYXRoR2V0KG9iaiwgWydtZXRhZGF0YScsICdhbm5vdGF0aW9ucyddKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRWYWx1ZUZvcihvYmosIGtleSkge1xuICAgICAgdmFyIGFubm90YXRpb25zID0gZ2V0QW5ub3RhdGlvbnMob2JqKTtcbiAgICAgIGlmICghYW5ub3RhdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICB9XG4gICAgICB2YXIgbmFtZSA9IGdldE5hbWUob2JqKTtcbiAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgIHZhciBmdWxsS2V5ID0gXCJmYWJyaWM4LlwiICsgbmFtZSArIFwiL1wiICsga2V5O1xuICAgICAgICB2YXIgYW5zd2VyID0gYW5ub3RhdGlvbnNbZnVsbEtleV07XG4gICAgICAgIGlmIChhbnN3ZXIpIHtcbiAgICAgICAgICByZXR1cm4gYW5zd2VyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIga2V5OiBhbnkgPSBfLmZpbmQoXy5rZXlzKGFubm90YXRpb25zKSwgKGs6IHN0cmluZykgPT4gXy5lbmRzV2l0aChrLCBrZXkpKTtcbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgcmV0dXJuIGFubm90YXRpb25zW2tleV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAkc2NvcGUuY2FuY2VsID0gKCkgPT4ge1xuICAgICAgaWYgKCRzY29wZS5mb3JtQ29uZmlnKSB7XG4gICAgICAgIGRlbGV0ZSAkc2NvcGUuZm9ybUNvbmZpZztcbiAgICAgICAgZGVsZXRlICRzY29wZS5lbnRpdHk7XG4gICAgICAgICRzY29wZS5vYmplY3RzID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBnb0JhY2soKTtcbiAgICB9XG5cbiAgICAvKlxuICAgICRzY29wZS4kd2F0Y2goJ21vZGVsLnRlbXBsYXRlcy5sZW5ndGgnLCAobmV3VmFsdWUpID0+IHtcbiAgICAgIGlmIChuZXdWYWx1ZSA9PT0gMCkge1xuICAgICAgICBnb0JhY2soKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAqL1xuXG4gICAgJHNjb3BlLmZpbHRlclRlbXBsYXRlcyA9ICh0ZW1wbGF0ZSkgPT4ge1xuICAgICAgaWYgKENvcmUuaXNCbGFuaygkc2NvcGUuZmlsdGVyVGV4dCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gXy5jb250YWlucyhhbmd1bGFyLnRvSnNvbih0ZW1wbGF0ZSksICRzY29wZS5maWx0ZXJUZXh0LnRvTG93ZXJDYXNlKCkpO1xuICAgIH07XG5cbiAgICAkc2NvcGUub3BlbkZ1bGxEZXNjcmlwdGlvbiA9ICh0ZW1wbGF0ZSkgPT4ge1xuICAgICAgdmFyIHRleHQgPSBtYXJrZWQoZ2V0VmFsdWVGb3IodGVtcGxhdGUsICdkZXNjcmlwdGlvbicpIHx8ICdObyBkZXNjcmlwdGlvbicpO1xuICAgICAgdmFyIG1vZGFsID0gJG1vZGFsLm9wZW4oe1xuICAgICAgICB0ZW1wbGF0ZVVybDogVXJsSGVscGVycy5qb2luKHRlbXBsYXRlUGF0aCwgJ3RlbXBsYXRlRGVzY3JpcHRpb24uaHRtbCcpLFxuICAgICAgICBjb250cm9sbGVyOiBbJyRzY29wZScsICckbW9kYWxJbnN0YW5jZScsICgkc2NvcGUsICRtb2RhbEluc3RhbmNlKSA9PiB7XG4gICAgICAgICAgJHNjb3BlLnRleHQgPSB0ZXh0LFxuICAgICAgICAgICRzY29wZS5vayA9ICgpID0+IHtcbiAgICAgICAgICAgIG1vZGFsLmNsb3NlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgICRzY29wZS5nZXREZXNjcmlwdGlvbiA9ICh0ZW1wbGF0ZSkgPT4ge1xuICAgICAgdmFyIGFuc3dlcjphbnkgPSAkKG1hcmtlZChnZXRWYWx1ZUZvcih0ZW1wbGF0ZSwgJ2Rlc2NyaXB0aW9uJykgfHwgJ05vIGRlc2NyaXB0aW9uJykpO1xuICAgICAgdmFyIHRleHREZWZhdWx0ID0gYW5zd2VyLmh0bWwoKTtcbiAgICAgIHZhciBtYXhMZW5ndGggPSAyMDA7XG4gICAgICBpZiAodGV4dERlZmF1bHQubGVuZ3RoID4gbWF4TGVuZ3RoKSB7XG4gICAgICAgIHZhciB0cnVuY2F0ZWQgPSAkLnRyaW0odGV4dERlZmF1bHQpLnN1YnN0cmluZygwLCBtYXhMZW5ndGgpLnNwbGl0KCcgJykuc2xpY2UoMCwgLTEpLmpvaW4oJyAnKTtcbiAgICAgICAgYW5zd2VyLmh0bWwodHJ1bmNhdGVkICsgJy4uLicpO1xuICAgICAgICBhbnN3ZXIuYXBwZW5kKCR0ZW1wbGF0ZUNhY2hlLmdldCgndHJ1bmNhdGVkRGVzY3JpcHRpb25UYWcuaHRtbCcpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhbnN3ZXIuaHRtbCgpO1xuICAgIH07XG5cbiAgICAkc2NvcGUuZ2V0SWNvblVybCA9ICh0ZW1wbGF0ZSkgPT4ge1xuICAgICAgcmV0dXJuIGdldFZhbHVlRm9yKHRlbXBsYXRlLCAnaWNvblVybCcpIHx8IGRlZmF1bHRJY29uVXJsO1xuICAgIH07XG5cbiAgICAkc2NvcGUuZGVwbG95VGVtcGxhdGUgPSAodGVtcGxhdGUpID0+IHtcbiAgICAgIGxvZy5kZWJ1ZyhcIlRlbXBsYXRlIHBhcmFtZXRlcnM6IFwiLCB0ZW1wbGF0ZS5wYXJhbWV0ZXJzKTtcbiAgICAgIGxvZy5kZWJ1ZyhcIlRlbXBsYXRlIG9iamVjdHM6IFwiLCB0ZW1wbGF0ZS5vYmplY3RzKTtcbiAgICAgIGxvZy5kZWJ1ZyhcIlRlbXBsYXRlIGFubm90YXRpb25zOiBcIiwgdGVtcGxhdGUubWV0YWRhdGEuYW5ub3RhdGlvbnMpO1xuICAgICAgdmFyIHRlbXBsYXRlQW5ub3RhdGlvbnMgPSB0ZW1wbGF0ZS5tZXRhZGF0YS5hbm5vdGF0aW9ucztcbiAgICAgIGlmICh0ZW1wbGF0ZUFubm90YXRpb25zKSB7XG4gICAgICAgIF8uZm9yRWFjaCh0ZW1wbGF0ZS5vYmplY3RzLCAob2JqZWN0OmFueSkgPT4ge1xuICAgICAgICAgIHZhciBhbm5vdGF0aW9ucyA9IG9iamVjdC5tZXRhZGF0YS5hbm5vdGF0aW9ucyB8fCB7fTtcbiAgICAgICAgICB2YXIgbmFtZSA9IGdldE5hbWUob2JqZWN0KTtcbiAgICAgICAgICB2YXIgbWF0Y2hlcyA9IF8uZmlsdGVyKF8ua2V5cyh0ZW1wbGF0ZUFubm90YXRpb25zKSwgKGtleSkgPT4ga2V5Lm1hdGNoKCcuJyArIG5hbWUgKyAnLycpKTtcbiAgICAgICAgICBtYXRjaGVzLmZvckVhY2goKG1hdGNoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIShtYXRjaCBpbiBhbm5vdGF0aW9ucykpIHtcbiAgICAgICAgICAgICAgYW5ub3RhdGlvbnNbbWF0Y2hdID0gdGVtcGxhdGVBbm5vdGF0aW9uc1ttYXRjaF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgb2JqZWN0Lm1ldGFkYXRhLmFubm90YXRpb25zID0gYW5ub3RhdGlvbnM7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdmFyIHJvdXRlU2VydmljZU5hbWUgPSA8c3RyaW5nPiB1bmRlZmluZWQ7XG4gICAgICB2YXIgc2VydmljZSA9IF8uZmluZCh0ZW1wbGF0ZS5vYmplY3RzLCAob2JqKSA9PiB7XG4gICAgICAgIGlmIChnZXRLaW5kKG9iaikgPT09IFwiU2VydmljZVwiKSB7XG4gICAgICAgICAgdmFyIHBvcnRzID0gZ2V0UG9ydHMob2JqKTtcbiAgICAgICAgICBpZiAocG9ydHMgJiYgcG9ydHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChzZXJ2aWNlKSB7XG4gICAgICAgIHJvdXRlU2VydmljZU5hbWUgPSBnZXROYW1lKHNlcnZpY2UpO1xuICAgICAgfVxuICAgICAgbG9nLmRlYnVnKFwiU2VydmljZTogXCIsIHNlcnZpY2UpO1xuICAgICAgaWYgKCghcm91dGVTZXJ2aWNlTmFtZSB8fCAhaXNPcGVuU2hpZnQpICYmICghdGVtcGxhdGUucGFyYW1ldGVycyB8fCB0ZW1wbGF0ZS5wYXJhbWV0ZXJzLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgICAgbG9nLmRlYnVnKFwiTm8gcGFyYW1ldGVycyByZXF1aXJlZCwgZGVwbG95aW5nIG9iamVjdHNcIik7XG4gICAgICAgIGFwcGx5T2JqZWN0cyh0ZW1wbGF0ZS5vYmplY3RzKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIGZvcm1Db25maWcgPSB7XG4gICAgICAgIHN0eWxlOiBIYXd0aW9Gb3Jtcy5Gb3JtU3R5bGUuU1RBTkRBUkQsXG4gICAgICAgIGhpZGVMZWdlbmQ6IHRydWUsXG4gICAgICAgIHByb3BlcnRpZXM6IDxhbnk+IHt9XG4gICAgICB9O1xuICAgICAgdmFyIHBhcmFtcyA9IHRlbXBsYXRlLnBhcmFtZXRlcnM7XG4gICAgICBfLmZvckVhY2gocGFyYW1zLCAocGFyYW06YW55KSA9PiB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IDxhbnk+IHt9O1xuICAgICAgICBwcm9wZXJ0eS5sYWJlbCA9IF8uc3RhcnRDYXNlKHBhcmFtLm5hbWUpO1xuICAgICAgICBwcm9wZXJ0eS5kZXNjcmlwdGlvbiA9IHBhcmFtLmRlc2NyaXB0aW9uO1xuICAgICAgICBwcm9wZXJ0eS5kZWZhdWx0ID0gcGFyYW0udmFsdWU7XG4gICAgICAgIC8vIFRPRE8sIGRvIHBhcmFtZXRlcnMgc3VwcG9ydCB0eXBlcz9cbiAgICAgICAgcHJvcGVydHkudHlwZSA9ICdzdHJpbmcnO1xuICAgICAgICBmb3JtQ29uZmlnLnByb3BlcnRpZXNbcGFyYW0ubmFtZV0gPSBwcm9wZXJ0eTtcbiAgICAgIH0pO1xuICAgICAgaWYgKHJvdXRlU2VydmljZU5hbWUgJiYgaXNPcGVuU2hpZnQpIHtcbiAgICAgICAgZm9ybUNvbmZpZy5wcm9wZXJ0aWVzLmNyZWF0ZVJvdXRlID0ge1xuICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICAgIGxhYmVsOiBcIkNyZWF0ZSBSb3V0ZVwiXG4gICAgICAgIH07XG4vKlxuICAgICAgICBmb3JtQ29uZmlnLnByb3BlcnRpZXMucm91dGVOYW1lID0ge1xuICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIGxhYmVsOiAnUm91dGUgTmFtZScsXG4gICAgICAgICAgZGVmYXVsdDogcm91dGVTZXJ2aWNlTmFtZSxcbiAgICAgICAgICAnY29udHJvbC1ncm91cC1hdHRyaWJ1dGVzJzoge1xuICAgICAgICAgICAgJ25nLXNob3cnOiAnZW50aXR5LmNyZWF0ZVJvdXRlJ1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiovXG4gICAgICAgIGZvcm1Db25maWcucHJvcGVydGllcy5yb3V0ZVNlcnZpY2VOYW1lID0ge1xuICAgICAgICAgIHR5cGU6ICdoaWRkZW4nLFxuICAgICAgICAgIGRlZmF1bHQ6IHJvdXRlU2VydmljZU5hbWVcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBuYW1lc3BhY2UgPSBjdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xuICAgICAgICAvLyBUT0RPIHN0b3JlIHRoaXMgaW4gbG9jYWxTdG9yYWdlIVxuICAgICAgICB2YXIgZG9tYWluID0gXCJ2YWdyYW50LmY4XCI7XG4gICAgICAgIHZhciBkZWZhdWx0Um91dGVIb3N0U3VmZml4ID0gJy4nICsgKG5hbWVzcGFjZSA9PT0gXCJkZWZhdWx0XCIgPyBcIlwiIDogbmFtZXNwYWNlICsgXCIuXCIpICsgZG9tYWluO1xuICAgICAgICBmb3JtQ29uZmlnLnByb3BlcnRpZXMucm91dGVIb3N0bmFtZSA9IHtcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICBkZWZhdWx0OiBkZWZhdWx0Um91dGVIb3N0U3VmZml4LFxuICAgICAgICAgIGxhYmVsOiBcIlJvdXRlIGhvc3QgbmFtZSBzdWZmaXhcIixcbiAgICAgICAgICAnY29udHJvbC1ncm91cC1hdHRyaWJ1dGVzJzoge1xuICAgICAgICAgICAgJ25nLXNob3cnOiAnZW50aXR5LmNyZWF0ZVJvdXRlJ1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgICRzY29wZS5lbnRpdHkgPSA8YW55PiB7fTtcbiAgICAgICRzY29wZS5mb3JtQ29uZmlnID0gZm9ybUNvbmZpZztcbiAgICAgICRzY29wZS5vYmplY3RzID0gdGVtcGxhdGUub2JqZWN0cztcbiAgICAgIGxvZy5kZWJ1ZyhcIkZvcm0gY29uZmlnOiBcIiwgZm9ybUNvbmZpZyk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHN1YnN0aXR1dGUoc3RyLCBkYXRhKSB7XG4gICAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1xcJHtcXHcqfS9nLCAobWF0Y2gpID0+IHtcbiAgICAgICAgdmFyIGtleSA9IG1hdGNoLnJlcGxhY2UoL1xcJHsvLCAnJykucmVwbGFjZSgvfS8sICcnKS50cmltKCk7XG4gICAgICAgIHJldHVybiBkYXRhW2tleV0gfHwgbWF0Y2g7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgJHNjb3BlLnN1YnN0aXR1dGVBbmREZXBsb3lUZW1wbGF0ZSA9ICgpID0+IHtcbiAgICAgIHZhciBvYmplY3RzID0gJHNjb3BlLm9iamVjdHM7XG4gICAgICB2YXIgb2JqZWN0c1RleHQgPSBhbmd1bGFyLnRvSnNvbihvYmplY3RzLCB0cnVlKTtcbiAgICAgIC8vIHB1bGwgdGhlc2Ugb3V0IG9mIHRoZSBlbnRpdHkgb2JqZWN0IHNvIHRoZXkncmUgbm90IHVzZWQgaW4gc3Vic3RpdHV0aW9uc1xuICAgICAgdmFyIGNyZWF0ZVJvdXRlID0gJHNjb3BlLmVudGl0eS5jcmVhdGVSb3V0ZTtcbiAgICAgIHZhciByb3V0ZUhvc3RuYW1lU3VmZml4ID0gJHNjb3BlLmVudGl0eS5yb3V0ZUhvc3RuYW1lIHx8IFwiXCI7XG4gICAgICB2YXIgcm91dGVOYW1lID0gJHNjb3BlLmVudGl0eS5yb3V0ZU5hbWU7XG4gICAgICB2YXIgcm91dGVTZXJ2aWNlTmFtZSA9ICRzY29wZS5lbnRpdHkucm91dGVTZXJ2aWNlTmFtZTtcbiAgICAgIGRlbGV0ZSAkc2NvcGUuZW50aXR5LmNyZWF0ZVJvdXRlO1xuICAgICAgZGVsZXRlICRzY29wZS5lbnRpdHkucm91dGVIb3N0bmFtZTtcbiAgICAgIGRlbGV0ZSAkc2NvcGUuZW50aXR5LnJvdXRlTmFtZTtcbiAgICAgIGRlbGV0ZSAkc2NvcGUuZW50aXR5LnJvdXRlU2VydmljZU5hbWU7XG4gICAgICBvYmplY3RzVGV4dCA9IHN1YnN0aXR1dGUob2JqZWN0c1RleHQsICRzY29wZS5lbnRpdHkpO1xuICAgICAgb2JqZWN0cyA9IGFuZ3VsYXIuZnJvbUpzb24ob2JqZWN0c1RleHQpO1xuICAgICAgaWYgKGNyZWF0ZVJvdXRlKSB7XG4gICAgICAgIHZhciByb3V0ZXMgPSBbXTtcbiAgICAgICAgYW5ndWxhci5mb3JFYWNoKG9iamVjdHMsIChvYmplY3QpID0+IHtcbiAgICAgICAgICB2YXIga2luZCA9IG9iamVjdC5raW5kO1xuICAgICAgICAgIHZhciBuYW1lID0gZ2V0TmFtZShvYmplY3QpO1xuICAgICAgICAgIGlmIChuYW1lICYmIFwiU2VydmljZVwiID09PSBraW5kKSB7XG4gICAgICAgICAgICB2YXIgcm91dGVIb3N0bmFtZSA9IG5hbWUgKyByb3V0ZUhvc3RuYW1lU3VmZml4O1xuICAgICAgICAgICAgdmFyIHJvdXRlID0ge1xuICAgICAgICAgICAgICBraW5kOiBcIlJvdXRlXCIsXG4gICAgICAgICAgICAgIGFwaVZlcnNpb246IGRlZmF1bHRPU0FwaVZlcnNpb24sXG4gICAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgc3BlYzoge1xuICAgICAgICAgICAgICAgIGhvc3Q6IHJvdXRlSG9zdG5hbWUsXG4gICAgICAgICAgICAgICAgdG86IHtcbiAgICAgICAgICAgICAgICAgIGtpbmQ6IFwiU2VydmljZVwiLFxuICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJvdXRlcy5wdXNoKHJvdXRlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBvYmplY3RzID0gb2JqZWN0cy5jb25jYXQocm91dGVzKTtcbiAgICAgIH1cbiAgICAgIGlmICgkc2NvcGUudGFyZ2V0TmFtZXNwYWNlICE9PSBtb2RlbC5jdXJyZW50TmFtZXNwYWNlKCkpIHtcbiAgICAgICAgJHNjb3BlLiRvbignV2F0Y2hlck5hbWVzcGFjZUNoYW5nZWQnLCAoKSA9PiB7XG4gICAgICAgICAgbG9nLmRlYnVnKFwiTmFtZXNwYWNlIGNoYW5nZWRcIik7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBhcHBseU9iamVjdHMob2JqZWN0cyk7XG4gICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgIH0pO1xuICAgICAgICBDb3JlLm5vdGlmaWNhdGlvbignaW5mbycsIFwiU3dpdGNoaW5nIHRvIG5hbWVzcGFjZSBcIiArICRzY29wZS50YXJnZXROYW1lc3BhY2UgKyBcIiBhbmQgZGVwbG95aW5nIHRlbXBsYXRlXCIpO1xuICAgICAgICBtb2RlbC5rdWJlcm5ldGVzLnNlbGVjdGVkTmFtZXNwYWNlID0gJHNjb3BlLnRhcmdldE5hbWVzcGFjZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFwcGx5T2JqZWN0cyhvYmplY3RzKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gYXBwbHlPYmplY3RzKG9iamVjdHMpIHtcbiAgICAgIHZhciBwcm9qZWN0Q2xpZW50ID0gS3ViZXJuZXRlcy5jcmVhdGVLdWJlcm5ldGVzQ2xpZW50KFwicHJvamVjdHNcIik7XG5cbiAgICAgIF8uZm9yRWFjaChvYmplY3RzLCAob2JqZWN0OmFueSkgPT4ge1xuICAgICAgICBsb2cuZGVidWcoXCJPYmplY3Q6IFwiLCBvYmplY3QpO1xuXG4gICAgICAgIHZhciBraW5kID0gZ2V0S2luZChvYmplY3QpO1xuICAgICAgICB2YXIgbmFtZSA9IGdldE5hbWUob2JqZWN0KTtcbiAgICAgICAgdmFyIG5zID0gZ2V0TmFtZXNwYWNlKG9iamVjdCk7XG5cbiAgICAgICAgaWYgKGtpbmQgJiYgbmFtZSkge1xuICAgICAgICAgIGlmIChucyAmJiBucyAhPT0gY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKSkge1xuICAgICAgICAgICAgdmFyIHByb2plY3QgPSB7XG4gICAgICAgICAgICAgIGFwaVZlcnNpb246IEt1YmVybmV0ZXMuZGVmYXVsdEFwaVZlcnNpb24sXG4gICAgICAgICAgICAgIGtpbmQ6IFwiUHJvamVjdFwiLFxuICAgICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICAgIG5hbWU6IG5zLFxuICAgICAgICAgICAgICAgIGxhYmVsczoge1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHByb2plY3RDbGllbnQucHV0KHByb2plY3QsXG4gICAgICAgICAgICAgIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgbG9nLmluZm8oXCJDcmVhdGVkIG5hbWVzcGFjZTogXCIgKyBucylcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGNyZWF0ZSBuYW1lc3BhY2U6IFwiICsgbnMgKyBcIjogXCIgKyBhbmd1bGFyLnRvSnNvbihlcnIpKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHBsdXJhbEtpbmQgPSBraW5kLnRvTG93ZXJDYXNlKCkgKyBcInNcIjtcbiAgICAgICAgICB2YXIga3ViZUNsaWVudCA9IEt1YmVybmV0ZXMuY3JlYXRlS3ViZXJuZXRlc0NsaWVudChwbHVyYWxLaW5kLCBucyk7XG4gICAgICAgICAga3ViZUNsaWVudC5wdXQob2JqZWN0LFxuICAgICAgICAgICAgKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgbG9nLmluZm8oXCJ1cGRhdGVkIFwiICsga2luZCArIFwiIG5hbWU6IFwiICsgbmFtZSArIChucyA/IFwiIG5zOiBcIiArIG5zOiBcIlwiKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byB1cGRhdGUgXCIgKyBraW5kICsgXCIgbmFtZTogXCIgKyBuYW1lICsgKG5zID8gXCIgbnM6IFwiICsgbnM6IFwiXCIpICsgXCIgZXJyb3I6IFwiICsgYW5ndWxhci50b0pzb24oZXJyKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBnb0JhY2soKTtcbiAgICB9XG5cbiAgICAkc2NvcGUuZGVsZXRlVGVtcGxhdGUgPSAodGVtcGxhdGUpID0+IHtcbiAgICAgIFVJLm11bHRpSXRlbUNvbmZpcm1BY3Rpb25EaWFsb2coPFVJLk11bHRpSXRlbUNvbmZpcm1BY3Rpb25PcHRpb25zPntcbiAgICAgICAgY29sbGVjdGlvbjogW3RlbXBsYXRlXSxcbiAgICAgICAgaW5kZXg6ICdtZXRhZGF0YS5uYW1lJyxcbiAgICAgICAgb25DbG9zZTogKHJlc3VsdDpib29sZWFuKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgS3ViZXJuZXRlc01vZGVsWyd0ZW1wbGF0ZXNSZXNvdXJjZSddLmRlbGV0ZSh7XG4gICAgICAgICAgICAgIGlkOiB0ZW1wbGF0ZS5tZXRhZGF0YS5uYW1lXG4gICAgICAgICAgICB9LCB1bmRlZmluZWQsICgpID0+IHtcbiAgICAgICAgICAgICAgS3ViZXJuZXRlc01vZGVsWyd0ZW1wbGF0ZXNSZXNvdXJjZSddLnF1ZXJ5KChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgS3ViZXJuZXRlc01vZGVsLnRlbXBsYXRlcyA9IGRhdGEuaXRlbXM7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcIkVycm9yIGRlbGV0aW5nIHRlbXBsYXRlOiBcIiwgZXJyb3IpOyBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdGl0bGU6ICdEZWxldGUgVGVtcGxhdGU/JyxcbiAgICAgICAgYWN0aW9uOiAnVGhlIGZvbGxvd2luZyB0ZW1wbGF0ZSB3aWxsIGJlIGRlbGV0ZWQ6JyxcbiAgICAgICAgb2tUZXh0OiAnRGVsZXRlJyxcbiAgICAgICAgb2tDbGFzczogJ2J0bi1kYW5nZXInLFxuICAgICAgICBjdXN0b206IFwiVGhpcyBvcGVyYXRpb24gaXMgcGVybWFuZW50IG9uY2UgY29tcGxldGVkIVwiLFxuICAgICAgICBjdXN0b21DbGFzczogXCJhbGVydCBhbGVydC13YXJuaW5nXCJcbiAgICAgIH0pLm9wZW4oKTtcbiAgICB9O1xuICB9XSk7XG59XG5cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbm1vZHVsZSBOYXZpZ2F0aW9uIHtcblxuICBleHBvcnQgdmFyIHBsdWdpbk5hbWUgPSAnaGF3dGlvLW5hdmlnYXRpb24nO1xuICBleHBvcnQgdmFyIGxvZyA9IExvZ2dlci5nZXQocGx1Z2luTmFtZSk7XG4gIGV4cG9ydCB2YXIgX21vZHVsZSA9IGFuZ3VsYXIubW9kdWxlKHBsdWdpbk5hbWUsIFtdKTtcblxuICBfbW9kdWxlLnJ1bigoKSA9PiB7XG4gIH0pO1xuXG4gIF9tb2R1bGUuc2VydmljZSgnSGF3dGlvQnJlYWRjcnVtYnMnLCAoKSA9PiB7XG4gICAgdmFyIF9jb25maWcgPSBbXTtcbiAgICB2YXIgc2VsZiA9IHtcbiAgICAgIGFwcGx5OiAoY29uZmlnKSA9PiB7XG4gICAgICAgIF9jb25maWcubGVuZ3RoID0gMDtcbiAgICAgICAgXy5mb3JFYWNoKGNvbmZpZywgKGNydW1iKSA9PiB7XG4gICAgICAgICAgX2NvbmZpZy5wdXNoKGNydW1iKTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgIHJldHVybiBfY29uZmlnO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHNlbGY7XG4gIH0pO1xuXG4gIF9tb2R1bGUuc2VydmljZSgnSGF3dGlvU3ViVGFicycsICgpID0+IHtcbiAgICB2YXIgX2NvbmZpZyA9IFtdO1xuICAgIHZhciBzZWxmID0ge1xuICAgICAgYXBwbHk6IChjb25maWcpID0+IHtcbiAgICAgICAgX2NvbmZpZy5sZW5ndGggPSAwO1xuICAgICAgICBfLmZvckVhY2goY29uZmlnLCAoY3J1bWIpID0+IHtcbiAgICAgICAgICBfY29uZmlnLnB1c2goY3J1bWIpO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIF9jb25maWc7XG4gICAgICB9IFxuICAgIH0gXG4gICAgcmV0dXJuIHNlbGY7XG4gIH0pO1xuXG4gIF9tb2R1bGUuZGlyZWN0aXZlKCd2aWV3cG9ydEhlaWdodCcsIFsnJHdpbmRvdycsICckZG9jdW1lbnQnLCAoJHdpbmRvdywgJGRvY3VtZW50KSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc3RyaWN0OiAnQScsXG4gICAgICBsaW5rOiAoc2NvcGUsIGVsZW1lbnQsIGF0dHIpID0+IHtcbiAgICAgICAgLy8gbG9nLmRlYnVnKFwiV2luZG93OiBcIiwgJHdpbmRvdyk7XG4gICAgICAgIC8vIGxvZy5kZWJ1ZyhcImVsZW1lbnQ6IFwiLCBlbGVtZW50KTtcbiAgICAgICAgdmFyIHdpbiA9ICQoJHdpbmRvdyk7XG4gICAgICAgIHZhciByZXNpemVGdW5jID0gKCkgPT4ge1xuICAgICAgICAgIHZhciB2aWV3cG9ydEhlaWdodCA9IHdpbi5pbm5lckhlaWdodCgpO1xuICAgICAgICAgIC8vIGxvZy5kZWJ1ZyhcIlZpZXdwb3J0IGhlaWdodDogXCIsIHZpZXdwb3J0SGVpZ2h0KTtcbiAgICAgICAgICB2YXIgZWxUb3AgPSBlbGVtZW50Lm9mZnNldCgpLnRvcDtcbiAgICAgICAgICAvLyBsb2cuZGVidWcoXCJFbGVtZW50IHRvcDogXCIsIGVsVG9wKTtcbiAgICAgICAgICB2YXIgaGVpZ2h0ID0gdmlld3BvcnRIZWlnaHQgLSBlbFRvcDtcbiAgICAgICAgICBlbGVtZW50LmNzcygnaGVpZ2h0JywgaGVpZ2h0KTtcbiAgICAgICAgfTtcbiAgICAgICAgd2luLm9uKCdyZXNpemUnLCByZXNpemVGdW5jKTtcbiAgICAgICAgZWxlbWVudC5vbignJGRlc3Ryb3knLCAoKSA9PiB7XG4gICAgICAgICAgd2luLm9mZigncmVzaXplJywgcmVzaXplRnVuYyk7XG4gICAgICAgIH0pO1xuICAgICAgICBzZXRUaW1lb3V0KHJlc2l6ZUZ1bmMsIDUwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1dKTtcblxuICBfbW9kdWxlLmRpcmVjdGl2ZSgnaGF3dGlvTWFpbk91dGxldCcsIFsnSGF3dGlvU3ViVGFicycsIChIYXd0aW9TdWJUYWJzKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc3RyaWN0OiAnQScsXG4gICAgICBsaW5rOiAoc2NvcGUsIGVsZW1lbnQsIGF0dHJzKSA9PiB7XG4gICAgICAgIHNjb3BlLkhhd3Rpb1N1YlRhYnMgPSBIYXd0aW9TdWJUYWJzO1xuICAgICAgICBzY29wZS4kd2F0Y2hDb2xsZWN0aW9uKCdIYXd0aW9TdWJUYWJzLmdldCgpJywgKHN1YlRhYkNvbmZpZykgPT4ge1xuICAgICAgICAgIC8vIGxvZy5kZWJ1ZyhcInN1YlRhYkNvbmZpZzogXCIsIHN1YlRhYkNvbmZpZyk7XG4gICAgICAgICAgaWYgKHN1YlRhYkNvbmZpZyAmJiBzdWJUYWJDb25maWcubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVDbGFzcygnaGlkZGVuLW5hdicpO1xuICAgICAgICAgICAgLy9lbGVtZW50LmNzcyh7ICdtYXJnaW4tbGVmdCc6ICcnIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbGVtZW50LmFkZENsYXNzKCdoaWRkZW4tbmF2Jyk7XG4gICAgICAgICAgICAvL2VsZW1lbnQuY3NzKHsgJ21hcmdpbi1sZWZ0JzogJ2F1dG8nIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICB9XSk7XG5cbiAgX21vZHVsZS5kaXJlY3RpdmUoJ2hhd3Rpb1RhYnNPdXRsZXQnLCBbJ0hhd3Rpb1N1YlRhYnMnLCAoSGF3dGlvU3ViVGFicykgPT4ge1xuICAgIHZhciBpbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIHJldHVybiB7XG4gICAgICByZXN0cmljdDogJ0FFJyxcbiAgICAgIHJlcGxhY2U6IHRydWUsXG4gICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8ZGl2IGNsYXNzPVwibmF2LXBmLXZlcnRpY2FsIG5hdi1wZi12ZXJ0aWNhbC13aXRoLXNlY29uZGFyeS1uYXZcIiBuZy1jb250cm9sbGVyPVwiRGV2ZWxvcGVyLk5hdkJhckNvbnRyb2xsZXJcIiBuZy1jbGFzcz1cImdldENsYXNzKClcIj5cbiAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwXCI+XG4gICAgICAgICAgICA8bGkgbmctcmVwZWF0PVwic3ViVGFiIGluIHN1YlRhYkNvbmZpZ1wiIG5nLXNob3c9XCJpc1ZhbGlkKHN1YlRhYilcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIHt7c3ViVGFiLmFjdGl2ZSA/ICdhY3RpdmUnIDogJyd9fVwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJ7e3N1YlRhYi50aXRsZX19XCI+XG4gICAgICAgICAgICAgICAgPGEgbmctaGlkZT1cInN1YlRhYi50ZW1wbGF0ZVwiIGhyZWY9XCJ7e3N1YlRhYi5ocmVmfX1cIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIG5nLXNob3c9XCJzdWJUYWIuY2xhc3NcIiBuZy1jbGFzcz1cInN1YlRhYi5jbGFzc1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxpbWcgbmctc2hvdz1cInN1YlRhYi5pY29uXCIgbmctc3JjPVwie3tzdWJUYWIuaWNvbn19XCIgc3R5bGU9XCJtYXgtd2lkdGg6IDE2cHg7IG1hcmdpbi1yaWdodDogMTNweDtcIj5cbiAgICAgICAgICAgICAgICAgIHt7c3ViVGFiLmxhYmVsfX1cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgPGRpdiBuZy1zaG93PVwic3ViVGFiLnRlbXBsYXRlXCIgY29tcGlsZT1cInN1YlRhYi50ZW1wbGF0ZVwiPjwvZGl2PlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIGAsXG4gICAgICBsaW5rOiAoc2NvcGUsIGVsZW1lbnQsIGF0dHJzKSA9PiB7XG4gICAgICAgIGlmICghaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgKDxhbnk+JCkoKS5zZXR1cFZlcnRpY2FsTmF2aWdhdGlvbihmYWxzZSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAvLyBpZ25vcmUgaWYgd2UgaGF2ZW4ndCBsb2FkZWQgcGF0dGVybmZseVxuICAgICAgICAgIH1cbiAgICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgc2NvcGUuSGF3dGlvU3ViVGFicyA9IEhhd3Rpb1N1YlRhYnM7XG4gICAgICAgIHZhciBjb2xsYXBzZWQgPSBmYWxzZTtcbiAgICAgICAgc2NvcGUuZ2V0Q2xhc3MgPSAoKSA9PiB7XG4gICAgICAgICAgLy9sb2cuZGVidWcoXCJNeSBjbGFzczogXCIsIGVsZW1lbnQuYXR0cignY2xhc3MnKSk7XG4gICAgICAgICAgaWYgKCFzY29wZS5zdWJUYWJDb25maWcgfHwgIXNjb3BlLnN1YlRhYkNvbmZpZy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiAnaGlkZGVuJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNvbGxhcHNlZCkge1xuICAgICAgICAgICAgcmV0dXJuICdjb2xsYXBzZWQnO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgc2NvcGUuJG9uKCdoYXd0aW9Db2xsYXBzZU5hdicsICgpID0+IHtcbiAgICAgICAgICBjb2xsYXBzZWQgPSAhY29sbGFwc2VkO1xuICAgICAgICB9KTtcbiAgICAgICAgc2NvcGUuJHdhdGNoKCdIYXd0aW9TdWJUYWJzLmdldCgpJywgKHN1YlRhYkNvbmZpZykgPT4ge1xuICAgICAgICAgIHNjb3BlLnN1YlRhYkNvbmZpZyA9IHN1YlRhYkNvbmZpZztcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfV0pO1xuXG4gIF9tb2R1bGUuZGlyZWN0aXZlKCdoYXd0aW9CcmVhZGNydW1ic091dGxldCcsIFsnSGF3dGlvQnJlYWRjcnVtYnMnLCAoSGF3dGlvQnJlYWRjcnVtYnMpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVzdHJpY3Q6ICdFJyxcbiAgICAgIHNjb3BlOiB7fSxcbiAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxkaXYgbmctc2hvdz1cImJyZWFkY3J1bWJDb25maWdcIiBuZy1jb250cm9sbGVyPVwiRGV2ZWxvcGVyLk5hdkJhckNvbnRyb2xsZXJcIj5cbiAgICAgICAgICA8b2wgY2xhc3M9XCJicmVhZGNydW1iXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzID0gJ2JyJz48YnI+PC9kaXY+XG4gICAgICAgICAgICA8bGkgbmctcmVwZWF0PVwiYnJlYWRjcnVtYiBpbiBicmVhZGNydW1iQ29uZmlnXCIgbmctc2hvdz1cImlzVmFsaWQoYnJlYWRjcnVtYilcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwie3ticmVhZGNydW1iLmFjdGl2ZSA/ICdhY3RpdmUnIDogJyd9fVwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJ7e2JyZWFkY3J1bWIudGl0bGV9fVwiPlxuICAgICAgICAgICAgICA8YSBuZy1zaG93PVwiYnJlYWRjcnVtYi5ocmVmICYmICFicmVhZGNydW1iLmFjdGl2ZVwiIGhyZWY9XCJ7e2JyZWFkY3J1bWIuaHJlZn19XCI+e3ticmVhZGNydW1iLmxhYmVsfX08L2E+XG4gICAgICAgICAgICAgIDxzcGFuIG5nLWhpZGU9XCJicmVhZGNydW1iLmhyZWYgJiYgIWJyZWFkY3J1bWIuYWN0aXZlXCI+e3ticmVhZGNydW1iLmxhYmVsfX08L3NwYW4+XG4gICAgICAgICAgPC9vbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICBgLFxuICAgICAgbGluazogKHNjb3BlLCBlbGVtZW50LCBhdHRycykgPT4ge1xuICAgICAgICBzY29wZS5icmVhZGNydW1icyA9IEhhd3Rpb0JyZWFkY3J1bWJzO1xuICAgICAgICBzY29wZS4kd2F0Y2hDb2xsZWN0aW9uKCdicmVhZGNydW1icy5nZXQoKScsIChicmVhZGNydW1iQ29uZmlnKSA9PiB7XG4gICAgICAgICAgc2NvcGUuYnJlYWRjcnVtYkNvbmZpZyA9IGJyZWFkY3J1bWJDb25maWc7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gIH1dKTtcblxuICAvL2hhd3Rpb1BsdWdpbkxvYWRlci5hZGRNb2R1bGUoJ3BhdHRlcm5mbHknKTtcbiAgaGF3dGlvUGx1Z2luTG9hZGVyLmFkZE1vZHVsZShwbHVnaW5OYW1lKTtcblxufVxuXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluY2x1ZGVzLnRzIiwia3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzSW50ZXJmYWNlcy50cyIsImt1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHMiLCJrdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNQbHVnaW4udHMiLCJrdWJlcm5ldGVzL3RzL2FwcHMudHMiLCJrdWJlcm5ldGVzL3RzL2JyZWFkY3J1bWJzLnRzIiwia3ViZXJuZXRlcy90cy9idWlsZC50cyIsImt1YmVybmV0ZXMvdHMvYnVpbGRDb25maWcudHMiLCJrdWJlcm5ldGVzL3RzL2J1aWxkQ29uZmlnRWRpdC50cyIsImt1YmVybmV0ZXMvdHMvYnVpbGRDb25maWdzLnRzIiwia3ViZXJuZXRlcy90cy9idWlsZExvZ3MudHMiLCJrdWJlcm5ldGVzL3RzL2J1aWxkcy50cyIsImt1YmVybmV0ZXMvdHMvY29ubmVjdC50cyIsImt1YmVybmV0ZXMvdHMvZGF0YUluZm5Nb2RlbC50cyIsImt1YmVybmV0ZXMvdHMvZGVwbG95bWVudENvbmZpZy50cyIsImt1YmVybmV0ZXMvdHMvZGVwbG95bWVudENvbmZpZ3MudHMiLCJrdWJlcm5ldGVzL3RzL2V2ZW50cy50cyIsImt1YmVybmV0ZXMvdHMva3ViZXJuZXRlc01vZGVsLnRzIiwia3ViZXJuZXRlcy90cy9ob3N0LnRzIiwia3ViZXJuZXRlcy90cy91dGlsSGVscGVycy50cyIsImt1YmVybmV0ZXMvdHMvaG9zdHMudHMiLCJrdWJlcm5ldGVzL3RzL2ltYWdlUmVwb3NpdG9yaWVzLnRzIiwia3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzTmF2aWdhdGlvbi50cyIsImt1YmVybmV0ZXMvdHMvc2NoZW1hLnRzIiwia3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzU2NoZW1hLnRzIiwia3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzU2VydmljZXMudHMiLCJrdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNUb3BMZXZlbC50cyIsImt1YmVybmV0ZXMvdHMvbmFtZXNwYWNlLnRzIiwia3ViZXJuZXRlcy90cy9vdmVydmlldy50cyIsImt1YmVybmV0ZXMvdHMvcGlwZWxpbmVzLnRzIiwia3ViZXJuZXRlcy90cy9wb2QudHMiLCJrdWJlcm5ldGVzL3RzL3BvZEVkaXQudHMiLCJrdWJlcm5ldGVzL3RzL3dhdGNoZXIudHMiLCJrdWJlcm5ldGVzL3RzL3Rlcm0udHMiLCJrdWJlcm5ldGVzL3RzL3BvZExvZ3MudHMiLCJrdWJlcm5ldGVzL3RzL3BvZHMudHMiLCJrdWJlcm5ldGVzL3RzL3JlYWRQbGFjZWRpdmlzaW9uLnRzIiwia3ViZXJuZXRlcy90cy9yZXBsaWNhdGlvbkNvbnRyb2xsZXIudHMiLCJrdWJlcm5ldGVzL3RzL3JlcGxpY2F0aW9uQ29udHJvbGxlckVkaXQudHMiLCJrdWJlcm5ldGVzL3RzL3JlcGxpY2F0aW9uQ29udHJvbGxlcnMudHMiLCJrdWJlcm5ldGVzL3RzL3NjaGVtYUhlbHBlcnMudHMiLCJrdWJlcm5ldGVzL3RzL3NlY3JldC50cyIsImt1YmVybmV0ZXMvdHMvc2VjcmV0cy50cyIsImt1YmVybmV0ZXMvdHMvc2VydmljZS50cyIsImt1YmVybmV0ZXMvdHMvc2VydmljZUVkaXQudHMiLCJrdWJlcm5ldGVzL3RzL3NlcnZpY2VSZWdpc3RyeS50cyIsImt1YmVybmV0ZXMvdHMvc2VydmljZXMudHMiLCJrdWJlcm5ldGVzL3RzL3NoYXJlZENvbnRyb2xsZXJzLnRzIiwia3ViZXJuZXRlcy90cy90YWJzLnRzIiwia3ViZXJuZXRlcy90cy90ZW1wbGF0ZXMudHMiLCJkZXZlbG9wZXIvdHMvZGV2ZWxvcGVyRW5yaWNoZXJzLnRzIiwiZGV2ZWxvcGVyL3RzL2RldmVsb3BlckhlbHBlcnMudHMiLCJkZXZlbG9wZXIvdHMvZGV2ZWxvcGVyTmF2aWdhdGlvbi50cyIsImRldmVsb3Blci90cy9GaWxlTW9kZS50cyIsImRldmVsb3Blci90cy9kZXZlbG9wZXJQbHVnaW4udHMiLCJkZXZlbG9wZXIvdHMvZW52aXJvbm1lbnRQYW5lbC50cyIsImRldmVsb3Blci90cy9ob21lLnRzIiwiZGV2ZWxvcGVyL3RzL2plbmtpbnNKb2IudHMiLCJkZXZlbG9wZXIvdHMvamVua2luc0pvYnMudHMiLCJkZXZlbG9wZXIvdHMvamVua2luc0xvZy50cyIsImRldmVsb3Blci90cy9qZW5raW5zTWV0cmljcy50cyIsImRldmVsb3Blci90cy9uYXZiYXIudHMiLCJkZXZlbG9wZXIvdHMvcGlwZWxpbmUudHMiLCJkZXZlbG9wZXIvdHMvcGlwZWxpbmVEaXJlY3RpdmUudHMiLCJkZXZlbG9wZXIvdHMvcGlwZWxpbmVzLnRzIiwiZGV2ZWxvcGVyL3RzL3Byb2plY3QudHMiLCJkZXZlbG9wZXIvdHMvcHJvamVjdFNlbGVjdG9yLnRzIiwiZGV2ZWxvcGVyL3RzL3Byb2plY3RzLnRzIiwiZGV2ZWxvcGVyL3RzL3dvcmtzcGFjZS50cyIsImRldmVsb3Blci90cy93b3Jrc3BhY2VzLnRzIiwibmF2aWdhdGlvbi90cy9uYXZpZ2F0aW9uUGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNEQUFzRDtBQUN0RCwrREFBK0Q7QUFDL0Qsc0RBQXNEO0FBQ3RELG1EQUFtRDtBQUNuRCwwREFBMEQ7O0FDSjFELElBQU8sVUFBVSxDQWtKaEI7QUFsSkQsV0FBTyxVQUFVLEVBQUMsQ0FBQztJQUVqQjtRQUFBO1FBRUEsQ0FBQztRQURDLHNCQUFJLHlDQUFxQjtpQkFBekIsY0FBcUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQzs7O1dBQUE7UUFDdkUsYUFBQztJQUFELENBRkEsQUFFQyxJQUFBO0lBRlksaUJBQU0sU0FFbEIsQ0FBQTtJQUVVLG9CQUFTLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQztJQThDckM7UUFBQTtRQTBCQSxDQUFDO1FBekJBLHNCQUFrQix1QkFBUztpQkFBM0IsY0FBdUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7OztXQUFBO1FBQzVELHNCQUFrQixvQkFBTTtpQkFBeEIsY0FBb0MsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7OztXQUFBO1FB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USxFQUFDLEdBQUcsRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFdBQVcsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsV0FBVyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDL0csRUFBQyxVQUFVLEVBQUMsZUFBZSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxXQUFXLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQ3RILEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxXQUFXLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQztRQUNoSCxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGNBQWMsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDOUcsRUFBQyxVQUFVLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQ2xILEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQztRQUM1RyxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDakgsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxXQUFXLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLG9CQUFvQixFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDMUgsRUFBQyxVQUFVLEVBQUMsaUJBQWlCLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGlCQUFpQixFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQztRQUMvSCxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGNBQWMsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDeEgsRUFBQyxVQUFVLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLG1CQUFtQixFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDaEksRUFBQyxVQUFVLEVBQUMsa0JBQWtCLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFdBQVcsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDekgsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxPQUFPLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDaEosRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxZQUFZLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDdEosRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDN0ksRUFBQyxVQUFVLEVBQUMsV0FBVyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxZQUFZLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDeEosRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFdBQVcsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQ2xLLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsZUFBZSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxZQUFZLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQzlKLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxZQUFZLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDNUwsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQztRQUN0SixFQUFDLFVBQVUsRUFBQyxZQUFZLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsY0FBYyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDdkgsRUFBQyxVQUFVLEVBQUMsWUFBWSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQ25ILEVBQUMsVUFBVSxFQUFDLGVBQWUsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsV0FBVyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQztRQUN2SCxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsZUFBZSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDdEgsRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsaUJBQWlCLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQztRQUMxSCxFQUFDLFVBQVUsRUFBQyxpQkFBaUIsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGtCQUFrQixFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDdEksRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxpQkFBaUIsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQ3BJLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsZUFBZSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDO1FBQ2pLLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDO1FBQzdJLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDO1FBQ2xKLEVBQUMsVUFBVSxFQUFDLGVBQWUsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxZQUFZLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQztRQUN6SCxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsa0JBQWtCLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQztRQUMvSCxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxjQUFjLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQztRQUNqSSxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLG9CQUFvQixFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUM7UUFDMUksRUFBQyxVQUFVLEVBQUMsZUFBZSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxPQUFPLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUM7UUFDekosRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGlCQUFpQixFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUM7UUFDdkgsRUFBQyxVQUFVLEVBQUMsWUFBWSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUM7UUFDL0gsRUFBQyxVQUFVLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsbUJBQW1CLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQztRQUN0SSxFQUFDLFVBQVUsRUFBQyxtQkFBbUIsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsa0JBQWtCLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGlCQUFpQixFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUM7UUFDNUksRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQztRQUM3SixFQUFDLFVBQVUsRUFBQyxjQUFjLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGlCQUFpQixFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDO1FBQ3JJLEVBQUMsVUFBVSxFQUFDLGNBQWMsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGtCQUFrQixFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUM7UUFDdEksRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGlCQUFpQixFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxr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QVEsRUFBQyxLQUFLLEVBQUM7UUFDMUYsRUFBQyxVQUFVLEVBQUMsY0FBYyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDO1FBQ3ZGLEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDO1FBQ3pGLEVBQUMsVUFBVSxFQUFDLGtCQUFrQixFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDO1FBQzNGLEVBQUMsVUFBVSxFQUFDLGtCQUFrQixFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDO1FBQzNGLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsa0JBQWtCLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQztRQUNyRixFQUFDLFVBQVUsRUFBQyxXQUFXLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsZUFBZSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUM7UUFDMUgsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUM7UUFDeEgsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxjQUFjLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDO1FBQ2xILEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsWUFBWSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQztRQUNsSCxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLG1CQUFtQixFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQztRQUMzSCxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQztRQUN6SCxFQUFDLFVBQVUsRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGNBQWMsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsbUJBQW1CLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQztRQUNwSSxFQUFDLFVBQVUsRUFBQyxvQkFBb0IsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDO1FBQ3BJLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsY0FBYyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxDQUFDLENBQUM7SUFFbEgsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDekksRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxZQUFZLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNqSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGNBQWMsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQ2xILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxPQUFPLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUMzRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsZUFBZSxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDbkgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLE1BQU0sRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxPQUFPLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUM1RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFdBQVcsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsV0FBVyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxlQUFlLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUNuSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFdBQVcsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsT0FBTyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDM0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQ2hILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxZQUFZLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNqSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzNHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsV0FBVyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMzRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQ3pHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsY0FBYyxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDbkgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGFBQWEsRUFBQyxVQUFVLEVBQUMsV0FBVyxFQUFDO1FBQ3ZILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzNHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM1RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzVHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDOUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzlHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVB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QUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDNUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE9BQU8sRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQzNHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsWUFBWSxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDaEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxhQUFhLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUNqSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzNHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDM0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMzRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsV0FBVyxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDaEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLE1BQU0sRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxZQUFZLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNsSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDckgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ3JILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxXQUFXLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNoSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzNHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMzRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsZUFBZSxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDbkgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxZQUFZLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNqSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQzlHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDOUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxZQUFZLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNqSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzNHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLE1BQU0sRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxZQUFZLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNsSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsTUFBTSxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGFBQWEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ25ILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxNQUFNLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDOUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxZQUFZLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNqSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDekcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzVHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUs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LFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzNHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMzRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDM0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUN6RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzlHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDOUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM5RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzlHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDaEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxhQUFhLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUNsSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGVBQWUsRUFBQyxVQUFVLEVBQUMsRUFBRSxFQUFDO1FBQ2pILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsYUFBYSxFQUFDLFVBQVUsRUFBQyxFQUFFLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUM5RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzlHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDOUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxZQUFZLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNsSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2hILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDOUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFD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RUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzVHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDM0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsaUJBQWlCLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUNySCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsWUFBWSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDakgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxhQUFhLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNsSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGFBQWEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2xILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNySCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGFBQWEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2xILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ3JILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsbUJBQW1CLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUN4SCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLG1CQUFtQixFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDeEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxrQkFBa0IsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQ3RILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsaUJBQWlCLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUN0SCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDckgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVB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LGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDM0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsZUFBZSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDcEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQzVHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxhQUFhLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNsSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE9BQU8sRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQzNHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsaUJBQWlCLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUNySCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2pILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsWUFBWSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDakgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE9BQU8sRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQzNHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDM0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUM5RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDM0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDckgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxVQUFVLEVBQUMsTUFBTSxF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TUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxlQUFlLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNwSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDOUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMzRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFdBQVcsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDaEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLE1BQU0sRUFBQyxhQUFhLEVBQUMsV0FBVyxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ3pILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxTQUFTLEVBQUMsYUFBYSxFQUFDLFdBQVcsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUs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QkFDdEMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixFQUFFLFVBQUMsZ0JBQWdCO3dCQUMzRCxLQUFLLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7b0JBQzVDLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUM7YUFDRixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVKLDZDQUE2QztJQUM3QyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMscUJBQVUsQ0FBQyxDQUFDO0FBRTNDLENBQUMsRUFyS00sVUFBVSxLQUFWLFVBQVUsUUFxS2hCIiwiZmlsZSI6ImNvbXBpbGVkLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uL2xpYnMvaGF3dGlvLWZvcm1zL2RlZnMuZC50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi9saWJzL2hhd3Rpby1rdWJlcm5ldGVzLWFwaS9kZWZzLmQudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vbGlicy9oYXd0aW8tb2F1dGgvZGVmcy5kLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uL2xpYnMvaGF3dGlvLXVpL2RlZnMuZC50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi9saWJzL2hhd3Rpby11dGlsaXRpZXMvZGVmcy5kLnRzXCIvPlxuXG5kZWNsYXJlIHZhciBodW1hbmRhdGU7XG5kZWNsYXJlIHZhciBqc3lhbWw6YW55O1xuXG4iLCJtb2R1bGUgS3ViZXJuZXRlcyB7XG5cbiAgZXhwb3J0IGNsYXNzIGNvbnN0cyB7XG4gICAgZ2V0IE5BTUVTUEFDRV9TVE9SQUdFX0tFWSgpOnN0cmluZyB7IHJldHVybiBcIms4c1NlbGVjdGVkTmFtZXNwYWNlXCI7IH1cbiAgfVxuXG4gIGV4cG9ydCB2YXIgQ29uc3RhbnRzID0gbmV3IGNvbnN0cygpO1xuXHRcbiAgZXhwb3J0IGludGVyZmFjZSBBcGlMb2NhdGlvbiB7XG4gICAgcHJvdG8/OnN0cmluZztcbiAgICBob3N0UG9ydDpzdHJpbmc7XG4gICAgcHJlZml4OnN0cmluZztcbiAgfVxuICBcbiAgZXhwb3J0IGludGVyZmFjZSBBcGlMb2NhdGlvbnMge1xuICAgIG9wZW5zaGlmdD86IEFwaUxvY2F0aW9uO1xuICAgIGs4cz86IEFwaUxvY2F0aW9uO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBLdWJlcm5ldGVzQ29uZmlnIHtcbiAgICBtYXN0ZXJfdXJpPzogc3RyaW5nO1xuICAgIGFwaT86IEFwaUxvY2F0aW9ucztcbiAgICBvcGVuc2hpZnQ/OiBPcGVuU2hpZnRPQXV0aENvbmZpZztcbiAgICBnb29nbGU/OiBHb29nbGVPQXV0aENvbmZpZztcbiAgICBrZXljbG9haz86IEtleUNsb2FrQXV0aENvbmZpZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgT3BlblNoaWZ0T0F1dGhDb25maWcge1xuICAgIG9hdXRoX2F1dGhvcml6ZV91cmk6c3RyaW5nO1xuICAgIG9hdXRoX2NsaWVudF9pZDpzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIEdvb2dsZU9BdXRoQ29uZmlnIHtcbiAgICBhdXRoZW50aWNhdGlvblVSSTpzdHJpbmc7XG4gICAgYXV0aG9yaXphdGlvblVSSTpzdHJpbmc7XG4gICAgY2xpZW50SWQ6c3RyaW5nO1xuICAgIGNsaWVudFNlY3JldDpzdHJpbmc7XG4gICAgcmVkaXJlY3RVUkk6c3RyaW5nO1xuICAgIHNjb3BlOnN0cmluZztcbiAgICB0b2tlblVSST86c3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBLZXlDbG9ha0F1dGhDb25maWcge1xuICAgIG9hdXRoX2F1dGhvcml6ZV91cmk6c3RyaW5nO1xuICAgIG9hdXRoX2NsaWVudF9pZDpzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIEt1YmVybmV0ZXNTdGF0ZSB7XG4gICAgbmFtZXNwYWNlczogQXJyYXk8c3RyaW5nPjtcbiAgICBzZWxlY3RlZE5hbWVzcGFjZTogc3RyaW5nO1xuICB9XG5cblx0ZXhwb3J0IGNsYXNzIFdhdGNoVHlwZXMge1xuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IEVORFBPSU5UUygpOnN0cmluZyB7IHJldHVybiBcImVuZHBvaW50c1wiOyB9XG5cdFx0cHVibGljIHN0YXRpYyBnZXQgRVZFTlRTKCk6c3RyaW5nIHsgcmV0dXJuIFwiZXZlbnRzXCI7IH1cbiAgICBwdWJsaWMgc3RhdGljIGdldCBOQU1FU1BBQ0VTKCk6c3RyaW5nIHsgcmV0dXJuIFwibmFtZXNwYWNlc1wiOyB9XG5cdFx0cHVibGljIHN0YXRpYyBnZXQgTk9ERVMoKTpzdHJpbmcgeyByZXR1cm4gXCJub2Rlc1wiOyB9XG5cdFx0cHVibGljIHN0YXRpYyBnZXQgUEVSU0lTVEVOVF9WT0xVTUVTKCk6c3RyaW5nIHsgcmV0dXJuIFwicGVyc2lzdGVudHZvbHVtZXNcIjsgfVxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IFBFUlNJU1RFTlRfVk9MVU1FX0NMQUlNUygpOnN0cmluZyB7IHJldHVybiBcInBlcnNpc3RlbnR2b2x1bWVjbGFpbXNcIjsgfVxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IFBPRFMoKTpzdHJpbmcgeyByZXR1cm4gXCJwb2RzXCI7IH1cblx0XHRwdWJsaWMgc3RhdGljIGdldCBSRVBMSUNBVElPTl9DT05UUk9MTEVSUygpOnN0cmluZyB7IHJldHVybiBcInJlcGxpY2F0aW9uY29udHJvbGxlcnNcIjsgfVxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IFJFU09VUkNFX1FVT1RBUygpOnN0cmluZyB7IHJldHVybiBcInJlc291cmNlcXVvdGFzXCI7IH1cblx0XHRwdWJsaWMgc3RhdGljIGdldCBPQVVUSF9DTElFTlRTKCk6c3RyaW5nIHsgcmV0dXJuIFwib2F1dGhjbGllbnRzXCI7IH1cblx0XHRwdWJsaWMgc3RhdGljIGdldCBTRUNSRVRTKCk6c3RyaW5nIHsgcmV0dXJuIFwic2VjcmV0c1wiOyB9XG5cdFx0cHVibGljIHN0YXRpYyBnZXQgU0VSVklDRVMoKTpzdHJpbmcgeyByZXR1cm4gXCJzZXJ2aWNlc1wiOyB9XG5cdFx0cHVibGljIHN0YXRpYyBnZXQgU0VSVklDRV9BQ0NPVU5UUygpOnN0cmluZyB7IHJldHVybiBcInNlcnZpY2VhY2NvdW50c1wiOyB9XG5cblx0XHRwdWJsaWMgc3RhdGljIGdldCBURU1QTEFURVMoKTpzdHJpbmcgeyByZXR1cm4gXCJ0ZW1wbGF0ZXNcIjsgfVxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IFJPVVRFUygpOnN0cmluZyB7IHJldHVybiBcInJvdXRlc1wiOyB9XG5cdFx0cHVibGljIHN0YXRpYyBnZXQgQlVJTERfQ09ORklHUygpOnN0cmluZyB7IHJldHVybiBcImJ1aWxkY29uZmlnc1wiOyB9XG5cdFx0cHVibGljIHN0YXRpYyBnZXQgQlVJTERTKCk6c3RyaW5nIHsgcmV0dXJuIFwiYnVpbGRzXCI7IH1cblx0XHRwdWJsaWMgc3RhdGljIGdldCBERVBMT1lNRU5UX0NPTkZJR1MoKTpzdHJpbmcgeyByZXR1cm4gXCJkZXBsb3ltZW50Y29uZmlnc1wiOyB9XG5cdFx0cHVibGljIHN0YXRpYyBnZXQgSU1BR0VfU1RSRUFNUygpOnN0cmluZyB7IHJldHVybiBcImltYWdlc3RyZWFtc1wiOyB9XG5cdFx0cHVibGljIHN0YXRpYyBnZXQgUE9MSUNJRVMoKTpzdHJpbmcgeyByZXR1cm4gXCJwb2xpY2llc1wiOyB9XG5cdFx0cHVibGljIHN0YXRpYyBnZXQgUE9MSUNZX0JJTkRJTkdTKCk6c3RyaW5nIHsgcmV0dXJuIFwicG9saWN5YmluZGluZ3NcIjsgfVxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IFBST0pFQ1RTKCk6c3RyaW5nIHsgcmV0dXJuIFwicHJvamVjdHNcIjsgfVxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IFJPTEVfQklORElOR1MoKTpzdHJpbmcgeyByZXR1cm4gXCJyb2xlYmluZGluZ3NcIjsgfVxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IFJPTEVTKCk6c3RyaW5nIHsgcmV0dXJuIFwicm9sZXNcIjsgfVxuXHR9XG5cbiAgZXhwb3J0IGNsYXNzIE5hbWVzcGFjZWRUeXBlcyB7XG4gICAgcHVibGljIHN0YXRpYyBnZXQgazhzVHlwZXMoKTpBcnJheTxzdHJpbmc+IHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIFdhdGNoVHlwZXMuRU5EUE9JTlRTLFxuICAgICAgICBXYXRjaFR5cGVzLkVWRU5UUyxcbiAgICAgICAgV2F0Y2hUeXBlcy5OT0RFUyxcbiAgICAgICAgV2F0Y2hUeXBlcy5QRVJTSVNURU5UX1ZPTFVNRVMsXG4gICAgICAgIFdhdGNoVHlwZXMuUEVSU0lTVEVOVF9WT0xVTUVfQ0xBSU1TLFxuICAgICAgICBXYXRjaFR5cGVzLlBPRFMsXG4gICAgICAgIFdhdGNoVHlwZXMuUkVQTElDQVRJT05fQ09OVFJPTExFUlMsXG4gICAgICAgIFdhdGNoVHlwZXMuUkVTT1VSQ0VfUVVPVEFTLFxuICAgICAgICBXYXRjaFR5cGVzLlBFUlNJU1RFTlRfVk9MVU1FUyxcbiAgICAgICAgV2F0Y2hUeXBlcy5TRUNSRVRTLFxuICAgICAgICBXYXRjaFR5cGVzLlNFUlZJQ0VTLFxuICAgICAgICBXYXRjaFR5cGVzLlNFUlZJQ0VfQUNDT1VOVFNcbiAgICAgIF07XG4gICAgfVxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IG9zVHlwZXMoKTpBcnJheTxzdHJpbmc+IHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIFdhdGNoVHlwZXMuVEVNUExBVEVTLFxuICAgICAgICBXYXRjaFR5cGVzLkJVSUxEX0NPTkZJR1MsXG4gICAgICAgIFdhdGNoVHlwZXMuUk9VVEVTLFxuICAgICAgICBXYXRjaFR5cGVzLkJVSUxEUyxcbiAgICAgICAgV2F0Y2hUeXBlcy5CVUlMRF9DT05GSUdTLFxuICAgICAgICBXYXRjaFR5cGVzLkRFUExPWU1FTlRfQ09ORklHUyxcbiAgICAgICAgV2F0Y2hUeXBlcy5JTUFHRV9TVFJFQU1TLFxuICAgICAgICBXYXRjaFR5cGVzLk9BVVRIX0NMSUVOVFMsXG4gICAgICAgIFdhdGNoVHlwZXMuUE9MSUNJRVMsXG4gICAgICAgIFdhdGNoVHlwZXMuUE9MSUNZX0JJTkRJTkdTLFxuICAgICAgICBXYXRjaFR5cGVzLlBST0pFQ1RTLFxuICAgICAgICAvL1dhdGNoVHlwZXMuUk9MRV9CSU5ESU5HUyxcbiAgICAgICAgLy9XYXRjaFR5cGVzLlJPTEVTXG4gICAgICBdO1xuICAgIH1cbiAgfVxuXHRcblx0ZXhwb3J0IGNsYXNzIFdhdGNoQWN0aW9ucyB7XG5cdFx0cHVibGljIHN0YXRpYyBnZXQgQU5ZKCk6c3RyaW5nIHsgcmV0dXJuIFwiKlwiOyB9XG5cdFx0cHVibGljIHN0YXRpYyBnZXQgQURERUQoKTpzdHJpbmcgeyByZXR1cm4gXCJBRERFRFwiOyB9XG5cdFx0cHVibGljIHN0YXRpYyBnZXQgTU9ESUZJRUQoKTpzdHJpbmcgeyByZXR1cm4gXCJNT0RJRklFRFwiOyB9XG5cdFx0cHVibGljIHN0YXRpYyBnZXQgREVMRVRFRCgpOnN0cmluZyB7IHJldHVybiBcIkRFTEVURURcIjsgfVxuXHR9XG5cdFxuXHRleHBvcnQgaW50ZXJmYWNlIE9iamVjdE1hcCB7XG5cdFx0W3VpZDpzdHJpbmddOiBhbnk7XHRcdFxuXHR9XG5cdFxuXHRleHBvcnQgaW50ZXJmYWNlIFdhdGNoZXJTZXJ2aWNlIHtcblx0XHRoYXNXZWJTb2NrZXQ6IGJvb2xlYW47XG5cdFx0YWRkQ3VzdG9taXplcjogKHR5cGU6IHN0cmluZywgY3VzdG9taXplcjogKG9iajphbnkpID0+IHZvaWQpID0+IHZvaWQ7XG5cdFx0Z2V0VHlwZXM6ICgpID0+IEFycmF5PHN0cmluZz47XG5cdFx0Z2V0TmFtZXNwYWNlOiAoKSA9PiBzdHJpbmc7XG5cdFx0c2V0TmFtZXNwYWNlOiAobmFtZXNwYWNlOiBzdHJpbmcpID0+IHZvaWQ7XG5cdFx0Z2V0T2JqZWN0czogKHR5cGU6IHN0cmluZykgPT4gQXJyYXk8YW55Pjtcblx0XHRnZXRPYmplY3RNYXA6ICh0eXBlOiBzdHJpbmcpID0+IE9iamVjdE1hcDtcblx0XHRhZGRBY3Rpb246ICh0eXBlOiBzdHJpbmcsIGFjdGlvbjogc3RyaW5nLCBmbjogKG9iajphbnkpID0+IHZvaWQpID0+IHZvaWQ7XG5cdFx0cmVnaXN0ZXJMaXN0ZW5lcjogKGZuOihvYmplY3RzOk9iamVjdE1hcCkgPT4gdm9pZCkgPT4gdm9pZDtcbiAgICByZWdpc3RlckN1c3RvbVVybEZ1bmN0aW9uOiAoa2luZDpzdHJpbmcsIHVybDooa2luZDpzdHJpbmcpID0+IHN0cmluZykgPT4gdm9pZDtcblx0fVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgS3ViZVBvZCB7XG4gICAgaWQ6c3RyaW5nO1xuICAgIG5hbWVzcGFjZTpzdHJpbmc7XG4gIH1cblxuXHRcbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSW50ZXJmYWNlcy50c1wiLz5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblxuICBleHBvcnQgdmFyIGNvbnRleHQgPSAnL2t1YmVybmV0ZXMnO1xuICBleHBvcnQgdmFyIGhhc2ggPSAnIycgKyBjb250ZXh0O1xuICBleHBvcnQgdmFyIGRlZmF1bHRSb3V0ZSA9IGhhc2ggKyAnL2FwcHMnO1xuICBleHBvcnQgdmFyIHBsdWdpbk5hbWUgPSAnS3ViZXJuZXRlcyc7XG4gIGV4cG9ydCB2YXIgcGx1Z2luUGF0aCA9ICdwbHVnaW5zL2t1YmVybmV0ZXMvJztcbiAgZXhwb3J0IHZhciB0ZW1wbGF0ZVBhdGggPSBwbHVnaW5QYXRoICsgJ2h0bWwvJztcbiAgZXhwb3J0IHZhciBsb2c6TG9nZ2luZy5Mb2dnZXIgPSBMb2dnZXIuZ2V0KHBsdWdpbk5hbWUpO1xuXG4gIGV4cG9ydCB2YXIga2VlcFBvbGxpbmdNb2RlbCA9IHRydWU7XG5cbiAgZXhwb3J0IHZhciBkZWZhdWx0SWNvblVybCA9IENvcmUudXJsKFwiL2ltZy9rdWJlcm5ldGVzLnN2Z1wiKTtcbiAgZXhwb3J0IHZhciBob3N0SWNvblVybCA9IENvcmUudXJsKFwiL2ltZy9ob3N0LnN2Z1wiKTtcblxuICAvLyB0aGlzIGdldHMgc2V0IGFzIGEgcHJlLWJvb3RzdHJhcCB0YXNrXG4gIGV4cG9ydCB2YXIgb3NDb25maWc6S3ViZXJuZXRlc0NvbmZpZyA9IHVuZGVmaW5lZDtcbiAgZXhwb3J0IHZhciBtYXN0ZXJVcmwgPSBcIlwiO1xuXG4gIGV4cG9ydCB2YXIgZGVmYXVsdEFwaVZlcnNpb24gPSBcInYxXCI7XG4gIGV4cG9ydCB2YXIgZGVmYXVsdE9TQXBpVmVyc2lvbiA9IFwidjFcIjtcbiAgZXhwb3J0IHZhciBsYWJlbEZpbHRlclRleHRTZXBhcmF0b3IgPSBcIixcIjtcblxuICBleHBvcnQgdmFyIGRlZmF1bHROYW1lc3BhY2UgPSBcImRlZmF1bHRcIjtcblxuICBleHBvcnQgdmFyIGFwcFN1ZmZpeCA9IFwiLmFwcFwiO1xuXG4gIC8vIGt1YmVybmV0ZXMgc2VydmljZSBuYW1lc1xuICBleHBvcnQgdmFyIGtpYmFuYVNlcnZpY2VOYW1lID0gXCJraWJhbmFcIjtcbiAgZXhwb3J0IHZhciBmYWJyaWM4Rm9yZ2VTZXJ2aWNlTmFtZSA9IFwiZmFicmljOC1mb3JnZVwiO1xuICBleHBvcnQgdmFyIGdvZ3NTZXJ2aWNlTmFtZSA9IFwiZ29nc1wiO1xuICBleHBvcnQgdmFyIGplbmtpbnNTZXJ2aWNlTmFtZSA9IFwiamVua2luc1wiO1xuICBleHBvcnQgdmFyIGFwaW1hblNlcnZpY2VOYW1lID0gJ2FwaW1hbic7XG4gIGV4cG9ydCB2YXIgaXNPcGVuU2hpZnQgPSB0cnVlO1xuXG4gIGV4cG9ydCB2YXIgc3NoU2VjcmV0RGF0YUtleXMgPSBbXCJzc2gta2V5XCIsIFwic3NoLWtleS5wdWJcIl07XG4gIGV4cG9ydCB2YXIgaHR0cHNTZWNyZXREYXRhS2V5cyA9IFtcInVzZXJuYW1lXCIsIFwicGFzc3dvcmRcIl07XG5cblxuICBleHBvcnQgZnVuY3Rpb24ga3ViZXJuZXRlc05hbWVzcGFjZVBhdGgoKSB7XG4gICAgdmFyIG5zID0gY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcbiAgICBpZiAobnMpIHtcbiAgICAgIHJldHVybiBcIi9uYW1lc3BhY2VzL1wiICsgbnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBhcGlQcmVmaXgoKSB7XG4gICAgdmFyIHByZWZpeCA9IENvcmUucGF0aEdldChvc0NvbmZpZywgWydhcGknLCAnazhzJywgJ3ByZWZpeCddKTtcbiAgICBpZiAoIXByZWZpeCkge1xuICAgICAgcHJlZml4ID0gJ2FwaSc7XG4gICAgfVxuICAgIHJldHVybiBDb3JlLnRyaW1MZWFkaW5nKHByZWZpeCwgJy8nKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBvc0FwaVByZWZpeCgpIHtcbiAgICB2YXIgcHJlZml4ID0gQ29yZS5wYXRoR2V0KG9zQ29uZmlnLCBbJ2FwaScsICdvcGVuc2hpZnQnLCAncHJlZml4J10pO1xuICAgIGlmICghcHJlZml4KSB7XG4gICAgICBwcmVmaXggPSAnb2FwaSc7XG4gICAgfVxuICAgIHZhciBhbnN3ZXIgPSBDb3JlLnRyaW1MZWFkaW5nKHByZWZpeCwgJy8nKTtcbiAgICBpZiAoIWlzT3BlblNoaWZ0KSB7XG4gICAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKGFwaVByZWZpeCgpLCBkZWZhdWx0T1NBcGlWZXJzaW9uLCBcInByb3h5XCIsIGt1YmVybmV0ZXNOYW1lc3BhY2VQYXRoKCksIFwic2VydmljZXMvdGVtcGxhdGVzXCIsIGFuc3dlcik7XG4gICAgfVxuICAgIHJldHVybiBhbnN3ZXI7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gbWFzdGVyQXBpVXJsKCkge1xuICAgIHJldHVybiBtYXN0ZXJVcmwgfHwgXCJcIjtcbiAgfVxuXG4gIC8qKiBXQVJOSU5HIC0gdGhpcyBleGNsdWRlcyB0aGUgaG9zdCBuYW1lIC0geW91IHByb2JhYmx5IHdhbnQgdG8gdXNlOiBrdWJlcm5ldGVzQXBpVXJsKCkgaW5zdGVhZCEhICovXG4gIGV4cG9ydCBmdW5jdGlvbiBrdWJlcm5ldGVzQXBpUHJlZml4KCkge1xuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oYXBpUHJlZml4KCksIGRlZmF1bHRBcGlWZXJzaW9uKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBvcGVuc2hpZnRBcGlQcmVmaXgoKSB7XG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihvc0FwaVByZWZpeCgpLCBkZWZhdWx0T1NBcGlWZXJzaW9uKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBwcmVmaXhGb3JUeXBlKHR5cGU6c3RyaW5nKSB7XG4gICAgaWYgKHR5cGUgPT09IFdhdGNoVHlwZXMuTkFNRVNQQUNFUykge1xuICAgICAgcmV0dXJuIGt1YmVybmV0ZXNBcGlQcmVmaXgoKTtcbiAgICB9XG4gICAgaWYgKF8uYW55KE5hbWVzcGFjZWRUeXBlcy5rOHNUeXBlcywgKHQpID0+IHQgPT09IHR5cGUpKSB7XG4gICAgICByZXR1cm4ga3ViZXJuZXRlc0FwaVByZWZpeCgpO1xuICAgIH1cbiAgICBpZiAoXy5hbnkoTmFtZXNwYWNlZFR5cGVzLm9zVHlwZXMsICh0KSA9PiB0ID09PSB0eXBlKSkge1xuICAgICAgcmV0dXJuIG9wZW5zaGlmdEFwaVByZWZpeCgpO1xuICAgIH1cbiAgICAvLyBsZXRzIGFzc3VtZSBpdHMgYW4gT3BlblNoaWZ0IGV4dGVuc2lvbiB0eXBlXG4gICAgcmV0dXJuIG9wZW5zaGlmdEFwaVByZWZpeCgpO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGt1YmVybmV0ZXNBcGlVcmwoKSB7XG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihtYXN0ZXJBcGlVcmwoKSwga3ViZXJuZXRlc0FwaVByZWZpeCgpKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBvcGVuc2hpZnRBcGlVcmwoKSB7XG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihtYXN0ZXJBcGlVcmwoKSwgb3BlbnNoaWZ0QXBpUHJlZml4KCkpO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIHJlc291cmNlc1VyaUZvcktpbmQodHlwZSwgbnMgPSBudWxsKSB7XG4gICAgaWYgKCFucykge1xuICAgICAgbnMgPSBjdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xuICAgIH1cbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKG1hc3RlckFwaVVybCgpLCBwcmVmaXhGb3JUeXBlKHR5cGUpLCBuYW1lc3BhY2VQYXRoRm9yS2luZCh0eXBlLCBucykpO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIHVyaVRlbXBsYXRlRm9yS3ViZXJuZXRlc0tpbmQodHlwZSkge1xuICAgIHZhciB1cmxUZW1wbGF0ZSA9ICcnO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBXYXRjaFR5cGVzLk5BTUVTUEFDRVM6XG4gICAgICBjYXNlIFwiTmFtZXNwYWNlc1wiOlxuICAgICAgICB1cmxUZW1wbGF0ZSA9IFVybEhlbHBlcnMuam9pbignbmFtZXNwYWNlcycpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgV2F0Y2hUeXBlcy5PQVVUSF9DTElFTlRTOlxuICAgICAgY2FzZSBcIk9BdXRoQ2xpZW50c1wiOlxuICAgICAgY2FzZSBcIk9BdXRoQ2xpZW50XCI6XG4gICAgICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oJ29hdXRoY2xpZW50cycpO1xuICAgICAgY2FzZSBXYXRjaFR5cGVzLlBST0pFQ1RTOlxuICAgICAgY2FzZSBcIlByb2plY3RzXCI6XG4gICAgICAgIHVybFRlbXBsYXRlID0gVXJsSGVscGVycy5qb2luKCdwcm9qZWN0cycpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHVybFRlbXBsYXRlID0gVXJsSGVscGVycy5qb2luKCduYW1lc3BhY2VzLzpuYW1lc3BhY2UnLCB0eXBlLCAnOmlkJyk7XG4gICAgfVxuICAgIHJldHVybiB1cmxUZW1wbGF0ZTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBuYW1lc3BhY2VQYXRoRm9yS2luZCh0eXBlLCBucykge1xuICAgIHZhciB1cmxUZW1wbGF0ZSA9ICcnO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBXYXRjaFR5cGVzLk5BTUVTUEFDRVM6XG4gICAgICBjYXNlIFwiTmFtZXNwYWNlc1wiOlxuICAgICAgY2FzZSBcIk5hbWVzcGFjZVwiOlxuICAgICAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKCduYW1lc3BhY2VzJyk7XG4gICAgICBjYXNlIFdhdGNoVHlwZXMuTk9ERVM6XG4gICAgICBjYXNlIFwiTm9kZXNcIjpcbiAgICAgIGNhc2UgXCJub2RlXCI6XG4gICAgICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oJ25vZGVzJyk7XG4gICAgICBjYXNlIFdhdGNoVHlwZXMuUFJPSkVDVFM6XG4gICAgICBjYXNlIFwiUHJvamVjdHNcIjpcbiAgICAgIGNhc2UgXCJQcm9qZWN0XCI6XG4gICAgICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oJ3Byb2plY3RzJyk7XG4gICAgICBjYXNlIFdhdGNoVHlwZXMuT0FVVEhfQ0xJRU5UUzpcbiAgICAgIGNhc2UgXCJPQXV0aENsaWVudHNcIjpcbiAgICAgIGNhc2UgXCJPQXV0aENsaWVudFwiOlxuICAgICAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKCdvYXV0aGNsaWVudHMnKTtcbiAgICAgIGNhc2UgV2F0Y2hUeXBlcy5QRVJTSVNURU5UX1ZPTFVNRVM6XG4gICAgICBjYXNlIFwiUGVyc2lzdGVudFZvbHVtZXNcIjpcbiAgICAgIGNhc2UgXCJQZXJzaXN0ZW50Vm9sdW1lXCI6XG4gICAgICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oJ3BlcnNpc3RlbnR2b2x1bWVzJyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKCduYW1lc3BhY2VzJywgbnMsIHR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZXZhbHVlIGZyb20gdGhlIGluamVjdG9yIGlmIGl0cyBhdmFpbGFibGUgb3IgbnVsbFxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIGluamVjdDxUPihuYW1lKTpUIHtcbiAgICB2YXIgaW5qZWN0b3IgPSBIYXd0aW9Db3JlLmluamVjdG9yO1xuICAgIHJldHVybiBpbmplY3RvciA/IGluamVjdG9yLmdldDxUPihuYW1lKSA6IG51bGw7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVzb3VyY2UodGhpbmc6c3RyaW5nLCB1cmxUZW1wbGF0ZTpzdHJpbmcsICRyZXNvdXJjZTogbmcucmVzb3VyY2UuSVJlc291cmNlU2VydmljZSwgS3ViZXJuZXRlc01vZGVsKSB7XG4gICAgdmFyIHByZWZpeCA9IHByZWZpeEZvclR5cGUodGhpbmcpO1xuICAgIGlmICghcHJlZml4KSB7XG4gICAgICBsb2cuZGVidWcoXCJJbnZhbGlkIHR5cGUgZ2l2ZW46IFwiLCB0aGluZyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgcGFyYW1zID0gPGFueT4ge1xuICAgICAgbmFtZXNwYWNlOiBjdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZVxuICAgIH1cbiAgICBzd2l0Y2ggKHRoaW5nKSB7XG4gICAgICBjYXNlIFdhdGNoVHlwZXMuTkFNRVNQQUNFUzpcbiAgICAgIGNhc2UgV2F0Y2hUeXBlcy5PQVVUSF9DTElFTlRTOlxuICAgICAgY2FzZSBXYXRjaFR5cGVzLk5PREVTOlxuICAgICAgY2FzZSBXYXRjaFR5cGVzLlBST0pFQ1RTOlxuICAgICAgY2FzZSBXYXRjaFR5cGVzLk9BVVRIX0NMSUVOVFM6XG4gICAgICBjYXNlIFdhdGNoVHlwZXMuUEVSU0lTVEVOVF9WT0xVTUVTOlxuICAgICAgcGFyYW1zID0ge307XG4gICAgfVxuXG4gICAgdmFyIHVybCA9IFVybEhlbHBlcnMuam9pbihtYXN0ZXJBcGlVcmwoKSwgcHJlZml4LCB1cmxUZW1wbGF0ZSk7XG4gICAgbG9nLmRlYnVnKFwiVXJsIGZvciBcIiwgdGhpbmcsIFwiOiBcIiwgdXJsKTtcbiAgICB2YXIgcmVzb3VyY2UgPSAkcmVzb3VyY2UodXJsLCBudWxsLCB7XG4gICAgICBxdWVyeTogeyBtZXRob2Q6ICdHRVQnLCBpc0FycmF5OiBmYWxzZSwgcGFyYW1zOiBwYXJhbXN9LFxuICAgICAgY3JlYXRlOiB7IG1ldGhvZDogJ1BPU1QnLCBwYXJhbXM6IHBhcmFtc30sXG4gICAgICBzYXZlOiB7IG1ldGhvZDogJ1BVVCcsIHBhcmFtczogcGFyYW1zfSxcbiAgICAgIGRlbGV0ZTogeyBtZXRob2Q6ICdERUxFVEUnLCBwYXJhbXM6IF8uZXh0ZW5kKHtcbiAgICAgICAgaWQ6ICdAaWQnXG4gICAgICB9LCBwYXJhbXMpfVxuICAgIH0pO1xuICAgIHJldHVybiByZXNvdXJjZTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBpbWFnZVJlcG9zaXRvcmllc1Jlc3RVUkwoKSB7XG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihvcGVuc2hpZnRBcGlVcmwoKSwga3ViZXJuZXRlc05hbWVzcGFjZVBhdGgoKSwgXCIvaW1hZ2VzdHJlYW1zXCIpO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGRlcGxveW1lbnRDb25maWdzUmVzdFVSTCgpIHtcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKG9wZW5zaGlmdEFwaVVybCgpLCBrdWJlcm5ldGVzTmFtZXNwYWNlUGF0aCgpLCBcIi9kZXBsb3ltZW50Y29uZmlnc1wiKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBidWlsZHNSZXN0VVJMKCkge1xuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4ob3BlbnNoaWZ0QXBpVXJsKCksIGt1YmVybmV0ZXNOYW1lc3BhY2VQYXRoKCksIFwiL2J1aWxkc1wiKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBidWlsZENvbmZpZ0hvb2tzUmVzdFVSTCgpIHtcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKG9wZW5zaGlmdEFwaVVybCgpLCBrdWJlcm5ldGVzTmFtZXNwYWNlUGF0aCgpLCBcIi9idWlsZGNvbmZpZ2hvb2tzXCIpO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQ29uZmlnc1Jlc3RVUkwoKSB7XG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihvcGVuc2hpZnRBcGlVcmwoKSwga3ViZXJuZXRlc05hbWVzcGFjZVBhdGgoKSwgXCIvYnVpbGRjb25maWdzXCIpO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIHJvdXRlc1Jlc3RVUkwoKSB7XG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihvcGVuc2hpZnRBcGlVcmwoKSwga3ViZXJuZXRlc05hbWVzcGFjZVBhdGgoKSwgXCIvcm91dGVzXCIpO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIHRlbXBsYXRlc1Jlc3RVUkwoKSB7XG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihvcGVuc2hpZnRBcGlVcmwoKSwga3ViZXJuZXRlc05hbWVzcGFjZVBhdGgoKSwgXCIvdGVtcGxhdGVzXCIpO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGdldE5hbWVzcGFjZShlbnRpdHkpIHtcbiAgICB2YXIgYW5zd2VyID0gQ29yZS5wYXRoR2V0KGVudGl0eSwgW1wibWV0YWRhdGFcIiwgXCJuYW1lc3BhY2VcIl0pO1xuICAgIHJldHVybiBhbnN3ZXIgPyBhbnN3ZXIgOiBjdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGdldExhYmVscyhlbnRpdHkpIHtcbiAgICB2YXIgYW5zd2VyID0gQ29yZS5wYXRoR2V0KGVudGl0eSwgW1wibWV0YWRhdGFcIiwgXCJsYWJlbHNcIl0pO1xuICAgIHJldHVybiBhbnN3ZXIgPyBhbnN3ZXIgOiB7fTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXROYW1lKGVudGl0eSkge1xuICAgIGlmIChhbmd1bGFyLmlzU3RyaW5nKGVudGl0eSkpIHtcbiAgICAgIHJldHVybiBlbnRpdHk7XG4gICAgfVxuICAgIHJldHVybiBDb3JlLnBhdGhHZXQoZW50aXR5LCBbXCJtZXRhZGF0YVwiLCBcIm5hbWVcIl0pIHx8IENvcmUucGF0aEdldChlbnRpdHksIFwibmFtZVwiKSB8fCBDb3JlLnBhdGhHZXQoZW50aXR5LCBcImlkXCIpO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGdldEtpbmQoZW50aXR5KSB7XG4gICAgcmV0dXJuIENvcmUucGF0aEdldChlbnRpdHksIFtcIm1ldGFkYXRhXCIsIFwia2luZFwiXSkgfHwgQ29yZS5wYXRoR2V0KGVudGl0eSwgXCJraW5kXCIpO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdG9yKGVudGl0eSkge1xuICAgIHJldHVybiBDb3JlLnBhdGhHZXQoZW50aXR5LCBbXCJzcGVjXCIsIFwic2VsZWN0b3JcIl0pO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGdldEhvc3QocG9kKSB7XG4gICAgcmV0dXJuIENvcmUucGF0aEdldChwb2QsIFtcInNwZWNcIiwgXCJob3N0XCJdKSB8fCBDb3JlLnBhdGhHZXQocG9kLCBbXCJzcGVjXCIsIFwibm9kZU5hbWVcIl0pIHx8IENvcmUucGF0aEdldChwb2QsIFtcInN0YXR1c1wiLCBcImhvc3RJUFwiXSk7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZ2V0U3RhdHVzKHBvZCkge1xuICAgIHJldHVybiBDb3JlLnBhdGhHZXQocG9kLCBbXCJzdGF0dXNcIiwgXCJwaGFzZVwiXSk7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZ2V0UG9ydHMoc2VydmljZSkge1xuICAgIHJldHVybiBDb3JlLnBhdGhHZXQoc2VydmljZSwgW1wic3BlY1wiLCBcInBvcnRzXCJdKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRDcmVhdGlvblRpbWVzdGFtcChlbnRpdHkpIHtcbiAgICByZXR1cm4gQ29yZS5wYXRoR2V0KGVudGl0eSwgW1wibWV0YWRhdGFcIiwgXCJjcmVhdGlvblRpbWVzdGFtcFwiXSk7XG4gIH07XG5cbiAgLy92YXIgZmFicmljRG9tYWluID0gRmFicmljLmpteERvbWFpbjtcbiAgdmFyIGZhYnJpY0RvbWFpbiA9IFwiaW8uZmFicmljOFwiO1xuICBleHBvcnQgdmFyIG1iZWFuID0gZmFicmljRG9tYWluICsgXCI6dHlwZT1LdWJlcm5ldGVzXCI7XG4gIGV4cG9ydCB2YXIgbWFuYWdlck1CZWFuID0gZmFicmljRG9tYWluICsgXCI6dHlwZT1LdWJlcm5ldGVzTWFuYWdlclwiO1xuICBleHBvcnQgdmFyIGFwcFZpZXdNQmVhbiA9IGZhYnJpY0RvbWFpbiArIFwiOnR5cGU9QXBwVmlld1wiO1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBpc0t1YmVybmV0ZXMod29ya3NwYWNlPykge1xuICAgIC8vIHJldHVybiB3b3Jrc3BhY2UudHJlZUNvbnRhaW5zRG9tYWluQW5kUHJvcGVydGllcyhmYWJyaWNEb21haW4sIHt0eXBlOiBcIkt1YmVybmV0ZXNcIn0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzS3ViZXJuZXRlc1RlbXBsYXRlTWFuYWdlcih3b3Jrc3BhY2U/KSB7XG4gICAgLy8gcmV0dXJuIHdvcmtzcGFjZS50cmVlQ29udGFpbnNEb21haW5BbmRQcm9wZXJ0aWVzKGZhYnJpY0RvbWFpbiwge3R5cGU6IFwiS3ViZXJuZXRlc1RlbXBsYXRlTWFuYWdlclwifSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gaXNBcHBWaWV3KHdvcmtzcGFjZT8pIHtcbiAgICAvLyByZXR1cm4gd29ya3NwYWNlLnRyZWVDb250YWluc0RvbWFpbkFuZFByb3BlcnRpZXMoZmFicmljRG9tYWluLCB7dHlwZTogXCJBcHBWaWV3XCJ9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRTdHJpcHBlZFBhdGhOYW1lKCk6c3RyaW5nIHtcbiAgICB2YXIgcGF0aE5hbWUgPSBDb3JlLnRyaW1MZWFkaW5nKCh0aGlzLiRsb2NhdGlvbi5wYXRoKCkgfHwgJy8nKSwgXCIjXCIpO1xuICAgIHBhdGhOYW1lID0gcGF0aE5hbWUucmVwbGFjZSgvXlxcLy8sICcnKTtcbiAgICByZXR1cm4gcGF0aE5hbWU7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gbGlua0NvbnRhaW5zKC4uLndvcmRzOlN0cmluZ1tdKTpib29sZWFuIHtcbiAgICB2YXIgcGF0aE5hbWUgPSB0aGlzLmdldFN0cmlwcGVkUGF0aE5hbWUoKTtcbiAgICByZXR1cm4gXy5ldmVyeSh3b3JkcywgKHdvcmQ6c3RyaW5nKSA9PiBwYXRoTmFtZS5pbmRleE9mKHdvcmQpICE9PSAwKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gbGluayBpcyBhY3RpdmUuIFRoZSBsaW5rIGNhbiBvbWl0IHRoZSBsZWFkaW5nICMgb3IgLyBpZiBuZWNlc3NhcnkuXG4gICAqIFRoZSBxdWVyeSBwYXJhbWV0ZXJzIG9mIHRoZSBVUkwgYXJlIGlnbm9yZWQgaW4gdGhlIGNvbXBhcmlzb24uXG4gICAqIEBtZXRob2QgaXNMaW5rQWN0aXZlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBocmVmXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgaWYgdGhlIGdpdmVuIGxpbmsgaXMgYWN0aXZlXG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24gaXNMaW5rQWN0aXZlKGhyZWY6c3RyaW5nKTpib29sZWFuIHtcbiAgICAvLyBsZXRzIHRyaW0gdGhlIGxlYWRpbmcgc2xhc2hcbiAgICB2YXIgcGF0aE5hbWUgPSBnZXRTdHJpcHBlZFBhdGhOYW1lKCk7XG5cbiAgICB2YXIgbGluayA9IENvcmUudHJpbUxlYWRpbmcoaHJlZiwgXCIjXCIpO1xuICAgIGxpbmsgPSBsaW5rLnJlcGxhY2UoL15cXC8vLCAnJyk7XG4gICAgLy8gc3RyaXAgYW55IHF1ZXJ5IGFyZ3VtZW50c1xuICAgIHZhciBpZHggPSBsaW5rLmluZGV4T2YoJz8nKTtcbiAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgIGxpbmsgPSBsaW5rLnN1YnN0cmluZygwLCBpZHgpO1xuICAgIH1cbiAgICBpZiAoIXBhdGhOYW1lLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGxpbmsgPT09IHBhdGhOYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXy5zdGFydHNXaXRoKHBhdGhOYW1lLCBsaW5rKTtcbiAgICB9XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gc2V0SnNvbigkc2NvcGUsIGlkLCBjb2xsZWN0aW9uKSB7XG4gICAgJHNjb3BlLmlkID0gaWQ7XG4gICAgaWYgKCEkc2NvcGUuZmV0Y2hlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWlkKSB7XG4gICAgICAkc2NvcGUuanNvbiA9ICcnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWNvbGxlY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGl0ZW0gPSBjb2xsZWN0aW9uLmZpbmQoKGl0ZW0pID0+IHsgcmV0dXJuIGdldE5hbWUoaXRlbSkgPT09IGlkOyB9KTtcbiAgICBpZiAoaXRlbSkge1xuICAgICAgJHNjb3BlLmpzb24gPSBhbmd1bGFyLnRvSnNvbihpdGVtLCB0cnVlKTtcbiAgICAgICRzY29wZS5pdGVtID0gaXRlbTtcbiAgICB9IGVsc2Uge1xuICAgICAgJHNjb3BlLmlkID0gdW5kZWZpbmVkO1xuICAgICAgJHNjb3BlLmpzb24gPSAnJztcbiAgICAgICRzY29wZS5pdGVtID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsYWJlbHMgdGV4dCBzdHJpbmcgdXNpbmcgdGhlIDxjb2RlPmtleTE9dmFsdWUxLGtleTI9dmFsdWUyLC4uLi48L2NvZGU+IGZvcm1hdFxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc1RvU3RyaW5nKGxhYmVscywgc2VwZXJhdG9yVGV4dCA9IGxhYmVsRmlsdGVyVGV4dFNlcGFyYXRvcikge1xuICAgIHZhciBhbnN3ZXIgPSBcIlwiO1xuICAgIGFuZ3VsYXIuZm9yRWFjaChsYWJlbHMsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICB2YXIgc2VwYXJhdG9yID0gYW5zd2VyID8gc2VwZXJhdG9yVGV4dCA6IFwiXCI7XG5cbiAgICAgIGFuc3dlciArPSBzZXBhcmF0b3IgKyBrZXkgKyBcIj1cIiArIHZhbHVlO1xuICAgIH0pO1xuICAgIHJldHVybiBhbnN3ZXI7XG4gIH1cblxuXG4gIGV4cG9ydCBmdW5jdGlvbiBpbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpIHtcbiAgICAkc2NvcGUuYmFzZVVyaSA9IENvcmUudHJpbVRyYWlsaW5nKENvcmUudXJsKFwiL1wiKSB8fCBcIlwiLCBcIi9cIikgfHwgXCJcIjtcblxuICAgIHZhciBpbmplY3RvciA9IEhhd3Rpb0NvcmUuaW5qZWN0b3I7XG5cbiAgICBmdW5jdGlvbiBoYXNTZXJ2aWNlKG5hbWUpIHtcbiAgICAgIGlmIChpbmplY3Rvcikge1xuICAgICAgICB2YXIgU2VydmljZVJlZ2lzdHJ5ID0gaW5qZWN0b3IuZ2V0PGFueT4oXCJTZXJ2aWNlUmVnaXN0cnlcIik7XG4gICAgICAgIGlmIChTZXJ2aWNlUmVnaXN0cnkpIHtcbiAgICAgICAgICByZXR1cm4gU2VydmljZVJlZ2lzdHJ5Lmhhc1NlcnZpY2UobmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAkc2NvcGUuaGFzU2VydmljZUtpYmFuYSA9ICgpID0+IGhhc1NlcnZpY2Uoa2liYW5hU2VydmljZU5hbWUpO1xuICAgICRzY29wZS5oYXNTZXJ2aWNlR29ncyA9ICgpID0+IGhhc1NlcnZpY2UoZ29nc1NlcnZpY2VOYW1lKTtcbiAgICAkc2NvcGUuaGFzU2VydmljZUZvcmdlID0gKCkgPT4gaGFzU2VydmljZShmYWJyaWM4Rm9yZ2VTZXJ2aWNlTmFtZSk7XG4gICAgJHNjb3BlLmhhc1NlcnZpY2VBcGltYW4gPSAoKSA9PiBoYXNTZXJ2aWNlKGFwaW1hblNlcnZpY2VOYW1lKTtcblxuICAgICRzY29wZS52aWV3VGVtcGxhdGVzID0gKCkgPT4ge1xuICAgICAgdmFyIHJldHVyblRvID0gJGxvY2F0aW9uLnVybCgpO1xuICAgICAgJGxvY2F0aW9uLnBhdGgoJy9rdWJlcm5ldGVzL3RlbXBsYXRlcycpLnNlYXJjaCh7J3JldHVyblRvJzogcmV0dXJuVG99KTtcbiAgICB9O1xuXG4gICAgJHNjb3BlLm5hbWVzcGFjZSA9ICRyb3V0ZVBhcmFtcy5uYW1lc3BhY2UgfHwgJHNjb3BlLm5hbWVzcGFjZSB8fCBLdWJlcm5ldGVzU3RhdGUuc2VsZWN0ZWROYW1lc3BhY2UgfHwgZGVmYXVsdE5hbWVzcGFjZTtcbiAgICBpZiAoJHNjb3BlLm5hbWVzcGFjZSAhPSBLdWJlcm5ldGVzU3RhdGUuc2VsZWN0ZWROYW1lc3BhY2UpIHtcbiAgICAgIEt1YmVybmV0ZXNTdGF0ZS5zZWxlY3RlZE5hbWVzcGFjZSA9ICRzY29wZS5uYW1lc3BhY2U7XG5cbiAgICAgIC8vIGxldHMgc2hvdyBwYWdlIGlzIGdvaW5nIHRvIHJlbG9hZFxuICAgICAgaWYgKCRzY29wZS5tb2RlbCkge1xuICAgICAgICAkc2NvcGUubW9kZWwuZmV0Y2hlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICBLdWJlcm5ldGVzLnNldEN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCRzY29wZS5uYW1lc3BhY2UpO1xuXG4gICAgJHNjb3BlLmZvcmdlRW5hYmxlZCA9IGlzRm9yZ2VFbmFibGVkKCk7XG5cbiAgICAkc2NvcGUucHJvamVjdElkID0gJHJvdXRlUGFyYW1zW1wicHJvamVjdFwiXSB8fCAkc2NvcGUucHJvamVjdElkIHx8ICRzY29wZS5pZDtcbiAgICB2YXIgc2hvd1Byb2plY3ROYXZCYXJzID0gZmFsc2U7XG4gICAgaWYgKCRzY29wZS5wcm9qZWN0SWQgJiYgc2hvd1Byb2plY3ROYXZCYXJzKSB7XG4gICAgICAkc2NvcGUuYnJlYWRjcnVtYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVQcm9qZWN0QnJlYWRjcnVtYnMoJHNjb3BlLnByb2plY3RJZCk7XG4gICAgICAkc2NvcGUuc3ViVGFiQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZVByb2plY3RTdWJOYXZCYXJzKCRzY29wZS5wcm9qZWN0SWQsIG51bGwsICRzY29wZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICRzY29wZS5icmVhZGNydW1iQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZUVudmlyb25tZW50QnJlYWRjcnVtYnMoJHNjb3BlLCAkbG9jYXRpb24sICRyb3V0ZVBhcmFtcyk7XG4gICAgICAkc2NvcGUuc3ViVGFiQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZUVudmlyb25tZW50U3ViTmF2QmFycygkc2NvcGUsICRsb2NhdGlvbiwgJHJvdXRlUGFyYW1zKTtcbiAgICB9XG5cbiAgICBpZiAoJHNjb3BlLnByb2plY3RJZCkge1xuICAgICAgJHNjb3BlLiRwcm9qZWN0TGluayA9IERldmVsb3Blci5wcm9qZWN0TGluaygkc2NvcGUucHJvamVjdElkKTtcbiAgICB9XG5cbiAgICAkc2NvcGUubGluayA9IChocmVmKSA9PiB7XG4gICAgICBpZiAoIWhyZWYpIHtcbiAgICAgICAgcmV0dXJuIGhyZWY7XG4gICAgICB9XG4gICAgICBpZiAoJHNjb3BlLiRwcm9qZWN0TGluaykge1xuICAgICAgICByZXR1cm4gRGV2ZWxvcGVyLm5hbWVzcGFjZUxpbmsoJHNjb3BlLCAkcm91dGVQYXJhbXMsIGhyZWYucmVwbGFjZSgvXlxcL2t1YmVybmV0ZXMvLCAnJykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGhyZWY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJHNjb3BlLmNvZGVNaXJyb3JPcHRpb25zID0ge1xuICAgICAgbGluZVdyYXBwaW5nIDogdHJ1ZSxcbiAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLFxuICAgICAgcmVhZE9ubHk6ICdub2N1cnNvcicsXG4gICAgICBtb2RlOiB7bmFtZTogXCJqYXZhc2NyaXB0XCIsIGpzb246IHRydWV9XG4gICAgfTtcblxuICAgICRzY29wZS5yZXNpemVEaWFsb2cgPSB7XG4gICAgICBjb250cm9sbGVyOiBudWxsLFxuICAgICAgbmV3UmVwbGljYXM6IDAsXG4gICAgICBkaWFsb2c6IG5ldyBVSS5EaWFsb2coKSxcbiAgICAgIG9uT2s6ICgpID0+IHtcbiAgICAgICAgdmFyIHJlc2l6ZURpYWxvZyA9ICRzY29wZS5yZXNpemVEaWFsb2c7XG4gICAgICAgIHJlc2l6ZURpYWxvZy5kaWFsb2cuY2xvc2UoKTtcbiAgICAgICAgcmVzaXplQ29udHJvbGxlcigkaHR0cCwgS3ViZXJuZXRlc0FwaVVSTCwgcmVzaXplRGlhbG9nLmNvbnRyb2xsZXIsIHJlc2l6ZURpYWxvZy5uZXdSZXBsaWNhcywgKCkgPT4geyBsb2cuZGVidWcoXCJ1cGRhdGVkIG51bWJlciBvZiByZXBsaWNhc1wiKTsgfSlcbiAgICAgIH0sXG4gICAgICBvcGVuOiAoY29udHJvbGxlcikgPT4ge1xuICAgICAgICB2YXIgcmVzaXplRGlhbG9nID0gJHNjb3BlLnJlc2l6ZURpYWxvZztcbiAgICAgICAgcmVzaXplRGlhbG9nLmNvbnRyb2xsZXIgPSBjb250cm9sbGVyO1xuICAgICAgICByZXNpemVEaWFsb2cubmV3UmVwbGljYXMgPSBDb3JlLnBhdGhHZXQoY29udHJvbGxlciwgW1wic3RhdHVzXCIsIFwicmVwbGljYXNcIl0pO1xuICAgICAgICByZXNpemVEaWFsb2cuZGlhbG9nLm9wZW4oKTtcblxuICAgICAgICAkdGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgJCgnI3JlcGxpY2FzJykuZm9jdXMoKTtcbiAgICAgICAgfSwgNTApO1xuICAgICAgfSxcbiAgICAgIGNsb3NlOiAoKSA9PiB7XG4gICAgICAgICRzY29wZS5yZXNpemVEaWFsb2cuZGlhbG9nLmNsb3NlKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgICRzY29wZS50cmlnZ2VyQnVpbGQgPSAoYnVpbGRDb25maWcpID0+IHtcbiAgICAgIHZhciB1cmwgPSBidWlsZENvbmZpZy4kdHJpZ2dlclVybDtcbiAgICAgIGNvbnNvbGUubG9nKFwidHJpZ2dlcmluZyBidWlsZCBhdCB1cmw6IFwiICsgdXJsKTtcbiAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgLy92YXIgZGF0YSA9IHt9O1xuICAgICAgICB2YXIgZGF0YSA9IG51bGw7XG4gICAgICAgIHZhciBjb25maWcgPSB7XG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgbmFtZSA9IENvcmUucGF0aEdldChidWlsZENvbmZpZywgW1wibWV0YWRhdGFcIiwgXCJuYW1lXCJdKTtcbiAgICAgICAgQ29yZS5ub3RpZmljYXRpb24oJ2luZm8nLCBcIlRyaWdnZXJpbmcgYnVpbGQgXCIgKyBuYW1lKTtcbiAgICAgICAgJGh0dHAucG9zdCh1cmwsIGRhdGEsIGNvbmZpZykuXG4gICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwidHJpZ2dlciB3b3JrZWQhIGdvdCBkYXRhIFwiICsgYW5ndWxhci50b0pzb24oZGF0YSwgdHJ1ZSkpO1xuICAgICAgICAgICAgLy8gVE9ETyBzaG91bGQgd2Ugc2hvdyBzb21lIGxpbmsgdG8gdGhlIGJ1aWxkXG4gICAgICAgICAgICBDb3JlLm5vdGlmaWNhdGlvbignaW5mbycsIFwiQnVpbGRpbmcgXCIgKyBuYW1lKTtcbiAgICAgICAgICB9KS5cbiAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGxvYWQgXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XG4gICAgICAgICAgICBDb3JlLm5vdGlmaWNhdGlvbignZXJyb3InLCBcIkZhaWxlZCB0byB0cmlnZ2VyIGJ1aWxkIGZvciBcIiArIG5hbWUgKyBcIi4gUmV0dXJuZWQgY29kZTogXCIgKyBzdGF0dXMgKyBcIiBcIiArIGRhdGEpO1xuICAgICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyB1cGRhdGUgdGhlIFVSTCBpZiB0aGUgZmlsdGVyIGlzIGNoYW5nZWRcbiAgICAkc2NvcGUuJHdhdGNoKFwidGFibGVDb25maWcuZmlsdGVyT3B0aW9ucy5maWx0ZXJUZXh0XCIsICh0ZXh0KSA9PiB7XG4gICAgICAvL3ZhciBmaWx0ZXJUZXh0ID0gS3ViZXJuZXRlcy5maW5kVmFsZU9mTGFiZWxzKHRleHQpO1xuICAgICAgJGxvY2F0aW9uLnNlYXJjaChcInFcIiwgdGV4dCk7XG4gICAgfSk7XG5cbiAgICAkc2NvcGUuJG9uKFwibGFiZWxGaWx0ZXJVcGRhdGVcIiwgKCRldmVudCwgdGV4dCkgPT4ge1xuICAgICAgdmFyIGZpbHRlck9wdGlvbnMgPSAoJHNjb3BlLnRhYmxlQ29uZmlnIHx8IHt9KS5maWx0ZXJPcHRpb25zIHx8IHt9O1xuICAgICAgdmFyIGN1cnJlbnRGaWx0ZXIgPSBmaWx0ZXJPcHRpb25zLmZpbHRlclRleHQ7XG4gICAgICBpZiAoQ29yZS5pc0JsYW5rKGN1cnJlbnRGaWx0ZXIpKSB7XG4gICAgICAgIGZpbHRlck9wdGlvbnMuZmlsdGVyVGV4dCA9IHRleHQ7XG4gICAgICB9ZWxzZXtcbiAgICAgICAgdmFyIGV4cHJlc3Npb25zID0gY3VycmVudEZpbHRlci5zcGxpdCgvXFxzKy8pO1xuICAgICAgICBpZiAoZXhwcmVzc2lvbnMuaW5kZXhPZih0ZXh0KSAhPT0gLTEpIHtcbiAgICAgICAgICAvLyBsZXRzIGV4Y2x1ZGUgdGhpcyBmaWx0ZXIgZXhwcmVzc2lvblxuICAgICAgICAgIGV4cHJlc3Npb25zID0gZXhwcmVzc2lvbnMucmVtb3ZlKHRleHQpO1xuICAgICAgICAgIGZpbHRlck9wdGlvbnMuZmlsdGVyVGV4dCA9IGV4cHJlc3Npb25zLmpvaW4oXCIgXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpbHRlck9wdGlvbnMuZmlsdGVyVGV4dCA9IGN1cnJlbnRGaWx0ZXIgKyBcIiBcIiArIHRleHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgICRzY29wZS5pZCA9IHVuZGVmaW5lZDtcbiAgICB9KTtcblxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBwb2RzIHRoYXQgYXJlIHJlYWR5XG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24gcmVhZHlQb2RDb3VudChzZXJ2aWNlKSB7XG4gICAgdmFyIGNvdW50ID0gMDtcbiAgICBhbmd1bGFyLmZvckVhY2goKHNlcnZpY2UgfHwge30pLiRwb2RzLCAocG9kKT0+IHtcbiAgICAgIGlmIChwb2QuJHJlYWR5KSB7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNvdW50O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHNlcnZpY2UgbGluayBVUkwgZm9yIGVpdGhlciB0aGUgc2VydmljZSBuYW1lIG9yIHRoZSBzZXJ2aWNlIG9iamVjdFxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIHNlcnZpY2VMaW5rVXJsKHNlcnZpY2UsIGh0dHBPbmx5ID0gZmFsc2UpIHtcbiAgICBpZiAoYW5ndWxhci5pc09iamVjdChzZXJ2aWNlKSkge1xuICAgICAgdmFyIHBvcnRhbElQID0gc2VydmljZS4kaG9zdDtcbiAgICAgIC8vIGxldHMgYXNzdW1lIG5vIGN1c3RvbSBwb3J0IGZvciBub3cgZm9yIGV4dGVybmFsIHJvdXRlc1xuICAgICAgdmFyIHBvcnQgPSBudWxsO1xuICAgICAgdmFyIHByb3RvY29sID0gXCJodHRwOi8vXCI7XG4gICAgICB2YXIgc3BlYyA9IHNlcnZpY2Uuc3BlYztcbiAgICAgIGlmIChzcGVjKSB7XG4gICAgICAgIGlmICghcG9ydGFsSVApIHtcbiAgICAgICAgICBwb3J0YWxJUCA9IHNwZWMucG9ydGFsSVA7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGhhc0h0dHBzID0gZmFsc2U7XG4gICAgICAgIHZhciBoYXNIdHRwID0gZmFsc2U7XG4gICAgICAgIGFuZ3VsYXIuZm9yRWFjaChzcGVjLnBvcnRzLCAocG9ydFNwZWMpID0+IHtcbiAgICAgICAgICB2YXIgcCA9IHBvcnRTcGVjLnBvcnQ7XG4gICAgICAgICAgaWYgKHApIHtcbiAgICAgICAgICAgIGlmIChwID09PSA0NDMpIHtcbiAgICAgICAgICAgICAgaGFzSHR0cHMgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwID09PSA4MCkge1xuICAgICAgICAgICAgICBoYXNIdHRwID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcG9ydCkge1xuICAgICAgICAgICAgICBwb3J0ID0gcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIWhhc0h0dHBzICYmICFoYXNIdHRwICYmIHBvcnQpIHtcbiAgICAgICAgICAvLyBsZXRzIHRyZWF0IDgwODAgYXMgaHR0cCB3aGljaCBpcyBhIGNvbW1vbiBzZXJ2aWNlIHRvIGV4cG9ydFxuICAgICAgICAgIGlmIChwb3J0ID09PSA4MDgwKSB7XG4gICAgICAgICAgICBoYXNIdHRwID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHBvcnQgPT09IDg0NDMpIHtcbiAgICAgICAgICAgIGhhc0h0dHBzID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwb3J0YWxJUCkge1xuICAgICAgICBpZiAoaGFzSHR0cHMpIHtcbiAgICAgICAgICByZXR1cm4gXCJodHRwczovL1wiICsgcG9ydGFsSVA7XG4gICAgICAgIH0gZWxzZSBpZiAoaGFzSHR0cCkge1xuICAgICAgICAgIHJldHVybiBcImh0dHA6Ly9cIiArIHBvcnRhbElQO1xuICAgICAgICB9IGVsc2UgaWYgKCFodHRwT25seSkge1xuICAgICAgICAgIGlmIChwb3J0KSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvdG9jb2wgKyBwb3J0YWxJUCArIFwiOlwiICsgcG9ydCArIFwiL1wiO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvdG9jb2wgKyBwb3J0YWxJUDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHNlcnZpY2UpIHtcbiAgICAgIHZhciBzZXJ2aWNlSWQgPSBzZXJ2aWNlLnRvU3RyaW5nKCk7XG4gICAgICBpZiAoc2VydmljZUlkKSB7XG4gICAgICAgIHZhciBTZXJ2aWNlUmVnaXN0cnkgPSBnZXRTZXJ2aWNlUmVnaXN0cnkoKTtcbiAgICAgICAgaWYgKFNlcnZpY2VSZWdpc3RyeSkge1xuICAgICAgICAgIHJldHVybiBTZXJ2aWNlUmVnaXN0cnkuc2VydmljZUxpbmsoc2VydmljZUlkKSB8fCBcIlwiO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xuICB9XG5cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mIGNvdW50ZXJzIGZvciB0aGUgcG9kQ291bnRlcnMgb2JqZWN0XG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24gcG9kQ291bnRlclRvdGFsKCRwb2RDb3VudGVycykge1xuICAgIHZhciBhbnN3ZXIgPSAwO1xuICAgIGlmICgkcG9kQ291bnRlcnMpIHtcbiAgICAgIGFuZ3VsYXIuZm9yRWFjaChbXCJyZWFkeVwiLCBcInZhbGlkXCIsIFwid2FpdGluZ1wiLCBcImVycm9yXCJdLCAobmFtZSkgPT4ge1xuICAgICAgICB2YXIgdmFsdWUgPSAkcG9kQ291bnRlcnNbbmFtZV0gfHwgMDtcbiAgICAgICAgYW5zd2VyICs9IHZhbHVlO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhbnN3ZXI7XG4gIH1cblxuICAvKipcbiAgICogR2l2ZW4gdGhlIGxpc3Qgb2YgcG9kcyBsZXRzIGl0ZXJhdGUgdGhyb3VnaCB0aGVtIGFuZCBmaW5kIGFsbCBwb2RzIG1hdGNoaW5nIHRoZSBzZWxlY3RvclxuICAgKiBhbmQgcmV0dXJuIGNvdW50ZXJzIGJhc2VkIG9uIHRoZSBzdGF0dXMgb2YgdGhlIHBvZFxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBvZENvdW50ZXJzKHNlbGVjdG9yLCBwb2RzLCBvdXRwdXRQb2RzID0gW10sIHBvZExpbmtRdWVyeSA9IG51bGwsIHBvZExpbmtVcmwgPSBudWxsKSB7XG4gICAgaWYgKCFwb2RMaW5rVXJsKSB7XG4gICAgICBwb2RMaW5rVXJsID0gXCIva3ViZXJuZXRlcy9wb2RzXCI7XG4gICAgfVxuICAgIHZhciBmaWx0ZXJGbjtcbiAgICBpZiAoYW5ndWxhci5pc0Z1bmN0aW9uKHNlbGVjdG9yKSkge1xuICAgICAgZmlsdGVyRm4gPSBzZWxlY3RvcjtcbiAgICB9IGVsc2Uge1xuICAgICAgZmlsdGVyRm4gPSAocG9kKSA9PiBzZWxlY3Rvck1hdGNoZXMoc2VsZWN0b3IsIGdldExhYmVscyhwb2QpKTtcbiAgICB9XG4gICAgdmFyIGFuc3dlciA9IHtcbiAgICAgIHBvZHNMaW5rOiBcIlwiLFxuICAgICAgcmVhZHk6IDAsXG4gICAgICB2YWxpZDogMCxcbiAgICAgIHdhaXRpbmc6IDAsXG4gICAgICBlcnJvcjogMFxuICAgIH07XG4gICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICBpZiAoIXBvZExpbmtRdWVyeSkge1xuICAgICAgICBwb2RMaW5rUXVlcnkgPSBLdWJlcm5ldGVzLmxhYmVsc1RvU3RyaW5nKHNlbGVjdG9yLCBcIiBcIik7XG4gICAgICB9XG4gICAgICBhbnN3ZXIucG9kc0xpbmsgPSBwb2RMaW5rVXJsICsgXCI/cT1cIiArIGVuY29kZVVSSUNvbXBvbmVudChwb2RMaW5rUXVlcnkpO1xuICAgICAgYW5ndWxhci5mb3JFYWNoKHBvZHMsIHBvZCA9PiB7XG4gICAgICAgIGlmIChmaWx0ZXJGbihwb2QpKSB7XG4gICAgICAgICAgb3V0cHV0UG9kcy5wdXNoKHBvZCk7XG4gICAgICAgICAgdmFyIHN0YXR1cyA9IGdldFN0YXR1cyhwb2QpO1xuICAgICAgICAgIGlmIChzdGF0dXMpIHtcbiAgICAgICAgICAgIHZhciBsb3dlciA9IHN0YXR1cy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgaWYgKGxvd2VyLnN0YXJ0c1dpdGgoXCJydW5cIikpIHtcbiAgICAgICAgICAgICAgaWYgKGlzUmVhZHkocG9kKSkge1xuICAgICAgICAgICAgICAgIGFuc3dlci5yZWFkeSArPSAxO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFuc3dlci52YWxpZCArPSAxO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxvd2VyLnN0YXJ0c1dpdGgoXCJ3YWl0XCIpIHx8IGxvd2VyLnN0YXJ0c1dpdGgoXCJwZW5kXCIpKSB7XG4gICAgICAgICAgICAgIGFuc3dlci53YWl0aW5nICs9IDE7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxvd2VyLnN0YXJ0c1dpdGgoXCJ0ZXJtXCIpIHx8IGxvd2VyLnN0YXJ0c1dpdGgoXCJlcnJvclwiKSB8fCBsb3dlci5zdGFydHNXaXRoKFwiZmFpbFwiKSkge1xuICAgICAgICAgICAgICBhbnN3ZXIuZXJyb3IgKz0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYW5zd2VyLmVycm9yICs9IDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFuc3dlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgZ2l2ZW4ganNvbiBpbnRvIGFuIGFycmF5IG9mIGl0ZW1zLiBJZiB0aGUganNvbiBjb250YWlucyBhIG5lc3RlZCBzZXQgb2YgaXRlbXMgdGhlbiB0aGF0IGlzIHNvcnRlZDsgc28gdGhhdCBzZXJ2aWNlc1xuICAgKiBhcmUgcHJvY2Vzc2VkIGZpcnN0OyB0aGVuIHR1cm5lZCBpbnRvIGFuIGFycmF5LiBPdGhlcndpc2UgdGhlIGpzb24gaXMgcHV0IGludG8gYW4gYXJyYXkgc28gaXQgY2FuIGJlIHByb2Nlc3NlZCBwb2x5bW9ycGhpY2FsbHlcbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0S3ViZXJuZXRlc0pzb25Ub0l0ZW1zKGpzb24pIHtcbiAgICB2YXIgaXRlbXMgPSBqc29uLml0ZW1zO1xuICAgIGlmIChhbmd1bGFyLmlzQXJyYXkoaXRlbXMpKSB7XG4gICAgICAvLyBUT0RPIHdlIGNvdWxkIGNoZWNrIGZvciBMaXN0IG9yIENvbmZpZyB0eXBlcyBoZXJlIGFuZCB3YXJuIGlmIG5vdFxuXG4gICAgICAvLyBzb3J0IHRoZSBzZXJ2aWNlcyBmaXJzdFxuICAgICAgdmFyIGFuc3dlciA9IFtdO1xuICAgICAgaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICBpZiAoaXRlbS5raW5kID09PSBcIlNlcnZpY2VcIikge1xuICAgICAgICAgIGFuc3dlci5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgaWYgKGl0ZW0ua2luZCAhPT0gXCJTZXJ2aWNlXCIpIHtcbiAgICAgICAgICBhbnN3ZXIucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gYW5zd2VyO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW2pzb25dO1xuICAgIH1cbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBpc1YxYmV0YTFPcjIoKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRBcGlWZXJzaW9uID09PSBcInYxYmV0YTFcIiB8fCBkZWZhdWx0QXBpVmVyc2lvbiA9PT0gXCJ2MWJldGEyXCI7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGxpbmsgdG8gdGhlIGRldGFpbCBwYWdlIGZvciB0aGUgZ2l2ZW4gZW50aXR5XG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24gZW50aXR5UGFnZUxpbmsob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgZnVuY3Rpb24gZ2V0TGluayhlbnRpdHkpIHtcbiAgICAgICAgdmFyIHZpZXdMaW5rID0gZW50aXR5W1wiJHZpZXdMaW5rXCJdO1xuICAgICAgICBpZiAodmlld0xpbmspIHtcbiAgICAgICAgICByZXR1cm4gdmlld0xpbms7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGlkID0gZ2V0TmFtZShlbnRpdHkpO1xuICAgICAgICB2YXIga2luZCA9IGdldEtpbmQoZW50aXR5KTtcbiAgICAgICAgaWYgKGtpbmQgJiYgaWQpIHtcbiAgICAgICAgICB2YXIgcGF0aCA9IGtpbmQuc3Vic3RyaW5nKDAsIDEpLnRvTG93ZXJDYXNlKCkgKyBraW5kLnN1YnN0cmluZygxKSArIFwic1wiO1xuICAgICAgICAgIHZhciBuYW1lc3BhY2UgPSBnZXROYW1lc3BhY2UoZW50aXR5KTtcbiAgICAgICAgICBpZiAobmFtZXNwYWNlICYmICFpc0lnbm9yZU5hbWVzcGFjZUtpbmQoa2luZCkpIHtcbiAgICAgICAgICAgIHJldHVybiBDb3JlLnVybChVcmxIZWxwZXJzLmpvaW4oJy9rdWJlcm5ldGVzL25hbWVzcGFjZScsIG5hbWVzcGFjZSwgcGF0aCwgaWQpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIENvcmUudXJsKFVybEhlbHBlcnMuam9pbignL2t1YmVybmV0ZXMnLCBwYXRoLCBpZCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIGJhc2VMaW5rID0gZ2V0TGluayhvYmopO1xuICAgICAgaWYgKCFIYXd0aW9Db3JlLmluamVjdG9yIHx8ICFiYXNlTGluaykge1xuICAgICAgICByZXR1cm4gYmFzZUxpbms7XG4gICAgICB9XG4gICAgICB2YXIgJHJvdXRlUGFyYW1zID0gSGF3dGlvQ29yZS5pbmplY3Rvci5nZXQ8bmcucm91dGUuSVJvdXRlUGFyYW1zU2VydmljZT4oJyRyb3V0ZVBhcmFtcycpO1xuICAgICAgdmFyIHByb2plY3RJZCA9ICRyb3V0ZVBhcmFtc1sncHJvamVjdCddIHx8ICRyb3V0ZVBhcmFtc1sncHJvamVjdCddO1xuICAgICAgaWYgKCFwcm9qZWN0SWQpIHtcbiAgICAgICAgcmV0dXJuIGJhc2VMaW5rO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihEZXZlbG9wZXIucHJvamVjdExpbmsocHJvamVjdElkKSwgYmFzZUxpbmsucmVwbGFjZSgvXlxcL2t1YmVybmV0ZXNcXC8vLCAnJykpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG5cbiAgZXhwb3J0IGZ1bmN0aW9uIHJlc291cmNlS2luZFRvVXJpUGF0aChraW5kKSB7XG4gICAgdmFyIGtpbmRQYXRoID0ga2luZC50b0xvd2VyQ2FzZSgpICsgXCJzXCI7XG4gICAgaWYgKGtpbmRQYXRoID09PSBcInJlcGxpY2F0aW9uQ29udHJvbGxlcnNcIiAmJiAhaXNWMWJldGExT3IyKCkpIHtcbiAgICAgIGtpbmRQYXRoID0gXCJyZXBsaWNhdGlvbmNvbnRyb2xsZXJzXCI7XG4gICAgfVxuICAgIHJldHVybiBraW5kUGF0aDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzSWdub3JlTmFtZXNwYWNlS2luZChraW5kKSB7XG4gICAgcmV0dXJuIGtpbmQgPT09IFwiSG9zdFwiIHx8IGtpbmQgPT09IFwiTWluaW9uXCI7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcm9vdCBVUkwgZm9yIHRoZSBraW5kXG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24ga3ViZXJuZXRlc1VybEZvcktpbmQoS3ViZXJuZXRlc0FwaVVSTCwga2luZCwgbmFtZXNwYWNlID0gbnVsbCwgcGF0aCA9IG51bGwpIHtcbiAgICB2YXIgcGF0aFNlZ21lbnQgPSBcIlwiO1xuICAgIGlmIChwYXRoKSB7XG4gICAgICBwYXRoU2VnbWVudCA9IFwiL1wiICsgQ29yZS50cmltTGVhZGluZyhwYXRoLCBcIi9cIik7XG4gICAgfVxuICAgIHZhciBraW5kUGF0aCA9IHJlc291cmNlS2luZFRvVXJpUGF0aChraW5kKTtcbiAgICB2YXIgaWdub3JlTmFtZXNwYWNlID0gaXNJZ25vcmVOYW1lc3BhY2VLaW5kKGtpbmQpO1xuICAgIGlmIChpc1YxYmV0YTFPcjIoKSB8fCBpZ25vcmVOYW1lc3BhY2UpIHtcbiAgICAgIHZhciBwb3N0Zml4ID0gXCJcIjtcbiAgICAgIGlmIChuYW1lc3BhY2UgJiYgIWlnbm9yZU5hbWVzcGFjZSkge1xuICAgICAgICBwb3N0Zml4ID0gXCI/bmFtZXNwYWNlPVwiICsgbmFtZXNwYWNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihLdWJlcm5ldGVzQXBpVVJMLCBraW5kUGF0aCwgcGF0aFNlZ21lbnQsIHBvc3RmaXgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKEt1YmVybmV0ZXNBcGlVUkwsIFwiL25hbWVzcGFjZXMvXCIsIG5hbWVzcGFjZSAsIGtpbmRQYXRoLCBwYXRoU2VnbWVudCk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBiYXNlIFVSTCBmb3IgdGhlIGtpbmQgb2Yga3ViZXJuZXRlcyByZXNvdXJjZSBvciBudWxsIGlmIGl0IGNhbm5vdCBiZSBmb3VuZFxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIGt1YmVybmV0ZXNVcmxGb3JJdGVtS2luZChLdWJlcm5ldGVzQXBpVVJMLCBqc29uKSB7XG4gICAgdmFyIGtpbmQgPSBqc29uLmtpbmQ7XG4gICAgaWYgKGtpbmQpIHtcbiAgICAgIHJldHVybiBrdWJlcm5ldGVzVXJsRm9yS2luZChLdWJlcm5ldGVzQXBpVVJMLCBraW5kLCBqc29uLm5hbWVzcGFjZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZy53YXJuKFwiSWdub3JpbmcgbWlzc2luZyBraW5kIFwiICsga2luZCArIFwiIGZvciBrdWJlcm5ldGVzIGpzb246IFwiICsgYW5ndWxhci50b0pzb24oanNvbikpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGt1YmVybmV0ZXNQcm94eVVybEZvclNlcnZpY2UoS3ViZXJuZXRlc0FwaVVSTCwgc2VydmljZSwgcGF0aCA9IG51bGwpIHtcbiAgICB2YXIgcGF0aFNlZ21lbnQgPSBcIlwiO1xuICAgIGlmIChwYXRoKSB7XG4gICAgICBwYXRoU2VnbWVudCA9IFwiL1wiICsgQ29yZS50cmltTGVhZGluZyhwYXRoLCBcIi9cIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhdGhTZWdtZW50ID0gXCIvXCI7XG4gICAgfVxuICAgIHZhciBuYW1lc3BhY2UgPSBnZXROYW1lc3BhY2Uoc2VydmljZSk7XG4gICAgaWYgKGlzVjFiZXRhMU9yMigpKSB7XG4gICAgICB2YXIgcG9zdGZpeCA9IFwiP25hbWVzcGFjZT1cIiArIG5hbWVzcGFjZTtcbiAgICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oS3ViZXJuZXRlc0FwaVVSTCwgXCIvcHJveHlcIiwgIGt1YmVybmV0ZXNOYW1lc3BhY2VQYXRoKCksIFwiL3NlcnZpY2VzL1wiICsgZ2V0TmFtZShzZXJ2aWNlKSArIHBhdGhTZWdtZW50ICsgcG9zdGZpeCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oS3ViZXJuZXRlc0FwaVVSTCwgXCIvcHJveHkvbmFtZXNwYWNlcy9cIiwgbmFtZXNwYWNlLCBcIi9zZXJ2aWNlcy9cIiArIGdldE5hbWUoc2VydmljZSkgKyBwYXRoU2VnbWVudCk7XG4gICAgfVxuICB9XG5cblxuICBleHBvcnQgZnVuY3Rpb24ga3ViZXJuZXRlc1Byb3h5VXJsRm9yU2VydmljZUN1cnJlbnROYW1lc3BhY2Uoc2VydmljZSwgcGF0aCA9IG51bGwpIHtcbiAgICB2YXIgYXBpUHJlZml4ID0gVXJsSGVscGVycy5qb2luKGt1YmVybmV0ZXNBcGlVcmwoKSk7XG4gICAgcmV0dXJuIGt1YmVybmV0ZXNQcm94eVVybEZvclNlcnZpY2UoYXBpUHJlZml4LCBzZXJ2aWNlLCBwYXRoKTtcblxuICB9XG4gIGV4cG9ydCBmdW5jdGlvbiBidWlsZENvbmZpZ1Jlc3RVcmwoaWQpIHtcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKGJ1aWxkQ29uZmlnc1Jlc3RVUkwoKSwgaWQpO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGRlcGxveW1lbnRDb25maWdSZXN0VXJsKGlkKSB7XG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihkZXBsb3ltZW50Q29uZmlnc1Jlc3RVUkwoKSwgaWQpO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGltYWdlUmVwb3NpdG9yeVJlc3RVcmwoaWQpIHtcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKGltYWdlUmVwb3NpdG9yaWVzUmVzdFVSTCgpLCBpZCk7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gYnVpbGRSZXN0VXJsKGlkKSB7XG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihidWlsZHNSZXN0VVJMKCksIGlkKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBidWlsZExvZ3NSZXN0VXJsKGlkKSB7XG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihidWlsZHNSZXN0VVJMKCksIGlkLCBcImxvZ1wiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHRoZSBnaXZlbiBhcHBsaWNhdGlvbiBKU09OXG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24gcnVuQXBwKCRsb2NhdGlvbiwgJHNjb3BlLCAkaHR0cCwgS3ViZXJuZXRlc0FwaVVSTCwganNvbiwgbmFtZSA9IFwiQXBwXCIsIG9uU3VjY2Vzc0ZuID0gbnVsbCwgbmFtZXNwYWNlID0gbnVsbCwgb25Db21wbGV0ZUZuID0gbnVsbCkge1xuICAgIGlmIChqc29uKSB7XG4gICAgICBpZiAoYW5ndWxhci5pc1N0cmluZyhqc29uKSkge1xuICAgICAgICBqc29uID0gYW5ndWxhci5mcm9tSnNvbihqc29uKTtcbiAgICAgIH1cbiAgICAgIG5hbWUgPSBuYW1lIHx8IFwiQXBwXCI7XG4gICAgICB2YXIgcG9zdGZpeCA9IG5hbWVzcGFjZSA/IFwiIGluIG5hbWVzcGFjZSBcIiArIG5hbWVzcGFjZSA6IFwiXCI7XG4gICAgICBDb3JlLm5vdGlmaWNhdGlvbignaW5mbycsIFwiUnVubmluZyBcIiArIG5hbWUgKyBwb3N0Zml4KTtcblxuICAgICAgdmFyIGl0ZW1zID0gY29udmVydEt1YmVybmV0ZXNKc29uVG9JdGVtcyhqc29uKTtcbiAgICAgIGFuZ3VsYXIuZm9yRWFjaChpdGVtcywgKGl0ZW0pID0+IHtcbiAgICAgICAgdmFyIHVybCA9IGt1YmVybmV0ZXNVcmxGb3JJdGVtS2luZChLdWJlcm5ldGVzQXBpVVJMLCBpdGVtKTtcbiAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgICRodHRwLnBvc3QodXJsLCBpdGVtKS5cbiAgICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcIkdvdCBzdGF0dXM6IFwiICsgc3RhdHVzICsgXCIgb24gdXJsOiBcIiArIHVybCArIFwiIGRhdGE6IFwiICsgZGF0YSArIFwiIGFmdGVyIHBvc3Rpbmc6IFwiICsgYW5ndWxhci50b0pzb24oaXRlbSkpO1xuICAgICAgICAgICAgICBpZiAoYW5ndWxhci5pc0Z1bmN0aW9uKG9uQ29tcGxldGVGbikpIHtcbiAgICAgICAgICAgICAgICBvbkNvbXBsZXRlRm4oKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgICAgICAgfSkuXG4gICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICB2YXIgbWVzc2FnZSA9IG51bGw7XG4gICAgICAgICAgICBpZiAoYW5ndWxhci5pc09iamVjdChkYXRhKSkge1xuICAgICAgICAgICAgICBtZXNzYWdlID0gZGF0YS5tZXNzYWdlO1xuICAgICAgICAgICAgICB2YXIgcmVhc29uID0gZGF0YS5yZWFzb247XG4gICAgICAgICAgICAgIGlmIChyZWFzb24gPT09IFwiQWxyZWFkeUV4aXN0c1wiKSB7XG4gICAgICAgICAgICAgICAgLy8gbGV0cyBpZ25vcmUgZHVwbGljYXRlc1xuICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcImVudGl0eSBhbHJlYWR5IGV4aXN0cyBhdCBcIiArIHVybCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgbWVzc2FnZSA9IFwiRmFpbGVkIHRvIFBPU1QgdG8gXCIgKyB1cmwgKyBcIiBnb3Qgc3RhdHVzOiBcIiArIHN0YXR1cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIHNhdmUgXCIgKyB1cmwgKyBcIiBzdGF0dXM6IFwiICsgc3RhdHVzICsgXCIgcmVzcG9uc2U6IFwiICsgYW5ndWxhci50b0pzb24oZGF0YSwgdHJ1ZSkpO1xuICAgICAgICAgICAgQ29yZS5ub3RpZmljYXRpb24oJ2Vycm9yJywgbWVzc2FnZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIHBvZCBpcyBydW5uaW5nXG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24gaXNSdW5uaW5nKHBvZEN1cnJlbnRTdGF0ZSkge1xuICAgIHZhciBzdGF0dXMgPSAocG9kQ3VycmVudFN0YXRlIHx8IHt9KS5waGFzZTtcbiAgICBpZiAoc3RhdHVzKSB7XG4gICAgICB2YXIgbG93ZXIgPSBzdGF0dXMudG9Mb3dlckNhc2UoKTtcbiAgICAgIHJldHVybiBsb3dlci5zdGFydHNXaXRoKFwicnVuXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgbGFiZWxzIG9iamVjdCBoYXMgYWxsIG9mIHRoZSBrZXkvdmFsdWUgcGFpcnMgZnJvbSB0aGUgc2VsZWN0b3JcbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiBzZWxlY3Rvck1hdGNoZXMoc2VsZWN0b3IsIGxhYmVscykge1xuICAgIGlmIChhbmd1bGFyLmlzT2JqZWN0KGxhYmVscykpIHtcbiAgICAgIHZhciBhbnN3ZXIgPSB0cnVlO1xuICAgICAgdmFyIGNvdW50ID0gMDtcbiAgICAgIGFuZ3VsYXIuZm9yRWFjaChzZWxlY3RvciwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgY291bnQrKztcbiAgICAgICAgaWYgKGFuc3dlciAmJiBsYWJlbHNba2V5XSAhPT0gdmFsdWUpIHtcbiAgICAgICAgICBhbnN3ZXIgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gYW5zd2VyICYmIGNvdW50ID4gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzZXJ2aWNlIHJlZ2lzdHJ5XG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24gZ2V0U2VydmljZVJlZ2lzdHJ5KCkge1xuICAgIHZhciBpbmplY3RvciA9IEhhd3Rpb0NvcmUuaW5qZWN0b3I7XG4gICAgcmV0dXJuIGluamVjdG9yID8gaW5qZWN0b3IuZ2V0PGFueT4oXCJTZXJ2aWNlUmVnaXN0cnlcIikgOiBudWxsO1xuICB9XG5cblxuICAvKipcbiAgICogUmV0dXJucyBhIGxpbmsgdG8gdGhlIGtpYmFuYSBsb2dzIHdlYiBhcHBsaWNhdGlvblxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIGtpYmFuYUxvZ3NMaW5rKFNlcnZpY2VSZWdpc3RyeSkge1xuICAgIHZhciBsaW5rID0gU2VydmljZVJlZ2lzdHJ5LnNlcnZpY2VMaW5rKGtpYmFuYVNlcnZpY2VOYW1lKTtcbiAgICBpZiAobGluaykge1xuICAgICAgaWYgKCFsaW5rLmVuZHNXaXRoKFwiL1wiKSkge1xuICAgICAgICBsaW5rICs9IFwiL1wiO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxpbmsgKyBcIiMvZGFzaGJvYXJkL0ZhYnJpYzhcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIG9wZW5Mb2dzRm9yUG9kcyhTZXJ2aWNlUmVnaXN0cnksICR3aW5kb3csIG5hbWVzcGFjZSwgcG9kcykge1xuICAgIHZhciBsaW5rID0ga2liYW5hTG9nc0xpbmsoU2VydmljZVJlZ2lzdHJ5KTtcbiAgICBpZiAobGluaykge1xuICAgICAgdmFyIHF1ZXJ5ID0gXCJcIjtcbiAgICAgIHZhciBjb3VudCA9IDA7XG4gICAgICBhbmd1bGFyLmZvckVhY2gocG9kcywgKGl0ZW0pID0+IHtcbiAgICAgICAgdmFyIGlkID0gZ2V0TmFtZShpdGVtKTtcbiAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgdmFyIHNwYWNlID0gcXVlcnkgPyBcIiBPUiBcIiA6IFwiXCI7XG4gICAgICAgICAgY291bnQrKztcbiAgICAgICAgICBxdWVyeSArPSBzcGFjZSArICdcIicgKyBpZCArICdcIic7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKHF1ZXJ5KSB7XG4gICAgICAgIGlmIChjb3VudCA+IDEpIHtcbiAgICAgICAgICBxdWVyeSA9IFwiKFwiICsgcXVlcnkgKyBcIilcIjtcbiAgICAgICAgfVxuICAgICAgICBxdWVyeSA9ICdrdWJlcm5ldGVzLm5hbWVzcGFjZV9uYW1lOlwiJyArIG5hbWVzcGFjZSArICdcIiBBTkQga3ViZXJuZXRlcy5wb2RfbmFtZTonICsgcXVlcnk7XG4gICAgICAgIGxpbmsgKz0gXCI/X2E9KHF1ZXJ5OihxdWVyeV9zdHJpbmc6KHF1ZXJ5OidcIiArIHF1ZXJ5ICsgXCInKSkpXCI7XG4gICAgICAgIHZhciBuZXdXaW5kb3cgPSAkd2luZG93Lm9wZW4obGluaywgXCJ2aWV3TG9nc1wiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gcmVzaXplQ29udHJvbGxlcigkaHR0cCwgS3ViZXJuZXRlc0FwaVVSTCwgcmVwbGljYXRpb25Db250cm9sbGVyLCBuZXdSZXBsaWNhcywgb25Db21wbGV0ZUZuID0gbnVsbCkge1xuICAgIHZhciBpZCA9IGdldE5hbWUocmVwbGljYXRpb25Db250cm9sbGVyKTtcbiAgICB2YXIgbmFtZXNwYWNlID0gZ2V0TmFtZXNwYWNlKHJlcGxpY2F0aW9uQ29udHJvbGxlcikgfHwgXCJcIjtcbiAgICB2YXIgdXJsID0ga3ViZXJuZXRlc1VybEZvcktpbmQoS3ViZXJuZXRlc0FwaVVSTCwgXCJSZXBsaWNhdGlvbkNvbnRyb2xsZXJcIiwgbmFtZXNwYWNlLCBpZCk7XG4gICAgJGh0dHAuZ2V0KHVybCkuXG4gICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIHZhciBkZXNpcmVkU3RhdGUgPSBkYXRhLnNwZWM7XG4gICAgICAgICAgaWYgKCFkZXNpcmVkU3RhdGUpIHtcbiAgICAgICAgICAgIGRlc2lyZWRTdGF0ZSA9IHt9O1xuICAgICAgICAgICAgZGF0YS5zcGVjID0gZGVzaXJlZFN0YXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZXNpcmVkU3RhdGUucmVwbGljYXMgPSBuZXdSZXBsaWNhcztcbiAgICAgICAgICAkaHR0cC5wdXQodXJsLCBkYXRhKS5cbiAgICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcInVwZGF0ZWQgY29udHJvbGxlciBcIiArIHVybCk7XG4gICAgICAgICAgICAgIGlmIChhbmd1bGFyLmlzRnVuY3Rpb24ob25Db21wbGV0ZUZuKSkge1xuICAgICAgICAgICAgICAgIG9uQ29tcGxldGVGbigpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS5cbiAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIHNhdmUgXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pLlxuICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGxvYWQgXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XG4gICAgICB9KTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBzdGF0dXNUZXh0VG9Dc3NDbGFzcyh0ZXh0LCByZWFkeSA9IGZhbHNlKSB7XG4gICAgaWYgKHRleHQpIHtcbiAgICAgIHZhciBsb3dlciA9IHRleHQudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChsb3dlci5zdGFydHNXaXRoKFwicnVuXCIpIHx8IGxvd2VyLnN0YXJ0c1dpdGgoXCJva1wiKSkge1xuICAgICAgICBpZiAoIXJlYWR5KSB7XG4gICAgICAgICAgcmV0dXJuIFwiZmEgZmEtc3Bpbm5lciBmYS1zcGluIGdyZWVuXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICdmYSBmYS1wbGF5LWNpcmNsZSBncmVlbic7XG4gICAgICB9IGVsc2UgaWYgKGxvd2VyLnN0YXJ0c1dpdGgoXCJ3YWl0XCIpIHx8IGxvd2VyLnN0YXJ0c1dpdGgoXCJwZW5kXCIpKSB7XG4gICAgICAgIHJldHVybiAnZmEgZmEtZG93bmxvYWQnO1xuICAgICAgfSBlbHNlIGlmIChsb3dlci5zdGFydHNXaXRoKFwidGVybVwiKSB8fCBsb3dlci5zdGFydHNXaXRoKFwiZXJyb3JcIikgfHwgbG93ZXIuc3RhcnRzV2l0aChcImZhaWxcIikpIHtcbiAgICAgICAgcmV0dXJuICdmYSBmYS1vZmYgb3JhbmdlJztcbiAgICAgIH0gZWxzZSBpZiAobG93ZXIuc3RhcnRzV2l0aChcInN1Y2NlZWRlZFwiKSkge1xuICAgICAgICByZXR1cm4gJ2ZhIGZhLWNoZWNrLWNpcmNsZS1vIGdyZWVuJztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICdmYSBmYS1xdWVzdGlvbiByZWQnO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIHBvZFN0YXR1cyhwb2QpIHtcbiAgICByZXR1cm4gZ2V0U3RhdHVzKHBvZCk7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gaXNSZWFkeShwb2QpIHtcbiAgICB2YXIgc3RhdHVzID0gcG9kLnN0YXR1cyB8fCB7fTtcbiAgICB2YXIgYW5zd2VyID0gZmFsc2U7XG4gICAgYW5ndWxhci5mb3JFYWNoKHN0YXR1cy5jb25kaXRpb25zLCAoY29uZGl0aW9uKSA9PiB7XG4gICAgICB2YXIgdCA9IGNvbmRpdGlvbi50eXBlO1xuICAgICAgaWYgKHQgJiYgdCA9PT0gXCJSZWFkeVwiKSB7XG4gICAgICAgIHZhciBzdGF0dXMgPSBjb25kaXRpb24uc3RhdHVzO1xuICAgICAgICBpZiAoc3RhdHVzID09PSBcIlRydWVcIikge1xuICAgICAgICAgIGFuc3dlciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gYW5zd2VyO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFwcFZpZXdQb2RDb3VudGVycyhhcHBWaWV3KSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgdmFyIG1hcCA9IHt9O1xuICAgIHZhciBwb2RzID0gYXBwVmlldy5wb2RzO1xuICAgIHZhciBsb3dlc3REYXRlID0gbnVsbDtcbiAgICBhbmd1bGFyLmZvckVhY2gocG9kcywgcG9kID0+IHtcbiAgICAgIHZhciBzZWxlY3RvciA9IGdldExhYmVscyhwb2QpO1xuICAgICAgdmFyIHNlbGVjdG9yVGV4dCA9IEt1YmVybmV0ZXMubGFiZWxzVG9TdHJpbmcoc2VsZWN0b3IsIFwiIFwiKTtcbiAgICAgIHZhciBhbnN3ZXIgPSBtYXBbc2VsZWN0b3JdO1xuICAgICAgaWYgKCFhbnN3ZXIpIHtcbiAgICAgICAgYW5zd2VyID0ge1xuICAgICAgICAgIGxhYmVsVGV4dDogc2VsZWN0b3JUZXh0LFxuICAgICAgICAgIHBvZHNMaW5rOiBVcmxIZWxwZXJzLmpvaW4oXCIva3ViZXJuZXRlcy9uYW1lc3BhY2UvXCIsIHBvZC5tZXRhZGF0YS5uYW1lc3BhY2UsIFwicG9kcz9xPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHNlbGVjdG9yVGV4dCkpLFxuICAgICAgICAgIHZhbGlkOiAwLFxuICAgICAgICAgIHdhaXRpbmc6IDAsXG4gICAgICAgICAgZXJyb3I6IDBcbiAgICAgICAgfTtcbiAgICAgICAgbWFwW3NlbGVjdG9yXSA9IGFuc3dlcjtcbiAgICAgICAgYXJyYXkucHVzaChhbnN3ZXIpO1xuICAgICAgfVxuICAgICAgdmFyIHN0YXR1cyA9IChwb2RTdGF0dXMocG9kKSB8fCBcIkVycm9yXCIpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAoc3RhdHVzLnN0YXJ0c1dpdGgoXCJydW5cIikgfHwgc3RhdHVzLnN0YXJ0c1dpdGgoXCJva1wiKSkge1xuICAgICAgICBhbnN3ZXIudmFsaWQgKz0gMTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdHVzLnN0YXJ0c1dpdGgoXCJ3YWl0XCIpIHx8IHN0YXR1cy5zdGFydHNXaXRoKFwicHduZFwiKSkge1xuICAgICAgICBhbnN3ZXIud2FpdGluZyArPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYW5zd2VyLmVycm9yICs9IDE7XG4gICAgICB9XG4gICAgICB2YXIgY3JlYXRpb25UaW1lc3RhbXAgPSBnZXRDcmVhdGlvblRpbWVzdGFtcChwb2QpO1xuICAgICAgaWYgKGNyZWF0aW9uVGltZXN0YW1wKSB7XG4gICAgICAgIHZhciBkID0gbmV3IERhdGUoY3JlYXRpb25UaW1lc3RhbXApO1xuICAgICAgICBpZiAoIWxvd2VzdERhdGUgfHwgZCA8IGxvd2VzdERhdGUpIHtcbiAgICAgICAgICBsb3dlc3REYXRlID0gZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGFwcFZpZXcuJGNyZWF0aW9uRGF0ZSA9IGxvd2VzdERhdGU7XG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFwcFZpZXdTZXJ2aWNlVmlld3MoYXBwVmlldykge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHZhciBwb2RzID0gYXBwVmlldy5wb2RzO1xuICAgIGFuZ3VsYXIuZm9yRWFjaChwb2RzLCBwb2QgPT4ge1xuICAgICAgdmFyIGlkID0gZ2V0TmFtZShwb2QpO1xuICAgICAgaWYgKGlkKSB7XG4gICAgICAgIHZhciBhYmJyZXYgPSBpZDtcbiAgICAgICAgdmFyIGlkeCA9IGlkLmluZGV4T2YoXCItXCIpO1xuICAgICAgICBpZiAoaWR4ID4gMSkge1xuICAgICAgICAgIGFiYnJldiA9IGlkLnN1YnN0cmluZygwLCBpZHgpO1xuICAgICAgICB9XG4gICAgICAgIHBvZC5pZEFiYnJldiA9IGFiYnJldjtcbiAgICAgIH1cbiAgICAgIHBvZC5zdGF0dXNDbGFzcyA9IHN0YXR1c1RleHRUb0Nzc0NsYXNzKHBvZFN0YXR1cyhwb2QpLCBpc1JlYWR5KHBvZCkpO1xuICAgIH0pO1xuXG4gICAgdmFyIHNlcnZpY2VzID0gYXBwVmlldy5zZXJ2aWNlcyB8fCBbXTtcbiAgICB2YXIgcmVwbGljYXRpb25Db250cm9sbGVycyA9IGFwcFZpZXcucmVwbGljYXRpb25Db250cm9sbGVycyB8fCBbXTtcbiAgICB2YXIgc2l6ZSA9IE1hdGgubWF4KHNlcnZpY2VzLmxlbmd0aCwgcmVwbGljYXRpb25Db250cm9sbGVycy5sZW5ndGgsIDEpO1xuICAgIHZhciBhcHBOYW1lID0gYXBwVmlldy4kaW5mby5uYW1lO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICB2YXIgc2VydmljZSA9IHNlcnZpY2VzW2ldO1xuICAgICAgdmFyIHJlcGxpY2F0aW9uQ29udHJvbGxlciA9IHJlcGxpY2F0aW9uQ29udHJvbGxlcnNbaV07XG4gICAgICB2YXIgY29udHJvbGxlcklkID0gZ2V0TmFtZShyZXBsaWNhdGlvbkNvbnRyb2xsZXIpO1xuICAgICAgdmFyIG5hbWUgPSBnZXROYW1lKHNlcnZpY2UpIHx8IGNvbnRyb2xsZXJJZDtcbiAgICAgIHZhciBhZGRyZXNzID0gQ29yZS5wYXRoR2V0KHNlcnZpY2UsIFtcInNwZWNcIiwgXCJwb3J0YWxJUFwiXSk7XG4gICAgICBpZiAoIW5hbWUgJiYgcG9kcy5sZW5ndGgpIHtcbiAgICAgICAgbmFtZSA9IHBvZHNbMF0uaWRBYmJyZXY7XG4gICAgICB9XG4gICAgICBpZiAoIWFwcFZpZXcuJGluZm8ubmFtZSkge1xuICAgICAgICBhcHBWaWV3LiRpbmZvLm5hbWUgPSBuYW1lO1xuICAgICAgfVxuICAgICAgaWYgKCFhcHBWaWV3LmlkICYmIHBvZHMubGVuZ3RoKSB7XG4gICAgICAgIGFwcFZpZXcuaWQgPSBnZXROYW1lKHBvZHNbMF0pO1xuICAgICAgfVxuICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgIGFwcE5hbWUgPSBuYW1lO1xuICAgICAgfVxuICAgICAgdmFyIHBvZENvdW50ID0gcG9kcy5sZW5ndGg7XG4gICAgICB2YXIgcG9kQ291bnRUZXh0ID0gcG9kQ291bnQgKyBcIiBwb2RcIiArIChwb2RDb3VudCA+IDEgPyBcInNcIiA6IFwiXCIpO1xuICAgICAgdmFyIHZpZXcgPSB7XG4gICAgICAgIGFwcE5hbWU6IGFwcE5hbWUgfHwgbmFtZSxcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgY3JlYXRlZERhdGU6IGFwcFZpZXcuJGNyZWF0aW9uRGF0ZSxcbiAgICAgICAgcG9kQ291bnQ6IHBvZENvdW50LFxuICAgICAgICBwb2RDb3VudFRleHQ6IHBvZENvdW50VGV4dCxcbiAgICAgICAgYWRkcmVzczogYWRkcmVzcyxcbiAgICAgICAgY29udHJvbGxlcklkOiBjb250cm9sbGVySWQsXG4gICAgICAgIHNlcnZpY2U6IHNlcnZpY2UsXG4gICAgICAgIHJlcGxpY2F0aW9uQ29udHJvbGxlcjogcmVwbGljYXRpb25Db250cm9sbGVyLFxuICAgICAgICBwb2RzOiBwb2RzXG4gICAgICB9O1xuICAgICAgYXJyYXkucHVzaCh2aWV3KTtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG5cbiAgLyoqXG4gICAqIGNvbnZlcnRzIGEgZ2l0IHBhdGggaW50byBhbiBhY2Nlc3NpYmxlIFVSTCBmb3IgdGhlIGJyb3dzZXJcbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiBnaXRQYXRoVG9VcmwoaWNvblBhdGgsIGJyYW5jaCA9IFwibWFzdGVyXCIpIHtcbiAgICByZXR1cm4gKEhhd3Rpb0NvcmUuaW5qZWN0b3IuZ2V0PHN0cmluZz4oJ0FwcExpYnJhcnlVUkwnKSB8fCAnJykgKyBcIi9naXQvXCIgKyBicmFuY2ggKyBpY29uUGF0aDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFzRGF0ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA/IG5ldyBEYXRlKHZhbHVlKSA6IG51bGw7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZW5yaWNoQnVpbGRDb25maWcoYnVpbGRDb25maWcsIHNvcnRlZEJ1aWxkcykge1xuICAgIGlmIChidWlsZENvbmZpZykge1xuICAgICAgdmFyIHRyaWdnZXJVcmw6c3RyaW5nID0gbnVsbDtcbiAgICAgIHZhciBtZXRhZGF0YSA9IGJ1aWxkQ29uZmlnLm1ldGFkYXRhIHx8IHt9O1xuICAgICAgdmFyIG5hbWUgPSBtZXRhZGF0YS5uYW1lO1xuICAgICAgYnVpbGRDb25maWcuJG5hbWUgPSBuYW1lO1xuICAgICAgdmFyIHByb2plY3RMaW5rID0gRGV2ZWxvcGVyLnByb2plY3RMaW5rKG5hbWUpO1xuICAgICAgdmFyIG5zID0gbWV0YWRhdGEubmFtZXNwYWNlIHx8IGN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XG4gICAgICBidWlsZENvbmZpZy4kbmFtZXNwYWNlID0gbnM7XG4gICAgICBidWlsZENvbmZpZy5lbnZpcm9ubWVudHMgPSBbXTtcbiAgICAgIGJ1aWxkQ29uZmlnLiRjcmVhdGlvbkRhdGUgPSBhc0RhdGUoS3ViZXJuZXRlcy5nZXRDcmVhdGlvblRpbWVzdGFtcChidWlsZENvbmZpZykpO1xuICAgICAgYnVpbGRDb25maWcuJGxhYmVsc1RleHQgPSBLdWJlcm5ldGVzLmxhYmVsc1RvU3RyaW5nKGdldExhYmVscyhidWlsZENvbmZpZykpO1xuXG4gICAgICBpZiAobmFtZSkge1xuICAgICAgICBidWlsZENvbmZpZy4kdmlld0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4oXCJ3b3Jrc3BhY2VzXCIsIG5zLCBcInByb2plY3RzXCIsIG5hbWUsIFwiZW52aXJvbm1lbnRzXCIpO1xuICAgICAgICBidWlsZENvbmZpZy4kZWRpdExpbmsgPSBVcmxIZWxwZXJzLmpvaW4oXCJ3b3Jrc3BhY2VzXCIsIG5zLCBcInByb2plY3RzXCIsIG5hbWUsIFwiYnVpbGRDb25maWdFZGl0XCIpO1xuXG4gICAgICAgIGFuZ3VsYXIuZm9yRWFjaChbZmFsc2UsIHRydWVdLCAoZmxhZykgPT4ge1xuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChidWlsZENvbmZpZy50cmlnZ2VycywgKHRyaWdnZXIpID0+IHtcbiAgICAgICAgICAgIGlmICghdHJpZ2dlclVybCkge1xuICAgICAgICAgICAgICB2YXIgdHlwZSA9IHRyaWdnZXIudHlwZTtcbiAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IFwiZ2VuZXJpY1wiIHx8IGZsYWcpIHtcbiAgICAgICAgICAgICAgICB2YXIgZ2VuZXJpYyA9IHRyaWdnZXJbdHlwZV07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgJiYgZ2VuZXJpYykge1xuICAgICAgICAgICAgICAgICAgdmFyIHNlY3JldCA9IGdlbmVyaWMuc2VjcmV0O1xuICAgICAgICAgICAgICAgICAgaWYgKHNlY3JldCkge1xuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyVXJsID0gVXJsSGVscGVycy5qb2luKGJ1aWxkQ29uZmlnSG9va3NSZXN0VVJMKCksIG5hbWUsIHNlY3JldCwgdHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29uZmlnLiR0cmlnZ2VyVXJsID0gdHJpZ2dlclVybDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gbGV0cyBmaW5kIHRoZSBsYXRlc3QgYnVpbGQuLi5cbiAgICAgICAgaWYgKHNvcnRlZEJ1aWxkcykge1xuICAgICAgICAgIGJ1aWxkQ29uZmlnLiRsYXN0QnVpbGQgPSBfLmZpbmQoc29ydGVkQnVpbGRzLCB7XG4gICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICBsYWJlbHM6IHtcbiAgICAgICAgICAgICAgICBidWlsZGNvbmZpZzogbmFtZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciAkZmFicmljOFZpZXdzID0ge307XG5cbiAgICAgIGZ1bmN0aW9uIGRlZmF1bHRQcm9wZXJ0aWVzSWZOb3RFeGlzdChuYW1lLCBvYmplY3QsIGF1dG9DcmVhdGUgPSBmYWxzZSkge1xuICAgICAgICB2YXIgdmlldyA9ICRmYWJyaWM4Vmlld3NbbmFtZV07XG4gICAgICAgIGlmIChhdXRvQ3JlYXRlICYmICF2aWV3KSB7XG4gICAgICAgICAgdmlldyA9IHt9XG4gICAgICAgICAgJGZhYnJpYzhWaWV3c1tuYW1lXSA9IHZpZXc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZpZXcpIHtcbiAgICAgICAgICBhbmd1bGFyLmZvckVhY2gob2JqZWN0LCAodmFsdWUsIHByb3BlcnR5KSA9PiB7XG4gICAgICAgICAgICB2YXIgY3VycmVudCA9IHZpZXdbcHJvcGVydHldO1xuICAgICAgICAgICAgaWYgKCFjdXJyZW50KSB7XG4gICAgICAgICAgICAgIHZpZXdbcHJvcGVydHldID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gZGVmYXVsdFByb3BlcnRpZXNJZk5vdEV4aXN0U3RhcnRzV2l0aChwcmVmaXgsIG9iamVjdCwgYXV0b0NyZWF0ZSA9IGZhbHNlKSB7XG4gICAgICAgIGFuZ3VsYXIuZm9yRWFjaCgkZmFicmljOFZpZXdzLCAodmlldywgbmFtZSkgPT4ge1xuICAgICAgICAgIGlmICh2aWV3ICYmIG5hbWUuc3RhcnRzV2l0aChwcmVmaXgpKSB7XG4gICAgICAgICAgICBhbmd1bGFyLmZvckVhY2gob2JqZWN0LCAodmFsdWUsIHByb3BlcnR5KSA9PiB7XG4gICAgICAgICAgICAgIHZhciBjdXJyZW50ID0gdmlld1twcm9wZXJ0eV07XG4gICAgICAgICAgICAgIGlmICghY3VycmVudCkge1xuICAgICAgICAgICAgICAgIHZpZXdbcHJvcGVydHldID0gdmFsdWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBsYWJlbHMgPSBtZXRhZGF0YS5sYWJlbHMgfHwge307XG4gICAgICB2YXIgYW5ub3RhdGlvbnMgPSBtZXRhZGF0YS5hbm5vdGF0aW9ucyB8fCB7fTtcblxuICAgICAgLy8gbGV0cyBkZWZhdWx0IHRoZSByZXBvIGFuZCB1c2VyXG4gICAgICBidWlsZENvbmZpZy4kdXNlciA9IGFubm90YXRpb25zW1wiZmFicmljOC5qZW5raW5zL3VzZXJcIl0gfHwgbGFiZWxzW1widXNlclwiXTtcbiAgICAgIGJ1aWxkQ29uZmlnLiRyZXBvID0gYW5ub3RhdGlvbnNbXCJmYWJyaWM4LmplbmtpbnMvcmVwb1wiXSB8fCBsYWJlbHNbXCJyZXBvXCJdO1xuXG4gICAgICBhbmd1bGFyLmZvckVhY2goYW5ub3RhdGlvbnMsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgIHZhciBwYXJ0cyA9IGtleS5zcGxpdCgnLycsIDIpO1xuICAgICAgICBpZiAocGFydHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHZhciBsaW5rSWQgPSBwYXJ0c1swXTtcbiAgICAgICAgICB2YXIgcHJvcGVydHkgPSBwYXJ0c1sxXTtcbiAgICAgICAgICBpZiAobGlua0lkICYmIHByb3BlcnR5ICYmIGxpbmtJZC5zdGFydHNXaXRoKFwiZmFicmljOC5saW5rXCIpKSB7XG4gICAgICAgICAgICB2YXIgbGluayA9ICRmYWJyaWM4Vmlld3NbbGlua0lkXTtcbiAgICAgICAgICAgIGlmICghbGluaykge1xuICAgICAgICAgICAgICBsaW5rID0ge1xuICAgICAgICAgICAgICAgIGNsYXNzOiBsaW5rSWRcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgJGZhYnJpYzhWaWV3c1tsaW5rSWRdID0gbGluaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxpbmtbcHJvcGVydHldID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKGJ1aWxkQ29uZmlnLiR1c2VyICYmIGJ1aWxkQ29uZmlnLiRyZXBvKSB7XG4gICAgICAgIC8vIGJyb3dzZSBnb2dzIHJlcG8gdmlld1xuICAgICAgICB2YXIgZ29nc1VybCA9IHNlcnZpY2VMaW5rVXJsKGdvZ3NTZXJ2aWNlTmFtZSk7XG4gICAgICAgIGlmIChnb2dzVXJsKSB7XG4gICAgICAgICAgZGVmYXVsdFByb3BlcnRpZXNJZk5vdEV4aXN0KFwiZmFicmljOC5saW5rLmJyb3dzZUdvZ3Mudmlld1wiLCB7XG4gICAgICAgICAgICBsYWJlbDogXCJCcm93c2UuLi5cIixcbiAgICAgICAgICAgIHVybDogVXJsSGVscGVycy5qb2luKGdvZ3NVcmwsIGJ1aWxkQ29uZmlnLiR1c2VyLCBidWlsZENvbmZpZy4kcmVwbyksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJCcm93c2UgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgcmVwb3NpdG9yeVwiLFxuICAgICAgICAgICAgaWNvbkNsYXNzOiBcImZhIGZhLWV4dGVybmFsLWxpbmtcIlxuICAgICAgICAgIH0sIHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcnVuIGZvcmdlIGNvbW1hbmRzIHZpZXdcbiAgICAgICAgZGVmYXVsdFByb3BlcnRpZXNJZk5vdEV4aXN0KFwiZmFicmljOC5saW5rLmZvcmdlQ29tbWFuZC52aWV3XCIsIHtcbiAgICAgICAgICBsYWJlbDogXCJDb21tYW5kLi4uXCIsXG4gICAgICAgICAgdXJsOiBVcmxIZWxwZXJzLmpvaW4ocHJvamVjdExpbmssIFwiL2ZvcmdlL2NvbW1hbmRzL3VzZXJcIiwgYnVpbGRDb25maWcuJHVzZXIsIGJ1aWxkQ29uZmlnLiRyZXBvKSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogXCJQZXJmb3JtIGFuIGFjdGlvbiBvbiB0aGlzIHByb2plY3RcIixcbiAgICAgICAgICBpY29uQ2xhc3M6IFwiZmEgZmEtcGxheS1jaXJjbGVcIlxuICAgICAgICB9LCB0cnVlKTtcblxuXG4gICAgICAgIC8vIGNvbmZpZ3VyZSBkZXZvcHMgdmlld1xuICAgICAgICBkZWZhdWx0UHJvcGVydGllc0lmTm90RXhpc3QoXCJmYWJyaWM4LmxpbmsuZm9yZ2VDb21tYW5kLmRldm9wcy5zZXR0aW5nc1wiLCB7XG4gICAgICAgICAgbGFiZWw6IFwiU2V0dGluZ3NcIixcbiAgICAgICAgICB1cmw6IFVybEhlbHBlcnMuam9pbihwcm9qZWN0TGluaywgXCIvZm9yZ2UvY29tbWFuZC9kZXZvcHMtZWRpdC91c2VyXCIsIGJ1aWxkQ29uZmlnLiR1c2VyLCBidWlsZENvbmZpZy4kcmVwbyksXG4gICAgICAgICAgZGVzY3JpcHRpb246IFwiQ29uZmlndXJlIHRoZSBEZXZPcHMgc2V0dGluZ3MgZm9yIHRoaXMgcHJvamVjdFwiLFxuICAgICAgICAgIGljb25DbGFzczogXCJmYSBmYS1wZW5jaWwtc3F1YXJlLW9cIlxuICAgICAgICB9LCB0cnVlKTtcblxuICAgICAgfVxuXG4gICAgICAvLyBhZGQgc29tZSBpY29ucyBhbmQgZGVzY3JpcHRpb25zXG4gICAgICBkZWZhdWx0UHJvcGVydGllc0lmTm90RXhpc3QoXCJmYWJyaWM4LmxpbmsucmVwb3NpdG9yeS5icm93c2VcIiwge1xuICAgICAgICBsYWJlbDogXCJCcm93c2UuLi5cIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiQnJvd3NlIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIHJlcG9zaXRvcnlcIixcbiAgICAgICAgaWNvbkNsYXNzOiBcImZhIGZhLWV4dGVybmFsLWxpbmtcIlxuICAgICAgfSk7XG4gICAgICBkZWZhdWx0UHJvcGVydGllc0lmTm90RXhpc3QoXCJmYWJyaWM4LmxpbmsuamVua2lucy5qb2JcIiwge1xuICAgICAgICBpY29uQ2xhc3M6IFwiZmEgZmEtdGFza3NcIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiVmlldyB0aGUgSmVua2lucyBKb2IgZm9yIHRoaXMgYnVpbGRcIlxuICAgICAgfSk7XG4gICAgICBkZWZhdWx0UHJvcGVydGllc0lmTm90RXhpc3QoXCJmYWJyaWM4LmxpbmsuamVua2lucy5tb25pdG9yXCIsIHtcbiAgICAgICAgaWNvbkNsYXNzOiBcImZhIGZhLXRhY2hvbWV0ZXJcIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiVmlldyB0aGUgSmVua2lucyBNb25pdG9yIGRhc2hib2FyZCBmb3IgdGhpcyBwcm9qZWN0XCJcbiAgICAgIH0pO1xuICAgICAgZGVmYXVsdFByb3BlcnRpZXNJZk5vdEV4aXN0KFwiZmFicmljOC5saW5rLmplbmtpbnMucGlwZWxpbmVcIiwge1xuICAgICAgICBpY29uQ2xhc3M6IFwiZmEgZmEtYXJyb3ctY2lyY2xlLW8tcmlnaHRcIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiVmlldyB0aGUgSmVua2lucyBQaXBlbGluZSBmb3IgdGhpcyBwcm9qZWN0XCJcbiAgICAgIH0pO1xuICAgICAgZGVmYXVsdFByb3BlcnRpZXNJZk5vdEV4aXN0KFwiZmFicmljOC5saW5rLmxldHNjaGF0LnJvb21cIiwge1xuICAgICAgICBpY29uQ2xhc3M6IFwiZmEgZmEtY29tbWVudFwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJDaGF0IHJvb20gZm9yIHRoaXMgcHJvamVjdFwiXG4gICAgICB9KTtcbiAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzSWZOb3RFeGlzdChcImZhYnJpYzgubGluay5sZXRzY2hhdC5yb29tXCIsIHtcbiAgICAgICAgaWNvbkNsYXNzOiBcImZhIGZhLWNvbW1lbnRcIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiQ2hhdCByb29tIGZvciB0aGlzIHByb2plY3RcIlxuICAgICAgfSk7XG4gICAgICBkZWZhdWx0UHJvcGVydGllc0lmTm90RXhpc3QoXCJmYWJyaWM4LmxpbmsudGFpZ2FcIiwge1xuICAgICAgICBpY29uQ2xhc3M6IFwiZmEgZmEtY2hlY2stc3F1YXJlLW9cIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiSXNzdWUgdHJhY2tlciBmb3IgdGhpcyBwcm9qZWN0XCJcbiAgICAgIH0pO1xuICAgICAgZGVmYXVsdFByb3BlcnRpZXNJZk5vdEV4aXN0KFwiZmFicmljOC5saW5rLmlzc3Vlc1wiLCB7XG4gICAgICAgIGljb25DbGFzczogXCJmYSBmYS1jaGVjay1zcXVhcmUtb1wiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJJc3N1ZXMgZm9yIHRoaXMgcHJvamVjdFwiXG4gICAgICB9KTtcbiAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzSWZOb3RFeGlzdChcImZhYnJpYzgubGluay5yZWxlYXNlc1wiLCB7XG4gICAgICAgIGljb25DbGFzczogXCJmYSBmYS10YWdcIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiSXNzdWVzIGZvciB0aGlzIHByb2plY3RcIlxuICAgICAgfSk7XG4gICAgICBkZWZhdWx0UHJvcGVydGllc0lmTm90RXhpc3QoXCJmYWJyaWM4LmxpbmsudGFpZ2EudGVhbVwiLCB7XG4gICAgICAgIGljb25DbGFzczogXCJmYSBmYS11c2Vyc1wiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJUZWFtIG1lbWJlcnMgZm9yIHRoaXMgcHJvamVjdFwiXG4gICAgICB9KTtcbiAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzSWZOb3RFeGlzdChcImZhYnJpYzgubGluay50ZWFtXCIsIHtcbiAgICAgICAgaWNvbkNsYXNzOiBcImZhIGZhLXVzZXJzXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlRlYW0gbWVtYmVycyBmb3IgdGhpcyBwcm9qZWN0XCJcbiAgICAgIH0pO1xuICAgICAgZGVmYXVsdFByb3BlcnRpZXNJZk5vdEV4aXN0U3RhcnRzV2l0aChcImZhYnJpYzgubGluay5lbnZpcm9ubWVudC5cIiwge1xuICAgICAgICBpY29uQ2xhc3M6IFwiZmEgZmEtY2xvdWRcIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiVGhlIGt1YmVybmV0ZXMgbmFtZXNwYWNlIGZvciB0aGlzIGVudmlyb25tZW50XCJcbiAgICAgIH0pO1xuXG5cbiAgICAgIC8vIGxldHMgcHV0IHRoZSB2aWV3cyBpbnRvIHNlY3Rpb25zLi4uXG4gICAgICB2YXIgJGZhYnJpYzhDb2RlVmlld3MgPSB7fTtcbiAgICAgIHZhciAkZmFicmljOEJ1aWxkVmlld3MgPSB7fTtcbiAgICAgIHZhciAkZmFicmljOFRlYW1WaWV3cyA9IHt9O1xuICAgICAgdmFyICRmYWJyaWM4RW52aXJvbm1lbnRWaWV3cyA9IHt9O1xuICAgICAgYW5ndWxhci5mb3JFYWNoKCRmYWJyaWM4Vmlld3MsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgIHZhciB2aWV3O1xuICAgICAgICBpZiAoa2V5LmluZGV4T2YoXCJ0YWlnYVwiKSA+IDAgfHwga2V5LmluZGV4T2YoXCIuaXNzdWVcIikgPiAwIHx8IGtleS5pbmRleE9mKFwibGV0c2NoYXRcIikgPiAwfHwga2V5LmluZGV4T2YoXCIudGVhbVwiKSA+IDApIHtcbiAgICAgICAgICB2aWV3ID0gJGZhYnJpYzhUZWFtVmlld3M7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5LmluZGV4T2YoXCJqZW5raW5zXCIpID4gMCkge1xuICAgICAgICAgIHZpZXcgPSAkZmFicmljOEJ1aWxkVmlld3M7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5LmluZGV4T2YoXCIuZW52aXJvbm1lbnQuXCIpID4gMCkge1xuICAgICAgICAgIHZpZXcgPSAkZmFicmljOEVudmlyb25tZW50Vmlld3M7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmlldyA9ICRmYWJyaWM4Q29kZVZpZXdzO1xuICAgICAgICB9XG4gICAgICAgIHZpZXdba2V5XSA9IHZhbHVlO1xuICAgICAgfSk7XG5cblxuICAgICAgYnVpbGRDb25maWcuJGZhYnJpYzhWaWV3cyA9ICRmYWJyaWM4Vmlld3M7XG4gICAgICBidWlsZENvbmZpZy4kZmFicmljOENvZGVWaWV3cyA9ICRmYWJyaWM4Q29kZVZpZXdzO1xuICAgICAgYnVpbGRDb25maWcuJGZhYnJpYzhCdWlsZFZpZXdzID0gJGZhYnJpYzhCdWlsZFZpZXdzO1xuICAgICAgYnVpbGRDb25maWcuJGZhYnJpYzhFbnZpcm9ubWVudFZpZXdzID0gJGZhYnJpYzhFbnZpcm9ubWVudFZpZXdzO1xuICAgICAgYnVpbGRDb25maWcuJGZhYnJpYzhUZWFtVmlld3MgPSAkZmFicmljOFRlYW1WaWV3cztcblxuICAgICAgdmFyICRqZW5raW5zSm9iID0gYW5ub3RhdGlvbnNbXCJmYWJyaWM4LmlvL2plbmtpbnMtam9iXCJdO1xuICAgICAgaWYgKCEkamVua2luc0pvYiAmJiAkZmFicmljOFZpZXdzW1wiZmFicmljOC5saW5rLmplbmtpbnMuam9iXCJdKSB7XG4gICAgICAgICRqZW5raW5zSm9iID0gbmFtZTtcbiAgICAgIH1cbiAgICAgIGJ1aWxkQ29uZmlnLiRqZW5raW5zSm9iID0gJGplbmtpbnNKb2I7XG5cbiAgICAgIGFuZ3VsYXIuZm9yRWFjaCgkZmFicmljOEVudmlyb25tZW50Vmlld3MsIChlbnYpID0+IHtcbiAgICAgICAgdmFyIGMgPSBlbnYuY2xhc3M7XG4gICAgICAgIHZhciBwcmVmaXggPSBcImZhYnJpYzgubGluay5lbnZpcm9ubWVudC5cIjtcbiAgICAgICAgaWYgKGMgJiYgYy5zdGFydHNXaXRoKHByZWZpeCkpIHtcbiAgICAgICAgICB2YXIgZW5zID0gYy5zdWJzdHJpbmcocHJlZml4Lmxlbmd0aCk7XG4gICAgICAgICAgZW52Lm5hbWVzcGFjZSA9IGVucztcbiAgICAgICAgICBlbnYudXJsID0gVXJsSGVscGVycy5qb2luKFwiL3dvcmtzcGFjZXNcIiwgbnMsIFwicHJvamVjdHNcIiwgbmFtZSwgXCJuYW1lc3BhY2VcIiwgZW5zKTtcbiAgICAgICAgfVxuICAgICAgICBidWlsZENvbmZpZy5lbnZpcm9ubWVudHMucHVzaChlbnYpO1xuICAgICAgfSk7XG4gICAgICBpZiAoIWJ1aWxkQ29uZmlnLmVudmlyb25tZW50cy5sZW5ndGgpIHtcbiAgICAgICAgLy8gbGV0cyBjcmVhdGUgYSBzaW5nbGUgZW52aXJvbm1lbnRcbiAgICAgICAgdmFyIGVucyA9IG5zO1xuICAgICAgICB2YXIgZW52ID0ge1xuICAgICAgICAgIG5hbWVzcGFjZTogZW5zLFxuICAgICAgICAgIGxhYmVsOiBcIkN1cnJlbnRcIixcbiAgICAgICAgICBkZXNjcmlwdGlvbjogXCJUaGUgZW52aXJvbmVtbnQgdGhhdCB0aGlzIHByb2plY3QgaXMgYnVpbHQgYW5kIHJ1biBpbnNpZGVcIixcbiAgICAgICAgICBpY29uQ2xhc3M6IFwiZmEgZmEtY2xvdWRcIixcbiAgICAgICAgICB1cmw6IFVybEhlbHBlcnMuam9pbihcIi93b3Jrc3BhY2VzXCIsIG5zLCBcInByb2plY3RzXCIsIG5hbWUsIFwibmFtZXNwYWNlXCIsIGVucylcbiAgICAgICAgfTtcbiAgICAgICAgYnVpbGRDb25maWcuZW52aXJvbm1lbnRzLnB1c2goZW52KTtcblxuICAgICAgfVxuXG4gICAgICBidWlsZENvbmZpZy5lbnZpcm9ubWVudHMgPSBidWlsZENvbmZpZy5lbnZpcm9ubWVudHMucmV2ZXJzZSgpO1xuXG4gICAgICBidWlsZENvbmZpZy50b29scyA9IFtdO1xuICAgICAgYW5ndWxhci5mb3JFYWNoKCRmYWJyaWM4Q29kZVZpZXdzLCAoZW52KSA9PiB7XG4gICAgICAgIGJ1aWxkQ29uZmlnLnRvb2xzLnB1c2goZW52KTtcbiAgICAgIH0pO1xuICAgICAgYW5ndWxhci5mb3JFYWNoKCRmYWJyaWM4VGVhbVZpZXdzLCAoZW52KSA9PiB7XG4gICAgICAgIGJ1aWxkQ29uZmlnLnRvb2xzLnB1c2goZW52KTtcbiAgICAgIH0pO1xuXG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGVucmljaEJ1aWxkQ29uZmlncyhidWlsZENvbmZpZ3MsIHNvcnRlZEJ1aWxkcyA9IG51bGwpIHtcbiAgICBhbmd1bGFyLmZvckVhY2goYnVpbGRDb25maWdzLCAoYnVpbGRDb25maWcpID0+IHtcbiAgICAgIGVucmljaEJ1aWxkQ29uZmlnKGJ1aWxkQ29uZmlnLCBzb3J0ZWRCdWlsZHMpO1xuICAgIH0pO1xuICAgIHJldHVybiBidWlsZENvbmZpZ3M7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZW5yaWNoQnVpbGRzKGJ1aWxkcykge1xuICAgIGFuZ3VsYXIuZm9yRWFjaChidWlsZHMsIChidWlsZCkgPT4ge1xuICAgICAgZW5yaWNoQnVpbGQoYnVpbGQpO1xuICAgIH0pO1xuICAgIHJldHVybiBfLnNvcnRCeShidWlsZHMsIFwiJGNyZWF0aW9uRGF0ZVwiKS5yZXZlcnNlKCk7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZW5yaWNoQnVpbGQoYnVpbGQpIHtcbiAgICBpZiAoYnVpbGQpIHtcbiAgICAgIHZhciBtZXRhZGF0YSA9IGJ1aWxkLm1ldGFkYXRhIHx8IHt9O1xuICAgICAgdmFyIGFubm90YXRpb25zID0gbWV0YWRhdGEuYW5ub3RhdGlvbnMgfHwge307XG4gICAgICB2YXIgbmFtZSA9IGdldE5hbWUoYnVpbGQpO1xuICAgICAgdmFyIG5hbWVzcGFjZSA9IGdldE5hbWVzcGFjZShidWlsZCk7XG4gICAgICBidWlsZC4kbmFtZSA9IG5hbWU7XG4gICAgICBidWlsZC4kbmFtZXNwYWNlID0gbmFtZXNwYWNlO1xuXG4gICAgICB2YXIgbmFtZUFycmF5ID0gbmFtZS5zcGxpdChcIi1cIik7XG4gICAgICB2YXIgbmFtZUFycmF5TGVuZ3RoID0gbmFtZUFycmF5Lmxlbmd0aDtcbiAgICAgIGJ1aWxkLiRzaG9ydE5hbWUgPSAobmFtZUFycmF5TGVuZ3RoID4gNCkgPyBuYW1lQXJyYXkuc2xpY2UoMCwgbmFtZUFycmF5TGVuZ3RoIC0gNCkuam9pbihcIi1cIikgOiBuYW1lLnN1YnN0cmluZygwLCAzMCk7XG5cbiAgICAgIHZhciBsYWJlbHMgPSBnZXRMYWJlbHMoYnVpbGQpO1xuICAgICAgdmFyIGNvbmZpZ0lkID0gbGFiZWxzLmJ1aWxkY29uZmlnO1xuICAgICAgYnVpbGQuJGNvbmZpZ0lkID0gY29uZmlnSWQ7XG4gICAgICBpZiAoY29uZmlnSWQpIHtcbiAgICAgICAgLy9idWlsZC4kY29uZmlnTGluayA9IFVybEhlbHBlcnMuam9pbihcImt1YmVybmV0ZXMvYnVpbGRDb25maWdzXCIsIGNvbmZpZ0lkKTtcbiAgICAgICAgYnVpbGQuJGNvbmZpZ0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4oXCJ3b3Jrc3BhY2VzXCIsIGN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCksIFwicHJvamVjdHNcIiwgY29uZmlnSWQpO1xuICAgICAgfVxuICAgICAgdmFyIGNyZWF0aW9uVGltZXN0YW1wID0gZ2V0Q3JlYXRpb25UaW1lc3RhbXAoYnVpbGQpO1xuICAgICAgaWYgKGNyZWF0aW9uVGltZXN0YW1wKSB7XG4gICAgICAgIHZhciBkID0gbmV3IERhdGUoY3JlYXRpb25UaW1lc3RhbXApO1xuICAgICAgICBidWlsZC4kY3JlYXRpb25EYXRlID0gZDtcbiAgICAgIH1cbiAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgIC8vYnVpbGQuJHZpZXdMaW5rID0gVXJsSGVscGVycy5qb2luKFwia3ViZXJuZXRlcy9idWlsZHNcIiwgbmFtZSk7XG4gICAgICAgIHZhciBwcm9qZWN0TGluayA9IFVybEhlbHBlcnMuam9pbihcIndvcmtzcGFjZXNcIiwgY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKSwgXCJwcm9qZWN0c1wiLCBjb25maWdJZCk7XG4gICAgICAgIGJ1aWxkLiR2aWV3TGluayA9IFVybEhlbHBlcnMuam9pbihwcm9qZWN0TGluaywgXCJidWlsZHNcIiwgbmFtZSk7XG4gICAgICAgIC8vYnVpbGQuJGxvZ3NMaW5rID0gVXJsSGVscGVycy5qb2luKFwia3ViZXJuZXRlcy9idWlsZExvZ3NcIiwgbmFtZSk7XG4gICAgICAgIGJ1aWxkLiRsb2dzTGluayA9IFVybEhlbHBlcnMuam9pbihwcm9qZWN0TGluaywgXCJidWlsZExvZ3NcIiwgbmFtZSk7XG4gICAgICB9XG4gICAgICBidWlsZC5wb2ROYW1lID0gYnVpbGQucG9kTmFtZSB8fCBhbm5vdGF0aW9uc1tcIm9wZW5zaGlmdC5pby9idWlsZC5wb2QtbmFtZVwiXTtcbiAgICAgIHZhciBwb2ROYW1lID0gYnVpbGQucG9kTmFtZTtcbiAgICAgIGlmIChwb2ROYW1lICYmIG5hbWVzcGFjZSkge1xuICAgICAgICB2YXIgcG9kTmFtZUFycmF5ID0gcG9kTmFtZS5zcGxpdChcIi1cIik7XG4gICAgICAgIHZhciBwb2ROYW1lQXJyYXlMZW5ndGggPSBwb2ROYW1lQXJyYXkubGVuZ3RoO1xuICAgICAgICBidWlsZC4kcG9kU2hvcnROYW1lID0gKHBvZE5hbWVBcnJheUxlbmd0aCA+IDUpID8gcG9kTmFtZUFycmF5W3BvZE5hbWVBcnJheUxlbmd0aCAtIDVdIDogcG9kTmFtZS5zdWJzdHJpbmcoMCwgMzApO1xuICAgICAgICBidWlsZC4kcG9kTGluayA9IFVybEhlbHBlcnMuam9pbihcImt1YmVybmV0ZXMvbmFtZXNwYWNlXCIsIG5hbWVzcGFjZSwgXCJwb2RzXCIsIHBvZE5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYnVpbGQ7XG4gIH1cblxuXG4gIGV4cG9ydCBmdW5jdGlvbiBlbnJpY2hEZXBsb3ltZW50Q29uZmlnKGRlcGxveW1lbnRDb25maWcpIHtcbiAgICBpZiAoZGVwbG95bWVudENvbmZpZykge1xuICAgICAgdmFyIHRyaWdnZXJVcmw6c3RyaW5nID0gbnVsbDtcbiAgICAgIHZhciBuYW1lID0gQ29yZS5wYXRoR2V0KGRlcGxveW1lbnRDb25maWcsIFtcIm1ldGFkYXRhXCIsIFwibmFtZVwiXSk7XG4gICAgICBkZXBsb3ltZW50Q29uZmlnLiRuYW1lID0gbmFtZTtcbiAgICAgIHZhciBmb3VuZCA9IGZhbHNlO1xuICAgICAgYW5ndWxhci5mb3JFYWNoKGRlcGxveW1lbnRDb25maWcudHJpZ2dlcnMsICh0cmlnZ2VyKSA9PiB7XG4gICAgICAgIHZhciB0eXBlID0gdHJpZ2dlci50eXBlO1xuICAgICAgICBpZiAoIWRlcGxveW1lbnRDb25maWcuJGltYWdlQ2hhbmdlUGFyYW1zICYmIHR5cGUgPT09IFwiSW1hZ2VDaGFuZ2VcIikge1xuICAgICAgICAgIHZhciBpbWFnZUNoYW5nZVBhcmFtcyA9IHRyaWdnZXIuaW1hZ2VDaGFuZ2VQYXJhbXM7XG4gICAgICAgICAgaWYgKGltYWdlQ2hhbmdlUGFyYW1zKSB7XG4gICAgICAgICAgICB2YXIgY29udGFpbmVyTmFtZXMgPSBpbWFnZUNoYW5nZVBhcmFtcy5jb250YWluZXJOYW1lcyB8fCBbXTtcbiAgICAgICAgICAgIGltYWdlQ2hhbmdlUGFyYW1zLiRjb250YWluZXJOYW1lcyA9IGNvbnRhaW5lck5hbWVzLmpvaW4oXCIgXCIpO1xuICAgICAgICAgICAgZGVwbG95bWVudENvbmZpZy4kaW1hZ2VDaGFuZ2VQYXJhbXMgPSBpbWFnZUNoYW5nZVBhcmFtcztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBlbnJpY2hEZXBsb3ltZW50Q29uZmlncyhkZXBsb3ltZW50Q29uZmlncykge1xuICAgIGFuZ3VsYXIuZm9yRWFjaChkZXBsb3ltZW50Q29uZmlncywgKGRlcGxveW1lbnRDb25maWcpID0+IHtcbiAgICAgIGVucmljaERlcGxveW1lbnRDb25maWcoZGVwbG95bWVudENvbmZpZyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGRlcGxveW1lbnRDb25maWdzO1xuICB9XG5cblxuICBleHBvcnQgZnVuY3Rpb24gZW5yaWNoRXZlbnQoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIHZhciBtZXRhZGF0YSA9IGV2ZW50Lm1ldGFkYXRhIHx8IHt9O1xuXG4gICAgICB2YXIgZmlyc3RUaW1lc3RhbXAgPSBldmVudC5maXJzdFRpbWVzdGFtcDtcbiAgICAgIGlmIChmaXJzdFRpbWVzdGFtcCkge1xuICAgICAgICB2YXIgZCA9IG5ldyBEYXRlKGZpcnN0VGltZXN0YW1wKTtcbiAgICAgICAgZXZlbnQuJGZpcnN0VGltZXN0YW1wID0gZDtcbiAgICAgIH1cbiAgICAgIHZhciBsYXN0VGltZXN0YW1wID0gZXZlbnQubGFzdFRpbWVzdGFtcDtcbiAgICAgIGlmIChsYXN0VGltZXN0YW1wKSB7XG4gICAgICAgIHZhciBkID0gbmV3IERhdGUobGFzdFRpbWVzdGFtcCk7XG4gICAgICAgIGV2ZW50LiRsYXN0VGltZXN0YW1wID0gZDtcbiAgICAgIH1cbiAgICAgIHZhciBsYWJlbHMgPSBhbmd1bGFyLmNvcHkoZXZlbnQuc291cmNlIHx8IHt9KTtcbiAgICAgIHZhciBpbnZvbHZlZE9iamVjdCA9IGV2ZW50Lmludm9sdmVkT2JqZWN0IHx8IHt9O1xuICAgICAgdmFyIG5hbWUgPSBpbnZvbHZlZE9iamVjdC5uYW1lO1xuICAgICAgdmFyIGtpbmQgPSBpbnZvbHZlZE9iamVjdC5raW5kO1xuICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgbGFiZWxzWyduYW1lJ10gPSBuYW1lO1xuICAgICAgfVxuICAgICAgaWYgKGtpbmQpIHtcbiAgICAgICAgbGFiZWxzWydraW5kJ10gPSBraW5kO1xuICAgICAgfVxuICAgICAgZXZlbnQuJGxhYmVsc1RleHQgPSBLdWJlcm5ldGVzLmxhYmVsc1RvU3RyaW5nKGxhYmVscyk7XG5cbiAgICB9XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZW5yaWNoRXZlbnRzKGV2ZW50cywgbW9kZWwgPSBudWxsKSB7XG4gICAgYW5ndWxhci5mb3JFYWNoKGV2ZW50cywgKGV2ZW50KSA9PiB7XG4gICAgICBlbnJpY2hFdmVudChldmVudCk7XG4gICAgfSk7XG5cbiAgICAvLyBsZXRzIHVwZGF0ZSBsaW5rcyB0byB0aGUgZXZlbnRzIGZvciBlYWNoIHBvZCBhbmQgUkNcbiAgICBpZiAobW9kZWwpIHtcbiAgICAgIGZ1bmN0aW9uIGNsZWFyRXZlbnRzKGVudGl0eSkge1xuICAgICAgICBlbnRpdHkuJGV2ZW50cyA9IFtdO1xuICAgICAgICBlbnRpdHkuJGV2ZW50c0xpbmsgPSBudWxsO1xuICAgICAgICBlbnRpdHkuJGV2ZW50Q291bnQgPSAwO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiB1cGRhdGVFdmVudChlbnRpdHksIGV2ZW50KSB7XG4gICAgICAgIGlmIChlbnRpdHkpIHtcbiAgICAgICAgICBlbnRpdHkuJGV2ZW50cy5wdXNoKGV2ZW50KTtcbiAgICAgICAgICBpZiAoIWVudGl0eS4kZXZlbnRzTGluaykge1xuICAgICAgICAgICAgZW50aXR5LiRldmVudHNMaW5rID0gVXJsSGVscGVycy5qb2luKFwiL2t1YmVybmV0ZXMvbmFtZXNwYWNlL1wiLCBjdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpLCBcImV2ZW50c1wiKSArIFwiP3E9a2luZCUzRFwiICsgZW50aXR5LmtpbmQgKyBcIiUyMG5hbWUlM0RcIiArIGVudGl0eS5tZXRhZGF0YS5uYW1lO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbnRpdHkuJGV2ZW50Q291bnQgPSBlbnRpdHkuJGV2ZW50cy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHBvZHMgPSBtb2RlbC5wb2RzIHx8IFtdO1xuICAgICAgdmFyIHJjcyA9IG1vZGVsLnJlcGxpY2F0aW9uQ29udHJvbGxlcnMgfHwgW107XG4gICAgICBhbmd1bGFyLmZvckVhY2gocG9kcywgY2xlYXJFdmVudHMpO1xuICAgICAgYW5ndWxhci5mb3JFYWNoKHJjcywgY2xlYXJFdmVudHMpO1xuXG4gICAgICBhbmd1bGFyLmZvckVhY2goZXZlbnRzLCAoZXZlbnQpID0+IHtcbiAgICAgICAgdmFyIGludm9sdmVkT2JqZWN0ID0gZXZlbnQuaW52b2x2ZWRPYmplY3QgfHwge307XG4gICAgICAgIHZhciBuYW1lID0gaW52b2x2ZWRPYmplY3QubmFtZTtcbiAgICAgICAgdmFyIGtpbmQgPSBpbnZvbHZlZE9iamVjdC5raW5kO1xuICAgICAgICB2YXIgbnMgPSBtb2RlbC5jdXJyZW50TmFtZXNwYWNlKCk7XG4gICAgICAgIGlmIChuYW1lICYmIGtpbmQgJiYgbnMpIHtcbiAgICAgICAgICB2YXIgZW50aXR5ID0gbnVsbDtcbiAgICAgICAgICBpZiAoa2luZCA9PT0gXCJSZXBsaWNhdGlvbkNvbnRyb2xsZXJcIikge1xuICAgICAgICAgICAgZW50aXR5ID0gbW9kZWwuZ2V0UmVwbGljYXRpb25Db250cm9sbGVyKG5zLCBuYW1lKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGtpbmQgPT09IFwiUG9kXCIpIHtcbiAgICAgICAgICAgIGVudGl0eSA9IG1vZGVsLmdldFBvZChucywgbmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChlbnRpdHkpIHtcbiAgICAgICAgICAgIHVwZGF0ZUV2ZW50KGVudGl0eSwgZXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBldmVudHM7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZW5yaWNoSW1hZ2VSZXBvc2l0b3J5KGltYWdlUmVwb3NpdG9yeSkge1xuICAgIGlmIChpbWFnZVJlcG9zaXRvcnkpIHtcbiAgICAgIHZhciB0cmlnZ2VyVXJsOnN0cmluZyA9IG51bGw7XG4gICAgICB2YXIgbmFtZSA9IENvcmUucGF0aEdldChpbWFnZVJlcG9zaXRvcnksIFtcIm1ldGFkYXRhXCIsIFwibmFtZVwiXSk7XG4gICAgICBpbWFnZVJlcG9zaXRvcnkuJG5hbWUgPSBuYW1lO1xuICAgIH1cbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBlbnJpY2hJbWFnZVJlcG9zaXRvcmllcyhpbWFnZVJlcG9zaXRvcmllcykge1xuICAgIGFuZ3VsYXIuZm9yRWFjaChpbWFnZVJlcG9zaXRvcmllcywgKGltYWdlUmVwb3NpdG9yeSkgPT4ge1xuICAgICAgZW5yaWNoSW1hZ2VSZXBvc2l0b3J5KGltYWdlUmVwb3NpdG9yeSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGltYWdlUmVwb3NpdG9yaWVzO1xuICB9XG5cblxuICB2YXIgbGFiZWxDb2xvcnMgPSB7XG4gICAgJ2JhdGNoJzogJ2s4cy1iYWRnZS1iYXRjaCcsXG4gICAgJ3JlZ2lvbic6ICdrOHMtYmFkZ2UtcmVnaW9uJyxcbiAgICAndHlwZSc6ICdrOHMtYmFkZ2UtdHlwZScsXG4gICAgJ3N5c3RlbSc6ICdrOHMtYmFkZ2Utc3lzdGVtJyxcbiAgICAnaXNUYXJnZXQnOiAnazhzLWJhZGdlLXRhcmdldCdcbiAgfTtcblxuICBleHBvcnQgZnVuY3Rpb24gY29udGFpbmVyTGFiZWxDbGFzcyhsYWJlbFR5cGU6c3RyaW5nKSB7XG4gICAgaWYgKCEobGFiZWxUeXBlIGluIGxhYmVsQ29sb3JzKSkge1xuICAgICAgcmV0dXJuICdtb3VzZS1wb2ludGVyJztcbiAgICB9XG4gICAgZWxzZSByZXR1cm4gbGFiZWxDb2xvcnNbbGFiZWxUeXBlXSArICcgbW91c2UtcG9pbnRlcic7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGZhYnJpYzggZm9yZ2UgcGx1Z2luIGlzIGVuYWJsZWRcbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiBpc0ZvcmdlRW5hYmxlZCgpIHtcbiAgICAvLyBUT0RPIHNob3VsZCByZXR1cm4gdHJ1ZSBpZiB0aGUgc2VydmljZSBcImZhYnJpYzgtZm9yZ2VcIiBpcyB2YWxpZFxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQga3ViZXJuZXRlcyBzZWxlY3RlZCBuYW1lc3BhY2Ugb3IgdGhlIGRlZmF1bHQgb25lXG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24gY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKSB7XG4gICAgdmFyIGluamVjdG9yID0gSGF3dGlvQ29yZS5pbmplY3RvcjtcbiAgICBpZiAoaW5qZWN0b3IpIHtcbiAgICAgIHZhciBLdWJlcm5ldGVzU3RhdGUgPSBpbmplY3Rvci5nZXQ8YW55PihcIkt1YmVybmV0ZXNTdGF0ZVwiKSB8fCB7fTtcbiAgICAgIHJldHVybiBLdWJlcm5ldGVzU3RhdGUuc2VsZWN0ZWROYW1lc3BhY2UgfHwgZGVmYXVsdE5hbWVzcGFjZTtcbiAgICB9XG4gICAgcmV0dXJuIGRlZmF1bHROYW1lc3BhY2U7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gc2V0Q3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UobnMpIHtcbiAgICBpZiAobnMpIHtcbiAgICAgIHZhciBLdWJlcm5ldGVzU3RhdGUgPSBpbmplY3Q8YW55PihcIkt1YmVybmV0ZXNTdGF0ZVwiKSB8fCB7fTtcbiAgICAgIEt1YmVybmV0ZXNTdGF0ZS5zZWxlY3RlZE5hbWVzcGFjZSA9IG5zO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmVzIHRoZSBqc29uIHNjaGVtYVxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ3VyZVNjaGVtYSgpIHtcbiAgICBhbmd1bGFyLmZvckVhY2goc2NoZW1hLmRlZmluaXRpb25zLCAoZGVmaW5pdGlvbiwgbmFtZSkgPT4ge1xuICAgICAgdmFyIHByb3BlcnRpZXMgPSBkZWZpbml0aW9uLnByb3BlcnRpZXM7XG4gICAgICBpZiAocHJvcGVydGllcykge1xuICAgICAgICB2YXIgaGlkZVByb3BlcnRpZXMgPSBbXCJjcmVhdGlvblRpbWVzdGFtcFwiLCBcImtpbmRcIiwgXCJhcGlWZXJzaW9uXCIsIFwiYW5ub3RhdGlvbnNcIiwgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiLCBcIm5hbWVzcGFjZVwiLCBcInJlc291cmNlVmVyc2lvblwiLCBcInNlbGZMaW5rXCIsIFwidWlkXCJdO1xuICAgICAgICBhbmd1bGFyLmZvckVhY2goaGlkZVByb3BlcnRpZXMsIChwcm9wZXJ0eU5hbWUpID0+IHtcbiAgICAgICAgICB2YXIgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV07XG4gICAgICAgICAgaWYgKHByb3BlcnR5KSB7XG4gICAgICAgICAgICBwcm9wZXJ0eVtcImhpZGRlblwiXSAgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGFuZ3VsYXIuZm9yRWFjaChwcm9wZXJ0aWVzLCAocHJvcGVydHksIHByb3BlcnR5TmFtZSkgPT4ge1xuICAgICAgICAgIHZhciByZWYgPSBwcm9wZXJ0eVtcIiRyZWZcIl07XG4gICAgICAgICAgdmFyIHR5cGUgPSBwcm9wZXJ0eVtcInR5cGVcIl07XG4gICAgICAgICAgaWYgKHJlZiAmJiAoIXR5cGUgfHwgdHlwZSA9PT0gXCJvYmplY3RcIikpIHtcbiAgICAgICAgICAgIHByb3BlcnR5W1widHlwZVwiXSA9IHJlZjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHR5cGUgPT09IFwiYXJyYXlcIikge1xuICAgICAgICAgICAgdmFyIGl0ZW1zID0gcHJvcGVydHlbXCJpdGVtc1wiXTtcbiAgICAgICAgICAgIGlmIChpdGVtcykge1xuICAgICAgICAgICAgICB2YXIgcmVmID0gaXRlbXNbXCIkcmVmXCJdO1xuICAgICAgICAgICAgICB2YXIgdHlwZSA9IGl0ZW1zW1widHlwZVwiXTtcbiAgICAgICAgICAgICAgaWYgKHJlZiAmJiAoIXR5cGUgfHwgdHlwZSA9PT0gXCJvYmplY3RcIikpIHtcbiAgICAgICAgICAgICAgICBpdGVtc1tcInR5cGVcIl0gPSByZWY7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBzY2hlbWEuZGVmaW5pdGlvbnMub3NfYnVpbGRfV2ViSG9va1RyaWdnZXIucHJvcGVydGllcy5zZWNyZXQudHlwZSA9IFwicGFzc3dvcmRcIjtcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIExldHMgcmVtb3ZlIGFueSBlbnJpY2hlZCBkYXRhIHRvIGxlYXZlIHRoZSBvcmlnaW5hbCBqc29uIGludGFjdFxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIHVuZW5yaWNoKGl0ZW0pIHtcbiAgICB2YXIgbyA9IF8uY2xvbmVEZWVwKGl0ZW0pO1xuICAgIGFuZ3VsYXIuZm9yRWFjaChvLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgaWYgKGtleS5zdGFydHNXaXRoKFwiJFwiKSB8fCBrZXkuc3RhcnRzV2l0aChcIl9cIikpIHtcbiAgICAgICAgZGVsZXRlIG9ba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBkZWxldGUgb1snY29ubmVjdFRvJ107XG4gICAgcmV0dXJuIG87XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdW5lbnJpY2hlZCBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdFxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIHRvUmF3SnNvbihpdGVtKSB7XG4gICAgdmFyIG8gPSB1bmVucmljaChpdGVtKTtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkobywgbnVsbCwgMik7IC8vIHNwYWNpbmcgbGV2ZWwgPSAyXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdW5lbnJpY2hlZCBZQU1MIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdFxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIHRvUmF3WWFtbChpdGVtKSB7XG4gICAgdmFyIG8gPSB1bmVucmljaChpdGVtKTtcbiAgICByZXR1cm4ganN5YW1sLmR1bXAobywgeyBpbmRlbnQ6IDIgfSk7XG4gIH1cblxuXG4gIGV4cG9ydCBmdW5jdGlvbiB3YXRjaCgkc2NvcGU6IGFueSwgJGVsZW1lbnQ6IGFueSwga2luZCwgbnMsIGZuLCBsYWJlbFNlbGVjdG9yID0gbnVsbCkge1xuICAgICB2YXIgY29ubmVjdGlvbiA9IEt1YmVybmV0ZXNBUEkud2F0Y2goe1xuICAgICAgICBraW5kOiBraW5kLFxuICAgICAgICBuYW1lc3BhY2U6IG5zLFxuICAgICAgICBsYWJlbFNlbGVjdG9yOiBsYWJlbFNlbGVjdG9yLFxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAob2JqZWN0cykge1xuICAgICAgICAgIGZuKG9iamVjdHMpO1xuICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgJGVsZW1lbnQub24oJyRkZXN0cm95JywgKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhcIlN0YXRpYyBjb250cm9sbGVyW1wiICsga2luZCArIFwiLCBcIiArIG5zICsgXCJdIGVsZW1lbnQgZGVzdHJveWVkXCIpO1xuICAgICAgICAkc2NvcGUuJGRlc3Ryb3koKTtcbiAgICAgIH0pO1xuICAgICAgJHNjb3BlLiRvbignJGRlc3Ryb3knLCAoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiU3RhdGljIGNvbnRyb2xsZXJbXCIgKyBraW5kICsgXCIsIFwiICsgbnMgKyBcIl0gc2NvcGUgZGVzdHJveWVkXCIpO1xuICAgICAgICBjb25uZWN0aW9uLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH0pO1xuICAgICAgdmFyIG9sZERlbGV0ZVNjb3BlRm4gPSAkc2NvcGUuZGVsZXRlU2NvcGU7XG4gICAgICAkc2NvcGUuZGVsZXRlU2NvcGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICRlbGVtZW50LnJlbW92ZSgpO1xuICAgICAgICBpZiAoYW5ndWxhci5pc0Z1bmN0aW9uKG9sZERlbGV0ZVNjb3BlRm4pKSB7XG4gICAgICAgICAgb2xkRGVsZXRlU2NvcGVGbigpO1xuICAgICAgICB9XG4gICAgICB9XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlS3ViZXJuZXRlc0NsaWVudChraW5kLCBucyA9IG51bGwpIHtcbiAgICB2YXIgSzhTQ2xpZW50RmFjdG9yeSA9IGluamVjdDxhbnk+KFwiSzhTQ2xpZW50RmFjdG9yeVwiKTtcbiAgICBpZiAoIUs4U0NsaWVudEZhY3RvcnkpIHtcbiAgICAgIGxvZy53YXJuKFwiQ291bGQgbm90IGZpbmQgaW5qZWN0ZWQgSzhTQ2xpZW50RmFjdG9yeSFcIik7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKGtpbmQgPT09IFwicHJvamVjdHNcIiB8fCBraW5kID09PSBcIm5hbWVzcGFjZXNcIikge1xuICAgICAgbnMgPSBudWxsO1xuICAgIH0gZWxzZSBpZiAoIW5zKSB7XG4gICAgICBucyA9IEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIEs4U0NsaWVudEZhY3RvcnkuY3JlYXRlKGtpbmQsIG5zKTtcbiAgfVxuXG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGN1cnJlbnRVc2VyTmFtZSgpIHtcbiAgICB2YXIgdXNlckRldGFpbHMgPSBIYXd0aW9PQXV0aC5nZXRVc2VyUHJvZmlsZSgpO1xuICAgIHZhciBhbnN3ZXIgPSBudWxsO1xuICAgIGlmICh1c2VyRGV0YWlscykge1xuICAgICAgYW5zd2VyID0gZ2V0TmFtZSh1c2VyRGV0YWlscyk7XG4gICAgfVxuICAgIHJldHVybiBhbnN3ZXIgfHwgXCJhZG1pblwiO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU5hbWVzcGFjZShucywgY2xpZW50Pykge1xuICAgIGlmICghY2xpZW50KSB7XG4gICAgICBjbGllbnQgPSBpc09wZW5TaGlmdCA/IEt1YmVybmV0ZXMuY3JlYXRlS3ViZXJuZXRlc0NsaWVudCgncHJvamVjdHMnKSA6IEt1YmVybmV0ZXMuY3JlYXRlS3ViZXJuZXRlc0NsaWVudCgnbmFtZXNwYWNlcycpO1xuICAgIH1cbiAgICBpZiAobnMgJiYgbnMgIT09IGN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCkpIHtcbiAgICAgIHZhciBvYmplY3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb246IEt1YmVybmV0ZXMuZGVmYXVsdEFwaVZlcnNpb24sXG4gICAgICAgIGtpbmQ6IGlzT3BlblNoaWZ0ID8gJ1Byb2plY3QnIDogJ05hbWVzcGFjZScsXG4gICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgbmFtZTogbnMsXG4gICAgICAgICAgbGFiZWxzOiB7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY2xpZW50LnB1dChvYmplY3QsXG4gICAgICAgIChkYXRhKSA9PiB7XG4gICAgICAgICAgbG9nLmluZm8oXCJDcmVhdGVkIG5hbWVzcGFjZTogXCIgKyBucylcbiAgICAgICAgfSxcbiAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGNyZWF0ZSBuYW1lc3BhY2U6IFwiICsgbnMgKyBcIjogXCIgKyBhbmd1bGFyLnRvSnNvbihlcnIpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJDKG9iaiwgb25Db21wbGV0ZUZuID0gbnVsbCl7XG4gICAgdmFyIGNsaWVudCA9ICBLdWJlcm5ldGVzLmNyZWF0ZUt1YmVybmV0ZXNDbGllbnQoJ3JlcGxpY2F0aW9uY29udHJvbGxlcnMnLCdkZWZhdWx0Jyk7XG4gICAgdmFyIFJDVGVtcGxhdGUgPSBuZXcgcmVzb3VyY2VSQ1RlbXBsYXRlKCk7XG4gICAgdmFyIHJjVGVtcGxhdGUgPSBSQ1RlbXBsYXRlLmNyZWF0ZVJDKG9iaik7XG4gICAgLy9jb25zb2xlLmxvZyhyY1RlbXBsYXRlKTtcbiAgICBjbGllbnQucHV0KHJjVGVtcGxhdGUsIGZ1bmN0aW9uKG9iaikge1xuICAgICAgIGNvbnNvbGUubG9nKFwiQ3JlYXRlZDogXCIsIG9iaik7XG4gICAgICAgaWYgKGFuZ3VsYXIuaXNGdW5jdGlvbihvbkNvbXBsZXRlRm4pKSB7XG4gICAgICAgICAgIG9uQ29tcGxldGVGbihvYmopO1xuICAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gICBleHBvcnQgZnVuY3Rpb24gY29ubmVjdE9yYWNsZSgkaHR0cCwgJHRpbWVvdXQsIHVybCwgY29ubmVjdFBhcmFtLCByY05hbWUsIGRlbGF5VGltZSl7XG4gICAgICAgJHRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAkaHR0cCh7XG4gICAgICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgICAgIG1ldGhvZDonUE9TVCcsXG4gICAgICAgICAgICAgICBwYXJhbXM6e29yYWNsZU5hbWU6IHJjTmFtZSwgcGFyYW06IGNvbm5lY3RQYXJhbX1cbiAgICAgICAgICAgfSkuc3VjY2VzcyhmdW5jdGlvbihkYXRhLGhlYWRlcixjb25maWcsc3RhdHVzKXtcbiAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwic3VjY2Vzc1wiKTtcbiAgICAgICAgICAgfSkuZXJyb3IoZnVuY3Rpb24oZGF0YSxoZWFkZXIsY29uZmlnLHN0YXR1cyl7XG4gICAgICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBjb25uZWN0IFwiICsgY29ubmVjdFBhcmFtICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xuICAgICAgICAgICB9KTtcbiAgICAgIH0sIGRlbGF5VGltZSk7XG4gICB9XG5cbiAgIGV4cG9ydCBmdW5jdGlvbiBnZXRPcmFjbGVTdGF0dXMobGFiZWxzKXtcbiAgICAgICB2YXIgYW5zd2VyID0gLTE7XG4gICAgICAgaWYodHlwZW9mKGxhYmVscykgPT09ICdvYmplY3QnICYmIGxhYmVscy5oYXNPd25Qcm9wZXJ0eShcInN0YXR1c1wiKSl7XG4gICAgICAgICAgIHN3aXRjaChsYWJlbHMuc3RhdHVzKXtcbiAgICAgICAgICAgICAgIGNhc2UgJzAnOlxuICAgICAgICAgICAgICAgICAgYW5zd2VyID0gMDtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgY2FzZSAnMSc6XG4gICAgICAgICAgICAgICAgICBhbnN3ZXIgPSAxO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICBjYXNlICcyJzpcbiAgICAgICAgICAgICAgICAgIGFuc3dlciA9IDI7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBhbnN3ZXIgPSAtMTtcbiAgICAgICAgICAgfVxuICAgICAgIH1cbiAgICAgICByZXR1cm4gYW5zd2VyO1xuICAgfVxuXG4gICBleHBvcnQgZnVuY3Rpb24gZ2V0T3JhY2xlTmFtZShuYW1lOnN0cmluZyk6c3RyaW5nIHtcbiAgICAgICB2YXIgcmVzdWx0cyA9IG5hbWUuc3BsaXQoXCItXCIpO1xuICAgICAgIGlmKHJlc3VsdHMubGVuZ3RoID09PSAyKXtcbiAgICAgICAgICByZXR1cm4gXCLmsYfmgLvmlbDmja7lupNcIiArIFwiKFwiICtyZXN1bHRzWzFdICsgXCIpXCI7XG4gICAgICAgfWVsc2UgaWYocmVzdWx0cy5sZW5ndGggPT09IDMpe1xuICAgICAgICAgIHJldHVybiBLdWJlcm5ldGVzLmdldENvdW50eUJ5Q29kZShyZXN1bHRzWzBdKSArIFwiX1wiICsgS3ViZXJuZXRlcy5nZXRTeXN0ZW1OYW1lQnlJZChyZXN1bHRzWzFdKTtcbiAgICAgICB9ZWxzZXtcbiAgICAgICAgICByZXR1cm4gbmFtZTtcbiAgICAgICB9XG4gICB9XG5cbiAgIGV4cG9ydCBmdW5jdGlvbiBleHRyYWN0RGF0YVRvT3JhY2xlKCRodHRwLCBzZWxlY3RlZFJlcGxpY2F0aW9uQ29udHJvbGxlcnMsIHRhcmdldFJlcGxpY2F0aW9uQ29udHJvbGxlcil7XG4gICAgICAgLy9jb25zb2xlLmxvZyh0YXJnZXRSZXBsaWNhdGlvbkNvbnRyb2xsZXIubGVuZ3RoKTtcbiAgICAgICBpZihzZWxlY3RlZFJlcGxpY2F0aW9uQ29udHJvbGxlcnMubGVuZ3RoID09PTEgJiYgKGdldE5hbWUoc2VsZWN0ZWRSZXBsaWNhdGlvbkNvbnRyb2xsZXJzWzBdKSA9PT0gZ2V0TmFtZSh0YXJnZXRSZXBsaWNhdGlvbkNvbnRyb2xsZXIpKSl7XG4gICAgICAgICAgIGFsZXJ0KFwi5oKo6YCJ5oup55qE5pWw5o2u5bqT5Lit5LiN5YyF5ZCr6ZyA6KaB5rGH5oC755qE5pWw5o2u5bqT77yM5a+86Ie05rGH5oC75pON5L2c5aSx6LSl77yM6K+36YeN5paw6YCJ5oupIVwiKTtcbiAgICAgICAgICAgcmV0dXJuO1xuICAgICAgIH1cbiAgICAgICB2YXIgYW5zd2VyID0gY2hlY2tvdXRPcmFjbGVSQ0lzUnVubmluZyh0YXJnZXRSZXBsaWNhdGlvbkNvbnRyb2xsZXIpICYmIHRhcmdldFJlcGxpY2F0aW9uQ29udHJvbGxlcjtcbiAgICAgICB2YXIgb3JhY2xlQ29ubmVjdFBhcmFtID0gW3tcbiAgICAgICAgICAgT3JhY2xlTmFtZTogZ2V0TmFtZSh0YXJnZXRSZXBsaWNhdGlvbkNvbnRyb2xsZXIpLFxuICAgICAgICAgICBjb25uZWN0SG9zdDogZ2V0SG9zdCh0YXJnZXRSZXBsaWNhdGlvbkNvbnRyb2xsZXIuJHBvZHNbMF0pLFxuICAgICAgICAgICBjb25uZWN0UG9ydDogdGFyZ2V0UmVwbGljYXRpb25Db250cm9sbGVyLiRwb2RzWzBdLnNwZWMuY29udGFpbmVyc1swXS5wb3J0c1swXS5ob3N0UG9ydCxcbiAgICAgICAgICAgaXNUYXJnZXQ6IHRydWVcbiAgICAgICB9XTtcbiAgICAgICBzZWxlY3RlZFJlcGxpY2F0aW9uQ29udHJvbGxlcnMuZm9yRWFjaCgocmMpID0+IHtcbiAgICAgICAgICAgaWYoZ2V0TmFtZShyYykgIT09IGdldE5hbWUodGFyZ2V0UmVwbGljYXRpb25Db250cm9sbGVyKSl7XG4gICAgICAgICAgICAgICBhbnN3ZXIgPSBhbnN3ZXIgJiYgY2hlY2tvdXRPcmFjbGVSQ0lzUnVubmluZyhyYyk7XG4gICAgICAgICAgICAgICAgICBvcmFjbGVDb25uZWN0UGFyYW0ucHVzaCh7XG4gICAgICAgICAgICAgICAgICBPcmFjbGVOYW1lOiBnZXROYW1lKHJjKSxcbiAgICAgICAgICAgICAgICAgIGNvbm5lY3RIb3N0OiBnZXRIb3N0KHJjLiRwb2RzWzBdKSxcbiAgICAgICAgICAgICAgICAgIGNvbm5lY3RQb3J0OiByYy4kcG9kc1swXS5zcGVjLmNvbnRhaW5lcnNbMF0ucG9ydHNbMF0uaG9zdFBvcnQsXG4gICAgICAgICAgICAgICAgICBpc1RhcmdldDogZmFsc2VcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgIH1cbiAgICAgICB9KTtcblxuICAgICAgIGlmKGFuc3dlcil7XG4gICAgICAgICAgICRodHRwKHtcbiAgICAgICAgICAgICAgIHVybDogJy9leHRyYWN0T3JhY2xlRGF0YScsXG4gICAgICAgICAgICAgICBtZXRob2Q6J1BPU1QnLFxuICAgICAgICAgICAgICAgcGFyYW1zOntwYXJhbTogb3JhY2xlQ29ubmVjdFBhcmFtfVxuICAgICAgICAgICB9KS5zdWNjZXNzKGZ1bmN0aW9uKGRhdGEsaGVhZGVyLGNvbmZpZyxzdGF0dXMpe1xuICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJzdWNjZXNzXCIpO1xuICAgICAgICAgICB9KS5lcnJvcihmdW5jdGlvbihkYXRhLGhlYWRlcixjb25maWcsc3RhdHVzKXtcbiAgICAgICAgICAgICAgIC8vbG9nLndhcm4oXCJGYWlsZWQgdG8gY29ubmVjdCBcIiArIGNvbm5lY3RQYXJhbSArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcbiAgICAgICAgICAgfSk7XG4gICAgICAgfWVsc2V7XG4gICAgICAgICAgIGFsZXJ0KFwi5oKo6YCJ5oup55qE5rGH5oC75pWw5o2u5bqT5oiW6ZyA6KaB5rGH5oC755qE5pWw5o2u5bqT5Lit5a2Y5Zyo5pyq5ZCv5Yqo5oiQ5Yqf55qE5pWw5o2u5bqT77yM5a+86Ie05rGH5oC75pON5L2c5aSx6LSl77yM6K+36YeN5paw6YCJ5oup77yBXCIpO1xuICAgICAgIH1cbiAgIH1cblxuICAgZXhwb3J0IGZ1bmN0aW9uIGNoZWNrb3V0T3JhY2xlUkNJc1J1bm5pbmcocmMpe1xuICAgICAgIGlmKHJjLiRwb2RDb3VudGVycy5yZWFkeSAmJiByYy4kb3JhY2xlU3RhdHVzID09IDIpe1xuICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgIH1lbHNle1xuICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgfVxuICAgfVxufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxuXG5kZWNsYXJlIHZhciBPU09BdXRoQ29uZmlnOmFueTtcbmRlY2xhcmUgdmFyIEdvb2dsZU9BdXRoQ29uZmlnOmFueTtcbmRlY2xhcmUgdmFyIEtleWNsb2FrQ29uZmlnOmFueTtcblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIGV4cG9ydCB2YXIgX21vZHVsZSA9IGFuZ3VsYXIubW9kdWxlKHBsdWdpbk5hbWUsIFsnaGF3dGlvLWNvcmUnLCAnaGF3dGlvLXVpJywgJ3VpLmNvZGVtaXJyb3InLCAndWkudmFsaWRhdGUnLCdrdWJlcm5ldGVzVUknXSk7XG4gIGV4cG9ydCB2YXIgY29udHJvbGxlciA9IFBsdWdpbkhlbHBlcnMuY3JlYXRlQ29udHJvbGxlckZ1bmN0aW9uKF9tb2R1bGUsIHBsdWdpbk5hbWUpO1xuICBleHBvcnQgdmFyIHJvdXRlID0gUGx1Z2luSGVscGVycy5jcmVhdGVSb3V0aW5nRnVuY3Rpb24odGVtcGxhdGVQYXRoKTtcblxuICBfbW9kdWxlLmNvbmZpZyhbJyRyb3V0ZVByb3ZpZGVyJywgKCRyb3V0ZVByb3ZpZGVyOm5nLnJvdXRlLklSb3V0ZVByb3ZpZGVyKSA9PiB7XG5cbiAgICAkcm91dGVQcm92aWRlclxuICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvcG9kcycpLCByb3V0ZSgncG9kcy5odG1sJywgZmFsc2UpKVxuICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdyZXBsaWNhdGlvbkNvbnRyb2xsZXJzJyksIHJvdXRlKCdyZXBsaWNhdGlvbkNvbnRyb2xsZXJzLmh0bWwnLCBmYWxzZSkpXG4gICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ3NlcnZpY2VzJyksIHJvdXRlKCdzZXJ2aWNlcy5odG1sJywgZmFsc2UpKVxuICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdldmVudHMnKSwgcm91dGUoJ2V2ZW50cy5odG1sJywgZmFsc2UpKVxuICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdhcHBzJyksIHJvdXRlKCdhcHBzLmh0bWwnLCBmYWxzZSkpXG4gICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2FwcHMvOm5hbWVzcGFjZScpLCByb3V0ZSgnYXBwcy5odG1sJywgZmFsc2UpKVxuICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICd0ZW1wbGF0ZXMnKSwgcm91dGUoJ3RlbXBsYXRlcy5odG1sJywgZmFsc2UpKVxuICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdob3N0cycpLCByb3V0ZSgnaG9zdHMuaHRtbCcsIGZhbHNlKSlcbiAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnaG9zdHMvOmlkJyksIHJvdXRlKCdob3N0Lmh0bWwnLCB0cnVlKSlcbiAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAncGlwZWxpbmVzJyksIHJvdXRlKCdwaXBlbGluZXMuaHRtbCcsIGZhbHNlKSlcbiAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnb3ZlcnZpZXcnKSwgcm91dGUoJ292ZXJ2aWV3Lmh0bWwnLCB0cnVlKSlcbiAgICAgIC53aGVuKGNvbnRleHQsIHtyZWRpcmVjdFRvOiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ3JlcGxpY2F0aW9uQ29udHJvbGxlcnMnKX0pO1xuXG5cbiAgICBhbmd1bGFyLmZvckVhY2goW2NvbnRleHQsIFwiL3dvcmtzcGFjZXMvOndvcmtzcGFjZS9wcm9qZWN0cy86cHJvamVjdFwiXSwgKGNvbnRleHQpID0+IHtcbiAgICAgICRyb3V0ZVByb3ZpZGVyXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL25hbWVzcGFjZS86bmFtZXNwYWNlL3BvZENyZWF0ZScpLCByb3V0ZSgncG9kQ3JlYXRlLmh0bWwnLCBmYWxzZSkpXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL25hbWVzcGFjZS86bmFtZXNwYWNlL3BvZEVkaXQvOmlkJyksIHJvdXRlKCdwb2RFZGl0Lmh0bWwnLCBmYWxzZSkpXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL25hbWVzcGFjZS86bmFtZXNwYWNlL3BvZHMnKSwgcm91dGUoJ3BvZHMuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvbmFtZXNwYWNlLzpuYW1lc3BhY2UvcG9kcy86aWQnKSwgcm91dGUoJ3BvZC5odG1sJywgZmFsc2UpKVxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9uYW1lc3BhY2UvOm5hbWVzcGFjZS9yZXBsaWNhdGlvbkNvbnRyb2xsZXJzJyksIHJvdXRlKCdyZXBsaWNhdGlvbkNvbnRyb2xsZXJzLmh0bWwnLCBmYWxzZSkpXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL25hbWVzcGFjZS86bmFtZXNwYWNlL3JlcGxpY2F0aW9uQ29udHJvbGxlcnMvOmlkJyksIHJvdXRlKCdyZXBsaWNhdGlvbkNvbnRyb2xsZXIuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvbmFtZXNwYWNlLzpuYW1lc3BhY2UvcmVwbGljYXRpb25Db250cm9sbGVyQ3JlYXRlJyksIHJvdXRlKCdyZXBsaWNhdGlvbkNvbnRyb2xsZXJDcmVhdGUuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvbmFtZXNwYWNlLzpuYW1lc3BhY2UvcmVwbGljYXRpb25Db250cm9sbGVyRWRpdC86aWQnKSwgcm91dGUoJ3JlcGxpY2F0aW9uQ29udHJvbGxlckVkaXQuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvbmFtZXNwYWNlLzpuYW1lc3BhY2Uvc2VjcmV0cycpLCByb3V0ZSgnc2VjcmV0cy5odG1sJywgZmFsc2UpKVxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9uYW1lc3BhY2UvOm5hbWVzcGFjZS9zZWNyZXRzLzppZCcpLCByb3V0ZSgnc2VjcmV0Lmh0bWwnLCBmYWxzZSkpXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL25hbWVzcGFjZS86bmFtZXNwYWNlL3NlY3JldENyZWF0ZScpLCByb3V0ZSgnc2VjcmV0Lmh0bWwnLCBmYWxzZSkpXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL25hbWVzcGFjZS86bmFtZXNwYWNlL3NlcnZpY2VzJyksIHJvdXRlKCdzZXJ2aWNlcy5odG1sJywgZmFsc2UpKVxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9uYW1lc3BhY2UvOm5hbWVzcGFjZS9zZXJ2aWNlcy86aWQnKSwgcm91dGUoJ3NlcnZpY2UuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvbmFtZXNwYWNlLzpuYW1lc3BhY2Uvc2VydmljZUNyZWF0ZScpLCByb3V0ZSgnc2VydmljZUNyZWF0ZS5odG1sJywgZmFsc2UpKVxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9uYW1lc3BhY2UvOm5hbWVzcGFjZS9zZXJ2aWNlRWRpdC86aWQnKSwgcm91dGUoJ3NlcnZpY2VFZGl0Lmh0bWwnLCBmYWxzZSkpXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL25hbWVzcGFjZS86bmFtZXNwYWNlL2V2ZW50cycpLCByb3V0ZSgnZXZlbnRzLmh0bWwnLCBmYWxzZSkpXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL25hbWVzcGFjZS86bmFtZXNwYWNlL2FwcHMnKSwgcm91dGUoJ2FwcHMuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvbmFtZXNwYWNlLzpuYW1lc3BhY2Uvb3ZlcnZpZXcnKSwgcm91dGUoJ292ZXJ2aWV3Lmh0bWwnLCB0cnVlKSlcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvbmFtZXNwYWNlLzpuYW1lc3BhY2UvdGVtcGxhdGVzLzp0YXJnZXROYW1lc3BhY2UnKSwgcm91dGUoJ3RlbXBsYXRlcy5odG1sJywgZmFsc2UpKVxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9uYW1lc3BhY2UvOm5hbWVzcGFjZScpLCByb3V0ZSgnYXBwcy5odG1sJywgZmFsc2UpKVxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2J1aWxkcycpLCByb3V0ZSgnYnVpbGRzLmh0bWwnLCBmYWxzZSkpXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnYnVpbGRzLzppZCcpLCByb3V0ZSgnYnVpbGQuaHRtbCcsIHRydWUpKVxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2J1aWxkTG9ncy86aWQnKSwgcm91dGUoJ2J1aWxkTG9ncy5odG1sJywgdHJ1ZSkpXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnYnVpbGRDb25maWdzJyksIHJvdXRlKCdidWlsZENvbmZpZ3MuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdidWlsZENvbmZpZ3MvOmlkJyksIHJvdXRlKCdidWlsZENvbmZpZy5odG1sJywgdHJ1ZSkpXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnYnVpbGRDb25maWdFZGl0LzppZCcpLCByb3V0ZSgnYnVpbGRDb25maWdFZGl0Lmh0bWwnLCB0cnVlKSlcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdkZXBsb3ltZW50Q29uZmlncycpLCByb3V0ZSgnZGVwbG95bWVudENvbmZpZ3MuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdkZXBsb3ltZW50Q29uZmlncy86aWQnKSwgcm91dGUoJ2RlcGxveW1lbnRDb25maWcuaHRtbCcsIHRydWUpKVxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2ltYWdlUmVwb3NpdG9yaWVzJyksIHJvdXRlKCdpbWFnZVJlcG9zaXRvcmllcy5odG1sJywgZmFsc2UpKVxuICAgIH0pO1xuXG4gICAgYW5ndWxhci5mb3JFYWNoKFtjb250ZXh0LCBcIi93b3Jrc3BhY2VzLzp3b3Jrc3BhY2VcIiwgXCIvd29ya3NwYWNlcy86d29ya3NwYWNlL3Byb2plY3RzLzpwcm9qZWN0XCJdLCAoY29udGV4dCkgPT4ge1xuICAgICAgJHJvdXRlUHJvdmlkZXJcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdidWlsZENvbmZpZ0VkaXQnKSwgcm91dGUoJ2J1aWxkQ29uZmlnRWRpdC5odG1sJywgdHJ1ZSkpXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnYnVpbGRDb25maWdFZGl0LzppZCcpLCByb3V0ZSgnYnVpbGRDb25maWdFZGl0Lmh0bWwnLCB0cnVlKSlcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdpbXBvcnRQcm9qZWN0JyksIHJvdXRlKCdpbXBvcnRQcm9qZWN0Lmh0bWwnLCB0cnVlKSlcbiAgICB9KTtcbiAgfV0pO1xuXG5cbiAgX21vZHVsZS5mYWN0b3J5KCdBcHBMaWJyYXJ5VVJMJywgWyckcm9vdFNjb3BlJywgKCRyb290U2NvcGU6bmcuSVJvb3RTY29wZVNlcnZpY2UpID0+IHtcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKGt1YmVybmV0ZXNBcGlVcmwoKSwgXCIvcHJveHlcIiwga3ViZXJuZXRlc05hbWVzcGFjZVBhdGgoKSwgXCIvc2VydmljZXMvYXBwLWxpYnJhcnlcIik7XG4gIH1dKTtcblxuICBfbW9kdWxlLmZhY3RvcnkoJ1dpa2lHaXRVcmxQcmVmaXgnLCAoKSA9PiB7XG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihrdWJlcm5ldGVzQXBpVXJsKCksIFwiL3Byb3h5XCIsIGt1YmVybmV0ZXNOYW1lc3BhY2VQYXRoKCksIFwic2VydmljZXMvYXBwLWxpYnJhcnlcIik7XG4gIH0pO1xuXG4gIF9tb2R1bGUuZmFjdG9yeSgnd2lraVJlcG9zaXRvcnknLCBbXCIkbG9jYXRpb25cIiwgXCJsb2NhbFN0b3JhZ2VcIiwgKCRsb2NhdGlvbiwgbG9jYWxTdG9yYWdlKSA9PiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XSk7XG5cbiAgX21vZHVsZS5mYWN0b3J5KCdDb25uZWN0RGlhbG9nU2VydmljZScsIFsnJHJvb3RTY29wZScsICgkcm9vdFNjb3BlOm5nLklSb290U2NvcGVTZXJ2aWNlKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRpYWxvZzogbmV3IFVJLkRpYWxvZygpLFxuICAgICAgc2F2ZUNyZWRlbnRpYWxzOiBmYWxzZSxcbiAgICAgIHVzZXJOYW1lOiBudWxsLFxuICAgICAgcGFzc3dvcmQ6IG51bGwsXG4gICAgICBqb2xva2lhVXJsOiBudWxsLFxuICAgICAgY29udGFpbmVyTmFtZTogbnVsbCxcbiAgICAgIHZpZXc6IG51bGxcbiAgICB9O1xuICB9XSk7XG5cbiAgX21vZHVsZS5maWx0ZXIoJ2t1YmVybmV0ZXNQYWdlTGluaycsICgpID0+IGVudGl0eVBhZ2VMaW5rKTtcblxuICBfbW9kdWxlLmZpbHRlcigncmVsYXRpdmVUaW1lJywgKCkgPT4ge1xuICAgIHJldHVybiAoZGF0ZSkgPT4ge1xuICAgICAgcmV0dXJuIGh1bWFuZGF0ZS5yZWxhdGl2ZVRpbWUoZGF0ZSk7XG4gICAgfVxuICB9KTtcblxuICBfbW9kdWxlLnJ1bihbJ3ZpZXdSZWdpc3RyeScsICdTZXJ2aWNlUmVnaXN0cnknLCAnSGF3dGlvTmF2JywgJ0t1YmVybmV0ZXNNb2RlbCcsICckdGVtcGxhdGVDYWNoZScsICh2aWV3UmVnaXN0cnksIFNlcnZpY2VSZWdpc3RyeSwgSGF3dGlvTmF2LCBLdWJlcm5ldGVzTW9kZWwsICR0ZW1wbGF0ZUNhY2hlKSA9PiB7XG5cbiAgICBsb2cuZGVidWcoXCJSdW5uaW5nXCIpO1xuICAgIHZpZXdSZWdpc3RyeVsna3ViZXJuZXRlcyddID0gdGVtcGxhdGVQYXRoICsgJ2xheW91dEt1YmVybmV0ZXMuaHRtbCc7XG4gICAgdmFyIGJ1aWxkZXIgPSBIYXd0aW9OYXYuYnVpbGRlcigpO1xuICAgIHZhciBhcHBzID0gYnVpbGRlci5pZCgna3ViZS1hcHBzJylcbiAgICAgIC5ocmVmKCgpID0+IFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnYXBwcycpKVxuICAgICAgLnRpdGxlKCgpID0+ICdBcHBzJylcbiAgICAgIC5idWlsZCgpO1xuXG4gICAgdmFyIHNlcnZpY2VzID0gYnVpbGRlci5pZCgna3ViZS1zZXJ2aWNlcycpXG4gICAgICAuaHJlZigoKSA9PiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ3NlcnZpY2VzJykpXG4gICAgICAudGl0bGUoKCkgPT4gJ1NlcnZpY2VzJylcbiAgICAgIC5idWlsZCgpO1xuXG4gICAgdmFyIGNvbnRyb2xsZXJzID0gYnVpbGRlci5pZCgna3ViZS1jb250cm9sbGVycycpXG4gICAgICAuaHJlZigoKSA9PiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ3JlcGxpY2F0aW9uQ29udHJvbGxlcnMnKSlcbiAgICAgIC50aXRsZSgoKSA9PiAnb3JhY2xl5pyN5YqhJylcbiAgICAgIC5idWlsZCgpO1xuXG4gICAgdmFyIHBvZHMgPSBidWlsZGVyLmlkKCdrdWJlLXBvZHMnKVxuICAgICAgLmhyZWYoKCkgPT4gVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdwb2RzJykpXG4gICAgICAudGl0bGUoKCkgPT4gJ+a1i+ivlemhtemdoicpXG4gICAgICAuYnVpbGQoKTtcblxuICAgIHZhciBldmVudHMgPSBidWlsZGVyLmlkKCdrdWJlLWV2ZW50cycpXG4gICAgICAuaHJlZigoKSA9PiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2V2ZW50cycpKVxuICAgICAgLnRpdGxlKCgpID0+ICfmnI3liqHlkK/liqjml6Xlv5cnKVxuICAgICAgLmJ1aWxkKCk7XG5cbiAgICB2YXIgaG9zdHMgPSBidWlsZGVyLmlkKCdrdWJlLWhvc3RzJylcbiAgICAgIC5ocmVmKCgpID0+IFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnaG9zdHMnKSlcbiAgICAgIC50aXRsZSgoKSA9PiAn6ZuG576k6IqC54K5JylcbiAgICAgIC5idWlsZCgpO1xuXG4gICAgdmFyIG92ZXJ2aWV3ID0gYnVpbGRlci5pZCgna3ViZS1vdmVydmlldycpXG4gICAgICAuaHJlZigoKSA9PiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ292ZXJ2aWV3JykpXG4gICAgICAudGl0bGUoKCkgPT4gJ0RpYWdyYW0nKVxuICAgICAgLmJ1aWxkKCk7XG5cbiAgICB2YXIgYnVpbGRzID0gYnVpbGRlci5pZCgna3ViZS1idWlsZHMnKVxuICAgICAgLmhyZWYoKCkgPT4gVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdidWlsZHMnKSlcbiAgICAgIC50aXRsZSgoKSA9PiAnQnVpbGRzJylcbiAgICAgIC5idWlsZCgpO1xuXG4gICAgdmFyIGJ1aWxkQ29uZmlncyA9IGJ1aWxkZXIuaWQoJ2t1YmUtYnVpbGRDb25maWdzJylcbiAgICAgIC5ocmVmKCgpID0+IFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnYnVpbGRDb25maWdzJykpXG4gICAgICAudGl0bGUoKCkgPT4gJ0J1aWxkIENvbmZpZ3MnKVxuICAgICAgLmJ1aWxkKCk7XG5cbiAgICB2YXIgZGVwbG95cyA9IGJ1aWxkZXIuaWQoJ2t1YmUtZGVwbG95cycpXG4gICAgICAuaHJlZigoKSA9PiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2RlcGxveW1lbnRDb25maWdzJykpXG4gICAgICAudGl0bGUoKCkgPT4gJ0RlcGxveXMnKVxuICAgICAgLmJ1aWxkKCk7XG5cbiAgICB2YXIgaW1hZ2VSZXBvc2l0b3JpZXMgPSBidWlsZGVyLmlkKCdrdWJlLWltYWdlUmVwb3NpdG9yaWVzJylcbiAgICAgIC5ocmVmKCgpID0+IFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnaW1hZ2VSZXBvc2l0b3JpZXMnKSlcbiAgICAgIC50aXRsZSgoKSA9PiAnUmVnaXN0cmllcycpXG4gICAgICAuYnVpbGQoKTtcblxuICAgIHZhciBwaXBlbGluZXMgPSBidWlsZGVyLmlkKCdrdWJlLXBpcGVsaW5lcycpXG4gICAgICAuaHJlZigoKSA9PiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ3BpcGVsaW5lcycpKVxuICAgICAgLnRpdGxlKCgpID0+ICdQaXBlbGluZXMnKVxuICAgICAgLmJ1aWxkKCk7XG5cbiAgICB2YXIgcmVwb3MgPSBidWlsZGVyLmlkKCdrdWJlLXJlcG9zJylcbiAgICAgIC5ocmVmKCgpID0+IFwiL2ZvcmdlL3JlcG9zXCIpXG4gICAgICAuaXNWYWxpZCgoKSA9PiBTZXJ2aWNlUmVnaXN0cnkuaGFzU2VydmljZShmYWJyaWM4Rm9yZ2VTZXJ2aWNlTmFtZSkgJiYgU2VydmljZVJlZ2lzdHJ5Lmhhc1NlcnZpY2UoZ29nc1NlcnZpY2VOYW1lKSlcbiAgICAgIC50aXRsZSgoKSA9PiAnUmVwb3NpdG9yaWVzJylcbiAgICAgIC5idWlsZCgpO1xuXG4gICAgdmFyIG1haW5UYWIgPSBidWlsZGVyLmlkKCdrdWJlcm5ldGVzJylcbiAgICAgIC5yYW5rKDEwMClcbiAgICAgIC5kZWZhdWx0UGFnZSh7XG4gICAgICAgIHJhbms6IDIwLFxuICAgICAgICBpc1ZhbGlkOiAoeWVzLCBubykgPT4ge1xuICAgICAgICAgIHllcygpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmhyZWYoKCkgPT4gY29udGV4dClcbiAgICAgIC50aXRsZSgoKSA9PiAn5pyN5Yqh6ZuG576kJylcbiAgICAgIC50YWJzKGNvbnRyb2xsZXJzLCBldmVudHMpXG4gICAgICAuYnVpbGQoKTtcbiAgICBIYXd0aW9OYXYuYWRkKG1haW5UYWIpO1xuXG4gICAgLyogdGVzdEt1YmVybmV0ZXNNb2RlbFxuICAgIEhhd3Rpb05hdi5hZGQoe1xuICAgICAgaWQ6ICdrOHNBcHBTd2l0Y2hlcicsXG4gICAgICB0aXRsZTogKCkgPT4gJycsIC8vIG5vdCB1c2VkIGFzICd0ZW1wbGF0ZScgYmVsb3cgb3ZlcnJpZGVzIHRoaXNcbiAgICAgIGlzVmFsaWQ6ICgpID0+IEt1YmVybmV0ZXNNb2RlbC5zZXJ2aWNlQXBwcy5sZW5ndGggPiAwLFxuICAgICAgY29udGV4dDogdHJ1ZSxcbiAgICAgIHRlbXBsYXRlOiAoKSA9PiAkdGVtcGxhdGVDYWNoZS5nZXQoVXJsSGVscGVycy5qb2luKHRlbXBsYXRlUGF0aCwgJ3NlcnZpY2VBcHBzLmh0bWwnKSlcbiAgICB9KTtcbiAgICAqL1xuXG4gICAgdmFyIHByb2plY3RzVGFiID0gYnVpbGRlci5pZCgnb3BlbnNoaWZ0JylcbiAgICAgIC5yYW5rKDEwMClcbiAgICAgIC5ocmVmKCgpID0+IFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnYnVpbGRDb25maWdzJykgKyAnP3N1Yi10YWI9a3ViZS1idWlsZENvbmZpZ3MnKVxuICAgICAgLnRpdGxlKCgpID0+ICdQcm9qZWN0cycpXG4gICAgICAvLyBsZXRzIGRpc2FibGUgdGhlIHBpcGVsaW5lcyB2aWV3IGZvciBub3dcbiAgICAgIC8vIHBpcGVsaW5lcyxcbiAgICAgIC50YWJzKHJlcG9zLCBidWlsZENvbmZpZ3MsIGJ1aWxkcywgZGVwbG95cywgaW1hZ2VSZXBvc2l0b3JpZXMpXG4gICAgICAuYnVpbGQoKTtcblxuICAgIC8vSGF3dGlvTmF2LmFkZChwcm9qZWN0c1RhYik7XG4gIH1dKTtcblxuICBoYXd0aW9QbHVnaW5Mb2FkZXIucmVnaXN0ZXJQcmVCb290c3RyYXBUYXNrKHtcbiAgICBuYW1lOiAnS3ViZXJuZXRlc0luaXQnLFxuICAgIHRhc2s6IChuZXh0KSA9PiB7XG4gICAgICAkLmdldFNjcmlwdCgnb3Njb25zb2xlL2NvbmZpZy5qcycpXG4gICAgICAgIC5kb25lKChzY3JpcHQsIHRleHRTdGF0dXMpID0+IHtcbiAgICAgICAgICB2YXIgY29uZmlnOkt1YmVybmV0ZXNDb25maWcgPSBLdWJlcm5ldGVzLm9zQ29uZmlnID0gd2luZG93WydPUEVOU0hJRlRfQ09ORklHJ107XG4gICAgICAgICAgbG9nLmRlYnVnKFwiRmV0Y2hlZCBPQXV0aCBjb25maWc6IFwiLCBjb25maWcpO1xuICAgICAgICAgIHZhciBtYXN0ZXI6c3RyaW5nID0gY29uZmlnLm1hc3Rlcl91cmk7XG4gICAgICAgICAgaWYgKCFtYXN0ZXIgJiYgY29uZmlnLmFwaSAmJiBjb25maWcuYXBpLms4cykge1xuICAgICAgICAgICAgdmFyIG1hc3RlclVyaSA9IG5ldyBVUkkoKS5ob3N0KGNvbmZpZy5hcGkuazhzLmhvc3RQb3J0KS5wYXRoKFwiXCIpLnF1ZXJ5KFwiXCIpO1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5hcGkuazhzLnByb3RvKSB7XG4gICAgICAgICAgICAgIG1hc3RlclVyaS5wcm90b2NvbChjb25maWcuYXBpLms4cy5wcm90byk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtYXN0ZXIgPSBtYXN0ZXJVcmkudG9TdHJpbmcoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBPU09BdXRoQ29uZmlnID0gY29uZmlnLm9wZW5zaGlmdDtcbiAgICAgICAgICBHb29nbGVPQXV0aENvbmZpZyA9IGNvbmZpZy5nb29nbGU7XG4gICAgICAgICAgS2V5Y2xvYWtDb25maWcgPSBjb25maWcua2V5Y2xvYWs7XG5cbiAgICAgICAgICBpZiAoT1NPQXV0aENvbmZpZyAmJiAhbWFzdGVyKSB7XG4gICAgICAgICAgICAvLyBUT0RPIGF1dGgubWFzdGVyX3VyaSBubyBsb25nZXIgdXNlZCByaWdodD9cbiAgICAgICAgICAgIC8vIG1hc3RlciA9IE9TT0F1dGhDb25maWcubWFzdGVyX3VyaTtcbiAgICAgICAgICAgIGlmICghbWFzdGVyKSB7XG4gICAgICAgICAgICAgIHZhciBvYXV0aF9hdXRob3JpemVfdXJpID0gT1NPQXV0aENvbmZpZy5vYXV0aF9hdXRob3JpemVfdXJpO1xuICAgICAgICAgICAgICBpZiAob2F1dGhfYXV0aG9yaXplX3VyaSkge1xuICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gb2F1dGhfYXV0aG9yaXplX3VyaTtcbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gdGV4dC5pbmRleE9mKFwiOi8vXCIpO1xuICAgICAgICAgICAgICAgIGlmIChpZHggPiAwKSB7XG4gICAgICAgICAgICAgICAgICBpZHggKz0gMztcbiAgICAgICAgICAgICAgICAgIGlkeCA9IHRleHQuaW5kZXhPZihcIi9cIiwgaWR4KTtcbiAgICAgICAgICAgICAgICAgIGlmIChpZHggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hc3RlciA9IHRleHQuc3Vic3RyaW5nKDAsICsraWR4KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCghS3ViZXJuZXRlcy5tYXN0ZXJVcmwgfHwgS3ViZXJuZXRlcy5tYXN0ZXJVcmwgPT09IFwiL1wiKSAmJiAoIW1hc3RlciB8fCBtYXN0ZXIgPT09IFwiL1wiKSkge1xuICAgICAgICAgICAgLy8gbGV0cyBkZWZhdWx0IHRoZSBtYXN0ZXIgdG8gdGhlIGN1cnJlbnQgcHJvdG9jb2wgYW5kIGhvc3QvcG9ydFxuICAgICAgICAgICAgLy8gaW4gY2FzZSB0aGUgbWFzdGVyIHVybCBpcyBcIi9cIiBhbmQgd2UgYXJlXG4gICAgICAgICAgICAvLyBzZXJ2aW5nIHVwIHN0YXRpYyBjb250ZW50IGZyb20gaW5zaWRlIC9hcGkvdjEvbmFtZXNwYWNlcy9kZWZhdWx0L3NlcnZpY2VzL2ZhYnJpYzggb3Igc29tZXRoaW5nIGxpa2UgdGhhdFxuICAgICAgICAgICAgdmFyIGhyZWYgPSBsb2NhdGlvbi5ocmVmO1xuICAgICAgICAgICAgaWYgKGhyZWYpIHtcbiAgICAgICAgICAgICAgbWFzdGVyID0gbmV3IFVSSShocmVmKS5xdWVyeShcIlwiKS5wYXRoKFwiXCIpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChtYXN0ZXIpIHtcbiAgICAgICAgICAgIEt1YmVybmV0ZXMubWFzdGVyVXJsID0gbWFzdGVyO1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmZhaWwoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgbG9nLmRlYnVnKFwiRXJyb3IgZmV0Y2hpbmcgT0FVVEggY29uZmlnOiBcIiwgcmVzcG9uc2UpO1xuICAgICAgICB9KVxuICAgICAgICAuYWx3YXlzKCgpID0+IHtcbiAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSwgdHJ1ZSk7XG5cbiAgaGF3dGlvUGx1Z2luTG9hZGVyLmFkZE1vZHVsZSgnbmdSZXNvdXJjZScpO1xuICBoYXd0aW9QbHVnaW5Mb2FkZXIuYWRkTW9kdWxlKHBsdWdpbk5hbWUpO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcbiAgXG4gIGV4cG9ydCB2YXIgQXBwcyA9IGNvbnRyb2xsZXIoXCJBcHBzXCIsXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1NlcnZpY2VzXCIsIFwiS3ViZXJuZXRlc1JlcGxpY2F0aW9uQ29udHJvbGxlcnNcIiwgXCJLdWJlcm5ldGVzUG9kc1wiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJGRpYWxvZ1wiLCBcIiR0aW1lb3V0XCIsIFxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOiBLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTZXJ2aWNlczpuZy5yZXNvdXJjZS5JUmVzb3VyY2VDbGFzczxhbnk+LCBLdWJlcm5ldGVzUmVwbGljYXRpb25Db250cm9sbGVyczpuZy5yZXNvdXJjZS5JUmVzb3VyY2VDbGFzczxhbnk+LCBLdWJlcm5ldGVzUG9kczpuZy5yZXNvdXJjZS5JUmVzb3VyY2VDbGFzczxhbnk+LCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwsXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJGRpYWxvZywgJHRpbWVvdXQpID0+IHtcblxuICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcblxuICAgICRzY29wZS5hcHBzID0gW107XG4gICAgJHNjb3BlLmFsbEFwcHMgPSBbXTtcbiAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAkc2NvcGUuZmV0Y2hlZCA9IGZhbHNlO1xuICAgICRzY29wZS5qc29uID0gJyc7XG4gICAgQ29udHJvbGxlckhlbHBlcnMuYmluZE1vZGVsVG9TZWFyY2hQYXJhbSgkc2NvcGUsICRsb2NhdGlvbiwgJ2lkJywgJ19pZCcsIHVuZGVmaW5lZCk7XG4gICAgQ29udHJvbGxlckhlbHBlcnMuYmluZE1vZGVsVG9TZWFyY2hQYXJhbSgkc2NvcGUsICRsb2NhdGlvbiwgJ2FwcFNlbGVjdG9yU2hvdycsICdvcGVuQXBwJywgdW5kZWZpbmVkKTtcbiAgICBDb250cm9sbGVySGVscGVycy5iaW5kTW9kZWxUb1NlYXJjaFBhcmFtKCRzY29wZSwgJGxvY2F0aW9uLCAnbW9kZScsICdtb2RlJywgJ2RldGFpbCcpO1xuXG4gICAgdmFyIGJyYW5jaCA9ICRzY29wZS5icmFuY2ggfHwgXCJtYXN0ZXJcIjtcbiAgICB2YXIgbmFtZXNwYWNlID0gbnVsbDtcblxuICAgIGZ1bmN0aW9uIGFwcE1hdGNoZXMoYXBwKSB7XG4gICAgICB2YXIgZmlsdGVyVGV4dCA9ICRzY29wZS5hcHBTZWxlY3Rvci5maWx0ZXJUZXh0O1xuICAgICAgaWYgKGZpbHRlclRleHQpIHtcbiAgICAgICAgcmV0dXJuIENvcmUubWF0Y2hGaWx0ZXJJZ25vcmVDYXNlKGFwcC5ncm91cElkLCBmaWx0ZXJUZXh0KSB8fFxuICAgICAgICAgIENvcmUubWF0Y2hGaWx0ZXJJZ25vcmVDYXNlKGFwcC5hcnRpZmFjdElkLCBmaWx0ZXJUZXh0KSB8fFxuICAgICAgICAgIENvcmUubWF0Y2hGaWx0ZXJJZ25vcmVDYXNlKGFwcC5uYW1lLCBmaWx0ZXJUZXh0KSB8fFxuICAgICAgICAgIENvcmUubWF0Y2hGaWx0ZXJJZ25vcmVDYXNlKGFwcC5kZXNjcmlwdGlvbiwgZmlsdGVyVGV4dCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhcHBSdW5uaW5nKGFwcCkge1xuICAgICAgcmV0dXJuICRzY29wZS5tb2RlbC5hcHBzLmFueSgocnVubmluZykgPT4gcnVubmluZy5hcHBQYXRoID09PSBhcHAuYXBwUGF0aCk7XG4gICAgfVxuXG4gICAgJHNjb3BlLnRhYmxlQ29uZmlnID0ge1xuICAgICAgZGF0YTogJ21vZGVsLmFwcHMnLFxuICAgICAgc2hvd1NlbGVjdGlvbkNoZWNrYm94OiB0cnVlLFxuICAgICAgZW5hYmxlUm93Q2xpY2tTZWxlY3Rpb246IGZhbHNlLFxuICAgICAgbXVsdGlTZWxlY3Q6IHRydWUsXG4gICAgICBzZWxlY3RlZEl0ZW1zOiBbXSxcbiAgICAgIGZpbHRlck9wdGlvbnM6IHtcbiAgICAgICAgZmlsdGVyVGV4dDogJGxvY2F0aW9uLnNlYXJjaCgpW1wicVwiXSB8fCAnJ1xuICAgICAgfSxcbiAgICAgIGNvbHVtbkRlZnM6IFtcbiAgICAgICAgeyBmaWVsZDogJyRuYW1lJywgZGlzcGxheU5hbWU6ICdBcHAnLCBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChVcmxIZWxwZXJzLmpvaW4odGVtcGxhdGVQYXRoLCBcImFwcEljb25UZW1sYXRlLmh0bWxcIikpIH0sXG4gICAgICAgIHsgZmllbGQ6ICckc2VydmljZXNUZXh0JywgZGlzcGxheU5hbWU6ICdTZXJ2aWNlcycsIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFVybEhlbHBlcnMuam9pbih0ZW1wbGF0ZVBhdGgsIFwiYXBwU2VydmljZXNUZW1wbGF0ZS5odG1sXCIpKSB9LFxuICAgICAgICB7IGZpZWxkOiAnJHJlcGxpY2F0aW9uQ29udHJvbGxlcnNUZXh0JywgZGlzcGxheU5hbWU6ICdDb250cm9sbGVycycsIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFVybEhlbHBlcnMuam9pbih0ZW1wbGF0ZVBhdGgsIFwiYXBwUmVwbGljYXRpb25Db250cm9sbGVyVGVtcGxhdGUuaHRtbFwiKSkgfSxcbiAgICAgICAgeyBmaWVsZDogJyRwb2RDb3VudCcsIGRpc3BsYXlOYW1lOiAnUG9kcycsIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFVybEhlbHBlcnMuam9pbih0ZW1wbGF0ZVBhdGgsIFwiYXBwUG9kQ291bnRzQW5kTGlua1RlbXBsYXRlLmh0bWxcIikpIH0sXG4gICAgICAgIHsgZmllbGQ6ICckY3JlYXRpb25EYXRlJywgZGlzcGxheU5hbWU6ICdEZXBsb3llZCcsIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFVybEhlbHBlcnMuam9pbih0ZW1wbGF0ZVBhdGgsIFwiYXBwRGVwbG95ZWRUZW1wbGF0ZS5odG1sXCIpKSB9XG4gICAgICBdXG4gICAgfTtcblxuICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcblxuXG4gICAgJHNjb3BlLmV4cGFuZGVkUG9kcyA9IFtdO1xuXG4gICAgJHNjb3BlLiRvbignZG8tcmVzaXplJywgKCRldmVudCwgY29udHJvbGxlcikgPT4ge1xuICAgICAgJHNjb3BlLnJlc2l6ZURpYWxvZy5vcGVuKGNvbnRyb2xsZXIpO1xuICAgIH0pO1xuXG4gICAgICAgIFxuICAgICRzY29wZS5wb2RFeHBhbmRlZCA9IChwb2QpID0+IHtcbiAgICAgIHZhciBpZCA9IGdldE5hbWUocG9kKVxuICAgICAgcmV0dXJuIGlkICYmICgkc2NvcGUuZXhwYW5kZWRQb2RzIHx8IFtdKS5pbmRleE9mKGlkKSA+PSAwO1xuICAgIH07XG5cbiAgICAkc2NvcGUuZXhwYW5kUG9kID0gKHBvZCkgPT4ge1xuICAgICAgdmFyIGlkID0gZ2V0TmFtZShwb2QpO1xuICAgICAgaWYgKGlkKSB7XG4gICAgICAgICRzY29wZS5leHBhbmRlZFBvZHMucHVzaChpZCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgICRzY29wZS5jb2xsYXBzZVBvZCA9IChwb2QpID0+IHtcbiAgICAgIHZhciBpZCA9IGdldE5hbWUocG9kKTtcbiAgICAgIGlmIChpZCkge1xuICAgICAgICBfLnJlbW92ZSgkc2NvcGUuZXhwYW5kZWRQb2RzLCAodikgPT4gaWQgPT09IHYpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAkc2NvcGUuJG9uKCckcm91dGVVcGRhdGUnLCAoJGV2ZW50KSA9PiB7XG4gICAgICBLdWJlcm5ldGVzLnNldEpzb24oJHNjb3BlLCAkbG9jYXRpb24uc2VhcmNoKClbJ19pZCddLCAkc2NvcGUubW9kZWwuYXBwcyk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBkZWxldGVBcHAoYXBwLCBvbkNvbXBsZXRlRm4pIHtcbiAgICAgIGZ1bmN0aW9uIGRlbGV0ZVNlcnZpY2VzKHNlcnZpY2VzLCBzZXJ2aWNlLCBvbkNvbXBsZXRlZEZuKSB7XG4gICAgICAgIGlmICghc2VydmljZSB8fCAhc2VydmljZXMpIHtcbiAgICAgICAgICByZXR1cm4gb25Db21wbGV0ZWRGbigpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBpZCA9IGdldE5hbWUoc2VydmljZSk7XG4gICAgICAgIGlmICghaWQpIHtcbiAgICAgICAgICBsb2cud2FybihcIk5vIElEIGZvciBzZXJ2aWNlIFwiICsgYW5ndWxhci50b0pzb24oc2VydmljZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIEt1YmVybmV0ZXNTZXJ2aWNlcy5kZWxldGUoe1xuICAgICAgICAgICAgaWQ6IGlkXG4gICAgICAgICAgfSwgdW5kZWZpbmVkLCAoKSA9PiB7XG4gICAgICAgICAgICBsb2cuZGVidWcoXCJEZWxldGVkIHNlcnZpY2U6IFwiLCBpZCk7XG4gICAgICAgICAgICBkZWxldGVTZXJ2aWNlcyhzZXJ2aWNlcywgc2VydmljZXMuc2hpZnQoKSwgb25Db21wbGV0ZWRGbik7XG4gICAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBsb2cuZGVidWcoXCJFcnJvciBkZWxldGluZyBzZXJ2aWNlOiBcIiwgZXJyb3IpO1xuICAgICAgICAgICAgZGVsZXRlU2VydmljZXMoc2VydmljZXMsIHNlcnZpY2VzLnNoaWZ0KCksIG9uQ29tcGxldGVkRm4pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGRlbGV0ZVJlcGxpY2F0aW9uQ29udHJvbGxlcnMocmVwbGljYXRpb25Db250cm9sbGVycywgcmVwbGljYXRpb25Db250cm9sbGVyLCBvbkNvbXBsZXRlZEZuKSB7XG4gICAgICAgIGlmICghcmVwbGljYXRpb25Db250cm9sbGVyIHx8ICFyZXBsaWNhdGlvbkNvbnRyb2xsZXJzKSB7XG4gICAgICAgICAgcmV0dXJuIG9uQ29tcGxldGVkRm4oKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaWQgPSBnZXROYW1lKHJlcGxpY2F0aW9uQ29udHJvbGxlcik7XG4gICAgICAgIGlmICghaWQpIHtcbiAgICAgICAgICBsb2cud2FybihcIk5vIElEIGZvciByZXBsaWNhdGlvbkNvbnRyb2xsZXIgXCIgKyBhbmd1bGFyLnRvSnNvbihyZXBsaWNhdGlvbkNvbnRyb2xsZXIpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBLdWJlcm5ldGVzUmVwbGljYXRpb25Db250cm9sbGVycy5kZWxldGUoe1xuICAgICAgICAgICAgaWQ6IGlkXG4gICAgICAgICAgfSwgdW5kZWZpbmVkLCAoKSA9PiB7XG4gICAgICAgICAgICBsb2cuZGVidWcoXCJEZWxldGVkIHJlcGxpY2F0aW9uQ29udHJvbGxlcjogXCIsIGlkKTtcbiAgICAgICAgICAgIGRlbGV0ZVJlcGxpY2F0aW9uQ29udHJvbGxlcnMocmVwbGljYXRpb25Db250cm9sbGVycywgcmVwbGljYXRpb25Db250cm9sbGVycy5zaGlmdCgpLCBvbkNvbXBsZXRlZEZuKTtcbiAgICAgICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGxvZy5kZWJ1ZyhcIkVycm9yIGRlbGV0aW5nIHJlcGxpY2F0aW9uQ29udHJvbGxlcjogXCIsIGVycm9yKTtcbiAgICAgICAgICAgIGRlbGV0ZVJlcGxpY2F0aW9uQ29udHJvbGxlcnMocmVwbGljYXRpb25Db250cm9sbGVycywgcmVwbGljYXRpb25Db250cm9sbGVycy5zaGlmdCgpLCBvbkNvbXBsZXRlZEZuKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBkZWxldGVQb2RzKHBvZHMsIHBvZCwgb25Db21wbGV0ZWRGbikge1xuICAgICAgICBpZiAoIXBvZCB8fCAhcG9kcykge1xuICAgICAgICAgIHJldHVybiBvbkNvbXBsZXRlZEZuKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGlkID0gZ2V0TmFtZShwb2QpO1xuICAgICAgICBpZiAoIWlkKSB7XG4gICAgICAgICAgbG9nLndhcm4oXCJObyBJRCBmb3IgcG9kIFwiICsgYW5ndWxhci50b0pzb24ocG9kKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgS3ViZXJuZXRlc1BvZHMuZGVsZXRlKHtcbiAgICAgICAgICAgIGlkOiBpZFxuICAgICAgICAgIH0sIHVuZGVmaW5lZCwgKCkgPT4ge1xuICAgICAgICAgICAgbG9nLmRlYnVnKFwiRGVsZXRlZCBwb2Q6IFwiLCBpZCk7XG4gICAgICAgICAgICBkZWxldGVQb2RzKHBvZHMsIHBvZHMuc2hpZnQoKSwgb25Db21wbGV0ZWRGbik7XG4gICAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBsb2cuZGVidWcoXCJFcnJvciBkZWxldGluZyBwb2Q6IFwiLCBlcnJvcik7XG4gICAgICAgICAgICBkZWxldGVQb2RzKHBvZHMsIHBvZHMuc2hpZnQoKSwgb25Db21wbGV0ZWRGbik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHNlcnZpY2VzID0gW10uY29uY2F0KGFwcC5zZXJ2aWNlcyk7XG4gICAgICBkZWxldGVTZXJ2aWNlcyhzZXJ2aWNlcywgc2VydmljZXMuc2hpZnQoKSwgKCkgPT4ge1xuXG4gICAgICAgIHZhciByZXBsaWNhdGlvbkNvbnRyb2xsZXJzID0gW10uY29uY2F0KGFwcC5yZXBsaWNhdGlvbkNvbnRyb2xsZXJzKTtcbiAgICAgICAgZGVsZXRlUmVwbGljYXRpb25Db250cm9sbGVycyhyZXBsaWNhdGlvbkNvbnRyb2xsZXJzLCByZXBsaWNhdGlvbkNvbnRyb2xsZXJzLnNoaWZ0KCksICgpID0+IHtcblxuICAgICAgICAgIHZhciBwb2RzID0gW10uY29uY2F0KGFwcC5wb2RzKTtcbiAgICAgICAgICBkZWxldGVQb2RzKHBvZHMsIHBvZHMuc2hpZnQoKSwgb25Db21wbGV0ZUZuKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAkc2NvcGUuZGVsZXRlU2luZ2xlQXBwID0gKGFwcCkgPT4ge1xuICAgICAgJHNjb3BlLmRlbGV0ZVByb21wdChbYXBwXSk7XG4gICAgfVxuXG4gICAgJHNjb3BlLmRlbGV0ZVByb21wdCA9IChzZWxlY3RlZCkgPT4ge1xuICAgICAgaWYgKGFuZ3VsYXIuaXNTdHJpbmcoc2VsZWN0ZWQpKSB7XG4gICAgICAgIHNlbGVjdGVkID0gW3tcbiAgICAgICAgICBpZDogc2VsZWN0ZWRcbiAgICAgICAgfV07XG4gICAgICB9XG4gICAgICBVSS5tdWx0aUl0ZW1Db25maXJtQWN0aW9uRGlhbG9nKDxVSS5NdWx0aUl0ZW1Db25maXJtQWN0aW9uT3B0aW9ucz57XG4gICAgICAgIGNvbGxlY3Rpb246IHNlbGVjdGVkLFxuICAgICAgICBpbmRleDogJyRuYW1lJyxcbiAgICAgICAgb25DbG9zZTogKHJlc3VsdDpib29sZWFuKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIG5leHQpIHtcbiAgICAgICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWQgPSBuZXh0Lm5hbWU7XG4gICAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiZGVsZXRpbmc6IFwiLCBpZCk7XG4gICAgICAgICAgICAgICAgZGVsZXRlQXBwKG5leHQsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcImRlbGV0ZWQ6IFwiLCBpZCk7XG4gICAgICAgICAgICAgICAgICBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdGl0bGU6ICdEZWxldGUgQXBwcz8nLFxuICAgICAgICBhY3Rpb246ICdUaGUgZm9sbG93aW5nIEFwcHMgd2lsbCBiZSBkZWxldGVkOicsXG4gICAgICAgIG9rVGV4dDogJ0RlbGV0ZScsXG4gICAgICAgIG9rQ2xhc3M6ICdidG4tZGFuZ2VyJyxcbiAgICAgICAgY3VzdG9tOiBcIlRoaXMgb3BlcmF0aW9uIGlzIHBlcm1hbmVudCBvbmNlIGNvbXBsZXRlZCFcIixcbiAgICAgICAgY3VzdG9tQ2xhc3M6IFwiYWxlcnQgYWxlcnQtd2FybmluZ1wiXG4gICAgICB9KS5vcGVuKCk7XG4gICAgfTtcblxuICAgICRzY29wZS5hcHBTZWxlY3RvciA9IHtcbiAgICAgIGZpbHRlclRleHQ6IFwiXCIsXG4gICAgICBmb2xkZXJzOiBbXSxcbiAgICAgIHNlbGVjdGVkQXBwczogW10sXG5cbiAgICAgIGlzT3BlbjogKGZvbGRlcikgPT4ge1xuICAgICAgICBpZiAoJHNjb3BlLmFwcFNlbGVjdG9yLmZpbHRlclRleHQgIT09ICcnIHx8IGZvbGRlci5leHBhbmRlZCkge1xuICAgICAgICAgIHJldHVybiBcIm9wZW5lZFwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcImNsb3NlZFwiO1xuICAgICAgfSxcblxuICAgICAgZ2V0U2VsZWN0ZWRDbGFzczogKGFwcCkgPT4ge1xuICAgICAgICBpZiAoYXBwLmFic3RyYWN0KSB7XG4gICAgICAgICAgcmV0dXJuIFwiYWJzdHJhY3RcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXBwLnNlbGVjdGVkKSB7XG4gICAgICAgICAgcmV0dXJuIFwic2VsZWN0ZWRcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgIH0sXG5cbiAgICAgIHNob3dBcHA6IChhcHApID0+IHtcbiAgICAgICAgcmV0dXJuIGFwcE1hdGNoZXMoYXBwKSAmJiAhYXBwUnVubmluZyhhcHApO1xuICAgICAgfSxcblxuICAgICAgc2hvd0ZvbGRlcjogKGZvbGRlcikgPT4ge1xuICAgICAgICByZXR1cm4gISRzY29wZS5hcHBTZWxlY3Rvci5maWx0ZXJUZXh0IHx8IGZvbGRlci5hcHBzLnNvbWUoKGFwcCkgPT4gYXBwTWF0Y2hlcyhhcHApICYmICFhcHBSdW5uaW5nKGFwcCkpO1xuICAgICAgfSxcblxuICAgICAgY2xlYXJTZWxlY3RlZDogKCkgPT4ge1xuICAgICAgICBhbmd1bGFyLmZvckVhY2goJHNjb3BlLm1vZGVsLmFwcEZvbGRlcnMsIChmb2xkZXIpID0+IHtcbiAgICAgICAgICBhbmd1bGFyLmZvckVhY2goZm9sZGVyLmFwcHMsIChhcHApID0+IHtcbiAgICAgICAgICAgIGFwcC5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgJHNjb3BlLmFwcFNlbGVjdG9yLnNlbGVjdGVkQXBwcyA9IFtdO1xuICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgfSxcblxuICAgICAgdXBkYXRlU2VsZWN0ZWQ6ICgpID0+IHtcbiAgICAgICAgLy8gbGV0cyB1cGRhdGUgdGhlIHNlbGVjdGVkIGFwcHNcbiAgICAgICAgdmFyIHNlbGVjdGVkQXBwcyA9IFtdO1xuICAgICAgICBhbmd1bGFyLmZvckVhY2goJHNjb3BlLm1vZGVsLmFwcEZvbGRlcnMsIChmb2xkZXIpID0+IHtcbiAgICAgICAgICB2YXIgYXBwcyA9IGZvbGRlci5hcHBzLmZpbHRlcigoYXBwKSA9PiBhcHAuc2VsZWN0ZWQpO1xuICAgICAgICAgIGlmIChhcHBzKSB7XG4gICAgICAgICAgICBzZWxlY3RlZEFwcHMgPSBzZWxlY3RlZEFwcHMuY29uY2F0KGFwcHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgICRzY29wZS5hcHBTZWxlY3Rvci5zZWxlY3RlZEFwcHMgPSBfLnNvcnRCeShzZWxlY3RlZEFwcHMsIFwibmFtZVwiKTtcbiAgICAgIH0sXG5cbiAgICAgIHNlbGVjdDogKGFwcCwgZmxhZykgPT4ge1xuICAgICAgICBhcHAuc2VsZWN0ZWQgPSBmbGFnO1xuICAgICAgICAkc2NvcGUuYXBwU2VsZWN0b3IudXBkYXRlU2VsZWN0ZWQoKTtcbiAgICAgIH0sXG5cbiAgICAgIGhhc1NlbGVjdGlvbjogKCkgPT4ge1xuICAgICAgICByZXR1cm4gJHNjb3BlLm1vZGVsLmFwcEZvbGRlcnMuYW55KChmb2xkZXIpID0+IGZvbGRlci5hcHBzLmFueSgoYXBwKSA9PiBhcHAuc2VsZWN0ZWQpKTtcbiAgICAgIH0sXG5cblxuICAgICAgcnVuU2VsZWN0ZWRBcHBzOiAoKSA9PiB7XG4gICAgICAgIC8vIGxldHMgcnVuIGFsbCB0aGUgc2VsZWN0ZWQgYXBwc1xuICAgICAgICBhbmd1bGFyLmZvckVhY2goJHNjb3BlLmFwcFNlbGVjdG9yLnNlbGVjdGVkQXBwcywgKGFwcCkgPT4ge1xuICAgICAgICAgIHZhciBuYW1lID0gYXBwLm5hbWU7XG4gICAgICAgICAgdmFyIG1ldGFkYXRhUGF0aCA9IGFwcC5tZXRhZGF0YVBhdGg7XG4gICAgICAgICAgaWYgKG1ldGFkYXRhUGF0aCkge1xuICAgICAgICAgICAgLy8gbGV0cyBsb2FkIHRoZSBqc29uL3lhbWxcbiAgICAgICAgICAgIC8vdmFyIHVybCA9IGdpdFBhdGhUb1VybChXaWtpLmdpdFJlbGF0aXZlVVJMKGJyYW5jaCwgbWV0YWRhdGFQYXRoKSk7XG4gICAgICAgICAgICB2YXIgdXJsID0gZ2l0UGF0aFRvVXJsKG1ldGFkYXRhUGF0aCwgYnJhbmNoKTtcbiAgICAgICAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgICAgICAgJGh0dHAuZ2V0KHVybCkuXG4gICAgICAgICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGxldHMgY29udmVydCB0aGUganNvbiBvYmplY3Qgc3RydWN0dXJlIGludG8gYSBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgdmFyIGpzb24gPSBhbmd1bGFyLnRvSnNvbihkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZuID0gKCkgPT4ge307XG4gICAgICAgICAgICAgICAgICAgIEt1YmVybmV0ZXMucnVuQXBwKCRsb2NhdGlvbiwgJHNjb3BlLCAkaHR0cCwgS3ViZXJuZXRlc0FwaVVSTCwganNvbiwgbmFtZSwgZm4sIG5hbWVzcGFjZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkuXG4gICAgICAgICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgICAkc2NvcGUuc3VtbWFyeUh0bWwgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBsZXRzIGdvIGJhY2sgdG8gdGhlIGFwcHMgdmlld1xuICAgICAgICAkc2NvcGUuYXBwU2VsZWN0b3IuY2xlYXJTZWxlY3RlZCgpO1xuICAgICAgICAkc2NvcGUuYXBwU2VsZWN0b3JTaG93ID0gZmFsc2U7XG4gICAgICB9XG4gICAgfTtcblxuICB9XSk7XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIF9tb2R1bGUuZGlyZWN0aXZlKFwiaGF3dGlvQnJlYWRjcnVtYnNcIiwgWydIYXd0aW9CcmVhZGNydW1icycsIChIYXd0aW9CcmVhZGNydW1icykgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAvKlxuICAgICAgdGVtcGxhdGVVcmw6IEt1YmVybmV0ZXMudGVtcGxhdGVQYXRoICsgJ2JyZWFkY3J1bWJzLmh0bWwnXG4gICAgICAqL1xuICAgICAgbGluazogKHNjb3BlLCBlbGVtZW50LCBhdHRycykgPT4ge1xuICAgICAgICBIYXd0aW9CcmVhZGNydW1icy5hcHBseShzY29wZS4kZXZhbCgnYnJlYWRjcnVtYkNvbmZpZycpKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XSk7XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIGV4cG9ydCB2YXIgQnVpbGRDb250cm9sbGVyID0gY29udHJvbGxlcihcIkJ1aWxkQ29udHJvbGxlclwiLFxuICAgIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIkt1YmVybmV0ZXNTY2hlbWFcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXG4gICAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNTY2hlbWEsXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcblxuICAgICAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAgICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xuICAgICAgICAkc2NvcGUuaWQgPSAkcm91dGVQYXJhbXNbXCJpZFwiXTtcbiAgICAgICAgJHNjb3BlLnNjaGVtYSA9IEt1YmVybmV0ZXNTY2hlbWE7XG4gICAgICAgICRzY29wZS5jb25maWcgPSBLdWJlcm5ldGVzU2NoZW1hLmRlZmluaXRpb25zLm9zX2J1aWxkX0J1aWxkO1xuXG4gICAgICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcbiAgICAgICAgJHNjb3BlLmJyZWFkY3J1bWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdEJyZWFkY3J1bWJzKCRzY29wZS5pZCk7XG4gICAgICAgICRzY29wZS5zdWJUYWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdFN1Yk5hdkJhcnMoJHNjb3BlLmlkLCBudWxsLCAkc2NvcGUpO1xuXG4gICAgICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdXBkYXRlRGF0YSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICAkc2NvcGUuJG9uKCckcm91dGVVcGRhdGUnLCAoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgdXBkYXRlRGF0YSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICB1cGRhdGVEYXRhKCk7XG5cbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcbiAgICAgICAgICAkc2NvcGUuaXRlbSA9IG51bGw7XG4gICAgICAgICAgaWYgKCRzY29wZS5pZCkge1xuICAgICAgICAgICAgdmFyIHVybCA9IGJ1aWxkUmVzdFVybCgkc2NvcGUuaWQpO1xuICAgICAgICAgICAgJGh0dHAuZ2V0KHVybCkuXG4gICAgICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICRzY29wZS5lbnRpdHkgPSBlbnJpY2hCdWlsZChkYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJHNjb3BlLmZldGNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICAgICAgIH0pLlxuICAgICAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJHNjb3BlLmZldGNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1dKTtcbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSGVscGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxuXG5tb2R1bGUgS3ViZXJuZXRlcyB7XG5cbiAgZXhwb3J0IHZhciBCdWlsZENvbmZpZ0NvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiQnVpbGRDb25maWdDb250cm9sbGVyXCIsXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiS3ViZXJuZXRlc1NjaGVtYVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcbiAgICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDpLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc1NjaGVtYSxcbiAgICAgICAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xuXG4gICAgICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xuICAgICAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XG4gICAgICAgICRzY29wZS5pZCA9ICRyb3V0ZVBhcmFtc1tcImlkXCJdO1xuICAgICAgICAkc2NvcGUuc2NoZW1hID0gS3ViZXJuZXRlc1NjaGVtYTtcbiAgICAgICAgJHNjb3BlLmNvbmZpZyA9IEt1YmVybmV0ZXNTY2hlbWEuZGVmaW5pdGlvbnMub3NfYnVpbGRfQnVpbGRDb25maWc7XG5cbiAgICAgICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xuICAgICAgICAkc2NvcGUuYnJlYWRjcnVtYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVQcm9qZWN0QnJlYWRjcnVtYnMoJHNjb3BlLmlkKTtcbiAgICAgICAgJHNjb3BlLnN1YlRhYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVQcm9qZWN0U3ViTmF2QmFycygkc2NvcGUuaWQpO1xuXG4gICAgICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdXBkYXRlRGF0YSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICAkc2NvcGUuJG9uKCckcm91dGVVcGRhdGUnLCAoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgdXBkYXRlRGF0YSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICB1cGRhdGVEYXRhKCk7XG5cbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcbiAgICAgICAgICAkc2NvcGUuaXRlbSA9IG51bGw7XG4gICAgICAgICAgaWYgKCRzY29wZS5pZCkge1xuICAgICAgICAgICAgdmFyIHVybCA9IGJ1aWxkQ29uZmlnUmVzdFVybCgkc2NvcGUuaWQpO1xuICAgICAgICAgICAgJGh0dHAuZ2V0KHVybCkuXG4gICAgICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICRzY29wZS5lbnRpdHkgPSBkYXRhO1xuICAgICAgICAgICAgICAgICAgdmFyIHNvcnRlZEJ1aWxkcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICBlbnJpY2hCdWlsZENvbmZpZyhkYXRhLCBzb3J0ZWRCdWlsZHMpO1xuICAgICAgICAgICAgICAgICAgJHNjb3BlLm1vZGVsLnNldFByb2plY3QoJHNjb3BlLmVudGl0eSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICRzY29wZS5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgICAgICAgICB9KS5cbiAgICAgICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRzY29wZS5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XSk7XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIGV4cG9ydCB2YXIgQnVpbGRDb25maWdFZGl0Q29udHJvbGxlciA9IF9tb2R1bGUuY29udHJvbGxlcihcIkt1YmVybmV0ZXMuQnVpbGRDb25maWdFZGl0Q29udHJvbGxlclwiLCAoJHNjb3BlLCAkZWxlbWVudCwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLCAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCwgSzhTQ2xpZW50RmFjdG9yeSwgU2NoZW1hUmVnaXN0cnk6SGF3dGlvRm9ybXMuU2NoZW1hUmVnaXN0cnkpID0+IHtcblxuICAgICAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAgICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xuICAgICAgICAkc2NvcGUuaWQgPSAkcm91dGVQYXJhbXNbXCJwcm9qZWN0XCJdIHx8ICRyb3V0ZVBhcmFtc1tcImlkXCJdO1xuICAgICAgICAkc2NvcGUuc2NoZW1hID0gS3ViZXJuZXRlc1NjaGVtYTtcblxuICAgICAgICB2YXIgbW9kZSA9ICRzY29wZS4kZXZhbCgnbW9kZScpIHx8ICdlZGl0JztcblxuICAgICAgICBsb2cuZGVidWcoXCJNb2RlOiBcIiwgbW9kZSk7XG5cblxuICAgICAgICB2YXIgc3BlY0NvbmZpZyA9IFNjaGVtYVJlZ2lzdHJ5LmdldFNjaGVtYSgnaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkQ29uZmlnU3BlYycpO1xuICAgICAgICB2YXIgZ2l0QnVpbGRTb3VyY2UgPSBTY2hlbWFSZWdpc3RyeS5nZXRTY2hlbWEoJ2lvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5HaXRCdWlsZFNvdXJjZScpO1xuICAgICAgICB2YXIgYnVpbGRTb3VyY2UgPSBTY2hlbWFSZWdpc3RyeS5nZXRTY2hlbWEoJ2lvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZFNvdXJjZScpO1xuICAgICAgICB2YXIgYnVpbGRPdXRwdXQgPSBTY2hlbWFSZWdpc3RyeS5nZXRTY2hlbWEoJ2lvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZE91dHB1dCcpO1xuICAgICAgICB2YXIgcmVzb3VyY2VzID0gU2NoZW1hUmVnaXN0cnkuZ2V0U2NoZW1hKCdpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJlc291cmNlUmVxdWlyZW1lbnRzJyk7XG4gICAgICAgIHZhciByZXZpc2lvbiA9IFNjaGVtYVJlZ2lzdHJ5LmdldFNjaGVtYSgnaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlNvdXJjZVJldmlzaW9uJyk7XG4gICAgICAgIHZhciBzdHJhdGVneSA9IFNjaGVtYVJlZ2lzdHJ5LmdldFNjaGVtYSgnaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkU3RyYXRlZ3knKTtcbiAgICAgICAgdmFyIGN1c3RvbVN0cmF0ZWd5ID0gU2NoZW1hUmVnaXN0cnkuZ2V0U2NoZW1hKCdpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQ3VzdG9tQnVpbGRTdHJhdGVneScpO1xuICAgICAgICB2YXIgYnVpbGRUcmlnZ2VyUG9saWN5ID0gU2NoZW1hUmVnaXN0cnkuZ2V0U2NoZW1hKCdpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRUcmlnZ2VyUG9saWN5Jyk7XG5cbiAgICAgICAgdmFyIGdldFNlY3JldHMgPSAoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuICRzY29wZS5zZWNyZXRzO1xuICAgICAgICB9O1xuXG5cbiAgICAgICAgdmFyIHNlY3JldFNjaGVtYVR5cGUgPSBcImZhYnJpYzhfU2VjcmV0UmVmZXJlbmNlXCI7XG4gICAgICAgIHZhciBzZWNyZXRTY2hlbWFSZWYgPSBcIiMvZGVmaW5pdGlvbnMvXCIgKyBzZWNyZXRTY2hlbWFUeXBlO1xuICAgICAgICB2YXIgc2VjcmV0U2NoZW1hSmF2YVR5cGUgPSBcImlvLmZhYnJpYzguY29uc29sZS5TZWNyZXRSZWZlcmVuY2VcIjtcblxuICAgICAgICB2YXIgc2VjcmV0TmFtZUVsZW1lbnQgPSA8SGF3dGlvRm9ybXMuRm9ybUVsZW1lbnQ+IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImVudW1cIjogZ2V0U2VjcmV0cyxcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBzZWNyZXRTY2hlbWE6IEhhd3Rpb0Zvcm1zLkZvcm1Db25maWd1cmF0aW9uID0gPGFueT4ge1xuICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIFwibmFtZVwiOiBzZWNyZXROYW1lRWxlbWVudFxuICAgICAgICAgIH0sXG4gICAgICAgICAgamF2YVR5cGU6IHNlY3JldFNjaGVtYUphdmFUeXBlXG4gICAgICAgIH07XG4gICAgICAgIFNjaGVtYVJlZ2lzdHJ5LmFkZFNjaGVtYShzZWNyZXRTY2hlbWFUeXBlLCBzZWNyZXRTY2hlbWEpO1xuXG4gICAgICAgIC8vIGxldHMgc3dpdGNoIHRvIHRoZSBuZXcgc2VjcmV0cyB0eXBlczpcbiAgICAgICAgdmFyIHNvdXJjZVNlY3JldFByb3BlcnR5ID0gQ29yZS5wYXRoR2V0KGJ1aWxkU291cmNlLCBbXCJwcm9wZXJ0aWVzXCIsIFwic291cmNlU2VjcmV0XCJdKTtcbiAgICAgICAgYW5ndWxhci5mb3JFYWNoKFtcbiAgICAgICAgICBDb3JlLnBhdGhHZXQoY3VzdG9tU3RyYXRlZ3ksIFtcInByb3BlcnRpZXNcIiwgXCJwdWxsU2VjcmV0XCJdKSxcbiAgICAgICAgICBzb3VyY2VTZWNyZXRQcm9wZXJ0eSxcbiAgICAgICAgXSwgKHNjaGVtYVR5cGUpID0+IHtcbiAgICAgICAgICBpZiAoc2NoZW1hVHlwZSkge1xuICAgICAgICAgICAgc2NoZW1hVHlwZVtcInR5cGVcIl0gPSBzZWNyZXRTY2hlbWFUeXBlO1xuICAgICAgICAgICAgc2NoZW1hVHlwZVtcIiRyZWZcIl0gPSBzZWNyZXRTY2hlbWFSZWY7XG4gICAgICAgICAgICBzY2hlbWFUeXBlW1wiamF2YVR5cGVcIl0gPSBzZWNyZXRTY2hlbWFKYXZhVHlwZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGxldHMgdHJ5IG1ha2UgdGhlIGJ1aWxkU291cmNlJ3Mgc291cmNlU2VjcmV0IG1hbmRhdG9yeVxuICAgICAgICAvL3NjaGVtYVNldFJlcXVpcmVkKGN1c3RvbVN0cmF0ZWd5LCAncHVsbFNlY3JldCcpO1xuICAgICAgICBzY2hlbWFTZXRSZXF1aXJlZChidWlsZFNvdXJjZSwgJ3NvdXJjZVNlY3JldCcpO1xuICAgICAgICBpZiAoc291cmNlU2VjcmV0UHJvcGVydHkpIHtcbiAgICAgICAgICBDb3JlLnBhdGhTZXQoc291cmNlU2VjcmV0UHJvcGVydHksIFsncHJvcGVydGllcycsICdyZXF1aXJlZCddLCB0cnVlKTtcbiAgICAgICAgICBDb3JlLnBhdGhTZXQoc291cmNlU2VjcmV0UHJvcGVydHksIFsncHJvcGVydGllcycsICdpbnB1dC1hdHRyaWJ1dGVzJywgJ3JlcXVpcmVkJ10sIHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgJHNjb3BlLmN1c3RvbVN0cmF0ZWd5ID0gY3VzdG9tU3RyYXRlZ3k7XG4gICAgICAgICRzY29wZS5idWlsZFNvdXJjZSA9IGJ1aWxkU291cmNlO1xuXG4gICAgICAgICRzY29wZS5zZWNyZXRzID0gW107XG5cbiAgICAgICAgLy8gJHNjb3BlLmNvbmZpZyA9IEt1YmVybmV0ZXNTY2hlbWEuZGVmaW5pdGlvbnMub3NfYnVpbGRfQnVpbGRDb25maWc7XG4gICAgICAgIC8vJHNjb3BlLnNwZWNDb25maWcgPSBLdWJlcm5ldGVzU2NoZW1hLmRlZmluaXRpb25zLm9zX2J1aWxkX0J1aWxkQ29uZmlnU3BlYztcbiAgICAgICAgLy9cbiAgICAgICAgc3BlY0NvbmZpZy5zdHlsZSA9IEhhd3Rpb0Zvcm1zLkZvcm1TdHlsZS5TVEFOREFSRDtcbiAgICAgICAgc3BlY0NvbmZpZy5wcm9wZXJ0aWVzWyd0cmlnZ2VycyddWydsYWJlbC1hdHRyaWJ1dGVzJ10gPSB7XG4gICAgICAgICAgc3R5bGU6ICdkaXNwbGF5OiBub25lOydcbiAgICAgICAgfTtcblxuICAgICAgICBnaXRCdWlsZFNvdXJjZS5jb250cm9scyA9IFsndXJpJywgJ3JlZicsICcqJ107XG4gICAgICAgIGJ1aWxkU291cmNlLnByb3BlcnRpZXNbJ3R5cGUnXS50eXBlID0gJ2hpZGRlbic7XG4gICAgICAgIGJ1aWxkU291cmNlLnByb3BlcnRpZXNbJ3R5cGUnXVsnZGVmYXVsdCddID0gJ0dpdCc7XG4gICAgICAgIGJ1aWxkU291cmNlLmNvbnRyb2xzID0gWydnaXQnLCAnY29udGV4dERpcicsICdzb3VyY2VTZWNyZXQnLCAnKiddO1xuXG4gICAgICAgIGdpdEJ1aWxkU291cmNlWydoaWRlTGVnZW5kJ10gPSB0cnVlO1xuICAgICAgICBidWlsZFNvdXJjZVsnaGlkZUxlZ2VuZCddID0gdHJ1ZTtcbiAgICAgICAgYnVpbGRPdXRwdXRbJ2hpZGVMZWdlbmQnXSA9IHRydWU7XG4gICAgICAgIHJlc291cmNlc1snaGlkZUxlZ2VuZCddID0gdHJ1ZTtcbiAgICAgICAgcmV2aXNpb25bJ2hpZGVMZWdlbmQnXSA9IHRydWU7XG4gICAgICAgIHN0cmF0ZWd5WydoaWRlTGVnZW5kJ10gPSB0cnVlO1xuXG4gICAgICAgIHN0cmF0ZWd5LmNvbnRyb2xzID0gWyd0eXBlJywgJyonXTtcbiAgICAgICAgc3RyYXRlZ3kucHJvcGVydGllc1sndHlwZSddID0ge1xuICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICBlbnVtOiBbe1xuICAgICAgICAgICAgJ3ZhbHVlJzogJ0N1c3RvbScsXG4gICAgICAgICAgICAnbGFiZWwnOiAnQ3VzdG9tJ1xuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICd2YWx1ZSc6ICdEb2NrZXInLFxuICAgICAgICAgICAgJ2xhYmVsJzogJ0RvY2tlcidcbiAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAndmFsdWUnOiAnU291cmNlJyxcbiAgICAgICAgICAgICdsYWJlbCc6ICdTb3VyY2UnXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgICAgY3VzdG9tU3RyYXRlZ3lbJ2NvbnRyb2wtZ3JvdXAtYXR0cmlidXRlcyddID0ge1xuICAgICAgICAgICduZy1zaG93JzogXCJlbnRpdHkudHlwZSA9PSAnQ3VzdG9tJ1wiXG4gICAgICAgIH07XG4gICAgICAgIHN0cmF0ZWd5LnByb3BlcnRpZXNbJ2RvY2tlclN0cmF0ZWd5J11bJ2NvbnRyb2wtZ3JvdXAtYXR0cmlidXRlcyddID0ge1xuICAgICAgICAgICduZy1zaG93JzogXCJlbnRpdHkudHlwZSA9PSAnRG9ja2VyJ1wiXG4gICAgICAgIH07XG4gICAgICAgIHN0cmF0ZWd5LnByb3BlcnRpZXNbJ3NvdXJjZVN0cmF0ZWd5J11bJ2NvbnRyb2wtZ3JvdXAtYXR0cmlidXRlcyddID0ge1xuICAgICAgICAgICduZy1zaG93JzogXCJlbnRpdHkudHlwZSA9PSAnU291cmNlJ1wiXG4gICAgICAgIH07XG5cbiAgICAgICAgYnVpbGRUcmlnZ2VyUG9saWN5LmNvbnRyb2xzID0gWyd0eXBlJywgJyonXTtcbiAgICAgICAgYnVpbGRUcmlnZ2VyUG9saWN5LnByb3BlcnRpZXNbJ3R5cGUnXSA9IHtcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICBlbnVtOiBbe1xuICAgICAgICAgICAgJ3ZhbHVlJzogJ0dpdGh1YicsXG4gICAgICAgICAgICAnbGFiZWwnOiAnR2l0aHViJ1xuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICd2YWx1ZSc6ICdJbWFnZUNoYW5nZScsXG4gICAgICAgICAgICAnbGFiZWwnOiAnSW1hZ2UgQ2hhbmdlJ1xuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICd2YWx1ZSc6ICdHZW5lcmljJyxcbiAgICAgICAgICAgICdsYWJlbCc6ICdHZW5lcmljJ1xuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICAgIGJ1aWxkVHJpZ2dlclBvbGljeS5wcm9wZXJ0aWVzWydnZW5lcmljJ11bJ2NvbnRyb2wtZ3JvdXAtYXR0cmlidXRlcyddID0ge1xuICAgICAgICAgICduZy1zaG93JzogXCJlbnRpdHkudHlwZSA9PSAnR2VuZXJpYydcIlxuICAgICAgICB9O1xuICAgICAgICBidWlsZFRyaWdnZXJQb2xpY3kucHJvcGVydGllc1snZ2l0aHViJ11bJ2NvbnRyb2wtZ3JvdXAtYXR0cmlidXRlcyddID0ge1xuICAgICAgICAgICduZy1zaG93JzogXCJlbnRpdHkudHlwZSA9PSAnR2l0aHViJ1wiXG4gICAgICAgIH07XG4gICAgICAgIGJ1aWxkVHJpZ2dlclBvbGljeS5wcm9wZXJ0aWVzWydpbWFnZUNoYW5nZSddWydjb250cm9sLWdyb3VwLWF0dHJpYnV0ZXMnXSA9IHtcbiAgICAgICAgICAnbmctc2hvdyc6IFwiZW50aXR5LnR5cGUgPT0gJ0ltYWdlQ2hhbmdlJ1wiXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gcmUtYXJyYW5naW5nIHRoZSBjb250cm9sc1xuICAgICAgICAvL3NwZWNDb25maWcuY29udHJvbHMgPSBbJ3NvdXJjZScsICcqJ107XG4gICAgICAgIFxuICAgICAgICAvLyB0YWJzXG4gICAgICAgIHNwZWNDb25maWcudGFicyA9IHtcbiAgICAgICAgICBcIlNvdXJjZVwiOiBbXCJzb3VyY2VcIl0sXG4gICAgICAgICAgXCJSZXZpc2lvblwiOiBbXCJyZXZpc2lvblwiXSxcbiAgICAgICAgICBcIk91dHB1dFwiOiBbXCJvdXRwdXRcIl0sXG4gICAgICAgICAgXCJSZXNvdXJjZXNcIjogW1wicmVzb3VyY2VzXCJdLFxuICAgICAgICAgIFwiU3RyYXRlZ3lcIjogW1wic3RyYXRlZ3lcIl0sXG4gICAgICAgICAgXCJUcmlnZ2Vyc1wiOiBbXCJ0cmlnZ2Vyc1wiXSxcbiAgICAgICAgICBcIlNlcnZpY2UgQWNjb3VudFwiOiBbXCJzZXJ2aWNlQWNjb3VudFwiXVxuICAgICAgICB9O1xuICAgICAgICAvKlxuICAgICAgICAgKiB3aXphcmQsIG5lZWRzIGFuICdvbkZpbmlzaCcgZnVuY3Rpb24gaW4gdGhlIHNjb3BlXG4gICAgICAgIHNwZWNDb25maWcud2l6YXJkID0gPGFueT57XG4gICAgICAgICAgcGFnZXM6IHtcbiAgICAgICAgICAgIFNvdXJjZToge1xuICAgICAgICAgICAgICBjb250cm9sczogW1wic291cmNlXCJdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgUmV2aXNpb246IHtcbiAgICAgICAgICAgICAgY29udHJvbHM6IFtcInJldmlzaW9uXCJdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgT3V0cHV0OiB7XG4gICAgICAgICAgICAgIGNvbnRyb2xzOiBbXCJvdXRwdXRcIl1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBSZXNvdXJjZXM6IHtcbiAgICAgICAgICAgICAgY29udHJvbHM6IFtcInJlc291cmNlc1wiXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFN0cmF0ZWd5OiB7XG4gICAgICAgICAgICAgIGNvbnRyb2xzOiBbXCJzdHJhdGVneVwiXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFRyaWdnZXJzOiB7XG4gICAgICAgICAgICAgIGNvbnRyb2xzOiBbXCJ0cmlnZ2Vyc1wiXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiU2VydmljZSBBY2NvdW50XCI6IHtcbiAgICAgICAgICAgICAgY29udHJvbHM6IFtcInNlcnZpY2VBY2NvdW50XCJdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAqL1xuXG4gICAgICAgICRzY29wZS5lbnRpdHkgPSB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IFwidjFcIixcbiAgICAgICAgICBcImtpbmRcIjogXCJCdWlsZENvbmZpZ1wiLFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCJuYW1lXCI6IFwiXCIsXG4gICAgICAgICAgICBcImxhYmVsc1wiOiB7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNwZWNcIjoge1xuICAgICAgICAgICAgXCJzb3VyY2VcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJHaXRcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwic3RyYXRlZ3lcIjoge1xuICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcIkN1c3RvbVwiLFxuICAgICAgICAgICAgICAgIFwiY3VzdG9tU3RyYXRlZ3lcIjoge1xuICAgICAgICAgICAgICAgICAgICBcImZyb21cIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJraW5kXCI6IFwiRG9ja2VySW1hZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcImZhYnJpYzgvb3BlbnNoaWZ0LXMyaS1qZW5raW5zLXRyaWdnZXJcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBcImVudlwiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiQkFTRV9VUklcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZhbHVlXCI6IGplbmtpbnNVcmxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiSk9CX05BTUVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZhbHVlXCI6IGpvYk5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgJHNjb3BlLiR3YXRjaCgnZW50aXR5LnNwZWMuc291cmNlLmdpdC51cmknLCAodmFsKSA9PiB7XG4gICAgICAgICAgaWYgKCF2YWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIGxhc3RCaXQgPSB2YWwubWF0Y2goL1teXFwvXSskLylbMF07XG4gICAgICAgICAgaWYgKGxhc3RCaXQpIHtcbiAgICAgICAgICAgIHZhciBuYW1lID0gbGFzdEJpdC5yZXBsYWNlKC9cXC5naXQkLywgJycpO1xuICAgICAgICAgICAgbG9nLmRlYnVnKFwibmFtZTogXCIsIG5hbWUpO1xuICAgICAgICAgICAgaWYgKCFDb3JlLmlzQmxhbmsobmFtZSkgXG4gICAgICAgICAgICAgICYmIENvcmUuaXNCbGFuayhDb3JlLnBhdGhHZXQoJHNjb3BlLmVudGl0eSwgWydtZXRhZGF0YScsICduYW1lJ10pKSkge1xuICAgICAgICAgICAgICBDb3JlLnBhdGhTZXQoJHNjb3BlLmVudGl0eSwgWydtZXRhZGF0YScsICduYW1lJ10sIG5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xuICAgICAgICAkc2NvcGUuYnJlYWRjcnVtYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVQcm9qZWN0U2V0dGluZ3NCcmVhZGNydW1icygkc2NvcGUucHJvamVjdElkKTtcbiAgICAgICAgJHNjb3BlLnN1YlRhYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVQcm9qZWN0U3ViTmF2QmFycygkc2NvcGUucHJvamVjdElkKTtcbiAgICAgICAgJHNjb3BlLnRhYnMgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdFNldHRpbmdzU3ViTmF2QmFycygkc2NvcGUucHJvamVjdElkKTtcblxuICAgICAgICB3YXRjaCgkc2NvcGUsICRlbGVtZW50LCBcInNlY3JldHNcIiwgJHNjb3BlLm5hbWVzcGFjZSwgb25TZWNyZXRzKTtcblxuXG4gICAgICAgICRzY29wZS5idWlsZENvbmZpZ0NsaWVudCA9IEs4U0NsaWVudEZhY3RvcnkuY3JlYXRlKFwiYnVpbGRjb25maWdzXCIsICRzY29wZS5uYW1lc3BhY2UpO1xuXG4gICAgICAgICRlbGVtZW50Lm9uKCckZGVzdHJveScsICgpID0+IHtcbiAgICAgICAgICAkc2NvcGUuJGRlc3Ryb3koKTtcbiAgICAgICAgfSk7XG4gICAgICAgICRzY29wZS4kb24oJyRkZXN0cm95JywgKCkgPT4ge1xuICAgICAgICAgIEs4U0NsaWVudEZhY3RvcnkuZGVzdHJveSgkc2NvcGUuYnVpbGRDb25maWdDbGllbnQpO1xuICAgICAgICB9KTtcblxuLypcbiAgICAgICAgJHNjb3BlLiRvbigna3ViZXJuZXRlc01vZGVsVXBkYXRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB1cGRhdGVEYXRhKCk7XG4gICAgICAgIH0pO1xuXG4qL1xuICAgICAgICAkc2NvcGUuJG9uKCckcm91dGVVcGRhdGUnLCAoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgdXBkYXRlRGF0YSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICAkc2NvcGUuc2F2ZSA9ICgpID0+IHtcbiAgICAgICAgICBsb2cuaW5mbyhcIlNhdmluZyFcIik7XG5cblxuICAgICAgICAgIHZhciBlbnRpdHkgPSAkc2NvcGUuZW50aXR5O1xuICAgICAgICAgIHZhciBzcGVjID0gKGVudGl0eSB8fCB7fSkuc3BlYyB8fCB7fTtcblxuICAgICAgICAgIC8vIFRPRE8gdXBkYXRlIHRoZSBqZW5raW5zIGpvYiBuYW1lIVxuXG4gICAgICAgICAgLy8gbGV0cyBkZWxldGUgbG90cyBvZiBjcnVmdFxuICAgICAgICAgIHZhciBzdHJhdGVneSA9IHNwZWMuc3RyYXRlZ3kgfHwge307XG4gICAgICAgICAgZGVsZXRlIHN0cmF0ZWd5W1wiZG9ja2VyU3RyYXRlZ3lcIl07XG4gICAgICAgICAgZGVsZXRlIHN0cmF0ZWd5W1wic291cmNlU3RyYXRlZ3lcIl07XG5cbiAgICAgICAgICBkZWxldGUgc3BlY1tcInJldmlzaW9uXCJdO1xuICAgICAgICAgIGRlbGV0ZSBzcGVjW1wib3V0cHV0XCJdO1xuICAgICAgICAgIGRlbGV0ZSBzcGVjW1wicmVzb3VyY2VzXCJdO1xuXG4gICAgICAgICAgdmFyIHN0cmF0ZWd5UHVsbFNlY3JldE5hbWUgPSBDb3JlLnBhdGhHZXQoc3BlYywgW1wic3RyYXRlZ3lcIiwgXCJjdXN0b21TdHJhdGVneVwiLCBcInB1bGxTZWNyZXRcIiwgXCJuYW1lXCJdKTtcbiAgICAgICAgICB2YXIgc291cmNlU2VjcmV0TmFtZSA9IENvcmUucGF0aEdldChzcGVjLCBbXCJzb3VyY2VcIiwgXCJzb3VyY2VTZWNyZXRcIiwgXCJuYW1lXCJdKTtcbiAgICAgICAgICBsb2cuaW5mbyhcInNvdXJjZVNlY3JldE5hbWU6IFwiICsgc291cmNlU2VjcmV0TmFtZSk7XG4gICAgICAgICAgbG9nLmluZm8oXCJzdHJhdGVneVB1bGxTZWNyZXROYW1lOiBcIiArIHN0cmF0ZWd5UHVsbFNlY3JldE5hbWUpO1xuICAgICAgICAgIGlmICghc3RyYXRlZ3lQdWxsU2VjcmV0TmFtZSAmJiBzb3VyY2VTZWNyZXROYW1lKSB7XG4gICAgICAgICAgICBDb3JlLnBhdGhTZXQoc3BlYywgW1wic3RyYXRlZ3lcIiwgXCJjdXN0b21TdHJhdGVneVwiLCBcInB1bGxTZWNyZXRcIiwgXCJuYW1lXCJdLCBzb3VyY2VTZWNyZXROYW1lKTtcbiAgICAgICAgICB9XG5cbi8qXG4gICAgICAgICAgLy8gVE9ETyBoYWNrIHVudGlsIHRoZSBwdXQgZGVhbHMgd2l0aCB1cGRhdGVzXG4gICAgICAgICAgdmFyIG1ldGFkYXRhID0gZW50aXR5Lm1ldGFkYXRhO1xuICAgICAgICAgIGlmIChtZXRhZGF0YSkge1xuICAgICAgICAgICAgZGVsZXRlIG1ldGFkYXRhW1wicmVzb3VyY2VWZXJzaW9uXCJdO1xuICAgICAgICAgIH1cbiovXG5cbiAgICAgICAgICBsb2cuaW5mbyhhbmd1bGFyLnRvSnNvbihlbnRpdHksIHRydWUpKTtcblxuICAgICAgICAgICRzY29wZS5idWlsZENvbmZpZ0NsaWVudC5wdXQoZW50aXR5LCAob2JqKSA9PiB7XG4gICAgICAgICAgICBsb2cuaW5mbyhcImJ1aWxkIGNvbmZpZyBjcmVhdGVkIVwiKTtcblxuICAgICAgICAgICAgdmFyIGxpbmsgPSBEZXZlbG9wZXIucHJvamVjdFNlY3JldHNMaW5rKCRzY29wZS5uYW1lc3BhY2UsIGdldE5hbWUoZW50aXR5KSk7XG4gICAgICAgICAgICBpZiAobGluaykge1xuICAgICAgICAgICAgICBsb2cuaW5mbyhcIk5hdmlnYXRpbmcgdG86IFwiKyBsaW5rKTtcbiAgICAgICAgICAgICAgJGxvY2F0aW9uLnBhdGgobGluayk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBsb2cud2FybihcIkNvdWxkIG5vdCBmaW5kIHRoZSBlZGl0IHBpcGVsaW5lIGxpbmshXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgdXBkYXRlRGF0YSgpO1xuXG5cbiAgICAgICAgdmFyIGplbmtpbnNVcmwgPSBEZXZlbG9wZXIuamVua2luc0xpbmsoKTtcbiAgICAgICAgdmFyIGpvYk5hbWUgPSBcIlwiO1xuXG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZURhdGEoKSB7XG4gICAgICAgICAgJHNjb3BlLml0ZW0gPSBudWxsO1xuICAgICAgICAgIGlmICgkc2NvcGUuaWQpIHtcbiAgICAgICAgICAgIHZhciB1cmwgPSBidWlsZENvbmZpZ1Jlc3RVcmwoJHNjb3BlLmlkKTtcbiAgICAgICAgICAgICRodHRwLmdldCh1cmwpLlxuICAgICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAkc2NvcGUuZW50aXR5ID0gZGF0YTtcblxuICAgICAgICAgICAgICAgICAgdmFyIGJ1aWxkQ29uZmlnID0gYW5ndWxhci5jb3B5KGRhdGEpO1xuICAgICAgICAgICAgICAgICAgdmFyIHNvcnRlZEJ1aWxkcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICBLdWJlcm5ldGVzLmVucmljaEJ1aWxkQ29uZmlnKGJ1aWxkQ29uZmlnLCBzb3J0ZWRCdWlsZHMpO1xuICAgICAgICAgICAgICAgICAgJHNjb3BlLmJ1aWxkQ29uZmlnID0gYnVpbGRDb25maWc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICRzY29wZS5zcGVjID0gKCRzY29wZS5lbnRpdHkgfHwge30pLnNwZWMgfHwge307XG4gICAgICAgICAgICAgICAgJHNjb3BlLmZldGNoZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gbGV0cyB1cGRhdGUgdGhlIHRhYnNcbiAgICAgICAgICAgICAgICAkc2NvcGUuc3ViVGFiQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZVByb2plY3RTdWJOYXZCYXJzKCRzY29wZS5wcm9qZWN0SWQsIG51bGwsICRzY29wZSk7XG4gICAgICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgICAgICAgfSkuXG4gICAgICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGxvYWQgXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XG5cbiAgICAgICAgICAgICRzY29wZS5zcGVjID0gJHNjb3BlLmVudGl0eS5zcGVjO1xuICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBvblNlY3JldHMoc2VjcmV0cykge1xuICAgICAgICAgIHZhciBhcnJheSA9IFtdO1xuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChzZWNyZXRzLCAoc2VjcmV0KSA9PiB7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IGdldE5hbWUoc2VjcmV0KTtcbiAgICAgICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgICAgIGFycmF5LnB1c2goe1xuICAgICAgICAgICAgICAgIGxhYmVsOiBuYW1lLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgICAgICAgICAgIFwiYXR0cmlidXRlc1wiOiB7XG4gICAgICAgICAgICAgICAgICBcInRpdGxlXCI6IG5hbWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICRzZWNyZXQ6IHNlY3JldFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICAkc2NvcGUuc2VjcmV0cyA9IF8uc29ydEJ5KGFycmF5LCBcImxhYmVsXCIpO1xuXG4gICAgICAgICAgdmFyIHNwZWNTb3VyY2VTZWNyZXROYW1lUGF0aCA9IFsnc3BlYycsICdzb3VyY2UnLCAnc291cmNlU2VjcmV0JywgJ25hbWUnXTtcbiAgICAgICAgICBpZiAoJHNjb3BlLmVudGl0eSAmJiAhQ29yZS5wYXRoR2V0KCRzY29wZS5lbnRpdHksIHNwZWNTb3VyY2VTZWNyZXROYW1lUGF0aCkpIHtcbiAgICAgICAgICAgIHZhciBkZWZhdWx0U2VjcmV0TmFtZSA9IGZpbmREZWZhdWx0SW1wb3J0U2VjcmV0TmFtZShzZWNyZXRzKTtcbiAgICAgICAgICAgIENvcmUucGF0aFNldCgkc2NvcGUuZW50aXR5LCBzcGVjU291cmNlU2VjcmV0TmFtZVBhdGgsIGRlZmF1bHRTZWNyZXROYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBmaW5kRGVmYXVsdEltcG9ydFNlY3JldE5hbWUoc2VjcmV0cykge1xuICAgICAgICAgIHZhciBhbnN3ZXIgPSBudWxsO1xuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChzZWNyZXRzLCAoc2VjcmV0KSA9PiB7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IGdldE5hbWUoc2VjcmV0KTtcbiAgICAgICAgICAgIGlmICghYW5zd2VyICYmIG5hbWUgJiYgbmFtZS5zdGFydHNXaXRoKFwiamVua2lucy1sb2dpblwiKSkge1xuICAgICAgICAgICAgICBhbnN3ZXIgPSBuYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmICghYW5zd2VyKSB7XG4gICAgICAgICAgICBhbmd1bGFyLmZvckVhY2goc2VjcmV0cywgKHNlY3JldCkgPT4ge1xuICAgICAgICAgICAgICB2YXIgbmFtZSA9IGdldE5hbWUoc2VjcmV0KTtcbiAgICAgICAgICAgICAgaWYgKCFhbnN3ZXIgJiYgbmFtZSAmJiBuYW1lLnN0YXJ0c1dpdGgoXCJqZW5raW5zLXRva2VuXCIpKSB7XG4gICAgICAgICAgICAgICAgYW5zd2VyID0gbmFtZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBhbnN3ZXI7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgICBjYXNlICdjcmVhdGUnOlxuICAgICAgICAgICAgZGVsZXRlIHNwZWNDb25maWcudGFicztcbiAgICAgICAgICAgIF8uZm9ySW4oYnVpbGRTb3VyY2UucHJvcGVydGllcywgKHByb3BlcnR5OmFueSwgbmFtZTpzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgaWYgKG5hbWUgIT09ICdnaXQnKSB7XG4gICAgICAgICAgICAgICAgbG9nLmluZm8oXCJIaWRpbmcgcHJvcGVydHk6IFwiLCBuYW1lKTtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eS5oaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIF8uZm9ySW4oZ2l0QnVpbGRTb3VyY2UucHJvcGVydGllcywgKHByb3BlcnR5OmFueSwgbmFtZTpzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgaWYgKG5hbWUgIT09ICd1cmknKSB7XG4gICAgICAgICAgICAgICAgbG9nLmluZm8oXCJIaWRpbmcgcHJvcGVydHk6IFwiLCBuYW1lKTtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eS5oaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5LmxhYmVsID0gXCJHaXQgVVJMXCI7XG4gICAgICAgICAgICAgICAgcHJvcGVydHlbJ2lucHV0LWF0dHJpYnV0ZXMnXSA9IHtcbiAgICAgICAgICAgICAgICAgICdyZXF1aXJlZCc6IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pOyBcbiAgICAgICAgICAgIF8uZm9ySW4oc3BlY0NvbmZpZy5wcm9wZXJ0aWVzLCAocHJvcGVydHk6YW55LCBuYW1lOnN0cmluZykgPT4ge1xuICAgICAgICAgICAgICBpZiAobmFtZSAhPT0gJ3NvdXJjZScpIHtcbiAgICAgICAgICAgICAgICBsb2cuaW5mbyhcIkhpZGluZyBwcm9wZXJ0eTogXCIsIG5hbWUpO1xuICAgICAgICAgICAgICAgIHByb3BlcnR5LmhpZGRlbiA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnZWRpdCc6XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgfVxuXG4gICAgICAgICRzY29wZS5zcGVjQ29uZmlnID0gc3BlY0NvbmZpZztcbiAgfSk7XG5cbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxuXG5tb2R1bGUgS3ViZXJuZXRlcyB7XG5cbiAgZXhwb3J0IHZhciBCdWlsZENvbmZpZ3NDb250cm9sbGVyID0gY29udHJvbGxlcihcIkJ1aWxkQ29uZmlnc0NvbnRyb2xsZXJcIiwgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiJGRpYWxvZ1wiLCBcIiR3aW5kb3dcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRsb2NhdGlvblwiLCBcImxvY2FsU3RvcmFnZVwiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXG4gICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCAkZGlhbG9nLCAkd2luZG93LCAkdGVtcGxhdGVDYWNoZSwgJHJvdXRlUGFyYW1zLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgbG9jYWxTdG9yYWdlLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcblxuICAgICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XG4gICAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XG5cbiAgICAgICRzY29wZS50YWJsZUNvbmZpZyA9IHtcbiAgICAgICAgZGF0YTogJ21vZGVsLmJ1aWxkY29uZmlncycsXG4gICAgICAgIHNob3dTZWxlY3Rpb25DaGVja2JveDogdHJ1ZSxcbiAgICAgICAgZW5hYmxlUm93Q2xpY2tTZWxlY3Rpb246IGZhbHNlLFxuICAgICAgICBtdWx0aVNlbGVjdDogdHJ1ZSxcbiAgICAgICAgc2VsZWN0ZWRJdGVtczogW10sXG4gICAgICAgIGZpbHRlck9wdGlvbnM6IHtcbiAgICAgICAgICBmaWx0ZXJUZXh0OiAkbG9jYXRpb24uc2VhcmNoKClbXCJxXCJdIHx8ICcnXG4gICAgICAgIH0sXG4gICAgICAgIGNvbHVtbkRlZnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ21ldGFkYXRhLm5hbWUnLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdOYW1lJyxcbiAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiYnVpbGRDb25maWdMaW5rVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgIH0sXG4vKlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpZWxkOiAnc3BlYy5zb3VyY2UudHlwZScsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1NvdXJjZSdcbiAgICAgICAgICB9LFxuKi9cbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ3NwZWMuc291cmNlLmdpdC51cmknLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdSZXBvc2l0b3J5J1xuICAgICAgICAgIH0sXG4vKlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpZWxkOiAnc3BlYy5zdHJhdGVneS50eXBlJyxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnU3RyYXRlZ3knXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ3NwZWMuc3RyYXRlZ3kuc3RpU3RyYXRlZ3kuaW1hZ2UnLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdTb3VyY2UgSW1hZ2UnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ3NwZWMub3V0cHV0LmltYWdlVGFnJyxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnT3V0cHV0IEltYWdlJ1xuICAgICAgICAgIH0sXG4qL1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpZWxkOiAnJGZhYnJpYzhDb2RlVmlld3MnLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdDb2RlJyxcbiAgICAgICAgICAgIHdpZHRoOiBcIioqKlwiLFxuICAgICAgICAgICAgbWluV2lkdGg6IDUwMCxcbiAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiYnVpbGRDb25maWdDb2RlVmlld3NUZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJyRmYWJyaWM4QnVpbGRWaWV3cycsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ0J1aWxkcycsXG4gICAgICAgICAgICB3aWR0aDogXCIqKipcIixcbiAgICAgICAgICAgIG1pbldpZHRoOiA1MDAsXG4gICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImJ1aWxkQ29uZmlnQnVpbGRWaWV3c1RlbXBsYXRlLmh0bWxcIilcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpZWxkOiAnJGZhYnJpYzhFbnZpcm9ubWVudFZpZXdzJyxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnRW52aXJvbm1lbnRzJyxcbiAgICAgICAgICAgIHdpZHRoOiBcIioqKlwiLFxuICAgICAgICAgICAgbWluV2lkdGg6IDUwMCxcbiAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiYnVpbGRDb25maWdFbnZpcm9ubWVudFZpZXdzVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmllbGQ6ICckZmFicmljOFRlYW1WaWV3cycsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1Blb3BsZScsXG4gICAgICAgICAgICB3aWR0aDogXCIqKipcIixcbiAgICAgICAgICAgIG1pbldpZHRoOiA1MDAsXG4gICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImJ1aWxkQ29uZmlnVGVhbVZpZXdzVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfTtcblxuICAgICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xuXG4gICAgICAvLyBUT0RPXG4gICAgICAvLyAkc2NvcGUuaXNMb2dnZWRJbnRvR29ncyA9IEZvcmdlLmlzTG9nZ2VkSW50b0dvZ3M7XG5cbiAgICAgICRzY29wZS5kZWxldGVQcm9tcHQgPSAoc2VsZWN0ZWQpID0+IHtcbiAgICAgICAgVUkubXVsdGlJdGVtQ29uZmlybUFjdGlvbkRpYWxvZyg8VUkuTXVsdGlJdGVtQ29uZmlybUFjdGlvbk9wdGlvbnM+e1xuICAgICAgICAgIGNvbGxlY3Rpb246IHNlbGVjdGVkLFxuICAgICAgICAgIGluZGV4OiAnJG5hbWUnLFxuICAgICAgICAgIG9uQ2xvc2U6IChyZXN1bHQ6Ym9vbGVhbikgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICBmdW5jdGlvbiBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgbmV4dCkge1xuICAgICAgICAgICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgICAgICAgICBkZWxldGVFbnRpdHkobmV4dCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdXBkYXRlRGF0YSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHRpdGxlOiAnRGVsZXRlIEJ1aWxkIENvbmZpZ3M/JyxcbiAgICAgICAgICBhY3Rpb246ICdUaGUgZm9sbG93aW5nIEJ1aWxkIENvbmZpZ3Mgd2lsbCBiZSBkZWxldGVkOicsXG4gICAgICAgICAgb2tUZXh0OiAnRGVsZXRlJyxcbiAgICAgICAgICBva0NsYXNzOiAnYnRuLWRhbmdlcicsXG4gICAgICAgICAgY3VzdG9tOiBcIlRoaXMgb3BlcmF0aW9uIGlzIHBlcm1hbmVudCBvbmNlIGNvbXBsZXRlZCFcIixcbiAgICAgICAgICBjdXN0b21DbGFzczogXCJhbGVydCBhbGVydC13YXJuaW5nXCJcbiAgICAgICAgfSkub3BlbigpO1xuICAgICAgfTtcblxuICAgICAgZnVuY3Rpb24gZGVsZXRlRW50aXR5KHNlbGVjdGlvbiwgbmV4dENhbGxiYWNrKSB7XG4gICAgICAgIHZhciBuYW1lID0gKHNlbGVjdGlvbiB8fCB7fSkuJG5hbWU7XG4gICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJBYm91dCB0byBkZWxldGUgYnVpbGQgY29uZmlnOiBcIiArIG5hbWUpO1xuICAgICAgICAgIHZhciB1cmwgPSBidWlsZENvbmZpZ1Jlc3RVcmwobmFtZSk7XG4gICAgICAgICAgJGh0dHAuZGVsZXRlKHVybCkuXG4gICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICBuZXh0Q2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pLlxuICAgICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGRlbGV0ZSBidWlsZCBjb25maWcgb24gXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIndhcm5pbmc6IG5vIG5hbWUgZm9yIHNlbGVjdGlvbjogXCIgKyBhbmd1bGFyLnRvSnNvbihzZWxlY3Rpb24pKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xuICAgICAgfVxuXG4gICAgICB1cGRhdGVEYXRhKCk7XG4gICAgfV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblxuICBleHBvcnQgdmFyIEJ1aWxkTG9nc0NvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiQnVpbGRMb2dzQ29udHJvbGxlclwiLFxuICAgIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIkt1YmVybmV0ZXNTY2hlbWFcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXG4gICAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNTY2hlbWEsXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcblxuICAgICAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAgICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xuICAgICAgICAkc2NvcGUuaWQgPSAkcm91dGVQYXJhbXNbXCJpZFwiXTtcbiAgICAgICAgJHNjb3BlLnNjaGVtYSA9IEt1YmVybmV0ZXNTY2hlbWE7XG4gICAgICAgICRzY29wZS5jb25maWcgPSBLdWJlcm5ldGVzU2NoZW1hLmRlZmluaXRpb25zLm9zX2J1aWxkX0J1aWxkO1xuXG4gICAgICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcblxuICAgICAgICAkc2NvcGUuJG9uKCdrdWJlcm5ldGVzTW9kZWxVcGRhdGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHVwZGF0ZURhdGEoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJHNjb3BlLiRvbignJHJvdXRlVXBkYXRlJywgKCRldmVudCkgPT4ge1xuICAgICAgICAgIHVwZGF0ZURhdGEoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJHNjb3BlLmxvZ3NUZXh0ID0gXCJMb2FkaW5nIGxvZ3MuLi5cIjtcblxuICAgICAgICB1cGRhdGVEYXRhKCk7XG5cbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcbiAgICAgICAgICAkc2NvcGUuaXRlbSA9IG51bGw7XG4gICAgICAgICAgaWYgKCRzY29wZS5pZCkge1xuICAgICAgICAgICAgdmFyIHVybCA9IGJ1aWxkUmVzdFVybCgkc2NvcGUuaWQpO1xuICAgICAgICAgICAgJGh0dHAuZ2V0KHVybCkuXG4gICAgICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICRzY29wZS5lbnRpdHkgPSBlbnJpY2hCdWlsZChkYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJHNjb3BlLmZldGNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICAgICAgIH0pLlxuICAgICAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdXJsID0gYnVpbGRMb2dzUmVzdFVybCgkc2NvcGUuaWQpO1xuICAgICAgICAgICAgJGh0dHAuZ2V0KHVybCkuXG4gICAgICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cykge1xuICAgICAgICAgICAgICAgICRzY29wZS5sb2dzVGV4dCA9IGRhdGE7XG4gICAgICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgICAgICAgfSkuXG4gICAgICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMpIHtcbiAgICAgICAgICAgICAgICAkc2NvcGUubG9nc1RleHQgPSBcIkZhaWxlZCB0byBsb2FkIGxvZ3MgZnJvbTogXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBzdGF0dXM6IFwiICsgc3RhdHVzO1xuICAgICAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICAgICAgIH0pLlxuICAgICAgICAgICAgICBjYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAkc2NvcGUubG9nc1RleHQgPSBcIkZhaWxlZCB0byBsb2FkIGxvZ3M6IFwiICsgYW5ndWxhci50b0pzb24oZXJyb3IsIHRydWUpO1xuICAgICAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XG4gICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblxuICBleHBvcnQgdmFyIEJ1aWxkc0NvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiQnVpbGRzQ29udHJvbGxlclwiLCBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCIkZGlhbG9nXCIsIFwiJHdpbmRvd1wiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGxvY2F0aW9uXCIsIFwibG9jYWxTdG9yYWdlXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcbiAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsICRkaWFsb2csICR3aW5kb3csICR0ZW1wbGF0ZUNhY2hlLCAkcm91dGVQYXJhbXMsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCBsb2NhbFN0b3JhZ2UsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xuXG4gICAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcbiAgICAgICRzY29wZS5idWlsZENvbmZpZ0lkID0gJHJvdXRlUGFyYW1zW1wiaWRcIl07XG5cbiAgICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICB9KTtcblxuICAgICAgJHNjb3BlLnRhYmxlQ29uZmlnID0ge1xuICAgICAgICBkYXRhOiAnbW9kZWwuYnVpbGRzJyxcbiAgICAgICAgc2hvd1NlbGVjdGlvbkNoZWNrYm94OiB0cnVlLFxuICAgICAgICBlbmFibGVSb3dDbGlja1NlbGVjdGlvbjogZmFsc2UsXG4gICAgICAgIG11bHRpU2VsZWN0OiB0cnVlLFxuICAgICAgICBzZWxlY3RlZEl0ZW1zOiBbXSxcbiAgICAgICAgZmlsdGVyT3B0aW9uczoge1xuICAgICAgICAgIGZpbHRlclRleHQ6ICRsb2NhdGlvbi5zZWFyY2goKVtcInFcIl0gfHwgJydcbiAgICAgICAgfSxcbiAgICAgICAgY29sdW1uRGVmczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpZWxkOiAnbWV0YWRhdGEubmFtZScsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ05hbWUnLFxuICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJidWlsZExpbmtUZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJyRjcmVhdGlvbkRhdGUnLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdUaW1lJyxcbiAgICAgICAgICAgIGRlZmF1bHRTb3J0OiB0cnVlLFxuICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJidWlsZFRpbWVUZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ3N0YXR1cycsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1N0YXR1cycsXG4gICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImJ1aWxkU3RhdHVzVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmllbGQ6ICckbG9nc0xpbmsnLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdMb2dzJyxcbiAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiYnVpbGRMb2dzVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmllbGQ6ICckcG9kTGluaycsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ0J1aWxkIFBvZCcsXG4gICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImJ1aWxkUG9kVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgIH0sXG4vKlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpZWxkOiAncGFyYW1ldGVycy5zb3VyY2UudHlwZScsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1NvdXJjZSdcbiAgICAgICAgICB9LFxuKi9cbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ3NwZWMuc291cmNlLmdpdC51cmknLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdSZXBvc2l0b3J5JyxcbiAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiYnVpbGRSZXBvc2l0b3J5VGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmllbGQ6ICdzcGVjLnN0cmF0ZWd5LnR5cGUnLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdTdHJhdGVneSdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpZWxkOiAnc3BlYy5zdHJhdGVneS5zb3VyY2VTdHJhdGVneS5mcm9tLm5hbWUnLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdTb3VyY2UgSW1hZ2UnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ3NwZWMub3V0cHV0LnRvLm5hbWUnLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdPdXRwdXQgSW1hZ2UnXG4gICAgICAgICAgfV1cbiAgICAgIH07XG5cbiAgICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcbiAgICAgICRzY29wZS5icmVhZGNydW1iQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZVByb2plY3RCcmVhZGNydW1icygkc2NvcGUuYnVpbGRDb25maWdJZCk7XG4gICAgICAkc2NvcGUuc3ViVGFiQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZVByb2plY3RTdWJOYXZCYXJzKCRzY29wZS5idWlsZENvbmZpZ0lkLCBudWxsLCAkc2NvcGUpO1xuXG4gICAgICAkc2NvcGUuJG9uKCdrdWJlcm5ldGVzTW9kZWxVcGRhdGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICB1cGRhdGVEYXRhKCk7XG4gICAgICB9KTtcblxuICAgICAgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcbiAgICAgICAgaWYgKCRzY29wZS5tb2RlbCkge1xuICAgICAgICAgIHZhciBidWlsZHMgPSAkc2NvcGUubW9kZWwuYnVpbGRzO1xuICAgICAgICAgIHZhciBidWlsZENvbmZpZ0lkID0gJHNjb3BlLmJ1aWxkQ29uZmlnSWQ7XG5cbiAgICAgICAgICBlbnJpY2hCdWlsZHMoYnVpbGRzKTtcbiAgICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XG5cbiAgICAgICAgICBpZiAoYnVpbGRDb25maWdJZCkge1xuICAgICAgICAgICAgJHNjb3BlLmJ1aWxkQ29uZmlnID0gJHNjb3BlLm1vZGVsLmdldEJ1aWxkQ29uZmlnKGJ1aWxkQ29uZmlnSWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB1cGRhdGVEYXRhKCk7XG5cblxuICAgICAgLypcbiAgICAgICRzY29wZS4ka2VlcFBvbGxpbmcgPSAoKSA9PiBrZWVwUG9sbGluZ01vZGVsO1xuICAgICAgJHNjb3BlLmZldGNoID0gUG9sbEhlbHBlcnMuc2V0dXBQb2xsaW5nKCRzY29wZSwgKG5leHQ6KCkgPT4gdm9pZCkgPT4ge1xuICAgICAgICB2YXIgdXJsID0gYnVpbGRzUmVzdFVSTCgpO1xuICAgICAgICAkaHR0cC5nZXQodXJsKS5cbiAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcImdvdCBkYXRhIFwiICsgYW5ndWxhci50b0pzb24oZGF0YSwgdHJ1ZSkpO1xuICAgICAgICAgICAgICAkc2NvcGUuYnVpbGRzID0gZW5yaWNoQnVpbGRzKGRhdGEuaXRlbXMpO1xuICAgICAgICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgaWYgKCRzY29wZS5tb2RlbCkge1xuICAgICAgICAgICAgICAgICRzY29wZS5idWlsZENvbmZpZyA9ICRzY29wZS5tb2RlbC5nZXRCdWlsZENvbmZpZygkc2NvcGUuYnVpbGRDb25maWdJZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgfSkuXG4gICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xuICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICAkc2NvcGUuZmV0Y2goKTtcbiAgICAgICovXG4gICAgfV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblxuICAvLyBjb250cm9sbGVyIGZvciBjb25uZWN0aW5nIHRvIGEgcmVtb3RlIGNvbnRhaW5lciB2aWEgam9sb2tpYVxuICBleHBvcnQgdmFyIENvbm5lY3RDb250cm9sbGVyID0gY29udHJvbGxlcihcIkNvbm5lY3RDb250cm9sbGVyXCIsIFtcbiAgICBcIiRzY29wZVwiLCBcImxvY2FsU3RvcmFnZVwiLCBcInVzZXJEZXRhaWxzXCIsIFwiQ29ubmVjdERpYWxvZ1NlcnZpY2VcIiwgXCIkYnJvd3NlclwiLFxuICAgICgkc2NvcGUsIGxvY2FsU3RvcmFnZSwgdXNlckRldGFpbHMsIENvbm5lY3REaWFsb2dTZXJ2aWNlLCAkYnJvd3NlcjpuZy5JQnJvd3NlclNlcnZpY2UpID0+IHtcblxuICAgICAgJHNjb3BlLmRvQ29ubmVjdCA9IChlbnRpdHkpID0+IHtcbiAgICAgICAgdmFyIGNvbm5lY3RVcmw6YW55ID0gbmV3IFVSSSgpLnBhdGgoVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksICcvamF2YS9pbmRleC5odG1sJykpO1xuICAgICAgICB2YXIgcmV0dXJuVG8gPSBuZXcgVVJJKCkudG9TdHJpbmcoKTtcbiAgICAgICAgdmFyIHRpdGxlID0gZW50aXR5Lm1ldGFkYXRhLm5hbWUgfHwgJ1VudGl0bGVkIENvbnRhaW5lcic7XG4gICAgICAgIHZhciB0b2tlbiA9IHVzZXJEZXRhaWxzLnRva2VuIHx8ICcnO1xuICAgICAgICBjb25uZWN0VXJsLmhhc2godG9rZW4pLnF1ZXJ5KHtcbiAgICAgICAgICBqb2xva2lhVXJsOiBlbnRpdHkuJGpvbG9raWFVcmwsXG4gICAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICAgIHJldHVyblRvOiByZXR1cm5Ub1xuICAgICAgICB9KTtcbiAgICAgICAgbG9nLmRlYnVnKFwiQ29ubmVjdCBVUkk6IFwiLCBjb25uZWN0VXJsLnRvU3RyaW5nKCkpO1xuICAgICAgICB3aW5kb3cub3Blbihjb25uZWN0VXJsLnRvU3RyaW5nKCkpO1xuICAgICAgfTtcblxuICAgIH1dKTtcbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxuXG5tb2R1bGUgS3ViZXJuZXRlc3tcbiAgIGV4cG9ydCBjbGFzcyBkYXRhSW5mb01vZGVsU2VydmljZXtcbiAgICAgIHB1YmxpYyBzZXJ2ZXJkYXRhID0ge307XG4gICAgICBwdWJsaWMgcHJvbWlzZW9iamVjdCA9IHt9O1xuICAgICAgcHVibGljIGxvY2FsZGF0YSA9IHt9O1xuICAgICAgcHVibGljIHNlbGVjdGVkbm9kZXMgPSBbXTtcbiAgICAgIHB1YmxpYyByZXN1bWFibGVqcyA9IFtdO1xuICAgICAgcHVibGljIHNlbGVjdGVkaXRlbXMgPSBbXTtcbiAgICAgIHB1YmxpYyBzZXJ2ZXJpdGVtcyA9IFtdO1xuICAgICAgcHVibGljIHVwbG9hZHByb2Nlc3MgPXt9O1xuICAgICAgcHVibGljIHVwbG9hZGVkU3RhdHVzID0gXCJcIjtcblxuICAgICAgcHVibGljIGdldCB1cGxvYWRQcm9jZXNzKCk6T2JqZWN0IHtcbiAgICAgICAgIHJldHVybiB0aGlzLnVwbG9hZHByb2Nlc3NcbiAgICAgIH1cblxuICAgICAgcHVibGljIHNldCB1cGxvYWRQcm9jZXNzKHVwbG9hZFByb2Nlc3M6T2JqZWN0KXtcbiAgICAgICAgIHRoaXMudXBsb2FkcHJvY2VzcyA9IHVwbG9hZFByb2Nlc3M7XG4gICAgICB9XG5cbiAgICAgIHB1YmxpYyBmb2xkZXJMaXN0ID0ge1xuICAgICAgICAgIGxlbmd0aDowXG4gICAgICB9O1xuXG4gICAgICBwdWJsaWMgZ2V0IHNlcnZlckl0ZW1zKCk6QXJyYXk8YW55PiB7XG4gICAgICAgICByZXR1cm4gdGhpcy5zZXJ2ZXJpdGVtcztcbiAgICAgIH1cblxuICAgICAgcHVibGljIHNldCBzZXJ2ZXJJdGVtcyhzZXJ2ZXJJdGVtczogQXJyYXk8YW55Pil7XG4gICAgICAgICB0aGlzLnNlcnZlcml0ZW1zID0gc2VydmVySXRlbXM7XG4gICAgICB9XG5cbiAgICAgIHB1YmxpYyBnZXQgcmVzdW1hYmxlSnMoKTpBcnJheTxhbnk+IHtcbiAgICAgICAgIHJldHVybiB0aGlzLnJlc3VtYWJsZUpzO1xuICAgICAgfVxuXG4gICAgICBwdWJsaWMgc2V0IHJlc3VtYWJsZUpzKHJlc3VtYWJsZUpzOiBBcnJheTxhbnk+KXtcbiAgICAgICAgIHRoaXMucmVzdW1hYmxlanMgPSByZXN1bWFibGVKcztcbiAgICAgIH1cblxuICAgICAgcHVibGljIGdldCBzZWxlY3RlZEl0ZW1zKCk6QXJyYXk8YW55PiB7XG4gICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZGl0ZW1zO1xuICAgICAgfVxuXG4gICAgICBwdWJsaWMgc2V0IHNlbGVjdGVkSXRlbXMoc2VsZWN0ZWRJdGVtczogQXJyYXk8YW55Pil7XG4gICAgICAgICB0aGlzLnNlbGVjdGVkaXRlbXMgPSBzZWxlY3RlZEl0ZW1zO1xuICAgICAgfVxuXG4gICAgICBwdWJsaWMgZ2V0IHNlbGVjdGVkTm9kZXMoKTpBcnJheTxhbnk+IHtcbiAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkbm9kZXM7XG4gICAgICB9XG5cbiAgICAgIHB1YmxpYyBzZXQgc2VsZWN0ZWROb2RlcyhzZWxlY3RlZE5vZGVzOiBBcnJheTxhbnk+KXtcbiAgICAgICAgIHRoaXMuc2VsZWN0ZWRub2RlcyA9IHNlbGVjdGVkTm9kZXM7XG4gICAgICB9XG5cbiAgICAgIHB1YmxpYyBpc0NvbnRhaW5zTm9kZXMobm9kZTogT2JqZWN0KXtcbiAgICAgICAgIGZvcih2YXIgaXRlbSBpbiB0aGlzLnNlbGVjdGVkbm9kZXMpe1xuICAgICAgICAgICAgaWYodGhpcy5zZWxlY3RlZG5vZGVzW2l0ZW1dLmlkID09PSBub2RlLmlkKVxuICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICB9XG4gICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHB1YmxpYyBmaW5kTm9kZXMobm9kZTogYW55KSB7XG4gICAgICAgICB2YXIgaWQgPSBcIi0xXCI7XG4gICAgICAgICBpZih0eXBlb2Yobm9kZSkgPT09IFwib2JqZWN0XCIgKXtcbiAgICAgICAgICAgIGlkID0gbm9kZS5pZDtcbiAgICAgICAgIH1lbHNlIGlmKHR5cGVvZihub2RlKSA9PT0gXCJudW1iZXJcIil7XG4gICAgICAgICAgICBpZCA9bm9kZS50b1N0cmluZygpO1xuICAgICAgICAgfWVsc2UgaWYodHlwZW9mKG5vZGUpID09PSBcInN0cmluZ1wiKXtcbiAgICAgICAgICAgIGlkID0gbm9kZTtcbiAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgcmV0dXJuIFwiLTFcIjtcbiAgICAgICAgIH1cblxuICAgICAgICAgZm9yKHZhciBpdGVtIGluIHRoaXMuc2VsZWN0ZWRub2Rlcyl7XG4gICAgICAgICAgICBpZih0aGlzLnNlbGVjdGVkbm9kZXNbaXRlbV0uaWQgPT09IGlkKVxuICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgICB9XG4gICAgICAgICByZXR1cm4gXCItMVwiO1xuICAgICAgfVxuXG4gICAgICBwdWJsaWMgZmluZEl0ZW1JbmRleChpdGVtOiBhbnkpe1xuICAgICAgICAgdmFyIGlkID0gLTE7XG4gICAgICAgICBpZih0eXBlb2YoaXRlbSkgPT09IFwib2JqZWN0XCIgKXtcbiAgICAgICAgICAgIGlkID0gaXRlbS5pZDtcbiAgICAgICAgIH1lbHNlIGlmKHR5cGVvZihpdGVtKSA9PT0gXCJudW1iZXJcIil7XG4gICAgICAgICAgICBpZCA9aXRlbS50b1N0cmluZygpO1xuICAgICAgICAgfWVsc2UgaWYodHlwZW9mKGl0ZW0pID09PSBcInN0cmluZ1wiKXtcbiAgICAgICAgICAgIGlkID0gaXRlbTtcbiAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgfVxuXG4gICAgICAgICBmb3IodmFyIGl0IGluIHRoaXMuc2VsZWN0ZWRpdGVtcyl7XG4gICAgICAgICAgICBpZih0aGlzLnNlbGVjdGVkaXRlbXNbaXRdLmlkID09PSBpZClcbiAgICAgICAgICAgICAgIHJldHVybiBpdDtcbiAgICAgICAgIH1cbiAgICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cblxuICAgICAgcHVibGljIGNyZWF0ZUZvbGRlckxpc3QoZmlsZXM6IE9iamVjdCAscm9vdFBhdGg6IHN0cmluZyl7XG4gICAgICAgICBmb3IodmFyIGk9MDsgaTwgZmlsZXMubGVuZ3RoOyBpKyspe1xuICAgICAgICAgICAgdmFyIHJlbGF0aXZlUGF0aCA9ICBmaWxlc1tpXS53ZWJraXRSZWxhdGl2ZVBhdGgucmVwbGFjZShSZWdFeHAoXCJeXCIrcm9vdFBhdGgrXCIvXCIpLFwiXCIpO1xuICAgICAgICAgICAgdmFyIHBhdGhzPXJlbGF0aXZlUGF0aC5zcGxpdChcIi9cIik7XG4gICAgICAgICAgICBpZighdGhpcy5mb2xkZXJMaXN0Lmhhc093blByb3BlcnR5KHBhdGhzWzBdKSl7XG4gICAgICAgICAgICAgICB0aGlzLmZvbGRlckxpc3RbcGF0aHNbMF1dPXtcbiAgICAgICAgICAgICAgICAgbGVuZ3RoOjBcbiAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHRoaXMuZm9sZGVyTGlzdC5sZW5ndGgrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBPYmogPSB0aGlzLmZvbGRlckxpc3RbcGF0aHNbMF1dO1xuICAgICAgICAgICAgT2JqW09iai5sZW5ndGhdID0gZmlsZXNbaV07XG4gICAgICAgICAgICBPYmoubGVuZ3RoKys7XG4gICAgICAgICAgICB0aGlzLmZvbGRlckxpc3RbcGF0aHNbMF1dID0gT2JqO1xuICAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwdWJsaWMgdXBkYXRlTm9kZUJ5SWQobm9kZUlkLGtleSx2YWx1ZSl7XG4gICAgICAgICBmb3IodmFyIGl0ZW0gaW4gdGhpcy5zZWxlY3RlZG5vZGVzKXtcbiAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5zZWxlY3RlZG5vZGVzW2l0ZW1dO1xuICAgICAgICAgICAgaWYobm9kZS5pZCA9PT0gbm9kZUlkKXtcbiAgICAgICAgICAgICAgIG5vZGVba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHB1YmxpYyBnZXQgc2VydmVyRGF0YSgpOk9iamVjdCB7XG4gICAgICAgICByZXR1cm4gdGhpcy5zZXJ2ZXJEYXRhO1xuICAgICAgfVxuXG4gICAgICBwdWJsaWMgc2V0IHNlcnZlckRhdGEoc2VydmVyRGF0YTpPYmplY3Qpe1xuICAgICAgICAgdGhpcy5zZXJ2ZXJkYXRhPXNlcnZlckRhdGE7XG4gICAgICB9XG5cbiAgICAgIHB1YmxpYyBnZXQgcHJvbWlzZU9iamVjdCgpOk9iamVjdCB7XG4gICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlb2JqZWN0O1xuICAgICAgfVxuXG4gICAgICBwdWJsaWMgc2V0IHByb21pc2UocHJvbWlzZU9iamVjdDpPYmplY3Qpe1xuICAgICAgICAgdGhpcy5wcm9taXNlb2JqZWN0ID0gcHJvbWlzZU9iamVjdDtcbiAgICAgIH1cblxuICAgICAgcHVibGljIGdldCBsb2NhbERhdGEoKTpPYmplY3Qge1xuICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxkYXRhO1xuICAgICAgfVxuXG4gICAgICBwdWJsaWMgc2V0IGxvY2FsRGF0YShsb2NhbERhdGE6T2JqZWN0KXtcbiAgICAgICAgIHRoaXMubG9jYWxkYXRhID0gbG9jYWxEYXRhO1xuICAgICAgfVxuXG4gICAgICBwdWJsaWMgdXBkYXRhRGF0YU1vZGVsKCl7XG4gICAgICAgICB0aGlzLnByb21pc2VvYmplY3Quc3VjY2VzcyhmdW5jdGlvbihkYXRhLGhlYWRlcixjb25maWcsc3RhdHVzKXtcbiAgICAgICAgICAgIHRoaXMuc2VydmVyZGF0YSA9ZGF0YTtcbiAgICAgICAgIH0pO1xuXG4gICAgICAgICB0aGlzLnByb21pc2VvYmplY3QuZXJyb3IoZnVuY3Rpb24oZGF0YSxzdGF0dXMsaGVkYWVycyxjb25maWcpe1xuICAgICAgICAgICAgdGhpcy5zZXJ2ZXJkYXRhID0ge307XG4gICAgICAgICB9KTtcbiAgICAgIH1cbiAgIH1cbiAgX21vZHVsZS5mYWN0b3J5KCdEYXRhSW5mb01vZGVsJywgWyckaHR0cCcsICgkaHR0cCkgPT4ge1xuICAgICAgdmFyICRzY29wZSA9bmV3IGRhdGFJbmZvTW9kZWxTZXJ2aWNlKCk7XG5cbiAgICAgICRzY29wZS5wcm9taXNlb2JqZWN0PSRodHRwKHtcbiAgICAgICAgIHVybDonL3htbGZvcm1zZXJ2ZXInLFxuICAgICAgICAgbWV0aG9kOidQT1NUJ1xuICAgICAgfSk7XG5cbiAgICAgIHVwZGF0ZURhdGFGcm9tU2VydmVyKCRzY29wZS5zZXJ2ZXJkYXRhLCAoZGF0YSxoZWFkZXIsY29uZmlnLHN0YXR1cykgPT4ge1xuICAgICAgICAgJHNjb3BlLnNlcnZlcmRhdGEgPSBkYXRhO1xuICAgICAgfSk7XG5cbiAgICAgIGZ1bmN0aW9uIHVwZGF0ZURhdGFGcm9tU2VydmVyKGRhdGEsY2FsbGJhY2spe1xuICAgICAgICAgJGh0dHAoe1xuICAgICAgICAgICAgdXJsOicveG1sZm9ybXNlcnZlcicsXG4gICAgICAgICAgICBtZXRob2Q6J1BPU1QnXG4gICAgICAgICB9KS5zdWNjZXNzKGZ1bmN0aW9uKGRhdGEsaGVhZGVyLGNvbmZpZyxzdGF0dXMpe1xuICAgICAgICAgICBpZihkYXRhKVxuICAgICAgICAgICAgIGNhbGxiYWNrKGRhdGEsaGVhZGVyLGNvbmZpZyxzdGF0dXMpO1xuICAgICAgICAgfSkuZXJyb3IoZnVuY3Rpb24oZGF0YSxoZWFkZXIsY29uZmlnLHN0YXR1cyl7XG4gICAgICAgICAgICAgY29uc29sZS5sb2coXCJlcnJvclwiKTtcbiAgICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIHJldHVybiAkc2NvcGU7XG4gIH1dKTtcbn0iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIGV4cG9ydCB2YXIgRGVwbG95bWVudENvbmZpZ0NvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiRGVwbG95bWVudENvbmZpZ0NvbnRyb2xsZXJcIixcbiAgICBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCJLdWJlcm5ldGVzU2NoZW1hXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLFxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLFxuICAgICAgICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XG5cbiAgICAgICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XG4gICAgICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcbiAgICAgICAgJHNjb3BlLmlkID0gJHJvdXRlUGFyYW1zW1wiaWRcIl07XG4gICAgICAgICRzY29wZS5zY2hlbWEgPSBLdWJlcm5ldGVzU2NoZW1hO1xuICAgICAgICAkc2NvcGUuY29uZmlnID0gS3ViZXJuZXRlc1NjaGVtYS5kZWZpbml0aW9ucy5vc19kZXBsb3lfRGVwbG95bWVudENvbmZpZztcblxuICAgICAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XG5cbiAgICAgICAgJHNjb3BlLiRvbigna3ViZXJuZXRlc01vZGVsVXBkYXRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB1cGRhdGVEYXRhKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgICRzY29wZS4kb24oJyRyb3V0ZVVwZGF0ZScsICgkZXZlbnQpID0+IHtcbiAgICAgICAgICB1cGRhdGVEYXRhKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHVwZGF0ZURhdGEoKTtcblxuICAgICAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xuICAgICAgICAgICRzY29wZS5pdGVtID0gbnVsbDtcbiAgICAgICAgICBpZiAoJHNjb3BlLmlkKSB7XG4gICAgICAgICAgICB2YXIgdXJsID0gZGVwbG95bWVudENvbmZpZ1Jlc3RVcmwoJHNjb3BlLmlkKTtcbiAgICAgICAgICAgICRodHRwLmdldCh1cmwpLlxuICAgICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAkc2NvcGUuZW50aXR5ID0gZGF0YTtcbiAgICAgICAgICAgICAgICAgIGVucmljaERlcGxveW1lbnRDb25maWcoZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICRzY29wZS5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgICAgICAgICB9KS5cbiAgICAgICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRzY29wZS5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XSk7XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIGV4cG9ydCB2YXIgRGVwbG95bWVudENvbmZpZ3NDb250cm9sbGVyID0gY29udHJvbGxlcihcIkRlcGxveW1lbnRDb25maWdzQ29udHJvbGxlclwiLCBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCIkZGlhbG9nXCIsIFwiJHdpbmRvd1wiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGxvY2F0aW9uXCIsIFwibG9jYWxTdG9yYWdlXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcbiAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsICRkaWFsb2csICR3aW5kb3csICR0ZW1wbGF0ZUNhY2hlLCAkcm91dGVQYXJhbXMsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCBsb2NhbFN0b3JhZ2UsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xuXG4gICAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcbiAgICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICB9KTtcbiAgICAgICRzY29wZS5sYWJlbENsYXNzID0gY29udGFpbmVyTGFiZWxDbGFzcztcblxuICAgICAgJHNjb3BlLnRhYmxlQ29uZmlnID0ge1xuICAgICAgICBkYXRhOiAnZGVwbG95bWVudENvbmZpZ3MnLFxuICAgICAgICBzaG93U2VsZWN0aW9uQ2hlY2tib3g6IHRydWUsXG4gICAgICAgIGVuYWJsZVJvd0NsaWNrU2VsZWN0aW9uOiBmYWxzZSxcbiAgICAgICAgbXVsdGlTZWxlY3Q6IHRydWUsXG4gICAgICAgIHNlbGVjdGVkSXRlbXM6IFtdLFxuICAgICAgICBmaWx0ZXJPcHRpb25zOiB7XG4gICAgICAgICAgZmlsdGVyVGV4dDogJGxvY2F0aW9uLnNlYXJjaCgpW1wicVwiXSB8fCAnJ1xuICAgICAgICB9LFxuICAgICAgICBjb2x1bW5EZWZzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmllbGQ6ICdtZXRhZGF0YS5uYW1lJyxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTmFtZScsXG4gICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImRlcGxveW1lbnRDb25maWdMaW5rVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmllbGQ6ICdtZXRhZGF0YS5uYW1lc3BhY2UnLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdOYW1lc3BhY2UnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJyRpbWFnZUNoYW5nZVBhcmFtcy5hdXRvbWF0aWMnLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdBdXRvbWF0aWMnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJyRpbWFnZUNoYW5nZVBhcmFtcy4kY29udGFpbmVyTmFtZXMnLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdDb250YWluZXIgTmFtZXMnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJyRpbWFnZUNoYW5nZVBhcmFtcy5mcm9tLm5hbWUnLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdGcm9tIGltYWdlJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmllbGQ6ICckaW1hZ2VDaGFuZ2VQYXJhbXMudGFnJyxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnVGFnJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmllbGQ6ICd0ZW1wbGF0ZS5jb250cm9sbGVyVGVtcGxhdGUucG9kVGVtcGxhdGUudGFncycsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ0xhYmVscycsXG4gICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImRlcGxveW1lbnRDb25maWdMYWJlbFRlbXBsYXRlLmh0bWxcIilcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH07XG5cbiAgICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcblxuICAgICAgJHNjb3BlLmRlbGV0ZVByb21wdCA9IChzZWxlY3RlZCkgPT4ge1xuICAgICAgICBVSS5tdWx0aUl0ZW1Db25maXJtQWN0aW9uRGlhbG9nKDxVSS5NdWx0aUl0ZW1Db25maXJtQWN0aW9uT3B0aW9ucz57XG4gICAgICAgICAgY29sbGVjdGlvbjogc2VsZWN0ZWQsXG4gICAgICAgICAgaW5kZXg6ICckbmFtZScsXG4gICAgICAgICAgb25DbG9zZTogKHJlc3VsdDpib29sZWFuKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgIGZ1bmN0aW9uIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBuZXh0KSB7XG4gICAgICAgICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZUVudGl0eShuZXh0LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB1cGRhdGVEYXRhKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGl0bGU6ICdEZWxldGUgRGVwbG95bWVudD8nLFxuICAgICAgICAgIGFjdGlvbjogJ1RoZSBmb2xsb3dpbmcgRGVwbG95bWVudHMgd2lsbCBiZSBkZWxldGVkOicsXG4gICAgICAgICAgb2tUZXh0OiAnRGVsZXRlJyxcbiAgICAgICAgICBva0NsYXNzOiAnYnRuLWRhbmdlcicsXG4gICAgICAgICAgY3VzdG9tOiBcIlRoaXMgb3BlcmF0aW9uIGlzIHBlcm1hbmVudCBvbmNlIGNvbXBsZXRlZCFcIixcbiAgICAgICAgICBjdXN0b21DbGFzczogXCJhbGVydCBhbGVydC13YXJuaW5nXCJcbiAgICAgICAgfSkub3BlbigpO1xuICAgICAgfTtcblxuICAgICAgZnVuY3Rpb24gZGVsZXRlRW50aXR5KHNlbGVjdGlvbiwgbmV4dENhbGxiYWNrKSB7XG4gICAgICAgIHZhciBuYW1lID0gKHNlbGVjdGlvbiB8fCB7fSkuJG5hbWU7XG4gICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJBYm91dCB0byBkZWxldGUgZGVwbG95bWVudCBjb25maWc6IFwiICsgbmFtZSk7XG4gICAgICAgICAgdmFyIHVybCA9IGRlcGxveW1lbnRDb25maWdSZXN0VXJsKG5hbWUpO1xuICAgICAgICAgICRodHRwLmRlbGV0ZSh1cmwpLlxuICAgICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgICAgbmV4dENhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KS5cbiAgICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBkZWxldGUgZGVwbG95bWVudCBjb25maWcgb24gXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIndhcm5pbmc6IG5vIG5hbWUgZm9yIHNlbGVjdGlvbjogXCIgKyBhbmd1bGFyLnRvSnNvbihzZWxlY3Rpb24pKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xuICAgICAgICB2YXIgdXJsID0gZGVwbG95bWVudENvbmZpZ3NSZXN0VVJMKCk7XG4gICAgICAgICRodHRwLmdldCh1cmwpLlxuICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiZ290IGRhdGEgXCIgKyBhbmd1bGFyLnRvSnNvbihkYXRhLCB0cnVlKSk7XG4gICAgICAgICAgICAgICRzY29wZS5kZXBsb3ltZW50Q29uZmlncyA9IGVucmljaERlcGxveW1lbnRDb25maWdzKGRhdGEuaXRlbXMpO1xuICAgICAgICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkuXG4gICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGVEYXRhKCk7XG4gICAgfV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblxuICBleHBvcnQgdmFyIEV2ZW50c0NvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiRXZlbnRzQ29udHJvbGxlclwiLFxuICAgIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTZXJ2aWNlc1wiLCBcIkt1YmVybmV0ZXNQb2RzXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLFxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOiBLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTZXJ2aWNlczpuZy5yZXNvdXJjZS5JUmVzb3VyY2VDbGFzczxhbnk+LCBLdWJlcm5ldGVzUG9kczpuZy5yZXNvdXJjZS5JUmVzb3VyY2VDbGFzczxhbnk+LCBLdWJlcm5ldGVzU3RhdGUsXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcblxuICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xuICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcblxuICAgIENvbnRyb2xsZXJIZWxwZXJzLmJpbmRNb2RlbFRvU2VhcmNoUGFyYW0oJHNjb3BlLCAkbG9jYXRpb24sICdtb2RlJywgJ21vZGUnLCAnbGlzdCcpO1xuXG4gICAgJHNjb3BlLnRhYmxlQ29uZmlnID0ge1xuICAgICAgZGF0YTogJ21vZGVsLmV2ZW50cycsXG4gICAgICBzaG93U2VsZWN0aW9uQ2hlY2tib3g6IHRydWUsXG4gICAgICBlbmFibGVSb3dDbGlja1NlbGVjdGlvbjogZmFsc2UsXG4gICAgICBtdWx0aVNlbGVjdDogdHJ1ZSxcbiAgICAgIHNlbGVjdGVkSXRlbXM6IFtdLFxuICAgICAgZmlsdGVyT3B0aW9uczoge1xuICAgICAgICBmaWx0ZXJUZXh0OiAkbG9jYXRpb24uc2VhcmNoKClbXCJxXCJdIHx8ICcnXG4gICAgICB9LFxuICAgICAgY29sdW1uRGVmczogW1xuICAgICAgICB7IGZpZWxkOiAnJGZpcnN0VGltZXN0YW1wJyxcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ0ZpcnN0IFNlZW4nLFxuICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiZmlyc3RUaW1lc3RhbXBUZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgIH0sXG4gICAgICAgIHsgZmllbGQ6ICckbGFzdFRpbWVzdGFtcCcsXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdMYXN0IFNlZW4nLFxuICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwibGFzdFRpbWVzdGFtcFRlbXBsYXRlLmh0bWxcIilcbiAgICAgICAgfSxcbiAgICAgICAgeyBmaWVsZDogJ2NvdW50JyxcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ0NvdW50J1xuICAgICAgICB9LFxuICAgICAgICB7IGZpZWxkOiAnaW52b2x2ZWRPYmplY3QubmFtZScsXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdOYW1lJyxcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImV2ZW50TmFtZVRlbXBsYXRlLmh0bWxcIilcbiAgICAgICAgfSxcbiAgICAgICAgeyBmaWVsZDogJ2ludm9sdmVkT2JqZWN0LmtpbmQnLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnS2luZCcsXG4gICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJldmVudEtpbmRUZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgIH0sXG4gICAgICAgIHsgZmllbGQ6ICdpbnZvbHZlZE9iamVjdC5maWVsZFBhdGgnLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnU3ViamVjdCdcbiAgICAgICAgfSxcbiAgICAgICAgeyBmaWVsZDogJ3JlYXNvbicsXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdSZWFzb24nXG4gICAgICAgIH0sXG4gICAgICAgIHsgZmllbGQ6ICdzb3VyY2UnLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnU291cmNlJyxcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImV2ZW50U291cmNlVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICB9LFxuICAgICAgICB7IGZpZWxkOiAnbWVzc2FnZScsXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdNZXNzYWdlJ1xuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcblxuICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcbiAgfV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblxuICBleHBvcnQgdmFyIEZBQlJJQzhfUFJPSkVDVF9KU09OID0gXCJmYWJyaWM4UHJvamVjdEpzb25cIjtcblxuICBmdW5jdGlvbiBieUlkKHRoaW5nKSB7XG4gICAgcmV0dXJuIHRoaW5nLmlkO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlS2V5KG5hbWVzcGFjZSwgaWQsIGtpbmQpIHtcbiAgICByZXR1cm4gKG5hbWVzcGFjZSB8fCBcIlwiKSArIFwiLVwiICsgKGtpbmQgfHwgJ3VuZGVmaW5lZCcpLnRvTG93ZXJDYXNlKCkgKyAnLScgKyAoaWQgfHwgJ3VuZGVmaW5lZCcpLnJlcGxhY2UoL1xcLi9nLCAnLScpO1xuICB9XG5cbiAgZnVuY3Rpb24gcG9wdWxhdGVLZXkoaXRlbSkge1xuICAgIHZhciByZXN1bHQgPSBpdGVtO1xuICAgIHJlc3VsdFsnX2tleSddID0gY3JlYXRlS2V5KGdldE5hbWVzcGFjZShpdGVtKSwgZ2V0TmFtZShpdGVtKSwgZ2V0S2luZChpdGVtKSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBvcHVsYXRlS2V5cyhpdGVtczpBcnJheTxhbnk+KSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIGFuZ3VsYXIuZm9yRWFjaChpdGVtcywgKGl0ZW0pID0+IHtcbiAgICAgIHJlc3VsdC5wdXNoKHBvcHVsYXRlS2V5KGl0ZW0pKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gc2VsZWN0UG9kcyhwb2RzLCBuYW1lc3BhY2UsIGxhYmVscykge1xuICAgIHJldHVybiBwb2RzLmZpbHRlcigocG9kKSA9PiB7XG4gICAgICByZXR1cm4gZ2V0TmFtZXNwYWNlKHBvZCkgPT09IG5hbWVzcGFjZSAmJiBzZWxlY3Rvck1hdGNoZXMobGFiZWxzLCBnZXRMYWJlbHMocG9kKSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG9iamVjdCB3aGljaCBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHBvZHMsIHJlcGxpY2F0aW9uIGNvbnRyb2xsZXJzLCBzZXJ2aWNlcyBhbmQgdGhlaXIgYXNzb2NpYXRpb25zXG4gICAqL1xuICBleHBvcnQgY2xhc3MgS3ViZXJuZXRlc01vZGVsU2VydmljZSB7XG4gICAgcHVibGljIGt1YmVybmV0ZXMgPSA8S3ViZXJuZXRlc1N0YXRlPiBudWxsO1xuICAgIHB1YmxpYyBhcHBzID0gW107XG4gICAgcHVibGljIHNlcnZpY2VzID0gW107XG5cbiAgICBwdWJsaWMgcmVwbGljYXRpb25jb250cm9sbGVycyA9IFtdO1xuXG4gICAgcHVibGljIGZpbHRlclJlcGxpY2F0aW9uY29udHJvbGxlcnMgPSBbXTtcblxuICAgIC8qcHVibGljIGdldCBmaWx0ZXJSZXBsaWNhdGlvbmNvbnRyb2xsZXJzKCk6QXJyYXk8YW55PiB7XG4gICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyUmVwbGljYXRpb25jb250cm9sbGVycztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGZpbHRlclJlcGxpY2F0aW9uY29udHJvbGxlcnMoZmlsdGVyUmVwbGljYXRpb25jb250cm9sbGVyczpBcnJheTxhbnk+KSB7XG4gICAgICAgIHRoaXMuZmlsdGVyUmVwbGljYXRpb25jb250cm9sbGVycyA9IGZpbHRlclJlcGxpY2F0aW9uY29udHJvbGxlcnM7XG4gICAgfSovXG5cbiAgICBwdWJsaWMgZ2V0IHJlcGxpY2F0aW9uQ29udHJvbGxlcnMoKTpBcnJheTxhbnk+IHtcbiAgICAgIHJldHVybiB0aGlzLnJlcGxpY2F0aW9uY29udHJvbGxlcnM7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgcmVwbGljYXRpb25Db250cm9sbGVycyhyZXBsaWNhdGlvbkNvbnRyb2xsZXJzOkFycmF5PGFueT4pIHtcbiAgICAgIHRoaXMucmVwbGljYXRpb25jb250cm9sbGVycyA9IHJlcGxpY2F0aW9uQ29udHJvbGxlcnM7XG4gICAgfVxuICAgIHB1YmxpYyBwb2RzID0gW107XG4gICAgcHVibGljIGhvc3RzID0gW107XG4gICAgcHVibGljIGdldCBuYW1lc3BhY2VzKCk6QXJyYXk8c3RyaW5nPiB7XG4gICAgICByZXR1cm4gdGhpcy5rdWJlcm5ldGVzLm5hbWVzcGFjZXM7XG4gICAgfVxuICAgIC8vcHVibGljIG5hbWVzcGFjZXMgPSBbXTtcbiAgICBwdWJsaWMgcm91dGVzID0gW107XG4gICAgcHVibGljIHRlbXBsYXRlcyA9IFtdO1xuICAgIHB1YmxpYyByZWRyYXcgPSBmYWxzZTtcbiAgICBwdWJsaWMgcmVzb3VyY2VWZXJzaW9ucyA9IHt9O1xuXG4gICAgLy8gdmFyaW91cyB2aWV3cyBvbiB0aGUgZGF0YVxuICAgIHB1YmxpYyBwb2RzQnlIb3N0ID0ge307XG4gICAgcHVibGljIHNlcnZpY2VzQnlLZXkgPSB7fTtcbiAgICBwdWJsaWMgcmVwbGljYXRpb25Db250cm9sbGVyc0J5S2V5ID0ge307XG4gICAgcHVibGljIHBvZHNCeUtleSA9IHt9O1xuXG4gICAgcHVibGljIGFwcEluZm9zID0gW107XG4gICAgcHVibGljIGFwcFZpZXdzID0gW107XG4gICAgcHVibGljIGFwcEZvbGRlcnMgPSBbXTtcblxuICAgIHB1YmxpYyBmZXRjaGVkID0gZmFsc2U7XG4gICAgcHVibGljIGdldCBzaG93UnVuQnV0dG9uKCk6Ym9vbGVhbiB7XG4gICAgICBpZiAoaXNPcGVuU2hpZnQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gXy5hbnkodGhpcy5zZXJ2aWNlcywgKHNlcnZpY2UpID0+IHtcbiAgICAgICAgdmFyIG5hbWUgPSBnZXROYW1lKHNlcnZpY2UpO1xuICAgICAgICBpZiAobmFtZSA9PT0gXCJ0ZW1wbGF0ZXNcIikge1xuICAgICAgICAgIHZhciBwb2RDb3VudGVycyA9IHNlcnZpY2UuJHBvZENvdW50ZXJzO1xuICAgICAgICAgIHJldHVybiBwb2RDb3VudGVycyAmJiAocG9kQ291bnRlcnMudmFsaWQgfHwgcG9kQ291bnRlcnMucmVhZHkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGJ1aWxkY29uZmlncyA9IFtdO1xuICAgIHB1YmxpYyBldmVudHMgPSBbXTtcbiAgICBwdWJsaWMgd29ya3NwYWNlcyA9IFtdO1xuICAgIHB1YmxpYyBwcm9qZWN0cyA9IFtdO1xuICAgIHB1YmxpYyBwcm9qZWN0ID0gbnVsbDtcblxuICAgIHB1YmxpYyBnZXQgc2VydmljZUFwcHMoKTpBcnJheTxhbnk+IHtcbiAgICAgIHJldHVybiBfLmZpbHRlcih0aGlzLnNlcnZpY2VzLCAocykgPT4ge1xuICAgICAgICByZXR1cm4gcy4kaG9zdCAmJiBzLiRzZXJ2aWNlVXJsICYmIHMuJHBvZENvdW50XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgJGtlZXBQb2xsaW5nKCkge1xuICAgICAgcmV0dXJuIGtlZXBQb2xsaW5nTW9kZWw7XG4gICAgfVxuXG4gICAgcHVibGljIG9yUmVkcmF3KGZsYWcpIHtcbiAgICAgIHRoaXMucmVkcmF3ID0gdGhpcy5yZWRyYXcgfHwgZmxhZztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U2VydmljZShuYW1lc3BhY2UsIGlkKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlc0J5S2V5W2NyZWF0ZUtleShuYW1lc3BhY2UsIGlkLCAnc2VydmljZScpXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UmVwbGljYXRpb25Db250cm9sbGVyKG5hbWVzcGFjZSwgaWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlcGxpY2F0aW9uQ29udHJvbGxlcnNCeUtleVtjcmVhdGVLZXkobmFtZXNwYWNlLCBpZCwgJ3JlcGxpY2F0aW9uQ29udHJvbGxlcicpXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UG9kKG5hbWVzcGFjZSwgaWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnBvZHNCeUtleVtjcmVhdGVLZXkobmFtZXNwYWNlLCBpZCwgJ3BvZCcpXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcG9kc0Zvck5hbWVzcGFjZShuYW1lc3BhY2UgPSB0aGlzLmN1cnJlbnROYW1lc3BhY2UoKSkge1xuICAgICAgcmV0dXJuIF8uZmlsdGVyKHRoaXMucG9kcywgeyBuYW1lc3BhY2U6IG5hbWVzcGFjZSB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QnVpbGRDb25maWcobmFtZSkge1xuICAgICAgcmV0dXJuIF8uZmluZCh0aGlzLmJ1aWxkY29uZmlncywgeyAkbmFtZTogbmFtZSB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UHJvamVjdChuYW1lLCBucyA9IHRoaXMuY3VycmVudE5hbWVzcGFjZSgpKSB7XG4gICAgICB2YXIgYnVpbGRDb25maWcgPSB0aGlzLnByb2plY3Q7XG4gICAgICBpZiAoIWJ1aWxkQ29uZmlnKSB7XG4gICAgICAgIHZhciB0ZXh0ID0gbG9jYWxTdG9yYWdlW0ZBQlJJQzhfUFJPSkVDVF9KU09OXTtcbiAgICAgICAgaWYgKHRleHQpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYnVpbGRDb25maWcgPSBhbmd1bGFyLmZyb21Kc29uKHRleHQpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGxvZy53YXJuKFwiQ291bGQgbm90IHBhcnNlIGpzb24gZm9yIFwiICsgRkFCUklDOF9QUk9KRUNUX0pTT04gKyBcIi4gV2FzOiBcIiArIHRleHQgKyBcIi4gXCIgKyBlLCBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChidWlsZENvbmZpZyAmJiBucyAhPSBnZXROYW1lc3BhY2UoYnVpbGRDb25maWcpICYmIG5hbWUgIT0gYnVpbGRDb25maWcuJG5hbWUpIHtcbiAgICAgICAgYnVpbGRDb25maWcgPSB0aGlzLmdldEJ1aWxkQ29uZmlnKG5hbWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJ1aWxkQ29uZmlnO1xuICAgIH1cblxuXG4gICAgcHVibGljIHNldFByb2plY3QoYnVpbGRDb25maWcpIHtcbiAgICAgIHRoaXMucHJvamVjdCA9IGJ1aWxkQ29uZmlnO1xuICAgICAgaWYgKGJ1aWxkQ29uZmlnKSB7XG4gICAgICAgIC8vIGxldHMgc3RvcmUgaW4gbG9jYWwgc3RvcmFnZVxuICAgICAgICB2YXIgbG9jYWxTdG9yYWdlID0gaW5qZWN0KFwibG9jYWxTdG9yYWdlXCIpO1xuICAgICAgICBpZiAobG9jYWxTdG9yYWdlKSB7XG4gICAgICAgICAgbG9jYWxTdG9yYWdlW0ZBQlJJQzhfUFJPSkVDVF9KU09OXSA9IGFuZ3VsYXIudG9Kc29uKGJ1aWxkQ29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgc2VsZWN0ZWQgbmFtZXNwYWNlIG9yIHRoZSBkZWZhdWx0IG5hbWVzcGFjZVxuICAgICAqL1xuICAgIHB1YmxpYyBjdXJyZW50TmFtZXNwYWNlKCkge1xuICAgICAgdmFyIGFuc3dlciA9IG51bGw7XG4gICAgICBpZiAodGhpcy5rdWJlcm5ldGVzKSB7XG4gICAgICAgIGFuc3dlciA9IHRoaXMua3ViZXJuZXRlcy5zZWxlY3RlZE5hbWVzcGFjZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhbnN3ZXIgfHwgZGVmYXVsdE5hbWVzcGFjZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdXBkYXRlSWNvblVybEFuZEFwcEluZm8oZW50aXR5LCBuYW1lRmllbGQ6IHN0cmluZykge1xuICAgICAgdmFyIGFuc3dlciA9IG51bGw7XG4gICAgICB2YXIgaWQgPSBnZXROYW1lKGVudGl0eSk7XG4gICAgICBlbnRpdHkuJGljb25VcmwgPSBDb3JlLnBhdGhHZXQoZW50aXR5LCBbJ21ldGFkYXRhJywgJ2Fubm90YXRpb25zJywgJ2ZhYnJpYzguJyArIGlkICsgJy9pY29uVXJsJ10pO1xuICAgICAgZW50aXR5LiRpbmZvID0gQ29yZS5wYXRoR2V0KGVudGl0eSwgWydtZXRhZGF0YScsICdhbm5vdGF0aW9ucycsICdmYWJyaWM4LicgKyBpZCArICcvc3VtbWFyeSddKTtcbiAgICAgIGlmIChlbnRpdHkuJGljb25VcmwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGlkICYmIG5hbWVGaWVsZCkge1xuICAgICAgICAodGhpcy50ZW1wbGF0ZXMgfHwgW10pLmZvckVhY2goKHRlbXBsYXRlKSA9PiB7XG4gICAgICAgICAgdmFyIG1ldGFkYXRhID0gdGVtcGxhdGUubWV0YWRhdGE7XG4gICAgICAgICAgaWYgKG1ldGFkYXRhKSB7XG4gICAgICAgICAgICB2YXIgYW5ub3RhdGlvbnMgPSBtZXRhZGF0YS5hbm5vdGF0aW9ucyB8fCB7fTtcbiAgICAgICAgICAgIHZhciBpY29uVXJsID0gYW5ub3RhdGlvbnNbXCJmYWJyaWM4LlwiICsgaWQgKyBcIi9pY29uVXJsXCJdIHx8IGFubm90YXRpb25zW1wiZmFicmljOC9pY29uVXJsXCJdO1xuICAgICAgICAgICAgaWYgKGljb25VcmwpIHtcbiAgICAgICAgICAgICAgKHRlbXBsYXRlLm9iamVjdHMgfHwgW10pLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgZW50aXR5TmFtZSA9IGdldE5hbWUoaXRlbSk7XG4gICAgICAgICAgICAgICAgaWYgKGlkID09PSBlbnRpdHlOYW1lKSB7XG4gICAgICAgICAgICAgICAgICBlbnRpdHkuJGljb25VcmwgPSBpY29uVXJsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgKHRoaXMuYXBwSW5mb3MgfHwgW10pLmZvckVhY2goKGFwcEluZm8pID0+IHtcbiAgICAgICAgICB2YXIgaWNvblBhdGggPSBhcHBJbmZvLmljb25QYXRoO1xuICAgICAgICAgIGlmIChpY29uUGF0aCAmJiAhYW5zd2VyICYmIGljb25QYXRoICE9PSBcIm51bGxcIikge1xuICAgICAgICAgICAgdmFyIGljb25VcmwgPSBnaXRQYXRoVG9VcmwoaWNvblBhdGgpO1xuICAgICAgICAgICAgdmFyIGlkcyA9IENvcmUucGF0aEdldChhcHBJbmZvLCBbXCJuYW1lc1wiLCBuYW1lRmllbGRdKTtcbiAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChpZHMsIChhcHBJZCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoYXBwSWQgPT09IGlkKSB7XG4gICAgICAgICAgICAgICAgZW50aXR5LiRpY29uVXJsID0gaWNvblVybDtcbiAgICAgICAgICAgICAgICBlbnRpdHkuYXBwUGF0aCA9IGFwcEluZm8uYXBwUGF0aDtcbiAgICAgICAgICAgICAgICBlbnRpdHkuJGluZm8gPSBhcHBJbmZvO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKCFlbnRpdHkuJGljb25VcmwpIHtcbiAgICAgICAgZW50aXR5LiRpY29uVXJsID0gZGVmYXVsdEljb25Vcmw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG1heWJlSW5pdCgpIHtcbiAgICAgIHRoaXMuZmV0Y2hlZCA9IHRydWU7XG4gICAgICB0aGlzLnNlcnZpY2VzQnlLZXkgPSB7fTtcbiAgICAgIHRoaXMucG9kc0J5S2V5ID0ge307XG4gICAgICB0aGlzLnJlcGxpY2F0aW9uQ29udHJvbGxlcnNCeUtleSA9IHt9O1xuXG4gICAgICB0aGlzLnBvZHMuZm9yRWFjaCgocG9kKSA9PiB7XG4gICAgICAgIGlmICghcG9kLmtpbmQpIHBvZC5raW5kID0gXCJQb2RcIjtcbiAgICAgICAgdGhpcy5wb2RzQnlLZXlbcG9kLl9rZXldID0gcG9kO1xuICAgICAgICB2YXIgaG9zdCA9IGdldEhvc3QocG9kKTtcbiAgICAgICAgcG9kLiRsYWJlbHNUZXh0ID0gS3ViZXJuZXRlcy5sYWJlbHNUb1N0cmluZyhnZXRMYWJlbHMocG9kKSk7XG4gICAgICAgIGlmIChob3N0KSB7XG4gICAgICAgICAgcG9kLiRsYWJlbHNUZXh0ICs9IGxhYmVsRmlsdGVyVGV4dFNlcGFyYXRvciArIFwiaG9zdD1cIiArIGhvc3Q7XG4gICAgICAgIH1cbiAgICAgICAgcG9kLiRpY29uVXJsID0gZGVmYXVsdEljb25Vcmw7XG4gICAgICAgIHRoaXMuZGlzY292ZXJQb2RDb25uZWN0aW9ucyhwb2QpO1xuICAgICAgICBwb2QuJGNvbnRhaW5lclBvcnRzID0gW107XG5cbiAgICAgICAgdmFyIHBvZFN0YXR1cyA9IHBvZC5zdGF0dXMgfHwge307XG4gICAgICAgIHZhciBzdGFydFRpbWUgPSBwb2RTdGF0dXMuc3RhcnRUaW1lO1xuICAgICAgICBwb2QuJHN0YXJ0VGltZSA9IG51bGw7XG4gICAgICAgIGlmIChzdGFydFRpbWUpIHtcbiAgICAgICAgICBwb2QuJHN0YXJ0VGltZSA9IG5ldyBEYXRlKHN0YXJ0VGltZSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNyZWF0ZWRUaW1lID0gZ2V0Q3JlYXRpb25UaW1lc3RhbXAocG9kKTtcbiAgICAgICAgcG9kLiRjcmVhdGVkVGltZSA9IG51bGw7XG4gICAgICAgIHBvZC4kYWdlID0gbnVsbDtcbiAgICAgICAgaWYgKGNyZWF0ZWRUaW1lKSB7XG4gICAgICAgICAgcG9kLiRjcmVhdGVkVGltZSA9IG5ldyBEYXRlKGNyZWF0ZWRUaW1lKTtcbiAgICAgICAgICBwb2QuJGFnZSA9IGh1bWFuZGF0ZS5yZWxhdGl2ZVRpbWUocG9kLiRjcmVhdGVkVGltZSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJlYWR5ID0gaXNSZWFkeShwb2QpO1xuICAgICAgICBwb2QuJHJlYWR5ID0gcmVhZHk7XG4gICAgICAgIHBvZC4kc3RhdHVzQ3NzID0gc3RhdHVzVGV4dFRvQ3NzQ2xhc3MocG9kU3RhdHVzLnBoYXNlLCByZWFkeSk7XG5cbiAgICAgICAgdmFyIG1heFJlc3RhcnRDb3VudCA9IDA7XG4gICAgICAgIGFuZ3VsYXIuZm9yRWFjaChDb3JlLnBhdGhHZXQocG9kLCBbXCJzdGF0dXNcIiwgXCJjb250YWluZXJTdGF0dXNlc1wiXSksIChzdGF0dXMpID0+IHtcbiAgICAgICAgICB2YXIgcmVzdGFydENvdW50ID0gc3RhdHVzLnJlc3RhcnRDb3VudDtcbiAgICAgICAgICBpZiAocmVzdGFydENvdW50KSB7XG4gICAgICAgICAgICBpZiAocmVzdGFydENvdW50ID4gbWF4UmVzdGFydENvdW50KSB7XG4gICAgICAgICAgICAgIG1heFJlc3RhcnRDb3VudCA9IHJlc3RhcnRDb3VudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAobWF4UmVzdGFydENvdW50ICkge1xuICAgICAgICAgIHBvZC4kcmVzdGFydENvdW50ID0gbWF4UmVzdGFydENvdW50O1xuICAgICAgICB9XG4gICAgICAgIHZhciBpbWFnZU5hbWVzID0gXCJcIjtcbiAgICAgICAgYW5ndWxhci5mb3JFYWNoKENvcmUucGF0aEdldChwb2QsIFtcInNwZWNcIiwgXCJjb250YWluZXJzXCJdKSwgKGNvbnRhaW5lcikgPT4ge1xuICAgICAgICAgIHZhciBpbWFnZSA9IGNvbnRhaW5lci5pbWFnZTtcbiAgICAgICAgICBpZiAoaW1hZ2UpIHtcbiAgICAgICAgICAgIGlmICghaW1hZ2VOYW1lcykge1xuICAgICAgICAgICAgICBpbWFnZU5hbWVzID0gaW1hZ2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpbWFnZU5hbWVzID0gaW1hZ2VOYW1lcyArIFwiIFwiICsgaW1hZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgaWR4ID0gaW1hZ2UubGFzdEluZGV4T2YoXCI6XCIpO1xuICAgICAgICAgICAgaWYgKGlkeCA+IDApIHtcbiAgICAgICAgICAgICAgaW1hZ2UgPSBpbWFnZS5zdWJzdHJpbmcoMCwgaWR4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBwYXRocyA9IGltYWdlLnNwbGl0KFwiL1wiLCAzKTtcbiAgICAgICAgICAgIGlmIChwYXRocy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgdmFyIGFuc3dlciA9IG51bGw7XG4gICAgICAgICAgICAgIGlmIChwYXRocy5sZW5ndGggPT0gMykge1xuICAgICAgICAgICAgICAgIGFuc3dlciA9IHBhdGhzWzFdICsgXCIvXCIgKyBwYXRoc1syXTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXRocy5sZW5ndGggPT0gMikge1xuICAgICAgICAgICAgICAgIGFuc3dlciA9IHBhdGhzWzBdICsgXCIvXCIgKyBwYXRoc1sxXTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhbnN3ZXIgPSBwYXRoc1swXSArIFwiL1wiICsgcGF0aHNbMV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29udGFpbmVyLiRpbWFnZUxpbmsgPSBVcmxIZWxwZXJzLmpvaW4oXCJodHRwczovL3JlZ2lzdHJ5Lmh1Yi5kb2NrZXIuY29tL3UvXCIsIGFuc3dlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChjb250YWluZXIucG9ydHMsIChwb3J0KSA9PiB7XG4gICAgICAgICAgICB2YXIgY29udGFpbmVyUG9ydCA9IHBvcnQuY29udGFpbmVyUG9ydDtcbiAgICAgICAgICAgIGlmIChjb250YWluZXJQb3J0KSB7XG4gICAgICAgICAgICAgIHBvZC4kY29udGFpbmVyUG9ydHMucHVzaChjb250YWluZXJQb3J0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHBvZC4kaW1hZ2VOYW1lcyA9IGltYWdlTmFtZXM7XG4gICAgICAgIHZhciBwb2RTdGF0dXMgPSBwb2RTdGF0dXM7XG4gICAgICAgIHZhciBwb2RTcGVjID0gKHBvZC5zcGVjIHx8IHt9KTtcbiAgICAgICAgcG9kLiRwb2RJUCA9IHBvZFN0YXR1cy5wb2RJUDtcbiAgICAgICAgcG9kLiRob3N0ID0gcG9kU3BlYy5ob3N0IHx8IHBvZFNwZWMubm9kZU5hbWUgfHwgcG9kU3RhdHVzLmhvc3RJUDtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnNlcnZpY2VzLmZvckVhY2goKHNlcnZpY2UpID0+IHtcbiAgICAgICAgaWYgKCFzZXJ2aWNlLmtpbmQpIHNlcnZpY2Uua2luZCA9IFwiU2VydmljZVwiO1xuICAgICAgICB0aGlzLnNlcnZpY2VzQnlLZXlbc2VydmljZS5fa2V5XSA9IHNlcnZpY2U7XG4gICAgICAgIHZhciBzZWxlY3RvciA9IGdldFNlbGVjdG9yKHNlcnZpY2UpO1xuICAgICAgICBzZXJ2aWNlLiRwb2RzID0gW107XG4gICAgICAgIGlmICghc2VydmljZS4kcG9kQ291bnRlcnMpIHtcbiAgICAgICAgICBzZXJ2aWNlLiRwb2RDb3VudGVycyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHZhciBwb2RMaW5rVXJsID0gVXJsSGVscGVycy5qb2luKFwiL2t1YmVybmV0ZXMvbmFtZXNwYWNlXCIsIHNlcnZpY2UubWV0YWRhdGEubmFtZXNwYWNlLCBcInBvZHNcIik7XG4gICAgICAgIF8uYXNzaWduKHNlcnZpY2UuJHBvZENvdW50ZXJzLCBzZWxlY3RvciA/IGNyZWF0ZVBvZENvdW50ZXJzKHNlbGVjdG9yLCB0aGlzLnBvZHMsIHNlcnZpY2UuJHBvZHMsIEt1YmVybmV0ZXMubGFiZWxzVG9TdHJpbmcoc2VsZWN0b3IsIFwiLFwiKSwgcG9kTGlua1VybCkgOiB7fSk7XG4gICAgICAgIHNlcnZpY2UuJHBvZENvdW50ID0gc2VydmljZS4kcG9kcy5sZW5ndGg7XG5cbiAgICAgICAgdmFyIHNlbGVjdGVkUG9kcyA9IHNlcnZpY2UuJHBvZHM7XG4gICAgICAgIHNlcnZpY2UuY29ubmVjdFRvID0gc2VsZWN0ZWRQb2RzLm1hcCgocG9kKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHBvZC5fa2V5O1xuICAgICAgICB9KS5qb2luKCcsJyk7XG4gICAgICAgIHNlcnZpY2UuJGxhYmVsc1RleHQgPSBLdWJlcm5ldGVzLmxhYmVsc1RvU3RyaW5nKGdldExhYmVscyhzZXJ2aWNlKSk7XG4gICAgICAgIHRoaXMudXBkYXRlSWNvblVybEFuZEFwcEluZm8oc2VydmljZSwgXCJzZXJ2aWNlTmFtZXNcIik7XG4gICAgICAgIHZhciBzcGVjID0gc2VydmljZS5zcGVjIHx8IHt9O1xuICAgICAgICBzZXJ2aWNlLiRwb3J0YWxJUCA9IHNwZWMucG9ydGFsSVA7XG4gICAgICAgIHNlcnZpY2UuJHNlbGVjdG9yVGV4dCA9IEt1YmVybmV0ZXMubGFiZWxzVG9TdHJpbmcoc3BlYy5zZWxlY3Rvcik7XG4gICAgICAgIHZhciBwb3J0cyA9IF8ubWFwKHNwZWMucG9ydHMgfHwgW10sIFwicG9ydFwiKTtcbiAgICAgICAgc2VydmljZS4kcG9ydHMgPSBwb3J0cztcbiAgICAgICAgc2VydmljZS4kcG9ydHNUZXh0ID0gcG9ydHMuam9pbihcIiwgXCIpO1xuICAgICAgICB2YXIgaWNvblVybCA9IHNlcnZpY2UuJGljb25Vcmw7XG4gICAgICAgIGlmIChpY29uVXJsICYmIHNlbGVjdGVkUG9kcykge1xuICAgICAgICAgIHNlbGVjdGVkUG9kcy5mb3JFYWNoKChwb2QpID0+IHtcbiAgICAgICAgICAgIHBvZC4kaWNvblVybCA9IGljb25Vcmw7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgc2VydmljZS4kc2VydmljZVVybCA9IHNlcnZpY2VMaW5rVXJsKHNlcnZpY2UpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMucmVwbGljYXRpb25Db250cm9sbGVycy5mb3JFYWNoKChyZXBsaWNhdGlvbkNvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgaWYgKCFyZXBsaWNhdGlvbkNvbnRyb2xsZXIua2luZCkgcmVwbGljYXRpb25Db250cm9sbGVyLmtpbmQgPSBcIlJlcGxpY2F0aW9uQ29udHJvbGxlclwiO1xuICAgICAgICB0aGlzLnJlcGxpY2F0aW9uQ29udHJvbGxlcnNCeUtleVtyZXBsaWNhdGlvbkNvbnRyb2xsZXIuX2tleV0gPSByZXBsaWNhdGlvbkNvbnRyb2xsZXJcbiAgICAgICAgICB2YXIgc2VsZWN0b3IgPSBnZXRTZWxlY3RvcihyZXBsaWNhdGlvbkNvbnRyb2xsZXIpO1xuICAgICAgICByZXBsaWNhdGlvbkNvbnRyb2xsZXIuJHBvZHMgPSBbXTtcblxuICAgICAgICBpZihpc0ZpbHRlclJDKHJlcGxpY2F0aW9uQ29udHJvbGxlcikgJiYgIWlzSW5jbHVkZSh0aGlzLmZpbHRlclJlcGxpY2F0aW9uY29udHJvbGxlcnMsIHJlcGxpY2F0aW9uQ29udHJvbGxlcikpXG4gICAgICAgICAgIHRoaXMuZmlsdGVyUmVwbGljYXRpb25jb250cm9sbGVycy5wdXNoKHJlcGxpY2F0aW9uQ29udHJvbGxlcik7XG5cbiAgICAgICAgcmVwbGljYXRpb25Db250cm9sbGVyLiRwb2RDb3VudGVycyA9IHNlbGVjdG9yID8gY3JlYXRlUG9kQ291bnRlcnMoc2VsZWN0b3IsIHRoaXMucG9kcywgcmVwbGljYXRpb25Db250cm9sbGVyLiRwb2RzKSA6IG51bGw7XG4gICAgICAgIHJlcGxpY2F0aW9uQ29udHJvbGxlci4kcG9kQ291bnQgPSByZXBsaWNhdGlvbkNvbnRyb2xsZXIuJHBvZHMubGVuZ3RoO1xuICAgICAgICByZXBsaWNhdGlvbkNvbnRyb2xsZXIuJHJlcGxpY2FzID0gKHJlcGxpY2F0aW9uQ29udHJvbGxlci5zcGVjIHx8IHt9KS5yZXBsaWNhcztcblxuICAgICAgICByZXBsaWNhdGlvbkNvbnRyb2xsZXIuJG9yYWNsZU5hbWUgPSBnZXRPcmFjbGVOYW1lKGdldE5hbWUocmVwbGljYXRpb25Db250cm9sbGVyKSk7XG4gICAgICAgIC8vY29uc29sZS5sb2coZ2V0TmFtZShyZXBsaWNhdGlvbkNvbnRyb2xsZXIpKTtcbiAgICAgICAgcmVwbGljYXRpb25Db250cm9sbGVyLiRvcmFjbGVTdGF0dXMgPSBnZXRPcmFjbGVTdGF0dXMoZ2V0TGFiZWxzKHJlcGxpY2F0aW9uQ29udHJvbGxlcikpO1xuXG4gICAgICAgIHZhciBzZWxlY3RlZFBvZHMgPSByZXBsaWNhdGlvbkNvbnRyb2xsZXIuJHBvZHM7XG4gICAgICAgIHJlcGxpY2F0aW9uQ29udHJvbGxlci5jb25uZWN0VG8gPSBzZWxlY3RlZFBvZHMubWFwKChwb2QpID0+IHtcbiAgICAgICAgICByZXR1cm4gcG9kLl9rZXk7XG4gICAgICAgIH0pLmpvaW4oJywnKTtcbiAgICAgICAgcmVwbGljYXRpb25Db250cm9sbGVyLiRsYWJlbHNUZXh0ID0gS3ViZXJuZXRlcy5sYWJlbHNUb1N0cmluZyhnZXRMYWJlbHMocmVwbGljYXRpb25Db250cm9sbGVyKSk7XG4gICAgICAgIHJlcGxpY2F0aW9uQ29udHJvbGxlci5tZXRhZGF0YS5sYWJlbHMgPSBLdWJlcm5ldGVzLmxhYmVsVG9DaGluZXNlKGdldExhYmVscyhyZXBsaWNhdGlvbkNvbnRyb2xsZXIpKTtcbiAgICAgICAgdGhpcy51cGRhdGVJY29uVXJsQW5kQXBwSW5mbyhyZXBsaWNhdGlvbkNvbnRyb2xsZXIsIFwicmVwbGljYXRpb25Db250cm9sbGVyTmFtZXNcIik7XG4gICAgICAgIHZhciBpY29uVXJsID0gIHJlcGxpY2F0aW9uQ29udHJvbGxlci4kaWNvblVybDtcbiAgICAgICAgaWYgKGljb25VcmwgJiYgc2VsZWN0ZWRQb2RzKSB7XG4gICAgICAgICAgc2VsZWN0ZWRQb2RzLmZvckVhY2goKHBvZCkgPT4ge1xuICAgICAgICAgICAgcG9kLiRpY29uVXJsID0gaWNvblVybDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIHNlcnZpY2VzIG1heSBub3QgbWFwIHRvIGFuIGljb24gYnV0IHRoZWlyIHBvZHMgbWF5IGRvIHZpYSB0aGUgUkNcbiAgICAgIC8vIHNvIGxldHMgZGVmYXVsdCBpdC4uLlxuICAgICAgdGhpcy5zZXJ2aWNlcy5mb3JFYWNoKChzZXJ2aWNlKSA9PiB7XG4gICAgICAgIHZhciBpY29uVXJsID0gc2VydmljZS4kaWNvblVybDtcbiAgICAgICAgdmFyIHNlbGVjdGVkUG9kcyA9IHNlcnZpY2UuJHBvZHM7XG4gICAgICAgIGlmIChzZWxlY3RlZFBvZHMpIHtcbiAgICAgICAgICBpZiAoIWljb25VcmwgfHwgaWNvblVybCA9PT0gZGVmYXVsdEljb25VcmwpIHtcbiAgICAgICAgICAgIGljb25VcmwgPSBudWxsO1xuICAgICAgICAgICAgc2VsZWN0ZWRQb2RzLmZvckVhY2goKHBvZCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWljb25VcmwpIHtcbiAgICAgICAgICAgICAgICBpY29uVXJsID0gcG9kLiRpY29uVXJsO1xuICAgICAgICAgICAgICAgIGlmIChpY29uVXJsKSB7XG4gICAgICAgICAgICAgICAgICBzZXJ2aWNlLiRpY29uVXJsID0gaWNvblVybDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMudXBkYXRlQXBwcygpO1xuXG4gICAgICB2YXIgcG9kc0J5SG9zdCA9IHt9O1xuICAgICAgdGhpcy5wb2RzLmZvckVhY2goKHBvZCkgPT4ge1xuICAgICAgICB2YXIgaG9zdCA9IGdldEhvc3QocG9kKTtcbiAgICAgICAgdmFyIHBvZHNGb3JIb3N0ID0gcG9kc0J5SG9zdFtob3N0XTtcbiAgICAgICAgaWYgKCFwb2RzRm9ySG9zdCkge1xuICAgICAgICAgIHBvZHNGb3JIb3N0ID0gW107XG4gICAgICAgICAgcG9kc0J5SG9zdFtob3N0XSA9IHBvZHNGb3JIb3N0O1xuICAgICAgICB9XG4gICAgICAgIHBvZHNGb3JIb3N0LnB1c2gocG9kKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5wb2RzQnlIb3N0ID0gcG9kc0J5SG9zdDtcblxuICAgICAgdmFyIHRtcEhvc3RzID0gW107XG4gICAgICBmb3IgKHZhciBob3N0S2V5IGluIHBvZHNCeUhvc3QpIHtcbiAgICAgICAgdmFyIGhvc3RQb2RzID0gW107XG4gICAgICAgIHZhciBwb2RDb3VudGVycyA9IGNyZWF0ZVBvZENvdW50ZXJzKChwb2QpID0+IGdldEhvc3QocG9kKSA9PT0gaG9zdEtleSwgdGhpcy5wb2RzLCBob3N0UG9kcywgXCJob3N0PVwiICsgaG9zdEtleSk7XG4gICAgICAgIHZhciBob3N0SVAgPSBudWxsO1xuICAgICAgICBpZiAoaG9zdFBvZHMubGVuZ3RoKSB7XG4gICAgICAgICAgdmFyIHBvZCA9IGhvc3RQb2RzWzBdO1xuICAgICAgICAgIHZhciBjdXJyZW50U3RhdGUgPSBwb2Quc3RhdHVzO1xuICAgICAgICAgIGlmIChjdXJyZW50U3RhdGUpIHtcbiAgICAgICAgICAgIGhvc3RJUCA9IGN1cnJlbnRTdGF0ZS5ob3N0SVA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBob3N0RGV0YWlscyA9IHtcbiAgICAgICAgICBuYW1lOiBob3N0S2V5LFxuICAgICAgICAgIGlkOiBob3N0S2V5LFxuICAgICAgICAgIGVsZW1lbnRJZDogaG9zdEtleS5yZXBsYWNlKC9cXC4vZywgJ18nKSxcbiAgICAgICAgICBob3N0SVA6IGhvc3RJUCxcbiAgICAgICAgICBwb2RzOiBob3N0UG9kcyxcbiAgICAgICAgICBraW5kOiBcIkhvc3RcIixcbiAgICAgICAgICAgICRwb2RDb3VudGVyczogcG9kQ291bnRlcnMsXG4gICAgICAgICAgICAkaWNvblVybDogaG9zdEljb25VcmxcbiAgICAgICAgfTtcbiAgICAgICAgdG1wSG9zdHMucHVzaChob3N0RGV0YWlscyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaG9zdHMgPSB0bXBIb3N0cztcblxuICAgICAgZW5yaWNoQnVpbGRDb25maWdzKHRoaXMuYnVpbGRjb25maWdzKTtcbiAgICAgIGVucmljaEV2ZW50cyh0aGlzLmV2ZW50cywgdGhpcyk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHVwZGF0ZUFwcHMoKSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBsZXRzIGNyZWF0ZSB0aGUgYXBwIHZpZXdzIGJ5IHRyeWluZyB0byBqb2luIGNvbnRyb2xsZXJzIC8gc2VydmljZXMgLyBwb2RzIHRoYXQgYXJlIHJlbGF0ZWRcbiAgICAgICAgdmFyIGFwcFZpZXdzID0gW107XG5cbiAgICAgICAgdGhpcy5yZXBsaWNhdGlvbkNvbnRyb2xsZXJzLmZvckVhY2goKHJlcGxpY2F0aW9uQ29udHJvbGxlcikgPT4ge1xuICAgICAgICAgIHZhciBuYW1lID0gZ2V0TmFtZShyZXBsaWNhdGlvbkNvbnRyb2xsZXIpO1xuICAgICAgICAgIHZhciAkaWNvblVybCA9IHJlcGxpY2F0aW9uQ29udHJvbGxlci4kaWNvblVybDtcbiAgICAgICAgICBhcHBWaWV3cy5wdXNoKHtcbiAgICAgICAgICAgIGFwcFBhdGg6IFwiL2R1bW15UGF0aC9cIiArIG5hbWUsXG4gICAgICAgICAgICAkbmFtZTogbmFtZSxcbiAgICAgICAgICAgICRpbmZvOiB7XG4gICAgICAgICAgICAgICRpY29uVXJsOiAkaWNvblVybFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICRpY29uVXJsOiAkaWNvblVybCxcbiAgICAgICAgICAgIHJlcGxpY2F0aW9uQ29udHJvbGxlcnM6IFtyZXBsaWNhdGlvbkNvbnRyb2xsZXJdLFxuICAgICAgICAgICAgcG9kczogcmVwbGljYXRpb25Db250cm9sbGVyLiRwb2RzIHx8IFtdLFxuICAgICAgICAgICAgc2VydmljZXM6IFtdXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBub01hdGNoZXMgPSBbXTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlcy5mb3JFYWNoKChzZXJ2aWNlKSA9PiB7XG4gICAgICAgICAgLy8gbm93IGxldHMgc2VlIGlmIHdlIGNhbiBmaW5kIGFuIGFwcCB3aXRoIGFuIFJDIG9mIHRoZSBzYW1lIHNlbGVjdG9yXG4gICAgICAgICAgdmFyIG1hdGNoZXNBcHAgPSBudWxsO1xuICAgICAgICAgIGFwcFZpZXdzLmZvckVhY2goKGFwcFZpZXcpID0+IHtcbiAgICAgICAgICAgIGFwcFZpZXcucmVwbGljYXRpb25Db250cm9sbGVycy5mb3JFYWNoKChyZXBsaWNhdGlvbkNvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgICAgICAgdmFyIHJlcFNlbGVjdG9yID0gZ2V0U2VsZWN0b3IocmVwbGljYXRpb25Db250cm9sbGVyKTtcbiAgICAgICAgICAgICAgaWYgKHJlcFNlbGVjdG9yICYmXG4gICAgICAgICAgICAgICAgICBzZWxlY3Rvck1hdGNoZXMocmVwU2VsZWN0b3IsIGdldFNlbGVjdG9yKHNlcnZpY2UpKSAmJlxuICAgICAgICAgICAgICAgICAgZ2V0TmFtZXNwYWNlKHNlcnZpY2UpID09PSBnZXROYW1lc3BhY2UocmVwbGljYXRpb25Db250cm9sbGVyKSkge1xuICAgICAgICAgICAgICAgIG1hdGNoZXNBcHAgPSBhcHBWaWV3O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChtYXRjaGVzQXBwKSB7XG4gICAgICAgICAgICBtYXRjaGVzQXBwLnNlcnZpY2VzLnB1c2goc2VydmljZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5vTWF0Y2hlcy5wdXNoKHNlcnZpY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGxvZy5kZWJ1ZyhcIm5vIG1hdGNoZXM6IFwiLCBub01hdGNoZXMpO1xuICAgICAgICBub01hdGNoZXMuZm9yRWFjaCgoc2VydmljZSkgPT4ge1xuICAgICAgICAgIHZhciBhcHBWaWV3ID0gXy5maW5kKGFwcFZpZXdzLCAoYXBwVmlldykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIF8uYW55KGFwcFZpZXcucmVwbGljYXRpb25Db250cm9sbGVycywgKHJjKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBfLnN0YXJ0c1dpdGgoZ2V0TmFtZShyYyksIGdldE5hbWUoc2VydmljZSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGFwcFZpZXcpIHtcbiAgICAgICAgICAgIGFwcFZpZXcuc2VydmljZXMucHVzaChzZXJ2aWNlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyICRpY29uVXJsID0gc2VydmljZS4kaWNvblVybDtcbiAgICAgICAgICAgIGFwcFZpZXdzLnB1c2goe1xuICAgICAgICAgICAgICBhcHBQYXRoOiBcIi9kdW1teVBhdGgvXCIgKyBuYW1lLFxuICAgICAgICAgICAgICAkbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgJGluZm86IHtcbiAgICAgICAgICAgICAgICAkaWNvblVybDogJGljb25VcmxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAkaWNvblVybDogJGljb25VcmwsXG4gICAgICAgICAgICAgIHJlcGxpY2F0aW9uQ29udHJvbGxlcnM6IFtdLFxuICAgICAgICAgICAgICBwb2RzOiBzZXJ2aWNlLiRwb2RzIHx8IFtdLFxuICAgICAgICAgICAgICBzZXJ2aWNlczogW3NlcnZpY2VdXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGFuZ3VsYXIuZm9yRWFjaCh0aGlzLnJvdXRlcywgKHJvdXRlKSA9PiB7XG4gICAgICAgICAgdmFyIG1ldGFkYXRhID0gcm91dGUubWV0YWRhdGEgfHwge307XG4gICAgICAgICAgdmFyIHNwZWMgPSByb3V0ZS5zcGVjIHx8IHt9O1xuICAgICAgICAgIHZhciBzZXJ2aWNlTmFtZSA9IENvcmUucGF0aEdldChzcGVjLCBbXCJ0b1wiLCBcIm5hbWVcIl0pO1xuICAgICAgICAgIHZhciBob3N0ID0gc3BlYy5ob3N0O1xuICAgICAgICAgIHZhciBuYW1lc3BhY2UgPSBnZXROYW1lc3BhY2Uocm91dGUpO1xuICAgICAgICAgIGlmIChzZXJ2aWNlTmFtZSAmJiBob3N0KSB7XG4gICAgICAgICAgICB2YXIgc2VydmljZSA9IHRoaXMuZ2V0U2VydmljZShuYW1lc3BhY2UsIHNlcnZpY2VOYW1lKTtcbiAgICAgICAgICAgIGlmIChzZXJ2aWNlKSB7XG4gICAgICAgICAgICAgIHNlcnZpY2UuJGhvc3QgPSBob3N0O1xuXG4gICAgICAgICAgICAgIC8vIFRPRE8gd2UgY291bGQgdXNlIHNvbWUgYW5ub3RhdGlvbnMgLyBtZXRhZGF0YSB0byBkZWR1Y2Ugd2hhdCBVUkwgd2Ugc2hvdWxkIHVzZSB0byBvcGVuIHRoaXNcbiAgICAgICAgICAgICAgLy8gc2VydmljZSBpbiB0aGUgY29uc29sZS4gRm9yIG5vdyBqdXN0IGFzc3VtZSBpdHMgaHR0cDpcblxuICAgICAgICAgICAgICBpZiAoaG9zdCkge1xuICAgICAgICAgICAgICAgIHZhciBob3N0VXJsID0gIGhvc3Q7XG4gICAgICAgICAgICAgICAgaWYgKGhvc3RVcmwuaW5kZXhPZihcIjovL1wiKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgIGhvc3RVcmwgPSBcImh0dHA6Ly9cIiArIGhvc3Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNlcnZpY2UuJGNvbm5lY3RVcmwgPSBVcmxIZWxwZXJzLmpvaW4oaG9zdFVybCwgIFwiL1wiKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIFRPRE8gZGVmaW5pdGVseSBuZWVkIHRoYXQgYW5ub3RhdGlvbiwgdGVtcCBoYWNrIGZvciBhcGltYW4gbGlua1xuICAgICAgICAgICAgICBpZiAoZ2V0TmFtZShzZXJ2aWNlKSA9PT0gJ2FwaW1hbicgJiYgaG9zdCkge1xuICAgICAgICAgICAgICAgIHNlcnZpY2UuJGNvbm5lY3RVcmwgPSAoPGFueT4gbmV3IFVSSSgpLmhvc3Qoc2VydmljZS4kaG9zdClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucGF0aCgnYXBpbWFudWkvaW5kZXguaHRtbCcpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5xdWVyeSh7fSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaGFzaChVUkkuZW5jb2RlKGFuZ3VsYXIudG9Kc29uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tUbzogbmV3IFVSSSgpLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbjogSGF3dGlvT0F1dGguZ2V0T0F1dGhUb2tlbigpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpKS50b1N0cmluZygpO1xuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcIkNvdWxkIG5vdCBmaW5kIHNlcnZpY2UgXCIgKyBzZXJ2aWNlTmFtZSArIFwiIG5hbWVzcGFjZSBcIiArIG5hbWVzcGFjZSArIFwiIGZvciByb3V0ZTogXCIgKyBtZXRhZGF0YS5uYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGFwcFZpZXdzID0gXy5zb3J0QnkocG9wdWxhdGVLZXlzKGFwcFZpZXdzKSwgKGFwcFZpZXcpID0+IGFwcFZpZXcuX2tleSk7XG5cbiAgICAgICAgQXJyYXlIZWxwZXJzLnN5bmModGhpcy5hcHBWaWV3cywgYXBwVmlld3MsICckbmFtZScpO1xuXG4gICAgICAgIGlmICh0aGlzLmFwcEluZm9zICYmIHRoaXMuYXBwVmlld3MpIHtcbiAgICAgICAgICB2YXIgZm9sZGVyTWFwID0ge307XG4gICAgICAgICAgdmFyIGZvbGRlcnMgPSBbXTtcbiAgICAgICAgICB2YXIgYXBwTWFwID0ge307XG4gICAgICAgICAgYW5ndWxhci5mb3JFYWNoKHRoaXMuYXBwSW5mb3MsIChhcHBJbmZvKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWFwcEluZm8uJGljb25VcmwgJiYgYXBwSW5mby5pY29uUGF0aCAmJiBhcHBJbmZvLmljb25QYXRoICE9PSBcIm51bGxcIikge1xuICAgICAgICAgICAgICBhcHBJbmZvLiRpY29uVXJsID0gZ2l0UGF0aFRvVXJsKGFwcEluZm8uaWNvblBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGFwcFBhdGggPSBhcHBJbmZvLmFwcFBhdGg7XG4gICAgICAgICAgICBpZiAoYXBwUGF0aCkge1xuICAgICAgICAgICAgICBhcHBNYXBbYXBwUGF0aF0gPSBhcHBJbmZvO1xuICAgICAgICAgICAgICB2YXIgaWR4ID0gYXBwUGF0aC5sYXN0SW5kZXhPZihcIi9cIik7XG4gICAgICAgICAgICAgIHZhciBmb2xkZXJQYXRoID0gXCJcIjtcbiAgICAgICAgICAgICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgZm9sZGVyUGF0aCA9IGFwcFBhdGguc3Vic3RyaW5nKDAsIGlkeCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZm9sZGVyUGF0aCA9IENvcmUudHJpbUxlYWRpbmcoZm9sZGVyUGF0aCwgXCIvXCIpO1xuICAgICAgICAgICAgICB2YXIgZm9sZGVyID0gZm9sZGVyTWFwW2ZvbGRlclBhdGhdO1xuICAgICAgICAgICAgICBpZiAoIWZvbGRlcikge1xuICAgICAgICAgICAgICAgIGZvbGRlciA9IHtcbiAgICAgICAgICAgICAgICAgIHBhdGg6IGZvbGRlclBhdGgsXG4gICAgICAgICAgICAgICAgICBleHBhbmRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIGFwcHM6IFtdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBmb2xkZXJzLnB1c2goZm9sZGVyKTtcbiAgICAgICAgICAgICAgICBmb2xkZXJNYXBbZm9sZGVyUGF0aF0gPSBmb2xkZXI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZm9sZGVyLmFwcHMucHVzaChhcHBJbmZvKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmFwcEZvbGRlcnMgPSBfLnNvcnRCeShmb2xkZXJzLCBcInBhdGhcIik7XG5cbiAgICAgICAgICB2YXIgYXBwcyA9IFtdO1xuICAgICAgICAgIHZhciBkZWZhdWx0SW5mbyA9IHtcbiAgICAgICAgICAgICRpY29uVXJsOiBkZWZhdWx0SWNvblVybFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBhbmd1bGFyLmZvckVhY2godGhpcy5hcHBWaWV3cywgKGFwcFZpZXc6YW55KSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB2YXIgYXBwUGF0aCA9IGFwcFZpZXcuYXBwUGF0aDtcblxuICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgVE9ET1xuICAgICAgICAgICAgICAgYXBwVmlldy4kc2VsZWN0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgS3ViZXJuZXRlcy5zZXRKc29uKCRzY29wZSwgYXBwVmlldy5pZCwgJHNjb3BlLm1vZGVsLmFwcHMpO1xuICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgICAgdmFyIGFwcEluZm86YW55ID0gYW5ndWxhci5jb3B5KGRlZmF1bHRJbmZvKTtcbiAgICAgICAgICAgICAgaWYgKGFwcFBhdGgpIHtcbiAgICAgICAgICAgICAgICBhcHBJbmZvID0gYXBwTWFwW2FwcFBhdGhdIHx8IGFwcEluZm87XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKCFhcHBWaWV3LiRpbmZvKSB7XG4gICAgICAgICAgICAgICAgYXBwVmlldy4kaW5mbyA9IGRlZmF1bHRJbmZvO1xuICAgICAgICAgICAgICAgIGFwcFZpZXcuJGluZm8gPSBhcHBJbmZvO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFwcFZpZXcuaWQgPSBhcHBQYXRoO1xuICAgICAgICAgICAgICBpZiAoIWFwcFZpZXcuJG5hbWUpIHtcbiAgICAgICAgICAgICAgICBhcHBWaWV3LiRuYW1lID0gYXBwSW5mby5uYW1lIHx8IGFwcFZpZXcuJG5hbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKCFhcHBWaWV3LiRpY29uVXJsKSB7XG4gICAgICAgICAgICAgICAgYXBwVmlldy4kaWNvblVybCA9IGFwcEluZm8uJGljb25Vcmw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYXBwcy5wdXNoKGFwcFZpZXcpO1xuICAgICAgICAgICAgICBhcHBWaWV3LiRwb2RDb3VudGVycyA9IGNyZWF0ZUFwcFZpZXdQb2RDb3VudGVycyhhcHBWaWV3KTtcbiAgICAgICAgICAgICAgYXBwVmlldy4kcG9kQ291bnQgPSAoYXBwVmlldy5wb2RzIHx8IFtdKS5sZW5ndGg7XG4gICAgICAgICAgICAgIGFwcFZpZXcuJHJlcGxpY2F0aW9uQ29udHJvbGxlcnNUZXh0ID0gKGFwcFZpZXcucmVwbGljYXRpb25Db250cm9sbGVycyB8fCBbXSkubWFwKChpKSA9PiBpW1wiX2tleVwiXSkuam9pbihcIiBcIik7XG4gICAgICAgICAgICAgIGFwcFZpZXcuJHNlcnZpY2VzVGV4dD0gKGFwcFZpZXcuc2VydmljZXMgfHwgW10pLm1hcCgoaSkgPT4gaVtcIl9rZXlcIl0pLmpvaW4oXCIgXCIpO1xuICAgICAgICAgICAgICBhcHBWaWV3LiRzZXJ2aWNlVmlld3MgPSBjcmVhdGVBcHBWaWV3U2VydmljZVZpZXdzKGFwcFZpZXcpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byB1cGRhdGUgYXBwVmlld3M6IFwiICsgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgLy90aGlzLmFwcHMgPSBhcHBzO1xuICAgICAgICAgIHRoaXMuYXBwcyA9IHRoaXMuYXBwVmlld3M7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nLndhcm4oXCJDYXVnaHQgZXJyb3I6IFwiICsgZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGRpc2NvdmVyUG9kQ29ubmVjdGlvbnMoZW50aXR5KSB7XG4gICAgICB2YXIgaW5mbyA9IENvcmUucGF0aEdldChlbnRpdHksIFtcInN0YXR1c1wiLCBcImluZm9cIl0pO1xuICAgICAgdmFyIGhvc3RQb3J0ID0gbnVsbDtcbiAgICAgIHZhciBjdXJyZW50U3RhdGUgPSBlbnRpdHkuc3RhdHVzIHx8IHt9O1xuICAgICAgdmFyIGRlc2lyZWRTdGF0ZSA9IGVudGl0eS5zcGVjIHx8IHt9O1xuICAgICAgdmFyIHBvZElkID0gZ2V0TmFtZShlbnRpdHkpO1xuICAgICAgdmFyIGhvc3QgPSBjdXJyZW50U3RhdGVbXCJob3N0SVBcIl07XG4gICAgICB2YXIgcG9kSVAgPSBjdXJyZW50U3RhdGVbXCJwb2RJUFwiXTtcbiAgICAgIHZhciBoYXNEb2NrZXIgPSBmYWxzZTtcbiAgICAgIHZhciBmb3VuZENvbnRhaW5lclBvcnQgPSBudWxsO1xuICAgICAgaWYgKGRlc2lyZWRTdGF0ZSkge1xuICAgICAgICB2YXIgY29udGFpbmVycyA9IGRlc2lyZWRTdGF0ZS5jb250YWluZXJzO1xuICAgICAgICBhbmd1bGFyLmZvckVhY2goY29udGFpbmVycywgKGNvbnRhaW5lcikgPT4ge1xuICAgICAgICAgIGlmICghaG9zdFBvcnQpIHtcbiAgICAgICAgICAgIHZhciBwb3J0cyA9IGNvbnRhaW5lci5wb3J0cztcbiAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChwb3J0cywgKHBvcnQpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFob3N0UG9ydCkge1xuICAgICAgICAgICAgICAgIHZhciBjb250YWluZXJQb3J0ID0gcG9ydC5jb250YWluZXJQb3J0O1xuICAgICAgICAgICAgICAgIHZhciBwb3J0TmFtZSA9IHBvcnQubmFtZTtcbiAgICAgICAgICAgICAgICB2YXIgY29udGFpbmVySG9zdFBvcnQgPSBwb3J0Lmhvc3RQb3J0O1xuICAgICAgICAgICAgICAgIGlmIChjb250YWluZXJQb3J0ID09PSA4Nzc4IHx8IFwiam9sb2tpYVwiID09PSBwb3J0TmFtZSkge1xuICAgICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lclBvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvZElQKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZm91bmRDb250YWluZXJQb3J0ID0gY29udGFpbmVyUG9ydDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGFpbmVySG9zdFBvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBob3N0UG9ydCA9IGNvbnRhaW5lckhvc3RQb3J0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGZvdW5kQ29udGFpbmVyUG9ydCAmJiBwb2RJZCAmJiBpc1J1bm5pbmcoY3VycmVudFN0YXRlKSkge1xuICAgICAgICBpZiAoIUt1YmVybmV0ZXMuaXNPcGVuU2hpZnQpIHtcbiAgICAgICAgICAvLyBUT0RPIHRlbXAgd29ya2Fyb3VuZCBmb3IgazhzIG9uIEdLRSBodHRwczovL2dpdGh1Yi5jb20va3ViZXJuZXRlcy9rdWJlcm5ldGVzL2lzc3Vlcy8xNzE3MlxuICAgICAgICAgIGVudGl0eS4kam9sb2tpYVVybCA9IFVybEhlbHBlcnMuam9pbihLdWJlcm5ldGVzLm1hc3RlckFwaVVybCgpLFxuICAgICAgICAgICAgICBcImFwaVwiLFxuICAgICAgICAgICAgICBLdWJlcm5ldGVzLmRlZmF1bHRBcGlWZXJzaW9uLFxuICAgICAgICAgICAgICBcInByb3h5XCIsXG4gICAgICAgICAgICAgIFwibmFtZXNwYWNlc1wiLFxuICAgICAgICAgICAgICBlbnRpdHkubWV0YWRhdGEubmFtZXNwYWNlICxcbiAgICAgICAgICAgICAgXCJwb2RzXCIsXG4gICAgICAgICAgICAgIC8vXCJodHRwczpcIiArIHBvZElkICsgXCI6XCIgKyBmb3VuZENvbnRhaW5lclBvcnQsXG4gICAgICAgICAgICAgIHBvZElkICsgXCI6XCIgKyBmb3VuZENvbnRhaW5lclBvcnQsXG4gICAgICAgICAgICAgIFwiam9sb2tpYS9cIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW50aXR5LiRqb2xva2lhVXJsID0gVXJsSGVscGVycy5qb2luKEt1YmVybmV0ZXMubWFzdGVyQXBpVXJsKCksXG4gICAgICAgICAgICAgIFwiYXBpXCIsXG4gICAgICAgICAgICAgIEt1YmVybmV0ZXMuZGVmYXVsdEFwaVZlcnNpb24sXG4gICAgICAgICAgICAgIFwibmFtZXNwYWNlc1wiLFxuICAgICAgICAgICAgICBlbnRpdHkubWV0YWRhdGEubmFtZXNwYWNlICxcbiAgICAgICAgICAgICAgXCJwb2RzXCIsXG4gICAgICAgICAgICAgIFwiaHR0cHM6XCIgKyBwb2RJZCArIFwiOlwiICsgZm91bmRDb250YWluZXJQb3J0LFxuICAgICAgICAgICAgICBcInByb3h5L2pvbG9raWEvXCIpO1xuXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRUZW1wbGF0ZVNlcnZpY2UobW9kZWwpIHtcbiAgICB2YXIga2V5ID0gY3JlYXRlS2V5KCdkZWZhdWx0JywgJ3RlbXBsYXRlcycsICdzZXJ2aWNlJyk7XG4gICAgdmFyIGFuc3dlciA9IG1vZGVsLnNlcnZpY2VzQnlLZXlba2V5XTtcbiAgICBsb2cuZGVidWcoXCJmb3VuZCB0ZW1wbGF0ZSBzZXJ2aWNlOiBcIiwgYW5zd2VyKTtcbiAgICByZXR1cm4gYW5zd2VyO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBtb2RlbCBzZXJ2aWNlIHdoaWNoIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUgcG9kcywgcmVwbGljYXRpb24gY29udHJvbGxlcnMgYW5kIHNlcnZpY2VzIGFsb25nXG4gICAqIHdpdGggdGhlaXIgYXNzb2NpYXRpb25zIGFuZCBzdGF0dXNcbiAgICovXG4gIF9tb2R1bGUuZmFjdG9yeSgnS3ViZXJuZXRlc01vZGVsJywgWyckcm9vdFNjb3BlJywgJyRodHRwJywgJ0t1YmVybmV0ZXNBcGlVUkwnLCAnS3ViZXJuZXRlc1N0YXRlJywgJ1dhdGNoZXJTZXJ2aWNlJywgJyRsb2NhdGlvbicsICckcmVzb3VyY2UnLCAoJHJvb3RTY29wZSwgJGh0dHAsIEFwcExpYnJhcnlVUkwsIEt1YmVybmV0ZXNTdGF0ZSwgd2F0Y2hlcjpXYXRjaGVyU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyZXNvdXJjZTpuZy5yZXNvdXJjZS5JUmVzb3VyY2VTZXJ2aWNlKSA9PiB7XG5cbiAgICB2YXIgJHNjb3BlID0gbmV3IEt1YmVybmV0ZXNNb2RlbFNlcnZpY2UoKTtcbiAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcblxuICAgIC8vIGNyZWF0ZSBhbGwgb2Ygb3VyIHJlc291cmNlIGNsYXNzZXNcbiAgICB2YXIgdHlwZU5hbWVzID0gd2F0Y2hlci5nZXRUeXBlcygpO1xuICAgIF8uZm9yRWFjaCh0eXBlTmFtZXMsICh0eXBlOnN0cmluZykgPT4ge1xuICAgICAgdmFyIHVybFRlbXBsYXRlID0gdXJpVGVtcGxhdGVGb3JLdWJlcm5ldGVzS2luZCh0eXBlKTtcbiAgICAgICRzY29wZVt0eXBlICsgJ1Jlc291cmNlJ10gPSBjcmVhdGVSZXNvdXJjZSh0eXBlLCB1cmxUZW1wbGF0ZSwgJHJlc291cmNlLCAkc2NvcGUpO1xuICAgIH0pO1xuXG4gICAgaWYgKCFpc09wZW5TaGlmdCkge1xuICAgICAgLy8gcmVnaXN0ZXIgY3VzdG9tIFVSTCBmYWN0b3JpZXMgZm9yIHRlbXBsYXRlcy9wcm9qZWN0c1xuICAgICAgd2F0Y2hlci5yZWdpc3RlckN1c3RvbVVybEZ1bmN0aW9uKEt1YmVybmV0ZXNBUEkuV2F0Y2hUeXBlcy5CVUlMRF9DT05GSUdTLCAob3B0aW9uczpLdWJlcm5ldGVzQVBJLks4U09wdGlvbnMpID0+IHtcbiAgICAgICAgdmFyIHRlbXBsYXRlU2VydmljZSA9IGdldFRlbXBsYXRlU2VydmljZSgkc2NvcGUpO1xuICAgICAgICBpZiAodGVtcGxhdGVTZXJ2aWNlKSB7XG4gICAgICAgICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbih0ZW1wbGF0ZVNlcnZpY2UucHJveHlVcmwsICcvb2FwaS92MS9uYW1lc3BhY2VzL2RlZmF1bHQvYnVpbGRjb25maWdzLycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSk7XG4gICAgICAvLyByZWdpc3RlciBjdXN0b20gVVJMIGZhY3RvcmllcyBmb3IgdGVtcGxhdGVzL3Byb2plY3RzXG4gICAgICB3YXRjaGVyLnJlZ2lzdGVyQ3VzdG9tVXJsRnVuY3Rpb24oS3ViZXJuZXRlc0FQSS5XYXRjaFR5cGVzLlRFTVBMQVRFUywgKG9wdGlvbnM6S3ViZXJuZXRlc0FQSS5LOFNPcHRpb25zKSA9PiB7XG4gICAgICAgIHZhciB0ZW1wbGF0ZVNlcnZpY2UgPSBnZXRUZW1wbGF0ZVNlcnZpY2UoJHNjb3BlKTtcbiAgICAgICAgaWYgKHRlbXBsYXRlU2VydmljZSkge1xuICAgICAgICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4odGVtcGxhdGVTZXJ2aWNlLnByb3h5VXJsLCAnL29hcGkvdjEvbmFtZXNwYWNlcy9kZWZhdWx0L3RlbXBsYXRlcy8nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHJlZ2lzdGVyIGZvciBhbGwgdXBkYXRlcyBvbiBvYmplY3RzXG5cdFx0d2F0Y2hlci5yZWdpc3Rlckxpc3RlbmVyKChvYmplY3RzOk9iamVjdE1hcCkgPT4ge1xuXHRcdFx0dmFyIHR5cGVzID0gd2F0Y2hlci5nZXRUeXBlcygpO1xuXHRcdFx0Xy5mb3JFYWNoKHR5cGVzLCAodHlwZTpzdHJpbmcpID0+IHtcblx0XHRcdFx0c3dpdGNoICh0eXBlKSB7XG5cdFx0XHRcdFx0Y2FzZSBXYXRjaFR5cGVzLlNFUlZJQ0VTOlxuXHRcdFx0XHRcdFx0dmFyIGl0ZW1zID0gcG9wdWxhdGVLZXlzKG9iamVjdHNbdHlwZV0pO1xuXHRcdFx0XHRcdFx0YW5ndWxhci5mb3JFYWNoKGl0ZW1zLCAoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICBpdGVtLnByb3h5VXJsID0ga3ViZXJuZXRlc1Byb3h5VXJsRm9yU2VydmljZShrdWJlcm5ldGVzQXBpVXJsKCksIGl0ZW0pO1xuICAgICAgICAgICAgfSk7XG5cdFx0XHRcdFx0XHQkc2NvcGVbdHlwZV0gPSBpdGVtcztcblx0XHRcdFx0XHRcdGJyZWFrO1xuICAgICAgICAgIGNhc2UgV2F0Y2hUeXBlcy5URU1QTEFURVM6XG4gICAgICAgICAgY2FzZSBXYXRjaFR5cGVzLlJPVVRFUzpcbiAgICAgICAgICBjYXNlIFdhdGNoVHlwZXMuQlVJTERTOlxuICAgICAgICAgIGNhc2UgV2F0Y2hUeXBlcy5CVUlMRF9DT05GSUdTOlxuICAgICAgICAgIGNhc2UgV2F0Y2hUeXBlcy5JTUFHRV9TVFJFQU1TOlxuICAgICAgICAgICAgLy8gZG9uJ3QgcHV0IGEgYnJlYWsgaGVyZSA6LSlcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0JHNjb3BlW3R5cGVdID0gcG9wdWxhdGVLZXlzKG9iamVjdHNbdHlwZV0pO1xuXHRcdFx0XHR9XG4gICAgICAgIGxvZy5kZWJ1ZyhcIlR5cGU6IFwiLCB0eXBlLCBcIiBvYmplY3Q6IFwiLCAkc2NvcGVbdHlwZV0pO1xuXHRcdFx0fSk7XG5cdFx0XHQkc2NvcGUubWF5YmVJbml0KCk7XG4gICAgICAkcm9vdFNjb3BlLiRicm9hZGNhc3QoJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCAkc2NvcGUpO1xuICAgICAgQ29yZS4kYXBwbHkoJHJvb3RTY29wZSk7XG5cdFx0fSk7XG5cbiAgICAvLyBzZXQgdGhlIHNlbGVjdGVkIG5hbWVzcGFjZSBpZiBzZXQgaW4gdGhlIGxvY2F0aW9uIGJhclxuICAgIC8vIG90aGVyd2lzZSB1c2Ugd2hhdGV2ZXIgcHJldmlvdXNseSBzZWxlY3RlZCBuYW1lc3BhY2UgaXNcbiAgICAvLyBhdmFpbGFibGVcbiAgICB2YXIgc2VhcmNoID0gJGxvY2F0aW9uLnNlYXJjaCgpO1xuICAgIGlmICgnbmFtZXNwYWNlJyBpbiBzZWFyY2gpIHtcbiAgICAgIHdhdGNoZXIuc2V0TmFtZXNwYWNlKHNlYXJjaFsnbmFtZXNwYWNlJ10pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNlbGVjdFBvZHMocG9kcywgbmFtZXNwYWNlLCBsYWJlbHMpIHtcbiAgICAgIHJldHVybiBwb2RzLmZpbHRlcigocG9kKSA9PiB7XG4gICAgICAgIHJldHVybiBnZXROYW1lc3BhY2UocG9kKSA9PT0gbmFtZXNwYWNlICYmIHNlbGVjdG9yTWF0Y2hlcyhsYWJlbHMsIGdldExhYmVscyhwb2QpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gJHNjb3BlO1xuICB9XSk7XG5cbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSGVscGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNNb2RlbC50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIGV4cG9ydCB2YXIgSG9zdENvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiSG9zdENvbnRyb2xsZXJcIixcbiAgICBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXG4gICAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcblxuICAgICAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAgICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xuICAgICAgICAkc2NvcGUucmF3TW9kZWwgPSBudWxsO1xuXG4gICAgICAgICRzY29wZS5pdGVtQ29uZmlnID0ge1xuICAgICAgICAgIHByb3BlcnRpZXM6IHt9XG4gICAgICAgIH07XG5cbiAgICAgICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xuXG4gICAgICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdXBkYXRlRGF0YSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICAkc2NvcGUuJG9uKCckcm91dGVVcGRhdGUnLCAoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgdXBkYXRlRGF0YSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICAkc2NvcGUuZmxpcFJhdyA9ICgpID0+IHtcbiAgICAgICAgICAkc2NvcGUucmF3TW9kZSA9ICEkc2NvcGUucmF3TW9kZTtcbiAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHVwZGF0ZURhdGEoKTtcblxuICAgICAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xuICAgICAgICAgICRzY29wZS5pZCA9ICRyb3V0ZVBhcmFtc1tcImlkXCJdO1xuICAgICAgICAgICRzY29wZS5pdGVtID0gbnVsbDtcbiAgICAgICAgICBpZiAoJHNjb3BlLmlkKSB7XG4gICAgICAgICAgICB2YXIgdXJsID0gVXJsSGVscGVycy5qb2luKEt1YmVybmV0ZXNBcGlVUkwsIFwibm9kZXNcIiwgJHNjb3BlLmlkKTtcbiAgICAgICAgICAgICRodHRwLmdldCh1cmwpLlxuICAgICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAkc2NvcGUuaXRlbSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgkc2NvcGUuaXRlbSkge1xuICAgICAgICAgICAgICAgICAgJHNjb3BlLnJhd01vZGVsID0gdG9SYXdZYW1sKCRzY29wZS5pdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pLlxuICAgICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGxvYWQgXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJHNjb3BlLnJhd01vZGVsID0gbnVsbDtcbiAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XSk7XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG5tb2R1bGUgS3ViZXJuZXRlcyB7XG4gIGV4cG9ydCB2YXIgaG9zdFBvcnRzID1bXTtcblxuICAvKipcbiAgICogU29ydHMgdGhlIHRoZSBpcCBmaWVsZFxuICAgKlxuICAgKiBAcGFyYW0gaXAgdGhlIGlwIHN1Y2ggYXMgJzEwLjEuMi4xMydcbiAgICogQHJldHVybnMge2FueX1cbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiBzb3J0QnlQb2RJcChpcCkgOiBhbnkge1xuICAgIC8vIGkgZ3Vlc3MgdGhlcmUgaXMgbWF5YmUgbmljZXIgd2F5cyBvZiBzb3J0IHRoaXMgd2l0aG91dCBwYXJzaW5nIGFuZCBzbGljaW5nXG4gICAgdmFyIHJlZ2V4ID0gLyhcXGR7MSwzfSlcXC4oXFxkezEsM30pXFwuKFxcZHsxLDN9KVxcLihcXGR7MSwzfSkvO1xuICAgIHZhciBncm91cHMgPSByZWdleC5leGVjKGlwKTtcbiAgICBpZiAoYW5ndWxhci5pc0RlZmluZWQoZ3JvdXBzKSkge1xuICAgICAgdmFyIGcxID0gKFwiMDBcIiArIGdyb3Vwc1sxXSkuc2xpY2UoLTMpO1xuICAgICAgdmFyIGcyID0gKFwiMDBcIiArIGdyb3Vwc1syXSkuc2xpY2UoLTMpO1xuICAgICAgdmFyIGczID0gKFwiMDBcIiArIGdyb3Vwc1szXSkuc2xpY2UoLTMpO1xuICAgICAgdmFyIGc0ID0gKFwiMDBcIiArIGdyb3Vwc1s0XSkuc2xpY2UoLTMpO1xuICAgICAgdmFyIGFuc3dlciA9IGcxICsgZzIgKyBnMyArIGc0O1xuICAgICAgcmV0dXJuIGFuc3dlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIHJhbWRvbVBvcnQoKTogbnVtYmVye1xuICAgICB2YXIgaG9zdFBvcnQ9TWF0aC5mbG9vcigzMDAwMCtNYXRoLnJhbmRvbSgpKig2NTUzNS0zMDAwMCkpO1xuICAgICB3aGlsZShob3N0UG9ydHMuaW5kZXhPZihob3N0UG9ydCkgPT09IDApe1xuICAgICAgICBob3N0UG9ydCA9IE1hdGguZmxvb3IoMzAwMDArTWF0aC5yYW5kb20oKSooNjU1MzUtMzAwMDApKTtcbiAgICAgfVxuICAgICBob3N0UG9ydHMucHVzaChob3N0UG9ydCk7XG4gICAgIHJldHVybiBob3N0UG9ydFxuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmRvbVN0cmluZyhsZW4gOiBudW1iZXIpIDogc3RyaW5ne1xuICAgICAgbGVuID0gbGVuIHx8IDMyO1xuICAgICAgdmFyICRjaGFycyA9ICdhYmNkZWZoaWprbW5wcnN0d3h5eic7IC8vIOm7mOiupOWOu+aOieS6huWuueaYk+a3t+a3hueahOWtl+espm9PTGwsOWdxLFZ2LFV1LEkxXG4gICAgICB2YXIgbWF4UG9zID0gJGNoYXJzLmxlbmd0aDtcbiAgICAgIHZhciBwd2QgPSAnJztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBwd2QgKz0gJGNoYXJzLmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBtYXhQb3MpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwd2Q7XG4gIH1cblxuICBleHBvcnQgY2xhc3MgcmVzb3VyY2VSQ1RlbXBsYXRle1xuXG4gICAgIHB1YmxpYyBpbWFnZT1cInMxOmxhdGVzdFwiO1xuICAgICBwdWJsaWMgbmFtZXMgPSBbXCJhZG1pblwiLFwiY2ZndG9vbGxvZ3NcIixcImNoZWNrcG9pbnRzXCIsXCJkaWFnXCIsXCJmbGFzaC1yZWNvdmVyeS1hcmVhXCIsXCJvcmFkYXRhXCJdO1xuXG4gICAgIHB1YmxpYyBjcmVhdGVSQyhPYmope1xuICAgICAgICB2YXIgbGFiZWxzID0ge1xuICAgICAgICAgICBcInN0eWxlXCI6IFwib3JhY2xlXCIsXG4gICAgICAgICAgIFwic3RhdHVzXCI6IFwiMFwiLFxuICAgICAgICAgICBcImlzRXh0cmFjdFwiOiBcIjBcIixcbiAgICAgICAgICAgXCJpc1RhcmdldFwiOiBPYmouaXNUYXJnZXRcbiAgICAgICAgfTtcbiAgICAgICAgZm9yKHZhciBpdGVtIGluIE9iai5sYWJlbHMpXG4gICAgICAgICAgIGxhYmVsc1tpdGVtXSA9IE9iai5sYWJlbHNbaXRlbV07XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgXCJhcGlWZXJzaW9uXCIgOiAgS3ViZXJuZXRlcy5kZWZhdWx0QXBpVmVyc2lvbixcbiAgICAgICAgICAgXCJraW5kXCIgOiBcIlJlcGxpY2F0aW9uQ29udHJvbGxlclwiLFxuICAgICAgICAgICBcIm1ldGFkYXRhXCIgOiB7XG4gICAgICAgICAgICAgIFwibmFtZVwiIDogT2JqLm5hbWUsXG4gICAgICAgICAgICAgIFwibGFiZWxzXCIgOiBsYWJlbHNcbiAgICAgICAgICAgfSxcbiAgICAgICAgICAgXCJzcGVjXCIgOiB7XG4gICAgICAgICAgICAgIHJlcGxpY2FzIDogT2JqLnJlcGxpY2FzIHx8IDEsXG4gICAgICAgICAgICAgIFwidGVtcGxhdGVcIiA6IHRoaXMuY3JlYXRlVGVtcGxhdGUoT2JqKVxuICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgfVxuXG4gICAgIHB1YmxpYyBjcmVhdGVWb2x1bWVNb3VudHMoKXtcbiAgICAgICAgdmFyIHZvbHVtZU1vdW50cyA9IFtdO1xuICAgICAgICBmb3IodmFyIGl0ZW0gaW4gdGhpcy5uYW1lcyl7XG4gICAgICAgICAgIGlmKHRoaXMubmFtZXNbaXRlbV0gPT09ICdmbGFzaC1yZWNvdmVyeS1hcmVhJylcbiAgICAgICAgICAgICAgdm9sdW1lTW91bnRzLnB1c2goe1xuICAgICAgICAgICAgICAgICBcIm5hbWVcIiA6IHRoaXMubmFtZXNbaXRlbV0sXG4gICAgICAgICAgICAgICAgIFwibW91bnRQYXRoXCIgOiBcIi9vcHQvb3JhY2xlL2FwcC9mbGFzaF9yZWNvdmVyeV9hcmVhXCJcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgdm9sdW1lTW91bnRzLnB1c2goe1xuICAgICAgICAgICAgICAgICBcIm5hbWVcIiA6IHRoaXMubmFtZXNbaXRlbV0sXG4gICAgICAgICAgICAgICAgIFwibW91bnRQYXRoXCIgOiBcIi9vcHQvb3JhY2xlL2FwcC9cIiArIHRoaXMubmFtZXNbaXRlbV1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZvbHVtZU1vdW50cztcbiAgICAgfVxuXG4gICAgIHB1YmxpYyBjcmVhdGVWb2x1bWVzKHJvb3RQYXRoIDpzdHJpbmcpe1xuICAgICAgICB2YXIgdm9sdW1lcyA9IFtdO1xuICAgICAgICBmb3IodmFyIGl0ZW0gaW4gdGhpcy5uYW1lcyl7XG4gICAgICAgICAgICBpZih0aGlzLm5hbWVzW2l0ZW1dID09PSAnZmxhc2gtcmVjb3ZlcnktYXJlYScpXG4gICAgICAgICAgICAgICB2b2x1bWVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgXCJuYW1lXCIgOiB0aGlzLm5hbWVzW2l0ZW1dLFxuICAgICAgICAgICAgICAgICAgXCJob3N0UGF0aFwiIDp7XG4gICAgICAgICAgICAgICAgICAgICAgXCJwYXRoXCIgOiByb290UGF0aCArIFwiZmxhc2hfcmVjb3ZlcnlfYXJlYVwiXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgIHZvbHVtZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICBcIm5hbWVcIiA6IHRoaXMubmFtZXNbaXRlbV0sXG4gICAgICAgICAgICAgICAgICBcImhvc3RQYXRoXCIgOntcbiAgICAgICAgICAgICAgICAgICAgICBcInBhdGhcIiA6IHJvb3RQYXRoICsgdGhpcy5uYW1lc1tpdGVtXVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZvbHVtZXM7XG4gICAgIH1cblxuICAgICBwdWJsaWMgY3JlYXRlQ29udGFpbmVycyhPYmope1xuICAgICAgICB2YXIgY29udGFpbmVycyA9IFtdO1xuICAgICAgICBjb250YWluZXJzLnB1c2goXG4gICAgICAgIHtcbiAgICAgICAgICAgXCJuYW1lXCIgOiBcIm9yYWNsZVwiLFxuICAgICAgICAgICBcImltYWdlXCI6IHRoaXMuaW1hZ2UsXG4gICAgICAgICAgIFwiaW1hZ2VQdWxsUG9saWN5XCI6IFwiSWZOb3RQcmVzZW50XCIsXG4gICAgICAgICAgIFwiY29tbWFuZFwiOltcIi9hc3NldHMvZW50cnlwb2ludC5zaFwiXSxcbiAgICAgICAgICAgXCJwb3J0c1wiOiBbXG4gICAgICAgICAgIHtcbiAgICAgICAgICAgICBcImNvbnRhaW5lclBvcnRcIjogMTUyMSxcbiAgICAgICAgICAgICBcImhvc3RQb3J0XCI6IE9iai5wb3J0IHx8IHJhbWRvbVBvcnQoKVxuICAgICAgICAgICB9XSxcbiAgICAgICAgICAgXCJ2b2x1bWVNb3VudHNcIiA6IHRoaXMuY3JlYXRlVm9sdW1lTW91bnRzKClcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjb250YWluZXJzXG4gICAgIH1cblxuICAgICBwdWJsaWMgY3JlYXRlVGVtcGxhdGUoT2JqKXtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFwibWV0YWRhdGFcIjpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgIC8vXCJuYW1lXCI6IE9iai5uYW1lLFxuICAgICAgICAgICAgICAgXCJsYWJlbHNcIjogT2JqLmxhYmVsc1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwic3BlY1wiIDoge1xuICAgICAgICAgICAgICAgIFwidGVybWluYXRpb25HcmFjZVBlcmlvZFNlY29uZHNcIiA6IDAsXG4gICAgICAgICAgICAgICAgXCJjb250YWluZXJzXCIgOiAgdGhpcy5jcmVhdGVDb250YWluZXJzKE9iaiksXG4gICAgICAgICAgICAgICAgXCJ2b2x1bWVzXCIgOiAgdGhpcy5jcmVhdGVWb2x1bWVzKE9iai5wYXRoKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgIH1cbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBsYWJlbFRvQ2hpbmVzZShsYWJlbHMpe1xuICAgICB2YXIgYW5zd2VyID0ge307XG4gICAgIGFuZ3VsYXIuZm9yRWFjaChsYWJlbHMsKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgYW5zd2VyW2tleV0gPSBsYWJlbENoYW5nZVRvQ2hpbmVzKHZhbHVlLCBrZXkpO1xuICAgICB9KTtcbiAgICAgcmV0dXJuIGFuc3dlclxuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uICBmaW5kU2FtZU5hbWVSZXBsaWNhdGlvbkNvbnRyb2xsZXJzKHJlcGxpY2F0aW9uQ29udHJvbGxlcnMsIG5hbWUpe1xuICAgICAgdmFyIG5hbWVzID0gW107XG4gICAgICByZXBsaWNhdGlvbkNvbnRyb2xsZXJzLmZvckVhY2goKHJjKSA9PiB7XG4gICAgICAgICAgdmFyIHJjTmFtZSA9IGdldE5hbWUocmMpO1xuICAgICAgICAgIGlmKHJjTmFtZS5pbmRleG9mKG5hbWUpICE9PSAtMSlcbiAgICAgICAgICAgICAgbmFtZXMucHVzaChyY05hbWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmKG5hbWVzLmxlbmd0aCA9PT0gMCl7XG4gICAgICAgICAgcmV0dXJuIG5hbWUgKyBcIl8xXCI7XG4gICAgICB9ZWxzZXtcbiAgICAgICAgICB2YXIgbWF4ID0gMDtcbiAgICAgICAgICBuYW1lcy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgIHZhciBhbnN3ZXIgPSB2YWx1ZS5zcGxpdChcIl9cIik7XG4gICAgICAgICAgICAgdmFyIGtleSA9IHBhcnNlSW50KGFuc3dlclsxXSk7XG4gICAgICAgICAgICAgaWYobWF4IDwga2V5KVxuICAgICAgICAgICAgICAgIG1heCA9IGtleTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gbmFtZSArIChtYXgrMSk7XG4gICAgICB9XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gaXNGaWx0ZXJSQyhyYyl7XG4gICAgICB2YXIgYW5zd2VyID0gZmFsc2U7XG4gICAgICBhbmd1bGFyLmZvckVhY2goQ29yZS5wYXRoR2V0KHJjLCBbXCJtZXRhZGF0YVwiLCBcImxhYmVsc1wiXSksKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICBpZihrZXkgPT09ICdpc1RhcmdldCcgJiYgdmFsdWUgPT09ICd0cnVlJyl7XG4gICAgICAgICAgICAgYW5zd2VyID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhbnN3ZXI7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gaXNJbmNsdWRlKHJjcywgcmMpe1xuICAgICBmb3IodmFyIGkgaW4gcmNzKXtcbiAgICAgICAgIGlmKGdldE5hbWUocmNzW2ldKSA9PT0gZ2V0TmFtZShyYykpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgfVxuICAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gbGFiZWxDaGFuZ2VUb0NoaW5lcyh2YWx1ZTpzdHJpbmcsIGtleTpzdHJpbmcpe1xuICBcdHZhciB0cnVlVmFsdWUgPSAnJztcbiAgXHRzd2l0Y2goa2V5KXtcbiAgXHRcdGNhc2UgJ3R5cGUnOlxuICBcdFx0ICAgaWYodmFsdWUgPT09ICcwMScpXG4gIFx0XHQgICBcdCAgdHJ1ZVZhbHVlID0gJ+i0ouaUvyc7XG4gIFx0XHQgICBlbHNlIGlmKHZhbHVlID09PSAnMDInKVxuICBcdFx0ICAgICAgdHJ1ZVZhbHVlID0gJ+ekvuS/nSc7XG4gIFx0XHQgICBlbHNlXG4gIFx0XHQgICBcdCAgdHJ1ZVZhbHVlID0gdmFsdWU7XG4gIFx0XHQgICBicmVhaztcbiAgXHRcdGNhc2UgJ2JhdGNoJzpcbiAgXHQgICAgICAgaWYodmFsdWUgPT09ICdBJylcbiAgXHQgICAgICAgXHQgIHRydWVWYWx1ZSA9ICfmibnmrKFBJztcbiAgXHQgICAgICAgZWxzZSBpZih2YWx1ZSA9PT0gJ0InKVxuICBcdCAgICAgICBcdCAgdHJ1ZVZhbHVlID0gJ+aJueasoUInO1xuICBcdCAgICAgICBlbHNlXG4gIFx0ICAgICAgIFx0ICB0cnVlVmFsdWUgPSB2YWx1ZTtcblxuICBcdFx0ICAgYnJlYWs7XG4gIFx0XHRjYXNlICdyZWdpb24nOlxuICBcdFx0ICAgdHJ1ZVZhbHVlID0gS3ViZXJuZXRlcy5nZXRDb3VudHlCeUNvZGUodmFsdWUpO1xuICBcdFx0ICAgYnJlYWs7XG4gIFx0XHRjYXNlICdzeXN0ZW0nOlxuICBcdFx0ICAgdHJ1ZVZhbHVlID0gS3ViZXJuZXRlcy5nZXRTeXN0ZW1OYW1lQnlJZCh2YWx1ZSk7XG4gIFx0XHQgICBicmVhaztcbiAgXHRcdGNhc2UgJ3ZlcnNpb24nOlxuICBcdFx0ICAgdmFyIHJlZz0gbmV3IFJlZ0V4cCgnXlswLTldJCcpLmV4ZWModmFsdWUpO1xuICBcdFx0ICAgaWYocmVnKVxuICBcdFx0ICAgICAgIHRydWVWYWx1ZSA9ICfniYjmnKwnICsgcmVnWzBdO1xuICBcdFx0ICAgZWxzZVxuICBcdFx0ICAgXHQgICB0cnVlVmFsdWUgPSB2YWx1ZTtcbiAgXHQgICAgICAgYnJlYWs7XG4gIFx0ICAgIGNhc2UgJ2lzVGFyZ2V0JzpcbiAgXHQgICAgICAgaWYodmFsdWUgPT09ICd0cnVlJylcbiAgXHQgICAgICAgXHQgICB0cnVlVmFsdWUgPSAn5rGH5oC75pWw5o2u5bqTJztcbiAgXHQgICAgICAgZWxzZVxuICBcdCAgICAgICAgICAgdHJ1ZVZhbHVlID0gdmFsdWU7XG4gIFx0ICAgICAgIGJyZWFrO1xuICBcdCAgICBkZWZhdWx0OlxuICBcdCAgICAgICB0cnVlVmFsdWUgPSB2YWx1ZTtcbiAgXHR9XG4gIFx0cmV0dXJuIHRydWVWYWx1ZTtcbiAgfVxufSIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNNb2RlbC50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJ1dGlsSGVscGVycy50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIGV4cG9ydCB2YXIgSG9zdHNDb250cm9sbGVyID0gY29udHJvbGxlcihcIkhvc3RzQ29udHJvbGxlclwiLCBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzUG9kc1wiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIlNlcnZpY2VSZWdpc3RyeVwiLCBcIiRkaWFsb2dcIiwgXCIkd2luZG93XCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkbG9jYXRpb25cIiwgXCJsb2NhbFN0b3JhZ2VcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLFxuICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDogS3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzUG9kczpuZy5JUHJvbWlzZTxuZy5yZXNvdXJjZS5JUmVzb3VyY2VDbGFzczxhbnk+PiwgS3ViZXJuZXRlc1N0YXRlLCBTZXJ2aWNlUmVnaXN0cnksICRkaWFsb2csICR3aW5kb3csICR0ZW1wbGF0ZUNhY2hlLCAkcm91dGVQYXJhbXMsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCBsb2NhbFN0b3JhZ2UsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xuXG4gICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XG4gICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xuICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgIH0pO1xuXG4gICAgJHNjb3BlLnRhYmxlQ29uZmlnID0ge1xuICAgICAgZGF0YTogJ21vZGVsLmhvc3RzJyxcbiAgICAgIHNob3dTZWxlY3Rpb25DaGVja2JveDogZmFsc2UsXG4gICAgICBlbmFibGVSb3dDbGlja1NlbGVjdGlvbjogZmFsc2UsXG4gICAgICBtdWx0aVNlbGVjdDogZmFsc2UsXG4gICAgICBzZWxlY3RlZEl0ZW1zOiBbXSxcbiAgICAgIGZpbHRlck9wdGlvbnM6IHtcbiAgICAgICAgZmlsdGVyVGV4dDogJGxvY2F0aW9uLnNlYXJjaCgpW1wicVwiXSB8fCAnJ1xuICAgICAgfSxcbiAgICAgIGNvbHVtbkRlZnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpZWxkOiAnaWQnLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTmFtZScsXG4gICAgICAgICAgZGVmYXVsdFNvcnQ6IHRydWUsXG4gICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJpZFRlbXBsYXRlLmh0bWxcIilcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGZpZWxkOiAnaG9zdElQJyxcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ0lQJyxcbiAgICAgICAgICBjdXN0b21Tb3J0RmllbGQ6IChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgLy8gdXNlIGEgY3VzdG9tIHNvcnQgdG8gc29ydCBpcCBhZGRyZXNzXG4gICAgICAgICAgICByZXR1cm4gS3ViZXJuZXRlcy5zb3J0QnlQb2RJcChmaWVsZC5ob3N0SVApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgeyBmaWVsZDogJyRwb2RzTGluaycsXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdQb2RzJyxcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcInBvZENvdW50c0FuZExpbmtUZW1wbGF0ZS5odG1sXCIpLFxuICAgICAgICAgIGN1c3RvbVNvcnRGaWVsZDogKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAvLyBuZWVkIHRvIGNvbmNhdCBhbGwgdGhlIHBvZCBjb3VudGVyc1xuICAgICAgICAgICAgdmFyIHJlYWR5ID0gZmllbGQuJHBvZENvdW50ZXJzLnJlYWR5IHx8IDA7XG4gICAgICAgICAgICB2YXIgdmFsaWQgPSBmaWVsZC4kcG9kQ291bnRlcnMudmFsaWQgfHwgMDtcbiAgICAgICAgICAgIHZhciB3YWl0aW5nID0gZmllbGQuJHBvZENvdW50ZXJzLndhaXRpbmcgfHwgMDtcbiAgICAgICAgICAgIHZhciBlcnJvciA9IGZpZWxkLiRwb2RDb3VudGVycy5lcnJvciB8fCAwO1xuICAgICAgICAgICAgcmV0dXJuIHJlYWR5ICsgdmFsaWQgKyB3YWl0aW5nICsgZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcblxuICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcbiAgfV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblxuICBleHBvcnQgdmFyIEltYWdlUmVwb3NpdG9yaWVzQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJJbWFnZVJlcG9zaXRvcmllc0NvbnRyb2xsZXJcIiwgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiJGRpYWxvZ1wiLCBcIiR3aW5kb3dcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRsb2NhdGlvblwiLCBcImxvY2FsU3RvcmFnZVwiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXG4gICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCAkZGlhbG9nLCAkd2luZG93LCAkdGVtcGxhdGVDYWNoZSwgJHJvdXRlUGFyYW1zLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgbG9jYWxTdG9yYWdlLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcblxuICAgICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XG4gICAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XG4gICAgICAkc2NvcGUuJG9uKCdrdWJlcm5ldGVzTW9kZWxVcGRhdGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgfSk7XG5cbiAgICAgICRzY29wZS50YWJsZUNvbmZpZyA9IHtcbiAgICAgICAgZGF0YTogJ2ltYWdlUmVwb3NpdG9yaWVzJyxcbiAgICAgICAgc2hvd1NlbGVjdGlvbkNoZWNrYm94OiB0cnVlLFxuICAgICAgICBlbmFibGVSb3dDbGlja1NlbGVjdGlvbjogZmFsc2UsXG4gICAgICAgIG11bHRpU2VsZWN0OiB0cnVlLFxuICAgICAgICBzZWxlY3RlZEl0ZW1zOiBbXSxcbiAgICAgICAgZmlsdGVyT3B0aW9uczoge1xuICAgICAgICAgIGZpbHRlclRleHQ6ICRsb2NhdGlvbi5zZWFyY2goKVtcInFcIl0gfHwgJydcbiAgICAgICAgfSxcbiAgICAgICAgY29sdW1uRGVmczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpZWxkOiAnbWV0YWRhdGEubmFtZScsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ05hbWUnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ21ldGFkYXRhLm5hbWVzcGFjZScsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ05hbWVzcGFjZSdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpZWxkOiAnc3RhdHVzLmRvY2tlckltYWdlUmVwb3NpdG9yeScsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ0RvY2tlciBSZWdpc3RyeSdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpZWxkOiAndGFncycsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1RhZ3MnLFxuICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoJ2ltYWdlUmVnaXN0cnlMYWJlbFRlbXBsYXRlLmh0bWwnKVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfTtcblxuICAgICAgdmFyIGxhYmVsQ29sb3JzID0ge1xuICAgICAgICAncHJvZCc6ICdiYWNrZ3JvdW5kLWJsdWUnLFxuICAgICAgICAndmFsaWQnOiAnYmFja2dyb3VuZC1saWdodC1ncmVlbicsXG4gICAgICAgICd0ZXN0JzogJ2JhY2tncm91bmQtbGlnaHQtZ3JleSdcbiAgICAgIH07XG4gICAgICAkc2NvcGUubGFiZWxDbGFzcyA9IChsYWJlbFR5cGU6c3RyaW5nKSA9PiB7XG4gICAgICAgIGlmICghKGxhYmVsVHlwZSBpbiBsYWJlbENvbG9ycykpIHtcbiAgICAgICAgICByZXR1cm4gJ21vdXNlLXBvaW50ZXInO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgcmV0dXJuIGxhYmVsQ29sb3JzW2xhYmVsVHlwZV0gKyAnIG1vdXNlLXBvaW50ZXInO1xuICAgICAgfVxuXG4gICAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XG5cbiAgICAgICRzY29wZS5kZWxldGVQcm9tcHQgPSAoc2VsZWN0ZWQpID0+IHtcbiAgICAgICAgVUkubXVsdGlJdGVtQ29uZmlybUFjdGlvbkRpYWxvZyg8VUkuTXVsdGlJdGVtQ29uZmlybUFjdGlvbk9wdGlvbnM+e1xuICAgICAgICAgIGNvbGxlY3Rpb246IHNlbGVjdGVkLFxuICAgICAgICAgIGluZGV4OiAnJG5hbWUnLFxuICAgICAgICAgIG9uQ2xvc2U6IChyZXN1bHQ6Ym9vbGVhbikgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICBmdW5jdGlvbiBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgbmV4dCkge1xuICAgICAgICAgICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgICAgICAgICBkZWxldGVFbnRpdHkobmV4dCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdXBkYXRlRGF0YSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHRpdGxlOiAnRGVsZXRlIEltYWdlIFJlcG9zaXRvcnk/JyxcbiAgICAgICAgICBhY3Rpb246ICdUaGUgZm9sbG93aW5nIEltYWdlIFJlcG9zaXRvcmllcyB3aWxsIGJlIGRlbGV0ZWQ6JyxcbiAgICAgICAgICBva1RleHQ6ICdEZWxldGUnLFxuICAgICAgICAgIG9rQ2xhc3M6ICdidG4tZGFuZ2VyJyxcbiAgICAgICAgICBjdXN0b206IFwiVGhpcyBvcGVyYXRpb24gaXMgcGVybWFuZW50IG9uY2UgY29tcGxldGVkIVwiLFxuICAgICAgICAgIGN1c3RvbUNsYXNzOiBcImFsZXJ0IGFsZXJ0LXdhcm5pbmdcIlxuICAgICAgICB9KS5vcGVuKCk7XG4gICAgICB9O1xuXG4gICAgICBmdW5jdGlvbiBkZWxldGVFbnRpdHkoc2VsZWN0aW9uLCBuZXh0Q2FsbGJhY2spIHtcbiAgICAgICAgdmFyIG5hbWUgPSAoc2VsZWN0aW9uIHx8IHt9KS4kbmFtZTtcbiAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkFib3V0IHRvIGRlbGV0ZSBpbWFnZSByZXBvc2l0b3J5OiBcIiArIG5hbWUpO1xuICAgICAgICAgIHZhciB1cmwgPSBpbWFnZVJlcG9zaXRvcnlSZXN0VXJsKG5hbWUpO1xuICAgICAgICAgICRodHRwLmRlbGV0ZSh1cmwpLlxuICAgICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgICAgbmV4dENhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KS5cbiAgICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBkZWxldGUgaW1hZ2UgcmVwb3NpdG9yeSBvbiBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwid2FybmluZzogbm8gbmFtZSBmb3Igc2VsZWN0aW9uOiBcIiArIGFuZ3VsYXIudG9Kc29uKHNlbGVjdGlvbikpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHVwZGF0ZURhdGEoKSB7XG4gICAgICAgIHZhciB1cmwgPSBpbWFnZVJlcG9zaXRvcmllc1Jlc3RVUkwoKTtcbiAgICAgICAgJGh0dHAuZ2V0KHVybCkuXG4gICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJnb3QgZGF0YSBcIiArIGFuZ3VsYXIudG9Kc29uKGRhdGEsIHRydWUpKTtcbiAgICAgICAgICAgICAgJHNjb3BlLmltYWdlUmVwb3NpdG9yaWVzID0gZW5yaWNoSW1hZ2VSZXBvc2l0b3JpZXMoZGF0YS5pdGVtcyk7XG4gICAgICAgICAgICAgICRzY29wZS5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KS5cbiAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGxvYWQgXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZURhdGEoKTtcbiAgICB9XSk7XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG5tb2R1bGUgS3ViZXJuZXRlcyB7XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdFN1Yk5hdkJhcigkc2NvcGUsIHRhYk5hbWUsIG5ld1N1YlRhYkxhYmVsKSB7XG4gICAgdmFyIGZvdW5kVGFiID0gbnVsbDtcbiAgICBhbmd1bGFyLmZvckVhY2goJHNjb3BlLnN1YlRhYkNvbmZpZywgKHRhYikgPT4ge1xuICAgICAgaWYgKHRhYk5hbWUgPT09IHRhYi5sYWJlbCB8fCB0YWJOYW1lID09PSB0YWIuaWQpIHtcbiAgICAgICAgZm91bmRUYWIgPSB0YWI7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdmFyIGJyZWFkY3J1bWJDb25maWcgPSAkc2NvcGUuYnJlYWRjcnVtYkNvbmZpZztcbiAgICBpZiAoZm91bmRUYWIgJiYgYnJlYWRjcnVtYkNvbmZpZykge1xuICAgICAgYnJlYWRjcnVtYkNvbmZpZy5wdXNoKGZvdW5kVGFiKTtcbiAgICAgICRzY29wZS5zdWJUYWJDb25maWcgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogbmV3U3ViVGFiTGFiZWxcbiAgICAgICAgfVxuICAgICAgXTtcbiAgICB9XG5cbiAgfVxuXG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcbiBcbiAgZXhwb3J0IHZhciBzY2hlbWEgPSBcbiAge1xuICAgIFwiaWRcIjogXCJodHRwOi8vZmFicmljOC5pby9mYWJyaWM4L3YyL1NjaGVtYSNcIixcbiAgICBcIiRzY2hlbWFcIjogXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL3NjaGVtYSNcIixcbiAgICBcImRlZmluaXRpb25zXCI6IHtcbiAgICAgIFwiYXBpX1Jvb3RQYXRoc1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJwYXRoc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUm9vdFBhdGhzXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfQVdTRWxhc3RpY0Jsb2NrU3RvcmVWb2x1bWVTb3VyY2VcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiZnNUeXBlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImZpbGUgc3lzdGVtIHR5cGUgdG8gbW91bnRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXJ0aXRpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInBhcnRpdGlvbiBvbiB0aGUgZGlzayB0byBtb3VudCAoZS5nLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlYWRPbmx5XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJyZWFkLW9ubHkgaWYgdHJ1ZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInZvbHVtZUlEXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInVuaXF1ZSBpZCBvZiB0aGUgUEQgcmVzb3VyY2UgaW4gQVdTOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS92b2x1bWVzLm1kI2F3c2VsYXN0aWNibG9ja3N0b3JlXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQVdTRWxhc3RpY0Jsb2NrU3RvcmVWb2x1bWVTb3VyY2VcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19DYXBhYmlsaXRpZXNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYWRkXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYWRkZWQgY2FwYWJpbGl0aWVzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhZGRlZCBjYXBhYmlsaXRpZXNcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJkcm9wXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZHJvcGVkIGNhcGFiaWxpdGllc1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZHJvcGVkIGNhcGFiaWxpdGllc1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNhcGFiaWxpdGllc1wiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX0NlcGhGU1ZvbHVtZVNvdXJjZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJtb25pdG9yc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImEgY29sbGVjdGlvbiBvZiBDZXBoIG1vbml0b3JzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhIGNvbGxlY3Rpb24gb2YgQ2VwaCBtb25pdG9yc1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlYWRPbmx5XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJDZXBoIGZzIHRvIGJlIG1vdW50ZWQgd2l0aCByZWFkLW9ubHkgcGVybWlzc2lvbnNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZWNyZXRGaWxlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInBhdGggdG8gc2VjcmV0IGZvciByYWRvcyB1c2VyOyBkZWZhdWx0IGlzIC9ldGMvY2VwaC91c2VyLnNlY3JldDsgb3B0aW9uYWxcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZWNyZXRSZWZcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xvY2FsT2JqZWN0UmVmZXJlbmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Mb2NhbE9iamVjdFJlZmVyZW5jZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInVzZXJcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicmFkb3MgdXNlciBuYW1lOyBkZWZhdWx0IGlzIGFkbWluOyBvcHRpb25hbFwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNlcGhGU1ZvbHVtZVNvdXJjZVwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX0NvbnRhaW5lclwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcmdzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiY29tbWFuZCBhcnJheTsgdGhlIGRvY2tlciBpbWFnZSdzIGNtZCBpcyB1c2VkIGlmIHRoaXMgaXMgbm90IHByb3ZpZGVkOyBhcmd1bWVudHMgdG8gdGhlIGVudHJ5cG9pbnQ7IGNhbm5vdCBiZSB1cGRhdGVkOyB2YXJpYWJsZSByZWZlcmVuY2VzICQoVkFSX05BTUUpIGFyZSBleHBhbmRlZCB1c2luZyB0aGUgY29udGFpbmVyJ3MgZW52aXJvbm1lbnQgdmFyaWFibGVzOyBpZiBhIHZhcmlhYmxlIGNhbm5vdCBiZSByZXNvbHZlZFwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiY29tbWFuZCBhcnJheTsgdGhlIGRvY2tlciBpbWFnZSdzIGNtZCBpcyB1c2VkIGlmIHRoaXMgaXMgbm90IHByb3ZpZGVkOyBhcmd1bWVudHMgdG8gdGhlIGVudHJ5cG9pbnQ7IGNhbm5vdCBiZSB1cGRhdGVkOyB2YXJpYWJsZSByZWZlcmVuY2VzICQoVkFSX05BTUUpIGFyZSBleHBhbmRlZCB1c2luZyB0aGUgY29udGFpbmVyJ3MgZW52aXJvbm1lbnQgdmFyaWFibGVzOyBpZiBhIHZhcmlhYmxlIGNhbm5vdCBiZSByZXNvbHZlZFwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImNvbW1hbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJlbnRyeXBvaW50IGFycmF5OyBub3QgZXhlY3V0ZWQgd2l0aGluIGEgc2hlbGw7IHRoZSBkb2NrZXIgaW1hZ2UncyBlbnRyeXBvaW50IGlzIHVzZWQgaWYgdGhpcyBpcyBub3QgcHJvdmlkZWQ7IGNhbm5vdCBiZSB1cGRhdGVkOyB2YXJpYWJsZSByZWZlcmVuY2VzICQoVkFSX05BTUUpIGFyZSBleHBhbmRlZCB1c2luZyB0aGUgY29udGFpbmVyJ3MgZW52aXJvbm1lbnQgdmFyaWFibGVzOyBpZiBhIHZhcmlhYmxlIGNhbm5vdCBiZSByZXNvbHZlZFwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZW50cnlwb2ludCBhcnJheTsgbm90IGV4ZWN1dGVkIHdpdGhpbiBhIHNoZWxsOyB0aGUgZG9ja2VyIGltYWdlJ3MgZW50cnlwb2ludCBpcyB1c2VkIGlmIHRoaXMgaXMgbm90IHByb3ZpZGVkOyBjYW5ub3QgYmUgdXBkYXRlZDsgdmFyaWFibGUgcmVmZXJlbmNlcyAkKFZBUl9OQU1FKSBhcmUgZXhwYW5kZWQgdXNpbmcgdGhlIGNvbnRhaW5lcidzIGVudmlyb25tZW50IHZhcmlhYmxlczsgaWYgYSB2YXJpYWJsZSBjYW5ub3QgYmUgcmVzb2x2ZWRcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJlbnZcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBzZXQgaW4gdGhlIGNvbnRhaW5lcjsgY2Fubm90IGJlIHVwZGF0ZWRcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRW52VmFyXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVudlZhclwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImltYWdlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRvY2tlciBpbWFnZSBuYW1lOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9pbWFnZXMubWRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpbWFnZVB1bGxQb2xpY3lcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaW1hZ2UgcHVsbCBwb2xpY3k7IG9uZSBvZiBBbHdheXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJsaWZlY3ljbGVcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpZmVjeWNsZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlmZWN5Y2xlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibGl2ZW5lc3NQcm9iZVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUHJvYmVcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlByb2JlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJuYW1lIG9mIHRoZSBjb250YWluZXI7IG11c3QgYmUgYSBETlNfTEFCRUwgYW5kIHVuaXF1ZSB3aXRoaW4gdGhlIHBvZDsgY2Fubm90IGJlIHVwZGF0ZWRcIixcbiAgICAgICAgICAgIFwibWF4TGVuZ3RoXCI6IDYzLFxuICAgICAgICAgICAgXCJwYXR0ZXJuXCI6IFwiXlthLXowLTldKFstYS16MC05XSpbYS16MC05XSk/JFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBvcnRzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBwb3J0cyB0byBleHBvc2UgZnJvbSB0aGUgY29udGFpbmVyOyBjYW5ub3QgYmUgdXBkYXRlZFwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Db250YWluZXJQb3J0XCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNvbnRhaW5lclBvcnRcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZWFkaW5lc3NQcm9iZVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUHJvYmVcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlByb2JlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVzb3VyY2VzXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19SZXNvdXJjZVJlcXVpcmVtZW50c1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVzb3VyY2VSZXF1aXJlbWVudHNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZWN1cml0eUNvbnRleHRcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1NlY3VyaXR5Q29udGV4dFwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VjdXJpdHlDb250ZXh0XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3RkaW5cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIldoZXRoZXIgdGhpcyBjb250YWluZXIgc2hvdWxkIGFsbG9jYXRlIGEgYnVmZmVyIGZvciBzdGRpbiBpbiB0aGUgY29udGFpbmVyIHJ1bnRpbWU7IGRlZmF1bHQgaXMgZmFsc2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0ZXJtaW5hdGlvbk1lc3NhZ2VQYXRoXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInBhdGggYXQgd2hpY2ggdGhlIGZpbGUgdG8gd2hpY2ggdGhlIGNvbnRhaW5lcidzIHRlcm1pbmF0aW9uIG1lc3NhZ2Ugd2lsbCBiZSB3cml0dGVuIGlzIG1vdW50ZWQgaW50byB0aGUgY29udGFpbmVyJ3MgZmlsZXN5c3RlbTsgbWVzc2FnZSB3cml0dGVuIGlzIGludGVuZGVkIHRvIGJlIGJyaWVmIGZpbmFsIHN0YXR1c1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR0eVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiV2hldGhlciB0aGlzIGNvbnRhaW5lciBzaG91bGQgYWxsb2NhdGUgYSBUVFkgZm9yIGl0c2VsZlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInZvbHVtZU1vdW50c1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInBvZCB2b2x1bWVzIHRvIG1vdW50IGludG8gdGhlIGNvbnRhaW5lcidzIGZpbGVzeXN0ZTsgY2Fubm90IGJlIHVwZGF0ZWRcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfVm9sdW1lTW91bnRcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuVm9sdW1lTW91bnRcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ3b3JraW5nRGlyXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImNvbnRhaW5lcidzIHdvcmtpbmcgZGlyZWN0b3J5OyBkZWZhdWx0cyB0byBpbWFnZSdzIGRlZmF1bHQ7IGNhbm5vdCBiZSB1cGRhdGVkXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ29udGFpbmVyXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfQ29udGFpbmVyUG9ydFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJjb250YWluZXJQb3J0XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJudW1iZXIgb2YgcG9ydCB0byBleHBvc2Ugb24gdGhlIHBvZCdzIElQIGFkZHJlc3NcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJob3N0SVBcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaG9zdCBJUCB0byBiaW5kIHRoZSBwb3J0IHRvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaG9zdFBvcnRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm51bWJlciBvZiBwb3J0IHRvIGV4cG9zZSBvbiB0aGUgaG9zdDsgbW9zdCBjb250YWluZXJzIGRvIG5vdCBuZWVkIHRoaXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWUgZm9yIHRoZSBwb3J0IHRoYXQgY2FuIGJlIHJlZmVycmVkIHRvIGJ5IHNlcnZpY2VzOyBtdXN0IGJlIGFuIElBTkFfU1ZDX05BTUUgYW5kIHVuaXF1ZSB3aXRoaW4gdGhlIHBvZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInByb3RvY29sXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInByb3RvY29sIGZvciBwb3J0OyBtdXN0IGJlIFVEUCBvciBUQ1A7IFRDUCBpZiB1bnNwZWNpZmllZFwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNvbnRhaW5lclBvcnRcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19Db250YWluZXJTdGF0ZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJydW5uaW5nXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Db250YWluZXJTdGF0ZVJ1bm5pbmdcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNvbnRhaW5lclN0YXRlUnVubmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInRlcm1pbmF0ZWRcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0NvbnRhaW5lclN0YXRlVGVybWluYXRlZFwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ29udGFpbmVyU3RhdGVUZXJtaW5hdGVkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwid2FpdGluZ1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfQ29udGFpbmVyU3RhdGVXYWl0aW5nXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Db250YWluZXJTdGF0ZVdhaXRpbmdcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Db250YWluZXJTdGF0ZVwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX0NvbnRhaW5lclN0YXRlUnVubmluZ1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJzdGFydGVkQXRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGltZSBhdCB3aGljaCB0aGUgY29udGFpbmVyIHdhcyBsYXN0IChyZS0pc3RhcnRlZFwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNvbnRhaW5lclN0YXRlUnVubmluZ1wiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX0NvbnRhaW5lclN0YXRlVGVybWluYXRlZFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJjb250YWluZXJJRFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJjb250YWluZXIncyBJRCBpbiB0aGUgZm9ybWF0ICdkb2NrZXI6Ly9cXHUwMDNjY29udGFpbmVyX2lkXFx1MDAzZSdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJleGl0Q29kZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZXhpdCBzdGF0dXMgZnJvbSB0aGUgbGFzdCB0ZXJtaW5hdGlvbiBvZiB0aGUgY29udGFpbmVyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZmluaXNoZWRBdFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aW1lIGF0IHdoaWNoIHRoZSBjb250YWluZXIgbGFzdCB0ZXJtaW5hdGVkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWVzc2FnZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJtZXNzYWdlIHJlZ2FyZGluZyB0aGUgbGFzdCB0ZXJtaW5hdGlvbiBvZiB0aGUgY29udGFpbmVyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVhc29uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIihicmllZikgcmVhc29uIGZyb20gdGhlIGxhc3QgdGVybWluYXRpb24gb2YgdGhlIGNvbnRhaW5lclwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNpZ25hbFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic2lnbmFsIGZyb20gdGhlIGxhc3QgdGVybWluYXRpb24gb2YgdGhlIGNvbnRhaW5lclwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInN0YXJ0ZWRBdFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aW1lIGF0IHdoaWNoIHByZXZpb3VzIGV4ZWN1dGlvbiBvZiB0aGUgY29udGFpbmVyIHN0YXJ0ZWRcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Db250YWluZXJTdGF0ZVRlcm1pbmF0ZWRcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19Db250YWluZXJTdGF0ZVdhaXRpbmdcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwicmVhc29uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIihicmllZikgcmVhc29uIHRoZSBjb250YWluZXIgaXMgbm90IHlldCBydW5uaW5nXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ29udGFpbmVyU3RhdGVXYWl0aW5nXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfQ29udGFpbmVyU3RhdHVzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImNvbnRhaW5lcklEXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImNvbnRhaW5lcidzIElEIGluIHRoZSBmb3JtYXQgJ2RvY2tlcjovL1xcdTAwM2Njb250YWluZXJfaWRcXHUwMDNlJzsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvY29udGFpbmVyLWVudmlyb25tZW50Lm1kI2NvbnRhaW5lci1pbmZvcm1hdGlvblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImltYWdlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImltYWdlIG9mIHRoZSBjb250YWluZXI7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL2ltYWdlcy5tZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImltYWdlSURcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSUQgb2YgdGhlIGNvbnRhaW5lcidzIGltYWdlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibGFzdFN0YXRlXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Db250YWluZXJTdGF0ZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ29udGFpbmVyU3RhdGVcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWUgb2YgdGhlIGNvbnRhaW5lcjsgbXVzdCBiZSBhIEROU19MQUJFTCBhbmQgdW5pcXVlIHdpdGhpbiB0aGUgcG9kOyBjYW5ub3QgYmUgdXBkYXRlZFwiLFxuICAgICAgICAgICAgXCJtYXhMZW5ndGhcIjogNjMsXG4gICAgICAgICAgICBcInBhdHRlcm5cIjogXCJeW2EtejAtOV0oWy1hLXowLTldKlthLXowLTldKT8kXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVhZHlcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInNwZWNpZmllcyB3aGV0aGVyIHRoZSBjb250YWluZXIgaGFzIHBhc3NlZCBpdHMgcmVhZGluZXNzIHByb2JlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVzdGFydENvdW50XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBjb250YWluZXIgaGFzIGJlZW4gcmVzdGFydGVkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3RhdGVcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0NvbnRhaW5lclN0YXRlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Db250YWluZXJTdGF0ZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNvbnRhaW5lclN0YXR1c1wiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX0VtcHR5RGlyVm9sdW1lU291cmNlXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcIm1lZGl1bVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0eXBlIG9mIHN0b3JhZ2UgdXNlZCB0byBiYWNrIHRoZSB2b2x1bWU7IG11c3QgYmUgYW4gZW1wdHkgc3RyaW5nIChkZWZhdWx0KSBvciBNZW1vcnk7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3ZvbHVtZXMubWQjZW1wdHlkaXJcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FbXB0eURpclZvbHVtZVNvdXJjZVwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX0VuZHBvaW50QWRkcmVzc1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJpcFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJJUCBhZGRyZXNzIG9mIHRoZSBlbmRwb2ludFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInRhcmdldFJlZlwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RSZWZlcmVuY2VcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FbmRwb2ludEFkZHJlc3NcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19FbmRwb2ludFBvcnRcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJuYW1lIG9mIHRoaXMgcG9ydFwiLFxuICAgICAgICAgICAgXCJtYXhMZW5ndGhcIjogNjMsXG4gICAgICAgICAgICBcInBhdHRlcm5cIjogXCJeW2EtejAtOV0oWy1hLXowLTldKlthLXowLTldKT8kXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicG9ydFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicG9ydCBudW1iZXIgb2YgdGhlIGVuZHBvaW50XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicHJvdG9jb2xcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicHJvdG9jb2wgZm9yIHRoaXMgcG9ydDsgbXVzdCBiZSBVRFAgb3IgVENQOyBUQ1AgaWYgdW5zcGVjaWZpZWRcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FbmRwb2ludFBvcnRcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19FbmRwb2ludFN1YnNldFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhZGRyZXNzZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJJUCBhZGRyZXNzZXMgd2hpY2ggb2ZmZXIgdGhlIHJlbGF0ZWQgcG9ydHNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRW5kcG9pbnRBZGRyZXNzXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVuZHBvaW50QWRkcmVzc1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBvcnRzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicG9ydCBudW1iZXJzIGF2YWlsYWJsZSBvbiB0aGUgcmVsYXRlZCBJUCBhZGRyZXNzZXNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRW5kcG9pbnRQb3J0XCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVuZHBvaW50UG9ydFwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVuZHBvaW50U3Vic2V0XCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfRW5kcG9pbnRzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJFbmRwb2ludHNcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInN1YnNldHNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzZXRzIG9mIGFkZHJlc3NlcyBhbmQgcG9ydHMgdGhhdCBjb21wcmlzZSBhIHNlcnZpY2VcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRW5kcG9pbnRTdWJzZXRcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRW5kcG9pbnRTdWJzZXRcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FbmRwb2ludHNcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19FbmRwb2ludHNMaXN0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBlbmRwb2ludHNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRW5kcG9pbnRzXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVuZHBvaW50c1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJFbmRwb2ludHNMaXN0XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVuZHBvaW50c0xpc3RcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19FbnZWYXJcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJuYW1lIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZTsgbXVzdCBiZSBhIENfSURFTlRJRklFUlwiLFxuICAgICAgICAgICAgXCJwYXR0ZXJuXCI6IFwiXltBLVphLXpfXVtBLVphLXowLTlfXSokXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidmFsdWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidmFsdWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlOyBkZWZhdWx0cyB0byBlbXB0eSBzdHJpbmc7IHZhcmlhYmxlIHJlZmVyZW5jZXMgJChWQVJfTkFNRSkgYXJlIGV4cGFuZGVkIHVzaW5nIHRoZSBwcmV2aW91c2x5IGRlZmluZWQgZW52aXJvbm1lbnQgdmFyaWJsZXMgaW4gdGhlIGNvbnRhaW5lciBhbmQgYW55IHNlcnZpY2UgZW52aXJvbm1lbnQgdmFyaWFibGVzOyBpZiBhIHZhcmlhYmxlIGNhbm5vdCBiZSByZXNvbHZlZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInZhbHVlRnJvbVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRW52VmFyU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FbnZWYXJTb3VyY2VcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FbnZWYXJcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19FbnZWYXJTb3VyY2VcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiZmllbGRSZWZcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdEZpZWxkU2VsZWN0b3JcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdEZpZWxkU2VsZWN0b3JcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FbnZWYXJTb3VyY2VcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19FdmVudFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjb3VudFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIG51bWJlciBvZiB0aW1lcyB0aGlzIGV2ZW50IGhhcyBvY2N1cnJlZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImZpcnN0VGltZXN0YW1wXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSB0aW1lIGF0IHdoaWNoIHRoZSBldmVudCB3YXMgZmlyc3QgcmVjb3JkZWRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpbnZvbHZlZE9iamVjdFwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RSZWZlcmVuY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiRXZlbnRcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJsYXN0VGltZXN0YW1wXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSB0aW1lIGF0IHdoaWNoIHRoZSBtb3N0IHJlY2VudCBvY2N1cnJlbmNlIG9mIHRoaXMgZXZlbnQgd2FzIHJlY29yZGVkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWVzc2FnZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgc3RhdHVzIG9mIHRoaXMgb3BlcmF0aW9uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZWFzb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic2hvcnRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzb3VyY2VcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0V2ZW50U291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FdmVudFNvdXJjZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkV2ZW50XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfRXZlbnRMaXN0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBldmVudHNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRXZlbnRcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRXZlbnRcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiRXZlbnRMaXN0XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkV2ZW50TGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX0V2ZW50U291cmNlXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImNvbXBvbmVudFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJjb21wb25lbnQgdGhhdCBnZW5lcmF0ZWQgdGhlIGV2ZW50XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaG9zdFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJuYW1lIG9mIHRoZSBob3N0IHdoZXJlIHRoZSBldmVudCBpcyBnZW5lcmF0ZWRcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FdmVudFNvdXJjZVwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX0V4ZWNBY3Rpb25cIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiY29tbWFuZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImNvbW1hbmQgbGluZSB0byBleGVjdXRlIGluc2lkZSB0aGUgY29udGFpbmVyOyB3b3JraW5nIGRpcmVjdG9yeSBmb3IgdGhlIGNvbW1hbmQgaXMgcm9vdCAoJy8nKSBpbiB0aGUgY29udGFpbmVyJ3MgZmlsZSBzeXN0ZW07IHRoZSBjb21tYW5kIGlzIGV4ZWMnZFwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiY29tbWFuZCBsaW5lIHRvIGV4ZWN1dGUgaW5zaWRlIHRoZSBjb250YWluZXI7IHdvcmtpbmcgZGlyZWN0b3J5IGZvciB0aGUgY29tbWFuZCBpcyByb290ICgnLycpIGluIHRoZSBjb250YWluZXIncyBmaWxlIHN5c3RlbTsgdGhlIGNvbW1hbmQgaXMgZXhlYydkXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRXhlY0FjdGlvblwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX0dDRVBlcnNpc3RlbnREaXNrVm9sdW1lU291cmNlXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImZzVHlwZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJmaWxlIHN5c3RlbSB0eXBlIHRvIG1vdW50XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFydGl0aW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJwYXJ0aXRpb24gb24gdGhlIGRpc2sgdG8gbW91bnQgKGUuZy5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwZE5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidW5pcXVlIG5hbWUgb2YgdGhlIFBEIHJlc291cmNlIGluIEdDRTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvdm9sdW1lcy5tZCNnY2VwZXJzaXN0ZW50ZGlza1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlYWRPbmx5XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJyZWFkLW9ubHkgaWYgdHJ1ZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkdDRVBlcnNpc3RlbnREaXNrVm9sdW1lU291cmNlXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfR2l0UmVwb1ZvbHVtZVNvdXJjZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJyZXBvc2l0b3J5XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJlcG9zaXRvcnkgVVJMXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmV2aXNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiY29tbWl0IGhhc2ggZm9yIHRoZSBzcGVjaWZpZWQgcmV2aXNpb25cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5HaXRSZXBvVm9sdW1lU291cmNlXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfR2x1c3RlcmZzVm9sdW1lU291cmNlXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImVuZHBvaW50c1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJnbHVzdGVyIGhvc3RzIGVuZHBvaW50cyBuYW1lOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2V4YW1wbGVzL2dsdXN0ZXJmcy9SRUFETUUubWQjY3JlYXRlLWEtcG9kXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGF0aFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJwYXRoIHRvIGdsdXN0ZXIgdm9sdW1lOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2V4YW1wbGVzL2dsdXN0ZXJmcy9SRUFETUUubWQjY3JlYXRlLWEtcG9kXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVhZE9ubHlcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImdsdXN0ZXJmcyB2b2x1bWUgdG8gYmUgbW91bnRlZCB3aXRoIHJlYWQtb25seSBwZXJtaXNzaW9uczsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy9nbHVzdGVyZnMvUkVBRE1FLm1kI2NyZWF0ZS1hLXBvZFwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkdsdXN0ZXJmc1ZvbHVtZVNvdXJjZVwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX0hUVFBHZXRBY3Rpb25cIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiaG9zdFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJob3N0bmFtZSB0byBjb25uZWN0IHRvOyBkZWZhdWx0cyB0byBwb2QgSVBcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXRoXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInBhdGggdG8gYWNjZXNzIG9uIHRoZSBIVFRQIHNlcnZlclwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBvcnRcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX3V0aWxfSW50T3JTdHJpbmdcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkludE9yU3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2NoZW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInNjaGVtZSB0byBjb25uZWN0IHdpdGhcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IVFRQR2V0QWN0aW9uXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfSGFuZGxlclwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJleGVjXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19FeGVjQWN0aW9uXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FeGVjQWN0aW9uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaHR0cEdldFwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfSFRUUEdldEFjdGlvblwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSFRUUEdldEFjdGlvblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInRjcFNvY2tldFwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfVENQU29ja2V0QWN0aW9uXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5UQ1BTb2NrZXRBY3Rpb25cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYW5kbGVyXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfSG9zdFBhdGhWb2x1bWVTb3VyY2VcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwicGF0aFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJwYXRoIG9mIHRoZSBkaXJlY3Rvcnkgb24gdGhlIGhvc3Q7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3ZvbHVtZXMubWQjaG9zdHBhdGhcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Ib3N0UGF0aFZvbHVtZVNvdXJjZVwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX0lTQ1NJVm9sdW1lU291cmNlXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImZzVHlwZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJmaWxlIHN5c3RlbSB0eXBlIHRvIG1vdW50XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaXFuXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImlTQ1NJIFF1YWxpZmllZCBOYW1lXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibHVuXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJpc2NzaSB0YXJnZXQgbHVuIG51bWJlclwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlYWRPbmx5XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJyZWFkLW9ubHkgaWYgdHJ1ZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInRhcmdldFBvcnRhbFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJpU0NTSSB0YXJnZXQgcG9ydGFsXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSVNDU0lWb2x1bWVTb3VyY2VcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19MaWZlY3ljbGVcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwicG9zdFN0YXJ0XCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19IYW5kbGVyXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYW5kbGVyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicHJlU3RvcFwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfSGFuZGxlclwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFuZGxlclwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpZmVjeWNsZVwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX0xpc3RcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIG9iamVjdHNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfcnVudGltZV9SYXdFeHRlbnNpb25cIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiTGlzdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5CYXNlS3ViZXJuZXRlc0xpc3RcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19MaXN0TWV0YVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJyZXNvdXJjZVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic3RyaW5nIHRoYXQgaWRlbnRpZmllcyB0aGUgaW50ZXJuYWwgdmVyc2lvbiBvZiB0aGlzIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIGJ5IGNsaWVudHMgdG8gZGV0ZXJtaW5lIHdoZW4gb2JqZWN0cyBoYXZlIGNoYW5nZWQ7IHBvcHVsYXRlZCBieSB0aGUgc3lzdGVtXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2VsZkxpbmtcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVVJMIGZvciB0aGUgb2JqZWN0OyBwb3B1bGF0ZWQgYnkgdGhlIHN5c3RlbVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfTG9hZEJhbGFuY2VySW5ncmVzc1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJob3N0bmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJob3N0bmFtZSBvZiBpbmdyZXNzIHBvaW50XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaXBcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSVAgYWRkcmVzcyBvZiBpbmdyZXNzIHBvaW50XCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTG9hZEJhbGFuY2VySW5ncmVzc1wiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX0xvYWRCYWxhbmNlclN0YXR1c1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJpbmdyZXNzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibG9hZC1iYWxhbmNlciBpbmdyZXNzIHBvaW50c1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Mb2FkQmFsYW5jZXJJbmdyZXNzXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxvYWRCYWxhbmNlckluZ3Jlc3NcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Mb2FkQmFsYW5jZXJTdGF0dXNcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19Mb2NhbE9iamVjdFJlZmVyZW5jZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWUgb2YgdGhlIHJlZmVyZW50OyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9pZGVudGlmaWVycy5tZCNuYW1lc1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxvY2FsT2JqZWN0UmVmZXJlbmNlXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfTWV0YWRhdGFGaWxlXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImZpZWxkUmVmXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RGaWVsZFNlbGVjdG9yXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RGaWVsZFNlbGVjdG9yXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgbmFtZSBvZiB0aGUgZmlsZSB0byBiZSBjcmVhdGVkXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTWV0YWRhdGFGaWxlXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfTWV0YWRhdGFWb2x1bWVTb3VyY2VcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIG1ldGFkYXRhIGZpbGVzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX01ldGFkYXRhRmlsZVwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5NZXRhZGF0YUZpbGVcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5NZXRhZGF0YVZvbHVtZVNvdXJjZVwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX05GU1ZvbHVtZVNvdXJjZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJwYXRoXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBwYXRoIHRoYXQgaXMgZXhwb3J0ZWQgYnkgdGhlIE5GUyBzZXJ2ZXI7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3ZvbHVtZXMubWQjbmZzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVhZE9ubHlcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImZvcmNlcyB0aGUgTkZTIGV4cG9ydCB0byBiZSBtb3VudGVkIHdpdGggcmVhZC1vbmx5IHBlcm1pc3Npb25zOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS92b2x1bWVzLm1kI25mc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNlcnZlclwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgaG9zdG5hbWUgb3IgSVAgYWRkcmVzcyBvZiB0aGUgTkZTIHNlcnZlcjsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvdm9sdW1lcy5tZCNuZnNcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5ORlNWb2x1bWVTb3VyY2VcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19OYW1lc3BhY2VcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIk5hbWVzcGFjZVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3BlY1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTmFtZXNwYWNlU3BlY1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTmFtZXNwYWNlU3BlY1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInN0YXR1c1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTmFtZXNwYWNlU3RhdHVzXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5OYW1lc3BhY2VTdGF0dXNcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5OYW1lc3BhY2VcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19OYW1lc3BhY2VMaXN0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaXRlbXMgaXMgdGhlIGxpc3Qgb2YgTmFtZXNwYWNlIG9iamVjdHMgaW4gdGhlIGxpc3Q7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL25hbWVzcGFjZXMubWRcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTmFtZXNwYWNlXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5hbWVzcGFjZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJOYW1lc3BhY2VMaXN0XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5hbWVzcGFjZUxpc3RcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19OYW1lc3BhY2VTcGVjXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImZpbmFsaXplcnNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbiBvcGFxdWUgbGlzdCBvZiB2YWx1ZXMgdGhhdCBtdXN0IGJlIGVtcHR5IHRvIHBlcm1hbmVudGx5IHJlbW92ZSBvYmplY3QgZnJvbSBzdG9yYWdlOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvZGVzaWduL25hbWVzcGFjZXMubWQjZmluYWxpemVyc1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYW4gb3BhcXVlIGxpc3Qgb2YgdmFsdWVzIHRoYXQgbXVzdCBiZSBlbXB0eSB0byBwZXJtYW5lbnRseSByZW1vdmUgb2JqZWN0IGZyb20gc3RvcmFnZTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL2Rlc2lnbi9uYW1lc3BhY2VzLm1kI2ZpbmFsaXplcnNcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5OYW1lc3BhY2VTcGVjXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfTmFtZXNwYWNlU3RhdHVzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcInBoYXNlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInBoYXNlIGlzIHRoZSBjdXJyZW50IGxpZmVjeWNsZSBwaGFzZSBvZiB0aGUgbmFtZXNwYWNlOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvZGVzaWduL25hbWVzcGFjZXMubWQjcGhhc2VzXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTmFtZXNwYWNlU3RhdHVzXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfTm9kZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiTm9kZVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3BlY1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTm9kZVNwZWNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5vZGVTcGVjXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3RhdHVzXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Ob2RlU3RhdHVzXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Ob2RlU3RhdHVzXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTm9kZVwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX05vZGVBZGRyZXNzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFkZHJlc3NcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIG5vZGUgYWRkcmVzc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibm9kZSBhZGRyZXNzIHR5cGVcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Ob2RlQWRkcmVzc1wiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX05vZGVDb25kaXRpb25cIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwibGFzdEhlYXJ0YmVhdFRpbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGFzdCB0aW1lIHdlIGdvdCBhbiB1cGRhdGUgb24gYSBnaXZlbiBjb25kaXRpb25cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJsYXN0VHJhbnNpdGlvblRpbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGFzdCB0aW1lIHRoZSBjb25kaXRpb24gdHJhbnNpdCBmcm9tIG9uZSBzdGF0dXMgdG8gYW5vdGhlclwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1lc3NhZ2VcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaHVtYW4gcmVhZGFibGUgbWVzc2FnZSBpbmRpY2F0aW5nIGRldGFpbHMgYWJvdXQgbGFzdCB0cmFuc2l0aW9uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVhc29uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIihicmllZikgcmVhc29uIGZvciB0aGUgY29uZGl0aW9uJ3MgbGFzdCB0cmFuc2l0aW9uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3RhdHVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInN0YXR1cyBvZiB0aGUgY29uZGl0aW9uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0eXBlIG9mIG5vZGUgY29uZGl0aW9uXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTm9kZUNvbmRpdGlvblwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX05vZGVMaXN0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBub2Rlc1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Ob2RlXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5vZGVcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiTm9kZUxpc3RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTm9kZUxpc3RcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19Ob2RlU3BlY1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJleHRlcm5hbElEXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImRlcHJlY2F0ZWQuIEV4dGVybmFsIElEIGFzc2lnbmVkIHRvIHRoZSBub2RlIGJ5IHNvbWUgbWFjaGluZSBkYXRhYmFzZSAoZS5nLiBhIGNsb3VkIHByb3ZpZGVyKS4gRGVmYXVsdHMgdG8gbm9kZSBuYW1lIHdoZW4gZW1wdHkuXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicG9kQ0lEUlwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJwb2QgSVAgcmFuZ2UgYXNzaWduZWQgdG8gdGhlIG5vZGVcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwcm92aWRlcklEXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIklEIG9mIHRoZSBub2RlIGFzc2lnbmVkIGJ5IHRoZSBjbG91ZCBwcm92aWRlciBpbiB0aGUgZm9ybWF0OiBcXHUwMDNjUHJvdmlkZXJOYW1lXFx1MDAzZTovL1xcdTAwM2NQcm92aWRlclNwZWNpZmljTm9kZUlEXFx1MDAzZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInVuc2NoZWR1bGFibGVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImRpc2FibGUgcG9kIHNjaGVkdWxpbmcgb24gdGhlIG5vZGU7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy9hZG1pbi9ub2RlLm1kI21hbnVhbC1ub2RlLWFkbWluaXN0cmF0aW9uXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTm9kZVNwZWNcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19Ob2RlU3RhdHVzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFkZHJlc3Nlc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgYWRkcmVzc2VzIHJlYWNoYWJsZSB0byB0aGUgbm9kZTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL2FkbWluL25vZGUubWQjbm9kZS1hZGRyZXNzZXNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTm9kZUFkZHJlc3NcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTm9kZUFkZHJlc3NcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjYXBhY2l0eVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJjb21wdXRlIHJlc291cmNlIGNhcGFjaXR5IG9mIHRoZSBub2RlOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9jb21wdXRlLXJlc291cmNlcy5tZFwiLFxuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19yZXNvdXJjZV9RdWFudGl0eVwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5RdWFudGl0eVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImphdmEudXRpbC5NYXBcXHUwMDNjU3RyaW5nLGlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUXVhbnRpdHlcXHUwMDNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiY29uZGl0aW9uc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2Ygbm9kZSBjb25kaXRpb25zIG9ic2VydmVkOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvYWRtaW4vbm9kZS5tZCNub2RlLWNvbmRpdGlvblwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Ob2RlQ29uZGl0aW9uXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5vZGVDb25kaXRpb25cIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJub2RlSW5mb1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTm9kZVN5c3RlbUluZm9cIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5vZGVTeXN0ZW1JbmZvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGhhc2VcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibW9zdCByZWNlbnRseSBvYnNlcnZlZCBsaWZlY3ljbGUgcGhhc2Ugb2YgdGhlIG5vZGU7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy9hZG1pbi9ub2RlLm1kI25vZGUtcGhhc2VcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Ob2RlU3RhdHVzXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfTm9kZVN5c3RlbUluZm9cIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYm9vdElEXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImJvb3QgaWQgaXMgdGhlIGJvb3QtaWQgcmVwb3J0ZWQgYnkgdGhlIG5vZGVcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjb250YWluZXJSdW50aW1lVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJDb250YWluZXIgcnVudGltZSB2ZXJzaW9uIHJlcG9ydGVkIGJ5IHRoZSBub2RlIHRocm91Z2ggcnVudGltZSByZW1vdGUgQVBJIChlLmcuIGRvY2tlcjovLzEuNS4wKVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtlcm5lbFZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiS2VybmVsIHZlcnNpb24gcmVwb3J0ZWQgYnkgdGhlIG5vZGUgZnJvbSAndW5hbWUgLXInIChlLmcuIDMuMTYuMC0wLmJwby40LWFtZDY0KVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImt1YmVQcm94eVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiS3ViZS1wcm94eSB2ZXJzaW9uIHJlcG9ydGVkIGJ5IHRoZSBub2RlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia3ViZWxldFZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiS3ViZWxldCB2ZXJzaW9uIHJlcG9ydGVkIGJ5IHRoZSBub2RlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWFjaGluZUlEXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm1hY2hpbmUtaWQgcmVwb3J0ZWQgYnkgdGhlIG5vZGVcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJvc0ltYWdlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk9TIGltYWdlIHVzZWQgcmVwb3J0ZWQgYnkgdGhlIG5vZGUgZnJvbSAvZXRjL29zLXJlbGVhc2UgKGUuZy4gRGViaWFuIEdOVS9MaW51eCA3ICh3aGVlenkpKVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInN5c3RlbVVVSURcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic3lzdGVtLXV1aWQgcmVwb3J0ZWQgYnkgdGhlIG5vZGVcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Ob2RlU3lzdGVtSW5mb1wiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX09iamVjdEZpZWxkU2VsZWN0b3JcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ2ZXJzaW9uIG9mIHRoZSBzY2hlbWEgdGhhdCBmaWVsZFBhdGggaXMgd3JpdHRlbiBpbiB0ZXJtcyBvZjsgZGVmYXVsdHMgdG8gdjFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJmaWVsZFBhdGhcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicGF0aCBvZiB0aGUgZmllbGQgdG8gc2VsZWN0IGluIHRoZSBzcGVjaWZpZWQgQVBJIHZlcnNpb25cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RGaWVsZFNlbGVjdG9yXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfT2JqZWN0TWV0YVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhbm5vdGF0aW9uc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJtYXAgb2Ygc3RyaW5nIGtleXMgYW5kIHZhbHVlcyB0aGF0IGNhbiBiZSB1c2VkIGJ5IGV4dGVybmFsIHRvb2xpbmcgdG8gc3RvcmUgYW5kIHJldHJpZXZlIGFyYml0cmFyeSBtZXRhZGF0YSBhYm91dCBvYmplY3RzOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9hbm5vdGF0aW9ucy5tZFwiLFxuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibWFwIG9mIHN0cmluZyBrZXlzIGFuZCB2YWx1ZXMgdGhhdCBjYW4gYmUgdXNlZCBieSBleHRlcm5hbCB0b29saW5nIHRvIHN0b3JlIGFuZCByZXRyaWV2ZSBhcmJpdHJhcnkgbWV0YWRhdGEgYWJvdXQgb2JqZWN0czsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvYW5ub3RhdGlvbnMubWRcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJqYXZhLnV0aWwuTWFwXFx1MDAzY1N0cmluZyxTdHJpbmdcXHUwMDNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiY3JlYXRpb25UaW1lc3RhbXBcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUkZDIDMzMzkgZGF0ZSBhbmQgdGltZSBhdCB3aGljaCB0aGUgb2JqZWN0IHdhcyBjcmVhdGVkOyBwb3B1bGF0ZWQgYnkgdGhlIHN5c3RlbVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImRlbGV0aW9uVGltZXN0YW1wXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJGQyAzMzM5IGRhdGUgYW5kIHRpbWUgYXQgd2hpY2ggdGhlIG9iamVjdCB3aWxsIGJlIGRlbGV0ZWQ7IHBvcHVsYXRlZCBieSB0aGUgc3lzdGVtIHdoZW4gYSBncmFjZWZ1bCBkZWxldGlvbiBpcyByZXF1ZXN0ZWRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZW5lcmF0ZU5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYW4gb3B0aW9uYWwgcHJlZml4IHRvIHVzZSB0byBnZW5lcmF0ZSBhIHVuaXF1ZSBuYW1lOyBoYXMgdGhlIHNhbWUgdmFsaWRhdGlvbiBydWxlcyBhcyBuYW1lOyBvcHRpb25hbFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdlbmVyYXRpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImEgc2VxdWVuY2UgbnVtYmVyIHJlcHJlc2VudGluZyBhIHNwZWNpZmljIGdlbmVyYXRpb24gb2YgdGhlIGRlc2lyZWQgc3RhdGU7IHBvcHVsYXRlZCBieSB0aGUgc3lzdGVtOyByZWFkLW9ubHlcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJMb25nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibGFiZWxzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm1hcCBvZiBzdHJpbmcga2V5cyBhbmQgdmFsdWVzIHRoYXQgY2FuIGJlIHVzZWQgdG8gb3JnYW5pemUgYW5kIGNhdGVnb3JpemUgb2JqZWN0czsgbWF5IG1hdGNoIHNlbGVjdG9ycyBvZiByZXBsaWNhdGlvbiBjb250cm9sbGVycyBhbmQgc2VydmljZXM7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL2xhYmVscy5tZFwiLFxuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibWFwIG9mIHN0cmluZyBrZXlzIGFuZCB2YWx1ZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBvcmdhbml6ZSBhbmQgY2F0ZWdvcml6ZSBvYmplY3RzOyBtYXkgbWF0Y2ggc2VsZWN0b3JzIG9mIHJlcGxpY2F0aW9uIGNvbnRyb2xsZXJzIGFuZCBzZXJ2aWNlczsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvbGFiZWxzLm1kXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiamF2YS51dGlsLk1hcFxcdTAwM2NTdHJpbmcsU3RyaW5nXFx1MDAzZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic3RyaW5nIHRoYXQgaWRlbnRpZmllcyBhbiBvYmplY3QuIE11c3QgYmUgdW5pcXVlIHdpdGhpbiBhIG5hbWVzcGFjZTsgY2Fubm90IGJlIHVwZGF0ZWQ7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL2lkZW50aWZpZXJzLm1kI25hbWVzXCIsXG4gICAgICAgICAgICBcIm1heExlbmd0aFwiOiA2MyxcbiAgICAgICAgICAgIFwicGF0dGVyblwiOiBcIl5bYS16MC05XShbLWEtejAtOV0qW2EtejAtOV0pPyRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJuYW1lc3BhY2VcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibmFtZXNwYWNlIG9mIHRoZSBvYmplY3Q7IG11c3QgYmUgYSBETlNfTEFCRUw7IGNhbm5vdCBiZSB1cGRhdGVkOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9uYW1lc3BhY2VzLm1kXCIsXG4gICAgICAgICAgICBcIm1heExlbmd0aFwiOiAyNTMsXG4gICAgICAgICAgICBcInBhdHRlcm5cIjogXCJeW2EtejAtOV0oWy1hLXowLTldKlthLXowLTldKT8oXFxcXC5bYS16MC05XShbLWEtejAtOV0qW2EtejAtOV0pPykqJFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlc291cmNlVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzdHJpbmcgdGhhdCBpZGVudGlmaWVzIHRoZSBpbnRlcm5hbCB2ZXJzaW9uIG9mIHRoaXMgb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgYnkgY2xpZW50cyB0byBkZXRlcm1pbmUgd2hlbiBvYmplY3RzIGhhdmUgY2hhbmdlZDsgcG9wdWxhdGVkIGJ5IHRoZSBzeXN0ZW1cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZWxmTGlua1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJVUkwgZm9yIHRoZSBvYmplY3Q7IHBvcHVsYXRlZCBieSB0aGUgc3lzdGVtXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidWlkXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInVuaXF1ZSBVVUlEIGFjcm9zcyBzcGFjZSBhbmQgdGltZTsgcG9wdWxhdGVkIGJ5IHRoZSBzeXN0ZW07IHJlYWQtb25seTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvaWRlbnRpZmllcnMubWQjdWlkc1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19PYmplY3RSZWZlcmVuY2VcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBUEkgdmVyc2lvbiBvZiB0aGUgcmVmZXJlbnRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJmaWVsZFBhdGhcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaWYgcmVmZXJyaW5nIHRvIGEgcGllY2Ugb2YgYW4gb2JqZWN0IGluc3RlYWQgb2YgYW4gZW50aXJlIG9iamVjdFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwia2luZCBvZiB0aGUgcmVmZXJlbnQ7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjdHlwZXMta2luZHNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWUgb2YgdGhlIHJlZmVyZW50OyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9pZGVudGlmaWVycy5tZCNuYW1lc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm5hbWVzcGFjZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJuYW1lc3BhY2Ugb2YgdGhlIHJlZmVyZW50OyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9uYW1lc3BhY2VzLm1kXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVzb3VyY2VWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInNwZWNpZmljIHJlc291cmNlVmVyc2lvbiB0byB3aGljaCB0aGlzIHJlZmVyZW5jZSBpcyBtYWRlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidWlkXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInVpZCBvZiB0aGUgcmVmZXJlbnQ7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL2lkZW50aWZpZXJzLm1kI3VpZHNcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RSZWZlcmVuY2VcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19QZXJzaXN0ZW50Vm9sdW1lXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJQZXJzaXN0ZW50Vm9sdW1lXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzcGVjXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19QZXJzaXN0ZW50Vm9sdW1lU3BlY1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUGVyc2lzdGVudFZvbHVtZVNwZWNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzdGF0dXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1BlcnNpc3RlbnRWb2x1bWVTdGF0dXNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBlcnNpc3RlbnRWb2x1bWVTdGF0dXNcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lXCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfUGVyc2lzdGVudFZvbHVtZUNsYWltXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJQZXJzaXN0ZW50Vm9sdW1lQ2xhaW1cIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNwZWNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1BlcnNpc3RlbnRWb2x1bWVDbGFpbVNwZWNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBlcnNpc3RlbnRWb2x1bWVDbGFpbVNwZWNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzdGF0dXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1BlcnNpc3RlbnRWb2x1bWVDbGFpbVN0YXR1c1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUGVyc2lzdGVudFZvbHVtZUNsYWltU3RhdHVzXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUGVyc2lzdGVudFZvbHVtZUNsYWltXCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfUGVyc2lzdGVudFZvbHVtZUNsYWltTGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImEgbGlzdCBvZiBwZXJzaXN0ZW50IHZvbHVtZSBjbGFpbXM7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3BlcnNpc3RlbnQtdm9sdW1lcy5tZCNwZXJzaXN0ZW50dm9sdW1lY2xhaW1zXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1BlcnNpc3RlbnRWb2x1bWVDbGFpbVwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1cIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiUGVyc2lzdGVudFZvbHVtZUNsYWltTGlzdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1MaXN0XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfUGVyc2lzdGVudFZvbHVtZUNsYWltU3BlY1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhY2Nlc3NNb2Rlc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBkZXNpcmVkIGFjY2VzcyBtb2RlcyB0aGUgdm9sdW1lIHNob3VsZCBoYXZlOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9wZXJzaXN0ZW50LXZvbHVtZXMubWQjYWNjZXNzLW1vZGVzLTFcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBkZXNpcmVkIGFjY2VzcyBtb2RlcyB0aGUgdm9sdW1lIHNob3VsZCBoYXZlOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9wZXJzaXN0ZW50LXZvbHVtZXMubWQjYWNjZXNzLW1vZGVzLTFcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZXNvdXJjZXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1Jlc291cmNlUmVxdWlyZW1lbnRzXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SZXNvdXJjZVJlcXVpcmVtZW50c1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInZvbHVtZU5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIGJpbmRpbmcgcmVmZXJlbmNlIHRvIHRoZSBwZXJzaXN0ZW50IHZvbHVtZSBiYWNraW5nIHRoaXMgY2xhaW1cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1TcGVjXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfUGVyc2lzdGVudFZvbHVtZUNsYWltU3RhdHVzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFjY2Vzc01vZGVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIGFjdHVhbCBhY2Nlc3MgbW9kZXMgdGhlIHZvbHVtZSBoYXM7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3BlcnNpc3RlbnQtdm9sdW1lcy5tZCNhY2Nlc3MtbW9kZXMtMVwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIGFjdHVhbCBhY2Nlc3MgbW9kZXMgdGhlIHZvbHVtZSBoYXM7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3BlcnNpc3RlbnQtdm9sdW1lcy5tZCNhY2Nlc3MtbW9kZXMtMVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImNhcGFjaXR5XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBhY3R1YWwgcmVzb3VyY2VzIHRoZSB2b2x1bWUgaGFzXCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX3Jlc291cmNlX1F1YW50aXR5XCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlF1YW50aXR5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiamF2YS51dGlsLk1hcFxcdTAwM2NTdHJpbmcsaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5RdWFudGl0eVxcdTAwM2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwaGFzZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgY3VycmVudCBwaGFzZSBvZiB0aGUgY2xhaW1cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1TdGF0dXNcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1Wb2x1bWVTb3VyY2VcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiY2xhaW1OYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBuYW1lIG9mIHRoZSBjbGFpbSBpbiB0aGUgc2FtZSBuYW1lc3BhY2UgdG8gYmUgbW91bnRlZCBhcyBhIHZvbHVtZTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvcGVyc2lzdGVudC12b2x1bWVzLm1kI3BlcnNpc3RlbnR2b2x1bWVjbGFpbXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZWFkT25seVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibW91bnQgdm9sdW1lIGFzIHJlYWQtb25seSB3aGVuIHRydWU7IGRlZmF1bHQgZmFsc2VcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1Wb2x1bWVTb3VyY2VcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19QZXJzaXN0ZW50Vm9sdW1lTGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgcGVyc2lzdGVudCB2b2x1bWVzOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9wZXJzaXN0ZW50LXZvbHVtZXMubWRcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUGVyc2lzdGVudFZvbHVtZVwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlBlcnNpc3RlbnRWb2x1bWVMaXN0XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBlcnNpc3RlbnRWb2x1bWVMaXN0XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfUGVyc2lzdGVudFZvbHVtZVNvdXJjZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhd3NFbGFzdGljQmxvY2tTdG9yZVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfQVdTRWxhc3RpY0Jsb2NrU3RvcmVWb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkFXU0VsYXN0aWNCbG9ja1N0b3JlVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiY2VwaGZzXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19DZXBoRlNWb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNlcGhGU1ZvbHVtZVNvdXJjZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdjZVBlcnNpc3RlbnREaXNrXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19HQ0VQZXJzaXN0ZW50RGlza1ZvbHVtZVNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuR0NFUGVyc2lzdGVudERpc2tWb2x1bWVTb3VyY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnbHVzdGVyZnNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0dsdXN0ZXJmc1ZvbHVtZVNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuR2x1c3RlcmZzVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaG9zdFBhdGhcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0hvc3RQYXRoVm9sdW1lU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Ib3N0UGF0aFZvbHVtZVNvdXJjZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImlzY3NpXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19JU0NTSVZvbHVtZVNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSVNDU0lWb2x1bWVTb3VyY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJuZnNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX05GU1ZvbHVtZVNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTkZTVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmJkXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19SQkRWb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJCRFZvbHVtZVNvdXJjZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBlcnNpc3RlbnRWb2x1bWVTb3VyY2VcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19QZXJzaXN0ZW50Vm9sdW1lU3BlY1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhY2Nlc3NNb2Rlc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFsbCB3YXlzIHRoZSB2b2x1bWUgY2FuIGJlIG1vdW50ZWQ7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3BlcnNpc3RlbnQtdm9sdW1lcy5tZCNhY2Nlc3MtbW9kZXNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFsbCB3YXlzIHRoZSB2b2x1bWUgY2FuIGJlIG1vdW50ZWQ7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3BlcnNpc3RlbnQtdm9sdW1lcy5tZCNhY2Nlc3MtbW9kZXNcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJhd3NFbGFzdGljQmxvY2tTdG9yZVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfQVdTRWxhc3RpY0Jsb2NrU3RvcmVWb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkFXU0VsYXN0aWNCbG9ja1N0b3JlVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiY2FwYWNpdHlcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYSBkZXNjcmlwdGlvbiBvZiB0aGUgcGVyc2lzdGVudCB2b2x1bWUncyByZXNvdXJjZXMgYW5kIGNhcGFjaXR5cjsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvcGVyc2lzdGVudC12b2x1bWVzLm1kI2NhcGFjaXR5XCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX3Jlc291cmNlX1F1YW50aXR5XCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlF1YW50aXR5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiamF2YS51dGlsLk1hcFxcdTAwM2NTdHJpbmcsaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5RdWFudGl0eVxcdTAwM2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjZXBoZnNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0NlcGhGU1ZvbHVtZVNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ2VwaEZTVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiY2xhaW1SZWZcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdFJlZmVyZW5jZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0UmVmZXJlbmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2NlUGVyc2lzdGVudERpc2tcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0dDRVBlcnNpc3RlbnREaXNrVm9sdW1lU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5HQ0VQZXJzaXN0ZW50RGlza1ZvbHVtZVNvdXJjZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdsdXN0ZXJmc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfR2x1c3RlcmZzVm9sdW1lU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5HbHVzdGVyZnNWb2x1bWVTb3VyY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJob3N0UGF0aFwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfSG9zdFBhdGhWb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhvc3RQYXRoVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaXNjc2lcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0lTQ1NJVm9sdW1lU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5JU0NTSVZvbHVtZVNvdXJjZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm5mc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTkZTVm9sdW1lU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5ORlNWb2x1bWVTb3VyY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwZXJzaXN0ZW50Vm9sdW1lUmVjbGFpbVBvbGljeVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ3aGF0IGhhcHBlbnMgdG8gYSB2b2x1bWUgd2hlbiByZWxlYXNlZCBmcm9tIGl0cyBjbGFpbTsgVmFsaWQgb3B0aW9ucyBhcmUgUmV0YWluIChkZWZhdWx0KSBhbmQgUmVjeWNsZS4gIFJlY3lsaW5nIG11c3QgYmUgc3VwcG9ydGVkIGJ5IHRoZSB2b2x1bWUgcGx1Z2luIHVuZGVybHlpbmcgdGhpcyBwZXJzaXN0ZW50IHZvbHVtZS4gU2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvcGVyc2lzdGVudC12b2x1bWVzLm1kI3JlY3ljbGluZy1wb2xpY3lcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyYmRcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1JCRFZvbHVtZVNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUkJEVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUGVyc2lzdGVudFZvbHVtZVNwZWNcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19QZXJzaXN0ZW50Vm9sdW1lU3RhdHVzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcIm1lc3NhZ2VcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaHVtYW4tcmVhZGFibGUgbWVzc2FnZSBpbmRpY2F0aW5nIGRldGFpbHMgYWJvdXQgd2h5IHRoZSB2b2x1bWUgaXMgaW4gdGhpcyBzdGF0ZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBoYXNlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBjdXJyZW50IHBoYXNlIG9mIGEgcGVyc2lzdGVudCB2b2x1bWU7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3BlcnNpc3RlbnQtdm9sdW1lcy5tZCNwaGFzZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlYXNvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCIoYnJpZWYpIHJlYXNvbiB0aGUgdm9sdW1lIGlzIG5vdCBpcyBub3QgYXZhaWxhYmxlXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUGVyc2lzdGVudFZvbHVtZVN0YXR1c1wiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1BvZFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiUG9kXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzcGVjXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Qb2RTcGVjXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Qb2RTcGVjXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3RhdHVzXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Qb2RTdGF0dXNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBvZFN0YXR1c1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBvZFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1BvZENvbmRpdGlvblwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJzdGF0dXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic3RhdHVzIG9mIHRoZSBjb25kaXRpb25cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImtpbmQgb2YgdGhlIGNvbmRpdGlvblwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBvZENvbmRpdGlvblwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1BvZExpc3RcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHBvZHM7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3BvZHMubWRcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUG9kXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBvZFwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJQb2RMaXN0XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBvZExpc3RcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19Qb2RTcGVjXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFjdGl2ZURlYWRsaW5lU2Vjb25kc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiTG9uZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImNvbnRhaW5lcnNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIGNvbnRhaW5lcnMgYmVsb25naW5nIHRvIHRoZSBwb2Q7IGNhbm5vdCBiZSB1cGRhdGVkOyBjb250YWluZXJzIGNhbm5vdCBjdXJyZW50bHkgYmUgYWRkZWQgb3IgcmVtb3ZlZDsgdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgY29udGFpbmVyIGluIGEgUG9kOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9jb250YWluZXJzLm1kXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0NvbnRhaW5lclwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Db250YWluZXJcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJkbnNQb2xpY3lcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRE5TIHBvbGljeSBmb3IgY29udGFpbmVycyB3aXRoaW4gdGhlIHBvZDsgb25lIG9mICdDbHVzdGVyRmlyc3QnIG9yICdEZWZhdWx0J1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImhvc3RcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZGVwcmVjYXRlZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImhvc3ROZXR3b3JrXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJob3N0IG5ldHdvcmtpbmcgcmVxdWVzdGVkIGZvciB0aGlzIHBvZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImltYWdlUHVsbFNlY3JldHNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHJlZmVyZW5jZXMgdG8gc2VjcmV0cyBpbiB0aGUgc2FtZSBuYW1lc3BhY2UgYXZhaWxhYmxlIGZvciBwdWxsaW5nIHRoZSBjb250YWluZXIgaW1hZ2VzOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9pbWFnZXMubWQjc3BlY2lmeWluZy1pbWFnZXB1bGxzZWNyZXRzLW9uLWEtcG9kXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xvY2FsT2JqZWN0UmVmZXJlbmNlXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxvY2FsT2JqZWN0UmVmZXJlbmNlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibm9kZU5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibm9kZSByZXF1ZXN0ZWQgZm9yIHRoaXMgcG9kXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibm9kZVNlbGVjdG9yXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInNlbGVjdG9yIHdoaWNoIG11c3QgbWF0Y2ggYSBub2RlJ3MgbGFiZWxzIGZvciB0aGUgcG9kIHRvIGJlIHNjaGVkdWxlZCBvbiB0aGF0IG5vZGU7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL25vZGUtc2VsZWN0aW9uL1JFQURNRS5tZFwiLFxuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic2VsZWN0b3Igd2hpY2ggbXVzdCBtYXRjaCBhIG5vZGUncyBsYWJlbHMgZm9yIHRoZSBwb2QgdG8gYmUgc2NoZWR1bGVkIG9uIHRoYXQgbm9kZTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvbm9kZS1zZWxlY3Rpb24vUkVBRE1FLm1kXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiamF2YS51dGlsLk1hcFxcdTAwM2NTdHJpbmcsU3RyaW5nXFx1MDAzZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlc3RhcnRQb2xpY3lcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicmVzdGFydCBwb2xpY3kgZm9yIGFsbCBjb250YWluZXJzIHdpdGhpbiB0aGUgcG9kOyBvbmUgb2YgQWx3YXlzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2VydmljZUFjY291bnRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZGVwcmVjYXRlZDsgdXNlIHNlcnZpY2VBY2NvdW50TmFtZSBpbnN0ZWFkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2VydmljZUFjY291bnROYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWUgb2YgdGhlIFNlcnZpY2VBY2NvdW50IHRvIHVzZSB0byBydW4gdGhpcyBwb2Q7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy9kZXNpZ24vc2VydmljZV9hY2NvdW50cy5tZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInRlcm1pbmF0aW9uR3JhY2VQZXJpb2RTZWNvbmRzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJvcHRpb25hbCBkdXJhdGlvbiBpbiBzZWNvbmRzIHRoZSBwb2QgbmVlZHMgdG8gdGVybWluYXRlIGdyYWNlZnVsbHk7IG1heSBiZSBkZWNyZWFzZWQgaW4gZGVsZXRlIHJlcXVlc3Q7IHZhbHVlIG11c3QgYmUgbm9uLW5lZ2F0aXZlIGludGVnZXI7IHRoZSB2YWx1ZSB6ZXJvIGluZGljYXRlcyBkZWxldGUgaW1tZWRpYXRlbHk7IGlmIHRoaXMgdmFsdWUgaXMgbm90IHNldFwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcIkxvbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ2b2x1bWVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiB2b2x1bWVzIHRoYXQgY2FuIGJlIG1vdW50ZWQgYnkgY29udGFpbmVycyBiZWxvbmdpbmcgdG8gdGhlIHBvZDsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvdm9sdW1lcy5tZFwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Wb2x1bWVcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuVm9sdW1lXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUG9kU3BlY1wiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1BvZFN0YXR1c1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJjb25kaXRpb25zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiY3VycmVudCBzZXJ2aWNlIHN0YXRlIG9mIHBvZDsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvcG9kLXN0YXRlcy5tZCNwb2QtY29uZGl0aW9uc1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Qb2RDb25kaXRpb25cIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUG9kQ29uZGl0aW9uXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiY29udGFpbmVyU3RhdHVzZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIGNvbnRhaW5lciBzdGF0dXNlczsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvcG9kLXN0YXRlcy5tZCNjb250YWluZXItc3RhdHVzZXNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfQ29udGFpbmVyU3RhdHVzXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNvbnRhaW5lclN0YXR1c1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImhvc3RJUFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJJUCBhZGRyZXNzIG9mIHRoZSBob3N0IHRvIHdoaWNoIHRoZSBwb2QgaXMgYXNzaWduZWQ7IGVtcHR5IGlmIG5vdCB5ZXQgc2NoZWR1bGVkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWVzc2FnZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJodW1hbiByZWFkYWJsZSBtZXNzYWdlIGluZGljYXRpbmcgZGV0YWlscyBhYm91dCB3aHkgdGhlIHBvZCBpcyBpbiB0aGlzIGNvbmRpdGlvblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBoYXNlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImN1cnJlbnQgY29uZGl0aW9uIG9mIHRoZSBwb2Q7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3BvZC1zdGF0ZXMubWQjcG9kLXBoYXNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicG9kSVBcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSVAgYWRkcmVzcyBhbGxvY2F0ZWQgdG8gdGhlIHBvZDsgcm91dGFibGUgYXQgbGVhc3Qgd2l0aGluIHRoZSBjbHVzdGVyOyBlbXB0eSBpZiBub3QgeWV0IGFsbG9jYXRlZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlYXNvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCIoYnJpZWYtQ2FtZWxDYXNlKSByZWFzb24gaW5kaWNhdGluZyBkZXRhaWxzIGFib3V0IHdoeSB0aGUgcG9kIGlzIGluIHRoaXMgY29uZGl0aW9uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3RhcnRUaW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJGQyAzMzM5IGRhdGUgYW5kIHRpbWUgYXQgd2hpY2ggdGhlIG9iamVjdCB3YXMgYWNrbm93bGVkZ2VkIGJ5IHRoZSBLdWJlbGV0LiAgVGhpcyBpcyBiZWZvcmUgdGhlIEt1YmVsZXQgcHVsbGVkIHRoZSBjb250YWluZXIgaW1hZ2UocykgZm9yIHRoZSBwb2QuXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUG9kU3RhdHVzXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfUG9kVGVtcGxhdGVTcGVjXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3BlY1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUG9kU3BlY1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUG9kU3BlY1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBvZFRlbXBsYXRlU3BlY1wiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1Byb2JlXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImV4ZWNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0V4ZWNBY3Rpb25cIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkV4ZWNBY3Rpb25cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJodHRwR2V0XCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19IVFRQR2V0QWN0aW9uXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IVFRQR2V0QWN0aW9uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaW5pdGlhbERlbGF5U2Vjb25kc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibnVtYmVyIG9mIHNlY29uZHMgYWZ0ZXIgdGhlIGNvbnRhaW5lciBoYXMgc3RhcnRlZCBiZWZvcmUgbGl2ZW5lc3MgcHJvYmVzIGFyZSBpbml0aWF0ZWQ7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3BvZC1zdGF0ZXMubWQjY29udGFpbmVyLXByb2Jlc1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcIkxvbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0Y3BTb2NrZXRcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1RDUFNvY2tldEFjdGlvblwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuVENQU29ja2V0QWN0aW9uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidGltZW91dFNlY29uZHNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm51bWJlciBvZiBzZWNvbmRzIGFmdGVyIHdoaWNoIGxpdmVuZXNzIHByb2JlcyB0aW1lb3V0OyBkZWZhdWx0cyB0byAxIHNlY29uZDsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvcG9kLXN0YXRlcy5tZCNjb250YWluZXItcHJvYmVzXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiTG9uZ1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlByb2JlXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfUkJEVm9sdW1lU291cmNlXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImZzVHlwZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJmaWxlIHN5c3RlbSB0eXBlIHRvIG1vdW50XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaW1hZ2VcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicmFkb3MgaW1hZ2UgbmFtZTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy9yYmQvUkVBRE1FLm1kI2hvdy10by11c2UtaXRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXlyaW5nXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImtleXJpbmcgaXMgdGhlIHBhdGggdG8ga2V5IHJpbmcgZm9yIHJhZG9zIHVzZXI7IGRlZmF1bHQgaXMgL2V0Yy9jZXBoL2tleXJpbmc7IG9wdGlvbmFsOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2V4YW1wbGVzL3JiZC9SRUFETUUubWQjaG93LXRvLXVzZS1pdFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1vbml0b3JzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYSBjb2xsZWN0aW9uIG9mIENlcGggbW9uaXRvcnM7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZXhhbXBsZXMvcmJkL1JFQURNRS5tZCNob3ctdG8tdXNlLWl0XCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhIGNvbGxlY3Rpb24gb2YgQ2VwaCBtb25pdG9yczsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy9yYmQvUkVBRE1FLm1kI2hvdy10by11c2UtaXRcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwb29sXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJhZG9zIHBvb2wgbmFtZTsgZGVmYXVsdCBpcyByYmQ7IG9wdGlvbmFsOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2V4YW1wbGVzL3JiZC9SRUFETUUubWQjaG93LXRvLXVzZS1pdFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlYWRPbmx5XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJyYmQgdm9sdW1lIHRvIGJlIG1vdW50ZWQgd2l0aCByZWFkLW9ubHkgcGVybWlzc2lvbnM7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZXhhbXBsZXMvcmJkL1JFQURNRS5tZCNob3ctdG8tdXNlLWl0XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2VjcmV0UmVmXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Mb2NhbE9iamVjdFJlZmVyZW5jZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTG9jYWxPYmplY3RSZWZlcmVuY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1c2VyXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJhZG9zIHVzZXIgbmFtZTsgZGVmYXVsdCBpcyBhZG1pbjsgb3B0aW9uYWw7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZXhhbXBsZXMvcmJkL1JFQURNRS5tZCNob3ctdG8tdXNlLWl0XCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUkJEVm9sdW1lU291cmNlXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfUmVwbGljYXRpb25Db250cm9sbGVyXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJSZXBsaWNhdGlvbkNvbnRyb2xsZXJcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNwZWNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1JlcGxpY2F0aW9uQ29udHJvbGxlclNwZWNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJlcGxpY2F0aW9uQ29udHJvbGxlclNwZWNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzdGF0dXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1JlcGxpY2F0aW9uQ29udHJvbGxlclN0YXR1c1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVwbGljYXRpb25Db250cm9sbGVyU3RhdHVzXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVwbGljYXRpb25Db250cm9sbGVyXCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfUmVwbGljYXRpb25Db250cm9sbGVyTGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgcmVwbGljYXRpb24gY29udHJvbGxlcnM7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3JlcGxpY2F0aW9uLWNvbnRyb2xsZXIubWRcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUmVwbGljYXRpb25Db250cm9sbGVyXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJlcGxpY2F0aW9uQ29udHJvbGxlclwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJSZXBsaWNhdGlvbkNvbnRyb2xsZXJMaXN0XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJlcGxpY2F0aW9uQ29udHJvbGxlckxpc3RcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19SZXBsaWNhdGlvbkNvbnRyb2xsZXJTcGVjXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcInJlcGxpY2FzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJudW1iZXIgb2YgcmVwbGljYXMgZGVzaXJlZDsgZGVmYXVsdHMgdG8gMTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvcmVwbGljYXRpb24tY29udHJvbGxlci5tZCN3aGF0LWlzLWEtcmVwbGljYXRpb24tY29udHJvbGxlclwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNlbGVjdG9yXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxhYmVsIGtleXMgYW5kIHZhbHVlcyB0aGF0IG11c3QgbWF0Y2ggaW4gb3JkZXIgdG8gYmUgY29udHJvbGxlZCBieSB0aGlzIHJlcGxpY2F0aW9uIGNvbnRyb2xsZXJcIixcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxhYmVsIGtleXMgYW5kIHZhbHVlcyB0aGF0IG11c3QgbWF0Y2ggaW4gb3JkZXIgdG8gYmUgY29udHJvbGxlZCBieSB0aGlzIHJlcGxpY2F0aW9uIGNvbnRyb2xsZXJcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJqYXZhLnV0aWwuTWFwXFx1MDAzY1N0cmluZyxTdHJpbmdcXHUwMDNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidGVtcGxhdGVcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1BvZFRlbXBsYXRlU3BlY1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUG9kVGVtcGxhdGVTcGVjXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVwbGljYXRpb25Db250cm9sbGVyU3BlY1wiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1JlcGxpY2F0aW9uQ29udHJvbGxlclN0YXR1c1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJvYnNlcnZlZEdlbmVyYXRpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJlZmxlY3RzIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBtb3N0IHJlY2VudGx5IG9ic2VydmVkIHJlcGxpY2F0aW9uIGNvbnRyb2xsZXJcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJMb25nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVwbGljYXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm1vc3QgcmVjZW50bHkgb2JlcnZlZCBudW1iZXIgb2YgcmVwbGljYXM7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3JlcGxpY2F0aW9uLWNvbnRyb2xsZXIubWQjd2hhdC1pcy1hLXJlcGxpY2F0aW9uLWNvbnRyb2xsZXJcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SZXBsaWNhdGlvbkNvbnRyb2xsZXJTdGF0dXNcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19SZXNvdXJjZVF1b3RhXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJSZXNvdXJjZVF1b3RhXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzcGVjXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19SZXNvdXJjZVF1b3RhU3BlY1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVzb3VyY2VRdW90YVNwZWNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzdGF0dXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1Jlc291cmNlUXVvdGFTdGF0dXNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJlc291cmNlUXVvdGFTdGF0dXNcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SZXNvdXJjZVF1b3RhXCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfUmVzb3VyY2VRdW90YUxpc3RcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJpdGVtcyBpcyBhIGxpc3Qgb2YgUmVzb3VyY2VRdW90YSBvYmplY3RzOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvZGVzaWduL2FkbWlzc2lvbl9jb250cm9sX3Jlc291cmNlX3F1b3RhLm1kI2FkbWlzc2lvbmNvbnRyb2wtcGx1Z2luLXJlc291cmNlcXVvdGFcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUmVzb3VyY2VRdW90YVwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SZXNvdXJjZVF1b3RhXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlJlc291cmNlUXVvdGFMaXN0XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJlc291cmNlUXVvdGFMaXN0XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfUmVzb3VyY2VRdW90YVNwZWNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiaGFyZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJoYXJkIGlzIHRoZSBzZXQgb2YgZGVzaXJlZCBoYXJkIGxpbWl0cyBmb3IgZWFjaCBuYW1lZCByZXNvdXJjZTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL2Rlc2lnbi9hZG1pc3Npb25fY29udHJvbF9yZXNvdXJjZV9xdW90YS5tZCNhZG1pc3Npb25jb250cm9sLXBsdWdpbi1yZXNvdXJjZXF1b3RhXCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX3Jlc291cmNlX1F1YW50aXR5XCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlF1YW50aXR5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiamF2YS51dGlsLk1hcFxcdTAwM2NTdHJpbmcsaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5RdWFudGl0eVxcdTAwM2VcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SZXNvdXJjZVF1b3RhU3BlY1wiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1Jlc291cmNlUXVvdGFTdGF0dXNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiaGFyZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJoYXJkIGlzIHRoZSBzZXQgb2YgZW5mb3JjZWQgaGFyZCBsaW1pdHMgZm9yIGVhY2ggbmFtZWQgcmVzb3VyY2U7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy9kZXNpZ24vYWRtaXNzaW9uX2NvbnRyb2xfcmVzb3VyY2VfcXVvdGEubWQjYWRtaXNzaW9uY29udHJvbC1wbHVnaW4tcmVzb3VyY2VxdW90YVwiLFxuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19yZXNvdXJjZV9RdWFudGl0eVwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5RdWFudGl0eVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImphdmEudXRpbC5NYXBcXHUwMDNjU3RyaW5nLGlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUXVhbnRpdHlcXHUwMDNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidXNlZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ1c2VkIGlzIHRoZSBjdXJyZW50IG9ic2VydmVkIHRvdGFsIHVzYWdlIG9mIHRoZSByZXNvdXJjZSBpbiB0aGUgbmFtZXNwYWNlXCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX3Jlc291cmNlX1F1YW50aXR5XCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlF1YW50aXR5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiamF2YS51dGlsLk1hcFxcdTAwM2NTdHJpbmcsaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5RdWFudGl0eVxcdTAwM2VcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SZXNvdXJjZVF1b3RhU3RhdHVzXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfUmVzb3VyY2VSZXF1aXJlbWVudHNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwibGltaXRzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk1heGltdW0gYW1vdW50IG9mIGNvbXB1dGUgcmVzb3VyY2VzIGFsbG93ZWQ7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy9kZXNpZ24vcmVzb3VyY2VzLm1kI3Jlc291cmNlLXNwZWNpZmljYXRpb25zXCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX3Jlc291cmNlX1F1YW50aXR5XCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlF1YW50aXR5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiamF2YS51dGlsLk1hcFxcdTAwM2NTdHJpbmcsaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5RdWFudGl0eVxcdTAwM2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZXF1ZXN0c1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJNaW5pbXVtIGFtb3VudCBvZiByZXNvdXJjZXMgcmVxdWVzdGVkOyBpZiBSZXF1ZXN0cyBpcyBvbWl0dGVkIGZvciBhIGNvbnRhaW5lclwiLFxuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19yZXNvdXJjZV9RdWFudGl0eVwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5RdWFudGl0eVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImphdmEudXRpbC5NYXBcXHUwMDNjU3RyaW5nLGlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUXVhbnRpdHlcXHUwMDNlXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVzb3VyY2VSZXF1aXJlbWVudHNcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19SdW5Bc1VzZXJTdHJhdGVneU9wdGlvbnNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzdHJhdGVneSB1c2VkIHRvIGdlbmVyYXRlIFJ1bkFzVXNlclwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInVpZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIHVpZCB0byBhbHdheXMgcnVuIGFzOyByZXF1aXJlZCBmb3IgTXVzdFJ1bkFzXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiTG9uZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInVpZFJhbmdlTWF4XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJtYXggdmFsdWUgZm9yIHJhbmdlIGJhc2VkIGFsbG9jYXRvcnNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJMb25nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidWlkUmFuZ2VNaW5cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm1pbiB2YWx1ZSBmb3IgcmFuZ2UgYmFzZWQgYWxsb2NhdG9yc1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcIkxvbmdcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SdW5Bc1VzZXJTdHJhdGVneU9wdGlvbnNcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19TRUxpbnV4Q29udGV4dFN0cmF0ZWd5T3B0aW9uc1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJzZUxpbnV4T3B0aW9uc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfU0VMaW51eE9wdGlvbnNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNFTGludXhPcHRpb25zXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzdHJhdGVneSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBTRUxpbnV4IGNvbnRleHRcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TRUxpbnV4Q29udGV4dFN0cmF0ZWd5T3B0aW9uc1wiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1NFTGludXhPcHRpb25zXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImxldmVsXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBsZXZlbCBsYWJlbCB0byBhcHBseSB0byB0aGUgY29udGFpbmVyOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9sYWJlbHMubWRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyb2xlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSByb2xlIGxhYmVsIHRvIGFwcGx5IHRvIHRoZSBjb250YWluZXI7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL2xhYmVscy5tZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIHR5cGUgbGFiZWwgdG8gYXBwbHkgdG8gdGhlIGNvbnRhaW5lcjsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvbGFiZWxzLm1kXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidXNlclwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgdXNlciBsYWJlbCB0byBhcHBseSB0byB0aGUgY29udGFpbmVyOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9sYWJlbHMubWRcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TRUxpbnV4T3B0aW9uc1wiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1NlY3JldFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJkYXRhXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImRhdGEgY29udGFpbnMgdGhlIHNlY3JldCBkYXRhLiAgRWFjaCBrZXkgbXVzdCBiZSBhIHZhbGlkIEROU19TVUJET01BSU4gb3IgbGVhZGluZyBkb3QgZm9sbG93ZWQgYnkgdmFsaWQgRE5TX1NVQkRPTUFJTi4gIEVhY2ggdmFsdWUgbXVzdCBiZSBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBhcyBkZXNjcmliZWQgaW4gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ2NDgjc2VjdGlvbi00XCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJkYXRhIGNvbnRhaW5zIHRoZSBzZWNyZXQgZGF0YS4gIEVhY2gga2V5IG11c3QgYmUgYSB2YWxpZCBETlNfU1VCRE9NQUlOIG9yIGxlYWRpbmcgZG90IGZvbGxvd2VkIGJ5IHZhbGlkIEROU19TVUJET01BSU4uICBFYWNoIHZhbHVlIG11c3QgYmUgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgYXMgZGVzY3JpYmVkIGluIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0NjQ4I3NlY3Rpb24tNFwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImphdmEudXRpbC5NYXBcXHUwMDNjU3RyaW5nLFN0cmluZ1xcdTAwM2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiU2VjcmV0XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInR5cGUgZmFjaWxpdGF0ZXMgcHJvZ3JhbW1hdGljIGhhbmRsaW5nIG9mIHNlY3JldCBkYXRhXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VjcmV0XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfU2VjcmV0TGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIml0ZW1zIGlzIGEgbGlzdCBvZiBzZWNyZXQgb2JqZWN0czsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvc2VjcmV0cy5tZFwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19TZWNyZXRcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VjcmV0XCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlNlY3JldExpc3RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VjcmV0TGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1NlY3JldFZvbHVtZVNvdXJjZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJzZWNyZXROYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInNlY3JldE5hbWUgaXMgdGhlIG5hbWUgb2YgYSBzZWNyZXQgaW4gdGhlIHBvZCdzIG5hbWVzcGFjZTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvdm9sdW1lcy5tZCNzZWNyZXRzXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VjcmV0Vm9sdW1lU291cmNlXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfU2VjdXJpdHlDb250ZXh0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImNhcGFiaWxpdGllc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfQ2FwYWJpbGl0aWVzXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5DYXBhYmlsaXRpZXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwcml2aWxlZ2VkXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJydW4gdGhlIGNvbnRhaW5lciBpbiBwcml2aWxlZ2VkIG1vZGU7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy9kZXNpZ24vc2VjdXJpdHlfY29udGV4dC5tZCNzZWN1cml0eS1jb250ZXh0XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicnVuQXNOb25Sb290XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJpbmRpY2F0ZXMgdGhlIGNvbnRhaW5lciBtdXN0IGJlIHJ1biBhcyBhIG5vbi1yb290IHVzZXIgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIHJ1bkFzVXNlciBvciBpbiB0aGUgaW1hZ2Ugc3BlY2lmaWNhdGlvblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJ1bkFzVXNlclwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIHVzZXIgaWQgdGhhdCBydW5zIHRoZSBmaXJzdCBwcm9jZXNzIGluIHRoZSBjb250YWluZXI7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy9kZXNpZ24vc2VjdXJpdHlfY29udGV4dC5tZCNzZWN1cml0eS1jb250ZXh0XCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiTG9uZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNlTGludXhPcHRpb25zXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19TRUxpbnV4T3B0aW9uc1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU0VMaW51eE9wdGlvbnNcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZWN1cml0eUNvbnRleHRcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19TZWN1cml0eUNvbnRleHRDb25zdHJhaW50c1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhbGxvd0hvc3REaXJWb2x1bWVQbHVnaW5cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFsbG93IHRoZSB1c2Ugb2YgdGhlIGhvc3QgZGlyIHZvbHVtZSBwbHVnaW5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJhbGxvd0hvc3ROZXR3b3JrXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbGxvdyB0aGUgdXNlIG9mIHRoZSBob3N0TmV0d29yayBpbiB0aGUgcG9kIHNwZWNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJhbGxvd0hvc3RQb3J0c1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYWxsb3cgdGhlIHVzZSBvZiB0aGUgaG9zdCBwb3J0cyBpbiB0aGUgY29udGFpbmVyc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImFsbG93UHJpdmlsZWdlZENvbnRhaW5lclwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYWxsb3cgY29udGFpbmVycyB0byBydW4gYXMgcHJpdmlsZWdlZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImFsbG93ZWRDYXBhYmlsaXRpZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJjYXBhYmlsaXRpZXMgdGhhdCBhcmUgYWxsb3dlZCB0byBiZSBhZGRlZFwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiY2FwYWJpbGl0aWVzIHRoYXQgYXJlIGFsbG93ZWQgdG8gYmUgYWRkZWRcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJncm91cHNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJncm91cHMgYWxsb3dlZCB0byB1c2UgdGhpcyBTZWN1cml0eUNvbnRleHRDb25zdHJhaW50c1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZ3JvdXBzIGFsbG93ZWQgdG8gdXNlIHRoaXMgU2VjdXJpdHlDb250ZXh0Q29uc3RyYWludHNcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiU2VjdXJpdHlDb250ZXh0Q29uc3RyYWludHNcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJ1bkFzVXNlclwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUnVuQXNVc2VyU3RyYXRlZ3lPcHRpb25zXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SdW5Bc1VzZXJTdHJhdGVneU9wdGlvbnNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZUxpbnV4Q29udGV4dFwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfU0VMaW51eENvbnRleHRTdHJhdGVneU9wdGlvbnNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNFTGludXhDb250ZXh0U3RyYXRlZ3lPcHRpb25zXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidXNlcnNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ1c2VycyBhbGxvd2VkIHRvIHVzZSB0aGlzIFNlY3VyaXR5Q29udGV4dENvbnN0cmFpbnRzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ1c2VycyBhbGxvd2VkIHRvIHVzZSB0aGlzIFNlY3VyaXR5Q29udGV4dENvbnN0cmFpbnRzXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VjdXJpdHlDb250ZXh0Q29uc3RyYWludHNcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19TZWN1cml0eUNvbnRleHRDb25zdHJhaW50c0xpc3RcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfU2VjdXJpdHlDb250ZXh0Q29uc3RyYWludHNcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VjdXJpdHlDb250ZXh0Q29uc3RyYWludHNcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiU2VjdXJpdHlDb250ZXh0Q29uc3RyYWludHNMaXN0XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlY3VyaXR5Q29udGV4dENvbnN0cmFpbnRzTGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1NlcnZpY2VcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlNlcnZpY2VcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNwZWNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1NlcnZpY2VTcGVjXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZXJ2aWNlU3BlY1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInN0YXR1c1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfU2VydmljZVN0YXR1c1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VydmljZVN0YXR1c1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlcnZpY2VcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19TZXJ2aWNlQWNjb3VudFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpbWFnZVB1bGxTZWNyZXRzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiByZWZlcmVuY2VzIHRvIHNlY3JldHMgaW4gdGhlIHNhbWUgbmFtZXNwYWNlIGF2YWlsYWJsZSBmb3IgcHVsbGluZyBjb250YWluZXIgaW1hZ2VzOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9zZWNyZXRzLm1kI21hbnVhbGx5LXNwZWNpZnlpbmctYW4taW1hZ2VwdWxsc2VjcmV0XCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xvY2FsT2JqZWN0UmVmZXJlbmNlXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxvY2FsT2JqZWN0UmVmZXJlbmNlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlNlcnZpY2VBY2NvdW50XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZWNyZXRzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBzZWNyZXRzIHRoYXQgY2FuIGJlIHVzZWQgYnkgcG9kcyBydW5uaW5nIGFzIHRoaXMgc2VydmljZSBhY2NvdW50OyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9zZWNyZXRzLm1kXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdFJlZmVyZW5jZVwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RSZWZlcmVuY2VcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZXJ2aWNlQWNjb3VudFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1NlcnZpY2VBY2NvdW50TGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgU2VydmljZUFjY291bnRzOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvZGVzaWduL3NlcnZpY2VfYWNjb3VudHMubWQjc2VydmljZS1hY2NvdW50c1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19TZXJ2aWNlQWNjb3VudFwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZXJ2aWNlQWNjb3VudFwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJTZXJ2aWNlQWNjb3VudExpc3RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VydmljZUFjY291bnRMaXN0XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfU2VydmljZUxpc3RcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHNlcnZpY2VzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1NlcnZpY2VcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VydmljZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJTZXJ2aWNlTGlzdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZXJ2aWNlTGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1NlcnZpY2VQb3J0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIG5hbWUgb2YgdGhpcyBwb3J0OyBvcHRpb25hbCBpZiBvbmx5IG9uZSBwb3J0IGlzIGRlZmluZWRcIixcbiAgICAgICAgICAgIFwibWF4TGVuZ3RoXCI6IDYzLFxuICAgICAgICAgICAgXCJwYXR0ZXJuXCI6IFwiXlthLXowLTldKFstYS16MC05XSpbYS16MC05XSk/JFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm5vZGVQb3J0XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgcG9ydCBvbiBlYWNoIG5vZGUgb24gd2hpY2ggdGhpcyBzZXJ2aWNlIGlzIGV4cG9zZWQgd2hlbiB0eXBlPU5vZGVQb3J0IG9yIExvYWRCYWxhbmNlcjsgdXN1YWxseSBhc3NpZ25lZCBieSB0aGUgc3lzdGVtOyBpZiBzcGVjaWZpZWRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwb3J0XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgcG9ydCBudW1iZXIgdGhhdCBpcyBleHBvc2VkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicHJvdG9jb2xcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIHByb3RvY29sIHVzZWQgYnkgdGhpcyBwb3J0OyBtdXN0IGJlIFVEUCBvciBUQ1A7IFRDUCBpZiB1bnNwZWNpZmllZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInRhcmdldFBvcnRcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX3V0aWxfSW50T3JTdHJpbmdcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkludE9yU3RyaW5nXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VydmljZVBvcnRcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19TZXJ2aWNlU3BlY1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJjbHVzdGVySVBcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSVAgYWRkcmVzcyBvZiB0aGUgc2VydmljZTsgdXN1YWxseSBhc3NpZ25lZCBieSB0aGUgc3lzdGVtOyBpZiBzcGVjaWZpZWRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJkZXByZWNhdGVkUHVibGljSVBzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZGVwcmVjYXRlZC4gZXh0ZXJuYWxseSB2aXNpYmxlIElQcyAoZS5nLiBsb2FkIGJhbGFuY2VycykgdGhhdCBzaG91bGQgYmUgcHJveGllZCB0byB0aGlzIHNlcnZpY2VcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImRlcHJlY2F0ZWQuIGV4dGVybmFsbHkgdmlzaWJsZSBJUHMgKGUuZy4gbG9hZCBiYWxhbmNlcnMpIHRoYXQgc2hvdWxkIGJlIHByb3hpZWQgdG8gdGhpcyBzZXJ2aWNlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicG9ydGFsSVBcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZGVwcmVjYXRlZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBvcnRzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicG9ydHMgZXhwb3NlZCBieSB0aGUgc2VydmljZTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvc2VydmljZXMubWQjdmlydHVhbC1pcHMtYW5kLXNlcnZpY2UtcHJveGllc1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19TZXJ2aWNlUG9ydFwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZXJ2aWNlUG9ydFwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNlbGVjdG9yXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxhYmVsIGtleXMgYW5kIHZhbHVlcyB0aGF0IG11c3QgbWF0Y2ggaW4gb3JkZXIgdG8gcmVjZWl2ZSB0cmFmZmljIGZvciB0aGlzIHNlcnZpY2U7IGlmIGVtcHR5XCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsYWJlbCBrZXlzIGFuZCB2YWx1ZXMgdGhhdCBtdXN0IG1hdGNoIGluIG9yZGVyIHRvIHJlY2VpdmUgdHJhZmZpYyBmb3IgdGhpcyBzZXJ2aWNlOyBpZiBlbXB0eVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImphdmEudXRpbC5NYXBcXHUwMDNjU3RyaW5nLFN0cmluZ1xcdTAwM2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZXNzaW9uQWZmaW5pdHlcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZW5hYmxlIGNsaWVudCBJUCBiYXNlZCBzZXNzaW9uIGFmZmluaXR5OyBtdXN0IGJlIENsaWVudElQIG9yIE5vbmU7IGRlZmF1bHRzIHRvIE5vbmU7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3NlcnZpY2VzLm1kI3ZpcnR1YWwtaXBzLWFuZC1zZXJ2aWNlLXByb3hpZXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInR5cGUgb2YgdGhpcyBzZXJ2aWNlOyBtdXN0IGJlIENsdXN0ZXJJUFwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlcnZpY2VTcGVjXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfU2VydmljZVN0YXR1c1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJsb2FkQmFsYW5jZXJcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xvYWRCYWxhbmNlclN0YXR1c1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTG9hZEJhbGFuY2VyU3RhdHVzXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VydmljZVN0YXR1c1wiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1N0YXR1c1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjb2RlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzdWdnZXN0ZWQgSFRUUCByZXR1cm4gY29kZSBmb3IgdGhpcyBzdGF0dXM7IDAgaWYgbm90IHNldFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImRldGFpbHNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1N0YXR1c0RldGFpbHNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlN0YXR1c0RldGFpbHNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiU3RhdHVzXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWVzc2FnZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgc3RhdHVzIG9mIHRoaXMgb3BlcmF0aW9uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlYXNvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJtYWNoaW5lLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHdoeSB0aGlzIG9wZXJhdGlvbiBpcyBpbiB0aGUgJ0ZhaWx1cmUnIHN0YXR1czsgaWYgdGhpcyB2YWx1ZSBpcyBlbXB0eSB0aGVyZSBpcyBubyBpbmZvcm1hdGlvbiBhdmFpbGFibGU7IGEgcmVhc29uIGNsYXJpZmllcyBhbiBIVFRQIHN0YXR1cyBjb2RlIGJ1dCBkb2VzIG5vdCBvdmVycmlkZSBpdFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInN0YXR1c1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzdGF0dXMgb2YgdGhlIG9wZXJhdGlvbjsgZWl0aGVyIFN1Y2Nlc3NcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TdGF0dXNcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19TdGF0dXNDYXVzZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJmaWVsZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJmaWVsZCBvZiB0aGUgcmVzb3VyY2UgdGhhdCBoYXMgY2F1c2VkIHRoaXMgZXJyb3JcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXNzYWdlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoZSBjYXVzZSBvZiB0aGUgZXJyb3I7IHRoaXMgZmllbGQgbWF5IGJlIHByZXNlbnRlZCBhcy1pcyB0byBhIHJlYWRlclwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlYXNvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJtYWNoaW5lLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoZSBjYXVzZSBvZiB0aGUgZXJyb3I7IGlmIHRoaXMgdmFsdWUgaXMgZW1wdHkgdGhlcmUgaXMgbm8gaW5mb3JtYXRpb24gYXZhaWxhYmxlXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU3RhdHVzQ2F1c2VcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19TdGF0dXNEZXRhaWxzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImNhdXNlc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBDYXVzZXMgYXJyYXkgaW5jbHVkZXMgbW9yZSBkZXRhaWxzIGFzc29jaWF0ZWQgd2l0aCB0aGUgU3RhdHVzUmVhc29uIGZhaWx1cmU7IG5vdCBhbGwgU3RhdHVzUmVhc29ucyBtYXkgcHJvdmlkZSBkZXRhaWxlZCBjYXVzZXNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfU3RhdHVzQ2F1c2VcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU3RhdHVzQ2F1c2VcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBraW5kIGF0dHJpYnV0ZSBvZiB0aGUgcmVzb3VyY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdGF0dXMgU3RhdHVzUmVhc29uOyBvbiBzb21lIG9wZXJhdGlvbnMgbWF5IGRpZmZlciBmcm9tIHRoZSByZXF1ZXN0ZWQgcmVzb3VyY2UgS2luZDsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCN0eXBlcy1raW5kc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIG5hbWUgYXR0cmlidXRlIG9mIHRoZSByZXNvdXJjZSBhc3NvY2lhdGVkIHdpdGggdGhlIHN0YXR1cyBTdGF0dXNSZWFzb24gKHdoZW4gdGhlcmUgaXMgYSBzaW5nbGUgbmFtZSB3aGljaCBjYW4gYmUgZGVzY3JpYmVkKVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJldHJ5QWZ0ZXJTZWNvbmRzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgbnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlIHRoZSBjbGllbnQgc2hvdWxkIGF0dGVtcHQgdG8gcmV0cnkgdGhpcyBvcGVyYXRpb25cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TdGF0dXNEZXRhaWxzXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfVENQU29ja2V0QWN0aW9uXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcInBvcnRcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX3V0aWxfSW50T3JTdHJpbmdcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkludE9yU3RyaW5nXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuVENQU29ja2V0QWN0aW9uXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfVHlwZU1ldGFcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ2ZXJzaW9uIG9mIHRoZSBzY2hlbWEgdGhlIG9iamVjdCBzaG91bGQgaGF2ZTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCNyZXNvdXJjZXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImtpbmQgb2Ygb2JqZWN0XCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuVHlwZU1ldGFcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19Wb2x1bWVcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXdzRWxhc3RpY0Jsb2NrU3RvcmVcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0FXU0VsYXN0aWNCbG9ja1N0b3JlVm9sdW1lU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5BV1NFbGFzdGljQmxvY2tTdG9yZVZvbHVtZVNvdXJjZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImNlcGhmc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfQ2VwaEZTVm9sdW1lU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5DZXBoRlNWb2x1bWVTb3VyY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJlbXB0eURpclwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRW1wdHlEaXJWb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVtcHR5RGlyVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2NlUGVyc2lzdGVudERpc2tcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0dDRVBlcnNpc3RlbnREaXNrVm9sdW1lU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5HQ0VQZXJzaXN0ZW50RGlza1ZvbHVtZVNvdXJjZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdpdFJlcG9cIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0dpdFJlcG9Wb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkdpdFJlcG9Wb2x1bWVTb3VyY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnbHVzdGVyZnNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0dsdXN0ZXJmc1ZvbHVtZVNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuR2x1c3RlcmZzVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaG9zdFBhdGhcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0hvc3RQYXRoVm9sdW1lU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Ib3N0UGF0aFZvbHVtZVNvdXJjZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImlzY3NpXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19JU0NTSVZvbHVtZVNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSVNDU0lWb2x1bWVTb3VyY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTWV0YWRhdGFWb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk1ldGFkYXRhVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ2b2x1bWUgbmFtZTsgbXVzdCBiZSBhIEROU19MQUJFTCBhbmQgdW5pcXVlIHdpdGhpbiB0aGUgcG9kOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9pZGVudGlmaWVycy5tZCNuYW1lc1wiLFxuICAgICAgICAgICAgXCJtYXhMZW5ndGhcIjogNjMsXG4gICAgICAgICAgICBcInBhdHRlcm5cIjogXCJeW2EtejAtOV0oWy1hLXowLTldKlthLXowLTldKT8kXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibmZzXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19ORlNWb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5GU1ZvbHVtZVNvdXJjZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBlcnNpc3RlbnRWb2x1bWVDbGFpbVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUGVyc2lzdGVudFZvbHVtZUNsYWltVm9sdW1lU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1Wb2x1bWVTb3VyY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyYmRcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1JCRFZvbHVtZVNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUkJEVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2VjcmV0XCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19TZWNyZXRWb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlY3JldFZvbHVtZVNvdXJjZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlZvbHVtZVwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX1ZvbHVtZU1vdW50XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcIm1vdW50UGF0aFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJwYXRoIHdpdGhpbiB0aGUgY29udGFpbmVyIGF0IHdoaWNoIHRoZSB2b2x1bWUgc2hvdWxkIGJlIG1vdW50ZWRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWUgb2YgdGhlIHZvbHVtZSB0byBtb3VudFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlYWRPbmx5XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJtb3VudGVkIHJlYWQtb25seSBpZiB0cnVlXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuVm9sdW1lTW91bnRcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19Wb2x1bWVTb3VyY2VcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXdzRWxhc3RpY0Jsb2NrU3RvcmVcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0FXU0VsYXN0aWNCbG9ja1N0b3JlVm9sdW1lU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5BV1NFbGFzdGljQmxvY2tTdG9yZVZvbHVtZVNvdXJjZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImNlcGhmc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfQ2VwaEZTVm9sdW1lU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5DZXBoRlNWb2x1bWVTb3VyY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJlbXB0eURpclwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRW1wdHlEaXJWb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVtcHR5RGlyVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2NlUGVyc2lzdGVudERpc2tcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0dDRVBlcnNpc3RlbnREaXNrVm9sdW1lU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5HQ0VQZXJzaXN0ZW50RGlza1ZvbHVtZVNvdXJjZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdpdFJlcG9cIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0dpdFJlcG9Wb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkdpdFJlcG9Wb2x1bWVTb3VyY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnbHVzdGVyZnNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0dsdXN0ZXJmc1ZvbHVtZVNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuR2x1c3RlcmZzVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaG9zdFBhdGhcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0hvc3RQYXRoVm9sdW1lU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Ib3N0UGF0aFZvbHVtZVNvdXJjZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImlzY3NpXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19JU0NTSVZvbHVtZVNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSVNDU0lWb2x1bWVTb3VyY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTWV0YWRhdGFWb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk1ldGFkYXRhVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibmZzXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19ORlNWb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5GU1ZvbHVtZVNvdXJjZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBlcnNpc3RlbnRWb2x1bWVDbGFpbVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUGVyc2lzdGVudFZvbHVtZUNsYWltVm9sdW1lU291cmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1Wb2x1bWVTb3VyY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyYmRcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1JCRFZvbHVtZVNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUkJEVm9sdW1lU291cmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2VjcmV0XCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19TZWNyZXRWb2x1bWVTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlY3JldFZvbHVtZVNvdXJjZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlZvbHVtZVNvdXJjZVwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX2NvbmZpZ19BdXRoSW5mb1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJjbGllbnQtY2VydGlmaWNhdGVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiY2xpZW50LWNlcnRpZmljYXRlLWRhdGFcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiY2xpZW50LWtleVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjbGllbnQta2V5LWRhdGFcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZXh0ZW5zaW9uc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19jb25maWdfTmFtZWRFeHRlbnNpb25cIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTmFtZWRFeHRlbnNpb25cIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXNzd29yZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0b2tlblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1c2VybmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5BdXRoSW5mb1wiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX2NvbmZpZ19DbHVzdGVyXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaS12ZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImNlcnRpZmljYXRlLWF1dGhvcml0eVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjZXJ0aWZpY2F0ZS1hdXRob3JpdHktZGF0YVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJleHRlbnNpb25zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX2NvbmZpZ19OYW1lZEV4dGVuc2lvblwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5OYW1lZEV4dGVuc2lvblwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImluc2VjdXJlLXNraXAtdGxzLXZlcmlmeVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2VydmVyXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNsdXN0ZXJcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19jb25maWdfQ29uZmlnXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiY2x1c3RlcnNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfY29uZmlnX05hbWVkQ2x1c3RlclwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5OYW1lZENsdXN0ZXJcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjb250ZXh0c1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19jb25maWdfTmFtZWRDb250ZXh0XCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5hbWVkQ29udGV4dFwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImN1cnJlbnQtY29udGV4dFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJleHRlbnNpb25zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX2NvbmZpZ19OYW1lZEV4dGVuc2lvblwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5OYW1lZEV4dGVuc2lvblwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicHJlZmVyZW5jZXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX2NvbmZpZ19QcmVmZXJlbmNlc1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUHJlZmVyZW5jZXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1c2Vyc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19jb25maWdfTmFtZWRBdXRoSW5mb1wiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5OYW1lZEF1dGhJbmZvXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ29uZmlnXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfY29uZmlnX0NvbnRleHRcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiY2x1c3RlclwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJleHRlbnNpb25zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX2NvbmZpZ19OYW1lZEV4dGVuc2lvblwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5OYW1lZEV4dGVuc2lvblwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm5hbWVzcGFjZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1c2VyXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNvbnRleHRcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19jb25maWdfTmFtZWRBdXRoSW5mb1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInVzZXJcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX2NvbmZpZ19BdXRoSW5mb1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQXV0aEluZm9cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5OYW1lZEF1dGhJbmZvXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfY29uZmlnX05hbWVkQ2x1c3RlclwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJjbHVzdGVyXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19jb25maWdfQ2x1c3RlclwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ2x1c3RlclwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTmFtZWRDbHVzdGVyXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfY29uZmlnX05hbWVkQ29udGV4dFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJjb250ZXh0XCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19jb25maWdfQ29udGV4dFwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ29udGV4dFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTmFtZWRDb250ZXh0XCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfY29uZmlnX05hbWVkRXh0ZW5zaW9uXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImV4dGVuc2lvblwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfcnVudGltZV9SYXdFeHRlbnNpb25cIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5OYW1lZEV4dGVuc2lvblwiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX2NvbmZpZ19QcmVmZXJlbmNlc1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJjb2xvcnNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImV4dGVuc2lvbnNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfY29uZmlnX05hbWVkRXh0ZW5zaW9uXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5hbWVkRXh0ZW5zaW9uXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUHJlZmVyZW5jZXNcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19yZXNvdXJjZV9RdWFudGl0eVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJBbW91bnRcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zcGV0ZXJfaW5mX0RlY1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5EZWNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJGb3JtYXRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUXVhbnRpdHlcIlxuICAgICAgfSxcbiAgICAgIFwia3ViZXJuZXRlc19ydW50aW1lX1Jhd0V4dGVuc2lvblwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJSYXdKU09OXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgIH0sXG4gICAgICBcImt1YmVybmV0ZXNfdXRpbF9JbnRPclN0cmluZ1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJJbnRWYWxcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIktpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIlN0clZhbFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5JbnRPclN0cmluZ1wiXG4gICAgICB9LFxuICAgICAgXCJrdWJlcm5ldGVzX3dhdGNoX1dhdGNoRXZlbnRcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwib2JqZWN0XCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19ydW50aW1lX1Jhd0V4dGVuc2lvblwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSB0eXBlIG9mIHdhdGNoIGV2ZW50OyBtYXkgYmUgQURERURcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5XYXRjaEV2ZW50XCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2F1dGhvcml6YXRpb25fQXV0aG9yaXphdGlvbkF0dHJpYnV0ZXNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiY29udGVudFwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfcnVudGltZV9SYXdFeHRlbnNpb25cIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibmFtZXNwYWNlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWVzcGFjZSBvZiB0aGUgYWN0aW9uIGJlaW5nIHJlcXVlc3RlZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlc291cmNlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9uZSBvZiB0aGUgZXhpc3RpbmcgcmVzb3VyY2UgdHlwZXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZXNvdXJjZU5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibmFtZSBvZiB0aGUgcmVzb3VyY2UgYmVpbmcgcmVxdWVzdGVkIGZvciBhIGdldCBvciBkZWxldGVcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ2ZXJiXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9uZSBvZiBnZXRcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkF1dGhvcml6YXRpb25BdHRyaWJ1dGVzXCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2F1dGhvcml6YXRpb25fQ2x1c3RlclBvbGljeVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiQ2x1c3RlclBvbGljeVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImxhc3RNb2RpZmllZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsYXN0IHRpbWUgYW55IHBhcnQgb2YgdGhlIG9iamVjdCB3YXMgY3JlYXRlZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicm9sZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbGwgdGhlIHJvbGVzIGhlbGQgYnkgdGhpcyBwb2xpY3lcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fTmFtZWRDbHVzdGVyUm9sZVwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk5hbWVkQ2x1c3RlclJvbGVcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkNsdXN0ZXJQb2xpY3lcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwib3NfYXV0aG9yaXphdGlvbl9DbHVzdGVyUG9saWN5QmluZGluZ1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiQ2x1c3RlclBvbGljeUJpbmRpbmdcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJsYXN0TW9kaWZpZWRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGFzdCB0aW1lIGFueSBwYXJ0IG9mIHRoZSBvYmplY3Qgd2FzIGNyZWF0ZWRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBvbGljeVJlZlwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RSZWZlcmVuY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyb2xlQmluZGluZ3NcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbGwgdGhlIHJvbGUgYmluZGluZ3MgaGVsZCBieSB0aGlzIHBvbGljeVwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9OYW1lZENsdXN0ZXJSb2xlQmluZGluZ1wiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk5hbWVkQ2x1c3RlclJvbGVCaW5kaW5nXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5DbHVzdGVyUG9saWN5QmluZGluZ1wiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19hdXRob3JpemF0aW9uX0NsdXN0ZXJQb2xpY3lCaW5kaW5nTGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgY2x1c3RlciBwb2xpY3kgYmluZGluZ3NcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fQ2x1c3RlclBvbGljeUJpbmRpbmdcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5DbHVzdGVyUG9saWN5QmluZGluZ1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJDbHVzdGVyUG9saWN5QmluZGluZ0xpc3RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5DbHVzdGVyUG9saWN5QmluZGluZ0xpc3RcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwib3NfYXV0aG9yaXphdGlvbl9DbHVzdGVyUG9saWN5TGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgY2x1c3RlciBwb2xpY2llc1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9DbHVzdGVyUG9saWN5XCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQ2x1c3RlclBvbGljeVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJDbHVzdGVyUG9saWN5TGlzdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkNsdXN0ZXJQb2xpY3lMaXN0XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX2F1dGhvcml6YXRpb25fQ2x1c3RlclJvbGVcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkNsdXN0ZXJSb2xlXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJydWxlc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgcG9saWN5IHJ1bGVzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX1BvbGljeVJ1bGVcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Qb2xpY3lSdWxlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5DbHVzdGVyUm9sZVwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19hdXRob3JpemF0aW9uX0NsdXN0ZXJSb2xlQmluZGluZ1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJncm91cE5hbWVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYWxsIHRoZSBncm91cHMgZGlyZWN0bHkgYm91bmQgdG8gdGhlIHJvbGVcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFsbCB0aGUgZ3JvdXBzIGRpcmVjdGx5IGJvdW5kIHRvIHRoZSByb2xlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkNsdXN0ZXJSb2xlQmluZGluZ1wiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicm9sZVJlZlwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RSZWZlcmVuY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzdWJqZWN0c1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJlZmVyZW5jZXMgdG8gc3ViamVjdHMgYm91bmQgdG8gdGhlIHJvbGUuICBPbmx5IFVzZXJcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInVzZXJOYW1lc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFsbCB1c2VyIG5hbWVzIGRpcmVjdGx5IGJvdW5kIHRvIHRoZSByb2xlXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbGwgdXNlciBuYW1lcyBkaXJlY3RseSBib3VuZCB0byB0aGUgcm9sZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQ2x1c3RlclJvbGVCaW5kaW5nXCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX2F1dGhvcml6YXRpb25fQ2x1c3RlclJvbGVCaW5kaW5nTGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgY2x1c3RlciByb2xlIGJpbmRpbmdzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX0NsdXN0ZXJSb2xlQmluZGluZ1wiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkNsdXN0ZXJSb2xlQmluZGluZ1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJDbHVzdGVyUm9sZUJpbmRpbmdMaXN0XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQ2x1c3RlclJvbGVCaW5kaW5nTGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19hdXRob3JpemF0aW9uX0xvY2FsU3ViamVjdEFjY2Vzc1Jldmlld1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJUeXBlTWV0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfVHlwZU1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlR5cGVNZXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiY29udGVudFwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfcnVudGltZV9SYXdFeHRlbnNpb25cIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ3JvdXBzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib3B0aW9uYWxcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9wdGlvbmFsXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibmFtZXNwYWNlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWVzcGFjZSBvZiB0aGUgYWN0aW9uIGJlaW5nIHJlcXVlc3RlZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlc291cmNlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9uZSBvZiB0aGUgZXhpc3RpbmcgcmVzb3VyY2UgdHlwZXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZXNvdXJjZU5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibmFtZSBvZiB0aGUgcmVzb3VyY2UgYmVpbmcgcmVxdWVzdGVkIGZvciBhIGdldCBvciBkZWxldGVcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1c2VyXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9wdGlvbmFsXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidmVyYlwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJvbmUgb2YgZ2V0XCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Mb2NhbFN1YmplY3RBY2Nlc3NSZXZpZXdcIlxuICAgICAgfSxcbiAgICAgIFwib3NfYXV0aG9yaXphdGlvbl9OYW1lZENsdXN0ZXJSb2xlXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibmFtZSBvZiB0aGUgY2x1c3RlciByb2xlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicm9sZVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fQ2x1c3RlclJvbGVcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQ2x1c3RlclJvbGVcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk5hbWVkQ2x1c3RlclJvbGVcIlxuICAgICAgfSxcbiAgICAgIFwib3NfYXV0aG9yaXphdGlvbl9OYW1lZENsdXN0ZXJSb2xlQmluZGluZ1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWUgb2YgdGhlIGNsdXN0ZXIgcm9sZSBiaW5kaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicm9sZUJpbmRpbmdcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX0NsdXN0ZXJSb2xlQmluZGluZ1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5DbHVzdGVyUm9sZUJpbmRpbmdcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk5hbWVkQ2x1c3RlclJvbGVCaW5kaW5nXCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2F1dGhvcml6YXRpb25fTmFtZWRSb2xlXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibmFtZSBvZiB0aGUgcm9sZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJvbGVcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX1JvbGVcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUm9sZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuTmFtZWRSb2xlXCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2F1dGhvcml6YXRpb25fTmFtZWRSb2xlQmluZGluZ1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWUgb2YgdGhlIHJvbGVCaW5kaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicm9sZUJpbmRpbmdcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX1JvbGVCaW5kaW5nXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlJvbGVCaW5kaW5nXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5OYW1lZFJvbGVCaW5kaW5nXCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2F1dGhvcml6YXRpb25fUG9saWN5XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJQb2xpY3lcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJsYXN0TW9kaWZpZWRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGFzdCB0aW1lIHRoYXQgYW55IHBhcnQgb2YgdGhlIHBvbGljeSB3YXMgY3JlYXRlZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicm9sZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJyb2xlcyBoZWxkIGJ5IHRoaXMgcG9saWN5XCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX05hbWVkUm9sZVwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk5hbWVkUm9sZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUG9saWN5XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX2F1dGhvcml6YXRpb25fUG9saWN5QmluZGluZ1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiUG9saWN5QmluZGluZ1wiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImxhc3RNb2RpZmllZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsYXN0IHRpbWUgdGhhdCBhbnkgcGFydCBvZiB0aGUgb2JqZWN0IHdhcyBjcmVhdGVkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwb2xpY3lSZWZcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdFJlZmVyZW5jZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0UmVmZXJlbmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicm9sZUJpbmRpbmdzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYWxsIHJvbGVCaW5kaW5ncyBoZWxkIGJ5IHRoaXMgcG9saWN5QmluZGluZ1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9OYW1lZFJvbGVCaW5kaW5nXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuTmFtZWRSb2xlQmluZGluZ1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUG9saWN5QmluZGluZ1wiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19hdXRob3JpemF0aW9uX1BvbGljeUJpbmRpbmdMaXN0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBwb2xpY3kgYmluZGluZ3NcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fUG9saWN5QmluZGluZ1wiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlBvbGljeUJpbmRpbmdcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiUG9saWN5QmluZGluZ0xpc3RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Qb2xpY3lCaW5kaW5nTGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19hdXRob3JpemF0aW9uX1BvbGljeUxpc3RcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHBvbGljaWVzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX1BvbGljeVwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlBvbGljeVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJQb2xpY3lMaXN0XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUG9saWN5TGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19hdXRob3JpemF0aW9uX1BvbGljeVJ1bGVcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXR0cmlidXRlUmVzdHJpY3Rpb25zXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19ydW50aW1lX1Jhd0V4dGVuc2lvblwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJub25SZXNvdXJjZVVSTHNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzZXQgb2YgcGFydGlhbCB1cmxzIHRoYXQgYSB1c2VyIHNob3VsZCBoYXZlIGFjY2VzcyB0by4gKnMgYXJlIGFsbG93ZWRcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInNldCBvZiBwYXJ0aWFsIHVybHMgdGhhdCBhIHVzZXIgc2hvdWxkIGhhdmUgYWNjZXNzIHRvLiAqcyBhcmUgYWxsb3dlZFwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlc291cmNlTmFtZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJvcHRpb25hbCB3aGl0ZSBsaXN0IG9mIG5hbWVzIHRoYXQgdGhlIHJ1bGUgYXBwbGllcyB0by4gIEFuIGVtcHR5IHNldCBtZWFucyB0aGF0IGV2ZXJ5dGhpbmcgaXMgYWxsb3dlZC5cIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9wdGlvbmFsIHdoaXRlIGxpc3Qgb2YgbmFtZXMgdGhhdCB0aGUgcnVsZSBhcHBsaWVzIHRvLiAgQW4gZW1wdHkgc2V0IG1lYW5zIHRoYXQgZXZlcnl0aGluZyBpcyBhbGxvd2VkLlwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlc291cmNlc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgcmVzb3VyY2VzIHRoaXMgcnVsZSBhcHBsaWVzIHRvLiAgKiByZXByZXNlbnRzIGFsbCByZXNvdXJjZXMuXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHJlc291cmNlcyB0aGlzIHJ1bGUgYXBwbGllcyB0by4gICogcmVwcmVzZW50cyBhbGwgcmVzb3VyY2VzLlwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInZlcmJzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiB2ZXJicyB0aGF0IGFwcGx5IHRvIEFMTCB0aGUgcmVzb3VyY2VLaW5kcyBhbmQgYXR0cmlidXRlUmVzdHJpY3Rpb25zIGNvbnRhaW5lZCBpbiB0aGlzIHJ1bGUuICBUaGUgdmVyYiAqIHJlcHJlc2VudHMgYWxsIGtpbmRzLlwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiB2ZXJicyB0aGF0IGFwcGx5IHRvIEFMTCB0aGUgcmVzb3VyY2VLaW5kcyBhbmQgYXR0cmlidXRlUmVzdHJpY3Rpb25zIGNvbnRhaW5lZCBpbiB0aGlzIHJ1bGUuICBUaGUgdmVyYiAqIHJlcHJlc2VudHMgYWxsIGtpbmRzLlwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUG9saWN5UnVsZVwiXG4gICAgICB9LFxuICAgICAgXCJvc19hdXRob3JpemF0aW9uX1JvbGVcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlJvbGVcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJ1bGVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYWxsIHRoZSBydWxlcyBmb3IgdGhpcyByb2xlXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX1BvbGljeVJ1bGVcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Qb2xpY3lSdWxlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Sb2xlXCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX2F1dGhvcml6YXRpb25fUm9sZUJpbmRpbmdcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ3JvdXBOYW1lc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFsbCB0aGUgZ3JvdXBzIGRpcmVjdGx5IGJvdW5kIHRvIHRoZSByb2xlXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbGwgdGhlIGdyb3VwcyBkaXJlY3RseSBib3VuZCB0byB0aGUgcm9sZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJSb2xlQmluZGluZ1wiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicm9sZVJlZlwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RSZWZlcmVuY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzdWJqZWN0c1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJlZmVyZW5jZXMgdG8gc3ViamVjdHMgYm91bmQgdG8gdGhlIHJvbGUuICBPbmx5IFVzZXJcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInVzZXJOYW1lc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFsbCB0aGUgdXNlcm5hbWVzIGRpcmVjdGx5IGJvdW5kIHRvIHRoZSByb2xlXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbGwgdGhlIHVzZXJuYW1lcyBkaXJlY3RseSBib3VuZCB0byB0aGUgcm9sZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUm9sZUJpbmRpbmdcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwib3NfYXV0aG9yaXphdGlvbl9Sb2xlQmluZGluZ0xpc3RcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHJvbGUgYmluZGluZ3NcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fUm9sZUJpbmRpbmdcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Sb2xlQmluZGluZ1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJSb2xlQmluZGluZ0xpc3RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Sb2xlQmluZGluZ0xpc3RcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwib3NfYXV0aG9yaXphdGlvbl9Sb2xlTGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2Ygcm9sZXNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fUm9sZVwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlJvbGVcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiUm9sZUxpc3RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Sb2xlTGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19hdXRob3JpemF0aW9uX1N1YmplY3RBY2Nlc3NSZXZpZXdcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiY29udGVudFwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfcnVudGltZV9SYXdFeHRlbnNpb25cIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ3JvdXBzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib3B0aW9uYWxcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9wdGlvbmFsXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlN1YmplY3RBY2Nlc3NSZXZpZXdcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJuYW1lc3BhY2VcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibmFtZXNwYWNlIG9mIHRoZSBhY3Rpb24gYmVpbmcgcmVxdWVzdGVkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVzb3VyY2VcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib25lIG9mIHRoZSBleGlzdGluZyByZXNvdXJjZSB0eXBlc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlc291cmNlTmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJuYW1lIG9mIHRoZSByZXNvdXJjZSBiZWluZyByZXF1ZXN0ZWQgZm9yIGEgZ2V0IG9yIGRlbGV0ZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInVzZXJcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib3B0aW9uYWxcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ2ZXJiXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9uZSBvZiBnZXRcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlN1YmplY3RBY2Nlc3NSZXZpZXdcIlxuICAgICAgfSxcbiAgICAgIFwib3NfYXV0aG9yaXphdGlvbl9TdWJqZWN0QWNjZXNzUmV2aWV3UmVzcG9uc2VcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYWxsb3dlZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidHJ1ZSBpZiB0aGUgYWN0aW9uIHdvdWxkIGJlIGFsbG93ZWRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiU3ViamVjdEFjY2Vzc1Jldmlld1Jlc3BvbnNlXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibmFtZXNwYWNlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBuYW1lc3BhY2UgdXNlZCBmb3IgdGhlIGFjY2VzcyByZXZpZXdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZWFzb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicmVhc29uIGlzIG9wdGlvbmFsXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5TdWJqZWN0QWNjZXNzUmV2aWV3UmVzcG9uc2VcIlxuICAgICAgfSxcbiAgICAgIFwib3NfYnVpbGRfQnVpbGRcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkJ1aWxkXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzcGVjXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfQnVpbGRTcGVjXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkU3BlY1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInN0YXR1c1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2J1aWxkX0J1aWxkU3RhdHVzXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkU3RhdHVzXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19idWlsZF9CdWlsZENvbmZpZ1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiQnVpbGRDb25maWdcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNwZWNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9CdWlsZENvbmZpZ1NwZWNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRDb25maWdTcGVjXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3RhdHVzXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfQnVpbGRDb25maWdTdGF0dXNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRDb25maWdTdGF0dXNcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkQ29uZmlnXCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX2J1aWxkX0J1aWxkQ29uZmlnTGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgYnVpbGQgY29uZmlnc1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfQnVpbGRDb25maWdcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZENvbmZpZ1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJCdWlsZENvbmZpZ0xpc3RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZENvbmZpZ0xpc3RcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwib3NfYnVpbGRfQnVpbGRDb25maWdTcGVjXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcIm91dHB1dFwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2J1aWxkX0J1aWxkT3V0cHV0XCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkT3V0cHV0XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVzb3VyY2VzXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19SZXNvdXJjZVJlcXVpcmVtZW50c1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVzb3VyY2VSZXF1aXJlbWVudHNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZXZpc2lvblwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2J1aWxkX1NvdXJjZVJldmlzaW9uXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlNvdXJjZVJldmlzaW9uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2VydmljZUFjY291bnRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UgYWNjb3VudCB0byB1c2UgdG8gcnVuIHBvZHMgY3JlYXRlZCBieSB0aGUgYnVpbGRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzb3VyY2VcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9CdWlsZFNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZFNvdXJjZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInN0cmF0ZWd5XCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfQnVpbGRTdHJhdGVneVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZFN0cmF0ZWd5XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHJpZ2dlcnNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJkZXRlcm1pbmVzIGhvdyBuZXcgYnVpbGRzIGNhbiBiZSBsYXVuY2hlZCBmcm9tIGEgYnVpbGQgY29uZmlnLiAgaWYgbm8gdHJpZ2dlcnMgYXJlIGRlZmluZWRcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2J1aWxkX0J1aWxkVHJpZ2dlclBvbGljeVwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkVHJpZ2dlclBvbGljeVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRDb25maWdTcGVjXCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2J1aWxkX0J1aWxkQ29uZmlnU3RhdHVzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImxhc3RWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ1c2VkIHRvIGluZm9ybSBhYm91dCBudW1iZXIgb2YgbGFzdCB0cmlnZ2VyZWQgYnVpbGRcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkQ29uZmlnU3RhdHVzXCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2J1aWxkX0J1aWxkTGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgYnVpbGRzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9CdWlsZFwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkJ1aWxkTGlzdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkTGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19idWlsZF9CdWlsZE91dHB1dFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJwdXNoU2VjcmV0XCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Mb2NhbE9iamVjdFJlZmVyZW5jZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTG9jYWxPYmplY3RSZWZlcmVuY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0b1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RSZWZlcmVuY2VcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkT3V0cHV0XCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2J1aWxkX0J1aWxkUmVxdWVzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJmcm9tXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RSZWZlcmVuY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJCdWlsZFJlcXVlc3RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJsYXN0VmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTGFzdFZlcnNpb24gb2YgdGhlIEJ1aWxkQ29uZmlnIHRoYXQgdHJpZ2dlcmVkIHRoaXMgYnVpbGRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJldmlzaW9uXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfU291cmNlUmV2aXNpb25cIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuU291cmNlUmV2aXNpb25cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0cmlnZ2VyZWRCeUltYWdlXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RSZWZlcmVuY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRSZXF1ZXN0XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX2J1aWxkX0J1aWxkU291cmNlXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImNvbnRleHREaXJcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic3BlY2lmaWVzIHN1Yi1kaXJlY3Rvcnkgd2hlcmUgdGhlIHNvdXJjZSBjb2RlIGZvciB0aGUgYXBwbGljYXRpb24gZXhpc3RzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2l0XCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfR2l0QnVpbGRTb3VyY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuR2l0QnVpbGRTb3VyY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzb3VyY2VTZWNyZXRcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xvY2FsT2JqZWN0UmVmZXJlbmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Mb2NhbE9iamVjdFJlZmVyZW5jZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidHlwZSBvZiBzb3VyY2UgY29udHJvbCBtYW5hZ2VtZW50IHN5c3RlbVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRTb3VyY2VcIlxuICAgICAgfSxcbiAgICAgIFwib3NfYnVpbGRfQnVpbGRTcGVjXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcIm91dHB1dFwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2J1aWxkX0J1aWxkT3V0cHV0XCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkT3V0cHV0XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVzb3VyY2VzXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19SZXNvdXJjZVJlcXVpcmVtZW50c1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVzb3VyY2VSZXF1aXJlbWVudHNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZXZpc2lvblwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2J1aWxkX1NvdXJjZVJldmlzaW9uXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlNvdXJjZVJldmlzaW9uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2VydmljZUFjY291bnRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UgYWNjb3VudCB0byB1c2UgdG8gcnVuIHBvZHMgY3JlYXRlZCBieSB0aGUgYnVpbGRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzb3VyY2VcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9CdWlsZFNvdXJjZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZFNvdXJjZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInN0cmF0ZWd5XCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfQnVpbGRTdHJhdGVneVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZFN0cmF0ZWd5XCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZFNwZWNcIlxuICAgICAgfSxcbiAgICAgIFwib3NfYnVpbGRfQnVpbGRTdGF0dXNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiY2FuY2VsbGVkXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJkZXNjcmliZXMgaWYgYSBjYW5jZWxpbmcgZXZlbnQgd2FzIHRyaWdnZXJlZCBmb3IgdGhlIGJ1aWxkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiY29tcGxldGlvblRpbWVzdGFtcFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzZXJ2ZXIgdGltZSB3aGVuIHRoZSBwb2QgcnVubmluZyB0aGlzIGJ1aWxkIHN0b3BwZWQgcnVubmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImNvbmZpZ1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RSZWZlcmVuY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJkdXJhdGlvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYW1vdW50IG9mIHRpbWUgdGhlIGJ1aWxkIGhhcyBiZWVuIHJ1bm5pbmdcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJMb25nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWVzc2FnZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJodW1hbi1yZWFkYWJsZSBtZXNzYWdlIGluZGljYXRpbmcgZGV0YWlscyBhYm91dCB3aHkgdGhlIGJ1aWxkIGhhcyB0aGlzIHN0YXR1c1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBoYXNlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9ic2VydmVkIHBvaW50IGluIHRoZSBidWlsZCBsaWZlY3ljbGVcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzdGFydFRpbWVzdGFtcFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzZXJ2ZXIgdGltZSB3aGVuIHRoaXMgYnVpbGQgc3RhcnRlZCBydW5uaW5nIGluIGEgcG9kXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZFN0YXR1c1wiXG4gICAgICB9LFxuICAgICAgXCJvc19idWlsZF9CdWlsZFN0cmF0ZWd5XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImN1c3RvbVN0cmF0ZWd5XCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfQ3VzdG9tQnVpbGRTdHJhdGVneVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5DdXN0b21CdWlsZFN0cmF0ZWd5XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZG9ja2VyU3RyYXRlZ3lcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9Eb2NrZXJCdWlsZFN0cmF0ZWd5XCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRvY2tlckJ1aWxkU3RyYXRlZ3lcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzb3VyY2VTdHJhdGVneVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2J1aWxkX1NvdXJjZUJ1aWxkU3RyYXRlZ3lcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuU291cmNlQnVpbGRTdHJhdGVneVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaWRlbnRpZmllcyB0aGUgdHlwZSBvZiBidWlsZCBzdHJhdGVneVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRTdHJhdGVneVwiXG4gICAgICB9LFxuICAgICAgXCJvc19idWlsZF9CdWlsZFRyaWdnZXJQb2xpY3lcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiZ2VuZXJpY1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2J1aWxkX1dlYkhvb2tUcmlnZ2VyXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLldlYkhvb2tUcmlnZ2VyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2l0aHViXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfV2ViSG9va1RyaWdnZXJcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuV2ViSG9va1RyaWdnZXJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpbWFnZUNoYW5nZVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2J1aWxkX0ltYWdlQ2hhbmdlVHJpZ2dlclwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5JbWFnZUNoYW5nZVRyaWdnZXJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInR5cGUgb2YgYnVpbGQgdHJpZ2dlclwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRUcmlnZ2VyUG9saWN5XCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2J1aWxkX0N1c3RvbUJ1aWxkU3RyYXRlZ3lcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiZW52XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgeW91IHdhbnQgdG8gcGFzcyBpbnRvIGEgYnVpbGRlciBjb250YWluZXJcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRW52VmFyXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVudlZhclwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImV4cG9zZURvY2tlclNvY2tldFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYWxsb3cgcnVubmluZyBEb2NrZXIgY29tbWFuZHMgKGFuZCBidWlsZCBEb2NrZXIgaW1hZ2VzKSBmcm9tIGluc2lkZSB0aGUgY29udGFpbmVyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZm9yY2VQdWxsXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJmb3JjZXMgcHVsbGluZyBvZiBidWlsZGVyIGltYWdlIGZyb20gcmVtb3RlIHJlZ2lzdHJ5IGlmIHRydWVcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJmcm9tXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RSZWZlcmVuY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInB1bGxTZWNyZXRcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xvY2FsT2JqZWN0UmVmZXJlbmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Mb2NhbE9iamVjdFJlZmVyZW5jZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQ3VzdG9tQnVpbGRTdHJhdGVneVwiXG4gICAgICB9LFxuICAgICAgXCJvc19idWlsZF9Eb2NrZXJCdWlsZFN0cmF0ZWd5XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImVudlwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFkZGl0aW9uYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzIHlvdSB3YW50IHRvIHBhc3MgaW50byBhIGJ1aWxkZXIgY29udGFpbmVyXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0VudlZhclwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FbnZWYXJcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJmb3JjZVB1bGxcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImZvcmNlcyB0aGUgc291cmNlIGJ1aWxkIHRvIHB1bGwgdGhlIGltYWdlIGlmIHRydWVcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJmcm9tXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RSZWZlcmVuY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm5vQ2FjaGVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImlmIHRydWVcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwdWxsU2VjcmV0XCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Mb2NhbE9iamVjdFJlZmVyZW5jZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTG9jYWxPYmplY3RSZWZlcmVuY2VcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRvY2tlckJ1aWxkU3RyYXRlZ3lcIlxuICAgICAgfSxcbiAgICAgIFwib3NfYnVpbGRfR2l0QnVpbGRTb3VyY2VcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiaHR0cFByb3h5XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInNwZWNpZmllcyBhIGh0dHAgcHJveHkgdG8gYmUgdXNlZCBkdXJpbmcgZ2l0IGNsb25lIG9wZXJhdGlvbnNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJodHRwc1Byb3h5XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInNwZWNpZmllcyBhIGh0dHBzIHByb3h5IHRvIGJlIHVzZWQgZHVyaW5nIGdpdCBjbG9uZSBvcGVyYXRpb25zXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVmXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImlkZW50aWZpZXMgdGhlIGJyYW5jaC90YWcvcmVmIHRvIGJ1aWxkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidXJpXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInBvaW50cyB0byB0aGUgc291cmNlIHRoYXQgd2lsbCBiZSBidWlsdFwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuR2l0QnVpbGRTb3VyY2VcIlxuICAgICAgfSxcbiAgICAgIFwib3NfYnVpbGRfR2l0U291cmNlUmV2aXNpb25cIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXV0aG9yXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfU291cmNlQ29udHJvbFVzZXJcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuU291cmNlQ29udHJvbFVzZXJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjb21taXRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaGFzaCBpZGVudGlmeWluZyBhIHNwZWNpZmljIGNvbW1pdFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImNvbW1pdHRlclwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2J1aWxkX1NvdXJjZUNvbnRyb2xVc2VyXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlNvdXJjZUNvbnRyb2xVc2VyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWVzc2FnZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJkZXNjcmlwdGlvbiBvZiBhIHNwZWNpZmljIGNvbW1pdFwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuR2l0U291cmNlUmV2aXNpb25cIlxuICAgICAgfSxcbiAgICAgIFwib3NfYnVpbGRfSW1hZ2VDaGFuZ2VUcmlnZ2VyXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImZyb21cIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdFJlZmVyZW5jZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0UmVmZXJlbmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibGFzdFRyaWdnZXJlZEltYWdlSURcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidXNlZCBpbnRlcm5hbGx5IHRvIHNhdmUgbGFzdCB1c2VkIGltYWdlIElEIGZvciBidWlsZFwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuSW1hZ2VDaGFuZ2VUcmlnZ2VyXCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2J1aWxkX1NvdXJjZUJ1aWxkU3RyYXRlZ3lcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiZW52XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgeW91IHdhbnQgdG8gcGFzcyBpbnRvIGEgYnVpbGRlciBjb250YWluZXJcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRW52VmFyXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVudlZhclwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImZvcmNlUHVsbFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZm9yY2VzIHRoZSBzb3VyY2UgYnVpbGQgdG8gcHVsbCB0aGUgaW1hZ2UgaWYgdHJ1ZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImZyb21cIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdFJlZmVyZW5jZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0UmVmZXJlbmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaW5jcmVtZW50YWxcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImZvcmNlcyB0aGUgc291cmNlIGJ1aWxkIHRvIGRvIGluY3JlbWVudGFsIGJ1aWxkcyBpZiB0cnVlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicHVsbFNlY3JldFwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTG9jYWxPYmplY3RSZWZlcmVuY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxvY2FsT2JqZWN0UmVmZXJlbmNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2NyaXB0c1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsb2NhdGlvbiBvZiB0aGUgc291cmNlIHNjcmlwdHNcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlNvdXJjZUJ1aWxkU3RyYXRlZ3lcIlxuICAgICAgfSxcbiAgICAgIFwib3NfYnVpbGRfU291cmNlQ29udHJvbFVzZXJcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiZW1haWxcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZS1tYWlsIG9mIHRoZSBzb3VyY2UgY29udHJvbCB1c2VyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJuYW1lIG9mIHRoZSBzb3VyY2UgY29udHJvbCB1c2VyXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Tb3VyY2VDb250cm9sVXNlclwiXG4gICAgICB9LFxuICAgICAgXCJvc19idWlsZF9Tb3VyY2VSZXZpc2lvblwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJnaXRcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9HaXRTb3VyY2VSZXZpc2lvblwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5HaXRTb3VyY2VSZXZpc2lvblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidHlwZSBvZiB0aGUgYnVpbGQgc291cmNlXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Tb3VyY2VSZXZpc2lvblwiXG4gICAgICB9LFxuICAgICAgXCJvc19idWlsZF9XZWJIb29rVHJpZ2dlclwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJzZWNyZXRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic2VjcmV0IHVzZWQgdG8gdmFsaWRhdGUgcmVxdWVzdHNcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLldlYkhvb2tUcmlnZ2VyXCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2RlcGxveV9DdXN0b21EZXBsb3ltZW50U3RyYXRlZ3lQYXJhbXNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiY29tbWFuZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9wdGlvbmFsbHkgb3ZlcnJpZGVzIHRoZSBjb250YWluZXIgY29tbWFuZCAoZGVmYXVsdCBpcyBzcGVjaWZpZWQgYnkgdGhlIGltYWdlKVwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib3B0aW9uYWxseSBvdmVycmlkZXMgdGhlIGNvbnRhaW5lciBjb21tYW5kIChkZWZhdWx0IGlzIHNwZWNpZmllZCBieSB0aGUgaW1hZ2UpXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZW52aXJvbm1lbnRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJlbnZpcm9ubWVudCB2YXJpYWJsZXMgcHJvdmlkZWQgdG8gdGhlIGRlcGxveW1lbnQgcHJvY2VzcyBjb250YWluZXJcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRW52VmFyXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVudlZhclwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImltYWdlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImEgRG9ja2VyIGltYWdlIHdoaWNoIGNhbiBjYXJyeSBvdXQgYSBkZXBsb3ltZW50XCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5DdXN0b21EZXBsb3ltZW50U3RyYXRlZ3lQYXJhbXNcIlxuICAgICAgfSxcbiAgICAgIFwib3NfZGVwbG95X0RlcGxveW1lbnRDYXVzZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJpbWFnZVRyaWdnZXJcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19kZXBsb3lfRGVwbG95bWVudENhdXNlSW1hZ2VUcmlnZ2VyXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRlcGxveW1lbnRDYXVzZUltYWdlVHJpZ2dlclwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIHR5cGUgb2YgdHJpZ2dlciB0aGF0IHJlc3VsdGVkIGluIGEgbmV3IGRlcGxveW1lbnRcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRlcGxveW1lbnRDYXVzZVwiXG4gICAgICB9LFxuICAgICAgXCJvc19kZXBsb3lfRGVwbG95bWVudENhdXNlSW1hZ2VUcmlnZ2VyXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImZyb21cIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdFJlZmVyZW5jZVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0UmVmZXJlbmNlXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5EZXBsb3ltZW50Q2F1c2VJbWFnZVRyaWdnZXJcIlxuICAgICAgfSxcbiAgICAgIFwib3NfZGVwbG95X0RlcGxveW1lbnRDb25maWdcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkRlcGxveW1lbnRDb25maWdcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNwZWNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19kZXBsb3lfRGVwbG95bWVudENvbmZpZ1NwZWNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuRGVwbG95bWVudENvbmZpZ1NwZWNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzdGF0dXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19kZXBsb3lfRGVwbG95bWVudENvbmZpZ1N0YXR1c1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5EZXBsb3ltZW50Q29uZmlnU3RhdHVzXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5EZXBsb3ltZW50Q29uZmlnXCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX2RlcGxveV9EZXBsb3ltZW50Q29uZmlnTGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImEgbGlzdCBvZiBkZXBsb3ltZW50IGNvbmZpZ3NcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2RlcGxveV9EZXBsb3ltZW50Q29uZmlnXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuRGVwbG95bWVudENvbmZpZ1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJEZXBsb3ltZW50Q29uZmlnTGlzdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRlcGxveW1lbnRDb25maWdMaXN0XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX2RlcGxveV9EZXBsb3ltZW50Q29uZmlnU3BlY1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJyZXBsaWNhc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIGRlc2lyZWQgbnVtYmVyIG9mIHJlcGxpY2FzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2VsZWN0b3JcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYSBsYWJlbCBxdWVyeSBvdmVyIHBvZHMgdGhhdCBzaG91bGQgbWF0Y2ggdGhlIHJlcGxpY2FzIGNvdW50XCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhIGxhYmVsIHF1ZXJ5IG92ZXIgcG9kcyB0aGF0IHNob3VsZCBtYXRjaCB0aGUgcmVwbGljYXMgY291bnRcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJqYXZhLnV0aWwuTWFwXFx1MDAzY1N0cmluZyxTdHJpbmdcXHUwMDNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3RyYXRlZ3lcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19kZXBsb3lfRGVwbG95bWVudFN0cmF0ZWd5XCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRlcGxveW1lbnRTdHJhdGVneVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInRlbXBsYXRlXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Qb2RUZW1wbGF0ZVNwZWNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBvZFRlbXBsYXRlU3BlY1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInRyaWdnZXJzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaG93IG5ldyBkZXBsb3ltZW50cyBhcmUgdHJpZ2dlcmVkXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19kZXBsb3lfRGVwbG95bWVudFRyaWdnZXJQb2xpY3lcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5EZXBsb3ltZW50VHJpZ2dlclBvbGljeVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuRGVwbG95bWVudENvbmZpZ1NwZWNcIlxuICAgICAgfSxcbiAgICAgIFwib3NfZGVwbG95X0RlcGxveW1lbnRDb25maWdTdGF0dXNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiZGV0YWlsc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2RlcGxveV9EZXBsb3ltZW50RGV0YWlsc1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5EZXBsb3ltZW50RGV0YWlsc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImxhdGVzdFZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGN1cnJlbnQgZGVwbG95bWVudCBpcyBvdXQgb2Ygc3luY1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuRGVwbG95bWVudENvbmZpZ1N0YXR1c1wiXG4gICAgICB9LFxuICAgICAgXCJvc19kZXBsb3lfRGVwbG95bWVudERldGFpbHNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiY2F1c2VzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZXh0ZW5kZWQgZGF0YSBhc3NvY2lhdGVkIHdpdGggYWxsIHRoZSBjYXVzZXMgZm9yIGNyZWF0aW5nIGEgbmV3IGRlcGxveW1lbnRcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2RlcGxveV9EZXBsb3ltZW50Q2F1c2VcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5EZXBsb3ltZW50Q2F1c2VcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXNzYWdlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImEgdXNlciBzcGVjaWZpZWQgY2hhbmdlIG1lc3NhZ2VcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRlcGxveW1lbnREZXRhaWxzXCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2RlcGxveV9EZXBsb3ltZW50U3RyYXRlZ3lcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiY3VzdG9tUGFyYW1zXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfZGVwbG95X0N1c3RvbURlcGxveW1lbnRTdHJhdGVneVBhcmFtc1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5DdXN0b21EZXBsb3ltZW50U3RyYXRlZ3lQYXJhbXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZWNyZWF0ZVBhcmFtc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2RlcGxveV9SZWNyZWF0ZURlcGxveW1lbnRTdHJhdGVneVBhcmFtc1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5SZWNyZWF0ZURlcGxveW1lbnRTdHJhdGVneVBhcmFtc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlc291cmNlc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUmVzb3VyY2VSZXF1aXJlbWVudHNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJlc291cmNlUmVxdWlyZW1lbnRzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicm9sbGluZ1BhcmFtc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2RlcGxveV9Sb2xsaW5nRGVwbG95bWVudFN0cmF0ZWd5UGFyYW1zXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlJvbGxpbmdEZXBsb3ltZW50U3RyYXRlZ3lQYXJhbXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBuYW1lIG9mIGEgZGVwbG95bWVudCBzdHJhdGVneVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuRGVwbG95bWVudFN0cmF0ZWd5XCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2RlcGxveV9EZXBsb3ltZW50VHJpZ2dlckltYWdlQ2hhbmdlUGFyYW1zXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImF1dG9tYXRpY1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwid2hldGhlciBkZXRlY3Rpb24gb2YgYSBuZXcgdGFnIHZhbHVlIHNob3VsZCB0cmlnZ2VyIGEgZGVwbG95bWVudFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImNvbnRhaW5lck5hbWVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicmVzdHJpY3RzIHRhZyB1cGRhdGVzIHRvIGEgc2V0IG9mIGNvbnRhaW5lciBuYW1lcyBpbiB0aGUgcG9kXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJyZXN0cmljdHMgdGFnIHVwZGF0ZXMgdG8gYSBzZXQgb2YgY29udGFpbmVyIG5hbWVzIGluIHRoZSBwb2RcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJmcm9tXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RSZWZlcmVuY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImxhc3RUcmlnZ2VyZWRJbWFnZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgbGFzdCBpbWFnZSB0byBiZSB0cmlnZ2VyZWRcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRlcGxveW1lbnRUcmlnZ2VySW1hZ2VDaGFuZ2VQYXJhbXNcIlxuICAgICAgfSxcbiAgICAgIFwib3NfZGVwbG95X0RlcGxveW1lbnRUcmlnZ2VyUG9saWN5XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImltYWdlQ2hhbmdlUGFyYW1zXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfZGVwbG95X0RlcGxveW1lbnRUcmlnZ2VySW1hZ2VDaGFuZ2VQYXJhbXNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuRGVwbG95bWVudFRyaWdnZXJJbWFnZUNoYW5nZVBhcmFtc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIHR5cGUgb2YgdGhlIHRyaWdnZXJcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRlcGxveW1lbnRUcmlnZ2VyUG9saWN5XCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2RlcGxveV9FeGVjTmV3UG9kSG9va1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJjb21tYW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIGhvb2sgY29tbWFuZCBhbmQgaXRzIGFyZ3VtZW50c1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIGhvb2sgY29tbWFuZCBhbmQgaXRzIGFyZ3VtZW50c1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImNvbnRhaW5lck5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIG5hbWUgb2YgYSBjb250YWluZXIgZnJvbSB0aGUgcG9kIHRlbXBsYXRlIHdob3NlIGltYWdlIHdpbGwgYmUgdXNlZCBmb3IgdGhlIGhvb2sgY29udGFpbmVyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZW52XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZW52aXJvbm1lbnQgdmFyaWFibGVzIHByb3ZpZGVkIHRvIHRoZSBob29rIGNvbnRhaW5lclwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19FbnZWYXJcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRW52VmFyXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5FeGVjTmV3UG9kSG9va1wiXG4gICAgICB9LFxuICAgICAgXCJvc19kZXBsb3lfTGlmZWN5Y2xlSG9va1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJleGVjTmV3UG9kXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfZGVwbG95X0V4ZWNOZXdQb2RIb29rXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkV4ZWNOZXdQb2RIb29rXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZmFpbHVyZVBvbGljeVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ3aGF0IGFjdGlvbiB0byB0YWtlIGlmIHRoZSBob29rIGZhaWxzXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5MaWZlY3ljbGVIb29rXCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2RlcGxveV9SZWNyZWF0ZURlcGxveW1lbnRTdHJhdGVneVBhcmFtc1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJwb3N0XCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfZGVwbG95X0xpZmVjeWNsZUhvb2tcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuTGlmZWN5Y2xlSG9va1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInByZVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2RlcGxveV9MaWZlY3ljbGVIb29rXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkxpZmVjeWNsZUhvb2tcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlJlY3JlYXRlRGVwbG95bWVudFN0cmF0ZWd5UGFyYW1zXCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2RlcGxveV9Sb2xsaW5nRGVwbG95bWVudFN0cmF0ZWd5UGFyYW1zXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImludGVydmFsU2Vjb25kc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIHRpbWUgdG8gd2FpdCBiZXR3ZWVuIHBvbGxpbmcgZGVwbG95bWVudCBzdGF0dXMgYWZ0ZXIgdXBkYXRlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiTG9uZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBvc3RcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19kZXBsb3lfTGlmZWN5Y2xlSG9va1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5MaWZlY3ljbGVIb29rXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicHJlXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfZGVwbG95X0xpZmVjeWNsZUhvb2tcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuTGlmZWN5Y2xlSG9va1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInRpbWVvdXRTZWNvbmRzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgdGltZSB0byB3YWl0IGZvciB1cGRhdGVzIGJlZm9yZSBnaXZpbmcgdXBcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJMb25nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidXBkYXRlUGVyY2VudFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIHBlcmNlbnRhZ2Ugb2YgcmVwbGljYXMgdG8gc2NhbGUgdXAgb3IgZG93biBlYWNoIGludGVydmFsIChuZWdhdGl2ZSB2YWx1ZSBzd2l0Y2hlcyBzY2FsZSBvcmRlciB0byBkb3duL3VwIGluc3RlYWQgb2YgdXAvZG93bilcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1cGRhdGVQZXJpb2RTZWNvbmRzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgdGltZSB0byB3YWl0IGJldHdlZW4gaW5kaXZpZHVhbCBwb2QgdXBkYXRlc1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcIkxvbmdcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlJvbGxpbmdEZXBsb3ltZW50U3RyYXRlZ3lQYXJhbXNcIlxuICAgICAgfSxcbiAgICAgIFwib3NfaW1hZ2VfSW1hZ2VcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZG9ja2VySW1hZ2VNYW5pZmVzdFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJyYXcgSlNPTiBvZiB0aGUgbWFuaWZlc3RcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJkb2NrZXJJbWFnZU1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19ydW50aW1lX1Jhd0V4dGVuc2lvblwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJkb2NrZXJJbWFnZU1ldGFkYXRhVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJjb252ZXlzIHZlcnNpb24gb2YgdGhlIG9iamVjdFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImRvY2tlckltYWdlUmVmZXJlbmNlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInN0cmluZyB0aGF0IGNhbiBiZSB1c2VkIHRvIHB1bGwgdGhpcyBpbWFnZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJJbWFnZVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5JbWFnZVwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19pbWFnZV9JbWFnZUxpc3RcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIGltYWdlIG9iamVjdHNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2ltYWdlX0ltYWdlXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuSW1hZ2VcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiSW1hZ2VMaXN0XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuSW1hZ2VMaXN0XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX2ltYWdlX0ltYWdlU3RyZWFtXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJJbWFnZVN0cmVhbVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3BlY1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2ltYWdlX0ltYWdlU3RyZWFtU3BlY1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5JbWFnZVN0cmVhbVNwZWNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzdGF0dXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19pbWFnZV9JbWFnZVN0cmVhbVN0YXR1c1wiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5JbWFnZVN0cmVhbVN0YXR1c1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuSW1hZ2VTdHJlYW1cIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwib3NfaW1hZ2VfSW1hZ2VTdHJlYW1MaXN0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBpbWFnZSBzdHJlYW0gb2JqZWN0c1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfaW1hZ2VfSW1hZ2VTdHJlYW1cIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5JbWFnZVN0cmVhbVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJJbWFnZVN0cmVhbUxpc3RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5JbWFnZVN0cmVhbUxpc3RcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwib3NfaW1hZ2VfSW1hZ2VTdHJlYW1TcGVjXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImRvY2tlckltYWdlUmVwb3NpdG9yeVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJvcHRpb25hbCBmaWVsZCBpZiBzcGVjaWZpZWQgdGhpcyBzdHJlYW0gaXMgYmFja2VkIGJ5IGEgRG9ja2VyIHJlcG9zaXRvcnkgb24gdGhpcyBzZXJ2ZXJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0YWdzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibWFwIGFyYml0cmFyeSBzdHJpbmcgdmFsdWVzIHRvIHNwZWNpZmljIGltYWdlIGxvY2F0b3JzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19pbWFnZV9OYW1lZFRhZ1JlZmVyZW5jZVwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk5hbWVkVGFnUmVmZXJlbmNlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5JbWFnZVN0cmVhbVNwZWNcIlxuICAgICAgfSxcbiAgICAgIFwib3NfaW1hZ2VfSW1hZ2VTdHJlYW1TdGF0dXNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiZG9ja2VySW1hZ2VSZXBvc2l0b3J5XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJlcHJlc2VudHMgdGhlIGVmZmVjdGl2ZSBsb2NhdGlvbiB0aGlzIHN0cmVhbSBtYXkgYmUgYWNjZXNzZWQgYXRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0YWdzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaGlzdG9yaWNhbCByZWNvcmQgb2YgaW1hZ2VzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIHRhZ1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfaW1hZ2VfTmFtZWRUYWdFdmVudExpc3RcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5OYW1lZFRhZ0V2ZW50TGlzdFwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuSW1hZ2VTdHJlYW1TdGF0dXNcIlxuICAgICAgfSxcbiAgICAgIFwib3NfaW1hZ2VfTmFtZWRUYWdFdmVudExpc3RcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHRhZyBldmVudHMgcmVsYXRlZCB0byB0aGUgdGFnXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19pbWFnZV9UYWdFdmVudFwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlRhZ0V2ZW50XCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidGFnXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSB0YWdcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk5hbWVkVGFnRXZlbnRMaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIm9zX2ltYWdlX05hbWVkVGFnUmVmZXJlbmNlXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFubm90YXRpb25zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFubm90YXRpb25zIGFzc29jaWF0ZWQgd2l0aCBpbWFnZXMgdXNpbmcgdGhpcyB0YWdcIixcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFubm90YXRpb25zIGFzc29jaWF0ZWQgd2l0aCBpbWFnZXMgdXNpbmcgdGhpcyB0YWdcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJqYXZhLnV0aWwuTWFwXFx1MDAzY1N0cmluZyxTdHJpbmdcXHUwMDNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZnJvbVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RSZWZlcmVuY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWUgb2YgdGFnXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5OYW1lZFRhZ1JlZmVyZW5jZVwiXG4gICAgICB9LFxuICAgICAgXCJvc19pbWFnZV9UYWdFdmVudFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJjcmVhdGVkXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIndoZW4gdGhlIGV2ZW50IHdhcyBjcmVhdGVkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZG9ja2VySW1hZ2VSZWZlcmVuY2VcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIHN0cmluZyB0aGF0IGNhbiBiZSB1c2VkIHRvIHB1bGwgdGhpcyBpbWFnZVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImltYWdlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBpbWFnZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuVGFnRXZlbnRcIlxuICAgICAgfSxcbiAgICAgIFwib3Nfb2F1dGhfT0F1dGhBY2Nlc3NUb2tlblwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJhdXRob3JpemVUb2tlblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJjb250YWlucyB0aGUgdG9rZW4gdGhhdCBhdXRob3JpemVkIHRoaXMgdG9rZW5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjbGllbnROYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJlZmVyZW5jZXMgdGhlIGNsaWVudCB0aGF0IGNyZWF0ZWQgdGhpcyB0b2tlblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImV4cGlyZXNJblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaXMgdGhlIHNlY29uZHMgZnJvbSBjcmVhdGlvbiB0aW1lIGJlZm9yZSB0aGlzIHRva2VuIGV4cGlyZXNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJMb25nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIk9BdXRoQWNjZXNzVG9rZW5cIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlZGlyZWN0VVJJXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJlZGlyZWN0aW9uIFVSSSBhc3NvY2lhdGVkIHdpdGggdGhlIHRva2VuXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVmcmVzaFRva2VuXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9wdGlvbmFsIHZhbHVlIGJ5IHdoaWNoIHRoaXMgdG9rZW4gY2FuIGJlIHJlbmV3ZWRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzY29wZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHJlcXVlc3RlZCBzY29wZXNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgcmVxdWVzdGVkIHNjb3Blc1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInVzZXJOYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInVzZXIgbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhpcyB0b2tlblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInVzZXJVSURcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidW5pcXVlIFVJRCBhc3NvY2lhdGVkIHdpdGggdGhpcyB0b2tlblwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuT0F1dGhBY2Nlc3NUb2tlblwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19vYXV0aF9PQXV0aEFjY2Vzc1Rva2VuTGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2Ygb2F1dGggYWNjZXNzIHRva2Vuc1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3Nfb2F1dGhfT0F1dGhBY2Nlc3NUb2tlblwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk9BdXRoQWNjZXNzVG9rZW5cIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiT0F1dGhBY2Nlc3NUb2tlbkxpc3RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5PQXV0aEFjY2Vzc1Rva2VuTGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19vYXV0aF9PQXV0aEF1dGhvcml6ZVRva2VuXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImNsaWVudE5hbWVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicmVmZXJlbmNlcyB0aGUgY2xpZW50IHRoYXQgY3JlYXRlZCB0aGlzIHRva2VuXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZXhwaXJlc0luXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzZWNvbmRzIGZyb20gY3JlYXRpb24gdGltZSBiZWZvcmUgdGhpcyB0b2tlbiBleHBpcmVzXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiTG9uZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJPQXV0aEF1dGhvcml6ZVRva2VuXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZWRpcmVjdFVSSVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJyZWRpcmVjdGlvbiBVUkkgYXNzb2NpYXRlZCB3aXRoIHRoZSB0b2tlblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNjb3Blc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgcmVxdWVzdGVkIHNjb3Blc1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiByZXF1ZXN0ZWQgc2NvcGVzXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3RhdGVcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic3RhdGUgZGF0YSBmcm9tIHJlcXVlc3RcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1c2VyTmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ1c2VyIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdG9rZW5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1c2VyVUlEXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInVuaXF1ZSBVSUQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdG9rZW4uICB1c2VyVUlEIGFuZCB1c2VyTmFtZSBtdXN0IGJvdGggbWF0Y2ggZm9yIHRoaXMgdG9rZW4gdG8gYmUgdmFsaWRcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk9BdXRoQXV0aG9yaXplVG9rZW5cIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwib3Nfb2F1dGhfT0F1dGhBdXRob3JpemVUb2tlbkxpc3RcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIG9hdXRoIGF1dGhvcml6YXRpb24gdG9rZW5zXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19vYXV0aF9PQXV0aEF1dGhvcml6ZVRva2VuXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuT0F1dGhBdXRob3JpemVUb2tlblwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJPQXV0aEF1dGhvcml6ZVRva2VuTGlzdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk9BdXRoQXV0aG9yaXplVG9rZW5MaXN0XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX29hdXRoX09BdXRoQ2xpZW50XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJPQXV0aENsaWVudFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVkaXJlY3RVUklzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidmFsaWQgcmVkaXJlY3Rpb24gVVJJcyBhc3NvY2lhdGVkIHdpdGggYSBjbGllbnRcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInZhbGlkIHJlZGlyZWN0aW9uIFVSSXMgYXNzb2NpYXRlZCB3aXRoIGEgY2xpZW50XCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVzcG9uZFdpdGhDaGFsbGVuZ2VzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJpbmRpY2F0ZXMgd2hldGhlciB0aGUgY2xpZW50IHdhbnRzIGF1dGhlbnRpY2F0aW9uIG5lZWRlZCByZXNwb25zZXMgbWFkZSBpbiB0aGUgZm9ybSBvZiBjaGFsbGVuZ2VzIGluc3RlYWQgb2YgcmVkaXJlY3RzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2VjcmV0XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInVuaXF1ZSBzZWNyZXQgYXNzb2NpYXRlZCB3aXRoIGEgY2xpZW50XCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5PQXV0aENsaWVudFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19vYXV0aF9PQXV0aENsaWVudEF1dGhvcml6YXRpb25cIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiY2xpZW50TmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJyZWZlcmVuY2VzIHRoZSBjbGllbnQgdGhhdCBjcmVhdGVkIHRoaXMgYXV0aG9yaXphdGlvblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJPQXV0aENsaWVudEF1dGhvcml6YXRpb25cIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNjb3Blc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgZ3JhbnRlZCBzY29wZXNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgZ3JhbnRlZCBzY29wZXNcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1c2VyTmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ1c2VyIG5hbWUgdGhhdCBhdXRob3JpemVkIHRoaXMgY2xpZW50XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidXNlclVJRFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ1bmlxdWUgVUlEIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGF1dGhvcml6YXRpb24uIHVzZXJVSUQgYW5kIHVzZXJOYW1lIG11c3QgYm90aCBtYXRjaCBmb3IgdGhpcyBhdXRob3JpemF0aW9uIHRvIGJlIHZhbGlkXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5PQXV0aENsaWVudEF1dGhvcml6YXRpb25cIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwib3Nfb2F1dGhfT0F1dGhDbGllbnRBdXRob3JpemF0aW9uTGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2Ygb2F1dGggY2xpZW50IGF1dGhvcml6YXRpb25zXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19vYXV0aF9PQXV0aENsaWVudEF1dGhvcml6YXRpb25cIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5PQXV0aENsaWVudEF1dGhvcml6YXRpb25cIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiT0F1dGhDbGllbnRBdXRob3JpemF0aW9uTGlzdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk9BdXRoQ2xpZW50QXV0aG9yaXphdGlvbkxpc3RcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwib3Nfb2F1dGhfT0F1dGhDbGllbnRMaXN0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBvYXV0aCBjbGllbnRzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19vYXV0aF9PQXV0aENsaWVudFwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk9BdXRoQ2xpZW50XCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIk9BdXRoQ2xpZW50TGlzdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk9BdXRoQ2xpZW50TGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19wcm9qZWN0X1Byb2plY3RcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlByb2plY3RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNwZWNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19wcm9qZWN0X1Byb2plY3RTcGVjXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlByb2plY3RTcGVjXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3RhdHVzXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfcHJvamVjdF9Qcm9qZWN0U3RhdHVzXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlByb2plY3RTdGF0dXNcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlByb2plY3RcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwib3NfcHJvamVjdF9Qcm9qZWN0TGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgcHJvamVjdHNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX3Byb2plY3RfUHJvamVjdFwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlByb2plY3RcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiUHJvamVjdExpc3RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Qcm9qZWN0TGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19wcm9qZWN0X1Byb2plY3RSZXF1ZXN0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImRlc2NyaXB0aW9uIHRvIGFwcGx5IHRvIGEgcHJvamVjdFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImRpc3BsYXlOYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImRpc3BsYXkgbmFtZSB0byBhcHBseSB0byBhIHByb2plY3RcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiUHJvamVjdFJlcXVlc3RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUHJvamVjdFJlcXVlc3RcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwib3NfcHJvamVjdF9Qcm9qZWN0U3BlY1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJmaW5hbGl6ZXJzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYW4gb3BhcXVlIGxpc3Qgb2YgdmFsdWVzIHRoYXQgbXVzdCBiZSBlbXB0eSB0byBwZXJtYW5lbnRseSByZW1vdmUgb2JqZWN0IGZyb20gc3RvcmFnZVwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYW4gb3BhcXVlIGxpc3Qgb2YgdmFsdWVzIHRoYXQgbXVzdCBiZSBlbXB0eSB0byBwZXJtYW5lbnRseSByZW1vdmUgb2JqZWN0IGZyb20gc3RvcmFnZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUHJvamVjdFNwZWNcIlxuICAgICAgfSxcbiAgICAgIFwib3NfcHJvamVjdF9Qcm9qZWN0U3RhdHVzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcInBoYXNlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInBoYXNlIGlzIHRoZSBjdXJyZW50IGxpZmVjeWNsZSBwaGFzZSBvZiB0aGUgcHJvamVjdFwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUHJvamVjdFN0YXR1c1wiXG4gICAgICB9LFxuICAgICAgXCJvc19yb3V0ZV9Sb3V0ZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiUm91dGVcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNwZWNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19yb3V0ZV9Sb3V0ZVNwZWNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUm91dGVTcGVjXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3RhdHVzXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3Nfcm91dGVfUm91dGVTdGF0dXNcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUm91dGVTdGF0dXNcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlJvdXRlXCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX3JvdXRlX1JvdXRlTGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2Ygcm91dGVzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19yb3V0ZV9Sb3V0ZVwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlJvdXRlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlJvdXRlTGlzdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlJvdXRlTGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc19yb3V0ZV9Sb3V0ZVNwZWNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiaG9zdFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJvcHRpb25hbDogYWxpYXMvZG5zIHRoYXQgcG9pbnRzIHRvIHRoZSBzZXJ2aWNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGF0aFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJvcHRpb25hbDogcGF0aCB0aGF0IHRoZSByb3V0ZXIgd2F0Y2hlcyB0byByb3V0ZSB0cmFmZmljIHRvIHRoZSBzZXJ2aWNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidGxzXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3Nfcm91dGVfVExTQ29uZmlnXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlRMU0NvbmZpZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInRvXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RSZWZlcmVuY2VcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUm91dGVTcGVjXCJcbiAgICAgIH0sXG4gICAgICBcIm9zX3JvdXRlX1JvdXRlU3RhdHVzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlJvdXRlU3RhdHVzXCJcbiAgICAgIH0sXG4gICAgICBcIm9zX3JvdXRlX1RMU0NvbmZpZ1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJjYUNlcnRpZmljYXRlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInByb3ZpZGVzIHRoZSBjZXJ0IGF1dGhvcml0eSBjZXJ0aWZpY2F0ZSBjb250ZW50c1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImNlcnRpZmljYXRlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInByb3ZpZGVzIGNlcnRpZmljYXRlIGNvbnRlbnRzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZGVzdGluYXRpb25DQUNlcnRpZmljYXRlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInByb3ZpZGVzIHRoZSBjb250ZW50cyBvZiB0aGUgY2EgY2VydGlmaWNhdGUgb2YgdGhlIGZpbmFsIGRlc3RpbmF0aW9uLiAgV2hlbiB1c2luZyByZS1lbmNyeXB0IHRlcm1pbmF0aW9uIHRoaXMgZmlsZSBzaG91bGQgYmUgcHJvdmlkZWQgaW4gb3JkZXIgdG8gaGF2ZSByb3V0ZXJzIHVzZSBpdCBmb3IgaGVhbHRoIGNoZWNrcyBvbiB0aGUgc2VjdXJlIGNvbm5lY3Rpb25cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXlcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicHJvdmlkZXMga2V5IGZpbGUgY29udGVudHNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0ZXJtaW5hdGlvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJpbmRpY2F0ZXMgdGVybWluYXRpb24gdHlwZS4gIGlmIG5vdCBzZXRcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlRMU0NvbmZpZ1wiXG4gICAgICB9LFxuICAgICAgXCJvc190ZW1wbGF0ZV9QYXJhbWV0ZXJcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib3B0aW9uYWw6IGRlc2NyaWJlcyB0aGUgcGFyYW1ldGVyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZnJvbVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJpbnB1dCB2YWx1ZSBmb3IgdGhlIGdlbmVyYXRvclwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdlbmVyYXRlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9wdGlvbmFsOiBnZW5lcmF0ZSBzcGVjaWZpZXMgdGhlIGdlbmVyYXRvciB0byBiZSB1c2VkIHRvIGdlbmVyYXRlIHJhbmRvbSBzdHJpbmcgZnJvbSBhbiBpbnB1dCB2YWx1ZSBzcGVjaWZpZWQgYnkgdGhlIGZyb20gZmllbGQuICB0aGUgcmVzdWx0IHN0cmluZyBpcyBzdG9yZWQgaW4gdGhlIHZhbHVlIGZpZWxkLiBpZiBub3Qgc3BlY2lmaWVkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJuYW1lIG9mIHRoZSBwYXJhbWV0ZXJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZXF1aXJlZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaW5kaWNhdGVzIHRoZSBwYXJhbWV0ZXIgbXVzdCBoYXZlIGEgbm9uLWVtcHR5IHZhbHVlIG9yIGJlIGdlbmVyYXRlZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInZhbHVlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9wdGlvbmFsOiBob2xkcyB0aGUgcGFyYW1ldGVyIGRhdGEuICBpZiBzcGVjaWZpZWRcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlBhcmFtZXRlclwiXG4gICAgICB9LFxuICAgICAgXCJvc190ZW1wbGF0ZV9UZW1wbGF0ZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiVGVtcGxhdGVcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJsYWJlbHNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib3B0aW9uYWw6IGxpc3Qgb2YgbGFibGVzIHRoYXQgYXJlIGFwcGxpZWQgdG8gZXZlcnkgb2JqZWN0IGR1cmluZyB0aGUgdGVtcGxhdGUgdG8gY29uZmlnIHRyYW5zZm9ybWF0aW9uXCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJvcHRpb25hbDogbGlzdCBvZiBsYWJsZXMgdGhhdCBhcmUgYXBwbGllZCB0byBldmVyeSBvYmplY3QgZHVyaW5nIHRoZSB0ZW1wbGF0ZSB0byBjb25maWcgdHJhbnNmb3JtYXRpb25cIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJqYXZhLnV0aWwuTWFwXFx1MDAzY1N0cmluZyxTdHJpbmdcXHUwMDNlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJvYmplY3RzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBvYmplY3RzIHRvIGluY2x1ZGUgaW4gdGhlIHRlbXBsYXRlXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX3J1bnRpbWVfUmF3RXh0ZW5zaW9uXCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFyYW1ldGVyc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9wdGlvbmFsOiBsaXN0IG9mIHBhcmFtZXRlcnMgdXNlZCBkdXJpbmcgdGVtcGxhdGUgdG8gY29uZmlnIHRyYW5zZm9ybWF0aW9uXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc190ZW1wbGF0ZV9QYXJhbWV0ZXJcIixcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5QYXJhbWV0ZXJcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlRlbXBsYXRlXCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX3RlbXBsYXRlX1RlbXBsYXRlTGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgdGVtcGxhdGVzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc190ZW1wbGF0ZV9UZW1wbGF0ZVwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlRlbXBsYXRlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlRlbXBsYXRlTGlzdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlRlbXBsYXRlTGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc191c2VyX0dyb3VwXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJHcm91cFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidXNlcnNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHVzZXJzIGluIHRoaXMgZ3JvdXBcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgdXNlcnMgaW4gdGhpcyBncm91cFwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuR3JvdXBcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwib3NfdXNlcl9Hcm91cExpc3RcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICBcInYxXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIGdyb3Vwc1wiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfdXNlcl9Hcm91cFwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkdyb3VwXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2luZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkdyb3VwTGlzdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkdyb3VwTGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJvc191c2VyX0lkZW50aXR5XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImV4dHJhXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImV4dHJhIGluZm9ybWF0aW9uIGZvciB0aGlzIGlkZW50aXR5XCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJleHRyYSBpbmZvcm1hdGlvbiBmb3IgdGhpcyBpZGVudGl0eVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImphdmEudXRpbC5NYXBcXHUwMDNjU3RyaW5nLFN0cmluZ1xcdTAwM2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiSWRlbnRpdHlcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInByb3ZpZGVyTmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzb3VyY2Ugb2YgaWRlbnRpdHkgaW5mb3JtYXRpb25cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwcm92aWRlclVzZXJOYW1lXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInVuaXF1ZWx5IHJlcHJlc2VudHMgdGhpcyBpZGVudGl0eSBpbiB0aGUgc2NvcGUgb2YgdGhlIHByb3ZpZGVyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidXNlclwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RSZWZlcmVuY2VcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLklkZW50aXR5XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX3VzZXJfSWRlbnRpdHlMaXN0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcbiAgICAgICAgICAgICAgXCJ2MVwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBpZGVudGl0aWVzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc191c2VyX0lkZW50aXR5XCIsXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuSWRlbnRpdHlcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiSWRlbnRpdHlMaXN0XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuSWRlbnRpdHlMaXN0XCIsXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBcIm9zX3VzZXJfVXNlclwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJmdWxsTmFtZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJmdWxsIG5hbWUgb2YgdXNlclwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdyb3Vwc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgZ3JvdXBzXCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIGdyb3Vwc1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImlkZW50aXRpZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIGlkZW50aXRpZXNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgaWRlbnRpdGllc1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtpbmRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJVc2VyXCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlVzZXJcIixcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFwib3NfdXNlcl9Vc2VyTGlzdFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXG4gICAgICAgICAgICAgIFwidjFcIlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgdXNlcnNcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX3VzZXJfVXNlclwiLFxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlVzZXJcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJraW5kXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiVXNlckxpc3RcIixcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Vc2VyTGlzdFwiLFxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgXCJzcGV0ZXJfaW5mX0RlY1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5EZWNcIlxuICAgICAgfVxuICAgIH0sXG4gICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgIFwiQmFzZUt1YmVybmV0ZXNMaXN0XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQmFzZUt1YmVybmV0ZXNMaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIkJ1aWxkQ29uZmlnTGlzdFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfQnVpbGRDb25maWdMaXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRDb25maWdMaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIkJ1aWxkTGlzdFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfQnVpbGRMaXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRMaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIkJ1aWxkUmVxdWVzdFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfQnVpbGRSZXF1ZXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRSZXF1ZXN0XCJcbiAgICAgIH0sXG4gICAgICBcIkNsdXN0ZXJQb2xpY3lcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fQ2x1c3RlclBvbGljeVwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkNsdXN0ZXJQb2xpY3lcIlxuICAgICAgfSxcbiAgICAgIFwiQ2x1c3RlclBvbGljeUJpbmRpbmdcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fQ2x1c3RlclBvbGljeUJpbmRpbmdcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5DbHVzdGVyUG9saWN5QmluZGluZ1wiXG4gICAgICB9LFxuICAgICAgXCJDbHVzdGVyUG9saWN5QmluZGluZ0xpc3RcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fQ2x1c3RlclBvbGljeUJpbmRpbmdMaXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQ2x1c3RlclBvbGljeUJpbmRpbmdMaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIkNsdXN0ZXJQb2xpY3lMaXN0XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX0NsdXN0ZXJQb2xpY3lMaXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQ2x1c3RlclBvbGljeUxpc3RcIlxuICAgICAgfSxcbiAgICAgIFwiQ2x1c3RlclJvbGVCaW5kaW5nXCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX0NsdXN0ZXJSb2xlQmluZGluZ1wiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkNsdXN0ZXJSb2xlQmluZGluZ1wiXG4gICAgICB9LFxuICAgICAgXCJDbHVzdGVyUm9sZUJpbmRpbmdMaXN0XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX0NsdXN0ZXJSb2xlQmluZGluZ0xpc3RcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5DbHVzdGVyUm9sZUJpbmRpbmdMaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIkNvbmZpZ1wiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19jb25maWdfQ29uZmlnXCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNvbmZpZ1wiXG4gICAgICB9LFxuICAgICAgXCJDb250YWluZXJTdGF0dXNcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfQ29udGFpbmVyU3RhdHVzXCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNvbnRhaW5lclN0YXR1c1wiXG4gICAgICB9LFxuICAgICAgXCJEZXBsb3ltZW50Q29uZmlnTGlzdFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfZGVwbG95X0RlcGxveW1lbnRDb25maWdMaXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuRGVwbG95bWVudENvbmZpZ0xpc3RcIlxuICAgICAgfSxcbiAgICAgIFwiRW5kcG9pbnRzXCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0VuZHBvaW50c1wiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FbmRwb2ludHNcIlxuICAgICAgfSxcbiAgICAgIFwiRW5kcG9pbnRzTGlzdFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19FbmRwb2ludHNMaXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVuZHBvaW50c0xpc3RcIlxuICAgICAgfSxcbiAgICAgIFwiRW52VmFyXCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0VudlZhclwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FbnZWYXJcIlxuICAgICAgfSxcbiAgICAgIFwiRXZlbnRMaXN0XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0V2ZW50TGlzdFwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FdmVudExpc3RcIlxuICAgICAgfSxcbiAgICAgIFwiR3JvdXBcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX3VzZXJfR3JvdXBcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Hcm91cFwiXG4gICAgICB9LFxuICAgICAgXCJHcm91cExpc3RcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX3VzZXJfR3JvdXBMaXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuR3JvdXBMaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIklkZW50aXR5XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc191c2VyX0lkZW50aXR5XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuSWRlbnRpdHlcIlxuICAgICAgfSxcbiAgICAgIFwiSWRlbnRpdHlMaXN0XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc191c2VyX0lkZW50aXR5TGlzdFwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLklkZW50aXR5TGlzdFwiXG4gICAgICB9LFxuICAgICAgXCJJbWFnZUxpc3RcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2ltYWdlX0ltYWdlTGlzdFwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkltYWdlTGlzdFwiXG4gICAgICB9LFxuICAgICAgXCJJbWFnZVN0cmVhbUxpc3RcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2ltYWdlX0ltYWdlU3RyZWFtTGlzdFwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkltYWdlU3RyZWFtTGlzdFwiXG4gICAgICB9LFxuICAgICAgXCJMb2NhbFN1YmplY3RBY2Nlc3NSZXZpZXdcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fTG9jYWxTdWJqZWN0QWNjZXNzUmV2aWV3XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuTG9jYWxTdWJqZWN0QWNjZXNzUmV2aWV3XCJcbiAgICAgIH0sXG4gICAgICBcIk5hbWVzcGFjZVwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19OYW1lc3BhY2VcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTmFtZXNwYWNlXCJcbiAgICAgIH0sXG4gICAgICBcIk5hbWVzcGFjZUxpc3RcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTmFtZXNwYWNlTGlzdFwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5OYW1lc3BhY2VMaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIk5vZGVcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTm9kZVwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Ob2RlXCJcbiAgICAgIH0sXG4gICAgICBcIk5vZGVMaXN0XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX05vZGVMaXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5vZGVMaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIk9BdXRoQWNjZXNzVG9rZW5cIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX29hdXRoX09BdXRoQWNjZXNzVG9rZW5cIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5PQXV0aEFjY2Vzc1Rva2VuXCJcbiAgICAgIH0sXG4gICAgICBcIk9BdXRoQWNjZXNzVG9rZW5MaXN0XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19vYXV0aF9PQXV0aEFjY2Vzc1Rva2VuTGlzdFwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk9BdXRoQWNjZXNzVG9rZW5MaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIk9BdXRoQXV0aG9yaXplVG9rZW5cIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX29hdXRoX09BdXRoQXV0aG9yaXplVG9rZW5cIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5PQXV0aEF1dGhvcml6ZVRva2VuXCJcbiAgICAgIH0sXG4gICAgICBcIk9BdXRoQXV0aG9yaXplVG9rZW5MaXN0XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19vYXV0aF9PQXV0aEF1dGhvcml6ZVRva2VuTGlzdFwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk9BdXRoQXV0aG9yaXplVG9rZW5MaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIk9BdXRoQ2xpZW50XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19vYXV0aF9PQXV0aENsaWVudFwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk9BdXRoQ2xpZW50XCJcbiAgICAgIH0sXG4gICAgICBcIk9BdXRoQ2xpZW50QXV0aG9yaXphdGlvblwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3Nfb2F1dGhfT0F1dGhDbGllbnRBdXRob3JpemF0aW9uXCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuT0F1dGhDbGllbnRBdXRob3JpemF0aW9uXCJcbiAgICAgIH0sXG4gICAgICBcIk9BdXRoQ2xpZW50QXV0aG9yaXphdGlvbkxpc3RcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX29hdXRoX09BdXRoQ2xpZW50QXV0aG9yaXphdGlvbkxpc3RcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5PQXV0aENsaWVudEF1dGhvcml6YXRpb25MaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIk9BdXRoQ2xpZW50TGlzdFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3Nfb2F1dGhfT0F1dGhDbGllbnRMaXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuT0F1dGhDbGllbnRMaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIk9iamVjdE1ldGFcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcbiAgICAgIH0sXG4gICAgICBcIlBlcnNpc3RlbnRWb2x1bWVcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUGVyc2lzdGVudFZvbHVtZVwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lXCJcbiAgICAgIH0sXG4gICAgICBcIlBlcnNpc3RlbnRWb2x1bWVDbGFpbVwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1cIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUGVyc2lzdGVudFZvbHVtZUNsYWltXCJcbiAgICAgIH0sXG4gICAgICBcIlBlcnNpc3RlbnRWb2x1bWVDbGFpbUxpc3RcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUGVyc2lzdGVudFZvbHVtZUNsYWltTGlzdFwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1MaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIlBlcnNpc3RlbnRWb2x1bWVMaXN0XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1BlcnNpc3RlbnRWb2x1bWVMaXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBlcnNpc3RlbnRWb2x1bWVMaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIlBvZExpc3RcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUG9kTGlzdFwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Qb2RMaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIlBvbGljeVwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9Qb2xpY3lcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Qb2xpY3lcIlxuICAgICAgfSxcbiAgICAgIFwiUG9saWN5QmluZGluZ1wiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9Qb2xpY3lCaW5kaW5nXCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUG9saWN5QmluZGluZ1wiXG4gICAgICB9LFxuICAgICAgXCJQb2xpY3lCaW5kaW5nTGlzdFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9Qb2xpY3lCaW5kaW5nTGlzdFwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlBvbGljeUJpbmRpbmdMaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIlBvbGljeUxpc3RcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fUG9saWN5TGlzdFwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlBvbGljeUxpc3RcIlxuICAgICAgfSxcbiAgICAgIFwiUHJvamVjdFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfcHJvamVjdF9Qcm9qZWN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUHJvamVjdFwiXG4gICAgICB9LFxuICAgICAgXCJQcm9qZWN0TGlzdFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfcHJvamVjdF9Qcm9qZWN0TGlzdFwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlByb2plY3RMaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIlByb2plY3RSZXF1ZXN0XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19wcm9qZWN0X1Byb2plY3RSZXF1ZXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUHJvamVjdFJlcXVlc3RcIlxuICAgICAgfSxcbiAgICAgIFwiUXVhbnRpdHlcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfcmVzb3VyY2VfUXVhbnRpdHlcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUXVhbnRpdHlcIlxuICAgICAgfSxcbiAgICAgIFwiUmVwbGljYXRpb25Db250cm9sbGVyTGlzdFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19SZXBsaWNhdGlvbkNvbnRyb2xsZXJMaXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJlcGxpY2F0aW9uQ29udHJvbGxlckxpc3RcIlxuICAgICAgfSxcbiAgICAgIFwiUmVzb3VyY2VRdW90YVwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19SZXNvdXJjZVF1b3RhXCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJlc291cmNlUXVvdGFcIlxuICAgICAgfSxcbiAgICAgIFwiUmVzb3VyY2VRdW90YUxpc3RcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUmVzb3VyY2VRdW90YUxpc3RcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVzb3VyY2VRdW90YUxpc3RcIlxuICAgICAgfSxcbiAgICAgIFwiUm9sZVwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9Sb2xlXCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUm9sZVwiXG4gICAgICB9LFxuICAgICAgXCJSb2xlQmluZGluZ1wiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9Sb2xlQmluZGluZ1wiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlJvbGVCaW5kaW5nXCJcbiAgICAgIH0sXG4gICAgICBcIlJvbGVCaW5kaW5nTGlzdFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9Sb2xlQmluZGluZ0xpc3RcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Sb2xlQmluZGluZ0xpc3RcIlxuICAgICAgfSxcbiAgICAgIFwiUm9sZUxpc3RcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fUm9sZUxpc3RcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Sb2xlTGlzdFwiXG4gICAgICB9LFxuICAgICAgXCJSb290UGF0aHNcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2FwaV9Sb290UGF0aHNcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUm9vdFBhdGhzXCJcbiAgICAgIH0sXG4gICAgICBcIlJvdXRlTGlzdFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3Nfcm91dGVfUm91dGVMaXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUm91dGVMaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIlNlY3JldFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19TZWNyZXRcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VjcmV0XCJcbiAgICAgIH0sXG4gICAgICBcIlNlY3JldExpc3RcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfU2VjcmV0TGlzdFwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZWNyZXRMaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIlNlY3VyaXR5Q29udGV4dENvbnN0cmFpbnRzXCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1NlY3VyaXR5Q29udGV4dENvbnN0cmFpbnRzXCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlY3VyaXR5Q29udGV4dENvbnN0cmFpbnRzXCJcbiAgICAgIH0sXG4gICAgICBcIlNlY3VyaXR5Q29udGV4dENvbnN0cmFpbnRzTGlzdFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19TZWN1cml0eUNvbnRleHRDb25zdHJhaW50c0xpc3RcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VjdXJpdHlDb250ZXh0Q29uc3RyYWludHNMaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIlNlcnZpY2VBY2NvdW50XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1NlcnZpY2VBY2NvdW50XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlcnZpY2VBY2NvdW50XCJcbiAgICAgIH0sXG4gICAgICBcIlNlcnZpY2VBY2NvdW50TGlzdFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19TZXJ2aWNlQWNjb3VudExpc3RcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VydmljZUFjY291bnRMaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIlNlcnZpY2VMaXN0XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1NlcnZpY2VMaXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlcnZpY2VMaXN0XCJcbiAgICAgIH0sXG4gICAgICBcIlN0YXR1c1wiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19TdGF0dXNcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU3RhdHVzXCJcbiAgICAgIH0sXG4gICAgICBcIlN1YmplY3RBY2Nlc3NSZXZpZXdcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fU3ViamVjdEFjY2Vzc1Jldmlld1wiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlN1YmplY3RBY2Nlc3NSZXZpZXdcIlxuICAgICAgfSxcbiAgICAgIFwiU3ViamVjdEFjY2Vzc1Jldmlld1Jlc3BvbnNlXCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX1N1YmplY3RBY2Nlc3NSZXZpZXdSZXNwb25zZVwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlN1YmplY3RBY2Nlc3NSZXZpZXdSZXNwb25zZVwiXG4gICAgICB9LFxuICAgICAgXCJUYWdFdmVudFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfaW1hZ2VfVGFnRXZlbnRcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5UYWdFdmVudFwiXG4gICAgICB9LFxuICAgICAgXCJUZW1wbGF0ZVwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfdGVtcGxhdGVfVGVtcGxhdGVcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5UZW1wbGF0ZVwiXG4gICAgICB9LFxuICAgICAgXCJUZW1wbGF0ZUxpc3RcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX3RlbXBsYXRlX1RlbXBsYXRlTGlzdFwiLFxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlRlbXBsYXRlTGlzdFwiXG4gICAgICB9LFxuICAgICAgXCJVc2VyXCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc191c2VyX1VzZXJcIixcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Vc2VyXCJcbiAgICAgIH0sXG4gICAgICBcIlVzZXJMaXN0XCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc191c2VyX1VzZXJMaXN0XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuVXNlckxpc3RcIlxuICAgICAgfSxcbiAgICAgIFwiV2F0Y2hFdmVudFwiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc193YXRjaF9XYXRjaEV2ZW50XCIsXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLldhdGNoRXZlbnRcIlxuICAgICAgfVxuICAgIH0sXG4gICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlXG4gIH1cblxuXG59IiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cInNjaGVtYS50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxubW9kdWxlIEt1YmVybmV0ZXMge1xuICBcbiAgXG4gIHZhciBoaWRkZW5Qcm9wZXJ0aWVzID0gWydzdGF0dXMnLCAnZGVsZXRpb25UaW1lc3RhbXAnXTtcblxuICBmdW5jdGlvbiB3aXRoUHJvcGVydHkoc2NoZW1hOmFueSwgbmFtZTpzdHJpbmcsIGFjdGlvbjooYW55KSA9PiB2b2lkKSB7XG4gICAgaWYgKHNjaGVtYS5wcm9wZXJ0aWVzW25hbWVdKSB7XG4gICAgICBhY3Rpb24oc2NoZW1hLnByb3BlcnRpZXNbbmFtZV0pO1xuICAgIH1cbiAgfVxuICBcbiAgZnVuY3Rpb24gaGlkZVByb3BlcnRpZXMoc2NoZW1hKSB7XG4gICAgXy5mb3JFYWNoKGhpZGRlblByb3BlcnRpZXMsIChwcm9wZXJ0eSkgPT4ge1xuICAgICAgd2l0aFByb3BlcnR5KHNjaGVtYSwgcHJvcGVydHksIChwcm9wZXJ0eSkgPT4ge1xuICAgICAgICBwcm9wZXJ0eS5oaWRkZW4gPSB0cnVlO1xuICAgICAgfSlcbiAgICB9KTtcbiAgfVxuICBcbiAgX21vZHVsZS5mYWN0b3J5KCdLdWJlcm5ldGVzU2NoZW1hJywgWydTY2hlbWFSZWdpc3RyeScsIChzY2hlbWFzOkhhd3Rpb0Zvcm1zLlNjaGVtYVJlZ2lzdHJ5KSA9PiB7XG4gICAgY29uZmlndXJlU2NoZW1hKCk7XG4gICAgXG4gICAgc2NoZW1hcy5hZGRMaXN0ZW5lcihcIms4cyBzY2hlbWEgY3VzdG9taXplclwiLCAobmFtZSwgc2NoZW1hKSA9PiB7XG4gICAgICBpZiAoc2NoZW1hLnByb3BlcnRpZXMpIHtcbiAgICAgICAgaWYgKHNjaGVtYS5wcm9wZXJ0aWVzLm5hbWUpIHtcbiAgICAgICAgICBzY2hlbWEuY29udHJvbHMgPSBbJ25hbWUnLCAnKiddO1xuICAgICAgICB9XG4gICAgICAgIHdpdGhQcm9wZXJ0eShzY2hlbWEsICdwb3J0YWxJUCcsIChwcm9wZXJ0eSkgPT4ge1xuICAgICAgICAgIHByb3BlcnR5LmxhYmVsID0gXCJQb3J0YWwgSVBcIlxuICAgICAgICB9KTtcbiAgICAgICAgd2l0aFByb3BlcnR5KHNjaGVtYSwgJ3B1YmxpY0lQcycsIChwcm9wZXJ0eSkgPT4ge1xuICAgICAgICAgIHByb3BlcnR5LmxhYmVsID0gXCJQdWJsaWMgSVBzXCJcbiAgICAgICAgfSk7XG4gICAgICAgIHdpdGhQcm9wZXJ0eShzY2hlbWEsICdTcGVjJywgKHByb3BlcnR5KSA9PiB7XG4gICAgICAgICAgcHJvcGVydHkubGFiZWwgPSAnZmFsc2UnO1xuICAgICAgICB9KTtcbiAgICAgICAgd2l0aFByb3BlcnR5KHNjaGVtYSwgJ01ldGFkYXRhJywgKHByb3BlcnR5KSA9PiB7XG4gICAgICAgICAgcHJvcGVydHkubGFiZWwgPSAnZmFsc2UnO1xuICAgICAgICB9KTtcbiAgICAgICAgaGlkZVByb3BlcnRpZXMoc2NoZW1hKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKF8uZW5kc1dpdGgobmFtZSwgXCJTZXJ2aWNlU3BlY1wiKSkge1xuICAgICAgICBzY2hlbWEuY29udHJvbHMgPSBbXCJwb3J0YWxJUFwiLCBcImNyZWF0ZUV4dGVybmFsTG9hZEJhbGFuY2VyXCIsIFwic2Vzc2lvbkFmZmluaXR5XCIsIFwicHVibGljSVBzXCIsIFwicG9ydHNcIiwgXCJzZWxlY3RvclwiLCBcIipcIl07XG4gICAgICAgIHdpdGhQcm9wZXJ0eShzY2hlbWEsICdzZXNzaW9uQWZmaW5pdHknLCAocHJvcGVydHkpID0+IHtcbiAgICAgICAgICBsb2cuZGVidWcoXCJTY2hlbWE6IFwiLCBzY2hlbWEpO1xuICAgICAgICAgIHByb3BlcnR5LmVudW0gPSBbJ05vbmUnLCAnQ2xpZW50SVAnXTtcbiAgICAgICAgICBwcm9wZXJ0eS5kZWZhdWx0ID0gJ05vbmUnO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKF8uZW5kc1dpdGgobmFtZSwgXCJTZXJ2aWNlXCIpKSB7XG4gICAgICAgIHNjaGVtYS5jb250cm9scyA9IHVuZGVmaW5lZDtcbiAgICAgICAgc2NoZW1hLnRhYnMgPSB7XG4gICAgICAgICAgJ0Jhc2ljIEluZm9ybWF0aW9uJzogWydtZXRhZGF0YSddLFxuICAgICAgICAgICdEZXRhaWxzJzogWycqJ11cbiAgICAgICAgfVxuICAgICAgICBsb2cuZGVidWcoXCJOYW1lOiBcIiwgbmFtZSwgXCIgU2NoZW1hOiBcIiwgc2NoZW1hKTtcbiAgICAgIH1cbiAgICAgXG4gICAgfSk7XG4gICAgXG4gICAgXG4gICAgc2NoZW1hcy5hZGRTY2hlbWEoJ2t1YmVybmV0ZXMnLCA8YW55PiBzY2hlbWEpO1xuICAgIC8vIG5vdyBsZXRzIGl0ZXJhdGUgYW5kIGFkZCBhbGwgdGhlIGRlZmluaXRpb25zIHRvb1xuICAgIGFuZ3VsYXIuZm9yRWFjaChzY2hlbWEuZGVmaW5pdGlvbnMsIChkZWZpbml0aW9uLCB0eXBlTmFtZSkgPT4ge1xuICAgICAgLy9zY2hlbWFzLmFkZFNjaGVtYSh0eXBlTmFtZSwgZGVmaW5pdGlvbik7XG4gICAgICBzY2hlbWFzLmFkZFNjaGVtYShcIiMvZGVmaW5pdGlvbnMvXCIgKyB0eXBlTmFtZSwgZGVmaW5pdGlvbik7XG4gICAgfSk7XG4gICAgcmV0dXJuIHNjaGVtYTtcbiAgfV0pO1xuXG5cbiAgXG59IiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblxuICAvLyBmYWNhZGUgdGhpcyB0byB0aGUgd2F0Y2hlciBzZXJ2aWNlXG4gIGNsYXNzIEt1YmVybmV0ZXNTdGF0ZUltcGwgaW1wbGVtZW50cyBLdWJlcm5ldGVzU3RhdGUge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgd2F0Y2hlcjpXYXRjaGVyU2VydmljZSkge1xuICAgIH1cbiAgICBnZXQgbmFtZXNwYWNlcygpOkFycmF5PHN0cmluZz4ge1xuICAgICAgcmV0dXJuIF8ubWFwKHRoaXMud2F0Y2hlci5nZXRPYmplY3RzKFdhdGNoVHlwZXMuTkFNRVNQQUNFUyksIChuYW1lc3BhY2UpID0+IHtcbiAgICAgICAgcmV0dXJuIG5hbWVzcGFjZS5tZXRhZGF0YS5uYW1lO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGdldCBzZWxlY3RlZE5hbWVzcGFjZSgpOnN0cmluZyB7XG4gICAgICByZXR1cm4gdGhpcy53YXRjaGVyLmdldE5hbWVzcGFjZSgpO1xuICAgIH1cbiAgICBzZXQgc2VsZWN0ZWROYW1lc3BhY2UobmFtZXNwYWNlOnN0cmluZykge1xuICAgICAgdGhpcy53YXRjaGVyLnNldE5hbWVzcGFjZShuYW1lc3BhY2UpO1xuICAgIH1cbiAgfVxuXG4gIF9tb2R1bGUuZmFjdG9yeSgnS3ViZXJuZXRlc1N0YXRlJywgWydXYXRjaGVyU2VydmljZScsICh3YXRjaGVyOldhdGNoZXJTZXJ2aWNlKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBLdWJlcm5ldGVzU3RhdGVJbXBsKHdhdGNoZXIpO1xuICB9XSk7XG5cbiAgLy8gVE9ETyB0aGlzIGRvZXNuJ3QgbmVlZCB0byBiZSBhIHNlcnZpY2UgcmVhbGx5XG4gIF9tb2R1bGUuZmFjdG9yeSgnS3ViZXJuZXRlc0FwaVVSTCcsICgpID0+IGt1YmVybmV0ZXNBcGlVcmwoKSk7XG5cbiAgLy8gVE9ETyB3ZSdsbCBnZXQgcmlkIG9mIHRoaXMuLi5cbiAgX21vZHVsZS5mYWN0b3J5KCdLdWJlcm5ldGVzVmVyc2lvbicsIFsoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHF1ZXJ5OiAoKSA9PiBudWxsXG4gICAgfVxuICB9XSk7XG5cbiAgLy8gVE9ETyBsZXQncyBtb3ZlIHRoZXNlIGludG8gS3ViZXJuZXRlc01vZGVsIHNvIGNvbnRyb2xsZXJzIGRvbid0IGhhdmUgdG8gaW5qZWN0IHRoZW0gc2VwYXJhdGVseVxuICBfbW9kdWxlLmZhY3RvcnkoJ0t1YmVybmV0ZXNQb2RzJywgWydLdWJlcm5ldGVzTW9kZWwnLCAoS3ViZXJuZXRlc01vZGVsKSA9PiB7XG4gICAgcmV0dXJuIEt1YmVybmV0ZXNNb2RlbFsncG9kc1Jlc291cmNlJ107XG4gIH1dKTtcblxuICBfbW9kdWxlLmZhY3RvcnkoJ0t1YmVybmV0ZXNSZXBsaWNhdGlvbkNvbnRyb2xsZXJzJywgWydLdWJlcm5ldGVzTW9kZWwnLCAoS3ViZXJuZXRlc01vZGVsKSA9PiB7XG4gICAgcmV0dXJuIEt1YmVybmV0ZXNNb2RlbFsncmVwbGljYXRpb25jb250cm9sbGVyc1Jlc291cmNlJ107XG4gIH1dKTtcblxuICBfbW9kdWxlLmZhY3RvcnkoJ0t1YmVybmV0ZXNTZXJ2aWNlcycsIFsnS3ViZXJuZXRlc01vZGVsJywgKEt1YmVybmV0ZXNNb2RlbCkgPT4ge1xuICAgIHJldHVybiBLdWJlcm5ldGVzTW9kZWxbJ3NlcnZpY2VzUmVzb3VyY2UnXTtcbiAgfV0pO1xuXG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzTW9kZWwudHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblxuICBleHBvcnQgdmFyIEZpbGVEcm9wQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJGaWxlRHJvcENvbnRyb2xsZXJcIiwgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiRmlsZVVwbG9hZGVyXCIsICckaHR0cCcsICgkc2NvcGUsIG1vZGVsOkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEZpbGVVcGxvYWRlciwgJGh0dHA6bmcuSUh0dHBTZXJ2aWNlKSA9PiB7XG5cbiAgICAgIHZhciBsb2cgPSBMb2dnZXIuZ2V0KCdrdWJlcm5ldGVzLWZpbGUtdXBsb2FkZXInKTtcblxuICAgICAgdmFyIHVwbG9hZGVyID0gJHNjb3BlLnVwbG9hZGVyID0gPEZpbGVVcGxvYWQuRmlsZVVwbG9hZGVyPiBuZXcgRmlsZVVwbG9hZGVyKDxGaWxlVXBsb2FkLklPcHRpb25zPntcbiAgICAgICAgYXV0b1VwbG9hZDogZmFsc2UsXG4gICAgICAgIHJlbW92ZUFmdGVyVXBsb2FkOiB0cnVlLFxuICAgICAgICB1cmw6IGt1YmVybmV0ZXNBcGlVcmwoKVxuICAgICAgfSk7XG5cbiAgICAgICRzY29wZS51cGxvYWRlci5vbkFmdGVyQWRkaW5nRmlsZSA9IChmaWxlKSA9PiB7XG4gICAgICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgIGlmIChyZWFkZXIucmVhZHlTdGF0ZSA9PT0gMikge1xuICAgICAgICAgICAgbG9nLmRlYnVnKFwiRmlsZSBhZGRlZDogXCIsIGZpbGUpOyAgICAgICAgXG4gICAgICAgICAgICB2YXIgZGF0YSA9IHJlYWRlci5yZXN1bHQ7XG4gICAgICAgICAgICB2YXIgb2JqID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChfLmVuZHNXaXRoKGZpbGUuX2ZpbGUubmFtZSwgJy5qc29uJykpIHtcbiAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiUGFyc2luZyBKU09OIGZpbGVcIik7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgb2JqID0gYW5ndWxhci5mcm9tSnNvbihkYXRhKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiRmFpbGVkIHRvIHJlYWQgZHJvcHBlZCBmaWxlIFwiLCBmaWxlLl9maWxlLm5hbWUsIFwiOiBcIiwgZXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXy5lbmRzV2l0aChmaWxlLl9maWxlLm5hbWUsICcueWFtbCcpKSB7XG4gICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcIlBhcnNpbmcgWUFNTCBmaWxlXCIpO1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIG9iaiA9IGpzeWFtbC5sb2FkKGRhdGEpO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBsb2cuZGVidWcoXCJGYWlsZWQgdG8gcmVhZCBkcm9wcGVkIGZpbGUgXCIsIGZpbGUuX2ZpbGUubmFtZSwgXCI6IFwiLCBlcnIpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiVW5rbm93biBmaWxlIHR5cGUgZm9yIGZpbGU6IFwiLCBmaWxlLl9maWxlLm5hbWUpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsb2cuZGVidWcoXCJEcm9wcGVkIG9iamVjdDogXCIsIG9iaik7XG4gICAgICAgICAgICBpZiAoIUt1YmVybmV0ZXNBUEkuZ2V0TmFtZXNwYWNlKG9iaikpIHtcbiAgICAgICAgICAgICAgb2JqLm1ldGFkYXRhLm5hbWVzcGFjZSA9IG1vZGVsLmN1cnJlbnROYW1lc3BhY2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEt1YmVybmV0ZXNBUEkucHV0KHtcbiAgICAgICAgICAgICAgb2JqZWN0OiBvYmosXG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgQ29yZS5ub3RpZmljYXRpb24oXCJzdWNjZXNzXCIsIFwiQXBwbGllZCBcIiArIGZpbGUuX2ZpbGUubmFtZSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgbG9nLmluZm8oXCJHb3QgZXJyb3IgYXBwbHlpbmdcIiwgZmlsZS5fZmlsZS5uYW1lLCBcIjogXCIsIGVycik7XG4gICAgICAgICAgICAgICAgQ29yZS5ub3RpZmljYXRpb24oXCJ3YXJuaW5nXCIsIFwiRmFpbGVkIHRvIGFwcGx5IFwiICsgZmlsZS5fZmlsZS5uYW1lICsgXCIsIGVycm9yOiBcIiArIGVyci5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlYWRlci5yZWFkQXNUZXh0KGZpbGUuX2ZpbGUpO1xuICAgICAgfTtcblxuICAgICAgJHNjb3BlLnVwbG9hZGVyLm9uQmVmb3JlVXBsb2FkSXRlbSA9IChpdGVtKSA9PiB7XG4gICAgICAgIGxvZy5kZWJ1ZyhcIlVwbG9hZGluZzogXCIsIGl0ZW0pO1xuICAgICAgICAvL0NvcmUubm90aWZpY2F0aW9uKCdpbmZvJywgJ1VwbG9hZGluZyAnICsgaXRlbSk7XG4gICAgICB9O1xuXG4gICAgICAkc2NvcGUudXBsb2FkZXIub25TdWNjZXNzSXRlbSA9IChpdGVtOkZpbGVVcGxvYWQuSUZpbGVJdGVtKSA9PiB7XG4gICAgICAgIGxvZy5kZWJ1ZyhcIm9uU3VjY2Vzc0l0ZW06IFwiLCBpdGVtKTtcbiAgICAgIH07XG5cbiAgICAgICRzY29wZS51cGxvYWRlci5vbkVycm9ySXRlbSA9IChpdGVtLCByZXNwb25zZSwgc3RhdHVzKSA9PiB7XG4gICAgICAgIGxvZy5kZWJ1ZyhcIkZhaWxlZCB0byBhcHBseSwgcmVzcG9uc2U6IFwiLCByZXNwb25zZSwgXCIgc3RhdHVzOiBcIiwgc3RhdHVzKTtcbiAgICAgIH1cblxuICB9XSk7XG5cdFxuXHRleHBvcnQgdmFyIE5hbWVzcGFjZUNvbnRyb2xsZXIgPSBjb250cm9sbGVyKCdOYW1lc3BhY2VDb250cm9sbGVyJywgWyckc2NvcGUnLCAnV2F0Y2hlclNlcnZpY2UnLCAoJHNjb3BlLCB3YXRjaGVyOldhdGNoZXJTZXJ2aWNlKSA9PiB7XG5cdFx0JHNjb3BlLm5hbWVzcGFjZXMgPSB3YXRjaGVyLmdldE9iamVjdHMoJ25hbWVzcGFjZXMnKTtcblx0XHQkc2NvcGUuJHdhdGNoQ29sbGVjdGlvbignbmFtZXNwYWNlcycsIChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IHtcblx0XHRcdGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUpIHtcblx0XHRcdFx0JHNjb3BlLm5hbWVzcGFjZSA9IHdhdGNoZXIuZ2V0TmFtZXNwYWNlKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0JHNjb3BlLiR3YXRjaCgnbmFtZXNwYWNlJywgKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgPT4ge1xuXHRcdFx0aWYgKG5ld1ZhbHVlICE9PSBvbGRWYWx1ZSkge1xuXHRcdFx0XHRpZiAobmV3VmFsdWUgIT09IG9sZFZhbHVlKSB7XG5cdFx0XHRcdFx0d2F0Y2hlci5zZXROYW1lc3BhY2UobmV3VmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1dKTtcblxuICBleHBvcnQgdmFyIFRvcExldmVsID0gY29udHJvbGxlcihcIlRvcExldmVsXCIsIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNWZXJzaW9uXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsICgkc2NvcGUsIEt1YmVybmV0ZXNWZXJzaW9uOm5nLnJlc291cmNlLklSZXNvdXJjZUNsYXNzPGFueT4sIEt1YmVybmV0ZXNTdGF0ZSkgPT4ge1xuXG4gICAgJHNjb3BlLnZlcnNpb24gPSB1bmRlZmluZWQ7XG5cbiAgICAkc2NvcGUuc2hvd0FwcFZpZXcgPSBpc0FwcFZpZXcoKTtcblxuICAgICRzY29wZS5pc0FjdGl2ZSA9IChocmVmKSA9PiB7XG4gICAgICByZXR1cm4gaXNMaW5rQWN0aXZlKGhyZWYpO1xuICAgIH07XG5cbiAgICAkc2NvcGUubW9kZSA9ICd5YW1sJztcbiAgICAkc2NvcGUucmF3TW9kZSA9IHRydWU7XG4gICAgJHNjb3BlLmRpcnR5ID0gZmFsc2U7XG4gICAgJHNjb3BlLnJlYWRPbmx5ID0gdHJ1ZTtcbiAgICAkc2NvcGUucmF3TW9kZWwgPSBudWxsO1xuXG4gICAgJHNjb3BlLiRvbignaGF3dGlvRWRpdG9yX2RlZmF1bHRfZGlydHknLCAoJGV2ZW50LCBkaXJ0eSkgPT4ge1xuICAgICAgJHNjb3BlLmRpcnR5ID0gZGlydHk7XG4gICAgfSk7XG5cbiAgICAkc2NvcGUuc2F2ZSA9IChyYXdNb2RlbCkgPT4ge1xuICAgICAgdmFyIG9iajphbnkgPSBudWxsO1xuICAgICAgdmFyIHN0ciA9IHJhd01vZGVsLnJlcGxhY2UoL1xcdC9nLCBcIiAgICBcIik7XG4gICAgICB0cnkge1xuICAgICAgICBvYmogPSBqc3lhbWwubG9hZChzdHIpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIENvcmUubm90aWZpY2F0aW9uKFwid2FybmluZ1wiLCBcIkZhaWxlZCB0byBzYXZlIG9iamVjdCwgZXJyb3I6IFxcXCJcIiArIGVyciArIFwiXFxcIlwiKTtcbiAgICAgIH1cbiAgICAgIGlmICghb2JqKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgICRzY29wZS5yZWFkT25seSA9IHRydWU7XG4gICAgICBLdWJlcm5ldGVzQVBJLnB1dCh7XG4gICAgICAgIG9iamVjdDogb2JqLFxuICAgICAgICBzdWNjZXNzOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICRzY29wZS5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICAgIENvcmUubm90aWZpY2F0aW9uKFwic3VjY2Vzc1wiLCBcIlNhdmVkIG9iamVjdCBcIiArIGdldE5hbWUob2JqKSk7XG4gICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkdvdCBlcnJvcjogXCIsIGVycik7XG4gICAgICAgICAgQ29yZS5ub3RpZmljYXRpb24oXCJ3YXJuaW5nXCIsIFwiRmFpbGVkIHRvIHNhdmUgb2JqZWN0LCBlcnJvcjogXFxcIlwiICsgZXJyLm1lc3NhZ2UgKyBcIlxcXCJcIik7XG4gICAgICAgICAgJHNjb3BlLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuXG4gICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XG5cbiAgICBLdWJlcm5ldGVzVmVyc2lvbi5xdWVyeSgocmVzcG9uc2UpID0+IHtcbiAgICAgICRzY29wZS52ZXJzaW9uID0gcmVzcG9uc2U7XG4gICAgfSk7XG5cbiAgfV0pO1xuXG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblx0XG5cdGV4cG9ydCB2YXIgTmFtZXNwYWNlQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJOYW1lc3BhY2VDb250cm9sbGVyXCIsIFtcIiRzY29wZVwiLCBcIldhdGNoZXJTZXJ2aWNlXCIsICgkc2NvcGUsIHdhdGNoZXI6V2F0Y2hlclNlcnZpY2UpID0+IHtcblx0XHQkc2NvcGUud2F0Y2hlciA9IHdhdGNoZXI7XG5cdFx0JHNjb3BlLm5hbWVzcGFjZU9iamVjdHMgPSB3YXRjaGVyLmdldE9iamVjdHMoJ25hbWVzcGFjZXMnKTtcblx0XHQkc2NvcGUubmFtZXNwYWNlID0gd2F0Y2hlci5nZXROYW1lc3BhY2UoKTtcblx0XHQkc2NvcGUubmFtZXNwYWNlcyA9IFtdO1xuXHRcdCRzY29wZS4kd2F0Y2goJ25hbWVzcGFjZScsIChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IHtcblx0XHRcdGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUpIHtcblx0XHRcdFx0d2F0Y2hlci5zZXROYW1lc3BhY2UobmV3VmFsdWUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdCRzY29wZS4kd2F0Y2goJ3dhdGNoZXIuZ2V0TmFtZXNwYWNlKCknLCAobmV3VmFsdWUsIG9sZFZhbHVlKSA9PiB7XG5cdFx0XHRpZiAobmV3VmFsdWUgIT09IG9sZFZhbHVlKSB7XG5cdFx0XHRcdCRzY29wZS5uYW1lc3BhY2UgPSBuZXdWYWx1ZTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHQkc2NvcGUuJHdhdGNoQ29sbGVjdGlvbignbmFtZXNwYWNlT2JqZWN0cycsIChuYW1lc3BhY2VPYmplY3RzKSA9PiB7XG5cdFx0XHQkc2NvcGUubmFtZXNwYWNlcyA9IF8ubWFwKG5hbWVzcGFjZU9iamVjdHMsIChuYW1lc3BhY2U6YW55KSA9PiBuYW1lc3BhY2UubWV0YWRhdGEubmFtZSk7XG5cdFx0fSlcdFx0XG5cdH1dKTtcblx0XG59IiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblxuICB2YXIgT3ZlcnZpZXdEaXJlY3RpdmUgPSBfbW9kdWxlLmRpcmVjdGl2ZShcImt1YmVybmV0ZXNPdmVydmlld1wiLCBbXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRjb21waWxlXCIsIFwiJGludGVycG9sYXRlXCIsIFwiJHRpbWVvdXRcIiwgXCIkd2luZG93XCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsICdLdWJlcm5ldGVzTW9kZWwnLCAoJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkY29tcGlsZTpuZy5JQ29tcGlsZVNlcnZpY2UsICRpbnRlcnBvbGF0ZTpuZy5JSW50ZXJwb2xhdGVTZXJ2aWNlLCAkdGltZW91dDpuZy5JVGltZW91dFNlcnZpY2UsICR3aW5kb3c6bmcuSVdpbmRvd1NlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc01vZGVsKSA9PiB7XG5cbiAgICB2YXIgbG9nID0gTG9nZ2VyLmdldCgna3ViZXJuZXRlcy1vdmVydmlldycpO1xuICAgIHZhciBtb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcbiAgICB2YXIgc3RhdGUgPSBLdWJlcm5ldGVzU3RhdGU7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcmVzdHJpY3Q6ICdFJyxcbiAgICAgIHJlcGxhY2U6IHRydWUsXG4gICAgICBsaW5rOiAoc2NvcGUsIGVsZW1lbnQsIGF0dHIpID0+IHtcbiAgICAgICAgc2NvcGUubW9kZWwgPSBtb2RlbDtcbiAgICAgICAgZWxlbWVudC5jc3Moe3Zpc2liaWxpdHk6ICdoaWRkZW4nfSk7XG4gICAgICAgIHNjb3BlLmdldEVudGl0eSA9ICh0eXBlOnN0cmluZywga2V5OnN0cmluZykgPT4ge1xuICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnaG9zdCc6XG4gICAgICAgICAgICAgIHJldHVybiBtb2RlbC5wb2RzQnlIb3N0W2tleV07XG4gICAgICAgICAgICBjYXNlICdwb2QnOlxuICAgICAgICAgICAgICByZXR1cm4gbW9kZWwucG9kc0J5S2V5W2tleV07XG4gICAgICAgICAgICBjYXNlICdyZXBsaWNhdGlvbkNvbnRyb2xsZXInOlxuICAgICAgICAgICAgICByZXR1cm4gbW9kZWwucmVwbGljYXRpb25Db250cm9sbGVyc0J5S2V5W2tleV07XG4gICAgICAgICAgICBjYXNlICdzZXJ2aWNlJzpcbiAgICAgICAgICAgICAgcmV0dXJuIG1vZGVsLnNlcnZpY2VzQnlLZXlba2V5XTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHNjb3BlLmt1YmVybmV0ZXMgPSBzdGF0ZTtcblxuICAgICAgICBzY29wZS5jdXN0b21pemVEZWZhdWx0T3B0aW9ucyA9IChvcHRpb25zKSA9PiB7XG4gICAgICAgICAgb3B0aW9ucy5FbmRwb2ludCA9IFsnQmxhbmsnLCB7fV07XG4gICAgICAgIH07XG4gICAgICAgIHNjb3BlLm1vdXNlRW50ZXIgPSAoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgaWYgKHNjb3BlLmpzUGx1bWIpIHtcbiAgICAgICAgICAgIGFuZ3VsYXIuZWxlbWVudCgkZXZlbnQuY3VycmVudFRhcmdldCkuYWRkQ2xhc3MoXCJob3ZlcmVkXCIpO1xuICAgICAgICAgICAgc2NvcGUuanNQbHVtYi5nZXRFbmRwb2ludHMoJGV2ZW50LmN1cnJlbnRUYXJnZXQpLmZvckVhY2goKGVuZHBvaW50KSA9PiB7XG4gICAgICAgICAgICAgIGVuZHBvaW50LmNvbm5lY3Rpb25zLmZvckVhY2goKGNvbm5lY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbm5lY3Rpb24uaXNIb3ZlcigpKSB7XG4gICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLnNldEhvdmVyKHRydWUpO1xuICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5lbmRwb2ludHMuZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5tb3VzZUVudGVyKHtcbiAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0OiBlLmVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNjb3BlLm1vdXNlTGVhdmUgPSAoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgaWYgKHNjb3BlLmpzUGx1bWIpIHtcbiAgICAgICAgICAgIGFuZ3VsYXIuZWxlbWVudCgkZXZlbnQuY3VycmVudFRhcmdldCkucmVtb3ZlQ2xhc3MoXCJob3ZlcmVkXCIpO1xuICAgICAgICAgICAgc2NvcGUuanNQbHVtYi5nZXRFbmRwb2ludHMoJGV2ZW50LmN1cnJlbnRUYXJnZXQpLmZvckVhY2goKGVuZHBvaW50KSA9PiB7XG4gICAgICAgICAgICAgIGVuZHBvaW50LmNvbm5lY3Rpb25zLmZvckVhY2goKGNvbm5lY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY29ubmVjdGlvbi5pc0hvdmVyKCkpIHtcbiAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uc2V0SG92ZXIoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5lbmRwb2ludHMuZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5tb3VzZUxlYXZlKHtcbiAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0OiBlLmVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qXG4gICAgICAgIHNjb3BlLmN1c3RvbWl6ZUVuZHBvaW50T3B0aW9ucyA9IChqc1BsdW1iLCBub2RlLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgdmFyIHR5cGUgPSBub2RlLmVsLmF0dHIoJ2RhdGEtdHlwZScpO1xuICAgICAgICAgIC8vIGxvZy5kZWJ1ZyhcImVuZHBvaW50IHR5cGU6IFwiLCB0eXBlKTtcbiAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3BvZCc6XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2VydmljZSc6XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncmVwbGljYXRpb25Db250cm9sbGVyJzpcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAqL1xuICAgICAgICBzY29wZS5jdXN0b21pemVDb25uZWN0aW9uT3B0aW9ucyA9IChqc1BsdW1iLCBlZGdlLCBwYXJhbXMsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICB2YXIgdHlwZSA9IGVkZ2Uuc291cmNlLmVsLmF0dHIoJ2RhdGEtdHlwZScpO1xuICAgICAgICAgIG9wdGlvbnMuY29ubmVjdG9yID0gWyBcIkJlemllclwiLCB7IGN1cnZpbmVzczogNTAsIHN0dWI6IDI1LCBhbHdheXNSZXNwZWN0U3R1YnM6IHRydWUgfSBdO1xuICAgICAgICAgIHBhcmFtcy5wYWludFN0eWxlID0ge1xuICAgICAgICAgICAgbGluZVdpZHRoOiAyLFxuICAgICAgICAgICAgc3Ryb2tlU3R5bGU6ICcjNTU1NWNjJ1xuICAgICAgICAgIH07XG4gICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdwb2QnOlxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NlcnZpY2UnOlxuICAgICAgICAgICAgICBwYXJhbXMuYW5jaG9ycyA9IFtcbiAgICAgICAgICAgICAgICBbIFwiQ29udGludW91c1wiLCB7IGZhY2VzOiBbXCJyaWdodFwiXSB9IF0sXG4gICAgICAgICAgICAgICAgWyBcIkNvbnRpbnVvdXNcIiwgeyBmYWNlczogW1wibGVmdFwiXSB9IF0gXG4gICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICBbMSwgMC41LCAwLCAwLCAtMTAsIC05MF0sXG4gICAgICAgICAgICAgICAgWzAsIDAuNSwgMCwgMCwgLTEwLCAtOTBdXG4gICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdyZXBsaWNhdGlvbkNvbnRyb2xsZXInOlxuICAgICAgICAgICAgICBwYXJhbXMuYW5jaG9ycyA9IFtcbiAgICAgICAgICAgICAgICBbIFwiUGVyaW1ldGVyXCIsIHsgc2hhcGU6IFwiQ2lyY2xlXCIgfSBdLFxuICAgICAgICAgICAgICAgIFsgXCJDb250aW51b3VzXCIsIHsgZmFjZXM6IFtcInJpZ2h0XCJdIH0gXVxuICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgWzAsIDAuNSwgMCwgMCwgLTEwLCAtOTBdLFxuICAgICAgICAgICAgICAgIFsxLCAwLjUsIDAsIDAsIC0xMCwgLTkwXVxuICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvL2xvZy5kZWJ1ZyhcImNvbm5lY3Rpb24gc291cmNlIHR5cGU6IFwiLCB0eXBlKTtcbiAgICAgICAgICByZXR1cm4gb3B0aW9ucztcbiAgICAgICAgfTtcbiAgICAgICAgZnVuY3Rpb24gaW50ZXJwb2xhdGUodGVtcGxhdGUsIGNvbmZpZykge1xuICAgICAgICAgIHJldHVybiAkaW50ZXJwb2xhdGUodGVtcGxhdGUpKGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0ZW1wbGF0ZSwgdGhpbmdOYW1lLCB0aGluZykge1xuICAgICAgICAgIHZhciBjb25maWcgPSB7fTtcbiAgICAgICAgICBjb25maWdbdGhpbmdOYW1lXSA9IHRoaW5nO1xuICAgICAgICAgIHJldHVybiBpbnRlcnBvbGF0ZSh0ZW1wbGF0ZSwgY29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50cyh0ZW1wbGF0ZSwgdGhpbmdOYW1lLCB0aGluZ3MpIHtcbiAgICAgICAgICByZXR1cm4gdGhpbmdzLm1hcCgodGhpbmcpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KHRlbXBsYXRlLCB0aGluZ05hbWUsIHRoaW5nKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhcHBlbmROZXdFbGVtZW50cyhwYXJlbnRFbCwgdGVtcGxhdGUsIHRoaW5nTmFtZSwgdGhpbmdzKSB7XG4gICAgICAgICAgdGhpbmdzLmZvckVhY2goKHRoaW5nKSA9PiB7XG4gICAgICAgICAgICB2YXIga2V5ID0gdGhpbmdbJ19rZXknXSB8fCB0aGluZ1snZWxlbWVudElkJ10gfHwgdGhpbmdbJ2lkJ11cbiAgICAgICAgICAgIHZhciBleGlzdGluZyA9IHBhcmVudEVsLmZpbmQoXCIjXCIgKyBrZXkgKTtcbiAgICAgICAgICAgIGlmICghZXhpc3RpbmcubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcImV4aXN0aW5nOiBcIiwgZXhpc3RpbmcsIFwiIGtleTogXCIsIGtleSk7XG4gICAgICAgICAgICAgIHBhcmVudEVsLmFwcGVuZCgkY29tcGlsZShjcmVhdGVFbGVtZW50KHRlbXBsYXRlLCB0aGluZ05hbWUsIHRoaW5nKSkoc2NvcGUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBuYW1lc3BhY2VGaWx0ZXIoaXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIGdldE5hbWVzcGFjZShpdGVtKSA9PT0gc2NvcGUua3ViZXJuZXRlcy5zZWxlY3RlZE5hbWVzcGFjZTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBmaXJzdERyYXcoKSB7XG4gICAgICAgICAgbG9nLmRlYnVnKFwiRmlyc3QgZHJhd1wiKTtcbiAgICAgICAgICBlbGVtZW50LmVtcHR5KCk7XG4gICAgICAgICAgdmFyIHNlcnZpY2VzID0gbW9kZWwuc2VydmljZXM7XG4gICAgICAgICAgdmFyIHJlcGxpY2F0aW9uQ29udHJvbGxlcnMgPSBtb2RlbC5yZXBsaWNhdGlvbkNvbnRyb2xsZXJzO1xuICAgICAgICAgIHZhciBwb2RzID0gbW9kZWwucG9kcztcbiAgICAgICAgICB2YXIgaG9zdHMgPSBtb2RlbC5ob3N0cztcbiAgICAgICAgICAvLyBsb2cuZGVidWcoXCJob3N0czogXCIsIG1vZGVsLmhvc3RzKTtcbiAgICAgICAgICB2YXIgcGFyZW50RWwgPSBhbmd1bGFyLmVsZW1lbnQoJHRlbXBsYXRlQ2FjaGUuZ2V0KFwib3ZlcnZpZXdUZW1wbGF0ZS5odG1sXCIpKTtcbiAgICAgICAgICB2YXIgc2VydmljZXNFbCA9IHBhcmVudEVsLmZpbmQoXCIuc2VydmljZXNcIik7XG4gICAgICAgICAgdmFyIGhvc3RzRWwgPSBwYXJlbnRFbC5maW5kKFwiLmhvc3RzXCIpO1xuICAgICAgICAgIHZhciByZXBsaWNhdGlvbkNvbnRyb2xsZXJzRWwgPSBwYXJlbnRFbC5maW5kKFwiLnJlcGxpY2F0aW9uQ29udHJvbGxlcnNcIik7XG5cbiAgICAgICAgICBzZXJ2aWNlc0VsLmFwcGVuZChjcmVhdGVFbGVtZW50cygkdGVtcGxhdGVDYWNoZS5nZXQoXCJzZXJ2aWNlVGVtcGxhdGUuaHRtbFwiKSwgJ3NlcnZpY2UnLCBzZXJ2aWNlcy5maWx0ZXIobmFtZXNwYWNlRmlsdGVyKSkpO1xuICAgICAgICAgIHJlcGxpY2F0aW9uQ29udHJvbGxlcnNFbC5hcHBlbmQoY3JlYXRlRWxlbWVudHMoJHRlbXBsYXRlQ2FjaGUuZ2V0KFwicmVwbGljYXRpb25Db250cm9sbGVyVGVtcGxhdGUuaHRtbFwiKSwgJ3JlcGxpY2F0aW9uQ29udHJvbGxlcicsIHJlcGxpY2F0aW9uQ29udHJvbGxlcnMuZmlsdGVyKG5hbWVzcGFjZUZpbHRlcikpKTtcblxuICAgICAgICAgIGhvc3RzLmZvckVhY2goKGhvc3QpID0+IHtcbiAgICAgICAgICAgIHZhciBob3N0RWwgPSBhbmd1bGFyLmVsZW1lbnQoY3JlYXRlRWxlbWVudCgkdGVtcGxhdGVDYWNoZS5nZXQoXCJvdmVydmlld0hvc3RUZW1wbGF0ZS5odG1sXCIpLCAnaG9zdCcsIGhvc3QpKTtcbiAgICAgICAgICAgIHZhciBwb2RDb250YWluZXIgPSBhbmd1bGFyLmVsZW1lbnQoaG9zdEVsLmZpbmQoJy5wb2QtY29udGFpbmVyJykpO1xuICAgICAgICAgICAgcG9kQ29udGFpbmVyLmFwcGVuZChjcmVhdGVFbGVtZW50cygkdGVtcGxhdGVDYWNoZS5nZXQoXCJwb2RUZW1wbGF0ZS5odG1sXCIpLCBcInBvZFwiLCBob3N0LnBvZHMpKTtcbiAgICAgICAgICAgIGhvc3RzRWwuYXBwZW5kKGhvc3RFbCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgLy9wYXJlbnRFbC5hcHBlbmQoY3JlYXRlRWxlbWVudHMoJHRlbXBsYXRlQ2FjaGUuZ2V0KFwicG9kVGVtcGxhdGUuaHRtbFwiKSwgJ3BvZCcsIHBvZHMpKTtcbiAgICAgICAgICBlbGVtZW50LmFwcGVuZCgkY29tcGlsZShwYXJlbnRFbCkoc2NvcGUpKTtcbiAgICAgICAgICAkdGltZW91dCgoKSA9PiB7IGVsZW1lbnQuY3NzKHt2aXNpYmlsaXR5OiAndmlzaWJsZSd9KTsgfSwgMjUwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICAgICAgICBzY29wZS4kZW1pdCgnanNwbHVtYkRvV2hpbGVTdXNwZW5kZWQnLCAoKSA9PiB7XG4gICAgICAgICAgICBsb2cuZGVidWcoXCJVcGRhdGVcIik7XG4gICAgICAgICAgICB2YXIgc2VydmljZXMgPSBtb2RlbC5zZXJ2aWNlcztcbiAgICAgICAgICAgIHZhciByZXBsaWNhdGlvbkNvbnRyb2xsZXJzID0gbW9kZWwucmVwbGljYXRpb25Db250cm9sbGVycztcbiAgICAgICAgICAgIHZhciBwb2RzID0gbW9kZWwucG9kcztcbiAgICAgICAgICAgIHZhciBob3N0cyA9IG1vZGVsLmhvc3RzO1xuICAgICAgICAgICAgdmFyIHBhcmVudEVsID0gZWxlbWVudC5maW5kKCdbaGF3dGlvLWpzcGx1bWJdJyk7XG4gICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSBwYXJlbnRFbC5maW5kKCcuanNwbHVtYi1ub2RlJyk7XG4gICAgICAgICAgICBjaGlsZHJlbi5lYWNoKChpbmRleCwgYykgPT4ge1xuICAgICAgICAgICAgICB2YXIgY2hpbGQgPSBhbmd1bGFyLmVsZW1lbnQoYyk7XG4gICAgICAgICAgICAgIHZhciBrZXkgPSBjaGlsZC5hdHRyKCdpZCcpO1xuICAgICAgICAgICAgICBsb2cuZGVidWcoJ2tleTogJywga2V5KTtcbiAgICAgICAgICAgICAgaWYgKENvcmUuaXNCbGFuayhrZXkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHZhciB0eXBlID0gY2hpbGQuYXR0cignZGF0YS10eXBlJyk7XG4gICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2hvc3QnOlxuICAgICAgICAgICAgICAgICAgaWYgKGtleSBpbiBtb2RlbC5wb2RzQnlIb3N0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3NlcnZpY2UnOlxuICAgICAgICAgICAgICAgICAgaWYgKGtleSBpbiBtb2RlbC5zZXJ2aWNlc0J5S2V5ICYmIGdldE5hbWVzcGFjZShtb2RlbC5zZXJ2aWNlc0J5S2V5W2tleV0pID09IHNjb3BlLmt1YmVybmV0ZXMuc2VsZWN0ZWROYW1lc3BhY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlcnZpY2UgPSBtb2RlbC5zZXJ2aWNlc0J5S2V5W2tleV07XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkLmF0dHIoJ2Nvbm5lY3QtdG8nLCBzZXJ2aWNlLmNvbm5lY3RUbyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3BvZCc6XG4gICAgICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgICAgaWYgKGhhc0lkKHBvZHMsIGlkKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgaWYgKGtleSBpbiBtb2RlbC5wb2RzQnlLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAncmVwbGljYXRpb25Db250cm9sbGVyJzpcbiAgICAgICAgICAgICAgICAgIGlmIChrZXkgaW4gbW9kZWwucmVwbGljYXRpb25Db250cm9sbGVyc0J5S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXBsaWNhdGlvbkNvbnRyb2xsZXIgPSBtb2RlbC5yZXBsaWNhdGlvbkNvbnRyb2xsZXJzQnlLZXlba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQuYXR0cignY29ubmVjdC10bycsIHJlcGxpY2F0aW9uQ29udHJvbGxlci5jb25uZWN0VG8pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiSWdub3JpbmcgZWxlbWVudCB3aXRoIHVua25vd24gdHlwZVwiKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsb2cuZGVidWcoXCJSZW1vdmluZzogXCIsIGtleSk7XG4gICAgICAgICAgICAgIGNoaWxkLnJlbW92ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgc2VydmljZXNFbCA9IGVsZW1lbnQuZmluZChcIi5zZXJ2aWNlc1wiKTtcbiAgICAgICAgICAgIHZhciByZXBsaWNhdGlvbkNvbnRyb2xsZXJzRWwgPSBlbGVtZW50LmZpbmQoXCIucmVwbGljYXRpb25Db250cm9sbGVyc1wiKTtcbiAgICAgICAgICAgIHZhciBob3N0c0VsID0gZWxlbWVudC5maW5kKFwiLmhvc3RzXCIpO1xuXG4gICAgICAgICAgICBhcHBlbmROZXdFbGVtZW50cyhzZXJ2aWNlc0VsLCAkdGVtcGxhdGVDYWNoZS5nZXQoXCJzZXJ2aWNlVGVtcGxhdGUuaHRtbFwiKSwgXCJzZXJ2aWNlXCIsIHNlcnZpY2VzKTtcbiAgICAgICAgICAgIGFwcGVuZE5ld0VsZW1lbnRzKHJlcGxpY2F0aW9uQ29udHJvbGxlcnNFbCwgJHRlbXBsYXRlQ2FjaGUuZ2V0KFwicmVwbGljYXRpb25Db250cm9sbGVyVGVtcGxhdGUuaHRtbFwiKSwgXCJyZXBsaWNhdGlvbkNvbnRyb2xsZXJcIiwgcmVwbGljYXRpb25Db250cm9sbGVycyk7XG4gICAgICAgICAgICBhcHBlbmROZXdFbGVtZW50cyhob3N0c0VsLCAkdGVtcGxhdGVDYWNoZS5nZXQoXCJvdmVydmlld0hvc3RUZW1wbGF0ZS5odG1sXCIpLCBcImhvc3RcIiwgaG9zdHMpO1xuICAgICAgICAgICAgaG9zdHMuZm9yRWFjaCgoaG9zdCkgPT4ge1xuICAgICAgICAgICAgICB2YXIgaG9zdEVsID0gYW5ndWxhci5lbGVtZW50KGhvc3RzRWwuZmluZChcIiNcIiArIGhvc3QuZWxlbWVudElkKSk7XG4gICAgICAgICAgICAgIHZhciBwb2RDb250YWluZXIgPSBhbmd1bGFyLmVsZW1lbnQoaG9zdEVsLmZpbmQoJy5wb2QtY29udGFpbmVyJykpO1xuICAgICAgICAgICAgICBhcHBlbmROZXdFbGVtZW50cyhwb2RDb250YWluZXIsICR0ZW1wbGF0ZUNhY2hlLmdldChcInBvZFRlbXBsYXRlLmh0bWxcIiksIFwicG9kXCIsIGhvc3QucG9kcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHJlZnJlc2hEcmF3aW5nKCkge1xuICAgICAgICAgIGxvZy5kZWJ1ZyhcIlJlZnJlc2hpbmcgZHJhd2luZ1wiKTtcbiAgICAgICAgICBpZiAoZWxlbWVudC5jaGlsZHJlbigpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZmlyc3REcmF3KCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVwZGF0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBDb3JlLiRhcHBseShzY29wZSk7XG4gICAgICAgIH1cblxuICAgICAgICBzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBfLmRlYm91bmNlKHJlZnJlc2hEcmF3aW5nLCA1MDAsIHsgdHJhaWxpbmc6IHRydWV9KSk7XG4gICAgICAgIHNldFRpbWVvdXQocmVmcmVzaERyYXdpbmcsIDEwMCk7XG4gICAgICB9XG4gICAgfTtcbiAgfV0pO1xuXG4gIHZhciBPdmVydmlld0JveENvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiT3ZlcnZpZXdCb3hDb250cm9sbGVyXCIsIFtcIiRzY29wZVwiLCBcIiRsb2NhdGlvblwiLCAoJHNjb3BlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSkgPT4ge1xuICAgICRzY29wZS52aWV3RGV0YWlscyA9IChlbnRpdHksIHBhdGg6c3RyaW5nKSA9PiB7XG4gICAgICBpZiAoZW50aXR5KSB7XG4gICAgICAgIHZhciBuYW1lc3BhY2UgPSBnZXROYW1lc3BhY2UoZW50aXR5KTtcbiAgICAgICAgdmFyIGlkID0gZ2V0TmFtZShlbnRpdHkpO1xuICAgICAgICAkbG9jYXRpb24ucGF0aChVcmxIZWxwZXJzLmpvaW4oJy9rdWJlcm5ldGVzL25hbWVzcGFjZScsIG5hbWVzcGFjZSwgcGF0aCwgaWQpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZy53YXJuKFwiTm8gZW50aXR5IGZvciB2aWV3RGV0YWlscyFcIik7XG4gICAgICB9XG4gICAgfVxuICB9XSk7XG5cbiAgdmFyIHNjb3BlTmFtZSA9IFwiT3ZlcnZpZXdDb250cm9sbGVyXCI7XG5cbiAgdmFyIE92ZXJ2aWV3Q29udHJvbGxlciA9IGNvbnRyb2xsZXIoc2NvcGVOYW1lLCBbXCIkc2NvcGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsICgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XG4gICAgJHNjb3BlLm5hbWUgPSBzY29wZU5hbWU7XG4gICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XG4gICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xuXG4gICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xuXG4gICAgLy8kc2NvcGUuc3ViVGFiQ29uZmlnID0gW107XG4gIH1dKTtcblxufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblxuICBleHBvcnQgdmFyIFBpcGVsaW5lc0NvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiUGlwZWxpbmVzQ29udHJvbGxlclwiLCBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCIkZGlhbG9nXCIsIFwiJHdpbmRvd1wiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGxvY2F0aW9uXCIsIFwibG9jYWxTdG9yYWdlXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcbiAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsICRkaWFsb2csICR3aW5kb3csICR0ZW1wbGF0ZUNhY2hlLCAkcm91dGVQYXJhbXMsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCBsb2NhbFN0b3JhZ2UsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xuXG4gICAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcblxuICAgICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xuXG4gICAgICAvKipcbiAgICAgICAqIExldHMgdXBkYXRlIHRoZSB2YXJpb3VzIGRhdGEgdG8gam9pbiB0aGVtIHRvZ2V0aGVyIHRvIGEgcGlwZWxpbmUgbW9kZWxcbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcbiAgICAgICAgdmFyIHBpcGVsaW5lU3RlcHMgPSB7fTtcbiAgICAgICAgaWYgKCRzY29wZS5idWlsZENvbmZpZ3MgJiYgJHNjb3BlLmJ1aWxkcyAmJiAkc2NvcGUuZGVwbG95bWVudENvbmZpZ3MpIHtcbiAgICAgICAgICBlbnJpY2hCdWlsZENvbmZpZ3MoJHNjb3BlLmJ1aWxkQ29uZmlncywgJHNjb3BlLmJ1aWxkcyk7XG4gICAgICAgICAgJHNjb3BlLmZldGNoZWQgPSB0cnVlO1xuXG4gICAgICAgICAgYW5ndWxhci5mb3JFYWNoKCRzY29wZS5idWlsZENvbmZpZ3MsIChidWlsZENvbmZpZykgPT4ge1xuICAgICAgICAgICAgdmFyIHBpcGVsaW5lS2V5ID0gY3JlYXRlUGlwZWxpbmVLZXkoYnVpbGRDb25maWcpO1xuICAgICAgICAgICAgaWYgKHBpcGVsaW5lS2V5KSB7XG4gICAgICAgICAgICAgIHBpcGVsaW5lU3RlcHNbcGlwZWxpbmVLZXldID0ge1xuICAgICAgICAgICAgICAgIGJ1aWxkQ29uZmlnOiBidWlsZENvbmZpZyxcbiAgICAgICAgICAgICAgICBidWlsZHM6IFtdLFxuICAgICAgICAgICAgICAgIHRyaWdnZXJlZEJ5OiBudWxsLFxuICAgICAgICAgICAgICAgIHRyaWdnZXJzU3RlcHM6IFtdLFxuICAgICAgICAgICAgICAgICRjbGFzczogJ3BpcGVsaW5lLWJ1aWxkJ1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYW5ndWxhci5mb3JFYWNoKCRzY29wZS5idWlsZHMsIChidWlsZCkgPT4ge1xuICAgICAgICAgICAgdmFyIHBpcGVsaW5lS2V5ID0gY3JlYXRlUGlwZWxpbmVLZXkoYnVpbGQpO1xuICAgICAgICAgICAgaWYgKHBpcGVsaW5lS2V5KSB7XG4gICAgICAgICAgICAgIHZhciBwaXBlbGluZSA9IHBpcGVsaW5lU3RlcHNbcGlwZWxpbmVLZXldO1xuICAgICAgICAgICAgICBpZiAoIXBpcGVsaW5lKSB7XG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIndhcm5pbmcgbm8gcGlwZWxpbmUgZ2VuZXJhdGVkIGZvciBidWlsZENvbmZpZyBmb3Iga2V5IFwiICsgcGlwZWxpbmVLZXkgKyBcIiBmb3IgYnVpbGQgXCIgKyBhbmd1bGFyLnRvSnNvbihidWlsZCwgdHJ1ZSkpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwid2FybmluZyBubyBwaXBlbGluZSBnZW5lcmF0ZWQgZm9yIGJ1aWxkQ29uZmlnIGZvciBrZXkgXCIgKyBwaXBlbGluZUtleSArIFwiIGZvciBidWlsZCBcIiArIGJ1aWxkLiRuYW1lKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwaXBlbGluZS5idWlsZHMucHVzaChidWlsZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIFRPRE8gbm93IHdlIG5lZWQgdG8gbG9vayBhdCB0aGUgdHJpZ2dlcnMgdG8gZmlndXJlIG91dCB3aGljaCBwaXBlbGluZVN0ZXBzIHRyaWdnZXJzIGVhY2ggcGlwZWxpbmVTdGVwXG5cblxuICAgICAgICAgIC8vIG5vdyBsZXRzIGNyZWF0ZSBhbiBhcnJheSBvZiBhbGwgcGlwZWxpbmVzLCBzdGFydGluZyBmcm9tIHRoZSBmaXJzdCBrbm93biBzdGVwIHdpdGggYSBsaXN0IG9mIHRoZSBzdGVwc1xuXG4gICAgICAgICAgdmFyIHBpcGVsaW5lcyA9IFtdO1xuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChwaXBlbGluZVN0ZXBzLCAocGlwZWxpbmVTdGVwLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmICghcGlwZWxpbmVTdGVwLnRyaWdnZXJlZEJ5KSB7XG4gICAgICAgICAgICAgIC8vIHdlIGFyZSBhIHJvb3Qgc3RlcC4uLi5cbiAgICAgICAgICAgICAgcGlwZWxpbmVzLnB1c2gocGlwZWxpbmVTdGVwKTtcbiAgICAgICAgICAgICAgLy8gbm93IGxldHMgYWRkIGFsbCB0aGUgc3RlcHMgZm9yIHRoaXMga2V5Li4uXG4gICAgICAgICAgICAgIHBpcGVsaW5lU3RlcC50cmlnZ2Vyc1N0ZXBzLnB1c2gocGlwZWxpbmVTdGVwKTtcbiAgICAgICAgICAgICAgYW5ndWxhci5mb3JFYWNoKHBpcGVsaW5lU3RlcHMsIChzdGVwKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHN0ZXAudHJpZ2dlcmVkQnkgPT09IGtleSkge1xuICAgICAgICAgICAgICAgICAgcGlwZWxpbmVTdGVwLnRyaWdnZXJzU3RlcHMucHVzaChzdGVwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgYW5ndWxhci5mb3JFYWNoKCRzY29wZS5kZXBsb3ltZW50Q29uZmlncywgKGRlcGxveW1lbnRDb25maWcpID0+IHtcbiAgICAgICAgICAgIGlmICghZGVwbG95bWVudENvbmZpZy5raW5kKSB7XG4gICAgICAgICAgICAgIGRlcGxveW1lbnRDb25maWcua2luZCA9IFwiRGVwbG95bWVudENvbmZpZ1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYW5ndWxhci5mb3JFYWNoKGRlcGxveW1lbnRDb25maWcudHJpZ2dlcnMsICh0cmlnZ2VyKSA9PiB7XG4gICAgICAgICAgICAgIHZhciB0eXBlID0gdHJpZ2dlci50eXBlO1xuICAgICAgICAgICAgICB2YXIgaW1hZ2VDaGFuZ2VQYXJhbXMgPSB0cmlnZ2VyLmltYWdlQ2hhbmdlUGFyYW1zO1xuICAgICAgICAgICAgICBpZiAoaW1hZ2VDaGFuZ2VQYXJhbXMgJiYgdHlwZSA9PT0gXCJJbWFnZUNoYW5nZVwiKSB7XG4gICAgICAgICAgICAgICAgdmFyIGZyb20gPSBpbWFnZUNoYW5nZVBhcmFtcy5mcm9tO1xuICAgICAgICAgICAgICAgIGlmIChmcm9tKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGZyb20ubmFtZTtcbiAgICAgICAgICAgICAgICAgIGlmIChmcm9tLmtpbmQgPT09IFwiSW1hZ2VSZXBvc2l0b3J5XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhZyA9IGltYWdlQ2hhbmdlUGFyYW1zLnRhZyB8fCBcImxhdGVzdFwiO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdyBsZXRzIGZpbmQgYSBwaXBlbGluZSBzdGVwIHdoaWNoIGZpcmVzIGZyb20gdGhpc1xuICAgICAgICAgICAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChwaXBlbGluZVN0ZXBzLCAocGlwZWxpbmVTdGVwLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0byA9IENvcmUucGF0aEdldChwaXBlbGluZVN0ZXAsIFtcImJ1aWxkQ29uZmlnXCIsIFwicGFyYW1ldGVyc1wiLCBcIm91dHB1dFwiLCBcInRvXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0byAmJiAodG8ua2luZCA9PT0gXCJJbWFnZVJlcG9zaXRvcnlcIiB8fCB0by5raW5kID09PSBcIkltYWdlU3RyZWFtXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b05hbWUgPSB0by5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9OYW1lID09PSBuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdG9yID0gQ29yZS5wYXRoR2V0KGRlcGxveW1lbnRDb25maWcsIFtcInRlbXBsYXRlXCIsIFwiY29udHJvbGxlclRlbXBsYXRlXCIsIFwic2VsZWN0b3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwb2RzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyICRwb2RDb3VudGVycyA9IHNlbGVjdG9yID8gY3JlYXRlUG9kQ291bnRlcnMoc2VsZWN0b3IsIEt1YmVybmV0ZXNNb2RlbC5wb2RzRm9yTmFtZXNwYWNlKCksIHBvZHMpIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVwbG95UGlwZWxpbmVTdGVwID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDb25maWc6IGRlcGxveW1lbnRDb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2xhc3M6ICdwaXBlbGluZS1kZXBsb3knLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBvZENvdW50ZXJzOiAkcG9kQ291bnRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcG9kczogcG9kc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZWxpbmVTdGVwLnRyaWdnZXJzU3RlcHMucHVzaChkZXBsb3lQaXBlbGluZVN0ZXApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgICRzY29wZS5waXBlbGluZXMgPSBwaXBlbGluZXM7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBMZXRzIGNyZWF0ZSBhIHVuaXF1ZSBrZXkgZm9yIGJ1aWxkIC8gY29uZmlnIHdlIGNhbiB1c2UgdG8gZG8gbGlua2luZyBvZiBidWlsZHMgLyBjb25maWdzIC8gdHJpZ2dlcnNcbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gY3JlYXRlUGlwZWxpbmVLZXkoYnVpbGRDb25maWcpIHtcbiAgICAgICAgcmV0dXJuIENvcmUucGF0aEdldChidWlsZENvbmZpZywgW1wicGFyYW1ldGVyc1wiLCBcInNvdXJjZVwiLCBcImdpdFwiLCBcInVyaVwiXSk7XG4gICAgICB9XG5cbiAgICAgICRzY29wZS4ka2VlcFBvbGxpbmcgPSAoKSA9PiBrZWVwUG9sbGluZ01vZGVsO1xuICAgICAgJHNjb3BlLmZldGNoID0gUG9sbEhlbHBlcnMuc2V0dXBQb2xsaW5nKCRzY29wZSwgKG5leHQ6KCkgPT4gdm9pZCkgPT4ge1xuICAgICAgICB2YXIgcmVhZHkgPSAwO1xuICAgICAgICB2YXIgbnVtU2VydmljZXMgPSAzO1xuXG4gICAgICAgIGZ1bmN0aW9uIG1heWJlTmV4dCgpIHtcbiAgICAgICAgICBpZiAoKytyZWFkeSA+PSBudW1TZXJ2aWNlcykge1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB1cmwgPSBidWlsZHNSZXN0VVJMKCk7XG4gICAgICAgICRodHRwLmdldCh1cmwpLlxuICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAkc2NvcGUuYnVpbGRzID0gZW5yaWNoQnVpbGRzKGRhdGEuaXRlbXMpO1xuICAgICAgICAgICAgICB1cGRhdGVEYXRhKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtYXliZU5leHQoKTtcbiAgICAgICAgICB9KS5cbiAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGxvYWQgXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XG4gICAgICAgICAgICBtYXliZU5leHQoKTtcblxuICAgICAgICAgIH0pO1xuICAgICAgICB1cmwgPSBidWlsZENvbmZpZ3NSZXN0VVJMKCk7XG4gICAgICAgICRodHRwLmdldCh1cmwpLlxuICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAkc2NvcGUuYnVpbGRDb25maWdzID0gZGF0YS5pdGVtcztcbiAgICAgICAgICAgICAgdXBkYXRlRGF0YSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbWF5YmVOZXh0KCk7XG4gICAgICAgICAgfSkuXG4gICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xuICAgICAgICAgICAgbWF5YmVOZXh0KCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIHVybCA9IGRlcGxveW1lbnRDb25maWdzUmVzdFVSTCgpO1xuICAgICAgICAkaHR0cC5nZXQodXJsKS5cbiAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgJHNjb3BlLmRlcGxveW1lbnRDb25maWdzID0gZGF0YS5pdGVtcztcbiAgICAgICAgICAgICAgdXBkYXRlRGF0YSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbWF5YmVOZXh0KCk7XG4gICAgICAgICAgfSkuXG4gICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xuICAgICAgICAgICAgbWF5YmVOZXh0KCk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgJHNjb3BlLmZldGNoKCk7XG4gICAgfV0pO1xuXG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIGV4cG9ydCB2YXIgUG9kQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJQb2RDb250cm9sbGVyXCIsXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiU2VydmljZVJlZ2lzdHJ5XCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiJHdpbmRvd1wiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcbiAgICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDogS3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsIFNlcnZpY2VSZWdpc3RyeSxcbiAgICAgICAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgJHdpbmRvdywgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xuXG4gICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XG4gICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xuICAgICRzY29wZS5yYXdNb2RlbCA9IG51bGw7XG5cbiAgICAkc2NvcGUuaXRlbUNvbmZpZyA9IHtcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgJ2NvbnRhaW5lcnMvaW1hZ2UkJzoge1xuICAgICAgICAgIHRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoJ2ltYWdlVGVtcGxhdGUuaHRtbCcpXG4gICAgICAgIH0sXG4gICAgICAgICdzdGF0dXMvcGhhc2UnOiB7XG4gICAgICAgICAgdGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldCgnc3RhdHVzVGVtcGxhdGUuaHRtbCcpXG4gICAgICAgIH0sXG4gICAgICAgICdcXFxcL0VudlxcXFwvJzoge1xuICAgICAgICAgIHRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoJ2Vudkl0ZW1UZW1wbGF0ZS5odG1sJylcbiAgICAgICAgfSxcbiAgICAgICAgJ15cXFxcL2xhYmVscyQnOiB7XG4gICAgICAgICAgdGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldCgnbGFiZWxUZW1wbGF0ZS5odG1sJylcbiAgICAgICAgfSxcbiAgICAgICAgJ1xcXFwvZW52XFxcXC9rZXkkJzoge1xuICAgICAgICAgIGhpZGRlbjogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcblxuICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICB1cGRhdGVEYXRhKCk7XG4gICAgfSk7XG5cbiAgICAkc2NvcGUuJG9uKCckcm91dGVVcGRhdGUnLCAoJGV2ZW50KSA9PiB7XG4gICAgICB1cGRhdGVEYXRhKCk7XG4gICAgfSk7XG5cbiAgICAkc2NvcGUuJHdhdGNoKCdtb2RlbC5wb2RzJywgKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgPT4ge1xuICAgICAgdXBkYXRlRGF0YSgpO1xuICAgIH0sIHRydWUpO1xuXG4gICAgJHNjb3BlLmZsaXBSYXcgPSAoKSA9PiB7XG4gICAgICAkc2NvcGUucmF3TW9kZSA9ICEkc2NvcGUucmF3TW9kZTtcbiAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgfTtcblxuICAgICRzY29wZS5vcGVuTG9ncyA9ICgpID0+IHtcbiAgICAgIHZhciBwb2RzID0gWyRzY29wZS5pdGVtXTtcbiAgICAgIG9wZW5Mb2dzRm9yUG9kcyhTZXJ2aWNlUmVnaXN0cnksICR3aW5kb3csIEt1YmVybmV0ZXNNb2RlbC5jdXJyZW50TmFtZXNwYWNlKCksIHBvZHMpO1xuICAgIH07XG5cbiAgICB1cGRhdGVEYXRhKCk7XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xuICAgICAgJHNjb3BlLmlkID0gJHJvdXRlUGFyYW1zW1wiaWRcIl07XG4gICAgICAkc2NvcGUuaXRlbSA9ICRzY29wZS5tb2RlbC5nZXRQb2QoS3ViZXJuZXRlc1N0YXRlLnNlbGVjdGVkTmFtZXNwYWNlLCAkc2NvcGUuaWQpO1xuICAgICAgaWYgKCRzY29wZS5pdGVtKSB7XG4gICAgICAgICRzY29wZS5yYXdNb2RlbCA9IHRvUmF3WWFtbCgkc2NvcGUuaXRlbSk7XG4gICAgICB9XG4gICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgIH1cbiAgfV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblxuICBleHBvcnQgdmFyIFBvZEVkaXRDb250cm9sbGVyID0gY29udHJvbGxlcihcIlBvZEVkaXRDb250cm9sbGVyXCIsXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiS3ViZXJuZXRlc1NjaGVtYVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIiwgXCJTY2hlbWFSZWdpc3RyeVwiLFxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOiBLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc1NjaGVtYSxcbiAgICAgICAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCwgc2NoZW1hczpIYXd0aW9Gb3Jtcy5TY2hlbWFSZWdpc3RyeSkgPT4ge1xuXG4gICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XG4gICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xuICAgICRzY29wZS5pZCA9ICRyb3V0ZVBhcmFtc1tcImlkXCJdO1xuICAgICRzY29wZS5zY2hlbWEgPSBLdWJlcm5ldGVzU2NoZW1hO1xuICAgICRzY29wZS5jb25maWcgPSBzY2hlbWFzLmNsb25lU2NoZW1hKFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Qb2RcIik7XG4gICAgLy8kc2NvcGUuY29uZmlnID0gS3ViZXJuZXRlc1NjaGVtYS5kZWZpbml0aW9ucy5rdWJlcm5ldGVzX3YxYmV0YTJfUG9kO1xuXG4gICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xuXG4gICAgJHNjb3BlLiRvbignJHJvdXRlVXBkYXRlJywgKCRldmVudCkgPT4ge1xuICAgICAgdXBkYXRlRGF0YSgpO1xuICAgIH0pO1xuXG4gICAgdXBkYXRlRGF0YSgpO1xuXG4gICAgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcbiAgICAgIGlmICgkc2NvcGUuaWQpIHtcbiAgICAgICAgJHNjb3BlLmVudGl0eSA9ICRzY29wZS5tb2RlbC5nZXRQb2QoS3ViZXJuZXRlc1N0YXRlLnNlbGVjdGVkTmFtZXNwYWNlLCAkc2NvcGUuaWQpO1xuICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJHNjb3BlLnNhdmUgPSAoKT0+e1xuICAgICAgY29uc29sZS5sb2coJHNjb3BlLmVudGl0eSk7XG4gICAgfVxuICB9XSk7XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuICB2YXIgbG9nID0gTG9nZ2VyLmdldCgna3ViZXJuZXRlcy13YXRjaGVyJyk7XG5cbiAgdmFyIGs4c1R5cGVzID0gS3ViZXJuZXRlc0FQSS5OYW1lc3BhY2VkVHlwZXMuazhzVHlwZXM7XG4gIHZhciBvc1R5cGVzICA9IEt1YmVybmV0ZXNBUEkuTmFtZXNwYWNlZFR5cGVzLm9zVHlwZXM7XG5cbiAgdmFyIHNlbGYgPSA8YW55PiB7fTtcblxuICB2YXIgdXBkYXRlRnVuY3Rpb24gPSAoKSA9PiB7XG4gICAgXG4gICAgbG9nLmRlYnVnKFwiT2JqZWN0cyBjaGFuZ2VkLCBmaXJpbmcgbGlzdGVuZXJzXCIpO1xuICAgIHZhciBvYmplY3RzID0gPE9iamVjdE1hcD57fTtcbiAgICBfLmZvckVhY2goc2VsZi5nZXRUeXBlcygpLCAodHlwZTpzdHJpbmcpID0+IHtcbiAgICAgIG9iamVjdHNbdHlwZV0gPSBzZWxmLmdldE9iamVjdHModHlwZSk7XG4gICAgfSk7XG4gICAgXy5mb3JFYWNoKHNlbGYubGlzdGVuZXJzLCAobGlzdGVuZXI6KE9iamVjdE1hcCkgPT4gdm9pZCkgPT4ge1xuICAgICAgbGlzdGVuZXIob2JqZWN0cyk7XG4gICAgfSk7XG4gIH07XG4gIHZhciBkZWJvdW5jZWRVcGRhdGUgPSBfLmRlYm91bmNlKHVwZGF0ZUZ1bmN0aW9uLCA3NSwgeyB0cmFpbGluZzogdHJ1ZSB9KTtcblxuICB2YXIgbmFtZXNwYWNlV2F0Y2ggPSB7XG4gICAgc2VsZWN0ZWQ6IHVuZGVmaW5lZCxcbiAgICB3YXRjaDogdW5kZWZpbmVkLFxuICAgIG9iamVjdHM6IFtdLFxuICAgIG9iamVjdE1hcDoge30sXG4gICAgd2F0Y2hlczoge31cbiAgfTtcblxuICBoYXd0aW9QbHVnaW5Mb2FkZXIucmVnaXN0ZXJQcmVCb290c3RyYXBUYXNrKHtcbiAgICBuYW1lOiAnS3ViZXJuZXRlc1dhdGNoZXJJbml0JyxcbiAgICBkZXBlbmRzOiBbJ0t1YmVybmV0ZXNBcGlEaXNjb3ZlcnknXSxcbiAgICB0YXNrOiAobmV4dCkgPT4ge1xuICAgICAgdmFyIGJvb3RlZCA9IGZhbHNlO1xuICAgICAgaWYgKGlzT3BlblNoaWZ0KSB7XG4gICAgICAgIGxvZy5pbmZvKFwiQmFja2VuZCBpcyBhbiBPcGVuc2hpZnQgaW5zdGFuY2VcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cuaW5mbyhcIkJhY2tlbmQgaXMgYSB2YW5pbGxhIEt1YmVybmV0ZXMgaW5zdGFuY2VcIik7XG4gICAgICB9XG4gICAgICBuYW1lc3BhY2VXYXRjaC53YXRjaCA9IEt1YmVybmV0ZXNBUEkud2F0Y2goe1xuICAgICAgICBraW5kOiBLdWJlcm5ldGVzQVBJLldhdGNoVHlwZXMuTkFNRVNQQUNFUyxcbiAgICAgICAgc3VjY2VzczogKG9iamVjdHMpID0+IHtcbiAgICAgICAgICBuYW1lc3BhY2VXYXRjaC5vYmplY3RzID0gb2JqZWN0cztcbiAgICAgICAgICBpZiAoIWJvb3RlZCkge1xuICAgICAgICAgICAgYm9vdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHNlbGYuc2V0TmFtZXNwYWNlKGxvY2FsU3RvcmFnZVtDb25zdGFudHMuTkFNRVNQQUNFX1NUT1JBR0VfS0VZXSB8fCBkZWZhdWx0TmFtZXNwYWNlKTtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbG9nLmRlYnVnKFwiR290IG5hbWVzcGFjZXM6IFwiLCBuYW1lc3BhY2VXYXRjaC5vYmplY3RzKTtcbiAgICAgICAgfSwgZXJyb3I6IChlcnJvcjphbnkpID0+IHtcbiAgICAgICAgICBsb2cud2FybihcIkVycm9yIGZldGNoaW5nIG5hbWVzcGFjZXM6IFwiLCBlcnJvcik7XG4gICAgICAgICAgLy8gVE9ETyBpcyB0aGlzIG5lY2Vzc2FyeT9cbiAgICAgICAgICAvL0hhd3Rpb09BdXRoLmRvTG9nb3V0KCk7XG4gICAgICAgICAgaWYgKCFib290ZWQpIHtcbiAgICAgICAgICAgIGJvb3RlZCA9IHRydWU7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIGhhd3Rpb1BsdWdpbkxvYWRlci5yZWdpc3RlclByZUJvb3RzdHJhcFRhc2soe1xuICAgIG5hbWU6ICdLdWJlcm5ldGVzQXBpRGlzY292ZXJ5JyxcbiAgICBkZXBlbmRzOiBbJ2hhd3Rpby1vYXV0aCddLFxuICAgIHRhc2s6IChuZXh0KSA9PiB7XG4gICAgICBpc09wZW5TaGlmdCA9IGZhbHNlO1xuXG4gICAgICB2YXIgdXNlclByb2ZpbGUgPSBIYXd0aW9PQXV0aC5nZXRVc2VyUHJvZmlsZSgpO1xuICAgICAgbG9nLmRlYnVnKFwiVXNlciBwcm9maWxlOiBcIiwgdXNlclByb2ZpbGUpO1xuICAgICAgaWYgKHVzZXJQcm9maWxlICYmIHVzZXJQcm9maWxlLnByb3ZpZGVyID09PSBcImhhd3Rpby1nb29nbGUtb2F1dGhcIikge1xuICAgICAgICBsb2cuZGVidWcoXCJQb3NzaWJseSBydW5uaW5nIG9uIEdDRVwiKTtcbiAgICAgICAgLy8gYXBpIG1hc3RlciBpcyBvbiBHQ0VcbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICB1cmw6IFVybEhlbHBlcnMuam9pbihtYXN0ZXJBcGlVcmwoKSwgJ2FwaScsICd2MScsICduYW1lc3BhY2VzJyksXG4gICAgICAgICAgY29tcGxldGU6IChqcVhIUiwgdGV4dFN0YXR1cykgPT4ge1xuICAgICAgICAgICAgaWYgKHRleHRTdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcImpxWEhSOiBcIiwganFYSFIpO1xuICAgICAgICAgICAgICB1c2VyUHJvZmlsZS5vbGRUb2tlbiA9IHVzZXJQcm9maWxlLnRva2VuO1xuICAgICAgICAgICAgICB1c2VyUHJvZmlsZS50b2tlbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgJC5hamF4U2V0dXAoe1xuICAgICAgICAgICAgICAgIGJlZm9yZVNlbmQ6IChyZXF1ZXN0KSA9PiB7XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgYmVmb3JlU2VuZDogKHJlcXVlc3QpID0+IHtcblxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cuZGVidWcoXCJOb3QgcnVubmluZyBvbiBHQ0VcIik7XG4gICAgICAgIC8vIGRvdWJsZS1jaGVjayBpZiB3ZSdyZSBvbiB2YW5pbGxhIGs4cyBvciBvcGVuc2hpZnRcbiAgICAgICAgdmFyIHJvb3RVcmkgPSBuZXcgVVJJKG1hc3RlckFwaVVybCgpKS5wYXRoKFwiL29hcGlcIikucXVlcnkoXCJcIikudG9TdHJpbmcoKTtcbiAgICAgICAgbG9nLmRlYnVnKFwiQ2hlY2tpbmcgZm9yIGFuIG9wZW5zaGlmdCBiYWNrZW5kXCIpO1xuICAgICAgICBIYXd0aW9PQXV0aC5hdXRoZW50aWNhdGVkSHR0cFJlcXVlc3Qoe1xuICAgICAgICAgIHVybDogcm9vdFVyaSxcbiAgICAgICAgICBzdWNjZXNzOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgaXNPcGVuU2hpZnQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6IChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pID0+IHtcbiAgICAgICAgICAgIHZhciBlcnJvciA9IEt1YmVybmV0ZXNBUEkuZ2V0RXJyb3JPYmplY3QoanFYSFIpO1xuICAgICAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgICBsb2cuZGVidWcoXCJGYWlsZWQgdG8gZmluZCByb290IHBhdGhzOiBcIiwgdGV4dFN0YXR1cywgXCI6IFwiLCBlcnJvclRocm93bik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBsb2cuZGVidWcoXCJGYWlsZWQgdG8gZmluZCByb290IHBhdGhzOiBcIiwgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaXNPcGVuU2hpZnQgPSBmYWxzZTtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgdmFyIGN1c3RvbVVybEhhbmRsZXJzID0ge307XG5cbiAgc2VsZi5zZXROYW1lc3BhY2UgPSAobmFtZXNwYWNlOiBzdHJpbmcpID0+IHtcbiAgICBpZiAobmFtZXNwYWNlID09PSBuYW1lc3BhY2VXYXRjaC5zZWxlY3RlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobmFtZXNwYWNlV2F0Y2guc2VsZWN0ZWQpIHtcbiAgICAgIGxvZy5kZWJ1ZyhcIlN0b3BwaW5nIGN1cnJlbnQgd2F0Y2hlc1wiKTtcbiAgICAgIF8uZm9yT3duKG5hbWVzcGFjZVdhdGNoLndhdGNoZXMsICh3YXRjaCwga2V5KSA9PiB7XG4gICAgICAgIGlmICghS3ViZXJuZXRlc0FQSS5uYW1lc3BhY2VkKGtleSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbG9nLmRlYnVnKFwiRGlzY29ubmVjdGluZyB3YXRjaDogXCIsIGtleSk7XG4gICAgICAgIHdhdGNoLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH0pO1xuICAgICAgXy5mb3JFYWNoKF8ua2V5cyhuYW1lc3BhY2VXYXRjaC53YXRjaGVzKSwgKGtleSkgPT4ge1xuICAgICAgICBpZiAoIUt1YmVybmV0ZXNBUEkubmFtZXNwYWNlZChrZXkpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxvZy5kZWJ1ZyhcIkRlbGV0aW5nIGtpbmQ6IFwiLCBrZXkpO1xuICAgICAgICBkZWxldGUgbmFtZXNwYWNlV2F0Y2gud2F0Y2hlc1trZXldO1xuICAgICAgfSk7XG4gICAgfVxuICAgIG5hbWVzcGFjZVdhdGNoLnNlbGVjdGVkID0gbmFtZXNwYWNlO1xuICAgIGlmIChuYW1lc3BhY2UpIHtcbiAgICAgIF8uZm9yRWFjaChzZWxmLmdldFR5cGVzKCksIChraW5kOnN0cmluZykgPT4ge1xuICAgICAgICBpZiAoa2luZCA9PT0gS3ViZXJuZXRlc0FQSS5XYXRjaFR5cGVzLk5BTUVTUEFDRVMpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFuYW1lc3BhY2VXYXRjaC53YXRjaGVzW2tpbmRdKSB7XG4gICAgICAgICAgbG9nLmRlYnVnKFwiQ3JlYXRpbmcgd2F0Y2ggZm9yIGtpbmQ6IFwiLCBraW5kKTtcbiAgICAgICAgICB2YXIgY29uZmlnID0gPGFueT4ge1xuICAgICAgICAgICAga2luZDoga2luZCxcbiAgICAgICAgICAgIG5hbWVzcGFjZTogS3ViZXJuZXRlc0FQSS5uYW1lc3BhY2VkKGtpbmQpID8gbmFtZXNwYWNlIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgc3VjY2VzczogKG9iamVjdHMpID0+IHtcbiAgICAgICAgICAgICAgd2F0Y2gub2JqZWN0cyA9IG9iamVjdHM7XG4gICAgICAgICAgICAgIGRlYm91bmNlZFVwZGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKGtpbmQgaW4gY3VzdG9tVXJsSGFuZGxlcnMpIHtcbiAgICAgICAgICAgIGNvbmZpZy51cmxGdW5jdGlvbiA9IGN1c3RvbVVybEhhbmRsZXJzW2tpbmRdO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgd2F0Y2ggPSA8YW55PiBLdWJlcm5ldGVzQVBJLndhdGNoKGNvbmZpZyk7XG4gICAgICAgICAgd2F0Y2guY29uZmlnID0gY29uZmlnO1xuICAgICAgICAgIG5hbWVzcGFjZVdhdGNoLndhdGNoZXNba2luZF0gPSB3YXRjaDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIHNlbGYuaGFzV2ViU29ja2V0ID0gdHJ1ZTtcblxuICBzZWxmLmdldE5hbWVzcGFjZSA9ICgpID0+IG5hbWVzcGFjZVdhdGNoLnNlbGVjdGVkO1xuXG4gIHNlbGYucmVnaXN0ZXJDdXN0b21VcmxGdW5jdGlvbiA9IChraW5kOnN0cmluZywgdXJsOihvcHRpb25zOkt1YmVybmV0ZXNBUEkuSzhTT3B0aW9ucykgPT4gc3RyaW5nKSA9PiB7XG4gICAgY3VzdG9tVXJsSGFuZGxlcnNba2luZF0gPSB1cmw7XG4gICAgaWYgKGtpbmQgaW4gbmFtZXNwYWNlV2F0Y2gud2F0Y2hlcykge1xuICAgICAgdmFyIHdhdGNoID0gbmFtZXNwYWNlV2F0Y2gud2F0Y2hlc1traW5kXTtcbiAgICAgIHZhciBjb25maWcgPSB3YXRjaC5jb25maWc7XG4gICAgICBjb25maWcudXJsRnVuY3Rpb24gPSB1cmw7XG4gICAgICB3YXRjaC5kaXNjb25uZWN0KCk7XG4gICAgICBkZWxldGUgbmFtZXNwYWNlV2F0Y2gud2F0Y2hlc1traW5kXTtcbiAgICAgIGNvbmZpZy5zdWNjZXNzID0gKG9iamVjdHMpID0+IHtcbiAgICAgICAgd2F0Y2gub2JqZWN0cyA9IG9iamVjdHM7XG4gICAgICAgIGRlYm91bmNlZFVwZGF0ZSgpO1xuICAgICAgfVxuICAgICAgd2F0Y2ggPSA8YW55PiBLdWJlcm5ldGVzQVBJLndhdGNoKGNvbmZpZyk7XG4gICAgICB3YXRjaC5jb25maWcgPSBjb25maWc7XG4gICAgICBuYW1lc3BhY2VXYXRjaC53YXRjaGVzW2tpbmRdID0gd2F0Y2g7XG4gICAgfVxuICB9XG5cbiAgc2VsZi5nZXRUeXBlcyA9ICgpID0+IHtcbiAgICB2YXIgZmlsdGVyID0gKGtpbmQ6c3RyaW5nKSA9PiB7XG4gICAgICAvLyBmaWx0ZXIgb3V0IHN0dWZmIHdlIGRvbid0IGNhcmUgYWJvdXQgeWV0XG4gICAgICBzd2l0Y2goa2luZCkge1xuICAgICAgICBjYXNlIEt1YmVybmV0ZXNBUEkuV2F0Y2hUeXBlcy5PQVVUSF9DTElFTlRTOlxuICAgICAgICBjYXNlIEt1YmVybmV0ZXNBUEkuV2F0Y2hUeXBlcy5JTUFHRV9TVFJFQU1TOlxuICAgICAgICBjYXNlIEt1YmVybmV0ZXNBUEkuV2F0Y2hUeXBlcy5QT0xJQ0lFUzpcbiAgICAgICAgY2FzZSBLdWJlcm5ldGVzQVBJLldhdGNoVHlwZXMuUk9MRVM6XG4gICAgICAgIGNhc2UgS3ViZXJuZXRlc0FQSS5XYXRjaFR5cGVzLlJPTEVfQklORElOR1M6XG4gICAgICAgIGNhc2UgS3ViZXJuZXRlc0FQSS5XYXRjaFR5cGVzLlBPTElDWV9CSU5ESU5HUzpcbiAgICAgICAgY2FzZSBLdWJlcm5ldGVzQVBJLldhdGNoVHlwZXMuUEVSU0lTVEVOVF9WT0xVTUVfQ0xBSU1TOlxuICAgICAgICBjYXNlIEt1YmVybmV0ZXNBUEkuV2F0Y2hUeXBlcy5QRVJTSVNURU5UX1ZPTFVNRVM6XG4gICAgICAgIGNhc2UgS3ViZXJuZXRlc0FQSS5XYXRjaFR5cGVzLkVORFBPSU5UUzpcbiAgICAgICAgY2FzZSBLdWJlcm5ldGVzQVBJLldhdGNoVHlwZXMuUkVTT1VSQ0VfUVVPVEFTOlxuICAgICAgICBjYXNlIEt1YmVybmV0ZXNBUEkuV2F0Y2hUeXBlcy5TRVJWSUNFX0FDQ09VTlRTOlxuICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgYW5zd2VyID0gazhzVHlwZXMuY29uY2F0KFtXYXRjaFR5cGVzLk5BTUVTUEFDRVNdKTtcbiAgICBpZiAoaXNPcGVuU2hpZnQpIHtcbiAgICAgIGFuc3dlciA9IGFuc3dlci5jb25jYXQob3NUeXBlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFuc3dlciA9IGFuc3dlci5jb25jYXQoS3ViZXJuZXRlc0FQSS5XYXRjaFR5cGVzLlRFTVBMQVRFUyk7XG4gICAgICBhbnN3ZXIgPSBhbnN3ZXIuY29uY2F0KEt1YmVybmV0ZXNBUEkuV2F0Y2hUeXBlcy5CVUlMRF9DT05GSUdTKTtcbiAgICB9XG4gICAgcmV0dXJuIF8uZmlsdGVyKGFuc3dlciwgZmlsdGVyKTtcbiAgfVxuXG4gIHNlbGYuZ2V0T2JqZWN0cyA9IChraW5kOiBzdHJpbmcpID0+IHtcbiAgICBpZiAoa2luZCA9PT0gV2F0Y2hUeXBlcy5OQU1FU1BBQ0VTKSB7XG4gICAgICByZXR1cm4gbmFtZXNwYWNlV2F0Y2gub2JqZWN0cztcbiAgICB9XG4gICAgaWYgKGtpbmQgaW4gbmFtZXNwYWNlV2F0Y2gud2F0Y2hlcykge1xuICAgICAgcmV0dXJuIG5hbWVzcGFjZVdhdGNoLndhdGNoZXNba2luZF0ub2JqZWN0cztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBzZWxmLmxpc3RlbmVycyA9IDxBcnJheTwoT2JqZWN0TWFwKSA9PiB2b2lkPj4gW107XG5cbiAgLy8gbGlzdGVuZXIgZ2V0cyBub3RpZmllZCBhZnRlciBhIGJ1bmNoIG9mIGNoYW5nZXMgaGF2ZSBvY2N1cnJlZFxuICBzZWxmLnJlZ2lzdGVyTGlzdGVuZXIgPSAoZm46KG9iamVjdHM6T2JqZWN0TWFwKSA9PiB2b2lkKSA9PiB7XG4gICAgc2VsZi5saXN0ZW5lcnMucHVzaChmbik7XG4gIH1cblxuICB2YXIgcHJvamVjdHNIYW5kbGUgPSA8YW55PiB1bmRlZmluZWQ7XG5cbiAgLy8ga2ljayBvZmYgdGhlIHByb2plY3Qgd2F0Y2hlciBhIGJpdCBzb29uZXIgYWxzb1xuICBoYXd0aW9QbHVnaW5Mb2FkZXIucmVnaXN0ZXJQcmVCb290c3RyYXBUYXNrKHtcbiAgICBuYW1lOiAnUHJvamVjdHNXYXRjaGVyJyxcbiAgICBkZXBlbmRzOiBbJ0t1YmVybmV0ZXNBcGlEaXNjb3ZlcnknXSxcbiAgICB0YXNrOiAobmV4dCkgPT4ge1xuICAgICAgaWYgKGlzT3BlblNoaWZ0KSB7XG5cbiAgICAgICAgcHJvamVjdHNIYW5kbGUgPSBLdWJlcm5ldGVzQVBJLndhdGNoKHtcbiAgICAgICAgICBraW5kOiBLdWJlcm5ldGVzQVBJLldhdGNoVHlwZXMuUFJPSkVDVFMsXG4gICAgICAgICAgbmFtZXNwYWNlOiB1bmRlZmluZWQsXG4gICAgICAgICAgc3VjY2VzczogKG9iamVjdHMpID0+IHtcbiAgICAgICAgICAgIGlmIChzZWxmLmxpc3RlbmVycyAmJiBzZWxmLmxpc3RlbmVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiZ290IHByb2plY3RzOiBcIiwgb2JqZWN0cyk7XG4gICAgICAgICAgICAgIF8uZm9yRWFjaChzZWxmLmxpc3RlbmVycywgKGxpc3RlbmVyOihvYmplY3RzOk9iamVjdE1hcCkgPT4gdm9pZCkgPT4ge1xuICAgICAgICAgICAgICAgIGxpc3RlbmVyKHtcbiAgICAgICAgICAgICAgICAgIHByb2plY3RzOiBvYmplY3RzXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBuZXh0KCk7XG4gICAgfVxuICB9KTtcblxuXG5fbW9kdWxlLnNlcnZpY2UoJ1dhdGNoZXJTZXJ2aWNlJywgWyd1c2VyRGV0YWlscycsICckcm9vdFNjb3BlJywgJyR0aW1lb3V0JywgKHVzZXJEZXRhaWxzLCAkcm9vdFNjb3BlLCAkdGltZW91dCkgPT4ge1xuICAgIHJldHVybiBzZWxmO1xufV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwid2F0Y2hlci50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIHZhciBsb2cgPSBMb2dnZXIuZ2V0KFwia3ViZXJuZXRlcy10ZXJtLXdpbmRvd3NcIik7XG5cbiAgX21vZHVsZS5jb25maWcoKGt1YmVybmV0ZXNDb250YWluZXJTb2NrZXRQcm92aWRlcikgPT4ge1xuICAgIGt1YmVybmV0ZXNDb250YWluZXJTb2NrZXRQcm92aWRlci5XZWJTb2NrZXRGYWN0b3J5ID0gXCJDdXN0b21XZWJTb2NrZXRzXCI7XG4gIH0pO1xuXG4gIF9tb2R1bGUuZmFjdG9yeSgnQ3VzdG9tV2ViU29ja2V0cycsICh1c2VyRGV0YWlsczphbnkpID0+IHtcbiAgICByZXR1cm4gZnVuY3Rpb24gQ3VzdG9tV2ViU29ja2V0KHVybCwgcHJvdG9jb2xzKSB7XG4gICAgICB2YXIgcGF0aHMgPSB1cmwuc3BsaXQoJz8nKTtcbiAgICAgIGlmICghXy5zdGFydHNXaXRoKHBhdGhzWzBdLCBtYXN0ZXJBcGlVcmwoKSkpIHtcbiAgICAgICAgcGF0aHNbMF0gPSBVcmxIZWxwZXJzLmpvaW4obWFzdGVyQXBpVXJsKCksIHBhdGhzWzBdKTtcbiAgICAgIH1cbiAgICAgIHVybCA9IEt1YmVybmV0ZXNBUEkud3NVcmwocGF0aHNbMF0pO1xuICAgICAgdXJsLnNlYXJjaChwYXRoc1sxXSArICcmYWNjZXNzX3Rva2VuPScgKyB1c2VyRGV0YWlscy50b2tlbik7XG4gICAgICBsb2cuZGVidWcoXCJVc2luZyB3cyB1cmw6IFwiLCB1cmwudG9TdHJpbmcoKSk7XG4gICAgICByZXR1cm4gbmV3IFdlYlNvY2tldCh1cmwudG9TdHJpbmcoKSwgcHJvdG9jb2xzKTtcbiAgICB9O1xuICB9KTtcblxuICBfbW9kdWxlLnNlcnZpY2UoJ1Rlcm1pbmFsU2VydmljZScsICgkcm9vdFNjb3BlLCAkZG9jdW1lbnQsICRjb21waWxlLCAkdGVtcGxhdGVDYWNoZSkgPT4ge1xuICAgIHZhciBib2R5ID0gJGRvY3VtZW50LmZpbmQoJ2JvZHknKTtcbiAgICBmdW5jdGlvbiBwb3NpdGlvblRlcm1pbmFscyh0ZXJtaW5hbHMpIHtcbiAgICAgIHZhciB0b3RhbCA9IF8ua2V5cyh0ZXJtaW5hbHMpLmxlbmd0aDtcbiAgICAgIHZhciBkaXN0ID0gKGJvZHkud2lkdGgoKSAtIDIyNSkgLyB0b3RhbDtcbiAgICAgIHZhciBwb3NpdGlvbiA9IDU7XG4gICAgICBhbmd1bGFyLmZvckVhY2godGVybWluYWxzLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICBpZiAoIXZhbHVlLnNjb3BlLmRvY2tlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZS5lbC5jc3MoJ2xlZnQnLCBwb3NpdGlvbiArICdweCcpO1xuICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uICsgZGlzdDtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB2YXIgZGVmYXVsdFRlbXBsYXRlID0gJHRlbXBsYXRlQ2FjaGUuZ2V0KFVybEhlbHBlcnMuam9pbih0ZW1wbGF0ZVBhdGgsICd0ZXJtU2hlbGwuaHRtbCcpKTtcbiAgICB2YXIgc2VsZiA9IHtcbiAgICAgIHBvc2l0aW9uVGVybWluYWxzOiAoKSA9PiB7XG4gICAgICAgIHBvc2l0aW9uVGVybWluYWxzKHNlbGYudGVybWluYWxzKTtcbiAgICAgIH0sXG4gICAgICB0ZXJtaW5hbHM6IHt9LFxuICAgICAgbmV3VGVybWluYWw6IChwb2RMaW5rLCBjb250YWluZXJOYW1lLCB0ZW1wbGF0ZSA9IGRlZmF1bHRUZW1wbGF0ZSkgPT4ge1xuICAgICAgICB2YXIgdGVybWluYWxJZCA9IFVybEhlbHBlcnMuam9pbihwb2RMaW5rLCBjb250YWluZXJOYW1lKTtcbiAgICAgICAgaWYgKHRlcm1pbmFsSWQgaW4gc2VsZi50ZXJtaW5hbHMpIHtcbiAgICAgICAgICBsb2cuZGVidWcoXCJBbHJlYWR5IGEgdGVybWluYWwgd2l0aCBpZDogXCIsIHRlcm1pbmFsSWQpO1xuICAgICAgICAgIHNlbGYucmFpc2VUZXJtaW5hbCh0ZXJtaW5hbElkKTtcbiAgICAgICAgICByZXR1cm4gdGVybWluYWxJZDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgc2NvcGUgPSAkcm9vdFNjb3BlLiRuZXcoKTtcbiAgICAgICAgc2NvcGUucG9kTGluayA9IHBvZExpbms7XG4gICAgICAgIHNjb3BlLmNvbnRhaW5lck5hbWUgPSBjb250YWluZXJOYW1lO1xuICAgICAgICBzY29wZS5pZCA9IHRlcm1pbmFsSWQ7XG4gICAgICAgIHNjb3BlLmRvY2tlZCA9IHRydWU7XG4gICAgICAgIHZhciBlbCA9ICQoJGNvbXBpbGUodGVtcGxhdGUpKHNjb3BlKSk7XG4gICAgICAgIHZhciB0ZXJtID0ge1xuICAgICAgICAgIHNjb3BlOiBzY29wZSxcbiAgICAgICAgICBlbDogZWxcbiAgICAgICAgfTtcbiAgICAgICAgYm9keS5hcHBlbmQoZWwpO1xuICAgICAgICBzZWxmLnRlcm1pbmFsc1t0ZXJtaW5hbElkXSA9IHRlcm07XG4gICAgICAgIHBvc2l0aW9uVGVybWluYWxzKHNlbGYudGVybWluYWxzKTtcbiAgICAgICAgcmV0dXJuIHRlcm1pbmFsSWQ7XG4gICAgICB9LFxuICAgICAgY2xvc2VUZXJtaW5hbDogKGlkKSA9PiB7XG4gICAgICAgIHZhciB0ZXJtID0gc2VsZi50ZXJtaW5hbHNbaWRdO1xuICAgICAgICBpZiAodGVybSkge1xuICAgICAgICAgIHRlcm0uZWwucmVtb3ZlKCk7XG4gICAgICAgICAgZGVsZXRlIHNlbGYudGVybWluYWxzW2lkXTtcbiAgICAgICAgICBwb3NpdGlvblRlcm1pbmFscyhzZWxmLnRlcm1pbmFscyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICByYWlzZVRlcm1pbmFsOiAoaWQpID0+IHtcbiAgICAgICAgYW5ndWxhci5mb3JFYWNoKHNlbGYudGVybWluYWxzLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgIGlmIChrZXkgPT09IGlkKSB7XG4gICAgICAgICAgICB2YWx1ZS5lbC5jc3MoJ3otaW5kZXgnLCAnNDAwMCcpO1xuICAgICAgICAgICAgdmFsdWUuZWwuZmluZCgnLnRlcm1pbmFsJykuZm9jdXMoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUuZWwuY3NzKCd6LWluZGV4JywgJzMwMDAnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHNlbGY7XG4gIH0pO1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBhZGRXaW5kb3dBY3Rpb25zKHNjb3BlLCBlbGVtZW50LCBUZXJtaW5hbFNlcnZpY2UpIHtcbiAgICB2YXIgbW92ZWQgPSBmYWxzZTtcbiAgICB2YXIgbGFzdFggPSAwO1xuICAgIHZhciBsYXN0WSA9IDA7XG4gICAgdmFyIGhlYWRlciA9IGVsZW1lbnQuZmluZCgnLnRlcm1pbmFsLXRpdGxlJyk7XG4gICAgdmFyIGJvZHkgPSBlbGVtZW50LmZpbmQoJy50ZXJtaW5hbC1ib2R5Jyk7XG4gICAgZWxlbWVudC5vbignJGRlc3Ryb3knLCAoKSA9PiB7XG4gICAgICAkKCcjbWFpbicpLmNzcyh7IGRpc3BsYXk6ICdpbmhlcml0JyB9KTtcbiAgICB9KTtcblxuICAgIHZhciBIRUlHSFQgPSAzNDg7XG4gICAgdmFyIFdJRFRIID0gNjAwO1xuICAgIHZhciBUSVRMRV9IRUlHSFQgPSAzNTtcbiAgICB2YXIgTkFWX09GRlNFVCA9IDQ2O1xuXG4gICAgZWxlbWVudC5jc3Moe1xuICAgICAgaGVpZ2h0OiBIRUlHSFQsXG4gICAgICB3aWR0aDogV0lEVEhcbiAgICB9KTtcbiAgICBoZWFkZXIuY3NzKHtcbiAgICAgIGhlaWdodDogVElUTEVfSEVJR0hUXG4gICAgfSk7XG4gICAgYm9keS5jc3Moe1xuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICB0b3A6IDM1LFxuICAgICAgbGVmdDogMCxcbiAgICAgIHJpZ2h0OiAwLCBcbiAgICAgIGJvdHRvbTogMFxuICAgIH0pO1xuICAgIHNjb3BlLmNsb3NlID0gKCkgPT4ge1xuICAgICAgVGVybWluYWxTZXJ2aWNlLmNsb3NlVGVybWluYWwoc2NvcGUuaWQpO1xuICAgIH07XG4gICAgc2NvcGUucmFpc2UgPSAoKSA9PiB7XG4gICAgICBUZXJtaW5hbFNlcnZpY2UucmFpc2VUZXJtaW5hbChzY29wZS5pZCk7XG4gICAgfTtcbiAgICBzY29wZS4kd2F0Y2goJ2RvY2tlZCcsIChkb2NrZWQpID0+IHtcbiAgICAgIGlmIChkb2NrZWQpIHtcbiAgICAgICAgZWxlbWVudC53aWR0aChXSURUSCk7XG4gICAgICAgIGlmICghZWxlbWVudC5oYXNDbGFzcygnbWluaW1pemVkJykpIHtcbiAgICAgICAgICBlbGVtZW50LmhlaWdodChIRUlHSFQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgc2NvcGUuc3RhcnRSZXNpemUgPSAoZSkgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgbG9nLmRlYnVnKFwiU3RhcnQgcmVzaXplXCIpO1xuICAgICAgc2NvcGUucmVzaXppbmcgPSB0cnVlO1xuICAgICAgZWxlbWVudC5vbignbW91c2V1cCcsIHNjb3BlLnN0b3BSZXNpemUpO1xuICAgICAgJChkb2N1bWVudCkub24oJ21vdXNlbW92ZScsIHNjb3BlLmRvUmVzaXplKTtcbiAgICAgICQoZG9jdW1lbnQpLm9uKCdtb3VzZWxlYXZlJywgc2NvcGUuc3RvcFJlc2l6ZSk7XG4gICAgfTtcbiAgICBzY29wZS5kb1Jlc2l6ZSA9IChlKSA9PiB7XG4gICAgICBpZiAoc2NvcGUucmVzaXppbmcpIHtcbiAgICAgICAgbG9nLmRlYnVnKFwiUmVzaXppbmcsIGU6IFwiLCBlKTtcbiAgICAgICAgaWYgKCFtb3ZlZCkge1xuICAgICAgICAgIGxhc3RYID0gZS5jbGllbnRYO1xuICAgICAgICAgIGxhc3RZID0gZS5jbGllbnRZO1xuICAgICAgICAgIG1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGhlaWdodCA9IGVsZW1lbnQuaGVpZ2h0KCk7XG4gICAgICAgIHZhciB3aWR0aCA9IGVsZW1lbnQud2lkdGgoKTtcbiAgICAgICAgdmFyIGRlbHRhWCA9IGUuY2xpZW50WCAtIGxhc3RYO1xuICAgICAgICB2YXIgZGVsdGFZID0gZS5jbGllbnRZIC0gbGFzdFk7XG4gICAgICAgIHZhciBuZXdIZWlnaHQgPSBoZWlnaHQgKyBkZWx0YVk7XG4gICAgICAgIHZhciBuZXdXaWR0aCA9IHdpZHRoICsgZGVsdGFYO1xuICAgICAgICBpZiAobmV3SGVpZ2h0ID4gMzUgJiYgbmV3V2lkdGggPiA4MCkge1xuICAgICAgICAgIGVsZW1lbnQuaGVpZ2h0KGhlaWdodCArIGRlbHRhWSk7XG4gICAgICAgICAgZWxlbWVudC53aWR0aCh3aWR0aCArIGRlbHRhWCk7XG4gICAgICAgIH1cbiAgICAgICAgbGFzdFggPSBlLmNsaWVudFg7XG4gICAgICAgIGxhc3RZID0gZS5jbGllbnRZO1xuICAgICAgfVxuICAgIH07XG4gICAgc2NvcGUuc3RvcFJlc2l6ZSA9IChlKSA9PiB7XG4gICAgICBzY29wZS5yZXNpemluZyA9IGZhbHNlO1xuICAgICAgbW92ZWQgPSBmYWxzZTtcbiAgICAgIGVsZW1lbnQub2ZmKCdtb3VzZXVwJywgc2NvcGUuc3RvcFJlc2l6ZSk7XG4gICAgICAkKGRvY3VtZW50KS5vZmYoJ21vdXNlbW92ZScsIHNjb3BlLmRvUmVzaXplKTtcbiAgICAgICQoZG9jdW1lbnQpLm9mZignbW91c2VsZWF2ZScsIHNjb3BlLnN0b3BSZXNpemUpO1xuICAgIH1cbiAgICBzY29wZS5tb3VzZURvd24gPSAoZSkgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgaWYgKGVsZW1lbnQuaGFzQ2xhc3MoJ21pbmltaXplZCcpIHx8IGVsZW1lbnQuaGFzQ2xhc3MoJ21heGltaXplZCcpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHNjb3BlLmRyYWdnaW5nID0gdHJ1ZTtcbiAgICAgIGVsZW1lbnQub24oJ21vdXNldXAnLCBzY29wZS5tb3VzZVVwKTtcbiAgICAgICQoZG9jdW1lbnQpLm9uKCdtb3VzZW1vdmUnLCBzY29wZS5tb3VzZU1vdmUpO1xuICAgICAgJChkb2N1bWVudCkub24oJ21vdXNlbGVhdmUnLCBzY29wZS5tb3VzZVVwKTtcbiAgICB9O1xuICAgIHNjb3BlLm1vdXNlVXAgPSAoZSkgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgc2NvcGUuZHJhZ2dpbmcgPSBmYWxzZTtcbiAgICAgIG1vdmVkID0gZmFsc2U7XG4gICAgICB2YXIgaGVpZ2h0ID0gZWxlbWVudC5oZWlnaHQoKTtcbiAgICAgIHZhciBvZmZzZXQgPSBlbGVtZW50Lm9mZnNldCgpO1xuICAgICAgdmFyIHdpbkhlaWdodCA9ICQod2luZG93KS5oZWlnaHQoKTtcbiAgICAgIGlmIChvZmZzZXQudG9wID4gKHdpbkhlaWdodCAtIGhlaWdodCAtIDIwKSkge1xuICAgICAgICBlbGVtZW50LmNzcyh7IHRvcDogXCJpbmhlcml0XCIsIGxlZnQ6IFwiaW5oZXJpdFwiIH0pO1xuICAgICAgICBzY29wZS5kb2NrZWQgPSB0cnVlO1xuICAgICAgICBUZXJtaW5hbFNlcnZpY2UucG9zaXRpb25UZXJtaW5hbHMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNjb3BlLmRvY2tlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgZWxlbWVudC5vZmYoJ21vdXNldXAnLCBzY29wZS5tb3VzZVVwKTtcbiAgICAgICQoZG9jdW1lbnQpLm9mZignbW91c2Vtb3ZlJywgc2NvcGUubW91c2VNb3ZlKTtcbiAgICAgICQoZG9jdW1lbnQpLm9mZignbW91c2VsZWF2ZScsIHNjb3BlLm1vdXNlVXApO1xuICAgIH07XG4gICAgc2NvcGUubW91c2VNb3ZlID0gKGUpID0+IHtcbiAgICAgIGlmIChzY29wZS5kcmFnZ2luZykge1xuICAgICAgICBpZiAoIW1vdmVkKSB7XG4gICAgICAgICAgbGFzdFggPSBlLmNsaWVudFg7XG4gICAgICAgICAgbGFzdFkgPSBlLmNsaWVudFk7XG4gICAgICAgICAgbW92ZWQgPSB0cnVlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGVsdGFYID0gZS5jbGllbnRYIC0gbGFzdFg7XG4gICAgICAgIHZhciBkZWx0YVkgPSBlLmNsaWVudFkgLSBsYXN0WTtcbiAgICAgICAgdmFyIGVsT2Zmc2V0ID0gZWxlbWVudC5vZmZzZXQoKTtcbiAgICAgICAgZWxlbWVudC5vZmZzZXQoeyB0b3A6IGVsT2Zmc2V0LnRvcCArIGRlbHRhWSwgbGVmdDogZWxPZmZzZXQubGVmdCArIGRlbHRhWCB9KTtcbiAgICAgICAgbGFzdFggPSBlLmNsaWVudFg7XG4gICAgICAgIGxhc3RZID0gZS5jbGllbnRZO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc3RvcmVXaW5kb3coc2NvcGUsIGVsZW1lbnQpIHtcbiAgICAgIGlmIChzY29wZS5vZmZzZXQpIHtcbiAgICAgICAgZWxlbWVudC5vZmZzZXQoc2NvcGUub2Zmc2V0KTtcbiAgICAgICAgc2NvcGUuZG9ja2VkID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoc2NvcGUuaGVpZ2h0KSB7XG4gICAgICAgIGVsZW1lbnQuaGVpZ2h0KHNjb3BlLmhlaWdodCk7XG4gICAgICB9XG4gICAgICBpZiAoc2NvcGUud2lkdGgpIHtcbiAgICAgICAgZWxlbWVudC53aWR0aChzY29wZS53aWR0aCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2F2ZVdpbmRvdyhzY29wZSwgZWxlbWVudCkge1xuICAgICAgc2NvcGUub2Zmc2V0ID0gZWxlbWVudC5vZmZzZXQoKTtcbiAgICAgIHNjb3BlLmhlaWdodCA9IGVsZW1lbnQuaGVpZ2h0KCk7XG4gICAgICBzY29wZS53aWR0aCA9IGVsZW1lbnQud2lkdGgoKTtcbiAgICB9XG5cbiAgICBzY29wZS5tYXhpbWl6ZWQgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gZWxlbWVudC5oYXNDbGFzcygnbWF4aW1pemVkJyk7XG4gICAgfVxuXG4gICAgc2NvcGUubWF4aW1pemUgPSAoJGUpID0+IHtcbiAgICAgICRlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBpZiAoZWxlbWVudC5oYXNDbGFzcygnbWluaW1pemVkJykpIHtcbiAgICAgICAgc2NvcGUubWluaW1pemUoKTtcbiAgICAgIH1cbiAgICAgIGlmIChlbGVtZW50Lmhhc0NsYXNzKCdtYXhpbWl6ZWQnKSkge1xuICAgICAgICByZXN0b3JlV2luZG93KHNjb3BlLCBlbGVtZW50KTtcbiAgICAgICAgJCgnI21haW4nKS5jc3MoeyBkaXNwbGF5OiAnaW5oZXJpdCcgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzYXZlV2luZG93KHNjb3BlLCBlbGVtZW50KTtcbiAgICAgICAgJCgnI21haW4nKS5jc3MoeyBkaXNwbGF5OiAnbm9uZScgfSk7XG4gICAgICAgIGVsZW1lbnQuY3NzKHsgXG4gICAgICAgICAgaGVpZ2h0OiAnaW5oZXJpdCcsIFxuICAgICAgICAgIGJvdHRvbTogMCwgXG4gICAgICAgICAgd2lkdGg6ICcxMDAlJywgXG4gICAgICAgICAgdG9wOiBOQVZfT0ZGU0VULCBcbiAgICAgICAgICBsZWZ0OiAwIFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGVsZW1lbnQudG9nZ2xlQ2xhc3MoJ21heGltaXplZCcpO1xuICAgIH1cbiAgICBzY29wZS5taW5pbWl6ZSA9ICgkZSkgPT4ge1xuICAgICAgJGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGlmIChlbGVtZW50Lmhhc0NsYXNzKCdtYXhpbWl6ZWQnKSkge1xuICAgICAgICBzY29wZS5tYXhpbWl6ZSgpO1xuICAgICAgfVxuICAgICAgaWYgKGVsZW1lbnQuaGFzQ2xhc3MoJ21pbmltaXplZCcpKSB7XG4gICAgICAgIHJlc3RvcmVXaW5kb3coc2NvcGUsIGVsZW1lbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2F2ZVdpbmRvdyhzY29wZSwgZWxlbWVudCk7XG4gICAgICAgIHNjb3BlLmRvY2tlZCA9IHRydWU7XG4gICAgICAgIGVsZW1lbnQuY3NzKHsgaGVpZ2h0OiBUSVRMRV9IRUlHSFQsIHRvcDogXCJpbmhlcml0XCIsIGxlZnQ6IFwiaW5oZXJpdFwiIH0pO1xuICAgICAgICBUZXJtaW5hbFNlcnZpY2UucG9zaXRpb25UZXJtaW5hbHMoKTtcbiAgICAgIH1cbiAgICAgIGVsZW1lbnQudG9nZ2xlQ2xhc3MoJ21pbmltaXplZCcpO1xuICAgIH07XG4gIH1cblxuICBfbW9kdWxlLmRpcmVjdGl2ZSgndGVybWluYWxXaW5kb3cnLCAoJGNvbXBpbGUsIFRlcm1pbmFsU2VydmljZSkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICByZXN0cmljdDogJ0EnLFxuICAgICAgc2NvcGU6IGZhbHNlLFxuICAgICAgbGluazogKHNjb3BlOmFueSwgZWxlbWVudCwgYXR0cikgPT4ge1xuICAgICAgICBhZGRXaW5kb3dBY3Rpb25zKHNjb3BlLCBlbGVtZW50LCBUZXJtaW5hbFNlcnZpY2UpO1xuICAgICAgICB2YXIgYm9keSA9IGVsZW1lbnQuZmluZCgnLnRlcm1pbmFsLWJvZHknKTtcbiAgICAgICAgYm9keS5hcHBlbmQoJGNvbXBpbGUoJzxrdWJlcm5ldGVzLWNvbnRhaW5lci10ZXJtaW5hbCBwb2Q9XCJwb2RMaW5rXCIgY29udGFpbmVyPVwiY29udGFpbmVyTmFtZVwiIGNvbW1hbmQ9XCJiYXNoXCI+PC9rdWJlcm5ldGVzLWNvbnRhaW5lci10ZXJtaW5hbD4nKShzY29wZSkpO1xuICAgICAgfVxuICAgIH07XG4gIH0pO1xufVxuXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJ0ZXJtLnRzXCIvPlxuXG5tb2R1bGUgS3ViZXJuZXRlcyB7XG5cbiAgdmFyIGxvZyA9IExvZ2dlci5nZXQoXCJrdWJlcm5ldGVzLXBvZC1sb2dzXCIpO1xuXG4gIF9tb2R1bGUuc2VydmljZShcIlBvZExvZ1JlcGxhY2VtZW50c1wiLCAoKSA9PiB7XG4gICAgcmV0dXJuIFtdO1xuICB9KTtcblxuICBfbW9kdWxlLnJ1bigoUG9kTG9nUmVwbGFjZW1lbnRzKSA9PiB7XG4gICAgdmFyIGxvZyA9IExvZ2dlci5nZXQoXCJwb2QtbG9nLXJlcGxhY2Vyc1wiKTtcbiAgICAvLyBBZGQgQU5TSSBlc2NhcGUgY2hhcmFjdGVyIHJlcGxhY2VyXG4gICAgLy8gYWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tbWFsZWNraS9hbnNpc3BhblxuICAgIHZhciBjb2xvcnMgPSB7XG4gICAgICAnMzAnOiAnYmxhY2snLFxuICAgICAgJzMxJzogJ3JlZCcsXG4gICAgICAnMzInOiAnZ3JlZW4nLFxuICAgICAgJzMzJzogJ3llbGxvdycsXG4gICAgICAnMzQnOiAnYmx1ZScsXG4gICAgICAnMzUnOiAncHVycGxlJyxcbiAgICAgICczNic6ICdjeWFuJyxcbiAgICAgICczNyc6ICd3aGl0ZScgXG4gICAgfVxuICAgIFBvZExvZ1JlcGxhY2VtZW50cy5wdXNoKChtc2cpID0+IHtcbiAgICAgIGlmICghbXNnKSB7XG4gICAgICAgIHJldHVybiBtc2c7XG4gICAgICB9XG4gICAgICB2YXIgZW5kID0gXCI8L3NwYW4+XCI7XG4gICAgICBfLmZvck93bihjb2xvcnMsIChjb2xvciwgY29kZSkgPT4ge1xuICAgICAgICB2YXIgc3RhcnQgPSBgPHNwYW4gY2xhc3M9XCJgICsgY29sb3IgKyBgXCI+YDtcbiAgICAgICAgbXNnID0gbXNnLnJlcGxhY2UobmV3IFJlZ0V4cCgnXFwwMzNcXFxcWycgKyBjb2RlICsgJ20nLCAnZycpLCBzdGFydClcbiAgICAgICAgbXNnID0gbXNnLnJlcGxhY2UobmV3IFJlZ0V4cCgnXFwwMzNcXFxcWzA7JyArIGNvZGUgKyAnbScsICdnJyksIHN0YXJ0KTtcbiAgICAgIH0pO1xuICAgICAgbXNnID0gbXNnLnJlcGxhY2UoL1xcMDMzXFxbMW0vZywgJzxiPicpLnJlcGxhY2UoL1xcMDMzXFxbMjJtL2csICc8L2I+Jyk7XG4gICAgICBtc2cgPSBtc2cucmVwbGFjZSgvXFwwMzNcXFszbS9nLCAnPGk+JykucmVwbGFjZSgvXFwwMzNcXFsyM20vZywgJzwvaT4nKTtcbiAgICAgIG1zZyA9IG1zZy5yZXBsYWNlKC9cXDAzM1xcW20vZywgZW5kKTtcbiAgICAgIG1zZyA9IG1zZy5yZXBsYWNlKC9cXDAzM1xcWzBtL2csIGVuZCk7XG4gICAgICBtc2cgPSBtc2cucmVwbGFjZSgvXFwwMzNcXFszOW0vZywgZW5kKTtcbiAgICAgIG1zZyA9IG1zZy5yZXBsYWNlKC9cXDAzM1xcWzJtL2csICc8c3Bhbj4nKTtcbiAgICAgIG1zZyA9IG1zZy5yZXBsYWNlKC9cXDAzM1xcWzA7MzltL2csIGVuZCk7XG4gICAgICBsb2cuZGVidWcoXCJSdW5uaW5nIHJlcGxhY2VtZW50IG9uIG1lc3NhZ2U6IFwiLCBtc2cpO1xuICAgICAgcmV0dXJuIG1zZztcbiAgICB9KTtcbiAgfSk7XG5cbiAgX21vZHVsZS5jb250cm9sbGVyKFwiS3ViZXJuZXRlcy5Qb2RMb2dMaW5rQ29udHJvbGxlclwiLCAoJHNjb3BlLCBUZXJtaW5hbFNlcnZpY2UsICR0ZW1wbGF0ZUNhY2hlKSA9PiB7XG5cbiAgICAkc2NvcGUub3BlbkxvZ3MgPSAoZW50aXR5KSA9PiB7XG4gICAgICBsb2cuZGVidWcoXCJPcGVuIGxvZ3M6IFwiLCBlbnRpdHkpO1xuICAgICAgVGVybWluYWxTZXJ2aWNlLm5ld1Rlcm1pbmFsKGVudGl0eS5tZXRhZGF0YS5zZWxmTGluaywgZW50aXR5Lm1ldGFkYXRhLm5hbWUsICR0ZW1wbGF0ZUNhY2hlLmdldChVcmxIZWxwZXJzLmpvaW4odGVtcGxhdGVQYXRoLCAnbG9nU2hlbGwuaHRtbCcpKSk7XG4gICAgfVxuXG4gIH0pO1xuXG4gIF9tb2R1bGUuZGlyZWN0aXZlKCdwb2RMb2dEaXNwbGF5JywgKHVzZXJEZXRhaWxzLCBQb2RMb2dSZXBsYWNlbWVudHMpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVzdHJpY3Q6ICdFJyxcbiAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwb2QtbG9nLWxpbmVzXCI+XG4gICAgICAgICAgPHAgbmctaGlkZT1cImZldGNoZWRcIj5QbGVhc2Ugd2FpdCwgZmV0Y2hpbmcgbG9ncy4uLjwvcD5cbiAgICAgICAgICA8cCBuZy1oaWRlPVwibWVzc2FnZXMubGVuZ3RoIHx8IHByZXZpb3VzXCI+VmlldyA8YSBocmVmPVwiXCIgbmctY2xpY2s9XCJwcmV2aW91cz0hcHJldmlvdXNcIj5wcmV2aW91cyBjb250YWluZXIgbG9nczwvYT4/PC9wPlxuICAgICAgICAgIDxwIG5nLXJlcGVhdD1cIm1lc3NhZ2UgaW4gbWVzc2FnZXMgdHJhY2sgYnkgJGluZGV4XCIgbmctYmluZC1odG1sPVwibWVzc2FnZVwiPjwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICBgLFxuICAgICAgbGluazogKHNjb3BlOmFueSwgZWxlbWVudCwgYXR0cikgPT4ge1xuICAgICAgICB2YXIgbGluayA9IHNjb3BlLiRldmFsKCdwb2RMaW5rJyk7XG4gICAgICAgIHZhciBuYW1lID0gc2NvcGUuJGV2YWwoJ2NvbnRhaW5lck5hbWUnKTtcblxuICAgICAgICBpZiAoIWxpbmspIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzY29wZS5mZXRjaGVkID0gZmFsc2U7XG4gICAgICAgIHNjb3BlLnByZXZpb3VzID0gZmFsc2U7XG4gICAgICAgIHNjb3BlLm1lc3NhZ2VzID0gW107XG5cbiAgICAgICAgbGluayA9IFVybEhlbHBlcnMuam9pbihtYXN0ZXJBcGlVcmwoKSwgbGluaywgJ2xvZycpO1xuICAgICAgICBsaW5rID0gS3ViZXJuZXRlc0FQSS53c1VybChsaW5rKTtcbiAgICAgICAgbGluay5zZWFyY2goe1xuICAgICAgICAgIGZvbGxvdzogdHJ1ZSxcbiAgICAgICAgICB0YWlsTGluZXM6IDEwMDAsXG4gICAgICAgICAgYWNjZXNzX3Rva2VuOiB1c2VyRGV0YWlscy50b2tlblxuICAgICAgICB9KTtcblxuICAgICAgICB2YXIgbWVzc2FnZXMgPSBbXTtcblxuICAgICAgICB2YXIgcHVsbE1lc3NhZ2VzID0gXy5kZWJvdW5jZSgoKSA9PiB7XG4gICAgICAgICAgc2NvcGUubWVzc2FnZXMgPSBzY29wZS5tZXNzYWdlcy5jb25jYXQoXy5yZW1vdmUobWVzc2FnZXMsICgpID0+IHRydWUpLm1hcCgobXNnKSA9PiB7XG4gICAgICAgICAgICBQb2RMb2dSZXBsYWNlbWVudHMuZm9yRWFjaCgocmVwbEZ1bmM6YW55KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChhbmd1bGFyLmlzRnVuY3Rpb24ocmVwbEZ1bmMpKSB7XG4gICAgICAgICAgICAgICAgbXNnID0gcmVwbEZ1bmMobXNnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbXNnO1xuICAgICAgICAgIH0pKTtcbiAgICAgICAgICBpZiAoIXNjb3BlLmZldGNoZWQpIHtcbiAgICAgICAgICAgIHNjb3BlLmZldGNoZWQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBDb3JlLiRhcHBseShzY29wZSk7XG4gICAgICAgIH0sIDEwMDApO1xuXG4gICAgICAgIGZ1bmN0aW9uIGluaXRTb2NrZXQobGluaykge1xuICAgICAgICAgIHNjb3BlLmZldGNoZWQgPSBmYWxzZTtcbiAgICAgICAgICBtZXNzYWdlcy5sZW5ndGggPSAwO1xuICAgICAgICAgIHNjb3BlLm1lc3NhZ2VzLmxlbmd0aCA9IDA7XG4gICAgICAgICAgdmFyIHdzID0gbmV3IFdlYlNvY2tldChsaW5rLnRvU3RyaW5nKCksICdiYXNlNjQuYmluYXJ5Lms4cy5pbycpO1xuICAgICAgICAgIHdzLm9ubWVzc2FnZSA9IChldmVudCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSB3aW5kb3cuYXRvYihldmVudC5kYXRhKTtcbiAgICAgICAgICAgICAgbWVzc2FnZXMucHVzaChtZXNzYWdlKTtcbiAgICAgICAgICAgICAgcHVsbE1lc3NhZ2VzKCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgLy8gd2UnbGwganVzdCBpZ25vcmUgdGhlc2VcbiAgICAgICAgICAgICAgLy9sb2cuZGVidWcoXCJGYWlsZWQgdG8gZGVjb2RlIG1lc3NhZ2U6IFwiLCBldmVudC5kYXRhLCBcIiBlcnJvcjogXCIsIGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB3cztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3cyA9IGluaXRTb2NrZXQobGluayk7XG5cbiAgICAgICAgc2NvcGUuJHdhdGNoKCdwcmV2aW91cycsICh2YWx1ZSwgb2xkKSA9PiB7XG4gICAgICAgICAgaWYgKHZhbHVlICE9PSBvbGQpIHtcbiAgICAgICAgICAgIGlmIChsaW5rLmhhc1NlYXJjaCgncHJldmlvdXMnKSkge1xuICAgICAgICAgICAgICBsaW5rLnJlbW92ZVNlYXJjaCgncHJldmlvdXMnKS5hZGRTZWFyY2goJ3ByZXZpb3VzJywgc2NvcGUucHJldmlvdXMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbGluay5hZGRTZWFyY2goJ3ByZXZpb3VzJywgc2NvcGUucHJldmlvdXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd3MuY2xvc2UoKTtcbiAgICAgICAgICAgIHdzID0gaW5pdFNvY2tldChsaW5rKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGVsZW1lbnQub24oJyRkZXN0cm95JywgKCkgPT4ge1xuICAgICAgICAgIGlmICh3cykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgd3MuY2xvc2UoKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAvLyBub3RoaW5nIHRvIGRvXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWxldGUgd3M7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIF9tb2R1bGUuZGlyZWN0aXZlKCdwb2RMb2dXaW5kb3cnLCAoJGNvbXBpbGUsIFRlcm1pbmFsU2VydmljZSkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICByZXN0cmljdDogJ0EnLFxuICAgICAgc2NvcGU6IGZhbHNlLFxuICAgICAgbGluazogKHNjb3BlOmFueSwgZWxlbWVudCwgYXR0cikgPT4ge1xuICAgICAgICBhZGRXaW5kb3dBY3Rpb25zKHNjb3BlLCBlbGVtZW50LCBUZXJtaW5hbFNlcnZpY2UpO1xuICAgICAgICBzY29wZS5hdEJvdHRvbSA9IHRydWU7XG4gICAgICAgIHNjb3BlLiR3YXRjaCgnYXRCb3R0b20nLCAodmFsKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJhdEJvdHRvbTogXCIsIHZhbCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gIH0pO1xuXG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJ1dGlsSGVscGVycy50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIGV4cG9ydCB2YXIgRW52SXRlbSA9IGNvbnRyb2xsZXIoXCJFbnZJdGVtXCIsIFtcIiRzY29wZVwiLCAoJHNjb3BlKSA9PiB7XG4gICAgdmFyIHBhcnRzID0gJHNjb3BlLmRhdGEuc3BsaXQoJz0nKTtcbiAgICAkc2NvcGUua2V5ID0gcGFydHMuc2hpZnQoKTtcbiAgICAkc2NvcGUudmFsdWUgPSBwYXJ0cy5qb2luKCc9Jyk7XG4gIH1dKTtcblxuICAvLyBtYWluIGNvbnRyb2xsZXIgZm9yIHRoZSBwYWdlXG4gIGV4cG9ydCB2YXIgUG9kcyA9IGNvbnRyb2xsZXIoXCJQb2RzXCIsIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNQb2RzXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiU2VydmljZVJlZ2lzdHJ5XCIsIFwiJGRpYWxvZ1wiLCBcIiR3aW5kb3dcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRsb2NhdGlvblwiLCBcImxvY2FsU3RvcmFnZVwiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXG4gICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOiBLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNQb2RzOm5nLnJlc291cmNlLklSZXNvdXJjZUNsYXNzPGFueT4sIEt1YmVybmV0ZXNTdGF0ZSwgU2VydmljZVJlZ2lzdHJ5LCAkZGlhbG9nLCAkd2luZG93LCAkdGVtcGxhdGVDYWNoZSwgJHJvdXRlUGFyYW1zLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgbG9jYWxTdG9yYWdlLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcblxuICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xuICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcbiAgICAkc2NvcGUuJG9uKCdrdWJlcm5ldGVzTW9kZWxVcGRhdGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICB9KTtcblxuICAgICRzY29wZS5pdGVtU2NoZW1hID0gRm9ybXMuY3JlYXRlRm9ybUNvbmZpZ3VyYXRpb24oKTtcblxuICAgICRzY29wZS50YWJsZUNvbmZpZyA9IHtcbiAgICAgIGRhdGE6ICdtb2RlbC5wb2RzJyxcbiAgICAgIHNob3dTZWxlY3Rpb25DaGVja2JveDogdHJ1ZSxcbiAgICAgIGVuYWJsZVJvd0NsaWNrU2VsZWN0aW9uOiBmYWxzZSxcbiAgICAgIG11bHRpU2VsZWN0OiB0cnVlLFxuICAgICAgc2VsZWN0ZWRJdGVtczogW10sXG4gICAgICBmaWx0ZXJPcHRpb25zOiB7XG4gICAgICAgIGZpbHRlclRleHQ6ICRsb2NhdGlvbi5zZWFyY2goKVtcInFcIl0gfHwgJydcbiAgICAgIH0sXG4gICAgICBjb2x1bW5EZWZzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaWVsZDogJ19rZXknLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTmFtZScsXG4gICAgICAgICAgZGVmYXVsdFNvcnQ6IHRydWUsXG4gICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJpZFRlbXBsYXRlLmh0bWxcIilcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGZpZWxkOiAnJHN0YXR1c0NzcycsXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdTdGF0dXMnLFxuICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwic3RhdHVzVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICB9LFxuICAgICAgICB7IGZpZWxkOiAnJGV2ZW50Q291bnQnLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnRXZlbnRzJyxcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImV2ZW50U3VtbWFyeVRlbXBsYXRlLmh0bWxcIilcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGZpZWxkOiAnJHJlc3RhcnRDb3VudCcsXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdSZXN0YXJ0cydcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGZpZWxkOiAnJGNyZWF0ZWRUaW1lJyxcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ0FnZScsXG4gICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJhZ2VUZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBmaWVsZDogJyRpbWFnZU5hbWVzJyxcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ0ltYWdlcycsXG4gICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJpbWFnZVRlbXBsYXRlLmh0bWxcIilcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGZpZWxkOiAnJGhvc3QnLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnSG9zdCcsXG4gICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJob3N0VGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZmllbGQ6ICckbGFiZWxzVGV4dCcsXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdMYWJlbHMnLFxuICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwibGFiZWxUZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBmaWVsZDogJyRwb2RJUCcsXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdQb2QgSVAnLFxuICAgICAgICAgIGN1c3RvbVNvcnRGaWVsZDogKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gS3ViZXJuZXRlcy5zb3J0QnlQb2RJcChmaWVsZC4kcG9kSVApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH07XG5cbiAgICAkc2NvcGUub3BlbkxvZ3MgPSAoKSA9PiB7XG4gICAgICB2YXIgcG9kcyA9ICRzY29wZS50YWJsZUNvbmZpZy5zZWxlY3RlZEl0ZW1zO1xuICAgICAgaWYgKCFwb2RzIHx8ICFwb2RzLmxlbmd0aCkge1xuICAgICAgICBpZiAoJHNjb3BlLmlkKSB7XG4gICAgICAgICAgdmFyIGl0ZW0gPSAkc2NvcGUuaXRlbTtcbiAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgcG9kcyA9IFtpdGVtXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG9wZW5Mb2dzRm9yUG9kcyhTZXJ2aWNlUmVnaXN0cnksICR3aW5kb3csIEt1YmVybmV0ZXNNb2RlbC5jdXJyZW50TmFtZXNwYWNlKCksIHBvZHMpO1xuICAgIH07XG5cbiAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XG5cbiAgICAkc2NvcGUuZGVsZXRlUHJvbXB0ID0gKHNlbGVjdGVkKSA9PiB7XG4gICAgICBpZiAoYW5ndWxhci5pc1N0cmluZyhzZWxlY3RlZCkpIHtcbiAgICAgICAgc2VsZWN0ZWQgPSBbe1xuICAgICAgICAgIGlkOiBzZWxlY3RlZFxuICAgICAgICB9XTtcbiAgICAgIH1cbiAgICAgIFVJLm11bHRpSXRlbUNvbmZpcm1BY3Rpb25EaWFsb2coPFVJLk11bHRpSXRlbUNvbmZpcm1BY3Rpb25PcHRpb25zPntcbiAgICAgICAgY29sbGVjdGlvbjogc2VsZWN0ZWQsXG4gICAgICAgIGluZGV4OiAnbWV0YWRhdGEubmFtZScsXG4gICAgICAgIG9uQ2xvc2U6IChyZXN1bHQ6Ym9vbGVhbikgPT4ge1xuICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkOkFycmF5PEt1YmVQb2Q+LCBuZXh0Okt1YmVQb2QpIHtcbiAgICAgICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgICAgICBsb2cuZGVidWcoXCJkZWxldGluZzogXCIsIGdldE5hbWUobmV4dCkpO1xuICAgICAgICAgICAgICAgIEt1YmVybmV0ZXNQb2RzLmRlbGV0ZSh7XG4gICAgICAgICAgICAgICAgICBpZDogZ2V0TmFtZShuZXh0KVxuICAgICAgICAgICAgICAgIH0sIHVuZGVmaW5lZCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiZGVsZXRlZDogXCIsIGdldE5hbWUobmV4dCkpO1xuICAgICAgICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpO1xuICAgICAgICAgICAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiRXJyb3IgZGVsZXRpbmc6IFwiLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHRpdGxlOiAnRGVsZXRlIHBvZHM/JyxcbiAgICAgICAgYWN0aW9uOiAnVGhlIGZvbGxvd2luZyBwb2RzIHdpbGwgYmUgZGVsZXRlZDonLFxuICAgICAgICBva1RleHQ6ICdEZWxldGUnLFxuICAgICAgICBva0NsYXNzOiAnYnRuLWRhbmdlcicsXG4gICAgICAgIGN1c3RvbTogXCJUaGlzIG9wZXJhdGlvbiBpcyBwZXJtYW5lbnQgb25jZSBjb21wbGV0ZWQhXCIsXG4gICAgICAgIGN1c3RvbUNsYXNzOiBcImFsZXJ0IGFsZXJ0LXdhcm5pbmdcIlxuICAgICAgfSkub3BlbigpO1xuICAgIH07XG5cbiAgICAkc2NvcGUuY3JlYXRlUG9kcz0gKCkgPT4ge1xuICAgICAgdmFyIHhocj0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xuICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT0gNCkgey8vNOihqOekuuaVsOaNruW3sue7j+iwg+eUqOWujOaIkFxuICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09IDIwMCkgey8vSFRUUOeahOeKtuaAgeeggVxuICAgICAgICAgICAgdmFyIG9iaj1KU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgdmFyIG9iamVjdCA9IHtcbiAgICAgICAgICAgICAgIFwibmFtZVwiOiBcIm5ld3BvZFwiLFxuICAgICAgICAgICAgICAgXCJsYWJlbHNcIjoge1xuICAgICAgICAgICAgICAgICBcImFpbVwiOiBcInRlc3RcIixcbiAgICAgICAgICAgICAgICAgXCJhcHBcIjogXCJvcmFjbGVcIlxuICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgIFwicGF0aFwiOiAnL2hvbWUvJyxcbiAgICAgICAgICAgICAgIFwicG9ydFwiOiAxNTI1XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBLdWJlcm5ldGVzLmNyZWF0ZVJDKG9iamVjdCk7XG5cbiAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAvL2FsdGVyKFwic2hpYmFpXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHhoci5vcGVuKFwiUE9TVFwiLCBcIi9vcmFjbGVBcHBQYXRoXCIsIGZhbHNlKTsvL+S4juacjeWKoeWZqOi/nuaOpeW5tuWPkemAgVxuICAgICAgeGhyLnNlbmQobnVsbCk7XG4gICAgfTtcbiAgfV0pO1xufVxuIiwiLypcbnJlYWQgYSBvYmplY3QgZnJvbSBqaWFuZ3N1IHByb3ZpbmNlICwgc3VjaCBhcyBuYW5qaW5nIHdpdGggc29tZSBpbmZvcm1hdGlvblxu6K+75Y+W5rGf6IuP55qE5p+Q5Liq5Zyw5Yy655qE5L+h5oGv77yM5Lul5Y+K57O757uf5L+h5oGvXG4gKi9cbm1vZHVsZSBLdWJlcm5ldGVze1xuXHRwdWJsaWMgdmFyIHN5c3RlbV9hcnIgPSBbe1wic3lzX25hbWVcIjpcIumDqOmXqOmihOeul1wiLFwic3lzX2lkXCI6XCIxXCJ9LHtcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaXmlLbnvLTnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiMlwifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfaWRcIjpcIjNcIn0se1wic3lzX25hbWVcIjpcIui1hOS6p+euoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCI0XCJ9LHtcInN5c19uYW1lXCI6XCLnlKjlj4votKLmlL/nu7zlkIjnrqHnkIbkv6Hmga/ns7vnu59cIixcInN5c19pZFwiOlwiNVwifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi55So5Y+LQSsrXCIsXCJzeXNfaWRcIjpcIjZcIn0se1wic3lzX25hbWVcIjpcIua1puWPo+i0ouaUv+S4gOS9k+WMllwiLFwic3lzX2lkXCI6XCI3XCJ9LHtcInN5c19uYW1lXCI6XCLmoJbpnJ7ljLrotKLmlL/kuJrliqHkv6Hmga/nrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiOFwifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi5LiA5L2T5YyW57O757ufXCIsXCJzeXNfaWRcIjpcIjlcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+euoeeQhuS4gOS9k+WMluezu+e7n1wiLFwic3lzX2lkXCI6XCIxMFwifSx7XCJzeXNfbmFtZVwiOlwi5ruo5rGf5byA5Y+R5Yy66LSi5pS/5YiG5bGAXCIsXCJzeXNfaWRcIjpcIjExXCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLmsZ/lroHnu4/mtY7mioDmnK/lvIDlj5HljLrotKLmlL/liIblsYBcIixcInN5c19pZFwiOlwiMTJcIn0se1wic3lzX25hbWVcIjpcIuaxn+WugeenkeWtpuWbrei0ouaUv+WIhuWxgFwiLFwic3lzX2lkXCI6XCIxM1wifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW57O757ufXCIsXCJzeXNfaWRcIjpcIjE0XCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCJBKyvotKLmlL/kuIDkvZPljJblubPlj7BcIixcInN5c19pZFwiOlwiMTVcIn0se1wic3lzX25hbWVcIjpcIumdnueojuezu+e7n1wiLFwic3lzX2lkXCI6XCIxNlwifSx7XCJzeXNfbmFtZVwiOlwi5LiA5L2T5YyW6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfaWRcIjpcIjE3XCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLkuIDkvZPljJZcIixcInN5c19pZFwiOlwiMThcIn0se1wic3lzX25hbWVcIjpcIuWbveW6k+mbhuS4reaUr+S7mOeuoeeQhuS/oeaBr+ezu+e7n1wiLFwic3lzX2lkXCI6XCIxOVwifSx7XCJzeXNfbmFtZVwiOlwi5Zu95bqT6ZuG5Lit5pSv5LuYXCIsXCJzeXNfaWRcIjpcIjIwXCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLotKLmlL/kuJPmiLfmoLjnrpflj4rpnZ7nqI7ns7vnu59cIixcInN5c19pZFwiOlwiMjFcIn0se1wic3lzX25hbWVcIjpcIumbhuS4reaUr+S7mOezu+e7n1wiLFwic3lzX2lkXCI6XCIyMlwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiT5oi35qC4566X57O757ufXCIsXCJzeXNfaWRcIjpcIjIzXCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLbnvLTns7vnu59cIixcInN5c19pZFwiOlwiMjRcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMluW5s+WPsFwiLFwic3lzX2lkXCI6XCIyNVwifSx7XCJzeXNfbmFtZVwiOlwi5a+M5rex6aKE566X5omn6KGMXCIsXCJzeXNfaWRcIjpcIjI2XCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLnlKjlj4vpnZ7nqI7lj4rnpajmja5cIixcInN5c19pZFwiOlwiMjdcIn0se1wic3lzX25hbWVcIjpcIueUqOWPi+mihOeul+aJp+ihjFwiLFwic3lzX2lkXCI6XCIyOFwifSx7XCJzeXNfbmFtZVwiOlwi5rGf6IuP55yB6LSi5pS/6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfaWRcIjpcIjI5XCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLnlKjlj4vpgJrnlKjova/ku7ZcIixcInN5c19pZFwiOlwiMzBcIn0se1wic3lzX25hbWVcIjpcIuiBlOWPi+i9r+S7ti/pgJrnlKjotKLliqFcIixcInN5c19pZFwiOlwiMzFcIn0se1wic3lzX25hbWVcIjpcIueUqOWPi0dSUEctVThSMTDotKLmlL/nrqHnkIbova/ku7ZcIixcInN5c19pZFwiOlwiMzJcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIueUqOWPi0dQUC1SMTDotKLmlL/nrqHnkIbova/ku7ZcIixcInN5c19pZFwiOlwiMzNcIn0se1wic3lzX25hbWVcIjpcIuWvjOa3seWNj+mAmui0ouaUv+S4gOS9k+WMlueuoeeQhuS/oeaBr+ezu+e7n1wiLFwic3lzX2lkXCI6XCIzNFwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5Yqh57uf5LiA5qC4566X57O757ufXCIsXCJzeXNfaWRcIjpcIjM1XCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLlhazlhbHotKLmlL/nrqHnkIbova/ku7ZcIixcInN5c19pZFwiOlwiMzZcIn0se1wic3lzX25hbWVcIjpcIkErK+i0ouaUv+S4gOS9k+WMluS/oeaBr+W5s+WPsFwiLFwic3lzX2lkXCI6XCIzN1wifSx7XCJzeXNfbmFtZVwiOlwi5paw5Lit5aSn5YWs5YWx6LSi5Yqh566h55CG6L2v5Lu2XCIsXCJzeXNfaWRcIjpcIjM4XCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLlr4zmt7HotKLmlL/kuIDkvZPljJbnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiMzlcIn0se1wic3lzX25hbWVcIjpcIuaWsOS4reWkp+WFrOWFsei0ouaUv+euoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCI0MFwifSx7XCJzeXNfbmFtZVwiOlwi5a+M5rex5Y2P6YCa6LSi5pS/5LiA5L2T5YyW5Lia5Yqh566h55CG57O757uf6L2v5Lu2XCIsXCJzeXNfaWRcIjpcIjQxXCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLmlrDkuK3lpKflhazlhbHotKLmlL/nrqHnkIbova/ku7ZHc29mdFwiLFwic3lzX2lkXCI6XCI0MlwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW5Lia5Yqh57O757ufXCIsXCJzeXNfaWRcIjpcIjQzXCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbova/ku7ZcIixcInN5c19pZFwiOlwiNDRcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeezu+e7n1wiLFwic3lzX2lkXCI6XCI0NVwifSx7XCJzeXNfbmFtZVwiOlwi5oC76aKE566X57O757ufXCIsXCJzeXNfaWRcIjpcIjQ2XCJ9LHtcInN5c19uYW1lXCI6XCLlm73lupPpm4bkuK3mlK/ku5jns7vnu59cIixcInN5c19pZFwiOlwiNDdcIn0se1wic3lzX25hbWVcIjpcIueUqOasvuiuoeWIkuezu+e7n1wiLFwic3lzX2lkXCI6XCI0OFwifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi5oyH5qCH566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjQ5XCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/nu7zlkIjkuJrliqHnrqHnkIblubPlj7BcIixcInN5c19pZFwiOlwiNTBcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMlueuoeeQhuS/oeaBr+ezu+e7n1wiLFwic3lzX2lkXCI6XCI1MVwifSx7XCJzeXNfbmFtZVwiOlwi5bel6LWE57uf5Y+RXCIsXCJzeXNfaWRcIjpcIjUyXCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLlm73mnInotYTkuqdcIixcInN5c19pZFwiOlwiNTNcIn0se1wic3lzX25hbWVcIjpcIuS5oemVh+mdnueojuaUtuWFpVwiLFwic3lzX2lkXCI6XCI1NFwifSx7XCJzeXNfbmFtZVwiOlwi5Lmh6ZWH6ZuG5Lit5pSv5LuYXCIsXCJzeXNfaWRcIjpcIjU1XCJ9LHtcInN5c19uYW1lXCI6XCLpnZ7nqI7lvoHnvLTns7vnu59cIixcInN5c19pZFwiOlwiNTZcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIumihOeul+e8luWItuS4juaJp+ihjOezu+e7n1wiLFwic3lzX2lkXCI6XCI1N1wifSx7XCJzeXNfbmFtZVwiOlwi6aKE566X566h55CG57u85ZCI5Lia5Yqh5bmz5Y+wXCIsXCJzeXNfaWRcIjpcIjU4XCJ9LHtcInN5c19uYW1lXCI6XCJ1OOeuoeeQhui9r+S7tlwiLFwic3lzX2lkXCI6XCI1OVwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5oyH5qCH566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjYwXCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLnlKjlj4tHUlAtUjnotKLliqHnrqHnkIbova/ku7ZcIixcInN5c19pZFwiOlwiNjFcIn0se1wic3lzX25hbWVcIjpcIueUqOWPi0dSUC1VOOi0ouaUv+euoeeQhui9r+S7tlwiLFwic3lzX2lkXCI6XCI2MlwifSx7XCJzeXNfbmFtZVwiOlwi6LSm5Yqh5aSE55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjYzXCJ9LHtcInN5c19uYW1lXCI6XCJSOWnotKLmlL/nrqHnkIbova/ku7ZcIixcInN5c19pZFwiOlwiNjRcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcInU46LSi5pS/566h55CG6L2v5Lu2XCIsXCJzeXNfaWRcIjpcIjY1XCJ9LHtcInN5c19uYW1lXCI6XCLnm7jln47ljLrotKLmlL/nu7zlkIjnrqHnkIbkv6Hmga/ns7vnu59cIixcInN5c19pZFwiOlwiNjZcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+mdnueojue7vOWQiOeuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCI2N1wifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/57u85ZCI566h55CG5bmz5Y+wXCIsXCJzeXNfaWRcIjpcIjY4XCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLlkLTmsZ/ljLrotKLmlL/kuIDkvZPljJZcIixcInN5c19pZFwiOlwiNjlcIn0se1wic3lzX25hbWVcIjpcIueUqOWPi1I5XCIsXCJzeXNfaWRcIjpcIjcwXCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/lhazlhbHlupTnlKjmnI3liqHlubPlj7BcIixcInN5c19pZFwiOlwiNzFcIn0se1wic3lzX25hbWVcIjpcIumHkeidtksvM+WIm+aWsOeuoeeQhuW5s+WPsFwiLFwic3lzX2lkXCI6XCI3MlwifSx7XCJzeXNfbmFtZVwiOlwi6LSm5Yqh5pWw5o2u57O757ufXCIsXCJzeXNfaWRcIjpcIjczXCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLlhazlhbHotKLmlL/mnI3liqHlubPlj7BcIixcInN5c19pZFwiOlwiNzRcIn0se1wic3lzX25hbWVcIjpcIuS8muiuoeaguOeul+ezu+e7n1wiLFwic3lzX2lkXCI6XCI3NVwifSx7XCJzeXNfbmFtZVwiOlwi6aG555uu5bqTXCIsXCJzeXNfaWRcIjpcIjc2XCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/mgLvpooTnrpfvvIjlpJbvvInkuJPmiLfnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiNzdcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIuWfjuW7uui1hOmHkeS4k+aIt+euoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCI3OFwifSx7XCJzeXNfbmFtZVwiOlwi5Yac5L+d5LiT5oi3566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjc5XCJ9LHtcInN5c19uYW1lXCI6XCLlhpzkuJrlj5HlsZXln7rph5HkuJPmiLfnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiODBcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIuWkseWcsOWGnOawkeS/nemanOi1hOmHkeS4k+aIt1wiLFwic3lzX2lkXCI6XCI4MVwifSx7XCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl5b6B566h57O757ufXCIsXCJzeXNfaWRcIjpcIjgyXCJ9LHtcInN5c19uYW1lXCI6XCLlt6XotYTnu5/lj5HkurrlkZjkv6Hmga9cIixcInN5c19pZFwiOlwiODNcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIumihOeul+aMh+aghy3lm73lupPpm4bkuK3mlK/ku5jns7vnu59cIixcInN5c19pZFwiOlwiODRcIn0se1wic3lzX25hbWVcIjpcIuaAu+mihOeul+S8muiuoeaguOeul+ezu+e7n1wiLFwic3lzX2lkXCI6XCI4NVwifSx7XCJzeXNfbmFtZVwiOlwi6YOo6Zeo6aKE566X57yW5a6h57O757ufXCIsXCJzeXNfaWRcIjpcIjg2XCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLlhazliqHmtojotLnnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiODdcIn0se1wic3lzX25hbWVcIjpcIuWbveaciei1hOS6p+euoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCI4OFwifSx7XCJzeXNfbmFtZVwiOlwi5Yy66ZWH6LSi5pS/566h55CG4oCc5LiA5L2T5YyW4oCd57O757ufXCIsXCJzeXNfaWRcIjpcIjg5XCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLljr/mnKznuqfotKLmlL/nrqHnkIbigJzkuIDkvZPljJbigJ3ns7vnu59cIixcInN5c19pZFwiOlwiOTBcIn0se1wic3lzX25hbWVcIjpcIueUqOWPi+aUv+WKoVwiLFwic3lzX2lkXCI6XCI5MVwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiT5oi35qC4566X77yI6KGM5pS/5Y+j5LiT6aG56LWE6YeR77yJXCIsXCJzeXNfaWRcIjpcIjkyXCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLotKLmlL/kuJPmiLfmoLjnrpfvvIjnu4/lu7rlj6PkuJPpobnotYTph5HvvIlcIixcInN5c19pZFwiOlwiOTNcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+S4k+aIt+aguOeul++8iOWGnOS4muS/nemZqeS4k+i0pu+8iVwiLFwic3lzX2lkXCI6XCI5NFwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiT5oi35qC4566X77yI5Yac5Lia57u85ZCI5byA5Y+R5LiT6LSm77yJXCIsXCJzeXNfaWRcIjpcIjk1XCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLotKLmlL/kuJPmiLfmoLjnrpfvvIjnpL7kv53otYTph5HkuJPotKbvvIlcIixcInN5c19pZFwiOlwiOTZcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+S4k+aIt+aguOeul++8iOWcn+WcsOWHuuiuqeS4k+i0pu+8iVwiLFwic3lzX2lkXCI6XCI5N1wifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiT5oi35qC4566X77yI57u85ZCI5Y+j5LiT6aG56LWE6YeR77yJXCIsXCJzeXNfaWRcIjpcIjk4XCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaXnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiOTlcIn0se1wic3lzX25hbWVcIjpcIuWGnOS4muS4k+WQkeWPiuWGnOS4muWPkeWxleWfuumHkeS4k+mhuVwiLFwic3lzX2lkXCI6XCIxMDBcIn0se1wic3lzX25hbWVcIjpcIuaAu+mihOeul+S8muiuoeaguOeul1wiLFwic3lzX2lkXCI6XCIxMDFcIn0se1wic3lzX25hbWVcIjpcIumHkei0ouW3peeoi+S4gOS9k+WMluaUr+aSkeW5s+WPsFwiLFwic3lzX2lkXCI6XCIxMDJcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIumdnueojuaUtue8tFwiLFwic3lzX2lkXCI6XCIxMDNcIn0se1wic3lzX25hbWVcIjpcIuWtpuagoemihOeul+aJp+ihjFwiLFwic3lzX2lkXCI6XCIxMDRcIn0se1wic3lzX25hbWVcIjpcIumihOeul+aJp+ihjFwiLFwic3lzX2lkXCI6XCIxMDVcIn0se1wic3lzX25hbWVcIjpcIuS4k+mhuei1hOmHkVwiLFwic3lzX2lkXCI6XCIxMDZcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIuaAu+mihOeul1wiLFwic3lzX2lkXCI6XCIxMDdcIn0se1wic3lzX25hbWVcIjpcIumDqOmXqOmihOeul+ezu+e7n1wiLFwic3lzX2lkXCI6XCIxMDhcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+S4k+aIt+aguOeul1wiLFwic3lzX2lkXCI6XCIxMDlcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+S4k+aIt+i0puWKoeezu+e7n1wiLFwic3lzX2lkXCI6XCIxMTBcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIuWvjOa3sei0ouaUv+S4gOS9k+WMluS4muWKoeeuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIxMTFcIn0se1wic3lzX25hbWVcIjpcIuWbveaciei1hOS6p+ezu+e7n1wiLFwic3lzX2lkXCI6XCIxMTJcIn0se1wic3lzX25hbWVcIjpcIuWbveW6k+S4k+mhuei1hOmHkeeuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIxMTNcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIumdnueojuaUtue8tOeuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIxMTRcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+euoeeQhuezu+e7n++8iOaWsOWGnOS/ne+8iVwiLFwic3lzX2lkXCI6XCIxMTVcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+euoeeQhuezu+e7n++8iOWfjuW4guWxheawkeWMu+eWl+e7n+etue+8iVwiLFwic3lzX2lkXCI6XCIxMTZcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIui0ouaUv+euoeeQhuezu+e7n++8iOmbhuS4reaUr+S7mOS4reW/g++8iVwiLFwic3lzX2lkXCI6XCIxMTdcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+euoeeQhuezu+e7n++8iOino+WbsOmHke+8iVwiLFwic3lzX2lkXCI6XCIxMThcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+euoeeQhuezu+e7n++8iOaXp+WfjuaUuemAoO+8iVwiLFwic3lzX2lkXCI6XCIxMTlcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIui0ouaUv+euoeeQhuezu+e7n++8iOekvuS/nei1hOmHkei0puaIt++8iVwiLFwic3lzX2lkXCI6XCIxMjBcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+euoeeQhuezu+e7n++8iOWcn+WcsOWHuuiuqeS4k+W4kO+8iVwiLFwic3lzX2lkXCI6XCIxMjFcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+euoeeQhuezu+e7n++8iOmihOaLqOWPiumdnumbhuS4reaUr+S7mOS4reW/g++8iVwiLFwic3lzX2lkXCI6XCIxMjJcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIui0ouaUv+euoeeQhuezu+e7n++8iOmihOeul+Wklui1hOmHke+8iVwiLFwic3lzX2lkXCI6XCIxMjNcIn0se1wic3lzX25hbWVcIjpcIuaAu+mihOeul+S8muiuoVwiLFwic3lzX2lkXCI6XCIxMjRcIn0se1wic3lzX25hbWVcIjpcIui0ouWKoeaguOeul+ezu+e7n1wiLFwic3lzX2lkXCI6XCIxMjVcIn0se1wic3lzX25hbWVcIjpcIuW3pei1hOe7n+WPkeezu+e7n1wiLFwic3lzX2lkXCI6XCIxMjZcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIumihOeul+e8luWuoeezu+e7n1wiLFwic3lzX2lkXCI6XCIxMjdcIn0se1wic3lzX25hbWVcIjpcIumihOeul+euoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIxMjhcIn0se1wic3lzX25hbWVcIjpcIumihOeul+Wklui1hOmHke+8iOS7juiBlOe9keWuoeiuoeS4reWPluaVsO+8iVwiLFwic3lzX2lkXCI6XCIxMjlcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIkc2LUXotKLliqHnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiMTMwXCJ9LHtcInN5c19uYW1lXCI6XCLmlrDkuK3lpKflhazlhbHotKLmlL/nrqHnkIbova/ku7ZcIixcInN5c19pZFwiOlwiMTMxXCJ9LHtcInN5c19uYW1lXCI6XCLnlKjlj4tHUlAvUjnotKLmlL/nrqHnkIbova/ku7ZcIixcInN5c19pZFwiOlwiMTMyXCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLnlKjlj4tHUlAtVThSMTBcIixcInN5c19pZFwiOlwiMTMzXCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbnrqHnkIbns7vnu5/vvIjln7rlu7rmiLfvvIlcIixcInN5c19pZFwiOlwiMTM0XCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbnrqHnkIbns7vnu5/vvIjpm4bkuK3mlK/ku5jkuK3lv4PvvIlcIixcInN5c19pZFwiOlwiMTM1XCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbnrqHnkIbns7vnu5/vvIjlhpzkuJrnu7zlkIjlvIDlj5HvvIlcIixcInN5c19pZFwiOlwiMTM2XCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbnrqHnkIbns7vnu5/vvIjpooTnrpflpJbotYTph5HvvIlcIixcInN5c19pZFwiOlwiMTM3XCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbnrqHnkIbns7vnu5/vvIjmlK/lhpzkuJPmiLfvvIlcIixcInN5c19pZFwiOlwiMTM4XCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbnrqHnkIbns7vnu5/vvIjmgLvpooTnrpfvvIlcIixcInN5c19pZFwiOlwiMTM5XCJ9LHtcInN5c19uYW1lXCI6XCLlm73otYTnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiMTQwXCJ9LHtcInN5c19uYW1lXCI6XCLkuaHotKLljr/nrqHns7vnu59cIixcInN5c19pZFwiOlwiMTQxXCJ9LHtcInN5c19uYW1lXCI6XCLpooTnrpfnvJbliLbnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiMTQyXCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5biC5pys57qnX+mDqOmXqOmihOeul1wiLFwic3lzX2lkXCI6XCIxNDNcIn0se1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/luILmnKznuqdf6Z2e56iO5pS2566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjE0NFwifSx7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+W4guacrOe6p1/pooTnrpfmiafooYzns7vnu59cIixcInN5c19pZFwiOlwiMTQ1XCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5Lqt5rmW5Yy6X+i0ouaUv+S4k+aIt1wiLFwic3lzX2lkXCI6XCIxNDZcIn0se1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/kuq3muZbljLpf6Z2e56iO5pS25YWl566h55CGXCIsXCJzeXNfaWRcIjpcIjE0N1wifSx7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+S6rea5luWMul/lm73lupPpm4bkuK3mlK/ku5jnrqHnkIZcIixcInN5c19pZFwiOlwiMTQ4XCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5Lqt5rmW5Yy6X+mihOeul+aMh+agh+euoeeQhlwiLFwic3lzX2lkXCI6XCIxNDlcIn0se1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/kuq3muZbljLpf5oC76aKE566X5Lya6K6h5qC4566XXCIsXCJzeXNfaWRcIjpcIjE1MFwifSx7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+ebkOmDveWMul/otKLmlL/kuJPmiLfmoLjnrpfns7vnu59cIixcInN5c19pZFwiOlwiMTUxXCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf55uQ6YO95Yy6X+mdnueojuaUtuWFpeeuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIxNTJcIn0se1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/nm5Dpg73ljLpf5Zu95bqT6ZuG5Lit5pSv5LuY57O757ufXCIsXCJzeXNfaWRcIjpcIjE1M1wifSx7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+ebkOmDveWMul/mgLvpooTnrpfkvJrorqHmoLjnrpfns7vnu59cIixcInN5c19pZFwiOlwiMTU0XCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5ZON5rC05Y6/X+mDqOmXqOmihOeul+euoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIxNTVcIn0se1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/lk43msLTljr9f6LSi5pS/5LiA5L2T5YyW5L+h5oGv57O757ufXCIsXCJzeXNfaWRcIjpcIjE1NlwifSx7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+WTjeawtOWOv1/pnZ7nqI7mlLblhaXmlLbnvLTnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiMTU3XCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5ruo5rW35Y6/6LSi5pS/5LiA5L2T5YyWXCIsXCJzeXNfaWRcIjpcIjE1OFwifSx7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+mYnOWugeWOv1/otKLmlL/nrqHnkIbova/ku7ZcIixcInN5c19pZFwiOlwiMTU5XCJ9LHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf6Zic5a6B5Y6/X+i0ouaUv+euoeeQhui9r+S7tueUqOWPi1U4XCIsXCJzeXNfaWRcIjpcIjE2MFwifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+WwhOmYs+WOv1/otKLmlL/pooTnrpfmiafooYzkuIDkvZPljJbns7vnu59cIixcInN5c19pZFwiOlwiMTYxXCJ9LHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5bu65rmW5Y6/X+mdnueojuaUtue8tFwiLFwic3lzX2lkXCI6XCIxNjJcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/lu7rmuZbljr9f6LSi5pS/5LiA5L2T5YyWXCIsXCJzeXNfaWRcIjpcIjE2M1wifSx7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+W7uua5luWOv1/lm73lupPpm4bkuK3mlK/ku5hcIixcInN5c19pZFwiOlwiMTY0XCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5Lic5Y+w5biCX+mDqOmXqOmihOeul+e8luWuoeezu+e7n1wiLFwic3lzX2lkXCI6XCIxNjVcIn0se1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/kuJzlj7DluIJf6LSi5pS/5LiA5L2T5YyW5L+h5oGv57O757ufXCIsXCJzeXNfaWRcIjpcIjE2NlwifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+S4nOWPsOW4gl/otKLmlL/kuJPmiLfmoLjnrpfns7vnu59cIixcInN5c19pZFwiOlwiMTY3XCJ9LHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5Lic5Y+w5biCX+mdnueojuaUtuWFpeaUtue8tOeuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIxNjhcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/kuJzlj7DluIJf5oC76aKE566X5Lya6K6h5qC4566X57O757ufXCIsXCJzeXNfaWRcIjpcIjE2OVwifSx7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+Wkp+S4sOWMul/pg6jpl6jpooTnrpfns7vnu59cIixcInN5c19pZFwiOlwiMTcwXCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5aSn5Liw5Yy6X+i0ouaUv+S4gOS9k+WMllwiLFwic3lzX2lkXCI6XCIxNzFcIn0se1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/lpKfkuLDljLpf5oC76aKE566X5Lya6K6h5qC4566X6LSi5Yqh6L2v5Lu2XCIsXCJzeXNfaWRcIjpcIjE3MlwifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+e7j+a1juaKgOacr+W8gOWPkeWMul/pg6jpl6jpooTnrpfova/ku7ZcIixcInN5c19pZFwiOlwiMTczXCJ9LHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf57uP5rWO5oqA5pyv5byA5Y+R5Yy6X+WbveW6k+mbhuS4reaUr+S7mFwiLFwic3lzX2lkXCI6XCIxNzRcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIuiAgemdnueojuaUtuWFpeW+gee8tOezu+e7n1wiLFwic3lzX2lkXCI6XCIxNzVcIn0se1wic3lzX25hbWVcIjpcIuaJrOW3nui0ouaUv+S4gOS9k+WMluS/oeaBr+euoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIxNzZcIn0se1wic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeW+geaUtlwiLFwic3lzX2lkXCI6XCIxNzdcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIumDqOmXqOmihOeul+e8luWItlwiLFwic3lzX2lkXCI6XCIxNzhcIn0se1wic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeaUtue8tFwiLFwic3lzX2lkXCI6XCIxNzlcIn0se1wic3lzX25hbWVcIjpcIuihjOaUv+S6i+S4muaAp+WNleS9jeWbveaciei1hOS6p+euoeeQhlwiLFwic3lzX2lkXCI6XCIxODBcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIui0ouaUv+S4muWKoeezu+e7n1wiLFwic3lzX2lkXCI6XCIxODFcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+S4muWKoee7vOWQiOezu+e7n1wiLFwic3lzX2lkXCI6XCIxODJcIn0se1wic3lzX25hbWVcIjpcIuaxn+mDveW8gOWPkeWMuumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2lkXCI6XCIxODNcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMllwiLFwic3lzX2lkXCI6XCIxODRcIn0se1wic3lzX25hbWVcIjpcIuWvjOa3seWNj+mAmui0ouaUv+S4gOS9k+WMluS4muWKoeeuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIxODVcIn0se1wic3lzX25hbWVcIjpcIuWvjOa3seWNj+mAmumdnueojuaUtue8tOezu+e7n1wiLFwic3lzX2lkXCI6XCIxODZcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIuWvjOa3seWNj+mAmuW3pei1hOe7n+WPkeezu+e7n1wiLFwic3lzX2lkXCI6XCIxODdcIn0se1wic3lzX25hbWVcIjpcIumdnueojuaUtuWFpVwiLFwic3lzX2lkXCI6XCIxODhcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+e7vOWQiOS4muWKoeezu+e7n1wiLFwic3lzX2lkXCI6XCIxODlcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIuazsOW3nuW4gl/luILmnKznuqdf6YOo6Zeo6aKE566X57O757ufXCIsXCJzeXNfaWRcIjpcIjE5MFwifSx7XCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+W4guacrOe6p1/pnZ7nqI7mlLblhaXns7vnu59cIixcInN5c19pZFwiOlwiMTkxXCJ9LHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5biC5pys57qnX+e7qeaViOeuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIxOTJcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIuazsOW3nuW4gl/luILmnKznuqdf6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfaWRcIjpcIjE5M1wifSx7XCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+W4guacrOe6p1/nu7zlkIjmsrvnqI7ns7vnu59cIixcInN5c19pZFwiOlwiMTk0XCJ9LHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5rW36Zm15Yy6X+mDqOmXqOmihOeul+e8luWItuezu+e7n1wiLFwic3lzX2lkXCI6XCIxOTVcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIuazsOW3nuW4gl/mtbfpmbXljLpf5Y6/5Yy66LSi5pS/5LiA5L2T5YyWXCIsXCJzeXNfaWRcIjpcIjE5NlwifSx7XCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+mrmOa4r+WMul/pooTnrpfmiafooYzns7vnu59cIixcInN5c19pZFwiOlwiMTk3XCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5aec5aCw5Yy6X+mDqOmXqOmihOeul+ezu+e7n1wiLFwic3lzX2lkXCI6XCIxOThcIn0se1wic3lzX25hbWVcIjpcIuazsOW3nuW4gl/lp5zloLDljLpf6LSi5pS/5LiA5L2T5YyW57O757ufXCIsXCJzeXNfaWRcIjpcIjE5OVwifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+WnnOWgsOWMul/pnZ7nqI7mlLbnvLTns7vnu59cIixcInN5c19pZFwiOlwiMjAwXCJ9LHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5aec5aCw5Yy6X+mihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2lkXCI6XCIyMDFcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIuazsOW3nuW4gl/ljLvoja/pq5jmlrDljLpf6LSi5pS/5LiA5L2T5YyW57O757ufXCIsXCJzeXNfaWRcIjpcIjIwMlwifSx7XCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+WFtOWMluW4gl/pg6jpl6jpooTnrpdcIixcInN5c19pZFwiOlwiMjAzXCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5YW05YyW5biCX+mdnueojuaUtue8tFwiLFwic3lzX2lkXCI6XCIyMDRcIn0se1wic3lzX25hbWVcIjpcIuazsOW3nuW4gl/lhbTljJbluIJf5Zu95bqT6ZuG5Lit5pSv5LuYXCIsXCJzeXNfaWRcIjpcIjIwNVwifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+mdluaxn+W4gl/pooTnrpfmiafooYzns7vnu59cIixcInN5c19pZFwiOlwiMjA2XCJ9LHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf6Z2W5rGf5biCX+mdnueojuaUtuWFpeaUtue8tFwiLFwic3lzX2lkXCI6XCIyMDdcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIuazsOW3nuW4gl/pnZbmsZ/luIJf6YOo6Zeo6aKE566X57yW5a6h57O757ufXCIsXCJzeXNfaWRcIjpcIjIwOFwifSx7XCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+azsOWFtOW4gl/pg6jpl6jpooTnrpfns7vnu59cIixcInN5c19pZFwiOlwiMjA5XCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5rOw5YW05biCX+mdnueojuaUtuWFpeeuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIyMTBcIn0se1wic3lzX25hbWVcIjpcIuazsOW3nuW4gl/ms7DlhbTluIJf6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfaWRcIjpcIjIxMVwifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi6YOo6Zeo6aKE566X566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjIxMlwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW5bmz5Y+w5Y+K5Zu95bqT6ZuG5Lit5pSv5LuY57O757ufXCIsXCJzeXNfaWRcIjpcIjIxM1wifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi5paw5Lit5aSn6Z2e56iO5pS25YWl566h55CGXCIsXCJzeXNfaWRcIjpcIjIxNFwifSx7XCJzeXNfbmFtZVwiOlwi6IGU5Y+L6LSi5Yqh566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjIxNVwifSx7XCJzeXNfbmFtZVwiOlwi5Zu95bqT6ZuG5Lit5pSv5LuY44CB5oyH5qCH566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjIxNlwifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi5byA5Y+R5Yy65oC76aKE566X57O757ufXCIsXCJzeXNfaWRcIjpcIjIxN1wifSx7XCJzeXNfbmFtZVwiOlwi5Zu95bqT6LSm5Yqh57O757ufXCIsXCJzeXNfaWRcIjpcIjIxOFwifSx7XCJzeXNfbmFtZVwiOlwi5YyW5a2m5bel5Lia5Zut5Yy66Z2e56iO5pS25YWl566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjIxOVwifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl6LSm5aWXXCIsXCJzeXNfaWRcIjpcIjIyMFwifSx7XCJzeXNfbmFtZVwiOlwi5YyW5a2m5bel5Lia5Zut5Yy66aKE566X5omn6KGM57O757ufXCIsXCJzeXNfaWRcIjpcIjIyMVwifSx7XCJzeXNfbmFtZVwiOlwi5Lya6K6h5qC4566XXCIsXCJzeXNfaWRcIjpcIjIyMlwifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi5oC76aKE566X5Lya6K6h6LSmXCIsXCJzeXNfaWRcIjpcIjIyM1wifSx7XCJzeXNfbmFtZVwiOlwi6aKE566X5YaF5aSW5pS25pSv5qC4566X57O757ufXCIsXCJzeXNfaWRcIjpcIjIyNFwifSx7XCJzeXNfbmFtZVwiOlwi6LSm5oi35qC4566X57O757ufXCIsXCJzeXNfaWRcIjpcIjIyNVwifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi5oC76aKE566X5qC4566X57O757ufXCIsXCJzeXNfaWRcIjpcIjIyNlwifSx7XCJzeXNfbmFtZVwiOlwi6LSm5Yqh5aSE55CG57O757uf77yI5pS25pSv5YiG57G75pS56Z2p5Y2H57qn54mI77yJXCIsXCJzeXNfaWRcIjpcIjIyN1wifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/6aKE566X5aSW5Lia5YqhXCIsXCJzeXNfaWRcIjpcIjIyOFwifSxcblx0XHR7XCJzeXNfbmFtZVwiOlwi55So5Y+LVThSMTDotKLmlL/kuIDkvZPljJblubPlj7BcIixcInN5c19pZFwiOlwiMjI5XCJ9LHtcInN5c19uYW1lXCI6XCLlvIDlj5HljLrotKLmlL/ns7vnu59cIixcInN5c19pZFwiOlwiMjMwXCJ9LHtcInN5c19uYW1lXCI6XCLpq5jmlrDljLrmgLvpooTnrpfns7vnu59cIixcInN5c19pZFwiOlwiMjMxXCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLlvIDlj5HljLrlhazlhbHotKLmlL/mnI3liqHlubPlj7BcIixcInN5c19pZFwiOlwiMjMyXCJ9LHtcInN5c19uYW1lXCI6XCLnlKjlj4tHUlAtVTjnrqHnkIbova/ku7ZcIixcInN5c19pZFwiOlwiMjMzXCJ9LHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5Z+O5Y2X5paw5Yy6X+WbveW6k+mbhuS4reaUr+S7mOezu+e7n1wiLFwic3lzX2lkXCI6XCIyMzRcIn0sXG5cdFx0e1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/ln47ljZfmlrDljLpf5oC76aKE566X6LSm5Yqh5aSE55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjIzNVwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/6aKE566X5oyH5qCH566h55CGXCIsXCJzeXNfaWRcIjpcIjIzNlwifSx7XCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+W4guacrOe6p1/ooYzmlL/nrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiMjM3XCJ9LFxuXHRcdHtcInN5c19uYW1lXCI6XCLmlrDkuK3lpKfotKLliqHova/ku7ZcIixcInN5c19pZFwiOlwiMjM4XCJ9LHtcInN5c19uYW1lXCI6XCLlvIDlj5HljLrmlrDkuK3lpKfotKLliqHmoLjnrpfns7vnu59cIixcInN5c19pZFwiOlwiMjM5XCJ9LHtcInN5c19uYW1lXCI6XCLlvIDlj5HljLrotKbliqHns7vnu59cIixcInN5c19pZFwiOlwiMjQwXCJ9XTtcblxuXHRwdWJsaWMgdmFyIG9yaWdpbl9wbGFjZV9hcnIgPSBbe1wiY2l0eV9jb2RlXCI6XCIzMjAxXCIsXCJjaXR5XCI6XCLljZfkuqzluIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMTAwXCIsXCJzeXNfbmFtZVwiOlwi6YOo6Zeo6aKE566XXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDFcIixcImNpdHlcIjpcIuWNl+S6rOW4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjAxMDBcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaXmlLbnvLTnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDEwMFwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAxXCIsXCJjaXR5XCI6XCLljZfkuqzluIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMTAwXCIsXCJzeXNfbmFtZVwiOlwi6LWE5Lqn566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiWkNHTFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDFcIixcImNpdHlcIjpcIuWNl+S6rOW4glwiLFwiY291bnR5XCI6XCLnjoTmrabljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAxMDJcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIuenpua3ruWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDEwNFwiLFwic3lzX25hbWVcIjpcIueUqOWPi+i0ouaUv+e7vOWQiOeuoeeQhuS/oeaBr+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDFcIixcImNpdHlcIjpcIuWNl+S6rOW4glwiLFwiY291bnR5XCI6XCLlu7rpgrrljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAxMDVcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIum8k+alvOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDEwNlwiLFwic3lzX25hbWVcIjpcIueUqOWPi0ErK1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDFcIixcImNpdHlcIjpcIuWNl+S6rOW4glwiLFwiY291bnR5XCI6XCLmtablj6PljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAxMTFcIixcInN5c19uYW1lXCI6XCLmtablj6PotKLmlL/kuIDkvZPljJZcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAxXCIsXCJjaXR5XCI6XCLljZfkuqzluIJcIixcImNvdW50eVwiOlwi5qCW6Zye5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMTEzXCIsXCJzeXNfbmFtZVwiOlwi5qCW6Zye5Yy66LSi5pS/5Lia5Yqh5L+h5oGv566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIumbqOiKseWPsOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDExNFwiLFwic3lzX25hbWVcIjpcIuS4gOS9k+WMluezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDFcIixcImNpdHlcIjpcIuWNl+S6rOW4glwiLFwiY291bnR5XCI6XCLmsZ/lroHljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAxMTVcIixcInN5c19uYW1lXCI6XCLotKLmlL/nrqHnkIbkuIDkvZPljJbns7vnu59cIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAxXCIsXCJjaXR5XCI6XCLljZfkuqzluIJcIixcImNvdW50eVwiOlwi5rGf5a6B5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMTE1XCIsXCJzeXNfbmFtZVwiOlwi5ruo5rGf5byA5Y+R5Yy66LSi5pS/5YiG5bGAXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIuaxn+WugeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDExNVwiLFwic3lzX25hbWVcIjpcIuaxn+Wugee7j+a1juaKgOacr+W8gOWPkeWMuui0ouaUv+WIhuWxgFwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDFcIixcImNpdHlcIjpcIuWNl+S6rOW4glwiLFwiY291bnR5XCI6XCLmsZ/lroHljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAxMTVcIixcInN5c19uYW1lXCI6XCLmsZ/lroHnp5Hlrablm63otKLmlL/liIblsYBcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAxXCIsXCJjaXR5XCI6XCLljZfkuqzluIJcIixcImNvdW50eVwiOlwi5YWt5ZCI5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMTE2XCIsXCJzeXNfbmFtZVwiOlwi5LiA5L2T5YyW57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIumrmOa3s+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDExOFwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMluezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDFcIixcImNpdHlcIjpcIuWNl+S6rOW4glwiLFwiY291bnR5XCI6XCLmuqfmsLTljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAxMjRcIixcInN5c19uYW1lXCI6XCJBKyvotKLmlL/kuIDkvZPljJblubPlj7BcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjAwXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMlwiLFwiY2l0eVwiOlwi5peg6ZSh5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDIwMFwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeaUtue8tOeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi5bSH5a6J5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjAyXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDJcIixcImNpdHlcIjpcIuaXoOmUoeW4glwiLFwiY291bnR5XCI6XCLltIflronljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAyMDJcIixcInN5c19uYW1lXCI6XCLkuIDkvZPljJbpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi5Y2X6ZW/5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjAzXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDJcIixcImNpdHlcIjpcIuaXoOmUoeW4glwiLFwiY291bnR5XCI6XCLljZfplb/ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAyMDNcIixcInN5c19uYW1lXCI6XCLkuIDkvZPljJZcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi5YyX5aGY5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjA0XCIsXCJzeXNfbmFtZVwiOlwi5Zu95bqT6ZuG5Lit5pSv5LuY566h55CG5L+h5oGv57O757ufXCIsXCJzeXNfY29kZVwiOlwiR0taRlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDJcIixcImNpdHlcIjpcIuaXoOmUoeW4glwiLFwiY291bnR5XCI6XCLplKHlsbHljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAyMDVcIixcInN5c19uYW1lXCI6XCLlm73lupPpm4bkuK3mlK/ku5hcIixcInN5c19jb2RlXCI6XCJHS1pGXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMlwiLFwiY2l0eVwiOlwi5peg6ZSh5biCXCIsXCJjb3VudHlcIjpcIumUoeWxseWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDIwNVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4k+aIt+aguOeul+WPiumdnueojuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlpISFNfRlNTUlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDJcIixcImNpdHlcIjpcIuaXoOmUoeW4glwiLFwiY291bnR5XCI6XCLmg6DlsbHljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAyMDZcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbns7vnu59cIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi5ruo5rmW5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjExXCIsXCJzeXNfbmFtZVwiOlwi6ZuG5Lit5pSv5LuY57O757ufXCIsXCJzeXNfY29kZVwiOlwiR0taRlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDJcIixcImNpdHlcIjpcIuaXoOmUoeW4glwiLFwiY291bnR5XCI6XCLmu6jmuZbljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAyMTFcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7ns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMlwiLFwiY2l0eVwiOlwi5peg6ZSh5biCXCIsXCJjb3VudHlcIjpcIua7qOa5luWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDIxMVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4k+aIt+aguOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlpISFNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi5paw5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjE0XCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDJcIixcImNpdHlcIjpcIuaXoOmUoeW4glwiLFwiY291bnR5XCI6XCLmlrDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAyMTRcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLbnvLTns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMlwiLFwiY2l0eVwiOlwi5peg6ZSh5biCXCIsXCJjb3VudHlcIjpcIuaWsOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDIxNFwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4k+aIt+aguOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlpISFNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi5rGf6Zi05biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjgxXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW5bmz5Y+wXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMlwiLFwiY2l0eVwiOlwi5peg6ZSh5biCXCIsXCJjb3VudHlcIjpcIuWunOWFtOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDI4MlwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtue8tOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi5a6c5YW05biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjgyXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW5bmz5Y+wXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwM1wiLFwiY2l0eVwiOlwi5b6Q5bee5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDMwMFwiLFwic3lzX25hbWVcIjpcIuWvjOa3semihOeul+aJp+ihjFwiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAzXCIsXCJjaXR5XCI6XCLlvpDlt57luIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMzAwXCIsXCJzeXNfbmFtZVwiOlwi55So5Y+L6Z2e56iO5Y+K56Wo5o2uXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDNcIixcImNpdHlcIjpcIuW+kOW3nuW4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjAzMDBcIixcInN5c19uYW1lXCI6XCLnlKjlj4vpooTnrpfmiafooYxcIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwM1wiLFwiY2l0eVwiOlwi5b6Q5bee5biCXCIsXCJjb3VudHlcIjpcIum8k+alvOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDMwMlwiLFwic3lzX25hbWVcIjpcIuaxn+iLj+ecgei0ouaUv+mihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAzXCIsXCJjaXR5XCI6XCLlvpDlt57luIJcIixcImNvdW50eVwiOlwi6byT5qW85Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMzAyXCIsXCJzeXNfbmFtZVwiOlwi55So5Y+L6YCa55So6L2v5Lu2XCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDNcIixcImNpdHlcIjpcIuW+kOW3nuW4glwiLFwiY291bnR5XCI6XCLkupHpvpnljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAzMDNcIixcInN5c19uYW1lXCI6XCLmsZ/oi4/nnIHotKLmlL/pooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwM1wiLFwiY2l0eVwiOlwi5b6Q5bee5biCXCIsXCJjb3VudHlcIjpcIuS6kem+meWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDMwM1wiLFwic3lzX25hbWVcIjpcIuiBlOWPi+i9r+S7ti/pgJrnlKjotKLliqFcIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwM1wiLFwiY2l0eVwiOlwi5b6Q5bee5biCXCIsXCJjb3VudHlcIjpcIuS6kem+meWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDMwM1wiLFwic3lzX25hbWVcIjpcIueUqOWPi0dSUEctVThSMTDotKLmlL/nrqHnkIbova/ku7ZcIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwM1wiLFwiY2l0eVwiOlwi5b6Q5bee5biCXCIsXCJjb3VudHlcIjpcIui0vuaxquWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDMwNVwiLFwic3lzX25hbWVcIjpcIueUqOWPi0dQUC1SMTDotKLmlL/nrqHnkIbova/ku7ZcIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwM1wiLFwiY2l0eVwiOlwi5b6Q5bee5biCXCIsXCJjb3VudHlcIjpcIuazieWxseWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDMxMVwiLFwic3lzX25hbWVcIjpcIuWvjOa3seWNj+mAmui0ouaUv+S4gOS9k+WMlueuoeeQhuS/oeaBr+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDNcIixcImNpdHlcIjpcIuW+kOW3nuW4glwiLFwiY291bnR5XCI6XCLpk5zlsbHljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAzMTJcIixcInN5c19uYW1lXCI6XCLotKLliqHnu5/kuIDmoLjnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwM1wiLFwiY2l0eVwiOlwi5b6Q5bee5biCXCIsXCJjb3VudHlcIjpcIumTnOWxseWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDMxMlwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeaUtue8tOeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAzXCIsXCJjaXR5XCI6XCLlvpDlt57luIJcIixcImNvdW50eVwiOlwi6ZOc5bGx5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMzEyXCIsXCJzeXNfbmFtZVwiOlwi5YWs5YWx6LSi5pS/566h55CG6L2v5Lu2XCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDNcIixcImNpdHlcIjpcIuW+kOW3nuW4glwiLFwiY291bnR5XCI6XCLkuLDljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjAzMjFcIixcInN5c19uYW1lXCI6XCJBKyvotKLmlL/kuIDkvZPljJbkv6Hmga/lubPlj7BcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAzXCIsXCJjaXR5XCI6XCLlvpDlt57luIJcIixcImNvdW50eVwiOlwi5Liw5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMzIxXCIsXCJzeXNfbmFtZVwiOlwi5paw5Lit5aSn5YWs5YWx6LSi5Yqh566h55CG6L2v5Lu2XCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDNcIixcImNpdHlcIjpcIuW+kOW3nuW4glwiLFwiY291bnR5XCI6XCLmspvljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjAzMjJcIixcInN5c19uYW1lXCI6XCLlr4zmt7HotKLmlL/kuIDkvZPljJbnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAzXCIsXCJjaXR5XCI6XCLlvpDlt57luIJcIixcImNvdW50eVwiOlwi5rKb5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMzIyXCIsXCJzeXNfbmFtZVwiOlwi5paw5Lit5aSn5YWs5YWx6LSi5pS/566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDNcIixcImNpdHlcIjpcIuW+kOW3nuW4glwiLFwiY291bnR5XCI6XCLnnaLlroHljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjAzMjRcIixcInN5c19uYW1lXCI6XCLlr4zmt7HljY/pgJrotKLmlL/kuIDkvZPljJbkuJrliqHnrqHnkIbns7vnu5/ova/ku7ZcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAzXCIsXCJjaXR5XCI6XCLlvpDlt57luIJcIixcImNvdW50eVwiOlwi552i5a6B5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMzI0XCIsXCJzeXNfbmFtZVwiOlwi5paw5Lit5aSn5YWs5YWx6LSi5pS/566h55CG6L2v5Lu2R3NvZnRcIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwM1wiLFwiY2l0eVwiOlwi5b6Q5bee5biCXCIsXCJjb3VudHlcIjpcIuaWsOayguW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDM4MVwiLFwic3lzX25hbWVcIjpcIuaxn+iLj+ecgei0ouaUv+mihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAzXCIsXCJjaXR5XCI6XCLlvpDlt57luIJcIixcImNvdW50eVwiOlwi6YKz5beeXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMzgyXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIuacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQwMFwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMluS4muWKoeezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLlpKnlroHljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0MDJcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbova/ku7ZcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi5aSp5a6B5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDAyXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLlpKnlroHljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0MDJcIixcInN5c19uYW1lXCI6XCLmgLvpooTnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIumSn+alvOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQwNFwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi6ZKf5qW85Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDA0XCIsXCJzeXNfbmFtZVwiOlwi5Zu95bqT6ZuG5Lit5pSv5LuY57O757ufXCIsXCJzeXNfY29kZVwiOlwiR0taRlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLpkp/mpbzljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0MDRcIixcInN5c19uYW1lXCI6XCLnlKjmrL7orqHliJLns7vnu59cIixcInN5c19jb2RlXCI6XCJKSEdMXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIumSn+alvOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQwNFwiLFwic3lzX25hbWVcIjpcIuaMh+agh+euoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlpCR0xcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi6ZKf5qW85Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDA0XCIsXCJzeXNfbmFtZVwiOlwi5oC76aKE566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiWllTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIuaWsOWMl+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQxMVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+e7vOWQiOS4muWKoeeuoeeQhuW5s+WPsFwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLmrabov5vljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0MTJcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbnrqHnkIbkv6Hmga/ns7vnu59cIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi5rqn6Ziz5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDgxXCIsXCJzeXNfbmFtZVwiOlwi6YOo6Zeo6aKE566XXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLmuqfpmLPluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0ODFcIixcInN5c19uYW1lXCI6XCLlt6XotYTnu5/lj5FcIixcInN5c19jb2RlXCI6XCJHWlRGXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIua6p+mYs+W4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQ4MVwiLFwic3lzX25hbWVcIjpcIuWbveaciei1hOS6p1wiLFwic3lzX2NvZGVcIjpcIlpDR0xcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi5rqn6Ziz5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDgxXCIsXCJzeXNfbmFtZVwiOlwi5Lmh6ZWH6Z2e56iO5pS25YWlXCIsXCJzeXNfY29kZVwiOlwiWFpGU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLmuqfpmLPluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0ODFcIixcInN5c19uYW1lXCI6XCLkuaHplYfpm4bkuK3mlK/ku5hcIixcInN5c19jb2RlXCI6XCJYWkdLXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIumHkeWdm+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQ4MlwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTAwXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5b6B57y057O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1MDBcIixcInN5c19uYW1lXCI6XCLpooTnrpfnvJbliLbkuI7miafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuW3peS4muWbreWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDUwMVwiLFwic3lzX25hbWVcIjpcIumihOeul+euoeeQhue7vOWQiOS4muWKoeW5s+WPsFwiLFwic3lzX2NvZGVcIjpcIllTR0xcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi6JmO5LiY5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTA1XCIsXCJzeXNfbmFtZVwiOlwidTjnrqHnkIbova/ku7ZcIixcInN5c19jb2RlXCI6XCJDWkdMXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuiZjuS4mOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDUwNVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+aMh+agh+euoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlpCR0xcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi6JmO5LiY5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTA1XCIsXCJzeXNfbmFtZVwiOlwi5Zu95bqT6ZuG5Lit5pSv5LuY57O757ufXCIsXCJzeXNfY29kZVwiOlwiR0taRlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLomY7kuJjljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1MDVcIixcInN5c19uYW1lXCI6XCLnlKjlj4tHUlAtUjnotKLliqHnrqHnkIbova/ku7ZcIixcInN5c19jb2RlXCI6XCJDV0dMXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuiZjuS4mOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDUwNVwiLFwic3lzX25hbWVcIjpcIueUqOWPi0dSUC1VOOi0ouaUv+euoeeQhui9r+S7tlwiLFwic3lzX2NvZGVcIjpcIkNXR0xcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi6JmO5LiY5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTA1XCIsXCJzeXNfbmFtZVwiOlwi6LSm5Yqh5aSE55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiWldDTFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLlkLTkuK3ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1MDZcIixcInN5c19uYW1lXCI6XCJSOWnotKLmlL/nrqHnkIbova/ku7ZcIixcInN5c19jb2RlXCI6XCJDWkdMXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuWQtOS4reWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDUwNlwiLFwic3lzX25hbWVcIjpcIumDqOmXqOmihOeul1wiLFwic3lzX2NvZGVcIjpcIkJNWVNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi5ZC05Lit5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTA2XCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW5bmz5Y+wXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuWQtOS4reWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDUwNlwiLFwic3lzX25hbWVcIjpcIumdnueojuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi55u45Z+O5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTA3XCIsXCJzeXNfbmFtZVwiOlwidTjotKLmlL/nrqHnkIbova/ku7ZcIixcInN5c19jb2RlXCI6XCJDWkdMXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuebuOWfjuWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDUwN1wiLFwic3lzX25hbWVcIjpcIuebuOWfjuWMuui0ouaUv+e7vOWQiOeuoeeQhuS/oeaBr+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLlp5Hoi4/ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1MDhcIixcInN5c19uYW1lXCI6XCLotKLmlL/pnZ7nqI7nu7zlkIjnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuWnkeiLj+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDUwOFwiLFwic3lzX25hbWVcIjpcIui0ouaUv+e7vOWQiOeuoeeQhuW5s+WPsFwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLlkLTmsZ/ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1MDlcIixcInN5c19uYW1lXCI6XCLlkLTmsZ/ljLrotKLmlL/kuIDkvZPljJZcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi5bi454af5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTgxXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl5pS257y0566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLluLjnhp/luIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1ODFcIixcInN5c19uYW1lXCI6XCLnlKjlj4tSOVwiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi5bi454af5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTgxXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLlvKDlrrbmuK/luIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1ODJcIixcInN5c19uYW1lXCI6XCLotKLmlL/lhazlhbHlupTnlKjmnI3liqHlubPlj7BcIixcInN5c19jb2RlXCI6XCJHR0ZXXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuW8oOWutua4r+W4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDU4MlwiLFwic3lzX25hbWVcIjpcIumHkeidtksvM+WIm+aWsOeuoeeQhuW5s+WPsFwiLFwic3lzX2NvZGVcIjpcIkNaR0xcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi5byg5a625riv5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTgyXCIsXCJzeXNfbmFtZVwiOlwi6LSm5Yqh5pWw5o2u57O757ufXCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLmmIblsbHluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1ODNcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaXmlLbnvLTnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuaYhuWxseW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDU4M1wiLFwic3lzX25hbWVcIjpcIuWFrOWFsei0ouaUv+acjeWKoeW5s+WPsFwiLFwic3lzX2NvZGVcIjpcIkdHRldcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi5piG5bGx5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTgzXCIsXCJzeXNfbmFtZVwiOlwi5Zu95bqT6ZuG5Lit5pSv5LuY57O757ufXCIsXCJzeXNfY29kZVwiOlwiR0taRlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLlpKrku5PluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1ODVcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaXns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuWkquS7k+W4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDU4NVwiLFwic3lzX25hbWVcIjpcIuS8muiuoeaguOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi5aSq5LuT5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTg1XCIsXCJzeXNfbmFtZVwiOlwi6aG555uu5bqTXCIsXCJzeXNfY29kZVwiOlwiWE1LXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuWkquS7k+W4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDU4NVwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjAwXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLltIflt53ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2MDJcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIua4r+mXuOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDYxMVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+aAu+mihOeul++8iOWklu+8ieS4k+aIt+euoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTV1pIXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIua4r+mXuOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDYxMVwiLFwic3lzX25hbWVcIjpcIuWfjuW7uui1hOmHkeS4k+aIt+euoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkNKWkhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5riv6Ze45Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjExXCIsXCJzeXNfbmFtZVwiOlwi5Yac5L+d5LiT5oi3566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiTkJaSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLmuK/pl7jljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2MTFcIixcInN5c19uYW1lXCI6XCLlhpzkuJrlj5HlsZXln7rph5HkuJPmiLfnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJORkpKXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIua4r+mXuOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDYxMVwiLFwic3lzX25hbWVcIjpcIuWkseWcsOWGnOawkeS/nemanOi1hOmHkeS4k+aIt1wiLFwic3lzX2NvZGVcIjpcIlNETk1cIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5riv6Ze45Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjExXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLpgJrlt57ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2MTJcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaXlvoHnrqHns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIumAmuW3nuWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDYxMlwiLFwic3lzX25hbWVcIjpcIuW3pei1hOe7n+WPkeS6uuWRmOS/oeaBr1wiLFwic3lzX2NvZGVcIjpcIkdaVEZcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi6YCa5bee5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjEyXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5oyH5qCHLeWbveW6k+mbhuS4reaUr+S7mOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi6YCa5bee5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjEyXCIsXCJzeXNfbmFtZVwiOlwi5oC76aKE566X5Lya6K6h5qC4566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLmtbflronljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA2MjFcIixcInN5c19uYW1lXCI6XCLpg6jpl6jpooTnrpfnvJblrqHns7vnu59cIixcInN5c19jb2RlXCI6XCJCTVlTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIua1t+WuieWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDYyMVwiLFwic3lzX25hbWVcIjpcIuWFrOWKoea2iOi0ueeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkdXWEZcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5rW35a6J5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjIxXCIsXCJzeXNfbmFtZVwiOlwi5Zu95pyJ6LWE5Lqn566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiWkNHTFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLmtbflronljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA2MjFcIixcInN5c19uYW1lXCI6XCLljLrplYfotKLmlL/nrqHnkIbigJzkuIDkvZPljJbigJ3ns7vnu59cIixcInN5c19jb2RlXCI6XCJYWllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLmtbflronljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA2MjFcIixcInN5c19uYW1lXCI6XCLljr/mnKznuqfotKLmlL/nrqHnkIbigJzkuIDkvZPljJbigJ3ns7vnu59cIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5aaC5Lic5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjIzXCIsXCJzeXNfbmFtZVwiOlwi55So5Y+L5pS/5YqhXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIuWQr+S4nOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDY4MVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4k+aIt+aguOeul++8iOihjOaUv+WPo+S4k+mhuei1hOmHke+8iVwiLFwic3lzX2NvZGVcIjpcIlpIWFpcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5ZCv5Lic5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjgxXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiT5oi35qC4566X77yI57uP5bu65Y+j5LiT6aG56LWE6YeR77yJXCIsXCJzeXNfY29kZVwiOlwiWkhKSlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLlkK/kuJzluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2ODFcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuJPmiLfmoLjnrpfvvIjlhpzkuJrkv53pmankuJPotKbvvIlcIixcInN5c19jb2RlXCI6XCJaSE5CXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIuWQr+S4nOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDY4MVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4k+aIt+aguOeul++8iOWGnOS4mue7vOWQiOW8gOWPkeS4k+i0pu+8iVwiLFwic3lzX2NvZGVcIjpcIlpITkZcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5ZCv5Lic5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjgxXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiT5oi35qC4566X77yI56S+5L+d6LWE6YeR5LiT6LSm77yJXCIsXCJzeXNfY29kZVwiOlwiWkhTQlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLlkK/kuJzluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2ODFcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuJPmiLfmoLjnrpfvvIjlnJ/lnLDlh7rorqnkuJPotKbvvIlcIixcInN5c19jb2RlXCI6XCJaSFREXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIuWQr+S4nOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDY4MVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4k+aIt+aguOeul++8iOe7vOWQiOWPo+S4k+mhuei1hOmHke+8iVwiLFwic3lzX2NvZGVcIjpcIlpIWkhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5ZCv5Lic5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjgxXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLlkK/kuJzluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2ODFcIixcInN5c19uYW1lXCI6XCLlhpzkuJrkuJPlkJHlj4rlhpzkuJrlj5HlsZXln7rph5HkuJPpoblcIixcInN5c19jb2RlXCI6XCJORlpYXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIuWQr+S4nOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDY4MVwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5ZCv5Lic5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjgxXCIsXCJzeXNfbmFtZVwiOlwi5oC76aKE566X5Lya6K6h5qC4566XXCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLlpoLnmovluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2ODJcIixcInN5c19uYW1lXCI6XCLph5HotKLlt6XnqIvkuIDkvZPljJbmlK/mkpHlubPlj7BcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5rW36Zeo5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjg0XCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS257y0XCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLmtbfpl6jluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2ODRcIixcInN5c19uYW1lXCI6XCLlrabmoKHpooTnrpfmiafooYxcIixcInN5c19jb2RlXCI6XCJZU1pYWFhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5rW36Zeo5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjg0XCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGMXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLmtbfpl6jluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2ODRcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIua1t+mXqOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDY4NFwiLFwic3lzX25hbWVcIjpcIuS4k+mhuei1hOmHkVwiLFwic3lzX2NvZGVcIjpcIlpYWkpcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5rW36Zeo5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjg0XCIsXCJzeXNfbmFtZVwiOlwi5oC76aKE566XXCIsXCJzeXNfY29kZVwiOlwiWllTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwN1wiLFwiY2l0eVwiOlwi6L+e5LqR5riv5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDcwMFwiLFwic3lzX25hbWVcIjpcIumDqOmXqOmihOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkJNWVNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA3XCIsXCJjaXR5XCI6XCLov57kupHmuK/luIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNzAwXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiT5oi35qC4566XXCIsXCJzeXNfY29kZVwiOlwiWkhIU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDdcIixcImNpdHlcIjpcIui/nuS6kea4r+W4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjA3MDBcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaXns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwN1wiLFwiY2l0eVwiOlwi6L+e5LqR5riv5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDcwMFwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA3XCIsXCJjaXR5XCI6XCLov57kupHmuK/luIJcIixcImNvdW50eVwiOlwi6L+e5LqR5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNzAzXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiT5oi36LSm5Yqh57O757ufXCIsXCJzeXNfY29kZVwiOlwiWkhIU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDdcIixcImNpdHlcIjpcIui/nuS6kea4r+W4glwiLFwiY291bnR5XCI6XCLov57kupHljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA3MDNcIixcInN5c19uYW1lXCI6XCLlr4zmt7HotKLmlL/kuIDkvZPljJbnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA3XCIsXCJjaXR5XCI6XCLov57kupHmuK/luIJcIixcImNvdW50eVwiOlwi5rW35bee5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNzA2XCIsXCJzeXNfbmFtZVwiOlwi5a+M5rex6LSi5pS/5LiA5L2T5YyW5Lia5Yqh566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwN1wiLFwiY2l0eVwiOlwi6L+e5LqR5riv5biCXCIsXCJjb3VudHlcIjpcIua1t+W3nuWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDcwNlwiLFwic3lzX25hbWVcIjpcIuaWsOS4reWkp+WFrOWFsei0ouaUv+euoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDdcIixcImNpdHlcIjpcIui/nuS6kea4r+W4glwiLFwiY291bnR5XCI6XCLotaPmpobljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA3MjFcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJblubPlj7BcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA3XCIsXCJjaXR5XCI6XCLov57kupHmuK/luIJcIixcImNvdW50eVwiOlwi6LWj5qaG5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNzIxXCIsXCJzeXNfbmFtZVwiOlwi5Zu95pyJ6LWE5Lqn57O757ufXCIsXCJzeXNfY29kZVwiOlwiQ1pHTFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDdcIixcImNpdHlcIjpcIui/nuS6kea4r+W4glwiLFwiY291bnR5XCI6XCLkuJzmtbfljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA3MjJcIixcInN5c19uYW1lXCI6XCLpg6jpl6jpooTnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJCTVlTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwN1wiLFwiY2l0eVwiOlwi6L+e5LqR5riv5biCXCIsXCJjb3VudHlcIjpcIuS4nOa1t+WOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDcyMlwiLFwic3lzX25hbWVcIjpcIuWbveW6k+S4k+mhuei1hOmHkeeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlpYWkpcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA3XCIsXCJjaXR5XCI6XCLov57kupHmuK/luIJcIixcImNvdW50eVwiOlwi5Lic5rW35Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNzIyXCIsXCJzeXNfbmFtZVwiOlwi5Zu95pyJ6LWE5Lqn566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiWkNHTFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDdcIixcImNpdHlcIjpcIui/nuS6kea4r+W4glwiLFwiY291bnR5XCI6XCLkuJzmtbfljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA3MjJcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwN1wiLFwiY2l0eVwiOlwi6L+e5LqR5riv5biCXCIsXCJjb3VudHlcIjpcIueBjOS6keWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDcyM1wiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMluW5s+WPsFwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDdcIixcImNpdHlcIjpcIui/nuS6kea4r+W4glwiLFwiY291bnR5XCI6XCLngYzljZfljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA3MjRcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7ns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwN1wiLFwiY2l0eVwiOlwi6L+e5LqR5riv5biCXCIsXCJjb3VudHlcIjpcIueBjOWNl+WOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDcyNFwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODAwXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS257y0566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDBcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua4heays+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwMlwiLFwic3lzX25hbWVcIjpcIui0ouaUv+euoeeQhuezu+e7n++8iOaWsOWGnOS/ne+8iVwiLFwic3lzX2NvZGVcIjpcIlpITkJcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5riF5rKz5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODAyXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/566h55CG57O757uf77yI5Z+O5biC5bGF5rCR5Yy755aX57uf562577yJXCIsXCJzeXNfY29kZVwiOlwiWkhZQlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmuIXmsrPljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDJcIixcInN5c19uYW1lXCI6XCLotKLmlL/nrqHnkIbns7vnu5/vvIjpm4bkuK3mlK/ku5jkuK3lv4PvvIlcIixcInN5c19jb2RlXCI6XCJHS1pGXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua4heays+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwMlwiLFwic3lzX25hbWVcIjpcIui0ouaUv+euoeeQhuezu+e7n++8iOino+WbsOmHke+8iVwiLFwic3lzX2NvZGVcIjpcIlpISktcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5riF5rKz5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODAyXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/566h55CG57O757uf77yI5pen5Z+O5pS56YCg77yJXCIsXCJzeXNfY29kZVwiOlwiWkhDR1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmuIXmsrPljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDJcIixcInN5c19uYW1lXCI6XCLotKLmlL/nrqHnkIbns7vnu5/vvIjnpL7kv53otYTph5HotKbmiLfvvIlcIixcInN5c19jb2RlXCI6XCJaSFNCXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua4heays+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwMlwiLFwic3lzX25hbWVcIjpcIui0ouaUv+euoeeQhuezu+e7n++8iOWcn+WcsOWHuuiuqeS4k+W4kO+8iVwiLFwic3lzX2NvZGVcIjpcIlpIVERcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5riF5rKz5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODAyXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/566h55CG57O757uf77yI6aKE5ouo5Y+K6Z2e6ZuG5Lit5pSv5LuY5Lit5b+D77yJXCIsXCJzeXNfY29kZVwiOlwiWkhZQlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmuIXmsrPljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDJcIixcInN5c19uYW1lXCI6XCLotKLmlL/nrqHnkIbns7vnu5/vvIjpooTnrpflpJbotYTph5HvvIlcIixcInN5c19jb2RlXCI6XCJZU1dcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5riF5rKz5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODAyXCIsXCJzeXNfbmFtZVwiOlwi5oC76aKE566X5Lya6K6hXCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmt67lronljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDNcIixcInN5c19uYW1lXCI6XCLotKLliqHmoLjnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua3ruWuieWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwM1wiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5reu5a6J5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODAzXCIsXCJzeXNfbmFtZVwiOlwi5bel6LWE57uf5Y+R57O757ufXCIsXCJzeXNfY29kZVwiOlwiR1pURlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmt67lronljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDNcIixcInN5c19uYW1lXCI6XCLnlKjlj4vmlL/liqFcIixcInN5c19jb2RlXCI6XCJZWVpXXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua3ruWuieWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwM1wiLFwic3lzX25hbWVcIjpcIumihOeul+e8luWuoeezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkJNWVNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5reu5a6J5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODAzXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNHTFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmt67lronljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDNcIixcInN5c19uYW1lXCI6XCLpooTnrpflpJbotYTph5HvvIjku47ogZTnvZHlrqHorqHkuK3lj5bmlbDvvIlcIixcInN5c19jb2RlXCI6XCJZU1dcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5reu5a6J5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODAzXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X57yW5a6h57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNCU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmt67pmLTljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDRcIixcInN5c19uYW1lXCI6XCJHNi1F6LSi5Yqh566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiQ1dHTFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmt67pmLTljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDRcIixcInN5c19uYW1lXCI6XCLmsZ/oi4/nnIHotKLmlL/pooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua3rumYtOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwNFwiLFwic3lzX25hbWVcIjpcIuaWsOS4reWkp+WFrOWFsei0ouaUv+euoeeQhui9r+S7tlwiLFwic3lzX2NvZGVcIjpcIkNaR0xcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5reu6Zi05Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODA0XCIsXCJzeXNfbmFtZVwiOlwi55So5Y+LR1JQL1I56LSi5pS/566h55CG6L2v5Lu2XCIsXCJzeXNfY29kZVwiOlwiQ1pHTFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmt67pmLTljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDRcIixcInN5c19uYW1lXCI6XCLnlKjlj4tHUlAtVThSMTBcIixcInN5c19jb2RlXCI6XCJDV0dMXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua3ruWuieWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwM1wiLFwic3lzX25hbWVcIjpcIumihOeul+e8luWuoeezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTQlNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5riF5rWm5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODExXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW566h55CG57O757uf77yI5Z+65bu65oi377yJXCIsXCJzeXNfY29kZVwiOlwiWkhKSlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmuIXmtabljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MTFcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbnrqHnkIbns7vnu5/vvIjpm4bkuK3mlK/ku5jkuK3lv4PvvIlcIixcInN5c19jb2RlXCI6XCJHS1pGXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua4hea1puWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgxMVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMlueuoeeQhuezu+e7n++8iOWGnOS4mue7vOWQiOW8gOWPke+8iVwiLFwic3lzX2NvZGVcIjpcIlpITkZcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5riF5rWm5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODExXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW566h55CG57O757uf77yI6aKE566X5aSW6LWE6YeR77yJXCIsXCJzeXNfY29kZVwiOlwiWVNXXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua4hea1puWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgxMVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMlueuoeeQhuezu+e7n++8iOaUr+WGnOS4k+aIt++8iVwiLFwic3lzX2NvZGVcIjpcIlpIWk5cIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5riF5rWm5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODExXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW566h55CG57O757uf77yI5oC76aKE566X77yJXCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmtp/msLTljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MjZcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7lvoHnvLTns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua2n+awtOWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgyNlwiLFwic3lzX25hbWVcIjpcIuWbvei1hOeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlpDR0xcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5raf5rC05Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODI2XCIsXCJzeXNfbmFtZVwiOlwi5Lmh6LSi5Y6/566h57O757ufXCIsXCJzeXNfY29kZVwiOlwiWENYR1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmtp/msLTljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MjZcIixcInN5c19uYW1lXCI6XCLkuaHotKLljr/nrqHns7vnu59cIixcInN5c19jb2RlXCI6XCJYQ1hHXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua2n+awtOWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgyNlwiLFwic3lzX25hbWVcIjpcIumihOeul+e8luWItueuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTQlNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5raf5rC05Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODI2XCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmtKrms73ljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MjlcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaXnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua0quazveWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgyOVwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi55ux55yZ5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODMwXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW5bmz5Y+wXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIumHkea5luWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgzMVwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTAwXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+W4guacrOe6p1/pg6jpl6jpooTnrpdcIixcInN5c19jb2RlXCI6XCJCTVlTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkwMFwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/luILmnKznuqdf6Z2e56iO5pS2566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDlcIixcImNpdHlcIjpcIuebkOWfjuW4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjA5MDBcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5biC5pys57qnX+mihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5Lqt5rmW5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTAyXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+S6rea5luWMul/otKLmlL/kuJPmiLdcIixcInN5c19jb2RlXCI6XCJaSEhTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuS6rea5luWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkwMlwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/kuq3muZbljLpf6Z2e56iO5pS25YWl566h55CGXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDlcIixcImNpdHlcIjpcIuebkOWfjuW4glwiLFwiY291bnR5XCI6XCLkuq3muZbljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA5MDJcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5Lqt5rmW5Yy6X+WbveW6k+mbhuS4reaUr+S7mOeuoeeQhlwiLFwic3lzX2NvZGVcIjpcIkdLWkZcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5Lqt5rmW5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTAyXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+S6rea5luWMul/pooTnrpfmjIfmoIfnrqHnkIZcIixcInN5c19jb2RlXCI6XCJaQkdMXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuS6rea5luWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkwMlwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/kuq3muZbljLpf5oC76aKE566X5Lya6K6h5qC4566XXCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDlcIixcImNpdHlcIjpcIuebkOWfjuW4glwiLFwiY291bnR5XCI6XCLnm5Dpg73ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA5MDNcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf55uQ6YO95Yy6X+i0ouaUv+S4k+aIt+aguOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlpISFNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi55uQ6YO95Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTAzXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+ebkOmDveWMul/pnZ7nqI7mlLblhaXnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuebkOmDveWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkwM1wiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/nm5Dpg73ljLpf5Zu95bqT6ZuG5Lit5pSv5LuY57O757ufXCIsXCJzeXNfY29kZVwiOlwiR0taRlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDlcIixcImNpdHlcIjpcIuebkOWfjuW4glwiLFwiY291bnR5XCI6XCLnm5Dpg73ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA5MDNcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf55uQ6YO95Yy6X+aAu+mihOeul+S8muiuoeaguOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5ZON5rC05Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTIxXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+WTjeawtOWOv1/pg6jpl6jpooTnrpfnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJCTVlTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuWTjeawtOWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkyMVwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/lk43msLTljr9f6LSi5pS/5LiA5L2T5YyW5L+h5oGv57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuWTjeawtOWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkyMVwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/lk43msLTljr9f6Z2e56iO5pS25YWl5pS257y0566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDlcIixcImNpdHlcIjpcIuebkOWfjuW4glwiLFwiY291bnR5XCI6XCLmu6jmtbfljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA5MjJcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5ruo5rW35Y6/6LSi5pS/5LiA5L2T5YyWXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIumYnOWugeWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkyM1wiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/pmJzlroHljr9f6LSi5pS/566h55CG6L2v5Lu2XCIsXCJzeXNfY29kZVwiOlwiQ1pHTFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDlcIixcImNpdHlcIjpcIuebkOWfjuW4glwiLFwiY291bnR5XCI6XCLpmJzlroHljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA5MjNcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf6Zic5a6B5Y6/X+i0ouaUv+euoeeQhui9r+S7tueUqOWPi1U4XCIsXCJzeXNfY29kZVwiOlwiWVlaV1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDlcIixcImNpdHlcIjpcIuebkOWfjuW4glwiLFwiY291bnR5XCI6XCLlsITpmLPljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA5MjRcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5bCE6Ziz5Y6/X+i0ouaUv+mihOeul+aJp+ihjOS4gOS9k+WMluezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDlcIixcImNpdHlcIjpcIuebkOWfjuW4glwiLFwiY291bnR5XCI6XCLlu7rmuZbljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA5MjVcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5bu65rmW5Y6/X+mdnueojuaUtue8tFwiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5bu65rmW5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTI1XCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+W7uua5luWOv1/otKLmlL/kuIDkvZPljJZcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5bu65rmW5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTI1XCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+W7uua5luWOv1/lm73lupPpm4bkuK3mlK/ku5hcIixcInN5c19jb2RlXCI6XCJHS1pGXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuS4nOWPsOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDk4MVwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/kuJzlj7DluIJf6YOo6Zeo6aKE566X57yW5a6h57O757ufXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDlcIixcImNpdHlcIjpcIuebkOWfjuW4glwiLFwiY291bnR5XCI6XCLkuJzlj7DluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA5ODFcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5Lic5Y+w5biCX+i0ouaUv+S4gOS9k+WMluS/oeaBr+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDlcIixcImNpdHlcIjpcIuebkOWfjuW4glwiLFwiY291bnR5XCI6XCLkuJzlj7DluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA5ODFcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5Lic5Y+w5biCX+i0ouaUv+S4k+aIt+aguOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlpISFNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5Lic5Y+w5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTgxXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+S4nOWPsOW4gl/pnZ7nqI7mlLblhaXmlLbnvLTnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuS4nOWPsOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDk4MVwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/kuJzlj7DluIJf5oC76aKE566X5Lya6K6h5qC4566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDlcIixcImNpdHlcIjpcIuebkOWfjuW4glwiLFwiY291bnR5XCI6XCLlpKfkuLDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA5ODJcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5aSn5Liw5Yy6X+mDqOmXqOmihOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkJNWVNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5aSn5Liw5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTgyXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+Wkp+S4sOWMul/otKLmlL/kuIDkvZPljJZcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5aSn5Liw5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTgyXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+Wkp+S4sOWMul/mgLvpooTnrpfkvJrorqHmoLjnrpfotKLliqHova/ku7ZcIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIue7j+a1juaKgOacr+W8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDk5MVwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/nu4/mtY7mioDmnK/lvIDlj5HljLpf6YOo6Zeo6aKE566X6L2v5Lu2XCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDlcIixcImNpdHlcIjpcIuebkOWfjuW4glwiLFwiY291bnR5XCI6XCLnu4/mtY7mioDmnK/lvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA5OTFcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf57uP5rWO5oqA5pyv5byA5Y+R5Yy6X+WbveW6k+mbhuS4reaUr+S7mFwiLFwic3lzX2NvZGVcIjpcIkdLWkZcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEwXCIsXCJjaXR5XCI6XCLmiazlt57luIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMDAwXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiT5oi35qC4566XXCIsXCJzeXNfY29kZVwiOlwiWkhIU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTBcIixcImNpdHlcIjpcIuaJrOW3nuW4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjEwMDBcIixcInN5c19uYW1lXCI6XCLogIHpnZ7nqI7mlLblhaXlvoHnvLTns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMTAwMFwiLFwic3lzX25hbWVcIjpcIuaJrOW3nui0ouaUv+S4gOS9k+WMluS/oeaBr+euoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTBcIixcImNpdHlcIjpcIuaJrOW3nuW4glwiLFwiY291bnR5XCI6XCLlub/pmbXljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEwMDJcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbns7vnu59cIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEwXCIsXCJjaXR5XCI6XCLmiazlt57luIJcIixcImNvdW50eVwiOlwi5bm/6Zm15Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMDAyXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTBcIixcImNpdHlcIjpcIuaJrOW3nuW4glwiLFwiY291bnR5XCI6XCLpgpfmsZ/ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEwMDNcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbns7vnu59cIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEwXCIsXCJjaXR5XCI6XCLmiazlt57luIJcIixcImNvdW50eVwiOlwi6YKX5rGf5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMDAzXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTBcIixcImNpdHlcIjpcIuaJrOW3nuW4glwiLFwiY291bnR5XCI6XCLpgpfmsZ/ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEwMDNcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIuWuneW6lOWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMTAyM1wiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeW+geaUtlwiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEwXCIsXCJjaXR5XCI6XCLmiazlt57luIJcIixcImNvdW50eVwiOlwi5a6d5bqU5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMDIzXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTBcIixcImNpdHlcIjpcIuaJrOW3nuW4glwiLFwiY291bnR5XCI6XCLku6rlvoHluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjEwODFcIixcInN5c19uYW1lXCI6XCLpg6jpl6jpooTnrpfnvJbliLZcIixcInN5c19jb2RlXCI6XCJCTVlTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIuS7quW+geW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTA4MVwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeaUtue8tFwiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEwXCIsXCJjaXR5XCI6XCLmiazlt57luIJcIixcImNvdW50eVwiOlwi5Luq5b6B5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMDgxXCIsXCJzeXNfbmFtZVwiOlwi6KGM5pS/5LqL5Lia5oCn5Y2V5L2N5Zu95pyJ6LWE5Lqn566h55CGXCIsXCJzeXNfY29kZVwiOlwiWkNHTFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTBcIixcImNpdHlcIjpcIuaJrOW3nuW4glwiLFwiY291bnR5XCI6XCLku6rlvoHluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjEwODFcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIumrmOmCruW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTA4NFwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4muWKoeezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTBcIixcImNpdHlcIjpcIuaJrOW3nuW4glwiLFwiY291bnR5XCI6XCLmsZ/pg73ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEwODhcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuJrliqHnu7zlkIjns7vnu59cIixcInN5c19jb2RlXCI6XCJaSFlXXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIuaxn+mDveWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTA4OFwiLFwic3lzX25hbWVcIjpcIuaxn+mDveW8gOWPkeWMuumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjExXCIsXCJjaXR5XCI6XCLplYfmsZ/luIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMTAwXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyWXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMVwiLFwiY2l0eVwiOlwi6ZWH5rGf5biCXCIsXCJjb3VudHlcIjpcIuS6rOWPo+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTEwMlwiLFwic3lzX25hbWVcIjpcIuWvjOa3seWNj+mAmui0ouaUv+S4gOS9k+WMluS4muWKoeeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTFcIixcImNpdHlcIjpcIumVh+axn+W4glwiLFwiY291bnR5XCI6XCLkuqzlj6PljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjExMDJcIixcInN5c19uYW1lXCI6XCLlr4zmt7HljY/pgJrpnZ7nqI7mlLbnvLTns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMVwiLFwiY2l0eVwiOlwi6ZWH5rGf5biCXCIsXCJjb3VudHlcIjpcIuS6rOWPo+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTEwMlwiLFwic3lzX25hbWVcIjpcIuWvjOa3seWNj+mAmuW3pei1hOe7n+WPkeezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkdaVEZcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjExXCIsXCJjaXR5XCI6XCLplYfmsZ/luIJcIixcImNvdW50eVwiOlwi5ram5bee5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMTExXCIsXCJzeXNfbmFtZVwiOlwi6YOo6Zeo6aKE566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTFcIixcImNpdHlcIjpcIumVh+axn+W4glwiLFwiY291bnR5XCI6XCLmtqblt57ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjExMTFcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJZcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjExXCIsXCJjaXR5XCI6XCLplYfmsZ/luIJcIixcImNvdW50eVwiOlwi5ram5bee5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMTExXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWlXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTFcIixcImNpdHlcIjpcIumVh+axn+W4glwiLFwiY291bnR5XCI6XCLkuLnlvpLljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjExMTJcIixcInN5c19uYW1lXCI6XCLotKLmlL/nu7zlkIjkuJrliqHns7vnu59cIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjExXCIsXCJjaXR5XCI6XCLplYfmsZ/luIJcIixcImNvdW50eVwiOlwi5Li56Ziz5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMTgxXCIsXCJzeXNfbmFtZVwiOlwi6YOo6Zeo6aKE566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTFcIixcImNpdHlcIjpcIumVh+axn+W4glwiLFwiY291bnR5XCI6XCLkuLnpmLPluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjExODFcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMVwiLFwiY2l0eVwiOlwi6ZWH5rGf5biCXCIsXCJjb3VudHlcIjpcIuaJrOS4reW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTE4MlwiLFwic3lzX25hbWVcIjpcIumDqOmXqOmihOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkJNWVNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjExXCIsXCJjaXR5XCI6XCLplYfmsZ/luIJcIixcImNvdW50eVwiOlwi5oms5Lit5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMTgyXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTFcIixcImNpdHlcIjpcIumVh+axn+W4glwiLFwiY291bnR5XCI6XCLlj6XlrrnluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjExODNcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaVcIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMVwiLFwiY2l0eVwiOlwi6ZWH5rGf5biCXCIsXCJjb3VudHlcIjpcIuWPpeWuueW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTE4M1wiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEyXCIsXCJjaXR5XCI6XCLms7Dlt57luIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMjAwXCIsXCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+W4guacrOe6p1/pg6jpl6jpooTnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJCTVlTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMTIwMFwiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/luILmnKznuqdf6Z2e56iO5pS25YWl57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTJcIixcImNpdHlcIjpcIuazsOW3nuW4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjEyMDBcIixcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5biC5pys57qnX+e7qeaViOeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkpYR0xcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEyXCIsXCJjaXR5XCI6XCLms7Dlt57luIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMjAwXCIsXCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+W4guacrOe6p1/pooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMTIwMFwiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/luILmnKznuqdf57u85ZCI5rK756iO57O757ufXCIsXCJzeXNfY29kZVwiOlwiWkhaU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTJcIixcImNpdHlcIjpcIuazsOW3nuW4glwiLFwiY291bnR5XCI6XCLmtbfpmbXljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEyMDJcIixcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5rW36Zm15Yy6X+mDqOmXqOmihOeul+e8luWItuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkJNWVNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEyXCIsXCJjaXR5XCI6XCLms7Dlt57luIJcIixcImNvdW50eVwiOlwi5rW36Zm15Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMjAyXCIsXCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+a1t+mZteWMul/ljr/ljLrotKLmlL/kuIDkvZPljJZcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEyXCIsXCJjaXR5XCI6XCLms7Dlt57luIJcIixcImNvdW50eVwiOlwi6auY5riv5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMjAzXCIsXCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+mrmOa4r+WMul/pooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIuWnnOWgsOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTIwNFwiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/lp5zloLDljLpf6YOo6Zeo6aKE566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTJcIixcImNpdHlcIjpcIuazsOW3nuW4glwiLFwiY291bnR5XCI6XCLlp5zloLDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEyMDRcIixcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5aec5aCw5Yy6X+i0ouaUv+S4gOS9k+WMluezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTJcIixcImNpdHlcIjpcIuazsOW3nuW4glwiLFwiY291bnR5XCI6XCLlp5zloLDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEyMDRcIixcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5aec5aCw5Yy6X+mdnueojuaUtue8tOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEyXCIsXCJjaXR5XCI6XCLms7Dlt57luIJcIixcImNvdW50eVwiOlwi5aec5aCw5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMjA0XCIsXCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+WnnOWgsOWMul/pooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIuWMu+iNr+mrmOaWsOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTIwNVwiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/ljLvoja/pq5jmlrDljLpf6LSi5pS/5LiA5L2T5YyW57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIuWFtOWMluW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTI4MVwiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/lhbTljJbluIJf6YOo6Zeo6aKE566XXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTJcIixcImNpdHlcIjpcIuazsOW3nuW4glwiLFwiY291bnR5XCI6XCLlhbTljJbluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjEyODFcIixcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5YW05YyW5biCX+mdnueojuaUtue8tFwiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEyXCIsXCJjaXR5XCI6XCLms7Dlt57luIJcIixcImNvdW50eVwiOlwi5YW05YyW5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMjgxXCIsXCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+WFtOWMluW4gl/lm73lupPpm4bkuK3mlK/ku5hcIixcInN5c19jb2RlXCI6XCJHS1pGXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIumdluaxn+W4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTI4MlwiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/pnZbmsZ/luIJf6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTJcIixcImNpdHlcIjpcIuazsOW3nuW4glwiLFwiY291bnR5XCI6XCLpnZbmsZ/luIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjEyODJcIixcInN5c19uYW1lXCI6XCLms7Dlt57luIJf6Z2W5rGf5biCX+mdnueojuaUtuWFpeaUtue8tFwiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEyXCIsXCJjaXR5XCI6XCLms7Dlt57luIJcIixcImNvdW50eVwiOlwi6Z2W5rGf5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMjgyXCIsXCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+mdluaxn+W4gl/pg6jpl6jpooTnrpfnvJblrqHns7vnu59cIixcInN5c19jb2RlXCI6XCJCTVlTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIuazsOWFtOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTI4M1wiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/ms7DlhbTluIJf6YOo6Zeo6aKE566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTJcIixcImNpdHlcIjpcIuazsOW3nuW4glwiLFwiY291bnR5XCI6XCLms7DlhbTluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjEyODNcIixcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5rOw5YW05biCX+mdnueojuaUtuWFpeeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEyXCIsXCJjaXR5XCI6XCLms7Dlt57luIJcIixcImNvdW50eVwiOlwi5rOw5YW05biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMjgzXCIsXCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+azsOWFtOW4gl/pooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJCTVlTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxM1wiLFwiY2l0eVwiOlwi5a6/6L+B5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMTMwMFwiLFwic3lzX25hbWVcIjpcIumDqOmXqOmihOeul+euoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkJNWVNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEzXCIsXCJjaXR5XCI6XCLlrr/ov4HluIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMzAwXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTNcIixcImNpdHlcIjpcIuWuv+i/geW4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjEzMDBcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxM1wiLFwiY2l0eVwiOlwi5a6/6L+B5biCXCIsXCJjb3VudHlcIjpcIuWuv+WfjuWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTMwMlwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMluW5s+WPsOWPiuWbveW6k+mbhuS4reaUr+S7mOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkdLWkZcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEzXCIsXCJjaXR5XCI6XCLlrr/ov4HluIJcIixcImNvdW50eVwiOlwi5a6/5Z+O5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMzAyXCIsXCJzeXNfbmFtZVwiOlwi5paw5Lit5aSn6Z2e56iO5pS25YWl566h55CGXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTNcIixcImNpdHlcIjpcIuWuv+i/geW4glwiLFwiY291bnR5XCI6XCLlrr/ln47ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEzMDJcIixcInN5c19uYW1lXCI6XCLmgLvpooTnrpfkvJrorqHmoLjnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxM1wiLFwiY2l0eVwiOlwi5a6/6L+B5biCXCIsXCJjb3VudHlcIjpcIuWuv+ixq+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTMxMVwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtue8tOeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEzXCIsXCJjaXR5XCI6XCLlrr/ov4HluIJcIixcImNvdW50eVwiOlwi5a6/6LGr5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMzExXCIsXCJzeXNfbmFtZVwiOlwi6IGU5Y+L6LSi5Yqh566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiQ1dHTFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTNcIixcImNpdHlcIjpcIuWuv+i/geW4glwiLFwiY291bnR5XCI6XCLlrr/osavljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEzMTFcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxM1wiLFwiY2l0eVwiOlwi5a6/6L+B5biCXCIsXCJjb3VudHlcIjpcIuayremYs+WOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMTMyMlwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEzXCIsXCJjaXR5XCI6XCLlrr/ov4HluIJcIixcImNvdW50eVwiOlwi5rKt6Ziz5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMzIyXCIsXCJzeXNfbmFtZVwiOlwi5Zu95bqT6ZuG5Lit5pSv5LuY44CB5oyH5qCH566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTNcIixcImNpdHlcIjpcIuWuv+i/geW4glwiLFwiY291bnR5XCI6XCLmsq3pmLPljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjEzMjJcIixcInN5c19uYW1lXCI6XCLlvIDlj5HljLrmgLvpooTnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJCTVlTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxM1wiLFwiY2l0eVwiOlwi5a6/6L+B5biCXCIsXCJjb3VudHlcIjpcIuayremYs+WOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMTMyMlwiLFwic3lzX25hbWVcIjpcIuaAu+mihOeul+S8muiuoeaguOeul1wiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEzXCIsXCJjaXR5XCI6XCLlrr/ov4HluIJcIixcImNvdW50eVwiOlwi5rOX6Ziz5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMzIzXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGMXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTNcIixcImNpdHlcIjpcIuWuv+i/geW4glwiLFwiY291bnR5XCI6XCLms5fmtKrljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjEzMjRcIixcInN5c19uYW1lXCI6XCLpg6jpl6jpooTnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJCTVlTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxM1wiLFwiY2l0eVwiOlwi5a6/6L+B5biCXCIsXCJjb3VudHlcIjpcIuazl+a0quWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMTMyNFwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEzXCIsXCJjaXR5XCI6XCLlrr/ov4HluIJcIixcImNvdW50eVwiOlwi5rOX5rSq5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMzI0XCIsXCJzeXNfbmFtZVwiOlwi5Zu95bqT6ZuG5Lit5pSv5LuY57O757ufXCIsXCJzeXNfY29kZVwiOlwiR0taRlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTNcIixcImNpdHlcIjpcIuWuv+i/geW4glwiLFwiY291bnR5XCI6XCLms5fmtKrljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjEzMjRcIixcInN5c19uYW1lXCI6XCLlm73lupPotKbliqHns7vnu59cIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIumrmOaWsOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDEwMEdYUVwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAxXCIsXCJjaXR5XCI6XCLljZfkuqzluIJcIixcImNvdW50eVwiOlwi5YyW5bel5Zut5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMTAwSEdZXCIsXCJzeXNfbmFtZVwiOlwi5YyW5a2m5bel5Lia5Zut5Yy66Z2e56iO5pS25YWl566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDFcIixcImNpdHlcIjpcIuWNl+S6rOW4glwiLFwiY291bnR5XCI6XCLnu4/mtY7mioDmnK/lvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAxMDBKS1FcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaXotKblpZdcIixcInN5c19jb2RlXCI6XCJGU1pUXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIuWMluW3peWbreWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDEwMUhHWVwiLFwic3lzX25hbWVcIjpcIuWMluWtpuW3peS4muWbreWMuumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAxXCIsXCJjaXR5XCI6XCLljZfkuqzluIJcIixcImNvdW50eVwiOlwi57uP5rWO5oqA5pyv5byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMTAxSktRXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDFcIixcImNpdHlcIjpcIuWNl+S6rOW4glwiLFwiY291bnR5XCI6XCLljJblt6Xlm63ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAxMDJIR1lcIixcInN5c19uYW1lXCI6XCLkvJrorqHmoLjnrpdcIixcInN5c19jb2RlXCI6XCJLWUhTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIue7j+a1juaKgOacr+W8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDEwMkpLUVwiLFwic3lzX25hbWVcIjpcIuaAu+mihOeul+S8muiuoei0plwiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi6ZSh5bGx5byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjA1S0ZRXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5YaF5aSW5pS25pSv5qC4566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDJcIixcImNpdHlcIjpcIuaXoOmUoeW4glwiLFwiY291bnR5XCI6XCLmu6jmuZbljLrpqazlsbHlvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAyMTFLRlFcIixcInN5c19uYW1lXCI6XCLotKbmiLfmoLjnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJaSEhTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMlwiLFwiY2l0eVwiOlwi5peg6ZSh5biCXCIsXCJjb3VudHlcIjpcIuaxn+mYtOW8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDI4MWtmcVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMluW5s+WPsFwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDJcIixcImNpdHlcIjpcIuaXoOmUoeW4glwiLFwiY291bnR5XCI6XCLmsZ/pmLTlvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAyODFrZnFcIixcInN5c19uYW1lXCI6XCLotKbmiLfmoLjnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJaSEhTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMlwiLFwiY2l0eVwiOlwi5peg6ZSh5biCXCIsXCJjb3VudHlcIjpcIuWunOWFtOeOr+enkeWbrVwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDI4MktGUVwiLFwic3lzX25hbWVcIjpcIui0ouWKoeaguOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlpISFNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi5a6c5YW05byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjgyS0ZRXCIsXCJzeXNfbmFtZVwiOlwi5oC76aKE566X5qC4566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiWkhIU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDNcIixcImNpdHlcIjpcIuW+kOW3nuW4glwiLFwiY291bnR5XCI6XCLnu4/mtY7mioDmnK/lvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAzMDBKS1FcIixcInN5c19uYW1lXCI6XCLlr4zmt7HljY/pgJrotKLmlL/kuIDkvZPljJbkuJrliqHnrqHnkIbns7vnu5/ova/ku7ZcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAzXCIsXCJjaXR5XCI6XCLlvpDlt57luIJcIixcImNvdW50eVwiOlwi57uP5rWO5oqA5pyv5byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMzAwSktRXCIsXCJzeXNfbmFtZVwiOlwi6LSm5Yqh5aSE55CG57O757uf77yI5pS25pSv5YiG57G75pS56Z2p5Y2H57qn54mI77yJXCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLlpKnlroHnu4/lvIDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0MDJKS1FcIixcInN5c19uYW1lXCI6XCLotKbliqHlpITnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIumSn+alvOWMuuW8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQwNEtGUVwiLFwic3lzX25hbWVcIjpcIuWbveW6k+mbhuS4reaUr+S7mOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkdLWkZcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi6ZKf5qW85Yy65byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDA1S0ZRXCIsXCJzeXNfbmFtZVwiOlwi55So5qy+6K6h5YiS57O757ufXCIsXCJzeXNfY29kZVwiOlwiSkhHTFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLpkp/mpbzljLrlvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0MDZLRlFcIixcInN5c19uYW1lXCI6XCLmjIfmoIfnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJaQkdMXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIumSn+alvOWMuuW8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQwN0tGUVwiLFwic3lzX25hbWVcIjpcIuaAu+mihOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlpZU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLnu4/lvIDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0MTJKS1FcIixcInN5c19uYW1lXCI6XCLotKLmlL/pooTnrpflpJbkuJrliqFcIixcInN5c19jb2RlXCI6XCJZU1dcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi57uP5byA5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDEySktRXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS257y057O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLnu4/lvIDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0MTJKS1FcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIuatpui/m+mrmOaWsOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQxM0dYUVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMlueuoeeQhuS/oeaBr+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLmuqfpmLPkuK3lhbPmnZFcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0ODFaR0NcIixcInN5c19uYW1lXCI6XCLnlKjlj4tVOFIxMOi0ouaUv+S4gOS9k+WMluW5s+WPsFwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLmuqfpmLPkuK3lhbPmnZHlvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0ODFaR0NLRlwiLFwic3lzX25hbWVcIjpcIueUqOWPi1U4UjEw6LSi5pS/5LiA5L2T5YyW5bmz5Y+wXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuebuOWfjuWMuuW8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDUwN0tGUVwiLFwic3lzX25hbWVcIjpcIuW8gOWPkeWMuui0ouaUv+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLluLjnhp/luILpq5jmlrDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1ODFHWFFcIixcInN5c19uYW1lXCI6XCLpq5jmlrDljLrmgLvpooTnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJaWVNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi5piG5bGx5biC5byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTgzS0ZRXCIsXCJzeXNfbmFtZVwiOlwi5byA5Y+R5Yy65YWs5YWx6LSi5pS/5pyN5Yqh5bmz5Y+wXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuWkquS7k+W4guaWsOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDU4NVhRXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLlpKrku5PluILmlrDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1ODZYUVwiLFwic3lzX25hbWVcIjpcIuS8muiuoeaguOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi5aSq5LuT5biC5paw5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTg3WFFcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIuW8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDYwMEtGUVwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi6IuP6YCa5Zut5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjAwU1RZXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLpgJrlt57mub7npLrojIPljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2MDBUWldcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwN1wiLFwiY2l0eVwiOlwi6L+e5LqR5riv5biCXCIsXCJjb3VudHlcIjpcIuW8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDcwMUtGUVwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpVwiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODAwS0ZRXCIsXCJzeXNfbmFtZVwiOlwi55So5Y+LR1JQLVU4566h55CG6L2v5Lu2XCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuWfjuWNl+aWsOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkwMENaWFFcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5Z+O5Y2X5paw5Yy6X+WbveW6k+mbhuS4reaUr+S7mOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkdLWkZcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5Z+O5Y2X5paw5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTAxQ1pYUVwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/ln47ljZfmlrDljLpf5oC76aKE566X6LSm5Yqh5aSE55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTBcIixcImNpdHlcIjpcIuaJrOW3nuW4glwiLFwiY291bnR5XCI6XCLljJblt6Xlm63ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEwMDBIR1lcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIuW8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTAwMEtGUVwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeaUtue8tFwiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEwXCIsXCJjaXR5XCI6XCLmiazlt57luIJcIixcImNvdW50eVwiOlwi56eR5oqA5paw5Z+OXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMDAwS0pDXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTBcIixcImNpdHlcIjpcIuaJrOW3nuW4glwiLFwiY291bnR5XCI6XCLonIDlhogt55im6KW/5rmW6aOO5pmv5ZCN6IOc5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMDAwU1hIXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/6aKE566X5oyH5qCH566h55CGXCIsXCJzeXNfY29kZVwiOlwiWkJHTFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTBcIixcImNpdHlcIjpcIuaJrOW3nuW4glwiLFwiY291bnR5XCI6XCLonIDlhogt55im6KW/5rmW6aOO5pmv5ZCN6IOc5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMDAwU1hIXCIsXCJzeXNfbmFtZVwiOlwi5oC76aKE566X5Lya6K6h5qC4566XXCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTBcIixcImNpdHlcIjpcIuaJrOW3nuW4glwiLFwiY291bnR5XCI6XCLlvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEwMDFLRlFcIixcInN5c19uYW1lXCI6XCLkuIDkvZPljJbns7vnu59cIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEwXCIsXCJjaXR5XCI6XCLmiazlt57luIJcIixcImNvdW50eVwiOlwi5byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMDAyS0ZRXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTBcIixcImNpdHlcIjpcIuaJrOW3nuW4glwiLFwiY291bnR5XCI6XCLpq5jpgq7lvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEwODRLRlFcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuJrliqHns7vnu59cIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjExXCIsXCJjaXR5XCI6XCLplYfmsZ/luIJcIixcImNvdW50eVwiOlwi5paw5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMTAwWFFcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJZcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEyXCIsXCJjaXR5XCI6XCLms7Dlt57luIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMjAwXCIsXCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+W4guacrOe6p1/ooYzmlL/nrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJYWkdMXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxM1wiLFwiY2l0eVwiOlwi5a6/6L+B5biCXCIsXCJjb3VudHlcIjpcIua5lua7qOaWsOWfjlwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTMwMEhCWENcIixcInN5c19uYW1lXCI6XCLmlrDkuK3lpKfotKLliqHova/ku7ZcIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxM1wiLFwiY2l0eVwiOlwi5a6/6L+B5biCXCIsXCJjb3VudHlcIjpcIue7j+W8gOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTMwMEpLUVwiLFwic3lzX25hbWVcIjpcIuaWsOS4reWkp+WFrOWFsei0ouaUv+euoeeQhui9r+S7tlwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTNcIixcImNpdHlcIjpcIuWuv+i/geW4glwiLFwiY291bnR5XCI6XCLmtIvmsrPmlrDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEzMDBZSFhRXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTNcIixcImNpdHlcIjpcIuWuv+i/geW4glwiLFwiY291bnR5XCI6XCLlrr/osavljLrlvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEzMTFLRlFcIixcInN5c19uYW1lXCI6XCLlvIDlj5HljLrmlrDkuK3lpKfotKLliqHmoLjnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxM1wiLFwiY2l0eVwiOlwi5a6/6L+B5biCXCIsXCJjb3VudHlcIjpcIuazl+a0quWOv+W8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTMyNEtGUVwiLFwic3lzX25hbWVcIjpcIuW8gOWPkeWMuui0puWKoeezu+e7n1wiLFwic3lzX2NvZGVcIjpcIktKSFNcIn1dO1xuXG5cblxuXG5cdGV4cG9ydCBmdW5jdGlvbiBnZXRDb3VudHlCeUNvZGUoY29kZSl7XG5cdFx0Ly92YXIganNvYmogPSBKU09OLnBhcnNlKG9yaWdpbl9wbGFjZV9hcnIpO1xuXHRcdHZhciBqc29iaiA9IG9yaWdpbl9wbGFjZV9hcnI7XG5cblx0XHR2YXIganNvbmxlbmd0aCA9IGpzb2JqLmxlbmd0aDtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGpzb25sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYoanNvYmpbaV0uY291bnR5X2NvZGUgPT0gY29kZSl7XG5cdFx0XHRcdHJldHVybiBqc29ialtpXS5jaXR5K2pzb2JqW2ldLmNvdW50eTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGNvZGU7XG5cdH1cblxuXHRleHBvcnQgZnVuY3Rpb24gZ2V0Q29kZUJ5Q291bnR5KHBsYWNlKXtcblx0XHRwbGFjZSA9IHBsYWNlLnJlcGxhY2UoL1xccypcXHQqL2dpbSxcIlwiKTtcblx0XHQvL3ZhciBqc29iaiA9IEpTT04ucGFyc2Uob3JpZ2luX3BsYWNlX2Fycik7XG5cdFx0dmFyIGpzb2JqID0gb3JpZ2luX3BsYWNlX2FycjtcblxuXHRcdHZhciBqc29ubGVuZ3RoID0ganNvYmoubGVuZ3RoO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwganNvbmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZihqc29ialtpXS5jaXR5ID09PSBcIlwiIHx8IGpzb2JqW2ldLmNpdHkgPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdGlmKGpzb2JqW2ldLmNvdW50eSA9PT0gXCJcIiB8fCBqc29ialtpXS5jb3VudHkgPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdGlmKChwbGFjZS5pbmRleE9mKGpzb2JqW2ldLmNpdHkpICE9IC0xKSAmJiAocGxhY2UuaW5kZXhPZihqc29ialtpXS5jb3VudHkpICE9IC0xKSl7XG5cdFx0XHRcdHJldHVybiBqc29ialtpXS5jb3VudHlfY29kZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHBsYWNlO1xuXHR9XG5cblx0ZXhwb3J0IGZ1bmN0aW9uIGdldFN5c3RlbU5hbWVCeUlkKGlkKXtcblx0XHR2YXIgdGVtSnNvbiA9IHN5c3RlbV9hcnI7XG5cdFx0dmFyIHN5c19zaXplID0gdGVtSnNvbi5sZW5ndGg7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeXNfc2l6ZTsgaSsrKSB7XG5cdFx0XHRpZih0ZW1Kc29uW2ldLnN5c19pZCA9PSBpZCl7XG5cdFx0XHRcdHJldHVybiB0ZW1Kc29uW2ldLnN5c19uYW1lO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gaWQ7XG5cdH1cblxuXG5cblx0ZXhwb3J0IGZ1bmN0aW9uIGdldElkQnlTeXN0ZW1OYW1lKG5hbWUpe1xuXHRcdHZhciB0ZW1Kc29uID0gc3lzdGVtX2Fycjtcblx0XHR2YXIgc3lzX3NpemUgPSB0ZW1Kc29uLmxlbmd0aDtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5c19zaXplOyBpKyspIHtcblx0XHRcdGlmKHRlbUpzb25baV0uc3lzX25hbWUgPT0gbmFtZSl7XG5cdFx0XHRcdHJldHVybiB0ZW1Kc29uW2ldLnN5c19pZDtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG5hbWU7XG5cdH1cblxuXHRleHBvcnQgZnVuY3Rpb24gZ2V0Q29kZUJ5U3lzdGVtTmFtZShuYW1lKXtcblx0XHR2YXIganNvYmogPSBvcmlnaW5fcGxhY2VfYXJyO1xuXG5cdFx0dmFyIGpzb25sZW5ndGggPSBqc29iai5sZW5ndGg7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBqc29ubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmKGpzb2JqW2ldLnN5c19uYW1lID09IG5hbWUpe1xuXHRcdFx0XHRyZXR1cm4ganNvYmpbaV0uc3lzX2NvZGU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBuYW1lO1xuXHR9XG59XG5cblxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblxuICBleHBvcnQgdmFyIFJlcGxpY2F0aW9uQ29udHJvbGxlckNvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiUmVwbGljYXRpb25Db250cm9sbGVyQ29udHJvbGxlclwiLFxuICAgIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcbiAgICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDogS3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcblxuICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xuICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcbiAgICAkc2NvcGUucmF3TW9kZWwgPSBudWxsXG5cbiAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XG5cbiAgICAkc2NvcGUuaXRlbUNvbmZpZyA9IHtcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgJ15cXFxcL2xhYmVscyQnOiB7XG4gICAgICAgICAgdGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldCgnbGFiZWxUZW1wbGF0ZS5odG1sJylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICAkc2NvcGUuJG9uKCdrdWJlcm5ldGVzTW9kZWxVcGRhdGVkJywgKCkgPT4ge1xuICAgICAgdXBkYXRlRGF0YSgpO1xuICAgIH0pO1xuXG4gICAgJHNjb3BlLiRvbignJHJvdXRlVXBkYXRlJywgKCRldmVudCkgPT4ge1xuICAgICAgdXBkYXRlRGF0YSgpO1xuICAgIH0pO1xuXG4gICAgJHNjb3BlLiR3YXRjaCgnbW9kZWwucG9kcycsIChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IHtcbiAgICAgIHVwZGF0ZURhdGEoKTtcbiAgICB9LCB0cnVlKTtcblxuICAgICRzY29wZS5mbGlwUmF3ID0gKCkgPT4ge1xuICAgICAgJHNjb3BlLnJhd01vZGUgPSAhJHNjb3BlLnJhd01vZGU7XG4gICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgIH07XG5cbiAgICB1cGRhdGVEYXRhKCk7XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xuICAgICAgaWYgKCRzY29wZS5kaXJ0eSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAkc2NvcGUuaWQgPSAkcm91dGVQYXJhbXNbXCJpZFwiXTtcbiAgICAgICRzY29wZS5pdGVtID0gJHNjb3BlLm1vZGVsLmdldFJlcGxpY2F0aW9uQ29udHJvbGxlcihLdWJlcm5ldGVzU3RhdGUuc2VsZWN0ZWROYW1lc3BhY2UsICRzY29wZS5pZCk7XG4gICAgICBpZiAoJHNjb3BlLml0ZW0pIHtcbiAgICAgICAgJHNjb3BlLnJhd01vZGVsID0gdG9SYXdZYW1sKCRzY29wZS5pdGVtKTtcbiAgICAgIH1cbiAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgfVxuICB9XSk7XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIGV4cG9ydCB2YXIgUmVwbGljYXRpb25Db250cm9sbGVyRWRpdENvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiUmVwbGljYXRpb25Db250cm9sbGVyRWRpdENvbnRyb2xsZXJcIixcbiAgICBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCJLdWJlcm5ldGVzU2NoZW1hXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLCBcIlNjaGVtYVJlZ2lzdHJ5XCIsXG4gICAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6IEt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLFxuICAgICAgICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMLCBzY2hlbWFzOkhhd3Rpb0Zvcm1zLlNjaGVtYVJlZ2lzdHJ5KSA9PiB7XG5cbiAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XG4gICAgJHNjb3BlLmlkID0gJHJvdXRlUGFyYW1zW1wiaWRcIl07XG4gICAgJHNjb3BlLnNjaGVtYSA9IEt1YmVybmV0ZXNTY2hlbWE7XG4gICAgbG9nLmRlYnVnKFwiU2NoZW1hOiBcIiwgJHNjb3BlLnNjaGVtYSk7XG4gICAgJHNjb3BlLmNvbmZpZyA9IHNjaGVtYXMuY2xvbmVTY2hlbWEoXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJlcGxpY2F0aW9uQ29udHJvbGxlclwiKTtcbiAgICAvLyQkc2NvcGUuY29uZmlnID0gS3ViZXJuZXRlc1NjaGVtYS5kZWZpbml0aW9ucy5rdWJlcm5ldGVzX3YxYmV0YTNfUmVwbGljYXRpb25Db250cm9sbGVyO1xuXG4gICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xuXG4gICAgJHNjb3BlLiRvbignJHJvdXRlVXBkYXRlJywgKCRldmVudCkgPT4ge1xuICAgICAgdXBkYXRlRGF0YSgpO1xuICAgIH0pO1xuXG4gICAgdXBkYXRlRGF0YSgpO1xuXG4gICAgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcbiAgICAgIGlmICgkc2NvcGUuaWQpIHtcbiAgICAgICAgJHNjb3BlLmVudGl0eSA9ICRzY29wZS5tb2RlbC5nZXRSZXBsaWNhdGlvbkNvbnRyb2xsZXIoS3ViZXJuZXRlc1N0YXRlLnNlbGVjdGVkTmFtZXNwYWNlLCAkc2NvcGUuaWQpO1xuICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XSk7XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIGV4cG9ydCB2YXIgUmVwbGljYXRpb25Db250cm9sbGVycyA9IGNvbnRyb2xsZXIoXCJSZXBsaWNhdGlvbkNvbnRyb2xsZXJzXCIsXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiRGF0YUluZm9Nb2RlbFwiLCBcIkt1YmVybmV0ZXNSZXBsaWNhdGlvbkNvbnRyb2xsZXJzXCIsIFwiS3ViZXJuZXRlc1BvZHNcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXG4gICAgICAoJHNjb3BlLCAgS3ViZXJuZXRlc01vZGVsOiBLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIERhdGFJbmZvTW9kZWwsIEt1YmVybmV0ZXNSZXBsaWNhdGlvbkNvbnRyb2xsZXJzOm5nLnJlc291cmNlLklSZXNvdXJjZUNsYXNzPGFueT4sIEt1YmVybmV0ZXNQb2RzOm5nLnJlc291cmNlLklSZXNvdXJjZUNsYXNzPGFueT4sIEt1YmVybmV0ZXNTdGF0ZSxcbiAgICAgICAkdGVtcGxhdGVDYWNoZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XG5cbiAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XG4gICAgJHNjb3BlLmZpbHRlclJlcGxpY2F0aW9uQ29udHJvbGxlcnMgPSAkc2NvcGUubW9kZWwuZmlsdGVyUmVwbGljYXRpb25jb250cm9sbGVycztcblxuICAgICRzY29wZS50YWJsZUNvbmZpZyA9IHtcbiAgICAgIGRhdGE6ICdtb2RlbC5yZXBsaWNhdGlvbkNvbnRyb2xsZXJzJyxcbiAgICAgIHNob3dTZWxlY3Rpb25DaGVja2JveDogdHJ1ZSxcbiAgICAgIGVuYWJsZVJvd0NsaWNrU2VsZWN0aW9uOiBmYWxzZSxcbiAgICAgIG11bHRpU2VsZWN0OiB0cnVlLFxuICAgICAgc2VsZWN0ZWRJdGVtczogW10sXG4gICAgICBmaWx0ZXJPcHRpb25zOiB7XG4gICAgICAgIGZpbHRlclRleHQ6ICRsb2NhdGlvbi5zZWFyY2goKVtcInFcIl0gfHwgJydcbiAgICAgIH0sXG4gICAgIGNvbHVtbkRlZnM6IFtcbiAgICAgICAgIHsgZmllbGQ6ICckb3JhY2xlTmFtZScsXG4gICAgICAgICAgIGRpc3BsYXlOYW1lOiAn5pyN5Yqh5ZCN56ewJyxcbiAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJpZFRlbXBsYXRlLmh0bWxcIilcbiAgICAgICAgIH0sXG4gICAgICAgICAvL3sgZmllbGQ6ICckcmVwbGljYXMnLFxuICAgICAgICAgLy8gIGRpc3BsYXlOYW1lOiAnU2NhbGUnLFxuICAgICAgICAgLy8gIGNlbGxUZW1wbGF0ZTokdGVtcGxhdGVDYWNoZS5nZXQoXCJkZXNpcmVkUmVwbGljYXMuaHRtbFwiKVxuICAgICAgICAgLy99LFxuICAgICAgICAgeyBmaWVsZDogJyRwb2RzLmFnZScsXG4gICAgICAgICAgIGRpc3BsYXlOYW1lOiAn5ZCv5Yqo5pe26Ze0JyxcbiAgICAgICAgICAgY2VsbFRlbXBsYXRlOiR0ZW1wbGF0ZUNhY2hlLmdldChcImFnZVRlbXBsYXRlLmh0bWxcIilcbiAgICAgICAgIH0sXG4gICAgICAgICB7IGZpZWxkOiAnJGxhYmVsc1RleHQnLFxuICAgICAgICAgICBkaXNwbGF5TmFtZTogJ+aVsOaNruagh+etvicsXG4gICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwibGFiZWxUZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgICB9LFxuICAgICAgICAgeyBmaWVsZDogJyRwb2RzJyxcbiAgICAgICAgICAgZGlzcGxheU5hbWU6ICfov57mjqXlj4LmlbAnLFxuICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImNvbm5lY3RQYXJhbVRlbXBsYXRlLmh0bWxcIilcbiAgICAgICAgIH0sXG4gICAgICAgICB7IGZpZWxkOiAnJHBvZHNbMF0uJGV2ZW50Q291bnQnLFxuICAgICAgICAgICBkaXNwbGF5TmFtZTogJ+acjeWKoeWQr+WKqOaXpeW/lycsXG4gICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiZXZlbnRTdW1tYXJ5VGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgfSxcbiAgICAgICAgIHsgZmllbGQ6ICckcG9kQ291bnRlcnMnLFxuICAgICAgICAgICBkaXNwbGF5TmFtZTogJ+acjeWKoeeKtuaAgScsXG4gICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwicG9kQ291bnRzQW5kTGlua1RlbXBsYXRlLmh0bWxcIiksXG4gICAgICAgICAgIGN1c3RvbVNvcnRGaWVsZDogKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgaWYoZmllbGQuJHBvZENvdW50ZXJzLnJlYWR5ICl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDM7XG4gICAgICAgICAgICAgfWVsc2UgaWYoZmllbGQuJHBvZENvdW50ZXJzLnZhbGlkIHx8IGZpZWxkLiRwb2RDb3VudGVycy53YWl0aW5nKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gMjtcbiAgICAgICAgICAgICB9ZWxzZSBpZihmaWVsZC4kcG9kQ291bnRlcnMuZXJyb3Ipe1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgIH1cbiAgICAgICAgICAgfVxuICAgICAgICAgfVxuICAgICAgIF1cbiAgICB9XG5cbiAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XG5cbiAgICAkc2NvcGUuZGVsZXRlUHJvbXB0ID0gKHNlbGVjdGVkKSA9PiB7XG4gICAgICBpZiAoYW5ndWxhci5pc1N0cmluZyhzZWxlY3RlZCkpIHtcbiAgICAgICAgc2VsZWN0ZWQgPSBbe1xuICAgICAgICAgIGlkOiBzZWxlY3RlZFxuICAgICAgICB9XTtcbiAgICAgIH1cbiAgICAgIFVJLm11bHRpSXRlbUNvbmZpcm1BY3Rpb25EaWFsb2coPFVJLk11bHRpSXRlbUNvbmZpcm1BY3Rpb25PcHRpb25zPntcbiAgICAgICAgY29sbGVjdGlvbjogc2VsZWN0ZWQsXG4gICAgICAgIGluZGV4OiAnbWV0YWRhdGEubmFtZScsXG4gICAgICAgIG9uQ2xvc2U6IChyZXN1bHQ6Ym9vbGVhbikgPT4ge1xuICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkOkFycmF5PEt1YmVQb2Q+LCBuZXh0Okt1YmVQb2QpIHtcbiAgICAgICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgICAgICBsb2cuZGVidWcoXCJkZWxldGluZzogXCIsIGdldE5hbWUobmV4dCkpO1xuICAgICAgICAgICAgICAgIEt1YmVybmV0ZXMucmVzaXplQ29udHJvbGxlcigkaHR0cCwgS3ViZXJuZXRlc0FwaVVSTCwgbmV4dCwgMCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICBsb2cuZGVidWcoXCJ1cGRhdGVkIG51bWJlciBvZiByZXBsaWNhc1wiKTtcbiAgICAgICAgICAgICAgICAgICBLdWJlcm5ldGVzUmVwbGljYXRpb25Db250cm9sbGVycy5kZWxldGUoe1xuICAgICAgICAgICAgICAgICAgICAgaWQ6IGdldE5hbWUobmV4dClcbiAgICAgICAgICAgICAgICAgICB9LCB1bmRlZmluZWQsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcImRlbGV0ZWQ6IFwiLCBnZXROYW1lKG5leHQpKTtcbiAgICAgICAgICAgICAgICAgICAgIGlmKG5leHQubWV0YWRhdGEubGFiZWxzLnN0eWxlID09PSBcIm9yYWNsZVwiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZGVsZXRlIFwiICsgbmV4dC5tZXRhZGF0YS5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIEt1YmVybmV0ZXMuY29ubmVjdE9yYWNsZSgkaHR0cCwgJHRpbWVvdXQsIFwiL2NhbmNlbE9yYWNsZUNvbmVjdGlvblwiLCBcIlwiLCBnZXROYW1lKG5leHQpLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcbiAgICAgICAgICAgICAgICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcIkVycm9yIGRlbGV0aW5nOiBcIiwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpO1xuICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qS3ViZXJuZXRlc1JlcGxpY2F0aW9uQ29udHJvbGxlcnMuZGVsZXRlKHtcbiAgICAgICAgICAgICAgICAgIGlkOiBnZXROYW1lKG5leHQpXG4gICAgICAgICAgICAgICAgfSwgdW5kZWZpbmVkLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBsb2cuZGVidWcoXCJkZWxldGVkOiBcIiwgZ2V0TmFtZShuZXh0KSk7XG4gICAgICAgICAgICAgICAgICBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XG4gICAgICAgICAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICBsb2cuZGVidWcoXCJFcnJvciBkZWxldGluZzogXCIsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcbiAgICAgICAgICAgICAgICB9KTsqL1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB0aXRsZTogJ+aYr+WQpumcgOimgeWIoOmZpG9yYWNsZeacjeWKoe+8nycsXG4gICAgICAgIGFjdGlvbjogJ+S7peS4i+eahG9yYWNsZeacjeWKoeWwhuS8muiiq+WIoOmZpDonLFxuICAgICAgICBva1RleHQ6ICfliKDpmaQnLFxuICAgICAgICBva0NsYXNzOiAnYnRuLWRhbmdlcicsXG4gICAgICAgIGN1c3RvbTogXCLor6XmnI3liqHliKDpmaTlkI7lsIbkvJrmuIXpmaRvcmFjbGXlr7nlupTmnI3liqHnmoTnq6/lj6PnrYnotYTmupDljaDnlKjvvIzkvYbkuI3liKDpmaTmlbDmja7mlofku7bvvIzmmK/lkKbliKDpmaTvvIzor7fnoa7orqTvvIFcIixcbiAgICAgICAgY3VzdG9tQ2xhc3M6IFwiYWxlcnQgYWxlcnQtd2FybmluZ1wiLFxuICAgICAgICBjYW5jZWxUZXh0OiBcIuWPlua2iFwiXG4gICAgICB9KS5vcGVuKCk7XG4gICAgfVxuXG4gICAgJHNjb3BlLmNyZWF0ZVJDcz0gKCkgPT4ge1xuICAgICAgdmFyIHhocj0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xuICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT0gNCkgey8vNOihqOekuuaVsOaNruW3sue7j+iwg+eUqOWujOaIkFxuICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09IDIwMCkgey8vSFRUUOeahOeKtuaAgeeggVxuICAgICAgICAgICAgdmFyIG9iaj1KU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhvYmoucGF0aCk7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IG9iai5uYW1lO1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhuYW1lICsgXCI9PT09PVwiICtwb3J0KTtcbiAgICAgICAgICAgIHZhciBvYmplY3QgPSB7XG4gICAgICAgICAgICAgICBcIm5hbWVcIjogbmFtZSxcbiAgICAgICAgICAgICAgIFwibGFiZWxzXCI6IHtcbiAgICAgICAgICAgICAgICAgIFwibmFtZVwiIDogbmFtZVxuICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgIFwicGF0aFwiOiBvYmoucGF0aCxcbiAgICAgICAgICAgICAgIFwiaXNUYXJnZXRcIjogXCJ0cnVlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKG9iamVjdCk7XG4gICAgICAgICAgICBLdWJlcm5ldGVzLmNyZWF0ZVJDKG9iamVjdCwgKHJjKSA9PntcbiAgICAgICAgICAgICAgICAkaHR0cCh7XG4gICAgICAgICAgICAgICAgICAgdXJsOicveG1sZm9ybXNlcnZlcicsXG4gICAgICAgICAgICAgICAgICAgbWV0aG9kOidQb3N0J1xuICAgICAgICAgICAgICAgIH0pLnN1Y2Nlc3MoZnVuY3Rpb24oZGF0YSxoZWFkZXIsY29uZmlnLHN0YXR1cyl7XG4gICAgICAgICAgICAgICAgICAgICBpZihkYXRhKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhSW5mb01vZGVsLnNlcnZlcmRhdGEgPSBkYXRhO1xuICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLmVycm9yKGZ1bmN0aW9uKGRhdGEsaGVhZGVyLGNvbmZpZyxzdGF0dXMpe1xuICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJlcnJvclwiKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBLdWJlcm5ldGVzLmNvbm5lY3RPcmFjbGUoJGh0dHAsICR0aW1lb3V0LCBcIi9jb25uZWN0VG9PcmFjbGVcIiwgXCJcIiwgZ2V0TmFtZShyYyksIDApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfWVsc2UgaWYoeGhyLnN0YXR1cyA9PSA0MDMpe1xuICAgICAgICAgICAgIGFsZXJ0KFwi5Lik5qyh5Yib5bu6b3JhY2xl5pyN5Yqh5pe26Ze06Ze06ZqU6ZyA6KaB6LaF6L+HMuWIhumSnyFcIik7XG4gICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgeGhyLm9wZW4oXCJQT1NUXCIsIFwiL29yYWNsZUFwcFBhdGhcIiwgZmFsc2UpOy8v5LiO5pyN5Yqh5Zmo6L+e5o6l5bm25Y+R6YCBXG4gICAgICB4aHIuc2VuZChudWxsKTtcbiAgICB9XG5cbiAgICAkc2NvcGUuc3RvcFByb21wdCA9IChzZWxlY3RlZCkgPT57XG4gICAgICBpZiAoYW5ndWxhci5pc1N0cmluZyhzZWxlY3RlZCkpIHtcbiAgICAgICAgc2VsZWN0ZWQgPSBbe1xuICAgICAgICAgIGlkOiBzZWxlY3RlZFxuICAgICAgICB9XTtcbiAgICAgIH1cblxuICAgICAgVUkubXVsdGlJdGVtQ29uZmlybUFjdGlvbkRpYWxvZyg8VUkuTXVsdGlJdGVtQ29uZmlybUFjdGlvbk9wdGlvbnM+e1xuICAgICAgICBjb2xsZWN0aW9uOiBzZWxlY3RlZCxcbiAgICAgICAgaW5kZXg6ICdtZXRhZGF0YS5uYW1lJyxcbiAgICAgICAgb25DbG9zZTogKHJlc3VsdDpib29sZWFuKSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgZnVuY3Rpb24gc3RvcFNlbGVjdGVkKHNlbGVjdGVkOkFycmF5PEt1YmVQb2Q+LCBuZXh0Okt1YmVQb2QpIHtcbiAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgS3ViZXJuZXRlcy5yZXNpemVDb250cm9sbGVyKCRodHRwLCBLdWJlcm5ldGVzQXBpVVJMLCBuZXh0LCAwLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgIGlmKG5leHQubWV0YWRhdGEubGFiZWxzLnN0eWxlID09PSBcIm9yYWNsZVwiKXtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJzdG9wIFwiICsgbmV4dC5tZXRhZGF0YS5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgS3ViZXJuZXRlcy5jb25uZWN0T3JhY2xlKCRodHRwLCAkdGltZW91dCwgXCIvY2FuY2VsT3JhY2xlQ29uZWN0aW9uXCIsIFwiXCIsIGdldE5hbWUobmV4dCksIDApO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgIHN0b3BTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XG4gICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICB9XG4gICAgICAgICAgIH1cbiAgICAgICAgICAgc3RvcFNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcbiAgICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB0aXRsZTogJ+aYr+WQpumcgOimgeWBnOatom9yYWNsZeacjeWKoe+8nycsXG4gICAgICBhY3Rpb246ICfku6XkuIvnmoRvcmFjbGXmnI3liqHlsIbkvJrooqvlgZzmraI6JyxcbiAgICAgIG9rVGV4dDogJ+WBnOatoicsXG4gICAgICBva0NsYXNzOiAnYnRuLWRhbmdlcicsXG4gICAgICBjdXN0b206IFwi6K+l5pyN5Yqh5YGc5q2i5ZCO5bCG5peg5rOV57un57ut5o+Q5L6b6L+e5o6l6K6/6Zeu5pyN5Yqh77yM5L2G5Y+v6YCa6L+H5ZCv5Yqo5oyJ6ZKu6YeN5paw5ZCv5Yqo6K+l5pyN5Yqh5Lul6L+b6KGM6K6/6Zeu44CC5piv5ZCm5YGc5q2i77yM6K+356Gu6K6kXCIsXG4gICAgICBjdXN0b21DbGFzczogXCJhbGVydCBhbGVydC13YXJuaW5nXCIsXG4gICAgICBjYW5jZWxUZXh0OiBcIuWPlua2iFwiXG4gICAgfSkub3BlbigpO1xuICAgfTtcblxuICAgJHNjb3BlLnJlU3RhcnRQcm9tcHQgPSAoc2VsZWN0ZWQpID0+IHtcbiAgICAgIGZ1bmN0aW9uIHN0YXJ0U2VsZWN0ZWQoc2VsZWN0ZWQ6QXJyYXk8S3ViZVBvZD4sIG5leHQ6S3ViZVBvZCl7XG4gICAgICAgICBpZihuZXh0KXtcbiAgICAgICAgICAgIGlmKG5leHQuJHJlcGxpY2FzID09PSAwKVxuICAgICAgICAgICAgICAgS3ViZXJuZXRlcy5yZXNpemVDb250cm9sbGVyKCRodHRwLCBLdWJlcm5ldGVzQXBpVVJMLCBuZXh0LCAxLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJyZXN0YXJ0IFwiICsgbmV4dC5tZXRhZGF0YS5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICBLdWJlcm5ldGVzLmNvbm5lY3RPcmFjbGUoJGh0dHAsICR0aW1lb3V0LCBcIi9jb25uZWN0VG9PcmFjbGVcIiwgXCJcIiwgZ2V0TmFtZShuZXh0KSwgMCk7XG4gICAgICAgICAgICAgICAgICAgc3RhcnRTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XG4gICAgICAgICAgICAgICB9KTtcbiAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHN0YXJ0U2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpO1xuICAgfTtcblxuICAgJHNjb3BlLmV4dHJhY3REYXRhID0ge1xuICAgICAgIGl0ZW1zOiBudWxsLFxuICAgICAgIHNlbGVjdGVkSXRlbTogJHNjb3BlLmZpbHRlclJlcGxpY2F0aW9uQ29udHJvbGxlcnNbMF0gfHwgXCJcIixcbiAgICAgICBkaWFsb2c6IG5ldyBVSS5EaWFsb2coKSxcbiAgICAgICBvbk9rOiAoKSA9PiB7XG4gICAgICAgICAgICAgICB2YXIgZXh0cmFjdERhdGEgPSAkc2NvcGUuZXh0cmFjdERhdGE7XG4gICAgICAgICAgICAgICBleHRyYWN0RGF0YS5kaWFsb2cuY2xvc2UoKTtcbiAgICAgICAgICAgICAgIHZhciBmaWx0ZXJSZXBsaWNhdGlvbkNvbnRyb2xsZXIgPSBleHRyYWN0RGF0YS5zZWxlY3RlZEl0ZW07XG4gICAgICAgICAgICAgICBLdWJlcm5ldGVzLmV4dHJhY3REYXRhVG9PcmFjbGUoJGh0dHAsIGV4dHJhY3REYXRhLml0ZW1zLCBmaWx0ZXJSZXBsaWNhdGlvbkNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgZXh0cmFjdERhdGEuc2VsZWN0ZWRJdGVtID0gJHNjb3BlLmZpbHRlclJlcGxpY2F0aW9uQ29udHJvbGxlcnNbMF0gfHwgXCJcIjtcbiAgICAgICB9LFxuICAgICAgIG9wZW46IChzZWxlY3RlZCkgPT4ge1xuICAgICAgICAgICB2YXIgZXh0cmFjdERhdGEgPSAkc2NvcGUuZXh0cmFjdERhdGE7XG4gICAgICAgICAgIGV4dHJhY3REYXRhLmRpYWxvZy5vcGVuKCk7XG4gICAgICAgICAgIGV4dHJhY3REYXRhLnNlbGVjdGVkSXRlbSA9ICRzY29wZS5maWx0ZXJSZXBsaWNhdGlvbkNvbnRyb2xsZXJzWzBdIHx8IFwiXCI7XG4gICAgICAgICAgIGV4dHJhY3REYXRhLml0ZW1zID0gc2VsZWN0ZWQ7XG4gICAgICAgICAgICR0aW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICQoJyNuZXdEYXRhTmFtZScpLmZvY3VzKCk7XG4gICAgICAgICAgIH0sIDUwKTtcbiAgICAgICB9LFxuICAgICAgIGNsb3NlOiAoKSA9PiB7XG4gICAgICAgICAgICRzY29wZS5leHRyYWN0RGF0YS5kaWFsb2cuY2xvc2UoKTtcbiAgICAgICB9XG4gICB9O1xuXG4gIH1dKTtcbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSW50ZXJmYWNlcy50c1wiLz5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblxuICBleHBvcnQgZnVuY3Rpb24gc2NoZW1hU2V0UmVxdWlyZWQoc2NoZW1hLCBwcm9wZXJ0eU5hbWUsIGlzUmVxdWlyZWQgPSB0cnVlKSB7XG4gICAgaWYgKHNjaGVtYSAmJiBwcm9wZXJ0eU5hbWUpIHtcbiAgICAgIHZhciByZXF1aXJlZCA9IHNjaGVtYS5yZXF1aXJlZDtcbiAgICAgIGlmIChpc1JlcXVpcmVkKSB7XG4gICAgICAgIGlmICghcmVxdWlyZWQpIHtcbiAgICAgICAgICByZXF1aXJlZCA9IFtdO1xuICAgICAgICAgIHNjaGVtYS5yZXF1aXJlZCA9IHJlcXVpcmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmICghXy5jb250YWlucyhyZXF1aXJlZCwgcHJvcGVydHlOYW1lKSkge1xuICAgICAgICAgIHJlcXVpcmVkLnB1c2gocHJvcGVydHlOYW1lKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHJlcXVpcmVkKSB7XG4gICAgICAgICAgdmFyIGlkeCA9IHJlcXVpcmVkLmluZGV4T2YocHJvcGVydHlOYW1lKTtcbiAgICAgICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgICAgIHJlcXVpcmVkLnNwbGljZShpZHgsIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblxuICBleHBvcnQgdmFyIFNlY3JldENvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiU2VjcmV0Q29udHJvbGxlclwiLFxuICAgIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIkt1YmVybmV0ZXNTY2hlbWFcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsIFwiSzhTQ2xpZW50RmFjdG9yeVwiLFxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLFxuICAgICAgICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMLCBLOFNDbGllbnRGYWN0b3J5KSA9PiB7XG5cbiAgICAgICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XG4gICAgICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcbiAgICAgICAgJHNjb3BlLmlkID0gJHJvdXRlUGFyYW1zW1wiaWRcIl07XG5cbiAgICAgICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xuICAgICAgICBzZWxlY3RTdWJOYXZCYXIoJHNjb3BlLCBcIlNlY3JldHNcIiwgJHNjb3BlLmlkID8gXCJFZGl0IFNlY3JldDogXCIgKyAkc2NvcGUuaWQgOiBcIkNyZWF0ZSBTZWNyZXRcIik7XG5cbiAgICAgICAgdmFyIGt1YmVDbGllbnQgPSBjcmVhdGVLdWJlcm5ldGVzQ2xpZW50KFwic2VjcmV0c1wiKTtcblxuICAgICAgICB2YXIgb25TYXZlVXJsID0gJGxvY2F0aW9uLnNlYXJjaCgpW1wic2F2ZWRVcmxcIl07XG4gICAgICAgIHZhciBjcmVhdGVLaW5kID0gJGxvY2F0aW9uLnNlYXJjaCgpW1wia2luZFwiXTtcblxuICAgICAgICAkc2NvcGUuc3NoS2V5cyA9IHNzaFNlY3JldERhdGFLZXlzO1xuICAgICAgICAkc2NvcGUuaHR0cHNLZXlzID0gaHR0cHNTZWNyZXREYXRhS2V5cztcblxuICAgICAgICB2YXIgc2VjcmV0TGFiZWxzID0ge1xuICAgICAgICAgIFwic3NoLWtleVwiOiBcIlNTSCBwcml2YXRlIGtleVwiLFxuICAgICAgICAgIFwic3NoLWtleS5wdWJcIjogXCJTU0ggcHVibGljIGtleVwiLFxuICAgICAgICAgIFwiY2EuY3J0XCI6IFwiQ0EgQ2VydGlmaWNhdGVcIixcbiAgICAgICAgICBcIi5kb2NrZXJjZmdcIjogXCJEb2NrZXIgY29uZmlnXCIsXG4gICAgICAgICAgXCJ1c2VybmFtZVwiOiBcIlVzZXIgbmFtZVwiXG4gICAgICAgIH07XG4gICAgICAgIHZhciBzZWNyZXRUb29sdGlwcyA9IHtcbiAgICAgICAgICBcInNzaC1rZXlcIjogXCJTU0ggcHJpdmF0ZSBrZXkgdGV4dCBjb250ZW50c1wiLFxuICAgICAgICAgIFwiY2EuY3J0XCI6IFwiQ2VydGlmaWNhdGUgQXV0aG9yaXR5IChDQSkgQ2VydGlmaWNhdGVcIixcbiAgICAgICAgICBcIi5kb2NrZXJjZmdcIjogXCJEb2NrZXIgY29uZmlndXJhdGlvbiB0b2tlblwiXG4gICAgICAgIH07XG5cblxuICAgICAgICAkc2NvcGUuJG9uKCdrdWJlcm5ldGVzTW9kZWxVcGRhdGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICgkc2NvcGUuaWQgJiYgISRzY29wZS5zZWNyZXQpIHtcbiAgICAgICAgICAgIHVwZGF0ZURhdGEoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgICRzY29wZS4kb24oJyRyb3V0ZVVwZGF0ZScsICgkZXZlbnQpID0+IHtcbiAgICAgICAgICB1cGRhdGVEYXRhKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgICRzY29wZS5wcm9wZXJ0eUtleXMgPSAoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIF8ua2V5cyhzZWNyZXRMYWJlbHMpO1xuICAgICAgICB9O1xuXG4gICAgICAgICRzY29wZS5jaGVja05hbWVVbmlxdWUgPSAodmFsdWUpID0+IHtcbiAgICAgICAgICB2YXIgYW5zd2VyID0gdHJ1ZTtcbiAgICAgICAgICBhbmd1bGFyLmZvckVhY2goJHNjb3BlLm1vZGVsLnNlY3JldHMsIChzZWNyZXQpID0+IHtcbiAgICAgICAgICAgIHZhciBuYW1lID0gZ2V0TmFtZShzZWNyZXQpO1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSBuYW1lKSB7XG4gICAgICAgICAgICAgIGFuc3dlciA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBhbnN3ZXI7XG4gICAgICAgIH07XG5cbiAgICAgICAgJHNjb3BlLmNoZWNrRmllbGRVbmlxdWUgPSAoa2V5KSA9PiB7XG4gICAgICAgICAgcmV0dXJuICRzY29wZS5lbnRpdHkucHJvcGVydGllc1trZXldID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICB9O1xuXG4gICAgICAgICRzY29wZS5oYXNBbGxLZXlzID0gKGtleXMpID0+IHtcbiAgICAgICAgICB2YXIgYW5zd2VyID0ga2V5cyAmJiBrZXlzLmxlbmd0aDtcbiAgICAgICAgICBhbmd1bGFyLmZvckVhY2goa2V5cywgKGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKCEkc2NvcGUuZW50aXR5LnByb3BlcnRpZXNba2V5XSkge1xuICAgICAgICAgICAgICBhbnN3ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gYW5zd2VyO1xuICAgICAgICB9O1xuXG4gICAgICAgICRzY29wZS5hZGRGaWVsZERpYWxvZyA9IHtcbiAgICAgICAgICBjb250cm9sbGVyOiBudWxsLFxuICAgICAgICAgIG5ld1JlcGxpY2FzOiAwLFxuICAgICAgICAgIGRpYWxvZzogbmV3IFVJLkRpYWxvZygpLFxuICAgICAgICAgIG9uT2s6ICgpID0+IHtcbiAgICAgICAgICAgICRzY29wZS5hZGRGaWVsZERpYWxvZy5kaWFsb2cuY2xvc2UoKTtcbiAgICAgICAgICAgICRzY29wZS5hZGREYXRhRmllbGQoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9wZW46IChjb250cm9sbGVyKSA9PiB7XG4gICAgICAgICAgICB2YXIgYWRkRmllbGREaWFsb2cgPSAkc2NvcGUuYWRkRmllbGREaWFsb2c7XG4gICAgICAgICAgICBhZGRGaWVsZERpYWxvZy5kaWFsb2cub3BlbigpO1xuXG4gICAgICAgICAgICAkdGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICQoJyNuZXdEYXRhTmFtZScpLmZvY3VzKCk7XG4gICAgICAgICAgICB9LCA1MCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBjbG9zZTogKCkgPT4ge1xuICAgICAgICAgICAgJHNjb3BlLmFkZEZpZWxkRGlhbG9nLmRpYWxvZy5jbG9zZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuXG5cbiAgICAgICAgJHNjb3BlLmVudGl0eUNoYW5nZWQgPSAoKSA9PiB7XG4gICAgICAgICAgJHNjb3BlLmNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9O1xuXG4gICAgICAgICRzY29wZS5hZGRGaWVsZHMgPSAoa2V5cykgPT4ge1xuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChrZXlzLCAoa2V5KSA9PiBhZGRGaWVsZChrZXkpKTtcbiAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIGFkZEZpZWxkKGtleSkge1xuICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IGNyZWF0ZVByb3BlcnR5KGtleSwgXCJcIik7XG4gICAgICAgICAgJHNjb3BlLmVudGl0eS5wcm9wZXJ0aWVzW2tleV0gPSBwcm9wZXJ0eTtcbiAgICAgICAgICAkc2NvcGUuZW50aXR5Lm5ld0RhdGFLZXkgPSBcIlwiO1xuICAgICAgICAgICRzY29wZS5zaG93QWRkRGF0YUZpZWxkRm9ybSA9IGZhbHNlO1xuICAgICAgICAgICRzY29wZS5lbnRpdHlDaGFuZ2VkKCk7XG4gICAgICAgIH1cblxuICAgICAgICAkc2NvcGUuYWRkRGF0YUZpZWxkID0gKCkgPT4ge1xuICAgICAgICAgIHZhciBrZXkgPSAkc2NvcGUuZW50aXR5Lm5ld0RhdGFLZXk7XG4gICAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgYWRkRmllbGQoa2V5KTtcbiAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgICRzY29wZS5kZWxldGVQcm9wZXJ0eSA9IChrZXkpID0+IHtcbiAgICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBkZWxldGUgJHNjb3BlLmVudGl0eS5wcm9wZXJ0aWVzW2tleV07XG4gICAgICAgICAgICAkc2NvcGUuZW50aXR5Q2hhbmdlZCgpO1xuICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgJHNjb3BlLmNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgICB1cGRhdGVEYXRhKCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgJHNjb3BlLnNhdmUgPSAoKSA9PiB7XG4gICAgICAgICAgdmFyIGVudGl0eSA9ICRzY29wZS5lbnRpdHkgfHwge307XG4gICAgICAgICAgdmFyIG5hbWUgPSBlbnRpdHkubmFtZTtcbiAgICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgICAgaWYgKCEkc2NvcGUuc2VjcmV0KSB7XG4gICAgICAgICAgICAgICRzY29wZS5zZWNyZXQgPSB7XG4gICAgICAgICAgICAgICAgYXBpVmVyc2lvbjogS3ViZXJuZXRlcy5kZWZhdWx0QXBpVmVyc2lvbixcbiAgICAgICAgICAgICAgICBraW5kOiBcIlNlY3JldFwiLFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBcIlwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBkYXRhOiB7fVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZGF0YSA9IHt9O1xuICAgICAgICAgICAgYW5ndWxhci5mb3JFYWNoKGVudGl0eS5wcm9wZXJ0aWVzLCAocHJvcGVydHkpID0+IHtcbiAgICAgICAgICAgICAgdmFyIGtleSA9IHByb3BlcnR5LmtleTtcbiAgICAgICAgICAgICAgdmFyIHZhbHVlID0gcHJvcGVydHkudmFsdWUgfHwgXCJcIjtcbiAgICAgICAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgICAgIGRhdGFba2V5XSA9IHdpbmRvdy5idG9hKHZhbHVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAkc2NvcGUuc2VjcmV0Lm1ldGFkYXRhLm5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgJHNjb3BlLnNlY3JldC5kYXRhID0gZGF0YTtcblxuICAgICAgICAgICAgQ29yZS5ub3RpZmljYXRpb24oJ2luZm8nLCBcIlNhdmluZyBzZWNyZXQgXCIgKyBuYW1lKTtcblxuICAgICAgICAgICAga3ViZUNsaWVudC5wdXQoJHNjb3BlLnNlY3JldCxcbiAgICAgICAgICAgICAgKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgc2VjcmV0c0xpbmsgPSBvblNhdmVVcmwgfHwgRGV2ZWxvcGVyLm5hbWVzcGFjZUxpbmsoJHNjb3BlLCAkcm91dGVQYXJhbXMsIFwic2VjcmV0c1wiKTtcbiAgICAgICAgICAgICAgICB2YXIgcGFyYW1zID0ge307XG4gICAgICAgICAgICAgICAgaWYgKG9uU2F2ZVVybCkge1xuICAgICAgICAgICAgICAgICAgcGFyYW1zWydzZWNyZXQnXSA9IG5hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICRsb2NhdGlvbi5wYXRoKHNlY3JldHNMaW5rKTtcbiAgICAgICAgICAgICAgICAkbG9jYXRpb24uc2VhcmNoKHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgbG9nLmluZm8oXCJuYXZpZ2F0aW5nIHRvIFVSTDogXCIgKyBzZWNyZXRzTGluayArIFwiIHdpdGggcGFyYW1zIFwiICsgYW5ndWxhci50b0pzb24oJGxvY2F0aW9uLnNlYXJjaCgpKSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICBDb3JlLm5vdGlmaWNhdGlvbignZXJyb3InLCBcIkZhaWxlZCB0byBzZWNyZXQgXCIgKyBuYW1lICsgXCJcXG5cIiArIGVycik7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB1cGRhdGVEYXRhKCk7XG5cbiAgICAgICAgZnVuY3Rpb24gY3JlYXRlUHJvcGVydHkoa2V5LCB0ZXh0KSB7XG4gICAgICAgICAgdmFyIGxhYmVsID0gc2VjcmV0TGFiZWxzW2tleV0gfHwgQ29yZS5odW1hbml6ZVZhbHVlKGtleSk7XG4gICAgICAgICAgdmFyIHRvb2x0aXAgPSBzZWNyZXRUb29sdGlwc1trZXldIHx8IFwiVmFsdWUgb2YgdGhlIFwiICsgbGFiZWw7XG5cbiAgICAgICAgICB2YXIgcm93cyA9IDU7XG4gICAgICAgICAgdmFyIGxpbmVzID0gdGV4dC5zcGxpdChcIlxcblwiKS5sZW5ndGggKyAxO1xuICAgICAgICAgIGlmIChsaW5lcyA+IHJvd3MpIHtcbiAgICAgICAgICAgIHJvd3MgPSBsaW5lcztcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIHR5cGUgPSBcInRleHRhcmVhXCI7XG4gICAgICAgICAgaWYgKGtleSA9PT0gXCJ1c2VybmFtZVwiKSB7XG4gICAgICAgICAgICB0eXBlID0gXCJ0ZXh0XCI7XG4gICAgICAgICAgICBpZiAoIXRleHQpIHtcbiAgICAgICAgICAgICAgdGV4dCA9IGN1cnJlbnRVc2VyTmFtZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcInBhc3N3b3JkXCIpIHtcbiAgICAgICAgICAgIHR5cGUgPSBcInBhc3N3b3JkXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IHtcbiAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgbGFiZWw6IGxhYmVsLFxuICAgICAgICAgICAgdG9vbHRpcDogdG9vbHRpcCxcbiAgICAgICAgICAgIHJvd3M6IHJvd3MsXG4gICAgICAgICAgICB2YWx1ZTogdGV4dCxcbiAgICAgICAgICAgIHR5cGU6IHR5cGVcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZURhdGEoKSB7XG4gICAgICAgICAgJHNjb3BlLml0ZW0gPSBudWxsO1xuICAgICAgICAgICRzY29wZS5jaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgICAgJHNjb3BlLmVudGl0eSA9IHtcbiAgICAgICAgICAgIG5hbWU6ICRzY29wZS5pZCxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHt9XG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAoJHNjb3BlLmlkKSB7XG4gICAgICAgICAgICBhbmd1bGFyLmZvckVhY2goJHNjb3BlLm1vZGVsLnNlY3JldHMsIChzZWNyZXQpID0+IHtcbiAgICAgICAgICAgICAgdmFyIG5hbWUgPSBnZXROYW1lKHNlY3JldCk7XG4gICAgICAgICAgICAgIGlmIChuYW1lID09PSAkc2NvcGUuaWQpIHtcbiAgICAgICAgICAgICAgICAkc2NvcGUuc2VjcmV0ID0gc2VjcmV0O1xuICAgICAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChzZWNyZXQuZGF0YSwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgIGlmIChhbmd1bGFyLmlzU3RyaW5nKHZhbHVlKSAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gd2luZG93LmF0b2IodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gY3JlYXRlUHJvcGVydHkoa2V5LCB0ZXh0KTtcbiAgICAgICAgICAgICAgICAgICRzY29wZS5lbnRpdHkucHJvcGVydGllc1trZXldID0gcHJvcGVydHk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgJHNjb3BlLmZldGNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoY3JlYXRlS2luZCA9PT0gXCJzc2hcIikge1xuICAgICAgICAgICAgICAkc2NvcGUuYWRkRmllbGRzKCRzY29wZS5zc2hLZXlzKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY3JlYXRlS2luZCA9PT0gXCJodHRwc1wiKSB7XG4gICAgICAgICAgICAgICRzY29wZS5hZGRGaWVsZHMoJHNjb3BlLmh0dHBzS2V5cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XG4gICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc01vZGVsLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cInV0aWxIZWxwZXJzLnRzXCIvPlxuXG5tb2R1bGUgS3ViZXJuZXRlcyB7XG5cbiAgZXhwb3J0IHZhciBTZWNyZXRzQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJTZWNyZXRzQ29udHJvbGxlclwiLCBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCJTZXJ2aWNlUmVnaXN0cnlcIiwgXCIkZGlhbG9nXCIsIFwiJHdpbmRvd1wiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGxvY2F0aW9uXCIsIFwibG9jYWxTdG9yYWdlXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcbiAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6IEt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBTZXJ2aWNlUmVnaXN0cnksICRkaWFsb2csICR3aW5kb3csICR0ZW1wbGF0ZUNhY2hlLCAkcm91dGVQYXJhbXMsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCBsb2NhbFN0b3JhZ2UsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xuXG4gICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XG4gICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xuICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgIH0pO1xuXG4gICAgJHNjb3BlLiRjcmVhdGVTZWNyZXRMaW5rID0gRGV2ZWxvcGVyLm5hbWVzcGFjZUxpbmsoJHNjb3BlLCAkcm91dGVQYXJhbXMsIFwic2VjcmV0Q3JlYXRlXCIpO1xuXG4gICAgdmFyIGt1YmVDbGllbnQgPSBjcmVhdGVLdWJlcm5ldGVzQ2xpZW50KFwic2VjcmV0c1wiKTtcblxuICAgICRzY29wZS50YWJsZUNvbmZpZyA9IHtcbiAgICAgIGRhdGE6ICdtb2RlbC5zZWNyZXRzJyxcbiAgICAgIHNob3dTZWxlY3Rpb25DaGVja2JveDogdHJ1ZSxcbiAgICAgIGVuYWJsZVJvd0NsaWNrU2VsZWN0aW9uOiBmYWxzZSxcbiAgICAgIG11bHRpU2VsZWN0OiB0cnVlLFxuICAgICAgc2VsZWN0ZWRJdGVtczogW10sXG4gICAgICBmaWx0ZXJPcHRpb25zOiB7XG4gICAgICAgIGZpbHRlclRleHQ6ICRsb2NhdGlvbi5zZWFyY2goKVtcInFcIl0gfHwgJydcbiAgICAgIH0sXG4gICAgICBjb2x1bW5EZWZzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaWVsZDogJ19rZXknLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTmFtZScsXG4gICAgICAgICAgZGVmYXVsdFNvcnQ6IHRydWUsXG4gICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJpZFRlbXBsYXRlLmh0bWxcIilcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGZpZWxkOiAnJGxhYmVsc1RleHQnLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTGFiZWxzJyxcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImxhYmVsVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICB9LFxuICAgICAgXVxuICAgIH07XG5cbiAgICAkc2NvcGUuZGVsZXRlUHJvbXB0ID0gKHNlbGVjdGVkKSA9PiB7XG4gICAgICAgVUkubXVsdGlJdGVtQ29uZmlybUFjdGlvbkRpYWxvZyg8VUkuTXVsdGlJdGVtQ29uZmlybUFjdGlvbk9wdGlvbnM+e1xuICAgICAgICAgY29sbGVjdGlvbjogc2VsZWN0ZWQsXG4gICAgICAgICBpbmRleDogJ21ldGFkYXRhLm5hbWUnLFxuICAgICAgICAgb25DbG9zZTogKHJlc3VsdDpib29sZWFuKSA9PiB7XG4gICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICBmdW5jdGlvbiBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgbmV4dCkge1xuICAgICAgICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgICAgICAga3ViZUNsaWVudC5kZWxldGUobmV4dCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcbiAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAvLyBUT0RPXG4gICAgICAgICAgICAgICAgIC8vIHVwZGF0ZURhdGEoKTtcbiAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XG4gICAgICAgICAgIH1cbiAgICAgICAgIH0sXG4gICAgICAgICB0aXRsZTogJ0RlbGV0ZSBTZWNyZXRzJyxcbiAgICAgICAgIGFjdGlvbjogJ1RoZSBmb2xsb3dpbmcgU2VjcmV0cyB3aWxsIGJlIGRlbGV0ZWQ6JyxcbiAgICAgICAgIG9rVGV4dDogJ0RlbGV0ZScsXG4gICAgICAgICBva0NsYXNzOiAnYnRuLWRhbmdlcicsXG4gICAgICAgICBjdXN0b206IFwiVGhpcyBvcGVyYXRpb24gaXMgcGVybWFuZW50IG9uY2UgY29tcGxldGVkIVwiLFxuICAgICAgICAgY3VzdG9tQ2xhc3M6IFwiYWxlcnQgYWxlcnQtd2FybmluZ1wiXG4gICAgICAgfSkub3BlbigpO1xuICAgICB9O1xuXG4gICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xuICB9XSk7XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIGV4cG9ydCB2YXIgU2VydmljZUNvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiU2VydmljZUNvbnRyb2xsZXJcIixcbiAgICBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXG4gICAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6IEt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLFxuICAgICAgICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XG5cbiAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XG4gICAgJHNjb3BlLnJhd01vZGVsID0gbnVsbDtcblxuICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcblxuICAgICRzY29wZS5pdGVtQ29uZmlnID0ge1xuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAnXlxcXFwvbGFiZWxzJCc6IHtcbiAgICAgICAgICB0ZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KCdsYWJlbFRlbXBsYXRlLmh0bWwnKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICB1cGRhdGVEYXRhKCk7XG4gICAgfSk7XG5cbiAgICAkc2NvcGUuJHdhdGNoKCdtb2RlbC5zZXJ2aWNlcycsIChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IHtcbiAgICAgIHVwZGF0ZURhdGEoKTtcbiAgICB9LCB0cnVlKTtcblxuICAgICRzY29wZS4kb24oJyRyb3V0ZVVwZGF0ZScsICgkZXZlbnQpID0+IHtcbiAgICAgIHVwZGF0ZURhdGEoKTtcbiAgICB9KTtcblxuICAgICRzY29wZS5mbGlwUmF3ID0gKCkgPT4ge1xuICAgICAgJHNjb3BlLnJhd01vZGUgPSAhJHNjb3BlLnJhd01vZGU7XG4gICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgIH07XG5cbiAgICB1cGRhdGVEYXRhKCk7XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xuICAgICAgJHNjb3BlLmlkID0gJHJvdXRlUGFyYW1zW1wiaWRcIl07XG4gICAgICAkc2NvcGUubmFtZXNwYWNlID0gJHJvdXRlUGFyYW1zW1wibmFtZXNwYWNlXCJdIHx8IEt1YmVybmV0ZXNTdGF0ZS5zZWxlY3RlZE5hbWVzcGFjZTtcbiAgICAgICRzY29wZS5pdGVtID0gJHNjb3BlLm1vZGVsLmdldFNlcnZpY2UoJHNjb3BlLm5hbWVzcGFjZSwgJHNjb3BlLmlkKTtcbiAgICAgIGlmICgkc2NvcGUuaXRlbSkge1xuICAgICAgICAkc2NvcGUucmF3TW9kZWwgPSB0b1Jhd1lhbWwoJHNjb3BlLml0ZW0pO1xuICAgICAgfVxuICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICB9XG4gIH1dKTtcbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSGVscGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxuXG5tb2R1bGUgS3ViZXJuZXRlcyB7XG5cbiAgZXhwb3J0IHZhciBTZXJ2aWNlRWRpdENvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiU2VydmljZUVkaXRDb250cm9sbGVyXCIsXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiS3ViZXJuZXRlc1NjaGVtYVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIiwgXCJTY2hlbWFSZWdpc3RyeVwiLFxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOiBLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc1NjaGVtYSxcbiAgICAgICAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCwgc2NoZW1hczpIYXd0aW9Gb3Jtcy5TY2hlbWFSZWdpc3RyeSkgPT4ge1xuXG4gICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XG4gICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xuICAgICRzY29wZS5pZCA9ICRyb3V0ZVBhcmFtc1tcImlkXCJdO1xuICAgICRzY29wZS5zY2hlbWEgPSBLdWJlcm5ldGVzU2NoZW1hO1xuICAgICRzY29wZS5jb25maWcgPSBzY2hlbWFzLmNsb25lU2NoZW1hKFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZXJ2aWNlXCIpO1xuICAgIC8vJHNjb3BlLmNvbmZpZyA9IEt1YmVybmV0ZXNTY2hlbWEuZGVmaW5pdGlvbnMua3ViZXJuZXRlc192MWJldGEyX1NlcnZpY2U7XG5cbiAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XG5cbiAgICAkc2NvcGUuJG9uKCckcm91dGVVcGRhdGUnLCAoJGV2ZW50KSA9PiB7XG4gICAgICB1cGRhdGVEYXRhKCk7XG4gICAgfSk7XG5cbiAgICB1cGRhdGVEYXRhKCk7XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xuICAgICAgaWYgKCRzY29wZS5pZCkge1xuICAgICAgICAkc2NvcGUuZW50aXR5ID0gJHNjb3BlLm1vZGVsLmdldFNlcnZpY2UoS3ViZXJuZXRlc1N0YXRlLnNlbGVjdGVkTmFtZXNwYWNlLCAkc2NvcGUuaWQpO1xuICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XSk7XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzTW9kZWwudHNcIi8+XG5cbm1vZHVsZSBLdWJlcm5ldGVzIHtcblxuICBfbW9kdWxlLmZhY3RvcnkoJ1NlcnZpY2VSZWdpc3RyeScsIFsoKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBTZXJ2aWNlUmVnaXN0cnlTZXJ2aWNlKCk7XG4gIH1dKTtcblxuICAvKipcbiAgICogUmVwcmVzZW50cyBhIHNpbXBsZSBpbnRlcmZhY2UgdG8gc2VydmljZSBkaXNjb3ZlcnkgdGhhdCBjYW4gYmUgdXNlZCBlYXJseSBvbiBpbiB0aGUgYXBwbGljYXRpb24gbGlmZWN5Y2xlIGJlZm9yZSB0aGVcbiAgICogdW5kZXJseWluZyBtb2RlbCBoYXMgYmVlbiBjcmVhdGVkIHZpYSBkZXBlbmRlbmN5IGluamVjdGlvblxuICAgKi9cbiAgZXhwb3J0IGNsYXNzIFNlcnZpY2VSZWdpc3RyeVNlcnZpY2Uge1xuICAgIHByaXZhdGUgbW9kZWw6S3ViZXJuZXRlc01vZGVsU2VydmljZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYSBzZXJ2aWNlIGF2YWlsYWJsZSBmb3IgdGhlIGdpdmVuIElEIG9yIGZhbHNlXG4gICAgICovXG4gICAgcHVibGljIGhhc1NlcnZpY2Uoc2VydmljZU5hbWU6IHN0cmluZykge1xuICAgICAgcmV0dXJuIHRoaXMuZmluZFNlcnZpY2Uoc2VydmljZU5hbWUpID8gdHJ1ZSA6IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHNlcnZpY2UgZm9yIHRoZSBnaXZlbiBzZXJ2aWNlIG5hbWUgKElEKSBvciBudWxsIGlmIGl0IGNhbm5vdCBiZSBmb3VuZFxuICAgICAqXG4gICAgICogQHBhcmFtIHNlcnZpY2VOYW1lIHRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlIHRvIGxvb2sgZm9yXG4gICAgICogQHJldHVybiB7bnVsbH1cbiAgICAgKi9cbiAgICBwdWJsaWMgZmluZFNlcnZpY2Uoc2VydmljZU5hbWU6IHN0cmluZykge1xuICAgICAgdmFyIGFuc3dlciA9IG51bGw7XG4gICAgICBpZiAoc2VydmljZU5hbWUpIHtcbiAgICAgICAgdmFyIG1vZGVsID0gdGhpcy5nZXRNb2RlbCgpO1xuICAgICAgICBpZiAobW9kZWwpIHtcbiAgICAgICAgICB2YXIgbmFtZXNwYWNlID0gbW9kZWwuY3VycmVudE5hbWVzcGFjZSgpO1xuICAgICAgICAgIHJldHVybiBtb2RlbC5nZXRTZXJ2aWNlKG5hbWVzcGFjZSAsc2VydmljZU5hbWUpO1xuLypcbiAgICAgICAgVE9ETyBsZXRzIG9ubHkgbG9vayBpbiB0aGUgY3VycmVudCBuYW1lc3BhY2VcbiAgICAgICAgYW5ndWxhci5mb3JFYWNoKG1vZGVsLnNlcnZpY2VzLCAoc2VydmljZSkgPT4ge1xuICAgICAgICAgIGlmIChzZXJ2aWNlTmFtZSA9PT0gZ2V0TmFtZShzZXJ2aWNlKSkge1xuICAgICAgICAgICAgYW5zd2VyID0gc2VydmljZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuKi9cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFuc3dlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBzZXJ2aWNlIGxpbmsgZm9yIHRoZSBnaXZlbiBzZXJ2aWNlIG5hbWVcbiAgICAgKlxuICAgICAqIEBwYXJhbSBzZXJ2aWNlTmFtZSB0aGUgbmFtZSBvZiB0aGUgc2VydmljZVxuICAgICAqIEByZXR1cm4ge251bGx9XG4gICAgICovXG4gICAgcHVibGljIHNlcnZpY2VMaW5rKHNlcnZpY2VOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgdmFyIHNlcnZpY2UgPSB0aGlzLmZpbmRTZXJ2aWNlKHNlcnZpY2VOYW1lKTtcbiAgICAgIHJldHVybiBzZXJ2aWNlTGlua1VybChzZXJ2aWNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBzZXJ2aWNlIGxpbmsgZm9yIHRoZSBnaXZlbiBzZXJ2aWNlIG5hbWUgaWYgaXRzIHJlYWR5IChoYXMgYXQgbGVhc3Qgb25lIHJlYWR5IHBvZClcbiAgICAgKlxuICAgICAqIEBwYXJhbSBzZXJ2aWNlTmFtZSB0aGUgbmFtZSBvZiB0aGUgc2VydmljZVxuICAgICAqIEByZXR1cm4ge251bGx9XG4gICAgICovXG4gICAgcHVibGljIHNlcnZpY2VSZWFkeUxpbmsoc2VydmljZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICB2YXIgc2VydmljZSA9IHRoaXMuZmluZFNlcnZpY2Uoc2VydmljZU5hbWUpO1xuICAgICAgaWYgKHJlYWR5UG9kQ291bnQoc2VydmljZSkpIHtcbiAgICAgICAgcmV0dXJuIHNlcnZpY2VMaW5rVXJsKHNlcnZpY2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRNb2RlbCgpOkt1YmVybmV0ZXNNb2RlbFNlcnZpY2Uge1xuICAgICAgdmFyIGFuc3dlciA9IHRoaXMubW9kZWw7XG4gICAgICAvLyBsZXRzIGFsbG93IGxhenkgbG9hZCBzbyB3ZSBjYW4gYmUgaW52b2tlZCBiZWZvcmUgdGhlIGluamVjdG9yIGhhcyBiZWVuIGNyZWF0ZWRcbiAgICAgIGlmICghYW5zd2VyKSB7XG4gICAgICAgIHZhciBpbmplY3RvciA9IEhhd3Rpb0NvcmUuaW5qZWN0b3I7XG4gICAgICAgIGlmIChpbmplY3Rvcikge1xuICAgICAgICAgIHRoaXMubW9kZWwgPSBpbmplY3Rvci5nZXQ8S3ViZXJuZXRlc01vZGVsU2VydmljZT4oJ0t1YmVybmV0ZXNNb2RlbCcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhbnN3ZXIgPSB0aGlzLm1vZGVsO1xuICAgICAgcmV0dXJuIGFuc3dlcjtcbiAgICB9XG4gIH1cbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSGVscGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxuXG5tb2R1bGUgS3ViZXJuZXRlcyB7XG5cbiAgZXhwb3J0IHZhciBTZXJ2aWNlQXBwcyA9IF9tb2R1bGUuY29udHJvbGxlcignS3ViZXJuZXRlcy5TZXJ2aWNlQXBwcycsICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbCkgPT4ge1xuICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcbiAgfSk7XG5cbiAgZXhwb3J0IHZhciBTZXJ2aWNlcyA9IGNvbnRyb2xsZXIoXCJTZXJ2aWNlc1wiLFxuICAgIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTZXJ2aWNlc1wiLCBcIkt1YmVybmV0ZXNQb2RzXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLFxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOiBLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTZXJ2aWNlczpuZy5yZXNvdXJjZS5JUmVzb3VyY2VDbGFzczxhbnk+LCBLdWJlcm5ldGVzUG9kczpuZy5yZXNvdXJjZS5JUmVzb3VyY2VDbGFzczxhbnk+LCBLdWJlcm5ldGVzU3RhdGUsXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcblxuICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xuICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcblxuICAgIENvbnRyb2xsZXJIZWxwZXJzLmJpbmRNb2RlbFRvU2VhcmNoUGFyYW0oJHNjb3BlLCAkbG9jYXRpb24sICdtb2RlJywgJ21vZGUnLCAnbGlzdCcpO1xuXG4gICAgJHNjb3BlLnRhYmxlQ29uZmlnID0ge1xuICAgICAgZGF0YTogJ21vZGVsLnNlcnZpY2VzJyxcbiAgICAgIHNob3dTZWxlY3Rpb25DaGVja2JveDogdHJ1ZSxcbiAgICAgIGVuYWJsZVJvd0NsaWNrU2VsZWN0aW9uOiBmYWxzZSxcbiAgICAgIG11bHRpU2VsZWN0OiB0cnVlLFxuICAgICAgc2VsZWN0ZWRJdGVtczogW10sXG4gICAgICBmaWx0ZXJPcHRpb25zOiB7XG4gICAgICAgIGZpbHRlclRleHQ6ICRsb2NhdGlvbi5zZWFyY2goKVtcInFcIl0gfHwgJydcbiAgICAgIH0sXG4gICAgICBjb2x1bW5EZWZzOiBbXG4gICAgICAgIHsgZmllbGQ6ICdfa2V5JyxcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ05hbWUnLFxuICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiaWRUZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgIH0sXG4gICAgICAgIHsgZmllbGQ6ICckc2VydmljZVVybCcsXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdBZGRyZXNzJyxcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcInBvcnRhbEFkZHJlc3MuaHRtbFwiKVxuICAgICAgICB9LFxuICAgICAgICB7IGZpZWxkOiAnJHBvZENvdW50JyxcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ1BvZHMnLFxuICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwicG9kQ291bnRzQW5kTGlua1RlbXBsYXRlLmh0bWxcIiksXG4gICAgICAgICAgY3VzdG9tU29ydEZpZWxkOiAoZmllbGQpID0+IHtcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gY29uY2F0IGFsbCB0aGUgcG9kIGNvdW50ZXJzXG4gICAgICAgICAgICB2YXIgcmVhZHkgPSBmaWVsZC4kcG9kQ291bnRlcnMucmVhZHkgfHwgMDtcbiAgICAgICAgICAgIHZhciB2YWxpZCA9IGZpZWxkLiRwb2RDb3VudGVycy52YWxpZCB8fCAwO1xuICAgICAgICAgICAgdmFyIHdhaXRpbmcgPSBmaWVsZC4kcG9kQ291bnRlcnMud2FpdGluZyB8fCAwO1xuICAgICAgICAgICAgdmFyIGVycm9yID0gZmllbGQuJHBvZENvdW50ZXJzLmVycm9yIHx8IDA7XG4gICAgICAgICAgICByZXR1cm4gcmVhZHkgKyB2YWxpZCArIHdhaXRpbmcgKyBlcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHsgZmllbGQ6ICckc2VsZWN0b3JUZXh0JyxcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ1NlbGVjdG9yJyxcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcInNlbGVjdG9yVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICB9LFxuICAgICAgICB7IGZpZWxkOiAnJGxhYmVsc1RleHQnLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTGFiZWxzJyxcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImxhYmVsVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcblxuICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcblxuICAgICRzY29wZS5kZWxldGVQcm9tcHQgPSAoc2VsZWN0ZWQpID0+IHtcbiAgICAgIGlmIChhbmd1bGFyLmlzU3RyaW5nKHNlbGVjdGVkKSkge1xuICAgICAgICBzZWxlY3RlZCA9IFt7XG4gICAgICAgICAgaWQ6IHNlbGVjdGVkXG4gICAgICAgIH1dO1xuICAgICAgfVxuICAgICAgVUkubXVsdGlJdGVtQ29uZmlybUFjdGlvbkRpYWxvZyg8VUkuTXVsdGlJdGVtQ29uZmlybUFjdGlvbk9wdGlvbnM+e1xuICAgICAgICBjb2xsZWN0aW9uOiBzZWxlY3RlZCxcbiAgICAgICAgaW5kZXg6ICdtZXRhZGF0YS5uYW1lJyxcbiAgICAgICAgb25DbG9zZTogKHJlc3VsdDpib29sZWFuKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQ6QXJyYXk8S3ViZVBvZD4sIG5leHQ6S3ViZVBvZCkge1xuICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcImRlbGV0aW5nOiBcIiwgZ2V0TmFtZShuZXh0KSk7XG4gICAgICAgICAgICAgICAgS3ViZXJuZXRlc1NlcnZpY2VzLmRlbGV0ZSh7XG4gICAgICAgICAgICAgICAgICBpZDogZ2V0TmFtZShuZXh0KVxuICAgICAgICAgICAgICAgIH0sIHVuZGVmaW5lZCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiZGVsZXRlZDogXCIsIGdldE5hbWUobmV4dCkpO1xuICAgICAgICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpO1xuICAgICAgICAgICAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiRXJyb3IgZGVsZXRpbmc6IFwiLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHRpdGxlOiAnRGVsZXRlIHNlcnZpY2VzPycsXG4gICAgICAgIGFjdGlvbjogJ1RoZSBmb2xsb3dpbmcgc2VydmljZXMgd2lsbCBiZSBkZWxldGVkOicsXG4gICAgICAgIG9rVGV4dDogJ0RlbGV0ZScsXG4gICAgICAgIG9rQ2xhc3M6ICdidG4tZGFuZ2VyJyxcbiAgICAgICAgY3VzdG9tOiBcIlRoaXMgb3BlcmF0aW9uIGlzIHBlcm1hbmVudCBvbmNlIGNvbXBsZXRlZCFcIixcbiAgICAgICAgY3VzdG9tQ2xhc3M6IFwiYWxlcnQgYWxlcnQtd2FybmluZ1wiXG4gICAgICB9KS5vcGVuKCk7XG4gICAgfTtcblxuICB9XSk7XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cblxubW9kdWxlIEt1YmVybmV0ZXMge1xuXG4gIC8vIGNvbnRyb2xsZXIgZm9yIHRoZSBzdGF0dXMgaWNvbiBjZWxsXG4gIGV4cG9ydCB2YXIgUG9kU3RhdHVzID0gY29udHJvbGxlcihcIlBvZFN0YXR1c1wiLCBbXCIkc2NvcGVcIiwgKCRzY29wZSkgPT4ge1xuICAgICRzY29wZS5zdGF0dXNNYXBwaW5nID0gKHRleHQpID0+IHtcbiAgICAgIHJldHVybiBzdGF0dXNUZXh0VG9Dc3NDbGFzcyh0ZXh0KTtcbiAgICB9XG4gIH1dKTtcblxuICBfbW9kdWxlLmNvbnRyb2xsZXIoXCJLdWJlcm5ldGVzLlRlcm1Db250cm9sbGVyXCIsICgkc2NvcGUsIFRlcm1pbmFsU2VydmljZSkgPT4ge1xuICAgICRzY29wZS5jYW5Db25uZWN0VG8gPSAoY29udGFpbmVyKSA9PiB7XG4gICAgICBpZiAoY29udGFpbmVyLnNlY3VyaXR5Q29udGV4dCAmJiBjb250YWluZXIuc2VjdXJpdHlDb250ZXh0LnByaXZpbGVnZWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgICRzY29wZS5vcGVuVGVybWluYWwgPSAoc2VsZkxpbmssIGNvbnRhaW5lck5hbWUpID0+IHtcbiAgICAgIHZhciBpZCA9IFRlcm1pbmFsU2VydmljZS5uZXdUZXJtaW5hbChzZWxmTGluaywgY29udGFpbmVyTmFtZSk7XG4gICAgICBsb2cuZGVidWcoXCJDcmVhdGVkIHRlcm1pbmFsLCBpZDogXCIsIGlkKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGNvbnRyb2xsZXIgdGhhdCBkZWFscyB3aXRoIHRoZSBsYWJlbHMgcGVyIHBvZFxuICBleHBvcnQgdmFyIExhYmVscyA9IGNvbnRyb2xsZXIoXCJMYWJlbHNcIiwgW1wiJHNjb3BlXCIsIFwiJGxvY2F0aW9uXCIsICgkc2NvcGUsICRsb2NhdGlvbikgPT4ge1xuICAgICRzY29wZS5sYWJlbHMgPSBbXTtcbiAgICB2YXIgbGFiZWxLZXlXZWlnaHRzID0ge1xuICAgICAgXCJyZWdpb25cIjogMSxcbiAgICAgIFwic3lzdGVtXCI6IDIsXG4gICAgICBcInR5cGVcIjogMyxcbiAgICAgIFwiYmF0Y2hcIjogNCxcbiAgICAgIFwidmVyc2lvblwiOiA1XG4gICAgfTtcbiAgICAkc2NvcGUuJHdhdGNoKCdlbnRpdHknLCAobmV3VmFsdWUsIG9sZFZhbHVlKSA9PiB7XG4gICAgICBpZiAobmV3VmFsdWUpIHtcbiAgICAgICAgLy8gbG9nLmRlYnVnKFwibGFiZWxzOiBcIiwgbmV3VmFsdWUpO1xuICAgICAgICAvLyBtYXNzYWdlIHRoZSBsYWJlbHMgYSBiaXRcbiAgICAgICAgJHNjb3BlLmxhYmVscyA9IFtdO1xuICAgICAgICBhbmd1bGFyLmZvckVhY2goQ29yZS5wYXRoR2V0KCRzY29wZS5lbnRpdHksIFtcIm1ldGFkYXRhXCIsIFwibGFiZWxzXCJdKSwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICBpZiAoa2V5ID09PSAnZmFicmljOCcgfHwga2V5ID09PSAnc3R5bGUnIHx8IGtleSA9PT0gJ3N0YXR1cycgfHwgKGtleSA9PT0gJ2lzVGFyZ2V0JyAmJiB2YWx1ZSA9PT0gJ2ZhbHNlJykgfHwga2V5ID09PSAnaXNFeHRyYWN0JyB8fCBrZXkgPT09ICduYW1lJykge1xuICAgICAgICAgICAgLy8gVE9ETyBub3Qgc3VyZSB3aGF0IHRoaXMgaXMgZm9yLCB0aGUgY29udGFpbmVyIHR5cGU/XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgJHNjb3BlLmxhYmVscy5wdXNoKHtcbiAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgdGl0bGU6IHZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vICBsZXRzIHNvcnQgYnkga2V5IGJ1dCBsZXRzIG1ha2Ugc3VyZSB0aGF0IHdlIHdlaWdodCBjZXJ0YWluIGxhYmVscyBzbyB0aGV5IGFyZSBmaXJzdFxuICAgICAgICAkc2NvcGUubGFiZWxzID0gJHNjb3BlLmxhYmVscy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgZnVuY3Rpb24gZ2V0V2VpZ2h0KGtleSkge1xuICAgICAgICAgICAgcmV0dXJuIGxhYmVsS2V5V2VpZ2h0c1trZXldIHx8IDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBuMSA9IGFbXCJrZXlcIl07XG4gICAgICAgICAgdmFyIG4yID0gYltcImtleVwiXTtcbiAgICAgICAgICB2YXIgdzEgPSBnZXRXZWlnaHQobjEpO1xuICAgICAgICAgIHZhciB3MiA9IGdldFdlaWdodChuMik7XG4gICAgICAgICAgdmFyIGRpZmYgPSB3MSAtIHcyO1xuICAgICAgICAgIGlmIChkaWZmIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZGlmZiA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobjEgJiYgbjIpIHtcbiAgICAgICAgICAgIGlmIChuMSA+IG4yKSB7XG4gICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChuMSA8IG4yKSB7XG4gICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAobjEgPT09IG4yKSB7XG4gICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChuMSkge1xuICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgJHNjb3BlLmhhbmRsZUNsaWNrID0gKGVudGl0eSwgbGFiZWxUeXBlOnN0cmluZywgdmFsdWUpID0+IHtcbiAgICAgIC8vIGxvZy5kZWJ1ZyhcImhhbmRsZUNsaWNrLCBlbnRpdHk6IFwiLCBlbnRpdHksIFwiIGtleTogXCIsIGxhYmVsVHlwZSwgXCIgdmFsdWU6IFwiLCB2YWx1ZSk7XG4gICAgICAkc2NvcGUuJGVtaXQoJ2xhYmVsRmlsdGVyVXBkYXRlJywgdmFsdWUudGl0bGUpXG4gICAgfVxuXG4gICAgJHNjb3BlLmxhYmVsQ2xhc3MgPSBjb250YWluZXJMYWJlbENsYXNzO1xuICB9XSk7XG5cbiAgLy/mnI3liqHnirbmgIHov4fmu6RcbiAgZXhwb3J0IHZhciBTdGF0dXMgPSBjb250cm9sbGVyKCdTdGF0dXMnLCBbXCIkc2NvcGVcIiwgXCIkaHR0cFwiLCBcIiRpbnRlcnZhbFwiLCBcIiRsb2NhdGlvblwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIiwgKCRzY29wZSwgJGh0dHAsICRpbnRlcnZhbCwgJGxvY2F0aW9uLCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XG4gIC8vICAgICRzY29wZS4kd2F0Y2goJ2VudGl0eScsIChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IHtcbiAgLy8gICAgICAgaWYobmV3VmFsdWUpXG4gIC8vICAgICAgICAgICBjb25zb2xlLmxvZyhuZXdWYWx1ZSk7XG4gIC8vICAgIH0sdHJ1ZSk7XG4gIH1dKTtcbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSGVscGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxuXG5tb2R1bGUgS3ViZXJuZXRlcyB7XG5cbiAgX21vZHVsZS5kaXJlY3RpdmUoXCJoYXd0aW9UYWJzXCIsIFsnSGF3dGlvU3ViVGFicycsIChIYXd0aW9TdWJUYWJzKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxpbms6IChzY29wZSwgZWxlbWVudCwgYXR0cnMpID0+IHtcbiAgICAgICAgSGF3dGlvU3ViVGFicy5hcHBseShzY29wZS4kZXZhbCgnc3ViVGFiQ29uZmlnJykpO1xuICAgICAgfVxuICAgIH07XG4gIH1dKTtcbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxuXG5tb2R1bGUgS3ViZXJuZXRlcyB7XG4gIGV4cG9ydCB2YXIgVGVtcGxhdGVDb250cm9sbGVyID0gY29udHJvbGxlcihcIlRlbXBsYXRlQ29udHJvbGxlclwiLCBbXG4gICAgXCIkc2NvcGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwibWFya2VkXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbW9kYWxcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXG4gICAgKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgbWFya2VkLCAkdGVtcGxhdGVDYWNoZSwgJG1vZGFsLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xuICAgIHZhciBtb2RlbCA9ICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcbiAgICAkc2NvcGUuZmlsdGVyVGV4dCA9ICRsb2NhdGlvbi5zZWFyY2goKVtcInFcIl07XG5cbiAgICAkc2NvcGUudGFyZ2V0TmFtZXNwYWNlID0gJHJvdXRlUGFyYW1zLnRhcmdldE5hbWVzcGFjZTtcbiAgICBpbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xuXG4gICAgJHNjb3BlLiR3YXRjaENvbGxlY3Rpb24oJ21vZGVsLm5hbWVzcGFjZXMnLCAoKSA9PiB7XG4gICAgICBpZiAoISRzY29wZS50YXJnZXROYW1lc3BhY2UpIHtcbiAgICAgICAgJHNjb3BlLnRhcmdldE5hbWVzcGFjZSA9IG1vZGVsLmN1cnJlbnROYW1lc3BhY2UoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciByZXR1cm5UbyA9IG5ldyBVUkkoJGxvY2F0aW9uLnNlYXJjaCgpWydyZXR1cm5UbyddIHx8ICcva3ViZXJuZXRlcy9hcHBzJyk7XG5cbiAgICBmdW5jdGlvbiBnb0JhY2soKSB7XG4gICAgICAkbG9jYXRpb24ucGF0aChyZXR1cm5Uby5wYXRoKCkpLnNlYXJjaChyZXR1cm5Uby5xdWVyeSh0cnVlKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0QW5ub3RhdGlvbnMob2JqKSB7XG4gICAgICByZXR1cm4gQ29yZS5wYXRoR2V0KG9iaiwgWydtZXRhZGF0YScsICdhbm5vdGF0aW9ucyddKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRWYWx1ZUZvcihvYmosIGtleSkge1xuICAgICAgdmFyIGFubm90YXRpb25zID0gZ2V0QW5ub3RhdGlvbnMob2JqKTtcbiAgICAgIGlmICghYW5ub3RhdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICB9XG4gICAgICB2YXIgbmFtZSA9IGdldE5hbWUob2JqKTtcbiAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgIHZhciBmdWxsS2V5ID0gXCJmYWJyaWM4LlwiICsgbmFtZSArIFwiL1wiICsga2V5O1xuICAgICAgICB2YXIgYW5zd2VyID0gYW5ub3RhdGlvbnNbZnVsbEtleV07XG4gICAgICAgIGlmIChhbnN3ZXIpIHtcbiAgICAgICAgICByZXR1cm4gYW5zd2VyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIga2V5OiBhbnkgPSBfLmZpbmQoXy5rZXlzKGFubm90YXRpb25zKSwgKGs6IHN0cmluZykgPT4gXy5lbmRzV2l0aChrLCBrZXkpKTtcbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgcmV0dXJuIGFubm90YXRpb25zW2tleV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAkc2NvcGUuY2FuY2VsID0gKCkgPT4ge1xuICAgICAgaWYgKCRzY29wZS5mb3JtQ29uZmlnKSB7XG4gICAgICAgIGRlbGV0ZSAkc2NvcGUuZm9ybUNvbmZpZztcbiAgICAgICAgZGVsZXRlICRzY29wZS5lbnRpdHk7XG4gICAgICAgICRzY29wZS5vYmplY3RzID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBnb0JhY2soKTtcbiAgICB9XG5cbiAgICAvKlxuICAgICRzY29wZS4kd2F0Y2goJ21vZGVsLnRlbXBsYXRlcy5sZW5ndGgnLCAobmV3VmFsdWUpID0+IHtcbiAgICAgIGlmIChuZXdWYWx1ZSA9PT0gMCkge1xuICAgICAgICBnb0JhY2soKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAqL1xuXG4gICAgJHNjb3BlLmZpbHRlclRlbXBsYXRlcyA9ICh0ZW1wbGF0ZSkgPT4ge1xuICAgICAgaWYgKENvcmUuaXNCbGFuaygkc2NvcGUuZmlsdGVyVGV4dCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gXy5jb250YWlucyhhbmd1bGFyLnRvSnNvbih0ZW1wbGF0ZSksICRzY29wZS5maWx0ZXJUZXh0LnRvTG93ZXJDYXNlKCkpO1xuICAgIH07XG5cbiAgICAkc2NvcGUub3BlbkZ1bGxEZXNjcmlwdGlvbiA9ICh0ZW1wbGF0ZSkgPT4ge1xuICAgICAgdmFyIHRleHQgPSBtYXJrZWQoZ2V0VmFsdWVGb3IodGVtcGxhdGUsICdkZXNjcmlwdGlvbicpIHx8ICdObyBkZXNjcmlwdGlvbicpO1xuICAgICAgdmFyIG1vZGFsID0gJG1vZGFsLm9wZW4oe1xuICAgICAgICB0ZW1wbGF0ZVVybDogVXJsSGVscGVycy5qb2luKHRlbXBsYXRlUGF0aCwgJ3RlbXBsYXRlRGVzY3JpcHRpb24uaHRtbCcpLFxuICAgICAgICBjb250cm9sbGVyOiBbJyRzY29wZScsICckbW9kYWxJbnN0YW5jZScsICgkc2NvcGUsICRtb2RhbEluc3RhbmNlKSA9PiB7XG4gICAgICAgICAgJHNjb3BlLnRleHQgPSB0ZXh0LFxuICAgICAgICAgICRzY29wZS5vayA9ICgpID0+IHtcbiAgICAgICAgICAgIG1vZGFsLmNsb3NlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgICRzY29wZS5nZXREZXNjcmlwdGlvbiA9ICh0ZW1wbGF0ZSkgPT4ge1xuICAgICAgdmFyIGFuc3dlcjphbnkgPSAkKG1hcmtlZChnZXRWYWx1ZUZvcih0ZW1wbGF0ZSwgJ2Rlc2NyaXB0aW9uJykgfHwgJ05vIGRlc2NyaXB0aW9uJykpO1xuICAgICAgdmFyIHRleHREZWZhdWx0ID0gYW5zd2VyLmh0bWwoKTtcbiAgICAgIHZhciBtYXhMZW5ndGggPSAyMDA7XG4gICAgICBpZiAodGV4dERlZmF1bHQubGVuZ3RoID4gbWF4TGVuZ3RoKSB7XG4gICAgICAgIHZhciB0cnVuY2F0ZWQgPSAkLnRyaW0odGV4dERlZmF1bHQpLnN1YnN0cmluZygwLCBtYXhMZW5ndGgpLnNwbGl0KCcgJykuc2xpY2UoMCwgLTEpLmpvaW4oJyAnKTtcbiAgICAgICAgYW5zd2VyLmh0bWwodHJ1bmNhdGVkICsgJy4uLicpO1xuICAgICAgICBhbnN3ZXIuYXBwZW5kKCR0ZW1wbGF0ZUNhY2hlLmdldCgndHJ1bmNhdGVkRGVzY3JpcHRpb25UYWcuaHRtbCcpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhbnN3ZXIuaHRtbCgpO1xuICAgIH07XG5cbiAgICAkc2NvcGUuZ2V0SWNvblVybCA9ICh0ZW1wbGF0ZSkgPT4ge1xuICAgICAgcmV0dXJuIGdldFZhbHVlRm9yKHRlbXBsYXRlLCAnaWNvblVybCcpIHx8IGRlZmF1bHRJY29uVXJsO1xuICAgIH07XG5cbiAgICAkc2NvcGUuZGVwbG95VGVtcGxhdGUgPSAodGVtcGxhdGUpID0+IHtcbiAgICAgIGxvZy5kZWJ1ZyhcIlRlbXBsYXRlIHBhcmFtZXRlcnM6IFwiLCB0ZW1wbGF0ZS5wYXJhbWV0ZXJzKTtcbiAgICAgIGxvZy5kZWJ1ZyhcIlRlbXBsYXRlIG9iamVjdHM6IFwiLCB0ZW1wbGF0ZS5vYmplY3RzKTtcbiAgICAgIGxvZy5kZWJ1ZyhcIlRlbXBsYXRlIGFubm90YXRpb25zOiBcIiwgdGVtcGxhdGUubWV0YWRhdGEuYW5ub3RhdGlvbnMpO1xuICAgICAgdmFyIHRlbXBsYXRlQW5ub3RhdGlvbnMgPSB0ZW1wbGF0ZS5tZXRhZGF0YS5hbm5vdGF0aW9ucztcbiAgICAgIGlmICh0ZW1wbGF0ZUFubm90YXRpb25zKSB7XG4gICAgICAgIF8uZm9yRWFjaCh0ZW1wbGF0ZS5vYmplY3RzLCAob2JqZWN0OmFueSkgPT4ge1xuICAgICAgICAgIHZhciBhbm5vdGF0aW9ucyA9IG9iamVjdC5tZXRhZGF0YS5hbm5vdGF0aW9ucyB8fCB7fTtcbiAgICAgICAgICB2YXIgbmFtZSA9IGdldE5hbWUob2JqZWN0KTtcbiAgICAgICAgICB2YXIgbWF0Y2hlcyA9IF8uZmlsdGVyKF8ua2V5cyh0ZW1wbGF0ZUFubm90YXRpb25zKSwgKGtleSkgPT4ga2V5Lm1hdGNoKCcuJyArIG5hbWUgKyAnLycpKTtcbiAgICAgICAgICBtYXRjaGVzLmZvckVhY2goKG1hdGNoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIShtYXRjaCBpbiBhbm5vdGF0aW9ucykpIHtcbiAgICAgICAgICAgICAgYW5ub3RhdGlvbnNbbWF0Y2hdID0gdGVtcGxhdGVBbm5vdGF0aW9uc1ttYXRjaF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgb2JqZWN0Lm1ldGFkYXRhLmFubm90YXRpb25zID0gYW5ub3RhdGlvbnM7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdmFyIHJvdXRlU2VydmljZU5hbWUgPSA8c3RyaW5nPiB1bmRlZmluZWQ7XG4gICAgICB2YXIgc2VydmljZSA9IF8uZmluZCh0ZW1wbGF0ZS5vYmplY3RzLCAob2JqKSA9PiB7XG4gICAgICAgIGlmIChnZXRLaW5kKG9iaikgPT09IFwiU2VydmljZVwiKSB7XG4gICAgICAgICAgdmFyIHBvcnRzID0gZ2V0UG9ydHMob2JqKTtcbiAgICAgICAgICBpZiAocG9ydHMgJiYgcG9ydHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChzZXJ2aWNlKSB7XG4gICAgICAgIHJvdXRlU2VydmljZU5hbWUgPSBnZXROYW1lKHNlcnZpY2UpO1xuICAgICAgfVxuICAgICAgbG9nLmRlYnVnKFwiU2VydmljZTogXCIsIHNlcnZpY2UpO1xuICAgICAgaWYgKCghcm91dGVTZXJ2aWNlTmFtZSB8fCAhaXNPcGVuU2hpZnQpICYmICghdGVtcGxhdGUucGFyYW1ldGVycyB8fCB0ZW1wbGF0ZS5wYXJhbWV0ZXJzLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgICAgbG9nLmRlYnVnKFwiTm8gcGFyYW1ldGVycyByZXF1aXJlZCwgZGVwbG95aW5nIG9iamVjdHNcIik7XG4gICAgICAgIGFwcGx5T2JqZWN0cyh0ZW1wbGF0ZS5vYmplY3RzKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIGZvcm1Db25maWcgPSB7XG4gICAgICAgIHN0eWxlOiBIYXd0aW9Gb3Jtcy5Gb3JtU3R5bGUuU1RBTkRBUkQsXG4gICAgICAgIGhpZGVMZWdlbmQ6IHRydWUsXG4gICAgICAgIHByb3BlcnRpZXM6IDxhbnk+IHt9XG4gICAgICB9O1xuICAgICAgdmFyIHBhcmFtcyA9IHRlbXBsYXRlLnBhcmFtZXRlcnM7XG4gICAgICBfLmZvckVhY2gocGFyYW1zLCAocGFyYW06YW55KSA9PiB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IDxhbnk+IHt9O1xuICAgICAgICBwcm9wZXJ0eS5sYWJlbCA9IF8uc3RhcnRDYXNlKHBhcmFtLm5hbWUpO1xuICAgICAgICBwcm9wZXJ0eS5kZXNjcmlwdGlvbiA9IHBhcmFtLmRlc2NyaXB0aW9uO1xuICAgICAgICBwcm9wZXJ0eS5kZWZhdWx0ID0gcGFyYW0udmFsdWU7XG4gICAgICAgIC8vIFRPRE8sIGRvIHBhcmFtZXRlcnMgc3VwcG9ydCB0eXBlcz9cbiAgICAgICAgcHJvcGVydHkudHlwZSA9ICdzdHJpbmcnO1xuICAgICAgICBmb3JtQ29uZmlnLnByb3BlcnRpZXNbcGFyYW0ubmFtZV0gPSBwcm9wZXJ0eTtcbiAgICAgIH0pO1xuICAgICAgaWYgKHJvdXRlU2VydmljZU5hbWUgJiYgaXNPcGVuU2hpZnQpIHtcbiAgICAgICAgZm9ybUNvbmZpZy5wcm9wZXJ0aWVzLmNyZWF0ZVJvdXRlID0ge1xuICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICAgIGxhYmVsOiBcIkNyZWF0ZSBSb3V0ZVwiXG4gICAgICAgIH07XG4vKlxuICAgICAgICBmb3JtQ29uZmlnLnByb3BlcnRpZXMucm91dGVOYW1lID0ge1xuICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIGxhYmVsOiAnUm91dGUgTmFtZScsXG4gICAgICAgICAgZGVmYXVsdDogcm91dGVTZXJ2aWNlTmFtZSxcbiAgICAgICAgICAnY29udHJvbC1ncm91cC1hdHRyaWJ1dGVzJzoge1xuICAgICAgICAgICAgJ25nLXNob3cnOiAnZW50aXR5LmNyZWF0ZVJvdXRlJ1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiovXG4gICAgICAgIGZvcm1Db25maWcucHJvcGVydGllcy5yb3V0ZVNlcnZpY2VOYW1lID0ge1xuICAgICAgICAgIHR5cGU6ICdoaWRkZW4nLFxuICAgICAgICAgIGRlZmF1bHQ6IHJvdXRlU2VydmljZU5hbWVcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBuYW1lc3BhY2UgPSBjdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xuICAgICAgICAvLyBUT0RPIHN0b3JlIHRoaXMgaW4gbG9jYWxTdG9yYWdlIVxuICAgICAgICB2YXIgZG9tYWluID0gXCJ2YWdyYW50LmY4XCI7XG4gICAgICAgIHZhciBkZWZhdWx0Um91dGVIb3N0U3VmZml4ID0gJy4nICsgKG5hbWVzcGFjZSA9PT0gXCJkZWZhdWx0XCIgPyBcIlwiIDogbmFtZXNwYWNlICsgXCIuXCIpICsgZG9tYWluO1xuICAgICAgICBmb3JtQ29uZmlnLnByb3BlcnRpZXMucm91dGVIb3N0bmFtZSA9IHtcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICBkZWZhdWx0OiBkZWZhdWx0Um91dGVIb3N0U3VmZml4LFxuICAgICAgICAgIGxhYmVsOiBcIlJvdXRlIGhvc3QgbmFtZSBzdWZmaXhcIixcbiAgICAgICAgICAnY29udHJvbC1ncm91cC1hdHRyaWJ1dGVzJzoge1xuICAgICAgICAgICAgJ25nLXNob3cnOiAnZW50aXR5LmNyZWF0ZVJvdXRlJ1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgICRzY29wZS5lbnRpdHkgPSA8YW55PiB7fTtcbiAgICAgICRzY29wZS5mb3JtQ29uZmlnID0gZm9ybUNvbmZpZztcbiAgICAgICRzY29wZS5vYmplY3RzID0gdGVtcGxhdGUub2JqZWN0cztcbiAgICAgIGxvZy5kZWJ1ZyhcIkZvcm0gY29uZmlnOiBcIiwgZm9ybUNvbmZpZyk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHN1YnN0aXR1dGUoc3RyLCBkYXRhKSB7XG4gICAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1xcJHtcXHcqfS9nLCAobWF0Y2gpID0+IHtcbiAgICAgICAgdmFyIGtleSA9IG1hdGNoLnJlcGxhY2UoL1xcJHsvLCAnJykucmVwbGFjZSgvfS8sICcnKS50cmltKCk7XG4gICAgICAgIHJldHVybiBkYXRhW2tleV0gfHwgbWF0Y2g7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgJHNjb3BlLnN1YnN0aXR1dGVBbmREZXBsb3lUZW1wbGF0ZSA9ICgpID0+IHtcbiAgICAgIHZhciBvYmplY3RzID0gJHNjb3BlLm9iamVjdHM7XG4gICAgICB2YXIgb2JqZWN0c1RleHQgPSBhbmd1bGFyLnRvSnNvbihvYmplY3RzLCB0cnVlKTtcbiAgICAgIC8vIHB1bGwgdGhlc2Ugb3V0IG9mIHRoZSBlbnRpdHkgb2JqZWN0IHNvIHRoZXkncmUgbm90IHVzZWQgaW4gc3Vic3RpdHV0aW9uc1xuICAgICAgdmFyIGNyZWF0ZVJvdXRlID0gJHNjb3BlLmVudGl0eS5jcmVhdGVSb3V0ZTtcbiAgICAgIHZhciByb3V0ZUhvc3RuYW1lU3VmZml4ID0gJHNjb3BlLmVudGl0eS5yb3V0ZUhvc3RuYW1lIHx8IFwiXCI7XG4gICAgICB2YXIgcm91dGVOYW1lID0gJHNjb3BlLmVudGl0eS5yb3V0ZU5hbWU7XG4gICAgICB2YXIgcm91dGVTZXJ2aWNlTmFtZSA9ICRzY29wZS5lbnRpdHkucm91dGVTZXJ2aWNlTmFtZTtcbiAgICAgIGRlbGV0ZSAkc2NvcGUuZW50aXR5LmNyZWF0ZVJvdXRlO1xuICAgICAgZGVsZXRlICRzY29wZS5lbnRpdHkucm91dGVIb3N0bmFtZTtcbiAgICAgIGRlbGV0ZSAkc2NvcGUuZW50aXR5LnJvdXRlTmFtZTtcbiAgICAgIGRlbGV0ZSAkc2NvcGUuZW50aXR5LnJvdXRlU2VydmljZU5hbWU7XG4gICAgICBvYmplY3RzVGV4dCA9IHN1YnN0aXR1dGUob2JqZWN0c1RleHQsICRzY29wZS5lbnRpdHkpO1xuICAgICAgb2JqZWN0cyA9IGFuZ3VsYXIuZnJvbUpzb24ob2JqZWN0c1RleHQpO1xuICAgICAgaWYgKGNyZWF0ZVJvdXRlKSB7XG4gICAgICAgIHZhciByb3V0ZXMgPSBbXTtcbiAgICAgICAgYW5ndWxhci5mb3JFYWNoKG9iamVjdHMsIChvYmplY3QpID0+IHtcbiAgICAgICAgICB2YXIga2luZCA9IG9iamVjdC5raW5kO1xuICAgICAgICAgIHZhciBuYW1lID0gZ2V0TmFtZShvYmplY3QpO1xuICAgICAgICAgIGlmIChuYW1lICYmIFwiU2VydmljZVwiID09PSBraW5kKSB7XG4gICAgICAgICAgICB2YXIgcm91dGVIb3N0bmFtZSA9IG5hbWUgKyByb3V0ZUhvc3RuYW1lU3VmZml4O1xuICAgICAgICAgICAgdmFyIHJvdXRlID0ge1xuICAgICAgICAgICAgICBraW5kOiBcIlJvdXRlXCIsXG4gICAgICAgICAgICAgIGFwaVZlcnNpb246IGRlZmF1bHRPU0FwaVZlcnNpb24sXG4gICAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgc3BlYzoge1xuICAgICAgICAgICAgICAgIGhvc3Q6IHJvdXRlSG9zdG5hbWUsXG4gICAgICAgICAgICAgICAgdG86IHtcbiAgICAgICAgICAgICAgICAgIGtpbmQ6IFwiU2VydmljZVwiLFxuICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJvdXRlcy5wdXNoKHJvdXRlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBvYmplY3RzID0gb2JqZWN0cy5jb25jYXQocm91dGVzKTtcbiAgICAgIH1cbiAgICAgIGlmICgkc2NvcGUudGFyZ2V0TmFtZXNwYWNlICE9PSBtb2RlbC5jdXJyZW50TmFtZXNwYWNlKCkpIHtcbiAgICAgICAgJHNjb3BlLiRvbignV2F0Y2hlck5hbWVzcGFjZUNoYW5nZWQnLCAoKSA9PiB7XG4gICAgICAgICAgbG9nLmRlYnVnKFwiTmFtZXNwYWNlIGNoYW5nZWRcIik7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBhcHBseU9iamVjdHMob2JqZWN0cyk7XG4gICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgIH0pO1xuICAgICAgICBDb3JlLm5vdGlmaWNhdGlvbignaW5mbycsIFwiU3dpdGNoaW5nIHRvIG5hbWVzcGFjZSBcIiArICRzY29wZS50YXJnZXROYW1lc3BhY2UgKyBcIiBhbmQgZGVwbG95aW5nIHRlbXBsYXRlXCIpO1xuICAgICAgICBtb2RlbC5rdWJlcm5ldGVzLnNlbGVjdGVkTmFtZXNwYWNlID0gJHNjb3BlLnRhcmdldE5hbWVzcGFjZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFwcGx5T2JqZWN0cyhvYmplY3RzKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gYXBwbHlPYmplY3RzKG9iamVjdHMpIHtcbiAgICAgIHZhciBwcm9qZWN0Q2xpZW50ID0gS3ViZXJuZXRlcy5jcmVhdGVLdWJlcm5ldGVzQ2xpZW50KFwicHJvamVjdHNcIik7XG5cbiAgICAgIF8uZm9yRWFjaChvYmplY3RzLCAob2JqZWN0OmFueSkgPT4ge1xuICAgICAgICBsb2cuZGVidWcoXCJPYmplY3Q6IFwiLCBvYmplY3QpO1xuXG4gICAgICAgIHZhciBraW5kID0gZ2V0S2luZChvYmplY3QpO1xuICAgICAgICB2YXIgbmFtZSA9IGdldE5hbWUob2JqZWN0KTtcbiAgICAgICAgdmFyIG5zID0gZ2V0TmFtZXNwYWNlKG9iamVjdCk7XG5cbiAgICAgICAgaWYgKGtpbmQgJiYgbmFtZSkge1xuICAgICAgICAgIGlmIChucyAmJiBucyAhPT0gY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKSkge1xuICAgICAgICAgICAgdmFyIHByb2plY3QgPSB7XG4gICAgICAgICAgICAgIGFwaVZlcnNpb246IEt1YmVybmV0ZXMuZGVmYXVsdEFwaVZlcnNpb24sXG4gICAgICAgICAgICAgIGtpbmQ6IFwiUHJvamVjdFwiLFxuICAgICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICAgIG5hbWU6IG5zLFxuICAgICAgICAgICAgICAgIGxhYmVsczoge1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHByb2plY3RDbGllbnQucHV0KHByb2plY3QsXG4gICAgICAgICAgICAgIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgbG9nLmluZm8oXCJDcmVhdGVkIG5hbWVzcGFjZTogXCIgKyBucylcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGNyZWF0ZSBuYW1lc3BhY2U6IFwiICsgbnMgKyBcIjogXCIgKyBhbmd1bGFyLnRvSnNvbihlcnIpKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHBsdXJhbEtpbmQgPSBraW5kLnRvTG93ZXJDYXNlKCkgKyBcInNcIjtcbiAgICAgICAgICB2YXIga3ViZUNsaWVudCA9IEt1YmVybmV0ZXMuY3JlYXRlS3ViZXJuZXRlc0NsaWVudChwbHVyYWxLaW5kLCBucyk7XG4gICAgICAgICAga3ViZUNsaWVudC5wdXQob2JqZWN0LFxuICAgICAgICAgICAgKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgbG9nLmluZm8oXCJ1cGRhdGVkIFwiICsga2luZCArIFwiIG5hbWU6IFwiICsgbmFtZSArIChucyA/IFwiIG5zOiBcIiArIG5zOiBcIlwiKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byB1cGRhdGUgXCIgKyBraW5kICsgXCIgbmFtZTogXCIgKyBuYW1lICsgKG5zID8gXCIgbnM6IFwiICsgbnM6IFwiXCIpICsgXCIgZXJyb3I6IFwiICsgYW5ndWxhci50b0pzb24oZXJyKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBnb0JhY2soKTtcbiAgICB9XG5cbiAgICAkc2NvcGUuZGVsZXRlVGVtcGxhdGUgPSAodGVtcGxhdGUpID0+IHtcbiAgICAgIFVJLm11bHRpSXRlbUNvbmZpcm1BY3Rpb25EaWFsb2coPFVJLk11bHRpSXRlbUNvbmZpcm1BY3Rpb25PcHRpb25zPntcbiAgICAgICAgY29sbGVjdGlvbjogW3RlbXBsYXRlXSxcbiAgICAgICAgaW5kZXg6ICdtZXRhZGF0YS5uYW1lJyxcbiAgICAgICAgb25DbG9zZTogKHJlc3VsdDpib29sZWFuKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgS3ViZXJuZXRlc01vZGVsWyd0ZW1wbGF0ZXNSZXNvdXJjZSddLmRlbGV0ZSh7XG4gICAgICAgICAgICAgIGlkOiB0ZW1wbGF0ZS5tZXRhZGF0YS5uYW1lXG4gICAgICAgICAgICB9LCB1bmRlZmluZWQsICgpID0+IHtcbiAgICAgICAgICAgICAgS3ViZXJuZXRlc01vZGVsWyd0ZW1wbGF0ZXNSZXNvdXJjZSddLnF1ZXJ5KChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgS3ViZXJuZXRlc01vZGVsLnRlbXBsYXRlcyA9IGRhdGEuaXRlbXM7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcIkVycm9yIGRlbGV0aW5nIHRlbXBsYXRlOiBcIiwgZXJyb3IpOyBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdGl0bGU6ICdEZWxldGUgVGVtcGxhdGU/JyxcbiAgICAgICAgYWN0aW9uOiAnVGhlIGZvbGxvd2luZyB0ZW1wbGF0ZSB3aWxsIGJlIGRlbGV0ZWQ6JyxcbiAgICAgICAgb2tUZXh0OiAnRGVsZXRlJyxcbiAgICAgICAgb2tDbGFzczogJ2J0bi1kYW5nZXInLFxuICAgICAgICBjdXN0b206IFwiVGhpcyBvcGVyYXRpb24gaXMgcGVybWFuZW50IG9uY2UgY29tcGxldGVkIVwiLFxuICAgICAgICBjdXN0b21DbGFzczogXCJhbGVydCBhbGVydC13YXJuaW5nXCJcbiAgICAgIH0pLm9wZW4oKTtcbiAgICB9O1xuICB9XSk7XG59XG5cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbm1vZHVsZSBEZXZlbG9wZXIge1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBlbnJpY2hXb3Jrc3BhY2VzKHByb2plY3RzKSB7XG4gICAgYW5ndWxhci5mb3JFYWNoKHByb2plY3RzLCAocHJvamVjdCkgPT4ge1xuICAgICAgZW5yaWNoV29ya3NwYWNlKHByb2plY3QpO1xuICAgIH0pO1xuICAgIHJldHVybiBwcm9qZWN0cztcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBlbnJpY2hXb3Jrc3BhY2UoYnVpbGQpIHtcbiAgICBpZiAoYnVpbGQpIHtcbiAgICAgIHZhciBuYW1lID0gS3ViZXJuZXRlcy5nZXROYW1lKGJ1aWxkKTtcbiAgICAgIGJ1aWxkLiRuYW1lID0gbmFtZTtcbiAgICAgIGJ1aWxkLiRzb3J0T3JkZXIgPSAwIC0gYnVpbGQubnVtYmVyO1xuXG4gICAgICB2YXIgbmFtZUFycmF5ID0gbmFtZS5zcGxpdChcIi1cIik7XG4gICAgICB2YXIgbmFtZUFycmF5TGVuZ3RoID0gbmFtZUFycmF5Lmxlbmd0aDtcbiAgICAgIGJ1aWxkLiRzaG9ydE5hbWUgPSAobmFtZUFycmF5TGVuZ3RoID4gNCkgPyBuYW1lQXJyYXkuc2xpY2UoMCwgbmFtZUFycmF5TGVuZ3RoIC0gNCkuam9pbihcIi1cIikgOiBuYW1lLnN1YnN0cmluZygwLCAzMCk7XG5cbiAgICAgIHZhciBsYWJlbHMgPSBLdWJlcm5ldGVzLmdldExhYmVscyhidWlsZCk7XG4gICAgICBidWlsZC4kY3JlYXRpb25EYXRlID0gYXNEYXRlKEt1YmVybmV0ZXMuZ2V0Q3JlYXRpb25UaW1lc3RhbXAoYnVpbGQpKTtcbiAgICAgIGJ1aWxkLiRsYWJlbHNUZXh0ID0gS3ViZXJuZXRlcy5sYWJlbHNUb1N0cmluZyhsYWJlbHMpO1xuXG4gICAgICBpZiAobmFtZSkge1xuICAgICAgICBidWlsZC4kcHJvamVjdHNMaW5rID0gVXJsSGVscGVycy5qb2luKFwid29ya3NwYWNlc1wiLCBuYW1lKTtcbiAgICAgICAgYnVpbGQuJHJ1bnRpbWVMaW5rID0gVXJsSGVscGVycy5qb2luKFwia3ViZXJuZXRlcy9uYW1lc3BhY2UvXCIsIG5hbWUsIFwiL2FwcHNcIik7XG4gICAgICAgIGJ1aWxkLiR2aWV3TGluayA9IGJ1aWxkLiRwcm9qZWN0c0xpbms7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBidWlsZDtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBhc0RhdGUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPyBuZXcgRGF0ZSh2YWx1ZSkgOiBudWxsO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGVucmljaEplbmtpbnNKb2JzKGpvYnNEYXRhLCBwcm9qZWN0SWQsIGpvYk5hbWUpIHtcbiAgICBpZiAoam9ic0RhdGEpIHtcbiAgICAgIGFuZ3VsYXIuZm9yRWFjaChqb2JzRGF0YS5qb2JzLCAoam9iKSA9PiB7XG4gICAgICAgIGVucmljaEplbmtpbnNKb2Ioam9iLCBwcm9qZWN0SWQsIGpvYk5hbWUpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBqb2JzRGF0YTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBlbnJpY2hKZW5raW5zSm9iKGpvYiwgcHJvamVjdElkLCBqb2JOYW1lKSB7XG4gICAgaWYgKGpvYikge1xuICAgICAgam9iTmFtZSA9IGpvYk5hbWUgfHwgam9iLm5hbWUgfHwgcHJvamVjdElkO1xuICAgICAgam9iLiRqb2JJZCA9IGpvYk5hbWU7XG4gICAgICBqb2IuJHByb2plY3QgPSBwcm9qZWN0SWQgfHwgam9iTmFtZTtcbiAgICAgIHZhciBsYXN0QnVpbGQgPSBqb2IubGFzdEJ1aWxkO1xuICAgICAgdmFyIGxhc3RCdWlsZFJlc3VsdCA9IGxhc3RCdWlsZCA/IGxhc3RCdWlsZC5yZXN1bHQgOiBcIk5PVF9TVEFSVEVEXCI7XG4gICAgICB2YXIgJGljb25DbGFzcyA9IGNyZWF0ZUJ1aWxkU3RhdHVzSWNvbkNsYXNzKGxhc3RCdWlsZFJlc3VsdCk7XG5cbiAgICAgIGpvYi4kbGFzdEJ1aWxkTnVtYmVyID0gZW5yaWNoSmVua2luc0J1aWxkKGpvYiwgbGFzdEJ1aWxkKTtcbiAgICAgIGpvYi4kbGFzdFN1Y2Nlc3NmdWxCdWlsZE51bWJlciA9IGVucmljaEplbmtpbnNCdWlsZChqb2IsIGpvYi5sYXN0U3VjY2Vzc2Z1bEJ1aWxkKTtcbiAgICAgIGpvYi4kbGFzdEZhaWxlZGxCdWlsZE51bWJlciA9IGVucmljaEplbmtpbnNCdWlsZChqb2IsIGpvYi5sYXN0RmFpbGVkbEJ1aWxkKTtcblxuICAgICAgaWYgKGxhc3RCdWlsZCkge1xuICAgICAgICBqb2IuJGR1cmF0aW9uID0gbGFzdEJ1aWxkLmR1cmF0aW9uO1xuICAgICAgICBqb2IuJHRpbWVzdGFtcCA9IGFzRGF0ZShsYXN0QnVpbGQudGltZXN0YW1wKTtcbiAgICAgIH1cbiAgICAgIHZhciBqb2JVcmwgPSAoam9iIHx8IHt9KS51cmw7XG4gICAgICBpZiAoIWpvYlVybCB8fCAham9iVXJsLnN0YXJ0c1dpdGgoXCJodHRwXCIpKSB7XG4gICAgICAgIHZhciBqZW5raW5zVXJsID0gamVua2luc0xpbmsoKTtcbiAgICAgICAgaWYgKGplbmtpbnNVcmwpIHtcbiAgICAgICAgICBqb2JVcmwgPSBVcmxIZWxwZXJzLmpvaW4oamVua2luc1VybCwgXCJqb2JcIiwgam9iTmFtZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGpvYlVybCkge1xuICAgICAgICBqb2IuJGpvYkxpbmsgPSBqb2JVcmw7XG4gICAgICAgIHZhciB3b3Jrc3BhY2VOYW1lID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xuICAgICAgICBqb2IuJHBpcGVsaW5lc0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4oXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIGpvYi4kcHJvamVjdCwgXCJqZW5raW5zSm9iXCIsIGpvYk5hbWUsIFwicGlwZWxpbmVzXCIpO1xuICAgICAgICBqb2IuJGJ1aWxkc0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4oXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIGpvYi4kcHJvamVjdCwgXCJqZW5raW5zSm9iXCIsIGpvYk5hbWUpO1xuICAgICAgfVxuICAgICAgam9iLiRpY29uQ2xhc3MgPSAkaWNvbkNsYXNzO1xuXG4gICAgICBhbmd1bGFyLmZvckVhY2goam9iLmJ1aWxkcywgKGJ1aWxkKSA9PiB7XG4gICAgICAgIGVucmljaEplbmtpbnNCdWlsZChqb2IsIGJ1aWxkKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gam9iO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUJ1aWxkU3RhdHVzSWNvbkNsYXNzKHJlc3VsdCkge1xuICAgIHZhciAkaWNvbkNsYXNzID0gXCJmYSBmYS1zcGlubmVyIGZhLXNwaW5cIjtcbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICBpZiAocmVzdWx0ID09PSBcIkZBSUxVUkVcIiB8fCByZXN1bHQgPT09IFwiRkFJTEVEXCIpIHtcbiAgICAgICAgLy8gVE9ETyBub3QgYXZhaWxhYmxlIHlldFxuICAgICAgICAkaWNvbkNsYXNzID0gXCJmYSBmYS1leGNsYW1hdGlvbi1jaXJjbGUgcmVkXCI7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gXCJBQk9SVEVEXCIgfHwgcmVzdWx0ID09PSBcIklOVEVSVVBURURcIikge1xuICAgICAgICAkaWNvbkNsYXNzID0gXCJmYSBmYS1jaXJjbGUgZ3JleVwiO1xuICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT09IFwiU1VDQ0VTU1wiIHx8IHJlc3VsdCA9PT0gXCJDT01QTEVURVwiIHx8IHJlc3VsdCA9PT0gXCJDT01QTEVURURcIikge1xuICAgICAgICAkaWNvbkNsYXNzID0gXCJmYSBmYS1jaGVjay1jaXJjbGUgZ3JlZW5cIjtcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0ID09PSBcIk5PVF9TVEFSVEVEXCIpIHtcbiAgICAgICAgJGljb25DbGFzcyA9IFwiZmEgZmEtY2lyY2xlLXRoaW4gZ3JleVwiO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJGljb25DbGFzcztcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCdWlsZFN0YXR1c0JhY2tncm91bmRDbGFzcyhyZXN1bHQpIHtcbiAgICB2YXIgJGljb25DbGFzcyA9IFwiYnVpbGQtcGVuZGluZ1wiO1xuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIGlmIChyZXN1bHQgPT09IFwiRkFJTFVSRVwiIHx8IHJlc3VsdCA9PT0gXCJGQUlMRURcIikge1xuICAgICAgICAkaWNvbkNsYXNzID0gXCJidWlsZC1mYWlsXCI7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gXCJBQk9SVEVEXCIgfHwgcmVzdWx0ID09PSBcIklOVEVSVVBURURcIikge1xuICAgICAgICAkaWNvbkNsYXNzID0gXCJidWlsZC1hYm9ydGVkXCI7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gXCJTVUNDRVNTXCIgfHwgcmVzdWx0ID09PSBcIkNPTVBMRVRFXCIgfHwgcmVzdWx0ID09PSBcIkNPTVBMRVRFRFwiKSB7XG4gICAgICAgICRpY29uQ2xhc3MgPSBcImJ1aWxkLXN1Y2Nlc3NcIjtcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0ID09PSBcIk5PVF9TVEFSVEVEXCIpIHtcbiAgICAgICAgJGljb25DbGFzcyA9IFwiYnVpbGQtbm90LXN0YXJ0ZWRcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICRpY29uQ2xhc3M7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZW5yaWNoSmVua2luc0J1aWxkKGpvYiwgYnVpbGQpIHtcbiAgICB2YXIgbnVtYmVyID0gbnVsbDtcbiAgICBpZiAoYnVpbGQpIHtcbiAgICAgIGJ1aWxkLiRkdXJhdGlvbiA9IGJ1aWxkLmR1cmF0aW9uO1xuICAgICAgYnVpbGQuJHRpbWVzdGFtcCA9IGFzRGF0ZShidWlsZC50aW1lc3RhbXApO1xuICAgICAgdmFyIHByb2plY3RJZCA9IGpvYi4kcHJvamVjdDtcbiAgICAgIHZhciBqb2JOYW1lID0gam9iLiRqb2JJZCB8fCBwcm9qZWN0SWQ7XG4gICAgICB2YXIgYnVpbGRJZCA9IGJ1aWxkLmlkO1xuICAgICAgbnVtYmVyID0gYnVpbGQubnVtYmVyO1xuICAgICAgdmFyIHdvcmtzcGFjZU5hbWUgPSBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XG5cbiAgICAgIHZhciAkaWNvbkNsYXNzID0gY3JlYXRlQnVpbGRTdGF0dXNJY29uQ2xhc3MoYnVpbGQucmVzdWx0KTtcbiAgICAgIHZhciBqb2JVcmwgPSAoam9iIHx8IHt9KS51cmw7XG4gICAgICBpZiAoIWpvYlVybCB8fCAham9iVXJsLnN0YXJ0c1dpdGgoXCJodHRwXCIpKSB7XG4gICAgICAgIHZhciBqZW5raW5zVXJsID0gamVua2luc0xpbmsoKTtcbiAgICAgICAgaWYgKGplbmtpbnNVcmwpIHtcbiAgICAgICAgICBqb2JVcmwgPSBVcmxIZWxwZXJzLmpvaW4oamVua2luc1VybCwgXCJqb2JcIiwgam9iTmFtZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGpvYlVybCkge1xuICAgICAgICBidWlsZC4kam9iTGluayA9IGpvYlVybDtcbiAgICAgICAgaWYgKGJ1aWxkSWQpIHtcbiAgICAgICAgICAvL2J1aWxkLiRsb2dzTGluayA9IFVybEhlbHBlcnMuam9pbihidWlsZC4kYnVpbGRMaW5rLCBcImNvbnNvbGVcIik7XG4gICAgICAgICAgYnVpbGQuJGxvZ3NMaW5rID0gVXJsSGVscGVycy5qb2luKFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJwcm9qZWN0c1wiLCBwcm9qZWN0SWQsIFwiamVua2luc0pvYlwiLCBqb2JOYW1lLCBcImxvZ1wiLCBidWlsZElkKTtcbiAgICAgICAgICBidWlsZC4kcGlwZWxpbmVMaW5rID0gVXJsSGVscGVycy5qb2luKFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJwcm9qZWN0c1wiLCBwcm9qZWN0SWQsIFwiamVua2luc0pvYlwiLCBqb2JOYW1lLCBcInBpcGVsaW5lXCIsIGJ1aWxkSWQpO1xuICAgICAgICAgIGJ1aWxkLiRidWlsZHNMaW5rID0gVXJsSGVscGVycy5qb2luKFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJwcm9qZWN0c1wiLCBwcm9qZWN0SWQsIFwiamVua2luc0pvYlwiLCBqb2JOYW1lKTtcbiAgICAgICAgICAvL2J1aWxkLiRidWlsZExpbmsgPSBVcmxIZWxwZXJzLmpvaW4oam9iVXJsLCBidWlsZC5pZCk7XG4gICAgICAgICAgYnVpbGQuJGJ1aWxkTGluayA9IGJ1aWxkLiRsb2dzTGluaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnVpbGQuJGljb25DbGFzcyA9ICRpY29uQ2xhc3M7XG4gICAgfVxuICAgIHJldHVybiBudW1iZXI7XG4gIH1cblxuXG4gIGV4cG9ydCBmdW5jdGlvbiBqZW5raW5zTGluaygpIHtcbiAgICB2YXIgU2VydmljZVJlZ2lzdHJ5ID0gS3ViZXJuZXRlcy5pbmplY3Q8YW55PihcIlNlcnZpY2VSZWdpc3RyeVwiKTtcbiAgICBpZiAoU2VydmljZVJlZ2lzdHJ5KSB7XG4gICAgICByZXR1cm4gU2VydmljZVJlZ2lzdHJ5LnNlcnZpY2VMaW5rKGplbmtpbnNTZXJ2aWNlTmFtZSk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGZvcmdlUmVhZHlMaW5rKCkge1xuICAgIHZhciBTZXJ2aWNlUmVnaXN0cnkgPSBLdWJlcm5ldGVzLmluamVjdDxhbnk+KFwiU2VydmljZVJlZ2lzdHJ5XCIpO1xuICAgIGlmIChTZXJ2aWNlUmVnaXN0cnkpIHtcbiAgICAgIHJldHVybiBTZXJ2aWNlUmVnaXN0cnkuc2VydmljZVJlYWR5TGluayhLdWJlcm5ldGVzLmZhYnJpYzhGb3JnZVNlcnZpY2VOYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZW5yaWNoSmVua2luc1BpcGVsaW5lSm9iKGpvYiwgcHJvamVjdElkLCBqb2JJZCkge1xuICAgIGlmIChqb2IpIHtcbiAgICAgIGpvYi4kcHJvamVjdCA9IHByb2plY3RJZDtcbiAgICAgIGpvYi4kam9iSWQgPSBqb2JJZDtcbiAgICAgIGFuZ3VsYXIuZm9yRWFjaChqb2IuYnVpbGRzLCAoYnVpbGQpID0+IHtcbiAgICAgICAgZW5yaWNoSmVua2luc1N0YWdlcyhidWlsZCwgcHJvamVjdElkLCBqb2JJZCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZW5yaWNoSmVua2luc1N0YWdlcyhidWlsZCwgcHJvamVjdElkLCBqb2JOYW1lKSB7XG4gICAgaWYgKGJ1aWxkKSB7XG4gICAgICBidWlsZC4kcHJvamVjdCA9IHByb2plY3RJZDtcbiAgICAgIGJ1aWxkLiRqb2JJZCA9IGpvYk5hbWU7XG4gICAgICBidWlsZC4kdGltZXN0YW1wID0gYXNEYXRlKGJ1aWxkLnRpbWVJbk1pbGxpcyk7XG4gICAgICBidWlsZC4kaWNvbkNsYXNzID0gY3JlYXRlQnVpbGRTdGF0dXNJY29uQ2xhc3MoYnVpbGQucmVzdWx0IHx8IFwiTk9UX1NUQVJURURcIik7XG5cbiAgICAgIHZhciB3b3Jrc3BhY2VOYW1lID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xuICAgICAgdmFyIHBhcmFtZXRlcnMgPSBidWlsZC5wYXJhbWV0ZXJzO1xuICAgICAgdmFyICRwYXJhbWV0ZXJDb3VudCA9IDA7XG4gICAgICB2YXIgJHBhcmFtZXRlclRleHQgPSBcIk5vIHBhcmFtZXRlcnNcIjtcbiAgICAgIGlmIChwYXJhbWV0ZXJzKSB7XG4gICAgICAgICRwYXJhbWV0ZXJDb3VudCA9IF8ua2V5cyhwYXJhbWV0ZXJzKS5sZW5ndGggfHwgMDtcbiAgICAgICAgJHBhcmFtZXRlclRleHQgPSBLdWJlcm5ldGVzLmxhYmVsc1RvU3RyaW5nKHBhcmFtZXRlcnMsIFwiIFwiKTtcbiAgICAgIH1cbiAgICAgIGJ1aWxkLiRwYXJhbWV0ZXJDb3VudCA9ICRwYXJhbWV0ZXJDb3VudDtcbiAgICAgIGJ1aWxkLiRwYXJhbWV0ZXJUZXh0ID0gJHBhcmFtZXRlclRleHQ7XG4gICAgICB2YXIgamVua2luc1VybCA9IGplbmtpbnNMaW5rKCk7XG4gICAgICBpZiAoamVua2luc1VybCkge1xuICAgICAgICB2YXIgdXJsID0gYnVpbGQudXJsO1xuICAgICAgICBpZiAodXJsKSB7XG4vKlxuICAgICAgICAgIGJ1aWxkLiR2aWV3TGluayA9IFVybEhlbHBlcnMuam9pbihqZW5raW5zVXJsLCB1cmwpO1xuICAgICAgICAgIGJ1aWxkLiRsb2dMaW5rID0gVXJsSGVscGVycy5qb2luKGJ1aWxkLiR2aWV3TGluaywgXCJsb2dcIik7XG4qL1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBidWlsZC4kbG9nTGluayA9IFVybEhlbHBlcnMuam9pbihcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiwgcHJvamVjdElkLCBcImplbmtpbnNKb2JcIiwgam9iTmFtZSwgXCJsb2dcIiwgYnVpbGQuaWQpO1xuICAgICAgYnVpbGQuJHZpZXdMaW5rID0gYnVpbGQuJGxvZ0xpbms7XG5cbiAgICAgIGFuZ3VsYXIuZm9yRWFjaChidWlsZC5zdGFnZXMsIChzdGFnZSkgPT4ge1xuICAgICAgICBlbnJpY2hKZW5raW5zU3RhZ2Uoc3RhZ2UsIGJ1aWxkKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYnVpbGQ7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZW5yaWNoSmVua2luc1N0YWdlKHN0YWdlLCBidWlsZCA9IG51bGwpIHtcbiAgICBpZiAoc3RhZ2UpIHtcbiAgICAgIGlmIChidWlsZCkge1xuICAgICAgICBzdGFnZS4kYnVpbGRJZCA9IGJ1aWxkLmlkO1xuICAgICAgICBzdGFnZS4kcHJvamVjdCA9IGJ1aWxkLiRwcm9qZWN0O1xuICAgICAgfVxuICAgICAgdmFyIHByb2plY3RJZCA9IGJ1aWxkLiRwcm9qZWN0O1xuICAgICAgdmFyIGpvYk5hbWUgPSBidWlsZC4kam9iSWQgfHwgcHJvamVjdElkO1xuICAgICAgdmFyIGJ1aWxkSWQgPSBidWlsZC5pZDtcbiAgICAgIHZhciB3b3Jrc3BhY2VOYW1lID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xuICAgICAgc3RhZ2UuJGJhY2tncm91bmRDbGFzcyA9ICBjcmVhdGVCdWlsZFN0YXR1c0JhY2tncm91bmRDbGFzcyhzdGFnZS5zdGF0dXMpO1xuICAgICAgc3RhZ2UuJGljb25DbGFzcyA9IGNyZWF0ZUJ1aWxkU3RhdHVzSWNvbkNsYXNzKHN0YWdlLnN0YXR1cyk7XG4gICAgICBzdGFnZS4kc3RhcnRUaW1lID0gYXNEYXRlKHN0YWdlLnN0YXJ0VGltZSk7XG4gICAgICBpZiAoIXN0YWdlLmR1cmF0aW9uKSB7XG4gICAgICAgIHN0YWdlLmR1cmF0aW9uID0gMDtcbiAgICAgIH1cbiAgICAgIHZhciBqZW5raW5zVXJsID0gamVua2luc0xpbmsoKTtcbiAgICAgIGlmIChqZW5raW5zVXJsKSB7XG4gICAgICAgIHZhciB1cmwgPSBzdGFnZS51cmw7XG4gICAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgICBzdGFnZS4kdmlld0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4oamVua2luc1VybCwgdXJsKTtcbiAgICAgICAgICBzdGFnZS4kbG9nTGluayA9IFVybEhlbHBlcnMuam9pbihzdGFnZS4kdmlld0xpbmssIFwibG9nXCIpO1xuICAgICAgICAgIGlmIChwcm9qZWN0SWQgJiYgYnVpbGRJZCkge1xuICAgICAgICAgICAgc3RhZ2UuJGxvZ0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4oXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIHByb2plY3RJZCwgXCJqZW5raW5zSm9iXCIsIGpvYk5hbWUsIFwibG9nXCIsIGJ1aWxkSWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxubW9kdWxlIERldmVsb3BlciB7XG5cbiAgZXhwb3J0IHZhciBjb250ZXh0ID0gJy93b3Jrc3BhY2VzJztcbiAgZXhwb3J0IHZhciBoYXNoID0gJyMnICsgY29udGV4dDtcbiAgZXhwb3J0IHZhciBwbHVnaW5OYW1lID0gJ0RldmVsb3Blcic7XG4gIGV4cG9ydCB2YXIgcGx1Z2luUGF0aCA9ICdwbHVnaW5zL2RldmVsb3Blci8nO1xuICBleHBvcnQgdmFyIHRlbXBsYXRlUGF0aCA9IHBsdWdpblBhdGggKyAnaHRtbC8nO1xuICBleHBvcnQgdmFyIGxvZzpMb2dnaW5nLkxvZ2dlciA9IExvZ2dlci5nZXQocGx1Z2luTmFtZSk7XG5cbiAgZXhwb3J0IHZhciBqZW5raW5zU2VydmljZU5hbWUgPSBcImplbmtpbnNcIjtcbiAgZXhwb3J0IHZhciBqZW5raW5zU2VydmljZU5hbWVBbmRQb3J0ID0gamVua2luc1NlcnZpY2VOYW1lICsgXCI6aHR0cFwiO1xuXG4gIGV4cG9ydCB2YXIgamVua2luc0h0dHBDb25maWcgPSB7XG4gICAgaGVhZGVyczoge1xuICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb24sIHRleHQveC1qc29uLCB0ZXh0L3BsYWluXCJcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWUgaGFzbid0IGNoYW5nZWQgZnJvbSB0aGUgbGFzdCBjYWNoZWQgSlNPTiB2ZXJzaW9uIG9mIHRoaXMgb2JqZWN0XG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24gaGFzT2JqZWN0Q2hhbmdlZCh2YWx1ZSwgc3RhdGUpIHtcbiAgICB2YXIganNvbiA9IGFuZ3VsYXIudG9Kc29uKHZhbHVlIHx8IFwiXCIpO1xuICAgIHZhciBvbGRKc29uID0gc3RhdGUuanNvbjtcbiAgICBzdGF0ZS5qc29uID0ganNvbjtcbiAgICByZXR1cm4gIW9sZEpzb24gfHwganNvbiAhPT0gb2xkSnNvbjtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBwcm9qZWN0Rm9yU2NvcGUoJHNjb3BlKSB7XG4gICAgaWYgKCRzY29wZSkge1xuICAgICAgcmV0dXJuICRzY29wZS5idWlsZENvbmZpZyB8fCAkc2NvcGUuZW50aXR5IHx8ICgkc2NvcGUubW9kZWwgfHwge30pLnByb2plY3Q7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8qKlxuICAgKiBMZXRzIGxvYWQgdGhlIHByb2plY3QgdmVyc2lvbnMgZm9yIHRoZSBnaXZlbiBuYW1lc3BhY2VcbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiBsb2FkUHJvamVjdFZlcnNpb25zKCRzY29wZSwgJGVsZW1lbnQsIHByb2plY3QsIGVudiwgbnMsIGFuc3dlciwgY2FjaGVzKSB7XG4gICAgdmFyIHByb2plY3RBbm5vdGF0aW9uID0gXCJwcm9qZWN0XCI7XG4gICAgdmFyIHZlcnNpb25Bbm5vdGF0aW9uID0gXCJ2ZXJzaW9uXCI7XG5cbiAgICB2YXIgcHJvamVjdE5hbWVzcGFjZSA9IHByb2plY3QuJG5hbWVzcGFjZTtcbiAgICB2YXIgcHJvamVjdE5hbWUgPSBwcm9qZWN0LiRuYW1lO1xuXG4gICAgdmFyIGNhY2hlID0gY2FjaGVzW25zXTtcbiAgICBpZiAoIWNhY2hlKSB7XG4gICAgICBjYWNoZSA9IHt9O1xuICAgICAgY2FjaGVzW25zXSA9IGNhY2hlO1xuICAgIH1cblxuICAgIHZhciBzdGF0dXMgPSB7XG4gICAgICByY3M6IFtdLFxuICAgICAgcG9kczogW10sXG4gICAgICByb3V0ZXM6IFtdLFxuICAgICAgc2VydmljZXM6IFtdXG4gICAgfTtcblxuICAgIHZhciBpbWFnZVN0cmVhbVRhZ3MgPSBbXTtcblxuICAgIGZ1bmN0aW9uIHVwZGF0ZU1vZGVsKCkge1xuICAgICAgdmFyIHByb2plY3RJbmZvcyA9IHt9O1xuICAgICAgdmFyIG1vZGVsID0gJHNjb3BlLm1vZGVsIHx8IHt9O1xuXG4gICAgICBhbmd1bGFyLmZvckVhY2goc3RhdHVzLnJjcywgKGl0ZW0pID0+IHtcbiAgICAgICAgdmFyIG1ldGFkYXRhID0gaXRlbS5tZXRhZGF0YSB8fCB7fTtcbiAgICAgICAgdmFyIG5hbWUgPSBtZXRhZGF0YS5uYW1lO1xuICAgICAgICB2YXIgbGFiZWxzID0gbWV0YWRhdGEubGFiZWxzIHx8IHt9O1xuICAgICAgICB2YXIgYW5ub3RhdGlvbnMgPSBtZXRhZGF0YS5hbm5vdGF0aW9ucyB8fCB7fTtcbiAgICAgICAgdmFyIHNwZWMgPSBpdGVtLnNwZWMgfHwge307XG4gICAgICAgIHZhciBzZWxlY3RvciA9IHNwZWMuc2VsZWN0b3I7XG5cbiAgICAgICAgdmFyIHByb2plY3QgPSBsYWJlbHNbcHJvamVjdEFubm90YXRpb25dO1xuICAgICAgICB2YXIgdmVyc2lvbiA9IGxhYmVsc1t2ZXJzaW9uQW5ub3RhdGlvbl07XG5cbiAgICAgICAgLy8gbGV0cyB0cnkgdGhlIFMySSBkZWZhdWx0cy4uLlxuICAgICAgICBpZiAoIXByb2plY3QpIHtcbiAgICAgICAgICBwcm9qZWN0ID0gbGFiZWxzW1wiYXBwXCJdO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdmVyc2lvbikge1xuICAgICAgICAgIHZlcnNpb24gPSBhbm5vdGF0aW9uc1tcIm9wZW5zaGlmdC5pby9kZXBsb3ltZW50LWNvbmZpZy5sYXRlc3QtdmVyc2lvblwiXVxuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9qZWN0ICYmIHZlcnNpb24gJiYgcHJvamVjdCA9PT0gcHJvamVjdE5hbWUpIHtcbiAgICAgICAgICB2YXIgcHJvamVjdHMgPSBwcm9qZWN0SW5mb3NbcHJvamVjdF07XG4gICAgICAgICAgaWYgKCFwcm9qZWN0cykge1xuICAgICAgICAgICAgcHJvamVjdHMgPSB7XG4gICAgICAgICAgICAgIHByb2plY3Q6IHByb2plY3QsXG4gICAgICAgICAgICAgIHZlcnNpb25zOiB7fVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHByb2plY3RJbmZvc1twcm9qZWN0XSA9IHByb2plY3RzO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgdmVyc2lvbkluZm8gPSBwcm9qZWN0cy52ZXJzaW9uc1t2ZXJzaW9uXTtcbiAgICAgICAgICBpZiAoIXZlcnNpb25JbmZvKSB7XG4gICAgICAgICAgICB2ZXJzaW9uSW5mbyA9IHtcbiAgICAgICAgICAgICAgcmVwbGljYXRpb25Db250cm9sbGVyczoge31cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBwcm9qZWN0cy52ZXJzaW9uc1t2ZXJzaW9uXSA9IHZlcnNpb25JbmZvO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgICAgdmVyc2lvbkluZm8ucmVwbGljYXRpb25Db250cm9sbGVyc1tuYW1lXSA9IGl0ZW07XG4gICAgICAgICAgICBpdGVtLiRuYW1lID0gbmFtZTtcbiAgICAgICAgICAgIGlmIChwcm9qZWN0TmFtZXNwYWNlICYmIHByb2plY3ROYW1lKSB7XG4gICAgICAgICAgICAgIGl0ZW0uJHZpZXdMaW5rID0gVXJsSGVscGVycy5qb2luKFwiL3dvcmtzcGFjZXMvXCIsIHByb2plY3ROYW1lc3BhY2UsIFwicHJvamVjdHNcIiwgcHJvamVjdE5hbWUsIFwibmFtZXNwYWNlXCIsIG5zLCBcInJlcGxpY2F0aW9uQ29udHJvbGxlcnNcIiwgbmFtZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBsb2cud2FybihcIk1pc3NpbmcgcHJvamVjdCBkYXRhISBcIiArIHByb2plY3ROYW1lc3BhY2UgKyBcIiBuYW1lIFwiICsgcHJvamVjdE5hbWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpdGVtLiRzZXJ2aWNlcyA9IFtdO1xuICAgICAgICAgICAgdmFyIHJjTGluayA9IG51bGw7XG4gICAgICAgICAgICBzdGF0dXMuc2VydmljZXMuZm9yRWFjaCgoc2VydmljZSkgPT4ge1xuICAgICAgICAgICAgICB2YXIgcmVwU2VsZWN0b3IgPSBLdWJlcm5ldGVzLmdldFNlbGVjdG9yKGl0ZW0pO1xuICAgICAgICAgICAgICB2YXIgc2VydmljZVNlbGVjdG9yID0gS3ViZXJuZXRlcy5nZXRTZWxlY3RvcihzZXJ2aWNlKTtcbiAgICAgICAgICAgICAgaWYgKHNlcnZpY2VTZWxlY3RvciAmJiByZXBTZWxlY3RvciAmJlxuICAgICAgICAgICAgICAgIEt1YmVybmV0ZXMuc2VsZWN0b3JNYXRjaGVzKHNlcnZpY2VTZWxlY3RvciwgcmVwU2VsZWN0b3IpICYmXG4gICAgICAgICAgICAgICAgS3ViZXJuZXRlcy5nZXROYW1lc3BhY2Uoc2VydmljZSkgPT09IEt1YmVybmV0ZXMuZ2V0TmFtZXNwYWNlKGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgc3RhdHVzLnJvdXRlcy5mb3JFYWNoKChyb3V0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgdmFyIHNlcnZpY2VOYW1lID0gS3ViZXJuZXRlcy5nZXROYW1lKHNlcnZpY2UpO1xuICAgICAgICAgICAgICAgICAgaWYgKHNlcnZpY2VOYW1lID09PSBLdWJlcm5ldGVzLmdldE5hbWUocm91dGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlcnZpY2VbXCIkcm91dGVcIl0gPSByb3V0ZTtcbiAgICAgICAgICAgICAgICAgICAgc2VydmljZVtcIiRob3N0XCJdID0gQ29yZS5wYXRoR2V0KHJvdXRlLCBbXCJzcGVjXCIsIFwiaG9zdFwiXSk7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uJHNlcnZpY2VzLnB1c2goc2VydmljZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcmNMaW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFyIHVybCA9IEt1YmVybmV0ZXMuc2VydmljZUxpbmtVcmwoc2VydmljZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyBmaW5kIGljb24gZXRjP1xuICAgICAgICAgICAgICAgICAgICAgICAgcmNMaW5rID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBzZXJ2aWNlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZjogdXJsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGl0ZW1bXCIkc2VydmljZUxpbmtcIl0gPSByY0xpbms7XG4gICAgICAgICAgfVxuICAgICAgICAgIGl0ZW0uJGJ1aWxkSWQgPSBhbm5vdGF0aW9uc1tcImZhYnJpYzguaW8vYnVpbGQtaWRcIl0gfHwgaXRlbS4kYnVpbGRJZDtcbiAgICAgICAgICBpdGVtLiRidWlsZFVybCA9IGFubm90YXRpb25zW1wiZmFicmljOC5pby9idWlsZC11cmxcIl0gfHwgaXRlbS4kYnVpbGRVcmw7XG4gICAgICAgICAgaXRlbS4kZ2l0Q29tbWl0ID0gYW5ub3RhdGlvbnNbXCJmYWJyaWM4LmlvL2dpdC1jb21taXRcIl0gfHwgaXRlbS4kZ2l0Q29tbWl0O1xuICAgICAgICAgIGl0ZW0uJGdpdFVybCA9IGFubm90YXRpb25zW1wiZmFicmljOC5pby9naXQtdXJsXCJdIHx8IGl0ZW0uJGdpdFVybDtcbiAgICAgICAgICBpdGVtLiRnaXRCcmFuY2ggPSBhbm5vdGF0aW9uc1tcImZhYnJpYzguaW8vZ2l0LWJyYW5jaFwiXSB8fCBpdGVtLiRnaXRCcmFuY2g7XG4gICAgICAgICAgaWYgKCFpdGVtLiRnaXRDb21taXQpIHtcbiAgICAgICAgICAgIHZhciBpbWFnZSA9IGdldEltYWdlKGl0ZW0pO1xuICAgICAgICAgICAgaWYgKGltYWdlKSB7XG4gICAgICAgICAgICAgIGlmICghJHNjb3BlLiRpc1dhdGNoSW1hZ2VzKSB7XG4gICAgICAgICAgICAgICAgJHNjb3BlLiRpc1dhdGNoSW1hZ2VzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBLdWJlcm5ldGVzLndhdGNoKCRzY29wZSwgJGVsZW1lbnQsIFwiaW1hZ2VzXCIsIG51bGwsIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpbWFnZVN0cmVhbVRhZ3MgPSBkYXRhO1xuICAgICAgICAgICAgICAgICAgY2hlY2tGb3JNaXNzaW5nTWV0YWRhdGEoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjaGVja0Zvck1pc3NpbmdNZXRhZGF0YSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldEltYWdlKGl0ZW0pIHtcbiAgICAgICAgICAgICAgdmFyIGltYWdlID0gXCJcIjtcbiAgICAgICAgICAgICAgLy8gbGV0cyBzZWUgaWYgd2UgY2FuIGZpbmQgdGhlIGNvbW1pdCBpZCBmcm9tIGEgUzJJIGltYWdlIG5hbWVcbiAgICAgICAgICAgICAgLy8gVE9ETyBuZWVkcyB0aGlzIGlzc3VlIGZpeGVkIHRvIGZpbmQgaXQgdmlhIGFuIE9wZW5TaGlmdCBhbm5vdGF0aW9uOlxuICAgICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vb3BlbnNoaWZ0L29yaWdpbi9pc3N1ZXMvNjI0MVxuICAgICAgICAgICAgICB2YXIgY29udGFpbmVycyA9IENvcmUucGF0aEdldChpdGVtLCBbXCJzcGVjXCIsIFwidGVtcGxhdGVcIiwgXCJzcGVjXCIsIFwiY29udGFpbmVyc1wiXSk7XG4gICAgICAgICAgICAgIGlmIChjb250YWluZXJzICYmIGNvbnRhaW5lcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGNvbnRhaW5lcnNbMF07XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgICAgaW1hZ2UgPSBjb250YWluZXIuaW1hZ2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBpbWFnZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gY2hlY2tGb3JNaXNzaW5nTWV0YWRhdGEoKSB7XG4gICAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChwcm9qZWN0cy52ZXJzaW9ucywgKHZpKSA9PiB7XG4gICAgICAgICAgICAgICAgYW5ndWxhci5mb3JFYWNoKHZpLnJlcGxpY2F0aW9uQ29udHJvbGxlcnMsIChpdGVtLCBuYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoIWl0ZW0uJGdpdENvbW1pdCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaW1hZ2UgPSBnZXRJbWFnZShpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGltYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgYW5ndWxhci5mb3JFYWNoKGltYWdlU3RyZWFtVGFncywgKGltYWdlU3RyZWFtVGFnKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW1hZ2VOYW1lID0gaW1hZ2VTdHJlYW1UYWcuZG9ja2VySW1hZ2VSZWZlcmVuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2VOYW1lICYmIGltYWdlTmFtZSA9PT0gaW1hZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvdW5kSVNUYWcgPSBpbWFnZVN0cmVhbVRhZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hbmlmZXN0SlNPTiA9IGltYWdlU3RyZWFtVGFnLmRvY2tlckltYWdlTWFuaWZlc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYW5pZmVzdEpTT04pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFuaWZlc3QgPSBhbmd1bGFyLmZyb21Kc29uKG1hbmlmZXN0SlNPTikgfHwge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhpc3RvcnkgPSBtYW5pZmVzdC5oaXN0b3J5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoaXN0b3J5ICYmIGhpc3RvcnkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdjEgPSBoaXN0b3J5WzBdLnYxQ29tcGF0aWJpbGl0eTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2MSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGFuZ3VsYXIuZnJvbUpzb24odjEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW52ID0gQ29yZS5wYXRoR2V0KGRhdGEsIFtcImNvbmZpZ1wiLCBcIkVudlwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChlbnYsIChlbnZFeHApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW52RXhwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gZW52RXhwLnNwbGl0KFwiPVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID09PSAyICYmIHZhbHVlc1swXSA9PSBcIk9QRU5TSElGVF9CVUlMRF9OQU1FXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1aWxkTmFtZSA9IHZhbHVlc1sxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1aWxkTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uJGJ1aWxkSWQgPSBidWlsZE5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS4kYnVpbGRVcmwgPSBEZXZlbG9wZXIucHJvamVjdFdvcmtzcGFjZUxpbmsobnMsIHByb2plY3ROYW1lLCBcImJ1aWxkTG9ncy9cIiArIGJ1aWxkTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGFiZWxzID0gQ29yZS5wYXRoR2V0KGRhdGEsIFtcImNvbmZpZ1wiLCBcIkxhYmVsc1wiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYWJlbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLiRnaXRDb21taXQgPSBsYWJlbHNbXCJpby5vcGVuc2hpZnQuYnVpbGQuY29tbWl0LmlkXCJdIHx8IGl0ZW0uJGdpdENvbW1pdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLiRnaXRDb21taXRBdXRob3IgPSBsYWJlbHNbXCJpby5vcGVuc2hpZnQuYnVpbGQuY29tbWl0LmF1dGhvclwiXSB8fCBpdGVtLiRnaXRDb21taXRBdXRob3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS4kZ2l0Q29tbWl0RGF0ZSA9IGxhYmVsc1tcImlvLm9wZW5zaGlmdC5idWlsZC5jb21taXQuZGF0ZVwiXSB8fCBpdGVtLiRnaXRDb21taXREYXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uJGdpdENvbW1pdE1lc3NhZ2UgPSBsYWJlbHNbXCJpby5vcGVuc2hpZnQuYnVpbGQuY29tbWl0Lm1lc3NhZ2VcIl0gfHwgaXRlbS4kZ2l0Q29tbWl0TWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLiRnaXRCcmFuY2ggPSBsYWJlbHNbXCJpby5vcGVuc2hpZnQuYnVpbGQuY29tbWl0LnJlZlwiXSB8fCBpdGVtLiRnaXRCcmFuY2g7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZW0uJGdpdFVybCAmJiBpdGVtLiRnaXRDb21taXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uJGdpdFVybCA9IERldmVsb3Blci5wcm9qZWN0V29ya3NwYWNlTGluayhucywgcHJvamVjdE5hbWUsIFwid2lraS9jb21taXREZXRhaWwvLy9cIiArIGl0ZW0uJGdpdENvbW1pdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICAgICAgICB2YXIgc2VsZWN0b3JUZXh0ID0gS3ViZXJuZXRlcy5sYWJlbHNUb1N0cmluZyhzZWxlY3RvciwgXCIsXCIpO1xuICAgICAgICAgICAgdmFyIHBvZExpbmtVcmwgPSBVcmxIZWxwZXJzLmpvaW4ocHJvamVjdExpbmsocHJvamVjdE5hbWUpLCBcIm5hbWVzcGFjZVwiLCBucywgXCJwb2RzXCIpO1xuICAgICAgICAgICAgaXRlbS5wb2RzID0gW107XG4gICAgICAgICAgICBpdGVtLiRwb2RDb3VudGVycyA9IEt1YmVybmV0ZXMuY3JlYXRlUG9kQ291bnRlcnMoc2VsZWN0b3IsIHN0YXR1cy5wb2RzLCBpdGVtLnBvZHMsIHNlbGVjdG9yVGV4dCwgcG9kTGlua1VybCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gbGV0cyBjaGVjayBmb3IgYSBwcm9qZWN0IG5hbWUgaWYgd2UgaGF2ZSBsb3RzIG9mIFJDcyB3aXRoIG5vIHBvZHMsIGxldHMgcmVtb3ZlIHRoZW0hXG4gICAgICBhbmd1bGFyLmZvckVhY2gocHJvamVjdEluZm9zLCAocHJvamVjdCwgcHJvamVjdE5hbWUpID0+IHtcbiAgICAgICAgdmFyIHJjc05vUG9kcyA9IFtdO1xuICAgICAgICB2YXIgcmNzV2l0aFBvZHMgPSBbXTtcbiAgICAgICAgYW5ndWxhci5mb3JFYWNoKHByb2plY3QudmVyc2lvbnMsICh2ZXJzaW9uSW5mbykgPT4ge1xuICAgICAgICAgIHZhciByY3MgPSB2ZXJzaW9uSW5mby5yZXBsaWNhdGlvbkNvbnRyb2xsZXJzO1xuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChyY3MsIChpdGVtLCBuYW1lKSA9PiB7XG4gICAgICAgICAgICB2YXIgY291bnQgPSBLdWJlcm5ldGVzLnBvZENvdW50ZXJUb3RhbChpdGVtLiRwb2RDb3VudGVycyk7XG4gICAgICAgICAgICBpZiAoY291bnQpIHtcbiAgICAgICAgICAgICAgcmNzV2l0aFBvZHMucHVzaChuYW1lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJjc05vUG9kcy5wdXNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBkZWxldGUgcmNzW25hbWVdO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChyY3NXaXRoUG9kcy5sZW5ndGgpIHtcbiAgICAgICAgICAvLyBsZXRzIHJlbW92ZSBhbGwgdGhlIGVtcHR5IFJDc1xuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChyY3NOb1BvZHMsIChmbikgPT4ge1xuICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChoYXNPYmplY3RDaGFuZ2VkKHByb2plY3RJbmZvcywgY2FjaGUpKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhcInByb2plY3QgdmVyc2lvbnMgaGFzIGNoYW5nZWQhXCIpO1xuICAgICAgICBhbnN3ZXJbbnNdID0gcHJvamVjdEluZm9zO1xuICAgICAgfVxuICAgIH1cblxuICAgIEt1YmVybmV0ZXMud2F0Y2goJHNjb3BlLCAkZWxlbWVudCwgXCJyZXBsaWNhdGlvbmNvbnRyb2xsZXJzXCIsIG5zLCAoZGF0YSkgPT4ge1xuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgc3RhdHVzLnJjcyA9IGRhdGE7XG4gICAgICAgIHVwZGF0ZU1vZGVsKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgS3ViZXJuZXRlcy53YXRjaCgkc2NvcGUsICRlbGVtZW50LCBcInNlcnZpY2VzXCIsIG5zLCAoZGF0YSkgPT4ge1xuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgc3RhdHVzLnNlcnZpY2VzID0gZGF0YTtcbiAgICAgICAgdXBkYXRlTW9kZWwoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBLdWJlcm5ldGVzLndhdGNoKCRzY29wZSwgJGVsZW1lbnQsIFwicm91dGVzXCIsIG5zLCAoZGF0YSkgPT4ge1xuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgc3RhdHVzLnJvdXRlcyA9IGRhdGE7XG4gICAgICAgIHVwZGF0ZU1vZGVsKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgS3ViZXJuZXRlcy53YXRjaCgkc2NvcGUsICRlbGVtZW50LCBcInBvZHNcIiwgbnMsIChkYXRhKSA9PiB7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBzdGF0dXMucG9kcyA9IGRhdGE7XG4gICAgICAgIHVwZGF0ZU1vZGVsKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuXG59IiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxubW9kdWxlIERldmVsb3BlciB7XG5cbi8qXG4gIGZ1bmN0aW9uIGhvbWVCcmVhZGNydW1iKCkge1xuICAgIHJldHVybiB7XG4gICAgICBocmVmOiBcIi9ob21lXCIsXG4gICAgICBsYWJlbDogXCJIb21lXCIsXG4gICAgICB0aXRsZTogXCJHbyB0byB0aGUgaG9tZSBwYWdlXCJcbiAgICB9XG4gIH1cbiovXG4gIGZ1bmN0aW9uIGRldmVsb3BCcmVhZGNydW1iKCkge1xuICAgIHJldHVybiB7XG4gICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiKSxcbiAgICAgIGxhYmVsOiBcIkRldmVsb3BcIixcbiAgICAgIHRpdGxlOiBcIlZpZXcgYWxsIHRoZSBhcHBzIGZvciBhIHByb2plY3RcIlxuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gb3BlcmF0ZUJyZWFkY3J1bWIoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhyZWY6IFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi9uYW1lc3BhY2VzXCIpLFxuICAgICAgbGFiZWw6IFwiTWFuYWdlXCIsXG4gICAgICB0aXRsZTogXCJNYW5hZ2UgdGhlIHByb2plY3RzIGFuZCByZXNvdXJjZXMgaW5zaWRlIHRoZW1cIlxuICAgIH07XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gd29ya3NwYWNlTGluaygpIHtcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBwcm9qZWN0TGluayhwcm9qZWN0SWQpIHtcbiAgICB2YXIgbGluayA9IHdvcmtzcGFjZUxpbmsoKTtcbiAgICBpZiAocHJvamVjdElkKSB7XG4gICAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKGxpbmssIFwiL3Byb2plY3RzXCIsIHByb2plY3RJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBsaW5rO1xuICAgIH1cbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXb3Jrc3BhY2VzQnJlYWRjcnVtYnMoZGV2ZWxvcFBlcnNwZWN0aXZlKSB7XG4vKlxuICAgIGlmIChkZXZlbG9wUGVyc3BlY3RpdmUpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIC8vaG9tZUJyZWFkY3J1bWIoKSxcbiAgICAgICAgZGV2ZWxvcEJyZWFkY3J1bWIoKVxuICAgICAgXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgLy9ob21lQnJlYWRjcnVtYigpLFxuICAgICAgICBvcGVyYXRlQnJlYWRjcnVtYigpXG4gICAgICBdO1xuICAgIH1cbiovXG4gICAgcmV0dXJuIFtdO1xuICB9XG5cblxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlV29ya3NwYWNlc1N1Yk5hdkJhcnMoZGV2ZWxvcFBlcnNwZWN0aXZlKSB7XG4gICAgICByZXR1cm4gYWN0aXZhdGVDdXJyZW50KFtcbiAgICAgICAgZGV2ZWxvcEJyZWFkY3J1bWIoKSxcbiAgICAgICAgb3BlcmF0ZUJyZWFkY3J1bWIoKVxuICAgICAgXSk7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlV29ya3NwYWNlQnJlYWRjcnVtYnMoY2hpbGRyZW4gPSBudWxsLCB3b3Jrc3BhY2VOYW1lID0gbnVsbCkge1xuICAgIHZhciBhbnN3ZXIgPSBbXG4gICAgICAvL2hvbWVCcmVhZGNydW1iKCksXG4gICAgICBkZXZlbG9wQnJlYWRjcnVtYigpXG4gICAgXTtcbiAgICBpZiAoIXdvcmtzcGFjZU5hbWUpIHtcbiAgICAgIHdvcmtzcGFjZU5hbWUgPSBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XG4gICAgfVxuICAgIGlmICh3b3Jrc3BhY2VOYW1lKSB7XG4gICAgICBhbnN3ZXIucHVzaChcbiAgICAgICAge1xuICAgICAgICAgIGhyZWY6IFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzL1wiLCB3b3Jrc3BhY2VOYW1lKSxcbiAgICAgICAgICBsYWJlbDogd29ya3NwYWNlTmFtZSxcbiAgICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBwcm9qZWN0OiBcIiArIHdvcmtzcGFjZU5hbWVcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHJldHVybiBwcm9jZXNzQ2hpbGRyZW4oYW5zd2VyLCBjaGlsZHJlbik7XG4gICAgfVxuICAgIHJldHVybiBhbnN3ZXI7XG4gIH1cblxuXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFbnZpcm9ubWVudEJyZWFkY3J1bWJzKCRzY29wZSwgJGxvY2F0aW9uLCAkcm91dGVQYXJhbXMpIHtcbiAgICB2YXIgbnMgPSBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XG4gICAgdmFyIG5hbWVzcGFjZXNMaW5rID0gVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL2t1YmVybmV0ZXMvbmFtZXNwYWNlXCIpO1xuICAgIHZhciB3b3Jrc3BhY2VOYW1lID0gJHJvdXRlUGFyYW1zLndvcmtzcGFjZTtcbiAgICB2YXIgcHJvamVjdCA9ICRyb3V0ZVBhcmFtcy5wcm9qZWN0O1xuICAgIGlmICh3b3Jrc3BhY2VOYW1lICYmIHByb2plY3QpIHtcbiAgICAgIHZhciBwcm9qZWN0TGluayA9IFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiwgcHJvamVjdCk7XG4gICAgICAkc2NvcGUuJHByb2plY3RMaW5rID0gcHJvamVjdExpbms7XG4gICAgICAkc2NvcGUuJHByb2plY3ROYW1lc3BhY2VMaW5rID0gVXJsSGVscGVycy5qb2luKHByb2plY3RMaW5rLCBcIm5hbWVzcGFjZVwiLCBucyk7XG4gICAgICBuYW1lc3BhY2VzTGluayA9IFVybEhlbHBlcnMuam9pbihwcm9qZWN0TGluaywgXCJuYW1lc3BhY2VcIik7XG4gICAgICAvLyBUT0RPIHVzZSB0aGUgbG9naWNhbCBuYW1lP1xuICAgICAgdmFyIGVudk5hbWUgPSBucztcbiAgICAgIHZhciBidWlsZENvbmZpZyA9IG51bGw7XG4gICAgICBpZiAoJHNjb3BlLm1vZGVsKSB7XG4gICAgICAgIGJ1aWxkQ29uZmlnID0gJHNjb3BlLm1vZGVsLmdldFByb2plY3QocHJvamVjdCwgd29ya3NwYWNlTmFtZSk7XG4gICAgICAgIGlmIChidWlsZENvbmZpZykge1xuICAgICAgICAgIC8vIGxldHMgZmluZCB0aGUgbGFiZWwgZm9yIHRoZSBuYW1lc3BhY2VcbiAgICAgICAgICB2YXIgZW52ID0gXy5maW5kKGJ1aWxkQ29uZmlnLmVudmlyb25tZW50cywgeyBuYW1lc3BhY2U6IG5zfSk7XG4gICAgICAgICAgaWYgKGVudikge1xuICAgICAgICAgICAgZW52TmFtZSA9IGVudlsnbGFiZWwnXSB8fCBlbnZOYW1lO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsb2cuaW5mbyhcImVudiBmb3VuZDogXCIgKyBlbnYgKyBcIiBmb3IgbmFtZXBwYWNlIFwiICsgbnMgKyBcIiBvbiBidWlsZENvbmZpZzogXCIgKyBidWlsZENvbmZpZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBjaGlsZHJlbiA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4ocHJvamVjdExpbmssIFwiZW52aXJvbm1lbnRzXCIpLFxuICAgICAgICAgICAgbGFiZWw6IFwiRW52aXJvbm1lbnRzXCIsXG4gICAgICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBlbnZpcm9ubWVudHMgZm9yIHRoaXMgcHJvamVjdFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4obmFtZXNwYWNlc0xpbmssIG5zLCBcImFwcHNcIiksXG4gICAgICAgICAgICBsYWJlbDogZW52TmFtZSxcbiAgICAgICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIHJ1bnRpbWUgb2YgdGhlIHdvcmtzcGFjZTogXCIgKyBuc1xuICAgICAgICAgIH1cbiAgICAgICAgICBdO1xuICAgICAgcmV0dXJuIGNyZWF0ZVByb2plY3RCcmVhZGNydW1icyhwcm9qZWN0LCBjaGlsZHJlbiwgd29ya3NwYWNlTmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghd29ya3NwYWNlTmFtZSkge1xuICAgICAgICB3b3Jrc3BhY2VOYW1lID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjdGl2YXRlQ3VycmVudChbXG4gICAgICAgIC8vaG9tZUJyZWFkY3J1bWIoKSxcbiAgICAgICAgb3BlcmF0ZUJyZWFkY3J1bWIoKSxcbiAgICAgICAge1xuICAgICAgICAgIGhyZWY6IFVybEhlbHBlcnMuam9pbihuYW1lc3BhY2VzTGluaywgbnMsIFwiYXBwc1wiKSxcbiAgICAgICAgICBsYWJlbDogd29ya3NwYWNlTmFtZSxcbiAgICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBydW50aW1lIG9mIHRoZSB3b3Jrc3BhY2U6IFwiICsgbnNcbiAgICAgICAgfVxuICAgICAgXSk7XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByb2plY3RCcmVhZGNydW1icyhwcm9qZWN0TmFtZSA9IG51bGwsIGNoaWxkcmVuID0gbnVsbCwgd29ya3NwYWNlTmFtZSA9IG51bGwpIHtcbiAgICBpZiAoIXdvcmtzcGFjZU5hbWUpIHtcbiAgICAgIHdvcmtzcGFjZU5hbWUgPSBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XG4gICAgfVxuICAgIHZhciBhbnN3ZXIgPSBjcmVhdGVXb3Jrc3BhY2VCcmVhZGNydW1icyhudWxsLCB3b3Jrc3BhY2VOYW1lKTtcbiAgICBpZiAod29ya3NwYWNlTmFtZSkge1xuICAgICAgaWYgKHByb2plY3ROYW1lKSB7XG4gICAgICAgIGFuc3dlci5wdXNoKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGhyZWY6IFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiksXG4gICAgICAgICAgICBsYWJlbDogXCJBcHBzXCIsXG4gICAgICAgICAgICB0aXRsZTogXCJWaWV3IGFsbCB0aGUgYXBwcyBpbiB0aGlzIHByb2plY3RcIlxuICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICBhbnN3ZXIucHVzaChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIHByb2plY3ROYW1lKSxcbiAgICAgICAgICAgIGxhYmVsOiBwcm9qZWN0TmFtZSxcbiAgICAgICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIHByb2plY3Q6IFwiICsgcHJvamVjdE5hbWVcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJvY2Vzc0NoaWxkcmVuKGFuc3dlciwgY2hpbGRyZW4pO1xuICAgIH1cbiAgICByZXR1cm4gYW5zd2VyO1xuICB9XG5cblxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJvamVjdFNldHRpbmdzQnJlYWRjcnVtYnMocHJvamVjdE5hbWUsIHdvcmtzcGFjZU5hbWUgPSBudWxsKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gW3tcbiAgICAgIGxhYmVsOiBcIlNldHRpbmdzXCIsXG4gICAgICB0aXRsZTogXCJWaWV3IHRoZSBzZXR0aW5ncyBvZiB0aGlzIGFwcFwiXG4gICAgfV07XG4gICAgaWYgKCFwcm9qZWN0TmFtZSkge1xuICAgICAgdmFyIGNoaWxkcmVuID0gW3tcbiAgICAgICAgbGFiZWw6IFwiTmV3IEFwcFwiLFxuICAgICAgICB0aXRsZTogXCJMZXRzIG1ha2UgYSBuZXcgYXBwXCJcbiAgICAgIH1dO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlUHJvamVjdEJyZWFkY3J1bWJzKHByb2plY3ROYW1lLCBjaGlsZHJlbiwgd29ya3NwYWNlTmFtZSk7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlV29ya3NwYWNlU3ViTmF2QmFycygpIHtcbiAgICB2YXIgd29ya3NwYWNlTmFtZSA9IEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcbiAgICByZXR1cm4gYWN0aXZhdGVDdXJyZW50KFtcbiAgICAgIHtcbiAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSksXG4gICAgICAgIGxhYmVsOiBcIkFwcHNcIixcbiAgICAgICAgY2xhc3M6IFwiZmEgZmEtcm9ja2V0XCIsXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIGFwcHMgaW4gdGhpcyBwcm9qZWN0XCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlzVmFsaWQ6ICgpID0+IGplbmtpbnNMaW5rKCksXG4gICAgICAgIGhyZWY6IFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwiamVua2luc0pvYlwiKSxcbiAgICAgICAgbGFiZWw6IFwiQnVpbGRzXCIsXG4gICAgICAgIGNsYXNzOiBcImZhIGZhLWNvZGVcIixcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgYnVpbGRzIGluIHRoaXMgcHJvamVjdFwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIva3ViZXJuZXRlcy9uYW1lc3BhY2VcIiwgd29ya3NwYWNlTmFtZSwgXCJhcHBzXCIpLFxuICAgICAgICBsYWJlbDogXCJSdW50aW1lXCIsXG4gICAgICAgIGNsYXNzOiBcImZhIGZhLWdlYXJzXCIsXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIHJ1bnRpbWUgcmVzb3VyY2VzIGluIHRoaXMgcHJvamVjdFwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcImRldGFpbFwiKSxcbiAgICAgICAgbGFiZWw6IFwiRGV0YWlsc1wiLFxuICAgICAgICBjbGFzczogXCJmYSBmYS1nZWFyXCIsXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIHByb2plY3QgZGV0YWlsc1wiXG4gICAgICB9XG4gICAgXSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVCdWlsZHNMaW5rKHdvcmtzcGFjZU5hbWUsIHByb2plY3ROYW1lLCBqZW5raW5zSm9iSWQpIHtcbiAgICB3b3Jrc3BhY2VOYW1lID0gd29ya3NwYWNlTmFtZSB8fCBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiwgcHJvamVjdE5hbWUsIFwiamVua2luc0pvYlwiLCBqZW5raW5zSm9iSWQpO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByb2plY3RTdWJOYXZCYXJzKHByb2plY3ROYW1lLCBqZW5raW5zSm9iSWQgPSBudWxsLCAkc2NvcGUgPSBudWxsKSB7XG4gICAgdmFyIHdvcmtzcGFjZU5hbWUgPSBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XG4gICAgdmFyIHByb2plY3RMaW5rID0gVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJwcm9qZWN0c1wiLCBwcm9qZWN0TmFtZSk7XG4gICAgdmFyIGJ1aWxkc0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4ocHJvamVjdExpbmssIFwiYnVpbGRzXCIpO1xuICAgIGlmICghamVua2luc0pvYklkKSB7XG4gICAgICBqZW5raW5zSm9iSWQgPSBwcm9qZWN0TmFtZTtcbiAgICB9XG4gICAgdmFyIGplbmtpbnNCdWlsZExpbmsgPSBudWxsO1xuICAgIHZhciBwaXBlbGluZXNMaW5rID0gbnVsbDtcbiAgICBpZiAocHJvamVjdE5hbWUgJiYgamVua2luc0pvYklkKSB7XG4gICAgICBqZW5raW5zQnVpbGRMaW5rID0gY3JlYXRlQnVpbGRzTGluayh3b3Jrc3BhY2VOYW1lLCBwcm9qZWN0TmFtZSwgamVua2luc0pvYklkKTtcbiAgICAgIHBpcGVsaW5lc0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4oamVua2luc0J1aWxkTGluaywgXCJwaXBlbGluZXNcIik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNKZW5raW5zQnVpbGQoKSB7XG4gICAgICB2YXIgYW5zd2VyID0gamVua2luc0xpbmsoKSAmJiBqZW5raW5zQnVpbGRMaW5rO1xuICAgICAgaWYgKGFuc3dlciAmJiAkc2NvcGUpIHtcbiAgICAgICAgdmFyIGVudGl0eSA9IERldmVsb3Blci5wcm9qZWN0Rm9yU2NvcGUoJHNjb3BlKTtcbiAgICAgICAgaWYgKGVudGl0eSkge1xuICAgICAgICAgIHJldHVybiBhbnN3ZXIgJiYgZW50aXR5LiRqZW5raW5zSm9iO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYW5zd2VyO1xuICAgIH1cblxuICAgIHZhciBhbnN3ZXIgPSBbXG4gICAgICB7XG4gICAgICAgIGhyZWY6IFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUpLFxuICAgICAgICBsYWJlbDogXCJBbGwgQXBwc1wiLFxuICAgICAgICBjbGFzczogJ2ZhIGZhLWFuZ2xlLWRvdWJsZS1sZWZ0JyxcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgYXBwcyBpbiB0aGlzIHByb2plY3RcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdGVtcGxhdGU6IGA8ZGl2IG5nLWluY2x1ZGU9XCIncGx1Z2lucy9kZXZlbG9wZXIvaHRtbC9wcm9qZWN0U2VsZWN0b3IuaHRtbCdcIj48L2Rpdj5gXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIHByb2plY3ROYW1lLCBcImVudmlyb25tZW50c1wiKSxcbiAgICAgICAgaXNBY3RpdmU6IChzdWJUYWIsIHBhdGgpID0+IHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKFwic3ViVGFiOiBcIiwgc3ViVGFiLCBcIiBwYXRoOiBcIiwgcGF0aCk7XG4gICAgICAgICAgaWYgKHBhdGggPT09IHN1YlRhYi5ocmVmKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIHJvb3RQYXRoID0gc3ViVGFiLmhyZWYucmVwbGFjZSgvXFwvZW52aXJvbm1lbnRzLywgJycpO1xuICAgICAgICAgIGlmIChwYXRoID09PSByb290UGF0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgICAgLy9ocmVmOiBVcmxIZWxwZXJzLmpvaW4oXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIHByb2plY3ROYW1lKSxcbiAgICAgICAgbGFiZWw6IFwiRGFzaGJvYXJkXCIsXG4gICAgICAgIGNsYXNzOiBcImZhIGZhLXRhY2hvbWV0ZXJcIixcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgYXBwIGRhc2hib2FyZCBmb3IgdGhlIGFjdGl2aXR5LCBlbnZpcm9ubWVudHMgYW5kIHBpcGVsaW5lc1wiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpc1ZhbGlkOiAoKSA9PiBpc0plbmtpbnNCdWlsZCgpICYmIHBpcGVsaW5lc0xpbmssXG4gICAgICAgIGlkOiBcInBpcGVsaW5lc1wiLFxuICAgICAgICBocmVmOiBwaXBlbGluZXNMaW5rLFxuICAgICAgICBsYWJlbDogXCJQaXBlbGluZXNcIixcbiAgICAgICAgY2xhc3M6IFwiZmEgZmEtZWxsaXBzaXMtaFwiLFxuICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBwaXBlbGluZSBidWlsZHMgZm9yIHRoaXMgYXBwXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlzVmFsaWQ6ICgpID0+ICFpc0plbmtpbnNCdWlsZCgpLFxuICAgICAgICBocmVmOiBidWlsZHNMaW5rLFxuICAgICAgICBsYWJlbDogXCJCdWlsZHNcIixcbiAgICAgICAgY2xhc3M6IFwiZmEgZmEtYmFyc1wiLFxuICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBidWlsZHMgZm9yIHRoaXMgYXBwXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlzVmFsaWQ6ICgpID0+IGlzSmVua2luc0J1aWxkKCksXG4gICAgICAgIGlkOiBcImJ1aWxkc1wiLFxuICAgICAgICBocmVmOiBqZW5raW5zQnVpbGRMaW5rLFxuICAgICAgICBsYWJlbDogXCJCdWlsZHNcIixcbiAgICAgICAgY2xhc3M6IFwiZmEgZmEtYmFyc1wiLFxuICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBKZW5raW5zIGJ1aWxkcyBmb3IgdGhpcyBhcHBcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaXNWYWxpZDogKCkgPT4gaXNKZW5raW5zQnVpbGQoKSxcbiAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJwcm9qZWN0c1wiLCBwcm9qZWN0TmFtZSwgXCJqZW5raW5zSm9iXCIsIGplbmtpbnNKb2JJZCwgXCJtZXRyaWNzXCIpLFxuICAgICAgICBsYWJlbDogXCJNZXRyaWNzXCIsXG4gICAgICAgIGNsYXNzOiBcImZhIGZhLWJhci1jaGFydFwiLFxuICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBtZXRyaWNzIGZvciB0aGlzIHByb2plY3RcIlxuICAgICAgfSxcbi8qXG4gICAgICB7XG4gICAgICAgIGhyZWY6IFVybEhlbHBlcnMuam9pbihcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiwgcHJvamVjdE5hbWUsIFwidG9vbHNcIiksXG4gICAgICAgIGxhYmVsOiBcIlRvb2xzXCIsXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIHRvb2xzIGZvciB0aGlzIHByb2plY3RcIlxuICAgICAgfSxcbiovXG4gICAgICB7XG4gICAgICAgIGhyZWY6IFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiwgcHJvamVjdE5hbWUsIFwiYnVpbGRDb25maWdFZGl0XCIpLFxuICAgICAgICBsYWJlbDogXCJTZXR0aW5nc1wiLFxuICAgICAgICBjbGFzczogXCJmYSBmYS1jb2dcIixcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgYXBwIGNvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgaXNBY3RpdmU6IChzdWJUYWIsIHBhdGgpID0+IHtcbiAgICAgICAgICBpZiAoXy5lbmRzV2l0aChwYXRoLCAnL2J1aWxkQ29uZmlnRWRpdCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKF8uZW5kc1dpdGgocGF0aCwgJy9mb3JnZS9zZWNyZXRzJykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoXy5lbmRzV2l0aChwYXRoLCAnL2ZvcmdlL2NvbW1hbmQvZGV2b3BzLWVkaXQnKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIF07XG5cbiAgICB2YXIgY29udGV4dCA9IHtcbiAgICAgIHdvcmtzcGFjZU5hbWU6IHdvcmtzcGFjZU5hbWUsXG4gICAgICBwcm9qZWN0TmFtZTogcHJvamVjdE5hbWUsXG4gICAgICBwcm9qZWN0TGluazogcHJvamVjdExpbmssXG4gICAgICBqZW5raW5zSm9iSWQ6IGplbmtpbnNKb2JJZCxcbiAgICAgICRzY29wZTogJHNjb3BlXG4gICAgfTtcbiAgICBhbmd1bGFyLmZvckVhY2goY3VzdG9tUHJvamVjdFN1YlRhYkZhY3RvcmllcywgKGZuKSA9PiB7XG4gICAgICBpZiAoYW5ndWxhci5pc0Z1bmN0aW9uKGZuKSkge1xuICAgICAgICB2YXIgc3VidGFiID0gZm4oY29udGV4dCk7XG4gICAgICAgIGlmIChzdWJ0YWIpIHtcbiAgICAgICAgICBpZiAoYW5ndWxhci5pc0FycmF5KHN1YnRhYikpIHtcbiAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChzdWJ0YWIsICh0KSA9PiB7XG4gICAgICAgICAgICAgIGFuc3dlci5wdXNoKHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFuc3dlci5wdXNoKHN1YnRhYik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYWN0aXZhdGVDdXJyZW50KGFuc3dlcik7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJvamVjdFNldHRpbmdzU3ViTmF2QmFycyhwcm9qZWN0TmFtZSwgamVua2luc0pvYklkID0gbnVsbCkge1xuICAgIGlmICghcHJvamVjdE5hbWUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgdmFyIHdvcmtzcGFjZU5hbWUgPSBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XG4gICAgdmFyIHByb2plY3RMaW5rID0gVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJwcm9qZWN0c1wiLCBwcm9qZWN0TmFtZSk7XG4gICAgaWYgKCFqZW5raW5zSm9iSWQpIHtcbiAgICAgIGplbmtpbnNKb2JJZCA9IHByb2plY3ROYW1lO1xuICAgIH1cbiAgICB2YXIgYW5zd2VyID0gW1xuICAgICAge1xuICAgICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIHByb2plY3ROYW1lLCBcImJ1aWxkQ29uZmlnRWRpdFwiKSxcbiAgICAgICAgbGFiZWw6IFwiQ29yZVwiLFxuICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBjb3JlIGJ1aWxkIGNvbmZpZ3VyYXRpb25cIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaHJlZjogcHJvamVjdFNlY3JldHNMaW5rKHdvcmtzcGFjZU5hbWUsIHByb2plY3ROYW1lKSxcbiAgICAgICAgbGFiZWw6IFwiU2VjcmV0c1wiLFxuICAgICAgICB0aXRsZTogXCJWaWV3IG9yIGNoYW5nZSB0aGUgc2VjcmV0cyB1c2VkIHRvIGVkaXQgc291cmNlIGNvZGUgaW4gdGhlIHNvdXJjZSBjb250cm9sIHN5c3RlbVwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBocmVmOiBlZGl0UGlwZWxpbmVMaW5rKHdvcmtzcGFjZU5hbWUsIHByb2plY3ROYW1lKSxcbiAgICAgICAgbGFiZWw6IFwiUGlwZWxpbmVcIixcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgRGV2T3BzIGFuZCBwaXBlbGluZSBjb25maWd1cmF0aW9uXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlzVmFsaWQ6ICgpID0+IGZvcmdlUHJvamVjdEhhc0J1aWxkZXIoXCJtYXZlblwiKSxcbiAgICAgICAgaHJlZjogZWRpdE1hdmVuQnVpbGRMaW5rKHdvcmtzcGFjZU5hbWUsIHByb2plY3ROYW1lKSxcbiAgICAgICAgbGFiZWw6IFwiTWF2ZW5cIixcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgTWF2ZW4gYnVpbGQgY29uZmlndXJhdGlvblwiXG4gICAgICB9XG4gICAgXTtcbiAgICByZXR1cm4gYWN0aXZhdGVDdXJyZW50KGFuc3dlcik7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZm9yZ2VQcm9qZWN0SGFzQnVpbGRlcihuYW1lKSB7XG4gICAgdmFyIGZvcmdlUHJvamVjdCA9IEt1YmVybmV0ZXMuaW5qZWN0PGFueT4oXCJGb3JnZVByb2plY3RcIik7XG4gICAgaWYgKGZvcmdlUHJvamVjdCkge1xuICAgICAgcmV0dXJuIGZvcmdlUHJvamVjdC5oYXNCdWlsZGVyKG5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZm9yZ2VQcm9qZWN0SGFzUGVyc3BlY3RpdmUobmFtZSkge1xuICAgIHZhciBmb3JnZVByb2plY3QgPSBLdWJlcm5ldGVzLmluamVjdDxhbnk+KFwiRm9yZ2VQcm9qZWN0XCIpO1xuICAgIGlmIChmb3JnZVByb2plY3QpIHtcbiAgICAgIHJldHVybiBmb3JnZVByb2plY3QuaGFzUGVyc3BlY3RpdmUobmFtZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBlZGl0UGlwZWxpbmVMaW5rU2NvcGUoJHNjb3BlKSB7XG4gICAgcmV0dXJuIGVkaXRQaXBlbGluZUxpbmsoJHNjb3BlLm5hbWVzcGFjZSwgJHNjb3BlLnByb2plY3RJZCB8fCAkc2NvcGUucHJvamVjdE5hbWUgfHwgJHNjb3BlLnByb2plY3QpO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByb2plY3RMaW5rKHdvcmtzcGFjZU5hbWUgPSBudWxsKSB7XG4gICAgaWYgKCF3b3Jrc3BhY2VOYW1lKSB7XG4gICAgICB3b3Jrc3BhY2VOYW1lID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xuICAgIH1cbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCIvZm9yZ2UvY3JlYXRlUHJvamVjdFwiKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBlZGl0UGlwZWxpbmVMaW5rKHdvcmtzcGFjZU5hbWUsIHByb2plY3ROYW1lKSB7XG4gICAgcmV0dXJuIHByb2plY3RXb3Jrc3BhY2VMaW5rKHdvcmtzcGFjZU5hbWUsIHByb2plY3ROYW1lLCBcImZvcmdlL2NvbW1hbmQvZGV2b3BzLWVkaXRcIik7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZWRpdE1hdmVuQnVpbGRMaW5rKHdvcmtzcGFjZU5hbWUsIHByb2plY3ROYW1lKSB7XG4gICAgcmV0dXJuIHByb2plY3RXb3Jrc3BhY2VMaW5rKHdvcmtzcGFjZU5hbWUsIHByb2plY3ROYW1lLCBcImZvcmdlL2NvbW1hbmQvZmFicmljOC1zZXR1cFwiKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBwcm9qZWN0U2VjcmV0c0xpbmsod29ya3NwYWNlTmFtZSwgcHJvamVjdE5hbWUpIHtcbiAgICByZXR1cm4gcHJvamVjdFdvcmtzcGFjZUxpbmsod29ya3NwYWNlTmFtZSwgcHJvamVjdE5hbWUsIFwiZm9yZ2Uvc2VjcmV0c1wiLCBmYWxzZSk7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gc2VjcmV0c05hbWVzcGFjZUxpbmsod29ya3NwYWNlTmFtZSwgcHJvamVjdE5hbWUsIHNlY3JldHNOYW1lc3BhY2UpIHtcbiAgICB2YXIgcHJlZml4ID0gcHJvamVjdFdvcmtzcGFjZUxpbmsod29ya3NwYWNlTmFtZSwgcHJvamVjdE5hbWUsIFwiXCIpIHx8IFwia3ViZXJuZXRlc1wiO1xuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4ocHJlZml4LCBcIm5hbWVzcGFjZVwiLCBzZWNyZXRzTmFtZXNwYWNlLCBcInNlY3JldHNcIik7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gcHJvamVjdFdvcmtzcGFjZUxpbmsod29ya3NwYWNlTmFtZSwgcHJvamVjdE5hbWUsIHBhdGgsIGlnbm9yZUJsYW5rUHJvamVjdCA9IHRydWUpIHtcbiAgICBpZiAoaWdub3JlQmxhbmtQcm9qZWN0ICYmICFwcm9qZWN0TmFtZSkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIGlmICghd29ya3NwYWNlTmFtZSkge1xuICAgICAgd29ya3NwYWNlTmFtZSA9IEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiwgcHJvamVjdE5hbWUsIHBhdGgpO1xuICB9XG5cbiAgZXhwb3J0IHZhciBjdXN0b21Qcm9qZWN0U3ViVGFiRmFjdG9yaWVzID0gW107XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUplbmtpbnNCcmVhZGNydW1icyhwcm9qZWN0TmFtZSwgam9iSWQsIGJ1aWxkSWQpIHtcbiAgICB2YXIgd29ya3NwYWNlTmFtZSA9IEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcbiAgICB2YXIgY2hpbGRyZW4gPSBbXG4gICAgICB7XG4gICAgICAgIGlkOiBcImJ1aWxkc1wiLFxuICAgICAgICBocmVmOiBjcmVhdGVCdWlsZHNMaW5rKHdvcmtzcGFjZU5hbWUsIHByb2plY3ROYW1lLCBqb2JJZCksXG4gICAgICAgIGxhYmVsOiBcIkJ1aWxkc1wiLFxuICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBidWlsZHMgZm9yIHRoaXMgYXBwXCJcbiAgICAgIH1cbiAgICBdO1xuICAgIGlmIChidWlsZElkKSB7XG4gICAgICBjaGlsZHJlbi5wdXNoKHtcbiAgICAgICAgaWQ6IFwiXCIsXG4gICAgICAgIGhyZWY6IFwiXCIsXG4gICAgICAgIGxhYmVsOiBcIiNcIiArIGJ1aWxkSWQsXG4gICAgICAgIHRpdGxlOiBcIkJ1aWxkICNcIiArIGJ1aWxkSWRcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlUHJvamVjdEJyZWFkY3J1bWJzKHByb2plY3ROYW1lLCBjaGlsZHJlbik7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlSmVua2luc1N1Yk5hdkJhcnMocHJvamVjdE5hbWUsIGplbmtpbnNKb2JJZCwgYnVpbGRJZCwgZXh0cmFPcHRpb246IGFueSA9IG51bGwpIHtcbiAgICB2YXIgYW5zd2VyID0gY3JlYXRlUHJvamVjdFN1Yk5hdkJhcnMocHJvamVjdE5hbWUsIGplbmtpbnNKb2JJZCk7XG4gICAgaWYgKGV4dHJhT3B0aW9uKSB7XG4gICAgICBleHRyYU9wdGlvbi5hY3RpdmUgPSB0cnVlO1xuICAgICAgYW5zd2VyLnB1c2goZXh0cmFPcHRpb24pO1xuICAgIH1cbiAgICByZXR1cm4gYW5zd2VyO1xuICB9XG5cblxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlRW52aXJvbm1lbnRTdWJOYXZCYXJzKCRzY29wZSwgJGxvY2F0aW9uLCAkcm91dGVQYXJhbXMpIHtcbiAgICB2YXIgbnMgPSBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XG4gICAgdmFyIHdvcmtzcGFjZU5hbWUgPSAkcm91dGVQYXJhbXMud29ya3NwYWNlO1xuICAgIHZhciBwcm9qZWN0ID0gJHJvdXRlUGFyYW1zLnByb2plY3Q7XG4gICAgdmFyIHByb2plY3RMaW5rID0gVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL2t1YmVybmV0ZXNcIik7XG4gICAgaWYgKHdvcmtzcGFjZU5hbWUgJiYgcHJvamVjdCkge1xuICAgICAgcHJvamVjdExpbmsgPSBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIHByb2plY3QpO1xuICAgIH1cbiAgICB2YXIgbmFtZXNwYWNlc0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4ocHJvamVjdExpbmssIFwibmFtZXNwYWNlXCIpO1xuICAgIHJldHVybiBhY3RpdmF0ZUN1cnJlbnQoW1xuICAgICAge1xuICAgICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4ocHJvamVjdExpbmssIFwiZW52aXJvbm1lbnRzXCIpLFxuICAgICAgICBsYWJlbDogXCI8PCBCYWNrIFRvIEFwcFwiLFxuICAgICAgICB0aXRsZTogXCJHbyBiYWNrIHRvIHRoZSBEYXNoYm9hcmQgZm9yIHRoaXMgQXBwXCIsXG4gICAgICAgIGlzVmFsaWQ6ICgpID0+IHByb2plY3RcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGhyZWY6IFVybEhlbHBlcnMuam9pbihuYW1lc3BhY2VzTGluaywgbnMsIFwiYXBwc1wiKSxcbiAgICAgICAgbGFiZWw6IFwiT3ZlcnZpZXdcIixcbiAgICAgICAgY2xhc3M6IFwiZmEgZmEtbGlzdFwiLFxuICAgICAgICB0aXRsZTogXCJPdmVydmlldyBvZiBhbGwgdGhlIGFwcHMgZm9yIHRoaXMgcHJvamVjdFwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4obmFtZXNwYWNlc0xpbmssIG5zLCBcInNlcnZpY2VzXCIpLFxuICAgICAgICBsYWJlbDogXCJTZXJ2aWNlc1wiLFxuICAgICAgICBjbGFzczogXCJmYSBmYS1wbHVnXCIsXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIGFwcHMgZm9yIHRoaXMgcHJvamVjdFwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4obmFtZXNwYWNlc0xpbmssIG5zLCBcInJlcGxpY2F0aW9uQ29udHJvbGxlcnNcIiksXG4gICAgICAgIGxhYmVsOiBcIkNvbnRyb2xsZXJzXCIsXG4gICAgICAgIGNsYXNzOiBcImZhIGZhLWNsb25lXCIsXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIFJlcGxpY2F0aW9uIENvbnRyb2xsZXJzIGZvciB0aGlzIHByb2plY3RcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKG5hbWVzcGFjZXNMaW5rLCBucywgXCJwb2RzXCIpLFxuICAgICAgICBsYWJlbDogXCJQb2RzXCIsXG4gICAgICAgIGNsYXNzOiBcImZhIGZhLXB1enpsZS1waWVjZVwiLFxuICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBwb2RzIGZvciB0aGlzIHByb2plY3RcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKG5hbWVzcGFjZXNMaW5rLCBucywgXCJldmVudHNcIiksXG4gICAgICAgIGxhYmVsOiBcIkV2ZW50c1wiLFxuICAgICAgICBjbGFzczogXCJmYSBmYS1uZXdzcGFwZXItb1wiLFxuICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBldmVudHMgZm9yIHRoaXMgcHJvamVjdFwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4obmFtZXNwYWNlc0xpbmssIG5zLCBcInNlY3JldHNcIiksXG4gICAgICAgIGxhYmVsOiBcIlNlY3JldHNcIixcbiAgICAgICAgY2xhc3M6IFwiZmEgZmEta2V5XCIsXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIHNlY3JldHMgZm9yIHRoaXMgcHJvamVjdFwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIva3ViZXJuZXRlcy9ob3N0c1wiKSxcbiAgICAgICAgbGFiZWw6IFwiTm9kZXNcIixcbiAgICAgICAgY2xhc3M6IFwiZmEgZmEtc2VydmVyXCIsXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIG5vZGVzIGZvciB0aGlzIHByb2plY3RcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKG5hbWVzcGFjZXNMaW5rLCBucywgXCJvdmVydmlld1wiKSxcbiAgICAgICAgbGFiZWw6IFwiRGlhZ3JhbVwiLFxuICAgICAgICBjbGFzczogXCJmYSBmYS1zaXRlbWFwXCIsXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgYWxsIHRoZSBvYmplY3RzIGluIHRoaXMgcHJvamVjdCBhbmQgdGhlaXIgcmVsYXRpb25zaGlwXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGhyZWY6IFVybEhlbHBlcnMuam9pbihuYW1lc3BhY2VzTGluaywgbnMsIFwiYW5ncnlQb2RzXCIpLFxuICAgICAgICBsYWJlbDogXCJBbmdyeSBQb2RzXCIsXG4gICAgICAgIGNsYXNzOiBcImZhIGZhLWdhbWVwYWRcIixcbiAgICAgICAgdGl0bGU6IFwiVHJ5IHRoZSBBbmdyeSBQb2RzIGdhbWUhXCJcbiAgICAgIH0sXG4gICAgXSk7XG4gIH1cblxuXG4gIGV4cG9ydCBmdW5jdGlvbiBuYW1lc3BhY2VMaW5rKCRzY29wZSwgJHJvdXRlUGFyYW1zLCBwYXRoID0gbnVsbCkge1xuICAgIHZhciBucyA9IEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcbiAgICB2YXIgd29ya3NwYWNlTmFtZSA9ICRyb3V0ZVBhcmFtcy53b3Jrc3BhY2U7XG4gICAgdmFyIHByb2plY3QgPSAkcm91dGVQYXJhbXMucHJvamVjdDtcbiAgICB2YXIgcHJvamVjdExpbmsgPSBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIva3ViZXJuZXRlc1wiKTtcbiAgICBpZiAod29ya3NwYWNlTmFtZSAmJiBwcm9qZWN0KSB7XG4gICAgICBwcm9qZWN0TGluayA9IFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiwgcHJvamVjdCk7XG4gICAgfVxuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4ocHJvamVjdExpbmssIFwibmFtZXNwYWNlXCIsIG5zLCBwYXRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBVUkwgcXVlcnkgc3RyaW5nIGlmIGl0cyBpbnNpZGUgdGhlIGdpdmVuIHRleHRcbiAgICovXG4gIGZ1bmN0aW9uIHRyaW1RdWVyeSh0ZXh0KSB7XG4gICAgaWYgKHRleHQpIHtcbiAgICAgIHZhciBpZHggPSB0ZXh0LmluZGV4T2YoXCI/XCIpO1xuICAgICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgIHJldHVybiB0ZXh0LnN1YnN0cmluZygwLCBpZHgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFjdGl2YXRlQ3VycmVudChuYXZCYXJJdGVtcykge1xuICAgIG5hdkJhckl0ZW1zID0gXy5jb21wYWN0KG5hdkJhckl0ZW1zKTtcbiAgICB2YXIgaW5qZWN0b3IgPSBIYXd0aW9Db3JlLmluamVjdG9yO1xuICAgIHZhciAkbG9jYXRpb24gPSBpbmplY3RvciA/IGluamVjdG9yLmdldDxuZy5JTG9jYXRpb25TZXJ2aWNlPihcIiRsb2NhdGlvblwiKSA6IG51bGw7XG4gICAgaWYgKCRsb2NhdGlvbikge1xuICAgICAgdmFyIHBhdGggPSB0cmltUXVlcnkoJGxvY2F0aW9uLnBhdGgoKSk7XG4gICAgICB2YXIgZm91bmQgPSBmYWxzZTtcbiAgICAgIGZ1bmN0aW9uIG1ha2VBY3RpdmUoaXRlbSkge1xuICAgICAgICBpdGVtLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGFuZ3VsYXIuZm9yRWFjaChuYXZCYXJJdGVtcywgKGl0ZW0pID0+IHtcbiAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICBpZiAoYW5ndWxhci5pc0Z1bmN0aW9uKGl0ZW0uaXNBY3RpdmUpKSB7XG4gICAgICAgICAgICBpZiAoIWZvdW5kICYmIGl0ZW0uaXNBY3RpdmUoaXRlbSwgcGF0aCkpIHtcbiAgICAgICAgICAgICAgbWFrZUFjdGl2ZShpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGhyZWYgPSBpdGVtLmhyZWY7XG4gICAgICAgICAgICB2YXIgdHJpbUhyZWYgPSB0cmltUXVlcnkoaHJlZik7XG4gICAgICAgICAgICBpZiAoIWZvdW5kICYmIHRyaW1IcmVmICYmIHRyaW1IcmVmID09PSBwYXRoKSB7XG4gICAgICAgICAgICAgIG1ha2VBY3RpdmUoaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG5hdkJhckl0ZW1zO1xuICB9XG5cbiAgZnVuY3Rpb24gcHJvY2Vzc0NoaWxkcmVuKGFuc3dlciwgY2hpbGRyZW4pIHtcbiAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgIGlmIChhbmd1bGFyLmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgICAgIGFuc3dlciA9IGFuc3dlci5jb25jYXQoY2hpbGRyZW4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYW5zd2VyLnB1c2goY2hpbGRyZW4pO1xuICAgICAgfVxuICAgIH1cbiAgICBhY3RpdmF0ZUN1cnJlbnQoYW5zd2VyKTtcbiAgICByZXR1cm4gYW5zd2VyO1xuICB9XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9rdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyRW5yaWNoZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVySGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3Blck5hdmlnYXRpb24udHNcIi8+XHJcblxyXG5tb2R1bGUgRGV2ZWxvcGVyIHtcclxuICAgLyogZXhwb3J0IHZhciBEYXRhT3ZlclZpZXcgPSBjb250cm9sbGVyKFwiRGF0YU92ZXJWaWV3XCIsXHJcbiAgICAgICAgW1wiJHNjb3BlXCIsICBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgKCRzY29wZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0KSA9PiB7XHJcbiAgICAgICAgICAgICRzY29wZS50cmVlT3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIG5vZGVDaGlsZHJlbjogXCJjaGlsZHJlblwiLFxyXG4gICAgICAgICAgICAgICAgZGlyU2VsZWN0YWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGluamVjdENsYXNzZXM6IHtcclxuICAgICAgICAgICAgICAgICAgICB1bDogXCJhMVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGxpOiBcImEyXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbGlTZWxlY3RlZDogXCJhN1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIGlFeHBhbmRlZDogXCJhM1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIGlDb2xsYXBzZWQ6IFwiYTRcIixcclxuICAgICAgICAgICAgICAgICAgICBpTGVhZjogXCJhNVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBcImE2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWxTZWxlY3RlZDogXCJhOFwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICRzY29wZS5kYXRhRm9yVGhlVHJlZSA9XHJcbiAgICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICAgICAgeyBcIm5hbWVcIiA6IFwiSm9lXCIsIFwiYWdlXCIgOiBcIjIxXCIsIFwiY2hpbGRyZW5cIiA6IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyBcIm5hbWVcIiA6IFwiU21pdGhcIiwgXCJhZ2VcIiA6IFwiNDJcIiwgXCJjaGlsZHJlblwiIDogW10gfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyBcIm5hbWVcIiA6IFwiR2FyeVwiLCBcImFnZVwiIDogXCIyMVwiLCBcImNoaWxkcmVuXCIgOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFwibmFtZVwiIDogXCJKZW5pZmVyXCIsIFwiYWdlXCIgOiBcIjIzXCIsIFwiY2hpbGRyZW5cIiA6IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFwibmFtZVwiIDogXCJEYW5pXCIsIFwiYWdlXCIgOiBcIjMyXCIsIFwiY2hpbGRyZW5cIiA6IFtdIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBcIm5hbWVcIiA6IFwiTWF4XCIsIFwiYWdlXCIgOiBcIjM0XCIsIFwiY2hpbGRyZW5cIiA6IFtdIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF19XHJcbiAgICAgICAgICAgICAgICAgICAgXX0sXHJcbiAgICAgICAgICAgICAgICAgICAgeyBcIm5hbWVcIiA6IFwiQWxiZXJ0XCIsIFwiYWdlXCIgOiBcIjMzXCIsIFwiY2hpbGRyZW5cIiA6IFtdIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgeyBcIm5hbWVcIiA6IFwiUm9uXCIsIFwiYWdlXCIgOiBcIjI5XCIsIFwiY2hpbGRyZW5cIiA6IFtdIH1cclxuICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgfV0pOyovXHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckhlbHBlcnMudHNcIi8+XG5cbm1vZHVsZSBEZXZlbG9wZXIge1xuXG4gIGV4cG9ydCB2YXIgX21vZHVsZSA9IGFuZ3VsYXIubW9kdWxlKHBsdWdpbk5hbWUsIFsnaGF3dGlvLWNvcmUnLCAnaGF3dGlvLXVpJywgJ3VpLmNvZGVtaXJyb3InLCAnbnZkMycsICd0cmVlQ29udHJvbCddKTtcbiAgZXhwb3J0IHZhciBjb250cm9sbGVyID0gUGx1Z2luSGVscGVycy5jcmVhdGVDb250cm9sbGVyRnVuY3Rpb24oX21vZHVsZSwgcGx1Z2luTmFtZSk7XG4gIGV4cG9ydCB2YXIgcm91dGUgPSBQbHVnaW5IZWxwZXJzLmNyZWF0ZVJvdXRpbmdGdW5jdGlvbih0ZW1wbGF0ZVBhdGgpO1xuXG4gIF9tb2R1bGUuY29uZmlnKFsnJHJvdXRlUHJvdmlkZXInLCAoJHJvdXRlUHJvdmlkZXI6bmcucm91dGUuSVJvdXRlUHJvdmlkZXIpID0+IHtcbiAgICAkcm91dGVQcm92aWRlci53aGVuKGNvbnRleHQsIHJvdXRlKCd3b3Jrc3BhY2VzLmh0bWwnLCBmYWxzZSkpXG4gICAgICAgICAgICAgICAgICAud2hlbihcIi9uYW1lc3BhY2VzXCIsIHJvdXRlKCd3b3Jrc3BhY2VzLmh0bWwnLCBmYWxzZSkpXG4gICAgICAgICAgICAgICAgICAvLy53aGVuKFwiL2hvbWVcIiwgcm91dGUoJ2hvbWUuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgICAgICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnLzpuYW1lc3BhY2UnKSwgcm91dGUoJ3Byb2plY3RzLmh0bWwnLCBmYWxzZSkpXG4gICAgICAgICAgICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy86bmFtZXNwYWNlL2RldGFpbCcpLCByb3V0ZSgnd29ya3NwYWNlLmh0bWwnLCBmYWxzZSkpXG4gICAgICAgICAgICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy86bmFtZXNwYWNlL2plbmtpbnNKb2InKSwgcm91dGUoJ2plbmtpbnNKb2JzLmh0bWwnLCBmYWxzZSkpXG4gICAgICAgICAgICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy86bmFtZXNwYWNlL3Byb2plY3RzJyksIHJvdXRlKCdwcm9qZWN0cy5odG1sJywgZmFsc2UpKVxuICAgICAgICAgICAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvOm5hbWVzcGFjZS9wcm9qZWN0cy86aWQnKSwgcm91dGUoJ2Vudmlyb25tZW50cy5odG1sJywgZmFsc2UpKVxuICAgICAgICAgICAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvOm5hbWVzcGFjZS9wcm9qZWN0cy86aWQvZGV0YWlsJyksIEt1YmVybmV0ZXMucm91dGUoJ2J1aWxkQ29uZmlnLmh0bWwnLCBmYWxzZSkpXG4gICAgICAgICAgICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy86bmFtZXNwYWNlL3Byb2plY3RzLzppZC9idWlsZHMnKSwgS3ViZXJuZXRlcy5yb3V0ZSgnYnVpbGRzLmh0bWwnLCBmYWxzZSkpXG4gICAgICAgICAgICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy86bmFtZXNwYWNlL3Byb2plY3RzLzppZC9lbnZpcm9ubWVudHMnKSwgcm91dGUoJ2Vudmlyb25tZW50cy5odG1sJywgZmFsc2UpKVxuICAgICAgICAgICAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvOm5hbWVzcGFjZS9wcm9qZWN0cy86aWQvamVua2luc0pvYi86am9iJyksIHJvdXRlKCdqZW5raW5zSm9iLmh0bWwnLCBmYWxzZSkpXG4gICAgICAgICAgICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy86bmFtZXNwYWNlL3Byb2plY3RzLzppZC9qZW5raW5zSm9iLzpqb2IvbG9nLzpidWlsZCcpLCByb3V0ZSgnamVua2luc0xvZy5odG1sJywgZmFsc2UpKVxuICAgICAgICAgICAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvOm5hbWVzcGFjZS9wcm9qZWN0cy86aWQvamVua2luc0pvYi86am9iL3BpcGVsaW5lcycpLCByb3V0ZSgncGlwZWxpbmVzLmh0bWwnLCBmYWxzZSkpXG4gICAgICAgICAgICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy86bmFtZXNwYWNlL3Byb2plY3RzLzppZC9qZW5raW5zSm9iLzpqb2IvcGlwZWxpbmUvOmJ1aWxkJyksIHJvdXRlKCdwaXBlbGluZS5odG1sJywgZmFsc2UpKVxuICAgICAgICAgICAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvOm5hbWVzcGFjZS9wcm9qZWN0cy86aWQvamVua2luc0pvYi86am9iL21ldHJpY3MnKSwgcm91dGUoJ2plbmtpbnNNZXRyaWNzLmh0bWwnLCBmYWxzZSkpXG4gICAgICAgICAgICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy86bmFtZXNwYWNlL3Byb2plY3RzLzppZC9qZW5raW5zTWV0cmljcycpLCByb3V0ZSgnamVua2luc01ldHJpY3MuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgICAgICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnLzpuYW1lc3BhY2UvcHJvamVjdHMvOmlkL3Rvb2xzJyksIHJvdXRlKCd0b29scy5odG1sJywgZmFsc2UpKVxuICAgICAgICAgICAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvOndvcmtzcGFjZS9wcm9qZWN0cy86cHJvamVjdC9lbnZpcm9ubWVudHMvOm5hbWVzcGFjZScpLCByb3V0ZSgnZW52aXJvbm1lbnQuaHRtbCcsIGZhbHNlKSlcbiAgICAgICAgICAgICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnLzp3b3Jrc3BhY2UvcHJvamVjdHMvOnByb2plY3QvZW52aXJvbm1lbnRzLzpuYW1lc3BhY2UnKSwgcm91dGUoJ2Vudmlyb25tZW50Lmh0bWwnLCBmYWxzZSkpXG4gICAgICAgICAgICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9BZ2dyZWdhdGUvb3ZlcnZpZXcnKSwgcm91dGUoJ2FkZERhdGFGaWxlLmh0bWwnLCBmYWxzZSkpXG4gICAgICAgICAgICAgICAgICAub3RoZXJ3aXNlKFwiL3dvcmtzcGFjZXNcIik7XG4gIH1dKTtcbiAgXG5cbiAgX21vZHVsZS5ydW4oWyd2aWV3UmVnaXN0cnknLCAnU2VydmljZVJlZ2lzdHJ5JywgJ0hhd3Rpb05hdicsICdLdWJlcm5ldGVzTW9kZWwnLCAnJHRlbXBsYXRlQ2FjaGUnLCAnRGF0YUluZm9Nb2RlbCcsKHZpZXdSZWdpc3RyeSwgU2VydmljZVJlZ2lzdHJ5LCBIYXd0aW9OYXYsIEt1YmVybmV0ZXNNb2RlbCwgJHRlbXBsYXRlQ2FjaGUsIERhdGFJbmZvTW9kZWwpID0+IHtcbiAgICBsb2cuZGVidWcoXCJSdW5uaW5nXCIpO1xuICAgIHZpZXdSZWdpc3RyeVsnd29ya3NwYWNlcyddID0gS3ViZXJuZXRlcy50ZW1wbGF0ZVBhdGggKyAnbGF5b3V0S3ViZXJuZXRlcy5odG1sJztcbiAgICB2aWV3UmVnaXN0cnlbJ25hbWVzcGFjZXMnXSA9IEt1YmVybmV0ZXMudGVtcGxhdGVQYXRoICsgJ2xheW91dEt1YmVybmV0ZXMuaHRtbCc7XG5cbiAgICB2YXIgYnVpbGRlciA9IEhhd3Rpb05hdi5idWlsZGVyKCk7XG4gICAgdmFyIHdvcmtzcGFjZXMgPSBidWlsZGVyLmlkKCd3b3Jrc3BhY2VzJylcbiAgICAgICAgICAgICAgICAgICAgICAuaHJlZigoKSA9PiBjb250ZXh0KVxuICAgICAgICAgICAgICAgICAgICAgIC50aXRsZSgoKSA9PiAn5p+l55yLJylcbiAgICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKTtcbi8qXG4gICAgdmFyIHdvcmtzcGFjZU92ZXJ2aWV3ID0gYnVpbGRlci5pZCgnd29ya3NwYWNlcycpXG4gICAgICAgICAgICAgICAgICAgICAgLmhyZWYoKCkgPT4gVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdvdmVydmlldycpKVxuICAgICAgICAgICAgICAgICAgICAgIC50aXRsZSgoKSA9PiAnV29ya3NwYWNlJylcbiAgICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKTtcbiovXG4vKiAgICB2YXIgZGF0YWFkZCA9IGJ1aWxkZXIuaWQoJ2RhdGFhZGQnKVxuICAgICAgICAgICAgICAgICAgICAgIC5ocmVmKCgpID0+IGNvbnRleHQpXG4gICAgICAgICAgICAgICAgICAgICAgLnRpdGxlKCgpID0+ICfmsYfmgLsnKVxuICAgICAgICAgICAgICAgICAgICAgIC5idWlsZCgpO1xuKi9cbiAgICB2YXIgQWdncmVnYXRlID0gYnVpbGRlci5pZCgnQWdncmVnYXRlOycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgLnJhbmsoMjAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgIC5ocmVmKCgpID0+IGNvbnRleHQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgLnRpdGxlKCgpID0+ICfmlbDmja7msYfmgLsnKVxuICAgICAgICAgICAgICAgICAgICAgICAgIC8vLmlzVmFsaWQoKCkgPT4gIUNvcmUuaXNSZW1vdGVDb25uZWN0aW9uKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgLnRhYnMod29ya3NwYWNlcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKTtcblxuICAgIEhhd3Rpb05hdi5hZGQoQWdncmVnYXRlKTtcbiAgfV0pO1xuXG4gIF9tb2R1bGUuZmlsdGVyKCdhc1RydXN0ZWRIdG1sJywgWyckc2NlJywgZnVuY3Rpb24gKCRzY2UpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRleHQpIHtcbiAgICAgIHJldHVybiAkc2NlLnRydXN0QXNIdG1sKHRleHQpO1xuICAgIH07XG4gIH1dKTtcblxuICBoYXd0aW9QbHVnaW5Mb2FkZXIuYWRkTW9kdWxlKHBsdWdpbk5hbWUpO1xuXG4gIC8vIGZvciBzY3JvbGwtZ2x1ZSBkaXJlY3RpdmVcbiAgaGF3dGlvUGx1Z2luTG9hZGVyLmFkZE1vZHVsZSgnbHVlZ2cuZGlyZWN0aXZlcycpO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlclBsdWdpbi50c1wiLz5cblxubW9kdWxlIERldmVsb3BlciB7XG4gIF9tb2R1bGUuY29udHJvbGxlcignRGV2ZWxvcGVyLkVudmlyb25tZW50UGFuZWxDb250cm9sbGVyJywgKCRzY29wZSwgJGVsZW1lbnQsICRsb2NhdGlvbiwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xuXG4gICAgJHNjb3BlLmVudlZlcnNpb25zID0ge307XG4gICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xuICAgICRzY29wZS5lbnYgPSAkc2NvcGUuJGV2YWwoJ2VudicpO1xuICAgICRzY29wZS5idWlsZENvbmZpZyA9ICRzY29wZS4kZXZhbCgnZW50aXR5Jyk7XG5cbiAgICAkc2NvcGUub3BlbiA9IHRydWU7XG5cbiAgICAkc2NvcGUudG9nZ2xlID0gKCkgPT4gJHNjb3BlLm9wZW4gPSAhJHNjb3BlLm9wZW47XG5cbiAgICB2YXIgY2FjaGVzID0ge307XG5cbiAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XG5cbiAgICBsb2FkUHJvamVjdFZlcnNpb25zKCRzY29wZSwgJGVsZW1lbnQsICRzY29wZS5idWlsZENvbmZpZywgJHNjb3BlLmVudiwgJHNjb3BlLmVudi5uYW1lc3BhY2UsICRzY29wZS5lbnZWZXJzaW9ucywgY2FjaGVzKTtcblxuICB9KTtcbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9rdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckVucmljaGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3Blck5hdmlnYXRpb24udHNcIi8+XG5cbm1vZHVsZSBEZXZlbG9wZXIge1xuXG4gIGV4cG9ydCB2YXIgSG9tZUNvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiSG9tZUNvbnRyb2xsZXJcIixcbiAgICBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCJLdWJlcm5ldGVzU2NoZW1hXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLFxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLFxuICAgICAgICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XG5cbiAgICAgICAgJHNjb3BlLm5hbWVzcGFjZSA9IEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcblxuICAgICAgfV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyRW5yaWNoZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckhlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyTmF2aWdhdGlvbi50c1wiLz5cblxubW9kdWxlIERldmVsb3BlciB7XG5cbiAgZXhwb3J0IHZhciBKZW5raW5zSm9iQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJKZW5raW5zSm9iQ29udHJvbGxlclwiLFxuICAgIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIkt1YmVybmV0ZXNTY2hlbWFcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsIFwiU2VydmljZVJlZ2lzdHJ5XCIsXG4gICAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNTY2hlbWEsXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwsIFNlcnZpY2VSZWdpc3RyeSkgPT4ge1xuXG4gICAgICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xuICAgICAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XG4gICAgICAgICRzY29wZS5pZCA9ICRyb3V0ZVBhcmFtc1tcImlkXCJdO1xuICAgICAgICAkc2NvcGUuam9iSWQgPSAkcm91dGVQYXJhbXNbXCJqb2JcIl07XG4gICAgICAgICRzY29wZS5zY2hlbWEgPSBLdWJlcm5ldGVzU2NoZW1hO1xuICAgICAgICAkc2NvcGUuZW50aXR5Q2hhbmdlZENhY2hlID0ge307XG5cbiAgICAgICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xuICAgICAgICAkc2NvcGUuYnJlYWRjcnVtYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVQcm9qZWN0QnJlYWRjcnVtYnMoJHNjb3BlLmlkKTtcbiAgICAgICAgJHNjb3BlLnN1YlRhYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVQcm9qZWN0U3ViTmF2QmFycygkc2NvcGUuaWQsICRzY29wZS5qb2JJZCk7XG5cbiAgICAgICAgJHNjb3BlLiRvbigna3ViZXJuZXRlc01vZGVsVXBkYXRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB1cGRhdGVEYXRhKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgICRzY29wZS4kb24oJyRyb3V0ZVVwZGF0ZScsICgkZXZlbnQpID0+IHtcbiAgICAgICAgICB1cGRhdGVEYXRhKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgICRzY29wZS50YWJsZUNvbmZpZyA9IHtcbiAgICAgICAgICBkYXRhOiAnam9iLmJ1aWxkcycsXG4gICAgICAgICAgc2hvd1NlbGVjdGlvbkNoZWNrYm94OiB0cnVlLFxuICAgICAgICAgIGVuYWJsZVJvd0NsaWNrU2VsZWN0aW9uOiBmYWxzZSxcbiAgICAgICAgICBtdWx0aVNlbGVjdDogdHJ1ZSxcbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zOiBbXSxcbiAgICAgICAgICBmaWx0ZXJPcHRpb25zOiB7XG4gICAgICAgICAgICBmaWx0ZXJUZXh0OiAkbG9jYXRpb24uc2VhcmNoKClbXCJxXCJdIHx8ICcnXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb2x1bW5EZWZzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGZpZWxkOiAnJHNvcnRPcmRlcicsXG4gICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTmFtZScsXG4gICAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiamVua2luc0J1aWxkSWRUZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBmaWVsZDogJyRidWlsZExpbmsnLFxuICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1ZpZXdzJyxcbiAgICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJqZW5raW5zQnVpbGRCdXR0b25zVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZmllbGQ6ICckZHVyYXRpb24nLFxuICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogJ0R1cmF0aW9uJyxcbiAgICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJqZW5raW5zQnVpbGREdXJhdGlvblRlbXBsYXRlLmh0bWxcIilcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGZpZWxkOiAnJHRpbWVzdGFtcCcsXG4gICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnVGltZSBTdGFydGVkJyxcbiAgICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJqZW5raW5zQnVpbGRUaW1lc3RhbXBUZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9O1xuICAgICAgICB1cGRhdGVEYXRhKCk7XG5cblxuICAgICAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xuICAgICAgICAgIGlmICgkc2NvcGUuam9iSWQpIHtcbiAgICAgICAgICAgIHZhciB1cmwgPSBLdWJlcm5ldGVzLmt1YmVybmV0ZXNQcm94eVVybEZvclNlcnZpY2VDdXJyZW50TmFtZXNwYWNlKGplbmtpbnNTZXJ2aWNlTmFtZUFuZFBvcnQsIFVybEhlbHBlcnMuam9pbihcImpvYlwiLCAkc2NvcGUuam9iSWQsIFwiYXBpL2pzb24/ZGVwdGg9MVwiKSk7XG4gICAgICAgICAgICBpZiAodXJsICYmICghJHNjb3BlLmpvYiB8fCBLdWJlcm5ldGVzLmtlZXBQb2xsaW5nTW9kZWwpKSB7XG4gICAgICAgICAgICAgICRodHRwLmdldCh1cmwpLlxuICAgICAgICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBlbnJpY2hKZW5raW5zSm9iKGRhdGEsICRzY29wZS5pZCwgJHNjb3BlLmpvYklkKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc09iamVjdENoYW5nZWQoZGF0YSwgJHNjb3BlLmVudGl0eUNoYW5nZWRDYWNoZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBsb2cuaW5mbyhcImVudGl0eSBoYXMgY2hhbmdlZCFcIik7XG4gICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmpvYiA9IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICRzY29wZS5tb2RlbC5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICAgICAgICAgfSkuXG4gICAgICAgICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkc2NvcGUubW9kZWwuZmV0Y2hlZCA9IHRydWU7XG4gICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyRW5yaWNoZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckhlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyTmF2aWdhdGlvbi50c1wiLz5cblxubW9kdWxlIERldmVsb3BlciB7XG5cbiAgZXhwb3J0IHZhciBKZW5raW5zSm9ic0NvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiSmVua2luc0pvYnNDb250cm9sbGVyXCIsXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiS3ViZXJuZXRlc1NjaGVtYVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIiwgXCJTZXJ2aWNlUmVnaXN0cnlcIixcbiAgICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDpLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc1NjaGVtYSxcbiAgICAgICAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCwgU2VydmljZVJlZ2lzdHJ5KSA9PiB7XG5cbiAgICAgICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XG4gICAgICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcbiAgICAgICAgJHNjb3BlLmlkID0gJHJvdXRlUGFyYW1zW1wiaWRcIl07XG4gICAgICAgICRzY29wZS5zY2hlbWEgPSBLdWJlcm5ldGVzU2NoZW1hO1xuICAgICAgICAkc2NvcGUuamVua2lucyA9IG51bGw7XG4gICAgICAgICRzY29wZS5lbnRpdHlDaGFuZ2VkQ2FjaGUgPSB7fTtcblxuICAgICAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XG4gICAgICAgICRzY29wZS5icmVhZGNydW1iQ29uZmlnID0gY3JlYXRlUHJvamVjdEJyZWFkY3J1bWJzKCk7XG4gICAgICAgICRzY29wZS5zdWJUYWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlV29ya3NwYWNlU3ViTmF2QmFycygpO1xuXG4gICAgICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdXBkYXRlRGF0YSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICAkc2NvcGUuJG9uKCckcm91dGVVcGRhdGUnLCAoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgdXBkYXRlRGF0YSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICAkc2NvcGUudGFibGVDb25maWcgPSB7XG4gICAgICAgICAgZGF0YTogJ2plbmtpbnMuam9icycsXG4gICAgICAgICAgc2hvd1NlbGVjdGlvbkNoZWNrYm94OiB0cnVlLFxuICAgICAgICAgIGVuYWJsZVJvd0NsaWNrU2VsZWN0aW9uOiBmYWxzZSxcbiAgICAgICAgICBtdWx0aVNlbGVjdDogdHJ1ZSxcbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zOiBbXSxcbiAgICAgICAgICBmaWx0ZXJPcHRpb25zOiB7XG4gICAgICAgICAgICBmaWx0ZXJUZXh0OiAkbG9jYXRpb24uc2VhcmNoKClbXCJxXCJdIHx8ICcnXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb2x1bW5EZWZzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGZpZWxkOiAnbmFtZScsXG4gICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTmFtZScsXG4gICAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiamVua2luc0pvYk5hbWVUZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBmaWVsZDogJyRidWlsZExpbmsnLFxuICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1ZpZXdzJyxcbiAgICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJqZW5raW5zSm9iQnV0dG9uc1RlbXBsYXRlLmh0bWxcIilcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGZpZWxkOiAnJGxhc3RTdWNjZXNzZnVsQnVpbGROdW1iZXInLFxuICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogJ0xhc3QgU3VjY2VzcycsXG4gICAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiamVua2luc0xhc3RTdWNjZXNzVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZmllbGQ6ICckbGFzdEZhaWxlZGxCdWlsZE51bWJlcicsXG4gICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTGFzdCBGYWlsdXJlJyxcbiAgICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJqZW5raW5zTGFzdEZhaWx1cmVUZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBmaWVsZDogJyRkdXJhdGlvbicsXG4gICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTGFzdCBEdXJhdGlvbicsXG4gICAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiamVua2luc0J1aWxkRHVyYXRpb25UZW1wbGF0ZS5odG1sXCIpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBmaWVsZDogJyR0aW1lc3RhbXAnLFxuICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1RpbWUgU3RhcnRlZCcsXG4gICAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiamVua2luc0J1aWxkVGltZXN0YW1wVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICAgICAgdXBkYXRlRGF0YSgpO1xuXG5cbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcbiAgICAgICAgICAvLyBUT0RPIG9ubHkgbmVlZCBkZXB0aCAyIHRvIGJlIGFibGUgdG8gZmV0Y2ggdGhlIGxhc3RCdWlsZFxuICAgICAgICAgIHZhciB1cmwgPSBLdWJlcm5ldGVzLmt1YmVybmV0ZXNQcm94eVVybEZvclNlcnZpY2VDdXJyZW50TmFtZXNwYWNlKGplbmtpbnNTZXJ2aWNlTmFtZUFuZFBvcnQsIFwiYXBpL2pzb24/ZGVwdGg9MlwiKTtcbiAgICAgICAgICBsb2cuaW5mbyhcIlwiKTtcbiAgICAgICAgICBpZiAodXJsICYmICghJHNjb3BlLmplbmtpbnMgfHwgS3ViZXJuZXRlcy5rZWVwUG9sbGluZ01vZGVsKSkge1xuICAgICAgICAgICAgJGh0dHAuZ2V0KHVybCwgamVua2luc0h0dHBDb25maWcpLlxuICAgICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICBlbnJpY2hKZW5raW5zSm9icyhkYXRhLCAkc2NvcGUuaWQsICRzY29wZS5pZCk7XG4gICAgICAgICAgICAgICAgICBpZiAoaGFzT2JqZWN0Q2hhbmdlZChkYXRhLCAkc2NvcGUuZW50aXR5Q2hhbmdlZENhY2hlKSkge1xuICAgICAgICAgICAgICAgICAgICBsb2cuaW5mbyhcImVudGl0eSBoYXMgY2hhbmdlZCFcIik7XG4gICAgICAgICAgICAgICAgICAgICRzY29wZS5qZW5raW5zID0gZGF0YTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJHNjb3BlLm1vZGVsLmZldGNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICAgICAgIH0pLlxuICAgICAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1dKTtcbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9rdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0ludGVyZmFjZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4va3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzTW9kZWwudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyUGx1Z2luLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckVucmljaGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3Blck5hdmlnYXRpb24udHNcIi8+XG5cbm1vZHVsZSBEZXZlbG9wZXIge1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBjbGlja0FwcHJvdmUoZWxlbWVudCwgdXJsKSB7XG4gICAgdmFyICRzY29wZTogYW55ID0gYW5ndWxhci5lbGVtZW50KGVsZW1lbnQpLnNjb3BlKCk7XG4gICAgaWYgKCRzY29wZSkge1xuICAgICAgJHNjb3BlLmFwcHJvdmUodXJsLCBlbGVtZW50LnRleHQpO1xuICAgIH1cbiAgfVxuXG4gIGV4cG9ydCB2YXIgSmVua2luc0xvZ0NvbnRyb2xsZXIgPSBfbW9kdWxlLmNvbnRyb2xsZXIoXCJEZXZlbG9wZXIuSmVua2luc0xvZ0NvbnRyb2xsZXJcIiwgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLFxuICAgICAgICAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgJG1vZGFsLCBLdWJlcm5ldGVzQXBpVVJMLCBTZXJ2aWNlUmVnaXN0cnksICRlbGVtZW50KSA9PiB7XG5cbiAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcbiAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XG5cbiAgICAkc2NvcGUuc2VsZWN0ZWRCdWlsZCA9ICRzY29wZS4kZXZhbCgnYnVpbGQnKSB8fCAkc2NvcGUuJGV2YWwoJ3NlbGVjdGVkQnVpbGQnKTtcblxuICAgICRzY29wZS5pZCA9ICRzY29wZS4kZXZhbCgnYnVpbGQuaWQnKSB8fCAkcm91dGVQYXJhbXNbXCJpZFwiXTtcbiAgICAkc2NvcGUuc2NoZW1hID0gS3ViZXJuZXRlc1NjaGVtYTtcbiAgICAkc2NvcGUuZW50aXR5Q2hhbmdlZENhY2hlID0ge307XG5cbiAgICAkZWxlbWVudC5vbignJGRlc3Ryb3knLCAoKSA9PiB7XG4gICAgICAkc2NvcGUuJGRlc3Ryb3koKTtcbiAgICB9KTtcblxuICAgICRzY29wZS5sb2cgPSB7XG4gICAgICBodG1sOiBcIlwiLFxuICAgICAgc3RhcnQ6IDAsXG4gICAgICBmaXJzdElkeDogbnVsbFxuICAgIH07XG5cbiAgICAkc2NvcGUuJG9uKCdrdWJlcm5ldGVzTW9kZWxVcGRhdGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgdXBkYXRlSmVua2luc0xpbmsoKTtcbiAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgfSk7XG5cbiAgICAkc2NvcGUuJG9uKCdqZW5raW5zU2VsZWN0ZWRCdWlsZCcsIChldmVudCwgYnVpbGQpID0+IHtcbiAgICAgIGxvZy5pbmZvKFwiPT09PSBqZW5raW5zIGJ1aWxkIHNlbGVjdGVkISBcIiArIGJ1aWxkLmlkICsgXCIgXCIgKyBidWlsZC4kam9iSWQpO1xuICAgICAgJHNjb3BlLnNlbGVjdGVkQnVpbGQgPSBidWlsZDtcbiAgICB9KTtcblxuXG4gICAgJHNjb3BlLiR3YXRjaCgnc2VsZWN0ZWRCdWlsZCcsIChzZWxlY3RlZEJ1aWxkKSA9PiB7XG4gICAgICBsb2cuaW5mbyhcIlNlbGVjdGVkIGJ1aWxkIHVwZGF0ZWQ6IFwiLCBzZWxlY3RlZEJ1aWxkKTtcbiAgICAgICRzY29wZS5mZXRjaCgpO1xuICAgIH0pO1xuXG4gICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xuICAgICRzY29wZS5icmVhZGNydW1iQ29uZmlnID0gY3JlYXRlSmVua2luc0JyZWFkY3J1bWJzKCRzY29wZS5pZCwgZ2V0Sm9iSWQoKSwgZ2V0QnVpbGRJZCgpKTtcbiAgICAkc2NvcGUuc3ViVGFiQ29uZmlnID0gY3JlYXRlSmVua2luc1N1Yk5hdkJhcnMoJHNjb3BlLmlkLCBnZXRKb2JJZCgpLCBnZXRCdWlsZElkKCksIHtcbiAgICAgIGxhYmVsOiBcIkxvZ1wiLFxuICAgICAgdGl0bGU6IFwiVmlld3MgdGhlIGxvZ3Mgb2YgdGhpcyBidWlsZFwiXG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBnZXRKb2JJZCgpIHtcbiAgICAgIC8vIGxldHMgYWxsb3cgdGhlIHBhcmVudCBzY29wZSB0byBiZSB1c2VkIHRvbyBmb3Igd2hlbiB0aGlzIGlzIHVzZWQgYXMgYSBwYW5lbFxuICAgICAgcmV0dXJuICRyb3V0ZVBhcmFtc1tcImpvYlwiXSB8fCAoJHNjb3BlLnNlbGVjdGVkQnVpbGQgfHwge30pLiRqb2JJZDtcbiAgICB9XG4gICAgJHNjb3BlLmdldEpvYklkID0gZ2V0Sm9iSWQ7XG5cbiAgICBmdW5jdGlvbiBnZXRCdWlsZElkKCkge1xuICAgICAgLy8gbGV0cyBhbGxvdyB0aGUgcGFyZW50IHNjb3BlIHRvIGJlIHVzZWQgdG9vIGZvciB3aGVuIHRoaXMgaXMgdXNlZCBhcyBhIHBhbmVsXG4gICAgICByZXR1cm4gJHJvdXRlUGFyYW1zW1wiYnVpbGRcIl0gfHwgKCRzY29wZS5zZWxlY3RlZEJ1aWxkIHx8IHt9KS5pZDtcbiAgICB9XG4gICAgJHNjb3BlLmdldEJ1aWxkSWQgPSBnZXRCdWlsZElkO1xuXG4gICAgZnVuY3Rpb24gdXBkYXRlSmVua2luc0xpbmsoKSB7XG4gICAgICB2YXIgamVua2luc1VybCA9IGplbmtpbnNMaW5rKCk7XG4gICAgICBpZiAoamVua2luc1VybCkge1xuICAgICAgICAkc2NvcGUuJHZpZXdKZW5raW5zQnVpbGRMaW5rID0gVXJsSGVscGVycy5qb2luKGplbmtpbnNVcmwsIFwiam9iXCIsIGdldEpvYklkKCksIGdldEJ1aWxkSWQoKSk7XG4gICAgICAgICRzY29wZS4kdmlld0plbmtpbnNMb2dMaW5rID0gVXJsSGVscGVycy5qb2luKCRzY29wZS4kdmlld0plbmtpbnNCdWlsZExpbmssIFwiY29uc29sZVwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcXVlcnlTaXplID0gNTAwMDA7XG5cbiAgICAkc2NvcGUuYXBwcm92ZSA9ICh1cmwsIG9wZXJhdGlvbikgPT4ge1xuICAgICAgdmFyIG1vZGFsID0gJG1vZGFsLm9wZW4oe1xuICAgICAgdGVtcGxhdGVVcmw6IFVybEhlbHBlcnMuam9pbih0ZW1wbGF0ZVBhdGgsICdqZW5raW5zQXBwcm92ZU1vZGFsLmh0bWwnKSxcbiAgICAgIGNvbnRyb2xsZXI6IFsnJHNjb3BlJywgJyRtb2RhbEluc3RhbmNlJywgKCRzY29wZSwgJG1vZGFsSW5zdGFuY2UpID0+IHtcbiAgICAgICAgJHNjb3BlLm9wZXJhdGlvbiA9IG9wZXJhdGlvbjtcbiAgICAgICAgJHNjb3BlLmhlYWRlciA9IG9wZXJhdGlvbiArIFwiP1wiO1xuICAgICAgICAkc2NvcGUub2sgPSAoKSA9PiB7XG4gICAgICAgICAgbW9kYWwuY2xvc2UoKTtcbiAgICAgICAgICBwb3N0VG9KZW5raW5zKHVybCwgb3BlcmF0aW9uKTtcbiAgICAgICAgfTtcbiAgICAgICAgJHNjb3BlLmNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgICBtb2RhbC5kaXNtaXNzKCk7XG4gICAgICAgIH07XG4gICAgICB9XVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHBvc3RUb0plbmtpbnModXJpLCBvcGVyYXRpb24pIHtcbiAgICAgIHZhciB1cmwgPSAgS3ViZXJuZXRlcy5rdWJlcm5ldGVzUHJveHlVcmxGb3JTZXJ2aWNlQ3VycmVudE5hbWVzcGFjZShqZW5raW5zU2VydmljZU5hbWVBbmRQb3J0LCB1cmkpO1xuICAgICAgaWYgKHVybCkge1xuICAgICAgICB2YXIgYm9keSA9IG51bGw7XG4gICAgICAgIHZhciBjb25maWcgPSB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBsb2cuaW5mbyhcInBvc3RpbmcgdG8gamVua2luc1VybDogXCIgKyB1cmwpO1xuICAgICAgICAkaHR0cC5wb3N0KHVybCwgYm9keSwgY29uZmlnKS5cbiAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgbG9nLmluZm8oXCJNYW5hZ2VkIHRvIFwiICsgb3BlcmF0aW9uICsgXCIgYXQgXCIgKyB1cmwpO1xuICAgICAgICAgIH0pLlxuICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCBcIiArIG9wZXJhdGlvbiArIFwiIGpvYiBhdCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cud2FybihcIkNhbm5vdCBwb3N0IHRvIGplbmtpbnMgVVJJOiBcIiArIHVyaSArIFwiIGFzIG5vIGplbmtpbnMgZm91bmQhXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgICRzY29wZS4ka2VlcFBvbGxpbmcgPSAoKSA9PiBLdWJlcm5ldGVzLmtlZXBQb2xsaW5nTW9kZWw7XG5cbiAgICAkc2NvcGUuZmV0Y2ggPSBQb2xsSGVscGVycy5zZXR1cFBvbGxpbmcoJHNjb3BlLCAobmV4dDooKSA9PiB2b2lkKSA9PiB7XG4gICAgICBpZiAoJHNjb3BlLiRldmFsKCdoaWRlTG9ncyAmJiAhYnVpbGQuYnVpbGRpbmcnKSkge1xuICAgICAgICBsb2cuZGVidWcoXCJMb2cgaGlkZGVuLCBub3QgZmV0Y2hpbmcgbG9nc1wiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLmRlYnVnKFwiRmV0Y2hpbmcgbG9ncyBmb3IgYnVpbGQ6IFwiLCAkc2NvcGUuJGV2YWwoJ2J1aWxkJykpO1xuICAgICAgfVxuICAgICAgdmFyIGJ1aWxkSWQgPSBnZXRCdWlsZElkKCk7XG4gICAgICB2YXIgam9iSWQgPSBnZXRKb2JJZCgpO1xuICAgICAgLy9sb2cuaW5mbyhcIj09PSBqZW5raW5zIGxvZyBxdWVyeWluZyBqb2IgXCIgKyBqb2JJZCArIFwiIGJ1aWxkIFwiICsgYnVpbGRJZCArIFwiIHNlbGVjdGVkIGJ1aWxkIFwiICsgICRzY29wZS5zZWxlY3RlZEJ1aWxkKTtcbiAgICAgIGlmIChqb2JJZCAmJiBidWlsZElkKSB7XG4gICAgICAgIGlmICgkc2NvcGUuYnVpbGRJZCAhPT0gYnVpbGRJZCB8fCAkc2NvcGUuam9iSWQgIT09IGpvYklkKSB7XG4gICAgICAgICAgLy8gbGV0cyBjbGVhciB0aGUgcXVlcnlcbiAgICAgICAgICAkc2NvcGUubG9nID0ge1xuICAgICAgICAgICAgaHRtbDogXCJcIixcbiAgICAgICAgICAgIHN0YXJ0OiAwLFxuICAgICAgICAgICAgZmlyc3RJZHg6IG51bGxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgICRzY29wZS5idWlsZElkID0gYnVpbGRJZDtcbiAgICAgICAgJHNjb3BlLmpvYklkID0gam9iSWQ7XG5cbiAgICAgICAgdmFyIHVybCA9IEt1YmVybmV0ZXMua3ViZXJuZXRlc1Byb3h5VXJsRm9yU2VydmljZUN1cnJlbnROYW1lc3BhY2UoamVua2luc1NlcnZpY2VOYW1lQW5kUG9ydCwgVXJsSGVscGVycy5qb2luKFwiam9iXCIsIGpvYklkLCBidWlsZElkLCBcImZhYnJpYzgvbG9nSHRtbD90YWlsPTEmc3RhcnQ9XCIgKyAkc2NvcGUubG9nLnN0YXJ0ICsgXCImc2l6ZT1cIiArIHF1ZXJ5U2l6ZSkpO1xuICAgICAgICBpZiAoJHNjb3BlLmxvZy5maXJzdElkeCAhPT0gbnVsbCkge1xuICAgICAgICAgIHVybCArPSBcIiZmaXJzdD1cIiArICRzY29wZS5sb2cuZmlyc3RJZHg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVybCAmJiAoISRzY29wZS5sb2cuZmV0Y2hlZCB8fCBLdWJlcm5ldGVzLmtlZXBQb2xsaW5nTW9kZWwpKSB7XG4gICAgICAgICAgJGh0dHAuZ2V0KHVybCkuXG4gICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIHZhciByZXBsYWNlQ2x1c3RlcklQc0luSHRtbCA9IHJlcGxhY2VDbHVzdGVySXBGdW5jdGlvbigpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCEkc2NvcGUubG9nLmxvZ3MpIHtcbiAgICAgICAgICAgICAgICAgICRzY29wZS5sb2cubG9ncyA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgbGluZXMgPSBkYXRhLmxpbmVzO1xuICAgICAgICAgICAgICAgIHZhciByZXR1cm5lZExlbmd0aCA9IGRhdGEucmV0dXJuZWRMZW5ndGg7XG4gICAgICAgICAgICAgICAgdmFyIGxvZ0xlbmd0aCA9IGRhdGEubG9nTGVuZ3RoO1xuICAgICAgICAgICAgICAgIHZhciByZXR1cm5lZFN0YXJ0ID0gZGF0YS5zdGFydDtcbiAgICAgICAgICAgICAgICB2YXIgZWFybGllckxvZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmIChhbmd1bGFyLmlzRGVmaW5lZChyZXR1cm5lZFN0YXJ0KSkge1xuICAgICAgICAgICAgICAgICAgZWFybGllckxvZyA9IHJldHVybmVkU3RhcnQgPCAkc2NvcGUubG9nLnN0YXJ0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgbGluZVNwbGl0ID0gZGF0YS5saW5lU3BsaXQ7XG4gICAgICAgICAgICAgICAgLy8gbG9nLmluZm8oXCJzdGFydCB3YXM6IFwiICsgJHNjb3BlLmxvZy5zdGFydCArIFwiIGZpcnN0OiBcIiArICRzY29wZS5sb2cuZmlyc3RJZHggKyBcIiA9PiByZXR1cm5lZExlbmd0aDogXCIgKyByZXR1cm5lZExlbmd0aCArIFwiIGxvZ0xlbmd0aDogXCIgKyBsb2dMZW5ndGggKyAgXCIgcmV0dXJuZWRTdGFydDogXCIgKyByZXR1cm5lZFN0YXJ0ICsgXCIgZWFybGllckxvZzogXCIgKyBlYXJsaWVyTG9nICsgXCIgbGluZVNwbGl0OiBcIiArIGxpbmVTcGxpdCk7XG4gICAgICAgICAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgY3VycmVudExvZ3MgPSAkc2NvcGUubG9nLmxvZ3M7XG5cbiAgICAgICAgICAgICAgICAgIC8vIGxldHMgcmUtam9pbiBzcGxpdCBsaW5lc1xuICAgICAgICAgICAgICAgICAgaWYgKGxpbmVTcGxpdCAmJiBjdXJyZW50TG9ncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxhc3RJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3RPZkxpbmU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlYXJsaWVyTG9nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICByZXN0T2ZMaW5lID0gbGluZXMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3RPZkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRMb2dzW2xhc3RJbmRleF0gPSByZXBsYWNlQ2x1c3RlcklQc0luSHRtbChyZXN0T2ZMaW5lICsgY3VycmVudExvZ3NbbGFzdEluZGV4XSk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9IGN1cnJlbnRMb2dzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgcmVzdE9mTGluZSA9IGxpbmVzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3RPZkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRMb2dzW2xhc3RJbmRleF0gPSByZXBsYWNlQ2x1c3RlcklQc0luSHRtbChjdXJyZW50TG9nc1tsYXN0SW5kZXhdICsgcmVzdE9mTGluZSk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpbmVzW2ldID0gcmVwbGFjZUNsdXN0ZXJJUHNJbkh0bWwobGluZXNbaV0pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaWYgKGVhcmxpZXJMb2cpIHtcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmxvZy5sb2dzID0gbGluZXMuY29uY2F0KGN1cnJlbnRMb2dzKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICRzY29wZS5sb2cubG9ncyA9IGN1cnJlbnRMb2dzLmNvbmNhdChsaW5lcyk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBtb3ZlRm9yd2FyZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKGFuZ3VsYXIuaXNEZWZpbmVkKHJldHVybmVkU3RhcnQpKSB7XG4gICAgICAgICAgICAgICAgICBpZiAocmV0dXJuZWRTdGFydCA+ICRzY29wZS5sb2cuc3RhcnQgJiYgJHNjb3BlLmxvZy5zdGFydCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB3ZSd2ZSBqdW1wZWQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSB0byByZWFkIHRoZSB0YWlsIG9mIGl0XG4gICAgICAgICAgICAgICAgICAgICRzY29wZS5sb2cuc3RhcnQgPSByZXR1cm5lZFN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAkc2NvcGUubG9nLmZpcnN0SWR4ID0gcmV0dXJuZWRTdGFydDtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJHNjb3BlLmxvZy5maXJzdElkeCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBsZXRzIHJlbWVtYmVyIHdoZXJlIHRoZSBmaXJzdCByZXF1ZXN0IHN0YXJ0ZWRcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmxvZy5maXJzdElkeCA9IHJldHVybmVkU3RhcnQ7XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJldHVybmVkU3RhcnQgPCAkc2NvcGUubG9nLmZpcnN0SWR4KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHdlJ3ZlIGdvdCBhbiBlYXJsaWVyIGJpdCBvZiB0aGUgbG9nXG4gICAgICAgICAgICAgICAgICAgIC8vIGFmdGVyIHN0YXJ0aW5nIGF0IHRoZSB0YWlsXG4gICAgICAgICAgICAgICAgICAgIC8vIHNvIGxldHMgbW92ZSBmaXJzdElkeCBiYWNrd2FyZHMgYW5kIGxlYXZlIHN0YXJ0IGFzIGl0IGlzIChhdCB0aGUgZW5kIG9mIHRoZSBmaWxlKVxuICAgICAgICAgICAgICAgICAgICAkc2NvcGUubG9nLmZpcnN0SWR4ID0gcmV0dXJuZWRTdGFydDtcbiAgICAgICAgICAgICAgICAgICAgbW92ZUZvcndhcmQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG1vdmVGb3J3YXJkICYmIHJldHVybmVkTGVuZ3RoICYmICFlYXJsaWVyTG9nKSB7XG4gICAgICAgICAgICAgICAgICAkc2NvcGUubG9nLnN0YXJ0ICs9IHJldHVybmVkTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgaWYgKGxvZ0xlbmd0aCAmJiAkc2NvcGUubG9nLnN0YXJ0ID4gbG9nTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICRzY29wZS5sb2cuc3RhcnQgPSBsb2dMZW5ndGg7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHVwZGF0ZUplbmtpbnNMaW5rKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgJHNjb3BlLmxvZy5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgLy8gQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgfSkuXG4gICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkc2NvcGUubG9nLmZldGNoZWQgPSB0cnVlO1xuICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgICBuZXh0KCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoYW5ndWxhci5pc0Z1bmN0aW9uKCRzY29wZS5mZXRjaCkpIHtcbiAgICAgICRzY29wZS5mZXRjaCgpO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gcmVwbGFjZUNsdXN0ZXJJcEZ1bmN0aW9uKCkge1xuICAgICAgZnVuY3Rpb24gY3JlYXRlUmVwbGFjZUZ1bmN0aW9uKGZyb20sIHRvKSB7XG4gICAgICAgIHJldHVybiAodGV4dCkgPT4gcmVwbGFjZVRleHQodGV4dCwgZnJvbSwgdG8pO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVwbGFjZW1lbnRzID0gW107XG4gICAgICBhbmd1bGFyLmZvckVhY2goJHNjb3BlLm1vZGVsLnNlcnZpY2VzLCAoc2VydmljZSkgPT4ge1xuICAgICAgICB2YXIgJHBvcnRhbElQID0gc2VydmljZS4kcG9ydGFsSVA7XG4gICAgICAgIHZhciAkc2VydmljZVVybCA9IHNlcnZpY2UuJHNlcnZpY2VVcmw7XG4gICAgICAgIHZhciAkcG9ydHNUZXh0ID0gc2VydmljZS4kcG9ydHNUZXh0O1xuICAgICAgICBpZiAoJHBvcnRhbElQICYmICRzZXJ2aWNlVXJsKSB7XG4gICAgICAgICAgdmFyIGlkeCA9ICRzZXJ2aWNlVXJsLmluZGV4T2YoXCI6Ly9cIik7XG4gICAgICAgICAgaWYgKGlkeCA+IDApIHtcbiAgICAgICAgICAgIHZhciByZXBsYWNlV2l0aCA9ICRzZXJ2aWNlVXJsLnN1YnN0cmluZyhpZHgsICRzZXJ2aWNlVXJsLmxlbmd0aCk7XG4gICAgICAgICAgICBpZiAoIXJlcGxhY2VXaXRoLmVuZHNXaXRoKFwiL1wiKSkge1xuICAgICAgICAgICAgICByZXBsYWNlV2l0aCArPSBcIi9cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXBsYWNlV2l0aC5sZW5ndGggPiA0KSB7XG4gICAgICAgICAgICAgIHJlcGxhY2VtZW50cy5wdXNoKGNyZWF0ZVJlcGxhY2VGdW5jdGlvbihcbiAgICAgICAgICAgICAgICAgICAgXCI6Ly9cIiArICRwb3J0YWxJUCArIFwiL1wiLFxuICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aFxuICAgICAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgICAgaWYgKCRwb3J0c1RleHQpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3VmZml4ID0gXCI6XCIgKyAkcG9ydHNUZXh0O1xuICAgICAgICAgICAgICAgIHZhciBzZXJ2aWNlV2l0aFBvcnQgPSByZXBsYWNlV2l0aC5zdWJzdHJpbmcoMCwgcmVwbGFjZVdpdGgubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgICAgaWYgKCFzZXJ2aWNlV2l0aFBvcnQuZW5kc1dpdGgoc3VmZml4KSkge1xuICAgICAgICAgICAgICAgICAgc2VydmljZVdpdGhQb3J0ICs9IHN1ZmZpeDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2VydmljZVdpdGhQb3J0ICs9IFwiL1wiO1xuICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50cy5wdXNoKGNyZWF0ZVJlcGxhY2VGdW5jdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICBcIjovL1wiICsgJHBvcnRhbElQICsgXCI6XCIgKyAkcG9ydHNUZXh0ICsgXCIvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgc2VydmljZVdpdGhQb3J0XG4gICAgICAgICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBmdW5jdGlvbiBhZGRSZXBsYWNlRm4oZnJvbSwgdG8pIHtcbiAgICAgICAgcmVwbGFjZW1lbnRzLnB1c2goKHRleHQpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVwbGFjZVRleHQodGV4dCwgZnJvbSwgdG8pO1xuICAgICAgICB9KTtcblxuICAgICAgfVxuICAgICAgYWRkUmVwbGFjZUZuKFwiW0lORk9dXCIsIFwiPHNwYW4gY2xhc3M9J2xvZy1zdWNjZXNzJz5bSU5GT108L3NwYW4+XCIpO1xuICAgICAgYWRkUmVwbGFjZUZuKFwiW1dBUk5dXCIsIFwiPHNwYW4gY2xhc3M9J2xvZy13YXJuJz5bV0FSTl08L3NwYW4+XCIpO1xuICAgICAgYWRkUmVwbGFjZUZuKFwiW1dBUk5JTkddXCIsIFwiPHNwYW4gY2xhc3M9J2xvZy13YXJuJz5bV0FSTklOR108L3NwYW4+XCIpO1xuICAgICAgYWRkUmVwbGFjZUZuKFwiW0VSUk9SXVwiLCBcIjxzcGFuIGNsYXNzPSdsb2ctZXJyb3InPltFUlJPUl08L3NwYW4+XCIpO1xuICAgICAgYWRkUmVwbGFjZUZuKFwiRkFJTFVSRVwiLCBcIjxzcGFuIGNsYXNzPSdsb2ctZXJyb3InPkZBSUxVUkU8L3NwYW4+XCIpO1xuICAgICAgYWRkUmVwbGFjZUZuKFwiU1VDQ0VTU1wiLCBcIjxzcGFuIGNsYXNzPSdsb2ctc3VjY2Vzcyc+U1VDQ0VTUzwvc3Bhbj5cIik7XG5cbiAgICAgIC8vIGxldHMgdHJ5IGNvbnZlcnQgdGhlIFByb2NlZWQgLyBBYm9ydCBsaW5rc1xuICAgICAgcmVwbGFjZW1lbnRzLnB1c2goKHRleHQpID0+IHtcbiAgICAgICAgdmFyIHByZWZpeCA9IFwiPGEgaHJlZj0nIycgb25jbGljaz1cXFwibmV3IEFqYXguUmVxdWVzdCgnXCI7XG4gICAgICAgIHZhciBpZHggPSAwO1xuICAgICAgICB3aGlsZSAoaWR4ID49IDApIHtcbiAgICAgICAgICBpZHggPSB0ZXh0LmluZGV4T2YocHJlZml4LCBpZHgpO1xuICAgICAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICAgICAgdmFyIHN0YXJ0ID0gaWR4ICsgcHJlZml4Lmxlbmd0aDtcbiAgICAgICAgICAgIHZhciBlbmRRdW90ZSA9IHRleHQuaW5kZXhPZihcIidcIiwgc3RhcnQgKyAxKTtcbiAgICAgICAgICAgIGlmIChlbmRRdW90ZSA8PSAwKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGVuZERvdWJsZVF1b3RlID0gdGV4dC5pbmRleE9mKCdcIicsIGVuZFF1b3RlICsgMSk7XG4gICAgICAgICAgICBpZiAoZW5kRG91YmxlUXVvdGUgPD0gMCkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciB1cmwgPSB0ZXh0LnN1YnN0cmluZyhzdGFydCwgZW5kUXVvdGUpO1xuICAgICAgICAgICAgLy8gVE9ETyB1c2luZyAkY29tcGlsZSBpcyBhIHRhZCBjb21wbGV4LCBmb3Igbm93IGxldHMgY2hlYXQgd2l0aCBhIGxpdHRsZSBvbmNsaWNrIDspXG4gICAgICAgICAgICAvL3RleHQgPSB0ZXh0LnN1YnN0cmluZygwLCBpZHgpICsgXCI8YSBjbGFzcz0nYnRuIGJ0bi1kZWZhdWx0IGJ0bi1sZycgbmctY2xpY2s9XFxcImFwcHJvdmUoJ1wiICsgdXJsICsgXCInKVxcXCJcIiArIHRleHQuc3Vic3RyaW5nKGVuZERvdWJsZVF1b3RlICsgMSk7XG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC5zdWJzdHJpbmcoMCwgaWR4KSArIFwiPGEgY2xhc3M9J2J0biBidG4tZGVmYXVsdCBidG4tbGcnIG9uY2xpY2s9XFxcIkRldmVsb3Blci5jbGlja0FwcHJvdmUodGhpcywgJ1wiICsgdXJsICsgXCInKVxcXCJcIiArIHRleHQuc3Vic3RyaW5nKGVuZERvdWJsZVF1b3RlICsgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24odGV4dCkge1xuICAgICAgICB2YXIgYW5zd2VyID0gdGV4dDtcbiAgICAgICAgYW5ndWxhci5mb3JFYWNoKHJlcGxhY2VtZW50cywgKGZuKSA9PiB7XG4gICAgICAgICAgYW5zd2VyID0gZm4oYW5zd2VyKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBhbnN3ZXI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVwbGFjZVRleHQodGV4dCwgZnJvbSwgdG8pIHtcbiAgICAgIGlmIChmcm9tICYmIHRvICYmIHRleHQpIHtcbiAgICAgICAgLy9sb2cuaW5mbyhcIlJlcGxhY2luZyAnXCIgKyBmcm9tICsgXCInID0+ICdcIiArIHRvICsgXCInXCIpO1xuICAgICAgICB2YXIgaWR4ID0gMDtcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICBpZHggPSB0ZXh0LmluZGV4T2YoZnJvbSwgaWR4KTtcbiAgICAgICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgICAgIHRleHQgPSB0ZXh0LnN1YnN0cmluZygwLCBpZHgpICsgdG8gKyB0ZXh0LnN1YnN0cmluZyhpZHggKyBmcm9tLmxlbmd0aCk7XG4gICAgICAgICAgICBpZHggKz0gdG8ubGVuZ3RoO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgfSk7XG5cbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9rdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckVucmljaGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3Blck5hdmlnYXRpb24udHNcIi8+XG5cbm1vZHVsZSBEZXZlbG9wZXIge1xuXG4gIGV4cG9ydCB2YXIgSmVua2luc01ldHJpY3NDb250cm9sbGVyID0gY29udHJvbGxlcihcIkplbmtpbnNNZXRyaWNzQ29udHJvbGxlclwiLFxuICAgIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIkt1YmVybmV0ZXNTY2hlbWFcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsIFwiU2VydmljZVJlZ2lzdHJ5XCIsXG4gICAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNTY2hlbWEsXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwsIFNlcnZpY2VSZWdpc3RyeSkgPT4ge1xuXG4gICAgICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xuICAgICAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XG4gICAgICAgICRzY29wZS5pZCA9ICRyb3V0ZVBhcmFtc1tcImlkXCJdO1xuICAgICAgICAkc2NvcGUuam9iSWQgPSAkcm91dGVQYXJhbXNbXCJqb2JcIl07XG4gICAgICAgICRzY29wZS5zY2hlbWEgPSBLdWJlcm5ldGVzU2NoZW1hO1xuICAgICAgICAkc2NvcGUuamVua2lucyA9IG51bGw7XG4gICAgICAgICRzY29wZS5lbnRpdHlDaGFuZ2VkQ2FjaGUgPSB7fTtcblxuICAgICAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XG4gICAgICAgICRzY29wZS5icmVhZGNydW1iQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZVByb2plY3RCcmVhZGNydW1icygkc2NvcGUuaWQpO1xuICAgICAgICAkc2NvcGUuc3ViVGFiQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZVByb2plY3RTdWJOYXZCYXJzKCRzY29wZS5pZCwgJHNjb3BlLmpvYklkKTtcblxuICAgICAgICAkc2NvcGUuJG9uKCdrdWJlcm5ldGVzTW9kZWxVcGRhdGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHVwZGF0ZURhdGEoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJHNjb3BlLiRvbignJHJvdXRlVXBkYXRlJywgKCRldmVudCkgPT4ge1xuICAgICAgICAgIHVwZGF0ZURhdGEoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJHNjb3BlLm9wdGlvbnMgPSB7XG4gICAgICAgICAgY2hhcnQ6IHtcbiAgICAgICAgICAgIHR5cGU6ICdkaXNjcmV0ZUJhckNoYXJ0JyxcbiAgICAgICAgICAgIGF1dG9yZWZyZXNoOiBmYWxzZSxcbiAgICAgICAgICAgIGhlaWdodDogNDUwLFxuICAgICAgICAgICAgbWFyZ2luOiB7XG4gICAgICAgICAgICAgIHRvcDogMjAsXG4gICAgICAgICAgICAgIHJpZ2h0OiAyMCxcbiAgICAgICAgICAgICAgYm90dG9tOiA2MCxcbiAgICAgICAgICAgICAgbGVmdDogNDVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGlwRWRnZTogdHJ1ZSxcbiAgICAgICAgICAgIHN0YWdnZXJMYWJlbHM6IGZhbHNlLFxuICAgICAgICAgICAgdHJhbnNpdGlvbkR1cmF0aW9uOiA1MDAsXG4gICAgICAgICAgICBzdGFja2VkOiBmYWxzZSxcbiAgICAgICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICAgICAgdG9vbHRpcDoge1xuICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgICBjb250ZW50R2VuZXJhdG9yOiAoYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBkYXRhID0gYXJncy5kYXRhIHx8IHt9O1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLnRvb2x0aXA7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29sb3I6IChkLCBpKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBkLmNvbG9yO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHhBeGlzOiB7XG4gICAgICAgICAgICAgIGF4aXNMYWJlbDogJ0J1aWxkcycsXG4gICAgICAgICAgICAgIHNob3dNYXhNaW46IGZhbHNlLFxuICAgICAgICAgICAgICB0aWNrRm9ybWF0OiBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBcIiNcIiArIGQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB5QXhpczoge1xuICAgICAgICAgICAgICBheGlzTGFiZWw6ICdCdWlsZCBEdXJhdGlvbiAoc2Vjb25kcyknLFxuICAgICAgICAgICAgICB0aWNrRm9ybWF0OiBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkMy5mb3JtYXQoJywuMWYnKShkKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAkc2NvcGUuZGF0YSA9IFtdO1xuXG4gICAgICAgIHVwZGF0ZURhdGEoKTtcblxuICAgICAgICBmdW5jdGlvbiBiYXJDb2xvdXJGb3JCdWlsZFJlc3VsdChyZXN1bHQpIHtcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSBcIkZBSUxVUkVcIiB8fCByZXN1bHQgPT09IFwiRkFJTEVEXCIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIFwicmVkXCI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gXCJBQk9SVEVEXCIgfHwgcmVzdWx0ID09PSBcIklOVEVSVVBURURcIikge1xuICAgICAgICAgICAgICByZXR1cm4gXCJ0YW5cIjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0ID09PSBcIlNVQ0NFU1NcIikge1xuICAgICAgICAgICAgICByZXR1cm4gXCJncmVlblwiO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT09IFwiTk9UX1NUQVJURURcIikge1xuICAgICAgICAgICAgICByZXR1cm4gXCJsaWdodGdyZXlcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gXCJkYXJrZ3JleVwiO1xuICAgICAgICB9XG5cblxuICAgICAgICBmdW5jdGlvbiB1cGRhdGVDaGFydERhdGEoKSB7XG4gICAgICAgICAgdmFyIHVzZVNpbmdsZVNldCA9IHRydWU7XG4gICAgICAgICAgdmFyIGJ1aWxkc1N1Y2NlZWRlZCA9IFtdO1xuICAgICAgICAgIHZhciBidWlsZHNGYWlsZWQgPSBbXTtcbiAgICAgICAgICB2YXIgc3VjY2Vzc0J1aWxkS2V5ID0gXCJTdWNjZWVkZWQgYnVpbGRzXCI7XG4gICAgICAgICAgdmFyIGZhaWxlZEJ1aWxkS2V5ID0gXCJGYWlsZWQgYnVpbGRzXCI7XG5cbiAgICAgICAgICBpZiAodXNlU2luZ2xlU2V0KSB7XG4gICAgICAgICAgICBzdWNjZXNzQnVpbGRLZXkgPSBcIkJ1aWxkc1wiO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBjb3VudCA9IDA7XG4gICAgICAgICAgdmFyIGJ1aWxkcyA9IF8uc29ydEJ5KCRzY29wZS5tZXRyaWNzLmJ1aWxkcyB8fCBbXSwgXCJudW1iZXJcIik7XG4gICAgICAgICAgYW5ndWxhci5mb3JFYWNoKGJ1aWxkcywgKGJ1aWxkOmFueSkgPT4ge1xuICAgICAgICAgICAgdmFyIHggPSBidWlsZC5udW1iZXI7XG4gICAgICAgICAgICB2YXIgeSA9IGJ1aWxkLmR1cmF0aW9uIC8gMTAwMDtcbiAgICAgICAgICAgIHZhciBkYXRlID0gRGV2ZWxvcGVyLmFzRGF0ZShidWlsZC50aW1lSW5NaWxsaXMpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGJ1aWxkLnJlc3VsdCB8fCBcIk5PVF9TVEFSVEVEXCI7XG4gICAgICAgICAgICB2YXIgY29sb3IgPSBiYXJDb2xvdXJGb3JCdWlsZFJlc3VsdChyZXN1bHQpO1xuICAgICAgICAgICAgdmFyIGljb25DbGFzcyA9IGNyZWF0ZUJ1aWxkU3RhdHVzSWNvbkNsYXNzKHJlc3VsdCk7XG4gICAgICAgICAgICB2YXIgdG9vbHRpcCA9ICc8aDM+PGkgY2xhc3M9XCInICsgaWNvbkNsYXNzICsgJ1wiPjwvaT4gJyArIGJ1aWxkLmRpc3BsYXlOYW1lICsgJzwvaDM+JyArXG4gICAgICAgICAgICAgICc8cD5kdXJhdGlvbjogPGI+JyArIHkgKyAnPC9iPiBzZWNvbmRzPC9wPic7XG4gICAgICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgICAgICB0b29sdGlwICs9ICc8cD5zdGFydGVkOiA8Yj4nICsgZGF0ZSArICc8L2I+PC9wPic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgIHRvb2x0aXAgKz0gJzxwPnJlc3VsdDogPGI+JyArIHJlc3VsdCArICc8L2I+PC9wPic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh4KSB7XG4gICAgICAgICAgICAgIHZhciBkYXRhID0gYnVpbGRzU3VjY2VlZGVkO1xuICAgICAgICAgICAgICB2YXIga2V5ID0gc3VjY2Vzc0J1aWxkS2V5O1xuICAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3NCdWlsZEtleSAmJiAoIXJlc3VsdCB8fCAhcmVzdWx0LnN0YXJ0c1dpdGgoXCJTVUNDXCIpKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBidWlsZHNGYWlsZWQ7XG4gICAgICAgICAgICAgICAga2V5ID0gZmFpbGVkQnVpbGRLZXk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZGF0YS5wdXNoKHtcbiAgICAgICAgICAgICAgICB0b29sdGlwOiB0b29sdGlwLFxuICAgICAgICAgICAgICAgIGNvbG9yOiBjb2xvcixcbiAgICAgICAgICAgICAgICB4OiB4LCB5OiB5fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgJHNjb3BlLmRhdGEgPSBbXTtcbiAgICAgICAgICBpZiAoYnVpbGRzU3VjY2VlZGVkLmxlbmd0aCkge1xuICAgICAgICAgICAgJHNjb3BlLmRhdGEucHVzaCh7XG4gICAgICAgICAgICAgIGtleTogc3VjY2Vzc0J1aWxkS2V5LFxuICAgICAgICAgICAgICB2YWx1ZXM6IGJ1aWxkc1N1Y2NlZWRlZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChidWlsZHNGYWlsZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICAkc2NvcGUuZGF0YS5wdXNoKHtcbiAgICAgICAgICAgICAga2V5OiBmYWlsZWRCdWlsZEtleSxcbiAgICAgICAgICAgICAgdmFsdWVzOiBidWlsZHNGYWlsZWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICAkc2NvcGUuYXBpLnVwZGF0ZVdpdGhEYXRhKCRzY29wZS5kYXRhKTtcblxuICAgICAgICAgICR0aW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICRzY29wZS5hcGkudXBkYXRlKCk7XG4gICAgICAgICAgfSwgNTApO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcbiAgICAgICAgICB2YXIgbWV0cmljc1BhdGggPSAkc2NvcGUuam9iSWQgPyBVcmxIZWxwZXJzLmpvaW4oXCJqb2JcIiwgJHNjb3BlLmpvYklkLCBcImZhYnJpYzgvbWV0cmljc1wiKSA6IFwiZmFicmljOC9tZXRyaWNzXCI7XG4gICAgICAgICAgdmFyIHVybCA9IEt1YmVybmV0ZXMua3ViZXJuZXRlc1Byb3h5VXJsRm9yU2VydmljZUN1cnJlbnROYW1lc3BhY2UoamVua2luc1NlcnZpY2VOYW1lQW5kUG9ydCwgbWV0cmljc1BhdGgpO1xuICAgICAgICAgIGxvZy5pbmZvKFwiXCIpO1xuICAgICAgICAgIGlmICh1cmwgJiYgKCEkc2NvcGUuamVua2lucyB8fCBLdWJlcm5ldGVzLmtlZXBQb2xsaW5nTW9kZWwpKSB7XG4gICAgICAgICAgICAkaHR0cC5nZXQodXJsLCBqZW5raW5zSHR0cENvbmZpZykuXG4gICAgICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChoYXNPYmplY3RDaGFuZ2VkKGRhdGEsICRzY29wZS5lbnRpdHlDaGFuZ2VkQ2FjaGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZy5pbmZvKFwiZW50aXR5IGhhcyBjaGFuZ2VkIVwiKTtcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLm1ldHJpY3MgPSBkYXRhO1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVDaGFydERhdGEoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJHNjb3BlLm1vZGVsLmZldGNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICAgICAgIH0pLlxuICAgICAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1dKTtcbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9rdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckVucmljaGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3Blck5hdmlnYXRpb24udHNcIi8+XG5cbm1vZHVsZSBEZXZlbG9wZXIge1xuXG4gIGV4cG9ydCB2YXIgTmF2QmFyQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJOYXZCYXJDb250cm9sbGVyXCIsXG4gICAgW1wiJHNjb3BlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXG4gICAgICAoJHNjb3BlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkdGltZW91dCkgPT4ge1xuXG4gICAgICAgICRzY29wZS5pc1ZhbGlkID0gKGl0ZW0pID0+IHtcbiAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gaXRlbS5pc1ZhbGlkO1xuICAgICAgICAgICAgaWYgKGFuZ3VsYXIuaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlKGl0ZW0pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gYW5ndWxhci5pc1VuZGVmaW5lZCh2YWx1ZSkgfHwgdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyRW5yaWNoZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckhlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyTmF2aWdhdGlvbi50c1wiLz5cblxubW9kdWxlIERldmVsb3BlciB7XG5cbiAgZXhwb3J0IHZhciBQaXBlbGluZUNvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiUGlwZWxpbmVDb250cm9sbGVyXCIsXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiS3ViZXJuZXRlc1NjaGVtYVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIiwgXCJTZXJ2aWNlUmVnaXN0cnlcIixcbiAgICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDpLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc1NjaGVtYSxcbiAgICAgICAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCwgU2VydmljZVJlZ2lzdHJ5KSA9PiB7XG5cbiAgICAgICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XG4gICAgICAgICRzY29wZS5rdWJlTW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XG4gICAgICAgICRzY29wZS5pZCA9ICRyb3V0ZVBhcmFtc1tcImlkXCJdO1xuICAgICAgICAkc2NvcGUuam9iSWQgPSAkcm91dGVQYXJhbXNbXCJqb2JcIl07XG4gICAgICAgICRzY29wZS5idWlsZElkID0gJHJvdXRlUGFyYW1zW1wiYnVpbGRcIl07XG4gICAgICAgICRzY29wZS5zY2hlbWEgPSBLdWJlcm5ldGVzU2NoZW1hO1xuICAgICAgICAkc2NvcGUuZW50aXR5Q2hhbmdlZENhY2hlID0ge307XG5cbiAgICAgICAgJHNjb3BlLm1vZGVsID0ge1xuICAgICAgICAgIHN0YWdlczogbnVsbFxuICAgICAgICB9O1xuICAgICAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XG4gICAgICAgICRzY29wZS5icmVhZGNydW1iQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZVByb2plY3RCcmVhZGNydW1icygkc2NvcGUuaWQpO1xuICAgICAgICAkc2NvcGUuc3ViVGFiQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZVByb2plY3RTdWJOYXZCYXJzKCRzY29wZS5pZCwgJHNjb3BlLmpvYklkKTtcblxuICAgICAgICAkc2NvcGUuJG9uKCdrdWJlcm5ldGVzTW9kZWxVcGRhdGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHVwZGF0ZURhdGEoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJHNjb3BlLiRvbignJHJvdXRlVXBkYXRlJywgKCRldmVudCkgPT4ge1xuICAgICAgICAgIHVwZGF0ZURhdGEoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdXBkYXRlRGF0YSgpO1xuXG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZURhdGEoKSB7XG4gICAgICAgICAgaWYgKCRzY29wZS5qb2JJZCkge1xuICAgICAgICAgICAgdmFyIHVybCA9IEt1YmVybmV0ZXMua3ViZXJuZXRlc1Byb3h5VXJsRm9yU2VydmljZUN1cnJlbnROYW1lc3BhY2UoamVua2luc1NlcnZpY2VOYW1lQW5kUG9ydCwgVXJsSGVscGVycy5qb2luKFwiam9iXCIsICRzY29wZS5qb2JJZCwgJHNjb3BlLmJ1aWxkSWQsIFwiZmFicmljOC9zdGFnZXMvXCIpKTtcbiAgICAgICAgICAgIGlmICh1cmwgJiYgKCEkc2NvcGUubW9kZWwuc3RhZ2VzIHx8IEt1YmVybmV0ZXMua2VlcFBvbGxpbmdNb2RlbCkpIHtcbiAgICAgICAgICAgICAgJGh0dHAuZ2V0KHVybCkuXG4gICAgICAgICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIGVucmljaEplbmtpbnNTdGFnZXMoZGF0YSwgJHNjb3BlLmlkLCAkc2NvcGUuam9iSWQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzT2JqZWN0Q2hhbmdlZChkYXRhLCAkc2NvcGUuZW50aXR5Q2hhbmdlZENhY2hlKSkge1xuICAgICAgICAgICAgICAgICAgICAgIGxvZy5pbmZvKFwiZW50aXR5IGhhcyBjaGFuZ2VkIVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuYnVpbGQgPSBkYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5tb2RlbC5zdGFnZXMgPSBkYXRhLnN0YWdlcztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgJHNjb3BlLm1vZGVsLmZldGNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgICAgICAgICB9KS5cbiAgICAgICAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGxvYWQgXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XG4gICAgICAgICAgICAgICAgICAkc2NvcGUubW9kZWwuZmV0Y2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRzY29wZS5tb2RlbC5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XSk7XG59XG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4va3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzSGVscGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJFbnJpY2hlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVySGVscGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJOYXZpZ2F0aW9uLnRzXCIvPlxuXG5tb2R1bGUgRGV2ZWxvcGVyIHtcbiAgX21vZHVsZS5kaXJlY3RpdmUoXCJwaXBlbGluZVZpZXdcIiwgKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICB0ZW1wbGF0ZVVybDogdGVtcGxhdGVQYXRoICsgJ3BpcGVsaW5lVmlldy5odG1sJ1xuICAgIH07XG4gIH0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyUGx1Z2luLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckVucmljaGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3Blck5hdmlnYXRpb24udHNcIi8+XG5cbm1vZHVsZSBEZXZlbG9wZXIge1xuXG4gIGV4cG9ydCB2YXIgUGlwZWxpbmVzQ29udHJvbGxlciA9IF9tb2R1bGUuY29udHJvbGxlcihcIkRldmVsb3Blci5QaXBlbGluZXNDb250cm9sbGVyXCIsICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDpLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc1NjaGVtYSxcbiAgICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwsIFNlcnZpY2VSZWdpc3RyeSwgJGVsZW1lbnQpID0+IHtcblxuICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xuICAgICRzY29wZS5rdWJlTW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XG4gICAgJHNjb3BlLmlkID0gJHJvdXRlUGFyYW1zW1wiaWRcIl07XG4gICAgJHNjb3BlLmpvYklkID0gJHNjb3BlLmpvYklkIHx8ICRyb3V0ZVBhcmFtc1tcImpvYlwiXTtcbiAgICAkc2NvcGUuc2NoZW1hID0gS3ViZXJuZXRlc1NjaGVtYTtcbiAgICAkc2NvcGUuZW50aXR5Q2hhbmdlZENhY2hlID0ge307XG5cbiAgICAkZWxlbWVudC5vbignJGRlc3Ryb3knLCAoKSA9PiB7XG4gICAgICAkc2NvcGUuJGRlc3Ryb3koKTtcbiAgICB9KTtcblxuICAgICRzY29wZS5tb2RlbCA9IHtcbiAgICAgIGpvYjogbnVsbCxcbiAgICAgIHBlbmRpbmdPbmx5OiAkc2NvcGUucGVuZGluZ1BpcGVsaW5lc09ubHlcbiAgICB9O1xuICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcbiAgICAkc2NvcGUuYnJlYWRjcnVtYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVQcm9qZWN0QnJlYWRjcnVtYnMoJHNjb3BlLmlkKTtcbiAgICAkc2NvcGUuc3ViVGFiQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZVByb2plY3RTdWJOYXZCYXJzKCRzY29wZS5pZCwgJHNjb3BlLmpvYklkKTtcblxuICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICB1cGRhdGVEYXRhKCk7XG4gICAgfSk7XG5cbiAgICAkc2NvcGUuJG9uKCckcm91dGVVcGRhdGUnLCAoJGV2ZW50KSA9PiB7XG4gICAgICB1cGRhdGVEYXRhKCk7XG4gICAgfSk7XG5cbiAgICAkc2NvcGUuJHdhdGNoKCdtb2RlbC5wZW5kaW5nT25seScsICgkZXZlbnQpID0+IHtcbiAgICAgIHVwZGF0ZURhdGEoKTtcbiAgICB9KTtcblxuICAgICRzY29wZS5zZWxlY3RCdWlsZCA9IChidWlsZCkgPT4ge1xuICAgICAgdmFyIGlkID0gYnVpbGQuaWQ7XG4gICAgICBpZiAoaWQpIHtcbiAgICAgICAgaWYgKGlkICE9PSAkc2NvcGUuc2VsZWN0ZWRCdWlsZElkKSB7XG4gICAgICAgICAgJHNjb3BlLnNlbGVjdGVkQnVpbGRJZCA9IGlkO1xuICAgICAgICAgICRzY29wZS4kYnJvYWRjYXN0KFwiamVua2luc1NlbGVjdGVkQnVpbGRcIiwgYnVpbGQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciB1cGRhdGVEYXRhID0gXy5kZWJvdW5jZSgoKSA9PiB7XG4gICAgICB2YXIgZW50aXR5ID0gJHNjb3BlLmVudGl0eTtcbiAgICAgIGlmICgkc2NvcGUuam9iSWQpIHtcbiAgICAgICAgaWYgKCghZW50aXR5IHx8IGVudGl0eS4kamVua2luc0pvYikpIHtcbiAgICAgICAgICB2YXIgcXVlcnlQYXRoID0gXCJmYWJyaWM4L3N0YWdlcy9cIjtcbiAgICAgICAgICBpZiAoJHNjb3BlLm1vZGVsLnBlbmRpbmdPbmx5KSB7XG4gICAgICAgICAgICBxdWVyeVBhdGggPSBcImZhYnJpYzgvcGVuZGluZ1N0YWdlcy9cIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIHVybCA9IEt1YmVybmV0ZXMua3ViZXJuZXRlc1Byb3h5VXJsRm9yU2VydmljZUN1cnJlbnROYW1lc3BhY2UoamVua2luc1NlcnZpY2VOYW1lQW5kUG9ydCwgVXJsSGVscGVycy5qb2luKFwiam9iXCIsICRzY29wZS5qb2JJZCwgcXVlcnlQYXRoKSk7XG4gICAgICAgICAgaWYgKHVybCAmJiAoISRzY29wZS5tb2RlbC5qb2IgfHwgS3ViZXJuZXRlcy5rZWVwUG9sbGluZ01vZGVsKSkge1xuICAgICAgICAgICAgJGh0dHAuZ2V0KHVybCkuXG4gICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIGVucmljaEplbmtpbnNQaXBlbGluZUpvYihkYXRhLCAkc2NvcGUuaWQsICRzY29wZS5qb2JJZCk7XG4gICAgICAgICAgICAgICAgaWYgKGhhc09iamVjdENoYW5nZWQoZGF0YSwgJHNjb3BlLmVudGl0eUNoYW5nZWRDYWNoZSkpIHtcbiAgICAgICAgICAgICAgICAgIGxvZy5pbmZvKFwiZW50aXR5IGhhcyBjaGFuZ2VkIVwiKTtcbiAgICAgICAgICAgICAgICAgICRzY29wZS5tb2RlbC5qb2IgPSBkYXRhO1xuXG4gICAgICAgICAgICAgICAgICB2YXIgYnVpbGRzID0gZGF0YS5idWlsZHM7XG4gICAgICAgICAgICAgICAgICBpZiAoYnVpbGRzICYmIGJ1aWxkcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLnNlbGVjdEJ1aWxkKGJ1aWxkc1swXSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICRzY29wZS5tb2RlbC5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgICAgIH0pLlxuICAgICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGxvYWQgXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XG4gICAgICAgICAgICAgICRzY29wZS5tb2RlbC5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoJHNjb3BlLm1vZGVsKSB7XG4gICAgICAgICAgICBLdWJlcm5ldGVzLmVucmljaEJ1aWxkcygkc2NvcGUua3ViZU1vZGVsLmJ1aWxkcyk7XG5cbiAgICAgICAgICAgIHZhciBidWlsZHMgPSBbXTtcbiAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaCgkc2NvcGUua3ViZU1vZGVsLmJ1aWxkcywgKGJ1aWxkKSA9PiB7XG4gICAgICAgICAgICAgIHZhciBsYWJlbHMgPSBLdWJlcm5ldGVzLmdldExhYmVscyhidWlsZCk7XG4gICAgICAgICAgICAgIHZhciBhcHAgPSBsYWJlbHNbXCJhcHBcIl07XG4gICAgICAgICAgICAgIGlmIChhcHAgPT09ICRzY29wZS5wcm9qZWN0SWQpIHtcbiAgICAgICAgICAgICAgICBidWlsZHMucHVzaChidWlsZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnVpbGRzID0gXy5zb3J0QnkoYnVpbGRzLCBcIiRjcmVhdGlvbkRhdGVcIikucmV2ZXJzZSgpO1xuICAgICAgICAgICAgdmFyIGFsbEJ1aWxkcyA9IGJ1aWxkcztcbiAgICAgICAgICAgIGlmIChhbGxCdWlsZHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICBidWlsZHMgPSBfLmZpbHRlcihhbGxCdWlsZHMsIChiKSA9PiAhYi4kY3JlYXRpb25EYXRlKTtcbiAgICAgICAgICAgICAgaWYgKCFidWlsZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgYnVpbGRzID0gW2FsbEJ1aWxkc1swXV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBwaXBlbGluZXMgPSBbXTtcbiAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChidWlsZHMsIChidWlsZCkgPT4ge1xuICAgICAgICAgICAgICB2YXIgYnVpbGRTdGF0dXMgPSBidWlsZC5zdGF0dXMgfHwge307XG4gICAgICAgICAgICAgIHZhciByZXN1bHQgPSBidWlsZFN0YXR1cy5waGFzZSB8fCBcIlwiO1xuICAgICAgICAgICAgICB2YXIgcmVzdWx0VXBwZXJDYXNlID0gcmVzdWx0LnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgICAgICAgdmFyIGRlc2NyaXB0aW9uID0gXCJcIjtcbiAgICAgICAgICAgICAgdmFyICR2aWV3TGluayA9IGJ1aWxkLiR2aWV3TGluaztcbiAgICAgICAgICAgICAgdmFyICRsb2dMaW5rID0gYnVpbGQuJGxvZ3NMaW5rO1xuICAgICAgICAgICAgICB2YXIgJHRpbWVzdGFtcCA9IGJ1aWxkLiRjcmVhdGlvbkRhdGU7XG4gICAgICAgICAgICAgIHZhciBkdXJhdGlvbiA9IGJ1aWxkU3RhdHVzLmR1cmF0aW9uO1xuICAgICAgICAgICAgICBpZiAoZHVyYXRpb24pIHtcbiAgICAgICAgICAgICAgICAvLyAxN3MgPSAxNywwMDAsMDAwLDAwMCBvbiBvcGVuc2hpZnRcbiAgICAgICAgICAgICAgICBkdXJhdGlvbiA9IGR1cmF0aW9uIC8gMTAwMDAwMDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB2YXIgZGlzcGxheU5hbWUgPSBLdWJlcm5ldGVzLmdldE5hbWUoYnVpbGQpO1xuICAgICAgICAgICAgICB2YXIgJGljb25DbGFzcyA9IGNyZWF0ZUJ1aWxkU3RhdHVzSWNvbkNsYXNzKHJlc3VsdFVwcGVyQ2FzZSk7XG4gICAgICAgICAgICAgIHZhciAkYmFja2dyb3VuZENsYXNzID0gY3JlYXRlQnVpbGRTdGF0dXNCYWNrZ3JvdW5kQ2xhc3MocmVzdWx0VXBwZXJDYXNlKTtcbiAgICAgICAgICAgICAgdmFyIHN0YWdlID0ge1xuICAgICAgICAgICAgICAgIHN0YWdlTmFtZTogXCJPcGVuU2hpZnQgQnVpbGRcIixcbiAgICAgICAgICAgICAgICAkdmlld0xpbms6ICR2aWV3TGluayxcbiAgICAgICAgICAgICAgICAkbG9nTGluazogJGxvZ0xpbmssXG4gICAgICAgICAgICAgICAgJHN0YXJ0VGltZTogJHRpbWVzdGFtcCxcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogZHVyYXRpb24sXG4gICAgICAgICAgICAgICAgc3RhdHVzOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgJGljb25DbGFzczogJGljb25DbGFzcyxcbiAgICAgICAgICAgICAgICAkYmFja2dyb3VuZENsYXNzOiAkYmFja2dyb3VuZENsYXNzXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHZhciBwaXBlbGluZSA9IHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6IGRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICR2aWV3TGluazogJHZpZXdMaW5rLFxuICAgICAgICAgICAgICAgICRsb2dMaW5rOiAkbG9nTGluayxcbiAgICAgICAgICAgICAgICAkdGltZXN0YW1wOiAkdGltZXN0YW1wLFxuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbixcbiAgICAgICAgICAgICAgICBzdGFnZXM6IFtzdGFnZV1cbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgcGlwZWxpbmVzLnB1c2gocGlwZWxpbmUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIGxldHMgZmlsdGVyIHRoZSBPcGVuU2hpZnQgYnVpbGRzIGFuZCBtYWtlIGEgcGlwZWxpbmUgZnJvbSB0aGF0XG4gICAgICAgICAgICAkc2NvcGUubW9kZWwuam9iID0ge1xuICAgICAgICAgICAgICAkam9iSWQ6ICRzY29wZS5qb2JJZCxcbiAgICAgICAgICAgICAgJHByb2plY3Q6ICRzY29wZS5wcm9qZWN0SWQsXG4gICAgICAgICAgICAgIGJ1aWxkczogcGlwZWxpbmVzXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICAkc2NvcGUubW9kZWwuZmV0Y2hlZCA9IHRydWU7XG4gICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJHNjb3BlLm1vZGVsLmZldGNoZWQgPSB0cnVlO1xuICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgfVxuICAgIH0sIDUwKTtcblxuICAgIHVwZGF0ZURhdGEoKTtcblxuICB9KTtcbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9rdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckVucmljaGVycy50c1wiLz5cbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJIZWxwZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3Blck5hdmlnYXRpb24udHNcIi8+XG5cbm1vZHVsZSBEZXZlbG9wZXIge1xuXG4gIGV4cG9ydCB2YXIgUHJvamVjdENvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiUHJvamVjdENvbnRyb2xsZXJcIixcbiAgICBbXCIkc2NvcGVcIiwgXCIkZWxlbWVudFwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIkt1YmVybmV0ZXNTY2hlbWFcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXG4gICAgICAoJHNjb3BlLCAkZWxlbWVudCwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLFxuICAgICAgICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XG5cbiAgICAgICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XG4gICAgICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcbiAgICAgICAgJHNjb3BlLmlkID0gJHJvdXRlUGFyYW1zW1wiaWRcIl07XG5cbiAgICAgICAgJHNjb3BlLnNjaGVtYSA9IEt1YmVybmV0ZXNTY2hlbWE7XG4gICAgICAgICRzY29wZS5jb25maWcgPSBLdWJlcm5ldGVzU2NoZW1hLmRlZmluaXRpb25zLm9zX2J1aWxkX0J1aWxkQ29uZmlnO1xuICAgICAgICAkc2NvcGUuZW50aXR5Q2hhbmdlZENhY2hlID0ge307XG4gICAgICAgICRzY29wZS5lbnZWZXJzaW9uc0NhY2hlID0ge307XG4gICAgICAgICRzY29wZS5lbnZOU0NhY2hlcyA9IHt9O1xuICAgICAgICAkc2NvcGUuZW52VmVyc2lvbnMgPSB7fTtcblxuICAgICAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XG4gICAgICAgICRzY29wZS5icmVhZGNydW1iQ29uZmlnID0gW107IC8vRGV2ZWxvcGVyLmNyZWF0ZVByb2plY3RCcmVhZGNydW1icygkc2NvcGUuaWQpO1xuICAgICAgICB1cGRhdGVUYWJzKCk7XG4gICAgICAgIC8vIHRoaXMgaXMgdXNlZCBmb3IgdGhlIHBlbmRpbmdQaXBlbGluZXMgdmlld1xuICAgICAgICAkc2NvcGUuam9iSWQgPSAkc2NvcGUuaWQ7XG4gICAgICAgICRzY29wZS5wZW5kaW5nUGlwZWxpbmVzT25seSA9IHRydWU7XG5cbiAgICAgICAgJHNjb3BlLiRvbignamVua2luc1NlbGVjdGVkQnVpbGQnLCAoZXZlbnQsIGJ1aWxkKSA9PiB7XG4gICAgICAgICAgJHNjb3BlLnNlbGVjdGVkQnVpbGQgPSBidWlsZDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gVE9ETyB0aGlzIHNob3VsZCBiZSB1bm5lY2Vzc2FyeSBidXQgc2VlbXMgc29tZXRpZW1zIHRoaXMgd2F0Y2ggZG9lc24ndCBhbHdheXMgdHJpZ2dlciB1bmxlc3MgeW91IGhpdCByZWxvYWQgb24gdGhpcyBwYWdlXG4gICAgICAgIGlmICgkc2NvcGUubW9kZWwuYnVpbGRjb25maWdzKSB7XG4gICAgICAgICAgb25CdWlsZENvbmZpZ3MoJHNjb3BlLm1vZGVsLmJ1aWxkY29uZmlncyk7XG4gICAgICAgIH1cbiAgICAgICAgS3ViZXJuZXRlcy53YXRjaCgkc2NvcGUsICRlbGVtZW50LCBcImJ1aWxkY29uZmlnc1wiLCAkc2NvcGUubmFtZXNwYWNlLCBvbkJ1aWxkQ29uZmlncyk7XG5cbiAgICAgICAgZnVuY3Rpb24gb25CdWlsZENvbmZpZ3MoYnVpbGRDb25maWdzKSB7XG4gICAgICAgICAgYW5ndWxhci5mb3JFYWNoKGJ1aWxkQ29uZmlncywgKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHZhciBuYW1lID0gS3ViZXJuZXRlcy5nZXROYW1lKGRhdGEpO1xuICAgICAgICAgICAgaWYgKG5hbWUgPT09ICRzY29wZS5pZCkge1xuICAgICAgICAgICAgICB2YXIgc29ydGVkQnVpbGRzID0gbnVsbDtcbiAgICAgICAgICAgICAgS3ViZXJuZXRlcy5lbnJpY2hCdWlsZENvbmZpZyhkYXRhLCBzb3J0ZWRCdWlsZHMpO1xuICAgICAgICAgICAgICBpZiAoaGFzT2JqZWN0Q2hhbmdlZChkYXRhLCAkc2NvcGUuZW50aXR5Q2hhbmdlZENhY2hlKSkge1xuICAgICAgICAgICAgICAgIGxvZy5pbmZvKFwiZW50aXR5IGhhcyBjaGFuZ2VkIVwiKTtcbiAgICAgICAgICAgICAgICAkc2NvcGUuZW50aXR5ID0gZGF0YTtcbiAgICAgICAgICAgICAgICAkc2NvcGUuZW50aXR5LiRidWlsZCA9IChkYXRhLiRmYWJyaWM4Q29kZVZpZXdzIHx8IHt9KVsnZmFicmljOC5saW5rLmJyb3dzZUdvZ3MudmlldyddO1xuICAgICAgICAgICAgICAgICRzY29wZS5tb2RlbC5zZXRQcm9qZWN0KCRzY29wZS5lbnRpdHkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHVwZGF0ZUVudmlyb25tZW50V2F0Y2goKTtcbiAgICAgICAgICAgICAgdXBkYXRlVGFicygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgICRzY29wZS5tb2RlbC5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xuICAgICAgICB9XG5cblxuICAgICAgICAvKipcbiAgICAgICAgICogV2UgaGF2ZSB1cGRhdGVkIHRoZSBlbnRpdHkgc28gbGV0cyBtYWtlIHN1cmUgd2UgYXJlIHdhdGNoaW5nIGFsbCB0aGUgZW52aXJvbm1lbnRzIHRvIGZpbmRcbiAgICAgICAgICogdGhlIHByb2plY3QgdmVyc2lvbnMgZm9yIGVhY2ggbmFtZXNwYWNlXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiB1cGRhdGVFbnZpcm9ubWVudFdhdGNoKCkge1xuICAgICAgICAgIHZhciBwcm9qZWN0ID0gJHNjb3BlLmVudGl0eTtcbiAgICAgICAgICBpZiAocHJvamVjdCkge1xuICAgICAgICAgICAgdmFyIGplbmtpbnNKb2IgPSBwcm9qZWN0LiRqZW5raW5zSm9iO1xuICAgICAgICAgICAgaWYgKGplbmtpbnNKb2IpIHtcbiAgICAgICAgICAgICAgdmFyIGJ1aWxkc1RhYiA9IF8uZmluZCgkc2NvcGUuc3ViVGFiQ29uZmlnLCB7aWQ6IFwiYnVpbGRzXCJ9KTtcbiAgICAgICAgICAgICAgaWYgKGJ1aWxkc1RhYikge1xuICAgICAgICAgICAgICAgIGJ1aWxkc1RhYltcImhyZWZcIl0gPSBVcmxIZWxwZXJzLmpvaW4oXCIvd29ya3NwYWNlc1wiLCBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCksIFwicHJvamVjdHNcIiwgJHNjb3BlLmlkLCBcImplbmtpbnNKb2JcIiwgamVua2luc0pvYik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYW5ndWxhci5mb3JFYWNoKHByb2plY3QuZW52aXJvbm1lbnRzLCAoZW52KSA9PiB7XG4gICAgICAgICAgICAgIHZhciBucyA9IGVudi5uYW1lc3BhY2U7XG4gICAgICAgICAgICAgIHZhciBjYWNoZXMgPSAkc2NvcGUuZW52TlNDYWNoZXNbbnNdO1xuICAgICAgICAgICAgICBpZiAoIWNhY2hlcykge1xuICAgICAgICAgICAgICAgIGNhY2hlcyA9IHt9O1xuICAgICAgICAgICAgICAgICRzY29wZS5lbnZOU0NhY2hlc1tuc10gPSBjYWNoZXM7XG4gICAgICAgICAgICAgICAgbG9hZFByb2plY3RWZXJzaW9ucygkc2NvcGUsICRlbGVtZW50LCBwcm9qZWN0LCBlbnYsIG5zLCAkc2NvcGUuZW52VmVyc2lvbnMsIGNhY2hlcyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZVRhYnMoKSB7XG4gICAgICAgICAgJHNjb3BlLnN1YlRhYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVQcm9qZWN0U3ViTmF2QmFycygkc2NvcGUuaWQsIG51bGwsICRzY29wZSk7XG4gICAgICAgIH1cblxuICAgICAgfV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlclBsdWdpbi50c1wiLz5cblxubW9kdWxlIERldmVsb3BlciB7XG5cbiAgX21vZHVsZS5jb250cm9sbGVyKCdEZXZlbG9wZXIuUHJvamVjdFNlbGVjdG9yJywgWyckc2NvcGUnLCAnJHJvdXRlUGFyYW1zJywgJ0t1YmVybmV0ZXNNb2RlbCcsICgkc2NvcGUsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsKSA9PiB7XG4gICAgdmFyIHByb2plY3RJZCA9ICRyb3V0ZVBhcmFtc1sncHJvamVjdElkJ10gfHwgJHJvdXRlUGFyYW1zWydwcm9qZWN0J10gfHwgJHJvdXRlUGFyYW1zWydpZCddO1xuICAgIGlmIChwcm9qZWN0SWQpIHtcbiAgICAgICRzY29wZS5wcm9qZWN0SWQgPSBwcm9qZWN0SWQ7XG4gICAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWxcbiAgICAgICRzY29wZS4kd2F0Y2goJ21vZGVsLmJ1aWxkY29uZmlncycsIChidWlsZGNvbmZpZ3MpID0+IHtcbiAgICAgICAgJHNjb3BlLnByb2plY3RzID0gYnVpbGRjb25maWdzO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZy5pbmZvKFwibm8gcHJvamVjdCBJRCBpbiByb3V0ZVBhcmFtczogXCIsICRyb3V0ZVBhcmFtcyk7XG4gICAgfVxuICB9XSk7XG5cbn1cblxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyRW5yaWNoZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckhlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyTmF2aWdhdGlvbi50c1wiLz5cblxubW9kdWxlIERldmVsb3BlciB7XG5cbiAgZXhwb3J0IHZhciBQcm9qZWN0c0NvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiUHJvamVjdHNDb250cm9sbGVyXCIsIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIiRkaWFsb2dcIiwgXCIkd2luZG93XCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkbG9jYXRpb25cIiwgXCJsb2NhbFN0b3JhZ2VcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLFxuICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDpLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSwgJGRpYWxvZywgJHdpbmRvdywgJHRlbXBsYXRlQ2FjaGUsICRyb3V0ZVBhcmFtcywgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsIGxvY2FsU3RvcmFnZSwgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XG5cbiAgICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xuICAgICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xuXG4gICAgICAkc2NvcGUudGFibGVDb25maWcgPSB7XG4gICAgICAgIGRhdGE6ICdtb2RlbC5idWlsZGNvbmZpZ3MnLFxuICAgICAgICBzaG93U2VsZWN0aW9uQ2hlY2tib3g6IHRydWUsXG4gICAgICAgIGVuYWJsZVJvd0NsaWNrU2VsZWN0aW9uOiBmYWxzZSxcbiAgICAgICAgbXVsdGlTZWxlY3Q6IHRydWUsXG4gICAgICAgIHNlbGVjdGVkSXRlbXM6IFtdLFxuICAgICAgICBmaWx0ZXJPcHRpb25zOiB7XG4gICAgICAgICAgZmlsdGVyVGV4dDogJGxvY2F0aW9uLnNlYXJjaCgpW1wicVwiXSB8fCAnJ1xuICAgICAgICB9LFxuICAgICAgICBjb2x1bW5EZWZzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmllbGQ6ICckbmFtZScsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ05hbWUnLFxuICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJpZFRlbXBsYXRlLmh0bWxcIilcbiAgICAgICAgICB9LFxuLypcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ3NwZWMuc291cmNlLnR5cGUnLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdTb3VyY2UnXG4gICAgICAgICAgfSxcbiovXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmllbGQ6ICdzcGVjLnNvdXJjZS5naXQudXJpJyxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnUmVwb3NpdG9yeSdcbiAgICAgICAgICB9LFxuLypcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ3NwZWMuc3RyYXRlZ3kudHlwZScsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1N0cmF0ZWd5J1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmllbGQ6ICdzcGVjLnN0cmF0ZWd5LnN0aVN0cmF0ZWd5LmltYWdlJyxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnU291cmNlIEltYWdlJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmllbGQ6ICdzcGVjLm91dHB1dC5pbWFnZVRhZycsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ091dHB1dCBJbWFnZSdcbiAgICAgICAgICB9LFxuKi9cbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ21ldGFkYXRhLmRlc2NyaXB0aW9uJyxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnRGVzY3JpcHRpb24nXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJyRjcmVhdGlvbkRhdGUnLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdDcmVhdGVkJyxcbiAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiY3JlYXRpb25UaW1lVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmllbGQ6ICckbGFiZWxzVGV4dCcsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ0xhYmVscycsXG4gICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImxhYmVsVGVtcGxhdGUuaHRtbFwiKVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfTtcblxuICAgICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xuXG4gICAgICAkc2NvcGUuYnJlYWRjcnVtYkNvbmZpZyA9IGNyZWF0ZVByb2plY3RCcmVhZGNydW1icygpO1xuICAgICAgJHNjb3BlLnN1YlRhYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVXb3Jrc3BhY2VTdWJOYXZCYXJzKCk7XG5cbiAgICAgIC8vIFRPRE9cbiAgICAgIC8vJHNjb3BlLmlzTG9nZ2VkSW50b0dvZ3MgPSBGb3JnZS5pc0xvZ2dlZEludG9Hb2dzO1xuXG4gICAgICAkc2NvcGUuZGVsZXRlUHJvbXB0ID0gKHNlbGVjdGVkKSA9PiB7XG4gICAgICAgIFVJLm11bHRpSXRlbUNvbmZpcm1BY3Rpb25EaWFsb2coPFVJLk11bHRpSXRlbUNvbmZpcm1BY3Rpb25PcHRpb25zPntcbiAgICAgICAgICBjb2xsZWN0aW9uOiBzZWxlY3RlZCxcbiAgICAgICAgICBpbmRleDogJyRuYW1lJyxcbiAgICAgICAgICBvbkNsb3NlOiAocmVzdWx0OmJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgZnVuY3Rpb24gZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIG5leHQpIHtcbiAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgICAgZGVsZXRlRW50aXR5KG5leHQsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZURhdGEoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aXRsZTogJ0RlbGV0ZSBBcHBzJyxcbiAgICAgICAgICBhY3Rpb246ICdUaGUgZm9sbG93aW5nIEFwcHMgd2lsbCBiZSBkZWxldGVkOicsXG4gICAgICAgICAgb2tUZXh0OiAnRGVsZXRlJyxcbiAgICAgICAgICBva0NsYXNzOiAnYnRuLWRhbmdlcicsXG4gICAgICAgICAgY3VzdG9tOiBcIlRoaXMgb3BlcmF0aW9uIGlzIHBlcm1hbmVudCBvbmNlIGNvbXBsZXRlZCFcIixcbiAgICAgICAgICBjdXN0b21DbGFzczogXCJhbGVydCBhbGVydC13YXJuaW5nXCJcbiAgICAgICAgfSkub3BlbigpO1xuICAgICAgfTtcblxuICAgICAgZnVuY3Rpb24gZGVsZXRlRW50aXR5KHNlbGVjdGlvbiwgbmV4dENhbGxiYWNrKSB7XG4gICAgICAgIHZhciBuYW1lID0gKHNlbGVjdGlvbiB8fCB7fSkuJG5hbWU7XG4gICAgICAgIHZhciBqZW5raW5zSm9iID0gc2VsZWN0aW9uLiRqZW5raW5zSm9iO1xuICAgICAgICB2YXIgcHVibGljSmVua2luc1VybCA9IGplbmtpbnNMaW5rKCk7XG4gICAgICAgIC8vdmFyIGplbmtpbnNVcmwgPSBDb3JlLnBhdGhHZXQoc2VsZWN0aW9uLCBbXCIkZmFicmljOFZpZXdzXCIsIFwiZmFicmljOC5saW5rLmplbmtpbnMuam9iXCIsIFwidXJsXCJdKTtcbiAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkFib3V0IHRvIGRlbGV0ZSBidWlsZCBjb25maWc6IFwiICsgbmFtZSk7XG4gICAgICAgICAgdmFyIHVybCA9IEt1YmVybmV0ZXMuYnVpbGRDb25maWdSZXN0VXJsKG5hbWUpO1xuICAgICAgICAgICRodHRwLmRlbGV0ZSh1cmwpLlxuICAgICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgICAgbmV4dENhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KS5cbiAgICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBkZWxldGUgYnVpbGQgY29uZmlnIG9uIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xuICAgICAgICAgICAgICBuZXh0Q2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwid2FybmluZzogbm8gbmFtZSBmb3Igc2VsZWN0aW9uOiBcIiArIGFuZ3VsYXIudG9Kc29uKHNlbGVjdGlvbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGplbmtpbnNKb2IgJiYgcHVibGljSmVua2luc1VybCkge1xuICAgICAgICAgIHZhciB1cmwgPSBLdWJlcm5ldGVzLmt1YmVybmV0ZXNQcm94eVVybEZvclNlcnZpY2VDdXJyZW50TmFtZXNwYWNlKGplbmtpbnNTZXJ2aWNlTmFtZUFuZFBvcnQsIFVybEhlbHBlcnMuam9pbihcImpvYlwiLCBqZW5raW5zSm9iLCBcImRvRGVsZXRlXCIpKTtcbiAgICAgICAgICB2YXIgYm9keSA9IFwiXCI7XG4gICAgICAgICAgdmFyIGNvbmZpZyA9IHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICBsb2cuaW5mbyhcInBvc3RpbmcgdG8gamVua2luc1VybDogXCIgKyB1cmwpO1xuICAgICAgICAgICRodHRwLnBvc3QodXJsLCBib2R5LCBjb25maWcpLlxuICAgICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgICAgbG9nLmluZm8oXCJNYW5hZ2VkIHRvIGRlbGV0ZSBcIiArIHVybCk7XG4gICAgICAgICAgICB9KS5cbiAgICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBkZWxldGUgamVua2lucyBqb2IgYXQgXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4vKlxuICAgICAgJHNjb3BlLiRrZWVwUG9sbGluZyA9ICgpID0+IEt1YmVybmV0ZXMua2VlcFBvbGxpbmdNb2RlbDtcbiAgICAgICRzY29wZS5mZXRjaCA9IFBvbGxIZWxwZXJzLnNldHVwUG9sbGluZygkc2NvcGUsIChuZXh0OigpID0+IHZvaWQpID0+IHtcbiAgICAgICAgdmFyIHVybCA9IEt1YmVybmV0ZXMuYnVpbGRDb25maWdzUmVzdFVSTCgpO1xuICAgICAgICAkaHR0cC5nZXQodXJsKS5cbiAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcImdvdCBkYXRhIFwiICsgYW5ndWxhci50b0pzb24oZGF0YSwgdHJ1ZSkpO1xuICAgICAgICAgICAgICB2YXIgc29ydGVkQnVpbGRzID0gbnVsbDtcbiAgICAgICAgICAgICAgJHNjb3BlLmJ1aWxkQ29uZmlncyA9IEt1YmVybmV0ZXMuZW5yaWNoQnVpbGRDb25maWdzKGRhdGEuaXRlbXMsIHNvcnRlZEJ1aWxkcyk7XG4gICAgICAgICAgICAgICRzY29wZS5tb2RlbC5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLlxuICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICAkc2NvcGUuZmV0Y2goKTtcbiovXG4gICAgfV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyRW5yaWNoZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckhlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyTmF2aWdhdGlvbi50c1wiLz5cblxubW9kdWxlIERldmVsb3BlciB7XG5cbiAgZXhwb3J0IHZhciBXb3Jrc3BhY2VDb250cm9sbGVyID0gY29udHJvbGxlcihcIldvcmtzcGFjZUNvbnRyb2xsZXJcIixcbiAgICBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCJLdWJlcm5ldGVzU2NoZW1hXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLFxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLFxuICAgICAgICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XG5cbiAgICAgICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XG4gICAgICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcbiAgICAgICAgJHNjb3BlLmlkID0gJHJvdXRlUGFyYW1zW1wibmFtZXNwYWNlXCJdO1xuICAgICAgICAkc2NvcGUuc2NoZW1hID0gS3ViZXJuZXRlc1NjaGVtYTtcbiAgICAgICAgJHNjb3BlLmNvbmZpZyA9IEt1YmVybmV0ZXNTY2hlbWEuZGVmaW5pdGlvbnMua3ViZXJuZXRlc19OYW1lc3BhY2U7XG5cbiAgICAgICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xuICAgICAgICAkc2NvcGUuYnJlYWRjcnVtYkNvbmZpZyA9IGNyZWF0ZVdvcmtzcGFjZUJyZWFkY3J1bWJzKCk7XG4gICAgICAgICRzY29wZS5zdWJUYWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlV29ya3NwYWNlU3ViTmF2QmFycygpO1xuXG4gICAgICAgICRzY29wZS4ka2VlcFBvbGxpbmcgPSAoKSA9PiBLdWJlcm5ldGVzLmtlZXBQb2xsaW5nTW9kZWw7XG4gICAgICAgICRzY29wZS5mZXRjaCA9IFBvbGxIZWxwZXJzLnNldHVwUG9sbGluZygkc2NvcGUsIChuZXh0OigpID0+IHZvaWQpID0+IHtcbiAgICAgICAgICAkc2NvcGUuaXRlbSA9IG51bGw7XG4gICAgICAgICAgaWYgKCRzY29wZS5pZCkge1xuICAgICAgICAgICAgdmFyIHVybCA9IFVybEhlbHBlcnMuam9pbihLdWJlcm5ldGVzLnJlc291cmNlc1VyaUZvcktpbmQoXCJQcm9qZWN0c1wiKSwgJHNjb3BlLmlkKTtcbiAgICAgICAgICAgIGxvZy5pbmZvKFwiTG9hZGluZyB1cmw6IFwiICsgdXJsKTtcbiAgICAgICAgICAgICRodHRwLmdldCh1cmwpLlxuICAgICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAkc2NvcGUuZW50aXR5ID0gZW5yaWNoV29ya3NwYWNlKGRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAkc2NvcGUubW9kZWwuZmV0Y2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcbiAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgIH0pLlxuICAgICAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xuICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRzY29wZS5tb2RlbC5mZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XG4gICAgICAgICAgICBuZXh0KCk7XG5cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgICRzY29wZS5mZXRjaCgpO1xuICAgICAgfV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyRW5yaWNoZXJzLnRzXCIvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckhlbHBlcnMudHNcIi8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyTmF2aWdhdGlvbi50c1wiLz5cblxubW9kdWxlIERldmVsb3BlciB7XG5cbiAgZXhwb3J0IHZhciBXb3Jrc3BhY2VzQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJXb3Jrc3BhY2VzQ29udHJvbGxlclwiLFxuICAgIFtcIiRzY29wZVwiLCAgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsIFwiRGF0YUluZm9Nb2RlbFwiLCBcIiRpbnRlcnZhbFwiLFxuICAgICAgKCRzY29wZSwgIEt1YmVybmV0ZXNNb2RlbDpLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSwgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwsIERhdGFJbmZvTW9kZWwsJGludGVydmFsKSA9PiB7XG4gICAgICAgICRzY29wZS5tb2RlbCA9IERhdGFJbmZvTW9kZWw7XG4gICAgICAgICRzY29wZS5pdGVtcz1bXTtcblxuICAgICAgICAkc2NvcGUubG9jYWxpdGVtcz1bXTtcbiAgICAgICAgdmFyIHJvb3RQYXRoPVwiXCI7XG4gICAgICAgIHZhciBGaWx0ZXJMaXN0ID17XG4gICAgICAgICAgICBsZW5ndGg6MFxuICAgICAgICB9O1xuXG4gICAgICAgIHVwZGF0ZSgpO1xuXG4gICAgICAgICRzY29wZS50cmVlT3B0aW9ucyA9IHtcbiAgICAgICAgICBub2RlQ2hpbGRyZW46IFwiY2hpbGRyZW5cIixcbiAgICAgICAgICBkaXJTZWxlY3RhYmxlOiB0cnVlLFxuICAgICAgICAgIG11bHRpU2VsZWN0aW9uOiBmYWxzZSxcbiAgICAgICAgICBpbmplY3RDbGFzc2VzOiB7XG4gICAgICAgICAgICB1bDogXCJhMVwiLFxuICAgICAgICAgICAgbGk6IFwiYTJcIixcbiAgICAgICAgICAgIGxpU2VsZWN0ZWQ6IFwiYTdcIixcbiAgICAgICAgICAgIGlFeHBhbmRlZDogXCJhM1wiLFxuICAgICAgICAgICAgaUNvbGxhcHNlZDogXCJhNFwiLFxuICAgICAgICAgICAgaUxlYWY6IFwiYTVcIixcbiAgICAgICAgICAgIGxhYmVsOiBcImE2XCIsXG4gICAgICAgICAgICBsYWJlbFNlbGVjdGVkOiBcImE4XCJcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgJHNjb3BlLnRyZWVPcHRpb25zcyA9IHtcbiAgICAgICAgICBub2RlQ2hpbGRyZW46IFwiY2hpbGRyZW5cIixcbiAgICAgICAgICBkaXJTZWxlY3RhYmxlOiB0cnVlLFxuICAgICAgICAgIG11bHRpU2VsZWN0aW9uOiB0cnVlLFxuICAgICAgICAgIGluamVjdENsYXNzZXM6IHtcbiAgICAgICAgICAgIHVsOiBcImExXCIsXG4gICAgICAgICAgICBsaTogXCJhMlwiLFxuICAgICAgICAgICAgbGlTZWxlY3RlZDogXCJhN1wiLFxuICAgICAgICAgICAgaUV4cGFuZGVkOiBcImEzXCIsXG4gICAgICAgICAgICBpQ29sbGFwc2VkOiBcImE0XCIsXG4gICAgICAgICAgICBpTGVhZjogXCJhNVwiLFxuICAgICAgICAgICAgbGFiZWw6IFwiYTZcIixcbiAgICAgICAgICAgIGxhYmVsU2VsZWN0ZWQ6IFwiYThcIlxuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAkc2NvcGUuc2hvd1NlbGVjdGVkID0gKG5vZGUsc2VsZWN0ZWQpPT57XG5cbiAgICAgICAgICAgJHNjb3BlLm1vZGVsLnNlcnZlcml0ZW1zID0gW107XG4gICAgICAgICAgIHZhciBhcnJheSA9IG5ldyBBcnJheSgpO1xuICAgICAgICAgICBpZihzZWxlY3RlZCl7XG4gICAgICAgICAgICAgIGlmKG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICAgICAgIGFycmF5LnVuc2hpZnQobm9kZSk7XG4gICAgICAgICAgICAgICAgIHdoaWxlKGFycmF5Lmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGROb2RlPWFycmF5LnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBpZihjaGlsZE5vZGUuY2hpbGRyZW4ubGVuZ3RoPjApe1xuICAgICAgICAgICAgICAgICAgICAgICBmb3IodmFyIGk9MDtpPGNoaWxkTm9kZS5jaGlsZHJlbi5sZW5ndGg7aSsrKVxuICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5LnVuc2hpZnQoY2hpbGROb2RlLmNoaWxkcmVuW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgICAgIGlmKGNoaWxkTm9kZS5oYXNPd25Qcm9wZXJ0eShcInBhdGhcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5tb2RlbC5zZXJ2ZXJpdGVtcy5wdXNoKGNoaWxkTm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgaWYobm9kZS5oYXNPd25Qcm9wZXJ0eShcInBhdGhcIikpXG4gICAgICAgICAgICAgICAgICAgICRzY29wZS5tb2RlbC5zZXJ2ZXJpdGVtcy5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAkc2NvcGUuZGF0YUZvclRoZVRyZWUgPSAkc2NvcGUubW9kZWwuc2VydmVyZGF0YTtcbiAgICAgICAgJHNjb3BlLmRhdGFGb3JUaGVUcmVlTG9jYWwgPSAkc2NvcGUubW9kZWwubG9jYWxkYXRhO1xuXG4gICAgICAgICRzY29wZS4kd2F0Y2goJ21vZGVsLnNlcnZlcmRhdGEnLCBmdW5jdGlvbihuZXdWYWx1ZSxvbGRWYWx1ZSl7XG4gICAgICAgICAgIGlmKG5ld1ZhbHVlKXtcbiAgICAgICAgICAgICAgJHNjb3BlLmRhdGFGb3JUaGVUcmVlID0gJHNjb3BlLm1vZGVsLnNlcnZlcmRhdGE7XG4gICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgJHNjb3BlLiR3YXRjaCgnbW9kZWwubG9jYWxkYXRhJywgZnVuY3Rpb24obmV3VmFsdWUsb2xkVmFsdWUpe1xuICAgICAgICAgICBpZihuZXdWYWx1ZSl7XG4gICAgICAgICAgICAgICRzY29wZS5kYXRhRm9yVGhlVHJlZUxvY2FsID0gJHNjb3BlLm1vZGVsLmxvY2FsZGF0YTtcbiAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAkc2NvcGUudXBMb2FkWE1MRmlsZSA9IChmaWxlcykgPT4ge1xuICAgICAgICAgICBGaWx0ZXJMaXN0Lmxlbmd0aD0wO1xuICAgICAgICAgICBpZihmaWxlcy5sZW5ndGg+MCl7XG4gICAgICAgICAgICAgdmFyIGo9MDtcbiAgICAgICAgICAgICBmb3IodmFyIGk9MDtpPGZpbGVzLmxlbmd0aDtpKyspe1xuICAgICAgICAgICAgICAgaWYoZmlsZXNbaV0ubmFtZS5pbmRleE9mKFwiZGF0YS54bWxcIikhPS0xKXtcbiAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coZmlsZXNbaV0pO1xuICAgICAgICAgICAgICAgICAgcm9vdFBhdGg9ZmlsZXNbaV0ud2Via2l0UmVsYXRpdmVQYXRoLnJlcGxhY2UoL1xcL2RhdGEueG1sJC8sXCJcIik7XG4gICAgICAgICAgICAgICAgICB2YXIgcmVhZGVyPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdFN0cmluZyA9IFwie1xcXCJuYW1lXFxcIjogXFxcIuaVsOaNrlxcXCIsIFxcXCJjaGlsZHJlblxcXCI6W1wiO1xuICAgICAgICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgICAgICB2YXIgc3RyID0gZXZlbnQudGFyZ2V0LnJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgIC8vICAgICBhbGVydChzdHIpO1xuICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSBcIjxEYXRhPlwiO1xuICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW1FbmQgPSBcIjwvRGF0YT5cIjtcbiAgICAgICAgICAgICAgICAgICAgIC8vIMK0w73Ct8K1wrvDmMK1w4TCvcOhwrnDu8KjwrpcbiAgICAgICAgICAgICAgICAgICAgIGlmKHN0ciAhPSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gw5XDu8K4w7Z4bWwgw43DqsOVw7vDisO9wr7DncKjwrp4bWxkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgeG1sZGF0YSA9IHN0ci50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gwrDCtMK2w5TDj8OzwrfDlsK1w4TDisO9wr7DncKjwrpcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtQXJyYXkgPSB4bWxkYXRhLnNwbGl0KGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW1zaXplID0gaXRlbUFycmF5Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcih2YXIgayA9IDE7IGsgPCBpdGVtc2l6ZTsgaysrKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbXZhbHVlID0gaXRlbUFycmF5W2tdLnNwbGl0KGl0ZW1FbmQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByb3ZpbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb3ZpbmNlVmFsdWVUZW1wID0gaXRlbXZhbHVlWzBdLnNwbGl0KFwiPHByb3ZpbmNlPlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvdmluY2VWYWx1ZSA9IHByb3ZpbmNlVmFsdWVUZW1wW3Byb3ZpbmNlVmFsdWVUZW1wLmxlbmd0aC0xXS5zcGxpdChcIjwvcHJvdmluY2U+XCIpWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2NpdHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2l0eVZhbHVlVGVtcCA9IGl0ZW12YWx1ZVswXS5zcGxpdChcIjxjaXR5PlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2l0eVZhbHVlID0gY2l0eVZhbHVlVGVtcFtjaXR5VmFsdWVUZW1wLmxlbmd0aC0xXS5zcGxpdChcIjwvY2l0eT5cIilbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvdW50eVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb3VudHlWYWx1ZVRlbXAgPSBpdGVtdmFsdWVbMF0uc3BsaXQoXCI8Y291bnR5PlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY291bnR5VmFsdWUgPSBjb3VudHlWYWx1ZVRlbXBbY291bnR5VmFsdWVUZW1wLmxlbmd0aC0xXS5zcGxpdChcIjwvY291bnR5PlwiKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPGNvZGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGVWYWx1ZVRlbXAgPSBpdGVtdmFsdWVbMF0uc3BsaXQoXCI8Y29kZT5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGVWYWx1ZSA9IGNvZGVWYWx1ZVRlbXBbY29kZVZhbHVlVGVtcC5sZW5ndGgtMV0uc3BsaXQoXCI8L2NvZGU+XCIpWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPHN5c19uYW1lPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzeXNfbmFtZVZhbHVlVGVtcCA9IGl0ZW12YWx1ZVswXS5zcGxpdChcIjxzeXNfbmFtZT5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN5c19uYW1lVmFsdWUgPSBzeXNfbmFtZVZhbHVlVGVtcFtzeXNfbmFtZVZhbHVlVGVtcC5sZW5ndGgtMV0uc3BsaXQoXCI8L3N5c19uYW1lPlwiKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPGNoYXJhY3Rlcl9zZXQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXJhY3Rlcl9zZXRWYWx1ZVRlbXAgPSBpdGVtdmFsdWVbMF0uc3BsaXQoXCI8Y2hhcmFjdGVyX3NldD5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXJhY3Rlcl9zZXRWYWx1ZSA9IGNoYXJhY3Rlcl9zZXRWYWx1ZVRlbXBbY2hhcmFjdGVyX3NldFZhbHVlVGVtcC5sZW5ndGgtMV0uc3BsaXQoXCI8L2NoYXJhY3Rlcl9zZXQ+XCIpWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPHN5c19uYW1lX2NvZGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN5c19uYW1lX2NvZGVWYWx1ZVRlbXAgPSBpdGVtdmFsdWVbMF0uc3BsaXQoXCI8c3lzX25hbWVfY29kZT5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN5c19uYW1lX2NvZGVWYWx1ZSA9IHN5c19uYW1lX2NvZGVWYWx1ZVRlbXBbc3lzX25hbWVfY29kZVZhbHVlVGVtcC5sZW5ndGgtMV0uc3BsaXQoXCI8L3N5c19uYW1lX2NvZGU+XCIpWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDxjb250YWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250YWN0VmFsdWVUZW1wID0gaXRlbXZhbHVlWzBdLnNwbGl0KFwiPGNvbnRhY3Q+XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250YWN0VmFsdWUgPSBjb250YWN0VmFsdWVUZW1wW2NvbnRhY3RWYWx1ZVRlbXAubGVuZ3RoLTFdLnNwbGl0KFwiPC9jb250YWN0PlwiKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDxwaG9uZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGhvbmVWYWx1ZVRlbXAgPSBpdGVtdmFsdWVbMF0uc3BsaXQoXCI8cGhvbmU+XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwaG9uZVZhbHVlID0gcGhvbmVWYWx1ZVRlbXBbcGhvbmVWYWx1ZVRlbXAubGVuZ3RoLTFdLnNwbGl0KFwiPC9waG9uZT5cIilbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA8ZGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0ZVZhbHVlVGVtcCA9IGl0ZW12YWx1ZVswXS5zcGxpdChcIjxkYXRlPlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0ZVZhbHVlID0gZGF0ZVZhbHVlVGVtcFtkYXRlVmFsdWVUZW1wLmxlbmd0aC0xXS5zcGxpdChcIjwvZGF0ZT5cIilbMF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2lkIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbUlkID0gY29kZVZhbHVlICsgXCJfXCIgKyBzeXNfbmFtZV9jb2RlVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cCBnZXQgdmVyc2lvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByaWQgPSBpdGVtSWQvLy5yZXBsYWNlKC9cXFwiL2csIFwiXCIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyB0eXBlVmFsdWUg6YCa6L+H5YmN56uv6aG16Z2i6I635Y+W5oiW6ICF77yf77yf77yM6LSi5pS/MDHmiJbnpL7kv50wMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0eXBlVmFsdWUgPSBcIjAxXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyBiYXRjaFZhbHVlIOmAmui/h+WJjeerr+mhtemdouiOt+WPluaIluiAhe+8n++8n++8jOaJueasoUEg77ya5aSn5YaZ55qEQe+8jOaJueasoUIg77ya5aSn5YaZ55qEQu+8jFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiYXRjaFZhbHVlID0gXCJBXCI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbW5hbWUgPSBjaXR5VmFsdWUgKyBjb3VudHlWYWx1ZSArIHN5c19uYW1lVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZlcnNpb25pZCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih4aHIucmVhZHlTdGF0ZT09NCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih4aHIuc3RhdHVzPT0yMDApe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbmlkID0geGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIub3BlbihcImdldFwiLFwiL2dldHZlcnNpb24/aWQ9XCIrcmlkLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLnNlbmQobnVsbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIganNvYmogPSBKU09OLnBhcnNlKHZlcnNpb25pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhtbHZlcnNpb24gPSBqc29iai5pZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9wZXJWYWx1ZSA9IFwie1xcXCJpZFxcXCI6XFxcIlwiK2l0ZW1JZCtcIlxcXCIsIFxcXCJuYW1lXFxcIjpcXFwiXCIraXRlbW5hbWUrXCJcXFwiLCBcXFwiY2l0eVxcXCI6XFxcIlwiK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXR5VmFsdWUgKyBcIlxcXCIsIFxcXCJjb3VudHlcXFwiOlxcXCJcIitjb3VudHlWYWx1ZStcIlxcXCIsIFxcXCJzeXN0ZW1cXFwiOlxcXCJcIitcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzX25hbWVWYWx1ZStcIlxcXCIsIFxcXCJ0eXBlXFxcIjpcXFwiXCIgKyB0eXBlVmFsdWUgKyBcIlxcXCIsXFxcImJhdGNoXFxcIjpcXFwiXCIrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhdGNoVmFsdWUrXCJcXFwiLFxcXCJ2ZXJzaW9uXFxcIjpcXFwiXCIreG1sdmVyc2lvbitcIlxcXCIsIFxcXCJwcm92aW5jZVxcXCI6XFxcIlwiK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm92aW5jZVZhbHVlICtcIlxcXCIsIFxcXCJjb2RlXFxcIjpcXFwiXCIrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVWYWx1ZSArXCJcXFwiLCBcXFwiY2hhcmFjdGVyX3NldFxcXCI6XFxcIlwiK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJfc2V0VmFsdWUgK1wiXFxcIiwgXFxcInN5c19uYW1lX2NvZGVcXFwiOlxcXCJcIitcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzX25hbWVfY29kZVZhbHVlICtcIlxcXCIsIFxcXCJjb250YWN0XFxcIjpcXFwiXCIrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhY3RWYWx1ZSArXCJcXFwiLCBcXFwicGhvbmVcXFwiOlxcXCJcIitcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGhvbmVWYWx1ZSArXCJcXFwiLCBcXFwiZGF0ZVxcXCI6XFxcIlwiK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlVmFsdWUgK1wiXFxcIn1cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRTdHJpbmcgPSByZXN1bHRTdHJpbmcgKyBwcm9wZXJWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihrIDwgaXRlbXNpemUtMSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFN0cmluZyA9cmVzdWx0U3RyaW5nK1wiLCBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFN0cmluZyA9IHJlc3VsdFN0cmluZytcIl19XCI7XG4gICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAkc2NvcGUuJGFwcGx5KGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5tb2RlbC5sb2NhbGRhdGEgPSBKU09OLnBhcnNlKHJlc3VsdFN0cmluZy50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZWFkZXIucmVhZEFzVGV4dChmaWxlc1tpXSxcInV0Zi04XCIpO1xuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgICAgICAgICBGaWx0ZXJMaXN0Lmxlbmd0aCs9MTtcbiAgICAgICAgICAgICAgICAgICB2YXIgZmlsZV9pZD1maWxlc1tpXS5uYW1lLnJlcGxhY2UoL1xcLlxcdyokLywnJyk7XG4gICAgICAgICAgICAgICAgICAgLy8gdmFyIGZpbGVfaWQ9ZmlsZVtpXS53ZWJraXRSZWxhdGl2ZVBhdGgucmVwbGFjZSgvXlthLXpdKlxcLyQvLCcnKTtcbiAgICAgICAgICAgICAgICAgICAvL1x0ICBmaWxlX2lkID0gZmlsZV9pZC5yZXBsYWNlKC9cXC9cXHcrJC8sJycpO1xuICAgICAgICAgICAgICAgICAgRmlsdGVyTGlzdFtqKytdPWZpbGVzW2ldO1xuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH1cbiAgICAgICAgICAgfVxuICAgICAgICAgICAkc2NvcGUubW9kZWwudXBsb2FkcHJvY2VzcyA9IHt9O1xuICAgICAgICB9XG5cdFxuICAgICAgJHNjb3BlLnVwTG9hZEZpbGVzID0gKCk9PntcbiAgICAgICAgIGlmKCRzY29wZS5tb2RlbC51cGxvYWRlZFN0YXR1cyA9PSBcIm9uY2VcIil7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICB9XG4gICAgICAgICAkc2NvcGUubW9kZWwudXBsb2FkZWRTdGF0dXMgPSBcIm9uY2VcIjtcbiAgICAgICAgICRzY29wZS5tb2RlbC5jcmVhdGVGb2xkZXJMaXN0KEZpbHRlckxpc3Qscm9vdFBhdGgpO1xuICAgICAgICAgaWYoJHNjb3BlLm1vZGVsLmZvbGRlckxpc3QubGVuZ3RoID4wICYmICRzY29wZS5tb2RlbC5zZWxlY3RlZG5vZGVzLmxlbmd0aCA+MCl7XG4gICAgICAgICAgICB2YXIgaXNOb3RFeGl0ZWQgPSBbXTtcbiAgICAgICAgICAgIHZhciBpc0V4aXRlZCA9IFtdO1xuICAgICAgICAgICAgZm9yKHZhciBub2RlIGluICRzY29wZS5tb2RlbC5zZWxlY3RlZG5vZGVzKXtcbiAgICAgICAgICAgICAgIGlmKCEkc2NvcGUubW9kZWwuZm9sZGVyTGlzdC5oYXNPd25Qcm9wZXJ0eSgkc2NvcGUubW9kZWwuc2VsZWN0ZWRub2Rlc1tub2RlXS5pZCkpe1xuICAgICAgICAgICAgICAgICAgaXNOb3RFeGl0ZWQucHVzaCgkc2NvcGUubW9kZWwuc2VsZWN0ZWRub2Rlc1tub2RlXSk7XG4gICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgIGlmKCRzY29wZS5tb2RlbC51cGxvYWRwcm9jZXNzWyRzY29wZS5tb2RlbC5zZWxlY3RlZG5vZGVzW25vZGVdLmlkXSA9PT0gJ3VuZGVmaW5lZCcgfHwgJHNjb3BlLm1vZGVsLnVwbG9hZHByb2Nlc3NbJHNjb3BlLm1vZGVsLnNlbGVjdGVkbm9kZXNbbm9kZV0uaWRdID09PSAwKVxuICAgICAgICAgICAgICAgICAgICAgaXNFeGl0ZWQucHVzaCgkc2NvcGUubW9kZWwuc2VsZWN0ZWRub2Rlc1tub2RlXSk7XG4gICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihpc05vdEV4aXRlZC5sZW5ndGggPjAgKXtcbiAgICAgICAgICAgICAgIHZhciBzdHIgPSBcIuS7peS4i+aVsOaNruaWh+S7tuS4jeWtmOWcqDpcXG5cXHLmlofku7blkI06XFxuXCI7XG4gICAgICAgICAgICAgICBmb3IodmFyIGl0ZW0gaW4gaXNOb3RFeGl0ZWQpXG4gICAgICAgICAgICAgICAgICBzdHIgKz0gaXNOb3RFeGl0ZWRbaXRlbV0uaWQrXCJcXG5cIjtcbiAgICAgICAgICAgICAgIGFsZXJ0KHN0cik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmKGlzRXhpdGVkLmxlbmd0aCA8PTApe1xuICAgICAgICAgICAgICAgYWxlcnQoXCLmlbDmja7mlofku7bkuK3msqHmnInlj6/nlKjkuIrkvKDnmoTmlofku7YhXCIpO1xuICAgICAgICAgICAgfWVsc2V7XG5cdFx0XHQgICB2YXIgaXN1cGxvYWFkID0gMSxpID0gMDtcblx0XHRcdCBcblx0XHRcdCAgIHZhciB0aW1lckZvclVwbG9hZCA9ICRpbnRlcnZhbChmdW5jdGlvbigpe1xuXHRcdFx0XHQgIGlmKGkgPj0gaXNFeGl0ZWQubGVuZ3RoKXtcbi8vXHRcdFx0XHRcdCBjbGVhckludGVydmFsKHRpbWVyRm9yVXBsb2FkKTtcblx0XHRcdFx0XHQgJGludGVydmFsLmNhbmNlbCh0aW1lckZvclVwbG9hZCk7XG5cdFx0XHRcdCAgfVxuXHRcdFx0XHQgIGlmKGlzdXBsb2FhZCA9PSAxKXtcblx0XHRcdFx0XHQgdmFyIHIgPSBuZXcgUmVzdW1hYmxlKHtcblx0XHRcdFx0XHRcdHRhcmdldDonL3VwbG9hZGZpbGVzJyxcblx0XHRcdFx0XHRcdGNodW5rU2l6ZTo1MCoxMDI0KjEwMjQsXG5cdFx0XHRcdFx0XHRzaW11bHRhbmVvdXNVcGxvYWRzOjQwMCxcblx0XHRcdFx0XHRcdHRlc3RDaHVua3M6dHJ1ZSxcblx0XHRcdFx0XHRcdHRocm90dGxlUHJvZ3Jlc3NDYWxsYmFja3M6MVxuXHRcdFx0XHRcdH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgeGhyLm9wZW4oXCJHRVRcIixcIi9nZXRjbGllbnRpcFwiLHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgICAgICAgaWYoeGhyLnJlYWR5U3RhdGU9PTQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoeGhyLnN0YXR1cz09MjAwKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgci5zZXRpcCh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgeGhyLnNlbmQobnVsbCk7XG5cblx0XHRcdFx0XHRyLm9uKCdmaWxlQWRkZWQnLCBmdW5jdGlvbihmaWxlKXtcblx0XHRcdFx0XHRcdHIudXBsb2FkKCk7XG5cdFx0XHRcdFx0XHR1cGRhdGUoKTtcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdCRzY29wZS5tb2RlbC5yZXN1bWFibGVqcy5wdXNoKHtcblx0XHRcdFx0XHQgICBkaXJuYW1lIDogaXNFeGl0ZWRbaV0uaWQsXG5cdFx0XHRcdFx0ICAgcmVzdW1hYmxlIDogclxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHIuc2V0Um9vdFBhdGgoaXNFeGl0ZWRbaV0udHlwZStcIi9cIitpc0V4aXRlZFtpXS5iYXRjaCtcIi9cIitpc0V4aXRlZFtpXS5pZCtcIi9cIitpc0V4aXRlZFtpXS52ZXJzaW9uK1wiL1wiKTtcblx0XHRcdFx0XHRyLm15TG9hZEZpbGVzKCRzY29wZS5tb2RlbC5mb2xkZXJMaXN0W2lzRXhpdGVkW2ldLmlkXSk7XG5cdFx0XHRcdFx0ci51cGxvYWQoKTtcblx0XHRcdFx0XHRyLm9uKCdmaWxlUHJvZ3Jlc3MnLGZ1bmN0aW9uKGZpbGUpe1xuXHRcdFx0XHRcdFx0dmFyIGZpbGVfaWQ9ZmlsZS5yZWxhdGl2ZVBhdGgucmVwbGFjZSgvXlthLXpdKlxcLyQvLCcnKTtcblx0XHRcdFx0XHRcdHZhciBmaWxlc3RyID0gXCJcIjtcblx0XHRcdFx0XHRcdHZhciByZWcgPSAvXFwvWzAtOV0qXypbMC05XSpcXC8vZztcblx0XHRcdFx0XHRcdHZhciByZXN1bHRzdHI7XG5cdFx0XHRcdFx0XHR3aGlsZSggKHJlc3VsdHN0ciA9IHJlZy5leGVjKGZpbGVfaWQpKSAhPSBudWxsKXtcblx0XHRcdFx0XHRcdFx0ZmlsZXN0ciA9IHJlc3VsdHN0clswXTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGZpbGVfaWQgPSBmaWxlc3RyLnJlcGxhY2UoL1xcLyovZywnJyk7XG5cdFx0XHRcdFx0XHRyLnNldEZpbGVJZChmaWxlX2lkKTtcbi8vXHRcdFx0XHRcdFx0JHNjb3BlLiRhcHBseShmdW5jdGlvbigpe1xuXHRcdFx0XHRcdFx0XHQkc2NvcGUubW9kZWwudXBsb2FkcHJvY2Vzc1tmaWxlX2lkXSA9IE1hdGguZmxvb3Ioci5wcm9ncmVzcygpKjk4KTtcbi8vXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFxuXHRcdFx0XHRcdHIub24oJ2NvbXBsZXRlJywgZnVuY3Rpb24oKXtcblx0XHRcdFx0XHRcdHZhciB0aW1lckZvcmNobW9kID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtcblx0XHRcdFx0XHRcdFx0dmFyIHBhdGhqc29uID0gXCJcXFwicGF0aFxcXCI6XFxcIlwiK3IuZ2V0cm9vdFBhdGgoKStcIlxcXCJcIlxuXHRcdFx0XHRcdFx0XHR2YXIgZGF0YW1lc3NhZ2UgPSB7XCJwYXRoXCI6ci5nZXRyb290UGF0aCgpLFwiZmlsZW51bVwiOiRzY29wZS5tb2RlbC5mb2xkZXJMaXN0W2lzRXhpdGVkW2ktMV0uaWRdLmxlbmd0aH07XG5cdFx0XHRcdFx0XHRcdCRzY29wZS5tb2RlbC51cGxvYWRwcm9jZXNzW3IuZ2V0RmlsZUlkKCldID0gTWF0aC5yb3VuZChyLnByb2dyZXNzKCkqOTkpO1xuXG5cdFx0XHRcdFx0XHRcdCRodHRwKHtcblx0XHRcdFx0XHRcdFx0ICB1cmw6Jy9zZXRjaG1vZDJkaXInLFxuXHRcdFx0XHRcdFx0XHQgIG1ldGhvZDonR0VUJyxcblx0XHRcdFx0XHRcdFx0ICBwYXJhbXM6ZGF0YW1lc3NhZ2Vcblx0XHRcdFx0XHRcdFx0fSkuc3VjY2VzcyhmdW5jdGlvbihkYXRhLGhlYWRlcixjb25maWcsc3RhdHVzKXtcblx0XHRcdFx0XHRcdFx0ICBpZihkYXRhKXtcblx0XHRcdFx0XHRcdFx0XHRcdC8vY29uc29sZS5sb2coZGF0YSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgY2xpZW50ZGF0YSA9IGRhdGE7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihjbGllbnRkYXRhID09IFwiY2htb2RcIil7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZERhdGVNZXNzYWdlKGlzRXhpdGVkW2ktMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuc2V0aXNub3djaGVjayhcIjFcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci5ta1JldGZpbGVVcGxvYWRTdWNjZWVkKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lckZvcmNobW9kKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdCAgfVxuXG5cdFx0XHRcdFx0XHRcdH0pLmVycm9yKGZ1bmN0aW9uKGRhdGEsaGVhZGVyLGNvbmZpZyxzdGF0dXMpe1xuXHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKFwiLS0tLS1zZW5kRGF0ZU1lc3NhZ2UtLS0tLS0tLS0tLS0tXCIrc3RhdHVzKTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdH0sNTAwMCk7XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRpKys7XG5cdFx0XHRcdFx0aXN1cGxvYWFkID0gMDtcblxuICAgICAgICAgICAgICAgICAgICByLm9uKCdmaWxldXBsb2FkZW5kc3VjY2VlZCcsIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5tb2RlbC51cGxvYWRwcm9jZXNzW3IuZ2V0RmlsZUlkKCldID0gTWF0aC5mbG9vcihyLnByb2dyZXNzKCkqMTAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgJHRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAkaHR0cCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDonL3htbGZvcm1zZXJ2ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6J1Bvc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pLnN1Y2Nlc3MoZnVuY3Rpb24oZGF0YSxoZWFkZXIsY29uZmlnLHN0YXR1cyl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGF0YSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLm1vZGVsLnNlcnZlcmRhdGEgPSBkYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuZXJyb3IoZnVuY3Rpb24oZGF0YSxoZWFkZXIsY29uZmlnLHN0YXR1cyl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImVycm9yXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgfSwyMDAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgaXN1cGxvYWFkID0gMTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cdFx0XHRcdFx0XG4gICAgICAgICAgICAgICAgICB9XG5cdFx0XHQgICB9LDIwMDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBhbGVydChcIuaCqOayoeaciemAieaLqemcgOimgeS4iuS8oOeahOaVsOaNruaWh+S7tu+8jOaIluS9oOmAieaLqeeahOaWh+S7tuS4reS4jeWtmOWcqOaMh+WumuagvOW8j+eahOaVsOaNruaWh+S7tiFcIik7XG4gICAgICAgICB9XG5cbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gc2VuZERhdGVNZXNzYWdlKGRhdGFtZXNzYWdlKXtcbiAgICAgICAgICAkaHR0cCh7XG4gICAgICAgICAgICAgdXJsOicvc2VuZERhdGVNZXNzYWdlJyxcbiAgICAgICAgICAgICBtZXRob2Q6J0dFVCcsXG4gICAgICBcdCAgICAgcGFyYW1zOmRhdGFtZXNzYWdlXG4gICAgICAgICAgfSkuc3VjY2VzcyhmdW5jdGlvbihkYXRhLGhlYWRlcixjb25maWcsc3RhdHVzKXtcbiAgICAgICAgICAgICBpZihkYXRhKVxuICAgICAgICAgICAgIHZhciBjbGllbnRkYXRhID0gZGF0YTtcbiAgICAgICAgICB9KS5lcnJvcihmdW5jdGlvbihkYXRhLGhlYWRlcixjb25maWcsc3RhdHVzKXtcblxuICAgICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAkc2NvcGUuZG93bkxvYWRGaWxlcyA9ICgpPT57XG4gICAgICAgICAgS3ViZXJuZXRlcy5jb25uZWN0T3JhY2xlKCRodHRwLCAkdGltZW91dCwgXCIxOTIuMTY4LjAuMTAzOjY0MTgyXCIsIFwiMzIwNjE0LTU0LTFcIiwgNTAwKTtcbiAgICAgIH1cblxuICAgICAgJHNjb3BlLmlzU2VsZWN0ZWQ9IChub2RlKT0+e1xuICAgICAgICAgdmFyIGluZGV4ID0gJHNjb3BlLm1vZGVsLmZpbmRJdGVtSW5kZXgobm9kZSk7XG4gICAgICAgICBpZihpbmRleCAhPT0gLTEpe1xuICAgICAgICAgICAgJHNjb3BlLm1vZGVsLnNlbGVjdGVkaXRlbXMuc3BsaWNlKGluZGV4LDEpO1xuICAgICAgICAgfVxuICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgICRzY29wZS5tb2RlbC5zZWxlY3RlZGl0ZW1zLnB1c2gobm9kZSk7XG4gICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICRzY29wZS5zaG93U2VsZWN0ZWRMb2NhbCA9IChub2RlLHNlbGVjdGVkKSA9PiB7XG4gICAgICAgICB2YXIgaW5kZXggPSAkc2NvcGUubW9kZWwuZmluZE5vZGVzKG5vZGUpO1xuICAgICAgICAgaWYoaW5kZXggIT09IFwiLTFcIil7XG4gICAgICAgICAgICBpZigkc2NvcGUubW9kZWwudXBsb2FkcHJvY2Vzc1tub2RlLmlkXSA9PT0wKVxuICAgICAgICAgICAgICAgJHNjb3BlLm1vZGVsLnNlbGVjdGVkbm9kZXMuc3BsaWNlKGluZGV4LDEpO1xuICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAkc2NvcGUubW9kZWwudXBsb2FkcHJvY2Vzc1tub2RlLmlkXSA9MDtcbiAgICAgICAgICAgICRzY29wZS5tb2RlbC5zZWxlY3RlZG5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICRzY29wZS5zdGFydE9yYWNsZSA9ICgpPT4ge1xuICAgICAgICAgaWYoJHNjb3BlLm1vZGVsLnNlbGVjdGVkaXRlbXMubGVuZ3RoID4wKXtcbiAgICAgICAgICAgIGZvcih2YXIgaWQgaW4gJHNjb3BlLm1vZGVsLnNlbGVjdGVkaXRlbXMpe1xuICAgICAgICAgICAgICAgdmFyIE9iaiA9IGNyZWF0ZVJDT2JqKCRzY29wZS5tb2RlbC5zZWxlY3RlZGl0ZW1zW2lkXSk7XG4gICAgICAgICAgICAgICBpZighY2hlY2tJc1J1bm5pbmcoS3ViZXJuZXRlc01vZGVsLnJlcGxpY2F0aW9uQ29udHJvbGxlcnMsT2JqKSl7XG4gICAgICAgICAgICAgICAgICBLdWJlcm5ldGVzLmNyZWF0ZVJDKE9iaiwgKHJjKSA9PntcbiAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyYy5tZXRhZGF0YS5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICBLdWJlcm5ldGVzLmNvbm5lY3RPcmFjbGUoJGh0dHAsICR0aW1lb3V0LCBcIi9jb25uZWN0VG9PcmFjbGVcIiwgXCJcIiwgcmMubWV0YWRhdGEubmFtZSwgMCk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gY2hlY2tJc1J1bm5pbmcocmVwbGljYXRpb25Db250cm9sbGVycyxpdGVtKXtcbiAgICAgICAgIGZvcih2YXIgcmMgaW4gcmVwbGljYXRpb25Db250cm9sbGVycyl7XG4gICAgICAgICAgICBpZihpdGVtLm5hbWUgPT09IHJlcGxpY2F0aW9uQ29udHJvbGxlcnNbcmNdLm1ldGFkYXRhLm5hbWUpXG4gICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgIH1cbiAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gY3JlYXRlUkNPYmooaXRlbTogT2JqZWN0KXtcbiAgICAgICAgIHZhciBhcnJheSA9aXRlbS5pZC5zcGxpdChcIl9cIik7XG4gICAgICAgICBpZihhcnJheVswXSA9PT0gXCIxMFwiKXtcbiAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKGl0ZW0pO1xuICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgIFwibmFtZVwiOiBpdGVtLmZha2VuYW1lLFxuICAgICAgICAgICAgICAgICBcImxhYmVsc1wiOiB7XG4gICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBpdGVtLmZha2VuYW1lXG4gICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgIFwicGF0aFwiOiBpdGVtLnBhdGggK1wiYXBwL1wiLFxuICAgICAgICAgICAgICAgICBcImlzVGFyZ2V0XCIgOiAgXCJ0cnVlXCJcbiAgICAgICAgICAgICB9XG4gICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBcIm5hbWVcIjogYXJyYXlbMl0gKyBcIi1cIiArIGFycmF5WzNdICsgXCItXCIgKyBhcnJheVs0XSxcbiAgICAgICAgICAgICAgICBcImxhYmVsc1wiOiB7XG4gICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IGFycmF5WzBdLFxuICAgICAgICAgICAgICAgICAgIFwiYmF0Y2hcIjogYXJyYXlbMV0sXG4gICAgICAgICAgICAgICAgICAgXCJyZWdpb25cIjogYXJyYXlbMl0sXG4gICAgICAgICAgICAgICAgICAgXCJzeXN0ZW1cIjogYXJyYXlbM10sXG4gICAgICAgICAgICAgICAgICAgXCJ2ZXJzaW9uXCI6IGFycmF5WzRdXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcInBhdGhcIjogaXRlbS5wYXRoICtcImFwcC9cIixcbiAgICAgICAgICAgICAgICBcImlzVGFyZ2V0XCI6IFwiZmFsc2VcIlxuICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHNldGNobW9kMmRpcihkYXRhbWVzc2FnZSl7XG4gICAgICAgICAkaHR0cCh7XG4gICAgICAgICAgICB1cmw6Jy9zZXRjaG1vZDJkaXInLFxuICAgICAgICAgICAgbWV0aG9kOidHRVQnLFxuICAgICAgICAgICAgcGFyYW1zOmRhdGFtZXNzYWdlXG4gICAgICAgICB9KS5zdWNjZXNzKGZ1bmN0aW9uKGRhdGEsaGVhZGVyLGNvbmZpZyxzdGF0dXMpe1xuICAgICAgICAgICAgaWYoZGF0YSlcbiAgICAgICAgICAgICAgdmFyIGNsaWVudGRhdGEgPSBkYXRhO1xuICAgICAgICAgfSkuZXJyb3IoZnVuY3Rpb24oZGF0YSxoZWFkZXIsY29uZmlnLHN0YXR1cyl7XG4gICAgICAgICAgICAgY29uc29sZS5sb2coXCItLS0tLXNlbmREYXRlTWVzc2FnZS0tLS0tLS0tLS0tLS1cIitzdGF0dXMpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gdXBkYXRlKCl7XG4gICAgICAgICBmb3IodmFyIGk9MDsgaTwkc2NvcGUubW9kZWwucmVzdW1hYmxlanMubGVuZ3RoOyBpKyspe1xuICAgICAgICAgICAgdmFyIGRpcklkID0gJHNjb3BlLm1vZGVsLnJlc3VtYWJsZWpzW2ldLmRpcm5hbWU7XG4gICAgICAgICAgICB2YXIgciA9ICRzY29wZS5tb2RlbC5yZXN1bWFibGVqc1tpXS5yZXN1bWFibGU7XG4gICAgICAgICAgICByLm9uKCdmaWxlUHJvZ3Jlc3MnLCAoZmlsZSkgPT57XG5cdFx0XHRcdGlmKHIuZ2V0aXNub3djaGVjaygpLmluZGV4T2YoXCIwXCIpID09IC0xKXtcblx0XHRcdFx0XHQkc2NvcGUuJGFwcGx5KGZ1bmN0aW9uKCl7XG5cdFx0XHRcdFx0XHQkc2NvcGUubW9kZWwudXBsb2FkcHJvY2Vzc1tkaXJJZF0gPSBNYXRoLmZsb29yKHIucHJvZ3Jlc3MoKSoxMDApO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2V7XG5cdFx0XHRcdFx0JHNjb3BlLiRhcHBseShmdW5jdGlvbigpe1xuXHRcdFx0XHRcdFx0JHNjb3BlLm1vZGVsLnVwbG9hZHByb2Nlc3NbZGlySWRdID0gTWF0aC5mbG9vcihyLnByb2dyZXNzKCkqOTgpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgIH1cbiAgICAgIH1cbiAgfV0pO1xufVxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxubW9kdWxlIE5hdmlnYXRpb24ge1xuXG4gIGV4cG9ydCB2YXIgcGx1Z2luTmFtZSA9ICdoYXd0aW8tbmF2aWdhdGlvbic7XG4gIGV4cG9ydCB2YXIgbG9nID0gTG9nZ2VyLmdldChwbHVnaW5OYW1lKTtcbiAgZXhwb3J0IHZhciBfbW9kdWxlID0gYW5ndWxhci5tb2R1bGUocGx1Z2luTmFtZSwgW10pO1xuXG4gIF9tb2R1bGUucnVuKCgpID0+IHtcbiAgfSk7XG5cbiAgX21vZHVsZS5zZXJ2aWNlKCdIYXd0aW9CcmVhZGNydW1icycsICgpID0+IHtcbiAgICB2YXIgX2NvbmZpZyA9IFtdO1xuICAgIHZhciBzZWxmID0ge1xuICAgICAgYXBwbHk6IChjb25maWcpID0+IHtcbiAgICAgICAgX2NvbmZpZy5sZW5ndGggPSAwO1xuICAgICAgICBfLmZvckVhY2goY29uZmlnLCAoY3J1bWIpID0+IHtcbiAgICAgICAgICBfY29uZmlnLnB1c2goY3J1bWIpO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIF9jb25maWc7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gc2VsZjtcbiAgfSk7XG5cbiAgX21vZHVsZS5zZXJ2aWNlKCdIYXd0aW9TdWJUYWJzJywgKCkgPT4ge1xuICAgIHZhciBfY29uZmlnID0gW107XG4gICAgdmFyIHNlbGYgPSB7XG4gICAgICBhcHBseTogKGNvbmZpZykgPT4ge1xuICAgICAgICBfY29uZmlnLmxlbmd0aCA9IDA7XG4gICAgICAgIF8uZm9yRWFjaChjb25maWcsIChjcnVtYikgPT4ge1xuICAgICAgICAgIF9jb25maWcucHVzaChjcnVtYik7XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGdldDogKCkgPT4ge1xuICAgICAgICByZXR1cm4gX2NvbmZpZztcbiAgICAgIH0gXG4gICAgfSBcbiAgICByZXR1cm4gc2VsZjtcbiAgfSk7XG5cbiAgX21vZHVsZS5kaXJlY3RpdmUoJ3ZpZXdwb3J0SGVpZ2h0JywgWyckd2luZG93JywgJyRkb2N1bWVudCcsICgkd2luZG93LCAkZG9jdW1lbnQpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVzdHJpY3Q6ICdBJyxcbiAgICAgIGxpbms6IChzY29wZSwgZWxlbWVudCwgYXR0cikgPT4ge1xuICAgICAgICAvLyBsb2cuZGVidWcoXCJXaW5kb3c6IFwiLCAkd2luZG93KTtcbiAgICAgICAgLy8gbG9nLmRlYnVnKFwiZWxlbWVudDogXCIsIGVsZW1lbnQpO1xuICAgICAgICB2YXIgd2luID0gJCgkd2luZG93KTtcbiAgICAgICAgdmFyIHJlc2l6ZUZ1bmMgPSAoKSA9PiB7XG4gICAgICAgICAgdmFyIHZpZXdwb3J0SGVpZ2h0ID0gd2luLmlubmVySGVpZ2h0KCk7XG4gICAgICAgICAgLy8gbG9nLmRlYnVnKFwiVmlld3BvcnQgaGVpZ2h0OiBcIiwgdmlld3BvcnRIZWlnaHQpO1xuICAgICAgICAgIHZhciBlbFRvcCA9IGVsZW1lbnQub2Zmc2V0KCkudG9wO1xuICAgICAgICAgIC8vIGxvZy5kZWJ1ZyhcIkVsZW1lbnQgdG9wOiBcIiwgZWxUb3ApO1xuICAgICAgICAgIHZhciBoZWlnaHQgPSB2aWV3cG9ydEhlaWdodCAtIGVsVG9wO1xuICAgICAgICAgIGVsZW1lbnQuY3NzKCdoZWlnaHQnLCBoZWlnaHQpO1xuICAgICAgICB9O1xuICAgICAgICB3aW4ub24oJ3Jlc2l6ZScsIHJlc2l6ZUZ1bmMpO1xuICAgICAgICBlbGVtZW50Lm9uKCckZGVzdHJveScsICgpID0+IHtcbiAgICAgICAgICB3aW4ub2ZmKCdyZXNpemUnLCByZXNpemVGdW5jKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHNldFRpbWVvdXQocmVzaXplRnVuYywgNTApO1xuICAgICAgfVxuICAgIH1cbiAgfV0pO1xuXG4gIF9tb2R1bGUuZGlyZWN0aXZlKCdoYXd0aW9NYWluT3V0bGV0JywgWydIYXd0aW9TdWJUYWJzJywgKEhhd3Rpb1N1YlRhYnMpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVzdHJpY3Q6ICdBJyxcbiAgICAgIGxpbms6IChzY29wZSwgZWxlbWVudCwgYXR0cnMpID0+IHtcbiAgICAgICAgc2NvcGUuSGF3dGlvU3ViVGFicyA9IEhhd3Rpb1N1YlRhYnM7XG4gICAgICAgIHNjb3BlLiR3YXRjaENvbGxlY3Rpb24oJ0hhd3Rpb1N1YlRhYnMuZ2V0KCknLCAoc3ViVGFiQ29uZmlnKSA9PiB7XG4gICAgICAgICAgLy8gbG9nLmRlYnVnKFwic3ViVGFiQ29uZmlnOiBcIiwgc3ViVGFiQ29uZmlnKTtcbiAgICAgICAgICBpZiAoc3ViVGFiQ29uZmlnICYmIHN1YlRhYkNvbmZpZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUNsYXNzKCdoaWRkZW4tbmF2Jyk7XG4gICAgICAgICAgICAvL2VsZW1lbnQuY3NzKHsgJ21hcmdpbi1sZWZ0JzogJycgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVsZW1lbnQuYWRkQ2xhc3MoJ2hpZGRlbi1uYXYnKTtcbiAgICAgICAgICAgIC8vZWxlbWVudC5jc3MoeyAnbWFyZ2luLWxlZnQnOiAnYXV0bycgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gIH1dKTtcblxuICBfbW9kdWxlLmRpcmVjdGl2ZSgnaGF3dGlvVGFic091dGxldCcsIFsnSGF3dGlvU3ViVGFicycsIChIYXd0aW9TdWJUYWJzKSA9PiB7XG4gICAgdmFyIGluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc3RyaWN0OiAnQUUnLFxuICAgICAgcmVwbGFjZTogdHJ1ZSxcbiAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJuYXYtcGYtdmVydGljYWwgbmF2LXBmLXZlcnRpY2FsLXdpdGgtc2Vjb25kYXJ5LW5hdlwiIG5nLWNvbnRyb2xsZXI9XCJEZXZlbG9wZXIuTmF2QmFyQ29udHJvbGxlclwiIG5nLWNsYXNzPVwiZ2V0Q2xhc3MoKVwiPlxuICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsaSBuZy1yZXBlYXQ9XCJzdWJUYWIgaW4gc3ViVGFiQ29uZmlnXCIgbmctc2hvdz1cImlzVmFsaWQoc3ViVGFiKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0ge3tzdWJUYWIuYWN0aXZlID8gJ2FjdGl2ZScgOiAnJ319XCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cInt7c3ViVGFiLnRpdGxlfX1cIj5cbiAgICAgICAgICAgICAgICA8YSBuZy1oaWRlPVwic3ViVGFiLnRlbXBsYXRlXCIgaHJlZj1cInt7c3ViVGFiLmhyZWZ9fVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gbmctc2hvdz1cInN1YlRhYi5jbGFzc1wiIG5nLWNsYXNzPVwic3ViVGFiLmNsYXNzXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPGltZyBuZy1zaG93PVwic3ViVGFiLmljb25cIiBuZy1zcmM9XCJ7e3N1YlRhYi5pY29ufX1cIiBzdHlsZT1cIm1heC13aWR0aDogMTZweDsgbWFyZ2luLXJpZ2h0OiAxM3B4O1wiPlxuICAgICAgICAgICAgICAgICAge3tzdWJUYWIubGFiZWx9fVxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8ZGl2IG5nLXNob3c9XCJzdWJUYWIudGVtcGxhdGVcIiBjb21waWxlPVwic3ViVGFiLnRlbXBsYXRlXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgYCxcbiAgICAgIGxpbms6IChzY29wZSwgZWxlbWVudCwgYXR0cnMpID0+IHtcbiAgICAgICAgaWYgKCFpbml0aWFsaXplZCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAoPGFueT4kKSgpLnNldHVwVmVydGljYWxOYXZpZ2F0aW9uKGZhbHNlKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIC8vIGlnbm9yZSBpZiB3ZSBoYXZlbid0IGxvYWRlZCBwYXR0ZXJuZmx5XG4gICAgICAgICAgfVxuICAgICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBzY29wZS5IYXd0aW9TdWJUYWJzID0gSGF3dGlvU3ViVGFicztcbiAgICAgICAgdmFyIGNvbGxhcHNlZCA9IGZhbHNlO1xuICAgICAgICBzY29wZS5nZXRDbGFzcyA9ICgpID0+IHtcbiAgICAgICAgICAvL2xvZy5kZWJ1ZyhcIk15IGNsYXNzOiBcIiwgZWxlbWVudC5hdHRyKCdjbGFzcycpKTtcbiAgICAgICAgICBpZiAoIXNjb3BlLnN1YlRhYkNvbmZpZyB8fCAhc2NvcGUuc3ViVGFiQ29uZmlnLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuICdoaWRkZW4nO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY29sbGFwc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2NvbGxhcHNlZCc7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBzY29wZS4kb24oJ2hhd3Rpb0NvbGxhcHNlTmF2JywgKCkgPT4ge1xuICAgICAgICAgIGNvbGxhcHNlZCA9ICFjb2xsYXBzZWQ7XG4gICAgICAgIH0pO1xuICAgICAgICBzY29wZS4kd2F0Y2goJ0hhd3Rpb1N1YlRhYnMuZ2V0KCknLCAoc3ViVGFiQ29uZmlnKSA9PiB7XG4gICAgICAgICAgc2NvcGUuc3ViVGFiQ29uZmlnID0gc3ViVGFiQ29uZmlnO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XSk7XG5cbiAgX21vZHVsZS5kaXJlY3RpdmUoJ2hhd3Rpb0JyZWFkY3J1bWJzT3V0bGV0JywgWydIYXd0aW9CcmVhZGNydW1icycsIChIYXd0aW9CcmVhZGNydW1icykgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICByZXN0cmljdDogJ0UnLFxuICAgICAgc2NvcGU6IHt9LFxuICAgICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGRpdiBuZy1zaG93PVwiYnJlYWRjcnVtYkNvbmZpZ1wiIG5nLWNvbnRyb2xsZXI9XCJEZXZlbG9wZXIuTmF2QmFyQ29udHJvbGxlclwiPlxuICAgICAgICAgIDxvbCBjbGFzcz1cImJyZWFkY3J1bWJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3MgPSAnYnInPjxicj48L2Rpdj5cbiAgICAgICAgICAgIDxsaSBuZy1yZXBlYXQ9XCJicmVhZGNydW1iIGluIGJyZWFkY3J1bWJDb25maWdcIiBuZy1zaG93PVwiaXNWYWxpZChicmVhZGNydW1iKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ7e2JyZWFkY3J1bWIuYWN0aXZlID8gJ2FjdGl2ZScgOiAnJ319XCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cInt7YnJlYWRjcnVtYi50aXRsZX19XCI+XG4gICAgICAgICAgICAgIDxhIG5nLXNob3c9XCJicmVhZGNydW1iLmhyZWYgJiYgIWJyZWFkY3J1bWIuYWN0aXZlXCIgaHJlZj1cInt7YnJlYWRjcnVtYi5ocmVmfX1cIj57e2JyZWFkY3J1bWIubGFiZWx9fTwvYT5cbiAgICAgICAgICAgICAgPHNwYW4gbmctaGlkZT1cImJyZWFkY3J1bWIuaHJlZiAmJiAhYnJlYWRjcnVtYi5hY3RpdmVcIj57e2JyZWFkY3J1bWIubGFiZWx9fTwvc3Bhbj5cbiAgICAgICAgICA8L29sPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIGAsXG4gICAgICBsaW5rOiAoc2NvcGUsIGVsZW1lbnQsIGF0dHJzKSA9PiB7XG4gICAgICAgIHNjb3BlLmJyZWFkY3J1bWJzID0gSGF3dGlvQnJlYWRjcnVtYnM7XG4gICAgICAgIHNjb3BlLiR3YXRjaENvbGxlY3Rpb24oJ2JyZWFkY3J1bWJzLmdldCgpJywgKGJyZWFkY3J1bWJDb25maWcpID0+IHtcbiAgICAgICAgICBzY29wZS5icmVhZGNydW1iQ29uZmlnID0gYnJlYWRjcnVtYkNvbmZpZztcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfV0pO1xuXG4gIC8vaGF3dGlvUGx1Z2luTG9hZGVyLmFkZE1vZHVsZSgncGF0dGVybmZseScpO1xuICBoYXd0aW9QbHVnaW5Mb2FkZXIuYWRkTW9kdWxlKHBsdWdpbk5hbWUpO1xuXG59XG5cbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== angular.module("hawtio-kubernetes-templates", []).run(["$templateCache", function($templateCache) {$templateCache.put("plugins/developer/html/addDataFile.html",""); $templateCache.put("plugins/developer/html/code.html","
\n
\n
\n
\n\n
\n
\n
\n\n
\n
\n \n \n \n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n

There are no tools currently available.

\n
\n
\n
\n

There are no tools currently available.

\n
\n \n
\n
\n
\n
\n
\n"); @@ -17897,7 +18537,7 @@ $templateCache.put("plugins/kubernetes/html/hosts.html","
\n \n
\n
\n \n \n \n \n  \n Create\n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n

There are no image repositories available.

\n Create Image Repository\n
\n
\n
\n
\n
\n
\n
\n
\n"); $templateCache.put("plugins/kubernetes/html/importProject.html","
\n
\n
\n
\n
\n\n
\n
\n
\n\n
\n
\n \n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n\n

\n Create a project by entering or copy/pasting the Git URL for a repository, and give the project a name. By default the name will be based on the repository name.\n

\n\n
\n\n
\n
\n
\n
\n
\n \n \n\n

\n Project name must be a lower case DNS name with letters, numbers and dots or dashes such as `example.com`\n

\n

Name of this project

\n
\n
\n
\n
\n
\n\n
\n
\n
\n
\n
\n"); $templateCache.put("plugins/kubernetes/html/kubernetesJsonDirective.html","
\n
\n
\n
\n\n
\n
\n  \n
\n
\n
\n

 {{displayName || appTitle}}

\n
\n
\n \n
\n
\n
\n
\n
\n\n
\n
\n\n\n"); -$templateCache.put("plugins/kubernetes/html/layoutKubernetes.html","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
\n
\n
\n
\n"); +$templateCache.put("plugins/kubernetes/html/layoutKubernetes.html","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
\n
\n
\n
\n"); $templateCache.put("plugins/kubernetes/html/logShell.html","
\n
\n
\n \n
\n
\n
{{containerName}} logs
\n \n \n \n
\n
\n \n
\n
\n"); $templateCache.put("plugins/kubernetes/html/overview.html","
\n \n \n \n \n \n \n
\n
\n
\n\n
\n
\n
\n\n \n
\n"); $templateCache.put("plugins/kubernetes/html/pendingPipelines.html","
\n
\n
\n
\n
\n
\n
\n
\n
\n

No Pipeline Available

\n

Pipeline is a kind of build which uses Jenkins Workflow internally which has multiple Stages. You will see the active pipelines here after you add a build to this project

\n
\n
\n
\n
\n
\n
\n
\n
\n
\n"); @@ -17909,7 +18549,7 @@ $templateCache.put("plugins/kubernetes/html/pods.html","
\n\n
\n
\n
\n\n
\n
\n
\n\n
\n
\n \n  {{item.metadata.name}}\n \n\n \n  \n\n \n  \n\n {{rawMode ? \'Form\' : \'Raw\'}}\n  \n\n Edit\n  \n\n Save\n  \n\n \n Events\n \n\n    \n\n \n Scale\n \n\n Pods:\n \n {{item.$podCounters.ready}}\n {{item.$podCounters.valid}}\n {{item.$podCounters.waiting}}\n {{item.$podCounters.error}}\n \n \n
\n
\n\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\n
\n
\n
\n
\n
\n\n \n
\n"); $templateCache.put("plugins/kubernetes/html/replicationControllerCreate.html","
\n
\n
\n  \n \n \n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n"); $templateCache.put("plugins/kubernetes/html/replicationControllerEdit.html","
\n
\n
\n  \n \n \n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n"); -$templateCache.put("plugins/kubernetes/html/replicationControllers.html","
\n \n \n\n
\n
\n
\n\n
\n
\n
\n\n
\n
\n \n \n \n \n  \n\n \n  \n\n \n  \n\n \n  \n 创建\n  \n \n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n

当前没有正在运行的oracle服务.

\n
\n
\n
\n
\n
\n
\n
\n \n
\n"); +$templateCache.put("plugins/kubernetes/html/replicationControllers.html","
\n \n \n\n
\n
\n
\n\n
\n
\n
\n\n
\n
\n \n \n \n \n  \n\n \n  \n\n \n  \n\n \n  \n 创建汇总数据库\n  \n \n \n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n

当前没有正在运行的oracle服务.

\n
\n
\n
\n
\n
\n
\n
\n \n\n
\n
\n

数据汇总

\n
\n\n
\n \n\n
\n \n\n \n 当前没有汇总数据库可以选择,请先创建,可以点击创建汇总数据库按钮进行创建!\n \n
\n
\n\n
\n\n
\n
\n \n
\n 您所选择的数据库数据将会被抽取到汇总数据库:\n {{extractData.selectedItem.$oracleName}} 中,是否继续请确认!\n
\n
\n
\n
\n
\n \n\n \n
\n
\n
\n
\n"); $templateCache.put("plugins/kubernetes/html/secret.html","
\n
\n
\n
\n\n
\n
\n
\n\n
\n
\n \n  \n \n
\n
\n\n
\n
\n
\n
\n \n
\n
\n
\n
\n\n
\n
\n
\n
\n
\n \n\n
\n \n \n There is already a secret with that name!\n \n
\n
\n\n
\n \n\n
\n \n \n
\n\n
\n \n
\n
\n
\n\n\n
\n
\n
\n \n \n \n
\n
\n
\n
\n
\n
\n\n
\n
\n

Add New Data Field

\n
\n\n
\n \n\n
\n \n\n \n That field name is already in use!\n \n
\n
\n\n
\n\n
\n
\n \n Enter the name of the new data field to add to the secret\n \n
\n
\n
\n
\n \n\n \n
\n
\n
\n\n
\n"); $templateCache.put("plugins/kubernetes/html/secrets.html","
\n
\n
\n
\n\n
\n
\n
\n\n
\n
\n \n \n\n \n  \n \n Create\n \n \n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n

There are no secrets currently available.

\n
\n
\n
\n
\n
\n
\n
\n
\n"); $templateCache.put("plugins/kubernetes/html/service.html","
\n
\n
\n
\n\n
\n
\n
\n\n
\n
\n \n  {{item.metadata.name}}\n \n\n \n  \n\n \n\n {{rawMode ? \'Form\' : \'Raw\'}}\n  \n\n Edit\n  \n\n Save\n  \n\n \n Connect\n \n
\n
\n\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\n
\n
\n
\n
\n
\n\n
\n"); diff --git a/gulpfile.js b/gulpfile.js index 4302294b..34d9a1de 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -31,7 +31,7 @@ var time =0; var schedule = []; var kubectl = K8s.kubectl({ - endpoint: 'http://192.168.0.102:8080', + endpoint: process.env.KUBERNETES_MASTER, binary: '/usr/bin/kubectl' }); @@ -328,16 +328,19 @@ gulp.task('connect', ['watch'], function() { var tmpPath = "/home/ubuntu/tmp/app"; var appSource="/home/app"; if(req.method="POST"){ - var timestamp=new Date().getTime(); - if((timestamp - time) >= 60*1000){ - time = timestamp; - var dirName= myjs.randomString(10); + var timestamp=new Date(); + if((timestamp.getTime() - time) >= 2*60*1000){ + time = timestamp.getTime(); + var id =fs.readFileSync("./app/version.txt"); + var dirName= "huizongshuju-" +id; dataPath = dataPath + dirName+"/"; fs.mkdirSync(dataPath); //path.exists(tmpPath,function(exists){if(exists) console.log("exists");}); fs.renameSync(tmpPath, dataPath+"app"); console.log("move 'home/ubuntu/tmp/app' to " + dataPath); - res.send(200,{path:dataPath+"app/"}); + xmloperation.savehuizong(timestamp.Format('yyyy-MM-dd hh:mm:ss'), '10', id, "汇总数据库("+ id +")", dataPath, dirName); + fs.writeFileSync('./app/version.txt', 2); + res.send(200,{path: dataPath+"app/", name: dirName}); res.end(); shellprocess.exec("cp -rp " + appSource + " " + tmpPath); }else{ @@ -625,13 +628,18 @@ gulp.task('connect', ['watch'], function() { res.end(); }); }); - hawtio.use('/cancelOracleConection',function(req,res){ + hawtio.use('/cancelOracleConection', function(req,res){ var rcName = req.query.oracleName; cancelOracleConectionTask(rcName); res.send(200,"Ok"); res.end(); }); + hawtio.use('/extractOracleData', function(req,res){ + var data = req.query.param; + console.log(data); + }); + hawtio.listen(function(server) { var host = server.address().address; var port = server.address().port; diff --git a/plugins/developer/ts/workspaces.ts b/plugins/developer/ts/workspaces.ts index c7431d8c..f9982ccf 100644 --- a/plugins/developer/ts/workspaces.ts +++ b/plugins/developer/ts/workspaces.ts @@ -7,8 +7,8 @@ module Developer { export var WorkspacesController = controller("WorkspacesController", - ["$scope", "OracleStatusModel", "KubernetesModel", "KubernetesState", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "DataInfoModel", "$interval", - ($scope, OracleStatusModel, KubernetesModel:Kubernetes.KubernetesModelService, KubernetesState, $templateCache:ng.ITemplateCacheService, $location:ng.ILocationService, $routeParams, $http, $timeout, KubernetesApiURL, DataInfoModel,$interval) => { + ["$scope", "KubernetesModel", "KubernetesState", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "DataInfoModel", "$interval", + ($scope, KubernetesModel:Kubernetes.KubernetesModelService, KubernetesState, $templateCache:ng.ITemplateCacheService, $location:ng.ILocationService, $routeParams, $http, $timeout, KubernetesApiURL, DataInfoModel,$interval) => { $scope.model = DataInfoModel; $scope.items=[]; @@ -243,7 +243,7 @@ module Developer { var timerForUpload = $interval(function(){ if(i >= isExited.length){ // clearInterval(timerForUpload); - $interval.cancle(timerForUpload); + $interval.cancel(timerForUpload); } if(isuploaad == 1){ var r = new Resumable({ @@ -412,17 +412,30 @@ module Developer { function createRCObj(item: Object){ var array =item.id.split("_"); - return { - "name": array[2] + "-" + array[3] + "-" + array[4], - "labels": { - "type": array[0], - "batch": array[1], - "region": array[2], - "system": array[3], - "version": array[4] - }, - "path": item.path +"app/" - } + if(array[0] === "10"){ + //console.log(item); + return { + "name": item.fakename, + "labels": { + "name": item.fakename + }, + "path": item.path +"app/", + "isTarget" : "true" + } + }else{ + return { + "name": array[2] + "-" + array[3] + "-" + array[4], + "labels": { + "type": array[0], + "batch": array[1], + "region": array[2], + "system": array[3], + "version": array[4] + }, + "path": item.path +"app/", + "isTarget": "false" + } + } } function setchmod2dir(datamessage){ diff --git a/plugins/kubernetes/html/layoutKubernetes.html b/plugins/kubernetes/html/layoutKubernetes.html index 9f7c0f95..f8da014d 100644 --- a/plugins/kubernetes/html/layoutKubernetes.html +++ b/plugins/kubernetes/html/layoutKubernetes.html @@ -9,10 +9,10 @@
\r\n
\r\n

江苏省审计厅数据汇总平台

\r\n
\r\n
\r\n
\r\n

本地文件列表

\r\n
    \r\n
  • 文件名
  • \r\n
  • \r\n
  • \r\n
  • \r\n
  • \r\n
  • \r\n
  • \r\n
\r\n
    \r\n
  • 文件属性
  • \r\n
  • \r\n
  • \r\n
\r\n
\r\n
\r\n
\r\n
\r\n

服务器文件列表

\r\n
\r\n
\r\n employee: {{node.name}} age {{node.age}}\r\n
\r\n \r\n
\r\n
\r\n
    \r\n
  • 文件名
  • \r\n
  • \r\n
  • \r\n
  • \r\n
  • \r\n
  • \r\n
  • \r\n
\r\n
    \r\n
  • 文件属性
  • \r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n\r\n\r\n\r\n