UNPKG

harptos

Version:

Class for representing a date in the Calendar of Harptos

2 lines 36.7 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _calculateMoonPhases2=_interopRequireDefault(require("./calculate-moon-phases.js")),_dayCountByMonthOfYear2=_interopRequireDefault(require("./day-count-by-month-of-year.js")),_dayNameByMonthOfYearAndDayOfMonth2=_interopRequireDefault(require("./day-name-by-month-of-year-and-day-of-month.js")),_isotropicError=_interopRequireDefault(require("isotropic-error")),_isotropicMake=_interopRequireDefault(require("isotropic-make")),_monthNameByMonthOfYear2=_interopRequireDefault(require("./month-name-by-month-of-year.js")),_isotropicPropertyChainer=_interopRequireDefault(require("isotropic-property-chainer")),_seasonChanges2=_interopRequireDefault(require("./season-changes.js")),_rollOfYears=_interopRequireDefault(require("roll-of-years"));function _interopRequireDefault(a){return a&&a.__esModule?a:{default:a}}var _default=(0,_isotropicMake.default)([_isotropicPropertyChainer.default],{get day(){if(null===this._day){this._day=this._year*this.constructor._dayCountPerYear+Math.ceil(this._year/4)+this._dayOfMonth-1;for(let a=1;a<this._monthOfYear;a+=1)this._day+=this.constructor._dayCountByMonthOfYear[a],this._inLeapYear&&a===this.constructor._leapYearMonthOfYear&&(this._day+=1)}return this._day},get dayName(){return this._dayName},get dayOfMonth(){return this._dayOfMonth},get dayOfTenday(){if(null===this._dayOfTenday){const a=this._dayOfMonth%10;this._dayOfTenday=0==a?10:this._dayOfMonth+10-a>this._dayCountPerMonthOfYear?void 0:a}return this._dayOfTenday},get dayOfYear(){if(null===this._dayOfYear){this._dayOfYear=this._dayOfMonth;for(let a=1;a<this._monthOfYear;a+=1)this._dayOfYear+=this.constructor._dayCountByMonthOfYear[a],this._inLeapYear&&a===this.constructor._leapYearMonthOfYear&&(this._dayOfYear+=1)}return this._dayOfYear},equals(a){return 0===this.constructor.compare(this,a)},get inLeapYear(){return this._inLeapYear},get monthName(){return this._monthName},get monthOfYear(){return this._monthOfYear},get moonPhase(){if(null===this._moonPhase){let a=(this.day+this.constructor._moonSynodicPeriodOffset)%this.constructor._moonPhases.length;0>a&&(a+=this.constructor._moonPhases.length),this._moonPhase=Object.freeze({...this.constructor._moonPhases[a]})}return this._moonPhase},get season(){if(null===this._season)for(const a of this.constructor._seasonChanges){if(this._monthOfYear>a.monthOfYear){this._season=a.season;continue}if(this._monthOfYear===a.monthOfYear&&this._dayOfMonth>=a.dayOfMonth){this._season=a.season;continue}break}return this._season},toJSON(){return{dayOfMonth:this._dayOfMonth,monthOfYear:this._monthOfYear,year:this._year}},toString(){const a=`${this._dayOfMonth}`,b=`${this._monthOfYear}`;return`${this._year}-${"0".repeat(`${this.constructor._monthCountPerYear}`.length-b.length)}${b}-${"0".repeat(`${this.constructor._maximumDayCountPerMonth}`.length-a.length)}${a}`},valueOf(){return this.day},get year(){return this._year},get yearName(){return this._yearName},_init(a){switch(typeof a){case"number":a={day:a};break;case"object":if(null===a)throw(0,_isotropicError.default)({message:"Invalid config",name:"TypeError"});break;case"string":{const b=a.match(/^(-?\d+)-(\d+)-(\d+)$/u);if(b)a={dayOfMonth:+b[3],monthOfYear:+b[2],year:+b[1]};else throw(0,_isotropicError.default)({details:{config:a},message:"Invalid config",name:"TypeError"});break}default:throw(0,_isotropicError.default)({message:"Invalid config",name:"TypeError"});}if(!Number.isInteger(a.day)){if(!Number.isInteger(a.dayOfMonth))throw(0,_isotropicError.default)({message:"Invalid day of month",name:"TypeError"});if(!Number.isInteger(a.monthOfYear))throw(0,_isotropicError.default)({message:"Invalid month of year",name:"TypeError"});if(!Number.isInteger(a.year))throw(0,_isotropicError.default)({message:"Invalid year",name:"TypeError"});if(1>a.monthOfYear||a.monthOfYear>this.constructor._monthCountPerYear)throw(0,_isotropicError.default)({details:{monthCountPerYear:this.constructor._monthCountPerYear,monthOfYear:a.monthOfYear,year:a.year},message:"Invalid month of year",name:"RangeError"});this._day=null}else if(this._day=a.day,0>a.day){a={dayOfMonth:0,monthOfYear:0,year:0};let b,c=-1,d=!1;do a.year-=1,d=0==a.year%4,c-=this.constructor._dayCountPerYear,d&&(c-=1);while(c>=this._day);b=c;do a.monthOfYear+=1,c=b,b+=this.constructor._dayCountByMonthOfYear[a.monthOfYear],d&&a.monthOfYear===this.constructor._leapYearMonthOfYear&&(b+=1);while(b<this._day);a.dayOfMonth=this._day-c}else{a={dayOfMonth:0,monthOfYear:0,year:-1};let b=0,c=!1,d=0;do a.year+=1,c=0==a.year%4,b=d,d+=this.constructor._dayCountPerYear,c&&(d+=1);while(d<=this._day);d=b;do a.monthOfYear+=1,b=d,d+=this.constructor._dayCountByMonthOfYear[a.monthOfYear],c&&a.monthOfYear===this.constructor._leapYearMonthOfYear&&(d+=1);while(d<=this._day);a.dayOfMonth=this._day-b+1}let b,c=this.constructor._dayCountByMonthOfYear[a.monthOfYear];const d=0==a.year%4;if(d&&a.monthOfYear===this.constructor._leapYearMonthOfYear&&(c+=1),1>a.dayOfMonth||a.dayOfMonth>c)throw(0,_isotropicError.default)({details:{dayCountPerMonthOfYear:c,dayOfMonth:a.dayOfMonth,monthOfYear:a.monthOfYear,year:a.year},message:"Invalid day of month",name:"RangeError"});{const c=this.constructor._dayNameByMonthOfYearAndDayOfMonth[a.monthOfYear];c&&(b=c[a.dayOfMonth])}return this._dayCountPerMonthOfYear=c,this._dayName=b,this._dayOfMonth=a.dayOfMonth,this._dayOfTenday=null,this._dayOfYear=null,this._inLeapYear=d,this._moonPhase=null,this._monthName=this.constructor._monthNameByMonthOfYear[a.monthOfYear],this._monthOfYear=a.monthOfYear,this._season=null,this._year=a.year,this._yearName=this.constructor._yearNameByYear[a.year],this}},{compare(c,a){return c._year<a._year?-1:c._year>a._year?1:c._monthOfYear<a._monthOfYear?-1:c._monthOfYear>a._monthOfYear?1:c._dayOfMonth<a._dayOfMonth?-1:c._dayOfMonth>a._dayOfMonth?1:0},_dayCountByMonthOfYear:_dayCountByMonthOfYear2.default,_dayNameByMonthOfYearAndDayOfMonth:_dayNameByMonthOfYearAndDayOfMonth2.default,_init(){const a=Object.values(this._dayCountByMonthOfYear);this._dayCountPerYear=0,this._maximumDayCountPerMonth=0,this._monthCountPerYear=a.length;for(const b of a)this._dayCountPerYear+=b,b>this._maximumDayCountPerMonth&&(this._maximumDayCountPerMonth=b);return this._maximumDayCountPerMonth+=1,this},_leapYearMonthOfYear:7,_monthNameByMonthOfYear:_monthNameByMonthOfYear2.default,_moonPhases:(0,_calculateMoonPhases2.default)({synodicPeriod:30.4375}),_moonSynodicPeriodOffset:0,_propertyChains:new Set(["_dayCountByMonthOfYear","_dayNameByMonthOfYearAndDayOfMonth","_monthNameByMonthOfYear","_yearNameByYear"]),_seasonChanges:_seasonChanges2.default,_yearNameByYear:_rollOfYears.default});exports.default=_default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2pzL2hhcnB0b3MuanMiXSwibmFtZXMiOlsiX1Byb3BlcnR5Q2hhaW5lciIsImRheSIsIl9kYXkiLCJfeWVhciIsImNvbnN0cnVjdG9yIiwiX2RheUNvdW50UGVyWWVhciIsIk1hdGgiLCJjZWlsIiwiX2RheU9mTW9udGgiLCJtb250aE9mWWVhciIsIl9tb250aE9mWWVhciIsIl9kYXlDb3VudEJ5TW9udGhPZlllYXIiLCJfaW5MZWFwWWVhciIsIl9sZWFwWWVhck1vbnRoT2ZZZWFyIiwiZGF5TmFtZSIsIl9kYXlOYW1lIiwiZGF5T2ZNb250aCIsImRheU9mVGVuZGF5IiwiX2RheU9mVGVuZGF5IiwicmVtYWluZGVyIiwiX2RheUNvdW50UGVyTW9udGhPZlllYXIiLCJkYXlPZlllYXIiLCJfZGF5T2ZZZWFyIiwiZXF1YWxzIiwib3RoZXIiLCJjb21wYXJlIiwiaW5MZWFwWWVhciIsIm1vbnRoTmFtZSIsIl9tb250aE5hbWUiLCJtb29uUGhhc2UiLCJfbW9vblBoYXNlIiwibW9vblBoYXNlSW5kZXgiLCJfbW9vblN5bm9kaWNQZXJpb2RPZmZzZXQiLCJfbW9vblBoYXNlcyIsImxlbmd0aCIsIk9iamVjdCIsImZyZWV6ZSIsInNlYXNvbiIsIl9zZWFzb24iLCJzZWFzb25DaGFuZ2UiLCJfc2Vhc29uQ2hhbmdlcyIsInRvSlNPTiIsInllYXIiLCJ0b1N0cmluZyIsImRheU9mTW9udGhTdHJpbmciLCJtb250aE9mWWVhclN0cmluZyIsInJlcGVhdCIsIl9tb250aENvdW50UGVyWWVhciIsIl9tYXhpbXVtRGF5Q291bnRQZXJNb250aCIsInZhbHVlT2YiLCJ5ZWFyTmFtZSIsIl95ZWFyTmFtZSIsIl9pbml0IiwiY29uZmlnIiwibWVzc2FnZSIsIm5hbWUiLCJtYXRjaCIsImRldGFpbHMiLCJOdW1iZXIiLCJpc0ludGVnZXIiLCJtb250aENvdW50UGVyWWVhciIsInBvdGVudGlhbERheUNvdW50IiwiZGF5Q291bnQiLCJkYXlDb3VudFBlck1vbnRoT2ZZZWFyIiwiZGF5TmFtZUJ5RGF5T2ZNb250aCIsIl9kYXlOYW1lQnlNb250aE9mWWVhckFuZERheU9mTW9udGgiLCJfbW9udGhOYW1lQnlNb250aE9mWWVhciIsIl95ZWFyTmFtZUJ5WWVhciIsImEiLCJiIiwiZGF5Q291bnRzIiwidmFsdWVzIiwic3lub2RpY1BlcmlvZCIsIl9wcm9wZXJ0eUNoYWlucyIsIlNldCJdLCJtYXBwaW5ncyI6Inc1QkFVZSwyQkFBTSxDQUNqQkEsaUNBRGlCLENBQU4sQ0FFWixDQUNDLEdBQUlDLENBQUFBLEdBQUosRUFBVyxDQUNQLEdBQWtCLElBQWQsUUFBS0MsSUFBVCxDQUF3QixDQUNwQixLQUFLQSxJQUFMLENBQVksS0FBS0MsS0FBTCxDQUFhLEtBQUtDLFdBQUwsQ0FBaUJDLGdCQUE5QixDQUFpREMsSUFBSSxDQUFDQyxJQUFMLENBQVUsS0FBS0osS0FBTCxDQUFhLENBQXZCLENBQWpELENBQTZFLEtBQUtLLFdBQWxGLENBQWdHLENBRHhGLENBR3BCLElBQUssR0FBSUMsQ0FBQUEsQ0FBVyxDQUFHLENBQXZCLENBQTBCQSxDQUFXLENBQUcsS0FBS0MsWUFBN0MsQ0FBMkRELENBQVcsRUFBSSxDQUExRSxDQUNJLEtBQUtQLElBQUwsRUFBYSxLQUFLRSxXQUFMLENBQWlCTyxzQkFBakIsQ0FBd0NGLENBQXhDLENBRGpCLENBR1EsS0FBS0csV0FBTCxFQUFvQkgsQ0FBVyxHQUFLLEtBQUtMLFdBQUwsQ0FBaUJTLG9CQUg3RCxHQUlRLEtBQUtYLElBQUwsRUFBYSxDQUpyQixDQU9ILENBRUQsTUFBTyxNQUFLQSxJQUNmLENBZkYsQ0FnQkMsR0FBSVksQ0FBQUEsT0FBSixFQUFlLENBQ1gsTUFBTyxNQUFLQyxRQUNmLENBbEJGLENBbUJDLEdBQUlDLENBQUFBLFVBQUosRUFBa0IsQ0FDZCxNQUFPLE1BQUtSLFdBQ2YsQ0FyQkYsQ0FzQkMsR0FBSVMsQ0FBQUEsV0FBSixFQUFtQixDQUNmLEdBQTBCLElBQXRCLFFBQUtDLFlBQVQsQ0FBZ0MsQ0FDNUIsS0FBTUMsQ0FBQUEsQ0FBUyxDQUFHLEtBQUtYLFdBQUwsQ0FBbUIsRUFBckMsQ0FHSSxLQUFLVSxZQUptQixDQUdWLENBQWQsRUFBQUMsQ0FId0IsQ0FJSixFQUpJLENBS2pCLEtBQUtYLFdBQUwsQ0FBbUIsRUFBbkIsQ0FBd0JXLENBQXhCLENBQW9DLEtBQUtDLHVCQUx4QixRQVFKRCxDQUUzQixDQUVELE1BQU8sTUFBS0QsWUFDZixDQXBDRixDQXFDQyxHQUFJRyxDQUFBQSxTQUFKLEVBQWlCLENBQ2IsR0FBd0IsSUFBcEIsUUFBS0MsVUFBVCxDQUE4QixDQUMxQixLQUFLQSxVQUFMLENBQWtCLEtBQUtkLFdBREcsQ0FHMUIsSUFBSyxHQUFJQyxDQUFBQSxDQUFXLENBQUcsQ0FBdkIsQ0FBMEJBLENBQVcsQ0FBRyxLQUFLQyxZQUE3QyxDQUEyREQsQ0FBVyxFQUFJLENBQTFFLENBQ0ksS0FBS2EsVUFBTCxFQUFtQixLQUFLbEIsV0FBTCxDQUFpQk8sc0JBQWpCLENBQXdDRixDQUF4QyxDQUR2QixDQUdRLEtBQUtHLFdBQUwsRUFBb0JILENBQVcsR0FBSyxLQUFLTCxXQUFMLENBQWlCUyxvQkFIN0QsR0FJUSxLQUFLUyxVQUFMLEVBQW1CLENBSjNCLENBT0gsQ0FFRCxNQUFPLE1BQUtBLFVBQ2YsQ0FuREYsQ0FvRENDLE1BQU0sQ0FBRUMsQ0FBRixDQUFTLENBQ1gsTUFBaUQsRUFBMUMsUUFBS3BCLFdBQUwsQ0FBaUJxQixPQUFqQixDQUF5QixJQUF6QixDQUErQkQsQ0FBL0IsQ0FDVixDQXRERixDQXVEQyxHQUFJRSxDQUFBQSxVQUFKLEVBQWtCLENBQ2QsTUFBTyxNQUFLZCxXQUNmLENBekRGLENBMERDLEdBQUllLENBQUFBLFNBQUosRUFBaUIsQ0FDYixNQUFPLE1BQUtDLFVBQ2YsQ0E1REYsQ0E2REMsR0FBSW5CLENBQUFBLFdBQUosRUFBbUIsQ0FDZixNQUFPLE1BQUtDLFlBQ2YsQ0EvREYsQ0FnRUMsR0FBSW1CLENBQUFBLFNBQUosRUFBaUIsQ0FDYixHQUF3QixJQUFwQixRQUFLQyxVQUFULENBQThCLENBQzFCLEdBQUlDLENBQUFBLENBQWMsQ0FBRyxDQUFDLEtBQUs5QixHQUFMLENBQVcsS0FBS0csV0FBTCxDQUFpQjRCLHdCQUE3QixFQUF5RCxLQUFLNUIsV0FBTCxDQUFpQjZCLFdBQWpCLENBQTZCQyxNQUEzRyxDQUVxQixDQUFqQixDQUFBSCxDQUhzQixHQUl0QkEsQ0FBYyxFQUFJLEtBQUszQixXQUFMLENBQWlCNkIsV0FBakIsQ0FBNkJDLE1BSnpCLEVBTzFCLEtBQUtKLFVBQUwsQ0FBa0JLLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLENBQzVCLEdBQUcsS0FBS2hDLFdBQUwsQ0FBaUI2QixXQUFqQixDQUE2QkYsQ0FBN0IsQ0FEeUIsQ0FBZCxDQUdyQixDQUVELE1BQU8sTUFBS0QsVUFDZixDQTlFRixDQStFQyxHQUFJTyxDQUFBQSxNQUFKLEVBQWMsQ0FDVixHQUFxQixJQUFqQixRQUFLQyxPQUFULENBQ0ksSUFBSyxLQUFNQyxDQUFBQSxDQUFYLEdBQTJCLE1BQUtuQyxXQUFMLENBQWlCb0MsY0FBNUMsQ0FBNEQsQ0FDeEQsR0FBSSxLQUFLOUIsWUFBTCxDQUFvQjZCLENBQVksQ0FBQzlCLFdBQXJDLENBQWtELENBQzlDLEtBQUs2QixPQUFMLENBQWVDLENBQVksQ0FBQ0YsTUFEa0IsQ0FFOUMsUUFDSCxDQUVELEdBQUksS0FBSzNCLFlBQUwsR0FBc0I2QixDQUFZLENBQUM5QixXQUF2QyxFQUNRLEtBQUtELFdBQUwsRUFBb0IrQixDQUFZLENBQUN2QixVQUR6QyxDQUNxRCxDQUM3QyxLQUFLc0IsT0FBTCxDQUFlQyxDQUFZLENBQUNGLE1BRGlCLENBRTdDLFFBQ0gsQ0FHTCxLQUNILENBR0wsTUFBTyxNQUFLQyxPQUNmLENBbkdGLENBb0dDRyxNQUFNLEVBQUksQ0FDTixNQUFPLENBQ0h6QixVQUFVLENBQUUsS0FBS1IsV0FEZCxDQUVIQyxXQUFXLENBQUUsS0FBS0MsWUFGZixDQUdIZ0MsSUFBSSxDQUFFLEtBQUt2QyxLQUhSLENBS1YsQ0ExR0YsQ0EyR0N3QyxRQUFRLEVBQUksQ0FDUixLQUFNQyxDQUFBQSxDQUFnQixDQUFJLEdBQUUsS0FBS3BDLFdBQVksRUFBN0MsQ0FDSXFDLENBQWlCLENBQUksR0FBRSxLQUFLbkMsWUFBYSxFQUQ3QyxDQUdBLE1BQVEsR0FBRSxLQUFLUCxLQUFNLElBQUcsSUFBSTJDLE1BQUosQ0FBWSxHQUFFLEtBQUsxQyxXQUFMLENBQWlCMkMsa0JBQW1CLEVBQXZDLENBQXlDYixNQUF6QyxDQUFrRFcsQ0FBaUIsQ0FBQ1gsTUFBL0UsQ0FBdUYsR0FBRVcsQ0FBa0IsSUFBRyxJQUFJQyxNQUFKLENBQVksR0FBRSxLQUFLMUMsV0FBTCxDQUFpQjRDLHdCQUF5QixFQUE3QyxDQUErQ2QsTUFBL0MsQ0FBd0RVLENBQWdCLENBQUNWLE1BQXBGLENBQTRGLEdBQUVVLENBQWlCLEVBQ3hQLENBaEhGLENBaUhDSyxPQUFPLEVBQUksQ0FDUCxNQUFPLE1BQUtoRCxHQUNmLENBbkhGLENBb0hDLEdBQUl5QyxDQUFBQSxJQUFKLEVBQVksQ0FDUixNQUFPLE1BQUt2QyxLQUNmLENBdEhGLENBdUhDLEdBQUkrQyxDQUFBQSxRQUFKLEVBQWdCLENBQ1osTUFBTyxNQUFLQyxTQUNmLENBekhGLENBMEhDQyxLQUFLLENBQUVDLENBQUYsQ0FBVSxDQUNYLE9BQVEsTUFBT0EsQ0FBQUEsQ0FBZixFQUNJLElBQUssUUFBTCxDQUNJQSxDQUFNLENBQUcsQ0FDTHBELEdBQUcsQ0FBRW9ELENBREEsQ0FEYixDQUtJLE1BQ0osSUFBSyxRQUFMLENBQ0ksR0FBZSxJQUFYLEdBQUFBLENBQUosQ0FDSSxLQUFNLDRCQUFPLENBQ1RDLE9BQU8sQ0FBRSxnQkFEQSxDQUVUQyxJQUFJLENBQUUsV0FGRyxDQUFQLENBQU4sQ0FNSixNQUNKLElBQUssUUFBTCxDQUFlLENBQ1gsS0FBTUMsQ0FBQUEsQ0FBSyxDQUFHSCxDQUFNLENBQUNHLEtBQVAsQ0FBYSx3QkFBYixDQUFkLENBRUEsR0FBSUEsQ0FBSixDQUNJSCxDQUFNLENBQUcsQ0FDTHJDLFVBQVUsQ0FBRSxDQUFDd0MsQ0FBSyxDQUFDLENBQUQsQ0FEYixDQUVML0MsV0FBVyxDQUFFLENBQUMrQyxDQUFLLENBQUMsQ0FBRCxDQUZkLENBR0xkLElBQUksQ0FBRSxDQUFDYyxDQUFLLENBQUMsQ0FBRCxDQUhQLENBRGIsS0FPSSxNQUFNLDRCQUFPLENBQ1RDLE9BQU8sQ0FBRSxDQUNMSixNQUFNLENBQU5BLENBREssQ0FEQSxDQUlUQyxPQUFPLENBQUUsZ0JBSkEsQ0FLVEMsSUFBSSxDQUFFLFdBTEcsQ0FBUCxDQUFOLENBU0osS0FDSCxDQUVELFFBQ0ksS0FBTSw0QkFBTyxDQUNURCxPQUFPLENBQUUsZ0JBREEsQ0FFVEMsSUFBSSxDQUFFLFdBRkcsQ0FBUCxDQUFOLENBdkNSLENBNkNBLElBQUlHLE1BQU0sQ0FBQ0MsU0FBUCxDQUFpQk4sQ0FBTSxDQUFDcEQsR0FBeEIsQ0FBSixDQTZFTyxDQUNILEdBQUksQ0FBQ3lELE1BQU0sQ0FBQ0MsU0FBUCxDQUFpQk4sQ0FBTSxDQUFDckMsVUFBeEIsQ0FBTCxDQUNJLEtBQU0sNEJBQU8sQ0FDVHNDLE9BQU8sQ0FBRSxzQkFEQSxDQUVUQyxJQUFJLENBQUUsV0FGRyxDQUFQLENBQU4sQ0FNSixHQUFJLENBQUNHLE1BQU0sQ0FBQ0MsU0FBUCxDQUFpQk4sQ0FBTSxDQUFDNUMsV0FBeEIsQ0FBTCxDQUNJLEtBQU0sNEJBQU8sQ0FDVDZDLE9BQU8sQ0FBRSx1QkFEQSxDQUVUQyxJQUFJLENBQUUsV0FGRyxDQUFQLENBQU4sQ0FNSixHQUFJLENBQUNHLE1BQU0sQ0FBQ0MsU0FBUCxDQUFpQk4sQ0FBTSxDQUFDWCxJQUF4QixDQUFMLENBQ0ksS0FBTSw0QkFBTyxDQUNUWSxPQUFPLENBQUUsY0FEQSxDQUVUQyxJQUFJLENBQUUsV0FGRyxDQUFQLENBQU4sQ0FNSixHQUF5QixDQUFyQixDQUFBRixDQUFNLENBQUM1QyxXQUFQLEVBQTBCNEMsQ0FBTSxDQUFDNUMsV0FBUCxDQUFxQixLQUFLTCxXQUFMLENBQWlCMkMsa0JBQXBFLENBQ0ksS0FBTSw0QkFBTyxDQUNUVSxPQUFPLENBQUUsQ0FDTEcsaUJBQWlCLENBQUUsS0FBS3hELFdBQUwsQ0FBaUIyQyxrQkFEL0IsQ0FFTHRDLFdBQVcsQ0FBRTRDLENBQU0sQ0FBQzVDLFdBRmYsQ0FHTGlDLElBQUksQ0FBRVcsQ0FBTSxDQUFDWCxJQUhSLENBREEsQ0FNVFksT0FBTyxDQUFFLHVCQU5BLENBT1RDLElBQUksQ0FBRSxZQVBHLENBQVAsQ0FBTixDQVdKLEtBQUtyRCxJQUFMLENBQVksSUFDZixDQWhIRCxJQUdJLElBRkEsS0FBS0EsSUFBTCxDQUFZbUQsQ0FBTSxDQUFDcEQsR0FFbkIsQ0FBaUIsQ0FBYixDQUFBb0QsQ0FBTSxDQUFDcEQsR0FBWCxDQUFvQixDQUNoQm9ELENBQU0sQ0FBRyxDQUNMckMsVUFBVSxDQUFFLENBRFAsQ0FFTFAsV0FBVyxDQUFFLENBRlIsQ0FHTGlDLElBQUksQ0FBRSxDQUhELENBRE8sQ0FPaEIsR0FFSW1CLENBQUFBLENBRkosQ0FBSUMsQ0FBUSxDQUFHLENBQUMsQ0FBaEIsQ0FDSXBDLENBQVUsR0FEZCxDQUlBLEVBQ0kyQixDQUFBQSxDQUFNLENBQUNYLElBQVAsRUFBZSxDQURuQixDQUVJaEIsQ0FBVSxDQUF1QixDQUFwQixFQUFBMkIsQ0FBTSxDQUFDWCxJQUFQLENBQWMsQ0FGL0IsQ0FJSW9CLENBQVEsRUFBSSxLQUFLMUQsV0FBTCxDQUFpQkMsZ0JBSmpDLENBTVFxQixDQU5SLEdBT1FvQyxDQUFRLEVBQUksQ0FQcEIsUUFTU0EsQ0FBUSxFQUFJLEtBQUs1RCxJQVQxQixFQVdBMkQsQ0FBaUIsQ0FBR0MsQ0F0QkosQ0F3QmhCLEVBQ0lULENBQUFBLENBQU0sQ0FBQzVDLFdBQVAsRUFBc0IsQ0FEMUIsQ0FHSXFELENBQVEsQ0FBR0QsQ0FIZixDQUlJQSxDQUFpQixFQUFJLEtBQUt6RCxXQUFMLENBQWlCTyxzQkFBakIsQ0FBd0MwQyxDQUFNLENBQUM1QyxXQUEvQyxDQUp6QixDQU1RaUIsQ0FBVSxFQUFJMkIsQ0FBTSxDQUFDNUMsV0FBUCxHQUF1QixLQUFLTCxXQUFMLENBQWlCUyxvQkFOOUQsR0FPUWdELENBQWlCLEVBQUksQ0FQN0IsUUFTU0EsQ0FBaUIsQ0FBRyxLQUFLM0QsSUFUbEMsRUFXQW1ELENBQU0sQ0FBQ3JDLFVBQVAsQ0FBb0IsS0FBS2QsSUFBTCxDQUFZNEQsQ0FDbkMsQ0FwQ0QsSUFvQ08sQ0FDSFQsQ0FBTSxDQUFHLENBQ0xyQyxVQUFVLENBQUUsQ0FEUCxDQUVMUCxXQUFXLENBQUUsQ0FGUixDQUdMaUMsSUFBSSxDQUFFLENBQUMsQ0FIRixDQUROLENBT0gsR0FBSW9CLENBQUFBLENBQVEsQ0FBRyxDQUFmLENBQ0lwQyxDQUFVLEdBRGQsQ0FFSW1DLENBQWlCLENBQUcsQ0FGeEIsQ0FJQSxFQUNJUixDQUFBQSxDQUFNLENBQUNYLElBQVAsRUFBZSxDQURuQixDQUVJaEIsQ0FBVSxDQUF1QixDQUFwQixFQUFBMkIsQ0FBTSxDQUFDWCxJQUFQLENBQWMsQ0FGL0IsQ0FJSW9CLENBQVEsQ0FBR0QsQ0FKZixDQUtJQSxDQUFpQixFQUFJLEtBQUt6RCxXQUFMLENBQWlCQyxnQkFMMUMsQ0FPUXFCLENBUFIsR0FRUW1DLENBQWlCLEVBQUksQ0FSN0IsUUFVU0EsQ0FBaUIsRUFBSSxLQUFLM0QsSUFWbkMsRUFZQTJELENBQWlCLENBQUdDLENBdkJqQixDQXlCSCxFQUNJVCxDQUFBQSxDQUFNLENBQUM1QyxXQUFQLEVBQXNCLENBRDFCLENBR0lxRCxDQUFRLENBQUdELENBSGYsQ0FJSUEsQ0FBaUIsRUFBSSxLQUFLekQsV0FBTCxDQUFpQk8sc0JBQWpCLENBQXdDMEMsQ0FBTSxDQUFDNUMsV0FBL0MsQ0FKekIsQ0FNUWlCLENBQVUsRUFBSTJCLENBQU0sQ0FBQzVDLFdBQVAsR0FBdUIsS0FBS0wsV0FBTCxDQUFpQlMsb0JBTjlELEdBT1FnRCxDQUFpQixFQUFJLENBUDdCLFFBU1NBLENBQWlCLEVBQUksS0FBSzNELElBVG5DLEVBV0FtRCxDQUFNLENBQUNyQyxVQUFQLENBQW9CLEtBQUtkLElBQUwsQ0FBWTRELENBQVosQ0FBdUIsQ0FDOUMsQ0FzQ0wsR0FDSWhELENBQUFBLENBREosQ0FBSWlELENBQXNCLENBQUcsS0FBSzNELFdBQUwsQ0FBaUJPLHNCQUFqQixDQUF3QzBDLENBQU0sQ0FBQzVDLFdBQS9DLENBQTdCLENBR0EsS0FBTWlCLENBQUFBLENBQVUsQ0FBdUIsQ0FBcEIsRUFBQTJCLENBQU0sQ0FBQ1gsSUFBUCxDQUFjLENBQWpDLENBTUEsR0FKSWhCLENBQVUsRUFBSTJCLENBQU0sQ0FBQzVDLFdBQVAsR0FBdUIsS0FBS0wsV0FBTCxDQUFpQlMsb0JBSTFELEdBSElrRCxDQUFzQixFQUFJLENBRzlCLEVBQXdCLENBQXBCLENBQUFWLENBQU0sQ0FBQ3JDLFVBQVAsRUFBeUJxQyxDQUFNLENBQUNyQyxVQUFQLENBQW9CK0MsQ0FBakQsQ0FDSSxLQUFNLDRCQUFPLENBQ1ROLE9BQU8sQ0FBRSxDQUNMTSxzQkFBc0IsQ0FBdEJBLENBREssQ0FFTC9DLFVBQVUsQ0FBRXFDLENBQU0sQ0FBQ3JDLFVBRmQsQ0FHTFAsV0FBVyxDQUFFNEMsQ0FBTSxDQUFDNUMsV0FIZixDQUlMaUMsSUFBSSxDQUFFVyxDQUFNLENBQUNYLElBSlIsQ0FEQSxDQU9UWSxPQUFPLENBQUUsc0JBUEEsQ0FRVEMsSUFBSSxDQUFFLFlBUkcsQ0FBUCxDQUFOLENBWUosQ0FDSSxLQUFNUyxDQUFBQSxDQUFtQixDQUFHLEtBQUs1RCxXQUFMLENBQWlCNkQsa0NBQWpCLENBQW9EWixDQUFNLENBQUM1QyxXQUEzRCxDQUE1QixDQUVJdUQsQ0FIUixHQUlRbEQsQ0FBTyxDQUFHa0QsQ0FBbUIsQ0FBQ1gsQ0FBTSxDQUFDckMsVUFBUixDQUpyQyxDQU1DLENBZUQsTUFiQSxNQUFLSSx1QkFBTCxDQUErQjJDLENBYS9CLENBWkEsS0FBS2hELFFBQUwsQ0FBZ0JELENBWWhCLENBWEEsS0FBS04sV0FBTCxDQUFtQjZDLENBQU0sQ0FBQ3JDLFVBVzFCLENBVkEsS0FBS0UsWUFBTCxDQUFvQixJQVVwQixDQVRBLEtBQUtJLFVBQUwsQ0FBa0IsSUFTbEIsQ0FSQSxLQUFLVixXQUFMLENBQW1CYyxDQVFuQixDQVBBLEtBQUtJLFVBQUwsQ0FBa0IsSUFPbEIsQ0FOQSxLQUFLRixVQUFMLENBQWtCLEtBQUt4QixXQUFMLENBQWlCOEQsdUJBQWpCLENBQXlDYixDQUFNLENBQUM1QyxXQUFoRCxDQU1sQixDQUxBLEtBQUtDLFlBQUwsQ0FBb0IyQyxDQUFNLENBQUM1QyxXQUszQixDQUpBLEtBQUs2QixPQUFMLENBQWUsSUFJZixDQUhBLEtBQUtuQyxLQUFMLENBQWFrRCxDQUFNLENBQUNYLElBR3BCLENBRkEsS0FBS1MsU0FBTCxDQUFpQixLQUFLL0MsV0FBTCxDQUFpQitELGVBQWpCLENBQWlDZCxDQUFNLENBQUNYLElBQXhDLENBRWpCLENBQU8sSUFDVixDQXRVRixDQUZZLENBeVVaLENBQ0NqQixPQUFPLENBQUUyQyxDQUFGLENBQUtDLENBQUwsQ0FBUSxPQUNQRCxDQUFBQSxDQUFDLENBQUNqRSxLQUFGLENBQVVrRSxDQUFDLENBQUNsRSxLQURMLENBRUEsQ0FBQyxDQUZELENBS1BpRSxDQUFDLENBQUNqRSxLQUFGLENBQVVrRSxDQUFDLENBQUNsRSxLQUxMLENBTUEsQ0FOQSxDQVNQaUUsQ0FBQyxDQUFDMUQsWUFBRixDQUFpQjJELENBQUMsQ0FBQzNELFlBVFosQ0FVQSxDQUFDLENBVkQsQ0FhUDBELENBQUMsQ0FBQzFELFlBQUYsQ0FBaUIyRCxDQUFDLENBQUMzRCxZQWJaLENBY0EsQ0FkQSxDQWlCUDBELENBQUMsQ0FBQzVELFdBQUYsQ0FBZ0I2RCxDQUFDLENBQUM3RCxXQWpCWCxDQWtCQSxDQUFDLENBbEJELENBcUJQNEQsQ0FBQyxDQUFDNUQsV0FBRixDQUFnQjZELENBQUMsQ0FBQzdELFdBckJYLENBc0JBLENBdEJBLENBeUJKLENBQ1YsQ0EzQkYsQ0E0QkNHLHNCQUFzQixDQUF0QkEsK0JBNUJELENBNkJDc0Qsa0NBQWtDLENBQWxDQSwyQ0E3QkQsQ0E4QkNiLEtBQUssRUFBSSxDQUNMLEtBQU1rQixDQUFBQSxDQUFTLENBQUduQyxNQUFNLENBQUNvQyxNQUFQLENBQWMsS0FBSzVELHNCQUFuQixDQUFsQixDQUVBLEtBQUtOLGdCQUFMLENBQXdCLENBSG5CLENBSUwsS0FBSzJDLHdCQUFMLENBQWdDLENBSjNCLENBS0wsS0FBS0Qsa0JBQUwsQ0FBMEJ1QixDQUFTLENBQUNwQyxNQUwvQixDQU9MLElBQUssS0FBTTRCLENBQUFBLENBQVgsR0FBdUJRLENBQUFBLENBQXZCLENBQ0ksS0FBS2pFLGdCQUFMLEVBQXlCeUQsQ0FEN0IsQ0FHUUEsQ0FBUSxDQUFHLEtBQUtkLHdCQUh4QixHQUlRLEtBQUtBLHdCQUFMLENBQWdDYyxDQUp4QyxFQVVBLE1BRkEsTUFBS2Qsd0JBQUwsRUFBaUMsQ0FFakMsQ0FBTyxJQUNWLENBaERGLENBaURDbkMsb0JBQW9CLENBQUUsQ0FqRHZCLENBa0RDcUQsdUJBQXVCLENBQXZCQSxnQ0FsREQsQ0FtRENqQyxXQUFXLENBQUUsa0NBQXFCLENBQzlCdUMsYUFBYSxDQUFFLE9BRGUsQ0FBckIsQ0FuRGQsQ0FzREN4Qyx3QkFBd0IsQ0FBRSxDQXREM0IsQ0F1REN5QyxlQUFlLENBQUUsR0FBSUMsQ0FBQUEsR0FBSixDQUFRLENBQ3JCLHdCQURxQixDQUVyQixvQ0FGcUIsQ0FHckIseUJBSHFCLENBSXJCLGlCQUpxQixDQUFSLENBdkRsQixDQTZEQ2xDLGNBQWMsQ0FBZEEsdUJBN0RELENBOERDMkIsZUFBZSxDQUFmQSxvQkE5REQsQ0F6VVksQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfY2FsY3VsYXRlTW9vblBoYXNlcyBmcm9tICcuL2NhbGN1bGF0ZS1tb29uLXBoYXNlcy5qcyc7XG5pbXBvcnQgX2RheUNvdW50QnlNb250aE9mWWVhciBmcm9tICcuL2RheS1jb3VudC1ieS1tb250aC1vZi15ZWFyLmpzJztcbmltcG9ydCBfZGF5TmFtZUJ5TW9udGhPZlllYXJBbmREYXlPZk1vbnRoIGZyb20gJy4vZGF5LW5hbWUtYnktbW9udGgtb2YteWVhci1hbmQtZGF5LW9mLW1vbnRoLmpzJztcbmltcG9ydCBfRXJyb3IgZnJvbSAnaXNvdHJvcGljLWVycm9yJztcbmltcG9ydCBfbWFrZSBmcm9tICdpc290cm9waWMtbWFrZSc7XG5pbXBvcnQgX21vbnRoTmFtZUJ5TW9udGhPZlllYXIgZnJvbSAnLi9tb250aC1uYW1lLWJ5LW1vbnRoLW9mLXllYXIuanMnO1xuaW1wb3J0IF9Qcm9wZXJ0eUNoYWluZXIgZnJvbSAnaXNvdHJvcGljLXByb3BlcnR5LWNoYWluZXInO1xuaW1wb3J0IF9zZWFzb25DaGFuZ2VzIGZyb20gJy4vc2Vhc29uLWNoYW5nZXMuanMnO1xuaW1wb3J0IF95ZWFyTmFtZUJ5WWVhciBmcm9tICdyb2xsLW9mLXllYXJzJztcblxuZXhwb3J0IGRlZmF1bHQgX21ha2UoW1xuICAgIF9Qcm9wZXJ0eUNoYWluZXJcbl0sIHtcbiAgICBnZXQgZGF5ICgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2RheSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5fZGF5ID0gdGhpcy5feWVhciAqIHRoaXMuY29uc3RydWN0b3IuX2RheUNvdW50UGVyWWVhciArIE1hdGguY2VpbCh0aGlzLl95ZWFyIC8gNCkgKyB0aGlzLl9kYXlPZk1vbnRoIC0gMTtcblxuICAgICAgICAgICAgZm9yIChsZXQgbW9udGhPZlllYXIgPSAxOyBtb250aE9mWWVhciA8IHRoaXMuX21vbnRoT2ZZZWFyOyBtb250aE9mWWVhciArPSAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGF5ICs9IHRoaXMuY29uc3RydWN0b3IuX2RheUNvdW50QnlNb250aE9mWWVhclttb250aE9mWWVhcl07XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faW5MZWFwWWVhciAmJiBtb250aE9mWWVhciA9PT0gdGhpcy5jb25zdHJ1Y3Rvci5fbGVhcFllYXJNb250aE9mWWVhcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kYXkgKz0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fZGF5O1xuICAgIH0sXG4gICAgZ2V0IGRheU5hbWUgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF5TmFtZTtcbiAgICB9LFxuICAgIGdldCBkYXlPZk1vbnRoICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RheU9mTW9udGg7XG4gICAgfSxcbiAgICBnZXQgZGF5T2ZUZW5kYXkgKCkge1xuICAgICAgICBpZiAodGhpcy5fZGF5T2ZUZW5kYXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbWFpbmRlciA9IHRoaXMuX2RheU9mTW9udGggJSAxMDtcblxuICAgICAgICAgICAgaWYgKHJlbWFpbmRlciA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RheU9mVGVuZGF5ID0gMTA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2RheU9mTW9udGggKyAxMCAtIHJlbWFpbmRlciA+IHRoaXMuX2RheUNvdW50UGVyTW9udGhPZlllYXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXlPZlRlbmRheSA9IHZvaWQgbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGF5T2ZUZW5kYXkgPSByZW1haW5kZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fZGF5T2ZUZW5kYXk7XG4gICAgfSxcbiAgICBnZXQgZGF5T2ZZZWFyICgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2RheU9mWWVhciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5fZGF5T2ZZZWFyID0gdGhpcy5fZGF5T2ZNb250aDtcblxuICAgICAgICAgICAgZm9yIChsZXQgbW9udGhPZlllYXIgPSAxOyBtb250aE9mWWVhciA8IHRoaXMuX21vbnRoT2ZZZWFyOyBtb250aE9mWWVhciArPSAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGF5T2ZZZWFyICs9IHRoaXMuY29uc3RydWN0b3IuX2RheUNvdW50QnlNb250aE9mWWVhclttb250aE9mWWVhcl07XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faW5MZWFwWWVhciAmJiBtb250aE9mWWVhciA9PT0gdGhpcy5jb25zdHJ1Y3Rvci5fbGVhcFllYXJNb250aE9mWWVhcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kYXlPZlllYXIgKz0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fZGF5T2ZZZWFyO1xuICAgIH0sXG4gICAgZXF1YWxzIChvdGhlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb21wYXJlKHRoaXMsIG90aGVyKSA9PT0gMDtcbiAgICB9LFxuICAgIGdldCBpbkxlYXBZZWFyICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2luTGVhcFllYXI7XG4gICAgfSxcbiAgICBnZXQgbW9udGhOYW1lICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoTmFtZTtcbiAgICB9LFxuICAgIGdldCBtb250aE9mWWVhciAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tb250aE9mWWVhcjtcbiAgICB9LFxuICAgIGdldCBtb29uUGhhc2UgKCkge1xuICAgICAgICBpZiAodGhpcy5fbW9vblBoYXNlID09PSBudWxsKSB7XG4gICAgICAgICAgICBsZXQgbW9vblBoYXNlSW5kZXggPSAodGhpcy5kYXkgKyB0aGlzLmNvbnN0cnVjdG9yLl9tb29uU3lub2RpY1BlcmlvZE9mZnNldCkgJSB0aGlzLmNvbnN0cnVjdG9yLl9tb29uUGhhc2VzLmxlbmd0aDtcblxuICAgICAgICAgICAgaWYgKG1vb25QaGFzZUluZGV4IDwgMCkge1xuICAgICAgICAgICAgICAgIG1vb25QaGFzZUluZGV4ICs9IHRoaXMuY29uc3RydWN0b3IuX21vb25QaGFzZXMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9tb29uUGhhc2UgPSBPYmplY3QuZnJlZXplKHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmNvbnN0cnVjdG9yLl9tb29uUGhhc2VzW21vb25QaGFzZUluZGV4XVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fbW9vblBoYXNlO1xuICAgIH0sXG4gICAgZ2V0IHNlYXNvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLl9zZWFzb24gPT09IG51bGwpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2Vhc29uQ2hhbmdlIG9mIHRoaXMuY29uc3RydWN0b3IuX3NlYXNvbkNoYW5nZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbW9udGhPZlllYXIgPiBzZWFzb25DaGFuZ2UubW9udGhPZlllYXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2Vhc29uID0gc2Vhc29uQ2hhbmdlLnNlYXNvbjtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX21vbnRoT2ZZZWFyID09PSBzZWFzb25DaGFuZ2UubW9udGhPZlllYXIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2RheU9mTW9udGggPj0gc2Vhc29uQ2hhbmdlLmRheU9mTW9udGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlYXNvbiA9IHNlYXNvbkNoYW5nZS5zZWFzb247XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlYXNvbjtcbiAgICB9LFxuICAgIHRvSlNPTiAoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXlPZk1vbnRoOiB0aGlzLl9kYXlPZk1vbnRoLFxuICAgICAgICAgICAgbW9udGhPZlllYXI6IHRoaXMuX21vbnRoT2ZZZWFyLFxuICAgICAgICAgICAgeWVhcjogdGhpcy5feWVhclxuICAgICAgICB9O1xuICAgIH0sXG4gICAgdG9TdHJpbmcgKCkge1xuICAgICAgICBjb25zdCBkYXlPZk1vbnRoU3RyaW5nID0gYCR7dGhpcy5fZGF5T2ZNb250aH1gLFxuICAgICAgICAgICAgbW9udGhPZlllYXJTdHJpbmcgPSBgJHt0aGlzLl9tb250aE9mWWVhcn1gO1xuXG4gICAgICAgIHJldHVybiBgJHt0aGlzLl95ZWFyfS0keycwJy5yZXBlYXQoYCR7dGhpcy5jb25zdHJ1Y3Rvci5fbW9udGhDb3VudFBlclllYXJ9YC5sZW5ndGggLSBtb250aE9mWWVhclN0cmluZy5sZW5ndGgpfSR7bW9udGhPZlllYXJTdHJpbmd9LSR7JzAnLnJlcGVhdChgJHt0aGlzLmNvbnN0cnVjdG9yLl9tYXhpbXVtRGF5Q291bnRQZXJNb250aH1gLmxlbmd0aCAtIGRheU9mTW9udGhTdHJpbmcubGVuZ3RoKX0ke2RheU9mTW9udGhTdHJpbmd9YDtcbiAgICB9LFxuICAgIHZhbHVlT2YgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXk7XG4gICAgfSxcbiAgICBnZXQgeWVhciAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl95ZWFyO1xuICAgIH0sXG4gICAgZ2V0IHllYXJOYW1lICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3llYXJOYW1lO1xuICAgIH0sXG4gICAgX2luaXQgKGNvbmZpZykge1xuICAgICAgICBzd2l0Y2ggKHR5cGVvZiBjb25maWcpIHtcbiAgICAgICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgICAgICAgY29uZmlnID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXk6IGNvbmZpZ1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBfRXJyb3Ioe1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0ludmFsaWQgY29uZmlnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdUeXBlRXJyb3InXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzoge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gY29uZmlnLm1hdGNoKC9eKC0/XFxkKyktKFxcZCspLShcXGQrKSQvdSk7XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF5T2ZNb250aDogK21hdGNoWzNdLFxuICAgICAgICAgICAgICAgICAgICAgICAgbW9udGhPZlllYXI6ICttYXRjaFsyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHllYXI6ICttYXRjaFsxXVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IF9FcnJvcih7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0ludmFsaWQgY29uZmlnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdUeXBlRXJyb3InXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IF9FcnJvcih7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdJbnZhbGlkIGNvbmZpZycsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdUeXBlRXJyb3InXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihjb25maWcuZGF5KSkge1xuICAgICAgICAgICAgdGhpcy5fZGF5ID0gY29uZmlnLmRheTtcblxuICAgICAgICAgICAgaWYgKGNvbmZpZy5kYXkgPCAwKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXlPZk1vbnRoOiAwLFxuICAgICAgICAgICAgICAgICAgICBtb250aE9mWWVhcjogMCxcbiAgICAgICAgICAgICAgICAgICAgeWVhcjogMFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBsZXQgZGF5Q291bnQgPSAtMSxcbiAgICAgICAgICAgICAgICAgICAgaW5MZWFwWWVhciA9IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBwb3RlbnRpYWxEYXlDb3VudDtcblxuICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLnllYXIgLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgaW5MZWFwWWVhciA9IGNvbmZpZy55ZWFyICUgNCA9PT0gMDtcblxuICAgICAgICAgICAgICAgICAgICBkYXlDb3VudCAtPSB0aGlzLmNvbnN0cnVjdG9yLl9kYXlDb3VudFBlclllYXI7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGluTGVhcFllYXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRheUNvdW50IC09IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IHdoaWxlIChkYXlDb3VudCA+PSB0aGlzLl9kYXkpO1xuXG4gICAgICAgICAgICAgICAgcG90ZW50aWFsRGF5Q291bnQgPSBkYXlDb3VudDtcblxuICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLm1vbnRoT2ZZZWFyICs9IDE7XG5cbiAgICAgICAgICAgICAgICAgICAgZGF5Q291bnQgPSBwb3RlbnRpYWxEYXlDb3VudDtcbiAgICAgICAgICAgICAgICAgICAgcG90ZW50aWFsRGF5Q291bnQgKz0gdGhpcy5jb25zdHJ1Y3Rvci5fZGF5Q291bnRCeU1vbnRoT2ZZZWFyW2NvbmZpZy5tb250aE9mWWVhcl07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGluTGVhcFllYXIgJiYgY29uZmlnLm1vbnRoT2ZZZWFyID09PSB0aGlzLmNvbnN0cnVjdG9yLl9sZWFwWWVhck1vbnRoT2ZZZWFyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3RlbnRpYWxEYXlDb3VudCArPSAxO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAocG90ZW50aWFsRGF5Q291bnQgPCB0aGlzLl9kYXkpO1xuXG4gICAgICAgICAgICAgICAgY29uZmlnLmRheU9mTW9udGggPSB0aGlzLl9kYXkgLSBkYXlDb3VudDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uZmlnID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXlPZk1vbnRoOiAwLFxuICAgICAgICAgICAgICAgICAgICBtb250aE9mWWVhcjogMCxcbiAgICAgICAgICAgICAgICAgICAgeWVhcjogLTFcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgbGV0IGRheUNvdW50ID0gMCxcbiAgICAgICAgICAgICAgICAgICAgaW5MZWFwWWVhciA9IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBwb3RlbnRpYWxEYXlDb3VudCA9IDA7XG5cbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy55ZWFyICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGluTGVhcFllYXIgPSBjb25maWcueWVhciAlIDQgPT09IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgZGF5Q291bnQgPSBwb3RlbnRpYWxEYXlDb3VudDtcbiAgICAgICAgICAgICAgICAgICAgcG90ZW50aWFsRGF5Q291bnQgKz0gdGhpcy5jb25zdHJ1Y3Rvci5fZGF5Q291bnRQZXJZZWFyO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbkxlYXBZZWFyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3RlbnRpYWxEYXlDb3VudCArPSAxO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAocG90ZW50aWFsRGF5Q291bnQgPD0gdGhpcy5fZGF5KTtcblxuICAgICAgICAgICAgICAgIHBvdGVudGlhbERheUNvdW50ID0gZGF5Q291bnQ7XG5cbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5tb250aE9mWWVhciArPSAxO1xuXG4gICAgICAgICAgICAgICAgICAgIGRheUNvdW50ID0gcG90ZW50aWFsRGF5Q291bnQ7XG4gICAgICAgICAgICAgICAgICAgIHBvdGVudGlhbERheUNvdW50ICs9IHRoaXMuY29uc3RydWN0b3IuX2RheUNvdW50QnlNb250aE9mWWVhcltjb25maWcubW9udGhPZlllYXJdO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbkxlYXBZZWFyICYmIGNvbmZpZy5tb250aE9mWWVhciA9PT0gdGhpcy5jb25zdHJ1Y3Rvci5fbGVhcFllYXJNb250aE9mWWVhcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG90ZW50aWFsRGF5Q291bnQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gd2hpbGUgKHBvdGVudGlhbERheUNvdW50IDw9IHRoaXMuX2RheSk7XG5cbiAgICAgICAgICAgICAgICBjb25maWcuZGF5T2ZNb250aCA9IHRoaXMuX2RheSAtIGRheUNvdW50ICsgMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihjb25maWcuZGF5T2ZNb250aCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBfRXJyb3Ioe1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnSW52YWxpZCBkYXkgb2YgbW9udGgnLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnVHlwZUVycm9yJ1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoY29uZmlnLm1vbnRoT2ZZZWFyKSkge1xuICAgICAgICAgICAgICAgIHRocm93IF9FcnJvcih7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdJbnZhbGlkIG1vbnRoIG9mIHllYXInLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnVHlwZUVycm9yJ1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoY29uZmlnLnllYXIpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgX0Vycm9yKHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0ludmFsaWQgeWVhcicsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdUeXBlRXJyb3InXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb25maWcubW9udGhPZlllYXIgPCAxIHx8IGNvbmZpZy5tb250aE9mWWVhciA+IHRoaXMuY29uc3RydWN0b3IuX21vbnRoQ291bnRQZXJZZWFyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgX0Vycm9yKHtcbiAgICAgICAgICAgICAgICAgICAgZGV0YWlsczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9udGhDb3VudFBlclllYXI6IHRoaXMuY29uc3RydWN0b3IuX21vbnRoQ291bnRQZXJZZWFyLFxuICAgICAgICAgICAgICAgICAgICAgICAgbW9udGhPZlllYXI6IGNvbmZpZy5tb250aE9mWWVhcixcbiAgICAgICAgICAgICAgICAgICAgICAgIHllYXI6IGNvbmZpZy55ZWFyXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdJbnZhbGlkIG1vbnRoIG9mIHllYXInLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnUmFuZ2VFcnJvcidcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fZGF5ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBkYXlDb3VudFBlck1vbnRoT2ZZZWFyID0gdGhpcy5jb25zdHJ1Y3Rvci5fZGF5Q291bnRCeU1vbnRoT2ZZZWFyW2NvbmZpZy5tb250aE9mWWVhcl0sXG4gICAgICAgICAgICBkYXlOYW1lO1xuXG4gICAgICAgIGNvbnN0IGluTGVhcFllYXIgPSBjb25maWcueWVhciAlIDQgPT09IDA7XG5cbiAgICAgICAgaWYgKGluTGVhcFllYXIgJiYgY29uZmlnLm1vbnRoT2ZZZWFyID09PSB0aGlzLmNvbnN0cnVjdG9yLl9sZWFwWWVhck1vbnRoT2ZZZWFyKSB7XG4gICAgICAgICAgICBkYXlDb3VudFBlck1vbnRoT2ZZZWFyICs9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLmRheU9mTW9udGggPCAxIHx8IGNvbmZpZy5kYXlPZk1vbnRoID4gZGF5Q291bnRQZXJNb250aE9mWWVhcikge1xuICAgICAgICAgICAgdGhyb3cgX0Vycm9yKHtcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiB7XG4gICAgICAgICAgICAgICAgICAgIGRheUNvdW50UGVyTW9udGhPZlllYXIsXG4gICAgICAgICAgICAgICAgICAgIGRheU9mTW9udGg6IGNvbmZpZy5kYXlPZk1vbnRoLFxuICAgICAgICAgICAgICAgICAgICBtb250aE9mWWVhcjogY29uZmlnLm1vbnRoT2ZZZWFyLFxuICAgICAgICAgICAgICAgICAgICB5ZWFyOiBjb25maWcueWVhclxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ0ludmFsaWQgZGF5IG9mIG1vbnRoJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnUmFuZ2VFcnJvcidcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgZGF5TmFtZUJ5RGF5T2ZNb250aCA9IHRoaXMuY29uc3RydWN0b3IuX2RheU5hbWVCeU1vbnRoT2ZZZWFyQW5kRGF5T2ZNb250aFtjb25maWcubW9udGhPZlllYXJdO1xuXG4gICAgICAgICAgICBpZiAoZGF5TmFtZUJ5RGF5T2ZNb250aCkge1xuICAgICAgICAgICAgICAgIGRheU5hbWUgPSBkYXlOYW1lQnlEYXlPZk1vbnRoW2NvbmZpZy5kYXlPZk1vbnRoXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2RheUNvdW50UGVyTW9udGhPZlllYXIgPSBkYXlDb3VudFBlck1vbnRoT2ZZZWFyO1xuICAgICAgICB0aGlzLl9kYXlOYW1lID0gZGF5TmFtZTtcbiAgICAgICAgdGhpcy5fZGF5T2ZNb250aCA9IGNvbmZpZy5kYXlPZk1vbnRoO1xuICAgICAgICB0aGlzLl9kYXlPZlRlbmRheSA9IG51bGw7XG4gICAgICAgIHRoaXMuX2RheU9mWWVhciA9IG51bGw7XG4gICAgICAgIHRoaXMuX2luTGVhcFllYXIgPSBpbkxlYXBZZWFyO1xuICAgICAgICB0aGlzLl9tb29uUGhhc2UgPSBudWxsO1xuICAgICAgICB0aGlzLl9tb250aE5hbWUgPSB0aGlzLmNvbnN0cnVjdG9yLl9tb250aE5hbWVCeU1vbnRoT2ZZZWFyW2NvbmZpZy5tb250aE9mWWVhcl07XG4gICAgICAgIHRoaXMuX21vbnRoT2ZZZWFyID0gY29uZmlnLm1vbnRoT2ZZZWFyO1xuICAgICAgICB0aGlzLl9zZWFzb24gPSBudWxsO1xuICAgICAgICB0aGlzLl95ZWFyID0gY29uZmlnLnllYXI7XG4gICAgICAgIHRoaXMuX3llYXJOYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5feWVhck5hbWVCeVllYXJbY29uZmlnLnllYXJdO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn0sIHtcbiAgICBjb21wYXJlIChhLCBiKSB7XG4gICAgICAgIGlmIChhLl95ZWFyIDwgYi5feWVhcikge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGEuX3llYXIgPiBiLl95ZWFyKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhLl9tb250aE9mWWVhciA8IGIuX21vbnRoT2ZZZWFyKSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYS5fbW9udGhPZlllYXIgPiBiLl9tb250aE9mWWVhcikge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYS5fZGF5T2ZNb250aCA8IGIuX2RheU9mTW9udGgpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhLl9kYXlPZk1vbnRoID4gYi5fZGF5T2ZNb250aCkge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gMDtcbiAgICB9LFxuICAgIF9kYXlDb3VudEJ5TW9udGhPZlllYXIsXG4gICAgX2RheU5hbWVCeU1vbnRoT2ZZZWFyQW5kRGF5T2ZNb250aCxcbiAgICBfaW5pdCAoKSB7XG4gICAgICAgIGNvbnN0IGRheUNvdW50cyA9IE9iamVjdC52YWx1ZXModGhpcy5fZGF5Q291bnRCeU1vbnRoT2ZZZWFyKTtcblxuICAgICAgICB0aGlzLl9kYXlDb3VudFBlclllYXIgPSAwO1xuICAgICAgICB0aGlzLl9tYXhpbXVtRGF5Q291bnRQZXJNb250aCA9IDA7XG4gICAgICAgIHRoaXMuX21vbnRoQ291bnRQZXJZZWFyID0gZGF5Q291bnRzLmxlbmd0aDtcblxuICAgICAgICBmb3IgKGNvbnN0IGRheUNvdW50IG9mIGRheUNvdW50cykge1xuICAgICAgICAgICAgdGhpcy5fZGF5Q291bnRQZXJZZWFyICs9IGRheUNvdW50O1xuXG4gICAgICAgICAgICBpZiAoZGF5Q291bnQgPiB0aGlzLl9tYXhpbXVtRGF5Q291bnRQZXJNb250aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21heGltdW1EYXlDb3VudFBlck1vbnRoID0gZGF5Q291bnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9tYXhpbXVtRGF5Q291bnRQZXJNb250aCArPSAxO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgX2xlYXBZZWFyTW9udGhPZlllYXI6IDcsXG4gICAgX21vbnRoTmFtZUJ5TW9udGhPZlllYXIsXG4gICAgX21vb25QaGFzZXM6IF9jYWxjdWxhdGVNb29uUGhhc2VzKHtcbiAgICAgICAgc3lub2RpY1BlcmlvZDogMzAuNDM3NVxuICAgIH0pLFxuICAgIF9tb29uU3lub2RpY1BlcmlvZE9mZnNldDogMCxcbiAgICBfcHJvcGVydHlDaGFpbnM6IG5ldyBTZXQoW1xuICAgICAgICAnX2RheUNvdW50QnlNb250aE9mWWVhcicsXG4gICAgICAgICdfZGF5TmFtZUJ5TW9udGhPZlllYXJBbmREYXlPZk1vbnRoJyxcbiAgICAgICAgJ19tb250aE5hbWVCeU1vbnRoT2ZZZWFyJyxcbiAgICAgICAgJ195ZWFyTmFtZUJ5WWVhcidcbiAgICBdKSxcbiAgICBfc2Vhc29uQ2hhbmdlcyxcbiAgICBfeWVhck5hbWVCeVllYXJcbn0pO1xuIl19