forked from lispc/covid19-citymap-china
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbundle.js
2 lines (2 loc) · 157 KB
/
bundle.js
1
2
!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=10)}([function(e,t,n){"use strict";var r=n(2),o=Object.prototype.toString;function i(e){return"[object Array]"===o.call(e)}function a(e){return void 0===e}function s(e){return null!==e&&"object"==typeof e}function c(e){return"[object Function]"===o.call(e)}function u(e,t){if(null!=e)if("object"!=typeof e&&(e=[e]),i(e))for(var n=0,r=e.length;n<r;n++)t.call(null,e[n],n,e);else for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.call(null,e[o],o,e)}e.exports={isArray:i,isArrayBuffer:function(e){return"[object ArrayBuffer]"===o.call(e)},isBuffer:function(e){return null!==e&&!a(e)&&null!==e.constructor&&!a(e.constructor)&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)},isFormData:function(e){return"undefined"!=typeof FormData&&e instanceof FormData},isArrayBufferView:function(e){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer},isString:function(e){return"string"==typeof e},isNumber:function(e){return"number"==typeof e},isObject:s,isUndefined:a,isDate:function(e){return"[object Date]"===o.call(e)},isFile:function(e){return"[object File]"===o.call(e)},isBlob:function(e){return"[object Blob]"===o.call(e)},isFunction:c,isStream:function(e){return s(e)&&c(e.pipe)},isURLSearchParams:function(e){return"undefined"!=typeof URLSearchParams&&e instanceof URLSearchParams},isStandardBrowserEnv:function(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&("undefined"!=typeof window&&"undefined"!=typeof document)},forEach:u,merge:function e(){var t={};function n(n,r){"object"==typeof t[r]&&"object"==typeof n?t[r]=e(t[r],n):t[r]=n}for(var r=0,o=arguments.length;r<o;r++)u(arguments[r],n);return t},deepMerge:function e(){var t={};function n(n,r){"object"==typeof t[r]&&"object"==typeof n?t[r]=e(t[r],n):t[r]="object"==typeof n?e({},n):n}for(var r=0,o=arguments.length;r<o;r++)u(arguments[r],n);return t},extend:function(e,t,n){return u(t,(function(t,o){e[o]=n&&"function"==typeof t?r(t,n):t})),e},trim:function(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}}},function(e,t,n){"use strict";(function(e){var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function s(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===i[0]||2===i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,s])}}},i=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},a=this&&this.__read||function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,i=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a};t.__esModule=!0;var s=n(12),c=n(13),u=n(31),f=new Set(s),l=new Map;f.forEach((function(e){l.set(e.substr(0,2),e)}));var d=[[0,"#FFDFDF"],[10,"#FFBFBF"],[20,"#FF9F9F"],[30,"#FF7F7F"],[40,"#FF5F5F"],[50,"#FF3F3F"],[60,"#FF1F1F"],[70,"#FF0000"],[80,"#E70000"],[90,"#CF0000"],[100,"#B80000"],[200,"#A00000"],[500,"#880000"],[1e3,"#710000"],[2e3,"#590000"],[5e3,"#420000"]],p=["外地来京人员","未知","未明确地区","所属地待确认","待确认","地区待确认"],h=new Map([["巩义","郑州市"],["固始县","信阳市"],["滑县","安阳市"],["长垣","新乡市"],["永城","商丘市"],["邓州","南阳市"],["韩城","渭南市"],["杨凌","咸阳市"],["宁东管委会","银川市"],["满洲里","呼伦贝尔市"],["阿拉善","阿拉善盟"],["宿松","安庆市"],["赣江新区","南昌市"],["公主岭","四平市"],["梅河口市","通化市"],["两江新区","渝北区"],["万盛经开区","綦江区"],["巴州","巴音郭楞蒙古自治州"],["兵团第四师","可克达拉市"],["六师五家渠","五家渠市"],["第七师","塔城地区"],["第八师石河子","石河子市"],["兵团第九师","塔城地区"],["兵团第十二师","乌鲁木齐市"]]),m=new Map([["西藏-地区待确认","拉萨市"],["重庆-高新区","九龙坡区"]]);function v(e){var t=e.jsonp,n=void 0===t||t;return r(this,void 0,void 0,(function(){var e,t;return o(this,(function(r){switch(r.label){case 0:return e={url:"https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5",method:"get",adapter:n?u:void 0},[4,c.default(e)];case 1:return t=r.sent(),[2,JSON.parse(t.data.data).areaTree[0].children]}}))}))}function y(e,t){if(m.has(e+"-"+t))return m.get(e+"-"+t);if(h.has(t))return h.get(t);if(p.includes(t))return"";var n="";if(n=["市","县","盟"].includes(t[-1])?t:"重庆"==e&&"区"==t[-1]?t:t+"市",f.has(n))return n;var r=t.substr(0,2);return l.has(r)?n=l.get(r):(console.log("!!!Cannot match, discard:",e,t),"")}function g(e){var t=e.confirm-e.dead-e.heal;if(t<0)throw e;return t}function w(e){var t,n,r,o,a=new Map;try{for(var s=i(e),c=s.next();!c.done;c=s.next()){var u=c.value,f=g(u.total);if(["香港","澳门","台湾"].includes(u.name)){var l="台湾"==u.name?"省":"特别行政区";a.set(u.name+l,f)}else if(["北京","上海","天津"].includes(u.name)){var d=u.name+"市";a.set(d,f)}else try{for(var p=(r=void 0,i(u.children)),h=p.next();!h.done;h=p.next()){var m=h.value,v=g(m.total),w=y(u.name,m.name);""!=w&&(a.has(w)?a.set(w,a.get(w)+v):a.set(w,v))}}catch(e){r={error:e}}finally{try{h&&!h.done&&(o=p.return)&&o.call(p)}finally{if(r)throw r.error}}}}catch(e){t={error:e}}finally{try{c&&!c.done&&(n=s.return)&&n.call(s)}finally{if(t)throw t.error}}return a}t.loadTecentData=v,t.getConfirmedCount=w,t.getColor=function(e){var t,n;if(0==e)return"#FFFFFF";try{for(var r=i(d.entries()),o=r.next();!o.done;o=r.next()){var s=a(o.value,2),c=s[0],u=a(s[1],2),f=u[0];u[1];if(0!=c&&e<f)return d[c-1][1]}}catch(e){t={error:e}}finally{try{o&&!o.done&&(n=r.return)&&n.call(r)}finally{if(t)throw t.error}}return"#420000"},n.c[n.s]===e&&v({jsonp:!1}).then((function(e){console.dir(w(e),{depth:null})}))}).call(this,n(11)(e))},function(e,t,n){"use strict";e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r<n.length;r++)n[r]=arguments[r];return e.apply(t,n)}}},function(e,t,n){"use strict";var r=n(0);function o(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}e.exports=function(e,t,n){if(!t)return e;var i;if(n)i=n(t);else if(r.isURLSearchParams(t))i=t.toString();else{var a=[];r.forEach(t,(function(e,t){null!=e&&(r.isArray(e)?t+="[]":e=[e],r.forEach(e,(function(e){r.isDate(e)?e=e.toISOString():r.isObject(e)&&(e=JSON.stringify(e)),a.push(o(t)+"="+o(e))})))})),i=a.join("&")}if(i){var s=e.indexOf("#");-1!==s&&(e=e.slice(0,s)),e+=(-1===e.indexOf("?")?"?":"&")+i}return e}},function(e,t,n){"use strict";e.exports=function(e){return!(!e||!e.__CANCEL__)}},function(e,t,n){"use strict";(function(t){var r=n(0),o=n(20),i={"Content-Type":"application/x-www-form-urlencoded"};function a(e,t){!r.isUndefined(e)&&r.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}var s,c={adapter:("undefined"!=typeof XMLHttpRequest?s=n(6):void 0!==t&&"[object process]"===Object.prototype.toString.call(t)&&(s=n(6)),s),transformRequest:[function(e,t){return o(t,"Accept"),o(t,"Content-Type"),r.isFormData(e)||r.isArrayBuffer(e)||r.isBuffer(e)||r.isStream(e)||r.isFile(e)||r.isBlob(e)?e:r.isArrayBufferView(e)?e.buffer:r.isURLSearchParams(e)?(a(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString()):r.isObject(e)?(a(t,"application/json;charset=utf-8"),JSON.stringify(e)):e}],transformResponse:[function(e){if("string"==typeof e)try{e=JSON.parse(e)}catch(e){}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,validateStatus:function(e){return e>=200&&e<300}};c.headers={common:{Accept:"application/json, text/plain, */*"}},r.forEach(["delete","get","head"],(function(e){c.headers[e]={}})),r.forEach(["post","put","patch"],(function(e){c.headers[e]=r.merge(i)})),e.exports=c}).call(this,n(19))},function(e,t,n){"use strict";var r=n(0),o=n(21),i=n(3),a=n(23),s=n(26),c=n(27),u=n(7);e.exports=function(e){return new Promise((function(t,f){var l=e.data,d=e.headers;r.isFormData(l)&&delete d["Content-Type"];var p=new XMLHttpRequest;if(e.auth){var h=e.auth.username||"",m=e.auth.password||"";d.Authorization="Basic "+btoa(h+":"+m)}var v=a(e.baseURL,e.url);if(p.open(e.method.toUpperCase(),i(v,e.params,e.paramsSerializer),!0),p.timeout=e.timeout,p.onreadystatechange=function(){if(p&&4===p.readyState&&(0!==p.status||p.responseURL&&0===p.responseURL.indexOf("file:"))){var n="getAllResponseHeaders"in p?s(p.getAllResponseHeaders()):null,r={data:e.responseType&&"text"!==e.responseType?p.response:p.responseText,status:p.status,statusText:p.statusText,headers:n,config:e,request:p};o(t,f,r),p=null}},p.onabort=function(){p&&(f(u("Request aborted",e,"ECONNABORTED",p)),p=null)},p.onerror=function(){f(u("Network Error",e,null,p)),p=null},p.ontimeout=function(){var t="timeout of "+e.timeout+"ms exceeded";e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),f(u(t,e,"ECONNABORTED",p)),p=null},r.isStandardBrowserEnv()){var y=n(28),g=(e.withCredentials||c(v))&&e.xsrfCookieName?y.read(e.xsrfCookieName):void 0;g&&(d[e.xsrfHeaderName]=g)}if("setRequestHeader"in p&&r.forEach(d,(function(e,t){void 0===l&&"content-type"===t.toLowerCase()?delete d[t]:p.setRequestHeader(t,e)})),r.isUndefined(e.withCredentials)||(p.withCredentials=!!e.withCredentials),e.responseType)try{p.responseType=e.responseType}catch(t){if("json"!==e.responseType)throw t}"function"==typeof e.onDownloadProgress&&p.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&p.upload&&p.upload.addEventListener("progress",e.onUploadProgress),e.cancelToken&&e.cancelToken.promise.then((function(e){p&&(p.abort(),f(e),p=null)})),void 0===l&&(l=null),p.send(l)}))}},function(e,t,n){"use strict";var r=n(22);e.exports=function(e,t,n,o,i){var a=new Error(e);return r(a,t,n,o,i)}},function(e,t,n){"use strict";var r=n(0);e.exports=function(e,t){t=t||{};var n={},o=["url","method","params","data"],i=["headers","auth","proxy"],a=["baseURL","url","transformRequest","transformResponse","paramsSerializer","timeout","withCredentials","adapter","responseType","xsrfCookieName","xsrfHeaderName","onUploadProgress","onDownloadProgress","maxContentLength","validateStatus","maxRedirects","httpAgent","httpsAgent","cancelToken","socketPath"];r.forEach(o,(function(e){void 0!==t[e]&&(n[e]=t[e])})),r.forEach(i,(function(o){r.isObject(t[o])?n[o]=r.deepMerge(e[o],t[o]):void 0!==t[o]?n[o]=t[o]:r.isObject(e[o])?n[o]=r.deepMerge(e[o]):void 0!==e[o]&&(n[o]=e[o])})),r.forEach(a,(function(r){void 0!==t[r]?n[r]=t[r]:void 0!==e[r]&&(n[r]=e[r])}));var s=o.concat(i).concat(a),c=Object.keys(t).filter((function(e){return-1===s.indexOf(e)}));return r.forEach(c,(function(r){void 0!==t[r]?n[r]=t[r]:void 0!==e[r]&&(n[r]=e[r])})),n}},function(e,t,n){"use strict";function r(e){this.message=e}r.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},r.prototype.__CANCEL__=!0,e.exports=r},function(e,t,n){"use strict";n.r(t);var r,o,i,a,s=n(1),c=new Map,u=new Map;function f(e){let t=0;return c.has(e)&&(t=c.get(e)),t}function l(e){return Object(s.getColor)(f(e))}function d(e){var t=e.pixel,n=o.getDistrictByContainerPos(t);if(n||(n=i.getDistrictByContainerPos(t)),n){const e=" ";if(["110000","120000","310000","710000","810000","820000"].includes(n.adcode_pro.toString())){const t=n.NAME_CHN+e+f(n.NAME_CHN);var r=new AMap.LabelMarker({position:[n.x,n.y],text:{content:t},rank:2});a.add(r)}else AMap.plugin("AMap.DistrictSearch",(function(){const t="500000"==n.adcode_pro.toString(),r=t?2:1;function o(r){if(t){for(const t of r.districtList[0].districtList[0].districtList){const r={position:t.center,text:{content:t.name+e+f(t.name)},rank:t.adcode==n.adcode.toString()?2:1};0;i=new AMap.LabelMarker(r);a.add(i)}var o=0;const t=r.districtList[0].districtList[1];for(const e of t.districtList)o+=f(e.name);const s={position:t.center,text:{content:t.name+e+o},rank:"500100"==n.adcode_cit.toString()?2:1};0;i=new AMap.LabelMarker(s);a.add(i)}else for(const t of r.districtList[0].districtList){const r=t.name+e+f(t.name),o={position:t.center,text:{content:r},rank:t.adcode==n.adcode.toString()?2:1};0;var i=new AMap.LabelMarker(o);a.add(i)}}var i=new AMap.DistrictSearch({level:"district",subdistrict:r});const s=n.adcode_pro.toString();u.get(s)?o(u.get(s)):i.search(s,(function(e,t){"complete"==e&&(u.set(s,t),o(t))}))}))}}document.addEventListener("DOMContentLoaded",(function(){Object(s.loadTecentData)({jsonp:!0}).then(e=>{(c=Object(s.getConfirmedCount)(e)).set("邳州市",c.get("徐州市")),c.set("莱芜市",c.get("济南市")),r=new AMap.Map("container",{zoom:window.screen.width<=600?3:4,center:[104.5,38.5],pitch:0,viewMode:"3D"}),(o=new AMap.DistrictLayer.Province({zIndex:12,adcode:["110000","120000","130000","140000","150000","210000","220000","230000","310000","320000","330000","340000","350000","360000","370000","410000","420000","430000","440000","450000","460000","510000","520000","530000","540000","610000","620000","630000","640000","650000","710000","810000","820000"],depth:1,styles:{fill:function(e){return l(e.NAME_CHN)},"province-stroke":"black","city-stroke":"cornflowerblue","county-stroke":"rgba(255,255,255,0.5)"}})).setMap(r),(i=new AMap.DistrictLayer.Province({zIndex:12,adcode:["500000"],depth:2,styles:{fill:function(e){return l(e.NAME_CHN)},"province-stroke":"black","city-stroke":"cornflowerblue","county-stroke":"rgba(255,255,255,0.5)"}})).setMap(r),r.on("complete",(function(){a=new AMap.LabelsLayer({fitView:!0}),r.add(a),r.on("click",d)}))})}))},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e){e.exports=JSON.parse('["北京市","天津市","石家庄市","唐山市","秦皇岛市","邯郸市","邢台市","保定市","张家口市","承德市","沧州市","廊坊市","衡水市","太原市","大同市","阳泉市","长治市","晋城市","朔州市","晋中市","运城市","忻州市","临汾市","吕梁市","呼和浩特市","包头市","乌海市","赤峰市","通辽市","鄂尔多斯市","呼伦贝尔市","巴彦淖尔市","乌兰察布市","兴安盟","锡林郭勒盟","阿拉善盟","沈阳市","大连市","鞍山市","抚顺市","本溪市","丹东市","锦州市","营口市","阜新市","辽阳市","盘锦市","铁岭市","朝阳市","葫芦岛市","长春市","吉林市","四平市","辽源市","通化市","白山市","松原市","白城市","延边朝鲜族自治州","哈尔滨市","齐齐哈尔市","鸡西市","鹤岗市","双鸭山市","大庆市","伊春市","佳木斯市","七台河市","牡丹江市","黑河市","绥化市","大兴安岭地区","上海市","南京市","无锡市","徐州市","常州市","苏州市","南通市","连云港市","淮安市","盐城市","扬州市","镇江市","泰州市","宿迁市","杭州市","宁波市","温州市","嘉兴市","湖州市","绍兴市","金华市","衢州市","舟山市","台州市","丽水市","合肥市","芜湖市","蚌埠市","淮南市","马鞍山市","淮北市","铜陵市","安庆市","黄山市","滁州市","阜阳市","宿州市","六安市","亳州市","池州市","宣城市","福州市","厦门市","莆田市","三明市","泉州市","漳州市","南平市","龙岩市","宁德市","南昌市","景德镇市","萍乡市","九江市","新余市","鹰潭市","赣州市","吉安市","宜春市","抚州市","上饶市","济南市","青岛市","淄博市","枣庄市","东营市","烟台市","潍坊市","济宁市","泰安市","威海市","日照市","莱芜市","临沂市","德州市","聊城市","滨州市","菏泽市","郑州市","开封市","洛阳市","平顶山市","安阳市","鹤壁市","新乡市","焦作市","濮阳市","许昌市","漯河市","三门峡市","南阳市","商丘市","信阳市","周口市","驻马店市","济源市","武汉市","黄石市","十堰市","宜昌市","襄阳市","鄂州市","荆门市","孝感市","荆州市","黄冈市","咸宁市","随州市","恩施土家族苗族自治州","仙桃市","潜江市","天门市","神农架林区","长沙市","株洲市","湘潭市","衡阳市","邵阳市","岳阳市","常德市","张家界市","益阳市","郴州市","永州市","怀化市","娄底市","湘西土家族苗族自治州","广州市","韶关市","深圳市","珠海市","汕头市","佛山市","江门市","湛江市","茂名市","肇庆市","惠州市","梅州市","汕尾市","河源市","阳江市","清远市","东莞市","中山市","东沙群岛","潮州市","揭阳市","云浮市","南宁市","柳州市","桂林市","梧州市","北海市","防城港市","钦州市","贵港市","玉林市","百色市","贺州市","河池市","来宾市","崇左市","海口市","三亚市","三沙市","儋州市","五指山市","琼海市","文昌市","万宁市","东方市","定安县","屯昌县","澄迈县","临高县","白沙黎族自治县","昌江黎族自治县","乐东黎族自治县","陵水黎族自治县","保亭黎族苗族自治县","琼中黎族苗族自治县","重庆市","万州区","涪陵区","渝中区","大渡口区","江北区","沙坪坝区","九龙坡区","南岸区","北碚区","綦江区","大足区","渝北区","巴南区","黔江区","长寿区","江津区","合川区","永川区","南川区","璧山区","铜梁区","潼南区","荣昌区","开州区","梁平区","武隆区","城口县","丰都县","垫江县","忠县","云阳县","奉节县","巫山县","巫溪县","石柱土家族自治县","秀山土家族苗族自治县","酉阳土家族苗族自治县","彭水苗族土家族自治县","成都市","自贡市","攀枝花市","泸州市","德阳市","绵阳市","广元市","遂宁市","内江市","乐山市","南充市","眉山市","宜宾市","广安市","达州市","雅安市","巴中市","资阳市","阿坝藏族羌族自治州","甘孜藏族自治州","凉山彝族自治州","贵阳市","六盘水市","遵义市","安顺市","毕节市","铜仁市","黔西南布依族苗族自治州","黔东南苗族侗族自治州","黔南布依族苗族自治州","昆明市","曲靖市","玉溪市","保山市","昭通市","丽江市","普洱市","临沧市","楚雄彝族自治州","红河哈尼族彝族自治州","文山壮族苗族自治州","西双版纳傣族自治州","大理白族自治州","德宏傣族景颇族自治州","怒江傈僳族自治州","迪庆藏族自治州","拉萨市","日喀则市","昌都市","林芝市","山南市","那曲市","阿里地区","西安市","铜川市","宝鸡市","咸阳市","渭南市","延安市","汉中市","榆林市","安康市","商洛市","兰州市","嘉峪关市","金昌市","白银市","天水市","武威市","张掖市","平凉市","酒泉市","庆阳市","定西市","陇南市","临夏回族自治州","甘南藏族自治州","西宁市","海东市","海北藏族自治州","黄南藏族自治州","海南藏族自治州","果洛藏族自治州","玉树藏族自治州","海西蒙古族藏族自治州","银川市","石嘴山市","吴忠市","固原市","中卫市","乌鲁木齐市","克拉玛依市","吐鲁番市","哈密市","昌吉回族自治州","博尔塔拉蒙古自治州","巴音郭楞蒙古自治州","阿克苏地区","克孜勒苏柯尔克孜自治州","喀什地区","和田地区","伊犁哈萨克自治州","塔城地区","阿勒泰地区","石河子市","阿拉尔市","图木舒克市","五家渠市","北屯市","铁门关市","双河市","可克达拉市","昆玉市","台湾","香港","澳门"]')},function(e,t,n){e.exports=n(14)},function(e,t,n){"use strict";var r=n(0),o=n(2),i=n(15),a=n(8);function s(e){var t=new i(e),n=o(i.prototype.request,t);return r.extend(n,i.prototype,t),r.extend(n,t),n}var c=s(n(5));c.Axios=i,c.create=function(e){return s(a(c.defaults,e))},c.Cancel=n(9),c.CancelToken=n(29),c.isCancel=n(4),c.all=function(e){return Promise.all(e)},c.spread=n(30),e.exports=c,e.exports.default=c},function(e,t,n){"use strict";var r=n(0),o=n(3),i=n(16),a=n(17),s=n(8);function c(e){this.defaults=e,this.interceptors={request:new i,response:new i}}c.prototype.request=function(e){"string"==typeof e?(e=arguments[1]||{}).url=arguments[0]:e=e||{},(e=s(this.defaults,e)).method?e.method=e.method.toLowerCase():this.defaults.method?e.method=this.defaults.method.toLowerCase():e.method="get";var t=[a,void 0],n=Promise.resolve(e);for(this.interceptors.request.forEach((function(e){t.unshift(e.fulfilled,e.rejected)})),this.interceptors.response.forEach((function(e){t.push(e.fulfilled,e.rejected)}));t.length;)n=n.then(t.shift(),t.shift());return n},c.prototype.getUri=function(e){return e=s(this.defaults,e),o(e.url,e.params,e.paramsSerializer).replace(/^\?/,"")},r.forEach(["delete","get","head","options"],(function(e){c.prototype[e]=function(t,n){return this.request(r.merge(n||{},{method:e,url:t}))}})),r.forEach(["post","put","patch"],(function(e){c.prototype[e]=function(t,n,o){return this.request(r.merge(o||{},{method:e,url:t,data:n}))}})),e.exports=c},function(e,t,n){"use strict";var r=n(0);function o(){this.handlers=[]}o.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},o.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},o.prototype.forEach=function(e){r.forEach(this.handlers,(function(t){null!==t&&e(t)}))},e.exports=o},function(e,t,n){"use strict";var r=n(0),o=n(18),i=n(4),a=n(5);function s(e){e.cancelToken&&e.cancelToken.throwIfRequested()}e.exports=function(e){return s(e),e.headers=e.headers||{},e.data=o(e.data,e.headers,e.transformRequest),e.headers=r.merge(e.headers.common||{},e.headers[e.method]||{},e.headers),r.forEach(["delete","get","head","post","put","patch","common"],(function(t){delete e.headers[t]})),(e.adapter||a.adapter)(e).then((function(t){return s(e),t.data=o(t.data,t.headers,e.transformResponse),t}),(function(t){return i(t)||(s(e),t&&t.response&&(t.response.data=o(t.response.data,t.response.headers,e.transformResponse))),Promise.reject(t)}))}},function(e,t,n){"use strict";var r=n(0);e.exports=function(e,t,n){return r.forEach(n,(function(n){e=n(e,t)})),e}},function(e,t){var n,r,o=e.exports={};function i(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function s(e){if(n===setTimeout)return setTimeout(e,0);if((n===i||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:i}catch(e){n=i}try{r="function"==typeof clearTimeout?clearTimeout:a}catch(e){r=a}}();var c,u=[],f=!1,l=-1;function d(){f&&c&&(f=!1,c.length?u=c.concat(u):l=-1,u.length&&p())}function p(){if(!f){var e=s(d);f=!0;for(var t=u.length;t;){for(c=u,u=[];++l<t;)c&&c[l].run();l=-1,t=u.length}c=null,f=!1,function(e){if(r===clearTimeout)return clearTimeout(e);if((r===a||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(e);try{r(e)}catch(t){try{return r.call(null,e)}catch(t){return r.call(this,e)}}}(e)}}function h(e,t){this.fun=e,this.array=t}function m(){}o.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];u.push(new h(e,t)),1!==u.length||f||s(p)},h.prototype.run=function(){this.fun.apply(null,this.array)},o.title="browser",o.browser=!0,o.env={},o.argv=[],o.version="",o.versions={},o.on=m,o.addListener=m,o.once=m,o.off=m,o.removeListener=m,o.removeAllListeners=m,o.emit=m,o.prependListener=m,o.prependOnceListener=m,o.listeners=function(e){return[]},o.binding=function(e){throw new Error("process.binding is not supported")},o.cwd=function(){return"/"},o.chdir=function(e){throw new Error("process.chdir is not supported")},o.umask=function(){return 0}},function(e,t,n){"use strict";var r=n(0);e.exports=function(e,t){r.forEach(e,(function(n,r){r!==t&&r.toUpperCase()===t.toUpperCase()&&(e[t]=n,delete e[r])}))}},function(e,t,n){"use strict";var r=n(7);e.exports=function(e,t,n){var o=n.config.validateStatus;!o||o(n.status)?e(n):t(r("Request failed with status code "+n.status,n.config,null,n.request,n))}},function(e,t,n){"use strict";e.exports=function(e,t,n,r,o){return e.config=t,n&&(e.code=n),e.request=r,e.response=o,e.isAxiosError=!0,e.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code}},e}},function(e,t,n){"use strict";var r=n(24),o=n(25);e.exports=function(e,t){return e&&!r(t)?o(e,t):t}},function(e,t,n){"use strict";e.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},function(e,t,n){"use strict";e.exports=function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}},function(e,t,n){"use strict";var r=n(0),o=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];e.exports=function(e){var t,n,i,a={};return e?(r.forEach(e.split("\n"),(function(e){if(i=e.indexOf(":"),t=r.trim(e.substr(0,i)).toLowerCase(),n=r.trim(e.substr(i+1)),t){if(a[t]&&o.indexOf(t)>=0)return;a[t]="set-cookie"===t?(a[t]?a[t]:[]).concat([n]):a[t]?a[t]+", "+n:n}})),a):a}},function(e,t,n){"use strict";var r=n(0);e.exports=r.isStandardBrowserEnv()?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function o(e){var r=e;return t&&(n.setAttribute("href",r),r=n.href),n.setAttribute("href",r),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}return e=o(window.location.href),function(t){var n=r.isString(t)?o(t):t;return n.protocol===e.protocol&&n.host===e.host}}():function(){return!0}},function(e,t,n){"use strict";var r=n(0);e.exports=r.isStandardBrowserEnv()?{write:function(e,t,n,o,i,a){var s=[];s.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&s.push("expires="+new Date(n).toGMTString()),r.isString(o)&&s.push("path="+o),r.isString(i)&&s.push("domain="+i),!0===a&&s.push("secure"),document.cookie=s.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},function(e,t,n){"use strict";var r=n(9);function o(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise((function(e){t=e}));var n=this;e((function(e){n.reason||(n.reason=new r(e),t(n.reason))}))}o.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},o.source=function(){var e;return{token:new o((function(t){e=t})),cancel:e}},e.exports=o},function(e,t,n){"use strict";e.exports=function(e){return function(t){return e.apply(null,t)}}},function(e,t){var n=1;function r(e){var t=[];for(var n in e)t.push(encodeURIComponent(n)+"="+encodeURIComponent(e[n]));return t.join("&")}e.exports=function(e){return new Promise((function(t,o){var i=document.createElement("script"),a=e.url;if(e.params){var s=r(e.params);s&&(a+=(a.indexOf("?")>=0?"&":"?")+s)}function c(){i&&(i.onload=i.onreadystatechange=i.onerror=null,i.parentNode&&i.parentNode.removeChild(i),i=null)}i.async=!0;var u="axiosJsonpCallback"+n++,f=window[u],l=!1;window[u]=function(e){(window[u]=f,l)||t({data:e,status:200})};var d={_:(new Date).getTime()};d[e.callbackParamName||"callback"]=u,a+=(a.indexOf("?")>=0?"&":"?")+r(d),i.onload=i.onreadystatechange=function(){i.readyState&&!/loaded|complete/.test(i.readyState)||c()},i.onerror=function(){c(),o(new Error("Network Error"))},e.cancelToken&&e.cancelToken.promise.then((function(e){i&&(l=!0,o(e))})),i.src=a,document.head.appendChild(i)}))}}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi91dGlscy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvbG9hZF9kYXRhLnRzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9iaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9idWlsZFVSTC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9pc0NhbmNlbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2RlZmF1bHRzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMveGhyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9jcmVhdGVFcnJvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvbWVyZ2VDb25maWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsLmpzIiwid2VicGFjazovLy8uL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vbW9kdWxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2F4aW9zLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvSW50ZXJjZXB0b3JNYW5hZ2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9kaXNwYXRjaFJlcXVlc3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3RyYW5zZm9ybURhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvc2V0dGxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9lbmhhbmNlRXJyb3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2J1aWxkRnVsbFBhdGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZUhlYWRlcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzVVJMU2FtZU9yaWdpbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29va2llcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9DYW5jZWxUb2tlbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3ByZWFkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy1qc29ucC9saWIvaW5kZXguanMiXSwibmFtZXMiOlsiaW5zdGFsbGVkTW9kdWxlcyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImV4cG9ydHMiLCJtb2R1bGUiLCJpIiwibCIsIm1vZHVsZXMiLCJjYWxsIiwibSIsImMiLCJkIiwibmFtZSIsImdldHRlciIsIm8iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJyIiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJ2YWx1ZSIsInQiLCJtb2RlIiwiX19lc01vZHVsZSIsIm5zIiwiY3JlYXRlIiwia2V5IiwiYmluZCIsIm4iLCJvYmplY3QiLCJwcm9wZXJ0eSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwicCIsInMiLCJ0b1N0cmluZyIsImlzQXJyYXkiLCJ2YWwiLCJpc1VuZGVmaW5lZCIsImlzT2JqZWN0IiwiaXNGdW5jdGlvbiIsImZvckVhY2giLCJvYmoiLCJmbiIsImxlbmd0aCIsImlzQXJyYXlCdWZmZXIiLCJpc0J1ZmZlciIsImNvbnN0cnVjdG9yIiwiaXNGb3JtRGF0YSIsIkZvcm1EYXRhIiwiaXNBcnJheUJ1ZmZlclZpZXciLCJBcnJheUJ1ZmZlciIsImlzVmlldyIsImJ1ZmZlciIsImlzU3RyaW5nIiwiaXNOdW1iZXIiLCJpc0RhdGUiLCJpc0ZpbGUiLCJpc0Jsb2IiLCJpc1N0cmVhbSIsInBpcGUiLCJpc1VSTFNlYXJjaFBhcmFtcyIsIlVSTFNlYXJjaFBhcmFtcyIsImlzU3RhbmRhcmRCcm93c2VyRW52IiwibmF2aWdhdG9yIiwicHJvZHVjdCIsIndpbmRvdyIsImRvY3VtZW50IiwibWVyZ2UiLCJyZXN1bHQiLCJhc3NpZ25WYWx1ZSIsImFyZ3VtZW50cyIsImRlZXBNZXJnZSIsImV4dGVuZCIsImEiLCJiIiwidGhpc0FyZyIsInRyaW0iLCJzdHIiLCJyZXBsYWNlIiwiY2l0eU5hbWVzIiwiU2V0IiwiY2l0aWVzIiwiY2l0eU5hbWVTaG9ydFRvRnVsbCIsIk1hcCIsImNpdHlOYW1lIiwic2V0Iiwic3Vic3RyIiwiY29sb3JzIiwiaWdub3JlTGlzdCIsIm1hbnVhbE1hcHBpbmciLCJtYW51YWxNYXBwaW5nV2l0UHJvdmluY2UiLCJsb2FkVGVjZW50RGF0YSIsImpzb25wIiwib3B0aW9ucyIsInVybCIsIm1ldGhvZCIsImFkYXB0ZXIiLCJqc29ucEFkYXB0ZXIiLCJ1bmRlZmluZWQiLCJyZXNwb25zZSIsIkpTT04iLCJwYXJzZSIsImRhdGEiLCJhcmVhVHJlZSIsImNoaWxkcmVuIiwibm9ybWFsaXplQ2l0eU5hbWUiLCJwcm92aW5jZU5hbWUiLCJoYXMiLCJpbmNsdWRlcyIsIm5vcm1hbGl6ZWROYW1lIiwic2hvcnROYW1lIiwiY29uc29sZSIsImxvZyIsImdldFJlbWFpbiIsImNvbmZpcm0iLCJkZWFkIiwiaGVhbCIsImdldENvbmZpcm1lZENvdW50IiwiY29uZmlybWVkQ291bnQiLCJwcm92aW5jZSIsInByb3ZpbmNlX3JlbWFpbiIsInRvdGFsIiwic3VmZml4IiwiY2l0eSIsImNpdHlfcmVtYWluIiwiY291bnQiLCJlbnRyaWVzIiwiaWR4IiwidGhyZXNob2xkIiwidGhlbiIsImRpciIsImRlcHRoIiwiYXJncyIsIkFycmF5IiwiYXBwbHkiLCJ1dGlscyIsImVuY29kZSIsImVuY29kZVVSSUNvbXBvbmVudCIsInBhcmFtcyIsInBhcmFtc1NlcmlhbGl6ZXIiLCJzZXJpYWxpemVkUGFyYW1zIiwicGFydHMiLCJ2IiwidG9JU09TdHJpbmciLCJzdHJpbmdpZnkiLCJwdXNoIiwiam9pbiIsImhhc2htYXJrSW5kZXgiLCJpbmRleE9mIiwic2xpY2UiLCJfX0NBTkNFTF9fIiwibm9ybWFsaXplSGVhZGVyTmFtZSIsIkRFRkFVTFRfQ09OVEVOVF9UWVBFIiwic2V0Q29udGVudFR5cGVJZlVuc2V0IiwiaGVhZGVycyIsImRlZmF1bHRzIiwiWE1MSHR0cFJlcXVlc3QiLCJwcm9jZXNzIiwidHJhbnNmb3JtUmVxdWVzdCIsInRyYW5zZm9ybVJlc3BvbnNlIiwiZSIsInRpbWVvdXQiLCJ4c3JmQ29va2llTmFtZSIsInhzcmZIZWFkZXJOYW1lIiwibWF4Q29udGVudExlbmd0aCIsInZhbGlkYXRlU3RhdHVzIiwic3RhdHVzIiwiY29tbW9uIiwic2V0dGxlIiwiYnVpbGRVUkwiLCJidWlsZEZ1bGxQYXRoIiwicGFyc2VIZWFkZXJzIiwiaXNVUkxTYW1lT3JpZ2luIiwiY3JlYXRlRXJyb3IiLCJjb25maWciLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInJlcXVlc3REYXRhIiwicmVxdWVzdEhlYWRlcnMiLCJyZXF1ZXN0IiwiYXV0aCIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJBdXRob3JpemF0aW9uIiwiYnRvYSIsImZ1bGxQYXRoIiwiYmFzZVVSTCIsIm9wZW4iLCJ0b1VwcGVyQ2FzZSIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJyZXNwb25zZVVSTCIsInJlc3BvbnNlSGVhZGVycyIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsInJlc3BvbnNlVHlwZSIsInJlc3BvbnNlVGV4dCIsInN0YXR1c1RleHQiLCJvbmFib3J0Iiwib25lcnJvciIsIm9udGltZW91dCIsInRpbWVvdXRFcnJvck1lc3NhZ2UiLCJjb29raWVzIiwieHNyZlZhbHVlIiwid2l0aENyZWRlbnRpYWxzIiwicmVhZCIsInRvTG93ZXJDYXNlIiwic2V0UmVxdWVzdEhlYWRlciIsIm9uRG93bmxvYWRQcm9ncmVzcyIsImFkZEV2ZW50TGlzdGVuZXIiLCJvblVwbG9hZFByb2dyZXNzIiwidXBsb2FkIiwiY2FuY2VsVG9rZW4iLCJwcm9taXNlIiwiY2FuY2VsIiwiYWJvcnQiLCJzZW5kIiwiZW5oYW5jZUVycm9yIiwibWVzc2FnZSIsImNvZGUiLCJlcnJvciIsIkVycm9yIiwiY29uZmlnMSIsImNvbmZpZzIiLCJ2YWx1ZUZyb21Db25maWcyS2V5cyIsIm1lcmdlRGVlcFByb3BlcnRpZXNLZXlzIiwiZGVmYXVsdFRvQ29uZmlnMktleXMiLCJwcm9wIiwiYXhpb3NLZXlzIiwiY29uY2F0Iiwib3RoZXJLZXlzIiwia2V5cyIsImZpbHRlciIsIkNhbmNlbCIsInRoaXMiLCJtYXAiLCJkaXNQcm92aW5jZSIsImRpc0Nob25ncWluZyIsImxheWVyIiwiY2FjaGUiLCJnZXRDb3VudEJ5TmFtZSIsImdldENvbG9yQnlOYW1lIiwiY2xpY2tIYW5kZXIiLCJldiIsInB4IiwicGl4ZWwiLCJwcm9wcyIsImdldERpc3RyaWN0QnlDb250YWluZXJQb3MiLCJzZXBlcmF0b3IiLCJhZGNvZGVfcHJvIiwidGV4dCIsIk5BTUVfQ0hOIiwibGFiZWxNYXJrZXIiLCJBTWFwIiwiTGFiZWxNYXJrZXIiLCJwb3NpdGlvbiIsIngiLCJ5IiwiY29udGVudCIsInJhbmsiLCJhZGQiLCJwbHVnaW4iLCJpc19jaG9uZ3FpbmciLCJzdWJkaXN0cmljdCIsImRpc3RyaWN0c0hhbmRsZXIiLCJlbnRyeSIsImRpc3RyaWN0TGlzdCIsIm9wdGlvbiIsImNlbnRlciIsImFkY29kZSIsImNob25ncWluZ19kb3dudG93biIsImFkY29kZV9jaXQiLCJkaXN0cmljdFNlYXJjaCIsIkRpc3RyaWN0U2VhcmNoIiwibGV2ZWwiLCJrIiwic2VhcmNoIiwiem9vbSIsInNjcmVlbiIsIndpZHRoIiwicGl0Y2giLCJ2aWV3TW9kZSIsIkRpc3RyaWN0TGF5ZXIiLCJQcm92aW5jZSIsInpJbmRleCIsInN0eWxlcyIsImZpbGwiLCJwcm9wZXJ0aWVzIiwic2V0TWFwIiwib24iLCJMYWJlbHNMYXllciIsImZpdFZpZXciLCJ3ZWJwYWNrUG9seWZpbGwiLCJkZXByZWNhdGUiLCJwYXRocyIsIkF4aW9zIiwibWVyZ2VDb25maWciLCJjcmVhdGVJbnN0YW5jZSIsImRlZmF1bHRDb25maWciLCJjb250ZXh0IiwiaW5zdGFuY2UiLCJheGlvcyIsImluc3RhbmNlQ29uZmlnIiwiQ2FuY2VsVG9rZW4iLCJpc0NhbmNlbCIsImFsbCIsInByb21pc2VzIiwic3ByZWFkIiwiZGVmYXVsdCIsIkludGVyY2VwdG9yTWFuYWdlciIsImRpc3BhdGNoUmVxdWVzdCIsImludGVyY2VwdG9ycyIsImNoYWluIiwiaW50ZXJjZXB0b3IiLCJ1bnNoaWZ0IiwiZnVsZmlsbGVkIiwicmVqZWN0ZWQiLCJzaGlmdCIsImdldFVyaSIsImhhbmRsZXJzIiwidXNlIiwiZWplY3QiLCJpZCIsImgiLCJ0cmFuc2Zvcm1EYXRhIiwidGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZCIsInRocm93SWZSZXF1ZXN0ZWQiLCJyZWFzb24iLCJmbnMiLCJjYWNoZWRTZXRUaW1lb3V0IiwiY2FjaGVkQ2xlYXJUaW1lb3V0IiwiZGVmYXVsdFNldFRpbW91dCIsImRlZmF1bHRDbGVhclRpbWVvdXQiLCJydW5UaW1lb3V0IiwiZnVuIiwic2V0VGltZW91dCIsImNsZWFyVGltZW91dCIsImN1cnJlbnRRdWV1ZSIsInF1ZXVlIiwiZHJhaW5pbmciLCJxdWV1ZUluZGV4IiwiY2xlYW5VcE5leHRUaWNrIiwiZHJhaW5RdWV1ZSIsImxlbiIsInJ1biIsIm1hcmtlciIsInJ1bkNsZWFyVGltZW91dCIsIkl0ZW0iLCJhcnJheSIsIm5vb3AiLCJuZXh0VGljayIsInRpdGxlIiwiYnJvd3NlciIsImVudiIsImFyZ3YiLCJ2ZXJzaW9uIiwidmVyc2lvbnMiLCJhZGRMaXN0ZW5lciIsIm9uY2UiLCJvZmYiLCJyZW1vdmVMaXN0ZW5lciIsInJlbW92ZUFsbExpc3RlbmVycyIsImVtaXQiLCJwcmVwZW5kTGlzdGVuZXIiLCJwcmVwZW5kT25jZUxpc3RlbmVyIiwibGlzdGVuZXJzIiwiYmluZGluZyIsImN3ZCIsImNoZGlyIiwidW1hc2siLCJpc0F4aW9zRXJyb3IiLCJ0b0pTT04iLCJkZXNjcmlwdGlvbiIsIm51bWJlciIsImZpbGVOYW1lIiwibGluZU51bWJlciIsImNvbHVtbk51bWJlciIsInN0YWNrIiwiaXNBYnNvbHV0ZVVSTCIsImNvbWJpbmVVUkxzIiwicmVxdWVzdGVkVVJMIiwidGVzdCIsInJlbGF0aXZlVVJMIiwiaWdub3JlRHVwbGljYXRlT2YiLCJwYXJzZWQiLCJzcGxpdCIsImxpbmUiLCJvcmlnaW5VUkwiLCJtc2llIiwidXNlckFnZW50IiwidXJsUGFyc2luZ05vZGUiLCJjcmVhdGVFbGVtZW50IiwicmVzb2x2ZVVSTCIsImhyZWYiLCJzZXRBdHRyaWJ1dGUiLCJwcm90b2NvbCIsImhvc3QiLCJoYXNoIiwiaG9zdG5hbWUiLCJwb3J0IiwicGF0aG5hbWUiLCJjaGFyQXQiLCJsb2NhdGlvbiIsInJlcXVlc3RVUkwiLCJ3cml0ZSIsImV4cGlyZXMiLCJwYXRoIiwiZG9tYWluIiwic2VjdXJlIiwiY29va2llIiwiRGF0ZSIsInRvR01UU3RyaW5nIiwibWF0Y2giLCJSZWdFeHAiLCJkZWNvZGVVUklDb21wb25lbnQiLCJyZW1vdmUiLCJub3ciLCJleGVjdXRvciIsIlR5cGVFcnJvciIsInJlc29sdmVQcm9taXNlIiwidG9rZW4iLCJzb3VyY2UiLCJjYWxsYmFjayIsImFyciIsImNpZCIsImJ1aWxkUGFyYW1zIiwic2NyaXB0Iiwic3JjIiwib25sb2FkIiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwiYXN5bmMiLCJvbGQiLCJpc0Fib3J0IiwicmVzcG9uc2VEYXRhIiwiYWRkaXRpb25hbFBhcmFtcyIsIl8iLCJnZXRUaW1lIiwiY2FsbGJhY2tQYXJhbU5hbWUiLCJoZWFkIiwiYXBwZW5kQ2hpbGQiXSwibWFwcGluZ3MiOiJhQUNFLElBQUlBLEVBQW1CLEdBR3ZCLFNBQVNDLEVBQW9CQyxHQUc1QixHQUFHRixFQUFpQkUsR0FDbkIsT0FBT0YsRUFBaUJFLEdBQVVDLFFBR25DLElBQUlDLEVBQVNKLEVBQWlCRSxHQUFZLENBQ3pDRyxFQUFHSCxFQUNISSxHQUFHLEVBQ0hILFFBQVMsSUFVVixPQU5BSSxFQUFRTCxHQUFVTSxLQUFLSixFQUFPRCxRQUFTQyxFQUFRQSxFQUFPRCxRQUFTRixHQUcvREcsRUFBT0UsR0FBSSxFQUdKRixFQUFPRCxRQUtmRixFQUFvQlEsRUFBSUYsRUFHeEJOLEVBQW9CUyxFQUFJVixFQUd4QkMsRUFBb0JVLEVBQUksU0FBU1IsRUFBU1MsRUFBTUMsR0FDM0NaLEVBQW9CYSxFQUFFWCxFQUFTUyxJQUNsQ0csT0FBT0MsZUFBZWIsRUFBU1MsRUFBTSxDQUFFSyxZQUFZLEVBQU1DLElBQUtMLEtBS2hFWixFQUFvQmtCLEVBQUksU0FBU2hCLEdBQ1gsb0JBQVhpQixRQUEwQkEsT0FBT0MsYUFDMUNOLE9BQU9DLGVBQWViLEVBQVNpQixPQUFPQyxZQUFhLENBQUVDLE1BQU8sV0FFN0RQLE9BQU9DLGVBQWViLEVBQVMsYUFBYyxDQUFFbUIsT0FBTyxLQVF2RHJCLEVBQW9Cc0IsRUFBSSxTQUFTRCxFQUFPRSxHQUV2QyxHQURVLEVBQVBBLElBQVVGLEVBQVFyQixFQUFvQnFCLElBQy9CLEVBQVBFLEVBQVUsT0FBT0YsRUFDcEIsR0FBVyxFQUFQRSxHQUE4QixpQkFBVkYsR0FBc0JBLEdBQVNBLEVBQU1HLFdBQVksT0FBT0gsRUFDaEYsSUFBSUksRUFBS1gsT0FBT1ksT0FBTyxNQUd2QixHQUZBMUIsRUFBb0JrQixFQUFFTyxHQUN0QlgsT0FBT0MsZUFBZVUsRUFBSSxVQUFXLENBQUVULFlBQVksRUFBTUssTUFBT0EsSUFDdEQsRUFBUEUsR0FBNEIsaUJBQVRGLEVBQW1CLElBQUksSUFBSU0sS0FBT04sRUFBT3JCLEVBQW9CVSxFQUFFZSxFQUFJRSxFQUFLLFNBQVNBLEdBQU8sT0FBT04sRUFBTU0sSUFBUUMsS0FBSyxLQUFNRCxJQUM5SSxPQUFPRixHQUlSekIsRUFBb0I2QixFQUFJLFNBQVMxQixHQUNoQyxJQUFJUyxFQUFTVCxHQUFVQSxFQUFPcUIsV0FDN0IsV0FBd0IsT0FBT3JCLEVBQWdCLFNBQy9DLFdBQThCLE9BQU9BLEdBRXRDLE9BREFILEVBQW9CVSxFQUFFRSxFQUFRLElBQUtBLEdBQzVCQSxHQUlSWixFQUFvQmEsRUFBSSxTQUFTaUIsRUFBUUMsR0FBWSxPQUFPakIsT0FBT2tCLFVBQVVDLGVBQWUxQixLQUFLdUIsRUFBUUMsSUFHekcvQixFQUFvQmtDLEVBQUksR0FJakJsQyxFQUFvQkEsRUFBb0JtQyxFQUFJLEksK0JDaEZyRCxJQUFJUCxFQUFPLEVBQVEsR0FNZlEsRUFBV3RCLE9BQU9rQixVQUFVSSxTQVFoQyxTQUFTQyxFQUFRQyxHQUNmLE1BQThCLG1CQUF2QkYsRUFBUzdCLEtBQUsrQixHQVN2QixTQUFTQyxFQUFZRCxHQUNuQixZQUFzQixJQUFSQSxFQTRFaEIsU0FBU0UsRUFBU0YsR0FDaEIsT0FBZSxPQUFSQSxHQUErQixpQkFBUkEsRUF1Q2hDLFNBQVNHLEVBQVdILEdBQ2xCLE1BQThCLHNCQUF2QkYsRUFBUzdCLEtBQUsrQixHQXdFdkIsU0FBU0ksRUFBUUMsRUFBS0MsR0FFcEIsR0FBSUQsUUFVSixHQUxtQixpQkFBUkEsSUFFVEEsRUFBTSxDQUFDQSxJQUdMTixFQUFRTSxHQUVWLElBQUssSUFBSXZDLEVBQUksRUFBR0MsRUFBSXNDLEVBQUlFLE9BQVF6QyxFQUFJQyxFQUFHRCxJQUNyQ3dDLEVBQUdyQyxLQUFLLEtBQU1vQyxFQUFJdkMsR0FBSUEsRUFBR3VDLFFBSTNCLElBQUssSUFBSWhCLEtBQU9nQixFQUNWN0IsT0FBT2tCLFVBQVVDLGVBQWUxQixLQUFLb0MsRUFBS2hCLElBQzVDaUIsRUFBR3JDLEtBQUssS0FBTW9DLEVBQUloQixHQUFNQSxFQUFLZ0IsR0FvRnJDeEMsRUFBT0QsUUFBVSxDQUNmbUMsUUFBU0EsRUFDVFMsY0FwUkYsU0FBdUJSLEdBQ3JCLE1BQThCLHlCQUF2QkYsRUFBUzdCLEtBQUsrQixJQW9SckJTLFNBaFNGLFNBQWtCVCxHQUNoQixPQUFlLE9BQVJBLElBQWlCQyxFQUFZRCxJQUE0QixPQUFwQkEsRUFBSVUsY0FBeUJULEVBQVlELEVBQUlVLGNBQ2hELG1CQUE3QlYsRUFBSVUsWUFBWUQsVUFBMkJULEVBQUlVLFlBQVlELFNBQVNULElBK1JoRlcsV0E1UUYsU0FBb0JYLEdBQ2xCLE1BQTRCLG9CQUFiWSxVQUE4QlosYUFBZVksVUE0UTVEQyxrQkFuUUYsU0FBMkJiLEdBT3pCLE1BTDRCLG9CQUFoQmMsYUFBaUNBLFlBQWtCLE9BQ3BEQSxZQUFZQyxPQUFPZixHQUVuQixHQUFVQSxFQUFVLFFBQU1BLEVBQUlnQixrQkFBa0JGLGFBK1AzREcsU0FwUEYsU0FBa0JqQixHQUNoQixNQUFzQixpQkFBUkEsR0FvUGRrQixTQTNPRixTQUFrQmxCLEdBQ2hCLE1BQXNCLGlCQUFSQSxHQTJPZEUsU0FBVUEsRUFDVkQsWUFBYUEsRUFDYmtCLE9BMU5GLFNBQWdCbkIsR0FDZCxNQUE4QixrQkFBdkJGLEVBQVM3QixLQUFLK0IsSUEwTnJCb0IsT0FqTkYsU0FBZ0JwQixHQUNkLE1BQThCLGtCQUF2QkYsRUFBUzdCLEtBQUsrQixJQWlOckJxQixPQXhNRixTQUFnQnJCLEdBQ2QsTUFBOEIsa0JBQXZCRixFQUFTN0IsS0FBSytCLElBd01yQkcsV0FBWUEsRUFDWm1CLFNBdExGLFNBQWtCdEIsR0FDaEIsT0FBT0UsRUFBU0YsSUFBUUcsRUFBV0gsRUFBSXVCLE9Bc0x2Q0Msa0JBN0tGLFNBQTJCeEIsR0FDekIsTUFBa0Msb0JBQXBCeUIsaUJBQW1DekIsYUFBZXlCLGlCQTZLaEVDLHFCQWpKRixXQUNFLE9BQXlCLG9CQUFkQyxXQUFvRCxnQkFBdEJBLFVBQVVDLFNBQ1ksaUJBQXRCRCxVQUFVQyxTQUNZLE9BQXRCRCxVQUFVQyxXQUkvQixvQkFBWEMsUUFDYSxvQkFBYkMsV0EwSVQxQixRQUFTQSxFQUNUMkIsTUEvRUYsU0FBU0EsSUFDUCxJQUFJQyxFQUFTLEdBQ2IsU0FBU0MsRUFBWWpDLEVBQUtYLEdBQ0csaUJBQWhCMkMsRUFBTzNDLElBQW9DLGlCQUFSVyxFQUM1Q2dDLEVBQU8zQyxHQUFPMEMsRUFBTUMsRUFBTzNDLEdBQU1XLEdBRWpDZ0MsRUFBTzNDLEdBQU9XLEVBSWxCLElBQUssSUFBSWxDLEVBQUksRUFBR0MsRUFBSW1FLFVBQVUzQixPQUFRekMsRUFBSUMsRUFBR0QsSUFDM0NzQyxFQUFROEIsVUFBVXBFLEdBQUltRSxHQUV4QixPQUFPRCxHQW1FUEcsVUF4REYsU0FBU0EsSUFDUCxJQUFJSCxFQUFTLEdBQ2IsU0FBU0MsRUFBWWpDLEVBQUtYLEdBQ0csaUJBQWhCMkMsRUFBTzNDLElBQW9DLGlCQUFSVyxFQUM1Q2dDLEVBQU8zQyxHQUFPOEMsRUFBVUgsRUFBTzNDLEdBQU1XLEdBRXJDZ0MsRUFBTzNDLEdBRGlCLGlCQUFSVyxFQUNGbUMsRUFBVSxHQUFJbkMsR0FFZEEsRUFJbEIsSUFBSyxJQUFJbEMsRUFBSSxFQUFHQyxFQUFJbUUsVUFBVTNCLE9BQVF6QyxFQUFJQyxFQUFHRCxJQUMzQ3NDLEVBQVE4QixVQUFVcEUsR0FBSW1FLEdBRXhCLE9BQU9ELEdBMENQSSxPQS9CRixTQUFnQkMsRUFBR0MsRUFBR0MsR0FRcEIsT0FQQW5DLEVBQVFrQyxHQUFHLFNBQXFCdEMsRUFBS1gsR0FFakNnRCxFQUFFaEQsR0FEQWtELEdBQTBCLG1CQUFSdkMsRUFDWFYsRUFBS1UsRUFBS3VDLEdBRVZ2QyxLQUdOcUMsR0F3QlBHLEtBektGLFNBQWNDLEdBQ1osT0FBT0EsRUFBSUMsUUFBUSxPQUFRLElBQUlBLFFBQVEsT0FBUSxPLHVpRUM5S2pELFlBQ0EsUUFDQSxRQUVNQyxFQUFZLElBQUlDLElBQVlDLEdBQzVCQyxFQUFzQixJQUFJQyxJQUNoQ0osRUFBVXZDLFNBQVEsU0FBQTRDLEdBQ2hCRixFQUFvQkcsSUFBSUQsRUFBU0UsT0FBTyxFQUFHLEdBQUlGLE1BRWpELElBQU1HLEVBQWtDLENBQ3RDLENBQUMsRUFBRyxXQUNKLENBQUMsR0FBSSxXQUNMLENBQUMsR0FBSSxXQUNMLENBQUMsR0FBSSxXQUNMLENBQUMsR0FBSSxXQUNMLENBQUMsR0FBSSxXQUNMLENBQUMsR0FBSSxXQUNMLENBQUMsR0FBSSxXQUNMLENBQUMsR0FBSSxXQUNMLENBQUMsR0FBSSxXQUNMLENBQUMsSUFBSyxXQUNOLENBQUMsSUFBSyxXQUNOLENBQUMsSUFBSyxXQUNOLENBQUMsSUFBTSxXQUNQLENBQUMsSUFBTSxXQUNQLENBQUMsSUFBTSxZQUlIQyxFQUFhLENBQUMsU0FBVSxLQUFNLFFBQVMsU0FBVSxNQUFPLFNBSXhEQyxFQUFnQixJQUFJTixJQUFJLENBQzVCLENBQUMsS0FBTSxPQUNQLENBQUMsTUFBTyxPQUNSLENBQUMsS0FBTSxPQUNQLENBQUMsS0FBTSxPQUNQLENBQUMsS0FBTSxPQUNQLENBQUMsS0FBTSxPQUNQLENBQUMsS0FBTSxPQUNQLENBQUMsS0FBTSxPQUNQLENBQUMsUUFBUyxPQUNWLENBQUMsTUFBTyxTQUNSLENBQUMsTUFBTyxRQUNSLENBQUMsS0FBTSxPQUNQLENBQUMsT0FBUSxPQUNULENBQUMsTUFBTyxPQUNSLENBQUMsT0FBUSxPQUNULENBQUMsT0FBUSxPQUNULENBQUMsUUFBUyxPQUNWLENBQUMsS0FBTSxhQUNQLENBQUMsUUFBUyxTQUNWLENBQUMsUUFBUyxRQUNWLENBQUMsTUFBTyxRQUNSLENBQUMsU0FBVSxRQUNYLENBQUMsUUFBUyxRQUNWLENBQUMsU0FBVSxXQUdQTyxFQUEyQixJQUFJUCxJQUFvQixDQUN2RCxDQUFDLFdBQVksT0FDYixDQUFDLFNBQVUsVUFFYixTQUFzQlEsRUFBZSxHLElBQUUsSUFBQUMsYUFBQSxJQUFRLEdBQVIsRSxrR0FNcEIsT0FMWEMsRUFBK0IsQ0FDbkNDLElBQUssMERBQ0xDLE9BQVEsTUFDUkMsUUFBU0osRUFBUUssT0FBZUMsR0FFakIsR0FBTSxVQUFNTCxJLE9BQzdCLE9BRE1NLEVBQVcsU0FDVixDQUFQLEVBQU9DLEtBQUtDLE1BQU1GLEVBQVNHLEtBQUtBLE1BQU1DLFNBQVMsR0FBR0MsaUJBR3BELFNBQVNDLEVBQWtCQyxFQUFzQnRCLEdBRS9DLEdBQUlNLEVBQXlCaUIsSUFBSUQsRUFBZSxJQUFNdEIsR0FDcEQsT0FBT00sRUFBeUIzRSxJQUFJMkYsRUFBZSxJQUFNdEIsR0FFM0QsR0FBSUssRUFBY2tCLElBQUl2QixHQUNwQixPQUFPSyxFQUFjMUUsSUFBSXFFLEdBRTNCLEdBQUlJLEVBQVdvQixTQUFTeEIsR0FDdEIsTUFBTyxHQUtULElBQUl5QixFQUFpQixHQVFyQixHQU5FQSxFQURFLENBQUMsSUFBSyxJQUFLLEtBQUtELFNBQVN4QixHQUFVLElBQ3BCQSxFQUNRLE1BQWhCc0IsR0FBd0MsS0FBaEJ0QixHQUFVLEdBQzFCQSxFQUVBQSxFQUFXLElBRTFCTCxFQUFVNEIsSUFBSUUsR0FDaEIsT0FBT0EsRUFNVCxJQUFNQyxFQUFZMUIsRUFBU0UsT0FBTyxFQUFHLEdBQ3JDLE9BQUlKLEVBQW9CeUIsSUFBSUcsR0FDMUJELEVBQWlCM0IsRUFBb0JuRSxJQUFJK0YsSUFJM0NDLFFBQVFDLElBQUksNEJBQTZCTixFQUFjdEIsR0FDaEQsSUFHVCxTQUFTNkIsRUFBVVgsR0FDakIsSUFBTWxDLEVBQVNrQyxFQUFLWSxRQUFVWixFQUFLYSxLQUFPYixFQUFLYyxLQUMvQyxHQUFJaEQsRUFBUyxFQUNYLE1BQU1rQyxFQUVSLE9BQU9sQyxFQUdULFNBQWdCaUQsRUFBa0JmLEcsWUFDMUJnQixFQUFpQixJQUFJbkMsSSxJQUMzQixJQUF1QixRQUFBbUIsR0FBSSw4QkFBRSxDQUF4QixJQUFNaUIsRUFBUSxRQUNYQyxFQUFrQlAsRUFBVU0sRUFBU0UsT0FDM0MsR0FBSSxDQUFDLEtBQU0sS0FBTSxNQUFNYixTQUFTVyxFQUFTOUcsTUFBekMsQ0FDRSxJQUFNaUgsRUFBMEIsTUFBakJILEVBQVM5RyxLQUFlLElBQU0sUUFDN0M2RyxFQUFlakMsSUFBSWtDLEVBQVM5RyxLQUFPaUgsRUFBUUYsUUFHN0MsR0FBSSxDQUFDLEtBQU0sS0FBTSxNQUFNWixTQUFTVyxFQUFTOUcsTUFBekMsQ0FDRSxJQUFNaUcsRUFBZWEsRUFBUzlHLEtBQU8sSUFDckM2RyxFQUFlakMsSUFBSXFCLEVBQWNjLFEsSUFHbkMsSUFBbUIsa0JBQUFELEVBQVNmLFdBQVEsOEJBQUUsQ0FBakMsSUFBTW1CLEVBQUksUUFDUEMsRUFBY1gsRUFBVVUsRUFBS0YsT0FDN0JaLEVBQXlCSixFQUFrQmMsRUFBUzlHLEtBQU1rSCxFQUFLbEgsTUFDL0MsSUFBbEJvRyxJQUNFUyxFQUFlWCxJQUFJRSxHQUNyQlMsRUFBZWpDLElBQUl3QixFQUFnQlMsRUFBZXZHLElBQUk4RixHQUFrQmUsR0FFeEVOLEVBQWVqQyxJQUFJd0IsRUFBZ0JlLEssb01BSzNDLE9BQU9OLEVBbkZULG1CQXlEQSxzQkE2QkEsb0JBQXlCTyxHLFFBQ3ZCLEdBQWEsR0FBVEEsRUFDRixNQUFPLFUsSUFFVCxJQUFvQyxRQUFBdEMsRUFBT3VDLFdBQVMsOEJBQUUsQ0FBM0MsbUJBQUNDLEVBQUEsS0FBSyxZQUFDQyxFQUFBLEtBQVcsS0FDM0IsR0FBVyxHQUFQRCxHQUdBRixFQUFRRyxFQUNWLE9BQU96QyxFQUFPd0MsRUFBTSxHQUFHLEksaUdBRzNCLE1BQU8sV0FTNkIsV0FBaUI5SCxHQUxyRDBGLEVBQWUsQ0FBRUMsT0FBTyxJQUFTcUMsTUFBSyxTQUFBM0IsR0FDcENTLFFBQVFtQixJQUFJYixFQUFrQmYsR0FBTyxDQUFFNkIsTUFBTyxZLGtEQ3JLbERsSSxFQUFPRCxRQUFVLFNBQWMwQyxFQUFJaUMsR0FDakMsT0FBTyxXQUVMLElBREEsSUFBSXlELEVBQU8sSUFBSUMsTUFBTS9ELFVBQVUzQixRQUN0QnpDLEVBQUksRUFBR0EsRUFBSWtJLEVBQUt6RixPQUFRekMsSUFDL0JrSSxFQUFLbEksR0FBS29FLFVBQVVwRSxHQUV0QixPQUFPd0MsRUFBRzRGLE1BQU0zRCxFQUFTeUQsTSw2QkNON0IsSUFBSUcsRUFBUSxFQUFRLEdBRXBCLFNBQVNDLEVBQU9wRyxHQUNkLE9BQU9xRyxtQkFBbUJyRyxHQUN4QjBDLFFBQVEsUUFBUyxLQUNqQkEsUUFBUSxRQUFTLEtBQ2pCQSxRQUFRLE9BQVEsS0FDaEJBLFFBQVEsUUFBUyxLQUNqQkEsUUFBUSxPQUFRLEtBQ2hCQSxRQUFRLFFBQVMsS0FDakJBLFFBQVEsUUFBUyxLQVVyQjdFLEVBQU9ELFFBQVUsU0FBa0I4RixFQUFLNEMsRUFBUUMsR0FFOUMsSUFBS0QsRUFDSCxPQUFPNUMsRUFHVCxJQUFJOEMsRUFDSixHQUFJRCxFQUNGQyxFQUFtQkQsRUFBaUJELFFBQy9CLEdBQUlILEVBQU0zRSxrQkFBa0I4RSxHQUNqQ0UsRUFBbUJGLEVBQU94RyxlQUNyQixDQUNMLElBQUkyRyxFQUFRLEdBRVpOLEVBQU0vRixRQUFRa0csR0FBUSxTQUFtQnRHLEVBQUtYLEdBQ3hDVyxVQUlBbUcsRUFBTXBHLFFBQVFDLEdBQ2hCWCxHQUFZLEtBRVpXLEVBQU0sQ0FBQ0EsR0FHVG1HLEVBQU0vRixRQUFRSixHQUFLLFNBQW9CMEcsR0FDakNQLEVBQU1oRixPQUFPdUYsR0FDZkEsRUFBSUEsRUFBRUMsY0FDR1IsRUFBTWpHLFNBQVN3RyxLQUN4QkEsRUFBSTFDLEtBQUs0QyxVQUFVRixJQUVyQkQsRUFBTUksS0FBS1QsRUFBTy9HLEdBQU8sSUFBTStHLEVBQU9NLFdBSTFDRixFQUFtQkMsRUFBTUssS0FBSyxLQUdoQyxHQUFJTixFQUFrQixDQUNwQixJQUFJTyxFQUFnQnJELEVBQUlzRCxRQUFRLE1BQ1QsSUFBbkJELElBQ0ZyRCxFQUFNQSxFQUFJdUQsTUFBTSxFQUFHRixJQUdyQnJELEtBQThCLElBQXRCQSxFQUFJc0QsUUFBUSxLQUFjLElBQU0sS0FBT1IsRUFHakQsT0FBTzlDLEksNkJDbkVUN0YsRUFBT0QsUUFBVSxTQUFrQm1CLEdBQ2pDLFNBQVVBLElBQVNBLEVBQU1tSSxjLDhCQ0gzQixZQUVBLElBQUlmLEVBQVEsRUFBUSxHQUNoQmdCLEVBQXNCLEVBQVEsSUFFOUJDLEVBQXVCLENBQ3pCLGVBQWdCLHFDQUdsQixTQUFTQyxFQUFzQkMsRUFBU3ZJLElBQ2pDb0gsRUFBTWxHLFlBQVlxSCxJQUFZbkIsRUFBTWxHLFlBQVlxSCxFQUFRLG1CQUMzREEsRUFBUSxnQkFBa0J2SSxHQWdCOUIsSUFYTTZFLEVBV0YyRCxFQUFXLENBQ2IzRCxTQVg4QixvQkFBbkI0RCxlQUVUNUQsRUFBVSxFQUFRLFFBQ1UsSUFBWjZELEdBQXVFLHFCQUE1Q2pKLE9BQU9rQixVQUFVSSxTQUFTN0IsS0FBS3dKLEtBRTFFN0QsRUFBVSxFQUFRLElBRWJBLEdBTVA4RCxpQkFBa0IsQ0FBQyxTQUEwQnhELEVBQU1vRCxHQUdqRCxPQUZBSCxFQUFvQkcsRUFBUyxVQUM3QkgsRUFBb0JHLEVBQVMsZ0JBQ3pCbkIsRUFBTXhGLFdBQVd1RCxJQUNuQmlDLEVBQU0zRixjQUFjMEQsSUFDcEJpQyxFQUFNMUYsU0FBU3lELElBQ2ZpQyxFQUFNN0UsU0FBUzRDLElBQ2ZpQyxFQUFNL0UsT0FBTzhDLElBQ2JpQyxFQUFNOUUsT0FBTzZDLEdBRU5BLEVBRUxpQyxFQUFNdEYsa0JBQWtCcUQsR0FDbkJBLEVBQUtsRCxPQUVWbUYsRUFBTTNFLGtCQUFrQjBDLElBQzFCbUQsRUFBc0JDLEVBQVMsbURBQ3hCcEQsRUFBS3BFLFlBRVZxRyxFQUFNakcsU0FBU2dFLElBQ2pCbUQsRUFBc0JDLEVBQVMsa0NBQ3hCdEQsS0FBSzRDLFVBQVUxQyxJQUVqQkEsSUFHVHlELGtCQUFtQixDQUFDLFNBQTJCekQsR0FFN0MsR0FBb0IsaUJBQVRBLEVBQ1QsSUFDRUEsRUFBT0YsS0FBS0MsTUFBTUMsR0FDbEIsTUFBTzBELElBRVgsT0FBTzFELElBT1QyRCxRQUFTLEVBRVRDLGVBQWdCLGFBQ2hCQyxlQUFnQixlQUVoQkMsa0JBQW1CLEVBRW5CQyxlQUFnQixTQUF3QkMsR0FDdEMsT0FBT0EsR0FBVSxLQUFPQSxFQUFTLE1BSXJDWCxFQUFTRCxRQUFVLENBQ2pCYSxPQUFRLENBQ04sT0FBVSxzQ0FJZGhDLEVBQU0vRixRQUFRLENBQUMsU0FBVSxNQUFPLFNBQVMsU0FBNkJ1RCxHQUNwRTRELEVBQVNELFFBQVEzRCxHQUFVLE1BRzdCd0MsRUFBTS9GLFFBQVEsQ0FBQyxPQUFRLE1BQU8sVUFBVSxTQUErQnVELEdBQ3JFNEQsRUFBU0QsUUFBUTNELEdBQVV3QyxFQUFNcEUsTUFBTXFGLE1BR3pDdkosRUFBT0QsUUFBVTJKLEksK0NDOUZqQixJQUFJcEIsRUFBUSxFQUFRLEdBQ2hCaUMsRUFBUyxFQUFRLElBQ2pCQyxFQUFXLEVBQVEsR0FDbkJDLEVBQWdCLEVBQVEsSUFDeEJDLEVBQWUsRUFBUSxJQUN2QkMsRUFBa0IsRUFBUSxJQUMxQkMsRUFBYyxFQUFRLEdBRTFCNUssRUFBT0QsUUFBVSxTQUFvQjhLLEdBQ25DLE9BQU8sSUFBSUMsU0FBUSxTQUE0QkMsRUFBU0MsR0FDdEQsSUFBSUMsRUFBY0osRUFBT3hFLEtBQ3JCNkUsRUFBaUJMLEVBQU9wQixRQUV4Qm5CLEVBQU14RixXQUFXbUksV0FDWkMsRUFBZSxnQkFHeEIsSUFBSUMsRUFBVSxJQUFJeEIsZUFHbEIsR0FBSWtCLEVBQU9PLEtBQU0sQ0FDZixJQUFJQyxFQUFXUixFQUFPTyxLQUFLQyxVQUFZLEdBQ25DQyxFQUFXVCxFQUFPTyxLQUFLRSxVQUFZLEdBQ3ZDSixFQUFlSyxjQUFnQixTQUFXQyxLQUFLSCxFQUFXLElBQU1DLEdBR2xFLElBQUlHLEVBQVdoQixFQUFjSSxFQUFPYSxRQUFTYixFQUFPaEYsS0E0RXBELEdBM0VBc0YsRUFBUVEsS0FBS2QsRUFBTy9FLE9BQU84RixjQUFlcEIsRUFBU2lCLEVBQVVaLEVBQU9wQyxPQUFRb0MsRUFBT25DLG1CQUFtQixHQUd0R3lDLEVBQVFuQixRQUFVYSxFQUFPYixRQUd6Qm1CLEVBQVFVLG1CQUFxQixXQUMzQixHQUFLVixHQUFrQyxJQUF2QkEsRUFBUVcsYUFRRCxJQUFuQlgsRUFBUWQsUUFBa0JjLEVBQVFZLGFBQXdELElBQXpDWixFQUFRWSxZQUFZNUMsUUFBUSxVQUFqRixDQUtBLElBQUk2QyxFQUFrQiwwQkFBMkJiLEVBQVVULEVBQWFTLEVBQVFjLHlCQUEyQixLQUV2Ry9GLEVBQVcsQ0FDYkcsS0FGa0J3RSxFQUFPcUIsY0FBd0MsU0FBeEJyQixFQUFPcUIsYUFBaURmLEVBQVFqRixTQUEvQmlGLEVBQVFnQixhQUdsRjlCLE9BQVFjLEVBQVFkLE9BQ2hCK0IsV0FBWWpCLEVBQVFpQixXQUNwQjNDLFFBQVN1QyxFQUNUbkIsT0FBUUEsRUFDUk0sUUFBU0EsR0FHWFosRUFBT1EsRUFBU0MsRUFBUTlFLEdBR3hCaUYsRUFBVSxPQUlaQSxFQUFRa0IsUUFBVSxXQUNYbEIsSUFJTEgsRUFBT0osRUFBWSxrQkFBbUJDLEVBQVEsZUFBZ0JNLElBRzlEQSxFQUFVLE9BSVpBLEVBQVFtQixRQUFVLFdBR2hCdEIsRUFBT0osRUFBWSxnQkFBaUJDLEVBQVEsS0FBTU0sSUFHbERBLEVBQVUsTUFJWkEsRUFBUW9CLFVBQVksV0FDbEIsSUFBSUMsRUFBc0IsY0FBZ0IzQixFQUFPYixRQUFVLGNBQ3ZEYSxFQUFPMkIsc0JBQ1RBLEVBQXNCM0IsRUFBTzJCLHFCQUUvQnhCLEVBQU9KLEVBQVk0QixFQUFxQjNCLEVBQVEsZUFDOUNNLElBR0ZBLEVBQVUsTUFNUjdDLEVBQU16RSx1QkFBd0IsQ0FDaEMsSUFBSTRJLEVBQVUsRUFBUSxJQUdsQkMsR0FBYTdCLEVBQU84QixpQkFBbUJoQyxFQUFnQmMsS0FBY1osRUFBT1osZUFDOUV3QyxFQUFRRyxLQUFLL0IsRUFBT1oscUJBQ3BCaEUsRUFFRXlHLElBQ0Z4QixFQUFlTCxFQUFPWCxnQkFBa0J3QyxHQXVCNUMsR0FsQkkscUJBQXNCdkIsR0FDeEI3QyxFQUFNL0YsUUFBUTJJLEdBQWdCLFNBQTBCL0ksRUFBS1gsUUFDaEMsSUFBaEJ5SixHQUFxRCxpQkFBdEJ6SixFQUFJcUwscUJBRXJDM0IsRUFBZTFKLEdBR3RCMkosRUFBUTJCLGlCQUFpQnRMLEVBQUtXLE1BTS9CbUcsRUFBTWxHLFlBQVl5SSxFQUFPOEIsbUJBQzVCeEIsRUFBUXdCLGtCQUFvQjlCLEVBQU84QixpQkFJakM5QixFQUFPcUIsYUFDVCxJQUNFZixFQUFRZSxhQUFlckIsRUFBT3FCLGFBQzlCLE1BQU9uQyxHQUdQLEdBQTRCLFNBQXhCYyxFQUFPcUIsYUFDVCxNQUFNbkMsRUFNNkIsbUJBQTlCYyxFQUFPa0Msb0JBQ2hCNUIsRUFBUTZCLGlCQUFpQixXQUFZbkMsRUFBT2tDLG9CQUlQLG1CQUE1QmxDLEVBQU9vQyxrQkFBbUM5QixFQUFRK0IsUUFDM0QvQixFQUFRK0IsT0FBT0YsaUJBQWlCLFdBQVluQyxFQUFPb0Msa0JBR2pEcEMsRUFBT3NDLGFBRVR0QyxFQUFPc0MsWUFBWUMsUUFBUXBGLE1BQUssU0FBb0JxRixHQUM3Q2xDLElBSUxBLEVBQVFtQyxRQUNSdEMsRUFBT3FDLEdBRVBsQyxFQUFVLGNBSU1sRixJQUFoQmdGLElBQ0ZBLEVBQWMsTUFJaEJFLEVBQVFvQyxLQUFLdEMsUSw2QkMvS2pCLElBQUl1QyxFQUFlLEVBQVEsSUFZM0J4TixFQUFPRCxRQUFVLFNBQXFCME4sRUFBUzVDLEVBQVE2QyxFQUFNdkMsRUFBU2pGLEdBQ3BFLElBQUl5SCxFQUFRLElBQUlDLE1BQU1ILEdBQ3RCLE9BQU9ELEVBQWFHLEVBQU85QyxFQUFRNkMsRUFBTXZDLEVBQVNqRixLLDZCQ2RwRCxJQUFJb0MsRUFBUSxFQUFRLEdBVXBCdEksRUFBT0QsUUFBVSxTQUFxQjhOLEVBQVNDLEdBRTdDQSxFQUFVQSxHQUFXLEdBQ3JCLElBQUlqRCxFQUFTLEdBRVRrRCxFQUF1QixDQUFDLE1BQU8sU0FBVSxTQUFVLFFBQ25EQyxFQUEwQixDQUFDLFVBQVcsT0FBUSxTQUM5Q0MsRUFBdUIsQ0FDekIsVUFBVyxNQUFPLG1CQUFvQixvQkFBcUIsbUJBQzNELFVBQVcsa0JBQW1CLFVBQVcsZUFBZ0IsaUJBQ3pELGlCQUFrQixtQkFBb0IscUJBQ3RDLG1CQUFvQixpQkFBa0IsZUFBZ0IsWUFDdEQsYUFBYyxjQUFlLGNBRy9CM0YsRUFBTS9GLFFBQVF3TCxHQUFzQixTQUEwQkcsUUFDL0IsSUFBbEJKLEVBQVFJLEtBQ2pCckQsRUFBT3FELEdBQVFKLEVBQVFJLE9BSTNCNUYsRUFBTS9GLFFBQVF5TCxHQUF5QixTQUE2QkUsR0FDOUQ1RixFQUFNakcsU0FBU3lMLEVBQVFJLElBQ3pCckQsRUFBT3FELEdBQVE1RixFQUFNaEUsVUFBVXVKLEVBQVFLLEdBQU9KLEVBQVFJLFNBQ3BCLElBQWxCSixFQUFRSSxHQUN4QnJELEVBQU9xRCxHQUFRSixFQUFRSSxHQUNkNUYsRUFBTWpHLFNBQVN3TCxFQUFRSyxJQUNoQ3JELEVBQU9xRCxHQUFRNUYsRUFBTWhFLFVBQVV1SixFQUFRSyxTQUNMLElBQWxCTCxFQUFRSyxLQUN4QnJELEVBQU9xRCxHQUFRTCxFQUFRSyxPQUkzQjVGLEVBQU0vRixRQUFRMEwsR0FBc0IsU0FBMEJDLFFBQy9CLElBQWxCSixFQUFRSSxHQUNqQnJELEVBQU9xRCxHQUFRSixFQUFRSSxRQUNXLElBQWxCTCxFQUFRSyxLQUN4QnJELEVBQU9xRCxHQUFRTCxFQUFRSyxPQUkzQixJQUFJQyxFQUFZSixFQUNiSyxPQUFPSixHQUNQSSxPQUFPSCxHQUVOSSxFQUFZMU4sT0FDYjJOLEtBQUtSLEdBQ0xTLFFBQU8sU0FBeUIvTSxHQUMvQixPQUFtQyxJQUE1QjJNLEVBQVVoRixRQUFRM0gsTUFXN0IsT0FSQThHLEVBQU0vRixRQUFROEwsR0FBVyxTQUFtQ0gsUUFDN0IsSUFBbEJKLEVBQVFJLEdBQ2pCckQsRUFBT3FELEdBQVFKLEVBQVFJLFFBQ1csSUFBbEJMLEVBQVFLLEtBQ3hCckQsRUFBT3FELEdBQVFMLEVBQVFLLE9BSXBCckQsSSw2QkMvRFQsU0FBUzJELEVBQU9mLEdBQ2RnQixLQUFLaEIsUUFBVUEsRUFHakJlLEVBQU8zTSxVQUFVSSxTQUFXLFdBQzFCLE1BQU8sVUFBWXdNLEtBQUtoQixRQUFVLEtBQU9nQixLQUFLaEIsUUFBVSxLQUcxRGUsRUFBTzNNLFVBQVV3SCxZQUFhLEVBRTlCckosRUFBT0QsUUFBVXlPLEcsNkJDbEJqQixXQUNJRSxFQUNBQyxFQUNBQyxFQUNBQyxFQUpKLE9BTUl4SCxFQUFpQixJQUFJbkMsSUFDckI0SixFQUFRLElBQUk1SixJQUVoQixTQUFTNkosRUFBZXZPLEdBQ3RCLElBQUlvSCxFQUFRLEVBSVosT0FISVAsRUFBZVgsSUFBSWxHLEtBQ3JCb0gsRUFBUVAsRUFBZXZHLElBQUlOLElBRXRCb0gsRUFHVCxTQUFTb0gsRUFBZXhPLEdBRXRCLE9BRGMsbUJBQVN1TyxFQUFldk8sSUEwRnhDLFNBQVN5TyxFQUFZQyxHQUluQixJQUFJQyxFQUFLRCxFQUFHRSxNQUNSQyxFQUFRVixFQUFZVywwQkFBMEJILEdBVWxELEdBTktFLElBQ0hBLEVBQVFULEVBQWFVLDBCQUEwQkgsSUFLN0NFLEVBQU8sQ0FDVCxNQUFNRSxFQUFZLElBRWxCLEdBQUksQ0FBQyxTQUFVLFNBQVUsU0FBVSxTQUFVLFNBQVUsVUFBVTVJLFNBQVMwSSxFQUFNRyxXQUFXdk4sWUFBYSxDQUN0RyxNQUFNd04sRUFBT0osRUFBTUssU0FBV0gsRUFBWVIsRUFBZU0sRUFBTUssVUFFL0QsSUFBSUMsRUFBYyxJQUFJQyxLQUFLQyxZQUFZLENBQ3JDQyxTQUFVLENBQUNULEVBQU1VLEVBQUdWLEVBQU1XLEdBQzFCUCxLQUFNLENBQUVRLFFBQVNSLEdBQ2pCUyxLQUFNLElBRVJyQixFQUFNc0IsSUFBSVIsUUFHVkMsS0FBS1EsT0FBTyx1QkFBdUIsV0FDakMsTUFBTUMsRUFBOEMsVUFBL0JoQixFQUFNRyxXQUFXdk4sV0FDaENxTyxFQUFjRCxFQUFlLEVBQUksRUFFdkMsU0FBU0UsRUFBaUJwTSxHQUN4QixHQUFLa00sRUFlRSxDQUVMLElBQUssTUFBTUcsS0FBU3JNLEVBQU9zTSxhQUFhLEdBQUdBLGFBQWEsR0FBR0EsYUFBYyxDQUN2RSxNQUFNQyxFQUFTLENBQ2JaLFNBQVVVLEVBQU1HLE9BQ2hCbEIsS0FBTSxDQUNKUSxRQUFTTyxFQUFNaFEsS0FBTytPLEVBQVlSLEVBQWV5QixFQUFNaFEsT0FFekQwUCxLQUFNTSxFQUFNSSxRQUFVdkIsRUFBTXVCLE9BQU8zTyxXQUFhLEVBQUksR0FoS3RELEVBcUtJME4sRUFBYyxJQUFJQyxLQUFLQyxZQUFZYSxHQUN2QzdCLEVBQU1zQixJQUFJUixHQUdaLElBQUl0SSxFQUFpQixFQUNyQixNQUFNd0osRUFBcUIxTSxFQUFPc00sYUFBYSxHQUFHQSxhQUFhLEdBQy9ELElBQUssTUFBTUQsS0FBU0ssRUFBbUJKLGFBQ3JDcEosR0FBa0IwSCxFQUFleUIsRUFBTWhRLE1BRXpDLE1BQU1rUSxFQUFTLENBQ2JaLFNBQVVlLEVBQW1CRixPQUM3QmxCLEtBQU0sQ0FDSlEsUUFBU1ksRUFBbUJyUSxLQUFPK08sRUFBWWxJLEdBRWpENkksS0FBcUMsVUFBL0JiLEVBQU15QixXQUFXN08sV0FBeUIsRUFBSSxHQW5McEQsRUF3TEUwTixFQUFjLElBQUlDLEtBQUtDLFlBQVlhLEdBQ3ZDN0IsRUFBTXNCLElBQUlSLFFBL0NWLElBQUssTUFBTWEsS0FBU3JNLEVBQU9zTSxhQUFhLEdBQUdBLGFBQWMsQ0FDdkQsTUFBTWhCLEVBQU9lLEVBQU1oUSxLQUFPK08sRUFBWVIsRUFBZXlCLEVBQU1oUSxNQUVyRGtRLEVBQVMsQ0FDYlosU0FBVVUsRUFBTUcsT0FDaEJsQixLQUFNLENBQUVRLFFBQVNSLEdBQ2pCUyxLQUFNTSxFQUFNSSxRQUFVdkIsRUFBTXVCLE9BQU8zTyxXQUFhLEVBQUksR0FoSnRELEVBcUpBLElBQUkwTixFQUFjLElBQUlDLEtBQUtDLFlBQVlhLEdBQ3ZDN0IsRUFBTXNCLElBQUlSLElBc0NoQixJQUFJb0IsRUFBaUIsSUFBSW5CLEtBQUtvQixlQUFlLENBQzNDQyxNQUFPLFdBQ1BYLFlBQWFBLElBRWYsTUFBTVksRUFBSTdCLEVBQU1HLFdBQVd2TixXQUN2QjZNLEVBQU1oTyxJQUFJb1EsR0FDWlgsRUFBaUJ6QixFQUFNaE8sSUFBSW9RLElBRTNCSCxFQUFlSSxPQUFPRCxHQUFHLFNBQVM3RyxFQUFRbEcsR0FLMUIsWUFBVmtHLElBQ0Z5RSxFQUFNMUosSUFBSThMLEVBQUcvTSxHQUNib00sRUFBaUJwTSxXQVMvQkYsU0FBUytJLGlCQUFpQixvQkFBb0IsV0FDNUMseUJBQWUsQ0FBRXJILE9BQU8sSUFBUXFDLEtBQUszQixLQUNuQ2dCLEVBQWlCLDRCQUFrQmhCLElBRXBCakIsSUFBSSxNQUFPaUMsRUFBZXZHLElBQUksUUFDN0N1RyxFQUFlakMsSUFBSSxNQUFPaUMsRUFBZXZHLElBQUksUUF0TS9DNE4sRUFBTSxJQUFJa0IsS0FBSzFLLElBQUksWUFBYSxDQUM5QmtNLEtBQU1wTixPQUFPcU4sT0FBT0MsT0FBUyxJQUFNLEVBQUksRUFDdkNYLE9BQVEsQ0FBQyxNQUFPLE1BQ2hCWSxNQUFPLEVBQ1BDLFNBQVUsUUF3Q1o3QyxFQUFjLElBQUlpQixLQUFLNkIsY0FBY0MsU0FBUyxDQUM1Q0MsT0FBUSxHQUNSZixPQXJDa0IsQ0FDbEIsU0FDQSxTQUNBLFNBQ0EsU0FDQSxTQUNBLFNBQ0EsU0FDQSxTQUNBLFNBQ0EsU0FDQSxTQUNBLFNBQ0EsU0FDQSxTQUNBLFNBQ0EsU0FDQSxTQUNBLFNBQ0EsU0FDQSxTQUNBLFNBQ0EsU0FDQSxTQUNBLFNBQ0EsU0FDQSxTQUNBLFNBQ0EsU0FDQSxTQUNBLFNBQ0EsU0FDQSxTQUNBLFVBS0ExSSxNQUFPLEVBQ1AwSixPQUFRLENBQ05DLEtBQU0sU0FBU0MsR0FDYixPQUFPOUMsRUFBZThDLEVBQVdwQyxXQUVuQyxrQkFBbUIsUUFDbkIsY0FBZSxpQkFDZixnQkFBaUIsNEJBSVRxQyxPQUFPckQsSUFFbkJFLEVBQWUsSUFBSWdCLEtBQUs2QixjQUFjQyxTQUFTLENBQzdDQyxPQUFRLEdBQ1JmLE9BQVEsQ0FBQyxVQUNUMUksTUFBTyxFQUNQMEosT0FBUSxDQUNOQyxLQUFNLFNBQVNDLEdBQ2IsT0FBTzlDLEVBQWU4QyxFQUFXcEMsV0FFbkMsa0JBQW1CLFFBQ25CLGNBQWUsaUJBQ2YsZ0JBQWlCLDRCQUlScUMsT0FBT3JELEdBQ3BCQSxFQUFJc0QsR0FBRyxZQUFZLFdBQ2pCbkQsRUFBUSxJQUFJZSxLQUFLcUMsWUFBWSxDQUMzQkMsU0FBUyxJQUVYeEQsRUFBSXlCLElBQUl0QixHQUNSSCxFQUFJc0QsR0FBRyxRQUFTL0MsWSxjQ3hHcEJqUCxFQUFPRCxRQUFVLFNBQVNDLEdBb0J6QixPQW5CS0EsRUFBT21TLGtCQUNYblMsRUFBT29TLFVBQVksYUFDbkJwUyxFQUFPcVMsTUFBUSxHQUVWclMsRUFBT3VHLFdBQVV2RyxFQUFPdUcsU0FBVyxJQUN4QzVGLE9BQU9DLGVBQWVaLEVBQVEsU0FBVSxDQUN2Q2EsWUFBWSxFQUNaQyxJQUFLLFdBQ0osT0FBT2QsRUFBT0UsS0FHaEJTLE9BQU9DLGVBQWVaLEVBQVEsS0FBTSxDQUNuQ2EsWUFBWSxFQUNaQyxJQUFLLFdBQ0osT0FBT2QsRUFBT0MsS0FHaEJELEVBQU9tUyxnQkFBa0IsR0FFbkJuUyxJLHF1RkNwQlJBLEVBQU9ELFFBQVUsRUFBUSxLLDZCQ0V6QixJQUFJdUksRUFBUSxFQUFRLEdBQ2hCN0csRUFBTyxFQUFRLEdBQ2Y2USxFQUFRLEVBQVEsSUFDaEJDLEVBQWMsRUFBUSxHQVMxQixTQUFTQyxFQUFlQyxHQUN0QixJQUFJQyxFQUFVLElBQUlKLEVBQU1HLEdBQ3BCRSxFQUFXbFIsRUFBSzZRLEVBQU16USxVQUFVc0osUUFBU3VILEdBUTdDLE9BTEFwSyxFQUFNL0QsT0FBT29PLEVBQVVMLEVBQU16USxVQUFXNlEsR0FHeENwSyxFQUFNL0QsT0FBT29PLEVBQVVELEdBRWhCQyxFQUlULElBQUlDLEVBQVFKLEVBdEJHLEVBQVEsSUF5QnZCSSxFQUFNTixNQUFRQSxFQUdkTSxFQUFNclIsT0FBUyxTQUFnQnNSLEdBQzdCLE9BQU9MLEVBQWVELEVBQVlLLEVBQU1sSixTQUFVbUosS0FJcERELEVBQU1wRSxPQUFTLEVBQVEsR0FDdkJvRSxFQUFNRSxZQUFjLEVBQVEsSUFDNUJGLEVBQU1HLFNBQVcsRUFBUSxHQUd6QkgsRUFBTUksSUFBTSxTQUFhQyxHQUN2QixPQUFPbkksUUFBUWtJLElBQUlDLElBRXJCTCxFQUFNTSxPQUFTLEVBQVEsSUFFdkJsVCxFQUFPRCxRQUFVNlMsRUFHakI1UyxFQUFPRCxRQUFRb1QsUUFBVVAsRyw2QkNsRHpCLElBQUl0SyxFQUFRLEVBQVEsR0FDaEJrQyxFQUFXLEVBQVEsR0FDbkI0SSxFQUFxQixFQUFRLElBQzdCQyxFQUFrQixFQUFRLElBQzFCZCxFQUFjLEVBQVEsR0FPMUIsU0FBU0QsRUFBTU8sR0FDYnBFLEtBQUsvRSxTQUFXbUosRUFDaEJwRSxLQUFLNkUsYUFBZSxDQUNsQm5JLFFBQVMsSUFBSWlJLEVBQ2JsTixTQUFVLElBQUlrTixHQVNsQmQsRUFBTXpRLFVBQVVzSixRQUFVLFNBQWlCTixHQUduQixpQkFBWEEsR0FDVEEsRUFBU3hHLFVBQVUsSUFBTSxJQUNsQndCLElBQU14QixVQUFVLEdBRXZCd0csRUFBU0EsR0FBVSxJQUdyQkEsRUFBUzBILEVBQVk5RCxLQUFLL0UsU0FBVW1CLElBR3pCL0UsT0FDVCtFLEVBQU8vRSxPQUFTK0UsRUFBTy9FLE9BQU8rRyxjQUNyQjRCLEtBQUsvRSxTQUFTNUQsT0FDdkIrRSxFQUFPL0UsT0FBUzJJLEtBQUsvRSxTQUFTNUQsT0FBTytHLGNBRXJDaEMsRUFBTy9FLE9BQVMsTUFJbEIsSUFBSXlOLEVBQVEsQ0FBQ0YsT0FBaUJwTixHQUMxQm1ILEVBQVV0QyxRQUFRQyxRQUFRRixHQVU5QixJQVJBNEQsS0FBSzZFLGFBQWFuSSxRQUFRNUksU0FBUSxTQUFvQ2lSLEdBQ3BFRCxFQUFNRSxRQUFRRCxFQUFZRSxVQUFXRixFQUFZRyxhQUduRGxGLEtBQUs2RSxhQUFhcE4sU0FBUzNELFNBQVEsU0FBa0NpUixHQUNuRUQsRUFBTXZLLEtBQUt3SyxFQUFZRSxVQUFXRixFQUFZRyxhQUd6Q0osRUFBTTdRLFFBQ1gwSyxFQUFVQSxFQUFRcEYsS0FBS3VMLEVBQU1LLFFBQVNMLEVBQU1LLFNBRzlDLE9BQU94RyxHQUdUa0YsRUFBTXpRLFVBQVVnUyxPQUFTLFNBQWdCaEosR0FFdkMsT0FEQUEsRUFBUzBILEVBQVk5RCxLQUFLL0UsU0FBVW1CLEdBQzdCTCxFQUFTSyxFQUFPaEYsSUFBS2dGLEVBQU9wQyxPQUFRb0MsRUFBT25DLGtCQUFrQjdELFFBQVEsTUFBTyxLQUlyRnlELEVBQU0vRixRQUFRLENBQUMsU0FBVSxNQUFPLE9BQVEsWUFBWSxTQUE2QnVELEdBRS9Fd00sRUFBTXpRLFVBQVVpRSxHQUFVLFNBQVNELEVBQUtnRixHQUN0QyxPQUFPNEQsS0FBS3RELFFBQVE3QyxFQUFNcEUsTUFBTTJHLEdBQVUsR0FBSSxDQUM1Qy9FLE9BQVFBLEVBQ1JELElBQUtBLFNBS1h5QyxFQUFNL0YsUUFBUSxDQUFDLE9BQVEsTUFBTyxVQUFVLFNBQStCdUQsR0FFckV3TSxFQUFNelEsVUFBVWlFLEdBQVUsU0FBU0QsRUFBS1EsRUFBTXdFLEdBQzVDLE9BQU80RCxLQUFLdEQsUUFBUTdDLEVBQU1wRSxNQUFNMkcsR0FBVSxHQUFJLENBQzVDL0UsT0FBUUEsRUFDUkQsSUFBS0EsRUFDTFEsS0FBTUEsU0FLWnJHLEVBQU9ELFFBQVV1UyxHLDZCQzNGakIsSUFBSWhLLEVBQVEsRUFBUSxHQUVwQixTQUFTOEssSUFDUDNFLEtBQUtxRixTQUFXLEdBV2xCVixFQUFtQnZSLFVBQVVrUyxJQUFNLFNBQWFMLEVBQVdDLEdBS3pELE9BSkFsRixLQUFLcUYsU0FBUzlLLEtBQUssQ0FDakIwSyxVQUFXQSxFQUNYQyxTQUFVQSxJQUVMbEYsS0FBS3FGLFNBQVNwUixPQUFTLEdBUWhDMFEsRUFBbUJ2UixVQUFVbVMsTUFBUSxTQUFlQyxHQUM5Q3hGLEtBQUtxRixTQUFTRyxLQUNoQnhGLEtBQUtxRixTQUFTRyxHQUFNLE9BWXhCYixFQUFtQnZSLFVBQVVVLFFBQVUsU0FBaUJFLEdBQ3RENkYsRUFBTS9GLFFBQVFrTSxLQUFLcUYsVUFBVSxTQUF3QkksR0FDekMsT0FBTkEsR0FDRnpSLEVBQUd5UixPQUtUbFUsRUFBT0QsUUFBVXFULEcsNkJDakRqQixJQUFJOUssRUFBUSxFQUFRLEdBQ2hCNkwsRUFBZ0IsRUFBUSxJQUN4QnBCLEVBQVcsRUFBUSxHQUNuQnJKLEVBQVcsRUFBUSxHQUt2QixTQUFTMEssRUFBNkJ2SixHQUNoQ0EsRUFBT3NDLGFBQ1R0QyxFQUFPc0MsWUFBWWtILG1CQVV2QnJVLEVBQU9ELFFBQVUsU0FBeUI4SyxHQTZCeEMsT0E1QkF1SixFQUE2QnZKLEdBRzdCQSxFQUFPcEIsUUFBVW9CLEVBQU9wQixTQUFXLEdBR25Db0IsRUFBT3hFLEtBQU84TixFQUNadEosRUFBT3hFLEtBQ1B3RSxFQUFPcEIsUUFDUG9CLEVBQU9oQixrQkFJVGdCLEVBQU9wQixRQUFVbkIsRUFBTXBFLE1BQ3JCMkcsRUFBT3BCLFFBQVFhLFFBQVUsR0FDekJPLEVBQU9wQixRQUFRb0IsRUFBTy9FLFNBQVcsR0FDakMrRSxFQUFPcEIsU0FHVG5CLEVBQU0vRixRQUNKLENBQUMsU0FBVSxNQUFPLE9BQVEsT0FBUSxNQUFPLFFBQVMsV0FDbEQsU0FBMkJ1RCxVQUNsQitFLEVBQU9wQixRQUFRM0QsT0FJWitFLEVBQU85RSxTQUFXMkQsRUFBUzNELFNBRTFCOEUsR0FBUTdDLE1BQUssU0FBNkI5QixHQVV2RCxPQVRBa08sRUFBNkJ2SixHQUc3QjNFLEVBQVNHLEtBQU84TixFQUNkak8sRUFBU0csS0FDVEgsRUFBU3VELFFBQ1RvQixFQUFPZixtQkFHRjVELEtBQ04sU0FBNEJvTyxHQWM3QixPQWJLdkIsRUFBU3VCLEtBQ1pGLEVBQTZCdkosR0FHekJ5SixHQUFVQSxFQUFPcE8sV0FDbkJvTyxFQUFPcE8sU0FBU0csS0FBTzhOLEVBQ3JCRyxFQUFPcE8sU0FBU0csS0FDaEJpTyxFQUFPcE8sU0FBU3VELFFBQ2hCb0IsRUFBT2YscUJBS05nQixRQUFRRSxPQUFPc0osUSw2QkMxRTFCLElBQUloTSxFQUFRLEVBQVEsR0FVcEJ0SSxFQUFPRCxRQUFVLFNBQXVCc0csRUFBTW9ELEVBQVM4SyxHQU1yRCxPQUpBak0sRUFBTS9GLFFBQVFnUyxHQUFLLFNBQW1COVIsR0FDcEM0RCxFQUFPNUQsRUFBRzRELEVBQU1vRCxNQUdYcEQsSSxjQ2pCVCxJQU9JbU8sRUFDQUMsRUFSQTdLLEVBQVU1SixFQUFPRCxRQUFVLEdBVS9CLFNBQVMyVSxJQUNMLE1BQU0sSUFBSTlHLE1BQU0sbUNBRXBCLFNBQVMrRyxJQUNMLE1BQU0sSUFBSS9HLE1BQU0scUNBc0JwQixTQUFTZ0gsRUFBV0MsR0FDaEIsR0FBSUwsSUFBcUJNLFdBRXJCLE9BQU9BLFdBQVdELEVBQUssR0FHM0IsSUFBS0wsSUFBcUJFLElBQXFCRixJQUFxQk0sV0FFaEUsT0FEQU4sRUFBbUJNLFdBQ1pBLFdBQVdELEVBQUssR0FFM0IsSUFFSSxPQUFPTCxFQUFpQkssRUFBSyxHQUMvQixNQUFNOUssR0FDSixJQUVJLE9BQU95SyxFQUFpQnBVLEtBQUssS0FBTXlVLEVBQUssR0FDMUMsTUFBTTlLLEdBRUosT0FBT3lLLEVBQWlCcFUsS0FBS3FPLEtBQU1vRyxFQUFLLE1BdkNuRCxXQUNHLElBRVFMLEVBRHNCLG1CQUFmTSxXQUNZQSxXQUVBSixFQUV6QixNQUFPM0ssR0FDTHlLLEVBQW1CRSxFQUV2QixJQUVRRCxFQUR3QixtQkFBakJNLGFBQ2NBLGFBRUFKLEVBRTNCLE1BQU81SyxHQUNMMEssRUFBcUJFLEdBakI3QixHQXdFQSxJQUVJSyxFQUZBQyxFQUFRLEdBQ1JDLEdBQVcsRUFFWEMsR0FBYyxFQUVsQixTQUFTQyxJQUNBRixHQUFhRixJQUdsQkUsR0FBVyxFQUNQRixFQUFhdFMsT0FDYnVTLEVBQVFELEVBQWE1RyxPQUFPNkcsR0FFNUJFLEdBQWMsRUFFZEYsRUFBTXZTLFFBQ04yUyxLQUlSLFNBQVNBLElBQ0wsSUFBSUgsRUFBSixDQUdBLElBQUlsTCxFQUFVNEssRUFBV1EsR0FDekJGLEdBQVcsRUFHWCxJQURBLElBQUlJLEVBQU1MLEVBQU12UyxPQUNWNFMsR0FBSyxDQUdQLElBRkFOLEVBQWVDLEVBQ2ZBLEVBQVEsS0FDQ0UsRUFBYUcsR0FDZE4sR0FDQUEsRUFBYUcsR0FBWUksTUFHakNKLEdBQWMsRUFDZEcsRUFBTUwsRUFBTXZTLE9BRWhCc1MsRUFBZSxLQUNmRSxHQUFXLEVBbkVmLFNBQXlCTSxHQUNyQixHQUFJZixJQUF1Qk0sYUFFdkIsT0FBT0EsYUFBYVMsR0FHeEIsSUFBS2YsSUFBdUJFLElBQXdCRixJQUF1Qk0sYUFFdkUsT0FEQU4sRUFBcUJNLGFBQ2RBLGFBQWFTLEdBRXhCLElBRVdmLEVBQW1CZSxHQUM1QixNQUFPekwsR0FDTCxJQUVJLE9BQU8wSyxFQUFtQnJVLEtBQUssS0FBTW9WLEdBQ3ZDLE1BQU96TCxHQUdMLE9BQU8wSyxFQUFtQnJVLEtBQUtxTyxLQUFNK0csS0FnRDdDQyxDQUFnQnpMLElBaUJwQixTQUFTMEwsRUFBS2IsRUFBS2MsR0FDZmxILEtBQUtvRyxJQUFNQSxFQUNYcEcsS0FBS2tILE1BQVFBLEVBWWpCLFNBQVNDLEtBNUJUaE0sRUFBUWlNLFNBQVcsU0FBVWhCLEdBQ3pCLElBQUkxTSxFQUFPLElBQUlDLE1BQU0vRCxVQUFVM0IsT0FBUyxHQUN4QyxHQUFJMkIsVUFBVTNCLE9BQVMsRUFDbkIsSUFBSyxJQUFJekMsRUFBSSxFQUFHQSxFQUFJb0UsVUFBVTNCLE9BQVF6QyxJQUNsQ2tJLEVBQUtsSSxFQUFJLEdBQUtvRSxVQUFVcEUsR0FHaENnVixFQUFNak0sS0FBSyxJQUFJME0sRUFBS2IsRUFBSzFNLElBQ0osSUFBakI4TSxFQUFNdlMsUUFBaUJ3UyxHQUN2Qk4sRUFBV1MsSUFTbkJLLEVBQUs3VCxVQUFVMFQsSUFBTSxXQUNqQjlHLEtBQUtvRyxJQUFJeE0sTUFBTSxLQUFNb0csS0FBS2tILFFBRTlCL0wsRUFBUWtNLE1BQVEsVUFDaEJsTSxFQUFRbU0sU0FBVSxFQUNsQm5NLEVBQVFvTSxJQUFNLEdBQ2RwTSxFQUFRcU0sS0FBTyxHQUNmck0sRUFBUXNNLFFBQVUsR0FDbEJ0TSxFQUFRdU0sU0FBVyxHQUluQnZNLEVBQVFvSSxHQUFLNEQsRUFDYmhNLEVBQVF3TSxZQUFjUixFQUN0QmhNLEVBQVF5TSxLQUFPVCxFQUNmaE0sRUFBUTBNLElBQU1WLEVBQ2RoTSxFQUFRMk0sZUFBaUJYLEVBQ3pCaE0sRUFBUTRNLG1CQUFxQlosRUFDN0JoTSxFQUFRNk0sS0FBT2IsRUFDZmhNLEVBQVE4TSxnQkFBa0JkLEVBQzFCaE0sRUFBUStNLG9CQUFzQmYsRUFFOUJoTSxFQUFRZ04sVUFBWSxTQUFVcFcsR0FBUSxNQUFPLElBRTdDb0osRUFBUWlOLFFBQVUsU0FBVXJXLEdBQ3hCLE1BQU0sSUFBSW9OLE1BQU0scUNBR3BCaEUsRUFBUWtOLElBQU0sV0FBYyxNQUFPLEtBQ25DbE4sRUFBUW1OLE1BQVEsU0FBVTlPLEdBQ3RCLE1BQU0sSUFBSTJGLE1BQU0sbUNBRXBCaEUsRUFBUW9OLE1BQVEsV0FBYSxPQUFPLEksNkJDckxwQyxJQUFJMU8sRUFBUSxFQUFRLEdBRXBCdEksRUFBT0QsUUFBVSxTQUE2QjBKLEVBQVM3QyxHQUNyRDBCLEVBQU0vRixRQUFRa0gsR0FBUyxTQUF1QnZJLEVBQU9WLEdBQy9DQSxJQUFTb0csR0FBa0JwRyxFQUFLb0wsZ0JBQWtCaEYsRUFBZWdGLGdCQUNuRW5DLEVBQVE3QyxHQUFrQjFGLFNBQ25CdUksRUFBUWpKLFMsNkJDTnJCLElBQUlvSyxFQUFjLEVBQVEsR0FTMUI1SyxFQUFPRCxRQUFVLFNBQWdCZ0wsRUFBU0MsRUFBUTlFLEdBQ2hELElBQUlrRSxFQUFpQmxFLEVBQVMyRSxPQUFPVCxnQkFDaENBLEdBQWtCQSxFQUFlbEUsRUFBU21FLFFBQzdDVSxFQUFRN0UsR0FFUjhFLEVBQU9KLEVBQ0wsbUNBQXFDMUUsRUFBU21FLE9BQzlDbkUsRUFBUzJFLE9BQ1QsS0FDQTNFLEVBQVNpRixRQUNUakYsTSw2QkNUTmxHLEVBQU9ELFFBQVUsU0FBc0I0TixFQUFPOUMsRUFBUTZDLEVBQU12QyxFQUFTakYsR0E0Qm5FLE9BM0JBeUgsRUFBTTlDLE9BQVNBLEVBQ1g2QyxJQUNGQyxFQUFNRCxLQUFPQSxHQUdmQyxFQUFNeEMsUUFBVUEsRUFDaEJ3QyxFQUFNekgsU0FBV0EsRUFDakJ5SCxFQUFNc0osY0FBZSxFQUVyQnRKLEVBQU11SixPQUFTLFdBQ2IsTUFBTyxDQUVMekosUUFBU2dCLEtBQUtoQixRQUNkak4sS0FBTWlPLEtBQUtqTyxLQUVYMlcsWUFBYTFJLEtBQUswSSxZQUNsQkMsT0FBUTNJLEtBQUsySSxPQUViQyxTQUFVNUksS0FBSzRJLFNBQ2ZDLFdBQVk3SSxLQUFLNkksV0FDakJDLGFBQWM5SSxLQUFLOEksYUFDbkJDLE1BQU8vSSxLQUFLK0ksTUFFWjNNLE9BQVE0RCxLQUFLNUQsT0FDYjZDLEtBQU1lLEtBQUtmLE9BR1JDLEksNkJDdENULElBQUk4SixFQUFnQixFQUFRLElBQ3hCQyxFQUFjLEVBQVEsSUFXMUIxWCxFQUFPRCxRQUFVLFNBQXVCMkwsRUFBU2lNLEdBQy9DLE9BQUlqTSxJQUFZK0wsRUFBY0UsR0FDckJELEVBQVloTSxFQUFTaU0sR0FFdkJBLEksNkJDVlQzWCxFQUFPRCxRQUFVLFNBQXVCOEYsR0FJdEMsTUFBTyxnQ0FBZ0MrUixLQUFLL1IsSyw2QkNIOUM3RixFQUFPRCxRQUFVLFNBQXFCMkwsRUFBU21NLEdBQzdDLE9BQU9BLEVBQ0huTSxFQUFRN0csUUFBUSxPQUFRLElBQU0sSUFBTWdULEVBQVloVCxRQUFRLE9BQVEsSUFDaEU2RyxJLDZCQ1ZOLElBQUlwRCxFQUFRLEVBQVEsR0FJaEJ3UCxFQUFvQixDQUN0QixNQUFPLGdCQUFpQixpQkFBa0IsZUFBZ0IsT0FDMUQsVUFBVyxPQUFRLE9BQVEsb0JBQXFCLHNCQUNoRCxnQkFBaUIsV0FBWSxlQUFnQixzQkFDN0MsVUFBVyxjQUFlLGNBZ0I1QjlYLEVBQU9ELFFBQVUsU0FBc0IwSixHQUNyQyxJQUNJakksRUFDQVcsRUFDQWxDLEVBSEE4WCxFQUFTLEdBS2IsT0FBS3RPLEdBRUxuQixFQUFNL0YsUUFBUWtILEVBQVF1TyxNQUFNLE9BQU8sU0FBZ0JDLEdBS2pELEdBSkFoWSxFQUFJZ1ksRUFBSzlPLFFBQVEsS0FDakIzSCxFQUFNOEcsRUFBTTNELEtBQUtzVCxFQUFLNVMsT0FBTyxFQUFHcEYsSUFBSTRNLGNBQ3BDMUssRUFBTW1HLEVBQU0zRCxLQUFLc1QsRUFBSzVTLE9BQU9wRixFQUFJLElBRTdCdUIsRUFBSyxDQUNQLEdBQUl1VyxFQUFPdlcsSUFBUXNXLEVBQWtCM08sUUFBUTNILElBQVEsRUFDbkQsT0FHQXVXLEVBQU92VyxHQURHLGVBQVJBLEdBQ2F1VyxFQUFPdlcsR0FBT3VXLEVBQU92VyxHQUFPLElBQUk0TSxPQUFPLENBQUNqTSxJQUV6QzRWLEVBQU92VyxHQUFPdVcsRUFBT3ZXLEdBQU8sS0FBT1csRUFBTUEsTUFLdEQ0VixHQW5CZ0JBLEksNkJDOUJ6QixJQUFJelAsRUFBUSxFQUFRLEdBRXBCdEksRUFBT0QsUUFDTHVJLEVBQU16RSx1QkFJSixXQUNFLElBRUlxVSxFQUZBQyxFQUFPLGtCQUFrQlAsS0FBSzlULFVBQVVzVSxXQUN4Q0MsRUFBaUJwVSxTQUFTcVUsY0FBYyxLQVM1QyxTQUFTQyxFQUFXMVMsR0FDbEIsSUFBSTJTLEVBQU8zUyxFQVdYLE9BVElzUyxJQUVGRSxFQUFlSSxhQUFhLE9BQVFELEdBQ3BDQSxFQUFPSCxFQUFlRyxNQUd4QkgsRUFBZUksYUFBYSxPQUFRRCxHQUc3QixDQUNMQSxLQUFNSCxFQUFlRyxLQUNyQkUsU0FBVUwsRUFBZUssU0FBV0wsRUFBZUssU0FBUzdULFFBQVEsS0FBTSxJQUFNLEdBQ2hGOFQsS0FBTU4sRUFBZU0sS0FDckJ4SCxPQUFRa0gsRUFBZWxILE9BQVNrSCxFQUFlbEgsT0FBT3RNLFFBQVEsTUFBTyxJQUFNLEdBQzNFK1QsS0FBTVAsRUFBZU8sS0FBT1AsRUFBZU8sS0FBSy9ULFFBQVEsS0FBTSxJQUFNLEdBQ3BFZ1UsU0FBVVIsRUFBZVEsU0FDekJDLEtBQU1ULEVBQWVTLEtBQ3JCQyxTQUFpRCxNQUF0Q1YsRUFBZVUsU0FBU0MsT0FBTyxHQUN4Q1gsRUFBZVUsU0FDZixJQUFNVixFQUFlVSxVQVkzQixPQVJBYixFQUFZSyxFQUFXdlUsT0FBT2lWLFNBQVNULE1BUWhDLFNBQXlCVSxHQUM5QixJQUFJbkIsRUFBVXpQLEVBQU1sRixTQUFTOFYsR0FBZVgsRUFBV1csR0FBY0EsRUFDckUsT0FBUW5CLEVBQU9XLFdBQWFSLEVBQVVRLFVBQ2xDWCxFQUFPWSxPQUFTVCxFQUFVUyxNQWhEbEMsR0FzRFMsV0FDTCxPQUFPLEksNkJDOURmLElBQUlyUSxFQUFRLEVBQVEsR0FFcEJ0SSxFQUFPRCxRQUNMdUksRUFBTXpFLHVCQUlLLENBQ0xzVixNQUFPLFNBQWUzWSxFQUFNVSxFQUFPa1ksRUFBU0MsRUFBTUMsRUFBUUMsR0FDeEQsSUFBSUMsRUFBUyxHQUNiQSxFQUFPeFEsS0FBS3hJLEVBQU8sSUFBTWdJLG1CQUFtQnRILElBRXhDb0gsRUFBTWpGLFNBQVMrVixJQUNqQkksRUFBT3hRLEtBQUssV0FBYSxJQUFJeVEsS0FBS0wsR0FBU00sZUFHekNwUixFQUFNbEYsU0FBU2lXLElBQ2pCRyxFQUFPeFEsS0FBSyxRQUFVcVEsR0FHcEIvUSxFQUFNbEYsU0FBU2tXLElBQ2pCRSxFQUFPeFEsS0FBSyxVQUFZc1EsSUFHWCxJQUFYQyxHQUNGQyxFQUFPeFEsS0FBSyxVQUdkL0UsU0FBU3VWLE9BQVNBLEVBQU92USxLQUFLLE9BR2hDMkQsS0FBTSxTQUFjcE0sR0FDbEIsSUFBSW1aLEVBQVExVixTQUFTdVYsT0FBT0csTUFBTSxJQUFJQyxPQUFPLGFBQWVwWixFQUFPLGNBQ25FLE9BQVFtWixFQUFRRSxtQkFBbUJGLEVBQU0sSUFBTSxNQUdqREcsT0FBUSxTQUFnQnRaLEdBQ3RCaU8sS0FBSzBLLE1BQU0zWSxFQUFNLEdBQUlpWixLQUFLTSxNQUFRLFNBTy9CLENBQ0xaLE1BQU8sYUFDUHZNLEtBQU0sV0FBa0IsT0FBTyxNQUMvQmtOLE9BQVEsZSw2QkMvQ2hCLElBQUl0TCxFQUFTLEVBQVEsR0FRckIsU0FBU3NFLEVBQVlrSCxHQUNuQixHQUF3QixtQkFBYkEsRUFDVCxNQUFNLElBQUlDLFVBQVUsZ0NBR3RCLElBQUlDLEVBQ0p6TCxLQUFLckIsUUFBVSxJQUFJdEMsU0FBUSxTQUF5QkMsR0FDbERtUCxFQUFpQm5QLEtBR25CLElBQUlvUCxFQUFRMUwsS0FDWnVMLEdBQVMsU0FBZ0J2TSxHQUNuQjBNLEVBQU03RixTQUtWNkYsRUFBTTdGLE9BQVMsSUFBSTlGLEVBQU9mLEdBQzFCeU0sRUFBZUMsRUFBTTdGLFlBT3pCeEIsRUFBWWpSLFVBQVV3UyxpQkFBbUIsV0FDdkMsR0FBSTVGLEtBQUs2RixPQUNQLE1BQU03RixLQUFLNkYsUUFRZnhCLEVBQVlzSCxPQUFTLFdBQ25CLElBQUkvTSxFQUlKLE1BQU8sQ0FDTDhNLE1BSlUsSUFBSXJILEdBQVksU0FBa0J4UyxHQUM1QytNLEVBQVMvTSxLQUlUK00sT0FBUUEsSUFJWnJOLEVBQU9ELFFBQVUrUyxHLDZCQ2xDakI5UyxFQUFPRCxRQUFVLFNBQWdCc2EsR0FDL0IsT0FBTyxTQUFjQyxHQUNuQixPQUFPRCxFQUFTaFMsTUFBTSxLQUFNaVMsTSxjQ3hCaEMsSUFBSUMsRUFBTSxFQUVWLFNBQVNDLEVBQVkvUixHQUNqQixJQUFJdEUsRUFBUyxHQUViLElBQUssSUFBSWxFLEtBQUt3SSxFQUNWdEUsRUFBTzZFLEtBQUtSLG1CQUFtQnZJLEdBQUssSUFBTXVJLG1CQUFtQkMsRUFBT3hJLEtBR3hFLE9BQU9rRSxFQUFPOEUsS0FBSyxLQUd2QmpKLEVBQU9ELFFBQVUsU0FBc0I4SyxHQUNuQyxPQUFPLElBQUlDLFNBQVEsU0FBU0MsRUFBU0MsR0FDakMsSUFBSXlQLEVBQVN4VyxTQUFTcVUsY0FBYyxVQUNoQ29DLEVBQU03UCxFQUFPaEYsSUFFakIsR0FBSWdGLEVBQU9wQyxPQUFRLENBQ2YsSUFBSUEsRUFBUytSLEVBQVkzUCxFQUFPcEMsUUFFNUJBLElBQ0FpUyxJQUFRQSxFQUFJdlIsUUFBUSxNQUFRLEVBQUksSUFBTSxLQUFPVixHQU1yRCxTQUFTcVIsSUFDRFcsSUFDQUEsRUFBT0UsT0FBU0YsRUFBTzVPLG1CQUFxQjRPLEVBQU9uTyxRQUFVLEtBRXpEbU8sRUFBT0csWUFDUEgsRUFBT0csV0FBV0MsWUFBWUosR0FHbENBLEVBQVMsTUFWakJBLEVBQU9LLE9BQVEsRUFjZixJQUFJblYsRUFBUSxxQkFBdUI0VSxJQUMvQlEsRUFBTS9XLE9BQU8yQixHQUNicVYsR0FBVSxFQUVkaFgsT0FBTzJCLEdBQVMsU0FBU3NWLElBQ3JCalgsT0FBTzJCLEdBQVNvVixFQUVaQyxJQVNKalEsRUFMZSxDQUNYMUUsS0FBTTRVLEVBQ041USxPQUFRLE9BTWhCLElBQUk2USxFQUFtQixDQUNuQkMsR0FBSSxJQUFJMUIsTUFBTzJCLFdBR25CRixFQUFpQnJRLEVBQU93USxtQkFBcUIsWUFBYzFWLEVBRTNEK1UsSUFBUUEsRUFBSXZSLFFBQVEsTUFBUSxFQUFJLElBQU0sS0FBT3FSLEVBQVlVLEdBRXpEVCxFQUFPRSxPQUFTRixFQUFPNU8sbUJBQXFCLFdBQ25DNE8sRUFBTzNPLGFBQWMsa0JBQWtCOEwsS0FBSzZDLEVBQU8zTyxhQUNwRGdPLEtBSVJXLEVBQU9uTyxRQUFVLFdBQ2J3TixJQUVBOU8sRUFBTyxJQUFJNEMsTUFBTSxtQkFHakIvQyxFQUFPc0MsYUFDUHRDLEVBQU9zQyxZQUFZQyxRQUFRcEYsTUFBSyxTQUFTcUYsR0FDaENvTixJQUlMTyxHQUFVLEVBRVZoUSxFQUFPcUMsT0FJZm9OLEVBQU9DLElBQU1BLEVBRWJ6VyxTQUFTcVgsS0FBS0MsWUFBWWQiLCJmaWxlIjoiYnVuZGxlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDEwKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGJpbmQgPSByZXF1aXJlKCcuL2hlbHBlcnMvYmluZCcpO1xuXG4vKmdsb2JhbCB0b1N0cmluZzp0cnVlKi9cblxuLy8gdXRpbHMgaXMgYSBsaWJyYXJ5IG9mIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBub24tc3BlY2lmaWMgdG8gYXhpb3NcblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyB1bmRlZmluZWRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNCdWZmZXIodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbCkgJiYgdmFsLmNvbnN0cnVjdG9yICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwuY29uc3RydWN0b3IpXG4gICAgJiYgdHlwZW9mIHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlciA9PT0gJ2Z1bmN0aW9uJyAmJiB2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIodmFsKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gRm9ybURhdGEsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Zvcm1EYXRhKHZhbCkge1xuICByZXR1cm4gKHR5cGVvZiBGb3JtRGF0YSAhPT0gJ3VuZGVmaW5lZCcpICYmICh2YWwgaW5zdGFuY2VvZiBGb3JtRGF0YSk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlclZpZXcodmFsKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJykgJiYgKEFycmF5QnVmZmVyLmlzVmlldykpIHtcbiAgICByZXN1bHQgPSBBcnJheUJ1ZmZlci5pc1ZpZXcodmFsKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSAodmFsKSAmJiAodmFsLmJ1ZmZlcikgJiYgKHZhbC5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcik7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmluZ1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyaW5nLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJpbmcodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIE51bWJlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgTnVtYmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNOdW1iZXIodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnbnVtYmVyJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIERhdGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIERhdGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0RhdGUodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IERhdGVdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0ZpbGUodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEZpbGVdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJsb2JcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJsb2IsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Jsb2IodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEJsb2JdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGdW5jdGlvbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJlYW1cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmVhbSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyZWFtKHZhbCkge1xuICByZXR1cm4gaXNPYmplY3QodmFsKSAmJiBpc0Z1bmN0aW9uKHZhbC5waXBlKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1VSTFNlYXJjaFBhcmFtcyh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiBVUkxTZWFyY2hQYXJhbXMgIT09ICd1bmRlZmluZWQnICYmIHZhbCBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcztcbn1cblxuLyoqXG4gKiBUcmltIGV4Y2VzcyB3aGl0ZXNwYWNlIG9mZiB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBTdHJpbmcgdG8gdHJpbVxuICogQHJldHVybnMge1N0cmluZ30gVGhlIFN0cmluZyBmcmVlZCBvZiBleGNlc3Mgd2hpdGVzcGFjZVxuICovXG5mdW5jdGlvbiB0cmltKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL15cXHMqLywgJycpLnJlcGxhY2UoL1xccyokLywgJycpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudFxuICpcbiAqIFRoaXMgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXIsIGFuZCByZWFjdC1uYXRpdmUuXG4gKiBCb3RoIGVudmlyb25tZW50cyBzdXBwb3J0IFhNTEh0dHBSZXF1ZXN0LCBidXQgbm90IGZ1bGx5IHN0YW5kYXJkIGdsb2JhbHMuXG4gKlxuICogd2ViIHdvcmtlcnM6XG4gKiAgdHlwZW9mIHdpbmRvdyAtPiB1bmRlZmluZWRcbiAqICB0eXBlb2YgZG9jdW1lbnQgLT4gdW5kZWZpbmVkXG4gKlxuICogcmVhY3QtbmF0aXZlOlxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdSZWFjdE5hdGl2ZSdcbiAqIG5hdGl2ZXNjcmlwdFxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdOYXRpdmVTY3JpcHQnIG9yICdOUydcbiAqL1xuZnVuY3Rpb24gaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiAobmF2aWdhdG9yLnByb2R1Y3QgPT09ICdSZWFjdE5hdGl2ZScgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ05hdGl2ZVNjcmlwdCcgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ05TJykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdcbiAgKTtcbn1cblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0IGludm9raW5nIGEgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiBgb2JqYCBpcyBhbiBBcnJheSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGluZGV4LCBhbmQgY29tcGxldGUgYXJyYXkgZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiAnb2JqJyBpcyBhbiBPYmplY3QgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBrZXksIGFuZCBjb21wbGV0ZSBvYmplY3QgZm9yIGVhY2ggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iaiBUaGUgb2JqZWN0IHRvIGl0ZXJhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBjYWxsYmFjayB0byBpbnZva2UgZm9yIGVhY2ggaXRlbVxuICovXG5mdW5jdGlvbiBmb3JFYWNoKG9iaiwgZm4pIHtcbiAgLy8gRG9uJ3QgYm90aGVyIGlmIG5vIHZhbHVlIHByb3ZpZGVkXG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBGb3JjZSBhbiBhcnJheSBpZiBub3QgYWxyZWFkeSBzb21ldGhpbmcgaXRlcmFibGVcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgb2JqID0gW29ial07XG4gIH1cblxuICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGFycmF5IHZhbHVlc1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gb2JqLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpbaV0sIGksIG9iaik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBvYmplY3Qga2V5c1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2tleV0sIGtleSwgb2JqKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBY2NlcHRzIHZhcmFyZ3MgZXhwZWN0aW5nIGVhY2ggYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0LCB0aGVuXG4gKiBpbW11dGFibHkgbWVyZ2VzIHRoZSBwcm9wZXJ0aWVzIG9mIGVhY2ggb2JqZWN0IGFuZCByZXR1cm5zIHJlc3VsdC5cbiAqXG4gKiBXaGVuIG11bHRpcGxlIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBrZXkgdGhlIGxhdGVyIG9iamVjdCBpblxuICogdGhlIGFyZ3VtZW50cyBsaXN0IHdpbGwgdGFrZSBwcmVjZWRlbmNlLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciByZXN1bHQgPSBtZXJnZSh7Zm9vOiAxMjN9LCB7Zm9vOiA0NTZ9KTtcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5mb28pOyAvLyBvdXRwdXRzIDQ1NlxuICogYGBgXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iajEgT2JqZWN0IHRvIG1lcmdlXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXN1bHQgb2YgYWxsIG1lcmdlIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gbWVyZ2UoLyogb2JqMSwgb2JqMiwgb2JqMywgLi4uICovKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgZnVuY3Rpb24gYXNzaWduVmFsdWUodmFsLCBrZXkpIHtcbiAgICBpZiAodHlwZW9mIHJlc3VsdFtrZXldID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jykge1xuICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZShyZXN1bHRba2V5XSwgdmFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWw7XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgZm9yRWFjaChhcmd1bWVudHNbaV0sIGFzc2lnblZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIGVxdWFsIHRvIG1lcmdlIHdpdGggdGhlIGRpZmZlcmVuY2UgYmVpbmcgdGhhdCBubyByZWZlcmVuY2VcbiAqIHRvIG9yaWdpbmFsIG9iamVjdHMgaXMga2VwdC5cbiAqXG4gKiBAc2VlIG1lcmdlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMSBPYmplY3QgdG8gbWVyZ2VcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBkZWVwTWVyZ2UoLyogb2JqMSwgb2JqMiwgb2JqMywgLi4uICovKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgZnVuY3Rpb24gYXNzaWduVmFsdWUodmFsLCBrZXkpIHtcbiAgICBpZiAodHlwZW9mIHJlc3VsdFtrZXldID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jykge1xuICAgICAgcmVzdWx0W2tleV0gPSBkZWVwTWVyZ2UocmVzdWx0W2tleV0sIHZhbCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0Jykge1xuICAgICAgcmVzdWx0W2tleV0gPSBkZWVwTWVyZ2Uoe30sIHZhbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGZvckVhY2goYXJndW1lbnRzW2ldLCBhc3NpZ25WYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBFeHRlbmRzIG9iamVjdCBhIGJ5IG11dGFibHkgYWRkaW5nIHRvIGl0IHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhIFRoZSBvYmplY3QgdG8gYmUgZXh0ZW5kZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBiIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb21cbiAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIFRoZSBvYmplY3QgdG8gYmluZCBmdW5jdGlvbiB0b1xuICogQHJldHVybiB7T2JqZWN0fSBUaGUgcmVzdWx0aW5nIHZhbHVlIG9mIG9iamVjdCBhXG4gKi9cbmZ1bmN0aW9uIGV4dGVuZChhLCBiLCB0aGlzQXJnKSB7XG4gIGZvckVhY2goYiwgZnVuY3Rpb24gYXNzaWduVmFsdWUodmFsLCBrZXkpIHtcbiAgICBpZiAodGhpc0FyZyAmJiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBhW2tleV0gPSBiaW5kKHZhbCwgdGhpc0FyZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFba2V5XSA9IHZhbDtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzQXJyYXk6IGlzQXJyYXksXG4gIGlzQXJyYXlCdWZmZXI6IGlzQXJyYXlCdWZmZXIsXG4gIGlzQnVmZmVyOiBpc0J1ZmZlcixcbiAgaXNGb3JtRGF0YTogaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXc6IGlzQXJyYXlCdWZmZXJWaWV3LFxuICBpc1N0cmluZzogaXNTdHJpbmcsXG4gIGlzTnVtYmVyOiBpc051bWJlcixcbiAgaXNPYmplY3Q6IGlzT2JqZWN0LFxuICBpc1VuZGVmaW5lZDogaXNVbmRlZmluZWQsXG4gIGlzRGF0ZTogaXNEYXRlLFxuICBpc0ZpbGU6IGlzRmlsZSxcbiAgaXNCbG9iOiBpc0Jsb2IsXG4gIGlzRnVuY3Rpb246IGlzRnVuY3Rpb24sXG4gIGlzU3RyZWFtOiBpc1N0cmVhbSxcbiAgaXNVUkxTZWFyY2hQYXJhbXM6IGlzVVJMU2VhcmNoUGFyYW1zLFxuICBpc1N0YW5kYXJkQnJvd3NlckVudjogaXNTdGFuZGFyZEJyb3dzZXJFbnYsXG4gIGZvckVhY2g6IGZvckVhY2gsXG4gIG1lcmdlOiBtZXJnZSxcbiAgZGVlcE1lcmdlOiBkZWVwTWVyZ2UsXG4gIGV4dGVuZDogZXh0ZW5kLFxuICB0cmltOiB0cmltXG59O1xuIiwiaW1wb3J0ICogYXMgY2l0aWVzIGZyb20gJy4vdmFsaWRfY2l0eV9uYW1lcy5qc29uJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgKiBhcyBqc29ucEFkYXB0ZXIgZnJvbSAnYXhpb3MtanNvbnAnO1xuXG5jb25zdCBjaXR5TmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oY2l0aWVzKTtcbmNvbnN0IGNpdHlOYW1lU2hvcnRUb0Z1bGwgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuY2l0eU5hbWVzLmZvckVhY2goY2l0eU5hbWUgPT4ge1xuICBjaXR5TmFtZVNob3J0VG9GdWxsLnNldChjaXR5TmFtZS5zdWJzdHIoMCwgMiksIGNpdHlOYW1lKTtcbn0pO1xuY29uc3QgY29sb3JzOiBBcnJheTxbbnVtYmVyLCBzdHJpbmddPiA9IFtcbiAgWzAsICcjRkZERkRGJ10sXG4gIFsxMCwgJyNGRkJGQkYnXSxcbiAgWzIwLCAnI0ZGOUY5RiddLFxuICBbMzAsICcjRkY3RjdGJ10sXG4gIFs0MCwgJyNGRjVGNUYnXSxcbiAgWzUwLCAnI0ZGM0YzRiddLFxuICBbNjAsICcjRkYxRjFGJ10sXG4gIFs3MCwgJyNGRjAwMDAnXSxcbiAgWzgwLCAnI0U3MDAwMCddLFxuICBbOTAsICcjQ0YwMDAwJ10sXG4gIFsxMDAsICcjQjgwMDAwJ10sXG4gIFsyMDAsICcjQTAwMDAwJ10sXG4gIFs1MDAsICcjODgwMDAwJ10sXG4gIFsxMDAwLCAnIzcxMDAwMCddLFxuICBbMjAwMCwgJyM1OTAwMDAnXSxcbiAgWzUwMDAsICcjNDIwMDAwJ10sXG5dO1xuXG4vLyDlv73nlaXpg6jliIblhoXlrrlcbmNvbnN0IGlnbm9yZUxpc3QgPSBbJ+WkluWcsOadpeS6rOS6uuWRmCcsICfmnKrnn6UnLCAn5pyq5piO56Gu5Zyw5Yy6JywgJ+aJgOWxnuWcsOW+heehruiupCcsICflvoXnoa7orqQnLCAn5Zyw5Yy65b6F56Gu6K6kJ107XG5cbi8vIOaJi+WKqOaYoOWwhFxuLy8g6auY5b635Zyw5Zu+6YeM5rKh5pyJ5Lik5rGf5paw5Yy677yM5aeR5LiU566X5YWl5rid5YyXXG5jb25zdCBtYW51YWxNYXBwaW5nID0gbmV3IE1hcChbXG4gIFsn5bep5LmJJywgJ+mDkeW3nuW4giddLFxuICBbJ+WbuuWni+WOvycsICfkv6HpmLPluIInXSxcbiAgWyfmu5Hljr8nLCAn5a6J6Ziz5biCJ10sXG4gIFsn6ZW/5Z6jJywgJ+aWsOS5oeW4giddLFxuICBbJ+awuOWfjicsICfllYbkuJjluIInXSxcbiAgWyfpgpPlt54nLCAn5Y2X6Ziz5biCJ10sXG4gIFsn6Z+p5Z+OJywgJ+a4reWNl+W4giddLFxuICBbJ+adqOWHjCcsICflkrjpmLPluIInXSxcbiAgWyflroHkuJznrqHlp5TkvJonLCAn6ZO25bed5biCJ10sXG4gIFsn5ruh5rSy6YeMJywgJ+WRvOS8pui0neWwlOW4giddLFxuICBbJ+mYv+aLieWWhCcsICfpmL/mi4nlloTnm58nXSxcbiAgWyflrr/mnb4nLCAn5a6J5bqG5biCJ10sXG4gIFsn6LWj5rGf5paw5Yy6JywgJ+WNl+aYjOW4giddLFxuICBbJ+WFrOS4u+WyrScsICflm5vlubPluIInXSxcbiAgWyfmooXmsrPlj6PluIInLCAn6YCa5YyW5biCJ10sXG4gIFsn5Lik5rGf5paw5Yy6JywgJ+a4neWMl+WMuiddLFxuICBbJ+S4h+ebm+e7j+W8gOWMuicsICfntqbmsZ/ljLonXSxcbiAgWyflt7Tlt54nLCAn5be06Z+z6YOt5qWe6JKZ5Y+k6Ieq5rK75beeJ10sXG4gIFsn5YW15Zui56ys5Zub5biIJywgJ+WPr+WFi+i+vuaLieW4giddLFxuICBbJ+WFreW4iOS6lOWutua4oCcsICfkupTlrrbmuKDluIInXSxcbiAgWyfnrKzkuIPluIgnLCAn5aGU5Z+O5Zyw5Yy6J10sXG4gIFsn56ys5YWr5biI55+z5rKz5a2QJywgJ+efs+ays+WtkOW4giddLFxuICBbJ+WFteWbouesrOS5neW4iCcsICfloZTln47lnLDljLonXSxcbiAgWyflhbXlm6LnrKzljYHkuozluIgnLCAn5LmM6bKB5pyo6b2Q5biCJ10sXG5dKTtcblxuY29uc3QgbWFudWFsTWFwcGluZ1dpdFByb3ZpbmNlID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1xuICBbJ+ilv+iXjy3lnLDljLrlvoXnoa7orqQnLCAn5ouJ6JCo5biCJ10sXG4gIFsn6YeN5bqGLemrmOaWsOWMuicsICfkuZ3pvpnlnaHljLonXSxcbl0pO1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRUZWNlbnREYXRhKHsganNvbnAgPSB0cnVlIH0pOiBQcm9taXNlPEFycmF5PGFueT4+IHtcbiAgY29uc3Qgb3B0aW9uczogUmVjb3JkPHN0cmluZywgYW55PiA9IHtcbiAgICB1cmw6ICdodHRwczovL3ZpZXcuaW5ld3MucXEuY29tL2cyL2dldE9uc0luZm8/bmFtZT1kaXNlYXNlX2g1JyxcbiAgICBtZXRob2Q6ICdnZXQnLFxuICAgIGFkYXB0ZXI6IGpzb25wID8ganNvbnBBZGFwdGVyIDogdW5kZWZpbmVkLFxuICB9O1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zKG9wdGlvbnMpO1xuICByZXR1cm4gSlNPTi5wYXJzZShyZXNwb25zZS5kYXRhLmRhdGEpLmFyZWFUcmVlWzBdLmNoaWxkcmVuO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVDaXR5TmFtZShwcm92aW5jZU5hbWU6IHN0cmluZywgY2l0eU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIOaJi+WKqOinhOWImVxuICBpZiAobWFudWFsTWFwcGluZ1dpdFByb3ZpbmNlLmhhcyhwcm92aW5jZU5hbWUgKyAnLScgKyBjaXR5TmFtZSkpIHtcbiAgICByZXR1cm4gbWFudWFsTWFwcGluZ1dpdFByb3ZpbmNlLmdldChwcm92aW5jZU5hbWUgKyAnLScgKyBjaXR5TmFtZSk7XG4gIH1cbiAgaWYgKG1hbnVhbE1hcHBpbmcuaGFzKGNpdHlOYW1lKSkge1xuICAgIHJldHVybiBtYW51YWxNYXBwaW5nLmdldChjaXR5TmFtZSk7XG4gIH1cbiAgaWYgKGlnbm9yZUxpc3QuaW5jbHVkZXMoY2l0eU5hbWUpKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgLy8g5ZCN56ew6KeE5YiZXG4gIC8vIOS+i+WmgiDkuLTpq5jljr8g5YW25a6e5piv5biC57qnXG4gIGxldCBub3JtYWxpemVkTmFtZSA9ICcnO1xuICBpZiAoWyfluIInLCAn5Y6/JywgJ+ebnyddLmluY2x1ZGVzKGNpdHlOYW1lWy0xXSkpIHtcbiAgICBub3JtYWxpemVkTmFtZSA9IGNpdHlOYW1lO1xuICB9IGVsc2UgaWYgKHByb3ZpbmNlTmFtZSA9PSAn6YeN5bqGJyAmJiBjaXR5TmFtZVstMV0gPT0gJ+WMuicpIHtcbiAgICBub3JtYWxpemVkTmFtZSA9IGNpdHlOYW1lO1xuICB9IGVsc2Uge1xuICAgIG5vcm1hbGl6ZWROYW1lID0gY2l0eU5hbWUgKyAn5biCJztcbiAgfVxuICBpZiAoY2l0eU5hbWVzLmhhcyhub3JtYWxpemVkTmFtZSkpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplZE5hbWU7XG4gIH1cblxuICAvLyDliY3nvIDljLnphY1cbiAgLy8g6KeE6IyD5biC5ZCN77yM6Zmk5LqGIOW8oOWutuWPo+W4gi/lvKDlrrbnlYzluILvvIzpmL/mi4nlloTnm58v6Zi/5ouJ5bCU5biCIOWklu+8jOWJjeS4pOS4quWtl+mDveaYr+WUr+S4gOeahFxuICAvLyDmiYDku6Xlj6/ku6XnlKjliY3kuKTkuKrlrZdcbiAgY29uc3Qgc2hvcnROYW1lID0gY2l0eU5hbWUuc3Vic3RyKDAsIDIpO1xuICBpZiAoY2l0eU5hbWVTaG9ydFRvRnVsbC5oYXMoc2hvcnROYW1lKSkge1xuICAgIG5vcm1hbGl6ZWROYW1lID0gY2l0eU5hbWVTaG9ydFRvRnVsbC5nZXQoc2hvcnROYW1lKTtcbiAgICAvL2NvbnNvbGUubG9nKHByb3ZpbmNlTmFtZSwgY2l0eU5hbWUsICc9PicsIG5vcm1hbGl6ZWROYW1lKTtcbiAgICByZXR1cm4gbm9ybWFsaXplZE5hbWU7XG4gIH1cbiAgY29uc29sZS5sb2coJyEhIUNhbm5vdCBtYXRjaCwgZGlzY2FyZDonLCBwcm92aW5jZU5hbWUsIGNpdHlOYW1lKTtcbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBnZXRSZW1haW4oZGF0YSk6IG51bWJlciB7XG4gIGNvbnN0IHJlc3VsdCA9IGRhdGEuY29uZmlybSAtIGRhdGEuZGVhZCAtIGRhdGEuaGVhbDtcbiAgaWYgKHJlc3VsdCA8IDApIHtcbiAgICB0aHJvdyBkYXRhO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25maXJtZWRDb3VudChkYXRhKTogTWFwPHN0cmluZywgbnVtYmVyPiB7XG4gIGNvbnN0IGNvbmZpcm1lZENvdW50ID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgZm9yIChjb25zdCBwcm92aW5jZSBvZiBkYXRhKSB7XG4gICAgY29uc3QgcHJvdmluY2VfcmVtYWluID0gZ2V0UmVtYWluKHByb3ZpbmNlLnRvdGFsKTtcbiAgICBpZiAoWyfpppnmuK8nLCAn5r6z6ZeoJywgJ+WPsOa5viddLmluY2x1ZGVzKHByb3ZpbmNlLm5hbWUpKSB7XG4gICAgICBjb25zdCBzdWZmaXggPSBwcm92aW5jZS5uYW1lID09ICflj7Dmub4nID8gJ+ecgScgOiAn54m55Yir6KGM5pS/5Yy6JztcbiAgICAgIGNvbmZpcm1lZENvdW50LnNldChwcm92aW5jZS5uYW1lICsgc3VmZml4LCBwcm92aW5jZV9yZW1haW4pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChbJ+WMl+S6rCcsICfkuIrmtbcnLCAn5aSp5rSlJ10uaW5jbHVkZXMocHJvdmluY2UubmFtZSkpIHtcbiAgICAgIGNvbnN0IHByb3ZpbmNlTmFtZSA9IHByb3ZpbmNlLm5hbWUgKyAn5biCJztcbiAgICAgIGNvbmZpcm1lZENvdW50LnNldChwcm92aW5jZU5hbWUsIHByb3ZpbmNlX3JlbWFpbik7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBjaXR5IG9mIHByb3ZpbmNlLmNoaWxkcmVuKSB7XG4gICAgICBjb25zdCBjaXR5X3JlbWFpbiA9IGdldFJlbWFpbihjaXR5LnRvdGFsKTtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWROYW1lOiBzdHJpbmcgPSBub3JtYWxpemVDaXR5TmFtZShwcm92aW5jZS5uYW1lLCBjaXR5Lm5hbWUpO1xuICAgICAgaWYgKG5vcm1hbGl6ZWROYW1lICE9ICcnKSB7XG4gICAgICAgIGlmIChjb25maXJtZWRDb3VudC5oYXMobm9ybWFsaXplZE5hbWUpKSB7XG4gICAgICAgICAgY29uZmlybWVkQ291bnQuc2V0KG5vcm1hbGl6ZWROYW1lLCBjb25maXJtZWRDb3VudC5nZXQobm9ybWFsaXplZE5hbWUpICsgY2l0eV9yZW1haW4pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbmZpcm1lZENvdW50LnNldChub3JtYWxpemVkTmFtZSwgY2l0eV9yZW1haW4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBjb25maXJtZWRDb3VudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbG9yKGNvdW50OiBudW1iZXIpOiBzdHJpbmcge1xuICBpZiAoY291bnQgPT0gMCkge1xuICAgIHJldHVybiAnI0ZGRkZGRic7XG4gIH1cbiAgZm9yIChjb25zdCBbaWR4LCBbdGhyZXNob2xkLCBfXV0gb2YgY29sb3JzLmVudHJpZXMoKSkge1xuICAgIGlmIChpZHggPT0gMCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChjb3VudCA8IHRocmVzaG9sZCkge1xuICAgICAgcmV0dXJuIGNvbG9yc1tpZHggLSAxXVsxXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuICcjNDIwMDAwJztcbn1cblxuZnVuY3Rpb24gcHJpbnRDb25maXJtZWRDb3VudCgpIHtcbiAgbG9hZFRlY2VudERhdGEoeyBqc29ucDogZmFsc2UgfSkudGhlbihkYXRhID0+IHtcbiAgICBjb25zb2xlLmRpcihnZXRDb25maXJtZWRDb3VudChkYXRhKSwgeyBkZXB0aDogbnVsbCB9KTtcbiAgfSk7XG59XG5cbmlmICh0eXBlb2YgcmVxdWlyZSAhPT0gJ3VuZGVmaW5lZCcgJiYgcmVxdWlyZS5tYWluID09PSBtb2R1bGUpIHtcbiAgcHJpbnRDb25maXJtZWRDb3VudCgpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZywgYXJncyk7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbmZ1bmN0aW9uIGVuY29kZSh2YWwpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpLlxuICAgIHJlcGxhY2UoLyU0MC9naSwgJ0AnKS5cbiAgICByZXBsYWNlKC8lM0EvZ2ksICc6JykuXG4gICAgcmVwbGFjZSgvJTI0L2csICckJykuXG4gICAgcmVwbGFjZSgvJTJDL2dpLCAnLCcpLlxuICAgIHJlcGxhY2UoLyUyMC9nLCAnKycpLlxuICAgIHJlcGxhY2UoLyU1Qi9naSwgJ1snKS5cbiAgICByZXBsYWNlKC8lNUQvZ2ksICddJyk7XG59XG5cbi8qKlxuICogQnVpbGQgYSBVUkwgYnkgYXBwZW5kaW5nIHBhcmFtcyB0byB0aGUgZW5kXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgYmFzZSBvZiB0aGUgdXJsIChlLmcuLCBodHRwOi8vd3d3Lmdvb2dsZS5jb20pXG4gKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gVGhlIHBhcmFtcyB0byBiZSBhcHBlbmRlZFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCB1cmxcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZFVSTCh1cmwsIHBhcmFtcywgcGFyYW1zU2VyaWFsaXplcikge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgaWYgKCFwYXJhbXMpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgdmFyIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIGlmIChwYXJhbXNTZXJpYWxpemVyKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcmFtc1NlcmlhbGl6ZXIocGFyYW1zKTtcbiAgfSBlbHNlIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMpKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcmFtcy50b1N0cmluZygpO1xuICB9IGVsc2Uge1xuICAgIHZhciBwYXJ0cyA9IFtdO1xuXG4gICAgdXRpbHMuZm9yRWFjaChwYXJhbXMsIGZ1bmN0aW9uIHNlcmlhbGl6ZSh2YWwsIGtleSkge1xuICAgICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh1dGlscy5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAga2V5ID0ga2V5ICsgJ1tdJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbCA9IFt2YWxdO1xuICAgICAgfVxuXG4gICAgICB1dGlscy5mb3JFYWNoKHZhbCwgZnVuY3Rpb24gcGFyc2VWYWx1ZSh2KSB7XG4gICAgICAgIGlmICh1dGlscy5pc0RhdGUodikpIHtcbiAgICAgICAgICB2ID0gdi50b0lTT1N0cmluZygpO1xuICAgICAgICB9IGVsc2UgaWYgKHV0aWxzLmlzT2JqZWN0KHYpKSB7XG4gICAgICAgICAgdiA9IEpTT04uc3RyaW5naWZ5KHYpO1xuICAgICAgICB9XG4gICAgICAgIHBhcnRzLnB1c2goZW5jb2RlKGtleSkgKyAnPScgKyBlbmNvZGUodikpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFydHMuam9pbignJicpO1xuICB9XG5cbiAgaWYgKHNlcmlhbGl6ZWRQYXJhbXMpIHtcbiAgICB2YXIgaGFzaG1hcmtJbmRleCA9IHVybC5pbmRleE9mKCcjJyk7XG4gICAgaWYgKGhhc2htYXJrSW5kZXggIT09IC0xKSB7XG4gICAgICB1cmwgPSB1cmwuc2xpY2UoMCwgaGFzaG1hcmtJbmRleCk7XG4gICAgfVxuXG4gICAgdXJsICs9ICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemVkUGFyYW1zO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNDYW5jZWwodmFsdWUpIHtcbiAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlLl9fQ0FOQ0VMX18pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIG5vcm1hbGl6ZUhlYWRlck5hbWUgPSByZXF1aXJlKCcuL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZScpO1xuXG52YXIgREVGQVVMVF9DT05URU5UX1RZUEUgPSB7XG4gICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xufTtcblxuZnVuY3Rpb24gc2V0Q29udGVudFR5cGVJZlVuc2V0KGhlYWRlcnMsIHZhbHVlKSB7XG4gIGlmICghdXRpbHMuaXNVbmRlZmluZWQoaGVhZGVycykgJiYgdXRpbHMuaXNVbmRlZmluZWQoaGVhZGVyc1snQ29udGVudC1UeXBlJ10pKSB7XG4gICAgaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSB2YWx1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXREZWZhdWx0QWRhcHRlcigpIHtcbiAgdmFyIGFkYXB0ZXI7XG4gIGlmICh0eXBlb2YgWE1MSHR0cFJlcXVlc3QgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gRm9yIGJyb3dzZXJzIHVzZSBYSFIgYWRhcHRlclxuICAgIGFkYXB0ZXIgPSByZXF1aXJlKCcuL2FkYXB0ZXJzL3hocicpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocHJvY2VzcykgPT09ICdbb2JqZWN0IHByb2Nlc3NdJykge1xuICAgIC8vIEZvciBub2RlIHVzZSBIVFRQIGFkYXB0ZXJcbiAgICBhZGFwdGVyID0gcmVxdWlyZSgnLi9hZGFwdGVycy9odHRwJyk7XG4gIH1cbiAgcmV0dXJuIGFkYXB0ZXI7XG59XG5cbnZhciBkZWZhdWx0cyA9IHtcbiAgYWRhcHRlcjogZ2V0RGVmYXVsdEFkYXB0ZXIoKSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQWNjZXB0Jyk7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQ29udGVudC1UeXBlJyk7XG4gICAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQXJyYXlCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNGaWxlKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0Jsb2IoZGF0YSlcbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKGRhdGEpKSB7XG4gICAgICBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04Jyk7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCAnYXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04Jyk7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICB0cmFuc2Zvcm1SZXNwb25zZTogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlc3BvbnNlKGRhdGEpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgLyogSWdub3JlICovIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIC8qKlxuICAgKiBBIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIGFib3J0IGEgcmVxdWVzdC4gSWYgc2V0IHRvIDAgKGRlZmF1bHQpIGFcbiAgICogdGltZW91dCBpcyBub3QgY3JlYXRlZC5cbiAgICovXG4gIHRpbWVvdXQ6IDAsXG5cbiAgeHNyZkNvb2tpZU5hbWU6ICdYU1JGLVRPS0VOJyxcbiAgeHNyZkhlYWRlck5hbWU6ICdYLVhTUkYtVE9LRU4nLFxuXG4gIG1heENvbnRlbnRMZW5ndGg6IC0xLFxuXG4gIHZhbGlkYXRlU3RhdHVzOiBmdW5jdGlvbiB2YWxpZGF0ZVN0YXR1cyhzdGF0dXMpIHtcbiAgICByZXR1cm4gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDA7XG4gIH1cbn07XG5cbmRlZmF1bHRzLmhlYWRlcnMgPSB7XG4gIGNvbW1vbjoge1xuICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJ1xuICB9XG59O1xuXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHt9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHV0aWxzLm1lcmdlKERFRkFVTFRfQ09OVEVOVF9UWVBFKTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgc2V0dGxlID0gcmVxdWlyZSgnLi8uLi9jb3JlL3NldHRsZScpO1xudmFyIGJ1aWxkVVJMID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2J1aWxkVVJMJyk7XG52YXIgYnVpbGRGdWxsUGF0aCA9IHJlcXVpcmUoJy4uL2NvcmUvYnVpbGRGdWxsUGF0aCcpO1xudmFyIHBhcnNlSGVhZGVycyA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9wYXJzZUhlYWRlcnMnKTtcbnZhciBpc1VSTFNhbWVPcmlnaW4gPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luJyk7XG52YXIgY3JlYXRlRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL2NyZWF0ZUVycm9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24geGhyQWRhcHRlcihjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoWGhyUmVxdWVzdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgcmVxdWVzdERhdGEgPSBjb25maWcuZGF0YTtcbiAgICB2YXIgcmVxdWVzdEhlYWRlcnMgPSBjb25maWcuaGVhZGVycztcblxuICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKHJlcXVlc3REYXRhKSkge1xuICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzWydDb250ZW50LVR5cGUnXTsgLy8gTGV0IHRoZSBicm93c2VyIHNldCBpdFxuICAgIH1cblxuICAgIHZhciByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gICAgaWYgKGNvbmZpZy5hdXRoKSB7XG4gICAgICB2YXIgdXNlcm5hbWUgPSBjb25maWcuYXV0aC51c2VybmFtZSB8fCAnJztcbiAgICAgIHZhciBwYXNzd29yZCA9IGNvbmZpZy5hdXRoLnBhc3N3b3JkIHx8ICcnO1xuICAgICAgcmVxdWVzdEhlYWRlcnMuQXV0aG9yaXphdGlvbiA9ICdCYXNpYyAnICsgYnRvYSh1c2VybmFtZSArICc6JyArIHBhc3N3b3JkKTtcbiAgICB9XG5cbiAgICB2YXIgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcbiAgICByZXF1ZXN0Lm9wZW4oY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCBidWlsZFVSTChmdWxsUGF0aCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpLCB0cnVlKTtcblxuICAgIC8vIFNldCB0aGUgcmVxdWVzdCB0aW1lb3V0IGluIE1TXG4gICAgcmVxdWVzdC50aW1lb3V0ID0gY29uZmlnLnRpbWVvdXQ7XG5cbiAgICAvLyBMaXN0ZW4gZm9yIHJlYWR5IHN0YXRlXG4gICAgcmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVMb2FkKCkge1xuICAgICAgaWYgKCFyZXF1ZXN0IHx8IHJlcXVlc3QucmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSByZXF1ZXN0IGVycm9yZWQgb3V0IGFuZCB3ZSBkaWRuJ3QgZ2V0IGEgcmVzcG9uc2UsIHRoaXMgd2lsbCBiZVxuICAgICAgLy8gaGFuZGxlZCBieSBvbmVycm9yIGluc3RlYWRcbiAgICAgIC8vIFdpdGggb25lIGV4Y2VwdGlvbjogcmVxdWVzdCB0aGF0IHVzaW5nIGZpbGU6IHByb3RvY29sLCBtb3N0IGJyb3dzZXJzXG4gICAgICAvLyB3aWxsIHJldHVybiBzdGF0dXMgYXMgMCBldmVuIHRob3VnaCBpdCdzIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0XG4gICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDAgJiYgIShyZXF1ZXN0LnJlc3BvbnNlVVJMICYmIHJlcXVlc3QucmVzcG9uc2VVUkwuaW5kZXhPZignZmlsZTonKSA9PT0gMCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBQcmVwYXJlIHRoZSByZXNwb25zZVxuICAgICAgdmFyIHJlc3BvbnNlSGVhZGVycyA9ICdnZXRBbGxSZXNwb25zZUhlYWRlcnMnIGluIHJlcXVlc3QgPyBwYXJzZUhlYWRlcnMocmVxdWVzdC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkgOiBudWxsO1xuICAgICAgdmFyIHJlc3BvbnNlRGF0YSA9ICFjb25maWcucmVzcG9uc2VUeXBlIHx8IGNvbmZpZy5yZXNwb25zZVR5cGUgPT09ICd0ZXh0JyA/IHJlcXVlc3QucmVzcG9uc2VUZXh0IDogcmVxdWVzdC5yZXNwb25zZTtcbiAgICAgIHZhciByZXNwb25zZSA9IHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RcbiAgICAgIH07XG5cbiAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSBicm93c2VyIHJlcXVlc3QgY2FuY2VsbGF0aW9uIChhcyBvcHBvc2VkIHRvIGEgbWFudWFsIGNhbmNlbGxhdGlvbilcbiAgICByZXF1ZXN0Lm9uYWJvcnQgPSBmdW5jdGlvbiBoYW5kbGVBYm9ydCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlamVjdChjcmVhdGVFcnJvcignUmVxdWVzdCBhYm9ydGVkJywgY29uZmlnLCAnRUNPTk5BQk9SVEVEJywgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIGxvdyBsZXZlbCBuZXR3b3JrIGVycm9yc1xuICAgIHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uIGhhbmRsZUVycm9yKCkge1xuICAgICAgLy8gUmVhbCBlcnJvcnMgYXJlIGhpZGRlbiBmcm9tIHVzIGJ5IHRoZSBicm93c2VyXG4gICAgICAvLyBvbmVycm9yIHNob3VsZCBvbmx5IGZpcmUgaWYgaXQncyBhIG5ldHdvcmsgZXJyb3JcbiAgICAgIHJlamVjdChjcmVhdGVFcnJvcignTmV0d29yayBFcnJvcicsIGNvbmZpZywgbnVsbCwgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIHRpbWVvdXRcbiAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoKSB7XG4gICAgICB2YXIgdGltZW91dEVycm9yTWVzc2FnZSA9ICd0aW1lb3V0IG9mICcgKyBjb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCc7XG4gICAgICBpZiAoY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSA9IGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlO1xuICAgICAgfVxuICAgICAgcmVqZWN0KGNyZWF0ZUVycm9yKHRpbWVvdXRFcnJvck1lc3NhZ2UsIGNvbmZpZywgJ0VDT05OQUJPUlRFRCcsXG4gICAgICAgIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgIC8vIFRoaXMgaXMgb25seSBkb25lIGlmIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50LlxuICAgIC8vIFNwZWNpZmljYWxseSBub3QgaWYgd2UncmUgaW4gYSB3ZWIgd29ya2VyLCBvciByZWFjdC1uYXRpdmUuXG4gICAgaWYgKHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkpIHtcbiAgICAgIHZhciBjb29raWVzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2Nvb2tpZXMnKTtcblxuICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgICB2YXIgeHNyZlZhbHVlID0gKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMgfHwgaXNVUkxTYW1lT3JpZ2luKGZ1bGxQYXRoKSkgJiYgY29uZmlnLnhzcmZDb29raWVOYW1lID9cbiAgICAgICAgY29va2llcy5yZWFkKGNvbmZpZy54c3JmQ29va2llTmFtZSkgOlxuICAgICAgICB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgcmVxdWVzdEhlYWRlcnNbY29uZmlnLnhzcmZIZWFkZXJOYW1lXSA9IHhzcmZWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgdXRpbHMuZm9yRWFjaChyZXF1ZXN0SGVhZGVycywgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICBpZiAodHlwZW9mIHJlcXVlc3REYXRhID09PSAndW5kZWZpbmVkJyAmJiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtdHlwZScpIHtcbiAgICAgICAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzW2tleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXJ3aXNlIGFkZCBoZWFkZXIgdG8gdGhlIHJlcXVlc3RcbiAgICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aENyZWRlbnRpYWxzIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcud2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSAhIWNvbmZpZy53aXRoQ3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJlc3BvbnNlVHlwZSB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmIChjb25maWcucmVzcG9uc2VUeXBlKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVHlwZSA9IGNvbmZpZy5yZXNwb25zZVR5cGU7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIEV4cGVjdGVkIERPTUV4Y2VwdGlvbiB0aHJvd24gYnkgYnJvd3NlcnMgbm90IGNvbXBhdGlibGUgWE1MSHR0cFJlcXVlc3QgTGV2ZWwgMi5cbiAgICAgICAgLy8gQnV0LCB0aGlzIGNhbiBiZSBzdXBwcmVzc2VkIGZvciAnanNvbicgdHlwZSBhcyBpdCBjYW4gYmUgcGFyc2VkIGJ5IGRlZmF1bHQgJ3RyYW5zZm9ybVJlc3BvbnNlJyBmdW5jdGlvbi5cbiAgICAgICAgaWYgKGNvbmZpZy5yZXNwb25zZVR5cGUgIT09ICdqc29uJykge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcHJvZ3Jlc3MgaWYgbmVlZGVkXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25Eb3dubG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgLy8gTm90IGFsbCBicm93c2VycyBzdXBwb3J0IHVwbG9hZCBldmVudHNcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nICYmIHJlcXVlc3QudXBsb2FkKSB7XG4gICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgICAvLyBIYW5kbGUgY2FuY2VsbGF0aW9uXG4gICAgICBjb25maWcuY2FuY2VsVG9rZW4ucHJvbWlzZS50aGVuKGZ1bmN0aW9uIG9uQ2FuY2VsZWQoY2FuY2VsKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcXVlc3QuYWJvcnQoKTtcbiAgICAgICAgcmVqZWN0KGNhbmNlbCk7XG4gICAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdERhdGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVxdWVzdERhdGEgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIFNlbmQgdGhlIHJlcXVlc3RcbiAgICByZXF1ZXN0LnNlbmQocmVxdWVzdERhdGEpO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBlbmhhbmNlRXJyb3IgPSByZXF1aXJlKCcuL2VuaGFuY2VFcnJvcicpO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBFcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgbWVzc2FnZSwgY29uZmlnLCBlcnJvciBjb2RlLCByZXF1ZXN0IGFuZCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZV0gVGhlIGVycm9yIGNvZGUgKGZvciBleGFtcGxlLCAnRUNPTk5BQk9SVEVEJykuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjcmVhdGVFcnJvcihtZXNzYWdlLCBjb25maWcsIGNvZGUsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIHZhciBlcnJvciA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgcmV0dXJuIGVuaGFuY2VFcnJvcihlcnJvciwgY29uZmlnLCBjb2RlLCByZXF1ZXN0LCByZXNwb25zZSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIENvbmZpZy1zcGVjaWZpYyBtZXJnZS1mdW5jdGlvbiB3aGljaCBjcmVhdGVzIGEgbmV3IGNvbmZpZy1vYmplY3RcbiAqIGJ5IG1lcmdpbmcgdHdvIGNvbmZpZ3VyYXRpb24gb2JqZWN0cyB0b2dldGhlci5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMVxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzJcbiAqIEByZXR1cm5zIHtPYmplY3R9IE5ldyBvYmplY3QgcmVzdWx0aW5nIGZyb20gbWVyZ2luZyBjb25maWcyIHRvIGNvbmZpZzFcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtZXJnZUNvbmZpZyhjb25maWcxLCBjb25maWcyKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBjb25maWcyID0gY29uZmlnMiB8fCB7fTtcbiAgdmFyIGNvbmZpZyA9IHt9O1xuXG4gIHZhciB2YWx1ZUZyb21Db25maWcyS2V5cyA9IFsndXJsJywgJ21ldGhvZCcsICdwYXJhbXMnLCAnZGF0YSddO1xuICB2YXIgbWVyZ2VEZWVwUHJvcGVydGllc0tleXMgPSBbJ2hlYWRlcnMnLCAnYXV0aCcsICdwcm94eSddO1xuICB2YXIgZGVmYXVsdFRvQ29uZmlnMktleXMgPSBbXG4gICAgJ2Jhc2VVUkwnLCAndXJsJywgJ3RyYW5zZm9ybVJlcXVlc3QnLCAndHJhbnNmb3JtUmVzcG9uc2UnLCAncGFyYW1zU2VyaWFsaXplcicsXG4gICAgJ3RpbWVvdXQnLCAnd2l0aENyZWRlbnRpYWxzJywgJ2FkYXB0ZXInLCAncmVzcG9uc2VUeXBlJywgJ3hzcmZDb29raWVOYW1lJyxcbiAgICAneHNyZkhlYWRlck5hbWUnLCAnb25VcGxvYWRQcm9ncmVzcycsICdvbkRvd25sb2FkUHJvZ3Jlc3MnLFxuICAgICdtYXhDb250ZW50TGVuZ3RoJywgJ3ZhbGlkYXRlU3RhdHVzJywgJ21heFJlZGlyZWN0cycsICdodHRwQWdlbnQnLFxuICAgICdodHRwc0FnZW50JywgJ2NhbmNlbFRva2VuJywgJ3NvY2tldFBhdGgnXG4gIF07XG5cbiAgdXRpbHMuZm9yRWFjaCh2YWx1ZUZyb21Db25maWcyS2V5cywgZnVuY3Rpb24gdmFsdWVGcm9tQ29uZmlnMihwcm9wKSB7XG4gICAgaWYgKHR5cGVvZiBjb25maWcyW3Byb3BdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uZmlnW3Byb3BdID0gY29uZmlnMltwcm9wXTtcbiAgICB9XG4gIH0pO1xuXG4gIHV0aWxzLmZvckVhY2gobWVyZ2VEZWVwUHJvcGVydGllc0tleXMsIGZ1bmN0aW9uIG1lcmdlRGVlcFByb3BlcnRpZXMocHJvcCkge1xuICAgIGlmICh1dGlscy5pc09iamVjdChjb25maWcyW3Byb3BdKSkge1xuICAgICAgY29uZmlnW3Byb3BdID0gdXRpbHMuZGVlcE1lcmdlKGNvbmZpZzFbcHJvcF0sIGNvbmZpZzJbcHJvcF0pO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbmZpZzJbcHJvcF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBjb25maWcyW3Byb3BdO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNPYmplY3QoY29uZmlnMVtwcm9wXSkpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IHV0aWxzLmRlZXBNZXJnZShjb25maWcxW3Byb3BdKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb25maWcxW3Byb3BdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uZmlnW3Byb3BdID0gY29uZmlnMVtwcm9wXTtcbiAgICB9XG4gIH0pO1xuXG4gIHV0aWxzLmZvckVhY2goZGVmYXVsdFRvQ29uZmlnMktleXMsIGZ1bmN0aW9uIGRlZmF1bHRUb0NvbmZpZzIocHJvcCkge1xuICAgIGlmICh0eXBlb2YgY29uZmlnMltwcm9wXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IGNvbmZpZzJbcHJvcF07XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY29uZmlnMVtwcm9wXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IGNvbmZpZzFbcHJvcF07XG4gICAgfVxuICB9KTtcblxuICB2YXIgYXhpb3NLZXlzID0gdmFsdWVGcm9tQ29uZmlnMktleXNcbiAgICAuY29uY2F0KG1lcmdlRGVlcFByb3BlcnRpZXNLZXlzKVxuICAgIC5jb25jYXQoZGVmYXVsdFRvQ29uZmlnMktleXMpO1xuXG4gIHZhciBvdGhlcktleXMgPSBPYmplY3RcbiAgICAua2V5cyhjb25maWcyKVxuICAgIC5maWx0ZXIoZnVuY3Rpb24gZmlsdGVyQXhpb3NLZXlzKGtleSkge1xuICAgICAgcmV0dXJuIGF4aW9zS2V5cy5pbmRleE9mKGtleSkgPT09IC0xO1xuICAgIH0pO1xuXG4gIHV0aWxzLmZvckVhY2gob3RoZXJLZXlzLCBmdW5jdGlvbiBvdGhlcktleXNEZWZhdWx0VG9Db25maWcyKHByb3ApIHtcbiAgICBpZiAodHlwZW9mIGNvbmZpZzJbcHJvcF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBjb25maWcyW3Byb3BdO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbmZpZzFbcHJvcF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBjb25maWcxW3Byb3BdO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGNvbmZpZztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQSBgQ2FuY2VsYCBpcyBhbiBvYmplY3QgdGhhdCBpcyB0aHJvd24gd2hlbiBhbiBvcGVyYXRpb24gaXMgY2FuY2VsZWQuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge3N0cmluZz19IG1lc3NhZ2UgVGhlIG1lc3NhZ2UuXG4gKi9cbmZ1bmN0aW9uIENhbmNlbChtZXNzYWdlKSB7XG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG59XG5cbkNhbmNlbC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuICdDYW5jZWwnICsgKHRoaXMubWVzc2FnZSA/ICc6ICcgKyB0aGlzLm1lc3NhZ2UgOiAnJyk7XG59O1xuXG5DYW5jZWwucHJvdG90eXBlLl9fQ0FOQ0VMX18gPSB0cnVlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENhbmNlbDtcbiIsImltcG9ydCB7IGxvYWRUZWNlbnREYXRhLCBnZXRDb25maXJtZWRDb3VudCwgZ2V0Q29sb3IgfSBmcm9tICcuL2xvYWRfZGF0YSc7XG52YXIgbWFwO1xudmFyIGRpc1Byb3ZpbmNlO1xudmFyIGRpc0Nob25ncWluZztcbnZhciBsYXllcjtcbnZhciB2ZXJib3NlID0gZmFsc2U7XG52YXIgY29uZmlybWVkQ291bnQgPSBuZXcgTWFwKCk7XG52YXIgY2FjaGUgPSBuZXcgTWFwKCk7XG5cbmZ1bmN0aW9uIGdldENvdW50QnlOYW1lKG5hbWUpIHtcbiAgbGV0IGNvdW50ID0gMDtcbiAgaWYgKGNvbmZpcm1lZENvdW50LmhhcyhuYW1lKSkge1xuICAgIGNvdW50ID0gY29uZmlybWVkQ291bnQuZ2V0KG5hbWUpO1xuICB9XG4gIHJldHVybiBjb3VudDtcbn1cblxuZnVuY3Rpb24gZ2V0Q29sb3JCeU5hbWUobmFtZSkge1xuICBjb25zdCBjb2xvciA9IGdldENvbG9yKGdldENvdW50QnlOYW1lKG5hbWUpKTtcbiAgcmV0dXJuIGNvbG9yO1xufVxuXG5mdW5jdGlvbiBpbml0VmlydXNNYXAoKSB7XG5cbiAgbWFwID0gbmV3IEFNYXAuTWFwKCdjb250YWluZXInLCB7XG4gICAgem9vbTogd2luZG93LnNjcmVlbi53aWR0aCA8PSA2MDAgPyAzIDogNCxcbiAgICBjZW50ZXI6IFsxMDQuNSwgMzguNV0sXG4gICAgcGl0Y2g6IDAsXG4gICAgdmlld01vZGU6ICczRCcsXG4gIH0pO1xuXG4gIC8vIOWIm+W7uuecgeS7veWbvuWxglxuICAvLyDmjpLpmaTph43luoYoNTAwMDAwKVxuICB2YXIgYWxsX3Byb3ZpbmNlcyA9IFtcbiAgICAnMTEwMDAwJyxcbiAgICAnMTIwMDAwJyxcbiAgICAnMTMwMDAwJyxcbiAgICAnMTQwMDAwJyxcbiAgICAnMTUwMDAwJyxcbiAgICAnMjEwMDAwJyxcbiAgICAnMjIwMDAwJyxcbiAgICAnMjMwMDAwJyxcbiAgICAnMzEwMDAwJyxcbiAgICAnMzIwMDAwJyxcbiAgICAnMzMwMDAwJyxcbiAgICAnMzQwMDAwJyxcbiAgICAnMzUwMDAwJyxcbiAgICAnMzYwMDAwJyxcbiAgICAnMzcwMDAwJyxcbiAgICAnNDEwMDAwJyxcbiAgICAnNDIwMDAwJyxcbiAgICAnNDMwMDAwJyxcbiAgICAnNDQwMDAwJyxcbiAgICAnNDUwMDAwJyxcbiAgICAnNDYwMDAwJyxcbiAgICAnNTEwMDAwJyxcbiAgICAnNTIwMDAwJyxcbiAgICAnNTMwMDAwJyxcbiAgICAnNTQwMDAwJyxcbiAgICAnNjEwMDAwJyxcbiAgICAnNjIwMDAwJyxcbiAgICAnNjMwMDAwJyxcbiAgICAnNjQwMDAwJyxcbiAgICAnNjUwMDAwJyxcbiAgICAnNzEwMDAwJyxcbiAgICAnODEwMDAwJyxcbiAgICAnODIwMDAwJyxcbiAgXTtcbiAgZGlzUHJvdmluY2UgPSBuZXcgQU1hcC5EaXN0cmljdExheWVyLlByb3ZpbmNlKHtcbiAgICB6SW5kZXg6IDEyLFxuICAgIGFkY29kZTogYWxsX3Byb3ZpbmNlcyxcbiAgICBkZXB0aDogMSxcbiAgICBzdHlsZXM6IHtcbiAgICAgIGZpbGw6IGZ1bmN0aW9uKHByb3BlcnRpZXMpIHtcbiAgICAgICAgcmV0dXJuIGdldENvbG9yQnlOYW1lKHByb3BlcnRpZXMuTkFNRV9DSE4pO1xuICAgICAgfSxcbiAgICAgICdwcm92aW5jZS1zdHJva2UnOiAnYmxhY2snLFxuICAgICAgJ2NpdHktc3Ryb2tlJzogJ2Nvcm5mbG93ZXJibHVlJywgLy8g5Lit5Zu95Zyw57qn5biC6L6555WMXG4gICAgICAnY291bnR5LXN0cm9rZSc6ICdyZ2JhKDI1NSwyNTUsMjU1LDAuNSknLCAvLyDkuK3lm73ljLrljr/ovrnnlYxcbiAgICB9LFxuICB9KTtcblxuICBkaXNQcm92aW5jZS5zZXRNYXAobWFwKTtcblxuICBkaXNDaG9uZ3FpbmcgPSBuZXcgQU1hcC5EaXN0cmljdExheWVyLlByb3ZpbmNlKHtcbiAgICB6SW5kZXg6IDEyLFxuICAgIGFkY29kZTogWyc1MDAwMDAnXSxcbiAgICBkZXB0aDogMixcbiAgICBzdHlsZXM6IHtcbiAgICAgIGZpbGw6IGZ1bmN0aW9uKHByb3BlcnRpZXMpIHtcbiAgICAgICAgcmV0dXJuIGdldENvbG9yQnlOYW1lKHByb3BlcnRpZXMuTkFNRV9DSE4pO1xuICAgICAgfSxcbiAgICAgICdwcm92aW5jZS1zdHJva2UnOiAnYmxhY2snLFxuICAgICAgJ2NpdHktc3Ryb2tlJzogJ2Nvcm5mbG93ZXJibHVlJywgLy8g5Lit5Zu95Zyw57qn5biC6L6555WMXG4gICAgICAnY291bnR5LXN0cm9rZSc6ICdyZ2JhKDI1NSwyNTUsMjU1LDAuNSknLCAvLyDkuK3lm73ljLrljr/ovrnnlYxcbiAgICB9LFxuICB9KTtcblxuICBkaXNDaG9uZ3Fpbmcuc2V0TWFwKG1hcCk7XG4gIG1hcC5vbignY29tcGxldGUnLCBmdW5jdGlvbigpIHtcbiAgICBsYXllciA9IG5ldyBBTWFwLkxhYmVsc0xheWVyKHtcbiAgICAgIGZpdFZpZXc6IHRydWUsXG4gICAgfSk7XG4gICAgbWFwLmFkZChsYXllcik7XG4gICAgbWFwLm9uKCdjbGljaycsIGNsaWNrSGFuZGVyKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNsaWNrSGFuZGVyKGV2KSB7XG4gIGlmICh2ZXJib3NlKSB7XG4gICAgY29uc29sZS5sb2coJ2V2JywgZXYpO1xuICB9XG4gIHZhciBweCA9IGV2LnBpeGVsO1xuICB2YXIgcHJvcHMgPSBkaXNQcm92aW5jZS5nZXREaXN0cmljdEJ5Q29udGFpbmVyUG9zKHB4KTtcbiAgaWYgKHZlcmJvc2UpIHtcbiAgICBjb25zb2xlLmxvZygncHJvcHMxJywgcHJvcHMpO1xuICB9XG4gIGlmICghcHJvcHMpIHtcbiAgICBwcm9wcyA9IGRpc0Nob25ncWluZy5nZXREaXN0cmljdEJ5Q29udGFpbmVyUG9zKHB4KTtcbiAgfVxuICBpZiAodmVyYm9zZSkge1xuICAgIGNvbnNvbGUubG9nKCdwcm9wczEnLCBwcm9wcyk7XG4gIH1cbiAgaWYgKHByb3BzKSB7XG4gICAgY29uc3Qgc2VwZXJhdG9yID0gJyAnO1xuICAgIC8vIOS6rOa0peayqua4r+a+s+WPsFxuICAgIGlmIChbJzExMDAwMCcsICcxMjAwMDAnLCAnMzEwMDAwJywgJzcxMDAwMCcsICc4MTAwMDAnLCAnODIwMDAwJ10uaW5jbHVkZXMocHJvcHMuYWRjb2RlX3Byby50b1N0cmluZygpKSkge1xuICAgICAgY29uc3QgdGV4dCA9IHByb3BzLk5BTUVfQ0hOICsgc2VwZXJhdG9yICsgZ2V0Q291bnRCeU5hbWUocHJvcHMuTkFNRV9DSE4pO1xuICAgICAgLy9jb25zb2xlLmxvZygndGV4dCcsIHRleHQpO1xuICAgICAgdmFyIGxhYmVsTWFya2VyID0gbmV3IEFNYXAuTGFiZWxNYXJrZXIoe1xuICAgICAgICBwb3NpdGlvbjogW3Byb3BzLngsIHByb3BzLnldLFxuICAgICAgICB0ZXh0OiB7IGNvbnRlbnQ6IHRleHQgfSxcbiAgICAgICAgcmFuazogMixcbiAgICAgIH0pO1xuICAgICAgbGF5ZXIuYWRkKGxhYmVsTWFya2VyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8g5bGV56S654K55Ye75Yy65Z+f5omA5Zyo55yB5Lu95q+P5Liq5biC55qE55eF5L6L5pWw5a2XXG4gICAgICBBTWFwLnBsdWdpbignQU1hcC5EaXN0cmljdFNlYXJjaCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICBjb25zdCBpc19jaG9uZ3FpbmcgPSBwcm9wcy5hZGNvZGVfcHJvLnRvU3RyaW5nKCkgPT0gJzUwMDAwMCc7XG4gICAgICAgIGNvbnN0IHN1YmRpc3RyaWN0ID0gaXNfY2hvbmdxaW5nID8gMiA6IDE7XG4gICAgICAgIC8vY29uc29sZS5sb2coJ3N1YmRpc3RyaWN0Jywgc3ViZGlzdHJpY3QpXG4gICAgICAgIGZ1bmN0aW9uIGRpc3RyaWN0c0hhbmRsZXIocmVzdWx0KSB7XG4gICAgICAgICAgaWYgKCFpc19jaG9uZ3FpbmcpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgcmVzdWx0LmRpc3RyaWN0TGlzdFswXS5kaXN0cmljdExpc3QpIHtcbiAgICAgICAgICAgICAgY29uc3QgdGV4dCA9IGVudHJ5Lm5hbWUgKyBzZXBlcmF0b3IgKyBnZXRDb3VudEJ5TmFtZShlbnRyeS5uYW1lKTtcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcInRleHRcIiwgdGV4dCk7XG4gICAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogZW50cnkuY2VudGVyLFxuICAgICAgICAgICAgICAgIHRleHQ6IHsgY29udGVudDogdGV4dCB9LFxuICAgICAgICAgICAgICAgIHJhbms6IGVudHJ5LmFkY29kZSA9PSBwcm9wcy5hZGNvZGUudG9TdHJpbmcoKSA/IDIgOiAxLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdvcHRpb24nLCBvcHRpb24pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHZhciBsYWJlbE1hcmtlciA9IG5ldyBBTWFwLkxhYmVsTWFya2VyKG9wdGlvbik7XG4gICAgICAgICAgICAgIGxheWVyLmFkZChsYWJlbE1hcmtlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIOmHjeW6humDiuWOv1xuICAgICAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiByZXN1bHQuZGlzdHJpY3RMaXN0WzBdLmRpc3RyaWN0TGlzdFswXS5kaXN0cmljdExpc3QpIHtcbiAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0ge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBlbnRyeS5jZW50ZXIsXG4gICAgICAgICAgICAgICAgdGV4dDoge1xuICAgICAgICAgICAgICAgICAgY29udGVudDogZW50cnkubmFtZSArIHNlcGVyYXRvciArIGdldENvdW50QnlOYW1lKGVudHJ5Lm5hbWUpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmFuazogZW50cnkuYWRjb2RlID09IHByb3BzLmFkY29kZS50b1N0cmluZygpID8gMiA6IDEsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ29wdGlvbiwg6YeN5bqG6YOK5Y6/Jywgb3B0aW9uKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB2YXIgbGFiZWxNYXJrZXIgPSBuZXcgQU1hcC5MYWJlbE1hcmtlcihvcHRpb24pO1xuICAgICAgICAgICAgICBsYXllci5hZGQobGFiZWxNYXJrZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8g6YeN5bqG5Z+O5Yy6XG4gICAgICAgICAgICB2YXIgY29uZmlybWVkQ291bnQgPSAwO1xuICAgICAgICAgICAgY29uc3QgY2hvbmdxaW5nX2Rvd250b3duID0gcmVzdWx0LmRpc3RyaWN0TGlzdFswXS5kaXN0cmljdExpc3RbMV07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGNob25ncWluZ19kb3dudG93bi5kaXN0cmljdExpc3QpIHtcbiAgICAgICAgICAgICAgY29uZmlybWVkQ291bnQgKz0gZ2V0Q291bnRCeU5hbWUoZW50cnkubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBvcHRpb24gPSB7XG4gICAgICAgICAgICAgIHBvc2l0aW9uOiBjaG9uZ3FpbmdfZG93bnRvd24uY2VudGVyLFxuICAgICAgICAgICAgICB0ZXh0OiB7XG4gICAgICAgICAgICAgICAgY29udGVudDogY2hvbmdxaW5nX2Rvd250b3duLm5hbWUgKyBzZXBlcmF0b3IgKyBjb25maXJtZWRDb3VudCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgcmFuazogcHJvcHMuYWRjb2RlX2NpdC50b1N0cmluZygpID09ICc1MDAxMDAnID8gMiA6IDEsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ29wdGlvbiwg6YeN5bqG5Z+O5Yy6Jywgb3B0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBsYWJlbE1hcmtlciA9IG5ldyBBTWFwLkxhYmVsTWFya2VyKG9wdGlvbik7XG4gICAgICAgICAgICBsYXllci5hZGQobGFiZWxNYXJrZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgZGlzdHJpY3RTZWFyY2ggPSBuZXcgQU1hcC5EaXN0cmljdFNlYXJjaCh7XG4gICAgICAgICAgbGV2ZWw6ICdkaXN0cmljdCcsXG4gICAgICAgICAgc3ViZGlzdHJpY3Q6IHN1YmRpc3RyaWN0LFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgayA9IHByb3BzLmFkY29kZV9wcm8udG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKGNhY2hlLmdldChrKSkge1xuICAgICAgICAgIGRpc3RyaWN0c0hhbmRsZXIoY2FjaGUuZ2V0KGspKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkaXN0cmljdFNlYXJjaC5zZWFyY2goaywgZnVuY3Rpb24oc3RhdHVzLCByZXN1bHQpIHtcbiAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdzdGF0dXMnLCBzdGF0dXMpO1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygncmVzdWx0JywgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gJ2NvbXBsZXRlJykge1xuICAgICAgICAgICAgICBjYWNoZS5zZXQoaywgcmVzdWx0KTtcbiAgICAgICAgICAgICAgZGlzdHJpY3RzSGFuZGxlcihyZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uKCkge1xuICBsb2FkVGVjZW50RGF0YSh7IGpzb25wOiB0cnVlIH0pLnRoZW4oZGF0YSA9PiB7XG4gICAgY29uZmlybWVkQ291bnQgPSBnZXRDb25maXJtZWRDb3VudChkYXRhKTtcbiAgICAvLyBmaXggc29tZSBidWdzIG9mIEFNYXBcbiAgICBjb25maXJtZWRDb3VudC5zZXQoJ+mCs+W3nuW4gicsIGNvbmZpcm1lZENvdW50LmdldCgn5b6Q5bee5biCJykpO1xuICAgIGNvbmZpcm1lZENvdW50LnNldCgn6I6x6Iqc5biCJywgY29uZmlybWVkQ291bnQuZ2V0KCfmtY7ljZfluIInKSk7XG4gICAgaW5pdFZpcnVzTWFwKCk7XG4gIH0pO1xufSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuXHRpZiAoIW1vZHVsZS53ZWJwYWNrUG9seWZpbGwpIHtcblx0XHRtb2R1bGUuZGVwcmVjYXRlID0gZnVuY3Rpb24oKSB7fTtcblx0XHRtb2R1bGUucGF0aHMgPSBbXTtcblx0XHQvLyBtb2R1bGUucGFyZW50ID0gdW5kZWZpbmVkIGJ5IGRlZmF1bHRcblx0XHRpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJsb2FkZWRcIiwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBtb2R1bGUubDtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImlkXCIsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0bW9kdWxlLndlYnBhY2tQb2x5ZmlsbCA9IDE7XG5cdH1cblx0cmV0dXJuIG1vZHVsZTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL2F4aW9zJyk7IiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4vaGVscGVycy9iaW5kJyk7XG52YXIgQXhpb3MgPSByZXF1aXJlKCcuL2NvcmUvQXhpb3MnKTtcbnZhciBtZXJnZUNvbmZpZyA9IHJlcXVpcmUoJy4vY29yZS9tZXJnZUNvbmZpZycpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnLi9kZWZhdWx0cycpO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZWZhdWx0Q29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKiBAcmV0dXJuIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdENvbmZpZykge1xuICB2YXIgY29udGV4dCA9IG5ldyBBeGlvcyhkZWZhdWx0Q29uZmlnKTtcbiAgdmFyIGluc3RhbmNlID0gYmluZChBeGlvcy5wcm90b3R5cGUucmVxdWVzdCwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBheGlvcy5wcm90b3R5cGUgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBBeGlvcy5wcm90b3R5cGUsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgY29udGV4dCB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIGNvbnRleHQpO1xuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuLy8gQ3JlYXRlIHRoZSBkZWZhdWx0IGluc3RhbmNlIHRvIGJlIGV4cG9ydGVkXG52YXIgYXhpb3MgPSBjcmVhdGVJbnN0YW5jZShkZWZhdWx0cyk7XG5cbi8vIEV4cG9zZSBBeGlvcyBjbGFzcyB0byBhbGxvdyBjbGFzcyBpbmhlcml0YW5jZVxuYXhpb3MuQXhpb3MgPSBBeGlvcztcblxuLy8gRmFjdG9yeSBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlc1xuYXhpb3MuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGluc3RhbmNlQ29uZmlnKSB7XG4gIHJldHVybiBjcmVhdGVJbnN0YW5jZShtZXJnZUNvbmZpZyhheGlvcy5kZWZhdWx0cywgaW5zdGFuY2VDb25maWcpKTtcbn07XG5cbi8vIEV4cG9zZSBDYW5jZWwgJiBDYW5jZWxUb2tlblxuYXhpb3MuQ2FuY2VsID0gcmVxdWlyZSgnLi9jYW5jZWwvQ2FuY2VsJyk7XG5heGlvcy5DYW5jZWxUb2tlbiA9IHJlcXVpcmUoJy4vY2FuY2VsL0NhbmNlbFRva2VuJyk7XG5heGlvcy5pc0NhbmNlbCA9IHJlcXVpcmUoJy4vY2FuY2VsL2lzQ2FuY2VsJyk7XG5cbi8vIEV4cG9zZSBhbGwvc3ByZWFkXG5heGlvcy5hbGwgPSBmdW5jdGlvbiBhbGwocHJvbWlzZXMpIHtcbiAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcbn07XG5heGlvcy5zcHJlYWQgPSByZXF1aXJlKCcuL2hlbHBlcnMvc3ByZWFkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gYXhpb3M7XG5cbi8vIEFsbG93IHVzZSBvZiBkZWZhdWx0IGltcG9ydCBzeW50YXggaW4gVHlwZVNjcmlwdFxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IGF4aW9zO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgYnVpbGRVUkwgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2J1aWxkVVJMJyk7XG52YXIgSW50ZXJjZXB0b3JNYW5hZ2VyID0gcmVxdWlyZSgnLi9JbnRlcmNlcHRvck1hbmFnZXInKTtcbnZhciBkaXNwYXRjaFJlcXVlc3QgPSByZXF1aXJlKCcuL2Rpc3BhdGNoUmVxdWVzdCcpO1xudmFyIG1lcmdlQ29uZmlnID0gcmVxdWlyZSgnLi9tZXJnZUNvbmZpZycpO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZUNvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBBeGlvcyhpbnN0YW5jZUNvbmZpZykge1xuICB0aGlzLmRlZmF1bHRzID0gaW5zdGFuY2VDb25maWc7XG4gIHRoaXMuaW50ZXJjZXB0b3JzID0ge1xuICAgIHJlcXVlc3Q6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKSxcbiAgICByZXNwb25zZTogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpXG4gIH07XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHNwZWNpZmljIGZvciB0aGlzIHJlcXVlc3QgKG1lcmdlZCB3aXRoIHRoaXMuZGVmYXVsdHMpXG4gKi9cbkF4aW9zLnByb3RvdHlwZS5yZXF1ZXN0ID0gZnVuY3Rpb24gcmVxdWVzdChjb25maWcpIHtcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIC8vIEFsbG93IGZvciBheGlvcygnZXhhbXBsZS91cmwnWywgY29uZmlnXSkgYSBsYSBmZXRjaCBBUElcbiAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uZmlnID0gYXJndW1lbnRzWzFdIHx8IHt9O1xuICAgIGNvbmZpZy51cmwgPSBhcmd1bWVudHNbMF07XG4gIH0gZWxzZSB7XG4gICAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICB9XG5cbiAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcblxuICAvLyBTZXQgY29uZmlnLm1ldGhvZFxuICBpZiAoY29uZmlnLm1ldGhvZCkge1xuICAgIGNvbmZpZy5tZXRob2QgPSBjb25maWcubWV0aG9kLnRvTG93ZXJDYXNlKCk7XG4gIH0gZWxzZSBpZiAodGhpcy5kZWZhdWx0cy5tZXRob2QpIHtcbiAgICBjb25maWcubWV0aG9kID0gdGhpcy5kZWZhdWx0cy5tZXRob2QudG9Mb3dlckNhc2UoKTtcbiAgfSBlbHNlIHtcbiAgICBjb25maWcubWV0aG9kID0gJ2dldCc7XG4gIH1cblxuICAvLyBIb29rIHVwIGludGVyY2VwdG9ycyBtaWRkbGV3YXJlXG4gIHZhciBjaGFpbiA9IFtkaXNwYXRjaFJlcXVlc3QsIHVuZGVmaW5lZF07XG4gIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGNvbmZpZyk7XG5cbiAgdGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uIHVuc2hpZnRSZXF1ZXN0SW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgY2hhaW4udW5zaGlmdChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgfSk7XG5cbiAgdGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbiBwdXNoUmVzcG9uc2VJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICBjaGFpbi5wdXNoKGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICB9KTtcblxuICB3aGlsZSAoY2hhaW4ubGVuZ3RoKSB7XG4gICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihjaGFpbi5zaGlmdCgpLCBjaGFpbi5zaGlmdCgpKTtcbiAgfVxuXG4gIHJldHVybiBwcm9taXNlO1xufTtcblxuQXhpb3MucHJvdG90eXBlLmdldFVyaSA9IGZ1bmN0aW9uIGdldFVyaShjb25maWcpIHtcbiAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcbiAgcmV0dXJuIGJ1aWxkVVJMKGNvbmZpZy51cmwsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKS5yZXBsYWNlKC9eXFw/LywgJycpO1xufTtcblxuLy8gUHJvdmlkZSBhbGlhc2VzIGZvciBzdXBwb3J0ZWQgcmVxdWVzdCBtZXRob2RzXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ29wdGlvbnMnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbih1cmwsIGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QodXRpbHMubWVyZ2UoY29uZmlnIHx8IHt9LCB7XG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIHVybDogdXJsXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBkYXRhLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KHV0aWxzLm1lcmdlKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICB1cmw6IHVybCxcbiAgICAgIGRhdGE6IGRhdGFcbiAgICB9KSk7XG4gIH07XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBBeGlvcztcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5mdW5jdGlvbiBJbnRlcmNlcHRvck1hbmFnZXIoKSB7XG4gIHRoaXMuaGFuZGxlcnMgPSBbXTtcbn1cblxuLyoqXG4gKiBBZGQgYSBuZXcgaW50ZXJjZXB0b3IgdG8gdGhlIHN0YWNrXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVsZmlsbGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHRoZW5gIGZvciBhIGBQcm9taXNlYFxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0ZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgcmVqZWN0YCBmb3IgYSBgUHJvbWlzZWBcbiAqXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IEFuIElEIHVzZWQgdG8gcmVtb3ZlIGludGVyY2VwdG9yIGxhdGVyXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUudXNlID0gZnVuY3Rpb24gdXNlKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpIHtcbiAgdGhpcy5oYW5kbGVycy5wdXNoKHtcbiAgICBmdWxmaWxsZWQ6IGZ1bGZpbGxlZCxcbiAgICByZWplY3RlZDogcmVqZWN0ZWRcbiAgfSk7XG4gIHJldHVybiB0aGlzLmhhbmRsZXJzLmxlbmd0aCAtIDE7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbiBpbnRlcmNlcHRvciBmcm9tIHRoZSBzdGFja1xuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBpZCBUaGUgSUQgdGhhdCB3YXMgcmV0dXJuZWQgYnkgYHVzZWBcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS5lamVjdCA9IGZ1bmN0aW9uIGVqZWN0KGlkKSB7XG4gIGlmICh0aGlzLmhhbmRsZXJzW2lkXSkge1xuICAgIHRoaXMuaGFuZGxlcnNbaWRdID0gbnVsbDtcbiAgfVxufTtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYWxsIHRoZSByZWdpc3RlcmVkIGludGVyY2VwdG9yc1xuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHNraXBwaW5nIG92ZXIgYW55XG4gKiBpbnRlcmNlcHRvcnMgdGhhdCBtYXkgaGF2ZSBiZWNvbWUgYG51bGxgIGNhbGxpbmcgYGVqZWN0YC5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBpbnRlcmNlcHRvclxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiBmb3JFYWNoKGZuKSB7XG4gIHV0aWxzLmZvckVhY2godGhpcy5oYW5kbGVycywgZnVuY3Rpb24gZm9yRWFjaEhhbmRsZXIoaCkge1xuICAgIGlmIChoICE9PSBudWxsKSB7XG4gICAgICBmbihoKTtcbiAgICB9XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmNlcHRvck1hbmFnZXI7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciB0cmFuc2Zvcm1EYXRhID0gcmVxdWlyZSgnLi90cmFuc2Zvcm1EYXRhJyk7XG52YXIgaXNDYW5jZWwgPSByZXF1aXJlKCcuLi9jYW5jZWwvaXNDYW5jZWwnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4uL2RlZmF1bHRzJyk7XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3QgdG8gdGhlIHNlcnZlciB1c2luZyB0aGUgY29uZmlndXJlZCBhZGFwdGVyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGlzcGF0Y2hSZXF1ZXN0KGNvbmZpZykge1xuICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgLy8gRW5zdXJlIGhlYWRlcnMgZXhpc3RcbiAgY29uZmlnLmhlYWRlcnMgPSBjb25maWcuaGVhZGVycyB8fCB7fTtcblxuICAvLyBUcmFuc2Zvcm0gcmVxdWVzdCBkYXRhXG4gIGNvbmZpZy5kYXRhID0gdHJhbnNmb3JtRGF0YShcbiAgICBjb25maWcuZGF0YSxcbiAgICBjb25maWcuaGVhZGVycyxcbiAgICBjb25maWcudHJhbnNmb3JtUmVxdWVzdFxuICApO1xuXG4gIC8vIEZsYXR0ZW4gaGVhZGVyc1xuICBjb25maWcuaGVhZGVycyA9IHV0aWxzLm1lcmdlKFxuICAgIGNvbmZpZy5oZWFkZXJzLmNvbW1vbiB8fCB7fSxcbiAgICBjb25maWcuaGVhZGVyc1tjb25maWcubWV0aG9kXSB8fCB7fSxcbiAgICBjb25maWcuaGVhZGVyc1xuICApO1xuXG4gIHV0aWxzLmZvckVhY2goXG4gICAgWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAnY29tbW9uJ10sXG4gICAgZnVuY3Rpb24gY2xlYW5IZWFkZXJDb25maWcobWV0aG9kKSB7XG4gICAgICBkZWxldGUgY29uZmlnLmhlYWRlcnNbbWV0aG9kXTtcbiAgICB9XG4gICk7XG5cbiAgdmFyIGFkYXB0ZXIgPSBjb25maWcuYWRhcHRlciB8fCBkZWZhdWx0cy5hZGFwdGVyO1xuXG4gIHJldHVybiBhZGFwdGVyKGNvbmZpZykudGhlbihmdW5jdGlvbiBvbkFkYXB0ZXJSZXNvbHV0aW9uKHJlc3BvbnNlKSB7XG4gICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICByZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YShcbiAgICAgIHJlc3BvbnNlLmRhdGEsXG4gICAgICByZXNwb25zZS5oZWFkZXJzLFxuICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlXG4gICAgKTtcblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSwgZnVuY3Rpb24gb25BZGFwdGVyUmVqZWN0aW9uKHJlYXNvbikge1xuICAgIGlmICghaXNDYW5jZWwocmVhc29uKSkge1xuICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ucmVzcG9uc2UpIHtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhKFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzLFxuICAgICAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBUcmFuc2Zvcm0gdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBvciBhIHJlc3BvbnNlXG4gKlxuICogQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBkYXRhIFRoZSBkYXRhIHRvIGJlIHRyYW5zZm9ybWVkXG4gKiBAcGFyYW0ge0FycmF5fSBoZWFkZXJzIFRoZSBoZWFkZXJzIGZvciB0aGUgcmVxdWVzdCBvciByZXNwb25zZVxuICogQHBhcmFtIHtBcnJheXxGdW5jdGlvbn0gZm5zIEEgc2luZ2xlIGZ1bmN0aW9uIG9yIEFycmF5IG9mIGZ1bmN0aW9uc1xuICogQHJldHVybnMgeyp9IFRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZWQgZGF0YVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHRyYW5zZm9ybURhdGEoZGF0YSwgaGVhZGVycywgZm5zKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICB1dGlscy5mb3JFYWNoKGZucywgZnVuY3Rpb24gdHJhbnNmb3JtKGZuKSB7XG4gICAgZGF0YSA9IGZuKGRhdGEsIGhlYWRlcnMpO1xuICB9KTtcblxuICByZXR1cm4gZGF0YTtcbn07XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG5vcm1hbGl6ZUhlYWRlck5hbWUoaGVhZGVycywgbm9ybWFsaXplZE5hbWUpIHtcbiAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLCBmdW5jdGlvbiBwcm9jZXNzSGVhZGVyKHZhbHVlLCBuYW1lKSB7XG4gICAgaWYgKG5hbWUgIT09IG5vcm1hbGl6ZWROYW1lICYmIG5hbWUudG9VcHBlckNhc2UoKSA9PT0gbm9ybWFsaXplZE5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgaGVhZGVyc1tub3JtYWxpemVkTmFtZV0gPSB2YWx1ZTtcbiAgICAgIGRlbGV0ZSBoZWFkZXJzW25hbWVdO1xuICAgIH1cbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY3JlYXRlRXJyb3IgPSByZXF1aXJlKCcuL2NyZWF0ZUVycm9yJyk7XG5cbi8qKlxuICogUmVzb2x2ZSBvciByZWplY3QgYSBQcm9taXNlIGJhc2VkIG9uIHJlc3BvbnNlIHN0YXR1cy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXNvbHZlIEEgZnVuY3Rpb24gdGhhdCByZXNvbHZlcyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdCBBIGZ1bmN0aW9uIHRoYXQgcmVqZWN0cyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2UuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpIHtcbiAgdmFyIHZhbGlkYXRlU3RhdHVzID0gcmVzcG9uc2UuY29uZmlnLnZhbGlkYXRlU3RhdHVzO1xuICBpZiAoIXZhbGlkYXRlU3RhdHVzIHx8IHZhbGlkYXRlU3RhdHVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgfSBlbHNlIHtcbiAgICByZWplY3QoY3JlYXRlRXJyb3IoXG4gICAgICAnUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAnICsgcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgcmVzcG9uc2UuY29uZmlnLFxuICAgICAgbnVsbCxcbiAgICAgIHJlc3BvbnNlLnJlcXVlc3QsXG4gICAgICByZXNwb25zZVxuICAgICkpO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFVwZGF0ZSBhbiBFcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgY29uZmlnLCBlcnJvciBjb2RlLCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtFcnJvcn0gZXJyb3IgVGhlIGVycm9yIHRvIHVwZGF0ZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZV0gVGhlIGVycm9yIGNvZGUgKGZvciBleGFtcGxlLCAnRUNPTk5BQk9SVEVEJykuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgZXJyb3IuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZW5oYW5jZUVycm9yKGVycm9yLCBjb25maWcsIGNvZGUsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIGVycm9yLmNvbmZpZyA9IGNvbmZpZztcbiAgaWYgKGNvZGUpIHtcbiAgICBlcnJvci5jb2RlID0gY29kZTtcbiAgfVxuXG4gIGVycm9yLnJlcXVlc3QgPSByZXF1ZXN0O1xuICBlcnJvci5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICBlcnJvci5pc0F4aW9zRXJyb3IgPSB0cnVlO1xuXG4gIGVycm9yLnRvSlNPTiA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBTdGFuZGFyZFxuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgLy8gTWljcm9zb2Z0XG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIG51bWJlcjogdGhpcy5udW1iZXIsXG4gICAgICAvLyBNb3ppbGxhXG4gICAgICBmaWxlTmFtZTogdGhpcy5maWxlTmFtZSxcbiAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlcixcbiAgICAgIGNvbHVtbk51bWJlcjogdGhpcy5jb2x1bW5OdW1iZXIsXG4gICAgICBzdGFjazogdGhpcy5zdGFjayxcbiAgICAgIC8vIEF4aW9zXG4gICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgY29kZTogdGhpcy5jb2RlXG4gICAgfTtcbiAgfTtcbiAgcmV0dXJuIGVycm9yO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGlzQWJzb2x1dGVVUkwgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwnKTtcbnZhciBjb21iaW5lVVJMcyA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvY29tYmluZVVSTHMnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIGJhc2VVUkwgd2l0aCB0aGUgcmVxdWVzdGVkVVJMLFxuICogb25seSB3aGVuIHRoZSByZXF1ZXN0ZWRVUkwgaXMgbm90IGFscmVhZHkgYW4gYWJzb2x1dGUgVVJMLlxuICogSWYgdGhlIHJlcXVlc3RVUkwgaXMgYWJzb2x1dGUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmVxdWVzdGVkVVJMIHVudG91Y2hlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0ZWRVUkwgQWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGNvbWJpbmVcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBmdWxsIHBhdGhcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZEZ1bGxQYXRoKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCkge1xuICBpZiAoYmFzZVVSTCAmJiAhaXNBYnNvbHV0ZVVSTChyZXF1ZXN0ZWRVUkwpKSB7XG4gICAgcmV0dXJuIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCk7XG4gIH1cbiAgcmV0dXJuIHJlcXVlc3RlZFVSTDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgVVJMIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0Fic29sdXRlVVJMKHVybCkge1xuICAvLyBBIFVSTCBpcyBjb25zaWRlcmVkIGFic29sdXRlIGlmIGl0IGJlZ2lucyB3aXRoIFwiPHNjaGVtZT46Ly9cIiBvciBcIi8vXCIgKHByb3RvY29sLXJlbGF0aXZlIFVSTCkuXG4gIC8vIFJGQyAzOTg2IGRlZmluZXMgc2NoZW1lIG5hbWUgYXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGJlZ2lubmluZyB3aXRoIGEgbGV0dGVyIGFuZCBmb2xsb3dlZFxuICAvLyBieSBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycywgZGlnaXRzLCBwbHVzLCBwZXJpb2QsIG9yIGh5cGhlbi5cbiAgcmV0dXJuIC9eKFthLXpdW2EtelxcZFxcK1xcLVxcLl0qOik/XFwvXFwvL2kudGVzdCh1cmwpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIHNwZWNpZmllZCBVUkxzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpdmVVUkwgVGhlIHJlbGF0aXZlIFVSTFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIFVSTFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlbGF0aXZlVVJMKSB7XG4gIHJldHVybiByZWxhdGl2ZVVSTFxuICAgID8gYmFzZVVSTC5yZXBsYWNlKC9cXC8rJC8sICcnKSArICcvJyArIHJlbGF0aXZlVVJMLnJlcGxhY2UoL15cXC8rLywgJycpXG4gICAgOiBiYXNlVVJMO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG4vLyBIZWFkZXJzIHdob3NlIGR1cGxpY2F0ZXMgYXJlIGlnbm9yZWQgYnkgbm9kZVxuLy8gYy5mLiBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX21lc3NhZ2VfaGVhZGVyc1xudmFyIGlnbm9yZUR1cGxpY2F0ZU9mID0gW1xuICAnYWdlJywgJ2F1dGhvcml6YXRpb24nLCAnY29udGVudC1sZW5ndGgnLCAnY29udGVudC10eXBlJywgJ2V0YWcnLFxuICAnZXhwaXJlcycsICdmcm9tJywgJ2hvc3QnLCAnaWYtbW9kaWZpZWQtc2luY2UnLCAnaWYtdW5tb2RpZmllZC1zaW5jZScsXG4gICdsYXN0LW1vZGlmaWVkJywgJ2xvY2F0aW9uJywgJ21heC1mb3J3YXJkcycsICdwcm94eS1hdXRob3JpemF0aW9uJyxcbiAgJ3JlZmVyZXInLCAncmV0cnktYWZ0ZXInLCAndXNlci1hZ2VudCdcbl07XG5cbi8qKlxuICogUGFyc2UgaGVhZGVycyBpbnRvIGFuIG9iamVjdFxuICpcbiAqIGBgYFxuICogRGF0ZTogV2VkLCAyNyBBdWcgMjAxNCAwODo1ODo0OSBHTVRcbiAqIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvblxuICogQ29ubmVjdGlvbjoga2VlcC1hbGl2ZVxuICogVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBoZWFkZXJzIEhlYWRlcnMgbmVlZGluZyB0byBiZSBwYXJzZWRcbiAqIEByZXR1cm5zIHtPYmplY3R9IEhlYWRlcnMgcGFyc2VkIGludG8gYW4gb2JqZWN0XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcGFyc2VIZWFkZXJzKGhlYWRlcnMpIHtcbiAgdmFyIHBhcnNlZCA9IHt9O1xuICB2YXIga2V5O1xuICB2YXIgdmFsO1xuICB2YXIgaTtcblxuICBpZiAoIWhlYWRlcnMpIHsgcmV0dXJuIHBhcnNlZDsgfVxuXG4gIHV0aWxzLmZvckVhY2goaGVhZGVycy5zcGxpdCgnXFxuJyksIGZ1bmN0aW9uIHBhcnNlcihsaW5lKSB7XG4gICAgaSA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgIGtleSA9IHV0aWxzLnRyaW0obGluZS5zdWJzdHIoMCwgaSkpLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFsID0gdXRpbHMudHJpbShsaW5lLnN1YnN0cihpICsgMSkpO1xuXG4gICAgaWYgKGtleSkge1xuICAgICAgaWYgKHBhcnNlZFtrZXldICYmIGlnbm9yZUR1cGxpY2F0ZU9mLmluZGV4T2Yoa2V5KSA+PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChrZXkgPT09ICdzZXQtY29va2llJykge1xuICAgICAgICBwYXJzZWRba2V5XSA9IChwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldIDogW10pLmNvbmNhdChbdmFsXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoXG4gIHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBoYXZlIGZ1bGwgc3VwcG9ydCBvZiB0aGUgQVBJcyBuZWVkZWQgdG8gdGVzdFxuICAvLyB3aGV0aGVyIHRoZSByZXF1ZXN0IFVSTCBpcyBvZiB0aGUgc2FtZSBvcmlnaW4gYXMgY3VycmVudCBsb2NhdGlvbi5cbiAgICAoZnVuY3Rpb24gc3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgdmFyIG1zaWUgPSAvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgICAgdmFyIHVybFBhcnNpbmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgdmFyIG9yaWdpblVSTDtcblxuICAgICAgLyoqXG4gICAgKiBQYXJzZSBhIFVSTCB0byBkaXNjb3ZlciBpdCdzIGNvbXBvbmVudHNcbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsIFRoZSBVUkwgdG8gYmUgcGFyc2VkXG4gICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgICovXG4gICAgICBmdW5jdGlvbiByZXNvbHZlVVJMKHVybCkge1xuICAgICAgICB2YXIgaHJlZiA9IHVybDtcblxuICAgICAgICBpZiAobXNpZSkge1xuICAgICAgICAvLyBJRSBuZWVkcyBhdHRyaWJ1dGUgc2V0IHR3aWNlIHRvIG5vcm1hbGl6ZSBwcm9wZXJ0aWVzXG4gICAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG4gICAgICAgICAgaHJlZiA9IHVybFBhcnNpbmdOb2RlLmhyZWY7XG4gICAgICAgIH1cblxuICAgICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcblxuICAgICAgICAvLyB1cmxQYXJzaW5nTm9kZSBwcm92aWRlcyB0aGUgVXJsVXRpbHMgaW50ZXJmYWNlIC0gaHR0cDovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybHV0aWxzXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaHJlZjogdXJsUGFyc2luZ05vZGUuaHJlZixcbiAgICAgICAgICBwcm90b2NvbDogdXJsUGFyc2luZ05vZGUucHJvdG9jb2wgPyB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbC5yZXBsYWNlKC86JC8sICcnKSA6ICcnLFxuICAgICAgICAgIGhvc3Q6IHVybFBhcnNpbmdOb2RlLmhvc3QsXG4gICAgICAgICAgc2VhcmNoOiB1cmxQYXJzaW5nTm9kZS5zZWFyY2ggPyB1cmxQYXJzaW5nTm9kZS5zZWFyY2gucmVwbGFjZSgvXlxcPy8sICcnKSA6ICcnLFxuICAgICAgICAgIGhhc2g6IHVybFBhcnNpbmdOb2RlLmhhc2ggPyB1cmxQYXJzaW5nTm9kZS5oYXNoLnJlcGxhY2UoL14jLywgJycpIDogJycsXG4gICAgICAgICAgaG9zdG5hbWU6IHVybFBhcnNpbmdOb2RlLmhvc3RuYW1lLFxuICAgICAgICAgIHBvcnQ6IHVybFBhcnNpbmdOb2RlLnBvcnQsXG4gICAgICAgICAgcGF0aG5hbWU6ICh1cmxQYXJzaW5nTm9kZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJykgP1xuICAgICAgICAgICAgdXJsUGFyc2luZ05vZGUucGF0aG5hbWUgOlxuICAgICAgICAgICAgJy8nICsgdXJsUGFyc2luZ05vZGUucGF0aG5hbWVcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgb3JpZ2luVVJMID0gcmVzb2x2ZVVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG5cbiAgICAgIC8qKlxuICAgICogRGV0ZXJtaW5lIGlmIGEgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIGN1cnJlbnQgbG9jYXRpb25cbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdFVSTCBUaGUgVVJMIHRvIHRlc3RcbiAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luLCBvdGhlcndpc2UgZmFsc2VcbiAgICAqL1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbihyZXF1ZXN0VVJMKSB7XG4gICAgICAgIHZhciBwYXJzZWQgPSAodXRpbHMuaXNTdHJpbmcocmVxdWVzdFVSTCkpID8gcmVzb2x2ZVVSTChyZXF1ZXN0VVJMKSA6IHJlcXVlc3RVUkw7XG4gICAgICAgIHJldHVybiAocGFyc2VkLnByb3RvY29sID09PSBvcmlnaW5VUkwucHJvdG9jb2wgJiZcbiAgICAgICAgICAgIHBhcnNlZC5ob3N0ID09PSBvcmlnaW5VUkwuaG9zdCk7XG4gICAgICB9O1xuICAgIH0pKCkgOlxuXG4gIC8vIE5vbiBzdGFuZGFyZCBicm93c2VyIGVudnMgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gICAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4oKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfTtcbiAgICB9KSgpXG4pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKFxuICB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgc3VwcG9ydCBkb2N1bWVudC5jb29raWVcbiAgICAoZnVuY3Rpb24gc3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd3JpdGU6IGZ1bmN0aW9uIHdyaXRlKG5hbWUsIHZhbHVlLCBleHBpcmVzLCBwYXRoLCBkb21haW4sIHNlY3VyZSkge1xuICAgICAgICAgIHZhciBjb29raWUgPSBbXTtcbiAgICAgICAgICBjb29raWUucHVzaChuYW1lICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7XG5cbiAgICAgICAgICBpZiAodXRpbHMuaXNOdW1iZXIoZXhwaXJlcykpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdleHBpcmVzPScgKyBuZXcgRGF0ZShleHBpcmVzKS50b0dNVFN0cmluZygpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcocGF0aCkpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdwYXRoPScgKyBwYXRoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcoZG9tYWluKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ2RvbWFpbj0nICsgZG9tYWluKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2VjdXJlID09PSB0cnVlKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgnc2VjdXJlJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llLmpvaW4oJzsgJyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZChuYW1lKSB7XG4gICAgICAgICAgdmFyIG1hdGNoID0gZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoJyhefDtcXFxccyopKCcgKyBuYW1lICsgJyk9KFteO10qKScpKTtcbiAgICAgICAgICByZXR1cm4gKG1hdGNoID8gZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoWzNdKSA6IG51bGwpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKG5hbWUpIHtcbiAgICAgICAgICB0aGlzLndyaXRlKG5hbWUsICcnLCBEYXRlLm5vdygpIC0gODY0MDAwMDApO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pKCkgOlxuXG4gIC8vIE5vbiBzdGFuZGFyZCBicm93c2VyIGVudiAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd3JpdGU6IGZ1bmN0aW9uIHdyaXRlKCkge30sXG4gICAgICAgIHJlYWQ6IGZ1bmN0aW9uIHJlYWQoKSB7IHJldHVybiBudWxsOyB9LFxuICAgICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHt9XG4gICAgICB9O1xuICAgIH0pKClcbik7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBDYW5jZWwgPSByZXF1aXJlKCcuL0NhbmNlbCcpO1xuXG4vKipcbiAqIEEgYENhbmNlbFRva2VuYCBpcyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IGNhbmNlbGxhdGlvbiBvZiBhbiBvcGVyYXRpb24uXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBleGVjdXRvciBUaGUgZXhlY3V0b3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIENhbmNlbFRva2VuKGV4ZWN1dG9yKSB7XG4gIGlmICh0eXBlb2YgZXhlY3V0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uJyk7XG4gIH1cblxuICB2YXIgcmVzb2x2ZVByb21pc2U7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2VFeGVjdXRvcihyZXNvbHZlKSB7XG4gICAgcmVzb2x2ZVByb21pc2UgPSByZXNvbHZlO1xuICB9KTtcblxuICB2YXIgdG9rZW4gPSB0aGlzO1xuICBleGVjdXRvcihmdW5jdGlvbiBjYW5jZWwobWVzc2FnZSkge1xuICAgIGlmICh0b2tlbi5yZWFzb24pIHtcbiAgICAgIC8vIENhbmNlbGxhdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRva2VuLnJlYXNvbiA9IG5ldyBDYW5jZWwobWVzc2FnZSk7XG4gICAgcmVzb2x2ZVByb21pc2UodG9rZW4ucmVhc29uKTtcbiAgfSk7XG59XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAqL1xuQ2FuY2VsVG9rZW4ucHJvdG90eXBlLnRocm93SWZSZXF1ZXN0ZWQgPSBmdW5jdGlvbiB0aHJvd0lmUmVxdWVzdGVkKCkge1xuICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICB0aHJvdyB0aGlzLnJlYXNvbjtcbiAgfVxufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgbmV3IGBDYW5jZWxUb2tlbmAgYW5kIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsXG4gKiBjYW5jZWxzIHRoZSBgQ2FuY2VsVG9rZW5gLlxuICovXG5DYW5jZWxUb2tlbi5zb3VyY2UgPSBmdW5jdGlvbiBzb3VyY2UoKSB7XG4gIHZhciBjYW5jZWw7XG4gIHZhciB0b2tlbiA9IG5ldyBDYW5jZWxUb2tlbihmdW5jdGlvbiBleGVjdXRvcihjKSB7XG4gICAgY2FuY2VsID0gYztcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgdG9rZW46IHRva2VuLFxuICAgIGNhbmNlbDogY2FuY2VsXG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IENhbmNlbFRva2VuO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFN5bnRhY3RpYyBzdWdhciBmb3IgaW52b2tpbmcgYSBmdW5jdGlvbiBhbmQgZXhwYW5kaW5nIGFuIGFycmF5IGZvciBhcmd1bWVudHMuXG4gKlxuICogQ29tbW9uIHVzZSBjYXNlIHdvdWxkIGJlIHRvIHVzZSBgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5YC5cbiAqXG4gKiAgYGBganNcbiAqICBmdW5jdGlvbiBmKHgsIHksIHopIHt9XG4gKiAgdmFyIGFyZ3MgPSBbMSwgMiwgM107XG4gKiAgZi5hcHBseShudWxsLCBhcmdzKTtcbiAqICBgYGBcbiAqXG4gKiBXaXRoIGBzcHJlYWRgIHRoaXMgZXhhbXBsZSBjYW4gYmUgcmUtd3JpdHRlbi5cbiAqXG4gKiAgYGBganNcbiAqICBzcHJlYWQoZnVuY3Rpb24oeCwgeSwgeikge30pKFsxLCAyLCAzXSk7XG4gKiAgYGBgXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzcHJlYWQoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoYXJyKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFycik7XG4gIH07XG59O1xuIiwidmFyIGNpZCA9IDE7XG5cbmZ1bmN0aW9uIGJ1aWxkUGFyYW1zKHBhcmFtcykge1xuICAgIHZhciByZXN1bHQgPSBbXTtcblxuICAgIGZvciAodmFyIGkgaW4gcGFyYW1zKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChpKSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudChwYXJhbXNbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0LmpvaW4oJyYnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBqc29ucEFkYXB0ZXIoY29uZmlnKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2YXIgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICAgIHZhciBzcmMgPSBjb25maWcudXJsO1xuXG4gICAgICAgIGlmIChjb25maWcucGFyYW1zKSB7XG4gICAgICAgICAgICB2YXIgcGFyYW1zID0gYnVpbGRQYXJhbXMoY29uZmlnLnBhcmFtcyk7XG5cbiAgICAgICAgICAgIGlmIChwYXJhbXMpIHtcbiAgICAgICAgICAgICAgICBzcmMgKz0gKHNyYy5pbmRleE9mKCc/JykgPj0gMCA/ICcmJyA6ICc/JykgKyBwYXJhbXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzY3JpcHQuYXN5bmMgPSB0cnVlO1xuXG4gICAgICAgIGZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgICAgICAgICAgIGlmIChzY3JpcHQpIHtcbiAgICAgICAgICAgICAgICBzY3JpcHQub25sb2FkID0gc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IHNjcmlwdC5vbmVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgICAgIGlmIChzY3JpcHQucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgICAgICBzY3JpcHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzY3JpcHQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHNjcmlwdCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIganNvbnAgPSAnYXhpb3NKc29ucENhbGxiYWNrJyArIGNpZCsrO1xuICAgICAgICB2YXIgb2xkID0gd2luZG93W2pzb25wXTtcbiAgICAgICAgdmFyIGlzQWJvcnQgPSBmYWxzZTtcblxuICAgICAgICB3aW5kb3dbanNvbnBdID0gZnVuY3Rpb24ocmVzcG9uc2VEYXRhKSB7XG4gICAgICAgICAgICB3aW5kb3dbanNvbnBdID0gb2xkO1xuXG4gICAgICAgICAgICBpZiAoaXNBYm9ydCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0ge1xuICAgICAgICAgICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgICAgICAgICBzdGF0dXM6IDIwMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgYWRkaXRpb25hbFBhcmFtcyA9IHtcbiAgICAgICAgICAgIF86IChuZXcgRGF0ZSgpLmdldFRpbWUoKSlcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIGFkZGl0aW9uYWxQYXJhbXNbY29uZmlnLmNhbGxiYWNrUGFyYW1OYW1lIHx8ICdjYWxsYmFjayddID0ganNvbnA7XG5cbiAgICAgICAgc3JjICs9IChzcmMuaW5kZXhPZignPycpID49IDAgPyAnJicgOiAnPycpICsgYnVpbGRQYXJhbXMoYWRkaXRpb25hbFBhcmFtcyk7XG5cbiAgICAgICAgc2NyaXB0Lm9ubG9hZCA9IHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmICghc2NyaXB0LnJlYWR5U3RhdGUgfHwgL2xvYWRlZHxjb21wbGV0ZS8udGVzdChzY3JpcHQucmVhZHlTdGF0ZSkpIHtcbiAgICAgICAgICAgICAgICByZW1vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBzY3JpcHQub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmVtb3ZlKCk7XG5cbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ05ldHdvcmsgRXJyb3InKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgICAgICAgICAgY29uZmlnLmNhbmNlbFRva2VuLnByb21pc2UudGhlbihmdW5jdGlvbihjYW5jZWwpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXNjcmlwdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaXNBYm9ydCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICByZWplY3QoY2FuY2VsKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9ICAgICAgICBcblxuICAgICAgICBzY3JpcHQuc3JjID0gc3JjO1xuXG4gICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICB9KTtcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==