@digitransit-component/digitransit-component-autosuggest 1.8.11 → 1.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.development.js +3 -35
- package/lib/index.js +2 -34
- package/lib/index.js.map +1 -1
- package/package.json +8 -8
package/lib/index.development.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
!function(e,c){"object"==typeof exports&&"undefined"!=typeof module?c(exports,require("prop-types"),require("react"),require("i18next"),require("classnames"),require("react-autosuggest"),require("lodash/debounce"),require("lodash/flatten"),require("lodash/take"),require("lodash/isString"),require("lodash/orderBy"),require("lodash/uniqWith"),require("lodash/isEqual"),require("lodash/memoize"),require("lodash/escapeRegExp"),require("lodash/cloneDeep"),require("lodash/get"),require("@digitransit-component/digitransit-component-suggestion-item"),require("@digitransit-component/digitransit-component-icon"),require("lodash/isEmpty"),require("react-modal"),require("@digitransit-component/digitransit-component-dialog-modal")):"function"==typeof define&&define.amd?define(["exports","prop-types","react","i18next","classnames","react-autosuggest","lodash/debounce","lodash/flatten","lodash/take","lodash/isString","lodash/orderBy","lodash/uniqWith","lodash/isEqual","lodash/memoize","lodash/escapeRegExp","lodash/cloneDeep","lodash/get","@digitransit-component/digitransit-component-suggestion-item","@digitransit-component/digitransit-component-icon","lodash/isEmpty","react-modal","@digitransit-component/digitransit-component-dialog-modal"],c):c((e="undefined"!=typeof globalThis?globalThis:e||self).DTAutosuggest={},e.PropTypes,e.React,e.i18next,e.cx,e.Autosuggest,e.debounce,e.flatten,e.take,e.isString,e.orderBy,e.uniqWith,e.isEqual,e.memoize,e.escapeRegExp,e.cloneDeep,e.get,e.SuggestionItem,e.Icon,e.isEmpty,e.ReactModal,e.DialogModal)}(this,(function(e,c,n,o,t,a,i,r,M,s,l,u,p,d,b,A,f,z,h,O,L,m){"use strict";function q(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var N=q(c),g=q(n),W=q(o),_=q(t),T=q(a),X=q(i),B=q(r),y=q(M),S=q(s),v=q(l),k=q(u),C=q(p),R=q(d),E=q(b),w=q(A),D=q(f),P=q(z),x=q(h),I=q(O),H=q(L),Y=q(m);function F(e){return F="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},F(e)}function j(){return j=Object.assign||function(e){for(var c=1;c<arguments.length;c++){var n=arguments[c];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},j.apply(this,arguments)}function U(e,c){(null==c||c>e.length)&&(c=e.length);for(var n=0,o=new Array(c);n<c;n++)o[n]=e[n];return o}function G(e,c){if(e){if("string"==typeof e)return U(e,c);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?U(e,c):void 0}}function V(e){return function(e){if(Array.isArray(e))return U(e)}(e)||function(e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}(e)||G(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function K(e,c){if(!(e instanceof c))throw new TypeError("Cannot call a class as a function")}function Q(e,c){for(var n=0;n<c.length;n++){var o=c[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}function J(e,c,n){return c&&Q(e.prototype,c),n&&Q(e,n),e}function Z(e,c){return Z=Object.setPrototypeOf||function(e,c){return e.__proto__=c,e},Z(e,c)}function $(e,c){if("function"!=typeof c&&null!==c)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(c&&c.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),c&&Z(e,c)}function ee(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function ce(e,c){return!c||"object"!==F(c)&&"function"!=typeof c?ee(e):c}function ne(e){return ne=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},ne(e)}function oe(e,c){return function(e){if(Array.isArray(e))return e}(e)||function(e,c){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e)){var n=[],o=!0,t=!1,a=void 0;try{for(var i,r=e[Symbol.iterator]();!(o=(i=r.next()).done)&&(n.push(i.value),!c||n.length!==c);o=!0);}catch(e){t=!0,a=e}finally{try{o||null==r.return||r.return()}finally{if(t)throw a}}return n}}(e,c)||G(e,c)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function te(e,c){return e&&c&&e===c}function ae(e,c){var n=e.properties,o=c.properties;if("FutureRoute"===e.type&&"FutureRoute"===c.type){var t=n.origin,a=n.destination,i=o.origin,r=o.destination;return"".concat(t.name,"//").concat(t.locality,"//").concat(a.name,"//").concat(a.locality)==="".concat(i.name,"//").concat(i.locality,"//").concat(r.name,"//").concat(r.locality)}if("FutureRoute"===e.type||"FutureRoute"===c.type)return!1;if(("bikeRentalStation"===n.layer||"favouriteBikeRentalStation"===n.layer)&&("bikeRentalStation"===o.layer||"favouriteBikeRentalStation"===o.layer)||"bikestation"===n.layer&&"bikestation"===o.layer)return n.labelId===o.labelId;if(n.gtfsId&&o.gtfsId)return n.gtfsId===o.gtfsId;if(n.gtfsId&&o.gid&&o.gid.includes(n.gtfsId))return!0;if(o.gtfsId&&n.gid&&n.gid.includes(o.gtfsId))return!0;if(("stop"===n.layer||"station"===n.layer)&&("stop"===o.layer||"station"===o.layer)&&n.gid&&o.gid)return n.gid===o.gid;var M=e&&e.geometry?e.geometry.coordinates:void 0,s=c&&c.geometry?c.geometry.coordinates:void 0;return!!(M&&s&&Math.abs(M[0]-s[0])<1e-6&&Math.abs(M[1]-s[1])<1e-6&&(te(n.name,o.name)||te(n.label,o.label)||te(n.address,o.address)||te(n.address,o.label)||te(n.label,o.address)))}var ie=function(e){return S.default(e)?e.toLowerCase():""},re={Address:"address",Back:"back",CurrentPosition:"currentPosition",FavouriteStop:"favouriteStop",FavouriteStation:"favouriteStation",FavouritePlace:"favouritePlace",FavouriteRoute:"favouriteRoute",FutureRoute:"futureRoute",Station:"station",SelectFromMap:"selectFromMap",SelectFromOwnLocations:"ownLocations",Stop:"stop",Street:"street",Venue:"venue",BikeRentalStation:"bikeRentalStation",CarPark:"carpark",BikePark:"bikepark"},Me=function(e,c){if(!S.default(e)||0===e.length)return 0;return["name","label","address","shortName"].map((function(e){return c[e]})).filter((function(e){return S.default(e)&&e.length>0})).map((function(c){var n=ie(c);return 0===n.indexOf(e)?.5+e.length/n.length:.5*e.length/(e.length+1)})).reduce((function(e,c){return c>e?c:e}),0)},se=function(e,c){switch(e){case re.CurrentPosition:return 1;case re.Back:return.9;case re.SelectFromMap:return.8;case re.SelectFromOwnLocations:return.79;case re.FavouriteStation:case re.FavouritePlace:case re.FavouriteStop:case re.FavouriteRoute:return.45;case re.FutureRoute:return.44;case re.Station:return S.default(c)&&0===c.indexOf("gtfs")?.43:.42;case re.FavouriteBikeRentalStation:default:return.41;case re.CarPark:case re.BikePark:case re.BikeRentalStation:return.38;case re.Stop:return.36}},le=function(e,c){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";if(!Array.isArray(c))return c;var o=function(c){return S.default(c)&&e&&e.test(c)},t=ie(n),a=o(t),i=v.default(c,[function(e){return a&&o(ie(e.properties.shortName))&&0===ie(e.properties.shortName).indexOf(t)?1:0},function(e){var c=e.properties,n=c.confidence,o=c.layer,a=c.source;if(0===t.length)return se(o,a);if(!n){var i=se(o,a)+Me(t,e.properties);return o===re.BikeRentalStation?i-.8:i}switch(o){case re.Station:return n+(0===a.indexOf("gtfs")?.02:.01);default:return n;case re.Stop:case re.CarPark:case re.BikePark:return n-.05}}],["desc","desc"]);return k.default(i,ae)},ue=function(e,c){return null!=c&&-1!==e.lastIndexOf(c)?e.substring(0,e.lastIndexOf(c)-1):e},pe=function(e){return e.localadmin||e.locality||e.address&&e.address.lastIndexOf(",")<e.address.length-2&&e.address.substring(e.address.lastIndexOf(",")+2)||""},de=function(e){var c=e.id,n=e.code;return n||(void 0!==c&&void 0!==c.indexOf&&-1!==c.indexOf("#")?c.substring(c.indexOf("#")+1):void 0)},be=function(e,c){return[e||c&&c.split(",")[0],"string"==typeof c?c.replace(new RegExp("".concat(E.default(e),"([ ,]|$)+")),""):""]},Ae=R.default((function(e){var c=arguments.length>1&&void 0!==arguments[1]&&arguments[1];switch(e.layer){case"currentPosition":return[e.labelId,e.address];case"selectFromMap":case"ownLocations":case"back":return[e.labelId];case"favouritePlace":return be(e.name,e.address);case"favouriteBikeRentalStation":case"bikeRentalStation":return[e.name];case"favouriteRoute":case"route-BUS":case"route-TRAM":case"route-RAIL":case"route-SUBWAY":case"route-FERRY":case"route-AIRPLANE":return!c&&e.shortName?[e.gtfsId,e.mode.toLowerCase(),e.longName]:[e.shortName,e.longName,e.agency?e.agency.name:void 0];case"venue":case"address":case"street":return[e.name,e.label.replace(new RegExp("".concat(E.default(e.name),"(,)?( )?")),"")];case"favouriteStop":case"stop":return c?[e.name||e.label||e.address&&e.address.split(",")[0],pe(e)]:[e.name,e.id,de(e),pe(e)];default:return[e.name||e.label||e.address&&e.address.split(",")[0],pe(e)]}}),(function(e,c){var n=w.default(e);return n.plain=c,n}));function fe(e){return k.default(e,(function(e,c){var n=C.default(Ae(e.properties),Ae(c.properties))&&e.properties.layer===c.properties.layer;return(!n||"FutureRoute"!==e.type&&"FutureRoute"!==c.type)&&n}))}function ze(e,c,n){if("string"==typeof c&&c.length>0){var o=c.toLowerCase().trim(),t=o.includes(" ")||o.includes(",");return e.filter((function(e){var c=[];n.forEach((function(n){var o=D.default(e,n);t||"properties.label"!==n&&"address"!==n||!o||((o=o.split(",")).length>2?o.splice(o.length-2,2):o.length>1&&o.splice(o.length-1,1),o=o.join(",")),o&&(c=t?c.concat(o.toLowerCase()):c.concat(o.toLowerCase().replace(/,/g," ").split(" ")))}));for(var a=0;a<c.length;a++)if(0===c[a].indexOf(o))return!0;return!1}))}return e}function he(e,c){return e?Object.keys(e).map((function(n){var o=c||n,t=e[n];return"object"===F(t)?he(t,o):"".concat(encodeURIComponent(o),"=").concat(encodeURIComponent(t))})).join("&"):""}var Oe=require("axios").default;function Le(e,c){return Oe.get(encodeURI(e)+(c?(-1===e.search(/\?/)?"?":"&")+he(c):""),{timeout:1e4,method:"GET",headers:{Accept:"application/json"}}).then((function(e){return e.data}))}function me(e,c,n,o,t,a,i,r){var M=e?e.trim():null;if(null==M||M.length<1||i&&!i.test(M))return Promise.resolve([]);var s=a||"https://api.digitransit.fi/geocoding/v1/search",l=j({text:M},c,o,{lang:n});(t&&(l=j({},l,{sources:t})),r)&&(l=j({},l,{layers:r.toString()}));return Le(s,l).then((function(e){return e.features}))}function qe(e,c){if(!e||e.length<1)return Promise.resolve([]);var n="",o=e.map((function(e){var c="stop"===e.type?"stop":"station",o="gtfs".concat(e.gtfsId.split(":")[0].toLowerCase(),":").concat(c,":GTFS:").concat(e.gtfsId);return e.code&&(o+="#".concat(e.code)),n+="".concat(o,","),j({},e,{gid:o})})).reduce((function(e,c){return e[c.gid]=c,e}),{});return Le(c,{ids:n.slice(0,-1)}).then((function(e){return e.features.map((function(e){var c,n,t;return{type:"FavouriteStop",properties:{addendum:e.properties.addendum,gid:o[e.properties.gid].gid,code:o[e.properties.gid].code,gtfsId:o[e.properties.gid].gtfsId,lastUpdated:o[e.properties.gid].lastUpdated,favouriteId:o[e.properties.gid].favouriteId,address:e.properties.label,layer:(c=e.properties,n=c.layer,t=c.type,"stop"===n||"favouriteStop"===n||"stop"===t||"favouriteStop"===t?"favouriteStop":"favouriteStation")},geometry:e.geometry}}))}))}function Ne(e,c,n){var o=ze(e,c,["properties.name","properties.label","properties.address","properties.shortName","properties.longName"]);return n&&(o=o.filter((function(e){return!n.includes(e.properties.layer)}))),Promise.resolve(y.default(o,10).map((function(e){var c=j({},e,{type:"OldSearch",timetableClicked:!1,arrowClicked:!1});return delete c.properties.confidence,c})))}var ge=["route-TRAM","route-BUS","route-RAIL","route-FERRY","route-SUBWAY","route-AIRPLANE"],We=["favouritePlace","venue","address","street"],_e=["carpark","bikepark"];var Te=X.default((function(e,c,n,o,t,a,i,r,M,s){var l=i.input,u=o.getPositions,p=o.getFavouriteLocations,d=o.getOldSearches,b=o.getFavouriteStops,A=o.parkingAreaSources,f=o.getLanguage,z=o.getStopAndStationsQuery,h=o.getFavouriteBikeRentalStationsQuery,O=o.getFavouriteBikeRentalStations,L=o.getFavouriteRoutesQuery,m=o.getFavouriteRoutes,q=o.getRoutesQuery,N=o.context,g=o.isPeliasLocationAware,W=o.minimalRegexp,_=o.lineRegexp,T=o.URL_PELIAS,X=o.URL_PELIAS_PLACE,S=o.feedIDs,v=o.geocodingSearchParams,k=o.geocodingSources,C=o.getFutureRoutes,R=o.cityBikeNetworks,E=!e||0===e.length,w=!c||0===c.length,D=u(N),P=[],x={type:"all",term:l,results:[]},I=f(N),H=g&&null!=s&&s.lat&&null!=s&&s.lon?{"focus.point.lat":s.lat.toFixed(3),"focus.point.lon":s.lon.toFixed(3)}:{},Y=n?n.split("-")[1]:void 0;if(e.includes("CurrentPosition")&&"geolocation-not-supported"!==D.status&&P.push(function(e,c){return"string"!=typeof e||0===e.length?Promise.resolve([{type:"CurrentLocation",address:c.address,lat:c.lat,lon:c.lon,properties:{labelId:"use-own-position",layer:"currentPosition",address:c.address,lat:c.lat,lon:c.lon},geometry:{type:"Point",coordinates:[c.lon,c.lat]}}]):Promise.resolve([])}(l,D)),(E||e.includes("MapPosition"))&&P.push(function(e){return"string"!=typeof e||0===e.length?Promise.resolve([{type:"SelectFromMap",address:"SelectFromMap",lat:null,lon:null,properties:{labelId:"select-from-map",layer:"selectFromMap",address:"SelectFromMap",lat:null,lon:null},geometry:{type:"Point",coordinates:[]}}]):Promise.resolve([])}(l)),e.includes("FutureRoutes")){var F=C(N);P.push(y.default(F,3))}if(e.includes("SelectFromOwnLocations")&&function(e,c,n){var o=c(e);if(o&&o.length>0)return!0;var t=n(e);return t&&t.length>0}(N,p,b)&&P.push(function(e){return"string"!=typeof e||0===e.length?Promise.resolve([{type:"SelectFromOwnLocations",address:"SelectFromOwnLocations",lat:null,lon:null,properties:{labelId:"select-from-own-locations",layer:"ownLocations",address:"selectFromOwnLocations",lat:null,lon:null},geometry:{type:"Point",coordinates:[]}}]):Promise.resolve([])}(l)),E||e.includes("Locations")){var U=v;if(c.includes("Favourite")){var G=p(N);P.push(function(e,c){return Promise.resolve(ze(e,c,["address","name"]).map((function(e){return{type:"FavouritePlace",properties:j({},e,{label:e.name,layer:"favouritePlace"}),geometry:{type:"Point",coordinates:[e.lon,e.lat]}}})))}(G,l)),c.includes("Back")&&P.push(Promise.resolve([{type:"back",address:"back",lat:null,lon:null,properties:{labelId:"back",layer:"back",address:"back",lat:null,lon:null},geometry:{type:"Point",coordinates:[]}}]))}if(w||c.includes("Datasource")){var K=S.map((function(e){return"gtfs".concat(e)})),Q=k.concat(K).join(",");P.push(me(l,U,I,H,Q,T,W,["station","venue","address","street"]))}if(w||c.includes("History")){var J=d(N,"endpoint"),Z=["currentPosition","selectFromMap","futureRoute","ownLocations","bikeRentalStation","bikepark","carpark","stop","back"];Z.push.apply(Z,ge),P.push(Ne(J,l,Z))}}if(E||e.includes("ParkingAreas")){if(w||c.includes("Datasource")){var $=v;a&&10!==a&&($.size=a);var ee=A?A.join(","):null;P.push(me(l,$,I,H,ee,T,W,["carpark","bikepark"]).then((function(e){return t?t(e,Y):e})))}if(w||c.includes("History")){var ce=d(N),ne=["currentPosition","selectFromMap","futureRoute","ownLocations","favouritePlace","bikestation","bikeRentalStation","back"];ne.push.apply(ne,ge),ne.push.apply(ne,We),P.push(Ne(ce,l,ne))}}if(E||e.includes("Stops")){if(c.includes("Favourite")){var oe,te=b(N);oe=te.every((function(e){return"station"===e.type}))?qe(te,X).then((function(e){return t?t(e,Y):e})):z(te).then((function(e){return qe(e,X)})).then((function(e){return t?t(e,Y):e})),P.push(function(e,c){return e.then((function(e){return ze(e,c,["properties.name","properties.name","properties.address"])}))}(oe,l))}if(w||c.includes("Datasource")){var ae=a&&10!==a?{size:a}:{};(E||e.includes("Locations"))&&(ae.dedupestops=1);var ie=S.map((function(e){return"gtfs".concat(e)})).join(",");P.push(me(l,ae,I,H,ie,T,W,["stop","station"]).then((function(e){return t?t(e,Y):e})))}if(w||c.includes("History")){var re=d(N).filter((function(e){return!e.properties.gid||e.properties.gid.includes("GTFS:")})),Me=["currentPosition","selectFromMap","futureRoute","ownLocations","favouritePlace","bikeRentalStation","back"];Me.push.apply(Me,ge),Me.push.apply(Me,We),Me.push.apply(Me,_e),n?("route-CITYBIKE"!==n&&(Me.push("bikeRentalStation"),Me.push("bikestation")),P.push(Ne(re,l,Me).then((function(e){return t?t(e,Y):e})))):P.push(Ne(re,l,Me))}}if(E||e.includes("Routes")){if(c.includes("Favourite")){var se=m(N);P.push(L(se,l,Y,M).then((function(e){return t?t(e,Y,"Routes"):e})))}if(P.push(q(l,S,n,M).then((function(e){return t?t(e,Y,"Routes"):e}))),w||c.includes("History")){var ue=d(N),pe=["currentPosition","selectFromMap","futureRoute","favouritePlace","stop","station","bikepark","carpark","ownLocations","back"];n&&("route-CITYBIKE"!==n&&(pe.push("bikeRentalStation"),pe.push("bikestation")),pe.push.apply(pe,V(ge.filter((function(e){return!(e===n)}))))),pe.push.apply(pe,We),P.push(Ne(ue,l,pe).then((function(e){return t?t(e,Y,"Routes"):e})))}}if(E||e.includes("BikeRentalStations")){if(c.includes("Favourite")){var de=O(N);P.push(h(de,l))}if(w||c.includes("Datasource")){var be=a&&10!==a?{size:a}:{};P.push(me(l,be,I,H,R.join(","),T,W,["bikestation"]).then((function(e){return t?t(e,Y,"BikeRentalStations"):e})))}}Promise.all(P).then(B.default).then(fe).then((function(e){x.results=e})).catch((function(e){x.error=e})).then((function(){r(j({},x,{results:le(_,x.results,l)}))}))}),300,{leading:!0});function Xe(){throw new Error("Dynamic requires are not currently supported by rollup-plugin-commonjs")}function Be(e,c){return e(c={exports:{}},c.exports),c.exports}var ye,Se=Be((function(e,c){e.exports=function(){var c,n;function o(){return c.apply(null,arguments)}function t(e){c=e}function a(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function i(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function r(e,c){return Object.prototype.hasOwnProperty.call(e,c)}function M(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;var c;for(c in e)if(r(e,c))return!1;return!0}function s(e){return void 0===e}function l(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function u(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function p(e,c){var n,o=[];for(n=0;n<e.length;++n)o.push(c(e[n],n));return o}function d(e,c){for(var n in c)r(c,n)&&(e[n]=c[n]);return r(c,"toString")&&(e.toString=c.toString),r(c,"valueOf")&&(e.valueOf=c.valueOf),e}function b(e,c,n,o){return Vn(e,c,n,o,!0).utc()}function A(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}}function f(e){return null==e._pf&&(e._pf=A()),e._pf}function z(e){if(null==e._isValid){var c=f(e),o=n.call(c.parsedDateParts,(function(e){return null!=e})),t=!isNaN(e._d.getTime())&&c.overflow<0&&!c.empty&&!c.invalidEra&&!c.invalidMonth&&!c.invalidWeekday&&!c.weekdayMismatch&&!c.nullInput&&!c.invalidFormat&&!c.userInvalidated&&(!c.meridiem||c.meridiem&&o);if(e._strict&&(t=t&&0===c.charsLeftOver&&0===c.unusedTokens.length&&void 0===c.bigHour),null!=Object.isFrozen&&Object.isFrozen(e))return t;e._isValid=t}return e._isValid}function h(e){var c=b(NaN);return null!=e?d(f(c),e):f(c).userInvalidated=!0,c}n=Array.prototype.some?Array.prototype.some:function(e){var c,n=Object(this),o=n.length>>>0;for(c=0;c<o;c++)if(c in n&&e.call(this,n[c],c,n))return!0;return!1};var O=o.momentProperties=[],L=!1;function m(e,c){var n,o,t;if(s(c._isAMomentObject)||(e._isAMomentObject=c._isAMomentObject),s(c._i)||(e._i=c._i),s(c._f)||(e._f=c._f),s(c._l)||(e._l=c._l),s(c._strict)||(e._strict=c._strict),s(c._tzm)||(e._tzm=c._tzm),s(c._isUTC)||(e._isUTC=c._isUTC),s(c._offset)||(e._offset=c._offset),s(c._pf)||(e._pf=f(c)),s(c._locale)||(e._locale=c._locale),O.length>0)for(n=0;n<O.length;n++)s(t=c[o=O[n]])||(e[o]=t);return e}function q(e){m(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===L&&(L=!0,o.updateOffset(this),L=!1)}function N(e){return e instanceof q||null!=e&&null!=e._isAMomentObject}function g(e){!1===o.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+e)}function W(e,c){var n=!0;return d((function(){if(null!=o.deprecationHandler&&o.deprecationHandler(null,e),n){var t,a,i,M=[];for(a=0;a<arguments.length;a++){if(t="","object"==typeof arguments[a]){for(i in t+="\n["+a+"] ",arguments[0])r(arguments[0],i)&&(t+=i+": "+arguments[0][i]+", ");t=t.slice(0,-2)}else t=arguments[a];M.push(t)}g(e+"\nArguments: "+Array.prototype.slice.call(M).join("")+"\n"+(new Error).stack),n=!1}return c.apply(this,arguments)}),c)}var _,T={};function X(e,c){null!=o.deprecationHandler&&o.deprecationHandler(e,c),T[e]||(g(c),T[e]=!0)}function B(e){return"undefined"!=typeof Function&&e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function y(e){var c,n;for(n in e)r(e,n)&&(B(c=e[n])?this[n]=c:this["_"+n]=c);this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)}function S(e,c){var n,o=d({},e);for(n in c)r(c,n)&&(i(e[n])&&i(c[n])?(o[n]={},d(o[n],e[n]),d(o[n],c[n])):null!=c[n]?o[n]=c[n]:delete o[n]);for(n in e)r(e,n)&&!r(c,n)&&i(e[n])&&(o[n]=d({},o[n]));return o}function v(e){null!=e&&this.set(e)}o.suppressDeprecationWarnings=!1,o.deprecationHandler=null,_=Object.keys?Object.keys:function(e){var c,n=[];for(c in e)r(e,c)&&n.push(c);return n};var k={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"};function C(e,c,n){var o=this._calendar[e]||this._calendar.sameElse;return B(o)?o.call(c,n):o}function R(e,c,n){var o=""+Math.abs(e),t=c-o.length;return(e>=0?n?"+":"":"-")+Math.pow(10,Math.max(0,t)).toString().substr(1)+o}var E=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,w=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,D={},P={};function x(e,c,n,o){var t=o;"string"==typeof o&&(t=function(){return this[o]()}),e&&(P[e]=t),c&&(P[c[0]]=function(){return R(t.apply(this,arguments),c[1],c[2])}),n&&(P[n]=function(){return this.localeData().ordinal(t.apply(this,arguments),e)})}function I(e){return e.match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"")}function H(e){var c,n,o=e.match(E);for(c=0,n=o.length;c<n;c++)P[o[c]]?o[c]=P[o[c]]:o[c]=I(o[c]);return function(c){var t,a="";for(t=0;t<n;t++)a+=B(o[t])?o[t].call(c,e):o[t];return a}}function Y(e,c){return e.isValid()?(c=F(c,e.localeData()),D[c]=D[c]||H(c),D[c](e)):e.localeData().invalidDate()}function F(e,c){var n=5;function o(e){return c.longDateFormat(e)||e}for(w.lastIndex=0;n>=0&&w.test(e);)e=e.replace(w,o),w.lastIndex=0,n-=1;return e}var j={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};function U(e){var c=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return c||!n?c:(this._longDateFormat[e]=n.match(E).map((function(e){return"MMMM"===e||"MM"===e||"DD"===e||"dddd"===e?e.slice(1):e})).join(""),this._longDateFormat[e])}var G="Invalid date";function V(){return this._invalidDate}var K="%d",Q=/\d{1,2}/;function J(e){return this._ordinal.replace("%d",e)}var Z={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function $(e,c,n,o){var t=this._relativeTime[n];return B(t)?t(e,c,n,o):t.replace(/%d/i,e)}function ee(e,c){var n=this._relativeTime[e>0?"future":"past"];return B(n)?n(c):n.replace(/%s/i,c)}var ce={};function ne(e,c){var n=e.toLowerCase();ce[n]=ce[n+"s"]=ce[c]=e}function oe(e){return"string"==typeof e?ce[e]||ce[e.toLowerCase()]:void 0}function te(e){var c,n,o={};for(n in e)r(e,n)&&(c=oe(n))&&(o[c]=e[n]);return o}var ae={};function ie(e,c){ae[e]=c}function re(e){var c,n=[];for(c in e)r(e,c)&&n.push({unit:c,priority:ae[c]});return n.sort((function(e,c){return e.priority-c.priority})),n}function Me(e){return e%4==0&&e%100!=0||e%400==0}function se(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function le(e){var c=+e,n=0;return 0!==c&&isFinite(c)&&(n=se(c)),n}function ue(e,c){return function(n){return null!=n?(de(this,e,n),o.updateOffset(this,c),this):pe(this,e)}}function pe(e,c){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+c]():NaN}function de(e,c,n){e.isValid()&&!isNaN(n)&&("FullYear"===c&&Me(e.year())&&1===e.month()&&29===e.date()?(n=le(n),e._d["set"+(e._isUTC?"UTC":"")+c](n,e.month(),ec(n,e.month()))):e._d["set"+(e._isUTC?"UTC":"")+c](n))}function be(e){return B(this[e=oe(e)])?this[e]():this}function Ae(e,c){if("object"==typeof e){var n,o=re(e=te(e));for(n=0;n<o.length;n++)this[o[n].unit](e[o[n].unit])}else if(B(this[e=oe(e)]))return this[e](c);return this}var fe,ze=/\d/,he=/\d\d/,Oe=/\d{3}/,Le=/\d{4}/,me=/[+-]?\d{6}/,qe=/\d\d?/,Ne=/\d\d\d\d?/,ge=/\d\d\d\d\d\d?/,We=/\d{1,3}/,_e=/\d{1,4}/,Te=/[+-]?\d{1,6}/,Be=/\d+/,ye=/[+-]?\d+/,Se=/Z|[+-]\d\d:?\d\d/gi,ve=/Z|[+-]\d\d(?::?\d\d)?/gi,ke=/[+-]?\d+(\.\d{1,3})?/,Ce=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i;function Re(e,c,n){fe[e]=B(c)?c:function(e,o){return e&&n?n:c}}function Ee(e,c){return r(fe,e)?fe[e](c._strict,c._locale):new RegExp(we(e))}function we(e){return De(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,(function(e,c,n,o,t){return c||n||o||t})))}function De(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}fe={};var Pe={};function xe(e,c){var n,o=c;for("string"==typeof e&&(e=[e]),l(c)&&(o=function(e,n){n[c]=le(e)}),n=0;n<e.length;n++)Pe[e[n]]=o}function Ie(e,c){xe(e,(function(e,n,o,t){o._w=o._w||{},c(e,o._w,o,t)}))}function He(e,c,n){null!=c&&r(Pe,e)&&Pe[e](c,n._a,n,e)}var Ye,Fe=0,je=1,Ue=2,Ge=3,Ve=4,Ke=5,Qe=6,Je=7,Ze=8;function $e(e,c){return(e%c+c)%c}function ec(e,c){if(isNaN(e)||isNaN(c))return NaN;var n=$e(c,12);return e+=(c-n)/12,1===n?Me(e)?29:28:31-n%7%2}Ye=Array.prototype.indexOf?Array.prototype.indexOf:function(e){var c;for(c=0;c<this.length;++c)if(this[c]===e)return c;return-1},x("M",["MM",2],"Mo",(function(){return this.month()+1})),x("MMM",0,0,(function(e){return this.localeData().monthsShort(this,e)})),x("MMMM",0,0,(function(e){return this.localeData().months(this,e)})),ne("month","M"),ie("month",8),Re("M",qe),Re("MM",qe,he),Re("MMM",(function(e,c){return c.monthsShortRegex(e)})),Re("MMMM",(function(e,c){return c.monthsRegex(e)})),xe(["M","MM"],(function(e,c){c[je]=le(e)-1})),xe(["MMM","MMMM"],(function(e,c,n,o){var t=n._locale.monthsParse(e,o,n._strict);null!=t?c[je]=t:f(n).invalidMonth=e}));var cc="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),nc="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),oc=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,tc=Ce,ac=Ce;function ic(e,c){return e?a(this._months)?this._months[e.month()]:this._months[(this._months.isFormat||oc).test(c)?"format":"standalone"][e.month()]:a(this._months)?this._months:this._months.standalone}function rc(e,c){return e?a(this._monthsShort)?this._monthsShort[e.month()]:this._monthsShort[oc.test(c)?"format":"standalone"][e.month()]:a(this._monthsShort)?this._monthsShort:this._monthsShort.standalone}function Mc(e,c,n){var o,t,a,i=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],o=0;o<12;++o)a=b([2e3,o]),this._shortMonthsParse[o]=this.monthsShort(a,"").toLocaleLowerCase(),this._longMonthsParse[o]=this.months(a,"").toLocaleLowerCase();return n?"MMM"===c?-1!==(t=Ye.call(this._shortMonthsParse,i))?t:null:-1!==(t=Ye.call(this._longMonthsParse,i))?t:null:"MMM"===c?-1!==(t=Ye.call(this._shortMonthsParse,i))||-1!==(t=Ye.call(this._longMonthsParse,i))?t:null:-1!==(t=Ye.call(this._longMonthsParse,i))||-1!==(t=Ye.call(this._shortMonthsParse,i))?t:null}function sc(e,c,n){var o,t,a;if(this._monthsParseExact)return Mc.call(this,e,c,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),o=0;o<12;o++){if(t=b([2e3,o]),n&&!this._longMonthsParse[o]&&(this._longMonthsParse[o]=new RegExp("^"+this.months(t,"").replace(".","")+"$","i"),this._shortMonthsParse[o]=new RegExp("^"+this.monthsShort(t,"").replace(".","")+"$","i")),n||this._monthsParse[o]||(a="^"+this.months(t,"")+"|^"+this.monthsShort(t,""),this._monthsParse[o]=new RegExp(a.replace(".",""),"i")),n&&"MMMM"===c&&this._longMonthsParse[o].test(e))return o;if(n&&"MMM"===c&&this._shortMonthsParse[o].test(e))return o;if(!n&&this._monthsParse[o].test(e))return o}}function lc(e,c){var n;if(!e.isValid())return e;if("string"==typeof c)if(/^\d+$/.test(c))c=le(c);else if(!l(c=e.localeData().monthsParse(c)))return e;return n=Math.min(e.date(),ec(e.year(),c)),e._d["set"+(e._isUTC?"UTC":"")+"Month"](c,n),e}function uc(e){return null!=e?(lc(this,e),o.updateOffset(this,!0),this):pe(this,"Month")}function pc(){return ec(this.year(),this.month())}function dc(e){return this._monthsParseExact?(r(this,"_monthsRegex")||Ac.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(r(this,"_monthsShortRegex")||(this._monthsShortRegex=tc),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)}function bc(e){return this._monthsParseExact?(r(this,"_monthsRegex")||Ac.call(this),e?this._monthsStrictRegex:this._monthsRegex):(r(this,"_monthsRegex")||(this._monthsRegex=ac),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)}function Ac(){function e(e,c){return c.length-e.length}var c,n,o=[],t=[],a=[];for(c=0;c<12;c++)n=b([2e3,c]),o.push(this.monthsShort(n,"")),t.push(this.months(n,"")),a.push(this.months(n,"")),a.push(this.monthsShort(n,""));for(o.sort(e),t.sort(e),a.sort(e),c=0;c<12;c++)o[c]=De(o[c]),t[c]=De(t[c]);for(c=0;c<24;c++)a[c]=De(a[c]);this._monthsRegex=new RegExp("^("+a.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+t.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+o.join("|")+")","i")}function fc(e){return Me(e)?366:365}x("Y",0,0,(function(){var e=this.year();return e<=9999?R(e,4):"+"+e})),x(0,["YY",2],0,(function(){return this.year()%100})),x(0,["YYYY",4],0,"year"),x(0,["YYYYY",5],0,"year"),x(0,["YYYYYY",6,!0],0,"year"),ne("year","y"),ie("year",1),Re("Y",ye),Re("YY",qe,he),Re("YYYY",_e,Le),Re("YYYYY",Te,me),Re("YYYYYY",Te,me),xe(["YYYYY","YYYYYY"],Fe),xe("YYYY",(function(e,c){c[Fe]=2===e.length?o.parseTwoDigitYear(e):le(e)})),xe("YY",(function(e,c){c[Fe]=o.parseTwoDigitYear(e)})),xe("Y",(function(e,c){c[Fe]=parseInt(e,10)})),o.parseTwoDigitYear=function(e){return le(e)+(le(e)>68?1900:2e3)};var zc=ue("FullYear",!0);function hc(){return Me(this.year())}function Oc(e,c,n,o,t,a,i){var r;return e<100&&e>=0?(r=new Date(e+400,c,n,o,t,a,i),isFinite(r.getFullYear())&&r.setFullYear(e)):r=new Date(e,c,n,o,t,a,i),r}function Lc(e){var c,n;return e<100&&e>=0?((n=Array.prototype.slice.call(arguments))[0]=e+400,c=new Date(Date.UTC.apply(null,n)),isFinite(c.getUTCFullYear())&&c.setUTCFullYear(e)):c=new Date(Date.UTC.apply(null,arguments)),c}function mc(e,c,n){var o=7+c-n;return-(7+Lc(e,0,o).getUTCDay()-c)%7+o-1}function qc(e,c,n,o,t){var a,i,r=1+7*(c-1)+(7+n-o)%7+mc(e,o,t);return r<=0?i=fc(a=e-1)+r:r>fc(e)?(a=e+1,i=r-fc(e)):(a=e,i=r),{year:a,dayOfYear:i}}function Nc(e,c,n){var o,t,a=mc(e.year(),c,n),i=Math.floor((e.dayOfYear()-a-1)/7)+1;return i<1?o=i+gc(t=e.year()-1,c,n):i>gc(e.year(),c,n)?(o=i-gc(e.year(),c,n),t=e.year()+1):(t=e.year(),o=i),{week:o,year:t}}function gc(e,c,n){var o=mc(e,c,n),t=mc(e+1,c,n);return(fc(e)-o+t)/7}function Wc(e){return Nc(e,this._week.dow,this._week.doy).week}x("w",["ww",2],"wo","week"),x("W",["WW",2],"Wo","isoWeek"),ne("week","w"),ne("isoWeek","W"),ie("week",5),ie("isoWeek",5),Re("w",qe),Re("ww",qe,he),Re("W",qe),Re("WW",qe,he),Ie(["w","ww","W","WW"],(function(e,c,n,o){c[o.substr(0,1)]=le(e)}));var _c={dow:0,doy:6};function Tc(){return this._week.dow}function Xc(){return this._week.doy}function Bc(e){var c=this.localeData().week(this);return null==e?c:this.add(7*(e-c),"d")}function yc(e){var c=Nc(this,1,4).week;return null==e?c:this.add(7*(e-c),"d")}function Sc(e,c){return"string"!=typeof e?e:isNaN(e)?"number"==typeof(e=c.weekdaysParse(e))?e:null:parseInt(e,10)}function vc(e,c){return"string"==typeof e?c.weekdaysParse(e)%7||7:isNaN(e)?null:e}function kc(e,c){return e.slice(c,7).concat(e.slice(0,c))}x("d",0,"do","day"),x("dd",0,0,(function(e){return this.localeData().weekdaysMin(this,e)})),x("ddd",0,0,(function(e){return this.localeData().weekdaysShort(this,e)})),x("dddd",0,0,(function(e){return this.localeData().weekdays(this,e)})),x("e",0,0,"weekday"),x("E",0,0,"isoWeekday"),ne("day","d"),ne("weekday","e"),ne("isoWeekday","E"),ie("day",11),ie("weekday",11),ie("isoWeekday",11),Re("d",qe),Re("e",qe),Re("E",qe),Re("dd",(function(e,c){return c.weekdaysMinRegex(e)})),Re("ddd",(function(e,c){return c.weekdaysShortRegex(e)})),Re("dddd",(function(e,c){return c.weekdaysRegex(e)})),Ie(["dd","ddd","dddd"],(function(e,c,n,o){var t=n._locale.weekdaysParse(e,o,n._strict);null!=t?c.d=t:f(n).invalidWeekday=e})),Ie(["d","e","E"],(function(e,c,n,o){c[o]=le(e)}));var Cc="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Rc="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Ec="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),wc=Ce,Dc=Ce,Pc=Ce;function xc(e,c){var n=a(this._weekdays)?this._weekdays:this._weekdays[e&&!0!==e&&this._weekdays.isFormat.test(c)?"format":"standalone"];return!0===e?kc(n,this._week.dow):e?n[e.day()]:n}function Ic(e){return!0===e?kc(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort}function Hc(e){return!0===e?kc(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin}function Yc(e,c,n){var o,t,a,i=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],o=0;o<7;++o)a=b([2e3,1]).day(o),this._minWeekdaysParse[o]=this.weekdaysMin(a,"").toLocaleLowerCase(),this._shortWeekdaysParse[o]=this.weekdaysShort(a,"").toLocaleLowerCase(),this._weekdaysParse[o]=this.weekdays(a,"").toLocaleLowerCase();return n?"dddd"===c?-1!==(t=Ye.call(this._weekdaysParse,i))?t:null:"ddd"===c?-1!==(t=Ye.call(this._shortWeekdaysParse,i))?t:null:-1!==(t=Ye.call(this._minWeekdaysParse,i))?t:null:"dddd"===c?-1!==(t=Ye.call(this._weekdaysParse,i))||-1!==(t=Ye.call(this._shortWeekdaysParse,i))||-1!==(t=Ye.call(this._minWeekdaysParse,i))?t:null:"ddd"===c?-1!==(t=Ye.call(this._shortWeekdaysParse,i))||-1!==(t=Ye.call(this._weekdaysParse,i))||-1!==(t=Ye.call(this._minWeekdaysParse,i))?t:null:-1!==(t=Ye.call(this._minWeekdaysParse,i))||-1!==(t=Ye.call(this._weekdaysParse,i))||-1!==(t=Ye.call(this._shortWeekdaysParse,i))?t:null}function Fc(e,c,n){var o,t,a;if(this._weekdaysParseExact)return Yc.call(this,e,c,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),o=0;o<7;o++){if(t=b([2e3,1]).day(o),n&&!this._fullWeekdaysParse[o]&&(this._fullWeekdaysParse[o]=new RegExp("^"+this.weekdays(t,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[o]=new RegExp("^"+this.weekdaysShort(t,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[o]=new RegExp("^"+this.weekdaysMin(t,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[o]||(a="^"+this.weekdays(t,"")+"|^"+this.weekdaysShort(t,"")+"|^"+this.weekdaysMin(t,""),this._weekdaysParse[o]=new RegExp(a.replace(".",""),"i")),n&&"dddd"===c&&this._fullWeekdaysParse[o].test(e))return o;if(n&&"ddd"===c&&this._shortWeekdaysParse[o].test(e))return o;if(n&&"dd"===c&&this._minWeekdaysParse[o].test(e))return o;if(!n&&this._weekdaysParse[o].test(e))return o}}function jc(e){if(!this.isValid())return null!=e?this:NaN;var c=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(e=Sc(e,this.localeData()),this.add(e-c,"d")):c}function Uc(e){if(!this.isValid())return null!=e?this:NaN;var c=(this.day()+7-this.localeData()._week.dow)%7;return null==e?c:this.add(e-c,"d")}function Gc(e){if(!this.isValid())return null!=e?this:NaN;if(null!=e){var c=vc(e,this.localeData());return this.day(this.day()%7?c:c-7)}return this.day()||7}function Vc(e){return this._weekdaysParseExact?(r(this,"_weekdaysRegex")||Jc.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(r(this,"_weekdaysRegex")||(this._weekdaysRegex=wc),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)}function Kc(e){return this._weekdaysParseExact?(r(this,"_weekdaysRegex")||Jc.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(r(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Dc),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Qc(e){return this._weekdaysParseExact?(r(this,"_weekdaysRegex")||Jc.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(r(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Pc),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Jc(){function e(e,c){return c.length-e.length}var c,n,o,t,a,i=[],r=[],M=[],s=[];for(c=0;c<7;c++)n=b([2e3,1]).day(c),o=De(this.weekdaysMin(n,"")),t=De(this.weekdaysShort(n,"")),a=De(this.weekdays(n,"")),i.push(o),r.push(t),M.push(a),s.push(o),s.push(t),s.push(a);i.sort(e),r.sort(e),M.sort(e),s.sort(e),this._weekdaysRegex=new RegExp("^("+s.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+M.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+r.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+i.join("|")+")","i")}function Zc(){return this.hours()%12||12}function $c(){return this.hours()||24}function en(e,c){x(e,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),c)}))}function cn(e,c){return c._meridiemParse}function nn(e){return"p"===(e+"").toLowerCase().charAt(0)}x("H",["HH",2],0,"hour"),x("h",["hh",2],0,Zc),x("k",["kk",2],0,$c),x("hmm",0,0,(function(){return""+Zc.apply(this)+R(this.minutes(),2)})),x("hmmss",0,0,(function(){return""+Zc.apply(this)+R(this.minutes(),2)+R(this.seconds(),2)})),x("Hmm",0,0,(function(){return""+this.hours()+R(this.minutes(),2)})),x("Hmmss",0,0,(function(){return""+this.hours()+R(this.minutes(),2)+R(this.seconds(),2)})),en("a",!0),en("A",!1),ne("hour","h"),ie("hour",13),Re("a",cn),Re("A",cn),Re("H",qe),Re("h",qe),Re("k",qe),Re("HH",qe,he),Re("hh",qe,he),Re("kk",qe,he),Re("hmm",Ne),Re("hmmss",ge),Re("Hmm",Ne),Re("Hmmss",ge),xe(["H","HH"],Ge),xe(["k","kk"],(function(e,c,n){var o=le(e);c[Ge]=24===o?0:o})),xe(["a","A"],(function(e,c,n){n._isPm=n._locale.isPM(e),n._meridiem=e})),xe(["h","hh"],(function(e,c,n){c[Ge]=le(e),f(n).bigHour=!0})),xe("hmm",(function(e,c,n){var o=e.length-2;c[Ge]=le(e.substr(0,o)),c[Ve]=le(e.substr(o)),f(n).bigHour=!0})),xe("hmmss",(function(e,c,n){var o=e.length-4,t=e.length-2;c[Ge]=le(e.substr(0,o)),c[Ve]=le(e.substr(o,2)),c[Ke]=le(e.substr(t)),f(n).bigHour=!0})),xe("Hmm",(function(e,c,n){var o=e.length-2;c[Ge]=le(e.substr(0,o)),c[Ve]=le(e.substr(o))})),xe("Hmmss",(function(e,c,n){var o=e.length-4,t=e.length-2;c[Ge]=le(e.substr(0,o)),c[Ve]=le(e.substr(o,2)),c[Ke]=le(e.substr(t))}));var on=/[ap]\.?m?\.?/i,tn=ue("Hours",!0);function an(e,c,n){return e>11?n?"pm":"PM":n?"am":"AM"}var rn,Mn={calendar:k,longDateFormat:j,invalidDate:G,ordinal:K,dayOfMonthOrdinalParse:Q,relativeTime:Z,months:cc,monthsShort:nc,week:_c,weekdays:Cc,weekdaysMin:Ec,weekdaysShort:Rc,meridiemParse:on},sn={},ln={};function un(e,c){var n,o=Math.min(e.length,c.length);for(n=0;n<o;n+=1)if(e[n]!==c[n])return n;return o}function pn(e){return e?e.toLowerCase().replace("_","-"):e}function dn(e){for(var c,n,o,t,a=0;a<e.length;){for(c=(t=pn(e[a]).split("-")).length,n=(n=pn(e[a+1]))?n.split("-"):null;c>0;){if(o=bn(t.slice(0,c).join("-")))return o;if(n&&n.length>=c&&un(t,n)>=c-1)break;c--}a++}return rn}function bn(c){var n=null;if(void 0===sn[c]&&e&&e.exports)try{n=rn._abbr,Xe(),An(n)}catch(e){sn[c]=null}return sn[c]}function An(e,c){var n;return e&&((n=s(c)?hn(e):fn(e,c))?rn=n:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),rn._abbr}function fn(e,c){if(null!==c){var n,o=Mn;if(c.abbr=e,null!=sn[e])X("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),o=sn[e]._config;else if(null!=c.parentLocale)if(null!=sn[c.parentLocale])o=sn[c.parentLocale]._config;else{if(null==(n=bn(c.parentLocale)))return ln[c.parentLocale]||(ln[c.parentLocale]=[]),ln[c.parentLocale].push({name:e,config:c}),null;o=n._config}return sn[e]=new v(S(o,c)),ln[e]&&ln[e].forEach((function(e){fn(e.name,e.config)})),An(e),sn[e]}return delete sn[e],null}function zn(e,c){if(null!=c){var n,o,t=Mn;null!=sn[e]&&null!=sn[e].parentLocale?sn[e].set(S(sn[e]._config,c)):(null!=(o=bn(e))&&(t=o._config),c=S(t,c),null==o&&(c.abbr=e),(n=new v(c)).parentLocale=sn[e],sn[e]=n),An(e)}else null!=sn[e]&&(null!=sn[e].parentLocale?(sn[e]=sn[e].parentLocale,e===An()&&An(e)):null!=sn[e]&&delete sn[e]);return sn[e]}function hn(e){var c;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return rn;if(!a(e)){if(c=bn(e))return c;e=[e]}return dn(e)}function On(){return _(sn)}function Ln(e){var c,n=e._a;return n&&-2===f(e).overflow&&(c=n[je]<0||n[je]>11?je:n[Ue]<1||n[Ue]>ec(n[Fe],n[je])?Ue:n[Ge]<0||n[Ge]>24||24===n[Ge]&&(0!==n[Ve]||0!==n[Ke]||0!==n[Qe])?Ge:n[Ve]<0||n[Ve]>59?Ve:n[Ke]<0||n[Ke]>59?Ke:n[Qe]<0||n[Qe]>999?Qe:-1,f(e)._overflowDayOfYear&&(c<Fe||c>Ue)&&(c=Ue),f(e)._overflowWeeks&&-1===c&&(c=Je),f(e)._overflowWeekday&&-1===c&&(c=Ze),f(e).overflow=c),e}var mn=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,qn=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Nn=/Z|[+-]\d\d(?::?\d\d)?/,gn=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],Wn=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],_n=/^\/?Date\((-?\d+)/i,Tn=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,Xn={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function Bn(e){var c,n,o,t,a,i,r=e._i,M=mn.exec(r)||qn.exec(r);if(M){for(f(e).iso=!0,c=0,n=gn.length;c<n;c++)if(gn[c][1].exec(M[1])){t=gn[c][0],o=!1!==gn[c][2];break}if(null==t)return void(e._isValid=!1);if(M[3]){for(c=0,n=Wn.length;c<n;c++)if(Wn[c][1].exec(M[3])){a=(M[2]||" ")+Wn[c][0];break}if(null==a)return void(e._isValid=!1)}if(!o&&null!=a)return void(e._isValid=!1);if(M[4]){if(!Nn.exec(M[4]))return void(e._isValid=!1);i="Z"}e._f=t+(a||"")+(i||""),In(e)}else e._isValid=!1}function yn(e,c,n,o,t,a){var i=[Sn(e),nc.indexOf(c),parseInt(n,10),parseInt(o,10),parseInt(t,10)];return a&&i.push(parseInt(a,10)),i}function Sn(e){var c=parseInt(e,10);return c<=49?2e3+c:c<=999?1900+c:c}function vn(e){return e.replace(/\([^)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,"")}function kn(e,c,n){return!e||Rc.indexOf(e)===new Date(c[0],c[1],c[2]).getDay()||(f(n).weekdayMismatch=!0,n._isValid=!1,!1)}function Cn(e,c,n){if(e)return Xn[e];if(c)return 0;var o=parseInt(n,10),t=o%100;return(o-t)/100*60+t}function Rn(e){var c,n=Tn.exec(vn(e._i));if(n){if(c=yn(n[4],n[3],n[2],n[5],n[6],n[7]),!kn(n[1],c,e))return;e._a=c,e._tzm=Cn(n[8],n[9],n[10]),e._d=Lc.apply(null,e._a),e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),f(e).rfc2822=!0}else e._isValid=!1}function En(e){var c=_n.exec(e._i);null===c?(Bn(e),!1===e._isValid&&(delete e._isValid,Rn(e),!1===e._isValid&&(delete e._isValid,e._strict?e._isValid=!1:o.createFromInputFallback(e)))):e._d=new Date(+c[1])}function wn(e,c,n){return null!=e?e:null!=c?c:n}function Dn(e){var c=new Date(o.now());return e._useUTC?[c.getUTCFullYear(),c.getUTCMonth(),c.getUTCDate()]:[c.getFullYear(),c.getMonth(),c.getDate()]}function Pn(e){var c,n,o,t,a,i=[];if(!e._d){for(o=Dn(e),e._w&&null==e._a[Ue]&&null==e._a[je]&&xn(e),null!=e._dayOfYear&&(a=wn(e._a[Fe],o[Fe]),(e._dayOfYear>fc(a)||0===e._dayOfYear)&&(f(e)._overflowDayOfYear=!0),n=Lc(a,0,e._dayOfYear),e._a[je]=n.getUTCMonth(),e._a[Ue]=n.getUTCDate()),c=0;c<3&&null==e._a[c];++c)e._a[c]=i[c]=o[c];for(;c<7;c++)e._a[c]=i[c]=null==e._a[c]?2===c?1:0:e._a[c];24===e._a[Ge]&&0===e._a[Ve]&&0===e._a[Ke]&&0===e._a[Qe]&&(e._nextDay=!0,e._a[Ge]=0),e._d=(e._useUTC?Lc:Oc).apply(null,i),t=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[Ge]=24),e._w&&void 0!==e._w.d&&e._w.d!==t&&(f(e).weekdayMismatch=!0)}}function xn(e){var c,n,o,t,a,i,r,M,s;null!=(c=e._w).GG||null!=c.W||null!=c.E?(a=1,i=4,n=wn(c.GG,e._a[Fe],Nc(Kn(),1,4).year),o=wn(c.W,1),((t=wn(c.E,1))<1||t>7)&&(M=!0)):(a=e._locale._week.dow,i=e._locale._week.doy,s=Nc(Kn(),a,i),n=wn(c.gg,e._a[Fe],s.year),o=wn(c.w,s.week),null!=c.d?((t=c.d)<0||t>6)&&(M=!0):null!=c.e?(t=c.e+a,(c.e<0||c.e>6)&&(M=!0)):t=a),o<1||o>gc(n,a,i)?f(e)._overflowWeeks=!0:null!=M?f(e)._overflowWeekday=!0:(r=qc(n,o,t,a,i),e._a[Fe]=r.year,e._dayOfYear=r.dayOfYear)}function In(e){if(e._f!==o.ISO_8601)if(e._f!==o.RFC_2822){e._a=[],f(e).empty=!0;var c,n,t,a,i,r,M=""+e._i,s=M.length,l=0;for(t=F(e._f,e._locale).match(E)||[],c=0;c<t.length;c++)a=t[c],(n=(M.match(Ee(a,e))||[])[0])&&((i=M.substr(0,M.indexOf(n))).length>0&&f(e).unusedInput.push(i),M=M.slice(M.indexOf(n)+n.length),l+=n.length),P[a]?(n?f(e).empty=!1:f(e).unusedTokens.push(a),He(a,n,e)):e._strict&&!n&&f(e).unusedTokens.push(a);f(e).charsLeftOver=s-l,M.length>0&&f(e).unusedInput.push(M),e._a[Ge]<=12&&!0===f(e).bigHour&&e._a[Ge]>0&&(f(e).bigHour=void 0),f(e).parsedDateParts=e._a.slice(0),f(e).meridiem=e._meridiem,e._a[Ge]=Hn(e._locale,e._a[Ge],e._meridiem),null!==(r=f(e).era)&&(e._a[Fe]=e._locale.erasConvertYear(r,e._a[Fe])),Pn(e),Ln(e)}else Rn(e);else Bn(e)}function Hn(e,c,n){var o;return null==n?c:null!=e.meridiemHour?e.meridiemHour(c,n):null!=e.isPM?((o=e.isPM(n))&&c<12&&(c+=12),o||12!==c||(c=0),c):c}function Yn(e){var c,n,o,t,a,i,r=!1;if(0===e._f.length)return f(e).invalidFormat=!0,void(e._d=new Date(NaN));for(t=0;t<e._f.length;t++)a=0,i=!1,c=m({},e),null!=e._useUTC&&(c._useUTC=e._useUTC),c._f=e._f[t],In(c),z(c)&&(i=!0),a+=f(c).charsLeftOver,a+=10*f(c).unusedTokens.length,f(c).score=a,r?a<o&&(o=a,n=c):(null==o||a<o||i)&&(o=a,n=c,i&&(r=!0));d(e,n||c)}function Fn(e){if(!e._d){var c=te(e._i),n=void 0===c.day?c.date:c.day;e._a=p([c.year,c.month,n,c.hour,c.minute,c.second,c.millisecond],(function(e){return e&&parseInt(e,10)})),Pn(e)}}function jn(e){var c=new q(Ln(Un(e)));return c._nextDay&&(c.add(1,"d"),c._nextDay=void 0),c}function Un(e){var c=e._i,n=e._f;return e._locale=e._locale||hn(e._l),null===c||void 0===n&&""===c?h({nullInput:!0}):("string"==typeof c&&(e._i=c=e._locale.preparse(c)),N(c)?new q(Ln(c)):(u(c)?e._d=c:a(n)?Yn(e):n?In(e):Gn(e),z(e)||(e._d=null),e))}function Gn(e){var c=e._i;s(c)?e._d=new Date(o.now()):u(c)?e._d=new Date(c.valueOf()):"string"==typeof c?En(e):a(c)?(e._a=p(c.slice(0),(function(e){return parseInt(e,10)})),Pn(e)):i(c)?Fn(e):l(c)?e._d=new Date(c):o.createFromInputFallback(e)}function Vn(e,c,n,o,t){var r={};return!0!==c&&!1!==c||(o=c,c=void 0),!0!==n&&!1!==n||(o=n,n=void 0),(i(e)&&M(e)||a(e)&&0===e.length)&&(e=void 0),r._isAMomentObject=!0,r._useUTC=r._isUTC=t,r._l=n,r._i=e,r._f=c,r._strict=o,jn(r)}function Kn(e,c,n,o){return Vn(e,c,n,o,!1)}o.createFromInputFallback=W("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",(function(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))})),o.ISO_8601=function(){},o.RFC_2822=function(){};var Qn=W("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var e=Kn.apply(null,arguments);return this.isValid()&&e.isValid()?e<this?this:e:h()})),Jn=W("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var e=Kn.apply(null,arguments);return this.isValid()&&e.isValid()?e>this?this:e:h()}));function Zn(e,c){var n,o;if(1===c.length&&a(c[0])&&(c=c[0]),!c.length)return Kn();for(n=c[0],o=1;o<c.length;++o)c[o].isValid()&&!c[o][e](n)||(n=c[o]);return n}function $n(){return Zn("isBefore",[].slice.call(arguments,0))}function eo(){return Zn("isAfter",[].slice.call(arguments,0))}var co=function(){return Date.now?Date.now():+new Date},no=["year","quarter","month","week","day","hour","minute","second","millisecond"];function oo(e){var c,n,o=!1;for(c in e)if(r(e,c)&&(-1===Ye.call(no,c)||null!=e[c]&&isNaN(e[c])))return!1;for(n=0;n<no.length;++n)if(e[no[n]]){if(o)return!1;parseFloat(e[no[n]])!==le(e[no[n]])&&(o=!0)}return!0}function to(){return this._isValid}function ao(){return Bo(NaN)}function io(e){var c=te(e),n=c.year||0,o=c.quarter||0,t=c.month||0,a=c.week||c.isoWeek||0,i=c.day||0,r=c.hour||0,M=c.minute||0,s=c.second||0,l=c.millisecond||0;this._isValid=oo(c),this._milliseconds=+l+1e3*s+6e4*M+1e3*r*60*60,this._days=+i+7*a,this._months=+t+3*o+12*n,this._data={},this._locale=hn(),this._bubble()}function ro(e){return e instanceof io}function Mo(e){return e<0?-1*Math.round(-1*e):Math.round(e)}function so(e,c,n){var o,t=Math.min(e.length,c.length),a=Math.abs(e.length-c.length),i=0;for(o=0;o<t;o++)(n&&e[o]!==c[o]||!n&&le(e[o])!==le(c[o]))&&i++;return i+a}function lo(e,c){x(e,0,0,(function(){var e=this.utcOffset(),n="+";return e<0&&(e=-e,n="-"),n+R(~~(e/60),2)+c+R(~~e%60,2)}))}lo("Z",":"),lo("ZZ",""),Re("Z",ve),Re("ZZ",ve),xe(["Z","ZZ"],(function(e,c,n){n._useUTC=!0,n._tzm=po(ve,e)}));var uo=/([\+\-]|\d\d)/gi;function po(e,c){var n,o,t=(c||"").match(e);return null===t?null:0===(o=60*(n=((t[t.length-1]||[])+"").match(uo)||["-",0,0])[1]+le(n[2]))?0:"+"===n[0]?o:-o}function bo(e,c){var n,t;return c._isUTC?(n=c.clone(),t=(N(e)||u(e)?e.valueOf():Kn(e).valueOf())-n.valueOf(),n._d.setTime(n._d.valueOf()+t),o.updateOffset(n,!1),n):Kn(e).local()}function Ao(e){return-Math.round(e._d.getTimezoneOffset())}function fo(e,c,n){var t,a=this._offset||0;if(!this.isValid())return null!=e?this:NaN;if(null!=e){if("string"==typeof e){if(null===(e=po(ve,e)))return this}else Math.abs(e)<16&&!n&&(e*=60);return!this._isUTC&&c&&(t=Ao(this)),this._offset=e,this._isUTC=!0,null!=t&&this.add(t,"m"),a!==e&&(!c||this._changeInProgress?Co(this,Bo(e-a,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,o.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?a:Ao(this)}function zo(e,c){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,c),this):-this.utcOffset()}function ho(e){return this.utcOffset(0,e)}function Oo(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(Ao(this),"m")),this}function Lo(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var e=po(Se,this._i);null!=e?this.utcOffset(e):this.utcOffset(0,!0)}return this}function mo(e){return!!this.isValid()&&(e=e?Kn(e).utcOffset():0,(this.utcOffset()-e)%60==0)}function qo(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function No(){if(!s(this._isDSTShifted))return this._isDSTShifted;var e,c={};return m(c,this),(c=Un(c))._a?(e=c._isUTC?b(c._a):Kn(c._a),this._isDSTShifted=this.isValid()&&so(c._a,e.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function go(){return!!this.isValid()&&!this._isUTC}function Wo(){return!!this.isValid()&&this._isUTC}function _o(){return!!this.isValid()&&this._isUTC&&0===this._offset}o.updateOffset=function(){};var To=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,Xo=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Bo(e,c){var n,o,t,a=e,i=null;return ro(e)?a={ms:e._milliseconds,d:e._days,M:e._months}:l(e)||!isNaN(+e)?(a={},c?a[c]=+e:a.milliseconds=+e):(i=To.exec(e))?(n="-"===i[1]?-1:1,a={y:0,d:le(i[Ue])*n,h:le(i[Ge])*n,m:le(i[Ve])*n,s:le(i[Ke])*n,ms:le(Mo(1e3*i[Qe]))*n}):(i=Xo.exec(e))?(n="-"===i[1]?-1:1,a={y:yo(i[2],n),M:yo(i[3],n),w:yo(i[4],n),d:yo(i[5],n),h:yo(i[6],n),m:yo(i[7],n),s:yo(i[8],n)}):null==a?a={}:"object"==typeof a&&("from"in a||"to"in a)&&(t=vo(Kn(a.from),Kn(a.to)),(a={}).ms=t.milliseconds,a.M=t.months),o=new io(a),ro(e)&&r(e,"_locale")&&(o._locale=e._locale),ro(e)&&r(e,"_isValid")&&(o._isValid=e._isValid),o}function yo(e,c){var n=e&&parseFloat(e.replace(",","."));return(isNaN(n)?0:n)*c}function So(e,c){var n={};return n.months=c.month()-e.month()+12*(c.year()-e.year()),e.clone().add(n.months,"M").isAfter(c)&&--n.months,n.milliseconds=+c-+e.clone().add(n.months,"M"),n}function vo(e,c){var n;return e.isValid()&&c.isValid()?(c=bo(c,e),e.isBefore(c)?n=So(e,c):((n=So(c,e)).milliseconds=-n.milliseconds,n.months=-n.months),n):{milliseconds:0,months:0}}function ko(e,c){return function(n,o){var t;return null===o||isNaN(+o)||(X(c,"moment()."+c+"(period, number) is deprecated. Please use moment()."+c+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),t=n,n=o,o=t),Co(this,Bo(n,o),e),this}}function Co(e,c,n,t){var a=c._milliseconds,i=Mo(c._days),r=Mo(c._months);e.isValid()&&(t=null==t||t,r&&lc(e,pe(e,"Month")+r*n),i&&de(e,"Date",pe(e,"Date")+i*n),a&&e._d.setTime(e._d.valueOf()+a*n),t&&o.updateOffset(e,i||r))}Bo.fn=io.prototype,Bo.invalid=ao;var Ro=ko(1,"add"),Eo=ko(-1,"subtract");function wo(e){return"string"==typeof e||e instanceof String}function Do(e){return N(e)||u(e)||wo(e)||l(e)||xo(e)||Po(e)||null==e}function Po(e){var c,n,o=i(e)&&!M(e),t=!1,a=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"];for(c=0;c<a.length;c+=1)n=a[c],t=t||r(e,n);return o&&t}function xo(e){var c=a(e),n=!1;return c&&(n=0===e.filter((function(c){return!l(c)&&wo(e)})).length),c&&n}function Io(e){var c,n,o=i(e)&&!M(e),t=!1,a=["sameDay","nextDay","lastDay","nextWeek","lastWeek","sameElse"];for(c=0;c<a.length;c+=1)n=a[c],t=t||r(e,n);return o&&t}function Ho(e,c){var n=e.diff(c,"days",!0);return n<-6?"sameElse":n<-1?"lastWeek":n<0?"lastDay":n<1?"sameDay":n<2?"nextDay":n<7?"nextWeek":"sameElse"}function Yo(e,c){1===arguments.length&&(arguments[0]?Do(arguments[0])?(e=arguments[0],c=void 0):Io(arguments[0])&&(c=arguments[0],e=void 0):(e=void 0,c=void 0));var n=e||Kn(),t=bo(n,this).startOf("day"),a=o.calendarFormat(this,t)||"sameElse",i=c&&(B(c[a])?c[a].call(this,n):c[a]);return this.format(i||this.localeData().calendar(a,this,Kn(n)))}function Fo(){return new q(this)}function jo(e,c){var n=N(e)?e:Kn(e);return!(!this.isValid()||!n.isValid())&&("millisecond"===(c=oe(c)||"millisecond")?this.valueOf()>n.valueOf():n.valueOf()<this.clone().startOf(c).valueOf())}function Uo(e,c){var n=N(e)?e:Kn(e);return!(!this.isValid()||!n.isValid())&&("millisecond"===(c=oe(c)||"millisecond")?this.valueOf()<n.valueOf():this.clone().endOf(c).valueOf()<n.valueOf())}function Go(e,c,n,o){var t=N(e)?e:Kn(e),a=N(c)?c:Kn(c);return!!(this.isValid()&&t.isValid()&&a.isValid())&&("("===(o=o||"()")[0]?this.isAfter(t,n):!this.isBefore(t,n))&&(")"===o[1]?this.isBefore(a,n):!this.isAfter(a,n))}function Vo(e,c){var n,o=N(e)?e:Kn(e);return!(!this.isValid()||!o.isValid())&&("millisecond"===(c=oe(c)||"millisecond")?this.valueOf()===o.valueOf():(n=o.valueOf(),this.clone().startOf(c).valueOf()<=n&&n<=this.clone().endOf(c).valueOf()))}function Ko(e,c){return this.isSame(e,c)||this.isAfter(e,c)}function Qo(e,c){return this.isSame(e,c)||this.isBefore(e,c)}function Jo(e,c,n){var o,t,a;if(!this.isValid())return NaN;if(!(o=bo(e,this)).isValid())return NaN;switch(t=6e4*(o.utcOffset()-this.utcOffset()),c=oe(c)){case"year":a=Zo(this,o)/12;break;case"month":a=Zo(this,o);break;case"quarter":a=Zo(this,o)/3;break;case"second":a=(this-o)/1e3;break;case"minute":a=(this-o)/6e4;break;case"hour":a=(this-o)/36e5;break;case"day":a=(this-o-t)/864e5;break;case"week":a=(this-o-t)/6048e5;break;default:a=this-o}return n?a:se(a)}function Zo(e,c){if(e.date()<c.date())return-Zo(c,e);var n=12*(c.year()-e.year())+(c.month()-e.month()),o=e.clone().add(n,"months");return-(n+(c-o<0?(c-o)/(o-e.clone().add(n-1,"months")):(c-o)/(e.clone().add(n+1,"months")-o)))||0}function $o(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function et(e){if(!this.isValid())return null;var c=!0!==e,n=c?this.clone().utc():this;return n.year()<0||n.year()>9999?Y(n,c?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):B(Date.prototype.toISOString)?c?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",Y(n,"Z")):Y(n,c?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")}function ct(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e,c,n,o,t="moment",a="";return this.isLocal()||(t=0===this.utcOffset()?"moment.utc":"moment.parseZone",a="Z"),e="["+t+'("]',c=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",n="-MM-DD[T]HH:mm:ss.SSS",o=a+'[")]',this.format(e+c+n+o)}function nt(e){e||(e=this.isUtc()?o.defaultFormatUtc:o.defaultFormat);var c=Y(this,e);return this.localeData().postformat(c)}function ot(e,c){return this.isValid()&&(N(e)&&e.isValid()||Kn(e).isValid())?Bo({to:this,from:e}).locale(this.locale()).humanize(!c):this.localeData().invalidDate()}function tt(e){return this.from(Kn(),e)}function at(e,c){return this.isValid()&&(N(e)&&e.isValid()||Kn(e).isValid())?Bo({from:this,to:e}).locale(this.locale()).humanize(!c):this.localeData().invalidDate()}function it(e){return this.to(Kn(),e)}function rt(e){var c;return void 0===e?this._locale._abbr:(null!=(c=hn(e))&&(this._locale=c),this)}o.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",o.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var Mt=W("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",(function(e){return void 0===e?this.localeData():this.locale(e)}));function st(){return this._locale}var lt=1e3,ut=60*lt,pt=60*ut,dt=3506328*pt;function bt(e,c){return(e%c+c)%c}function At(e,c,n){return e<100&&e>=0?new Date(e+400,c,n)-dt:new Date(e,c,n).valueOf()}function ft(e,c,n){return e<100&&e>=0?Date.UTC(e+400,c,n)-dt:Date.UTC(e,c,n)}function zt(e){var c,n;if(void 0===(e=oe(e))||"millisecond"===e||!this.isValid())return this;switch(n=this._isUTC?ft:At,e){case"year":c=n(this.year(),0,1);break;case"quarter":c=n(this.year(),this.month()-this.month()%3,1);break;case"month":c=n(this.year(),this.month(),1);break;case"week":c=n(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":c=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":c=n(this.year(),this.month(),this.date());break;case"hour":c=this._d.valueOf(),c-=bt(c+(this._isUTC?0:this.utcOffset()*ut),pt);break;case"minute":c=this._d.valueOf(),c-=bt(c,ut);break;case"second":c=this._d.valueOf(),c-=bt(c,lt)}return this._d.setTime(c),o.updateOffset(this,!0),this}function ht(e){var c,n;if(void 0===(e=oe(e))||"millisecond"===e||!this.isValid())return this;switch(n=this._isUTC?ft:At,e){case"year":c=n(this.year()+1,0,1)-1;break;case"quarter":c=n(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":c=n(this.year(),this.month()+1,1)-1;break;case"week":c=n(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":c=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":c=n(this.year(),this.month(),this.date()+1)-1;break;case"hour":c=this._d.valueOf(),c+=pt-bt(c+(this._isUTC?0:this.utcOffset()*ut),pt)-1;break;case"minute":c=this._d.valueOf(),c+=ut-bt(c,ut)-1;break;case"second":c=this._d.valueOf(),c+=lt-bt(c,lt)-1}return this._d.setTime(c),o.updateOffset(this,!0),this}function Ot(){return this._d.valueOf()-6e4*(this._offset||0)}function Lt(){return Math.floor(this.valueOf()/1e3)}function mt(){return new Date(this.valueOf())}function qt(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]}function Nt(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}}function gt(){return this.isValid()?this.toISOString():null}function Wt(){return z(this)}function _t(){return d({},f(this))}function Tt(){return f(this).overflow}function Xt(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function Bt(e,c){var n,t,a,i=this._eras||hn("en")._eras;for(n=0,t=i.length;n<t;++n)switch("string"==typeof i[n].since&&(a=o(i[n].since).startOf("day"),i[n].since=a.valueOf()),typeof i[n].until){case"undefined":i[n].until=1/0;break;case"string":a=o(i[n].until).startOf("day").valueOf(),i[n].until=a.valueOf()}return i}function yt(e,c,n){var o,t,a,i,r,M=this.eras();for(e=e.toUpperCase(),o=0,t=M.length;o<t;++o)if(a=M[o].name.toUpperCase(),i=M[o].abbr.toUpperCase(),r=M[o].narrow.toUpperCase(),n)switch(c){case"N":case"NN":case"NNN":if(i===e)return M[o];break;case"NNNN":if(a===e)return M[o];break;case"NNNNN":if(r===e)return M[o]}else if([a,i,r].indexOf(e)>=0)return M[o]}function St(e,c){var n=e.since<=e.until?1:-1;return void 0===c?o(e.since).year():o(e.since).year()+(c-e.offset)*n}function vt(){var e,c,n,o=this.localeData().eras();for(e=0,c=o.length;e<c;++e){if(n=this.clone().startOf("day").valueOf(),o[e].since<=n&&n<=o[e].until)return o[e].name;if(o[e].until<=n&&n<=o[e].since)return o[e].name}return""}function kt(){var e,c,n,o=this.localeData().eras();for(e=0,c=o.length;e<c;++e){if(n=this.clone().startOf("day").valueOf(),o[e].since<=n&&n<=o[e].until)return o[e].narrow;if(o[e].until<=n&&n<=o[e].since)return o[e].narrow}return""}function Ct(){var e,c,n,o=this.localeData().eras();for(e=0,c=o.length;e<c;++e){if(n=this.clone().startOf("day").valueOf(),o[e].since<=n&&n<=o[e].until)return o[e].abbr;if(o[e].until<=n&&n<=o[e].since)return o[e].abbr}return""}function Rt(){var e,c,n,t,a=this.localeData().eras();for(e=0,c=a.length;e<c;++e)if(n=a[e].since<=a[e].until?1:-1,t=this.clone().startOf("day").valueOf(),a[e].since<=t&&t<=a[e].until||a[e].until<=t&&t<=a[e].since)return(this.year()-o(a[e].since).year())*n+a[e].offset;return this.year()}function Et(e){return r(this,"_erasNameRegex")||Yt.call(this),e?this._erasNameRegex:this._erasRegex}function wt(e){return r(this,"_erasAbbrRegex")||Yt.call(this),e?this._erasAbbrRegex:this._erasRegex}function Dt(e){return r(this,"_erasNarrowRegex")||Yt.call(this),e?this._erasNarrowRegex:this._erasRegex}function Pt(e,c){return c.erasAbbrRegex(e)}function xt(e,c){return c.erasNameRegex(e)}function It(e,c){return c.erasNarrowRegex(e)}function Ht(e,c){return c._eraYearOrdinalRegex||Be}function Yt(){var e,c,n=[],o=[],t=[],a=[],i=this.eras();for(e=0,c=i.length;e<c;++e)o.push(De(i[e].name)),n.push(De(i[e].abbr)),t.push(De(i[e].narrow)),a.push(De(i[e].name)),a.push(De(i[e].abbr)),a.push(De(i[e].narrow));this._erasRegex=new RegExp("^("+a.join("|")+")","i"),this._erasNameRegex=new RegExp("^("+o.join("|")+")","i"),this._erasAbbrRegex=new RegExp("^("+n.join("|")+")","i"),this._erasNarrowRegex=new RegExp("^("+t.join("|")+")","i")}function Ft(e,c){x(0,[e,e.length],0,c)}function jt(e){return Jt.call(this,e,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function Ut(e){return Jt.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)}function Gt(){return gc(this.year(),1,4)}function Vt(){return gc(this.isoWeekYear(),1,4)}function Kt(){var e=this.localeData()._week;return gc(this.year(),e.dow,e.doy)}function Qt(){var e=this.localeData()._week;return gc(this.weekYear(),e.dow,e.doy)}function Jt(e,c,n,o,t){var a;return null==e?Nc(this,o,t).year:(c>(a=gc(e,o,t))&&(c=a),Zt.call(this,e,c,n,o,t))}function Zt(e,c,n,o,t){var a=qc(e,c,n,o,t),i=Lc(a.year,0,a.dayOfYear);return this.year(i.getUTCFullYear()),this.month(i.getUTCMonth()),this.date(i.getUTCDate()),this}function $t(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)}x("N",0,0,"eraAbbr"),x("NN",0,0,"eraAbbr"),x("NNN",0,0,"eraAbbr"),x("NNNN",0,0,"eraName"),x("NNNNN",0,0,"eraNarrow"),x("y",["y",1],"yo","eraYear"),x("y",["yy",2],0,"eraYear"),x("y",["yyy",3],0,"eraYear"),x("y",["yyyy",4],0,"eraYear"),Re("N",Pt),Re("NN",Pt),Re("NNN",Pt),Re("NNNN",xt),Re("NNNNN",It),xe(["N","NN","NNN","NNNN","NNNNN"],(function(e,c,n,o){var t=n._locale.erasParse(e,o,n._strict);t?f(n).era=t:f(n).invalidEra=e})),Re("y",Be),Re("yy",Be),Re("yyy",Be),Re("yyyy",Be),Re("yo",Ht),xe(["y","yy","yyy","yyyy"],Fe),xe(["yo"],(function(e,c,n,o){var t;n._locale._eraYearOrdinalRegex&&(t=e.match(n._locale._eraYearOrdinalRegex)),n._locale.eraYearOrdinalParse?c[Fe]=n._locale.eraYearOrdinalParse(e,t):c[Fe]=parseInt(e,10)})),x(0,["gg",2],0,(function(){return this.weekYear()%100})),x(0,["GG",2],0,(function(){return this.isoWeekYear()%100})),Ft("gggg","weekYear"),Ft("ggggg","weekYear"),Ft("GGGG","isoWeekYear"),Ft("GGGGG","isoWeekYear"),ne("weekYear","gg"),ne("isoWeekYear","GG"),ie("weekYear",1),ie("isoWeekYear",1),Re("G",ye),Re("g",ye),Re("GG",qe,he),Re("gg",qe,he),Re("GGGG",_e,Le),Re("gggg",_e,Le),Re("GGGGG",Te,me),Re("ggggg",Te,me),Ie(["gggg","ggggg","GGGG","GGGGG"],(function(e,c,n,o){c[o.substr(0,2)]=le(e)})),Ie(["gg","GG"],(function(e,c,n,t){c[t]=o.parseTwoDigitYear(e)})),x("Q",0,"Qo","quarter"),ne("quarter","Q"),ie("quarter",7),Re("Q",ze),xe("Q",(function(e,c){c[je]=3*(le(e)-1)})),x("D",["DD",2],"Do","date"),ne("date","D"),ie("date",9),Re("D",qe),Re("DD",qe,he),Re("Do",(function(e,c){return e?c._dayOfMonthOrdinalParse||c._ordinalParse:c._dayOfMonthOrdinalParseLenient})),xe(["D","DD"],Ue),xe("Do",(function(e,c){c[Ue]=le(e.match(qe)[0])}));var ea=ue("Date",!0);function ca(e){var c=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?c:this.add(e-c,"d")}x("DDD",["DDDD",3],"DDDo","dayOfYear"),ne("dayOfYear","DDD"),ie("dayOfYear",4),Re("DDD",We),Re("DDDD",Oe),xe(["DDD","DDDD"],(function(e,c,n){n._dayOfYear=le(e)})),x("m",["mm",2],0,"minute"),ne("minute","m"),ie("minute",14),Re("m",qe),Re("mm",qe,he),xe(["m","mm"],Ve);var na=ue("Minutes",!1);x("s",["ss",2],0,"second"),ne("second","s"),ie("second",15),Re("s",qe),Re("ss",qe,he),xe(["s","ss"],Ke);var oa,ta,aa=ue("Seconds",!1);for(x("S",0,0,(function(){return~~(this.millisecond()/100)})),x(0,["SS",2],0,(function(){return~~(this.millisecond()/10)})),x(0,["SSS",3],0,"millisecond"),x(0,["SSSS",4],0,(function(){return 10*this.millisecond()})),x(0,["SSSSS",5],0,(function(){return 100*this.millisecond()})),x(0,["SSSSSS",6],0,(function(){return 1e3*this.millisecond()})),x(0,["SSSSSSS",7],0,(function(){return 1e4*this.millisecond()})),x(0,["SSSSSSSS",8],0,(function(){return 1e5*this.millisecond()})),x(0,["SSSSSSSSS",9],0,(function(){return 1e6*this.millisecond()})),ne("millisecond","ms"),ie("millisecond",16),Re("S",We,ze),Re("SS",We,he),Re("SSS",We,Oe),oa="SSSS";oa.length<=9;oa+="S")Re(oa,Be);function ia(e,c){c[Qe]=le(1e3*("0."+e))}for(oa="S";oa.length<=9;oa+="S")xe(oa,ia);function ra(){return this._isUTC?"UTC":""}function Ma(){return this._isUTC?"Coordinated Universal Time":""}ta=ue("Milliseconds",!1),x("z",0,0,"zoneAbbr"),x("zz",0,0,"zoneName");var sa=q.prototype;function la(e){return Kn(1e3*e)}function ua(){return Kn.apply(null,arguments).parseZone()}function pa(e){return e}sa.add=Ro,sa.calendar=Yo,sa.clone=Fo,sa.diff=Jo,sa.endOf=ht,sa.format=nt,sa.from=ot,sa.fromNow=tt,sa.to=at,sa.toNow=it,sa.get=be,sa.invalidAt=Tt,sa.isAfter=jo,sa.isBefore=Uo,sa.isBetween=Go,sa.isSame=Vo,sa.isSameOrAfter=Ko,sa.isSameOrBefore=Qo,sa.isValid=Wt,sa.lang=Mt,sa.locale=rt,sa.localeData=st,sa.max=Jn,sa.min=Qn,sa.parsingFlags=_t,sa.set=Ae,sa.startOf=zt,sa.subtract=Eo,sa.toArray=qt,sa.toObject=Nt,sa.toDate=mt,sa.toISOString=et,sa.inspect=ct,"undefined"!=typeof Symbol&&null!=Symbol.for&&(sa[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),sa.toJSON=gt,sa.toString=$o,sa.unix=Lt,sa.valueOf=Ot,sa.creationData=Xt,sa.eraName=vt,sa.eraNarrow=kt,sa.eraAbbr=Ct,sa.eraYear=Rt,sa.year=zc,sa.isLeapYear=hc,sa.weekYear=jt,sa.isoWeekYear=Ut,sa.quarter=sa.quarters=$t,sa.month=uc,sa.daysInMonth=pc,sa.week=sa.weeks=Bc,sa.isoWeek=sa.isoWeeks=yc,sa.weeksInYear=Kt,sa.weeksInWeekYear=Qt,sa.isoWeeksInYear=Gt,sa.isoWeeksInISOWeekYear=Vt,sa.date=ea,sa.day=sa.days=jc,sa.weekday=Uc,sa.isoWeekday=Gc,sa.dayOfYear=ca,sa.hour=sa.hours=tn,sa.minute=sa.minutes=na,sa.second=sa.seconds=aa,sa.millisecond=sa.milliseconds=ta,sa.utcOffset=fo,sa.utc=ho,sa.local=Oo,sa.parseZone=Lo,sa.hasAlignedHourOffset=mo,sa.isDST=qo,sa.isLocal=go,sa.isUtcOffset=Wo,sa.isUtc=_o,sa.isUTC=_o,sa.zoneAbbr=ra,sa.zoneName=Ma,sa.dates=W("dates accessor is deprecated. Use date instead.",ea),sa.months=W("months accessor is deprecated. Use month instead",uc),sa.years=W("years accessor is deprecated. Use year instead",zc),sa.zone=W("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",zo),sa.isDSTShifted=W("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",No);var da=v.prototype;function ba(e,c,n,o){var t=hn(),a=b().set(o,c);return t[n](a,e)}function Aa(e,c,n){if(l(e)&&(c=e,e=void 0),e=e||"",null!=c)return ba(e,c,n,"month");var o,t=[];for(o=0;o<12;o++)t[o]=ba(e,o,n,"month");return t}function fa(e,c,n,o){"boolean"==typeof e?(l(c)&&(n=c,c=void 0),c=c||""):(n=c=e,e=!1,l(c)&&(n=c,c=void 0),c=c||"");var t,a=hn(),i=e?a._week.dow:0,r=[];if(null!=n)return ba(c,(n+i)%7,o,"day");for(t=0;t<7;t++)r[t]=ba(c,(t+i)%7,o,"day");return r}function za(e,c){return Aa(e,c,"months")}function ha(e,c){return Aa(e,c,"monthsShort")}function Oa(e,c,n){return fa(e,c,n,"weekdays")}function La(e,c,n){return fa(e,c,n,"weekdaysShort")}function ma(e,c,n){return fa(e,c,n,"weekdaysMin")}da.calendar=C,da.longDateFormat=U,da.invalidDate=V,da.ordinal=J,da.preparse=pa,da.postformat=pa,da.relativeTime=$,da.pastFuture=ee,da.set=y,da.eras=Bt,da.erasParse=yt,da.erasConvertYear=St,da.erasAbbrRegex=wt,da.erasNameRegex=Et,da.erasNarrowRegex=Dt,da.months=ic,da.monthsShort=rc,da.monthsParse=sc,da.monthsRegex=bc,da.monthsShortRegex=dc,da.week=Wc,da.firstDayOfYear=Xc,da.firstDayOfWeek=Tc,da.weekdays=xc,da.weekdaysMin=Hc,da.weekdaysShort=Ic,da.weekdaysParse=Fc,da.weekdaysRegex=Vc,da.weekdaysShortRegex=Kc,da.weekdaysMinRegex=Qc,da.isPM=nn,da.meridiem=an,An("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var c=e%10;return e+(1===le(e%100/10)?"th":1===c?"st":2===c?"nd":3===c?"rd":"th")}}),o.lang=W("moment.lang is deprecated. Use moment.locale instead.",An),o.langData=W("moment.langData is deprecated. Use moment.localeData instead.",hn);var qa=Math.abs;function Na(){var e=this._data;return this._milliseconds=qa(this._milliseconds),this._days=qa(this._days),this._months=qa(this._months),e.milliseconds=qa(e.milliseconds),e.seconds=qa(e.seconds),e.minutes=qa(e.minutes),e.hours=qa(e.hours),e.months=qa(e.months),e.years=qa(e.years),this}function ga(e,c,n,o){var t=Bo(c,n);return e._milliseconds+=o*t._milliseconds,e._days+=o*t._days,e._months+=o*t._months,e._bubble()}function Wa(e,c){return ga(this,e,c,1)}function _a(e,c){return ga(this,e,c,-1)}function Ta(e){return e<0?Math.floor(e):Math.ceil(e)}function Xa(){var e,c,n,o,t,a=this._milliseconds,i=this._days,r=this._months,M=this._data;return a>=0&&i>=0&&r>=0||a<=0&&i<=0&&r<=0||(a+=864e5*Ta(ya(r)+i),i=0,r=0),M.milliseconds=a%1e3,e=se(a/1e3),M.seconds=e%60,c=se(e/60),M.minutes=c%60,n=se(c/60),M.hours=n%24,i+=se(n/24),r+=t=se(Ba(i)),i-=Ta(ya(t)),o=se(r/12),r%=12,M.days=i,M.months=r,M.years=o,this}function Ba(e){return 4800*e/146097}function ya(e){return 146097*e/4800}function Sa(e){if(!this.isValid())return NaN;var c,n,o=this._milliseconds;if("month"===(e=oe(e))||"quarter"===e||"year"===e)switch(c=this._days+o/864e5,n=this._months+Ba(c),e){case"month":return n;case"quarter":return n/3;case"year":return n/12}else switch(c=this._days+Math.round(ya(this._months)),e){case"week":return c/7+o/6048e5;case"day":return c+o/864e5;case"hour":return 24*c+o/36e5;case"minute":return 1440*c+o/6e4;case"second":return 86400*c+o/1e3;case"millisecond":return Math.floor(864e5*c)+o;default:throw new Error("Unknown unit "+e)}}function va(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*le(this._months/12):NaN}function ka(e){return function(){return this.as(e)}}var Ca=ka("ms"),Ra=ka("s"),Ea=ka("m"),wa=ka("h"),Da=ka("d"),Pa=ka("w"),xa=ka("M"),Ia=ka("Q"),Ha=ka("y");function Ya(){return Bo(this)}function Fa(e){return e=oe(e),this.isValid()?this[e+"s"]():NaN}function ja(e){return function(){return this.isValid()?this._data[e]:NaN}}var Ua=ja("milliseconds"),Ga=ja("seconds"),Va=ja("minutes"),Ka=ja("hours"),Qa=ja("days"),Ja=ja("months"),Za=ja("years");function $a(){return se(this.days()/7)}var ei=Math.round,ci={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function ni(e,c,n,o,t){return t.relativeTime(c||1,!!n,e,o)}function oi(e,c,n,o){var t=Bo(e).abs(),a=ei(t.as("s")),i=ei(t.as("m")),r=ei(t.as("h")),M=ei(t.as("d")),s=ei(t.as("M")),l=ei(t.as("w")),u=ei(t.as("y")),p=a<=n.ss&&["s",a]||a<n.s&&["ss",a]||i<=1&&["m"]||i<n.m&&["mm",i]||r<=1&&["h"]||r<n.h&&["hh",r]||M<=1&&["d"]||M<n.d&&["dd",M];return null!=n.w&&(p=p||l<=1&&["w"]||l<n.w&&["ww",l]),(p=p||s<=1&&["M"]||s<n.M&&["MM",s]||u<=1&&["y"]||["yy",u])[2]=c,p[3]=+e>0,p[4]=o,ni.apply(null,p)}function ti(e){return void 0===e?ei:"function"==typeof e&&(ei=e,!0)}function ai(e,c){return void 0!==ci[e]&&(void 0===c?ci[e]:(ci[e]=c,"s"===e&&(ci.ss=c-1),!0))}function ii(e,c){if(!this.isValid())return this.localeData().invalidDate();var n,o,t=!1,a=ci;return"object"==typeof e&&(c=e,e=!1),"boolean"==typeof e&&(t=e),"object"==typeof c&&(a=Object.assign({},ci,c),null!=c.s&&null==c.ss&&(a.ss=c.s-1)),o=oi(this,!t,a,n=this.localeData()),t&&(o=n.pastFuture(+this,o)),n.postformat(o)}var ri=Math.abs;function Mi(e){return(e>0)-(e<0)||+e}function si(){if(!this.isValid())return this.localeData().invalidDate();var e,c,n,o,t,a,i,r,M=ri(this._milliseconds)/1e3,s=ri(this._days),l=ri(this._months),u=this.asSeconds();return u?(e=se(M/60),c=se(e/60),M%=60,e%=60,n=se(l/12),l%=12,o=M?M.toFixed(3).replace(/\.?0+$/,""):"",t=u<0?"-":"",a=Mi(this._months)!==Mi(u)?"-":"",i=Mi(this._days)!==Mi(u)?"-":"",r=Mi(this._milliseconds)!==Mi(u)?"-":"",t+"P"+(n?a+n+"Y":"")+(l?a+l+"M":"")+(s?i+s+"D":"")+(c||e||M?"T":"")+(c?r+c+"H":"")+(e?r+e+"M":"")+(M?r+o+"S":"")):"P0D"}var li=io.prototype;return li.isValid=to,li.abs=Na,li.add=Wa,li.subtract=_a,li.as=Sa,li.asMilliseconds=Ca,li.asSeconds=Ra,li.asMinutes=Ea,li.asHours=wa,li.asDays=Da,li.asWeeks=Pa,li.asMonths=xa,li.asQuarters=Ia,li.asYears=Ha,li.valueOf=va,li._bubble=Xa,li.clone=Ya,li.get=Fa,li.milliseconds=Ua,li.seconds=Ga,li.minutes=Va,li.hours=Ka,li.days=Qa,li.weeks=$a,li.months=Ja,li.years=Za,li.humanize=ii,li.toISOString=si,li.toString=si,li.toJSON=si,li.locale=rt,li.localeData=st,li.toIsoString=W("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",si),li.lang=Mt,x("X",0,0,"unix"),x("x",0,0,"valueOf"),Re("x",ye),Re("X",ke),xe("X",(function(e,c,n){n._d=new Date(1e3*parseFloat(e))})),xe("x",(function(e,c,n){n._d=new Date(le(e))})),
|
|
1
|
+
!function(e,c){"object"==typeof exports&&"undefined"!=typeof module?c(exports,require("prop-types"),require("react"),require("i18next"),require("classnames"),require("react-autosuggest"),require("lodash/debounce"),require("lodash/flatten"),require("lodash/take"),require("lodash/isString"),require("lodash/orderBy"),require("lodash/uniqWith"),require("lodash/isEqual"),require("lodash/memoize"),require("lodash/escapeRegExp"),require("lodash/cloneDeep"),require("lodash/get"),require("@digitransit-component/digitransit-component-suggestion-item"),require("@digitransit-component/digitransit-component-icon"),require("lodash/isEmpty"),require("react-modal"),require("@digitransit-component/digitransit-component-dialog-modal")):"function"==typeof define&&define.amd?define(["exports","prop-types","react","i18next","classnames","react-autosuggest","lodash/debounce","lodash/flatten","lodash/take","lodash/isString","lodash/orderBy","lodash/uniqWith","lodash/isEqual","lodash/memoize","lodash/escapeRegExp","lodash/cloneDeep","lodash/get","@digitransit-component/digitransit-component-suggestion-item","@digitransit-component/digitransit-component-icon","lodash/isEmpty","react-modal","@digitransit-component/digitransit-component-dialog-modal"],c):c((e="undefined"!=typeof globalThis?globalThis:e||self).DTAutosuggest={},e.PropTypes,e.React,e.i18next,e.cx,e.Autosuggest,e.debounce,e.flatten,e.take,e.isString,e.orderBy,e.uniqWith,e.isEqual,e.memoize,e.escapeRegExp,e.cloneDeep,e.get,e.SuggestionItem,e.Icon,e.isEmpty,e.ReactModal,e.DialogModal)}(this,(function(e,c,n,o,t,a,i,r,M,s,l,u,p,d,b,A,f,z,h,O,L,m){"use strict";function q(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var N=q(c),g=q(n),W=q(o),_=q(t),T=q(a),X=q(i),B=q(r),y=q(M),S=q(s),v=q(l),k=q(u),C=q(p),R=q(d),E=q(b),w=q(A),D=q(f),P=q(z),x=q(h),I=q(O),H=q(L),Y=q(m);function F(e){return F="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},F(e)}function j(){return j=Object.assign||function(e){for(var c=1;c<arguments.length;c++){var n=arguments[c];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},j.apply(this,arguments)}function U(e,c){(null==c||c>e.length)&&(c=e.length);for(var n=0,o=new Array(c);n<c;n++)o[n]=e[n];return o}function G(e,c){if(e){if("string"==typeof e)return U(e,c);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?U(e,c):void 0}}function V(e){return function(e){if(Array.isArray(e))return U(e)}(e)||function(e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}(e)||G(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function K(e,c){if(!(e instanceof c))throw new TypeError("Cannot call a class as a function")}function Q(e,c){for(var n=0;n<c.length;n++){var o=c[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}function J(e,c,n){return c&&Q(e.prototype,c),n&&Q(e,n),e}function Z(e,c){return Z=Object.setPrototypeOf||function(e,c){return e.__proto__=c,e},Z(e,c)}function $(e,c){if("function"!=typeof c&&null!==c)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(c&&c.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),c&&Z(e,c)}function ee(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function ce(e,c){return!c||"object"!==F(c)&&"function"!=typeof c?ee(e):c}function ne(e){return ne=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},ne(e)}function oe(e,c){return function(e){if(Array.isArray(e))return e}(e)||function(e,c){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e)){var n=[],o=!0,t=!1,a=void 0;try{for(var i,r=e[Symbol.iterator]();!(o=(i=r.next()).done)&&(n.push(i.value),!c||n.length!==c);o=!0);}catch(e){t=!0,a=e}finally{try{o||null==r.return||r.return()}finally{if(t)throw a}}return n}}(e,c)||G(e,c)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function te(e,c){return e&&c&&e===c}function ae(e,c){var n=e.properties,o=c.properties;if("FutureRoute"===e.type&&"FutureRoute"===c.type){var t=n.origin,a=n.destination,i=o.origin,r=o.destination;return"".concat(t.name,"//").concat(t.locality,"//").concat(a.name,"//").concat(a.locality)==="".concat(i.name,"//").concat(i.locality,"//").concat(r.name,"//").concat(r.locality)}if("FutureRoute"===e.type||"FutureRoute"===c.type)return!1;if(("bikeRentalStation"===n.layer||"favouriteBikeRentalStation"===n.layer)&&("bikeRentalStation"===o.layer||"favouriteBikeRentalStation"===o.layer)||"bikestation"===n.layer&&"bikestation"===o.layer)return n.labelId===o.labelId;if(n.gtfsId&&o.gtfsId)return n.gtfsId===o.gtfsId;if(n.gtfsId&&o.gid&&o.gid.includes(n.gtfsId))return!0;if(o.gtfsId&&n.gid&&n.gid.includes(o.gtfsId))return!0;if(("stop"===n.layer||"station"===n.layer)&&("stop"===o.layer||"station"===o.layer)&&n.gid&&o.gid)return n.gid===o.gid;var M=e&&e.geometry?e.geometry.coordinates:void 0,s=c&&c.geometry?c.geometry.coordinates:void 0;return!!(M&&s&&Math.abs(M[0]-s[0])<1e-6&&Math.abs(M[1]-s[1])<1e-6&&(te(n.name,o.name)||te(n.label,o.label)||te(n.address,o.address)||te(n.address,o.label)||te(n.label,o.address)))}var ie=function(e){return S.default(e)?e.toLowerCase():""},re={Address:"address",Back:"back",CurrentPosition:"currentPosition",FavouriteStop:"favouriteStop",FavouriteStation:"favouriteStation",FavouritePlace:"favouritePlace",FavouriteRoute:"favouriteRoute",FutureRoute:"futureRoute",Station:"station",SelectFromMap:"selectFromMap",SelectFromOwnLocations:"ownLocations",Stop:"stop",Street:"street",Venue:"venue",BikeRentalStation:"bikestation",CarPark:"carpark",BikePark:"bikepark"},Me=function(e,c){if(!S.default(e)||0===e.length)return 0;return["name","label","address","shortName"].map((function(e){return c[e]})).filter((function(e){return S.default(e)&&e.length>0})).map((function(c){var n=ie(c);return 0===n.indexOf(e)?.5+e.length/n.length:.5*e.length/(e.length+1)})).reduce((function(e,c){return c>e?c:e}),0)},se=function(e,c){switch(e){case re.CurrentPosition:return 1;case re.Back:return.9;case re.SelectFromMap:return.8;case re.SelectFromOwnLocations:return.79;case re.FavouriteStation:case re.FavouritePlace:case re.FavouriteStop:case re.FavouriteRoute:return.45;case re.FutureRoute:return.44;case re.Station:return S.default(c)&&0===c.indexOf("gtfs")?.43:.42;case re.FavouriteBikeRentalStation:default:return.41;case re.CarPark:case re.BikePark:case re.BikeRentalStation:return.38;case re.Stop:return.36}},le=function(e,c){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";if(!Array.isArray(c))return c;var o=function(c){return S.default(c)&&e&&e.test(c)},t=ie(n),a=o(t),i=v.default(c,[function(e){return a&&o(ie(e.properties.shortName))&&0===ie(e.properties.shortName).indexOf(t)?1:0},function(e){var c=e.properties,n=c.confidence,o=c.layer,a=c.source;if(0===t.length)return se(o,a);if(!n)return se(o,a)+Me(t,e.properties);switch(o){case re.Station:return n+(0===a.indexOf("gtfs")?.02:.01);case re.Stop:case re.CarPark:case re.BikePark:return n-.05;case re.BikeRentalStation:return n-.04;default:return n}}],["desc","desc"]);return k.default(i,ae)},ue=function(e,c){return null!=c&&-1!==e.lastIndexOf(c)?e.substring(0,e.lastIndexOf(c)-1):e},pe=function(e){return e.localadmin||e.locality||e.address&&e.address.lastIndexOf(",")<e.address.length-2&&e.address.substring(e.address.lastIndexOf(",")+2)||""},de=function(e){var c=e.id,n=e.code;return n||(void 0!==c&&void 0!==c.indexOf&&-1!==c.indexOf("#")?c.substring(c.indexOf("#")+1):void 0)},be=function(e,c){return[e||c&&c.split(",")[0],"string"==typeof c?c.replace(new RegExp("".concat(E.default(e),"([ ,]|$)+")),""):""]},Ae=R.default((function(e){var c=arguments.length>1&&void 0!==arguments[1]&&arguments[1];switch(e.layer){case"currentPosition":return[e.labelId,e.address];case"selectFromMap":case"ownLocations":case"back":return[e.labelId];case"favouritePlace":return be(e.name,e.address);case"favouriteBikeRentalStation":case"bikeRentalStation":return[e.name];case"favouriteRoute":case"route-BUS":case"route-TRAM":case"route-RAIL":case"route-SUBWAY":case"route-FERRY":case"route-FUNICULAR":case"route-AIRPLANE":return!c&&e.shortName?[e.gtfsId,e.mode.toLowerCase(),e.longName]:[e.shortName,e.longName,e.agency?e.agency.name:void 0];case"venue":case"address":case"street":return[e.name,e.label.replace(new RegExp("".concat(E.default(e.name),"(,)?( )?")),"")];case"favouriteStop":case"stop":return c?[e.name||e.label||e.address&&e.address.split(",")[0],pe(e)]:[e.name,e.id,de(e),pe(e)];default:return[e.name||e.label||e.address&&e.address.split(",")[0],pe(e)]}}),(function(e,c){var n=w.default(e);return n.plain=c,n}));function fe(e){return k.default(e,(function(e,c){var n=C.default(Ae(e.properties),Ae(c.properties))&&e.properties.layer===c.properties.layer;return(!n||"FutureRoute"!==e.type&&"FutureRoute"!==c.type)&&n}))}function ze(e,c,n){if("string"==typeof c&&c.length>0){var o=c.toLowerCase().trim(),t=o.includes(" ")||o.includes(",");return e.filter((function(e){var c=[];n.forEach((function(n){var o=D.default(e,n);t||"properties.label"!==n&&"address"!==n||!o||((o=o.split(",")).length>2?o.splice(o.length-2,2):o.length>1&&o.splice(o.length-1,1),o=o.join(",")),o&&(c=t?c.concat(o.toLowerCase()):c.concat(o.toLowerCase().replace(/,/g," ").split(" ")))}));for(var a=0;a<c.length;a++)if(0===c[a].indexOf(o))return!0;return!1}))}return e}function he(e,c){return e?Object.keys(e).map((function(n){var o=c||n,t=e[n];return"object"===F(t)?he(t,o):"".concat(encodeURIComponent(o),"=").concat(encodeURIComponent(t))})).join("&"):""}var Oe=require("axios").default;function Le(e,c){return Oe.get(encodeURI(e)+(c?(-1===e.search(/\?/)?"?":"&")+he(c):""),{timeout:1e4,method:"GET",headers:{Accept:"application/json"}}).then((function(e){return e.data}))}function me(e,c,n,o,t,a,i,r){var M=e?e.trim():null;if(null==M||M.length<1||i&&!i.test(M))return Promise.resolve([]);var s=a||"https://api.digitransit.fi/geocoding/v1/search",l=j({text:M},c,o,{lang:n});(t&&(l=j({},l,{sources:t})),r)&&(l=j({},l,{layers:r.toString()}));return Le(s,l).then((function(e){return e.features}))}function qe(e,c){if(!e||e.length<1)return Promise.resolve([]);var n="",o=e.map((function(e){var c="stop"===e.type?"stop":"station",o="gtfs".concat(e.gtfsId.split(":")[0].toLowerCase(),":").concat(c,":GTFS:").concat(e.gtfsId);return e.code&&(o+="#".concat(e.code)),n+="".concat(o,","),j({},e,{gid:o})})).reduce((function(e,c){return e[c.gid]=c,e}),{});return Le(c,{ids:n.slice(0,-1)}).then((function(e){return e.features.map((function(e){var c,n,t;return{type:"FavouriteStop",properties:{addendum:e.properties.addendum,gid:o[e.properties.gid].gid,code:o[e.properties.gid].code,gtfsId:o[e.properties.gid].gtfsId,lastUpdated:o[e.properties.gid].lastUpdated,favouriteId:o[e.properties.gid].favouriteId,address:e.properties.label,layer:(c=e.properties,n=c.layer,t=c.type,"stop"===n||"favouriteStop"===n||"stop"===t||"favouriteStop"===t?"favouriteStop":"favouriteStation")},geometry:e.geometry}}))}))}function Ne(e,c,n){var o=ze(e,c,["properties.name","properties.label","properties.address","properties.shortName","properties.longName"]);return n&&(o=o.filter((function(e){return!n.includes(e.properties.layer)}))),Promise.resolve(y.default(o,10).map((function(e){var c=j({},e,{type:"OldSearch",timetableClicked:!1,arrowClicked:!1});return delete c.properties.confidence,c})))}var ge=["route-TRAM","route-BUS","route-RAIL","route-FERRY","route-SUBWAY","route-AIRPLANE"],We=["favouritePlace","venue","address","street"],_e=["carpark","bikepark"];var Te=X.default((function(e,c,n,o,t,a,i,r,M,s){var l=i.input,u=o.getPositions,p=o.getFavouriteLocations,d=o.getOldSearches,b=o.getFavouriteStops,A=o.parkingAreaSources,f=o.getLanguage,z=o.getStopAndStationsQuery,h=o.getFavouriteBikeRentalStationsQuery,O=o.getFavouriteBikeRentalStations,L=o.getFavouriteRoutesQuery,m=o.getFavouriteRoutes,q=o.getRoutesQuery,N=o.context,g=o.isPeliasLocationAware,W=o.minimalRegexp,_=o.lineRegexp,T=o.URL_PELIAS,X=o.URL_PELIAS_PLACE,S=o.feedIDs,v=o.geocodingSearchParams,k=o.geocodingSources,C=o.getFutureRoutes,R=o.cityBikeNetworks,E=!e||0===e.length,w=!c||0===c.length,D=u(N),P=[],x={type:"all",term:l,results:[]},I=f(N),H=g&&null!=s&&s.lat&&null!=s&&s.lon?{"focus.point.lat":s.lat.toFixed(3),"focus.point.lon":s.lon.toFixed(3)}:{},Y=n?n.split("-")[1]:void 0;if(e.includes("CurrentPosition")&&"geolocation-not-supported"!==D.status&&P.push(function(e,c){return"string"!=typeof e||0===e.length?Promise.resolve([{type:"CurrentLocation",address:c.address,lat:c.lat,lon:c.lon,properties:{labelId:"use-own-position",layer:"currentPosition",address:c.address,lat:c.lat,lon:c.lon},geometry:{type:"Point",coordinates:[c.lon,c.lat]}}]):Promise.resolve([])}(l,D)),(E||e.includes("MapPosition"))&&P.push(function(e){return"string"!=typeof e||0===e.length?Promise.resolve([{type:"SelectFromMap",address:"SelectFromMap",lat:null,lon:null,properties:{labelId:"select-from-map",layer:"selectFromMap",address:"SelectFromMap",lat:null,lon:null},geometry:{type:"Point",coordinates:[]}}]):Promise.resolve([])}(l)),e.includes("FutureRoutes")){var F=C(N);P.push(y.default(F,3))}if(e.includes("SelectFromOwnLocations")&&function(e,c,n){var o=c(e);if(o&&o.length>0)return!0;var t=n(e);return t&&t.length>0}(N,p,b)&&P.push(function(e){return"string"!=typeof e||0===e.length?Promise.resolve([{type:"SelectFromOwnLocations",address:"SelectFromOwnLocations",lat:null,lon:null,properties:{labelId:"select-from-own-locations",layer:"ownLocations",address:"selectFromOwnLocations",lat:null,lon:null},geometry:{type:"Point",coordinates:[]}}]):Promise.resolve([])}(l)),E||e.includes("Locations")){var U=v;if(c.includes("Favourite")){var G=p(N);P.push(function(e,c){return Promise.resolve(ze(e,c,["address","name"]).map((function(e){return{type:"FavouritePlace",properties:j({},e,{label:e.name,layer:"favouritePlace"}),geometry:{type:"Point",coordinates:[e.lon,e.lat]}}})))}(G,l)),c.includes("Back")&&P.push(Promise.resolve([{type:"back",address:"back",lat:null,lon:null,properties:{labelId:"back",layer:"back",address:"back",lat:null,lon:null},geometry:{type:"Point",coordinates:[]}}]))}if(w||c.includes("Datasource")){var K=S.map((function(e){return"gtfs".concat(e)})),Q=k.concat(K).join(",");P.push(me(l,U,I,H,Q,T,W,["station","venue","address","street"]))}if(w||c.includes("History")){var J=d(N,"endpoint"),Z=["currentPosition","selectFromMap","futureRoute","ownLocations","bikeRentalStation","bikepark","carpark","stop","back"];Z.push.apply(Z,ge),P.push(Ne(J,l,Z))}}if(E||e.includes("ParkingAreas")){if(w||c.includes("Datasource")){var $=v;a&&10!==a&&($.size=a);var ee=A?A.join(","):null;P.push(me(l,$,I,H,ee,T,W,["carpark","bikepark"]).then((function(e){return t?t(e,Y):e})))}if(w||c.includes("History")){var ce=d(N),ne=["currentPosition","selectFromMap","futureRoute","ownLocations","favouritePlace","bikestation","bikeRentalStation","back"];ne.push.apply(ne,ge),ne.push.apply(ne,We),P.push(Ne(ce,l,ne))}}if(E||e.includes("Stops")){if(c.includes("Favourite")){var oe,te=b(N);oe=te.every((function(e){return"station"===e.type}))?qe(te,X).then((function(e){return t?t(e,Y):e})):z(te).then((function(e){return qe(e,X)})).then((function(e){return t?t(e,Y):e})),P.push(function(e,c){return e.then((function(e){return ze(e,c,["properties.name","properties.name","properties.address"])}))}(oe,l))}if(w||c.includes("Datasource")){var ae=a&&10!==a?{size:a}:{};(E||e.includes("Locations"))&&(ae.dedupestops=1);var ie=S.map((function(e){return"gtfs".concat(e)})).join(",");P.push(me(l,ae,I,H,ie,T,W,["stop","station"]).then((function(e){return t?t(e,Y):e})))}if(w||c.includes("History")){var re=d(N).filter((function(e){return!e.properties.gid||e.properties.gid.includes("GTFS:")})),Me=["currentPosition","selectFromMap","futureRoute","ownLocations","favouritePlace","bikeRentalStation","back"];Me.push.apply(Me,ge),Me.push.apply(Me,We),Me.push.apply(Me,_e),n?("route-CITYBIKE"!==n&&(Me.push("bikeRentalStation"),Me.push("bikestation")),P.push(Ne(re,l,Me).then((function(e){return t?t(e,Y):e})))):P.push(Ne(re,l,Me))}}if(E||e.includes("Routes")){if(c.includes("Favourite")){var se=m(N);P.push(L(se,l,Y,M).then((function(e){return t?t(e,Y,"Routes"):e})))}if(P.push(q(l,S,n,M).then((function(e){return t?t(e,Y,"Routes"):e}))),w||c.includes("History")){var ue=d(N),pe=["currentPosition","selectFromMap","futureRoute","favouritePlace","stop","station","bikepark","carpark","ownLocations","back"];n&&("route-CITYBIKE"!==n&&(pe.push("bikeRentalStation"),pe.push("bikestation")),pe.push.apply(pe,V(ge.filter((function(e){return!(e===n)}))))),pe.push.apply(pe,We),P.push(Ne(ue,l,pe).then((function(e){return t?t(e,Y,"Routes"):e})))}}if(E||e.includes("BikeRentalStations")){if(c.includes("Favourite")){var de=O(N);P.push(h(de,l))}if(w||c.includes("Datasource")){var be=a&&10!==a?{size:a}:{};P.push(me(l,be,I,H,R.join(","),T,W,["bikestation"]).then((function(e){return t?t(e,Y,"BikeRentalStations"):e})))}}Promise.all(P).then(B.default).then(fe).then((function(e){x.results=e})).catch((function(e){x.error=e})).then((function(){r(j({},x,{results:le(_,x.results,l)}))}))}),300,{leading:!0});function Xe(){throw new Error("Dynamic requires are not currently supported by rollup-plugin-commonjs")}function Be(e,c){return e(c={exports:{}},c.exports),c.exports}var ye,Se=Be((function(e,c){e.exports=function(){var c,n;function o(){return c.apply(null,arguments)}function t(e){c=e}function a(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function i(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function r(e,c){return Object.prototype.hasOwnProperty.call(e,c)}function M(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;var c;for(c in e)if(r(e,c))return!1;return!0}function s(e){return void 0===e}function l(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function u(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function p(e,c){var n,o=[];for(n=0;n<e.length;++n)o.push(c(e[n],n));return o}function d(e,c){for(var n in c)r(c,n)&&(e[n]=c[n]);return r(c,"toString")&&(e.toString=c.toString),r(c,"valueOf")&&(e.valueOf=c.valueOf),e}function b(e,c,n,o){return Vn(e,c,n,o,!0).utc()}function A(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}}function f(e){return null==e._pf&&(e._pf=A()),e._pf}function z(e){if(null==e._isValid){var c=f(e),o=n.call(c.parsedDateParts,(function(e){return null!=e})),t=!isNaN(e._d.getTime())&&c.overflow<0&&!c.empty&&!c.invalidEra&&!c.invalidMonth&&!c.invalidWeekday&&!c.weekdayMismatch&&!c.nullInput&&!c.invalidFormat&&!c.userInvalidated&&(!c.meridiem||c.meridiem&&o);if(e._strict&&(t=t&&0===c.charsLeftOver&&0===c.unusedTokens.length&&void 0===c.bigHour),null!=Object.isFrozen&&Object.isFrozen(e))return t;e._isValid=t}return e._isValid}function h(e){var c=b(NaN);return null!=e?d(f(c),e):f(c).userInvalidated=!0,c}n=Array.prototype.some?Array.prototype.some:function(e){var c,n=Object(this),o=n.length>>>0;for(c=0;c<o;c++)if(c in n&&e.call(this,n[c],c,n))return!0;return!1};var O=o.momentProperties=[],L=!1;function m(e,c){var n,o,t;if(s(c._isAMomentObject)||(e._isAMomentObject=c._isAMomentObject),s(c._i)||(e._i=c._i),s(c._f)||(e._f=c._f),s(c._l)||(e._l=c._l),s(c._strict)||(e._strict=c._strict),s(c._tzm)||(e._tzm=c._tzm),s(c._isUTC)||(e._isUTC=c._isUTC),s(c._offset)||(e._offset=c._offset),s(c._pf)||(e._pf=f(c)),s(c._locale)||(e._locale=c._locale),O.length>0)for(n=0;n<O.length;n++)s(t=c[o=O[n]])||(e[o]=t);return e}function q(e){m(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===L&&(L=!0,o.updateOffset(this),L=!1)}function N(e){return e instanceof q||null!=e&&null!=e._isAMomentObject}function g(e){!1===o.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+e)}function W(e,c){var n=!0;return d((function(){if(null!=o.deprecationHandler&&o.deprecationHandler(null,e),n){var t,a,i,M=[];for(a=0;a<arguments.length;a++){if(t="","object"==typeof arguments[a]){for(i in t+="\n["+a+"] ",arguments[0])r(arguments[0],i)&&(t+=i+": "+arguments[0][i]+", ");t=t.slice(0,-2)}else t=arguments[a];M.push(t)}g(e+"\nArguments: "+Array.prototype.slice.call(M).join("")+"\n"+(new Error).stack),n=!1}return c.apply(this,arguments)}),c)}var _,T={};function X(e,c){null!=o.deprecationHandler&&o.deprecationHandler(e,c),T[e]||(g(c),T[e]=!0)}function B(e){return"undefined"!=typeof Function&&e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function y(e){var c,n;for(n in e)r(e,n)&&(B(c=e[n])?this[n]=c:this["_"+n]=c);this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)}function S(e,c){var n,o=d({},e);for(n in c)r(c,n)&&(i(e[n])&&i(c[n])?(o[n]={},d(o[n],e[n]),d(o[n],c[n])):null!=c[n]?o[n]=c[n]:delete o[n]);for(n in e)r(e,n)&&!r(c,n)&&i(e[n])&&(o[n]=d({},o[n]));return o}function v(e){null!=e&&this.set(e)}o.suppressDeprecationWarnings=!1,o.deprecationHandler=null,_=Object.keys?Object.keys:function(e){var c,n=[];for(c in e)r(e,c)&&n.push(c);return n};var k={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"};function C(e,c,n){var o=this._calendar[e]||this._calendar.sameElse;return B(o)?o.call(c,n):o}function R(e,c,n){var o=""+Math.abs(e),t=c-o.length;return(e>=0?n?"+":"":"-")+Math.pow(10,Math.max(0,t)).toString().substr(1)+o}var E=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,w=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,D={},P={};function x(e,c,n,o){var t=o;"string"==typeof o&&(t=function(){return this[o]()}),e&&(P[e]=t),c&&(P[c[0]]=function(){return R(t.apply(this,arguments),c[1],c[2])}),n&&(P[n]=function(){return this.localeData().ordinal(t.apply(this,arguments),e)})}function I(e){return e.match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"")}function H(e){var c,n,o=e.match(E);for(c=0,n=o.length;c<n;c++)P[o[c]]?o[c]=P[o[c]]:o[c]=I(o[c]);return function(c){var t,a="";for(t=0;t<n;t++)a+=B(o[t])?o[t].call(c,e):o[t];return a}}function Y(e,c){return e.isValid()?(c=F(c,e.localeData()),D[c]=D[c]||H(c),D[c](e)):e.localeData().invalidDate()}function F(e,c){var n=5;function o(e){return c.longDateFormat(e)||e}for(w.lastIndex=0;n>=0&&w.test(e);)e=e.replace(w,o),w.lastIndex=0,n-=1;return e}var j={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};function U(e){var c=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return c||!n?c:(this._longDateFormat[e]=n.match(E).map((function(e){return"MMMM"===e||"MM"===e||"DD"===e||"dddd"===e?e.slice(1):e})).join(""),this._longDateFormat[e])}var G="Invalid date";function V(){return this._invalidDate}var K="%d",Q=/\d{1,2}/;function J(e){return this._ordinal.replace("%d",e)}var Z={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function $(e,c,n,o){var t=this._relativeTime[n];return B(t)?t(e,c,n,o):t.replace(/%d/i,e)}function ee(e,c){var n=this._relativeTime[e>0?"future":"past"];return B(n)?n(c):n.replace(/%s/i,c)}var ce={};function ne(e,c){var n=e.toLowerCase();ce[n]=ce[n+"s"]=ce[c]=e}function oe(e){return"string"==typeof e?ce[e]||ce[e.toLowerCase()]:void 0}function te(e){var c,n,o={};for(n in e)r(e,n)&&(c=oe(n))&&(o[c]=e[n]);return o}var ae={};function ie(e,c){ae[e]=c}function re(e){var c,n=[];for(c in e)r(e,c)&&n.push({unit:c,priority:ae[c]});return n.sort((function(e,c){return e.priority-c.priority})),n}function Me(e){return e%4==0&&e%100!=0||e%400==0}function se(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function le(e){var c=+e,n=0;return 0!==c&&isFinite(c)&&(n=se(c)),n}function ue(e,c){return function(n){return null!=n?(de(this,e,n),o.updateOffset(this,c),this):pe(this,e)}}function pe(e,c){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+c]():NaN}function de(e,c,n){e.isValid()&&!isNaN(n)&&("FullYear"===c&&Me(e.year())&&1===e.month()&&29===e.date()?(n=le(n),e._d["set"+(e._isUTC?"UTC":"")+c](n,e.month(),ec(n,e.month()))):e._d["set"+(e._isUTC?"UTC":"")+c](n))}function be(e){return B(this[e=oe(e)])?this[e]():this}function Ae(e,c){if("object"==typeof e){var n,o=re(e=te(e));for(n=0;n<o.length;n++)this[o[n].unit](e[o[n].unit])}else if(B(this[e=oe(e)]))return this[e](c);return this}var fe,ze=/\d/,he=/\d\d/,Oe=/\d{3}/,Le=/\d{4}/,me=/[+-]?\d{6}/,qe=/\d\d?/,Ne=/\d\d\d\d?/,ge=/\d\d\d\d\d\d?/,We=/\d{1,3}/,_e=/\d{1,4}/,Te=/[+-]?\d{1,6}/,Be=/\d+/,ye=/[+-]?\d+/,Se=/Z|[+-]\d\d:?\d\d/gi,ve=/Z|[+-]\d\d(?::?\d\d)?/gi,ke=/[+-]?\d+(\.\d{1,3})?/,Ce=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i;function Re(e,c,n){fe[e]=B(c)?c:function(e,o){return e&&n?n:c}}function Ee(e,c){return r(fe,e)?fe[e](c._strict,c._locale):new RegExp(we(e))}function we(e){return De(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,(function(e,c,n,o,t){return c||n||o||t})))}function De(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}fe={};var Pe={};function xe(e,c){var n,o=c;for("string"==typeof e&&(e=[e]),l(c)&&(o=function(e,n){n[c]=le(e)}),n=0;n<e.length;n++)Pe[e[n]]=o}function Ie(e,c){xe(e,(function(e,n,o,t){o._w=o._w||{},c(e,o._w,o,t)}))}function He(e,c,n){null!=c&&r(Pe,e)&&Pe[e](c,n._a,n,e)}var Ye,Fe=0,je=1,Ue=2,Ge=3,Ve=4,Ke=5,Qe=6,Je=7,Ze=8;function $e(e,c){return(e%c+c)%c}function ec(e,c){if(isNaN(e)||isNaN(c))return NaN;var n=$e(c,12);return e+=(c-n)/12,1===n?Me(e)?29:28:31-n%7%2}Ye=Array.prototype.indexOf?Array.prototype.indexOf:function(e){var c;for(c=0;c<this.length;++c)if(this[c]===e)return c;return-1},x("M",["MM",2],"Mo",(function(){return this.month()+1})),x("MMM",0,0,(function(e){return this.localeData().monthsShort(this,e)})),x("MMMM",0,0,(function(e){return this.localeData().months(this,e)})),ne("month","M"),ie("month",8),Re("M",qe),Re("MM",qe,he),Re("MMM",(function(e,c){return c.monthsShortRegex(e)})),Re("MMMM",(function(e,c){return c.monthsRegex(e)})),xe(["M","MM"],(function(e,c){c[je]=le(e)-1})),xe(["MMM","MMMM"],(function(e,c,n,o){var t=n._locale.monthsParse(e,o,n._strict);null!=t?c[je]=t:f(n).invalidMonth=e}));var cc="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),nc="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),oc=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,tc=Ce,ac=Ce;function ic(e,c){return e?a(this._months)?this._months[e.month()]:this._months[(this._months.isFormat||oc).test(c)?"format":"standalone"][e.month()]:a(this._months)?this._months:this._months.standalone}function rc(e,c){return e?a(this._monthsShort)?this._monthsShort[e.month()]:this._monthsShort[oc.test(c)?"format":"standalone"][e.month()]:a(this._monthsShort)?this._monthsShort:this._monthsShort.standalone}function Mc(e,c,n){var o,t,a,i=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],o=0;o<12;++o)a=b([2e3,o]),this._shortMonthsParse[o]=this.monthsShort(a,"").toLocaleLowerCase(),this._longMonthsParse[o]=this.months(a,"").toLocaleLowerCase();return n?"MMM"===c?-1!==(t=Ye.call(this._shortMonthsParse,i))?t:null:-1!==(t=Ye.call(this._longMonthsParse,i))?t:null:"MMM"===c?-1!==(t=Ye.call(this._shortMonthsParse,i))||-1!==(t=Ye.call(this._longMonthsParse,i))?t:null:-1!==(t=Ye.call(this._longMonthsParse,i))||-1!==(t=Ye.call(this._shortMonthsParse,i))?t:null}function sc(e,c,n){var o,t,a;if(this._monthsParseExact)return Mc.call(this,e,c,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),o=0;o<12;o++){if(t=b([2e3,o]),n&&!this._longMonthsParse[o]&&(this._longMonthsParse[o]=new RegExp("^"+this.months(t,"").replace(".","")+"$","i"),this._shortMonthsParse[o]=new RegExp("^"+this.monthsShort(t,"").replace(".","")+"$","i")),n||this._monthsParse[o]||(a="^"+this.months(t,"")+"|^"+this.monthsShort(t,""),this._monthsParse[o]=new RegExp(a.replace(".",""),"i")),n&&"MMMM"===c&&this._longMonthsParse[o].test(e))return o;if(n&&"MMM"===c&&this._shortMonthsParse[o].test(e))return o;if(!n&&this._monthsParse[o].test(e))return o}}function lc(e,c){var n;if(!e.isValid())return e;if("string"==typeof c)if(/^\d+$/.test(c))c=le(c);else if(!l(c=e.localeData().monthsParse(c)))return e;return n=Math.min(e.date(),ec(e.year(),c)),e._d["set"+(e._isUTC?"UTC":"")+"Month"](c,n),e}function uc(e){return null!=e?(lc(this,e),o.updateOffset(this,!0),this):pe(this,"Month")}function pc(){return ec(this.year(),this.month())}function dc(e){return this._monthsParseExact?(r(this,"_monthsRegex")||Ac.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(r(this,"_monthsShortRegex")||(this._monthsShortRegex=tc),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)}function bc(e){return this._monthsParseExact?(r(this,"_monthsRegex")||Ac.call(this),e?this._monthsStrictRegex:this._monthsRegex):(r(this,"_monthsRegex")||(this._monthsRegex=ac),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)}function Ac(){function e(e,c){return c.length-e.length}var c,n,o=[],t=[],a=[];for(c=0;c<12;c++)n=b([2e3,c]),o.push(this.monthsShort(n,"")),t.push(this.months(n,"")),a.push(this.months(n,"")),a.push(this.monthsShort(n,""));for(o.sort(e),t.sort(e),a.sort(e),c=0;c<12;c++)o[c]=De(o[c]),t[c]=De(t[c]);for(c=0;c<24;c++)a[c]=De(a[c]);this._monthsRegex=new RegExp("^("+a.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+t.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+o.join("|")+")","i")}function fc(e){return Me(e)?366:365}x("Y",0,0,(function(){var e=this.year();return e<=9999?R(e,4):"+"+e})),x(0,["YY",2],0,(function(){return this.year()%100})),x(0,["YYYY",4],0,"year"),x(0,["YYYYY",5],0,"year"),x(0,["YYYYYY",6,!0],0,"year"),ne("year","y"),ie("year",1),Re("Y",ye),Re("YY",qe,he),Re("YYYY",_e,Le),Re("YYYYY",Te,me),Re("YYYYYY",Te,me),xe(["YYYYY","YYYYYY"],Fe),xe("YYYY",(function(e,c){c[Fe]=2===e.length?o.parseTwoDigitYear(e):le(e)})),xe("YY",(function(e,c){c[Fe]=o.parseTwoDigitYear(e)})),xe("Y",(function(e,c){c[Fe]=parseInt(e,10)})),o.parseTwoDigitYear=function(e){return le(e)+(le(e)>68?1900:2e3)};var zc=ue("FullYear",!0);function hc(){return Me(this.year())}function Oc(e,c,n,o,t,a,i){var r;return e<100&&e>=0?(r=new Date(e+400,c,n,o,t,a,i),isFinite(r.getFullYear())&&r.setFullYear(e)):r=new Date(e,c,n,o,t,a,i),r}function Lc(e){var c,n;return e<100&&e>=0?((n=Array.prototype.slice.call(arguments))[0]=e+400,c=new Date(Date.UTC.apply(null,n)),isFinite(c.getUTCFullYear())&&c.setUTCFullYear(e)):c=new Date(Date.UTC.apply(null,arguments)),c}function mc(e,c,n){var o=7+c-n;return-(7+Lc(e,0,o).getUTCDay()-c)%7+o-1}function qc(e,c,n,o,t){var a,i,r=1+7*(c-1)+(7+n-o)%7+mc(e,o,t);return r<=0?i=fc(a=e-1)+r:r>fc(e)?(a=e+1,i=r-fc(e)):(a=e,i=r),{year:a,dayOfYear:i}}function Nc(e,c,n){var o,t,a=mc(e.year(),c,n),i=Math.floor((e.dayOfYear()-a-1)/7)+1;return i<1?o=i+gc(t=e.year()-1,c,n):i>gc(e.year(),c,n)?(o=i-gc(e.year(),c,n),t=e.year()+1):(t=e.year(),o=i),{week:o,year:t}}function gc(e,c,n){var o=mc(e,c,n),t=mc(e+1,c,n);return(fc(e)-o+t)/7}function Wc(e){return Nc(e,this._week.dow,this._week.doy).week}x("w",["ww",2],"wo","week"),x("W",["WW",2],"Wo","isoWeek"),ne("week","w"),ne("isoWeek","W"),ie("week",5),ie("isoWeek",5),Re("w",qe),Re("ww",qe,he),Re("W",qe),Re("WW",qe,he),Ie(["w","ww","W","WW"],(function(e,c,n,o){c[o.substr(0,1)]=le(e)}));var _c={dow:0,doy:6};function Tc(){return this._week.dow}function Xc(){return this._week.doy}function Bc(e){var c=this.localeData().week(this);return null==e?c:this.add(7*(e-c),"d")}function yc(e){var c=Nc(this,1,4).week;return null==e?c:this.add(7*(e-c),"d")}function Sc(e,c){return"string"!=typeof e?e:isNaN(e)?"number"==typeof(e=c.weekdaysParse(e))?e:null:parseInt(e,10)}function vc(e,c){return"string"==typeof e?c.weekdaysParse(e)%7||7:isNaN(e)?null:e}function kc(e,c){return e.slice(c,7).concat(e.slice(0,c))}x("d",0,"do","day"),x("dd",0,0,(function(e){return this.localeData().weekdaysMin(this,e)})),x("ddd",0,0,(function(e){return this.localeData().weekdaysShort(this,e)})),x("dddd",0,0,(function(e){return this.localeData().weekdays(this,e)})),x("e",0,0,"weekday"),x("E",0,0,"isoWeekday"),ne("day","d"),ne("weekday","e"),ne("isoWeekday","E"),ie("day",11),ie("weekday",11),ie("isoWeekday",11),Re("d",qe),Re("e",qe),Re("E",qe),Re("dd",(function(e,c){return c.weekdaysMinRegex(e)})),Re("ddd",(function(e,c){return c.weekdaysShortRegex(e)})),Re("dddd",(function(e,c){return c.weekdaysRegex(e)})),Ie(["dd","ddd","dddd"],(function(e,c,n,o){var t=n._locale.weekdaysParse(e,o,n._strict);null!=t?c.d=t:f(n).invalidWeekday=e})),Ie(["d","e","E"],(function(e,c,n,o){c[o]=le(e)}));var Cc="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Rc="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Ec="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),wc=Ce,Dc=Ce,Pc=Ce;function xc(e,c){var n=a(this._weekdays)?this._weekdays:this._weekdays[e&&!0!==e&&this._weekdays.isFormat.test(c)?"format":"standalone"];return!0===e?kc(n,this._week.dow):e?n[e.day()]:n}function Ic(e){return!0===e?kc(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort}function Hc(e){return!0===e?kc(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin}function Yc(e,c,n){var o,t,a,i=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],o=0;o<7;++o)a=b([2e3,1]).day(o),this._minWeekdaysParse[o]=this.weekdaysMin(a,"").toLocaleLowerCase(),this._shortWeekdaysParse[o]=this.weekdaysShort(a,"").toLocaleLowerCase(),this._weekdaysParse[o]=this.weekdays(a,"").toLocaleLowerCase();return n?"dddd"===c?-1!==(t=Ye.call(this._weekdaysParse,i))?t:null:"ddd"===c?-1!==(t=Ye.call(this._shortWeekdaysParse,i))?t:null:-1!==(t=Ye.call(this._minWeekdaysParse,i))?t:null:"dddd"===c?-1!==(t=Ye.call(this._weekdaysParse,i))||-1!==(t=Ye.call(this._shortWeekdaysParse,i))||-1!==(t=Ye.call(this._minWeekdaysParse,i))?t:null:"ddd"===c?-1!==(t=Ye.call(this._shortWeekdaysParse,i))||-1!==(t=Ye.call(this._weekdaysParse,i))||-1!==(t=Ye.call(this._minWeekdaysParse,i))?t:null:-1!==(t=Ye.call(this._minWeekdaysParse,i))||-1!==(t=Ye.call(this._weekdaysParse,i))||-1!==(t=Ye.call(this._shortWeekdaysParse,i))?t:null}function Fc(e,c,n){var o,t,a;if(this._weekdaysParseExact)return Yc.call(this,e,c,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),o=0;o<7;o++){if(t=b([2e3,1]).day(o),n&&!this._fullWeekdaysParse[o]&&(this._fullWeekdaysParse[o]=new RegExp("^"+this.weekdays(t,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[o]=new RegExp("^"+this.weekdaysShort(t,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[o]=new RegExp("^"+this.weekdaysMin(t,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[o]||(a="^"+this.weekdays(t,"")+"|^"+this.weekdaysShort(t,"")+"|^"+this.weekdaysMin(t,""),this._weekdaysParse[o]=new RegExp(a.replace(".",""),"i")),n&&"dddd"===c&&this._fullWeekdaysParse[o].test(e))return o;if(n&&"ddd"===c&&this._shortWeekdaysParse[o].test(e))return o;if(n&&"dd"===c&&this._minWeekdaysParse[o].test(e))return o;if(!n&&this._weekdaysParse[o].test(e))return o}}function jc(e){if(!this.isValid())return null!=e?this:NaN;var c=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(e=Sc(e,this.localeData()),this.add(e-c,"d")):c}function Uc(e){if(!this.isValid())return null!=e?this:NaN;var c=(this.day()+7-this.localeData()._week.dow)%7;return null==e?c:this.add(e-c,"d")}function Gc(e){if(!this.isValid())return null!=e?this:NaN;if(null!=e){var c=vc(e,this.localeData());return this.day(this.day()%7?c:c-7)}return this.day()||7}function Vc(e){return this._weekdaysParseExact?(r(this,"_weekdaysRegex")||Jc.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(r(this,"_weekdaysRegex")||(this._weekdaysRegex=wc),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)}function Kc(e){return this._weekdaysParseExact?(r(this,"_weekdaysRegex")||Jc.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(r(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Dc),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Qc(e){return this._weekdaysParseExact?(r(this,"_weekdaysRegex")||Jc.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(r(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Pc),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Jc(){function e(e,c){return c.length-e.length}var c,n,o,t,a,i=[],r=[],M=[],s=[];for(c=0;c<7;c++)n=b([2e3,1]).day(c),o=De(this.weekdaysMin(n,"")),t=De(this.weekdaysShort(n,"")),a=De(this.weekdays(n,"")),i.push(o),r.push(t),M.push(a),s.push(o),s.push(t),s.push(a);i.sort(e),r.sort(e),M.sort(e),s.sort(e),this._weekdaysRegex=new RegExp("^("+s.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+M.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+r.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+i.join("|")+")","i")}function Zc(){return this.hours()%12||12}function $c(){return this.hours()||24}function en(e,c){x(e,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),c)}))}function cn(e,c){return c._meridiemParse}function nn(e){return"p"===(e+"").toLowerCase().charAt(0)}x("H",["HH",2],0,"hour"),x("h",["hh",2],0,Zc),x("k",["kk",2],0,$c),x("hmm",0,0,(function(){return""+Zc.apply(this)+R(this.minutes(),2)})),x("hmmss",0,0,(function(){return""+Zc.apply(this)+R(this.minutes(),2)+R(this.seconds(),2)})),x("Hmm",0,0,(function(){return""+this.hours()+R(this.minutes(),2)})),x("Hmmss",0,0,(function(){return""+this.hours()+R(this.minutes(),2)+R(this.seconds(),2)})),en("a",!0),en("A",!1),ne("hour","h"),ie("hour",13),Re("a",cn),Re("A",cn),Re("H",qe),Re("h",qe),Re("k",qe),Re("HH",qe,he),Re("hh",qe,he),Re("kk",qe,he),Re("hmm",Ne),Re("hmmss",ge),Re("Hmm",Ne),Re("Hmmss",ge),xe(["H","HH"],Ge),xe(["k","kk"],(function(e,c,n){var o=le(e);c[Ge]=24===o?0:o})),xe(["a","A"],(function(e,c,n){n._isPm=n._locale.isPM(e),n._meridiem=e})),xe(["h","hh"],(function(e,c,n){c[Ge]=le(e),f(n).bigHour=!0})),xe("hmm",(function(e,c,n){var o=e.length-2;c[Ge]=le(e.substr(0,o)),c[Ve]=le(e.substr(o)),f(n).bigHour=!0})),xe("hmmss",(function(e,c,n){var o=e.length-4,t=e.length-2;c[Ge]=le(e.substr(0,o)),c[Ve]=le(e.substr(o,2)),c[Ke]=le(e.substr(t)),f(n).bigHour=!0})),xe("Hmm",(function(e,c,n){var o=e.length-2;c[Ge]=le(e.substr(0,o)),c[Ve]=le(e.substr(o))})),xe("Hmmss",(function(e,c,n){var o=e.length-4,t=e.length-2;c[Ge]=le(e.substr(0,o)),c[Ve]=le(e.substr(o,2)),c[Ke]=le(e.substr(t))}));var on=/[ap]\.?m?\.?/i,tn=ue("Hours",!0);function an(e,c,n){return e>11?n?"pm":"PM":n?"am":"AM"}var rn,Mn={calendar:k,longDateFormat:j,invalidDate:G,ordinal:K,dayOfMonthOrdinalParse:Q,relativeTime:Z,months:cc,monthsShort:nc,week:_c,weekdays:Cc,weekdaysMin:Ec,weekdaysShort:Rc,meridiemParse:on},sn={},ln={};function un(e,c){var n,o=Math.min(e.length,c.length);for(n=0;n<o;n+=1)if(e[n]!==c[n])return n;return o}function pn(e){return e?e.toLowerCase().replace("_","-"):e}function dn(e){for(var c,n,o,t,a=0;a<e.length;){for(c=(t=pn(e[a]).split("-")).length,n=(n=pn(e[a+1]))?n.split("-"):null;c>0;){if(o=bn(t.slice(0,c).join("-")))return o;if(n&&n.length>=c&&un(t,n)>=c-1)break;c--}a++}return rn}function bn(c){var n=null;if(void 0===sn[c]&&e&&e.exports)try{n=rn._abbr,Xe(),An(n)}catch(e){sn[c]=null}return sn[c]}function An(e,c){var n;return e&&((n=s(c)?hn(e):fn(e,c))?rn=n:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),rn._abbr}function fn(e,c){if(null!==c){var n,o=Mn;if(c.abbr=e,null!=sn[e])X("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),o=sn[e]._config;else if(null!=c.parentLocale)if(null!=sn[c.parentLocale])o=sn[c.parentLocale]._config;else{if(null==(n=bn(c.parentLocale)))return ln[c.parentLocale]||(ln[c.parentLocale]=[]),ln[c.parentLocale].push({name:e,config:c}),null;o=n._config}return sn[e]=new v(S(o,c)),ln[e]&&ln[e].forEach((function(e){fn(e.name,e.config)})),An(e),sn[e]}return delete sn[e],null}function zn(e,c){if(null!=c){var n,o,t=Mn;null!=sn[e]&&null!=sn[e].parentLocale?sn[e].set(S(sn[e]._config,c)):(null!=(o=bn(e))&&(t=o._config),c=S(t,c),null==o&&(c.abbr=e),(n=new v(c)).parentLocale=sn[e],sn[e]=n),An(e)}else null!=sn[e]&&(null!=sn[e].parentLocale?(sn[e]=sn[e].parentLocale,e===An()&&An(e)):null!=sn[e]&&delete sn[e]);return sn[e]}function hn(e){var c;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return rn;if(!a(e)){if(c=bn(e))return c;e=[e]}return dn(e)}function On(){return _(sn)}function Ln(e){var c,n=e._a;return n&&-2===f(e).overflow&&(c=n[je]<0||n[je]>11?je:n[Ue]<1||n[Ue]>ec(n[Fe],n[je])?Ue:n[Ge]<0||n[Ge]>24||24===n[Ge]&&(0!==n[Ve]||0!==n[Ke]||0!==n[Qe])?Ge:n[Ve]<0||n[Ve]>59?Ve:n[Ke]<0||n[Ke]>59?Ke:n[Qe]<0||n[Qe]>999?Qe:-1,f(e)._overflowDayOfYear&&(c<Fe||c>Ue)&&(c=Ue),f(e)._overflowWeeks&&-1===c&&(c=Je),f(e)._overflowWeekday&&-1===c&&(c=Ze),f(e).overflow=c),e}var mn=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,qn=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Nn=/Z|[+-]\d\d(?::?\d\d)?/,gn=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],Wn=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],_n=/^\/?Date\((-?\d+)/i,Tn=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,Xn={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function Bn(e){var c,n,o,t,a,i,r=e._i,M=mn.exec(r)||qn.exec(r);if(M){for(f(e).iso=!0,c=0,n=gn.length;c<n;c++)if(gn[c][1].exec(M[1])){t=gn[c][0],o=!1!==gn[c][2];break}if(null==t)return void(e._isValid=!1);if(M[3]){for(c=0,n=Wn.length;c<n;c++)if(Wn[c][1].exec(M[3])){a=(M[2]||" ")+Wn[c][0];break}if(null==a)return void(e._isValid=!1)}if(!o&&null!=a)return void(e._isValid=!1);if(M[4]){if(!Nn.exec(M[4]))return void(e._isValid=!1);i="Z"}e._f=t+(a||"")+(i||""),In(e)}else e._isValid=!1}function yn(e,c,n,o,t,a){var i=[Sn(e),nc.indexOf(c),parseInt(n,10),parseInt(o,10),parseInt(t,10)];return a&&i.push(parseInt(a,10)),i}function Sn(e){var c=parseInt(e,10);return c<=49?2e3+c:c<=999?1900+c:c}function vn(e){return e.replace(/\([^)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,"")}function kn(e,c,n){return!e||Rc.indexOf(e)===new Date(c[0],c[1],c[2]).getDay()||(f(n).weekdayMismatch=!0,n._isValid=!1,!1)}function Cn(e,c,n){if(e)return Xn[e];if(c)return 0;var o=parseInt(n,10),t=o%100;return(o-t)/100*60+t}function Rn(e){var c,n=Tn.exec(vn(e._i));if(n){if(c=yn(n[4],n[3],n[2],n[5],n[6],n[7]),!kn(n[1],c,e))return;e._a=c,e._tzm=Cn(n[8],n[9],n[10]),e._d=Lc.apply(null,e._a),e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),f(e).rfc2822=!0}else e._isValid=!1}function En(e){var c=_n.exec(e._i);null===c?(Bn(e),!1===e._isValid&&(delete e._isValid,Rn(e),!1===e._isValid&&(delete e._isValid,e._strict?e._isValid=!1:o.createFromInputFallback(e)))):e._d=new Date(+c[1])}function wn(e,c,n){return null!=e?e:null!=c?c:n}function Dn(e){var c=new Date(o.now());return e._useUTC?[c.getUTCFullYear(),c.getUTCMonth(),c.getUTCDate()]:[c.getFullYear(),c.getMonth(),c.getDate()]}function Pn(e){var c,n,o,t,a,i=[];if(!e._d){for(o=Dn(e),e._w&&null==e._a[Ue]&&null==e._a[je]&&xn(e),null!=e._dayOfYear&&(a=wn(e._a[Fe],o[Fe]),(e._dayOfYear>fc(a)||0===e._dayOfYear)&&(f(e)._overflowDayOfYear=!0),n=Lc(a,0,e._dayOfYear),e._a[je]=n.getUTCMonth(),e._a[Ue]=n.getUTCDate()),c=0;c<3&&null==e._a[c];++c)e._a[c]=i[c]=o[c];for(;c<7;c++)e._a[c]=i[c]=null==e._a[c]?2===c?1:0:e._a[c];24===e._a[Ge]&&0===e._a[Ve]&&0===e._a[Ke]&&0===e._a[Qe]&&(e._nextDay=!0,e._a[Ge]=0),e._d=(e._useUTC?Lc:Oc).apply(null,i),t=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[Ge]=24),e._w&&void 0!==e._w.d&&e._w.d!==t&&(f(e).weekdayMismatch=!0)}}function xn(e){var c,n,o,t,a,i,r,M,s;null!=(c=e._w).GG||null!=c.W||null!=c.E?(a=1,i=4,n=wn(c.GG,e._a[Fe],Nc(Kn(),1,4).year),o=wn(c.W,1),((t=wn(c.E,1))<1||t>7)&&(M=!0)):(a=e._locale._week.dow,i=e._locale._week.doy,s=Nc(Kn(),a,i),n=wn(c.gg,e._a[Fe],s.year),o=wn(c.w,s.week),null!=c.d?((t=c.d)<0||t>6)&&(M=!0):null!=c.e?(t=c.e+a,(c.e<0||c.e>6)&&(M=!0)):t=a),o<1||o>gc(n,a,i)?f(e)._overflowWeeks=!0:null!=M?f(e)._overflowWeekday=!0:(r=qc(n,o,t,a,i),e._a[Fe]=r.year,e._dayOfYear=r.dayOfYear)}function In(e){if(e._f!==o.ISO_8601)if(e._f!==o.RFC_2822){e._a=[],f(e).empty=!0;var c,n,t,a,i,r,M=""+e._i,s=M.length,l=0;for(t=F(e._f,e._locale).match(E)||[],c=0;c<t.length;c++)a=t[c],(n=(M.match(Ee(a,e))||[])[0])&&((i=M.substr(0,M.indexOf(n))).length>0&&f(e).unusedInput.push(i),M=M.slice(M.indexOf(n)+n.length),l+=n.length),P[a]?(n?f(e).empty=!1:f(e).unusedTokens.push(a),He(a,n,e)):e._strict&&!n&&f(e).unusedTokens.push(a);f(e).charsLeftOver=s-l,M.length>0&&f(e).unusedInput.push(M),e._a[Ge]<=12&&!0===f(e).bigHour&&e._a[Ge]>0&&(f(e).bigHour=void 0),f(e).parsedDateParts=e._a.slice(0),f(e).meridiem=e._meridiem,e._a[Ge]=Hn(e._locale,e._a[Ge],e._meridiem),null!==(r=f(e).era)&&(e._a[Fe]=e._locale.erasConvertYear(r,e._a[Fe])),Pn(e),Ln(e)}else Rn(e);else Bn(e)}function Hn(e,c,n){var o;return null==n?c:null!=e.meridiemHour?e.meridiemHour(c,n):null!=e.isPM?((o=e.isPM(n))&&c<12&&(c+=12),o||12!==c||(c=0),c):c}function Yn(e){var c,n,o,t,a,i,r=!1;if(0===e._f.length)return f(e).invalidFormat=!0,void(e._d=new Date(NaN));for(t=0;t<e._f.length;t++)a=0,i=!1,c=m({},e),null!=e._useUTC&&(c._useUTC=e._useUTC),c._f=e._f[t],In(c),z(c)&&(i=!0),a+=f(c).charsLeftOver,a+=10*f(c).unusedTokens.length,f(c).score=a,r?a<o&&(o=a,n=c):(null==o||a<o||i)&&(o=a,n=c,i&&(r=!0));d(e,n||c)}function Fn(e){if(!e._d){var c=te(e._i),n=void 0===c.day?c.date:c.day;e._a=p([c.year,c.month,n,c.hour,c.minute,c.second,c.millisecond],(function(e){return e&&parseInt(e,10)})),Pn(e)}}function jn(e){var c=new q(Ln(Un(e)));return c._nextDay&&(c.add(1,"d"),c._nextDay=void 0),c}function Un(e){var c=e._i,n=e._f;return e._locale=e._locale||hn(e._l),null===c||void 0===n&&""===c?h({nullInput:!0}):("string"==typeof c&&(e._i=c=e._locale.preparse(c)),N(c)?new q(Ln(c)):(u(c)?e._d=c:a(n)?Yn(e):n?In(e):Gn(e),z(e)||(e._d=null),e))}function Gn(e){var c=e._i;s(c)?e._d=new Date(o.now()):u(c)?e._d=new Date(c.valueOf()):"string"==typeof c?En(e):a(c)?(e._a=p(c.slice(0),(function(e){return parseInt(e,10)})),Pn(e)):i(c)?Fn(e):l(c)?e._d=new Date(c):o.createFromInputFallback(e)}function Vn(e,c,n,o,t){var r={};return!0!==c&&!1!==c||(o=c,c=void 0),!0!==n&&!1!==n||(o=n,n=void 0),(i(e)&&M(e)||a(e)&&0===e.length)&&(e=void 0),r._isAMomentObject=!0,r._useUTC=r._isUTC=t,r._l=n,r._i=e,r._f=c,r._strict=o,jn(r)}function Kn(e,c,n,o){return Vn(e,c,n,o,!1)}o.createFromInputFallback=W("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",(function(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))})),o.ISO_8601=function(){},o.RFC_2822=function(){};var Qn=W("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var e=Kn.apply(null,arguments);return this.isValid()&&e.isValid()?e<this?this:e:h()})),Jn=W("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var e=Kn.apply(null,arguments);return this.isValid()&&e.isValid()?e>this?this:e:h()}));function Zn(e,c){var n,o;if(1===c.length&&a(c[0])&&(c=c[0]),!c.length)return Kn();for(n=c[0],o=1;o<c.length;++o)c[o].isValid()&&!c[o][e](n)||(n=c[o]);return n}function $n(){return Zn("isBefore",[].slice.call(arguments,0))}function eo(){return Zn("isAfter",[].slice.call(arguments,0))}var co=function(){return Date.now?Date.now():+new Date},no=["year","quarter","month","week","day","hour","minute","second","millisecond"];function oo(e){var c,n,o=!1;for(c in e)if(r(e,c)&&(-1===Ye.call(no,c)||null!=e[c]&&isNaN(e[c])))return!1;for(n=0;n<no.length;++n)if(e[no[n]]){if(o)return!1;parseFloat(e[no[n]])!==le(e[no[n]])&&(o=!0)}return!0}function to(){return this._isValid}function ao(){return Bo(NaN)}function io(e){var c=te(e),n=c.year||0,o=c.quarter||0,t=c.month||0,a=c.week||c.isoWeek||0,i=c.day||0,r=c.hour||0,M=c.minute||0,s=c.second||0,l=c.millisecond||0;this._isValid=oo(c),this._milliseconds=+l+1e3*s+6e4*M+1e3*r*60*60,this._days=+i+7*a,this._months=+t+3*o+12*n,this._data={},this._locale=hn(),this._bubble()}function ro(e){return e instanceof io}function Mo(e){return e<0?-1*Math.round(-1*e):Math.round(e)}function so(e,c,n){var o,t=Math.min(e.length,c.length),a=Math.abs(e.length-c.length),i=0;for(o=0;o<t;o++)(n&&e[o]!==c[o]||!n&&le(e[o])!==le(c[o]))&&i++;return i+a}function lo(e,c){x(e,0,0,(function(){var e=this.utcOffset(),n="+";return e<0&&(e=-e,n="-"),n+R(~~(e/60),2)+c+R(~~e%60,2)}))}lo("Z",":"),lo("ZZ",""),Re("Z",ve),Re("ZZ",ve),xe(["Z","ZZ"],(function(e,c,n){n._useUTC=!0,n._tzm=po(ve,e)}));var uo=/([\+\-]|\d\d)/gi;function po(e,c){var n,o,t=(c||"").match(e);return null===t?null:0===(o=60*(n=((t[t.length-1]||[])+"").match(uo)||["-",0,0])[1]+le(n[2]))?0:"+"===n[0]?o:-o}function bo(e,c){var n,t;return c._isUTC?(n=c.clone(),t=(N(e)||u(e)?e.valueOf():Kn(e).valueOf())-n.valueOf(),n._d.setTime(n._d.valueOf()+t),o.updateOffset(n,!1),n):Kn(e).local()}function Ao(e){return-Math.round(e._d.getTimezoneOffset())}function fo(e,c,n){var t,a=this._offset||0;if(!this.isValid())return null!=e?this:NaN;if(null!=e){if("string"==typeof e){if(null===(e=po(ve,e)))return this}else Math.abs(e)<16&&!n&&(e*=60);return!this._isUTC&&c&&(t=Ao(this)),this._offset=e,this._isUTC=!0,null!=t&&this.add(t,"m"),a!==e&&(!c||this._changeInProgress?Co(this,Bo(e-a,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,o.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?a:Ao(this)}function zo(e,c){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,c),this):-this.utcOffset()}function ho(e){return this.utcOffset(0,e)}function Oo(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(Ao(this),"m")),this}function Lo(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var e=po(Se,this._i);null!=e?this.utcOffset(e):this.utcOffset(0,!0)}return this}function mo(e){return!!this.isValid()&&(e=e?Kn(e).utcOffset():0,(this.utcOffset()-e)%60==0)}function qo(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function No(){if(!s(this._isDSTShifted))return this._isDSTShifted;var e,c={};return m(c,this),(c=Un(c))._a?(e=c._isUTC?b(c._a):Kn(c._a),this._isDSTShifted=this.isValid()&&so(c._a,e.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function go(){return!!this.isValid()&&!this._isUTC}function Wo(){return!!this.isValid()&&this._isUTC}function _o(){return!!this.isValid()&&this._isUTC&&0===this._offset}o.updateOffset=function(){};var To=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,Xo=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Bo(e,c){var n,o,t,a=e,i=null;return ro(e)?a={ms:e._milliseconds,d:e._days,M:e._months}:l(e)||!isNaN(+e)?(a={},c?a[c]=+e:a.milliseconds=+e):(i=To.exec(e))?(n="-"===i[1]?-1:1,a={y:0,d:le(i[Ue])*n,h:le(i[Ge])*n,m:le(i[Ve])*n,s:le(i[Ke])*n,ms:le(Mo(1e3*i[Qe]))*n}):(i=Xo.exec(e))?(n="-"===i[1]?-1:1,a={y:yo(i[2],n),M:yo(i[3],n),w:yo(i[4],n),d:yo(i[5],n),h:yo(i[6],n),m:yo(i[7],n),s:yo(i[8],n)}):null==a?a={}:"object"==typeof a&&("from"in a||"to"in a)&&(t=vo(Kn(a.from),Kn(a.to)),(a={}).ms=t.milliseconds,a.M=t.months),o=new io(a),ro(e)&&r(e,"_locale")&&(o._locale=e._locale),ro(e)&&r(e,"_isValid")&&(o._isValid=e._isValid),o}function yo(e,c){var n=e&&parseFloat(e.replace(",","."));return(isNaN(n)?0:n)*c}function So(e,c){var n={};return n.months=c.month()-e.month()+12*(c.year()-e.year()),e.clone().add(n.months,"M").isAfter(c)&&--n.months,n.milliseconds=+c-+e.clone().add(n.months,"M"),n}function vo(e,c){var n;return e.isValid()&&c.isValid()?(c=bo(c,e),e.isBefore(c)?n=So(e,c):((n=So(c,e)).milliseconds=-n.milliseconds,n.months=-n.months),n):{milliseconds:0,months:0}}function ko(e,c){return function(n,o){var t;return null===o||isNaN(+o)||(X(c,"moment()."+c+"(period, number) is deprecated. Please use moment()."+c+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),t=n,n=o,o=t),Co(this,Bo(n,o),e),this}}function Co(e,c,n,t){var a=c._milliseconds,i=Mo(c._days),r=Mo(c._months);e.isValid()&&(t=null==t||t,r&&lc(e,pe(e,"Month")+r*n),i&&de(e,"Date",pe(e,"Date")+i*n),a&&e._d.setTime(e._d.valueOf()+a*n),t&&o.updateOffset(e,i||r))}Bo.fn=io.prototype,Bo.invalid=ao;var Ro=ko(1,"add"),Eo=ko(-1,"subtract");function wo(e){return"string"==typeof e||e instanceof String}function Do(e){return N(e)||u(e)||wo(e)||l(e)||xo(e)||Po(e)||null==e}function Po(e){var c,n,o=i(e)&&!M(e),t=!1,a=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"];for(c=0;c<a.length;c+=1)n=a[c],t=t||r(e,n);return o&&t}function xo(e){var c=a(e),n=!1;return c&&(n=0===e.filter((function(c){return!l(c)&&wo(e)})).length),c&&n}function Io(e){var c,n,o=i(e)&&!M(e),t=!1,a=["sameDay","nextDay","lastDay","nextWeek","lastWeek","sameElse"];for(c=0;c<a.length;c+=1)n=a[c],t=t||r(e,n);return o&&t}function Ho(e,c){var n=e.diff(c,"days",!0);return n<-6?"sameElse":n<-1?"lastWeek":n<0?"lastDay":n<1?"sameDay":n<2?"nextDay":n<7?"nextWeek":"sameElse"}function Yo(e,c){1===arguments.length&&(arguments[0]?Do(arguments[0])?(e=arguments[0],c=void 0):Io(arguments[0])&&(c=arguments[0],e=void 0):(e=void 0,c=void 0));var n=e||Kn(),t=bo(n,this).startOf("day"),a=o.calendarFormat(this,t)||"sameElse",i=c&&(B(c[a])?c[a].call(this,n):c[a]);return this.format(i||this.localeData().calendar(a,this,Kn(n)))}function Fo(){return new q(this)}function jo(e,c){var n=N(e)?e:Kn(e);return!(!this.isValid()||!n.isValid())&&("millisecond"===(c=oe(c)||"millisecond")?this.valueOf()>n.valueOf():n.valueOf()<this.clone().startOf(c).valueOf())}function Uo(e,c){var n=N(e)?e:Kn(e);return!(!this.isValid()||!n.isValid())&&("millisecond"===(c=oe(c)||"millisecond")?this.valueOf()<n.valueOf():this.clone().endOf(c).valueOf()<n.valueOf())}function Go(e,c,n,o){var t=N(e)?e:Kn(e),a=N(c)?c:Kn(c);return!!(this.isValid()&&t.isValid()&&a.isValid())&&("("===(o=o||"()")[0]?this.isAfter(t,n):!this.isBefore(t,n))&&(")"===o[1]?this.isBefore(a,n):!this.isAfter(a,n))}function Vo(e,c){var n,o=N(e)?e:Kn(e);return!(!this.isValid()||!o.isValid())&&("millisecond"===(c=oe(c)||"millisecond")?this.valueOf()===o.valueOf():(n=o.valueOf(),this.clone().startOf(c).valueOf()<=n&&n<=this.clone().endOf(c).valueOf()))}function Ko(e,c){return this.isSame(e,c)||this.isAfter(e,c)}function Qo(e,c){return this.isSame(e,c)||this.isBefore(e,c)}function Jo(e,c,n){var o,t,a;if(!this.isValid())return NaN;if(!(o=bo(e,this)).isValid())return NaN;switch(t=6e4*(o.utcOffset()-this.utcOffset()),c=oe(c)){case"year":a=Zo(this,o)/12;break;case"month":a=Zo(this,o);break;case"quarter":a=Zo(this,o)/3;break;case"second":a=(this-o)/1e3;break;case"minute":a=(this-o)/6e4;break;case"hour":a=(this-o)/36e5;break;case"day":a=(this-o-t)/864e5;break;case"week":a=(this-o-t)/6048e5;break;default:a=this-o}return n?a:se(a)}function Zo(e,c){if(e.date()<c.date())return-Zo(c,e);var n=12*(c.year()-e.year())+(c.month()-e.month()),o=e.clone().add(n,"months");return-(n+(c-o<0?(c-o)/(o-e.clone().add(n-1,"months")):(c-o)/(e.clone().add(n+1,"months")-o)))||0}function $o(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function et(e){if(!this.isValid())return null;var c=!0!==e,n=c?this.clone().utc():this;return n.year()<0||n.year()>9999?Y(n,c?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):B(Date.prototype.toISOString)?c?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",Y(n,"Z")):Y(n,c?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")}function ct(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e,c,n,o,t="moment",a="";return this.isLocal()||(t=0===this.utcOffset()?"moment.utc":"moment.parseZone",a="Z"),e="["+t+'("]',c=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",n="-MM-DD[T]HH:mm:ss.SSS",o=a+'[")]',this.format(e+c+n+o)}function nt(e){e||(e=this.isUtc()?o.defaultFormatUtc:o.defaultFormat);var c=Y(this,e);return this.localeData().postformat(c)}function ot(e,c){return this.isValid()&&(N(e)&&e.isValid()||Kn(e).isValid())?Bo({to:this,from:e}).locale(this.locale()).humanize(!c):this.localeData().invalidDate()}function tt(e){return this.from(Kn(),e)}function at(e,c){return this.isValid()&&(N(e)&&e.isValid()||Kn(e).isValid())?Bo({from:this,to:e}).locale(this.locale()).humanize(!c):this.localeData().invalidDate()}function it(e){return this.to(Kn(),e)}function rt(e){var c;return void 0===e?this._locale._abbr:(null!=(c=hn(e))&&(this._locale=c),this)}o.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",o.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var Mt=W("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",(function(e){return void 0===e?this.localeData():this.locale(e)}));function st(){return this._locale}var lt=1e3,ut=60*lt,pt=60*ut,dt=3506328*pt;function bt(e,c){return(e%c+c)%c}function At(e,c,n){return e<100&&e>=0?new Date(e+400,c,n)-dt:new Date(e,c,n).valueOf()}function ft(e,c,n){return e<100&&e>=0?Date.UTC(e+400,c,n)-dt:Date.UTC(e,c,n)}function zt(e){var c,n;if(void 0===(e=oe(e))||"millisecond"===e||!this.isValid())return this;switch(n=this._isUTC?ft:At,e){case"year":c=n(this.year(),0,1);break;case"quarter":c=n(this.year(),this.month()-this.month()%3,1);break;case"month":c=n(this.year(),this.month(),1);break;case"week":c=n(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":c=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":c=n(this.year(),this.month(),this.date());break;case"hour":c=this._d.valueOf(),c-=bt(c+(this._isUTC?0:this.utcOffset()*ut),pt);break;case"minute":c=this._d.valueOf(),c-=bt(c,ut);break;case"second":c=this._d.valueOf(),c-=bt(c,lt)}return this._d.setTime(c),o.updateOffset(this,!0),this}function ht(e){var c,n;if(void 0===(e=oe(e))||"millisecond"===e||!this.isValid())return this;switch(n=this._isUTC?ft:At,e){case"year":c=n(this.year()+1,0,1)-1;break;case"quarter":c=n(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":c=n(this.year(),this.month()+1,1)-1;break;case"week":c=n(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":c=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":c=n(this.year(),this.month(),this.date()+1)-1;break;case"hour":c=this._d.valueOf(),c+=pt-bt(c+(this._isUTC?0:this.utcOffset()*ut),pt)-1;break;case"minute":c=this._d.valueOf(),c+=ut-bt(c,ut)-1;break;case"second":c=this._d.valueOf(),c+=lt-bt(c,lt)-1}return this._d.setTime(c),o.updateOffset(this,!0),this}function Ot(){return this._d.valueOf()-6e4*(this._offset||0)}function Lt(){return Math.floor(this.valueOf()/1e3)}function mt(){return new Date(this.valueOf())}function qt(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]}function Nt(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}}function gt(){return this.isValid()?this.toISOString():null}function Wt(){return z(this)}function _t(){return d({},f(this))}function Tt(){return f(this).overflow}function Xt(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function Bt(e,c){var n,t,a,i=this._eras||hn("en")._eras;for(n=0,t=i.length;n<t;++n)switch("string"==typeof i[n].since&&(a=o(i[n].since).startOf("day"),i[n].since=a.valueOf()),typeof i[n].until){case"undefined":i[n].until=1/0;break;case"string":a=o(i[n].until).startOf("day").valueOf(),i[n].until=a.valueOf()}return i}function yt(e,c,n){var o,t,a,i,r,M=this.eras();for(e=e.toUpperCase(),o=0,t=M.length;o<t;++o)if(a=M[o].name.toUpperCase(),i=M[o].abbr.toUpperCase(),r=M[o].narrow.toUpperCase(),n)switch(c){case"N":case"NN":case"NNN":if(i===e)return M[o];break;case"NNNN":if(a===e)return M[o];break;case"NNNNN":if(r===e)return M[o]}else if([a,i,r].indexOf(e)>=0)return M[o]}function St(e,c){var n=e.since<=e.until?1:-1;return void 0===c?o(e.since).year():o(e.since).year()+(c-e.offset)*n}function vt(){var e,c,n,o=this.localeData().eras();for(e=0,c=o.length;e<c;++e){if(n=this.clone().startOf("day").valueOf(),o[e].since<=n&&n<=o[e].until)return o[e].name;if(o[e].until<=n&&n<=o[e].since)return o[e].name}return""}function kt(){var e,c,n,o=this.localeData().eras();for(e=0,c=o.length;e<c;++e){if(n=this.clone().startOf("day").valueOf(),o[e].since<=n&&n<=o[e].until)return o[e].narrow;if(o[e].until<=n&&n<=o[e].since)return o[e].narrow}return""}function Ct(){var e,c,n,o=this.localeData().eras();for(e=0,c=o.length;e<c;++e){if(n=this.clone().startOf("day").valueOf(),o[e].since<=n&&n<=o[e].until)return o[e].abbr;if(o[e].until<=n&&n<=o[e].since)return o[e].abbr}return""}function Rt(){var e,c,n,t,a=this.localeData().eras();for(e=0,c=a.length;e<c;++e)if(n=a[e].since<=a[e].until?1:-1,t=this.clone().startOf("day").valueOf(),a[e].since<=t&&t<=a[e].until||a[e].until<=t&&t<=a[e].since)return(this.year()-o(a[e].since).year())*n+a[e].offset;return this.year()}function Et(e){return r(this,"_erasNameRegex")||Yt.call(this),e?this._erasNameRegex:this._erasRegex}function wt(e){return r(this,"_erasAbbrRegex")||Yt.call(this),e?this._erasAbbrRegex:this._erasRegex}function Dt(e){return r(this,"_erasNarrowRegex")||Yt.call(this),e?this._erasNarrowRegex:this._erasRegex}function Pt(e,c){return c.erasAbbrRegex(e)}function xt(e,c){return c.erasNameRegex(e)}function It(e,c){return c.erasNarrowRegex(e)}function Ht(e,c){return c._eraYearOrdinalRegex||Be}function Yt(){var e,c,n=[],o=[],t=[],a=[],i=this.eras();for(e=0,c=i.length;e<c;++e)o.push(De(i[e].name)),n.push(De(i[e].abbr)),t.push(De(i[e].narrow)),a.push(De(i[e].name)),a.push(De(i[e].abbr)),a.push(De(i[e].narrow));this._erasRegex=new RegExp("^("+a.join("|")+")","i"),this._erasNameRegex=new RegExp("^("+o.join("|")+")","i"),this._erasAbbrRegex=new RegExp("^("+n.join("|")+")","i"),this._erasNarrowRegex=new RegExp("^("+t.join("|")+")","i")}function Ft(e,c){x(0,[e,e.length],0,c)}function jt(e){return Jt.call(this,e,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function Ut(e){return Jt.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)}function Gt(){return gc(this.year(),1,4)}function Vt(){return gc(this.isoWeekYear(),1,4)}function Kt(){var e=this.localeData()._week;return gc(this.year(),e.dow,e.doy)}function Qt(){var e=this.localeData()._week;return gc(this.weekYear(),e.dow,e.doy)}function Jt(e,c,n,o,t){var a;return null==e?Nc(this,o,t).year:(c>(a=gc(e,o,t))&&(c=a),Zt.call(this,e,c,n,o,t))}function Zt(e,c,n,o,t){var a=qc(e,c,n,o,t),i=Lc(a.year,0,a.dayOfYear);return this.year(i.getUTCFullYear()),this.month(i.getUTCMonth()),this.date(i.getUTCDate()),this}function $t(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)}x("N",0,0,"eraAbbr"),x("NN",0,0,"eraAbbr"),x("NNN",0,0,"eraAbbr"),x("NNNN",0,0,"eraName"),x("NNNNN",0,0,"eraNarrow"),x("y",["y",1],"yo","eraYear"),x("y",["yy",2],0,"eraYear"),x("y",["yyy",3],0,"eraYear"),x("y",["yyyy",4],0,"eraYear"),Re("N",Pt),Re("NN",Pt),Re("NNN",Pt),Re("NNNN",xt),Re("NNNNN",It),xe(["N","NN","NNN","NNNN","NNNNN"],(function(e,c,n,o){var t=n._locale.erasParse(e,o,n._strict);t?f(n).era=t:f(n).invalidEra=e})),Re("y",Be),Re("yy",Be),Re("yyy",Be),Re("yyyy",Be),Re("yo",Ht),xe(["y","yy","yyy","yyyy"],Fe),xe(["yo"],(function(e,c,n,o){var t;n._locale._eraYearOrdinalRegex&&(t=e.match(n._locale._eraYearOrdinalRegex)),n._locale.eraYearOrdinalParse?c[Fe]=n._locale.eraYearOrdinalParse(e,t):c[Fe]=parseInt(e,10)})),x(0,["gg",2],0,(function(){return this.weekYear()%100})),x(0,["GG",2],0,(function(){return this.isoWeekYear()%100})),Ft("gggg","weekYear"),Ft("ggggg","weekYear"),Ft("GGGG","isoWeekYear"),Ft("GGGGG","isoWeekYear"),ne("weekYear","gg"),ne("isoWeekYear","GG"),ie("weekYear",1),ie("isoWeekYear",1),Re("G",ye),Re("g",ye),Re("GG",qe,he),Re("gg",qe,he),Re("GGGG",_e,Le),Re("gggg",_e,Le),Re("GGGGG",Te,me),Re("ggggg",Te,me),Ie(["gggg","ggggg","GGGG","GGGGG"],(function(e,c,n,o){c[o.substr(0,2)]=le(e)})),Ie(["gg","GG"],(function(e,c,n,t){c[t]=o.parseTwoDigitYear(e)})),x("Q",0,"Qo","quarter"),ne("quarter","Q"),ie("quarter",7),Re("Q",ze),xe("Q",(function(e,c){c[je]=3*(le(e)-1)})),x("D",["DD",2],"Do","date"),ne("date","D"),ie("date",9),Re("D",qe),Re("DD",qe,he),Re("Do",(function(e,c){return e?c._dayOfMonthOrdinalParse||c._ordinalParse:c._dayOfMonthOrdinalParseLenient})),xe(["D","DD"],Ue),xe("Do",(function(e,c){c[Ue]=le(e.match(qe)[0])}));var ea=ue("Date",!0);function ca(e){var c=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?c:this.add(e-c,"d")}x("DDD",["DDDD",3],"DDDo","dayOfYear"),ne("dayOfYear","DDD"),ie("dayOfYear",4),Re("DDD",We),Re("DDDD",Oe),xe(["DDD","DDDD"],(function(e,c,n){n._dayOfYear=le(e)})),x("m",["mm",2],0,"minute"),ne("minute","m"),ie("minute",14),Re("m",qe),Re("mm",qe,he),xe(["m","mm"],Ve);var na=ue("Minutes",!1);x("s",["ss",2],0,"second"),ne("second","s"),ie("second",15),Re("s",qe),Re("ss",qe,he),xe(["s","ss"],Ke);var oa,ta,aa=ue("Seconds",!1);for(x("S",0,0,(function(){return~~(this.millisecond()/100)})),x(0,["SS",2],0,(function(){return~~(this.millisecond()/10)})),x(0,["SSS",3],0,"millisecond"),x(0,["SSSS",4],0,(function(){return 10*this.millisecond()})),x(0,["SSSSS",5],0,(function(){return 100*this.millisecond()})),x(0,["SSSSSS",6],0,(function(){return 1e3*this.millisecond()})),x(0,["SSSSSSS",7],0,(function(){return 1e4*this.millisecond()})),x(0,["SSSSSSSS",8],0,(function(){return 1e5*this.millisecond()})),x(0,["SSSSSSSSS",9],0,(function(){return 1e6*this.millisecond()})),ne("millisecond","ms"),ie("millisecond",16),Re("S",We,ze),Re("SS",We,he),Re("SSS",We,Oe),oa="SSSS";oa.length<=9;oa+="S")Re(oa,Be);function ia(e,c){c[Qe]=le(1e3*("0."+e))}for(oa="S";oa.length<=9;oa+="S")xe(oa,ia);function ra(){return this._isUTC?"UTC":""}function Ma(){return this._isUTC?"Coordinated Universal Time":""}ta=ue("Milliseconds",!1),x("z",0,0,"zoneAbbr"),x("zz",0,0,"zoneName");var sa=q.prototype;function la(e){return Kn(1e3*e)}function ua(){return Kn.apply(null,arguments).parseZone()}function pa(e){return e}sa.add=Ro,sa.calendar=Yo,sa.clone=Fo,sa.diff=Jo,sa.endOf=ht,sa.format=nt,sa.from=ot,sa.fromNow=tt,sa.to=at,sa.toNow=it,sa.get=be,sa.invalidAt=Tt,sa.isAfter=jo,sa.isBefore=Uo,sa.isBetween=Go,sa.isSame=Vo,sa.isSameOrAfter=Ko,sa.isSameOrBefore=Qo,sa.isValid=Wt,sa.lang=Mt,sa.locale=rt,sa.localeData=st,sa.max=Jn,sa.min=Qn,sa.parsingFlags=_t,sa.set=Ae,sa.startOf=zt,sa.subtract=Eo,sa.toArray=qt,sa.toObject=Nt,sa.toDate=mt,sa.toISOString=et,sa.inspect=ct,"undefined"!=typeof Symbol&&null!=Symbol.for&&(sa[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),sa.toJSON=gt,sa.toString=$o,sa.unix=Lt,sa.valueOf=Ot,sa.creationData=Xt,sa.eraName=vt,sa.eraNarrow=kt,sa.eraAbbr=Ct,sa.eraYear=Rt,sa.year=zc,sa.isLeapYear=hc,sa.weekYear=jt,sa.isoWeekYear=Ut,sa.quarter=sa.quarters=$t,sa.month=uc,sa.daysInMonth=pc,sa.week=sa.weeks=Bc,sa.isoWeek=sa.isoWeeks=yc,sa.weeksInYear=Kt,sa.weeksInWeekYear=Qt,sa.isoWeeksInYear=Gt,sa.isoWeeksInISOWeekYear=Vt,sa.date=ea,sa.day=sa.days=jc,sa.weekday=Uc,sa.isoWeekday=Gc,sa.dayOfYear=ca,sa.hour=sa.hours=tn,sa.minute=sa.minutes=na,sa.second=sa.seconds=aa,sa.millisecond=sa.milliseconds=ta,sa.utcOffset=fo,sa.utc=ho,sa.local=Oo,sa.parseZone=Lo,sa.hasAlignedHourOffset=mo,sa.isDST=qo,sa.isLocal=go,sa.isUtcOffset=Wo,sa.isUtc=_o,sa.isUTC=_o,sa.zoneAbbr=ra,sa.zoneName=Ma,sa.dates=W("dates accessor is deprecated. Use date instead.",ea),sa.months=W("months accessor is deprecated. Use month instead",uc),sa.years=W("years accessor is deprecated. Use year instead",zc),sa.zone=W("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",zo),sa.isDSTShifted=W("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",No);var da=v.prototype;function ba(e,c,n,o){var t=hn(),a=b().set(o,c);return t[n](a,e)}function Aa(e,c,n){if(l(e)&&(c=e,e=void 0),e=e||"",null!=c)return ba(e,c,n,"month");var o,t=[];for(o=0;o<12;o++)t[o]=ba(e,o,n,"month");return t}function fa(e,c,n,o){"boolean"==typeof e?(l(c)&&(n=c,c=void 0),c=c||""):(n=c=e,e=!1,l(c)&&(n=c,c=void 0),c=c||"");var t,a=hn(),i=e?a._week.dow:0,r=[];if(null!=n)return ba(c,(n+i)%7,o,"day");for(t=0;t<7;t++)r[t]=ba(c,(t+i)%7,o,"day");return r}function za(e,c){return Aa(e,c,"months")}function ha(e,c){return Aa(e,c,"monthsShort")}function Oa(e,c,n){return fa(e,c,n,"weekdays")}function La(e,c,n){return fa(e,c,n,"weekdaysShort")}function ma(e,c,n){return fa(e,c,n,"weekdaysMin")}da.calendar=C,da.longDateFormat=U,da.invalidDate=V,da.ordinal=J,da.preparse=pa,da.postformat=pa,da.relativeTime=$,da.pastFuture=ee,da.set=y,da.eras=Bt,da.erasParse=yt,da.erasConvertYear=St,da.erasAbbrRegex=wt,da.erasNameRegex=Et,da.erasNarrowRegex=Dt,da.months=ic,da.monthsShort=rc,da.monthsParse=sc,da.monthsRegex=bc,da.monthsShortRegex=dc,da.week=Wc,da.firstDayOfYear=Xc,da.firstDayOfWeek=Tc,da.weekdays=xc,da.weekdaysMin=Hc,da.weekdaysShort=Ic,da.weekdaysParse=Fc,da.weekdaysRegex=Vc,da.weekdaysShortRegex=Kc,da.weekdaysMinRegex=Qc,da.isPM=nn,da.meridiem=an,An("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var c=e%10;return e+(1===le(e%100/10)?"th":1===c?"st":2===c?"nd":3===c?"rd":"th")}}),o.lang=W("moment.lang is deprecated. Use moment.locale instead.",An),o.langData=W("moment.langData is deprecated. Use moment.localeData instead.",hn);var qa=Math.abs;function Na(){var e=this._data;return this._milliseconds=qa(this._milliseconds),this._days=qa(this._days),this._months=qa(this._months),e.milliseconds=qa(e.milliseconds),e.seconds=qa(e.seconds),e.minutes=qa(e.minutes),e.hours=qa(e.hours),e.months=qa(e.months),e.years=qa(e.years),this}function ga(e,c,n,o){var t=Bo(c,n);return e._milliseconds+=o*t._milliseconds,e._days+=o*t._days,e._months+=o*t._months,e._bubble()}function Wa(e,c){return ga(this,e,c,1)}function _a(e,c){return ga(this,e,c,-1)}function Ta(e){return e<0?Math.floor(e):Math.ceil(e)}function Xa(){var e,c,n,o,t,a=this._milliseconds,i=this._days,r=this._months,M=this._data;return a>=0&&i>=0&&r>=0||a<=0&&i<=0&&r<=0||(a+=864e5*Ta(ya(r)+i),i=0,r=0),M.milliseconds=a%1e3,e=se(a/1e3),M.seconds=e%60,c=se(e/60),M.minutes=c%60,n=se(c/60),M.hours=n%24,i+=se(n/24),r+=t=se(Ba(i)),i-=Ta(ya(t)),o=se(r/12),r%=12,M.days=i,M.months=r,M.years=o,this}function Ba(e){return 4800*e/146097}function ya(e){return 146097*e/4800}function Sa(e){if(!this.isValid())return NaN;var c,n,o=this._milliseconds;if("month"===(e=oe(e))||"quarter"===e||"year"===e)switch(c=this._days+o/864e5,n=this._months+Ba(c),e){case"month":return n;case"quarter":return n/3;case"year":return n/12}else switch(c=this._days+Math.round(ya(this._months)),e){case"week":return c/7+o/6048e5;case"day":return c+o/864e5;case"hour":return 24*c+o/36e5;case"minute":return 1440*c+o/6e4;case"second":return 86400*c+o/1e3;case"millisecond":return Math.floor(864e5*c)+o;default:throw new Error("Unknown unit "+e)}}function va(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*le(this._months/12):NaN}function ka(e){return function(){return this.as(e)}}var Ca=ka("ms"),Ra=ka("s"),Ea=ka("m"),wa=ka("h"),Da=ka("d"),Pa=ka("w"),xa=ka("M"),Ia=ka("Q"),Ha=ka("y");function Ya(){return Bo(this)}function Fa(e){return e=oe(e),this.isValid()?this[e+"s"]():NaN}function ja(e){return function(){return this.isValid()?this._data[e]:NaN}}var Ua=ja("milliseconds"),Ga=ja("seconds"),Va=ja("minutes"),Ka=ja("hours"),Qa=ja("days"),Ja=ja("months"),Za=ja("years");function $a(){return se(this.days()/7)}var ei=Math.round,ci={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function ni(e,c,n,o,t){return t.relativeTime(c||1,!!n,e,o)}function oi(e,c,n,o){var t=Bo(e).abs(),a=ei(t.as("s")),i=ei(t.as("m")),r=ei(t.as("h")),M=ei(t.as("d")),s=ei(t.as("M")),l=ei(t.as("w")),u=ei(t.as("y")),p=a<=n.ss&&["s",a]||a<n.s&&["ss",a]||i<=1&&["m"]||i<n.m&&["mm",i]||r<=1&&["h"]||r<n.h&&["hh",r]||M<=1&&["d"]||M<n.d&&["dd",M];return null!=n.w&&(p=p||l<=1&&["w"]||l<n.w&&["ww",l]),(p=p||s<=1&&["M"]||s<n.M&&["MM",s]||u<=1&&["y"]||["yy",u])[2]=c,p[3]=+e>0,p[4]=o,ni.apply(null,p)}function ti(e){return void 0===e?ei:"function"==typeof e&&(ei=e,!0)}function ai(e,c){return void 0!==ci[e]&&(void 0===c?ci[e]:(ci[e]=c,"s"===e&&(ci.ss=c-1),!0))}function ii(e,c){if(!this.isValid())return this.localeData().invalidDate();var n,o,t=!1,a=ci;return"object"==typeof e&&(c=e,e=!1),"boolean"==typeof e&&(t=e),"object"==typeof c&&(a=Object.assign({},ci,c),null!=c.s&&null==c.ss&&(a.ss=c.s-1)),o=oi(this,!t,a,n=this.localeData()),t&&(o=n.pastFuture(+this,o)),n.postformat(o)}var ri=Math.abs;function Mi(e){return(e>0)-(e<0)||+e}function si(){if(!this.isValid())return this.localeData().invalidDate();var e,c,n,o,t,a,i,r,M=ri(this._milliseconds)/1e3,s=ri(this._days),l=ri(this._months),u=this.asSeconds();return u?(e=se(M/60),c=se(e/60),M%=60,e%=60,n=se(l/12),l%=12,o=M?M.toFixed(3).replace(/\.?0+$/,""):"",t=u<0?"-":"",a=Mi(this._months)!==Mi(u)?"-":"",i=Mi(this._days)!==Mi(u)?"-":"",r=Mi(this._milliseconds)!==Mi(u)?"-":"",t+"P"+(n?a+n+"Y":"")+(l?a+l+"M":"")+(s?i+s+"D":"")+(c||e||M?"T":"")+(c?r+c+"H":"")+(e?r+e+"M":"")+(M?r+o+"S":"")):"P0D"}var li=io.prototype;return li.isValid=to,li.abs=Na,li.add=Wa,li.subtract=_a,li.as=Sa,li.asMilliseconds=Ca,li.asSeconds=Ra,li.asMinutes=Ea,li.asHours=wa,li.asDays=Da,li.asWeeks=Pa,li.asMonths=xa,li.asQuarters=Ia,li.asYears=Ha,li.valueOf=va,li._bubble=Xa,li.clone=Ya,li.get=Fa,li.milliseconds=Ua,li.seconds=Ga,li.minutes=Va,li.hours=Ka,li.days=Qa,li.weeks=$a,li.months=Ja,li.years=Za,li.humanize=ii,li.toISOString=si,li.toString=si,li.toJSON=si,li.locale=rt,li.localeData=st,li.toIsoString=W("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",si),li.lang=Mt,x("X",0,0,"unix"),x("x",0,0,"valueOf"),Re("x",ye),Re("X",ke),xe("X",(function(e,c,n){n._d=new Date(1e3*parseFloat(e))})),xe("x",(function(e,c,n){n._d=new Date(le(e))})),
|
|
2
2
|
//! moment.js
|
|
3
3
|
o.version="2.29.1",t(Kn),o.fn=sa,o.min=$n,o.max=eo,o.now=co,o.utc=b,o.unix=la,o.months=za,o.isDate=u,o.locale=An,o.invalid=h,o.duration=Bo,o.isMoment=N,o.weekdays=Oa,o.parseZone=ua,o.localeData=hn,o.isDuration=ro,o.monthsShort=ha,o.weekdaysMin=ma,o.defineLocale=fn,o.updateLocale=zn,o.locales=On,o.weekdaysShort=La,o.normalizeUnits=oe,o.relativeTimeRounding=ti,o.relativeTimeThreshold=ai,o.calendarFormat=Ho,o.prototype=sa,o.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},o}()})),ve=Be((function(e){
|
|
4
4
|
//! moment-timezone.js
|
|
@@ -10,37 +10,5 @@ var c,n;c=this,n=function(e){void 0===e.version&&e.default&&(e=e.default);var c,
|
|
|
10
10
|
//! moment.js locale configuration
|
|
11
11
|
var c="nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän".split(" "),n=["nolla","yhden","kahden","kolmen","neljän","viiden","kuuden",c[7],c[8],c[9]];function o(e,o,t,a){var i="";switch(t){case"s":return a?"muutaman sekunnin":"muutama sekunti";case"ss":i=a?"sekunnin":"sekuntia";break;case"m":return a?"minuutin":"minuutti";case"mm":i=a?"minuutin":"minuuttia";break;case"h":return a?"tunnin":"tunti";case"hh":i=a?"tunnin":"tuntia";break;case"d":return a?"päivän":"päivä";case"dd":i=a?"päivän":"päivää";break;case"M":return a?"kuukauden":"kuukausi";case"MM":i=a?"kuukauden":"kuukautta";break;case"y":return a?"vuoden":"vuosi";case"yy":i=a?"vuoden":"vuotta"}return i=function(e,o){return e<10?o?n[e]:c[e]:e}(e,a)+" "+i,i}return e.defineLocale("fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] HH.mm",llll:"ddd, Do MMM YYYY, [klo] HH.mm"},calendar:{sameDay:"[tänään] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s päästä",past:"%s sitten",s:o,ss:o,m:o,mm:o,h:o,hh:o,d:o,dd:o,M:o,MM:o,y:o,yy:o},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})},n(Se)})),Be((function(e,c){var n;n=function(e){return e.defineLocale("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),weekdaysShort:"sön_mån_tis_ons_tor_fre_lör".split("_"),weekdaysMin:"sö_må_ti_on_to_fr_lö".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Igår] LT",nextWeek:"[På] dddd LT",lastWeek:"[I] dddd[s] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"för %s sedan",s:"några sekunder",ss:"%d sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en månad",MM:"%d månader",y:"ett år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}(\:e|\:a)/,ordinal:function(e){var c=e%10;return e+(1==~~(e%100/10)?":e":1===c||2===c?":a":":e")},week:{dow:1,doy:4}})},n(Se)})),Be((function(e,c){var n;n=function(e){
|
|
12
12
|
//! moment.js locale configuration
|
|
13
|
-
function c(e,c,n,o){var t={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],w:["eine Woche","einer Woche"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return c?t[n][0]:t[n][1]}return e.defineLocale("de",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:c,mm:"%d Minuten",h:c,hh:"%d Stunden",d:c,dd:c,w:c,ww:"%d Wochen",M:c,MM:c,y:c,yy:c},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})},n(Se)})),{de:{address:"Adresse","address-place-or-business":"Adress, Ort or Geschäft","add-via-button-label":"Füge Zwischenziel hinzu","add-via-duration-button-label":"Set stop duration at via point {{index}}","add-via-duration-button-label-close":"Close stop duration selector at via point {{index}}","add-via-duration-button-label-open":"Open stop duration selector at via point {{index}}",airplane:"Flug",arrival:"Ankunft",back:"Zurück",bikerentalstation:"Leihrad-Station",bus:"Bus",cancel:"Abbrechen","clear-button-label":"Löschen","clear-search-history":"Suchhistorie löschen",currentposition:"Aktuelle Position",delete:"Löschen","delete-old-searches-header":"Wollen Sie die Such-Historie löschen?",departure:"Abfahrt",destination:"Ziel","give-origin":"Start eingeben.","give-destination":"Ziel eingeben.",favourite:"Favoriten",ferry:"Fähre","future-route":"Zukünftige Verbindung",origin:"Start","origin-stop-near-you":"Start",ownlocations:"Eigene Favoriten",loading:"Laden...","minute-short":"min",rail:"Zug",search:"Suche","search-address-or-place":"Suche anhand von Adresse oder Ortsangabe","search-button-label":"Suche","search-destination":"Suche Zielort, Linie or Haltestelle","search-destination-index":"Zielort eingeben","search-destination-results-but-no-search":"Ergebnisse in “Zielort”-Reiter anzeigen","search-no-results":"Kein Ort gefunden.","search-origin":"Suche Startort, Linie oder Haltestelle","search-origin-index":"Startort eingeben","search-position":"Standort ermitteln","search-autosuggest-label-desktop":"Venue, place and stopsearch. Navigate list with arrow keys and select with enter key","search-autosuggest-label-mobile":"Venue, place and stopsearch.","search-autosuggest-len":"There is {{count}} suggestion available","search-autosuggest-len_plural":"There are {{count}} suggestions available","search-current-suggestion":"Aktuelle Auswahl: {{selection}}",street:"Straße",subway:"U-Bahn",station:"Station",stop:"Haltestelle","stop-near-you":"Suche Haltestellen und Linien in der Nähe","stop-near-you-bus":"Suche Buslinien or Haltestellen","stop-near-you-citybike":"Suche Leihrad-Stationen","stop-near-you-rail":"Suche Zugverbindungen oder Bahnhöfe","stop-near-you-subway":"Suche U-Bahn-Linien oder Haltestellen","stop-near-you-tram":"Suche Stadtbahn-Haltestellen-Suche","today-at":"Heute um","tomorrow-at":"Morgen um",tram:"Straßenbahn","use-own-position":"Benutze aktuellen Standort","select-from-map":"Wähle Position anhand Karte","select-from-own-locations":"Aus eigenen Favoriten auswählen",venue:"Venue","via-point":"Zwischenziel",where:"Wohin?",place:"Ort"},en:{address:"Address","address-place-or-business":"Address, place or business","add-via-button-label":"Add via point","add-via-duration-button-label":"Set stop duration at via point {{index}}","add-via-duration-button-label-close":"Close stop duration selector at via point {{index}}","add-via-duration-button-label-open":"Open stop duration selector at via point {{index}}",airplane:"Flight",arrival:"Arrival",back:"Back",bikepark:"Park & Ride for bikes",bikerentalstation:"Bike station",bus:"bus",cancel:"Cancel",carpark:"Park & Ride","clear-button-label":"Clear","clear-search-history":"Clear search history",currentposition:"Current position",delete:"Delete","delete-old-searches-header":"Do you want to clear the search history?",departure:"Departure",destination:"Destination","give-origin":"Enter your origin.","give-destination":"Enter your destination",favourite:"Favourite",ferry:"Ferry","future-route":"Future route",origin:"Start","origin-stop-near-you":"Start",ownlocations:"Own locations",loading:"Loading...","minute-short":"m",platform:"Platform",rail:"Train",required:"required field",search:"Search","search-address-or-place":"Search by address or place name","search-button-label":"Search","search-destination":"Search destination, route or stop","search-destination-index":"Enter destination","search-destination-results-but-no-search":"View results in the adjacent “Destination” tab","search-no-results":"No location","search-origin":"Search origin, route or stop","search-origin-index":"Enter origin","search-position":"Detect location","search-autosuggest-label-desktop":"Venue, place and stopsearch. Navigate list with arrow keys and select with enter key","search-autosuggest-label-mobile":"Venue, place and stopsearch. Enter the location and navigate in the list by swiping.","search-autosuggest-len":"There is {{count}} suggestion available","search-autosuggest-len_plural":"There are {{count}} suggestions available","search-current-suggestion":"Current selection: {{selection}}",street:"Street",subway:"Metro",station:"Station",stop:"Stop","stop-near-you":"Search stops and routes","stop-near-you-airplane":"Search flights or airports","stop-near-you-bus":"Search bus routes or stops","stop-near-you-citybike":"Search city bike stations","stop-near-you-rail":"Search train routes or stations","stop-near-you-subway":"Search metro routes or stations ","stop-near-you-tram":"Search tram routes or stops","stop-route-station":"Bus and stop search","today-at":"today at","tomorrow-at":"tomorrow at",tram:"Tram",track:"Track","use-own-position":"Use current location","select-from-map":"Select position from map","select-from-own-locations":"Select from own locations",venue:"Venue","via-point":"Via point",where:"Where to?",place:"Location"},fi:{address:"Osoite","address-place-or-business":"Osoite, paikka tai yritys","add-via-button-label":"Lisää välipiste","add-via-duration-button-label":"Aseta välipisteelle {{index}} pysähdyksen kesto","add-via-duration-button-label-close":"Avaa välipisteen {{index}} pysähdyksen kesto valitsin","add-via-duration-button-label-open":"Sulje välipisteen {{index}} pysähdyksen kesto valitsin",airplane:"Lentokone",arrival:"Perillä",back:"Takaisin",bikerentalstation:"Pyöräasema",bikepark:"Liityntäpyöräparkki",bus:"bussi",cancel:"Peruuta",carpark:"Liityntäpysäkointi","clear-button-label":"Tyhjennä","clear-search-history":"Tyhjennä hakuhistoria",currentposition:"Tämänhetkinen sijainti",delete:"Poista","delete-old-searches-header":"Haluatko tyhjentää hakuhistorian?",departure:"Lähtöaika",destination:"Määränpää",favourite:"Suosikki",ferry:"Lautta","future-route":"Tuleva reitti","give-origin":"Lähtöpaikka","give-destination":"Määränpää",origin:"Lähtöpaikka","origin-stop-near-you":"Lähtöpaikka",ownlocations:"Omat paikat",loading:"Ladataan...","minute-short":"min",platform:"Laituri",rail:"Juna",required:"pakollinen kenttä",search:"Etsi","search-address-or-place":"Hae osoitteella tai paikan nimellä","search-button-label":"Hae","search-destination":"Hae määränpäätä, linjaa tai pysäkkiä","search-destination-index":"Syötä määränpää","search-destination-results-but-no-search":"Katso tulokset viereiseltä Määränpää-välilehdeltä","search-no-results":"Ei tuloksia","search-origin":"Hae lähtöpaikkaa, linjaa tai pysäkkiä","search-origin-index":"Syötä lähtöpaikka","search-autosuggest-label-desktop":"Paikka, linja ja pysäkkihaku. Navigoi listassa nuolinäppäimillä ja valitse enterillä","search-autosuggest-label-mobile":"Paikka, linja ja pysäkkihaku. Syötä sijainti ja navigoi listassa pyyhkäisemällä.","search-autosuggest-len":" Löydettiin {{count}} ehdotus","search-autosuggest-len_plural":" Löydettiin {{count}} ehdotusta","search-current-suggestion":"Tämänhetkinen valinta: {{selection}}","search-position":"Paikanna",street:"Katu",subway:"Metro",station:"Asema",stop:"Pysäkki","stop-near-you":"Linja, pysäkki tai asema","stop-near-you-airplane":"Hae lentoja tai lentoasemaa","stop-near-you-bus":"Hae bussilinjaa tai pysäkkiä","stop-near-you-citybike":"Hae kaupunkipyöräasemaa","stop-near-you-rail":"Hae lähijunaa tai asemaa","stop-near-you-subway":"Hae metrolinjaa tai asemaa","stop-near-you-tram":"Hae raitiolinjaa tai pysäkkiä","stop-route-station":"Linja- ja pysäkkihaku","today-at":"tänään klo","tomorrow-at":"huomenna klo",tram:"Raitiovaunu",track:"Raide","use-own-position":"Käytä nykyistä sijaintia","select-from-map":"Valitse sijainti kartalta","select-from-own-locations":"Valitse omista paikoista",venue:"Paikka","via-point":"Välipiste",where:"Minne mennään?",place:"Paikka"},sv:{address:"Adress","address-place-or-business":"Adress, plats eller företag","add-via-button-label":"Lägg till viapunkt","add-via-duration-button-label":"Ställ in varaktighet för viapunkten {{index}}","add-via-duration-button-label-close":"Stäng väljaren för varaktighet vid via-punkten {{index}}","add-via-duration-button-label-open":"Öppna väljaren för varaktighet vid via-punkten {{index}}",airplane:"Flyg",arrival:"Anländer",back:"Tillbaka",bikerentalstation:"Stadscykelstation",bikepark:"Anslutningsparkering för cyklar",bus:"Bussi",cancel:"Avbryt",carpark:"Infartsparkering","clear-button-label":"Töm","clear-search-history":"Töm sökhistoriken",currentposition:"Nuvarande position",delete:"Ta bort","delete-old-searches-header":"Vill du tömma sökhistoriken?",departure:"Avgångstid",destination:"Destination",favourite:"Favorit",ferry:"Färja","future-route":"Framtida rutt","give-destination":"Skriv in din destination","give-origin":"Skriv in din avfärdsplats",origin:"Avfärdsplats","origin-stop-near-you":"Avfärdsplats",ownlocations:"Egna platser",loading:"Laddar...","minute-short":"min",platform:"Plattform",rail:"Tåg",required:"obligatoriskt fält",search:"Sök","search-address-or-place":"Sök med adressen eller platsens namn","search-button-label":"Sök","search-destination":"Sök destination, linje eller hållplats","search-destination-index":"Skriv destination","search-destination-results-but-no-search":"Se resultaten under fliken Destination","search-no-results":"Inga sökresultat","search-origin":"Sök avfärdsplats, linje eller hållplats","search-origin-index":"Skriv avfärdsplats","search-position":"Sök position","search-autosuggest-label-desktop":"Plats, linje och hållplatssökning. Navigera listan med piltangenterna och välj med Enter-tangeten","search-autosuggest-label-mobile":"Plats, linje och hållplatssökning. Ange platsen och navigera i listan genom att svepa.","search-autosuggest-len":"Hittade {{count}} förslag","search-current-suggestion":"Nuvarande val: {{selection}}",street:"Gata",subway:"Metro",station:"Station",stop:"Hållplats","stop-near-you":"Sök hållplatser eller linjer","stop-near-you-airplane":"Sök flyg eller flygplatser","stop-near-you-bus":"Sök busslinjer eller hållplatser","stop-near-you-citybike":"Sök stadscykelstationer","stop-near-you-rail":"Sök närtåger eller stationer","stop-near-you-subway":"Sök metrolinjer eller stationer","stop-near-you-tram":"Sök spårvagnlinjer eller hållplatser","stop-route-station":"Buss och stopp sökningen","today-at":"i dag kl","tomorrow-at":"i morgon",tram:"Spårvagn",track:"Spår","use-own-position":"Använd min position","select-from-map":"Välj position från kartan","select-from-own-locations":"Välj från egna platser",venue:"Mötesplats","via-point":"Via punkt",where:"Vart vill du åka?",place:"Plats"}});function Ie(e,c){void 0===c&&(c={});var n=c.insertAt;if(e&&"undefined"!=typeof document){var o=document.head||document.getElementsByTagName("head")[0],t=document.createElement("style");t.type="text/css","top"===n&&o.firstChild?o.insertBefore(t,o.firstChild):o.appendChild(t),t.styleSheet?t.styleSheet.cssText=e:t.appendChild(document.createTextNode(e))}}var He={container:"styles_container__KXfyb",input:"styles_input__XmNBn",favourite:"styles_favourite__sjGcX",thin:"styles_thin__y3lnY",hasValue:"styles_hasValue__tzCTr",suggestionsContainerOpen:"styles_suggestionsContainerOpen__4AZDX",suggestionsContainer:"styles_suggestionsContainer__3dsEd",suggestionsList:"styles_suggestionsList__esTtR",suggestion:"styles_suggestion__7itfO",suggestionHighlighted:"styles_suggestionHighlighted__XUxvC","autosuggest-input-container":"styles_autosuggest-input-container__ZkKGO",origin:"styles_origin__ivlHi",destination:"styles_destination__y39VH","stop-route-station":"styles_stop-route-station__FneXd","autosuggest-input-icon":"styles_autosuggest-input-icon__uhYGQ","origin-stop-near-you":"styles_origin-stop-near-you__Ekwp-","clear-input":"styles_clear-input__Vx7B4","sr-only":"styles_sr-only__ZOrQT"};Ie("/* stylelint-disable */\ninput[type='text'] {\n margin: 0; }\n\n.styles_container__KXfyb {\n display: flex;\n width: 100%; }\n .styles_container__KXfyb .styles_input__XmNBn {\n font-size: 16px;\n font-family: 'Gotham Rounded A', 'Gotham Rounded B', 'Roboto', Arial, Georgia, Serif;\n display: flex;\n width: 100%;\n height: 44px;\n border-radius: 5px;\n border: solid 1px #888888;\n background-color: #ffffff;\n padding-left: 50px;\n padding-right: 44px;\n line-height: 1.2;\n letter-spacing: -0.5px;\n color: #333;\n box-sizing: border-box;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none; }\n .styles_container__KXfyb .styles_input__XmNBn.styles_favourite__sjGcX {\n padding-left: 47px; }\n .styles_container__KXfyb .styles_input__XmNBn.styles_thin__y3lnY {\n height: 34px; }\n .styles_container__KXfyb .styles_input__XmNBn:focus {\n background: #fff;\n outline: none;\n border: solid 1px var(--color);\n box-shadow: none;\n box-shadow: 0px 0px 2px 1px var(--hover-color); }\n @media screen and (min-width: 768px) {\n .styles_container__KXfyb .styles_input__XmNBn {\n font-size: 15px;\n height: 44px;\n padding-left: 49px; } }\n .styles_container__KXfyb .styles_input__XmNBn::placeholder {\n color: #666666;\n opacity: 1;\n font-size: 15px; }\n\n.styles_hasValue__tzCTr {\n color: #333333; }\n\n.styles_suggestionsContainerOpen__4AZDX {\n width: 100%;\n max-height: 44vh;\n border-radius: 5px;\n box-shadow: 0 2px 0 0 rgba(0, 0, 0, 0.06);\n border: solid 1px rgba(0, 0, 0, 0.1);\n overflow-x: hidden;\n overflow-y: scroll;\n position: absolute;\n background-color: white;\n top: calc(3 * 0.875rem + 9px);\n z-index: 20; }\n\n.styles_suggestionsContainer__3dsEd {\n background-color: white;\n z-index: 20; }\n .styles_suggestionsContainer__3dsEd .styles_suggestionsList__esTtR {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n background: white; }\n .styles_suggestionsContainer__3dsEd .styles_suggestionsList__esTtR li:hover {\n background: #F4F4F5; }\n\n.styles_suggestion__7itfO {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n cursor: pointer;\n list-style: none;\n display: block;\n overflow-x: hidden;\n overflow-y: hidden;\n white-space: nowrap; }\n\n.styles_suggestionHighlighted__XUxvC {\n background-color: #F4F4F5; }\n\n.styles_autosuggest-input-container__ZkKGO {\n position: relative;\n width: 100%; }\n .styles_autosuggest-input-container__ZkKGO.styles_origin__ivlHi {\n z-index: 16; }\n .styles_autosuggest-input-container__ZkKGO.styles_destination__y39VH {\n z-index: 10; }\n .styles_autosuggest-input-container__ZkKGO.styles_stop-route-station__FneXd {\n z-index: 9; }\n\n.styles_autosuggest-input-icon__uhYGQ {\n display: flex;\n position: absolute;\n align-items: center;\n width: 16px;\n height: 100%;\n margin-top: 0;\n margin-left: 19px; }\n .styles_autosuggest-input-icon__uhYGQ svg {\n width: 16px;\n height: 24px; }\n .styles_autosuggest-input-icon__uhYGQ.styles_origin__ivlHi svg {\n fill: #4ea700;\n width: 16px;\n height: 24px; }\n .styles_autosuggest-input-icon__uhYGQ.styles_destination__y39VH svg {\n fill: #ec5188;\n width: 16px;\n height: 24px; }\n .styles_autosuggest-input-icon__uhYGQ.styles_stop-route-station__FneXd svg, .styles_autosuggest-input-icon__uhYGQ.styles_favourite__sjGcX svg {\n fill: #888888;\n width: 16px;\n height: 16px; }\n .styles_autosuggest-input-icon__uhYGQ.styles_origin-stop-near-you__Ekwp- svg {\n fill: #888888;\n width: 16px;\n height: 16px; }\n\nbutton.styles_clear-input__Vx7B4 {\n display: flex;\n position: absolute;\n padding: 14px 0;\n right: 0px;\n width: 44px;\n height: 100%;\n color: var(--color);\n outline: none;\n border: 0px;\n margin: 0px;\n justify-content: center;\n text-align: left;\n background: none;\n border-style: none;\n border-width: 0px;\n cursor: pointer;\n font-family: inherit;\n background-color: transparent;\n transition: none; }\n button.styles_clear-input__Vx7B4 svg {\n fill: var(--color);\n width: 16px;\n height: 16px; }\n button.styles_clear-input__Vx7B4:focus {\n background-color: transparent;\n color: inherit;\n /* First apply outline that is used in Edge and Firefox */\n outline: 1px dotted #212121;\n /* Then override outline for webkit browsers like Chrome, this has no effect on other browsers */\n outline: 5px auto -webkit-focus-ring-color; }\n button.styles_clear-input__Vx7B4:active {\n background-color: transparent;\n color: inherit; }\n button.styles_clear-input__Vx7B4:hover {\n background-color: transparent;\n color: inherit; }\n\n.styles_sr-only__ZOrQT:not(:focus):not(:active) {\n clip: rect(0 0 0 0);\n -webkit-clip-path: inset(50%);\n clip-path: inset(50%);\n height: 1px;\n overflow: hidden;\n position: absolute;\n white-space: nowrap;\n width: 1px; }\n");var Ye={"fullscreen-root":"MobileSearch_fullscreen-root__WkMna","combobox-container":"MobileSearch_combobox-container__sRkYS","right-column":"MobileSearch_right-column__erBFe","combobox-icon":"MobileSearch_combobox-icon__xd0iZ","combobox-label":"MobileSearch_combobox-label__OqGpe",container:"MobileSearch_container__k-UVq",input:"MobileSearch_input__HbTUj","clear-input":"MobileSearch_clear-input__ILVwN",hasValue:"MobileSearch_hasValue__NYhZy",suggestion:"MobileSearch_suggestion__UBz5O",suggestionHighlighted:"MobileSearch_suggestionHighlighted__7ef5G",suggestionsContainerOpen:"MobileSearch_suggestionsContainerOpen__g7zkI",suggestionsList:"MobileSearch_suggestionsList__3pEzf","clear-search-history":"MobileSearch_clear-search-history__wblhz","mobile-modal-overlay":"MobileSearch_mobile-modal-overlay__f6Rl7","mobile-modal":"MobileSearch_mobile-modal__hNdM6","mobile-modal-content":"MobileSearch_mobile-modal-content__Yzz-V"};Ie("input[type='text'] {\n margin: 0;\n padding: 0; }\n\n.MobileSearch_fullscreen-root__WkMna {\n display: flex;\n flex-direction: column;\n position: fixed;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n background: #fff;\n z-index: 1000; }\n\n.MobileSearch_combobox-container__sRkYS {\n margin: 15px 10px 0;\n border: solid #888888 1px;\n display: flex;\n align-items: center;\n border-radius: 5px;\n height: 60px;\n justify-content: space-between; }\n .MobileSearch_combobox-container__sRkYS .MobileSearch_right-column__erBFe {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n padding-top: 9px; }\n\n.MobileSearch_combobox-icon__xd0iZ {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 52px; }\n .MobileSearch_combobox-icon__xd0iZ svg {\n fill: #007ac9;\n width: 14px;\n height: 21px;\n transform: rotate(-180deg); }\n\n.MobileSearch_combobox-label__OqGpe {\n position: relative;\n top: -2px;\n font-size: 12px;\n font-weight: var(--font-weight-medium);\n letter-spacing: -0.2px;\n color: #333333; }\n\n.MobileSearch_container__k-UVq {\n display: flex;\n align-items: center;\n width: 100%; }\n .MobileSearch_container__k-UVq .MobileSearch_input__HbTUj {\n font-family: 'Gotham Rounded A', 'Gotham Rounded B', 'Roboto', Arial, Georgia, Serif;\n width: 100%;\n position: relative;\n padding-bottom: 7px;\n top: 2px;\n border: none;\n height: 26px;\n font-weight: normal;\n box-shadow: none;\n font-size: 16px;\n letter-spacing: -0.5px;\n color: #666666;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none; }\n .MobileSearch_container__k-UVq .MobileSearch_input__HbTUj:focus {\n outline: none;\n border: none;\n box-shadow: none;\n background: #fff; }\n\nbutton.MobileSearch_clear-input__ILVwN {\n display: flex;\n align-items: center;\n right: 0px;\n padding: 0 15px 7px 0;\n height: 26px;\n color: var(--color);\n border: 0px;\n margin: 0px;\n justify-content: center;\n text-align: left;\n background: none;\n border-style: none;\n border-width: 0px;\n cursor: pointer;\n font-family: inherit;\n background-color: transparent;\n transition: none; }\n button.MobileSearch_clear-input__ILVwN svg {\n fill: var(--color);\n width: 16px;\n height: 16px; }\n button.MobileSearch_clear-input__ILVwN:focus {\n background-color: transparent;\n color: inherit; }\n button.MobileSearch_clear-input__ILVwN:active {\n background-color: transparent;\n color: inherit; }\n button.MobileSearch_clear-input__ILVwN:hover {\n background-color: transparent;\n color: inherit; }\n\n.MobileSearch_hasValue__NYhZy {\n color: #333333; }\n\n.MobileSearch_suggestion__UBz5O {\n font-size: 15px;\n min-height: 50px;\n letter-spacing: -0.6px;\n color: #333333;\n font-weight: 500;\n background: #fff;\n margin: 0;\n padding: 0; }\n\n.MobileSearch_suggestionHighlighted__7ef5G {\n background-color: #F4F4F5; }\n\n.MobileSearch_suggestionsContainerOpen__g7zkI {\n display: flex;\n position: absolute;\n margin-bottom: auto;\n z-index: 20;\n width: 100vw;\n max-height: calc(100% - 75px);\n height: 100%;\n top: 75px;\n left: 0;\n overflow-x: hidden;\n overflow-y: scroll; }\n .MobileSearch_suggestionsContainerOpen__g7zkI .MobileSearch_suggestionsList__3pEzf {\n width: 100vw;\n list-style: none;\n padding-left: 0;\n margin: 0;\n background: #f4f4f5; }\n\n.MobileSearch_clear-search-history__wblhz {\n display: flex;\n margin-top: auto;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 62px;\n background: #f4f4f5;\n color: var(--accessible-primary-color);\n font-size: 15px;\n font-weight: var(--font-weight-medium);\n letter-spacing: -0.42px;\n border-top: 1px solid #ddd; }\n\n.MobileSearch_mobile-modal-overlay__f6Rl7 {\n z-index: 9999;\n top: 0;\n left: 0;\n right: unset;\n bottom: unset;\n margin: 0;\n padding: 0;\n width: 100%;\n height: 100%;\n background-color: white;\n position: fixed; }\n\n.MobileSearch_mobile-modal__hNdM6 {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n /* stylelint-disable-next-line */\n /* stylelint-disable-next-line */ }\n .MobileSearch_mobile-modal__hNdM6.ReactModal__Content--after-open > div {\n transform: translateY(0); }\n .MobileSearch_mobile-modal__hNdM6.ReactModal__Content--before-close > div {\n transform: translateY(10%); }\n\n.MobileSearch_mobile-modal-content__Yzz-V {\n position: fixed;\n width: 100%;\n height: 100%;\n outline: none;\n background-color: #ffffff;\n transition: transform 0.25s;\n transform: translateY(10%); }\n");var Fe={"fullscreen-root":"MobileNoScroll_fullscreen-root__zQN50","combobox-container":"MobileNoScroll_combobox-container__RDEiT","right-column":"MobileNoScroll_right-column__0P3qe","combobox-icon":"MobileNoScroll_combobox-icon__LA0rD","combobox-label":"MobileNoScroll_combobox-label__-rYsj",container:"MobileNoScroll_container__CaIIv",input:"MobileNoScroll_input__Opft5","clear-input":"MobileNoScroll_clear-input__-4SQO",hasValue:"MobileNoScroll_hasValue__jR1iW",suggestion:"MobileNoScroll_suggestion__NAWcY",suggestionHighlighted:"MobileNoScroll_suggestionHighlighted__V0GuG",suggestionsContainerOpen:"MobileNoScroll_suggestionsContainerOpen__MRa5Y",suggestionsList:"MobileNoScroll_suggestionsList__NUpJE","clear-search-history":"MobileNoScroll_clear-search-history__Cjj-1","mobile-modal-overlay":"MobileNoScroll_mobile-modal-overlay__LbLie","mobile-modal":"MobileNoScroll_mobile-modal__-Rx-A","mobile-modal-content":"MobileNoScroll_mobile-modal-content__nfrCI"};function je(e){var c=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,o=ne(e);if(c){var t=ne(this).constructor;n=Reflect.construct(o,arguments,t)}else n=o.apply(this,arguments);return ce(this,n)}}Ie("input[type='text'] {\n margin: 0;\n padding: 0; }\n\n.MobileNoScroll_fullscreen-root__zQN50 {\n display: flex;\n flex-direction: column;\n position: fixed;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n background: #fff;\n z-index: 1000; }\n\n.MobileNoScroll_combobox-container__RDEiT {\n margin: 15px 10px 0;\n border: solid #888888 1px;\n display: flex;\n align-items: center;\n border-radius: 5px;\n height: 60px;\n justify-content: space-between; }\n .MobileNoScroll_combobox-container__RDEiT .MobileNoScroll_right-column__0P3qe {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n padding-top: 9px; }\n\n.MobileNoScroll_combobox-icon__LA0rD {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 52px; }\n .MobileNoScroll_combobox-icon__LA0rD svg {\n fill: #007ac9;\n width: 14px;\n height: 21px;\n transform: rotate(-180deg); }\n\n.MobileNoScroll_combobox-label__-rYsj {\n position: relative;\n top: -2px;\n font-size: 12px;\n font-weight: var(--font-weight-medium);\n letter-spacing: -0.2px;\n color: #333333; }\n\n.MobileNoScroll_container__CaIIv {\n display: flex;\n align-items: center;\n width: 100%; }\n .MobileNoScroll_container__CaIIv .MobileNoScroll_input__Opft5 {\n font-family: 'Gotham Rounded A', 'Gotham Rounded B', 'Roboto', Arial, Georgia, Serif;\n width: 100%;\n position: relative;\n padding-bottom: 7px;\n top: 2px;\n border: none;\n height: 26px;\n font-weight: normal;\n box-shadow: none;\n font-size: 16px;\n letter-spacing: -0.5px;\n color: #666666;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none; }\n .MobileNoScroll_container__CaIIv .MobileNoScroll_input__Opft5:focus {\n outline: none;\n border: none;\n box-shadow: none;\n background: #fff; }\n\nbutton.MobileNoScroll_clear-input__-4SQO {\n display: flex;\n align-items: center;\n right: 0px;\n padding: 0 15px 7px 0;\n height: 26px;\n color: var(--color);\n border: 0px;\n margin: 0px;\n justify-content: center;\n text-align: left;\n background: none;\n border-style: none;\n border-width: 0px;\n cursor: pointer;\n font-family: inherit;\n background-color: transparent;\n transition: none; }\n button.MobileNoScroll_clear-input__-4SQO svg {\n fill: var(--color);\n width: 16px;\n height: 16px; }\n button.MobileNoScroll_clear-input__-4SQO:focus {\n background-color: transparent;\n color: inherit; }\n button.MobileNoScroll_clear-input__-4SQO:active {\n background-color: transparent;\n color: inherit; }\n button.MobileNoScroll_clear-input__-4SQO:hover {\n background-color: transparent;\n color: inherit; }\n\n.MobileNoScroll_hasValue__jR1iW {\n color: #333333; }\n\n.MobileNoScroll_suggestion__NAWcY {\n font-size: 15px;\n min-height: 50px;\n letter-spacing: -0.6px;\n color: #333333;\n font-weight: 500;\n background: #fff;\n margin: 0;\n padding: 0; }\n\n.MobileNoScroll_suggestionHighlighted__V0GuG {\n background-color: #F4F4F5; }\n\n.MobileNoScroll_suggestionsContainerOpen__MRa5Y {\n display: flex;\n position: absolute;\n margin-bottom: auto;\n z-index: 20;\n width: 100vw;\n max-height: calc(100% - 75px);\n height: 100%;\n top: 75px;\n left: 0;\n overflow-x: hidden;\n overflow-y: scroll; }\n .MobileNoScroll_suggestionsContainerOpen__MRa5Y .MobileNoScroll_suggestionsList__NUpJE {\n width: 100vw;\n list-style: none;\n padding-left: 0;\n margin: 0;\n background: #f4f4f5; }\n\n.MobileNoScroll_clear-search-history__Cjj-1 {\n display: flex;\n margin-top: auto;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 62px;\n background: #f4f4f5;\n color: var(--accessible-primary-color);\n font-size: 15px;\n font-weight: var(--font-weight-medium);\n letter-spacing: -0.42px;\n border-top: 1px solid #ddd; }\n\n.MobileNoScroll_mobile-modal-overlay__LbLie {\n z-index: 9999;\n top: 0;\n left: 0;\n right: unset;\n bottom: unset;\n margin: 0;\n padding: 0;\n width: 100%;\n height: 100%;\n background-color: white;\n position: fixed; }\n\n.MobileNoScroll_mobile-modal__-Rx-A {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n /* stylelint-disable-next-line */\n /* stylelint-disable-next-line */ }\n .MobileNoScroll_mobile-modal__-Rx-A.ReactModal__Content--after-open > div {\n transform: translateY(0); }\n .MobileNoScroll_mobile-modal__-Rx-A.ReactModal__Content--before-close > div {\n transform: translateY(10%); }\n\n.MobileNoScroll_mobile-modal-content__nfrCI {\n position: fixed;\n width: 100%;\n height: 100%;\n outline: none;\n background-color: #ffffff;\n transition: transform 0.25s;\n transform: translateY(10%); }\n\n.MobileNoScroll_suggestionsContainerOpen__MRa5Y {\n -ms-overflow-style: none;\n /* Internet Explorer 10+ */\n scrollbar-width: none;\n /* Firefox */ }\n .MobileNoScroll_suggestionsContainerOpen__MRa5Y::-webkit-scrollbar {\n display: none;\n /* Safari and Chrome */ }\n");var Ue=function(e){$(n,e);var c=je(n);function n(e){var o;K(this,n);var t=ee(o=c.call(this,e));return t.onSuggestionTouchMove=function(){t.justSelectedSuggestion=!1,t.pressedSuggestion=null},o}return J(n)}(T.default),Ge=function(e){var c,o=e.appElement,t=e.id,a=e.closeHandle,i=e.clearInput,r=e.value,M=e.suggestions,s=e.inputProps,l=e.fetchFunction,u=e.renderSuggestion,p=e.getSuggestionValue,d=e.ariaLabel,b=e.label,A=e.onSuggestionSelected,f=e.clearOldSearches,z=e.dialogHeaderText,h=e.dialogPrimaryButtonText,O=e.dialogSecondaryButtonText,L=e.clearInputButtonText,m=e.focusInput,q=e.color,N=e.hoverColor,W=e.accessiblePrimaryColor,_=e.searchOpen,T=e.fontWeights,X=e.showScroll?Ye:Fe,B="".concat(t,"-input"),y="".concat(t,"-label"),S=oe(n.useState(!1),2),v=S[0],k=S[1],C=g.default.useRef();n.useEffect((function(){H.default.setAppElement(o)}),[]);var R=n.useCallback((function(){a()})),E=function(e,c){"clear-search-history"===c.suggestion.type?k(!0):c.suggestion.properties.arrowClicked||A(e,c)},w=function(e){var c=e&&(e.key||e.which||e.keyCode)||"";return!(!c||![13," ","Spacebar"].concat([32,"Enter"]).includes(c))&&(e.preventDefault(),!0)},D=function(e){return"clear-search-history"===e.type?"":p(e)},P=function(e){return"clear-search-history"===e.type?g.default.createElement("button",{type:"button",className:X["clear-search-history"]},e.labelId):u(e)};return m&&null!==(c=C.current)&&void 0!==c&&c.input&&C.current.input.focus(),g.default.createElement(H.default,{isOpen:_,className:X["mobile-modal"],overlayClassName:X["mobile-modal-overlay"],onAfterClose:R,shouldCloseOnEsc:!0},g.default.createElement("div",{className:X["mobile-modal-content"],style:{"--color":"".concat(q),"--accessible-primary-color":W,"--hover-color":"".concat(N),"--font-weight-medium":T.medium}},g.default.createElement("div",{className:X["combobox-container"],htmlFor:B},g.default.createElement("button",{type:"button",className:X["combobox-icon"],onClick:function(){return R()},onKeyDown:function(e){return w(e)&&R()},"aria-label":O,tabIndex:0},g.default.createElement(x.default,{img:"arrow"})),g.default.createElement("span",{className:X["right-column"]},g.default.createElement("span",{className:X["combobox-label"],id:y},b),g.default.createElement(Ue,{alwaysRenderSuggestions:!0,id:t,suggestions:M,onSuggestionsFetchRequested:l,getSuggestionValue:D,renderSuggestion:P,focusInputOnSuggestionClick:!0,shouldRenderSuggestions:function(){return!0},inputProps:j({},s,{className:"".concat(X.input," ").concat(X[t]||""," ").concat(s.value?X.hasValue:""),autoFocus:!0}),renderInputComponent:function(e){return g.default.createElement(g.default.Fragment,null,g.default.createElement("input",Object.assign({"aria-label":d,id:t},e)),r&&g.default.createElement("button",{type:"button",className:X["clear-input"],onClick:i,onKeyDown:function(e){return w(e)&&i()},"aria-label":L},g.default.createElement(x.default,{img:"close",color:q})))},theme:X,onSuggestionSelected:E,ref:C}))),g.default.createElement(Y.default,{appElement:o,isModalOpen:v,handleClose:function(){return k(!1)},headerText:z,primaryButtonText:h,secondaryButtonText:O,primaryButtonOnClick:function(){f(),k(!1)},secondaryButtonOnClick:function(){return k(!1)},color:q,hoverColor:N,fontWeights:T})))};"production"!==process.env.NODE_ENV&&(Ge.propTypes={appElement:N.default.string.isRequired,id:N.default.string.isRequired,closeHandle:N.default.func.isRequired,clearInput:N.default.func.isRequired,value:N.default.string,clearInputButtonText:N.default.string.isRequired,suggestions:N.default.array.isRequired,inputProps:N.default.shape({onChange:N.default.func.isRequired,onBlur:N.default.func.isRequired,value:N.default.string.isRequired,placeholder:N.default.string.isRequired,className:N.default.string.isRequired}).isRequired,fetchFunction:N.default.func.isRequired,getSuggestionValue:N.default.func.isRequired,renderSuggestion:N.default.func.isRequired,onSuggestionSelected:N.default.func.isRequired,label:N.default.string.isRequired,clearOldSearches:N.default.func.isRequired,ariaLabel:N.default.string,dialogHeaderText:N.default.string,dialogPrimaryButtonText:N.default.string,dialogSecondaryButtonText:N.default.string,focusInput:N.default.bool,color:N.default.string,hoverColor:N.default.string,accessiblePrimaryColor:N.default.string.isRequired,searchOpen:N.default.bool.isRequired,fontWeights:N.default.shape({medium:N.default.number.isRequired}).isRequired,showScroll:N.default.bool});var Ve,Ke=Be((function(e,c){var n;"undefined"!=typeof self&&self,n=function(e){return function(e){var c={};function n(o){if(c[o])return c[o].exports;var t=c[o]={i:o,l:!1,exports:{}};return e[o].call(t.exports,t,t.exports,n),t.l=!0,t.exports}return n.m=e,n.c=c,n.d=function(e,c,o){n.o(e,c)||Object.defineProperty(e,c,{enumerable:!0,get:o})},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,c){if(1&c&&(e=n(e)),8&c)return e;if(4&c&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&c&&"string"!=typeof e)for(var t in e)n.d(o,t,function(c){return e[c]}.bind(null,t));return o},n.n=function(e){var c=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(c,"a",c),c},n.o=function(e,c){return Object.prototype.hasOwnProperty.call(e,c)},n.p="",n(n.s="./packages/hooks/src/index.ts")}({"./packages/hooks/src/index.ts":
|
|
14
|
-
/*!*************************************!*\
|
|
15
|
-
!*** ./packages/hooks/src/index.ts ***!
|
|
16
|
-
\*************************************/
|
|
17
|
-
/*! no static exports found */function(e,c,n){var o=this&&this.__createBinding||(Object.create?function(e,c,n,o){void 0===o&&(o=n),Object.defineProperty(e,o,{enumerable:!0,get:function(){return c[n]}})}:function(e,c,n,o){void 0===o&&(o=n),e[o]=c[n]}),t=this&&this.__exportStar||function(e,c){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(c,n)||o(c,e,n)};Object.defineProperty(c,"__esModule",{value:!0}),t(n(/*! ./useOutsideReacter */"./packages/hooks/src/useOutsideReacter.tsx"),c),t(n(/*! ./useScrollLock */"./packages/hooks/src/useScrollLock.ts"),c),t(n(/*! ./useArrowNavigation */"./packages/hooks/src/useArrowNavigation.tsx"),c),t(n(/*! ./useIntersectionObserver */"./packages/hooks/src/useIntersectionObserver.ts"),c),t(n(/*! ./useIsBreakpoint */"./packages/hooks/src/useIsBreakpoint.ts"),c),t(n(/*! ./useIsomorphicLayoutEffect */"./packages/hooks/src/useIsomorphicLayoutEffect.ts"),c)},"./packages/hooks/src/useArrowNavigation.tsx":
|
|
18
|
-
/*!***************************************************!*\
|
|
19
|
-
!*** ./packages/hooks/src/useArrowNavigation.tsx ***!
|
|
20
|
-
\***************************************************/
|
|
21
|
-
/*! no static exports found */function(e,c,n){Object.defineProperty(c,"__esModule",{value:!0}),c.useArrowNavigation=void 0;var o=n(/*! react */"react");c.useArrowNavigation=function(e){var c=e.listItems,n=e.onArrowUpOrDown,t=(0,o.useState)(0),a=t[0],i=t[1],r=(0,o.useCallback)((function(e){i(e)}),[c]),M=function(e){var o=e.key;if(null==c?void 0:c.length)if("ArrowUp"===o)n&&n(),e.preventDefault(),r(a>0?a-1:c.length-1);else{if("ArrowDown"!==o)return;n&&n(),e.preventDefault(),a<c.length-1?r(a+1):r(0)}};return(0,o.useEffect)((function(){return window.addEventListener("keydown",M),function(){return window.removeEventListener("keydown",M)}})),(0,o.useEffect)((function(){r(0)}),[c]),{selectedIndex:a}}},"./packages/hooks/src/useIntersectionObserver.ts":
|
|
22
|
-
/*!*******************************************************!*\
|
|
23
|
-
!*** ./packages/hooks/src/useIntersectionObserver.ts ***!
|
|
24
|
-
\*******************************************************/
|
|
25
|
-
/*! no static exports found */function(e,c,n){Object.defineProperty(c,"__esModule",{value:!0}),c.useIntersectionObserver=void 0;var o=n(/*! react */"react");c.useIntersectionObserver=function(e){var c=(0,o.useRef)(null),n=(0,o.useState)(!1),t=n[0],a=n[1],i=function(e){var c=e[0];a(c.isIntersecting)};return(0,o.useEffect)((function(){if(window&&window.IntersectionObserver){var n=new IntersectionObserver(i,e),o=c.current;return c.current&&n.observe(c.current),function(){o&&n.unobserve(o)}}a(!1)}),[c,e]),{containerRef:c,isVisible:t}},c.default=c.useIntersectionObserver},"./packages/hooks/src/useIsBreakpoint.ts":
|
|
26
|
-
/*!***********************************************!*\
|
|
27
|
-
!*** ./packages/hooks/src/useIsBreakpoint.ts ***!
|
|
28
|
-
\***********************************************/
|
|
29
|
-
/*! no static exports found */function(e,c,n){Object.defineProperty(c,"__esModule",{value:!0}),c.useIsBreakpoint=void 0;var o=n(/*! react */"react"),t={xs:1,mobileSmall:320,mobile:375,tablet:768,tabletLarge:920,desktopSmall:1024,desktop:1260,desktopLarge:1440};c.useIsBreakpoint=function(e){var c=(0,o.useState)(null),n=c[0],a=c[1],i=(0,o.useCallback)((function(){a(window.innerWidth)}),[]);return(0,o.useEffect)((function(){i()}),[]),(0,o.useEffect)((function(){return window.addEventListener("resize",i,{passive:!0}),function(){return window.removeEventListener("resize",i)}}),[i,n]),n>=t[e]},c.default=c.useIsBreakpoint},"./packages/hooks/src/useIsomorphicLayoutEffect.ts":
|
|
30
|
-
/*!*********************************************************!*\
|
|
31
|
-
!*** ./packages/hooks/src/useIsomorphicLayoutEffect.ts ***!
|
|
32
|
-
\*********************************************************/
|
|
33
|
-
/*! no static exports found */function(e,c,n){Object.defineProperty(c,"__esModule",{value:!0}),c.useIsomorphicLayoutEffect=void 0;var o=n(/*! react */"react");c.useIsomorphicLayoutEffect="undefined"!=typeof window?o.useLayoutEffect:o.useEffect,c.default=c.useIsomorphicLayoutEffect},"./packages/hooks/src/useOutsideReacter.tsx":
|
|
34
|
-
/*!**************************************************!*\
|
|
35
|
-
!*** ./packages/hooks/src/useOutsideReacter.tsx ***!
|
|
36
|
-
\**************************************************/
|
|
37
|
-
/*! no static exports found */function(e,c,n){Object.defineProperty(c,"__esModule",{value:!0}),c.useOutsideReacter=void 0;var o=n(/*! react */"react");c.useOutsideReacter=function(e,c){function n(n){e.current&&!e.current.contains(n.target)&&c()}(0,o.useEffect)((function(){return document.addEventListener("mousedown",n),function(){document.removeEventListener("mousedown",n)}}))}},"./packages/hooks/src/useScrollLock.ts":
|
|
38
|
-
/*!*********************************************!*\
|
|
39
|
-
!*** ./packages/hooks/src/useScrollLock.ts ***!
|
|
40
|
-
\*********************************************/
|
|
41
|
-
/*! no static exports found */function(e,c,n){Object.defineProperty(c,"__esModule",{value:!0}),c.useScrollLock=void 0;var o=n(/*! react */"react");c.useScrollLock=function(){return{lock:(0,o.useCallback)((function(){var e=window.scrollY+"px",c=document.body;c.style.position="fixed",c.style.top="-"+e}),[]),unlock:(0,o.useCallback)((function(){var e=document.body,c=e.style.top,n=-1*parseInt(c||"0");e.style.position="",e.style.top="",n&&window.scrollTo(0,-1*parseInt(c||"0"))}),[])}}},react:
|
|
42
|
-
/*!************************!*\
|
|
43
|
-
!*** external "react" ***!
|
|
44
|
-
\************************/
|
|
45
|
-
/*! no static exports found */function(c,n){c.exports=e}})},e.exports=n(g.default)})),Qe=(Ve=Ke)&&Ve.__esModule&&Object.prototype.hasOwnProperty.call(Ve,"default")?Ve.default:Ve;function Je(e){var c=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,o=ne(e);if(c){var t=ne(this).constructor;n=Reflect.construct(o,arguments,t)}else n=o.apply(this,arguments);return ce(this,n)}}Pe.locale("en"),W.default.init({fallbackLng:"fi",defaultNS:"translation",interpolation:{escapeValue:!1}});"production"!==process.env.NODE_ENV&&N.default.node;var Ze=function(e){if(e&&e.GTFS.platform){var c=e.GTFS,n=c.modes,o=c.platform;return[n&&"RAIL"===n[0]?W.default.t("track"):W.default.t("platform"),o]}};function $e(e){if("FutureRoute"!==e.type){if("SelectFromMap"===e.type)return["",W.default.t("select-from-map")];if("CurrentLocation"===e.type)return["",W.default.t("use-own-position")];if("SelectFromOwnLocations"===e.type)return["",W.default.t("select-from-own-locations")];var c,n=oe(Ae(e.properties,!0),2),o=n[0],t=n[1];if(e.properties.layer.toLowerCase().includes("bikerental")||e.properties.layer.toLowerCase().includes("bikestation"))return[c=W.default.t("bikerentalstation"),o,void 0,e.properties.labelId];if("bikepark"===e.properties.layer)return[c=W.default.t("bikepark"),o,void 0,void 0];if("carpark"===e.properties.layer)return[c=W.default.t("carpark"),o,void 0,void 0];if(e.properties.mode)c=W.default.t(e.properties.mode.toLowerCase().replace("favourite",""));else{var a=e.properties.layer.replace("route-","").toLowerCase().replace("favourite","");c=W.default.t(a)}if(e.properties.id&&("stop"===e.properties.layer||"station"===e.properties.layer)){var i,r=de(e.properties),M=null===(i=e.properties.addendum)||void 0===i?void 0:i.GTFS.modes,s=Ze(e.properties.addendum);return[c,ue(o,r),t,r,M,s]}if("favouriteStop"===e.properties.layer||"favouriteStation"===e.properties.layer){var l=e.properties,u=l.address,p=l.code;return[c,u?ue(u.split(",")[0],p):o,t,p,void 0,Ze(e.properties.addendum)]}return[c,o,t]}var d=e.properties,b=d.origin,A=d.destination,f=b.locality?", ".concat(b.locality," foobar"):"",z=A.locality?", ".concat(A.locality):"",h=b.name,O=A.name;return[W.default.t("future-route"),"".concat(W.default.t("origin")," ").concat(h).concat(f," ").concat(W.default.t("destination")," ").concat(O).concat(z),e.translatedText]}function ec(e){var c=Pe.unix(e.properties.time),n=e.properties.arriveBy?W.default.t("arrival"):W.default.t("departure");return n=c.isSame(Pe(),"day")?"".concat(n," ").concat(W.default.t("today-at")):c.isSame(Pe().add(1,"day"),"day")?"".concat(n," ").concat(W.default.t("tomorrow-at")):"".concat(n," ").concat(c.format("dd D.M.")),n="".concat(n," ").concat(Pe(c).format("HH:mm"))}var cc=function(e){$(n,e);var c=Je(n);function n(e){var o;return K(this,n),(o=c.call(this,e)).componentDidUpdate=function(){W.default.language!==o.props.lang&&W.default.changeLanguage(o.props.lang)},o.UNSAFE_componentWillReceiveProps=function(e){e.value===o.state.value||o.state.editing||o.setState({value:e.value})},o.onChange=function(e,c){var n=c.newValue,t=c.method,a={value:o.fInput||n||"",renderMobileSearch:o.props.isMobile};if(o.fInput=null,o.state.editing){if("enter"!==t||o.state.valid){if(o.state.typingTimer&&clearTimeout(o.state.typingTimer),"type"===t){var i=setTimeout((function(){o.setState({typing:!1})}),1e3);a.typingTimer=i,a.typing=!0}o.setState(a)}}else a.editing=!0,o.setState(a,(function(){return o.fetchFunction({value:n||""})}))},o.onBlur=function(){o.state.renderMobileSearch||(o.state.editing&&o.input.focus(),o.setState({editing:!1,renderMobileSearch:!1,value:o.props.value}))},o.onSelected=function(e,c){if(o.state.valid){if("SelectFromOwnLocations"===c.suggestion.type)return void o.setState({sources:["Favourite","Back"],ownPlaces:!0,pendingSelection:c.suggestion.type,value:""},(function(){o.fetchFunction({value:""})}));if("back"===c.suggestion.type||"FutureRoute"===c.suggestion.type)return void o.setState({sources:o.props.sources,ownPlaces:!1,pendingSelection:c.suggestion.type,suggestionIndex:c.suggestionIndex},(function(){o.fetchFunction({value:""})}));o.selectionDone=!0,o.setState({editing:!1,value:c.suggestionValue},(function(){o.input.blur(),o.props.handleViaPoints?o.props.handleViaPoints(c.suggestion,c.suggestionIndex):o.props.onSelect(c.suggestion,o.props.id),o.setState({renderMobileSearch:!1,sources:o.props.sources,ownPlaces:!1,suggestions:[]},(function(){o.selectionDone=!1})),!o.props.focusChange||o.props.isMobile&&!o.props.isEmbedded||o.props.focusChange(),o.props.isMobile&&o.closeMobileSearch()}))}else o.setState((function(e){return{pendingSelection:e.value}}),(function(){return o.checkPendingSelection()}))},o.onSuggestionsClearRequested=function(){o.setState({suggestions:[],sources:o.props.sources,ownPlaces:!1,editing:!1})},o.getSuggestionValue=function(e){return"SelectFromOwnLocations"===e.type||"back"===e.type?"":function(e){var c=Ae(e,!0);switch(e.layer){case"selectFromMap":case"currentPosition":case"ownLocations":case"back":return c[1]||c[0];case"favouriteBikeRentalStation":case"favouritePlace":return c[0];default:return c.length>1&&""!==c[1]?c.join(", "):c[1]||c[0]}}(e.properties)},o.checkPendingSelection=function(){"SelectFromOwnLocations"!==o.state.pendingSelection&&"back"!==o.state.pendingSelection||!o.state.valid?o.state.pendingSelection&&o.state.valid&&o.setState({pendingSelection:null,editing:!1},(function(){o.state.suggestions.length&&(o.input.blur(),o.props.onSelect(o.state.suggestions[o.state.suggestionIndex],o.props.id),o.props.isMobile&&o.closeMobileSearch(),!o.props.focusChange||o.props.isMobile&&!o.props.isEmbedded||o.props.focusChange())})):o.setState({pendingSelection:null,editing:!0},(function(){o.input.focus()}))},o.clearButton=function(){return g.default.createElement("button",{type:"button",className:He["clear-input"],onClick:o.clearInput,"aria-label":W.default.t("clear-button-label")},g.default.createElement(x.default,{img:"close",color:o.props.color}))},o.fetchFunction=function(e){var c=e.value,n=e.cleanExecuted;return o.setState({valid:!1,cleanExecuted:n||!1},(function(){if(!o.selectionDone){var e,n=I.default(o.props.targets)||o.props.targets.includes("Locations");o.state.ownPlaces?(e=["Locations"],(I.default(o.props.targets)||o.props.targets.includes("Stops"))&&e.push("Stops"),(I.default(o.props.targets)||o.props.targets.includes("BikeRentalStations"))&&e.push("BikeRentalStations")):I.default(o.props.targets)||(e=V(o.props.targets),n&&!o.props.isMobile&&(I.default(o.props.sources)||o.props.sources.includes("Favourite"))&&e.push("SelectFromOwnLocations")),function(e,c,n,o,t,a,i,r,M,s){r(null),Te(e,c,n,o,t,a,i,r,M,s)}(e,o.state.sources&&o.state.sources.filter((function(e){return!(n&&"Favourite"===e&&!o.state.ownPlaces&&!o.props.isMobile)})),o.props.transportMode,o.props.searchContext,o.props.filterResults,o.props.geocodingSize,{input:c||""},(function(e){if(null!=e){var n=(e.results||[]).filter((function(e){return"FutureRoute"!==e.type||"FutureRoute"===e.type&&e.properties.time>Pe().unix()})).map((function(e){if("CurrentLocation"===e.type||"SelectFromMap"===e.type||"SelectFromOwnLocations"===e.type||"back"===e.type){var c=j({},e);return c.properties.labelId=W.default.t(e.properties.labelId),c}return e}));c!==o.state.value&&c!==o.state.pendingSelection&&"SelectFromOwnLocations"!==o.state.pendingSelection&&"back"!==o.state.pendingSelection&&"FutureRoute"!==o.state.pendingSelection||o.setState({valid:!0,suggestions:n},(function(){return o.checkPendingSelection()}))}}),o.props.pathOpts,o.props.refPoint)}}))},o.clearInput=function(){var e={editing:!0,value:"",sources:o.props.sources,ownPlaces:!1};o.setState(e,(function(){return o.fetchFunction({value:"",cleanExecuted:!0})})),o.props.onClear&&o.props.onClear(o.props.id),o.input.focus()},o.inputClicked=function(e){if(o.input.focus(),o.props.isMobile&&o.props.lock(),!o.state.editing){var c={editing:!0,pendingSelection:null,renderMobileSearch:o.props.isMobile},n={editing:!0,pendingSelection:null,value:e};o.state.suggestions.length?(o.fetchFunction({value:o.state.value}),o.setState(c)):"object"!==F(e)&&e?o.setState(n,(function(){return o.fetchFunction({value:e})})):o.setState(c,(function(){return o.fetchFunction({value:o.state.value})}))}},o.storeInputReference=function(e){null!==e&&(o.input=e.input,o.props.storeRef&&o.props.storeRef(e.input))},o.fillInput=function(e){o.fInput=e.properties.name;var c={editing:!0,value:e.properties.name,checkPendingSelection:e,valid:!0};o.setState(c),o.fetchFunction({value:e.properties.name}),o.input.focus()},o.renderItem=function(e){var c="FutureRoute"===e.type?j({},e,{translatedText:ec(e)}):e,n=$e(e);return g.default.createElement(P.default,{item:c,content:n,loading:!o.state.valid,isMobile:o.props.isMobile,ariaFavouriteString:W.default.t("favourite"),color:o.props.color,accessiblePrimaryColor:o.props.accessiblePrimaryColor,fillInput:o.fillInput,fontWeights:o.props.fontWeights,getAutoSuggestIcons:o.props.getAutoSuggestIcons,modeIconColors:o.props.modeIconColors,modeSet:o.props.modeSet})},o.closeMobileSearch=function(){o.props.unlock(),o.setState({renderMobileSearch:!1,value:o.props.value},(function(){window.scrollTo(0,o.state.scrollY),o.onSuggestionsClearRequested()}))},o.keyDown=function(e){if(!o.selectionDone){var c=e.key;if("Escape"===c&&o.setState({editing:!1}),o.state.editing)return"Enter"===c&&""!==o.state.value&&o.setState({pendingSelection:!0},(function(){o.fetchFunction({value:o.state.value})})),void o.inputClicked();if("Enter"!==c&&"ArrowDown"!==c||""!==o.state.value){if("ArrowDown"===c&&""!==o.state.value){var n={editing:!0,value:o.state.value};o.setState(n,(function(){return o.fetchFunction({value:o.state.value})}))}o.state.editing||o.setState({editing:!0}),"Tab"===c&&o.onBlur()}else o.clearInput()}},o.suggestionAsAriaContent=function(){var e=[],c=o.state.suggestions[0];return c&&(c.type&&c.type.includes("Favourite")&&e.push(W.default.t("favourite")),e=e.concat($e(o.state.suggestions[0]))),V(new Set(e)).join(" - ")},o.clearOldSearches=function(){var e=o.props.searchContext,c=e.context,n=e.clearOldSearches,t=e.clearFutureRoutes;c&&n&&(n(c),t&&t(c),o.fetchFunction({value:o.state.value}))},o.isOriginDestinationOrViapoint=function(){return"origin"===o.props.id||"destination"===o.props.id||"via-point"===o.props.id||"origin-stop-near-you"===o.props.id},o.onFocus=function(){["Valittu sijainti","Nykyinen sijaintisi","Current position","Selected location","Vald position","Använd min position","Min position","Käytä nykyistä sijaintia","Use current location","Your current location"].includes(o.state.value)&&o.clearInput();var e=window.pageYOffset;return o.setState({scrollY:e})},Pe.tz.setDefault(e.timeZone),Pe.locale(e.lang),o.state={value:e.value,suggestions:[],editing:!1,valid:!0,renderMobileSearch:!1,sources:e.sources,ownPlaces:!1,typingTimer:null,typing:!1,pendingSelection:null,suggestionIndex:0,cleanExecuted:!1,scrollY:0},Object.keys(xe).forEach((function(e){W.default.addResourceBundle(e,"translation",xe[e])})),o}return J(n,[{key:"shouldComponentUpdate",value:function(e,c){return!C.default(c,this.state)||!C.default(e,this.props)}},{key:"render",value:function(){var e=this;W.default.language!==this.props.lang&&W.default.changeLanguage(this.props.lang);var c=this.state,n=c.value,o=c.suggestions,t=c.renderMobileSearch,a=c.cleanExecuted,i={placeholder:this.props.translatedPlaceholder?this.props.translatedPlaceholder:W.default.t(this.props.placeholder),value:n,onChange:this.onChange,onBlur:this.onBlur,className:"".concat(He.input," ").concat(this.props.isMobile&&this.props.transportMode?He.thin:""," ").concat(He[this.props.id]||""," ").concat(this.state.value?He.hasValue:""," ").concat(this.props.inputClassName),onKeyDown:this.keyDown,required:this.props.required},r=this.props.id.replace("searchfield-",""),M=this.props.ariaLabel||W.default.t(r);M=M.replace("searchfield-","");var s=this.props.required?"".concat(W.default.t("required"),"."):"",l=this.props.isMobile?W.default.t("search-autosuggest-label-mobile"):W.default.t("search-autosuggest-label-desktop"),u=W.default.t("search-autosuggest-len",{count:o.length}),p=function(){return e.suggestionAsAriaContent()||e.props.value?W.default.t("search-current-suggestion",{selection:e.suggestionAsAriaContent()||e.props.value}):""};return g.default.createElement(g.default.Fragment,null,g.default.createElement("span",{className:He["sr-only"],role:"alert"},!this.state.typing&&this.state.editing&&"".concat(u," ").concat(p())),this.props.isMobile&&g.default.createElement(Ge,{searchOpen:t,appElement:this.props.appElement,clearOldSearches:this.clearOldSearches,id:this.props.id,clearInput:this.clearInput,value:this.state.value,suggestions:[].concat(V(o),[{type:"clear-search-history",labelId:W.default.t("clear-search-history")}]),inputProps:j({},i,{placeholder:this.isOriginDestinationOrViapoint()?W.default.t("address-place-or-business"):i.placeholder}),fetchFunction:this.fetchFunction,onSuggestionsClearRequested:this.onSuggestionsClearRequested,getSuggestionValue:this.getSuggestionValue,renderSuggestion:this.renderItem,closeHandle:this.closeMobileSearch,ariaLabel:s.concat(" ").concat(M).concat(" ").concat(p()),label:this.props.mobileLabel?this.props.mobileLabel:W.default.t(this.props.id),onSuggestionSelected:this.onSelected,dialogHeaderText:W.default.t("delete-old-searches-header"),dialogPrimaryButtonText:W.default.t("delete"),dialogSecondaryButtonText:W.default.t("cancel"),clearInputButtonText:W.default.t("clear-button-label"),focusInput:a,color:this.props.color,hoverColor:this.props.hoverColor,accessiblePrimaryColor:this.props.accessiblePrimaryColor,fontWeights:this.props.fontWeights,showScroll:this.props.showScroll}),!t&&g.default.createElement("div",{className:_.default(He["autosuggest-input-container"],He[this.props.id]),style:{"--color":"".concat(this.props.color),"--hover-color":"".concat(this.props.hoverColor)}},this.props.icon&&g.default.createElement("div",{className:_.default(He["autosuggest-input-icon"],He[this.props.id],this.props.inputClassName&&"".concat(this.props.inputClassName,"-input-icon"))},g.default.createElement(x.default,{img:"".concat(this.props.icon)})),g.default.createElement(T.default,{alwaysRenderSuggestions:this.state.editing,id:this.props.id,suggestions:o,onSuggestionsFetchRequested:this.fetchFunction,onSuggestionsClearRequested:this.onSuggestionsClearRequested,getSuggestionValue:this.getSuggestionValue,renderSuggestion:this.renderItem,inputProps:j({},i,{onFocus:this.onFocus}),focusInputOnSuggestionClick:!0,shouldRenderSuggestions:function(){return e.state.editing},highlightFirstSuggestion:!this.state.ownPlaces,theme:He,renderInputComponent:function(c){return g.default.createElement(g.default.Fragment,null,g.default.createElement("label",{className:He["sr-only"],htmlFor:e.props.id},p().concat(" ").concat(s).concat(" ").concat(M).concat(" ").concat(l)),g.default.createElement("input",Object.assign({"aria-label":p().concat(" ").concat(s).concat(" ").concat(M).concat(" ").concat(l),id:e.props.id,onClick:e.inputClicked,onKeyDown:e.keyDown},c)),e.state.value&&e.clearButton())},onSuggestionSelected:this.onSelected,ref:this.storeInputReference})))}}]),n}(g.default.Component);cc.defaultProps={autoFocus:!1,className:"",icon:void 0,value:"",transportMode:void 0,lang:"fi",sources:[],isMobile:!1,color:"#007ac9",hoverColor:"#0062a1",accessiblePrimaryColor:"#0074be",timeZone:"Europe/Helsinki",pathOpts:{routesPrefix:"linjat",stopsPrefix:"pysakit"},mobileLabel:void 0,inputClassName:"",translatedPlaceholder:void 0,fontWeights:{medium:500},modeIconColors:{"mode-bus":"#007ac9","mode-rail":"#8c4799","mode-tram":"#008151","mode-metro":"#ed8c00","mode-ferry":"#007A97","mode-citybike":"#f2b62d"},required:!1,modeSet:void 0,showScroll:!1},"production"!==process.env.NODE_ENV&&(cc.propTypes={appElement:N.default.string.isRequired,autoFocus:N.default.bool,className:N.default.string,icon:N.default.string,id:N.default.string.isRequired,placeholder:N.default.string.isRequired,translatedPlaceholder:N.default.string,value:N.default.string,searchContext:N.default.any.isRequired,ariaLabel:N.default.string,onSelect:N.default.func,transportMode:N.default.string,filterResults:N.default.func,geocodingSize:N.default.number,onClear:N.default.func,storeRef:N.default.func,handleViaPoints:N.default.func,focusChange:N.default.func,lang:N.default.string,sources:N.default.arrayOf(N.default.string),targets:N.default.arrayOf(N.default.string),isMobile:N.default.bool,color:N.default.string,hoverColor:N.default.string,accessiblePrimaryColor:N.default.string,timeZone:N.default.string,pathOpts:N.default.shape({routesPrefix:N.default.string,stopsPrefix:N.default.string}),mobileLabel:N.default.string,lock:N.default.func.isRequired,unlock:N.default.func.isRequired,refPoint:N.default.object,inputClassName:N.default.string,fontWeights:N.default.shape({medium:N.default.number}),modeIconColors:N.default.object,getAutoSuggestIcons:N.default.object,required:N.default.bool,modeSet:N.default.string,showScroll:N.default.bool,isEmbedded:N.default.bool});var nc,oc=(nc=cc,function(e){var c=Qe.useScrollLock(),n=c.lock,o=c.unlock;return g.default.createElement(nc,Object.assign({lock:n,unlock:o},e))});e.default=oc,Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
46
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZGV2ZWxvcG1lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheUxpa2VUb0FycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5V2l0aG91dEhvbGVzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVNwcmVhZC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zZXRQcm90b3R5cGVPZi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0cy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9nZXRQcm90b3R5cGVPZi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5V2l0aEhvbGVzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL25vbkl0ZXJhYmxlUmVzdC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXRydS1lcS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWlzLWR1cGxpY2F0ZS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWhlbHBlcnMvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC11bmlxLWJ5LWxhYmVsL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZmlsdGVyLW1hdGNoaW5nLXRvLWlucHV0L2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtc2VyaWFsaXplL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWpzb24vaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1leGVjdXRlLXNlYXJjaC1pbW1pZGlhdGUvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9tb21lbnQtdGltZXpvbmUvbW9tZW50LXRpbWV6b25lLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21vbWVudC10aW1lem9uZS9pbmRleC5qcyIsIi4uL3NyYy9oZWxwZXJzL3RyYW5zbGF0aW9ucy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZpLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1pbmplY3QvZGlzdC9zdHlsZS1pbmplY3QuZXMuanMiLCIuLi9zcmMvaGVscGVycy9Nb2JpbGVTZWFyY2guanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGhzbC1maS9ob29rcy9saWIvaW5kZXguanMiLCIuLi9zcmMvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtbGFiZWwvaW5kZXguanMiLCIuLi9zcmMvaGVscGVycy93aXRoU2Nyb2xsTG9jay5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7XG4gICAgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBfdHlwZW9mKG9iaik7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcblxuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHtcbiAgICBhcnIyW2ldID0gYXJyW2ldO1xuICB9XG5cbiAgcmV0dXJuIGFycjI7XG59IiwiaW1wb3J0IGFycmF5TGlrZVRvQXJyYXkgZnJvbSBcIi4vYXJyYXlMaWtlVG9BcnJheVwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICBpZiAoIW8pIHJldHVybjtcbiAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7XG4gIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pO1xuICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn0iLCJpbXBvcnQgYXJyYXlXaXRob3V0SG9sZXMgZnJvbSBcIi4vYXJyYXlXaXRob3V0SG9sZXNcIjtcbmltcG9ydCBpdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5XCI7XG5pbXBvcnQgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXlcIjtcbmltcG9ydCBub25JdGVyYWJsZVNwcmVhZCBmcm9tIFwiLi9ub25JdGVyYWJsZVNwcmVhZFwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikge1xuICByZXR1cm4gYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IG5vbkl0ZXJhYmxlU3ByZWFkKCk7XG59IiwiaW1wb3J0IGFycmF5TGlrZVRvQXJyYXkgZnJvbSBcIi4vYXJyYXlMaWtlVG9BcnJheVwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShhcnIpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikge1xuICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGl0ZXIpKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfTtcblxuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufSIsImltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZlwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGY7XG59IiwiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4uLy4uL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IGFzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tIFwiLi9hc3NlcnRUaGlzSW5pdGlhbGl6ZWRcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICByZXR1cm4gY2FsbDtcbiAgfVxuXG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9O1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufSIsImltcG9ydCBhcnJheVdpdGhIb2xlcyBmcm9tIFwiLi9hcnJheVdpdGhIb2xlc1wiO1xuaW1wb3J0IGl0ZXJhYmxlVG9BcnJheUxpbWl0IGZyb20gXCIuL2l0ZXJhYmxlVG9BcnJheUxpbWl0XCI7XG5pbXBvcnQgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXlcIjtcbmltcG9ydCBub25JdGVyYWJsZVJlc3QgZnJvbSBcIi4vbm9uSXRlcmFibGVSZXN0XCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7XG4gIGlmICh0eXBlb2YgU3ltYm9sID09PSBcInVuZGVmaW5lZFwiIHx8ICEoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChhcnIpKSkgcmV0dXJuO1xuICB2YXIgX2FyciA9IFtdO1xuICB2YXIgX24gPSB0cnVlO1xuICB2YXIgX2QgPSBmYWxzZTtcbiAgdmFyIF9lID0gdW5kZWZpbmVkO1xuXG4gIHRyeSB7XG4gICAgZm9yICh2YXIgX2kgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkge1xuICAgICAgX2Fyci5wdXNoKF9zLnZhbHVlKTtcblxuICAgICAgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgX2QgPSB0cnVlO1xuICAgIF9lID0gZXJyO1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChfZCkgdGhyb3cgX2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIF9hcnI7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn0iLCIvKipcbiAqICBhY2NlcHQgZXF1YWxpdHkgb2Ygbm9uIG51bGxpc2ggdmFsdWVzXG4gKlxuICogQG5hbWUgdHJ1RXFcbiAqIEBwYXJhbSB7Qm9vbGVhbnxOdW1iZXJ8QmlnSW50fFN0cmluZ3xTeW1ib2x8T2JqZWN0fSB2YWwxIEZpcnN0IHZhbHVlIHRvIGJlIGNvbXBhcmVkXG4gKiBAcGFyYW0ge0Jvb2xlYW58TnVtYmVyfEJpZ0ludHxTdHJpbmd8U3ltYm9sfE9iamVjdH0gcGFyYW0yIFNlY29uZCB2YWx1ZSB0byBiZSBjb21wYXJlZFxuICogQHJldHVybnMge0Jvb2xlYW59IHRydWUvZmFsc2VcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC11dGlsLnRydUVxKCcyJywgJzInKTtcbiAqIC8vPXRydWVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJ1RXEodmFsMSwgdmFsMikge1xuICByZXR1cm4gdmFsMSAmJiB2YWwyICYmIHZhbDEgPT09IHZhbDI7XG59XG4iLCJpbXBvcnQgdHJ1RXEgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXRydS1lcSc7XG4vKipcbiAqIENoZWNrcyB0aGF0IGlzIGl0ZW1zIGR1cGxpY2F0ZVxuICpcbiAqIEBuYW1lIGlzRHVwbGljYXRlXG4gKiBAcGFyYW0ge09iamVjdH0gaXRlbTEgT2JqZWN0IGNvbnRhaW5pbmcgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKiB7XG4gKiAgcHJvcGVydGllcyB7XG4gKiAgICAgIGd0ZnNJZDogU3RyaW5nXG4gKiAgICAgIGdpZDogU3RyaW5nIGZyb20gZ2VvY29kZXJcbiAqICAgICAgbmFtZTogU3RyaW5nXG4gKiAgICAgIGxhYmVsOiBTdHJpbmdcbiAqICAgICAgIGFkZHJlc3M6IFN0cmluZ1xuICogICAgICBnZW9tZXRyeSB7XG4gKiAgICAgICAgIGNvb3JkaW5hdGVzIFtOdW1iZXIgbGF0LCBOdW1iZXIgbG9uXVxuICogICAgICB9XG4gKiAgfVxuICogfVxuICogQHBhcmFtIHtPYmplY3R9IGl0ZW0yIE9iamVjdCB3aXRoIHNhbWUgYXR0cmlidXRlcyBhcyBpdGVtMVxuICogQHJldHVybnMge0Jvb2xlYW59IHRydWUvZmFsc2VcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC11dGlsLmlzRHVwbGljYXRlKHBhcmFtMSwgcGFyYW0yKTtcbiAqIC8vPXRydWVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNEdXBsaWNhdGUoaXRlbTEsIGl0ZW0yKSB7XG4gIGNvbnN0IHByb3BzMSA9IGl0ZW0xLnByb3BlcnRpZXM7XG4gIGNvbnN0IHByb3BzMiA9IGl0ZW0yLnByb3BlcnRpZXM7XG5cbiAgaWYgKGl0ZW0xLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScgJiYgaXRlbTIudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJykge1xuICAgIGNvbnN0IG8xID0gcHJvcHMxLm9yaWdpbjtcbiAgICBjb25zdCBkMSA9IHByb3BzMS5kZXN0aW5hdGlvbjtcbiAgICBjb25zdCBvMiA9IHByb3BzMi5vcmlnaW47XG4gICAgY29uc3QgZDIgPSBwcm9wczIuZGVzdGluYXRpb247XG5cbiAgICBjb25zdCBuYW1lMSA9IGAke28xLm5hbWV9Ly8ke28xLmxvY2FsaXR5fS8vJHtkMS5uYW1lfS8vJHtkMS5sb2NhbGl0eX1gO1xuICAgIGNvbnN0IG5hbWUyID0gYCR7bzIubmFtZX0vLyR7bzIubG9jYWxpdHl9Ly8ke2QyLm5hbWV9Ly8ke2QyLmxvY2FsaXR5fWA7XG5cbiAgICByZXR1cm4gbmFtZTEgPT09IG5hbWUyO1xuICB9XG4gIGlmIChpdGVtMS50eXBlID09PSAnRnV0dXJlUm91dGUnIHx8IGl0ZW0yLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKFxuICAgICgocHJvcHMxLmxheWVyID09PSAnYmlrZVJlbnRhbFN0YXRpb24nIHx8XG4gICAgICBwcm9wczEubGF5ZXIgPT09ICdmYXZvdXJpdGVCaWtlUmVudGFsU3RhdGlvbicpICYmXG4gICAgICAocHJvcHMyLmxheWVyID09PSAnYmlrZVJlbnRhbFN0YXRpb24nIHx8XG4gICAgICAgIHByb3BzMi5sYXllciA9PT0gJ2Zhdm91cml0ZUJpa2VSZW50YWxTdGF0aW9uJykpIHx8XG4gICAgKHByb3BzMS5sYXllciA9PT0gJ2Jpa2VzdGF0aW9uJyAmJiBwcm9wczIubGF5ZXIgPT09ICdiaWtlc3RhdGlvbicpXG4gICkge1xuICAgIHJldHVybiBwcm9wczEubGFiZWxJZCA9PT0gcHJvcHMyLmxhYmVsSWQ7XG4gIH1cbiAgaWYgKHByb3BzMS5ndGZzSWQgJiYgcHJvcHMyLmd0ZnNJZCkge1xuICAgIHJldHVybiBwcm9wczEuZ3Rmc0lkID09PSBwcm9wczIuZ3Rmc0lkO1xuICB9XG4gIGlmIChwcm9wczEuZ3Rmc0lkICYmIHByb3BzMi5naWQgJiYgcHJvcHMyLmdpZC5pbmNsdWRlcyhwcm9wczEuZ3Rmc0lkKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChwcm9wczIuZ3Rmc0lkICYmIHByb3BzMS5naWQgJiYgcHJvcHMxLmdpZC5pbmNsdWRlcyhwcm9wczIuZ3Rmc0lkKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChcbiAgICAocHJvcHMxLmxheWVyID09PSAnc3RvcCcgfHwgcHJvcHMxLmxheWVyID09PSAnc3RhdGlvbicpICYmXG4gICAgKHByb3BzMi5sYXllciA9PT0gJ3N0b3AnIHx8IHByb3BzMi5sYXllciA9PT0gJ3N0YXRpb24nKSAmJlxuICAgIHByb3BzMS5naWQgJiZcbiAgICBwcm9wczIuZ2lkXG4gICkge1xuICAgIHJldHVybiBwcm9wczEuZ2lkID09PSBwcm9wczIuZ2lkO1xuICB9XG5cbiAgY29uc3QgcDEgPSBpdGVtMSAmJiBpdGVtMS5nZW9tZXRyeSA/IGl0ZW0xLmdlb21ldHJ5LmNvb3JkaW5hdGVzIDogdW5kZWZpbmVkO1xuICBjb25zdCBwMiA9IGl0ZW0yICYmIGl0ZW0yLmdlb21ldHJ5ID8gaXRlbTIuZ2VvbWV0cnkuY29vcmRpbmF0ZXMgOiB1bmRlZmluZWQ7XG5cbiAgaWYgKHAxICYmIHAyKSB7XG4gICAgLy8gYm90aCBoYXZlIGdlb21ldHJ5XG4gICAgaWYgKE1hdGguYWJzKHAxWzBdIC0gcDJbMF0pIDwgMWUtNiAmJiBNYXRoLmFicyhwMVsxXSAtIHAyWzFdKSA8IDFlLTYpIHtcbiAgICAgIC8vIGxvY2F0aW9uIG1hdGNoIGlzIG5vdCBlbm91Z2guIFJlcXVpcmUgYSBjb21tb24gcHJvcGVydHlcbiAgICAgIGlmIChcbiAgICAgICAgdHJ1RXEocHJvcHMxLm5hbWUsIHByb3BzMi5uYW1lKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEubGFiZWwsIHByb3BzMi5sYWJlbCkgfHxcbiAgICAgICAgdHJ1RXEocHJvcHMxLmFkZHJlc3MsIHByb3BzMi5hZGRyZXNzKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEuYWRkcmVzcywgcHJvcHMyLmxhYmVsKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEubGFiZWwsIHByb3BzMi5hZGRyZXNzKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG4iLCJpbXBvcnQgaXNTdHJpbmcgZnJvbSAnbG9kYXNoL2lzU3RyaW5nJztcbmltcG9ydCBvcmRlckJ5IGZyb20gJ2xvZGFzaC9vcmRlckJ5JztcbmltcG9ydCB1bmlxV2l0aCBmcm9tICdsb2Rhc2gvdW5pcVdpdGgnO1xuaW1wb3J0IGlzRHVwbGljYXRlIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1pcy1kdXBsaWNhdGUnO1xuXG5jb25zdCBub3JtYWxpemUgPSBzdHIgPT4ge1xuICBpZiAoIWlzU3RyaW5nKHN0cikpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpO1xufTtcblxuLyoqXG4gKiBMYXllclR5cGUgZGVwaWN0cyB0aGUgdHlwZSBvZiB0aGUgcG9pbnQtb2YtaW50ZXJlc3QuXG4gKi9cbmNvbnN0IExheWVyVHlwZSA9IHtcbiAgQWRkcmVzczogJ2FkZHJlc3MnLFxuICBCYWNrOiAnYmFjaycsXG4gIEN1cnJlbnRQb3NpdGlvbjogJ2N1cnJlbnRQb3NpdGlvbicsXG4gIEZhdm91cml0ZVN0b3A6ICdmYXZvdXJpdGVTdG9wJyxcbiAgRmF2b3VyaXRlU3RhdGlvbjogJ2Zhdm91cml0ZVN0YXRpb24nLFxuICBGYXZvdXJpdGVQbGFjZTogJ2Zhdm91cml0ZVBsYWNlJyxcbiAgRmF2b3VyaXRlUm91dGU6ICdmYXZvdXJpdGVSb3V0ZScsXG4gIEZ1dHVyZVJvdXRlOiAnZnV0dXJlUm91dGUnLFxuICBTdGF0aW9uOiAnc3RhdGlvbicsXG4gIFNlbGVjdEZyb21NYXA6ICdzZWxlY3RGcm9tTWFwJyxcbiAgU2VsZWN0RnJvbU93bkxvY2F0aW9uczogJ293bkxvY2F0aW9ucycsXG4gIFN0b3A6ICdzdG9wJyxcbiAgU3RyZWV0OiAnc3RyZWV0JyxcbiAgVmVudWU6ICd2ZW51ZScsXG4gIEJpa2VSZW50YWxTdGF0aW9uOiAnYmlrZVJlbnRhbFN0YXRpb24nLFxuICBDYXJQYXJrOiAnY2FycGFyaycsXG4gIEJpa2VQYXJrOiAnYmlrZXBhcmsnLFxufTtcbmV4cG9ydCBjb25zdCBpc1N0b3AgPSAoeyBsYXllciwgdHlwZSB9KSA9PlxuICBsYXllciA9PT0gJ3N0b3AnIHx8XG4gIGxheWVyID09PSAnZmF2b3VyaXRlU3RvcCcgfHxcbiAgdHlwZSA9PT0gJ3N0b3AnIHx8XG4gIHR5cGUgPT09ICdmYXZvdXJpdGVTdG9wJztcblxuY29uc3QgREVGQVVMVF9ST1VURVNfUFJFRklYID0gJ2xpbmphdCc7XG5jb25zdCBERUZBVUxUX1NUT1BTX1BSRUZJWCA9ICdweXNha2l0JztcblxuZXhwb3J0IGNvbnN0IG1hcFJvdXRlID0gKGl0ZW0sIHBhdGhPcHRzKSA9PiB7XG4gIGlmIChpdGVtID09PSBudWxsIHx8IGl0ZW0gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3Qgb3B0cyA9IHBhdGhPcHRzIHx8IHt9O1xuXG4gIGNvbnN0IHJvdXRlc1ByZWZpeCA9IG9wdHMucm91dGVzUHJlZml4IHx8IERFRkFVTFRfUk9VVEVTX1BSRUZJWDtcbiAgY29uc3Qgc3RvcHNQcmVmaXggPSBvcHRzLnN0b3BzUHJlZml4IHx8IERFRkFVTFRfU1RPUFNfUFJFRklYO1xuXG4gIGNvbnN0IGxpbmsgPSBgLyR7cm91dGVzUHJlZml4fS8ke2l0ZW0uZ3Rmc0lkfS8ke3N0b3BzUHJlZml4fWA7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ1JvdXRlJyxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAuLi5pdGVtLFxuICAgICAgbGF5ZXI6IGByb3V0ZS0ke2l0ZW0ubW9kZX1gLFxuICAgICAgbGluayxcbiAgICB9LFxuICAgIGdlb21ldHJ5OiB7XG4gICAgICBjb29yZGluYXRlczogbnVsbCxcbiAgICB9LFxuICB9O1xufTtcblxuLyoqXG4gKiBUcmllcyB0byBtYXRjaCB0aGUgZ2l2ZW4gc2VhcmNoIHRlcm0gYWdhaW5zIHRoZSBjb2xsZWN0aW9uIG9mIHByb3BlcnRpZXNcbiAqIGZvciBhIGdlb2NvZGluZyByZXN1bHQuIFRoZSBiZXN0IG1hdGNoIHdpbGwgYmUgcmV0dXJuZWQgKG1pbjogMCwgbWF4OiAxLjUpLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBub3JtYWxpemVkVGVybSB0aGUgbm9ybWFsaXplZCBzZWFyY2ggdGVybS5cbiAqIEBwYXJhbSB7Kn0gcmVzdWx0UHJvcGVydGllcyB0aGUgZ2VvY29kaW5nIHJlc3VsdCdzIHByb3BlcnR5IGNvbGxlY3Rpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBtYXRjaCA9IChub3JtYWxpemVkVGVybSwgcmVzdWx0UHJvcGVydGllcykgPT4ge1xuICBpZiAoIWlzU3RyaW5nKG5vcm1hbGl6ZWRUZXJtKSB8fCBub3JtYWxpemVkVGVybS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGNvbnN0IG1hdGNoUHJvcHMgPSBbJ25hbWUnLCAnbGFiZWwnLCAnYWRkcmVzcycsICdzaG9ydE5hbWUnXTtcbiAgcmV0dXJuIG1hdGNoUHJvcHNcbiAgICAubWFwKG5hbWUgPT4gcmVzdWx0UHJvcGVydGllc1tuYW1lXSlcbiAgICAuZmlsdGVyKHZhbHVlID0+IGlzU3RyaW5nKHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPiAwKVxuICAgIC5tYXAodmFsdWUgPT4ge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFZhbHVlID0gbm9ybWFsaXplKHZhbHVlKTtcbiAgICAgIGlmIChub3JtYWxpemVkVmFsdWUuaW5kZXhPZihub3JtYWxpemVkVGVybSkgPT09IDApIHtcbiAgICAgICAgLy8gZnVsbCBtYXRjaCBhdCBzdGFydC4gUmV0dXJuIG1heCByZXN1bHQgd2hlbiBtYXRjaCBpcyBmdWxsLCBub3Qgb25seSBwYXJ0aWFsXG4gICAgICAgIHJldHVybiAwLjUgKyBub3JtYWxpemVkVGVybS5sZW5ndGggLyBub3JtYWxpemVkVmFsdWUubGVuZ3RoO1xuICAgICAgfVxuICAgICAgLy8gYmVjYXVzZSBvZiBmaWx0ZXJtYXRjaGluZ3RvaW5wdXQsIHdlIGtub3cgdGhhdCBtYXRjaCBvY2N1cnJlZCBzb21ld2hlcmVcbiAgICAgIC8vIGRvbid0IHJ1biBmaWx0ZXJtYXRjaGluZyBhZ2FpbiBidXQgZXN0aW1hdGUgcm91Z2hseTpcbiAgICAgIC8vIHRoZSBsb25nZXIgdGhlIG1hdGNoaW5nIHN0cmluZywgdGhlIGJldHRlciBjb25maWRlbmNlLCBtYXggYmVpbmcgMC41XG4gICAgICByZXR1cm4gKDAuNSAqIG5vcm1hbGl6ZWRUZXJtLmxlbmd0aCkgLyAobm9ybWFsaXplZFRlcm0ubGVuZ3RoICsgMSk7XG4gICAgfSlcbiAgICAucmVkdWNlKFxuICAgICAgKHByZXZpb3VzLCBjdXJyZW50KSA9PiAoY3VycmVudCA+IHByZXZpb3VzID8gY3VycmVudCA6IHByZXZpb3VzKSxcbiAgICAgIDAsXG4gICAgKTtcbn07XG5cbi8qKlxuICogUmFua3MgdGhlIHJlc3VsdCBiYXNlZCBvbiBpdHMgbGF5ZXIgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxheWVyIHRoZSBsYXllciBwcm9wZXJ0eS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgdGhlIHNvdXJjZSBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldExheWVyUmFuayA9IChsYXllciwgc291cmNlKSA9PiB7XG4gIHN3aXRjaCAobGF5ZXIpIHtcbiAgICBjYXNlIExheWVyVHlwZS5DdXJyZW50UG9zaXRpb246XG4gICAgICByZXR1cm4gMTtcbiAgICBjYXNlIExheWVyVHlwZS5CYWNrOlxuICAgICAgcmV0dXJuIDAuOTtcbiAgICBjYXNlIExheWVyVHlwZS5TZWxlY3RGcm9tTWFwOlxuICAgICAgcmV0dXJuIDAuODtcbiAgICBjYXNlIExheWVyVHlwZS5TZWxlY3RGcm9tT3duTG9jYXRpb25zOlxuICAgICAgcmV0dXJuIDAuNzk7XG4gICAgY2FzZSBMYXllclR5cGUuRmF2b3VyaXRlU3RhdGlvbjpcbiAgICBjYXNlIExheWVyVHlwZS5GYXZvdXJpdGVQbGFjZTpcbiAgICBjYXNlIExheWVyVHlwZS5GYXZvdXJpdGVTdG9wOlxuICAgIGNhc2UgTGF5ZXJUeXBlLkZhdm91cml0ZVJvdXRlOlxuICAgICAgcmV0dXJuIDAuNDU7XG4gICAgY2FzZSBMYXllclR5cGUuRnV0dXJlUm91dGU6XG4gICAgICByZXR1cm4gMC40NDtcbiAgICBjYXNlIExheWVyVHlwZS5TdGF0aW9uOiB7XG4gICAgICBpZiAoaXNTdHJpbmcoc291cmNlKSAmJiBzb3VyY2UuaW5kZXhPZignZ3RmcycpID09PSAwKSB7XG4gICAgICAgIHJldHVybiAwLjQzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIDAuNDI7XG4gICAgfVxuICAgIGNhc2UgTGF5ZXJUeXBlLkZhdm91cml0ZUJpa2VSZW50YWxTdGF0aW9uOlxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyB2ZW51ZSwgYWRkcmVzcywgc3RyZWV0LCByb3V0ZS14eHhcbiAgICAgIHJldHVybiAwLjQxO1xuICAgIGNhc2UgTGF5ZXJUeXBlLkNhclBhcms6XG4gICAgICByZXR1cm4gMC4zODtcbiAgICBjYXNlIExheWVyVHlwZS5CaWtlUGFyazpcbiAgICAgIHJldHVybiAwLjM4O1xuICAgIGNhc2UgTGF5ZXJUeXBlLkJpa2VSZW50YWxTdGF0aW9uOlxuICAgICAgcmV0dXJuIDAuMzg7XG4gICAgY2FzZSBMYXllclR5cGUuU3RvcDpcbiAgICAgIHJldHVybiAwLjM2O1xuICB9XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBzb3J0IHRoZSByZXN1bHRzLiBPcmRlcnMgYXMgZm9sbG93czpcbiAqICAtIGN1cnJlbnQgcG9zaXRpb24gZmlyc3QgZm9yIGFuIGVtcHR5IHNlYXJjaFxuICogIC0gbWF0Y2hpbmcgcm91dGVzIGZpcnN0XG4gKiAgLSBvdGhlcndpc2UgYnkgY29uZmlkZW5jZSwgZXhjZXB0IHRoYXQ6XG4gKiAgICAtIGJvb3N0IHdlbGwgbWF0Y2hpbmcgc3RhdGlvbnMgKGVzcGVjaWFsbHkgZnJvbSBHVEZTKVxuICogICAgLSByYW5rIHN0b3BzIGxvd2VyIGFzIHRoZXkgdGVuZCB0byBvY2N1cHkgbW9zdCBvZiB0aGUgc2VhcmNoIHJlc3VsdHNcbiAqICAtIGl0ZW1zIHdpdGggbm8gY29uZmlkZW5jZSAob2xkIHNlYXJjaGVzIGFuZCBmYXZvcml0ZXMpOlxuICogICAgLSByYW5rIGZhdm91cml0ZXMgYmV0dGVyIHRoYW4gb3JkaW5hcnkgb2xkIHNlYXJjaGVzXG4gKiAgICAtIHJhbmsgZnVsbCBtYXRjaCBiZXR0ZXIgdGhhbiBwYXJ0aWFsIG1hdGNoXG4gKiAgICAtIHJhbmsgbWF0Y2ggYXQgbWlkZGxlIHdvcmQgbG93ZXIgdGhhbiBtYXRjaCBhdCB0aGUgYmVnaW5uaW5nXG4gKiAgICAtIHJhbmsgYmlrZSByZW50YWwgc3RhdGlvbnMgbG93ZXJcbiAqIEBwYXJhbSB7KltdfSByZXN1bHRzIFRoZSBzZWFyY2ggcmVzdWx0cyB0aGF0IHdlcmUgcmVjZWl2ZWRcbiAqIEBwYXJhbSB7U3RyaW5nfSB0ZXJtIFRoZSBzZWFyY2ggdGVybSB0aGF0IHdhcyB1c2VkXG4gKi9cbmV4cG9ydCBjb25zdCBzb3J0U2VhcmNoUmVzdWx0cyA9IChsaW5lUmVnZXhwLCByZXN1bHRzLCB0ZXJtID0gJycpID0+IHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3VsdHMpKSB7XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICBjb25zdCBpc0xpbmVJZGVudGlmaWVyID0gdmFsdWUgPT5cbiAgICBpc1N0cmluZyh2YWx1ZSkgJiYgbGluZVJlZ2V4cCAmJiBsaW5lUmVnZXhwLnRlc3QodmFsdWUpO1xuXG4gIGNvbnN0IG5vcm1hbGl6ZWRUZXJtID0gbm9ybWFsaXplKHRlcm0pO1xuICBjb25zdCBpc0xpbmVTZWFyY2ggPSBpc0xpbmVJZGVudGlmaWVyKG5vcm1hbGl6ZWRUZXJtKTtcblxuICBjb25zdCBvcmRlcmVkUmVzdWx0cyA9IG9yZGVyQnkoXG4gICAgcmVzdWx0cyxcbiAgICBbXG4gICAgICAvLyByYW5rIG1hdGNoaW5nIHJvdXRlcyBiZXN0XG4gICAgICByZXN1bHQgPT5cbiAgICAgICAgaXNMaW5lU2VhcmNoICYmXG4gICAgICAgIGlzTGluZUlkZW50aWZpZXIobm9ybWFsaXplKHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZSkpICYmXG4gICAgICAgIG5vcm1hbGl6ZShyZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWUpLmluZGV4T2Yobm9ybWFsaXplZFRlcm0pID09PSAwXG4gICAgICAgICAgPyAxXG4gICAgICAgICAgOiAwLFxuXG4gICAgICByZXN1bHQgPT4ge1xuICAgICAgICBjb25zdCB7IGNvbmZpZGVuY2UsIGxheWVyLCBzb3VyY2UgfSA9IHJlc3VsdC5wcm9wZXJ0aWVzO1xuICAgICAgICBpZiAobm9ybWFsaXplZFRlcm0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgLy8gRG9pbmcgc2VhcmNoIHdpdGggZW1wdHkgc3RyaW5nLlxuICAgICAgICAgIC8vIE5vIGNvbmZpZGVuY2UgdG8gbWF0Y2gsIHNvIHVzZSByYW5rZWQgb2xkIHNlYXJjaGVzIGFuZCBmYXZvdXJpdGVzXG4gICAgICAgICAgcmV0dXJuIGdldExheWVyUmFuayhsYXllciwgc291cmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG11c3QgaGFuZGxlIGEgbWl4dXAgb2YgZ2VvY29kZXIgc2VhcmNoZXMgYW5kIGl0ZW1zIGFib3ZlXG4gICAgICAgIC8vIE5vcm1hbCBjb25maWRlbmNlIHJhbmdlIGZyb20gZ2VvY29kZXIgaXMgYWJvdXQgMC4zIC4uIDFcbiAgICAgICAgaWYgKCFjb25maWRlbmNlKSB7XG4gICAgICAgICAgLy8gbm90IGZyb20gZ2VvY29kZXIsIGVzdGltYXRlIGNvbmZpZGVuY2Ugb3Vyc2VsdmVzXG4gICAgICAgICAgY29uc3QgZXN0aW1hdGVkQ29uZmlkZW5jZSA9XG4gICAgICAgICAgICBnZXRMYXllclJhbmsobGF5ZXIsIHNvdXJjZSkgK1xuICAgICAgICAgICAgbWF0Y2gobm9ybWFsaXplZFRlcm0sIHJlc3VsdC5wcm9wZXJ0aWVzKTtcbiAgICAgICAgICByZXR1cm4gbGF5ZXIgPT09IExheWVyVHlwZS5CaWtlUmVudGFsU3RhdGlvblxuICAgICAgICAgICAgPyBlc3RpbWF0ZWRDb25maWRlbmNlIC0gMC44XG4gICAgICAgICAgICA6IGVzdGltYXRlZENvbmZpZGVuY2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBnZW9jb2RlZCBpdGVtcyB3aXRoIGNvbmZpZGVuY2UsIGp1c3QgYWRqdXN0IGEgbGl0dGxlXG4gICAgICAgIHN3aXRjaCAobGF5ZXIpIHtcbiAgICAgICAgICBjYXNlIExheWVyVHlwZS5TdGF0aW9uOiB7XG4gICAgICAgICAgICBjb25zdCBib29zdCA9IHNvdXJjZS5pbmRleE9mKCdndGZzJykgPT09IDAgPyAwLjAyIDogMC4wMTtcbiAgICAgICAgICAgIHJldHVybiBjb25maWRlbmNlICsgYm9vc3Q7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZTtcbiAgICAgICAgICBjYXNlIExheWVyVHlwZS5TdG9wOlxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2UgLSAwLjA1O1xuICAgICAgICAgIGNhc2UgTGF5ZXJUeXBlLkNhclBhcms6XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZSAtIDAuMDU7XG4gICAgICAgICAgY2FzZSBMYXllclR5cGUuQmlrZVBhcms6XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZSAtIDAuMDU7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgXSxcbiAgICBbJ2Rlc2MnLCAnZGVzYyddLFxuICApO1xuXG4gIHJldHVybiB1bmlxV2l0aChvcmRlcmVkUmVzdWx0cywgaXNEdXBsaWNhdGUpO1xufTtcblxuLyoqXG4gKiBQYXJzZXMgc3RvcCdzIG5hbWUgd2l0aG91dCBzdG9wIGNvZGUgZnJvbSBhIHN0b3AgbmFtZSBmcm9tIGdlb2NvZGluZyByZXN1bHRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIHN0b3AncyBuYW1lIGZyb20gZ2VvY29kaW5nIHJlc3VsdHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RvcENvZGUgc3RvcCBjb2RlLlxuICovXG5leHBvcnQgY29uc3QgZ2V0U3RvcE5hbWUgPSAobmFtZSwgc3RvcENvZGUpID0+IHtcbiAgaWYgKFxuICAgIHN0b3BDb2RlICE9PSB1bmRlZmluZWQgJiZcbiAgICBzdG9wQ29kZSAhPT0gbnVsbCAmJlxuICAgIG5hbWUubGFzdEluZGV4T2Yoc3RvcENvZGUpICE9PSAtMVxuICApIHtcbiAgICByZXR1cm4gbmFtZS5zdWJzdHJpbmcoMCwgbmFtZS5sYXN0SW5kZXhPZihzdG9wQ29kZSkgLSAxKTtcbiAgfVxuICByZXR1cm4gbmFtZTtcbn07XG4iLCJpbXBvcnQgdW5pcVdpdGggZnJvbSAnbG9kYXNoL3VuaXFXaXRoJztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC9pc0VxdWFsJztcbmltcG9ydCBtZW1vaXplIGZyb20gJ2xvZGFzaC9tZW1vaXplJztcbmltcG9ydCBlc2NhcGVSZWdFeHAgZnJvbSAnbG9kYXNoL2VzY2FwZVJlZ0V4cCc7XG5pbXBvcnQgY2xvbmVEZWVwIGZyb20gJ2xvZGFzaC9jbG9uZURlZXAnO1xuXG4vKipcbiAqIExvY2F0aW9uIHByb3BlcnRpZXMuXG4gKiBAdHlwZWRlZiB7TG9jYXRpb25Qcm9wZXJ0aWVzfVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGxheWVyIFN1Z2dlc3Rpb24gbGF5ZXIuXG4gKiBAcHJvcGVydHkge2xhdH0gW251bWJlcl1cbiAqIEBwcm9wZXJ0eSB7bG9ufSBbbnVtYmVyXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGFkZHJlc3MgQWRkcmVzcy5cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgbG9jYWxpdHkgKGNpdHkgbmFtZSkgZm9yIHN1Z2dlc3Rpb25zXG4gKlxuICogQG5hbWUgZ2V0TG9jYWxpdHlcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdWdnZXN0aW9uIHN1Z2dlc3Rpb24ncyBwcm9wZXJ0aWVzIGZyb20gZ2VvY29kaW5nIG9yIGEgZmF2b3VyaXRlIHN0b3Avc3RhdGlvbi5cbiAqIEV4cGVjdHMgbGFzdCBwYXJ0IG9mIGFuIGFkZHJlc3MgKGFmdGVyICcsJykgdG8gY29udGFpbiB0aGUgY2l0eSBuYW1lIG9mIHRoZSBzdWdnZXN0aW9uIGxvY2F0aW9uLlxuICogQHJldHVybnMge1N0cmluZ30gIENpdHkgbmFtZSBvciBlbXB0eSBzdHJpbmdcbiAqL1xuY29uc3QgZ2V0TG9jYWxpdHkgPSBzdWdnZXN0aW9uID0+XG4gIHN1Z2dlc3Rpb24ubG9jYWxhZG1pbiB8fFxuICBzdWdnZXN0aW9uLmxvY2FsaXR5IHx8XG4gIChzdWdnZXN0aW9uLmFkZHJlc3MgJiZcbiAgICBzdWdnZXN0aW9uLmFkZHJlc3MubGFzdEluZGV4T2YoJywnKSA8IHN1Z2dlc3Rpb24uYWRkcmVzcy5sZW5ndGggLSAyICYmXG4gICAgc3VnZ2VzdGlvbi5hZGRyZXNzLnN1YnN0cmluZyhzdWdnZXN0aW9uLmFkZHJlc3MubGFzdEluZGV4T2YoJywnKSArIDIpKSB8fFxuICAnJztcblxuZXhwb3J0IGNvbnN0IGdldFN0b3BDb2RlID0gKHsgaWQsIGNvZGUgfSkgPT4ge1xuICBpZiAoY29kZSkge1xuICAgIHJldHVybiBjb2RlO1xuICB9XG4gIGlmIChcbiAgICBpZCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgdHlwZW9mIGlkLmluZGV4T2YgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgaWQuaW5kZXhPZignIycpID09PSAtMVxuICApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIC8vIGlkIGZyb20gcGVsaWFzXG4gIHJldHVybiBpZC5zdWJzdHJpbmcoaWQuaW5kZXhPZignIycpICsgMSk7XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0RmF2b3VyaXRlUGxhY2VMYWJlbCA9IChuYW1lLCBhZGRyZXNzKSA9PiBbXG4gIG5hbWUgfHwgKGFkZHJlc3MgJiYgYWRkcmVzcy5zcGxpdCgnLCcpWzBdKSxcbiAgdHlwZW9mIGFkZHJlc3MgPT09ICdzdHJpbmcnXG4gICAgPyBhZGRyZXNzLnJlcGxhY2UobmV3IFJlZ0V4cChgJHtlc2NhcGVSZWdFeHAobmFtZSl9KFsgLF18JCkrYCksICcnKVxuICAgIDogJycsXG5dO1xuXG4vKipcbiAqIEZvcm1hdCBzdWdnZXN0aW9uLXBhaXIgW25hbWUsIGFkZHJlc3NdIGJ5IGBzdWdnZXN0aW9uLmxheWVyYC5cbiAqXG4gKiBAbmFtZSBnZXROYW1lTGFiZWxcbiAqIEBwYXJhbSB7TG9jYXRpb25Qcm9wZXJ0aWVzfSBzdWdnZXN0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwbGFpbl1cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXkuPHN0cmluZz59IEZvcm1hdHRlZCBsYWJlbC5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldE5hbWVMYWJlbCA9IG1lbW9pemUoXG4gIChzdWdnZXN0aW9uLCBwbGFpbiA9IGZhbHNlKSA9PiB7XG4gICAgc3dpdGNoIChzdWdnZXN0aW9uLmxheWVyKSB7XG4gICAgICBjYXNlICdjdXJyZW50UG9zaXRpb24nOlxuICAgICAgICByZXR1cm4gW3N1Z2dlc3Rpb24ubGFiZWxJZCwgc3VnZ2VzdGlvbi5hZGRyZXNzXTtcbiAgICAgIGNhc2UgJ3NlbGVjdEZyb21NYXAnOlxuICAgICAgY2FzZSAnb3duTG9jYXRpb25zJzpcbiAgICAgIGNhc2UgJ2JhY2snOlxuICAgICAgICByZXR1cm4gW3N1Z2dlc3Rpb24ubGFiZWxJZF07XG4gICAgICBjYXNlICdmYXZvdXJpdGVQbGFjZSc6XG4gICAgICAgIHJldHVybiBmb3JtYXRGYXZvdXJpdGVQbGFjZUxhYmVsKHN1Z2dlc3Rpb24ubmFtZSwgc3VnZ2VzdGlvbi5hZGRyZXNzKTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZUJpa2VSZW50YWxTdGF0aW9uJzpcbiAgICAgIGNhc2UgJ2Jpa2VSZW50YWxTdGF0aW9uJzpcbiAgICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uLm5hbWVdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlUm91dGUnOlxuICAgICAgY2FzZSAncm91dGUtQlVTJzpcbiAgICAgIGNhc2UgJ3JvdXRlLVRSQU0nOlxuICAgICAgY2FzZSAncm91dGUtUkFJTCc6XG4gICAgICBjYXNlICdyb3V0ZS1TVUJXQVknOlxuICAgICAgY2FzZSAncm91dGUtRkVSUlknOlxuICAgICAgY2FzZSAncm91dGUtQUlSUExBTkUnOlxuICAgICAgICByZXR1cm4gIXBsYWluICYmIHN1Z2dlc3Rpb24uc2hvcnROYW1lXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uZ3Rmc0lkLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLm1vZGUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5sb25nTmFtZSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5zaG9ydE5hbWUsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubG9uZ05hbWUsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uYWdlbmN5ID8gc3VnZ2VzdGlvbi5hZ2VuY3kubmFtZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIF07XG4gICAgICBjYXNlICd2ZW51ZSc6XG4gICAgICBjYXNlICdhZGRyZXNzJzpcbiAgICAgIGNhc2UgJ3N0cmVldCc6XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lLFxuICAgICAgICAgIHN1Z2dlc3Rpb24ubGFiZWwucmVwbGFjZShcbiAgICAgICAgICAgIG5ldyBSZWdFeHAoYCR7ZXNjYXBlUmVnRXhwKHN1Z2dlc3Rpb24ubmFtZSl9KCwpPyggKT9gKSxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICksXG4gICAgICAgIF07XG4gICAgICBjYXNlICdmYXZvdXJpdGVTdG9wJzpcbiAgICAgIGNhc2UgJ3N0b3AnOlxuICAgICAgICByZXR1cm4gcGxhaW5cbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lIHx8XG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5sYWJlbCB8fFxuICAgICAgICAgICAgICAgIChzdWdnZXN0aW9uLmFkZHJlc3MgJiYgc3VnZ2VzdGlvbi5hZGRyZXNzLnNwbGl0KCcsJylbMF0pLFxuICAgICAgICAgICAgICBnZXRMb2NhbGl0eShzdWdnZXN0aW9uKSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmlkLFxuICAgICAgICAgICAgICBnZXRTdG9wQ29kZShzdWdnZXN0aW9uKSxcbiAgICAgICAgICAgICAgZ2V0TG9jYWxpdHkoc3VnZ2VzdGlvbiksXG4gICAgICAgICAgICBdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlU3RhdGlvbic6XG4gICAgICBjYXNlICdzdGF0aW9uJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lIHx8XG4gICAgICAgICAgICBzdWdnZXN0aW9uLmxhYmVsIHx8XG4gICAgICAgICAgICAoc3VnZ2VzdGlvbi5hZGRyZXNzICYmIHN1Z2dlc3Rpb24uYWRkcmVzcy5zcGxpdCgnLCcpWzBdKSxcbiAgICAgICAgICBnZXRMb2NhbGl0eShzdWdnZXN0aW9uKSxcbiAgICAgICAgXTtcbiAgICB9XG4gIH0sXG4gIChpdGVtLCBwbGFpbikgPT4ge1xuICAgIGNvbnN0IGkgPSBjbG9uZURlZXAoaXRlbSk7XG4gICAgaS5wbGFpbiA9IHBsYWluO1xuICAgIHJldHVybiBpO1xuICB9LFxuKTtcblxuLyoqXG4gKiBDaGVja3MgdGhhdCBmZWF0dXJlcyBhcmUgdW5pcXVlIGJ5IGxhYmVsXG4gKlxuICogQG5hbWUgdW5pcUJ5TGFiZWxcbiAqIEBwYXJhbSB7QXJyYXl9IGZlYXR1cmVzIEFycmF5IG9mIGZlYXR1cmVzXG4gKiBAcmV0dXJucyB7QXJyYXl9ICBBcnJheSBvZiB1bmlxdWUgZmVhdHVyZXNcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC51bmlxQnlMYWJlbChmZWF0dXJlcyk7XG4gKiAvLz0gQXJyYXkoMilcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdW5pcUJ5TGFiZWwoZmVhdHVyZXMpIHtcbiAgcmV0dXJuIHVuaXFXaXRoKGZlYXR1cmVzLCAoZmVhdDEsIGZlYXQyKSA9PiB7XG4gICAgY29uc3QgYm9vbCA9XG4gICAgICBpc0VxdWFsKGdldE5hbWVMYWJlbChmZWF0MS5wcm9wZXJ0aWVzKSwgZ2V0TmFtZUxhYmVsKGZlYXQyLnByb3BlcnRpZXMpKSAmJlxuICAgICAgZmVhdDEucHJvcGVydGllcy5sYXllciA9PT0gZmVhdDIucHJvcGVydGllcy5sYXllcjtcbiAgICBpZiAoXG4gICAgICBib29sICYmXG4gICAgICAoZmVhdDEudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJyB8fCBmZWF0Mi50eXBlID09PSAnRnV0dXJlUm91dGUnKVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gYm9vbDtcbiAgfSk7XG59XG4iLCJpbXBvcnQgZ2V0IGZyb20gJ2xvZGFzaC9nZXQnO1xuXG4vKipcbiAqIEZ1bmN0aW9uIHRoYXQgZmlsdGVycyBsaXN0IG1hdGNoaW5nIHRvIGlucHV0LlxuICpcbiAqIEBuYW1lIGZpbHRlck1hdGNoaW5nVG9JbnB1dFxuICogQHBhcmFtIHtBcnJheX0gbGlzdCBMaXN0IGNvbnRhaW5pbiBvYmplY3RzIGUuZyggIHtcbiAqICAgICAgICAgdHlwZTogJ0ZlYXR1cmUnXG4gKiAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAqICAgICAgICAgICBsYWJlbDogJ3Rlc3RhZGRyZXNzNCcsXG4gKiAgICAgICAgICAgbGF5ZXI6ICdhZGRyZXNzJyxcbiAqICAgICAgICAgICBuYW1lOiAndGVzdGFkZHJlc3M0JyxcbiAqICAgICAgICAgfSxcbiAqICAgICAgICAgZ2VvbWV0cnk6IHsgY29vcmRpbmF0ZXM6IFtsb24sIGxhdF0gfSxcbiAqICAgICAgIH0sKVxuICogQHBhcmFtIHtTdHJpbmd9IElucHV0IElucHV0IGdpdmVuIGZvciBmaWx0ZXJpbmcgdGhlIGxpc3RcbiAqIEBwYXJhbSB7QXJyYXl9IGZpZWxkcyBMaXN0IG9mIGZpZWxkcyB0aGF0IGxpc3QgaXMgZmlsdGVyZWQgYnkgZS5nIChbcHJvcGVydGllcy5sYWJlbCwgcHJvcGVydGllcy5uYW1lXSlcbiAqIEByZXR1cm5zIHtBcnJheX0gRmlsdGVyZWQgQXJyYXkuXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtdXRpbC5maWx0ZXJNYXRjaGluZ1RvSW5wdXQoW3t0eXBlOiBmZWF0dXJlLCBwcm9wZXJ0aWVzIHsgLi4uIG5hbWU6IHRlc3RhZGRyZXNzNCB9IC4uLiB9XSwgJ3Rlc3RhZGRyZXNzNCcsICdwcm9wZXJ0aWVzLm5hbWUnKTtcbiAqIC8vPSBMaXN0IGNvbnRhaW5pbmcgb2JqZWN0IHdpdGggZ2l2ZW4gbmFtZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZmlsdGVyTWF0Y2hpbmdUb0lucHV0KGxpc3QsIElucHV0LCBmaWVsZHMpIHtcbiAgaWYgKHR5cGVvZiBJbnB1dCA9PT0gJ3N0cmluZycgJiYgSW5wdXQubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGlucHV0ID0gSW5wdXQudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgY29uc3QgbXVsdGlXb3JkID0gaW5wdXQuaW5jbHVkZXMoJyAnKSB8fCBpbnB1dC5pbmNsdWRlcygnLCcpO1xuICAgIHJldHVybiBsaXN0LmZpbHRlcihpdGVtID0+IHtcbiAgICAgIGxldCBwYXJ0cyA9IFtdO1xuICAgICAgZmllbGRzLmZvckVhY2gocE5hbWUgPT4ge1xuICAgICAgICBsZXQgdmFsdWUgPSBnZXQoaXRlbSwgcE5hbWUpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhbXVsdGlXb3JkICYmXG4gICAgICAgICAgKHBOYW1lID09PSAncHJvcGVydGllcy5sYWJlbCcgfHwgcE5hbWUgPT09ICdhZGRyZXNzJykgJiZcbiAgICAgICAgICB2YWx1ZVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBzcGVjaWFsIGNhc2U6IGRyb3AgbGFzdCBwYXJ0cyBpLmUuIGNpdHkgYW5kIG5laWdoYm91cmhvb2RcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNwbGl0KCcsJyk7XG4gICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIHZhbHVlLnNwbGljZSh2YWx1ZS5sZW5ndGggLSAyLCAyKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHZhbHVlLnNwbGljZSh2YWx1ZS5sZW5ndGggLSAxLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZS5qb2luKCcsJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKG11bHRpV29yZCkge1xuICAgICAgICAgICAgcGFydHMgPSBwYXJ0cy5jb25jYXQodmFsdWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnRzID0gcGFydHMuY29uY2F0KFxuICAgICAgICAgICAgICB2YWx1ZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLywvZywgJyAnKS5zcGxpdCgnICcpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAocGFydHNbaV0uaW5kZXhPZihpbnB1dCkgPT09IDApIHtcbiAgICAgICAgICAvLyBhY2NlcHQgbWF0Y2ggb25seSBhdCB3b3JkIHN0YXJ0XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBsaXN0O1xufVxuIiwiLyoqXG4gKiBTZXJpYWxpemVzIG9iamVjdHNcbiAqXG4gKiBAbmFtZSBzZXJpYWxpemVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogT2JqZWN0IHRvIGJlIHNlcmlhbGl6ZWRcbiAqIEBwYXJhbSB7QW55fSBwcmVmaXhcbiAqIEByZXR1cm5zIHtTdHJpbmd9IFNlcmlhbGl6ZWQgb2JqZWN0XG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwuc2VyaWFsaXplKHBhcmFtMSwgcGFyYW0yKTtcbiAqIC8vPXRydWVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2VyaWFsaXplKG9iaiwgcHJlZml4KSB7XG4gIGlmICghb2JqKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopXG4gICAgLm1hcChwID0+IHtcbiAgICAgIGNvbnN0IGsgPSBwcmVmaXggfHwgcDtcbiAgICAgIGNvbnN0IHYgPSBvYmpbcF07XG5cbiAgICAgIHJldHVybiB0eXBlb2YgdiA9PT0gJ29iamVjdCdcbiAgICAgICAgPyBzZXJpYWxpemUodiwgaylcbiAgICAgICAgOiBgJHtlbmNvZGVVUklDb21wb25lbnQoayl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHYpfWA7XG4gICAgfSlcbiAgICAuam9pbignJicpO1xufVxuIiwiaW1wb3J0IHNlcmlhbGl6ZSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtc2VyaWFsaXplJztcbi8qKlxuICogIFJldHVybiBQcm9taXNlIGZvciBhIHVybCBqc29uIGdldCByZXF1ZXN0XG4gKlxuICogQG5hbWUgZ2V0SnNvblxuICogQHBhcmFtIHtTdHJpbmd9IHVybFxuICogQHBhcmFtIHtBcnJheX0gcGFyYW1zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSByZXNwb25zZVxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLmdldEpzb24ocGFyYW0xLCBwYXJhbTIpO1xuICogLy89cmVzcG9uc2VcbiAqL1xuY29uc3QgYXhpb3MgPSByZXF1aXJlKCdheGlvcycpLmRlZmF1bHQ7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEpzb24odXJsLCBwYXJhbXMpIHtcbiAgcmV0dXJuIGF4aW9zXG4gICAgLmdldChcbiAgICAgIGVuY29kZVVSSSh1cmwpICtcbiAgICAgICAgKHBhcmFtc1xuICAgICAgICAgID8gKHVybC5zZWFyY2goL1xcPy8pID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemUocGFyYW1zKVxuICAgICAgICAgIDogJycpLFxuICAgICAge1xuICAgICAgICB0aW1lb3V0OiAxMDAwMCxcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcblxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIClcbiAgICAudGhlbihyZXMgPT4ge1xuICAgICAgcmV0dXJuIHJlcy5kYXRhO1xuICAgIH0pO1xufVxuIiwiaW1wb3J0IGdldEpzb24gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1qc29uJztcblxuY29uc3QgREVGQVVMVF9QRUxJQVNfVVJMID0gJ2h0dHBzOi8vYXBpLmRpZ2l0cmFuc2l0LmZpL2dlb2NvZGluZy92MS9zZWFyY2gnO1xuLyoqXG4gKiA8REVTQ1JJUFRJT04+XG4gKlxuICogQG5hbWUgZ2V0R2VvY29kaW5nUmVzdWx0c1xuICogQHBhcmFtIHtTdHJpbmd9IHNlYXJjaFN0cmluZ1xuICogQHBhcmFtIHtTdHJpbmd9IHNlYXJjaFBhcmFtcyAoT3B0aW9uYWwpIFBhcmFtZXRlcnMgYXBwZW5kZWQgdG8gdXJsLCBiYXNpY2FsbHkgYm94IC8gcG9seWdvbiB0byByZXN0cmljdCBzZWFyY2ggYXJlYVxuICogQHBhcmFtIHtTdHJpbmd9IGxhbmcgKE9wdGlvbmFsKSBzZWFyY2ggbGFuZ3VhZ2VcbiAqIEBwYXJhbSB7T2JqZWN0fSBmb2N1c1BvaW50IChPcHRpb25hbCkgT3duIFBvc2l0aW9uIChQRUxJQVMgQVBJKVxuICogQHBhcmFtIHtTdHJpbmd9IHNvdXJjZXMgKE9wdGlvbmFsKSBzZWFyY2ggc291cmNlcyAoZS5nIE9TTSwgR1RGUy4uKVxuICogQHBhcmFtIHtPYmplY3R9IG1pbmltYWxSZWdleHAgKE9wdGlvbmFsKSBSZWdleHAgZm9yIHRlc3RpbmdcbiAqIEBwYXJhbSB7Kn0gZ2VvY29kaW5nTGF5ZXJzIChPcHRpb25hbCkgQXJyYXkgb2Ygc3RyaW5ncyB0aGF0IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIGxheWVycyBpcyBzZWFyY2hlZCwgZS5nLiBbJ3ZlbnVlJywgJ2FkZHJlc3MnLCAnc3RvcCddXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBSZXN1bHRzIGluIEpTT04gZm9ybVxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLmdldEdlb2NvZGluZ1Jlc3VsdHMoXCJyZXN1bHRcIik7XG4gKiAvLz0gZS5nLiB7dGV4dDpcInJlc3VsdFwifVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICBzZWFyY2hTdHJpbmcsXG4gIHNlYXJjaFBhcmFtcyxcbiAgbGFuZyxcbiAgZm9jdXNQb2ludCxcbiAgc291cmNlcyxcbiAgcGVsaWFzVXJsLFxuICBtaW5pbWFsUmVnZXhwLFxuICBnZW9jb2RpbmdMYXllcnMsXG4pIHtcbiAgY29uc3QgdGV4dCA9IHNlYXJjaFN0cmluZyA/IHNlYXJjaFN0cmluZy50cmltKCkgOiBudWxsO1xuICBpZiAoXG4gICAgdGV4dCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgdGV4dCA9PT0gbnVsbCB8fFxuICAgIHRleHQubGVuZ3RoIDwgMSB8fFxuICAgIChtaW5pbWFsUmVnZXhwICYmICFtaW5pbWFsUmVnZXhwLnRlc3QodGV4dCkpXG4gICkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICB9XG4gIGNvbnN0IFBFTElBU19VUkwgPSBwZWxpYXNVcmwgfHwgREVGQVVMVF9QRUxJQVNfVVJMO1xuICBsZXQgb3B0cyA9IHsgdGV4dCwgLi4uc2VhcmNoUGFyYW1zLCAuLi5mb2N1c1BvaW50LCBsYW5nIH07XG4gIGlmIChzb3VyY2VzKSB7XG4gICAgb3B0cyA9IHsgLi4ub3B0cywgc291cmNlcyB9O1xuICB9XG4gIGlmIChnZW9jb2RpbmdMYXllcnMpIHtcbiAgICBjb25zdCBsYXllcnMgPSBnZW9jb2RpbmdMYXllcnMudG9TdHJpbmcoKTtcbiAgICBvcHRzID0geyAuLi5vcHRzLCBsYXllcnMgfTtcbiAgfVxuICByZXR1cm4gZ2V0SnNvbihQRUxJQVNfVVJMLCBvcHRzKS50aGVuKHJlcyA9PiB7XG4gICAgcmV0dXJuIHJlcy5mZWF0dXJlcztcbiAgfSk7XG59XG4iLCJpbXBvcnQgZGVib3VuY2UgZnJvbSAnbG9kYXNoL2RlYm91bmNlJztcbmltcG9ydCBmbGF0dGVuIGZyb20gJ2xvZGFzaC9mbGF0dGVuJztcbmltcG9ydCB0YWtlIGZyb20gJ2xvZGFzaC90YWtlJztcbmltcG9ydCB7XG4gIHNvcnRTZWFyY2hSZXN1bHRzLFxuICBpc1N0b3AsXG59IGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1oZWxwZXJzJztcbmltcG9ydCB1bmlxQnlMYWJlbCBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtdW5pcS1ieS1sYWJlbCc7XG5pbXBvcnQgZmlsdGVyTWF0Y2hpbmdUb0lucHV0IGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1maWx0ZXItbWF0Y2hpbmctdG8taW5wdXQnO1xuaW1wb3J0IGdldEdlb2NvZGluZ1Jlc3VsdHMgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cyc7XG5pbXBvcnQgZ2V0SnNvbiBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWpzb24nO1xuXG5mdW5jdGlvbiBnZXRTdG9wc0Zyb21HZW9jb2Rpbmcoc3RvcHMsIFVSTF9QRUxJQVNfUExBQ0UpIHtcbiAgaWYgKCFzdG9wcyB8fCBzdG9wcy5sZW5ndGggPCAxKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG4gIH1cbiAgbGV0IGdpZHMgPSAnJztcbiAgY29uc3Qgc3RvcHNXaXRoR2lkcyA9IHN0b3BzLm1hcChzdG9wID0+IHtcbiAgICBjb25zdCB0eXBlID0gc3RvcC50eXBlID09PSAnc3RvcCcgPyAnc3RvcCcgOiAnc3RhdGlvbic7XG4gICAgbGV0IGdpZCA9IGBndGZzJHtzdG9wLmd0ZnNJZC5zcGxpdCgnOicpWzBdLnRvTG93ZXJDYXNlKCl9OiR7dHlwZX06R1RGUzoke1xuICAgICAgc3RvcC5ndGZzSWRcbiAgICB9YDtcbiAgICBpZiAoc3RvcC5jb2RlKSB7XG4gICAgICBnaWQgKz0gYCMke3N0b3AuY29kZX1gO1xuICAgIH1cbiAgICBnaWRzICs9IGAke2dpZH0sYDtcbiAgICByZXR1cm4geyAuLi5zdG9wLCBnaWQgfTtcbiAgfSk7XG4gIGNvbnN0IHN0b3BTdGF0aW9uTWFwID0gc3RvcHNXaXRoR2lkcy5yZWR1Y2UoZnVuY3Rpb24gKG1hcCwgc3RvcE9yU3RhdGlvbikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIG1hcFtzdG9wT3JTdGF0aW9uLmdpZF0gPSBzdG9wT3JTdGF0aW9uO1xuICAgIHJldHVybiBtYXA7XG4gIH0sIHt9KTtcbiAgcmV0dXJuIGdldEpzb24oVVJMX1BFTElBU19QTEFDRSwge1xuICAgIGlkczogZ2lkcy5zbGljZSgwLCAtMSksXG4gICAgLy8gbGFuZzogY29udGV4dC5nZXRTdG9yZSgnUHJlZmVyZW5jZXNTdG9yZScpLmdldExhbmd1YWdlKCksIFRPRE8gZW5hYmxlIHRoaXMgd2hlbiBPVFAgc3VwcG9ydHMgdHJhbnNsYXRpb25zXG4gIH0pLnRoZW4ocmVzID0+IHtcbiAgICByZXR1cm4gcmVzLmZlYXR1cmVzLm1hcChzdG9wID0+IHtcbiAgICAgIGNvbnN0IGZhdm91cml0ZSA9IHtcbiAgICAgICAgdHlwZTogJ0Zhdm91cml0ZVN0b3AnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgYWRkZW5kdW06IHN0b3AucHJvcGVydGllcy5hZGRlbmR1bSxcbiAgICAgICAgICBnaWQ6IHN0b3BTdGF0aW9uTWFwW3N0b3AucHJvcGVydGllcy5naWRdLmdpZCxcbiAgICAgICAgICBjb2RlOiBzdG9wU3RhdGlvbk1hcFtzdG9wLnByb3BlcnRpZXMuZ2lkXS5jb2RlLFxuICAgICAgICAgIGd0ZnNJZDogc3RvcFN0YXRpb25NYXBbc3RvcC5wcm9wZXJ0aWVzLmdpZF0uZ3Rmc0lkLFxuICAgICAgICAgIGxhc3RVcGRhdGVkOiBzdG9wU3RhdGlvbk1hcFtzdG9wLnByb3BlcnRpZXMuZ2lkXS5sYXN0VXBkYXRlZCxcbiAgICAgICAgICBmYXZvdXJpdGVJZDogc3RvcFN0YXRpb25NYXBbc3RvcC5wcm9wZXJ0aWVzLmdpZF0uZmF2b3VyaXRlSWQsXG4gICAgICAgICAgYWRkcmVzczogc3RvcC5wcm9wZXJ0aWVzLmxhYmVsLFxuICAgICAgICAgIGxheWVyOiBpc1N0b3Aoc3RvcC5wcm9wZXJ0aWVzKSA/ICdmYXZvdXJpdGVTdG9wJyA6ICdmYXZvdXJpdGVTdGF0aW9uJyxcbiAgICAgICAgfSxcbiAgICAgICAgZ2VvbWV0cnk6IHN0b3AuZ2VvbWV0cnksXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGZhdm91cml0ZTtcbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBnZXRGYXZvdXJpdGVMb2NhdGlvbnMoZmF2b3VyaXRlcywgaW5wdXQpIHtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQoZmF2b3VyaXRlcywgaW5wdXQsIFsnYWRkcmVzcycsICduYW1lJ10pLm1hcChpdGVtID0+ICh7XG4gICAgICB0eXBlOiAnRmF2b3VyaXRlUGxhY2UnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAuLi5pdGVtLFxuICAgICAgICBsYWJlbDogaXRlbS5uYW1lLFxuICAgICAgICBsYXllcjogJ2Zhdm91cml0ZVBsYWNlJyxcbiAgICAgIH0sXG4gICAgICBnZW9tZXRyeTogeyB0eXBlOiAnUG9pbnQnLCBjb29yZGluYXRlczogW2l0ZW0ubG9uLCBpdGVtLmxhdF0gfSxcbiAgICB9KSksXG4gICk7XG59XG5mdW5jdGlvbiBzZWxlY3RQb3NpdGlvbkZvbU1hcChpbnB1dCkge1xuICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJyB8fCBpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ1NlbGVjdEZyb21NYXAnLFxuICAgICAgICBhZGRyZXNzOiAnU2VsZWN0RnJvbU1hcCcsXG4gICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgbG9uOiBudWxsLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgbGFiZWxJZDogJ3NlbGVjdC1mcm9tLW1hcCcsXG4gICAgICAgICAgbGF5ZXI6ICdzZWxlY3RGcm9tTWFwJyxcbiAgICAgICAgICBhZGRyZXNzOiAnU2VsZWN0RnJvbU1hcCcsXG4gICAgICAgICAgbGF0OiBudWxsLFxuICAgICAgICAgIGxvbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgICAgIGNvb3JkaW5hdGVzOiBbXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXSk7XG4gIH1cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRQb3NpdGlvbklmRW1wdHkoaW5wdXQsIHBvc2l0aW9uKSB7XG4gIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnIHx8IGlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnQ3VycmVudExvY2F0aW9uJyxcbiAgICAgICAgYWRkcmVzczogcG9zaXRpb24uYWRkcmVzcyxcbiAgICAgICAgbGF0OiBwb3NpdGlvbi5sYXQsXG4gICAgICAgIGxvbjogcG9zaXRpb24ubG9uLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgbGFiZWxJZDogJ3VzZS1vd24tcG9zaXRpb24nLFxuICAgICAgICAgIGxheWVyOiAnY3VycmVudFBvc2l0aW9uJyxcbiAgICAgICAgICBhZGRyZXNzOiBwb3NpdGlvbi5hZGRyZXNzLFxuICAgICAgICAgIGxhdDogcG9zaXRpb24ubGF0LFxuICAgICAgICAgIGxvbjogcG9zaXRpb24ubG9uLFxuICAgICAgICB9LFxuICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgIHR5cGU6ICdQb2ludCcsXG4gICAgICAgICAgY29vcmRpbmF0ZXM6IFtwb3NpdGlvbi5sb24sIHBvc2l0aW9uLmxhdF0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdEZyb21Pd25Mb2NhdGlvbnMoaW5wdXQpIHtcbiAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycgfHwgaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyxcbiAgICAgICAgYWRkcmVzczogJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnLFxuICAgICAgICBsYXQ6IG51bGwsXG4gICAgICAgIGxvbjogbnVsbCxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGxhYmVsSWQ6ICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJyxcbiAgICAgICAgICBsYXllcjogJ293bkxvY2F0aW9ucycsXG4gICAgICAgICAgYWRkcmVzczogJ3NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnLFxuICAgICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgICBsb246IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIGdlb21ldHJ5OiB7XG4gICAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgICBjb29yZGluYXRlczogW10sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xufVxuXG5mdW5jdGlvbiBnZXRCYWNrU3VnZ2VzdGlvbigpIHtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXG4gICAge1xuICAgICAgdHlwZTogJ2JhY2snLFxuICAgICAgYWRkcmVzczogJ2JhY2snLFxuICAgICAgbGF0OiBudWxsLFxuICAgICAgbG9uOiBudWxsLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBsYWJlbElkOiAnYmFjaycsXG4gICAgICAgIGxheWVyOiAnYmFjaycsXG4gICAgICAgIGFkZHJlc3M6ICdiYWNrJyxcbiAgICAgICAgbGF0OiBudWxsLFxuICAgICAgICBsb246IG51bGwsXG4gICAgICB9LFxuICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgY29vcmRpbmF0ZXM6IFtdLFxuICAgICAgfSxcbiAgICB9LFxuICBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0RmF2b3VyaXRlU3RvcHMoc3RvcHNBbmRTdGF0aW9ucywgaW5wdXQpIHtcbiAgcmV0dXJuIHN0b3BzQW5kU3RhdGlvbnMudGhlbihzdG9wcyA9PiB7XG4gICAgcmV0dXJuIGZpbHRlck1hdGNoaW5nVG9JbnB1dChzdG9wcywgaW5wdXQsIFtcbiAgICAgICdwcm9wZXJ0aWVzLm5hbWUnLFxuICAgICAgJ3Byb3BlcnRpZXMubmFtZScsXG4gICAgICAncHJvcGVydGllcy5hZGRyZXNzJyxcbiAgICBdKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldE9sZFNlYXJjaGVzKG9sZFNlYXJjaGVzLCBpbnB1dCwgZHJvcExheWVycykge1xuICBsZXQgbWF0Y2hpbmdPbGRTZWFyY2hlcyA9IGZpbHRlck1hdGNoaW5nVG9JbnB1dChvbGRTZWFyY2hlcywgaW5wdXQsIFtcbiAgICAncHJvcGVydGllcy5uYW1lJyxcbiAgICAncHJvcGVydGllcy5sYWJlbCcsXG4gICAgJ3Byb3BlcnRpZXMuYWRkcmVzcycsXG4gICAgJ3Byb3BlcnRpZXMuc2hvcnROYW1lJyxcbiAgICAncHJvcGVydGllcy5sb25nTmFtZScsXG4gIF0pO1xuICBpZiAoZHJvcExheWVycykge1xuICAgIC8vIGRvbid0IHdhbnQgdGhlc2VcbiAgICBtYXRjaGluZ09sZFNlYXJjaGVzID0gbWF0Y2hpbmdPbGRTZWFyY2hlcy5maWx0ZXIoXG4gICAgICBpdGVtID0+ICFkcm9wTGF5ZXJzLmluY2x1ZGVzKGl0ZW0ucHJvcGVydGllcy5sYXllciksXG4gICAgKTtcbiAgfVxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgIHRha2UobWF0Y2hpbmdPbGRTZWFyY2hlcywgMTApLm1hcChpdGVtID0+IHtcbiAgICAgIGNvbnN0IG5ld0l0ZW0gPSB7XG4gICAgICAgIC4uLml0ZW0sXG4gICAgICAgIHR5cGU6ICdPbGRTZWFyY2gnLFxuICAgICAgICB0aW1ldGFibGVDbGlja2VkOiBmYWxzZSwgLy8gcmVzZXQgbGF0ZXN0IHNlbGVjdGlvbiBhY3Rpb25cbiAgICAgICAgYXJyb3dDbGlja2VkOiBmYWxzZSxcbiAgICAgIH07XG4gICAgICBkZWxldGUgbmV3SXRlbS5wcm9wZXJ0aWVzLmNvbmZpZGVuY2U7XG4gICAgICByZXR1cm4gbmV3SXRlbTtcbiAgICB9KSxcbiAgKTtcbn1cblxuZnVuY3Rpb24gaGFzRmF2b3VyaXRlcyhjb250ZXh0LCBsb2NhdGlvbnMsIHN0b3BzKSB7XG4gIGNvbnN0IGZhdm91cml0ZUxvY2F0aW9ucyA9IGxvY2F0aW9ucyhjb250ZXh0KTtcbiAgaWYgKGZhdm91cml0ZUxvY2F0aW9ucyAmJiBmYXZvdXJpdGVMb2NhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IGZhdm91cml0ZVN0b3BzID0gc3RvcHMoY29udGV4dCk7XG4gIHJldHVybiBmYXZvdXJpdGVTdG9wcyAmJiBmYXZvdXJpdGVTdG9wcy5sZW5ndGggPiAwO1xufVxuXG5jb25zdCByb3V0ZUxheWVycyA9IFtcbiAgJ3JvdXRlLVRSQU0nLFxuICAncm91dGUtQlVTJyxcbiAgJ3JvdXRlLVJBSUwnLFxuICAncm91dGUtRkVSUlknLFxuICAncm91dGUtU1VCV0FZJyxcbiAgJ3JvdXRlLUFJUlBMQU5FJyxcbl07XG5jb25zdCBsb2NhdGlvbkxheWVycyA9IFsnZmF2b3VyaXRlUGxhY2UnLCAndmVudWUnLCAnYWRkcmVzcycsICdzdHJlZXQnXTtcbmNvbnN0IHBhcmtpbmdMYXllcnMgPSBbJ2NhcnBhcmsnLCAnYmlrZXBhcmsnXTtcbi8qKlxuICogRXhlY3V0ZXMgdGhlIHNlYXJjaFxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlYXJjaFJlc3VsdHMoXG4gIHRhcmdldHMsXG4gIHNvdXJjZXMsXG4gIHRyYW5zcG9ydE1vZGUsXG4gIHNlYXJjaENvbnRleHQsXG4gIGZpbHRlclJlc3VsdHMsXG4gIGdlb2NvZGluZ1NpemUsXG4gIHsgaW5wdXQgfSxcbiAgY2FsbGJhY2ssXG4gIHBhdGhPcHRzLFxuICByZWZQb2ludCxcbikge1xuICBjb25zdCB7XG4gICAgZ2V0UG9zaXRpb25zLFxuICAgIGdldEZhdm91cml0ZUxvY2F0aW9uczogbG9jYXRpb25zLFxuICAgIGdldE9sZFNlYXJjaGVzOiBwcmV2U2VhcmNoZXMsXG4gICAgZ2V0RmF2b3VyaXRlU3RvcHM6IHN0b3BzLFxuICAgIHBhcmtpbmdBcmVhU291cmNlcyxcbiAgICBnZXRMYW5ndWFnZSxcbiAgICBnZXRTdG9wQW5kU3RhdGlvbnNRdWVyeSxcbiAgICBnZXRGYXZvdXJpdGVCaWtlUmVudGFsU3RhdGlvbnNRdWVyeSxcbiAgICBnZXRGYXZvdXJpdGVCaWtlUmVudGFsU3RhdGlvbnMsXG4gICAgZ2V0RmF2b3VyaXRlUm91dGVzUXVlcnksXG4gICAgZ2V0RmF2b3VyaXRlUm91dGVzLFxuICAgIGdldFJvdXRlc1F1ZXJ5LFxuICAgIGNvbnRleHQsXG4gICAgaXNQZWxpYXNMb2NhdGlvbkF3YXJlOiBsb2NhdGlvbkF3YXJlLFxuICAgIG1pbmltYWxSZWdleHAsXG4gICAgbGluZVJlZ2V4cCxcbiAgICBVUkxfUEVMSUFTLFxuICAgIFVSTF9QRUxJQVNfUExBQ0UsXG4gICAgZmVlZElEcyxcbiAgICBnZW9jb2RpbmdTZWFyY2hQYXJhbXMsXG4gICAgZ2VvY29kaW5nU291cmNlcyxcbiAgICBnZXRGdXR1cmVSb3V0ZXMsXG4gICAgY2l0eUJpa2VOZXR3b3JrcyxcbiAgfSA9IHNlYXJjaENvbnRleHQ7XG4gIC8vIGlmIG5vIHRhcmdldHMgYXJlIHByb3ZpZGVkLCBzZWFyY2ggdGhlbSBhbGwuXG4gIGNvbnN0IGFsbFRhcmdldHMgPSAhdGFyZ2V0cyB8fCB0YXJnZXRzLmxlbmd0aCA9PT0gMDtcbiAgLy8gaWYgbm8gc291cmNlcyBhcmUgcHJvdmlkZWQsIHVzZSB0aGVtIGFsbC5cbiAgY29uc3QgYWxsU291cmNlcyA9ICFzb3VyY2VzIHx8IHNvdXJjZXMubGVuZ3RoID09PSAwO1xuICBjb25zdCBwb3NpdGlvbiA9IGdldFBvc2l0aW9ucyhjb250ZXh0KTtcbiAgY29uc3Qgc2VhcmNoQ29tcG9uZW50cyA9IFtdO1xuICBjb25zdCBzZWFyY2hlcyA9IHsgdHlwZTogJ2FsbCcsIHRlcm06IGlucHV0LCByZXN1bHRzOiBbXSB9O1xuICBjb25zdCBsYW5ndWFnZSA9IGdldExhbmd1YWdlKGNvbnRleHQpO1xuICBjb25zdCBmb2N1c1BvaW50ID1cbiAgICBsb2NhdGlvbkF3YXJlICYmIHJlZlBvaW50Py5sYXQgJiYgcmVmUG9pbnQ/LmxvblxuICAgICAgPyB7XG4gICAgICAgICAgLy8gUm91bmQgY29vcmRpbmF0ZXMgdG8gYXBwcm94IDEga20sIGluIG9yZGVyIHRvIGltcHJvdmUgY2FjaGluZ1xuICAgICAgICAgICdmb2N1cy5wb2ludC5sYXQnOiByZWZQb2ludC5sYXQudG9GaXhlZCgzKSxcbiAgICAgICAgICAnZm9jdXMucG9pbnQubG9uJzogcmVmUG9pbnQubG9uLnRvRml4ZWQoMyksXG4gICAgICAgIH1cbiAgICAgIDoge307XG4gIGNvbnN0IG1vZGUgPSB0cmFuc3BvcnRNb2RlID8gdHJhbnNwb3J0TW9kZS5zcGxpdCgnLScpWzFdIDogdW5kZWZpbmVkO1xuICBpZiAoXG4gICAgdGFyZ2V0cy5pbmNsdWRlcygnQ3VycmVudFBvc2l0aW9uJykgJiZcbiAgICBwb3NpdGlvbi5zdGF0dXMgIT09ICdnZW9sb2NhdGlvbi1ub3Qtc3VwcG9ydGVkJ1xuICApIHtcbiAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goZ2V0Q3VycmVudFBvc2l0aW9uSWZFbXB0eShpbnB1dCwgcG9zaXRpb24pKTtcbiAgfVxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdNYXBQb3NpdGlvbicpKSB7XG4gICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKHNlbGVjdFBvc2l0aW9uRm9tTWFwKGlucHV0KSk7XG4gIH1cbiAgaWYgKHRhcmdldHMuaW5jbHVkZXMoJ0Z1dHVyZVJvdXRlcycpKSB7XG4gICAgY29uc3QgaXRlbXMgPSBnZXRGdXR1cmVSb3V0ZXMoY29udGV4dCk7XG4gICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKHRha2UoaXRlbXMsIDMpKTtcbiAgfVxuICBpZiAoXG4gICAgdGFyZ2V0cy5pbmNsdWRlcygnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycpICYmXG4gICAgaGFzRmF2b3VyaXRlcyhjb250ZXh0LCBsb2NhdGlvbnMsIHN0b3BzKVxuICApIHtcbiAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goc2VsZWN0RnJvbU93bkxvY2F0aW9ucyhpbnB1dCkpO1xuICB9XG4gIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ0xvY2F0aW9ucycpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gZ2VvY29kaW5nU2VhcmNoUGFyYW1zO1xuICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgY29uc3QgZmF2b3VyaXRlTG9jYXRpb25zID0gbG9jYXRpb25zKGNvbnRleHQpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKGdldEZhdm91cml0ZUxvY2F0aW9ucyhmYXZvdXJpdGVMb2NhdGlvbnMsIGlucHV0KSk7XG4gICAgICBpZiAoc291cmNlcy5pbmNsdWRlcygnQmFjaycpKSB7XG4gICAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChnZXRCYWNrU3VnZ2VzdGlvbigpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdEYXRhc291cmNlJykpIHtcbiAgICAgIGNvbnN0IGdlb2NvZGluZ0xheWVycyA9IFsnc3RhdGlvbicsICd2ZW51ZScsICdhZGRyZXNzJywgJ3N0cmVldCddO1xuICAgICAgY29uc3QgZmVlZGlzID0gZmVlZElEcy5tYXAodiA9PiBgZ3RmcyR7dn1gKTtcbiAgICAgIGNvbnN0IGdlb3NvdXJjZXMgPSBnZW9jb2RpbmdTb3VyY2VzLmNvbmNhdChmZWVkaXMpLmpvaW4oJywnKTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0R2VvY29kaW5nUmVzdWx0cyhcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBzZWFyY2hQYXJhbXMsXG4gICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgZm9jdXNQb2ludCxcbiAgICAgICAgICBnZW9zb3VyY2VzLFxuICAgICAgICAgIFVSTF9QRUxJQVMsXG4gICAgICAgICAgbWluaW1hbFJlZ2V4cCxcbiAgICAgICAgICBnZW9jb2RpbmdMYXllcnMsXG4gICAgICAgICAgcmVmUG9pbnQsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdIaXN0b3J5JykpIHtcbiAgICAgIGNvbnN0IGxvY2F0aW9uSGlzdG9yeSA9IHByZXZTZWFyY2hlcyhjb250ZXh0LCAnZW5kcG9pbnQnKTtcbiAgICAgIGNvbnN0IGRyb3BMYXllcnMgPSBbXG4gICAgICAgICdjdXJyZW50UG9zaXRpb24nLFxuICAgICAgICAnc2VsZWN0RnJvbU1hcCcsXG4gICAgICAgICdmdXR1cmVSb3V0ZScsXG4gICAgICAgICdvd25Mb2NhdGlvbnMnLFxuICAgICAgICAnYmlrZVJlbnRhbFN0YXRpb24nLFxuICAgICAgICAnYmlrZXBhcmsnLFxuICAgICAgICAnY2FycGFyaycsXG4gICAgICAgICdzdG9wJyxcbiAgICAgICAgJ2JhY2snLFxuICAgICAgXTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5yb3V0ZUxheWVycyk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goZ2V0T2xkU2VhcmNoZXMobG9jYXRpb25IaXN0b3J5LCBpbnB1dCwgZHJvcExheWVycykpO1xuICAgIH1cbiAgfVxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdQYXJraW5nQXJlYXMnKSkge1xuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0RhdGFzb3VyY2UnKSkge1xuICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gZ2VvY29kaW5nU2VhcmNoUGFyYW1zO1xuICAgICAgaWYgKGdlb2NvZGluZ1NpemUgJiYgZ2VvY29kaW5nU2l6ZSAhPT0gMTApIHtcbiAgICAgICAgc2VhcmNoUGFyYW1zLnNpemUgPSBnZW9jb2RpbmdTaXplO1xuICAgICAgfVxuICAgICAgY29uc3QgZ2VvY29kaW5nTGF5ZXJzID0gWydjYXJwYXJrJywgJ2Jpa2VwYXJrJ107XG4gICAgICBjb25zdCBmZWVkSWRzID0gcGFya2luZ0FyZWFTb3VyY2VzID8gcGFya2luZ0FyZWFTb3VyY2VzLmpvaW4oJywnKSA6IG51bGw7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGdldEdlb2NvZGluZ1Jlc3VsdHMoXG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgc2VhcmNoUGFyYW1zLFxuICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgIGZvY3VzUG9pbnQsXG4gICAgICAgICAgZmVlZElkcyxcbiAgICAgICAgICBVUkxfUEVMSUFTLFxuICAgICAgICAgIG1pbmltYWxSZWdleHAsXG4gICAgICAgICAgZ2VvY29kaW5nTGF5ZXJzLFxuICAgICAgICApLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgaWYgKGZpbHRlclJlc3VsdHMpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdIaXN0b3J5JykpIHtcbiAgICAgIGNvbnN0IGhpc3RvcnkgPSBwcmV2U2VhcmNoZXMoY29udGV4dCk7XG4gICAgICBjb25zdCBkcm9wTGF5ZXJzID0gW1xuICAgICAgICAnY3VycmVudFBvc2l0aW9uJyxcbiAgICAgICAgJ3NlbGVjdEZyb21NYXAnLFxuICAgICAgICAnZnV0dXJlUm91dGUnLFxuICAgICAgICAnb3duTG9jYXRpb25zJyxcbiAgICAgICAgJ2Zhdm91cml0ZVBsYWNlJyxcbiAgICAgICAgJ2Jpa2VzdGF0aW9uJyxcbiAgICAgICAgJ2Jpa2VSZW50YWxTdGF0aW9uJyxcbiAgICAgICAgJ2JhY2snLFxuICAgICAgXTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5yb3V0ZUxheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ubG9jYXRpb25MYXllcnMpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKGdldE9sZFNlYXJjaGVzKGhpc3RvcnksIGlucHV0LCBkcm9wTGF5ZXJzKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnU3RvcHMnKSkge1xuICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgY29uc3QgZmF2b3VyaXRlU3RvcHMgPSBzdG9wcyhjb250ZXh0KTtcbiAgICAgIGxldCBzdG9wc0FuZFN0YXRpb25zO1xuICAgICAgaWYgKGZhdm91cml0ZVN0b3BzLmV2ZXJ5KHN0b3AgPT4gc3RvcC50eXBlID09PSAnc3RhdGlvbicpKSB7XG4gICAgICAgIHN0b3BzQW5kU3RhdGlvbnMgPSBnZXRTdG9wc0Zyb21HZW9jb2RpbmcoXG4gICAgICAgICAgZmF2b3VyaXRlU3RvcHMsXG4gICAgICAgICAgVVJMX1BFTElBU19QTEFDRSxcbiAgICAgICAgKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXJSZXN1bHRzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RvcHNBbmRTdGF0aW9ucyA9IGdldFN0b3BBbmRTdGF0aW9uc1F1ZXJ5KGZhdm91cml0ZVN0b3BzKVxuICAgICAgICAgIC50aGVuKGZhdm91cml0ZXMgPT5cbiAgICAgICAgICAgIGdldFN0b3BzRnJvbUdlb2NvZGluZyhmYXZvdXJpdGVzLCBVUkxfUEVMSUFTX1BMQUNFKSxcbiAgICAgICAgICApXG4gICAgICAgICAgLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0cykge1xuICAgICAgICAgICAgICByZXR1cm4gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKGdldEZhdm91cml0ZVN0b3BzKHN0b3BzQW5kU3RhdGlvbnMsIGlucHV0KSk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0RhdGFzb3VyY2UnKSkge1xuICAgICAgY29uc3QgZ2VvY29kaW5nTGF5ZXJzID0gWydzdG9wJywgJ3N0YXRpb24nXTtcbiAgICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9XG4gICAgICAgIGdlb2NvZGluZ1NpemUgJiYgZ2VvY29kaW5nU2l6ZSAhPT0gMTAgPyB7IHNpemU6IGdlb2NvZGluZ1NpemUgfSA6IHt9O1xuICAgICAgLy8gYSBsaXR0bGUgaGFjazogd2hlbiBzZWFyY2hpbmcgbG9jYXRpb24gZGF0YSwgYXV0b21hdGljYWxseSBkZWR1cGUgc3RvcHNcbiAgICAgIC8vIHRoaXMgY291bGQgYmUgYSBuZXcgZXhwbGljaXQgcHJvcFxuICAgICAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnTG9jYXRpb25zJykpIHtcbiAgICAgICAgc2VhcmNoUGFyYW1zLmRlZHVwZXN0b3BzID0gMTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZlZWRpcyA9IGZlZWRJRHMubWFwKHYgPT4gYGd0ZnMke3Z9YCkuam9pbignLCcpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBmb2N1c1BvaW50LFxuICAgICAgICAgIGZlZWRpcyxcbiAgICAgICAgICBVUkxfUEVMSUFTLFxuICAgICAgICAgIG1pbmltYWxSZWdleHAsXG4gICAgICAgICAgZ2VvY29kaW5nTGF5ZXJzLFxuICAgICAgICApLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgaWYgKGZpbHRlclJlc3VsdHMpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdIaXN0b3J5JykpIHtcbiAgICAgIGNvbnN0IHN0b3BIaXN0b3J5ID0gcHJldlNlYXJjaGVzKGNvbnRleHQpLmZpbHRlcihpdGVtID0+IHtcbiAgICAgICAgaWYgKGl0ZW0ucHJvcGVydGllcy5naWQpIHtcbiAgICAgICAgICByZXR1cm4gaXRlbS5wcm9wZXJ0aWVzLmdpZC5pbmNsdWRlcygnR1RGUzonKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZHJvcExheWVycyA9IFtcbiAgICAgICAgJ2N1cnJlbnRQb3NpdGlvbicsXG4gICAgICAgICdzZWxlY3RGcm9tTWFwJyxcbiAgICAgICAgJ2Z1dHVyZVJvdXRlJyxcbiAgICAgICAgJ293bkxvY2F0aW9ucycsXG4gICAgICAgICdmYXZvdXJpdGVQbGFjZScsXG4gICAgICAgICdiaWtlUmVudGFsU3RhdGlvbicsXG4gICAgICAgICdiYWNrJyxcbiAgICAgIF07XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucm91dGVMYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLmxvY2F0aW9uTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5wYXJraW5nTGF5ZXJzKTtcbiAgICAgIGlmICh0cmFuc3BvcnRNb2RlKSB7XG4gICAgICAgIGlmICh0cmFuc3BvcnRNb2RlICE9PSAncm91dGUtQ0lUWUJJS0UnKSB7XG4gICAgICAgICAgZHJvcExheWVycy5wdXNoKCdiaWtlUmVudGFsU3RhdGlvbicpO1xuICAgICAgICAgIGRyb3BMYXllcnMucHVzaCgnYmlrZXN0YXRpb24nKTtcbiAgICAgICAgfVxuICAgICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgICAgZ2V0T2xkU2VhcmNoZXMoc3RvcEhpc3RvcnksIGlucHV0LCBkcm9wTGF5ZXJzKS50aGVuKHJlc3VsdCA9PlxuICAgICAgICAgICAgZmlsdGVyUmVzdWx0cyA/IGZpbHRlclJlc3VsdHMocmVzdWx0LCBtb2RlKSA6IHJlc3VsdCxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKGdldE9sZFNlYXJjaGVzKHN0b3BIaXN0b3J5LCBpbnB1dCwgZHJvcExheWVycykpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ1JvdXRlcycpKSB7XG4gICAgaWYgKHNvdXJjZXMuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKSB7XG4gICAgICBjb25zdCBmYXZvdXJpdGVSb3V0ZXMgPSBnZXRGYXZvdXJpdGVSb3V0ZXMoY29udGV4dCk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGdldEZhdm91cml0ZVJvdXRlc1F1ZXJ5KFxuICAgICAgICAgIGZhdm91cml0ZVJvdXRlcyxcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBtb2RlLFxuICAgICAgICAgIHBhdGhPcHRzLFxuICAgICAgICApLnRoZW4ocmVzdWx0ID0+XG4gICAgICAgICAgZmlsdGVyUmVzdWx0cyA/IGZpbHRlclJlc3VsdHMocmVzdWx0LCBtb2RlLCAnUm91dGVzJykgOiByZXN1bHQsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICBnZXRSb3V0ZXNRdWVyeShpbnB1dCwgZmVlZElEcywgdHJhbnNwb3J0TW9kZSwgcGF0aE9wdHMpLnRoZW4ocmVzdWx0ID0+XG4gICAgICAgIGZpbHRlclJlc3VsdHMgPyBmaWx0ZXJSZXN1bHRzKHJlc3VsdCwgbW9kZSwgJ1JvdXRlcycpIDogcmVzdWx0LFxuICAgICAgKSxcbiAgICApO1xuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0hpc3RvcnknKSkge1xuICAgICAgY29uc3Qgcm91dGVIaXN0b3J5ID0gcHJldlNlYXJjaGVzKGNvbnRleHQpO1xuICAgICAgY29uc3QgZHJvcExheWVycyA9IFtcbiAgICAgICAgJ2N1cnJlbnRQb3NpdGlvbicsXG4gICAgICAgICdzZWxlY3RGcm9tTWFwJyxcbiAgICAgICAgJ2Z1dHVyZVJvdXRlJyxcbiAgICAgICAgJ2Zhdm91cml0ZVBsYWNlJyxcbiAgICAgICAgJ3N0b3AnLFxuICAgICAgICAnc3RhdGlvbicsXG4gICAgICAgICdiaWtlcGFyaycsXG4gICAgICAgICdjYXJwYXJrJyxcbiAgICAgICAgJ293bkxvY2F0aW9ucycsXG4gICAgICAgICdiYWNrJyxcbiAgICAgIF07XG4gICAgICBpZiAodHJhbnNwb3J0TW9kZSkge1xuICAgICAgICBpZiAodHJhbnNwb3J0TW9kZSAhPT0gJ3JvdXRlLUNJVFlCSUtFJykge1xuICAgICAgICAgIGRyb3BMYXllcnMucHVzaCgnYmlrZVJlbnRhbFN0YXRpb24nKTtcbiAgICAgICAgICBkcm9wTGF5ZXJzLnB1c2goJ2Jpa2VzdGF0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgZHJvcExheWVycy5wdXNoKC4uLnJvdXRlTGF5ZXJzLmZpbHRlcihpID0+ICEoaSA9PT0gdHJhbnNwb3J0TW9kZSkpKTtcbiAgICAgIH1cbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5sb2NhdGlvbkxheWVycyk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGdldE9sZFNlYXJjaGVzKHJvdXRlSGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpLnRoZW4ocmVzdWx0cyA9PlxuICAgICAgICAgIGZpbHRlclJlc3VsdHMgPyBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUsICdSb3V0ZXMnKSA6IHJlc3VsdHMsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdCaWtlUmVudGFsU3RhdGlvbnMnKSkge1xuICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgY29uc3QgZmF2b3VyaXRlQmlrZVN0YXRpb25zID0gZ2V0RmF2b3VyaXRlQmlrZVJlbnRhbFN0YXRpb25zKGNvbnRleHQpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRGYXZvdXJpdGVCaWtlUmVudGFsU3RhdGlvbnNRdWVyeShmYXZvdXJpdGVCaWtlU3RhdGlvbnMsIGlucHV0KSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0RhdGFzb3VyY2UnKSkge1xuICAgICAgY29uc3QgZ2VvY29kaW5nTGF5ZXJzID0gWydiaWtlc3RhdGlvbiddO1xuICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID1cbiAgICAgICAgZ2VvY29kaW5nU2l6ZSAmJiBnZW9jb2RpbmdTaXplICE9PSAxMCA/IHsgc2l6ZTogZ2VvY29kaW5nU2l6ZSB9IDoge307XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGdldEdlb2NvZGluZ1Jlc3VsdHMoXG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgc2VhcmNoUGFyYW1zLFxuICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgIGZvY3VzUG9pbnQsXG4gICAgICAgICAgY2l0eUJpa2VOZXR3b3Jrcy5qb2luKCcsJyksXG4gICAgICAgICAgVVJMX1BFTElBUyxcbiAgICAgICAgICBtaW5pbWFsUmVnZXhwLFxuICAgICAgICAgIGdlb2NvZGluZ0xheWVycyxcbiAgICAgICAgKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXJSZXN1bHRzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlLCAnQmlrZVJlbnRhbFN0YXRpb25zJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2VhcmNoUmVzdWx0c1Byb21pc2UgPSBQcm9taXNlLmFsbChzZWFyY2hDb21wb25lbnRzKVxuICAgIC50aGVuKGZsYXR0ZW4pXG4gICAgLnRoZW4odW5pcUJ5TGFiZWwpXG4gICAgLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICBzZWFyY2hlcy5yZXN1bHRzID0gcmVzdWx0cztcbiAgICB9KVxuICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgc2VhcmNoZXMuZXJyb3IgPSBlcnI7XG4gICAgfSk7XG4gIHNlYXJjaFJlc3VsdHNQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgIGNhbGxiYWNrKHtcbiAgICAgIC4uLnNlYXJjaGVzLFxuICAgICAgcmVzdWx0czogc29ydFNlYXJjaFJlc3VsdHMobGluZVJlZ2V4cCwgc2VhcmNoZXMucmVzdWx0cywgaW5wdXQpLFxuICAgIH0pO1xuICB9KTtcbn1cblxuY29uc3QgZGVib3VuY2VkU2VhcmNoID0gZGVib3VuY2UoZ2V0U2VhcmNoUmVzdWx0cywgMzAwLCB7XG4gIGxlYWRpbmc6IHRydWUsXG59KTtcblxuZXhwb3J0IGNvbnN0IGV4ZWN1dGVTZWFyY2ggPSAoXG4gIHRhcmdldHMsXG4gIHNvdXJjZXMsXG4gIHRyYW5zcG9ydE1vZGUsXG4gIHNlYXJjaENvbnRleHQsXG4gIGZpbHRlclJlc3VsdHMsXG4gIGdlb2NvZGluZ1NpemUsXG4gIGRhdGEsXG4gIGNhbGxiYWNrLFxuICBwYXRoT3B0cyxcbiAgcmVmUG9pbnQsXG4pID0+IHtcbiAgY2FsbGJhY2sobnVsbCk7IC8vIFRoaXMgbWVhbnMgJ3dlIGFyZSBzZWFyY2hpbmcnXG4gIGRlYm91bmNlZFNlYXJjaChcbiAgICB0YXJnZXRzLFxuICAgIHNvdXJjZXMsXG4gICAgdHJhbnNwb3J0TW9kZSxcbiAgICBzZWFyY2hDb250ZXh0LFxuICAgIGZpbHRlclJlc3VsdHMsXG4gICAgZ2VvY29kaW5nU2l6ZSxcbiAgICBkYXRhLFxuICAgIGNhbGxiYWNrLFxuICAgIHBhdGhPcHRzLFxuICAgIHJlZlBvaW50LFxuICApO1xufTtcbiIsIi8vISBtb21lbnQuanNcbi8vISB2ZXJzaW9uIDogMi4yOS4xXG4vLyEgYXV0aG9ycyA6IFRpbSBXb29kLCBJc2tyZW4gQ2hlcm5ldiwgTW9tZW50LmpzIGNvbnRyaWJ1dG9yc1xuLy8hIGxpY2Vuc2UgOiBNSVRcbi8vISBtb21lbnRqcy5jb21cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuICAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gICAgZ2xvYmFsLm1vbWVudCA9IGZhY3RvcnkoKVxufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgaG9va0NhbGxiYWNrO1xuXG4gICAgZnVuY3Rpb24gaG9va3MoKSB7XG4gICAgICAgIHJldHVybiBob29rQ2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIGRvbmUgdG8gcmVnaXN0ZXIgdGhlIG1ldGhvZCBjYWxsZWQgd2l0aCBtb21lbnQoKVxuICAgIC8vIHdpdGhvdXQgY3JlYXRpbmcgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLlxuICAgIGZ1bmN0aW9uIHNldEhvb2tDYWxsYmFjayhjYWxsYmFjaykge1xuICAgICAgICBob29rQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FycmF5KGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpbnB1dCBpbnN0YW5jZW9mIEFycmF5IHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBBcnJheV0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNPYmplY3QoaW5wdXQpIHtcbiAgICAgICAgLy8gSUU4IHdpbGwgdHJlYXQgdW5kZWZpbmVkIGFuZCBudWxsIGFzIG9iamVjdCBpZiBpdCB3YXNuJ3QgZm9yXG4gICAgICAgIC8vIGlucHV0ICE9IG51bGxcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlucHV0ICE9IG51bGwgJiZcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IE9iamVjdF0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFzT3duUHJvcChhLCBiKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSwgYik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNPYmplY3RFbXB0eShvYmopIHtcbiAgICAgICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKS5sZW5ndGggPT09IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaztcbiAgICAgICAgICAgIGZvciAoayBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcChvYmosIGspKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVW5kZWZpbmVkKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PT0gdm9pZCAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTnVtYmVyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBOdW1iZXJdJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF0ZShpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBEYXRlXSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXAoYXJyLCBmbikge1xuICAgICAgICB2YXIgcmVzID0gW10sXG4gICAgICAgICAgICBpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICByZXMucHVzaChmbihhcnJbaV0sIGkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dGVuZChhLCBiKSB7XG4gICAgICAgIGZvciAodmFyIGkgaW4gYikge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoYiwgaSkpIHtcbiAgICAgICAgICAgICAgICBhW2ldID0gYltpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNPd25Qcm9wKGIsICd0b1N0cmluZycpKSB7XG4gICAgICAgICAgICBhLnRvU3RyaW5nID0gYi50b1N0cmluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNPd25Qcm9wKGIsICd2YWx1ZU9mJykpIHtcbiAgICAgICAgICAgIGEudmFsdWVPZiA9IGIudmFsdWVPZjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgdHJ1ZSkudXRjKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVmYXVsdFBhcnNpbmdGbGFncygpIHtcbiAgICAgICAgLy8gV2UgbmVlZCB0byBkZWVwIGNsb25lIHRoaXMgb2JqZWN0LlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZW1wdHk6IGZhbHNlLFxuICAgICAgICAgICAgdW51c2VkVG9rZW5zOiBbXSxcbiAgICAgICAgICAgIHVudXNlZElucHV0OiBbXSxcbiAgICAgICAgICAgIG92ZXJmbG93OiAtMixcbiAgICAgICAgICAgIGNoYXJzTGVmdE92ZXI6IDAsXG4gICAgICAgICAgICBudWxsSW5wdXQ6IGZhbHNlLFxuICAgICAgICAgICAgaW52YWxpZEVyYTogbnVsbCxcbiAgICAgICAgICAgIGludmFsaWRNb250aDogbnVsbCxcbiAgICAgICAgICAgIGludmFsaWRGb3JtYXQ6IGZhbHNlLFxuICAgICAgICAgICAgdXNlckludmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGlzbzogZmFsc2UsXG4gICAgICAgICAgICBwYXJzZWREYXRlUGFydHM6IFtdLFxuICAgICAgICAgICAgZXJhOiBudWxsLFxuICAgICAgICAgICAgbWVyaWRpZW06IG51bGwsXG4gICAgICAgICAgICByZmMyODIyOiBmYWxzZSxcbiAgICAgICAgICAgIHdlZWtkYXlNaXNtYXRjaDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyc2luZ0ZsYWdzKG0pIHtcbiAgICAgICAgaWYgKG0uX3BmID09IG51bGwpIHtcbiAgICAgICAgICAgIG0uX3BmID0gZGVmYXVsdFBhcnNpbmdGbGFncygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtLl9wZjtcbiAgICB9XG5cbiAgICB2YXIgc29tZTtcbiAgICBpZiAoQXJyYXkucHJvdG90eXBlLnNvbWUpIHtcbiAgICAgICAgc29tZSA9IEFycmF5LnByb3RvdHlwZS5zb21lO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHNvbWUgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgICAgICAgICB2YXIgdCA9IE9iamVjdCh0aGlzKSxcbiAgICAgICAgICAgICAgICBsZW4gPSB0Lmxlbmd0aCA+Pj4gMCxcbiAgICAgICAgICAgICAgICBpO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaSBpbiB0ICYmIGZ1bi5jYWxsKHRoaXMsIHRbaV0sIGksIHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVmFsaWQobSkge1xuICAgICAgICBpZiAobS5faXNWYWxpZCA9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgZmxhZ3MgPSBnZXRQYXJzaW5nRmxhZ3MobSksXG4gICAgICAgICAgICAgICAgcGFyc2VkUGFydHMgPSBzb21lLmNhbGwoZmxhZ3MucGFyc2VkRGF0ZVBhcnRzLCBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaSAhPSBudWxsO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGlzTm93VmFsaWQgPVxuICAgICAgICAgICAgICAgICAgICAhaXNOYU4obS5fZC5nZXRUaW1lKCkpICYmXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLm92ZXJmbG93IDwgMCAmJlxuICAgICAgICAgICAgICAgICAgICAhZmxhZ3MuZW1wdHkgJiZcbiAgICAgICAgICAgICAgICAgICAgIWZsYWdzLmludmFsaWRFcmEgJiZcbiAgICAgICAgICAgICAgICAgICAgIWZsYWdzLmludmFsaWRNb250aCAmJlxuICAgICAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZFdlZWtkYXkgJiZcbiAgICAgICAgICAgICAgICAgICAgIWZsYWdzLndlZWtkYXlNaXNtYXRjaCAmJlxuICAgICAgICAgICAgICAgICAgICAhZmxhZ3MubnVsbElucHV0ICYmXG4gICAgICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkRm9ybWF0ICYmXG4gICAgICAgICAgICAgICAgICAgICFmbGFncy51c2VySW52YWxpZGF0ZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgKCFmbGFncy5tZXJpZGllbSB8fCAoZmxhZ3MubWVyaWRpZW0gJiYgcGFyc2VkUGFydHMpKTtcblxuICAgICAgICAgICAgaWYgKG0uX3N0cmljdCkge1xuICAgICAgICAgICAgICAgIGlzTm93VmFsaWQgPVxuICAgICAgICAgICAgICAgICAgICBpc05vd1ZhbGlkICYmXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmNoYXJzTGVmdE92ZXIgPT09IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MudW51c2VkVG9rZW5zLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy5iaWdIb3VyID09PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChPYmplY3QuaXNGcm96ZW4gPT0gbnVsbCB8fCAhT2JqZWN0LmlzRnJvemVuKG0pKSB7XG4gICAgICAgICAgICAgICAgbS5faXNWYWxpZCA9IGlzTm93VmFsaWQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc05vd1ZhbGlkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtLl9pc1ZhbGlkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUludmFsaWQoZmxhZ3MpIHtcbiAgICAgICAgdmFyIG0gPSBjcmVhdGVVVEMoTmFOKTtcbiAgICAgICAgaWYgKGZsYWdzICE9IG51bGwpIHtcbiAgICAgICAgICAgIGV4dGVuZChnZXRQYXJzaW5nRmxhZ3MobSksIGZsYWdzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhtKS51c2VySW52YWxpZGF0ZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgLy8gUGx1Z2lucyB0aGF0IGFkZCBwcm9wZXJ0aWVzIHNob3VsZCBhbHNvIGFkZCB0aGUga2V5IGhlcmUgKG51bGwgdmFsdWUpLFxuICAgIC8vIHNvIHdlIGNhbiBwcm9wZXJseSBjbG9uZSBvdXJzZWx2ZXMuXG4gICAgdmFyIG1vbWVudFByb3BlcnRpZXMgPSAoaG9va3MubW9tZW50UHJvcGVydGllcyA9IFtdKSxcbiAgICAgICAgdXBkYXRlSW5Qcm9ncmVzcyA9IGZhbHNlO1xuXG4gICAgZnVuY3Rpb24gY29weUNvbmZpZyh0bywgZnJvbSkge1xuICAgICAgICB2YXIgaSwgcHJvcCwgdmFsO1xuXG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5faXNBTW9tZW50T2JqZWN0KSkge1xuICAgICAgICAgICAgdG8uX2lzQU1vbWVudE9iamVjdCA9IGZyb20uX2lzQU1vbWVudE9iamVjdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2kpKSB7XG4gICAgICAgICAgICB0by5faSA9IGZyb20uX2k7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9mKSkge1xuICAgICAgICAgICAgdG8uX2YgPSBmcm9tLl9mO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fbCkpIHtcbiAgICAgICAgICAgIHRvLl9sID0gZnJvbS5fbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX3N0cmljdCkpIHtcbiAgICAgICAgICAgIHRvLl9zdHJpY3QgPSBmcm9tLl9zdHJpY3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl90em0pKSB7XG4gICAgICAgICAgICB0by5fdHptID0gZnJvbS5fdHptO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5faXNVVEMpKSB7XG4gICAgICAgICAgICB0by5faXNVVEMgPSBmcm9tLl9pc1VUQztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX29mZnNldCkpIHtcbiAgICAgICAgICAgIHRvLl9vZmZzZXQgPSBmcm9tLl9vZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9wZikpIHtcbiAgICAgICAgICAgIHRvLl9wZiA9IGdldFBhcnNpbmdGbGFncyhmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2xvY2FsZSkpIHtcbiAgICAgICAgICAgIHRvLl9sb2NhbGUgPSBmcm9tLl9sb2NhbGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9tZW50UHJvcGVydGllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbW9tZW50UHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHByb3AgPSBtb21lbnRQcm9wZXJ0aWVzW2ldO1xuICAgICAgICAgICAgICAgIHZhbCA9IGZyb21bcHJvcF07XG4gICAgICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZCh2YWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvW3Byb3BdID0gdmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0bztcbiAgICB9XG5cbiAgICAvLyBNb21lbnQgcHJvdG90eXBlIG9iamVjdFxuICAgIGZ1bmN0aW9uIE1vbWVudChjb25maWcpIHtcbiAgICAgICAgY29weUNvbmZpZyh0aGlzLCBjb25maWcpO1xuICAgICAgICB0aGlzLl9kID0gbmV3IERhdGUoY29uZmlnLl9kICE9IG51bGwgPyBjb25maWcuX2QuZ2V0VGltZSgpIDogTmFOKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgdGhpcy5fZCA9IG5ldyBEYXRlKE5hTik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUHJldmVudCBpbmZpbml0ZSBsb29wIGluIGNhc2UgdXBkYXRlT2Zmc2V0IGNyZWF0ZXMgbmV3IG1vbWVudFxuICAgICAgICAvLyBvYmplY3RzLlxuICAgICAgICBpZiAodXBkYXRlSW5Qcm9ncmVzcyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMpO1xuICAgICAgICAgICAgdXBkYXRlSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNNb21lbnQob2JqKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBvYmogaW5zdGFuY2VvZiBNb21lbnQgfHwgKG9iaiAhPSBudWxsICYmIG9iai5faXNBTW9tZW50T2JqZWN0ICE9IG51bGwpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Fybihtc2cpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgaG9va3Muc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzID09PSBmYWxzZSAmJlxuICAgICAgICAgICAgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICBjb25zb2xlLndhcm5cbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0RlcHJlY2F0aW9uIHdhcm5pbmc6ICcgKyBtc2cpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVwcmVjYXRlKG1zZywgZm4pIHtcbiAgICAgICAgdmFyIGZpcnN0VGltZSA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIGV4dGVuZChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBob29rcy5kZXByZWNhdGlvbkhhbmRsZXIobnVsbCwgbXNnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaXJzdFRpbWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IFtdLFxuICAgICAgICAgICAgICAgICAgICBhcmcsXG4gICAgICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgICAgIGtleTtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZyA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1tpXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyArPSAnXFxuWycgKyBpICsgJ10gJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoa2V5IGluIGFyZ3VtZW50c1swXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGFyZ3VtZW50c1swXSwga2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcgKz0ga2V5ICsgJzogJyArIGFyZ3VtZW50c1swXVtrZXldICsgJywgJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmcuc2xpY2UoMCwgLTIpOyAvLyBSZW1vdmUgdHJhaWxpbmcgY29tbWEgYW5kIHNwYWNlXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGFyZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAgICAgICAgIG1zZyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnXFxuQXJndW1lbnRzOiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MpLmpvaW4oJycpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBFcnJvcigpLnN0YWNrXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBmaXJzdFRpbWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBmbik7XG4gICAgfVxuXG4gICAgdmFyIGRlcHJlY2F0aW9ucyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gZGVwcmVjYXRlU2ltcGxlKG5hbWUsIG1zZykge1xuICAgICAgICBpZiAoaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyICE9IG51bGwpIHtcbiAgICAgICAgICAgIGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlcihuYW1lLCBtc2cpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZGVwcmVjYXRpb25zW25hbWVdKSB7XG4gICAgICAgICAgICB3YXJuKG1zZyk7XG4gICAgICAgICAgICBkZXByZWNhdGlvbnNbbmFtZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaG9va3Muc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzID0gZmFsc2U7XG4gICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyID0gbnVsbDtcblxuICAgIGZ1bmN0aW9uIGlzRnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICh0eXBlb2YgRnVuY3Rpb24gIT09ICd1bmRlZmluZWQnICYmIGlucHV0IGluc3RhbmNlb2YgRnVuY3Rpb24pIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBGdW5jdGlvbl0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0KGNvbmZpZykge1xuICAgICAgICB2YXIgcHJvcCwgaTtcbiAgICAgICAgZm9yIChpIGluIGNvbmZpZykge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoY29uZmlnLCBpKSkge1xuICAgICAgICAgICAgICAgIHByb3AgPSBjb25maWdbaV07XG4gICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1tpXSA9IHByb3A7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1snXycgKyBpXSA9IHByb3A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgLy8gTGVuaWVudCBvcmRpbmFsIHBhcnNpbmcgYWNjZXB0cyBqdXN0IGEgbnVtYmVyIGluIGFkZGl0aW9uIHRvXG4gICAgICAgIC8vIG51bWJlciArIChwb3NzaWJseSkgc3R1ZmYgY29taW5nIGZyb20gX2RheU9mTW9udGhPcmRpbmFsUGFyc2UuXG4gICAgICAgIC8vIFRPRE86IFJlbW92ZSBcIm9yZGluYWxQYXJzZVwiIGZhbGxiYWNrIGluIG5leHQgbWFqb3IgcmVsZWFzZS5cbiAgICAgICAgdGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQgPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgKHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2Uuc291cmNlIHx8IHRoaXMuX29yZGluYWxQYXJzZS5zb3VyY2UpICtcbiAgICAgICAgICAgICAgICAnfCcgK1xuICAgICAgICAgICAgICAgIC9cXGR7MSwyfS8uc291cmNlXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY2hpbGRDb25maWcpIHtcbiAgICAgICAgdmFyIHJlcyA9IGV4dGVuZCh7fSwgcGFyZW50Q29uZmlnKSxcbiAgICAgICAgICAgIHByb3A7XG4gICAgICAgIGZvciAocHJvcCBpbiBjaGlsZENvbmZpZykge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoY2hpbGRDb25maWcsIHByb3ApKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KHBhcmVudENvbmZpZ1twcm9wXSkgJiYgaXNPYmplY3QoY2hpbGRDb25maWdbcHJvcF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBleHRlbmQocmVzW3Byb3BdLCBwYXJlbnRDb25maWdbcHJvcF0pO1xuICAgICAgICAgICAgICAgICAgICBleHRlbmQocmVzW3Byb3BdLCBjaGlsZENvbmZpZ1twcm9wXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZENvbmZpZ1twcm9wXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IGNoaWxkQ29uZmlnW3Byb3BdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZXNbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAocHJvcCBpbiBwYXJlbnRDb25maWcpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBoYXNPd25Qcm9wKHBhcmVudENvbmZpZywgcHJvcCkgJiZcbiAgICAgICAgICAgICAgICAhaGFzT3duUHJvcChjaGlsZENvbmZpZywgcHJvcCkgJiZcbiAgICAgICAgICAgICAgICBpc09iamVjdChwYXJlbnRDb25maWdbcHJvcF0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgY2hhbmdlcyB0byBwcm9wZXJ0aWVzIGRvbid0IG1vZGlmeSBwYXJlbnQgY29uZmlnXG4gICAgICAgICAgICAgICAgcmVzW3Byb3BdID0gZXh0ZW5kKHt9LCByZXNbcHJvcF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gTG9jYWxlKGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0KGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIga2V5cztcblxuICAgIGlmIChPYmplY3Qua2V5cykge1xuICAgICAgICBrZXlzID0gT2JqZWN0LmtleXM7XG4gICAgfSBlbHNlIHtcbiAgICAgICAga2V5cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHZhciBpLFxuICAgICAgICAgICAgICAgIHJlcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChpIGluIG9iaikge1xuICAgICAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKG9iaiwgaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzLnB1c2goaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdENhbGVuZGFyID0ge1xuICAgICAgICBzYW1lRGF5OiAnW1RvZGF5IGF0XSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICBsYXN0RGF5OiAnW1llc3RlcmRheSBhdF0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBjYWxlbmRhcihrZXksIG1vbSwgbm93KSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9jYWxlbmRhcltrZXldIHx8IHRoaXMuX2NhbGVuZGFyWydzYW1lRWxzZSddO1xuICAgICAgICByZXR1cm4gaXNGdW5jdGlvbihvdXRwdXQpID8gb3V0cHV0LmNhbGwobW9tLCBub3cpIDogb3V0cHV0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHplcm9GaWxsKG51bWJlciwgdGFyZ2V0TGVuZ3RoLCBmb3JjZVNpZ24pIHtcbiAgICAgICAgdmFyIGFic051bWJlciA9ICcnICsgTWF0aC5hYnMobnVtYmVyKSxcbiAgICAgICAgICAgIHplcm9zVG9GaWxsID0gdGFyZ2V0TGVuZ3RoIC0gYWJzTnVtYmVyLmxlbmd0aCxcbiAgICAgICAgICAgIHNpZ24gPSBudW1iZXIgPj0gMDtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChzaWduID8gKGZvcmNlU2lnbiA/ICcrJyA6ICcnKSA6ICctJykgK1xuICAgICAgICAgICAgTWF0aC5wb3coMTAsIE1hdGgubWF4KDAsIHplcm9zVG9GaWxsKSkudG9TdHJpbmcoKS5zdWJzdHIoMSkgK1xuICAgICAgICAgICAgYWJzTnVtYmVyXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIGZvcm1hdHRpbmdUb2tlbnMgPSAvKFxcW1teXFxbXSpcXF0pfChcXFxcKT8oW0hoXW1tKHNzKT98TW98TU0/TT9NP3xEb3xERERvfEREP0Q/RD98ZGRkP2Q/fGRvP3x3W298d10/fFdbb3xXXT98UW8/fE57MSw1fXxZWVlZWVl8WVlZWVl8WVlZWXxZWXx5ezIsNH18eW8/fGdnKGdnZz8pP3xHRyhHR0c/KT98ZXxFfGF8QXxoaD98SEg/fGtrP3xtbT98c3M/fFN7MSw5fXx4fFh8eno/fFpaP3wuKS9nLFxuICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMgPSAvKFxcW1teXFxbXSpcXF0pfChcXFxcKT8oTFRTfExUfExMP0w/TD98bHsxLDR9KS9nLFxuICAgICAgICBmb3JtYXRGdW5jdGlvbnMgPSB7fSxcbiAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnMgPSB7fTtcblxuICAgIC8vIHRva2VuOiAgICAnTSdcbiAgICAvLyBwYWRkZWQ6ICAgWydNTScsIDJdXG4gICAgLy8gb3JkaW5hbDogICdNbydcbiAgICAvLyBjYWxsYmFjazogZnVuY3Rpb24gKCkgeyB0aGlzLm1vbnRoKCkgKyAxIH1cbiAgICBmdW5jdGlvbiBhZGRGb3JtYXRUb2tlbih0b2tlbiwgcGFkZGVkLCBvcmRpbmFsLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZnVuYyA9IGNhbGxiYWNrO1xuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZnVuYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1tjYWxsYmFja10oKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9uc1t0b2tlbl0gPSBmdW5jO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYWRkZWQpIHtcbiAgICAgICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zW3BhZGRlZFswXV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHplcm9GaWxsKGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgcGFkZGVkWzFdLCBwYWRkZWRbMl0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3JkaW5hbCkge1xuICAgICAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnNbb3JkaW5hbF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm9yZGluYWwoXG4gICAgICAgICAgICAgICAgICAgIGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKSxcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlbW92ZUZvcm1hdHRpbmdUb2tlbnMoaW5wdXQpIHtcbiAgICAgICAgaWYgKGlucHV0Lm1hdGNoKC9cXFtbXFxzXFxTXS8pKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQucmVwbGFjZSgvXlxcW3xcXF0kL2csICcnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5wdXQucmVwbGFjZSgvXFxcXC9nLCAnJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUZvcm1hdEZ1bmN0aW9uKGZvcm1hdCkge1xuICAgICAgICB2YXIgYXJyYXkgPSBmb3JtYXQubWF0Y2goZm9ybWF0dGluZ1Rva2VucyksXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbGVuZ3RoO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0VG9rZW5GdW5jdGlvbnNbYXJyYXlbaV1dKSB7XG4gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBmb3JtYXRUb2tlbkZ1bmN0aW9uc1thcnJheVtpXV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFycmF5W2ldID0gcmVtb3ZlRm9ybWF0dGluZ1Rva2VucyhhcnJheVtpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG1vbSkge1xuICAgICAgICAgICAgdmFyIG91dHB1dCA9ICcnLFxuICAgICAgICAgICAgICAgIGk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgKz0gaXNGdW5jdGlvbihhcnJheVtpXSlcbiAgICAgICAgICAgICAgICAgICAgPyBhcnJheVtpXS5jYWxsKG1vbSwgZm9ybWF0KVxuICAgICAgICAgICAgICAgICAgICA6IGFycmF5W2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBmb3JtYXQgZGF0ZSB1c2luZyBuYXRpdmUgZGF0ZSBvYmplY3RcbiAgICBmdW5jdGlvbiBmb3JtYXRNb21lbnQobSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICghbS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBtLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybWF0ID0gZXhwYW5kRm9ybWF0KGZvcm1hdCwgbS5sb2NhbGVEYXRhKCkpO1xuICAgICAgICBmb3JtYXRGdW5jdGlvbnNbZm9ybWF0XSA9XG4gICAgICAgICAgICBmb3JtYXRGdW5jdGlvbnNbZm9ybWF0XSB8fCBtYWtlRm9ybWF0RnVuY3Rpb24oZm9ybWF0KTtcblxuICAgICAgICByZXR1cm4gZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0obSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXhwYW5kRm9ybWF0KGZvcm1hdCwgbG9jYWxlKSB7XG4gICAgICAgIHZhciBpID0gNTtcblxuICAgICAgICBmdW5jdGlvbiByZXBsYWNlTG9uZ0RhdGVGb3JtYXRUb2tlbnMoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbGUubG9uZ0RhdGVGb3JtYXQoaW5wdXQpIHx8IGlucHV0O1xuICAgICAgICB9XG5cbiAgICAgICAgbG9jYWxGb3JtYXR0aW5nVG9rZW5zLmxhc3RJbmRleCA9IDA7XG4gICAgICAgIHdoaWxlIChpID49IDAgJiYgbG9jYWxGb3JtYXR0aW5nVG9rZW5zLnRlc3QoZm9ybWF0KSkge1xuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgbG9jYWxGb3JtYXR0aW5nVG9rZW5zLFxuICAgICAgICAgICAgICAgIHJlcGxhY2VMb25nRGF0ZUZvcm1hdFRva2Vuc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy5sYXN0SW5kZXggPSAwO1xuICAgICAgICAgICAgaSAtPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvbmdEYXRlRm9ybWF0ID0ge1xuICAgICAgICBMVFM6ICdoOm1tOnNzIEEnLFxuICAgICAgICBMVDogJ2g6bW0gQScsXG4gICAgICAgIEw6ICdNTS9ERC9ZWVlZJyxcbiAgICAgICAgTEw6ICdNTU1NIEQsIFlZWVknLFxuICAgICAgICBMTEw6ICdNTU1NIEQsIFlZWVkgaDptbSBBJyxcbiAgICAgICAgTExMTDogJ2RkZGQsIE1NTU0gRCwgWVlZWSBoOm1tIEEnLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBsb25nRGF0ZUZvcm1hdChrZXkpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleV0sXG4gICAgICAgICAgICBmb3JtYXRVcHBlciA9IHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleS50b1VwcGVyQ2FzZSgpXTtcblxuICAgICAgICBpZiAoZm9ybWF0IHx8ICFmb3JtYXRVcHBlcikge1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleV0gPSBmb3JtYXRVcHBlclxuICAgICAgICAgICAgLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpXG4gICAgICAgICAgICAubWFwKGZ1bmN0aW9uICh0b2spIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHRvayA9PT0gJ01NTU0nIHx8XG4gICAgICAgICAgICAgICAgICAgIHRvayA9PT0gJ01NJyB8fFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdERCcgfHxcbiAgICAgICAgICAgICAgICAgICAgdG9rID09PSAnZGRkZCdcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvay5zbGljZSgxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvaztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbignJyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleV07XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRJbnZhbGlkRGF0ZSA9ICdJbnZhbGlkIGRhdGUnO1xuXG4gICAgZnVuY3Rpb24gaW52YWxpZERhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnZhbGlkRGF0ZTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdE9yZGluYWwgPSAnJWQnLFxuICAgICAgICBkZWZhdWx0RGF5T2ZNb250aE9yZGluYWxQYXJzZSA9IC9cXGR7MSwyfS87XG5cbiAgICBmdW5jdGlvbiBvcmRpbmFsKG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3JkaW5hbC5yZXBsYWNlKCclZCcsIG51bWJlcik7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRSZWxhdGl2ZVRpbWUgPSB7XG4gICAgICAgIGZ1dHVyZTogJ2luICVzJyxcbiAgICAgICAgcGFzdDogJyVzIGFnbycsXG4gICAgICAgIHM6ICdhIGZldyBzZWNvbmRzJyxcbiAgICAgICAgc3M6ICclZCBzZWNvbmRzJyxcbiAgICAgICAgbTogJ2EgbWludXRlJyxcbiAgICAgICAgbW06ICclZCBtaW51dGVzJyxcbiAgICAgICAgaDogJ2FuIGhvdXInLFxuICAgICAgICBoaDogJyVkIGhvdXJzJyxcbiAgICAgICAgZDogJ2EgZGF5JyxcbiAgICAgICAgZGQ6ICclZCBkYXlzJyxcbiAgICAgICAgdzogJ2Egd2VlaycsXG4gICAgICAgIHd3OiAnJWQgd2Vla3MnLFxuICAgICAgICBNOiAnYSBtb250aCcsXG4gICAgICAgIE1NOiAnJWQgbW9udGhzJyxcbiAgICAgICAgeTogJ2EgeWVhcicsXG4gICAgICAgIHl5OiAnJWQgeWVhcnMnLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9yZWxhdGl2ZVRpbWVbc3RyaW5nXTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24ob3V0cHV0KVxuICAgICAgICAgICAgPyBvdXRwdXQobnVtYmVyLCB3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKVxuICAgICAgICAgICAgOiBvdXRwdXQucmVwbGFjZSgvJWQvaSwgbnVtYmVyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXN0RnV0dXJlKGRpZmYsIG91dHB1dCkge1xuICAgICAgICB2YXIgZm9ybWF0ID0gdGhpcy5fcmVsYXRpdmVUaW1lW2RpZmYgPiAwID8gJ2Z1dHVyZScgOiAncGFzdCddO1xuICAgICAgICByZXR1cm4gaXNGdW5jdGlvbihmb3JtYXQpID8gZm9ybWF0KG91dHB1dCkgOiBmb3JtYXQucmVwbGFjZSgvJXMvaSwgb3V0cHV0KTtcbiAgICB9XG5cbiAgICB2YXIgYWxpYXNlcyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gYWRkVW5pdEFsaWFzKHVuaXQsIHNob3J0aGFuZCkge1xuICAgICAgICB2YXIgbG93ZXJDYXNlID0gdW5pdC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBhbGlhc2VzW2xvd2VyQ2FzZV0gPSBhbGlhc2VzW2xvd2VyQ2FzZSArICdzJ10gPSBhbGlhc2VzW3Nob3J0aGFuZF0gPSB1bml0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdW5pdHMgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IGFsaWFzZXNbdW5pdHNdIHx8IGFsaWFzZXNbdW5pdHMudG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZU9iamVjdFVuaXRzKGlucHV0T2JqZWN0KSB7XG4gICAgICAgIHZhciBub3JtYWxpemVkSW5wdXQgPSB7fSxcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRQcm9wLFxuICAgICAgICAgICAgcHJvcDtcblxuICAgICAgICBmb3IgKHByb3AgaW4gaW5wdXRPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGlucHV0T2JqZWN0LCBwcm9wKSkge1xuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRQcm9wID0gbm9ybWFsaXplVW5pdHMocHJvcCk7XG4gICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRQcm9wKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRJbnB1dFtub3JtYWxpemVkUHJvcF0gPSBpbnB1dE9iamVjdFtwcm9wXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9ybWFsaXplZElucHV0O1xuICAgIH1cblxuICAgIHZhciBwcmlvcml0aWVzID0ge307XG5cbiAgICBmdW5jdGlvbiBhZGRVbml0UHJpb3JpdHkodW5pdCwgcHJpb3JpdHkpIHtcbiAgICAgICAgcHJpb3JpdGllc1t1bml0XSA9IHByaW9yaXR5O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFByaW9yaXRpemVkVW5pdHModW5pdHNPYmopIHtcbiAgICAgICAgdmFyIHVuaXRzID0gW10sXG4gICAgICAgICAgICB1O1xuICAgICAgICBmb3IgKHUgaW4gdW5pdHNPYmopIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKHVuaXRzT2JqLCB1KSkge1xuICAgICAgICAgICAgICAgIHVuaXRzLnB1c2goeyB1bml0OiB1LCBwcmlvcml0eTogcHJpb3JpdGllc1t1XSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB1bml0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdW5pdHM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNMZWFwWWVhcih5ZWFyKSB7XG4gICAgICAgIHJldHVybiAoeWVhciAlIDQgPT09IDAgJiYgeWVhciAlIDEwMCAhPT0gMCkgfHwgeWVhciAlIDQwMCA9PT0gMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhYnNGbG9vcihudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIC8vIC0wIC0+IDBcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwobnVtYmVyKSB8fCAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSW50KGFyZ3VtZW50Rm9yQ29lcmNpb24pIHtcbiAgICAgICAgdmFyIGNvZXJjZWROdW1iZXIgPSArYXJndW1lbnRGb3JDb2VyY2lvbixcbiAgICAgICAgICAgIHZhbHVlID0gMDtcblxuICAgICAgICBpZiAoY29lcmNlZE51bWJlciAhPT0gMCAmJiBpc0Zpbml0ZShjb2VyY2VkTnVtYmVyKSkge1xuICAgICAgICAgICAgdmFsdWUgPSBhYnNGbG9vcihjb2VyY2VkTnVtYmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlR2V0U2V0KHVuaXQsIGtlZXBUaW1lKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgc2V0JDEodGhpcywgdW5pdCwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCBrZWVwVGltZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXQodGhpcywgdW5pdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0KG1vbSwgdW5pdCkge1xuICAgICAgICByZXR1cm4gbW9tLmlzVmFsaWQoKVxuICAgICAgICAgICAgPyBtb20uX2RbJ2dldCcgKyAobW9tLl9pc1VUQyA/ICdVVEMnIDogJycpICsgdW5pdF0oKVxuICAgICAgICAgICAgOiBOYU47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0JDEobW9tLCB1bml0LCB2YWx1ZSkge1xuICAgICAgICBpZiAobW9tLmlzVmFsaWQoKSAmJiAhaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdW5pdCA9PT0gJ0Z1bGxZZWFyJyAmJlxuICAgICAgICAgICAgICAgIGlzTGVhcFllYXIobW9tLnllYXIoKSkgJiZcbiAgICAgICAgICAgICAgICBtb20ubW9udGgoKSA9PT0gMSAmJlxuICAgICAgICAgICAgICAgIG1vbS5kYXRlKCkgPT09IDI5XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRvSW50KHZhbHVlKTtcbiAgICAgICAgICAgICAgICBtb20uX2RbJ3NldCcgKyAobW9tLl9pc1VUQyA/ICdVVEMnIDogJycpICsgdW5pdF0oXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBtb20ubW9udGgoKSxcbiAgICAgICAgICAgICAgICAgICAgZGF5c0luTW9udGgodmFsdWUsIG1vbS5tb250aCgpKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1vbS5fZFsnc2V0JyArIChtb20uX2lzVVRDID8gJ1VUQycgOiAnJykgKyB1bml0XSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBzdHJpbmdHZXQodW5pdHMpIHtcbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHRoaXNbdW5pdHNdKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbdW5pdHNdKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RyaW5nU2V0KHVuaXRzLCB2YWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIHVuaXRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdW5pdHMgPSBub3JtYWxpemVPYmplY3RVbml0cyh1bml0cyk7XG4gICAgICAgICAgICB2YXIgcHJpb3JpdGl6ZWQgPSBnZXRQcmlvcml0aXplZFVuaXRzKHVuaXRzKSxcbiAgICAgICAgICAgICAgICBpO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHByaW9yaXRpemVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpc1twcmlvcml0aXplZFtpXS51bml0XSh1bml0c1twcmlvcml0aXplZFtpXS51bml0XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHRoaXNbdW5pdHNdKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW3VuaXRzXSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIG1hdGNoMSA9IC9cXGQvLCAvLyAgICAgICAwIC0gOVxuICAgICAgICBtYXRjaDIgPSAvXFxkXFxkLywgLy8gICAgICAwMCAtIDk5XG4gICAgICAgIG1hdGNoMyA9IC9cXGR7M30vLCAvLyAgICAgMDAwIC0gOTk5XG4gICAgICAgIG1hdGNoNCA9IC9cXGR7NH0vLCAvLyAgICAwMDAwIC0gOTk5OVxuICAgICAgICBtYXRjaDYgPSAvWystXT9cXGR7Nn0vLCAvLyAtOTk5OTk5IC0gOTk5OTk5XG4gICAgICAgIG1hdGNoMXRvMiA9IC9cXGRcXGQ/LywgLy8gICAgICAgMCAtIDk5XG4gICAgICAgIG1hdGNoM3RvNCA9IC9cXGRcXGRcXGRcXGQ/LywgLy8gICAgIDk5OSAtIDk5OTlcbiAgICAgICAgbWF0Y2g1dG82ID0gL1xcZFxcZFxcZFxcZFxcZFxcZD8vLCAvLyAgIDk5OTk5IC0gOTk5OTk5XG4gICAgICAgIG1hdGNoMXRvMyA9IC9cXGR7MSwzfS8sIC8vICAgICAgIDAgLSA5OTlcbiAgICAgICAgbWF0Y2gxdG80ID0gL1xcZHsxLDR9LywgLy8gICAgICAgMCAtIDk5OTlcbiAgICAgICAgbWF0Y2gxdG82ID0gL1srLV0/XFxkezEsNn0vLCAvLyAtOTk5OTk5IC0gOTk5OTk5XG4gICAgICAgIG1hdGNoVW5zaWduZWQgPSAvXFxkKy8sIC8vICAgICAgIDAgLSBpbmZcbiAgICAgICAgbWF0Y2hTaWduZWQgPSAvWystXT9cXGQrLywgLy8gICAgLWluZiAtIGluZlxuICAgICAgICBtYXRjaE9mZnNldCA9IC9afFsrLV1cXGRcXGQ6P1xcZFxcZC9naSwgLy8gKzAwOjAwIC0wMDowMCArMDAwMCAtMDAwMCBvciBaXG4gICAgICAgIG1hdGNoU2hvcnRPZmZzZXQgPSAvWnxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPy9naSwgLy8gKzAwIC0wMCArMDA6MDAgLTAwOjAwICswMDAwIC0wMDAwIG9yIFpcbiAgICAgICAgbWF0Y2hUaW1lc3RhbXAgPSAvWystXT9cXGQrKFxcLlxcZHsxLDN9KT8vLCAvLyAxMjM0NTY3ODkgMTIzNDU2Nzg5LjEyM1xuICAgICAgICAvLyBhbnkgd29yZCAob3IgdHdvKSBjaGFyYWN0ZXJzIG9yIG51bWJlcnMgaW5jbHVkaW5nIHR3by90aHJlZSB3b3JkIG1vbnRoIGluIGFyYWJpYy5cbiAgICAgICAgLy8gaW5jbHVkZXMgc2NvdHRpc2ggZ2FlbGljIHR3byB3b3JkIGFuZCBoeXBoZW5hdGVkIG1vbnRoc1xuICAgICAgICBtYXRjaFdvcmQgPSAvWzAtOV17MCwyNTZ9WydhLXpcXHUwMEEwLVxcdTA1RkZcXHUwNzAwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGMDdcXHVGRjEwLVxcdUZGRUZdezEsMjU2fXxbXFx1MDYwMC1cXHUwNkZGXFwvXXsxLDI1Nn0oXFxzKj9bXFx1MDYwMC1cXHUwNkZGXXsxLDI1Nn0pezEsMn0vaSxcbiAgICAgICAgcmVnZXhlcztcblxuICAgIHJlZ2V4ZXMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFJlZ2V4VG9rZW4odG9rZW4sIHJlZ2V4LCBzdHJpY3RSZWdleCkge1xuICAgICAgICByZWdleGVzW3Rva2VuXSA9IGlzRnVuY3Rpb24ocmVnZXgpXG4gICAgICAgICAgICA/IHJlZ2V4XG4gICAgICAgICAgICA6IGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlRGF0YSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzU3RyaWN0ICYmIHN0cmljdFJlZ2V4ID8gc3RyaWN0UmVnZXggOiByZWdleDtcbiAgICAgICAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRQYXJzZVJlZ2V4Rm9yVG9rZW4odG9rZW4sIGNvbmZpZykge1xuICAgICAgICBpZiAoIWhhc093blByb3AocmVnZXhlcywgdG9rZW4pKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cCh1bmVzY2FwZUZvcm1hdCh0b2tlbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlZ2V4ZXNbdG9rZW5dKGNvbmZpZy5fc3RyaWN0LCBjb25maWcuX2xvY2FsZSk7XG4gICAgfVxuXG4gICAgLy8gQ29kZSBmcm9tIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzU2MTQ5My9pcy10aGVyZS1hLXJlZ2V4cC1lc2NhcGUtZnVuY3Rpb24taW4tamF2YXNjcmlwdFxuICAgIGZ1bmN0aW9uIHVuZXNjYXBlRm9ybWF0KHMpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2V4RXNjYXBlKFxuICAgICAgICAgICAgc1xuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdcXFxcJywgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFwoXFxbKXxcXFxcKFxcXSl8XFxbKFteXFxdXFxbXSopXFxdfFxcXFwoLikvZywgZnVuY3Rpb24gKFxuICAgICAgICAgICAgICAgICAgICBtYXRjaGVkLFxuICAgICAgICAgICAgICAgICAgICBwMSxcbiAgICAgICAgICAgICAgICAgICAgcDIsXG4gICAgICAgICAgICAgICAgICAgIHAzLFxuICAgICAgICAgICAgICAgICAgICBwNFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcDEgfHwgcDIgfHwgcDMgfHwgcDQ7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWdleEVzY2FwZShzKSB7XG4gICAgICAgIHJldHVybiBzLnJlcGxhY2UoL1stXFwvXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpO1xuICAgIH1cblxuICAgIHZhciB0b2tlbnMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFBhcnNlVG9rZW4odG9rZW4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgZnVuYyA9IGNhbGxiYWNrO1xuICAgICAgICBpZiAodHlwZW9mIHRva2VuID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdG9rZW4gPSBbdG9rZW5dO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc051bWJlcihjYWxsYmFjaykpIHtcbiAgICAgICAgICAgIGZ1bmMgPSBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgICAgICAgICAgYXJyYXlbY2FsbGJhY2tdID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG9rZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRva2Vuc1t0b2tlbltpXV0gPSBmdW5jO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkV2Vla1BhcnNlVG9rZW4odG9rZW4sIGNhbGxiYWNrKSB7XG4gICAgICAgIGFkZFBhcnNlVG9rZW4odG9rZW4sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgICAgIGNvbmZpZy5fdyA9IGNvbmZpZy5fdyB8fCB7fTtcbiAgICAgICAgICAgIGNhbGxiYWNrKGlucHV0LCBjb25maWcuX3csIGNvbmZpZywgdG9rZW4pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRUaW1lVG9BcnJheUZyb21Ub2tlbih0b2tlbiwgaW5wdXQsIGNvbmZpZykge1xuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCAmJiBoYXNPd25Qcm9wKHRva2VucywgdG9rZW4pKSB7XG4gICAgICAgICAgICB0b2tlbnNbdG9rZW5dKGlucHV0LCBjb25maWcuX2EsIGNvbmZpZywgdG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIFlFQVIgPSAwLFxuICAgICAgICBNT05USCA9IDEsXG4gICAgICAgIERBVEUgPSAyLFxuICAgICAgICBIT1VSID0gMyxcbiAgICAgICAgTUlOVVRFID0gNCxcbiAgICAgICAgU0VDT05EID0gNSxcbiAgICAgICAgTUlMTElTRUNPTkQgPSA2LFxuICAgICAgICBXRUVLID0gNyxcbiAgICAgICAgV0VFS0RBWSA9IDg7XG5cbiAgICBmdW5jdGlvbiBtb2QobiwgeCkge1xuICAgICAgICByZXR1cm4gKChuICUgeCkgKyB4KSAlIHg7XG4gICAgfVxuXG4gICAgdmFyIGluZGV4T2Y7XG5cbiAgICBpZiAoQXJyYXkucHJvdG90eXBlLmluZGV4T2YpIHtcbiAgICAgICAgaW5kZXhPZiA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGluZGV4T2YgPSBmdW5jdGlvbiAobykge1xuICAgICAgICAgICAgLy8gSSBrbm93XG4gICAgICAgICAgICB2YXIgaTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXNbaV0gPT09IG8pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRheXNJbk1vbnRoKHllYXIsIG1vbnRoKSB7XG4gICAgICAgIGlmIChpc05hTih5ZWFyKSB8fCBpc05hTihtb250aCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG1vZE1vbnRoID0gbW9kKG1vbnRoLCAxMik7XG4gICAgICAgIHllYXIgKz0gKG1vbnRoIC0gbW9kTW9udGgpIC8gMTI7XG4gICAgICAgIHJldHVybiBtb2RNb250aCA9PT0gMVxuICAgICAgICAgICAgPyBpc0xlYXBZZWFyKHllYXIpXG4gICAgICAgICAgICAgICAgPyAyOVxuICAgICAgICAgICAgICAgIDogMjhcbiAgICAgICAgICAgIDogMzEgLSAoKG1vZE1vbnRoICUgNykgJSAyKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignTScsIFsnTU0nLCAyXSwgJ01vJywgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb250aCgpICsgMTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdNTU0nLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHNTaG9ydCh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ01NTU0nLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHModGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnbW9udGgnLCAnTScpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgnbW9udGgnLCA4KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ00nLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ01NJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ01NTScsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUubW9udGhzU2hvcnRSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG4gICAgYWRkUmVnZXhUb2tlbignTU1NTScsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUubW9udGhzUmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ00nLCAnTU0nXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtNT05USF0gPSB0b0ludChpbnB1dCkgLSAxO1xuICAgIH0pO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ01NTScsICdNTU1NJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgdmFyIG1vbnRoID0gY29uZmlnLl9sb2NhbGUubW9udGhzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgIC8vIGlmIHdlIGRpZG4ndCBmaW5kIGEgbW9udGggbmFtZSwgbWFyayB0aGUgZGF0ZSBhcyBpbnZhbGlkLlxuICAgICAgICBpZiAobW9udGggIT0gbnVsbCkge1xuICAgICAgICAgICAgYXJyYXlbTU9OVEhdID0gbW9udGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkTW9udGggPSBpbnB1dDtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gTE9DQUxFU1xuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVNb250aHMgPSAnSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgZGVmYXVsdExvY2FsZU1vbnRoc1Nob3J0ID0gJ0phbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBNT05USFNfSU5fRk9STUFUID0gL0Rbb0RdPyhcXFtbXlxcW1xcXV0qXFxdfFxccykrTU1NTT8vLFxuICAgICAgICBkZWZhdWx0TW9udGhzU2hvcnRSZWdleCA9IG1hdGNoV29yZCxcbiAgICAgICAgZGVmYXVsdE1vbnRoc1JlZ2V4ID0gbWF0Y2hXb3JkO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlTW9udGhzKG0sIGZvcm1hdCkge1xuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRocylcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21vbnRoc1xuICAgICAgICAgICAgICAgIDogdGhpcy5fbW9udGhzWydzdGFuZGFsb25lJ107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzKVxuICAgICAgICAgICAgPyB0aGlzLl9tb250aHNbbS5tb250aCgpXVxuICAgICAgICAgICAgOiB0aGlzLl9tb250aHNbXG4gICAgICAgICAgICAgICAgICAodGhpcy5fbW9udGhzLmlzRm9ybWF0IHx8IE1PTlRIU19JTl9GT1JNQVQpLnRlc3QoZm9ybWF0KVxuICAgICAgICAgICAgICAgICAgICAgID8gJ2Zvcm1hdCdcbiAgICAgICAgICAgICAgICAgICAgICA6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgICAgICBdW20ubW9udGgoKV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlTW9udGhzU2hvcnQobSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzU2hvcnQpXG4gICAgICAgICAgICAgICAgPyB0aGlzLl9tb250aHNTaG9ydFxuICAgICAgICAgICAgICAgIDogdGhpcy5fbW9udGhzU2hvcnRbJ3N0YW5kYWxvbmUnXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHNTaG9ydClcbiAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU2hvcnRbbS5tb250aCgpXVxuICAgICAgICAgICAgOiB0aGlzLl9tb250aHNTaG9ydFtcbiAgICAgICAgICAgICAgICAgIE1PTlRIU19JTl9GT1JNQVQudGVzdChmb3JtYXQpID8gJ2Zvcm1hdCcgOiAnc3RhbmRhbG9uZSdcbiAgICAgICAgICAgICAgXVttLm1vbnRoKCldO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZVN0cmljdFBhcnNlKG1vbnRoTmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBpaSxcbiAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgIGxsYyA9IG1vbnRoTmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoIXRoaXMuX21vbnRoc1BhcnNlKSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIG5vdCB1c2VkXG4gICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7ICsraSkge1xuICAgICAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgaV0pO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbaV0gPSB0aGlzLm1vbnRoc1Nob3J0KFxuICAgICAgICAgICAgICAgICAgICBtb20sXG4gICAgICAgICAgICAgICAgICAgICcnXG4gICAgICAgICAgICAgICAgKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSA9IHRoaXMubW9udGhzKG1vbSwgJycpLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnTU1NJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnTU1NJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1vbnRoc1BhcnNlKG1vbnRoTmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksIG1vbSwgcmVnZXg7XG5cbiAgICAgICAgaWYgKHRoaXMuX21vbnRoc1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVTdHJpY3RQYXJzZS5jYWxsKHRoaXMsIG1vbnRoTmFtZSwgZm9ybWF0LCBzdHJpY3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9tb250aHNQYXJzZSkge1xuICAgICAgICAgICAgdGhpcy5fbW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVE9ETzogYWRkIHNvcnRpbmdcbiAgICAgICAgLy8gU29ydGluZyBtYWtlcyBzdXJlIGlmIG9uZSBtb250aCAob3IgYWJicikgaXMgYSBwcmVmaXggb2YgYW5vdGhlclxuICAgICAgICAvLyBzZWUgc29ydGluZyBpbiBjb21wdXRlTW9udGhzUGFyc2VcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCBpXSk7XG4gICAgICAgICAgICBpZiAoc3RyaWN0ICYmICF0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLm1vbnRocyhtb20sICcnKS5yZXBsYWNlKCcuJywgJycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnJykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXN0cmljdCAmJiAhdGhpcy5fbW9udGhzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICByZWdleCA9XG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMubW9udGhzKG1vbSwgJycpICsgJ3xeJyArIHRoaXMubW9udGhzU2hvcnQobW9tLCAnJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9udGhzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKHJlZ2V4LnJlcGxhY2UoJy4nLCAnJyksICdpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0ZXN0IHRoZSByZWdleFxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ01NTU0nICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldLnRlc3QobW9udGhOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ01NTScgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2ldLnRlc3QobW9udGhOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJpY3QgJiYgdGhpcy5fbW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBzZXRNb250aChtb20sIHZhbHVlKSB7XG4gICAgICAgIHZhciBkYXlPZk1vbnRoO1xuXG4gICAgICAgIGlmICghbW9tLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgLy8gTm8gb3BcbiAgICAgICAgICAgIHJldHVybiBtb207XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKC9eXFxkKyQvLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0b0ludCh2YWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gbW9tLmxvY2FsZURhdGEoKS5tb250aHNQYXJzZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogQW5vdGhlciBzaWxlbnQgZmFpbHVyZT9cbiAgICAgICAgICAgICAgICBpZiAoIWlzTnVtYmVyKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGRheU9mTW9udGggPSBNYXRoLm1pbihtb20uZGF0ZSgpLCBkYXlzSW5Nb250aChtb20ueWVhcigpLCB2YWx1ZSkpO1xuICAgICAgICBtb20uX2RbJ3NldCcgKyAobW9tLl9pc1VUQyA/ICdVVEMnIDogJycpICsgJ01vbnRoJ10odmFsdWUsIGRheU9mTW9udGgpO1xuICAgICAgICByZXR1cm4gbW9tO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldE1vbnRoKHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBzZXRNb250aCh0aGlzLCB2YWx1ZSk7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQodGhpcywgJ01vbnRoJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXREYXlzSW5Nb250aCgpIHtcbiAgICAgICAgcmV0dXJuIGRheXNJbk1vbnRoKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoc1Nob3J0UmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuX21vbnRoc1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlTW9udGhzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1Nob3J0UmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoc1Nob3J0UmVnZXggPSBkZWZhdWx0TW9udGhzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4ICYmIGlzU3RyaWN0XG4gICAgICAgICAgICAgICAgPyB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4XG4gICAgICAgICAgICAgICAgOiB0aGlzLl9tb250aHNTaG9ydFJlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9udGhzUmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuX21vbnRoc1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlTW9udGhzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoc1JlZ2V4ID0gZGVmYXVsdE1vbnRoc1JlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4ICYmIGlzU3RyaWN0XG4gICAgICAgICAgICAgICAgPyB0aGlzLl9tb250aHNTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fbW9udGhzUmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlTW9udGhzUGFyc2UoKSB7XG4gICAgICAgIGZ1bmN0aW9uIGNtcExlblJldihhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4gYi5sZW5ndGggLSBhLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzaG9ydFBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbG9uZ1BpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbWl4ZWRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBtb207XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgaV0pO1xuICAgICAgICAgICAgc2hvcnRQaWVjZXMucHVzaCh0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpKTtcbiAgICAgICAgICAgIGxvbmdQaWVjZXMucHVzaCh0aGlzLm1vbnRocyhtb20sICcnKSk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKHRoaXMubW9udGhzKG1vbSwgJycpKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2godGhpcy5tb250aHNTaG9ydChtb20sICcnKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU29ydGluZyBtYWtlcyBzdXJlIGlmIG9uZSBtb250aCAob3IgYWJicikgaXMgYSBwcmVmaXggb2YgYW5vdGhlciBpdFxuICAgICAgICAvLyB3aWxsIG1hdGNoIHRoZSBsb25nZXIgcGllY2UuXG4gICAgICAgIHNob3J0UGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbG9uZ1BpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIG1peGVkUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIHNob3J0UGllY2VzW2ldID0gcmVnZXhFc2NhcGUoc2hvcnRQaWVjZXNbaV0pO1xuICAgICAgICAgICAgbG9uZ1BpZWNlc1tpXSA9IHJlZ2V4RXNjYXBlKGxvbmdQaWVjZXNbaV0pO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNDsgaSsrKSB7XG4gICAgICAgICAgICBtaXhlZFBpZWNlc1tpXSA9IHJlZ2V4RXNjYXBlKG1peGVkUGllY2VzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX21vbnRoc1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9tb250aHNTaG9ydFJlZ2V4ID0gdGhpcy5fbW9udGhzUmVnZXg7XG4gICAgICAgIHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBsb25nUGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBzaG9ydFBpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignWScsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHkgPSB0aGlzLnllYXIoKTtcbiAgICAgICAgcmV0dXJuIHkgPD0gOTk5OSA/IHplcm9GaWxsKHksIDQpIDogJysnICsgeTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVknLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy55ZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVknLCA0XSwgMCwgJ3llYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVlZJywgNV0sIDAsICd5ZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZWVknLCA2LCB0cnVlXSwgMCwgJ3llYXInKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygneWVhcicsICd5Jyk7XG5cbiAgICAvLyBQUklPUklUSUVTXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ3llYXInLCAxKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1knLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignWVknLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWScsIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdZWVlZWScsIG1hdGNoMXRvNiwgbWF0Y2g2KTtcbiAgICBhZGRSZWdleFRva2VuKCdZWVlZWVknLCBtYXRjaDF0bzYsIG1hdGNoNik7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnWVlZWVknLCAnWVlZWVlZJ10sIFlFQVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1lZWVknLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID1cbiAgICAgICAgICAgIGlucHV0Lmxlbmd0aCA9PT0gMiA/IGhvb2tzLnBhcnNlVHdvRGlnaXRZZWFyKGlucHV0KSA6IHRvSW50KGlucHV0KTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdZWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbWUVBUl0gPSBob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbWUVBUl0gPSBwYXJzZUludChpbnB1dCwgMTApO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgZnVuY3Rpb24gZGF5c0luWWVhcih5ZWFyKSB7XG4gICAgICAgIHJldHVybiBpc0xlYXBZZWFyKHllYXIpID8gMzY2IDogMzY1O1xuICAgIH1cblxuICAgIC8vIEhPT0tTXG5cbiAgICBob29rcy5wYXJzZVR3b0RpZ2l0WWVhciA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICByZXR1cm4gdG9JbnQoaW5wdXQpICsgKHRvSW50KGlucHV0KSA+IDY4ID8gMTkwMCA6IDIwMDApO1xuICAgIH07XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0WWVhciA9IG1ha2VHZXRTZXQoJ0Z1bGxZZWFyJywgdHJ1ZSk7XG5cbiAgICBmdW5jdGlvbiBnZXRJc0xlYXBZZWFyKCkge1xuICAgICAgICByZXR1cm4gaXNMZWFwWWVhcih0aGlzLnllYXIoKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlRGF0ZSh5LCBtLCBkLCBoLCBNLCBzLCBtcykge1xuICAgICAgICAvLyBjYW4ndCBqdXN0IGFwcGx5KCkgdG8gY3JlYXRlIGEgZGF0ZTpcbiAgICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xLzE4MTM0OFxuICAgICAgICB2YXIgZGF0ZTtcbiAgICAgICAgLy8gdGhlIGRhdGUgY29uc3RydWN0b3IgcmVtYXBzIHllYXJzIDAtOTkgdG8gMTkwMC0xOTk5XG4gICAgICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCkge1xuICAgICAgICAgICAgLy8gcHJlc2VydmUgbGVhcCB5ZWFycyB1c2luZyBhIGZ1bGwgNDAwIHllYXIgY3ljbGUsIHRoZW4gcmVzZXRcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZSh5ICsgNDAwLCBtLCBkLCBoLCBNLCBzLCBtcyk7XG4gICAgICAgICAgICBpZiAoaXNGaW5pdGUoZGF0ZS5nZXRGdWxsWWVhcigpKSkge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RnVsbFllYXIoeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoeSwgbSwgZCwgaCwgTSwgcywgbXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlVVRDRGF0ZSh5KSB7XG4gICAgICAgIHZhciBkYXRlLCBhcmdzO1xuICAgICAgICAvLyB0aGUgRGF0ZS5VVEMgZnVuY3Rpb24gcmVtYXBzIHllYXJzIDAtOTkgdG8gMTkwMC0xOTk5XG4gICAgICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCkge1xuICAgICAgICAgICAgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgYXJnc1swXSA9IHkgKyA0MDA7XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCwgYXJncykpO1xuICAgICAgICAgICAgaWYgKGlzRmluaXRlKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSkpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDLmFwcGx5KG51bGwsIGFyZ3VtZW50cykpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuXG4gICAgLy8gc3RhcnQtb2YtZmlyc3Qtd2VlayAtIHN0YXJ0LW9mLXllYXJcbiAgICBmdW5jdGlvbiBmaXJzdFdlZWtPZmZzZXQoeWVhciwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIC8vIGZpcnN0LXdlZWsgZGF5IC0tIHdoaWNoIGphbnVhcnkgaXMgYWx3YXlzIGluIHRoZSBmaXJzdCB3ZWVrICg0IGZvciBpc28sIDEgZm9yIG90aGVyKVxuICAgICAgICAgICAgZndkID0gNyArIGRvdyAtIGRveSxcbiAgICAgICAgICAgIC8vIGZpcnN0LXdlZWsgZGF5IGxvY2FsIHdlZWtkYXkgLS0gd2hpY2ggbG9jYWwgd2Vla2RheSBpcyBmd2RcbiAgICAgICAgICAgIGZ3ZGx3ID0gKDcgKyBjcmVhdGVVVENEYXRlKHllYXIsIDAsIGZ3ZCkuZ2V0VVRDRGF5KCkgLSBkb3cpICUgNztcblxuICAgICAgICByZXR1cm4gLWZ3ZGx3ICsgZndkIC0gMTtcbiAgICB9XG5cbiAgICAvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlI0NhbGN1bGF0aW5nX2FfZGF0ZV9naXZlbl90aGVfeWVhci4yQ193ZWVrX251bWJlcl9hbmRfd2Vla2RheVxuICAgIGZ1bmN0aW9uIGRheU9mWWVhckZyb21XZWVrcyh5ZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgbG9jYWxXZWVrZGF5ID0gKDcgKyB3ZWVrZGF5IC0gZG93KSAlIDcsXG4gICAgICAgICAgICB3ZWVrT2Zmc2V0ID0gZmlyc3RXZWVrT2Zmc2V0KHllYXIsIGRvdywgZG95KSxcbiAgICAgICAgICAgIGRheU9mWWVhciA9IDEgKyA3ICogKHdlZWsgLSAxKSArIGxvY2FsV2Vla2RheSArIHdlZWtPZmZzZXQsXG4gICAgICAgICAgICByZXNZZWFyLFxuICAgICAgICAgICAgcmVzRGF5T2ZZZWFyO1xuXG4gICAgICAgIGlmIChkYXlPZlllYXIgPD0gMCkge1xuICAgICAgICAgICAgcmVzWWVhciA9IHllYXIgLSAxO1xuICAgICAgICAgICAgcmVzRGF5T2ZZZWFyID0gZGF5c0luWWVhcihyZXNZZWFyKSArIGRheU9mWWVhcjtcbiAgICAgICAgfSBlbHNlIGlmIChkYXlPZlllYXIgPiBkYXlzSW5ZZWFyKHllYXIpKSB7XG4gICAgICAgICAgICByZXNZZWFyID0geWVhciArIDE7XG4gICAgICAgICAgICByZXNEYXlPZlllYXIgPSBkYXlPZlllYXIgLSBkYXlzSW5ZZWFyKHllYXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzWWVhciA9IHllYXI7XG4gICAgICAgICAgICByZXNEYXlPZlllYXIgPSBkYXlPZlllYXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeWVhcjogcmVzWWVhcixcbiAgICAgICAgICAgIGRheU9mWWVhcjogcmVzRGF5T2ZZZWFyLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtPZlllYXIobW9tLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla09mZnNldCA9IGZpcnN0V2Vla09mZnNldChtb20ueWVhcigpLCBkb3csIGRveSksXG4gICAgICAgICAgICB3ZWVrID0gTWF0aC5mbG9vcigobW9tLmRheU9mWWVhcigpIC0gd2Vla09mZnNldCAtIDEpIC8gNykgKyAxLFxuICAgICAgICAgICAgcmVzV2VlayxcbiAgICAgICAgICAgIHJlc1llYXI7XG5cbiAgICAgICAgaWYgKHdlZWsgPCAxKSB7XG4gICAgICAgICAgICByZXNZZWFyID0gbW9tLnllYXIoKSAtIDE7XG4gICAgICAgICAgICByZXNXZWVrID0gd2VlayArIHdlZWtzSW5ZZWFyKHJlc1llYXIsIGRvdywgZG95KTtcbiAgICAgICAgfSBlbHNlIGlmICh3ZWVrID4gd2Vla3NJblllYXIobW9tLnllYXIoKSwgZG93LCBkb3kpKSB7XG4gICAgICAgICAgICByZXNXZWVrID0gd2VlayAtIHdlZWtzSW5ZZWFyKG1vbS55ZWFyKCksIGRvdywgZG95KTtcbiAgICAgICAgICAgIHJlc1llYXIgPSBtb20ueWVhcigpICsgMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSBtb20ueWVhcigpO1xuICAgICAgICAgICAgcmVzV2VlayA9IHdlZWs7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgd2VlazogcmVzV2VlayxcbiAgICAgICAgICAgIHllYXI6IHJlc1llYXIsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla3NJblllYXIoeWVhciwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIHdlZWtPZmZzZXQgPSBmaXJzdFdlZWtPZmZzZXQoeWVhciwgZG93LCBkb3kpLFxuICAgICAgICAgICAgd2Vla09mZnNldE5leHQgPSBmaXJzdFdlZWtPZmZzZXQoeWVhciArIDEsIGRvdywgZG95KTtcbiAgICAgICAgcmV0dXJuIChkYXlzSW5ZZWFyKHllYXIpIC0gd2Vla09mZnNldCArIHdlZWtPZmZzZXROZXh0KSAvIDc7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3cnLCBbJ3d3JywgMl0sICd3bycsICd3ZWVrJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ1cnLCBbJ1dXJywgMl0sICdXbycsICdpc29XZWVrJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ3dlZWsnLCAndycpO1xuICAgIGFkZFVuaXRBbGlhcygnaXNvV2VlaycsICdXJyk7XG5cbiAgICAvLyBQUklPUklUSUVTXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ3dlZWsnLCA1KTtcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2lzb1dlZWsnLCA1KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3cnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3d3JywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1cnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1dXJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWyd3JywgJ3d3JywgJ1cnLCAnV1cnXSwgZnVuY3Rpb24gKFxuICAgICAgICBpbnB1dCxcbiAgICAgICAgd2VlayxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICB0b2tlblxuICAgICkge1xuICAgICAgICB3ZWVrW3Rva2VuLnN1YnN0cigwLCAxKV0gPSB0b0ludChpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICAvLyBMT0NBTEVTXG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrKG1vbSkge1xuICAgICAgICByZXR1cm4gd2Vla09mWWVhcihtb20sIHRoaXMuX3dlZWsuZG93LCB0aGlzLl93ZWVrLmRveSkud2VlaztcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZVdlZWsgPSB7XG4gICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVGaXJzdERheU9mV2VlaygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWsuZG93O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZUZpcnN0RGF5T2ZZZWFyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2Vlay5kb3k7XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0V2VlayhpbnB1dCkge1xuICAgICAgICB2YXIgd2VlayA9IHRoaXMubG9jYWxlRGF0YSgpLndlZWsodGhpcyk7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gd2VlayA6IHRoaXMuYWRkKChpbnB1dCAtIHdlZWspICogNywgJ2QnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRJU09XZWVrKGlucHV0KSB7XG4gICAgICAgIHZhciB3ZWVrID0gd2Vla09mWWVhcih0aGlzLCAxLCA0KS53ZWVrO1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWsgOiB0aGlzLmFkZCgoaW5wdXQgLSB3ZWVrKSAqIDcsICdkJyk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2QnLCAwLCAnZG8nLCAnZGF5Jyk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZGQnLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5c01pbih0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2RkZCcsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzU2hvcnQodGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkZGRkJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXModGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdlJywgMCwgMCwgJ3dlZWtkYXknKTtcbiAgICBhZGRGb3JtYXRUb2tlbignRScsIDAsIDAsICdpc29XZWVrZGF5Jyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ2RheScsICdkJyk7XG4gICAgYWRkVW5pdEFsaWFzKCd3ZWVrZGF5JywgJ2UnKTtcbiAgICBhZGRVbml0QWxpYXMoJ2lzb1dlZWtkYXknLCAnRScpO1xuXG4gICAgLy8gUFJJT1JJVFlcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2RheScsIDExKTtcbiAgICBhZGRVbml0UHJpb3JpdHkoJ3dlZWtkYXknLCAxMSk7XG4gICAgYWRkVW5pdFByaW9yaXR5KCdpc29XZWVrZGF5JywgMTEpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignZCcsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignZScsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignRScsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignZGQnLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzTWluUmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2RkZCcsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNTaG9ydFJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcbiAgICBhZGRSZWdleFRva2VuKCdkZGRkJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c1JlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZGQnLCAnZGRkJywgJ2RkZGQnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHZhciB3ZWVrZGF5ID0gY29uZmlnLl9sb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCwgdG9rZW4sIGNvbmZpZy5fc3RyaWN0KTtcbiAgICAgICAgLy8gaWYgd2UgZGlkbid0IGdldCBhIHdlZWtkYXkgbmFtZSwgbWFyayB0aGUgZGF0ZSBhcyBpbnZhbGlkXG4gICAgICAgIGlmICh3ZWVrZGF5ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHdlZWsuZCA9IHdlZWtkYXk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkV2Vla2RheSA9IGlucHV0O1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ2QnLCAnZScsICdFJ10sIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB3ZWVrW3Rva2VuXSA9IHRvSW50KGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIGZ1bmN0aW9uIHBhcnNlV2Vla2RheShpbnB1dCwgbG9jYWxlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzTmFOKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KGlucHV0LCAxMCk7XG4gICAgICAgIH1cblxuICAgICAgICBpbnB1dCA9IGxvY2FsZS53ZWVrZGF5c1BhcnNlKGlucHV0KTtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlSXNvV2Vla2RheShpbnB1dCwgbG9jYWxlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzUGFyc2UoaW5wdXQpICUgNyB8fCA3O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc05hTihpbnB1dCkgPyBudWxsIDogaW5wdXQ7XG4gICAgfVxuXG4gICAgLy8gTE9DQUxFU1xuICAgIGZ1bmN0aW9uIHNoaWZ0V2Vla2RheXMod3MsIG4pIHtcbiAgICAgICAgcmV0dXJuIHdzLnNsaWNlKG4sIDcpLmNvbmNhdCh3cy5zbGljZSgwLCBuKSk7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVXZWVrZGF5cyA9ICdTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQgPSAnU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Jy5zcGxpdCgnXycpLFxuICAgICAgICBkZWZhdWx0TG9jYWxlV2Vla2RheXNNaW4gPSAnU3VfTW9fVHVfV2VfVGhfRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIGRlZmF1bHRXZWVrZGF5c1JlZ2V4ID0gbWF0Y2hXb3JkLFxuICAgICAgICBkZWZhdWx0V2Vla2RheXNTaG9ydFJlZ2V4ID0gbWF0Y2hXb3JkLFxuICAgICAgICBkZWZhdWx0V2Vla2RheXNNaW5SZWdleCA9IG1hdGNoV29yZDtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzKG0sIGZvcm1hdCkge1xuICAgICAgICB2YXIgd2Vla2RheXMgPSBpc0FycmF5KHRoaXMuX3dlZWtkYXlzKVxuICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c1xuICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c1tcbiAgICAgICAgICAgICAgICAgIG0gJiYgbSAhPT0gdHJ1ZSAmJiB0aGlzLl93ZWVrZGF5cy5pc0Zvcm1hdC50ZXN0KGZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgICA/ICdmb3JtYXQnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnc3RhbmRhbG9uZSdcbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIG0gPT09IHRydWVcbiAgICAgICAgICAgID8gc2hpZnRXZWVrZGF5cyh3ZWVrZGF5cywgdGhpcy5fd2Vlay5kb3cpXG4gICAgICAgICAgICA6IG1cbiAgICAgICAgICAgID8gd2Vla2RheXNbbS5kYXkoKV1cbiAgICAgICAgICAgIDogd2Vla2RheXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXNTaG9ydChtKSB7XG4gICAgICAgIHJldHVybiBtID09PSB0cnVlXG4gICAgICAgICAgICA/IHNoaWZ0V2Vla2RheXModGhpcy5fd2Vla2RheXNTaG9ydCwgdGhpcy5fd2Vlay5kb3cpXG4gICAgICAgICAgICA6IG1cbiAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNTaG9ydFttLmRheSgpXVxuICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c1Nob3J0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzTWluKG0pIHtcbiAgICAgICAgcmV0dXJuIG0gPT09IHRydWVcbiAgICAgICAgICAgID8gc2hpZnRXZWVrZGF5cyh0aGlzLl93ZWVrZGF5c01pbiwgdGhpcy5fd2Vlay5kb3cpXG4gICAgICAgICAgICA6IG1cbiAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNNaW5bbS5kYXkoKV1cbiAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNNaW47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlU3RyaWN0UGFyc2UkMSh3ZWVrZGF5TmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBpaSxcbiAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgIGxsYyA9IHdlZWtkYXlOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZSkge1xuICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlID0gW107XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyArK2kpIHtcbiAgICAgICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIDFdKS5kYXkoaSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXSA9IHRoaXMud2Vla2RheXNNaW4oXG4gICAgICAgICAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICApLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW2ldID0gdGhpcy53ZWVrZGF5c1Nob3J0KFxuICAgICAgICAgICAgICAgICAgICBtb20sXG4gICAgICAgICAgICAgICAgICAgICcnXG4gICAgICAgICAgICAgICAgKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2VbaV0gPSB0aGlzLndlZWtkYXlzKG1vbSwgJycpLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnZGRkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gJ2RkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ2RkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gJ2RkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5c1BhcnNlKHdlZWtkYXlOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSwgbW9tLCByZWdleDtcblxuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlU3RyaWN0UGFyc2UkMS5jYWxsKHRoaXMsIHdlZWtkYXlOYW1lLCBmb3JtYXQsIHN0cmljdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX3dlZWtkYXlzUGFyc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuXG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIDFdKS5kYXkoaSk7XG4gICAgICAgICAgICBpZiAoc3RyaWN0ICYmICF0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy53ZWVrZGF5cyhtb20sICcnKS5yZXBsYWNlKCcuJywgJ1xcXFwuPycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMud2Vla2RheXNTaG9ydChtb20sICcnKS5yZXBsYWNlKCcuJywgJ1xcXFwuPycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnXFxcXC4/JykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuX3dlZWtkYXlzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICByZWdleCA9XG4gICAgICAgICAgICAgICAgICAgICdeJyArXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2Vla2RheXMobW9tLCAnJykgK1xuICAgICAgICAgICAgICAgICAgICAnfF4nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWVrZGF5c1Nob3J0KG1vbSwgJycpICtcbiAgICAgICAgICAgICAgICAgICAgJ3xeJyArXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2Vla2RheXNNaW4obW9tLCAnJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAocmVnZXgucmVwbGFjZSgnLicsICcnKSwgJ2knKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRlc3QgdGhlIHJlZ2V4XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnZGRkZCcgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ2RkZCcgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdkZCcgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmljdCAmJiB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXREYXlPZldlZWsoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgPyB0aGlzIDogTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkYXkgPSB0aGlzLl9pc1VUQyA/IHRoaXMuX2QuZ2V0VVRDRGF5KCkgOiB0aGlzLl9kLmdldERheSgpO1xuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaW5wdXQgPSBwYXJzZVdlZWtkYXkoaW5wdXQsIHRoaXMubG9jYWxlRGF0YSgpKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFkZChpbnB1dCAtIGRheSwgJ2QnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBkYXk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRMb2NhbGVEYXlPZldlZWsoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgPyB0aGlzIDogTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciB3ZWVrZGF5ID0gKHRoaXMuZGF5KCkgKyA3IC0gdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93KSAlIDc7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gd2Vla2RheSA6IHRoaXMuYWRkKGlucHV0IC0gd2Vla2RheSwgJ2QnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRJU09EYXlPZldlZWsoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgPyB0aGlzIDogTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYmVoYXZlcyB0aGUgc2FtZSBhcyBtb21lbnQjZGF5IGV4Y2VwdFxuICAgICAgICAvLyBhcyBhIGdldHRlciwgcmV0dXJucyA3IGluc3RlYWQgb2YgMCAoMS03IHJhbmdlIGluc3RlYWQgb2YgMC02KVxuICAgICAgICAvLyBhcyBhIHNldHRlciwgc3VuZGF5IHNob3VsZCBiZWxvbmcgdG8gdGhlIHByZXZpb3VzIHdlZWsuXG5cbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHZhciB3ZWVrZGF5ID0gcGFyc2VJc29XZWVrZGF5KGlucHV0LCB0aGlzLmxvY2FsZURhdGEoKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXkodGhpcy5kYXkoKSAlIDcgPyB3ZWVrZGF5IDogd2Vla2RheSAtIDcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF5KCkgfHwgNztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtkYXlzUmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZVdlZWtkYXlzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUmVnZXggPSBkZWZhdWx0V2Vla2RheXNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4ICYmIGlzU3RyaWN0XG4gICAgICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4XG4gICAgICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla2RheXNTaG9ydFJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNTaG9ydFJlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXggPSBkZWZhdWx0V2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4XG4gICAgICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrZGF5c01pblJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c01pblJlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c01pblJlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzTWluUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNNaW5SZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVXZWVrZGF5c1BhcnNlKCkge1xuICAgICAgICBmdW5jdGlvbiBjbXBMZW5SZXYoYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGIubGVuZ3RoIC0gYS5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbWluUGllY2VzID0gW10sXG4gICAgICAgICAgICBzaG9ydFBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbG9uZ1BpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbWl4ZWRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBtb20sXG4gICAgICAgICAgICBtaW5wLFxuICAgICAgICAgICAgc2hvcnRwLFxuICAgICAgICAgICAgbG9uZ3A7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCAxXSkuZGF5KGkpO1xuICAgICAgICAgICAgbWlucCA9IHJlZ2V4RXNjYXBlKHRoaXMud2Vla2RheXNNaW4obW9tLCAnJykpO1xuICAgICAgICAgICAgc2hvcnRwID0gcmVnZXhFc2NhcGUodGhpcy53ZWVrZGF5c1Nob3J0KG1vbSwgJycpKTtcbiAgICAgICAgICAgIGxvbmdwID0gcmVnZXhFc2NhcGUodGhpcy53ZWVrZGF5cyhtb20sICcnKSk7XG4gICAgICAgICAgICBtaW5QaWVjZXMucHVzaChtaW5wKTtcbiAgICAgICAgICAgIHNob3J0UGllY2VzLnB1c2goc2hvcnRwKTtcbiAgICAgICAgICAgIGxvbmdQaWVjZXMucHVzaChsb25ncCk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKG1pbnApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChzaG9ydHApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChsb25ncCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU29ydGluZyBtYWtlcyBzdXJlIGlmIG9uZSB3ZWVrZGF5IChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyIGl0XG4gICAgICAgIC8vIHdpbGwgbWF0Y2ggdGhlIGxvbmdlciBwaWVjZS5cbiAgICAgICAgbWluUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgc2hvcnRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBsb25nUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbWl4ZWRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuXG4gICAgICAgIHRoaXMuX3dlZWtkYXlzUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBtaXhlZFBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleCA9IHRoaXMuX3dlZWtkYXlzUmVnZXg7XG4gICAgICAgIHRoaXMuX3dlZWtkYXlzTWluUmVnZXggPSB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuXG4gICAgICAgIHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIGxvbmdQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgc2hvcnRQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIG1pblBpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBmdW5jdGlvbiBoRm9ybWF0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ob3VycygpICUgMTIgfHwgMTI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24ga0Zvcm1hdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaG91cnMoKSB8fCAyNDtcbiAgICB9XG5cbiAgICBhZGRGb3JtYXRUb2tlbignSCcsIFsnSEgnLCAyXSwgMCwgJ2hvdXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignaCcsIFsnaGgnLCAyXSwgMCwgaEZvcm1hdCk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ2snLCBbJ2trJywgMl0sIDAsIGtGb3JtYXQpO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2htbScsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICcnICsgaEZvcm1hdC5hcHBseSh0aGlzKSArIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdobW1zcycsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICcnICtcbiAgICAgICAgICAgIGhGb3JtYXQuYXBwbHkodGhpcykgK1xuICAgICAgICAgICAgemVyb0ZpbGwodGhpcy5taW51dGVzKCksIDIpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMuc2Vjb25kcygpLCAyKVxuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0htbScsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICcnICsgdGhpcy5ob3VycygpICsgemVyb0ZpbGwodGhpcy5taW51dGVzKCksIDIpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0htbXNzJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgJycgK1xuICAgICAgICAgICAgdGhpcy5ob3VycygpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLnNlY29uZHMoKSwgMilcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIG1lcmlkaWVtKHRva2VuLCBsb3dlcmNhc2UpIHtcbiAgICAgICAgYWRkRm9ybWF0VG9rZW4odG9rZW4sIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tZXJpZGllbShcbiAgICAgICAgICAgICAgICB0aGlzLmhvdXJzKCksXG4gICAgICAgICAgICAgICAgdGhpcy5taW51dGVzKCksXG4gICAgICAgICAgICAgICAgbG93ZXJjYXNlXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBtZXJpZGllbSgnYScsIHRydWUpO1xuICAgIG1lcmlkaWVtKCdBJywgZmFsc2UpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdob3VyJywgJ2gnKTtcblxuICAgIC8vIFBSSU9SSVRZXG4gICAgYWRkVW5pdFByaW9yaXR5KCdob3VyJywgMTMpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgZnVuY3Rpb24gbWF0Y2hNZXJpZGllbShpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuX21lcmlkaWVtUGFyc2U7XG4gICAgfVxuXG4gICAgYWRkUmVnZXhUb2tlbignYScsIG1hdGNoTWVyaWRpZW0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0EnLCBtYXRjaE1lcmlkaWVtKTtcbiAgICBhZGRSZWdleFRva2VuKCdIJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdoJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdrJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdISCcsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdoaCcsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdraycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2htbScsIG1hdGNoM3RvNCk7XG4gICAgYWRkUmVnZXhUb2tlbignaG1tc3MnLCBtYXRjaDV0bzYpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0htbScsIG1hdGNoM3RvNCk7XG4gICAgYWRkUmVnZXhUb2tlbignSG1tc3MnLCBtYXRjaDV0bzYpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ0gnLCAnSEgnXSwgSE9VUik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ2snLCAna2snXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIHZhciBrSW5wdXQgPSB0b0ludChpbnB1dCk7XG4gICAgICAgIGFycmF5W0hPVVJdID0ga0lucHV0ID09PSAyNCA/IDAgOiBrSW5wdXQ7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ2EnLCAnQSddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl9pc1BtID0gY29uZmlnLl9sb2NhbGUuaXNQTShpbnB1dCk7XG4gICAgICAgIGNvbmZpZy5fbWVyaWRpZW0gPSBpbnB1dDtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKFsnaCcsICdoaCddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dCk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB0cnVlO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ2htbScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zKSk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB0cnVlO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ2htbXNzJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIHZhciBwb3MxID0gaW5wdXQubGVuZ3RoIC0gNCxcbiAgICAgICAgICAgIHBvczIgPSBpbnB1dC5sZW5ndGggLSAyO1xuICAgICAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0LnN1YnN0cigwLCBwb3MxKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMSwgMikpO1xuICAgICAgICBhcnJheVtTRUNPTkRdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczIpKTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHRydWU7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignSG1tJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIHZhciBwb3MgPSBpbnB1dC5sZW5ndGggLSAyO1xuICAgICAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0LnN1YnN0cigwLCBwb3MpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MpKTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdIbW1zcycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zMSA9IGlucHV0Lmxlbmd0aCAtIDQsXG4gICAgICAgICAgICBwb3MyID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zMSkpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczEsIDIpKTtcbiAgICAgICAgYXJyYXlbU0VDT05EXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MyKSk7XG4gICAgfSk7XG5cbiAgICAvLyBMT0NBTEVTXG5cbiAgICBmdW5jdGlvbiBsb2NhbGVJc1BNKGlucHV0KSB7XG4gICAgICAgIC8vIElFOCBRdWlya3MgTW9kZSAmIElFNyBTdGFuZGFyZHMgTW9kZSBkbyBub3QgYWxsb3cgYWNjZXNzaW5nIHN0cmluZ3MgbGlrZSBhcnJheXNcbiAgICAgICAgLy8gVXNpbmcgY2hhckF0IHNob3VsZCBiZSBtb3JlIGNvbXBhdGlibGUuXG4gICAgICAgIHJldHVybiAoaW5wdXQgKyAnJykudG9Mb3dlckNhc2UoKS5jaGFyQXQoMCkgPT09ICdwJztcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZU1lcmlkaWVtUGFyc2UgPSAvW2FwXVxcLj9tP1xcLj8vaSxcbiAgICAgICAgLy8gU2V0dGluZyB0aGUgaG91ciBzaG91bGQga2VlcCB0aGUgdGltZSwgYmVjYXVzZSB0aGUgdXNlciBleHBsaWNpdGx5XG4gICAgICAgIC8vIHNwZWNpZmllZCB3aGljaCBob3VyIHRoZXkgd2FudC4gU28gdHJ5aW5nIHRvIG1haW50YWluIHRoZSBzYW1lIGhvdXIgKGluXG4gICAgICAgIC8vIGEgbmV3IHRpbWV6b25lKSBtYWtlcyBzZW5zZS4gQWRkaW5nL3N1YnRyYWN0aW5nIGhvdXJzIGRvZXMgbm90IGZvbGxvd1xuICAgICAgICAvLyB0aGlzIHJ1bGUuXG4gICAgICAgIGdldFNldEhvdXIgPSBtYWtlR2V0U2V0KCdIb3VycycsIHRydWUpO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlTWVyaWRpZW0oaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgaWYgKGhvdXJzID4gMTEpIHtcbiAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ3BtJyA6ICdQTSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdhbScgOiAnQU0nO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGJhc2VDb25maWcgPSB7XG4gICAgICAgIGNhbGVuZGFyOiBkZWZhdWx0Q2FsZW5kYXIsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiBkZWZhdWx0TG9uZ0RhdGVGb3JtYXQsXG4gICAgICAgIGludmFsaWREYXRlOiBkZWZhdWx0SW52YWxpZERhdGUsXG4gICAgICAgIG9yZGluYWw6IGRlZmF1bHRPcmRpbmFsLFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiBkZWZhdWx0RGF5T2ZNb250aE9yZGluYWxQYXJzZSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiBkZWZhdWx0UmVsYXRpdmVUaW1lLFxuXG4gICAgICAgIG1vbnRoczogZGVmYXVsdExvY2FsZU1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQ6IGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydCxcblxuICAgICAgICB3ZWVrOiBkZWZhdWx0TG9jYWxlV2VlayxcblxuICAgICAgICB3ZWVrZGF5czogZGVmYXVsdExvY2FsZVdlZWtkYXlzLFxuICAgICAgICB3ZWVrZGF5c01pbjogZGVmYXVsdExvY2FsZVdlZWtkYXlzTWluLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiBkZWZhdWx0TG9jYWxlV2Vla2RheXNTaG9ydCxcblxuICAgICAgICBtZXJpZGllbVBhcnNlOiBkZWZhdWx0TG9jYWxlTWVyaWRpZW1QYXJzZSxcbiAgICB9O1xuXG4gICAgLy8gaW50ZXJuYWwgc3RvcmFnZSBmb3IgbG9jYWxlIGNvbmZpZyBmaWxlc1xuICAgIHZhciBsb2NhbGVzID0ge30sXG4gICAgICAgIGxvY2FsZUZhbWlsaWVzID0ge30sXG4gICAgICAgIGdsb2JhbExvY2FsZTtcblxuICAgIGZ1bmN0aW9uIGNvbW1vblByZWZpeChhcnIxLCBhcnIyKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbWlubCA9IE1hdGgubWluKGFycjEubGVuZ3RoLCBhcnIyLmxlbmd0aCk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBtaW5sOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGlmIChhcnIxW2ldICE9PSBhcnIyW2ldKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1pbmw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplTG9jYWxlKGtleSkge1xuICAgICAgICByZXR1cm4ga2V5ID8ga2V5LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnXycsICctJykgOiBrZXk7XG4gICAgfVxuXG4gICAgLy8gcGljayB0aGUgbG9jYWxlIGZyb20gdGhlIGFycmF5XG4gICAgLy8gdHJ5IFsnZW4tYXUnLCAnZW4tZ2InXSBhcyAnZW4tYXUnLCAnZW4tZ2InLCAnZW4nLCBhcyBpbiBtb3ZlIHRocm91Z2ggdGhlIGxpc3QgdHJ5aW5nIGVhY2hcbiAgICAvLyBzdWJzdHJpbmcgZnJvbSBtb3N0IHNwZWNpZmljIHRvIGxlYXN0LCBidXQgbW92ZSB0byB0aGUgbmV4dCBhcnJheSBpdGVtIGlmIGl0J3MgYSBtb3JlIHNwZWNpZmljIHZhcmlhbnQgdGhhbiB0aGUgY3VycmVudCByb290XG4gICAgZnVuY3Rpb24gY2hvb3NlTG9jYWxlKG5hbWVzKSB7XG4gICAgICAgIHZhciBpID0gMCxcbiAgICAgICAgICAgIGosXG4gICAgICAgICAgICBuZXh0LFxuICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgc3BsaXQ7XG5cbiAgICAgICAgd2hpbGUgKGkgPCBuYW1lcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHNwbGl0ID0gbm9ybWFsaXplTG9jYWxlKG5hbWVzW2ldKS5zcGxpdCgnLScpO1xuICAgICAgICAgICAgaiA9IHNwbGl0Lmxlbmd0aDtcbiAgICAgICAgICAgIG5leHQgPSBub3JtYWxpemVMb2NhbGUobmFtZXNbaSArIDFdKTtcbiAgICAgICAgICAgIG5leHQgPSBuZXh0ID8gbmV4dC5zcGxpdCgnLScpIDogbnVsbDtcbiAgICAgICAgICAgIHdoaWxlIChqID4gMCkge1xuICAgICAgICAgICAgICAgIGxvY2FsZSA9IGxvYWRMb2NhbGUoc3BsaXQuc2xpY2UoMCwgaikuam9pbignLScpKTtcbiAgICAgICAgICAgICAgICBpZiAobG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgbmV4dCAmJlxuICAgICAgICAgICAgICAgICAgICBuZXh0Lmxlbmd0aCA+PSBqICYmXG4gICAgICAgICAgICAgICAgICAgIGNvbW1vblByZWZpeChzcGxpdCwgbmV4dCkgPj0gaiAtIDFcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgLy90aGUgbmV4dCBhcnJheSBpdGVtIGlzIGJldHRlciB0aGFuIGEgc2hhbGxvd2VyIHN1YnN0cmluZyBvZiB0aGlzIG9uZVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgai0tO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnbG9iYWxMb2NhbGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9hZExvY2FsZShuYW1lKSB7XG4gICAgICAgIHZhciBvbGRMb2NhbGUgPSBudWxsLFxuICAgICAgICAgICAgYWxpYXNlZFJlcXVpcmU7XG4gICAgICAgIC8vIFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIHJlZ2lzdGVyIGFuZCBsb2FkIGFsbCB0aGUgbG9jYWxlcyBpbiBOb2RlXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIG1vZHVsZSAmJlxuICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHNcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIG9sZExvY2FsZSA9IGdsb2JhbExvY2FsZS5fYWJicjtcbiAgICAgICAgICAgICAgICBhbGlhc2VkUmVxdWlyZSA9IHJlcXVpcmU7XG4gICAgICAgICAgICAgICAgYWxpYXNlZFJlcXVpcmUoJy4vbG9jYWxlLycgKyBuYW1lKTtcbiAgICAgICAgICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGUob2xkTG9jYWxlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBtYXJrIGFzIG5vdCBmb3VuZCB0byBhdm9pZCByZXBlYXRpbmcgZXhwZW5zaXZlIGZpbGUgcmVxdWlyZSBjYWxsIGNhdXNpbmcgaGlnaCBDUFVcbiAgICAgICAgICAgICAgICAvLyB3aGVuIHRyeWluZyB0byBmaW5kIGVuLVVTLCBlbl9VUywgZW4tdXMgZm9yIGV2ZXJ5IGZvcm1hdCBjYWxsXG4gICAgICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IG51bGw7IC8vIG51bGwgbWVhbnMgbm90IGZvdW5kXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvY2FsZXNbbmFtZV07XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGxvYWQgbG9jYWxlIGFuZCB0aGVuIHNldCB0aGUgZ2xvYmFsIGxvY2FsZS4gIElmXG4gICAgLy8gbm8gYXJndW1lbnRzIGFyZSBwYXNzZWQgaW4sIGl0IHdpbGwgc2ltcGx5IHJldHVybiB0aGUgY3VycmVudCBnbG9iYWxcbiAgICAvLyBsb2NhbGUga2V5LlxuICAgIGZ1bmN0aW9uIGdldFNldEdsb2JhbExvY2FsZShrZXksIHZhbHVlcykge1xuICAgICAgICB2YXIgZGF0YTtcbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZ2V0TG9jYWxlKGtleSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkZWZpbmVMb2NhbGUoa2V5LCB2YWx1ZXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIC8vIG1vbWVudC5kdXJhdGlvbi5fbG9jYWxlID0gbW9tZW50Ll9sb2NhbGUgPSBkYXRhO1xuICAgICAgICAgICAgICAgIGdsb2JhbExvY2FsZSA9IGRhdGE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgY29uc29sZS53YXJuKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vd2FybiB1c2VyIGlmIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGJ1dCB0aGUgbG9jYWxlIGNvdWxkIG5vdCBiZSBzZXRcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0xvY2FsZSAnICsga2V5ICsgJyBub3QgZm91bmQuIERpZCB5b3UgZm9yZ2V0IHRvIGxvYWQgaXQ/J1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBnbG9iYWxMb2NhbGUuX2FiYnI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVmaW5lTG9jYWxlKG5hbWUsIGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlLFxuICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGJhc2VDb25maWc7XG4gICAgICAgICAgICBjb25maWcuYWJiciA9IG5hbWU7XG4gICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZGVwcmVjYXRlU2ltcGxlKFxuICAgICAgICAgICAgICAgICAgICAnZGVmaW5lTG9jYWxlT3ZlcnJpZGUnLFxuICAgICAgICAgICAgICAgICAgICAndXNlIG1vbWVudC51cGRhdGVMb2NhbGUobG9jYWxlTmFtZSwgY29uZmlnKSB0byBjaGFuZ2UgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnYW4gZXhpc3RpbmcgbG9jYWxlLiBtb21lbnQuZGVmaW5lTG9jYWxlKGxvY2FsZU5hbWUsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbmZpZykgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgY3JlYXRpbmcgYSBuZXcgbG9jYWxlICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1NlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2RlZmluZS1sb2NhbGUvIGZvciBtb3JlIGluZm8uJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gbG9jYWxlc1tuYW1lXS5fY29uZmlnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb25maWcucGFyZW50TG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAobG9jYWxlc1tjb25maWcucGFyZW50TG9jYWxlXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGxvY2FsZXNbY29uZmlnLnBhcmVudExvY2FsZV0uX2NvbmZpZztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKGNvbmZpZy5wYXJlbnRMb2NhbGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGxvY2FsZS5fY29uZmlnO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2NhbGVGYW1pbGllc1tjb25maWcucGFyZW50TG9jYWxlXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZUZhbWlsaWVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGVGYW1pbGllc1tjb25maWcucGFyZW50TG9jYWxlXS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZzogY29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBuZXcgTG9jYWxlKG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNvbmZpZykpO1xuXG4gICAgICAgICAgICBpZiAobG9jYWxlRmFtaWxpZXNbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICBsb2NhbGVGYW1pbGllc1tuYW1lXS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmluZUxvY2FsZSh4Lm5hbWUsIHguY29uZmlnKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gYmFja3dhcmRzIGNvbXBhdCBmb3Igbm93OiBhbHNvIHNldCB0aGUgbG9jYWxlXG4gICAgICAgICAgICAvLyBtYWtlIHN1cmUgd2Ugc2V0IHRoZSBsb2NhbGUgQUZURVIgYWxsIGNoaWxkIGxvY2FsZXMgaGF2ZSBiZWVuXG4gICAgICAgICAgICAvLyBjcmVhdGVkLCBzbyB3ZSB3b24ndCBlbmQgdXAgd2l0aCB0aGUgY2hpbGQgbG9jYWxlIHNldC5cbiAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShuYW1lKTtcblxuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZXNbbmFtZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB1c2VmdWwgZm9yIHRlc3RpbmdcbiAgICAgICAgICAgIGRlbGV0ZSBsb2NhbGVzW25hbWVdO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVMb2NhbGUobmFtZSwgY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcgIT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGxvY2FsZSxcbiAgICAgICAgICAgICAgICB0bXBMb2NhbGUsXG4gICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gYmFzZUNvbmZpZztcblxuICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCAmJiBsb2NhbGVzW25hbWVdLnBhcmVudExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIGV4aXN0aW5nIGNoaWxkIGxvY2FsZSBpbi1wbGFjZSB0byBhdm9pZCBtZW1vcnktbGVha3NcbiAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdLnNldChtZXJnZUNvbmZpZ3MobG9jYWxlc1tuYW1lXS5fY29uZmlnLCBjb25maWcpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gTUVSR0VcbiAgICAgICAgICAgICAgICB0bXBMb2NhbGUgPSBsb2FkTG9jYWxlKG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICh0bXBMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSB0bXBMb2NhbGUuX2NvbmZpZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uZmlnID0gbWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY29uZmlnKTtcbiAgICAgICAgICAgICAgICBpZiAodG1wTG9jYWxlID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlTG9jYWxlIGlzIGNhbGxlZCBmb3IgY3JlYXRpbmcgYSBuZXcgbG9jYWxlXG4gICAgICAgICAgICAgICAgICAgIC8vIFNldCBhYmJyIHNvIGl0IHdpbGwgaGF2ZSBhIG5hbWUgKGdldHRlcnMgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgIC8vIHVuZGVmaW5lZCBvdGhlcndpc2UpLlxuICAgICAgICAgICAgICAgICAgICBjb25maWcuYWJiciA9IG5hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxvY2FsZSA9IG5ldyBMb2NhbGUoY29uZmlnKTtcbiAgICAgICAgICAgICAgICBsb2NhbGUucGFyZW50TG9jYWxlID0gbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbG9jYWxlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiYWNrd2FyZHMgY29tcGF0IGZvciBub3c6IGFsc28gc2V0IHRoZSBsb2NhbGVcbiAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShuYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHBhc3MgbnVsbCBmb3IgY29uZmlnIHRvIHVudXBkYXRlLCB1c2VmdWwgZm9yIHRlc3RzXG4gICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0ucGFyZW50TG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IGxvY2FsZXNbbmFtZV0ucGFyZW50TG9jYWxlO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gZ2V0U2V0R2xvYmFsTG9jYWxlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBsb2NhbGVzW25hbWVdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbiAgICB9XG5cbiAgICAvLyByZXR1cm5zIGxvY2FsZSBkYXRhXG4gICAgZnVuY3Rpb24gZ2V0TG9jYWxlKGtleSkge1xuICAgICAgICB2YXIgbG9jYWxlO1xuXG4gICAgICAgIGlmIChrZXkgJiYga2V5Ll9sb2NhbGUgJiYga2V5Ll9sb2NhbGUuX2FiYnIpIHtcbiAgICAgICAgICAgIGtleSA9IGtleS5fbG9jYWxlLl9hYmJyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFrZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBnbG9iYWxMb2NhbGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzQXJyYXkoa2V5KSkge1xuICAgICAgICAgICAgLy9zaG9ydC1jaXJjdWl0IGV2ZXJ5dGhpbmcgZWxzZVxuICAgICAgICAgICAgbG9jYWxlID0gbG9hZExvY2FsZShrZXkpO1xuICAgICAgICAgICAgaWYgKGxvY2FsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBrZXkgPSBba2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjaG9vc2VMb2NhbGUoa2V5KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TG9jYWxlcygpIHtcbiAgICAgICAgcmV0dXJuIGtleXMobG9jYWxlcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2tPdmVyZmxvdyhtKSB7XG4gICAgICAgIHZhciBvdmVyZmxvdyxcbiAgICAgICAgICAgIGEgPSBtLl9hO1xuXG4gICAgICAgIGlmIChhICYmIGdldFBhcnNpbmdGbGFncyhtKS5vdmVyZmxvdyA9PT0gLTIpIHtcbiAgICAgICAgICAgIG92ZXJmbG93ID1cbiAgICAgICAgICAgICAgICBhW01PTlRIXSA8IDAgfHwgYVtNT05USF0gPiAxMVxuICAgICAgICAgICAgICAgICAgICA/IE1PTlRIXG4gICAgICAgICAgICAgICAgICAgIDogYVtEQVRFXSA8IDEgfHwgYVtEQVRFXSA+IGRheXNJbk1vbnRoKGFbWUVBUl0sIGFbTU9OVEhdKVxuICAgICAgICAgICAgICAgICAgICA/IERBVEVcbiAgICAgICAgICAgICAgICAgICAgOiBhW0hPVVJdIDwgMCB8fFxuICAgICAgICAgICAgICAgICAgICAgIGFbSE9VUl0gPiAyNCB8fFxuICAgICAgICAgICAgICAgICAgICAgIChhW0hPVVJdID09PSAyNCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoYVtNSU5VVEVdICE9PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhW1NFQ09ORF0gIT09IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFbTUlMTElTRUNPTkRdICE9PSAwKSlcbiAgICAgICAgICAgICAgICAgICAgPyBIT1VSXG4gICAgICAgICAgICAgICAgICAgIDogYVtNSU5VVEVdIDwgMCB8fCBhW01JTlVURV0gPiA1OVxuICAgICAgICAgICAgICAgICAgICA/IE1JTlVURVxuICAgICAgICAgICAgICAgICAgICA6IGFbU0VDT05EXSA8IDAgfHwgYVtTRUNPTkRdID4gNTlcbiAgICAgICAgICAgICAgICAgICAgPyBTRUNPTkRcbiAgICAgICAgICAgICAgICAgICAgOiBhW01JTExJU0VDT05EXSA8IDAgfHwgYVtNSUxMSVNFQ09ORF0gPiA5OTlcbiAgICAgICAgICAgICAgICAgICAgPyBNSUxMSVNFQ09ORFxuICAgICAgICAgICAgICAgICAgICA6IC0xO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKG0pLl9vdmVyZmxvd0RheU9mWWVhciAmJlxuICAgICAgICAgICAgICAgIChvdmVyZmxvdyA8IFlFQVIgfHwgb3ZlcmZsb3cgPiBEQVRFKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3cgPSBEQVRFO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dXZWVrcyAmJiBvdmVyZmxvdyA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdyA9IFdFRUs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZ2V0UGFyc2luZ0ZsYWdzKG0pLl9vdmVyZmxvd1dlZWtkYXkgJiYgb3ZlcmZsb3cgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3cgPSBXRUVLREFZO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MobSkub3ZlcmZsb3cgPSBvdmVyZmxvdztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIC8vIGlzbyA4NjAxIHJlZ2V4XG4gICAgLy8gMDAwMC0wMC0wMCAwMDAwLVcwMCBvciAwMDAwLVcwMC0wICsgVCArIDAwIG9yIDAwOjAwIG9yIDAwOjAwOjAwIG9yIDAwOjAwOjAwLjAwMCArICswMDowMCBvciArMDAwMCBvciArMDApXG4gICAgdmFyIGV4dGVuZGVkSXNvUmVnZXggPSAvXlxccyooKD86WystXVxcZHs2fXxcXGR7NH0pLSg/OlxcZFxcZC1cXGRcXGR8V1xcZFxcZC1cXGR8V1xcZFxcZHxcXGRcXGRcXGR8XFxkXFxkKSkoPzooVHwgKShcXGRcXGQoPzo6XFxkXFxkKD86OlxcZFxcZCg/OlsuLF1cXGQrKT8pPyk/KShbKy1dXFxkXFxkKD86Oj9cXGRcXGQpP3xcXHMqWik/KT8kLyxcbiAgICAgICAgYmFzaWNJc29SZWdleCA9IC9eXFxzKigoPzpbKy1dXFxkezZ9fFxcZHs0fSkoPzpcXGRcXGRcXGRcXGR8V1xcZFxcZFxcZHxXXFxkXFxkfFxcZFxcZFxcZHxcXGRcXGR8KSkoPzooVHwgKShcXGRcXGQoPzpcXGRcXGQoPzpcXGRcXGQoPzpbLixdXFxkKyk/KT8pPykoWystXVxcZFxcZCg/Ojo/XFxkXFxkKT98XFxzKlopPyk/JC8sXG4gICAgICAgIHR6UmVnZXggPSAvWnxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPy8sXG4gICAgICAgIGlzb0RhdGVzID0gW1xuICAgICAgICAgICAgWydZWVlZWVktTU0tREQnLCAvWystXVxcZHs2fS1cXGRcXGQtXFxkXFxkL10sXG4gICAgICAgICAgICBbJ1lZWVktTU0tREQnLCAvXFxkezR9LVxcZFxcZC1cXGRcXGQvXSxcbiAgICAgICAgICAgIFsnR0dHRy1bV11XVy1FJywgL1xcZHs0fS1XXFxkXFxkLVxcZC9dLFxuICAgICAgICAgICAgWydHR0dHLVtXXVdXJywgL1xcZHs0fS1XXFxkXFxkLywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZLURERCcsIC9cXGR7NH0tXFxkezN9L10sXG4gICAgICAgICAgICBbJ1lZWVktTU0nLCAvXFxkezR9LVxcZFxcZC8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWVlZTU1ERCcsIC9bKy1dXFxkezEwfS9dLFxuICAgICAgICAgICAgWydZWVlZTU1ERCcsIC9cXGR7OH0vXSxcbiAgICAgICAgICAgIFsnR0dHR1tXXVdXRScsIC9cXGR7NH1XXFxkezN9L10sXG4gICAgICAgICAgICBbJ0dHR0dbV11XVycsIC9cXGR7NH1XXFxkezJ9LywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZREREJywgL1xcZHs3fS9dLFxuICAgICAgICAgICAgWydZWVlZTU0nLCAvXFxkezZ9LywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZJywgL1xcZHs0fS8sIGZhbHNlXSxcbiAgICAgICAgXSxcbiAgICAgICAgLy8gaXNvIHRpbWUgZm9ybWF0cyBhbmQgcmVnZXhlc1xuICAgICAgICBpc29UaW1lcyA9IFtcbiAgICAgICAgICAgIFsnSEg6bW06c3MuU1NTUycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZFxcLlxcZCsvXSxcbiAgICAgICAgICAgIFsnSEg6bW06c3MsU1NTUycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZCxcXGQrL10sXG4gICAgICAgICAgICBbJ0hIOm1tOnNzJywgL1xcZFxcZDpcXGRcXGQ6XFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIOm1tJywgL1xcZFxcZDpcXGRcXGQvXSxcbiAgICAgICAgICAgIFsnSEhtbXNzLlNTU1MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkXFwuXFxkKy9dLFxuICAgICAgICAgICAgWydISG1tc3MsU1NTUycsIC9cXGRcXGRcXGRcXGRcXGRcXGQsXFxkKy9dLFxuICAgICAgICAgICAgWydISG1tc3MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIbW0nLCAvXFxkXFxkXFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIJywgL1xcZFxcZC9dLFxuICAgICAgICBdLFxuICAgICAgICBhc3BOZXRKc29uUmVnZXggPSAvXlxcLz9EYXRlXFwoKC0/XFxkKykvaSxcbiAgICAgICAgLy8gUkZDIDI4MjIgcmVnZXg6IEZvciBkZXRhaWxzIHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjgyMiNzZWN0aW9uLTMuM1xuICAgICAgICByZmMyODIyID0gL14oPzooTW9ufFR1ZXxXZWR8VGh1fEZyaXxTYXR8U3VuKSw/XFxzKT8oXFxkezEsMn0pXFxzKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKVxccyhcXGR7Miw0fSlcXHMoXFxkXFxkKTooXFxkXFxkKSg/OjooXFxkXFxkKSk/XFxzKD86KFVUfEdNVHxbRUNNUF1bU0RdVCl8KFtael0pfChbKy1dXFxkezR9KSkkLyxcbiAgICAgICAgb2JzT2Zmc2V0cyA9IHtcbiAgICAgICAgICAgIFVUOiAwLFxuICAgICAgICAgICAgR01UOiAwLFxuICAgICAgICAgICAgRURUOiAtNCAqIDYwLFxuICAgICAgICAgICAgRVNUOiAtNSAqIDYwLFxuICAgICAgICAgICAgQ0RUOiAtNSAqIDYwLFxuICAgICAgICAgICAgQ1NUOiAtNiAqIDYwLFxuICAgICAgICAgICAgTURUOiAtNiAqIDYwLFxuICAgICAgICAgICAgTVNUOiAtNyAqIDYwLFxuICAgICAgICAgICAgUERUOiAtNyAqIDYwLFxuICAgICAgICAgICAgUFNUOiAtOCAqIDYwLFxuICAgICAgICB9O1xuXG4gICAgLy8gZGF0ZSBmcm9tIGlzbyBmb3JtYXRcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tSVNPKGNvbmZpZykge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBzdHJpbmcgPSBjb25maWcuX2ksXG4gICAgICAgICAgICBtYXRjaCA9IGV4dGVuZGVkSXNvUmVnZXguZXhlYyhzdHJpbmcpIHx8IGJhc2ljSXNvUmVnZXguZXhlYyhzdHJpbmcpLFxuICAgICAgICAgICAgYWxsb3dUaW1lLFxuICAgICAgICAgICAgZGF0ZUZvcm1hdCxcbiAgICAgICAgICAgIHRpbWVGb3JtYXQsXG4gICAgICAgICAgICB0ekZvcm1hdDtcblxuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmlzbyA9IHRydWU7XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBpc29EYXRlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNvRGF0ZXNbaV1bMV0uZXhlYyhtYXRjaFsxXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZUZvcm1hdCA9IGlzb0RhdGVzW2ldWzBdO1xuICAgICAgICAgICAgICAgICAgICBhbGxvd1RpbWUgPSBpc29EYXRlc1tpXVsyXSAhPT0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRlRm9ybWF0ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbM10pIHtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gaXNvVGltZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc29UaW1lc1tpXVsxXS5leGVjKG1hdGNoWzNdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF0Y2hbMl0gc2hvdWxkIGJlICdUJyBvciBzcGFjZVxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZUZvcm1hdCA9IChtYXRjaFsyXSB8fCAnICcpICsgaXNvVGltZXNbaV1bMF07XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGltZUZvcm1hdCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFhbGxvd1RpbWUgJiYgdGltZUZvcm1hdCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hdGNoWzRdKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR6UmVnZXguZXhlYyhtYXRjaFs0XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdHpGb3JtYXQgPSAnWic7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25maWcuX2YgPSBkYXRlRm9ybWF0ICsgKHRpbWVGb3JtYXQgfHwgJycpICsgKHR6Rm9ybWF0IHx8ICcnKTtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXh0cmFjdEZyb21SRkMyODIyU3RyaW5ncyhcbiAgICAgICAgeWVhclN0cixcbiAgICAgICAgbW9udGhTdHIsXG4gICAgICAgIGRheVN0cixcbiAgICAgICAgaG91clN0cixcbiAgICAgICAgbWludXRlU3RyLFxuICAgICAgICBzZWNvbmRTdHJcbiAgICApIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IFtcbiAgICAgICAgICAgIHVudHJ1bmNhdGVZZWFyKHllYXJTdHIpLFxuICAgICAgICAgICAgZGVmYXVsdExvY2FsZU1vbnRoc1Nob3J0LmluZGV4T2YobW9udGhTdHIpLFxuICAgICAgICAgICAgcGFyc2VJbnQoZGF5U3RyLCAxMCksXG4gICAgICAgICAgICBwYXJzZUludChob3VyU3RyLCAxMCksXG4gICAgICAgICAgICBwYXJzZUludChtaW51dGVTdHIsIDEwKSxcbiAgICAgICAgXTtcblxuICAgICAgICBpZiAoc2Vjb25kU3RyKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChwYXJzZUludChzZWNvbmRTdHIsIDEwKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVudHJ1bmNhdGVZZWFyKHllYXJTdHIpIHtcbiAgICAgICAgdmFyIHllYXIgPSBwYXJzZUludCh5ZWFyU3RyLCAxMCk7XG4gICAgICAgIGlmICh5ZWFyIDw9IDQ5KSB7XG4gICAgICAgICAgICByZXR1cm4gMjAwMCArIHllYXI7XG4gICAgICAgIH0gZWxzZSBpZiAoeWVhciA8PSA5OTkpIHtcbiAgICAgICAgICAgIHJldHVybiAxOTAwICsgeWVhcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geWVhcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcmVwcm9jZXNzUkZDMjgyMihzKSB7XG4gICAgICAgIC8vIFJlbW92ZSBjb21tZW50cyBhbmQgZm9sZGluZyB3aGl0ZXNwYWNlIGFuZCByZXBsYWNlIG11bHRpcGxlLXNwYWNlcyB3aXRoIGEgc2luZ2xlIHNwYWNlXG4gICAgICAgIHJldHVybiBzXG4gICAgICAgICAgICAucmVwbGFjZSgvXFwoW14pXSpcXCl8W1xcblxcdF0vZywgJyAnKVxuICAgICAgICAgICAgLnJlcGxhY2UoLyhcXHNcXHMrKS9nLCAnICcpXG4gICAgICAgICAgICAucmVwbGFjZSgvXlxcc1xccyovLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXHNcXHMqJC8sICcnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja1dlZWtkYXkod2Vla2RheVN0ciwgcGFyc2VkSW5wdXQsIGNvbmZpZykge1xuICAgICAgICBpZiAod2Vla2RheVN0cikge1xuICAgICAgICAgICAgLy8gVE9ETzogUmVwbGFjZSB0aGUgdmFuaWxsYSBKUyBEYXRlIG9iamVjdCB3aXRoIGFuIGluZGVwZW5kZW50IGRheS1vZi13ZWVrIGNoZWNrLlxuICAgICAgICAgICAgdmFyIHdlZWtkYXlQcm92aWRlZCA9IGRlZmF1bHRMb2NhbGVXZWVrZGF5c1Nob3J0LmluZGV4T2Yod2Vla2RheVN0ciksXG4gICAgICAgICAgICAgICAgd2Vla2RheUFjdHVhbCA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRJbnB1dFswXSxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkSW5wdXRbMV0sXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZElucHV0WzJdXG4gICAgICAgICAgICAgICAgKS5nZXREYXkoKTtcbiAgICAgICAgICAgIGlmICh3ZWVrZGF5UHJvdmlkZWQgIT09IHdlZWtkYXlBY3R1YWwpIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS53ZWVrZGF5TWlzbWF0Y2ggPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYWxjdWxhdGVPZmZzZXQob2JzT2Zmc2V0LCBtaWxpdGFyeU9mZnNldCwgbnVtT2Zmc2V0KSB7XG4gICAgICAgIGlmIChvYnNPZmZzZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBvYnNPZmZzZXRzW29ic09mZnNldF07XG4gICAgICAgIH0gZWxzZSBpZiAobWlsaXRhcnlPZmZzZXQpIHtcbiAgICAgICAgICAgIC8vIHRoZSBvbmx5IGFsbG93ZWQgbWlsaXRhcnkgdHogaXMgWlxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaG0gPSBwYXJzZUludChudW1PZmZzZXQsIDEwKSxcbiAgICAgICAgICAgICAgICBtID0gaG0gJSAxMDAsXG4gICAgICAgICAgICAgICAgaCA9IChobSAtIG0pIC8gMTAwO1xuICAgICAgICAgICAgcmV0dXJuIGggKiA2MCArIG07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkYXRlIGFuZCB0aW1lIGZyb20gcmVmIDI4MjIgZm9ybWF0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVJGQzI4MjIoY29uZmlnKSB7XG4gICAgICAgIHZhciBtYXRjaCA9IHJmYzI4MjIuZXhlYyhwcmVwcm9jZXNzUkZDMjgyMihjb25maWcuX2kpKSxcbiAgICAgICAgICAgIHBhcnNlZEFycmF5O1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIHBhcnNlZEFycmF5ID0gZXh0cmFjdEZyb21SRkMyODIyU3RyaW5ncyhcbiAgICAgICAgICAgICAgICBtYXRjaFs0XSxcbiAgICAgICAgICAgICAgICBtYXRjaFszXSxcbiAgICAgICAgICAgICAgICBtYXRjaFsyXSxcbiAgICAgICAgICAgICAgICBtYXRjaFs1XSxcbiAgICAgICAgICAgICAgICBtYXRjaFs2XSxcbiAgICAgICAgICAgICAgICBtYXRjaFs3XVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICghY2hlY2tXZWVrZGF5KG1hdGNoWzFdLCBwYXJzZWRBcnJheSwgY29uZmlnKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uZmlnLl9hID0gcGFyc2VkQXJyYXk7XG4gICAgICAgICAgICBjb25maWcuX3R6bSA9IGNhbGN1bGF0ZU9mZnNldChtYXRjaFs4XSwgbWF0Y2hbOV0sIG1hdGNoWzEwXSk7XG5cbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IGNyZWF0ZVVUQ0RhdGUuYXBwbHkobnVsbCwgY29uZmlnLl9hKTtcbiAgICAgICAgICAgIGNvbmZpZy5fZC5zZXRVVENNaW51dGVzKGNvbmZpZy5fZC5nZXRVVENNaW51dGVzKCkgLSBjb25maWcuX3R6bSk7XG5cbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnJmYzI4MjIgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkYXRlIGZyb20gMSkgQVNQLk5FVCwgMikgSVNPLCAzKSBSRkMgMjgyMiBmb3JtYXRzLCBvciA0KSBvcHRpb25hbCBmYWxsYmFjayBpZiBwYXJzaW5nIGlzbid0IHN0cmljdFxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmcoY29uZmlnKSB7XG4gICAgICAgIHZhciBtYXRjaGVkID0gYXNwTmV0SnNvblJlZ2V4LmV4ZWMoY29uZmlnLl9pKTtcbiAgICAgICAgaWYgKG1hdGNoZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKCttYXRjaGVkWzFdKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZ0Zyb21JU08oY29uZmlnKTtcbiAgICAgICAgaWYgKGNvbmZpZy5faXNWYWxpZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBjb25maWcuX2lzVmFsaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWdGcm9tUkZDMjgyMihjb25maWcpO1xuICAgICAgICBpZiAoY29uZmlnLl9pc1ZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgZGVsZXRlIGNvbmZpZy5faXNWYWxpZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcuX3N0cmljdCkge1xuICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBGaW5hbCBhdHRlbXB0LCB1c2UgSW5wdXQgRmFsbGJhY2tcbiAgICAgICAgICAgIGhvb2tzLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrKGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ3ZhbHVlIHByb3ZpZGVkIGlzIG5vdCBpbiBhIHJlY29nbml6ZWQgUkZDMjgyMiBvciBJU08gZm9ybWF0LiBtb21lbnQgY29uc3RydWN0aW9uIGZhbGxzIGJhY2sgdG8ganMgRGF0ZSgpLCAnICtcbiAgICAgICAgICAgICd3aGljaCBpcyBub3QgcmVsaWFibGUgYWNyb3NzIGFsbCBicm93c2VycyBhbmQgdmVyc2lvbnMuIE5vbiBSRkMyODIyL0lTTyBkYXRlIGZvcm1hdHMgYXJlICcgK1xuICAgICAgICAgICAgJ2Rpc2NvdXJhZ2VkLiBQbGVhc2UgcmVmZXIgdG8gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9qcy1kYXRlLyBmb3IgbW9yZSBpbmZvLicsXG4gICAgICAgIGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGNvbmZpZy5faSArIChjb25maWcuX3VzZVVUQyA/ICcgVVRDJyA6ICcnKSk7XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gUGljayB0aGUgZmlyc3QgZGVmaW5lZCBvZiB0d28gb3IgdGhyZWUgYXJndW1lbnRzLlxuICAgIGZ1bmN0aW9uIGRlZmF1bHRzKGEsIGIsIGMpIHtcbiAgICAgICAgaWYgKGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGIgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3VycmVudERhdGVBcnJheShjb25maWcpIHtcbiAgICAgICAgLy8gaG9va3MgaXMgYWN0dWFsbHkgdGhlIGV4cG9ydGVkIG1vbWVudCBvYmplY3RcbiAgICAgICAgdmFyIG5vd1ZhbHVlID0gbmV3IERhdGUoaG9va3Mubm93KCkpO1xuICAgICAgICBpZiAoY29uZmlnLl91c2VVVEMpIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgbm93VmFsdWUuZ2V0VVRDRnVsbFllYXIoKSxcbiAgICAgICAgICAgICAgICBub3dWYWx1ZS5nZXRVVENNb250aCgpLFxuICAgICAgICAgICAgICAgIG5vd1ZhbHVlLmdldFVUQ0RhdGUoKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtub3dWYWx1ZS5nZXRGdWxsWWVhcigpLCBub3dWYWx1ZS5nZXRNb250aCgpLCBub3dWYWx1ZS5nZXREYXRlKCldO1xuICAgIH1cblxuICAgIC8vIGNvbnZlcnQgYW4gYXJyYXkgdG8gYSBkYXRlLlxuICAgIC8vIHRoZSBhcnJheSBzaG91bGQgbWlycm9yIHRoZSBwYXJhbWV0ZXJzIGJlbG93XG4gICAgLy8gbm90ZTogYWxsIHZhbHVlcyBwYXN0IHRoZSB5ZWFyIGFyZSBvcHRpb25hbCBhbmQgd2lsbCBkZWZhdWx0IHRvIHRoZSBsb3dlc3QgcG9zc2libGUgdmFsdWUuXG4gICAgLy8gW3llYXIsIG1vbnRoLCBkYXkgLCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmRdXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUFycmF5KGNvbmZpZykge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBpbnB1dCA9IFtdLFxuICAgICAgICAgICAgY3VycmVudERhdGUsXG4gICAgICAgICAgICBleHBlY3RlZFdlZWtkYXksXG4gICAgICAgICAgICB5ZWFyVG9Vc2U7XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudERhdGUgPSBjdXJyZW50RGF0ZUFycmF5KGNvbmZpZyk7XG5cbiAgICAgICAgLy9jb21wdXRlIGRheSBvZiB0aGUgeWVhciBmcm9tIHdlZWtzIGFuZCB3ZWVrZGF5c1xuICAgICAgICBpZiAoY29uZmlnLl93ICYmIGNvbmZpZy5fYVtEQVRFXSA9PSBudWxsICYmIGNvbmZpZy5fYVtNT05USF0gPT0gbnVsbCkge1xuICAgICAgICAgICAgZGF5T2ZZZWFyRnJvbVdlZWtJbmZvKGNvbmZpZyk7XG4gICAgICAgIH1cblxuICAgICAgICAvL2lmIHRoZSBkYXkgb2YgdGhlIHllYXIgaXMgc2V0LCBmaWd1cmUgb3V0IHdoYXQgaXQgaXNcbiAgICAgICAgaWYgKGNvbmZpZy5fZGF5T2ZZZWFyICE9IG51bGwpIHtcbiAgICAgICAgICAgIHllYXJUb1VzZSA9IGRlZmF1bHRzKGNvbmZpZy5fYVtZRUFSXSwgY3VycmVudERhdGVbWUVBUl0pO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPiBkYXlzSW5ZZWFyKHllYXJUb1VzZSkgfHxcbiAgICAgICAgICAgICAgICBjb25maWcuX2RheU9mWWVhciA9PT0gMFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuX292ZXJmbG93RGF5T2ZZZWFyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGF0ZSA9IGNyZWF0ZVVUQ0RhdGUoeWVhclRvVXNlLCAwLCBjb25maWcuX2RheU9mWWVhcik7XG4gICAgICAgICAgICBjb25maWcuX2FbTU9OVEhdID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgICAgICAgICAgY29uZmlnLl9hW0RBVEVdID0gZGF0ZS5nZXRVVENEYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWZhdWx0IHRvIGN1cnJlbnQgZGF0ZS5cbiAgICAgICAgLy8gKiBpZiBubyB5ZWFyLCBtb250aCwgZGF5IG9mIG1vbnRoIGFyZSBnaXZlbiwgZGVmYXVsdCB0byB0b2RheVxuICAgICAgICAvLyAqIGlmIGRheSBvZiBtb250aCBpcyBnaXZlbiwgZGVmYXVsdCBtb250aCBhbmQgeWVhclxuICAgICAgICAvLyAqIGlmIG1vbnRoIGlzIGdpdmVuLCBkZWZhdWx0IG9ubHkgeWVhclxuICAgICAgICAvLyAqIGlmIHllYXIgaXMgZ2l2ZW4sIGRvbid0IGRlZmF1bHQgYW55dGhpbmdcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDMgJiYgY29uZmlnLl9hW2ldID09IG51bGw7ICsraSkge1xuICAgICAgICAgICAgY29uZmlnLl9hW2ldID0gaW5wdXRbaV0gPSBjdXJyZW50RGF0ZVtpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFplcm8gb3V0IHdoYXRldmVyIHdhcyBub3QgZGVmYXVsdGVkLCBpbmNsdWRpbmcgdGltZVxuICAgICAgICBmb3IgKDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgY29uZmlnLl9hW2ldID0gaW5wdXRbaV0gPVxuICAgICAgICAgICAgICAgIGNvbmZpZy5fYVtpXSA9PSBudWxsID8gKGkgPT09IDIgPyAxIDogMCkgOiBjb25maWcuX2FbaV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGVjayBmb3IgMjQ6MDA6MDAuMDAwXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9PT0gMjQgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fYVtNSU5VVEVdID09PSAwICYmXG4gICAgICAgICAgICBjb25maWcuX2FbU0VDT05EXSA9PT0gMCAmJlxuICAgICAgICAgICAgY29uZmlnLl9hW01JTExJU0VDT05EXSA9PT0gMFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbmZpZy5fbmV4dERheSA9IHRydWU7XG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnLl9kID0gKGNvbmZpZy5fdXNlVVRDID8gY3JlYXRlVVRDRGF0ZSA6IGNyZWF0ZURhdGUpLmFwcGx5KFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIGlucHV0XG4gICAgICAgICk7XG4gICAgICAgIGV4cGVjdGVkV2Vla2RheSA9IGNvbmZpZy5fdXNlVVRDXG4gICAgICAgICAgICA/IGNvbmZpZy5fZC5nZXRVVENEYXkoKVxuICAgICAgICAgICAgOiBjb25maWcuX2QuZ2V0RGF5KCk7XG5cbiAgICAgICAgLy8gQXBwbHkgdGltZXpvbmUgb2Zmc2V0IGZyb20gaW5wdXQuIFRoZSBhY3R1YWwgdXRjT2Zmc2V0IGNhbiBiZSBjaGFuZ2VkXG4gICAgICAgIC8vIHdpdGggcGFyc2Vab25lLlxuICAgICAgICBpZiAoY29uZmlnLl90em0gIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uZmlnLl9kLnNldFVUQ01pbnV0ZXMoY29uZmlnLl9kLmdldFVUQ01pbnV0ZXMoKSAtIGNvbmZpZy5fdHptKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcuX25leHREYXkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9IDI0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2hlY2sgZm9yIG1pc21hdGNoaW5nIGRheSBvZiB3ZWVrXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbmZpZy5fdyAmJlxuICAgICAgICAgICAgdHlwZW9mIGNvbmZpZy5fdy5kICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgY29uZmlnLl93LmQgIT09IGV4cGVjdGVkV2Vla2RheVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLndlZWtkYXlNaXNtYXRjaCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkYXlPZlllYXJGcm9tV2Vla0luZm8oY29uZmlnKSB7XG4gICAgICAgIHZhciB3LCB3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3ksIHRlbXAsIHdlZWtkYXlPdmVyZmxvdywgY3VyV2VlaztcblxuICAgICAgICB3ID0gY29uZmlnLl93O1xuICAgICAgICBpZiAody5HRyAhPSBudWxsIHx8IHcuVyAhPSBudWxsIHx8IHcuRSAhPSBudWxsKSB7XG4gICAgICAgICAgICBkb3cgPSAxO1xuICAgICAgICAgICAgZG95ID0gNDtcblxuICAgICAgICAgICAgLy8gVE9ETzogV2UgbmVlZCB0byB0YWtlIHRoZSBjdXJyZW50IGlzb1dlZWtZZWFyLCBidXQgdGhhdCBkZXBlbmRzIG9uXG4gICAgICAgICAgICAvLyBob3cgd2UgaW50ZXJwcmV0IG5vdyAobG9jYWwsIHV0YywgZml4ZWQgb2Zmc2V0KS4gU28gY3JlYXRlXG4gICAgICAgICAgICAvLyBhIG5vdyB2ZXJzaW9uIG9mIGN1cnJlbnQgY29uZmlnICh0YWtlIGxvY2FsL3V0Yy9vZmZzZXQgZmxhZ3MsIGFuZFxuICAgICAgICAgICAgLy8gY3JlYXRlIG5vdykuXG4gICAgICAgICAgICB3ZWVrWWVhciA9IGRlZmF1bHRzKFxuICAgICAgICAgICAgICAgIHcuR0csXG4gICAgICAgICAgICAgICAgY29uZmlnLl9hW1lFQVJdLFxuICAgICAgICAgICAgICAgIHdlZWtPZlllYXIoY3JlYXRlTG9jYWwoKSwgMSwgNCkueWVhclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHdlZWsgPSBkZWZhdWx0cyh3LlcsIDEpO1xuICAgICAgICAgICAgd2Vla2RheSA9IGRlZmF1bHRzKHcuRSwgMSk7XG4gICAgICAgICAgICBpZiAod2Vla2RheSA8IDEgfHwgd2Vla2RheSA+IDcpIHtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5T3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZG93ID0gY29uZmlnLl9sb2NhbGUuX3dlZWsuZG93O1xuICAgICAgICAgICAgZG95ID0gY29uZmlnLl9sb2NhbGUuX3dlZWsuZG95O1xuXG4gICAgICAgICAgICBjdXJXZWVrID0gd2Vla09mWWVhcihjcmVhdGVMb2NhbCgpLCBkb3csIGRveSk7XG5cbiAgICAgICAgICAgIHdlZWtZZWFyID0gZGVmYXVsdHMody5nZywgY29uZmlnLl9hW1lFQVJdLCBjdXJXZWVrLnllYXIpO1xuXG4gICAgICAgICAgICAvLyBEZWZhdWx0IHRvIGN1cnJlbnQgd2Vlay5cbiAgICAgICAgICAgIHdlZWsgPSBkZWZhdWx0cyh3LncsIGN1cldlZWsud2Vlayk7XG5cbiAgICAgICAgICAgIGlmICh3LmQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIHdlZWtkYXkgLS0gbG93IGRheSBudW1iZXJzIGFyZSBjb25zaWRlcmVkIG5leHQgd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSB3LmQ7XG4gICAgICAgICAgICAgICAgaWYgKHdlZWtkYXkgPCAwIHx8IHdlZWtkYXkgPiA2KSB7XG4gICAgICAgICAgICAgICAgICAgIHdlZWtkYXlPdmVyZmxvdyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh3LmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIGxvY2FsIHdlZWtkYXkgLS0gY291bnRpbmcgc3RhcnRzIGZyb20gYmVnaW5uaW5nIG9mIHdlZWtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5ID0gdy5lICsgZG93O1xuICAgICAgICAgICAgICAgIGlmICh3LmUgPCAwIHx8IHcuZSA+IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgd2Vla2RheU92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQgdG8gYmVnaW5uaW5nIG9mIHdlZWtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5ID0gZG93O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh3ZWVrIDwgMSB8fCB3ZWVrID4gd2Vla3NJblllYXIod2Vla1llYXIsIGRvdywgZG95KSkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuX292ZXJmbG93V2Vla3MgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHdlZWtkYXlPdmVyZmxvdyAhPSBudWxsKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dXZWVrZGF5ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRlbXAgPSBkYXlPZlllYXJGcm9tV2Vla3Mod2Vla1llYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtZRUFSXSA9IHRlbXAueWVhcjtcbiAgICAgICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID0gdGVtcC5kYXlPZlllYXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjb25zdGFudCB0aGF0IHJlZmVycyB0byB0aGUgSVNPIHN0YW5kYXJkXG4gICAgaG9va3MuSVNPXzg2MDEgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgIC8vIGNvbnN0YW50IHRoYXQgcmVmZXJzIHRvIHRoZSBSRkMgMjgyMiBmb3JtXG4gICAgaG9va3MuUkZDXzI4MjIgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgIC8vIGRhdGUgZnJvbSBzdHJpbmcgYW5kIGZvcm1hdCBzdHJpbmdcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KGNvbmZpZykge1xuICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoaXMgdG8gYW5vdGhlciBwYXJ0IG9mIHRoZSBjcmVhdGlvbiBmbG93IHRvIHByZXZlbnQgY2lyY3VsYXIgZGVwc1xuICAgICAgICBpZiAoY29uZmlnLl9mID09PSBob29rcy5JU09fODYwMSkge1xuICAgICAgICAgICAgY29uZmlnRnJvbUlTTyhjb25maWcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWcuX2YgPT09IGhvb2tzLlJGQ18yODIyKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tUkZDMjgyMihjb25maWcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbmZpZy5fYSA9IFtdO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5lbXB0eSA9IHRydWU7XG5cbiAgICAgICAgLy8gVGhpcyBhcnJheSBpcyB1c2VkIHRvIG1ha2UgYSBEYXRlLCBlaXRoZXIgd2l0aCBgbmV3IERhdGVgIG9yIGBEYXRlLlVUQ2BcbiAgICAgICAgdmFyIHN0cmluZyA9ICcnICsgY29uZmlnLl9pLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIHBhcnNlZElucHV0LFxuICAgICAgICAgICAgdG9rZW5zLFxuICAgICAgICAgICAgdG9rZW4sXG4gICAgICAgICAgICBza2lwcGVkLFxuICAgICAgICAgICAgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICAgIHRvdGFsUGFyc2VkSW5wdXRMZW5ndGggPSAwLFxuICAgICAgICAgICAgZXJhO1xuXG4gICAgICAgIHRva2VucyA9XG4gICAgICAgICAgICBleHBhbmRGb3JtYXQoY29uZmlnLl9mLCBjb25maWcuX2xvY2FsZSkubWF0Y2goZm9ybWF0dGluZ1Rva2VucykgfHwgW107XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdG9rZW4gPSB0b2tlbnNbaV07XG4gICAgICAgICAgICBwYXJzZWRJbnB1dCA9IChzdHJpbmcubWF0Y2goZ2V0UGFyc2VSZWdleEZvclRva2VuKHRva2VuLCBjb25maWcpKSB8fFxuICAgICAgICAgICAgICAgIFtdKVswXTtcbiAgICAgICAgICAgIGlmIChwYXJzZWRJbnB1dCkge1xuICAgICAgICAgICAgICAgIHNraXBwZWQgPSBzdHJpbmcuc3Vic3RyKDAsIHN0cmluZy5pbmRleE9mKHBhcnNlZElucHV0KSk7XG4gICAgICAgICAgICAgICAgaWYgKHNraXBwZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRJbnB1dC5wdXNoKHNraXBwZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc2xpY2UoXG4gICAgICAgICAgICAgICAgICAgIHN0cmluZy5pbmRleE9mKHBhcnNlZElucHV0KSArIHBhcnNlZElucHV0Lmxlbmd0aFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdG90YWxQYXJzZWRJbnB1dExlbmd0aCArPSBwYXJzZWRJbnB1dC5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBkb24ndCBwYXJzZSBpZiBpdCdzIG5vdCBhIGtub3duIHRva2VuXG4gICAgICAgICAgICBpZiAoZm9ybWF0VG9rZW5GdW5jdGlvbnNbdG9rZW5dKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVtcHR5ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkVG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhZGRUaW1lVG9BcnJheUZyb21Ub2tlbih0b2tlbiwgcGFyc2VkSW5wdXQsIGNvbmZpZyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy5fc3RyaWN0ICYmICFwYXJzZWRJbnB1dCkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZFRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFkZCByZW1haW5pbmcgdW5wYXJzZWQgaW5wdXQgbGVuZ3RoIHRvIHRoZSBzdHJpbmdcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuY2hhcnNMZWZ0T3ZlciA9XG4gICAgICAgICAgICBzdHJpbmdMZW5ndGggLSB0b3RhbFBhcnNlZElucHV0TGVuZ3RoO1xuICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZElucHV0LnB1c2goc3RyaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNsZWFyIF8xMmggZmxhZyBpZiBob3VyIGlzIDw9IDEyXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA8PSAxMiAmJlxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9PT0gdHJ1ZSAmJlxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID4gMFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5wYXJzZWREYXRlUGFydHMgPSBjb25maWcuX2Euc2xpY2UoMCk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLm1lcmlkaWVtID0gY29uZmlnLl9tZXJpZGllbTtcbiAgICAgICAgLy8gaGFuZGxlIG1lcmlkaWVtXG4gICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9IG1lcmlkaWVtRml4V3JhcChcbiAgICAgICAgICAgIGNvbmZpZy5fbG9jYWxlLFxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdLFxuICAgICAgICAgICAgY29uZmlnLl9tZXJpZGllbVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIGhhbmRsZSBlcmFcbiAgICAgICAgZXJhID0gZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZXJhO1xuICAgICAgICBpZiAoZXJhICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25maWcuX2FbWUVBUl0gPSBjb25maWcuX2xvY2FsZS5lcmFzQ29udmVydFllYXIoZXJhLCBjb25maWcuX2FbWUVBUl0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnRnJvbUFycmF5KGNvbmZpZyk7XG4gICAgICAgIGNoZWNrT3ZlcmZsb3coY29uZmlnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtZXJpZGllbUZpeFdyYXAobG9jYWxlLCBob3VyLCBtZXJpZGllbSkge1xuICAgICAgICB2YXIgaXNQbTtcblxuICAgICAgICBpZiAobWVyaWRpZW0gPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gbm90aGluZyB0byBkb1xuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsZS5tZXJpZGllbUhvdXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS5tZXJpZGllbUhvdXIoaG91ciwgbWVyaWRpZW0pO1xuICAgICAgICB9IGVsc2UgaWYgKGxvY2FsZS5pc1BNICE9IG51bGwpIHtcbiAgICAgICAgICAgIC8vIEZhbGxiYWNrXG4gICAgICAgICAgICBpc1BtID0gbG9jYWxlLmlzUE0obWVyaWRpZW0pO1xuICAgICAgICAgICAgaWYgKGlzUG0gJiYgaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXNQbSAmJiBob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIG5vdCBzdXBwb3NlZCB0byBoYXBwZW5cbiAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGF0ZSBmcm9tIHN0cmluZyBhbmQgYXJyYXkgb2YgZm9ybWF0IHN0cmluZ3NcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tU3RyaW5nQW5kQXJyYXkoY29uZmlnKSB7XG4gICAgICAgIHZhciB0ZW1wQ29uZmlnLFxuICAgICAgICAgICAgYmVzdE1vbWVudCxcbiAgICAgICAgICAgIHNjb3JlVG9CZWF0LFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGN1cnJlbnRTY29yZSxcbiAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQsXG4gICAgICAgICAgICBiZXN0Rm9ybWF0SXNWYWxpZCA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChjb25maWcuX2YubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkRm9ybWF0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKE5hTik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29uZmlnLl9mLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjdXJyZW50U2NvcmUgPSAwO1xuICAgICAgICAgICAgdmFsaWRGb3JtYXRGb3VuZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGVtcENvbmZpZyA9IGNvcHlDb25maWcoe30sIGNvbmZpZyk7XG4gICAgICAgICAgICBpZiAoY29uZmlnLl91c2VVVEMgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRlbXBDb25maWcuX3VzZVVUQyA9IGNvbmZpZy5fdXNlVVRDO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGVtcENvbmZpZy5fZiA9IGNvbmZpZy5fZltpXTtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQodGVtcENvbmZpZyk7XG5cbiAgICAgICAgICAgIGlmIChpc1ZhbGlkKHRlbXBDb25maWcpKSB7XG4gICAgICAgICAgICAgICAgdmFsaWRGb3JtYXRGb3VuZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIGFueSBpbnB1dCB0aGF0IHdhcyBub3QgcGFyc2VkIGFkZCBhIHBlbmFsdHkgZm9yIHRoYXQgZm9ybWF0XG4gICAgICAgICAgICBjdXJyZW50U2NvcmUgKz0gZ2V0UGFyc2luZ0ZsYWdzKHRlbXBDb25maWcpLmNoYXJzTGVmdE92ZXI7XG5cbiAgICAgICAgICAgIC8vb3IgdG9rZW5zXG4gICAgICAgICAgICBjdXJyZW50U2NvcmUgKz0gZ2V0UGFyc2luZ0ZsYWdzKHRlbXBDb25maWcpLnVudXNlZFRva2Vucy5sZW5ndGggKiAxMDtcblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKHRlbXBDb25maWcpLnNjb3JlID0gY3VycmVudFNjb3JlO1xuXG4gICAgICAgICAgICBpZiAoIWJlc3RGb3JtYXRJc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBzY29yZVRvQmVhdCA9PSBudWxsIHx8XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29yZSA8IHNjb3JlVG9CZWF0IHx8XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmRcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcmVUb0JlYXQgPSBjdXJyZW50U2NvcmU7XG4gICAgICAgICAgICAgICAgICAgIGJlc3RNb21lbnQgPSB0ZW1wQ29uZmlnO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRGb3JtYXRGb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVzdEZvcm1hdElzVmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFNjb3JlIDwgc2NvcmVUb0JlYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcmVUb0JlYXQgPSBjdXJyZW50U2NvcmU7XG4gICAgICAgICAgICAgICAgICAgIGJlc3RNb21lbnQgPSB0ZW1wQ29uZmlnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGV4dGVuZChjb25maWcsIGJlc3RNb21lbnQgfHwgdGVtcENvbmZpZyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbU9iamVjdChjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZy5fZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGkgPSBub3JtYWxpemVPYmplY3RVbml0cyhjb25maWcuX2kpLFxuICAgICAgICAgICAgZGF5T3JEYXRlID0gaS5kYXkgPT09IHVuZGVmaW5lZCA/IGkuZGF0ZSA6IGkuZGF5O1xuICAgICAgICBjb25maWcuX2EgPSBtYXAoXG4gICAgICAgICAgICBbaS55ZWFyLCBpLm1vbnRoLCBkYXlPckRhdGUsIGkuaG91ciwgaS5taW51dGUsIGkuc2Vjb25kLCBpLm1pbGxpc2Vjb25kXSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqICYmIHBhcnNlSW50KG9iaiwgMTApO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbmZpZ0Zyb21BcnJheShjb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZyb21Db25maWcoY29uZmlnKSB7XG4gICAgICAgIHZhciByZXMgPSBuZXcgTW9tZW50KGNoZWNrT3ZlcmZsb3cocHJlcGFyZUNvbmZpZyhjb25maWcpKSk7XG4gICAgICAgIGlmIChyZXMuX25leHREYXkpIHtcbiAgICAgICAgICAgIC8vIEFkZGluZyBpcyBzbWFydCBlbm91Z2ggYXJvdW5kIERTVFxuICAgICAgICAgICAgcmVzLmFkZCgxLCAnZCcpO1xuICAgICAgICAgICAgcmVzLl9uZXh0RGF5ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcmVwYXJlQ29uZmlnKGNvbmZpZykge1xuICAgICAgICB2YXIgaW5wdXQgPSBjb25maWcuX2ksXG4gICAgICAgICAgICBmb3JtYXQgPSBjb25maWcuX2Y7XG5cbiAgICAgICAgY29uZmlnLl9sb2NhbGUgPSBjb25maWcuX2xvY2FsZSB8fCBnZXRMb2NhbGUoY29uZmlnLl9sKTtcblxuICAgICAgICBpZiAoaW5wdXQgPT09IG51bGwgfHwgKGZvcm1hdCA9PT0gdW5kZWZpbmVkICYmIGlucHV0ID09PSAnJykpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbnZhbGlkKHsgbnVsbElucHV0OiB0cnVlIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbmZpZy5faSA9IGlucHV0ID0gY29uZmlnLl9sb2NhbGUucHJlcGFyc2UoaW5wdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTW9tZW50KGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBNb21lbnQoY2hlY2tPdmVyZmxvdyhpbnB1dCkpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRGF0ZShpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IGlucHV0O1xuICAgICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoZm9ybWF0KSkge1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEFycmF5KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0KSB7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWdGcm9tSW5wdXQoY29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNWYWxpZChjb25maWcpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb25maWdGcm9tSW5wdXQoY29uZmlnKSB7XG4gICAgICAgIHZhciBpbnB1dCA9IGNvbmZpZy5faTtcbiAgICAgICAgaWYgKGlzVW5kZWZpbmVkKGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoaG9va3Mubm93KCkpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRGF0ZShpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGlucHV0LnZhbHVlT2YoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZyhjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2EgPSBtYXAoaW5wdXQuc2xpY2UoMCksIGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQob2JqLCAxMCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21BcnJheShjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnRnJvbU9iamVjdChjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyKGlucHV0KSkge1xuICAgICAgICAgICAgLy8gZnJvbSBtaWxsaXNlY29uZHNcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGlucHV0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGhvb2tzLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrKGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVMb2NhbE9yVVRDKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0LCBpc1VUQykge1xuICAgICAgICB2YXIgYyA9IHt9O1xuXG4gICAgICAgIGlmIChmb3JtYXQgPT09IHRydWUgfHwgZm9ybWF0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgc3RyaWN0ID0gZm9ybWF0O1xuICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxvY2FsZSA9PT0gdHJ1ZSB8fCBsb2NhbGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBzdHJpY3QgPSBsb2NhbGU7XG4gICAgICAgICAgICBsb2NhbGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAoaXNPYmplY3QoaW5wdXQpICYmIGlzT2JqZWN0RW1wdHkoaW5wdXQpKSB8fFxuICAgICAgICAgICAgKGlzQXJyYXkoaW5wdXQpICYmIGlucHV0Lmxlbmd0aCA9PT0gMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpbnB1dCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBvYmplY3QgY29uc3RydWN0aW9uIG11c3QgYmUgZG9uZSB0aGlzIHdheS5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvaXNzdWVzLzE0MjNcbiAgICAgICAgYy5faXNBTW9tZW50T2JqZWN0ID0gdHJ1ZTtcbiAgICAgICAgYy5fdXNlVVRDID0gYy5faXNVVEMgPSBpc1VUQztcbiAgICAgICAgYy5fbCA9IGxvY2FsZTtcbiAgICAgICAgYy5faSA9IGlucHV0O1xuICAgICAgICBjLl9mID0gZm9ybWF0O1xuICAgICAgICBjLl9zdHJpY3QgPSBzdHJpY3Q7XG5cbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZyb21Db25maWcoYyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlTG9jYWwoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsT3JVVEMoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QsIGZhbHNlKTtcbiAgICB9XG5cbiAgICB2YXIgcHJvdG90eXBlTWluID0gZGVwcmVjYXRlKFxuICAgICAgICAgICAgJ21vbWVudCgpLm1pbiBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50Lm1heCBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL21pbi1tYXgvJyxcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgb3RoZXIgPSBjcmVhdGVMb2NhbC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzVmFsaWQoKSAmJiBvdGhlci5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG90aGVyIDwgdGhpcyA/IHRoaXMgOiBvdGhlcjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlSW52YWxpZCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgcHJvdG90eXBlTWF4ID0gZGVwcmVjYXRlKFxuICAgICAgICAgICAgJ21vbWVudCgpLm1heCBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50Lm1pbiBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL21pbi1tYXgvJyxcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgb3RoZXIgPSBjcmVhdGVMb2NhbC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzVmFsaWQoKSAmJiBvdGhlci5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG90aGVyID4gdGhpcyA/IHRoaXMgOiBvdGhlcjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlSW52YWxpZCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgIC8vIFBpY2sgYSBtb21lbnQgbSBmcm9tIG1vbWVudHMgc28gdGhhdCBtW2ZuXShvdGhlcikgaXMgdHJ1ZSBmb3IgYWxsXG4gICAgLy8gb3RoZXIuIFRoaXMgcmVsaWVzIG9uIHRoZSBmdW5jdGlvbiBmbiB0byBiZSB0cmFuc2l0aXZlLlxuICAgIC8vXG4gICAgLy8gbW9tZW50cyBzaG91bGQgZWl0aGVyIGJlIGFuIGFycmF5IG9mIG1vbWVudCBvYmplY3RzIG9yIGFuIGFycmF5LCB3aG9zZVxuICAgIC8vIGZpcnN0IGVsZW1lbnQgaXMgYW4gYXJyYXkgb2YgbW9tZW50IG9iamVjdHMuXG4gICAgZnVuY3Rpb24gcGlja0J5KGZuLCBtb21lbnRzKSB7XG4gICAgICAgIHZhciByZXMsIGk7XG4gICAgICAgIGlmIChtb21lbnRzLmxlbmd0aCA9PT0gMSAmJiBpc0FycmF5KG1vbWVudHNbMF0pKSB7XG4gICAgICAgICAgICBtb21lbnRzID0gbW9tZW50c1swXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1vbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWwoKTtcbiAgICAgICAgfVxuICAgICAgICByZXMgPSBtb21lbnRzWzBdO1xuICAgICAgICBmb3IgKGkgPSAxOyBpIDwgbW9tZW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgaWYgKCFtb21lbnRzW2ldLmlzVmFsaWQoKSB8fCBtb21lbnRzW2ldW2ZuXShyZXMpKSB7XG4gICAgICAgICAgICAgICAgcmVzID0gbW9tZW50c1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8vIFRPRE86IFVzZSBbXS5zb3J0IGluc3RlYWQ/XG4gICAgZnVuY3Rpb24gbWluKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcblxuICAgICAgICByZXR1cm4gcGlja0J5KCdpc0JlZm9yZScsIGFyZ3MpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1heCgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG5cbiAgICAgICAgcmV0dXJuIHBpY2tCeSgnaXNBZnRlcicsIGFyZ3MpO1xuICAgIH1cblxuICAgIHZhciBub3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBEYXRlLm5vdyA/IERhdGUubm93KCkgOiArbmV3IERhdGUoKTtcbiAgICB9O1xuXG4gICAgdmFyIG9yZGVyaW5nID0gW1xuICAgICAgICAneWVhcicsXG4gICAgICAgICdxdWFydGVyJyxcbiAgICAgICAgJ21vbnRoJyxcbiAgICAgICAgJ3dlZWsnLFxuICAgICAgICAnZGF5JyxcbiAgICAgICAgJ2hvdXInLFxuICAgICAgICAnbWludXRlJyxcbiAgICAgICAgJ3NlY29uZCcsXG4gICAgICAgICdtaWxsaXNlY29uZCcsXG4gICAgXTtcblxuICAgIGZ1bmN0aW9uIGlzRHVyYXRpb25WYWxpZChtKSB7XG4gICAgICAgIHZhciBrZXksXG4gICAgICAgICAgICB1bml0SGFzRGVjaW1hbCA9IGZhbHNlLFxuICAgICAgICAgICAgaTtcbiAgICAgICAgZm9yIChrZXkgaW4gbSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGhhc093blByb3AobSwga2V5KSAmJlxuICAgICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgICAgIGluZGV4T2YuY2FsbChvcmRlcmluZywga2V5KSAhPT0gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgKG1ba2V5XSA9PSBudWxsIHx8ICFpc05hTihtW2tleV0pKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBvcmRlcmluZy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgaWYgKG1bb3JkZXJpbmdbaV1dKSB7XG4gICAgICAgICAgICAgICAgaWYgKHVuaXRIYXNEZWNpbWFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gb25seSBhbGxvdyBub24taW50ZWdlcnMgZm9yIHNtYWxsZXN0IHVuaXRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlRmxvYXQobVtvcmRlcmluZ1tpXV0pICE9PSB0b0ludChtW29yZGVyaW5nW2ldXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdW5pdEhhc0RlY2ltYWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVmFsaWQkMSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVmFsaWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW52YWxpZCQxKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oTmFOKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBEdXJhdGlvbihkdXJhdGlvbikge1xuICAgICAgICB2YXIgbm9ybWFsaXplZElucHV0ID0gbm9ybWFsaXplT2JqZWN0VW5pdHMoZHVyYXRpb24pLFxuICAgICAgICAgICAgeWVhcnMgPSBub3JtYWxpemVkSW5wdXQueWVhciB8fCAwLFxuICAgICAgICAgICAgcXVhcnRlcnMgPSBub3JtYWxpemVkSW5wdXQucXVhcnRlciB8fCAwLFxuICAgICAgICAgICAgbW9udGhzID0gbm9ybWFsaXplZElucHV0Lm1vbnRoIHx8IDAsXG4gICAgICAgICAgICB3ZWVrcyA9IG5vcm1hbGl6ZWRJbnB1dC53ZWVrIHx8IG5vcm1hbGl6ZWRJbnB1dC5pc29XZWVrIHx8IDAsXG4gICAgICAgICAgICBkYXlzID0gbm9ybWFsaXplZElucHV0LmRheSB8fCAwLFxuICAgICAgICAgICAgaG91cnMgPSBub3JtYWxpemVkSW5wdXQuaG91ciB8fCAwLFxuICAgICAgICAgICAgbWludXRlcyA9IG5vcm1hbGl6ZWRJbnB1dC5taW51dGUgfHwgMCxcbiAgICAgICAgICAgIHNlY29uZHMgPSBub3JtYWxpemVkSW5wdXQuc2Vjb25kIHx8IDAsXG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgPSBub3JtYWxpemVkSW5wdXQubWlsbGlzZWNvbmQgfHwgMDtcblxuICAgICAgICB0aGlzLl9pc1ZhbGlkID0gaXNEdXJhdGlvblZhbGlkKG5vcm1hbGl6ZWRJbnB1dCk7XG5cbiAgICAgICAgLy8gcmVwcmVzZW50YXRpb24gZm9yIGRhdGVBZGRSZW1vdmVcbiAgICAgICAgdGhpcy5fbWlsbGlzZWNvbmRzID1cbiAgICAgICAgICAgICttaWxsaXNlY29uZHMgK1xuICAgICAgICAgICAgc2Vjb25kcyAqIDFlMyArIC8vIDEwMDBcbiAgICAgICAgICAgIG1pbnV0ZXMgKiA2ZTQgKyAvLyAxMDAwICogNjBcbiAgICAgICAgICAgIGhvdXJzICogMTAwMCAqIDYwICogNjA7IC8vdXNpbmcgMTAwMCAqIDYwICogNjAgaW5zdGVhZCBvZiAzNmU1IHRvIGF2b2lkIGZsb2F0aW5nIHBvaW50IHJvdW5kaW5nIGVycm9ycyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMjk3OFxuICAgICAgICAvLyBCZWNhdXNlIG9mIGRhdGVBZGRSZW1vdmUgdHJlYXRzIDI0IGhvdXJzIGFzIGRpZmZlcmVudCBmcm9tIGFcbiAgICAgICAgLy8gZGF5IHdoZW4gd29ya2luZyBhcm91bmQgRFNULCB3ZSBuZWVkIHRvIHN0b3JlIHRoZW0gc2VwYXJhdGVseVxuICAgICAgICB0aGlzLl9kYXlzID0gK2RheXMgKyB3ZWVrcyAqIDc7XG4gICAgICAgIC8vIEl0IGlzIGltcG9zc2libGUgdG8gdHJhbnNsYXRlIG1vbnRocyBpbnRvIGRheXMgd2l0aG91dCBrbm93aW5nXG4gICAgICAgIC8vIHdoaWNoIG1vbnRocyB5b3UgYXJlIGFyZSB0YWxraW5nIGFib3V0LCBzbyB3ZSBoYXZlIHRvIHN0b3JlXG4gICAgICAgIC8vIGl0IHNlcGFyYXRlbHkuXG4gICAgICAgIHRoaXMuX21vbnRocyA9ICttb250aHMgKyBxdWFydGVycyAqIDMgKyB5ZWFycyAqIDEyO1xuXG4gICAgICAgIHRoaXMuX2RhdGEgPSB7fTtcblxuICAgICAgICB0aGlzLl9sb2NhbGUgPSBnZXRMb2NhbGUoKTtcblxuICAgICAgICB0aGlzLl9idWJibGUoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0R1cmF0aW9uKG9iaikge1xuICAgICAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgRHVyYXRpb247XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzUm91bmQobnVtYmVyKSB7XG4gICAgICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCgtMSAqIG51bWJlcikgKiAtMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjb21wYXJlIHR3byBhcnJheXMsIHJldHVybiB0aGUgbnVtYmVyIG9mIGRpZmZlcmVuY2VzXG4gICAgZnVuY3Rpb24gY29tcGFyZUFycmF5cyhhcnJheTEsIGFycmF5MiwgZG9udENvbnZlcnQpIHtcbiAgICAgICAgdmFyIGxlbiA9IE1hdGgubWluKGFycmF5MS5sZW5ndGgsIGFycmF5Mi5sZW5ndGgpLFxuICAgICAgICAgICAgbGVuZ3RoRGlmZiA9IE1hdGguYWJzKGFycmF5MS5sZW5ndGggLSBhcnJheTIubGVuZ3RoKSxcbiAgICAgICAgICAgIGRpZmZzID0gMCxcbiAgICAgICAgICAgIGk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIChkb250Q29udmVydCAmJiBhcnJheTFbaV0gIT09IGFycmF5MltpXSkgfHxcbiAgICAgICAgICAgICAgICAoIWRvbnRDb252ZXJ0ICYmIHRvSW50KGFycmF5MVtpXSkgIT09IHRvSW50KGFycmF5MltpXSkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBkaWZmcysrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkaWZmcyArIGxlbmd0aERpZmY7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgZnVuY3Rpb24gb2Zmc2V0KHRva2VuLCBzZXBhcmF0b3IpIHtcbiAgICAgICAgYWRkRm9ybWF0VG9rZW4odG9rZW4sIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLnV0Y09mZnNldCgpLFxuICAgICAgICAgICAgICAgIHNpZ24gPSAnKyc7XG4gICAgICAgICAgICBpZiAob2Zmc2V0IDwgMCkge1xuICAgICAgICAgICAgICAgIG9mZnNldCA9IC1vZmZzZXQ7XG4gICAgICAgICAgICAgICAgc2lnbiA9ICctJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgc2lnbiArXG4gICAgICAgICAgICAgICAgemVyb0ZpbGwofn4ob2Zmc2V0IC8gNjApLCAyKSArXG4gICAgICAgICAgICAgICAgc2VwYXJhdG9yICtcbiAgICAgICAgICAgICAgICB6ZXJvRmlsbCh+fm9mZnNldCAlIDYwLCAyKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb2Zmc2V0KCdaJywgJzonKTtcbiAgICBvZmZzZXQoJ1paJywgJycpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignWicsIG1hdGNoU2hvcnRPZmZzZXQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1paJywgbWF0Y2hTaG9ydE9mZnNldCk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ1onLCAnWlonXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fdXNlVVRDID0gdHJ1ZTtcbiAgICAgICAgY29uZmlnLl90em0gPSBvZmZzZXRGcm9tU3RyaW5nKG1hdGNoU2hvcnRPZmZzZXQsIGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vIHRpbWV6b25lIGNodW5rZXJcbiAgICAvLyAnKzEwOjAwJyA+IFsnMTAnLCAgJzAwJ11cbiAgICAvLyAnLTE1MzAnICA+IFsnLTE1JywgJzMwJ11cbiAgICB2YXIgY2h1bmtPZmZzZXQgPSAvKFtcXCtcXC1dfFxcZFxcZCkvZ2k7XG5cbiAgICBmdW5jdGlvbiBvZmZzZXRGcm9tU3RyaW5nKG1hdGNoZXIsIHN0cmluZykge1xuICAgICAgICB2YXIgbWF0Y2hlcyA9IChzdHJpbmcgfHwgJycpLm1hdGNoKG1hdGNoZXIpLFxuICAgICAgICAgICAgY2h1bmssXG4gICAgICAgICAgICBwYXJ0cyxcbiAgICAgICAgICAgIG1pbnV0ZXM7XG5cbiAgICAgICAgaWYgKG1hdGNoZXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY2h1bmsgPSBtYXRjaGVzW21hdGNoZXMubGVuZ3RoIC0gMV0gfHwgW107XG4gICAgICAgIHBhcnRzID0gKGNodW5rICsgJycpLm1hdGNoKGNodW5rT2Zmc2V0KSB8fCBbJy0nLCAwLCAwXTtcbiAgICAgICAgbWludXRlcyA9ICsocGFydHNbMV0gKiA2MCkgKyB0b0ludChwYXJ0c1syXSk7XG5cbiAgICAgICAgcmV0dXJuIG1pbnV0ZXMgPT09IDAgPyAwIDogcGFydHNbMF0gPT09ICcrJyA/IG1pbnV0ZXMgOiAtbWludXRlcztcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gYSBtb21lbnQgZnJvbSBpbnB1dCwgdGhhdCBpcyBsb2NhbC91dGMvem9uZSBlcXVpdmFsZW50IHRvIG1vZGVsLlxuICAgIGZ1bmN0aW9uIGNsb25lV2l0aE9mZnNldChpbnB1dCwgbW9kZWwpIHtcbiAgICAgICAgdmFyIHJlcywgZGlmZjtcbiAgICAgICAgaWYgKG1vZGVsLl9pc1VUQykge1xuICAgICAgICAgICAgcmVzID0gbW9kZWwuY2xvbmUoKTtcbiAgICAgICAgICAgIGRpZmYgPVxuICAgICAgICAgICAgICAgIChpc01vbWVudChpbnB1dCkgfHwgaXNEYXRlKGlucHV0KVxuICAgICAgICAgICAgICAgICAgICA/IGlucHV0LnZhbHVlT2YoKVxuICAgICAgICAgICAgICAgICAgICA6IGNyZWF0ZUxvY2FsKGlucHV0KS52YWx1ZU9mKCkpIC0gcmVzLnZhbHVlT2YoKTtcbiAgICAgICAgICAgIC8vIFVzZSBsb3ctbGV2ZWwgYXBpLCBiZWNhdXNlIHRoaXMgZm4gaXMgbG93LWxldmVsIGFwaS5cbiAgICAgICAgICAgIHJlcy5fZC5zZXRUaW1lKHJlcy5fZC52YWx1ZU9mKCkgKyBkaWZmKTtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldChyZXMsIGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWwoaW5wdXQpLmxvY2FsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXREYXRlT2Zmc2V0KG0pIHtcbiAgICAgICAgLy8gT24gRmlyZWZveC4yNCBEYXRlI2dldFRpbWV6b25lT2Zmc2V0IHJldHVybnMgYSBmbG9hdGluZyBwb2ludC5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvcHVsbC8xODcxXG4gICAgICAgIHJldHVybiAtTWF0aC5yb3VuZChtLl9kLmdldFRpbWV6b25lT2Zmc2V0KCkpO1xuICAgIH1cblxuICAgIC8vIEhPT0tTXG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIGEgbW9tZW50IGlzIG11dGF0ZWQuXG4gICAgLy8gSXQgaXMgaW50ZW5kZWQgdG8ga2VlcCB0aGUgb2Zmc2V0IGluIHN5bmMgd2l0aCB0aGUgdGltZXpvbmUuXG4gICAgaG9va3MudXBkYXRlT2Zmc2V0ID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICAvLyBrZWVwTG9jYWxUaW1lID0gdHJ1ZSBtZWFucyBvbmx5IGNoYW5nZSB0aGUgdGltZXpvbmUsIHdpdGhvdXRcbiAgICAvLyBhZmZlY3RpbmcgdGhlIGxvY2FsIGhvdXIuIFNvIDU6MzE6MjYgKzAzMDAgLS1bdXRjT2Zmc2V0KDIsIHRydWUpXS0tPlxuICAgIC8vIDU6MzE6MjYgKzAyMDAgSXQgaXMgcG9zc2libGUgdGhhdCA1OjMxOjI2IGRvZXNuJ3QgZXhpc3Qgd2l0aCBvZmZzZXRcbiAgICAvLyArMDIwMCwgc28gd2UgYWRqdXN0IHRoZSB0aW1lIGFzIG5lZWRlZCwgdG8gYmUgdmFsaWQuXG4gICAgLy9cbiAgICAvLyBLZWVwaW5nIHRoZSB0aW1lIGFjdHVhbGx5IGFkZHMvc3VidHJhY3RzIChvbmUgaG91cilcbiAgICAvLyBmcm9tIHRoZSBhY3R1YWwgcmVwcmVzZW50ZWQgdGltZS4gVGhhdCBpcyB3aHkgd2UgY2FsbCB1cGRhdGVPZmZzZXRcbiAgICAvLyBhIHNlY29uZCB0aW1lLiBJbiBjYXNlIGl0IHdhbnRzIHVzIHRvIGNoYW5nZSB0aGUgb2Zmc2V0IGFnYWluXG4gICAgLy8gX2NoYW5nZUluUHJvZ3Jlc3MgPT0gdHJ1ZSBjYXNlLCB0aGVuIHdlIGhhdmUgdG8gYWRqdXN0LCBiZWNhdXNlXG4gICAgLy8gdGhlcmUgaXMgbm8gc3VjaCB0aW1lIGluIHRoZSBnaXZlbiB0aW1lem9uZS5cbiAgICBmdW5jdGlvbiBnZXRTZXRPZmZzZXQoaW5wdXQsIGtlZXBMb2NhbFRpbWUsIGtlZXBNaW51dGVzKSB7XG4gICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLl9vZmZzZXQgfHwgMCxcbiAgICAgICAgICAgIGxvY2FsQWRqdXN0O1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSBvZmZzZXRGcm9tU3RyaW5nKG1hdGNoU2hvcnRPZmZzZXQsIGlucHV0KTtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChNYXRoLmFicyhpbnB1dCkgPCAxNiAmJiAha2VlcE1pbnV0ZXMpIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IGlucHV0ICogNjA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2lzVVRDICYmIGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgICAgICAgICBsb2NhbEFkanVzdCA9IGdldERhdGVPZmZzZXQodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9vZmZzZXQgPSBpbnB1dDtcbiAgICAgICAgICAgIHRoaXMuX2lzVVRDID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChsb2NhbEFkanVzdCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGQobG9jYWxBZGp1c3QsICdtJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob2Zmc2V0ICE9PSBpbnB1dCkge1xuICAgICAgICAgICAgICAgIGlmICgha2VlcExvY2FsVGltZSB8fCB0aGlzLl9jaGFuZ2VJblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZFN1YnRyYWN0KFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUR1cmF0aW9uKGlucHV0IC0gb2Zmc2V0LCAnbScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VJblByb2dyZXNzID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc1VUQyA/IG9mZnNldCA6IGdldERhdGVPZmZzZXQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRab25lKGlucHV0LCBrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gLWlucHV0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldChpbnB1dCwga2VlcExvY2FsVGltZSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIC10aGlzLnV0Y09mZnNldCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0T2Zmc2V0VG9VVEMoa2VlcExvY2FsVGltZSkge1xuICAgICAgICByZXR1cm4gdGhpcy51dGNPZmZzZXQoMCwga2VlcExvY2FsVGltZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0T2Zmc2V0VG9Mb2NhbChrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgIGlmICh0aGlzLl9pc1VUQykge1xuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoMCwga2VlcExvY2FsVGltZSk7XG4gICAgICAgICAgICB0aGlzLl9pc1VUQyA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoa2VlcExvY2FsVGltZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3VidHJhY3QoZ2V0RGF0ZU9mZnNldCh0aGlzKSwgJ20nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb1BhcnNlZE9mZnNldCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3R6bSAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCh0aGlzLl90em0sIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5faSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHZhciB0Wm9uZSA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hPZmZzZXQsIHRoaXMuX2kpO1xuICAgICAgICAgICAgaWYgKHRab25lICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnV0Y09mZnNldCh0Wm9uZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KDAsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhc0FsaWduZWRIb3VyT2Zmc2V0KGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpbnB1dCA9IGlucHV0ID8gY3JlYXRlTG9jYWwoaW5wdXQpLnV0Y09mZnNldCgpIDogMDtcblxuICAgICAgICByZXR1cm4gKHRoaXMudXRjT2Zmc2V0KCkgLSBpbnB1dCkgJSA2MCA9PT0gMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0RheWxpZ2h0U2F2aW5nVGltZSgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KCkgPiB0aGlzLmNsb25lKCkubW9udGgoMCkudXRjT2Zmc2V0KCkgfHxcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KCkgPiB0aGlzLmNsb25lKCkubW9udGgoNSkudXRjT2Zmc2V0KClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0RheWxpZ2h0U2F2aW5nVGltZVNoaWZ0ZWQoKSB7XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQodGhpcy5faXNEU1RTaGlmdGVkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzRFNUU2hpZnRlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjID0ge30sXG4gICAgICAgICAgICBvdGhlcjtcblxuICAgICAgICBjb3B5Q29uZmlnKGMsIHRoaXMpO1xuICAgICAgICBjID0gcHJlcGFyZUNvbmZpZyhjKTtcblxuICAgICAgICBpZiAoYy5fYSkge1xuICAgICAgICAgICAgb3RoZXIgPSBjLl9pc1VUQyA/IGNyZWF0ZVVUQyhjLl9hKSA6IGNyZWF0ZUxvY2FsKGMuX2EpO1xuICAgICAgICAgICAgdGhpcy5faXNEU1RTaGlmdGVkID1cbiAgICAgICAgICAgICAgICB0aGlzLmlzVmFsaWQoKSAmJiBjb21wYXJlQXJyYXlzKGMuX2EsIG90aGVyLnRvQXJyYXkoKSkgPiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faXNEU1RTaGlmdGVkID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTG9jYWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/ICF0aGlzLl9pc1VUQyA6IGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVXRjT2Zmc2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzLl9pc1VUQyA6IGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVXRjKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzLl9pc1VUQyAmJiB0aGlzLl9vZmZzZXQgPT09IDAgOiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBBU1AuTkVUIGpzb24gZGF0ZSBmb3JtYXQgcmVnZXhcbiAgICB2YXIgYXNwTmV0UmVnZXggPSAvXigtfFxcKyk/KD86KFxcZCopWy4gXSk/KFxcZCspOihcXGQrKSg/OjooXFxkKykoXFwuXFxkKik/KT8kLyxcbiAgICAgICAgLy8gZnJvbSBodHRwOi8vZG9jcy5jbG9zdXJlLWxpYnJhcnkuZ29vZ2xlY29kZS5jb20vZ2l0L2Nsb3N1cmVfZ29vZ19kYXRlX2RhdGUuanMuc291cmNlLmh0bWxcbiAgICAgICAgLy8gc29tZXdoYXQgbW9yZSBpbiBsaW5lIHdpdGggNC40LjMuMiAyMDA0IHNwZWMsIGJ1dCBhbGxvd3MgZGVjaW1hbCBhbnl3aGVyZVxuICAgICAgICAvLyBhbmQgZnVydGhlciBtb2RpZmllZCB0byBhbGxvdyBmb3Igc3RyaW5ncyBjb250YWluaW5nIGJvdGggd2VlayBhbmQgZGF5XG4gICAgICAgIGlzb1JlZ2V4ID0gL14oLXxcXCspP1AoPzooWy0rXT9bMC05LC5dKilZKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilXKT8oPzooWy0rXT9bMC05LC5dKilEKT8oPzpUKD86KFstK10/WzAtOSwuXSopSCk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopUyk/KT8kLztcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUR1cmF0aW9uKGlucHV0LCBrZXkpIHtcbiAgICAgICAgdmFyIGR1cmF0aW9uID0gaW5wdXQsXG4gICAgICAgICAgICAvLyBtYXRjaGluZyBhZ2FpbnN0IHJlZ2V4cCBpcyBleHBlbnNpdmUsIGRvIGl0IG9uIGRlbWFuZFxuICAgICAgICAgICAgbWF0Y2ggPSBudWxsLFxuICAgICAgICAgICAgc2lnbixcbiAgICAgICAgICAgIHJldCxcbiAgICAgICAgICAgIGRpZmZSZXM7XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBtczogaW5wdXQuX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgICAgICBkOiBpbnB1dC5fZGF5cyxcbiAgICAgICAgICAgICAgICBNOiBpbnB1dC5fbW9udGhzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihpbnB1dCkgfHwgIWlzTmFOKCtpbnB1dCkpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge307XG4gICAgICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb25ba2V5XSA9ICtpbnB1dDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb24ubWlsbGlzZWNvbmRzID0gK2lucHV0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKChtYXRjaCA9IGFzcE5ldFJlZ2V4LmV4ZWMoaW5wdXQpKSkge1xuICAgICAgICAgICAgc2lnbiA9IG1hdGNoWzFdID09PSAnLScgPyAtMSA6IDE7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICB5OiAwLFxuICAgICAgICAgICAgICAgIGQ6IHRvSW50KG1hdGNoW0RBVEVdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgaDogdG9JbnQobWF0Y2hbSE9VUl0pICogc2lnbixcbiAgICAgICAgICAgICAgICBtOiB0b0ludChtYXRjaFtNSU5VVEVdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgczogdG9JbnQobWF0Y2hbU0VDT05EXSkgKiBzaWduLFxuICAgICAgICAgICAgICAgIG1zOiB0b0ludChhYnNSb3VuZChtYXRjaFtNSUxMSVNFQ09ORF0gKiAxMDAwKSkgKiBzaWduLCAvLyB0aGUgbWlsbGlzZWNvbmQgZGVjaW1hbCBwb2ludCBpcyBpbmNsdWRlZCBpbiB0aGUgbWF0Y2hcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoKG1hdGNoID0gaXNvUmVnZXguZXhlYyhpbnB1dCkpKSB7XG4gICAgICAgICAgICBzaWduID0gbWF0Y2hbMV0gPT09ICctJyA/IC0xIDogMTtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge1xuICAgICAgICAgICAgICAgIHk6IHBhcnNlSXNvKG1hdGNoWzJdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBNOiBwYXJzZUlzbyhtYXRjaFszXSwgc2lnbiksXG4gICAgICAgICAgICAgICAgdzogcGFyc2VJc28obWF0Y2hbNF0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIGQ6IHBhcnNlSXNvKG1hdGNoWzVdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBoOiBwYXJzZUlzbyhtYXRjaFs2XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgbTogcGFyc2VJc28obWF0Y2hbN10sIHNpZ24pLFxuICAgICAgICAgICAgICAgIHM6IHBhcnNlSXNvKG1hdGNoWzhdLCBzaWduKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoZHVyYXRpb24gPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gY2hlY2tzIGZvciBudWxsIG9yIHVuZGVmaW5lZFxuICAgICAgICAgICAgZHVyYXRpb24gPSB7fTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBkdXJhdGlvbiA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICgnZnJvbScgaW4gZHVyYXRpb24gfHwgJ3RvJyBpbiBkdXJhdGlvbilcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBkaWZmUmVzID0gbW9tZW50c0RpZmZlcmVuY2UoXG4gICAgICAgICAgICAgICAgY3JlYXRlTG9jYWwoZHVyYXRpb24uZnJvbSksXG4gICAgICAgICAgICAgICAgY3JlYXRlTG9jYWwoZHVyYXRpb24udG8pXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICAgICAgZHVyYXRpb24ubXMgPSBkaWZmUmVzLm1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgIGR1cmF0aW9uLk0gPSBkaWZmUmVzLm1vbnRocztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldCA9IG5ldyBEdXJhdGlvbihkdXJhdGlvbik7XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpICYmIGhhc093blByb3AoaW5wdXQsICdfbG9jYWxlJykpIHtcbiAgICAgICAgICAgIHJldC5fbG9jYWxlID0gaW5wdXQuX2xvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0R1cmF0aW9uKGlucHV0KSAmJiBoYXNPd25Qcm9wKGlucHV0LCAnX2lzVmFsaWQnKSkge1xuICAgICAgICAgICAgcmV0Ll9pc1ZhbGlkID0gaW5wdXQuX2lzVmFsaWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIGNyZWF0ZUR1cmF0aW9uLmZuID0gRHVyYXRpb24ucHJvdG90eXBlO1xuICAgIGNyZWF0ZUR1cmF0aW9uLmludmFsaWQgPSBjcmVhdGVJbnZhbGlkJDE7XG5cbiAgICBmdW5jdGlvbiBwYXJzZUlzbyhpbnAsIHNpZ24pIHtcbiAgICAgICAgLy8gV2UnZCBub3JtYWxseSB1c2Ugfn5pbnAgZm9yIHRoaXMsIGJ1dCB1bmZvcnR1bmF0ZWx5IGl0IGFsc29cbiAgICAgICAgLy8gY29udmVydHMgZmxvYXRzIHRvIGludHMuXG4gICAgICAgIC8vIGlucCBtYXkgYmUgdW5kZWZpbmVkLCBzbyBjYXJlZnVsIGNhbGxpbmcgcmVwbGFjZSBvbiBpdC5cbiAgICAgICAgdmFyIHJlcyA9IGlucCAmJiBwYXJzZUZsb2F0KGlucC5yZXBsYWNlKCcsJywgJy4nKSk7XG4gICAgICAgIC8vIGFwcGx5IHNpZ24gd2hpbGUgd2UncmUgYXQgaXRcbiAgICAgICAgcmV0dXJuIChpc05hTihyZXMpID8gMCA6IHJlcykgKiBzaWduO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpIHtcbiAgICAgICAgdmFyIHJlcyA9IHt9O1xuXG4gICAgICAgIHJlcy5tb250aHMgPVxuICAgICAgICAgICAgb3RoZXIubW9udGgoKSAtIGJhc2UubW9udGgoKSArIChvdGhlci55ZWFyKCkgLSBiYXNlLnllYXIoKSkgKiAxMjtcbiAgICAgICAgaWYgKGJhc2UuY2xvbmUoKS5hZGQocmVzLm1vbnRocywgJ00nKS5pc0FmdGVyKG90aGVyKSkge1xuICAgICAgICAgICAgLS1yZXMubW9udGhzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzLm1pbGxpc2Vjb25kcyA9ICtvdGhlciAtICtiYXNlLmNsb25lKCkuYWRkKHJlcy5tb250aHMsICdNJyk7XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb21lbnRzRGlmZmVyZW5jZShiYXNlLCBvdGhlcikge1xuICAgICAgICB2YXIgcmVzO1xuICAgICAgICBpZiAoIShiYXNlLmlzVmFsaWQoKSAmJiBvdGhlci5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4geyBtaWxsaXNlY29uZHM6IDAsIG1vbnRoczogMCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgb3RoZXIgPSBjbG9uZVdpdGhPZmZzZXQob3RoZXIsIGJhc2UpO1xuICAgICAgICBpZiAoYmFzZS5pc0JlZm9yZShvdGhlcikpIHtcbiAgICAgICAgICAgIHJlcyA9IHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzID0gcG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZShvdGhlciwgYmFzZSk7XG4gICAgICAgICAgICByZXMubWlsbGlzZWNvbmRzID0gLXJlcy5taWxsaXNlY29uZHM7XG4gICAgICAgICAgICByZXMubW9udGhzID0gLXJlcy5tb250aHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8vIFRPRE86IHJlbW92ZSAnbmFtZScgYXJnIGFmdGVyIGRlcHJlY2F0aW9uIGlzIHJlbW92ZWRcbiAgICBmdW5jdGlvbiBjcmVhdGVBZGRlcihkaXJlY3Rpb24sIG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWwsIHBlcmlvZCkge1xuICAgICAgICAgICAgdmFyIGR1ciwgdG1wO1xuICAgICAgICAgICAgLy9pbnZlcnQgdGhlIGFyZ3VtZW50cywgYnV0IGNvbXBsYWluIGFib3V0IGl0XG4gICAgICAgICAgICBpZiAocGVyaW9kICE9PSBudWxsICYmICFpc05hTigrcGVyaW9kKSkge1xuICAgICAgICAgICAgICAgIGRlcHJlY2F0ZVNpbXBsZShcbiAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgJ21vbWVudCgpLicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKHBlcmlvZCwgbnVtYmVyKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIG1vbWVudCgpLicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKG51bWJlciwgcGVyaW9kKS4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvYWRkLWludmVydGVkLXBhcmFtLyBmb3IgbW9yZSBpbmZvLidcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRtcCA9IHZhbDtcbiAgICAgICAgICAgICAgICB2YWwgPSBwZXJpb2Q7XG4gICAgICAgICAgICAgICAgcGVyaW9kID0gdG1wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkdXIgPSBjcmVhdGVEdXJhdGlvbih2YWwsIHBlcmlvZCk7XG4gICAgICAgICAgICBhZGRTdWJ0cmFjdCh0aGlzLCBkdXIsIGRpcmVjdGlvbik7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRTdWJ0cmFjdChtb20sIGR1cmF0aW9uLCBpc0FkZGluZywgdXBkYXRlT2Zmc2V0KSB7XG4gICAgICAgIHZhciBtaWxsaXNlY29uZHMgPSBkdXJhdGlvbi5fbWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgZGF5cyA9IGFic1JvdW5kKGR1cmF0aW9uLl9kYXlzKSxcbiAgICAgICAgICAgIG1vbnRocyA9IGFic1JvdW5kKGR1cmF0aW9uLl9tb250aHMpO1xuXG4gICAgICAgIGlmICghbW9tLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgLy8gTm8gb3BcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHVwZGF0ZU9mZnNldCA9IHVwZGF0ZU9mZnNldCA9PSBudWxsID8gdHJ1ZSA6IHVwZGF0ZU9mZnNldDtcblxuICAgICAgICBpZiAobW9udGhzKSB7XG4gICAgICAgICAgICBzZXRNb250aChtb20sIGdldChtb20sICdNb250aCcpICsgbW9udGhzICogaXNBZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXlzKSB7XG4gICAgICAgICAgICBzZXQkMShtb20sICdEYXRlJywgZ2V0KG1vbSwgJ0RhdGUnKSArIGRheXMgKiBpc0FkZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbGxpc2Vjb25kcykge1xuICAgICAgICAgICAgbW9tLl9kLnNldFRpbWUobW9tLl9kLnZhbHVlT2YoKSArIG1pbGxpc2Vjb25kcyAqIGlzQWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXBkYXRlT2Zmc2V0KSB7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQobW9tLCBkYXlzIHx8IG1vbnRocyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgYWRkID0gY3JlYXRlQWRkZXIoMSwgJ2FkZCcpLFxuICAgICAgICBzdWJ0cmFjdCA9IGNyZWF0ZUFkZGVyKC0xLCAnc3VidHJhY3QnKTtcblxuICAgIGZ1bmN0aW9uIGlzU3RyaW5nKGlucHV0KSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnIHx8IGlucHV0IGluc3RhbmNlb2YgU3RyaW5nO1xuICAgIH1cblxuICAgIC8vIHR5cGUgTW9tZW50SW5wdXQgPSBNb21lbnQgfCBEYXRlIHwgc3RyaW5nIHwgbnVtYmVyIHwgKG51bWJlciB8IHN0cmluZylbXSB8IE1vbWVudElucHV0T2JqZWN0IHwgdm9pZDsgLy8gbnVsbCB8IHVuZGVmaW5lZFxuICAgIGZ1bmN0aW9uIGlzTW9tZW50SW5wdXQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlzTW9tZW50KGlucHV0KSB8fFxuICAgICAgICAgICAgaXNEYXRlKGlucHV0KSB8fFxuICAgICAgICAgICAgaXNTdHJpbmcoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc051bWJlcihpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzTnVtYmVyT3JTdHJpbmdBcnJheShpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzTW9tZW50SW5wdXRPYmplY3QoaW5wdXQpIHx8XG4gICAgICAgICAgICBpbnB1dCA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgaW5wdXQgPT09IHVuZGVmaW5lZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTW9tZW50SW5wdXRPYmplY3QoaW5wdXQpIHtcbiAgICAgICAgdmFyIG9iamVjdFRlc3QgPSBpc09iamVjdChpbnB1dCkgJiYgIWlzT2JqZWN0RW1wdHkoaW5wdXQpLFxuICAgICAgICAgICAgcHJvcGVydHlUZXN0ID0gZmFsc2UsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0gW1xuICAgICAgICAgICAgICAgICd5ZWFycycsXG4gICAgICAgICAgICAgICAgJ3llYXInLFxuICAgICAgICAgICAgICAgICd5JyxcbiAgICAgICAgICAgICAgICAnbW9udGhzJyxcbiAgICAgICAgICAgICAgICAnbW9udGgnLFxuICAgICAgICAgICAgICAgICdNJyxcbiAgICAgICAgICAgICAgICAnZGF5cycsXG4gICAgICAgICAgICAgICAgJ2RheScsXG4gICAgICAgICAgICAgICAgJ2QnLFxuICAgICAgICAgICAgICAgICdkYXRlcycsXG4gICAgICAgICAgICAgICAgJ2RhdGUnLFxuICAgICAgICAgICAgICAgICdEJyxcbiAgICAgICAgICAgICAgICAnaG91cnMnLFxuICAgICAgICAgICAgICAgICdob3VyJyxcbiAgICAgICAgICAgICAgICAnaCcsXG4gICAgICAgICAgICAgICAgJ21pbnV0ZXMnLFxuICAgICAgICAgICAgICAgICdtaW51dGUnLFxuICAgICAgICAgICAgICAgICdtJyxcbiAgICAgICAgICAgICAgICAnc2Vjb25kcycsXG4gICAgICAgICAgICAgICAgJ3NlY29uZCcsXG4gICAgICAgICAgICAgICAgJ3MnLFxuICAgICAgICAgICAgICAgICdtaWxsaXNlY29uZHMnLFxuICAgICAgICAgICAgICAgICdtaWxsaXNlY29uZCcsXG4gICAgICAgICAgICAgICAgJ21zJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcHJvcGVydHk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IHByb3BlcnR5VGVzdCB8fCBoYXNPd25Qcm9wKGlucHV0LCBwcm9wZXJ0eSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2JqZWN0VGVzdCAmJiBwcm9wZXJ0eVRlc3Q7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNOdW1iZXJPclN0cmluZ0FycmF5KGlucHV0KSB7XG4gICAgICAgIHZhciBhcnJheVRlc3QgPSBpc0FycmF5KGlucHV0KSxcbiAgICAgICAgICAgIGRhdGFUeXBlVGVzdCA9IGZhbHNlO1xuICAgICAgICBpZiAoYXJyYXlUZXN0KSB7XG4gICAgICAgICAgICBkYXRhVHlwZVRlc3QgPVxuICAgICAgICAgICAgICAgIGlucHV0LmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIWlzTnVtYmVyKGl0ZW0pICYmIGlzU3RyaW5nKGlucHV0KTtcbiAgICAgICAgICAgICAgICB9KS5sZW5ndGggPT09IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFycmF5VGVzdCAmJiBkYXRhVHlwZVRlc3Q7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNDYWxlbmRhclNwZWMoaW5wdXQpIHtcbiAgICAgICAgdmFyIG9iamVjdFRlc3QgPSBpc09iamVjdChpbnB1dCkgJiYgIWlzT2JqZWN0RW1wdHkoaW5wdXQpLFxuICAgICAgICAgICAgcHJvcGVydHlUZXN0ID0gZmFsc2UsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0gW1xuICAgICAgICAgICAgICAgICdzYW1lRGF5JyxcbiAgICAgICAgICAgICAgICAnbmV4dERheScsXG4gICAgICAgICAgICAgICAgJ2xhc3REYXknLFxuICAgICAgICAgICAgICAgICduZXh0V2VlaycsXG4gICAgICAgICAgICAgICAgJ2xhc3RXZWVrJyxcbiAgICAgICAgICAgICAgICAnc2FtZUVsc2UnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBwcm9wZXJ0eTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2ldO1xuICAgICAgICAgICAgcHJvcGVydHlUZXN0ID0gcHJvcGVydHlUZXN0IHx8IGhhc093blByb3AoaW5wdXQsIHByb3BlcnR5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvYmplY3RUZXN0ICYmIHByb3BlcnR5VGVzdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRDYWxlbmRhckZvcm1hdChteU1vbWVudCwgbm93KSB7XG4gICAgICAgIHZhciBkaWZmID0gbXlNb21lbnQuZGlmZihub3csICdkYXlzJywgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBkaWZmIDwgLTZcbiAgICAgICAgICAgID8gJ3NhbWVFbHNlJ1xuICAgICAgICAgICAgOiBkaWZmIDwgLTFcbiAgICAgICAgICAgID8gJ2xhc3RXZWVrJ1xuICAgICAgICAgICAgOiBkaWZmIDwgMFxuICAgICAgICAgICAgPyAnbGFzdERheSdcbiAgICAgICAgICAgIDogZGlmZiA8IDFcbiAgICAgICAgICAgID8gJ3NhbWVEYXknXG4gICAgICAgICAgICA6IGRpZmYgPCAyXG4gICAgICAgICAgICA/ICduZXh0RGF5J1xuICAgICAgICAgICAgOiBkaWZmIDwgN1xuICAgICAgICAgICAgPyAnbmV4dFdlZWsnXG4gICAgICAgICAgICA6ICdzYW1lRWxzZSc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FsZW5kYXIkMSh0aW1lLCBmb3JtYXRzKSB7XG4gICAgICAgIC8vIFN1cHBvcnQgZm9yIHNpbmdsZSBwYXJhbWV0ZXIsIGZvcm1hdHMgb25seSBvdmVybG9hZCB0byB0aGUgY2FsZW5kYXIgZnVuY3Rpb25cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGlmICghYXJndW1lbnRzWzBdKSB7XG4gICAgICAgICAgICAgICAgdGltZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBmb3JtYXRzID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc01vbWVudElucHV0KGFyZ3VtZW50c1swXSkpIHtcbiAgICAgICAgICAgICAgICB0aW1lID0gYXJndW1lbnRzWzBdO1xuICAgICAgICAgICAgICAgIGZvcm1hdHMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzQ2FsZW5kYXJTcGVjKGFyZ3VtZW50c1swXSkpIHtcbiAgICAgICAgICAgICAgICBmb3JtYXRzID0gYXJndW1lbnRzWzBdO1xuICAgICAgICAgICAgICAgIHRpbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gV2Ugd2FudCB0byBjb21wYXJlIHRoZSBzdGFydCBvZiB0b2RheSwgdnMgdGhpcy5cbiAgICAgICAgLy8gR2V0dGluZyBzdGFydC1vZi10b2RheSBkZXBlbmRzIG9uIHdoZXRoZXIgd2UncmUgbG9jYWwvdXRjL29mZnNldCBvciBub3QuXG4gICAgICAgIHZhciBub3cgPSB0aW1lIHx8IGNyZWF0ZUxvY2FsKCksXG4gICAgICAgICAgICBzb2QgPSBjbG9uZVdpdGhPZmZzZXQobm93LCB0aGlzKS5zdGFydE9mKCdkYXknKSxcbiAgICAgICAgICAgIGZvcm1hdCA9IGhvb2tzLmNhbGVuZGFyRm9ybWF0KHRoaXMsIHNvZCkgfHwgJ3NhbWVFbHNlJyxcbiAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgZm9ybWF0cyAmJlxuICAgICAgICAgICAgICAgIChpc0Z1bmN0aW9uKGZvcm1hdHNbZm9ybWF0XSlcbiAgICAgICAgICAgICAgICAgICAgPyBmb3JtYXRzW2Zvcm1hdF0uY2FsbCh0aGlzLCBub3cpXG4gICAgICAgICAgICAgICAgICAgIDogZm9ybWF0c1tmb3JtYXRdKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXQoXG4gICAgICAgICAgICBvdXRwdXQgfHwgdGhpcy5sb2NhbGVEYXRhKCkuY2FsZW5kYXIoZm9ybWF0LCB0aGlzLCBjcmVhdGVMb2NhbChub3cpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsb25lKCkge1xuICAgICAgICByZXR1cm4gbmV3IE1vbWVudCh0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FmdGVyKGlucHV0LCB1bml0cykge1xuICAgICAgICB2YXIgbG9jYWxJbnB1dCA9IGlzTW9tZW50KGlucHV0KSA/IGlucHV0IDogY3JlYXRlTG9jYWwoaW5wdXQpO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbElucHV0LmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB8fCAnbWlsbGlzZWNvbmQnO1xuICAgICAgICBpZiAodW5pdHMgPT09ICdtaWxsaXNlY29uZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSA+IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsSW5wdXQudmFsdWVPZigpIDwgdGhpcy5jbG9uZSgpLnN0YXJ0T2YodW5pdHMpLnZhbHVlT2YoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQmVmb3JlKGlucHV0LCB1bml0cykge1xuICAgICAgICB2YXIgbG9jYWxJbnB1dCA9IGlzTW9tZW50KGlucHV0KSA/IGlucHV0IDogY3JlYXRlTG9jYWwoaW5wdXQpO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbElucHV0LmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB8fCAnbWlsbGlzZWNvbmQnO1xuICAgICAgICBpZiAodW5pdHMgPT09ICdtaWxsaXNlY29uZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSA8IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5lbmRPZih1bml0cykudmFsdWVPZigpIDwgbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0JldHdlZW4oZnJvbSwgdG8sIHVuaXRzLCBpbmNsdXNpdml0eSkge1xuICAgICAgICB2YXIgbG9jYWxGcm9tID0gaXNNb21lbnQoZnJvbSkgPyBmcm9tIDogY3JlYXRlTG9jYWwoZnJvbSksXG4gICAgICAgICAgICBsb2NhbFRvID0gaXNNb21lbnQodG8pID8gdG8gOiBjcmVhdGVMb2NhbCh0byk7XG4gICAgICAgIGlmICghKHRoaXMuaXNWYWxpZCgpICYmIGxvY2FsRnJvbS5pc1ZhbGlkKCkgJiYgbG9jYWxUby5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaW5jbHVzaXZpdHkgPSBpbmNsdXNpdml0eSB8fCAnKCknO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGluY2x1c2l2aXR5WzBdID09PSAnKCdcbiAgICAgICAgICAgICAgICA/IHRoaXMuaXNBZnRlcihsb2NhbEZyb20sIHVuaXRzKVxuICAgICAgICAgICAgICAgIDogIXRoaXMuaXNCZWZvcmUobG9jYWxGcm9tLCB1bml0cykpICYmXG4gICAgICAgICAgICAoaW5jbHVzaXZpdHlbMV0gPT09ICcpJ1xuICAgICAgICAgICAgICAgID8gdGhpcy5pc0JlZm9yZShsb2NhbFRvLCB1bml0cylcbiAgICAgICAgICAgICAgICA6ICF0aGlzLmlzQWZ0ZXIobG9jYWxUbywgdW5pdHMpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzU2FtZShpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KSxcbiAgICAgICAgICAgIGlucHV0TXM7XG4gICAgICAgIGlmICghKHRoaXMuaXNWYWxpZCgpICYmIGxvY2FsSW5wdXQuaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpIHx8ICdtaWxsaXNlY29uZCc7XG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21pbGxpc2Vjb25kJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpID09PSBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlucHV0TXMgPSBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9uZSgpLnN0YXJ0T2YodW5pdHMpLnZhbHVlT2YoKSA8PSBpbnB1dE1zICYmXG4gICAgICAgICAgICAgICAgaW5wdXRNcyA8PSB0aGlzLmNsb25lKCkuZW5kT2YodW5pdHMpLnZhbHVlT2YoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzU2FtZU9yQWZ0ZXIoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU2FtZShpbnB1dCwgdW5pdHMpIHx8IHRoaXMuaXNBZnRlcihpbnB1dCwgdW5pdHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzU2FtZU9yQmVmb3JlKGlucHV0LCB1bml0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1NhbWUoaW5wdXQsIHVuaXRzKSB8fCB0aGlzLmlzQmVmb3JlKGlucHV0LCB1bml0cyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGlmZihpbnB1dCwgdW5pdHMsIGFzRmxvYXQpIHtcbiAgICAgICAgdmFyIHRoYXQsIHpvbmVEZWx0YSwgb3V0cHV0O1xuXG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICB0aGF0ID0gY2xvbmVXaXRoT2Zmc2V0KGlucHV0LCB0aGlzKTtcblxuICAgICAgICBpZiAoIXRoYXQuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgem9uZURlbHRhID0gKHRoYXQudXRjT2Zmc2V0KCkgLSB0aGlzLnV0Y09mZnNldCgpKSAqIDZlNDtcblxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBtb250aERpZmYodGhpcywgdGhhdCkgLyAxMjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBtb250aERpZmYodGhpcywgdGhhdCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBtb250aERpZmYodGhpcywgdGhhdCkgLyAzO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQpIC8gMWUzO1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwXG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCkgLyA2ZTQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MFxuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0KSAvIDM2ZTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwXG4gICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCAtIHpvbmVEZWx0YSkgLyA4NjRlNTtcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMCAqIDYwICogNjAgKiAyNCwgbmVnYXRlIGRzdFxuICAgICAgICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0IC0gem9uZURlbHRhKSAvIDYwNDhlNTtcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMCAqIDYwICogNjAgKiAyNCAqIDcsIG5lZ2F0ZSBkc3RcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gdGhpcyAtIHRoYXQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXNGbG9hdCA/IG91dHB1dCA6IGFic0Zsb29yKG91dHB1dCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9udGhEaWZmKGEsIGIpIHtcbiAgICAgICAgaWYgKGEuZGF0ZSgpIDwgYi5kYXRlKCkpIHtcbiAgICAgICAgICAgIC8vIGVuZC1vZi1tb250aCBjYWxjdWxhdGlvbnMgd29yayBjb3JyZWN0IHdoZW4gdGhlIHN0YXJ0IG1vbnRoIGhhcyBtb3JlXG4gICAgICAgICAgICAvLyBkYXlzIHRoYW4gdGhlIGVuZCBtb250aC5cbiAgICAgICAgICAgIHJldHVybiAtbW9udGhEaWZmKGIsIGEpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGRpZmZlcmVuY2UgaW4gbW9udGhzXG4gICAgICAgIHZhciB3aG9sZU1vbnRoRGlmZiA9IChiLnllYXIoKSAtIGEueWVhcigpKSAqIDEyICsgKGIubW9udGgoKSAtIGEubW9udGgoKSksXG4gICAgICAgICAgICAvLyBiIGlzIGluIChhbmNob3IgLSAxIG1vbnRoLCBhbmNob3IgKyAxIG1vbnRoKVxuICAgICAgICAgICAgYW5jaG9yID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiwgJ21vbnRocycpLFxuICAgICAgICAgICAgYW5jaG9yMixcbiAgICAgICAgICAgIGFkanVzdDtcblxuICAgICAgICBpZiAoYiAtIGFuY2hvciA8IDApIHtcbiAgICAgICAgICAgIGFuY2hvcjIgPSBhLmNsb25lKCkuYWRkKHdob2xlTW9udGhEaWZmIC0gMSwgJ21vbnRocycpO1xuICAgICAgICAgICAgLy8gbGluZWFyIGFjcm9zcyB0aGUgbW9udGhcbiAgICAgICAgICAgIGFkanVzdCA9IChiIC0gYW5jaG9yKSAvIChhbmNob3IgLSBhbmNob3IyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFuY2hvcjIgPSBhLmNsb25lKCkuYWRkKHdob2xlTW9udGhEaWZmICsgMSwgJ21vbnRocycpO1xuICAgICAgICAgICAgLy8gbGluZWFyIGFjcm9zcyB0aGUgbW9udGhcbiAgICAgICAgICAgIGFkanVzdCA9IChiIC0gYW5jaG9yKSAvIChhbmNob3IyIC0gYW5jaG9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vY2hlY2sgZm9yIG5lZ2F0aXZlIHplcm8sIHJldHVybiB6ZXJvIGlmIG5lZ2F0aXZlIHplcm9cbiAgICAgICAgcmV0dXJuIC0od2hvbGVNb250aERpZmYgKyBhZGp1c3QpIHx8IDA7XG4gICAgfVxuXG4gICAgaG9va3MuZGVmYXVsdEZvcm1hdCA9ICdZWVlZLU1NLUREVEhIOm1tOnNzWic7XG4gICAgaG9va3MuZGVmYXVsdEZvcm1hdFV0YyA9ICdZWVlZLU1NLUREVEhIOm1tOnNzW1pdJztcblxuICAgIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmxvY2FsZSgnZW4nKS5mb3JtYXQoJ2RkZCBNTU0gREQgWVlZWSBISDptbTpzcyBbR01UXVpaJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9JU09TdHJpbmcoa2VlcE9mZnNldCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdXRjID0ga2VlcE9mZnNldCAhPT0gdHJ1ZSxcbiAgICAgICAgICAgIG0gPSB1dGMgPyB0aGlzLmNsb25lKCkudXRjKCkgOiB0aGlzO1xuICAgICAgICBpZiAobS55ZWFyKCkgPCAwIHx8IG0ueWVhcigpID4gOTk5OSkge1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdE1vbWVudChcbiAgICAgICAgICAgICAgICBtLFxuICAgICAgICAgICAgICAgIHV0Y1xuICAgICAgICAgICAgICAgICAgICA/ICdZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NbWl0nXG4gICAgICAgICAgICAgICAgICAgIDogJ1lZWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1onXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nKSkge1xuICAgICAgICAgICAgLy8gbmF0aXZlIGltcGxlbWVudGF0aW9uIGlzIH41MHggZmFzdGVyLCB1c2UgaXQgd2hlbiB3ZSBjYW5cbiAgICAgICAgICAgIGlmICh1dGMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b0RhdGUoKS50b0lTT1N0cmluZygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkgKyB0aGlzLnV0Y09mZnNldCgpICogNjAgKiAxMDAwKVxuICAgICAgICAgICAgICAgICAgICAudG9JU09TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnWicsIGZvcm1hdE1vbWVudChtLCAnWicpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9ybWF0TW9tZW50KFxuICAgICAgICAgICAgbSxcbiAgICAgICAgICAgIHV0YyA/ICdZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdJyA6ICdZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTWidcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSBodW1hbiByZWFkYWJsZSByZXByZXNlbnRhdGlvbiBvZiBhIG1vbWVudCB0aGF0IGNhblxuICAgICAqIGFsc28gYmUgZXZhbHVhdGVkIHRvIGdldCBhIG5ldyBtb21lbnQgd2hpY2ggaXMgdGhlIHNhbWVcbiAgICAgKlxuICAgICAqIEBsaW5rIGh0dHBzOi8vbm9kZWpzLm9yZy9kaXN0L2xhdGVzdC9kb2NzL2FwaS91dGlsLmh0bWwjdXRpbF9jdXN0b21faW5zcGVjdF9mdW5jdGlvbl9vbl9vYmplY3RzXG4gICAgICovXG4gICAgZnVuY3Rpb24gaW5zcGVjdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuICdtb21lbnQuaW52YWxpZCgvKiAnICsgdGhpcy5faSArICcgKi8pJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgZnVuYyA9ICdtb21lbnQnLFxuICAgICAgICAgICAgem9uZSA9ICcnLFxuICAgICAgICAgICAgcHJlZml4LFxuICAgICAgICAgICAgeWVhcixcbiAgICAgICAgICAgIGRhdGV0aW1lLFxuICAgICAgICAgICAgc3VmZml4O1xuICAgICAgICBpZiAoIXRoaXMuaXNMb2NhbCgpKSB7XG4gICAgICAgICAgICBmdW5jID0gdGhpcy51dGNPZmZzZXQoKSA9PT0gMCA/ICdtb21lbnQudXRjJyA6ICdtb21lbnQucGFyc2Vab25lJztcbiAgICAgICAgICAgIHpvbmUgPSAnWic7XG4gICAgICAgIH1cbiAgICAgICAgcHJlZml4ID0gJ1snICsgZnVuYyArICcoXCJdJztcbiAgICAgICAgeWVhciA9IDAgPD0gdGhpcy55ZWFyKCkgJiYgdGhpcy55ZWFyKCkgPD0gOTk5OSA/ICdZWVlZJyA6ICdZWVlZWVknO1xuICAgICAgICBkYXRldGltZSA9ICctTU0tRERbVF1ISDptbTpzcy5TU1MnO1xuICAgICAgICBzdWZmaXggPSB6b25lICsgJ1tcIildJztcblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXQocHJlZml4ICsgeWVhciArIGRhdGV0aW1lICsgc3VmZml4KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmb3JtYXQoaW5wdXRTdHJpbmcpIHtcbiAgICAgICAgaWYgKCFpbnB1dFN0cmluZykge1xuICAgICAgICAgICAgaW5wdXRTdHJpbmcgPSB0aGlzLmlzVXRjKClcbiAgICAgICAgICAgICAgICA/IGhvb2tzLmRlZmF1bHRGb3JtYXRVdGNcbiAgICAgICAgICAgICAgICA6IGhvb2tzLmRlZmF1bHRGb3JtYXQ7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG91dHB1dCA9IGZvcm1hdE1vbWVudCh0aGlzLCBpbnB1dFN0cmluZyk7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5wb3N0Zm9ybWF0KG91dHB1dCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZnJvbSh0aW1lLCB3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZCgpICYmXG4gICAgICAgICAgICAoKGlzTW9tZW50KHRpbWUpICYmIHRpbWUuaXNWYWxpZCgpKSB8fCBjcmVhdGVMb2NhbCh0aW1lKS5pc1ZhbGlkKCkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uKHsgdG86IHRoaXMsIGZyb206IHRpbWUgfSlcbiAgICAgICAgICAgICAgICAubG9jYWxlKHRoaXMubG9jYWxlKCkpXG4gICAgICAgICAgICAgICAgLmh1bWFuaXplKCF3aXRob3V0U3VmZml4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZnJvbU5vdyh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZyb20oY3JlYXRlTG9jYWwoKSwgd2l0aG91dFN1ZmZpeCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG8odGltZSwgd2l0aG91dFN1ZmZpeCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWQoKSAmJlxuICAgICAgICAgICAgKChpc01vbWVudCh0aW1lKSAmJiB0aW1lLmlzVmFsaWQoKSkgfHwgY3JlYXRlTG9jYWwodGltZSkuaXNWYWxpZCgpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih7IGZyb206IHRoaXMsIHRvOiB0aW1lIH0pXG4gICAgICAgICAgICAgICAgLmxvY2FsZSh0aGlzLmxvY2FsZSgpKVxuICAgICAgICAgICAgICAgIC5odW1hbml6ZSghd2l0aG91dFN1ZmZpeCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvTm93KHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG8oY3JlYXRlTG9jYWwoKSwgd2l0aG91dFN1ZmZpeCk7XG4gICAgfVxuXG4gICAgLy8gSWYgcGFzc2VkIGEgbG9jYWxlIGtleSwgaXQgd2lsbCBzZXQgdGhlIGxvY2FsZSBmb3IgdGhpc1xuICAgIC8vIGluc3RhbmNlLiAgT3RoZXJ3aXNlLCBpdCB3aWxsIHJldHVybiB0aGUgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbiAgICAvLyB2YXJpYWJsZXMgZm9yIHRoaXMgaW5zdGFuY2UuXG4gICAgZnVuY3Rpb24gbG9jYWxlKGtleSkge1xuICAgICAgICB2YXIgbmV3TG9jYWxlRGF0YTtcblxuICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGUuX2FiYnI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdMb2NhbGVEYXRhID0gZ2V0TG9jYWxlKGtleSk7XG4gICAgICAgICAgICBpZiAobmV3TG9jYWxlRGF0YSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9jYWxlID0gbmV3TG9jYWxlRGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGxhbmcgPSBkZXByZWNhdGUoXG4gICAgICAgICdtb21lbnQoKS5sYW5nKCkgaXMgZGVwcmVjYXRlZC4gSW5zdGVhZCwgdXNlIG1vbWVudCgpLmxvY2FsZURhdGEoKSB0byBnZXQgdGhlIGxhbmd1YWdlIGNvbmZpZ3VyYXRpb24uIFVzZSBtb21lbnQoKS5sb2NhbGUoKSB0byBjaGFuZ2UgbGFuZ3VhZ2VzLicsXG4gICAgICAgIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsZTtcbiAgICB9XG5cbiAgICB2YXIgTVNfUEVSX1NFQ09ORCA9IDEwMDAsXG4gICAgICAgIE1TX1BFUl9NSU5VVEUgPSA2MCAqIE1TX1BFUl9TRUNPTkQsXG4gICAgICAgIE1TX1BFUl9IT1VSID0gNjAgKiBNU19QRVJfTUlOVVRFLFxuICAgICAgICBNU19QRVJfNDAwX1lFQVJTID0gKDM2NSAqIDQwMCArIDk3KSAqIDI0ICogTVNfUEVSX0hPVVI7XG5cbiAgICAvLyBhY3R1YWwgbW9kdWxvIC0gaGFuZGxlcyBuZWdhdGl2ZSBudW1iZXJzIChmb3IgZGF0ZXMgYmVmb3JlIDE5NzApOlxuICAgIGZ1bmN0aW9uIG1vZCQxKGRpdmlkZW5kLCBkaXZpc29yKSB7XG4gICAgICAgIHJldHVybiAoKGRpdmlkZW5kICUgZGl2aXNvcikgKyBkaXZpc29yKSAlIGRpdmlzb3I7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxTdGFydE9mRGF0ZSh5LCBtLCBkKSB7XG4gICAgICAgIC8vIHRoZSBkYXRlIGNvbnN0cnVjdG9yIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoeSArIDQwMCwgbSwgZCkgLSBNU19QRVJfNDAwX1lFQVJTO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHksIG0sIGQpLnZhbHVlT2YoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHV0Y1N0YXJ0T2ZEYXRlKHksIG0sIGQpIHtcbiAgICAgICAgLy8gRGF0ZS5VVEMgcmVtYXBzIHllYXJzIDAtOTkgdG8gMTkwMC0xOTk5XG4gICAgICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCkge1xuICAgICAgICAgICAgLy8gcHJlc2VydmUgbGVhcCB5ZWFycyB1c2luZyBhIGZ1bGwgNDAwIHllYXIgY3ljbGUsIHRoZW4gcmVzZXRcbiAgICAgICAgICAgIHJldHVybiBEYXRlLlVUQyh5ICsgNDAwLCBtLCBkKSAtIE1TX1BFUl80MDBfWUVBUlM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gRGF0ZS5VVEMoeSwgbSwgZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdGFydE9mKHVuaXRzKSB7XG4gICAgICAgIHZhciB0aW1lLCBzdGFydE9mRGF0ZTtcbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgIGlmICh1bml0cyA9PT0gdW5kZWZpbmVkIHx8IHVuaXRzID09PSAnbWlsbGlzZWNvbmQnIHx8ICF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBzdGFydE9mRGF0ZSA9IHRoaXMuX2lzVVRDID8gdXRjU3RhcnRPZkRhdGUgOiBsb2NhbFN0YXJ0T2ZEYXRlO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgMCwgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCkgLSAodGhpcy5tb250aCgpICUgMyksXG4gICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpLCAxKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlKCkgLSB0aGlzLndlZWtkYXkoKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdpc29XZWVrJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSgpIC0gKHRoaXMuaXNvV2Vla2RheSgpIC0gMSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpLCB0aGlzLmRhdGUoKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSAtPSBtb2QkMShcbiAgICAgICAgICAgICAgICAgICAgdGltZSArICh0aGlzLl9pc1VUQyA/IDAgOiB0aGlzLnV0Y09mZnNldCgpICogTVNfUEVSX01JTlVURSksXG4gICAgICAgICAgICAgICAgICAgIE1TX1BFUl9IT1VSXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgLT0gbW9kJDEodGltZSwgTVNfUEVSX01JTlVURSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lIC09IG1vZCQxKHRpbWUsIE1TX1BFUl9TRUNPTkQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZC5zZXRUaW1lKHRpbWUpO1xuICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVuZE9mKHVuaXRzKSB7XG4gICAgICAgIHZhciB0aW1lLCBzdGFydE9mRGF0ZTtcbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgIGlmICh1bml0cyA9PT0gdW5kZWZpbmVkIHx8IHVuaXRzID09PSAnbWlsbGlzZWNvbmQnIHx8ICF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBzdGFydE9mRGF0ZSA9IHRoaXMuX2lzVVRDID8gdXRjU3RhcnRPZkRhdGUgOiBsb2NhbFN0YXJ0T2ZEYXRlO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSArIDEsIDAsIDEpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPVxuICAgICAgICAgICAgICAgICAgICBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpIC0gKHRoaXMubW9udGgoKSAlIDMpICsgMyxcbiAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCkgKyAxLCAxKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICB0aW1lID1cbiAgICAgICAgICAgICAgICAgICAgc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSgpIC0gdGhpcy53ZWVrZGF5KCkgKyA3XG4gICAgICAgICAgICAgICAgICAgICkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaXNvV2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtICh0aGlzLmlzb1dlZWtkYXkoKSAtIDEpICsgN1xuICAgICAgICAgICAgICAgICAgICApIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgdGhpcy5kYXRlKCkgKyAxKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSArPVxuICAgICAgICAgICAgICAgICAgICBNU19QRVJfSE9VUiAtXG4gICAgICAgICAgICAgICAgICAgIG1vZCQxKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZSArICh0aGlzLl9pc1VUQyA/IDAgOiB0aGlzLnV0Y09mZnNldCgpICogTVNfUEVSX01JTlVURSksXG4gICAgICAgICAgICAgICAgICAgICAgICBNU19QRVJfSE9VUlxuICAgICAgICAgICAgICAgICAgICApIC1cbiAgICAgICAgICAgICAgICAgICAgMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgKz0gTVNfUEVSX01JTlVURSAtIG1vZCQxKHRpbWUsIE1TX1BFUl9NSU5VVEUpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgKz0gTVNfUEVSX1NFQ09ORCAtIG1vZCQxKHRpbWUsIE1TX1BFUl9TRUNPTkQpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2Quc2V0VGltZSh0aW1lKTtcbiAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWx1ZU9mKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZC52YWx1ZU9mKCkgLSAodGhpcy5fb2Zmc2V0IHx8IDApICogNjAwMDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdW5peCgpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IodGhpcy52YWx1ZU9mKCkgLyAxMDAwKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0RhdGUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9BcnJheSgpIHtcbiAgICAgICAgdmFyIG0gPSB0aGlzO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbS55ZWFyKCksXG4gICAgICAgICAgICBtLm1vbnRoKCksXG4gICAgICAgICAgICBtLmRhdGUoKSxcbiAgICAgICAgICAgIG0uaG91cigpLFxuICAgICAgICAgICAgbS5taW51dGUoKSxcbiAgICAgICAgICAgIG0uc2Vjb25kKCksXG4gICAgICAgICAgICBtLm1pbGxpc2Vjb25kKCksXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9PYmplY3QoKSB7XG4gICAgICAgIHZhciBtID0gdGhpcztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHllYXJzOiBtLnllYXIoKSxcbiAgICAgICAgICAgIG1vbnRoczogbS5tb250aCgpLFxuICAgICAgICAgICAgZGF0ZTogbS5kYXRlKCksXG4gICAgICAgICAgICBob3VyczogbS5ob3VycygpLFxuICAgICAgICAgICAgbWludXRlczogbS5taW51dGVzKCksXG4gICAgICAgICAgICBzZWNvbmRzOiBtLnNlY29uZHMoKSxcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kczogbS5taWxsaXNlY29uZHMoKSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICAgIC8vIG5ldyBEYXRlKE5hTikudG9KU09OKCkgPT09IG51bGxcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy50b0lTT1N0cmluZygpIDogbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1ZhbGlkJDIoKSB7XG4gICAgICAgIHJldHVybiBpc1ZhbGlkKHRoaXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNpbmdGbGFncygpIHtcbiAgICAgICAgcmV0dXJuIGV4dGVuZCh7fSwgZ2V0UGFyc2luZ0ZsYWdzKHRoaXMpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnZhbGlkQXQoKSB7XG4gICAgICAgIHJldHVybiBnZXRQYXJzaW5nRmxhZ3ModGhpcykub3ZlcmZsb3c7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRpb25EYXRhKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5wdXQ6IHRoaXMuX2ksXG4gICAgICAgICAgICBmb3JtYXQ6IHRoaXMuX2YsXG4gICAgICAgICAgICBsb2NhbGU6IHRoaXMuX2xvY2FsZSxcbiAgICAgICAgICAgIGlzVVRDOiB0aGlzLl9pc1VUQyxcbiAgICAgICAgICAgIHN0cmljdDogdGhpcy5fc3RyaWN0LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGFkZEZvcm1hdFRva2VuKCdOJywgMCwgMCwgJ2VyYUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk4nLCAwLCAwLCAnZXJhQWJicicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdOTk4nLCAwLCAwLCAnZXJhQWJicicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdOTk5OJywgMCwgMCwgJ2VyYU5hbWUnKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk5OTk4nLCAwLCAwLCAnZXJhTmFycm93Jyk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneScsIDFdLCAneW8nLCAnZXJhWWVhcicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd5JywgWyd5eScsIDJdLCAwLCAnZXJhWWVhcicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd5JywgWyd5eXknLCAzXSwgMCwgJ2VyYVllYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneXl5eScsIDRdLCAwLCAnZXJhWWVhcicpO1xuXG4gICAgYWRkUmVnZXhUb2tlbignTicsIG1hdGNoRXJhQWJicik7XG4gICAgYWRkUmVnZXhUb2tlbignTk4nLCBtYXRjaEVyYUFiYnIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OTicsIG1hdGNoRXJhQWJicik7XG4gICAgYWRkUmVnZXhUb2tlbignTk5OTicsIG1hdGNoRXJhTmFtZSk7XG4gICAgYWRkUmVnZXhUb2tlbignTk5OTk4nLCBtYXRjaEVyYU5hcnJvdyk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnTicsICdOTicsICdOTk4nLCAnTk5OTicsICdOTk5OTiddLCBmdW5jdGlvbiAoXG4gICAgICAgIGlucHV0LFxuICAgICAgICBhcnJheSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICB0b2tlblxuICAgICkge1xuICAgICAgICB2YXIgZXJhID0gY29uZmlnLl9sb2NhbGUuZXJhc1BhcnNlKGlucHV0LCB0b2tlbiwgY29uZmlnLl9zdHJpY3QpO1xuICAgICAgICBpZiAoZXJhKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5lcmEgPSBlcmE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkRXJhID0gaW5wdXQ7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3knLCBtYXRjaFVuc2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCd5eScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3l5eScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3l5eXknLCBtYXRjaFVuc2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCd5bycsIG1hdGNoRXJhWWVhck9yZGluYWwpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ3knLCAneXknLCAneXl5JywgJ3l5eXknXSwgWUVBUik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ3lvJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgdmFyIG1hdGNoO1xuICAgICAgICBpZiAoY29uZmlnLl9sb2NhbGUuX2VyYVllYXJPcmRpbmFsUmVnZXgpIHtcbiAgICAgICAgICAgIG1hdGNoID0gaW5wdXQubWF0Y2goY29uZmlnLl9sb2NhbGUuX2VyYVllYXJPcmRpbmFsUmVnZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fbG9jYWxlLmVyYVllYXJPcmRpbmFsUGFyc2UpIHtcbiAgICAgICAgICAgIGFycmF5W1lFQVJdID0gY29uZmlnLl9sb2NhbGUuZXJhWWVhck9yZGluYWxQYXJzZShpbnB1dCwgbWF0Y2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXJyYXlbWUVBUl0gPSBwYXJzZUludChpbnB1dCwgMTApO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVFcmFzKG0sIGZvcm1hdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMuX2VyYXMgfHwgZ2V0TG9jYWxlKCdlbicpLl9lcmFzO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZW9mIGVyYXNbaV0uc2luY2UpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICAgICAgICAgIGRhdGUgPSBob29rcyhlcmFzW2ldLnNpbmNlKS5zdGFydE9mKCdkYXknKTtcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS5zaW5jZSA9IGRhdGUudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgICAgICAgICAgICAgIGVyYXNbaV0udW50aWwgPSArSW5maW5pdHk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgICAgICAgICAgZGF0ZSA9IGhvb2tzKGVyYXNbaV0udW50aWwpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS51bnRpbCA9IGRhdGUudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXJhcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVFcmFzUGFyc2UoZXJhTmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMuZXJhcygpLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGFiYnIsXG4gICAgICAgICAgICBuYXJyb3c7XG4gICAgICAgIGVyYU5hbWUgPSBlcmFOYW1lLnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICBuYW1lID0gZXJhc1tpXS5uYW1lLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICBhYmJyID0gZXJhc1tpXS5hYmJyLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICBuYXJyb3cgPSBlcmFzW2ldLm5hcnJvdy50b1VwcGVyQ2FzZSgpO1xuXG4gICAgICAgICAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTic6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTk5OJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhYmJyID09PSBlcmFOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICBjYXNlICdOTk5OJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSBlcmFOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICBjYXNlICdOTk5OTic6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFycm93ID09PSBlcmFOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFtuYW1lLCBhYmJyLCBuYXJyb3ddLmluZGV4T2YoZXJhTmFtZSkgPj0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlRXJhc0NvbnZlcnRZZWFyKGVyYSwgeWVhcikge1xuICAgICAgICB2YXIgZGlyID0gZXJhLnNpbmNlIDw9IGVyYS51bnRpbCA/ICsxIDogLTE7XG4gICAgICAgIGlmICh5ZWFyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBob29rcyhlcmEuc2luY2UpLnllYXIoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBob29rcyhlcmEuc2luY2UpLnllYXIoKSArICh5ZWFyIC0gZXJhLm9mZnNldCkgKiBkaXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRFcmFOYW1lKCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5uYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYU5hcnJvdygpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICB2YWwgPSB0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuXG4gICAgICAgICAgICBpZiAoZXJhc1tpXS5zaW5jZSA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0udW50aWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5uYXJyb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5uYXJyb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RXJhQWJicigpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICB2YWwgPSB0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuXG4gICAgICAgICAgICBpZiAoZXJhc1tpXS5zaW5jZSA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0udW50aWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5hYmJyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVyYXNbaV0udW50aWwgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnNpbmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0uYWJicjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRFcmFZZWFyKCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBkaXIsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIGRpciA9IGVyYXNbaV0uc2luY2UgPD0gZXJhc1tpXS51bnRpbCA/ICsxIDogLTE7XG5cbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAoZXJhc1tpXS5zaW5jZSA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0udW50aWwpIHx8XG4gICAgICAgICAgICAgICAgKGVyYXNbaV0udW50aWwgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnNpbmNlKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMueWVhcigpIC0gaG9va3MoZXJhc1tpXS5zaW5jZSkueWVhcigpKSAqIGRpciArXG4gICAgICAgICAgICAgICAgICAgIGVyYXNbaV0ub2Zmc2V0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnllYXIoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlcmFzTmFtZVJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX2VyYXNOYW1lUmVnZXgnKSkge1xuICAgICAgICAgICAgY29tcHV0ZUVyYXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1N0cmljdCA/IHRoaXMuX2VyYXNOYW1lUmVnZXggOiB0aGlzLl9lcmFzUmVnZXg7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXJhc0FiYnJSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19lcmFzQWJiclJlZ2V4JykpIHtcbiAgICAgICAgICAgIGNvbXB1dGVFcmFzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNTdHJpY3QgPyB0aGlzLl9lcmFzQWJiclJlZ2V4IDogdGhpcy5fZXJhc1JlZ2V4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVyYXNOYXJyb3dSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19lcmFzTmFycm93UmVnZXgnKSkge1xuICAgICAgICAgICAgY29tcHV0ZUVyYXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1N0cmljdCA/IHRoaXMuX2VyYXNOYXJyb3dSZWdleCA6IHRoaXMuX2VyYXNSZWdleDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYUFiYnIoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLmVyYXNBYmJyUmVnZXgoaXNTdHJpY3QpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hdGNoRXJhTmFtZShpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZXJhc05hbWVSZWdleChpc1N0cmljdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF0Y2hFcmFOYXJyb3coaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLmVyYXNOYXJyb3dSZWdleChpc1N0cmljdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF0Y2hFcmFZZWFyT3JkaW5hbChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuX2VyYVllYXJPcmRpbmFsUmVnZXggfHwgbWF0Y2hVbnNpZ25lZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlRXJhc1BhcnNlKCkge1xuICAgICAgICB2YXIgYWJiclBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbmFtZVBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbmFycm93UGllY2VzID0gW10sXG4gICAgICAgICAgICBtaXhlZFBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5lcmFzKCk7XG5cbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICBuYW1lUGllY2VzLnB1c2gocmVnZXhFc2NhcGUoZXJhc1tpXS5uYW1lKSk7XG4gICAgICAgICAgICBhYmJyUGllY2VzLnB1c2gocmVnZXhFc2NhcGUoZXJhc1tpXS5hYmJyKSk7XG4gICAgICAgICAgICBuYXJyb3dQaWVjZXMucHVzaChyZWdleEVzY2FwZShlcmFzW2ldLm5hcnJvdykpO1xuXG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKHJlZ2V4RXNjYXBlKGVyYXNbaV0ubmFtZSkpO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChyZWdleEVzY2FwZShlcmFzW2ldLmFiYnIpKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2gocmVnZXhFc2NhcGUoZXJhc1tpXS5uYXJyb3cpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2VyYXNSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIG1peGVkUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fZXJhc05hbWVSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIG5hbWVQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9lcmFzQWJiclJlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgYWJiclBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX2VyYXNOYXJyb3dSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgbmFycm93UGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnZ2cnLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy53ZWVrWWVhcigpICUgMTAwO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydHRycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzb1dlZWtZZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBhZGRXZWVrWWVhckZvcm1hdFRva2VuKHRva2VuLCBnZXR0ZXIpIHtcbiAgICAgICAgYWRkRm9ybWF0VG9rZW4oMCwgW3Rva2VuLCB0b2tlbi5sZW5ndGhdLCAwLCBnZXR0ZXIpO1xuICAgIH1cblxuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ2dnZ2cnLCAnd2Vla1llYXInKTtcbiAgICBhZGRXZWVrWWVhckZvcm1hdFRva2VuKCdnZ2dnZycsICd3ZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ0dHR0cnLCAnaXNvV2Vla1llYXInKTtcbiAgICBhZGRXZWVrWWVhckZvcm1hdFRva2VuKCdHR0dHRycsICdpc29XZWVrWWVhcicpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCd3ZWVrWWVhcicsICdnZycpO1xuICAgIGFkZFVuaXRBbGlhcygnaXNvV2Vla1llYXInLCAnR0cnKTtcblxuICAgIC8vIFBSSU9SSVRZXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ3dlZWtZZWFyJywgMSk7XG4gICAgYWRkVW5pdFByaW9yaXR5KCdpc29XZWVrWWVhcicsIDEpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignRycsIG1hdGNoU2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCdnJywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0dHJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2dnJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0dHR0cnLCBtYXRjaDF0bzQsIG1hdGNoNCk7XG4gICAgYWRkUmVnZXhUb2tlbignZ2dnZycsIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdHR0dHRycsIG1hdGNoMXRvNiwgbWF0Y2g2KTtcbiAgICBhZGRSZWdleFRva2VuKCdnZ2dnZycsIG1hdGNoMXRvNiwgbWF0Y2g2KTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZ2dnZycsICdnZ2dnZycsICdHR0dHJywgJ0dHR0dHJ10sIGZ1bmN0aW9uIChcbiAgICAgICAgaW5wdXQsXG4gICAgICAgIHdlZWssXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgdG9rZW5cbiAgICApIHtcbiAgICAgICAgd2Vla1t0b2tlbi5zdWJzdHIoMCwgMildID0gdG9JbnQoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydnZycsICdHRyddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgd2Vla1t0b2tlbl0gPSBob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXRXZWVrWWVhcihpbnB1dCkge1xuICAgICAgICByZXR1cm4gZ2V0U2V0V2Vla1llYXJIZWxwZXIuY2FsbChcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIHRoaXMud2VlaygpLFxuICAgICAgICAgICAgdGhpcy53ZWVrZGF5KCksXG4gICAgICAgICAgICB0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3csXG4gICAgICAgICAgICB0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3lcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRJU09XZWVrWWVhcihpbnB1dCkge1xuICAgICAgICByZXR1cm4gZ2V0U2V0V2Vla1llYXJIZWxwZXIuY2FsbChcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIHRoaXMuaXNvV2VlaygpLFxuICAgICAgICAgICAgdGhpcy5pc29XZWVrZGF5KCksXG4gICAgICAgICAgICAxLFxuICAgICAgICAgICAgNFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldElTT1dlZWtzSW5ZZWFyKCkge1xuICAgICAgICByZXR1cm4gd2Vla3NJblllYXIodGhpcy55ZWFyKCksIDEsIDQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldElTT1dlZWtzSW5JU09XZWVrWWVhcigpIHtcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMuaXNvV2Vla1llYXIoKSwgMSwgNCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0V2Vla3NJblllYXIoKSB7XG4gICAgICAgIHZhciB3ZWVrSW5mbyA9IHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrO1xuICAgICAgICByZXR1cm4gd2Vla3NJblllYXIodGhpcy55ZWFyKCksIHdlZWtJbmZvLmRvdywgd2Vla0luZm8uZG95KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRXZWVrc0luV2Vla1llYXIoKSB7XG4gICAgICAgIHZhciB3ZWVrSW5mbyA9IHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrO1xuICAgICAgICByZXR1cm4gd2Vla3NJblllYXIodGhpcy53ZWVrWWVhcigpLCB3ZWVrSW5mby5kb3csIHdlZWtJbmZvLmRveSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0V2Vla1llYXJIZWxwZXIoaW5wdXQsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KSB7XG4gICAgICAgIHZhciB3ZWVrc1RhcmdldDtcbiAgICAgICAgaWYgKGlucHV0ID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB3ZWVrT2ZZZWFyKHRoaXMsIGRvdywgZG95KS55ZWFyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd2Vla3NUYXJnZXQgPSB3ZWVrc0luWWVhcihpbnB1dCwgZG93LCBkb3kpO1xuICAgICAgICAgICAgaWYgKHdlZWsgPiB3ZWVrc1RhcmdldCkge1xuICAgICAgICAgICAgICAgIHdlZWsgPSB3ZWVrc1RhcmdldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzZXRXZWVrQWxsLmNhbGwodGhpcywgaW5wdXQsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldFdlZWtBbGwod2Vla1llYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KSB7XG4gICAgICAgIHZhciBkYXlPZlllYXJEYXRhID0gZGF5T2ZZZWFyRnJvbVdlZWtzKHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSksXG4gICAgICAgICAgICBkYXRlID0gY3JlYXRlVVRDRGF0ZShkYXlPZlllYXJEYXRhLnllYXIsIDAsIGRheU9mWWVhckRhdGEuZGF5T2ZZZWFyKTtcblxuICAgICAgICB0aGlzLnllYXIoZGF0ZS5nZXRVVENGdWxsWWVhcigpKTtcbiAgICAgICAgdGhpcy5tb250aChkYXRlLmdldFVUQ01vbnRoKCkpO1xuICAgICAgICB0aGlzLmRhdGUoZGF0ZS5nZXRVVENEYXRlKCkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignUScsIDAsICdRbycsICdxdWFydGVyJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ3F1YXJ0ZXInLCAnUScpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgncXVhcnRlcicsIDcpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignUScsIG1hdGNoMSk7XG4gICAgYWRkUGFyc2VUb2tlbignUScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbTU9OVEhdID0gKHRvSW50KGlucHV0KSAtIDEpICogMztcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldFF1YXJ0ZXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGxcbiAgICAgICAgICAgID8gTWF0aC5jZWlsKCh0aGlzLm1vbnRoKCkgKyAxKSAvIDMpXG4gICAgICAgICAgICA6IHRoaXMubW9udGgoKGlucHV0IC0gMSkgKiAzICsgKHRoaXMubW9udGgoKSAlIDMpKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignRCcsIFsnREQnLCAyXSwgJ0RvJywgJ2RhdGUnKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnZGF0ZScsICdEJyk7XG5cbiAgICAvLyBQUklPUklUWVxuICAgIGFkZFVuaXRQcmlvcml0eSgnZGF0ZScsIDkpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignRCcsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignREQnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignRG8nLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICAvLyBUT0RPOiBSZW1vdmUgXCJvcmRpbmFsUGFyc2VcIiBmYWxsYmFjayBpbiBuZXh0IG1ham9yIHJlbGVhc2UuXG4gICAgICAgIHJldHVybiBpc1N0cmljdFxuICAgICAgICAgICAgPyBsb2NhbGUuX2RheU9mTW9udGhPcmRpbmFsUGFyc2UgfHwgbG9jYWxlLl9vcmRpbmFsUGFyc2VcbiAgICAgICAgICAgIDogbG9jYWxlLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlTGVuaWVudDtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydEJywgJ0REJ10sIERBVEUpO1xuICAgIGFkZFBhcnNlVG9rZW4oJ0RvJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtEQVRFXSA9IHRvSW50KGlucHV0Lm1hdGNoKG1hdGNoMXRvMilbMF0pO1xuICAgIH0pO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldERheU9mTW9udGggPSBtYWtlR2V0U2V0KCdEYXRlJywgdHJ1ZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignREREJywgWydEREREJywgM10sICdERERvJywgJ2RheU9mWWVhcicpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdkYXlPZlllYXInLCAnREREJyk7XG5cbiAgICAvLyBQUklPUklUWVxuICAgIGFkZFVuaXRQcmlvcml0eSgnZGF5T2ZZZWFyJywgNCk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdEREQnLCBtYXRjaDF0bzMpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0REREQnLCBtYXRjaDMpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydEREQnLCAnRERERCddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPSB0b0ludChpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXREYXlPZlllYXIoaW5wdXQpIHtcbiAgICAgICAgdmFyIGRheU9mWWVhciA9XG4gICAgICAgICAgICBNYXRoLnJvdW5kKFxuICAgICAgICAgICAgICAgICh0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykgLSB0aGlzLmNsb25lKCkuc3RhcnRPZigneWVhcicpKSAvIDg2NGU1XG4gICAgICAgICAgICApICsgMTtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyBkYXlPZlllYXIgOiB0aGlzLmFkZChpbnB1dCAtIGRheU9mWWVhciwgJ2QnKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignbScsIFsnbW0nLCAyXSwgMCwgJ21pbnV0ZScpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdtaW51dGUnLCAnbScpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgnbWludXRlJywgMTQpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignbScsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignbW0nLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ20nLCAnbW0nXSwgTUlOVVRFKTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXRNaW51dGUgPSBtYWtlR2V0U2V0KCdNaW51dGVzJywgZmFsc2UpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3MnLCBbJ3NzJywgMl0sIDAsICdzZWNvbmQnKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnc2Vjb25kJywgJ3MnKTtcblxuICAgIC8vIFBSSU9SSVRZXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ3NlY29uZCcsIDE1KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3MnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3NzJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydzJywgJ3NzJ10sIFNFQ09ORCk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0U2Vjb25kID0gbWFrZUdldFNldCgnU2Vjb25kcycsIGZhbHNlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdTJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gfn4odGhpcy5taWxsaXNlY29uZCgpIC8gMTAwKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1MnLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gfn4odGhpcy5taWxsaXNlY29uZCgpIC8gMTApO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1MnLCAzXSwgMCwgJ21pbGxpc2Vjb25kJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTJywgNF0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1MnLCA1XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTJywgNl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTJywgN10sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTU1MnLCA4XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTU1NTJywgOV0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDAwMDA7XG4gICAgfSk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ21pbGxpc2Vjb25kJywgJ21zJyk7XG5cbiAgICAvLyBQUklPUklUWVxuXG4gICAgYWRkVW5pdFByaW9yaXR5KCdtaWxsaXNlY29uZCcsIDE2KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1MnLCBtYXRjaDF0bzMsIG1hdGNoMSk7XG4gICAgYWRkUmVnZXhUb2tlbignU1MnLCBtYXRjaDF0bzMsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignU1NTJywgbWF0Y2gxdG8zLCBtYXRjaDMpO1xuXG4gICAgdmFyIHRva2VuLCBnZXRTZXRNaWxsaXNlY29uZDtcbiAgICBmb3IgKHRva2VuID0gJ1NTU1MnOyB0b2tlbi5sZW5ndGggPD0gOTsgdG9rZW4gKz0gJ1MnKSB7XG4gICAgICAgIGFkZFJlZ2V4VG9rZW4odG9rZW4sIG1hdGNoVW5zaWduZWQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlTXMoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W01JTExJU0VDT05EXSA9IHRvSW50KCgnMC4nICsgaW5wdXQpICogMTAwMCk7XG4gICAgfVxuXG4gICAgZm9yICh0b2tlbiA9ICdTJzsgdG9rZW4ubGVuZ3RoIDw9IDk7IHRva2VuICs9ICdTJykge1xuICAgICAgICBhZGRQYXJzZVRva2VuKHRva2VuLCBwYXJzZU1zKTtcbiAgICB9XG5cbiAgICBnZXRTZXRNaWxsaXNlY29uZCA9IG1ha2VHZXRTZXQoJ01pbGxpc2Vjb25kcycsIGZhbHNlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCd6JywgMCwgMCwgJ3pvbmVBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3p6JywgMCwgMCwgJ3pvbmVOYW1lJyk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRab25lQWJicigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gJ1VUQycgOiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRab25lTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gJ0Nvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lJyA6ICcnO1xuICAgIH1cblxuICAgIHZhciBwcm90byA9IE1vbWVudC5wcm90b3R5cGU7XG5cbiAgICBwcm90by5hZGQgPSBhZGQ7XG4gICAgcHJvdG8uY2FsZW5kYXIgPSBjYWxlbmRhciQxO1xuICAgIHByb3RvLmNsb25lID0gY2xvbmU7XG4gICAgcHJvdG8uZGlmZiA9IGRpZmY7XG4gICAgcHJvdG8uZW5kT2YgPSBlbmRPZjtcbiAgICBwcm90by5mb3JtYXQgPSBmb3JtYXQ7XG4gICAgcHJvdG8uZnJvbSA9IGZyb207XG4gICAgcHJvdG8uZnJvbU5vdyA9IGZyb21Ob3c7XG4gICAgcHJvdG8udG8gPSB0bztcbiAgICBwcm90by50b05vdyA9IHRvTm93O1xuICAgIHByb3RvLmdldCA9IHN0cmluZ0dldDtcbiAgICBwcm90by5pbnZhbGlkQXQgPSBpbnZhbGlkQXQ7XG4gICAgcHJvdG8uaXNBZnRlciA9IGlzQWZ0ZXI7XG4gICAgcHJvdG8uaXNCZWZvcmUgPSBpc0JlZm9yZTtcbiAgICBwcm90by5pc0JldHdlZW4gPSBpc0JldHdlZW47XG4gICAgcHJvdG8uaXNTYW1lID0gaXNTYW1lO1xuICAgIHByb3RvLmlzU2FtZU9yQWZ0ZXIgPSBpc1NhbWVPckFmdGVyO1xuICAgIHByb3RvLmlzU2FtZU9yQmVmb3JlID0gaXNTYW1lT3JCZWZvcmU7XG4gICAgcHJvdG8uaXNWYWxpZCA9IGlzVmFsaWQkMjtcbiAgICBwcm90by5sYW5nID0gbGFuZztcbiAgICBwcm90by5sb2NhbGUgPSBsb2NhbGU7XG4gICAgcHJvdG8ubG9jYWxlRGF0YSA9IGxvY2FsZURhdGE7XG4gICAgcHJvdG8ubWF4ID0gcHJvdG90eXBlTWF4O1xuICAgIHByb3RvLm1pbiA9IHByb3RvdHlwZU1pbjtcbiAgICBwcm90by5wYXJzaW5nRmxhZ3MgPSBwYXJzaW5nRmxhZ3M7XG4gICAgcHJvdG8uc2V0ID0gc3RyaW5nU2V0O1xuICAgIHByb3RvLnN0YXJ0T2YgPSBzdGFydE9mO1xuICAgIHByb3RvLnN1YnRyYWN0ID0gc3VidHJhY3Q7XG4gICAgcHJvdG8udG9BcnJheSA9IHRvQXJyYXk7XG4gICAgcHJvdG8udG9PYmplY3QgPSB0b09iamVjdDtcbiAgICBwcm90by50b0RhdGUgPSB0b0RhdGU7XG4gICAgcHJvdG8udG9JU09TdHJpbmcgPSB0b0lTT1N0cmluZztcbiAgICBwcm90by5pbnNwZWN0ID0gaW5zcGVjdDtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLmZvciAhPSBudWxsKSB7XG4gICAgICAgIHByb3RvW1N5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJyldID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICdNb21lbnQ8JyArIHRoaXMuZm9ybWF0KCkgKyAnPic7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHByb3RvLnRvSlNPTiA9IHRvSlNPTjtcbiAgICBwcm90by50b1N0cmluZyA9IHRvU3RyaW5nO1xuICAgIHByb3RvLnVuaXggPSB1bml4O1xuICAgIHByb3RvLnZhbHVlT2YgPSB2YWx1ZU9mO1xuICAgIHByb3RvLmNyZWF0aW9uRGF0YSA9IGNyZWF0aW9uRGF0YTtcbiAgICBwcm90by5lcmFOYW1lID0gZ2V0RXJhTmFtZTtcbiAgICBwcm90by5lcmFOYXJyb3cgPSBnZXRFcmFOYXJyb3c7XG4gICAgcHJvdG8uZXJhQWJiciA9IGdldEVyYUFiYnI7XG4gICAgcHJvdG8uZXJhWWVhciA9IGdldEVyYVllYXI7XG4gICAgcHJvdG8ueWVhciA9IGdldFNldFllYXI7XG4gICAgcHJvdG8uaXNMZWFwWWVhciA9IGdldElzTGVhcFllYXI7XG4gICAgcHJvdG8ud2Vla1llYXIgPSBnZXRTZXRXZWVrWWVhcjtcbiAgICBwcm90by5pc29XZWVrWWVhciA9IGdldFNldElTT1dlZWtZZWFyO1xuICAgIHByb3RvLnF1YXJ0ZXIgPSBwcm90by5xdWFydGVycyA9IGdldFNldFF1YXJ0ZXI7XG4gICAgcHJvdG8ubW9udGggPSBnZXRTZXRNb250aDtcbiAgICBwcm90by5kYXlzSW5Nb250aCA9IGdldERheXNJbk1vbnRoO1xuICAgIHByb3RvLndlZWsgPSBwcm90by53ZWVrcyA9IGdldFNldFdlZWs7XG4gICAgcHJvdG8uaXNvV2VlayA9IHByb3RvLmlzb1dlZWtzID0gZ2V0U2V0SVNPV2VlaztcbiAgICBwcm90by53ZWVrc0luWWVhciA9IGdldFdlZWtzSW5ZZWFyO1xuICAgIHByb3RvLndlZWtzSW5XZWVrWWVhciA9IGdldFdlZWtzSW5XZWVrWWVhcjtcbiAgICBwcm90by5pc29XZWVrc0luWWVhciA9IGdldElTT1dlZWtzSW5ZZWFyO1xuICAgIHByb3RvLmlzb1dlZWtzSW5JU09XZWVrWWVhciA9IGdldElTT1dlZWtzSW5JU09XZWVrWWVhcjtcbiAgICBwcm90by5kYXRlID0gZ2V0U2V0RGF5T2ZNb250aDtcbiAgICBwcm90by5kYXkgPSBwcm90by5kYXlzID0gZ2V0U2V0RGF5T2ZXZWVrO1xuICAgIHByb3RvLndlZWtkYXkgPSBnZXRTZXRMb2NhbGVEYXlPZldlZWs7XG4gICAgcHJvdG8uaXNvV2Vla2RheSA9IGdldFNldElTT0RheU9mV2VlaztcbiAgICBwcm90by5kYXlPZlllYXIgPSBnZXRTZXREYXlPZlllYXI7XG4gICAgcHJvdG8uaG91ciA9IHByb3RvLmhvdXJzID0gZ2V0U2V0SG91cjtcbiAgICBwcm90by5taW51dGUgPSBwcm90by5taW51dGVzID0gZ2V0U2V0TWludXRlO1xuICAgIHByb3RvLnNlY29uZCA9IHByb3RvLnNlY29uZHMgPSBnZXRTZXRTZWNvbmQ7XG4gICAgcHJvdG8ubWlsbGlzZWNvbmQgPSBwcm90by5taWxsaXNlY29uZHMgPSBnZXRTZXRNaWxsaXNlY29uZDtcbiAgICBwcm90by51dGNPZmZzZXQgPSBnZXRTZXRPZmZzZXQ7XG4gICAgcHJvdG8udXRjID0gc2V0T2Zmc2V0VG9VVEM7XG4gICAgcHJvdG8ubG9jYWwgPSBzZXRPZmZzZXRUb0xvY2FsO1xuICAgIHByb3RvLnBhcnNlWm9uZSA9IHNldE9mZnNldFRvUGFyc2VkT2Zmc2V0O1xuICAgIHByb3RvLmhhc0FsaWduZWRIb3VyT2Zmc2V0ID0gaGFzQWxpZ25lZEhvdXJPZmZzZXQ7XG4gICAgcHJvdG8uaXNEU1QgPSBpc0RheWxpZ2h0U2F2aW5nVGltZTtcbiAgICBwcm90by5pc0xvY2FsID0gaXNMb2NhbDtcbiAgICBwcm90by5pc1V0Y09mZnNldCA9IGlzVXRjT2Zmc2V0O1xuICAgIHByb3RvLmlzVXRjID0gaXNVdGM7XG4gICAgcHJvdG8uaXNVVEMgPSBpc1V0YztcbiAgICBwcm90by56b25lQWJiciA9IGdldFpvbmVBYmJyO1xuICAgIHByb3RvLnpvbmVOYW1lID0gZ2V0Wm9uZU5hbWU7XG4gICAgcHJvdG8uZGF0ZXMgPSBkZXByZWNhdGUoXG4gICAgICAgICdkYXRlcyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgZGF0ZSBpbnN0ZWFkLicsXG4gICAgICAgIGdldFNldERheU9mTW9udGhcbiAgICApO1xuICAgIHByb3RvLm1vbnRocyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbnRocyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgbW9udGggaW5zdGVhZCcsXG4gICAgICAgIGdldFNldE1vbnRoXG4gICAgKTtcbiAgICBwcm90by55ZWFycyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ3llYXJzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSB5ZWFyIGluc3RlYWQnLFxuICAgICAgICBnZXRTZXRZZWFyXG4gICAgKTtcbiAgICBwcm90by56b25lID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50KCkuem9uZSBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50KCkudXRjT2Zmc2V0IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3Mvem9uZS8nLFxuICAgICAgICBnZXRTZXRab25lXG4gICAgKTtcbiAgICBwcm90by5pc0RTVFNoaWZ0ZWQgPSBkZXByZWNhdGUoXG4gICAgICAgICdpc0RTVFNoaWZ0ZWQgaXMgZGVwcmVjYXRlZC4gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZHN0LXNoaWZ0ZWQvIGZvciBtb3JlIGluZm9ybWF0aW9uJyxcbiAgICAgICAgaXNEYXlsaWdodFNhdmluZ1RpbWVTaGlmdGVkXG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVuaXgoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKGlucHV0ICogMTAwMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW5ab25lKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKS5wYXJzZVpvbmUoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcmVQYXJzZVBvc3RGb3JtYXQoc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvJDEgPSBMb2NhbGUucHJvdG90eXBlO1xuXG4gICAgcHJvdG8kMS5jYWxlbmRhciA9IGNhbGVuZGFyO1xuICAgIHByb3RvJDEubG9uZ0RhdGVGb3JtYXQgPSBsb25nRGF0ZUZvcm1hdDtcbiAgICBwcm90byQxLmludmFsaWREYXRlID0gaW52YWxpZERhdGU7XG4gICAgcHJvdG8kMS5vcmRpbmFsID0gb3JkaW5hbDtcbiAgICBwcm90byQxLnByZXBhcnNlID0gcHJlUGFyc2VQb3N0Rm9ybWF0O1xuICAgIHByb3RvJDEucG9zdGZvcm1hdCA9IHByZVBhcnNlUG9zdEZvcm1hdDtcbiAgICBwcm90byQxLnJlbGF0aXZlVGltZSA9IHJlbGF0aXZlVGltZTtcbiAgICBwcm90byQxLnBhc3RGdXR1cmUgPSBwYXN0RnV0dXJlO1xuICAgIHByb3RvJDEuc2V0ID0gc2V0O1xuICAgIHByb3RvJDEuZXJhcyA9IGxvY2FsZUVyYXM7XG4gICAgcHJvdG8kMS5lcmFzUGFyc2UgPSBsb2NhbGVFcmFzUGFyc2U7XG4gICAgcHJvdG8kMS5lcmFzQ29udmVydFllYXIgPSBsb2NhbGVFcmFzQ29udmVydFllYXI7XG4gICAgcHJvdG8kMS5lcmFzQWJiclJlZ2V4ID0gZXJhc0FiYnJSZWdleDtcbiAgICBwcm90byQxLmVyYXNOYW1lUmVnZXggPSBlcmFzTmFtZVJlZ2V4O1xuICAgIHByb3RvJDEuZXJhc05hcnJvd1JlZ2V4ID0gZXJhc05hcnJvd1JlZ2V4O1xuXG4gICAgcHJvdG8kMS5tb250aHMgPSBsb2NhbGVNb250aHM7XG4gICAgcHJvdG8kMS5tb250aHNTaG9ydCA9IGxvY2FsZU1vbnRoc1Nob3J0O1xuICAgIHByb3RvJDEubW9udGhzUGFyc2UgPSBsb2NhbGVNb250aHNQYXJzZTtcbiAgICBwcm90byQxLm1vbnRoc1JlZ2V4ID0gbW9udGhzUmVnZXg7XG4gICAgcHJvdG8kMS5tb250aHNTaG9ydFJlZ2V4ID0gbW9udGhzU2hvcnRSZWdleDtcbiAgICBwcm90byQxLndlZWsgPSBsb2NhbGVXZWVrO1xuICAgIHByb3RvJDEuZmlyc3REYXlPZlllYXIgPSBsb2NhbGVGaXJzdERheU9mWWVhcjtcbiAgICBwcm90byQxLmZpcnN0RGF5T2ZXZWVrID0gbG9jYWxlRmlyc3REYXlPZldlZWs7XG5cbiAgICBwcm90byQxLndlZWtkYXlzID0gbG9jYWxlV2Vla2RheXM7XG4gICAgcHJvdG8kMS53ZWVrZGF5c01pbiA9IGxvY2FsZVdlZWtkYXlzTWluO1xuICAgIHByb3RvJDEud2Vla2RheXNTaG9ydCA9IGxvY2FsZVdlZWtkYXlzU2hvcnQ7XG4gICAgcHJvdG8kMS53ZWVrZGF5c1BhcnNlID0gbG9jYWxlV2Vla2RheXNQYXJzZTtcblxuICAgIHByb3RvJDEud2Vla2RheXNSZWdleCA9IHdlZWtkYXlzUmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrZGF5c1Nob3J0UmVnZXggPSB3ZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrZGF5c01pblJlZ2V4ID0gd2Vla2RheXNNaW5SZWdleDtcblxuICAgIHByb3RvJDEuaXNQTSA9IGxvY2FsZUlzUE07XG4gICAgcHJvdG8kMS5tZXJpZGllbSA9IGxvY2FsZU1lcmlkaWVtO1xuXG4gICAgZnVuY3Rpb24gZ2V0JDEoZm9ybWF0LCBpbmRleCwgZmllbGQsIHNldHRlcikge1xuICAgICAgICB2YXIgbG9jYWxlID0gZ2V0TG9jYWxlKCksXG4gICAgICAgICAgICB1dGMgPSBjcmVhdGVVVEMoKS5zZXQoc2V0dGVyLCBpbmRleCk7XG4gICAgICAgIHJldHVybiBsb2NhbGVbZmllbGRdKHV0YywgZm9ybWF0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCBmaWVsZCkge1xuICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XG5cbiAgICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQkMShmb3JtYXQsIGluZGV4LCBmaWVsZCwgJ21vbnRoJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIG91dCA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgb3V0W2ldID0gZ2V0JDEoZm9ybWF0LCBpLCBmaWVsZCwgJ21vbnRoJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG5cbiAgICAvLyAoKVxuICAgIC8vICg1KVxuICAgIC8vIChmbXQsIDUpXG4gICAgLy8gKGZtdClcbiAgICAvLyAodHJ1ZSlcbiAgICAvLyAodHJ1ZSwgNSlcbiAgICAvLyAodHJ1ZSwgZm10LCA1KVxuICAgIC8vICh0cnVlLCBmbXQpXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzSW1wbChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgsIGZpZWxkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbG9jYWxlU29ydGVkID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIGlmIChpc051bWJlcihmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3JtYXQgPSBsb2NhbGVTb3J0ZWQ7XG4gICAgICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgIGxvY2FsZVNvcnRlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGxvY2FsZSA9IGdldExvY2FsZSgpLFxuICAgICAgICAgICAgc2hpZnQgPSBsb2NhbGVTb3J0ZWQgPyBsb2NhbGUuX3dlZWsuZG93IDogMCxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBvdXQgPSBbXTtcblxuICAgICAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldCQxKGZvcm1hdCwgKGluZGV4ICsgc2hpZnQpICUgNywgZmllbGQsICdkYXknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIG91dFtpXSA9IGdldCQxKGZvcm1hdCwgKGkgKyBzaGlmdCkgJSA3LCBmaWVsZCwgJ2RheScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRocyhmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCAnbW9udGhzJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRoc1Nob3J0KGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RNb250aHNJbXBsKGZvcm1hdCwgaW5kZXgsICdtb250aHNTaG9ydCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5cyhsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXMnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXNTaG9ydChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXNTaG9ydCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5c01pbihsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXNNaW4nKTtcbiAgICB9XG5cbiAgICBnZXRTZXRHbG9iYWxMb2NhbGUoJ2VuJywge1xuICAgICAgICBlcmFzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcwMDAxLTAxLTAxJyxcbiAgICAgICAgICAgICAgICB1bnRpbDogK0luZmluaXR5LFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnQW5ubyBEb21pbmknLFxuICAgICAgICAgICAgICAgIG5hcnJvdzogJ0FEJyxcbiAgICAgICAgICAgICAgICBhYmJyOiAnQUQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzaW5jZTogJzAwMDAtMTItMzEnLFxuICAgICAgICAgICAgICAgIHVudGlsOiAtSW5maW5pdHksXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiAxLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdCZWZvcmUgQ2hyaXN0JyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICdCQycsXG4gICAgICAgICAgICAgICAgYWJicjogJ0JDJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSh0aHxzdHxuZHxyZCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIHRvSW50KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBTaWRlIGVmZmVjdCBpbXBvcnRzXG5cbiAgICBob29rcy5sYW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50LmxhbmcgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbWVudC5sb2NhbGUgaW5zdGVhZC4nLFxuICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGVcbiAgICApO1xuICAgIGhvb2tzLmxhbmdEYXRhID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50LmxhbmdEYXRhIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlRGF0YSBpbnN0ZWFkLicsXG4gICAgICAgIGdldExvY2FsZVxuICAgICk7XG5cbiAgICB2YXIgbWF0aEFicyA9IE1hdGguYWJzO1xuXG4gICAgZnVuY3Rpb24gYWJzKCkge1xuICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cbiAgICAgICAgdGhpcy5fbWlsbGlzZWNvbmRzID0gbWF0aEFicyh0aGlzLl9taWxsaXNlY29uZHMpO1xuICAgICAgICB0aGlzLl9kYXlzID0gbWF0aEFicyh0aGlzLl9kYXlzKTtcbiAgICAgICAgdGhpcy5fbW9udGhzID0gbWF0aEFicyh0aGlzLl9tb250aHMpO1xuXG4gICAgICAgIGRhdGEubWlsbGlzZWNvbmRzID0gbWF0aEFicyhkYXRhLm1pbGxpc2Vjb25kcyk7XG4gICAgICAgIGRhdGEuc2Vjb25kcyA9IG1hdGhBYnMoZGF0YS5zZWNvbmRzKTtcbiAgICAgICAgZGF0YS5taW51dGVzID0gbWF0aEFicyhkYXRhLm1pbnV0ZXMpO1xuICAgICAgICBkYXRhLmhvdXJzID0gbWF0aEFicyhkYXRhLmhvdXJzKTtcbiAgICAgICAgZGF0YS5tb250aHMgPSBtYXRoQWJzKGRhdGEubW9udGhzKTtcbiAgICAgICAgZGF0YS55ZWFycyA9IG1hdGhBYnMoZGF0YS55ZWFycyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkU3VidHJhY3QkMShkdXJhdGlvbiwgaW5wdXQsIHZhbHVlLCBkaXJlY3Rpb24pIHtcbiAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlRHVyYXRpb24oaW5wdXQsIHZhbHVlKTtcblxuICAgICAgICBkdXJhdGlvbi5fbWlsbGlzZWNvbmRzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9taWxsaXNlY29uZHM7XG4gICAgICAgIGR1cmF0aW9uLl9kYXlzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9kYXlzO1xuICAgICAgICBkdXJhdGlvbi5fbW9udGhzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9tb250aHM7XG5cbiAgICAgICAgcmV0dXJuIGR1cmF0aW9uLl9idWJibGUoKTtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0cyBvbmx5IDIuMC1zdHlsZSBhZGQoMSwgJ3MnKSBvciBhZGQoZHVyYXRpb24pXG4gICAgZnVuY3Rpb24gYWRkJDEoaW5wdXQsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBhZGRTdWJ0cmFjdCQxKHRoaXMsIGlucHV0LCB2YWx1ZSwgMSk7XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydHMgb25seSAyLjAtc3R5bGUgc3VidHJhY3QoMSwgJ3MnKSBvciBzdWJ0cmFjdChkdXJhdGlvbilcbiAgICBmdW5jdGlvbiBzdWJ0cmFjdCQxKGlucHV0LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gYWRkU3VidHJhY3QkMSh0aGlzLCBpbnB1dCwgdmFsdWUsIC0xKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhYnNDZWlsKG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IobnVtYmVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1YmJsZSgpIHtcbiAgICAgICAgdmFyIG1pbGxpc2Vjb25kcyA9IHRoaXMuX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgIGRheXMgPSB0aGlzLl9kYXlzLFxuICAgICAgICAgICAgbW9udGhzID0gdGhpcy5fbW9udGhzLFxuICAgICAgICAgICAgZGF0YSA9IHRoaXMuX2RhdGEsXG4gICAgICAgICAgICBzZWNvbmRzLFxuICAgICAgICAgICAgbWludXRlcyxcbiAgICAgICAgICAgIGhvdXJzLFxuICAgICAgICAgICAgeWVhcnMsXG4gICAgICAgICAgICBtb250aHNGcm9tRGF5cztcblxuICAgICAgICAvLyBpZiB3ZSBoYXZlIGEgbWl4IG9mIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSB2YWx1ZXMsIGJ1YmJsZSBkb3duIGZpcnN0XG4gICAgICAgIC8vIGNoZWNrOiBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMjE2NlxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgIChtaWxsaXNlY29uZHMgPj0gMCAmJiBkYXlzID49IDAgJiYgbW9udGhzID49IDApIHx8XG4gICAgICAgICAgICAgICAgKG1pbGxpc2Vjb25kcyA8PSAwICYmIGRheXMgPD0gMCAmJiBtb250aHMgPD0gMClcbiAgICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgKz0gYWJzQ2VpbChtb250aHNUb0RheXMobW9udGhzKSArIGRheXMpICogODY0ZTU7XG4gICAgICAgICAgICBkYXlzID0gMDtcbiAgICAgICAgICAgIG1vbnRocyA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYnViYmxlcyB1cCB2YWx1ZXMsIHNlZSB0aGUgdGVzdHMgZm9yXG4gICAgICAgIC8vIGV4YW1wbGVzIG9mIHdoYXQgdGhhdCBtZWFucy5cbiAgICAgICAgZGF0YS5taWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZHMgJSAxMDAwO1xuXG4gICAgICAgIHNlY29uZHMgPSBhYnNGbG9vcihtaWxsaXNlY29uZHMgLyAxMDAwKTtcbiAgICAgICAgZGF0YS5zZWNvbmRzID0gc2Vjb25kcyAlIDYwO1xuXG4gICAgICAgIG1pbnV0ZXMgPSBhYnNGbG9vcihzZWNvbmRzIC8gNjApO1xuICAgICAgICBkYXRhLm1pbnV0ZXMgPSBtaW51dGVzICUgNjA7XG5cbiAgICAgICAgaG91cnMgPSBhYnNGbG9vcihtaW51dGVzIC8gNjApO1xuICAgICAgICBkYXRhLmhvdXJzID0gaG91cnMgJSAyNDtcblxuICAgICAgICBkYXlzICs9IGFic0Zsb29yKGhvdXJzIC8gMjQpO1xuXG4gICAgICAgIC8vIGNvbnZlcnQgZGF5cyB0byBtb250aHNcbiAgICAgICAgbW9udGhzRnJvbURheXMgPSBhYnNGbG9vcihkYXlzVG9Nb250aHMoZGF5cykpO1xuICAgICAgICBtb250aHMgKz0gbW9udGhzRnJvbURheXM7XG4gICAgICAgIGRheXMgLT0gYWJzQ2VpbChtb250aHNUb0RheXMobW9udGhzRnJvbURheXMpKTtcblxuICAgICAgICAvLyAxMiBtb250aHMgLT4gMSB5ZWFyXG4gICAgICAgIHllYXJzID0gYWJzRmxvb3IobW9udGhzIC8gMTIpO1xuICAgICAgICBtb250aHMgJT0gMTI7XG5cbiAgICAgICAgZGF0YS5kYXlzID0gZGF5cztcbiAgICAgICAgZGF0YS5tb250aHMgPSBtb250aHM7XG4gICAgICAgIGRhdGEueWVhcnMgPSB5ZWFycztcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkYXlzVG9Nb250aHMoZGF5cykge1xuICAgICAgICAvLyA0MDAgeWVhcnMgaGF2ZSAxNDYwOTcgZGF5cyAodGFraW5nIGludG8gYWNjb3VudCBsZWFwIHllYXIgcnVsZXMpXG4gICAgICAgIC8vIDQwMCB5ZWFycyBoYXZlIDEyIG1vbnRocyA9PT0gNDgwMFxuICAgICAgICByZXR1cm4gKGRheXMgKiA0ODAwKSAvIDE0NjA5NztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNUb0RheXMobW9udGhzKSB7XG4gICAgICAgIC8vIHRoZSByZXZlcnNlIG9mIGRheXNUb01vbnRoc1xuICAgICAgICByZXR1cm4gKG1vbnRocyAqIDE0NjA5NykgLyA0ODAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFzKHVuaXRzKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRheXMsXG4gICAgICAgICAgICBtb250aHMsXG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgPSB0aGlzLl9taWxsaXNlY29uZHM7XG5cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG5cbiAgICAgICAgaWYgKHVuaXRzID09PSAnbW9udGgnIHx8IHVuaXRzID09PSAncXVhcnRlcicgfHwgdW5pdHMgPT09ICd5ZWFyJykge1xuICAgICAgICAgICAgZGF5cyA9IHRoaXMuX2RheXMgKyBtaWxsaXNlY29uZHMgLyA4NjRlNTtcbiAgICAgICAgICAgIG1vbnRocyA9IHRoaXMuX21vbnRocyArIGRheXNUb01vbnRocyhkYXlzKTtcbiAgICAgICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb250aHM7XG4gICAgICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb250aHMgLyAzO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzIC8gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBoYW5kbGUgbWlsbGlzZWNvbmRzIHNlcGFyYXRlbHkgYmVjYXVzZSBvZiBmbG9hdGluZyBwb2ludCBtYXRoIGVycm9ycyAoaXNzdWUgIzE4NjcpXG4gICAgICAgICAgICBkYXlzID0gdGhpcy5fZGF5cyArIE1hdGgucm91bmQobW9udGhzVG9EYXlzKHRoaXMuX21vbnRocykpO1xuICAgICAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF5cyAvIDcgKyBtaWxsaXNlY29uZHMgLyA2MDQ4ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKyBtaWxsaXNlY29uZHMgLyA4NjRlNTtcbiAgICAgICAgICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKiAyNCArIG1pbGxpc2Vjb25kcyAvIDM2ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKiAxNDQwICsgbWlsbGlzZWNvbmRzIC8gNmU0O1xuICAgICAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICogODY0MDAgKyBtaWxsaXNlY29uZHMgLyAxMDAwO1xuICAgICAgICAgICAgICAgIC8vIE1hdGguZmxvb3IgcHJldmVudHMgZmxvYXRpbmcgcG9pbnQgbWF0aCBlcnJvcnMgaGVyZVxuICAgICAgICAgICAgICAgIGNhc2UgJ21pbGxpc2Vjb25kJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoZGF5cyAqIDg2NGU1KSArIG1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gdW5pdCAnICsgdW5pdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVE9ETzogVXNlIHRoaXMuYXMoJ21zJyk/XG4gICAgZnVuY3Rpb24gdmFsdWVPZiQxKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLl9taWxsaXNlY29uZHMgK1xuICAgICAgICAgICAgdGhpcy5fZGF5cyAqIDg2NGU1ICtcbiAgICAgICAgICAgICh0aGlzLl9tb250aHMgJSAxMikgKiAyNTkyZTYgK1xuICAgICAgICAgICAgdG9JbnQodGhpcy5fbW9udGhzIC8gMTIpICogMzE1MzZlNlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VBcyhhbGlhcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXMoYWxpYXMpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHZhciBhc01pbGxpc2Vjb25kcyA9IG1ha2VBcygnbXMnKSxcbiAgICAgICAgYXNTZWNvbmRzID0gbWFrZUFzKCdzJyksXG4gICAgICAgIGFzTWludXRlcyA9IG1ha2VBcygnbScpLFxuICAgICAgICBhc0hvdXJzID0gbWFrZUFzKCdoJyksXG4gICAgICAgIGFzRGF5cyA9IG1ha2VBcygnZCcpLFxuICAgICAgICBhc1dlZWtzID0gbWFrZUFzKCd3JyksXG4gICAgICAgIGFzTW9udGhzID0gbWFrZUFzKCdNJyksXG4gICAgICAgIGFzUXVhcnRlcnMgPSBtYWtlQXMoJ1EnKSxcbiAgICAgICAgYXNZZWFycyA9IG1ha2VBcygneScpO1xuXG4gICAgZnVuY3Rpb24gY2xvbmUkMSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uKHRoaXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldCQyKHVuaXRzKSB7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzW3VuaXRzICsgJ3MnXSgpIDogTmFOO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VHZXR0ZXIobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy5fZGF0YVtuYW1lXSA6IE5hTjtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgbWlsbGlzZWNvbmRzID0gbWFrZUdldHRlcignbWlsbGlzZWNvbmRzJyksXG4gICAgICAgIHNlY29uZHMgPSBtYWtlR2V0dGVyKCdzZWNvbmRzJyksXG4gICAgICAgIG1pbnV0ZXMgPSBtYWtlR2V0dGVyKCdtaW51dGVzJyksXG4gICAgICAgIGhvdXJzID0gbWFrZUdldHRlcignaG91cnMnKSxcbiAgICAgICAgZGF5cyA9IG1ha2VHZXR0ZXIoJ2RheXMnKSxcbiAgICAgICAgbW9udGhzID0gbWFrZUdldHRlcignbW9udGhzJyksXG4gICAgICAgIHllYXJzID0gbWFrZUdldHRlcigneWVhcnMnKTtcblxuICAgIGZ1bmN0aW9uIHdlZWtzKCkge1xuICAgICAgICByZXR1cm4gYWJzRmxvb3IodGhpcy5kYXlzKCkgLyA3KTtcbiAgICB9XG5cbiAgICB2YXIgcm91bmQgPSBNYXRoLnJvdW5kLFxuICAgICAgICB0aHJlc2hvbGRzID0ge1xuICAgICAgICAgICAgc3M6IDQ0LCAvLyBhIGZldyBzZWNvbmRzIHRvIHNlY29uZHNcbiAgICAgICAgICAgIHM6IDQ1LCAvLyBzZWNvbmRzIHRvIG1pbnV0ZVxuICAgICAgICAgICAgbTogNDUsIC8vIG1pbnV0ZXMgdG8gaG91clxuICAgICAgICAgICAgaDogMjIsIC8vIGhvdXJzIHRvIGRheVxuICAgICAgICAgICAgZDogMjYsIC8vIGRheXMgdG8gbW9udGgvd2Vla1xuICAgICAgICAgICAgdzogbnVsbCwgLy8gd2Vla3MgdG8gbW9udGhcbiAgICAgICAgICAgIE06IDExLCAvLyBtb250aHMgdG8geWVhclxuICAgICAgICB9O1xuXG4gICAgLy8gaGVscGVyIGZ1bmN0aW9uIGZvciBtb21lbnQuZm4uZnJvbSwgbW9tZW50LmZuLmZyb21Ob3csIGFuZCBtb21lbnQuZHVyYXRpb24uZm4uaHVtYW5pemVcbiAgICBmdW5jdGlvbiBzdWJzdGl0dXRlVGltZUFnbyhzdHJpbmcsIG51bWJlciwgd2l0aG91dFN1ZmZpeCwgaXNGdXR1cmUsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLnJlbGF0aXZlVGltZShudW1iZXIgfHwgMSwgISF3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWUkMShwb3NOZWdEdXJhdGlvbiwgd2l0aG91dFN1ZmZpeCwgdGhyZXNob2xkcywgbG9jYWxlKSB7XG4gICAgICAgIHZhciBkdXJhdGlvbiA9IGNyZWF0ZUR1cmF0aW9uKHBvc05lZ0R1cmF0aW9uKS5hYnMoKSxcbiAgICAgICAgICAgIHNlY29uZHMgPSByb3VuZChkdXJhdGlvbi5hcygncycpKSxcbiAgICAgICAgICAgIG1pbnV0ZXMgPSByb3VuZChkdXJhdGlvbi5hcygnbScpKSxcbiAgICAgICAgICAgIGhvdXJzID0gcm91bmQoZHVyYXRpb24uYXMoJ2gnKSksXG4gICAgICAgICAgICBkYXlzID0gcm91bmQoZHVyYXRpb24uYXMoJ2QnKSksXG4gICAgICAgICAgICBtb250aHMgPSByb3VuZChkdXJhdGlvbi5hcygnTScpKSxcbiAgICAgICAgICAgIHdlZWtzID0gcm91bmQoZHVyYXRpb24uYXMoJ3cnKSksXG4gICAgICAgICAgICB5ZWFycyA9IHJvdW5kKGR1cmF0aW9uLmFzKCd5JykpLFxuICAgICAgICAgICAgYSA9XG4gICAgICAgICAgICAgICAgKHNlY29uZHMgPD0gdGhyZXNob2xkcy5zcyAmJiBbJ3MnLCBzZWNvbmRzXSkgfHxcbiAgICAgICAgICAgICAgICAoc2Vjb25kcyA8IHRocmVzaG9sZHMucyAmJiBbJ3NzJywgc2Vjb25kc10pIHx8XG4gICAgICAgICAgICAgICAgKG1pbnV0ZXMgPD0gMSAmJiBbJ20nXSkgfHxcbiAgICAgICAgICAgICAgICAobWludXRlcyA8IHRocmVzaG9sZHMubSAmJiBbJ21tJywgbWludXRlc10pIHx8XG4gICAgICAgICAgICAgICAgKGhvdXJzIDw9IDEgJiYgWydoJ10pIHx8XG4gICAgICAgICAgICAgICAgKGhvdXJzIDwgdGhyZXNob2xkcy5oICYmIFsnaGgnLCBob3Vyc10pIHx8XG4gICAgICAgICAgICAgICAgKGRheXMgPD0gMSAmJiBbJ2QnXSkgfHxcbiAgICAgICAgICAgICAgICAoZGF5cyA8IHRocmVzaG9sZHMuZCAmJiBbJ2RkJywgZGF5c10pO1xuXG4gICAgICAgIGlmICh0aHJlc2hvbGRzLncgIT0gbnVsbCkge1xuICAgICAgICAgICAgYSA9XG4gICAgICAgICAgICAgICAgYSB8fFxuICAgICAgICAgICAgICAgICh3ZWVrcyA8PSAxICYmIFsndyddKSB8fFxuICAgICAgICAgICAgICAgICh3ZWVrcyA8IHRocmVzaG9sZHMudyAmJiBbJ3d3Jywgd2Vla3NdKTtcbiAgICAgICAgfVxuICAgICAgICBhID0gYSB8fFxuICAgICAgICAgICAgKG1vbnRocyA8PSAxICYmIFsnTSddKSB8fFxuICAgICAgICAgICAgKG1vbnRocyA8IHRocmVzaG9sZHMuTSAmJiBbJ01NJywgbW9udGhzXSkgfHxcbiAgICAgICAgICAgICh5ZWFycyA8PSAxICYmIFsneSddKSB8fCBbJ3l5JywgeWVhcnNdO1xuXG4gICAgICAgIGFbMl0gPSB3aXRob3V0U3VmZml4O1xuICAgICAgICBhWzNdID0gK3Bvc05lZ0R1cmF0aW9uID4gMDtcbiAgICAgICAgYVs0XSA9IGxvY2FsZTtcbiAgICAgICAgcmV0dXJuIHN1YnN0aXR1dGVUaW1lQWdvLmFwcGx5KG51bGwsIGEpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHlvdSB0byBzZXQgdGhlIHJvdW5kaW5nIGZ1bmN0aW9uIGZvciByZWxhdGl2ZSB0aW1lIHN0cmluZ3NcbiAgICBmdW5jdGlvbiBnZXRTZXRSZWxhdGl2ZVRpbWVSb3VuZGluZyhyb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgIGlmIChyb3VuZGluZ0Z1bmN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiByb3VuZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHJvdW5kaW5nRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJvdW5kID0gcm91bmRpbmdGdW5jdGlvbjtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc2V0IGEgdGhyZXNob2xkIGZvciByZWxhdGl2ZSB0aW1lIHN0cmluZ3NcbiAgICBmdW5jdGlvbiBnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQodGhyZXNob2xkLCBsaW1pdCkge1xuICAgICAgICBpZiAodGhyZXNob2xkc1t0aHJlc2hvbGRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGltaXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRocmVzaG9sZHNbdGhyZXNob2xkXTtcbiAgICAgICAgfVxuICAgICAgICB0aHJlc2hvbGRzW3RocmVzaG9sZF0gPSBsaW1pdDtcbiAgICAgICAgaWYgKHRocmVzaG9sZCA9PT0gJ3MnKSB7XG4gICAgICAgICAgICB0aHJlc2hvbGRzLnNzID0gbGltaXQgLSAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGh1bWFuaXplKGFyZ1dpdGhTdWZmaXgsIGFyZ1RocmVzaG9sZHMpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgd2l0aFN1ZmZpeCA9IGZhbHNlLFxuICAgICAgICAgICAgdGggPSB0aHJlc2hvbGRzLFxuICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgb3V0cHV0O1xuXG4gICAgICAgIGlmICh0eXBlb2YgYXJnV2l0aFN1ZmZpeCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGFyZ1RocmVzaG9sZHMgPSBhcmdXaXRoU3VmZml4O1xuICAgICAgICAgICAgYXJnV2l0aFN1ZmZpeCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYXJnV2l0aFN1ZmZpeCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICB3aXRoU3VmZml4ID0gYXJnV2l0aFN1ZmZpeDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFyZ1RocmVzaG9sZHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0aCA9IE9iamVjdC5hc3NpZ24oe30sIHRocmVzaG9sZHMsIGFyZ1RocmVzaG9sZHMpO1xuICAgICAgICAgICAgaWYgKGFyZ1RocmVzaG9sZHMucyAhPSBudWxsICYmIGFyZ1RocmVzaG9sZHMuc3MgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoLnNzID0gYXJnVGhyZXNob2xkcy5zIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxvY2FsZSA9IHRoaXMubG9jYWxlRGF0YSgpO1xuICAgICAgICBvdXRwdXQgPSByZWxhdGl2ZVRpbWUkMSh0aGlzLCAhd2l0aFN1ZmZpeCwgdGgsIGxvY2FsZSk7XG5cbiAgICAgICAgaWYgKHdpdGhTdWZmaXgpIHtcbiAgICAgICAgICAgIG91dHB1dCA9IGxvY2FsZS5wYXN0RnV0dXJlKCt0aGlzLCBvdXRwdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxvY2FsZS5wb3N0Zm9ybWF0KG91dHB1dCk7XG4gICAgfVxuXG4gICAgdmFyIGFicyQxID0gTWF0aC5hYnM7XG5cbiAgICBmdW5jdGlvbiBzaWduKHgpIHtcbiAgICAgICAgcmV0dXJuICh4ID4gMCkgLSAoeCA8IDApIHx8ICt4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSVNPU3RyaW5nJDEoKSB7XG4gICAgICAgIC8vIGZvciBJU08gc3RyaW5ncyB3ZSBkbyBub3QgdXNlIHRoZSBub3JtYWwgYnViYmxpbmcgcnVsZXM6XG4gICAgICAgIC8vICAqIG1pbGxpc2Vjb25kcyBidWJibGUgdXAgdW50aWwgdGhleSBiZWNvbWUgaG91cnNcbiAgICAgICAgLy8gICogZGF5cyBkbyBub3QgYnViYmxlIGF0IGFsbFxuICAgICAgICAvLyAgKiBtb250aHMgYnViYmxlIHVwIHVudGlsIHRoZXkgYmVjb21lIHllYXJzXG4gICAgICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB0aGVyZSBpcyBubyBjb250ZXh0LWZyZWUgY29udmVyc2lvbiBiZXR3ZWVuIGhvdXJzIGFuZCBkYXlzXG4gICAgICAgIC8vICh0aGluayBvZiBjbG9jayBjaGFuZ2VzKVxuICAgICAgICAvLyBhbmQgYWxzbyBub3QgYmV0d2VlbiBkYXlzIGFuZCBtb250aHMgKDI4LTMxIGRheXMgcGVyIG1vbnRoKVxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzZWNvbmRzID0gYWJzJDEodGhpcy5fbWlsbGlzZWNvbmRzKSAvIDEwMDAsXG4gICAgICAgICAgICBkYXlzID0gYWJzJDEodGhpcy5fZGF5cyksXG4gICAgICAgICAgICBtb250aHMgPSBhYnMkMSh0aGlzLl9tb250aHMpLFxuICAgICAgICAgICAgbWludXRlcyxcbiAgICAgICAgICAgIGhvdXJzLFxuICAgICAgICAgICAgeWVhcnMsXG4gICAgICAgICAgICBzLFxuICAgICAgICAgICAgdG90YWwgPSB0aGlzLmFzU2Vjb25kcygpLFxuICAgICAgICAgICAgdG90YWxTaWduLFxuICAgICAgICAgICAgeW1TaWduLFxuICAgICAgICAgICAgZGF5c1NpZ24sXG4gICAgICAgICAgICBobXNTaWduO1xuXG4gICAgICAgIGlmICghdG90YWwpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIHNhbWUgYXMgQyMncyAoTm9kYSkgYW5kIHB5dGhvbiAoaXNvZGF0ZSkuLi5cbiAgICAgICAgICAgIC8vIGJ1dCBub3Qgb3RoZXIgSlMgKGdvb2cuZGF0ZSlcbiAgICAgICAgICAgIHJldHVybiAnUDBEJztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDM2MDAgc2Vjb25kcyAtPiA2MCBtaW51dGVzIC0+IDEgaG91clxuICAgICAgICBtaW51dGVzID0gYWJzRmxvb3Ioc2Vjb25kcyAvIDYwKTtcbiAgICAgICAgaG91cnMgPSBhYnNGbG9vcihtaW51dGVzIC8gNjApO1xuICAgICAgICBzZWNvbmRzICU9IDYwO1xuICAgICAgICBtaW51dGVzICU9IDYwO1xuXG4gICAgICAgIC8vIDEyIG1vbnRocyAtPiAxIHllYXJcbiAgICAgICAgeWVhcnMgPSBhYnNGbG9vcihtb250aHMgLyAxMik7XG4gICAgICAgIG1vbnRocyAlPSAxMjtcblxuICAgICAgICAvLyBpbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vZG9yZGlsbGUvbW9tZW50LWlzb2R1cmF0aW9uL2Jsb2IvbWFzdGVyL21vbWVudC5pc29kdXJhdGlvbi5qc1xuICAgICAgICBzID0gc2Vjb25kcyA/IHNlY29uZHMudG9GaXhlZCgzKS5yZXBsYWNlKC9cXC4/MCskLywgJycpIDogJyc7XG5cbiAgICAgICAgdG90YWxTaWduID0gdG90YWwgPCAwID8gJy0nIDogJyc7XG4gICAgICAgIHltU2lnbiA9IHNpZ24odGhpcy5fbW9udGhzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcbiAgICAgICAgZGF5c1NpZ24gPSBzaWduKHRoaXMuX2RheXMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuICAgICAgICBobXNTaWduID0gc2lnbih0aGlzLl9taWxsaXNlY29uZHMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0b3RhbFNpZ24gK1xuICAgICAgICAgICAgJ1AnICtcbiAgICAgICAgICAgICh5ZWFycyA/IHltU2lnbiArIHllYXJzICsgJ1knIDogJycpICtcbiAgICAgICAgICAgIChtb250aHMgPyB5bVNpZ24gKyBtb250aHMgKyAnTScgOiAnJykgK1xuICAgICAgICAgICAgKGRheXMgPyBkYXlzU2lnbiArIGRheXMgKyAnRCcgOiAnJykgK1xuICAgICAgICAgICAgKGhvdXJzIHx8IG1pbnV0ZXMgfHwgc2Vjb25kcyA/ICdUJyA6ICcnKSArXG4gICAgICAgICAgICAoaG91cnMgPyBobXNTaWduICsgaG91cnMgKyAnSCcgOiAnJykgK1xuICAgICAgICAgICAgKG1pbnV0ZXMgPyBobXNTaWduICsgbWludXRlcyArICdNJyA6ICcnKSArXG4gICAgICAgICAgICAoc2Vjb25kcyA/IGhtc1NpZ24gKyBzICsgJ1MnIDogJycpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvJDIgPSBEdXJhdGlvbi5wcm90b3R5cGU7XG5cbiAgICBwcm90byQyLmlzVmFsaWQgPSBpc1ZhbGlkJDE7XG4gICAgcHJvdG8kMi5hYnMgPSBhYnM7XG4gICAgcHJvdG8kMi5hZGQgPSBhZGQkMTtcbiAgICBwcm90byQyLnN1YnRyYWN0ID0gc3VidHJhY3QkMTtcbiAgICBwcm90byQyLmFzID0gYXM7XG4gICAgcHJvdG8kMi5hc01pbGxpc2Vjb25kcyA9IGFzTWlsbGlzZWNvbmRzO1xuICAgIHByb3RvJDIuYXNTZWNvbmRzID0gYXNTZWNvbmRzO1xuICAgIHByb3RvJDIuYXNNaW51dGVzID0gYXNNaW51dGVzO1xuICAgIHByb3RvJDIuYXNIb3VycyA9IGFzSG91cnM7XG4gICAgcHJvdG8kMi5hc0RheXMgPSBhc0RheXM7XG4gICAgcHJvdG8kMi5hc1dlZWtzID0gYXNXZWVrcztcbiAgICBwcm90byQyLmFzTW9udGhzID0gYXNNb250aHM7XG4gICAgcHJvdG8kMi5hc1F1YXJ0ZXJzID0gYXNRdWFydGVycztcbiAgICBwcm90byQyLmFzWWVhcnMgPSBhc1llYXJzO1xuICAgIHByb3RvJDIudmFsdWVPZiA9IHZhbHVlT2YkMTtcbiAgICBwcm90byQyLl9idWJibGUgPSBidWJibGU7XG4gICAgcHJvdG8kMi5jbG9uZSA9IGNsb25lJDE7XG4gICAgcHJvdG8kMi5nZXQgPSBnZXQkMjtcbiAgICBwcm90byQyLm1pbGxpc2Vjb25kcyA9IG1pbGxpc2Vjb25kcztcbiAgICBwcm90byQyLnNlY29uZHMgPSBzZWNvbmRzO1xuICAgIHByb3RvJDIubWludXRlcyA9IG1pbnV0ZXM7XG4gICAgcHJvdG8kMi5ob3VycyA9IGhvdXJzO1xuICAgIHByb3RvJDIuZGF5cyA9IGRheXM7XG4gICAgcHJvdG8kMi53ZWVrcyA9IHdlZWtzO1xuICAgIHByb3RvJDIubW9udGhzID0gbW9udGhzO1xuICAgIHByb3RvJDIueWVhcnMgPSB5ZWFycztcbiAgICBwcm90byQyLmh1bWFuaXplID0gaHVtYW5pemU7XG4gICAgcHJvdG8kMi50b0lTT1N0cmluZyA9IHRvSVNPU3RyaW5nJDE7XG4gICAgcHJvdG8kMi50b1N0cmluZyA9IHRvSVNPU3RyaW5nJDE7XG4gICAgcHJvdG8kMi50b0pTT04gPSB0b0lTT1N0cmluZyQxO1xuICAgIHByb3RvJDIubG9jYWxlID0gbG9jYWxlO1xuICAgIHByb3RvJDIubG9jYWxlRGF0YSA9IGxvY2FsZURhdGE7XG5cbiAgICBwcm90byQyLnRvSXNvU3RyaW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAndG9Jc29TdHJpbmcoKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHRvSVNPU3RyaW5nKCkgaW5zdGVhZCAobm90aWNlIHRoZSBjYXBpdGFscyknLFxuICAgICAgICB0b0lTT1N0cmluZyQxXG4gICAgKTtcbiAgICBwcm90byQyLmxhbmcgPSBsYW5nO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1gnLCAwLCAwLCAndW5peCcpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd4JywgMCwgMCwgJ3ZhbHVlT2YnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3gnLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignWCcsIG1hdGNoVGltZXN0YW1wKTtcbiAgICBhZGRQYXJzZVRva2VuKCdYJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKHBhcnNlRmxvYXQoaW5wdXQpICogMTAwMCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbigneCcsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZSh0b0ludChpbnB1dCkpO1xuICAgIH0pO1xuXG4gICAgLy8hIG1vbWVudC5qc1xuXG4gICAgaG9va3MudmVyc2lvbiA9ICcyLjI5LjEnO1xuXG4gICAgc2V0SG9va0NhbGxiYWNrKGNyZWF0ZUxvY2FsKTtcblxuICAgIGhvb2tzLmZuID0gcHJvdG87XG4gICAgaG9va3MubWluID0gbWluO1xuICAgIGhvb2tzLm1heCA9IG1heDtcbiAgICBob29rcy5ub3cgPSBub3c7XG4gICAgaG9va3MudXRjID0gY3JlYXRlVVRDO1xuICAgIGhvb2tzLnVuaXggPSBjcmVhdGVVbml4O1xuICAgIGhvb2tzLm1vbnRocyA9IGxpc3RNb250aHM7XG4gICAgaG9va3MuaXNEYXRlID0gaXNEYXRlO1xuICAgIGhvb2tzLmxvY2FsZSA9IGdldFNldEdsb2JhbExvY2FsZTtcbiAgICBob29rcy5pbnZhbGlkID0gY3JlYXRlSW52YWxpZDtcbiAgICBob29rcy5kdXJhdGlvbiA9IGNyZWF0ZUR1cmF0aW9uO1xuICAgIGhvb2tzLmlzTW9tZW50ID0gaXNNb21lbnQ7XG4gICAgaG9va3Mud2Vla2RheXMgPSBsaXN0V2Vla2RheXM7XG4gICAgaG9va3MucGFyc2Vab25lID0gY3JlYXRlSW5ab25lO1xuICAgIGhvb2tzLmxvY2FsZURhdGEgPSBnZXRMb2NhbGU7XG4gICAgaG9va3MuaXNEdXJhdGlvbiA9IGlzRHVyYXRpb247XG4gICAgaG9va3MubW9udGhzU2hvcnQgPSBsaXN0TW9udGhzU2hvcnQ7XG4gICAgaG9va3Mud2Vla2RheXNNaW4gPSBsaXN0V2Vla2RheXNNaW47XG4gICAgaG9va3MuZGVmaW5lTG9jYWxlID0gZGVmaW5lTG9jYWxlO1xuICAgIGhvb2tzLnVwZGF0ZUxvY2FsZSA9IHVwZGF0ZUxvY2FsZTtcbiAgICBob29rcy5sb2NhbGVzID0gbGlzdExvY2FsZXM7XG4gICAgaG9va3Mud2Vla2RheXNTaG9ydCA9IGxpc3RXZWVrZGF5c1Nob3J0O1xuICAgIGhvb2tzLm5vcm1hbGl6ZVVuaXRzID0gbm9ybWFsaXplVW5pdHM7XG4gICAgaG9va3MucmVsYXRpdmVUaW1lUm91bmRpbmcgPSBnZXRTZXRSZWxhdGl2ZVRpbWVSb3VuZGluZztcbiAgICBob29rcy5yZWxhdGl2ZVRpbWVUaHJlc2hvbGQgPSBnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQ7XG4gICAgaG9va3MuY2FsZW5kYXJGb3JtYXQgPSBnZXRDYWxlbmRhckZvcm1hdDtcbiAgICBob29rcy5wcm90b3R5cGUgPSBwcm90bztcblxuICAgIC8vIGN1cnJlbnRseSBIVE1MNSBpbnB1dCB0eXBlIG9ubHkgc3VwcG9ydHMgMjQtaG91ciBmb3JtYXRzXG4gICAgaG9va3MuSFRNTDVfRk1UID0ge1xuICAgICAgICBEQVRFVElNRV9MT0NBTDogJ1lZWVktTU0tRERUSEg6bW0nLCAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgLz5cbiAgICAgICAgREFURVRJTUVfTE9DQUxfU0VDT05EUzogJ1lZWVktTU0tRERUSEg6bW06c3MnLCAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgc3RlcD1cIjFcIiAvPlxuICAgICAgICBEQVRFVElNRV9MT0NBTF9NUzogJ1lZWVktTU0tRERUSEg6bW06c3MuU1NTJywgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIHN0ZXA9XCIwLjAwMVwiIC8+XG4gICAgICAgIERBVEU6ICdZWVlZLU1NLUREJywgLy8gPGlucHV0IHR5cGU9XCJkYXRlXCIgLz5cbiAgICAgICAgVElNRTogJ0hIOm1tJywgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgLz5cbiAgICAgICAgVElNRV9TRUNPTkRTOiAnSEg6bW06c3MnLCAvLyA8aW5wdXQgdHlwZT1cInRpbWVcIiBzdGVwPVwiMVwiIC8+XG4gICAgICAgIFRJTUVfTVM6ICdISDptbTpzcy5TU1MnLCAvLyA8aW5wdXQgdHlwZT1cInRpbWVcIiBzdGVwPVwiMC4wMDFcIiAvPlxuICAgICAgICBXRUVLOiAnR0dHRy1bV11XVycsIC8vIDxpbnB1dCB0eXBlPVwid2Vla1wiIC8+XG4gICAgICAgIE1PTlRIOiAnWVlZWS1NTScsIC8vIDxpbnB1dCB0eXBlPVwibW9udGhcIiAvPlxuICAgIH07XG5cbiAgICByZXR1cm4gaG9va3M7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LXRpbWV6b25lLmpzXG4vLyEgdmVyc2lvbiA6IDAuNS4zNFxuLy8hIENvcHlyaWdodCAoYykgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4vLyEgbGljZW5zZSA6IE1JVFxuLy8hIGdpdGh1Yi5jb20vbW9tZW50L21vbWVudC10aW1lem9uZVxuXG4oZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0LypnbG9iYWwgZGVmaW5lKi9cblx0aWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoJ21vbWVudCcpKTsgLy8gTm9kZVxuXHR9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuXHRcdGRlZmluZShbJ21vbWVudCddLCBmYWN0b3J5KTsgICAgICAgICAgICAgICAgIC8vIEFNRFxuXHR9IGVsc2Uge1xuXHRcdGZhY3Rvcnkocm9vdC5tb21lbnQpOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJyb3dzZXJcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAobW9tZW50KSB7XG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdC8vIFJlc29sdmVzIGVzNiBtb2R1bGUgbG9hZGluZyBpc3N1ZVxuXHRpZiAobW9tZW50LnZlcnNpb24gPT09IHVuZGVmaW5lZCAmJiBtb21lbnQuZGVmYXVsdCkge1xuXHRcdG1vbWVudCA9IG1vbWVudC5kZWZhdWx0O1xuXHR9XG5cblx0Ly8gRG8gbm90IGxvYWQgbW9tZW50LXRpbWV6b25lIGEgc2Vjb25kIHRpbWUuXG5cdC8vIGlmIChtb21lbnQudHogIT09IHVuZGVmaW5lZCkge1xuXHQvLyBcdGxvZ0Vycm9yKCdNb21lbnQgVGltZXpvbmUgJyArIG1vbWVudC50ei52ZXJzaW9uICsgJyB3YXMgYWxyZWFkeSBsb2FkZWQgJyArIChtb21lbnQudHouZGF0YVZlcnNpb24gPyAnd2l0aCBkYXRhIGZyb20gJyA6ICd3aXRob3V0IGFueSBkYXRhJykgKyBtb21lbnQudHouZGF0YVZlcnNpb24pO1xuXHQvLyBcdHJldHVybiBtb21lbnQ7XG5cdC8vIH1cblxuXHR2YXIgVkVSU0lPTiA9IFwiMC41LjM0XCIsXG5cdFx0em9uZXMgPSB7fSxcblx0XHRsaW5rcyA9IHt9LFxuXHRcdGNvdW50cmllcyA9IHt9LFxuXHRcdG5hbWVzID0ge30sXG5cdFx0Z3Vlc3NlcyA9IHt9LFxuXHRcdGNhY2hlZEd1ZXNzO1xuXG5cdGlmICghbW9tZW50IHx8IHR5cGVvZiBtb21lbnQudmVyc2lvbiAhPT0gJ3N0cmluZycpIHtcblx0XHRsb2dFcnJvcignTW9tZW50IFRpbWV6b25lIHJlcXVpcmVzIE1vbWVudC5qcy4gU2VlIGh0dHBzOi8vbW9tZW50anMuY29tL3RpbWV6b25lL2RvY3MvIy91c2UtaXQvYnJvd3Nlci8nKTtcblx0fVxuXG5cdHZhciBtb21lbnRWZXJzaW9uID0gbW9tZW50LnZlcnNpb24uc3BsaXQoJy4nKSxcblx0XHRtYWpvciA9ICttb21lbnRWZXJzaW9uWzBdLFxuXHRcdG1pbm9yID0gK21vbWVudFZlcnNpb25bMV07XG5cblx0Ly8gTW9tZW50LmpzIHZlcnNpb24gY2hlY2tcblx0aWYgKG1ham9yIDwgMiB8fCAobWFqb3IgPT09IDIgJiYgbWlub3IgPCA2KSkge1xuXHRcdGxvZ0Vycm9yKCdNb21lbnQgVGltZXpvbmUgcmVxdWlyZXMgTW9tZW50LmpzID49IDIuNi4wLiBZb3UgYXJlIHVzaW5nIE1vbWVudC5qcyAnICsgbW9tZW50LnZlcnNpb24gKyAnLiBTZWUgbW9tZW50anMuY29tJyk7XG5cdH1cblxuXHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cdFx0VW5wYWNraW5nXG5cdCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuXHRmdW5jdGlvbiBjaGFyQ29kZVRvSW50KGNoYXJDb2RlKSB7XG5cdFx0aWYgKGNoYXJDb2RlID4gOTYpIHtcblx0XHRcdHJldHVybiBjaGFyQ29kZSAtIDg3O1xuXHRcdH0gZWxzZSBpZiAoY2hhckNvZGUgPiA2NCkge1xuXHRcdFx0cmV0dXJuIGNoYXJDb2RlIC0gMjk7XG5cdFx0fVxuXHRcdHJldHVybiBjaGFyQ29kZSAtIDQ4O1xuXHR9XG5cblx0ZnVuY3Rpb24gdW5wYWNrQmFzZTYwKHN0cmluZykge1xuXHRcdHZhciBpID0gMCxcblx0XHRcdHBhcnRzID0gc3RyaW5nLnNwbGl0KCcuJyksXG5cdFx0XHR3aG9sZSA9IHBhcnRzWzBdLFxuXHRcdFx0ZnJhY3Rpb25hbCA9IHBhcnRzWzFdIHx8ICcnLFxuXHRcdFx0bXVsdGlwbGllciA9IDEsXG5cdFx0XHRudW0sXG5cdFx0XHRvdXQgPSAwLFxuXHRcdFx0c2lnbiA9IDE7XG5cblx0XHQvLyBoYW5kbGUgbmVnYXRpdmUgbnVtYmVyc1xuXHRcdGlmIChzdHJpbmcuY2hhckNvZGVBdCgwKSA9PT0gNDUpIHtcblx0XHRcdGkgPSAxO1xuXHRcdFx0c2lnbiA9IC0xO1xuXHRcdH1cblxuXHRcdC8vIGhhbmRsZSBkaWdpdHMgYmVmb3JlIHRoZSBkZWNpbWFsXG5cdFx0Zm9yIChpOyBpIDwgd2hvbGUubGVuZ3RoOyBpKyspIHtcblx0XHRcdG51bSA9IGNoYXJDb2RlVG9JbnQod2hvbGUuY2hhckNvZGVBdChpKSk7XG5cdFx0XHRvdXQgPSA2MCAqIG91dCArIG51bTtcblx0XHR9XG5cblx0XHQvLyBoYW5kbGUgZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFsXG5cdFx0Zm9yIChpID0gMDsgaSA8IGZyYWN0aW9uYWwubGVuZ3RoOyBpKyspIHtcblx0XHRcdG11bHRpcGxpZXIgPSBtdWx0aXBsaWVyIC8gNjA7XG5cdFx0XHRudW0gPSBjaGFyQ29kZVRvSW50KGZyYWN0aW9uYWwuY2hhckNvZGVBdChpKSk7XG5cdFx0XHRvdXQgKz0gbnVtICogbXVsdGlwbGllcjtcblx0XHR9XG5cblx0XHRyZXR1cm4gb3V0ICogc2lnbjtcblx0fVxuXG5cdGZ1bmN0aW9uIGFycmF5VG9JbnQgKGFycmF5KSB7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuXHRcdFx0YXJyYXlbaV0gPSB1bnBhY2tCYXNlNjAoYXJyYXlbaV0pO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGludFRvVW50aWwgKGFycmF5LCBsZW5ndGgpIHtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG5cdFx0XHRhcnJheVtpXSA9IE1hdGgucm91bmQoKGFycmF5W2kgLSAxXSB8fCAwKSArIChhcnJheVtpXSAqIDYwMDAwKSk7IC8vIG1pbnV0ZXMgdG8gbWlsbGlzZWNvbmRzXG5cdFx0fVxuXG5cdFx0YXJyYXlbbGVuZ3RoIC0gMV0gPSBJbmZpbml0eTtcblx0fVxuXG5cdGZ1bmN0aW9uIG1hcEluZGljZXMgKHNvdXJjZSwgaW5kaWNlcykge1xuXHRcdHZhciBvdXQgPSBbXSwgaTtcblxuXHRcdGZvciAoaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRvdXRbaV0gPSBzb3VyY2VbaW5kaWNlc1tpXV07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG91dDtcblx0fVxuXG5cdGZ1bmN0aW9uIHVucGFjayAoc3RyaW5nKSB7XG5cdFx0dmFyIGRhdGEgPSBzdHJpbmcuc3BsaXQoJ3wnKSxcblx0XHRcdG9mZnNldHMgPSBkYXRhWzJdLnNwbGl0KCcgJyksXG5cdFx0XHRpbmRpY2VzID0gZGF0YVszXS5zcGxpdCgnJyksXG5cdFx0XHR1bnRpbHMgID0gZGF0YVs0XS5zcGxpdCgnICcpO1xuXG5cdFx0YXJyYXlUb0ludChvZmZzZXRzKTtcblx0XHRhcnJheVRvSW50KGluZGljZXMpO1xuXHRcdGFycmF5VG9JbnQodW50aWxzKTtcblxuXHRcdGludFRvVW50aWwodW50aWxzLCBpbmRpY2VzLmxlbmd0aCk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0bmFtZSAgICAgICA6IGRhdGFbMF0sXG5cdFx0XHRhYmJycyAgICAgIDogbWFwSW5kaWNlcyhkYXRhWzFdLnNwbGl0KCcgJyksIGluZGljZXMpLFxuXHRcdFx0b2Zmc2V0cyAgICA6IG1hcEluZGljZXMob2Zmc2V0cywgaW5kaWNlcyksXG5cdFx0XHR1bnRpbHMgICAgIDogdW50aWxzLFxuXHRcdFx0cG9wdWxhdGlvbiA6IGRhdGFbNV0gfCAwXG5cdFx0fTtcblx0fVxuXG5cdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblx0XHRab25lIG9iamVjdFxuXHQqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cblx0ZnVuY3Rpb24gWm9uZSAocGFja2VkU3RyaW5nKSB7XG5cdFx0aWYgKHBhY2tlZFN0cmluZykge1xuXHRcdFx0dGhpcy5fc2V0KHVucGFjayhwYWNrZWRTdHJpbmcpKTtcblx0XHR9XG5cdH1cblxuXHRab25lLnByb3RvdHlwZSA9IHtcblx0XHRfc2V0IDogZnVuY3Rpb24gKHVucGFja2VkKSB7XG5cdFx0XHR0aGlzLm5hbWUgICAgICAgPSB1bnBhY2tlZC5uYW1lO1xuXHRcdFx0dGhpcy5hYmJycyAgICAgID0gdW5wYWNrZWQuYWJicnM7XG5cdFx0XHR0aGlzLnVudGlscyAgICAgPSB1bnBhY2tlZC51bnRpbHM7XG5cdFx0XHR0aGlzLm9mZnNldHMgICAgPSB1bnBhY2tlZC5vZmZzZXRzO1xuXHRcdFx0dGhpcy5wb3B1bGF0aW9uID0gdW5wYWNrZWQucG9wdWxhdGlvbjtcblx0XHR9LFxuXG5cdFx0X2luZGV4IDogZnVuY3Rpb24gKHRpbWVzdGFtcCkge1xuXHRcdFx0dmFyIHRhcmdldCA9ICt0aW1lc3RhbXAsXG5cdFx0XHRcdHVudGlscyA9IHRoaXMudW50aWxzLFxuXHRcdFx0XHRpO1xuXG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgdW50aWxzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmICh0YXJnZXQgPCB1bnRpbHNbaV0pIHtcblx0XHRcdFx0XHRyZXR1cm4gaTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRjb3VudHJpZXMgOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHR2YXIgem9uZV9uYW1lID0gdGhpcy5uYW1lO1xuXHRcdFx0cmV0dXJuIE9iamVjdC5rZXlzKGNvdW50cmllcykuZmlsdGVyKGZ1bmN0aW9uIChjb3VudHJ5X2NvZGUpIHtcblx0XHRcdFx0cmV0dXJuIGNvdW50cmllc1tjb3VudHJ5X2NvZGVdLnpvbmVzLmluZGV4T2Yoem9uZV9uYW1lKSAhPT0gLTE7XG5cdFx0XHR9KTtcblx0XHR9LFxuXG5cdFx0cGFyc2UgOiBmdW5jdGlvbiAodGltZXN0YW1wKSB7XG5cdFx0XHR2YXIgdGFyZ2V0ICA9ICt0aW1lc3RhbXAsXG5cdFx0XHRcdG9mZnNldHMgPSB0aGlzLm9mZnNldHMsXG5cdFx0XHRcdHVudGlscyAgPSB0aGlzLnVudGlscyxcblx0XHRcdFx0bWF4ICAgICA9IHVudGlscy5sZW5ndGggLSAxLFxuXHRcdFx0XHRvZmZzZXQsIG9mZnNldE5leHQsIG9mZnNldFByZXYsIGk7XG5cblx0XHRcdGZvciAoaSA9IDA7IGkgPCBtYXg7IGkrKykge1xuXHRcdFx0XHRvZmZzZXQgICAgID0gb2Zmc2V0c1tpXTtcblx0XHRcdFx0b2Zmc2V0TmV4dCA9IG9mZnNldHNbaSArIDFdO1xuXHRcdFx0XHRvZmZzZXRQcmV2ID0gb2Zmc2V0c1tpID8gaSAtIDEgOiBpXTtcblxuXHRcdFx0XHRpZiAob2Zmc2V0IDwgb2Zmc2V0TmV4dCAmJiB0ei5tb3ZlQW1iaWd1b3VzRm9yd2FyZCkge1xuXHRcdFx0XHRcdG9mZnNldCA9IG9mZnNldE5leHQ7XG5cdFx0XHRcdH0gZWxzZSBpZiAob2Zmc2V0ID4gb2Zmc2V0UHJldiAmJiB0ei5tb3ZlSW52YWxpZEZvcndhcmQpIHtcblx0XHRcdFx0XHRvZmZzZXQgPSBvZmZzZXRQcmV2O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHRhcmdldCA8IHVudGlsc1tpXSAtIChvZmZzZXQgKiA2MDAwMCkpIHtcblx0XHRcdFx0XHRyZXR1cm4gb2Zmc2V0c1tpXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gb2Zmc2V0c1ttYXhdO1xuXHRcdH0sXG5cblx0XHRhYmJyIDogZnVuY3Rpb24gKG1vbSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuYWJicnNbdGhpcy5faW5kZXgobW9tKV07XG5cdFx0fSxcblxuXHRcdG9mZnNldCA6IGZ1bmN0aW9uIChtb20pIHtcblx0XHRcdGxvZ0Vycm9yKFwiem9uZS5vZmZzZXQgaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiBmYXZvciBvZiB6b25lLnV0Y09mZnNldFwiKTtcblx0XHRcdHJldHVybiB0aGlzLm9mZnNldHNbdGhpcy5faW5kZXgobW9tKV07XG5cdFx0fSxcblxuXHRcdHV0Y09mZnNldCA6IGZ1bmN0aW9uIChtb20pIHtcblx0XHRcdHJldHVybiB0aGlzLm9mZnNldHNbdGhpcy5faW5kZXgobW9tKV07XG5cdFx0fVxuXHR9O1xuXG5cdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblx0XHRDb3VudHJ5IG9iamVjdFxuXHQqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cblx0ZnVuY3Rpb24gQ291bnRyeSAoY291bnRyeV9uYW1lLCB6b25lX25hbWVzKSB7XG5cdFx0dGhpcy5uYW1lID0gY291bnRyeV9uYW1lO1xuXHRcdHRoaXMuem9uZXMgPSB6b25lX25hbWVzO1xuXHR9XG5cblx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXHRcdEN1cnJlbnQgVGltZXpvbmVcblx0KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cdGZ1bmN0aW9uIE9mZnNldEF0KGF0KSB7XG5cdFx0dmFyIHRpbWVTdHJpbmcgPSBhdC50b1RpbWVTdHJpbmcoKTtcblx0XHR2YXIgYWJiciA9IHRpbWVTdHJpbmcubWF0Y2goL1xcKFthLXogXStcXCkvaSk7XG5cdFx0aWYgKGFiYnIgJiYgYWJiclswXSkge1xuXHRcdFx0Ly8gMTc6NTY6MzEgR01ULTA2MDAgKENTVClcblx0XHRcdC8vIDE3OjU2OjMxIEdNVC0wNjAwIChDZW50cmFsIFN0YW5kYXJkIFRpbWUpXG5cdFx0XHRhYmJyID0gYWJiclswXS5tYXRjaCgvW0EtWl0vZyk7XG5cdFx0XHRhYmJyID0gYWJiciA/IGFiYnIuam9pbignJykgOiB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIDE3OjU2OjMxIENTVFxuXHRcdFx0Ly8gMTc6NTY6MzEgR01UKzA4MDAgKOWPsOWMl+aomea6luaZgumWkylcblx0XHRcdGFiYnIgPSB0aW1lU3RyaW5nLm1hdGNoKC9bQS1aXXszLDV9L2cpO1xuXHRcdFx0YWJiciA9IGFiYnIgPyBhYmJyWzBdIDogdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdGlmIChhYmJyID09PSAnR01UJykge1xuXHRcdFx0YWJiciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHR0aGlzLmF0ID0gK2F0O1xuXHRcdHRoaXMuYWJiciA9IGFiYnI7XG5cdFx0dGhpcy5vZmZzZXQgPSBhdC5nZXRUaW1lem9uZU9mZnNldCgpO1xuXHR9XG5cblx0ZnVuY3Rpb24gWm9uZVNjb3JlKHpvbmUpIHtcblx0XHR0aGlzLnpvbmUgPSB6b25lO1xuXHRcdHRoaXMub2Zmc2V0U2NvcmUgPSAwO1xuXHRcdHRoaXMuYWJiclNjb3JlID0gMDtcblx0fVxuXG5cdFpvbmVTY29yZS5wcm90b3R5cGUuc2NvcmVPZmZzZXRBdCA9IGZ1bmN0aW9uIChvZmZzZXRBdCkge1xuXHRcdHRoaXMub2Zmc2V0U2NvcmUgKz0gTWF0aC5hYnModGhpcy56b25lLnV0Y09mZnNldChvZmZzZXRBdC5hdCkgLSBvZmZzZXRBdC5vZmZzZXQpO1xuXHRcdGlmICh0aGlzLnpvbmUuYWJicihvZmZzZXRBdC5hdCkucmVwbGFjZSgvW15BLVpdL2csICcnKSAhPT0gb2Zmc2V0QXQuYWJicikge1xuXHRcdFx0dGhpcy5hYmJyU2NvcmUrKztcblx0XHR9XG5cdH07XG5cblx0ZnVuY3Rpb24gZmluZENoYW5nZShsb3csIGhpZ2gpIHtcblx0XHR2YXIgbWlkLCBkaWZmO1xuXG5cdFx0d2hpbGUgKChkaWZmID0gKChoaWdoLmF0IC0gbG93LmF0KSAvIDEyZTQgfCAwKSAqIDZlNCkpIHtcblx0XHRcdG1pZCA9IG5ldyBPZmZzZXRBdChuZXcgRGF0ZShsb3cuYXQgKyBkaWZmKSk7XG5cdFx0XHRpZiAobWlkLm9mZnNldCA9PT0gbG93Lm9mZnNldCkge1xuXHRcdFx0XHRsb3cgPSBtaWQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRoaWdoID0gbWlkO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBsb3c7XG5cdH1cblxuXHRmdW5jdGlvbiB1c2VyT2Zmc2V0cygpIHtcblx0XHR2YXIgc3RhcnRZZWFyID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpIC0gMixcblx0XHRcdGxhc3QgPSBuZXcgT2Zmc2V0QXQobmV3IERhdGUoc3RhcnRZZWFyLCAwLCAxKSksXG5cdFx0XHRvZmZzZXRzID0gW2xhc3RdLFxuXHRcdFx0Y2hhbmdlLCBuZXh0LCBpO1xuXG5cdFx0Zm9yIChpID0gMTsgaSA8IDQ4OyBpKyspIHtcblx0XHRcdG5leHQgPSBuZXcgT2Zmc2V0QXQobmV3IERhdGUoc3RhcnRZZWFyLCBpLCAxKSk7XG5cdFx0XHRpZiAobmV4dC5vZmZzZXQgIT09IGxhc3Qub2Zmc2V0KSB7XG5cdFx0XHRcdGNoYW5nZSA9IGZpbmRDaGFuZ2UobGFzdCwgbmV4dCk7XG5cdFx0XHRcdG9mZnNldHMucHVzaChjaGFuZ2UpO1xuXHRcdFx0XHRvZmZzZXRzLnB1c2gobmV3IE9mZnNldEF0KG5ldyBEYXRlKGNoYW5nZS5hdCArIDZlNCkpKTtcblx0XHRcdH1cblx0XHRcdGxhc3QgPSBuZXh0O1xuXHRcdH1cblxuXHRcdGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHtcblx0XHRcdG9mZnNldHMucHVzaChuZXcgT2Zmc2V0QXQobmV3IERhdGUoc3RhcnRZZWFyICsgaSwgMCwgMSkpKTtcblx0XHRcdG9mZnNldHMucHVzaChuZXcgT2Zmc2V0QXQobmV3IERhdGUoc3RhcnRZZWFyICsgaSwgNiwgMSkpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gb2Zmc2V0cztcblx0fVxuXG5cdGZ1bmN0aW9uIHNvcnRab25lU2NvcmVzIChhLCBiKSB7XG5cdFx0aWYgKGEub2Zmc2V0U2NvcmUgIT09IGIub2Zmc2V0U2NvcmUpIHtcblx0XHRcdHJldHVybiBhLm9mZnNldFNjb3JlIC0gYi5vZmZzZXRTY29yZTtcblx0XHR9XG5cdFx0aWYgKGEuYWJiclNjb3JlICE9PSBiLmFiYnJTY29yZSkge1xuXHRcdFx0cmV0dXJuIGEuYWJiclNjb3JlIC0gYi5hYmJyU2NvcmU7XG5cdFx0fVxuXHRcdGlmIChhLnpvbmUucG9wdWxhdGlvbiAhPT0gYi56b25lLnBvcHVsYXRpb24pIHtcblx0XHRcdHJldHVybiBiLnpvbmUucG9wdWxhdGlvbiAtIGEuem9uZS5wb3B1bGF0aW9uO1xuXHRcdH1cblx0XHRyZXR1cm4gYi56b25lLm5hbWUubG9jYWxlQ29tcGFyZShhLnpvbmUubmFtZSk7XG5cdH1cblxuXHRmdW5jdGlvbiBhZGRUb0d1ZXNzZXMgKG5hbWUsIG9mZnNldHMpIHtcblx0XHR2YXIgaSwgb2Zmc2V0O1xuXHRcdGFycmF5VG9JbnQob2Zmc2V0cyk7XG5cdFx0Zm9yIChpID0gMDsgaSA8IG9mZnNldHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdG9mZnNldCA9IG9mZnNldHNbaV07XG5cdFx0XHRndWVzc2VzW29mZnNldF0gPSBndWVzc2VzW29mZnNldF0gfHwge307XG5cdFx0XHRndWVzc2VzW29mZnNldF1bbmFtZV0gPSB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGd1ZXNzZXNGb3JVc2VyT2Zmc2V0cyAob2Zmc2V0cykge1xuXHRcdHZhciBvZmZzZXRzTGVuZ3RoID0gb2Zmc2V0cy5sZW5ndGgsXG5cdFx0XHRmaWx0ZXJlZEd1ZXNzZXMgPSB7fSxcblx0XHRcdG91dCA9IFtdLFxuXHRcdFx0aSwgaiwgZ3Vlc3Nlc09mZnNldDtcblxuXHRcdGZvciAoaSA9IDA7IGkgPCBvZmZzZXRzTGVuZ3RoOyBpKyspIHtcblx0XHRcdGd1ZXNzZXNPZmZzZXQgPSBndWVzc2VzW29mZnNldHNbaV0ub2Zmc2V0XSB8fCB7fTtcblx0XHRcdGZvciAoaiBpbiBndWVzc2VzT2Zmc2V0KSB7XG5cdFx0XHRcdGlmIChndWVzc2VzT2Zmc2V0Lmhhc093blByb3BlcnR5KGopKSB7XG5cdFx0XHRcdFx0ZmlsdGVyZWRHdWVzc2VzW2pdID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAoaSBpbiBmaWx0ZXJlZEd1ZXNzZXMpIHtcblx0XHRcdGlmIChmaWx0ZXJlZEd1ZXNzZXMuaGFzT3duUHJvcGVydHkoaSkpIHtcblx0XHRcdFx0b3V0LnB1c2gobmFtZXNbaV0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBvdXQ7XG5cdH1cblxuXHRmdW5jdGlvbiByZWJ1aWxkR3Vlc3MgKCkge1xuXG5cdFx0Ly8gdXNlIEludGwgQVBJIHdoZW4gYXZhaWxhYmxlIGFuZCByZXR1cm5pbmcgdmFsaWQgdGltZSB6b25lXG5cdFx0dHJ5IHtcblx0XHRcdHZhciBpbnRsTmFtZSA9IEludGwuRGF0ZVRpbWVGb3JtYXQoKS5yZXNvbHZlZE9wdGlvbnMoKS50aW1lWm9uZTtcblx0XHRcdGlmIChpbnRsTmFtZSAmJiBpbnRsTmFtZS5sZW5ndGggPiAzKSB7XG5cdFx0XHRcdHZhciBuYW1lID0gbmFtZXNbbm9ybWFsaXplTmFtZShpbnRsTmFtZSldO1xuXHRcdFx0XHRpZiAobmFtZSkge1xuXHRcdFx0XHRcdHJldHVybiBuYW1lO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxvZ0Vycm9yKFwiTW9tZW50IFRpbWV6b25lIGZvdW5kIFwiICsgaW50bE5hbWUgKyBcIiBmcm9tIHRoZSBJbnRsIGFwaSwgYnV0IGRpZCBub3QgaGF2ZSB0aGF0IGRhdGEgbG9hZGVkLlwiKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHQvLyBJbnRsIHVuYXZhaWxhYmxlLCBmYWxsIGJhY2sgdG8gbWFudWFsIGd1ZXNzaW5nLlxuXHRcdH1cblxuXHRcdHZhciBvZmZzZXRzID0gdXNlck9mZnNldHMoKSxcblx0XHRcdG9mZnNldHNMZW5ndGggPSBvZmZzZXRzLmxlbmd0aCxcblx0XHRcdGd1ZXNzZXMgPSBndWVzc2VzRm9yVXNlck9mZnNldHMob2Zmc2V0cyksXG5cdFx0XHR6b25lU2NvcmVzID0gW10sXG5cdFx0XHR6b25lU2NvcmUsIGksIGo7XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgZ3Vlc3Nlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0em9uZVNjb3JlID0gbmV3IFpvbmVTY29yZShnZXRab25lKGd1ZXNzZXNbaV0pLCBvZmZzZXRzTGVuZ3RoKTtcblx0XHRcdGZvciAoaiA9IDA7IGogPCBvZmZzZXRzTGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0em9uZVNjb3JlLnNjb3JlT2Zmc2V0QXQob2Zmc2V0c1tqXSk7XG5cdFx0XHR9XG5cdFx0XHR6b25lU2NvcmVzLnB1c2goem9uZVNjb3JlKTtcblx0XHR9XG5cblx0XHR6b25lU2NvcmVzLnNvcnQoc29ydFpvbmVTY29yZXMpO1xuXG5cdFx0cmV0dXJuIHpvbmVTY29yZXMubGVuZ3RoID4gMCA/IHpvbmVTY29yZXNbMF0uem9uZS5uYW1lIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ3Vlc3MgKGlnbm9yZUNhY2hlKSB7XG5cdFx0aWYgKCFjYWNoZWRHdWVzcyB8fCBpZ25vcmVDYWNoZSkge1xuXHRcdFx0Y2FjaGVkR3Vlc3MgPSByZWJ1aWxkR3Vlc3MoKTtcblx0XHR9XG5cdFx0cmV0dXJuIGNhY2hlZEd1ZXNzO1xuXHR9XG5cblx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXHRcdEdsb2JhbCBNZXRob2RzXG5cdCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuXHRmdW5jdGlvbiBub3JtYWxpemVOYW1lIChuYW1lKSB7XG5cdFx0cmV0dXJuIChuYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xcLy9nLCAnXycpO1xuXHR9XG5cblx0ZnVuY3Rpb24gYWRkWm9uZSAocGFja2VkKSB7XG5cdFx0dmFyIGksIG5hbWUsIHNwbGl0LCBub3JtYWxpemVkO1xuXG5cdFx0aWYgKHR5cGVvZiBwYWNrZWQgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdHBhY2tlZCA9IFtwYWNrZWRdO1xuXHRcdH1cblxuXHRcdGZvciAoaSA9IDA7IGkgPCBwYWNrZWQubGVuZ3RoOyBpKyspIHtcblx0XHRcdHNwbGl0ID0gcGFja2VkW2ldLnNwbGl0KCd8Jyk7XG5cdFx0XHRuYW1lID0gc3BsaXRbMF07XG5cdFx0XHRub3JtYWxpemVkID0gbm9ybWFsaXplTmFtZShuYW1lKTtcblx0XHRcdHpvbmVzW25vcm1hbGl6ZWRdID0gcGFja2VkW2ldO1xuXHRcdFx0bmFtZXNbbm9ybWFsaXplZF0gPSBuYW1lO1xuXHRcdFx0YWRkVG9HdWVzc2VzKG5vcm1hbGl6ZWQsIHNwbGl0WzJdLnNwbGl0KCcgJykpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGdldFpvbmUgKG5hbWUsIGNhbGxlcikge1xuXG5cdFx0bmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSk7XG5cblx0XHR2YXIgem9uZSA9IHpvbmVzW25hbWVdO1xuXHRcdHZhciBsaW5rO1xuXG5cdFx0aWYgKHpvbmUgaW5zdGFuY2VvZiBab25lKSB7XG5cdFx0XHRyZXR1cm4gem9uZTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIHpvbmUgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHR6b25lID0gbmV3IFpvbmUoem9uZSk7XG5cdFx0XHR6b25lc1tuYW1lXSA9IHpvbmU7XG5cdFx0XHRyZXR1cm4gem9uZTtcblx0XHR9XG5cblx0XHQvLyBQYXNzIGdldFpvbmUgdG8gcHJldmVudCByZWN1cnNpb24gbW9yZSB0aGFuIDEgbGV2ZWwgZGVlcFxuXHRcdGlmIChsaW5rc1tuYW1lXSAmJiBjYWxsZXIgIT09IGdldFpvbmUgJiYgKGxpbmsgPSBnZXRab25lKGxpbmtzW25hbWVdLCBnZXRab25lKSkpIHtcblx0XHRcdHpvbmUgPSB6b25lc1tuYW1lXSA9IG5ldyBab25lKCk7XG5cdFx0XHR6b25lLl9zZXQobGluayk7XG5cdFx0XHR6b25lLm5hbWUgPSBuYW1lc1tuYW1lXTtcblx0XHRcdHJldHVybiB6b25lO1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0TmFtZXMgKCkge1xuXHRcdHZhciBpLCBvdXQgPSBbXTtcblxuXHRcdGZvciAoaSBpbiBuYW1lcykge1xuXHRcdFx0aWYgKG5hbWVzLmhhc093blByb3BlcnR5KGkpICYmICh6b25lc1tpXSB8fCB6b25lc1tsaW5rc1tpXV0pICYmIG5hbWVzW2ldKSB7XG5cdFx0XHRcdG91dC5wdXNoKG5hbWVzW2ldKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gb3V0LnNvcnQoKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGdldENvdW50cnlOYW1lcyAoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlzKGNvdW50cmllcyk7XG5cdH1cblxuXHRmdW5jdGlvbiBhZGRMaW5rIChhbGlhc2VzKSB7XG5cdFx0dmFyIGksIGFsaWFzLCBub3JtYWwwLCBub3JtYWwxO1xuXG5cdFx0aWYgKHR5cGVvZiBhbGlhc2VzID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRhbGlhc2VzID0gW2FsaWFzZXNdO1xuXHRcdH1cblxuXHRcdGZvciAoaSA9IDA7IGkgPCBhbGlhc2VzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRhbGlhcyA9IGFsaWFzZXNbaV0uc3BsaXQoJ3wnKTtcblxuXHRcdFx0bm9ybWFsMCA9IG5vcm1hbGl6ZU5hbWUoYWxpYXNbMF0pO1xuXHRcdFx0bm9ybWFsMSA9IG5vcm1hbGl6ZU5hbWUoYWxpYXNbMV0pO1xuXG5cdFx0XHRsaW5rc1tub3JtYWwwXSA9IG5vcm1hbDE7XG5cdFx0XHRuYW1lc1tub3JtYWwwXSA9IGFsaWFzWzBdO1xuXG5cdFx0XHRsaW5rc1tub3JtYWwxXSA9IG5vcm1hbDA7XG5cdFx0XHRuYW1lc1tub3JtYWwxXSA9IGFsaWFzWzFdO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGFkZENvdW50cmllcyAoZGF0YSkge1xuXHRcdHZhciBpLCBjb3VudHJ5X2NvZGUsIGNvdW50cnlfem9uZXMsIHNwbGl0O1xuXHRcdGlmICghZGF0YSB8fCAhZGF0YS5sZW5ndGgpIHJldHVybjtcblx0XHRmb3IgKGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuXHRcdFx0c3BsaXQgPSBkYXRhW2ldLnNwbGl0KCd8Jyk7XG5cdFx0XHRjb3VudHJ5X2NvZGUgPSBzcGxpdFswXS50b1VwcGVyQ2FzZSgpO1xuXHRcdFx0Y291bnRyeV96b25lcyA9IHNwbGl0WzFdLnNwbGl0KCcgJyk7XG5cdFx0XHRjb3VudHJpZXNbY291bnRyeV9jb2RlXSA9IG5ldyBDb3VudHJ5KFxuXHRcdFx0XHRjb3VudHJ5X2NvZGUsXG5cdFx0XHRcdGNvdW50cnlfem9uZXNcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0Q291bnRyeSAobmFtZSkge1xuXHRcdG5hbWUgPSBuYW1lLnRvVXBwZXJDYXNlKCk7XG5cdFx0cmV0dXJuIGNvdW50cmllc1tuYW1lXSB8fCBudWxsO1xuXHR9XG5cblx0ZnVuY3Rpb24gem9uZXNGb3JDb3VudHJ5KGNvdW50cnksIHdpdGhfb2Zmc2V0KSB7XG5cdFx0Y291bnRyeSA9IGdldENvdW50cnkoY291bnRyeSk7XG5cblx0XHRpZiAoIWNvdW50cnkpIHJldHVybiBudWxsO1xuXG5cdFx0dmFyIHpvbmVzID0gY291bnRyeS56b25lcy5zb3J0KCk7XG5cblx0XHRpZiAod2l0aF9vZmZzZXQpIHtcblx0XHRcdHJldHVybiB6b25lcy5tYXAoZnVuY3Rpb24gKHpvbmVfbmFtZSkge1xuXHRcdFx0XHR2YXIgem9uZSA9IGdldFpvbmUoem9uZV9uYW1lKTtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRuYW1lOiB6b25lX25hbWUsXG5cdFx0XHRcdFx0b2Zmc2V0OiB6b25lLnV0Y09mZnNldChuZXcgRGF0ZSgpKVxuXHRcdFx0XHR9O1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHpvbmVzO1xuXHR9XG5cblx0ZnVuY3Rpb24gbG9hZERhdGEgKGRhdGEpIHtcblx0XHRhZGRab25lKGRhdGEuem9uZXMpO1xuXHRcdGFkZExpbmsoZGF0YS5saW5rcyk7XG5cdFx0YWRkQ291bnRyaWVzKGRhdGEuY291bnRyaWVzKTtcblx0XHR0ei5kYXRhVmVyc2lvbiA9IGRhdGEudmVyc2lvbjtcblx0fVxuXG5cdGZ1bmN0aW9uIHpvbmVFeGlzdHMgKG5hbWUpIHtcblx0XHRpZiAoIXpvbmVFeGlzdHMuZGlkU2hvd0Vycm9yKSB7XG5cdFx0XHR6b25lRXhpc3RzLmRpZFNob3dFcnJvciA9IHRydWU7XG5cdFx0XHRcdGxvZ0Vycm9yKFwibW9tZW50LnR6LnpvbmVFeGlzdHMoJ1wiICsgbmFtZSArIFwiJykgaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiBmYXZvciBvZiAhbW9tZW50LnR6LnpvbmUoJ1wiICsgbmFtZSArIFwiJylcIik7XG5cdFx0fVxuXHRcdHJldHVybiAhIWdldFpvbmUobmFtZSk7XG5cdH1cblxuXHRmdW5jdGlvbiBuZWVkc09mZnNldCAobSkge1xuXHRcdHZhciBpc1VuaXhUaW1lc3RhbXAgPSAobS5fZiA9PT0gJ1gnIHx8IG0uX2YgPT09ICd4Jyk7XG5cdFx0cmV0dXJuICEhKG0uX2EgJiYgKG0uX3R6bSA9PT0gdW5kZWZpbmVkKSAmJiAhaXNVbml4VGltZXN0YW1wKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGxvZ0Vycm9yIChtZXNzYWdlKSB7XG5cdFx0aWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0Y29uc29sZS5lcnJvcihtZXNzYWdlKTtcblx0XHR9XG5cdH1cblxuXHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cdFx0bW9tZW50LnR6IG5hbWVzcGFjZVxuXHQqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cblx0ZnVuY3Rpb24gdHogKGlucHV0KSB7XG5cdFx0dmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDAsIC0xKSxcblx0XHRcdG5hbWUgPSBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdLFxuXHRcdFx0em9uZSA9IGdldFpvbmUobmFtZSksXG5cdFx0XHRvdXQgID0gbW9tZW50LnV0Yy5hcHBseShudWxsLCBhcmdzKTtcblxuXHRcdGlmICh6b25lICYmICFtb21lbnQuaXNNb21lbnQoaW5wdXQpICYmIG5lZWRzT2Zmc2V0KG91dCkpIHtcblx0XHRcdG91dC5hZGQoem9uZS5wYXJzZShvdXQpLCAnbWludXRlcycpO1xuXHRcdH1cblxuXHRcdG91dC50eihuYW1lKTtcblxuXHRcdHJldHVybiBvdXQ7XG5cdH1cblxuXHR0ei52ZXJzaW9uICAgICAgPSBWRVJTSU9OO1xuXHR0ei5kYXRhVmVyc2lvbiAgPSAnJztcblx0dHouX3pvbmVzICAgICAgID0gem9uZXM7XG5cdHR6Ll9saW5rcyAgICAgICA9IGxpbmtzO1xuXHR0ei5fbmFtZXMgICAgICAgPSBuYW1lcztcblx0dHouX2NvdW50cmllc1x0PSBjb3VudHJpZXM7XG5cdHR6LmFkZCAgICAgICAgICA9IGFkZFpvbmU7XG5cdHR6LmxpbmsgICAgICAgICA9IGFkZExpbms7XG5cdHR6LmxvYWQgICAgICAgICA9IGxvYWREYXRhO1xuXHR0ei56b25lICAgICAgICAgPSBnZXRab25lO1xuXHR0ei56b25lRXhpc3RzICAgPSB6b25lRXhpc3RzOyAvLyBkZXByZWNhdGVkIGluIDAuMS4wXG5cdHR6Lmd1ZXNzICAgICAgICA9IGd1ZXNzO1xuXHR0ei5uYW1lcyAgICAgICAgPSBnZXROYW1lcztcblx0dHouWm9uZSAgICAgICAgID0gWm9uZTtcblx0dHoudW5wYWNrICAgICAgID0gdW5wYWNrO1xuXHR0ei51bnBhY2tCYXNlNjAgPSB1bnBhY2tCYXNlNjA7XG5cdHR6Lm5lZWRzT2Zmc2V0ICA9IG5lZWRzT2Zmc2V0O1xuXHR0ei5tb3ZlSW52YWxpZEZvcndhcmQgICA9IHRydWU7XG5cdHR6Lm1vdmVBbWJpZ3VvdXNGb3J3YXJkID0gZmFsc2U7XG5cdHR6LmNvdW50cmllcyAgICA9IGdldENvdW50cnlOYW1lcztcblx0dHouem9uZXNGb3JDb3VudHJ5ID0gem9uZXNGb3JDb3VudHJ5O1xuXG5cdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblx0XHRJbnRlcmZhY2Ugd2l0aCBNb21lbnQuanNcblx0KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cdHZhciBmbiA9IG1vbWVudC5mbjtcblxuXHRtb21lbnQudHogPSB0ejtcblxuXHRtb21lbnQuZGVmYXVsdFpvbmUgPSBudWxsO1xuXG5cdG1vbWVudC51cGRhdGVPZmZzZXQgPSBmdW5jdGlvbiAobW9tLCBrZWVwVGltZSkge1xuXHRcdHZhciB6b25lID0gbW9tZW50LmRlZmF1bHRab25lLFxuXHRcdFx0b2Zmc2V0O1xuXG5cdFx0aWYgKG1vbS5feiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAoem9uZSAmJiBuZWVkc09mZnNldChtb20pICYmICFtb20uX2lzVVRDKSB7XG5cdFx0XHRcdG1vbS5fZCA9IG1vbWVudC51dGMobW9tLl9hKS5fZDtcblx0XHRcdFx0bW9tLnV0YygpLmFkZCh6b25lLnBhcnNlKG1vbSksICdtaW51dGVzJyk7XG5cdFx0XHR9XG5cdFx0XHRtb20uX3ogPSB6b25lO1xuXHRcdH1cblx0XHRpZiAobW9tLl96KSB7XG5cdFx0XHRvZmZzZXQgPSBtb20uX3oudXRjT2Zmc2V0KG1vbSk7XG5cdFx0XHRpZiAoTWF0aC5hYnMob2Zmc2V0KSA8IDE2KSB7XG5cdFx0XHRcdG9mZnNldCA9IG9mZnNldCAvIDYwO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG1vbS51dGNPZmZzZXQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR2YXIgeiA9IG1vbS5fejtcblx0XHRcdFx0bW9tLnV0Y09mZnNldCgtb2Zmc2V0LCBrZWVwVGltZSk7XG5cdFx0XHRcdG1vbS5feiA9IHo7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtb20uem9uZShvZmZzZXQsIGtlZXBUaW1lKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0Zm4udHogPSBmdW5jdGlvbiAobmFtZSwga2VlcFRpbWUpIHtcblx0XHRpZiAobmFtZSkge1xuXHRcdFx0aWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1RpbWUgem9uZSBuYW1lIG11c3QgYmUgYSBzdHJpbmcsIGdvdCAnICsgbmFtZSArICcgWycgKyB0eXBlb2YgbmFtZSArICddJyk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl96ID0gZ2V0Wm9uZShuYW1lKTtcblx0XHRcdGlmICh0aGlzLl96KSB7XG5cdFx0XHRcdG1vbWVudC51cGRhdGVPZmZzZXQodGhpcywga2VlcFRpbWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bG9nRXJyb3IoXCJNb21lbnQgVGltZXpvbmUgaGFzIG5vIGRhdGEgZm9yIFwiICsgbmFtZSArIFwiLiBTZWUgaHR0cDovL21vbWVudGpzLmNvbS90aW1lem9uZS9kb2NzLyMvZGF0YS1sb2FkaW5nLy5cIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0aWYgKHRoaXMuX3opIHsgcmV0dXJuIHRoaXMuX3oubmFtZTsgfVxuXHR9O1xuXG5cdGZ1bmN0aW9uIGFiYnJXcmFwIChvbGQpIHtcblx0XHRyZXR1cm4gZnVuY3Rpb24gKCkge1xuXHRcdFx0aWYgKHRoaXMuX3opIHsgcmV0dXJuIHRoaXMuX3ouYWJicih0aGlzKTsgfVxuXHRcdFx0cmV0dXJuIG9sZC5jYWxsKHRoaXMpO1xuXHRcdH07XG5cdH1cblxuXHRmdW5jdGlvbiByZXNldFpvbmVXcmFwIChvbGQpIHtcblx0XHRyZXR1cm4gZnVuY3Rpb24gKCkge1xuXHRcdFx0dGhpcy5feiA9IG51bGw7XG5cdFx0XHRyZXR1cm4gb2xkLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdFx0fTtcblx0fVxuXG5cdGZ1bmN0aW9uIHJlc2V0Wm9uZVdyYXAyIChvbGQpIHtcblx0XHRyZXR1cm4gZnVuY3Rpb24gKCkge1xuXHRcdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAwKSB0aGlzLl96ID0gbnVsbDtcblx0XHRcdHJldHVybiBvbGQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0XHR9O1xuXHR9XG5cblx0Zm4uem9uZU5hbWUgID0gYWJicldyYXAoZm4uem9uZU5hbWUpO1xuXHRmbi56b25lQWJiciAgPSBhYmJyV3JhcChmbi56b25lQWJicik7XG5cdGZuLnV0YyAgICAgICA9IHJlc2V0Wm9uZVdyYXAoZm4udXRjKTtcblx0Zm4ubG9jYWwgICAgID0gcmVzZXRab25lV3JhcChmbi5sb2NhbCk7XG5cdGZuLnV0Y09mZnNldCA9IHJlc2V0Wm9uZVdyYXAyKGZuLnV0Y09mZnNldCk7XG5cblx0bW9tZW50LnR6LnNldERlZmF1bHQgPSBmdW5jdGlvbihuYW1lKSB7XG5cdFx0aWYgKG1ham9yIDwgMiB8fCAobWFqb3IgPT09IDIgJiYgbWlub3IgPCA5KSkge1xuXHRcdFx0bG9nRXJyb3IoJ01vbWVudCBUaW1lem9uZSBzZXREZWZhdWx0KCkgcmVxdWlyZXMgTW9tZW50LmpzID49IDIuOS4wLiBZb3UgYXJlIHVzaW5nIE1vbWVudC5qcyAnICsgbW9tZW50LnZlcnNpb24gKyAnLicpO1xuXHRcdH1cblx0XHRtb21lbnQuZGVmYXVsdFpvbmUgPSBuYW1lID8gZ2V0Wm9uZShuYW1lKSA6IG51bGw7XG5cdFx0cmV0dXJuIG1vbWVudDtcblx0fTtcblxuXHQvLyBDbG9uaW5nIGEgbW9tZW50IHNob3VsZCBpbmNsdWRlIHRoZSBfeiBwcm9wZXJ0eS5cblx0dmFyIG1vbWVudFByb3BlcnRpZXMgPSBtb21lbnQubW9tZW50UHJvcGVydGllcztcblx0aWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtb21lbnRQcm9wZXJ0aWVzKSA9PT0gJ1tvYmplY3QgQXJyYXldJykge1xuXHRcdC8vIG1vbWVudCAyLjguMStcblx0XHRtb21lbnRQcm9wZXJ0aWVzLnB1c2goJ196Jyk7XG5cdFx0bW9tZW50UHJvcGVydGllcy5wdXNoKCdfYScpO1xuXHR9IGVsc2UgaWYgKG1vbWVudFByb3BlcnRpZXMpIHtcblx0XHQvLyBtb21lbnQgMi43LjBcblx0XHRtb21lbnRQcm9wZXJ0aWVzLl96ID0gbnVsbDtcblx0fVxuXG5cdC8vIElOSkVDVCBEQVRBXG5cblx0cmV0dXJuIG1vbWVudDtcbn0pKTtcbiIsInZhciBtb21lbnQgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuL21vbWVudC10aW1lem9uZVwiKTtcbm1vbWVudC50ei5sb2FkKHJlcXVpcmUoJy4vZGF0YS9wYWNrZWQvbGF0ZXN0Lmpzb24nKSk7XG4iLCJjb25zdCB0cmFuc2xhdGlvbnMgPSB7XG4gIGRlOiB7XG4gICAgYWRkcmVzczogJ0FkcmVzc2UnLFxuICAgICdhZGRyZXNzLXBsYWNlLW9yLWJ1c2luZXNzJzogJ0FkcmVzcywgT3J0IG9yIEdlc2Now6RmdCcsXG4gICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0bDvGdlIFp3aXNjaGVuemllbCBoaW56dScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzogJ1NldCBzdG9wIGR1cmF0aW9uIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAnQ2xvc2Ugc3RvcCBkdXJhdGlvbiBzZWxlY3RvciBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAnT3BlbiBzdG9wIGR1cmF0aW9uIHNlbGVjdG9yIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgIGFpcnBsYW5lOiAnRmx1ZycsXG4gICAgYXJyaXZhbDogJ0Fua3VuZnQnLFxuICAgIGJhY2s6ICdadXLDvGNrJyxcbiAgICBiaWtlcmVudGFsc3RhdGlvbjogJ0xlaWhyYWQtU3RhdGlvbicsXG4gICAgYnVzOiAnQnVzJyxcbiAgICBjYW5jZWw6ICdBYmJyZWNoZW4nLFxuICAgICdjbGVhci1idXR0b24tbGFiZWwnOiAnTMO2c2NoZW4nLFxuICAgICdjbGVhci1zZWFyY2gtaGlzdG9yeSc6ICdTdWNoaGlzdG9yaWUgbMO2c2NoZW4nLFxuICAgIGN1cnJlbnRwb3NpdGlvbjogJ0FrdHVlbGxlIFBvc2l0aW9uJyxcbiAgICBkZWxldGU6ICdMw7ZzY2hlbicsXG4gICAgJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJzogJ1dvbGxlbiBTaWUgZGllIFN1Y2gtSGlzdG9yaWUgbMO2c2NoZW4/JyxcbiAgICBkZXBhcnR1cmU6ICdBYmZhaHJ0JyxcbiAgICBkZXN0aW5hdGlvbjogJ1ppZWwnLFxuICAgICdnaXZlLW9yaWdpbic6ICdTdGFydCBlaW5nZWJlbi4nLFxuICAgICdnaXZlLWRlc3RpbmF0aW9uJzogJ1ppZWwgZWluZ2ViZW4uJyxcbiAgICBmYXZvdXJpdGU6ICdGYXZvcml0ZW4nLFxuICAgIGZlcnJ5OiAnRsOkaHJlJyxcbiAgICAnZnV0dXJlLXJvdXRlJzogJ1p1a8O8bmZ0aWdlIFZlcmJpbmR1bmcnLFxuICAgIG9yaWdpbjogJ1N0YXJ0JyxcbiAgICAnb3JpZ2luLXN0b3AtbmVhci15b3UnOiAnU3RhcnQnLFxuICAgIG93bmxvY2F0aW9uczogJ0VpZ2VuZSBGYXZvcml0ZW4nLFxuICAgIGxvYWRpbmc6ICdMYWRlbi4uLicsXG4gICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4nLFxuICAgIHJhaWw6ICdadWcnLFxuICAgIHNlYXJjaDogJ1N1Y2hlJyxcbiAgICAnc2VhcmNoLWFkZHJlc3Mtb3ItcGxhY2UnOiAnU3VjaGUgYW5oYW5kIHZvbiBBZHJlc3NlIG9kZXIgT3J0c2FuZ2FiZScsXG4gICAgJ3NlYXJjaC1idXR0b24tbGFiZWwnOiAnU3VjaGUnLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24nOiAnU3VjaGUgWmllbG9ydCwgTGluaWUgb3IgSGFsdGVzdGVsbGUnLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24taW5kZXgnOiAnWmllbG9ydCBlaW5nZWJlbicsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1yZXN1bHRzLWJ1dC1uby1zZWFyY2gnOlxuICAgICAgJ0VyZ2Vibmlzc2UgaW4g4oCcWmllbG9ydOKAnS1SZWl0ZXIgYW56ZWlnZW4nLFxuICAgICdzZWFyY2gtbm8tcmVzdWx0cyc6ICdLZWluIE9ydCBnZWZ1bmRlbi4nLFxuICAgICdzZWFyY2gtb3JpZ2luJzogJ1N1Y2hlIFN0YXJ0b3J0LCBMaW5pZSBvZGVyIEhhbHRlc3RlbGxlJyxcbiAgICAnc2VhcmNoLW9yaWdpbi1pbmRleCc6ICdTdGFydG9ydCBlaW5nZWJlbicsXG4gICAgJ3NlYXJjaC1wb3NpdGlvbic6ICdTdGFuZG9ydCBlcm1pdHRlbG4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtZGVza3RvcCc6XG4gICAgICAnVmVudWUsIHBsYWNlIGFuZCBzdG9wc2VhcmNoLiBOYXZpZ2F0ZSBsaXN0IHdpdGggYXJyb3cga2V5cyBhbmQgc2VsZWN0IHdpdGggZW50ZXIga2V5JyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLW1vYmlsZSc6ICdWZW51ZSwgcGxhY2UgYW5kIHN0b3BzZWFyY2guJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbic6ICdUaGVyZSBpcyB7e2NvdW50fX0gc3VnZ2VzdGlvbiBhdmFpbGFibGUnLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuX3BsdXJhbCc6XG4gICAgICAnVGhlcmUgYXJlIHt7Y291bnR9fSBzdWdnZXN0aW9ucyBhdmFpbGFibGUnLFxuICAgICdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJzogJ0FrdHVlbGxlIEF1c3dhaGw6IHt7c2VsZWN0aW9ufX0nLFxuICAgIHN0cmVldDogJ1N0cmHDn2UnLFxuICAgIHN1YndheTogJ1UtQmFobicsXG4gICAgc3RhdGlvbjogJ1N0YXRpb24nLFxuICAgIHN0b3A6ICdIYWx0ZXN0ZWxsZScsXG4gICAgJ3N0b3AtbmVhci15b3UnOiAnU3VjaGUgSGFsdGVzdGVsbGVuIHVuZCBMaW5pZW4gaW4gZGVyIE7DpGhlJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1idXMnOiAnU3VjaGUgQnVzbGluaWVuIG9yIEhhbHRlc3RlbGxlbicsXG4gICAgJ3N0b3AtbmVhci15b3UtY2l0eWJpa2UnOiAnU3VjaGUgTGVpaHJhZC1TdGF0aW9uZW4nLFxuICAgICdzdG9wLW5lYXIteW91LXJhaWwnOiAnU3VjaGUgWnVndmVyYmluZHVuZ2VuIG9kZXIgQmFobmjDtmZlJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1zdWJ3YXknOiAnU3VjaGUgVS1CYWhuLUxpbmllbiBvZGVyIEhhbHRlc3RlbGxlbicsXG4gICAgJ3N0b3AtbmVhci15b3UtdHJhbSc6ICdTdWNoZSBTdGFkdGJhaG4tSGFsdGVzdGVsbGVuLVN1Y2hlJyxcbiAgICAndG9kYXktYXQnOiAnSGV1dGUgdW0nLFxuICAgICd0b21vcnJvdy1hdCc6ICdNb3JnZW4gdW0nLFxuICAgIHRyYW06ICdTdHJhw59lbmJhaG4nLFxuICAgICd1c2Utb3duLXBvc2l0aW9uJzogJ0JlbnV0emUgYWt0dWVsbGVuIFN0YW5kb3J0JyxcbiAgICAnc2VsZWN0LWZyb20tbWFwJzogJ1fDpGhsZSBQb3NpdGlvbiBhbmhhbmQgS2FydGUnLFxuICAgICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJzogJ0F1cyBlaWdlbmVuIEZhdm9yaXRlbiBhdXN3w6RobGVuJyxcbiAgICB2ZW51ZTogJ1ZlbnVlJyxcbiAgICAndmlhLXBvaW50JzogJ1p3aXNjaGVuemllbCcsXG4gICAgd2hlcmU6ICdXb2hpbj8nLFxuICAgIHBsYWNlOiAnT3J0JyxcbiAgfSxcbiAgZW46IHtcbiAgICBhZGRyZXNzOiAnQWRkcmVzcycsXG4gICAgJ2FkZHJlc3MtcGxhY2Utb3ItYnVzaW5lc3MnOiAnQWRkcmVzcywgcGxhY2Ugb3IgYnVzaW5lc3MnLFxuICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdBZGQgdmlhIHBvaW50JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwnOiAnU2V0IHN0b3AgZHVyYXRpb24gYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICdDbG9zZSBzdG9wIGR1cmF0aW9uIHNlbGVjdG9yIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICdPcGVuIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgYWlycGxhbmU6ICdGbGlnaHQnLFxuICAgIGFycml2YWw6ICdBcnJpdmFsJyxcbiAgICBiYWNrOiAnQmFjaycsXG4gICAgYmlrZXBhcms6ICdQYXJrICYgUmlkZSBmb3IgYmlrZXMnLFxuICAgIGJpa2VyZW50YWxzdGF0aW9uOiAnQmlrZSBzdGF0aW9uJyxcbiAgICBidXM6ICdidXMnLFxuICAgIGNhbmNlbDogJ0NhbmNlbCcsXG4gICAgY2FycGFyazogJ1BhcmsgJiBSaWRlJyxcbiAgICAnY2xlYXItYnV0dG9uLWxhYmVsJzogJ0NsZWFyJyxcbiAgICAnY2xlYXItc2VhcmNoLWhpc3RvcnknOiAnQ2xlYXIgc2VhcmNoIGhpc3RvcnknLFxuICAgIGN1cnJlbnRwb3NpdGlvbjogJ0N1cnJlbnQgcG9zaXRpb24nLFxuICAgIGRlbGV0ZTogJ0RlbGV0ZScsXG4gICAgJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJzogJ0RvIHlvdSB3YW50IHRvIGNsZWFyIHRoZSBzZWFyY2ggaGlzdG9yeT8nLFxuICAgIGRlcGFydHVyZTogJ0RlcGFydHVyZScsXG4gICAgZGVzdGluYXRpb246ICdEZXN0aW5hdGlvbicsXG4gICAgJ2dpdmUtb3JpZ2luJzogJ0VudGVyIHlvdXIgb3JpZ2luLicsXG4gICAgJ2dpdmUtZGVzdGluYXRpb24nOiAnRW50ZXIgeW91ciBkZXN0aW5hdGlvbicsXG4gICAgZmF2b3VyaXRlOiAnRmF2b3VyaXRlJyxcbiAgICBmZXJyeTogJ0ZlcnJ5JyxcbiAgICAnZnV0dXJlLXJvdXRlJzogJ0Z1dHVyZSByb3V0ZScsXG4gICAgb3JpZ2luOiAnU3RhcnQnLFxuICAgICdvcmlnaW4tc3RvcC1uZWFyLXlvdSc6ICdTdGFydCcsXG4gICAgb3dubG9jYXRpb25zOiAnT3duIGxvY2F0aW9ucycsXG4gICAgbG9hZGluZzogJ0xvYWRpbmcuLi4nLFxuICAgICdtaW51dGUtc2hvcnQnOiAnbScsXG4gICAgcGxhdGZvcm06ICdQbGF0Zm9ybScsXG4gICAgcmFpbDogJ1RyYWluJyxcbiAgICByZXF1aXJlZDogJ3JlcXVpcmVkIGZpZWxkJyxcbiAgICBzZWFyY2g6ICdTZWFyY2gnLFxuICAgICdzZWFyY2gtYWRkcmVzcy1vci1wbGFjZSc6ICdTZWFyY2ggYnkgYWRkcmVzcyBvciBwbGFjZSBuYW1lJyxcbiAgICAnc2VhcmNoLWJ1dHRvbi1sYWJlbCc6ICdTZWFyY2gnLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24nOiAnU2VhcmNoIGRlc3RpbmF0aW9uLCByb3V0ZSBvciBzdG9wJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLWluZGV4JzogJ0VudGVyIGRlc3RpbmF0aW9uJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLXJlc3VsdHMtYnV0LW5vLXNlYXJjaCc6XG4gICAgICAnVmlldyByZXN1bHRzIGluIHRoZSBhZGphY2VudCDigJxEZXN0aW5hdGlvbuKAnSB0YWInLFxuICAgICdzZWFyY2gtbm8tcmVzdWx0cyc6ICdObyBsb2NhdGlvbicsXG4gICAgJ3NlYXJjaC1vcmlnaW4nOiAnU2VhcmNoIG9yaWdpbiwgcm91dGUgb3Igc3RvcCcsXG4gICAgJ3NlYXJjaC1vcmlnaW4taW5kZXgnOiAnRW50ZXIgb3JpZ2luJyxcbiAgICAnc2VhcmNoLXBvc2l0aW9uJzogJ0RldGVjdCBsb2NhdGlvbicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1kZXNrdG9wJzpcbiAgICAgICdWZW51ZSwgcGxhY2UgYW5kIHN0b3BzZWFyY2guIE5hdmlnYXRlIGxpc3Qgd2l0aCBhcnJvdyBrZXlzIGFuZCBzZWxlY3Qgd2l0aCBlbnRlciBrZXknLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW9iaWxlJzpcbiAgICAgICdWZW51ZSwgcGxhY2UgYW5kIHN0b3BzZWFyY2guIEVudGVyIHRoZSBsb2NhdGlvbiBhbmQgbmF2aWdhdGUgaW4gdGhlIGxpc3QgYnkgc3dpcGluZy4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuJzogJ1RoZXJlIGlzIHt7Y291bnR9fSBzdWdnZXN0aW9uIGF2YWlsYWJsZScsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW5fcGx1cmFsJzpcbiAgICAgICdUaGVyZSBhcmUge3tjb3VudH19IHN1Z2dlc3Rpb25zIGF2YWlsYWJsZScsXG4gICAgJ3NlYXJjaC1jdXJyZW50LXN1Z2dlc3Rpb24nOiAnQ3VycmVudCBzZWxlY3Rpb246IHt7c2VsZWN0aW9ufX0nLFxuICAgIHN0cmVldDogJ1N0cmVldCcsXG4gICAgc3Vid2F5OiAnTWV0cm8nLFxuICAgIHN0YXRpb246ICdTdGF0aW9uJyxcbiAgICBzdG9wOiAnU3RvcCcsXG4gICAgJ3N0b3AtbmVhci15b3UnOiAnU2VhcmNoIHN0b3BzIGFuZCByb3V0ZXMnLFxuICAgICdzdG9wLW5lYXIteW91LWFpcnBsYW5lJzogJ1NlYXJjaCBmbGlnaHRzIG9yIGFpcnBvcnRzJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1idXMnOiAnU2VhcmNoIGJ1cyByb3V0ZXMgb3Igc3RvcHMnLFxuICAgICdzdG9wLW5lYXIteW91LWNpdHliaWtlJzogJ1NlYXJjaCBjaXR5IGJpa2Ugc3RhdGlvbnMnLFxuICAgICdzdG9wLW5lYXIteW91LXJhaWwnOiAnU2VhcmNoIHRyYWluIHJvdXRlcyBvciBzdGF0aW9ucycsXG4gICAgJ3N0b3AtbmVhci15b3Utc3Vid2F5JzogJ1NlYXJjaCBtZXRybyByb3V0ZXMgb3Igc3RhdGlvbnMgJyxcbiAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ1NlYXJjaCB0cmFtIHJvdXRlcyBvciBzdG9wcycsXG4gICAgJ3N0b3Atcm91dGUtc3RhdGlvbic6ICdCdXMgYW5kIHN0b3Agc2VhcmNoJyxcbiAgICAndG9kYXktYXQnOiAndG9kYXkgYXQnLFxuICAgICd0b21vcnJvdy1hdCc6ICd0b21vcnJvdyBhdCcsXG4gICAgdHJhbTogJ1RyYW0nLFxuICAgIHRyYWNrOiAnVHJhY2snLFxuICAgICd1c2Utb3duLXBvc2l0aW9uJzogJ1VzZSBjdXJyZW50IGxvY2F0aW9uJyxcbiAgICAnc2VsZWN0LWZyb20tbWFwJzogJ1NlbGVjdCBwb3NpdGlvbiBmcm9tIG1hcCcsXG4gICAgJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnOiAnU2VsZWN0IGZyb20gb3duIGxvY2F0aW9ucycsXG4gICAgdmVudWU6ICdWZW51ZScsXG4gICAgJ3ZpYS1wb2ludCc6ICdWaWEgcG9pbnQnLFxuICAgIHdoZXJlOiAnV2hlcmUgdG8/JyxcbiAgICBwbGFjZTogJ0xvY2F0aW9uJyxcbiAgfSxcbiAgZmk6IHtcbiAgICBhZGRyZXNzOiAnT3NvaXRlJyxcbiAgICAnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcyc6ICdPc29pdGUsIHBhaWtrYSB0YWkgeXJpdHlzJyxcbiAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnTGlzw6TDpCB2w6RsaXBpc3RlJyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwnOlxuICAgICAgJ0FzZXRhIHbDpGxpcGlzdGVlbGxlIHt7aW5kZXh9fSBweXPDpGhkeWtzZW4ga2VzdG8nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAnQXZhYSB2w6RsaXBpc3RlZW4ge3tpbmRleH19IHB5c8OkaGR5a3NlbiBrZXN0byB2YWxpdHNpbicsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgJ1N1bGplIHbDpGxpcGlzdGVlbiB7e2luZGV4fX0gcHlzw6RoZHlrc2VuIGtlc3RvIHZhbGl0c2luJyxcbiAgICBhaXJwbGFuZTogJ0xlbnRva29uZScsXG4gICAgYXJyaXZhbDogJ1BlcmlsbMOkJyxcbiAgICBiYWNrOiAnVGFrYWlzaW4nLFxuICAgIGJpa2VyZW50YWxzdGF0aW9uOiAnUHnDtnLDpGFzZW1hJyxcbiAgICBiaWtlcGFyazogJ0xpaXR5bnTDpHB5w7Zyw6RwYXJra2knLFxuICAgIGJ1czogJ2J1c3NpJyxcbiAgICBjYW5jZWw6ICdQZXJ1dXRhJyxcbiAgICBjYXJwYXJrOiAnTGlpdHludMOkcHlzw6Rrb2ludGknLFxuICAgICdjbGVhci1idXR0b24tbGFiZWwnOiAnVHloamVubsOkJyxcbiAgICAnY2xlYXItc2VhcmNoLWhpc3RvcnknOiAnVHloamVubsOkIGhha3VoaXN0b3JpYScsXG4gICAgY3VycmVudHBvc2l0aW9uOiAnVMOkbcOkbmhldGtpbmVuIHNpamFpbnRpJyxcbiAgICBkZWxldGU6ICdQb2lzdGEnLFxuICAgICdkZWxldGUtb2xkLXNlYXJjaGVzLWhlYWRlcic6ICdIYWx1YXRrbyB0eWhqZW50w6TDpCBoYWt1aGlzdG9yaWFuPycsXG4gICAgZGVwYXJ0dXJlOiAnTMOkaHTDtmFpa2EnLFxuICAgIGRlc3RpbmF0aW9uOiAnTcOkw6Ryw6RucMOkw6QnLFxuICAgIGZhdm91cml0ZTogJ1N1b3Npa2tpJyxcbiAgICBmZXJyeTogJ0xhdXR0YScsXG4gICAgJ2Z1dHVyZS1yb3V0ZSc6ICdUdWxldmEgcmVpdHRpJyxcbiAgICAnZ2l2ZS1vcmlnaW4nOiAnTMOkaHTDtnBhaWtrYScsXG4gICAgJ2dpdmUtZGVzdGluYXRpb24nOiAnTcOkw6Ryw6RucMOkw6QnLFxuICAgIG9yaWdpbjogJ0zDpGh0w7ZwYWlra2EnLFxuICAgICdvcmlnaW4tc3RvcC1uZWFyLXlvdSc6ICdMw6RodMO2cGFpa2thJyxcbiAgICBvd25sb2NhdGlvbnM6ICdPbWF0IHBhaWthdCcsXG4gICAgbG9hZGluZzogJ0xhZGF0YWFuLi4uJyxcbiAgICAnbWludXRlLXNob3J0JzogJ21pbicsXG4gICAgcGxhdGZvcm06ICdMYWl0dXJpJyxcbiAgICByYWlsOiAnSnVuYScsXG4gICAgcmVxdWlyZWQ6ICdwYWtvbGxpbmVuIGtlbnR0w6QnLFxuICAgIHNlYXJjaDogJ0V0c2knLFxuICAgICdzZWFyY2gtYWRkcmVzcy1vci1wbGFjZSc6ICdIYWUgb3NvaXR0ZWVsbGEgdGFpIHBhaWthbiBuaW1lbGzDpCcsXG4gICAgJ3NlYXJjaC1idXR0b24tbGFiZWwnOiAnSGFlJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uJzogJ0hhZSBtw6TDpHLDpG5ww6TDpHTDpCwgbGluamFhIHRhaSBweXPDpGtracOkJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLWluZGV4JzogJ1N5w7Z0w6QgbcOkw6Ryw6RucMOkw6QnLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24tcmVzdWx0cy1idXQtbm8tc2VhcmNoJzpcbiAgICAgICdLYXRzbyB0dWxva3NldCB2aWVyZWlzZWx0w6QgTcOkw6Ryw6RucMOkw6QtdsOkbGlsZWhkZWx0w6QnLFxuICAgICdzZWFyY2gtbm8tcmVzdWx0cyc6ICdFaSB0dWxva3NpYScsXG4gICAgJ3NlYXJjaC1vcmlnaW4nOiAnSGFlIGzDpGh0w7ZwYWlra2FhLCBsaW5qYWEgdGFpIHB5c8Oka2tpw6QnLFxuICAgICdzZWFyY2gtb3JpZ2luLWluZGV4JzogJ1N5w7Z0w6QgbMOkaHTDtnBhaWtrYScsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1kZXNrdG9wJzpcbiAgICAgICdQYWlra2EsIGxpbmphIGphIHB5c8Oka2tpaGFrdS4gTmF2aWdvaSBsaXN0YXNzYSBudW9saW7DpHBww6RpbWlsbMOkIGphIHZhbGl0c2UgZW50ZXJpbGzDpCcsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb2JpbGUnOlxuICAgICAgJ1BhaWtrYSwgbGluamEgamEgcHlzw6Rra2loYWt1LiBTecO2dMOkIHNpamFpbnRpIGphIG5hdmlnb2kgbGlzdGFzc2EgcHl5aGvDpGlzZW3DpGxsw6QuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbic6ICcgTMO2eWRldHRpaW4ge3tjb3VudH19IGVoZG90dXMnLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuX3BsdXJhbCc6ICcgTMO2eWRldHRpaW4ge3tjb3VudH19IGVoZG90dXN0YScsXG4gICAgJ3NlYXJjaC1jdXJyZW50LXN1Z2dlc3Rpb24nOiAnVMOkbcOkbmhldGtpbmVuIHZhbGludGE6IHt7c2VsZWN0aW9ufX0nLFxuICAgICdzZWFyY2gtcG9zaXRpb24nOiAnUGFpa2FubmEnLFxuICAgIHN0cmVldDogJ0thdHUnLFxuICAgIHN1YndheTogJ01ldHJvJyxcbiAgICBzdGF0aW9uOiAnQXNlbWEnLFxuICAgIHN0b3A6ICdQeXPDpGtraScsXG4gICAgJ3N0b3AtbmVhci15b3UnOiAnTGluamEsIHB5c8Oka2tpIHRhaSBhc2VtYScsXG4gICAgJ3N0b3AtbmVhci15b3UtYWlycGxhbmUnOiAnSGFlIGxlbnRvamEgdGFpIGxlbnRvYXNlbWFhJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1idXMnOiAnSGFlIGJ1c3NpbGluamFhIHRhaSBweXPDpGtracOkJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1jaXR5YmlrZSc6ICdIYWUga2F1cHVua2lwecO2csOkYXNlbWFhJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1yYWlsJzogJ0hhZSBsw6RoaWp1bmFhIHRhaSBhc2VtYWEnLFxuICAgICdzdG9wLW5lYXIteW91LXN1YndheSc6ICdIYWUgbWV0cm9saW5qYWEgdGFpIGFzZW1hYScsXG4gICAgJ3N0b3AtbmVhci15b3UtdHJhbSc6ICdIYWUgcmFpdGlvbGluamFhIHRhaSBweXPDpGtracOkJyxcbiAgICAnc3RvcC1yb3V0ZS1zdGF0aW9uJzogJ0xpbmphLSBqYSBweXPDpGtraWhha3UnLFxuICAgICd0b2RheS1hdCc6ICd0w6Ruw6TDpG4ga2xvJyxcbiAgICAndG9tb3Jyb3ctYXQnOiAnaHVvbWVubmEga2xvJyxcbiAgICB0cmFtOiAnUmFpdGlvdmF1bnUnLFxuICAgIHRyYWNrOiAnUmFpZGUnLFxuICAgICd1c2Utb3duLXBvc2l0aW9uJzogJ0vDpHl0w6QgbnlreWlzdMOkIHNpamFpbnRpYScsXG4gICAgJ3NlbGVjdC1mcm9tLW1hcCc6ICdWYWxpdHNlIHNpamFpbnRpIGthcnRhbHRhJyxcbiAgICAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucyc6ICdWYWxpdHNlIG9taXN0YSBwYWlrb2lzdGEnLFxuICAgIHZlbnVlOiAnUGFpa2thJyxcbiAgICAndmlhLXBvaW50JzogJ1bDpGxpcGlzdGUnLFxuICAgIHdoZXJlOiAnTWlubmUgbWVubsOkw6RuPycsXG4gICAgcGxhY2U6ICdQYWlra2EnLFxuICB9LFxuICBzdjoge1xuICAgIGFkZHJlc3M6ICdBZHJlc3MnLFxuICAgICdhZGRyZXNzLXBsYWNlLW9yLWJ1c2luZXNzJzogJ0FkcmVzcywgcGxhdHMgZWxsZXIgZsO2cmV0YWcnLFxuICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdMw6RnZyB0aWxsIHZpYXB1bmt0JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwnOlxuICAgICAgJ1N0w6RsbCBpbiB2YXJha3RpZ2hldCBmw7ZyIHZpYXB1bmt0ZW4ge3tpbmRleH19JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgJ1N0w6RuZyB2w6RsamFyZW4gZsO2ciB2YXJha3RpZ2hldCB2aWQgdmlhLXB1bmt0ZW4ge3tpbmRleH19JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAnw5ZwcG5hIHbDpGxqYXJlbiBmw7ZyIHZhcmFrdGlnaGV0IHZpZCB2aWEtcHVua3RlbiB7e2luZGV4fX0nLFxuICAgIGFpcnBsYW5lOiAnRmx5ZycsXG4gICAgYXJyaXZhbDogJ0FubMOkbmRlcicsXG4gICAgYmFjazogJ1RpbGxiYWthJyxcbiAgICBiaWtlcmVudGFsc3RhdGlvbjogJ1N0YWRzY3lrZWxzdGF0aW9uJyxcbiAgICBiaWtlcGFyazogJ0Fuc2x1dG5pbmdzcGFya2VyaW5nIGbDtnIgY3lrbGFyJyxcbiAgICBidXM6ICdCdXNzaScsXG4gICAgY2FuY2VsOiAnQXZicnl0JyxcbiAgICBjYXJwYXJrOiAnSW5mYXJ0c3BhcmtlcmluZycsXG4gICAgJ2NsZWFyLWJ1dHRvbi1sYWJlbCc6ICdUw7ZtJyxcbiAgICAnY2xlYXItc2VhcmNoLWhpc3RvcnknOiAnVMO2bSBzw7ZraGlzdG9yaWtlbicsXG4gICAgY3VycmVudHBvc2l0aW9uOiAnTnV2YXJhbmRlIHBvc2l0aW9uJyxcbiAgICBkZWxldGU6ICdUYSBib3J0JyxcbiAgICAnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInOiAnVmlsbCBkdSB0w7ZtbWEgc8O2a2hpc3RvcmlrZW4/JyxcbiAgICBkZXBhcnR1cmU6ICdBdmfDpW5nc3RpZCcsXG4gICAgZGVzdGluYXRpb246ICdEZXN0aW5hdGlvbicsXG4gICAgZmF2b3VyaXRlOiAnRmF2b3JpdCcsXG4gICAgZmVycnk6ICdGw6RyamEnLFxuICAgICdmdXR1cmUtcm91dGUnOiAnRnJhbXRpZGEgcnV0dCcsXG4gICAgJ2dpdmUtZGVzdGluYXRpb24nOiAnU2tyaXYgaW4gZGluIGRlc3RpbmF0aW9uJyxcbiAgICAnZ2l2ZS1vcmlnaW4nOiAnU2tyaXYgaW4gZGluIGF2ZsOkcmRzcGxhdHMnLFxuICAgIG9yaWdpbjogJ0F2ZsOkcmRzcGxhdHMnLFxuICAgICdvcmlnaW4tc3RvcC1uZWFyLXlvdSc6ICdBdmbDpHJkc3BsYXRzJyxcbiAgICBvd25sb2NhdGlvbnM6ICdFZ25hIHBsYXRzZXInLFxuICAgIGxvYWRpbmc6ICdMYWRkYXIuLi4nLFxuICAgICdtaW51dGUtc2hvcnQnOiAnbWluJyxcbiAgICBwbGF0Zm9ybTogJ1BsYXR0Zm9ybScsXG4gICAgcmFpbDogJ1TDpWcnLFxuICAgIHJlcXVpcmVkOiAnb2JsaWdhdG9yaXNrdCBmw6RsdCcsXG4gICAgc2VhcmNoOiAnU8O2aycsXG4gICAgJ3NlYXJjaC1hZGRyZXNzLW9yLXBsYWNlJzogJ1PDtmsgbWVkIGFkcmVzc2VuIGVsbGVyIHBsYXRzZW5zIG5hbW4nLFxuICAgICdzZWFyY2gtYnV0dG9uLWxhYmVsJzogJ1PDtmsnLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24nOiAnU8O2ayBkZXN0aW5hdGlvbiwgbGluamUgZWxsZXIgaMOlbGxwbGF0cycsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1pbmRleCc6ICdTa3JpdiBkZXN0aW5hdGlvbicsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1yZXN1bHRzLWJ1dC1uby1zZWFyY2gnOlxuICAgICAgJ1NlIHJlc3VsdGF0ZW4gdW5kZXIgZmxpa2VuIERlc3RpbmF0aW9uJyxcbiAgICAnc2VhcmNoLW5vLXJlc3VsdHMnOiAnSW5nYSBzw7ZrcmVzdWx0YXQnLFxuICAgICdzZWFyY2gtb3JpZ2luJzogJ1PDtmsgYXZmw6RyZHNwbGF0cywgbGluamUgZWxsZXIgaMOlbGxwbGF0cycsXG4gICAgJ3NlYXJjaC1vcmlnaW4taW5kZXgnOiAnU2tyaXYgYXZmw6RyZHNwbGF0cycsXG4gICAgJ3NlYXJjaC1wb3NpdGlvbic6ICdTw7ZrIHBvc2l0aW9uJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWRlc2t0b3AnOlxuICAgICAgJ1BsYXRzLCBsaW5qZSBvY2ggaMOlbGxwbGF0c3PDtmtuaW5nLiBOYXZpZ2VyYSBsaXN0YW4gbWVkIHBpbHRhbmdlbnRlcm5hIG9jaCB2w6RsaiBtZWQgRW50ZXItdGFuZ2V0ZW4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW9iaWxlJzpcbiAgICAgICdQbGF0cywgbGluamUgb2NoIGjDpWxscGxhdHNzw7ZrbmluZy4gQW5nZSBwbGF0c2VuIG9jaCBuYXZpZ2VyYSBpIGxpc3RhbiBnZW5vbSBhdHQgc3ZlcGEuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbic6ICdIaXR0YWRlIHt7Y291bnR9fSBmw7Zyc2xhZycsXG4gICAgJ3NlYXJjaC1jdXJyZW50LXN1Z2dlc3Rpb24nOiAnTnV2YXJhbmRlIHZhbDoge3tzZWxlY3Rpb259fScsXG4gICAgc3RyZWV0OiAnR2F0YScsXG4gICAgc3Vid2F5OiAnTWV0cm8nLFxuICAgIHN0YXRpb246ICdTdGF0aW9uJyxcbiAgICBzdG9wOiAnSMOlbGxwbGF0cycsXG4gICAgJ3N0b3AtbmVhci15b3UnOiAnU8O2ayBow6VsbHBsYXRzZXIgZWxsZXIgbGluamVyJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1haXJwbGFuZSc6ICdTw7ZrIGZseWcgZWxsZXIgZmx5Z3BsYXRzZXInLFxuICAgICdzdG9wLW5lYXIteW91LWJ1cyc6ICdTw7ZrIGJ1c3NsaW5qZXIgZWxsZXIgaMOlbGxwbGF0c2VyJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1jaXR5YmlrZSc6ICdTw7ZrIHN0YWRzY3lrZWxzdGF0aW9uZXInLFxuICAgICdzdG9wLW5lYXIteW91LXJhaWwnOiAnU8O2ayBuw6RydMOlZ2VyIGVsbGVyIHN0YXRpb25lcicsXG4gICAgJ3N0b3AtbmVhci15b3Utc3Vid2F5JzogJ1PDtmsgbWV0cm9saW5qZXIgZWxsZXIgc3RhdGlvbmVyJyxcbiAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ1PDtmsgc3DDpXJ2YWdubGluamVyIGVsbGVyIGjDpWxscGxhdHNlcicsXG4gICAgJ3N0b3Atcm91dGUtc3RhdGlvbic6ICdCdXNzIG9jaCBzdG9wcCBzw7ZrbmluZ2VuJyxcbiAgICAndG9kYXktYXQnOiAnaSBkYWcga2wnLFxuICAgICd0b21vcnJvdy1hdCc6ICdpIG1vcmdvbicsXG4gICAgdHJhbTogJ1Nww6VydmFnbicsXG4gICAgdHJhY2s6ICdTcMOlcicsXG4gICAgJ3VzZS1vd24tcG9zaXRpb24nOiAnQW52w6RuZCBtaW4gcG9zaXRpb24nLFxuICAgICdzZWxlY3QtZnJvbS1tYXAnOiAnVsOkbGogcG9zaXRpb24gZnLDpW4ga2FydGFuJyxcbiAgICAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucyc6ICdWw6RsaiBmcsOlbiBlZ25hIHBsYXRzZXInLFxuICAgIHZlbnVlOiAnTcO2dGVzcGxhdHMnLFxuICAgICd2aWEtcG9pbnQnOiAnVmlhIHB1bmt0JyxcbiAgICB3aGVyZTogJ1ZhcnQgdmlsbCBkdSDDpWthPycsXG4gICAgcGxhY2U6ICdQbGF0cycsXG4gIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCB0cmFuc2xhdGlvbnM7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRmlubmlzaCBbZmldXG4vLyEgYXV0aG9yIDogVGFybW8gQWlkYW50YXVzdGEgOiBodHRwczovL2dpdGh1Yi5jb20vYmxlYWRvZlxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG51bWJlcnNQYXN0ID0gJ25vbGxhIHlrc2kga2Frc2kga29sbWUgbmVsasOkIHZpaXNpIGt1dXNpIHNlaXRzZW3DpG4ga2FoZGVrc2FuIHloZGVrc8Okbicuc3BsaXQoXG4gICAgICAgICAgICAnICdcbiAgICAgICAgKSxcbiAgICAgICAgbnVtYmVyc0Z1dHVyZSA9IFtcbiAgICAgICAgICAgICdub2xsYScsXG4gICAgICAgICAgICAneWhkZW4nLFxuICAgICAgICAgICAgJ2thaGRlbicsXG4gICAgICAgICAgICAna29sbWVuJyxcbiAgICAgICAgICAgICduZWxqw6RuJyxcbiAgICAgICAgICAgICd2aWlkZW4nLFxuICAgICAgICAgICAgJ2t1dWRlbicsXG4gICAgICAgICAgICBudW1iZXJzUGFzdFs3XSxcbiAgICAgICAgICAgIG51bWJlcnNQYXN0WzhdLFxuICAgICAgICAgICAgbnVtYmVyc1Bhc3RbOV0sXG4gICAgICAgIF07XG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAnbXV1dGFtYW4gc2VrdW5uaW4nIDogJ211dXRhbWEgc2VrdW50aSc7XG4gICAgICAgICAgICBjYXNlICdzcyc6XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaXNGdXR1cmUgPyAnc2VrdW5uaW4nIDogJ3Nla3VudGlhJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ20nOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc0Z1dHVyZSA/ICdtaW51dXRpbicgOiAnbWludXV0dGknO1xuICAgICAgICAgICAgY2FzZSAnbW0nOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlzRnV0dXJlID8gJ21pbnV1dGluJyA6ICdtaW51dXR0aWEnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ3R1bm5pbicgOiAndHVudGknO1xuICAgICAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlzRnV0dXJlID8gJ3R1bm5pbicgOiAndHVudGlhJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc0Z1dHVyZSA/ICdww6RpdsOkbicgOiAncMOkaXbDpCc7XG4gICAgICAgICAgICBjYXNlICdkZCc6XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaXNGdXR1cmUgPyAncMOkaXbDpG4nIDogJ3DDpGl2w6TDpCc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAna3V1a2F1ZGVuJyA6ICdrdXVrYXVzaSc7XG4gICAgICAgICAgICBjYXNlICdNTSc6XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaXNGdXR1cmUgPyAna3V1a2F1ZGVuJyA6ICdrdXVrYXV0dGEnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAneSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ3Z1b2RlbicgOiAndnVvc2knO1xuICAgICAgICAgICAgY2FzZSAneXknOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlzRnV0dXJlID8gJ3Z1b2RlbicgOiAndnVvdHRhJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQgPSB2ZXJiYWxOdW1iZXIobnVtYmVyLCBpc0Z1dHVyZSkgKyAnICcgKyByZXN1bHQ7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZlcmJhbE51bWJlcihudW1iZXIsIGlzRnV0dXJlKSB7XG4gICAgICAgIHJldHVybiBudW1iZXIgPCAxMFxuICAgICAgICAgICAgPyBpc0Z1dHVyZVxuICAgICAgICAgICAgICAgID8gbnVtYmVyc0Z1dHVyZVtudW1iZXJdXG4gICAgICAgICAgICAgICAgOiBudW1iZXJzUGFzdFtudW1iZXJdXG4gICAgICAgICAgICA6IG51bWJlcjtcbiAgICB9XG5cbiAgICB2YXIgZmkgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdmaScsIHtcbiAgICAgICAgbW9udGhzOiAndGFtbWlrdXVfaGVsbWlrdXVfbWFhbGlza3V1X2h1aHRpa3V1X3RvdWtva3V1X2tlc8Oka3V1X2hlaW7DpGt1dV9lbG9rdXVfc3l5c2t1dV9sb2tha3V1X21hcnJhc2t1dV9qb3VsdWt1dScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICd0YW1taV9oZWxtaV9tYWFsaXNfaHVodGlfdG91a29fa2Vzw6RfaGVpbsOkX2Vsb19zeXlzX2xva2FfbWFycmFzX2pvdWx1Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ3N1bm51bnRhaV9tYWFuYW50YWlfdGlpc3RhaV9rZXNraXZpaWtrb190b3JzdGFpX3BlcmphbnRhaV9sYXVhbnRhaScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ3N1X21hX3RpX2tlX3RvX3BlX2xhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ3N1X21hX3RpX2tlX3RvX3BlX2xhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISC5tbScsXG4gICAgICAgICAgICBMVFM6ICdISC5tbS5zcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0RvIE1NTU1bdGFdIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRG8gTU1NTVt0YV0gWVlZWSwgW2tsb10gSEgubW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIERvIE1NTU1bdGFdIFlZWVksIFtrbG9dIEhILm1tJyxcbiAgICAgICAgICAgIGw6ICdELk0uWVlZWScsXG4gICAgICAgICAgICBsbDogJ0RvIE1NTSBZWVlZJyxcbiAgICAgICAgICAgIGxsbDogJ0RvIE1NTSBZWVlZLCBba2xvXSBISC5tbScsXG4gICAgICAgICAgICBsbGxsOiAnZGRkLCBEbyBNTU0gWVlZWSwgW2tsb10gSEgubW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1t0w6Ruw6TDpG5dIFtrbG9dIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbaHVvbWVubmFdIFtrbG9dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBba2xvXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2VpbGVuXSBba2xvXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1t2aWltZV0gZGRkZFtuYV0gW2tsb10gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyBww6TDpHN0w6QnLFxuICAgICAgICAgICAgcGFzdDogJyVzIHNpdHRlbicsXG4gICAgICAgICAgICBzOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBzczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbW06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGhoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkZDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTU06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHk6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHl5OiB0cmFuc2xhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmk7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogU3dlZGlzaCBbc3ZdXG4vLyEgYXV0aG9yIDogSmVucyBBbG0gOiBodHRwczovL2dpdGh1Yi5jb20vdWxtdXNcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzdiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3N2Jywge1xuICAgICAgICBtb250aHM6ICdqYW51YXJpX2ZlYnJ1YXJpX21hcnNfYXByaWxfbWFqX2p1bmlfanVsaV9hdWd1c3RpX3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ2phbl9mZWJfbWFyX2Fwcl9tYWpfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVjJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ3PDtm5kYWdfbcOlbmRhZ190aXNkYWdfb25zZGFnX3RvcnNkYWdfZnJlZGFnX2zDtnJkYWcnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdzw7ZuX23DpW5fdGlzX29uc190b3JfZnJlX2zDtnInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnc8O2X23DpV90aV9vbl90b19mcl9sw7YnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdZWVlZLU1NLUREJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgW2tsLl0gSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgW2tsLl0gSEg6bW0nLFxuICAgICAgICAgICAgbGxsOiAnRCBNTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBsbGxsOiAnZGRkIEQgTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tJZGFnXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0ltb3Jnb25dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbSWfDpXJdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW1DDpV0gZGRkZCBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tJXSBkZGRkW3NdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnb20gJXMnLFxuICAgICAgICAgICAgcGFzdDogJ2bDtnIgJXMgc2VkYW4nLFxuICAgICAgICAgICAgczogJ27DpWdyYSBzZWt1bmRlcicsXG4gICAgICAgICAgICBzczogJyVkIHNla3VuZGVyJyxcbiAgICAgICAgICAgIG06ICdlbiBtaW51dCcsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZXInLFxuICAgICAgICAgICAgaDogJ2VuIHRpbW1lJyxcbiAgICAgICAgICAgIGhoOiAnJWQgdGltbWFyJyxcbiAgICAgICAgICAgIGQ6ICdlbiBkYWcnLFxuICAgICAgICAgICAgZGQ6ICclZCBkYWdhcicsXG4gICAgICAgICAgICBNOiAnZW4gbcOlbmFkJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbcOlbmFkZXInLFxuICAgICAgICAgICAgeTogJ2V0dCDDpXInLFxuICAgICAgICAgICAgeXk6ICclZCDDpXInLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oXFw6ZXxcXDphKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgb3V0cHV0ID1cbiAgICAgICAgICAgICAgICAgICAgfn4oKG51bWJlciAlIDEwMCkgLyAxMCkgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJzplJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICc6YSdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMlxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnOmEnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJzplJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiAnOmUnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN2O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEdlcm1hbiBbZGVdXG4vLyEgYXV0aG9yIDogbGx1Y2hzIDogaHR0cHM6Ly9naXRodWIuY29tL2xsdWNoc1xuLy8hIGF1dGhvcjogTWVuZWxpb24gRWxlbnPDumxlOiBodHRwczovL2dpdGh1Yi5jb20vT2lyZVxuLy8hIGF1dGhvciA6IE1pa29sYWogRGFkZWxhIDogaHR0cHM6Ly9naXRodWIuY29tL21pazAxYWpcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NSZWxhdGl2ZVRpbWUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgICAgICBtOiBbJ2VpbmUgTWludXRlJywgJ2VpbmVyIE1pbnV0ZSddLFxuICAgICAgICAgICAgaDogWydlaW5lIFN0dW5kZScsICdlaW5lciBTdHVuZGUnXSxcbiAgICAgICAgICAgIGQ6IFsnZWluIFRhZycsICdlaW5lbSBUYWcnXSxcbiAgICAgICAgICAgIGRkOiBbbnVtYmVyICsgJyBUYWdlJywgbnVtYmVyICsgJyBUYWdlbiddLFxuICAgICAgICAgICAgdzogWydlaW5lIFdvY2hlJywgJ2VpbmVyIFdvY2hlJ10sXG4gICAgICAgICAgICBNOiBbJ2VpbiBNb25hdCcsICdlaW5lbSBNb25hdCddLFxuICAgICAgICAgICAgTU06IFtudW1iZXIgKyAnIE1vbmF0ZScsIG51bWJlciArICcgTW9uYXRlbiddLFxuICAgICAgICAgICAgeTogWydlaW4gSmFocicsICdlaW5lbSBKYWhyJ10sXG4gICAgICAgICAgICB5eTogW251bWJlciArICcgSmFocmUnLCBudW1iZXIgKyAnIEphaHJlbiddLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/IGZvcm1hdFtrZXldWzBdIDogZm9ybWF0W2tleV1bMV07XG4gICAgfVxuXG4gICAgdmFyIGRlID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZGUnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcl9GZWJydWFyX03DpHJ6X0FwcmlsX01haV9KdW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbi5fRmViLl9Nw6Ryel9BcHIuX01haV9KdW5pX0p1bGlfQXVnLl9TZXAuX09rdC5fTm92Ll9EZXouJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ1Nvbm50YWdfTW9udGFnX0RpZW5zdGFnX01pdHR3b2NoX0Rvbm5lcnN0YWdfRnJlaXRhZ19TYW1zdGFnJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnU28uX01vLl9EaS5fTWkuX0RvLl9Gci5fU2EuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1NvX01vX0RpX01pX0RvX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QuIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRC4gTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbaGV1dGUgdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW21vcmdlbiB1bV0gTFQgW1Vocl0nLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFt1bV0gTFQgW1Vocl0nLFxuICAgICAgICAgICAgbGFzdERheTogJ1tnZXN0ZXJuIHVtXSBMVCBbVWhyXScsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tsZXR6dGVuXSBkZGRkIFt1bV0gTFQgW1Vocl0nLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2luICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICd2b3IgJXMnLFxuICAgICAgICAgICAgczogJ2VpbiBwYWFyIFNla3VuZGVuJyxcbiAgICAgICAgICAgIHNzOiAnJWQgU2VrdW5kZW4nLFxuICAgICAgICAgICAgbTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIG1tOiAnJWQgTWludXRlbicsXG4gICAgICAgICAgICBoOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgaGg6ICclZCBTdHVuZGVuJyxcbiAgICAgICAgICAgIGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBkZDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHc6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB3dzogJyVkIFdvY2hlbicsXG4gICAgICAgICAgICBNOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgTU06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeXk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGU7XG5cbn0pKSk7XG4iLCJmdW5jdGlvbiBzdHlsZUluamVjdChjc3MsIHJlZikge1xuICBpZiAoIHJlZiA9PT0gdm9pZCAwICkgcmVmID0ge307XG4gIHZhciBpbnNlcnRBdCA9IHJlZi5pbnNlcnRBdDtcblxuICBpZiAoIWNzcyB8fCB0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7IHJldHVybjsgfVxuXG4gIHZhciBoZWFkID0gZG9jdW1lbnQuaGVhZCB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xuICB2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICBzdHlsZS50eXBlID0gJ3RleHQvY3NzJztcblxuICBpZiAoaW5zZXJ0QXQgPT09ICd0b3AnKSB7XG4gICAgaWYgKGhlYWQuZmlyc3RDaGlsZCkge1xuICAgICAgaGVhZC5pbnNlcnRCZWZvcmUoc3R5bGUsIGhlYWQuZmlyc3RDaGlsZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgfVxuXG4gIGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICB9IGVsc2Uge1xuICAgIHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0eWxlSW5qZWN0O1xuIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdE1vZGFsIGZyb20gJ3JlYWN0LW1vZGFsJztcbmltcG9ydCBjeCBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBJY29uIGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LWljb24nO1xuaW1wb3J0IERpYWxvZ01vZGFsIGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LWRpYWxvZy1tb2RhbCc7XG5pbXBvcnQgQXV0b3N1Z2dlc3QgZnJvbSAncmVhY3QtYXV0b3N1Z2dlc3QnO1xuaW1wb3J0IG1vYmlsZVN0eWxlcyBmcm9tICcuL01vYmlsZVNlYXJjaC5zY3NzJztcbmltcG9ydCBtb2JpbGVOb1Njcm9sbFN0eWxlcyBmcm9tICcuL01vYmlsZU5vU2Nyb2xsLnNjc3MnO1xuXG5jbGFzcyBBdXRvc3VnZ2VzdFBhdGNoIGV4dGVuZHMgQXV0b3N1Z2dlc3Qge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBzZWxmLm9uU3VnZ2VzdGlvblRvdWNoTW92ZSA9ICgpID0+IHtcbiAgICAgIHNlbGYuanVzdFNlbGVjdGVkU3VnZ2VzdGlvbiA9IGZhbHNlO1xuICAgICAgc2VsZi5wcmVzc2VkU3VnZ2VzdGlvbiA9IG51bGw7XG4gICAgfTtcbiAgfVxufVxuXG5jb25zdCBNb2JpbGVTZWFyY2ggPSAoe1xuICBhcHBFbGVtZW50LFxuICBpZCxcbiAgY2xvc2VIYW5kbGUsXG4gIGNsZWFySW5wdXQsXG4gIHZhbHVlLFxuICBzdWdnZXN0aW9ucyxcbiAgaW5wdXRQcm9wcyxcbiAgZmV0Y2hGdW5jdGlvbixcbiAgcmVuZGVyU3VnZ2VzdGlvbixcbiAgZ2V0U3VnZ2VzdGlvblZhbHVlLFxuICBhcmlhTGFiZWwsXG4gIGxhYmVsLFxuICBvblN1Z2dlc3Rpb25TZWxlY3RlZCxcbiAgY2xlYXJPbGRTZWFyY2hlcyxcbiAgZGlhbG9nSGVhZGVyVGV4dCxcbiAgZGlhbG9nUHJpbWFyeUJ1dHRvblRleHQsXG4gIGRpYWxvZ1NlY29uZGFyeUJ1dHRvblRleHQsXG4gIGNsZWFySW5wdXRCdXR0b25UZXh0LFxuICBmb2N1c0lucHV0LFxuICBjb2xvcixcbiAgaG92ZXJDb2xvcixcbiAgYWNjZXNzaWJsZVByaW1hcnlDb2xvcixcbiAgc2VhcmNoT3BlbixcbiAgZm9udFdlaWdodHMsXG4gIHNob3dTY3JvbGwsXG59KSA9PiB7XG4gIGNvbnN0IHN0eWxlcyA9IHNob3dTY3JvbGwgPyBtb2JpbGVTdHlsZXMgOiBtb2JpbGVOb1Njcm9sbFN0eWxlcztcblxuICBjb25zdCBpbnB1dElkID0gYCR7aWR9LWlucHV0YDtcbiAgY29uc3QgbGFiZWxJZCA9IGAke2lkfS1sYWJlbGA7XG5cbiAgY29uc3QgW2lzRGlhbG9nT3Blbiwgc2V0RGlhbG9nT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGlucHV0UmVmID0gUmVhY3QudXNlUmVmKCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBSZWFjdE1vZGFsLnNldEFwcEVsZW1lbnQoYXBwRWxlbWVudCk7XG4gIH0sIFtdKTtcblxuICBjb25zdCBvbkNsb3NlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNsb3NlSGFuZGxlKCk7XG4gIH0pO1xuXG4gIGNvbnN0IG9uU2VsZWN0ID0gKGUsIHJlZikgPT4ge1xuICAgIGlmIChyZWYuc3VnZ2VzdGlvbi50eXBlID09PSAnY2xlYXItc2VhcmNoLWhpc3RvcnknKSB7XG4gICAgICBzZXREaWFsb2dPcGVuKHRydWUpO1xuICAgIH0gZWxzZSBpZiAoIXJlZi5zdWdnZXN0aW9uLnByb3BlcnRpZXMuYXJyb3dDbGlja2VkKSB7XG4gICAgICAvLyBTZWxlY3QgaXRlbSBpZiBmaWxsIGlucHV0IGJ1dHRvbiBpcyBub3QgcHJlc3NlZCAoZGlhZ29uYWwgYXJyb3cgaW4gc3VnZ2VzdGlvbiBpdGVtcylcbiAgICAgIG9uU3VnZ2VzdGlvblNlbGVjdGVkKGUsIHJlZik7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudCA9IGV2ZW50ID0+IHtcbiAgICBjb25zdCBzcGFjZSA9IFsxMywgJyAnLCAnU3BhY2ViYXInXTtcbiAgICBjb25zdCBlbnRlciA9IFszMiwgJ0VudGVyJ107XG4gICAgY29uc3Qga2V5ID0gKGV2ZW50ICYmIChldmVudC5rZXkgfHwgZXZlbnQud2hpY2ggfHwgZXZlbnQua2V5Q29kZSkpIHx8ICcnO1xuXG4gICAgaWYgKCFrZXkgfHwgIXNwYWNlLmNvbmNhdChlbnRlcikuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIGNvbnN0IGdldFZhbHVlID0gc3VnZ2VzdGlvbiA9PiB7XG4gICAgaWYgKHN1Z2dlc3Rpb24udHlwZSA9PT0gJ2NsZWFyLXNlYXJjaC1oaXN0b3J5Jykge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gZ2V0U3VnZ2VzdGlvblZhbHVlKHN1Z2dlc3Rpb24pO1xuICB9O1xuXG4gIGNvbnN0IHJlbmRlckl0ZW0gPSBpdGVtID0+IHtcbiAgICBpZiAoaXRlbS50eXBlID09PSAnY2xlYXItc2VhcmNoLWhpc3RvcnknKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9e3N0eWxlc1snY2xlYXItc2VhcmNoLWhpc3RvcnknXX0+XG4gICAgICAgICAge2l0ZW0ubGFiZWxJZH1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcmVuZGVyU3VnZ2VzdGlvbihpdGVtKTtcbiAgfTtcblxuICBjb25zdCByZW5kZXJEaWFsb2dNb2RhbCA9ICgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPERpYWxvZ01vZGFsXG4gICAgICAgIGFwcEVsZW1lbnQ9e2FwcEVsZW1lbnR9XG4gICAgICAgIGlzTW9kYWxPcGVuPXtpc0RpYWxvZ09wZW59XG4gICAgICAgIGhhbmRsZUNsb3NlPXsoKSA9PiBzZXREaWFsb2dPcGVuKGZhbHNlKX1cbiAgICAgICAgaGVhZGVyVGV4dD17ZGlhbG9nSGVhZGVyVGV4dH1cbiAgICAgICAgcHJpbWFyeUJ1dHRvblRleHQ9e2RpYWxvZ1ByaW1hcnlCdXR0b25UZXh0fVxuICAgICAgICBzZWNvbmRhcnlCdXR0b25UZXh0PXtkaWFsb2dTZWNvbmRhcnlCdXR0b25UZXh0fVxuICAgICAgICBwcmltYXJ5QnV0dG9uT25DbGljaz17KCkgPT4ge1xuICAgICAgICAgIGNsZWFyT2xkU2VhcmNoZXMoKTtcbiAgICAgICAgICBzZXREaWFsb2dPcGVuKGZhbHNlKTtcbiAgICAgICAgfX1cbiAgICAgICAgc2Vjb25kYXJ5QnV0dG9uT25DbGljaz17KCkgPT4gc2V0RGlhbG9nT3BlbihmYWxzZSl9XG4gICAgICAgIGNvbG9yPXtjb2xvcn1cbiAgICAgICAgaG92ZXJDb2xvcj17aG92ZXJDb2xvcn1cbiAgICAgICAgZm9udFdlaWdodHM9e2ZvbnRXZWlnaHRzfVxuICAgICAgLz5cbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IGNsZWFyQnV0dG9uID0gKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1snY2xlYXItaW5wdXQnXX1cbiAgICAgICAgb25DbGljaz17Y2xlYXJJbnB1dH1cbiAgICAgICAgb25LZXlEb3duPXtlID0+IGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudChlKSAmJiBjbGVhcklucHV0KCl9XG4gICAgICAgIGFyaWEtbGFiZWw9e2NsZWFySW5wdXRCdXR0b25UZXh0fVxuICAgICAgPlxuICAgICAgICA8SWNvbiBpbWc9XCJjbG9zZVwiIGNvbG9yPXtjb2xvcn0gLz5cbiAgICAgIDwvYnV0dG9uPlxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgcmVuZGVyQ29udGVudCA9ICgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snY29tYm9ib3gtY29udGFpbmVyJ119IGh0bWxGb3I9e2lucHV0SWR9PlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ2NvbWJvYm94LWljb24nXX1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvbkNsb3NlKCl9XG4gICAgICAgICAgb25LZXlEb3duPXtlID0+IGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudChlKSAmJiBvbkNsb3NlKCl9XG4gICAgICAgICAgYXJpYS1sYWJlbD17ZGlhbG9nU2Vjb25kYXJ5QnV0dG9uVGV4dH1cbiAgICAgICAgICB0YWJJbmRleD17MH1cbiAgICAgICAgPlxuICAgICAgICAgIDxJY29uIGltZz1cImFycm93XCIgLz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzWydyaWdodC1jb2x1bW4nXX0+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXNbJ2NvbWJvYm94LWxhYmVsJ119IGlkPXtsYWJlbElkfT5cbiAgICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPEF1dG9zdWdnZXN0UGF0Y2hcbiAgICAgICAgICAgIGFsd2F5c1JlbmRlclN1Z2dlc3Rpb25zXG4gICAgICAgICAgICBpZD17aWR9XG4gICAgICAgICAgICBzdWdnZXN0aW9ucz17c3VnZ2VzdGlvbnN9XG4gICAgICAgICAgICBvblN1Z2dlc3Rpb25zRmV0Y2hSZXF1ZXN0ZWQ9e2ZldGNoRnVuY3Rpb259XG4gICAgICAgICAgICBnZXRTdWdnZXN0aW9uVmFsdWU9e2dldFZhbHVlfVxuICAgICAgICAgICAgcmVuZGVyU3VnZ2VzdGlvbj17cmVuZGVySXRlbX1cbiAgICAgICAgICAgIC8vIGZvY3VzSW5wdXRPblN1Z2dlc3Rpb25DbGljayBtdXN0IGJlIHNldCB0byB0cnVlLlxuICAgICAgICAgICAgLy8gSWYgc2V0IHRvIGZhbHNlLCBpbnB1dCB3b24ndCBiZSBmb2N1c2VkIHdoZW4gdXNlciBjbGlja3Mgb25cbiAgICAgICAgICAgIC8vIEZpbGwgaW5wdXQgYnV0dG9uIGluIHN1Z2dlc3Rpb24gbGlzdC4gKGRpYWdvbmFsIGFycm93IGluIHN0cmVldCBuYW1lIGl0ZW1zKVxuICAgICAgICAgICAgZm9jdXNJbnB1dE9uU3VnZ2VzdGlvbkNsaWNrXG4gICAgICAgICAgICBzaG91bGRSZW5kZXJTdWdnZXN0aW9ucz17KCkgPT4gdHJ1ZX1cbiAgICAgICAgICAgIGlucHV0UHJvcHM9e3tcbiAgICAgICAgICAgICAgLi4uaW5wdXRQcm9wcyxcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBjeChcbiAgICAgICAgICAgICAgICBgJHtzdHlsZXMuaW5wdXR9ICR7c3R5bGVzW2lkXSB8fCAnJ30gJHtcbiAgICAgICAgICAgICAgICAgIGlucHV0UHJvcHMudmFsdWUgPyBzdHlsZXMuaGFzVmFsdWUgOiAnJ1xuICAgICAgICAgICAgICAgIH1gLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBhdXRvRm9jdXM6IHRydWUsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgcmVuZGVySW5wdXRDb21wb25lbnQ9e3AgPT4gKFxuICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIDxpbnB1dCBhcmlhLWxhYmVsPXthcmlhTGFiZWx9IGlkPXtpZH0gey4uLnB9IC8+XG4gICAgICAgICAgICAgICAge3ZhbHVlICYmIGNsZWFyQnV0dG9uKCl9XG4gICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHRoZW1lPXtzdHlsZXN9XG4gICAgICAgICAgICBvblN1Z2dlc3Rpb25TZWxlY3RlZD17b25TZWxlY3R9XG4gICAgICAgICAgICByZWY9e2lucHV0UmVmfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH07XG4gIGlmIChmb2N1c0lucHV0ICYmIGlucHV0UmVmLmN1cnJlbnQ/LmlucHV0KSB7XG4gICAgaW5wdXRSZWYuY3VycmVudC5pbnB1dC5mb2N1cygpO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8UmVhY3RNb2RhbFxuICAgICAgaXNPcGVuPXtzZWFyY2hPcGVufVxuICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ21vYmlsZS1tb2RhbCddfVxuICAgICAgb3ZlcmxheUNsYXNzTmFtZT17c3R5bGVzWydtb2JpbGUtbW9kYWwtb3ZlcmxheSddfVxuICAgICAgb25BZnRlckNsb3NlPXtvbkNsb3NlfVxuICAgICAgc2hvdWxkQ2xvc2VPbkVzY1xuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ21vYmlsZS1tb2RhbC1jb250ZW50J119XG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgJy0tY29sb3InOiBgJHtjb2xvcn1gLFxuICAgICAgICAgICctLWFjY2Vzc2libGUtcHJpbWFyeS1jb2xvcic6IGFjY2Vzc2libGVQcmltYXJ5Q29sb3IsXG4gICAgICAgICAgJy0taG92ZXItY29sb3InOiBgJHtob3ZlckNvbG9yfWAsXG4gICAgICAgICAgJy0tZm9udC13ZWlnaHQtbWVkaXVtJzogZm9udFdlaWdodHMubWVkaXVtLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7cmVuZGVyQ29udGVudCgpfVxuICAgICAgICB7cmVuZGVyRGlhbG9nTW9kYWwoKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvUmVhY3RNb2RhbD5cbiAgKTtcbn07XG5cbk1vYmlsZVNlYXJjaC5wcm9wVHlwZXMgPSB7XG4gIGFwcEVsZW1lbnQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgY2xvc2VIYW5kbGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGNsZWFySW5wdXQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjbGVhcklucHV0QnV0dG9uVGV4dDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBzdWdnZXN0aW9uczogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsXG4gIGlucHV0UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25CbHVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgfSkuaXNSZXF1aXJlZCxcbiAgZmV0Y2hGdW5jdGlvbjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgZ2V0U3VnZ2VzdGlvblZhbHVlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICByZW5kZXJTdWdnZXN0aW9uOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvblN1Z2dlc3Rpb25TZWxlY3RlZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgY2xlYXJPbGRTZWFyY2hlczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgYXJpYUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBkaWFsb2dIZWFkZXJUZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICBkaWFsb2dQcmltYXJ5QnV0dG9uVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgZGlhbG9nU2Vjb25kYXJ5QnV0dG9uVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgZm9jdXNJbnB1dDogUHJvcFR5cGVzLmJvb2wsXG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBob3ZlckNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBhY2Nlc3NpYmxlUHJpbWFyeUNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHNlYXJjaE9wZW46IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIGZvbnRXZWlnaHRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIG1lZGl1bTogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICB9KS5pc1JlcXVpcmVkLFxuICBzaG93U2Nyb2xsOiBQcm9wVHlwZXMuYm9vbCxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IE1vYmlsZVNlYXJjaDtcbiIsIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtcInJlYWN0XCJdLCBmYWN0b3J5KTtcblx0ZWxzZSB7XG5cdFx0dmFyIGEgPSB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgPyBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSkgOiBmYWN0b3J5KHJvb3RbXCJyZWFjdFwiXSk7XG5cdFx0Zm9yKHZhciBpIGluIGEpICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgPyBleHBvcnRzIDogcm9vdClbaV0gPSBhW2ldO1xuXHR9XG59KSh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDogdGhpcywgZnVuY3Rpb24oX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9yZWFjdF9fKSB7XG5yZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbi8qKioqKiovIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4vKioqKioqLyBcdFx0cmV0dXJuIG5zO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vcGFja2FnZXMvaG9va3Mvc3JjL2luZGV4LnRzXCIpO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoe1xuXG4vKioqLyBcIi4vcGFja2FnZXMvaG9va3Mvc3JjL2luZGV4LnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vcGFja2FnZXMvaG9va3Mvc3JjL2luZGV4LnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fZXhwb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyKSB8fCBmdW5jdGlvbihtLCBleHBvcnRzKSB7XG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzLCBwKSkgX19jcmVhdGVCaW5kaW5nKGV4cG9ydHMsIG0sIHApO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbl9fZXhwb3J0U3RhcihfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3VzZU91dHNpZGVSZWFjdGVyICovIFwiLi9wYWNrYWdlcy9ob29rcy9zcmMvdXNlT3V0c2lkZVJlYWN0ZXIudHN4XCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3VzZVNjcm9sbExvY2sgKi8gXCIuL3BhY2thZ2VzL2hvb2tzL3NyYy91c2VTY3JvbGxMb2NrLnRzXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3VzZUFycm93TmF2aWdhdGlvbiAqLyBcIi4vcGFja2FnZXMvaG9va3Mvc3JjL3VzZUFycm93TmF2aWdhdGlvbi50c3hcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgKi8gXCIuL3BhY2thZ2VzL2hvb2tzL3NyYy91c2VJbnRlcnNlY3Rpb25PYnNlcnZlci50c1wiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIoX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi91c2VJc0JyZWFrcG9pbnQgKi8gXCIuL3BhY2thZ2VzL2hvb2tzL3NyYy91c2VJc0JyZWFrcG9pbnQudHNcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCAqLyBcIi4vcGFja2FnZXMvaG9va3Mvc3JjL3VzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QudHNcIiksIGV4cG9ydHMpO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vcGFja2FnZXMvaG9va3Mvc3JjL3VzZUFycm93TmF2aWdhdGlvbi50c3hcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3BhY2thZ2VzL2hvb2tzL3NyYy91c2VBcnJvd05hdmlnYXRpb24udHN4ICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudXNlQXJyb3dOYXZpZ2F0aW9uID0gdm9pZCAwO1xudmFyIHJlYWN0XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISByZWFjdCAqLyBcInJlYWN0XCIpO1xudmFyIHVzZUFycm93TmF2aWdhdGlvbiA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBsaXN0SXRlbXMgPSBfYS5saXN0SXRlbXMsIG9uQXJyb3dVcE9yRG93biA9IF9hLm9uQXJyb3dVcE9yRG93bjtcbiAgICB2YXIgX2IgPSAoMCwgcmVhY3RfMS51c2VTdGF0ZSkoMCksIHNlbGVjdGVkSW5kZXggPSBfYlswXSwgc2V0U2VsZWN0ZWRJbmRleCA9IF9iWzFdO1xuICAgIHZhciBzZXRTZWxlY3RlZEluZGV4V2l0aFVzZUNhbGxiYWNrID0gKDAsIHJlYWN0XzEudXNlQ2FsbGJhY2spKGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICBzZXRTZWxlY3RlZEluZGV4KGluZGV4KTtcbiAgICB9LCBbbGlzdEl0ZW1zXSk7XG4gICAgdmFyIGhhbmRsZVVwQXJyb3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChzZWxlY3RlZEluZGV4ID4gMCkge1xuICAgICAgICAgICAgc2V0U2VsZWN0ZWRJbmRleFdpdGhVc2VDYWxsYmFjayhzZWxlY3RlZEluZGV4IC0gMSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzZXRTZWxlY3RlZEluZGV4V2l0aFVzZUNhbGxiYWNrKGxpc3RJdGVtcy5sZW5ndGggLSAxKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdmFyIGhhbmRsZURvd25BcnJvdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHNlbGVjdGVkSW5kZXggPCBsaXN0SXRlbXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgc2V0U2VsZWN0ZWRJbmRleFdpdGhVc2VDYWxsYmFjayhzZWxlY3RlZEluZGV4ICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzZXRTZWxlY3RlZEluZGV4V2l0aFVzZUNhbGxiYWNrKDApO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB2YXIgaGFuZGxlS2V5RG93biA9IGZ1bmN0aW9uIChrZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlib2FyZEV2ZW50LmtleTtcbiAgICAgICAgaWYgKGxpc3RJdGVtcyA9PT0gbnVsbCB8fCBsaXN0SXRlbXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGxpc3RJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgICAgICAgICAgIG9uQXJyb3dVcE9yRG93biAmJiBvbkFycm93VXBPckRvd24oKTtcbiAgICAgICAgICAgICAgICBrZXlib2FyZEV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgaGFuZGxlVXBBcnJvdygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgICAgICAgICAgIG9uQXJyb3dVcE9yRG93biAmJiBvbkFycm93VXBPckRvd24oKTtcbiAgICAgICAgICAgICAgICBrZXlib2FyZEV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgaGFuZGxlRG93bkFycm93KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9O1xuICAgICgwLCByZWFjdF8xLnVzZUVmZmVjdCkoZnVuY3Rpb24gKCkge1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZUtleURvd24pO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVLZXlEb3duKTsgfTtcbiAgICB9KTtcbiAgICAoMCwgcmVhY3RfMS51c2VFZmZlY3QpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2V0U2VsZWN0ZWRJbmRleFdpdGhVc2VDYWxsYmFjaygwKTtcbiAgICB9LCBbbGlzdEl0ZW1zXSk7XG4gICAgcmV0dXJuIHsgc2VsZWN0ZWRJbmRleDogc2VsZWN0ZWRJbmRleCB9O1xufTtcbmV4cG9ydHMudXNlQXJyb3dOYXZpZ2F0aW9uID0gdXNlQXJyb3dOYXZpZ2F0aW9uO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vcGFja2FnZXMvaG9va3Mvc3JjL3VzZUludGVyc2VjdGlvbk9ic2VydmVyLnRzXCI6XG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vcGFja2FnZXMvaG9va3Mvc3JjL3VzZUludGVyc2VjdGlvbk9ic2VydmVyLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnVzZUludGVyc2VjdGlvbk9ic2VydmVyID0gdm9pZCAwO1xudmFyIHJlYWN0XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISByZWFjdCAqLyBcInJlYWN0XCIpO1xudmFyIHVzZUludGVyc2VjdGlvbk9ic2VydmVyID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgY29udGFpbmVyUmVmID0gKDAsIHJlYWN0XzEudXNlUmVmKShudWxsKTtcbiAgICB2YXIgX2EgPSAoMCwgcmVhY3RfMS51c2VTdGF0ZSkoZmFsc2UpLCBpc1Zpc2libGUgPSBfYVswXSwgc2V0SXNWaXNpYmxlID0gX2FbMV07XG4gICAgdmFyIGhhbmRsZUludGVyc2VjdGlvbiA9IGZ1bmN0aW9uIChlbnRyaWVzKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IGVudHJpZXNbMF07XG4gICAgICAgIHNldElzVmlzaWJsZShlbnRyeS5pc0ludGVyc2VjdGluZyk7XG4gICAgfTtcbiAgICAoMCwgcmVhY3RfMS51c2VFZmZlY3QpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHdpbmRvdyAmJiB3aW5kb3cuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgIHZhciBvYnNlcnZlcl8xID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGhhbmRsZUludGVyc2VjdGlvbiwgb3B0aW9ucyk7XG4gICAgICAgICAgICB2YXIgZWxlbWVudF8xID0gY29udGFpbmVyUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgICBpZiAoY29udGFpbmVyUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICBvYnNlcnZlcl8xLm9ic2VydmUoY29udGFpbmVyUmVmLmN1cnJlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudF8xKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyXzEudW5vYnNlcnZlKGVsZW1lbnRfMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNldElzVmlzaWJsZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9LCBbY29udGFpbmVyUmVmLCBvcHRpb25zXSk7XG4gICAgcmV0dXJuIHsgY29udGFpbmVyUmVmOiBjb250YWluZXJSZWYsIGlzVmlzaWJsZTogaXNWaXNpYmxlIH07XG59O1xuZXhwb3J0cy51c2VJbnRlcnNlY3Rpb25PYnNlcnZlciA9IHVzZUludGVyc2VjdGlvbk9ic2VydmVyO1xuZXhwb3J0cy5kZWZhdWx0ID0gZXhwb3J0cy51c2VJbnRlcnNlY3Rpb25PYnNlcnZlcjtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3BhY2thZ2VzL2hvb2tzL3NyYy91c2VJc0JyZWFrcG9pbnQudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vcGFja2FnZXMvaG9va3Mvc3JjL3VzZUlzQnJlYWtwb2ludC50cyAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudXNlSXNCcmVha3BvaW50ID0gdm9pZCAwO1xudmFyIHJlYWN0XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISByZWFjdCAqLyBcInJlYWN0XCIpO1xudmFyIGJyZWFrcG9pbnRzID0ge1xuICAgIHhzOiAxLFxuICAgIG1vYmlsZVNtYWxsOiAzMjAsXG4gICAgbW9iaWxlOiAzNzUsXG4gICAgdGFibGV0OiA3NjgsXG4gICAgdGFibGV0TGFyZ2U6IDkyMCxcbiAgICBkZXNrdG9wU21hbGw6IDEwMjQsXG4gICAgZGVza3RvcDogMTI2MCxcbiAgICBkZXNrdG9wTGFyZ2U6IDE0NDBcbn07XG52YXIgdXNlSXNCcmVha3BvaW50ID0gZnVuY3Rpb24gKGJyZWFrcG9pbnQpIHtcbiAgICB2YXIgX2EgPSAoMCwgcmVhY3RfMS51c2VTdGF0ZSkobnVsbCksIHNjcmVlbldpZHRoID0gX2FbMF0sIHNldFNjcmVlbldpZHRoID0gX2FbMV07XG4gICAgdmFyIGhhbmRsZVJlc2l6ZSA9ICgwLCByZWFjdF8xLnVzZUNhbGxiYWNrKShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNldFNjcmVlbldpZHRoKHdpbmRvdy5pbm5lcldpZHRoKTtcbiAgICB9LCBbXSk7XG4gICAgKDAsIHJlYWN0XzEudXNlRWZmZWN0KShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGhhbmRsZVJlc2l6ZSgpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgfSwgW10pO1xuICAgICgwLCByZWFjdF8xLnVzZUVmZmVjdCkoZnVuY3Rpb24gKCkge1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlUmVzaXplLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlUmVzaXplKTsgfTtcbiAgICB9LCBbaGFuZGxlUmVzaXplLCBzY3JlZW5XaWR0aF0pO1xuICAgIHJldHVybiBzY3JlZW5XaWR0aCA+PSBicmVha3BvaW50c1ticmVha3BvaW50XTtcbn07XG5leHBvcnRzLnVzZUlzQnJlYWtwb2ludCA9IHVzZUlzQnJlYWtwb2ludDtcbmV4cG9ydHMuZGVmYXVsdCA9IGV4cG9ydHMudXNlSXNCcmVha3BvaW50O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vcGFja2FnZXMvaG9va3Mvc3JjL3VzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3BhY2thZ2VzL2hvb2tzL3NyYy91c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0LnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCA9IHZvaWQgMDtcbnZhciByZWFjdF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgcmVhY3QgKi8gXCJyZWFjdFwiKTtcbmV4cG9ydHMudXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gcmVhY3RfMS51c2VMYXlvdXRFZmZlY3QgOiByZWFjdF8xLnVzZUVmZmVjdDtcbmV4cG9ydHMuZGVmYXVsdCA9IGV4cG9ydHMudXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdDtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gXCIuL3BhY2thZ2VzL2hvb2tzL3NyYy91c2VPdXRzaWRlUmVhY3Rlci50c3hcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxuICAhKioqIC4vcGFja2FnZXMvaG9va3Mvc3JjL3VzZU91dHNpZGVSZWFjdGVyLnRzeCAqKiohXG4gIFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudXNlT3V0c2lkZVJlYWN0ZXIgPSB2b2lkIDA7XG52YXIgcmVhY3RfMSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIHJlYWN0ICovIFwicmVhY3RcIik7XG4vKipcbiAqIENhbGxzIHJlYWN0ZXJGdW5jdGlvbiBpZiB0aGUgdXNlciBjbGlja3Mgb3V0c2lkZSB0aGUgZWxlbWVudCB0aGF0IGhhcyByZWYgYXMgYSByZWZlcmVuY2UuXG4gKi9cbmZ1bmN0aW9uIHVzZU91dHNpZGVSZWFjdGVyKHJlZiwgcmVhY3RlckZ1bmN0aW9uKSB7XG4gICAgZnVuY3Rpb24gaGFuZGxlQ2xpY2tPdXRzaWRlKGV2ZW50KSB7XG4gICAgICAgIGlmIChyZWYuY3VycmVudCAmJiAhcmVmLmN1cnJlbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgICAgICAgcmVhY3RlckZ1bmN0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgKDAsIHJlYWN0XzEudXNlRWZmZWN0KShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZUNsaWNrT3V0c2lkZSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVDbGlja091dHNpZGUpO1xuICAgICAgICB9O1xuICAgIH0pO1xufVxuZXhwb3J0cy51c2VPdXRzaWRlUmVhY3RlciA9IHVzZU91dHNpZGVSZWFjdGVyO1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyBcIi4vcGFja2FnZXMvaG9va3Mvc3JjL3VzZVNjcm9sbExvY2sudHNcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiAuL3BhY2thZ2VzL2hvb2tzL3NyYy91c2VTY3JvbGxMb2NrLnRzICoqKiFcbiAgXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudXNlU2Nyb2xsTG9jayA9IHZvaWQgMDtcbnZhciByZWFjdF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgcmVhY3QgKi8gXCJyZWFjdFwiKTtcbi8vIERpc2FibGUgYm9keSBzY3JvbGxpbmcgd2hlbiBvdmVybGF5IGlzIHZpc2libGUuXG4vLyBQcmFjdGljYWwgaW4gY29uanVuY3Rpb24gd2l0aCBlLmcuIHJlYWN0LW1vZGFsOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0anMvcmVhY3QtbW9kYWwvaXNzdWVzLzE5MVxudmFyIHVzZVNjcm9sbExvY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGxvY2sgPSAoMCwgcmVhY3RfMS51c2VDYWxsYmFjaykoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgc2Nyb2xsWSA9IHdpbmRvdy5zY3JvbGxZICsgXCJweFwiO1xuICAgICAgICB2YXIgYm9keSA9IGRvY3VtZW50LmJvZHk7XG4gICAgICAgIGJvZHkuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xuICAgICAgICBib2R5LnN0eWxlLnRvcCA9IFwiLVwiICsgc2Nyb2xsWTtcbiAgICB9LCBbXSk7XG4gICAgdmFyIHVubG9jayA9ICgwLCByZWFjdF8xLnVzZUNhbGxiYWNrKShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBib2R5ID0gZG9jdW1lbnQuYm9keTtcbiAgICAgICAgdmFyIHNjcm9sbFkgPSBib2R5LnN0eWxlLnRvcDtcbiAgICAgICAgdmFyIHBhcnNlZFNjcm9sbFkgPSBwYXJzZUludChzY3JvbGxZIHx8ICcwJykgKiAtMTtcbiAgICAgICAgYm9keS5zdHlsZS5wb3NpdGlvbiA9ICcnO1xuICAgICAgICBib2R5LnN0eWxlLnRvcCA9ICcnO1xuICAgICAgICBpZiAocGFyc2VkU2Nyb2xsWSkge1xuICAgICAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIHBhcnNlSW50KHNjcm9sbFkgfHwgJzAnKSAqIC0xKTtcbiAgICAgICAgfVxuICAgIH0sIFtdKTtcbiAgICByZXR1cm4geyBsb2NrOiBsb2NrLCB1bmxvY2s6IHVubG9jayB9O1xufTtcbmV4cG9ydHMudXNlU2Nyb2xsTG9jayA9IHVzZVNjcm9sbExvY2s7XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIFwicmVhY3RcIjpcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcbiAgISoqKiBleHRlcm5hbCBcInJlYWN0XCIgKioqIVxuICBcXCoqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfcmVhY3RfXztcblxuLyoqKi8gfSlcblxuLyoqKioqKi8gfSk7XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgaTE4bmV4dCBmcm9tICdpMThuZXh0JztcbmltcG9ydCBjeCBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBBdXRvc3VnZ2VzdCBmcm9tICdyZWFjdC1hdXRvc3VnZ2VzdCc7XG5pbXBvcnQgeyBleGVjdXRlU2VhcmNoIH0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWV4ZWN1dGUtc2VhcmNoLWltbWlkaWF0ZSc7XG5pbXBvcnQgU3VnZ2VzdGlvbkl0ZW0gZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtc3VnZ2VzdGlvbi1pdGVtJztcbmltcG9ydCB7XG4gIGdldE5hbWVMYWJlbCxcbiAgZ2V0U3RvcENvZGUsXG59IGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC11bmlxLWJ5LWxhYmVsJztcbmltcG9ydCB7IGdldFN0b3BOYW1lIH0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWhlbHBlcnMnO1xuaW1wb3J0IGdldExhYmVsIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtbGFiZWwnO1xuaW1wb3J0IEljb24gZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtaWNvbic7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudC10aW1lem9uZSc7XG5pbXBvcnQgJ21vbWVudC9sb2NhbGUvZmknO1xuaW1wb3J0ICdtb21lbnQvbG9jYWxlL3N2JztcbmltcG9ydCAnbW9tZW50L2xvY2FsZS9kZSc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2gvaXNFcXVhbCc7XG5pbXBvcnQgaXNFbXB0eSBmcm9tICdsb2Rhc2gvaXNFbXB0eSc7XG5pbXBvcnQgdHJhbnNsYXRpb25zIGZyb20gJy4vaGVscGVycy90cmFuc2xhdGlvbnMnO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL2hlbHBlcnMvc3R5bGVzLnNjc3MnO1xuaW1wb3J0IE1vYmlsZVNlYXJjaCBmcm9tICcuL2hlbHBlcnMvTW9iaWxlU2VhcmNoJztcbmltcG9ydCB3aXRoU2Nyb2xsTG9jayBmcm9tICcuL2hlbHBlcnMvd2l0aFNjcm9sbExvY2snO1xuXG5tb21lbnQubG9jYWxlKCdlbicpO1xuXG5pMThuZXh0LmluaXQoe1xuICBmYWxsYmFja0xuZzogJ2ZpJyxcbiAgZGVmYXVsdE5TOiAndHJhbnNsYXRpb24nLFxuICBpbnRlcnBvbGF0aW9uOiB7XG4gICAgZXNjYXBlVmFsdWU6IGZhbHNlLCAvLyBub3QgbmVlZGVkIGZvciByZWFjdCBhcyBpdCBlc2NhcGVzIGJ5IGRlZmF1bHRcbiAgfSxcbn0pO1xuXG5jb25zdCBMb2FkaW5nID0gcHJvcHMgPT4gKFxuICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydzcGlubmVyLWxvYWRlciddfT5cbiAgICB7KHByb3BzICYmIHByb3BzLmNoaWxkcmVuKSB8fCAoXG4gICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlc1snc3Itb25seSddfT57aTE4bmV4dC50KCdsb2FkaW5nJyl9PC9zcGFuPlxuICAgICl9XG4gIDwvZGl2PlxuKTtcblxuTG9hZGluZy5wcm9wVHlwZXMgPSB7XG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbn07XG5cbmNvbnN0IGdldFBsYXRmb3JtID0gYWRkZW5kdW0gPT4ge1xuICBpZiAoIWFkZGVuZHVtIHx8ICFhZGRlbmR1bS5HVEZTLnBsYXRmb3JtKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCB7IG1vZGVzLCBwbGF0Zm9ybSB9ID0gYWRkZW5kdW0uR1RGUztcbiAgY29uc3QgdHlwZSA9XG4gICAgbW9kZXMgJiYgbW9kZXNbMF0gPT09ICdSQUlMJyA/IGkxOG5leHQudCgndHJhY2snKSA6IGkxOG5leHQudCgncGxhdGZvcm0nKTtcbiAgcmV0dXJuIFt0eXBlLCBwbGF0Zm9ybV07XG59O1xuXG5mdW5jdGlvbiBnZXRTdWdnZXN0aW9uQ29udGVudChpdGVtKSB7XG4gIGlmIChpdGVtLnR5cGUgIT09ICdGdXR1cmVSb3V0ZScpIHtcbiAgICBpZiAoaXRlbS50eXBlID09PSAnU2VsZWN0RnJvbU1hcCcpIHtcbiAgICAgIHJldHVybiBbJycsIGkxOG5leHQudCgnc2VsZWN0LWZyb20tbWFwJyldO1xuICAgIH1cbiAgICBpZiAoaXRlbS50eXBlID09PSAnQ3VycmVudExvY2F0aW9uJykge1xuICAgICAgcmV0dXJuIFsnJywgaTE4bmV4dC50KCd1c2Utb3duLXBvc2l0aW9uJyldO1xuICAgIH1cbiAgICBpZiAoaXRlbS50eXBlID09PSAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycpIHtcbiAgICAgIHJldHVybiBbJycsIGkxOG5leHQudCgnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucycpXTtcbiAgICB9XG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdCAqL1xuICAgIGxldCBbbmFtZSwgbGFiZWxdID0gZ2V0TmFtZUxhYmVsKGl0ZW0ucHJvcGVydGllcywgdHJ1ZSk7XG4gICAgbGV0IHN1Z2dlc3Rpb25UeXBlO1xuICAgIGlmIChcbiAgICAgIGl0ZW0ucHJvcGVydGllcy5sYXllci50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdiaWtlcmVudGFsJykgfHxcbiAgICAgIGl0ZW0ucHJvcGVydGllcy5sYXllci50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdiaWtlc3RhdGlvbicpXG4gICAgKSB7XG4gICAgICBzdWdnZXN0aW9uVHlwZSA9IGkxOG5leHQudCgnYmlrZXJlbnRhbHN0YXRpb24nKTtcbiAgICAgIGNvbnN0IHN0b3BDb2RlID0gaXRlbS5wcm9wZXJ0aWVzLmxhYmVsSWQ7XG4gICAgICByZXR1cm4gW3N1Z2dlc3Rpb25UeXBlLCBuYW1lLCB1bmRlZmluZWQsIHN0b3BDb2RlXTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnYmlrZXBhcmsnKSB7XG4gICAgICBzdWdnZXN0aW9uVHlwZSA9IGkxOG5leHQudCgnYmlrZXBhcmsnKTtcbiAgICAgIHJldHVybiBbc3VnZ2VzdGlvblR5cGUsIG5hbWUsIHVuZGVmaW5lZCwgdW5kZWZpbmVkXTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnY2FycGFyaycpIHtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gaTE4bmV4dC50KCdjYXJwYXJrJyk7XG4gICAgICByZXR1cm4gW3N1Z2dlc3Rpb25UeXBlLCBuYW1lLCB1bmRlZmluZWQsIHVuZGVmaW5lZF07XG4gICAgfVxuXG4gICAgaWYgKGl0ZW0ucHJvcGVydGllcy5tb2RlKSB7XG4gICAgICBzdWdnZXN0aW9uVHlwZSA9IGkxOG5leHQudChcbiAgICAgICAgaXRlbS5wcm9wZXJ0aWVzLm1vZGUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCdmYXZvdXJpdGUnLCAnJyksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBsYXllciA9IGl0ZW0ucHJvcGVydGllcy5sYXllclxuICAgICAgICAucmVwbGFjZSgncm91dGUtJywgJycpXG4gICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgIC5yZXBsYWNlKCdmYXZvdXJpdGUnLCAnJyk7XG4gICAgICBzdWdnZXN0aW9uVHlwZSA9IGkxOG5leHQudChsYXllcik7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgaXRlbS5wcm9wZXJ0aWVzLmlkICYmXG4gICAgICAoaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnc3RvcCcgfHwgaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnc3RhdGlvbicpXG4gICAgKSB7XG4gICAgICBjb25zdCBzdG9wQ29kZSA9IGdldFN0b3BDb2RlKGl0ZW0ucHJvcGVydGllcyk7XG4gICAgICBjb25zdCBtb2RlID0gaXRlbS5wcm9wZXJ0aWVzLmFkZGVuZHVtPy5HVEZTLm1vZGVzO1xuICAgICAgY29uc3QgcGxhdGZvcm0gPSBnZXRQbGF0Zm9ybShpdGVtLnByb3BlcnRpZXMuYWRkZW5kdW0pO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgc3VnZ2VzdGlvblR5cGUsXG4gICAgICAgIGdldFN0b3BOYW1lKG5hbWUsIHN0b3BDb2RlKSxcbiAgICAgICAgbGFiZWwsXG4gICAgICAgIHN0b3BDb2RlLFxuICAgICAgICBtb2RlLFxuICAgICAgICBwbGF0Zm9ybSxcbiAgICAgIF07XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGl0ZW0ucHJvcGVydGllcy5sYXllciA9PT0gJ2Zhdm91cml0ZVN0b3AnIHx8XG4gICAgICBpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdmYXZvdXJpdGVTdGF0aW9uJ1xuICAgICkge1xuICAgICAgY29uc3QgeyBhZGRyZXNzLCBjb2RlIH0gPSBpdGVtLnByb3BlcnRpZXM7XG4gICAgICBjb25zdCBzdG9OYW1lID0gYWRkcmVzcyA/IGdldFN0b3BOYW1lKGFkZHJlc3Muc3BsaXQoJywnKVswXSwgY29kZSkgOiBuYW1lO1xuICAgICAgY29uc3QgcGxhdGZvcm0gPSBnZXRQbGF0Zm9ybShpdGVtLnByb3BlcnRpZXMuYWRkZW5kdW0pO1xuICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uVHlwZSwgc3RvTmFtZSwgbGFiZWwsIGNvZGUsIHVuZGVmaW5lZCwgcGxhdGZvcm1dO1xuICAgIH1cbiAgICByZXR1cm4gW3N1Z2dlc3Rpb25UeXBlLCBuYW1lLCBsYWJlbF07XG4gIH1cbiAgY29uc3QgeyBvcmlnaW4sIGRlc3RpbmF0aW9uIH0gPSBpdGVtLnByb3BlcnRpZXM7XG4gIGNvbnN0IHRhaWwxID0gb3JpZ2luLmxvY2FsaXR5ID8gYCwgJHtvcmlnaW4ubG9jYWxpdHl9IGZvb2JhcmAgOiAnJztcbiAgY29uc3QgdGFpbDIgPSBkZXN0aW5hdGlvbi5sb2NhbGl0eSA/IGAsICR7ZGVzdGluYXRpb24ubG9jYWxpdHl9YCA6ICcnO1xuICBjb25zdCBuYW1lMSA9IG9yaWdpbi5uYW1lO1xuICBjb25zdCBuYW1lMiA9IGRlc3RpbmF0aW9uLm5hbWU7XG4gIHJldHVybiBbXG4gICAgaTE4bmV4dC50KCdmdXR1cmUtcm91dGUnKSxcbiAgICBgJHtpMThuZXh0LnQoJ29yaWdpbicpfSAke25hbWUxfSR7dGFpbDF9ICR7aTE4bmV4dC50KFxuICAgICAgJ2Rlc3RpbmF0aW9uJyxcbiAgICApfSAke25hbWUyfSR7dGFpbDJ9YCxcbiAgICBpdGVtLnRyYW5zbGF0ZWRUZXh0LFxuICBdO1xufVxuXG5mdW5jdGlvbiB0cmFuc2xhdGVGdXR1cmVSb3V0ZVN1Z2dlc3Rpb25UaW1lKGl0ZW0pIHtcbiAgY29uc3QgdGltZSA9IG1vbWVudC51bml4KGl0ZW0ucHJvcGVydGllcy50aW1lKTtcbiAgbGV0IHN0ciA9IGl0ZW0ucHJvcGVydGllcy5hcnJpdmVCeVxuICAgID8gaTE4bmV4dC50KCdhcnJpdmFsJylcbiAgICA6IGkxOG5leHQudCgnZGVwYXJ0dXJlJyk7XG4gIGlmICh0aW1lLmlzU2FtZShtb21lbnQoKSwgJ2RheScpKSB7XG4gICAgc3RyID0gYCR7c3RyfSAke2kxOG5leHQudCgndG9kYXktYXQnKX1gO1xuICB9IGVsc2UgaWYgKHRpbWUuaXNTYW1lKG1vbWVudCgpLmFkZCgxLCAnZGF5JyksICdkYXknKSkge1xuICAgIHN0ciA9IGAke3N0cn0gJHtpMThuZXh0LnQoJ3RvbW9ycm93LWF0Jyl9YDtcbiAgfSBlbHNlIHtcbiAgICBzdHIgPSBgJHtzdHJ9ICR7dGltZS5mb3JtYXQoJ2RkIEQuTS4nKX1gO1xuICB9XG4gIHN0ciA9IGAke3N0cn0gJHttb21lbnQodGltZSkuZm9ybWF0KCdISDptbScpfWA7XG4gIHJldHVybiBzdHI7XG59XG4vKipcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBzZWFyY2hDb250ZXh0ID0ge1xuICogICBpc1BlbGlhc0xvY2F0aW9uQXdhcmU6IGZhbHNlIC8vIHRydWUgLyBmYWxzZSBkb2VzIExldCBQZWxpYXMgc3VnZ2VzdCBiYXNlZCBvbiBjdXJyZW50IHVzZXIgbG9jYXRpb25cbiAqICAgbWluaW1hbFJlZ2V4cDogdW5kZWZpbmVkIC8vIHVzZWQgZm9yIHRlc3RpbmcgbWluLiByZWdleHAuIEZvciBleGFtcGxlOiBuZXcgUmVnRXhwKCcuezIsfScpLFxuICogICBsaW5lUmVnZXhwOiB1bmRlZmluZWQgLy8gIGlkZW50aWZ5IHNlYXJjaGVzIGZvciByb3V0ZSBudW1iZXJzL2xhYmVsczogYnVzIHwgdHJhaW4gfCBtZXRyby4gRm9yIGV4YW1wbGU6IG5ldyBSZWdFeHAoXG4gKiAgICAvLyAgICcoXlswLTldK1thLXpdPyR8Xlt5dWxlYXBpbmtydGR6XSR8KF5tWzEyXT9iPyQpKScsXG4gKiAgICAvLyAgJ2knLFxuICogICAgLy8gICksXG4gKiAgIFVSTF9QRUxJQVM6ICcnIC8vIHVybCBmb3IgcGVsaWFzIHNlYXJjaGVzXG4gKiAgIGZlZWRJRHM6IFsnSFNMJywgJ0hTTExhdXR0YSddIC8vIEZlZWRJZCdzIGxpa2UgIFtIU0wsIEhTTExhdXR0YV1cbiAqICAgZ2VvY29kaW5nU291cmNlczogWydvYScsJ29zbScsJ25sc2ZpJ10gIC8vIHNvdXJjZXMgZm9yIGdlb2NvZGluZ1xuICogICBnZW9jb2RpbmdTZWFyY2hQYXJhbXM7IHt9ICAvLyBTZWFyY2hwYXJtYXMgZnJvIGdlb2NvZGluZ1xuICogICBnZXRGYXZvdXJpdGVMb2NhdGlvbnM6ICgpID0+ICh7fSksICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhcnJheSBvZiBmYXZvdXJpdGUgbG9jYXRpb25zLlxuICogICBnZXRGYXZvdXJpdGVTdG9wczogKCkgPT4gKHt9KSwgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhcnJheSBvZiBmYXZvdXJpdGUgc3RvcHMuXG4gKiAgIGdldExhbmd1YWdlOiAoKSA9PiAoe30pLCAgICAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGN1cnJlbnQgbGFuZ3VhZ2UuXG4gKiAgIGdldEZhdm91cml0ZVJvdXRlczogKCkgPT4gKHt9KSwgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGFycmF5IG9mIGZhdm91cml0ZSByb3V0ZXMuXG4gKiAgIGdldFBvc2l0aW9uczogKCkgPT4gKHt9KSwgICAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHVzZXIncyBnZW9sb2NhdGlvbi5cbiAqICAgZ2V0Um91dGVzUXVlcnk6ICgpID0+ICh7fSksICAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgcXVlcnkgZm9yIGZldGNoaW5nIHJvdXRlcy5cbiAqICAgZ2V0QWxsQmlrZVJlbnRhbFN0YXRpb25zOiAoKSA9PiAoe30pLCAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgYWxsIGJpa2UgcmVudGFsIHN0YXRpb25zIGZyb20gZ3JhcGhxbCBBUEkuXG4gKiAgIGdldFN0b3BBbmRTdGF0aW9uc1F1ZXJ5OiAoKSA9PiAoe30pLCAgLy8gRnVuY3Rpb24gdGhhdCBmZXRjaGVzIGZhdm91cml0ZSBzdG9wcyBhbmQgc3RhdGlvbnMgZnJvbSBncmFwaHFsIEFQSS5cbiAqICAgZ2V0RmF2b3VyaXRlUm91dGVzUXVlcnk6ICgpID0+ICh7fSksICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgcXVlcnkgZm9yIGZldGNoaW5nIGZhdm91cml0ZSByb3V0ZXMuXG4gKiAgIGdldEZhdm91cml0ZUJpa2VSZW50YWxTdGF0aW9uczogKCkgPT4gKHt9KSwgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBmYXZvdXJpdGUgYmlrZSByZW50YWwgc3RhdGlvbi5cbiAqICAgZ2V0RmF2b3VyaXRlQmlrZVJlbnRhbFN0YXRpb25zUXVlcnk6ICgpID0+ICh7fSksIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBxdWVyeSBmb3IgZmV0Y2hpbmcgZmF2b3VyaXRlIGJpa2UgcmVudGFsIHN0YXRpb25zLlxuICogICBzdGFydExvY2F0aW9uV2F0Y2g6ICgpID0+ICh7fSksICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgbG9jYXRlcyB1c2VycyBnZW9sb2NhdGlvbi5cbiAqICAgc2F2ZVNlYXJjaDogKCkgPT4gKHt9KSwgICAgICAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHNhdmVzIHNlYXJjaCB0byBvbGQgc2VhcmNoZXMgc3RvcmUuXG4gKiAgIGNsZWFyT2xkU2VhcmNoZXM6ICgpID0+ICh7fSksICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBjbGVhcnMgb2xkIHNlYXJjaGVzIHN0b3JlLlxuICogICBnZXRGdXR1cmVSb3V0ZXM6ICgpID0+ICh7fSksICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJuIGZ1dHVyZSByb3V0ZXNcbiAqICAgc2F2ZUZ1dHVyZVJvdXRlOiAoKSA9PiAoe30pLCAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHNhdmVzIGEgZnV0dXJlIHJvdXRlXG4gKiAgIGNsZWFyRnV0dXJlUm91dGVzOiAoKSA9PiAoe30pLCAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBjbGVhcnMgZnV0dXJlIHJvdXRlc1xuICogfTtcbiAqIGNvbnN0IGxhbmcgPSAnZmknOyAvLyBlbiwgZmkgb3Igc3ZcbiAqIGNvbnN0IG9uU2VsZWN0ID0gKGl0ZW0sIGlkKSA9PiB7XG4gKiAgICAvLyBGdW50aW9uYWxpdHkgd2hlbiB1c2VyIHNlbGVjdHMgYSBzdWdnZXNpb25zLiBObyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIGdpdmVuLlxuICogICAgcmV0dXJuIG51bGw7XG4gKiB9O1xuICogY29uc3Qgb25DbGVhciA9IGlkID0+IHtcbiAqICAgIC8vIENhbGxlZCAgd2hlbiB1c2VyIGNsaWNrcyB0aGUgY2xlYXIgc2VhcmNoIHN0cmluZyBidXR0b24uIE5vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24uXG4gKiAgICByZXR1cm4gbnVsbDtcbiAqIH07XG4gKiBjb25zdCBnZXRBdXRvU3VnZ2VzdEljb25zOiB7XG4gKiAgIC8vIENhbGxlZCBmb3IgZXZlcnkgY2l0eSBiaWtlIHN0YXRpb24gcmVuZGVyZWQgYXMgYSBzZWFyY2ggc3VnZ2VzdGlvbi4gU2hvdWxkIHJldHVybiB0aGUgaWNvbiBhbmRcbiAqICAgLy8gY29sb3IgdXNlZCBmb3IgdGhhdCBzdGF0aW9uLiBUd28gaWNvbnMgYXJlIGF2YWlsYWJsZSwgJ2NpdHliaWtlLXN0b3AtZGlnaXRyYW5zaXQnIGFuZGl0eWJpa2Utc3RvcC1kaWdpdHJhbnNpdC1zZWNvbmRhcnknLlxuICogICBjaXR5YmlrZXM6IHN0YXRpb24gPT4ge1xuICogICAgICByZXR1cm4gWydjaXR5YmlrZS1zdG9wLWRpZ2l0cmFuc2l0JywgJyNmMmI2MmQnXTtcbiAqICAgfVxuICogfVxuICogY29uc3QgdHJhbnNwb3J0TW9kZSA9IHVuZGVmaW5lZDtcbiAqIGNvbnN0IHBsYWNlaG9sZGVyID0gXCJzdG9wLW5lYXIteW91XCI7XG4gKiBjb25zdCB0YXJnZXRzID0gWydMb2NhdGlvbnMnLCAnU3RvcHMnLCAnUm91dGVzJ107IC8vIERlZmluZXMgd2hhdCB5b3UgYXJlIHNlYXJjaGluZy4gYWxsIGF2YWlsYWJsZSBvcHRpb25zIGFyZSBMb2NhdGlvbnMsIFN0b3BzLCBSb3V0ZXMsIEJpa2VSZW50YWxTdGF0aW9ucywgRnV0dXJlUm91dGVzLCBNYXBQb3NpdGlvbiBhbmQgQ3VycmVudFBvc2l0aW9uLiBMZWF2ZSBlbXB0eSB0byBzZWFyY2ggYWxsIHRhcmdldHMuXG4gKiBjb25zdCBzb3VyY2VzID0gWydGYXZvdXJpdGUnLCAnSGlzdG9yeScsICdEYXRhc291cmNlJ10gLy8gRGVmaW5lcyB3aGVyZSB5b3UgYXJlIHNlYXJjaGluZy4gYWxsIGF2YWlsYWJsZSBhcmU6IEZhdm91cml0ZSwgSGlzdG9yeSAocHJldmlvdXNseSBzZWFyY2hlZCBzZWFyY2hlcykgYW5kIERhdGFzb3VyY2UuIExlYXZlIGVtcHR5IHRvIHVzZSBhbGwgc291cmNlcy5cbiAqIHJldHVybiAoXG4gKiAgPERUQXV0b3N1Z2dlc3RcbiAqICAgIGFwcEVsZW1lbnQ9e2FwcEVsZW1lbnR9IC8vIFJlcXVpcmVkLiBSb290IGVsZW1lbnQncyBpZC4gTmVlZGVkIGZvciByZWFjdC1tb2RhbCBjb21wb25lbnQuXG4gKiAgICBzZWFyY2hDb250ZXh0PXtzZWFyY2hDb250ZXh0fVxuICogICAgaWNvbj1cIm9yaWdpblwiIC8vIE9wdGlvbmFsIFN0cmluZyBmb3IgaWNvbiB0aGF0IGlzIHNob3duIGxlZnQgb2Ygc2VhcmNoZmllbGQuIHVzZWQgd2l0aCBJY29uIGxpYnJhcnlcbiAqICAgIGlkPVwib3JpZ2luXCIgLy8gdXNlZCBmb3Igc3R5bGUgcHJvcHMgYW5kIGluZm8gZm9yIGNvbXBvbmVudC5cbiAqICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn0gLy8gU3RyaW5nIHRoYXQgaXMgc2hvd25zIGluaXRhbGx5IGluIHNlYXJjaCBmaWVsZFxuICogICAgdmFsdWU9XCJcIiAvLyBlLmcuIHVzZXIgdHlwZWQgc3RyaW5nIHRoYXQgaXMgc2hvd24gaW4gc2VhcmNoIGZpZWxkXG4gKiAgICBvblNlbGVjdD17b25TZWxlY3R9XG4gKiAgICBvbkNsZWFyPXtvbkNsZWFyfVxuICogICAgYXV0b0ZvY3VzPXtmYWxzZX0gLy8gZGVmaW5lcyB0aGF0IHNob3VsZCB0aGlzIGZpZWxkIGJlIGF1dG9tYXRpY2FsbHkgZm9jdXNlZCB3aGVuIHBhZ2UgaXMgbG9hZGVkLlxuICogICAgbGFuZz17bGFuZ31cbiAqICAgIGdldEF1dG9TdWdnZXN0SWNvbnM9e2dldEF1dG9TdWdnZXN0SWNvbnN9XG4gKiAgICB0cmFuc3BvcnRNb2RlPXt0cmFuc3BvcnRNb2RlfSAvLyB0cmFuc3BvcnRtb2RlIHdpdGggd2hpY2ggd2UgZmlsdGVyIHRoZSByb3V0ZXMsIGUuZy4gcm91dGUtQlVTXG4gKiAgICBnZW9jb2RpbmdTaXplPXsxMH0gLy8gZGVmaW5lcyBob3cgbWFueSBzdG9wcyBhbmQgc3RhdGlvbnMgdG8gZmV0Y2ggZnJvbSBnZW9jb2RpbmcuIFVzZWZ1bCBpZiB5b3Ugd2FudCB0byBmaWx0ZXIgdGhlIHJlc3VsdHMgYW5kIHN0aWxsIGdldCBhIHJlYXNvbmFibGUgYW1vdW50IG9mIHN1Z2dlc3Rpb25zLlxuICogICAgZmlsdGVyUmVzdWx0cz17cmVzdWx0cyA9PiByZXR1cm4gcmVzdWx0c30gLy8gT3B0aW9uYWwgZmlsdGVyaW5nIGZ1bmN0aW9uIGZvciByb3V0ZXMgYW5kIHN0b3BzXG4gKiAgICBoYW5kZWxWaWFQb2ludHM9eygpID0+IHJldHVybiBudWxsIH0gLy8gT3B0aW9uYWwgVmlhIHBvaW50IGhhbmRsaW5nIGxvZ2ljLiBUaGlzIGlzIGN1cnJlbnRseSBtYW5hZ2VkIHdpdGggRFRBdXRvc3VnZ2VzdHBhbmVsIGJ5IGRlZmF1bHQsIGJ1dCBpZiBEVEF1dG9zdWdnZXN0IGlzIHVzZWQgc2VwZXJhdGVsbHkgb3duIGltcGxlbWVudGF0aW9uIG11c3QgYmUgcHJvdmlkZWQuXG4gKiAgICBmb2N1c0NoYW5nZT17KCkgPT4gcmV0dXJuIG51bGx9IC8vIFdoZW4gc3VnZ2VzdGlvbiBpcyBzZWxlY3RlZCwgaGFuZGxlIGNoYW5naW5nIGZvY3VzLiBUaGlzIGlzIGN1cnJlbnRseSBtYW5hZ2VkIHdpdGggRFRBdXRvc3VnZ2VzdHBhbmVsIGJ5IGRlZmF1bHQsIGJ1dCBpZiBEVEF1dG9zdWdnZXN0IGlzIHVzZWQgc2VwZXJhdGVsbHkgb3duIGltcGxlbWVudGF0aW9uIG11c3QgYmUgcHJvdmlkZWQuXG4gKiAgICBzdG9yZVJlZj17KCkgPT4gcmV0dXJuIG51bGx9IC8vIEZ1bmN0aW9uYWxpdHkgdG8gc3RvcmUgcmVmcy4gQ3VycmVubHR5IG1hbmFnZWQgd2l0aCBEVEF1dG9zdWdnZXN0cGFuZWwgYnkgZGVmYXVsdCwgYnV0IGlmIERUQXV0b3N1Z2dlc3QgaXMgdXNlZCBzZXBlcmF0ZWxseSBvd24gaW1wbGVtZW50YXRpb24gbXVzdCBiZSBwcm92aWRlZC5cbiAqICAgIHNvdXJjZXM9e3NvdXJjZXN9XG4gKiAgICB0YXJnZXRzPXt0YXJnZXRzfVxuICogICAgaXNNb2JpbGUgIC8vIE9wdGlvbmFsLiBEZWZhdWx0cyB0byBmYWxzZS4gV2hldGhlciB0byB1c2UgbW9iaWxlIHNlYXJjaC5cbiAqICAgIG1vYmlsZUxhYmVsPVwiQ3VzdG9tIGxhYmVsXCIgLy8gT3B0aW9uYWwuIEN1c3RvbSBsYWJlbCB0ZXh0IGZvciBhdXRvc3VnZ2VzdCBmaWVsZCBvbiBtb2JpbGUuXG4gKiAgICBpbnB1dENsYXNzTmFtZT1cIlwiIC8vIE9wdGlvbmFsLiBDdXN0b20gY2xhc3NuYW1lIGFwcGxpZWQgdG8gdGhlIGlucHV0IGVsZW1lbnQgb2YgdGhlIGNvbXBvbmVudCBmb3IgcHJvdmlkaW5nIENTUyBzdHlsZXMuXG4gKiAgICB0cmFuc2xhdGVkUGxhY2Vob2xkZXI9IC8vIE9wdGlvbmFsLiBDdXN0b24gdHJhbnNsYXRlZCBwbGFjZWhvbGRlciB0ZXh0IGZvciBhdXRvc3VnZ2VzdCBmaWVsZC5cbiAqL1xuY2xhc3MgRFRBdXRvc3VnZ2VzdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgYXBwRWxlbWVudDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGljb246IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgaWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHRyYW5zbGF0ZWRQbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzZWFyY2hDb250ZXh0OiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gICAgYXJpYUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIG9uU2VsZWN0OiBQcm9wVHlwZXMuZnVuYyxcbiAgICB0cmFuc3BvcnRNb2RlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGZpbHRlclJlc3VsdHM6IFByb3BUeXBlcy5mdW5jLFxuICAgIGdlb2NvZGluZ1NpemU6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgb25DbGVhcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgc3RvcmVSZWY6IFByb3BUeXBlcy5mdW5jLFxuICAgIGhhbmRsZVZpYVBvaW50czogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZm9jdXNDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAgIGxhbmc6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc291cmNlczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gICAgdGFyZ2V0czogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gICAgaXNNb2JpbGU6IFByb3BUeXBlcy5ib29sLFxuICAgIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGhvdmVyQ29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgYWNjZXNzaWJsZVByaW1hcnlDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB0aW1lWm9uZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBwYXRoT3B0czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIHJvdXRlc1ByZWZpeDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIHN0b3BzUHJlZml4OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIH0pLFxuICAgIG1vYmlsZUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGxvY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdW5sb2NrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHJlZlBvaW50OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGlucHV0Q2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGZvbnRXZWlnaHRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgbWVkaXVtOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIH0pLFxuICAgIG1vZGVJY29uQ29sb3JzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGdldEF1dG9TdWdnZXN0SWNvbnM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIG1vZGVTZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc2hvd1Njcm9sbDogUHJvcFR5cGVzLmJvb2wsXG4gICAgaXNFbWJlZGRlZDogUHJvcFR5cGVzLmJvb2wsXG4gIH07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgIGNsYXNzTmFtZTogJycsXG4gICAgaWNvbjogdW5kZWZpbmVkLFxuICAgIHZhbHVlOiAnJyxcbiAgICB0cmFuc3BvcnRNb2RlOiB1bmRlZmluZWQsXG4gICAgbGFuZzogJ2ZpJyxcbiAgICBzb3VyY2VzOiBbXSxcbiAgICBpc01vYmlsZTogZmFsc2UsXG4gICAgY29sb3I6ICcjMDA3YWM5JyxcbiAgICBob3ZlckNvbG9yOiAnIzAwNjJhMScsXG4gICAgYWNjZXNzaWJsZVByaW1hcnlDb2xvcjogJyMwMDc0YmUnLFxuICAgIHRpbWVab25lOiAnRXVyb3BlL0hlbHNpbmtpJyxcbiAgICBwYXRoT3B0czoge1xuICAgICAgcm91dGVzUHJlZml4OiAnbGluamF0JyxcbiAgICAgIHN0b3BzUHJlZml4OiAncHlzYWtpdCcsXG4gICAgfSxcbiAgICBtb2JpbGVMYWJlbDogdW5kZWZpbmVkLFxuICAgIGlucHV0Q2xhc3NOYW1lOiAnJyxcbiAgICB0cmFuc2xhdGVkUGxhY2Vob2xkZXI6IHVuZGVmaW5lZCxcbiAgICBmb250V2VpZ2h0czoge1xuICAgICAgbWVkaXVtOiA1MDAsXG4gICAgfSxcbiAgICBtb2RlSWNvbkNvbG9yczoge1xuICAgICAgJ21vZGUtYnVzJzogJyMwMDdhYzknLFxuICAgICAgJ21vZGUtcmFpbCc6ICcjOGM0Nzk5JyxcbiAgICAgICdtb2RlLXRyYW0nOiAnIzAwODE1MScsXG4gICAgICAnbW9kZS1tZXRybyc6ICcjZWQ4YzAwJyxcbiAgICAgICdtb2RlLWZlcnJ5JzogJyMwMDdBOTcnLFxuICAgICAgJ21vZGUtY2l0eWJpa2UnOiAnI2YyYjYyZCcsXG4gICAgfSxcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgbW9kZVNldDogdW5kZWZpbmVkLFxuICAgIHNob3dTY3JvbGw6IGZhbHNlLFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIG1vbWVudC50ei5zZXREZWZhdWx0KHByb3BzLnRpbWVab25lKTtcbiAgICBtb21lbnQubG9jYWxlKHByb3BzLmxhbmcpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHZhbHVlOiBwcm9wcy52YWx1ZSxcbiAgICAgIHN1Z2dlc3Rpb25zOiBbXSxcbiAgICAgIGVkaXRpbmc6IGZhbHNlLFxuICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICByZW5kZXJNb2JpbGVTZWFyY2g6IGZhbHNlLFxuICAgICAgc291cmNlczogcHJvcHMuc291cmNlcyxcbiAgICAgIG93blBsYWNlczogZmFsc2UsXG4gICAgICB0eXBpbmdUaW1lcjogbnVsbCxcbiAgICAgIHR5cGluZzogZmFsc2UsXG4gICAgICBwZW5kaW5nU2VsZWN0aW9uOiBudWxsLFxuICAgICAgc3VnZ2VzdGlvbkluZGV4OiAwLFxuICAgICAgY2xlYW5FeGVjdXRlZDogZmFsc2UsXG4gICAgICBzY3JvbGxZOiAwLFxuICAgIH07XG4gICAgT2JqZWN0LmtleXModHJhbnNsYXRpb25zKS5mb3JFYWNoKGxhbmcgPT4ge1xuICAgICAgaTE4bmV4dC5hZGRSZXNvdXJjZUJ1bmRsZShsYW5nLCAndHJhbnNsYXRpb24nLCB0cmFuc2xhdGlvbnNbbGFuZ10pO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gRFQtNDA3NDogV2hlbiBhIHVzZXIncyBsb2NhdGlvbiBpcyB1cGRhdGVkIERUQXV0b3N1Z2dlc3Qgd291bGQgcmUtcmVuZGVyIGNhdXNpbmcgc3VnZ2VzdGlvbiBsaXN0IHRvIHJlc2V0LlxuICAvLyBUaGlzIHdpbGwgcHJldmVudCBpdC5cbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlKSB7XG4gICAgcmV0dXJuICFpc0VxdWFsKG5leHRTdGF0ZSwgdGhpcy5zdGF0ZSkgfHwgIWlzRXF1YWwobmV4dFByb3BzLCB0aGlzLnByb3BzKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZSA9ICgpID0+IHtcbiAgICBpZiAoaTE4bmV4dC5sYW5ndWFnZSAhPT0gdGhpcy5wcm9wcy5sYW5nKSB7XG4gICAgICBpMThuZXh0LmNoYW5nZUxhbmd1YWdlKHRoaXMucHJvcHMubGFuZyk7XG4gICAgfVxuICB9O1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjYW1lbGNhc2VcbiAgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPSBuZXh0UHJvcHMgPT4ge1xuICAgIC8vIHdhaXQgdW50aWwgYWRkcmVzcyBpcyBzZXQgb3IgZ2VvbG9jYXRpb25pbmcgZmFpbHNcbiAgICBpZiAobmV4dFByb3BzLnZhbHVlICE9PSB0aGlzLnN0YXRlLnZhbHVlICYmICF0aGlzLnN0YXRlLmVkaXRpbmcpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICB2YWx1ZTogbmV4dFByb3BzLnZhbHVlLFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIG9uQ2hhbmdlID0gKGV2ZW50LCB7IG5ld1ZhbHVlLCBtZXRob2QgfSkgPT4ge1xuICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgdmFsdWU6IHRoaXMuZklucHV0IHx8IG5ld1ZhbHVlIHx8ICcnLFxuICAgICAgcmVuZGVyTW9iaWxlU2VhcmNoOiB0aGlzLnByb3BzLmlzTW9iaWxlLFxuICAgIH07XG4gICAgLy8gUmVtb3ZlIGZpbGxlZCBpbnB1dCB2YWx1ZSBzbyBpdCB3b250IGJlIHJldXNlZCB1bm5lY2Vzc2FyeVxuICAgIHRoaXMuZklucHV0ID0gbnVsbDtcbiAgICBpZiAoIXRoaXMuc3RhdGUuZWRpdGluZykge1xuICAgICAgbmV3U3RhdGUuZWRpdGluZyA9IHRydWU7XG4gICAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlLCAoKSA9PlxuICAgICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogbmV3VmFsdWUgfHwgJycgfSksXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAobWV0aG9kICE9PSAnZW50ZXInIHx8IHRoaXMuc3RhdGUudmFsaWQpIHtcbiAgICAgIC8vIHRlc3QgYWJvdmUgZHJvcHMgdW5uZWNlc3NhcnkgdXBkYXRlXG4gICAgICAvLyB3aGVuIHVzZXIgaGl0cyBlbnRlciBidXQgc2VhcmNoIGlzIHVuZmluaXNoZWRcbiAgICAgIGlmICh0aGlzLnN0YXRlLnR5cGluZ1RpbWVyKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnN0YXRlLnR5cGluZ1RpbWVyKTtcbiAgICAgIH1cbiAgICAgIGlmIChtZXRob2QgPT09ICd0eXBlJykge1xuICAgICAgICAvLyBhZnRlciB0aW1lb3V0IHJ1bnMsIGFyaWEgYWxlcnQgd2lsbCBhbm5vdW5jZSBjdXJyZW50IHNlbGVjdGlvblxuICAgICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyB0eXBpbmc6IGZhbHNlIH0pO1xuICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgbmV3U3RhdGUudHlwaW5nVGltZXIgPSB0aW1lcjtcbiAgICAgICAgbmV3U3RhdGUudHlwaW5nID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUpO1xuICAgIH1cbiAgfTtcblxuICBvbkJsdXIgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuc3RhdGUucmVuZGVyTW9iaWxlU2VhcmNoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnN0YXRlLmVkaXRpbmcpIHtcbiAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBlZGl0aW5nOiBmYWxzZSxcbiAgICAgIHJlbmRlck1vYmlsZVNlYXJjaDogZmFsc2UsXG4gICAgICB2YWx1ZTogdGhpcy5wcm9wcy52YWx1ZSxcbiAgICB9KTtcbiAgfTtcblxuICBvblNlbGVjdGVkID0gKGUsIHJlZikgPT4ge1xuICAgIGlmICh0aGlzLnN0YXRlLnZhbGlkKSB7XG4gICAgICBpZiAocmVmLnN1Z2dlc3Rpb24udHlwZSA9PT0gJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgICAge1xuICAgICAgICAgICAgc291cmNlczogWydGYXZvdXJpdGUnLCAnQmFjayddLFxuICAgICAgICAgICAgb3duUGxhY2VzOiB0cnVlLFxuICAgICAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogcmVmLnN1Z2dlc3Rpb24udHlwZSxcbiAgICAgICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiAnJyB9KTtcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHJlZi5zdWdnZXN0aW9uLnR5cGUgPT09ICdiYWNrJyB8fFxuICAgICAgICByZWYuc3VnZ2VzdGlvbi50eXBlID09PSAnRnV0dXJlUm91dGUnXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2VzOiB0aGlzLnByb3BzLnNvdXJjZXMsXG4gICAgICAgICAgICBvd25QbGFjZXM6IGZhbHNlLFxuICAgICAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogcmVmLnN1Z2dlc3Rpb24udHlwZSxcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25JbmRleDogcmVmLnN1Z2dlc3Rpb25JbmRleCxcbiAgICAgICAgICB9LFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiAnJyB9KTtcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnNlbGVjdGlvbkRvbmUgPSB0cnVlOyAvLyBzZWxlY3Rpb24gZG9uZSwgZG8gbm90IGxldCB1cGNvbWluZyBrZXlib2FyZCBldmVudHMgY29uZnVzZSB0aGUgZmxvd1xuICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAge1xuICAgICAgICAgIGVkaXRpbmc6IGZhbHNlLFxuICAgICAgICAgIHZhbHVlOiByZWYuc3VnZ2VzdGlvblZhbHVlLFxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pbnB1dC5ibHVyKCk7XG4gICAgICAgICAgaWYgKHRoaXMucHJvcHMuaGFuZGxlVmlhUG9pbnRzKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLmhhbmRsZVZpYVBvaW50cyhyZWYuc3VnZ2VzdGlvbiwgcmVmLnN1Z2dlc3Rpb25JbmRleCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMub25TZWxlY3QocmVmLnN1Z2dlc3Rpb24sIHRoaXMucHJvcHMuaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICByZW5kZXJNb2JpbGVTZWFyY2g6IGZhbHNlLFxuICAgICAgICAgICAgICBzb3VyY2VzOiB0aGlzLnByb3BzLnNvdXJjZXMsXG4gICAgICAgICAgICAgIG93blBsYWNlczogZmFsc2UsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb25zOiBbXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uRG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMucHJvcHMuZm9jdXNDaGFuZ2UgJiZcbiAgICAgICAgICAgICghdGhpcy5wcm9wcy5pc01vYmlsZSB8fCB0aGlzLnByb3BzLmlzRW1iZWRkZWQpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLmZvY3VzQ2hhbmdlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLnByb3BzLmlzTW9iaWxlKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlTW9iaWxlU2VhcmNoKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAgcHJldlN0YXRlID0+ICh7XG4gICAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogcHJldlN0YXRlLnZhbHVlLFxuICAgICAgICB9KSxcbiAgICAgICAgKCkgPT4gdGhpcy5jaGVja1BlbmRpbmdTZWxlY3Rpb24oKSwgLy8gc2VhcmNoIG1heSBmaW5pc2ggZHVyaW5nIHN0YXRlIGNoYW5nZVxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgb25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkID0gKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgc3VnZ2VzdGlvbnM6IFtdLFxuICAgICAgc291cmNlczogdGhpcy5wcm9wcy5zb3VyY2VzLFxuICAgICAgb3duUGxhY2VzOiBmYWxzZSxcbiAgICAgIGVkaXRpbmc6IGZhbHNlLFxuICAgIH0pO1xuICB9O1xuXG4gIGdldFN1Z2dlc3Rpb25WYWx1ZSA9IHN1Z2dlc3Rpb24gPT4ge1xuICAgIGlmIChcbiAgICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnIHx8XG4gICAgICBzdWdnZXN0aW9uLnR5cGUgPT09ICdiYWNrJ1xuICAgICkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gZ2V0TGFiZWwoc3VnZ2VzdGlvbi5wcm9wZXJ0aWVzKTtcbiAgfTtcblxuICBjaGVja1BlbmRpbmdTZWxlY3Rpb24gPSAoKSA9PiB7XG4gICAgaWYgKFxuICAgICAgKHRoaXMuc3RhdGUucGVuZGluZ1NlbGVjdGlvbiA9PT0gJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnIHx8XG4gICAgICAgIHRoaXMuc3RhdGUucGVuZGluZ1NlbGVjdGlvbiA9PT0gJ2JhY2snKSAmJlxuICAgICAgdGhpcy5zdGF0ZS52YWxpZFxuICAgICkge1xuICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAge1xuICAgICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IG51bGwsXG4gICAgICAgICAgZWRpdGluZzogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICAvLyBhY2NlcHQgYWZ0ZXIgYWxsIG9uZ29pbmcgc2VhcmNoZXMgaGF2ZSBmaW5pc2hlZFxuICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZS5wZW5kaW5nU2VsZWN0aW9uICYmIHRoaXMuc3RhdGUudmFsaWQpIHtcbiAgICAgIC8vIGZpbmlzaCB0aGUgc2VsZWN0aW9uIGJ5IHBpY2tpbmcgZmlyc3QgPSBiZXN0IG1hdGNoIG9yIHdpdGggJ0Z1dHVyZVJvdXRlJyBieSBzdWdnZXN0aW9uSW5kZXhcbiAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgIHtcbiAgICAgICAgICBwZW5kaW5nU2VsZWN0aW9uOiBudWxsLFxuICAgICAgICAgIGVkaXRpbmc6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuc3RhdGUuc3VnZ2VzdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0LmJsdXIoKTtcbiAgICAgICAgICAgIHRoaXMucHJvcHMub25TZWxlY3QoXG4gICAgICAgICAgICAgIHRoaXMuc3RhdGUuc3VnZ2VzdGlvbnNbdGhpcy5zdGF0ZS5zdWdnZXN0aW9uSW5kZXhdLFxuICAgICAgICAgICAgICB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMucHJvcHMuaXNNb2JpbGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5jbG9zZU1vYmlsZVNlYXJjaCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB0aGlzLnByb3BzLmZvY3VzQ2hhbmdlICYmXG4gICAgICAgICAgICAgICghdGhpcy5wcm9wcy5pc01vYmlsZSB8fCB0aGlzLnByb3BzLmlzRW1iZWRkZWQpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5wcm9wcy5mb2N1c0NoYW5nZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIGNsZWFyQnV0dG9uID0gKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1snY2xlYXItaW5wdXQnXX1cbiAgICAgICAgb25DbGljaz17dGhpcy5jbGVhcklucHV0fVxuICAgICAgICBhcmlhLWxhYmVsPXtpMThuZXh0LnQoJ2NsZWFyLWJ1dHRvbi1sYWJlbCcpfVxuICAgICAgPlxuICAgICAgICA8SWNvbiBpbWc9XCJjbG9zZVwiIGNvbG9yPXt0aGlzLnByb3BzLmNvbG9yfSAvPlxuICAgICAgPC9idXR0b24+XG4gICAgKTtcbiAgfTtcblxuICBmZXRjaEZ1bmN0aW9uID0gKHsgdmFsdWUsIGNsZWFuRXhlY3V0ZWQgfSkgPT4ge1xuICAgIHJldHVybiB0aGlzLnNldFN0YXRlKFxuICAgICAgeyB2YWxpZDogZmFsc2UsIGNsZWFuRXhlY3V0ZWQ6ICFjbGVhbkV4ZWN1dGVkID8gZmFsc2UgOiBjbGVhbkV4ZWN1dGVkIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbkRvbmUpIHtcbiAgICAgICAgICAvLyBkbyBub3QgbGV0IGNvbXBvbmVudCBjYXN0IHVubmVjZXNzYXJ5IHJlcXVlc3RzXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlzTG9jYXRpb25TZWFyY2ggPVxuICAgICAgICAgIGlzRW1wdHkodGhpcy5wcm9wcy50YXJnZXRzKSB8fFxuICAgICAgICAgIHRoaXMucHJvcHMudGFyZ2V0cy5pbmNsdWRlcygnTG9jYXRpb25zJyk7XG4gICAgICAgIGxldCB0YXJnZXRzO1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5vd25QbGFjZXMpIHtcbiAgICAgICAgICB0YXJnZXRzID0gWydMb2NhdGlvbnMnXTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBpc0VtcHR5KHRoaXMucHJvcHMudGFyZ2V0cykgfHxcbiAgICAgICAgICAgIHRoaXMucHJvcHMudGFyZ2V0cy5pbmNsdWRlcygnU3RvcHMnKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGFyZ2V0cy5wdXNoKCdTdG9wcycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBpc0VtcHR5KHRoaXMucHJvcHMudGFyZ2V0cykgfHxcbiAgICAgICAgICAgIHRoaXMucHJvcHMudGFyZ2V0cy5pbmNsdWRlcygnQmlrZVJlbnRhbFN0YXRpb25zJylcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRhcmdldHMucHVzaCgnQmlrZVJlbnRhbFN0YXRpb25zJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCFpc0VtcHR5KHRoaXMucHJvcHMudGFyZ2V0cykpIHtcbiAgICAgICAgICB0YXJnZXRzID0gWy4uLnRoaXMucHJvcHMudGFyZ2V0c107XG4gICAgICAgICAgLy8gaW4gZGVza3RvcCwgZmF2b3JpdGVzIGFyZSBhY2Nlc3NlZCB2aWEgc3ViIHNlYXJjaFxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGlzTG9jYXRpb25TZWFyY2ggJiZcbiAgICAgICAgICAgICF0aGlzLnByb3BzLmlzTW9iaWxlICYmXG4gICAgICAgICAgICAoaXNFbXB0eSh0aGlzLnByb3BzLnNvdXJjZXMpIHx8XG4gICAgICAgICAgICAgIHRoaXMucHJvcHMuc291cmNlcy5pbmNsdWRlcygnRmF2b3VyaXRlJykpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0YXJnZXRzLnB1c2goJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVtb3ZlICBsb2NhdGlvbiBmYXZvdXJpdGVzIGluIGRlc2t0b3Agc2VhcmNoIChjb2xsZWN0aW9uIGl0ZW0gcmVwbGFjZXMgaXQgaW4gdGFyZ2V0IGFycmF5KVxuICAgICAgICBjb25zdCBzb3VyY2VzID1cbiAgICAgICAgICB0aGlzLnN0YXRlLnNvdXJjZXMgJiZcbiAgICAgICAgICB0aGlzLnN0YXRlLnNvdXJjZXMuZmlsdGVyKFxuICAgICAgICAgICAgcyA9PlxuICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgIGlzTG9jYXRpb25TZWFyY2ggJiZcbiAgICAgICAgICAgICAgICBzID09PSAnRmF2b3VyaXRlJyAmJlxuICAgICAgICAgICAgICAgICF0aGlzLnN0YXRlLm93blBsYWNlcyAmJlxuICAgICAgICAgICAgICAgICF0aGlzLnByb3BzLmlzTW9iaWxlXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgKTtcblxuICAgICAgICBleGVjdXRlU2VhcmNoKFxuICAgICAgICAgIHRhcmdldHMsXG4gICAgICAgICAgc291cmNlcyxcbiAgICAgICAgICB0aGlzLnByb3BzLnRyYW5zcG9ydE1vZGUsXG4gICAgICAgICAgdGhpcy5wcm9wcy5zZWFyY2hDb250ZXh0LFxuICAgICAgICAgIHRoaXMucHJvcHMuZmlsdGVyUmVzdWx0cyxcbiAgICAgICAgICB0aGlzLnByb3BzLmdlb2NvZGluZ1NpemUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaW5wdXQ6IHZhbHVlIHx8ICcnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2VhcmNoUmVzdWx0ID0+IHtcbiAgICAgICAgICAgIGlmIChzZWFyY2hSZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBYWFggdHJhbnNsYXRlcyBjdXJyZW50IGxvY2F0aW9uXG4gICAgICAgICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IChzZWFyY2hSZXN1bHQucmVzdWx0cyB8fCBbXSlcbiAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9uID0+XG4gICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnR5cGUgIT09ICdGdXR1cmVSb3V0ZScgfHxcbiAgICAgICAgICAgICAgICAgIChzdWdnZXN0aW9uLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScgJiZcbiAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5wcm9wZXJ0aWVzLnRpbWUgPiBtb21lbnQoKS51bml4KCkpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5tYXAoc3VnZ2VzdGlvbiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi50eXBlID09PSAnQ3VycmVudExvY2F0aW9uJyB8fFxuICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi50eXBlID09PSAnU2VsZWN0RnJvbU1hcCcgfHxcbiAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnIHx8XG4gICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnR5cGUgPT09ICdiYWNrJ1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRlZCA9IHsgLi4uc3VnZ2VzdGlvbiB9O1xuICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZC5wcm9wZXJ0aWVzLmxhYmVsSWQgPSBpMThuZXh0LnQoXG4gICAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24ucHJvcGVydGllcy5sYWJlbElkLFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc2xhdGVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gc3VnZ2VzdGlvbjtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHZhbHVlID09PSB0aGlzLnN0YXRlLnZhbHVlIHx8XG4gICAgICAgICAgICAgIHZhbHVlID09PSB0aGlzLnN0YXRlLnBlbmRpbmdTZWxlY3Rpb24gfHxcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5wZW5kaW5nU2VsZWN0aW9uID09PSAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycgfHxcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5wZW5kaW5nU2VsZWN0aW9uID09PSAnYmFjaycgfHxcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5wZW5kaW5nU2VsZWN0aW9uID09PSAnRnV0dXJlUm91dGUnXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb25zLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKCkgPT4gdGhpcy5jaGVja1BlbmRpbmdTZWxlY3Rpb24oKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMucHJvcHMucGF0aE9wdHMsXG4gICAgICAgICAgdGhpcy5wcm9wcy5yZWZQb2ludCxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgKTtcbiAgfTtcblxuICBjbGVhcklucHV0ID0gKCkgPT4ge1xuICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgZWRpdGluZzogdHJ1ZSxcbiAgICAgIHZhbHVlOiAnJyxcbiAgICAgIHNvdXJjZXM6IHRoaXMucHJvcHMuc291cmNlcyxcbiAgICAgIG93blBsYWNlczogZmFsc2UsXG4gICAgfTtcbiAgICAvLyBtdXN0IHVwZGF0ZSBzdWdnZXN0aW9uc1xuICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUsICgpID0+XG4gICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogJycsIGNsZWFuRXhlY3V0ZWQ6IHRydWUgfSksXG4gICAgKTtcbiAgICBpZiAodGhpcy5wcm9wcy5vbkNsZWFyKSB7XG4gICAgICB0aGlzLnByb3BzLm9uQ2xlYXIodGhpcy5wcm9wcy5pZCk7XG4gICAgfVxuICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgfTtcblxuICBpbnB1dENsaWNrZWQgPSBpbnB1dFZhbHVlID0+IHtcbiAgICB0aGlzLmlucHV0LmZvY3VzKCk7XG4gICAgaWYgKHRoaXMucHJvcHMuaXNNb2JpbGUpIHtcbiAgICAgIHRoaXMucHJvcHMubG9jaygpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc3RhdGUuZWRpdGluZykge1xuICAgICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICAgIGVkaXRpbmc6IHRydWUsXG4gICAgICAgIC8vIHJlc2V0IGF0IHN0YXJ0LCBqdXN0IGluIGNhc2Ugd2UgbWlzc2VkIHNvbWV0aGluZ1xuICAgICAgICBwZW5kaW5nU2VsZWN0aW9uOiBudWxsLFxuICAgICAgICByZW5kZXJNb2JpbGVTZWFyY2g6IHRoaXMucHJvcHMuaXNNb2JpbGUsXG4gICAgICB9O1xuXG4gICAgICAvLyBEVC0zMjYzOiBhZGRlZCBzdGF0ZUtleURvd25cbiAgICAgIGNvbnN0IHN0YXRlS2V5RG93biA9IHtcbiAgICAgICAgZWRpdGluZzogdHJ1ZSxcbiAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogbnVsbCxcbiAgICAgICAgdmFsdWU6IGlucHV0VmFsdWUsXG4gICAgICB9O1xuXG4gICAgICBpZiAoIXRoaXMuc3RhdGUuc3VnZ2VzdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIC8vIERULTMyNjM6IGFkZGVkIGlmLWVsc2Ugc3RhdGVtZW50XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXRWYWx1ZSA9PT0gJ29iamVjdCcgfHwgIWlucHV0VmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlLCAoKSA9PlxuICAgICAgICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6IHRoaXMuc3RhdGUudmFsdWUgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHN0YXRlS2V5RG93biwgKCkgPT5cbiAgICAgICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiBpbnB1dFZhbHVlIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiB0aGlzLnN0YXRlLnZhbHVlIH0pO1xuICAgICAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgc3RvcmVJbnB1dFJlZmVyZW5jZSA9IGF1dG9zdWdnZXN0ID0+IHtcbiAgICBpZiAoYXV0b3N1Z2dlc3QgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuaW5wdXQgPSBhdXRvc3VnZ2VzdC5pbnB1dDtcbiAgICAgIGlmICh0aGlzLnByb3BzLnN0b3JlUmVmKSB7XG4gICAgICAgIHRoaXMucHJvcHMuc3RvcmVSZWYoYXV0b3N1Z2dlc3QuaW5wdXQpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvLyBGaWxsIGlucHV0IHdoZW4gdXNlciBjbGlja3MgZmlsbCBpbnB1dCBidXR0b24gaW4gc3RyZWV0IHN1Z2dlc3Rpb24gaXRlbVxuICBmaWxsSW5wdXQgPSBuZXdWYWx1ZSA9PiB7XG4gICAgdGhpcy5mSW5wdXQgPSBuZXdWYWx1ZS5wcm9wZXJ0aWVzLm5hbWU7XG4gICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICBlZGl0aW5nOiB0cnVlLFxuICAgICAgdmFsdWU6IG5ld1ZhbHVlLnByb3BlcnRpZXMubmFtZSxcbiAgICAgIGNoZWNrUGVuZGluZ1NlbGVjdGlvbjogbmV3VmFsdWUsXG4gICAgICB2YWxpZDogdHJ1ZSxcbiAgICB9O1xuICAgIC8vIG11c3QgdXBkYXRlIHN1Z2dlc3Rpb25zXG4gICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSk7XG4gICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6IG5ld1ZhbHVlLnByb3BlcnRpZXMubmFtZSB9KTtcbiAgICB0aGlzLmlucHV0LmZvY3VzKCk7XG4gIH07XG5cbiAgcmVuZGVySXRlbSA9IGl0ZW0gPT4ge1xuICAgIGNvbnN0IG5ld0l0ZW0gPVxuICAgICAgaXRlbS50eXBlID09PSAnRnV0dXJlUm91dGUnXG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgIHRyYW5zbGF0ZWRUZXh0OiB0cmFuc2xhdGVGdXR1cmVSb3V0ZVN1Z2dlc3Rpb25UaW1lKGl0ZW0pLFxuICAgICAgICAgIH1cbiAgICAgICAgOiBpdGVtO1xuICAgIGNvbnN0IGNvbnRlbnQgPSBnZXRTdWdnZXN0aW9uQ29udGVudChpdGVtKTtcbiAgICByZXR1cm4gKFxuICAgICAgPFN1Z2dlc3Rpb25JdGVtXG4gICAgICAgIGl0ZW09e25ld0l0ZW19XG4gICAgICAgIGNvbnRlbnQ9e2NvbnRlbnR9XG4gICAgICAgIGxvYWRpbmc9eyF0aGlzLnN0YXRlLnZhbGlkfVxuICAgICAgICBpc01vYmlsZT17dGhpcy5wcm9wcy5pc01vYmlsZX1cbiAgICAgICAgYXJpYUZhdm91cml0ZVN0cmluZz17aTE4bmV4dC50KCdmYXZvdXJpdGUnKX1cbiAgICAgICAgY29sb3I9e3RoaXMucHJvcHMuY29sb3J9XG4gICAgICAgIGFjY2Vzc2libGVQcmltYXJ5Q29sb3I9e3RoaXMucHJvcHMuYWNjZXNzaWJsZVByaW1hcnlDb2xvcn1cbiAgICAgICAgZmlsbElucHV0PXt0aGlzLmZpbGxJbnB1dH1cbiAgICAgICAgZm9udFdlaWdodHM9e3RoaXMucHJvcHMuZm9udFdlaWdodHN9XG4gICAgICAgIGdldEF1dG9TdWdnZXN0SWNvbnM9e3RoaXMucHJvcHMuZ2V0QXV0b1N1Z2dlc3RJY29uc31cbiAgICAgICAgbW9kZUljb25Db2xvcnM9e3RoaXMucHJvcHMubW9kZUljb25Db2xvcnN9XG4gICAgICAgIG1vZGVTZXQ9e3RoaXMucHJvcHMubW9kZVNldH1cbiAgICAgIC8+XG4gICAgKTtcbiAgfTtcblxuICBjbG9zZU1vYmlsZVNlYXJjaCA9ICgpID0+IHtcbiAgICB0aGlzLnByb3BzLnVubG9jaygpO1xuICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICB7XG4gICAgICAgIHJlbmRlck1vYmlsZVNlYXJjaDogZmFsc2UsXG4gICAgICAgIHZhbHVlOiB0aGlzLnByb3BzLnZhbHVlLFxuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIHRoaXMuc3RhdGUuc2Nyb2xsWSk7XG4gICAgICAgIHRoaXMub25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkKCk7XG4gICAgICB9LFxuICAgICk7XG4gIH07XG5cbiAga2V5RG93biA9IGV2ZW50ID0+IHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25Eb25lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGtleUNvZGUgPSBldmVudC5rZXk7XG4gICAgaWYgKGtleUNvZGUgPT09ICdFc2NhcGUnKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgZWRpdGluZzogZmFsc2UgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnN0YXRlLmVkaXRpbmcpIHtcbiAgICAgIGlmIChrZXlDb2RlID09PSAnRW50ZXInICYmIHRoaXMuc3RhdGUudmFsdWUgIT09ICcnKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBwZW5kaW5nU2VsZWN0aW9uOiB0cnVlIH0sICgpID0+IHtcbiAgICAgICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogdGhpcy5zdGF0ZS52YWx1ZSB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLmlucHV0Q2xpY2tlZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIChrZXlDb2RlID09PSAnRW50ZXInIHx8IGtleUNvZGUgPT09ICdBcnJvd0Rvd24nKSAmJlxuICAgICAgdGhpcy5zdGF0ZS52YWx1ZSA9PT0gJydcbiAgICApIHtcbiAgICAgIHRoaXMuY2xlYXJJbnB1dCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChrZXlDb2RlID09PSAnQXJyb3dEb3duJyAmJiB0aGlzLnN0YXRlLnZhbHVlICE9PSAnJykge1xuICAgICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICAgIGVkaXRpbmc6IHRydWUsXG4gICAgICAgIHZhbHVlOiB0aGlzLnN0YXRlLnZhbHVlLFxuICAgICAgfTtcbiAgICAgIC8vIG11c3QgdXBkYXRlIHN1Z2dlc3Rpb25zXG4gICAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlLCAoKSA9PlxuICAgICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogdGhpcy5zdGF0ZS52YWx1ZSB9KSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghdGhpcy5zdGF0ZS5lZGl0aW5nKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgZWRpdGluZzogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICBpZiAoa2V5Q29kZSA9PT0gJ1RhYicpIHtcbiAgICAgIHRoaXMub25CbHVyKCk7XG4gICAgfVxuICB9O1xuXG4gIHN1Z2dlc3Rpb25Bc0FyaWFDb250ZW50ID0gKCkgPT4ge1xuICAgIGxldCBsYWJlbCA9IFtdO1xuICAgIGNvbnN0IGZpcnN0U3VnZ2VzdGlvbiA9IHRoaXMuc3RhdGUuc3VnZ2VzdGlvbnNbMF07XG4gICAgaWYgKGZpcnN0U3VnZ2VzdGlvbikge1xuICAgICAgaWYgKGZpcnN0U3VnZ2VzdGlvbi50eXBlICYmIGZpcnN0U3VnZ2VzdGlvbi50eXBlLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgICBsYWJlbC5wdXNoKGkxOG5leHQudCgnZmF2b3VyaXRlJykpO1xuICAgICAgfVxuICAgICAgbGFiZWwgPSBsYWJlbC5jb25jYXQoZ2V0U3VnZ2VzdGlvbkNvbnRlbnQodGhpcy5zdGF0ZS5zdWdnZXN0aW9uc1swXSkpO1xuICAgIH1cbiAgICByZXR1cm4gWy4uLm5ldyBTZXQobGFiZWwpXS5qb2luKCcgLSAnKTtcbiAgfTtcblxuICBjbGVhck9sZFNlYXJjaGVzID0gKCkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNvbnRleHQsXG4gICAgICBjbGVhck9sZFNlYXJjaGVzLFxuICAgICAgY2xlYXJGdXR1cmVSb3V0ZXMsXG4gICAgfSA9IHRoaXMucHJvcHMuc2VhcmNoQ29udGV4dDtcbiAgICBpZiAoY29udGV4dCAmJiBjbGVhck9sZFNlYXJjaGVzKSB7XG4gICAgICBjbGVhck9sZFNlYXJjaGVzKGNvbnRleHQpO1xuICAgICAgaWYgKGNsZWFyRnV0dXJlUm91dGVzKSB7XG4gICAgICAgIGNsZWFyRnV0dXJlUm91dGVzKGNvbnRleHQpO1xuICAgICAgfVxuICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6IHRoaXMuc3RhdGUudmFsdWUgfSk7XG4gICAgfVxuICB9O1xuXG4gIGlzT3JpZ2luRGVzdGluYXRpb25PclZpYXBvaW50ID0gKCkgPT5cbiAgICB0aGlzLnByb3BzLmlkID09PSAnb3JpZ2luJyB8fFxuICAgIHRoaXMucHJvcHMuaWQgPT09ICdkZXN0aW5hdGlvbicgfHxcbiAgICB0aGlzLnByb3BzLmlkID09PSAndmlhLXBvaW50JyB8fFxuICAgIHRoaXMucHJvcHMuaWQgPT09ICdvcmlnaW4tc3RvcC1uZWFyLXlvdSc7XG5cbiAgb25Gb2N1cyA9ICgpID0+IHtcbiAgICBjb25zdCBwb3NpdGlvbnMgPSBbXG4gICAgICAnVmFsaXR0dSBzaWphaW50aScsXG4gICAgICAnTnlreWluZW4gc2lqYWludGlzaScsXG4gICAgICAnQ3VycmVudCBwb3NpdGlvbicsXG4gICAgICAnU2VsZWN0ZWQgbG9jYXRpb24nLFxuICAgICAgJ1ZhbGQgcG9zaXRpb24nLFxuICAgICAgJ0FudsOkbmQgbWluIHBvc2l0aW9uJyxcbiAgICAgICdNaW4gcG9zaXRpb24nLFxuICAgICAgJ0vDpHl0w6QgbnlreWlzdMOkIHNpamFpbnRpYScsXG4gICAgICAnVXNlIGN1cnJlbnQgbG9jYXRpb24nLFxuICAgICAgJ1lvdXIgY3VycmVudCBsb2NhdGlvbicsXG4gICAgXTtcbiAgICBpZiAocG9zaXRpb25zLmluY2x1ZGVzKHRoaXMuc3RhdGUudmFsdWUpKSB7XG4gICAgICB0aGlzLmNsZWFySW5wdXQoKTtcbiAgICB9XG4gICAgY29uc3Qgc2Nyb2xsWSA9IHdpbmRvdy5wYWdlWU9mZnNldDtcbiAgICByZXR1cm4gdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBzY3JvbGxZLFxuICAgIH0pO1xuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAoaTE4bmV4dC5sYW5ndWFnZSAhPT0gdGhpcy5wcm9wcy5sYW5nKSB7XG4gICAgICBpMThuZXh0LmNoYW5nZUxhbmd1YWdlKHRoaXMucHJvcHMubGFuZyk7XG4gICAgfVxuICAgIGNvbnN0IHtcbiAgICAgIHZhbHVlLFxuICAgICAgc3VnZ2VzdGlvbnMsXG4gICAgICByZW5kZXJNb2JpbGVTZWFyY2gsXG4gICAgICBjbGVhbkV4ZWN1dGVkLFxuICAgIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IGlucHV0UHJvcHMgPSB7XG4gICAgICBwbGFjZWhvbGRlcjogdGhpcy5wcm9wcy50cmFuc2xhdGVkUGxhY2Vob2xkZXJcbiAgICAgICAgPyB0aGlzLnByb3BzLnRyYW5zbGF0ZWRQbGFjZWhvbGRlclxuICAgICAgICA6IGkxOG5leHQudCh0aGlzLnByb3BzLnBsYWNlaG9sZGVyKSxcbiAgICAgIHZhbHVlLFxuICAgICAgb25DaGFuZ2U6IHRoaXMub25DaGFuZ2UsXG4gICAgICBvbkJsdXI6IHRoaXMub25CbHVyLFxuICAgICAgY2xhc3NOYW1lOiBjeChcbiAgICAgICAgYCR7c3R5bGVzLmlucHV0fSAke1xuICAgICAgICAgIHRoaXMucHJvcHMuaXNNb2JpbGUgJiYgdGhpcy5wcm9wcy50cmFuc3BvcnRNb2RlID8gc3R5bGVzLnRoaW4gOiAnJ1xuICAgICAgICB9ICR7c3R5bGVzW3RoaXMucHJvcHMuaWRdIHx8ICcnfSAke1xuICAgICAgICAgIHRoaXMuc3RhdGUudmFsdWUgPyBzdHlsZXMuaGFzVmFsdWUgOiAnJ1xuICAgICAgICB9ICR7dGhpcy5wcm9wcy5pbnB1dENsYXNzTmFtZX1gLFxuICAgICAgKSxcbiAgICAgIG9uS2V5RG93bjogdGhpcy5rZXlEb3duLCAvLyBEVC0zMjYzXG4gICAgICByZXF1aXJlZDogdGhpcy5wcm9wcy5yZXF1aXJlZCxcbiAgICB9O1xuICAgIGNvbnN0IGFyaWFCYXJJZCA9IHRoaXMucHJvcHMuaWQucmVwbGFjZSgnc2VhcmNoZmllbGQtJywgJycpO1xuICAgIGxldCBTZWFyY2hCYXJJZCA9IHRoaXMucHJvcHMuYXJpYUxhYmVsIHx8IGkxOG5leHQudChhcmlhQmFySWQpO1xuICAgIFNlYXJjaEJhcklkID0gU2VhcmNoQmFySWQucmVwbGFjZSgnc2VhcmNoZmllbGQtJywgJycpO1xuICAgIGNvbnN0IGFyaWFSZXF1aXJlZFRleHQgPSB0aGlzLnByb3BzLnJlcXVpcmVkXG4gICAgICA/IGAke2kxOG5leHQudCgncmVxdWlyZWQnKX0uYFxuICAgICAgOiAnJztcbiAgICBjb25zdCBhcmlhTGFiZWxUZXh0ID0gdGhpcy5wcm9wcy5pc01vYmlsZVxuICAgICAgPyBpMThuZXh0LnQoJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb2JpbGUnKVxuICAgICAgOiBpMThuZXh0LnQoJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1kZXNrdG9wJyk7XG4gICAgY29uc3QgYXJpYVN1Z2dlc3Rpb25MZW4gPSBpMThuZXh0LnQoJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nLCB7XG4gICAgICBjb3VudDogc3VnZ2VzdGlvbnMubGVuZ3RoLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYXJpYUN1cnJlbnRTdWdnZXN0aW9uID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuc3VnZ2VzdGlvbkFzQXJpYUNvbnRlbnQoKSB8fCB0aGlzLnByb3BzLnZhbHVlKSB7XG4gICAgICAgIHJldHVybiBpMThuZXh0LnQoJ3NlYXJjaC1jdXJyZW50LXN1Z2dlc3Rpb24nLCB7XG4gICAgICAgICAgc2VsZWN0aW9uOiB0aGlzLnN1Z2dlc3Rpb25Bc0FyaWFDb250ZW50KCkgfHwgdGhpcy5wcm9wcy52YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gJyc7XG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzWydzci1vbmx5J119IHJvbGU9XCJhbGVydFwiPlxuICAgICAgICAgIHshdGhpcy5zdGF0ZS50eXBpbmcgJiZcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuZWRpdGluZyAmJlxuICAgICAgICAgICAgYCR7YXJpYVN1Z2dlc3Rpb25MZW59ICR7YXJpYUN1cnJlbnRTdWdnZXN0aW9uKCl9YH1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICB7dGhpcy5wcm9wcy5pc01vYmlsZSAmJiAoXG4gICAgICAgICAgPE1vYmlsZVNlYXJjaFxuICAgICAgICAgICAgc2VhcmNoT3Blbj17cmVuZGVyTW9iaWxlU2VhcmNofVxuICAgICAgICAgICAgYXBwRWxlbWVudD17dGhpcy5wcm9wcy5hcHBFbGVtZW50fVxuICAgICAgICAgICAgY2xlYXJPbGRTZWFyY2hlcz17dGhpcy5jbGVhck9sZFNlYXJjaGVzfVxuICAgICAgICAgICAgaWQ9e3RoaXMucHJvcHMuaWR9XG4gICAgICAgICAgICBjbGVhcklucHV0PXt0aGlzLmNsZWFySW5wdXR9XG4gICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS52YWx1ZX1cbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zPXtbXG4gICAgICAgICAgICAgIC4uLnN1Z2dlc3Rpb25zLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICBsYWJlbElkOiBpMThuZXh0LnQoJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JyksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdfVxuICAgICAgICAgICAgaW5wdXRQcm9wcz17e1xuICAgICAgICAgICAgICAuLi5pbnB1dFByb3BzLFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogdGhpcy5pc09yaWdpbkRlc3RpbmF0aW9uT3JWaWFwb2ludCgpXG4gICAgICAgICAgICAgICAgPyBpMThuZXh0LnQoJ2FkZHJlc3MtcGxhY2Utb3ItYnVzaW5lc3MnKVxuICAgICAgICAgICAgICAgIDogaW5wdXRQcm9wcy5wbGFjZWhvbGRlcixcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBmZXRjaEZ1bmN0aW9uPXt0aGlzLmZldGNoRnVuY3Rpb259XG4gICAgICAgICAgICBvblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWQ9e3RoaXMub25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkfVxuICAgICAgICAgICAgZ2V0U3VnZ2VzdGlvblZhbHVlPXt0aGlzLmdldFN1Z2dlc3Rpb25WYWx1ZX1cbiAgICAgICAgICAgIHJlbmRlclN1Z2dlc3Rpb249e3RoaXMucmVuZGVySXRlbX1cbiAgICAgICAgICAgIGNsb3NlSGFuZGxlPXt0aGlzLmNsb3NlTW9iaWxlU2VhcmNofVxuICAgICAgICAgICAgYXJpYUxhYmVsPXthcmlhUmVxdWlyZWRUZXh0XG4gICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAuY29uY2F0KFNlYXJjaEJhcklkKVxuICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgLmNvbmNhdChhcmlhQ3VycmVudFN1Z2dlc3Rpb24oKSl9XG4gICAgICAgICAgICBsYWJlbD17XG4gICAgICAgICAgICAgIHRoaXMucHJvcHMubW9iaWxlTGFiZWxcbiAgICAgICAgICAgICAgICA/IHRoaXMucHJvcHMubW9iaWxlTGFiZWxcbiAgICAgICAgICAgICAgICA6IGkxOG5leHQudCh0aGlzLnByb3BzLmlkKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb25TdWdnZXN0aW9uU2VsZWN0ZWQ9e3RoaXMub25TZWxlY3RlZH1cbiAgICAgICAgICAgIGRpYWxvZ0hlYWRlclRleHQ9e2kxOG5leHQudCgnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInKX1cbiAgICAgICAgICAgIGRpYWxvZ1ByaW1hcnlCdXR0b25UZXh0PXtpMThuZXh0LnQoJ2RlbGV0ZScpfVxuICAgICAgICAgICAgZGlhbG9nU2Vjb25kYXJ5QnV0dG9uVGV4dD17aTE4bmV4dC50KCdjYW5jZWwnKX1cbiAgICAgICAgICAgIGNsZWFySW5wdXRCdXR0b25UZXh0PXtpMThuZXh0LnQoJ2NsZWFyLWJ1dHRvbi1sYWJlbCcpfVxuICAgICAgICAgICAgZm9jdXNJbnB1dD17Y2xlYW5FeGVjdXRlZH1cbiAgICAgICAgICAgIGNvbG9yPXt0aGlzLnByb3BzLmNvbG9yfVxuICAgICAgICAgICAgaG92ZXJDb2xvcj17dGhpcy5wcm9wcy5ob3ZlckNvbG9yfVxuICAgICAgICAgICAgYWNjZXNzaWJsZVByaW1hcnlDb2xvcj17dGhpcy5wcm9wcy5hY2Nlc3NpYmxlUHJpbWFyeUNvbG9yfVxuICAgICAgICAgICAgZm9udFdlaWdodHM9e3RoaXMucHJvcHMuZm9udFdlaWdodHN9XG4gICAgICAgICAgICBzaG93U2Nyb2xsPXt0aGlzLnByb3BzLnNob3dTY3JvbGx9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAgeyFyZW5kZXJNb2JpbGVTZWFyY2ggJiYgKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goW1xuICAgICAgICAgICAgICBzdHlsZXNbJ2F1dG9zdWdnZXN0LWlucHV0LWNvbnRhaW5lciddLFxuICAgICAgICAgICAgICBzdHlsZXNbdGhpcy5wcm9wcy5pZF0sXG4gICAgICAgICAgICBdKX1cbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICctLWNvbG9yJzogYCR7dGhpcy5wcm9wcy5jb2xvcn1gLFxuICAgICAgICAgICAgICAnLS1ob3Zlci1jb2xvcic6IGAke3RoaXMucHJvcHMuaG92ZXJDb2xvcn1gLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dGhpcy5wcm9wcy5pY29uICYmIChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goW1xuICAgICAgICAgICAgICAgICAgc3R5bGVzW2BhdXRvc3VnZ2VzdC1pbnB1dC1pY29uYF0sXG4gICAgICAgICAgICAgICAgICBzdHlsZXNbdGhpcy5wcm9wcy5pZF0sXG4gICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLmlucHV0Q2xhc3NOYW1lICYmXG4gICAgICAgICAgICAgICAgICAgIGAke3RoaXMucHJvcHMuaW5wdXRDbGFzc05hbWV9LWlucHV0LWljb25gLFxuICAgICAgICAgICAgICAgIF0pfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEljb24gaW1nPXtgJHt0aGlzLnByb3BzLmljb259YH0gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPEF1dG9zdWdnZXN0XG4gICAgICAgICAgICAgIGFsd2F5c1JlbmRlclN1Z2dlc3Rpb25zPXt0aGlzLnN0YXRlLmVkaXRpbmd9XG4gICAgICAgICAgICAgIGlkPXt0aGlzLnByb3BzLmlkfVxuICAgICAgICAgICAgICBzdWdnZXN0aW9ucz17c3VnZ2VzdGlvbnN9XG4gICAgICAgICAgICAgIG9uU3VnZ2VzdGlvbnNGZXRjaFJlcXVlc3RlZD17dGhpcy5mZXRjaEZ1bmN0aW9ufVxuICAgICAgICAgICAgICBvblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWQ9e3RoaXMub25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkfVxuICAgICAgICAgICAgICBnZXRTdWdnZXN0aW9uVmFsdWU9e3RoaXMuZ2V0U3VnZ2VzdGlvblZhbHVlfVxuICAgICAgICAgICAgICByZW5kZXJTdWdnZXN0aW9uPXt0aGlzLnJlbmRlckl0ZW19XG4gICAgICAgICAgICAgIGlucHV0UHJvcHM9e3tcbiAgICAgICAgICAgICAgICAuLi5pbnB1dFByb3BzLFxuICAgICAgICAgICAgICAgIG9uRm9jdXM6IHRoaXMub25Gb2N1cyxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgZm9jdXNJbnB1dE9uU3VnZ2VzdGlvbkNsaWNrXG4gICAgICAgICAgICAgIHNob3VsZFJlbmRlclN1Z2dlc3Rpb25zPXsoKSA9PiB0aGlzLnN0YXRlLmVkaXRpbmd9XG4gICAgICAgICAgICAgIGhpZ2hsaWdodEZpcnN0U3VnZ2VzdGlvbj17IXRoaXMuc3RhdGUub3duUGxhY2VzfVxuICAgICAgICAgICAgICB0aGVtZT17c3R5bGVzfVxuICAgICAgICAgICAgICByZW5kZXJJbnB1dENvbXBvbmVudD17cCA9PiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9e3N0eWxlc1snc3Itb25seSddfSBodG1sRm9yPXt0aGlzLnByb3BzLmlkfT5cbiAgICAgICAgICAgICAgICAgICAge2FyaWFDdXJyZW50U3VnZ2VzdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChhcmlhUmVxdWlyZWRUZXh0KVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoU2VhcmNoQmFySWQpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChhcmlhTGFiZWxUZXh0KX1cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17YXJpYUN1cnJlbnRTdWdnZXN0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KGFyaWFSZXF1aXJlZFRleHQpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChTZWFyY2hCYXJJZClcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KGFyaWFMYWJlbFRleHQpfVxuICAgICAgICAgICAgICAgICAgICBpZD17dGhpcy5wcm9wcy5pZH1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5pbnB1dENsaWNrZWR9XG4gICAgICAgICAgICAgICAgICAgIG9uS2V5RG93bj17dGhpcy5rZXlEb3dufVxuICAgICAgICAgICAgICAgICAgICB7Li4ucH1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS52YWx1ZSAmJiB0aGlzLmNsZWFyQnV0dG9uKCl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIG9uU3VnZ2VzdGlvblNlbGVjdGVkPXt0aGlzLm9uU2VsZWN0ZWR9XG4gICAgICAgICAgICAgIHJlZj17dGhpcy5zdG9yZUlucHV0UmVmZXJlbmNlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCBEVEF1dG9zdWdnZXN0V2l0aFNjcm9sbExvY2sgPSB3aXRoU2Nyb2xsTG9jayhEVEF1dG9zdWdnZXN0KTtcblxuZXhwb3J0IGRlZmF1bHQgRFRBdXRvc3VnZ2VzdFdpdGhTY3JvbGxMb2NrO1xuIiwiaW1wb3J0IHsgZ2V0TmFtZUxhYmVsIH0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXVuaXEtYnktbGFiZWwnO1xuLyoqXG4gKiBSZXR1cm5zIGxhYmVsIGZvciBwcm9wZXJ0aWVzXG4gKlxuICogQG5hbWUgZ2V0TGFiZWxcbiAqIEBwYXJhbSB7Kn0gcHJvcGVydGllcyBvYmplY3QgdGhhdCBjb250YWlucyBcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0cnVlL2ZhbHNlXG4gKiBAZXhhbXBsZVxuICogY29uc3QgcHJvcGVydGllczoge1xuICAgIFwiaWRcIjogXCJHVEZTOk1BVEtBOjMxODkxNVwiLFxuICAgIFwiZ2lkXCI6IFwiZ3Rmc21hdGthOnN0YXRpb246R1RGUzpNQVRLQTozMTg5MTVcIixcbiAgICBcImxheWVyXCI6IFwic3RhdGlvblwiLFxuICAgIFwic291cmNlXCI6IFwiZ3Rmc21hdGthXCIsXG4gICAgXCJzb3VyY2VfaWRcIjogXCJHVEZTOk1BVEtBOjMxODkxNVwiLFxuICAgIFwibmFtZVwiOiBcIlJhdXRhdGllbnRvcmlcIixcbiAgICBcInBvc3RhbGNvZGVcIjogXCIwMDEwMFwiLFxuICAgIFwicG9zdGFsY29kZV9naWRcIjogXCJ3aG9zb25maXJzdDpwb3N0YWxjb2RlOjQyMTQ3OTU2OVwiLFxuICAgIFwiY29uZmlkZW5jZVwiOiAxLFxuICAgIFwiYWNjdXJhY3lcIjogXCJjZW50cm9pZFwiLFxuICAgIFwiY291bnRyeVwiOiBcIlN1b21pXCIsXG4gICAgXCJjb3VudHJ5X2dpZFwiOiBcIndob3NvbmZpcnN0OmNvdW50cnk6MFwiLFxuICAgIFwiY291bnRyeV9hXCI6IFwiRklOXCIsXG4gICAgXCJyZWdpb25cIjogXCJVdXNpbWFhXCIsXG4gICAgXCJyZWdpb25fZ2lkXCI6IFwid2hvc29uZmlyc3Q6cmVnaW9uOjg1NjgzMDY3XCIsXG4gICAgXCJsb2NhbGFkbWluXCI6IFwiSGVsc2lua2lcIixcbiAgICBcImxvY2FsYWRtaW5fZ2lkXCI6IFwid2hvc29uZmlyc3Q6bG9jYWxhZG1pbjo5MDcxOTk3MTVcIixcbiAgICBcImxvY2FsaXR5XCI6IFwiSGVsc2lua2lcIixcbiAgICBcImxvY2FsaXR5X2dpZFwiOiBcIndob3NvbmZpcnN0OmxvY2FsaXR5OjEwMTc0ODQxN1wiLFxuICAgIFwibmVpZ2hib3VyaG9vZFwiOiBcIktsdXV2aVwiLFxuICAgIFwibmVpZ2hib3VyaG9vZF9naWRcIjogXCJ3aG9zb25maXJzdDpuZWlnaGJvdXJob29kOjg1ODk4ODQ3XCIsXG4gICAgXCJsYWJlbFwiOiBcIlJhdXRhdGllbnRvcmksIGtvaWxsaW5lbiwgS2x1dXZpLCBIZWxzaW5raVwiXG4gICAgfVxuICogZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwuZ2V0TGFiZWwocGFyYW0xLCBwYXJhbTIpO1xuICogLy89dHJ1ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRMYWJlbChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IHBhcnRzID0gZ2V0TmFtZUxhYmVsKHByb3BlcnRpZXMsIHRydWUpO1xuICBzd2l0Y2ggKHByb3BlcnRpZXMubGF5ZXIpIHtcbiAgICBjYXNlICdzZWxlY3RGcm9tTWFwJzpcbiAgICBjYXNlICdjdXJyZW50UG9zaXRpb24nOlxuICAgIGNhc2UgJ293bkxvY2F0aW9ucyc6XG4gICAgY2FzZSAnYmFjayc6XG4gICAgICByZXR1cm4gcGFydHNbMV0gfHwgcGFydHNbMF07XG4gICAgY2FzZSAnZmF2b3VyaXRlQmlrZVJlbnRhbFN0YXRpb24nOlxuICAgIGNhc2UgJ2Zhdm91cml0ZVBsYWNlJzpcbiAgICAgIHJldHVybiBwYXJ0c1swXTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHBhcnRzLmxlbmd0aCA+IDEgJiYgcGFydHNbMV0gIT09ICcnXG4gICAgICAgID8gcGFydHMuam9pbignLCAnKVxuICAgICAgICA6IHBhcnRzWzFdIHx8IHBhcnRzWzBdO1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGhvb2tzIGZyb20gJ0Boc2wtZmkvaG9va3MnO1xuXG5jb25zdCB3aXRoU2Nyb2xsTG9jayA9IENvbXBvbmVudCA9PiB7XG4gIHJldHVybiBwcm9wcyA9PiB7XG4gICAgY29uc3QgeyBsb2NrLCB1bmxvY2sgfSA9IGhvb2tzLnVzZVNjcm9sbExvY2soKTtcblxuICAgIHJldHVybiA8Q29tcG9uZW50IGxvY2s9e2xvY2t9IHVubG9jaz17dW5sb2NrfSB7Li4ucHJvcHN9IC8+O1xuICB9O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFNjcm9sbExvY2s7XG4iXSwibmFtZXMiOlsiX3R5cGVvZiIsIm9iaiIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJfZXh0ZW5kcyIsIk9iamVjdCIsImFzc2lnbiIsInRhcmdldCIsImkiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJzb3VyY2UiLCJrZXkiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJhcHBseSIsInRoaXMiLCJfYXJyYXlMaWtlVG9BcnJheSIsImFyciIsImxlbiIsImFycjIiLCJBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIm8iLCJtaW5MZW4iLCJhcnJheUxpa2VUb0FycmF5IiwibiIsInRvU3RyaW5nIiwic2xpY2UiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJpc0FycmF5IiwiYXJyYXlXaXRob3V0SG9sZXMiLCJpdGVyIiwiaXRlcmFibGVUb0FycmF5IiwidW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJUeXBlRXJyb3IiLCJub25JdGVyYWJsZVNwcmVhZCIsIl9jbGFzc0NhbGxDaGVjayIsImluc3RhbmNlIiwiQ29uc3RydWN0b3IiLCJfZGVmaW5lUHJvcGVydGllcyIsInByb3BzIiwiZGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsImRlZmluZVByb3BlcnR5IiwiX2NyZWF0ZUNsYXNzIiwicHJvdG9Qcm9wcyIsInN0YXRpY1Byb3BzIiwiX3NldFByb3RvdHlwZU9mIiwicCIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiX2luaGVyaXRzIiwic3ViQ2xhc3MiLCJzdXBlckNsYXNzIiwiY3JlYXRlIiwidmFsdWUiLCJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwic2VsZiIsIlJlZmVyZW5jZUVycm9yIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJhc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJfZ2V0UHJvdG90eXBlT2YiLCJnZXRQcm90b3R5cGVPZiIsIl9zbGljZWRUb0FycmF5IiwiYXJyYXlXaXRoSG9sZXMiLCJfYXJyIiwiX24iLCJfZCIsIl9lIiwidW5kZWZpbmVkIiwiX3MiLCJfaSIsIm5leHQiLCJkb25lIiwicHVzaCIsImVyciIsIml0ZXJhYmxlVG9BcnJheUxpbWl0Iiwibm9uSXRlcmFibGVSZXN0IiwidHJ1RXEiLCJ2YWwxIiwidmFsMiIsImlzRHVwbGljYXRlIiwiaXRlbTEiLCJpdGVtMiIsInByb3BzMSIsInByb3BlcnRpZXMiLCJwcm9wczIiLCJ0eXBlIiwibzEiLCJvcmlnaW4iLCJkMSIsImRlc3RpbmF0aW9uIiwibzIiLCJkMiIsImxvY2FsaXR5IiwibGF5ZXIiLCJsYWJlbElkIiwiZ3Rmc0lkIiwiZ2lkIiwiaW5jbHVkZXMiLCJwMSIsImdlb21ldHJ5IiwiY29vcmRpbmF0ZXMiLCJwMiIsIk1hdGgiLCJhYnMiLCJsYWJlbCIsImFkZHJlc3MiLCJub3JtYWxpemUiLCJzdHIiLCJpc1N0cmluZyIsInRvTG93ZXJDYXNlIiwiTGF5ZXJUeXBlIiwiQWRkcmVzcyIsIkJhY2siLCJDdXJyZW50UG9zaXRpb24iLCJGYXZvdXJpdGVTdG9wIiwiRmF2b3VyaXRlU3RhdGlvbiIsIkZhdm91cml0ZVBsYWNlIiwiRmF2b3VyaXRlUm91dGUiLCJGdXR1cmVSb3V0ZSIsIlN0YXRpb24iLCJTZWxlY3RGcm9tTWFwIiwiU2VsZWN0RnJvbU93bkxvY2F0aW9ucyIsIlN0b3AiLCJTdHJlZXQiLCJWZW51ZSIsIkJpa2VSZW50YWxTdGF0aW9uIiwiQ2FyUGFyayIsIkJpa2VQYXJrIiwibWF0Y2giLCJub3JtYWxpemVkVGVybSIsInJlc3VsdFByb3BlcnRpZXMiLCJtYXAiLCJmaWx0ZXIiLCJub3JtYWxpemVkVmFsdWUiLCJpbmRleE9mIiwicmVkdWNlIiwicHJldmlvdXMiLCJjdXJyZW50IiwiZ2V0TGF5ZXJSYW5rIiwiRmF2b3VyaXRlQmlrZVJlbnRhbFN0YXRpb24iLCJzb3J0U2VhcmNoUmVzdWx0cyIsImxpbmVSZWdleHAiLCJyZXN1bHRzIiwidGVybSIsImlzTGluZUlkZW50aWZpZXIiLCJpc0xpbmVTZWFyY2giLCJvcmRlcmVkUmVzdWx0cyIsIm9yZGVyQnkiLCJyZXN1bHQiLCJzaG9ydE5hbWUiLCJjb25maWRlbmNlIiwiZXN0aW1hdGVkQ29uZmlkZW5jZSIsInVuaXFXaXRoIiwiZ2V0U3RvcE5hbWUiLCJzdG9wQ29kZSIsImxhc3RJbmRleE9mIiwic3Vic3RyaW5nIiwiZ2V0TG9jYWxpdHkiLCJzdWdnZXN0aW9uIiwibG9jYWxhZG1pbiIsImdldFN0b3BDb2RlIiwiaWQiLCJjb2RlIiwiZm9ybWF0RmF2b3VyaXRlUGxhY2VMYWJlbCIsInNwbGl0IiwicmVwbGFjZSIsIlJlZ0V4cCIsImVzY2FwZVJlZ0V4cCIsImdldE5hbWVMYWJlbCIsIm1lbW9pemUiLCJwbGFpbiIsIm1vZGUiLCJsb25nTmFtZSIsImFnZW5jeSIsIml0ZW0iLCJjbG9uZURlZXAiLCJ1bmlxQnlMYWJlbCIsImZlYXR1cmVzIiwiZmVhdDEiLCJmZWF0MiIsImJvb2wiLCJpc0VxdWFsIiwiZmlsdGVyTWF0Y2hpbmdUb0lucHV0IiwibGlzdCIsIklucHV0IiwiZmllbGRzIiwiaW5wdXQiLCJ0cmltIiwibXVsdGlXb3JkIiwicGFydHMiLCJmb3JFYWNoIiwicE5hbWUiLCJnZXQiLCJzcGxpY2UiLCJqb2luIiwiY29uY2F0Iiwic2VyaWFsaXplIiwicHJlZml4Iiwia2V5cyIsImsiLCJ2IiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiYXhpb3MiLCJyZXF1aXJlIiwiZ2V0SnNvbiIsInVybCIsInBhcmFtcyIsImVuY29kZVVSSSIsInNlYXJjaCIsInRpbWVvdXQiLCJtZXRob2QiLCJoZWFkZXJzIiwiQWNjZXB0IiwidGhlbiIsInJlcyIsImRhdGEiLCJnZXRHZW9jb2RpbmdSZXN1bHRzIiwic2VhcmNoU3RyaW5nIiwic2VhcmNoUGFyYW1zIiwibGFuZyIsImZvY3VzUG9pbnQiLCJzb3VyY2VzIiwicGVsaWFzVXJsIiwibWluaW1hbFJlZ2V4cCIsImdlb2NvZGluZ0xheWVycyIsInRleHQiLCJQcm9taXNlIiwicmVzb2x2ZSIsIlBFTElBU19VUkwiLCJvcHRzIiwibGF5ZXJzIiwiZ2V0U3RvcHNGcm9tR2VvY29kaW5nIiwic3RvcHMiLCJVUkxfUEVMSUFTX1BMQUNFIiwiZ2lkcyIsInN0b3BTdGF0aW9uTWFwIiwic3RvcCIsInN0b3BPclN0YXRpb24iLCJpZHMiLCJhZGRlbmR1bSIsImxhc3RVcGRhdGVkIiwiZmF2b3VyaXRlSWQiLCJnZXRPbGRTZWFyY2hlcyIsIm9sZFNlYXJjaGVzIiwiZHJvcExheWVycyIsIm1hdGNoaW5nT2xkU2VhcmNoZXMiLCJ0YWtlIiwibmV3SXRlbSIsInRpbWV0YWJsZUNsaWNrZWQiLCJhcnJvd0NsaWNrZWQiLCJyb3V0ZUxheWVycyIsImxvY2F0aW9uTGF5ZXJzIiwicGFya2luZ0xheWVycyIsImRlYm91bmNlZFNlYXJjaCIsImRlYm91bmNlIiwidGFyZ2V0cyIsInRyYW5zcG9ydE1vZGUiLCJzZWFyY2hDb250ZXh0IiwiZmlsdGVyUmVzdWx0cyIsImdlb2NvZGluZ1NpemUiLCJjYWxsYmFjayIsInBhdGhPcHRzIiwicmVmUG9pbnQiLCJnZXRQb3NpdGlvbnMiLCJsb2NhdGlvbnMiLCJnZXRGYXZvdXJpdGVMb2NhdGlvbnMiLCJwcmV2U2VhcmNoZXMiLCJnZXRGYXZvdXJpdGVTdG9wcyIsInBhcmtpbmdBcmVhU291cmNlcyIsImdldExhbmd1YWdlIiwiZ2V0U3RvcEFuZFN0YXRpb25zUXVlcnkiLCJnZXRGYXZvdXJpdGVCaWtlUmVudGFsU3RhdGlvbnNRdWVyeSIsImdldEZhdm91cml0ZUJpa2VSZW50YWxTdGF0aW9ucyIsImdldEZhdm91cml0ZVJvdXRlc1F1ZXJ5IiwiZ2V0RmF2b3VyaXRlUm91dGVzIiwiZ2V0Um91dGVzUXVlcnkiLCJjb250ZXh0IiwibG9jYXRpb25Bd2FyZSIsImlzUGVsaWFzTG9jYXRpb25Bd2FyZSIsIlVSTF9QRUxJQVMiLCJmZWVkSURzIiwiZ2VvY29kaW5nU2VhcmNoUGFyYW1zIiwiZ2VvY29kaW5nU291cmNlcyIsImdldEZ1dHVyZVJvdXRlcyIsImNpdHlCaWtlTmV0d29ya3MiLCJhbGxUYXJnZXRzIiwiYWxsU291cmNlcyIsInBvc2l0aW9uIiwic2VhcmNoQ29tcG9uZW50cyIsInNlYXJjaGVzIiwibGFuZ3VhZ2UiLCJsYXQiLCJsb24iLCJ0b0ZpeGVkIiwic3RhdHVzIiwiZ2V0Q3VycmVudFBvc2l0aW9uSWZFbXB0eSIsInNlbGVjdFBvc2l0aW9uRm9tTWFwIiwiaXRlbXMiLCJmYXZvdXJpdGVMb2NhdGlvbnMiLCJmYXZvdXJpdGVTdG9wcyIsImhhc0Zhdm91cml0ZXMiLCJzZWxlY3RGcm9tT3duTG9jYXRpb25zIiwiZmF2b3VyaXRlcyIsImZlZWRpcyIsImdlb3NvdXJjZXMiLCJsb2NhdGlvbkhpc3RvcnkiLCJzaXplIiwiZmVlZElkcyIsImhpc3RvcnkiLCJzdG9wc0FuZFN0YXRpb25zIiwiZXZlcnkiLCJkZWR1cGVzdG9wcyIsInN0b3BIaXN0b3J5IiwiZmF2b3VyaXRlUm91dGVzIiwicm91dGVIaXN0b3J5IiwiZmF2b3VyaXRlQmlrZVN0YXRpb25zIiwiYWxsIiwiZmxhdHRlbiIsImVycm9yIiwibGVhZGluZyIsIm1vZHVsZSIsImhvb2tDYWxsYmFjayIsInNvbWUiLCJob29rcyIsInNldEhvb2tDYWxsYmFjayIsImlzT2JqZWN0IiwiaGFzT3duUHJvcCIsImEiLCJiIiwiaXNPYmplY3RFbXB0eSIsImdldE93blByb3BlcnR5TmFtZXMiLCJpc1VuZGVmaW5lZCIsImlzTnVtYmVyIiwiaXNEYXRlIiwiRGF0ZSIsImZuIiwiZXh0ZW5kIiwidmFsdWVPZiIsImNyZWF0ZVVUQyIsImZvcm1hdCIsImxvY2FsZSIsInN0cmljdCIsImNyZWF0ZUxvY2FsT3JVVEMiLCJ1dGMiLCJkZWZhdWx0UGFyc2luZ0ZsYWdzIiwiZW1wdHkiLCJ1bnVzZWRUb2tlbnMiLCJ1bnVzZWRJbnB1dCIsIm92ZXJmbG93IiwiY2hhcnNMZWZ0T3ZlciIsIm51bGxJbnB1dCIsImludmFsaWRFcmEiLCJpbnZhbGlkTW9udGgiLCJpbnZhbGlkRm9ybWF0IiwidXNlckludmFsaWRhdGVkIiwiaXNvIiwicGFyc2VkRGF0ZVBhcnRzIiwiZXJhIiwibWVyaWRpZW0iLCJyZmMyODIyIiwid2Vla2RheU1pc21hdGNoIiwiZ2V0UGFyc2luZ0ZsYWdzIiwibSIsIl9wZiIsImlzVmFsaWQiLCJfaXNWYWxpZCIsImZsYWdzIiwicGFyc2VkUGFydHMiLCJpc05vd1ZhbGlkIiwiaXNOYU4iLCJnZXRUaW1lIiwiaW52YWxpZFdlZWtkYXkiLCJfc3RyaWN0IiwiYmlnSG91ciIsImlzRnJvemVuIiwiY3JlYXRlSW52YWxpZCIsIk5hTiIsImZ1biIsInQiLCJtb21lbnRQcm9wZXJ0aWVzIiwidXBkYXRlSW5Qcm9ncmVzcyIsImNvcHlDb25maWciLCJ0byIsInByb3AiLCJ2YWwiLCJfaXNBTW9tZW50T2JqZWN0IiwiX2YiLCJfbCIsIl90em0iLCJfaXNVVEMiLCJfb2Zmc2V0IiwiX2xvY2FsZSIsIk1vbWVudCIsImNvbmZpZyIsInVwZGF0ZU9mZnNldCIsImlzTW9tZW50Iiwid2FybiIsIm1zZyIsInN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncyIsImNvbnNvbGUiLCJkZXByZWNhdGUiLCJmaXJzdFRpbWUiLCJkZXByZWNhdGlvbkhhbmRsZXIiLCJhcmciLCJhcmdzIiwiRXJyb3IiLCJzdGFjayIsImRlcHJlY2F0aW9ucyIsImRlcHJlY2F0ZVNpbXBsZSIsImlzRnVuY3Rpb24iLCJGdW5jdGlvbiIsInNldCIsIl9jb25maWciLCJfZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQiLCJfZGF5T2ZNb250aE9yZGluYWxQYXJzZSIsIl9vcmRpbmFsUGFyc2UiLCJtZXJnZUNvbmZpZ3MiLCJwYXJlbnRDb25maWciLCJjaGlsZENvbmZpZyIsIkxvY2FsZSIsImRlZmF1bHRDYWxlbmRhciIsInNhbWVEYXkiLCJuZXh0RGF5IiwibmV4dFdlZWsiLCJsYXN0RGF5IiwibGFzdFdlZWsiLCJzYW1lRWxzZSIsImNhbGVuZGFyIiwibW9tIiwibm93Iiwib3V0cHV0IiwiX2NhbGVuZGFyIiwiemVyb0ZpbGwiLCJudW1iZXIiLCJ0YXJnZXRMZW5ndGgiLCJmb3JjZVNpZ24iLCJhYnNOdW1iZXIiLCJ6ZXJvc1RvRmlsbCIsInBvdyIsIm1heCIsInN1YnN0ciIsImZvcm1hdHRpbmdUb2tlbnMiLCJsb2NhbEZvcm1hdHRpbmdUb2tlbnMiLCJmb3JtYXRGdW5jdGlvbnMiLCJmb3JtYXRUb2tlbkZ1bmN0aW9ucyIsImFkZEZvcm1hdFRva2VuIiwidG9rZW4iLCJwYWRkZWQiLCJvcmRpbmFsIiwiZnVuYyIsImxvY2FsZURhdGEiLCJyZW1vdmVGb3JtYXR0aW5nVG9rZW5zIiwibWFrZUZvcm1hdEZ1bmN0aW9uIiwiYXJyYXkiLCJmb3JtYXRNb21lbnQiLCJleHBhbmRGb3JtYXQiLCJpbnZhbGlkRGF0ZSIsInJlcGxhY2VMb25nRGF0ZUZvcm1hdFRva2VucyIsImxvbmdEYXRlRm9ybWF0IiwibGFzdEluZGV4IiwiZGVmYXVsdExvbmdEYXRlRm9ybWF0IiwiTFRTIiwiTFQiLCJMIiwiTEwiLCJMTEwiLCJMTExMIiwiX2xvbmdEYXRlRm9ybWF0IiwiZm9ybWF0VXBwZXIiLCJ0b1VwcGVyQ2FzZSIsInRvayIsImRlZmF1bHRJbnZhbGlkRGF0ZSIsIl9pbnZhbGlkRGF0ZSIsImRlZmF1bHRPcmRpbmFsIiwiZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UiLCJfb3JkaW5hbCIsImRlZmF1bHRSZWxhdGl2ZVRpbWUiLCJmdXR1cmUiLCJwYXN0IiwicyIsInNzIiwibW0iLCJoIiwiaGgiLCJkIiwiZGQiLCJ3Iiwid3ciLCJNIiwiTU0iLCJ5IiwieXkiLCJyZWxhdGl2ZVRpbWUiLCJ3aXRob3V0U3VmZml4Iiwic3RyaW5nIiwiaXNGdXR1cmUiLCJfcmVsYXRpdmVUaW1lIiwicGFzdEZ1dHVyZSIsImRpZmYiLCJhbGlhc2VzIiwiYWRkVW5pdEFsaWFzIiwidW5pdCIsInNob3J0aGFuZCIsImxvd2VyQ2FzZSIsIm5vcm1hbGl6ZVVuaXRzIiwidW5pdHMiLCJub3JtYWxpemVPYmplY3RVbml0cyIsImlucHV0T2JqZWN0Iiwibm9ybWFsaXplZFByb3AiLCJub3JtYWxpemVkSW5wdXQiLCJwcmlvcml0aWVzIiwiYWRkVW5pdFByaW9yaXR5IiwicHJpb3JpdHkiLCJnZXRQcmlvcml0aXplZFVuaXRzIiwidW5pdHNPYmoiLCJ1Iiwic29ydCIsImlzTGVhcFllYXIiLCJ5ZWFyIiwiYWJzRmxvb3IiLCJjZWlsIiwiZmxvb3IiLCJ0b0ludCIsImFyZ3VtZW50Rm9yQ29lcmNpb24iLCJjb2VyY2VkTnVtYmVyIiwiaXNGaW5pdGUiLCJtYWtlR2V0U2V0Iiwia2VlcFRpbWUiLCJzZXQkMSIsIm1vbnRoIiwiZGF0ZSIsImRheXNJbk1vbnRoIiwic3RyaW5nR2V0Iiwic3RyaW5nU2V0IiwicHJpb3JpdGl6ZWQiLCJyZWdleGVzIiwibWF0Y2gxIiwibWF0Y2gyIiwibWF0Y2gzIiwibWF0Y2g0IiwibWF0Y2g2IiwibWF0Y2gxdG8yIiwibWF0Y2gzdG80IiwibWF0Y2g1dG82IiwibWF0Y2gxdG8zIiwibWF0Y2gxdG80IiwibWF0Y2gxdG82IiwibWF0Y2hVbnNpZ25lZCIsIm1hdGNoU2lnbmVkIiwibWF0Y2hPZmZzZXQiLCJtYXRjaFNob3J0T2Zmc2V0IiwibWF0Y2hUaW1lc3RhbXAiLCJtYXRjaFdvcmQiLCJhZGRSZWdleFRva2VuIiwicmVnZXgiLCJzdHJpY3RSZWdleCIsImlzU3RyaWN0IiwiZ2V0UGFyc2VSZWdleEZvclRva2VuIiwidW5lc2NhcGVGb3JtYXQiLCJyZWdleEVzY2FwZSIsIm1hdGNoZWQiLCJwMyIsInA0IiwidG9rZW5zIiwiYWRkUGFyc2VUb2tlbiIsImFkZFdlZWtQYXJzZVRva2VuIiwiX3ciLCJhZGRUaW1lVG9BcnJheUZyb21Ub2tlbiIsIl9hIiwiWUVBUiIsIk1PTlRIIiwiREFURSIsIkhPVVIiLCJNSU5VVEUiLCJTRUNPTkQiLCJNSUxMSVNFQ09ORCIsIldFRUsiLCJXRUVLREFZIiwibW9kIiwieCIsIm1vZE1vbnRoIiwibW9udGhzU2hvcnQiLCJtb250aHMiLCJtb250aHNTaG9ydFJlZ2V4IiwibW9udGhzUmVnZXgiLCJtb250aHNQYXJzZSIsImRlZmF1bHRMb2NhbGVNb250aHMiLCJkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQiLCJNT05USFNfSU5fRk9STUFUIiwiZGVmYXVsdE1vbnRoc1Nob3J0UmVnZXgiLCJkZWZhdWx0TW9udGhzUmVnZXgiLCJsb2NhbGVNb250aHMiLCJfbW9udGhzIiwiaXNGb3JtYXQiLCJsb2NhbGVNb250aHNTaG9ydCIsIl9tb250aHNTaG9ydCIsImhhbmRsZVN0cmljdFBhcnNlIiwibW9udGhOYW1lIiwiaWkiLCJsbGMiLCJ0b0xvY2FsZUxvd2VyQ2FzZSIsIl9tb250aHNQYXJzZSIsIl9sb25nTW9udGhzUGFyc2UiLCJfc2hvcnRNb250aHNQYXJzZSIsImxvY2FsZU1vbnRoc1BhcnNlIiwiX21vbnRoc1BhcnNlRXhhY3QiLCJzZXRNb250aCIsImRheU9mTW9udGgiLCJtaW4iLCJnZXRTZXRNb250aCIsImdldERheXNJbk1vbnRoIiwiY29tcHV0ZU1vbnRoc1BhcnNlIiwiX21vbnRoc1Nob3J0U3RyaWN0UmVnZXgiLCJfbW9udGhzU2hvcnRSZWdleCIsIl9tb250aHNTdHJpY3RSZWdleCIsIl9tb250aHNSZWdleCIsImNtcExlblJldiIsInNob3J0UGllY2VzIiwibG9uZ1BpZWNlcyIsIm1peGVkUGllY2VzIiwiZGF5c0luWWVhciIsInBhcnNlVHdvRGlnaXRZZWFyIiwicGFyc2VJbnQiLCJnZXRTZXRZZWFyIiwiZ2V0SXNMZWFwWWVhciIsImNyZWF0ZURhdGUiLCJtcyIsImdldEZ1bGxZZWFyIiwic2V0RnVsbFllYXIiLCJjcmVhdGVVVENEYXRlIiwiVVRDIiwiZ2V0VVRDRnVsbFllYXIiLCJzZXRVVENGdWxsWWVhciIsImZpcnN0V2Vla09mZnNldCIsImRvdyIsImRveSIsImZ3ZCIsImdldFVUQ0RheSIsImRheU9mWWVhckZyb21XZWVrcyIsIndlZWsiLCJ3ZWVrZGF5IiwicmVzWWVhciIsInJlc0RheU9mWWVhciIsImRheU9mWWVhciIsIndlZWtPZlllYXIiLCJyZXNXZWVrIiwid2Vla09mZnNldCIsIndlZWtzSW5ZZWFyIiwid2Vla09mZnNldE5leHQiLCJsb2NhbGVXZWVrIiwiX3dlZWsiLCJkZWZhdWx0TG9jYWxlV2VlayIsImxvY2FsZUZpcnN0RGF5T2ZXZWVrIiwibG9jYWxlRmlyc3REYXlPZlllYXIiLCJnZXRTZXRXZWVrIiwiYWRkIiwiZ2V0U2V0SVNPV2VlayIsInBhcnNlV2Vla2RheSIsIndlZWtkYXlzUGFyc2UiLCJwYXJzZUlzb1dlZWtkYXkiLCJzaGlmdFdlZWtkYXlzIiwid3MiLCJ3ZWVrZGF5c01pbiIsIndlZWtkYXlzU2hvcnQiLCJ3ZWVrZGF5cyIsIndlZWtkYXlzTWluUmVnZXgiLCJ3ZWVrZGF5c1Nob3J0UmVnZXgiLCJ3ZWVrZGF5c1JlZ2V4IiwiZGVmYXVsdExvY2FsZVdlZWtkYXlzIiwiZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQiLCJkZWZhdWx0TG9jYWxlV2Vla2RheXNNaW4iLCJkZWZhdWx0V2Vla2RheXNSZWdleCIsImRlZmF1bHRXZWVrZGF5c1Nob3J0UmVnZXgiLCJkZWZhdWx0V2Vla2RheXNNaW5SZWdleCIsImxvY2FsZVdlZWtkYXlzIiwiX3dlZWtkYXlzIiwiZGF5IiwibG9jYWxlV2Vla2RheXNTaG9ydCIsIl93ZWVrZGF5c1Nob3J0IiwibG9jYWxlV2Vla2RheXNNaW4iLCJfd2Vla2RheXNNaW4iLCJoYW5kbGVTdHJpY3RQYXJzZSQxIiwid2Vla2RheU5hbWUiLCJfd2Vla2RheXNQYXJzZSIsIl9zaG9ydFdlZWtkYXlzUGFyc2UiLCJfbWluV2Vla2RheXNQYXJzZSIsImxvY2FsZVdlZWtkYXlzUGFyc2UiLCJfd2Vla2RheXNQYXJzZUV4YWN0IiwiX2Z1bGxXZWVrZGF5c1BhcnNlIiwiZ2V0U2V0RGF5T2ZXZWVrIiwiZ2V0RGF5IiwiZ2V0U2V0TG9jYWxlRGF5T2ZXZWVrIiwiZ2V0U2V0SVNPRGF5T2ZXZWVrIiwiY29tcHV0ZVdlZWtkYXlzUGFyc2UiLCJfd2Vla2RheXNTdHJpY3RSZWdleCIsIl93ZWVrZGF5c1JlZ2V4IiwiX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleCIsIl93ZWVrZGF5c1Nob3J0UmVnZXgiLCJfd2Vla2RheXNNaW5TdHJpY3RSZWdleCIsIl93ZWVrZGF5c01pblJlZ2V4IiwibWlucCIsInNob3J0cCIsImxvbmdwIiwibWluUGllY2VzIiwiaEZvcm1hdCIsImhvdXJzIiwia0Zvcm1hdCIsImxvd2VyY2FzZSIsIm1pbnV0ZXMiLCJtYXRjaE1lcmlkaWVtIiwiX21lcmlkaWVtUGFyc2UiLCJsb2NhbGVJc1BNIiwiY2hhckF0Iiwic2Vjb25kcyIsImtJbnB1dCIsIl9pc1BtIiwiaXNQTSIsIl9tZXJpZGllbSIsInBvcyIsInBvczEiLCJwb3MyIiwiZGVmYXVsdExvY2FsZU1lcmlkaWVtUGFyc2UiLCJnZXRTZXRIb3VyIiwibG9jYWxlTWVyaWRpZW0iLCJpc0xvd2VyIiwiZ2xvYmFsTG9jYWxlIiwiYmFzZUNvbmZpZyIsImRheU9mTW9udGhPcmRpbmFsUGFyc2UiLCJtZXJpZGllbVBhcnNlIiwibG9jYWxlcyIsImxvY2FsZUZhbWlsaWVzIiwiY29tbW9uUHJlZml4IiwiYXJyMSIsIm1pbmwiLCJub3JtYWxpemVMb2NhbGUiLCJjaG9vc2VMb2NhbGUiLCJuYW1lcyIsImoiLCJsb2FkTG9jYWxlIiwib2xkTG9jYWxlIiwiZXhwb3J0cyIsIl9hYmJyIiwiZ2V0U2V0R2xvYmFsTG9jYWxlIiwiZSIsInZhbHVlcyIsImdldExvY2FsZSIsImRlZmluZUxvY2FsZSIsImFiYnIiLCJwYXJlbnRMb2NhbGUiLCJ1cGRhdGVMb2NhbGUiLCJ0bXBMb2NhbGUiLCJsaXN0TG9jYWxlcyIsImNoZWNrT3ZlcmZsb3ciLCJfb3ZlcmZsb3dEYXlPZlllYXIiLCJfb3ZlcmZsb3dXZWVrcyIsIl9vdmVyZmxvd1dlZWtkYXkiLCJleHRlbmRlZElzb1JlZ2V4IiwiYmFzaWNJc29SZWdleCIsInR6UmVnZXgiLCJpc29EYXRlcyIsImlzb1RpbWVzIiwiYXNwTmV0SnNvblJlZ2V4Iiwib2JzT2Zmc2V0cyIsIlVUIiwiR01UIiwiRURUIiwiRVNUIiwiQ0RUIiwiQ1NUIiwiTURUIiwiTVNUIiwiUERUIiwiUFNUIiwiY29uZmlnRnJvbUlTTyIsImwiLCJhbGxvd1RpbWUiLCJkYXRlRm9ybWF0IiwidGltZUZvcm1hdCIsInR6Rm9ybWF0IiwiZXhlYyIsImNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQiLCJleHRyYWN0RnJvbVJGQzI4MjJTdHJpbmdzIiwieWVhclN0ciIsIm1vbnRoU3RyIiwiZGF5U3RyIiwiaG91clN0ciIsIm1pbnV0ZVN0ciIsInNlY29uZFN0ciIsInVudHJ1bmNhdGVZZWFyIiwicHJlcHJvY2Vzc1JGQzI4MjIiLCJjaGVja1dlZWtkYXkiLCJ3ZWVrZGF5U3RyIiwicGFyc2VkSW5wdXQiLCJjYWxjdWxhdGVPZmZzZXQiLCJvYnNPZmZzZXQiLCJtaWxpdGFyeU9mZnNldCIsIm51bU9mZnNldCIsImhtIiwiY29uZmlnRnJvbVJGQzI4MjIiLCJwYXJzZWRBcnJheSIsInNldFVUQ01pbnV0ZXMiLCJnZXRVVENNaW51dGVzIiwiY29uZmlnRnJvbVN0cmluZyIsImNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrIiwiZGVmYXVsdHMiLCJjIiwiY3VycmVudERhdGVBcnJheSIsIm5vd1ZhbHVlIiwiX3VzZVVUQyIsImdldFVUQ01vbnRoIiwiZ2V0VVRDRGF0ZSIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsImNvbmZpZ0Zyb21BcnJheSIsImN1cnJlbnREYXRlIiwiZXhwZWN0ZWRXZWVrZGF5IiwieWVhclRvVXNlIiwiZGF5T2ZZZWFyRnJvbVdlZWtJbmZvIiwiX2RheU9mWWVhciIsIl9uZXh0RGF5Iiwid2Vla1llYXIiLCJ0ZW1wIiwid2Vla2RheU92ZXJmbG93IiwiY3VyV2VlayIsIkdHIiwiVyIsIkUiLCJjcmVhdGVMb2NhbCIsImdnIiwiSVNPXzg2MDEiLCJSRkNfMjgyMiIsInNraXBwZWQiLCJzdHJpbmdMZW5ndGgiLCJ0b3RhbFBhcnNlZElucHV0TGVuZ3RoIiwibWVyaWRpZW1GaXhXcmFwIiwiZXJhc0NvbnZlcnRZZWFyIiwiaG91ciIsImlzUG0iLCJtZXJpZGllbUhvdXIiLCJjb25maWdGcm9tU3RyaW5nQW5kQXJyYXkiLCJ0ZW1wQ29uZmlnIiwiYmVzdE1vbWVudCIsInNjb3JlVG9CZWF0IiwiY3VycmVudFNjb3JlIiwidmFsaWRGb3JtYXRGb3VuZCIsImJlc3RGb3JtYXRJc1ZhbGlkIiwic2NvcmUiLCJjb25maWdGcm9tT2JqZWN0IiwiZGF5T3JEYXRlIiwibWludXRlIiwic2Vjb25kIiwibWlsbGlzZWNvbmQiLCJjcmVhdGVGcm9tQ29uZmlnIiwicHJlcGFyZUNvbmZpZyIsInByZXBhcnNlIiwiY29uZmlnRnJvbUlucHV0IiwiaXNVVEMiLCJwcm90b3R5cGVNaW4iLCJvdGhlciIsInByb3RvdHlwZU1heCIsInBpY2tCeSIsIm1vbWVudHMiLCJvcmRlcmluZyIsImlzRHVyYXRpb25WYWxpZCIsInVuaXRIYXNEZWNpbWFsIiwicGFyc2VGbG9hdCIsImlzVmFsaWQkMSIsImNyZWF0ZUludmFsaWQkMSIsImNyZWF0ZUR1cmF0aW9uIiwiRHVyYXRpb24iLCJkdXJhdGlvbiIsInllYXJzIiwicXVhcnRlcnMiLCJxdWFydGVyIiwid2Vla3MiLCJpc29XZWVrIiwiZGF5cyIsIm1pbGxpc2Vjb25kcyIsIl9taWxsaXNlY29uZHMiLCJfZGF5cyIsIl9kYXRhIiwiX2J1YmJsZSIsImlzRHVyYXRpb24iLCJhYnNSb3VuZCIsInJvdW5kIiwiY29tcGFyZUFycmF5cyIsImFycmF5MSIsImFycmF5MiIsImRvbnRDb252ZXJ0IiwibGVuZ3RoRGlmZiIsImRpZmZzIiwib2Zmc2V0Iiwic2VwYXJhdG9yIiwidXRjT2Zmc2V0Iiwic2lnbiIsIm9mZnNldEZyb21TdHJpbmciLCJjaHVua09mZnNldCIsIm1hdGNoZXIiLCJtYXRjaGVzIiwiY2xvbmVXaXRoT2Zmc2V0IiwibW9kZWwiLCJjbG9uZSIsInNldFRpbWUiLCJsb2NhbCIsImdldERhdGVPZmZzZXQiLCJnZXRUaW1lem9uZU9mZnNldCIsImdldFNldE9mZnNldCIsImtlZXBMb2NhbFRpbWUiLCJrZWVwTWludXRlcyIsImxvY2FsQWRqdXN0IiwiX2NoYW5nZUluUHJvZ3Jlc3MiLCJhZGRTdWJ0cmFjdCIsImdldFNldFpvbmUiLCJzZXRPZmZzZXRUb1VUQyIsInNldE9mZnNldFRvTG9jYWwiLCJzdWJ0cmFjdCIsInNldE9mZnNldFRvUGFyc2VkT2Zmc2V0IiwidFpvbmUiLCJoYXNBbGlnbmVkSG91ck9mZnNldCIsImlzRGF5bGlnaHRTYXZpbmdUaW1lIiwiaXNEYXlsaWdodFNhdmluZ1RpbWVTaGlmdGVkIiwiX2lzRFNUU2hpZnRlZCIsInRvQXJyYXkiLCJpc0xvY2FsIiwiaXNVdGNPZmZzZXQiLCJpc1V0YyIsImFzcE5ldFJlZ2V4IiwiaXNvUmVnZXgiLCJyZXQiLCJkaWZmUmVzIiwicGFyc2VJc28iLCJtb21lbnRzRGlmZmVyZW5jZSIsImlucCIsInBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UiLCJiYXNlIiwiaXNBZnRlciIsImlzQmVmb3JlIiwiY3JlYXRlQWRkZXIiLCJkaXJlY3Rpb24iLCJwZXJpb2QiLCJ0bXAiLCJpc0FkZGluZyIsImludmFsaWQiLCJTdHJpbmciLCJpc01vbWVudElucHV0IiwiaXNOdW1iZXJPclN0cmluZ0FycmF5IiwiaXNNb21lbnRJbnB1dE9iamVjdCIsInByb3BlcnR5Iiwib2JqZWN0VGVzdCIsInByb3BlcnR5VGVzdCIsImFycmF5VGVzdCIsImRhdGFUeXBlVGVzdCIsImlzQ2FsZW5kYXJTcGVjIiwiZ2V0Q2FsZW5kYXJGb3JtYXQiLCJteU1vbWVudCIsImNhbGVuZGFyJDEiLCJ0aW1lIiwiZm9ybWF0cyIsInNvZCIsInN0YXJ0T2YiLCJjYWxlbmRhckZvcm1hdCIsImxvY2FsSW5wdXQiLCJlbmRPZiIsImlzQmV0d2VlbiIsImluY2x1c2l2aXR5IiwibG9jYWxGcm9tIiwibG9jYWxUbyIsImlzU2FtZSIsImlucHV0TXMiLCJpc1NhbWVPckFmdGVyIiwiaXNTYW1lT3JCZWZvcmUiLCJhc0Zsb2F0IiwidGhhdCIsInpvbmVEZWx0YSIsIm1vbnRoRGlmZiIsIndob2xlTW9udGhEaWZmIiwiYW5jaG9yIiwidG9JU09TdHJpbmciLCJrZWVwT2Zmc2V0IiwidG9EYXRlIiwiaW5zcGVjdCIsImRhdGV0aW1lIiwic3VmZml4Iiwiem9uZSIsImlucHV0U3RyaW5nIiwiZGVmYXVsdEZvcm1hdFV0YyIsImRlZmF1bHRGb3JtYXQiLCJwb3N0Zm9ybWF0IiwiaHVtYW5pemUiLCJmcm9tTm93IiwidG9Ob3ciLCJuZXdMb2NhbGVEYXRhIiwiTVNfUEVSX1NFQ09ORCIsIk1TX1BFUl9NSU5VVEUiLCJNU19QRVJfSE9VUiIsIk1TX1BFUl80MDBfWUVBUlMiLCJtb2QkMSIsImRpdmlkZW5kIiwiZGl2aXNvciIsImxvY2FsU3RhcnRPZkRhdGUiLCJ1dGNTdGFydE9mRGF0ZSIsInN0YXJ0T2ZEYXRlIiwiaXNvV2Vla2RheSIsInVuaXgiLCJ0b09iamVjdCIsInRvSlNPTiIsImlzVmFsaWQkMiIsInBhcnNpbmdGbGFncyIsImludmFsaWRBdCIsImNyZWF0aW9uRGF0YSIsImxvY2FsZUVyYXMiLCJlcmFzIiwiX2VyYXMiLCJzaW5jZSIsInVudGlsIiwibG9jYWxlRXJhc1BhcnNlIiwiZXJhTmFtZSIsIm5hcnJvdyIsImxvY2FsZUVyYXNDb252ZXJ0WWVhciIsImRpciIsImdldEVyYU5hbWUiLCJnZXRFcmFOYXJyb3ciLCJnZXRFcmFBYmJyIiwiZ2V0RXJhWWVhciIsImVyYXNOYW1lUmVnZXgiLCJjb21wdXRlRXJhc1BhcnNlIiwiX2VyYXNOYW1lUmVnZXgiLCJfZXJhc1JlZ2V4IiwiZXJhc0FiYnJSZWdleCIsIl9lcmFzQWJiclJlZ2V4IiwiZXJhc05hcnJvd1JlZ2V4IiwiX2VyYXNOYXJyb3dSZWdleCIsIm1hdGNoRXJhQWJiciIsIm1hdGNoRXJhTmFtZSIsIm1hdGNoRXJhTmFycm93IiwibWF0Y2hFcmFZZWFyT3JkaW5hbCIsIl9lcmFZZWFyT3JkaW5hbFJlZ2V4IiwiYWJiclBpZWNlcyIsIm5hbWVQaWVjZXMiLCJuYXJyb3dQaWVjZXMiLCJhZGRXZWVrWWVhckZvcm1hdFRva2VuIiwiZ2V0dGVyIiwiZ2V0U2V0V2Vla1llYXIiLCJnZXRTZXRXZWVrWWVhckhlbHBlciIsImdldFNldElTT1dlZWtZZWFyIiwiZ2V0SVNPV2Vla3NJblllYXIiLCJnZXRJU09XZWVrc0luSVNPV2Vla1llYXIiLCJpc29XZWVrWWVhciIsImdldFdlZWtzSW5ZZWFyIiwid2Vla0luZm8iLCJnZXRXZWVrc0luV2Vla1llYXIiLCJ3ZWVrc1RhcmdldCIsInNldFdlZWtBbGwiLCJkYXlPZlllYXJEYXRhIiwiZ2V0U2V0UXVhcnRlciIsImVyYXNQYXJzZSIsImVyYVllYXJPcmRpbmFsUGFyc2UiLCJnZXRTZXREYXlPZk1vbnRoIiwiZ2V0U2V0RGF5T2ZZZWFyIiwiZ2V0U2V0TWludXRlIiwiZ2V0U2V0TWlsbGlzZWNvbmQiLCJnZXRTZXRTZWNvbmQiLCJwYXJzZU1zIiwiZ2V0Wm9uZUFiYnIiLCJnZXRab25lTmFtZSIsInByb3RvIiwiY3JlYXRlVW5peCIsImNyZWF0ZUluWm9uZSIsInBhcnNlWm9uZSIsInByZVBhcnNlUG9zdEZvcm1hdCIsImZvciIsImVyYU5hcnJvdyIsImVyYUFiYnIiLCJlcmFZZWFyIiwiaXNvV2Vla3MiLCJ3ZWVrc0luV2Vla1llYXIiLCJpc29XZWVrc0luWWVhciIsImlzb1dlZWtzSW5JU09XZWVrWWVhciIsImlzRFNUIiwiem9uZUFiYnIiLCJ6b25lTmFtZSIsImRhdGVzIiwiaXNEU1RTaGlmdGVkIiwicHJvdG8kMSIsImdldCQxIiwiaW5kZXgiLCJmaWVsZCIsInNldHRlciIsImxpc3RNb250aHNJbXBsIiwib3V0IiwibGlzdFdlZWtkYXlzSW1wbCIsImxvY2FsZVNvcnRlZCIsInNoaWZ0IiwibGlzdE1vbnRocyIsImxpc3RNb250aHNTaG9ydCIsImxpc3RXZWVrZGF5cyIsImxpc3RXZWVrZGF5c1Nob3J0IiwibGlzdFdlZWtkYXlzTWluIiwiZmlyc3REYXlPZlllYXIiLCJmaXJzdERheU9mV2VlayIsImxhbmdEYXRhIiwibWF0aEFicyIsImFkZFN1YnRyYWN0JDEiLCJhZGQkMSIsInN1YnRyYWN0JDEiLCJhYnNDZWlsIiwiYnViYmxlIiwibW9udGhzRnJvbURheXMiLCJtb250aHNUb0RheXMiLCJkYXlzVG9Nb250aHMiLCJhcyIsInZhbHVlT2YkMSIsIm1ha2VBcyIsImFsaWFzIiwiYXNNaWxsaXNlY29uZHMiLCJhc1NlY29uZHMiLCJhc01pbnV0ZXMiLCJhc0hvdXJzIiwiYXNEYXlzIiwiYXNXZWVrcyIsImFzTW9udGhzIiwiYXNRdWFydGVycyIsImFzWWVhcnMiLCJjbG9uZSQxIiwiZ2V0JDIiLCJtYWtlR2V0dGVyIiwidGhyZXNob2xkcyIsInN1YnN0aXR1dGVUaW1lQWdvIiwicmVsYXRpdmVUaW1lJDEiLCJwb3NOZWdEdXJhdGlvbiIsImdldFNldFJlbGF0aXZlVGltZVJvdW5kaW5nIiwicm91bmRpbmdGdW5jdGlvbiIsImdldFNldFJlbGF0aXZlVGltZVRocmVzaG9sZCIsInRocmVzaG9sZCIsImxpbWl0IiwiYXJnV2l0aFN1ZmZpeCIsImFyZ1RocmVzaG9sZHMiLCJ3aXRoU3VmZml4IiwidGgiLCJhYnMkMSIsInRvSVNPU3RyaW5nJDEiLCJ0b3RhbFNpZ24iLCJ5bVNpZ24iLCJkYXlzU2lnbiIsImhtc1NpZ24iLCJ0b3RhbCIsInByb3RvJDIiLCJ0b0lzb1N0cmluZyIsInZlcnNpb24iLCJyZWxhdGl2ZVRpbWVSb3VuZGluZyIsInJlbGF0aXZlVGltZVRocmVzaG9sZCIsIkhUTUw1X0ZNVCIsIkRBVEVUSU1FX0xPQ0FMIiwiREFURVRJTUVfTE9DQUxfU0VDT05EUyIsIkRBVEVUSU1FX0xPQ0FMX01TIiwiVElNRSIsIlRJTUVfU0VDT05EUyIsIlRJTUVfTVMiLCJmYWN0b3J5Iiwicm9vdCIsIm1vbWVudCIsImRlZmF1bHQiLCJjYWNoZWRHdWVzcyIsInpvbmVzIiwibGlua3MiLCJjb3VudHJpZXMiLCJndWVzc2VzIiwibG9nRXJyb3IiLCJtb21lbnRWZXJzaW9uIiwibWFqb3IiLCJtaW5vciIsImNoYXJDb2RlVG9JbnQiLCJjaGFyQ29kZSIsInVucGFja0Jhc2U2MCIsIndob2xlIiwiZnJhY3Rpb25hbCIsIm11bHRpcGxpZXIiLCJjaGFyQ29kZUF0IiwiYXJyYXlUb0ludCIsIm1hcEluZGljZXMiLCJpbmRpY2VzIiwidW5wYWNrIiwib2Zmc2V0cyIsInVudGlscyIsIkluZmluaXR5IiwiaW50VG9VbnRpbCIsImFiYnJzIiwicG9wdWxhdGlvbiIsIlpvbmUiLCJwYWNrZWRTdHJpbmciLCJfc2V0IiwiQ291bnRyeSIsImNvdW50cnlfbmFtZSIsInpvbmVfbmFtZXMiLCJPZmZzZXRBdCIsImF0IiwidGltZVN0cmluZyIsInRvVGltZVN0cmluZyIsIlpvbmVTY29yZSIsIm9mZnNldFNjb3JlIiwiYWJiclNjb3JlIiwiZmluZENoYW5nZSIsImxvdyIsImhpZ2giLCJtaWQiLCJzb3J0Wm9uZVNjb3JlcyIsImxvY2FsZUNvbXBhcmUiLCJhZGRUb0d1ZXNzZXMiLCJndWVzc2VzRm9yVXNlck9mZnNldHMiLCJndWVzc2VzT2Zmc2V0Iiwib2Zmc2V0c0xlbmd0aCIsImZpbHRlcmVkR3Vlc3NlcyIsInJlYnVpbGRHdWVzcyIsImludGxOYW1lIiwiSW50bCIsIkRhdGVUaW1lRm9ybWF0IiwicmVzb2x2ZWRPcHRpb25zIiwidGltZVpvbmUiLCJub3JtYWxpemVOYW1lIiwiem9uZVNjb3JlIiwiY2hhbmdlIiwic3RhcnRZZWFyIiwibGFzdCIsInVzZXJPZmZzZXRzIiwiem9uZVNjb3JlcyIsImdldFpvbmUiLCJzY29yZU9mZnNldEF0IiwiYWRkWm9uZSIsInBhY2tlZCIsIm5vcm1hbGl6ZWQiLCJjYWxsZXIiLCJsaW5rIiwiYWRkTGluayIsIm5vcm1hbDAiLCJub3JtYWwxIiwibmVlZHNPZmZzZXQiLCJpc1VuaXhUaW1lc3RhbXAiLCJtZXNzYWdlIiwidHoiLCJwYXJzZSIsInVucGFja2VkIiwiX2luZGV4IiwidGltZXN0YW1wIiwiem9uZV9uYW1lIiwiY291bnRyeV9jb2RlIiwib2Zmc2V0TmV4dCIsIm9mZnNldFByZXYiLCJtb3ZlQW1iaWd1b3VzRm9yd2FyZCIsIm1vdmVJbnZhbGlkRm9yd2FyZCIsIm9mZnNldEF0IiwiZGF0YVZlcnNpb24iLCJfem9uZXMiLCJfbGlua3MiLCJfbmFtZXMiLCJfY291bnRyaWVzIiwibG9hZCIsImNvdW50cnlfem9uZXMiLCJhZGRDb3VudHJpZXMiLCJ6b25lRXhpc3RzIiwiZGlkU2hvd0Vycm9yIiwiZ3Vlc3MiLCJpZ25vcmVDYWNoZSIsInpvbmVzRm9yQ291bnRyeSIsImNvdW50cnkiLCJ3aXRoX29mZnNldCIsIm9sZCIsImFiYnJXcmFwIiwiX3oiLCJyZXNldFpvbmVXcmFwIiwiZGVmYXVsdFpvbmUiLCJ6Iiwic2V0RGVmYXVsdCIsInJlcXVpcmUkJDAiLCJyZXF1aXJlJCQxIiwidHJhbnNsYXRpb25zIiwibnVtYmVyc1Bhc3QiLCJudW1iZXJzRnV0dXJlIiwidHJhbnNsYXRlIiwidmVyYmFsTnVtYmVyIiwibGwiLCJsbGwiLCJsbGxsIiwicHJvY2Vzc1JlbGF0aXZlVGltZSIsIm1vbnRoc1BhcnNlRXhhY3QiLCJ3ZWVrZGF5c1BhcnNlRXhhY3QiLCJkZSIsImFpcnBsYW5lIiwiYXJyaXZhbCIsImJhY2siLCJiaWtlcmVudGFsc3RhdGlvbiIsImJ1cyIsImNhbmNlbCIsImN1cnJlbnRwb3NpdGlvbiIsImRlcGFydHVyZSIsImZhdm91cml0ZSIsImZlcnJ5Iiwib3dubG9jYXRpb25zIiwibG9hZGluZyIsInJhaWwiLCJzdHJlZXQiLCJzdWJ3YXkiLCJzdGF0aW9uIiwidHJhbSIsInZlbnVlIiwid2hlcmUiLCJwbGFjZSIsImVuIiwiYmlrZXBhcmsiLCJjYXJwYXJrIiwicGxhdGZvcm0iLCJyZXF1aXJlZCIsInRyYWNrIiwiZmkiLCJzdiIsInN0eWxlSW5qZWN0IiwiY3NzIiwicmVmIiwiaW5zZXJ0QXQiLCJkb2N1bWVudCIsImhlYWQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInN0eWxlIiwiY3JlYXRlRWxlbWVudCIsImZpcnN0Q2hpbGQiLCJpbnNlcnRCZWZvcmUiLCJhcHBlbmRDaGlsZCIsInN0eWxlU2hlZXQiLCJjc3NUZXh0IiwiY3JlYXRlVGV4dE5vZGUiLCJBdXRvc3VnZ2VzdFBhdGNoIiwib25TdWdnZXN0aW9uVG91Y2hNb3ZlIiwianVzdFNlbGVjdGVkU3VnZ2VzdGlvbiIsInByZXNzZWRTdWdnZXN0aW9uIiwiQXV0b3N1Z2dlc3QiLCJNb2JpbGVTZWFyY2giLCJhcHBFbGVtZW50IiwiY2xvc2VIYW5kbGUiLCJjbGVhcklucHV0Iiwic3VnZ2VzdGlvbnMiLCJpbnB1dFByb3BzIiwiZmV0Y2hGdW5jdGlvbiIsInJlbmRlclN1Z2dlc3Rpb24iLCJnZXRTdWdnZXN0aW9uVmFsdWUiLCJhcmlhTGFiZWwiLCJvblN1Z2dlc3Rpb25TZWxlY3RlZCIsImNsZWFyT2xkU2VhcmNoZXMiLCJkaWFsb2dIZWFkZXJUZXh0IiwiZGlhbG9nUHJpbWFyeUJ1dHRvblRleHQiLCJkaWFsb2dTZWNvbmRhcnlCdXR0b25UZXh0IiwiY2xlYXJJbnB1dEJ1dHRvblRleHQiLCJmb2N1c0lucHV0IiwiY29sb3IiLCJob3ZlckNvbG9yIiwiYWNjZXNzaWJsZVByaW1hcnlDb2xvciIsInNlYXJjaE9wZW4iLCJmb250V2VpZ2h0cyIsInN0eWxlcyIsInNob3dTY3JvbGwiLCJtb2JpbGVTdHlsZXMiLCJtb2JpbGVOb1Njcm9sbFN0eWxlcyIsImlucHV0SWQiLCJ1c2VTdGF0ZSIsImlzRGlhbG9nT3BlbiIsInNldERpYWxvZ09wZW4iLCJpbnB1dFJlZiIsIlJlYWN0IiwidXNlUmVmIiwidXNlRWZmZWN0IiwiUmVhY3RNb2RhbCIsInNldEFwcEVsZW1lbnQiLCJvbkNsb3NlIiwidXNlQ2FsbGJhY2siLCJvblNlbGVjdCIsImlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudCIsImV2ZW50Iiwid2hpY2giLCJrZXlDb2RlIiwicHJldmVudERlZmF1bHQiLCJnZXRWYWx1ZSIsInJlbmRlckl0ZW0iLCJjbGFzc05hbWUiLCJfaW5wdXRSZWYkY3VycmVudCIsImZvY3VzIiwiaXNPcGVuIiwib3ZlcmxheUNsYXNzTmFtZSIsIm9uQWZ0ZXJDbG9zZSIsInNob3VsZENsb3NlT25Fc2MiLCJtZWRpdW0iLCJodG1sRm9yIiwib25DbGljayIsIm9uS2V5RG93biIsInRhYkluZGV4IiwiSWNvbiIsImltZyIsImFsd2F5c1JlbmRlclN1Z2dlc3Rpb25zIiwib25TdWdnZXN0aW9uc0ZldGNoUmVxdWVzdGVkIiwiZm9jdXNJbnB1dE9uU3VnZ2VzdGlvbkNsaWNrIiwic2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnMiLCJoYXNWYWx1ZSIsImF1dG9Gb2N1cyIsInJlbmRlcklucHV0Q29tcG9uZW50IiwidGhlbWUiLCJEaWFsb2dNb2RhbCIsImlzTW9kYWxPcGVuIiwiaGFuZGxlQ2xvc2UiLCJoZWFkZXJUZXh0IiwicHJpbWFyeUJ1dHRvblRleHQiLCJzZWNvbmRhcnlCdXR0b25UZXh0IiwicHJpbWFyeUJ1dHRvbk9uQ2xpY2siLCJzZWNvbmRhcnlCdXR0b25PbkNsaWNrIiwicHJvY2VzcyIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsImlzUmVxdWlyZWQiLCJzaGFwZSIsIm9uQ2hhbmdlIiwib25CbHVyIiwicGxhY2Vob2xkZXIiLCJfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3JlYWN0X18iLCJtb2R1bGVzIiwiaW5zdGFsbGVkTW9kdWxlcyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsInIiLCJ0b1N0cmluZ1RhZyIsIl9fZXNNb2R1bGUiLCJucyIsImJpbmQiLCJvYmplY3QiLCJfX2NyZWF0ZUJpbmRpbmciLCJrMiIsIl9fZXhwb3J0U3RhciIsInVzZUFycm93TmF2aWdhdGlvbiIsInJlYWN0XzEiLCJsaXN0SXRlbXMiLCJvbkFycm93VXBPckRvd24iLCJfYiIsInNlbGVjdGVkSW5kZXgiLCJzZXRTZWxlY3RlZEluZGV4Iiwic2V0U2VsZWN0ZWRJbmRleFdpdGhVc2VDYWxsYmFjayIsImhhbmRsZUtleURvd24iLCJrZXlib2FyZEV2ZW50Iiwid2luZG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJ1c2VJbnRlcnNlY3Rpb25PYnNlcnZlciIsIm9wdGlvbnMiLCJjb250YWluZXJSZWYiLCJpc1Zpc2libGUiLCJzZXRJc1Zpc2libGUiLCJoYW5kbGVJbnRlcnNlY3Rpb24iLCJlbnRyaWVzIiwiZW50cnkiLCJpc0ludGVyc2VjdGluZyIsIkludGVyc2VjdGlvbk9ic2VydmVyIiwib2JzZXJ2ZXJfMSIsImVsZW1lbnRfMSIsIm9ic2VydmUiLCJ1bm9ic2VydmUiLCJ1c2VJc0JyZWFrcG9pbnQiLCJicmVha3BvaW50cyIsInhzIiwibW9iaWxlU21hbGwiLCJtb2JpbGUiLCJ0YWJsZXQiLCJ0YWJsZXRMYXJnZSIsImRlc2t0b3BTbWFsbCIsImRlc2t0b3AiLCJkZXNrdG9wTGFyZ2UiLCJicmVha3BvaW50Iiwic2NyZWVuV2lkdGgiLCJzZXRTY3JlZW5XaWR0aCIsImhhbmRsZVJlc2l6ZSIsImlubmVyV2lkdGgiLCJwYXNzaXZlIiwidXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZU91dHNpZGVSZWFjdGVyIiwicmVhY3RlckZ1bmN0aW9uIiwiaGFuZGxlQ2xpY2tPdXRzaWRlIiwiY29udGFpbnMiLCJ1c2VTY3JvbGxMb2NrIiwibG9jayIsInNjcm9sbFkiLCJib2R5IiwidG9wIiwidW5sb2NrIiwicGFyc2VkU2Nyb2xsWSIsInNjcm9sbFRvIiwicmVhY3QiLCJpbml0IiwiZmFsbGJhY2tMbmciLCJkZWZhdWx0TlMiLCJpbnRlcnBvbGF0aW9uIiwiZXNjYXBlVmFsdWUiLCJub2RlIiwiZ2V0UGxhdGZvcm0iLCJHVEZTIiwibW9kZXMiLCJpMThuZXh0IiwiZ2V0U3VnZ2VzdGlvbkNvbnRlbnQiLCJzdWdnZXN0aW9uVHlwZSIsIl9pdGVtJHByb3BlcnRpZXMkYWRkZSIsInRhaWwxIiwidGFpbDIiLCJuYW1lMSIsIm5hbWUyIiwidHJhbnNsYXRlZFRleHQiLCJ0cmFuc2xhdGVGdXR1cmVSb3V0ZVN1Z2dlc3Rpb25UaW1lIiwiYXJyaXZlQnkiLCJEVEF1dG9zdWdnZXN0IiwiY29tcG9uZW50RGlkVXBkYXRlIiwiX3RoaXMiLCJjaGFuZ2VMYW5ndWFnZSIsIlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIiwibmV4dFByb3BzIiwic3RhdGUiLCJlZGl0aW5nIiwic2V0U3RhdGUiLCJuZXdWYWx1ZSIsIm5ld1N0YXRlIiwiZklucHV0IiwicmVuZGVyTW9iaWxlU2VhcmNoIiwiaXNNb2JpbGUiLCJ2YWxpZCIsInR5cGluZ1RpbWVyIiwiY2xlYXJUaW1lb3V0IiwidGltZXIiLCJzZXRUaW1lb3V0IiwidHlwaW5nIiwib25TZWxlY3RlZCIsIm93blBsYWNlcyIsInBlbmRpbmdTZWxlY3Rpb24iLCJzdWdnZXN0aW9uSW5kZXgiLCJzZWxlY3Rpb25Eb25lIiwic3VnZ2VzdGlvblZhbHVlIiwiYmx1ciIsImhhbmRsZVZpYVBvaW50cyIsImZvY3VzQ2hhbmdlIiwiaXNFbWJlZGRlZCIsImNsb3NlTW9iaWxlU2VhcmNoIiwicHJldlN0YXRlIiwiY2hlY2tQZW5kaW5nU2VsZWN0aW9uIiwib25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkIiwiZ2V0TGFiZWwiLCJjbGVhckJ1dHRvbiIsImNsZWFuRXhlY3V0ZWQiLCJpc0xvY2F0aW9uU2VhcmNoIiwiaXNFbXB0eSIsImV4ZWN1dGVTZWFyY2giLCJzZWFyY2hSZXN1bHQiLCJ0cmFuc2xhdGVkIiwib25DbGVhciIsImlucHV0Q2xpY2tlZCIsImlucHV0VmFsdWUiLCJzdGF0ZUtleURvd24iLCJzdG9yZUlucHV0UmVmZXJlbmNlIiwiYXV0b3N1Z2dlc3QiLCJzdG9yZVJlZiIsImZpbGxJbnB1dCIsImNvbnRlbnQiLCJTdWdnZXN0aW9uSXRlbSIsImFyaWFGYXZvdXJpdGVTdHJpbmciLCJnZXRBdXRvU3VnZ2VzdEljb25zIiwibW9kZUljb25Db2xvcnMiLCJtb2RlU2V0Iiwia2V5RG93biIsInN1Z2dlc3Rpb25Bc0FyaWFDb250ZW50IiwiZmlyc3RTdWdnZXN0aW9uIiwiU2V0IiwiY2xlYXJGdXR1cmVSb3V0ZXMiLCJpc09yaWdpbkRlc3RpbmF0aW9uT3JWaWFwb2ludCIsIm9uRm9jdXMiLCJwYWdlWU9mZnNldCIsImFkZFJlc291cmNlQnVuZGxlIiwibmV4dFN0YXRlIiwidHJhbnNsYXRlZFBsYWNlaG9sZGVyIiwidGhpbiIsImlucHV0Q2xhc3NOYW1lIiwiYXJpYUJhcklkIiwiU2VhcmNoQmFySWQiLCJhcmlhUmVxdWlyZWRUZXh0IiwiYXJpYUxhYmVsVGV4dCIsImFyaWFTdWdnZXN0aW9uTGVuIiwiY291bnQiLCJhcmlhQ3VycmVudFN1Z2dlc3Rpb24iLCJfdGhpczIiLCJzZWxlY3Rpb24iLCJGcmFnbWVudCIsInJvbGUiLCJtb2JpbGVMYWJlbCIsImN4IiwiaWNvbiIsImhpZ2hsaWdodEZpcnN0U3VnZ2VzdGlvbiIsIkNvbXBvbmVudCIsImRlZmF1bHRQcm9wcyIsInJvdXRlc1ByZWZpeCIsInN0b3BzUHJlZml4IiwiYW55IiwiYXJyYXlPZiIsIkRUQXV0b3N1Z2dlc3RXaXRoU2Nyb2xsTG9jayJdLCJtYXBwaW5ncyI6Imt6REFBZSxTQUFTQSxFQUFRQyxHQWE5QixPQVRFRCxFQURvQixtQkFBWEUsUUFBb0QsaUJBQXBCQSxPQUFPQyxTQUN0QyxTQUFpQkYsR0FDekIsY0FBY0EsR0FHTixTQUFpQkEsR0FDekIsT0FBT0EsR0FBeUIsbUJBQVhDLFFBQXlCRCxFQUFJRyxjQUFnQkYsUUFBVUQsSUFBUUMsT0FBT0csVUFBWSxnQkFBa0JKLEdBSXRIRCxFQUFRQyxHQ2JGLFNBQVNLLElBZXRCLE9BZEFBLEVBQVdDLE9BQU9DLFFBQVUsU0FBVUMsR0FDcEMsSUFBSyxJQUFJQyxFQUFJLEVBQUdBLEVBQUlDLFVBQVVDLE9BQVFGLElBQUssQ0FDekMsSUFBSUcsRUFBU0YsVUFBVUQsR0FFdkIsSUFBSyxJQUFJSSxLQUFPRCxFQUNWTixPQUFPRixVQUFVVSxlQUFlQyxLQUFLSCxFQUFRQyxLQUMvQ0wsRUFBT0ssR0FBT0QsRUFBT0MsSUFLM0IsT0FBT0wsR0FHRkgsRUFBU1csTUFBTUMsS0FBTVAsV0NmZixTQUFTUSxFQUFrQkMsRUFBS0MsSUFDbEMsTUFBUEEsR0FBZUEsRUFBTUQsRUFBSVIsVUFBUVMsRUFBTUQsRUFBSVIsUUFFL0MsSUFBSyxJQUFJRixFQUFJLEVBQUdZLEVBQU8sSUFBSUMsTUFBTUYsR0FBTVgsRUFBSVcsRUFBS1gsSUFDOUNZLEVBQUtaLEdBQUtVLEVBQUlWLEdBR2hCLE9BQU9ZLEVDTk0sU0FBU0UsRUFBNEJDLEVBQUdDLEdBQ3JELEdBQUtELEVBQUwsQ0FDQSxHQUFpQixpQkFBTkEsRUFBZ0IsT0FBT0UsRUFBaUJGLEVBQUdDLEdBQ3RELElBQUlFLEVBQUlyQixPQUFP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
|
|
13
|
+
function c(e,c,n,o){var t={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],w:["eine Woche","einer Woche"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return c?t[n][0]:t[n][1]}return e.defineLocale("de",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:c,mm:"%d Minuten",h:c,hh:"%d Stunden",d:c,dd:c,w:c,ww:"%d Wochen",M:c,MM:c,y:c,yy:c},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})},n(Se)})),{de:{address:"Adresse","address-place-or-business":"Adress, Ort or Geschäft","add-via-button-label":"Füge Zwischenziel hinzu","add-via-duration-button-label":"Set stop duration at via point {{index}}","add-via-duration-button-label-close":"Close stop duration selector at via point {{index}}","add-via-duration-button-label-open":"Open stop duration selector at via point {{index}}",airplane:"Flug",arrival:"Ankunft",back:"Zurück",bikerentalstation:"Leihrad-Station",bus:"Bus",cancel:"Abbrechen","clear-button-label":"Löschen","clear-search-history":"Suchhistorie löschen",currentposition:"Aktuelle Position",delete:"Löschen","delete-old-searches-header":"Wollen Sie die Such-Historie löschen?",departure:"Abfahrt",destination:"Ziel","give-origin":"Start eingeben.","give-destination":"Ziel eingeben.",favourite:"Favoriten",ferry:"Fähre","future-route":"Zukünftige Verbindung",origin:"Start","origin-stop-near-you":"Start",ownlocations:"Eigene Favoriten",loading:"Laden...","minute-short":"min",rail:"Zug",search:"Suche","search-address-or-place":"Suche anhand von Adresse oder Ortsangabe","search-button-label":"Suche","search-destination":"Suche Zielort, Linie or Haltestelle","search-destination-index":"Zielort eingeben","search-destination-results-but-no-search":"Ergebnisse in “Zielort”-Reiter anzeigen","search-no-results":"Kein Ort gefunden.","search-origin":"Suche Startort, Linie oder Haltestelle","search-origin-index":"Startort eingeben","search-position":"Standort ermitteln","search-autosuggest-label-desktop":"Venue, place and stopsearch. Navigate list with arrow keys and select with enter key","search-autosuggest-label-mobile":"Venue, place and stopsearch.","search-autosuggest-len":"There is {{count}} suggestion available","search-autosuggest-len_plural":"There are {{count}} suggestions available","search-current-suggestion":"Aktuelle Auswahl: {{selection}}",street:"Straße",subway:"U-Bahn",station:"Station",stop:"Haltestelle","stop-near-you":"Suche Haltestellen und Linien in der Nähe","stop-near-you-bus":"Suche Buslinien or Haltestellen","stop-near-you-citybike":"Suche Leihrad-Stationen","stop-near-you-rail":"Suche Zugverbindungen oder Bahnhöfe","stop-near-you-subway":"Suche U-Bahn-Linien oder Haltestellen","stop-near-you-tram":"Suche Stadtbahn-Haltestellen-Suche","today-at":"Heute um","tomorrow-at":"Morgen um",tram:"Straßenbahn","use-own-position":"Benutze aktuellen Standort","select-from-map":"Wähle Position anhand Karte","select-from-own-locations":"Aus eigenen Favoriten auswählen",venue:"Venue","via-point":"Zwischenziel",where:"Wohin?",place:"Ort"},en:{address:"Address","address-place-or-business":"Address, place or business","add-via-button-label":"Add via point","add-via-duration-button-label":"Set stop duration at via point {{index}}","add-via-duration-button-label-close":"Close stop duration selector at via point {{index}}","add-via-duration-button-label-open":"Open stop duration selector at via point {{index}}",airplane:"Flight",arrival:"Arrival",back:"Back",bikepark:"Park & Ride for bikes",bikerentalstation:"Bike station",bus:"bus",cancel:"Cancel",carpark:"Park & Ride","clear-button-label":"Clear","clear-search-history":"Clear search history",currentposition:"Current position",delete:"Delete","delete-old-searches-header":"Do you want to clear the search history?",departure:"Departure",destination:"Destination","give-origin":"Enter your origin.","give-destination":"Enter your destination",favourite:"Favourite",ferry:"Ferry","future-route":"Future route",origin:"Start","origin-stop-near-you":"Start",ownlocations:"Own locations",loading:"Loading...","minute-short":"m",platform:"Platform",rail:"Train",required:"required field",search:"Search","search-address-or-place":"Search by address or place name","search-button-label":"Search","search-destination":"Search destination, route or stop","search-destination-index":"Enter destination","search-destination-results-but-no-search":"View results in the adjacent “Destination” tab","search-no-results":"No location","search-origin":"Search origin, route or stop","search-origin-index":"Enter origin","search-position":"Detect location","search-autosuggest-label-desktop":"Venue, place and stopsearch. Navigate list with arrow keys and select with enter key","search-autosuggest-label-mobile":"Venue, place and stopsearch. Enter the location and navigate in the list by swiping.","search-autosuggest-len":"There is {{count}} suggestion available","search-autosuggest-len_plural":"There are {{count}} suggestions available","search-current-suggestion":"Current selection: {{selection}}",street:"Street",subway:"Metro",station:"Station",stop:"Stop","stop-near-you":"Search stops and routes","stop-near-you-airplane":"Search flights or airports","stop-near-you-bus":"Search bus routes or stops","stop-near-you-citybike":"Search city bike stations","stop-near-you-rail":"Search train routes or stations","stop-near-you-subway":"Search metro routes or stations ","stop-near-you-tram":"Search tram routes or stops","stop-route-station":"Bus and stop search","today-at":"today at","tomorrow-at":"tomorrow at",tram:"Tram",track:"Track","use-own-position":"Use current location","select-from-map":"Select position from map","select-from-own-locations":"Select from own locations",venue:"Venue","via-point":"Via point",where:"Where to?",place:"Location"},fi:{address:"Osoite","address-place-or-business":"Osoite, paikka tai yritys","add-via-button-label":"Lisää välipiste","add-via-duration-button-label":"Aseta välipisteelle {{index}} pysähdyksen kesto","add-via-duration-button-label-close":"Avaa välipisteen {{index}} pysähdyksen kesto valitsin","add-via-duration-button-label-open":"Sulje välipisteen {{index}} pysähdyksen kesto valitsin",airplane:"Lentokone",arrival:"Perillä",back:"Takaisin",bikerentalstation:"Pyöräasema",bikepark:"Liityntäpyöräparkki",bus:"bussi",cancel:"Peruuta",carpark:"Liityntäpysäkointi","clear-button-label":"Tyhjennä","clear-search-history":"Tyhjennä hakuhistoria",currentposition:"Tämänhetkinen sijainti",delete:"Poista","delete-old-searches-header":"Haluatko tyhjentää hakuhistorian?",departure:"Lähtöaika",destination:"Määränpää",favourite:"Suosikki",ferry:"Lautta","future-route":"Tuleva reitti","give-origin":"Lähtöpaikka","give-destination":"Määränpää",origin:"Lähtöpaikka","origin-stop-near-you":"Lähtöpaikka",ownlocations:"Omat paikat",loading:"Ladataan...","minute-short":"min",platform:"Laituri",rail:"Juna",required:"pakollinen kenttä",search:"Etsi","search-address-or-place":"Hae osoitteella tai paikan nimellä","search-button-label":"Hae","search-destination":"Hae määränpäätä, linjaa tai pysäkkiä","search-destination-index":"Syötä määränpää","search-destination-results-but-no-search":"Katso tulokset viereiseltä Määränpää-välilehdeltä","search-no-results":"Ei tuloksia","search-origin":"Hae lähtöpaikkaa, linjaa tai pysäkkiä","search-origin-index":"Syötä lähtöpaikka","search-autosuggest-label-desktop":"Paikka, linja ja pysäkkihaku. Navigoi listassa nuolinäppäimillä ja valitse enterillä","search-autosuggest-label-mobile":"Paikka, linja ja pysäkkihaku. Syötä sijainti ja navigoi listassa pyyhkäisemällä.","search-autosuggest-len":" Löydettiin {{count}} ehdotus","search-autosuggest-len_plural":" Löydettiin {{count}} ehdotusta","search-current-suggestion":"Tämänhetkinen valinta: {{selection}}","search-position":"Paikanna",street:"Katu",subway:"Metro",station:"Asema",stop:"Pysäkki","stop-near-you":"Linja, pysäkki tai asema","stop-near-you-airplane":"Hae lentoja tai lentoasemaa","stop-near-you-bus":"Hae bussilinjaa tai pysäkkiä","stop-near-you-citybike":"Hae kaupunkipyöräasemaa","stop-near-you-rail":"Hae lähijunaa tai asemaa","stop-near-you-subway":"Hae metrolinjaa tai asemaa","stop-near-you-tram":"Hae raitiolinjaa tai pysäkkiä","stop-route-station":"Linja- ja pysäkkihaku","today-at":"tänään klo","tomorrow-at":"huomenna klo",tram:"Raitiovaunu",track:"Raide","use-own-position":"Käytä nykyistä sijaintia","select-from-map":"Valitse sijainti kartalta","select-from-own-locations":"Valitse omista paikoista",venue:"Paikka","via-point":"Välipiste",where:"Minne mennään?",place:"Paikka"},sv:{address:"Adress","address-place-or-business":"Adress, plats eller företag","add-via-button-label":"Lägg till viapunkt","add-via-duration-button-label":"Ställ in varaktighet för viapunkten {{index}}","add-via-duration-button-label-close":"Stäng väljaren för varaktighet vid via-punkten {{index}}","add-via-duration-button-label-open":"Öppna väljaren för varaktighet vid via-punkten {{index}}",airplane:"Flyg",arrival:"Anländer",back:"Tillbaka",bikerentalstation:"Stadscykelstation",bikepark:"Anslutningsparkering för cyklar",bus:"Bussi",cancel:"Avbryt",carpark:"Infartsparkering","clear-button-label":"Töm","clear-search-history":"Töm sökhistoriken",currentposition:"Nuvarande position",delete:"Ta bort","delete-old-searches-header":"Vill du tömma sökhistoriken?",departure:"Avgångstid",destination:"Destination",favourite:"Favorit",ferry:"Färja","future-route":"Framtida rutt","give-destination":"Skriv in din destination","give-origin":"Skriv in din avfärdsplats",origin:"Avfärdsplats","origin-stop-near-you":"Avfärdsplats",ownlocations:"Egna platser",loading:"Laddar...","minute-short":"min",platform:"Plattform",rail:"Tåg",required:"obligatoriskt fält",search:"Sök","search-address-or-place":"Sök med adressen eller platsens namn","search-button-label":"Sök","search-destination":"Sök destination, linje eller hållplats","search-destination-index":"Skriv destination","search-destination-results-but-no-search":"Se resultaten under fliken Destination","search-no-results":"Inga sökresultat","search-origin":"Sök avfärdsplats, linje eller hållplats","search-origin-index":"Skriv avfärdsplats","search-position":"Sök position","search-autosuggest-label-desktop":"Plats, linje och hållplatssökning. Navigera listan med piltangenterna och välj med Enter-tangeten","search-autosuggest-label-mobile":"Plats, linje och hållplatssökning. Ange platsen och navigera i listan genom att svepa.","search-autosuggest-len":"Hittade {{count}} förslag","search-current-suggestion":"Nuvarande val: {{selection}}",street:"Gata",subway:"Metro",station:"Station",stop:"Hållplats","stop-near-you":"Sök hållplatser eller linjer","stop-near-you-airplane":"Sök flyg eller flygplatser","stop-near-you-bus":"Sök busslinjer eller hållplatser","stop-near-you-citybike":"Sök stadscykelstationer","stop-near-you-rail":"Sök närtåger eller stationer","stop-near-you-subway":"Sök metrolinjer eller stationer","stop-near-you-tram":"Sök spårvagnlinjer eller hållplatser","stop-route-station":"Buss och stopp sökningen","today-at":"i dag kl","tomorrow-at":"i morgon",tram:"Spårvagn",track:"Spår","use-own-position":"Använd min position","select-from-map":"Välj position från kartan","select-from-own-locations":"Välj från egna platser",venue:"Mötesplats","via-point":"Via punkt",where:"Vart vill du åka?",place:"Plats"}});function Ie(e,c){void 0===c&&(c={});var n=c.insertAt;if(e&&"undefined"!=typeof document){var o=document.head||document.getElementsByTagName("head")[0],t=document.createElement("style");t.type="text/css","top"===n&&o.firstChild?o.insertBefore(t,o.firstChild):o.appendChild(t),t.styleSheet?t.styleSheet.cssText=e:t.appendChild(document.createTextNode(e))}}var He={container:"styles_container__KXfyb",input:"styles_input__XmNBn",favourite:"styles_favourite__sjGcX",thin:"styles_thin__y3lnY",hasValue:"styles_hasValue__tzCTr",suggestionsContainerOpen:"styles_suggestionsContainerOpen__4AZDX",suggestionsContainer:"styles_suggestionsContainer__3dsEd",suggestionsList:"styles_suggestionsList__esTtR",suggestion:"styles_suggestion__7itfO",suggestionHighlighted:"styles_suggestionHighlighted__XUxvC","autosuggest-input-container":"styles_autosuggest-input-container__ZkKGO",origin:"styles_origin__ivlHi",destination:"styles_destination__y39VH","stop-route-station":"styles_stop-route-station__FneXd","autosuggest-input-icon":"styles_autosuggest-input-icon__uhYGQ","origin-stop-near-you":"styles_origin-stop-near-you__Ekwp-","clear-input":"styles_clear-input__Vx7B4","sr-only":"styles_sr-only__ZOrQT"};Ie("/* stylelint-disable */\ninput[type='text'] {\n margin: 0; }\n\n.styles_container__KXfyb {\n display: flex;\n width: 100%; }\n .styles_container__KXfyb .styles_input__XmNBn {\n font-size: 16px;\n font-family: 'Gotham Rounded A', 'Gotham Rounded B', 'Roboto', Arial, Georgia, Serif;\n display: flex;\n width: 100%;\n height: 44px;\n border-radius: 5px;\n border: solid 1px #888888;\n background-color: #ffffff;\n padding-left: 50px;\n padding-right: 44px;\n line-height: 1.2;\n letter-spacing: -0.5px;\n color: #333;\n box-sizing: border-box;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none; }\n .styles_container__KXfyb .styles_input__XmNBn.styles_favourite__sjGcX {\n padding-left: 47px; }\n .styles_container__KXfyb .styles_input__XmNBn.styles_thin__y3lnY {\n height: 34px; }\n .styles_container__KXfyb .styles_input__XmNBn:focus {\n background: #fff;\n outline: none;\n border: solid 1px var(--color);\n box-shadow: none;\n box-shadow: 0px 0px 2px 1px var(--hover-color); }\n @media screen and (min-width: 768px) {\n .styles_container__KXfyb .styles_input__XmNBn {\n font-size: 15px;\n height: 44px;\n padding-left: 49px; } }\n .styles_container__KXfyb .styles_input__XmNBn::placeholder {\n color: #666666;\n opacity: 1;\n font-size: 15px; }\n\n.styles_hasValue__tzCTr {\n color: #333333; }\n\n.styles_suggestionsContainerOpen__4AZDX {\n width: 100%;\n max-height: 44vh;\n border-radius: 5px;\n box-shadow: 0 2px 0 0 rgba(0, 0, 0, 0.06);\n border: solid 1px rgba(0, 0, 0, 0.1);\n overflow-x: hidden;\n overflow-y: scroll;\n position: absolute;\n background-color: white;\n top: calc(3 * 0.875rem + 9px);\n z-index: 20; }\n\n.styles_suggestionsContainer__3dsEd {\n background-color: white;\n z-index: 20; }\n .styles_suggestionsContainer__3dsEd .styles_suggestionsList__esTtR {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n background: white; }\n .styles_suggestionsContainer__3dsEd .styles_suggestionsList__esTtR li:hover {\n background: #F4F4F5; }\n\n.styles_suggestion__7itfO {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n cursor: pointer;\n list-style: none;\n display: block;\n overflow-x: hidden;\n overflow-y: hidden;\n white-space: nowrap; }\n\n.styles_suggestionHighlighted__XUxvC {\n background-color: #F4F4F5; }\n\n.styles_autosuggest-input-container__ZkKGO {\n position: relative;\n width: 100%; }\n .styles_autosuggest-input-container__ZkKGO.styles_origin__ivlHi {\n z-index: 16; }\n .styles_autosuggest-input-container__ZkKGO.styles_destination__y39VH {\n z-index: 10; }\n .styles_autosuggest-input-container__ZkKGO.styles_stop-route-station__FneXd {\n z-index: 9; }\n\n.styles_autosuggest-input-icon__uhYGQ {\n display: flex;\n position: absolute;\n align-items: center;\n width: 16px;\n height: 100%;\n margin-top: 0;\n margin-left: 19px; }\n .styles_autosuggest-input-icon__uhYGQ svg {\n width: 16px;\n height: 24px; }\n .styles_autosuggest-input-icon__uhYGQ.styles_origin__ivlHi svg {\n fill: #4ea700;\n width: 16px;\n height: 24px; }\n .styles_autosuggest-input-icon__uhYGQ.styles_destination__y39VH svg {\n fill: #ec5188;\n width: 16px;\n height: 24px; }\n .styles_autosuggest-input-icon__uhYGQ.styles_stop-route-station__FneXd svg, .styles_autosuggest-input-icon__uhYGQ.styles_favourite__sjGcX svg {\n fill: #888888;\n width: 16px;\n height: 16px; }\n .styles_autosuggest-input-icon__uhYGQ.styles_origin-stop-near-you__Ekwp- svg {\n fill: #888888;\n width: 16px;\n height: 16px; }\n\nbutton.styles_clear-input__Vx7B4 {\n display: flex;\n position: absolute;\n padding: 14px 0;\n right: 0px;\n width: 44px;\n height: 100%;\n color: var(--color);\n outline: none;\n border: 0px;\n margin: 0px;\n justify-content: center;\n text-align: left;\n background: none;\n border-style: none;\n border-width: 0px;\n cursor: pointer;\n font-family: inherit;\n background-color: transparent;\n transition: none; }\n button.styles_clear-input__Vx7B4 svg {\n fill: var(--color);\n width: 16px;\n height: 16px; }\n button.styles_clear-input__Vx7B4:focus {\n background-color: transparent;\n color: inherit;\n /* First apply outline that is used in Edge and Firefox */\n outline: 1px dotted #212121;\n /* Then override outline for webkit browsers like Chrome, this has no effect on other browsers */\n outline: 5px auto -webkit-focus-ring-color; }\n button.styles_clear-input__Vx7B4:active {\n background-color: transparent;\n color: inherit; }\n button.styles_clear-input__Vx7B4:hover {\n background-color: transparent;\n color: inherit; }\n\n.styles_sr-only__ZOrQT:not(:focus):not(:active) {\n clip: rect(0 0 0 0);\n -webkit-clip-path: inset(50%);\n clip-path: inset(50%);\n height: 1px;\n overflow: hidden;\n position: absolute;\n white-space: nowrap;\n width: 1px; }\n");var Ye={"fullscreen-root":"MobileSearch_fullscreen-root__WkMna","combobox-container":"MobileSearch_combobox-container__sRkYS","right-column":"MobileSearch_right-column__erBFe","combobox-icon":"MobileSearch_combobox-icon__xd0iZ","combobox-label":"MobileSearch_combobox-label__OqGpe",container:"MobileSearch_container__k-UVq",input:"MobileSearch_input__HbTUj","clear-input":"MobileSearch_clear-input__ILVwN",hasValue:"MobileSearch_hasValue__NYhZy",suggestion:"MobileSearch_suggestion__UBz5O",suggestionHighlighted:"MobileSearch_suggestionHighlighted__7ef5G",suggestionsContainerOpen:"MobileSearch_suggestionsContainerOpen__g7zkI",suggestionsList:"MobileSearch_suggestionsList__3pEzf","clear-search-history":"MobileSearch_clear-search-history__wblhz","mobile-modal-overlay":"MobileSearch_mobile-modal-overlay__f6Rl7","mobile-modal":"MobileSearch_mobile-modal__hNdM6","mobile-modal-content":"MobileSearch_mobile-modal-content__Yzz-V"};Ie("input[type='text'] {\n margin: 0;\n padding: 0; }\n\n.MobileSearch_fullscreen-root__WkMna {\n display: flex;\n flex-direction: column;\n position: fixed;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n background: #fff;\n z-index: 1000; }\n\n.MobileSearch_combobox-container__sRkYS {\n margin: 15px 10px 0;\n border: solid #888888 1px;\n display: flex;\n align-items: center;\n border-radius: 5px;\n height: 60px;\n justify-content: space-between; }\n .MobileSearch_combobox-container__sRkYS .MobileSearch_right-column__erBFe {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n padding-top: 9px; }\n\n.MobileSearch_combobox-icon__xd0iZ {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 52px;\n border: 0;\n background: none; }\n .MobileSearch_combobox-icon__xd0iZ svg {\n fill: #007ac9;\n width: 14px;\n height: 21px;\n transform: rotate(-180deg); }\n\n.MobileSearch_combobox-label__OqGpe {\n position: relative;\n top: -2px;\n font-size: 12px;\n font-weight: var(--font-weight-medium);\n letter-spacing: -0.2px;\n color: #333333; }\n\n.MobileSearch_container__k-UVq {\n display: flex;\n align-items: center;\n width: 100%; }\n .MobileSearch_container__k-UVq .MobileSearch_input__HbTUj {\n font-family: 'Gotham Rounded A', 'Gotham Rounded B', 'Roboto', Arial, Georgia, Serif;\n width: 100%;\n position: relative;\n padding-bottom: 7px;\n top: 2px;\n border: none;\n height: 26px;\n font-weight: normal;\n box-shadow: none;\n font-size: 16px;\n letter-spacing: -0.5px;\n color: #666666;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none; }\n .MobileSearch_container__k-UVq .MobileSearch_input__HbTUj:focus {\n outline: none;\n border: none;\n box-shadow: none;\n background: #fff; }\n\nbutton.MobileSearch_clear-input__ILVwN {\n display: flex;\n align-items: center;\n right: 0px;\n padding: 0 15px 7px 0;\n height: 26px;\n color: var(--color);\n border: 0px;\n margin: 0px;\n justify-content: center;\n text-align: left;\n background: none;\n border-style: none;\n border-width: 0px;\n cursor: pointer;\n font-family: inherit;\n background-color: transparent;\n transition: none; }\n button.MobileSearch_clear-input__ILVwN svg {\n fill: var(--color);\n width: 16px;\n height: 16px; }\n button.MobileSearch_clear-input__ILVwN:focus {\n background-color: transparent;\n color: inherit; }\n button.MobileSearch_clear-input__ILVwN:active {\n background-color: transparent;\n color: inherit; }\n button.MobileSearch_clear-input__ILVwN:hover {\n background-color: transparent;\n color: inherit; }\n\n.MobileSearch_hasValue__NYhZy {\n color: #333333; }\n\n.MobileSearch_suggestion__UBz5O {\n font-size: 15px;\n min-height: 50px;\n letter-spacing: -0.6px;\n color: #333333;\n font-weight: 500;\n background: #fff;\n margin: 0;\n padding: 0; }\n\n.MobileSearch_suggestionHighlighted__7ef5G {\n background-color: #F4F4F5; }\n\n.MobileSearch_suggestionsContainerOpen__g7zkI {\n display: flex;\n position: absolute;\n margin-bottom: auto;\n z-index: 20;\n width: 100vw;\n max-height: calc(100% - 75px);\n height: 100%;\n top: 75px;\n left: 0;\n overflow-x: hidden;\n overflow-y: scroll; }\n .MobileSearch_suggestionsContainerOpen__g7zkI .MobileSearch_suggestionsList__3pEzf {\n width: 100vw;\n list-style: none;\n padding-left: 0;\n margin: 0;\n background: #f4f4f5; }\n\n.MobileSearch_clear-search-history__wblhz {\n display: flex;\n font-family: 'Gotham Rounded A', 'Gotham Rounded B', 'Roboto', Arial, Georgia, Serif;\n margin-top: auto;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 62px;\n background: #f4f4f5;\n color: var(--accessible-primary-color);\n font-size: 15px;\n font-weight: var(--font-weight-medium);\n letter-spacing: -0.42px;\n border: none;\n border-top: 1px solid #ddd; }\n\n.MobileSearch_mobile-modal-overlay__f6Rl7 {\n z-index: 9999;\n top: 0;\n left: 0;\n right: unset;\n bottom: unset;\n margin: 0;\n padding: 0;\n width: 100%;\n height: 100%;\n background-color: white;\n position: fixed; }\n\n.MobileSearch_mobile-modal__hNdM6 {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n /* stylelint-disable-next-line */\n /* stylelint-disable-next-line */ }\n .MobileSearch_mobile-modal__hNdM6.ReactModal__Content--after-open > div {\n transform: translateY(0); }\n .MobileSearch_mobile-modal__hNdM6.ReactModal__Content--before-close > div {\n transform: translateY(10%); }\n\n.MobileSearch_mobile-modal-content__Yzz-V {\n position: fixed;\n width: 100%;\n height: 100%;\n outline: none;\n background-color: #ffffff;\n transition: transform 0.25s;\n transform: translateY(10%); }\n");var Fe={"fullscreen-root":"MobileNoScroll_fullscreen-root__zQN50","combobox-container":"MobileNoScroll_combobox-container__RDEiT","right-column":"MobileNoScroll_right-column__0P3qe","combobox-icon":"MobileNoScroll_combobox-icon__LA0rD","combobox-label":"MobileNoScroll_combobox-label__-rYsj",container:"MobileNoScroll_container__CaIIv",input:"MobileNoScroll_input__Opft5","clear-input":"MobileNoScroll_clear-input__-4SQO",hasValue:"MobileNoScroll_hasValue__jR1iW",suggestion:"MobileNoScroll_suggestion__NAWcY",suggestionHighlighted:"MobileNoScroll_suggestionHighlighted__V0GuG",suggestionsContainerOpen:"MobileNoScroll_suggestionsContainerOpen__MRa5Y",suggestionsList:"MobileNoScroll_suggestionsList__NUpJE","clear-search-history":"MobileNoScroll_clear-search-history__Cjj-1","mobile-modal-overlay":"MobileNoScroll_mobile-modal-overlay__LbLie","mobile-modal":"MobileNoScroll_mobile-modal__-Rx-A","mobile-modal-content":"MobileNoScroll_mobile-modal-content__nfrCI"};function je(e){var c=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,o=ne(e);if(c){var t=ne(this).constructor;n=Reflect.construct(o,arguments,t)}else n=o.apply(this,arguments);return ce(this,n)}}Ie("input[type='text'] {\n margin: 0;\n padding: 0; }\n\n.MobileNoScroll_fullscreen-root__zQN50 {\n display: flex;\n flex-direction: column;\n position: fixed;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n background: #fff;\n z-index: 1000; }\n\n.MobileNoScroll_combobox-container__RDEiT {\n margin: 15px 10px 0;\n border: solid #888888 1px;\n display: flex;\n align-items: center;\n border-radius: 5px;\n height: 60px;\n justify-content: space-between; }\n .MobileNoScroll_combobox-container__RDEiT .MobileNoScroll_right-column__0P3qe {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n padding-top: 9px; }\n\n.MobileNoScroll_combobox-icon__LA0rD {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 52px;\n border: 0;\n background: none; }\n .MobileNoScroll_combobox-icon__LA0rD svg {\n fill: #007ac9;\n width: 14px;\n height: 21px;\n transform: rotate(-180deg); }\n\n.MobileNoScroll_combobox-label__-rYsj {\n position: relative;\n top: -2px;\n font-size: 12px;\n font-weight: var(--font-weight-medium);\n letter-spacing: -0.2px;\n color: #333333; }\n\n.MobileNoScroll_container__CaIIv {\n display: flex;\n align-items: center;\n width: 100%; }\n .MobileNoScroll_container__CaIIv .MobileNoScroll_input__Opft5 {\n font-family: 'Gotham Rounded A', 'Gotham Rounded B', 'Roboto', Arial, Georgia, Serif;\n width: 100%;\n position: relative;\n padding-bottom: 7px;\n top: 2px;\n border: none;\n height: 26px;\n font-weight: normal;\n box-shadow: none;\n font-size: 16px;\n letter-spacing: -0.5px;\n color: #666666;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none; }\n .MobileNoScroll_container__CaIIv .MobileNoScroll_input__Opft5:focus {\n outline: none;\n border: none;\n box-shadow: none;\n background: #fff; }\n\nbutton.MobileNoScroll_clear-input__-4SQO {\n display: flex;\n align-items: center;\n right: 0px;\n padding: 0 15px 7px 0;\n height: 26px;\n color: var(--color);\n border: 0px;\n margin: 0px;\n justify-content: center;\n text-align: left;\n background: none;\n border-style: none;\n border-width: 0px;\n cursor: pointer;\n font-family: inherit;\n background-color: transparent;\n transition: none; }\n button.MobileNoScroll_clear-input__-4SQO svg {\n fill: var(--color);\n width: 16px;\n height: 16px; }\n button.MobileNoScroll_clear-input__-4SQO:focus {\n background-color: transparent;\n color: inherit; }\n button.MobileNoScroll_clear-input__-4SQO:active {\n background-color: transparent;\n color: inherit; }\n button.MobileNoScroll_clear-input__-4SQO:hover {\n background-color: transparent;\n color: inherit; }\n\n.MobileNoScroll_hasValue__jR1iW {\n color: #333333; }\n\n.MobileNoScroll_suggestion__NAWcY {\n font-size: 15px;\n min-height: 50px;\n letter-spacing: -0.6px;\n color: #333333;\n font-weight: 500;\n background: #fff;\n margin: 0;\n padding: 0; }\n\n.MobileNoScroll_suggestionHighlighted__V0GuG {\n background-color: #F4F4F5; }\n\n.MobileNoScroll_suggestionsContainerOpen__MRa5Y {\n display: flex;\n position: absolute;\n margin-bottom: auto;\n z-index: 20;\n width: 100vw;\n max-height: calc(100% - 75px);\n height: 100%;\n top: 75px;\n left: 0;\n overflow-x: hidden;\n overflow-y: scroll; }\n .MobileNoScroll_suggestionsContainerOpen__MRa5Y .MobileNoScroll_suggestionsList__NUpJE {\n width: 100vw;\n list-style: none;\n padding-left: 0;\n margin: 0;\n background: #f4f4f5; }\n\n.MobileNoScroll_clear-search-history__Cjj-1 {\n display: flex;\n font-family: 'Gotham Rounded A', 'Gotham Rounded B', 'Roboto', Arial, Georgia, Serif;\n margin-top: auto;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 62px;\n background: #f4f4f5;\n color: var(--accessible-primary-color);\n font-size: 15px;\n font-weight: var(--font-weight-medium);\n letter-spacing: -0.42px;\n border: none;\n border-top: 1px solid #ddd; }\n\n.MobileNoScroll_mobile-modal-overlay__LbLie {\n z-index: 9999;\n top: 0;\n left: 0;\n right: unset;\n bottom: unset;\n margin: 0;\n padding: 0;\n width: 100%;\n height: 100%;\n background-color: white;\n position: fixed; }\n\n.MobileNoScroll_mobile-modal__-Rx-A {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n /* stylelint-disable-next-line */\n /* stylelint-disable-next-line */ }\n .MobileNoScroll_mobile-modal__-Rx-A.ReactModal__Content--after-open > div {\n transform: translateY(0); }\n .MobileNoScroll_mobile-modal__-Rx-A.ReactModal__Content--before-close > div {\n transform: translateY(10%); }\n\n.MobileNoScroll_mobile-modal-content__nfrCI {\n position: fixed;\n width: 100%;\n height: 100%;\n outline: none;\n background-color: #ffffff;\n transition: transform 0.25s;\n transform: translateY(10%); }\n\n.MobileNoScroll_suggestionsContainerOpen__MRa5Y {\n -ms-overflow-style: none;\n /* Internet Explorer 10+ */\n scrollbar-width: none;\n /* Firefox */ }\n .MobileNoScroll_suggestionsContainerOpen__MRa5Y::-webkit-scrollbar {\n display: none;\n /* Safari and Chrome */ }\n");var Ue=function(e){$(n,e);var c=je(n);function n(e){var o;K(this,n);var t=ee(o=c.call(this,e));return t.onSuggestionTouchMove=function(){t.justSelectedSuggestion=!1,t.pressedSuggestion=null},o}return J(n)}(T.default),Ge=function(e){var c,o=e.appElement,t=e.id,a=e.closeHandle,i=e.clearInput,r=e.value,M=e.suggestions,s=e.inputProps,l=e.fetchFunction,u=e.renderSuggestion,p=e.getSuggestionValue,d=e.ariaLabel,b=e.label,A=e.onSuggestionSelected,f=e.clearOldSearches,z=e.dialogHeaderText,h=e.dialogPrimaryButtonText,O=e.dialogSecondaryButtonText,L=e.clearInputButtonText,m=e.focusInput,q=e.color,N=e.hoverColor,W=e.accessiblePrimaryColor,_=e.searchOpen,T=e.fontWeights,X=e.showScroll?Ye:Fe,B="".concat(t,"-input"),y="".concat(t,"-label"),S=oe(n.useState(!1),2),v=S[0],k=S[1],C=g.default.useRef();n.useEffect((function(){H.default.setAppElement(o)}),[]);var R=n.useCallback((function(){a()})),E=function(e,c){"clear-search-history"===c.suggestion.type?k(!0):c.suggestion.properties.arrowClicked||A(e,c)},w=function(e){var c=e&&(e.key||e.which||e.keyCode)||"";return!(!c||![13," ","Spacebar"].concat([32,"Enter"]).includes(c))&&(e.preventDefault(),!0)},D=function(e){return"clear-search-history"===e.type?"":p(e)},P=function(e){return"clear-search-history"===e.type?g.default.createElement("button",{type:"button",className:X["clear-search-history"]},e.labelId):u(e)};return m&&null!==(c=C.current)&&void 0!==c&&c.input&&C.current.input.focus(),g.default.createElement(H.default,{isOpen:_,className:X["mobile-modal"],overlayClassName:X["mobile-modal-overlay"],onAfterClose:R,shouldCloseOnEsc:!0},g.default.createElement("div",{className:X["mobile-modal-content"],style:{"--color":"".concat(q),"--accessible-primary-color":W,"--hover-color":"".concat(N),"--font-weight-medium":T.medium}},g.default.createElement("div",{className:X["combobox-container"],htmlFor:B},g.default.createElement("button",{type:"button",className:X["combobox-icon"],onClick:function(){return R()},onKeyDown:function(e){return w(e)&&R()},"aria-label":O,tabIndex:0},g.default.createElement(x.default,{img:"arrow"})),g.default.createElement("span",{className:X["right-column"]},g.default.createElement("span",{className:X["combobox-label"],id:y},b),g.default.createElement(Ue,{alwaysRenderSuggestions:!0,id:t,suggestions:M,onSuggestionsFetchRequested:l,getSuggestionValue:D,renderSuggestion:P,focusInputOnSuggestionClick:!0,shouldRenderSuggestions:function(){return!0},inputProps:j({},s,{className:"".concat(X.input," ").concat(X[t]||""," ").concat(s.value?X.hasValue:""),autoFocus:!0}),renderInputComponent:function(e){return g.default.createElement(g.default.Fragment,null,g.default.createElement("input",Object.assign({"aria-label":d,id:t},e)),r&&g.default.createElement("button",{type:"button",className:X["clear-input"],onClick:i,onKeyDown:function(e){return w(e)&&i()},"aria-label":L},g.default.createElement(x.default,{img:"close",color:q})))},theme:X,onSuggestionSelected:E,ref:C}))),g.default.createElement(Y.default,{appElement:o,isModalOpen:v,handleClose:function(){return k(!1)},headerText:z,primaryButtonText:h,secondaryButtonText:O,primaryButtonOnClick:function(){f(),k(!1)},secondaryButtonOnClick:function(){return k(!1)},color:q,hoverColor:N,fontWeights:T})))};"production"!==process.env.NODE_ENV&&(Ge.propTypes={appElement:N.default.string.isRequired,id:N.default.string.isRequired,closeHandle:N.default.func.isRequired,clearInput:N.default.func.isRequired,value:N.default.string,clearInputButtonText:N.default.string.isRequired,suggestions:N.default.array.isRequired,inputProps:N.default.shape({onChange:N.default.func.isRequired,onBlur:N.default.func.isRequired,value:N.default.string.isRequired,placeholder:N.default.string.isRequired,className:N.default.string.isRequired}).isRequired,fetchFunction:N.default.func.isRequired,getSuggestionValue:N.default.func.isRequired,renderSuggestion:N.default.func.isRequired,onSuggestionSelected:N.default.func.isRequired,label:N.default.string.isRequired,clearOldSearches:N.default.func.isRequired,ariaLabel:N.default.string,dialogHeaderText:N.default.string,dialogPrimaryButtonText:N.default.string,dialogSecondaryButtonText:N.default.string,focusInput:N.default.bool,color:N.default.string,hoverColor:N.default.string,accessiblePrimaryColor:N.default.string.isRequired,searchOpen:N.default.bool.isRequired,fontWeights:N.default.shape({medium:N.default.number.isRequired}).isRequired,showScroll:N.default.bool});var Ve,Ke=Be((function(e,c){var n;"undefined"!=typeof self&&self,e.exports=(n=g.default,function(){var e={253:function(e,c,n){var o=this&&this.__createBinding||(Object.create?function(e,c,n,o){void 0===o&&(o=n),Object.defineProperty(e,o,{enumerable:!0,get:function(){return c[n]}})}:function(e,c,n,o){void 0===o&&(o=n),e[o]=c[n]}),t=this&&this.__exportStar||function(e,c){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(c,n)||o(c,e,n)};Object.defineProperty(c,"__esModule",{value:!0}),t(n(720),c),t(n(646),c),t(n(87),c),t(n(641),c),t(n(91),c),t(n(183),c),t(n(586),c),t(n(219),c)},87:function(e,c,n){Object.defineProperty(c,"__esModule",{value:!0}),c.useArrowNavigation=void 0;var o=n(156);c.useArrowNavigation=function(e){var c=e.listItems,n=e.onArrowUpOrDown,t=(0,o.useState)(0),a=t[0],i=t[1],r=(0,o.useCallback)((function(e){i(e)}),[c]),M=function(e){var o=e.key;if(null==c?void 0:c.length)if("ArrowUp"===o)n&&n(),e.preventDefault(),r(a>0?a-1:c.length-1);else{if("ArrowDown"!==o)return;n&&n(),e.preventDefault(),a<c.length-1?r(a+1):r(0)}};return(0,o.useEffect)((function(){return window.addEventListener("keydown",M),function(){return window.removeEventListener("keydown",M)}})),(0,o.useEffect)((function(){r(0)}),[c]),{selectedIndex:a}}},641:function(e,c,n){Object.defineProperty(c,"__esModule",{value:!0}),c.useIntersectionObserver=void 0;var o=n(156);c.useIntersectionObserver=function(e){var c=(0,o.useRef)(null),n=(0,o.useState)(!1),t=n[0],a=n[1],i=function(e){var c=e[0];a(c.isIntersecting)};return(0,o.useEffect)((function(){if(window&&window.IntersectionObserver){var n=new IntersectionObserver(i,e),o=c.current;return c.current&&n.observe(c.current),function(){o&&n.unobserve(o)}}a(!1)}),[c,e]),{containerRef:c,isVisible:t}},c.default=c.useIntersectionObserver},91:function(e,c,n){var o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(c,"__esModule",{value:!0}),c.useIsBreakpoint=void 0;var t=n(156),a=o(n(197)),i={xs:1,mobileSmall:320,mobile:375,tablet:768,tabletLarge:920,desktopSmall:1024,desktop:1260,desktopLarge:1440};c.useIsBreakpoint=function(e){var c=(0,t.useState)(null),n=c[0],o=c[1],r=(0,t.useCallback)((function(){o(window.innerWidth)}),[]);return(0,t.useEffect)((function(){r()}),[]),(0,a.default)(r),n>=i[e]},c.default=c.useIsBreakpoint},183:function(e,c,n){Object.defineProperty(c,"__esModule",{value:!0}),c.useIsomorphicLayoutEffect=void 0;var o=n(156);c.useIsomorphicLayoutEffect="undefined"!=typeof window?o.useLayoutEffect:o.useEffect,c.default=c.useIsomorphicLayoutEffect},586:function(e,c,n){Object.defineProperty(c,"__esModule",{value:!0}),c.useOnLoseFocusWithin=void 0;var o=n(156);c.useOnLoseFocusWithin=function(e){var c=e.ref,n=e.callback,t=e.watch;(0,o.useEffect)((function(){var e=function(){var e;if(t)return(null===(e=c.current)||void 0===e?void 0:e.matches(":focus-within"))?void 0:n()};return document.addEventListener("keyup",e),function(){return document.removeEventListener("keyup",e)}}),[n,c,t])},c.default=c.useOnLoseFocusWithin},197:function(e,c,n){Object.defineProperty(c,"__esModule",{value:!0});var o=n(156);c.default=function(e){(0,o.useEffect)((function(){var c=function(){e(window.innerWidth)};return window.addEventListener("resize",c,{passive:!0}),function(){return window.removeEventListener("resize",c)}}),[])}},720:function(e,c,n){Object.defineProperty(c,"__esModule",{value:!0}),c.useOutsideReacter=void 0;var o=n(156);c.useOutsideReacter=function(e,c){function n(n){e.current&&!e.current.contains(n.target)&&c()}(0,o.useEffect)((function(){return document.addEventListener("mousedown",n),function(){document.removeEventListener("mousedown",n)}}))}},219:function(e,c,n){Object.defineProperty(c,"__esModule",{value:!0});var o=n(156);c.default=function(){var e=(0,o.useRef)(null);return(0,o.useEffect)((function(){e.current&&(e.current(),e.current=null)})),function(c){e.current=c}}},646:function(e,c,n){Object.defineProperty(c,"__esModule",{value:!0}),c.useScrollLock=void 0;var o=n(156);c.useScrollLock=function(){return{lock:(0,o.useCallback)((function(){var e=window.scrollY+"px",c=document.body;c.style.position="fixed",c.style.top="-"+e}),[]),unlock:(0,o.useCallback)((function(){var e=document.body,c=e.style.top,n=-1*parseInt(c||"0");e.style.position="",e.style.top="",n&&window.scrollTo(0,-1*parseInt(c||"0"))}),[])}}},156:function(e){e.exports=n}},c={};return function n(o){var t=c[o];if(void 0!==t)return t.exports;var a=c[o]={exports:{}};return e[o].call(a.exports,a,a.exports,n),a.exports}(253)}())})),Qe=(Ve=Ke)&&Ve.__esModule&&Object.prototype.hasOwnProperty.call(Ve,"default")?Ve.default:Ve;function Je(e){var c=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,o=ne(e);if(c){var t=ne(this).constructor;n=Reflect.construct(o,arguments,t)}else n=o.apply(this,arguments);return ce(this,n)}}Pe.locale("en"),W.default.init({fallbackLng:"fi",defaultNS:"translation",interpolation:{escapeValue:!1}});"production"!==process.env.NODE_ENV&&N.default.node;var Ze=function(e){if(e&&e.GTFS.platform){var c=e.GTFS,n=c.modes,o=c.platform;return[n&&"RAIL"===n[0]?W.default.t("track"):W.default.t("platform"),o]}};function $e(e){if("FutureRoute"!==e.type){if("SelectFromMap"===e.type)return["",W.default.t("select-from-map")];if("CurrentLocation"===e.type)return["",W.default.t("use-own-position")];if("SelectFromOwnLocations"===e.type)return["",W.default.t("select-from-own-locations")];var c,n=oe(Ae(e.properties,!0),2),o=n[0],t=n[1];if(e.properties.layer.toLowerCase().includes("bikerental")||e.properties.layer.toLowerCase().includes("bikestation"))return[c=W.default.t("bikerentalstation"),o,void 0,e.properties.labelId];if("bikepark"===e.properties.layer)return[c=W.default.t("bikepark"),o,void 0,void 0];if("carpark"===e.properties.layer)return[c=W.default.t("carpark"),o,void 0,void 0];if(e.properties.mode)c=W.default.t(e.properties.mode.toLowerCase().replace("favourite",""));else{var a=e.properties.layer.replace("route-","").toLowerCase().replace("favourite","");c=W.default.t(a)}if(e.properties.id&&("stop"===e.properties.layer||"station"===e.properties.layer)){var i,r=de(e.properties),M=null===(i=e.properties.addendum)||void 0===i?void 0:i.GTFS.modes,s=Ze(e.properties.addendum);return[c,ue(o,r),t,r,M,s]}if("favouriteStop"===e.properties.layer||"favouriteStation"===e.properties.layer){var l=e.properties,u=l.address,p=l.code;return[c,u?ue(u.split(",")[0],p):o,t,p,void 0,Ze(e.properties.addendum)]}return[c,o,t]}var d=e.properties,b=d.origin,A=d.destination,f=b.locality?", ".concat(b.locality," foobar"):"",z=A.locality?", ".concat(A.locality):"",h=b.name,O=A.name;return[W.default.t("future-route"),"".concat(W.default.t("origin")," ").concat(h).concat(f," ").concat(W.default.t("destination")," ").concat(O).concat(z),e.translatedText]}function ec(e){var c=Pe.unix(e.properties.time),n=e.properties.arriveBy?W.default.t("arrival"):W.default.t("departure");return n=c.isSame(Pe(),"day")?"".concat(n," ").concat(W.default.t("today-at")):c.isSame(Pe().add(1,"day"),"day")?"".concat(n," ").concat(W.default.t("tomorrow-at")):"".concat(n," ").concat(c.format("dd D.M.")),n="".concat(n," ").concat(Pe(c).format("HH:mm"))}var cc=function(e){$(n,e);var c=Je(n);function n(e){var o;return K(this,n),(o=c.call(this,e)).componentDidUpdate=function(){W.default.language!==o.props.lang&&W.default.changeLanguage(o.props.lang)},o.UNSAFE_componentWillReceiveProps=function(e){e.value===o.state.value||o.state.editing||o.setState({value:e.value})},o.onChange=function(e,c){var n=c.newValue,t=c.method,a={value:o.fInput||n||"",renderMobileSearch:o.props.isMobile};if(o.fInput=null,o.state.editing){if("enter"!==t||o.state.valid){if(o.state.typingTimer&&clearTimeout(o.state.typingTimer),"type"===t){var i=setTimeout((function(){o.setState({typing:!1})}),1e3);a.typingTimer=i,a.typing=!0}o.setState(a)}}else a.editing=!0,o.setState(a,(function(){return o.fetchFunction({value:n||""})}))},o.onBlur=function(){o.state.renderMobileSearch||(o.state.editing&&o.input.focus(),o.setState({editing:!1,renderMobileSearch:!1,value:o.props.value}))},o.onSelected=function(e,c){if(o.state.valid){if("SelectFromOwnLocations"===c.suggestion.type)return void o.setState({sources:["Favourite","Back"],ownPlaces:!0,pendingSelection:c.suggestion.type,value:""},(function(){o.fetchFunction({value:""})}));if("back"===c.suggestion.type||"FutureRoute"===c.suggestion.type)return void o.setState({sources:o.props.sources,ownPlaces:!1,pendingSelection:c.suggestion.type,suggestionIndex:c.suggestionIndex},(function(){o.fetchFunction({value:""})}));o.selectionDone=!0,o.setState({editing:!1,value:c.suggestionValue},(function(){o.input.blur(),o.props.handleViaPoints?o.props.handleViaPoints(c.suggestion,c.suggestionIndex):o.props.onSelect(c.suggestion,o.props.id),o.setState({renderMobileSearch:!1,sources:o.props.sources,ownPlaces:!1,suggestions:[]},(function(){o.selectionDone=!1})),!o.props.focusChange||o.props.isMobile&&!o.props.isEmbedded||o.props.focusChange(),o.props.isMobile&&o.closeMobileSearch()}))}else o.setState((function(e){return{pendingSelection:e.value}}),(function(){return o.checkPendingSelection()}))},o.onSuggestionsClearRequested=function(){o.setState({suggestions:[],sources:o.props.sources,ownPlaces:!1,editing:!1})},o.getSuggestionValue=function(e){return"SelectFromOwnLocations"===e.type||"back"===e.type?"":function(e){var c=Ae(e,!0);switch(e.layer){case"selectFromMap":case"currentPosition":case"ownLocations":case"back":return c[1]||c[0];case"favouriteBikeRentalStation":case"favouritePlace":return c[0];default:return c.length>1&&""!==c[1]?c.join(", "):c[1]||c[0]}}(e.properties)},o.checkPendingSelection=function(){"SelectFromOwnLocations"!==o.state.pendingSelection&&"back"!==o.state.pendingSelection||!o.state.valid?o.state.pendingSelection&&o.state.valid&&o.setState({pendingSelection:null,editing:!1},(function(){o.state.suggestions.length&&(o.input.blur(),o.props.onSelect(o.state.suggestions[o.state.suggestionIndex],o.props.id),o.props.isMobile&&o.closeMobileSearch(),!o.props.focusChange||o.props.isMobile&&!o.props.isEmbedded||o.props.focusChange())})):o.setState({pendingSelection:null,editing:!0},(function(){o.input.focus()}))},o.clearButton=function(){return g.default.createElement("button",{type:"button",className:He["clear-input"],onClick:o.clearInput,"aria-label":W.default.t("clear-button-label")},g.default.createElement(x.default,{img:"close",color:o.props.color}))},o.fetchFunction=function(e){var c=e.value,n=e.cleanExecuted;return o.setState({valid:!1,cleanExecuted:n||!1},(function(){if(!o.selectionDone){var e,n=I.default(o.props.targets)||o.props.targets.includes("Locations");o.state.ownPlaces?(e=["Locations"],(I.default(o.props.targets)||o.props.targets.includes("Stops"))&&e.push("Stops"),(I.default(o.props.targets)||o.props.targets.includes("BikeRentalStations"))&&e.push("BikeRentalStations")):I.default(o.props.targets)||(e=V(o.props.targets),n&&!o.props.isMobile&&(I.default(o.props.sources)||o.props.sources.includes("Favourite"))&&e.push("SelectFromOwnLocations")),function(e,c,n,o,t,a,i,r,M,s){r(null),Te(e,c,n,o,t,a,i,r,M,s)}(e,o.state.sources&&o.state.sources.filter((function(e){return!(n&&"Favourite"===e&&!o.state.ownPlaces&&!o.props.isMobile)})),o.props.transportMode,o.props.searchContext,o.props.filterResults,o.props.geocodingSize,{input:c||""},(function(e){if(null!=e){var n=(e.results||[]).filter((function(e){return"FutureRoute"!==e.type||"FutureRoute"===e.type&&e.properties.time>Pe().unix()})).map((function(e){if("CurrentLocation"===e.type||"SelectFromMap"===e.type||"SelectFromOwnLocations"===e.type||"back"===e.type){var c=j({},e);return c.properties.labelId=W.default.t(e.properties.labelId),c}return e}));c!==o.state.value&&c!==o.state.pendingSelection&&"SelectFromOwnLocations"!==o.state.pendingSelection&&"back"!==o.state.pendingSelection&&"FutureRoute"!==o.state.pendingSelection||o.setState({valid:!0,suggestions:n},(function(){return o.checkPendingSelection()}))}}),o.props.pathOpts,o.props.refPoint)}}))},o.clearInput=function(){var e={editing:!0,value:"",sources:o.props.sources,ownPlaces:!1};o.setState(e,(function(){return o.fetchFunction({value:"",cleanExecuted:!0})})),o.props.onClear&&o.props.onClear(o.props.id),o.input.focus()},o.inputClicked=function(e){if(o.input.focus(),o.props.isMobile&&o.props.lock(),!o.state.editing){var c={editing:!0,pendingSelection:null,renderMobileSearch:o.props.isMobile},n={editing:!0,pendingSelection:null,value:e};o.state.suggestions.length?(o.fetchFunction({value:o.state.value}),o.setState(c)):"object"!==F(e)&&e?o.setState(n,(function(){return o.fetchFunction({value:e})})):o.setState(c,(function(){return o.fetchFunction({value:o.state.value})}))}},o.storeInputReference=function(e){null!==e&&(o.input=e.input,o.props.storeRef&&o.props.storeRef(e.input))},o.fillInput=function(e){o.fInput=e.properties.name;var c={editing:!0,value:e.properties.name,checkPendingSelection:e,valid:!0};o.setState(c),o.fetchFunction({value:e.properties.name}),o.input.focus()},o.renderItem=function(e){var c="FutureRoute"===e.type?j({},e,{translatedText:ec(e)}):e,n=$e(e);return g.default.createElement(P.default,{item:c,content:n,loading:!o.state.valid,isMobile:o.props.isMobile,ariaFavouriteString:W.default.t("favourite"),color:o.props.color,accessiblePrimaryColor:o.props.accessiblePrimaryColor,fillInput:o.fillInput,fontWeights:o.props.fontWeights,getAutoSuggestIcons:o.props.getAutoSuggestIcons,modeIconColors:o.props.modeIconColors,modeSet:o.props.modeSet})},o.closeMobileSearch=function(){o.props.unlock(),o.setState({renderMobileSearch:!1,value:o.props.value},(function(){window.scrollTo(0,o.state.scrollY),o.onSuggestionsClearRequested()}))},o.keyDown=function(e){if(!o.selectionDone){var c=e.key;if("Escape"===c&&o.setState({editing:!1}),o.state.editing)return"Enter"===c&&""!==o.state.value&&o.setState({pendingSelection:!0},(function(){o.fetchFunction({value:o.state.value})})),void o.inputClicked();if("Enter"!==c&&"ArrowDown"!==c||""!==o.state.value){if("ArrowDown"===c&&""!==o.state.value){var n={editing:!0,value:o.state.value};o.setState(n,(function(){return o.fetchFunction({value:o.state.value})}))}o.state.editing||o.setState({editing:!0}),"Tab"===c&&o.onBlur()}else o.clearInput()}},o.suggestionAsAriaContent=function(){var e=[],c=o.state.suggestions[0];return c&&(c.type&&c.type.includes("Favourite")&&e.push(W.default.t("favourite")),e=e.concat($e(o.state.suggestions[0]))),V(new Set(e)).join(" - ")},o.clearOldSearches=function(){var e=o.props.searchContext,c=e.context,n=e.clearOldSearches,t=e.clearFutureRoutes;c&&n&&(n(c),t&&t(c),o.fetchFunction({value:o.state.value}))},o.isOriginDestinationOrViapoint=function(){return"origin"===o.props.id||"destination"===o.props.id||"via-point"===o.props.id||"origin-stop-near-you"===o.props.id},o.onFocus=function(){["Valittu sijainti","Nykyinen sijaintisi","Current position","Selected location","Vald position","Använd min position","Min position","Käytä nykyistä sijaintia","Use current location","Your current location"].includes(o.state.value)&&o.clearInput();var e=window.pageYOffset;return o.setState({scrollY:e})},Pe.tz.setDefault(e.timeZone),Pe.locale(e.lang),o.state={value:e.value,suggestions:[],editing:!1,valid:!0,renderMobileSearch:!1,sources:e.sources,ownPlaces:!1,typingTimer:null,typing:!1,pendingSelection:null,suggestionIndex:0,cleanExecuted:!1,scrollY:0},Object.keys(xe).forEach((function(e){W.default.addResourceBundle(e,"translation",xe[e])})),o}return J(n,[{key:"shouldComponentUpdate",value:function(e,c){return!C.default(c,this.state)||!C.default(e,this.props)}},{key:"render",value:function(){var e=this;W.default.language!==this.props.lang&&W.default.changeLanguage(this.props.lang);var c=this.state,n=c.value,o=c.suggestions,t=c.renderMobileSearch,a=c.cleanExecuted,i={placeholder:this.props.translatedPlaceholder?this.props.translatedPlaceholder:W.default.t(this.props.placeholder),value:n,onChange:this.onChange,onBlur:this.onBlur,className:"".concat(He.input," ").concat(this.props.isMobile&&this.props.transportMode?He.thin:""," ").concat(He[this.props.id]||""," ").concat(this.state.value?He.hasValue:""," ").concat(this.props.inputClassName),onKeyDown:this.keyDown,required:this.props.required},r=this.props.id.replace("searchfield-",""),M=this.props.ariaLabel||W.default.t(r);M=M.replace("searchfield-","");var s=this.props.required?"".concat(W.default.t("required"),"."):"",l=this.props.isMobile?W.default.t("search-autosuggest-label-mobile"):W.default.t("search-autosuggest-label-desktop"),u=W.default.t("search-autosuggest-len",{count:o.length}),p=function(){return e.suggestionAsAriaContent()||e.props.value?W.default.t("search-current-suggestion",{selection:e.suggestionAsAriaContent()||e.props.value}):""};return g.default.createElement(g.default.Fragment,null,g.default.createElement("span",{className:He["sr-only"],role:"alert"},!this.state.typing&&this.state.editing&&"".concat(u," ").concat(p())),this.props.isMobile&&g.default.createElement(Ge,{searchOpen:t,appElement:this.props.appElement,clearOldSearches:this.clearOldSearches,id:this.props.id,clearInput:this.clearInput,value:this.state.value,suggestions:[].concat(V(o),[{type:"clear-search-history",labelId:W.default.t("clear-search-history")}]),inputProps:j({},i,{placeholder:this.isOriginDestinationOrViapoint()?W.default.t("address-place-or-business"):i.placeholder}),fetchFunction:this.fetchFunction,onSuggestionsClearRequested:this.onSuggestionsClearRequested,getSuggestionValue:this.getSuggestionValue,renderSuggestion:this.renderItem,closeHandle:this.closeMobileSearch,ariaLabel:s.concat(" ").concat(M).concat(" ").concat(p()),label:this.props.mobileLabel?this.props.mobileLabel:W.default.t(this.props.id),onSuggestionSelected:this.onSelected,dialogHeaderText:W.default.t("delete-old-searches-header"),dialogPrimaryButtonText:W.default.t("delete"),dialogSecondaryButtonText:W.default.t("cancel"),clearInputButtonText:W.default.t("clear-button-label"),focusInput:a,color:this.props.color,hoverColor:this.props.hoverColor,accessiblePrimaryColor:this.props.accessiblePrimaryColor,fontWeights:this.props.fontWeights,showScroll:this.props.showScroll}),!t&&g.default.createElement("div",{className:_.default(He["autosuggest-input-container"],He[this.props.id]),style:{"--color":"".concat(this.props.color),"--hover-color":"".concat(this.props.hoverColor)}},this.props.icon&&g.default.createElement("div",{className:_.default(He["autosuggest-input-icon"],He[this.props.id],this.props.inputClassName&&"".concat(this.props.inputClassName,"-input-icon"))},g.default.createElement(x.default,{img:"".concat(this.props.icon)})),g.default.createElement(T.default,{alwaysRenderSuggestions:this.state.editing,id:this.props.id,suggestions:o,onSuggestionsFetchRequested:this.fetchFunction,onSuggestionsClearRequested:this.onSuggestionsClearRequested,getSuggestionValue:this.getSuggestionValue,renderSuggestion:this.renderItem,inputProps:j({},i,{onFocus:this.onFocus}),focusInputOnSuggestionClick:!0,shouldRenderSuggestions:function(){return e.state.editing},highlightFirstSuggestion:!this.state.ownPlaces,theme:He,renderInputComponent:function(c){return g.default.createElement(g.default.Fragment,null,g.default.createElement("label",{className:He["sr-only"],htmlFor:e.props.id},p().concat(" ").concat(s).concat(" ").concat(M).concat(" ").concat(l)),g.default.createElement("input",Object.assign({"aria-label":p().concat(" ").concat(s).concat(" ").concat(M).concat(" ").concat(l),id:e.props.id,onClick:e.inputClicked,onKeyDown:e.keyDown},c)),e.state.value&&e.clearButton())},onSuggestionSelected:this.onSelected,ref:this.storeInputReference})))}}]),n}(g.default.Component);cc.defaultProps={autoFocus:!1,className:"",icon:void 0,value:"",transportMode:void 0,lang:"fi",sources:[],isMobile:!1,color:"#007ac9",hoverColor:"#0062a1",accessiblePrimaryColor:"#0074be",timeZone:"Europe/Helsinki",pathOpts:{routesPrefix:"linjat",stopsPrefix:"pysakit"},mobileLabel:void 0,inputClassName:"",translatedPlaceholder:void 0,fontWeights:{medium:500},modeIconColors:{"mode-bus":"#007ac9","mode-rail":"#8c4799","mode-tram":"#008151","mode-metro":"#ed8c00","mode-ferry":"#007A97","mode-citybike":"#f2b62d","mode-funicular":"#ff00ff"},required:!1,modeSet:void 0,showScroll:!1},"production"!==process.env.NODE_ENV&&(cc.propTypes={appElement:N.default.string.isRequired,autoFocus:N.default.bool,className:N.default.string,icon:N.default.string,id:N.default.string.isRequired,placeholder:N.default.string.isRequired,translatedPlaceholder:N.default.string,value:N.default.string,searchContext:N.default.any.isRequired,ariaLabel:N.default.string,onSelect:N.default.func,transportMode:N.default.string,filterResults:N.default.func,geocodingSize:N.default.number,onClear:N.default.func,storeRef:N.default.func,handleViaPoints:N.default.func,focusChange:N.default.func,lang:N.default.string,sources:N.default.arrayOf(N.default.string),targets:N.default.arrayOf(N.default.string),isMobile:N.default.bool,color:N.default.string,hoverColor:N.default.string,accessiblePrimaryColor:N.default.string,timeZone:N.default.string,pathOpts:N.default.shape({routesPrefix:N.default.string,stopsPrefix:N.default.string}),mobileLabel:N.default.string,lock:N.default.func.isRequired,unlock:N.default.func.isRequired,refPoint:N.default.object,inputClassName:N.default.string,fontWeights:N.default.shape({medium:N.default.number}),modeIconColors:N.default.object,getAutoSuggestIcons:N.default.object,required:N.default.bool,modeSet:N.default.string,showScroll:N.default.bool,isEmbedded:N.default.bool});var nc,oc=(nc=cc,function(e){var c=Qe.useScrollLock(),n=c.lock,o=c.unlock;return g.default.createElement(nc,Object.assign({lock:n,unlock:o},e))});e.default=oc,Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
14
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZGV2ZWxvcG1lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheUxpa2VUb0FycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5V2l0aG91dEhvbGVzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVNwcmVhZC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zZXRQcm90b3R5cGVPZi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0cy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9nZXRQcm90b3R5cGVPZi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5V2l0aEhvbGVzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL25vbkl0ZXJhYmxlUmVzdC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXRydS1lcS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWlzLWR1cGxpY2F0ZS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWhlbHBlcnMvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC11bmlxLWJ5LWxhYmVsL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZmlsdGVyLW1hdGNoaW5nLXRvLWlucHV0L2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtc2VyaWFsaXplL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWpzb24vaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1leGVjdXRlLXNlYXJjaC1pbW1pZGlhdGUvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9tb21lbnQtdGltZXpvbmUvbW9tZW50LXRpbWV6b25lLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21vbWVudC10aW1lem9uZS9pbmRleC5qcyIsIi4uL3NyYy9oZWxwZXJzL3RyYW5zbGF0aW9ucy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZpLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1pbmplY3QvZGlzdC9zdHlsZS1pbmplY3QuZXMuanMiLCIuLi9zcmMvaGVscGVycy9Nb2JpbGVTZWFyY2guanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGhzbC1maS9ob29rcy9saWIvaW5kZXguanMiLCIuLi9zcmMvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtbGFiZWwvaW5kZXguanMiLCIuLi9zcmMvaGVscGVycy93aXRoU2Nyb2xsTG9jay5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7XG4gICAgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBfdHlwZW9mKG9iaik7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcblxuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHtcbiAgICBhcnIyW2ldID0gYXJyW2ldO1xuICB9XG5cbiAgcmV0dXJuIGFycjI7XG59IiwiaW1wb3J0IGFycmF5TGlrZVRvQXJyYXkgZnJvbSBcIi4vYXJyYXlMaWtlVG9BcnJheVwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICBpZiAoIW8pIHJldHVybjtcbiAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7XG4gIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pO1xuICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn0iLCJpbXBvcnQgYXJyYXlXaXRob3V0SG9sZXMgZnJvbSBcIi4vYXJyYXlXaXRob3V0SG9sZXNcIjtcbmltcG9ydCBpdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5XCI7XG5pbXBvcnQgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXlcIjtcbmltcG9ydCBub25JdGVyYWJsZVNwcmVhZCBmcm9tIFwiLi9ub25JdGVyYWJsZVNwcmVhZFwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikge1xuICByZXR1cm4gYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IG5vbkl0ZXJhYmxlU3ByZWFkKCk7XG59IiwiaW1wb3J0IGFycmF5TGlrZVRvQXJyYXkgZnJvbSBcIi4vYXJyYXlMaWtlVG9BcnJheVwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShhcnIpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikge1xuICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGl0ZXIpKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfTtcblxuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufSIsImltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZlwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGY7XG59IiwiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4uLy4uL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IGFzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tIFwiLi9hc3NlcnRUaGlzSW5pdGlhbGl6ZWRcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICByZXR1cm4gY2FsbDtcbiAgfVxuXG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9O1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufSIsImltcG9ydCBhcnJheVdpdGhIb2xlcyBmcm9tIFwiLi9hcnJheVdpdGhIb2xlc1wiO1xuaW1wb3J0IGl0ZXJhYmxlVG9BcnJheUxpbWl0IGZyb20gXCIuL2l0ZXJhYmxlVG9BcnJheUxpbWl0XCI7XG5pbXBvcnQgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXlcIjtcbmltcG9ydCBub25JdGVyYWJsZVJlc3QgZnJvbSBcIi4vbm9uSXRlcmFibGVSZXN0XCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7XG4gIGlmICh0eXBlb2YgU3ltYm9sID09PSBcInVuZGVmaW5lZFwiIHx8ICEoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChhcnIpKSkgcmV0dXJuO1xuICB2YXIgX2FyciA9IFtdO1xuICB2YXIgX24gPSB0cnVlO1xuICB2YXIgX2QgPSBmYWxzZTtcbiAgdmFyIF9lID0gdW5kZWZpbmVkO1xuXG4gIHRyeSB7XG4gICAgZm9yICh2YXIgX2kgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkge1xuICAgICAgX2Fyci5wdXNoKF9zLnZhbHVlKTtcblxuICAgICAgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgX2QgPSB0cnVlO1xuICAgIF9lID0gZXJyO1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChfZCkgdGhyb3cgX2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIF9hcnI7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn0iLCIvKipcbiAqICBhY2NlcHQgZXF1YWxpdHkgb2Ygbm9uIG51bGxpc2ggdmFsdWVzXG4gKlxuICogQG5hbWUgdHJ1RXFcbiAqIEBwYXJhbSB7Qm9vbGVhbnxOdW1iZXJ8QmlnSW50fFN0cmluZ3xTeW1ib2x8T2JqZWN0fSB2YWwxIEZpcnN0IHZhbHVlIHRvIGJlIGNvbXBhcmVkXG4gKiBAcGFyYW0ge0Jvb2xlYW58TnVtYmVyfEJpZ0ludHxTdHJpbmd8U3ltYm9sfE9iamVjdH0gcGFyYW0yIFNlY29uZCB2YWx1ZSB0byBiZSBjb21wYXJlZFxuICogQHJldHVybnMge0Jvb2xlYW59IHRydWUvZmFsc2VcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC11dGlsLnRydUVxKCcyJywgJzInKTtcbiAqIC8vPXRydWVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJ1RXEodmFsMSwgdmFsMikge1xuICByZXR1cm4gdmFsMSAmJiB2YWwyICYmIHZhbDEgPT09IHZhbDI7XG59XG4iLCJpbXBvcnQgdHJ1RXEgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXRydS1lcSc7XG4vKipcbiAqIENoZWNrcyB0aGF0IGlzIGl0ZW1zIGR1cGxpY2F0ZVxuICpcbiAqIEBuYW1lIGlzRHVwbGljYXRlXG4gKiBAcGFyYW0ge09iamVjdH0gaXRlbTEgT2JqZWN0IGNvbnRhaW5pbmcgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKiB7XG4gKiAgcHJvcGVydGllcyB7XG4gKiAgICAgIGd0ZnNJZDogU3RyaW5nXG4gKiAgICAgIGdpZDogU3RyaW5nIGZyb20gZ2VvY29kZXJcbiAqICAgICAgbmFtZTogU3RyaW5nXG4gKiAgICAgIGxhYmVsOiBTdHJpbmdcbiAqICAgICAgIGFkZHJlc3M6IFN0cmluZ1xuICogICAgICBnZW9tZXRyeSB7XG4gKiAgICAgICAgIGNvb3JkaW5hdGVzIFtOdW1iZXIgbGF0LCBOdW1iZXIgbG9uXVxuICogICAgICB9XG4gKiAgfVxuICogfVxuICogQHBhcmFtIHtPYmplY3R9IGl0ZW0yIE9iamVjdCB3aXRoIHNhbWUgYXR0cmlidXRlcyBhcyBpdGVtMVxuICogQHJldHVybnMge0Jvb2xlYW59IHRydWUvZmFsc2VcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC11dGlsLmlzRHVwbGljYXRlKHBhcmFtMSwgcGFyYW0yKTtcbiAqIC8vPXRydWVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNEdXBsaWNhdGUoaXRlbTEsIGl0ZW0yKSB7XG4gIGNvbnN0IHByb3BzMSA9IGl0ZW0xLnByb3BlcnRpZXM7XG4gIGNvbnN0IHByb3BzMiA9IGl0ZW0yLnByb3BlcnRpZXM7XG5cbiAgaWYgKGl0ZW0xLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScgJiYgaXRlbTIudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJykge1xuICAgIGNvbnN0IG8xID0gcHJvcHMxLm9yaWdpbjtcbiAgICBjb25zdCBkMSA9IHByb3BzMS5kZXN0aW5hdGlvbjtcbiAgICBjb25zdCBvMiA9IHByb3BzMi5vcmlnaW47XG4gICAgY29uc3QgZDIgPSBwcm9wczIuZGVzdGluYXRpb247XG5cbiAgICBjb25zdCBuYW1lMSA9IGAke28xLm5hbWV9Ly8ke28xLmxvY2FsaXR5fS8vJHtkMS5uYW1lfS8vJHtkMS5sb2NhbGl0eX1gO1xuICAgIGNvbnN0IG5hbWUyID0gYCR7bzIubmFtZX0vLyR7bzIubG9jYWxpdHl9Ly8ke2QyLm5hbWV9Ly8ke2QyLmxvY2FsaXR5fWA7XG5cbiAgICByZXR1cm4gbmFtZTEgPT09IG5hbWUyO1xuICB9XG4gIGlmIChpdGVtMS50eXBlID09PSAnRnV0dXJlUm91dGUnIHx8IGl0ZW0yLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKFxuICAgICgocHJvcHMxLmxheWVyID09PSAnYmlrZVJlbnRhbFN0YXRpb24nIHx8XG4gICAgICBwcm9wczEubGF5ZXIgPT09ICdmYXZvdXJpdGVCaWtlUmVudGFsU3RhdGlvbicpICYmXG4gICAgICAocHJvcHMyLmxheWVyID09PSAnYmlrZVJlbnRhbFN0YXRpb24nIHx8XG4gICAgICAgIHByb3BzMi5sYXllciA9PT0gJ2Zhdm91cml0ZUJpa2VSZW50YWxTdGF0aW9uJykpIHx8XG4gICAgKHByb3BzMS5sYXllciA9PT0gJ2Jpa2VzdGF0aW9uJyAmJiBwcm9wczIubGF5ZXIgPT09ICdiaWtlc3RhdGlvbicpXG4gICkge1xuICAgIHJldHVybiBwcm9wczEubGFiZWxJZCA9PT0gcHJvcHMyLmxhYmVsSWQ7XG4gIH1cbiAgaWYgKHByb3BzMS5ndGZzSWQgJiYgcHJvcHMyLmd0ZnNJZCkge1xuICAgIHJldHVybiBwcm9wczEuZ3Rmc0lkID09PSBwcm9wczIuZ3Rmc0lkO1xuICB9XG4gIGlmIChwcm9wczEuZ3Rmc0lkICYmIHByb3BzMi5naWQgJiYgcHJvcHMyLmdpZC5pbmNsdWRlcyhwcm9wczEuZ3Rmc0lkKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChwcm9wczIuZ3Rmc0lkICYmIHByb3BzMS5naWQgJiYgcHJvcHMxLmdpZC5pbmNsdWRlcyhwcm9wczIuZ3Rmc0lkKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChcbiAgICAocHJvcHMxLmxheWVyID09PSAnc3RvcCcgfHwgcHJvcHMxLmxheWVyID09PSAnc3RhdGlvbicpICYmXG4gICAgKHByb3BzMi5sYXllciA9PT0gJ3N0b3AnIHx8IHByb3BzMi5sYXllciA9PT0gJ3N0YXRpb24nKSAmJlxuICAgIHByb3BzMS5naWQgJiZcbiAgICBwcm9wczIuZ2lkXG4gICkge1xuICAgIHJldHVybiBwcm9wczEuZ2lkID09PSBwcm9wczIuZ2lkO1xuICB9XG5cbiAgY29uc3QgcDEgPSBpdGVtMSAmJiBpdGVtMS5nZW9tZXRyeSA/IGl0ZW0xLmdlb21ldHJ5LmNvb3JkaW5hdGVzIDogdW5kZWZpbmVkO1xuICBjb25zdCBwMiA9IGl0ZW0yICYmIGl0ZW0yLmdlb21ldHJ5ID8gaXRlbTIuZ2VvbWV0cnkuY29vcmRpbmF0ZXMgOiB1bmRlZmluZWQ7XG5cbiAgaWYgKHAxICYmIHAyKSB7XG4gICAgLy8gYm90aCBoYXZlIGdlb21ldHJ5XG4gICAgaWYgKE1hdGguYWJzKHAxWzBdIC0gcDJbMF0pIDwgMWUtNiAmJiBNYXRoLmFicyhwMVsxXSAtIHAyWzFdKSA8IDFlLTYpIHtcbiAgICAgIC8vIGxvY2F0aW9uIG1hdGNoIGlzIG5vdCBlbm91Z2guIFJlcXVpcmUgYSBjb21tb24gcHJvcGVydHlcbiAgICAgIGlmIChcbiAgICAgICAgdHJ1RXEocHJvcHMxLm5hbWUsIHByb3BzMi5uYW1lKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEubGFiZWwsIHByb3BzMi5sYWJlbCkgfHxcbiAgICAgICAgdHJ1RXEocHJvcHMxLmFkZHJlc3MsIHByb3BzMi5hZGRyZXNzKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEuYWRkcmVzcywgcHJvcHMyLmxhYmVsKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEubGFiZWwsIHByb3BzMi5hZGRyZXNzKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG4iLCJpbXBvcnQgaXNTdHJpbmcgZnJvbSAnbG9kYXNoL2lzU3RyaW5nJztcbmltcG9ydCBvcmRlckJ5IGZyb20gJ2xvZGFzaC9vcmRlckJ5JztcbmltcG9ydCB1bmlxV2l0aCBmcm9tICdsb2Rhc2gvdW5pcVdpdGgnO1xuaW1wb3J0IGlzRHVwbGljYXRlIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1pcy1kdXBsaWNhdGUnO1xuXG5jb25zdCBub3JtYWxpemUgPSBzdHIgPT4ge1xuICBpZiAoIWlzU3RyaW5nKHN0cikpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpO1xufTtcblxuLyoqXG4gKiBMYXllclR5cGUgZGVwaWN0cyB0aGUgdHlwZSBvZiB0aGUgcG9pbnQtb2YtaW50ZXJlc3QuXG4gKi9cbmNvbnN0IExheWVyVHlwZSA9IHtcbiAgQWRkcmVzczogJ2FkZHJlc3MnLFxuICBCYWNrOiAnYmFjaycsXG4gIEN1cnJlbnRQb3NpdGlvbjogJ2N1cnJlbnRQb3NpdGlvbicsXG4gIEZhdm91cml0ZVN0b3A6ICdmYXZvdXJpdGVTdG9wJyxcbiAgRmF2b3VyaXRlU3RhdGlvbjogJ2Zhdm91cml0ZVN0YXRpb24nLFxuICBGYXZvdXJpdGVQbGFjZTogJ2Zhdm91cml0ZVBsYWNlJyxcbiAgRmF2b3VyaXRlUm91dGU6ICdmYXZvdXJpdGVSb3V0ZScsXG4gIEZ1dHVyZVJvdXRlOiAnZnV0dXJlUm91dGUnLFxuICBTdGF0aW9uOiAnc3RhdGlvbicsXG4gIFNlbGVjdEZyb21NYXA6ICdzZWxlY3RGcm9tTWFwJyxcbiAgU2VsZWN0RnJvbU93bkxvY2F0aW9uczogJ293bkxvY2F0aW9ucycsXG4gIFN0b3A6ICdzdG9wJyxcbiAgU3RyZWV0OiAnc3RyZWV0JyxcbiAgVmVudWU6ICd2ZW51ZScsXG4gIEJpa2VSZW50YWxTdGF0aW9uOiAnYmlrZXN0YXRpb24nLFxuICBDYXJQYXJrOiAnY2FycGFyaycsXG4gIEJpa2VQYXJrOiAnYmlrZXBhcmsnLFxufTtcbmV4cG9ydCBjb25zdCBpc1N0b3AgPSAoeyBsYXllciwgdHlwZSB9KSA9PlxuICBsYXllciA9PT0gJ3N0b3AnIHx8XG4gIGxheWVyID09PSAnZmF2b3VyaXRlU3RvcCcgfHxcbiAgdHlwZSA9PT0gJ3N0b3AnIHx8XG4gIHR5cGUgPT09ICdmYXZvdXJpdGVTdG9wJztcblxuY29uc3QgREVGQVVMVF9ST1VURVNfUFJFRklYID0gJ2xpbmphdCc7XG5jb25zdCBERUZBVUxUX1NUT1BTX1BSRUZJWCA9ICdweXNha2l0JztcblxuZXhwb3J0IGNvbnN0IG1hcFJvdXRlID0gKGl0ZW0sIHBhdGhPcHRzKSA9PiB7XG4gIGlmIChpdGVtID09PSBudWxsIHx8IGl0ZW0gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3Qgb3B0cyA9IHBhdGhPcHRzIHx8IHt9O1xuXG4gIGNvbnN0IHJvdXRlc1ByZWZpeCA9IG9wdHMucm91dGVzUHJlZml4IHx8IERFRkFVTFRfUk9VVEVTX1BSRUZJWDtcbiAgY29uc3Qgc3RvcHNQcmVmaXggPSBvcHRzLnN0b3BzUHJlZml4IHx8IERFRkFVTFRfU1RPUFNfUFJFRklYO1xuXG4gIGNvbnN0IGxpbmsgPSBgLyR7cm91dGVzUHJlZml4fS8ke2l0ZW0uZ3Rmc0lkfS8ke3N0b3BzUHJlZml4fWA7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ1JvdXRlJyxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAuLi5pdGVtLFxuICAgICAgbGF5ZXI6IGByb3V0ZS0ke2l0ZW0ubW9kZX1gLFxuICAgICAgbGluayxcbiAgICB9LFxuICAgIGdlb21ldHJ5OiB7XG4gICAgICBjb29yZGluYXRlczogbnVsbCxcbiAgICB9LFxuICB9O1xufTtcblxuLyoqXG4gKiBUcmllcyB0byBtYXRjaCB0aGUgZ2l2ZW4gc2VhcmNoIHRlcm0gYWdhaW5zIHRoZSBjb2xsZWN0aW9uIG9mIHByb3BlcnRpZXNcbiAqIGZvciBhIGdlb2NvZGluZyByZXN1bHQuIFRoZSBiZXN0IG1hdGNoIHdpbGwgYmUgcmV0dXJuZWQgKG1pbjogMCwgbWF4OiAxLjUpLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBub3JtYWxpemVkVGVybSB0aGUgbm9ybWFsaXplZCBzZWFyY2ggdGVybS5cbiAqIEBwYXJhbSB7Kn0gcmVzdWx0UHJvcGVydGllcyB0aGUgZ2VvY29kaW5nIHJlc3VsdCdzIHByb3BlcnR5IGNvbGxlY3Rpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBtYXRjaCA9IChub3JtYWxpemVkVGVybSwgcmVzdWx0UHJvcGVydGllcykgPT4ge1xuICBpZiAoIWlzU3RyaW5nKG5vcm1hbGl6ZWRUZXJtKSB8fCBub3JtYWxpemVkVGVybS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGNvbnN0IG1hdGNoUHJvcHMgPSBbJ25hbWUnLCAnbGFiZWwnLCAnYWRkcmVzcycsICdzaG9ydE5hbWUnXTtcbiAgcmV0dXJuIG1hdGNoUHJvcHNcbiAgICAubWFwKG5hbWUgPT4gcmVzdWx0UHJvcGVydGllc1tuYW1lXSlcbiAgICAuZmlsdGVyKHZhbHVlID0+IGlzU3RyaW5nKHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPiAwKVxuICAgIC5tYXAodmFsdWUgPT4ge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFZhbHVlID0gbm9ybWFsaXplKHZhbHVlKTtcbiAgICAgIGlmIChub3JtYWxpemVkVmFsdWUuaW5kZXhPZihub3JtYWxpemVkVGVybSkgPT09IDApIHtcbiAgICAgICAgLy8gZnVsbCBtYXRjaCBhdCBzdGFydC4gUmV0dXJuIG1heCByZXN1bHQgd2hlbiBtYXRjaCBpcyBmdWxsLCBub3Qgb25seSBwYXJ0aWFsXG4gICAgICAgIHJldHVybiAwLjUgKyBub3JtYWxpemVkVGVybS5sZW5ndGggLyBub3JtYWxpemVkVmFsdWUubGVuZ3RoO1xuICAgICAgfVxuICAgICAgLy8gYmVjYXVzZSBvZiBmaWx0ZXJtYXRjaGluZ3RvaW5wdXQsIHdlIGtub3cgdGhhdCBtYXRjaCBvY2N1cnJlZCBzb21ld2hlcmVcbiAgICAgIC8vIGRvbid0IHJ1biBmaWx0ZXJtYXRjaGluZyBhZ2FpbiBidXQgZXN0aW1hdGUgcm91Z2hseTpcbiAgICAgIC8vIHRoZSBsb25nZXIgdGhlIG1hdGNoaW5nIHN0cmluZywgdGhlIGJldHRlciBjb25maWRlbmNlLCBtYXggYmVpbmcgMC41XG4gICAgICByZXR1cm4gKDAuNSAqIG5vcm1hbGl6ZWRUZXJtLmxlbmd0aCkgLyAobm9ybWFsaXplZFRlcm0ubGVuZ3RoICsgMSk7XG4gICAgfSlcbiAgICAucmVkdWNlKFxuICAgICAgKHByZXZpb3VzLCBjdXJyZW50KSA9PiAoY3VycmVudCA+IHByZXZpb3VzID8gY3VycmVudCA6IHByZXZpb3VzKSxcbiAgICAgIDAsXG4gICAgKTtcbn07XG5cbi8qKlxuICogUmFua3MgdGhlIHJlc3VsdCBiYXNlZCBvbiBpdHMgbGF5ZXIgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxheWVyIHRoZSBsYXllciBwcm9wZXJ0eS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgdGhlIHNvdXJjZSBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldExheWVyUmFuayA9IChsYXllciwgc291cmNlKSA9PiB7XG4gIHN3aXRjaCAobGF5ZXIpIHtcbiAgICBjYXNlIExheWVyVHlwZS5DdXJyZW50UG9zaXRpb246XG4gICAgICByZXR1cm4gMTtcbiAgICBjYXNlIExheWVyVHlwZS5CYWNrOlxuICAgICAgcmV0dXJuIDAuOTtcbiAgICBjYXNlIExheWVyVHlwZS5TZWxlY3RGcm9tTWFwOlxuICAgICAgcmV0dXJuIDAuODtcbiAgICBjYXNlIExheWVyVHlwZS5TZWxlY3RGcm9tT3duTG9jYXRpb25zOlxuICAgICAgcmV0dXJuIDAuNzk7XG4gICAgY2FzZSBMYXllclR5cGUuRmF2b3VyaXRlU3RhdGlvbjpcbiAgICBjYXNlIExheWVyVHlwZS5GYXZvdXJpdGVQbGFjZTpcbiAgICBjYXNlIExheWVyVHlwZS5GYXZvdXJpdGVTdG9wOlxuICAgIGNhc2UgTGF5ZXJUeXBlLkZhdm91cml0ZVJvdXRlOlxuICAgICAgcmV0dXJuIDAuNDU7XG4gICAgY2FzZSBMYXllclR5cGUuRnV0dXJlUm91dGU6XG4gICAgICByZXR1cm4gMC40NDtcbiAgICBjYXNlIExheWVyVHlwZS5TdGF0aW9uOiB7XG4gICAgICBpZiAoaXNTdHJpbmcoc291cmNlKSAmJiBzb3VyY2UuaW5kZXhPZignZ3RmcycpID09PSAwKSB7XG4gICAgICAgIHJldHVybiAwLjQzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIDAuNDI7XG4gICAgfVxuICAgIGNhc2UgTGF5ZXJUeXBlLkZhdm91cml0ZUJpa2VSZW50YWxTdGF0aW9uOlxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyB2ZW51ZSwgYWRkcmVzcywgc3RyZWV0LCByb3V0ZS14eHhcbiAgICAgIHJldHVybiAwLjQxO1xuICAgIGNhc2UgTGF5ZXJUeXBlLkNhclBhcms6XG4gICAgICByZXR1cm4gMC4zODtcbiAgICBjYXNlIExheWVyVHlwZS5CaWtlUGFyazpcbiAgICAgIHJldHVybiAwLjM4O1xuICAgIGNhc2UgTGF5ZXJUeXBlLkJpa2VSZW50YWxTdGF0aW9uOlxuICAgICAgcmV0dXJuIDAuMzg7XG4gICAgY2FzZSBMYXllclR5cGUuU3RvcDpcbiAgICAgIHJldHVybiAwLjM2O1xuICB9XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBzb3J0IHRoZSByZXN1bHRzLiBPcmRlcnMgYXMgZm9sbG93czpcbiAqICAtIGN1cnJlbnQgcG9zaXRpb24gZmlyc3QgZm9yIGFuIGVtcHR5IHNlYXJjaFxuICogIC0gbWF0Y2hpbmcgcm91dGVzIGZpcnN0XG4gKiAgLSBvdGhlcndpc2UgYnkgY29uZmlkZW5jZSwgZXhjZXB0IHRoYXQ6XG4gKiAgICAtIGJvb3N0IHdlbGwgbWF0Y2hpbmcgc3RhdGlvbnMgKGVzcGVjaWFsbHkgZnJvbSBHVEZTKVxuICogICAgLSByYW5rIHN0b3BzIGxvd2VyIGFzIHRoZXkgdGVuZCB0byBvY2N1cHkgbW9zdCBvZiB0aGUgc2VhcmNoIHJlc3VsdHNcbiAqICAtIGl0ZW1zIHdpdGggbm8gY29uZmlkZW5jZSAob2xkIHNlYXJjaGVzIGFuZCBmYXZvcml0ZXMpOlxuICogICAgLSByYW5rIGZhdm91cml0ZXMgYmV0dGVyIHRoYW4gb3JkaW5hcnkgb2xkIHNlYXJjaGVzXG4gKiAgICAtIHJhbmsgZnVsbCBtYXRjaCBiZXR0ZXIgdGhhbiBwYXJ0aWFsIG1hdGNoXG4gKiAgICAtIHJhbmsgbWF0Y2ggYXQgbWlkZGxlIHdvcmQgbG93ZXIgdGhhbiBtYXRjaCBhdCB0aGUgYmVnaW5uaW5nXG4gKiAgICAtIHJhbmsgYmlrZSByZW50YWwgc3RhdGlvbnMgbG93ZXJcbiAqIEBwYXJhbSB7KltdfSByZXN1bHRzIFRoZSBzZWFyY2ggcmVzdWx0cyB0aGF0IHdlcmUgcmVjZWl2ZWRcbiAqIEBwYXJhbSB7U3RyaW5nfSB0ZXJtIFRoZSBzZWFyY2ggdGVybSB0aGF0IHdhcyB1c2VkXG4gKi9cbmV4cG9ydCBjb25zdCBzb3J0U2VhcmNoUmVzdWx0cyA9IChsaW5lUmVnZXhwLCByZXN1bHRzLCB0ZXJtID0gJycpID0+IHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3VsdHMpKSB7XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cbiAgY29uc3QgaXNMaW5lSWRlbnRpZmllciA9IHZhbHVlID0+XG4gICAgaXNTdHJpbmcodmFsdWUpICYmIGxpbmVSZWdleHAgJiYgbGluZVJlZ2V4cC50ZXN0KHZhbHVlKTtcblxuICBjb25zdCBub3JtYWxpemVkVGVybSA9IG5vcm1hbGl6ZSh0ZXJtKTtcbiAgY29uc3QgaXNMaW5lU2VhcmNoID0gaXNMaW5lSWRlbnRpZmllcihub3JtYWxpemVkVGVybSk7XG5cbiAgY29uc3Qgb3JkZXJlZFJlc3VsdHMgPSBvcmRlckJ5KFxuICAgIHJlc3VsdHMsXG4gICAgW1xuICAgICAgLy8gcmFuayBtYXRjaGluZyByb3V0ZXMgYmVzdFxuICAgICAgcmVzdWx0ID0+XG4gICAgICAgIGlzTGluZVNlYXJjaCAmJlxuICAgICAgICBpc0xpbmVJZGVudGlmaWVyKG5vcm1hbGl6ZShyZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWUpKSAmJlxuICAgICAgICBub3JtYWxpemUocmVzdWx0LnByb3BlcnRpZXMuc2hvcnROYW1lKS5pbmRleE9mKG5vcm1hbGl6ZWRUZXJtKSA9PT0gMFxuICAgICAgICAgID8gMVxuICAgICAgICAgIDogMCxcblxuICAgICAgcmVzdWx0ID0+IHtcbiAgICAgICAgY29uc3QgeyBjb25maWRlbmNlLCBsYXllciwgc291cmNlIH0gPSByZXN1bHQucHJvcGVydGllcztcbiAgICAgICAgaWYgKG5vcm1hbGl6ZWRUZXJtLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIC8vIERvaW5nIHNlYXJjaCB3aXRoIGVtcHR5IHN0cmluZy5cbiAgICAgICAgICAvLyBObyBjb25maWRlbmNlIHRvIG1hdGNoLCBzbyB1c2UgcmFua2VkIG9sZCBzZWFyY2hlcyBhbmQgZmF2b3VyaXRlc1xuICAgICAgICAgIHJldHVybiBnZXRMYXllclJhbmsobGF5ZXIsIHNvdXJjZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBtdXN0IGhhbmRsZSBhIG1peHVwIG9mIGdlb2NvZGVyIHNlYXJjaGVzIGFuZCBpdGVtcyBhYm92ZVxuICAgICAgICAvLyBOb3JtYWwgY29uZmlkZW5jZSByYW5nZSBmcm9tIGdlb2NvZGVyIGlzIGFib3V0IDAuMyAuLiAxXG4gICAgICAgIGlmICghY29uZmlkZW5jZSkge1xuICAgICAgICAgIC8vIG5vdCBmcm9tIGdlb2NvZGVyLCBlc3RpbWF0ZSBjb25maWRlbmNlIG91cnNlbHZlc1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBnZXRMYXllclJhbmsobGF5ZXIsIHNvdXJjZSkgK1xuICAgICAgICAgICAgbWF0Y2gobm9ybWFsaXplZFRlcm0sIHJlc3VsdC5wcm9wZXJ0aWVzKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZ2VvY29kZWQgaXRlbXMgd2l0aCBjb25maWRlbmNlLCBqdXN0IGFkanVzdCBhIGxpdHRsZVxuICAgICAgICBzd2l0Y2ggKGxheWVyKSB7XG4gICAgICAgICAgY2FzZSBMYXllclR5cGUuU3RhdGlvbjoge1xuICAgICAgICAgICAgY29uc3QgYm9vc3QgPSBzb3VyY2UuaW5kZXhPZignZ3RmcycpID09PSAwID8gMC4wMiA6IDAuMDE7XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZSArIGJvb3N0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIExheWVyVHlwZS5TdG9wOlxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2UgLSAwLjA1O1xuICAgICAgICAgIGNhc2UgTGF5ZXJUeXBlLkNhclBhcms6XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZSAtIDAuMDU7XG4gICAgICAgICAgY2FzZSBMYXllclR5cGUuQmlrZVBhcms6XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZSAtIDAuMDU7XG4gICAgICAgICAgY2FzZSBMYXllclR5cGUuQmlrZVJlbnRhbFN0YXRpb246XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZSAtIDAuMDQ7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBjb25maWRlbmNlO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIF0sXG4gICAgWydkZXNjJywgJ2Rlc2MnXSxcbiAgKTtcblxuICByZXR1cm4gdW5pcVdpdGgob3JkZXJlZFJlc3VsdHMsIGlzRHVwbGljYXRlKTtcbn07XG5cbi8qKlxuICogUGFyc2VzIHN0b3AncyBuYW1lIHdpdGhvdXQgc3RvcCBjb2RlIGZyb20gYSBzdG9wIG5hbWUgZnJvbSBnZW9jb2RpbmcgcmVzdWx0c1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbCBzdG9wJ3MgbmFtZSBmcm9tIGdlb2NvZGluZyByZXN1bHRzLlxuICogQHBhcmFtIHtzdHJpbmd9IHN0b3BDb2RlIHN0b3AgY29kZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFN0b3BOYW1lID0gKG5hbWUsIHN0b3BDb2RlKSA9PiB7XG4gIGlmIChcbiAgICBzdG9wQ29kZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgc3RvcENvZGUgIT09IG51bGwgJiZcbiAgICBuYW1lLmxhc3RJbmRleE9mKHN0b3BDb2RlKSAhPT0gLTFcbiAgKSB7XG4gICAgcmV0dXJuIG5hbWUuc3Vic3RyaW5nKDAsIG5hbWUubGFzdEluZGV4T2Yoc3RvcENvZGUpIC0gMSk7XG4gIH1cbiAgcmV0dXJuIG5hbWU7XG59O1xuIiwiaW1wb3J0IHVuaXFXaXRoIGZyb20gJ2xvZGFzaC91bmlxV2l0aCc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2gvaXNFcXVhbCc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICdsb2Rhc2gvbWVtb2l6ZSc7XG5pbXBvcnQgZXNjYXBlUmVnRXhwIGZyb20gJ2xvZGFzaC9lc2NhcGVSZWdFeHAnO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdsb2Rhc2gvY2xvbmVEZWVwJztcblxuLyoqXG4gKiBMb2NhdGlvbiBwcm9wZXJ0aWVzLlxuICogQHR5cGVkZWYge0xvY2F0aW9uUHJvcGVydGllc31cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYXllciBTdWdnZXN0aW9uIGxheWVyLlxuICogQHByb3BlcnR5IHtsYXR9IFtudW1iZXJdXG4gKiBAcHJvcGVydHkge2xvbn0gW251bWJlcl1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhZGRyZXNzIEFkZHJlc3MuXG4gKi9cblxuLyoqXG4gKiBSZXR1cm5zIGxvY2FsaXR5IChjaXR5IG5hbWUpIGZvciBzdWdnZXN0aW9uc1xuICpcbiAqIEBuYW1lIGdldExvY2FsaXR5XG4gKiBAcGFyYW0ge09iamVjdH0gc3VnZ2VzdGlvbiBzdWdnZXN0aW9uJ3MgcHJvcGVydGllcyBmcm9tIGdlb2NvZGluZyBvciBhIGZhdm91cml0ZSBzdG9wL3N0YXRpb24uXG4gKiBFeHBlY3RzIGxhc3QgcGFydCBvZiBhbiBhZGRyZXNzIChhZnRlciAnLCcpIHRvIGNvbnRhaW4gdGhlIGNpdHkgbmFtZSBvZiB0aGUgc3VnZ2VzdGlvbiBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHtTdHJpbmd9ICBDaXR5IG5hbWUgb3IgZW1wdHkgc3RyaW5nXG4gKi9cbmNvbnN0IGdldExvY2FsaXR5ID0gc3VnZ2VzdGlvbiA9PlxuICBzdWdnZXN0aW9uLmxvY2FsYWRtaW4gfHxcbiAgc3VnZ2VzdGlvbi5sb2NhbGl0eSB8fFxuICAoc3VnZ2VzdGlvbi5hZGRyZXNzICYmXG4gICAgc3VnZ2VzdGlvbi5hZGRyZXNzLmxhc3RJbmRleE9mKCcsJykgPCBzdWdnZXN0aW9uLmFkZHJlc3MubGVuZ3RoIC0gMiAmJlxuICAgIHN1Z2dlc3Rpb24uYWRkcmVzcy5zdWJzdHJpbmcoc3VnZ2VzdGlvbi5hZGRyZXNzLmxhc3RJbmRleE9mKCcsJykgKyAyKSkgfHxcbiAgJyc7XG5cbmV4cG9ydCBjb25zdCBnZXRTdG9wQ29kZSA9ICh7IGlkLCBjb2RlIH0pID0+IHtcbiAgaWYgKGNvZGUpIHtcbiAgICByZXR1cm4gY29kZTtcbiAgfVxuICBpZiAoXG4gICAgaWQgPT09IHVuZGVmaW5lZCB8fFxuICAgIHR5cGVvZiBpZC5pbmRleE9mID09PSAndW5kZWZpbmVkJyB8fFxuICAgIGlkLmluZGV4T2YoJyMnKSA9PT0gLTFcbiAgKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICAvLyBpZCBmcm9tIHBlbGlhc1xuICByZXR1cm4gaWQuc3Vic3RyaW5nKGlkLmluZGV4T2YoJyMnKSArIDEpO1xufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdEZhdm91cml0ZVBsYWNlTGFiZWwgPSAobmFtZSwgYWRkcmVzcykgPT4gW1xuICBuYW1lIHx8IChhZGRyZXNzICYmIGFkZHJlc3Muc3BsaXQoJywnKVswXSksXG4gIHR5cGVvZiBhZGRyZXNzID09PSAnc3RyaW5nJ1xuICAgID8gYWRkcmVzcy5yZXBsYWNlKG5ldyBSZWdFeHAoYCR7ZXNjYXBlUmVnRXhwKG5hbWUpfShbICxdfCQpK2ApLCAnJylcbiAgICA6ICcnLFxuXTtcblxuLyoqXG4gKiBGb3JtYXQgc3VnZ2VzdGlvbi1wYWlyIFtuYW1lLCBhZGRyZXNzXSBieSBgc3VnZ2VzdGlvbi5sYXllcmAuXG4gKlxuICogQG5hbWUgZ2V0TmFtZUxhYmVsXG4gKiBAcGFyYW0ge0xvY2F0aW9uUHJvcGVydGllc30gc3VnZ2VzdGlvblxuICogQHBhcmFtIHtib29sZWFufSBbcGxhaW5dXG4gKlxuICogQHJldHVybnMge0FycmF5LjxzdHJpbmc+fSBGb3JtYXR0ZWQgbGFiZWwuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXROYW1lTGFiZWwgPSBtZW1vaXplKFxuICAoc3VnZ2VzdGlvbiwgcGxhaW4gPSBmYWxzZSkgPT4ge1xuICAgIHN3aXRjaCAoc3VnZ2VzdGlvbi5sYXllcikge1xuICAgICAgY2FzZSAnY3VycmVudFBvc2l0aW9uJzpcbiAgICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uLmxhYmVsSWQsIHN1Z2dlc3Rpb24uYWRkcmVzc107XG4gICAgICBjYXNlICdzZWxlY3RGcm9tTWFwJzpcbiAgICAgIGNhc2UgJ293bkxvY2F0aW9ucyc6XG4gICAgICBjYXNlICdiYWNrJzpcbiAgICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uLmxhYmVsSWRdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlUGxhY2UnOlxuICAgICAgICByZXR1cm4gZm9ybWF0RmF2b3VyaXRlUGxhY2VMYWJlbChzdWdnZXN0aW9uLm5hbWUsIHN1Z2dlc3Rpb24uYWRkcmVzcyk7XG4gICAgICBjYXNlICdmYXZvdXJpdGVCaWtlUmVudGFsU3RhdGlvbic6XG4gICAgICBjYXNlICdiaWtlUmVudGFsU3RhdGlvbic6XG4gICAgICAgIHJldHVybiBbc3VnZ2VzdGlvbi5uYW1lXTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVJvdXRlJzpcbiAgICAgIGNhc2UgJ3JvdXRlLUJVUyc6XG4gICAgICBjYXNlICdyb3V0ZS1UUkFNJzpcbiAgICAgIGNhc2UgJ3JvdXRlLVJBSUwnOlxuICAgICAgY2FzZSAncm91dGUtU1VCV0FZJzpcbiAgICAgIGNhc2UgJ3JvdXRlLUZFUlJZJzpcbiAgICAgIGNhc2UgJ3JvdXRlLUZVTklDVUxBUic6XG4gICAgICBjYXNlICdyb3V0ZS1BSVJQTEFORSc6XG4gICAgICAgIHJldHVybiAhcGxhaW4gJiYgc3VnZ2VzdGlvbi5zaG9ydE5hbWVcbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5ndGZzSWQsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubW9kZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmxvbmdOYW1lLFxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogW1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uLnNob3J0TmFtZSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5sb25nTmFtZSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5hZ2VuY3kgPyBzdWdnZXN0aW9uLmFnZW5jeS5uYW1lIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgXTtcbiAgICAgIGNhc2UgJ3ZlbnVlJzpcbiAgICAgIGNhc2UgJ2FkZHJlc3MnOlxuICAgICAgY2FzZSAnc3RyZWV0JzpcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBzdWdnZXN0aW9uLm5hbWUsXG4gICAgICAgICAgc3VnZ2VzdGlvbi5sYWJlbC5yZXBsYWNlKFxuICAgICAgICAgICAgbmV3IFJlZ0V4cChgJHtlc2NhcGVSZWdFeHAoc3VnZ2VzdGlvbi5uYW1lKX0oLCk/KCApP2ApLFxuICAgICAgICAgICAgJycsXG4gICAgICAgICAgKSxcbiAgICAgICAgXTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVN0b3AnOlxuICAgICAgY2FzZSAnc3RvcCc6XG4gICAgICAgIHJldHVybiBwbGFpblxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uLm5hbWUgfHxcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLmxhYmVsIHx8XG4gICAgICAgICAgICAgICAgKHN1Z2dlc3Rpb24uYWRkcmVzcyAmJiBzdWdnZXN0aW9uLmFkZHJlc3Muc3BsaXQoJywnKVswXSksXG4gICAgICAgICAgICAgIGdldExvY2FsaXR5KHN1Z2dlc3Rpb24pLFxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogW1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uLm5hbWUsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uaWQsXG4gICAgICAgICAgICAgIGdldFN0b3BDb2RlKHN1Z2dlc3Rpb24pLFxuICAgICAgICAgICAgICBnZXRMb2NhbGl0eShzdWdnZXN0aW9uKSxcbiAgICAgICAgICAgIF07XG4gICAgICBjYXNlICdmYXZvdXJpdGVTdGF0aW9uJzpcbiAgICAgIGNhc2UgJ3N0YXRpb24nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBzdWdnZXN0aW9uLm5hbWUgfHxcbiAgICAgICAgICAgIHN1Z2dlc3Rpb24ubGFiZWwgfHxcbiAgICAgICAgICAgIChzdWdnZXN0aW9uLmFkZHJlc3MgJiYgc3VnZ2VzdGlvbi5hZGRyZXNzLnNwbGl0KCcsJylbMF0pLFxuICAgICAgICAgIGdldExvY2FsaXR5KHN1Z2dlc3Rpb24pLFxuICAgICAgICBdO1xuICAgIH1cbiAgfSxcbiAgKGl0ZW0sIHBsYWluKSA9PiB7XG4gICAgY29uc3QgaSA9IGNsb25lRGVlcChpdGVtKTtcbiAgICBpLnBsYWluID0gcGxhaW47XG4gICAgcmV0dXJuIGk7XG4gIH0sXG4pO1xuXG4vKipcbiAqIENoZWNrcyB0aGF0IGZlYXR1cmVzIGFyZSB1bmlxdWUgYnkgbGFiZWxcbiAqXG4gKiBAbmFtZSB1bmlxQnlMYWJlbFxuICogQHBhcmFtIHtBcnJheX0gZmVhdHVyZXMgQXJyYXkgb2YgZmVhdHVyZXNcbiAqIEByZXR1cm5zIHtBcnJheX0gIEFycmF5IG9mIHVuaXF1ZSBmZWF0dXJlc1xuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLnVuaXFCeUxhYmVsKGZlYXR1cmVzKTtcbiAqIC8vPSBBcnJheSgyKVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1bmlxQnlMYWJlbChmZWF0dXJlcykge1xuICByZXR1cm4gdW5pcVdpdGgoZmVhdHVyZXMsIChmZWF0MSwgZmVhdDIpID0+IHtcbiAgICBjb25zdCBib29sID1cbiAgICAgIGlzRXF1YWwoZ2V0TmFtZUxhYmVsKGZlYXQxLnByb3BlcnRpZXMpLCBnZXROYW1lTGFiZWwoZmVhdDIucHJvcGVydGllcykpICYmXG4gICAgICBmZWF0MS5wcm9wZXJ0aWVzLmxheWVyID09PSBmZWF0Mi5wcm9wZXJ0aWVzLmxheWVyO1xuICAgIGlmIChcbiAgICAgIGJvb2wgJiZcbiAgICAgIChmZWF0MS50eXBlID09PSAnRnV0dXJlUm91dGUnIHx8IGZlYXQyLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBib29sO1xuICB9KTtcbn1cbiIsImltcG9ydCBnZXQgZnJvbSAnbG9kYXNoL2dldCc7XG5cbi8qKlxuICogRnVuY3Rpb24gdGhhdCBmaWx0ZXJzIGxpc3QgbWF0Y2hpbmcgdG8gaW5wdXQuXG4gKlxuICogQG5hbWUgZmlsdGVyTWF0Y2hpbmdUb0lucHV0XG4gKiBAcGFyYW0ge0FycmF5fSBsaXN0IExpc3QgY29udGFpbmluIG9iamVjdHMgZS5nKCAge1xuICogICAgICAgICB0eXBlOiAnRmVhdHVyZSdcbiAqICAgICAgICAgcHJvcGVydGllczoge1xuICogICAgICAgICAgIGxhYmVsOiAndGVzdGFkZHJlc3M0JyxcbiAqICAgICAgICAgICBsYXllcjogJ2FkZHJlc3MnLFxuICogICAgICAgICAgIG5hbWU6ICd0ZXN0YWRkcmVzczQnLFxuICogICAgICAgICB9LFxuICogICAgICAgICBnZW9tZXRyeTogeyBjb29yZGluYXRlczogW2xvbiwgbGF0XSB9LFxuICogICAgICAgfSwpXG4gKiBAcGFyYW0ge1N0cmluZ30gSW5wdXQgSW5wdXQgZ2l2ZW4gZm9yIGZpbHRlcmluZyB0aGUgbGlzdFxuICogQHBhcmFtIHtBcnJheX0gZmllbGRzIExpc3Qgb2YgZmllbGRzIHRoYXQgbGlzdCBpcyBmaWx0ZXJlZCBieSBlLmcgKFtwcm9wZXJ0aWVzLmxhYmVsLCBwcm9wZXJ0aWVzLm5hbWVdKVxuICogQHJldHVybnMge0FycmF5fSBGaWx0ZXJlZCBBcnJheS5cbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC11dGlsLmZpbHRlck1hdGNoaW5nVG9JbnB1dChbe3R5cGU6IGZlYXR1cmUsIHByb3BlcnRpZXMgeyAuLi4gbmFtZTogdGVzdGFkZHJlc3M0IH0gLi4uIH1dLCAndGVzdGFkZHJlc3M0JywgJ3Byb3BlcnRpZXMubmFtZScpO1xuICogLy89IExpc3QgY29udGFpbmluZyBvYmplY3Qgd2l0aCBnaXZlbiBuYW1lLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQobGlzdCwgSW5wdXQsIGZpZWxkcykge1xuICBpZiAodHlwZW9mIElucHV0ID09PSAnc3RyaW5nJyAmJiBJbnB1dC5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgaW5wdXQgPSBJbnB1dC50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICBjb25zdCBtdWx0aVdvcmQgPSBpbnB1dC5pbmNsdWRlcygnICcpIHx8IGlucHV0LmluY2x1ZGVzKCcsJyk7XG4gICAgcmV0dXJuIGxpc3QuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgbGV0IHBhcnRzID0gW107XG4gICAgICBmaWVsZHMuZm9yRWFjaChwTmFtZSA9PiB7XG4gICAgICAgIGxldCB2YWx1ZSA9IGdldChpdGVtLCBwTmFtZSk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICFtdWx0aVdvcmQgJiZcbiAgICAgICAgICAocE5hbWUgPT09ICdwcm9wZXJ0aWVzLmxhYmVsJyB8fCBwTmFtZSA9PT0gJ2FkZHJlc3MnKSAmJlxuICAgICAgICAgIHZhbHVlXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZTogZHJvcCBsYXN0IHBhcnRzIGkuZS4gY2l0eSBhbmQgbmVpZ2hib3VyaG9vZFxuICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJywnKTtcbiAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgdmFsdWUuc3BsaWNlKHZhbHVlLmxlbmd0aCAtIDIsIDIpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdmFsdWUuc3BsaWNlKHZhbHVlLmxlbmd0aCAtIDEsIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmpvaW4oJywnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAobXVsdGlXb3JkKSB7XG4gICAgICAgICAgICBwYXJ0cyA9IHBhcnRzLmNvbmNhdCh2YWx1ZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFydHMgPSBwYXJ0cy5jb25jYXQoXG4gICAgICAgICAgICAgIHZhbHVlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvLC9nLCAnICcpLnNwbGl0KCcgJyksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChwYXJ0c1tpXS5pbmRleE9mKGlucHV0KSA9PT0gMCkge1xuICAgICAgICAgIC8vIGFjY2VwdCBtYXRjaCBvbmx5IGF0IHdvcmQgc3RhcnRcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGxpc3Q7XG59XG4iLCIvKipcbiAqIFNlcmlhbGl6ZXMgb2JqZWN0c1xuICpcbiAqIEBuYW1lIHNlcmlhbGl6ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBPYmplY3QgdG8gYmUgc2VyaWFsaXplZFxuICogQHBhcmFtIHtBbnl9IHByZWZpeFxuICogQHJldHVybnMge1N0cmluZ30gU2VyaWFsaXplZCBvYmplY3RcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC5zZXJpYWxpemUocGFyYW0xLCBwYXJhbTIpO1xuICogLy89dHJ1ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzZXJpYWxpemUob2JqLCBwcmVmaXgpIHtcbiAgaWYgKCFvYmopIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iailcbiAgICAubWFwKHAgPT4ge1xuICAgICAgY29uc3QgayA9IHByZWZpeCB8fCBwO1xuICAgICAgY29uc3QgdiA9IG9ialtwXTtcblxuICAgICAgcmV0dXJuIHR5cGVvZiB2ID09PSAnb2JqZWN0J1xuICAgICAgICA/IHNlcmlhbGl6ZSh2LCBrKVxuICAgICAgICA6IGAke2VuY29kZVVSSUNvbXBvbmVudChrKX09JHtlbmNvZGVVUklDb21wb25lbnQodil9YDtcbiAgICB9KVxuICAgIC5qb2luKCcmJyk7XG59XG4iLCJpbXBvcnQgc2VyaWFsaXplIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1zZXJpYWxpemUnO1xuLyoqXG4gKiAgUmV0dXJuIFByb21pc2UgZm9yIGEgdXJsIGpzb24gZ2V0IHJlcXVlc3RcbiAqXG4gKiBAbmFtZSBnZXRKc29uXG4gKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gKiBAcGFyYW0ge0FycmF5fSBwYXJhbXNcbiAqIEByZXR1cm5zIHtPYmplY3R9IHJlc3BvbnNlXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwuZ2V0SnNvbihwYXJhbTEsIHBhcmFtMik7XG4gKiAvLz1yZXNwb25zZVxuICovXG5jb25zdCBheGlvcyA9IHJlcXVpcmUoJ2F4aW9zJykuZGVmYXVsdDtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0SnNvbih1cmwsIHBhcmFtcykge1xuICByZXR1cm4gYXhpb3NcbiAgICAuZ2V0KFxuICAgICAgZW5jb2RlVVJJKHVybCkgK1xuICAgICAgICAocGFyYW1zXG4gICAgICAgICAgPyAodXJsLnNlYXJjaCgvXFw/LykgPT09IC0xID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZShwYXJhbXMpXG4gICAgICAgICAgOiAnJyksXG4gICAgICB7XG4gICAgICAgIHRpbWVvdXQ6IDEwMDAwLFxuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKVxuICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICByZXR1cm4gcmVzLmRhdGE7XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgZ2V0SnNvbiBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWpzb24nO1xuXG5jb25zdCBERUZBVUxUX1BFTElBU19VUkwgPSAnaHR0cHM6Ly9hcGkuZGlnaXRyYW5zaXQuZmkvZ2VvY29kaW5nL3YxL3NlYXJjaCc7XG4vKipcbiAqIDxERVNDUklQVElPTj5cbiAqXG4gKiBAbmFtZSBnZXRHZW9jb2RpbmdSZXN1bHRzXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoU3RyaW5nXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoUGFyYW1zIChPcHRpb25hbCkgUGFyYW1ldGVycyBhcHBlbmRlZCB0byB1cmwsIGJhc2ljYWxseSBib3ggLyBwb2x5Z29uIHRvIHJlc3RyaWN0IHNlYXJjaCBhcmVhXG4gKiBAcGFyYW0ge1N0cmluZ30gbGFuZyAoT3B0aW9uYWwpIHNlYXJjaCBsYW5ndWFnZVxuICogQHBhcmFtIHtPYmplY3R9IGZvY3VzUG9pbnQgKE9wdGlvbmFsKSBPd24gUG9zaXRpb24gKFBFTElBUyBBUEkpXG4gKiBAcGFyYW0ge1N0cmluZ30gc291cmNlcyAoT3B0aW9uYWwpIHNlYXJjaCBzb3VyY2VzIChlLmcgT1NNLCBHVEZTLi4pXG4gKiBAcGFyYW0ge09iamVjdH0gbWluaW1hbFJlZ2V4cCAoT3B0aW9uYWwpIFJlZ2V4cCBmb3IgdGVzdGluZ1xuICogQHBhcmFtIHsqfSBnZW9jb2RpbmdMYXllcnMgKE9wdGlvbmFsKSBBcnJheSBvZiBzdHJpbmdzIHRoYXQgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggbGF5ZXJzIGlzIHNlYXJjaGVkLCBlLmcuIFsndmVudWUnLCAnYWRkcmVzcycsICdzdG9wJ11cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFJlc3VsdHMgaW4gSlNPTiBmb3JtXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwuZ2V0R2VvY29kaW5nUmVzdWx0cyhcInJlc3VsdFwiKTtcbiAqIC8vPSBlLmcuIHt0ZXh0OlwicmVzdWx0XCJ9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEdlb2NvZGluZ1Jlc3VsdHMoXG4gIHNlYXJjaFN0cmluZyxcbiAgc2VhcmNoUGFyYW1zLFxuICBsYW5nLFxuICBmb2N1c1BvaW50LFxuICBzb3VyY2VzLFxuICBwZWxpYXNVcmwsXG4gIG1pbmltYWxSZWdleHAsXG4gIGdlb2NvZGluZ0xheWVycyxcbikge1xuICBjb25zdCB0ZXh0ID0gc2VhcmNoU3RyaW5nID8gc2VhcmNoU3RyaW5nLnRyaW0oKSA6IG51bGw7XG4gIGlmIChcbiAgICB0ZXh0ID09PSB1bmRlZmluZWQgfHxcbiAgICB0ZXh0ID09PSBudWxsIHx8XG4gICAgdGV4dC5sZW5ndGggPCAxIHx8XG4gICAgKG1pbmltYWxSZWdleHAgJiYgIW1pbmltYWxSZWdleHAudGVzdCh0ZXh0KSlcbiAgKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG4gIH1cbiAgY29uc3QgUEVMSUFTX1VSTCA9IHBlbGlhc1VybCB8fCBERUZBVUxUX1BFTElBU19VUkw7XG4gIGxldCBvcHRzID0geyB0ZXh0LCAuLi5zZWFyY2hQYXJhbXMsIC4uLmZvY3VzUG9pbnQsIGxhbmcgfTtcbiAgaWYgKHNvdXJjZXMpIHtcbiAgICBvcHRzID0geyAuLi5vcHRzLCBzb3VyY2VzIH07XG4gIH1cbiAgaWYgKGdlb2NvZGluZ0xheWVycykge1xuICAgIGNvbnN0IGxheWVycyA9IGdlb2NvZGluZ0xheWVycy50b1N0cmluZygpO1xuICAgIG9wdHMgPSB7IC4uLm9wdHMsIGxheWVycyB9O1xuICB9XG4gIHJldHVybiBnZXRKc29uKFBFTElBU19VUkwsIG9wdHMpLnRoZW4ocmVzID0+IHtcbiAgICByZXR1cm4gcmVzLmZlYXR1cmVzO1xuICB9KTtcbn1cbiIsImltcG9ydCBkZWJvdW5jZSBmcm9tICdsb2Rhc2gvZGVib3VuY2UnO1xuaW1wb3J0IGZsYXR0ZW4gZnJvbSAnbG9kYXNoL2ZsYXR0ZW4nO1xuaW1wb3J0IHRha2UgZnJvbSAnbG9kYXNoL3Rha2UnO1xuaW1wb3J0IHtcbiAgc29ydFNlYXJjaFJlc3VsdHMsXG4gIGlzU3RvcCxcbn0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWhlbHBlcnMnO1xuaW1wb3J0IHVuaXFCeUxhYmVsIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC11bmlxLWJ5LWxhYmVsJztcbmltcG9ydCBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWZpbHRlci1tYXRjaGluZy10by1pbnB1dCc7XG5pbXBvcnQgZ2V0R2VvY29kaW5nUmVzdWx0cyBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWdlb2NvZGluZy1yZXN1bHRzJztcbmltcG9ydCBnZXRKc29uIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtanNvbic7XG5cbmZ1bmN0aW9uIGdldFN0b3BzRnJvbUdlb2NvZGluZyhzdG9wcywgVVJMX1BFTElBU19QTEFDRSkge1xuICBpZiAoIXN0b3BzIHx8IHN0b3BzLmxlbmd0aCA8IDEpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbiAgfVxuICBsZXQgZ2lkcyA9ICcnO1xuICBjb25zdCBzdG9wc1dpdGhHaWRzID0gc3RvcHMubWFwKHN0b3AgPT4ge1xuICAgIGNvbnN0IHR5cGUgPSBzdG9wLnR5cGUgPT09ICdzdG9wJyA/ICdzdG9wJyA6ICdzdGF0aW9uJztcbiAgICBsZXQgZ2lkID0gYGd0ZnMke3N0b3AuZ3Rmc0lkLnNwbGl0KCc6JylbMF0udG9Mb3dlckNhc2UoKX06JHt0eXBlfTpHVEZTOiR7XG4gICAgICBzdG9wLmd0ZnNJZFxuICAgIH1gO1xuICAgIGlmIChzdG9wLmNvZGUpIHtcbiAgICAgIGdpZCArPSBgIyR7c3RvcC5jb2RlfWA7XG4gICAgfVxuICAgIGdpZHMgKz0gYCR7Z2lkfSxgO1xuICAgIHJldHVybiB7IC4uLnN0b3AsIGdpZCB9O1xuICB9KTtcbiAgY29uc3Qgc3RvcFN0YXRpb25NYXAgPSBzdG9wc1dpdGhHaWRzLnJlZHVjZShmdW5jdGlvbiAobWFwLCBzdG9wT3JTdGF0aW9uKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgbWFwW3N0b3BPclN0YXRpb24uZ2lkXSA9IHN0b3BPclN0YXRpb247XG4gICAgcmV0dXJuIG1hcDtcbiAgfSwge30pO1xuICByZXR1cm4gZ2V0SnNvbihVUkxfUEVMSUFTX1BMQUNFLCB7XG4gICAgaWRzOiBnaWRzLnNsaWNlKDAsIC0xKSxcbiAgICAvLyBsYW5nOiBjb250ZXh0LmdldFN0b3JlKCdQcmVmZXJlbmNlc1N0b3JlJykuZ2V0TGFuZ3VhZ2UoKSwgVE9ETyBlbmFibGUgdGhpcyB3aGVuIE9UUCBzdXBwb3J0cyB0cmFuc2xhdGlvbnNcbiAgfSkudGhlbihyZXMgPT4ge1xuICAgIHJldHVybiByZXMuZmVhdHVyZXMubWFwKHN0b3AgPT4ge1xuICAgICAgY29uc3QgZmF2b3VyaXRlID0ge1xuICAgICAgICB0eXBlOiAnRmF2b3VyaXRlU3RvcCcsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBhZGRlbmR1bTogc3RvcC5wcm9wZXJ0aWVzLmFkZGVuZHVtLFxuICAgICAgICAgIGdpZDogc3RvcFN0YXRpb25NYXBbc3RvcC5wcm9wZXJ0aWVzLmdpZF0uZ2lkLFxuICAgICAgICAgIGNvZGU6IHN0b3BTdGF0aW9uTWFwW3N0b3AucHJvcGVydGllcy5naWRdLmNvZGUsXG4gICAgICAgICAgZ3Rmc0lkOiBzdG9wU3RhdGlvbk1hcFtzdG9wLnByb3BlcnRpZXMuZ2lkXS5ndGZzSWQsXG4gICAgICAgICAgbGFzdFVwZGF0ZWQ6IHN0b3BTdGF0aW9uTWFwW3N0b3AucHJvcGVydGllcy5naWRdLmxhc3RVcGRhdGVkLFxuICAgICAgICAgIGZhdm91cml0ZUlkOiBzdG9wU3RhdGlvbk1hcFtzdG9wLnByb3BlcnRpZXMuZ2lkXS5mYXZvdXJpdGVJZCxcbiAgICAgICAgICBhZGRyZXNzOiBzdG9wLnByb3BlcnRpZXMubGFiZWwsXG4gICAgICAgICAgbGF5ZXI6IGlzU3RvcChzdG9wLnByb3BlcnRpZXMpID8gJ2Zhdm91cml0ZVN0b3AnIDogJ2Zhdm91cml0ZVN0YXRpb24nLFxuICAgICAgICB9LFxuICAgICAgICBnZW9tZXRyeTogc3RvcC5nZW9tZXRyeSxcbiAgICAgIH07XG4gICAgICByZXR1cm4gZmF2b3VyaXRlO1xuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGdldEZhdm91cml0ZUxvY2F0aW9ucyhmYXZvdXJpdGVzLCBpbnB1dCkge1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgIGZpbHRlck1hdGNoaW5nVG9JbnB1dChmYXZvdXJpdGVzLCBpbnB1dCwgWydhZGRyZXNzJywgJ25hbWUnXSkubWFwKGl0ZW0gPT4gKHtcbiAgICAgIHR5cGU6ICdGYXZvdXJpdGVQbGFjZScsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIC4uLml0ZW0sXG4gICAgICAgIGxhYmVsOiBpdGVtLm5hbWUsXG4gICAgICAgIGxheWVyOiAnZmF2b3VyaXRlUGxhY2UnLFxuICAgICAgfSxcbiAgICAgIGdlb21ldHJ5OiB7IHR5cGU6ICdQb2ludCcsIGNvb3JkaW5hdGVzOiBbaXRlbS5sb24sIGl0ZW0ubGF0XSB9LFxuICAgIH0pKSxcbiAgKTtcbn1cbmZ1bmN0aW9uIHNlbGVjdFBvc2l0aW9uRm9tTWFwKGlucHV0KSB7XG4gIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnIHx8IGlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnU2VsZWN0RnJvbU1hcCcsXG4gICAgICAgIGFkZHJlc3M6ICdTZWxlY3RGcm9tTWFwJyxcbiAgICAgICAgbGF0OiBudWxsLFxuICAgICAgICBsb246IG51bGwsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBsYWJlbElkOiAnc2VsZWN0LWZyb20tbWFwJyxcbiAgICAgICAgICBsYXllcjogJ3NlbGVjdEZyb21NYXAnLFxuICAgICAgICAgIGFkZHJlc3M6ICdTZWxlY3RGcm9tTWFwJyxcbiAgICAgICAgICBsYXQ6IG51bGwsXG4gICAgICAgICAgbG9uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgIHR5cGU6ICdQb2ludCcsXG4gICAgICAgICAgY29vcmRpbmF0ZXM6IFtdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdKTtcbiAgfVxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudFBvc2l0aW9uSWZFbXB0eShpbnB1dCwgcG9zaXRpb24pIHtcbiAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycgfHwgaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdDdXJyZW50TG9jYXRpb24nLFxuICAgICAgICBhZGRyZXNzOiBwb3NpdGlvbi5hZGRyZXNzLFxuICAgICAgICBsYXQ6IHBvc2l0aW9uLmxhdCxcbiAgICAgICAgbG9uOiBwb3NpdGlvbi5sb24sXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBsYWJlbElkOiAndXNlLW93bi1wb3NpdGlvbicsXG4gICAgICAgICAgbGF5ZXI6ICdjdXJyZW50UG9zaXRpb24nLFxuICAgICAgICAgIGFkZHJlc3M6IHBvc2l0aW9uLmFkZHJlc3MsXG4gICAgICAgICAgbGF0OiBwb3NpdGlvbi5sYXQsXG4gICAgICAgICAgbG9uOiBwb3NpdGlvbi5sb24sXG4gICAgICAgIH0sXG4gICAgICAgIGdlb21ldHJ5OiB7XG4gICAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgICBjb29yZGluYXRlczogW3Bvc2l0aW9uLmxvbiwgcG9zaXRpb24ubGF0XSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXSk7XG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbn1cblxuZnVuY3Rpb24gc2VsZWN0RnJvbU93bkxvY2F0aW9ucyhpbnB1dCkge1xuICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJyB8fCBpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnLFxuICAgICAgICBhZGRyZXNzOiAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycsXG4gICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgbG9uOiBudWxsLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgbGFiZWxJZDogJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnLFxuICAgICAgICAgIGxheWVyOiAnb3duTG9jYXRpb25zJyxcbiAgICAgICAgICBhZGRyZXNzOiAnc2VsZWN0RnJvbU93bkxvY2F0aW9ucycsXG4gICAgICAgICAgbGF0OiBudWxsLFxuICAgICAgICAgIGxvbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgICAgIGNvb3JkaW5hdGVzOiBbXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXSk7XG4gIH1cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG59XG5cbmZ1bmN0aW9uIGdldEJhY2tTdWdnZXN0aW9uKCkge1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtcbiAgICB7XG4gICAgICB0eXBlOiAnYmFjaycsXG4gICAgICBhZGRyZXNzOiAnYmFjaycsXG4gICAgICBsYXQ6IG51bGwsXG4gICAgICBsb246IG51bGwsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGxhYmVsSWQ6ICdiYWNrJyxcbiAgICAgICAgbGF5ZXI6ICdiYWNrJyxcbiAgICAgICAgYWRkcmVzczogJ2JhY2snLFxuICAgICAgICBsYXQ6IG51bGwsXG4gICAgICAgIGxvbjogbnVsbCxcbiAgICAgIH0sXG4gICAgICBnZW9tZXRyeToge1xuICAgICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgICBjb29yZGluYXRlczogW10sXG4gICAgICB9LFxuICAgIH0sXG4gIF0pO1xufVxuXG5mdW5jdGlvbiBnZXRGYXZvdXJpdGVTdG9wcyhzdG9wc0FuZFN0YXRpb25zLCBpbnB1dCkge1xuICByZXR1cm4gc3RvcHNBbmRTdGF0aW9ucy50aGVuKHN0b3BzID0+IHtcbiAgICByZXR1cm4gZmlsdGVyTWF0Y2hpbmdUb0lucHV0KHN0b3BzLCBpbnB1dCwgW1xuICAgICAgJ3Byb3BlcnRpZXMubmFtZScsXG4gICAgICAncHJvcGVydGllcy5uYW1lJyxcbiAgICAgICdwcm9wZXJ0aWVzLmFkZHJlc3MnLFxuICAgIF0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0T2xkU2VhcmNoZXMob2xkU2VhcmNoZXMsIGlucHV0LCBkcm9wTGF5ZXJzKSB7XG4gIGxldCBtYXRjaGluZ09sZFNlYXJjaGVzID0gZmlsdGVyTWF0Y2hpbmdUb0lucHV0KG9sZFNlYXJjaGVzLCBpbnB1dCwgW1xuICAgICdwcm9wZXJ0aWVzLm5hbWUnLFxuICAgICdwcm9wZXJ0aWVzLmxhYmVsJyxcbiAgICAncHJvcGVydGllcy5hZGRyZXNzJyxcbiAgICAncHJvcGVydGllcy5zaG9ydE5hbWUnLFxuICAgICdwcm9wZXJ0aWVzLmxvbmdOYW1lJyxcbiAgXSk7XG4gIGlmIChkcm9wTGF5ZXJzKSB7XG4gICAgLy8gZG9uJ3Qgd2FudCB0aGVzZVxuICAgIG1hdGNoaW5nT2xkU2VhcmNoZXMgPSBtYXRjaGluZ09sZFNlYXJjaGVzLmZpbHRlcihcbiAgICAgIGl0ZW0gPT4gIWRyb3BMYXllcnMuaW5jbHVkZXMoaXRlbS5wcm9wZXJ0aWVzLmxheWVyKSxcbiAgICApO1xuICB9XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgdGFrZShtYXRjaGluZ09sZFNlYXJjaGVzLCAxMCkubWFwKGl0ZW0gPT4ge1xuICAgICAgY29uc3QgbmV3SXRlbSA9IHtcbiAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgdHlwZTogJ09sZFNlYXJjaCcsXG4gICAgICAgIHRpbWV0YWJsZUNsaWNrZWQ6IGZhbHNlLCAvLyByZXNldCBsYXRlc3Qgc2VsZWN0aW9uIGFjdGlvblxuICAgICAgICBhcnJvd0NsaWNrZWQ6IGZhbHNlLFxuICAgICAgfTtcbiAgICAgIGRlbGV0ZSBuZXdJdGVtLnByb3BlcnRpZXMuY29uZmlkZW5jZTtcbiAgICAgIHJldHVybiBuZXdJdGVtO1xuICAgIH0pLFxuICApO1xufVxuXG5mdW5jdGlvbiBoYXNGYXZvdXJpdGVzKGNvbnRleHQsIGxvY2F0aW9ucywgc3RvcHMpIHtcbiAgY29uc3QgZmF2b3VyaXRlTG9jYXRpb25zID0gbG9jYXRpb25zKGNvbnRleHQpO1xuICBpZiAoZmF2b3VyaXRlTG9jYXRpb25zICYmIGZhdm91cml0ZUxvY2F0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgY29uc3QgZmF2b3VyaXRlU3RvcHMgPSBzdG9wcyhjb250ZXh0KTtcbiAgcmV0dXJuIGZhdm91cml0ZVN0b3BzICYmIGZhdm91cml0ZVN0b3BzLmxlbmd0aCA+IDA7XG59XG5cbmNvbnN0IHJvdXRlTGF5ZXJzID0gW1xuICAncm91dGUtVFJBTScsXG4gICdyb3V0ZS1CVVMnLFxuICAncm91dGUtUkFJTCcsXG4gICdyb3V0ZS1GRVJSWScsXG4gICdyb3V0ZS1TVUJXQVknLFxuICAncm91dGUtQUlSUExBTkUnLFxuXTtcbmNvbnN0IGxvY2F0aW9uTGF5ZXJzID0gWydmYXZvdXJpdGVQbGFjZScsICd2ZW51ZScsICdhZGRyZXNzJywgJ3N0cmVldCddO1xuY29uc3QgcGFya2luZ0xheWVycyA9IFsnY2FycGFyaycsICdiaWtlcGFyayddO1xuLyoqXG4gKiBFeGVjdXRlcyB0aGUgc2VhcmNoXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VhcmNoUmVzdWx0cyhcbiAgdGFyZ2V0cyxcbiAgc291cmNlcyxcbiAgdHJhbnNwb3J0TW9kZSxcbiAgc2VhcmNoQ29udGV4dCxcbiAgZmlsdGVyUmVzdWx0cyxcbiAgZ2VvY29kaW5nU2l6ZSxcbiAgeyBpbnB1dCB9LFxuICBjYWxsYmFjayxcbiAgcGF0aE9wdHMsXG4gIHJlZlBvaW50LFxuKSB7XG4gIGNvbnN0IHtcbiAgICBnZXRQb3NpdGlvbnMsXG4gICAgZ2V0RmF2b3VyaXRlTG9jYXRpb25zOiBsb2NhdGlvbnMsXG4gICAgZ2V0T2xkU2VhcmNoZXM6IHByZXZTZWFyY2hlcyxcbiAgICBnZXRGYXZvdXJpdGVTdG9wczogc3RvcHMsXG4gICAgcGFya2luZ0FyZWFTb3VyY2VzLFxuICAgIGdldExhbmd1YWdlLFxuICAgIGdldFN0b3BBbmRTdGF0aW9uc1F1ZXJ5LFxuICAgIGdldEZhdm91cml0ZUJpa2VSZW50YWxTdGF0aW9uc1F1ZXJ5LFxuICAgIGdldEZhdm91cml0ZUJpa2VSZW50YWxTdGF0aW9ucyxcbiAgICBnZXRGYXZvdXJpdGVSb3V0ZXNRdWVyeSxcbiAgICBnZXRGYXZvdXJpdGVSb3V0ZXMsXG4gICAgZ2V0Um91dGVzUXVlcnksXG4gICAgY29udGV4dCxcbiAgICBpc1BlbGlhc0xvY2F0aW9uQXdhcmU6IGxvY2F0aW9uQXdhcmUsXG4gICAgbWluaW1hbFJlZ2V4cCxcbiAgICBsaW5lUmVnZXhwLFxuICAgIFVSTF9QRUxJQVMsXG4gICAgVVJMX1BFTElBU19QTEFDRSxcbiAgICBmZWVkSURzLFxuICAgIGdlb2NvZGluZ1NlYXJjaFBhcmFtcyxcbiAgICBnZW9jb2RpbmdTb3VyY2VzLFxuICAgIGdldEZ1dHVyZVJvdXRlcyxcbiAgICBjaXR5QmlrZU5ldHdvcmtzLFxuICB9ID0gc2VhcmNoQ29udGV4dDtcbiAgLy8gaWYgbm8gdGFyZ2V0cyBhcmUgcHJvdmlkZWQsIHNlYXJjaCB0aGVtIGFsbC5cbiAgY29uc3QgYWxsVGFyZ2V0cyA9ICF0YXJnZXRzIHx8IHRhcmdldHMubGVuZ3RoID09PSAwO1xuICAvLyBpZiBubyBzb3VyY2VzIGFyZSBwcm92aWRlZCwgdXNlIHRoZW0gYWxsLlxuICBjb25zdCBhbGxTb3VyY2VzID0gIXNvdXJjZXMgfHwgc291cmNlcy5sZW5ndGggPT09IDA7XG4gIGNvbnN0IHBvc2l0aW9uID0gZ2V0UG9zaXRpb25zKGNvbnRleHQpO1xuICBjb25zdCBzZWFyY2hDb21wb25lbnRzID0gW107XG4gIGNvbnN0IHNlYXJjaGVzID0geyB0eXBlOiAnYWxsJywgdGVybTogaW5wdXQsIHJlc3VsdHM6IFtdIH07XG4gIGNvbnN0IGxhbmd1YWdlID0gZ2V0TGFuZ3VhZ2UoY29udGV4dCk7XG4gIGNvbnN0IGZvY3VzUG9pbnQgPVxuICAgIGxvY2F0aW9uQXdhcmUgJiYgcmVmUG9pbnQ/LmxhdCAmJiByZWZQb2ludD8ubG9uXG4gICAgICA/IHtcbiAgICAgICAgICAvLyBSb3VuZCBjb29yZGluYXRlcyB0byBhcHByb3ggMSBrbSwgaW4gb3JkZXIgdG8gaW1wcm92ZSBjYWNoaW5nXG4gICAgICAgICAgJ2ZvY3VzLnBvaW50LmxhdCc6IHJlZlBvaW50LmxhdC50b0ZpeGVkKDMpLFxuICAgICAgICAgICdmb2N1cy5wb2ludC5sb24nOiByZWZQb2ludC5sb24udG9GaXhlZCgzKSxcbiAgICAgICAgfVxuICAgICAgOiB7fTtcbiAgY29uc3QgbW9kZSA9IHRyYW5zcG9ydE1vZGUgPyB0cmFuc3BvcnRNb2RlLnNwbGl0KCctJylbMV0gOiB1bmRlZmluZWQ7XG4gIGlmIChcbiAgICB0YXJnZXRzLmluY2x1ZGVzKCdDdXJyZW50UG9zaXRpb24nKSAmJlxuICAgIHBvc2l0aW9uLnN0YXR1cyAhPT0gJ2dlb2xvY2F0aW9uLW5vdC1zdXBwb3J0ZWQnXG4gICkge1xuICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChnZXRDdXJyZW50UG9zaXRpb25JZkVtcHR5KGlucHV0LCBwb3NpdGlvbikpO1xuICB9XG4gIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ01hcFBvc2l0aW9uJykpIHtcbiAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goc2VsZWN0UG9zaXRpb25Gb21NYXAoaW5wdXQpKTtcbiAgfVxuICBpZiAodGFyZ2V0cy5pbmNsdWRlcygnRnV0dXJlUm91dGVzJykpIHtcbiAgICBjb25zdCBpdGVtcyA9IGdldEZ1dHVyZVJvdXRlcyhjb250ZXh0KTtcbiAgICBzZWFyY2hDb21wb25lbnRzLnB1c2godGFrZShpdGVtcywgMykpO1xuICB9XG4gIGlmIChcbiAgICB0YXJnZXRzLmluY2x1ZGVzKCdTZWxlY3RGcm9tT3duTG9jYXRpb25zJykgJiZcbiAgICBoYXNGYXZvdXJpdGVzKGNvbnRleHQsIGxvY2F0aW9ucywgc3RvcHMpXG4gICkge1xuICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChzZWxlY3RGcm9tT3duTG9jYXRpb25zKGlucHV0KSk7XG4gIH1cbiAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnTG9jYXRpb25zJykpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWRlc3RydWN0dXJpbmdcbiAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBnZW9jb2RpbmdTZWFyY2hQYXJhbXM7XG4gICAgaWYgKHNvdXJjZXMuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKSB7XG4gICAgICBjb25zdCBmYXZvdXJpdGVMb2NhdGlvbnMgPSBsb2NhdGlvbnMoY29udGV4dCk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goZ2V0RmF2b3VyaXRlTG9jYXRpb25zKGZhdm91cml0ZUxvY2F0aW9ucywgaW5wdXQpKTtcbiAgICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdCYWNrJykpIHtcbiAgICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKGdldEJhY2tTdWdnZXN0aW9uKCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0RhdGFzb3VyY2UnKSkge1xuICAgICAgY29uc3QgZ2VvY29kaW5nTGF5ZXJzID0gWydzdGF0aW9uJywgJ3ZlbnVlJywgJ2FkZHJlc3MnLCAnc3RyZWV0J107XG4gICAgICBjb25zdCBmZWVkaXMgPSBmZWVkSURzLm1hcCh2ID0+IGBndGZzJHt2fWApO1xuICAgICAgY29uc3QgZ2Vvc291cmNlcyA9IGdlb2NvZGluZ1NvdXJjZXMuY29uY2F0KGZlZWRpcykuam9pbignLCcpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBmb2N1c1BvaW50LFxuICAgICAgICAgIGdlb3NvdXJjZXMsXG4gICAgICAgICAgVVJMX1BFTElBUyxcbiAgICAgICAgICBtaW5pbWFsUmVnZXhwLFxuICAgICAgICAgIGdlb2NvZGluZ0xheWVycyxcbiAgICAgICAgICByZWZQb2ludCxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0hpc3RvcnknKSkge1xuICAgICAgY29uc3QgbG9jYXRpb25IaXN0b3J5ID0gcHJldlNlYXJjaGVzKGNvbnRleHQsICdlbmRwb2ludCcpO1xuICAgICAgY29uc3QgZHJvcExheWVycyA9IFtcbiAgICAgICAgJ2N1cnJlbnRQb3NpdGlvbicsXG4gICAgICAgICdzZWxlY3RGcm9tTWFwJyxcbiAgICAgICAgJ2Z1dHVyZVJvdXRlJyxcbiAgICAgICAgJ293bkxvY2F0aW9ucycsXG4gICAgICAgICdiaWtlUmVudGFsU3RhdGlvbicsXG4gICAgICAgICdiaWtlcGFyaycsXG4gICAgICAgICdjYXJwYXJrJyxcbiAgICAgICAgJ3N0b3AnLFxuICAgICAgICAnYmFjaycsXG4gICAgICBdO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnJvdXRlTGF5ZXJzKTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChnZXRPbGRTZWFyY2hlcyhsb2NhdGlvbkhpc3RvcnksIGlucHV0LCBkcm9wTGF5ZXJzKSk7XG4gICAgfVxuICB9XG4gIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ1BhcmtpbmdBcmVhcycpKSB7XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnRGF0YXNvdXJjZScpKSB7XG4gICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBnZW9jb2RpbmdTZWFyY2hQYXJhbXM7XG4gICAgICBpZiAoZ2VvY29kaW5nU2l6ZSAmJiBnZW9jb2RpbmdTaXplICE9PSAxMCkge1xuICAgICAgICBzZWFyY2hQYXJhbXMuc2l6ZSA9IGdlb2NvZGluZ1NpemU7XG4gICAgICB9XG4gICAgICBjb25zdCBnZW9jb2RpbmdMYXllcnMgPSBbJ2NhcnBhcmsnLCAnYmlrZXBhcmsnXTtcbiAgICAgIGNvbnN0IGZlZWRJZHMgPSBwYXJraW5nQXJlYVNvdXJjZXMgPyBwYXJraW5nQXJlYVNvdXJjZXMuam9pbignLCcpIDogbnVsbDtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0R2VvY29kaW5nUmVzdWx0cyhcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBzZWFyY2hQYXJhbXMsXG4gICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgZm9jdXNQb2ludCxcbiAgICAgICAgICBmZWVkSWRzLFxuICAgICAgICAgIFVSTF9QRUxJQVMsXG4gICAgICAgICAgbWluaW1hbFJlZ2V4cCxcbiAgICAgICAgICBnZW9jb2RpbmdMYXllcnMsXG4gICAgICAgICkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0cykge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0hpc3RvcnknKSkge1xuICAgICAgY29uc3QgaGlzdG9yeSA9IHByZXZTZWFyY2hlcyhjb250ZXh0KTtcbiAgICAgIGNvbnN0IGRyb3BMYXllcnMgPSBbXG4gICAgICAgICdjdXJyZW50UG9zaXRpb24nLFxuICAgICAgICAnc2VsZWN0RnJvbU1hcCcsXG4gICAgICAgICdmdXR1cmVSb3V0ZScsXG4gICAgICAgICdvd25Mb2NhdGlvbnMnLFxuICAgICAgICAnZmF2b3VyaXRlUGxhY2UnLFxuICAgICAgICAnYmlrZXN0YXRpb24nLFxuICAgICAgICAnYmlrZVJlbnRhbFN0YXRpb24nLFxuICAgICAgICAnYmFjaycsXG4gICAgICBdO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnJvdXRlTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5sb2NhdGlvbkxheWVycyk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goZ2V0T2xkU2VhcmNoZXMoaGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpKTtcbiAgICB9XG4gIH1cblxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdTdG9wcycpKSB7XG4gICAgaWYgKHNvdXJjZXMuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKSB7XG4gICAgICBjb25zdCBmYXZvdXJpdGVTdG9wcyA9IHN0b3BzKGNvbnRleHQpO1xuICAgICAgbGV0IHN0b3BzQW5kU3RhdGlvbnM7XG4gICAgICBpZiAoZmF2b3VyaXRlU3RvcHMuZXZlcnkoc3RvcCA9PiBzdG9wLnR5cGUgPT09ICdzdGF0aW9uJykpIHtcbiAgICAgICAgc3RvcHNBbmRTdGF0aW9ucyA9IGdldFN0b3BzRnJvbUdlb2NvZGluZyhcbiAgICAgICAgICBmYXZvdXJpdGVTdG9wcyxcbiAgICAgICAgICBVUkxfUEVMSUFTX1BMQUNFLFxuICAgICAgICApLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgaWYgKGZpbHRlclJlc3VsdHMpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdG9wc0FuZFN0YXRpb25zID0gZ2V0U3RvcEFuZFN0YXRpb25zUXVlcnkoZmF2b3VyaXRlU3RvcHMpXG4gICAgICAgICAgLnRoZW4oZmF2b3VyaXRlcyA9PlxuICAgICAgICAgICAgZ2V0U3RvcHNGcm9tR2VvY29kaW5nKGZhdm91cml0ZXMsIFVSTF9QRUxJQVNfUExBQ0UpLFxuICAgICAgICAgIClcbiAgICAgICAgICAudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJSZXN1bHRzKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goZ2V0RmF2b3VyaXRlU3RvcHMoc3RvcHNBbmRTdGF0aW9ucywgaW5wdXQpKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnRGF0YXNvdXJjZScpKSB7XG4gICAgICBjb25zdCBnZW9jb2RpbmdMYXllcnMgPSBbJ3N0b3AnLCAnc3RhdGlvbiddO1xuICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID1cbiAgICAgICAgZ2VvY29kaW5nU2l6ZSAmJiBnZW9jb2RpbmdTaXplICE9PSAxMCA/IHsgc2l6ZTogZ2VvY29kaW5nU2l6ZSB9IDoge307XG4gICAgICAvLyBhIGxpdHRsZSBoYWNrOiB3aGVuIHNlYXJjaGluZyBsb2NhdGlvbiBkYXRhLCBhdXRvbWF0aWNhbGx5IGRlZHVwZSBzdG9wc1xuICAgICAgLy8gdGhpcyBjb3VsZCBiZSBhIG5ldyBleHBsaWNpdCBwcm9wXG4gICAgICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdMb2NhdGlvbnMnKSkge1xuICAgICAgICBzZWFyY2hQYXJhbXMuZGVkdXBlc3RvcHMgPSAxO1xuICAgICAgfVxuICAgICAgY29uc3QgZmVlZGlzID0gZmVlZElEcy5tYXAodiA9PiBgZ3RmcyR7dn1gKS5qb2luKCcsJyk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGdldEdlb2NvZGluZ1Jlc3VsdHMoXG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgc2VhcmNoUGFyYW1zLFxuICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgIGZvY3VzUG9pbnQsXG4gICAgICAgICAgZmVlZGlzLFxuICAgICAgICAgIFVSTF9QRUxJQVMsXG4gICAgICAgICAgbWluaW1hbFJlZ2V4cCxcbiAgICAgICAgICBnZW9jb2RpbmdMYXllcnMsXG4gICAgICAgICkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0cykge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0hpc3RvcnknKSkge1xuICAgICAgY29uc3Qgc3RvcEhpc3RvcnkgPSBwcmV2U2VhcmNoZXMoY29udGV4dCkuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgICBpZiAoaXRlbS5wcm9wZXJ0aWVzLmdpZCkge1xuICAgICAgICAgIHJldHVybiBpdGVtLnByb3BlcnRpZXMuZ2lkLmluY2x1ZGVzKCdHVEZTOicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBkcm9wTGF5ZXJzID0gW1xuICAgICAgICAnY3VycmVudFBvc2l0aW9uJyxcbiAgICAgICAgJ3NlbGVjdEZyb21NYXAnLFxuICAgICAgICAnZnV0dXJlUm91dGUnLFxuICAgICAgICAnb3duTG9jYXRpb25zJyxcbiAgICAgICAgJ2Zhdm91cml0ZVBsYWNlJyxcbiAgICAgICAgJ2Jpa2VSZW50YWxTdGF0aW9uJyxcbiAgICAgICAgJ2JhY2snLFxuICAgICAgXTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5yb3V0ZUxheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ubG9jYXRpb25MYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnBhcmtpbmdMYXllcnMpO1xuICAgICAgaWYgKHRyYW5zcG9ydE1vZGUpIHtcbiAgICAgICAgaWYgKHRyYW5zcG9ydE1vZGUgIT09ICdyb3V0ZS1DSVRZQklLRScpIHtcbiAgICAgICAgICBkcm9wTGF5ZXJzLnB1c2goJ2Jpa2VSZW50YWxTdGF0aW9uJyk7XG4gICAgICAgICAgZHJvcExheWVycy5wdXNoKCdiaWtlc3RhdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgICBnZXRPbGRTZWFyY2hlcyhzdG9wSGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpLnRoZW4ocmVzdWx0ID0+XG4gICAgICAgICAgICBmaWx0ZXJSZXN1bHRzID8gZmlsdGVyUmVzdWx0cyhyZXN1bHQsIG1vZGUpIDogcmVzdWx0LFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goZ2V0T2xkU2VhcmNoZXMoc3RvcEhpc3RvcnksIGlucHV0LCBkcm9wTGF5ZXJzKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnUm91dGVzJykpIHtcbiAgICBpZiAoc291cmNlcy5pbmNsdWRlcygnRmF2b3VyaXRlJykpIHtcbiAgICAgIGNvbnN0IGZhdm91cml0ZVJvdXRlcyA9IGdldEZhdm91cml0ZVJvdXRlcyhjb250ZXh0KTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0RmF2b3VyaXRlUm91dGVzUXVlcnkoXG4gICAgICAgICAgZmF2b3VyaXRlUm91dGVzLFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIG1vZGUsXG4gICAgICAgICAgcGF0aE9wdHMsXG4gICAgICAgICkudGhlbihyZXN1bHQgPT5cbiAgICAgICAgICBmaWx0ZXJSZXN1bHRzID8gZmlsdGVyUmVzdWx0cyhyZXN1bHQsIG1vZGUsICdSb3V0ZXMnKSA6IHJlc3VsdCxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgIGdldFJvdXRlc1F1ZXJ5KGlucHV0LCBmZWVkSURzLCB0cmFuc3BvcnRNb2RlLCBwYXRoT3B0cykudGhlbihyZXN1bHQgPT5cbiAgICAgICAgZmlsdGVyUmVzdWx0cyA/IGZpbHRlclJlc3VsdHMocmVzdWx0LCBtb2RlLCAnUm91dGVzJykgOiByZXN1bHQsXG4gICAgICApLFxuICAgICk7XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnSGlzdG9yeScpKSB7XG4gICAgICBjb25zdCByb3V0ZUhpc3RvcnkgPSBwcmV2U2VhcmNoZXMoY29udGV4dCk7XG4gICAgICBjb25zdCBkcm9wTGF5ZXJzID0gW1xuICAgICAgICAnY3VycmVudFBvc2l0aW9uJyxcbiAgICAgICAgJ3NlbGVjdEZyb21NYXAnLFxuICAgICAgICAnZnV0dXJlUm91dGUnLFxuICAgICAgICAnZmF2b3VyaXRlUGxhY2UnLFxuICAgICAgICAnc3RvcCcsXG4gICAgICAgICdzdGF0aW9uJyxcbiAgICAgICAgJ2Jpa2VwYXJrJyxcbiAgICAgICAgJ2NhcnBhcmsnLFxuICAgICAgICAnb3duTG9jYXRpb25zJyxcbiAgICAgICAgJ2JhY2snLFxuICAgICAgXTtcbiAgICAgIGlmICh0cmFuc3BvcnRNb2RlKSB7XG4gICAgICAgIGlmICh0cmFuc3BvcnRNb2RlICE9PSAncm91dGUtQ0lUWUJJS0UnKSB7XG4gICAgICAgICAgZHJvcExheWVycy5wdXNoKCdiaWtlUmVudGFsU3RhdGlvbicpO1xuICAgICAgICAgIGRyb3BMYXllcnMucHVzaCgnYmlrZXN0YXRpb24nKTtcbiAgICAgICAgfVxuICAgICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucm91dGVMYXllcnMuZmlsdGVyKGkgPT4gIShpID09PSB0cmFuc3BvcnRNb2RlKSkpO1xuICAgICAgfVxuICAgICAgZHJvcExheWVycy5wdXNoKC4uLmxvY2F0aW9uTGF5ZXJzKTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0T2xkU2VhcmNoZXMocm91dGVIaXN0b3J5LCBpbnB1dCwgZHJvcExheWVycykudGhlbihyZXN1bHRzID0+XG4gICAgICAgICAgZmlsdGVyUmVzdWx0cyA/IGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSwgJ1JvdXRlcycpIDogcmVzdWx0cyxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ0Jpa2VSZW50YWxTdGF0aW9ucycpKSB7XG4gICAgaWYgKHNvdXJjZXMuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKSB7XG4gICAgICBjb25zdCBmYXZvdXJpdGVCaWtlU3RhdGlvbnMgPSBnZXRGYXZvdXJpdGVCaWtlUmVudGFsU3RhdGlvbnMoY29udGV4dCk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGdldEZhdm91cml0ZUJpa2VSZW50YWxTdGF0aW9uc1F1ZXJ5KGZhdm91cml0ZUJpa2VTdGF0aW9ucywgaW5wdXQpLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnRGF0YXNvdXJjZScpKSB7XG4gICAgICBjb25zdCBnZW9jb2RpbmdMYXllcnMgPSBbJ2Jpa2VzdGF0aW9uJ107XG4gICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPVxuICAgICAgICBnZW9jb2RpbmdTaXplICYmIGdlb2NvZGluZ1NpemUgIT09IDEwID8geyBzaXplOiBnZW9jb2RpbmdTaXplIH0gOiB7fTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0R2VvY29kaW5nUmVzdWx0cyhcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBzZWFyY2hQYXJhbXMsXG4gICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgZm9jdXNQb2ludCxcbiAgICAgICAgICBjaXR5QmlrZU5ldHdvcmtzLmpvaW4oJywnKSxcbiAgICAgICAgICBVUkxfUEVMSUFTLFxuICAgICAgICAgIG1pbmltYWxSZWdleHAsXG4gICAgICAgICAgZ2VvY29kaW5nTGF5ZXJzLFxuICAgICAgICApLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgaWYgKGZpbHRlclJlc3VsdHMpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUsICdCaWtlUmVudGFsU3RhdGlvbnMnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzZWFyY2hSZXN1bHRzUHJvbWlzZSA9IFByb21pc2UuYWxsKHNlYXJjaENvbXBvbmVudHMpXG4gICAgLnRoZW4oZmxhdHRlbilcbiAgICAudGhlbih1bmlxQnlMYWJlbClcbiAgICAudGhlbihyZXN1bHRzID0+IHtcbiAgICAgIHNlYXJjaGVzLnJlc3VsdHMgPSByZXN1bHRzO1xuICAgIH0pXG4gICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICBzZWFyY2hlcy5lcnJvciA9IGVycjtcbiAgICB9KTtcbiAgc2VhcmNoUmVzdWx0c1Byb21pc2UudGhlbigoKSA9PiB7XG4gICAgY2FsbGJhY2soe1xuICAgICAgLi4uc2VhcmNoZXMsXG4gICAgICByZXN1bHRzOiBzb3J0U2VhcmNoUmVzdWx0cyhsaW5lUmVnZXhwLCBzZWFyY2hlcy5yZXN1bHRzLCBpbnB1dCksXG4gICAgfSk7XG4gIH0pO1xufVxuXG5jb25zdCBkZWJvdW5jZWRTZWFyY2ggPSBkZWJvdW5jZShnZXRTZWFyY2hSZXN1bHRzLCAzMDAsIHtcbiAgbGVhZGluZzogdHJ1ZSxcbn0pO1xuXG5leHBvcnQgY29uc3QgZXhlY3V0ZVNlYXJjaCA9IChcbiAgdGFyZ2V0cyxcbiAgc291cmNlcyxcbiAgdHJhbnNwb3J0TW9kZSxcbiAgc2VhcmNoQ29udGV4dCxcbiAgZmlsdGVyUmVzdWx0cyxcbiAgZ2VvY29kaW5nU2l6ZSxcbiAgZGF0YSxcbiAgY2FsbGJhY2ssXG4gIHBhdGhPcHRzLFxuICByZWZQb2ludCxcbikgPT4ge1xuICBjYWxsYmFjayhudWxsKTsgLy8gVGhpcyBtZWFucyAnd2UgYXJlIHNlYXJjaGluZydcbiAgZGVib3VuY2VkU2VhcmNoKFxuICAgIHRhcmdldHMsXG4gICAgc291cmNlcyxcbiAgICB0cmFuc3BvcnRNb2RlLFxuICAgIHNlYXJjaENvbnRleHQsXG4gICAgZmlsdGVyUmVzdWx0cyxcbiAgICBnZW9jb2RpbmdTaXplLFxuICAgIGRhdGEsXG4gICAgY2FsbGJhY2ssXG4gICAgcGF0aE9wdHMsXG4gICAgcmVmUG9pbnQsXG4gICk7XG59O1xuIiwiLy8hIG1vbWVudC5qc1xuLy8hIHZlcnNpb24gOiAyLjI5LjFcbi8vISBhdXRob3JzIDogVGltIFdvb2QsIElza3JlbiBDaGVybmV2LCBNb21lbnQuanMgY29udHJpYnV0b3JzXG4vLyEgbGljZW5zZSA6IE1JVFxuLy8hIG1vbWVudGpzLmNvbVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG4gICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcbiAgICBnbG9iYWwubW9tZW50ID0gZmFjdG9yeSgpXG59KHRoaXMsIChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciBob29rQ2FsbGJhY2s7XG5cbiAgICBmdW5jdGlvbiBob29rcygpIHtcbiAgICAgICAgcmV0dXJuIGhvb2tDYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMgZG9uZSB0byByZWdpc3RlciB0aGUgbWV0aG9kIGNhbGxlZCB3aXRoIG1vbWVudCgpXG4gICAgLy8gd2l0aG91dCBjcmVhdGluZyBjaXJjdWxhciBkZXBlbmRlbmNpZXMuXG4gICAgZnVuY3Rpb24gc2V0SG9va0NhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgICAgIGhvb2tDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQXJyYXkoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlucHV0IGluc3RhbmNlb2YgQXJyYXkgfHxcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IEFycmF5XSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc09iamVjdChpbnB1dCkge1xuICAgICAgICAvLyBJRTggd2lsbCB0cmVhdCB1bmRlZmluZWQgYW5kIG51bGwgYXMgb2JqZWN0IGlmIGl0IHdhc24ndCBmb3JcbiAgICAgICAgLy8gaW5wdXQgIT0gbnVsbFxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaW5wdXQgIT0gbnVsbCAmJlxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgT2JqZWN0XSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYXNPd25Qcm9wKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLCBiKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc09iamVjdEVtcHR5KG9iaikge1xuICAgICAgICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBrO1xuICAgICAgICAgICAgZm9yIChrIGluIG9iaikge1xuICAgICAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKG9iaiwgaykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVbmRlZmluZWQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09PSB2b2lkIDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNOdW1iZXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHR5cGVvZiBpbnB1dCA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IE51bWJlcl0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNEYXRlKGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpbnB1dCBpbnN0YW5jZW9mIERhdGUgfHxcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IERhdGVdJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hcChhcnIsIGZuKSB7XG4gICAgICAgIHZhciByZXMgPSBbXSxcbiAgICAgICAgICAgIGk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKGZuKGFycltpXSwgaSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXh0ZW5kKGEsIGIpIHtcbiAgICAgICAgZm9yICh2YXIgaSBpbiBiKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcChiLCBpKSkge1xuICAgICAgICAgICAgICAgIGFbaV0gPSBiW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc093blByb3AoYiwgJ3RvU3RyaW5nJykpIHtcbiAgICAgICAgICAgIGEudG9TdHJpbmcgPSBiLnRvU3RyaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc093blByb3AoYiwgJ3ZhbHVlT2YnKSkge1xuICAgICAgICAgICAgYS52YWx1ZU9mID0gYi52YWx1ZU9mO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGE7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlVVRDKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbE9yVVRDKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0LCB0cnVlKS51dGMoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZWZhdWx0UGFyc2luZ0ZsYWdzKCkge1xuICAgICAgICAvLyBXZSBuZWVkIHRvIGRlZXAgY2xvbmUgdGhpcyBvYmplY3QuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlbXB0eTogZmFsc2UsXG4gICAgICAgICAgICB1bnVzZWRUb2tlbnM6IFtdLFxuICAgICAgICAgICAgdW51c2VkSW5wdXQ6IFtdLFxuICAgICAgICAgICAgb3ZlcmZsb3c6IC0yLFxuICAgICAgICAgICAgY2hhcnNMZWZ0T3ZlcjogMCxcbiAgICAgICAgICAgIG51bGxJbnB1dDogZmFsc2UsXG4gICAgICAgICAgICBpbnZhbGlkRXJhOiBudWxsLFxuICAgICAgICAgICAgaW52YWxpZE1vbnRoOiBudWxsLFxuICAgICAgICAgICAgaW52YWxpZEZvcm1hdDogZmFsc2UsXG4gICAgICAgICAgICB1c2VySW52YWxpZGF0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgaXNvOiBmYWxzZSxcbiAgICAgICAgICAgIHBhcnNlZERhdGVQYXJ0czogW10sXG4gICAgICAgICAgICBlcmE6IG51bGwsXG4gICAgICAgICAgICBtZXJpZGllbTogbnVsbCxcbiAgICAgICAgICAgIHJmYzI4MjI6IGZhbHNlLFxuICAgICAgICAgICAgd2Vla2RheU1pc21hdGNoOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRQYXJzaW5nRmxhZ3MobSkge1xuICAgICAgICBpZiAobS5fcGYgPT0gbnVsbCkge1xuICAgICAgICAgICAgbS5fcGYgPSBkZWZhdWx0UGFyc2luZ0ZsYWdzKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG0uX3BmO1xuICAgIH1cblxuICAgIHZhciBzb21lO1xuICAgIGlmIChBcnJheS5wcm90b3R5cGUuc29tZSkge1xuICAgICAgICBzb21lID0gQXJyYXkucHJvdG90eXBlLnNvbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc29tZSA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICAgICAgICAgIHZhciB0ID0gT2JqZWN0KHRoaXMpLFxuICAgICAgICAgICAgICAgIGxlbiA9IHQubGVuZ3RoID4+PiAwLFxuICAgICAgICAgICAgICAgIGk7XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChpIGluIHQgJiYgZnVuLmNhbGwodGhpcywgdFtpXSwgaSwgdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZChtKSB7XG4gICAgICAgIGlmIChtLl9pc1ZhbGlkID09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBmbGFncyA9IGdldFBhcnNpbmdGbGFncyhtKSxcbiAgICAgICAgICAgICAgICBwYXJzZWRQYXJ0cyA9IHNvbWUuY2FsbChmbGFncy5wYXJzZWREYXRlUGFydHMsIGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpICE9IG51bGw7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgaXNOb3dWYWxpZCA9XG4gICAgICAgICAgICAgICAgICAgICFpc05hTihtLl9kLmdldFRpbWUoKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3Mub3ZlcmZsb3cgPCAwICYmXG4gICAgICAgICAgICAgICAgICAgICFmbGFncy5lbXB0eSAmJlxuICAgICAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZEVyYSAmJlxuICAgICAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZE1vbnRoICYmXG4gICAgICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkV2Vla2RheSAmJlxuICAgICAgICAgICAgICAgICAgICAhZmxhZ3Mud2Vla2RheU1pc21hdGNoICYmXG4gICAgICAgICAgICAgICAgICAgICFmbGFncy5udWxsSW5wdXQgJiZcbiAgICAgICAgICAgICAgICAgICAgIWZsYWdzLmludmFsaWRGb3JtYXQgJiZcbiAgICAgICAgICAgICAgICAgICAgIWZsYWdzLnVzZXJJbnZhbGlkYXRlZCAmJlxuICAgICAgICAgICAgICAgICAgICAoIWZsYWdzLm1lcmlkaWVtIHx8IChmbGFncy5tZXJpZGllbSAmJiBwYXJzZWRQYXJ0cykpO1xuXG4gICAgICAgICAgICBpZiAobS5fc3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgaXNOb3dWYWxpZCA9XG4gICAgICAgICAgICAgICAgICAgIGlzTm93VmFsaWQgJiZcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuY2hhcnNMZWZ0T3ZlciA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy51bnVzZWRUb2tlbnMubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmJpZ0hvdXIgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKE9iamVjdC5pc0Zyb3plbiA9PSBudWxsIHx8ICFPYmplY3QuaXNGcm96ZW4obSkpIHtcbiAgICAgICAgICAgICAgICBtLl9pc1ZhbGlkID0gaXNOb3dWYWxpZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTm93VmFsaWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG0uX2lzVmFsaWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW52YWxpZChmbGFncykge1xuICAgICAgICB2YXIgbSA9IGNyZWF0ZVVUQyhOYU4pO1xuICAgICAgICBpZiAoZmxhZ3MgIT0gbnVsbCkge1xuICAgICAgICAgICAgZXh0ZW5kKGdldFBhcnNpbmdGbGFncyhtKSwgZmxhZ3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKG0pLnVzZXJJbnZhbGlkYXRlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICAvLyBQbHVnaW5zIHRoYXQgYWRkIHByb3BlcnRpZXMgc2hvdWxkIGFsc28gYWRkIHRoZSBrZXkgaGVyZSAobnVsbCB2YWx1ZSksXG4gICAgLy8gc28gd2UgY2FuIHByb3Blcmx5IGNsb25lIG91cnNlbHZlcy5cbiAgICB2YXIgbW9tZW50UHJvcGVydGllcyA9IChob29rcy5tb21lbnRQcm9wZXJ0aWVzID0gW10pLFxuICAgICAgICB1cGRhdGVJblByb2dyZXNzID0gZmFsc2U7XG5cbiAgICBmdW5jdGlvbiBjb3B5Q29uZmlnKHRvLCBmcm9tKSB7XG4gICAgICAgIHZhciBpLCBwcm9wLCB2YWw7XG5cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9pc0FNb21lbnRPYmplY3QpKSB7XG4gICAgICAgICAgICB0by5faXNBTW9tZW50T2JqZWN0ID0gZnJvbS5faXNBTW9tZW50T2JqZWN0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5faSkpIHtcbiAgICAgICAgICAgIHRvLl9pID0gZnJvbS5faTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2YpKSB7XG4gICAgICAgICAgICB0by5fZiA9IGZyb20uX2Y7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9sKSkge1xuICAgICAgICAgICAgdG8uX2wgPSBmcm9tLl9sO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fc3RyaWN0KSkge1xuICAgICAgICAgICAgdG8uX3N0cmljdCA9IGZyb20uX3N0cmljdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX3R6bSkpIHtcbiAgICAgICAgICAgIHRvLl90em0gPSBmcm9tLl90em07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9pc1VUQykpIHtcbiAgICAgICAgICAgIHRvLl9pc1VUQyA9IGZyb20uX2lzVVRDO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fb2Zmc2V0KSkge1xuICAgICAgICAgICAgdG8uX29mZnNldCA9IGZyb20uX29mZnNldDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX3BmKSkge1xuICAgICAgICAgICAgdG8uX3BmID0gZ2V0UGFyc2luZ0ZsYWdzKGZyb20pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fbG9jYWxlKSkge1xuICAgICAgICAgICAgdG8uX2xvY2FsZSA9IGZyb20uX2xvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtb21lbnRQcm9wZXJ0aWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtb21lbnRQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcHJvcCA9IG1vbWVudFByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICAgICAgdmFsID0gZnJvbVtwcm9wXTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9bcHJvcF0gPSB2YWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRvO1xuICAgIH1cblxuICAgIC8vIE1vbWVudCBwcm90b3R5cGUgb2JqZWN0XG4gICAgZnVuY3Rpb24gTW9tZW50KGNvbmZpZykge1xuICAgICAgICBjb3B5Q29uZmlnKHRoaXMsIGNvbmZpZyk7XG4gICAgICAgIHRoaXMuX2QgPSBuZXcgRGF0ZShjb25maWcuX2QgIT0gbnVsbCA/IGNvbmZpZy5fZC5nZXRUaW1lKCkgOiBOYU4pO1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICB0aGlzLl9kID0gbmV3IERhdGUoTmFOKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBQcmV2ZW50IGluZmluaXRlIGxvb3AgaW4gY2FzZSB1cGRhdGVPZmZzZXQgY3JlYXRlcyBuZXcgbW9tZW50XG4gICAgICAgIC8vIG9iamVjdHMuXG4gICAgICAgIGlmICh1cGRhdGVJblByb2dyZXNzID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdXBkYXRlSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcyk7XG4gICAgICAgICAgICB1cGRhdGVJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc01vbWVudChvYmopIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIG9iaiBpbnN0YW5jZW9mIE1vbWVudCB8fCAob2JqICE9IG51bGwgJiYgb2JqLl9pc0FNb21lbnRPYmplY3QgIT0gbnVsbClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3YXJuKG1zZykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBob29rcy5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3MgPT09IGZhbHNlICYmXG4gICAgICAgICAgICB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIGNvbnNvbGUud2FyblxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignRGVwcmVjYXRpb24gd2FybmluZzogJyArIG1zZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZXByZWNhdGUobXNnLCBmbikge1xuICAgICAgICB2YXIgZmlyc3RUaW1lID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gZXh0ZW5kKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChob29rcy5kZXByZWNhdGlvbkhhbmRsZXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlcihudWxsLCBtc2cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpcnN0VGltZSkge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgICAgICAgICAgICAgIGFyZyxcbiAgICAgICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICAgICAga2V5O1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXJndW1lbnRzW2ldID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJnICs9ICdcXG5bJyArIGkgKyAnXSAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChrZXkgaW4gYXJndW1lbnRzWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc093blByb3AoYXJndW1lbnRzWzBdLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZyArPSBrZXkgKyAnOiAnICsgYXJndW1lbnRzWzBdW2tleV0gKyAnLCAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZy5zbGljZSgwLCAtMik7IC8vIFJlbW92ZSB0cmFpbGluZyBjb21tYSBhbmQgc3BhY2VcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goYXJnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgd2FybihcbiAgICAgICAgICAgICAgICAgICAgbXNnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdcXG5Bcmd1bWVudHM6ICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncykuam9pbignJykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEVycm9yKCkuc3RhY2tcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGZpcnN0VGltZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0sIGZuKTtcbiAgICB9XG5cbiAgICB2YXIgZGVwcmVjYXRpb25zID0ge307XG5cbiAgICBmdW5jdGlvbiBkZXByZWNhdGVTaW1wbGUobmFtZSwgbXNnKSB7XG4gICAgICAgIGlmIChob29rcy5kZXByZWNhdGlvbkhhbmRsZXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyKG5hbWUsIG1zZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFkZXByZWNhdGlvbnNbbmFtZV0pIHtcbiAgICAgICAgICAgIHdhcm4obXNnKTtcbiAgICAgICAgICAgIGRlcHJlY2F0aW9uc1tuYW1lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBob29rcy5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3MgPSBmYWxzZTtcbiAgICBob29rcy5kZXByZWNhdGlvbkhhbmRsZXIgPSBudWxsO1xuXG4gICAgZnVuY3Rpb24gaXNGdW5jdGlvbihpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHR5cGVvZiBGdW5jdGlvbiAhPT0gJ3VuZGVmaW5lZCcgJiYgaW5wdXQgaW5zdGFuY2VvZiBGdW5jdGlvbikgfHxcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXQoY29uZmlnKSB7XG4gICAgICAgIHZhciBwcm9wLCBpO1xuICAgICAgICBmb3IgKGkgaW4gY29uZmlnKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcChjb25maWcsIGkpKSB7XG4gICAgICAgICAgICAgICAgcHJvcCA9IGNvbmZpZ1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzW2ldID0gcHJvcDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzWydfJyArIGldID0gcHJvcDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY29uZmlnID0gY29uZmlnO1xuICAgICAgICAvLyBMZW5pZW50IG9yZGluYWwgcGFyc2luZyBhY2NlcHRzIGp1c3QgYSBudW1iZXIgaW4gYWRkaXRpb24gdG9cbiAgICAgICAgLy8gbnVtYmVyICsgKHBvc3NpYmx5KSBzdHVmZiBjb21pbmcgZnJvbSBfZGF5T2ZNb250aE9yZGluYWxQYXJzZS5cbiAgICAgICAgLy8gVE9ETzogUmVtb3ZlIFwib3JkaW5hbFBhcnNlXCIgZmFsbGJhY2sgaW4gbmV4dCBtYWpvciByZWxlYXNlLlxuICAgICAgICB0aGlzLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlTGVuaWVudCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAodGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZS5zb3VyY2UgfHwgdGhpcy5fb3JkaW5hbFBhcnNlLnNvdXJjZSkgK1xuICAgICAgICAgICAgICAgICd8JyArXG4gICAgICAgICAgICAgICAgL1xcZHsxLDJ9Ly5zb3VyY2VcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtZXJnZUNvbmZpZ3MocGFyZW50Q29uZmlnLCBjaGlsZENvbmZpZykge1xuICAgICAgICB2YXIgcmVzID0gZXh0ZW5kKHt9LCBwYXJlbnRDb25maWcpLFxuICAgICAgICAgICAgcHJvcDtcbiAgICAgICAgZm9yIChwcm9wIGluIGNoaWxkQ29uZmlnKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcChjaGlsZENvbmZpZywgcHJvcCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNPYmplY3QocGFyZW50Q29uZmlnW3Byb3BdKSAmJiBpc09iamVjdChjaGlsZENvbmZpZ1twcm9wXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzW3Byb3BdID0ge307XG4gICAgICAgICAgICAgICAgICAgIGV4dGVuZChyZXNbcHJvcF0sIHBhcmVudENvbmZpZ1twcm9wXSk7XG4gICAgICAgICAgICAgICAgICAgIGV4dGVuZChyZXNbcHJvcF0sIGNoaWxkQ29uZmlnW3Byb3BdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkQ29uZmlnW3Byb3BdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzW3Byb3BdID0gY2hpbGRDb25maWdbcHJvcF07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJlc1twcm9wXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChwcm9wIGluIHBhcmVudENvbmZpZykge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGhhc093blByb3AocGFyZW50Q29uZmlnLCBwcm9wKSAmJlxuICAgICAgICAgICAgICAgICFoYXNPd25Qcm9wKGNoaWxkQ29uZmlnLCBwcm9wKSAmJlxuICAgICAgICAgICAgICAgIGlzT2JqZWN0KHBhcmVudENvbmZpZ1twcm9wXSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSBjaGFuZ2VzIHRvIHByb3BlcnRpZXMgZG9uJ3QgbW9kaWZ5IHBhcmVudCBjb25maWdcbiAgICAgICAgICAgICAgICByZXNbcHJvcF0gPSBleHRlbmQoe30sIHJlc1twcm9wXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBMb2NhbGUoY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5zZXQoY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBrZXlzO1xuXG4gICAgaWYgKE9iamVjdC5rZXlzKSB7XG4gICAgICAgIGtleXMgPSBPYmplY3Qua2V5cztcbiAgICB9IGVsc2Uge1xuICAgICAgICBrZXlzID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgdmFyIGksXG4gICAgICAgICAgICAgICAgcmVzID0gW107XG4gICAgICAgICAgICBmb3IgKGkgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc093blByb3Aob2JqLCBpKSkge1xuICAgICAgICAgICAgICAgICAgICByZXMucHVzaChpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0Q2FsZW5kYXIgPSB7XG4gICAgICAgIHNhbWVEYXk6ICdbVG9kYXkgYXRdIExUJyxcbiAgICAgICAgbmV4dERheTogJ1tUb21vcnJvdyBhdF0gTFQnLFxuICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2F0XSBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdbWWVzdGVyZGF5IGF0XSBMVCcsXG4gICAgICAgIGxhc3RXZWVrOiAnW0xhc3RdIGRkZGQgW2F0XSBMVCcsXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGNhbGVuZGFyKGtleSwgbW9tLCBub3cpIHtcbiAgICAgICAgdmFyIG91dHB1dCA9IHRoaXMuX2NhbGVuZGFyW2tleV0gfHwgdGhpcy5fY2FsZW5kYXJbJ3NhbWVFbHNlJ107XG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKG91dHB1dCkgPyBvdXRwdXQuY2FsbChtb20sIG5vdykgOiBvdXRwdXQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gemVyb0ZpbGwobnVtYmVyLCB0YXJnZXRMZW5ndGgsIGZvcmNlU2lnbikge1xuICAgICAgICB2YXIgYWJzTnVtYmVyID0gJycgKyBNYXRoLmFicyhudW1iZXIpLFxuICAgICAgICAgICAgemVyb3NUb0ZpbGwgPSB0YXJnZXRMZW5ndGggLSBhYnNOdW1iZXIubGVuZ3RoLFxuICAgICAgICAgICAgc2lnbiA9IG51bWJlciA+PSAwO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHNpZ24gPyAoZm9yY2VTaWduID8gJysnIDogJycpIDogJy0nKSArXG4gICAgICAgICAgICBNYXRoLnBvdygxMCwgTWF0aC5tYXgoMCwgemVyb3NUb0ZpbGwpKS50b1N0cmluZygpLnN1YnN0cigxKSArXG4gICAgICAgICAgICBhYnNOdW1iZXJcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICB2YXIgZm9ybWF0dGluZ1Rva2VucyA9IC8oXFxbW15cXFtdKlxcXSl8KFxcXFwpPyhbSGhdbW0oc3MpP3xNb3xNTT9NP00/fERvfERERG98REQ/RD9EP3xkZGQ/ZD98ZG8/fHdbb3x3XT98V1tvfFddP3xRbz98TnsxLDV9fFlZWVlZWXxZWVlZWXxZWVlZfFlZfHl7Miw0fXx5bz98Z2coZ2dnPyk/fEdHKEdHRz8pP3xlfEV8YXxBfGhoP3xISD98a2s/fG1tP3xzcz98U3sxLDl9fHh8WHx6ej98Wlo/fC4pL2csXG4gICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2VucyA9IC8oXFxbW15cXFtdKlxcXSl8KFxcXFwpPyhMVFN8TFR8TEw/TD9MP3xsezEsNH0pL2csXG4gICAgICAgIGZvcm1hdEZ1bmN0aW9ucyA9IHt9LFxuICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9ucyA9IHt9O1xuXG4gICAgLy8gdG9rZW46ICAgICdNJ1xuICAgIC8vIHBhZGRlZDogICBbJ01NJywgMl1cbiAgICAvLyBvcmRpbmFsOiAgJ01vJ1xuICAgIC8vIGNhbGxiYWNrOiBmdW5jdGlvbiAoKSB7IHRoaXMubW9udGgoKSArIDEgfVxuICAgIGZ1bmN0aW9uIGFkZEZvcm1hdFRva2VuKHRva2VuLCBwYWRkZWQsIG9yZGluYWwsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBmdW5jID0gY2FsbGJhY2s7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBmdW5jID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW2NhbGxiYWNrXSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zW3Rva2VuXSA9IGZ1bmM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhZGRlZCkge1xuICAgICAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnNbcGFkZGVkWzBdXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gemVyb0ZpbGwoZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCBwYWRkZWRbMV0sIHBhZGRlZFsyXSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcmRpbmFsKSB7XG4gICAgICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9uc1tvcmRpbmFsXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkub3JkaW5hbChcbiAgICAgICAgICAgICAgICAgICAgZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLFxuICAgICAgICAgICAgICAgICAgICB0b2tlblxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVtb3ZlRm9ybWF0dGluZ1Rva2VucyhpbnB1dCkge1xuICAgICAgICBpZiAoaW5wdXQubWF0Y2goL1xcW1tcXHNcXFNdLykpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dC5yZXBsYWNlKC9eXFxbfFxcXSQvZywgJycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnB1dC5yZXBsYWNlKC9cXFxcL2csICcnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlRm9ybWF0RnVuY3Rpb24oZm9ybWF0KSB7XG4gICAgICAgIHZhciBhcnJheSA9IGZvcm1hdC5tYXRjaChmb3JtYXR0aW5nVG9rZW5zKSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBsZW5ndGg7XG5cbiAgICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXRUb2tlbkZ1bmN0aW9uc1thcnJheVtpXV0pIHtcbiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IGZvcm1hdFRva2VuRnVuY3Rpb25zW2FycmF5W2ldXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSByZW1vdmVGb3JtYXR0aW5nVG9rZW5zKGFycmF5W2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobW9tKSB7XG4gICAgICAgICAgICB2YXIgb3V0cHV0ID0gJycsXG4gICAgICAgICAgICAgICAgaTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIG91dHB1dCArPSBpc0Z1bmN0aW9uKGFycmF5W2ldKVxuICAgICAgICAgICAgICAgICAgICA/IGFycmF5W2ldLmNhbGwobW9tLCBmb3JtYXQpXG4gICAgICAgICAgICAgICAgICAgIDogYXJyYXlbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIGZvcm1hdCBkYXRlIHVzaW5nIG5hdGl2ZSBkYXRlIG9iamVjdFxuICAgIGZ1bmN0aW9uIGZvcm1hdE1vbWVudChtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIG0ubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtYXQgPSBleHBhbmRGb3JtYXQoZm9ybWF0LCBtLmxvY2FsZURhdGEoKSk7XG4gICAgICAgIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdID1cbiAgICAgICAgICAgIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdIHx8IG1ha2VGb3JtYXRGdW5jdGlvbihmb3JtYXQpO1xuXG4gICAgICAgIHJldHVybiBmb3JtYXRGdW5jdGlvbnNbZm9ybWF0XShtKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHBhbmRGb3JtYXQoZm9ybWF0LCBsb2NhbGUpIHtcbiAgICAgICAgdmFyIGkgPSA1O1xuXG4gICAgICAgIGZ1bmN0aW9uIHJlcGxhY2VMb25nRGF0ZUZvcm1hdFRva2VucyhpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS5sb25nRGF0ZUZvcm1hdChpbnB1dCkgfHwgaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMubGFzdEluZGV4ID0gMDtcbiAgICAgICAgd2hpbGUgKGkgPj0gMCAmJiBsb2NhbEZvcm1hdHRpbmdUb2tlbnMudGVzdChmb3JtYXQpKSB7XG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZShcbiAgICAgICAgICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMsXG4gICAgICAgICAgICAgICAgcmVwbGFjZUxvbmdEYXRlRm9ybWF0VG9rZW5zXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbG9jYWxGb3JtYXR0aW5nVG9rZW5zLmxhc3RJbmRleCA9IDA7XG4gICAgICAgICAgICBpIC09IDE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9uZ0RhdGVGb3JtYXQgPSB7XG4gICAgICAgIExUUzogJ2g6bW06c3MgQScsXG4gICAgICAgIExUOiAnaDptbSBBJyxcbiAgICAgICAgTDogJ01NL0REL1lZWVknLFxuICAgICAgICBMTDogJ01NTU0gRCwgWVlZWScsXG4gICAgICAgIExMTDogJ01NTU0gRCwgWVlZWSBoOm1tIEEnLFxuICAgICAgICBMTExMOiAnZGRkZCwgTU1NTSBELCBZWVlZIGg6bW0gQScsXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGxvbmdEYXRlRm9ybWF0KGtleSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0gdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5XSxcbiAgICAgICAgICAgIGZvcm1hdFVwcGVyID0gdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5LnRvVXBwZXJDYXNlKCldO1xuXG4gICAgICAgIGlmIChmb3JtYXQgfHwgIWZvcm1hdFVwcGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5XSA9IGZvcm1hdFVwcGVyXG4gICAgICAgICAgICAubWF0Y2goZm9ybWF0dGluZ1Rva2VucylcbiAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHRvaykge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdG9rID09PSAnTU1NTScgfHxcbiAgICAgICAgICAgICAgICAgICAgdG9rID09PSAnTU0nIHx8XG4gICAgICAgICAgICAgICAgICAgIHRvayA9PT0gJ0REJyB8fFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdkZGRkJ1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdG9rO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKCcnKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5XTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdEludmFsaWREYXRlID0gJ0ludmFsaWQgZGF0ZSc7XG5cbiAgICBmdW5jdGlvbiBpbnZhbGlkRGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludmFsaWREYXRlO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0T3JkaW5hbCA9ICclZCcsXG4gICAgICAgIGRlZmF1bHREYXlPZk1vbnRoT3JkaW5hbFBhcnNlID0gL1xcZHsxLDJ9LztcblxuICAgIGZ1bmN0aW9uIG9yZGluYWwobnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vcmRpbmFsLnJlcGxhY2UoJyVkJywgbnVtYmVyKTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdFJlbGF0aXZlVGltZSA9IHtcbiAgICAgICAgZnV0dXJlOiAnaW4gJXMnLFxuICAgICAgICBwYXN0OiAnJXMgYWdvJyxcbiAgICAgICAgczogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICBzczogJyVkIHNlY29uZHMnLFxuICAgICAgICBtOiAnYSBtaW51dGUnLFxuICAgICAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgICAgICBoOiAnYW4gaG91cicsXG4gICAgICAgIGhoOiAnJWQgaG91cnMnLFxuICAgICAgICBkOiAnYSBkYXknLFxuICAgICAgICBkZDogJyVkIGRheXMnLFxuICAgICAgICB3OiAnYSB3ZWVrJyxcbiAgICAgICAgd3c6ICclZCB3ZWVrcycsXG4gICAgICAgIE06ICdhIG1vbnRoJyxcbiAgICAgICAgTU06ICclZCBtb250aHMnLFxuICAgICAgICB5OiAnYSB5ZWFyJyxcbiAgICAgICAgeXk6ICclZCB5ZWFycycsXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHJlbGF0aXZlVGltZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIG91dHB1dCA9IHRoaXMuX3JlbGF0aXZlVGltZVtzdHJpbmddO1xuICAgICAgICByZXR1cm4gaXNGdW5jdGlvbihvdXRwdXQpXG4gICAgICAgICAgICA/IG91dHB1dChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpXG4gICAgICAgICAgICA6IG91dHB1dC5yZXBsYWNlKC8lZC9pLCBudW1iZXIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhc3RGdXR1cmUoZGlmZiwgb3V0cHV0KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB0aGlzLl9yZWxhdGl2ZVRpbWVbZGlmZiA+IDAgPyAnZnV0dXJlJyA6ICdwYXN0J107XG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKGZvcm1hdCkgPyBmb3JtYXQob3V0cHV0KSA6IGZvcm1hdC5yZXBsYWNlKC8lcy9pLCBvdXRwdXQpO1xuICAgIH1cblxuICAgIHZhciBhbGlhc2VzID0ge307XG5cbiAgICBmdW5jdGlvbiBhZGRVbml0QWxpYXModW5pdCwgc2hvcnRoYW5kKSB7XG4gICAgICAgIHZhciBsb3dlckNhc2UgPSB1bml0LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGFsaWFzZXNbbG93ZXJDYXNlXSA9IGFsaWFzZXNbbG93ZXJDYXNlICsgJ3MnXSA9IGFsaWFzZXNbc2hvcnRoYW5kXSA9IHVuaXQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplVW5pdHModW5pdHMpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB1bml0cyA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgID8gYWxpYXNlc1t1bml0c10gfHwgYWxpYXNlc1t1bml0cy50b0xvd2VyQ2FzZSgpXVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplT2JqZWN0VW5pdHMoaW5wdXRPYmplY3QpIHtcbiAgICAgICAgdmFyIG5vcm1hbGl6ZWRJbnB1dCA9IHt9LFxuICAgICAgICAgICAgbm9ybWFsaXplZFByb3AsXG4gICAgICAgICAgICBwcm9wO1xuXG4gICAgICAgIGZvciAocHJvcCBpbiBpbnB1dE9iamVjdCkge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoaW5wdXRPYmplY3QsIHByb3ApKSB7XG4gICAgICAgICAgICAgICAgbm9ybWFsaXplZFByb3AgPSBub3JtYWxpemVVbml0cyhwcm9wKTtcbiAgICAgICAgICAgICAgICBpZiAobm9ybWFsaXplZFByb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZElucHV0W25vcm1hbGl6ZWRQcm9wXSA9IGlucHV0T2JqZWN0W3Byb3BdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBub3JtYWxpemVkSW5wdXQ7XG4gICAgfVxuXG4gICAgdmFyIHByaW9yaXRpZXMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFVuaXRQcmlvcml0eSh1bml0LCBwcmlvcml0eSkge1xuICAgICAgICBwcmlvcml0aWVzW3VuaXRdID0gcHJpb3JpdHk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UHJpb3JpdGl6ZWRVbml0cyh1bml0c09iaikge1xuICAgICAgICB2YXIgdW5pdHMgPSBbXSxcbiAgICAgICAgICAgIHU7XG4gICAgICAgIGZvciAodSBpbiB1bml0c09iaikge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AodW5pdHNPYmosIHUpKSB7XG4gICAgICAgICAgICAgICAgdW5pdHMucHVzaCh7IHVuaXQ6IHUsIHByaW9yaXR5OiBwcmlvcml0aWVzW3VdIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHVuaXRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB1bml0cztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0xlYXBZZWFyKHllYXIpIHtcbiAgICAgICAgcmV0dXJuICh5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwKSB8fCB5ZWFyICUgNDAwID09PSAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFic0Zsb29yKG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgLy8gLTAgLT4gMFxuICAgICAgICAgICAgcmV0dXJuIE1hdGguY2VpbChudW1iZXIpIHx8IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9JbnQoYXJndW1lbnRGb3JDb2VyY2lvbikge1xuICAgICAgICB2YXIgY29lcmNlZE51bWJlciA9ICthcmd1bWVudEZvckNvZXJjaW9uLFxuICAgICAgICAgICAgdmFsdWUgPSAwO1xuXG4gICAgICAgIGlmIChjb2VyY2VkTnVtYmVyICE9PSAwICYmIGlzRmluaXRlKGNvZXJjZWROdW1iZXIpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGFic0Zsb29yKGNvZXJjZWROdW1iZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VHZXRTZXQodW5pdCwga2VlcFRpbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBzZXQkMSh0aGlzLCB1bml0LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIGtlZXBUaW1lKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldCh0aGlzLCB1bml0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXQobW9tLCB1bml0KSB7XG4gICAgICAgIHJldHVybiBtb20uaXNWYWxpZCgpXG4gICAgICAgICAgICA/IG1vbS5fZFsnZ2V0JyArIChtb20uX2lzVVRDID8gJ1VUQycgOiAnJykgKyB1bml0XSgpXG4gICAgICAgICAgICA6IE5hTjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXQkMShtb20sIHVuaXQsIHZhbHVlKSB7XG4gICAgICAgIGlmIChtb20uaXNWYWxpZCgpICYmICFpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB1bml0ID09PSAnRnVsbFllYXInICYmXG4gICAgICAgICAgICAgICAgaXNMZWFwWWVhcihtb20ueWVhcigpKSAmJlxuICAgICAgICAgICAgICAgIG1vbS5tb250aCgpID09PSAxICYmXG4gICAgICAgICAgICAgICAgbW9tLmRhdGUoKSA9PT0gMjlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdG9JbnQodmFsdWUpO1xuICAgICAgICAgICAgICAgIG1vbS5fZFsnc2V0JyArIChtb20uX2lzVVRDID8gJ1VUQycgOiAnJykgKyB1bml0XShcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIG1vbS5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICBkYXlzSW5Nb250aCh2YWx1ZSwgbW9tLm1vbnRoKCkpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbW9tLl9kWydzZXQnICsgKG1vbS5faXNVVEMgPyAnVVRDJyA6ICcnKSArIHVuaXRdKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIHN0cmluZ0dldCh1bml0cykge1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odGhpc1t1bml0c10pKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpc1t1bml0c10oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdHJpbmdTZXQodW5pdHMsIHZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdW5pdHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZU9iamVjdFVuaXRzKHVuaXRzKTtcbiAgICAgICAgICAgIHZhciBwcmlvcml0aXplZCA9IGdldFByaW9yaXRpemVkVW5pdHModW5pdHMpLFxuICAgICAgICAgICAgICAgIGk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHJpb3JpdGl6ZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzW3ByaW9yaXRpemVkW2ldLnVuaXRdKHVuaXRzW3ByaW9yaXRpemVkW2ldLnVuaXRdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24odGhpc1t1bml0c10pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbdW5pdHNdKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgbWF0Y2gxID0gL1xcZC8sIC8vICAgICAgIDAgLSA5XG4gICAgICAgIG1hdGNoMiA9IC9cXGRcXGQvLCAvLyAgICAgIDAwIC0gOTlcbiAgICAgICAgbWF0Y2gzID0gL1xcZHszfS8sIC8vICAgICAwMDAgLSA5OTlcbiAgICAgICAgbWF0Y2g0ID0gL1xcZHs0fS8sIC8vICAgIDAwMDAgLSA5OTk5XG4gICAgICAgIG1hdGNoNiA9IC9bKy1dP1xcZHs2fS8sIC8vIC05OTk5OTkgLSA5OTk5OTlcbiAgICAgICAgbWF0Y2gxdG8yID0gL1xcZFxcZD8vLCAvLyAgICAgICAwIC0gOTlcbiAgICAgICAgbWF0Y2gzdG80ID0gL1xcZFxcZFxcZFxcZD8vLCAvLyAgICAgOTk5IC0gOTk5OVxuICAgICAgICBtYXRjaDV0bzYgPSAvXFxkXFxkXFxkXFxkXFxkXFxkPy8sIC8vICAgOTk5OTkgLSA5OTk5OTlcbiAgICAgICAgbWF0Y2gxdG8zID0gL1xcZHsxLDN9LywgLy8gICAgICAgMCAtIDk5OVxuICAgICAgICBtYXRjaDF0bzQgPSAvXFxkezEsNH0vLCAvLyAgICAgICAwIC0gOTk5OVxuICAgICAgICBtYXRjaDF0bzYgPSAvWystXT9cXGR7MSw2fS8sIC8vIC05OTk5OTkgLSA5OTk5OTlcbiAgICAgICAgbWF0Y2hVbnNpZ25lZCA9IC9cXGQrLywgLy8gICAgICAgMCAtIGluZlxuICAgICAgICBtYXRjaFNpZ25lZCA9IC9bKy1dP1xcZCsvLCAvLyAgICAtaW5mIC0gaW5mXG4gICAgICAgIG1hdGNoT2Zmc2V0ID0gL1p8WystXVxcZFxcZDo/XFxkXFxkL2dpLCAvLyArMDA6MDAgLTAwOjAwICswMDAwIC0wMDAwIG9yIFpcbiAgICAgICAgbWF0Y2hTaG9ydE9mZnNldCA9IC9afFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/L2dpLCAvLyArMDAgLTAwICswMDowMCAtMDA6MDAgKzAwMDAgLTAwMDAgb3IgWlxuICAgICAgICBtYXRjaFRpbWVzdGFtcCA9IC9bKy1dP1xcZCsoXFwuXFxkezEsM30pPy8sIC8vIDEyMzQ1Njc4OSAxMjM0NTY3ODkuMTIzXG4gICAgICAgIC8vIGFueSB3b3JkIChvciB0d28pIGNoYXJhY3RlcnMgb3IgbnVtYmVycyBpbmNsdWRpbmcgdHdvL3RocmVlIHdvcmQgbW9udGggaW4gYXJhYmljLlxuICAgICAgICAvLyBpbmNsdWRlcyBzY290dGlzaCBnYWVsaWMgdHdvIHdvcmQgYW5kIGh5cGhlbmF0ZWQgbW9udGhzXG4gICAgICAgIG1hdGNoV29yZCA9IC9bMC05XXswLDI1Nn1bJ2EtelxcdTAwQTAtXFx1MDVGRlxcdTA3MDAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkYwN1xcdUZGMTAtXFx1RkZFRl17MSwyNTZ9fFtcXHUwNjAwLVxcdTA2RkZcXC9dezEsMjU2fShcXHMqP1tcXHUwNjAwLVxcdTA2RkZdezEsMjU2fSl7MSwyfS9pLFxuICAgICAgICByZWdleGVzO1xuXG4gICAgcmVnZXhlcyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gYWRkUmVnZXhUb2tlbih0b2tlbiwgcmVnZXgsIHN0cmljdFJlZ2V4KSB7XG4gICAgICAgIHJlZ2V4ZXNbdG9rZW5dID0gaXNGdW5jdGlvbihyZWdleClcbiAgICAgICAgICAgID8gcmVnZXhcbiAgICAgICAgICAgIDogZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGVEYXRhKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gaXNTdHJpY3QgJiYgc3RyaWN0UmVnZXggPyBzdHJpY3RSZWdleCA6IHJlZ2V4O1xuICAgICAgICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFBhcnNlUmVnZXhGb3JUb2tlbih0b2tlbiwgY29uZmlnKSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcChyZWdleGVzLCB0b2tlbikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmVnRXhwKHVuZXNjYXBlRm9ybWF0KHRva2VuKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVnZXhlc1t0b2tlbl0oY29uZmlnLl9zdHJpY3QsIGNvbmZpZy5fbG9jYWxlKTtcbiAgICB9XG5cbiAgICAvLyBDb2RlIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zNTYxNDkzL2lzLXRoZXJlLWEtcmVnZXhwLWVzY2FwZS1mdW5jdGlvbi1pbi1qYXZhc2NyaXB0XG4gICAgZnVuY3Rpb24gdW5lc2NhcGVGb3JtYXQocykge1xuICAgICAgICByZXR1cm4gcmVnZXhFc2NhcGUoXG4gICAgICAgICAgICBzXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoJ1xcXFwnLCAnJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXChcXFspfFxcXFwoXFxdKXxcXFsoW15cXF1cXFtdKilcXF18XFxcXCguKS9nLCBmdW5jdGlvbiAoXG4gICAgICAgICAgICAgICAgICAgIG1hdGNoZWQsXG4gICAgICAgICAgICAgICAgICAgIHAxLFxuICAgICAgICAgICAgICAgICAgICBwMixcbiAgICAgICAgICAgICAgICAgICAgcDMsXG4gICAgICAgICAgICAgICAgICAgIHA0XG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwMSB8fCBwMiB8fCBwMyB8fCBwNDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlZ2V4RXNjYXBlKHMpIHtcbiAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgvWy1cXC9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCAnXFxcXCQmJyk7XG4gICAgfVxuXG4gICAgdmFyIHRva2VucyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gYWRkUGFyc2VUb2tlbih0b2tlbiwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBmdW5jID0gY2FsbGJhY2s7XG4gICAgICAgIGlmICh0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0b2tlbiA9IFt0b2tlbl07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTnVtYmVyKGNhbGxiYWNrKSkge1xuICAgICAgICAgICAgZnVuYyA9IGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgICAgICAgICBhcnJheVtjYWxsYmFja10gPSB0b0ludChpbnB1dCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b2tlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdG9rZW5zW3Rva2VuW2ldXSA9IGZ1bmM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRXZWVrUGFyc2VUb2tlbih0b2tlbiwgY2FsbGJhY2spIHtcbiAgICAgICAgYWRkUGFyc2VUb2tlbih0b2tlbiwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnLCB0b2tlbikge1xuICAgICAgICAgICAgY29uZmlnLl93ID0gY29uZmlnLl93IHx8IHt9O1xuICAgICAgICAgICAgY2FsbGJhY2soaW5wdXQsIGNvbmZpZy5fdywgY29uZmlnLCB0b2tlbik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFRpbWVUb0FycmF5RnJvbVRva2VuKHRva2VuLCBpbnB1dCwgY29uZmlnKSB7XG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsICYmIGhhc093blByb3AodG9rZW5zLCB0b2tlbikpIHtcbiAgICAgICAgICAgIHRva2Vuc1t0b2tlbl0oaW5wdXQsIGNvbmZpZy5fYSwgY29uZmlnLCB0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgWUVBUiA9IDAsXG4gICAgICAgIE1PTlRIID0gMSxcbiAgICAgICAgREFURSA9IDIsXG4gICAgICAgIEhPVVIgPSAzLFxuICAgICAgICBNSU5VVEUgPSA0LFxuICAgICAgICBTRUNPTkQgPSA1LFxuICAgICAgICBNSUxMSVNFQ09ORCA9IDYsXG4gICAgICAgIFdFRUsgPSA3LFxuICAgICAgICBXRUVLREFZID0gODtcblxuICAgIGZ1bmN0aW9uIG1vZChuLCB4KSB7XG4gICAgICAgIHJldHVybiAoKG4gJSB4KSArIHgpICUgeDtcbiAgICB9XG5cbiAgICB2YXIgaW5kZXhPZjtcblxuICAgIGlmIChBcnJheS5wcm90b3R5cGUuaW5kZXhPZikge1xuICAgICAgICBpbmRleE9mID0gQXJyYXkucHJvdG90eXBlLmluZGV4T2Y7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaW5kZXhPZiA9IGZ1bmN0aW9uIChvKSB7XG4gICAgICAgICAgICAvLyBJIGtub3dcbiAgICAgICAgICAgIHZhciBpO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpc1tpXSA9PT0gbykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGF5c0luTW9udGgoeWVhciwgbW9udGgpIHtcbiAgICAgICAgaWYgKGlzTmFOKHllYXIpIHx8IGlzTmFOKG1vbnRoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbW9kTW9udGggPSBtb2QobW9udGgsIDEyKTtcbiAgICAgICAgeWVhciArPSAobW9udGggLSBtb2RNb250aCkgLyAxMjtcbiAgICAgICAgcmV0dXJuIG1vZE1vbnRoID09PSAxXG4gICAgICAgICAgICA/IGlzTGVhcFllYXIoeWVhcilcbiAgICAgICAgICAgICAgICA/IDI5XG4gICAgICAgICAgICAgICAgOiAyOFxuICAgICAgICAgICAgOiAzMSAtICgobW9kTW9udGggJSA3KSAlIDIpO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdNJywgWydNTScsIDJdLCAnTW8nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vbnRoKCkgKyAxO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ01NTScsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1vbnRoc1Nob3J0KHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTU1NTScsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1vbnRocyh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdtb250aCcsICdNJyk7XG5cbiAgICAvLyBQUklPUklUWVxuXG4gICAgYWRkVW5pdFByaW9yaXR5KCdtb250aCcsIDgpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignTScsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignTU0nLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignTU1NJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5tb250aHNTaG9ydFJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcbiAgICBhZGRSZWdleFRva2VuKCdNTU1NJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5tb250aHNSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnTScsICdNTSddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W01PTlRIXSA9IHRvSW50KGlucHV0KSAtIDE7XG4gICAgfSk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnTU1NJywgJ01NTU0nXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB2YXIgbW9udGggPSBjb25maWcuX2xvY2FsZS5tb250aHNQYXJzZShpbnB1dCwgdG9rZW4sIGNvbmZpZy5fc3RyaWN0KTtcbiAgICAgICAgLy8gaWYgd2UgZGlkbid0IGZpbmQgYSBtb250aCBuYW1lLCBtYXJrIHRoZSBkYXRlIGFzIGludmFsaWQuXG4gICAgICAgIGlmIChtb250aCAhPSBudWxsKSB7XG4gICAgICAgICAgICBhcnJheVtNT05USF0gPSBtb250aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmludmFsaWRNb250aCA9IGlucHV0O1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBMT0NBTEVTXG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZU1vbnRocyA9ICdKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQgPSAnSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIE1PTlRIU19JTl9GT1JNQVQgPSAvRFtvRF0/KFxcW1teXFxbXFxdXSpcXF18XFxzKStNTU1NPy8sXG4gICAgICAgIGRlZmF1bHRNb250aHNTaG9ydFJlZ2V4ID0gbWF0Y2hXb3JkLFxuICAgICAgICBkZWZhdWx0TW9udGhzUmVnZXggPSBtYXRjaFdvcmQ7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHMobSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzKVxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzXG4gICAgICAgICAgICAgICAgOiB0aGlzLl9tb250aHNbJ3N0YW5kYWxvbmUnXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHMpXG4gICAgICAgICAgICA/IHRoaXMuX21vbnRoc1ttLm1vbnRoKCldXG4gICAgICAgICAgICA6IHRoaXMuX21vbnRoc1tcbiAgICAgICAgICAgICAgICAgICh0aGlzLl9tb250aHMuaXNGb3JtYXQgfHwgTU9OVEhTX0lOX0ZPUk1BVCkudGVzdChmb3JtYXQpXG4gICAgICAgICAgICAgICAgICAgICAgPyAnZm9ybWF0J1xuICAgICAgICAgICAgICAgICAgICAgIDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgICAgIF1bbS5tb250aCgpXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHNTaG9ydChtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHNTaG9ydClcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21vbnRoc1Nob3J0XG4gICAgICAgICAgICAgICAgOiB0aGlzLl9tb250aHNTaG9ydFsnc3RhbmRhbG9uZSddO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRoc1Nob3J0KVxuICAgICAgICAgICAgPyB0aGlzLl9tb250aHNTaG9ydFttLm1vbnRoKCldXG4gICAgICAgICAgICA6IHRoaXMuX21vbnRoc1Nob3J0W1xuICAgICAgICAgICAgICAgICAgTU9OVEhTX0lOX0ZPUk1BVC50ZXN0KGZvcm1hdCkgPyAnZm9ybWF0JyA6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgICAgICBdW20ubW9udGgoKV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlU3RyaWN0UGFyc2UobW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGlpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbGxjID0gbW9udGhOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghdGhpcy5fbW9udGhzUGFyc2UpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IHVzZWRcbiAgICAgICAgICAgIHRoaXMuX21vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgKytpKSB7XG4gICAgICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCBpXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXSA9IHRoaXMubW9udGhzU2hvcnQoXG4gICAgICAgICAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICApLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldID0gdGhpcy5tb250aHMobW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdNTU0nKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdNTU0nKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlTW9udGhzUGFyc2UobW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSwgbW9tLCByZWdleDtcblxuICAgICAgICBpZiAodGhpcy5fbW9udGhzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVN0cmljdFBhcnNlLmNhbGwodGhpcywgbW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX21vbnRoc1BhcnNlKSB7XG4gICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlID0gW107XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPOiBhZGQgc29ydGluZ1xuICAgICAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIG1vbnRoIChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyXG4gICAgICAgIC8vIHNlZSBzb3J0aW5nIGluIGNvbXB1dGVNb250aHNQYXJzZVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIGldKTtcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgIXRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMubW9udGhzKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnJykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMubW9udGhzU2hvcnQobW9tLCAnJykucmVwbGFjZSgnLicsICcnKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RyaWN0ICYmICF0aGlzLl9tb250aHNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHJlZ2V4ID1cbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy5tb250aHMobW9tLCAnJykgKyAnfF4nICsgdGhpcy5tb250aHNTaG9ydChtb20sICcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAocmVnZXgucmVwbGFjZSgnLicsICcnKSwgJ2knKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRlc3QgdGhlIHJlZ2V4XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnTU1NTScgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnTU1NJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmljdCAmJiB0aGlzLl9tb250aHNQYXJzZVtpXS50ZXN0KG1vbnRoTmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIHNldE1vbnRoKG1vbSwgdmFsdWUpIHtcbiAgICAgICAgdmFyIGRheU9mTW9udGg7XG5cbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAvLyBObyBvcFxuICAgICAgICAgICAgcmV0dXJuIG1vbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoL15cXGQrJC8udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRvSW50KHZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBtb20ubG9jYWxlRGF0YSgpLm1vbnRoc1BhcnNlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBBbm90aGVyIHNpbGVudCBmYWlsdXJlP1xuICAgICAgICAgICAgICAgIGlmICghaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb207XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZGF5T2ZNb250aCA9IE1hdGgubWluKG1vbS5kYXRlKCksIGRheXNJbk1vbnRoKG1vbS55ZWFyKCksIHZhbHVlKSk7XG4gICAgICAgIG1vbS5fZFsnc2V0JyArIChtb20uX2lzVVRDID8gJ1VUQycgOiAnJykgKyAnTW9udGgnXSh2YWx1ZSwgZGF5T2ZNb250aCk7XG4gICAgICAgIHJldHVybiBtb207XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0TW9udGgodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHNldE1vbnRoKHRoaXMsIHZhbHVlKTtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGdldCh0aGlzLCAnTW9udGgnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldERheXNJbk1vbnRoKCkge1xuICAgICAgICByZXR1cm4gZGF5c0luTW9udGgodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9udGhzU2hvcnRSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fbW9udGhzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVNb250aHNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTaG9ydFJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzU2hvcnRSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRSZWdleCA9IGRlZmF1bHRNb250aHNTaG9ydFJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX21vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fbW9udGhzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVNb250aHNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9udGhzUmVnZXggPSBkZWZhdWx0TW9udGhzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4XG4gICAgICAgICAgICAgICAgOiB0aGlzLl9tb250aHNSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVNb250aHNQYXJzZSgpIHtcbiAgICAgICAgZnVuY3Rpb24gY21wTGVuUmV2KGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBiLmxlbmd0aCAtIGEubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNob3J0UGllY2VzID0gW10sXG4gICAgICAgICAgICBsb25nUGllY2VzID0gW10sXG4gICAgICAgICAgICBtaXhlZFBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIG1vbTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCBpXSk7XG4gICAgICAgICAgICBzaG9ydFBpZWNlcy5wdXNoKHRoaXMubW9udGhzU2hvcnQobW9tLCAnJykpO1xuICAgICAgICAgICAgbG9uZ1BpZWNlcy5wdXNoKHRoaXMubW9udGhzKG1vbSwgJycpKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2godGhpcy5tb250aHMobW9tLCAnJykpO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaCh0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIG1vbnRoIChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyIGl0XG4gICAgICAgIC8vIHdpbGwgbWF0Y2ggdGhlIGxvbmdlciBwaWVjZS5cbiAgICAgICAgc2hvcnRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBsb25nUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbWl4ZWRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgc2hvcnRQaWVjZXNbaV0gPSByZWdleEVzY2FwZShzaG9ydFBpZWNlc1tpXSk7XG4gICAgICAgICAgICBsb25nUGllY2VzW2ldID0gcmVnZXhFc2NhcGUobG9uZ1BpZWNlc1tpXSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDI0OyBpKyspIHtcbiAgICAgICAgICAgIG1peGVkUGllY2VzW2ldID0gcmVnZXhFc2NhcGUobWl4ZWRQaWVjZXNbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbW9udGhzUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBtaXhlZFBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX21vbnRoc1Nob3J0UmVnZXggPSB0aGlzLl9tb250aHNSZWdleDtcbiAgICAgICAgdGhpcy5fbW9udGhzU3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIGxvbmdQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIHNob3J0UGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdZJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgeSA9IHRoaXMueWVhcigpO1xuICAgICAgICByZXR1cm4geSA8PSA5OTk5ID8gemVyb0ZpbGwoeSwgNCkgOiAnKycgKyB5O1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWScsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnllYXIoKSAlIDEwMDtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVlZWScsIDRdLCAwLCAneWVhcicpO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVlZWVknLCA1XSwgMCwgJ3llYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVlZWScsIDYsIHRydWVdLCAwLCAneWVhcicpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCd5ZWFyJywgJ3knKTtcblxuICAgIC8vIFBSSU9SSVRJRVNcblxuICAgIGFkZFVuaXRQcmlvcml0eSgneWVhcicsIDEpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignWScsIG1hdGNoU2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCdZWScsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdZWVlZJywgbWF0Y2gxdG80LCBtYXRjaDQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZWVlZJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZWVlZWScsIG1hdGNoMXRvNiwgbWF0Y2g2KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydZWVlZWScsICdZWVlZWVknXSwgWUVBUik7XG4gICAgYWRkUGFyc2VUb2tlbignWVlZWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbWUVBUl0gPVxuICAgICAgICAgICAgaW5wdXQubGVuZ3RoID09PSAyID8gaG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpIDogdG9JbnQoaW5wdXQpO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1lZJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtZRUFSXSA9IGhvb2tzLnBhcnNlVHdvRGlnaXRZZWFyKGlucHV0KTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdZJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtZRUFSXSA9IHBhcnNlSW50KGlucHV0LCAxMCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICBmdW5jdGlvbiBkYXlzSW5ZZWFyKHllYXIpIHtcbiAgICAgICAgcmV0dXJuIGlzTGVhcFllYXIoeWVhcikgPyAzNjYgOiAzNjU7XG4gICAgfVxuXG4gICAgLy8gSE9PS1NcblxuICAgIGhvb2tzLnBhcnNlVHdvRGlnaXRZZWFyID0gZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHJldHVybiB0b0ludChpbnB1dCkgKyAodG9JbnQoaW5wdXQpID4gNjggPyAxOTAwIDogMjAwMCk7XG4gICAgfTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXRZZWFyID0gbWFrZUdldFNldCgnRnVsbFllYXInLCB0cnVlKTtcblxuICAgIGZ1bmN0aW9uIGdldElzTGVhcFllYXIoKSB7XG4gICAgICAgIHJldHVybiBpc0xlYXBZZWFyKHRoaXMueWVhcigpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEYXRlKHksIG0sIGQsIGgsIE0sIHMsIG1zKSB7XG4gICAgICAgIC8vIGNhbid0IGp1c3QgYXBwbHkoKSB0byBjcmVhdGUgYSBkYXRlOlxuICAgICAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3EvMTgxMzQ4XG4gICAgICAgIHZhciBkYXRlO1xuICAgICAgICAvLyB0aGUgZGF0ZSBjb25zdHJ1Y3RvciByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKHkgKyA0MDAsIG0sIGQsIGgsIE0sIHMsIG1zKTtcbiAgICAgICAgICAgIGlmIChpc0Zpbml0ZShkYXRlLmdldEZ1bGxZZWFyKCkpKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXRGdWxsWWVhcih5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZSh5LCBtLCBkLCBoLCBNLCBzLCBtcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVVVENEYXRlKHkpIHtcbiAgICAgICAgdmFyIGRhdGUsIGFyZ3M7XG4gICAgICAgIC8vIHRoZSBEYXRlLlVUQyBmdW5jdGlvbiByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICBhcmdzWzBdID0geSArIDQwMDtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLCBhcmdzKSk7XG4gICAgICAgICAgICBpZiAoaXNGaW5pdGUoZGF0ZS5nZXRVVENGdWxsWWVhcigpKSkge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCwgYXJndW1lbnRzKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG5cbiAgICAvLyBzdGFydC1vZi1maXJzdC13ZWVrIC0gc3RhcnQtb2YteWVhclxuICAgIGZ1bmN0aW9uIGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgLy8gZmlyc3Qtd2VlayBkYXkgLS0gd2hpY2ggamFudWFyeSBpcyBhbHdheXMgaW4gdGhlIGZpcnN0IHdlZWsgKDQgZm9yIGlzbywgMSBmb3Igb3RoZXIpXG4gICAgICAgICAgICBmd2QgPSA3ICsgZG93IC0gZG95LFxuICAgICAgICAgICAgLy8gZmlyc3Qtd2VlayBkYXkgbG9jYWwgd2Vla2RheSAtLSB3aGljaCBsb2NhbCB3ZWVrZGF5IGlzIGZ3ZFxuICAgICAgICAgICAgZndkbHcgPSAoNyArIGNyZWF0ZVVUQ0RhdGUoeWVhciwgMCwgZndkKS5nZXRVVENEYXkoKSAtIGRvdykgJSA3O1xuXG4gICAgICAgIHJldHVybiAtZndkbHcgKyBmd2QgLSAxO1xuICAgIH1cblxuICAgIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGUjQ2FsY3VsYXRpbmdfYV9kYXRlX2dpdmVuX3RoZV95ZWFyLjJDX3dlZWtfbnVtYmVyX2FuZF93ZWVrZGF5XG4gICAgZnVuY3Rpb24gZGF5T2ZZZWFyRnJvbVdlZWtzKHllYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KSB7XG4gICAgICAgIHZhciBsb2NhbFdlZWtkYXkgPSAoNyArIHdlZWtkYXkgLSBkb3cpICUgNyxcbiAgICAgICAgICAgIHdlZWtPZmZzZXQgPSBmaXJzdFdlZWtPZmZzZXQoeWVhciwgZG93LCBkb3kpLFxuICAgICAgICAgICAgZGF5T2ZZZWFyID0gMSArIDcgKiAod2VlayAtIDEpICsgbG9jYWxXZWVrZGF5ICsgd2Vla09mZnNldCxcbiAgICAgICAgICAgIHJlc1llYXIsXG4gICAgICAgICAgICByZXNEYXlPZlllYXI7XG5cbiAgICAgICAgaWYgKGRheU9mWWVhciA8PSAwKSB7XG4gICAgICAgICAgICByZXNZZWFyID0geWVhciAtIDE7XG4gICAgICAgICAgICByZXNEYXlPZlllYXIgPSBkYXlzSW5ZZWFyKHJlc1llYXIpICsgZGF5T2ZZZWFyO1xuICAgICAgICB9IGVsc2UgaWYgKGRheU9mWWVhciA+IGRheXNJblllYXIoeWVhcikpIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSB5ZWFyICsgMTtcbiAgICAgICAgICAgIHJlc0RheU9mWWVhciA9IGRheU9mWWVhciAtIGRheXNJblllYXIoeWVhcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNZZWFyID0geWVhcjtcbiAgICAgICAgICAgIHJlc0RheU9mWWVhciA9IGRheU9mWWVhcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB5ZWFyOiByZXNZZWFyLFxuICAgICAgICAgICAgZGF5T2ZZZWFyOiByZXNEYXlPZlllYXIsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla09mWWVhcihtb20sIGRvdywgZG95KSB7XG4gICAgICAgIHZhciB3ZWVrT2Zmc2V0ID0gZmlyc3RXZWVrT2Zmc2V0KG1vbS55ZWFyKCksIGRvdywgZG95KSxcbiAgICAgICAgICAgIHdlZWsgPSBNYXRoLmZsb29yKChtb20uZGF5T2ZZZWFyKCkgLSB3ZWVrT2Zmc2V0IC0gMSkgLyA3KSArIDEsXG4gICAgICAgICAgICByZXNXZWVrLFxuICAgICAgICAgICAgcmVzWWVhcjtcblxuICAgICAgICBpZiAod2VlayA8IDEpIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSBtb20ueWVhcigpIC0gMTtcbiAgICAgICAgICAgIHJlc1dlZWsgPSB3ZWVrICsgd2Vla3NJblllYXIocmVzWWVhciwgZG93LCBkb3kpO1xuICAgICAgICB9IGVsc2UgaWYgKHdlZWsgPiB3ZWVrc0luWWVhcihtb20ueWVhcigpLCBkb3csIGRveSkpIHtcbiAgICAgICAgICAgIHJlc1dlZWsgPSB3ZWVrIC0gd2Vla3NJblllYXIobW9tLnllYXIoKSwgZG93LCBkb3kpO1xuICAgICAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCkgKyAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCk7XG4gICAgICAgICAgICByZXNXZWVrID0gd2VlaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB3ZWVrOiByZXNXZWVrLFxuICAgICAgICAgICAgeWVhcjogcmVzWWVhcixcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrc0luWWVhcih5ZWFyLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla09mZnNldCA9IGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSksXG4gICAgICAgICAgICB3ZWVrT2Zmc2V0TmV4dCA9IGZpcnN0V2Vla09mZnNldCh5ZWFyICsgMSwgZG93LCBkb3kpO1xuICAgICAgICByZXR1cm4gKGRheXNJblllYXIoeWVhcikgLSB3ZWVrT2Zmc2V0ICsgd2Vla09mZnNldE5leHQpIC8gNztcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigndycsIFsnd3cnLCAyXSwgJ3dvJywgJ3dlZWsnKTtcbiAgICBhZGRGb3JtYXRUb2tlbignVycsIFsnV1cnLCAyXSwgJ1dvJywgJ2lzb1dlZWsnKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnd2VlaycsICd3Jyk7XG4gICAgYWRkVW5pdEFsaWFzKCdpc29XZWVrJywgJ1cnKTtcblxuICAgIC8vIFBSSU9SSVRJRVNcblxuICAgIGFkZFVuaXRQcmlvcml0eSgnd2VlaycsIDUpO1xuICAgIGFkZFVuaXRQcmlvcml0eSgnaXNvV2VlaycsIDUpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbigndycsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignd3cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignVycsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignV1cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ3cnLCAnd3cnLCAnVycsICdXVyddLCBmdW5jdGlvbiAoXG4gICAgICAgIGlucHV0LFxuICAgICAgICB3ZWVrLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHRva2VuXG4gICAgKSB7XG4gICAgICAgIHdlZWtbdG9rZW4uc3Vic3RyKDAsIDEpXSA9IHRvSW50KGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWsobW9tKSB7XG4gICAgICAgIHJldHVybiB3ZWVrT2ZZZWFyKG1vbSwgdGhpcy5fd2Vlay5kb3csIHRoaXMuX3dlZWsuZG95KS53ZWVrO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2VlayA9IHtcbiAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA2LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZUZpcnN0RGF5T2ZXZWVrKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2Vlay5kb3c7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlRmlyc3REYXlPZlllYXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl93ZWVrLmRveTtcbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXRXZWVrKGlucHV0KSB7XG4gICAgICAgIHZhciB3ZWVrID0gdGhpcy5sb2NhbGVEYXRhKCkud2Vlayh0aGlzKTtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyB3ZWVrIDogdGhpcy5hZGQoKGlucHV0IC0gd2VlaykgKiA3LCAnZCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldElTT1dlZWsoaW5wdXQpIHtcbiAgICAgICAgdmFyIHdlZWsgPSB3ZWVrT2ZZZWFyKHRoaXMsIDEsIDQpLndlZWs7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gd2VlayA6IHRoaXMuYWRkKChpbnB1dCAtIHdlZWspICogNywgJ2QnKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignZCcsIDAsICdkbycsICdkYXknKTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkZCcsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzTWluKHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZGRkJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNTaG9ydCh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2RkZGQnLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5cyh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2UnLCAwLCAwLCAnd2Vla2RheScpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdFJywgMCwgMCwgJ2lzb1dlZWtkYXknKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnZGF5JywgJ2QnKTtcbiAgICBhZGRVbml0QWxpYXMoJ3dlZWtkYXknLCAnZScpO1xuICAgIGFkZFVuaXRBbGlhcygnaXNvV2Vla2RheScsICdFJyk7XG5cbiAgICAvLyBQUklPUklUWVxuICAgIGFkZFVuaXRQcmlvcml0eSgnZGF5JywgMTEpO1xuICAgIGFkZFVuaXRQcmlvcml0eSgnd2Vla2RheScsIDExKTtcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2lzb1dlZWtkYXknLCAxMSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdkJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdlJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdFJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdkZCcsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNNaW5SZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG4gICAgYWRkUmVnZXhUb2tlbignZGRkJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c1Nob3J0UmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2RkZGQnLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzUmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydkZCcsICdkZGQnLCAnZGRkZCddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgdmFyIHdlZWtkYXkgPSBjb25maWcuX2xvY2FsZS53ZWVrZGF5c1BhcnNlKGlucHV0LCB0b2tlbiwgY29uZmlnLl9zdHJpY3QpO1xuICAgICAgICAvLyBpZiB3ZSBkaWRuJ3QgZ2V0IGEgd2Vla2RheSBuYW1lLCBtYXJrIHRoZSBkYXRlIGFzIGludmFsaWRcbiAgICAgICAgaWYgKHdlZWtkYXkgIT0gbnVsbCkge1xuICAgICAgICAgICAgd2Vlay5kID0gd2Vla2RheTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmludmFsaWRXZWVrZGF5ID0gaW5wdXQ7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZCcsICdlJywgJ0UnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHdlZWtbdG9rZW5dID0gdG9JbnQoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgZnVuY3Rpb24gcGFyc2VXZWVrZGF5KGlucHV0LCBsb2NhbGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNOYU4oaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQoaW5wdXQsIDEwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlucHV0ID0gbG9jYWxlLndlZWtkYXlzUGFyc2UoaW5wdXQpO1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VJc29XZWVrZGF5KGlucHV0LCBsb2NhbGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCkgJSA3IHx8IDc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzTmFOKGlucHV0KSA/IG51bGwgOiBpbnB1dDtcbiAgICB9XG5cbiAgICAvLyBMT0NBTEVTXG4gICAgZnVuY3Rpb24gc2hpZnRXZWVrZGF5cyh3cywgbikge1xuICAgICAgICByZXR1cm4gd3Muc2xpY2UobiwgNykuY29uY2F0KHdzLnNsaWNlKDAsIG4pKTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZVdlZWtkYXlzID0gJ1N1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBkZWZhdWx0TG9jYWxlV2Vla2RheXNTaG9ydCA9ICdTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQnLnNwbGl0KCdfJyksXG4gICAgICAgIGRlZmF1bHRMb2NhbGVXZWVrZGF5c01pbiA9ICdTdV9Nb19UdV9XZV9UaF9Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgZGVmYXVsdFdlZWtkYXlzUmVnZXggPSBtYXRjaFdvcmQsXG4gICAgICAgIGRlZmF1bHRXZWVrZGF5c1Nob3J0UmVnZXggPSBtYXRjaFdvcmQsXG4gICAgICAgIGRlZmF1bHRXZWVrZGF5c01pblJlZ2V4ID0gbWF0Y2hXb3JkO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXMobSwgZm9ybWF0KSB7XG4gICAgICAgIHZhciB3ZWVrZGF5cyA9IGlzQXJyYXkodGhpcy5fd2Vla2RheXMpXG4gICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzXG4gICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzW1xuICAgICAgICAgICAgICAgICAgbSAmJiBtICE9PSB0cnVlICYmIHRoaXMuX3dlZWtkYXlzLmlzRm9ybWF0LnRlc3QoZm9ybWF0KVxuICAgICAgICAgICAgICAgICAgICAgID8gJ2Zvcm1hdCdcbiAgICAgICAgICAgICAgICAgICAgICA6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgICAgICBdO1xuICAgICAgICByZXR1cm4gbSA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyBzaGlmdFdlZWtkYXlzKHdlZWtkYXlzLCB0aGlzLl93ZWVrLmRvdylcbiAgICAgICAgICAgIDogbVxuICAgICAgICAgICAgPyB3ZWVrZGF5c1ttLmRheSgpXVxuICAgICAgICAgICAgOiB3ZWVrZGF5cztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5c1Nob3J0KG0pIHtcbiAgICAgICAgcmV0dXJuIG0gPT09IHRydWVcbiAgICAgICAgICAgID8gc2hpZnRXZWVrZGF5cyh0aGlzLl93ZWVrZGF5c1Nob3J0LCB0aGlzLl93ZWVrLmRvdylcbiAgICAgICAgICAgIDogbVxuICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c1Nob3J0W20uZGF5KCldXG4gICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzU2hvcnQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXNNaW4obSkge1xuICAgICAgICByZXR1cm4gbSA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyBzaGlmdFdlZWtkYXlzKHRoaXMuX3dlZWtkYXlzTWluLCB0aGlzLl93ZWVrLmRvdylcbiAgICAgICAgICAgIDogbVxuICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c01pblttLmRheSgpXVxuICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c01pbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVTdHJpY3RQYXJzZSQxKHdlZWtkYXlOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGlpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbGxjID0gd2Vla2RheU5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCF0aGlzLl93ZWVrZGF5c1BhcnNlKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2UgPSBbXTtcblxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7ICsraSkge1xuICAgICAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlW2ldID0gdGhpcy53ZWVrZGF5c01pbihcbiAgICAgICAgICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgICkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbaV0gPSB0aGlzLndlZWtkYXlzU2hvcnQoXG4gICAgICAgICAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICApLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZVtpXSA9IHRoaXMud2Vla2RheXMobW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdkZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSAnZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnZGRkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSAnZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzUGFyc2Uod2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLCBtb20sIHJlZ2V4O1xuXG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVTdHJpY3RQYXJzZSQxLmNhbGwodGhpcywgd2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZSkge1xuICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9mdWxsV2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG5cbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgIXRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLndlZWtkYXlzKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnXFxcXC4/JykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy53ZWVrZGF5c1Nob3J0KG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnXFxcXC4/JykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMud2Vla2RheXNNaW4obW9tLCAnJykucmVwbGFjZSgnLicsICdcXFxcLj8nKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHJlZ2V4ID1cbiAgICAgICAgICAgICAgICAgICAgJ14nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWVrZGF5cyhtb20sICcnKSArXG4gICAgICAgICAgICAgICAgICAgICd8XicgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJykgK1xuICAgICAgICAgICAgICAgICAgICAnfF4nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWVrZGF5c01pbihtb20sICcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChyZWdleC5yZXBsYWNlKCcuJywgJycpLCAnaScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGVzdCB0aGUgcmVnZXhcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdkZGRkJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnZGRkJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ2RkJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyaWN0ICYmIHRoaXMuX3dlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldERheU9mV2VlayhpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRheSA9IHRoaXMuX2lzVVRDID8gdGhpcy5fZC5nZXRVVENEYXkoKSA6IHRoaXMuX2QuZ2V0RGF5KCk7XG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpbnB1dCA9IHBhcnNlV2Vla2RheShpbnB1dCwgdGhpcy5sb2NhbGVEYXRhKCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkKGlucHV0IC0gZGF5LCAnZCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGRheTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldExvY2FsZURheU9mV2VlayhpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdlZWtkYXkgPSAodGhpcy5kYXkoKSArIDcgLSB0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3cpICUgNztcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyB3ZWVrZGF5IDogdGhpcy5hZGQoaW5wdXQgLSB3ZWVrZGF5LCAnZCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldElTT0RheU9mV2VlayhpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBiZWhhdmVzIHRoZSBzYW1lIGFzIG1vbWVudCNkYXkgZXhjZXB0XG4gICAgICAgIC8vIGFzIGEgZ2V0dGVyLCByZXR1cm5zIDcgaW5zdGVhZCBvZiAwICgxLTcgcmFuZ2UgaW5zdGVhZCBvZiAwLTYpXG4gICAgICAgIC8vIGFzIGEgc2V0dGVyLCBzdW5kYXkgc2hvdWxkIGJlbG9uZyB0byB0aGUgcHJldmlvdXMgd2Vlay5cblxuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIHdlZWtkYXkgPSBwYXJzZUlzb1dlZWtkYXkoaW5wdXQsIHRoaXMubG9jYWxlRGF0YSgpKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRheSh0aGlzLmRheSgpICUgNyA/IHdlZWtkYXkgOiB3ZWVrZGF5IC0gNyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXkoKSB8fCA3O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla2RheXNSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNSZWdleCA9IGRlZmF1bHRXZWVrZGF5c1JlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzUmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrZGF5c1Nob3J0UmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZVdlZWtkYXlzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1Nob3J0UmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleCA9IGRlZmF1bHRXZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4ICYmIGlzU3RyaWN0XG4gICAgICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtkYXlzTWluUmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZVdlZWtkYXlzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNNaW5SZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzTWluUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzTWluUmVnZXggPSBkZWZhdWx0V2Vla2RheXNNaW5SZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4ICYmIGlzU3RyaWN0XG4gICAgICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4XG4gICAgICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZVdlZWtkYXlzUGFyc2UoKSB7XG4gICAgICAgIGZ1bmN0aW9uIGNtcExlblJldihhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4gYi5sZW5ndGggLSBhLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtaW5QaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIHNob3J0UGllY2VzID0gW10sXG4gICAgICAgICAgICBsb25nUGllY2VzID0gW10sXG4gICAgICAgICAgICBtaXhlZFBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgIG1pbnAsXG4gICAgICAgICAgICBzaG9ydHAsXG4gICAgICAgICAgICBsb25ncDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIDFdKS5kYXkoaSk7XG4gICAgICAgICAgICBtaW5wID0gcmVnZXhFc2NhcGUodGhpcy53ZWVrZGF5c01pbihtb20sICcnKSk7XG4gICAgICAgICAgICBzaG9ydHAgPSByZWdleEVzY2FwZSh0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJykpO1xuICAgICAgICAgICAgbG9uZ3AgPSByZWdleEVzY2FwZSh0aGlzLndlZWtkYXlzKG1vbSwgJycpKTtcbiAgICAgICAgICAgIG1pblBpZWNlcy5wdXNoKG1pbnApO1xuICAgICAgICAgICAgc2hvcnRQaWVjZXMucHVzaChzaG9ydHApO1xuICAgICAgICAgICAgbG9uZ1BpZWNlcy5wdXNoKGxvbmdwKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2gobWlucCk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKHNob3J0cCk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKGxvbmdwKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIHdlZWtkYXkgKG9yIGFiYnIpIGlzIGEgcHJlZml4IG9mIGFub3RoZXIgaXRcbiAgICAgICAgLy8gd2lsbCBtYXRjaCB0aGUgbG9uZ2VyIHBpZWNlLlxuICAgICAgICBtaW5QaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBzaG9ydFBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIGxvbmdQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBtaXhlZFBpZWNlcy5zb3J0KGNtcExlblJldik7XG5cbiAgICAgICAgdGhpcy5fd2Vla2RheXNSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIG1peGVkUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4ID0gdGhpcy5fd2Vla2RheXNSZWdleDtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5SZWdleCA9IHRoaXMuX3dlZWtkYXlzUmVnZXg7XG5cbiAgICAgICAgdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgbG9uZ1BpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBzaG9ydFBpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgbWluUGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGZ1bmN0aW9uIGhGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhvdXJzKCkgJSAxMiB8fCAxMjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBrRm9ybWF0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ob3VycygpIHx8IDI0O1xuICAgIH1cblxuICAgIGFkZEZvcm1hdFRva2VuKCdIJywgWydISCcsIDJdLCAwLCAnaG91cicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdoJywgWydoaCcsIDJdLCAwLCBoRm9ybWF0KTtcbiAgICBhZGRGb3JtYXRUb2tlbignaycsIFsna2snLCAyXSwgMCwga0Zvcm1hdCk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignaG1tJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJycgKyBoRm9ybWF0LmFwcGx5KHRoaXMpICsgemVyb0ZpbGwodGhpcy5taW51dGVzKCksIDIpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2htbXNzJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgJycgK1xuICAgICAgICAgICAgaEZvcm1hdC5hcHBseSh0aGlzKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMikgK1xuICAgICAgICAgICAgemVyb0ZpbGwodGhpcy5zZWNvbmRzKCksIDIpXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignSG1tJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJycgKyB0aGlzLmhvdXJzKCkgKyB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMik7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignSG1tc3MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAnJyArXG4gICAgICAgICAgICB0aGlzLmhvdXJzKCkgK1xuICAgICAgICAgICAgemVyb0ZpbGwodGhpcy5taW51dGVzKCksIDIpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMuc2Vjb25kcygpLCAyKVxuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gbWVyaWRpZW0odG9rZW4sIGxvd2VyY2FzZSkge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbih0b2tlbiwgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1lcmlkaWVtKFxuICAgICAgICAgICAgICAgIHRoaXMuaG91cnMoKSxcbiAgICAgICAgICAgICAgICB0aGlzLm1pbnV0ZXMoKSxcbiAgICAgICAgICAgICAgICBsb3dlcmNhc2VcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG1lcmlkaWVtKCdhJywgdHJ1ZSk7XG4gICAgbWVyaWRpZW0oJ0EnLCBmYWxzZSk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ2hvdXInLCAnaCcpO1xuXG4gICAgLy8gUFJJT1JJVFlcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2hvdXInLCAxMyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBmdW5jdGlvbiBtYXRjaE1lcmlkaWVtKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5fbWVyaWRpZW1QYXJzZTtcbiAgICB9XG5cbiAgICBhZGRSZWdleFRva2VuKCdhJywgbWF0Y2hNZXJpZGllbSk7XG4gICAgYWRkUmVnZXhUb2tlbignQScsIG1hdGNoTWVyaWRpZW0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0gnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2gnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2snLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0hIJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2hoJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2trJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuXG4gICAgYWRkUmVnZXhUb2tlbignaG1tJywgbWF0Y2gzdG80KTtcbiAgICBhZGRSZWdleFRva2VuKCdobW1zcycsIG1hdGNoNXRvNik7XG4gICAgYWRkUmVnZXhUb2tlbignSG1tJywgbWF0Y2gzdG80KTtcbiAgICBhZGRSZWdleFRva2VuKCdIbW1zcycsIG1hdGNoNXRvNik7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnSCcsICdISCddLCBIT1VSKTtcbiAgICBhZGRQYXJzZVRva2VuKFsnaycsICdrayddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIGtJbnB1dCA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSBrSW5wdXQgPT09IDI0ID8gMCA6IGtJbnB1dDtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKFsnYScsICdBJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2lzUG0gPSBjb25maWcuX2xvY2FsZS5pc1BNKGlucHV0KTtcbiAgICAgICAgY29uZmlnLl9tZXJpZGllbSA9IGlucHV0O1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oWydoJywgJ2hoJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHRydWU7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignaG1tJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIHZhciBwb3MgPSBpbnB1dC5sZW5ndGggLSAyO1xuICAgICAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0LnN1YnN0cigwLCBwb3MpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MpKTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHRydWU7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignaG1tc3MnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvczEgPSBpbnB1dC5sZW5ndGggLSA0LFxuICAgICAgICAgICAgcG9zMiA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvczEpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MxLCAyKSk7XG4gICAgICAgIGFycmF5W1NFQ09ORF0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMikpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdIbW0nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvcyA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvcykpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvcykpO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ0htbXNzJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIHZhciBwb3MxID0gaW5wdXQubGVuZ3RoIC0gNCxcbiAgICAgICAgICAgIHBvczIgPSBpbnB1dC5sZW5ndGggLSAyO1xuICAgICAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0LnN1YnN0cigwLCBwb3MxKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMSwgMikpO1xuICAgICAgICBhcnJheVtTRUNPTkRdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczIpKTtcbiAgICB9KTtcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIGZ1bmN0aW9uIGxvY2FsZUlzUE0oaW5wdXQpIHtcbiAgICAgICAgLy8gSUU4IFF1aXJrcyBNb2RlICYgSUU3IFN0YW5kYXJkcyBNb2RlIGRvIG5vdCBhbGxvdyBhY2Nlc3Npbmcgc3RyaW5ncyBsaWtlIGFycmF5c1xuICAgICAgICAvLyBVc2luZyBjaGFyQXQgc2hvdWxkIGJlIG1vcmUgY29tcGF0aWJsZS5cbiAgICAgICAgcmV0dXJuIChpbnB1dCArICcnKS50b0xvd2VyQ2FzZSgpLmNoYXJBdCgwKSA9PT0gJ3AnO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlTWVyaWRpZW1QYXJzZSA9IC9bYXBdXFwuP20/XFwuPy9pLFxuICAgICAgICAvLyBTZXR0aW5nIHRoZSBob3VyIHNob3VsZCBrZWVwIHRoZSB0aW1lLCBiZWNhdXNlIHRoZSB1c2VyIGV4cGxpY2l0bHlcbiAgICAgICAgLy8gc3BlY2lmaWVkIHdoaWNoIGhvdXIgdGhleSB3YW50LiBTbyB0cnlpbmcgdG8gbWFpbnRhaW4gdGhlIHNhbWUgaG91ciAoaW5cbiAgICAgICAgLy8gYSBuZXcgdGltZXpvbmUpIG1ha2VzIHNlbnNlLiBBZGRpbmcvc3VidHJhY3RpbmcgaG91cnMgZG9lcyBub3QgZm9sbG93XG4gICAgICAgIC8vIHRoaXMgcnVsZS5cbiAgICAgICAgZ2V0U2V0SG91ciA9IG1ha2VHZXRTZXQoJ0hvdXJzJywgdHJ1ZSk7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNZXJpZGllbShob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICBpZiAoaG91cnMgPiAxMSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAncG0nIDogJ1BNJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ2FtJyA6ICdBTSc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgYmFzZUNvbmZpZyA9IHtcbiAgICAgICAgY2FsZW5kYXI6IGRlZmF1bHRDYWxlbmRhcixcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IGRlZmF1bHRMb25nRGF0ZUZvcm1hdCxcbiAgICAgICAgaW52YWxpZERhdGU6IGRlZmF1bHRJbnZhbGlkRGF0ZSxcbiAgICAgICAgb3JkaW5hbDogZGVmYXVsdE9yZGluYWwsXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IGRlZmF1bHREYXlPZk1vbnRoT3JkaW5hbFBhcnNlLFxuICAgICAgICByZWxhdGl2ZVRpbWU6IGRlZmF1bHRSZWxhdGl2ZVRpbWUsXG5cbiAgICAgICAgbW9udGhzOiBkZWZhdWx0TG9jYWxlTW9udGhzLFxuICAgICAgICBtb250aHNTaG9ydDogZGVmYXVsdExvY2FsZU1vbnRoc1Nob3J0LFxuXG4gICAgICAgIHdlZWs6IGRlZmF1bHRMb2NhbGVXZWVrLFxuXG4gICAgICAgIHdlZWtkYXlzOiBkZWZhdWx0TG9jYWxlV2Vla2RheXMsXG4gICAgICAgIHdlZWtkYXlzTWluOiBkZWZhdWx0TG9jYWxlV2Vla2RheXNNaW4sXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6IGRlZmF1bHRMb2NhbGVXZWVrZGF5c1Nob3J0LFxuXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IGRlZmF1bHRMb2NhbGVNZXJpZGllbVBhcnNlLFxuICAgIH07XG5cbiAgICAvLyBpbnRlcm5hbCBzdG9yYWdlIGZvciBsb2NhbGUgY29uZmlnIGZpbGVzXG4gICAgdmFyIGxvY2FsZXMgPSB7fSxcbiAgICAgICAgbG9jYWxlRmFtaWxpZXMgPSB7fSxcbiAgICAgICAgZ2xvYmFsTG9jYWxlO1xuXG4gICAgZnVuY3Rpb24gY29tbW9uUHJlZml4KGFycjEsIGFycjIpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBtaW5sID0gTWF0aC5taW4oYXJyMS5sZW5ndGgsIGFycjIubGVuZ3RoKTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IG1pbmw7IGkgKz0gMSkge1xuICAgICAgICAgICAgaWYgKGFycjFbaV0gIT09IGFycjJbaV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWlubDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBub3JtYWxpemVMb2NhbGUoa2V5KSB7XG4gICAgICAgIHJldHVybiBrZXkgPyBrZXkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCdfJywgJy0nKSA6IGtleTtcbiAgICB9XG5cbiAgICAvLyBwaWNrIHRoZSBsb2NhbGUgZnJvbSB0aGUgYXJyYXlcbiAgICAvLyB0cnkgWydlbi1hdScsICdlbi1nYiddIGFzICdlbi1hdScsICdlbi1nYicsICdlbicsIGFzIGluIG1vdmUgdGhyb3VnaCB0aGUgbGlzdCB0cnlpbmcgZWFjaFxuICAgIC8vIHN1YnN0cmluZyBmcm9tIG1vc3Qgc3BlY2lmaWMgdG8gbGVhc3QsIGJ1dCBtb3ZlIHRvIHRoZSBuZXh0IGFycmF5IGl0ZW0gaWYgaXQncyBhIG1vcmUgc3BlY2lmaWMgdmFyaWFudCB0aGFuIHRoZSBjdXJyZW50IHJvb3RcbiAgICBmdW5jdGlvbiBjaG9vc2VMb2NhbGUobmFtZXMpIHtcbiAgICAgICAgdmFyIGkgPSAwLFxuICAgICAgICAgICAgaixcbiAgICAgICAgICAgIG5leHQsXG4gICAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgICBzcGxpdDtcblxuICAgICAgICB3aGlsZSAoaSA8IG5hbWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgc3BsaXQgPSBub3JtYWxpemVMb2NhbGUobmFtZXNbaV0pLnNwbGl0KCctJyk7XG4gICAgICAgICAgICBqID0gc3BsaXQubGVuZ3RoO1xuICAgICAgICAgICAgbmV4dCA9IG5vcm1hbGl6ZUxvY2FsZShuYW1lc1tpICsgMV0pO1xuICAgICAgICAgICAgbmV4dCA9IG5leHQgPyBuZXh0LnNwbGl0KCctJykgOiBudWxsO1xuICAgICAgICAgICAgd2hpbGUgKGogPiAwKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxlID0gbG9hZExvY2FsZShzcGxpdC5zbGljZSgwLCBqKS5qb2luKCctJykpO1xuICAgICAgICAgICAgICAgIGlmIChsb2NhbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBuZXh0ICYmXG4gICAgICAgICAgICAgICAgICAgIG5leHQubGVuZ3RoID49IGogJiZcbiAgICAgICAgICAgICAgICAgICAgY29tbW9uUHJlZml4KHNwbGl0LCBuZXh0KSA+PSBqIC0gMVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAvL3RoZSBuZXh0IGFycmF5IGl0ZW0gaXMgYmV0dGVyIHRoYW4gYSBzaGFsbG93ZXIgc3Vic3RyaW5nIG9mIHRoaXMgb25lXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBqLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2FkTG9jYWxlKG5hbWUpIHtcbiAgICAgICAgdmFyIG9sZExvY2FsZSA9IG51bGwsXG4gICAgICAgICAgICBhbGlhc2VkUmVxdWlyZTtcbiAgICAgICAgLy8gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gcmVnaXN0ZXIgYW5kIGxvYWQgYWxsIHRoZSBsb2NhbGVzIGluIE5vZGVcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgbW9kdWxlICYmXG4gICAgICAgICAgICBtb2R1bGUuZXhwb3J0c1xuICAgICAgICApIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgb2xkTG9jYWxlID0gZ2xvYmFsTG9jYWxlLl9hYmJyO1xuICAgICAgICAgICAgICAgIGFsaWFzZWRSZXF1aXJlID0gcmVxdWlyZTtcbiAgICAgICAgICAgICAgICBhbGlhc2VkUmVxdWlyZSgnLi9sb2NhbGUvJyArIG5hbWUpO1xuICAgICAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShvbGRMb2NhbGUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIG1hcmsgYXMgbm90IGZvdW5kIHRvIGF2b2lkIHJlcGVhdGluZyBleHBlbnNpdmUgZmlsZSByZXF1aXJlIGNhbGwgY2F1c2luZyBoaWdoIENQVVxuICAgICAgICAgICAgICAgIC8vIHdoZW4gdHJ5aW5nIHRvIGZpbmQgZW4tVVMsIGVuX1VTLCBlbi11cyBmb3IgZXZlcnkgZm9ybWF0IGNhbGxcbiAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbnVsbDsgLy8gbnVsbCBtZWFucyBub3QgZm91bmRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgbG9hZCBsb2NhbGUgYW5kIHRoZW4gc2V0IHRoZSBnbG9iYWwgbG9jYWxlLiAgSWZcbiAgICAvLyBubyBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbiwgaXQgd2lsbCBzaW1wbHkgcmV0dXJuIHRoZSBjdXJyZW50IGdsb2JhbFxuICAgIC8vIGxvY2FsZSBrZXkuXG4gICAgZnVuY3Rpb24gZ2V0U2V0R2xvYmFsTG9jYWxlKGtleSwgdmFsdWVzKSB7XG4gICAgICAgIHZhciBkYXRhO1xuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQodmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBnZXRMb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRlZmluZUxvY2FsZShrZXksIHZhbHVlcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgLy8gbW9tZW50LmR1cmF0aW9uLl9sb2NhbGUgPSBtb21lbnQuX2xvY2FsZSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgZ2xvYmFsTG9jYWxlID0gZGF0YTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBjb25zb2xlLndhcm4pIHtcbiAgICAgICAgICAgICAgICAgICAgLy93YXJuIHVzZXIgaWYgYXJndW1lbnRzIGFyZSBwYXNzZWQgYnV0IHRoZSBsb2NhbGUgY291bGQgbm90IGJlIHNldFxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgICAgICAgICAnTG9jYWxlICcgKyBrZXkgKyAnIG5vdCBmb3VuZC4gRGlkIHlvdSBmb3JnZXQgdG8gbG9hZCBpdD8nXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZS5fYWJicjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZWZpbmVMb2NhbGUobmFtZSwgY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBsb2NhbGUsXG4gICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gYmFzZUNvbmZpZztcbiAgICAgICAgICAgIGNvbmZpZy5hYmJyID0gbmFtZTtcbiAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBkZXByZWNhdGVTaW1wbGUoXG4gICAgICAgICAgICAgICAgICAgICdkZWZpbmVMb2NhbGVPdmVycmlkZScsXG4gICAgICAgICAgICAgICAgICAgICd1c2UgbW9tZW50LnVwZGF0ZUxvY2FsZShsb2NhbGVOYW1lLCBjb25maWcpIHRvIGNoYW5nZSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdhbiBleGlzdGluZyBsb2NhbGUuIG1vbWVudC5kZWZpbmVMb2NhbGUobG9jYWxlTmFtZSwgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnY29uZmlnKSBzaG91bGQgb25seSBiZSB1c2VkIGZvciBjcmVhdGluZyBhIG5ldyBsb2NhbGUgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZGVmaW5lLWxvY2FsZS8gZm9yIG1vcmUgaW5mby4nXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBsb2NhbGVzW25hbWVdLl9jb25maWc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy5wYXJlbnRMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChsb2NhbGVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gbG9jYWxlc1tjb25maWcucGFyZW50TG9jYWxlXS5fY29uZmlnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsZSA9IGxvYWRMb2NhbGUoY29uZmlnLnBhcmVudExvY2FsZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gbG9jYWxlLl9jb25maWc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxvY2FsZUZhbWlsaWVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV0gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZUZhbWlsaWVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IG5ldyBMb2NhbGUobWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY29uZmlnKSk7XG5cbiAgICAgICAgICAgIGlmIChsb2NhbGVGYW1pbGllc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgIGxvY2FsZUZhbWlsaWVzW25hbWVdLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5lTG9jYWxlKHgubmFtZSwgeC5jb25maWcpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiYWNrd2FyZHMgY29tcGF0IGZvciBub3c6IGFsc28gc2V0IHRoZSBsb2NhbGVcbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGxvY2FsZSBBRlRFUiBhbGwgY2hpbGQgbG9jYWxlcyBoYXZlIGJlZW5cbiAgICAgICAgICAgIC8vIGNyZWF0ZWQsIHNvIHdlIHdvbid0IGVuZCB1cCB3aXRoIHRoZSBjaGlsZCBsb2NhbGUgc2V0LlxuICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHVzZWZ1bCBmb3IgdGVzdGluZ1xuICAgICAgICAgICAgZGVsZXRlIGxvY2FsZXNbbmFtZV07XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUxvY2FsZShuYW1lLCBjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlLFxuICAgICAgICAgICAgICAgIHRtcExvY2FsZSxcbiAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBiYXNlQ29uZmlnO1xuXG4gICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsICYmIGxvY2FsZXNbbmFtZV0ucGFyZW50TG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgZXhpc3RpbmcgY2hpbGQgbG9jYWxlIGluLXBsYWNlIHRvIGF2b2lkIG1lbW9yeS1sZWFrc1xuICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0uc2V0KG1lcmdlQ29uZmlncyhsb2NhbGVzW25hbWVdLl9jb25maWcsIGNvbmZpZykpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBNRVJHRVxuICAgICAgICAgICAgICAgIHRtcExvY2FsZSA9IGxvYWRMb2NhbGUobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKHRtcExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IHRtcExvY2FsZS5fY29uZmlnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25maWcgPSBtZXJnZUNvbmZpZ3MocGFyZW50Q29uZmlnLCBjb25maWcpO1xuICAgICAgICAgICAgICAgIGlmICh0bXBMb2NhbGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGVMb2NhbGUgaXMgY2FsbGVkIGZvciBjcmVhdGluZyBhIG5ldyBsb2NhbGVcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGFiYnIgc28gaXQgd2lsbCBoYXZlIGEgbmFtZSAoZ2V0dGVycyByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgLy8gdW5kZWZpbmVkIG90aGVyd2lzZSkuXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5hYmJyID0gbmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbG9jYWxlID0gbmV3IExvY2FsZShjb25maWcpO1xuICAgICAgICAgICAgICAgIGxvY2FsZS5wYXJlbnRMb2NhbGUgPSBsb2NhbGVzW25hbWVdO1xuICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBsb2NhbGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJhY2t3YXJkcyBjb21wYXQgZm9yIG5vdzogYWxzbyBzZXQgdGhlIGxvY2FsZVxuICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcGFzcyBudWxsIGZvciBjb25maWcgdG8gdW51cGRhdGUsIHVzZWZ1bCBmb3IgdGVzdHNcbiAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXS5wYXJlbnRMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbG9jYWxlc1tuYW1lXS5wYXJlbnRMb2NhbGU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSBnZXRTZXRHbG9iYWxMb2NhbGUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGxvY2FsZXNbbmFtZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2NhbGVzW25hbWVdO1xuICAgIH1cblxuICAgIC8vIHJldHVybnMgbG9jYWxlIGRhdGFcbiAgICBmdW5jdGlvbiBnZXRMb2NhbGUoa2V5KSB7XG4gICAgICAgIHZhciBsb2NhbGU7XG5cbiAgICAgICAgaWYgKGtleSAmJiBrZXkuX2xvY2FsZSAmJiBrZXkuX2xvY2FsZS5fYWJicikge1xuICAgICAgICAgICAga2V5ID0ga2V5Ll9sb2NhbGUuX2FiYnI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWtleSkge1xuICAgICAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNBcnJheShrZXkpKSB7XG4gICAgICAgICAgICAvL3Nob3J0LWNpcmN1aXQgZXZlcnl0aGluZyBlbHNlXG4gICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKGtleSk7XG4gICAgICAgICAgICBpZiAobG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGtleSA9IFtrZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNob29zZUxvY2FsZShrZXkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RMb2NhbGVzKCkge1xuICAgICAgICByZXR1cm4ga2V5cyhsb2NhbGVzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja092ZXJmbG93KG0pIHtcbiAgICAgICAgdmFyIG92ZXJmbG93LFxuICAgICAgICAgICAgYSA9IG0uX2E7XG5cbiAgICAgICAgaWYgKGEgJiYgZ2V0UGFyc2luZ0ZsYWdzKG0pLm92ZXJmbG93ID09PSAtMikge1xuICAgICAgICAgICAgb3ZlcmZsb3cgPVxuICAgICAgICAgICAgICAgIGFbTU9OVEhdIDwgMCB8fCBhW01PTlRIXSA+IDExXG4gICAgICAgICAgICAgICAgICAgID8gTU9OVEhcbiAgICAgICAgICAgICAgICAgICAgOiBhW0RBVEVdIDwgMSB8fCBhW0RBVEVdID4gZGF5c0luTW9udGgoYVtZRUFSXSwgYVtNT05USF0pXG4gICAgICAgICAgICAgICAgICAgID8gREFURVxuICAgICAgICAgICAgICAgICAgICA6IGFbSE9VUl0gPCAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgYVtIT1VSXSA+IDI0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgKGFbSE9VUl0gPT09IDI0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChhW01JTlVURV0gIT09IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFbU0VDT05EXSAhPT0gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVtNSUxMSVNFQ09ORF0gIT09IDApKVxuICAgICAgICAgICAgICAgICAgICA/IEhPVVJcbiAgICAgICAgICAgICAgICAgICAgOiBhW01JTlVURV0gPCAwIHx8IGFbTUlOVVRFXSA+IDU5XG4gICAgICAgICAgICAgICAgICAgID8gTUlOVVRFXG4gICAgICAgICAgICAgICAgICAgIDogYVtTRUNPTkRdIDwgMCB8fCBhW1NFQ09ORF0gPiA1OVxuICAgICAgICAgICAgICAgICAgICA/IFNFQ09ORFxuICAgICAgICAgICAgICAgICAgICA6IGFbTUlMTElTRUNPTkRdIDwgMCB8fCBhW01JTExJU0VDT05EXSA+IDk5OVxuICAgICAgICAgICAgICAgICAgICA/IE1JTExJU0VDT05EXG4gICAgICAgICAgICAgICAgICAgIDogLTE7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MobSkuX292ZXJmbG93RGF5T2ZZZWFyICYmXG4gICAgICAgICAgICAgICAgKG92ZXJmbG93IDwgWUVBUiB8fCBvdmVyZmxvdyA+IERBVEUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdyA9IERBVEU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZ2V0UGFyc2luZ0ZsYWdzKG0pLl9vdmVyZmxvd1dlZWtzICYmIG92ZXJmbG93ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gV0VFSztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChnZXRQYXJzaW5nRmxhZ3MobSkuX292ZXJmbG93V2Vla2RheSAmJiBvdmVyZmxvdyA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdyA9IFdFRUtEQVk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhtKS5vdmVyZmxvdyA9IG92ZXJmbG93O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgLy8gaXNvIDg2MDEgcmVnZXhcbiAgICAvLyAwMDAwLTAwLTAwIDAwMDAtVzAwIG9yIDAwMDAtVzAwLTAgKyBUICsgMDAgb3IgMDA6MDAgb3IgMDA6MDA6MDAgb3IgMDA6MDA6MDAuMDAwICsgKzAwOjAwIG9yICswMDAwIG9yICswMClcbiAgICB2YXIgZXh0ZW5kZWRJc29SZWdleCA9IC9eXFxzKigoPzpbKy1dXFxkezZ9fFxcZHs0fSktKD86XFxkXFxkLVxcZFxcZHxXXFxkXFxkLVxcZHxXXFxkXFxkfFxcZFxcZFxcZHxcXGRcXGQpKSg/OihUfCApKFxcZFxcZCg/OjpcXGRcXGQoPzo6XFxkXFxkKD86Wy4sXVxcZCspPyk/KT8pKFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/fFxccypaKT8pPyQvLFxuICAgICAgICBiYXNpY0lzb1JlZ2V4ID0gL15cXHMqKCg/OlsrLV1cXGR7Nn18XFxkezR9KSg/OlxcZFxcZFxcZFxcZHxXXFxkXFxkXFxkfFdcXGRcXGR8XFxkXFxkXFxkfFxcZFxcZHwpKSg/OihUfCApKFxcZFxcZCg/OlxcZFxcZCg/OlxcZFxcZCg/OlsuLF1cXGQrKT8pPyk/KShbKy1dXFxkXFxkKD86Oj9cXGRcXGQpP3xcXHMqWik/KT8kLyxcbiAgICAgICAgdHpSZWdleCA9IC9afFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/LyxcbiAgICAgICAgaXNvRGF0ZXMgPSBbXG4gICAgICAgICAgICBbJ1lZWVlZWS1NTS1ERCcsIC9bKy1dXFxkezZ9LVxcZFxcZC1cXGRcXGQvXSxcbiAgICAgICAgICAgIFsnWVlZWS1NTS1ERCcsIC9cXGR7NH0tXFxkXFxkLVxcZFxcZC9dLFxuICAgICAgICAgICAgWydHR0dHLVtXXVdXLUUnLCAvXFxkezR9LVdcXGRcXGQtXFxkL10sXG4gICAgICAgICAgICBbJ0dHR0ctW1ddV1cnLCAvXFxkezR9LVdcXGRcXGQvLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ1lZWVktREREJywgL1xcZHs0fS1cXGR7M30vXSxcbiAgICAgICAgICAgIFsnWVlZWS1NTScsIC9cXGR7NH0tXFxkXFxkLywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZWVlNTUREJywgL1srLV1cXGR7MTB9L10sXG4gICAgICAgICAgICBbJ1lZWVlNTUREJywgL1xcZHs4fS9dLFxuICAgICAgICAgICAgWydHR0dHW1ddV1dFJywgL1xcZHs0fVdcXGR7M30vXSxcbiAgICAgICAgICAgIFsnR0dHR1tXXVdXJywgL1xcZHs0fVdcXGR7Mn0vLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ1lZWVlEREQnLCAvXFxkezd9L10sXG4gICAgICAgICAgICBbJ1lZWVlNTScsIC9cXGR7Nn0vLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ1lZWVknLCAvXFxkezR9LywgZmFsc2VdLFxuICAgICAgICBdLFxuICAgICAgICAvLyBpc28gdGltZSBmb3JtYXRzIGFuZCByZWdleGVzXG4gICAgICAgIGlzb1RpbWVzID0gW1xuICAgICAgICAgICAgWydISDptbTpzcy5TU1NTJywgL1xcZFxcZDpcXGRcXGQ6XFxkXFxkXFwuXFxkKy9dLFxuICAgICAgICAgICAgWydISDptbTpzcyxTU1NTJywgL1xcZFxcZDpcXGRcXGQ6XFxkXFxkLFxcZCsvXSxcbiAgICAgICAgICAgIFsnSEg6bW06c3MnLCAvXFxkXFxkOlxcZFxcZDpcXGRcXGQvXSxcbiAgICAgICAgICAgIFsnSEg6bW0nLCAvXFxkXFxkOlxcZFxcZC9dLFxuICAgICAgICAgICAgWydISG1tc3MuU1NTUycsIC9cXGRcXGRcXGRcXGRcXGRcXGRcXC5cXGQrL10sXG4gICAgICAgICAgICBbJ0hIbW1zcyxTU1NTJywgL1xcZFxcZFxcZFxcZFxcZFxcZCxcXGQrL10sXG4gICAgICAgICAgICBbJ0hIbW1zcycsIC9cXGRcXGRcXGRcXGRcXGRcXGQvXSxcbiAgICAgICAgICAgIFsnSEhtbScsIC9cXGRcXGRcXGRcXGQvXSxcbiAgICAgICAgICAgIFsnSEgnLCAvXFxkXFxkL10sXG4gICAgICAgIF0sXG4gICAgICAgIGFzcE5ldEpzb25SZWdleCA9IC9eXFwvP0RhdGVcXCgoLT9cXGQrKS9pLFxuICAgICAgICAvLyBSRkMgMjgyMiByZWdleDogRm9yIGRldGFpbHMgc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyODIyI3NlY3Rpb24tMy4zXG4gICAgICAgIHJmYzI4MjIgPSAvXig/OihNb258VHVlfFdlZHxUaHV8RnJpfFNhdHxTdW4pLD9cXHMpPyhcXGR7MSwyfSlcXHMoSmFufEZlYnxNYXJ8QXByfE1heXxKdW58SnVsfEF1Z3xTZXB8T2N0fE5vdnxEZWMpXFxzKFxcZHsyLDR9KVxccyhcXGRcXGQpOihcXGRcXGQpKD86OihcXGRcXGQpKT9cXHMoPzooVVR8R01UfFtFQ01QXVtTRF1UKXwoW1p6XSl8KFsrLV1cXGR7NH0pKSQvLFxuICAgICAgICBvYnNPZmZzZXRzID0ge1xuICAgICAgICAgICAgVVQ6IDAsXG4gICAgICAgICAgICBHTVQ6IDAsXG4gICAgICAgICAgICBFRFQ6IC00ICogNjAsXG4gICAgICAgICAgICBFU1Q6IC01ICogNjAsXG4gICAgICAgICAgICBDRFQ6IC01ICogNjAsXG4gICAgICAgICAgICBDU1Q6IC02ICogNjAsXG4gICAgICAgICAgICBNRFQ6IC02ICogNjAsXG4gICAgICAgICAgICBNU1Q6IC03ICogNjAsXG4gICAgICAgICAgICBQRFQ6IC03ICogNjAsXG4gICAgICAgICAgICBQU1Q6IC04ICogNjAsXG4gICAgICAgIH07XG5cbiAgICAvLyBkYXRlIGZyb20gaXNvIGZvcm1hdFxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21JU08oY29uZmlnKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIHN0cmluZyA9IGNvbmZpZy5faSxcbiAgICAgICAgICAgIG1hdGNoID0gZXh0ZW5kZWRJc29SZWdleC5leGVjKHN0cmluZykgfHwgYmFzaWNJc29SZWdleC5leGVjKHN0cmluZyksXG4gICAgICAgICAgICBhbGxvd1RpbWUsXG4gICAgICAgICAgICBkYXRlRm9ybWF0LFxuICAgICAgICAgICAgdGltZUZvcm1hdCxcbiAgICAgICAgICAgIHR6Rm9ybWF0O1xuXG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaXNvID0gdHJ1ZTtcblxuICAgICAgICAgICAgZm9yIChpID0gMCwgbCA9IGlzb0RhdGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChpc29EYXRlc1tpXVsxXS5leGVjKG1hdGNoWzFdKSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRlRm9ybWF0ID0gaXNvRGF0ZXNbaV1bMF07XG4gICAgICAgICAgICAgICAgICAgIGFsbG93VGltZSA9IGlzb0RhdGVzW2ldWzJdICE9PSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGVGb3JtYXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFszXSkge1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBpc29UaW1lcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzb1RpbWVzW2ldWzFdLmV4ZWMobWF0Y2hbM10pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXRjaFsyXSBzaG91bGQgYmUgJ1QnIG9yIHNwYWNlXG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lRm9ybWF0ID0gKG1hdGNoWzJdIHx8ICcgJykgKyBpc29UaW1lc1tpXVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aW1lRm9ybWF0ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWFsbG93VGltZSAmJiB0aW1lRm9ybWF0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbNF0pIHtcbiAgICAgICAgICAgICAgICBpZiAodHpSZWdleC5leGVjKG1hdGNoWzRdKSkge1xuICAgICAgICAgICAgICAgICAgICB0ekZvcm1hdCA9ICdaJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbmZpZy5fZiA9IGRhdGVGb3JtYXQgKyAodGltZUZvcm1hdCB8fCAnJykgKyAodHpGb3JtYXQgfHwgJycpO1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHRyYWN0RnJvbVJGQzI4MjJTdHJpbmdzKFxuICAgICAgICB5ZWFyU3RyLFxuICAgICAgICBtb250aFN0cixcbiAgICAgICAgZGF5U3RyLFxuICAgICAgICBob3VyU3RyLFxuICAgICAgICBtaW51dGVTdHIsXG4gICAgICAgIHNlY29uZFN0clxuICAgICkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gW1xuICAgICAgICAgICAgdW50cnVuY2F0ZVllYXIoeWVhclN0ciksXG4gICAgICAgICAgICBkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQuaW5kZXhPZihtb250aFN0ciksXG4gICAgICAgICAgICBwYXJzZUludChkYXlTdHIsIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGhvdXJTdHIsIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KG1pbnV0ZVN0ciwgMTApLFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmIChzZWNvbmRTdHIpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHBhcnNlSW50KHNlY29uZFN0ciwgMTApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdW50cnVuY2F0ZVllYXIoeWVhclN0cikge1xuICAgICAgICB2YXIgeWVhciA9IHBhcnNlSW50KHllYXJTdHIsIDEwKTtcbiAgICAgICAgaWYgKHllYXIgPD0gNDkpIHtcbiAgICAgICAgICAgIHJldHVybiAyMDAwICsgeWVhcjtcbiAgICAgICAgfSBlbHNlIGlmICh5ZWFyIDw9IDk5OSkge1xuICAgICAgICAgICAgcmV0dXJuIDE5MDAgKyB5ZWFyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB5ZWFyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByZXByb2Nlc3NSRkMyODIyKHMpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGNvbW1lbnRzIGFuZCBmb2xkaW5nIHdoaXRlc3BhY2UgYW5kIHJlcGxhY2UgbXVsdGlwbGUtc3BhY2VzIHdpdGggYSBzaW5nbGUgc3BhY2VcbiAgICAgICAgcmV0dXJuIHNcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXChbXildKlxcKXxbXFxuXFx0XS9nLCAnICcpXG4gICAgICAgICAgICAucmVwbGFjZSgvKFxcc1xccyspL2csICcgJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9eXFxzXFxzKi8sICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcc1xccyokLywgJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrV2Vla2RheSh3ZWVrZGF5U3RyLCBwYXJzZWRJbnB1dCwgY29uZmlnKSB7XG4gICAgICAgIGlmICh3ZWVrZGF5U3RyKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBSZXBsYWNlIHRoZSB2YW5pbGxhIEpTIERhdGUgb2JqZWN0IHdpdGggYW4gaW5kZXBlbmRlbnQgZGF5LW9mLXdlZWsgY2hlY2suXG4gICAgICAgICAgICB2YXIgd2Vla2RheVByb3ZpZGVkID0gZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQuaW5kZXhPZih3ZWVrZGF5U3RyKSxcbiAgICAgICAgICAgICAgICB3ZWVrZGF5QWN0dWFsID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZElucHV0WzBdLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRJbnB1dFsxXSxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkSW5wdXRbMl1cbiAgICAgICAgICAgICAgICApLmdldERheSgpO1xuICAgICAgICAgICAgaWYgKHdlZWtkYXlQcm92aWRlZCAhPT0gd2Vla2RheUFjdHVhbCkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLndlZWtkYXlNaXNtYXRjaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZU9mZnNldChvYnNPZmZzZXQsIG1pbGl0YXJ5T2Zmc2V0LCBudW1PZmZzZXQpIHtcbiAgICAgICAgaWYgKG9ic09mZnNldCkge1xuICAgICAgICAgICAgcmV0dXJuIG9ic09mZnNldHNbb2JzT2Zmc2V0XTtcbiAgICAgICAgfSBlbHNlIGlmIChtaWxpdGFyeU9mZnNldCkge1xuICAgICAgICAgICAgLy8gdGhlIG9ubHkgYWxsb3dlZCBtaWxpdGFyeSB0eiBpcyBaXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBobSA9IHBhcnNlSW50KG51bU9mZnNldCwgMTApLFxuICAgICAgICAgICAgICAgIG0gPSBobSAlIDEwMCxcbiAgICAgICAgICAgICAgICBoID0gKGhtIC0gbSkgLyAxMDA7XG4gICAgICAgICAgICByZXR1cm4gaCAqIDYwICsgbTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgYW5kIHRpbWUgZnJvbSByZWYgMjgyMiBmb3JtYXRcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tUkZDMjgyMihjb25maWcpIHtcbiAgICAgICAgdmFyIG1hdGNoID0gcmZjMjgyMi5leGVjKHByZXByb2Nlc3NSRkMyODIyKGNvbmZpZy5faSkpLFxuICAgICAgICAgICAgcGFyc2VkQXJyYXk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgcGFyc2VkQXJyYXkgPSBleHRyYWN0RnJvbVJGQzI4MjJTdHJpbmdzKFxuICAgICAgICAgICAgICAgIG1hdGNoWzRdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzNdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzJdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzVdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzZdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzddXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKCFjaGVja1dlZWtkYXkobWF0Y2hbMV0sIHBhcnNlZEFycmF5LCBjb25maWcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25maWcuX2EgPSBwYXJzZWRBcnJheTtcbiAgICAgICAgICAgIGNvbmZpZy5fdHptID0gY2FsY3VsYXRlT2Zmc2V0KG1hdGNoWzhdLCBtYXRjaFs5XSwgbWF0Y2hbMTBdKTtcblxuICAgICAgICAgICAgY29uZmlnLl9kID0gY3JlYXRlVVRDRGF0ZS5hcHBseShudWxsLCBjb25maWcuX2EpO1xuICAgICAgICAgICAgY29uZmlnLl9kLnNldFVUQ01pbnV0ZXMoY29uZmlnLl9kLmdldFVUQ01pbnV0ZXMoKSAtIGNvbmZpZy5fdHptKTtcblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykucmZjMjgyMiA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgZnJvbSAxKSBBU1AuTkVULCAyKSBJU08sIDMpIFJGQyAyODIyIGZvcm1hdHMsIG9yIDQpIG9wdGlvbmFsIGZhbGxiYWNrIGlmIHBhcnNpbmcgaXNuJ3Qgc3RyaWN0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVN0cmluZyhjb25maWcpIHtcbiAgICAgICAgdmFyIG1hdGNoZWQgPSBhc3BOZXRKc29uUmVnZXguZXhlYyhjb25maWcuX2kpO1xuICAgICAgICBpZiAobWF0Y2hlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoK21hdGNoZWRbMV0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnRnJvbUlTTyhjb25maWcpO1xuICAgICAgICBpZiAoY29uZmlnLl9pc1ZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgZGVsZXRlIGNvbmZpZy5faXNWYWxpZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZyk7XG4gICAgICAgIGlmIChjb25maWcuX2lzVmFsaWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBkZWxldGUgY29uZmlnLl9pc1ZhbGlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fc3RyaWN0KSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEZpbmFsIGF0dGVtcHQsIHVzZSBJbnB1dCBGYWxsYmFja1xuICAgICAgICAgICAgaG9va3MuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2soY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhvb2tzLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrID0gZGVwcmVjYXRlKFxuICAgICAgICAndmFsdWUgcHJvdmlkZWQgaXMgbm90IGluIGEgcmVjb2duaXplZCBSRkMyODIyIG9yIElTTyBmb3JtYXQuIG1vbWVudCBjb25zdHJ1Y3Rpb24gZmFsbHMgYmFjayB0byBqcyBEYXRlKCksICcgK1xuICAgICAgICAgICAgJ3doaWNoIGlzIG5vdCByZWxpYWJsZSBhY3Jvc3MgYWxsIGJyb3dzZXJzIGFuZCB2ZXJzaW9ucy4gTm9uIFJGQzI4MjIvSVNPIGRhdGUgZm9ybWF0cyBhcmUgJyArXG4gICAgICAgICAgICAnZGlzY291cmFnZWQuIFBsZWFzZSByZWZlciB0byBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2pzLWRhdGUvIGZvciBtb3JlIGluZm8uJyxcbiAgICAgICAgZnVuY3Rpb24gKGNvbmZpZykge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoY29uZmlnLl9pICsgKGNvbmZpZy5fdXNlVVRDID8gJyBVVEMnIDogJycpKTtcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBQaWNrIHRoZSBmaXJzdCBkZWZpbmVkIG9mIHR3byBvciB0aHJlZSBhcmd1bWVudHMuXG4gICAgZnVuY3Rpb24gZGVmYXVsdHMoYSwgYiwgYykge1xuICAgICAgICBpZiAoYSAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYiAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjdXJyZW50RGF0ZUFycmF5KGNvbmZpZykge1xuICAgICAgICAvLyBob29rcyBpcyBhY3R1YWxseSB0aGUgZXhwb3J0ZWQgbW9tZW50IG9iamVjdFxuICAgICAgICB2YXIgbm93VmFsdWUgPSBuZXcgRGF0ZShob29rcy5ub3coKSk7XG4gICAgICAgIGlmIChjb25maWcuX3VzZVVUQykge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBub3dWYWx1ZS5nZXRVVENGdWxsWWVhcigpLFxuICAgICAgICAgICAgICAgIG5vd1ZhbHVlLmdldFVUQ01vbnRoKCksXG4gICAgICAgICAgICAgICAgbm93VmFsdWUuZ2V0VVRDRGF0ZSgpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW25vd1ZhbHVlLmdldEZ1bGxZZWFyKCksIG5vd1ZhbHVlLmdldE1vbnRoKCksIG5vd1ZhbHVlLmdldERhdGUoKV07XG4gICAgfVxuXG4gICAgLy8gY29udmVydCBhbiBhcnJheSB0byBhIGRhdGUuXG4gICAgLy8gdGhlIGFycmF5IHNob3VsZCBtaXJyb3IgdGhlIHBhcmFtZXRlcnMgYmVsb3dcbiAgICAvLyBub3RlOiBhbGwgdmFsdWVzIHBhc3QgdGhlIHllYXIgYXJlIG9wdGlvbmFsIGFuZCB3aWxsIGRlZmF1bHQgdG8gdGhlIGxvd2VzdCBwb3NzaWJsZSB2YWx1ZS5cbiAgICAvLyBbeWVhciwgbW9udGgsIGRheSAsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZF1cbiAgICBmdW5jdGlvbiBjb25maWdGcm9tQXJyYXkoY29uZmlnKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIGlucHV0ID0gW10sXG4gICAgICAgICAgICBjdXJyZW50RGF0ZSxcbiAgICAgICAgICAgIGV4cGVjdGVkV2Vla2RheSxcbiAgICAgICAgICAgIHllYXJUb1VzZTtcblxuICAgICAgICBpZiAoY29uZmlnLl9kKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50RGF0ZSA9IGN1cnJlbnREYXRlQXJyYXkoY29uZmlnKTtcblxuICAgICAgICAvL2NvbXB1dGUgZGF5IG9mIHRoZSB5ZWFyIGZyb20gd2Vla3MgYW5kIHdlZWtkYXlzXG4gICAgICAgIGlmIChjb25maWcuX3cgJiYgY29uZmlnLl9hW0RBVEVdID09IG51bGwgJiYgY29uZmlnLl9hW01PTlRIXSA9PSBudWxsKSB7XG4gICAgICAgICAgICBkYXlPZlllYXJGcm9tV2Vla0luZm8oY29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vaWYgdGhlIGRheSBvZiB0aGUgeWVhciBpcyBzZXQsIGZpZ3VyZSBvdXQgd2hhdCBpdCBpc1xuICAgICAgICBpZiAoY29uZmlnLl9kYXlPZlllYXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgeWVhclRvVXNlID0gZGVmYXVsdHMoY29uZmlnLl9hW1lFQVJdLCBjdXJyZW50RGF0ZVtZRUFSXSk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBjb25maWcuX2RheU9mWWVhciA+IGRheXNJblllYXIoeWVhclRvVXNlKSB8fFxuICAgICAgICAgICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID09PSAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dEYXlPZlllYXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkYXRlID0gY3JlYXRlVVRDRGF0ZSh5ZWFyVG9Vc2UsIDAsIGNvbmZpZy5fZGF5T2ZZZWFyKTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtNT05USF0gPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gICAgICAgICAgICBjb25maWcuX2FbREFURV0gPSBkYXRlLmdldFVUQ0RhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERlZmF1bHQgdG8gY3VycmVudCBkYXRlLlxuICAgICAgICAvLyAqIGlmIG5vIHllYXIsIG1vbnRoLCBkYXkgb2YgbW9udGggYXJlIGdpdmVuLCBkZWZhdWx0IHRvIHRvZGF5XG4gICAgICAgIC8vICogaWYgZGF5IG9mIG1vbnRoIGlzIGdpdmVuLCBkZWZhdWx0IG1vbnRoIGFuZCB5ZWFyXG4gICAgICAgIC8vICogaWYgbW9udGggaXMgZ2l2ZW4sIGRlZmF1bHQgb25seSB5ZWFyXG4gICAgICAgIC8vICogaWYgeWVhciBpcyBnaXZlbiwgZG9uJ3QgZGVmYXVsdCBhbnl0aGluZ1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMyAmJiBjb25maWcuX2FbaV0gPT0gbnVsbDsgKytpKSB7XG4gICAgICAgICAgICBjb25maWcuX2FbaV0gPSBpbnB1dFtpXSA9IGN1cnJlbnREYXRlW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gWmVybyBvdXQgd2hhdGV2ZXIgd2FzIG5vdCBkZWZhdWx0ZWQsIGluY2x1ZGluZyB0aW1lXG4gICAgICAgIGZvciAoOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICBjb25maWcuX2FbaV0gPSBpbnB1dFtpXSA9XG4gICAgICAgICAgICAgICAgY29uZmlnLl9hW2ldID09IG51bGwgPyAoaSA9PT0gMiA/IDEgOiAwKSA6IGNvbmZpZy5fYVtpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGZvciAyNDowMDowMC4wMDBcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID09PSAyNCAmJlxuICAgICAgICAgICAgY29uZmlnLl9hW01JTlVURV0gPT09IDAgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fYVtTRUNPTkRdID09PSAwICYmXG4gICAgICAgICAgICBjb25maWcuX2FbTUlMTElTRUNPTkRdID09PSAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uZmlnLl9uZXh0RGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWcuX2QgPSAoY29uZmlnLl91c2VVVEMgPyBjcmVhdGVVVENEYXRlIDogY3JlYXRlRGF0ZSkuYXBwbHkoXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgaW5wdXRcbiAgICAgICAgKTtcbiAgICAgICAgZXhwZWN0ZWRXZWVrZGF5ID0gY29uZmlnLl91c2VVVENcbiAgICAgICAgICAgID8gY29uZmlnLl9kLmdldFVUQ0RheSgpXG4gICAgICAgICAgICA6IGNvbmZpZy5fZC5nZXREYXkoKTtcblxuICAgICAgICAvLyBBcHBseSB0aW1lem9uZSBvZmZzZXQgZnJvbSBpbnB1dC4gVGhlIGFjdHVhbCB1dGNPZmZzZXQgY2FuIGJlIGNoYW5nZWRcbiAgICAgICAgLy8gd2l0aCBwYXJzZVpvbmUuXG4gICAgICAgIGlmIChjb25maWcuX3R6bSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25maWcuX2Quc2V0VVRDTWludXRlcyhjb25maWcuX2QuZ2V0VVRDTWludXRlcygpIC0gY29uZmlnLl90em0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fbmV4dERheSkge1xuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gMjQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjaGVjayBmb3IgbWlzbWF0Y2hpbmcgZGF5IG9mIHdlZWtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl93ICYmXG4gICAgICAgICAgICB0eXBlb2YgY29uZmlnLl93LmQgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICBjb25maWcuX3cuZCAhPT0gZXhwZWN0ZWRXZWVrZGF5XG4gICAgICAgICkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykud2Vla2RheU1pc21hdGNoID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRheU9mWWVhckZyb21XZWVrSW5mbyhjb25maWcpIHtcbiAgICAgICAgdmFyIHcsIHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSwgdGVtcCwgd2Vla2RheU92ZXJmbG93LCBjdXJXZWVrO1xuXG4gICAgICAgIHcgPSBjb25maWcuX3c7XG4gICAgICAgIGlmICh3LkdHICE9IG51bGwgfHwgdy5XICE9IG51bGwgfHwgdy5FICE9IG51bGwpIHtcbiAgICAgICAgICAgIGRvdyA9IDE7XG4gICAgICAgICAgICBkb3kgPSA0O1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBXZSBuZWVkIHRvIHRha2UgdGhlIGN1cnJlbnQgaXNvV2Vla1llYXIsIGJ1dCB0aGF0IGRlcGVuZHMgb25cbiAgICAgICAgICAgIC8vIGhvdyB3ZSBpbnRlcnByZXQgbm93IChsb2NhbCwgdXRjLCBmaXhlZCBvZmZzZXQpLiBTbyBjcmVhdGVcbiAgICAgICAgICAgIC8vIGEgbm93IHZlcnNpb24gb2YgY3VycmVudCBjb25maWcgKHRha2UgbG9jYWwvdXRjL29mZnNldCBmbGFncywgYW5kXG4gICAgICAgICAgICAvLyBjcmVhdGUgbm93KS5cbiAgICAgICAgICAgIHdlZWtZZWFyID0gZGVmYXVsdHMoXG4gICAgICAgICAgICAgICAgdy5HRyxcbiAgICAgICAgICAgICAgICBjb25maWcuX2FbWUVBUl0sXG4gICAgICAgICAgICAgICAgd2Vla09mWWVhcihjcmVhdGVMb2NhbCgpLCAxLCA0KS55ZWFyXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgd2VlayA9IGRlZmF1bHRzKHcuVywgMSk7XG4gICAgICAgICAgICB3ZWVrZGF5ID0gZGVmYXVsdHMody5FLCAxKTtcbiAgICAgICAgICAgIGlmICh3ZWVrZGF5IDwgMSB8fCB3ZWVrZGF5ID4gNykge1xuICAgICAgICAgICAgICAgIHdlZWtkYXlPdmVyZmxvdyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkb3cgPSBjb25maWcuX2xvY2FsZS5fd2Vlay5kb3c7XG4gICAgICAgICAgICBkb3kgPSBjb25maWcuX2xvY2FsZS5fd2Vlay5kb3k7XG5cbiAgICAgICAgICAgIGN1cldlZWsgPSB3ZWVrT2ZZZWFyKGNyZWF0ZUxvY2FsKCksIGRvdywgZG95KTtcblxuICAgICAgICAgICAgd2Vla1llYXIgPSBkZWZhdWx0cyh3LmdnLCBjb25maWcuX2FbWUVBUl0sIGN1cldlZWsueWVhcik7XG5cbiAgICAgICAgICAgIC8vIERlZmF1bHQgdG8gY3VycmVudCB3ZWVrLlxuICAgICAgICAgICAgd2VlayA9IGRlZmF1bHRzKHcudywgY3VyV2Vlay53ZWVrKTtcblxuICAgICAgICAgICAgaWYgKHcuZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gd2Vla2RheSAtLSBsb3cgZGF5IG51bWJlcnMgYXJlIGNvbnNpZGVyZWQgbmV4dCB3ZWVrXG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IHcuZDtcbiAgICAgICAgICAgICAgICBpZiAod2Vla2RheSA8IDAgfHwgd2Vla2RheSA+IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgd2Vla2RheU92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHcuZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gbG9jYWwgd2Vla2RheSAtLSBjb3VudGluZyBzdGFydHMgZnJvbSBiZWdpbm5pbmcgb2Ygd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSB3LmUgKyBkb3c7XG4gICAgICAgICAgICAgICAgaWYgKHcuZSA8IDAgfHwgdy5lID4gNikge1xuICAgICAgICAgICAgICAgICAgICB3ZWVrZGF5T3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZGVmYXVsdCB0byBiZWdpbm5pbmcgb2Ygd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSBkb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdlZWsgPCAxIHx8IHdlZWsgPiB3ZWVrc0luWWVhcih3ZWVrWWVhciwgZG93LCBkb3kpKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dXZWVrcyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAod2Vla2RheU92ZXJmbG93ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLl9vdmVyZmxvd1dlZWtkYXkgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGVtcCA9IGRheU9mWWVhckZyb21XZWVrcyh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpO1xuICAgICAgICAgICAgY29uZmlnLl9hW1lFQVJdID0gdGVtcC55ZWFyO1xuICAgICAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPSB0ZW1wLmRheU9mWWVhcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbnN0YW50IHRoYXQgcmVmZXJzIHRvIHRoZSBJU08gc3RhbmRhcmRcbiAgICBob29rcy5JU09fODYwMSA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gY29uc3RhbnQgdGhhdCByZWZlcnMgdG8gdGhlIFJGQyAyODIyIGZvcm1cbiAgICBob29rcy5SRkNfMjgyMiA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gZGF0ZSBmcm9tIHN0cmluZyBhbmQgZm9ybWF0IHN0cmluZ1xuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQoY29uZmlnKSB7XG4gICAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyB0byBhbm90aGVyIHBhcnQgb2YgdGhlIGNyZWF0aW9uIGZsb3cgdG8gcHJldmVudCBjaXJjdWxhciBkZXBzXG4gICAgICAgIGlmIChjb25maWcuX2YgPT09IGhvb2tzLklTT184NjAxKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tSVNPKGNvbmZpZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZy5fZiA9PT0gaG9va3MuUkZDXzI4MjIpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uZmlnLl9hID0gW107XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVtcHR5ID0gdHJ1ZTtcblxuICAgICAgICAvLyBUaGlzIGFycmF5IGlzIHVzZWQgdG8gbWFrZSBhIERhdGUsIGVpdGhlciB3aXRoIGBuZXcgRGF0ZWAgb3IgYERhdGUuVVRDYFxuICAgICAgICB2YXIgc3RyaW5nID0gJycgKyBjb25maWcuX2ksXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcGFyc2VkSW5wdXQsXG4gICAgICAgICAgICB0b2tlbnMsXG4gICAgICAgICAgICB0b2tlbixcbiAgICAgICAgICAgIHNraXBwZWQsXG4gICAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgICAgdG90YWxQYXJzZWRJbnB1dExlbmd0aCA9IDAsXG4gICAgICAgICAgICBlcmE7XG5cbiAgICAgICAgdG9rZW5zID1cbiAgICAgICAgICAgIGV4cGFuZEZvcm1hdChjb25maWcuX2YsIGNvbmZpZy5fbG9jYWxlKS5tYXRjaChmb3JtYXR0aW5nVG9rZW5zKSB8fCBbXTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1tpXTtcbiAgICAgICAgICAgIHBhcnNlZElucHV0ID0gKHN0cmluZy5tYXRjaChnZXRQYXJzZVJlZ2V4Rm9yVG9rZW4odG9rZW4sIGNvbmZpZykpIHx8XG4gICAgICAgICAgICAgICAgW10pWzBdO1xuICAgICAgICAgICAgaWYgKHBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgc2tpcHBlZCA9IHN0cmluZy5zdWJzdHIoMCwgc3RyaW5nLmluZGV4T2YocGFyc2VkSW5wdXQpKTtcbiAgICAgICAgICAgICAgICBpZiAoc2tpcHBlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZElucHV0LnB1c2goc2tpcHBlZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5zbGljZShcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nLmluZGV4T2YocGFyc2VkSW5wdXQpICsgcGFyc2VkSW5wdXQubGVuZ3RoXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0b3RhbFBhcnNlZElucHV0TGVuZ3RoICs9IHBhcnNlZElucHV0Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGRvbid0IHBhcnNlIGlmIGl0J3Mgbm90IGEga25vd24gdG9rZW5cbiAgICAgICAgICAgIGlmIChmb3JtYXRUb2tlbkZ1bmN0aW9uc1t0b2tlbl0pIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZW1wdHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRUb2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZFRpbWVUb0FycmF5RnJvbVRva2VuKHRva2VuLCBwYXJzZWRJbnB1dCwgY29uZmlnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLl9zdHJpY3QgJiYgIXBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkVG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWRkIHJlbWFpbmluZyB1bnBhcnNlZCBpbnB1dCBsZW5ndGggdG8gdGhlIHN0cmluZ1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5jaGFyc0xlZnRPdmVyID1cbiAgICAgICAgICAgIHN0cmluZ0xlbmd0aCAtIHRvdGFsUGFyc2VkSW5wdXRMZW5ndGg7XG4gICAgICAgIGlmIChzdHJpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkSW5wdXQucHVzaChzdHJpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2xlYXIgXzEyaCBmbGFnIGlmIGhvdXIgaXMgPD0gMTJcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdIDw9IDEyICYmXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID09PSB0cnVlICYmXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPiAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnBhcnNlZERhdGVQYXJ0cyA9IGNvbmZpZy5fYS5zbGljZSgwKTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykubWVyaWRpZW0gPSBjb25maWcuX21lcmlkaWVtO1xuICAgICAgICAvLyBoYW5kbGUgbWVyaWRpZW1cbiAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gbWVyaWRpZW1GaXhXcmFwKFxuICAgICAgICAgICAgY29uZmlnLl9sb2NhbGUsXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0sXG4gICAgICAgICAgICBjb25maWcuX21lcmlkaWVtXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gaGFuZGxlIGVyYVxuICAgICAgICBlcmEgPSBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5lcmE7XG4gICAgICAgIGlmIChlcmEgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtZRUFSXSA9IGNvbmZpZy5fbG9jYWxlLmVyYXNDb252ZXJ0WWVhcihlcmEsIGNvbmZpZy5fYVtZRUFSXSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICAgICAgY2hlY2tPdmVyZmxvdyhjb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1lcmlkaWVtRml4V3JhcChsb2NhbGUsIGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgIHZhciBpc1BtO1xuXG4gICAgICAgIGlmIChtZXJpZGllbSA9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBub3RoaW5nIHRvIGRvXG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxlLm1lcmlkaWVtSG91ciAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLm1lcmlkaWVtSG91cihob3VyLCBtZXJpZGllbSk7XG4gICAgICAgIH0gZWxzZSBpZiAobG9jYWxlLmlzUE0gIT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gRmFsbGJhY2tcbiAgICAgICAgICAgIGlzUG0gPSBsb2NhbGUuaXNQTShtZXJpZGllbSk7XG4gICAgICAgICAgICBpZiAoaXNQbSAmJiBob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc1BtICYmIGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IHN1cHBvc2VkIHRvIGhhcHBlblxuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkYXRlIGZyb20gc3RyaW5nIGFuZCBhcnJheSBvZiBmb3JtYXQgc3RyaW5nc1xuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheShjb25maWcpIHtcbiAgICAgICAgdmFyIHRlbXBDb25maWcsXG4gICAgICAgICAgICBiZXN0TW9tZW50LFxuICAgICAgICAgICAgc2NvcmVUb0JlYXQsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgY3VycmVudFNjb3JlLFxuICAgICAgICAgICAgdmFsaWRGb3JtYXRGb3VuZCxcbiAgICAgICAgICAgIGJlc3RGb3JtYXRJc1ZhbGlkID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fZi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmludmFsaWRGb3JtYXQgPSB0cnVlO1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoTmFOKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb25maWcuX2YubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGN1cnJlbnRTY29yZSA9IDA7XG4gICAgICAgICAgICB2YWxpZEZvcm1hdEZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgICB0ZW1wQ29uZmlnID0gY29weUNvbmZpZyh7fSwgY29uZmlnKTtcbiAgICAgICAgICAgIGlmIChjb25maWcuX3VzZVVUQyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGVtcENvbmZpZy5fdXNlVVRDID0gY29uZmlnLl91c2VVVEM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZW1wQ29uZmlnLl9mID0gY29uZmlnLl9mW2ldO1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdCh0ZW1wQ29uZmlnKTtcblxuICAgICAgICAgICAgaWYgKGlzVmFsaWQodGVtcENvbmZpZykpIHtcbiAgICAgICAgICAgICAgICB2YWxpZEZvcm1hdEZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgYW55IGlucHV0IHRoYXQgd2FzIG5vdCBwYXJzZWQgYWRkIGEgcGVuYWx0eSBmb3IgdGhhdCBmb3JtYXRcbiAgICAgICAgICAgIGN1cnJlbnRTY29yZSArPSBnZXRQYXJzaW5nRmxhZ3ModGVtcENvbmZpZykuY2hhcnNMZWZ0T3ZlcjtcblxuICAgICAgICAgICAgLy9vciB0b2tlbnNcbiAgICAgICAgICAgIGN1cnJlbnRTY29yZSArPSBnZXRQYXJzaW5nRmxhZ3ModGVtcENvbmZpZykudW51c2VkVG9rZW5zLmxlbmd0aCAqIDEwO1xuXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3ModGVtcENvbmZpZykuc2NvcmUgPSBjdXJyZW50U2NvcmU7XG5cbiAgICAgICAgICAgIGlmICghYmVzdEZvcm1hdElzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID09IG51bGwgfHxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3JlIDwgc2NvcmVUb0JlYXQgfHxcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRGb3JtYXRGb3VuZFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBzY29yZVRvQmVhdCA9IGN1cnJlbnRTY29yZTtcbiAgICAgICAgICAgICAgICAgICAgYmVzdE1vbWVudCA9IHRlbXBDb25maWc7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZEZvcm1hdEZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiZXN0Rm9ybWF0SXNWYWxpZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U2NvcmUgPCBzY29yZVRvQmVhdCkge1xuICAgICAgICAgICAgICAgICAgICBzY29yZVRvQmVhdCA9IGN1cnJlbnRTY29yZTtcbiAgICAgICAgICAgICAgICAgICAgYmVzdE1vbWVudCA9IHRlbXBDb25maWc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZXh0ZW5kKGNvbmZpZywgYmVzdE1vbWVudCB8fCB0ZW1wQ29uZmlnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb25maWdGcm9tT2JqZWN0KGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnLl9kKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaSA9IG5vcm1hbGl6ZU9iamVjdFVuaXRzKGNvbmZpZy5faSksXG4gICAgICAgICAgICBkYXlPckRhdGUgPSBpLmRheSA9PT0gdW5kZWZpbmVkID8gaS5kYXRlIDogaS5kYXk7XG4gICAgICAgIGNvbmZpZy5fYSA9IG1hcChcbiAgICAgICAgICAgIFtpLnllYXIsIGkubW9udGgsIGRheU9yRGF0ZSwgaS5ob3VyLCBpLm1pbnV0ZSwgaS5zZWNvbmQsIGkubWlsbGlzZWNvbmRdLFxuICAgICAgICAgICAgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiBvYmogJiYgcGFyc2VJbnQob2JqLCAxMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgY29uZmlnRnJvbUFycmF5KGNvbmZpZyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlRnJvbUNvbmZpZyhjb25maWcpIHtcbiAgICAgICAgdmFyIHJlcyA9IG5ldyBNb21lbnQoY2hlY2tPdmVyZmxvdyhwcmVwYXJlQ29uZmlnKGNvbmZpZykpKTtcbiAgICAgICAgaWYgKHJlcy5fbmV4dERheSkge1xuICAgICAgICAgICAgLy8gQWRkaW5nIGlzIHNtYXJ0IGVub3VnaCBhcm91bmQgRFNUXG4gICAgICAgICAgICByZXMuYWRkKDEsICdkJyk7XG4gICAgICAgICAgICByZXMuX25leHREYXkgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByZXBhcmVDb25maWcoY29uZmlnKSB7XG4gICAgICAgIHZhciBpbnB1dCA9IGNvbmZpZy5faSxcbiAgICAgICAgICAgIGZvcm1hdCA9IGNvbmZpZy5fZjtcblxuICAgICAgICBjb25maWcuX2xvY2FsZSA9IGNvbmZpZy5fbG9jYWxlIHx8IGdldExvY2FsZShjb25maWcuX2wpO1xuXG4gICAgICAgIGlmIChpbnB1dCA9PT0gbnVsbCB8fCAoZm9ybWF0ID09PSB1bmRlZmluZWQgJiYgaW5wdXQgPT09ICcnKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoeyBudWxsSW5wdXQ6IHRydWUgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uZmlnLl9pID0gaW5wdXQgPSBjb25maWcuX2xvY2FsZS5wcmVwYXJzZShpbnB1dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNNb21lbnQoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1vbWVudChjaGVja092ZXJmbG93KGlucHV0KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEYXRlKGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gaW5wdXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheShmb3JtYXQpKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kQXJyYXkoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21JbnB1dChjb25maWcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc1ZhbGlkKGNvbmZpZykpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21JbnB1dChjb25maWcpIHtcbiAgICAgICAgdmFyIGlucHV0ID0gY29uZmlnLl9pO1xuICAgICAgICBpZiAoaXNVbmRlZmluZWQoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShob29rcy5ub3coKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEYXRlKGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoaW5wdXQudmFsdWVPZigpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nKGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheShpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYSA9IG1hcChpbnB1dC5zbGljZSgwKSwgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUludChvYmosIDEwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uZmlnRnJvbUFycmF5KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tT2JqZWN0KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXIoaW5wdXQpKSB7XG4gICAgICAgICAgICAvLyBmcm9tIG1pbGxpc2Vjb25kc1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoaW5wdXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaG9va3MuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2soY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUxvY2FsT3JVVEMoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QsIGlzVVRDKSB7XG4gICAgICAgIHZhciBjID0ge307XG5cbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gdHJ1ZSB8fCBmb3JtYXQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBzdHJpY3QgPSBmb3JtYXQ7XG4gICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobG9jYWxlID09PSB0cnVlIHx8IGxvY2FsZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHN0cmljdCA9IGxvY2FsZTtcbiAgICAgICAgICAgIGxvY2FsZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIChpc09iamVjdChpbnB1dCkgJiYgaXNPYmplY3RFbXB0eShpbnB1dCkpIHx8XG4gICAgICAgICAgICAoaXNBcnJheShpbnB1dCkgJiYgaW5wdXQubGVuZ3RoID09PSAwKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGlucHV0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8vIG9iamVjdCBjb25zdHJ1Y3Rpb24gbXVzdCBiZSBkb25lIHRoaXMgd2F5LlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMTQyM1xuICAgICAgICBjLl9pc0FNb21lbnRPYmplY3QgPSB0cnVlO1xuICAgICAgICBjLl91c2VVVEMgPSBjLl9pc1VUQyA9IGlzVVRDO1xuICAgICAgICBjLl9sID0gbG9jYWxlO1xuICAgICAgICBjLl9pID0gaW5wdXQ7XG4gICAgICAgIGMuX2YgPSBmb3JtYXQ7XG4gICAgICAgIGMuX3N0cmljdCA9IHN0cmljdDtcblxuICAgICAgICByZXR1cm4gY3JlYXRlRnJvbUNvbmZpZyhjKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVMb2NhbChpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgZmFsc2UpO1xuICAgIH1cblxuICAgIHZhciBwcm90b3R5cGVNaW4gPSBkZXByZWNhdGUoXG4gICAgICAgICAgICAnbW9tZW50KCkubWluIGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQubWF4IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvbWluLW1heC8nLFxuICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBvdGhlciA9IGNyZWF0ZUxvY2FsLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNWYWxpZCgpICYmIG90aGVyLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXIgPCB0aGlzID8gdGhpcyA6IG90aGVyO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbnZhbGlkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICBwcm90b3R5cGVNYXggPSBkZXByZWNhdGUoXG4gICAgICAgICAgICAnbW9tZW50KCkubWF4IGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQubWluIGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvbWluLW1heC8nLFxuICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBvdGhlciA9IGNyZWF0ZUxvY2FsLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNWYWxpZCgpICYmIG90aGVyLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXIgPiB0aGlzID8gdGhpcyA6IG90aGVyO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbnZhbGlkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgLy8gUGljayBhIG1vbWVudCBtIGZyb20gbW9tZW50cyBzbyB0aGF0IG1bZm5dKG90aGVyKSBpcyB0cnVlIGZvciBhbGxcbiAgICAvLyBvdGhlci4gVGhpcyByZWxpZXMgb24gdGhlIGZ1bmN0aW9uIGZuIHRvIGJlIHRyYW5zaXRpdmUuXG4gICAgLy9cbiAgICAvLyBtb21lbnRzIHNob3VsZCBlaXRoZXIgYmUgYW4gYXJyYXkgb2YgbW9tZW50IG9iamVjdHMgb3IgYW4gYXJyYXksIHdob3NlXG4gICAgLy8gZmlyc3QgZWxlbWVudCBpcyBhbiBhcnJheSBvZiBtb21lbnQgb2JqZWN0cy5cbiAgICBmdW5jdGlvbiBwaWNrQnkoZm4sIG1vbWVudHMpIHtcbiAgICAgICAgdmFyIHJlcywgaTtcbiAgICAgICAgaWYgKG1vbWVudHMubGVuZ3RoID09PSAxICYmIGlzQXJyYXkobW9tZW50c1swXSkpIHtcbiAgICAgICAgICAgIG1vbWVudHMgPSBtb21lbnRzWzBdO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbW9tZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVMb2NhbCgpO1xuICAgICAgICB9XG4gICAgICAgIHJlcyA9IG1vbWVudHNbMF07XG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBtb21lbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBpZiAoIW1vbWVudHNbaV0uaXNWYWxpZCgpIHx8IG1vbWVudHNbaV1bZm5dKHJlcykpIHtcbiAgICAgICAgICAgICAgICByZXMgPSBtb21lbnRzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogVXNlIFtdLnNvcnQgaW5zdGVhZD9cbiAgICBmdW5jdGlvbiBtaW4oKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuXG4gICAgICAgIHJldHVybiBwaWNrQnkoJ2lzQmVmb3JlJywgYXJncyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF4KCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcblxuICAgICAgICByZXR1cm4gcGlja0J5KCdpc0FmdGVyJywgYXJncyk7XG4gICAgfVxuXG4gICAgdmFyIG5vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIERhdGUubm93ID8gRGF0ZS5ub3coKSA6ICtuZXcgRGF0ZSgpO1xuICAgIH07XG5cbiAgICB2YXIgb3JkZXJpbmcgPSBbXG4gICAgICAgICd5ZWFyJyxcbiAgICAgICAgJ3F1YXJ0ZXInLFxuICAgICAgICAnbW9udGgnLFxuICAgICAgICAnd2VlaycsXG4gICAgICAgICdkYXknLFxuICAgICAgICAnaG91cicsXG4gICAgICAgICdtaW51dGUnLFxuICAgICAgICAnc2Vjb25kJyxcbiAgICAgICAgJ21pbGxpc2Vjb25kJyxcbiAgICBdO1xuXG4gICAgZnVuY3Rpb24gaXNEdXJhdGlvblZhbGlkKG0pIHtcbiAgICAgICAgdmFyIGtleSxcbiAgICAgICAgICAgIHVuaXRIYXNEZWNpbWFsID0gZmFsc2UsXG4gICAgICAgICAgICBpO1xuICAgICAgICBmb3IgKGtleSBpbiBtKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgaGFzT3duUHJvcChtLCBrZXkpICYmXG4gICAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAgICAgaW5kZXhPZi5jYWxsKG9yZGVyaW5nLCBrZXkpICE9PSAtMSAmJlxuICAgICAgICAgICAgICAgICAgICAobVtrZXldID09IG51bGwgfHwgIWlzTmFOKG1ba2V5XSkpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IG9yZGVyaW5nLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBpZiAobVtvcmRlcmluZ1tpXV0pIHtcbiAgICAgICAgICAgICAgICBpZiAodW5pdEhhc0RlY2ltYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBvbmx5IGFsbG93IG5vbi1pbnRlZ2VycyBmb3Igc21hbGxlc3QgdW5pdFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocGFyc2VGbG9hdChtW29yZGVyaW5nW2ldXSkgIT09IHRvSW50KG1bb3JkZXJpbmdbaV1dKSkge1xuICAgICAgICAgICAgICAgICAgICB1bml0SGFzRGVjaW1hbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZCQxKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNWYWxpZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkJDEoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbihOYU4pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIER1cmF0aW9uKGR1cmF0aW9uKSB7XG4gICAgICAgIHZhciBub3JtYWxpemVkSW5wdXQgPSBub3JtYWxpemVPYmplY3RVbml0cyhkdXJhdGlvbiksXG4gICAgICAgICAgICB5ZWFycyA9IG5vcm1hbGl6ZWRJbnB1dC55ZWFyIHx8IDAsXG4gICAgICAgICAgICBxdWFydGVycyA9IG5vcm1hbGl6ZWRJbnB1dC5xdWFydGVyIHx8IDAsXG4gICAgICAgICAgICBtb250aHMgPSBub3JtYWxpemVkSW5wdXQubW9udGggfHwgMCxcbiAgICAgICAgICAgIHdlZWtzID0gbm9ybWFsaXplZElucHV0LndlZWsgfHwgbm9ybWFsaXplZElucHV0Lmlzb1dlZWsgfHwgMCxcbiAgICAgICAgICAgIGRheXMgPSBub3JtYWxpemVkSW5wdXQuZGF5IHx8IDAsXG4gICAgICAgICAgICBob3VycyA9IG5vcm1hbGl6ZWRJbnB1dC5ob3VyIHx8IDAsXG4gICAgICAgICAgICBtaW51dGVzID0gbm9ybWFsaXplZElucHV0Lm1pbnV0ZSB8fCAwLFxuICAgICAgICAgICAgc2Vjb25kcyA9IG5vcm1hbGl6ZWRJbnB1dC5zZWNvbmQgfHwgMCxcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kcyA9IG5vcm1hbGl6ZWRJbnB1dC5taWxsaXNlY29uZCB8fCAwO1xuXG4gICAgICAgIHRoaXMuX2lzVmFsaWQgPSBpc0R1cmF0aW9uVmFsaWQobm9ybWFsaXplZElucHV0KTtcblxuICAgICAgICAvLyByZXByZXNlbnRhdGlvbiBmb3IgZGF0ZUFkZFJlbW92ZVxuICAgICAgICB0aGlzLl9taWxsaXNlY29uZHMgPVxuICAgICAgICAgICAgK21pbGxpc2Vjb25kcyArXG4gICAgICAgICAgICBzZWNvbmRzICogMWUzICsgLy8gMTAwMFxuICAgICAgICAgICAgbWludXRlcyAqIDZlNCArIC8vIDEwMDAgKiA2MFxuICAgICAgICAgICAgaG91cnMgKiAxMDAwICogNjAgKiA2MDsgLy91c2luZyAxMDAwICogNjAgKiA2MCBpbnN0ZWFkIG9mIDM2ZTUgdG8gYXZvaWQgZmxvYXRpbmcgcG9pbnQgcm91bmRpbmcgZXJyb3JzIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8yOTc4XG4gICAgICAgIC8vIEJlY2F1c2Ugb2YgZGF0ZUFkZFJlbW92ZSB0cmVhdHMgMjQgaG91cnMgYXMgZGlmZmVyZW50IGZyb20gYVxuICAgICAgICAvLyBkYXkgd2hlbiB3b3JraW5nIGFyb3VuZCBEU1QsIHdlIG5lZWQgdG8gc3RvcmUgdGhlbSBzZXBhcmF0ZWx5XG4gICAgICAgIHRoaXMuX2RheXMgPSArZGF5cyArIHdlZWtzICogNztcbiAgICAgICAgLy8gSXQgaXMgaW1wb3NzaWJsZSB0byB0cmFuc2xhdGUgbW9udGhzIGludG8gZGF5cyB3aXRob3V0IGtub3dpbmdcbiAgICAgICAgLy8gd2hpY2ggbW9udGhzIHlvdSBhcmUgYXJlIHRhbGtpbmcgYWJvdXQsIHNvIHdlIGhhdmUgdG8gc3RvcmVcbiAgICAgICAgLy8gaXQgc2VwYXJhdGVseS5cbiAgICAgICAgdGhpcy5fbW9udGhzID0gK21vbnRocyArIHF1YXJ0ZXJzICogMyArIHllYXJzICogMTI7XG5cbiAgICAgICAgdGhpcy5fZGF0YSA9IHt9O1xuXG4gICAgICAgIHRoaXMuX2xvY2FsZSA9IGdldExvY2FsZSgpO1xuXG4gICAgICAgIHRoaXMuX2J1YmJsZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRHVyYXRpb24ob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBEdXJhdGlvbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhYnNSb3VuZChudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKC0xICogbnVtYmVyKSAqIC0xO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbXBhcmUgdHdvIGFycmF5cywgcmV0dXJuIHRoZSBudW1iZXIgb2YgZGlmZmVyZW5jZXNcbiAgICBmdW5jdGlvbiBjb21wYXJlQXJyYXlzKGFycmF5MSwgYXJyYXkyLCBkb250Q29udmVydCkge1xuICAgICAgICB2YXIgbGVuID0gTWF0aC5taW4oYXJyYXkxLmxlbmd0aCwgYXJyYXkyLmxlbmd0aCksXG4gICAgICAgICAgICBsZW5ndGhEaWZmID0gTWF0aC5hYnMoYXJyYXkxLmxlbmd0aCAtIGFycmF5Mi5sZW5ndGgpLFxuICAgICAgICAgICAgZGlmZnMgPSAwLFxuICAgICAgICAgICAgaTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKGRvbnRDb252ZXJ0ICYmIGFycmF5MVtpXSAhPT0gYXJyYXkyW2ldKSB8fFxuICAgICAgICAgICAgICAgICghZG9udENvbnZlcnQgJiYgdG9JbnQoYXJyYXkxW2ldKSAhPT0gdG9JbnQoYXJyYXkyW2ldKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGRpZmZzKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRpZmZzICsgbGVuZ3RoRGlmZjtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBmdW5jdGlvbiBvZmZzZXQodG9rZW4sIHNlcGFyYXRvcikge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbih0b2tlbiwgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMudXRjT2Zmc2V0KCksXG4gICAgICAgICAgICAgICAgc2lnbiA9ICcrJztcbiAgICAgICAgICAgIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gLW9mZnNldDtcbiAgICAgICAgICAgICAgICBzaWduID0gJy0nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICBzaWduICtcbiAgICAgICAgICAgICAgICB6ZXJvRmlsbCh+fihvZmZzZXQgLyA2MCksIDIpICtcbiAgICAgICAgICAgICAgICBzZXBhcmF0b3IgK1xuICAgICAgICAgICAgICAgIHplcm9GaWxsKH5+b2Zmc2V0ICUgNjAsIDIpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvZmZzZXQoJ1onLCAnOicpO1xuICAgIG9mZnNldCgnWlonLCAnJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdaJywgbWF0Y2hTaG9ydE9mZnNldCk7XG4gICAgYWRkUmVnZXhUb2tlbignWlonLCBtYXRjaFNob3J0T2Zmc2V0KTtcbiAgICBhZGRQYXJzZVRva2VuKFsnWicsICdaWiddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl91c2VVVEMgPSB0cnVlO1xuICAgICAgICBjb25maWcuX3R6bSA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hTaG9ydE9mZnNldCwgaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgLy8gdGltZXpvbmUgY2h1bmtlclxuICAgIC8vICcrMTA6MDAnID4gWycxMCcsICAnMDAnXVxuICAgIC8vICctMTUzMCcgID4gWyctMTUnLCAnMzAnXVxuICAgIHZhciBjaHVua09mZnNldCA9IC8oW1xcK1xcLV18XFxkXFxkKS9naTtcblxuICAgIGZ1bmN0aW9uIG9mZnNldEZyb21TdHJpbmcobWF0Y2hlciwgc3RyaW5nKSB7XG4gICAgICAgIHZhciBtYXRjaGVzID0gKHN0cmluZyB8fCAnJykubWF0Y2gobWF0Y2hlciksXG4gICAgICAgICAgICBjaHVuayxcbiAgICAgICAgICAgIHBhcnRzLFxuICAgICAgICAgICAgbWludXRlcztcblxuICAgICAgICBpZiAobWF0Y2hlcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjaHVuayA9IG1hdGNoZXNbbWF0Y2hlcy5sZW5ndGggLSAxXSB8fCBbXTtcbiAgICAgICAgcGFydHMgPSAoY2h1bmsgKyAnJykubWF0Y2goY2h1bmtPZmZzZXQpIHx8IFsnLScsIDAsIDBdO1xuICAgICAgICBtaW51dGVzID0gKyhwYXJ0c1sxXSAqIDYwKSArIHRvSW50KHBhcnRzWzJdKTtcblxuICAgICAgICByZXR1cm4gbWludXRlcyA9PT0gMCA/IDAgOiBwYXJ0c1swXSA9PT0gJysnID8gbWludXRlcyA6IC1taW51dGVzO1xuICAgIH1cblxuICAgIC8vIFJldHVybiBhIG1vbWVudCBmcm9tIGlucHV0LCB0aGF0IGlzIGxvY2FsL3V0Yy96b25lIGVxdWl2YWxlbnQgdG8gbW9kZWwuXG4gICAgZnVuY3Rpb24gY2xvbmVXaXRoT2Zmc2V0KGlucHV0LCBtb2RlbCkge1xuICAgICAgICB2YXIgcmVzLCBkaWZmO1xuICAgICAgICBpZiAobW9kZWwuX2lzVVRDKSB7XG4gICAgICAgICAgICByZXMgPSBtb2RlbC5jbG9uZSgpO1xuICAgICAgICAgICAgZGlmZiA9XG4gICAgICAgICAgICAgICAgKGlzTW9tZW50KGlucHV0KSB8fCBpc0RhdGUoaW5wdXQpXG4gICAgICAgICAgICAgICAgICAgID8gaW5wdXQudmFsdWVPZigpXG4gICAgICAgICAgICAgICAgICAgIDogY3JlYXRlTG9jYWwoaW5wdXQpLnZhbHVlT2YoKSkgLSByZXMudmFsdWVPZigpO1xuICAgICAgICAgICAgLy8gVXNlIGxvdy1sZXZlbCBhcGksIGJlY2F1c2UgdGhpcyBmbiBpcyBsb3ctbGV2ZWwgYXBpLlxuICAgICAgICAgICAgcmVzLl9kLnNldFRpbWUocmVzLl9kLnZhbHVlT2YoKSArIGRpZmYpO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHJlcywgZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVMb2NhbChpbnB1dCkubG9jYWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldERhdGVPZmZzZXQobSkge1xuICAgICAgICAvLyBPbiBGaXJlZm94LjI0IERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyBhIGZsb2F0aW5nIHBvaW50LlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9wdWxsLzE4NzFcbiAgICAgICAgcmV0dXJuIC1NYXRoLnJvdW5kKG0uX2QuZ2V0VGltZXpvbmVPZmZzZXQoKSk7XG4gICAgfVxuXG4gICAgLy8gSE9PS1NcblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgYSBtb21lbnQgaXMgbXV0YXRlZC5cbiAgICAvLyBJdCBpcyBpbnRlbmRlZCB0byBrZWVwIHRoZSBvZmZzZXQgaW4gc3luYyB3aXRoIHRoZSB0aW1lem9uZS5cbiAgICBob29rcy51cGRhdGVPZmZzZXQgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIC8vIGtlZXBMb2NhbFRpbWUgPSB0cnVlIG1lYW5zIG9ubHkgY2hhbmdlIHRoZSB0aW1lem9uZSwgd2l0aG91dFxuICAgIC8vIGFmZmVjdGluZyB0aGUgbG9jYWwgaG91ci4gU28gNTozMToyNiArMDMwMCAtLVt1dGNPZmZzZXQoMiwgdHJ1ZSldLS0+XG4gICAgLy8gNTozMToyNiArMDIwMCBJdCBpcyBwb3NzaWJsZSB0aGF0IDU6MzE6MjYgZG9lc24ndCBleGlzdCB3aXRoIG9mZnNldFxuICAgIC8vICswMjAwLCBzbyB3ZSBhZGp1c3QgdGhlIHRpbWUgYXMgbmVlZGVkLCB0byBiZSB2YWxpZC5cbiAgICAvL1xuICAgIC8vIEtlZXBpbmcgdGhlIHRpbWUgYWN0dWFsbHkgYWRkcy9zdWJ0cmFjdHMgKG9uZSBob3VyKVxuICAgIC8vIGZyb20gdGhlIGFjdHVhbCByZXByZXNlbnRlZCB0aW1lLiBUaGF0IGlzIHdoeSB3ZSBjYWxsIHVwZGF0ZU9mZnNldFxuICAgIC8vIGEgc2Vjb25kIHRpbWUuIEluIGNhc2UgaXQgd2FudHMgdXMgdG8gY2hhbmdlIHRoZSBvZmZzZXQgYWdhaW5cbiAgICAvLyBfY2hhbmdlSW5Qcm9ncmVzcyA9PSB0cnVlIGNhc2UsIHRoZW4gd2UgaGF2ZSB0byBhZGp1c3QsIGJlY2F1c2VcbiAgICAvLyB0aGVyZSBpcyBubyBzdWNoIHRpbWUgaW4gdGhlIGdpdmVuIHRpbWV6b25lLlxuICAgIGZ1bmN0aW9uIGdldFNldE9mZnNldChpbnB1dCwga2VlcExvY2FsVGltZSwga2VlcE1pbnV0ZXMpIHtcbiAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMuX29mZnNldCB8fCAwLFxuICAgICAgICAgICAgbG9jYWxBZGp1c3Q7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hTaG9ydE9mZnNldCwgaW5wdXQpO1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKE1hdGguYWJzKGlucHV0KSA8IDE2ICYmICFrZWVwTWludXRlcykge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gaW5wdXQgKiA2MDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5faXNVVEMgJiYga2VlcExvY2FsVGltZSkge1xuICAgICAgICAgICAgICAgIGxvY2FsQWRqdXN0ID0gZ2V0RGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX29mZnNldCA9IGlucHV0O1xuICAgICAgICAgICAgdGhpcy5faXNVVEMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGxvY2FsQWRqdXN0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZChsb2NhbEFkanVzdCwgJ20nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvZmZzZXQgIT09IGlucHV0KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFrZWVwTG9jYWxUaW1lIHx8IHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkU3VidHJhY3QoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRHVyYXRpb24oaW5wdXQgLSBvZmZzZXQsICdtJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLl9jaGFuZ2VJblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gb2Zmc2V0IDogZ2V0RGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldFpvbmUoaW5wdXQsIGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSAtaW5wdXQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KGlucHV0LCBrZWVwTG9jYWxUaW1lKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gLXRoaXMudXRjT2Zmc2V0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb1VUQyhrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnV0Y09mZnNldCgwLCBrZWVwTG9jYWxUaW1lKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb0xvY2FsKGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzVVRDKSB7XG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgwLCBrZWVwTG9jYWxUaW1lKTtcbiAgICAgICAgICAgIHRoaXMuX2lzVVRDID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJ0cmFjdChnZXREYXRlT2Zmc2V0KHRoaXMpLCAnbScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldE9mZnNldFRvUGFyc2VkT2Zmc2V0KCkge1xuICAgICAgICBpZiAodGhpcy5fdHptICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KHRoaXMuX3R6bSwgZmFsc2UsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLl9pID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdmFyIHRab25lID0gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaE9mZnNldCwgdGhpcy5faSk7XG4gICAgICAgICAgICBpZiAodFpvbmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KHRab25lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoMCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFzQWxpZ25lZEhvdXJPZmZzZXQoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlucHV0ID0gaW5wdXQgPyBjcmVhdGVMb2NhbChpbnB1dCkudXRjT2Zmc2V0KCkgOiAwO1xuXG4gICAgICAgIHJldHVybiAodGhpcy51dGNPZmZzZXQoKSAtIGlucHV0KSAlIDYwID09PSAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF5bGlnaHRTYXZpbmdUaW1lKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoKSA+IHRoaXMuY2xvbmUoKS5tb250aCgwKS51dGNPZmZzZXQoKSB8fFxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoKSA+IHRoaXMuY2xvbmUoKS5tb250aCg1KS51dGNPZmZzZXQoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF5bGlnaHRTYXZpbmdUaW1lU2hpZnRlZCgpIHtcbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZCh0aGlzLl9pc0RTVFNoaWZ0ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGMgPSB7fSxcbiAgICAgICAgICAgIG90aGVyO1xuXG4gICAgICAgIGNvcHlDb25maWcoYywgdGhpcyk7XG4gICAgICAgIGMgPSBwcmVwYXJlQ29uZmlnKGMpO1xuXG4gICAgICAgIGlmIChjLl9hKSB7XG4gICAgICAgICAgICBvdGhlciA9IGMuX2lzVVRDID8gY3JlYXRlVVRDKGMuX2EpIDogY3JlYXRlTG9jYWwoYy5fYSk7XG4gICAgICAgICAgICB0aGlzLl9pc0RTVFNoaWZ0ZWQgPVxuICAgICAgICAgICAgICAgIHRoaXMuaXNWYWxpZCgpICYmIGNvbXBhcmVBcnJheXMoYy5fYSwgb3RoZXIudG9BcnJheSgpKSA+IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9pc0RTVFNoaWZ0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNMb2NhbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gIXRoaXMuX2lzVVRDIDogZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVdGNPZmZzZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2lzVVRDIDogZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVdGMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2lzVVRDICYmIHRoaXMuX29mZnNldCA9PT0gMCA6IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEFTUC5ORVQganNvbiBkYXRlIGZvcm1hdCByZWdleFxuICAgIHZhciBhc3BOZXRSZWdleCA9IC9eKC18XFwrKT8oPzooXFxkKilbLiBdKT8oXFxkKyk6KFxcZCspKD86OihcXGQrKShcXC5cXGQqKT8pPyQvLFxuICAgICAgICAvLyBmcm9tIGh0dHA6Ly9kb2NzLmNsb3N1cmUtbGlicmFyeS5nb29nbGVjb2RlLmNvbS9naXQvY2xvc3VyZV9nb29nX2RhdGVfZGF0ZS5qcy5zb3VyY2UuaHRtbFxuICAgICAgICAvLyBzb21ld2hhdCBtb3JlIGluIGxpbmUgd2l0aCA0LjQuMy4yIDIwMDQgc3BlYywgYnV0IGFsbG93cyBkZWNpbWFsIGFueXdoZXJlXG4gICAgICAgIC8vIGFuZCBmdXJ0aGVyIG1vZGlmaWVkIHRvIGFsbG93IGZvciBzdHJpbmdzIGNvbnRhaW5pbmcgYm90aCB3ZWVrIGFuZCBkYXlcbiAgICAgICAgaXNvUmVnZXggPSAvXigtfFxcKyk/UCg/OihbLStdP1swLTksLl0qKVkpPyg/OihbLStdP1swLTksLl0qKU0pPyg/OihbLStdP1swLTksLl0qKVcpPyg/OihbLStdP1swLTksLl0qKUQpPyg/OlQoPzooWy0rXT9bMC05LC5dKilIKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilTKT8pPyQvO1xuXG4gICAgZnVuY3Rpb24gY3JlYXRlRHVyYXRpb24oaW5wdXQsIGtleSkge1xuICAgICAgICB2YXIgZHVyYXRpb24gPSBpbnB1dCxcbiAgICAgICAgICAgIC8vIG1hdGNoaW5nIGFnYWluc3QgcmVnZXhwIGlzIGV4cGVuc2l2ZSwgZG8gaXQgb24gZGVtYW5kXG4gICAgICAgICAgICBtYXRjaCA9IG51bGwsXG4gICAgICAgICAgICBzaWduLFxuICAgICAgICAgICAgcmV0LFxuICAgICAgICAgICAgZGlmZlJlcztcblxuICAgICAgICBpZiAoaXNEdXJhdGlvbihpbnB1dCkpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge1xuICAgICAgICAgICAgICAgIG1zOiBpbnB1dC5fbWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgICAgIGQ6IGlucHV0Ll9kYXlzLFxuICAgICAgICAgICAgICAgIE06IGlucHV0Ll9tb250aHMsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyKGlucHV0KSB8fCAhaXNOYU4oK2lucHV0KSkge1xuICAgICAgICAgICAgZHVyYXRpb24gPSB7fTtcbiAgICAgICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbltrZXldID0gK2lucHV0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbi5taWxsaXNlY29uZHMgPSAraW5wdXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoKG1hdGNoID0gYXNwTmV0UmVnZXguZXhlYyhpbnB1dCkpKSB7XG4gICAgICAgICAgICBzaWduID0gbWF0Y2hbMV0gPT09ICctJyA/IC0xIDogMTtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge1xuICAgICAgICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgICAgICAgZDogdG9JbnQobWF0Y2hbREFURV0pICogc2lnbixcbiAgICAgICAgICAgICAgICBoOiB0b0ludChtYXRjaFtIT1VSXSkgKiBzaWduLFxuICAgICAgICAgICAgICAgIG06IHRvSW50KG1hdGNoW01JTlVURV0pICogc2lnbixcbiAgICAgICAgICAgICAgICBzOiB0b0ludChtYXRjaFtTRUNPTkRdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgbXM6IHRvSW50KGFic1JvdW5kKG1hdGNoW01JTExJU0VDT05EXSAqIDEwMDApKSAqIHNpZ24sIC8vIHRoZSBtaWxsaXNlY29uZCBkZWNpbWFsIHBvaW50IGlzIGluY2x1ZGVkIGluIHRoZSBtYXRjaFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmICgobWF0Y2ggPSBpc29SZWdleC5leGVjKGlucHV0KSkpIHtcbiAgICAgICAgICAgIHNpZ24gPSBtYXRjaFsxXSA9PT0gJy0nID8gLTEgOiAxO1xuICAgICAgICAgICAgZHVyYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgeTogcGFyc2VJc28obWF0Y2hbMl0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIE06IHBhcnNlSXNvKG1hdGNoWzNdLCBzaWduKSxcbiAgICAgICAgICAgICAgICB3OiBwYXJzZUlzbyhtYXRjaFs0XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgZDogcGFyc2VJc28obWF0Y2hbNV0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIGg6IHBhcnNlSXNvKG1hdGNoWzZdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBtOiBwYXJzZUlzbyhtYXRjaFs3XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgczogcGFyc2VJc28obWF0Y2hbOF0sIHNpZ24pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChkdXJhdGlvbiA9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBjaGVja3MgZm9yIG51bGwgb3IgdW5kZWZpbmVkXG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIGR1cmF0aW9uID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgKCdmcm9tJyBpbiBkdXJhdGlvbiB8fCAndG8nIGluIGR1cmF0aW9uKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGRpZmZSZXMgPSBtb21lbnRzRGlmZmVyZW5jZShcbiAgICAgICAgICAgICAgICBjcmVhdGVMb2NhbChkdXJhdGlvbi5mcm9tKSxcbiAgICAgICAgICAgICAgICBjcmVhdGVMb2NhbChkdXJhdGlvbi50bylcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGR1cmF0aW9uID0ge307XG4gICAgICAgICAgICBkdXJhdGlvbi5tcyA9IGRpZmZSZXMubWlsbGlzZWNvbmRzO1xuICAgICAgICAgICAgZHVyYXRpb24uTSA9IGRpZmZSZXMubW9udGhzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0ID0gbmV3IER1cmF0aW9uKGR1cmF0aW9uKTtcblxuICAgICAgICBpZiAoaXNEdXJhdGlvbihpbnB1dCkgJiYgaGFzT3duUHJvcChpbnB1dCwgJ19sb2NhbGUnKSkge1xuICAgICAgICAgICAgcmV0Ll9sb2NhbGUgPSBpbnB1dC5fbG9jYWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpICYmIGhhc093blByb3AoaW5wdXQsICdfaXNWYWxpZCcpKSB7XG4gICAgICAgICAgICByZXQuX2lzVmFsaWQgPSBpbnB1dC5faXNWYWxpZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgY3JlYXRlRHVyYXRpb24uZm4gPSBEdXJhdGlvbi5wcm90b3R5cGU7XG4gICAgY3JlYXRlRHVyYXRpb24uaW52YWxpZCA9IGNyZWF0ZUludmFsaWQkMTtcblxuICAgIGZ1bmN0aW9uIHBhcnNlSXNvKGlucCwgc2lnbikge1xuICAgICAgICAvLyBXZSdkIG5vcm1hbGx5IHVzZSB+fmlucCBmb3IgdGhpcywgYnV0IHVuZm9ydHVuYXRlbHkgaXQgYWxzb1xuICAgICAgICAvLyBjb252ZXJ0cyBmbG9hdHMgdG8gaW50cy5cbiAgICAgICAgLy8gaW5wIG1heSBiZSB1bmRlZmluZWQsIHNvIGNhcmVmdWwgY2FsbGluZyByZXBsYWNlIG9uIGl0LlxuICAgICAgICB2YXIgcmVzID0gaW5wICYmIHBhcnNlRmxvYXQoaW5wLnJlcGxhY2UoJywnLCAnLicpKTtcbiAgICAgICAgLy8gYXBwbHkgc2lnbiB3aGlsZSB3ZSdyZSBhdCBpdFxuICAgICAgICByZXR1cm4gKGlzTmFOKHJlcykgPyAwIDogcmVzKSAqIHNpZ247XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZShiYXNlLCBvdGhlcikge1xuICAgICAgICB2YXIgcmVzID0ge307XG5cbiAgICAgICAgcmVzLm1vbnRocyA9XG4gICAgICAgICAgICBvdGhlci5tb250aCgpIC0gYmFzZS5tb250aCgpICsgKG90aGVyLnllYXIoKSAtIGJhc2UueWVhcigpKSAqIDEyO1xuICAgICAgICBpZiAoYmFzZS5jbG9uZSgpLmFkZChyZXMubW9udGhzLCAnTScpLmlzQWZ0ZXIob3RoZXIpKSB7XG4gICAgICAgICAgICAtLXJlcy5tb250aHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXMubWlsbGlzZWNvbmRzID0gK290aGVyIC0gK2Jhc2UuY2xvbmUoKS5hZGQocmVzLm1vbnRocywgJ00nKTtcblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbWVudHNEaWZmZXJlbmNlKGJhc2UsIG90aGVyKSB7XG4gICAgICAgIHZhciByZXM7XG4gICAgICAgIGlmICghKGJhc2UuaXNWYWxpZCgpICYmIG90aGVyLmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7IG1pbGxpc2Vjb25kczogMCwgbW9udGhzOiAwIH07XG4gICAgICAgIH1cblxuICAgICAgICBvdGhlciA9IGNsb25lV2l0aE9mZnNldChvdGhlciwgYmFzZSk7XG4gICAgICAgIGlmIChiYXNlLmlzQmVmb3JlKG90aGVyKSkge1xuICAgICAgICAgICAgcmVzID0gcG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZShiYXNlLCBvdGhlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXMgPSBwb3NpdGl2ZU1vbWVudHNEaWZmZXJlbmNlKG90aGVyLCBiYXNlKTtcbiAgICAgICAgICAgIHJlcy5taWxsaXNlY29uZHMgPSAtcmVzLm1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgIHJlcy5tb250aHMgPSAtcmVzLm1vbnRocztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogcmVtb3ZlICduYW1lJyBhcmcgYWZ0ZXIgZGVwcmVjYXRpb24gaXMgcmVtb3ZlZFxuICAgIGZ1bmN0aW9uIGNyZWF0ZUFkZGVyKGRpcmVjdGlvbiwgbmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbCwgcGVyaW9kKSB7XG4gICAgICAgICAgICB2YXIgZHVyLCB0bXA7XG4gICAgICAgICAgICAvL2ludmVydCB0aGUgYXJndW1lbnRzLCBidXQgY29tcGxhaW4gYWJvdXQgaXRcbiAgICAgICAgICAgIGlmIChwZXJpb2QgIT09IG51bGwgJiYgIWlzTmFOKCtwZXJpb2QpKSB7XG4gICAgICAgICAgICAgICAgZGVwcmVjYXRlU2ltcGxlKFxuICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAnbW9tZW50KCkuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lICtcbiAgICAgICAgICAgICAgICAgICAgICAgICcocGVyaW9kLCBudW1iZXIpIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgbW9tZW50KCkuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lICtcbiAgICAgICAgICAgICAgICAgICAgICAgICcobnVtYmVyLCBwZXJpb2QpLiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9hZGQtaW52ZXJ0ZWQtcGFyYW0vIGZvciBtb3JlIGluZm8uJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdG1wID0gdmFsO1xuICAgICAgICAgICAgICAgIHZhbCA9IHBlcmlvZDtcbiAgICAgICAgICAgICAgICBwZXJpb2QgPSB0bXA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGR1ciA9IGNyZWF0ZUR1cmF0aW9uKHZhbCwgcGVyaW9kKTtcbiAgICAgICAgICAgIGFkZFN1YnRyYWN0KHRoaXMsIGR1ciwgZGlyZWN0aW9uKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFN1YnRyYWN0KG1vbSwgZHVyYXRpb24sIGlzQWRkaW5nLCB1cGRhdGVPZmZzZXQpIHtcbiAgICAgICAgdmFyIG1pbGxpc2Vjb25kcyA9IGR1cmF0aW9uLl9taWxsaXNlY29uZHMsXG4gICAgICAgICAgICBkYXlzID0gYWJzUm91bmQoZHVyYXRpb24uX2RheXMpLFxuICAgICAgICAgICAgbW9udGhzID0gYWJzUm91bmQoZHVyYXRpb24uX21vbnRocyk7XG5cbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAvLyBObyBvcFxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdXBkYXRlT2Zmc2V0ID0gdXBkYXRlT2Zmc2V0ID09IG51bGwgPyB0cnVlIDogdXBkYXRlT2Zmc2V0O1xuXG4gICAgICAgIGlmIChtb250aHMpIHtcbiAgICAgICAgICAgIHNldE1vbnRoKG1vbSwgZ2V0KG1vbSwgJ01vbnRoJykgKyBtb250aHMgKiBpc0FkZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRheXMpIHtcbiAgICAgICAgICAgIHNldCQxKG1vbSwgJ0RhdGUnLCBnZXQobW9tLCAnRGF0ZScpICsgZGF5cyAqIGlzQWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWlsbGlzZWNvbmRzKSB7XG4gICAgICAgICAgICBtb20uX2Quc2V0VGltZShtb20uX2QudmFsdWVPZigpICsgbWlsbGlzZWNvbmRzICogaXNBZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1cGRhdGVPZmZzZXQpIHtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldChtb20sIGRheXMgfHwgbW9udGhzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBhZGQgPSBjcmVhdGVBZGRlcigxLCAnYWRkJyksXG4gICAgICAgIHN1YnRyYWN0ID0gY3JlYXRlQWRkZXIoLTEsICdzdWJ0cmFjdCcpO1xuXG4gICAgZnVuY3Rpb24gaXNTdHJpbmcoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycgfHwgaW5wdXQgaW5zdGFuY2VvZiBTdHJpbmc7XG4gICAgfVxuXG4gICAgLy8gdHlwZSBNb21lbnRJbnB1dCA9IE1vbWVudCB8IERhdGUgfCBzdHJpbmcgfCBudW1iZXIgfCAobnVtYmVyIHwgc3RyaW5nKVtdIHwgTW9tZW50SW5wdXRPYmplY3QgfCB2b2lkOyAvLyBudWxsIHwgdW5kZWZpbmVkXG4gICAgZnVuY3Rpb24gaXNNb21lbnRJbnB1dChpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaXNNb21lbnQoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc0RhdGUoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc1N0cmluZyhpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzTnVtYmVyKGlucHV0KSB8fFxuICAgICAgICAgICAgaXNOdW1iZXJPclN0cmluZ0FycmF5KGlucHV0KSB8fFxuICAgICAgICAgICAgaXNNb21lbnRJbnB1dE9iamVjdChpbnB1dCkgfHxcbiAgICAgICAgICAgIGlucHV0ID09PSBudWxsIHx8XG4gICAgICAgICAgICBpbnB1dCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNNb21lbnRJbnB1dE9iamVjdChpbnB1dCkge1xuICAgICAgICB2YXIgb2JqZWN0VGVzdCA9IGlzT2JqZWN0KGlucHV0KSAmJiAhaXNPYmplY3RFbXB0eShpbnB1dCksXG4gICAgICAgICAgICBwcm9wZXJ0eVRlc3QgPSBmYWxzZSxcbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSBbXG4gICAgICAgICAgICAgICAgJ3llYXJzJyxcbiAgICAgICAgICAgICAgICAneWVhcicsXG4gICAgICAgICAgICAgICAgJ3knLFxuICAgICAgICAgICAgICAgICdtb250aHMnLFxuICAgICAgICAgICAgICAgICdtb250aCcsXG4gICAgICAgICAgICAgICAgJ00nLFxuICAgICAgICAgICAgICAgICdkYXlzJyxcbiAgICAgICAgICAgICAgICAnZGF5JyxcbiAgICAgICAgICAgICAgICAnZCcsXG4gICAgICAgICAgICAgICAgJ2RhdGVzJyxcbiAgICAgICAgICAgICAgICAnZGF0ZScsXG4gICAgICAgICAgICAgICAgJ0QnLFxuICAgICAgICAgICAgICAgICdob3VycycsXG4gICAgICAgICAgICAgICAgJ2hvdXInLFxuICAgICAgICAgICAgICAgICdoJyxcbiAgICAgICAgICAgICAgICAnbWludXRlcycsXG4gICAgICAgICAgICAgICAgJ21pbnV0ZScsXG4gICAgICAgICAgICAgICAgJ20nLFxuICAgICAgICAgICAgICAgICdzZWNvbmRzJyxcbiAgICAgICAgICAgICAgICAnc2Vjb25kJyxcbiAgICAgICAgICAgICAgICAncycsXG4gICAgICAgICAgICAgICAgJ21pbGxpc2Vjb25kcycsXG4gICAgICAgICAgICAgICAgJ21pbGxpc2Vjb25kJyxcbiAgICAgICAgICAgICAgICAnbXMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBwcm9wZXJ0eTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2ldO1xuICAgICAgICAgICAgcHJvcGVydHlUZXN0ID0gcHJvcGVydHlUZXN0IHx8IGhhc093blByb3AoaW5wdXQsIHByb3BlcnR5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvYmplY3RUZXN0ICYmIHByb3BlcnR5VGVzdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc051bWJlck9yU3RyaW5nQXJyYXkoaW5wdXQpIHtcbiAgICAgICAgdmFyIGFycmF5VGVzdCA9IGlzQXJyYXkoaW5wdXQpLFxuICAgICAgICAgICAgZGF0YVR5cGVUZXN0ID0gZmFsc2U7XG4gICAgICAgIGlmIChhcnJheVRlc3QpIHtcbiAgICAgICAgICAgIGRhdGFUeXBlVGVzdCA9XG4gICAgICAgICAgICAgICAgaW5wdXQuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhaXNOdW1iZXIoaXRlbSkgJiYgaXNTdHJpbmcoaW5wdXQpO1xuICAgICAgICAgICAgICAgIH0pLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJyYXlUZXN0ICYmIGRhdGFUeXBlVGVzdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0NhbGVuZGFyU3BlYyhpbnB1dCkge1xuICAgICAgICB2YXIgb2JqZWN0VGVzdCA9IGlzT2JqZWN0KGlucHV0KSAmJiAhaXNPYmplY3RFbXB0eShpbnB1dCksXG4gICAgICAgICAgICBwcm9wZXJ0eVRlc3QgPSBmYWxzZSxcbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSBbXG4gICAgICAgICAgICAgICAgJ3NhbWVEYXknLFxuICAgICAgICAgICAgICAgICduZXh0RGF5JyxcbiAgICAgICAgICAgICAgICAnbGFzdERheScsXG4gICAgICAgICAgICAgICAgJ25leHRXZWVrJyxcbiAgICAgICAgICAgICAgICAnbGFzdFdlZWsnLFxuICAgICAgICAgICAgICAgICdzYW1lRWxzZScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIHByb3BlcnR5O1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICBwcm9wZXJ0eVRlc3QgPSBwcm9wZXJ0eVRlc3QgfHwgaGFzT3duUHJvcChpbnB1dCwgcHJvcGVydHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9iamVjdFRlc3QgJiYgcHJvcGVydHlUZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldENhbGVuZGFyRm9ybWF0KG15TW9tZW50LCBub3cpIHtcbiAgICAgICAgdmFyIGRpZmYgPSBteU1vbWVudC5kaWZmKG5vdywgJ2RheXMnLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIGRpZmYgPCAtNlxuICAgICAgICAgICAgPyAnc2FtZUVsc2UnXG4gICAgICAgICAgICA6IGRpZmYgPCAtMVxuICAgICAgICAgICAgPyAnbGFzdFdlZWsnXG4gICAgICAgICAgICA6IGRpZmYgPCAwXG4gICAgICAgICAgICA/ICdsYXN0RGF5J1xuICAgICAgICAgICAgOiBkaWZmIDwgMVxuICAgICAgICAgICAgPyAnc2FtZURheSdcbiAgICAgICAgICAgIDogZGlmZiA8IDJcbiAgICAgICAgICAgID8gJ25leHREYXknXG4gICAgICAgICAgICA6IGRpZmYgPCA3XG4gICAgICAgICAgICA/ICduZXh0V2VlaydcbiAgICAgICAgICAgIDogJ3NhbWVFbHNlJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYWxlbmRhciQxKHRpbWUsIGZvcm1hdHMpIHtcbiAgICAgICAgLy8gU3VwcG9ydCBmb3Igc2luZ2xlIHBhcmFtZXRlciwgZm9ybWF0cyBvbmx5IG92ZXJsb2FkIHRvIHRoZSBjYWxlbmRhciBmdW5jdGlvblxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgaWYgKCFhcmd1bWVudHNbMF0pIHtcbiAgICAgICAgICAgICAgICB0aW1lID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGZvcm1hdHMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzTW9tZW50SW5wdXQoYXJndW1lbnRzWzBdKSkge1xuICAgICAgICAgICAgICAgIHRpbWUgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgICAgICAgZm9ybWF0cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNDYWxlbmRhclNwZWMoYXJndW1lbnRzWzBdKSkge1xuICAgICAgICAgICAgICAgIGZvcm1hdHMgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgICAgICAgdGltZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBXZSB3YW50IHRvIGNvbXBhcmUgdGhlIHN0YXJ0IG9mIHRvZGF5LCB2cyB0aGlzLlxuICAgICAgICAvLyBHZXR0aW5nIHN0YXJ0LW9mLXRvZGF5IGRlcGVuZHMgb24gd2hldGhlciB3ZSdyZSBsb2NhbC91dGMvb2Zmc2V0IG9yIG5vdC5cbiAgICAgICAgdmFyIG5vdyA9IHRpbWUgfHwgY3JlYXRlTG9jYWwoKSxcbiAgICAgICAgICAgIHNvZCA9IGNsb25lV2l0aE9mZnNldChub3csIHRoaXMpLnN0YXJ0T2YoJ2RheScpLFxuICAgICAgICAgICAgZm9ybWF0ID0gaG9va3MuY2FsZW5kYXJGb3JtYXQodGhpcywgc29kKSB8fCAnc2FtZUVsc2UnLFxuICAgICAgICAgICAgb3V0cHV0ID1cbiAgICAgICAgICAgICAgICBmb3JtYXRzICYmXG4gICAgICAgICAgICAgICAgKGlzRnVuY3Rpb24oZm9ybWF0c1tmb3JtYXRdKVxuICAgICAgICAgICAgICAgICAgICA/IGZvcm1hdHNbZm9ybWF0XS5jYWxsKHRoaXMsIG5vdylcbiAgICAgICAgICAgICAgICAgICAgOiBmb3JtYXRzW2Zvcm1hdF0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdChcbiAgICAgICAgICAgIG91dHB1dCB8fCB0aGlzLmxvY2FsZURhdGEoKS5jYWxlbmRhcihmb3JtYXQsIHRoaXMsIGNyZWF0ZUxvY2FsKG5vdykpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xvbmUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgTW9tZW50KHRoaXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQWZ0ZXIoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHZhciBsb2NhbElucHV0ID0gaXNNb21lbnQoaW5wdXQpID8gaW5wdXQgOiBjcmVhdGVMb2NhbChpbnB1dCk7XG4gICAgICAgIGlmICghKHRoaXMuaXNWYWxpZCgpICYmIGxvY2FsSW5wdXQuaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpIHx8ICdtaWxsaXNlY29uZCc7XG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21pbGxpc2Vjb25kJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpID4gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxJbnB1dC52YWx1ZU9mKCkgPCB0aGlzLmNsb25lKCkuc3RhcnRPZih1bml0cykudmFsdWVPZigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNCZWZvcmUoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHZhciBsb2NhbElucHV0ID0gaXNNb21lbnQoaW5wdXQpID8gaW5wdXQgOiBjcmVhdGVMb2NhbChpbnB1dCk7XG4gICAgICAgIGlmICghKHRoaXMuaXNWYWxpZCgpICYmIGxvY2FsSW5wdXQuaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpIHx8ICdtaWxsaXNlY29uZCc7XG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21pbGxpc2Vjb25kJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpIDwgbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmVuZE9mKHVuaXRzKS52YWx1ZU9mKCkgPCBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQmV0d2Vlbihmcm9tLCB0bywgdW5pdHMsIGluY2x1c2l2aXR5KSB7XG4gICAgICAgIHZhciBsb2NhbEZyb20gPSBpc01vbWVudChmcm9tKSA/IGZyb20gOiBjcmVhdGVMb2NhbChmcm9tKSxcbiAgICAgICAgICAgIGxvY2FsVG8gPSBpc01vbWVudCh0bykgPyB0byA6IGNyZWF0ZUxvY2FsKHRvKTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxGcm9tLmlzVmFsaWQoKSAmJiBsb2NhbFRvLmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpbmNsdXNpdml0eSA9IGluY2x1c2l2aXR5IHx8ICcoKSc7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoaW5jbHVzaXZpdHlbMF0gPT09ICcoJ1xuICAgICAgICAgICAgICAgID8gdGhpcy5pc0FmdGVyKGxvY2FsRnJvbSwgdW5pdHMpXG4gICAgICAgICAgICAgICAgOiAhdGhpcy5pc0JlZm9yZShsb2NhbEZyb20sIHVuaXRzKSkgJiZcbiAgICAgICAgICAgIChpbmNsdXNpdml0eVsxXSA9PT0gJyknXG4gICAgICAgICAgICAgICAgPyB0aGlzLmlzQmVmb3JlKGxvY2FsVG8sIHVuaXRzKVxuICAgICAgICAgICAgICAgIDogIXRoaXMuaXNBZnRlcihsb2NhbFRvLCB1bml0cykpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNTYW1lKGlucHV0LCB1bml0cykge1xuICAgICAgICB2YXIgbG9jYWxJbnB1dCA9IGlzTW9tZW50KGlucHV0KSA/IGlucHV0IDogY3JlYXRlTG9jYWwoaW5wdXQpLFxuICAgICAgICAgICAgaW5wdXRNcztcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPT09IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5wdXRNcyA9IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICB0aGlzLmNsb25lKCkuc3RhcnRPZih1bml0cykudmFsdWVPZigpIDw9IGlucHV0TXMgJiZcbiAgICAgICAgICAgICAgICBpbnB1dE1zIDw9IHRoaXMuY2xvbmUoKS5lbmRPZih1bml0cykudmFsdWVPZigpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNTYW1lT3JBZnRlcihpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTYW1lKGlucHV0LCB1bml0cykgfHwgdGhpcy5pc0FmdGVyKGlucHV0LCB1bml0cyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNTYW1lT3JCZWZvcmUoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU2FtZShpbnB1dCwgdW5pdHMpIHx8IHRoaXMuaXNCZWZvcmUoaW5wdXQsIHVuaXRzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkaWZmKGlucHV0LCB1bml0cywgYXNGbG9hdCkge1xuICAgICAgICB2YXIgdGhhdCwgem9uZURlbHRhLCBvdXRwdXQ7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoYXQgPSBjbG9uZVdpdGhPZmZzZXQoaW5wdXQsIHRoaXMpO1xuXG4gICAgICAgIGlmICghdGhhdC5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICB6b25lRGVsdGEgPSAodGhhdC51dGNPZmZzZXQoKSAtIHRoaXMudXRjT2Zmc2V0KCkpICogNmU0O1xuXG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9IG1vbnRoRGlmZih0aGlzLCB0aGF0KSAvIDEyO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9IG1vbnRoRGlmZih0aGlzLCB0aGF0KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9IG1vbnRoRGlmZih0aGlzLCB0aGF0KSAvIDM7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCkgLyAxZTM7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDBcbiAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0KSAvIDZlNDtcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMCAqIDYwXG4gICAgICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQpIC8gMzZlNTtcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMCAqIDYwICogNjBcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0IC0gem9uZURlbHRhKSAvIDg2NGU1O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjAgKiA2MCAqIDI0LCBuZWdhdGUgZHN0XG4gICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQgLSB6b25lRGVsdGEpIC8gNjA0OGU1O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjAgKiA2MCAqIDI0ICogNywgbmVnYXRlIGRzdFxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSB0aGlzIC0gdGhhdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhc0Zsb2F0ID8gb3V0cHV0IDogYWJzRmxvb3Iob3V0cHV0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aERpZmYoYSwgYikge1xuICAgICAgICBpZiAoYS5kYXRlKCkgPCBiLmRhdGUoKSkge1xuICAgICAgICAgICAgLy8gZW5kLW9mLW1vbnRoIGNhbGN1bGF0aW9ucyB3b3JrIGNvcnJlY3Qgd2hlbiB0aGUgc3RhcnQgbW9udGggaGFzIG1vcmVcbiAgICAgICAgICAgIC8vIGRheXMgdGhhbiB0aGUgZW5kIG1vbnRoLlxuICAgICAgICAgICAgcmV0dXJuIC1tb250aERpZmYoYiwgYSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZGlmZmVyZW5jZSBpbiBtb250aHNcbiAgICAgICAgdmFyIHdob2xlTW9udGhEaWZmID0gKGIueWVhcigpIC0gYS55ZWFyKCkpICogMTIgKyAoYi5tb250aCgpIC0gYS5tb250aCgpKSxcbiAgICAgICAgICAgIC8vIGIgaXMgaW4gKGFuY2hvciAtIDEgbW9udGgsIGFuY2hvciArIDEgbW9udGgpXG4gICAgICAgICAgICBhbmNob3IgPSBhLmNsb25lKCkuYWRkKHdob2xlTW9udGhEaWZmLCAnbW9udGhzJyksXG4gICAgICAgICAgICBhbmNob3IyLFxuICAgICAgICAgICAgYWRqdXN0O1xuXG4gICAgICAgIGlmIChiIC0gYW5jaG9yIDwgMCkge1xuICAgICAgICAgICAgYW5jaG9yMiA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYgLSAxLCAnbW9udGhzJyk7XG4gICAgICAgICAgICAvLyBsaW5lYXIgYWNyb3NzIHRoZSBtb250aFxuICAgICAgICAgICAgYWRqdXN0ID0gKGIgLSBhbmNob3IpIC8gKGFuY2hvciAtIGFuY2hvcjIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYW5jaG9yMiA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYgKyAxLCAnbW9udGhzJyk7XG4gICAgICAgICAgICAvLyBsaW5lYXIgYWNyb3NzIHRoZSBtb250aFxuICAgICAgICAgICAgYWRqdXN0ID0gKGIgLSBhbmNob3IpIC8gKGFuY2hvcjIgLSBhbmNob3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9jaGVjayBmb3IgbmVnYXRpdmUgemVybywgcmV0dXJuIHplcm8gaWYgbmVnYXRpdmUgemVyb1xuICAgICAgICByZXR1cm4gLSh3aG9sZU1vbnRoRGlmZiArIGFkanVzdCkgfHwgMDtcbiAgICB9XG5cbiAgICBob29rcy5kZWZhdWx0Rm9ybWF0ID0gJ1lZWVktTU0tRERUSEg6bW06c3NaJztcbiAgICBob29rcy5kZWZhdWx0Rm9ybWF0VXRjID0gJ1lZWVktTU0tRERUSEg6bW06c3NbWl0nO1xuXG4gICAgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsb25lKCkubG9jYWxlKCdlbicpLmZvcm1hdCgnZGRkIE1NTSBERCBZWVlZIEhIOm1tOnNzIFtHTVRdWlonKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0lTT1N0cmluZyhrZWVwT2Zmc2V0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHZhciB1dGMgPSBrZWVwT2Zmc2V0ICE9PSB0cnVlLFxuICAgICAgICAgICAgbSA9IHV0YyA/IHRoaXMuY2xvbmUoKS51dGMoKSA6IHRoaXM7XG4gICAgICAgIGlmIChtLnllYXIoKSA8IDAgfHwgbS55ZWFyKCkgPiA5OTk5KSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0TW9tZW50KFxuICAgICAgICAgICAgICAgIG0sXG4gICAgICAgICAgICAgICAgdXRjXG4gICAgICAgICAgICAgICAgICAgID8gJ1lZWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXSdcbiAgICAgICAgICAgICAgICAgICAgOiAnWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTWidcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcpKSB7XG4gICAgICAgICAgICAvLyBuYXRpdmUgaW1wbGVtZW50YXRpb24gaXMgfjUweCBmYXN0ZXIsIHVzZSBpdCB3aGVuIHdlIGNhblxuICAgICAgICAgICAgaWYgKHV0Yykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRvRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSArIHRoaXMudXRjT2Zmc2V0KCkgKiA2MCAqIDEwMDApXG4gICAgICAgICAgICAgICAgICAgIC50b0lTT1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdaJywgZm9ybWF0TW9tZW50KG0sICdaJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3JtYXRNb21lbnQoXG4gICAgICAgICAgICBtLFxuICAgICAgICAgICAgdXRjID8gJ1lZWVktTU0tRERbVF1ISDptbTpzcy5TU1NbWl0nIDogJ1lZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIGh1bWFuIHJlYWRhYmxlIHJlcHJlc2VudGF0aW9uIG9mIGEgbW9tZW50IHRoYXQgY2FuXG4gICAgICogYWxzbyBiZSBldmFsdWF0ZWQgdG8gZ2V0IGEgbmV3IG1vbWVudCB3aGljaCBpcyB0aGUgc2FtZVxuICAgICAqXG4gICAgICogQGxpbmsgaHR0cHM6Ly9ub2RlanMub3JnL2Rpc3QvbGF0ZXN0L2RvY3MvYXBpL3V0aWwuaHRtbCN1dGlsX2N1c3RvbV9pbnNwZWN0X2Z1bmN0aW9uX29uX29iamVjdHNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbnNwZWN0KCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gJ21vbWVudC5pbnZhbGlkKC8qICcgKyB0aGlzLl9pICsgJyAqLyknO1xuICAgICAgICB9XG4gICAgICAgIHZhciBmdW5jID0gJ21vbWVudCcsXG4gICAgICAgICAgICB6b25lID0gJycsXG4gICAgICAgICAgICBwcmVmaXgsXG4gICAgICAgICAgICB5ZWFyLFxuICAgICAgICAgICAgZGF0ZXRpbWUsXG4gICAgICAgICAgICBzdWZmaXg7XG4gICAgICAgIGlmICghdGhpcy5pc0xvY2FsKCkpIHtcbiAgICAgICAgICAgIGZ1bmMgPSB0aGlzLnV0Y09mZnNldCgpID09PSAwID8gJ21vbWVudC51dGMnIDogJ21vbWVudC5wYXJzZVpvbmUnO1xuICAgICAgICAgICAgem9uZSA9ICdaJztcbiAgICAgICAgfVxuICAgICAgICBwcmVmaXggPSAnWycgKyBmdW5jICsgJyhcIl0nO1xuICAgICAgICB5ZWFyID0gMCA8PSB0aGlzLnllYXIoKSAmJiB0aGlzLnllYXIoKSA8PSA5OTk5ID8gJ1lZWVknIDogJ1lZWVlZWSc7XG4gICAgICAgIGRhdGV0aW1lID0gJy1NTS1ERFtUXUhIOm1tOnNzLlNTUyc7XG4gICAgICAgIHN1ZmZpeCA9IHpvbmUgKyAnW1wiKV0nO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdChwcmVmaXggKyB5ZWFyICsgZGF0ZXRpbWUgKyBzdWZmaXgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZvcm1hdChpbnB1dFN0cmluZykge1xuICAgICAgICBpZiAoIWlucHV0U3RyaW5nKSB7XG4gICAgICAgICAgICBpbnB1dFN0cmluZyA9IHRoaXMuaXNVdGMoKVxuICAgICAgICAgICAgICAgID8gaG9va3MuZGVmYXVsdEZvcm1hdFV0Y1xuICAgICAgICAgICAgICAgIDogaG9va3MuZGVmYXVsdEZvcm1hdDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgb3V0cHV0ID0gZm9ybWF0TW9tZW50KHRoaXMsIGlucHV0U3RyaW5nKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLnBvc3Rmb3JtYXQob3V0cHV0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmcm9tKHRpbWUsIHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkKCkgJiZcbiAgICAgICAgICAgICgoaXNNb21lbnQodGltZSkgJiYgdGltZS5pc1ZhbGlkKCkpIHx8IGNyZWF0ZUxvY2FsKHRpbWUpLmlzVmFsaWQoKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oeyB0bzogdGhpcywgZnJvbTogdGltZSB9KVxuICAgICAgICAgICAgICAgIC5sb2NhbGUodGhpcy5sb2NhbGUoKSlcbiAgICAgICAgICAgICAgICAuaHVtYW5pemUoIXdpdGhvdXRTdWZmaXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmcm9tTm93KHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJvbShjcmVhdGVMb2NhbCgpLCB3aXRob3V0U3VmZml4KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0byh0aW1lLCB3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZCgpICYmXG4gICAgICAgICAgICAoKGlzTW9tZW50KHRpbWUpICYmIHRpbWUuaXNWYWxpZCgpKSB8fCBjcmVhdGVMb2NhbCh0aW1lKS5pc1ZhbGlkKCkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uKHsgZnJvbTogdGhpcywgdG86IHRpbWUgfSlcbiAgICAgICAgICAgICAgICAubG9jYWxlKHRoaXMubG9jYWxlKCkpXG4gICAgICAgICAgICAgICAgLmh1bWFuaXplKCF3aXRob3V0U3VmZml4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9Ob3cod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gdGhpcy50byhjcmVhdGVMb2NhbCgpLCB3aXRob3V0U3VmZml4KTtcbiAgICB9XG5cbiAgICAvLyBJZiBwYXNzZWQgYSBsb2NhbGUga2V5LCBpdCB3aWxsIHNldCB0aGUgbG9jYWxlIGZvciB0aGlzXG4gICAgLy8gaW5zdGFuY2UuICBPdGhlcndpc2UsIGl0IHdpbGwgcmV0dXJuIHRoZSBsb2NhbGUgY29uZmlndXJhdGlvblxuICAgIC8vIHZhcmlhYmxlcyBmb3IgdGhpcyBpbnN0YW5jZS5cbiAgICBmdW5jdGlvbiBsb2NhbGUoa2V5KSB7XG4gICAgICAgIHZhciBuZXdMb2NhbGVEYXRhO1xuXG4gICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsZS5fYWJicjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld0xvY2FsZURhdGEgPSBnZXRMb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIGlmIChuZXdMb2NhbGVEYXRhICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2NhbGUgPSBuZXdMb2NhbGVEYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbGFuZyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudCgpLmxhbmcoKSBpcyBkZXByZWNhdGVkLiBJbnN0ZWFkLCB1c2UgbW9tZW50KCkubG9jYWxlRGF0YSgpIHRvIGdldCB0aGUgbGFuZ3VhZ2UgY29uZmlndXJhdGlvbi4gVXNlIG1vbWVudCgpLmxvY2FsZSgpIHRvIGNoYW5nZSBsYW5ndWFnZXMuJyxcbiAgICAgICAgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVEYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxlO1xuICAgIH1cblxuICAgIHZhciBNU19QRVJfU0VDT05EID0gMTAwMCxcbiAgICAgICAgTVNfUEVSX01JTlVURSA9IDYwICogTVNfUEVSX1NFQ09ORCxcbiAgICAgICAgTVNfUEVSX0hPVVIgPSA2MCAqIE1TX1BFUl9NSU5VVEUsXG4gICAgICAgIE1TX1BFUl80MDBfWUVBUlMgPSAoMzY1ICogNDAwICsgOTcpICogMjQgKiBNU19QRVJfSE9VUjtcblxuICAgIC8vIGFjdHVhbCBtb2R1bG8gLSBoYW5kbGVzIG5lZ2F0aXZlIG51bWJlcnMgKGZvciBkYXRlcyBiZWZvcmUgMTk3MCk6XG4gICAgZnVuY3Rpb24gbW9kJDEoZGl2aWRlbmQsIGRpdmlzb3IpIHtcbiAgICAgICAgcmV0dXJuICgoZGl2aWRlbmQgJSBkaXZpc29yKSArIGRpdmlzb3IpICUgZGl2aXNvcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbFN0YXJ0T2ZEYXRlKHksIG0sIGQpIHtcbiAgICAgICAgLy8gdGhlIGRhdGUgY29uc3RydWN0b3IgcmVtYXBzIHllYXJzIDAtOTkgdG8gMTkwMC0xOTk5XG4gICAgICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCkge1xuICAgICAgICAgICAgLy8gcHJlc2VydmUgbGVhcCB5ZWFycyB1c2luZyBhIGZ1bGwgNDAwIHllYXIgY3ljbGUsIHRoZW4gcmVzZXRcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh5ICsgNDAwLCBtLCBkKSAtIE1TX1BFUl80MDBfWUVBUlM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoeSwgbSwgZCkudmFsdWVPZigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXRjU3RhcnRPZkRhdGUoeSwgbSwgZCkge1xuICAgICAgICAvLyBEYXRlLlVUQyByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgcmV0dXJuIERhdGUuVVRDKHkgKyA0MDAsIG0sIGQpIC0gTVNfUEVSXzQwMF9ZRUFSUztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBEYXRlLlVUQyh5LCBtLCBkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0YXJ0T2YodW5pdHMpIHtcbiAgICAgICAgdmFyIHRpbWUsIHN0YXJ0T2ZEYXRlO1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgaWYgKHVuaXRzID09PSB1bmRlZmluZWQgfHwgdW5pdHMgPT09ICdtaWxsaXNlY29uZCcgfHwgIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXJ0T2ZEYXRlID0gdGhpcy5faXNVVEMgPyB1dGNTdGFydE9mRGF0ZSA6IGxvY2FsU3RhcnRPZkRhdGU7XG5cbiAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCAwLCAxKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSAtICh0aGlzLm1vbnRoKCkgJSAzKSxcbiAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCksIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtIHRoaXMud2Vla2RheSgpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2lzb1dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlKCkgLSAodGhpcy5pc29XZWVrZGF5KCkgLSAxKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCksIHRoaXMuZGF0ZSgpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lIC09IG1vZCQxKFxuICAgICAgICAgICAgICAgICAgICB0aW1lICsgKHRoaXMuX2lzVVRDID8gMCA6IHRoaXMudXRjT2Zmc2V0KCkgKiBNU19QRVJfTUlOVVRFKSxcbiAgICAgICAgICAgICAgICAgICAgTVNfUEVSX0hPVVJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSAtPSBtb2QkMSh0aW1lLCBNU19QRVJfTUlOVVRFKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgLT0gbW9kJDEodGltZSwgTVNfUEVSX1NFQ09ORCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kLnNldFRpbWUodGltZSk7XG4gICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW5kT2YodW5pdHMpIHtcbiAgICAgICAgdmFyIHRpbWUsIHN0YXJ0T2ZEYXRlO1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgaWYgKHVuaXRzID09PSB1bmRlZmluZWQgfHwgdW5pdHMgPT09ICdtaWxsaXNlY29uZCcgfHwgIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXJ0T2ZEYXRlID0gdGhpcy5faXNVVEMgPyB1dGNTdGFydE9mRGF0ZSA6IGxvY2FsU3RhcnRPZkRhdGU7XG5cbiAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpICsgMSwgMCwgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgdGltZSA9XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCkgLSAodGhpcy5tb250aCgpICUgMykgKyAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICApIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSArIDEsIDEpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPVxuICAgICAgICAgICAgICAgICAgICBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlKCkgLSB0aGlzLndlZWtkYXkoKSArIDdcbiAgICAgICAgICAgICAgICAgICAgKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdpc29XZWVrJzpcbiAgICAgICAgICAgICAgICB0aW1lID1cbiAgICAgICAgICAgICAgICAgICAgc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSgpIC0gKHRoaXMuaXNvV2Vla2RheSgpIC0gMSkgKyA3XG4gICAgICAgICAgICAgICAgICAgICkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpLCB0aGlzLmRhdGUoKSArIDEpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9XG4gICAgICAgICAgICAgICAgICAgIE1TX1BFUl9IT1VSIC1cbiAgICAgICAgICAgICAgICAgICAgbW9kJDEoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lICsgKHRoaXMuX2lzVVRDID8gMCA6IHRoaXMudXRjT2Zmc2V0KCkgKiBNU19QRVJfTUlOVVRFKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIE1TX1BFUl9IT1VSXG4gICAgICAgICAgICAgICAgICAgICkgLVxuICAgICAgICAgICAgICAgICAgICAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSArPSBNU19QRVJfTUlOVVRFIC0gbW9kJDEodGltZSwgTVNfUEVSX01JTlVURSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSArPSBNU19QRVJfU0VDT05EIC0gbW9kJDEodGltZSwgTVNfUEVSX1NFQ09ORCkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZC5zZXRUaW1lKHRpbWUpO1xuICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbHVlT2YoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kLnZhbHVlT2YoKSAtICh0aGlzLl9vZmZzZXQgfHwgMCkgKiA2MDAwMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1bml4KCkge1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcih0aGlzLnZhbHVlT2YoKSAvIDEwMDApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvRGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0FycmF5KCkge1xuICAgICAgICB2YXIgbSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBtLnllYXIoKSxcbiAgICAgICAgICAgIG0ubW9udGgoKSxcbiAgICAgICAgICAgIG0uZGF0ZSgpLFxuICAgICAgICAgICAgbS5ob3VyKCksXG4gICAgICAgICAgICBtLm1pbnV0ZSgpLFxuICAgICAgICAgICAgbS5zZWNvbmQoKSxcbiAgICAgICAgICAgIG0ubWlsbGlzZWNvbmQoKSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b09iamVjdCgpIHtcbiAgICAgICAgdmFyIG0gPSB0aGlzO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeWVhcnM6IG0ueWVhcigpLFxuICAgICAgICAgICAgbW9udGhzOiBtLm1vbnRoKCksXG4gICAgICAgICAgICBkYXRlOiBtLmRhdGUoKSxcbiAgICAgICAgICAgIGhvdXJzOiBtLmhvdXJzKCksXG4gICAgICAgICAgICBtaW51dGVzOiBtLm1pbnV0ZXMoKSxcbiAgICAgICAgICAgIHNlY29uZHM6IG0uc2Vjb25kcygpLFxuICAgICAgICAgICAgbWlsbGlzZWNvbmRzOiBtLm1pbGxpc2Vjb25kcygpLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICAgICAgLy8gbmV3IERhdGUoTmFOKS50b0pTT04oKSA9PT0gbnVsbFxuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzLnRvSVNPU3RyaW5nKCkgOiBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVmFsaWQkMigpIHtcbiAgICAgICAgcmV0dXJuIGlzVmFsaWQodGhpcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2luZ0ZsYWdzKCkge1xuICAgICAgICByZXR1cm4gZXh0ZW5kKHt9LCBnZXRQYXJzaW5nRmxhZ3ModGhpcykpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGludmFsaWRBdCgpIHtcbiAgICAgICAgcmV0dXJuIGdldFBhcnNpbmdGbGFncyh0aGlzKS5vdmVyZmxvdztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGlvbkRhdGEoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpbnB1dDogdGhpcy5faSxcbiAgICAgICAgICAgIGZvcm1hdDogdGhpcy5fZixcbiAgICAgICAgICAgIGxvY2FsZTogdGhpcy5fbG9jYWxlLFxuICAgICAgICAgICAgaXNVVEM6IHRoaXMuX2lzVVRDLFxuICAgICAgICAgICAgc3RyaWN0OiB0aGlzLl9zdHJpY3QsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ04nLCAwLCAwLCAnZXJhQWJicicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdOTicsIDAsIDAsICdlcmFBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OTicsIDAsIDAsICdlcmFBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OTk4nLCAwLCAwLCAnZXJhTmFtZScpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdOTk5OTicsIDAsIDAsICdlcmFOYXJyb3cnKTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCd5JywgWyd5JywgMV0sICd5bycsICdlcmFZZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3l5JywgMl0sIDAsICdlcmFZZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3l5eScsIDNdLCAwLCAnZXJhWWVhcicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd5JywgWyd5eXl5JywgNF0sIDAsICdlcmFZZWFyJyk7XG5cbiAgICBhZGRSZWdleFRva2VuKCdOJywgbWF0Y2hFcmFBYmJyKTtcbiAgICBhZGRSZWdleFRva2VuKCdOTicsIG1hdGNoRXJhQWJicik7XG4gICAgYWRkUmVnZXhUb2tlbignTk5OJywgbWF0Y2hFcmFBYmJyKTtcbiAgICBhZGRSZWdleFRva2VuKCdOTk5OJywgbWF0Y2hFcmFOYW1lKTtcbiAgICBhZGRSZWdleFRva2VuKCdOTk5OTicsIG1hdGNoRXJhTmFycm93KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydOJywgJ05OJywgJ05OTicsICdOTk5OJywgJ05OTk5OJ10sIGZ1bmN0aW9uIChcbiAgICAgICAgaW5wdXQsXG4gICAgICAgIGFycmF5LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHRva2VuXG4gICAgKSB7XG4gICAgICAgIHZhciBlcmEgPSBjb25maWcuX2xvY2FsZS5lcmFzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgIGlmIChlcmEpIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVyYSA9IGVyYTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmludmFsaWRFcmEgPSBpbnB1dDtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWRkUmVnZXhUb2tlbigneScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3l5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneXl5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneXl5eScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3lvJywgbWF0Y2hFcmFZZWFyT3JkaW5hbCk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsneScsICd5eScsICd5eXknLCAneXl5eSddLCBZRUFSKTtcbiAgICBhZGRQYXJzZVRva2VuKFsneW8nXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB2YXIgbWF0Y2g7XG4gICAgICAgIGlmIChjb25maWcuX2xvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCkge1xuICAgICAgICAgICAgbWF0Y2ggPSBpbnB1dC5tYXRjaChjb25maWcuX2xvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLl9sb2NhbGUuZXJhWWVhck9yZGluYWxQYXJzZSkge1xuICAgICAgICAgICAgYXJyYXlbWUVBUl0gPSBjb25maWcuX2xvY2FsZS5lcmFZZWFyT3JkaW5hbFBhcnNlKGlucHV0LCBtYXRjaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhcnJheVtZRUFSXSA9IHBhcnNlSW50KGlucHV0LCAxMCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZUVyYXMobSwgZm9ybWF0KSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5fZXJhcyB8fCBnZXRMb2NhbGUoJ2VuJykuX2VyYXM7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgICAgICAgICAgZGF0ZSA9IGhvb2tzKGVyYXNbaV0uc2luY2UpLnN0YXJ0T2YoJ2RheScpO1xuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLnNpbmNlID0gZGF0ZS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS51bnRpbCA9ICtJbmZpbml0eTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgICAgICAgICBkYXRlID0gaG9va3MoZXJhc1tpXS51bnRpbCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLnVudGlsID0gZGF0ZS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcmFzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZUVyYXNQYXJzZShlcmFOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5lcmFzKCksXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgYWJicixcbiAgICAgICAgICAgIG5hcnJvdztcbiAgICAgICAgZXJhTmFtZSA9IGVyYU5hbWUudG9VcHBlckNhc2UoKTtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIG5hbWUgPSBlcmFzW2ldLm5hbWUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIGFiYnIgPSBlcmFzW2ldLmFiYnIudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIG5hcnJvdyA9IGVyYXNbaV0ubmFycm93LnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdOJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTk4nOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdOTk4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFiYnIgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OTk4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OTk5OJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYXJyb3cgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoW25hbWUsIGFiYnIsIG5hcnJvd10uaW5kZXhPZihlcmFOYW1lKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVFcmFzQ29udmVydFllYXIoZXJhLCB5ZWFyKSB7XG4gICAgICAgIHZhciBkaXIgPSBlcmEuc2luY2UgPD0gZXJhLnVudGlsID8gKzEgOiAtMTtcbiAgICAgICAgaWYgKHllYXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGhvb2tzKGVyYS5zaW5jZSkueWVhcigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGhvb2tzKGVyYS5zaW5jZSkueWVhcigpICsgKHllYXIgLSBlcmEub2Zmc2V0KSAqIGRpcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYU5hbWUoKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKGVyYXNbaV0uc2luY2UgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0ubmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RXJhTmFycm93KCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hcnJvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hcnJvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRFcmFBYmJyKCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLmFiYnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5hYmJyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYVllYXIoKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGRpcixcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgZGlyID0gZXJhc1tpXS5zaW5jZSA8PSBlcmFzW2ldLnVudGlsID8gKzEgOiAtMTtcblxuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkgfHxcbiAgICAgICAgICAgICAgICAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAodGhpcy55ZWFyKCkgLSBob29rcyhlcmFzW2ldLnNpbmNlKS55ZWFyKCkpICogZGlyICtcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS5vZmZzZXRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMueWVhcigpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVyYXNOYW1lUmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfZXJhc05hbWVSZWdleCcpKSB7XG4gICAgICAgICAgICBjb21wdXRlRXJhc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0ID8gdGhpcy5fZXJhc05hbWVSZWdleCA6IHRoaXMuX2VyYXNSZWdleDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlcmFzQWJiclJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX2VyYXNBYmJyUmVnZXgnKSkge1xuICAgICAgICAgICAgY29tcHV0ZUVyYXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1N0cmljdCA/IHRoaXMuX2VyYXNBYmJyUmVnZXggOiB0aGlzLl9lcmFzUmVnZXg7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXJhc05hcnJvd1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX2VyYXNOYXJyb3dSZWdleCcpKSB7XG4gICAgICAgICAgICBjb21wdXRlRXJhc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0ID8gdGhpcy5fZXJhc05hcnJvd1JlZ2V4IDogdGhpcy5fZXJhc1JlZ2V4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hdGNoRXJhQWJicihpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZXJhc0FiYnJSZWdleChpc1N0cmljdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF0Y2hFcmFOYW1lKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5lcmFzTmFtZVJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYU5hcnJvdyhpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZXJhc05hcnJvd1JlZ2V4KGlzU3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYVllYXJPcmRpbmFsKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCB8fCBtYXRjaFVuc2lnbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVFcmFzUGFyc2UoKSB7XG4gICAgICAgIHZhciBhYmJyUGllY2VzID0gW10sXG4gICAgICAgICAgICBuYW1lUGllY2VzID0gW10sXG4gICAgICAgICAgICBuYXJyb3dQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmVyYXMoKTtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIG5hbWVQaWVjZXMucHVzaChyZWdleEVzY2FwZShlcmFzW2ldLm5hbWUpKTtcbiAgICAgICAgICAgIGFiYnJQaWVjZXMucHVzaChyZWdleEVzY2FwZShlcmFzW2ldLmFiYnIpKTtcbiAgICAgICAgICAgIG5hcnJvd1BpZWNlcy5wdXNoKHJlZ2V4RXNjYXBlKGVyYXNbaV0ubmFycm93KSk7XG5cbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2gocmVnZXhFc2NhcGUoZXJhc1tpXS5uYW1lKSk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKHJlZ2V4RXNjYXBlKGVyYXNbaV0uYWJicikpO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChyZWdleEVzY2FwZShlcmFzW2ldLm5hcnJvdykpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZXJhc1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9lcmFzTmFtZVJlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbmFtZVBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX2VyYXNBYmJyUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBhYmJyUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fZXJhc05hcnJvd1JlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBuYXJyb3dQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydnZycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndlZWtZZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ0dHJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNvV2Vla1llYXIoKSAlIDEwMDtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4odG9rZW4sIGdldHRlcikge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbigwLCBbdG9rZW4sIHRva2VuLmxlbmd0aF0sIDAsIGdldHRlcik7XG4gICAgfVxuXG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignZ2dnZycsICd3ZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ2dnZ2dnJywgJ3dlZWtZZWFyJyk7XG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignR0dHRycsICdpc29XZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ0dHR0dHJywgJ2lzb1dlZWtZZWFyJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ3dlZWtZZWFyJywgJ2dnJyk7XG4gICAgYWRkVW5pdEFsaWFzKCdpc29XZWVrWWVhcicsICdHRycpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgnd2Vla1llYXInLCAxKTtcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2lzb1dlZWtZZWFyJywgMSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdHJywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2cnLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignR0cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignZ2cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignR0dHRycsIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdnZ2dnJywgbWF0Y2gxdG80LCBtYXRjaDQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0dHR0dHJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2dnZ2dnJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydnZ2dnJywgJ2dnZ2dnJywgJ0dHR0cnLCAnR0dHR0cnXSwgZnVuY3Rpb24gKFxuICAgICAgICBpbnB1dCxcbiAgICAgICAgd2VlayxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICB0b2tlblxuICAgICkge1xuICAgICAgICB3ZWVrW3Rva2VuLnN1YnN0cigwLCAyKV0gPSB0b0ludChpbnB1dCk7XG4gICAgfSk7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ2dnJywgJ0dHJ10sIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB3ZWVrW3Rva2VuXSA9IGhvb2tzLnBhcnNlVHdvRGlnaXRZZWFyKGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldFdlZWtZZWFyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBnZXRTZXRXZWVrWWVhckhlbHBlci5jYWxsKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgdGhpcy53ZWVrKCksXG4gICAgICAgICAgICB0aGlzLndlZWtkYXkoKSxcbiAgICAgICAgICAgIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdyxcbiAgICAgICAgICAgIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRveVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldElTT1dlZWtZZWFyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBnZXRTZXRXZWVrWWVhckhlbHBlci5jYWxsKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgdGhpcy5pc29XZWVrKCksXG4gICAgICAgICAgICB0aGlzLmlzb1dlZWtkYXkoKSxcbiAgICAgICAgICAgIDEsXG4gICAgICAgICAgICA0XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0SVNPV2Vla3NJblllYXIoKSB7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLnllYXIoKSwgMSwgNCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0SVNPV2Vla3NJbklTT1dlZWtZZWFyKCkge1xuICAgICAgICByZXR1cm4gd2Vla3NJblllYXIodGhpcy5pc29XZWVrWWVhcigpLCAxLCA0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRXZWVrc0luWWVhcigpIHtcbiAgICAgICAgdmFyIHdlZWtJbmZvID0gdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWs7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLnllYXIoKSwgd2Vla0luZm8uZG93LCB3ZWVrSW5mby5kb3kpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFdlZWtzSW5XZWVrWWVhcigpIHtcbiAgICAgICAgdmFyIHdlZWtJbmZvID0gdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWs7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLndlZWtZZWFyKCksIHdlZWtJbmZvLmRvdywgd2Vla0luZm8uZG95KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRXZWVrWWVhckhlbHBlcihpbnB1dCwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIHdlZWtzVGFyZ2V0O1xuICAgICAgICBpZiAoaW5wdXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHdlZWtPZlllYXIodGhpcywgZG93LCBkb3kpLnllYXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3ZWVrc1RhcmdldCA9IHdlZWtzSW5ZZWFyKGlucHV0LCBkb3csIGRveSk7XG4gICAgICAgICAgICBpZiAod2VlayA+IHdlZWtzVGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgd2VlayA9IHdlZWtzVGFyZ2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNldFdlZWtBbGwuY2FsbCh0aGlzLCBpbnB1dCwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0V2Vla0FsbCh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIGRheU9mWWVhckRhdGEgPSBkYXlPZlllYXJGcm9tV2Vla3Mod2Vla1llYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KSxcbiAgICAgICAgICAgIGRhdGUgPSBjcmVhdGVVVENEYXRlKGRheU9mWWVhckRhdGEueWVhciwgMCwgZGF5T2ZZZWFyRGF0YS5kYXlPZlllYXIpO1xuXG4gICAgICAgIHRoaXMueWVhcihkYXRlLmdldFVUQ0Z1bGxZZWFyKCkpO1xuICAgICAgICB0aGlzLm1vbnRoKGRhdGUuZ2V0VVRDTW9udGgoKSk7XG4gICAgICAgIHRoaXMuZGF0ZShkYXRlLmdldFVUQ0RhdGUoKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdRJywgMCwgJ1FvJywgJ3F1YXJ0ZXInKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygncXVhcnRlcicsICdRJyk7XG5cbiAgICAvLyBQUklPUklUWVxuXG4gICAgYWRkVW5pdFByaW9yaXR5KCdxdWFydGVyJywgNyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdRJywgbWF0Y2gxKTtcbiAgICBhZGRQYXJzZVRva2VuKCdRJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtNT05USF0gPSAodG9JbnQoaW5wdXQpIC0gMSkgKiAzO1xuICAgIH0pO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0UXVhcnRlcihpbnB1dCkge1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbFxuICAgICAgICAgICAgPyBNYXRoLmNlaWwoKHRoaXMubW9udGgoKSArIDEpIC8gMylcbiAgICAgICAgICAgIDogdGhpcy5tb250aCgoaW5wdXQgLSAxKSAqIDMgKyAodGhpcy5tb250aCgpICUgMykpO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdEJywgWydERCcsIDJdLCAnRG8nLCAnZGF0ZScpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdkYXRlJywgJ0QnKTtcblxuICAgIC8vIFBSSU9SSVRZXG4gICAgYWRkVW5pdFByaW9yaXR5KCdkYXRlJywgOSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdEJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdERCcsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdEbycsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIC8vIFRPRE86IFJlbW92ZSBcIm9yZGluYWxQYXJzZVwiIGZhbGxiYWNrIGluIG5leHQgbWFqb3IgcmVsZWFzZS5cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0XG4gICAgICAgICAgICA/IGxvY2FsZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZSB8fCBsb2NhbGUuX29yZGluYWxQYXJzZVxuICAgICAgICAgICAgOiBsb2NhbGUuX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50O1xuICAgIH0pO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ0QnLCAnREQnXSwgREFURSk7XG4gICAgYWRkUGFyc2VUb2tlbignRG8nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W0RBVEVdID0gdG9JbnQoaW5wdXQubWF0Y2gobWF0Y2gxdG8yKVswXSk7XG4gICAgfSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0RGF5T2ZNb250aCA9IG1ha2VHZXRTZXQoJ0RhdGUnLCB0cnVlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdEREQnLCBbJ0REREQnLCAzXSwgJ0RERG8nLCAnZGF5T2ZZZWFyJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ2RheU9mWWVhcicsICdEREQnKTtcblxuICAgIC8vIFBSSU9SSVRZXG4gICAgYWRkVW5pdFByaW9yaXR5KCdkYXlPZlllYXInLCA0KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0RERCcsIG1hdGNoMXRvMyk7XG4gICAgYWRkUmVnZXhUb2tlbignRERERCcsIG1hdGNoMyk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ0RERCcsICdEREREJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2RheU9mWWVhciA9IHRvSW50KGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldERheU9mWWVhcihpbnB1dCkge1xuICAgICAgICB2YXIgZGF5T2ZZZWFyID1cbiAgICAgICAgICAgIE1hdGgucm91bmQoXG4gICAgICAgICAgICAgICAgKHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKSAtIHRoaXMuY2xvbmUoKS5zdGFydE9mKCd5ZWFyJykpIC8gODY0ZTVcbiAgICAgICAgICAgICkgKyAxO1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IGRheU9mWWVhciA6IHRoaXMuYWRkKGlucHV0IC0gZGF5T2ZZZWFyLCAnZCcpO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdtJywgWydtbScsIDJdLCAwLCAnbWludXRlJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ21pbnV0ZScsICdtJyk7XG5cbiAgICAvLyBQUklPUklUWVxuXG4gICAgYWRkVW5pdFByaW9yaXR5KCdtaW51dGUnLCAxNCk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdtJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdtbScsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRQYXJzZVRva2VuKFsnbScsICdtbSddLCBNSU5VVEUpO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldE1pbnV0ZSA9IG1ha2VHZXRTZXQoJ01pbnV0ZXMnLCBmYWxzZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigncycsIFsnc3MnLCAyXSwgMCwgJ3NlY29uZCcpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdzZWNvbmQnLCAncycpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgnc2Vjb25kJywgMTUpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbigncycsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignc3MnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ3MnLCAnc3MnXSwgU0VDT05EKTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXRTZWNvbmQgPSBtYWtlR2V0U2V0KCdTZWNvbmRzJywgZmFsc2UpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB+fih0aGlzLm1pbGxpc2Vjb25kKCkgLyAxMDApO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTUycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB+fih0aGlzLm1pbGxpc2Vjb25kKCkgLyAxMCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTUycsIDNdLCAwLCAnbWlsbGlzZWNvbmQnKTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1MnLCA0XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTUycsIDVdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1MnLCA2XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTU1MnLCA3XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTUycsIDhdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTU1MnLCA5XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDAwMDtcbiAgICB9KTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnbWlsbGlzZWNvbmQnLCAnbXMnKTtcblxuICAgIC8vIFBSSU9SSVRZXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ21pbGxpc2Vjb25kJywgMTYpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignUycsIG1hdGNoMXRvMywgbWF0Y2gxKTtcbiAgICBhZGRSZWdleFRva2VuKCdTUycsIG1hdGNoMXRvMywgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdTU1MnLCBtYXRjaDF0bzMsIG1hdGNoMyk7XG5cbiAgICB2YXIgdG9rZW4sIGdldFNldE1pbGxpc2Vjb25kO1xuICAgIGZvciAodG9rZW4gPSAnU1NTUyc7IHRva2VuLmxlbmd0aCA8PSA5OyB0b2tlbiArPSAnUycpIHtcbiAgICAgICAgYWRkUmVnZXhUb2tlbih0b2tlbiwgbWF0Y2hVbnNpZ25lZCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VNcyhpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbTUlMTElTRUNPTkRdID0gdG9JbnQoKCcwLicgKyBpbnB1dCkgKiAxMDAwKTtcbiAgICB9XG5cbiAgICBmb3IgKHRva2VuID0gJ1MnOyB0b2tlbi5sZW5ndGggPD0gOTsgdG9rZW4gKz0gJ1MnKSB7XG4gICAgICAgIGFkZFBhcnNlVG9rZW4odG9rZW4sIHBhcnNlTXMpO1xuICAgIH1cblxuICAgIGdldFNldE1pbGxpc2Vjb25kID0gbWFrZUdldFNldCgnTWlsbGlzZWNvbmRzJywgZmFsc2UpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3onLCAwLCAwLCAnem9uZUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignenonLCAwLCAwLCAnem9uZU5hbWUnKTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFpvbmVBYmJyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNVVEMgPyAnVVRDJyA6ICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFpvbmVOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNVVEMgPyAnQ29vcmRpbmF0ZWQgVW5pdmVyc2FsIFRpbWUnIDogJyc7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvID0gTW9tZW50LnByb3RvdHlwZTtcblxuICAgIHByb3RvLmFkZCA9IGFkZDtcbiAgICBwcm90by5jYWxlbmRhciA9IGNhbGVuZGFyJDE7XG4gICAgcHJvdG8uY2xvbmUgPSBjbG9uZTtcbiAgICBwcm90by5kaWZmID0gZGlmZjtcbiAgICBwcm90by5lbmRPZiA9IGVuZE9mO1xuICAgIHByb3RvLmZvcm1hdCA9IGZvcm1hdDtcbiAgICBwcm90by5mcm9tID0gZnJvbTtcbiAgICBwcm90by5mcm9tTm93ID0gZnJvbU5vdztcbiAgICBwcm90by50byA9IHRvO1xuICAgIHByb3RvLnRvTm93ID0gdG9Ob3c7XG4gICAgcHJvdG8uZ2V0ID0gc3RyaW5nR2V0O1xuICAgIHByb3RvLmludmFsaWRBdCA9IGludmFsaWRBdDtcbiAgICBwcm90by5pc0FmdGVyID0gaXNBZnRlcjtcbiAgICBwcm90by5pc0JlZm9yZSA9IGlzQmVmb3JlO1xuICAgIHByb3RvLmlzQmV0d2VlbiA9IGlzQmV0d2VlbjtcbiAgICBwcm90by5pc1NhbWUgPSBpc1NhbWU7XG4gICAgcHJvdG8uaXNTYW1lT3JBZnRlciA9IGlzU2FtZU9yQWZ0ZXI7XG4gICAgcHJvdG8uaXNTYW1lT3JCZWZvcmUgPSBpc1NhbWVPckJlZm9yZTtcbiAgICBwcm90by5pc1ZhbGlkID0gaXNWYWxpZCQyO1xuICAgIHByb3RvLmxhbmcgPSBsYW5nO1xuICAgIHByb3RvLmxvY2FsZSA9IGxvY2FsZTtcbiAgICBwcm90by5sb2NhbGVEYXRhID0gbG9jYWxlRGF0YTtcbiAgICBwcm90by5tYXggPSBwcm90b3R5cGVNYXg7XG4gICAgcHJvdG8ubWluID0gcHJvdG90eXBlTWluO1xuICAgIHByb3RvLnBhcnNpbmdGbGFncyA9IHBhcnNpbmdGbGFncztcbiAgICBwcm90by5zZXQgPSBzdHJpbmdTZXQ7XG4gICAgcHJvdG8uc3RhcnRPZiA9IHN0YXJ0T2Y7XG4gICAgcHJvdG8uc3VidHJhY3QgPSBzdWJ0cmFjdDtcbiAgICBwcm90by50b0FycmF5ID0gdG9BcnJheTtcbiAgICBwcm90by50b09iamVjdCA9IHRvT2JqZWN0O1xuICAgIHByb3RvLnRvRGF0ZSA9IHRvRGF0ZTtcbiAgICBwcm90by50b0lTT1N0cmluZyA9IHRvSVNPU3RyaW5nO1xuICAgIHByb3RvLmluc3BlY3QgPSBpbnNwZWN0O1xuICAgIGlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wuZm9yICE9IG51bGwpIHtcbiAgICAgICAgcHJvdG9bU3ltYm9sLmZvcignbm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20nKV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gJ01vbWVudDwnICsgdGhpcy5mb3JtYXQoKSArICc+JztcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcHJvdG8udG9KU09OID0gdG9KU09OO1xuICAgIHByb3RvLnRvU3RyaW5nID0gdG9TdHJpbmc7XG4gICAgcHJvdG8udW5peCA9IHVuaXg7XG4gICAgcHJvdG8udmFsdWVPZiA9IHZhbHVlT2Y7XG4gICAgcHJvdG8uY3JlYXRpb25EYXRhID0gY3JlYXRpb25EYXRhO1xuICAgIHByb3RvLmVyYU5hbWUgPSBnZXRFcmFOYW1lO1xuICAgIHByb3RvLmVyYU5hcnJvdyA9IGdldEVyYU5hcnJvdztcbiAgICBwcm90by5lcmFBYmJyID0gZ2V0RXJhQWJicjtcbiAgICBwcm90by5lcmFZZWFyID0gZ2V0RXJhWWVhcjtcbiAgICBwcm90by55ZWFyID0gZ2V0U2V0WWVhcjtcbiAgICBwcm90by5pc0xlYXBZZWFyID0gZ2V0SXNMZWFwWWVhcjtcbiAgICBwcm90by53ZWVrWWVhciA9IGdldFNldFdlZWtZZWFyO1xuICAgIHByb3RvLmlzb1dlZWtZZWFyID0gZ2V0U2V0SVNPV2Vla1llYXI7XG4gICAgcHJvdG8ucXVhcnRlciA9IHByb3RvLnF1YXJ0ZXJzID0gZ2V0U2V0UXVhcnRlcjtcbiAgICBwcm90by5tb250aCA9IGdldFNldE1vbnRoO1xuICAgIHByb3RvLmRheXNJbk1vbnRoID0gZ2V0RGF5c0luTW9udGg7XG4gICAgcHJvdG8ud2VlayA9IHByb3RvLndlZWtzID0gZ2V0U2V0V2VlaztcbiAgICBwcm90by5pc29XZWVrID0gcHJvdG8uaXNvV2Vla3MgPSBnZXRTZXRJU09XZWVrO1xuICAgIHByb3RvLndlZWtzSW5ZZWFyID0gZ2V0V2Vla3NJblllYXI7XG4gICAgcHJvdG8ud2Vla3NJbldlZWtZZWFyID0gZ2V0V2Vla3NJbldlZWtZZWFyO1xuICAgIHByb3RvLmlzb1dlZWtzSW5ZZWFyID0gZ2V0SVNPV2Vla3NJblllYXI7XG4gICAgcHJvdG8uaXNvV2Vla3NJbklTT1dlZWtZZWFyID0gZ2V0SVNPV2Vla3NJbklTT1dlZWtZZWFyO1xuICAgIHByb3RvLmRhdGUgPSBnZXRTZXREYXlPZk1vbnRoO1xuICAgIHByb3RvLmRheSA9IHByb3RvLmRheXMgPSBnZXRTZXREYXlPZldlZWs7XG4gICAgcHJvdG8ud2Vla2RheSA9IGdldFNldExvY2FsZURheU9mV2VlaztcbiAgICBwcm90by5pc29XZWVrZGF5ID0gZ2V0U2V0SVNPRGF5T2ZXZWVrO1xuICAgIHByb3RvLmRheU9mWWVhciA9IGdldFNldERheU9mWWVhcjtcbiAgICBwcm90by5ob3VyID0gcHJvdG8uaG91cnMgPSBnZXRTZXRIb3VyO1xuICAgIHByb3RvLm1pbnV0ZSA9IHByb3RvLm1pbnV0ZXMgPSBnZXRTZXRNaW51dGU7XG4gICAgcHJvdG8uc2Vjb25kID0gcHJvdG8uc2Vjb25kcyA9IGdldFNldFNlY29uZDtcbiAgICBwcm90by5taWxsaXNlY29uZCA9IHByb3RvLm1pbGxpc2Vjb25kcyA9IGdldFNldE1pbGxpc2Vjb25kO1xuICAgIHByb3RvLnV0Y09mZnNldCA9IGdldFNldE9mZnNldDtcbiAgICBwcm90by51dGMgPSBzZXRPZmZzZXRUb1VUQztcbiAgICBwcm90by5sb2NhbCA9IHNldE9mZnNldFRvTG9jYWw7XG4gICAgcHJvdG8ucGFyc2Vab25lID0gc2V0T2Zmc2V0VG9QYXJzZWRPZmZzZXQ7XG4gICAgcHJvdG8uaGFzQWxpZ25lZEhvdXJPZmZzZXQgPSBoYXNBbGlnbmVkSG91ck9mZnNldDtcbiAgICBwcm90by5pc0RTVCA9IGlzRGF5bGlnaHRTYXZpbmdUaW1lO1xuICAgIHByb3RvLmlzTG9jYWwgPSBpc0xvY2FsO1xuICAgIHByb3RvLmlzVXRjT2Zmc2V0ID0gaXNVdGNPZmZzZXQ7XG4gICAgcHJvdG8uaXNVdGMgPSBpc1V0YztcbiAgICBwcm90by5pc1VUQyA9IGlzVXRjO1xuICAgIHByb3RvLnpvbmVBYmJyID0gZ2V0Wm9uZUFiYnI7XG4gICAgcHJvdG8uem9uZU5hbWUgPSBnZXRab25lTmFtZTtcbiAgICBwcm90by5kYXRlcyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ2RhdGVzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSBkYXRlIGluc3RlYWQuJyxcbiAgICAgICAgZ2V0U2V0RGF5T2ZNb250aFxuICAgICk7XG4gICAgcHJvdG8ubW9udGhzID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9udGhzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb250aCBpbnN0ZWFkJyxcbiAgICAgICAgZ2V0U2V0TW9udGhcbiAgICApO1xuICAgIHByb3RvLnllYXJzID0gZGVwcmVjYXRlKFxuICAgICAgICAneWVhcnMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIHllYXIgaW5zdGVhZCcsXG4gICAgICAgIGdldFNldFllYXJcbiAgICApO1xuICAgIHByb3RvLnpvbmUgPSBkZXByZWNhdGUoXG4gICAgICAgICdtb21lbnQoKS56b25lIGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQoKS51dGNPZmZzZXQgaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy96b25lLycsXG4gICAgICAgIGdldFNldFpvbmVcbiAgICApO1xuICAgIHByb3RvLmlzRFNUU2hpZnRlZCA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ2lzRFNUU2hpZnRlZCBpcyBkZXByZWNhdGVkLiBTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9kc3Qtc2hpZnRlZC8gZm9yIG1vcmUgaW5mb3JtYXRpb24nLFxuICAgICAgICBpc0RheWxpZ2h0U2F2aW5nVGltZVNoaWZ0ZWRcbiAgICApO1xuXG4gICAgZnVuY3Rpb24gY3JlYXRlVW5peChpbnB1dCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWwoaW5wdXQgKiAxMDAwKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJblpvbmUoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbC5hcHBseShudWxsLCBhcmd1bWVudHMpLnBhcnNlWm9uZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByZVBhcnNlUG9zdEZvcm1hdChzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICB9XG5cbiAgICB2YXIgcHJvdG8kMSA9IExvY2FsZS5wcm90b3R5cGU7XG5cbiAgICBwcm90byQxLmNhbGVuZGFyID0gY2FsZW5kYXI7XG4gICAgcHJvdG8kMS5sb25nRGF0ZUZvcm1hdCA9IGxvbmdEYXRlRm9ybWF0O1xuICAgIHByb3RvJDEuaW52YWxpZERhdGUgPSBpbnZhbGlkRGF0ZTtcbiAgICBwcm90byQxLm9yZGluYWwgPSBvcmRpbmFsO1xuICAgIHByb3RvJDEucHJlcGFyc2UgPSBwcmVQYXJzZVBvc3RGb3JtYXQ7XG4gICAgcHJvdG8kMS5wb3N0Zm9ybWF0ID0gcHJlUGFyc2VQb3N0Rm9ybWF0O1xuICAgIHByb3RvJDEucmVsYXRpdmVUaW1lID0gcmVsYXRpdmVUaW1lO1xuICAgIHByb3RvJDEucGFzdEZ1dHVyZSA9IHBhc3RGdXR1cmU7XG4gICAgcHJvdG8kMS5zZXQgPSBzZXQ7XG4gICAgcHJvdG8kMS5lcmFzID0gbG9jYWxlRXJhcztcbiAgICBwcm90byQxLmVyYXNQYXJzZSA9IGxvY2FsZUVyYXNQYXJzZTtcbiAgICBwcm90byQxLmVyYXNDb252ZXJ0WWVhciA9IGxvY2FsZUVyYXNDb252ZXJ0WWVhcjtcbiAgICBwcm90byQxLmVyYXNBYmJyUmVnZXggPSBlcmFzQWJiclJlZ2V4O1xuICAgIHByb3RvJDEuZXJhc05hbWVSZWdleCA9IGVyYXNOYW1lUmVnZXg7XG4gICAgcHJvdG8kMS5lcmFzTmFycm93UmVnZXggPSBlcmFzTmFycm93UmVnZXg7XG5cbiAgICBwcm90byQxLm1vbnRocyA9IGxvY2FsZU1vbnRocztcbiAgICBwcm90byQxLm1vbnRoc1Nob3J0ID0gbG9jYWxlTW9udGhzU2hvcnQ7XG4gICAgcHJvdG8kMS5tb250aHNQYXJzZSA9IGxvY2FsZU1vbnRoc1BhcnNlO1xuICAgIHByb3RvJDEubW9udGhzUmVnZXggPSBtb250aHNSZWdleDtcbiAgICBwcm90byQxLm1vbnRoc1Nob3J0UmVnZXggPSBtb250aHNTaG9ydFJlZ2V4O1xuICAgIHByb3RvJDEud2VlayA9IGxvY2FsZVdlZWs7XG4gICAgcHJvdG8kMS5maXJzdERheU9mWWVhciA9IGxvY2FsZUZpcnN0RGF5T2ZZZWFyO1xuICAgIHByb3RvJDEuZmlyc3REYXlPZldlZWsgPSBsb2NhbGVGaXJzdERheU9mV2VlaztcblxuICAgIHByb3RvJDEud2Vla2RheXMgPSBsb2NhbGVXZWVrZGF5cztcbiAgICBwcm90byQxLndlZWtkYXlzTWluID0gbG9jYWxlV2Vla2RheXNNaW47XG4gICAgcHJvdG8kMS53ZWVrZGF5c1Nob3J0ID0gbG9jYWxlV2Vla2RheXNTaG9ydDtcbiAgICBwcm90byQxLndlZWtkYXlzUGFyc2UgPSBsb2NhbGVXZWVrZGF5c1BhcnNlO1xuXG4gICAgcHJvdG8kMS53ZWVrZGF5c1JlZ2V4ID0gd2Vla2RheXNSZWdleDtcbiAgICBwcm90byQxLndlZWtkYXlzU2hvcnRSZWdleCA9IHdlZWtkYXlzU2hvcnRSZWdleDtcbiAgICBwcm90byQxLndlZWtkYXlzTWluUmVnZXggPSB3ZWVrZGF5c01pblJlZ2V4O1xuXG4gICAgcHJvdG8kMS5pc1BNID0gbG9jYWxlSXNQTTtcbiAgICBwcm90byQxLm1lcmlkaWVtID0gbG9jYWxlTWVyaWRpZW07XG5cbiAgICBmdW5jdGlvbiBnZXQkMShmb3JtYXQsIGluZGV4LCBmaWVsZCwgc2V0dGVyKSB7XG4gICAgICAgIHZhciBsb2NhbGUgPSBnZXRMb2NhbGUoKSxcbiAgICAgICAgICAgIHV0YyA9IGNyZWF0ZVVUQygpLnNldChzZXR0ZXIsIGluZGV4KTtcbiAgICAgICAgcmV0dXJuIGxvY2FsZVtmaWVsZF0odXRjLCBmb3JtYXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RNb250aHNJbXBsKGZvcm1hdCwgaW5kZXgsIGZpZWxkKSB7XG4gICAgICAgIGlmIChpc051bWJlcihmb3JtYXQpKSB7XG4gICAgICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcm1hdCA9IGZvcm1hdCB8fCAnJztcblxuICAgICAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldCQxKGZvcm1hdCwgaW5kZXgsIGZpZWxkLCAnbW9udGgnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgb3V0ID0gW107XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICBvdXRbaV0gPSBnZXQkMShmb3JtYXQsIGksIGZpZWxkLCAnbW9udGgnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH1cblxuICAgIC8vICgpXG4gICAgLy8gKDUpXG4gICAgLy8gKGZtdCwgNSlcbiAgICAvLyAoZm10KVxuICAgIC8vICh0cnVlKVxuICAgIC8vICh0cnVlLCA1KVxuICAgIC8vICh0cnVlLCBmbXQsIDUpXG4gICAgLy8gKHRydWUsIGZtdClcbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgZmllbGQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBsb2NhbGVTb3J0ZWQgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgaWYgKGlzTnVtYmVyKGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdCB8fCAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvcm1hdCA9IGxvY2FsZVNvcnRlZDtcbiAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgbG9jYWxlU29ydGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChpc051bWJlcihmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbG9jYWxlID0gZ2V0TG9jYWxlKCksXG4gICAgICAgICAgICBzaGlmdCA9IGxvY2FsZVNvcnRlZCA/IGxvY2FsZS5fd2Vlay5kb3cgOiAwLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIG91dCA9IFtdO1xuXG4gICAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0JDEoZm9ybWF0LCAoaW5kZXggKyBzaGlmdCkgJSA3LCBmaWVsZCwgJ2RheScpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgb3V0W2ldID0gZ2V0JDEoZm9ybWF0LCAoaSArIHNoaWZ0KSAlIDcsIGZpZWxkLCAnZGF5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TW9udGhzKGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RNb250aHNJbXBsKGZvcm1hdCwgaW5kZXgsICdtb250aHMnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TW9udGhzU2hvcnQoZm9ybWF0LCBpbmRleCkge1xuICAgICAgICByZXR1cm4gbGlzdE1vbnRoc0ltcGwoZm9ybWF0LCBpbmRleCwgJ21vbnRoc1Nob3J0Jyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCkge1xuICAgICAgICByZXR1cm4gbGlzdFdlZWtkYXlzSW1wbChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgsICd3ZWVrZGF5cycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5c1Nob3J0KGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCkge1xuICAgICAgICByZXR1cm4gbGlzdFdlZWtkYXlzSW1wbChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgsICd3ZWVrZGF5c1Nob3J0Jyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzTWluKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCkge1xuICAgICAgICByZXR1cm4gbGlzdFdlZWtkYXlzSW1wbChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgsICd3ZWVrZGF5c01pbicpO1xuICAgIH1cblxuICAgIGdldFNldEdsb2JhbExvY2FsZSgnZW4nLCB7XG4gICAgICAgIGVyYXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzaW5jZTogJzAwMDEtMDEtMDEnLFxuICAgICAgICAgICAgICAgIHVudGlsOiArSW5maW5pdHksXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiAxLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdBbm5vIERvbWluaScsXG4gICAgICAgICAgICAgICAgbmFycm93OiAnQUQnLFxuICAgICAgICAgICAgICAgIGFiYnI6ICdBRCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNpbmNlOiAnMDAwMC0xMi0zMScsXG4gICAgICAgICAgICAgICAgdW50aWw6IC1JbmZpbml0eSxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IDEsXG4gICAgICAgICAgICAgICAgbmFtZTogJ0JlZm9yZSBDaHJpc3QnLFxuICAgICAgICAgICAgICAgIG5hcnJvdzogJ0JDJyxcbiAgICAgICAgICAgICAgICBhYmJyOiAnQkMnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHRofHN0fG5kfHJkKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgb3V0cHV0ID1cbiAgICAgICAgICAgICAgICAgICAgdG9JbnQoKG51bWJlciAlIDEwMCkgLyAxMCkgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3RoJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdzdCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMlxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmQnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3JkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiAndGgnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIFNpZGUgZWZmZWN0IGltcG9ydHNcblxuICAgIGhvb2tzLmxhbmcgPSBkZXByZWNhdGUoXG4gICAgICAgICdtb21lbnQubGFuZyBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZSBpbnN0ZWFkLicsXG4gICAgICAgIGdldFNldEdsb2JhbExvY2FsZVxuICAgICk7XG4gICAgaG9va3MubGFuZ0RhdGEgPSBkZXByZWNhdGUoXG4gICAgICAgICdtb21lbnQubGFuZ0RhdGEgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbWVudC5sb2NhbGVEYXRhIGluc3RlYWQuJyxcbiAgICAgICAgZ2V0TG9jYWxlXG4gICAgKTtcblxuICAgIHZhciBtYXRoQWJzID0gTWF0aC5hYnM7XG5cbiAgICBmdW5jdGlvbiBhYnMoKSB7XG4gICAgICAgIHZhciBkYXRhID0gdGhpcy5fZGF0YTtcblxuICAgICAgICB0aGlzLl9taWxsaXNlY29uZHMgPSBtYXRoQWJzKHRoaXMuX21pbGxpc2Vjb25kcyk7XG4gICAgICAgIHRoaXMuX2RheXMgPSBtYXRoQWJzKHRoaXMuX2RheXMpO1xuICAgICAgICB0aGlzLl9tb250aHMgPSBtYXRoQWJzKHRoaXMuX21vbnRocyk7XG5cbiAgICAgICAgZGF0YS5taWxsaXNlY29uZHMgPSBtYXRoQWJzKGRhdGEubWlsbGlzZWNvbmRzKTtcbiAgICAgICAgZGF0YS5zZWNvbmRzID0gbWF0aEFicyhkYXRhLnNlY29uZHMpO1xuICAgICAgICBkYXRhLm1pbnV0ZXMgPSBtYXRoQWJzKGRhdGEubWludXRlcyk7XG4gICAgICAgIGRhdGEuaG91cnMgPSBtYXRoQWJzKGRhdGEuaG91cnMpO1xuICAgICAgICBkYXRhLm1vbnRocyA9IG1hdGhBYnMoZGF0YS5tb250aHMpO1xuICAgICAgICBkYXRhLnllYXJzID0gbWF0aEFicyhkYXRhLnllYXJzKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRTdWJ0cmFjdCQxKGR1cmF0aW9uLCBpbnB1dCwgdmFsdWUsIGRpcmVjdGlvbikge1xuICAgICAgICB2YXIgb3RoZXIgPSBjcmVhdGVEdXJhdGlvbihpbnB1dCwgdmFsdWUpO1xuXG4gICAgICAgIGR1cmF0aW9uLl9taWxsaXNlY29uZHMgKz0gZGlyZWN0aW9uICogb3RoZXIuX21pbGxpc2Vjb25kcztcbiAgICAgICAgZHVyYXRpb24uX2RheXMgKz0gZGlyZWN0aW9uICogb3RoZXIuX2RheXM7XG4gICAgICAgIGR1cmF0aW9uLl9tb250aHMgKz0gZGlyZWN0aW9uICogb3RoZXIuX21vbnRocztcblxuICAgICAgICByZXR1cm4gZHVyYXRpb24uX2J1YmJsZSgpO1xuICAgIH1cblxuICAgIC8vIHN1cHBvcnRzIG9ubHkgMi4wLXN0eWxlIGFkZCgxLCAncycpIG9yIGFkZChkdXJhdGlvbilcbiAgICBmdW5jdGlvbiBhZGQkMShpbnB1dCwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGFkZFN1YnRyYWN0JDEodGhpcywgaW5wdXQsIHZhbHVlLCAxKTtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0cyBvbmx5IDIuMC1zdHlsZSBzdWJ0cmFjdCgxLCAncycpIG9yIHN1YnRyYWN0KGR1cmF0aW9uKVxuICAgIGZ1bmN0aW9uIHN1YnRyYWN0JDEoaW5wdXQsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBhZGRTdWJ0cmFjdCQxKHRoaXMsIGlucHV0LCB2YWx1ZSwgLTEpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFic0NlaWwobnVtYmVyKSB7XG4gICAgICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihudW1iZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguY2VpbChudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnViYmxlKCkge1xuICAgICAgICB2YXIgbWlsbGlzZWNvbmRzID0gdGhpcy5fbWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgZGF5cyA9IHRoaXMuX2RheXMsXG4gICAgICAgICAgICBtb250aHMgPSB0aGlzLl9tb250aHMsXG4gICAgICAgICAgICBkYXRhID0gdGhpcy5fZGF0YSxcbiAgICAgICAgICAgIHNlY29uZHMsXG4gICAgICAgICAgICBtaW51dGVzLFxuICAgICAgICAgICAgaG91cnMsXG4gICAgICAgICAgICB5ZWFycyxcbiAgICAgICAgICAgIG1vbnRoc0Zyb21EYXlzO1xuXG4gICAgICAgIC8vIGlmIHdlIGhhdmUgYSBtaXggb2YgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIHZhbHVlcywgYnViYmxlIGRvd24gZmlyc3RcbiAgICAgICAgLy8gY2hlY2s6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8yMTY2XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgKG1pbGxpc2Vjb25kcyA+PSAwICYmIGRheXMgPj0gMCAmJiBtb250aHMgPj0gMCkgfHxcbiAgICAgICAgICAgICAgICAobWlsbGlzZWNvbmRzIDw9IDAgJiYgZGF5cyA8PSAwICYmIG1vbnRocyA8PSAwKVxuICAgICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kcyArPSBhYnNDZWlsKG1vbnRoc1RvRGF5cyhtb250aHMpICsgZGF5cykgKiA4NjRlNTtcbiAgICAgICAgICAgIGRheXMgPSAwO1xuICAgICAgICAgICAgbW9udGhzID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgY29kZSBidWJibGVzIHVwIHZhbHVlcywgc2VlIHRoZSB0ZXN0cyBmb3JcbiAgICAgICAgLy8gZXhhbXBsZXMgb2Ygd2hhdCB0aGF0IG1lYW5zLlxuICAgICAgICBkYXRhLm1pbGxpc2Vjb25kcyA9IG1pbGxpc2Vjb25kcyAlIDEwMDA7XG5cbiAgICAgICAgc2Vjb25kcyA9IGFic0Zsb29yKG1pbGxpc2Vjb25kcyAvIDEwMDApO1xuICAgICAgICBkYXRhLnNlY29uZHMgPSBzZWNvbmRzICUgNjA7XG5cbiAgICAgICAgbWludXRlcyA9IGFic0Zsb29yKHNlY29uZHMgLyA2MCk7XG4gICAgICAgIGRhdGEubWludXRlcyA9IG1pbnV0ZXMgJSA2MDtcblxuICAgICAgICBob3VycyA9IGFic0Zsb29yKG1pbnV0ZXMgLyA2MCk7XG4gICAgICAgIGRhdGEuaG91cnMgPSBob3VycyAlIDI0O1xuXG4gICAgICAgIGRheXMgKz0gYWJzRmxvb3IoaG91cnMgLyAyNCk7XG5cbiAgICAgICAgLy8gY29udmVydCBkYXlzIHRvIG1vbnRoc1xuICAgICAgICBtb250aHNGcm9tRGF5cyA9IGFic0Zsb29yKGRheXNUb01vbnRocyhkYXlzKSk7XG4gICAgICAgIG1vbnRocyArPSBtb250aHNGcm9tRGF5cztcbiAgICAgICAgZGF5cyAtPSBhYnNDZWlsKG1vbnRoc1RvRGF5cyhtb250aHNGcm9tRGF5cykpO1xuXG4gICAgICAgIC8vIDEyIG1vbnRocyAtPiAxIHllYXJcbiAgICAgICAgeWVhcnMgPSBhYnNGbG9vcihtb250aHMgLyAxMik7XG4gICAgICAgIG1vbnRocyAlPSAxMjtcblxuICAgICAgICBkYXRhLmRheXMgPSBkYXlzO1xuICAgICAgICBkYXRhLm1vbnRocyA9IG1vbnRocztcbiAgICAgICAgZGF0YS55ZWFycyA9IHllYXJzO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRheXNUb01vbnRocyhkYXlzKSB7XG4gICAgICAgIC8vIDQwMCB5ZWFycyBoYXZlIDE0NjA5NyBkYXlzICh0YWtpbmcgaW50byBhY2NvdW50IGxlYXAgeWVhciBydWxlcylcbiAgICAgICAgLy8gNDAwIHllYXJzIGhhdmUgMTIgbW9udGhzID09PSA0ODAwXG4gICAgICAgIHJldHVybiAoZGF5cyAqIDQ4MDApIC8gMTQ2MDk3O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoc1RvRGF5cyhtb250aHMpIHtcbiAgICAgICAgLy8gdGhlIHJldmVyc2Ugb2YgZGF5c1RvTW9udGhzXG4gICAgICAgIHJldHVybiAobW9udGhzICogMTQ2MDk3KSAvIDQ4MDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYXModW5pdHMpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGF5cyxcbiAgICAgICAgICAgIG1vbnRocyxcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kcyA9IHRoaXMuX21pbGxpc2Vjb25kcztcblxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcblxuICAgICAgICBpZiAodW5pdHMgPT09ICdtb250aCcgfHwgdW5pdHMgPT09ICdxdWFydGVyJyB8fCB1bml0cyA9PT0gJ3llYXInKSB7XG4gICAgICAgICAgICBkYXlzID0gdGhpcy5fZGF5cyArIG1pbGxpc2Vjb25kcyAvIDg2NGU1O1xuICAgICAgICAgICAgbW9udGhzID0gdGhpcy5fbW9udGhzICsgZGF5c1RvTW9udGhzKGRheXMpO1xuICAgICAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRocztcbiAgICAgICAgICAgICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRocyAvIDM7XG4gICAgICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb250aHMgLyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGhhbmRsZSBtaWxsaXNlY29uZHMgc2VwYXJhdGVseSBiZWNhdXNlIG9mIGZsb2F0aW5nIHBvaW50IG1hdGggZXJyb3JzIChpc3N1ZSAjMTg2NylcbiAgICAgICAgICAgIGRheXMgPSB0aGlzLl9kYXlzICsgTWF0aC5yb3VuZChtb250aHNUb0RheXModGhpcy5fbW9udGhzKSk7XG4gICAgICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzIC8gNyArIG1pbGxpc2Vjb25kcyAvIDYwNDhlNTtcbiAgICAgICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF5cyArIG1pbGxpc2Vjb25kcyAvIDg2NGU1O1xuICAgICAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF5cyAqIDI0ICsgbWlsbGlzZWNvbmRzIC8gMzZlNTtcbiAgICAgICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF5cyAqIDE0NDAgKyBtaWxsaXNlY29uZHMgLyA2ZTQ7XG4gICAgICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKiA4NjQwMCArIG1pbGxpc2Vjb25kcyAvIDEwMDA7XG4gICAgICAgICAgICAgICAgLy8gTWF0aC5mbG9vciBwcmV2ZW50cyBmbG9hdGluZyBwb2ludCBtYXRoIGVycm9ycyBoZXJlXG4gICAgICAgICAgICAgICAgY2FzZSAnbWlsbGlzZWNvbmQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihkYXlzICogODY0ZTUpICsgbWlsbGlzZWNvbmRzO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biB1bml0ICcgKyB1bml0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUT0RPOiBVc2UgdGhpcy5hcygnbXMnKT9cbiAgICBmdW5jdGlvbiB2YWx1ZU9mJDEoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMuX21pbGxpc2Vjb25kcyArXG4gICAgICAgICAgICB0aGlzLl9kYXlzICogODY0ZTUgK1xuICAgICAgICAgICAgKHRoaXMuX21vbnRocyAlIDEyKSAqIDI1OTJlNiArXG4gICAgICAgICAgICB0b0ludCh0aGlzLl9tb250aHMgLyAxMikgKiAzMTUzNmU2XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUFzKGFsaWFzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcyhhbGlhcyk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGFzTWlsbGlzZWNvbmRzID0gbWFrZUFzKCdtcycpLFxuICAgICAgICBhc1NlY29uZHMgPSBtYWtlQXMoJ3MnKSxcbiAgICAgICAgYXNNaW51dGVzID0gbWFrZUFzKCdtJyksXG4gICAgICAgIGFzSG91cnMgPSBtYWtlQXMoJ2gnKSxcbiAgICAgICAgYXNEYXlzID0gbWFrZUFzKCdkJyksXG4gICAgICAgIGFzV2Vla3MgPSBtYWtlQXMoJ3cnKSxcbiAgICAgICAgYXNNb250aHMgPSBtYWtlQXMoJ00nKSxcbiAgICAgICAgYXNRdWFydGVycyA9IG1ha2VBcygnUScpLFxuICAgICAgICBhc1llYXJzID0gbWFrZUFzKCd5Jyk7XG5cbiAgICBmdW5jdGlvbiBjbG9uZSQxKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24odGhpcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0JDIodW5pdHMpIHtcbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXNbdW5pdHMgKyAncyddKCkgOiBOYU47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUdldHRlcihuYW1lKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzLl9kYXRhW25hbWVdIDogTmFOO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHZhciBtaWxsaXNlY29uZHMgPSBtYWtlR2V0dGVyKCdtaWxsaXNlY29uZHMnKSxcbiAgICAgICAgc2Vjb25kcyA9IG1ha2VHZXR0ZXIoJ3NlY29uZHMnKSxcbiAgICAgICAgbWludXRlcyA9IG1ha2VHZXR0ZXIoJ21pbnV0ZXMnKSxcbiAgICAgICAgaG91cnMgPSBtYWtlR2V0dGVyKCdob3VycycpLFxuICAgICAgICBkYXlzID0gbWFrZUdldHRlcignZGF5cycpLFxuICAgICAgICBtb250aHMgPSBtYWtlR2V0dGVyKCdtb250aHMnKSxcbiAgICAgICAgeWVhcnMgPSBtYWtlR2V0dGVyKCd5ZWFycycpO1xuXG4gICAgZnVuY3Rpb24gd2Vla3MoKSB7XG4gICAgICAgIHJldHVybiBhYnNGbG9vcih0aGlzLmRheXMoKSAvIDcpO1xuICAgIH1cblxuICAgIHZhciByb3VuZCA9IE1hdGgucm91bmQsXG4gICAgICAgIHRocmVzaG9sZHMgPSB7XG4gICAgICAgICAgICBzczogNDQsIC8vIGEgZmV3IHNlY29uZHMgdG8gc2Vjb25kc1xuICAgICAgICAgICAgczogNDUsIC8vIHNlY29uZHMgdG8gbWludXRlXG4gICAgICAgICAgICBtOiA0NSwgLy8gbWludXRlcyB0byBob3VyXG4gICAgICAgICAgICBoOiAyMiwgLy8gaG91cnMgdG8gZGF5XG4gICAgICAgICAgICBkOiAyNiwgLy8gZGF5cyB0byBtb250aC93ZWVrXG4gICAgICAgICAgICB3OiBudWxsLCAvLyB3ZWVrcyB0byBtb250aFxuICAgICAgICAgICAgTTogMTEsIC8vIG1vbnRocyB0byB5ZWFyXG4gICAgICAgIH07XG5cbiAgICAvLyBoZWxwZXIgZnVuY3Rpb24gZm9yIG1vbWVudC5mbi5mcm9tLCBtb21lbnQuZm4uZnJvbU5vdywgYW5kIG1vbWVudC5kdXJhdGlvbi5mbi5odW1hbml6ZVxuICAgIGZ1bmN0aW9uIHN1YnN0aXR1dGVUaW1lQWdvKHN0cmluZywgbnVtYmVyLCB3aXRob3V0U3VmZml4LCBpc0Z1dHVyZSwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUucmVsYXRpdmVUaW1lKG51bWJlciB8fCAxLCAhIXdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlbGF0aXZlVGltZSQxKHBvc05lZ0R1cmF0aW9uLCB3aXRob3V0U3VmZml4LCB0aHJlc2hvbGRzLCBsb2NhbGUpIHtcbiAgICAgICAgdmFyIGR1cmF0aW9uID0gY3JlYXRlRHVyYXRpb24ocG9zTmVnRHVyYXRpb24pLmFicygpLFxuICAgICAgICAgICAgc2Vjb25kcyA9IHJvdW5kKGR1cmF0aW9uLmFzKCdzJykpLFxuICAgICAgICAgICAgbWludXRlcyA9IHJvdW5kKGR1cmF0aW9uLmFzKCdtJykpLFxuICAgICAgICAgICAgaG91cnMgPSByb3VuZChkdXJhdGlvbi5hcygnaCcpKSxcbiAgICAgICAgICAgIGRheXMgPSByb3VuZChkdXJhdGlvbi5hcygnZCcpKSxcbiAgICAgICAgICAgIG1vbnRocyA9IHJvdW5kKGR1cmF0aW9uLmFzKCdNJykpLFxuICAgICAgICAgICAgd2Vla3MgPSByb3VuZChkdXJhdGlvbi5hcygndycpKSxcbiAgICAgICAgICAgIHllYXJzID0gcm91bmQoZHVyYXRpb24uYXMoJ3knKSksXG4gICAgICAgICAgICBhID1cbiAgICAgICAgICAgICAgICAoc2Vjb25kcyA8PSB0aHJlc2hvbGRzLnNzICYmIFsncycsIHNlY29uZHNdKSB8fFxuICAgICAgICAgICAgICAgIChzZWNvbmRzIDwgdGhyZXNob2xkcy5zICYmIFsnc3MnLCBzZWNvbmRzXSkgfHxcbiAgICAgICAgICAgICAgICAobWludXRlcyA8PSAxICYmIFsnbSddKSB8fFxuICAgICAgICAgICAgICAgIChtaW51dGVzIDwgdGhyZXNob2xkcy5tICYmIFsnbW0nLCBtaW51dGVzXSkgfHxcbiAgICAgICAgICAgICAgICAoaG91cnMgPD0gMSAmJiBbJ2gnXSkgfHxcbiAgICAgICAgICAgICAgICAoaG91cnMgPCB0aHJlc2hvbGRzLmggJiYgWydoaCcsIGhvdXJzXSkgfHxcbiAgICAgICAgICAgICAgICAoZGF5cyA8PSAxICYmIFsnZCddKSB8fFxuICAgICAgICAgICAgICAgIChkYXlzIDwgdGhyZXNob2xkcy5kICYmIFsnZGQnLCBkYXlzXSk7XG5cbiAgICAgICAgaWYgKHRocmVzaG9sZHMudyAhPSBudWxsKSB7XG4gICAgICAgICAgICBhID1cbiAgICAgICAgICAgICAgICBhIHx8XG4gICAgICAgICAgICAgICAgKHdlZWtzIDw9IDEgJiYgWyd3J10pIHx8XG4gICAgICAgICAgICAgICAgKHdlZWtzIDwgdGhyZXNob2xkcy53ICYmIFsnd3cnLCB3ZWVrc10pO1xuICAgICAgICB9XG4gICAgICAgIGEgPSBhIHx8XG4gICAgICAgICAgICAobW9udGhzIDw9IDEgJiYgWydNJ10pIHx8XG4gICAgICAgICAgICAobW9udGhzIDwgdGhyZXNob2xkcy5NICYmIFsnTU0nLCBtb250aHNdKSB8fFxuICAgICAgICAgICAgKHllYXJzIDw9IDEgJiYgWyd5J10pIHx8IFsneXknLCB5ZWFyc107XG5cbiAgICAgICAgYVsyXSA9IHdpdGhvdXRTdWZmaXg7XG4gICAgICAgIGFbM10gPSArcG9zTmVnRHVyYXRpb24gPiAwO1xuICAgICAgICBhWzRdID0gbG9jYWxlO1xuICAgICAgICByZXR1cm4gc3Vic3RpdHV0ZVRpbWVBZ28uYXBwbHkobnVsbCwgYSk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIHNldCB0aGUgcm91bmRpbmcgZnVuY3Rpb24gZm9yIHJlbGF0aXZlIHRpbWUgc3RyaW5nc1xuICAgIGZ1bmN0aW9uIGdldFNldFJlbGF0aXZlVGltZVJvdW5kaW5nKHJvdW5kaW5nRnVuY3Rpb24pIHtcbiAgICAgICAgaWYgKHJvdW5kaW5nRnVuY3Rpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHJvdW5kO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygcm91bmRpbmdGdW5jdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcm91bmQgPSByb3VuZGluZ0Z1bmN0aW9uO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHlvdSB0byBzZXQgYSB0aHJlc2hvbGQgZm9yIHJlbGF0aXZlIHRpbWUgc3RyaW5nc1xuICAgIGZ1bmN0aW9uIGdldFNldFJlbGF0aXZlVGltZVRocmVzaG9sZCh0aHJlc2hvbGQsIGxpbWl0KSB7XG4gICAgICAgIGlmICh0aHJlc2hvbGRzW3RocmVzaG9sZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsaW1pdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhyZXNob2xkc1t0aHJlc2hvbGRdO1xuICAgICAgICB9XG4gICAgICAgIHRocmVzaG9sZHNbdGhyZXNob2xkXSA9IGxpbWl0O1xuICAgICAgICBpZiAodGhyZXNob2xkID09PSAncycpIHtcbiAgICAgICAgICAgIHRocmVzaG9sZHMuc3MgPSBsaW1pdCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaHVtYW5pemUoYXJnV2l0aFN1ZmZpeCwgYXJnVGhyZXNob2xkcykge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3aXRoU3VmZml4ID0gZmFsc2UsXG4gICAgICAgICAgICB0aCA9IHRocmVzaG9sZHMsXG4gICAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgICBvdXRwdXQ7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBhcmdXaXRoU3VmZml4ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgYXJnVGhyZXNob2xkcyA9IGFyZ1dpdGhTdWZmaXg7XG4gICAgICAgICAgICBhcmdXaXRoU3VmZml4ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhcmdXaXRoU3VmZml4ID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHdpdGhTdWZmaXggPSBhcmdXaXRoU3VmZml4O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYXJnVGhyZXNob2xkcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHRoID0gT2JqZWN0LmFzc2lnbih7fSwgdGhyZXNob2xkcywgYXJnVGhyZXNob2xkcyk7XG4gICAgICAgICAgICBpZiAoYXJnVGhyZXNob2xkcy5zICE9IG51bGwgJiYgYXJnVGhyZXNob2xkcy5zcyA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGguc3MgPSBhcmdUaHJlc2hvbGRzLnMgLSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbG9jYWxlID0gdGhpcy5sb2NhbGVEYXRhKCk7XG4gICAgICAgIG91dHB1dCA9IHJlbGF0aXZlVGltZSQxKHRoaXMsICF3aXRoU3VmZml4LCB0aCwgbG9jYWxlKTtcblxuICAgICAgICBpZiAod2l0aFN1ZmZpeCkge1xuICAgICAgICAgICAgb3V0cHV0ID0gbG9jYWxlLnBhc3RGdXR1cmUoK3RoaXMsIG91dHB1dCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbG9jYWxlLnBvc3Rmb3JtYXQob3V0cHV0KTtcbiAgICB9XG5cbiAgICB2YXIgYWJzJDEgPSBNYXRoLmFicztcblxuICAgIGZ1bmN0aW9uIHNpZ24oeCkge1xuICAgICAgICByZXR1cm4gKHggPiAwKSAtICh4IDwgMCkgfHwgK3g7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9JU09TdHJpbmckMSgpIHtcbiAgICAgICAgLy8gZm9yIElTTyBzdHJpbmdzIHdlIGRvIG5vdCB1c2UgdGhlIG5vcm1hbCBidWJibGluZyBydWxlczpcbiAgICAgICAgLy8gICogbWlsbGlzZWNvbmRzIGJ1YmJsZSB1cCB1bnRpbCB0aGV5IGJlY29tZSBob3Vyc1xuICAgICAgICAvLyAgKiBkYXlzIGRvIG5vdCBidWJibGUgYXQgYWxsXG4gICAgICAgIC8vICAqIG1vbnRocyBidWJibGUgdXAgdW50aWwgdGhleSBiZWNvbWUgeWVhcnNcbiAgICAgICAgLy8gVGhpcyBpcyBiZWNhdXNlIHRoZXJlIGlzIG5vIGNvbnRleHQtZnJlZSBjb252ZXJzaW9uIGJldHdlZW4gaG91cnMgYW5kIGRheXNcbiAgICAgICAgLy8gKHRoaW5rIG9mIGNsb2NrIGNoYW5nZXMpXG4gICAgICAgIC8vIGFuZCBhbHNvIG5vdCBiZXR3ZWVuIGRheXMgYW5kIG1vbnRocyAoMjgtMzEgZGF5cyBwZXIgbW9udGgpXG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNlY29uZHMgPSBhYnMkMSh0aGlzLl9taWxsaXNlY29uZHMpIC8gMTAwMCxcbiAgICAgICAgICAgIGRheXMgPSBhYnMkMSh0aGlzLl9kYXlzKSxcbiAgICAgICAgICAgIG1vbnRocyA9IGFicyQxKHRoaXMuX21vbnRocyksXG4gICAgICAgICAgICBtaW51dGVzLFxuICAgICAgICAgICAgaG91cnMsXG4gICAgICAgICAgICB5ZWFycyxcbiAgICAgICAgICAgIHMsXG4gICAgICAgICAgICB0b3RhbCA9IHRoaXMuYXNTZWNvbmRzKCksXG4gICAgICAgICAgICB0b3RhbFNpZ24sXG4gICAgICAgICAgICB5bVNpZ24sXG4gICAgICAgICAgICBkYXlzU2lnbixcbiAgICAgICAgICAgIGhtc1NpZ247XG5cbiAgICAgICAgaWYgKCF0b3RhbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0aGUgc2FtZSBhcyBDIydzIChOb2RhKSBhbmQgcHl0aG9uIChpc29kYXRlKS4uLlxuICAgICAgICAgICAgLy8gYnV0IG5vdCBvdGhlciBKUyAoZ29vZy5kYXRlKVxuICAgICAgICAgICAgcmV0dXJuICdQMEQnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMzYwMCBzZWNvbmRzIC0+IDYwIG1pbnV0ZXMgLT4gMSBob3VyXG4gICAgICAgIG1pbnV0ZXMgPSBhYnNGbG9vcihzZWNvbmRzIC8gNjApO1xuICAgICAgICBob3VycyA9IGFic0Zsb29yKG1pbnV0ZXMgLyA2MCk7XG4gICAgICAgIHNlY29uZHMgJT0gNjA7XG4gICAgICAgIG1pbnV0ZXMgJT0gNjA7XG5cbiAgICAgICAgLy8gMTIgbW9udGhzIC0+IDEgeWVhclxuICAgICAgICB5ZWFycyA9IGFic0Zsb29yKG1vbnRocyAvIDEyKTtcbiAgICAgICAgbW9udGhzICU9IDEyO1xuXG4gICAgICAgIC8vIGluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9kb3JkaWxsZS9tb21lbnQtaXNvZHVyYXRpb24vYmxvYi9tYXN0ZXIvbW9tZW50Lmlzb2R1cmF0aW9uLmpzXG4gICAgICAgIHMgPSBzZWNvbmRzID8gc2Vjb25kcy50b0ZpeGVkKDMpLnJlcGxhY2UoL1xcLj8wKyQvLCAnJykgOiAnJztcblxuICAgICAgICB0b3RhbFNpZ24gPSB0b3RhbCA8IDAgPyAnLScgOiAnJztcbiAgICAgICAgeW1TaWduID0gc2lnbih0aGlzLl9tb250aHMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuICAgICAgICBkYXlzU2lnbiA9IHNpZ24odGhpcy5fZGF5cykgIT09IHNpZ24odG90YWwpID8gJy0nIDogJyc7XG4gICAgICAgIGhtc1NpZ24gPSBzaWduKHRoaXMuX21pbGxpc2Vjb25kcykgIT09IHNpZ24odG90YWwpID8gJy0nIDogJyc7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRvdGFsU2lnbiArXG4gICAgICAgICAgICAnUCcgK1xuICAgICAgICAgICAgKHllYXJzID8geW1TaWduICsgeWVhcnMgKyAnWScgOiAnJykgK1xuICAgICAgICAgICAgKG1vbnRocyA/IHltU2lnbiArIG1vbnRocyArICdNJyA6ICcnKSArXG4gICAgICAgICAgICAoZGF5cyA/IGRheXNTaWduICsgZGF5cyArICdEJyA6ICcnKSArXG4gICAgICAgICAgICAoaG91cnMgfHwgbWludXRlcyB8fCBzZWNvbmRzID8gJ1QnIDogJycpICtcbiAgICAgICAgICAgIChob3VycyA/IGhtc1NpZ24gKyBob3VycyArICdIJyA6ICcnKSArXG4gICAgICAgICAgICAobWludXRlcyA/IGhtc1NpZ24gKyBtaW51dGVzICsgJ00nIDogJycpICtcbiAgICAgICAgICAgIChzZWNvbmRzID8gaG1zU2lnbiArIHMgKyAnUycgOiAnJylcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICB2YXIgcHJvdG8kMiA9IER1cmF0aW9uLnByb3RvdHlwZTtcblxuICAgIHByb3RvJDIuaXNWYWxpZCA9IGlzVmFsaWQkMTtcbiAgICBwcm90byQyLmFicyA9IGFicztcbiAgICBwcm90byQyLmFkZCA9IGFkZCQxO1xuICAgIHByb3RvJDIuc3VidHJhY3QgPSBzdWJ0cmFjdCQxO1xuICAgIHByb3RvJDIuYXMgPSBhcztcbiAgICBwcm90byQyLmFzTWlsbGlzZWNvbmRzID0gYXNNaWxsaXNlY29uZHM7XG4gICAgcHJvdG8kMi5hc1NlY29uZHMgPSBhc1NlY29uZHM7XG4gICAgcHJvdG8kMi5hc01pbnV0ZXMgPSBhc01pbnV0ZXM7XG4gICAgcHJvdG8kMi5hc0hvdXJzID0gYXNIb3VycztcbiAgICBwcm90byQyLmFzRGF5cyA9IGFzRGF5cztcbiAgICBwcm90byQyLmFzV2Vla3MgPSBhc1dlZWtzO1xuICAgIHByb3RvJDIuYXNNb250aHMgPSBhc01vbnRocztcbiAgICBwcm90byQyLmFzUXVhcnRlcnMgPSBhc1F1YXJ0ZXJzO1xuICAgIHByb3RvJDIuYXNZZWFycyA9IGFzWWVhcnM7XG4gICAgcHJvdG8kMi52YWx1ZU9mID0gdmFsdWVPZiQxO1xuICAgIHByb3RvJDIuX2J1YmJsZSA9IGJ1YmJsZTtcbiAgICBwcm90byQyLmNsb25lID0gY2xvbmUkMTtcbiAgICBwcm90byQyLmdldCA9IGdldCQyO1xuICAgIHByb3RvJDIubWlsbGlzZWNvbmRzID0gbWlsbGlzZWNvbmRzO1xuICAgIHByb3RvJDIuc2Vjb25kcyA9IHNlY29uZHM7XG4gICAgcHJvdG8kMi5taW51dGVzID0gbWludXRlcztcbiAgICBwcm90byQyLmhvdXJzID0gaG91cnM7XG4gICAgcHJvdG8kMi5kYXlzID0gZGF5cztcbiAgICBwcm90byQyLndlZWtzID0gd2Vla3M7XG4gICAgcHJvdG8kMi5tb250aHMgPSBtb250aHM7XG4gICAgcHJvdG8kMi55ZWFycyA9IHllYXJzO1xuICAgIHByb3RvJDIuaHVtYW5pemUgPSBodW1hbml6ZTtcbiAgICBwcm90byQyLnRvSVNPU3RyaW5nID0gdG9JU09TdHJpbmckMTtcbiAgICBwcm90byQyLnRvU3RyaW5nID0gdG9JU09TdHJpbmckMTtcbiAgICBwcm90byQyLnRvSlNPTiA9IHRvSVNPU3RyaW5nJDE7XG4gICAgcHJvdG8kMi5sb2NhbGUgPSBsb2NhbGU7XG4gICAgcHJvdG8kMi5sb2NhbGVEYXRhID0gbG9jYWxlRGF0YTtcblxuICAgIHByb3RvJDIudG9Jc29TdHJpbmcgPSBkZXByZWNhdGUoXG4gICAgICAgICd0b0lzb1N0cmluZygpIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgdG9JU09TdHJpbmcoKSBpbnN0ZWFkIChub3RpY2UgdGhlIGNhcGl0YWxzKScsXG4gICAgICAgIHRvSVNPU3RyaW5nJDFcbiAgICApO1xuICAgIHByb3RvJDIubGFuZyA9IGxhbmc7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignWCcsIDAsIDAsICd1bml4Jyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3gnLCAwLCAwLCAndmFsdWVPZicpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbigneCcsIG1hdGNoU2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCdYJywgbWF0Y2hUaW1lc3RhbXApO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1gnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUocGFyc2VGbG9hdChpbnB1dCkgKiAxMDAwKTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCd4JywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKHRvSW50KGlucHV0KSk7XG4gICAgfSk7XG5cbiAgICAvLyEgbW9tZW50LmpzXG5cbiAgICBob29rcy52ZXJzaW9uID0gJzIuMjkuMSc7XG5cbiAgICBzZXRIb29rQ2FsbGJhY2soY3JlYXRlTG9jYWwpO1xuXG4gICAgaG9va3MuZm4gPSBwcm90bztcbiAgICBob29rcy5taW4gPSBtaW47XG4gICAgaG9va3MubWF4ID0gbWF4O1xuICAgIGhvb2tzLm5vdyA9IG5vdztcbiAgICBob29rcy51dGMgPSBjcmVhdGVVVEM7XG4gICAgaG9va3MudW5peCA9IGNyZWF0ZVVuaXg7XG4gICAgaG9va3MubW9udGhzID0gbGlzdE1vbnRocztcbiAgICBob29rcy5pc0RhdGUgPSBpc0RhdGU7XG4gICAgaG9va3MubG9jYWxlID0gZ2V0U2V0R2xvYmFsTG9jYWxlO1xuICAgIGhvb2tzLmludmFsaWQgPSBjcmVhdGVJbnZhbGlkO1xuICAgIGhvb2tzLmR1cmF0aW9uID0gY3JlYXRlRHVyYXRpb247XG4gICAgaG9va3MuaXNNb21lbnQgPSBpc01vbWVudDtcbiAgICBob29rcy53ZWVrZGF5cyA9IGxpc3RXZWVrZGF5cztcbiAgICBob29rcy5wYXJzZVpvbmUgPSBjcmVhdGVJblpvbmU7XG4gICAgaG9va3MubG9jYWxlRGF0YSA9IGdldExvY2FsZTtcbiAgICBob29rcy5pc0R1cmF0aW9uID0gaXNEdXJhdGlvbjtcbiAgICBob29rcy5tb250aHNTaG9ydCA9IGxpc3RNb250aHNTaG9ydDtcbiAgICBob29rcy53ZWVrZGF5c01pbiA9IGxpc3RXZWVrZGF5c01pbjtcbiAgICBob29rcy5kZWZpbmVMb2NhbGUgPSBkZWZpbmVMb2NhbGU7XG4gICAgaG9va3MudXBkYXRlTG9jYWxlID0gdXBkYXRlTG9jYWxlO1xuICAgIGhvb2tzLmxvY2FsZXMgPSBsaXN0TG9jYWxlcztcbiAgICBob29rcy53ZWVrZGF5c1Nob3J0ID0gbGlzdFdlZWtkYXlzU2hvcnQ7XG4gICAgaG9va3Mubm9ybWFsaXplVW5pdHMgPSBub3JtYWxpemVVbml0cztcbiAgICBob29rcy5yZWxhdGl2ZVRpbWVSb3VuZGluZyA9IGdldFNldFJlbGF0aXZlVGltZVJvdW5kaW5nO1xuICAgIGhvb2tzLnJlbGF0aXZlVGltZVRocmVzaG9sZCA9IGdldFNldFJlbGF0aXZlVGltZVRocmVzaG9sZDtcbiAgICBob29rcy5jYWxlbmRhckZvcm1hdCA9IGdldENhbGVuZGFyRm9ybWF0O1xuICAgIGhvb2tzLnByb3RvdHlwZSA9IHByb3RvO1xuXG4gICAgLy8gY3VycmVudGx5IEhUTUw1IGlucHV0IHR5cGUgb25seSBzdXBwb3J0cyAyNC1ob3VyIGZvcm1hdHNcbiAgICBob29rcy5IVE1MNV9GTVQgPSB7XG4gICAgICAgIERBVEVUSU1FX0xPQ0FMOiAnWVlZWS1NTS1ERFRISDptbScsIC8vIDxpbnB1dCB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIiAvPlxuICAgICAgICBEQVRFVElNRV9MT0NBTF9TRUNPTkRTOiAnWVlZWS1NTS1ERFRISDptbTpzcycsIC8vIDxpbnB1dCB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIiBzdGVwPVwiMVwiIC8+XG4gICAgICAgIERBVEVUSU1FX0xPQ0FMX01TOiAnWVlZWS1NTS1ERFRISDptbTpzcy5TU1MnLCAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgc3RlcD1cIjAuMDAxXCIgLz5cbiAgICAgICAgREFURTogJ1lZWVktTU0tREQnLCAvLyA8aW5wdXQgdHlwZT1cImRhdGVcIiAvPlxuICAgICAgICBUSU1FOiAnSEg6bW0nLCAvLyA8aW5wdXQgdHlwZT1cInRpbWVcIiAvPlxuICAgICAgICBUSU1FX1NFQ09ORFM6ICdISDptbTpzcycsIC8vIDxpbnB1dCB0eXBlPVwidGltZVwiIHN0ZXA9XCIxXCIgLz5cbiAgICAgICAgVElNRV9NUzogJ0hIOm1tOnNzLlNTUycsIC8vIDxpbnB1dCB0eXBlPVwidGltZVwiIHN0ZXA9XCIwLjAwMVwiIC8+XG4gICAgICAgIFdFRUs6ICdHR0dHLVtXXVdXJywgLy8gPGlucHV0IHR5cGU9XCJ3ZWVrXCIgLz5cbiAgICAgICAgTU9OVEg6ICdZWVlZLU1NJywgLy8gPGlucHV0IHR5cGU9XCJtb250aFwiIC8+XG4gICAgfTtcblxuICAgIHJldHVybiBob29rcztcblxufSkpKTtcbiIsIi8vISBtb21lbnQtdGltZXpvbmUuanNcbi8vISB2ZXJzaW9uIDogMC41LjM0XG4vLyEgQ29weXJpZ2h0IChjKSBKUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbi8vISBsaWNlbnNlIDogTUlUXG4vLyEgZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50LXRpbWV6b25lXG5cbihmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHRcInVzZSBzdHJpY3RcIjtcblxuXHQvKmdsb2JhbCBkZWZpbmUqL1xuXHRpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnbW9tZW50JykpOyAvLyBOb2RlXG5cdH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0ZGVmaW5lKFsnbW9tZW50J10sIGZhY3RvcnkpOyAgICAgICAgICAgICAgICAgLy8gQU1EXG5cdH0gZWxzZSB7XG5cdFx0ZmFjdG9yeShyb290Lm1vbWVudCk7ICAgICAgICAgICAgICAgICAgICAgICAgLy8gQnJvd3NlclxuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChtb21lbnQpIHtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0Ly8gUmVzb2x2ZXMgZXM2IG1vZHVsZSBsb2FkaW5nIGlzc3VlXG5cdGlmIChtb21lbnQudmVyc2lvbiA9PT0gdW5kZWZpbmVkICYmIG1vbWVudC5kZWZhdWx0KSB7XG5cdFx0bW9tZW50ID0gbW9tZW50LmRlZmF1bHQ7XG5cdH1cblxuXHQvLyBEbyBub3QgbG9hZCBtb21lbnQtdGltZXpvbmUgYSBzZWNvbmQgdGltZS5cblx0Ly8gaWYgKG1vbWVudC50eiAhPT0gdW5kZWZpbmVkKSB7XG5cdC8vIFx0bG9nRXJyb3IoJ01vbWVudCBUaW1lem9uZSAnICsgbW9tZW50LnR6LnZlcnNpb24gKyAnIHdhcyBhbHJlYWR5IGxvYWRlZCAnICsgKG1vbWVudC50ei5kYXRhVmVyc2lvbiA/ICd3aXRoIGRhdGEgZnJvbSAnIDogJ3dpdGhvdXQgYW55IGRhdGEnKSArIG1vbWVudC50ei5kYXRhVmVyc2lvbik7XG5cdC8vIFx0cmV0dXJuIG1vbWVudDtcblx0Ly8gfVxuXG5cdHZhciBWRVJTSU9OID0gXCIwLjUuMzRcIixcblx0XHR6b25lcyA9IHt9LFxuXHRcdGxpbmtzID0ge30sXG5cdFx0Y291bnRyaWVzID0ge30sXG5cdFx0bmFtZXMgPSB7fSxcblx0XHRndWVzc2VzID0ge30sXG5cdFx0Y2FjaGVkR3Vlc3M7XG5cblx0aWYgKCFtb21lbnQgfHwgdHlwZW9mIG1vbWVudC52ZXJzaW9uICE9PSAnc3RyaW5nJykge1xuXHRcdGxvZ0Vycm9yKCdNb21lbnQgVGltZXpvbmUgcmVxdWlyZXMgTW9tZW50LmpzLiBTZWUgaHR0cHM6Ly9tb21lbnRqcy5jb20vdGltZXpvbmUvZG9jcy8jL3VzZS1pdC9icm93c2VyLycpO1xuXHR9XG5cblx0dmFyIG1vbWVudFZlcnNpb24gPSBtb21lbnQudmVyc2lvbi5zcGxpdCgnLicpLFxuXHRcdG1ham9yID0gK21vbWVudFZlcnNpb25bMF0sXG5cdFx0bWlub3IgPSArbW9tZW50VmVyc2lvblsxXTtcblxuXHQvLyBNb21lbnQuanMgdmVyc2lvbiBjaGVja1xuXHRpZiAobWFqb3IgPCAyIHx8IChtYWpvciA9PT0gMiAmJiBtaW5vciA8IDYpKSB7XG5cdFx0bG9nRXJyb3IoJ01vbWVudCBUaW1lem9uZSByZXF1aXJlcyBNb21lbnQuanMgPj0gMi42LjAuIFlvdSBhcmUgdXNpbmcgTW9tZW50LmpzICcgKyBtb21lbnQudmVyc2lvbiArICcuIFNlZSBtb21lbnRqcy5jb20nKTtcblx0fVxuXG5cdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblx0XHRVbnBhY2tpbmdcblx0KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cdGZ1bmN0aW9uIGNoYXJDb2RlVG9JbnQoY2hhckNvZGUpIHtcblx0XHRpZiAoY2hhckNvZGUgPiA5Nikge1xuXHRcdFx0cmV0dXJuIGNoYXJDb2RlIC0gODc7XG5cdFx0fSBlbHNlIGlmIChjaGFyQ29kZSA+IDY0KSB7XG5cdFx0XHRyZXR1cm4gY2hhckNvZGUgLSAyOTtcblx0XHR9XG5cdFx0cmV0dXJuIGNoYXJDb2RlIC0gNDg7XG5cdH1cblxuXHRmdW5jdGlvbiB1bnBhY2tCYXNlNjAoc3RyaW5nKSB7XG5cdFx0dmFyIGkgPSAwLFxuXHRcdFx0cGFydHMgPSBzdHJpbmcuc3BsaXQoJy4nKSxcblx0XHRcdHdob2xlID0gcGFydHNbMF0sXG5cdFx0XHRmcmFjdGlvbmFsID0gcGFydHNbMV0gfHwgJycsXG5cdFx0XHRtdWx0aXBsaWVyID0gMSxcblx0XHRcdG51bSxcblx0XHRcdG91dCA9IDAsXG5cdFx0XHRzaWduID0gMTtcblxuXHRcdC8vIGhhbmRsZSBuZWdhdGl2ZSBudW1iZXJzXG5cdFx0aWYgKHN0cmluZy5jaGFyQ29kZUF0KDApID09PSA0NSkge1xuXHRcdFx0aSA9IDE7XG5cdFx0XHRzaWduID0gLTE7XG5cdFx0fVxuXG5cdFx0Ly8gaGFuZGxlIGRpZ2l0cyBiZWZvcmUgdGhlIGRlY2ltYWxcblx0XHRmb3IgKGk7IGkgPCB3aG9sZS5sZW5ndGg7IGkrKykge1xuXHRcdFx0bnVtID0gY2hhckNvZGVUb0ludCh3aG9sZS5jaGFyQ29kZUF0KGkpKTtcblx0XHRcdG91dCA9IDYwICogb3V0ICsgbnVtO1xuXHRcdH1cblxuXHRcdC8vIGhhbmRsZSBkaWdpdHMgYWZ0ZXIgdGhlIGRlY2ltYWxcblx0XHRmb3IgKGkgPSAwOyBpIDwgZnJhY3Rpb25hbC5sZW5ndGg7IGkrKykge1xuXHRcdFx0bXVsdGlwbGllciA9IG11bHRpcGxpZXIgLyA2MDtcblx0XHRcdG51bSA9IGNoYXJDb2RlVG9JbnQoZnJhY3Rpb25hbC5jaGFyQ29kZUF0KGkpKTtcblx0XHRcdG91dCArPSBudW0gKiBtdWx0aXBsaWVyO1xuXHRcdH1cblxuXHRcdHJldHVybiBvdXQgKiBzaWduO1xuXHR9XG5cblx0ZnVuY3Rpb24gYXJyYXlUb0ludCAoYXJyYXkpIHtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRhcnJheVtpXSA9IHVucGFja0Jhc2U2MChhcnJheVtpXSk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gaW50VG9VbnRpbCAoYXJyYXksIGxlbmd0aCkge1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcblx0XHRcdGFycmF5W2ldID0gTWF0aC5yb3VuZCgoYXJyYXlbaSAtIDFdIHx8IDApICsgKGFycmF5W2ldICogNjAwMDApKTsgLy8gbWludXRlcyB0byBtaWxsaXNlY29uZHNcblx0XHR9XG5cblx0XHRhcnJheVtsZW5ndGggLSAxXSA9IEluZmluaXR5O1xuXHR9XG5cblx0ZnVuY3Rpb24gbWFwSW5kaWNlcyAoc291cmNlLCBpbmRpY2VzKSB7XG5cdFx0dmFyIG91dCA9IFtdLCBpO1xuXG5cdFx0Zm9yIChpID0gMDsgaSA8IGluZGljZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdG91dFtpXSA9IHNvdXJjZVtpbmRpY2VzW2ldXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gb3V0O1xuXHR9XG5cblx0ZnVuY3Rpb24gdW5wYWNrIChzdHJpbmcpIHtcblx0XHR2YXIgZGF0YSA9IHN0cmluZy5zcGxpdCgnfCcpLFxuXHRcdFx0b2Zmc2V0cyA9IGRhdGFbMl0uc3BsaXQoJyAnKSxcblx0XHRcdGluZGljZXMgPSBkYXRhWzNdLnNwbGl0KCcnKSxcblx0XHRcdHVudGlscyAgPSBkYXRhWzRdLnNwbGl0KCcgJyk7XG5cblx0XHRhcnJheVRvSW50KG9mZnNldHMpO1xuXHRcdGFycmF5VG9JbnQoaW5kaWNlcyk7XG5cdFx0YXJyYXlUb0ludCh1bnRpbHMpO1xuXG5cdFx0aW50VG9VbnRpbCh1bnRpbHMsIGluZGljZXMubGVuZ3RoKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRuYW1lICAgICAgIDogZGF0YVswXSxcblx0XHRcdGFiYnJzICAgICAgOiBtYXBJbmRpY2VzKGRhdGFbMV0uc3BsaXQoJyAnKSwgaW5kaWNlcyksXG5cdFx0XHRvZmZzZXRzICAgIDogbWFwSW5kaWNlcyhvZmZzZXRzLCBpbmRpY2VzKSxcblx0XHRcdHVudGlscyAgICAgOiB1bnRpbHMsXG5cdFx0XHRwb3B1bGF0aW9uIDogZGF0YVs1XSB8IDBcblx0XHR9O1xuXHR9XG5cblx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXHRcdFpvbmUgb2JqZWN0XG5cdCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuXHRmdW5jdGlvbiBab25lIChwYWNrZWRTdHJpbmcpIHtcblx0XHRpZiAocGFja2VkU3RyaW5nKSB7XG5cdFx0XHR0aGlzLl9zZXQodW5wYWNrKHBhY2tlZFN0cmluZykpO1xuXHRcdH1cblx0fVxuXG5cdFpvbmUucHJvdG90eXBlID0ge1xuXHRcdF9zZXQgOiBmdW5jdGlvbiAodW5wYWNrZWQpIHtcblx0XHRcdHRoaXMubmFtZSAgICAgICA9IHVucGFja2VkLm5hbWU7XG5cdFx0XHR0aGlzLmFiYnJzICAgICAgPSB1bnBhY2tlZC5hYmJycztcblx0XHRcdHRoaXMudW50aWxzICAgICA9IHVucGFja2VkLnVudGlscztcblx0XHRcdHRoaXMub2Zmc2V0cyAgICA9IHVucGFja2VkLm9mZnNldHM7XG5cdFx0XHR0aGlzLnBvcHVsYXRpb24gPSB1bnBhY2tlZC5wb3B1bGF0aW9uO1xuXHRcdH0sXG5cblx0XHRfaW5kZXggOiBmdW5jdGlvbiAodGltZXN0YW1wKSB7XG5cdFx0XHR2YXIgdGFyZ2V0ID0gK3RpbWVzdGFtcCxcblx0XHRcdFx0dW50aWxzID0gdGhpcy51bnRpbHMsXG5cdFx0XHRcdGk7XG5cblx0XHRcdGZvciAoaSA9IDA7IGkgPCB1bnRpbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHRhcmdldCA8IHVudGlsc1tpXSkge1xuXHRcdFx0XHRcdHJldHVybiBpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGNvdW50cmllcyA6IGZ1bmN0aW9uICgpIHtcblx0XHRcdHZhciB6b25lX25hbWUgPSB0aGlzLm5hbWU7XG5cdFx0XHRyZXR1cm4gT2JqZWN0LmtleXMoY291bnRyaWVzKS5maWx0ZXIoZnVuY3Rpb24gKGNvdW50cnlfY29kZSkge1xuXHRcdFx0XHRyZXR1cm4gY291bnRyaWVzW2NvdW50cnlfY29kZV0uem9uZXMuaW5kZXhPZih6b25lX25hbWUpICE9PSAtMTtcblx0XHRcdH0pO1xuXHRcdH0sXG5cblx0XHRwYXJzZSA6IGZ1bmN0aW9uICh0aW1lc3RhbXApIHtcblx0XHRcdHZhciB0YXJnZXQgID0gK3RpbWVzdGFtcCxcblx0XHRcdFx0b2Zmc2V0cyA9IHRoaXMub2Zmc2V0cyxcblx0XHRcdFx0dW50aWxzICA9IHRoaXMudW50aWxzLFxuXHRcdFx0XHRtYXggICAgID0gdW50aWxzLmxlbmd0aCAtIDEsXG5cdFx0XHRcdG9mZnNldCwgb2Zmc2V0TmV4dCwgb2Zmc2V0UHJldiwgaTtcblxuXHRcdFx0Zm9yIChpID0gMDsgaSA8IG1heDsgaSsrKSB7XG5cdFx0XHRcdG9mZnNldCAgICAgPSBvZmZzZXRzW2ldO1xuXHRcdFx0XHRvZmZzZXROZXh0ID0gb2Zmc2V0c1tpICsgMV07XG5cdFx0XHRcdG9mZnNldFByZXYgPSBvZmZzZXRzW2kgPyBpIC0gMSA6IGldO1xuXG5cdFx0XHRcdGlmIChvZmZzZXQgPCBvZmZzZXROZXh0ICYmIHR6Lm1vdmVBbWJpZ3VvdXNGb3J3YXJkKSB7XG5cdFx0XHRcdFx0b2Zmc2V0ID0gb2Zmc2V0TmV4dDtcblx0XHRcdFx0fSBlbHNlIGlmIChvZmZzZXQgPiBvZmZzZXRQcmV2ICYmIHR6Lm1vdmVJbnZhbGlkRm9yd2FyZCkge1xuXHRcdFx0XHRcdG9mZnNldCA9IG9mZnNldFByZXY7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodGFyZ2V0IDwgdW50aWxzW2ldIC0gKG9mZnNldCAqIDYwMDAwKSkge1xuXHRcdFx0XHRcdHJldHVybiBvZmZzZXRzW2ldO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBvZmZzZXRzW21heF07XG5cdFx0fSxcblxuXHRcdGFiYnIgOiBmdW5jdGlvbiAobW9tKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5hYmJyc1t0aGlzLl9pbmRleChtb20pXTtcblx0XHR9LFxuXG5cdFx0b2Zmc2V0IDogZnVuY3Rpb24gKG1vbSkge1xuXHRcdFx0bG9nRXJyb3IoXCJ6b25lLm9mZnNldCBoYXMgYmVlbiBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHpvbmUudXRjT2Zmc2V0XCIpO1xuXHRcdFx0cmV0dXJuIHRoaXMub2Zmc2V0c1t0aGlzLl9pbmRleChtb20pXTtcblx0XHR9LFxuXG5cdFx0dXRjT2Zmc2V0IDogZnVuY3Rpb24gKG1vbSkge1xuXHRcdFx0cmV0dXJuIHRoaXMub2Zmc2V0c1t0aGlzLl9pbmRleChtb20pXTtcblx0XHR9XG5cdH07XG5cblx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXHRcdENvdW50cnkgb2JqZWN0XG5cdCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuXHRmdW5jdGlvbiBDb3VudHJ5IChjb3VudHJ5X25hbWUsIHpvbmVfbmFtZXMpIHtcblx0XHR0aGlzLm5hbWUgPSBjb3VudHJ5X25hbWU7XG5cdFx0dGhpcy56b25lcyA9IHpvbmVfbmFtZXM7XG5cdH1cblxuXHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cdFx0Q3VycmVudCBUaW1lem9uZVxuXHQqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cblx0ZnVuY3Rpb24gT2Zmc2V0QXQoYXQpIHtcblx0XHR2YXIgdGltZVN0cmluZyA9IGF0LnRvVGltZVN0cmluZygpO1xuXHRcdHZhciBhYmJyID0gdGltZVN0cmluZy5tYXRjaCgvXFwoW2EteiBdK1xcKS9pKTtcblx0XHRpZiAoYWJiciAmJiBhYmJyWzBdKSB7XG5cdFx0XHQvLyAxNzo1NjozMSBHTVQtMDYwMCAoQ1NUKVxuXHRcdFx0Ly8gMTc6NTY6MzEgR01ULTA2MDAgKENlbnRyYWwgU3RhbmRhcmQgVGltZSlcblx0XHRcdGFiYnIgPSBhYmJyWzBdLm1hdGNoKC9bQS1aXS9nKTtcblx0XHRcdGFiYnIgPSBhYmJyID8gYWJici5qb2luKCcnKSA6IHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gMTc6NTY6MzEgQ1NUXG5cdFx0XHQvLyAxNzo1NjozMSBHTVQrMDgwMCAo5Y+w5YyX5qiZ5rqW5pmC6ZaTKVxuXHRcdFx0YWJiciA9IHRpbWVTdHJpbmcubWF0Y2goL1tBLVpdezMsNX0vZyk7XG5cdFx0XHRhYmJyID0gYWJiciA/IGFiYnJbMF0gOiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0aWYgKGFiYnIgPT09ICdHTVQnKSB7XG5cdFx0XHRhYmJyID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdHRoaXMuYXQgPSArYXQ7XG5cdFx0dGhpcy5hYmJyID0gYWJicjtcblx0XHR0aGlzLm9mZnNldCA9IGF0LmdldFRpbWV6b25lT2Zmc2V0KCk7XG5cdH1cblxuXHRmdW5jdGlvbiBab25lU2NvcmUoem9uZSkge1xuXHRcdHRoaXMuem9uZSA9IHpvbmU7XG5cdFx0dGhpcy5vZmZzZXRTY29yZSA9IDA7XG5cdFx0dGhpcy5hYmJyU2NvcmUgPSAwO1xuXHR9XG5cblx0Wm9uZVNjb3JlLnByb3RvdHlwZS5zY29yZU9mZnNldEF0ID0gZnVuY3Rpb24gKG9mZnNldEF0KSB7XG5cdFx0dGhpcy5vZmZzZXRTY29yZSArPSBNYXRoLmFicyh0aGlzLnpvbmUudXRjT2Zmc2V0KG9mZnNldEF0LmF0KSAtIG9mZnNldEF0Lm9mZnNldCk7XG5cdFx0aWYgKHRoaXMuem9uZS5hYmJyKG9mZnNldEF0LmF0KS5yZXBsYWNlKC9bXkEtWl0vZywgJycpICE9PSBvZmZzZXRBdC5hYmJyKSB7XG5cdFx0XHR0aGlzLmFiYnJTY29yZSsrO1xuXHRcdH1cblx0fTtcblxuXHRmdW5jdGlvbiBmaW5kQ2hhbmdlKGxvdywgaGlnaCkge1xuXHRcdHZhciBtaWQsIGRpZmY7XG5cblx0XHR3aGlsZSAoKGRpZmYgPSAoKGhpZ2guYXQgLSBsb3cuYXQpIC8gMTJlNCB8IDApICogNmU0KSkge1xuXHRcdFx0bWlkID0gbmV3IE9mZnNldEF0KG5ldyBEYXRlKGxvdy5hdCArIGRpZmYpKTtcblx0XHRcdGlmIChtaWQub2Zmc2V0ID09PSBsb3cub2Zmc2V0KSB7XG5cdFx0XHRcdGxvdyA9IG1pZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGhpZ2ggPSBtaWQ7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGxvdztcblx0fVxuXG5cdGZ1bmN0aW9uIHVzZXJPZmZzZXRzKCkge1xuXHRcdHZhciBzdGFydFllYXIgPSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCkgLSAyLFxuXHRcdFx0bGFzdCA9IG5ldyBPZmZzZXRBdChuZXcgRGF0ZShzdGFydFllYXIsIDAsIDEpKSxcblx0XHRcdG9mZnNldHMgPSBbbGFzdF0sXG5cdFx0XHRjaGFuZ2UsIG5leHQsIGk7XG5cblx0XHRmb3IgKGkgPSAxOyBpIDwgNDg7IGkrKykge1xuXHRcdFx0bmV4dCA9IG5ldyBPZmZzZXRBdChuZXcgRGF0ZShzdGFydFllYXIsIGksIDEpKTtcblx0XHRcdGlmIChuZXh0Lm9mZnNldCAhPT0gbGFzdC5vZmZzZXQpIHtcblx0XHRcdFx0Y2hhbmdlID0gZmluZENoYW5nZShsYXN0LCBuZXh0KTtcblx0XHRcdFx0b2Zmc2V0cy5wdXNoKGNoYW5nZSk7XG5cdFx0XHRcdG9mZnNldHMucHVzaChuZXcgT2Zmc2V0QXQobmV3IERhdGUoY2hhbmdlLmF0ICsgNmU0KSkpO1xuXHRcdFx0fVxuXHRcdFx0bGFzdCA9IG5leHQ7XG5cdFx0fVxuXG5cdFx0Zm9yIChpID0gMDsgaSA8IDQ7IGkrKykge1xuXHRcdFx0b2Zmc2V0cy5wdXNoKG5ldyBPZmZzZXRBdChuZXcgRGF0ZShzdGFydFllYXIgKyBpLCAwLCAxKSkpO1xuXHRcdFx0b2Zmc2V0cy5wdXNoKG5ldyBPZmZzZXRBdChuZXcgRGF0ZShzdGFydFllYXIgKyBpLCA2LCAxKSkpO1xuXHRcdH1cblxuXHRcdHJldHVybiBvZmZzZXRzO1xuXHR9XG5cblx0ZnVuY3Rpb24gc29ydFpvbmVTY29yZXMgKGEsIGIpIHtcblx0XHRpZiAoYS5vZmZzZXRTY29yZSAhPT0gYi5vZmZzZXRTY29yZSkge1xuXHRcdFx0cmV0dXJuIGEub2Zmc2V0U2NvcmUgLSBiLm9mZnNldFNjb3JlO1xuXHRcdH1cblx0XHRpZiAoYS5hYmJyU2NvcmUgIT09IGIuYWJiclNjb3JlKSB7XG5cdFx0XHRyZXR1cm4gYS5hYmJyU2NvcmUgLSBiLmFiYnJTY29yZTtcblx0XHR9XG5cdFx0aWYgKGEuem9uZS5wb3B1bGF0aW9uICE9PSBiLnpvbmUucG9wdWxhdGlvbikge1xuXHRcdFx0cmV0dXJuIGIuem9uZS5wb3B1bGF0aW9uIC0gYS56b25lLnBvcHVsYXRpb247XG5cdFx0fVxuXHRcdHJldHVybiBiLnpvbmUubmFtZS5sb2NhbGVDb21wYXJlKGEuem9uZS5uYW1lKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGFkZFRvR3Vlc3NlcyAobmFtZSwgb2Zmc2V0cykge1xuXHRcdHZhciBpLCBvZmZzZXQ7XG5cdFx0YXJyYXlUb0ludChvZmZzZXRzKTtcblx0XHRmb3IgKGkgPSAwOyBpIDwgb2Zmc2V0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0b2Zmc2V0ID0gb2Zmc2V0c1tpXTtcblx0XHRcdGd1ZXNzZXNbb2Zmc2V0XSA9IGd1ZXNzZXNbb2Zmc2V0XSB8fCB7fTtcblx0XHRcdGd1ZXNzZXNbb2Zmc2V0XVtuYW1lXSA9IHRydWU7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gZ3Vlc3Nlc0ZvclVzZXJPZmZzZXRzIChvZmZzZXRzKSB7XG5cdFx0dmFyIG9mZnNldHNMZW5ndGggPSBvZmZzZXRzLmxlbmd0aCxcblx0XHRcdGZpbHRlcmVkR3Vlc3NlcyA9IHt9LFxuXHRcdFx0b3V0ID0gW10sXG5cdFx0XHRpLCBqLCBndWVzc2VzT2Zmc2V0O1xuXG5cdFx0Zm9yIChpID0gMDsgaSA8IG9mZnNldHNMZW5ndGg7IGkrKykge1xuXHRcdFx0Z3Vlc3Nlc09mZnNldCA9IGd1ZXNzZXNbb2Zmc2V0c1tpXS5vZmZzZXRdIHx8IHt9O1xuXHRcdFx0Zm9yIChqIGluIGd1ZXNzZXNPZmZzZXQpIHtcblx0XHRcdFx0aWYgKGd1ZXNzZXNPZmZzZXQuaGFzT3duUHJvcGVydHkoaikpIHtcblx0XHRcdFx0XHRmaWx0ZXJlZEd1ZXNzZXNbal0gPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yIChpIGluIGZpbHRlcmVkR3Vlc3Nlcykge1xuXHRcdFx0aWYgKGZpbHRlcmVkR3Vlc3Nlcy5oYXNPd25Qcm9wZXJ0eShpKSkge1xuXHRcdFx0XHRvdXQucHVzaChuYW1lc1tpXSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG91dDtcblx0fVxuXG5cdGZ1bmN0aW9uIHJlYnVpbGRHdWVzcyAoKSB7XG5cblx0XHQvLyB1c2UgSW50bCBBUEkgd2hlbiBhdmFpbGFibGUgYW5kIHJldHVybmluZyB2YWxpZCB0aW1lIHpvbmVcblx0XHR0cnkge1xuXHRcdFx0dmFyIGludGxOYW1lID0gSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLnRpbWVab25lO1xuXHRcdFx0aWYgKGludGxOYW1lICYmIGludGxOYW1lLmxlbmd0aCA+IDMpIHtcblx0XHRcdFx0dmFyIG5hbWUgPSBuYW1lc1tub3JtYWxpemVOYW1lKGludGxOYW1lKV07XG5cdFx0XHRcdGlmIChuYW1lKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG5hbWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0bG9nRXJyb3IoXCJNb21lbnQgVGltZXpvbmUgZm91bmQgXCIgKyBpbnRsTmFtZSArIFwiIGZyb20gdGhlIEludGwgYXBpLCBidXQgZGlkIG5vdCBoYXZlIHRoYXQgZGF0YSBsb2FkZWQuXCIpO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdC8vIEludGwgdW5hdmFpbGFibGUsIGZhbGwgYmFjayB0byBtYW51YWwgZ3Vlc3NpbmcuXG5cdFx0fVxuXG5cdFx0dmFyIG9mZnNldHMgPSB1c2VyT2Zmc2V0cygpLFxuXHRcdFx0b2Zmc2V0c0xlbmd0aCA9IG9mZnNldHMubGVuZ3RoLFxuXHRcdFx0Z3Vlc3NlcyA9IGd1ZXNzZXNGb3JVc2VyT2Zmc2V0cyhvZmZzZXRzKSxcblx0XHRcdHpvbmVTY29yZXMgPSBbXSxcblx0XHRcdHpvbmVTY29yZSwgaSwgajtcblxuXHRcdGZvciAoaSA9IDA7IGkgPCBndWVzc2VzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR6b25lU2NvcmUgPSBuZXcgWm9uZVNjb3JlKGdldFpvbmUoZ3Vlc3Nlc1tpXSksIG9mZnNldHNMZW5ndGgpO1xuXHRcdFx0Zm9yIChqID0gMDsgaiA8IG9mZnNldHNMZW5ndGg7IGorKykge1xuXHRcdFx0XHR6b25lU2NvcmUuc2NvcmVPZmZzZXRBdChvZmZzZXRzW2pdKTtcblx0XHRcdH1cblx0XHRcdHpvbmVTY29yZXMucHVzaCh6b25lU2NvcmUpO1xuXHRcdH1cblxuXHRcdHpvbmVTY29yZXMuc29ydChzb3J0Wm9uZVNjb3Jlcyk7XG5cblx0XHRyZXR1cm4gem9uZVNjb3Jlcy5sZW5ndGggPiAwID8gem9uZVNjb3Jlc1swXS56b25lLm5hbWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHRmdW5jdGlvbiBndWVzcyAoaWdub3JlQ2FjaGUpIHtcblx0XHRpZiAoIWNhY2hlZEd1ZXNzIHx8IGlnbm9yZUNhY2hlKSB7XG5cdFx0XHRjYWNoZWRHdWVzcyA9IHJlYnVpbGRHdWVzcygpO1xuXHRcdH1cblx0XHRyZXR1cm4gY2FjaGVkR3Vlc3M7XG5cdH1cblxuXHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cdFx0R2xvYmFsIE1ldGhvZHNcblx0KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cdGZ1bmN0aW9uIG5vcm1hbGl6ZU5hbWUgKG5hbWUpIHtcblx0XHRyZXR1cm4gKG5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFwvL2csICdfJyk7XG5cdH1cblxuXHRmdW5jdGlvbiBhZGRab25lIChwYWNrZWQpIHtcblx0XHR2YXIgaSwgbmFtZSwgc3BsaXQsIG5vcm1hbGl6ZWQ7XG5cblx0XHRpZiAodHlwZW9mIHBhY2tlZCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0cGFja2VkID0gW3BhY2tlZF07XG5cdFx0fVxuXG5cdFx0Zm9yIChpID0gMDsgaSA8IHBhY2tlZC5sZW5ndGg7IGkrKykge1xuXHRcdFx0c3BsaXQgPSBwYWNrZWRbaV0uc3BsaXQoJ3wnKTtcblx0XHRcdG5hbWUgPSBzcGxpdFswXTtcblx0XHRcdG5vcm1hbGl6ZWQgPSBub3JtYWxpemVOYW1lKG5hbWUpO1xuXHRcdFx0em9uZXNbbm9ybWFsaXplZF0gPSBwYWNrZWRbaV07XG5cdFx0XHRuYW1lc1tub3JtYWxpemVkXSA9IG5hbWU7XG5cdFx0XHRhZGRUb0d1ZXNzZXMobm9ybWFsaXplZCwgc3BsaXRbMl0uc3BsaXQoJyAnKSk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0Wm9uZSAobmFtZSwgY2FsbGVyKSB7XG5cblx0XHRuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKTtcblxuXHRcdHZhciB6b25lID0gem9uZXNbbmFtZV07XG5cdFx0dmFyIGxpbms7XG5cblx0XHRpZiAoem9uZSBpbnN0YW5jZW9mIFpvbmUpIHtcblx0XHRcdHJldHVybiB6b25lO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2Ygem9uZSA9PT0gJ3N0cmluZycpIHtcblx0XHRcdHpvbmUgPSBuZXcgWm9uZSh6b25lKTtcblx0XHRcdHpvbmVzW25hbWVdID0gem9uZTtcblx0XHRcdHJldHVybiB6b25lO1xuXHRcdH1cblxuXHRcdC8vIFBhc3MgZ2V0Wm9uZSB0byBwcmV2ZW50IHJlY3Vyc2lvbiBtb3JlIHRoYW4gMSBsZXZlbCBkZWVwXG5cdFx0aWYgKGxpbmtzW25hbWVdICYmIGNhbGxlciAhPT0gZ2V0Wm9uZSAmJiAobGluayA9IGdldFpvbmUobGlua3NbbmFtZV0sIGdldFpvbmUpKSkge1xuXHRcdFx0em9uZSA9IHpvbmVzW25hbWVdID0gbmV3IFpvbmUoKTtcblx0XHRcdHpvbmUuX3NldChsaW5rKTtcblx0XHRcdHpvbmUubmFtZSA9IG5hbWVzW25hbWVdO1xuXHRcdFx0cmV0dXJuIHpvbmU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXROYW1lcyAoKSB7XG5cdFx0dmFyIGksIG91dCA9IFtdO1xuXG5cdFx0Zm9yIChpIGluIG5hbWVzKSB7XG5cdFx0XHRpZiAobmFtZXMuaGFzT3duUHJvcGVydHkoaSkgJiYgKHpvbmVzW2ldIHx8IHpvbmVzW2xpbmtzW2ldXSkgJiYgbmFtZXNbaV0pIHtcblx0XHRcdFx0b3V0LnB1c2gobmFtZXNbaV0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBvdXQuc29ydCgpO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0Q291bnRyeU5hbWVzICgpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmtleXMoY291bnRyaWVzKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGFkZExpbmsgKGFsaWFzZXMpIHtcblx0XHR2YXIgaSwgYWxpYXMsIG5vcm1hbDAsIG5vcm1hbDE7XG5cblx0XHRpZiAodHlwZW9mIGFsaWFzZXMgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdGFsaWFzZXMgPSBbYWxpYXNlc107XG5cdFx0fVxuXG5cdFx0Zm9yIChpID0gMDsgaSA8IGFsaWFzZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGFsaWFzID0gYWxpYXNlc1tpXS5zcGxpdCgnfCcpO1xuXG5cdFx0XHRub3JtYWwwID0gbm9ybWFsaXplTmFtZShhbGlhc1swXSk7XG5cdFx0XHRub3JtYWwxID0gbm9ybWFsaXplTmFtZShhbGlhc1sxXSk7XG5cblx0XHRcdGxpbmtzW25vcm1hbDBdID0gbm9ybWFsMTtcblx0XHRcdG5hbWVzW25vcm1hbDBdID0gYWxpYXNbMF07XG5cblx0XHRcdGxpbmtzW25vcm1hbDFdID0gbm9ybWFsMDtcblx0XHRcdG5hbWVzW25vcm1hbDFdID0gYWxpYXNbMV07XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gYWRkQ291bnRyaWVzIChkYXRhKSB7XG5cdFx0dmFyIGksIGNvdW50cnlfY29kZSwgY291bnRyeV96b25lcywgc3BsaXQ7XG5cdFx0aWYgKCFkYXRhIHx8ICFkYXRhLmxlbmd0aCkgcmV0dXJuO1xuXHRcdGZvciAoaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRzcGxpdCA9IGRhdGFbaV0uc3BsaXQoJ3wnKTtcblx0XHRcdGNvdW50cnlfY29kZSA9IHNwbGl0WzBdLnRvVXBwZXJDYXNlKCk7XG5cdFx0XHRjb3VudHJ5X3pvbmVzID0gc3BsaXRbMV0uc3BsaXQoJyAnKTtcblx0XHRcdGNvdW50cmllc1tjb3VudHJ5X2NvZGVdID0gbmV3IENvdW50cnkoXG5cdFx0XHRcdGNvdW50cnlfY29kZSxcblx0XHRcdFx0Y291bnRyeV96b25lc1xuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRDb3VudHJ5IChuYW1lKSB7XG5cdFx0bmFtZSA9IG5hbWUudG9VcHBlckNhc2UoKTtcblx0XHRyZXR1cm4gY291bnRyaWVzW25hbWVdIHx8IG51bGw7XG5cdH1cblxuXHRmdW5jdGlvbiB6b25lc0ZvckNvdW50cnkoY291bnRyeSwgd2l0aF9vZmZzZXQpIHtcblx0XHRjb3VudHJ5ID0gZ2V0Q291bnRyeShjb3VudHJ5KTtcblxuXHRcdGlmICghY291bnRyeSkgcmV0dXJuIG51bGw7XG5cblx0XHR2YXIgem9uZXMgPSBjb3VudHJ5LnpvbmVzLnNvcnQoKTtcblxuXHRcdGlmICh3aXRoX29mZnNldCkge1xuXHRcdFx0cmV0dXJuIHpvbmVzLm1hcChmdW5jdGlvbiAoem9uZV9uYW1lKSB7XG5cdFx0XHRcdHZhciB6b25lID0gZ2V0Wm9uZSh6b25lX25hbWUpO1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdG5hbWU6IHpvbmVfbmFtZSxcblx0XHRcdFx0XHRvZmZzZXQ6IHpvbmUudXRjT2Zmc2V0KG5ldyBEYXRlKCkpXG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gem9uZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBsb2FkRGF0YSAoZGF0YSkge1xuXHRcdGFkZFpvbmUoZGF0YS56b25lcyk7XG5cdFx0YWRkTGluayhkYXRhLmxpbmtzKTtcblx0XHRhZGRDb3VudHJpZXMoZGF0YS5jb3VudHJpZXMpO1xuXHRcdHR6LmRhdGFWZXJzaW9uID0gZGF0YS52ZXJzaW9uO1xuXHR9XG5cblx0ZnVuY3Rpb24gem9uZUV4aXN0cyAobmFtZSkge1xuXHRcdGlmICghem9uZUV4aXN0cy5kaWRTaG93RXJyb3IpIHtcblx0XHRcdHpvbmVFeGlzdHMuZGlkU2hvd0Vycm9yID0gdHJ1ZTtcblx0XHRcdFx0bG9nRXJyb3IoXCJtb21lbnQudHouem9uZUV4aXN0cygnXCIgKyBuYW1lICsgXCInKSBoYXMgYmVlbiBkZXByZWNhdGVkIGluIGZhdm9yIG9mICFtb21lbnQudHouem9uZSgnXCIgKyBuYW1lICsgXCInKVwiKTtcblx0XHR9XG5cdFx0cmV0dXJuICEhZ2V0Wm9uZShuYW1lKTtcblx0fVxuXG5cdGZ1bmN0aW9uIG5lZWRzT2Zmc2V0IChtKSB7XG5cdFx0dmFyIGlzVW5peFRpbWVzdGFtcCA9IChtLl9mID09PSAnWCcgfHwgbS5fZiA9PT0gJ3gnKTtcblx0XHRyZXR1cm4gISEobS5fYSAmJiAobS5fdHptID09PSB1bmRlZmluZWQpICYmICFpc1VuaXhUaW1lc3RhbXApO1xuXHR9XG5cblx0ZnVuY3Rpb24gbG9nRXJyb3IgKG1lc3NhZ2UpIHtcblx0XHRpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBjb25zb2xlLmVycm9yID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuXHRcdH1cblx0fVxuXG5cdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblx0XHRtb21lbnQudHogbmFtZXNwYWNlXG5cdCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuXHRmdW5jdGlvbiB0eiAoaW5wdXQpIHtcblx0XHR2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCwgLTEpLFxuXHRcdFx0bmFtZSA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV0sXG5cdFx0XHR6b25lID0gZ2V0Wm9uZShuYW1lKSxcblx0XHRcdG91dCAgPSBtb21lbnQudXRjLmFwcGx5KG51bGwsIGFyZ3MpO1xuXG5cdFx0aWYgKHpvbmUgJiYgIW1vbWVudC5pc01vbWVudChpbnB1dCkgJiYgbmVlZHNPZmZzZXQob3V0KSkge1xuXHRcdFx0b3V0LmFkZCh6b25lLnBhcnNlKG91dCksICdtaW51dGVzJyk7XG5cdFx0fVxuXG5cdFx0b3V0LnR6KG5hbWUpO1xuXG5cdFx0cmV0dXJuIG91dDtcblx0fVxuXG5cdHR6LnZlcnNpb24gICAgICA9IFZFUlNJT047XG5cdHR6LmRhdGFWZXJzaW9uICA9ICcnO1xuXHR0ei5fem9uZXMgICAgICAgPSB6b25lcztcblx0dHouX2xpbmtzICAgICAgID0gbGlua3M7XG5cdHR6Ll9uYW1lcyAgICAgICA9IG5hbWVzO1xuXHR0ei5fY291bnRyaWVzXHQ9IGNvdW50cmllcztcblx0dHouYWRkICAgICAgICAgID0gYWRkWm9uZTtcblx0dHoubGluayAgICAgICAgID0gYWRkTGluaztcblx0dHoubG9hZCAgICAgICAgID0gbG9hZERhdGE7XG5cdHR6LnpvbmUgICAgICAgICA9IGdldFpvbmU7XG5cdHR6LnpvbmVFeGlzdHMgICA9IHpvbmVFeGlzdHM7IC8vIGRlcHJlY2F0ZWQgaW4gMC4xLjBcblx0dHouZ3Vlc3MgICAgICAgID0gZ3Vlc3M7XG5cdHR6Lm5hbWVzICAgICAgICA9IGdldE5hbWVzO1xuXHR0ei5ab25lICAgICAgICAgPSBab25lO1xuXHR0ei51bnBhY2sgICAgICAgPSB1bnBhY2s7XG5cdHR6LnVucGFja0Jhc2U2MCA9IHVucGFja0Jhc2U2MDtcblx0dHoubmVlZHNPZmZzZXQgID0gbmVlZHNPZmZzZXQ7XG5cdHR6Lm1vdmVJbnZhbGlkRm9yd2FyZCAgID0gdHJ1ZTtcblx0dHoubW92ZUFtYmlndW91c0ZvcndhcmQgPSBmYWxzZTtcblx0dHouY291bnRyaWVzICAgID0gZ2V0Q291bnRyeU5hbWVzO1xuXHR0ei56b25lc0ZvckNvdW50cnkgPSB6b25lc0ZvckNvdW50cnk7XG5cblx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXHRcdEludGVyZmFjZSB3aXRoIE1vbWVudC5qc1xuXHQqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cblx0dmFyIGZuID0gbW9tZW50LmZuO1xuXG5cdG1vbWVudC50eiA9IHR6O1xuXG5cdG1vbWVudC5kZWZhdWx0Wm9uZSA9IG51bGw7XG5cblx0bW9tZW50LnVwZGF0ZU9mZnNldCA9IGZ1bmN0aW9uIChtb20sIGtlZXBUaW1lKSB7XG5cdFx0dmFyIHpvbmUgPSBtb21lbnQuZGVmYXVsdFpvbmUsXG5cdFx0XHRvZmZzZXQ7XG5cblx0XHRpZiAobW9tLl96ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmICh6b25lICYmIG5lZWRzT2Zmc2V0KG1vbSkgJiYgIW1vbS5faXNVVEMpIHtcblx0XHRcdFx0bW9tLl9kID0gbW9tZW50LnV0Yyhtb20uX2EpLl9kO1xuXHRcdFx0XHRtb20udXRjKCkuYWRkKHpvbmUucGFyc2UobW9tKSwgJ21pbnV0ZXMnKTtcblx0XHRcdH1cblx0XHRcdG1vbS5feiA9IHpvbmU7XG5cdFx0fVxuXHRcdGlmIChtb20uX3opIHtcblx0XHRcdG9mZnNldCA9IG1vbS5fei51dGNPZmZzZXQobW9tKTtcblx0XHRcdGlmIChNYXRoLmFicyhvZmZzZXQpIDwgMTYpIHtcblx0XHRcdFx0b2Zmc2V0ID0gb2Zmc2V0IC8gNjA7XG5cdFx0XHR9XG5cdFx0XHRpZiAobW9tLnV0Y09mZnNldCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHZhciB6ID0gbW9tLl96O1xuXHRcdFx0XHRtb20udXRjT2Zmc2V0KC1vZmZzZXQsIGtlZXBUaW1lKTtcblx0XHRcdFx0bW9tLl96ID0gejtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1vbS56b25lKG9mZnNldCwga2VlcFRpbWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHRmbi50eiA9IGZ1bmN0aW9uIChuYW1lLCBrZWVwVGltZSkge1xuXHRcdGlmIChuYW1lKSB7XG5cdFx0XHRpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignVGltZSB6b25lIG5hbWUgbXVzdCBiZSBhIHN0cmluZywgZ290ICcgKyBuYW1lICsgJyBbJyArIHR5cGVvZiBuYW1lICsgJ10nKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuX3ogPSBnZXRab25lKG5hbWUpO1xuXHRcdFx0aWYgKHRoaXMuX3opIHtcblx0XHRcdFx0bW9tZW50LnVwZGF0ZU9mZnNldCh0aGlzLCBrZWVwVGltZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRsb2dFcnJvcihcIk1vbWVudCBUaW1lem9uZSBoYXMgbm8gZGF0YSBmb3IgXCIgKyBuYW1lICsgXCIuIFNlZSBodHRwOi8vbW9tZW50anMuY29tL3RpbWV6b25lL2RvY3MvIy9kYXRhLWxvYWRpbmcvLlwiKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRpZiAodGhpcy5feikgeyByZXR1cm4gdGhpcy5fei5uYW1lOyB9XG5cdH07XG5cblx0ZnVuY3Rpb24gYWJicldyYXAgKG9sZCkge1xuXHRcdHJldHVybiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRpZiAodGhpcy5feikgeyByZXR1cm4gdGhpcy5fei5hYmJyKHRoaXMpOyB9XG5cdFx0XHRyZXR1cm4gb2xkLmNhbGwodGhpcyk7XG5cdFx0fTtcblx0fVxuXG5cdGZ1bmN0aW9uIHJlc2V0Wm9uZVdyYXAgKG9sZCkge1xuXHRcdHJldHVybiBmdW5jdGlvbiAoKSB7XG5cdFx0XHR0aGlzLl96ID0gbnVsbDtcblx0XHRcdHJldHVybiBvbGQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0XHR9O1xuXHR9XG5cblx0ZnVuY3Rpb24gcmVzZXRab25lV3JhcDIgKG9sZCkge1xuXHRcdHJldHVybiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDApIHRoaXMuX3ogPSBudWxsO1xuXHRcdFx0cmV0dXJuIG9sZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHRcdH07XG5cdH1cblxuXHRmbi56b25lTmFtZSAgPSBhYmJyV3JhcChmbi56b25lTmFtZSk7XG5cdGZuLnpvbmVBYmJyICA9IGFiYnJXcmFwKGZuLnpvbmVBYmJyKTtcblx0Zm4udXRjICAgICAgID0gcmVzZXRab25lV3JhcChmbi51dGMpO1xuXHRmbi5sb2NhbCAgICAgPSByZXNldFpvbmVXcmFwKGZuLmxvY2FsKTtcblx0Zm4udXRjT2Zmc2V0ID0gcmVzZXRab25lV3JhcDIoZm4udXRjT2Zmc2V0KTtcblxuXHRtb21lbnQudHouc2V0RGVmYXVsdCA9IGZ1bmN0aW9uKG5hbWUpIHtcblx0XHRpZiAobWFqb3IgPCAyIHx8IChtYWpvciA9PT0gMiAmJiBtaW5vciA8IDkpKSB7XG5cdFx0XHRsb2dFcnJvcignTW9tZW50IFRpbWV6b25lIHNldERlZmF1bHQoKSByZXF1aXJlcyBNb21lbnQuanMgPj0gMi45LjAuIFlvdSBhcmUgdXNpbmcgTW9tZW50LmpzICcgKyBtb21lbnQudmVyc2lvbiArICcuJyk7XG5cdFx0fVxuXHRcdG1vbWVudC5kZWZhdWx0Wm9uZSA9IG5hbWUgPyBnZXRab25lKG5hbWUpIDogbnVsbDtcblx0XHRyZXR1cm4gbW9tZW50O1xuXHR9O1xuXG5cdC8vIENsb25pbmcgYSBtb21lbnQgc2hvdWxkIGluY2x1ZGUgdGhlIF96IHByb3BlcnR5LlxuXHR2YXIgbW9tZW50UHJvcGVydGllcyA9IG1vbWVudC5tb21lbnRQcm9wZXJ0aWVzO1xuXHRpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG1vbWVudFByb3BlcnRpZXMpID09PSAnW29iamVjdCBBcnJheV0nKSB7XG5cdFx0Ly8gbW9tZW50IDIuOC4xK1xuXHRcdG1vbWVudFByb3BlcnRpZXMucHVzaCgnX3onKTtcblx0XHRtb21lbnRQcm9wZXJ0aWVzLnB1c2goJ19hJyk7XG5cdH0gZWxzZSBpZiAobW9tZW50UHJvcGVydGllcykge1xuXHRcdC8vIG1vbWVudCAyLjcuMFxuXHRcdG1vbWVudFByb3BlcnRpZXMuX3ogPSBudWxsO1xuXHR9XG5cblx0Ly8gSU5KRUNUIERBVEFcblxuXHRyZXR1cm4gbW9tZW50O1xufSkpO1xuIiwidmFyIG1vbWVudCA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4vbW9tZW50LXRpbWV6b25lXCIpO1xubW9tZW50LnR6LmxvYWQocmVxdWlyZSgnLi9kYXRhL3BhY2tlZC9sYXRlc3QuanNvbicpKTtcbiIsImNvbnN0IHRyYW5zbGF0aW9ucyA9IHtcbiAgZGU6IHtcbiAgICBhZGRyZXNzOiAnQWRyZXNzZScsXG4gICAgJ2FkZHJlc3MtcGxhY2Utb3ItYnVzaW5lc3MnOiAnQWRyZXNzLCBPcnQgb3IgR2VzY2jDpGZ0JyxcbiAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnRsO8Z2UgWndpc2NoZW56aWVsIGhpbnp1JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwnOiAnU2V0IHN0b3AgZHVyYXRpb24gYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICdDbG9zZSBzdG9wIGR1cmF0aW9uIHNlbGVjdG9yIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICdPcGVuIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgYWlycGxhbmU6ICdGbHVnJyxcbiAgICBhcnJpdmFsOiAnQW5rdW5mdCcsXG4gICAgYmFjazogJ1p1csO8Y2snLFxuICAgIGJpa2VyZW50YWxzdGF0aW9uOiAnTGVpaHJhZC1TdGF0aW9uJyxcbiAgICBidXM6ICdCdXMnLFxuICAgIGNhbmNlbDogJ0FiYnJlY2hlbicsXG4gICAgJ2NsZWFyLWJ1dHRvbi1sYWJlbCc6ICdMw7ZzY2hlbicsXG4gICAgJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JzogJ1N1Y2hoaXN0b3JpZSBsw7ZzY2hlbicsXG4gICAgY3VycmVudHBvc2l0aW9uOiAnQWt0dWVsbGUgUG9zaXRpb24nLFxuICAgIGRlbGV0ZTogJ0zDtnNjaGVuJyxcbiAgICAnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInOiAnV29sbGVuIFNpZSBkaWUgU3VjaC1IaXN0b3JpZSBsw7ZzY2hlbj8nLFxuICAgIGRlcGFydHVyZTogJ0FiZmFocnQnLFxuICAgIGRlc3RpbmF0aW9uOiAnWmllbCcsXG4gICAgJ2dpdmUtb3JpZ2luJzogJ1N0YXJ0IGVpbmdlYmVuLicsXG4gICAgJ2dpdmUtZGVzdGluYXRpb24nOiAnWmllbCBlaW5nZWJlbi4nLFxuICAgIGZhdm91cml0ZTogJ0Zhdm9yaXRlbicsXG4gICAgZmVycnk6ICdGw6RocmUnLFxuICAgICdmdXR1cmUtcm91dGUnOiAnWnVrw7xuZnRpZ2UgVmVyYmluZHVuZycsXG4gICAgb3JpZ2luOiAnU3RhcnQnLFxuICAgICdvcmlnaW4tc3RvcC1uZWFyLXlvdSc6ICdTdGFydCcsXG4gICAgb3dubG9jYXRpb25zOiAnRWlnZW5lIEZhdm9yaXRlbicsXG4gICAgbG9hZGluZzogJ0xhZGVuLi4uJyxcbiAgICAnbWludXRlLXNob3J0JzogJ21pbicsXG4gICAgcmFpbDogJ1p1ZycsXG4gICAgc2VhcmNoOiAnU3VjaGUnLFxuICAgICdzZWFyY2gtYWRkcmVzcy1vci1wbGFjZSc6ICdTdWNoZSBhbmhhbmQgdm9uIEFkcmVzc2Ugb2RlciBPcnRzYW5nYWJlJyxcbiAgICAnc2VhcmNoLWJ1dHRvbi1sYWJlbCc6ICdTdWNoZScsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbic6ICdTdWNoZSBaaWVsb3J0LCBMaW5pZSBvciBIYWx0ZXN0ZWxsZScsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1pbmRleCc6ICdaaWVsb3J0IGVpbmdlYmVuJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLXJlc3VsdHMtYnV0LW5vLXNlYXJjaCc6XG4gICAgICAnRXJnZWJuaXNzZSBpbiDigJxaaWVsb3J04oCdLVJlaXRlciBhbnplaWdlbicsXG4gICAgJ3NlYXJjaC1uby1yZXN1bHRzJzogJ0tlaW4gT3J0IGdlZnVuZGVuLicsXG4gICAgJ3NlYXJjaC1vcmlnaW4nOiAnU3VjaGUgU3RhcnRvcnQsIExpbmllIG9kZXIgSGFsdGVzdGVsbGUnLFxuICAgICdzZWFyY2gtb3JpZ2luLWluZGV4JzogJ1N0YXJ0b3J0IGVpbmdlYmVuJyxcbiAgICAnc2VhcmNoLXBvc2l0aW9uJzogJ1N0YW5kb3J0IGVybWl0dGVsbicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1kZXNrdG9wJzpcbiAgICAgICdWZW51ZSwgcGxhY2UgYW5kIHN0b3BzZWFyY2guIE5hdmlnYXRlIGxpc3Qgd2l0aCBhcnJvdyBrZXlzIGFuZCBzZWxlY3Qgd2l0aCBlbnRlciBrZXknLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW9iaWxlJzogJ1ZlbnVlLCBwbGFjZSBhbmQgc3RvcHNlYXJjaC4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuJzogJ1RoZXJlIGlzIHt7Y291bnR9fSBzdWdnZXN0aW9uIGF2YWlsYWJsZScsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW5fcGx1cmFsJzpcbiAgICAgICdUaGVyZSBhcmUge3tjb3VudH19IHN1Z2dlc3Rpb25zIGF2YWlsYWJsZScsXG4gICAgJ3NlYXJjaC1jdXJyZW50LXN1Z2dlc3Rpb24nOiAnQWt0dWVsbGUgQXVzd2FobDoge3tzZWxlY3Rpb259fScsXG4gICAgc3RyZWV0OiAnU3RyYcOfZScsXG4gICAgc3Vid2F5OiAnVS1CYWhuJyxcbiAgICBzdGF0aW9uOiAnU3RhdGlvbicsXG4gICAgc3RvcDogJ0hhbHRlc3RlbGxlJyxcbiAgICAnc3RvcC1uZWFyLXlvdSc6ICdTdWNoZSBIYWx0ZXN0ZWxsZW4gdW5kIExpbmllbiBpbiBkZXIgTsOkaGUnLFxuICAgICdzdG9wLW5lYXIteW91LWJ1cyc6ICdTdWNoZSBCdXNsaW5pZW4gb3IgSGFsdGVzdGVsbGVuJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1jaXR5YmlrZSc6ICdTdWNoZSBMZWlocmFkLVN0YXRpb25lbicsXG4gICAgJ3N0b3AtbmVhci15b3UtcmFpbCc6ICdTdWNoZSBadWd2ZXJiaW5kdW5nZW4gb2RlciBCYWhuaMO2ZmUnLFxuICAgICdzdG9wLW5lYXIteW91LXN1YndheSc6ICdTdWNoZSBVLUJhaG4tTGluaWVuIG9kZXIgSGFsdGVzdGVsbGVuJyxcbiAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ1N1Y2hlIFN0YWR0YmFobi1IYWx0ZXN0ZWxsZW4tU3VjaGUnLFxuICAgICd0b2RheS1hdCc6ICdIZXV0ZSB1bScsXG4gICAgJ3RvbW9ycm93LWF0JzogJ01vcmdlbiB1bScsXG4gICAgdHJhbTogJ1N0cmHDn2VuYmFobicsXG4gICAgJ3VzZS1vd24tcG9zaXRpb24nOiAnQmVudXR6ZSBha3R1ZWxsZW4gU3RhbmRvcnQnLFxuICAgICdzZWxlY3QtZnJvbS1tYXAnOiAnV8OkaGxlIFBvc2l0aW9uIGFuaGFuZCBLYXJ0ZScsXG4gICAgJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnOiAnQXVzIGVpZ2VuZW4gRmF2b3JpdGVuIGF1c3fDpGhsZW4nLFxuICAgIHZlbnVlOiAnVmVudWUnLFxuICAgICd2aWEtcG9pbnQnOiAnWndpc2NoZW56aWVsJyxcbiAgICB3aGVyZTogJ1dvaGluPycsXG4gICAgcGxhY2U6ICdPcnQnLFxuICB9LFxuICBlbjoge1xuICAgIGFkZHJlc3M6ICdBZGRyZXNzJyxcbiAgICAnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcyc6ICdBZGRyZXNzLCBwbGFjZSBvciBidXNpbmVzcycsXG4gICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0FkZCB2aWEgcG9pbnQnLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6ICdTZXQgc3RvcCBkdXJhdGlvbiBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgJ0Nsb3NlIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgJ09wZW4gc3RvcCBkdXJhdGlvbiBzZWxlY3RvciBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICBhaXJwbGFuZTogJ0ZsaWdodCcsXG4gICAgYXJyaXZhbDogJ0Fycml2YWwnLFxuICAgIGJhY2s6ICdCYWNrJyxcbiAgICBiaWtlcGFyazogJ1BhcmsgJiBSaWRlIGZvciBiaWtlcycsXG4gICAgYmlrZXJlbnRhbHN0YXRpb246ICdCaWtlIHN0YXRpb24nLFxuICAgIGJ1czogJ2J1cycsXG4gICAgY2FuY2VsOiAnQ2FuY2VsJyxcbiAgICBjYXJwYXJrOiAnUGFyayAmIFJpZGUnLFxuICAgICdjbGVhci1idXR0b24tbGFiZWwnOiAnQ2xlYXInLFxuICAgICdjbGVhci1zZWFyY2gtaGlzdG9yeSc6ICdDbGVhciBzZWFyY2ggaGlzdG9yeScsXG4gICAgY3VycmVudHBvc2l0aW9uOiAnQ3VycmVudCBwb3NpdGlvbicsXG4gICAgZGVsZXRlOiAnRGVsZXRlJyxcbiAgICAnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInOiAnRG8geW91IHdhbnQgdG8gY2xlYXIgdGhlIHNlYXJjaCBoaXN0b3J5PycsXG4gICAgZGVwYXJ0dXJlOiAnRGVwYXJ0dXJlJyxcbiAgICBkZXN0aW5hdGlvbjogJ0Rlc3RpbmF0aW9uJyxcbiAgICAnZ2l2ZS1vcmlnaW4nOiAnRW50ZXIgeW91ciBvcmlnaW4uJyxcbiAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdFbnRlciB5b3VyIGRlc3RpbmF0aW9uJyxcbiAgICBmYXZvdXJpdGU6ICdGYXZvdXJpdGUnLFxuICAgIGZlcnJ5OiAnRmVycnknLFxuICAgICdmdXR1cmUtcm91dGUnOiAnRnV0dXJlIHJvdXRlJyxcbiAgICBvcmlnaW46ICdTdGFydCcsXG4gICAgJ29yaWdpbi1zdG9wLW5lYXIteW91JzogJ1N0YXJ0JyxcbiAgICBvd25sb2NhdGlvbnM6ICdPd24gbG9jYXRpb25zJyxcbiAgICBsb2FkaW5nOiAnTG9hZGluZy4uLicsXG4gICAgJ21pbnV0ZS1zaG9ydCc6ICdtJyxcbiAgICBwbGF0Zm9ybTogJ1BsYXRmb3JtJyxcbiAgICByYWlsOiAnVHJhaW4nLFxuICAgIHJlcXVpcmVkOiAncmVxdWlyZWQgZmllbGQnLFxuICAgIHNlYXJjaDogJ1NlYXJjaCcsXG4gICAgJ3NlYXJjaC1hZGRyZXNzLW9yLXBsYWNlJzogJ1NlYXJjaCBieSBhZGRyZXNzIG9yIHBsYWNlIG5hbWUnLFxuICAgICdzZWFyY2gtYnV0dG9uLWxhYmVsJzogJ1NlYXJjaCcsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbic6ICdTZWFyY2ggZGVzdGluYXRpb24sIHJvdXRlIG9yIHN0b3AnLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24taW5kZXgnOiAnRW50ZXIgZGVzdGluYXRpb24nLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24tcmVzdWx0cy1idXQtbm8tc2VhcmNoJzpcbiAgICAgICdWaWV3IHJlc3VsdHMgaW4gdGhlIGFkamFjZW50IOKAnERlc3RpbmF0aW9u4oCdIHRhYicsXG4gICAgJ3NlYXJjaC1uby1yZXN1bHRzJzogJ05vIGxvY2F0aW9uJyxcbiAgICAnc2VhcmNoLW9yaWdpbic6ICdTZWFyY2ggb3JpZ2luLCByb3V0ZSBvciBzdG9wJyxcbiAgICAnc2VhcmNoLW9yaWdpbi1pbmRleCc6ICdFbnRlciBvcmlnaW4nLFxuICAgICdzZWFyY2gtcG9zaXRpb24nOiAnRGV0ZWN0IGxvY2F0aW9uJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWRlc2t0b3AnOlxuICAgICAgJ1ZlbnVlLCBwbGFjZSBhbmQgc3RvcHNlYXJjaC4gTmF2aWdhdGUgbGlzdCB3aXRoIGFycm93IGtleXMgYW5kIHNlbGVjdCB3aXRoIGVudGVyIGtleScsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb2JpbGUnOlxuICAgICAgJ1ZlbnVlLCBwbGFjZSBhbmQgc3RvcHNlYXJjaC4gRW50ZXIgdGhlIGxvY2F0aW9uIGFuZCBuYXZpZ2F0ZSBpbiB0aGUgbGlzdCBieSBzd2lwaW5nLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nOiAnVGhlcmUgaXMge3tjb3VudH19IHN1Z2dlc3Rpb24gYXZhaWxhYmxlJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbl9wbHVyYWwnOlxuICAgICAgJ1RoZXJlIGFyZSB7e2NvdW50fX0gc3VnZ2VzdGlvbnMgYXZhaWxhYmxlJyxcbiAgICAnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbic6ICdDdXJyZW50IHNlbGVjdGlvbjoge3tzZWxlY3Rpb259fScsXG4gICAgc3RyZWV0OiAnU3RyZWV0JyxcbiAgICBzdWJ3YXk6ICdNZXRybycsXG4gICAgc3RhdGlvbjogJ1N0YXRpb24nLFxuICAgIHN0b3A6ICdTdG9wJyxcbiAgICAnc3RvcC1uZWFyLXlvdSc6ICdTZWFyY2ggc3RvcHMgYW5kIHJvdXRlcycsXG4gICAgJ3N0b3AtbmVhci15b3UtYWlycGxhbmUnOiAnU2VhcmNoIGZsaWdodHMgb3IgYWlycG9ydHMnLFxuICAgICdzdG9wLW5lYXIteW91LWJ1cyc6ICdTZWFyY2ggYnVzIHJvdXRlcyBvciBzdG9wcycsXG4gICAgJ3N0b3AtbmVhci15b3UtY2l0eWJpa2UnOiAnU2VhcmNoIGNpdHkgYmlrZSBzdGF0aW9ucycsXG4gICAgJ3N0b3AtbmVhci15b3UtcmFpbCc6ICdTZWFyY2ggdHJhaW4gcm91dGVzIG9yIHN0YXRpb25zJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1zdWJ3YXknOiAnU2VhcmNoIG1ldHJvIHJvdXRlcyBvciBzdGF0aW9ucyAnLFxuICAgICdzdG9wLW5lYXIteW91LXRyYW0nOiAnU2VhcmNoIHRyYW0gcm91dGVzIG9yIHN0b3BzJyxcbiAgICAnc3RvcC1yb3V0ZS1zdGF0aW9uJzogJ0J1cyBhbmQgc3RvcCBzZWFyY2gnLFxuICAgICd0b2RheS1hdCc6ICd0b2RheSBhdCcsXG4gICAgJ3RvbW9ycm93LWF0JzogJ3RvbW9ycm93IGF0JyxcbiAgICB0cmFtOiAnVHJhbScsXG4gICAgdHJhY2s6ICdUcmFjaycsXG4gICAgJ3VzZS1vd24tcG9zaXRpb24nOiAnVXNlIGN1cnJlbnQgbG9jYXRpb24nLFxuICAgICdzZWxlY3QtZnJvbS1tYXAnOiAnU2VsZWN0IHBvc2l0aW9uIGZyb20gbWFwJyxcbiAgICAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucyc6ICdTZWxlY3QgZnJvbSBvd24gbG9jYXRpb25zJyxcbiAgICB2ZW51ZTogJ1ZlbnVlJyxcbiAgICAndmlhLXBvaW50JzogJ1ZpYSBwb2ludCcsXG4gICAgd2hlcmU6ICdXaGVyZSB0bz8nLFxuICAgIHBsYWNlOiAnTG9jYXRpb24nLFxuICB9LFxuICBmaToge1xuICAgIGFkZHJlc3M6ICdPc29pdGUnLFxuICAgICdhZGRyZXNzLXBsYWNlLW9yLWJ1c2luZXNzJzogJ09zb2l0ZSwgcGFpa2thIHRhaSB5cml0eXMnLFxuICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdMaXPDpMOkIHbDpGxpcGlzdGUnLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAnQXNldGEgdsOkbGlwaXN0ZWVsbGUge3tpbmRleH19IHB5c8OkaGR5a3NlbiBrZXN0bycsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICdBdmFhIHbDpGxpcGlzdGVlbiB7e2luZGV4fX0gcHlzw6RoZHlrc2VuIGtlc3RvIHZhbGl0c2luJyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAnU3VsamUgdsOkbGlwaXN0ZWVuIHt7aW5kZXh9fSBweXPDpGhkeWtzZW4ga2VzdG8gdmFsaXRzaW4nLFxuICAgIGFpcnBsYW5lOiAnTGVudG9rb25lJyxcbiAgICBhcnJpdmFsOiAnUGVyaWxsw6QnLFxuICAgIGJhY2s6ICdUYWthaXNpbicsXG4gICAgYmlrZXJlbnRhbHN0YXRpb246ICdQecO2csOkYXNlbWEnLFxuICAgIGJpa2VwYXJrOiAnTGlpdHludMOkcHnDtnLDpHBhcmtraScsXG4gICAgYnVzOiAnYnVzc2knLFxuICAgIGNhbmNlbDogJ1BlcnV1dGEnLFxuICAgIGNhcnBhcms6ICdMaWl0eW50w6RweXPDpGtvaW50aScsXG4gICAgJ2NsZWFyLWJ1dHRvbi1sYWJlbCc6ICdUeWhqZW5uw6QnLFxuICAgICdjbGVhci1zZWFyY2gtaGlzdG9yeSc6ICdUeWhqZW5uw6QgaGFrdWhpc3RvcmlhJyxcbiAgICBjdXJyZW50cG9zaXRpb246ICdUw6Rtw6RuaGV0a2luZW4gc2lqYWludGknLFxuICAgIGRlbGV0ZTogJ1BvaXN0YScsXG4gICAgJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJzogJ0hhbHVhdGtvIHR5aGplbnTDpMOkIGhha3VoaXN0b3JpYW4/JyxcbiAgICBkZXBhcnR1cmU6ICdMw6RodMO2YWlrYScsXG4gICAgZGVzdGluYXRpb246ICdNw6TDpHLDpG5ww6TDpCcsXG4gICAgZmF2b3VyaXRlOiAnU3Vvc2lra2knLFxuICAgIGZlcnJ5OiAnTGF1dHRhJyxcbiAgICAnZnV0dXJlLXJvdXRlJzogJ1R1bGV2YSByZWl0dGknLFxuICAgICdnaXZlLW9yaWdpbic6ICdMw6RodMO2cGFpa2thJyxcbiAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdNw6TDpHLDpG5ww6TDpCcsXG4gICAgb3JpZ2luOiAnTMOkaHTDtnBhaWtrYScsXG4gICAgJ29yaWdpbi1zdG9wLW5lYXIteW91JzogJ0zDpGh0w7ZwYWlra2EnLFxuICAgIG93bmxvY2F0aW9uczogJ09tYXQgcGFpa2F0JyxcbiAgICBsb2FkaW5nOiAnTGFkYXRhYW4uLi4nLFxuICAgICdtaW51dGUtc2hvcnQnOiAnbWluJyxcbiAgICBwbGF0Zm9ybTogJ0xhaXR1cmknLFxuICAgIHJhaWw6ICdKdW5hJyxcbiAgICByZXF1aXJlZDogJ3Bha29sbGluZW4ga2VudHTDpCcsXG4gICAgc2VhcmNoOiAnRXRzaScsXG4gICAgJ3NlYXJjaC1hZGRyZXNzLW9yLXBsYWNlJzogJ0hhZSBvc29pdHRlZWxsYSB0YWkgcGFpa2FuIG5pbWVsbMOkJyxcbiAgICAnc2VhcmNoLWJ1dHRvbi1sYWJlbCc6ICdIYWUnLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24nOiAnSGFlIG3DpMOkcsOkbnDDpMOkdMOkLCBsaW5qYWEgdGFpIHB5c8Oka2tpw6QnLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24taW5kZXgnOiAnU3nDtnTDpCBtw6TDpHLDpG5ww6TDpCcsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1yZXN1bHRzLWJ1dC1uby1zZWFyY2gnOlxuICAgICAgJ0thdHNvIHR1bG9rc2V0IHZpZXJlaXNlbHTDpCBNw6TDpHLDpG5ww6TDpC12w6RsaWxlaGRlbHTDpCcsXG4gICAgJ3NlYXJjaC1uby1yZXN1bHRzJzogJ0VpIHR1bG9rc2lhJyxcbiAgICAnc2VhcmNoLW9yaWdpbic6ICdIYWUgbMOkaHTDtnBhaWtrYWEsIGxpbmphYSB0YWkgcHlzw6Rra2nDpCcsXG4gICAgJ3NlYXJjaC1vcmlnaW4taW5kZXgnOiAnU3nDtnTDpCBsw6RodMO2cGFpa2thJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWRlc2t0b3AnOlxuICAgICAgJ1BhaWtrYSwgbGluamEgamEgcHlzw6Rra2loYWt1LiBOYXZpZ29pIGxpc3Rhc3NhIG51b2xpbsOkcHDDpGltaWxsw6QgamEgdmFsaXRzZSBlbnRlcmlsbMOkJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLW1vYmlsZSc6XG4gICAgICAnUGFpa2thLCBsaW5qYSBqYSBweXPDpGtraWhha3UuIFN5w7Z0w6Qgc2lqYWludGkgamEgbmF2aWdvaSBsaXN0YXNzYSBweXloa8OkaXNlbcOkbGzDpC4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuJzogJyBMw7Z5ZGV0dGlpbiB7e2NvdW50fX0gZWhkb3R1cycsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW5fcGx1cmFsJzogJyBMw7Z5ZGV0dGlpbiB7e2NvdW50fX0gZWhkb3R1c3RhJyxcbiAgICAnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbic6ICdUw6Rtw6RuaGV0a2luZW4gdmFsaW50YToge3tzZWxlY3Rpb259fScsXG4gICAgJ3NlYXJjaC1wb3NpdGlvbic6ICdQYWlrYW5uYScsXG4gICAgc3RyZWV0OiAnS2F0dScsXG4gICAgc3Vid2F5OiAnTWV0cm8nLFxuICAgIHN0YXRpb246ICdBc2VtYScsXG4gICAgc3RvcDogJ1B5c8Oka2tpJyxcbiAgICAnc3RvcC1uZWFyLXlvdSc6ICdMaW5qYSwgcHlzw6Rra2kgdGFpIGFzZW1hJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1haXJwbGFuZSc6ICdIYWUgbGVudG9qYSB0YWkgbGVudG9hc2VtYWEnLFxuICAgICdzdG9wLW5lYXIteW91LWJ1cyc6ICdIYWUgYnVzc2lsaW5qYWEgdGFpIHB5c8Oka2tpw6QnLFxuICAgICdzdG9wLW5lYXIteW91LWNpdHliaWtlJzogJ0hhZSBrYXVwdW5raXB5w7Zyw6Rhc2VtYWEnLFxuICAgICdzdG9wLW5lYXIteW91LXJhaWwnOiAnSGFlIGzDpGhpanVuYWEgdGFpIGFzZW1hYScsXG4gICAgJ3N0b3AtbmVhci15b3Utc3Vid2F5JzogJ0hhZSBtZXRyb2xpbmphYSB0YWkgYXNlbWFhJyxcbiAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ0hhZSByYWl0aW9saW5qYWEgdGFpIHB5c8Oka2tpw6QnLFxuICAgICdzdG9wLXJvdXRlLXN0YXRpb24nOiAnTGluamEtIGphIHB5c8Oka2tpaGFrdScsXG4gICAgJ3RvZGF5LWF0JzogJ3TDpG7DpMOkbiBrbG8nLFxuICAgICd0b21vcnJvdy1hdCc6ICdodW9tZW5uYSBrbG8nLFxuICAgIHRyYW06ICdSYWl0aW92YXVudScsXG4gICAgdHJhY2s6ICdSYWlkZScsXG4gICAgJ3VzZS1vd24tcG9zaXRpb24nOiAnS8OkeXTDpCBueWt5aXN0w6Qgc2lqYWludGlhJyxcbiAgICAnc2VsZWN0LWZyb20tbWFwJzogJ1ZhbGl0c2Ugc2lqYWludGkga2FydGFsdGEnLFxuICAgICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJzogJ1ZhbGl0c2Ugb21pc3RhIHBhaWtvaXN0YScsXG4gICAgdmVudWU6ICdQYWlra2EnLFxuICAgICd2aWEtcG9pbnQnOiAnVsOkbGlwaXN0ZScsXG4gICAgd2hlcmU6ICdNaW5uZSBtZW5uw6TDpG4/JyxcbiAgICBwbGFjZTogJ1BhaWtrYScsXG4gIH0sXG4gIHN2OiB7XG4gICAgYWRkcmVzczogJ0FkcmVzcycsXG4gICAgJ2FkZHJlc3MtcGxhY2Utb3ItYnVzaW5lc3MnOiAnQWRyZXNzLCBwbGF0cyBlbGxlciBmw7ZyZXRhZycsXG4gICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0zDpGdnIHRpbGwgdmlhcHVua3QnLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAnU3TDpGxsIGluIHZhcmFrdGlnaGV0IGbDtnIgdmlhcHVua3RlbiB7e2luZGV4fX0nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAnU3TDpG5nIHbDpGxqYXJlbiBmw7ZyIHZhcmFrdGlnaGV0IHZpZCB2aWEtcHVua3RlbiB7e2luZGV4fX0nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICfDlnBwbmEgdsOkbGphcmVuIGbDtnIgdmFyYWt0aWdoZXQgdmlkIHZpYS1wdW5rdGVuIHt7aW5kZXh9fScsXG4gICAgYWlycGxhbmU6ICdGbHlnJyxcbiAgICBhcnJpdmFsOiAnQW5sw6RuZGVyJyxcbiAgICBiYWNrOiAnVGlsbGJha2EnLFxuICAgIGJpa2VyZW50YWxzdGF0aW9uOiAnU3RhZHNjeWtlbHN0YXRpb24nLFxuICAgIGJpa2VwYXJrOiAnQW5zbHV0bmluZ3NwYXJrZXJpbmcgZsO2ciBjeWtsYXInLFxuICAgIGJ1czogJ0J1c3NpJyxcbiAgICBjYW5jZWw6ICdBdmJyeXQnLFxuICAgIGNhcnBhcms6ICdJbmZhcnRzcGFya2VyaW5nJyxcbiAgICAnY2xlYXItYnV0dG9uLWxhYmVsJzogJ1TDtm0nLFxuICAgICdjbGVhci1zZWFyY2gtaGlzdG9yeSc6ICdUw7ZtIHPDtmtoaXN0b3Jpa2VuJyxcbiAgICBjdXJyZW50cG9zaXRpb246ICdOdXZhcmFuZGUgcG9zaXRpb24nLFxuICAgIGRlbGV0ZTogJ1RhIGJvcnQnLFxuICAgICdkZWxldGUtb2xkLXNlYXJjaGVzLWhlYWRlcic6ICdWaWxsIGR1IHTDtm1tYSBzw7ZraGlzdG9yaWtlbj8nLFxuICAgIGRlcGFydHVyZTogJ0F2Z8OlbmdzdGlkJyxcbiAgICBkZXN0aW5hdGlvbjogJ0Rlc3RpbmF0aW9uJyxcbiAgICBmYXZvdXJpdGU6ICdGYXZvcml0JyxcbiAgICBmZXJyeTogJ0bDpHJqYScsXG4gICAgJ2Z1dHVyZS1yb3V0ZSc6ICdGcmFtdGlkYSBydXR0JyxcbiAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdTa3JpdiBpbiBkaW4gZGVzdGluYXRpb24nLFxuICAgICdnaXZlLW9yaWdpbic6ICdTa3JpdiBpbiBkaW4gYXZmw6RyZHNwbGF0cycsXG4gICAgb3JpZ2luOiAnQXZmw6RyZHNwbGF0cycsXG4gICAgJ29yaWdpbi1zdG9wLW5lYXIteW91JzogJ0F2ZsOkcmRzcGxhdHMnLFxuICAgIG93bmxvY2F0aW9uczogJ0VnbmEgcGxhdHNlcicsXG4gICAgbG9hZGluZzogJ0xhZGRhci4uLicsXG4gICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4nLFxuICAgIHBsYXRmb3JtOiAnUGxhdHRmb3JtJyxcbiAgICByYWlsOiAnVMOlZycsXG4gICAgcmVxdWlyZWQ6ICdvYmxpZ2F0b3Jpc2t0IGbDpGx0JyxcbiAgICBzZWFyY2g6ICdTw7ZrJyxcbiAgICAnc2VhcmNoLWFkZHJlc3Mtb3ItcGxhY2UnOiAnU8O2ayBtZWQgYWRyZXNzZW4gZWxsZXIgcGxhdHNlbnMgbmFtbicsXG4gICAgJ3NlYXJjaC1idXR0b24tbGFiZWwnOiAnU8O2aycsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbic6ICdTw7ZrIGRlc3RpbmF0aW9uLCBsaW5qZSBlbGxlciBow6VsbHBsYXRzJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLWluZGV4JzogJ1Nrcml2IGRlc3RpbmF0aW9uJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLXJlc3VsdHMtYnV0LW5vLXNlYXJjaCc6XG4gICAgICAnU2UgcmVzdWx0YXRlbiB1bmRlciBmbGlrZW4gRGVzdGluYXRpb24nLFxuICAgICdzZWFyY2gtbm8tcmVzdWx0cyc6ICdJbmdhIHPDtmtyZXN1bHRhdCcsXG4gICAgJ3NlYXJjaC1vcmlnaW4nOiAnU8O2ayBhdmbDpHJkc3BsYXRzLCBsaW5qZSBlbGxlciBow6VsbHBsYXRzJyxcbiAgICAnc2VhcmNoLW9yaWdpbi1pbmRleCc6ICdTa3JpdiBhdmbDpHJkc3BsYXRzJyxcbiAgICAnc2VhcmNoLXBvc2l0aW9uJzogJ1PDtmsgcG9zaXRpb24nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtZGVza3RvcCc6XG4gICAgICAnUGxhdHMsIGxpbmplIG9jaCBow6VsbHBsYXRzc8O2a25pbmcuIE5hdmlnZXJhIGxpc3RhbiBtZWQgcGlsdGFuZ2VudGVybmEgb2NoIHbDpGxqIG1lZCBFbnRlci10YW5nZXRlbicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb2JpbGUnOlxuICAgICAgJ1BsYXRzLCBsaW5qZSBvY2ggaMOlbGxwbGF0c3PDtmtuaW5nLiBBbmdlIHBsYXRzZW4gb2NoIG5hdmlnZXJhIGkgbGlzdGFuIGdlbm9tIGF0dCBzdmVwYS4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuJzogJ0hpdHRhZGUge3tjb3VudH19IGbDtnJzbGFnJyxcbiAgICAnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbic6ICdOdXZhcmFuZGUgdmFsOiB7e3NlbGVjdGlvbn19JyxcbiAgICBzdHJlZXQ6ICdHYXRhJyxcbiAgICBzdWJ3YXk6ICdNZXRybycsXG4gICAgc3RhdGlvbjogJ1N0YXRpb24nLFxuICAgIHN0b3A6ICdIw6VsbHBsYXRzJyxcbiAgICAnc3RvcC1uZWFyLXlvdSc6ICdTw7ZrIGjDpWxscGxhdHNlciBlbGxlciBsaW5qZXInLFxuICAgICdzdG9wLW5lYXIteW91LWFpcnBsYW5lJzogJ1PDtmsgZmx5ZyBlbGxlciBmbHlncGxhdHNlcicsXG4gICAgJ3N0b3AtbmVhci15b3UtYnVzJzogJ1PDtmsgYnVzc2xpbmplciBlbGxlciBow6VsbHBsYXRzZXInLFxuICAgICdzdG9wLW5lYXIteW91LWNpdHliaWtlJzogJ1PDtmsgc3RhZHNjeWtlbHN0YXRpb25lcicsXG4gICAgJ3N0b3AtbmVhci15b3UtcmFpbCc6ICdTw7ZrIG7DpHJ0w6VnZXIgZWxsZXIgc3RhdGlvbmVyJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1zdWJ3YXknOiAnU8O2ayBtZXRyb2xpbmplciBlbGxlciBzdGF0aW9uZXInLFxuICAgICdzdG9wLW5lYXIteW91LXRyYW0nOiAnU8O2ayBzcMOlcnZhZ25saW5qZXIgZWxsZXIgaMOlbGxwbGF0c2VyJyxcbiAgICAnc3RvcC1yb3V0ZS1zdGF0aW9uJzogJ0J1c3Mgb2NoIHN0b3BwIHPDtmtuaW5nZW4nLFxuICAgICd0b2RheS1hdCc6ICdpIGRhZyBrbCcsXG4gICAgJ3RvbW9ycm93LWF0JzogJ2kgbW9yZ29uJyxcbiAgICB0cmFtOiAnU3DDpXJ2YWduJyxcbiAgICB0cmFjazogJ1Nww6VyJyxcbiAgICAndXNlLW93bi1wb3NpdGlvbic6ICdBbnbDpG5kIG1pbiBwb3NpdGlvbicsXG4gICAgJ3NlbGVjdC1mcm9tLW1hcCc6ICdWw6RsaiBwb3NpdGlvbiBmcsOlbiBrYXJ0YW4nLFxuICAgICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJzogJ1bDpGxqIGZyw6VuIGVnbmEgcGxhdHNlcicsXG4gICAgdmVudWU6ICdNw7Z0ZXNwbGF0cycsXG4gICAgJ3ZpYS1wb2ludCc6ICdWaWEgcHVua3QnLFxuICAgIHdoZXJlOiAnVmFydCB2aWxsIGR1IMOla2E/JyxcbiAgICBwbGFjZTogJ1BsYXRzJyxcbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHRyYW5zbGF0aW9ucztcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBGaW5uaXNoIFtmaV1cbi8vISBhdXRob3IgOiBUYXJtbyBBaWRhbnRhdXN0YSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9ibGVhZG9mXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbnVtYmVyc1Bhc3QgPSAnbm9sbGEgeWtzaSBrYWtzaSBrb2xtZSBuZWxqw6Qgdmlpc2kga3V1c2kgc2VpdHNlbcOkbiBrYWhkZWtzYW4geWhkZWtzw6RuJy5zcGxpdChcbiAgICAgICAgICAgICcgJ1xuICAgICAgICApLFxuICAgICAgICBudW1iZXJzRnV0dXJlID0gW1xuICAgICAgICAgICAgJ25vbGxhJyxcbiAgICAgICAgICAgICd5aGRlbicsXG4gICAgICAgICAgICAna2FoZGVuJyxcbiAgICAgICAgICAgICdrb2xtZW4nLFxuICAgICAgICAgICAgJ25lbGrDpG4nLFxuICAgICAgICAgICAgJ3ZpaWRlbicsXG4gICAgICAgICAgICAna3V1ZGVuJyxcbiAgICAgICAgICAgIG51bWJlcnNQYXN0WzddLFxuICAgICAgICAgICAgbnVtYmVyc1Bhc3RbOF0sXG4gICAgICAgICAgICBudW1iZXJzUGFzdFs5XSxcbiAgICAgICAgXTtcbiAgICBmdW5jdGlvbiB0cmFuc2xhdGUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSAnJztcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ3MnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc0Z1dHVyZSA/ICdtdXV0YW1hbiBzZWt1bm5pbicgOiAnbXV1dGFtYSBzZWt1bnRpJztcbiAgICAgICAgICAgIGNhc2UgJ3NzJzpcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpc0Z1dHVyZSA/ICdzZWt1bm5pbicgOiAnc2VrdW50aWEnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ21pbnV1dGluJyA6ICdtaW51dXR0aSc7XG4gICAgICAgICAgICBjYXNlICdtbSc6XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaXNGdXR1cmUgPyAnbWludXV0aW4nIDogJ21pbnV1dHRpYSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdoJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAndHVubmluJyA6ICd0dW50aSc7XG4gICAgICAgICAgICBjYXNlICdoaCc6XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaXNGdXR1cmUgPyAndHVubmluJyA6ICd0dW50aWEnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ3DDpGl2w6RuJyA6ICdww6RpdsOkJztcbiAgICAgICAgICAgIGNhc2UgJ2RkJzpcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpc0Z1dHVyZSA/ICdww6RpdsOkbicgOiAncMOkaXbDpMOkJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc0Z1dHVyZSA/ICdrdXVrYXVkZW4nIDogJ2t1dWthdXNpJztcbiAgICAgICAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpc0Z1dHVyZSA/ICdrdXVrYXVkZW4nIDogJ2t1dWthdXR0YSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd5JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAndnVvZGVuJyA6ICd2dW9zaSc7XG4gICAgICAgICAgICBjYXNlICd5eSc6XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaXNGdXR1cmUgPyAndnVvZGVuJyA6ICd2dW90dGEnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCA9IHZlcmJhbE51bWJlcihudW1iZXIsIGlzRnV0dXJlKSArICcgJyArIHJlc3VsdDtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgZnVuY3Rpb24gdmVyYmFsTnVtYmVyKG51bWJlciwgaXNGdXR1cmUpIHtcbiAgICAgICAgcmV0dXJuIG51bWJlciA8IDEwXG4gICAgICAgICAgICA/IGlzRnV0dXJlXG4gICAgICAgICAgICAgICAgPyBudW1iZXJzRnV0dXJlW251bWJlcl1cbiAgICAgICAgICAgICAgICA6IG51bWJlcnNQYXN0W251bWJlcl1cbiAgICAgICAgICAgIDogbnVtYmVyO1xuICAgIH1cblxuICAgIHZhciBmaSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2ZpJywge1xuICAgICAgICBtb250aHM6ICd0YW1taWt1dV9oZWxtaWt1dV9tYWFsaXNrdXVfaHVodGlrdXVfdG91a29rdXVfa2Vzw6RrdXVfaGVpbsOka3V1X2Vsb2t1dV9zeXlza3V1X2xva2FrdXVfbWFycmFza3V1X2pvdWx1a3V1Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ3RhbW1pX2hlbG1pX21hYWxpc19odWh0aV90b3Vrb19rZXPDpF9oZWluw6RfZWxvX3N5eXNfbG9rYV9tYXJyYXNfam91bHUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAnc3VubnVudGFpX21hYW5hbnRhaV90aWlzdGFpX2tlc2tpdmlpa2tvX3RvcnN0YWlfcGVyamFudGFpX2xhdWFudGFpJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnc3VfbWFfdGlfa2VfdG9fcGVfbGEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnc3VfbWFfdGlfa2VfdG9fcGVfbGEnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hILm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hILm1tLnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRG8gTU1NTVt0YV0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEbyBNTU1NW3RhXSBZWVlZLCBba2xvXSBISC5tbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRG8gTU1NTVt0YV0gWVlZWSwgW2tsb10gSEgubW0nLFxuICAgICAgICAgICAgbDogJ0QuTS5ZWVlZJyxcbiAgICAgICAgICAgIGxsOiAnRG8gTU1NIFlZWVknLFxuICAgICAgICAgICAgbGxsOiAnRG8gTU1NIFlZWVksIFtrbG9dIEhILm1tJyxcbiAgICAgICAgICAgIGxsbGw6ICdkZGQsIERvIE1NTSBZWVlZLCBba2xvXSBISC5tbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW3TDpG7DpMOkbl0gW2tsb10gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1todW9tZW5uYV0gW2tsb10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtrbG9dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbZWlsZW5dIFtrbG9dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW3ZpaW1lXSBkZGRkW25hXSBba2xvXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzIHDDpMOkc3TDpCcsXG4gICAgICAgICAgICBwYXN0OiAnJXMgc2l0dGVuJyxcbiAgICAgICAgICAgIHM6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHNzOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGRkOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNTTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeXk6IHRyYW5zbGF0ZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBmaTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTd2VkaXNoIFtzdl1cbi8vISBhdXRob3IgOiBKZW5zIEFsbSA6IGh0dHBzOi8vZ2l0aHViLmNvbS91bG11c1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN2ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnc3YnLCB7XG4gICAgICAgIG1vbnRoczogJ2phbnVhcmlfZmVicnVhcmlfbWFyc19hcHJpbF9tYWpfanVuaV9qdWxpX2F1Z3VzdGlfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnamFuX2ZlYl9tYXJfYXByX21hal9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnc8O2bmRhZ19tw6VuZGFnX3Rpc2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdfbMO2cmRhZycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ3PDtm5fbcOlbl90aXNfb25zX3Rvcl9mcmVfbMO2cicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdzw7ZfbcOlX3RpX29uX3RvX2ZyX2zDticuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ1lZWVktTU0tREQnLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBba2wuXSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBba2wuXSBISDptbScsXG4gICAgICAgICAgICBsbGw6ICdEIE1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIGxsbGw6ICdkZGQgRCBNTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0lkYWddIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbSW1vcmdvbl0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tJZ8Olcl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdbUMOlXSBkZGRkIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0ldIGRkZGRbc10gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdvbSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnZsO2ciAlcyBzZWRhbicsXG4gICAgICAgICAgICBzOiAnbsOlZ3JhIHNla3VuZGVyJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2VrdW5kZXInLFxuICAgICAgICAgICAgbTogJ2VuIG1pbnV0JyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRlcicsXG4gICAgICAgICAgICBoOiAnZW4gdGltbWUnLFxuICAgICAgICAgICAgaGg6ICclZCB0aW1tYXInLFxuICAgICAgICAgICAgZDogJ2VuIGRhZycsXG4gICAgICAgICAgICBkZDogJyVkIGRhZ2FyJyxcbiAgICAgICAgICAgIE06ICdlbiBtw6VuYWQnLFxuICAgICAgICAgICAgTU06ICclZCBtw6VuYWRlcicsXG4gICAgICAgICAgICB5OiAnZXR0IMOlcicsXG4gICAgICAgICAgICB5eTogJyVkIMOlcicsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShcXDplfFxcOmEpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgICAgICB+figobnVtYmVyICUgMTAwKSAvIDEwKSA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnOmUnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJzphJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICc6YSdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gM1xuICAgICAgICAgICAgICAgICAgICAgICAgPyAnOmUnXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICc6ZSc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3Y7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogR2VybWFuIFtkZV1cbi8vISBhdXRob3IgOiBsbHVjaHMgOiBodHRwczovL2dpdGh1Yi5jb20vbGx1Y2hzXG4vLyEgYXV0aG9yOiBNZW5lbGlvbiBFbGVuc8O6bGU6IGh0dHBzOi8vZ2l0aHViLmNvbS9PaXJlXG4vLyEgYXV0aG9yIDogTWlrb2xhaiBEYWRlbGEgOiBodHRwczovL2dpdGh1Yi5jb20vbWlrMDFhalxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc1JlbGF0aXZlVGltZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHtcbiAgICAgICAgICAgIG06IFsnZWluZSBNaW51dGUnLCAnZWluZXIgTWludXRlJ10sXG4gICAgICAgICAgICBoOiBbJ2VpbmUgU3R1bmRlJywgJ2VpbmVyIFN0dW5kZSddLFxuICAgICAgICAgICAgZDogWydlaW4gVGFnJywgJ2VpbmVtIFRhZyddLFxuICAgICAgICAgICAgZGQ6IFtudW1iZXIgKyAnIFRhZ2UnLCBudW1iZXIgKyAnIFRhZ2VuJ10sXG4gICAgICAgICAgICB3OiBbJ2VpbmUgV29jaGUnLCAnZWluZXIgV29jaGUnXSxcbiAgICAgICAgICAgIE06IFsnZWluIE1vbmF0JywgJ2VpbmVtIE1vbmF0J10sXG4gICAgICAgICAgICBNTTogW251bWJlciArICcgTW9uYXRlJywgbnVtYmVyICsgJyBNb25hdGVuJ10sXG4gICAgICAgICAgICB5OiBbJ2VpbiBKYWhyJywgJ2VpbmVtIEphaHInXSxcbiAgICAgICAgICAgIHl5OiBbbnVtYmVyICsgJyBKYWhyZScsIG51bWJlciArICcgSmFocmVuJ10sXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gZm9ybWF0W2tleV1bMF0gOiBmb3JtYXRba2V5XVsxXTtcbiAgICB9XG5cbiAgICB2YXIgZGUgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdkZScsIHtcbiAgICAgICAgbW9udGhzOiAnSmFudWFyX0ZlYnJ1YXJfTcOkcnpfQXByaWxfTWFpX0p1bmlfSnVsaV9BdWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGV6ZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSmFuLl9GZWIuX03DpHJ6X0Fwci5fTWFpX0p1bmlfSnVsaV9BdWcuX1NlcC5fT2t0Ll9Ob3YuX0Rlei4nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAnU29ubnRhZ19Nb250YWdfRGllbnN0YWdfTWl0dHdvY2hfRG9ubmVyc3RhZ19GcmVpdGFnX1NhbXN0YWcnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdTby5fTW8uX0RpLl9NaS5fRG8uX0ZyLl9TYS4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU29fTW9fRGlfTWlfRG9fRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBELiBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1toZXV0ZSB1bV0gTFQgW1Vocl0nLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbbW9yZ2VuIHVtXSBMVCBbVWhyXScsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW3VtXSBMVCBbVWhyXScsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2dlc3Rlcm4gdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW2xldHp0ZW5dIGRkZGQgW3VtXSBMVCBbVWhyXScsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnaW4gJXMnLFxuICAgICAgICAgICAgcGFzdDogJ3ZvciAlcycsXG4gICAgICAgICAgICBzOiAnZWluIHBhYXIgU2VrdW5kZW4nLFxuICAgICAgICAgICAgc3M6ICclZCBTZWt1bmRlbicsXG4gICAgICAgICAgICBtOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgbW06ICclZCBNaW51dGVuJyxcbiAgICAgICAgICAgIGg6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBoaDogJyVkIFN0dW5kZW4nLFxuICAgICAgICAgICAgZDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGRkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgdzogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHd3OiAnJWQgV29jaGVuJyxcbiAgICAgICAgICAgIE06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5eTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBkZTtcblxufSkpKTtcbiIsImZ1bmN0aW9uIHN0eWxlSW5qZWN0KGNzcywgcmVmKSB7XG4gIGlmICggcmVmID09PSB2b2lkIDAgKSByZWYgPSB7fTtcbiAgdmFyIGluc2VydEF0ID0gcmVmLmluc2VydEF0O1xuXG4gIGlmICghY3NzIHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuOyB9XG5cbiAgdmFyIGhlYWQgPSBkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG4gIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHN0eWxlLnR5cGUgPSAndGV4dC9jc3MnO1xuXG4gIGlmIChpbnNlcnRBdCA9PT0gJ3RvcCcpIHtcbiAgICBpZiAoaGVhZC5maXJzdENoaWxkKSB7XG4gICAgICBoZWFkLmluc2VydEJlZm9yZShzdHlsZSwgaGVhZC5maXJzdENoaWxkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICB9XG5cbiAgaWYgKHN0eWxlLnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG4gIH0gZWxzZSB7XG4gICAgc3R5bGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgc3R5bGVJbmplY3Q7XG4iLCJpbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0TW9kYWwgZnJvbSAncmVhY3QtbW9kYWwnO1xuaW1wb3J0IGN4IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IEljb24gZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtaWNvbic7XG5pbXBvcnQgRGlhbG9nTW9kYWwgZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtZGlhbG9nLW1vZGFsJztcbmltcG9ydCBBdXRvc3VnZ2VzdCBmcm9tICdyZWFjdC1hdXRvc3VnZ2VzdCc7XG5pbXBvcnQgbW9iaWxlU3R5bGVzIGZyb20gJy4vTW9iaWxlU2VhcmNoLnNjc3MnO1xuaW1wb3J0IG1vYmlsZU5vU2Nyb2xsU3R5bGVzIGZyb20gJy4vTW9iaWxlTm9TY3JvbGwuc2Nzcyc7XG5cbmNsYXNzIEF1dG9zdWdnZXN0UGF0Y2ggZXh0ZW5kcyBBdXRvc3VnZ2VzdCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIHNlbGYub25TdWdnZXN0aW9uVG91Y2hNb3ZlID0gKCkgPT4ge1xuICAgICAgc2VsZi5qdXN0U2VsZWN0ZWRTdWdnZXN0aW9uID0gZmFsc2U7XG4gICAgICBzZWxmLnByZXNzZWRTdWdnZXN0aW9uID0gbnVsbDtcbiAgICB9O1xuICB9XG59XG5cbmNvbnN0IE1vYmlsZVNlYXJjaCA9ICh7XG4gIGFwcEVsZW1lbnQsXG4gIGlkLFxuICBjbG9zZUhhbmRsZSxcbiAgY2xlYXJJbnB1dCxcbiAgdmFsdWUsXG4gIHN1Z2dlc3Rpb25zLFxuICBpbnB1dFByb3BzLFxuICBmZXRjaEZ1bmN0aW9uLFxuICByZW5kZXJTdWdnZXN0aW9uLFxuICBnZXRTdWdnZXN0aW9uVmFsdWUsXG4gIGFyaWFMYWJlbCxcbiAgbGFiZWwsXG4gIG9uU3VnZ2VzdGlvblNlbGVjdGVkLFxuICBjbGVhck9sZFNlYXJjaGVzLFxuICBkaWFsb2dIZWFkZXJUZXh0LFxuICBkaWFsb2dQcmltYXJ5QnV0dG9uVGV4dCxcbiAgZGlhbG9nU2Vjb25kYXJ5QnV0dG9uVGV4dCxcbiAgY2xlYXJJbnB1dEJ1dHRvblRleHQsXG4gIGZvY3VzSW5wdXQsXG4gIGNvbG9yLFxuICBob3ZlckNvbG9yLFxuICBhY2Nlc3NpYmxlUHJpbWFyeUNvbG9yLFxuICBzZWFyY2hPcGVuLFxuICBmb250V2VpZ2h0cyxcbiAgc2hvd1Njcm9sbCxcbn0pID0+IHtcbiAgY29uc3Qgc3R5bGVzID0gc2hvd1Njcm9sbCA/IG1vYmlsZVN0eWxlcyA6IG1vYmlsZU5vU2Nyb2xsU3R5bGVzO1xuXG4gIGNvbnN0IGlucHV0SWQgPSBgJHtpZH0taW5wdXRgO1xuICBjb25zdCBsYWJlbElkID0gYCR7aWR9LWxhYmVsYDtcblxuICBjb25zdCBbaXNEaWFsb2dPcGVuLCBzZXREaWFsb2dPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgaW5wdXRSZWYgPSBSZWFjdC51c2VSZWYoKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIFJlYWN0TW9kYWwuc2V0QXBwRWxlbWVudChhcHBFbGVtZW50KTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IG9uQ2xvc2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY2xvc2VIYW5kbGUoKTtcbiAgfSk7XG5cbiAgY29uc3Qgb25TZWxlY3QgPSAoZSwgcmVmKSA9PiB7XG4gICAgaWYgKHJlZi5zdWdnZXN0aW9uLnR5cGUgPT09ICdjbGVhci1zZWFyY2gtaGlzdG9yeScpIHtcbiAgICAgIHNldERpYWxvZ09wZW4odHJ1ZSk7XG4gICAgfSBlbHNlIGlmICghcmVmLnN1Z2dlc3Rpb24ucHJvcGVydGllcy5hcnJvd0NsaWNrZWQpIHtcbiAgICAgIC8vIFNlbGVjdCBpdGVtIGlmIGZpbGwgaW5wdXQgYnV0dG9uIGlzIG5vdCBwcmVzc2VkIChkaWFnb25hbCBhcnJvdyBpbiBzdWdnZXN0aW9uIGl0ZW1zKVxuICAgICAgb25TdWdnZXN0aW9uU2VsZWN0ZWQoZSwgcmVmKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50ID0gZXZlbnQgPT4ge1xuICAgIGNvbnN0IHNwYWNlID0gWzEzLCAnICcsICdTcGFjZWJhciddO1xuICAgIGNvbnN0IGVudGVyID0gWzMyLCAnRW50ZXInXTtcbiAgICBjb25zdCBrZXkgPSAoZXZlbnQgJiYgKGV2ZW50LmtleSB8fCBldmVudC53aGljaCB8fCBldmVudC5rZXlDb2RlKSkgfHwgJyc7XG5cbiAgICBpZiAoIWtleSB8fCAhc3BhY2UuY29uY2F0KGVudGVyKS5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgY29uc3QgZ2V0VmFsdWUgPSBzdWdnZXN0aW9uID0+IHtcbiAgICBpZiAoc3VnZ2VzdGlvbi50eXBlID09PSAnY2xlYXItc2VhcmNoLWhpc3RvcnknKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiBnZXRTdWdnZXN0aW9uVmFsdWUoc3VnZ2VzdGlvbik7XG4gIH07XG5cbiAgY29uc3QgcmVuZGVySXRlbSA9IGl0ZW0gPT4ge1xuICAgIGlmIChpdGVtLnR5cGUgPT09ICdjbGVhci1zZWFyY2gtaGlzdG9yeScpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT17c3R5bGVzWydjbGVhci1zZWFyY2gtaGlzdG9yeSddfT5cbiAgICAgICAgICB7aXRlbS5sYWJlbElkfVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiByZW5kZXJTdWdnZXN0aW9uKGl0ZW0pO1xuICB9O1xuXG4gIGNvbnN0IHJlbmRlckRpYWxvZ01vZGFsID0gKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8RGlhbG9nTW9kYWxcbiAgICAgICAgYXBwRWxlbWVudD17YXBwRWxlbWVudH1cbiAgICAgICAgaXNNb2RhbE9wZW49e2lzRGlhbG9nT3Blbn1cbiAgICAgICAgaGFuZGxlQ2xvc2U9eygpID0+IHNldERpYWxvZ09wZW4oZmFsc2UpfVxuICAgICAgICBoZWFkZXJUZXh0PXtkaWFsb2dIZWFkZXJUZXh0fVxuICAgICAgICBwcmltYXJ5QnV0dG9uVGV4dD17ZGlhbG9nUHJpbWFyeUJ1dHRvblRleHR9XG4gICAgICAgIHNlY29uZGFyeUJ1dHRvblRleHQ9e2RpYWxvZ1NlY29uZGFyeUJ1dHRvblRleHR9XG4gICAgICAgIHByaW1hcnlCdXR0b25PbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgY2xlYXJPbGRTZWFyY2hlcygpO1xuICAgICAgICAgIHNldERpYWxvZ09wZW4oZmFsc2UpO1xuICAgICAgICB9fVxuICAgICAgICBzZWNvbmRhcnlCdXR0b25PbkNsaWNrPXsoKSA9PiBzZXREaWFsb2dPcGVuKGZhbHNlKX1cbiAgICAgICAgY29sb3I9e2NvbG9yfVxuICAgICAgICBob3ZlckNvbG9yPXtob3ZlckNvbG9yfVxuICAgICAgICBmb250V2VpZ2h0cz17Zm9udFdlaWdodHN9XG4gICAgICAvPlxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgY2xlYXJCdXR0b24gPSAoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydjbGVhci1pbnB1dCddfVxuICAgICAgICBvbkNsaWNrPXtjbGVhcklucHV0fVxuICAgICAgICBvbktleURvd249e2UgPT4gaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50KGUpICYmIGNsZWFySW5wdXQoKX1cbiAgICAgICAgYXJpYS1sYWJlbD17Y2xlYXJJbnB1dEJ1dHRvblRleHR9XG4gICAgICA+XG4gICAgICAgIDxJY29uIGltZz1cImNsb3NlXCIgY29sb3I9e2NvbG9yfSAvPlxuICAgICAgPC9idXR0b24+XG4gICAgKTtcbiAgfTtcblxuICBjb25zdCByZW5kZXJDb250ZW50ID0gKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydjb21ib2JveC1jb250YWluZXInXX0gaHRtbEZvcj17aW5wdXRJZH0+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1snY29tYm9ib3gtaWNvbiddfVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9uQ2xvc2UoKX1cbiAgICAgICAgICBvbktleURvd249e2UgPT4gaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50KGUpICYmIG9uQ2xvc2UoKX1cbiAgICAgICAgICBhcmlhLWxhYmVsPXtkaWFsb2dTZWNvbmRhcnlCdXR0b25UZXh0fVxuICAgICAgICAgIHRhYkluZGV4PXswfVxuICAgICAgICA+XG4gICAgICAgICAgPEljb24gaW1nPVwiYXJyb3dcIiAvPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXNbJ3JpZ2h0LWNvbHVtbiddfT5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlc1snY29tYm9ib3gtbGFiZWwnXX0gaWQ9e2xhYmVsSWR9PlxuICAgICAgICAgICAge2xhYmVsfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8QXV0b3N1Z2dlc3RQYXRjaFxuICAgICAgICAgICAgYWx3YXlzUmVuZGVyU3VnZ2VzdGlvbnNcbiAgICAgICAgICAgIGlkPXtpZH1cbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zPXtzdWdnZXN0aW9uc31cbiAgICAgICAgICAgIG9uU3VnZ2VzdGlvbnNGZXRjaFJlcXVlc3RlZD17ZmV0Y2hGdW5jdGlvbn1cbiAgICAgICAgICAgIGdldFN1Z2dlc3Rpb25WYWx1ZT17Z2V0VmFsdWV9XG4gICAgICAgICAgICByZW5kZXJTdWdnZXN0aW9uPXtyZW5kZXJJdGVtfVxuICAgICAgICAgICAgLy8gZm9jdXNJbnB1dE9uU3VnZ2VzdGlvbkNsaWNrIG11c3QgYmUgc2V0IHRvIHRydWUuXG4gICAgICAgICAgICAvLyBJZiBzZXQgdG8gZmFsc2UsIGlucHV0IHdvbid0IGJlIGZvY3VzZWQgd2hlbiB1c2VyIGNsaWNrcyBvblxuICAgICAgICAgICAgLy8gRmlsbCBpbnB1dCBidXR0b24gaW4gc3VnZ2VzdGlvbiBsaXN0LiAoZGlhZ29uYWwgYXJyb3cgaW4gc3RyZWV0IG5hbWUgaXRlbXMpXG4gICAgICAgICAgICBmb2N1c0lucHV0T25TdWdnZXN0aW9uQ2xpY2tcbiAgICAgICAgICAgIHNob3VsZFJlbmRlclN1Z2dlc3Rpb25zPXsoKSA9PiB0cnVlfVxuICAgICAgICAgICAgaW5wdXRQcm9wcz17e1xuICAgICAgICAgICAgICAuLi5pbnB1dFByb3BzLFxuICAgICAgICAgICAgICBjbGFzc05hbWU6IGN4KFxuICAgICAgICAgICAgICAgIGAke3N0eWxlcy5pbnB1dH0gJHtzdHlsZXNbaWRdIHx8ICcnfSAke1xuICAgICAgICAgICAgICAgICAgaW5wdXRQcm9wcy52YWx1ZSA/IHN0eWxlcy5oYXNWYWx1ZSA6ICcnXG4gICAgICAgICAgICAgICAgfWAsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIGF1dG9Gb2N1czogdHJ1ZSxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICByZW5kZXJJbnB1dENvbXBvbmVudD17cCA9PiAoXG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgPGlucHV0IGFyaWEtbGFiZWw9e2FyaWFMYWJlbH0gaWQ9e2lkfSB7Li4ucH0gLz5cbiAgICAgICAgICAgICAgICB7dmFsdWUgJiYgY2xlYXJCdXR0b24oKX1cbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgdGhlbWU9e3N0eWxlc31cbiAgICAgICAgICAgIG9uU3VnZ2VzdGlvblNlbGVjdGVkPXtvblNlbGVjdH1cbiAgICAgICAgICAgIHJlZj17aW5wdXRSZWZ9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfTtcbiAgaWYgKGZvY3VzSW5wdXQgJiYgaW5wdXRSZWYuY3VycmVudD8uaW5wdXQpIHtcbiAgICBpbnB1dFJlZi5jdXJyZW50LmlucHV0LmZvY3VzKCk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxSZWFjdE1vZGFsXG4gICAgICBpc09wZW49e3NlYXJjaE9wZW59XG4gICAgICBjbGFzc05hbWU9e3N0eWxlc1snbW9iaWxlLW1vZGFsJ119XG4gICAgICBvdmVybGF5Q2xhc3NOYW1lPXtzdHlsZXNbJ21vYmlsZS1tb2RhbC1vdmVybGF5J119XG4gICAgICBvbkFmdGVyQ2xvc2U9e29uQ2xvc2V9XG4gICAgICBzaG91bGRDbG9zZU9uRXNjXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1snbW9iaWxlLW1vZGFsLWNvbnRlbnQnXX1cbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAnLS1jb2xvcic6IGAke2NvbG9yfWAsXG4gICAgICAgICAgJy0tYWNjZXNzaWJsZS1wcmltYXJ5LWNvbG9yJzogYWNjZXNzaWJsZVByaW1hcnlDb2xvcixcbiAgICAgICAgICAnLS1ob3Zlci1jb2xvcic6IGAke2hvdmVyQ29sb3J9YCxcbiAgICAgICAgICAnLS1mb250LXdlaWdodC1tZWRpdW0nOiBmb250V2VpZ2h0cy5tZWRpdW0sXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHtyZW5kZXJDb250ZW50KCl9XG4gICAgICAgIHtyZW5kZXJEaWFsb2dNb2RhbCgpfVxuICAgICAgPC9kaXY+XG4gICAgPC9SZWFjdE1vZGFsPlxuICApO1xufTtcblxuTW9iaWxlU2VhcmNoLnByb3BUeXBlcyA9IHtcbiAgYXBwRWxlbWVudDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBjbG9zZUhhbmRsZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgY2xlYXJJbnB1dDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNsZWFySW5wdXRCdXR0b25UZXh0OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHN1Z2dlc3Rpb25zOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgaW5wdXRQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbkJsdXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICB9KS5pc1JlcXVpcmVkLFxuICBmZXRjaEZ1bmN0aW9uOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBnZXRTdWdnZXN0aW9uVmFsdWU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIHJlbmRlclN1Z2dlc3Rpb246IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uU3VnZ2VzdGlvblNlbGVjdGVkOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBjbGVhck9sZFNlYXJjaGVzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBhcmlhTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGRpYWxvZ0hlYWRlclRleHQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGRpYWxvZ1ByaW1hcnlCdXR0b25UZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICBkaWFsb2dTZWNvbmRhcnlCdXR0b25UZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICBmb2N1c0lucHV0OiBQcm9wVHlwZXMuYm9vbCxcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGhvdmVyQ29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGFjY2Vzc2libGVQcmltYXJ5Q29sb3I6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgc2VhcmNoT3BlbjogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgZm9udFdlaWdodHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgbWVkaXVtOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIH0pLmlzUmVxdWlyZWQsXG4gIHNob3dTY3JvbGw6IFByb3BUeXBlcy5ib29sLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgTW9iaWxlU2VhcmNoO1xuIiwiIWZ1bmN0aW9uKGUsdCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwib2JqZWN0XCI9PXR5cGVvZiBtb2R1bGUpbW9kdWxlLmV4cG9ydHM9dChyZXF1aXJlKFwicmVhY3RcIikpO2Vsc2UgaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXCJyZWFjdFwiXSx0KTtlbHNle3ZhciBuPVwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP3QocmVxdWlyZShcInJlYWN0XCIpKTp0KGUucmVhY3QpO2Zvcih2YXIgciBpbiBuKShcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cz9leHBvcnRzOmUpW3JdPW5bcl19fShcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOnRoaXMsKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciB0PXsyNTM6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pfTpmdW5jdGlvbihlLHQsbixyKXt2b2lkIDA9PT1yJiYocj1uKSxlW3JdPXRbbl19KSxvPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fHIodCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxvKG4oNzIwKSx0KSxvKG4oNjQ2KSx0KSxvKG4oODcpLHQpLG8obig2NDEpLHQpLG8obig5MSksdCksbyhuKDE4MyksdCksbyhuKDU4NiksdCksbyhuKDIxOSksdCl9LDg3OmZ1bmN0aW9uKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUFycm93TmF2aWdhdGlvbj12b2lkIDA7dmFyIHI9bigxNTYpO3QudXNlQXJyb3dOYXZpZ2F0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PWUubGlzdEl0ZW1zLG49ZS5vbkFycm93VXBPckRvd24sbz0oMCxyLnVzZVN0YXRlKSgwKSx1PW9bMF0saT1vWzFdLGM9KDAsci51c2VDYWxsYmFjaykoKGZ1bmN0aW9uKGUpe2koZSl9KSxbdF0pLHM9ZnVuY3Rpb24oZSl7dmFyIHI9ZS5rZXk7aWYobnVsbD09dD92b2lkIDA6dC5sZW5ndGgpaWYoXCJBcnJvd1VwXCI9PT1yKW4mJm4oKSxlLnByZXZlbnREZWZhdWx0KCksYyh1PjA/dS0xOnQubGVuZ3RoLTEpO2Vsc2V7aWYoXCJBcnJvd0Rvd25cIiE9PXIpcmV0dXJuO24mJm4oKSxlLnByZXZlbnREZWZhdWx0KCksdTx0Lmxlbmd0aC0xP2ModSsxKTpjKDApfX07cmV0dXJuKDAsci51c2VFZmZlY3QpKChmdW5jdGlvbigpe3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixzKSxmdW5jdGlvbigpe3JldHVybiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixzKX19KSksKDAsci51c2VFZmZlY3QpKChmdW5jdGlvbigpe2MoMCl9KSxbdF0pLHtzZWxlY3RlZEluZGV4OnV9fX0sNjQxOmZ1bmN0aW9uKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUludGVyc2VjdGlvbk9ic2VydmVyPXZvaWQgMDt2YXIgcj1uKDE1Nik7dC51c2VJbnRlcnNlY3Rpb25PYnNlcnZlcj1mdW5jdGlvbihlKXt2YXIgdD0oMCxyLnVzZVJlZikobnVsbCksbj0oMCxyLnVzZVN0YXRlKSghMSksbz1uWzBdLHU9blsxXSxpPWZ1bmN0aW9uKGUpe3ZhciB0PWVbMF07dSh0LmlzSW50ZXJzZWN0aW5nKX07cmV0dXJuKDAsci51c2VFZmZlY3QpKChmdW5jdGlvbigpe2lmKHdpbmRvdyYmd2luZG93LkludGVyc2VjdGlvbk9ic2VydmVyKXt2YXIgbj1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoaSxlKSxyPXQuY3VycmVudDtyZXR1cm4gdC5jdXJyZW50JiZuLm9ic2VydmUodC5jdXJyZW50KSxmdW5jdGlvbigpe3ImJm4udW5vYnNlcnZlKHIpfX11KCExKX0pLFt0LGVdKSx7Y29udGFpbmVyUmVmOnQsaXNWaXNpYmxlOm99fSx0LmRlZmF1bHQ9dC51c2VJbnRlcnNlY3Rpb25PYnNlcnZlcn0sOTE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlSXNCcmVha3BvaW50PXZvaWQgMDt2YXIgbz1uKDE1NiksdT1yKG4oMTk3KSksaT17eHM6MSxtb2JpbGVTbWFsbDozMjAsbW9iaWxlOjM3NSx0YWJsZXQ6NzY4LHRhYmxldExhcmdlOjkyMCxkZXNrdG9wU21hbGw6MTAyNCxkZXNrdG9wOjEyNjAsZGVza3RvcExhcmdlOjE0NDB9O3QudXNlSXNCcmVha3BvaW50PWZ1bmN0aW9uKGUpe3ZhciB0PSgwLG8udXNlU3RhdGUpKG51bGwpLG49dFswXSxyPXRbMV0sYz0oMCxvLnVzZUNhbGxiYWNrKSgoZnVuY3Rpb24oKXtyKHdpbmRvdy5pbm5lcldpZHRoKX0pLFtdKTtyZXR1cm4oMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7YygpfSksW10pLCgwLHUuZGVmYXVsdCkoYyksbj49aVtlXX0sdC5kZWZhdWx0PXQudXNlSXNCcmVha3BvaW50fSwxODM6ZnVuY3Rpb24oZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdD12b2lkIDA7dmFyIHI9bigxNTYpO3QudXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdD1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3IudXNlTGF5b3V0RWZmZWN0OnIudXNlRWZmZWN0LHQuZGVmYXVsdD10LnVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3R9LDU4NjpmdW5jdGlvbihlLHQsbil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VPbkxvc2VGb2N1c1dpdGhpbj12b2lkIDA7dmFyIHI9bigxNTYpO3QudXNlT25Mb3NlRm9jdXNXaXRoaW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZWYsbj1lLmNhbGxiYWNrLG89ZS53YXRjaDsoMCxyLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oKXt2YXIgZTtpZihvKXJldHVybihudWxsPT09KGU9dC5jdXJyZW50KXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5tYXRjaGVzKFwiOmZvY3VzLXdpdGhpblwiKSk/dm9pZCAwOm4oKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLGUpLGZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLGUpfX0pLFtuLHQsb10pfSx0LmRlZmF1bHQ9dC51c2VPbkxvc2VGb2N1c1dpdGhpbn0sMTk3OmZ1bmN0aW9uKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgcj1uKDE1Nik7dC5kZWZhdWx0PWZ1bmN0aW9uKGUpeygwLHIudXNlRWZmZWN0KSgoZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbigpe2Uod2luZG93LmlubmVyV2lkdGgpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0LHtwYXNzaXZlOiEwfSksZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0KX19KSxbXSl9fSw3MjA6ZnVuY3Rpb24oZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlT3V0c2lkZVJlYWN0ZXI9dm9pZCAwO3ZhciByPW4oMTU2KTt0LnVzZU91dHNpZGVSZWFjdGVyPWZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihuKXtlLmN1cnJlbnQmJiFlLmN1cnJlbnQuY29udGFpbnMobi50YXJnZXQpJiZ0KCl9KDAsci51c2VFZmZlY3QpKChmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsbiksZnVuY3Rpb24oKXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsbil9fSkpfX0sMjE5OmZ1bmN0aW9uKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgcj1uKDE1Nik7dC5kZWZhdWx0PWZ1bmN0aW9uKCl7dmFyIGU9KDAsci51c2VSZWYpKG51bGwpO3JldHVybigwLHIudXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtlLmN1cnJlbnQmJihlLmN1cnJlbnQoKSxlLmN1cnJlbnQ9bnVsbCl9KSksZnVuY3Rpb24odCl7ZS5jdXJyZW50PXR9fX0sNjQ2OmZ1bmN0aW9uKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZVNjcm9sbExvY2s9dm9pZCAwO3ZhciByPW4oMTU2KTt0LnVzZVNjcm9sbExvY2s9ZnVuY3Rpb24oKXtyZXR1cm57bG9jazooMCxyLnVzZUNhbGxiYWNrKSgoZnVuY3Rpb24oKXt2YXIgZT13aW5kb3cuc2Nyb2xsWStcInB4XCIsdD1kb2N1bWVudC5ib2R5O3Quc3R5bGUucG9zaXRpb249XCJmaXhlZFwiLHQuc3R5bGUudG9wPVwiLVwiK2V9KSxbXSksdW5sb2NrOigwLHIudXNlQ2FsbGJhY2spKChmdW5jdGlvbigpe3ZhciBlPWRvY3VtZW50LmJvZHksdD1lLnN0eWxlLnRvcCxuPS0xKnBhcnNlSW50KHR8fFwiMFwiKTtlLnN0eWxlLnBvc2l0aW9uPVwiXCIsZS5zdHlsZS50b3A9XCJcIixuJiZ3aW5kb3cuc2Nyb2xsVG8oMCwtMSpwYXJzZUludCh0fHxcIjBcIikpfSksW10pfX19LDE1NjpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZX19LG49e307cmV0dXJuIGZ1bmN0aW9uIGUocil7dmFyIG89bltyXTtpZih2b2lkIDAhPT1vKXJldHVybiBvLmV4cG9ydHM7dmFyIHU9bltyXT17ZXhwb3J0czp7fX07cmV0dXJuIHRbcl0uY2FsbCh1LmV4cG9ydHMsdSx1LmV4cG9ydHMsZSksdS5leHBvcnRzfSgyNTMpfSgpfSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBpMThuZXh0IGZyb20gJ2kxOG5leHQnO1xuaW1wb3J0IGN4IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IEF1dG9zdWdnZXN0IGZyb20gJ3JlYWN0LWF1dG9zdWdnZXN0JztcbmltcG9ydCB7IGV4ZWN1dGVTZWFyY2ggfSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZXhlY3V0ZS1zZWFyY2gtaW1taWRpYXRlJztcbmltcG9ydCBTdWdnZXN0aW9uSXRlbSBmcm9tICdAZGlnaXRyYW5zaXQtY29tcG9uZW50L2RpZ2l0cmFuc2l0LWNvbXBvbmVudC1zdWdnZXN0aW9uLWl0ZW0nO1xuaW1wb3J0IHtcbiAgZ2V0TmFtZUxhYmVsLFxuICBnZXRTdG9wQ29kZSxcbn0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXVuaXEtYnktbGFiZWwnO1xuaW1wb3J0IHsgZ2V0U3RvcE5hbWUgfSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtaGVscGVycyc7XG5pbXBvcnQgZ2V0TGFiZWwgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1sYWJlbCc7XG5pbXBvcnQgSWNvbiBmcm9tICdAZGlnaXRyYW5zaXQtY29tcG9uZW50L2RpZ2l0cmFuc2l0LWNvbXBvbmVudC1pY29uJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50LXRpbWV6b25lJztcbmltcG9ydCAnbW9tZW50L2xvY2FsZS9maSc7XG5pbXBvcnQgJ21vbWVudC9sb2NhbGUvc3YnO1xuaW1wb3J0ICdtb21lbnQvbG9jYWxlL2RlJztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC9pc0VxdWFsJztcbmltcG9ydCBpc0VtcHR5IGZyb20gJ2xvZGFzaC9pc0VtcHR5JztcbmltcG9ydCB0cmFuc2xhdGlvbnMgZnJvbSAnLi9oZWxwZXJzL3RyYW5zbGF0aW9ucyc7XG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vaGVscGVycy9zdHlsZXMuc2Nzcyc7XG5pbXBvcnQgTW9iaWxlU2VhcmNoIGZyb20gJy4vaGVscGVycy9Nb2JpbGVTZWFyY2gnO1xuaW1wb3J0IHdpdGhTY3JvbGxMb2NrIGZyb20gJy4vaGVscGVycy93aXRoU2Nyb2xsTG9jayc7XG5cbm1vbWVudC5sb2NhbGUoJ2VuJyk7XG5cbmkxOG5leHQuaW5pdCh7XG4gIGZhbGxiYWNrTG5nOiAnZmknLFxuICBkZWZhdWx0TlM6ICd0cmFuc2xhdGlvbicsXG4gIGludGVycG9sYXRpb246IHtcbiAgICBlc2NhcGVWYWx1ZTogZmFsc2UsIC8vIG5vdCBuZWVkZWQgZm9yIHJlYWN0IGFzIGl0IGVzY2FwZXMgYnkgZGVmYXVsdFxuICB9LFxufSk7XG5cbmNvbnN0IExvYWRpbmcgPSBwcm9wcyA9PiAoXG4gIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ3NwaW5uZXItbG9hZGVyJ119PlxuICAgIHsocHJvcHMgJiYgcHJvcHMuY2hpbGRyZW4pIHx8IChcbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzWydzci1vbmx5J119PntpMThuZXh0LnQoJ2xvYWRpbmcnKX08L3NwYW4+XG4gICAgKX1cbiAgPC9kaXY+XG4pO1xuXG5Mb2FkaW5nLnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxufTtcblxuY29uc3QgZ2V0UGxhdGZvcm0gPSBhZGRlbmR1bSA9PiB7XG4gIGlmICghYWRkZW5kdW0gfHwgIWFkZGVuZHVtLkdURlMucGxhdGZvcm0pIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHsgbW9kZXMsIHBsYXRmb3JtIH0gPSBhZGRlbmR1bS5HVEZTO1xuICBjb25zdCB0eXBlID1cbiAgICBtb2RlcyAmJiBtb2Rlc1swXSA9PT0gJ1JBSUwnID8gaTE4bmV4dC50KCd0cmFjaycpIDogaTE4bmV4dC50KCdwbGF0Zm9ybScpO1xuICByZXR1cm4gW3R5cGUsIHBsYXRmb3JtXTtcbn07XG5cbmZ1bmN0aW9uIGdldFN1Z2dlc3Rpb25Db250ZW50KGl0ZW0pIHtcbiAgaWYgKGl0ZW0udHlwZSAhPT0gJ0Z1dHVyZVJvdXRlJykge1xuICAgIGlmIChpdGVtLnR5cGUgPT09ICdTZWxlY3RGcm9tTWFwJykge1xuICAgICAgcmV0dXJuIFsnJywgaTE4bmV4dC50KCdzZWxlY3QtZnJvbS1tYXAnKV07XG4gICAgfVxuICAgIGlmIChpdGVtLnR5cGUgPT09ICdDdXJyZW50TG9jYXRpb24nKSB7XG4gICAgICByZXR1cm4gWycnLCBpMThuZXh0LnQoJ3VzZS1vd24tcG9zaXRpb24nKV07XG4gICAgfVxuICAgIGlmIChpdGVtLnR5cGUgPT09ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJykge1xuICAgICAgcmV0dXJuIFsnJywgaTE4bmV4dC50KCdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJyldO1xuICAgIH1cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0ICovXG4gICAgbGV0IFtuYW1lLCBsYWJlbF0gPSBnZXROYW1lTGFiZWwoaXRlbS5wcm9wZXJ0aWVzLCB0cnVlKTtcbiAgICBsZXQgc3VnZ2VzdGlvblR5cGU7XG4gICAgaWYgKFxuICAgICAgaXRlbS5wcm9wZXJ0aWVzLmxheWVyLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2Jpa2VyZW50YWwnKSB8fFxuICAgICAgaXRlbS5wcm9wZXJ0aWVzLmxheWVyLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2Jpa2VzdGF0aW9uJylcbiAgICApIHtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gaTE4bmV4dC50KCdiaWtlcmVudGFsc3RhdGlvbicpO1xuICAgICAgY29uc3Qgc3RvcENvZGUgPSBpdGVtLnByb3BlcnRpZXMubGFiZWxJZDtcbiAgICAgIHJldHVybiBbc3VnZ2VzdGlvblR5cGUsIG5hbWUsIHVuZGVmaW5lZCwgc3RvcENvZGVdO1xuICAgIH1cblxuICAgIGlmIChpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdiaWtlcGFyaycpIHtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gaTE4bmV4dC50KCdiaWtlcGFyaycpO1xuICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uVHlwZSwgbmFtZSwgdW5kZWZpbmVkLCB1bmRlZmluZWRdO1xuICAgIH1cblxuICAgIGlmIChpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdjYXJwYXJrJykge1xuICAgICAgc3VnZ2VzdGlvblR5cGUgPSBpMThuZXh0LnQoJ2NhcnBhcmsnKTtcbiAgICAgIHJldHVybiBbc3VnZ2VzdGlvblR5cGUsIG5hbWUsIHVuZGVmaW5lZCwgdW5kZWZpbmVkXTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbS5wcm9wZXJ0aWVzLm1vZGUpIHtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gaTE4bmV4dC50KFxuICAgICAgICBpdGVtLnByb3BlcnRpZXMubW9kZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ2Zhdm91cml0ZScsICcnKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGxheWVyID0gaXRlbS5wcm9wZXJ0aWVzLmxheWVyXG4gICAgICAgIC5yZXBsYWNlKCdyb3V0ZS0nLCAnJylcbiAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgLnJlcGxhY2UoJ2Zhdm91cml0ZScsICcnKTtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gaTE4bmV4dC50KGxheWVyKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBpdGVtLnByb3BlcnRpZXMuaWQgJiZcbiAgICAgIChpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdzdG9wJyB8fCBpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdzdGF0aW9uJylcbiAgICApIHtcbiAgICAgIGNvbnN0IHN0b3BDb2RlID0gZ2V0U3RvcENvZGUoaXRlbS5wcm9wZXJ0aWVzKTtcbiAgICAgIGNvbnN0IG1vZGUgPSBpdGVtLnByb3BlcnRpZXMuYWRkZW5kdW0/LkdURlMubW9kZXM7XG4gICAgICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKGl0ZW0ucHJvcGVydGllcy5hZGRlbmR1bSk7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBzdWdnZXN0aW9uVHlwZSxcbiAgICAgICAgZ2V0U3RvcE5hbWUobmFtZSwgc3RvcENvZGUpLFxuICAgICAgICBsYWJlbCxcbiAgICAgICAgc3RvcENvZGUsXG4gICAgICAgIG1vZGUsXG4gICAgICAgIHBsYXRmb3JtLFxuICAgICAgXTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnZmF2b3VyaXRlU3RvcCcgfHxcbiAgICAgIGl0ZW0ucHJvcGVydGllcy5sYXllciA9PT0gJ2Zhdm91cml0ZVN0YXRpb24nXG4gICAgKSB7XG4gICAgICBjb25zdCB7IGFkZHJlc3MsIGNvZGUgfSA9IGl0ZW0ucHJvcGVydGllcztcbiAgICAgIGNvbnN0IHN0b05hbWUgPSBhZGRyZXNzID8gZ2V0U3RvcE5hbWUoYWRkcmVzcy5zcGxpdCgnLCcpWzBdLCBjb2RlKSA6IG5hbWU7XG4gICAgICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKGl0ZW0ucHJvcGVydGllcy5hZGRlbmR1bSk7XG4gICAgICByZXR1cm4gW3N1Z2dlc3Rpb25UeXBlLCBzdG9OYW1lLCBsYWJlbCwgY29kZSwgdW5kZWZpbmVkLCBwbGF0Zm9ybV07XG4gICAgfVxuICAgIHJldHVybiBbc3VnZ2VzdGlvblR5cGUsIG5hbWUsIGxhYmVsXTtcbiAgfVxuICBjb25zdCB7IG9yaWdpbiwgZGVzdGluYXRpb24gfSA9IGl0ZW0ucHJvcGVydGllcztcbiAgY29uc3QgdGFpbDEgPSBvcmlnaW4ubG9jYWxpdHkgPyBgLCAke29yaWdpbi5sb2NhbGl0eX0gZm9vYmFyYCA6ICcnO1xuICBjb25zdCB0YWlsMiA9IGRlc3RpbmF0aW9uLmxvY2FsaXR5ID8gYCwgJHtkZXN0aW5hdGlvbi5sb2NhbGl0eX1gIDogJyc7XG4gIGNvbnN0IG5hbWUxID0gb3JpZ2luLm5hbWU7XG4gIGNvbnN0IG5hbWUyID0gZGVzdGluYXRpb24ubmFtZTtcbiAgcmV0dXJuIFtcbiAgICBpMThuZXh0LnQoJ2Z1dHVyZS1yb3V0ZScpLFxuICAgIGAke2kxOG5leHQudCgnb3JpZ2luJyl9ICR7bmFtZTF9JHt0YWlsMX0gJHtpMThuZXh0LnQoXG4gICAgICAnZGVzdGluYXRpb24nLFxuICAgICl9ICR7bmFtZTJ9JHt0YWlsMn1gLFxuICAgIGl0ZW0udHJhbnNsYXRlZFRleHQsXG4gIF07XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZUZ1dHVyZVJvdXRlU3VnZ2VzdGlvblRpbWUoaXRlbSkge1xuICBjb25zdCB0aW1lID0gbW9tZW50LnVuaXgoaXRlbS5wcm9wZXJ0aWVzLnRpbWUpO1xuICBsZXQgc3RyID0gaXRlbS5wcm9wZXJ0aWVzLmFycml2ZUJ5XG4gICAgPyBpMThuZXh0LnQoJ2Fycml2YWwnKVxuICAgIDogaTE4bmV4dC50KCdkZXBhcnR1cmUnKTtcbiAgaWYgKHRpbWUuaXNTYW1lKG1vbWVudCgpLCAnZGF5JykpIHtcbiAgICBzdHIgPSBgJHtzdHJ9ICR7aTE4bmV4dC50KCd0b2RheS1hdCcpfWA7XG4gIH0gZWxzZSBpZiAodGltZS5pc1NhbWUobW9tZW50KCkuYWRkKDEsICdkYXknKSwgJ2RheScpKSB7XG4gICAgc3RyID0gYCR7c3RyfSAke2kxOG5leHQudCgndG9tb3Jyb3ctYXQnKX1gO1xuICB9IGVsc2Uge1xuICAgIHN0ciA9IGAke3N0cn0gJHt0aW1lLmZvcm1hdCgnZGQgRC5NLicpfWA7XG4gIH1cbiAgc3RyID0gYCR7c3RyfSAke21vbWVudCh0aW1lKS5mb3JtYXQoJ0hIOm1tJyl9YDtcbiAgcmV0dXJuIHN0cjtcbn1cbi8qKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHNlYXJjaENvbnRleHQgPSB7XG4gKiAgIGlzUGVsaWFzTG9jYXRpb25Bd2FyZTogZmFsc2UgLy8gdHJ1ZSAvIGZhbHNlIGRvZXMgTGV0IFBlbGlhcyBzdWdnZXN0IGJhc2VkIG9uIGN1cnJlbnQgdXNlciBsb2NhdGlvblxuICogICBtaW5pbWFsUmVnZXhwOiB1bmRlZmluZWQgLy8gdXNlZCBmb3IgdGVzdGluZyBtaW4uIHJlZ2V4cC4gRm9yIGV4YW1wbGU6IG5ldyBSZWdFeHAoJy57Mix9JyksXG4gKiAgIGxpbmVSZWdleHA6IHVuZGVmaW5lZCAvLyAgaWRlbnRpZnkgc2VhcmNoZXMgZm9yIHJvdXRlIG51bWJlcnMvbGFiZWxzOiBidXMgfCB0cmFpbiB8IG1ldHJvLiBGb3IgZXhhbXBsZTogbmV3IFJlZ0V4cChcbiAqICAgIC8vICAgJyheWzAtOV0rW2Etel0/JHxeW3l1bGVhcGlua3J0ZHpdJHwoXm1bMTJdP2I/JCkpJyxcbiAqICAgIC8vICAnaScsXG4gKiAgICAvLyAgKSxcbiAqICAgVVJMX1BFTElBUzogJycgLy8gdXJsIGZvciBwZWxpYXMgc2VhcmNoZXNcbiAqICAgZmVlZElEczogWydIU0wnLCAnSFNMTGF1dHRhJ10gLy8gRmVlZElkJ3MgbGlrZSAgW0hTTCwgSFNMTGF1dHRhXVxuICogICBnZW9jb2RpbmdTb3VyY2VzOiBbJ29hJywnb3NtJywnbmxzZmknXSAgLy8gc291cmNlcyBmb3IgZ2VvY29kaW5nXG4gKiAgIGdlb2NvZGluZ1NlYXJjaFBhcmFtczsge30gIC8vIFNlYXJjaHBhcm1hcyBmcm8gZ2VvY29kaW5nXG4gKiAgIGdldEZhdm91cml0ZUxvY2F0aW9uczogKCkgPT4gKHt9KSwgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGFycmF5IG9mIGZhdm91cml0ZSBsb2NhdGlvbnMuXG4gKiAgIGdldEZhdm91cml0ZVN0b3BzOiAoKSA9PiAoe30pLCAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGFycmF5IG9mIGZhdm91cml0ZSBzdG9wcy5cbiAqICAgZ2V0TGFuZ3VhZ2U6ICgpID0+ICh7fSksICAgICAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgY3VycmVudCBsYW5ndWFnZS5cbiAqICAgZ2V0RmF2b3VyaXRlUm91dGVzOiAoKSA9PiAoe30pLCAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgYXJyYXkgb2YgZmF2b3VyaXRlIHJvdXRlcy5cbiAqICAgZ2V0UG9zaXRpb25zOiAoKSA9PiAoe30pLCAgICAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgdXNlcidzIGdlb2xvY2F0aW9uLlxuICogICBnZXRSb3V0ZXNRdWVyeTogKCkgPT4gKHt9KSwgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBxdWVyeSBmb3IgZmV0Y2hpbmcgcm91dGVzLlxuICogICBnZXRBbGxCaWtlUmVudGFsU3RhdGlvbnM6ICgpID0+ICh7fSksIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbGwgYmlrZSByZW50YWwgc3RhdGlvbnMgZnJvbSBncmFwaHFsIEFQSS5cbiAqICAgZ2V0U3RvcEFuZFN0YXRpb25zUXVlcnk6ICgpID0+ICh7fSksICAvLyBGdW5jdGlvbiB0aGF0IGZldGNoZXMgZmF2b3VyaXRlIHN0b3BzIGFuZCBzdGF0aW9ucyBmcm9tIGdyYXBocWwgQVBJLlxuICogICBnZXRGYXZvdXJpdGVSb3V0ZXNRdWVyeTogKCkgPT4gKHt9KSwgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBxdWVyeSBmb3IgZmV0Y2hpbmcgZmF2b3VyaXRlIHJvdXRlcy5cbiAqICAgZ2V0RmF2b3VyaXRlQmlrZVJlbnRhbFN0YXRpb25zOiAoKSA9PiAoe30pLCAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGZhdm91cml0ZSBiaWtlIHJlbnRhbCBzdGF0aW9uLlxuICogICBnZXRGYXZvdXJpdGVCaWtlUmVudGFsU3RhdGlvbnNRdWVyeTogKCkgPT4gKHt9KSwgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHF1ZXJ5IGZvciBmZXRjaGluZyBmYXZvdXJpdGUgYmlrZSByZW50YWwgc3RhdGlvbnMuXG4gKiAgIHN0YXJ0TG9jYXRpb25XYXRjaDogKCkgPT4gKHt9KSwgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBsb2NhdGVzIHVzZXJzIGdlb2xvY2F0aW9uLlxuICogICBzYXZlU2VhcmNoOiAoKSA9PiAoe30pLCAgICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgc2F2ZXMgc2VhcmNoIHRvIG9sZCBzZWFyY2hlcyBzdG9yZS5cbiAqICAgY2xlYXJPbGRTZWFyY2hlczogKCkgPT4gKHt9KSwgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IGNsZWFycyBvbGQgc2VhcmNoZXMgc3RvcmUuXG4gKiAgIGdldEZ1dHVyZVJvdXRlczogKCkgPT4gKHt9KSwgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm4gZnV0dXJlIHJvdXRlc1xuICogICBzYXZlRnV0dXJlUm91dGU6ICgpID0+ICh7fSksICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgc2F2ZXMgYSBmdXR1cmUgcm91dGVcbiAqICAgY2xlYXJGdXR1cmVSb3V0ZXM6ICgpID0+ICh7fSksICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IGNsZWFycyBmdXR1cmUgcm91dGVzXG4gKiB9O1xuICogY29uc3QgbGFuZyA9ICdmaSc7IC8vIGVuLCBmaSBvciBzdlxuICogY29uc3Qgb25TZWxlY3QgPSAoaXRlbSwgaWQpID0+IHtcbiAqICAgIC8vIEZ1bnRpb25hbGl0eSB3aGVuIHVzZXIgc2VsZWN0cyBhIHN1Z2dlc2lvbnMuIE5vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMgZ2l2ZW4uXG4gKiAgICByZXR1cm4gbnVsbDtcbiAqIH07XG4gKiBjb25zdCBvbkNsZWFyID0gaWQgPT4ge1xuICogICAgLy8gQ2FsbGVkICB3aGVuIHVzZXIgY2xpY2tzIHRoZSBjbGVhciBzZWFyY2ggc3RyaW5nIGJ1dHRvbi4gTm8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi5cbiAqICAgIHJldHVybiBudWxsO1xuICogfTtcbiAqIGNvbnN0IGdldEF1dG9TdWdnZXN0SWNvbnM6IHtcbiAqICAgLy8gQ2FsbGVkIGZvciBldmVyeSBjaXR5IGJpa2Ugc3RhdGlvbiByZW5kZXJlZCBhcyBhIHNlYXJjaCBzdWdnZXN0aW9uLiBTaG91bGQgcmV0dXJuIHRoZSBpY29uIGFuZFxuICogICAvLyBjb2xvciB1c2VkIGZvciB0aGF0IHN0YXRpb24uIFR3byBpY29ucyBhcmUgYXZhaWxhYmxlLCAnY2l0eWJpa2Utc3RvcC1kaWdpdHJhbnNpdCcgYW5kaXR5YmlrZS1zdG9wLWRpZ2l0cmFuc2l0LXNlY29uZGFyeScuXG4gKiAgIGNpdHliaWtlczogc3RhdGlvbiA9PiB7XG4gKiAgICAgIHJldHVybiBbJ2NpdHliaWtlLXN0b3AtZGlnaXRyYW5zaXQnLCAnI2YyYjYyZCddO1xuICogICB9XG4gKiB9XG4gKiBjb25zdCB0cmFuc3BvcnRNb2RlID0gdW5kZWZpbmVkO1xuICogY29uc3QgcGxhY2Vob2xkZXIgPSBcInN0b3AtbmVhci15b3VcIjtcbiAqIGNvbnN0IHRhcmdldHMgPSBbJ0xvY2F0aW9ucycsICdTdG9wcycsICdSb3V0ZXMnXTsgLy8gRGVmaW5lcyB3aGF0IHlvdSBhcmUgc2VhcmNoaW5nLiBhbGwgYXZhaWxhYmxlIG9wdGlvbnMgYXJlIExvY2F0aW9ucywgU3RvcHMsIFJvdXRlcywgQmlrZVJlbnRhbFN0YXRpb25zLCBGdXR1cmVSb3V0ZXMsIE1hcFBvc2l0aW9uIGFuZCBDdXJyZW50UG9zaXRpb24uIExlYXZlIGVtcHR5IHRvIHNlYXJjaCBhbGwgdGFyZ2V0cy5cbiAqIGNvbnN0IHNvdXJjZXMgPSBbJ0Zhdm91cml0ZScsICdIaXN0b3J5JywgJ0RhdGFzb3VyY2UnXSAvLyBEZWZpbmVzIHdoZXJlIHlvdSBhcmUgc2VhcmNoaW5nLiBhbGwgYXZhaWxhYmxlIGFyZTogRmF2b3VyaXRlLCBIaXN0b3J5IChwcmV2aW91c2x5IHNlYXJjaGVkIHNlYXJjaGVzKSBhbmQgRGF0YXNvdXJjZS4gTGVhdmUgZW1wdHkgdG8gdXNlIGFsbCBzb3VyY2VzLlxuICogcmV0dXJuIChcbiAqICA8RFRBdXRvc3VnZ2VzdFxuICogICAgYXBwRWxlbWVudD17YXBwRWxlbWVudH0gLy8gUmVxdWlyZWQuIFJvb3QgZWxlbWVudCdzIGlkLiBOZWVkZWQgZm9yIHJlYWN0LW1vZGFsIGNvbXBvbmVudC5cbiAqICAgIHNlYXJjaENvbnRleHQ9e3NlYXJjaENvbnRleHR9XG4gKiAgICBpY29uPVwib3JpZ2luXCIgLy8gT3B0aW9uYWwgU3RyaW5nIGZvciBpY29uIHRoYXQgaXMgc2hvd24gbGVmdCBvZiBzZWFyY2hmaWVsZC4gdXNlZCB3aXRoIEljb24gbGlicmFyeVxuICogICAgaWQ9XCJvcmlnaW5cIiAvLyB1c2VkIGZvciBzdHlsZSBwcm9wcyBhbmQgaW5mbyBmb3IgY29tcG9uZW50LlxuICogICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfSAvLyBTdHJpbmcgdGhhdCBpcyBzaG93bnMgaW5pdGFsbHkgaW4gc2VhcmNoIGZpZWxkXG4gKiAgICB2YWx1ZT1cIlwiIC8vIGUuZy4gdXNlciB0eXBlZCBzdHJpbmcgdGhhdCBpcyBzaG93biBpbiBzZWFyY2ggZmllbGRcbiAqICAgIG9uU2VsZWN0PXtvblNlbGVjdH1cbiAqICAgIG9uQ2xlYXI9e29uQ2xlYXJ9XG4gKiAgICBhdXRvRm9jdXM9e2ZhbHNlfSAvLyBkZWZpbmVzIHRoYXQgc2hvdWxkIHRoaXMgZmllbGQgYmUgYXV0b21hdGljYWxseSBmb2N1c2VkIHdoZW4gcGFnZSBpcyBsb2FkZWQuXG4gKiAgICBsYW5nPXtsYW5nfVxuICogICAgZ2V0QXV0b1N1Z2dlc3RJY29ucz17Z2V0QXV0b1N1Z2dlc3RJY29uc31cbiAqICAgIHRyYW5zcG9ydE1vZGU9e3RyYW5zcG9ydE1vZGV9IC8vIHRyYW5zcG9ydG1vZGUgd2l0aCB3aGljaCB3ZSBmaWx0ZXIgdGhlIHJvdXRlcywgZS5nLiByb3V0ZS1CVVNcbiAqICAgIGdlb2NvZGluZ1NpemU9ezEwfSAvLyBkZWZpbmVzIGhvdyBtYW55IHN0b3BzIGFuZCBzdGF0aW9ucyB0byBmZXRjaCBmcm9tIGdlb2NvZGluZy4gVXNlZnVsIGlmIHlvdSB3YW50IHRvIGZpbHRlciB0aGUgcmVzdWx0cyBhbmQgc3RpbGwgZ2V0IGEgcmVhc29uYWJsZSBhbW91bnQgb2Ygc3VnZ2VzdGlvbnMuXG4gKiAgICBmaWx0ZXJSZXN1bHRzPXtyZXN1bHRzID0+IHJldHVybiByZXN1bHRzfSAvLyBPcHRpb25hbCBmaWx0ZXJpbmcgZnVuY3Rpb24gZm9yIHJvdXRlcyBhbmQgc3RvcHNcbiAqICAgIGhhbmRlbFZpYVBvaW50cz17KCkgPT4gcmV0dXJuIG51bGwgfSAvLyBPcHRpb25hbCBWaWEgcG9pbnQgaGFuZGxpbmcgbG9naWMuIFRoaXMgaXMgY3VycmVudGx5IG1hbmFnZWQgd2l0aCBEVEF1dG9zdWdnZXN0cGFuZWwgYnkgZGVmYXVsdCwgYnV0IGlmIERUQXV0b3N1Z2dlc3QgaXMgdXNlZCBzZXBlcmF0ZWxseSBvd24gaW1wbGVtZW50YXRpb24gbXVzdCBiZSBwcm92aWRlZC5cbiAqICAgIGZvY3VzQ2hhbmdlPXsoKSA9PiByZXR1cm4gbnVsbH0gLy8gV2hlbiBzdWdnZXN0aW9uIGlzIHNlbGVjdGVkLCBoYW5kbGUgY2hhbmdpbmcgZm9jdXMuIFRoaXMgaXMgY3VycmVudGx5IG1hbmFnZWQgd2l0aCBEVEF1dG9zdWdnZXN0cGFuZWwgYnkgZGVmYXVsdCwgYnV0IGlmIERUQXV0b3N1Z2dlc3QgaXMgdXNlZCBzZXBlcmF0ZWxseSBvd24gaW1wbGVtZW50YXRpb24gbXVzdCBiZSBwcm92aWRlZC5cbiAqICAgIHN0b3JlUmVmPXsoKSA9PiByZXR1cm4gbnVsbH0gLy8gRnVuY3Rpb25hbGl0eSB0byBzdG9yZSByZWZzLiBDdXJyZW5sdHkgbWFuYWdlZCB3aXRoIERUQXV0b3N1Z2dlc3RwYW5lbCBieSBkZWZhdWx0LCBidXQgaWYgRFRBdXRvc3VnZ2VzdCBpcyB1c2VkIHNlcGVyYXRlbGx5IG93biBpbXBsZW1lbnRhdGlvbiBtdXN0IGJlIHByb3ZpZGVkLlxuICogICAgc291cmNlcz17c291cmNlc31cbiAqICAgIHRhcmdldHM9e3RhcmdldHN9XG4gKiAgICBpc01vYmlsZSAgLy8gT3B0aW9uYWwuIERlZmF1bHRzIHRvIGZhbHNlLiBXaGV0aGVyIHRvIHVzZSBtb2JpbGUgc2VhcmNoLlxuICogICAgbW9iaWxlTGFiZWw9XCJDdXN0b20gbGFiZWxcIiAvLyBPcHRpb25hbC4gQ3VzdG9tIGxhYmVsIHRleHQgZm9yIGF1dG9zdWdnZXN0IGZpZWxkIG9uIG1vYmlsZS5cbiAqICAgIGlucHV0Q2xhc3NOYW1lPVwiXCIgLy8gT3B0aW9uYWwuIEN1c3RvbSBjbGFzc25hbWUgYXBwbGllZCB0byB0aGUgaW5wdXQgZWxlbWVudCBvZiB0aGUgY29tcG9uZW50IGZvciBwcm92aWRpbmcgQ1NTIHN0eWxlcy5cbiAqICAgIHRyYW5zbGF0ZWRQbGFjZWhvbGRlcj0gLy8gT3B0aW9uYWwuIEN1c3RvbiB0cmFuc2xhdGVkIHBsYWNlaG9sZGVyIHRleHQgZm9yIGF1dG9zdWdnZXN0IGZpZWxkLlxuICovXG5jbGFzcyBEVEF1dG9zdWdnZXN0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBhcHBFbGVtZW50OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgaWNvbjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgdHJhbnNsYXRlZFBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNlYXJjaENvbnRleHQ6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgICBhcmlhTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgb25TZWxlY3Q6IFByb3BUeXBlcy5mdW5jLFxuICAgIHRyYW5zcG9ydE1vZGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZmlsdGVyUmVzdWx0czogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZ2VvY29kaW5nU2l6ZTogUHJvcFR5cGVzLm51bWJlcixcbiAgICBvbkNsZWFyOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBzdG9yZVJlZjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgaGFuZGxlVmlhUG9pbnRzOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBmb2N1c0NoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgbGFuZzogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzb3VyY2VzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nKSxcbiAgICB0YXJnZXRzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nKSxcbiAgICBpc01vYmlsZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgaG92ZXJDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBhY2Nlc3NpYmxlUHJpbWFyeUNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHRpbWVab25lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHBhdGhPcHRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgcm91dGVzUHJlZml4OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgc3RvcHNQcmVmaXg6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgfSksXG4gICAgbW9iaWxlTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgbG9jazogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICB1bmxvY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgcmVmUG9pbnQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgaW5wdXRDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZm9udFdlaWdodHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBtZWRpdW06IFByb3BUeXBlcy5udW1iZXIsXG4gICAgfSksXG4gICAgbW9kZUljb25Db2xvcnM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgZ2V0QXV0b1N1Z2dlc3RJY29uczogUHJvcFR5cGVzLm9iamVjdCxcbiAgICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgbW9kZVNldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzaG93U2Nyb2xsOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBpc0VtYmVkZGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgfTtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgY2xhc3NOYW1lOiAnJyxcbiAgICBpY29uOiB1bmRlZmluZWQsXG4gICAgdmFsdWU6ICcnLFxuICAgIHRyYW5zcG9ydE1vZGU6IHVuZGVmaW5lZCxcbiAgICBsYW5nOiAnZmknLFxuICAgIHNvdXJjZXM6IFtdLFxuICAgIGlzTW9iaWxlOiBmYWxzZSxcbiAgICBjb2xvcjogJyMwMDdhYzknLFxuICAgIGhvdmVyQ29sb3I6ICcjMDA2MmExJyxcbiAgICBhY2Nlc3NpYmxlUHJpbWFyeUNvbG9yOiAnIzAwNzRiZScsXG4gICAgdGltZVpvbmU6ICdFdXJvcGUvSGVsc2lua2knLFxuICAgIHBhdGhPcHRzOiB7XG4gICAgICByb3V0ZXNQcmVmaXg6ICdsaW5qYXQnLFxuICAgICAgc3RvcHNQcmVmaXg6ICdweXNha2l0JyxcbiAgICB9LFxuICAgIG1vYmlsZUxhYmVsOiB1bmRlZmluZWQsXG4gICAgaW5wdXRDbGFzc05hbWU6ICcnLFxuICAgIHRyYW5zbGF0ZWRQbGFjZWhvbGRlcjogdW5kZWZpbmVkLFxuICAgIGZvbnRXZWlnaHRzOiB7XG4gICAgICBtZWRpdW06IDUwMCxcbiAgICB9LFxuICAgIG1vZGVJY29uQ29sb3JzOiB7XG4gICAgICAnbW9kZS1idXMnOiAnIzAwN2FjOScsXG4gICAgICAnbW9kZS1yYWlsJzogJyM4YzQ3OTknLFxuICAgICAgJ21vZGUtdHJhbSc6ICcjMDA4MTUxJyxcbiAgICAgICdtb2RlLW1ldHJvJzogJyNlZDhjMDAnLFxuICAgICAgJ21vZGUtZmVycnknOiAnIzAwN0E5NycsXG4gICAgICAnbW9kZS1jaXR5YmlrZSc6ICcjZjJiNjJkJyxcbiAgICAgICdtb2RlLWZ1bmljdWxhcic6ICcjZmYwMGZmJyxcbiAgICB9LFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBtb2RlU2V0OiB1bmRlZmluZWQsXG4gICAgc2hvd1Njcm9sbDogZmFsc2UsXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgbW9tZW50LnR6LnNldERlZmF1bHQocHJvcHMudGltZVpvbmUpO1xuICAgIG1vbWVudC5sb2NhbGUocHJvcHMubGFuZyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgdmFsdWU6IHByb3BzLnZhbHVlLFxuICAgICAgc3VnZ2VzdGlvbnM6IFtdLFxuICAgICAgZWRpdGluZzogZmFsc2UsXG4gICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgIHJlbmRlck1vYmlsZVNlYXJjaDogZmFsc2UsXG4gICAgICBzb3VyY2VzOiBwcm9wcy5zb3VyY2VzLFxuICAgICAgb3duUGxhY2VzOiBmYWxzZSxcbiAgICAgIHR5cGluZ1RpbWVyOiBudWxsLFxuICAgICAgdHlwaW5nOiBmYWxzZSxcbiAgICAgIHBlbmRpbmdTZWxlY3Rpb246IG51bGwsXG4gICAgICBzdWdnZXN0aW9uSW5kZXg6IDAsXG4gICAgICBjbGVhbkV4ZWN1dGVkOiBmYWxzZSxcbiAgICAgIHNjcm9sbFk6IDAsXG4gICAgfTtcbiAgICBPYmplY3Qua2V5cyh0cmFuc2xhdGlvbnMpLmZvckVhY2gobGFuZyA9PiB7XG4gICAgICBpMThuZXh0LmFkZFJlc291cmNlQnVuZGxlKGxhbmcsICd0cmFuc2xhdGlvbicsIHRyYW5zbGF0aW9uc1tsYW5nXSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBEVC00MDc0OiBXaGVuIGEgdXNlcidzIGxvY2F0aW9uIGlzIHVwZGF0ZWQgRFRBdXRvc3VnZ2VzdCB3b3VsZCByZS1yZW5kZXIgY2F1c2luZyBzdWdnZXN0aW9uIGxpc3QgdG8gcmVzZXQuXG4gIC8vIFRoaXMgd2lsbCBwcmV2ZW50IGl0LlxuICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpIHtcbiAgICByZXR1cm4gIWlzRXF1YWwobmV4dFN0YXRlLCB0aGlzLnN0YXRlKSB8fCAhaXNFcXVhbChuZXh0UHJvcHMsIHRoaXMucHJvcHMpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlID0gKCkgPT4ge1xuICAgIGlmIChpMThuZXh0Lmxhbmd1YWdlICE9PSB0aGlzLnByb3BzLmxhbmcpIHtcbiAgICAgIGkxOG5leHQuY2hhbmdlTGFuZ3VhZ2UodGhpcy5wcm9wcy5sYW5nKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNhbWVsY2FzZVxuICBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9IG5leHRQcm9wcyA9PiB7XG4gICAgLy8gd2FpdCB1bnRpbCBhZGRyZXNzIGlzIHNldCBvciBnZW9sb2NhdGlvbmluZyBmYWlsc1xuICAgIGlmIChuZXh0UHJvcHMudmFsdWUgIT09IHRoaXMuc3RhdGUudmFsdWUgJiYgIXRoaXMuc3RhdGUuZWRpdGluZykge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHZhbHVlOiBuZXh0UHJvcHMudmFsdWUsXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgb25DaGFuZ2UgPSAoZXZlbnQsIHsgbmV3VmFsdWUsIG1ldGhvZCB9KSA9PiB7XG4gICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICB2YWx1ZTogdGhpcy5mSW5wdXQgfHwgbmV3VmFsdWUgfHwgJycsXG4gICAgICByZW5kZXJNb2JpbGVTZWFyY2g6IHRoaXMucHJvcHMuaXNNb2JpbGUsXG4gICAgfTtcbiAgICAvLyBSZW1vdmUgZmlsbGVkIGlucHV0IHZhbHVlIHNvIGl0IHdvbnQgYmUgcmV1c2VkIHVubmVjZXNzYXJ5XG4gICAgdGhpcy5mSW5wdXQgPSBudWxsO1xuICAgIGlmICghdGhpcy5zdGF0ZS5lZGl0aW5nKSB7XG4gICAgICBuZXdTdGF0ZS5lZGl0aW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUsICgpID0+XG4gICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiBuZXdWYWx1ZSB8fCAnJyB9KSxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChtZXRob2QgIT09ICdlbnRlcicgfHwgdGhpcy5zdGF0ZS52YWxpZCkge1xuICAgICAgLy8gdGVzdCBhYm92ZSBkcm9wcyB1bm5lY2Vzc2FyeSB1cGRhdGVcbiAgICAgIC8vIHdoZW4gdXNlciBoaXRzIGVudGVyIGJ1dCBzZWFyY2ggaXMgdW5maW5pc2hlZFxuICAgICAgaWYgKHRoaXMuc3RhdGUudHlwaW5nVGltZXIpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc3RhdGUudHlwaW5nVGltZXIpO1xuICAgICAgfVxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ3R5cGUnKSB7XG4gICAgICAgIC8vIGFmdGVyIHRpbWVvdXQgcnVucywgYXJpYSBhbGVydCB3aWxsIGFubm91bmNlIGN1cnJlbnQgc2VsZWN0aW9uXG4gICAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHR5cGluZzogZmFsc2UgfSk7XG4gICAgICAgIH0sIDEwMDApO1xuICAgICAgICBuZXdTdGF0ZS50eXBpbmdUaW1lciA9IHRpbWVyO1xuICAgICAgICBuZXdTdGF0ZS50eXBpbmcgPSB0cnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSk7XG4gICAgfVxuICB9O1xuXG4gIG9uQmx1ciA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5zdGF0ZS5yZW5kZXJNb2JpbGVTZWFyY2gpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RhdGUuZWRpdGluZykge1xuICAgICAgdGhpcy5pbnB1dC5mb2N1cygpO1xuICAgIH1cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGVkaXRpbmc6IGZhbHNlLFxuICAgICAgcmVuZGVyTW9iaWxlU2VhcmNoOiBmYWxzZSxcbiAgICAgIHZhbHVlOiB0aGlzLnByb3BzLnZhbHVlLFxuICAgIH0pO1xuICB9O1xuXG4gIG9uU2VsZWN0ZWQgPSAoZSwgcmVmKSA9PiB7XG4gICAgaWYgKHRoaXMuc3RhdGUudmFsaWQpIHtcbiAgICAgIGlmIChyZWYuc3VnZ2VzdGlvbi50eXBlID09PSAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2VzOiBbJ0Zhdm91cml0ZScsICdCYWNrJ10sXG4gICAgICAgICAgICBvd25QbGFjZXM6IHRydWUsXG4gICAgICAgICAgICBwZW5kaW5nU2VsZWN0aW9uOiByZWYuc3VnZ2VzdGlvbi50eXBlLFxuICAgICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6ICcnIH0pO1xuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgcmVmLnN1Z2dlc3Rpb24udHlwZSA9PT0gJ2JhY2snIHx8XG4gICAgICAgIHJlZi5zdWdnZXN0aW9uLnR5cGUgPT09ICdGdXR1cmVSb3V0ZSdcbiAgICAgICkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNvdXJjZXM6IHRoaXMucHJvcHMuc291cmNlcyxcbiAgICAgICAgICAgIG93blBsYWNlczogZmFsc2UsXG4gICAgICAgICAgICBwZW5kaW5nU2VsZWN0aW9uOiByZWYuc3VnZ2VzdGlvbi50eXBlLFxuICAgICAgICAgICAgc3VnZ2VzdGlvbkluZGV4OiByZWYuc3VnZ2VzdGlvbkluZGV4LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6ICcnIH0pO1xuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0aW9uRG9uZSA9IHRydWU7IC8vIHNlbGVjdGlvbiBkb25lLCBkbyBub3QgbGV0IHVwY29taW5nIGtleWJvYXJkIGV2ZW50cyBjb25mdXNlIHRoZSBmbG93XG4gICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICB7XG4gICAgICAgICAgZWRpdGluZzogZmFsc2UsXG4gICAgICAgICAgdmFsdWU6IHJlZi5zdWdnZXN0aW9uVmFsdWUsXG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0aGlzLmlucHV0LmJsdXIoKTtcbiAgICAgICAgICBpZiAodGhpcy5wcm9wcy5oYW5kbGVWaWFQb2ludHMpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMuaGFuZGxlVmlhUG9pbnRzKHJlZi5zdWdnZXN0aW9uLCByZWYuc3VnZ2VzdGlvbkluZGV4KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5vblNlbGVjdChyZWYuc3VnZ2VzdGlvbiwgdGhpcy5wcm9wcy5pZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHJlbmRlck1vYmlsZVNlYXJjaDogZmFsc2UsXG4gICAgICAgICAgICAgIHNvdXJjZXM6IHRoaXMucHJvcHMuc291cmNlcyxcbiAgICAgICAgICAgICAgb3duUGxhY2VzOiBmYWxzZSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbnM6IFtdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Eb25lID0gZmFsc2U7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5wcm9wcy5mb2N1c0NoYW5nZSAmJlxuICAgICAgICAgICAgKCF0aGlzLnByb3BzLmlzTW9iaWxlIHx8IHRoaXMucHJvcHMuaXNFbWJlZGRlZClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMuZm9jdXNDaGFuZ2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMucHJvcHMuaXNNb2JpbGUpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VNb2JpbGVTZWFyY2goKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICBwcmV2U3RhdGUgPT4gKHtcbiAgICAgICAgICBwZW5kaW5nU2VsZWN0aW9uOiBwcmV2U3RhdGUudmFsdWUsXG4gICAgICAgIH0pLFxuICAgICAgICAoKSA9PiB0aGlzLmNoZWNrUGVuZGluZ1NlbGVjdGlvbigpLCAvLyBzZWFyY2ggbWF5IGZpbmlzaCBkdXJpbmcgc3RhdGUgY2hhbmdlXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICBvblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWQgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBzdWdnZXN0aW9uczogW10sXG4gICAgICBzb3VyY2VzOiB0aGlzLnByb3BzLnNvdXJjZXMsXG4gICAgICBvd25QbGFjZXM6IGZhbHNlLFxuICAgICAgZWRpdGluZzogZmFsc2UsXG4gICAgfSk7XG4gIH07XG5cbiAgZ2V0U3VnZ2VzdGlvblZhbHVlID0gc3VnZ2VzdGlvbiA9PiB7XG4gICAgaWYgKFxuICAgICAgc3VnZ2VzdGlvbi50eXBlID09PSAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycgfHxcbiAgICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ2JhY2snXG4gICAgKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiBnZXRMYWJlbChzdWdnZXN0aW9uLnByb3BlcnRpZXMpO1xuICB9O1xuXG4gIGNoZWNrUGVuZGluZ1NlbGVjdGlvbiA9ICgpID0+IHtcbiAgICBpZiAoXG4gICAgICAodGhpcy5zdGF0ZS5wZW5kaW5nU2VsZWN0aW9uID09PSAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycgfHxcbiAgICAgICAgdGhpcy5zdGF0ZS5wZW5kaW5nU2VsZWN0aW9uID09PSAnYmFjaycpICYmXG4gICAgICB0aGlzLnN0YXRlLnZhbGlkXG4gICAgKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICB7XG4gICAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogbnVsbCxcbiAgICAgICAgICBlZGl0aW5nOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pbnB1dC5mb2N1cygpO1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIC8vIGFjY2VwdCBhZnRlciBhbGwgb25nb2luZyBzZWFyY2hlcyBoYXZlIGZpbmlzaGVkXG4gICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlLnBlbmRpbmdTZWxlY3Rpb24gJiYgdGhpcy5zdGF0ZS52YWxpZCkge1xuICAgICAgLy8gZmluaXNoIHRoZSBzZWxlY3Rpb24gYnkgcGlja2luZyBmaXJzdCA9IGJlc3QgbWF0Y2ggb3Igd2l0aCAnRnV0dXJlUm91dGUnIGJ5IHN1Z2dlc3Rpb25JbmRleFxuICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAge1xuICAgICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IG51bGwsXG4gICAgICAgICAgZWRpdGluZzogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5zdGF0ZS5zdWdnZXN0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQuYmx1cigpO1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5vblNlbGVjdChcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5zdWdnZXN0aW9uc1t0aGlzLnN0YXRlLnN1Z2dlc3Rpb25JbmRleF0sXG4gICAgICAgICAgICAgIHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5wcm9wcy5pc01vYmlsZSkge1xuICAgICAgICAgICAgICB0aGlzLmNsb3NlTW9iaWxlU2VhcmNoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHRoaXMucHJvcHMuZm9jdXNDaGFuZ2UgJiZcbiAgICAgICAgICAgICAgKCF0aGlzLnByb3BzLmlzTW9iaWxlIHx8IHRoaXMucHJvcHMuaXNFbWJlZGRlZClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLnByb3BzLmZvY3VzQ2hhbmdlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgY2xlYXJCdXR0b24gPSAoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydjbGVhci1pbnB1dCddfVxuICAgICAgICBvbkNsaWNrPXt0aGlzLmNsZWFySW5wdXR9XG4gICAgICAgIGFyaWEtbGFiZWw9e2kxOG5leHQudCgnY2xlYXItYnV0dG9uLWxhYmVsJyl9XG4gICAgICA+XG4gICAgICAgIDxJY29uIGltZz1cImNsb3NlXCIgY29sb3I9e3RoaXMucHJvcHMuY29sb3J9IC8+XG4gICAgICA8L2J1dHRvbj5cbiAgICApO1xuICB9O1xuXG4gIGZldGNoRnVuY3Rpb24gPSAoeyB2YWx1ZSwgY2xlYW5FeGVjdXRlZCB9KSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuc2V0U3RhdGUoXG4gICAgICB7IHZhbGlkOiBmYWxzZSwgY2xlYW5FeGVjdXRlZDogIWNsZWFuRXhlY3V0ZWQgPyBmYWxzZSA6IGNsZWFuRXhlY3V0ZWQgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uRG9uZSkge1xuICAgICAgICAgIC8vIGRvIG5vdCBsZXQgY29tcG9uZW50IGNhc3QgdW5uZWNlc3NhcnkgcmVxdWVzdHNcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNMb2NhdGlvblNlYXJjaCA9XG4gICAgICAgICAgaXNFbXB0eSh0aGlzLnByb3BzLnRhcmdldHMpIHx8XG4gICAgICAgICAgdGhpcy5wcm9wcy50YXJnZXRzLmluY2x1ZGVzKCdMb2NhdGlvbnMnKTtcbiAgICAgICAgbGV0IHRhcmdldHM7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlLm93blBsYWNlcykge1xuICAgICAgICAgIHRhcmdldHMgPSBbJ0xvY2F0aW9ucyddO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGlzRW1wdHkodGhpcy5wcm9wcy50YXJnZXRzKSB8fFxuICAgICAgICAgICAgdGhpcy5wcm9wcy50YXJnZXRzLmluY2x1ZGVzKCdTdG9wcycpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0YXJnZXRzLnB1c2goJ1N0b3BzJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGlzRW1wdHkodGhpcy5wcm9wcy50YXJnZXRzKSB8fFxuICAgICAgICAgICAgdGhpcy5wcm9wcy50YXJnZXRzLmluY2x1ZGVzKCdCaWtlUmVudGFsU3RhdGlvbnMnKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGFyZ2V0cy5wdXNoKCdCaWtlUmVudGFsU3RhdGlvbnMnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzRW1wdHkodGhpcy5wcm9wcy50YXJnZXRzKSkge1xuICAgICAgICAgIHRhcmdldHMgPSBbLi4udGhpcy5wcm9wcy50YXJnZXRzXTtcbiAgICAgICAgICAvLyBpbiBkZXNrdG9wLCBmYXZvcml0ZXMgYXJlIGFjY2Vzc2VkIHZpYSBzdWIgc2VhcmNoXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaXNMb2NhdGlvblNlYXJjaCAmJlxuICAgICAgICAgICAgIXRoaXMucHJvcHMuaXNNb2JpbGUgJiZcbiAgICAgICAgICAgIChpc0VtcHR5KHRoaXMucHJvcHMuc291cmNlcykgfHxcbiAgICAgICAgICAgICAgdGhpcy5wcm9wcy5zb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRhcmdldHMucHVzaCgnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyByZW1vdmUgIGxvY2F0aW9uIGZhdm91cml0ZXMgaW4gZGVza3RvcCBzZWFyY2ggKGNvbGxlY3Rpb24gaXRlbSByZXBsYWNlcyBpdCBpbiB0YXJnZXQgYXJyYXkpXG4gICAgICAgIGNvbnN0IHNvdXJjZXMgPVxuICAgICAgICAgIHRoaXMuc3RhdGUuc291cmNlcyAmJlxuICAgICAgICAgIHRoaXMuc3RhdGUuc291cmNlcy5maWx0ZXIoXG4gICAgICAgICAgICBzID0+XG4gICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgaXNMb2NhdGlvblNlYXJjaCAmJlxuICAgICAgICAgICAgICAgIHMgPT09ICdGYXZvdXJpdGUnICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuc3RhdGUub3duUGxhY2VzICYmXG4gICAgICAgICAgICAgICAgIXRoaXMucHJvcHMuaXNNb2JpbGVcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuXG4gICAgICAgIGV4ZWN1dGVTZWFyY2goXG4gICAgICAgICAgdGFyZ2V0cyxcbiAgICAgICAgICBzb3VyY2VzLFxuICAgICAgICAgIHRoaXMucHJvcHMudHJhbnNwb3J0TW9kZSxcbiAgICAgICAgICB0aGlzLnByb3BzLnNlYXJjaENvbnRleHQsXG4gICAgICAgICAgdGhpcy5wcm9wcy5maWx0ZXJSZXN1bHRzLFxuICAgICAgICAgIHRoaXMucHJvcHMuZ2VvY29kaW5nU2l6ZSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpbnB1dDogdmFsdWUgfHwgJycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZWFyY2hSZXN1bHQgPT4ge1xuICAgICAgICAgICAgaWYgKHNlYXJjaFJlc3VsdCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFhYWCB0cmFuc2xhdGVzIGN1cnJlbnQgbG9jYXRpb25cbiAgICAgICAgICAgIGNvbnN0IHN1Z2dlc3Rpb25zID0gKHNlYXJjaFJlc3VsdC5yZXN1bHRzIHx8IFtdKVxuICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24gPT5cbiAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24udHlwZSAhPT0gJ0Z1dHVyZVJvdXRlJyB8fFxuICAgICAgICAgICAgICAgICAgKHN1Z2dlc3Rpb24udHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJyAmJlxuICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnByb3BlcnRpZXMudGltZSA+IG1vbWVudCgpLnVuaXgoKSksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLm1hcChzdWdnZXN0aW9uID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnR5cGUgPT09ICdDdXJyZW50TG9jYXRpb24nIHx8XG4gICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnR5cGUgPT09ICdTZWxlY3RGcm9tTWFwJyB8fFxuICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi50eXBlID09PSAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycgfHxcbiAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ2JhY2snXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2xhdGVkID0geyAuLi5zdWdnZXN0aW9uIH07XG4gICAgICAgICAgICAgICAgICB0cmFuc2xhdGVkLnByb3BlcnRpZXMubGFiZWxJZCA9IGkxOG5leHQudChcbiAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5wcm9wZXJ0aWVzLmxhYmVsSWQsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBzdWdnZXN0aW9uO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdmFsdWUgPT09IHRoaXMuc3RhdGUudmFsdWUgfHxcbiAgICAgICAgICAgICAgdmFsdWUgPT09IHRoaXMuc3RhdGUucGVuZGluZ1NlbGVjdGlvbiB8fFxuICAgICAgICAgICAgICB0aGlzLnN0YXRlLnBlbmRpbmdTZWxlY3Rpb24gPT09ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyB8fFxuICAgICAgICAgICAgICB0aGlzLnN0YXRlLnBlbmRpbmdTZWxlY3Rpb24gPT09ICdiYWNrJyB8fFxuICAgICAgICAgICAgICB0aGlzLnN0YXRlLnBlbmRpbmdTZWxlY3Rpb24gPT09ICdGdXR1cmVSb3V0ZSdcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAoKSA9PiB0aGlzLmNoZWNrUGVuZGluZ1NlbGVjdGlvbigpLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy5wcm9wcy5wYXRoT3B0cyxcbiAgICAgICAgICB0aGlzLnByb3BzLnJlZlBvaW50LFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICApO1xuICB9O1xuXG4gIGNsZWFySW5wdXQgPSAoKSA9PiB7XG4gICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICBlZGl0aW5nOiB0cnVlLFxuICAgICAgdmFsdWU6ICcnLFxuICAgICAgc291cmNlczogdGhpcy5wcm9wcy5zb3VyY2VzLFxuICAgICAgb3duUGxhY2VzOiBmYWxzZSxcbiAgICB9O1xuICAgIC8vIG11c3QgdXBkYXRlIHN1Z2dlc3Rpb25zXG4gICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSwgKCkgPT5cbiAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiAnJywgY2xlYW5FeGVjdXRlZDogdHJ1ZSB9KSxcbiAgICApO1xuICAgIGlmICh0aGlzLnByb3BzLm9uQ2xlYXIpIHtcbiAgICAgIHRoaXMucHJvcHMub25DbGVhcih0aGlzLnByb3BzLmlkKTtcbiAgICB9XG4gICAgdGhpcy5pbnB1dC5mb2N1cygpO1xuICB9O1xuXG4gIGlucHV0Q2xpY2tlZCA9IGlucHV0VmFsdWUgPT4ge1xuICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgICBpZiAodGhpcy5wcm9wcy5pc01vYmlsZSkge1xuICAgICAgdGhpcy5wcm9wcy5sb2NrKCk7XG4gICAgfVxuICAgIGlmICghdGhpcy5zdGF0ZS5lZGl0aW5nKSB7XG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAgICAgZWRpdGluZzogdHJ1ZSxcbiAgICAgICAgLy8gcmVzZXQgYXQgc3RhcnQsIGp1c3QgaW4gY2FzZSB3ZSBtaXNzZWQgc29tZXRoaW5nXG4gICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IG51bGwsXG4gICAgICAgIHJlbmRlck1vYmlsZVNlYXJjaDogdGhpcy5wcm9wcy5pc01vYmlsZSxcbiAgICAgIH07XG5cbiAgICAgIC8vIERULTMyNjM6IGFkZGVkIHN0YXRlS2V5RG93blxuICAgICAgY29uc3Qgc3RhdGVLZXlEb3duID0ge1xuICAgICAgICBlZGl0aW5nOiB0cnVlLFxuICAgICAgICBwZW5kaW5nU2VsZWN0aW9uOiBudWxsLFxuICAgICAgICB2YWx1ZTogaW5wdXRWYWx1ZSxcbiAgICAgIH07XG5cbiAgICAgIGlmICghdGhpcy5zdGF0ZS5zdWdnZXN0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgLy8gRFQtMzI2MzogYWRkZWQgaWYtZWxzZSBzdGF0ZW1lbnRcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dFZhbHVlID09PSAnb2JqZWN0JyB8fCAhaW5wdXRWYWx1ZSkge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUsICgpID0+XG4gICAgICAgICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogdGhpcy5zdGF0ZS52YWx1ZSB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoc3RhdGVLZXlEb3duLCAoKSA9PlxuICAgICAgICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6IGlucHV0VmFsdWUgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6IHRoaXMuc3RhdGUudmFsdWUgfSk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBzdG9yZUlucHV0UmVmZXJlbmNlID0gYXV0b3N1Z2dlc3QgPT4ge1xuICAgIGlmIChhdXRvc3VnZ2VzdCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5pbnB1dCA9IGF1dG9zdWdnZXN0LmlucHV0O1xuICAgICAgaWYgKHRoaXMucHJvcHMuc3RvcmVSZWYpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5zdG9yZVJlZihhdXRvc3VnZ2VzdC5pbnB1dCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8vIEZpbGwgaW5wdXQgd2hlbiB1c2VyIGNsaWNrcyBmaWxsIGlucHV0IGJ1dHRvbiBpbiBzdHJlZXQgc3VnZ2VzdGlvbiBpdGVtXG4gIGZpbGxJbnB1dCA9IG5ld1ZhbHVlID0+IHtcbiAgICB0aGlzLmZJbnB1dCA9IG5ld1ZhbHVlLnByb3BlcnRpZXMubmFtZTtcbiAgICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAgIGVkaXRpbmc6IHRydWUsXG4gICAgICB2YWx1ZTogbmV3VmFsdWUucHJvcGVydGllcy5uYW1lLFxuICAgICAgY2hlY2tQZW5kaW5nU2VsZWN0aW9uOiBuZXdWYWx1ZSxcbiAgICAgIHZhbGlkOiB0cnVlLFxuICAgIH07XG4gICAgLy8gbXVzdCB1cGRhdGUgc3VnZ2VzdGlvbnNcbiAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlKTtcbiAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogbmV3VmFsdWUucHJvcGVydGllcy5uYW1lIH0pO1xuICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgfTtcblxuICByZW5kZXJJdGVtID0gaXRlbSA9PiB7XG4gICAgY29uc3QgbmV3SXRlbSA9XG4gICAgICBpdGVtLnR5cGUgPT09ICdGdXR1cmVSb3V0ZSdcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgdHJhbnNsYXRlZFRleHQ6IHRyYW5zbGF0ZUZ1dHVyZVJvdXRlU3VnZ2VzdGlvblRpbWUoaXRlbSksXG4gICAgICAgICAgfVxuICAgICAgICA6IGl0ZW07XG4gICAgY29uc3QgY29udGVudCA9IGdldFN1Z2dlc3Rpb25Db250ZW50KGl0ZW0pO1xuICAgIHJldHVybiAoXG4gICAgICA8U3VnZ2VzdGlvbkl0ZW1cbiAgICAgICAgaXRlbT17bmV3SXRlbX1cbiAgICAgICAgY29udGVudD17Y29udGVudH1cbiAgICAgICAgbG9hZGluZz17IXRoaXMuc3RhdGUudmFsaWR9XG4gICAgICAgIGlzTW9iaWxlPXt0aGlzLnByb3BzLmlzTW9iaWxlfVxuICAgICAgICBhcmlhRmF2b3VyaXRlU3RyaW5nPXtpMThuZXh0LnQoJ2Zhdm91cml0ZScpfVxuICAgICAgICBjb2xvcj17dGhpcy5wcm9wcy5jb2xvcn1cbiAgICAgICAgYWNjZXNzaWJsZVByaW1hcnlDb2xvcj17dGhpcy5wcm9wcy5hY2Nlc3NpYmxlUHJpbWFyeUNvbG9yfVxuICAgICAgICBmaWxsSW5wdXQ9e3RoaXMuZmlsbElucHV0fVxuICAgICAgICBmb250V2VpZ2h0cz17dGhpcy5wcm9wcy5mb250V2VpZ2h0c31cbiAgICAgICAgZ2V0QXV0b1N1Z2dlc3RJY29ucz17dGhpcy5wcm9wcy5nZXRBdXRvU3VnZ2VzdEljb25zfVxuICAgICAgICBtb2RlSWNvbkNvbG9ycz17dGhpcy5wcm9wcy5tb2RlSWNvbkNvbG9yc31cbiAgICAgICAgbW9kZVNldD17dGhpcy5wcm9wcy5tb2RlU2V0fVxuICAgICAgLz5cbiAgICApO1xuICB9O1xuXG4gIGNsb3NlTW9iaWxlU2VhcmNoID0gKCkgPT4ge1xuICAgIHRoaXMucHJvcHMudW5sb2NrKCk7XG4gICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgIHtcbiAgICAgICAgcmVuZGVyTW9iaWxlU2VhcmNoOiBmYWxzZSxcbiAgICAgICAgdmFsdWU6IHRoaXMucHJvcHMudmFsdWUsXG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgdGhpcy5zdGF0ZS5zY3JvbGxZKTtcbiAgICAgICAgdGhpcy5vblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWQoKTtcbiAgICAgIH0sXG4gICAgKTtcbiAgfTtcblxuICBrZXlEb3duID0gZXZlbnQgPT4ge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbkRvbmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qga2V5Q29kZSA9IGV2ZW50LmtleTtcbiAgICBpZiAoa2V5Q29kZSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBlZGl0aW5nOiBmYWxzZSB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RhdGUuZWRpdGluZykge1xuICAgICAgaWYgKGtleUNvZGUgPT09ICdFbnRlcicgJiYgdGhpcy5zdGF0ZS52YWx1ZSAhPT0gJycpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHBlbmRpbmdTZWxlY3Rpb246IHRydWUgfSwgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiB0aGlzLnN0YXRlLnZhbHVlIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW5wdXRDbGlja2VkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgKGtleUNvZGUgPT09ICdFbnRlcicgfHwga2V5Q29kZSA9PT0gJ0Fycm93RG93bicpICYmXG4gICAgICB0aGlzLnN0YXRlLnZhbHVlID09PSAnJ1xuICAgICkge1xuICAgICAgdGhpcy5jbGVhcklucHV0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGtleUNvZGUgPT09ICdBcnJvd0Rvd24nICYmIHRoaXMuc3RhdGUudmFsdWUgIT09ICcnKSB7XG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAgICAgZWRpdGluZzogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IHRoaXMuc3RhdGUudmFsdWUsXG4gICAgICB9O1xuICAgICAgLy8gbXVzdCB1cGRhdGUgc3VnZ2VzdGlvbnNcbiAgICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUsICgpID0+XG4gICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiB0aGlzLnN0YXRlLnZhbHVlIH0pLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnN0YXRlLmVkaXRpbmcpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBlZGl0aW5nOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIGlmIChrZXlDb2RlID09PSAnVGFiJykge1xuICAgICAgdGhpcy5vbkJsdXIoKTtcbiAgICB9XG4gIH07XG5cbiAgc3VnZ2VzdGlvbkFzQXJpYUNvbnRlbnQgPSAoKSA9PiB7XG4gICAgbGV0IGxhYmVsID0gW107XG4gICAgY29uc3QgZmlyc3RTdWdnZXN0aW9uID0gdGhpcy5zdGF0ZS5zdWdnZXN0aW9uc1swXTtcbiAgICBpZiAoZmlyc3RTdWdnZXN0aW9uKSB7XG4gICAgICBpZiAoZmlyc3RTdWdnZXN0aW9uLnR5cGUgJiYgZmlyc3RTdWdnZXN0aW9uLnR5cGUuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKSB7XG4gICAgICAgIGxhYmVsLnB1c2goaTE4bmV4dC50KCdmYXZvdXJpdGUnKSk7XG4gICAgICB9XG4gICAgICBsYWJlbCA9IGxhYmVsLmNvbmNhdChnZXRTdWdnZXN0aW9uQ29udGVudCh0aGlzLnN0YXRlLnN1Z2dlc3Rpb25zWzBdKSk7XG4gICAgfVxuICAgIHJldHVybiBbLi4ubmV3IFNldChsYWJlbCldLmpvaW4oJyAtICcpO1xuICB9O1xuXG4gIGNsZWFyT2xkU2VhcmNoZXMgPSAoKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgY29udGV4dCxcbiAgICAgIGNsZWFyT2xkU2VhcmNoZXMsXG4gICAgICBjbGVhckZ1dHVyZVJvdXRlcyxcbiAgICB9ID0gdGhpcy5wcm9wcy5zZWFyY2hDb250ZXh0O1xuICAgIGlmIChjb250ZXh0ICYmIGNsZWFyT2xkU2VhcmNoZXMpIHtcbiAgICAgIGNsZWFyT2xkU2VhcmNoZXMoY29udGV4dCk7XG4gICAgICBpZiAoY2xlYXJGdXR1cmVSb3V0ZXMpIHtcbiAgICAgICAgY2xlYXJGdXR1cmVSb3V0ZXMoY29udGV4dCk7XG4gICAgICB9XG4gICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogdGhpcy5zdGF0ZS52YWx1ZSB9KTtcbiAgICB9XG4gIH07XG5cbiAgaXNPcmlnaW5EZXN0aW5hdGlvbk9yVmlhcG9pbnQgPSAoKSA9PlxuICAgIHRoaXMucHJvcHMuaWQgPT09ICdvcmlnaW4nIHx8XG4gICAgdGhpcy5wcm9wcy5pZCA9PT0gJ2Rlc3RpbmF0aW9uJyB8fFxuICAgIHRoaXMucHJvcHMuaWQgPT09ICd2aWEtcG9pbnQnIHx8XG4gICAgdGhpcy5wcm9wcy5pZCA9PT0gJ29yaWdpbi1zdG9wLW5lYXIteW91JztcblxuICBvbkZvY3VzID0gKCkgPT4ge1xuICAgIGNvbnN0IHBvc2l0aW9ucyA9IFtcbiAgICAgICdWYWxpdHR1IHNpamFpbnRpJyxcbiAgICAgICdOeWt5aW5lbiBzaWphaW50aXNpJyxcbiAgICAgICdDdXJyZW50IHBvc2l0aW9uJyxcbiAgICAgICdTZWxlY3RlZCBsb2NhdGlvbicsXG4gICAgICAnVmFsZCBwb3NpdGlvbicsXG4gICAgICAnQW52w6RuZCBtaW4gcG9zaXRpb24nLFxuICAgICAgJ01pbiBwb3NpdGlvbicsXG4gICAgICAnS8OkeXTDpCBueWt5aXN0w6Qgc2lqYWludGlhJyxcbiAgICAgICdVc2UgY3VycmVudCBsb2NhdGlvbicsXG4gICAgICAnWW91ciBjdXJyZW50IGxvY2F0aW9uJyxcbiAgICBdO1xuICAgIGlmIChwb3NpdGlvbnMuaW5jbHVkZXModGhpcy5zdGF0ZS52YWx1ZSkpIHtcbiAgICAgIHRoaXMuY2xlYXJJbnB1dCgpO1xuICAgIH1cbiAgICBjb25zdCBzY3JvbGxZID0gd2luZG93LnBhZ2VZT2Zmc2V0O1xuICAgIHJldHVybiB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHNjcm9sbFksXG4gICAgfSk7XG4gIH07XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmIChpMThuZXh0Lmxhbmd1YWdlICE9PSB0aGlzLnByb3BzLmxhbmcpIHtcbiAgICAgIGkxOG5leHQuY2hhbmdlTGFuZ3VhZ2UodGhpcy5wcm9wcy5sYW5nKTtcbiAgICB9XG4gICAgY29uc3Qge1xuICAgICAgdmFsdWUsXG4gICAgICBzdWdnZXN0aW9ucyxcbiAgICAgIHJlbmRlck1vYmlsZVNlYXJjaCxcbiAgICAgIGNsZWFuRXhlY3V0ZWQsXG4gICAgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgaW5wdXRQcm9wcyA9IHtcbiAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLnByb3BzLnRyYW5zbGF0ZWRQbGFjZWhvbGRlclxuICAgICAgICA/IHRoaXMucHJvcHMudHJhbnNsYXRlZFBsYWNlaG9sZGVyXG4gICAgICAgIDogaTE4bmV4dC50KHRoaXMucHJvcHMucGxhY2Vob2xkZXIpLFxuICAgICAgdmFsdWUsXG4gICAgICBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSxcbiAgICAgIG9uQmx1cjogdGhpcy5vbkJsdXIsXG4gICAgICBjbGFzc05hbWU6IGN4KFxuICAgICAgICBgJHtzdHlsZXMuaW5wdXR9ICR7XG4gICAgICAgICAgdGhpcy5wcm9wcy5pc01vYmlsZSAmJiB0aGlzLnByb3BzLnRyYW5zcG9ydE1vZGUgPyBzdHlsZXMudGhpbiA6ICcnXG4gICAgICAgIH0gJHtzdHlsZXNbdGhpcy5wcm9wcy5pZF0gfHwgJyd9ICR7XG4gICAgICAgICAgdGhpcy5zdGF0ZS52YWx1ZSA/IHN0eWxlcy5oYXNWYWx1ZSA6ICcnXG4gICAgICAgIH0gJHt0aGlzLnByb3BzLmlucHV0Q2xhc3NOYW1lfWAsXG4gICAgICApLFxuICAgICAgb25LZXlEb3duOiB0aGlzLmtleURvd24sIC8vIERULTMyNjNcbiAgICAgIHJlcXVpcmVkOiB0aGlzLnByb3BzLnJlcXVpcmVkLFxuICAgIH07XG4gICAgY29uc3QgYXJpYUJhcklkID0gdGhpcy5wcm9wcy5pZC5yZXBsYWNlKCdzZWFyY2hmaWVsZC0nLCAnJyk7XG4gICAgbGV0IFNlYXJjaEJhcklkID0gdGhpcy5wcm9wcy5hcmlhTGFiZWwgfHwgaTE4bmV4dC50KGFyaWFCYXJJZCk7XG4gICAgU2VhcmNoQmFySWQgPSBTZWFyY2hCYXJJZC5yZXBsYWNlKCdzZWFyY2hmaWVsZC0nLCAnJyk7XG4gICAgY29uc3QgYXJpYVJlcXVpcmVkVGV4dCA9IHRoaXMucHJvcHMucmVxdWlyZWRcbiAgICAgID8gYCR7aTE4bmV4dC50KCdyZXF1aXJlZCcpfS5gXG4gICAgICA6ICcnO1xuICAgIGNvbnN0IGFyaWFMYWJlbFRleHQgPSB0aGlzLnByb3BzLmlzTW9iaWxlXG4gICAgICA/IGkxOG5leHQudCgnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLW1vYmlsZScpXG4gICAgICA6IGkxOG5leHQudCgnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWRlc2t0b3AnKTtcbiAgICBjb25zdCBhcmlhU3VnZ2VzdGlvbkxlbiA9IGkxOG5leHQudCgnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbicsIHtcbiAgICAgIGNvdW50OiBzdWdnZXN0aW9ucy5sZW5ndGgsXG4gICAgfSk7XG5cbiAgICBjb25zdCBhcmlhQ3VycmVudFN1Z2dlc3Rpb24gPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5zdWdnZXN0aW9uQXNBcmlhQ29udGVudCgpIHx8IHRoaXMucHJvcHMudmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGkxOG5leHQudCgnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbicsIHtcbiAgICAgICAgICBzZWxlY3Rpb246IHRoaXMuc3VnZ2VzdGlvbkFzQXJpYUNvbnRlbnQoKSB8fCB0aGlzLnByb3BzLnZhbHVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAnJztcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXNbJ3NyLW9ubHknXX0gcm9sZT1cImFsZXJ0XCI+XG4gICAgICAgICAgeyF0aGlzLnN0YXRlLnR5cGluZyAmJlxuICAgICAgICAgICAgdGhpcy5zdGF0ZS5lZGl0aW5nICYmXG4gICAgICAgICAgICBgJHthcmlhU3VnZ2VzdGlvbkxlbn0gJHthcmlhQ3VycmVudFN1Z2dlc3Rpb24oKX1gfVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIHt0aGlzLnByb3BzLmlzTW9iaWxlICYmIChcbiAgICAgICAgICA8TW9iaWxlU2VhcmNoXG4gICAgICAgICAgICBzZWFyY2hPcGVuPXtyZW5kZXJNb2JpbGVTZWFyY2h9XG4gICAgICAgICAgICBhcHBFbGVtZW50PXt0aGlzLnByb3BzLmFwcEVsZW1lbnR9XG4gICAgICAgICAgICBjbGVhck9sZFNlYXJjaGVzPXt0aGlzLmNsZWFyT2xkU2VhcmNoZXN9XG4gICAgICAgICAgICBpZD17dGhpcy5wcm9wcy5pZH1cbiAgICAgICAgICAgIGNsZWFySW5wdXQ9e3RoaXMuY2xlYXJJbnB1dH1cbiAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnZhbHVlfVxuICAgICAgICAgICAgc3VnZ2VzdGlvbnM9e1tcbiAgICAgICAgICAgICAgLi4uc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnY2xlYXItc2VhcmNoLWhpc3RvcnknLFxuICAgICAgICAgICAgICAgIGxhYmVsSWQ6IGkxOG5leHQudCgnY2xlYXItc2VhcmNoLWhpc3RvcnknKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF19XG4gICAgICAgICAgICBpbnB1dFByb3BzPXt7XG4gICAgICAgICAgICAgIC4uLmlucHV0UHJvcHMsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLmlzT3JpZ2luRGVzdGluYXRpb25PclZpYXBvaW50KClcbiAgICAgICAgICAgICAgICA/IGkxOG5leHQudCgnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcycpXG4gICAgICAgICAgICAgICAgOiBpbnB1dFByb3BzLnBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIGZldGNoRnVuY3Rpb249e3RoaXMuZmV0Y2hGdW5jdGlvbn1cbiAgICAgICAgICAgIG9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZD17dGhpcy5vblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWR9XG4gICAgICAgICAgICBnZXRTdWdnZXN0aW9uVmFsdWU9e3RoaXMuZ2V0U3VnZ2VzdGlvblZhbHVlfVxuICAgICAgICAgICAgcmVuZGVyU3VnZ2VzdGlvbj17dGhpcy5yZW5kZXJJdGVtfVxuICAgICAgICAgICAgY2xvc2VIYW5kbGU9e3RoaXMuY2xvc2VNb2JpbGVTZWFyY2h9XG4gICAgICAgICAgICBhcmlhTGFiZWw9e2FyaWFSZXF1aXJlZFRleHRcbiAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgIC5jb25jYXQoU2VhcmNoQmFySWQpXG4gICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAuY29uY2F0KGFyaWFDdXJyZW50U3VnZ2VzdGlvbigpKX1cbiAgICAgICAgICAgIGxhYmVsPXtcbiAgICAgICAgICAgICAgdGhpcy5wcm9wcy5tb2JpbGVMYWJlbFxuICAgICAgICAgICAgICAgID8gdGhpcy5wcm9wcy5tb2JpbGVMYWJlbFxuICAgICAgICAgICAgICAgIDogaTE4bmV4dC50KHRoaXMucHJvcHMuaWQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvblN1Z2dlc3Rpb25TZWxlY3RlZD17dGhpcy5vblNlbGVjdGVkfVxuICAgICAgICAgICAgZGlhbG9nSGVhZGVyVGV4dD17aTE4bmV4dC50KCdkZWxldGUtb2xkLXNlYXJjaGVzLWhlYWRlcicpfVxuICAgICAgICAgICAgZGlhbG9nUHJpbWFyeUJ1dHRvblRleHQ9e2kxOG5leHQudCgnZGVsZXRlJyl9XG4gICAgICAgICAgICBkaWFsb2dTZWNvbmRhcnlCdXR0b25UZXh0PXtpMThuZXh0LnQoJ2NhbmNlbCcpfVxuICAgICAgICAgICAgY2xlYXJJbnB1dEJ1dHRvblRleHQ9e2kxOG5leHQudCgnY2xlYXItYnV0dG9uLWxhYmVsJyl9XG4gICAgICAgICAgICBmb2N1c0lucHV0PXtjbGVhbkV4ZWN1dGVkfVxuICAgICAgICAgICAgY29sb3I9e3RoaXMucHJvcHMuY29sb3J9XG4gICAgICAgICAgICBob3ZlckNvbG9yPXt0aGlzLnByb3BzLmhvdmVyQ29sb3J9XG4gICAgICAgICAgICBhY2Nlc3NpYmxlUHJpbWFyeUNvbG9yPXt0aGlzLnByb3BzLmFjY2Vzc2libGVQcmltYXJ5Q29sb3J9XG4gICAgICAgICAgICBmb250V2VpZ2h0cz17dGhpcy5wcm9wcy5mb250V2VpZ2h0c31cbiAgICAgICAgICAgIHNob3dTY3JvbGw9e3RoaXMucHJvcHMuc2hvd1Njcm9sbH1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7IXJlbmRlck1vYmlsZVNlYXJjaCAmJiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjeChbXG4gICAgICAgICAgICAgIHN0eWxlc1snYXV0b3N1Z2dlc3QtaW5wdXQtY29udGFpbmVyJ10sXG4gICAgICAgICAgICAgIHN0eWxlc1t0aGlzLnByb3BzLmlkXSxcbiAgICAgICAgICAgIF0pfVxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgJy0tY29sb3InOiBgJHt0aGlzLnByb3BzLmNvbG9yfWAsXG4gICAgICAgICAgICAgICctLWhvdmVyLWNvbG9yJzogYCR7dGhpcy5wcm9wcy5ob3ZlckNvbG9yfWAsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0aGlzLnByb3BzLmljb24gJiYgKFxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjeChbXG4gICAgICAgICAgICAgICAgICBzdHlsZXNbYGF1dG9zdWdnZXN0LWlucHV0LWljb25gXSxcbiAgICAgICAgICAgICAgICAgIHN0eWxlc1t0aGlzLnByb3BzLmlkXSxcbiAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuaW5wdXRDbGFzc05hbWUgJiZcbiAgICAgICAgICAgICAgICAgICAgYCR7dGhpcy5wcm9wcy5pbnB1dENsYXNzTmFtZX0taW5wdXQtaWNvbmAsXG4gICAgICAgICAgICAgICAgXSl9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8SWNvbiBpbWc9e2Ake3RoaXMucHJvcHMuaWNvbn1gfSAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8QXV0b3N1Z2dlc3RcbiAgICAgICAgICAgICAgYWx3YXlzUmVuZGVyU3VnZ2VzdGlvbnM9e3RoaXMuc3RhdGUuZWRpdGluZ31cbiAgICAgICAgICAgICAgaWQ9e3RoaXMucHJvcHMuaWR9XG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb25zPXtzdWdnZXN0aW9uc31cbiAgICAgICAgICAgICAgb25TdWdnZXN0aW9uc0ZldGNoUmVxdWVzdGVkPXt0aGlzLmZldGNoRnVuY3Rpb259XG4gICAgICAgICAgICAgIG9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZD17dGhpcy5vblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWR9XG4gICAgICAgICAgICAgIGdldFN1Z2dlc3Rpb25WYWx1ZT17dGhpcy5nZXRTdWdnZXN0aW9uVmFsdWV9XG4gICAgICAgICAgICAgIHJlbmRlclN1Z2dlc3Rpb249e3RoaXMucmVuZGVySXRlbX1cbiAgICAgICAgICAgICAgaW5wdXRQcm9wcz17e1xuICAgICAgICAgICAgICAgIC4uLmlucHV0UHJvcHMsXG4gICAgICAgICAgICAgICAgb25Gb2N1czogdGhpcy5vbkZvY3VzLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBmb2N1c0lucHV0T25TdWdnZXN0aW9uQ2xpY2tcbiAgICAgICAgICAgICAgc2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnM9eygpID0+IHRoaXMuc3RhdGUuZWRpdGluZ31cbiAgICAgICAgICAgICAgaGlnaGxpZ2h0Rmlyc3RTdWdnZXN0aW9uPXshdGhpcy5zdGF0ZS5vd25QbGFjZXN9XG4gICAgICAgICAgICAgIHRoZW1lPXtzdHlsZXN9XG4gICAgICAgICAgICAgIHJlbmRlcklucHV0Q29tcG9uZW50PXtwID0+IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT17c3R5bGVzWydzci1vbmx5J119IGh0bWxGb3I9e3RoaXMucHJvcHMuaWR9PlxuICAgICAgICAgICAgICAgICAgICB7YXJpYUN1cnJlbnRTdWdnZXN0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KGFyaWFSZXF1aXJlZFRleHQpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChTZWFyY2hCYXJJZClcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KGFyaWFMYWJlbFRleHQpfVxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXthcmlhQ3VycmVudFN1Z2dlc3Rpb24oKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoYXJpYVJlcXVpcmVkVGV4dClcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KFNlYXJjaEJhcklkKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoYXJpYUxhYmVsVGV4dCl9XG4gICAgICAgICAgICAgICAgICAgIGlkPXt0aGlzLnByb3BzLmlkfVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLmlucHV0Q2xpY2tlZH1cbiAgICAgICAgICAgICAgICAgICAgb25LZXlEb3duPXt0aGlzLmtleURvd259XG4gICAgICAgICAgICAgICAgICAgIHsuLi5wfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLnZhbHVlICYmIHRoaXMuY2xlYXJCdXR0b24oKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgb25TdWdnZXN0aW9uU2VsZWN0ZWQ9e3RoaXMub25TZWxlY3RlZH1cbiAgICAgICAgICAgICAgcmVmPXt0aGlzLnN0b3JlSW5wdXRSZWZlcmVuY2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IERUQXV0b3N1Z2dlc3RXaXRoU2Nyb2xsTG9jayA9IHdpdGhTY3JvbGxMb2NrKERUQXV0b3N1Z2dlc3QpO1xuXG5leHBvcnQgZGVmYXVsdCBEVEF1dG9zdWdnZXN0V2l0aFNjcm9sbExvY2s7XG4iLCJpbXBvcnQgeyBnZXROYW1lTGFiZWwgfSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtdW5pcS1ieS1sYWJlbCc7XG4vKipcbiAqIFJldHVybnMgbGFiZWwgZm9yIHByb3BlcnRpZXNcbiAqXG4gKiBAbmFtZSBnZXRMYWJlbFxuICogQHBhcmFtIHsqfSBwcm9wZXJ0aWVzIG9iamVjdCB0aGF0IGNvbnRhaW5zIFxuICogQHJldHVybnMge0Jvb2xlYW59IHRydWUvZmFsc2VcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBwcm9wZXJ0aWVzOiB7XG4gICAgXCJpZFwiOiBcIkdURlM6TUFUS0E6MzE4OTE1XCIsXG4gICAgXCJnaWRcIjogXCJndGZzbWF0a2E6c3RhdGlvbjpHVEZTOk1BVEtBOjMxODkxNVwiLFxuICAgIFwibGF5ZXJcIjogXCJzdGF0aW9uXCIsXG4gICAgXCJzb3VyY2VcIjogXCJndGZzbWF0a2FcIixcbiAgICBcInNvdXJjZV9pZFwiOiBcIkdURlM6TUFUS0E6MzE4OTE1XCIsXG4gICAgXCJuYW1lXCI6IFwiUmF1dGF0aWVudG9yaVwiLFxuICAgIFwicG9zdGFsY29kZVwiOiBcIjAwMTAwXCIsXG4gICAgXCJwb3N0YWxjb2RlX2dpZFwiOiBcIndob3NvbmZpcnN0OnBvc3RhbGNvZGU6NDIxNDc5NTY5XCIsXG4gICAgXCJjb25maWRlbmNlXCI6IDEsXG4gICAgXCJhY2N1cmFjeVwiOiBcImNlbnRyb2lkXCIsXG4gICAgXCJjb3VudHJ5XCI6IFwiU3VvbWlcIixcbiAgICBcImNvdW50cnlfZ2lkXCI6IFwid2hvc29uZmlyc3Q6Y291bnRyeTowXCIsXG4gICAgXCJjb3VudHJ5X2FcIjogXCJGSU5cIixcbiAgICBcInJlZ2lvblwiOiBcIlV1c2ltYWFcIixcbiAgICBcInJlZ2lvbl9naWRcIjogXCJ3aG9zb25maXJzdDpyZWdpb246ODU2ODMwNjdcIixcbiAgICBcImxvY2FsYWRtaW5cIjogXCJIZWxzaW5raVwiLFxuICAgIFwibG9jYWxhZG1pbl9naWRcIjogXCJ3aG9zb25maXJzdDpsb2NhbGFkbWluOjkwNzE5OTcxNVwiLFxuICAgIFwibG9jYWxpdHlcIjogXCJIZWxzaW5raVwiLFxuICAgIFwibG9jYWxpdHlfZ2lkXCI6IFwid2hvc29uZmlyc3Q6bG9jYWxpdHk6MTAxNzQ4NDE3XCIsXG4gICAgXCJuZWlnaGJvdXJob29kXCI6IFwiS2x1dXZpXCIsXG4gICAgXCJuZWlnaGJvdXJob29kX2dpZFwiOiBcIndob3NvbmZpcnN0Om5laWdoYm91cmhvb2Q6ODU4OTg4NDdcIixcbiAgICBcImxhYmVsXCI6IFwiUmF1dGF0aWVudG9yaSwga29pbGxpbmVuLCBLbHV1dmksIEhlbHNpbmtpXCJcbiAgICB9XG4gKiBkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC5nZXRMYWJlbChwYXJhbTEsIHBhcmFtMik7XG4gKiAvLz10cnVlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldExhYmVsKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgcGFydHMgPSBnZXROYW1lTGFiZWwocHJvcGVydGllcywgdHJ1ZSk7XG4gIHN3aXRjaCAocHJvcGVydGllcy5sYXllcikge1xuICAgIGNhc2UgJ3NlbGVjdEZyb21NYXAnOlxuICAgIGNhc2UgJ2N1cnJlbnRQb3NpdGlvbic6XG4gICAgY2FzZSAnb3duTG9jYXRpb25zJzpcbiAgICBjYXNlICdiYWNrJzpcbiAgICAgIHJldHVybiBwYXJ0c1sxXSB8fCBwYXJ0c1swXTtcbiAgICBjYXNlICdmYXZvdXJpdGVCaWtlUmVudGFsU3RhdGlvbic6XG4gICAgY2FzZSAnZmF2b3VyaXRlUGxhY2UnOlxuICAgICAgcmV0dXJuIHBhcnRzWzBdO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gcGFydHMubGVuZ3RoID4gMSAmJiBwYXJ0c1sxXSAhPT0gJydcbiAgICAgICAgPyBwYXJ0cy5qb2luKCcsICcpXG4gICAgICAgIDogcGFydHNbMV0gfHwgcGFydHNbMF07XG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgaG9va3MgZnJvbSAnQGhzbC1maS9ob29rcyc7XG5cbmNvbnN0IHdpdGhTY3JvbGxMb2NrID0gQ29tcG9uZW50ID0+IHtcbiAgcmV0dXJuIHByb3BzID0+IHtcbiAgICBjb25zdCB7IGxvY2ssIHVubG9jayB9ID0gaG9va3MudXNlU2Nyb2xsTG9jaygpO1xuXG4gICAgcmV0dXJuIDxDb21wb25lbnQgbG9jaz17bG9ja30gdW5sb2NrPXt1bmxvY2t9IHsuLi5wcm9wc30gLz47XG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoU2Nyb2xsTG9jaztcbiJdLCJuYW1lcyI6WyJfdHlwZW9mIiwib2JqIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsIl9leHRlbmRzIiwiT2JqZWN0IiwiYXNzaWduIiwidGFyZ2V0IiwiaSIsImFyZ3VtZW50cyIsImxlbmd0aCIsInNvdXJjZSIsImtleSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImFwcGx5IiwidGhpcyIsIl9hcnJheUxpa2VUb0FycmF5IiwiYXJyIiwibGVuIiwiYXJyMiIsIkFycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibyIsIm1pbkxlbiIsImFycmF5TGlrZVRvQXJyYXkiLCJuIiwidG9TdHJpbmciLCJzbGljZSIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIl90b0NvbnN1bWFibGVBcnJheSIsImlzQXJyYXkiLCJhcnJheVdpdGhvdXRIb2xlcyIsIml0ZXIiLCJpdGVyYWJsZVRvQXJyYXkiLCJ1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIlR5cGVFcnJvciIsIm5vbkl0ZXJhYmxlU3ByZWFkIiwiX2NsYXNzQ2FsbENoZWNrIiwiaW5zdGFuY2UiLCJDb25zdHJ1Y3RvciIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwicHJvcHMiLCJkZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiZGVmaW5lUHJvcGVydHkiLCJfY3JlYXRlQ2xhc3MiLCJwcm90b1Byb3BzIiwic3RhdGljUHJvcHMiLCJfc2V0UHJvdG90eXBlT2YiLCJwIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJfaW5oZXJpdHMiLCJzdWJDbGFzcyIsInN1cGVyQ2xhc3MiLCJjcmVhdGUiLCJ2YWx1ZSIsIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJzZWxmIiwiUmVmZXJlbmNlRXJyb3IiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsImFzc2VydFRoaXNJbml0aWFsaXplZCIsIl9nZXRQcm90b3R5cGVPZiIsImdldFByb3RvdHlwZU9mIiwiX3NsaWNlZFRvQXJyYXkiLCJhcnJheVdpdGhIb2xlcyIsIl9hcnIiLCJfbiIsIl9kIiwiX2UiLCJ1bmRlZmluZWQiLCJfcyIsIl9pIiwibmV4dCIsImRvbmUiLCJwdXNoIiwiZXJyIiwiaXRlcmFibGVUb0FycmF5TGltaXQiLCJub25JdGVyYWJsZVJlc3QiLCJ0cnVFcSIsInZhbDEiLCJ2YWwyIiwiaXNEdXBsaWNhdGUiLCJpdGVtMSIsIml0ZW0yIiwicHJvcHMxIiwicHJvcGVydGllcyIsInByb3BzMiIsInR5cGUiLCJvMSIsIm9yaWdpbiIsImQxIiwiZGVzdGluYXRpb24iLCJvMiIsImQyIiwibG9jYWxpdHkiLCJsYXllciIsImxhYmVsSWQiLCJndGZzSWQiLCJnaWQiLCJpbmNsdWRlcyIsInAxIiwiZ2VvbWV0cnkiLCJjb29yZGluYXRlcyIsInAyIiwiTWF0aCIsImFicyIsImxhYmVsIiwiYWRkcmVzcyIsIm5vcm1hbGl6ZSIsInN0ciIsImlzU3RyaW5nIiwidG9Mb3dlckNhc2UiLCJMYXllclR5cGUiLCJBZGRyZXNzIiwiQmFjayIsIkN1cnJlbnRQb3NpdGlvbiIsIkZhdm91cml0ZVN0b3AiLCJGYXZvdXJpdGVTdGF0aW9uIiwiRmF2b3VyaXRlUGxhY2UiLCJGYXZvdXJpdGVSb3V0ZSIsIkZ1dHVyZVJvdXRlIiwiU3RhdGlvbiIsIlNlbGVjdEZyb21NYXAiLCJTZWxlY3RGcm9tT3duTG9jYXRpb25zIiwiU3RvcCIsIlN0cmVldCIsIlZlbnVlIiwiQmlrZVJlbnRhbFN0YXRpb24iLCJDYXJQYXJrIiwiQmlrZVBhcmsiLCJtYXRjaCIsIm5vcm1hbGl6ZWRUZXJtIiwicmVzdWx0UHJvcGVydGllcyIsIm1hcCIsImZpbHRlciIsIm5vcm1hbGl6ZWRWYWx1ZSIsImluZGV4T2YiLCJyZWR1Y2UiLCJwcmV2aW91cyIsImN1cnJlbnQiLCJnZXRMYXllclJhbmsiLCJGYXZvdXJpdGVCaWtlUmVudGFsU3RhdGlvbiIsInNvcnRTZWFyY2hSZXN1bHRzIiwibGluZVJlZ2V4cCIsInJlc3VsdHMiLCJ0ZXJtIiwiaXNMaW5lSWRlbnRpZmllciIsImlzTGluZVNlYXJjaCIsIm9yZGVyZWRSZXN1bHRzIiwib3JkZXJCeSIsInJlc3VsdCIsInNob3J0TmFtZSIsImNvbmZpZGVuY2UiLCJ1bmlxV2l0aCIsImdldFN0b3BOYW1lIiwic3RvcENvZGUiLCJsYXN0SW5kZXhPZiIsInN1YnN0cmluZyIsImdldExvY2FsaXR5Iiwic3VnZ2VzdGlvbiIsImxvY2FsYWRtaW4iLCJnZXRTdG9wQ29kZSIsImlkIiwiY29kZSIsImZvcm1hdEZhdm91cml0ZVBsYWNlTGFiZWwiLCJzcGxpdCIsInJlcGxhY2UiLCJSZWdFeHAiLCJlc2NhcGVSZWdFeHAiLCJnZXROYW1lTGFiZWwiLCJtZW1vaXplIiwicGxhaW4iLCJtb2RlIiwibG9uZ05hbWUiLCJhZ2VuY3kiLCJpdGVtIiwiY2xvbmVEZWVwIiwidW5pcUJ5TGFiZWwiLCJmZWF0dXJlcyIsImZlYXQxIiwiZmVhdDIiLCJib29sIiwiaXNFcXVhbCIsImZpbHRlck1hdGNoaW5nVG9JbnB1dCIsImxpc3QiLCJJbnB1dCIsImZpZWxkcyIsImlucHV0IiwidHJpbSIsIm11bHRpV29yZCIsInBhcnRzIiwiZm9yRWFjaCIsInBOYW1lIiwiZ2V0Iiwic3BsaWNlIiwiam9pbiIsImNvbmNhdCIsInNlcmlhbGl6ZSIsInByZWZpeCIsImtleXMiLCJrIiwidiIsImVuY29kZVVSSUNvbXBvbmVudCIsImF4aW9zIiwicmVxdWlyZSIsImdldEpzb24iLCJ1cmwiLCJwYXJhbXMiLCJlbmNvZGVVUkkiLCJzZWFyY2giLCJ0aW1lb3V0IiwibWV0aG9kIiwiaGVhZGVycyIsIkFjY2VwdCIsInRoZW4iLCJyZXMiLCJkYXRhIiwiZ2V0R2VvY29kaW5nUmVzdWx0cyIsInNlYXJjaFN0cmluZyIsInNlYXJjaFBhcmFtcyIsImxhbmciLCJmb2N1c1BvaW50Iiwic291cmNlcyIsInBlbGlhc1VybCIsIm1pbmltYWxSZWdleHAiLCJnZW9jb2RpbmdMYXllcnMiLCJ0ZXh0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJQRUxJQVNfVVJMIiwib3B0cyIsImxheWVycyIsImdldFN0b3BzRnJvbUdlb2NvZGluZyIsInN0b3BzIiwiVVJMX1BFTElBU19QTEFDRSIsImdpZHMiLCJzdG9wU3RhdGlvbk1hcCIsInN0b3AiLCJzdG9wT3JTdGF0aW9uIiwiaWRzIiwiYWRkZW5kdW0iLCJsYXN0VXBkYXRlZCIsImZhdm91cml0ZUlkIiwiZ2V0T2xkU2VhcmNoZXMiLCJvbGRTZWFyY2hlcyIsImRyb3BMYXllcnMiLCJtYXRjaGluZ09sZFNlYXJjaGVzIiwidGFrZSIsIm5ld0l0ZW0iLCJ0aW1ldGFibGVDbGlja2VkIiwiYXJyb3dDbGlja2VkIiwicm91dGVMYXllcnMiLCJsb2NhdGlvbkxheWVycyIsInBhcmtpbmdMYXllcnMiLCJkZWJvdW5jZWRTZWFyY2giLCJkZWJvdW5jZSIsInRhcmdldHMiLCJ0cmFuc3BvcnRNb2RlIiwic2VhcmNoQ29udGV4dCIsImZpbHRlclJlc3VsdHMiLCJnZW9jb2RpbmdTaXplIiwiY2FsbGJhY2siLCJwYXRoT3B0cyIsInJlZlBvaW50IiwiZ2V0UG9zaXRpb25zIiwibG9jYXRpb25zIiwiZ2V0RmF2b3VyaXRlTG9jYXRpb25zIiwicHJldlNlYXJjaGVzIiwiZ2V0RmF2b3VyaXRlU3RvcHMiLCJwYXJraW5nQXJlYVNvdXJjZXMiLCJnZXRMYW5ndWFnZSIsImdldFN0b3BBbmRTdGF0aW9uc1F1ZXJ5IiwiZ2V0RmF2b3VyaXRlQmlrZVJlbnRhbFN0YXRpb25zUXVlcnkiLCJnZXRGYXZvdXJpdGVCaWtlUmVudGFsU3RhdGlvbnMiLCJnZXRGYXZvdXJpdGVSb3V0ZXNRdWVyeSIsImdldEZhdm91cml0ZVJvdXRlcyIsImdldFJvdXRlc1F1ZXJ5IiwiY29udGV4dCIsImxvY2F0aW9uQXdhcmUiLCJpc1BlbGlhc0xvY2F0aW9uQXdhcmUiLCJVUkxfUEVMSUFTIiwiZmVlZElEcyIsImdlb2NvZGluZ1NlYXJjaFBhcmFtcyIsImdlb2NvZGluZ1NvdXJjZXMiLCJnZXRGdXR1cmVSb3V0ZXMiLCJjaXR5QmlrZU5ldHdvcmtzIiwiYWxsVGFyZ2V0cyIsImFsbFNvdXJjZXMiLCJwb3NpdGlvbiIsInNlYXJjaENvbXBvbmVudHMiLCJzZWFyY2hlcyIsImxhbmd1YWdlIiwibGF0IiwibG9uIiwidG9GaXhlZCIsInN0YXR1cyIsImdldEN1cnJlbnRQb3NpdGlvbklmRW1wdHkiLCJzZWxlY3RQb3NpdGlvbkZvbU1hcCIsIml0ZW1zIiwiZmF2b3VyaXRlTG9jYXRpb25zIiwiZmF2b3VyaXRlU3RvcHMiLCJoYXNGYXZvdXJpdGVzIiwic2VsZWN0RnJvbU93bkxvY2F0aW9ucyIsImZhdm91cml0ZXMiLCJmZWVkaXMiLCJnZW9zb3VyY2VzIiwibG9jYXRpb25IaXN0b3J5Iiwic2l6ZSIsImZlZWRJZHMiLCJoaXN0b3J5Iiwic3RvcHNBbmRTdGF0aW9ucyIsImV2ZXJ5IiwiZGVkdXBlc3RvcHMiLCJzdG9wSGlzdG9yeSIsImZhdm91cml0ZVJvdXRlcyIsInJvdXRlSGlzdG9yeSIsImZhdm91cml0ZUJpa2VTdGF0aW9ucyIsImFsbCIsImZsYXR0ZW4iLCJlcnJvciIsImxlYWRpbmciLCJtb2R1bGUiLCJob29rQ2FsbGJhY2siLCJzb21lIiwiaG9va3MiLCJzZXRIb29rQ2FsbGJhY2siLCJpc09iamVjdCIsImhhc093blByb3AiLCJhIiwiYiIsImlzT2JqZWN0RW1wdHkiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiaXNVbmRlZmluZWQiLCJpc051bWJlciIsImlzRGF0ZSIsIkRhdGUiLCJmbiIsImV4dGVuZCIsInZhbHVlT2YiLCJjcmVhdGVVVEMiLCJmb3JtYXQiLCJsb2NhbGUiLCJzdHJpY3QiLCJjcmVhdGVMb2NhbE9yVVRDIiwidXRjIiwiZGVmYXVsdFBhcnNpbmdGbGFncyIsImVtcHR5IiwidW51c2VkVG9rZW5zIiwidW51c2VkSW5wdXQiLCJvdmVyZmxvdyIsImNoYXJzTGVmdE92ZXIiLCJudWxsSW5wdXQiLCJpbnZhbGlkRXJhIiwiaW52YWxpZE1vbnRoIiwiaW52YWxpZEZvcm1hdCIsInVzZXJJbnZhbGlkYXRlZCIsImlzbyIsInBhcnNlZERhdGVQYXJ0cyIsImVyYSIsIm1lcmlkaWVtIiwicmZjMjgyMiIsIndlZWtkYXlNaXNtYXRjaCIsImdldFBhcnNpbmdGbGFncyIsIm0iLCJfcGYiLCJpc1ZhbGlkIiwiX2lzVmFsaWQiLCJmbGFncyIsInBhcnNlZFBhcnRzIiwiaXNOb3dWYWxpZCIsImlzTmFOIiwiZ2V0VGltZSIsImludmFsaWRXZWVrZGF5IiwiX3N0cmljdCIsImJpZ0hvdXIiLCJpc0Zyb3plbiIsImNyZWF0ZUludmFsaWQiLCJOYU4iLCJmdW4iLCJ0IiwibW9tZW50UHJvcGVydGllcyIsInVwZGF0ZUluUHJvZ3Jlc3MiLCJjb3B5Q29uZmlnIiwidG8iLCJwcm9wIiwidmFsIiwiX2lzQU1vbWVudE9iamVjdCIsIl9mIiwiX2wiLCJfdHptIiwiX2lzVVRDIiwiX29mZnNldCIsIl9sb2NhbGUiLCJNb21lbnQiLCJjb25maWciLCJ1cGRhdGVPZmZzZXQiLCJpc01vbWVudCIsIndhcm4iLCJtc2ciLCJzdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3MiLCJjb25zb2xlIiwiZGVwcmVjYXRlIiwiZmlyc3RUaW1lIiwiZGVwcmVjYXRpb25IYW5kbGVyIiwiYXJnIiwiYXJncyIsIkVycm9yIiwic3RhY2siLCJkZXByZWNhdGlvbnMiLCJkZXByZWNhdGVTaW1wbGUiLCJpc0Z1bmN0aW9uIiwiRnVuY3Rpb24iLCJzZXQiLCJfY29uZmlnIiwiX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50IiwiX2RheU9mTW9udGhPcmRpbmFsUGFyc2UiLCJfb3JkaW5hbFBhcnNlIiwibWVyZ2VDb25maWdzIiwicGFyZW50Q29uZmlnIiwiY2hpbGRDb25maWciLCJMb2NhbGUiLCJkZWZhdWx0Q2FsZW5kYXIiLCJzYW1lRGF5IiwibmV4dERheSIsIm5leHRXZWVrIiwibGFzdERheSIsImxhc3RXZWVrIiwic2FtZUVsc2UiLCJjYWxlbmRhciIsIm1vbSIsIm5vdyIsIm91dHB1dCIsIl9jYWxlbmRhciIsInplcm9GaWxsIiwibnVtYmVyIiwidGFyZ2V0TGVuZ3RoIiwiZm9yY2VTaWduIiwiYWJzTnVtYmVyIiwiemVyb3NUb0ZpbGwiLCJwb3ciLCJtYXgiLCJzdWJzdHIiLCJmb3JtYXR0aW5nVG9rZW5zIiwibG9jYWxGb3JtYXR0aW5nVG9rZW5zIiwiZm9ybWF0RnVuY3Rpb25zIiwiZm9ybWF0VG9rZW5GdW5jdGlvbnMiLCJhZGRGb3JtYXRUb2tlbiIsInRva2VuIiwicGFkZGVkIiwib3JkaW5hbCIsImZ1bmMiLCJsb2NhbGVEYXRhIiwicmVtb3ZlRm9ybWF0dGluZ1Rva2VucyIsIm1ha2VGb3JtYXRGdW5jdGlvbiIsImFycmF5IiwiZm9ybWF0TW9tZW50IiwiZXhwYW5kRm9ybWF0IiwiaW52YWxpZERhdGUiLCJyZXBsYWNlTG9uZ0RhdGVGb3JtYXRUb2tlbnMiLCJsb25nRGF0ZUZvcm1hdCIsImxhc3RJbmRleCIsImRlZmF1bHRMb25nRGF0ZUZvcm1hdCIsIkxUUyIsIkxUIiwiTCIsIkxMIiwiTExMIiwiTExMTCIsIl9sb25nRGF0ZUZvcm1hdCIsImZvcm1hdFVwcGVyIiwidG9VcHBlckNhc2UiLCJ0b2siLCJkZWZhdWx0SW52YWxpZERhdGUiLCJfaW52YWxpZERhdGUiLCJkZWZhdWx0T3JkaW5hbCIsImRlZmF1bHREYXlPZk1vbnRoT3JkaW5hbFBhcnNlIiwiX29yZGluYWwiLCJkZWZhdWx0UmVsYXRpdmVUaW1lIiwiZnV0dXJlIiwicGFzdCIsInMiLCJzcyIsIm1tIiwiaCIsImhoIiwiZCIsImRkIiwidyIsInd3IiwiTSIsIk1NIiwieSIsInl5IiwicmVsYXRpdmVUaW1lIiwid2l0aG91dFN1ZmZpeCIsInN0cmluZyIsImlzRnV0dXJlIiwiX3JlbGF0aXZlVGltZSIsInBhc3RGdXR1cmUiLCJkaWZmIiwiYWxpYXNlcyIsImFkZFVuaXRBbGlhcyIsInVuaXQiLCJzaG9ydGhhbmQiLCJsb3dlckNhc2UiLCJub3JtYWxpemVVbml0cyIsInVuaXRzIiwibm9ybWFsaXplT2JqZWN0VW5pdHMiLCJpbnB1dE9iamVjdCIsIm5vcm1hbGl6ZWRQcm9wIiwibm9ybWFsaXplZElucHV0IiwicHJpb3JpdGllcyIsImFkZFVuaXRQcmlvcml0eSIsInByaW9yaXR5IiwiZ2V0UHJpb3JpdGl6ZWRVbml0cyIsInVuaXRzT2JqIiwidSIsInNvcnQiLCJpc0xlYXBZZWFyIiwieWVhciIsImFic0Zsb29yIiwiY2VpbCIsImZsb29yIiwidG9JbnQiLCJhcmd1bWVudEZvckNvZXJjaW9uIiwiY29lcmNlZE51bWJlciIsImlzRmluaXRlIiwibWFrZUdldFNldCIsImtlZXBUaW1lIiwic2V0JDEiLCJtb250aCIsImRhdGUiLCJkYXlzSW5Nb250aCIsInN0cmluZ0dldCIsInN0cmluZ1NldCIsInByaW9yaXRpemVkIiwicmVnZXhlcyIsIm1hdGNoMSIsIm1hdGNoMiIsIm1hdGNoMyIsIm1hdGNoNCIsIm1hdGNoNiIsIm1hdGNoMXRvMiIsIm1hdGNoM3RvNCIsIm1hdGNoNXRvNiIsIm1hdGNoMXRvMyIsIm1hdGNoMXRvNCIsIm1hdGNoMXRvNiIsIm1hdGNoVW5zaWduZWQiLCJtYXRjaFNpZ25lZCIsIm1hdGNoT2Zmc2V0IiwibWF0Y2hTaG9ydE9mZnNldCIsIm1hdGNoVGltZXN0YW1wIiwibWF0Y2hXb3JkIiwiYWRkUmVnZXhUb2tlbiIsInJlZ2V4Iiwic3RyaWN0UmVnZXgiLCJpc1N0cmljdCIsImdldFBhcnNlUmVnZXhGb3JUb2tlbiIsInVuZXNjYXBlRm9ybWF0IiwicmVnZXhFc2NhcGUiLCJtYXRjaGVkIiwicDMiLCJwNCIsInRva2VucyIsImFkZFBhcnNlVG9rZW4iLCJhZGRXZWVrUGFyc2VUb2tlbiIsIl93IiwiYWRkVGltZVRvQXJyYXlGcm9tVG9rZW4iLCJfYSIsIllFQVIiLCJNT05USCIsIkRBVEUiLCJIT1VSIiwiTUlOVVRFIiwiU0VDT05EIiwiTUlMTElTRUNPTkQiLCJXRUVLIiwiV0VFS0RBWSIsIm1vZCIsIngiLCJtb2RNb250aCIsIm1vbnRoc1Nob3J0IiwibW9udGhzIiwibW9udGhzU2hvcnRSZWdleCIsIm1vbnRoc1JlZ2V4IiwibW9udGhzUGFyc2UiLCJkZWZhdWx0TG9jYWxlTW9udGhzIiwiZGVmYXVsdExvY2FsZU1vbnRoc1Nob3J0IiwiTU9OVEhTX0lOX0ZPUk1BVCIsImRlZmF1bHRNb250aHNTaG9ydFJlZ2V4IiwiZGVmYXVsdE1vbnRoc1JlZ2V4IiwibG9jYWxlTW9udGhzIiwiX21vbnRocyIsImlzRm9ybWF0IiwibG9jYWxlTW9udGhzU2hvcnQiLCJfbW9udGhzU2hvcnQiLCJoYW5kbGVTdHJpY3RQYXJzZSIsIm1vbnRoTmFtZSIsImlpIiwibGxjIiwidG9Mb2NhbGVMb3dlckNhc2UiLCJfbW9udGhzUGFyc2UiLCJfbG9uZ01vbnRoc1BhcnNlIiwiX3Nob3J0TW9udGhzUGFyc2UiLCJsb2NhbGVNb250aHNQYXJzZSIsIl9tb250aHNQYXJzZUV4YWN0Iiwic2V0TW9udGgiLCJkYXlPZk1vbnRoIiwibWluIiwiZ2V0U2V0TW9udGgiLCJnZXREYXlzSW5Nb250aCIsImNvbXB1dGVNb250aHNQYXJzZSIsIl9tb250aHNTaG9ydFN0cmljdFJlZ2V4IiwiX21vbnRoc1Nob3J0UmVnZXgiLCJfbW9udGhzU3RyaWN0UmVnZXgiLCJfbW9udGhzUmVnZXgiLCJjbXBMZW5SZXYiLCJzaG9ydFBpZWNlcyIsImxvbmdQaWVjZXMiLCJtaXhlZFBpZWNlcyIsImRheXNJblllYXIiLCJwYXJzZVR3b0RpZ2l0WWVhciIsInBhcnNlSW50IiwiZ2V0U2V0WWVhciIsImdldElzTGVhcFllYXIiLCJjcmVhdGVEYXRlIiwibXMiLCJnZXRGdWxsWWVhciIsInNldEZ1bGxZZWFyIiwiY3JlYXRlVVRDRGF0ZSIsIlVUQyIsImdldFVUQ0Z1bGxZZWFyIiwic2V0VVRDRnVsbFllYXIiLCJmaXJzdFdlZWtPZmZzZXQiLCJkb3ciLCJkb3kiLCJmd2QiLCJnZXRVVENEYXkiLCJkYXlPZlllYXJGcm9tV2Vla3MiLCJ3ZWVrIiwid2Vla2RheSIsInJlc1llYXIiLCJyZXNEYXlPZlllYXIiLCJkYXlPZlllYXIiLCJ3ZWVrT2ZZZWFyIiwicmVzV2VlayIsIndlZWtPZmZzZXQiLCJ3ZWVrc0luWWVhciIsIndlZWtPZmZzZXROZXh0IiwibG9jYWxlV2VlayIsIl93ZWVrIiwiZGVmYXVsdExvY2FsZVdlZWsiLCJsb2NhbGVGaXJzdERheU9mV2VlayIsImxvY2FsZUZpcnN0RGF5T2ZZZWFyIiwiZ2V0U2V0V2VlayIsImFkZCIsImdldFNldElTT1dlZWsiLCJwYXJzZVdlZWtkYXkiLCJ3ZWVrZGF5c1BhcnNlIiwicGFyc2VJc29XZWVrZGF5Iiwic2hpZnRXZWVrZGF5cyIsIndzIiwid2Vla2RheXNNaW4iLCJ3ZWVrZGF5c1Nob3J0Iiwid2Vla2RheXMiLCJ3ZWVrZGF5c01pblJlZ2V4Iiwid2Vla2RheXNTaG9ydFJlZ2V4Iiwid2Vla2RheXNSZWdleCIsImRlZmF1bHRMb2NhbGVXZWVrZGF5cyIsImRlZmF1bHRMb2NhbGVXZWVrZGF5c1Nob3J0IiwiZGVmYXVsdExvY2FsZVdlZWtkYXlzTWluIiwiZGVmYXVsdFdlZWtkYXlzUmVnZXgiLCJkZWZhdWx0V2Vla2RheXNTaG9ydFJlZ2V4IiwiZGVmYXVsdFdlZWtkYXlzTWluUmVnZXgiLCJsb2NhbGVXZWVrZGF5cyIsIl93ZWVrZGF5cyIsImRheSIsImxvY2FsZVdlZWtkYXlzU2hvcnQiLCJfd2Vla2RheXNTaG9ydCIsImxvY2FsZVdlZWtkYXlzTWluIiwiX3dlZWtkYXlzTWluIiwiaGFuZGxlU3RyaWN0UGFyc2UkMSIsIndlZWtkYXlOYW1lIiwiX3dlZWtkYXlzUGFyc2UiLCJfc2hvcnRXZWVrZGF5c1BhcnNlIiwiX21pbldlZWtkYXlzUGFyc2UiLCJsb2NhbGVXZWVrZGF5c1BhcnNlIiwiX3dlZWtkYXlzUGFyc2VFeGFjdCIsIl9mdWxsV2Vla2RheXNQYXJzZSIsImdldFNldERheU9mV2VlayIsImdldERheSIsImdldFNldExvY2FsZURheU9mV2VlayIsImdldFNldElTT0RheU9mV2VlayIsImNvbXB1dGVXZWVrZGF5c1BhcnNlIiwiX3dlZWtkYXlzU3RyaWN0UmVnZXgiLCJfd2Vla2RheXNSZWdleCIsIl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXgiLCJfd2Vla2RheXNTaG9ydFJlZ2V4IiwiX3dlZWtkYXlzTWluU3RyaWN0UmVnZXgiLCJfd2Vla2RheXNNaW5SZWdleCIsIm1pbnAiLCJzaG9ydHAiLCJsb25ncCIsIm1pblBpZWNlcyIsImhGb3JtYXQiLCJob3VycyIsImtGb3JtYXQiLCJsb3dlcmNhc2UiLCJtaW51dGVzIiwibWF0Y2hNZXJpZGllbSIsIl9tZXJpZGllbVBhcnNlIiwibG9jYWxlSXNQTSIsImNoYXJBdCIsInNlY29uZHMiLCJrSW5wdXQiLCJfaXNQbSIsImlzUE0iLCJfbWVyaWRpZW0iLCJwb3MiLCJwb3MxIiwicG9zMiIsImRlZmF1bHRMb2NhbGVNZXJpZGllbVBhcnNlIiwiZ2V0U2V0SG91ciIsImxvY2FsZU1lcmlkaWVtIiwiaXNMb3dlciIsImdsb2JhbExvY2FsZSIsImJhc2VDb25maWciLCJkYXlPZk1vbnRoT3JkaW5hbFBhcnNlIiwibWVyaWRpZW1QYXJzZSIsImxvY2FsZXMiLCJsb2NhbGVGYW1pbGllcyIsImNvbW1vblByZWZpeCIsImFycjEiLCJtaW5sIiwibm9ybWFsaXplTG9jYWxlIiwiY2hvb3NlTG9jYWxlIiwibmFtZXMiLCJqIiwibG9hZExvY2FsZSIsIm9sZExvY2FsZSIsImV4cG9ydHMiLCJfYWJiciIsImdldFNldEdsb2JhbExvY2FsZSIsImUiLCJ2YWx1ZXMiLCJnZXRMb2NhbGUiLCJkZWZpbmVMb2NhbGUiLCJhYmJyIiwicGFyZW50TG9jYWxlIiwidXBkYXRlTG9jYWxlIiwidG1wTG9jYWxlIiwibGlzdExvY2FsZXMiLCJjaGVja092ZXJmbG93IiwiX292ZXJmbG93RGF5T2ZZZWFyIiwiX292ZXJmbG93V2Vla3MiLCJfb3ZlcmZsb3dXZWVrZGF5IiwiZXh0ZW5kZWRJc29SZWdleCIsImJhc2ljSXNvUmVnZXgiLCJ0elJlZ2V4IiwiaXNvRGF0ZXMiLCJpc29UaW1lcyIsImFzcE5ldEpzb25SZWdleCIsIm9ic09mZnNldHMiLCJVVCIsIkdNVCIsIkVEVCIsIkVTVCIsIkNEVCIsIkNTVCIsIk1EVCIsIk1TVCIsIlBEVCIsIlBTVCIsImNvbmZpZ0Zyb21JU08iLCJsIiwiYWxsb3dUaW1lIiwiZGF0ZUZvcm1hdCIsInRpbWVGb3JtYXQiLCJ0ekZvcm1hdCIsImV4ZWMiLCJjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0IiwiZXh0cmFjdEZyb21SRkMyODIyU3RyaW5ncyIsInllYXJTdHIiLCJtb250aFN0ciIsImRheVN0ciIsImhvdXJTdHIiLCJtaW51dGVTdHIiLCJzZWNvbmRTdHIiLCJ1bnRydW5jYXRlWWVhciIsInByZXByb2Nlc3NSRkMyODIyIiwiY2hlY2tXZWVrZGF5Iiwid2Vla2RheVN0ciIsInBhcnNlZElucHV0IiwiY2FsY3VsYXRlT2Zmc2V0Iiwib2JzT2Zmc2V0IiwibWlsaXRhcnlPZmZzZXQiLCJudW1PZmZzZXQiLCJobSIsImNvbmZpZ0Zyb21SRkMyODIyIiwicGFyc2VkQXJyYXkiLCJzZXRVVENNaW51dGVzIiwiZ2V0VVRDTWludXRlcyIsImNvbmZpZ0Zyb21TdHJpbmciLCJjcmVhdGVGcm9tSW5wdXRGYWxsYmFjayIsImRlZmF1bHRzIiwiYyIsImN1cnJlbnREYXRlQXJyYXkiLCJub3dWYWx1ZSIsIl91c2VVVEMiLCJnZXRVVENNb250aCIsImdldFVUQ0RhdGUiLCJnZXRNb250aCIsImdldERhdGUiLCJjb25maWdGcm9tQXJyYXkiLCJjdXJyZW50RGF0ZSIsImV4cGVjdGVkV2Vla2RheSIsInllYXJUb1VzZSIsImRheU9mWWVhckZyb21XZWVrSW5mbyIsIl9kYXlPZlllYXIiLCJfbmV4dERheSIsIndlZWtZZWFyIiwidGVtcCIsIndlZWtkYXlPdmVyZmxvdyIsImN1cldlZWsiLCJHRyIsIlciLCJFIiwiY3JlYXRlTG9jYWwiLCJnZyIsIklTT184NjAxIiwiUkZDXzI4MjIiLCJza2lwcGVkIiwic3RyaW5nTGVuZ3RoIiwidG90YWxQYXJzZWRJbnB1dExlbmd0aCIsIm1lcmlkaWVtRml4V3JhcCIsImVyYXNDb252ZXJ0WWVhciIsImhvdXIiLCJpc1BtIiwibWVyaWRpZW1Ib3VyIiwiY29uZmlnRnJvbVN0cmluZ0FuZEFycmF5IiwidGVtcENvbmZpZyIsImJlc3RNb21lbnQiLCJzY29yZVRvQmVhdCIsImN1cnJlbnRTY29yZSIsInZhbGlkRm9ybWF0Rm91bmQiLCJiZXN0Rm9ybWF0SXNWYWxpZCIsInNjb3JlIiwiY29uZmlnRnJvbU9iamVjdCIsImRheU9yRGF0ZSIsIm1pbnV0ZSIsInNlY29uZCIsIm1pbGxpc2Vjb25kIiwiY3JlYXRlRnJvbUNvbmZpZyIsInByZXBhcmVDb25maWciLCJwcmVwYXJzZSIsImNvbmZpZ0Zyb21JbnB1dCIsImlzVVRDIiwicHJvdG90eXBlTWluIiwib3RoZXIiLCJwcm90b3R5cGVNYXgiLCJwaWNrQnkiLCJtb21lbnRzIiwib3JkZXJpbmciLCJpc0R1cmF0aW9uVmFsaWQiLCJ1bml0SGFzRGVjaW1hbCIsInBhcnNlRmxvYXQiLCJpc1ZhbGlkJDEiLCJjcmVhdGVJbnZhbGlkJDEiLCJjcmVhdGVEdXJhdGlvbiIsIkR1cmF0aW9uIiwiZHVyYXRpb24iLCJ5ZWFycyIsInF1YXJ0ZXJzIiwicXVhcnRlciIsIndlZWtzIiwiaXNvV2VlayIsImRheXMiLCJtaWxsaXNlY29uZHMiLCJfbWlsbGlzZWNvbmRzIiwiX2RheXMiLCJfZGF0YSIsIl9idWJibGUiLCJpc0R1cmF0aW9uIiwiYWJzUm91bmQiLCJyb3VuZCIsImNvbXBhcmVBcnJheXMiLCJhcnJheTEiLCJhcnJheTIiLCJkb250Q29udmVydCIsImxlbmd0aERpZmYiLCJkaWZmcyIsIm9mZnNldCIsInNlcGFyYXRvciIsInV0Y09mZnNldCIsInNpZ24iLCJvZmZzZXRGcm9tU3RyaW5nIiwiY2h1bmtPZmZzZXQiLCJtYXRjaGVyIiwibWF0Y2hlcyIsImNsb25lV2l0aE9mZnNldCIsIm1vZGVsIiwiY2xvbmUiLCJzZXRUaW1lIiwibG9jYWwiLCJnZXREYXRlT2Zmc2V0IiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJnZXRTZXRPZmZzZXQiLCJrZWVwTG9jYWxUaW1lIiwia2VlcE1pbnV0ZXMiLCJsb2NhbEFkanVzdCIsIl9jaGFuZ2VJblByb2dyZXNzIiwiYWRkU3VidHJhY3QiLCJnZXRTZXRab25lIiwic2V0T2Zmc2V0VG9VVEMiLCJzZXRPZmZzZXRUb0xvY2FsIiwic3VidHJhY3QiLCJzZXRPZmZzZXRUb1BhcnNlZE9mZnNldCIsInRab25lIiwiaGFzQWxpZ25lZEhvdXJPZmZzZXQiLCJpc0RheWxpZ2h0U2F2aW5nVGltZSIsImlzRGF5bGlnaHRTYXZpbmdUaW1lU2hpZnRlZCIsIl9pc0RTVFNoaWZ0ZWQiLCJ0b0FycmF5IiwiaXNMb2NhbCIsImlzVXRjT2Zmc2V0IiwiaXNVdGMiLCJhc3BOZXRSZWdleCIsImlzb1JlZ2V4IiwicmV0IiwiZGlmZlJlcyIsInBhcnNlSXNvIiwibW9tZW50c0RpZmZlcmVuY2UiLCJpbnAiLCJwb3NpdGl2ZU1vbWVudHNEaWZmZXJlbmNlIiwiYmFzZSIsImlzQWZ0ZXIiLCJpc0JlZm9yZSIsImNyZWF0ZUFkZGVyIiwiZGlyZWN0aW9uIiwicGVyaW9kIiwidG1wIiwiaXNBZGRpbmciLCJpbnZhbGlkIiwiU3RyaW5nIiwiaXNNb21lbnRJbnB1dCIsImlzTnVtYmVyT3JTdHJpbmdBcnJheSIsImlzTW9tZW50SW5wdXRPYmplY3QiLCJwcm9wZXJ0eSIsIm9iamVjdFRlc3QiLCJwcm9wZXJ0eVRlc3QiLCJhcnJheVRlc3QiLCJkYXRhVHlwZVRlc3QiLCJpc0NhbGVuZGFyU3BlYyIsImdldENhbGVuZGFyRm9ybWF0IiwibXlNb21lbnQiLCJjYWxlbmRhciQxIiwidGltZSIsImZvcm1hdHMiLCJzb2QiLCJzdGFydE9mIiwiY2FsZW5kYXJGb3JtYXQiLCJsb2NhbElucHV0IiwiZW5kT2YiLCJpc0JldHdlZW4iLCJpbmNsdXNpdml0eSIsImxvY2FsRnJvbSIsImxvY2FsVG8iLCJpc1NhbWUiLCJpbnB1dE1zIiwiaXNTYW1lT3JBZnRlciIsImlzU2FtZU9yQmVmb3JlIiwiYXNGbG9hdCIsInRoYXQiLCJ6b25lRGVsdGEiLCJtb250aERpZmYiLCJ3aG9sZU1vbnRoRGlmZiIsImFuY2hvciIsInRvSVNPU3RyaW5nIiwia2VlcE9mZnNldCIsInRvRGF0ZSIsImluc3BlY3QiLCJkYXRldGltZSIsInN1ZmZpeCIsInpvbmUiLCJpbnB1dFN0cmluZyIsImRlZmF1bHRGb3JtYXRVdGMiLCJkZWZhdWx0Rm9ybWF0IiwicG9zdGZvcm1hdCIsImh1bWFuaXplIiwiZnJvbU5vdyIsInRvTm93IiwibmV3TG9jYWxlRGF0YSIsIk1TX1BFUl9TRUNPTkQiLCJNU19QRVJfTUlOVVRFIiwiTVNfUEVSX0hPVVIiLCJNU19QRVJfNDAwX1lFQVJTIiwibW9kJDEiLCJkaXZpZGVuZCIsImRpdmlzb3IiLCJsb2NhbFN0YXJ0T2ZEYXRlIiwidXRjU3RhcnRPZkRhdGUiLCJzdGFydE9mRGF0ZSIsImlzb1dlZWtkYXkiLCJ1bml4IiwidG9PYmplY3QiLCJ0b0pTT04iLCJpc1ZhbGlkJDIiLCJwYXJzaW5nRmxhZ3MiLCJpbnZhbGlkQXQiLCJjcmVhdGlvbkRhdGEiLCJsb2NhbGVFcmFzIiwiZXJhcyIsIl9lcmFzIiwic2luY2UiLCJ1bnRpbCIsImxvY2FsZUVyYXNQYXJzZSIsImVyYU5hbWUiLCJuYXJyb3ciLCJsb2NhbGVFcmFzQ29udmVydFllYXIiLCJkaXIiLCJnZXRFcmFOYW1lIiwiZ2V0RXJhTmFycm93IiwiZ2V0RXJhQWJiciIsImdldEVyYVllYXIiLCJlcmFzTmFtZVJlZ2V4IiwiY29tcHV0ZUVyYXNQYXJzZSIsIl9lcmFzTmFtZVJlZ2V4IiwiX2VyYXNSZWdleCIsImVyYXNBYmJyUmVnZXgiLCJfZXJhc0FiYnJSZWdleCIsImVyYXNOYXJyb3dSZWdleCIsIl9lcmFzTmFycm93UmVnZXgiLCJtYXRjaEVyYUFiYnIiLCJtYXRjaEVyYU5hbWUiLCJtYXRjaEVyYU5hcnJvdyIsIm1hdGNoRXJhWWVhck9yZGluYWwiLCJfZXJhWWVhck9yZGluYWxSZWdleCIsImFiYnJQaWVjZXMiLCJuYW1lUGllY2VzIiwibmFycm93UGllY2VzIiwiYWRkV2Vla1llYXJGb3JtYXRUb2tlbiIsImdldHRlciIsImdldFNldFdlZWtZZWFyIiwiZ2V0U2V0V2Vla1llYXJIZWxwZXIiLCJnZXRTZXRJU09XZWVrWWVhciIsImdldElTT1dlZWtzSW5ZZWFyIiwiZ2V0SVNPV2Vla3NJbklTT1dlZWtZZWFyIiwiaXNvV2Vla1llYXIiLCJnZXRXZWVrc0luWWVhciIsIndlZWtJbmZvIiwiZ2V0V2Vla3NJbldlZWtZZWFyIiwid2Vla3NUYXJnZXQiLCJzZXRXZWVrQWxsIiwiZGF5T2ZZZWFyRGF0YSIsImdldFNldFF1YXJ0ZXIiLCJlcmFzUGFyc2UiLCJlcmFZZWFyT3JkaW5hbFBhcnNlIiwiZ2V0U2V0RGF5T2ZNb250aCIsImdldFNldERheU9mWWVhciIsImdldFNldE1pbnV0ZSIsImdldFNldE1pbGxpc2Vjb25kIiwiZ2V0U2V0U2Vjb25kIiwicGFyc2VNcyIsImdldFpvbmVBYmJyIiwiZ2V0Wm9uZU5hbWUiLCJwcm90byIsImNyZWF0ZVVuaXgiLCJjcmVhdGVJblpvbmUiLCJwYXJzZVpvbmUiLCJwcmVQYXJzZVBvc3RGb3JtYXQiLCJmb3IiLCJlcmFOYXJyb3ciLCJlcmFBYmJyIiwiZXJhWWVhciIsImlzb1dlZWtzIiwid2Vla3NJbldlZWtZZWFyIiwiaXNvV2Vla3NJblllYXIiLCJpc29XZWVrc0luSVNPV2Vla1llYXIiLCJpc0RTVCIsInpvbmVBYmJyIiwiem9uZU5hbWUiLCJkYXRlcyIsImlzRFNUU2hpZnRlZCIsInByb3RvJDEiLCJnZXQkMSIsImluZGV4IiwiZmllbGQiLCJzZXR0ZXIiLCJsaXN0TW9udGhzSW1wbCIsIm91dCIsImxpc3RXZWVrZGF5c0ltcGwiLCJsb2NhbGVTb3J0ZWQiLCJzaGlmdCIsImxpc3RNb250aHMiLCJsaXN0TW9udGhzU2hvcnQiLCJsaXN0V2Vla2RheXMiLCJsaXN0V2Vla2RheXNTaG9ydCIsImxpc3RXZWVrZGF5c01pbiIsImZpcnN0RGF5T2ZZZWFyIiwiZmlyc3REYXlPZldlZWsiLCJsYW5nRGF0YSIsIm1hdGhBYnMiLCJhZGRTdWJ0cmFjdCQxIiwiYWRkJDEiLCJzdWJ0cmFjdCQxIiwiYWJzQ2VpbCIsImJ1YmJsZSIsIm1vbnRoc0Zyb21EYXlzIiwibW9udGhzVG9EYXlzIiwiZGF5c1RvTW9udGhzIiwiYXMiLCJ2YWx1ZU9mJDEiLCJtYWtlQXMiLCJhbGlhcyIsImFzTWlsbGlzZWNvbmRzIiwiYXNTZWNvbmRzIiwiYXNNaW51dGVzIiwiYXNIb3VycyIsImFzRGF5cyIsImFzV2Vla3MiLCJhc01vbnRocyIsImFzUXVhcnRlcnMiLCJhc1llYXJzIiwiY2xvbmUkMSIsImdldCQyIiwibWFrZUdldHRlciIsInRocmVzaG9sZHMiLCJzdWJzdGl0dXRlVGltZUFnbyIsInJlbGF0aXZlVGltZSQxIiwicG9zTmVnRHVyYXRpb24iLCJnZXRTZXRSZWxhdGl2ZVRpbWVSb3VuZGluZyIsInJvdW5kaW5nRnVuY3Rpb24iLCJnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQiLCJ0aHJlc2hvbGQiLCJsaW1pdCIsImFyZ1dpdGhTdWZmaXgiLCJhcmdUaHJlc2hvbGRzIiwid2l0aFN1ZmZpeCIsInRoIiwiYWJzJDEiLCJ0b0lTT1N0cmluZyQxIiwidG90YWxTaWduIiwieW1TaWduIiwiZGF5c1NpZ24iLCJobXNTaWduIiwidG90YWwiLCJwcm90byQyIiwidG9Jc29TdHJpbmciLCJ2ZXJzaW9uIiwicmVsYXRpdmVUaW1lUm91bmRpbmciLCJyZWxhdGl2ZVRpbWVUaHJlc2hvbGQiLCJIVE1MNV9GTVQiLCJEQVRFVElNRV9MT0NBTCIsIkRBVEVUSU1FX0xPQ0FMX1NFQ09ORFMiLCJEQVRFVElNRV9MT0NBTF9NUyIsIlRJTUUiLCJUSU1FX1NFQ09ORFMiLCJUSU1FX01TIiwiZmFjdG9yeSIsInJvb3QiLCJtb21lbnQiLCJkZWZhdWx0IiwiY2FjaGVkR3Vlc3MiLCJ6b25lcyIsImxpbmtzIiwiY291bnRyaWVzIiwiZ3Vlc3NlcyIsImxvZ0Vycm9yIiwibW9tZW50VmVyc2lvbiIsIm1ham9yIiwibWlub3IiLCJjaGFyQ29kZVRvSW50IiwiY2hhckNvZGUiLCJ1bnBhY2tCYXNlNjAiLCJ3aG9sZSIsImZyYWN0aW9uYWwiLCJtdWx0aXBsaWVyIiwiY2hhckNvZGVBdCIsImFycmF5VG9JbnQiLCJtYXBJbmRpY2VzIiwiaW5kaWNlcyIsInVucGFjayIsIm9mZnNldHMiLCJ1bnRpbHMiLCJJbmZpbml0eSIsImludFRvVW50aWwiLCJhYmJycyIsInBvcHVsYXRpb24iLCJab25lIiwicGFja2VkU3RyaW5nIiwiX3NldCIsIkNvdW50cnkiLCJjb3VudHJ5X25hbWUiLCJ6b25lX25hbWVzIiwiT2Zmc2V0QXQiLCJhdCIsInRpbWVTdHJpbmciLCJ0b1RpbWVTdHJpbmciLCJab25lU2NvcmUiLCJvZmZzZXRTY29yZSIsImFiYnJTY29yZSIsImZpbmRDaGFuZ2UiLCJsb3ciLCJoaWdoIiwibWlkIiwic29ydFpvbmVTY29yZXMiLCJsb2NhbGVDb21wYXJlIiwiYWRkVG9HdWVzc2VzIiwiZ3Vlc3Nlc0ZvclVzZXJPZmZzZXRzIiwiZ3Vlc3Nlc09mZnNldCIsIm9mZnNldHNMZW5ndGgiLCJmaWx0ZXJlZEd1ZXNzZXMiLCJyZWJ1aWxkR3Vlc3MiLCJpbnRsTmFtZSIsIkludGwiLCJEYXRlVGltZUZvcm1hdCIsInJlc29sdmVkT3B0aW9ucyIsInRpbWVab25lIiwibm9ybWFsaXplTmFtZSIsInpvbmVTY29yZSIsImNoYW5nZSIsInN0YXJ0WWVhciIsImxhc3QiLCJ1c2VyT2Zmc2V0cyIsInpvbmVTY29yZXMiLCJnZXRab25lIiwic2NvcmVPZmZzZXRBdCIsImFkZFpvbmUiLCJwYWNrZWQiLCJub3JtYWxpemVkIiwiY2FsbGVyIiwibGluayIsImFkZExpbmsiLCJub3JtYWwwIiwibm9ybWFsMSIsIm5lZWRzT2Zmc2V0IiwiaXNVbml4VGltZXN0YW1wIiwibWVzc2FnZSIsInR6IiwicGFyc2UiLCJ1bnBhY2tlZCIsIl9pbmRleCIsInRpbWVzdGFtcCIsInpvbmVfbmFtZSIsImNvdW50cnlfY29kZSIsIm9mZnNldE5leHQiLCJvZmZzZXRQcmV2IiwibW92ZUFtYmlndW91c0ZvcndhcmQiLCJtb3ZlSW52YWxpZEZvcndhcmQiLCJvZmZzZXRBdCIsImRhdGFWZXJzaW9uIiwiX3pvbmVzIiwiX2xpbmtzIiwiX25hbWVzIiwiX2NvdW50cmllcyIsImxvYWQiLCJjb3VudHJ5X3pvbmVzIiwiYWRkQ291bnRyaWVzIiwiem9uZUV4aXN0cyIsImRpZFNob3dFcnJvciIsImd1ZXNzIiwiaWdub3JlQ2FjaGUiLCJ6b25lc0ZvckNvdW50cnkiLCJjb3VudHJ5Iiwid2l0aF9vZmZzZXQiLCJvbGQiLCJhYmJyV3JhcCIsIl96IiwicmVzZXRab25lV3JhcCIsImRlZmF1bHRab25lIiwieiIsInNldERlZmF1bHQiLCJyZXF1aXJlJCQwIiwicmVxdWlyZSQkMSIsInRyYW5zbGF0aW9ucyIsIm51bWJlcnNQYXN0IiwibnVtYmVyc0Z1dHVyZSIsInRyYW5zbGF0ZSIsInZlcmJhbE51bWJlciIsImxsIiwibGxsIiwibGxsbCIsInByb2Nlc3NSZWxhdGl2ZVRpbWUiLCJtb250aHNQYXJzZUV4YWN0Iiwid2Vla2RheXNQYXJzZUV4YWN0IiwiZGUiLCJhaXJwbGFuZSIsImFycml2YWwiLCJiYWNrIiwiYmlrZXJlbnRhbHN0YXRpb24iLCJidXMiLCJjYW5jZWwiLCJjdXJyZW50cG9zaXRpb24iLCJkZXBhcnR1cmUiLCJmYXZvdXJpdGUiLCJmZXJyeSIsIm93bmxvY2F0aW9ucyIsImxvYWRpbmciLCJyYWlsIiwic3RyZWV0Iiwic3Vid2F5Iiwic3RhdGlvbiIsInRyYW0iLCJ2ZW51ZSIsIndoZXJlIiwicGxhY2UiLCJlbiIsImJpa2VwYXJrIiwiY2FycGFyayIsInBsYXRmb3JtIiwicmVxdWlyZWQiLCJ0cmFjayIsImZpIiwic3YiLCJzdHlsZUluamVjdCIsImNzcyIsInJlZiIsImluc2VydEF0IiwiZG9jdW1lbnQiLCJoZWFkIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJzdHlsZSIsImNyZWF0ZUVsZW1lbnQiLCJmaXJzdENoaWxkIiwiaW5zZXJ0QmVmb3JlIiwiYXBwZW5kQ2hpbGQiLCJzdHlsZVNoZWV0IiwiY3NzVGV4dCIsImNyZWF0ZVRleHROb2RlIiwiQXV0b3N1Z2dlc3RQYXRjaCIsIm9uU3VnZ2VzdGlvblRvdWNoTW92ZSIsImp1c3RTZWxlY3RlZFN1Z2dlc3Rpb24iLCJwcmVzc2VkU3VnZ2VzdGlvbiIsIkF1dG9zdWdnZXN0IiwiTW9iaWxlU2VhcmNoIiwiYXBwRWxlbWVudCIsImNsb3NlSGFuZGxlIiwiY2xlYXJJbnB1dCIsInN1Z2dlc3Rpb25zIiwiaW5wdXRQcm9wcyIsImZldGNoRnVuY3Rpb24iLCJyZW5kZXJTdWdnZXN0aW9uIiwiZ2V0U3VnZ2VzdGlvblZhbHVlIiwiYXJpYUxhYmVsIiwib25TdWdnZXN0aW9uU2VsZWN0ZWQiLCJjbGVhck9sZFNlYXJjaGVzIiwiZGlhbG9nSGVhZGVyVGV4dCIsImRpYWxvZ1ByaW1hcnlCdXR0b25UZXh0IiwiZGlhbG9nU2Vjb25kYXJ5QnV0dG9uVGV4dCIsImNsZWFySW5wdXRCdXR0b25UZXh0IiwiZm9jdXNJbnB1dCIsImNvbG9yIiwiaG92ZXJDb2xvciIsImFjY2Vzc2libGVQcmltYXJ5Q29sb3IiLCJzZWFyY2hPcGVuIiwiZm9udFdlaWdodHMiLCJzdHlsZXMiLCJzaG93U2Nyb2xsIiwibW9iaWxlU3R5bGVzIiwibW9iaWxlTm9TY3JvbGxTdHlsZXMiLCJpbnB1dElkIiwidXNlU3RhdGUiLCJpc0RpYWxvZ09wZW4iLCJzZXREaWFsb2dPcGVuIiwiaW5wdXRSZWYiLCJSZWFjdCIsInVzZVJlZiIsInVzZUVmZmVjdCIsIlJlYWN0TW9kYWwiLCJzZXRBcHBFbGVtZW50Iiwib25DbG9zZSIsInVzZUNhbGxiYWNrIiwib25TZWxlY3QiLCJpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQiLCJldmVudCIsIndoaWNoIiwia2V5Q29kZSIsInByZXZlbnREZWZhdWx0IiwiZ2V0VmFsdWUiLCJyZW5kZXJJdGVtIiwiY2xhc3NOYW1lIiwiX2lucHV0UmVmJGN1cnJlbnQiLCJmb2N1cyIsImlzT3BlbiIsIm92ZXJsYXlDbGFzc05hbWUiLCJvbkFmdGVyQ2xvc2UiLCJzaG91bGRDbG9zZU9uRXNjIiwibWVkaXVtIiwiaHRtbEZvciIsIm9uQ2xpY2siLCJvbktleURvd24iLCJ0YWJJbmRleCIsIkljb24iLCJpbWciLCJhbHdheXNSZW5kZXJTdWdnZXN0aW9ucyIsIm9uU3VnZ2VzdGlvbnNGZXRjaFJlcXVlc3RlZCIsImZvY3VzSW5wdXRPblN1Z2dlc3Rpb25DbGljayIsInNob3VsZFJlbmRlclN1Z2dlc3Rpb25zIiwiaGFzVmFsdWUiLCJhdXRvRm9jdXMiLCJyZW5kZXJJbnB1dENvbXBvbmVudCIsInRoZW1lIiwiRGlhbG9nTW9kYWwiLCJpc01vZGFsT3BlbiIsImhhbmRsZUNsb3NlIiwiaGVhZGVyVGV4dCIsInByaW1hcnlCdXR0b25UZXh0Iiwic2Vjb25kYXJ5QnV0dG9uVGV4dCIsInByaW1hcnlCdXR0b25PbkNsaWNrIiwic2Vjb25kYXJ5QnV0dG9uT25DbGljayIsInByb2Nlc3MiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJpc1JlcXVpcmVkIiwic2hhcGUiLCJvbkNoYW5nZSIsIm9uQmx1ciIsInBsYWNlaG9sZGVyIiwiciIsIl9fY3JlYXRlQmluZGluZyIsIl9fZXhwb3J0U3RhciIsInVzZUFycm93TmF2aWdhdGlvbiIsImxpc3RJdGVtcyIsIm9uQXJyb3dVcE9yRG93biIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwic2VsZWN0ZWRJbmRleCIsInVzZUludGVyc2VjdGlvbk9ic2VydmVyIiwiaXNJbnRlcnNlY3RpbmciLCJJbnRlcnNlY3Rpb25PYnNlcnZlciIsIm9ic2VydmUiLCJ1bm9ic2VydmUiLCJjb250YWluZXJSZWYiLCJpc1Zpc2libGUiLCJfX2ltcG9ydERlZmF1bHQiLCJfX2VzTW9kdWxlIiwidXNlSXNCcmVha3BvaW50IiwieHMiLCJtb2JpbGVTbWFsbCIsIm1vYmlsZSIsInRhYmxldCIsInRhYmxldExhcmdlIiwiZGVza3RvcFNtYWxsIiwiZGVza3RvcCIsImRlc2t0b3BMYXJnZSIsImlubmVyV2lkdGgiLCJ1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0IiwidXNlTGF5b3V0RWZmZWN0IiwidXNlT25Mb3NlRm9jdXNXaXRoaW4iLCJ3YXRjaCIsInBhc3NpdmUiLCJ1c2VPdXRzaWRlUmVhY3RlciIsImNvbnRhaW5zIiwidXNlU2Nyb2xsTG9jayIsImxvY2siLCJzY3JvbGxZIiwiYm9keSIsInRvcCIsInVubG9jayIsInNjcm9sbFRvIiwiaW5pdCIsImZhbGxiYWNrTG5nIiwiZGVmYXVsdE5TIiwiaW50ZXJwb2xhdGlvbiIsImVzY2FwZVZhbHVlIiwibm9kZSIsImdldFBsYXRmb3JtIiwiR1RGUyIsIm1vZGVzIiwiaTE4bmV4dCIsImdldFN1Z2dlc3Rpb25Db250ZW50Iiwic3VnZ2VzdGlvblR5cGUiLCJfaXRlbSRwcm9wZXJ0aWVzJGFkZGUiLCJ0YWlsMSIsInRhaWwyIiwibmFtZTEiLCJuYW1lMiIsInRyYW5zbGF0ZWRUZXh0IiwidHJhbnNsYXRlRnV0dXJlUm91dGVTdWdnZXN0aW9uVGltZSIsImFycml2ZUJ5IiwiRFRBdXRvc3VnZ2VzdCIsImNvbXBvbmVudERpZFVwZGF0ZSIsIl90aGlzIiwiY2hhbmdlTGFuZ3VhZ2UiLCJVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsIm5leHRQcm9wcyIsInN0YXRlIiwiZWRpdGluZyIsInNldFN0YXRlIiwibmV3VmFsdWUiLCJuZXdTdGF0ZSIsImZJbnB1dCIsInJlbmRlck1vYmlsZVNlYXJjaCIsImlzTW9iaWxlIiwidmFsaWQiLCJ0eXBpbmdUaW1lciIsImNsZWFyVGltZW91dCIsInRpbWVyIiwic2V0VGltZW91dCIsInR5cGluZyIsIm9uU2VsZWN0ZWQiLCJvd25QbGFjZXMiLCJwZW5kaW5nU2VsZWN0aW9uIiwic3VnZ2VzdGlvbkluZGV4Iiwic2VsZWN0aW9uRG9uZSIsInN1Z2dlc3Rpb25WYWx1ZSIsImJsdXIiLCJoYW5kbGVWaWFQb2ludHMiLCJmb2N1c0NoYW5nZSIsImlzRW1iZWRkZWQiLCJjbG9zZU1vYmlsZVNlYXJjaCIsInByZXZTdGF0ZSIsImNoZWNrUGVuZGluZ1NlbGVjdGlvbiIsIm9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZCIsImdldExhYmVsIiwiY2xlYXJCdXR0b24iLCJjbGVhbkV4ZWN1dGVkIiwiaXNMb2NhdGlvblNlYXJjaCIsImlzRW1wdHkiLCJleGVjdXRlU2VhcmNoIiwic2VhcmNoUmVzdWx0IiwidHJhbnNsYXRlZCIsIm9uQ2xlYXIiLCJpbnB1dENsaWNrZWQiLCJpbnB1dFZhbHVlIiwic3RhdGVLZXlEb3duIiwic3RvcmVJbnB1dFJlZmVyZW5jZSIsImF1dG9zdWdnZXN0Iiwic3RvcmVSZWYiLCJmaWxsSW5wdXQiLCJjb250ZW50IiwiU3VnZ2VzdGlvbkl0ZW0iLCJhcmlhRmF2b3VyaXRlU3RyaW5nIiwiZ2V0QXV0b1N1Z2dlc3RJY29ucyIsIm1vZGVJY29uQ29sb3JzIiwibW9kZVNldCIsImtleURvd24iLCJzdWdnZXN0aW9uQXNBcmlhQ29udGVudCIsImZpcnN0U3VnZ2VzdGlvbiIsIlNldCIsImNsZWFyRnV0dXJlUm91dGVzIiwiaXNPcmlnaW5EZXN0aW5hdGlvbk9yVmlhcG9pbnQiLCJvbkZvY3VzIiwicGFnZVlPZmZzZXQiLCJhZGRSZXNvdXJjZUJ1bmRsZSIsIm5leHRTdGF0ZSIsInRyYW5zbGF0ZWRQbGFjZWhvbGRlciIsInRoaW4iLCJpbnB1dENsYXNzTmFtZSIsImFyaWFCYXJJZCIsIlNlYXJjaEJhcklkIiwiYXJpYVJlcXVpcmVkVGV4dCIsImFyaWFMYWJlbFRleHQiLCJhcmlhU3VnZ2VzdGlvbkxlbiIsImNvdW50IiwiYXJpYUN1cnJlbnRTdWdnZXN0aW9uIiwiX3RoaXMyIiwic2VsZWN0aW9uIiwiRnJhZ21lbnQiLCJyb2xlIiwibW9iaWxlTGFiZWwiLCJjeCIsImljb24iLCJoaWdobGlnaHRGaXJzdFN1Z2dlc3Rpb24iLCJDb21wb25lbnQiLCJkZWZhdWx0UHJvcHMiLCJyb3V0ZXNQcmVmaXgiLCJzdG9wc1ByZWZpeCIsImFueSIsImFycmF5T2YiLCJvYmplY3QiLCJEVEF1dG9zdWdnZXN0V2l0aFNjcm9sbExvY2siXSwibWFwcGluZ3MiOiJrekRBQWUsU0FBU0EsRUFBUUMsR0FhOUIsT0FURUQsRUFEb0IsbUJBQVhFLFFBQW9ELGlCQUFwQkEsT0FBT0MsU0FDdEMsU0FBaUJGLEdBQ3pCLGNBQWNBLEdBR04sU0FBaUJBLEdBQ3pCLE9BQU9BLEdBQXlCLG1CQUFYQyxRQUF5QkQsRUFBSUcsY0FBZ0JGLFFBQVVELElBQVFDLE9BQU9HLFVBQVksZ0JBQWtCSixHQUl0SEQsRUFBUUMsR0NiRixTQUFTSyxJQWV0QixPQWRBQSxFQUFXQyxPQUFPQyxRQUFVLFNBQVVDLEdBQ3BDLElBQUssSUFBSUMsRUFBSSxFQUFHQSxFQUFJQyxVQUFVQyxPQUFRRixJQUFLLENBQ3pDLElBQUlHLEVBQVNGLFVBQVVELEdBRXZCLElBQUssSUFBSUksS0FBT0QsRUFDVk4sT0FBT0YsVUFBVVUsZUFBZUMsS0FBS0gsRUFBUUMsS0FDL0NMLEVBQU9LLEdBQU9ELEVBQU9DLElBSzNCLE9BQU9MLEdBR0ZILEVBQVNXLE1BQU1DLEtBQU1QLFdDZmYsU0FBU1EsRUFBa0JDLEVBQUtDLElBQ2xDLE1BQVBBLEdBQWVBLEVBQU1ELEVBQUlSLFVBQVFTLEVBQU1ELEVBQUlSLFFBRS9DLElBQUssSUFBSUYsRUFBSSxFQUFHWSxFQUFPLElBQUlDLE1BQU1GLEdBQU1YLEVBQUlXLEVBQUtYLElBQzlDWSxFQUFLWixHQUFLVSxFQUFJVixHQUdoQixPQUFPWSxFQ05NLFNBQVNFLEVBQTRCQyxFQUFHQyxHQUNyRCxHQUFLRCxFQUFMLENBQ0EsR0FBaUIsaUJBQU5BLEVBQWdCLE9BQU9FLEVBQWlCRixFQUFHQyxHQUN0RCxJQUFJRSxFQUFJckIsT0FBT0YsVUFBVXdCLFNBQVNiLEtBQUtTLEdBQUdLLE1BQU0sR0FBSSxHQUVwRCxNQURVLFdBQU5GLEdBQWtCSCxFQUFFckIsY0FBYXdCLEVBQUlILEVBQUVyQixZQUFZMkIsTUFDN0MsUUFBTkgsR0FBcUIsUUFBTkEsRUFBb0JMLE1BQU1TLEtBQUtQLEdBQ3hDLGNBQU5HLEdBQXFCLDJDQUEyQ0ssS0FBS0wsR0FBV0QsRUFBaUJGLEVBQUdDLFFBQXhHLEdDSGEsU0FBU1EsRUFBbUJkLEdBQ3pDLE9DSmEsU0FBNEJBLEdBQ3pDLEdBQUlHLE1BQU1ZLFFBQVFmLEdBQU0sT0FBT08sRUFBaUJQLEdER3pDZ0IsQ0FBa0JoQixJRUxaLFNBQTBCaUIsR0FDdkMsR0FBc0Isb0JBQVhuQyxRQUEwQkEsT0FBT0MsWUFBWUksT0FBTzhCLEdBQU8sT0FBT2QsTUFBTVMsS0FBS0ssR0ZJdkRDLENBQWdCbEIsSUFBUW1CLEVBQTJCbkIsSUdMdkUsV0FDYixNQUFNLElBQUlvQixVQUFVLHdJSEl3RUMsR0lML0UsU0FBU0MsRUFBZ0JDLEVBQVVDLEdBQ2hELEtBQU1ELGFBQW9CQyxHQUN4QixNQUFNLElBQUlKLFVBQVUscUNDRnhCLFNBQVNLLEVBQWtCcEMsRUFBUXFDLEdBQ2pDLElBQUssSUFBSXBDLEVBQUksRUFBR0EsRUFBSW9DLEVBQU1sQyxPQUFRRixJQUFLLENBQ3JDLElBQUlxQyxFQUFhRCxFQUFNcEMsR0FDdkJxQyxFQUFXQyxXQUFhRCxFQUFXQyxhQUFjLEVBQ2pERCxFQUFXRSxjQUFlLEVBQ3RCLFVBQVdGLElBQVlBLEVBQVdHLFVBQVcsR0FDakQzQyxPQUFPNEMsZUFBZTFDLEVBQVFzQyxFQUFXakMsSUFBS2lDLElBSW5DLFNBQVNLLEVBQWFSLEVBQWFTLEVBQVlDLEdBRzVELE9BRklELEdBQVlSLEVBQWtCRCxFQUFZdkMsVUFBV2dELEdBQ3JEQyxHQUFhVCxFQUFrQkQsRUFBYVUsR0FDekNWLEVDYk0sU0FBU1csRUFBZ0I5QixFQUFHK0IsR0FNekMsT0FMQUQsRUFBa0JoRCxPQUFPa0QsZ0JBQWtCLFNBQXlCaEMsRUFBRytCLEdBRXJFLE9BREEvQixFQUFFaUMsVUFBWUYsRUFDUC9CLEdBR0Y4QixFQUFnQjlCLEVBQUcrQixHQ0xiLFNBQVNHLEVBQVVDLEVBQVVDLEdBQzFDLEdBQTBCLG1CQUFmQSxHQUE0QyxPQUFmQSxFQUN0QyxNQUFNLElBQUlyQixVQUFVLHNEQUd0Qm9CLEVBQVN2RCxVQUFZRSxPQUFPdUQsT0FBT0QsR0FBY0EsRUFBV3hELFVBQVcsQ0FDckVELFlBQWEsQ0FDWDJELE1BQU9ILEVBQ1BWLFVBQVUsRUFDVkQsY0FBYyxLQUdkWSxHQUFZSixFQUFlRyxFQUFVQyxHQ2I1QixTQUFTRyxHQUF1QkMsR0FDN0MsUUFBYSxJQUFUQSxFQUNGLE1BQU0sSUFBSUMsZUFBZSw2REFHM0IsT0FBT0QsRUNITSxTQUFTRSxHQUEyQkYsRUFBTWpELEdBQ3ZELE9BQUlBLEdBQTJCLFdBQWxCaEIsRUFBUWdCLElBQXNDLG1CQUFUQSxFQUkzQ29ELEdBQXNCSCxHQUhwQmpELEVDSkksU0FBU3FELEdBQWdCNUMsR0FJdEMsT0FIQTRDLEdBQWtCOUQsT0FBT2tELGVBQWlCbEQsT0FBTytELGVBQWlCLFNBQXlCN0MsR0FDekYsT0FBT0EsRUFBRWlDLFdBQWFuRCxPQUFPK0QsZUFBZTdDLElBRXZDNEMsR0FBZ0I1QyxHQ0FWLFNBQVM4QyxHQUFlbkQsRUFBS1YsR0FDMUMsT0NMYSxTQUF5QlUsR0FDdEMsR0FBSUcsTUFBTVksUUFBUWYsR0FBTSxPQUFPQSxFREl4Qm9ELENBQWVwRCxJRUxULFNBQStCQSxFQUFLVixHQUNqRCxHQUFzQixvQkFBWFIsUUFBNEJBLE9BQU9DLFlBQVlJLE9BQU9hLEdBQWpFLENBQ0EsSUFBSXFELEVBQU8sR0FDUEMsR0FBSyxFQUNMQyxHQUFLLEVBQ0xDLE9BQUtDLEVBRVQsSUFDRSxJQUFLLElBQWlDQyxFQUE3QkMsRUFBSzNELEVBQUlsQixPQUFPQyxjQUFtQnVFLEdBQU1JLEVBQUtDLEVBQUdDLFFBQVFDLFFBQ2hFUixFQUFLUyxLQUFLSixFQUFHZixRQUVUckQsR0FBSytELEVBQUs3RCxTQUFXRixHQUg4Q2dFLEdBQUssSUFLOUUsTUFBT1MsR0FDUFIsR0FBSyxFQUNMQyxFQUFLTyxVQUVMLElBQ09ULEdBQXNCLE1BQWhCSyxFQUFXLFFBQVdBLEVBQVcsaUJBRTVDLEdBQUlKLEVBQUksTUFBTUMsR0FJbEIsT0FBT0gsR0ZuQnVCVyxDQUFxQmhFLEVBQUtWLElBQU02QixFQUEyQm5CLEVBQUtWLElHTGpGLFdBQ2IsTUFBTSxJQUFJOEIsVUFBVSw2SUhJZ0Y2QyxHSU12RixTQUFTQyxHQUFNQyxFQUFNQyxVQUMzQkQsR0FBUUMsR0FBUUQsSUFBU0MsRUNZbkIsU0FBU0MsR0FBWUMsRUFBT0MsT0FDbkNDLEVBQVNGLEVBQU1HLFdBQ2ZDLEVBQVNILEVBQU1FLGNBRUYsZ0JBQWZILEVBQU1LLE1BQXlDLGdCQUFmSixFQUFNSSxLQUF3QixLQUMxREMsRUFBS0osRUFBT0ssT0FDWkMsRUFBS04sRUFBT08sWUFDWkMsRUFBS04sRUFBT0csT0FDWkksRUFBS1AsRUFBT0ssNEJBRURILEVBQUdqRSxrQkFBU2lFLEVBQUdNLHNCQUFhSixFQUFHbkUsa0JBQVNtRSxFQUFHSSxzQkFDM0NGLEVBQUdyRSxrQkFBU3FFLEVBQUdFLHNCQUFhRCxFQUFHdEUsa0JBQVNzRSxFQUFHQyxhQUkzQyxnQkFBZlosRUFBTUssTUFBeUMsZ0JBQWZKLEVBQU1JLFlBQ2pDLE1BR1ksc0JBQWpCSCxFQUFPVyxPQUNVLCtCQUFqQlgsRUFBT1csU0FDVyxzQkFBakJULEVBQU9TLE9BQ1csK0JBQWpCVCxFQUFPUyxRQUNPLGdCQUFqQlgsRUFBT1csT0FBNEMsZ0JBQWpCVCxFQUFPUyxhQUVuQ1gsRUFBT1ksVUFBWVYsRUFBT1UsV0FFL0JaLEVBQU9hLFFBQVVYLEVBQU9XLGNBQ25CYixFQUFPYSxTQUFXWCxFQUFPVyxVQUU5QmIsRUFBT2EsUUFBVVgsRUFBT1ksS0FBT1osRUFBT1ksSUFBSUMsU0FBU2YsRUFBT2EsZUFDckQsS0FFTFgsRUFBT1csUUFBVWIsRUFBT2MsS0FBT2QsRUFBT2MsSUFBSUMsU0FBU2IsRUFBT1csZUFDckQsTUFHVyxTQUFqQmIsRUFBT1csT0FBcUMsWUFBakJYLEVBQU9XLFNBQ2pCLFNBQWpCVCxFQUFPUyxPQUFxQyxZQUFqQlQsRUFBT1MsUUFDbkNYLEVBQU9jLEtBQ1BaLEVBQU9ZLFdBRUFkLEVBQU9jLE1BQVFaLEVBQU9ZLFFBR3pCRSxFQUFLbEIsR0FBU0EsRUFBTW1CLFNBQVduQixFQUFNbUIsU0FBU0MsaUJBQWNqQyxFQUM1RGtDLEVBQUtwQixHQUFTQSxFQUFNa0IsU0FBV2xCLEVBQU1rQixTQUFTQyxpQkFBY2pDLFdBRTlEK0IsR0FBTUcsR0FFSkMsS0FBS0MsSUFBSUwsRUFBRyxHQUFLRyxFQUFHLElBQU0sTUFBUUMsS0FBS0MsSUFBSUwsRUFBRyxHQUFLRyxFQUFHLElBQU0sT0FHNUR6QixHQUFNTSxFQUFPN0QsS0FBTStELEVBQU8vRCxPQUMxQnVELEdBQU1NLEVBQU9zQixNQUFPcEIsRUFBT29CLFFBQzNCNUIsR0FBTU0sRUFBT3VCLFFBQVNyQixFQUFPcUIsVUFDN0I3QixHQUFNTSxFQUFPdUIsUUFBU3JCLEVBQU9vQixRQUM3QjVCLEdBQU1NLEVBQU9zQixNQUFPcEIsRUFBT3FCLFdDNUVuQyxJQUFNQyxHQUFZLFNBQUFDLFVBQ1hDLFVBQVNELEdBR1BBLEVBQUlFLGNBRkYsSUFRTEMsR0FBWSxDQUNoQkMsUUFBUyxVQUNUQyxLQUFNLE9BQ05DLGdCQUFpQixrQkFDakJDLGNBQWUsZ0JBQ2ZDLGlCQUFrQixtQkFDbEJDLGVBQWdCLGlCQUNoQkMsZUFBZ0IsaUJBQ2hCQyxZQUFhLGNBQ2JDLFFBQVMsVUFDVEMsY0FBZSxnQkFDZkMsdUJBQXdCLGVBQ3hCQyxLQUFNLE9BQ05DLE9BQVEsU0FDUkMsTUFBTyxRQUNQQyxrQkFBbUIsY0FDbkJDLFFBQVMsVUFDVEMsU0FBVSxZQTBDQ0MsR0FBUSxTQUFDQyxFQUFnQkMsT0FDL0J0QixVQUFTcUIsSUFBNkMsSUFBMUJBLEVBQWUvSCxjQUN2QyxRQUdVLENBQUMsT0FBUSxRQUFTLFVBQVcsYUFFN0NpSSxLQUFJLFNBQUE5RyxVQUFRNkcsRUFBaUI3RyxNQUM3QitHLFFBQU8sU0FBQS9FLFVBQVN1RCxVQUFTdkQsSUFBVUEsRUFBTW5ELE9BQVMsS0FDbERpSSxLQUFJLFNBQUE5RSxPQUNHZ0YsRUFBa0IzQixHQUFVckQsVUFDYyxJQUE1Q2dGLEVBQWdCQyxRQUFRTCxHQUVuQixHQUFNQSxFQUFlL0gsT0FBU21JLEVBQWdCbkksT0FLL0MsR0FBTStILEVBQWUvSCxRQUFXK0gsRUFBZS9ILE9BQVMsTUFFakVxSSxRQUNDLFNBQUNDLEVBQVVDLFVBQWFBLEVBQVVELEVBQVdDLEVBQVVELElBQ3ZELElBVU9FLEdBQWUsU0FBQzdDLEVBQU8xRixVQUMxQjBGLFFBQ0RpQixHQUFVRyx1QkFDTixPQUNKSCxHQUFVRSxXQUNOLFFBQ0pGLEdBQVVVLG9CQUNOLFFBQ0pWLEdBQVVXLDZCQUNOLFNBQ0pYLEdBQVVLLHNCQUNWTCxHQUFVTSxvQkFDVk4sR0FBVUksbUJBQ1ZKLEdBQVVPLHFCQUNOLFNBQ0pQLEdBQVVRLGtCQUNOLFNBQ0pSLEdBQVVTLGVBQ1RYLFVBQVN6RyxJQUFzQyxJQUEzQkEsRUFBT21JLFFBQVEsUUFDOUIsSUFFRixTQUVKeEIsR0FBVTZCLHlDQUdOLFNBQ0o3QixHQUFVZ0IsYUFFVmhCLEdBQVVpQixjQUVWakIsR0FBVWUsd0JBQ04sU0FDSmYsR0FBVVksV0FDTixNQW1CQWtCLEdBQW9CLFNBQUNDLEVBQVlDLE9BQVNDLHlEQUFPLE9BQ3ZEbEksTUFBTVksUUFBUXFILFVBQ1ZBLE1BRUhFLEVBQW1CLFNBQUEzRixVQUN2QnVELFVBQVN2RCxJQUFVd0YsR0FBY0EsRUFBV3RILEtBQUs4QixJQUU3QzRFLEVBQWlCdkIsR0FBVXFDLEdBQzNCRSxFQUFlRCxFQUFpQmYsR0FFaENpQixFQUFpQkMsVUFDckJMLEVBQ0EsVUFFRU0sVUFDRUgsR0FDQUQsRUFBaUJ0QyxHQUFVMEMsRUFBT2pFLFdBQVdrRSxhQUNzQixJQUFuRTNDLEdBQVUwQyxFQUFPakUsV0FBV2tFLFdBQVdmLFFBQVFMLEdBQzNDLEVBQ0EsR0FFTixTQUFBbUIsU0FDd0NBLEVBQU9qRSxXQUFyQ21FLElBQUFBLFdBQVl6RCxJQUFBQSxNQUFPMUYsSUFBQUEsVUFDRyxJQUExQjhILEVBQWUvSCxjQUdWd0ksR0FBYTdDLEVBQU8xRixPQUt4Qm1KLFNBR0RaLEdBQWE3QyxFQUFPMUYsR0FDcEI2SCxHQUFNQyxFQUFnQm1CLEVBQU9qRSxtQkFJekJVLFFBQ0RpQixHQUFVUyxlQUVOK0IsR0FEa0MsSUFBM0JuSixFQUFPbUksUUFBUSxRQUFnQixJQUFPLFVBR2pEeEIsR0FBVVksVUFFVlosR0FBVWdCLGFBRVZoQixHQUFVaUIsZ0JBQ051QixFQUFhLFNBQ2pCeEMsR0FBVWUseUJBQ055QixFQUFhLG1CQUViQSxLQUlmLENBQUMsT0FBUSxnQkFHSkMsVUFBU0wsRUFBZ0JuRSxLQVNyQnlFLEdBQWMsU0FBQ25JLEVBQU1vSSxVQUU5QkEsTUFBQUEsSUFFZ0MsSUFBaENwSSxFQUFLcUksWUFBWUQsR0FFVnBJLEVBQUtzSSxVQUFVLEVBQUd0SSxFQUFLcUksWUFBWUQsR0FBWSxHQUVqRHBJLEdDck5IdUksR0FBYyxTQUFBQyxVQUNsQkEsRUFBV0MsWUFDWEQsRUFBV2pFLFVBQ1ZpRSxFQUFXcEQsU0FDVm9ELEVBQVdwRCxRQUFRaUQsWUFBWSxLQUFPRyxFQUFXcEQsUUFBUXZHLE9BQVMsR0FDbEUySixFQUFXcEQsUUFBUWtELFVBQVVFLEVBQVdwRCxRQUFRaUQsWUFBWSxLQUFPLElBQ3JFLElBRVdLLEdBQWMsZ0JBQUdDLElBQUFBLEdBQUlDLElBQUFBLFlBQzVCQSxTQUlLOUYsSUFBUDZGLFFBQ3NCLElBQWZBLEVBQUcxQixVQUNXLElBQXJCMEIsRUFBRzFCLFFBQVEsS0FLTjBCLEVBQUdMLFVBQVVLLEVBQUcxQixRQUFRLEtBQU8sWUFHM0I0QixHQUE0QixTQUFDN0ksRUFBTW9GLFNBQVksQ0FDMURwRixHQUFTb0YsR0FBV0EsRUFBUTBELE1BQU0sS0FBSyxHQUNwQixpQkFBWjFELEVBQ0hBLEVBQVEyRCxRQUFRLElBQUlDLGlCQUFVQyxVQUFhakosaUJBQW1CLElBQzlELEtBWU9rSixHQUFlQyxXQUMxQixTQUFDWCxPQUFZWSxpRUFDSFosRUFBV2hFLFdBQ1osd0JBQ0ksQ0FBQ2dFLEVBQVcvRCxRQUFTK0QsRUFBV3BELGFBQ3BDLG9CQUNBLG1CQUNBLGFBQ0ksQ0FBQ29ELEVBQVcvRCxhQUNoQix3QkFDSW9FLEdBQTBCTCxFQUFXeEksS0FBTXdJLEVBQVdwRCxhQUMxRCxpQ0FDQSwwQkFDSSxDQUFDb0QsRUFBV3hJLFVBQ2hCLHFCQUNBLGdCQUNBLGlCQUNBLGlCQUNBLG1CQUNBLGtCQUNBLHNCQUNBLHdCQUNLb0osR0FBU1osRUFBV1IsVUFDeEIsQ0FDRVEsRUFBVzlELE9BQ1g4RCxFQUFXYSxLQUFLN0QsY0FDaEJnRCxFQUFXYyxVQUViLENBQ0VkLEVBQVdSLFVBQ1hRLEVBQVdjLFNBQ1hkLEVBQVdlLE9BQVNmLEVBQVdlLE9BQU92SixVQUFPOEMsT0FFaEQsWUFDQSxjQUNBLGVBQ0ksQ0FDTDBGLEVBQVd4SSxLQUNYd0ksRUFBV3JELE1BQU00RCxRQUNmLElBQUlDLGlCQUFVQyxVQUFhVCxFQUFXeEksbUJBQ3RDLFNBR0Qsb0JBQ0EsY0FDSW9KLEVBQ0gsQ0FDRVosRUFBV3hJLE1BQ1R3SSxFQUFXckQsT0FDVnFELEVBQVdwRCxTQUFXb0QsRUFBV3BELFFBQVEwRCxNQUFNLEtBQUssR0FDdkRQLEdBQVlDLElBRWQsQ0FDRUEsRUFBV3hJLEtBQ1h3SSxFQUFXRyxHQUNYRCxHQUFZRixHQUNaRCxHQUFZQyxrQkFLWCxDQUNMQSxFQUFXeEksTUFDVHdJLEVBQVdyRCxPQUNWcUQsRUFBV3BELFNBQVdvRCxFQUFXcEQsUUFBUTBELE1BQU0sS0FBSyxHQUN2RFAsR0FBWUMsUUFJcEIsU0FBQ2dCLEVBQU1KLE9BQ0N6SyxFQUFJOEssVUFBVUQsVUFDcEI3SyxFQUFFeUssTUFBUUEsRUFDSHpLLEtBY0ksU0FBUytLLEdBQVlDLFVBQzNCekIsVUFBU3lCLEdBQVUsU0FBQ0MsRUFBT0MsT0FDMUJDLEVBQ0pDLFVBQVFiLEdBQWFVLEVBQU05RixZQUFhb0YsR0FBYVcsRUFBTS9GLGNBQzNEOEYsRUFBTTlGLFdBQVdVLFFBQVVxRixFQUFNL0YsV0FBV1UsY0FFNUNzRixHQUNnQixnQkFBZkYsRUFBTTVGLE1BQXlDLGdCQUFmNkYsRUFBTTdGLE9BSWxDOEYsS0N6SUksU0FBU0UsR0FBc0JDLEVBQU1DLEVBQU9DLE1BQ3BDLGlCQUFWRCxHQUFzQkEsRUFBTXJMLE9BQVMsRUFBRyxLQUMzQ3VMLEVBQVFGLEVBQU0xRSxjQUFjNkUsT0FDNUJDLEVBQVlGLEVBQU14RixTQUFTLE1BQVF3RixFQUFNeEYsU0FBUyxZQUNqRHFGLEVBQUtsRCxRQUFPLFNBQUF5QyxPQUNiZSxFQUFRLEdBQ1pKLEVBQU9LLFNBQVEsU0FBQUMsT0FDVHpJLEVBQVEwSSxVQUFJbEIsRUFBTWlCLEdBR25CSCxHQUNVLHFCQUFWRyxHQUEwQyxZQUFWQSxJQUNqQ3pJLEtBR0FBLEVBQVFBLEVBQU04RyxNQUFNLE1BQ1ZqSyxPQUFTLEVBQ2pCbUQsRUFBTTJJLE9BQU8zSSxFQUFNbkQsT0FBUyxFQUFHLEdBQ3RCbUQsRUFBTW5ELE9BQVMsR0FDeEJtRCxFQUFNMkksT0FBTzNJLEVBQU1uRCxPQUFTLEVBQUcsR0FFakNtRCxFQUFRQSxFQUFNNEksS0FBSyxNQUVqQjVJLElBRUF1SSxFQURFRCxFQUNNQyxFQUFNTSxPQUFPN0ksRUFBTXdELGVBRW5CK0UsRUFBTU0sT0FDWjdJLEVBQU13RCxjQUFjdUQsUUFBUSxLQUFNLEtBQUtELE1BQU0sY0FLaEQsSUFBSW5LLEVBQUksRUFBR0EsRUFBSTRMLEVBQU0xTCxPQUFRRixPQUNBLElBQTVCNEwsRUFBTTVMLEdBQUdzSSxRQUFRbUQsVUFFWixTQUdKLFlBSUpILEVDdERNLFNBQVNhLEdBQVU1TSxFQUFLNk0sVUFDaEM3TSxFQUdFTSxPQUFPd00sS0FBSzlNLEdBQ2hCNEksS0FBSSxTQUFBckYsT0FDR3dKLEVBQUlGLEdBQVV0SixFQUNkeUosRUFBSWhOLEVBQUl1RCxTQUVNLFdBQWJ4RCxFQUFPaU4sR0FDVkosR0FBVUksRUFBR0QsYUFDVkUsbUJBQW1CRixlQUFNRSxtQkFBbUJELE9BRXBETixLQUFLLEtBWEMsR0NEWCxJQUFNUSxHQUFRQyxRQUFRLGlCQUVQLFNBQVNDLEdBQVFDLEVBQUtDLFVBQzVCSixHQUNKVixJQUNDZSxVQUFVRixJQUNQQyxJQUMwQixJQUF0QkQsRUFBSUcsT0FBTyxNQUFlLElBQU0sS0FBT1osR0FBVVUsR0FDbEQsSUFDTixDQUNFRyxRQUFTLElBQ1RDLE9BQVEsTUFFUkMsUUFBUyxDQUNQQyxPQUFRLHNCQUliQyxNQUFLLFNBQUFDLFVBQ0dBLEVBQUlDLFFDWkYsU0FBU0MsR0FDdEJDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBQ0FDLE9BRU1DLEVBQU9SLEVBQWVBLEVBQWE5QixPQUFTLFFBRWhEc0MsTUFBQUEsR0FFQUEsRUFBSzlOLE9BQVMsR0FDYjROLElBQWtCQSxFQUFjdk0sS0FBS3lNLFVBRS9CQyxRQUFRQyxRQUFRLFFBRW5CQyxFQUFhTixHQXBDTSxpREFxQ3JCTyxLQUFTSixLQUFBQSxHQUFTUCxFQUFpQkUsR0FBWUQsS0FBQUEsS0FDL0NFLElBQ0ZRLE9BQVlBLEdBQU1SLFFBQUFBLEtBRWhCRyxLQUVGSyxPQUFZQSxHQUFNQyxPQURITixFQUFnQjVNLHFCQUcxQndMLEdBQVF3QixFQUFZQyxHQUFNaEIsTUFBSyxTQUFBQyxVQUM3QkEsRUFBSXJDLFlDcENmLFNBQVNzRCxHQUFzQkMsRUFBT0MsT0FDL0JELEdBQVNBLEVBQU1yTyxPQUFTLFNBQ3BCK04sUUFBUUMsUUFBUSxRQUVyQk8sRUFBTyxHQVlMQyxFQVhnQkgsRUFBTXBHLEtBQUksU0FBQXdHLE9BQ3hCdEosRUFBcUIsU0FBZHNKLEVBQUt0SixLQUFrQixPQUFTLFVBQ3pDVyxnQkFBYTJJLEVBQUs1SSxPQUFPb0UsTUFBTSxLQUFLLEdBQUd0RCwwQkFBaUJ4QixtQkFDMURzSixFQUFLNUksZUFFSDRJLEVBQUsxRSxPQUNQakUsY0FBVzJJLEVBQUsxRSxPQUVsQndFLGFBQVd6SSxZQUNDMkksR0FBTTNJLElBQUFBLE9BRWlCdUMsUUFBTyxTQUFVSixFQUFLeUcsVUFFekR6RyxFQUFJeUcsRUFBYzVJLEtBQU80SSxFQUNsQnpHLElBQ04sV0FDSXdFLEdBQVE2QixFQUFrQixDQUMvQkssSUFBS0osRUFBS3JOLE1BQU0sR0FBSSxLQUVuQmdNLE1BQUssU0FBQUMsVUFDQ0EsRUFBSXJDLFNBQVM3QyxLQUFJLFNBQUF3RyxTTkhIOUksRUFBT1IsUU1JUixDQUNoQkEsS0FBTSxnQkFDTkYsV0FBWSxDQUNWMkosU0FBVUgsRUFBS3hKLFdBQVcySixTQUMxQjlJLElBQUswSSxFQUFlQyxFQUFLeEosV0FBV2EsS0FBS0EsSUFDekNpRSxLQUFNeUUsRUFBZUMsRUFBS3hKLFdBQVdhLEtBQUtpRSxLQUMxQ2xFLE9BQVEySSxFQUFlQyxFQUFLeEosV0FBV2EsS0FBS0QsT0FDNUNnSixZQUFhTCxFQUFlQyxFQUFLeEosV0FBV2EsS0FBSytJLFlBQ2pEQyxZQUFhTixFQUFlQyxFQUFLeEosV0FBV2EsS0FBS2dKLFlBQ2pEdkksUUFBU2tJLEVBQUt4SixXQUFXcUIsTUFDekJYLFNBQWM4SSxFQUFLeEosV05kSlUsSUFBQUEsTUFBT1IsSUFBQUEsS0FDcEIsU0FBVlEsR0FDVSxrQkFBVkEsR0FDUyxTQUFUUixHQUNTLGtCQUFUQSxFTVV5QyxnQkFBa0IscUJBRXJEYyxTQUFVd0ksRUFBS3hJLGdCQStIdkIsU0FBUzhJLEdBQWVDLEVBQWF6RCxFQUFPMEQsT0FDdENDLEVBQXNCL0QsR0FBc0I2RCxFQUFhekQsRUFBTyxDQUNsRSxrQkFDQSxtQkFDQSxxQkFDQSx1QkFDQSwrQkFFRTBELElBRUZDLEVBQXNCQSxFQUFvQmhILFFBQ3hDLFNBQUF5QyxVQUFTc0UsRUFBV2xKLFNBQVM0RSxFQUFLMUYsV0FBV1UsV0FHMUNvSSxRQUFRQyxRQUNibUIsVUFBS0QsRUFBcUIsSUFBSWpILEtBQUksU0FBQTBDLE9BQzFCeUUsT0FDRHpFLEdBQ0h4RixLQUFNLFlBQ05rSyxrQkFBa0IsRUFDbEJDLGNBQWMsa0JBRVRGLEVBQVFuSyxXQUFXbUUsV0FDbkJnRyxNQWNiLElBQU1HLEdBQWMsQ0FDbEIsYUFDQSxZQUNBLGFBQ0EsY0FDQSxlQUNBLGtCQUVJQyxHQUFpQixDQUFDLGlCQUFrQixRQUFTLFVBQVcsVUFDeERDLEdBQWdCLENBQUMsVUFBVyxZQW1XbEMsSUFBTUMsR0FBa0JDLFdBOVZqQixTQUNMQyxFQUNBbEMsRUFDQW1DLEVBQ0FDLEVBQ0FDLEVBQ0FDLElBRUFDLEVBQ0FDLEVBQ0FDLE9BSEU1RSxJQUFBQSxNQU1BNkUsRUF1QkVOLEVBdkJGTSxhQUN1QkMsRUFzQnJCUCxFQXRCRlEsc0JBQ2dCQyxFQXFCZFQsRUFyQkZmLGVBQ21CVixFQW9CakJ5QixFQXBCRlUsa0JBQ0FDLEVBbUJFWCxFQW5CRlcsbUJBQ0FDLEVBa0JFWixFQWxCRlksWUFDQUMsRUFpQkViLEVBakJGYSx3QkFDQUMsRUFnQkVkLEVBaEJGYyxvQ0FDQUMsRUFlRWYsRUFmRmUsK0JBQ0FDLEVBY0VoQixFQWRGZ0Isd0JBQ0FDLEVBYUVqQixFQWJGaUIsbUJBQ0FDLEVBWUVsQixFQVpGa0IsZUFDQUMsRUFXRW5CLEVBWEZtQixRQUN1QkMsRUFVckJwQixFQVZGcUIsc0JBQ0F2RCxFQVNFa0MsRUFURmxDLGNBQ0FqRixFQVFFbUgsRUFSRm5ILFdBQ0F5SSxFQU9FdEIsRUFQRnNCLFdBQ0E5QyxFQU1Fd0IsRUFORnhCLGlCQUNBK0MsRUFLRXZCLEVBTEZ1QixRQUNBQyxFQUlFeEIsRUFKRndCLHNCQUNBQyxFQUdFekIsRUFIRnlCLGlCQUNBQyxFQUVFMUIsRUFGRjBCLGdCQUNBQyxFQUNFM0IsRUFERjJCLGlCQUdJQyxHQUFjOUIsR0FBOEIsSUFBbkJBLEVBQVE1UCxPQUVqQzJSLEdBQWNqRSxHQUE4QixJQUFuQkEsRUFBUTFOLE9BQ2pDNFIsRUFBV3hCLEVBQWFhLEdBQ3hCWSxFQUFtQixHQUNuQkMsRUFBVyxDQUFFM00sS0FBTSxNQUFPMEQsS0FBTTBDLEVBQU8zQyxRQUFTLElBQ2hEbUosRUFBV3JCLEVBQVlPLEdBQ3ZCeEQsRUFDSnlELEdBQUFBLE1BQWlCZixHQUFBQSxFQUFVNkIsS0FBM0JkLE1BQWtDZixHQUFBQSxFQUFVOEIsSUFDeEMsbUJBRXFCOUIsRUFBUzZCLElBQUlFLFFBQVEscUJBQ3JCL0IsRUFBUzhCLElBQUlDLFFBQVEsSUFFMUMsR0FDQTFILEVBQU9xRixFQUFnQkEsRUFBYzVGLE1BQU0sS0FBSyxRQUFLaEcsS0FFekQyTCxFQUFRN0osU0FBUyxvQkFDRyw4QkFBcEI2TCxFQUFTTyxRQUVUTixFQUFpQnZOLEtBaE1yQixTQUFtQ2lILEVBQU9xRyxTQUNuQixpQkFBVnJHLEdBQXVDLElBQWpCQSxFQUFNdkwsT0FDOUIrTixRQUFRQyxRQUFRLENBQ3JCLENBQ0U3SSxLQUFNLGtCQUNOb0IsUUFBU3FMLEVBQVNyTCxRQUNsQnlMLElBQUtKLEVBQVNJLElBQ2RDLElBQUtMLEVBQVNLLElBQ2RoTixXQUFZLENBQ1ZXLFFBQVMsbUJBQ1RELE1BQU8sa0JBQ1BZLFFBQVNxTCxFQUFTckwsUUFDbEJ5TCxJQUFLSixFQUFTSSxJQUNkQyxJQUFLTCxFQUFTSyxLQUVoQmhNLFNBQVUsQ0FDUmQsS0FBTSxRQUNOZSxZQUFhLENBQUMwTCxFQUFTSyxJQUFLTCxFQUFTSSxTQU10Q2pFLFFBQVFDLFFBQVEsSUF5S0NvRSxDQUEwQjdHLEVBQU9xRyxLQUVyREYsR0FBYzlCLEVBQVE3SixTQUFTLGlCQUNqQzhMLEVBQWlCdk4sS0E1TnJCLFNBQThCaUgsU0FDUCxpQkFBVkEsR0FBdUMsSUFBakJBLEVBQU12TCxPQUM5QitOLFFBQVFDLFFBQVEsQ0FDckIsQ0FDRTdJLEtBQU0sZ0JBQ05vQixRQUFTLGdCQUNUeUwsSUFBSyxLQUNMQyxJQUFLLEtBQ0xoTixXQUFZLENBQ1ZXLFFBQVMsa0JBQ1RELE1BQU8sZ0JBQ1BZLFFBQVMsZ0JBQ1R5TCxJQUFLLEtBQ0xDLElBQUssTUFFUGhNLFNBQVUsQ0FDUmQsS0FBTSxRQUNOZSxZQUFhLE9BS2Q2SCxRQUFRQyxRQUFRLElBc01DcUUsQ0FBcUI5RyxJQUV6Q3FFLEVBQVE3SixTQUFTLGdCQUFpQixLQUM5QnVNLEVBQVFkLEVBQWdCUCxHQUM5QlksRUFBaUJ2TixLQUFLNkssVUFBS21ELEVBQU8sT0FHbEMxQyxFQUFRN0osU0FBUywyQkEzRnJCLFNBQXVCa0wsRUFBU1osRUFBV2hDLE9BQ25Da0UsRUFBcUJsQyxFQUFVWSxNQUNqQ3NCLEdBQXNCQSxFQUFtQnZTLE9BQVMsU0FDN0MsTUFFSHdTLEVBQWlCbkUsRUFBTTRDLFVBQ3RCdUIsR0FBa0JBLEVBQWV4UyxPQUFTLEVBc0YvQ3lTLENBQWN4QixFQUFTWixFQUFXaEMsSUFFbEN3RCxFQUFpQnZOLEtBbkxyQixTQUFnQ2lILFNBQ1QsaUJBQVZBLEdBQXVDLElBQWpCQSxFQUFNdkwsT0FDOUIrTixRQUFRQyxRQUFRLENBQ3JCLENBQ0U3SSxLQUFNLHlCQUNOb0IsUUFBUyx5QkFDVHlMLElBQUssS0FDTEMsSUFBSyxLQUNMaE4sV0FBWSxDQUNWVyxRQUFTLDRCQUNURCxNQUFPLGVBQ1BZLFFBQVMseUJBQ1R5TCxJQUFLLEtBQ0xDLElBQUssTUFFUGhNLFNBQVUsQ0FDUmQsS0FBTSxRQUNOZSxZQUFhLE9BS2Q2SCxRQUFRQyxRQUFRLElBNkpDMEUsQ0FBdUJuSCxJQUUzQ21HLEdBQWM5QixFQUFRN0osU0FBUyxhQUFjLEtBRXpDd0gsRUFBZStELEtBQ2pCNUQsRUFBUTNILFNBQVMsYUFBYyxLQUMzQndNLEVBQXFCbEMsRUFBVVksR0FDckNZLEVBQWlCdk4sS0ExUHZCLFNBQStCcU8sRUFBWXBILFVBQ2xDd0MsUUFBUUMsUUFDYjdDLEdBQXNCd0gsRUFBWXBILEVBQU8sQ0FBQyxVQUFXLFNBQVN0RCxLQUFJLFNBQUEwQyxTQUFTLENBQ3pFeEYsS0FBTSxpQkFDTkYsZ0JBQ0swRixHQUNIckUsTUFBT3FFLEVBQUt4SixLQUNad0UsTUFBTyxtQkFFVE0sU0FBVSxDQUFFZCxLQUFNLFFBQVNlLFlBQWEsQ0FBQ3lFLEVBQUtzSCxJQUFLdEgsRUFBS3FILFdBaVBsQzFCLENBQXNCaUMsRUFBb0JoSCxJQUM1RG1DLEVBQVEzSCxTQUFTLFNBQ25COEwsRUFBaUJ2TixLQWxLaEJ5SixRQUFRQyxRQUFRLENBQ3JCLENBQ0U3SSxLQUFNLE9BQ05vQixRQUFTLE9BQ1R5TCxJQUFLLEtBQ0xDLElBQUssS0FDTGhOLFdBQVksQ0FDVlcsUUFBUyxPQUNURCxNQUFPLE9BQ1BZLFFBQVMsT0FDVHlMLElBQUssS0FDTEMsSUFBSyxNQUVQaE0sU0FBVSxDQUNSZCxLQUFNLFFBQ05lLFlBQWEsV0F1SmJ5TCxHQUFjakUsRUFBUTNILFNBQVMsY0FBZSxLQUUxQzZNLEVBQVN2QixFQUFRcEosS0FBSSxTQUFBb0UsdUJBQVlBLE1BQ2pDd0csRUFBYXRCLEVBQWlCdkYsT0FBTzRHLEdBQVE3RyxLQUFLLEtBQ3hEOEYsRUFBaUJ2TixLQUNmK0ksR0FDRTlCLEVBQ0FnQyxFQUNBd0UsRUFDQXRFLEVBQ0FvRixFQUNBekIsRUFDQXhELEVBWG9CLENBQUMsVUFBVyxRQUFTLFVBQVcsZUFpQnREK0QsR0FBY2pFLEVBQVEzSCxTQUFTLFdBQVksS0FDdkMrTSxFQUFrQnZDLEVBQWFVLEVBQVMsWUFDeENoQyxFQUFhLENBQ2pCLGtCQUNBLGdCQUNBLGNBQ0EsZUFDQSxvQkFDQSxXQUNBLFVBQ0EsT0FDQSxRQUVGQSxFQUFXM0ssV0FBWDJLLEVBQW1CTSxJQUNuQnNDLEVBQWlCdk4sS0FBS3lLLEdBQWUrRCxFQUFpQnZILEVBQU8wRCxRQUc3RHlDLEdBQWM5QixFQUFRN0osU0FBUyxnQkFBaUIsSUFDOUM0TCxHQUFjakUsRUFBUTNILFNBQVMsY0FBZSxLQUMxQ3dILEVBQWUrRCxFQUNqQnRCLEdBQW1DLEtBQWxCQSxJQUNuQnpDLEVBQWF3RixLQUFPL0MsT0FHaEJnRCxHQUFVdkMsRUFBcUJBLEVBQW1CMUUsS0FBSyxLQUFPLEtBQ3BFOEYsRUFBaUJ2TixLQUNmK0ksR0FDRTlCLEVBQ0FnQyxFQUNBd0UsRUFDQXRFLEVBQ0F1RixHQUNBNUIsRUFDQXhELEVBVm9CLENBQUMsVUFBVyxhQVloQ1YsTUFBSyxTQUFBdEUsVUFDRG1ILEVBQ0tBLEVBQWNuSCxFQUFTNEIsR0FFekI1QixTQUlUK0ksR0FBY2pFLEVBQVEzSCxTQUFTLFdBQVksS0FDdkNrTixHQUFVMUMsRUFBYVUsR0FDdkJoQyxHQUFhLENBQ2pCLGtCQUNBLGdCQUNBLGNBQ0EsZUFDQSxpQkFDQSxjQUNBLG9CQUNBLFFBRUZBLEdBQVczSyxXQUFYMkssR0FBbUJNLElBQ25CTixHQUFXM0ssV0FBWDJLLEdBQW1CTyxJQUNuQnFDLEVBQWlCdk4sS0FBS3lLLEdBQWVrRSxHQUFTMUgsRUFBTzBELFNBSXJEeUMsR0FBYzlCLEVBQVE3SixTQUFTLFNBQVUsSUFDdkMySCxFQUFRM0gsU0FBUyxhQUFjLEtBRTdCbU4sR0FERVYsR0FBaUJuRSxFQUFNNEMsR0FHM0JpQyxHQURFVixHQUFlVyxPQUFNLFNBQUExRSxTQUFzQixZQUFkQSxFQUFLdEosUUFDakJpSixHQUNqQm9FLEdBQ0FsRSxHQUNBcEIsTUFBSyxTQUFBdEUsVUFDRG1ILEVBQ0tBLEVBQWNuSCxFQUFTNEIsR0FFekI1QixLQUdVK0gsRUFBd0I2QixJQUN4Q3RGLE1BQUssU0FBQXlGLFVBQ0p2RSxHQUFzQnVFLEVBQVlyRSxNQUVuQ3BCLE1BQUssU0FBQXRFLFVBQ0FtSCxFQUNLQSxFQUFjbkgsRUFBUzRCLEdBRXpCNUIsS0FHYmlKLEVBQWlCdk4sS0ExUHZCLFNBQTJCNE8sRUFBa0IzSCxVQUNwQzJILEVBQWlCaEcsTUFBSyxTQUFBbUIsVUFDcEJsRCxHQUFzQmtELEVBQU85QyxFQUFPLENBQ3pDLGtCQUNBLGtCQUNBLDBCQXFQc0JpRixDQUFrQjBDLEdBQWtCM0gsT0FFeERvRyxHQUFjakUsRUFBUTNILFNBQVMsY0FBZSxLQUUxQ3dILEdBQ0p5QyxHQUFtQyxLQUFsQkEsRUFBdUIsQ0FBRStDLEtBQU0vQyxHQUFrQixJQUdoRTBCLEdBQWM5QixFQUFRN0osU0FBUyxnQkFDakN3SCxHQUFhNkYsWUFBYyxPQUV2QlIsR0FBU3ZCLEVBQVFwSixLQUFJLFNBQUFvRSx1QkFBWUEsTUFBS04sS0FBSyxLQUNqRDhGLEVBQWlCdk4sS0FDZitJLEdBQ0U5QixFQUNBZ0MsR0FDQXdFLEVBQ0F0RSxFQUNBbUYsR0FDQXhCLEVBQ0F4RCxFQWpCb0IsQ0FBQyxPQUFRLFlBbUI3QlYsTUFBSyxTQUFBdEUsVUFDRG1ILEVBQ0tBLEVBQWNuSCxFQUFTNEIsR0FFekI1QixTQUlUK0ksR0FBY2pFLEVBQVEzSCxTQUFTLFdBQVksS0FDdkNzTixHQUFjOUMsRUFBYVUsR0FBUy9JLFFBQU8sU0FBQXlDLFVBQzNDQSxFQUFLMUYsV0FBV2EsS0FDWDZFLEVBQUsxRixXQUFXYSxJQUFJQyxTQUFTLFlBSWxDa0osR0FBYSxDQUNqQixrQkFDQSxnQkFDQSxjQUNBLGVBQ0EsaUJBQ0Esb0JBQ0EsUUFFRkEsR0FBVzNLLFdBQVgySyxHQUFtQk0sSUFDbkJOLEdBQVczSyxXQUFYMkssR0FBbUJPLElBQ25CUCxHQUFXM0ssV0FBWDJLLEdBQW1CUSxJQUNmSSxHQUNvQixtQkFBbEJBLElBQ0ZaLEdBQVczSyxLQUFLLHFCQUNoQjJLLEdBQVczSyxLQUFLLGdCQUVsQnVOLEVBQWlCdk4sS0FDZnlLLEdBQWVzRSxHQUFhOUgsRUFBTzBELElBQVkvQixNQUFLLFNBQUFoRSxVQUNsRDZHLEVBQWdCQSxFQUFjN0csRUFBUXNCLEdBQVF0QixPQUlsRDJJLEVBQWlCdk4sS0FBS3lLLEdBQWVzRSxHQUFhOUgsRUFBTzBELFNBSzNEeUMsR0FBYzlCLEVBQVE3SixTQUFTLFVBQVcsSUFDeEMySCxFQUFRM0gsU0FBUyxhQUFjLEtBQzNCdU4sR0FBa0J2QyxFQUFtQkUsR0FDM0NZLEVBQWlCdk4sS0FDZndNLEVBQ0V3QyxHQUNBL0gsRUFDQWYsRUFDQTBGLEdBQ0FoRCxNQUFLLFNBQUFoRSxVQUNMNkcsRUFBZ0JBLEVBQWM3RyxFQUFRc0IsRUFBTSxVQUFZdEIsU0FJOUQySSxFQUFpQnZOLEtBQ2YwTSxFQUFlekYsRUFBTzhGLEVBQVN4QixFQUFlSyxHQUFVaEQsTUFBSyxTQUFBaEUsVUFDM0Q2RyxFQUFnQkEsRUFBYzdHLEVBQVFzQixFQUFNLFVBQVl0QixNQUd4RHlJLEdBQWNqRSxFQUFRM0gsU0FBUyxXQUFZLEtBQ3ZDd04sR0FBZWhELEVBQWFVLEdBQzVCaEMsR0FBYSxDQUNqQixrQkFDQSxnQkFDQSxjQUNBLGlCQUNBLE9BQ0EsVUFDQSxXQUNBLFVBQ0EsZUFDQSxRQUVFWSxJQUNvQixtQkFBbEJBLElBQ0ZaLEdBQVczSyxLQUFLLHFCQUNoQjJLLEdBQVczSyxLQUFLLGdCQUVsQjJLLEdBQVczSyxXQUFYMkssS0FBbUJNLEdBQVlySCxRQUFPLFNBQUFwSSxXQUFPQSxJQUFNK1AsU0FFckRaLEdBQVczSyxXQUFYMkssR0FBbUJPLElBQ25CcUMsRUFBaUJ2TixLQUNmeUssR0FBZXdFLEdBQWNoSSxFQUFPMEQsSUFBWS9CLE1BQUssU0FBQXRFLFVBQ25EbUgsRUFBZ0JBLEVBQWNuSCxFQUFTNEIsRUFBTSxVQUFZNUIsVUFLN0Q4SSxHQUFjOUIsRUFBUTdKLFNBQVMsc0JBQXVCLElBQ3BEMkgsRUFBUTNILFNBQVMsYUFBYyxLQUMzQnlOLEdBQXdCM0MsRUFBK0JJLEdBQzdEWSxFQUFpQnZOLEtBQ2ZzTSxFQUFvQzRDLEdBQXVCakksT0FHM0RvRyxHQUFjakUsRUFBUTNILFNBQVMsY0FBZSxLQUUxQ3dILEdBQ0p5QyxHQUFtQyxLQUFsQkEsRUFBdUIsQ0FBRStDLEtBQU0vQyxHQUFrQixHQUNwRTZCLEVBQWlCdk4sS0FDZitJLEdBQ0U5QixFQUNBZ0MsR0FDQXdFLEVBQ0F0RSxFQUNBZ0UsRUFBaUIxRixLQUFLLEtBQ3RCcUYsRUFDQXhELEVBWG9CLENBQUMsZ0JBYXJCVixNQUFLLFNBQUF0RSxVQUNEbUgsRUFDS0EsRUFBY25ILEVBQVM0QixFQUFNLHNCQUUvQjVCLE9BTWNtRixRQUFRMEYsSUFBSTVCLEdBQ3RDM0UsS0FBS3dHLFdBQ0x4RyxLQUFLckMsSUFDTHFDLE1BQUssU0FBQXRFLEdBQ0prSixFQUFTbEosUUFBVUEsWUFFZCxTQUFBckUsR0FDTHVOLEVBQVM2QixNQUFRcFAsS0FFQTJJLE1BQUssV0FDeEIrQyxPQUNLNkIsR0FDSGxKLFFBQVNGLEdBQWtCQyxFQUFZbUosRUFBU2xKLFFBQVMyQyxXQUtaLElBQUssQ0FDdERxSSxTQUFTLHNNQzVqQndEQyxxQkFLL0QsSUFBSUMsRUE0SEFDLEVBMUhKLFNBQVNDLElBQ0wsT0FBT0YsRUFBYXpULE1BQU0sS0FBTU4sV0FLcEMsU0FBU2tVLEVBQWdCaEUsR0FDckI2RCxFQUFlN0QsRUFHbkIsU0FBUzFPLEVBQVFnSyxHQUNiLE9BQ0lBLGFBQWlCNUssT0FDeUIsbUJBQTFDaEIsT0FBT0YsVUFBVXdCLFNBQVNiLEtBQUttTCxHQUl2QyxTQUFTMkksRUFBUzNJLEdBR2QsT0FDYSxNQUFUQSxHQUMwQyxvQkFBMUM1TCxPQUFPRixVQUFVd0IsU0FBU2IsS0FBS21MLEdBSXZDLFNBQVM0SSxFQUFXQyxFQUFHQyxHQUNuQixPQUFPMVUsT0FBT0YsVUFBVVUsZUFBZUMsS0FBS2dVLEVBQUdDLEdBR25ELFNBQVNDLEVBQWNqVixHQUNuQixHQUFJTSxPQUFPNFUsb0JBQ1AsT0FBa0QsSUFBM0M1VSxPQUFPNFUsb0JBQW9CbFYsR0FBS1csT0FFdkMsSUFBSW9NLEVBQ0osSUFBS0EsS0FBSy9NLEVBQ04sR0FBSThVLEVBQVc5VSxFQUFLK00sR0FDaEIsT0FBTyxFQUdmLE9BQU8sRUFJZixTQUFTb0ksRUFBWWpKLEdBQ2pCLFlBQWlCLElBQVZBLEVBR1gsU0FBU2tKLEVBQVNsSixHQUNkLE1BQ3FCLGlCQUFWQSxHQUNtQyxvQkFBMUM1TCxPQUFPRixVQUFVd0IsU0FBU2IsS0FBS21MLEdBSXZDLFNBQVNtSixFQUFPbkosR0FDWixPQUNJQSxhQUFpQm9KLE1BQ3lCLGtCQUExQ2hWLE9BQU9GLFVBQVV3QixTQUFTYixLQUFLbUwsR0FJdkMsU0FBU3RELEVBQUl6SCxFQUFLb1UsR0FDZCxJQUNJOVUsRUFEQXFOLEVBQU0sR0FFVixJQUFLck4sRUFBSSxFQUFHQSxFQUFJVSxFQUFJUixTQUFVRixFQUMxQnFOLEVBQUk3SSxLQUFLc1EsRUFBR3BVLEVBQUlWLEdBQUlBLElBRXhCLE9BQU9xTixFQUdYLFNBQVMwSCxFQUFPVCxFQUFHQyxHQUNmLElBQUssSUFBSXZVLEtBQUt1VSxFQUNORixFQUFXRSxFQUFHdlUsS0FDZHNVLEVBQUV0VSxHQUFLdVUsRUFBRXZVLElBWWpCLE9BUklxVSxFQUFXRSxFQUFHLGNBQ2RELEVBQUVuVCxTQUFXb1QsRUFBRXBULFVBR2ZrVCxFQUFXRSxFQUFHLGFBQ2RELEVBQUVVLFFBQVVULEVBQUVTLFNBR1hWLEVBR1gsU0FBU1csRUFBVXhKLEVBQU95SixFQUFRQyxFQUFRQyxHQUN0QyxPQUFPQyxHQUFpQjVKLEVBQU95SixFQUFRQyxFQUFRQyxHQUFRLEdBQU1FLE1BR2pFLFNBQVNDLElBRUwsTUFBTyxDQUNIQyxPQUFPLEVBQ1BDLGFBQWMsR0FDZEMsWUFBYSxHQUNiQyxVQUFXLEVBQ1hDLGNBQWUsRUFDZkMsV0FBVyxFQUNYQyxXQUFZLEtBQ1pDLGFBQWMsS0FDZEMsZUFBZSxFQUNmQyxpQkFBaUIsRUFDakJDLEtBQUssRUFDTEMsZ0JBQWlCLEdBQ2pCQyxJQUFLLEtBQ0xDLFNBQVUsS0FDVkMsU0FBUyxFQUNUQyxpQkFBaUIsR0FJekIsU0FBU0MsRUFBZ0JDLEdBSXJCLE9BSGEsTUFBVEEsRUFBRUMsTUFDRkQsRUFBRUMsSUFBTW5CLEtBRUxrQixFQUFFQyxJQXNCYixTQUFTQyxFQUFRRixHQUNiLEdBQWtCLE1BQWRBLEVBQUVHLFNBQWtCLENBQ3BCLElBQUlDLEVBQVFMLEVBQWdCQyxHQUN4QkssRUFBYzdDLEVBQUszVCxLQUFLdVcsRUFBTVYsaUJBQWlCLFNBQVVuVyxHQUNyRCxPQUFZLE1BQUxBLEtBRVgrVyxHQUNLQyxNQUFNUCxFQUFFeFMsR0FBR2dULFlBQ1pKLEVBQU1sQixTQUFXLElBQ2hCa0IsRUFBTXJCLFFBQ05xQixFQUFNZixhQUNOZSxFQUFNZCxlQUNOYyxFQUFNSyxpQkFDTkwsRUFBTU4sa0JBQ05NLEVBQU1oQixZQUNOZ0IsRUFBTWIsZ0JBQ05hLEVBQU1aLG1CQUNMWSxFQUFNUixVQUFhUSxFQUFNUixVQUFZUyxHQVUvQyxHQVJJTCxFQUFFVSxVQUNGSixFQUNJQSxHQUN3QixJQUF4QkYsRUFBTWpCLGVBQ3dCLElBQTlCaUIsRUFBTXBCLGFBQWF2VixhQUNEaUUsSUFBbEIwUyxFQUFNTyxTQUdTLE1BQW5CdlgsT0FBT3dYLFVBQXFCeFgsT0FBT3dYLFNBQVNaLEdBRzVDLE9BQU9NLEVBRlBOLEVBQUVHLFNBQVdHLEVBS3JCLE9BQU9OLEVBQUVHLFNBR2IsU0FBU1UsRUFBY1QsR0FDbkIsSUFBSUosRUFBSXhCLEVBQVVzQyxLQU9sQixPQU5hLE1BQVRWLEVBQ0E5QixFQUFPeUIsRUFBZ0JDLEdBQUlJLEdBRTNCTCxFQUFnQkMsR0FBR1IsaUJBQWtCLEVBR2xDUSxFQTdEUHhDLEVBREFwVCxNQUFNbEIsVUFBVXNVLEtBQ1RwVCxNQUFNbEIsVUFBVXNVLEtBRWhCLFNBQVV1RCxHQUNiLElBRUl4WCxFQUZBeVgsRUFBSTVYLE9BQU9XLE1BQ1hHLEVBQU04VyxFQUFFdlgsU0FBVyxFQUd2QixJQUFLRixFQUFJLEVBQUdBLEVBQUlXLEVBQUtYLElBQ2pCLEdBQUlBLEtBQUt5WCxHQUFLRCxFQUFJbFgsS0FBS0UsS0FBTWlYLEVBQUV6WCxHQUFJQSxFQUFHeVgsR0FDbEMsT0FBTyxFQUlmLE9BQU8sR0FxRGYsSUFBSUMsRUFBb0J4RCxFQUFNd0QsaUJBQW1CLEdBQzdDQyxHQUFtQixFQUV2QixTQUFTQyxFQUFXQyxFQUFJdlcsR0FDcEIsSUFBSXRCLEVBQUc4WCxFQUFNQyxFQWlDYixHQS9CS3JELEVBQVlwVCxFQUFLMFcsb0JBQ2xCSCxFQUFHRyxpQkFBbUIxVyxFQUFLMFcsa0JBRTFCdEQsRUFBWXBULEVBQUsrQyxNQUNsQndULEVBQUd4VCxHQUFLL0MsRUFBSytDLElBRVpxUSxFQUFZcFQsRUFBSzJXLE1BQ2xCSixFQUFHSSxHQUFLM1csRUFBSzJXLElBRVp2RCxFQUFZcFQsRUFBSzRXLE1BQ2xCTCxFQUFHSyxHQUFLNVcsRUFBSzRXLElBRVp4RCxFQUFZcFQsRUFBSzZWLFdBQ2xCVSxFQUFHVixRQUFVN1YsRUFBSzZWLFNBRWpCekMsRUFBWXBULEVBQUs2VyxRQUNsQk4sRUFBR00sS0FBTzdXLEVBQUs2VyxNQUVkekQsRUFBWXBULEVBQUs4VyxVQUNsQlAsRUFBR08sT0FBUzlXLEVBQUs4VyxRQUVoQjFELEVBQVlwVCxFQUFLK1csV0FDbEJSLEVBQUdRLFFBQVUvVyxFQUFLK1csU0FFakIzRCxFQUFZcFQsRUFBS29WLE9BQ2xCbUIsRUFBR25CLElBQU1GLEVBQWdCbFYsSUFFeEJvVCxFQUFZcFQsRUFBS2dYLFdBQ2xCVCxFQUFHUyxRQUFVaFgsRUFBS2dYLFNBR2xCWixFQUFpQnhYLE9BQVMsRUFDMUIsSUFBS0YsRUFBSSxFQUFHQSxFQUFJMFgsRUFBaUJ4WCxPQUFRRixJQUdoQzBVLEVBRExxRCxFQUFNelcsRUFETndXLEVBQU9KLEVBQWlCMVgsT0FHcEI2WCxFQUFHQyxHQUFRQyxHQUt2QixPQUFPRixFQUlYLFNBQVNVLEVBQU9DLEdBQ1paLEVBQVdwWCxLQUFNZ1ksR0FDakJoWSxLQUFLeUQsR0FBSyxJQUFJNFEsS0FBa0IsTUFBYjJELEVBQU92VSxHQUFhdVUsRUFBT3ZVLEdBQUdnVCxVQUFZTSxLQUN4RC9XLEtBQUttVyxZQUNOblcsS0FBS3lELEdBQUssSUFBSTRRLEtBQUswQyxPQUlFLElBQXJCSSxJQUNBQSxHQUFtQixFQUNuQnpELEVBQU11RSxhQUFhalksTUFDbkJtWCxHQUFtQixHQUkzQixTQUFTZSxFQUFTblosR0FDZCxPQUNJQSxhQUFlZ1osR0FBa0IsTUFBUGhaLEdBQXVDLE1BQXhCQSxFQUFJeVksaUJBSXJELFNBQVNXLEVBQUtDLElBRWdDLElBQXRDMUUsRUFBTTJFLDZCQUNhLG9CQUFaQyxTQUNQQSxRQUFRSCxNQUVSRyxRQUFRSCxLQUFLLHdCQUEwQkMsR0FJL0MsU0FBU0csRUFBVUgsRUFBSzlELEdBQ3BCLElBQUlrRSxHQUFZLEVBRWhCLE9BQU9qRSxHQUFPLFdBSVYsR0FIZ0MsTUFBNUJiLEVBQU0rRSxvQkFDTi9FLEVBQU0rRSxtQkFBbUIsS0FBTUwsR0FFL0JJLEVBQVcsQ0FDWCxJQUNJRSxFQUNBbFosRUFDQUksRUFIQStZLEVBQU8sR0FJWCxJQUFLblosRUFBSSxFQUFHQSxFQUFJQyxVQUFVQyxPQUFRRixJQUFLLENBRW5DLEdBREFrWixFQUFNLEdBQ3NCLGlCQUFqQmpaLFVBQVVELEdBQWlCLENBRWxDLElBQUtJLEtBREw4WSxHQUFPLE1BQVFsWixFQUFJLEtBQ1BDLFVBQVUsR0FDZG9VLEVBQVdwVSxVQUFVLEdBQUlHLEtBQ3pCOFksR0FBTzlZLEVBQU0sS0FBT0gsVUFBVSxHQUFHRyxHQUFPLE1BR2hEOFksRUFBTUEsRUFBSTlYLE1BQU0sR0FBSSxRQUVwQjhYLEVBQU1qWixVQUFVRCxHQUVwQm1aLEVBQUszVSxLQUFLMFUsR0FFZFAsRUFDSUMsRUFDSSxnQkFDQS9YLE1BQU1sQixVQUFVeUIsTUFBTWQsS0FBSzZZLEdBQU1sTixLQUFLLElBQ3RDLE1BQ0EsSUFBSW1OLE9BQVFDLE9BRXBCTCxHQUFZLEVBRWhCLE9BQU9sRSxFQUFHdlUsTUFBTUMsS0FBTVAsYUFDdkI2VSxHQUdQLElBZ0ZJekksRUFoRkFpTixFQUFlLEdBRW5CLFNBQVNDLEVBQWdCbFksRUFBTXVYLEdBQ0ssTUFBNUIxRSxFQUFNK0Usb0JBQ04vRSxFQUFNK0UsbUJBQW1CNVgsRUFBTXVYLEdBRTlCVSxFQUFhalksS0FDZHNYLEVBQUtDLEdBQ0xVLEVBQWFqWSxJQUFRLEdBTzdCLFNBQVNtWSxFQUFXL04sR0FDaEIsTUFDeUIsb0JBQWJnTyxVQUE0QmhPLGFBQWlCZ08sVUFDWCxzQkFBMUM1WixPQUFPRixVQUFVd0IsU0FBU2IsS0FBS21MLEdBSXZDLFNBQVNpTyxFQUFJbEIsR0FDVCxJQUFJVixFQUFNOVgsRUFDVixJQUFLQSxLQUFLd1ksRUFDRm5FLEVBQVdtRSxFQUFReFksS0FFZndaLEVBREoxQixFQUFPVSxFQUFPeFksSUFFVlEsS0FBS1IsR0FBSzhYLEVBRVZ0WCxLQUFLLElBQU1SLEdBQUs4WCxHQUk1QnRYLEtBQUttWixRQUFVbkIsRUFJZmhZLEtBQUtvWiwrQkFBaUMsSUFBSXZQLFFBQ3JDN0osS0FBS3FaLHdCQUF3QjFaLFFBQVVLLEtBQUtzWixjQUFjM1osUUFDdkQsSUFDQSxVQUFVQSxRQUl0QixTQUFTNFosRUFBYUMsRUFBY0MsR0FDaEMsSUFDSW5DLEVBREF6SyxFQUFNMEgsRUFBTyxHQUFJaUYsR0FFckIsSUFBS2xDLEtBQVFtQyxFQUNMNUYsRUFBVzRGLEVBQWFuQyxLQUNwQjFELEVBQVM0RixFQUFhbEMsS0FBVTFELEVBQVM2RixFQUFZbkMsS0FDckR6SyxFQUFJeUssR0FBUSxHQUNaL0MsRUFBTzFILEVBQUl5SyxHQUFPa0MsRUFBYWxDLElBQy9CL0MsRUFBTzFILEVBQUl5SyxHQUFPbUMsRUFBWW5DLEtBQ0YsTUFBckJtQyxFQUFZbkMsR0FDbkJ6SyxFQUFJeUssR0FBUW1DLEVBQVluQyxVQUVqQnpLLEVBQUl5SyxJQUl2QixJQUFLQSxLQUFRa0MsRUFFTDNGLEVBQVcyRixFQUFjbEMsS0FDeEJ6RCxFQUFXNEYsRUFBYW5DLElBQ3pCMUQsRUFBUzRGLEVBQWFsQyxNQUd0QnpLLEVBQUl5SyxHQUFRL0MsRUFBTyxHQUFJMUgsRUFBSXlLLEtBR25DLE9BQU96SyxFQUdYLFNBQVM2TSxFQUFPMUIsR0FDRSxNQUFWQSxHQUNBaFksS0FBS2taLElBQUlsQixHQWhFakJ0RSxFQUFNMkUsNkJBQThCLEVBQ3BDM0UsRUFBTStFLG1CQUFxQixLQXNFdkI1TSxFQURBeE0sT0FBT3dNLEtBQ0F4TSxPQUFPd00sS0FFUCxTQUFVOU0sR0FDYixJQUFJUyxFQUNBcU4sRUFBTSxHQUNWLElBQUtyTixLQUFLVCxFQUNGOFUsRUFBVzlVLEVBQUtTLElBQ2hCcU4sRUFBSTdJLEtBQUt4RSxHQUdqQixPQUFPcU4sR0FJZixJQUFJOE0sRUFBa0IsQ0FDbEJDLFFBQVMsZ0JBQ1RDLFFBQVMsbUJBQ1RDLFNBQVUsZUFDVkMsUUFBUyxvQkFDVEMsU0FBVSxzQkFDVkMsU0FBVSxLQUdkLFNBQVNDLEVBQVN0YSxFQUFLdWEsRUFBS0MsR0FDeEIsSUFBSUMsRUFBU3JhLEtBQUtzYSxVQUFVMWEsSUFBUUksS0FBS3NhLFVBQW9CLFNBQzdELE9BQU90QixFQUFXcUIsR0FBVUEsRUFBT3ZhLEtBQUtxYSxFQUFLQyxHQUFPQyxFQUd4RCxTQUFTRSxFQUFTQyxFQUFRQyxFQUFjQyxHQUNwQyxJQUFJQyxFQUFZLEdBQUs3VSxLQUFLQyxJQUFJeVUsR0FDMUJJLEVBQWNILEVBQWVFLEVBQVVqYixPQUUzQyxPQURXOGEsR0FBVSxFQUVSRSxFQUFZLElBQU0sR0FBTSxLQUNqQzVVLEtBQUsrVSxJQUFJLEdBQUkvVSxLQUFLZ1YsSUFBSSxFQUFHRixJQUFjamEsV0FBV29hLE9BQU8sR0FDekRKLEVBSVIsSUFBSUssRUFBbUIseU1BQ25CQyxFQUF3Qiw2Q0FDeEJDLEVBQWtCLEdBQ2xCQyxFQUF1QixHQU0zQixTQUFTQyxFQUFlQyxFQUFPQyxFQUFRQyxFQUFTNUwsR0FDNUMsSUFBSTZMLEVBQU83TCxFQUNhLGlCQUFiQSxJQUNQNkwsRUFBTyxXQUNILE9BQU94YixLQUFLMlAsT0FHaEIwTCxJQUNBRixFQUFxQkUsR0FBU0csR0FFOUJGLElBQ0FILEVBQXFCRyxFQUFPLElBQU0sV0FDOUIsT0FBT2YsRUFBU2lCLEVBQUt6YixNQUFNQyxLQUFNUCxXQUFZNmIsRUFBTyxHQUFJQSxFQUFPLE1BR25FQyxJQUNBSixFQUFxQkksR0FBVyxXQUM1QixPQUFPdmIsS0FBS3liLGFBQWFGLFFBQ3JCQyxFQUFLemIsTUFBTUMsS0FBTVAsV0FDakI0YixLQU1oQixTQUFTSyxFQUF1QnpRLEdBQzVCLE9BQUlBLEVBQU16RCxNQUFNLFlBQ0x5RCxFQUFNckIsUUFBUSxXQUFZLElBRTlCcUIsRUFBTXJCLFFBQVEsTUFBTyxJQUdoQyxTQUFTK1IsRUFBbUJqSCxHQUN4QixJQUNJbFYsRUFDQUUsRUFGQWtjLEVBQVFsSCxFQUFPbE4sTUFBTXdULEdBSXpCLElBQUt4YixFQUFJLEVBQUdFLEVBQVNrYyxFQUFNbGMsT0FBUUYsRUFBSUUsRUFBUUYsSUFDdkMyYixFQUFxQlMsRUFBTXBjLElBQzNCb2MsRUFBTXBjLEdBQUsyYixFQUFxQlMsRUFBTXBjLElBRXRDb2MsRUFBTXBjLEdBQUtrYyxFQUF1QkUsRUFBTXBjLElBSWhELE9BQU8sU0FBVTJhLEdBQ2IsSUFDSTNhLEVBREE2YSxFQUFTLEdBRWIsSUFBSzdhLEVBQUksRUFBR0EsRUFBSUUsRUFBUUYsSUFDcEI2YSxHQUFVckIsRUFBVzRDLEVBQU1wYyxJQUNyQm9jLEVBQU1wYyxHQUFHTSxLQUFLcWEsRUFBS3pGLEdBQ25Ca0gsRUFBTXBjLEdBRWhCLE9BQU82YSxHQUtmLFNBQVN3QixFQUFhNUYsRUFBR3ZCLEdBQ3JCLE9BQUt1QixFQUFFRSxXQUlQekIsRUFBU29ILEVBQWFwSCxFQUFRdUIsRUFBRXdGLGNBQ2hDUCxFQUFnQnhHLEdBQ1p3RyxFQUFnQnhHLElBQVdpSCxFQUFtQmpILEdBRTNDd0csRUFBZ0J4RyxHQUFRdUIsSUFQcEJBLEVBQUV3RixhQUFhTSxjQVU5QixTQUFTRCxFQUFhcEgsRUFBUUMsR0FDMUIsSUFBSW5WLEVBQUksRUFFUixTQUFTd2MsRUFBNEIvUSxHQUNqQyxPQUFPMEosRUFBT3NILGVBQWVoUixJQUFVQSxFQUkzQyxJQURBZ1EsRUFBc0JpQixVQUFZLEVBQzNCMWMsR0FBSyxHQUFLeWIsRUFBc0JsYSxLQUFLMlQsSUFDeENBLEVBQVNBLEVBQU85SyxRQUNacVIsRUFDQWUsR0FFSmYsRUFBc0JpQixVQUFZLEVBQ2xDMWMsR0FBSyxFQUdULE9BQU9rVixFQUdYLElBQUl5SCxFQUF3QixDQUN4QkMsSUFBSyxZQUNMQyxHQUFJLFNBQ0pDLEVBQUcsYUFDSEMsR0FBSSxlQUNKQyxJQUFLLHNCQUNMQyxLQUFNLDZCQUdWLFNBQVNSLEVBQWVyYyxHQUNwQixJQUFJOFUsRUFBUzFVLEtBQUswYyxnQkFBZ0I5YyxHQUM5QitjLEVBQWMzYyxLQUFLMGMsZ0JBQWdCOWMsRUFBSWdkLGVBRTNDLE9BQUlsSSxJQUFXaUksRUFDSmpJLEdBR1gxVSxLQUFLMGMsZ0JBQWdCOWMsR0FBTytjLEVBQ3ZCblYsTUFBTXdULEdBQ05yVCxLQUFJLFNBQVVrVixHQUNYLE1BQ1ksU0FBUkEsR0FDUSxPQUFSQSxHQUNRLE9BQVJBLEdBQ1EsU0FBUkEsRUFFT0EsRUFBSWpjLE1BQU0sR0FFZGljLEtBRVZwUixLQUFLLElBRUh6TCxLQUFLMGMsZ0JBQWdCOWMsSUFHaEMsSUFBSWtkLEVBQXFCLGVBRXpCLFNBQVNmLElBQ0wsT0FBTy9iLEtBQUsrYyxhQUdoQixJQUFJQyxFQUFpQixLQUNqQkMsRUFBZ0MsVUFFcEMsU0FBUzFCLEVBQVFmLEdBQ2IsT0FBT3hhLEtBQUtrZCxTQUFTdFQsUUFBUSxLQUFNNFEsR0FHdkMsSUFBSTJDLEVBQXNCLENBQ3RCQyxPQUFRLFFBQ1JDLEtBQU0sU0FDTkMsRUFBRyxnQkFDSEMsR0FBSSxhQUNKdEgsRUFBRyxXQUNIdUgsR0FBSSxhQUNKQyxFQUFHLFVBQ0hDLEdBQUksV0FDSkMsRUFBRyxRQUNIQyxHQUFJLFVBQ0pDLEVBQUcsU0FDSEMsR0FBSSxXQUNKQyxFQUFHLFVBQ0hDLEdBQUksWUFDSkMsRUFBRyxTQUNIQyxHQUFJLFlBR1IsU0FBU0MsRUFBYTNELEVBQVE0RCxFQUFlQyxFQUFRQyxHQUNqRCxJQUFJakUsRUFBU3JhLEtBQUt1ZSxjQUFjRixHQUNoQyxPQUFPckYsRUFBV3FCLEdBQ1pBLEVBQU9HLEVBQVE0RCxFQUFlQyxFQUFRQyxHQUN0Q2pFLEVBQU96USxRQUFRLE1BQU80USxHQUdoQyxTQUFTZ0UsR0FBV0MsRUFBTXBFLEdBQ3RCLElBQUkzRixFQUFTMVUsS0FBS3VlLGNBQWNFLEVBQU8sRUFBSSxTQUFXLFFBQ3RELE9BQU96RixFQUFXdEUsR0FBVUEsRUFBTzJGLEdBQVUzRixFQUFPOUssUUFBUSxNQUFPeVEsR0FHdkUsSUFBSXFFLEdBQVUsR0FFZCxTQUFTQyxHQUFhQyxFQUFNQyxHQUN4QixJQUFJQyxFQUFZRixFQUFLdlksY0FDckJxWSxHQUFRSSxHQUFhSixHQUFRSSxFQUFZLEtBQU9KLEdBQVFHLEdBQWFELEVBR3pFLFNBQVNHLEdBQWVDLEdBQ3BCLE1BQXdCLGlCQUFWQSxFQUNSTixHQUFRTSxJQUFVTixHQUFRTSxFQUFNM1ksb0JBQ2hDMUMsRUFHVixTQUFTc2IsR0FBcUJDLEdBQzFCLElBQ0lDLEVBQ0E3SCxFQUZBOEgsRUFBa0IsR0FJdEIsSUFBSzlILEtBQVE0SCxFQUNMckwsRUFBV3FMLEVBQWE1SCxLQUN4QjZILEVBQWlCSixHQUFlekgsTUFFNUI4SCxFQUFnQkQsR0FBa0JELEVBQVk1SCxJQUsxRCxPQUFPOEgsRUFHWCxJQUFJQyxHQUFhLEdBRWpCLFNBQVNDLEdBQWdCVixFQUFNVyxHQUMzQkYsR0FBV1QsR0FBUVcsRUFHdkIsU0FBU0MsR0FBb0JDLEdBQ3pCLElBQ0lDLEVBREFWLEVBQVEsR0FFWixJQUFLVSxLQUFLRCxFQUNGNUwsRUFBVzRMLEVBQVVDLElBQ3JCVixFQUFNaGIsS0FBSyxDQUFFNGEsS0FBTWMsRUFBR0gsU0FBVUYsR0FBV0ssS0FNbkQsT0FIQVYsRUFBTVcsTUFBSyxTQUFVN0wsRUFBR0MsR0FDcEIsT0FBT0QsRUFBRXlMLFNBQVd4TCxFQUFFd0wsWUFFbkJQLEVBR1gsU0FBU1ksR0FBV0MsR0FDaEIsT0FBUUEsRUFBTyxHQUFNLEdBQUtBLEVBQU8sS0FBUSxHQUFNQSxFQUFPLEtBQVEsRUFHbEUsU0FBU0MsR0FBU3RGLEdBQ2QsT0FBSUEsRUFBUyxFQUVGMVUsS0FBS2lhLEtBQUt2RixJQUFXLEVBRXJCMVUsS0FBS2thLE1BQU14RixHQUkxQixTQUFTeUYsR0FBTUMsR0FDWCxJQUFJQyxHQUFpQkQsRUFDakJyZCxFQUFRLEVBTVosT0FKc0IsSUFBbEJzZCxHQUF1QkMsU0FBU0QsS0FDaEN0ZCxFQUFRaWQsR0FBU0ssSUFHZHRkLEVBR1gsU0FBU3dkLEdBQVd6QixFQUFNMEIsR0FDdEIsT0FBTyxTQUFVemQsR0FDYixPQUFhLE1BQVRBLEdBQ0EwZCxHQUFNdmdCLEtBQU00ZSxFQUFNL2IsR0FDbEI2USxFQUFNdUUsYUFBYWpZLEtBQU1zZ0IsR0FDbEJ0Z0IsTUFFQXVMLEdBQUl2TCxLQUFNNGUsSUFLN0IsU0FBU3JULEdBQUk0TyxFQUFLeUUsR0FDZCxPQUFPekUsRUFBSWhFLFVBQ0xnRSxFQUFJMVcsR0FBRyxPQUFTMFcsRUFBSXZDLE9BQVMsTUFBUSxJQUFNZ0gsS0FDM0M3SCxJQUdWLFNBQVN3SixHQUFNcEcsRUFBS3lFLEVBQU0vYixHQUNsQnNYLEVBQUloRSxZQUFjSyxNQUFNM1QsS0FFWCxhQUFUK2IsR0FDQWdCLEdBQVd6RixFQUFJMEYsU0FDQyxJQUFoQjFGLEVBQUlxRyxTQUNXLEtBQWZyRyxFQUFJc0csUUFFSjVkLEVBQVFvZCxHQUFNcGQsR0FDZHNYLEVBQUkxVyxHQUFHLE9BQVMwVyxFQUFJdkMsT0FBUyxNQUFRLElBQU1nSCxHQUN2Qy9iLEVBQ0FzWCxFQUFJcUcsUUFDSkUsR0FBWTdkLEVBQU9zWCxFQUFJcUcsV0FHM0JyRyxFQUFJMVcsR0FBRyxPQUFTMFcsRUFBSXZDLE9BQVMsTUFBUSxJQUFNZ0gsR0FBTS9iLElBTzdELFNBQVM4ZCxHQUFVM0IsR0FFZixPQUFJaEcsRUFBV2haLEtBRGZnZixFQUFRRCxHQUFlQyxLQUVaaGYsS0FBS2dmLEtBRVRoZixLQUdYLFNBQVM0Z0IsR0FBVTVCLEVBQU9uYyxHQUN0QixHQUFxQixpQkFBVm1jLEVBQW9CLENBRTNCLElBQ0l4ZixFQURBcWhCLEVBQWNyQixHQURsQlIsRUFBUUMsR0FBcUJELElBRzdCLElBQUt4ZixFQUFJLEVBQUdBLEVBQUlxaEIsRUFBWW5oQixPQUFRRixJQUNoQ1EsS0FBSzZnQixFQUFZcmhCLEdBQUdvZixNQUFNSSxFQUFNNkIsRUFBWXJoQixHQUFHb2YsWUFJbkQsR0FBSTVGLEVBQVdoWixLQURmZ2YsRUFBUUQsR0FBZUMsS0FFbkIsT0FBT2hmLEtBQUtnZixHQUFPbmMsR0FHM0IsT0FBTzdDLEtBR1gsSUFtQkk4Z0IsR0FuQkFDLEdBQVMsS0FDVEMsR0FBUyxPQUNUQyxHQUFTLFFBQ1RDLEdBQVMsUUFDVEMsR0FBUyxhQUNUQyxHQUFZLFFBQ1pDLEdBQVksWUFDWkMsR0FBWSxnQkFDWkMsR0FBWSxVQUNaQyxHQUFZLFVBQ1pDLEdBQVksZUFDWkMsR0FBZ0IsTUFDaEJDLEdBQWMsV0FDZEMsR0FBYyxxQkFDZEMsR0FBbUIsMEJBQ25CQyxHQUFpQix1QkFHakJDLEdBQVksd0pBS2hCLFNBQVNDLEdBQWMzRyxFQUFPNEcsRUFBT0MsR0FDakNwQixHQUFRekYsR0FBU3JDLEVBQVdpSixHQUN0QkEsRUFDQSxTQUFVRSxFQUFVMUcsR0FDaEIsT0FBTzBHLEdBQVlELEVBQWNBLEVBQWNELEdBSTdELFNBQVNHLEdBQXNCL0csRUFBT3JELEdBQ2xDLE9BQUtuRSxFQUFXaU4sR0FBU3pGLEdBSWxCeUYsR0FBUXpGLEdBQU9yRCxFQUFPckIsUUFBU3FCLEVBQU9GLFNBSGxDLElBQUlqTyxPQUFPd1ksR0FBZWhILElBT3pDLFNBQVNnSCxHQUFlL0UsR0FDcEIsT0FBT2dGLEdBQ0hoRixFQUNLMVQsUUFBUSxLQUFNLElBQ2RBLFFBQVEsdUNBQXVDLFNBQzVDMlksRUFDQTdjLEVBQ0FHLEVBQ0EyYyxFQUNBQyxHQUVBLE9BQU8vYyxHQUFNRyxHQUFNMmMsR0FBTUMsTUFLekMsU0FBU0gsR0FBWWhGLEdBQ2pCLE9BQU9BLEVBQUUxVCxRQUFRLHlCQUEwQixRQXBDL0NrWCxHQUFVLEdBdUNWLElBQUk0QixHQUFTLEdBRWIsU0FBU0MsR0FBY3RILEVBQU8xTCxHQUMxQixJQUFJblEsRUFDQWdjLEVBQU83TCxFQVNYLElBUnFCLGlCQUFWMEwsSUFDUEEsRUFBUSxDQUFDQSxJQUVUbEgsRUFBU3hFLEtBQ1Q2TCxFQUFPLFNBQVV2USxFQUFPMlEsR0FDcEJBLEVBQU1qTSxHQUFZc1EsR0FBTWhWLEtBRzNCekwsRUFBSSxFQUFHQSxFQUFJNmIsRUFBTTNiLE9BQVFGLElBQzFCa2pCLEdBQU9ySCxFQUFNN2IsSUFBTWdjLEVBSTNCLFNBQVNvSCxHQUFrQnZILEVBQU8xTCxHQUM5QmdULEdBQWN0SCxHQUFPLFNBQVVwUSxFQUFPMlEsRUFBTzVELEVBQVFxRCxHQUNqRHJELEVBQU82SyxHQUFLN0ssRUFBTzZLLElBQU0sR0FDekJsVCxFQUFTMUUsRUFBTytNLEVBQU82SyxHQUFJN0ssRUFBUXFELE1BSTNDLFNBQVN5SCxHQUF3QnpILEVBQU9wUSxFQUFPK00sR0FDOUIsTUFBVC9NLEdBQWlCNEksRUFBVzZPLEdBQVFySCxJQUNwQ3FILEdBQU9ySCxHQUFPcFEsRUFBTytNLEVBQU8rSyxHQUFJL0ssRUFBUXFELEdBSWhELElBY0l2VCxHQWRBa2IsR0FBTyxFQUNQQyxHQUFRLEVBQ1JDLEdBQU8sRUFDUEMsR0FBTyxFQUNQQyxHQUFTLEVBQ1RDLEdBQVMsRUFDVEMsR0FBYyxFQUNkQyxHQUFPLEVBQ1BDLEdBQVUsRUFFZCxTQUFTQyxHQUFJL2lCLEVBQUdnakIsR0FDWixPQUFTaGpCLEVBQUlnakIsRUFBS0EsR0FBS0EsRUFvQjNCLFNBQVNoRCxHQUFZYixFQUFNVyxHQUN2QixHQUFJaEssTUFBTXFKLElBQVNySixNQUFNZ0ssR0FDckIsT0FBT3pKLElBRVgsSUFBSTRNLEVBQVdGLEdBQUlqRCxFQUFPLElBRTFCLE9BREFYLElBQVNXLEVBQVFtRCxHQUFZLEdBQ1QsSUFBYkEsRUFDRC9ELEdBQVdDLEdBQ1AsR0FDQSxHQUNKLEdBQU84RCxFQUFXLEVBQUssRUF4QjdCN2IsR0FEQXpILE1BQU1sQixVQUFVMkksUUFDTnpILE1BQU1sQixVQUFVMkksUUFFaEIsU0FBVXZILEdBRWhCLElBQUlmLEVBQ0osSUFBS0EsRUFBSSxFQUFHQSxFQUFJUSxLQUFLTixTQUFVRixFQUMzQixHQUFJUSxLQUFLUixLQUFPZSxFQUNaLE9BQU9mLEVBR2YsT0FBUSxHQW1CaEI0YixFQUFlLElBQUssQ0FBQyxLQUFNLEdBQUksTUFBTSxXQUNqQyxPQUFPcGIsS0FBS3dnQixRQUFVLEtBRzFCcEYsRUFBZSxNQUFPLEVBQUcsR0FBRyxTQUFVMUcsR0FDbEMsT0FBTzFVLEtBQUt5YixhQUFhbUksWUFBWTVqQixLQUFNMFUsTUFHL0MwRyxFQUFlLE9BQVEsRUFBRyxHQUFHLFNBQVUxRyxHQUNuQyxPQUFPMVUsS0FBS3liLGFBQWFvSSxPQUFPN2pCLEtBQU0wVSxNQUsxQ2lLLEdBQWEsUUFBUyxLQUl0QlcsR0FBZ0IsUUFBUyxHQUl6QjBDLEdBQWMsSUFBS1osSUFDbkJZLEdBQWMsS0FBTVosR0FBV0osSUFDL0JnQixHQUFjLE9BQU8sU0FBVUcsRUFBVXhOLEdBQ3JDLE9BQU9BLEVBQU9tUCxpQkFBaUIzQixNQUVuQ0gsR0FBYyxRQUFRLFNBQVVHLEVBQVV4TixHQUN0QyxPQUFPQSxFQUFPb1AsWUFBWTVCLE1BRzlCUSxHQUFjLENBQUMsSUFBSyxPQUFPLFNBQVUxWCxFQUFPMlEsR0FDeENBLEVBQU1xSCxJQUFTaEQsR0FBTWhWLEdBQVMsS0FHbEMwWCxHQUFjLENBQUMsTUFBTyxTQUFTLFNBQVUxWCxFQUFPMlEsRUFBTzVELEVBQVFxRCxHQUMzRCxJQUFJbUYsRUFBUXhJLEVBQU9GLFFBQVFrTSxZQUFZL1ksRUFBT29RLEVBQU9yRCxFQUFPckIsU0FFL0MsTUFBVDZKLEVBQ0E1RSxFQUFNcUgsSUFBU3pDLEVBRWZ4SyxFQUFnQmdDLEdBQVF6QyxhQUFldEssS0FNL0MsSUFBSWdaLEdBQXNCLHdGQUF3RnRhLE1BQzFHLEtBRUp1YSxHQUEyQixrREFBa0R2YSxNQUN6RSxLQUVKd2EsR0FBbUIsZ0NBQ25CQyxHQUEwQnJDLEdBQzFCc0MsR0FBcUJ0QyxHQUV6QixTQUFTdUMsR0FBYXJPLEVBQUd2QixHQUNyQixPQUFLdUIsRUFLRWhWLEVBQVFqQixLQUFLdWtCLFNBQ2R2a0IsS0FBS3VrQixRQUFRdE8sRUFBRXVLLFNBQ2Z4Z0IsS0FBS3VrQixTQUNBdmtCLEtBQUt1a0IsUUFBUUMsVUFBWUwsSUFBa0JwakIsS0FBSzJULEdBQzNDLFNBQ0EsY0FDUnVCLEVBQUV1SyxTQVZDdmYsRUFBUWpCLEtBQUt1a0IsU0FDZHZrQixLQUFLdWtCLFFBQ0x2a0IsS0FBS3VrQixRQUFvQixXQVd2QyxTQUFTRSxHQUFrQnhPLEVBQUd2QixHQUMxQixPQUFLdUIsRUFLRWhWLEVBQVFqQixLQUFLMGtCLGNBQ2Qxa0IsS0FBSzBrQixhQUFhek8sRUFBRXVLLFNBQ3BCeGdCLEtBQUswa0IsYUFDRFAsR0FBaUJwakIsS0FBSzJULEdBQVUsU0FBVyxjQUM3Q3VCLEVBQUV1SyxTQVJDdmYsRUFBUWpCLEtBQUswa0IsY0FDZDFrQixLQUFLMGtCLGFBQ0wxa0IsS0FBSzBrQixhQUF5QixXQVM1QyxTQUFTQyxHQUFrQkMsRUFBV2xRLEVBQVFFLEdBQzFDLElBQUlwVixFQUNBcWxCLEVBQ0ExSyxFQUNBMkssRUFBTUYsRUFBVUcsb0JBQ3BCLElBQUsva0IsS0FBS2dsQixhQUtOLElBSEFobEIsS0FBS2dsQixhQUFlLEdBQ3BCaGxCLEtBQUtpbEIsaUJBQW1CLEdBQ3hCamxCLEtBQUtrbEIsa0JBQW9CLEdBQ3BCMWxCLEVBQUksRUFBR0EsRUFBSSxLQUFNQSxFQUNsQjJhLEVBQU0xRixFQUFVLENBQUMsSUFBTWpWLElBQ3ZCUSxLQUFLa2xCLGtCQUFrQjFsQixHQUFLUSxLQUFLNGpCLFlBQzdCekosRUFDQSxJQUNGNEssb0JBQ0Yva0IsS0FBS2lsQixpQkFBaUJ6bEIsR0FBS1EsS0FBSzZqQixPQUFPMUosRUFBSyxJQUFJNEssb0JBSXhELE9BQUluUSxFQUNlLFFBQVhGLEdBRWUsS0FEZm1RLEVBQUsvYyxHQUFRaEksS0FBS0UsS0FBS2tsQixrQkFBbUJKLElBQ3ZCRCxFQUFLLE1BR1QsS0FEZkEsRUFBSy9jLEdBQVFoSSxLQUFLRSxLQUFLaWxCLGlCQUFrQkgsSUFDdEJELEVBQUssS0FHYixRQUFYblEsR0FFWSxLQURabVEsRUFBSy9jLEdBQVFoSSxLQUFLRSxLQUFLa2xCLGtCQUFtQkosTUFLM0IsS0FEZkQsRUFBSy9jLEdBQVFoSSxLQUFLRSxLQUFLaWxCLGlCQUFrQkgsSUFGOUJELEVBR2EsTUFHWixLQURaQSxFQUFLL2MsR0FBUWhJLEtBQUtFLEtBQUtpbEIsaUJBQWtCSCxNQUsxQixLQURmRCxFQUFLL2MsR0FBUWhJLEtBQUtFLEtBQUtrbEIsa0JBQW1CSixJQUYvQkQsRUFHYSxLQUtwQyxTQUFTTSxHQUFrQlAsRUFBV2xRLEVBQVFFLEdBQzFDLElBQUlwVixFQUFHMmEsRUFBSzhILEVBRVosR0FBSWppQixLQUFLb2xCLGtCQUNMLE9BQU9ULEdBQWtCN2tCLEtBQUtFLEtBQU00a0IsRUFBV2xRLEVBQVFFLEdBWTNELElBVEs1VSxLQUFLZ2xCLGVBQ05obEIsS0FBS2dsQixhQUFlLEdBQ3BCaGxCLEtBQUtpbEIsaUJBQW1CLEdBQ3hCamxCLEtBQUtrbEIsa0JBQW9CLElBTXhCMWxCLEVBQUksRUFBR0EsRUFBSSxHQUFJQSxJQUFLLENBbUJyQixHQWpCQTJhLEVBQU0xRixFQUFVLENBQUMsSUFBTWpWLElBQ25Cb1YsSUFBVzVVLEtBQUtpbEIsaUJBQWlCemxCLEtBQ2pDUSxLQUFLaWxCLGlCQUFpQnpsQixHQUFLLElBQUlxSyxPQUMzQixJQUFNN0osS0FBSzZqQixPQUFPMUosRUFBSyxJQUFJdlEsUUFBUSxJQUFLLElBQU0sSUFDOUMsS0FFSjVKLEtBQUtrbEIsa0JBQWtCMWxCLEdBQUssSUFBSXFLLE9BQzVCLElBQU03SixLQUFLNGpCLFlBQVl6SixFQUFLLElBQUl2USxRQUFRLElBQUssSUFBTSxJQUNuRCxNQUdIZ0wsR0FBVzVVLEtBQUtnbEIsYUFBYXhsQixLQUM5QnlpQixFQUNJLElBQU1qaUIsS0FBSzZqQixPQUFPMUosRUFBSyxJQUFNLEtBQU9uYSxLQUFLNGpCLFlBQVl6SixFQUFLLElBQzlEbmEsS0FBS2dsQixhQUFheGxCLEdBQUssSUFBSXFLLE9BQU9vWSxFQUFNclksUUFBUSxJQUFLLElBQUssTUFJMURnTCxHQUNXLFNBQVhGLEdBQ0ExVSxLQUFLaWxCLGlCQUFpQnpsQixHQUFHdUIsS0FBSzZqQixHQUU5QixPQUFPcGxCLEVBQ0osR0FDSG9WLEdBQ1csUUFBWEYsR0FDQTFVLEtBQUtrbEIsa0JBQWtCMWxCLEdBQUd1QixLQUFLNmpCLEdBRS9CLE9BQU9wbEIsRUFDSixJQUFLb1YsR0FBVTVVLEtBQUtnbEIsYUFBYXhsQixHQUFHdUIsS0FBSzZqQixHQUM1QyxPQUFPcGxCLEdBT25CLFNBQVM2bEIsR0FBU2xMLEVBQUt0WCxHQUNuQixJQUFJeWlCLEVBRUosSUFBS25MLEVBQUloRSxVQUVMLE9BQU9nRSxFQUdYLEdBQXFCLGlCQUFWdFgsRUFDUCxHQUFJLFFBQVE5QixLQUFLOEIsR0FDYkEsRUFBUW9kLEdBQU1wZCxRQUlkLElBQUtzUixFQUZMdFIsRUFBUXNYLEVBQUlzQixhQUFhdUksWUFBWW5oQixJQUdqQyxPQUFPc1gsRUFPbkIsT0FGQW1MLEVBQWF4ZixLQUFLeWYsSUFBSXBMLEVBQUlzRyxPQUFRQyxHQUFZdkcsRUFBSTBGLE9BQVFoZCxJQUMxRHNYLEVBQUkxVyxHQUFHLE9BQVMwVyxFQUFJdkMsT0FBUyxNQUFRLElBQU0sU0FBUy9VLEVBQU95aUIsR0FDcERuTCxFQUdYLFNBQVNxTCxHQUFZM2lCLEdBQ2pCLE9BQWEsTUFBVEEsR0FDQXdpQixHQUFTcmxCLEtBQU02QyxHQUNmNlEsRUFBTXVFLGFBQWFqWSxNQUFNLEdBQ2xCQSxNQUVBdUwsR0FBSXZMLEtBQU0sU0FJekIsU0FBU3lsQixLQUNMLE9BQU8vRSxHQUFZMWdCLEtBQUs2ZixPQUFRN2YsS0FBS3dnQixTQUd6QyxTQUFTc0QsR0FBaUIzQixHQUN0QixPQUFJbmlCLEtBQUtvbEIsbUJBQ0F2UixFQUFXN1QsS0FBTSxpQkFDbEIwbEIsR0FBbUI1bEIsS0FBS0UsTUFFeEJtaUIsRUFDT25pQixLQUFLMmxCLHdCQUVMM2xCLEtBQUs0bEIsb0JBR1gvUixFQUFXN1QsS0FBTSx1QkFDbEJBLEtBQUs0bEIsa0JBQW9CeEIsSUFFdEJwa0IsS0FBSzJsQix5QkFBMkJ4RCxFQUNqQ25pQixLQUFLMmxCLHdCQUNMM2xCLEtBQUs0bEIsbUJBSW5CLFNBQVM3QixHQUFZNUIsR0FDakIsT0FBSW5pQixLQUFLb2xCLG1CQUNBdlIsRUFBVzdULEtBQU0saUJBQ2xCMGxCLEdBQW1CNWxCLEtBQUtFLE1BRXhCbWlCLEVBQ09uaUIsS0FBSzZsQixtQkFFTDdsQixLQUFLOGxCLGVBR1hqUyxFQUFXN1QsS0FBTSxrQkFDbEJBLEtBQUs4bEIsYUFBZXpCLElBRWpCcmtCLEtBQUs2bEIsb0JBQXNCMUQsRUFDNUJuaUIsS0FBSzZsQixtQkFDTDdsQixLQUFLOGxCLGNBSW5CLFNBQVNKLEtBQ0wsU0FBU0ssRUFBVWpTLEVBQUdDLEdBQ2xCLE9BQU9BLEVBQUVyVSxPQUFTb1UsRUFBRXBVLE9BR3hCLElBR0lGLEVBQ0EyYSxFQUpBNkwsRUFBYyxHQUNkQyxFQUFhLEdBQ2JDLEVBQWMsR0FHbEIsSUFBSzFtQixFQUFJLEVBQUdBLEVBQUksR0FBSUEsSUFFaEIyYSxFQUFNMUYsRUFBVSxDQUFDLElBQU1qVixJQUN2QndtQixFQUFZaGlCLEtBQUtoRSxLQUFLNGpCLFlBQVl6SixFQUFLLEtBQ3ZDOEwsRUFBV2ppQixLQUFLaEUsS0FBSzZqQixPQUFPMUosRUFBSyxLQUNqQytMLEVBQVlsaUIsS0FBS2hFLEtBQUs2akIsT0FBTzFKLEVBQUssS0FDbEMrTCxFQUFZbGlCLEtBQUtoRSxLQUFLNGpCLFlBQVl6SixFQUFLLEtBTzNDLElBSEE2TCxFQUFZckcsS0FBS29HLEdBQ2pCRSxFQUFXdEcsS0FBS29HLEdBQ2hCRyxFQUFZdkcsS0FBS29HLEdBQ1p2bUIsRUFBSSxFQUFHQSxFQUFJLEdBQUlBLElBQ2hCd21CLEVBQVl4bUIsR0FBSzhpQixHQUFZMEQsRUFBWXhtQixJQUN6Q3ltQixFQUFXem1CLEdBQUs4aUIsR0FBWTJELEVBQVd6bUIsSUFFM0MsSUFBS0EsRUFBSSxFQUFHQSxFQUFJLEdBQUlBLElBQ2hCMG1CLEVBQVkxbUIsR0FBSzhpQixHQUFZNEQsRUFBWTFtQixJQUc3Q1EsS0FBSzhsQixhQUFlLElBQUlqYyxPQUFPLEtBQU9xYyxFQUFZemEsS0FBSyxLQUFPLElBQUssS0FDbkV6TCxLQUFLNGxCLGtCQUFvQjVsQixLQUFLOGxCLGFBQzlCOWxCLEtBQUs2bEIsbUJBQXFCLElBQUloYyxPQUMxQixLQUFPb2MsRUFBV3hhLEtBQUssS0FBTyxJQUM5QixLQUVKekwsS0FBSzJsQix3QkFBMEIsSUFBSTliLE9BQy9CLEtBQU9tYyxFQUFZdmEsS0FBSyxLQUFPLElBQy9CLEtBaURSLFNBQVMwYSxHQUFXdEcsR0FDaEIsT0FBT0QsR0FBV0MsR0FBUSxJQUFNLElBNUNwQ3pFLEVBQWUsSUFBSyxFQUFHLEdBQUcsV0FDdEIsSUFBSTZDLEVBQUlqZSxLQUFLNmYsT0FDYixPQUFPNUIsR0FBSyxLQUFPMUQsRUFBUzBELEVBQUcsR0FBSyxJQUFNQSxLQUc5QzdDLEVBQWUsRUFBRyxDQUFDLEtBQU0sR0FBSSxHQUFHLFdBQzVCLE9BQU9wYixLQUFLNmYsT0FBUyxPQUd6QnpFLEVBQWUsRUFBRyxDQUFDLE9BQVEsR0FBSSxFQUFHLFFBQ2xDQSxFQUFlLEVBQUcsQ0FBQyxRQUFTLEdBQUksRUFBRyxRQUNuQ0EsRUFBZSxFQUFHLENBQUMsU0FBVSxHQUFHLEdBQU8sRUFBRyxRQUkxQ3VELEdBQWEsT0FBUSxLQUlyQlcsR0FBZ0IsT0FBUSxHQUl4QjBDLEdBQWMsSUFBS0wsSUFDbkJLLEdBQWMsS0FBTVosR0FBV0osSUFDL0JnQixHQUFjLE9BQVFSLEdBQVdOLElBQ2pDYyxHQUFjLFFBQVNQLEdBQVdOLElBQ2xDYSxHQUFjLFNBQVVQLEdBQVdOLElBRW5Dd0IsR0FBYyxDQUFDLFFBQVMsVUFBV0ssSUFDbkNMLEdBQWMsUUFBUSxTQUFVMVgsRUFBTzJRLEdBQ25DQSxFQUFNb0gsSUFDZSxJQUFqQi9YLEVBQU12TCxPQUFlZ1UsRUFBTTBTLGtCQUFrQm5iLEdBQVNnVixHQUFNaFYsTUFFcEUwWCxHQUFjLE1BQU0sU0FBVTFYLEVBQU8yUSxHQUNqQ0EsRUFBTW9ILElBQVF0UCxFQUFNMFMsa0JBQWtCbmIsTUFFMUMwWCxHQUFjLEtBQUssU0FBVTFYLEVBQU8yUSxHQUNoQ0EsRUFBTW9ILElBQVFxRCxTQUFTcGIsRUFBTyxPQVdsQ3lJLEVBQU0wUyxrQkFBb0IsU0FBVW5iLEdBQ2hDLE9BQU9nVixHQUFNaFYsSUFBVWdWLEdBQU1oVixHQUFTLEdBQUssS0FBTyxNQUt0RCxJQUFJcWIsR0FBYWpHLEdBQVcsWUFBWSxHQUV4QyxTQUFTa0csS0FDTCxPQUFPM0csR0FBVzVmLEtBQUs2ZixRQUczQixTQUFTMkcsR0FBV3ZJLEVBQUdoSSxFQUFHMEgsRUFBR0YsRUFBR00sRUFBR1QsRUFBR21KLEdBR2xDLElBQUloRyxFQVlKLE9BVkl4QyxFQUFJLEtBQU9BLEdBQUssR0FFaEJ3QyxFQUFPLElBQUlwTSxLQUFLNEosRUFBSSxJQUFLaEksRUFBRzBILEVBQUdGLEVBQUdNLEVBQUdULEVBQUdtSixHQUNwQ3JHLFNBQVNLLEVBQUtpRyxnQkFDZGpHLEVBQUtrRyxZQUFZMUksSUFHckJ3QyxFQUFPLElBQUlwTSxLQUFLNEosRUFBR2hJLEVBQUcwSCxFQUFHRixFQUFHTSxFQUFHVCxFQUFHbUosR0FHL0JoRyxFQUdYLFNBQVNtRyxHQUFjM0ksR0FDbkIsSUFBSXdDLEVBQU05SCxFQWNWLE9BWklzRixFQUFJLEtBQU9BLEdBQUssSUFDaEJ0RixFQUFPdFksTUFBTWxCLFVBQVV5QixNQUFNZCxLQUFLTCxZQUU3QixHQUFLd2UsRUFBSSxJQUNkd0MsRUFBTyxJQUFJcE0sS0FBS0EsS0FBS3dTLElBQUk5bUIsTUFBTSxLQUFNNFksSUFDakN5SCxTQUFTSyxFQUFLcUcsbUJBQ2RyRyxFQUFLc0csZUFBZTlJLElBR3hCd0MsRUFBTyxJQUFJcE0sS0FBS0EsS0FBS3dTLElBQUk5bUIsTUFBTSxLQUFNTixZQUdsQ2doQixFQUlYLFNBQVN1RyxHQUFnQm5ILEVBQU1vSCxFQUFLQyxHQUNoQyxJQUNJQyxFQUFNLEVBQUlGLEVBQU1DLEVBSXBCLFFBRmEsRUFBSU4sR0FBYy9HLEVBQU0sRUFBR3NILEdBQUtDLFlBQWNILEdBQU8sRUFFbERFLEVBQU0sRUFJMUIsU0FBU0UsR0FBbUJ4SCxFQUFNeUgsRUFBTUMsRUFBU04sRUFBS0MsR0FDbEQsSUFHSU0sRUFDQUMsRUFGQUMsRUFBWSxFQUFJLEdBQUtKLEVBQU8sSUFGWixFQUFJQyxFQUFVTixHQUFPLEVBQ3hCRCxHQUFnQm5ILEVBQU1vSCxFQUFLQyxHQWdCNUMsT0FYSVEsR0FBYSxFQUViRCxFQUFldEIsR0FEZnFCLEVBQVUzSCxFQUFPLEdBQ29CNkgsRUFDOUJBLEVBQVl2QixHQUFXdEcsSUFDOUIySCxFQUFVM0gsRUFBTyxFQUNqQjRILEVBQWVDLEVBQVl2QixHQUFXdEcsS0FFdEMySCxFQUFVM0gsRUFDVjRILEVBQWVDLEdBR1osQ0FDSDdILEtBQU0ySCxFQUNORSxVQUFXRCxHQUluQixTQUFTRSxHQUFXeE4sRUFBSzhNLEVBQUtDLEdBQzFCLElBRUlVLEVBQ0FKLEVBSEFLLEVBQWFiLEdBQWdCN00sRUFBSTBGLE9BQVFvSCxFQUFLQyxHQUM5Q0ksRUFBT3hoQixLQUFLa2EsT0FBTzdGLEVBQUl1TixZQUFjRyxFQUFhLEdBQUssR0FBSyxFQWVoRSxPQVhJUCxFQUFPLEVBRVBNLEVBQVVOLEVBQU9RLEdBRGpCTixFQUFVck4sRUFBSTBGLE9BQVMsRUFDZW9ILEVBQUtDLEdBQ3BDSSxFQUFPUSxHQUFZM04sRUFBSTBGLE9BQVFvSCxFQUFLQyxJQUMzQ1UsRUFBVU4sRUFBT1EsR0FBWTNOLEVBQUkwRixPQUFRb0gsRUFBS0MsR0FDOUNNLEVBQVVyTixFQUFJMEYsT0FBUyxJQUV2QjJILEVBQVVyTixFQUFJMEYsT0FDZCtILEVBQVVOLEdBR1AsQ0FDSEEsS0FBTU0sRUFDTi9ILEtBQU0ySCxHQUlkLFNBQVNNLEdBQVlqSSxFQUFNb0gsRUFBS0MsR0FDNUIsSUFBSVcsRUFBYWIsR0FBZ0JuSCxFQUFNb0gsRUFBS0MsR0FDeENhLEVBQWlCZixHQUFnQm5ILEVBQU8sRUFBR29ILEVBQUtDLEdBQ3BELE9BQVFmLEdBQVd0RyxHQUFRZ0ksRUFBYUUsR0FBa0IsRUFzQzlELFNBQVNDLEdBQVc3TixHQUNoQixPQUFPd04sR0FBV3hOLEVBQUtuYSxLQUFLaW9CLE1BQU1oQixJQUFLam5CLEtBQUtpb0IsTUFBTWYsS0FBS0ksS0FsQzNEbE0sRUFBZSxJQUFLLENBQUMsS0FBTSxHQUFJLEtBQU0sUUFDckNBLEVBQWUsSUFBSyxDQUFDLEtBQU0sR0FBSSxLQUFNLFdBSXJDdUQsR0FBYSxPQUFRLEtBQ3JCQSxHQUFhLFVBQVcsS0FJeEJXLEdBQWdCLE9BQVEsR0FDeEJBLEdBQWdCLFVBQVcsR0FJM0IwQyxHQUFjLElBQUtaLElBQ25CWSxHQUFjLEtBQU1aLEdBQVdKLElBQy9CZ0IsR0FBYyxJQUFLWixJQUNuQlksR0FBYyxLQUFNWixHQUFXSixJQUUvQjRCLEdBQWtCLENBQUMsSUFBSyxLQUFNLElBQUssT0FBTyxTQUN0QzNYLEVBQ0FxYyxFQUNBdFAsRUFDQXFELEdBRUFpTSxFQUFLak0sRUFBTU4sT0FBTyxFQUFHLElBQU1rRixHQUFNaFYsTUFXckMsSUFBSWlkLEdBQW9CLENBQ3BCakIsSUFBSyxFQUNMQyxJQUFLLEdBR1QsU0FBU2lCLEtBQ0wsT0FBT25vQixLQUFLaW9CLE1BQU1oQixJQUd0QixTQUFTbUIsS0FDTCxPQUFPcG9CLEtBQUtpb0IsTUFBTWYsSUFLdEIsU0FBU21CLEdBQVdwZCxHQUNoQixJQUFJcWMsRUFBT3RuQixLQUFLeWIsYUFBYTZMLEtBQUt0bkIsTUFDbEMsT0FBZ0IsTUFBVGlMLEVBQWdCcWMsRUFBT3RuQixLQUFLc29CLElBQXFCLEdBQWhCcmQsRUFBUXFjLEdBQVcsS0FHL0QsU0FBU2lCLEdBQWN0ZCxHQUNuQixJQUFJcWMsRUFBT0ssR0FBVzNuQixLQUFNLEVBQUcsR0FBR3NuQixLQUNsQyxPQUFnQixNQUFUcmMsRUFBZ0JxYyxFQUFPdG5CLEtBQUtzb0IsSUFBcUIsR0FBaEJyZCxFQUFRcWMsR0FBVyxLQWdFL0QsU0FBU2tCLEdBQWF2ZCxFQUFPMEosR0FDekIsTUFBcUIsaUJBQVYxSixFQUNBQSxFQUdOdUwsTUFBTXZMLEdBS1UsaUJBRHJCQSxFQUFRMEosRUFBTzhULGNBQWN4ZCxJQUVsQkEsRUFHSixLQVJJb2IsU0FBU3BiLEVBQU8sSUFXL0IsU0FBU3lkLEdBQWdCemQsRUFBTzBKLEdBQzVCLE1BQXFCLGlCQUFWMUosRUFDQTBKLEVBQU84VCxjQUFjeGQsR0FBUyxHQUFLLEVBRXZDdUwsTUFBTXZMLEdBQVMsS0FBT0EsRUFJakMsU0FBUzBkLEdBQWNDLEVBQUlsb0IsR0FDdkIsT0FBT2tvQixFQUFHaG9CLE1BQU1GLEVBQUcsR0FBR2dMLE9BQU9rZCxFQUFHaG9CLE1BQU0sRUFBR0YsSUFyRjdDMGEsRUFBZSxJQUFLLEVBQUcsS0FBTSxPQUU3QkEsRUFBZSxLQUFNLEVBQUcsR0FBRyxTQUFVMUcsR0FDakMsT0FBTzFVLEtBQUt5YixhQUFhb04sWUFBWTdvQixLQUFNMFUsTUFHL0MwRyxFQUFlLE1BQU8sRUFBRyxHQUFHLFNBQVUxRyxHQUNsQyxPQUFPMVUsS0FBS3liLGFBQWFxTixjQUFjOW9CLEtBQU0wVSxNQUdqRDBHLEVBQWUsT0FBUSxFQUFHLEdBQUcsU0FBVTFHLEdBQ25DLE9BQU8xVSxLQUFLeWIsYUFBYXNOLFNBQVMvb0IsS0FBTTBVLE1BRzVDMEcsRUFBZSxJQUFLLEVBQUcsRUFBRyxXQUMxQkEsRUFBZSxJQUFLLEVBQUcsRUFBRyxjQUkxQnVELEdBQWEsTUFBTyxLQUNwQkEsR0FBYSxVQUFXLEtBQ3hCQSxHQUFhLGFBQWMsS0FHM0JXLEdBQWdCLE1BQU8sSUFDdkJBLEdBQWdCLFVBQVcsSUFDM0JBLEdBQWdCLGFBQWMsSUFJOUIwQyxHQUFjLElBQUtaLElBQ25CWSxHQUFjLElBQUtaLElBQ25CWSxHQUFjLElBQUtaLElBQ25CWSxHQUFjLE1BQU0sU0FBVUcsRUFBVXhOLEdBQ3BDLE9BQU9BLEVBQU9xVSxpQkFBaUI3RyxNQUVuQ0gsR0FBYyxPQUFPLFNBQVVHLEVBQVV4TixHQUNyQyxPQUFPQSxFQUFPc1UsbUJBQW1COUcsTUFFckNILEdBQWMsUUFBUSxTQUFVRyxFQUFVeE4sR0FDdEMsT0FBT0EsRUFBT3VVLGNBQWMvRyxNQUdoQ1MsR0FBa0IsQ0FBQyxLQUFNLE1BQU8sU0FBUyxTQUFVM1gsRUFBT3FjLEVBQU10UCxFQUFRcUQsR0FDcEUsSUFBSWtNLEVBQVV2UCxFQUFPRixRQUFRMlEsY0FBY3hkLEVBQU9vUSxFQUFPckQsRUFBT3JCLFNBRWpELE1BQVg0USxFQUNBRCxFQUFLM0osRUFBSTRKLEVBRVR2UixFQUFnQmdDLEdBQVF0QixlQUFpQnpMLEtBSWpEMlgsR0FBa0IsQ0FBQyxJQUFLLElBQUssTUFBTSxTQUFVM1gsRUFBT3FjLEVBQU10UCxFQUFRcUQsR0FDOURpTSxFQUFLak0sR0FBUzRFLEdBQU1oVixNQWtDeEIsSUFBSWtlLEdBQXdCLDJEQUEyRHhmLE1BQy9FLEtBRUp5ZixHQUE2Qiw4QkFBOEJ6ZixNQUFNLEtBQ2pFMGYsR0FBMkIsdUJBQXVCMWYsTUFBTSxLQUN4RDJmLEdBQXVCdkgsR0FDdkJ3SCxHQUE0QnhILEdBQzVCeUgsR0FBMEJ6SCxHQUU5QixTQUFTMEgsR0FBZXhULEVBQUd2QixHQUN2QixJQUFJcVUsRUFBVzluQixFQUFRakIsS0FBSzBwQixXQUN0QjFwQixLQUFLMHBCLFVBQ0wxcEIsS0FBSzBwQixVQUNEelQsSUFBVyxJQUFOQSxHQUFjalcsS0FBSzBwQixVQUFVbEYsU0FBU3pqQixLQUFLMlQsR0FDMUMsU0FDQSxjQUVoQixPQUFhLElBQU51QixFQUNEMFMsR0FBY0ksRUFBVS9vQixLQUFLaW9CLE1BQU1oQixLQUNuQ2hSLEVBQ0E4UyxFQUFTOVMsRUFBRTBULE9BQ1haLEVBR1YsU0FBU2EsR0FBb0IzVCxHQUN6QixPQUFhLElBQU5BLEVBQ0QwUyxHQUFjM29CLEtBQUs2cEIsZUFBZ0I3cEIsS0FBS2lvQixNQUFNaEIsS0FDOUNoUixFQUNBalcsS0FBSzZwQixlQUFlNVQsRUFBRTBULE9BQ3RCM3BCLEtBQUs2cEIsZUFHZixTQUFTQyxHQUFrQjdULEdBQ3ZCLE9BQWEsSUFBTkEsRUFDRDBTLEdBQWMzb0IsS0FBSytwQixhQUFjL3BCLEtBQUtpb0IsTUFBTWhCLEtBQzVDaFIsRUFDQWpXLEtBQUsrcEIsYUFBYTlULEVBQUUwVCxPQUNwQjNwQixLQUFLK3BCLGFBR2YsU0FBU0MsR0FBb0JDLEVBQWF2VixFQUFRRSxHQUM5QyxJQUFJcFYsRUFDQXFsQixFQUNBMUssRUFDQTJLLEVBQU1tRixFQUFZbEYsb0JBQ3RCLElBQUsva0IsS0FBS2txQixlQUtOLElBSkFscUIsS0FBS2txQixlQUFpQixHQUN0QmxxQixLQUFLbXFCLG9CQUFzQixHQUMzQm5xQixLQUFLb3FCLGtCQUFvQixHQUVwQjVxQixFQUFJLEVBQUdBLEVBQUksSUFBS0EsRUFDakIyYSxFQUFNMUYsRUFBVSxDQUFDLElBQU0sSUFBSWtWLElBQUlucUIsR0FDL0JRLEtBQUtvcUIsa0JBQWtCNXFCLEdBQUtRLEtBQUs2b0IsWUFDN0IxTyxFQUNBLElBQ0Y0SyxvQkFDRi9rQixLQUFLbXFCLG9CQUFvQjNxQixHQUFLUSxLQUFLOG9CLGNBQy9CM08sRUFDQSxJQUNGNEssb0JBQ0Yva0IsS0FBS2txQixlQUFlMXFCLEdBQUtRLEtBQUsrb0IsU0FBUzVPLEVBQUssSUFBSTRLLG9CQUl4RCxPQUFJblEsRUFDZSxTQUFYRixHQUVlLEtBRGZtUSxFQUFLL2MsR0FBUWhJLEtBQUtFLEtBQUtrcUIsZUFBZ0JwRixJQUNwQkQsRUFBSyxLQUNOLFFBQVhuUSxHQUVRLEtBRGZtUSxFQUFLL2MsR0FBUWhJLEtBQUtFLEtBQUttcUIsb0JBQXFCckYsSUFDekJELEVBQUssTUFHVCxLQURmQSxFQUFLL2MsR0FBUWhJLEtBQUtFLEtBQUtvcUIsa0JBQW1CdEYsSUFDdkJELEVBQUssS0FHYixTQUFYblEsR0FFWSxLQURabVEsRUFBSy9jLEdBQVFoSSxLQUFLRSxLQUFLa3FCLGVBQWdCcEYsTUFLM0IsS0FEWkQsRUFBSy9jLEdBQVFoSSxLQUFLRSxLQUFLbXFCLG9CQUFxQnJGLE1BSzdCLEtBRGZELEVBQUsvYyxHQUFRaEksS0FBS0UsS0FBS29xQixrQkFBbUJ0RixJQU4vQkQsRUFPYSxLQUNOLFFBQVhuUSxHQUVLLEtBRFptUSxFQUFLL2MsR0FBUWhJLEtBQUtFLEtBQUttcUIsb0JBQXFCckYsTUFLaEMsS0FEWkQsRUFBSy9jLEdBQVFoSSxLQUFLRSxLQUFLa3FCLGVBQWdCcEYsTUFLeEIsS0FEZkQsRUFBSy9jLEdBQVFoSSxLQUFLRSxLQUFLb3FCLGtCQUFtQnRGLElBTi9CRCxFQU9hLE1BR1osS0FEWkEsRUFBSy9jLEdBQVFoSSxLQUFLRSxLQUFLb3FCLGtCQUFtQnRGLE1BSzlCLEtBRFpELEVBQUsvYyxHQUFRaEksS0FBS0UsS0FBS2txQixlQUFnQnBGLE1BS3hCLEtBRGZELEVBQUsvYyxHQUFRaEksS0FBS0UsS0FBS21xQixvQkFBcUJyRixJQU5qQ0QsRUFPYSxLQUtwQyxTQUFTd0YsR0FBb0JKLEVBQWF2VixFQUFRRSxHQUM5QyxJQUFJcFYsRUFBRzJhLEVBQUs4SCxFQUVaLEdBQUlqaUIsS0FBS3NxQixvQkFDTCxPQUFPTixHQUFvQmxxQixLQUFLRSxLQUFNaXFCLEVBQWF2VixFQUFRRSxHQVUvRCxJQVBLNVUsS0FBS2txQixpQkFDTmxxQixLQUFLa3FCLGVBQWlCLEdBQ3RCbHFCLEtBQUtvcUIsa0JBQW9CLEdBQ3pCcHFCLEtBQUttcUIsb0JBQXNCLEdBQzNCbnFCLEtBQUt1cUIsbUJBQXFCLElBR3pCL3FCLEVBQUksRUFBR0EsRUFBSSxFQUFHQSxJQUFLLENBNkJwQixHQTFCQTJhLEVBQU0xRixFQUFVLENBQUMsSUFBTSxJQUFJa1YsSUFBSW5xQixHQUMzQm9WLElBQVc1VSxLQUFLdXFCLG1CQUFtQi9xQixLQUNuQ1EsS0FBS3VxQixtQkFBbUIvcUIsR0FBSyxJQUFJcUssT0FDN0IsSUFBTTdKLEtBQUsrb0IsU0FBUzVPLEVBQUssSUFBSXZRLFFBQVEsSUFBSyxRQUFVLElBQ3BELEtBRUo1SixLQUFLbXFCLG9CQUFvQjNxQixHQUFLLElBQUlxSyxPQUM5QixJQUFNN0osS0FBSzhvQixjQUFjM08sRUFBSyxJQUFJdlEsUUFBUSxJQUFLLFFBQVUsSUFDekQsS0FFSjVKLEtBQUtvcUIsa0JBQWtCNXFCLEdBQUssSUFBSXFLLE9BQzVCLElBQU03SixLQUFLNm9CLFlBQVkxTyxFQUFLLElBQUl2USxRQUFRLElBQUssUUFBVSxJQUN2RCxNQUdINUosS0FBS2txQixlQUFlMXFCLEtBQ3JCeWlCLEVBQ0ksSUFDQWppQixLQUFLK29CLFNBQVM1TyxFQUFLLElBQ25CLEtBQ0FuYSxLQUFLOG9CLGNBQWMzTyxFQUFLLElBQ3hCLEtBQ0FuYSxLQUFLNm9CLFlBQVkxTyxFQUFLLElBQzFCbmEsS0FBS2txQixlQUFlMXFCLEdBQUssSUFBSXFLLE9BQU9vWSxFQUFNclksUUFBUSxJQUFLLElBQUssTUFJNURnTCxHQUNXLFNBQVhGLEdBQ0ExVSxLQUFLdXFCLG1CQUFtQi9xQixHQUFHdUIsS0FBS2twQixHQUVoQyxPQUFPenFCLEVBQ0osR0FDSG9WLEdBQ1csUUFBWEYsR0FDQTFVLEtBQUttcUIsb0JBQW9CM3FCLEdBQUd1QixLQUFLa3BCLEdBRWpDLE9BQU96cUIsRUFDSixHQUNIb1YsR0FDVyxPQUFYRixHQUNBMVUsS0FBS29xQixrQkFBa0I1cUIsR0FBR3VCLEtBQUtrcEIsR0FFL0IsT0FBT3pxQixFQUNKLElBQUtvVixHQUFVNVUsS0FBS2txQixlQUFlMXFCLEdBQUd1QixLQUFLa3BCLEdBQzlDLE9BQU96cUIsR0FPbkIsU0FBU2dyQixHQUFnQnZmLEdBQ3JCLElBQUtqTCxLQUFLbVcsVUFDTixPQUFnQixNQUFUbEwsRUFBZ0JqTCxLQUFPK1csSUFFbEMsSUFBSTRTLEVBQU0zcEIsS0FBSzRYLE9BQVM1WCxLQUFLeUQsR0FBRzJqQixZQUFjcG5CLEtBQUt5RCxHQUFHZ25CLFNBQ3RELE9BQWEsTUFBVHhmLEdBQ0FBLEVBQVF1ZCxHQUFhdmQsRUFBT2pMLEtBQUt5YixjQUMxQnpiLEtBQUtzb0IsSUFBSXJkLEVBQVEwZSxFQUFLLE1BRXRCQSxFQUlmLFNBQVNlLEdBQXNCemYsR0FDM0IsSUFBS2pMLEtBQUttVyxVQUNOLE9BQWdCLE1BQVRsTCxFQUFnQmpMLEtBQU8rVyxJQUVsQyxJQUFJd1EsR0FBV3ZuQixLQUFLMnBCLE1BQVEsRUFBSTNwQixLQUFLeWIsYUFBYXdNLE1BQU1oQixLQUFPLEVBQy9ELE9BQWdCLE1BQVRoYyxFQUFnQnNjLEVBQVV2bkIsS0FBS3NvQixJQUFJcmQsRUFBUXNjLEVBQVMsS0FHL0QsU0FBU29ELEdBQW1CMWYsR0FDeEIsSUFBS2pMLEtBQUttVyxVQUNOLE9BQWdCLE1BQVRsTCxFQUFnQmpMLEtBQU8rVyxJQU9sQyxHQUFhLE1BQVQ5TCxFQUFlLENBQ2YsSUFBSXNjLEVBQVVtQixHQUFnQnpkLEVBQU9qTCxLQUFLeWIsY0FDMUMsT0FBT3piLEtBQUsycEIsSUFBSTNwQixLQUFLMnBCLE1BQVEsRUFBSXBDLEVBQVVBLEVBQVUsR0FFckQsT0FBT3ZuQixLQUFLMnBCLE9BQVMsRUFJN0IsU0FBU1QsR0FBYy9HLEdBQ25CLE9BQUluaUIsS0FBS3NxQixxQkFDQXpXLEVBQVc3VCxLQUFNLG1CQUNsQjRxQixHQUFxQjlxQixLQUFLRSxNQUUxQm1pQixFQUNPbmlCLEtBQUs2cUIscUJBRUw3cUIsS0FBSzhxQixpQkFHWGpYLEVBQVc3VCxLQUFNLG9CQUNsQkEsS0FBSzhxQixlQUFpQnhCLElBRW5CdHBCLEtBQUs2cUIsc0JBQXdCMUksRUFDOUJuaUIsS0FBSzZxQixxQkFDTDdxQixLQUFLOHFCLGdCQUluQixTQUFTN0IsR0FBbUI5RyxHQUN4QixPQUFJbmlCLEtBQUtzcUIscUJBQ0F6VyxFQUFXN1QsS0FBTSxtQkFDbEI0cUIsR0FBcUI5cUIsS0FBS0UsTUFFMUJtaUIsRUFDT25pQixLQUFLK3FCLDBCQUVML3FCLEtBQUtnckIsc0JBR1huWCxFQUFXN1QsS0FBTSx5QkFDbEJBLEtBQUtnckIsb0JBQXNCekIsSUFFeEJ2cEIsS0FBSytxQiwyQkFBNkI1SSxFQUNuQ25pQixLQUFLK3FCLDBCQUNML3FCLEtBQUtnckIscUJBSW5CLFNBQVNoQyxHQUFpQjdHLEdBQ3RCLE9BQUluaUIsS0FBS3NxQixxQkFDQXpXLEVBQVc3VCxLQUFNLG1CQUNsQjRxQixHQUFxQjlxQixLQUFLRSxNQUUxQm1pQixFQUNPbmlCLEtBQUtpckIsd0JBRUxqckIsS0FBS2tyQixvQkFHWHJYLEVBQVc3VCxLQUFNLHVCQUNsQkEsS0FBS2tyQixrQkFBb0IxQixJQUV0QnhwQixLQUFLaXJCLHlCQUEyQjlJLEVBQ2pDbmlCLEtBQUtpckIsd0JBQ0xqckIsS0FBS2tyQixtQkFJbkIsU0FBU04sS0FDTCxTQUFTN0UsRUFBVWpTLEVBQUdDLEdBQ2xCLE9BQU9BLEVBQUVyVSxPQUFTb1UsRUFBRXBVLE9BR3hCLElBSUlGLEVBQ0EyYSxFQUNBZ1IsRUFDQUMsRUFDQUMsRUFSQUMsRUFBWSxHQUNadEYsRUFBYyxHQUNkQyxFQUFhLEdBQ2JDLEVBQWMsR0FNbEIsSUFBSzFtQixFQUFJLEVBQUdBLEVBQUksRUFBR0EsSUFFZjJhLEVBQU0xRixFQUFVLENBQUMsSUFBTSxJQUFJa1YsSUFBSW5xQixHQUMvQjJyQixFQUFPN0ksR0FBWXRpQixLQUFLNm9CLFlBQVkxTyxFQUFLLEtBQ3pDaVIsRUFBUzlJLEdBQVl0aUIsS0FBSzhvQixjQUFjM08sRUFBSyxLQUM3Q2tSLEVBQVEvSSxHQUFZdGlCLEtBQUsrb0IsU0FBUzVPLEVBQUssS0FDdkNtUixFQUFVdG5CLEtBQUttbkIsR0FDZm5GLEVBQVloaUIsS0FBS29uQixHQUNqQm5GLEVBQVdqaUIsS0FBS3FuQixHQUNoQm5GLEVBQVlsaUIsS0FBS21uQixHQUNqQmpGLEVBQVlsaUIsS0FBS29uQixHQUNqQmxGLEVBQVlsaUIsS0FBS3FuQixHQUlyQkMsRUFBVTNMLEtBQUtvRyxHQUNmQyxFQUFZckcsS0FBS29HLEdBQ2pCRSxFQUFXdEcsS0FBS29HLEdBQ2hCRyxFQUFZdkcsS0FBS29HLEdBRWpCL2xCLEtBQUs4cUIsZUFBaUIsSUFBSWpoQixPQUFPLEtBQU9xYyxFQUFZemEsS0FBSyxLQUFPLElBQUssS0FDckV6TCxLQUFLZ3JCLG9CQUFzQmhyQixLQUFLOHFCLGVBQ2hDOXFCLEtBQUtrckIsa0JBQW9CbHJCLEtBQUs4cUIsZUFFOUI5cUIsS0FBSzZxQixxQkFBdUIsSUFBSWhoQixPQUM1QixLQUFPb2MsRUFBV3hhLEtBQUssS0FBTyxJQUM5QixLQUVKekwsS0FBSytxQiwwQkFBNEIsSUFBSWxoQixPQUNqQyxLQUFPbWMsRUFBWXZhLEtBQUssS0FBTyxJQUMvQixLQUVKekwsS0FBS2lyQix3QkFBMEIsSUFBSXBoQixPQUMvQixLQUFPeWhCLEVBQVU3ZixLQUFLLEtBQU8sSUFDN0IsS0FNUixTQUFTOGYsS0FDTCxPQUFPdnJCLEtBQUt3ckIsUUFBVSxJQUFNLEdBR2hDLFNBQVNDLEtBQ0wsT0FBT3pyQixLQUFLd3JCLFNBQVcsR0FpQzNCLFNBQVMzVixHQUFTd0YsRUFBT3FRLEdBQ3JCdFEsRUFBZUMsRUFBTyxFQUFHLEdBQUcsV0FDeEIsT0FBT3JiLEtBQUt5YixhQUFhNUYsU0FDckI3VixLQUFLd3JCLFFBQ0x4ckIsS0FBSzJyQixVQUNMRCxNQWlCWixTQUFTRSxHQUFjekosRUFBVXhOLEdBQzdCLE9BQU9BLEVBQU9rWCxlQTJEbEIsU0FBU0MsR0FBVzdnQixHQUdoQixNQUFnRCxPQUF4Q0EsRUFBUSxJQUFJNUUsY0FBYzBsQixPQUFPLEdBbkg3QzNRLEVBQWUsSUFBSyxDQUFDLEtBQU0sR0FBSSxFQUFHLFFBQ2xDQSxFQUFlLElBQUssQ0FBQyxLQUFNLEdBQUksRUFBR21RLElBQ2xDblEsRUFBZSxJQUFLLENBQUMsS0FBTSxHQUFJLEVBQUdxUSxJQUVsQ3JRLEVBQWUsTUFBTyxFQUFHLEdBQUcsV0FDeEIsTUFBTyxHQUFLbVEsR0FBUXhyQixNQUFNQyxNQUFRdWEsRUFBU3ZhLEtBQUsyckIsVUFBVyxNQUcvRHZRLEVBQWUsUUFBUyxFQUFHLEdBQUcsV0FDMUIsTUFDSSxHQUNBbVEsR0FBUXhyQixNQUFNQyxNQUNkdWEsRUFBU3ZhLEtBQUsyckIsVUFBVyxHQUN6QnBSLEVBQVN2YSxLQUFLZ3NCLFVBQVcsTUFJakM1USxFQUFlLE1BQU8sRUFBRyxHQUFHLFdBQ3hCLE1BQU8sR0FBS3BiLEtBQUt3ckIsUUFBVWpSLEVBQVN2YSxLQUFLMnJCLFVBQVcsTUFHeER2USxFQUFlLFFBQVMsRUFBRyxHQUFHLFdBQzFCLE1BQ0ksR0FDQXBiLEtBQUt3ckIsUUFDTGpSLEVBQVN2YSxLQUFLMnJCLFVBQVcsR0FDekJwUixFQUFTdmEsS0FBS2dzQixVQUFXLE1BY2pDblcsR0FBUyxLQUFLLEdBQ2RBLEdBQVMsS0FBSyxHQUlkOEksR0FBYSxPQUFRLEtBR3JCVyxHQUFnQixPQUFRLElBUXhCMEMsR0FBYyxJQUFLNEosSUFDbkI1SixHQUFjLElBQUs0SixJQUNuQjVKLEdBQWMsSUFBS1osSUFDbkJZLEdBQWMsSUFBS1osSUFDbkJZLEdBQWMsSUFBS1osSUFDbkJZLEdBQWMsS0FBTVosR0FBV0osSUFDL0JnQixHQUFjLEtBQU1aLEdBQVdKLElBQy9CZ0IsR0FBYyxLQUFNWixHQUFXSixJQUUvQmdCLEdBQWMsTUFBT1gsSUFDckJXLEdBQWMsUUFBU1YsSUFDdkJVLEdBQWMsTUFBT1gsSUFDckJXLEdBQWMsUUFBU1YsSUFFdkJxQixHQUFjLENBQUMsSUFBSyxNQUFPUSxJQUMzQlIsR0FBYyxDQUFDLElBQUssT0FBTyxTQUFVMVgsRUFBTzJRLEVBQU81RCxHQUMvQyxJQUFJaVUsRUFBU2hNLEdBQU1oVixHQUNuQjJRLEVBQU11SCxJQUFtQixLQUFYOEksRUFBZ0IsRUFBSUEsS0FFdEN0SixHQUFjLENBQUMsSUFBSyxNQUFNLFNBQVUxWCxFQUFPMlEsRUFBTzVELEdBQzlDQSxFQUFPa1UsTUFBUWxVLEVBQU9GLFFBQVFxVSxLQUFLbGhCLEdBQ25DK00sRUFBT29VLFVBQVluaEIsS0FFdkIwWCxHQUFjLENBQUMsSUFBSyxPQUFPLFNBQVUxWCxFQUFPMlEsRUFBTzVELEdBQy9DNEQsRUFBTXVILElBQVFsRCxHQUFNaFYsR0FDcEIrSyxFQUFnQmdDLEdBQVFwQixTQUFVLEtBRXRDK0wsR0FBYyxPQUFPLFNBQVUxWCxFQUFPMlEsRUFBTzVELEdBQ3pDLElBQUlxVSxFQUFNcGhCLEVBQU12TCxPQUFTLEVBQ3pCa2MsRUFBTXVILElBQVFsRCxHQUFNaFYsRUFBTThQLE9BQU8sRUFBR3NSLElBQ3BDelEsRUFBTXdILElBQVVuRCxHQUFNaFYsRUFBTThQLE9BQU9zUixJQUNuQ3JXLEVBQWdCZ0MsR0FBUXBCLFNBQVUsS0FFdEMrTCxHQUFjLFNBQVMsU0FBVTFYLEVBQU8yUSxFQUFPNUQsR0FDM0MsSUFBSXNVLEVBQU9yaEIsRUFBTXZMLE9BQVMsRUFDdEI2c0IsRUFBT3RoQixFQUFNdkwsT0FBUyxFQUMxQmtjLEVBQU11SCxJQUFRbEQsR0FBTWhWLEVBQU04UCxPQUFPLEVBQUd1UixJQUNwQzFRLEVBQU13SCxJQUFVbkQsR0FBTWhWLEVBQU04UCxPQUFPdVIsRUFBTSxJQUN6QzFRLEVBQU15SCxJQUFVcEQsR0FBTWhWLEVBQU04UCxPQUFPd1IsSUFDbkN2VyxFQUFnQmdDLEdBQVFwQixTQUFVLEtBRXRDK0wsR0FBYyxPQUFPLFNBQVUxWCxFQUFPMlEsRUFBTzVELEdBQ3pDLElBQUlxVSxFQUFNcGhCLEVBQU12TCxPQUFTLEVBQ3pCa2MsRUFBTXVILElBQVFsRCxHQUFNaFYsRUFBTThQLE9BQU8sRUFBR3NSLElBQ3BDelEsRUFBTXdILElBQVVuRCxHQUFNaFYsRUFBTThQLE9BQU9zUixPQUV2QzFKLEdBQWMsU0FBUyxTQUFVMVgsRUFBTzJRLEVBQU81RCxHQUMzQyxJQUFJc1UsRUFBT3JoQixFQUFNdkwsT0FBUyxFQUN0QjZzQixFQUFPdGhCLEVBQU12TCxPQUFTLEVBQzFCa2MsRUFBTXVILElBQVFsRCxHQUFNaFYsRUFBTThQLE9BQU8sRUFBR3VSLElBQ3BDMVEsRUFBTXdILElBQVVuRCxHQUFNaFYsRUFBTThQLE9BQU91UixFQUFNLElBQ3pDMVEsRUFBTXlILElBQVVwRCxHQUFNaFYsRUFBTThQLE9BQU93UixPQVd2QyxJQUFJQyxHQUE2QixnQkFLN0JDLEdBQWFwTSxHQUFXLFNBQVMsR0FFckMsU0FBU3FNLEdBQWVsQixFQUFPRyxFQUFTZ0IsR0FDcEMsT0FBSW5CLEVBQVEsR0FDRG1CLEVBQVUsS0FBTyxLQUVqQkEsRUFBVSxLQUFPLEtBSWhDLElBdUJJQyxHQXZCQUMsR0FBYSxDQUNiM1MsU0FBVVAsRUFDVnNDLGVBQWdCRSxFQUNoQkosWUFBYWUsRUFDYnZCLFFBQVN5QixFQUNUOFAsdUJBQXdCN1AsRUFDeEJrQixhQUFjaEIsRUFFZDBHLE9BQVFJLEdBQ1JMLFlBQWFNLEdBRWJvRCxLQUFNWSxHQUVOYSxTQUFVSSxHQUNWTixZQUFhUSxHQUNiUCxjQUFlTSxHQUVmMkQsY0FBZVAsSUFJZlEsR0FBVSxHQUNWQyxHQUFpQixHQUdyQixTQUFTQyxHQUFhQyxFQUFNL3NCLEdBQ3hCLElBQUlaLEVBQ0E0dEIsRUFBT3RuQixLQUFLeWYsSUFBSTRILEVBQUt6dEIsT0FBUVUsRUFBS1YsUUFDdEMsSUFBS0YsRUFBSSxFQUFHQSxFQUFJNHRCLEVBQU01dEIsR0FBSyxFQUN2QixHQUFJMnRCLEVBQUszdEIsS0FBT1ksRUFBS1osR0FDakIsT0FBT0EsRUFHZixPQUFPNHRCLEVBR1gsU0FBU0MsR0FBZ0J6dEIsR0FDckIsT0FBT0EsRUFBTUEsRUFBSXlHLGNBQWN1RCxRQUFRLElBQUssS0FBT2hLLEVBTXZELFNBQVMwdEIsR0FBYUMsR0FPbEIsSUFOQSxJQUNJQyxFQUNBMXBCLEVBQ0E2USxFQUNBaEwsRUFKQW5LLEVBQUksRUFNREEsRUFBSSt0QixFQUFNN3RCLFFBQVEsQ0FLckIsSUFIQTh0QixHQURBN2pCLEVBQVEwakIsR0FBZ0JFLEVBQU0vdEIsSUFBSW1LLE1BQU0sTUFDOUJqSyxPQUVWb0UsR0FEQUEsRUFBT3VwQixHQUFnQkUsRUFBTS90QixFQUFJLEtBQ25Cc0UsRUFBSzZGLE1BQU0sS0FBTyxLQUN6QjZqQixFQUFJLEdBQUcsQ0FFVixHQURBN1ksRUFBUzhZLEdBQVc5akIsRUFBTS9JLE1BQU0sRUFBRzRzQixHQUFHL2hCLEtBQUssTUFFdkMsT0FBT2tKLEVBRVgsR0FDSTdRLEdBQ0FBLEVBQUtwRSxRQUFVOHRCLEdBQ2ZOLEdBQWF2akIsRUFBTzdGLElBQVMwcEIsRUFBSSxFQUdqQyxNQUVKQSxJQUVKaHVCLElBRUosT0FBT290QixHQUdYLFNBQVNhLEdBQVc1c0IsR0FDaEIsSUFBSTZzQixFQUFZLEtBR2hCLFFBQ3NCL3BCLElBQWxCcXBCLEdBQVFuc0IsSUFFUjBTLEdBQ0FBLEVBQU9vYSxRQUVQLElBQ0lELEVBQVlkLEdBQWFnQixNQUNSMWhCLEtBRWpCMmhCLEdBQW1CSCxHQUNyQixNQUFPSSxHQUdMZCxHQUFRbnNCLEdBQVEsS0FHeEIsT0FBT21zQixHQUFRbnNCLEdBTW5CLFNBQVNndEIsR0FBbUJqdUIsRUFBS211QixHQUM3QixJQUFJamhCLEVBcUJKLE9BcEJJbE4sS0FFSWtOLEVBREFvSCxFQUFZNlosR0FDTEMsR0FBVXB1QixHQUVWcXVCLEdBQWFydUIsRUFBS211QixJQUt6Qm5CLEdBQWU5ZixFQUVRLG9CQUFad0wsU0FBMkJBLFFBQVFILE1BRTFDRyxRQUFRSCxLQUNKLFVBQVl2WSxFQUFNLDJDQU0zQmd0QixHQUFhZ0IsTUFHeEIsU0FBU0ssR0FBYXB0QixFQUFNbVgsR0FDeEIsR0FBZSxPQUFYQSxFQUFpQixDQUNqQixJQUFJckQsRUFDQTZFLEVBQWVxVCxHQUVuQixHQURBN1UsRUFBT2tXLEtBQU9ydEIsRUFDTyxNQUFqQm1zQixHQUFRbnNCLEdBQ1JrWSxFQUNJLHVCQUNBLDJPQUtKUyxFQUFld1QsR0FBUW5zQixHQUFNc1ksYUFDMUIsR0FBMkIsTUFBdkJuQixFQUFPbVcsYUFDZCxHQUFvQyxNQUFoQ25CLEdBQVFoVixFQUFPbVcsY0FDZjNVLEVBQWV3VCxHQUFRaFYsRUFBT21XLGNBQWNoVixZQUN6QyxDQUVILEdBQWMsT0FEZHhFLEVBQVM4WSxHQUFXelYsRUFBT21XLGVBV3ZCLE9BUEtsQixHQUFlalYsRUFBT21XLGdCQUN2QmxCLEdBQWVqVixFQUFPbVcsY0FBZ0IsSUFFMUNsQixHQUFlalYsRUFBT21XLGNBQWNucUIsS0FBSyxDQUNyQ25ELEtBQU1BLEVBQ05tWCxPQUFRQSxJQUVMLEtBVFB3QixFQUFlN0UsRUFBT3dFLFFBMEJsQyxPQWJBNlQsR0FBUW5zQixHQUFRLElBQUk2WSxFQUFPSCxFQUFhQyxFQUFjeEIsSUFFbERpVixHQUFlcHNCLElBQ2Zvc0IsR0FBZXBzQixHQUFNd0ssU0FBUSxTQUFVcVksR0FDbkN1SyxHQUFhdkssRUFBRTdpQixLQUFNNmlCLEVBQUUxTCxXQU8vQjZWLEdBQW1CaHRCLEdBRVptc0IsR0FBUW5zQixHQUlmLGNBRE9tc0IsR0FBUW5zQixHQUNSLEtBSWYsU0FBU3V0QixHQUFhdnRCLEVBQU1tWCxHQUN4QixHQUFjLE1BQVZBLEVBQWdCLENBQ2hCLElBQUlyRCxFQUNBMFosRUFDQTdVLEVBQWVxVCxHQUVFLE1BQWpCRyxHQUFRbnNCLElBQStDLE1BQTlCbXNCLEdBQVFuc0IsR0FBTXN0QixhQUV2Q25CLEdBQVFuc0IsR0FBTXFZLElBQUlLLEVBQWF5VCxHQUFRbnNCLEdBQU1zWSxRQUFTbkIsS0FJckMsT0FEakJxVyxFQUFZWixHQUFXNXNCLE1BRW5CMlksRUFBZTZVLEVBQVVsVixTQUU3Qm5CLEVBQVN1QixFQUFhQyxFQUFjeEIsR0FDbkIsTUFBYnFXLElBSUFyVyxFQUFPa1csS0FBT3J0QixJQUVsQjhULEVBQVMsSUFBSStFLEVBQU8xQixJQUNibVcsYUFBZW5CLEdBQVFuc0IsR0FDOUJtc0IsR0FBUW5zQixHQUFROFQsR0FJcEJrWixHQUFtQmh0QixRQUdFLE1BQWpCbXNCLEdBQVFuc0IsS0FDMEIsTUFBOUJtc0IsR0FBUW5zQixHQUFNc3RCLGNBQ2RuQixHQUFRbnNCLEdBQVFtc0IsR0FBUW5zQixHQUFNc3RCLGFBQzFCdHRCLElBQVNndEIsTUFDVEEsR0FBbUJodEIsSUFFQyxNQUFqQm1zQixHQUFRbnNCLFdBQ1Jtc0IsR0FBUW5zQixJQUkzQixPQUFPbXNCLEdBQVFuc0IsR0FJbkIsU0FBU210QixHQUFVcHVCLEdBQ2YsSUFBSStVLEVBTUosR0FKSS9VLEdBQU9BLEVBQUlrWSxTQUFXbFksRUFBSWtZLFFBQVE4VixRQUNsQ2h1QixFQUFNQSxFQUFJa1ksUUFBUThWLFFBR2pCaHVCLEVBQ0QsT0FBT2d0QixHQUdYLElBQUszckIsRUFBUXJCLEdBQU0sQ0FHZixHQURBK1UsRUFBUzhZLEdBQVc3dEIsR0FFaEIsT0FBTytVLEVBRVgvVSxFQUFNLENBQUNBLEdBR1gsT0FBTzB0QixHQUFhMXRCLEdBR3hCLFNBQVMwdUIsS0FDTCxPQUFPemlCLEVBQUttaEIsSUFHaEIsU0FBU3VCLEdBQWN0WSxHQUNuQixJQUFJZCxFQUNBckIsRUFBSW1DLEVBQUU4TSxHQXVDVixPQXJDSWpQLElBQXNDLElBQWpDa0MsRUFBZ0JDLEdBQUdkLFdBQ3hCQSxFQUNJckIsRUFBRW1QLElBQVMsR0FBS25QLEVBQUVtUCxJQUFTLEdBQ3JCQSxHQUNBblAsRUFBRW9QLElBQVEsR0FBS3BQLEVBQUVvUCxJQUFReEMsR0FBWTVNLEVBQUVrUCxJQUFPbFAsRUFBRW1QLEtBQ2hEQyxHQUNBcFAsRUFBRXFQLElBQVEsR0FDVnJQLEVBQUVxUCxJQUFRLElBQ0csS0FBWnJQLEVBQUVxUCxNQUNnQixJQUFkclAsRUFBRXNQLEtBQ2UsSUFBZHRQLEVBQUV1UCxLQUNpQixJQUFuQnZQLEVBQUV3UCxLQUNWSCxHQUNBclAsRUFBRXNQLElBQVUsR0FBS3RQLEVBQUVzUCxJQUFVLEdBQzdCQSxHQUNBdFAsRUFBRXVQLElBQVUsR0FBS3ZQLEVBQUV1UCxJQUFVLEdBQzdCQSxHQUNBdlAsRUFBRXdQLElBQWUsR0FBS3hQLEVBQUV3UCxJQUFlLElBQ3ZDQSxJQUNDLEVBR1B0TixFQUFnQkMsR0FBR3VZLHFCQUNsQnJaLEVBQVc2TixJQUFRN04sRUFBVytOLE1BRS9CL04sRUFBVytOLElBRVhsTixFQUFnQkMsR0FBR3dZLGlCQUFnQyxJQUFkdFosSUFDckNBLEVBQVdvTyxJQUVYdk4sRUFBZ0JDLEdBQUd5WSxtQkFBa0MsSUFBZHZaLElBQ3ZDQSxFQUFXcU8sSUFHZnhOLEVBQWdCQyxHQUFHZCxTQUFXQSxHQUczQmMsRUFLWCxJQUFJMFksR0FBbUIsaUpBQ25CQyxHQUFnQiw2SUFDaEJDLEdBQVUsd0JBQ1ZDLEdBQVcsQ0FDUCxDQUFDLGVBQWdCLHVCQUNqQixDQUFDLGFBQWMsbUJBQ2YsQ0FBQyxlQUFnQixrQkFDakIsQ0FBQyxhQUFjLGVBQWUsR0FDOUIsQ0FBQyxXQUFZLGVBQ2IsQ0FBQyxVQUFXLGNBQWMsR0FDMUIsQ0FBQyxhQUFjLGNBQ2YsQ0FBQyxXQUFZLFNBQ2IsQ0FBQyxhQUFjLGVBQ2YsQ0FBQyxZQUFhLGVBQWUsR0FDN0IsQ0FBQyxVQUFXLFNBQ1osQ0FBQyxTQUFVLFNBQVMsR0FDcEIsQ0FBQyxPQUFRLFNBQVMsSUFHdEJDLEdBQVcsQ0FDUCxDQUFDLGdCQUFpQix1QkFDbEIsQ0FBQyxnQkFBaUIsc0JBQ2xCLENBQUMsV0FBWSxrQkFDYixDQUFDLFFBQVMsYUFDVixDQUFDLGNBQWUscUJBQ2hCLENBQUMsY0FBZSxvQkFDaEIsQ0FBQyxTQUFVLGdCQUNYLENBQUMsT0FBUSxZQUNULENBQUMsS0FBTSxTQUVYQyxHQUFrQixxQkFFbEJsWixHQUFVLDBMQUNWbVosR0FBYSxDQUNUQyxHQUFJLEVBQ0pDLElBQUssRUFDTEMsS0FBSyxJQUNMQyxLQUFLLElBQ0xDLEtBQUssSUFDTEMsS0FBSyxJQUNMQyxLQUFLLElBQ0xDLEtBQUssSUFDTEMsS0FBSyxJQUNMQyxLQUFLLEtBSWIsU0FBU0MsR0FBYzVYLEdBQ25CLElBQUl4WSxFQUNBcXdCLEVBR0FDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBTEE1UixFQUFTckcsRUFBT25VLEdBQ2hCMkQsRUFBUW1uQixHQUFpQnVCLEtBQUs3UixJQUFXdVEsR0FBY3NCLEtBQUs3UixHQU1oRSxHQUFJN1csRUFBTyxDQUdQLElBRkF3TyxFQUFnQmdDLEdBQVF0QyxLQUFNLEVBRXpCbFcsRUFBSSxFQUFHcXdCLEVBQUlmLEdBQVNwdkIsT0FBUUYsRUFBSXF3QixFQUFHcndCLElBQ3BDLEdBQUlzdkIsR0FBU3R2QixHQUFHLEdBQUcwd0IsS0FBSzFvQixFQUFNLElBQUssQ0FDL0J1b0IsRUFBYWpCLEdBQVN0dkIsR0FBRyxHQUN6QnN3QixHQUErQixJQUFuQmhCLEdBQVN0dkIsR0FBRyxHQUN4QixNQUdSLEdBQWtCLE1BQWR1d0IsRUFFQSxZQURBL1gsRUFBTzVCLFVBQVcsR0FHdEIsR0FBSTVPLEVBQU0sR0FBSSxDQUNWLElBQUtoSSxFQUFJLEVBQUdxd0IsRUFBSWQsR0FBU3J2QixPQUFRRixFQUFJcXdCLEVBQUdyd0IsSUFDcEMsR0FBSXV2QixHQUFTdnZCLEdBQUcsR0FBRzB3QixLQUFLMW9CLEVBQU0sSUFBSyxDQUUvQndvQixHQUFjeG9CLEVBQU0sSUFBTSxLQUFPdW5CLEdBQVN2dkIsR0FBRyxHQUM3QyxNQUdSLEdBQWtCLE1BQWR3d0IsRUFFQSxZQURBaFksRUFBTzVCLFVBQVcsR0FJMUIsSUFBSzBaLEdBQTJCLE1BQWRFLEVBRWQsWUFEQWhZLEVBQU81QixVQUFXLEdBR3RCLEdBQUk1TyxFQUFNLEdBQUksQ0FDVixJQUFJcW5CLEdBQVFxQixLQUFLMW9CLEVBQU0sSUFJbkIsWUFEQXdRLEVBQU81QixVQUFXLEdBRmxCNlosRUFBVyxJQU1uQmpZLEVBQU9QLEdBQUtzWSxHQUFjQyxHQUFjLEtBQU9DLEdBQVksSUFDM0RFLEdBQTBCblksUUFFMUJBLEVBQU81QixVQUFXLEVBSTFCLFNBQVNnYSxHQUNMQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxHQUVBLElBQUk5bkIsRUFBUyxDQUNUK25CLEdBQWVOLEdBQ2ZuTSxHQUF5QnBjLFFBQVF3b0IsR0FDakNqSyxTQUFTa0ssRUFBUSxJQUNqQmxLLFNBQVNtSyxFQUFTLElBQ2xCbkssU0FBU29LLEVBQVcsS0FPeEIsT0FKSUMsR0FDQTluQixFQUFPNUUsS0FBS3FpQixTQUFTcUssRUFBVyxLQUc3QjluQixFQUdYLFNBQVMrbkIsR0FBZU4sR0FDcEIsSUFBSXhRLEVBQU93RyxTQUFTZ0ssRUFBUyxJQUM3QixPQUFJeFEsR0FBUSxHQUNELElBQU9BLEVBQ1BBLEdBQVEsSUFDUixLQUFPQSxFQUVYQSxFQUdYLFNBQVMrUSxHQUFrQnRULEdBRXZCLE9BQU9BLEVBQ0YxVCxRQUFRLG9CQUFxQixLQUM3QkEsUUFBUSxXQUFZLEtBQ3BCQSxRQUFRLFNBQVUsSUFDbEJBLFFBQVEsU0FBVSxJQUczQixTQUFTaW5CLEdBQWFDLEVBQVlDLEVBQWEvWSxHQUMzQyxPQUFJOFksR0FFc0IxSCxHQUEyQnRoQixRQUFRZ3BCLEtBQ3JDLElBQUl6YyxLQUNoQjBjLEVBQVksR0FDWkEsRUFBWSxHQUNaQSxFQUFZLElBQ2R0RyxXQUVGelUsRUFBZ0JnQyxHQUFRakMsaUJBQWtCLEVBQzFDaUMsRUFBTzVCLFVBQVcsR0FDWCxHQU1uQixTQUFTNGEsR0FBZ0JDLEVBQVdDLEVBQWdCQyxHQUNoRCxHQUFJRixFQUNBLE9BQU9oQyxHQUFXZ0MsR0FDZixHQUFJQyxFQUVQLE9BQU8sRUFFUCxJQUFJRSxFQUFLL0ssU0FBUzhLLEVBQVcsSUFDekJsYixFQUFJbWIsRUFBSyxJQUViLE9BRFNBLEVBQUtuYixHQUFLLElBQ1IsR0FBS0EsRUFLeEIsU0FBU29iLEdBQWtCclosR0FDdkIsSUFDSXNaLEVBREE5cEIsRUFBUXNPLEdBQVFvYSxLQUFLVSxHQUFrQjVZLEVBQU9uVSxLQUVsRCxHQUFJMkQsRUFBTyxDQVNQLEdBUkE4cEIsRUFBY2xCLEdBQ1Y1b0IsRUFBTSxHQUNOQSxFQUFNLEdBQ05BLEVBQU0sR0FDTkEsRUFBTSxHQUNOQSxFQUFNLEdBQ05BLEVBQU0sS0FFTHFwQixHQUFhcnBCLEVBQU0sR0FBSThwQixFQUFhdFosR0FDckMsT0FHSkEsRUFBTytLLEdBQUt1TyxFQUNadFosRUFBT0wsS0FBT3FaLEdBQWdCeHBCLEVBQU0sR0FBSUEsRUFBTSxHQUFJQSxFQUFNLEtBRXhEd1EsRUFBT3ZVLEdBQUttakIsR0FBYzdtQixNQUFNLEtBQU1pWSxFQUFPK0ssSUFDN0MvSyxFQUFPdlUsR0FBRzh0QixjQUFjdlosRUFBT3ZVLEdBQUcrdEIsZ0JBQWtCeFosRUFBT0wsTUFFM0QzQixFQUFnQmdDLEdBQVFsQyxTQUFVLE9BRWxDa0MsRUFBTzVCLFVBQVcsRUFLMUIsU0FBU3FiLEdBQWlCelosR0FDdEIsSUFBSXVLLEVBQVV5TSxHQUFnQmtCLEtBQUtsWSxFQUFPblUsSUFDMUIsT0FBWjBlLEdBS0pxTixHQUFjNVgsSUFDVSxJQUFwQkEsRUFBTzVCLGtCQUNBNEIsRUFBTzVCLFNBS2xCaWIsR0FBa0JyWixJQUNNLElBQXBCQSxFQUFPNUIsa0JBQ0E0QixFQUFPNUIsU0FLZDRCLEVBQU9yQixRQUNQcUIsRUFBTzVCLFVBQVcsRUFHbEIxQyxFQUFNZ2Usd0JBQXdCMVosTUF0QjlCQSxFQUFPdlUsR0FBSyxJQUFJNFEsTUFBTWtPLEVBQVEsSUFvQ3RDLFNBQVNvUCxHQUFTN2QsRUFBR0MsRUFBRzZkLEdBQ3BCLE9BQVMsTUFBTDlkLEVBQ09BLEVBRUYsTUFBTEMsRUFDT0EsRUFFSjZkLEVBR1gsU0FBU0MsR0FBaUI3WixHQUV0QixJQUFJOFosRUFBVyxJQUFJemQsS0FBS1gsRUFBTTBHLE9BQzlCLE9BQUlwQyxFQUFPK1osUUFDQSxDQUNIRCxFQUFTaEwsaUJBQ1RnTCxFQUFTRSxjQUNURixFQUFTRyxjQUdWLENBQUNILEVBQVNwTCxjQUFlb0wsRUFBU0ksV0FBWUosRUFBU0ssV0FPbEUsU0FBU0MsR0FBZ0JwYSxHQUNyQixJQUFJeFksRUFDQWloQixFQUVBNFIsRUFDQUMsRUFDQUMsRUFIQXRuQixFQUFRLEdBS1osSUFBSStNLEVBQU92VSxHQUFYLENBZ0NBLElBNUJBNHVCLEVBQWNSLEdBQWlCN1osR0FHM0JBLEVBQU82SyxJQUF5QixNQUFuQjdLLEVBQU8rSyxHQUFHRyxLQUFxQyxNQUFwQmxMLEVBQU8rSyxHQUFHRSxLQUNsRHVQLEdBQXNCeGEsR0FJRCxNQUFyQkEsRUFBT3lhLGFBQ1BGLEVBQVlaLEdBQVMzWixFQUFPK0ssR0FBR0MsSUFBT3FQLEVBQVlyUCxNQUc5Q2hMLEVBQU95YSxXQUFhdE0sR0FBV29NLElBQ1QsSUFBdEJ2YSxFQUFPeWEsY0FFUHpjLEVBQWdCZ0MsR0FBUXdXLG9CQUFxQixHQUdqRC9OLEVBQU9tRyxHQUFjMkwsRUFBVyxFQUFHdmEsRUFBT3lhLFlBQzFDemEsRUFBTytLLEdBQUdFLElBQVN4QyxFQUFLdVIsY0FDeEJoYSxFQUFPK0ssR0FBR0csSUFBUXpDLEVBQUt3UixjQVF0Qnp5QixFQUFJLEVBQUdBLEVBQUksR0FBcUIsTUFBaEJ3WSxFQUFPK0ssR0FBR3ZqQixLQUFjQSxFQUN6Q3dZLEVBQU8rSyxHQUFHdmpCLEdBQUt5TCxFQUFNekwsR0FBSzZ5QixFQUFZN3lCLEdBSTFDLEtBQU9BLEVBQUksRUFBR0EsSUFDVndZLEVBQU8rSyxHQUFHdmpCLEdBQUt5TCxFQUFNekwsR0FDRCxNQUFoQndZLEVBQU8rSyxHQUFHdmpCLEdBQW9CLElBQU5BLEVBQVUsRUFBSSxFQUFLd1ksRUFBTytLLEdBQUd2akIsR0FLckMsS0FBcEJ3WSxFQUFPK0ssR0FBR0ksS0FDWSxJQUF0Qm5MLEVBQU8rSyxHQUFHSyxLQUNZLElBQXRCcEwsRUFBTytLLEdBQUdNLEtBQ2lCLElBQTNCckwsRUFBTytLLEdBQUdPLE1BRVZ0TCxFQUFPMGEsVUFBVyxFQUNsQjFhLEVBQU8rSyxHQUFHSSxJQUFRLEdBR3RCbkwsRUFBT3ZVLElBQU11VSxFQUFPK1osUUFBVW5MLEdBQWdCSixJQUFZem1CLE1BQ3RELEtBQ0FrTCxHQUVKcW5CLEVBQWtCdGEsRUFBTytaLFFBQ25CL1osRUFBT3ZVLEdBQUcyakIsWUFDVnBQLEVBQU92VSxHQUFHZ25CLFNBSUcsTUFBZnpTLEVBQU9MLE1BQ1BLLEVBQU92VSxHQUFHOHRCLGNBQWN2WixFQUFPdlUsR0FBRyt0QixnQkFBa0J4WixFQUFPTCxNQUczREssRUFBTzBhLFdBQ1AxYSxFQUFPK0ssR0FBR0ksSUFBUSxJQUtsQm5MLEVBQU82SyxTQUNnQixJQUFoQjdLLEVBQU82SyxHQUFHbEYsR0FDakIzRixFQUFPNkssR0FBR2xGLElBQU0yVSxJQUVoQnRjLEVBQWdCZ0MsR0FBUWpDLGlCQUFrQixJQUlsRCxTQUFTeWMsR0FBc0J4YSxHQUMzQixJQUFJNkYsRUFBRzhVLEVBQVVyTCxFQUFNQyxFQUFTTixFQUFLQyxFQUFLMEwsRUFBTUMsRUFBaUJDLEVBR3JELE9BRFpqVixFQUFJN0YsRUFBTzZLLElBQ0xrUSxJQUFxQixNQUFQbFYsRUFBRW1WLEdBQW9CLE1BQVBuVixFQUFFb1YsR0FDakNoTSxFQUFNLEVBQ05DLEVBQU0sRUFNTnlMLEVBQVdoQixHQUNQOVQsRUFBRWtWLEdBQ0YvYSxFQUFPK0ssR0FBR0MsSUFDVjJFLEdBQVd1TCxLQUFlLEVBQUcsR0FBR3JULE1BRXBDeUgsRUFBT3FLLEdBQVM5VCxFQUFFbVYsRUFBRyxLQUNyQnpMLEVBQVVvSyxHQUFTOVQsRUFBRW9WLEVBQUcsSUFDVixHQUFLMUwsRUFBVSxLQUN6QnNMLEdBQWtCLEtBR3RCNUwsRUFBTWpQLEVBQU9GLFFBQVFtUSxNQUFNaEIsSUFDM0JDLEVBQU1sUCxFQUFPRixRQUFRbVEsTUFBTWYsSUFFM0I0TCxFQUFVbkwsR0FBV3VMLEtBQWVqTSxFQUFLQyxHQUV6Q3lMLEVBQVdoQixHQUFTOVQsRUFBRXNWLEdBQUluYixFQUFPK0ssR0FBR0MsSUFBTzhQLEVBQVFqVCxNQUduRHlILEVBQU9xSyxHQUFTOVQsRUFBRUEsRUFBR2lWLEVBQVF4TCxNQUVsQixNQUFQekosRUFBRUYsSUFFRjRKLEVBQVUxSixFQUFFRixHQUNFLEdBQUs0SixFQUFVLEtBQ3pCc0wsR0FBa0IsR0FFUixNQUFQaFYsRUFBRWlRLEdBRVR2RyxFQUFVMUosRUFBRWlRLEVBQUk3RyxHQUNacEosRUFBRWlRLEVBQUksR0FBS2pRLEVBQUVpUSxFQUFJLEtBQ2pCK0UsR0FBa0IsSUFJdEJ0TCxFQUFVTixHQUdkSyxFQUFPLEdBQUtBLEVBQU9RLEdBQVk2SyxFQUFVMUwsRUFBS0MsR0FDOUNsUixFQUFnQmdDLEdBQVF5VyxnQkFBaUIsRUFDZixNQUFuQm9FLEVBQ1A3YyxFQUFnQmdDLEdBQVEwVyxrQkFBbUIsR0FFM0NrRSxFQUFPdkwsR0FBbUJzTCxFQUFVckwsRUFBTUMsRUFBU04sRUFBS0MsR0FDeERsUCxFQUFPK0ssR0FBR0MsSUFBUTRQLEVBQUsvUyxLQUN2QjdILEVBQU95YSxXQUFhRyxFQUFLbEwsV0FXakMsU0FBU3lJLEdBQTBCblksR0FFL0IsR0FBSUEsRUFBT1AsS0FBTy9ELEVBQU0wZixTQUl4QixHQUFJcGIsRUFBT1AsS0FBTy9ELEVBQU0yZixTQUF4QixDQUlBcmIsRUFBTytLLEdBQUssR0FDWi9NLEVBQWdCZ0MsR0FBUWhELE9BQVEsRUFHaEMsSUFDSXhWLEVBQ0F1eEIsRUFDQXJPLEVBQ0FySCxFQUNBaVksRUFHQTFkLEVBUkF5SSxFQUFTLEdBQUtyRyxFQUFPblUsR0FNckIwdkIsRUFBZWxWLEVBQU8zZSxPQUN0Qjh6QixFQUF5QixFQU03QixJQUhBOVEsRUFDSTVHLEVBQWE5RCxFQUFPUCxHQUFJTyxFQUFPRixTQUFTdFEsTUFBTXdULElBQXFCLEdBRWxFeGIsRUFBSSxFQUFHQSxFQUFJa2pCLEVBQU9oakIsT0FBUUYsSUFDM0I2YixFQUFRcUgsRUFBT2xqQixJQUNmdXhCLEdBQWUxUyxFQUFPN1csTUFBTTRhLEdBQXNCL0csRUFBT3JELEtBQ3JELElBQUksT0FFSnNiLEVBQVVqVixFQUFPdEQsT0FBTyxFQUFHc0QsRUFBT3ZXLFFBQVFpcEIsS0FDOUJyeEIsT0FBUyxHQUNqQnNXLEVBQWdCZ0MsR0FBUTlDLFlBQVlsUixLQUFLc3ZCLEdBRTdDalYsRUFBU0EsRUFBT3pkLE1BQ1p5ZCxFQUFPdlcsUUFBUWlwQixHQUFlQSxFQUFZcnhCLFFBRTlDOHpCLEdBQTBCekMsRUFBWXJ4QixRQUd0Q3liLEVBQXFCRSxJQUNqQjBWLEVBQ0EvYSxFQUFnQmdDLEdBQVFoRCxPQUFRLEVBRWhDZ0IsRUFBZ0JnQyxHQUFRL0MsYUFBYWpSLEtBQUtxWCxHQUU5Q3lILEdBQXdCekgsRUFBTzBWLEVBQWEvWSxJQUNyQ0EsRUFBT3JCLFVBQVlvYSxHQUMxQi9hLEVBQWdCZ0MsR0FBUS9DLGFBQWFqUixLQUFLcVgsR0FLbERyRixFQUFnQmdDLEdBQVE1QyxjQUNwQm1lLEVBQWVDLEVBQ2ZuVixFQUFPM2UsT0FBUyxHQUNoQnNXLEVBQWdCZ0MsR0FBUTlDLFlBQVlsUixLQUFLcWEsR0FLekNyRyxFQUFPK0ssR0FBR0ksS0FBUyxLQUNpQixJQUFwQ25OLEVBQWdCZ0MsR0FBUXBCLFNBQ3hCb0IsRUFBTytLLEdBQUdJLElBQVEsSUFFbEJuTixFQUFnQmdDLEdBQVFwQixhQUFValQsR0FHdENxUyxFQUFnQmdDLEdBQVFyQyxnQkFBa0JxQyxFQUFPK0ssR0FBR25pQixNQUFNLEdBQzFEb1YsRUFBZ0JnQyxHQUFRbkMsU0FBV21DLEVBQU9vVSxVQUUxQ3BVLEVBQU8rSyxHQUFHSSxJQUFRc1EsR0FDZHpiLEVBQU9GLFFBQ1BFLEVBQU8rSyxHQUFHSSxJQUNWbkwsRUFBT29VLFdBS0MsUUFEWnhXLEVBQU1JLEVBQWdCZ0MsR0FBUXBDLE9BRTFCb0MsRUFBTytLLEdBQUdDLElBQVFoTCxFQUFPRixRQUFRNGIsZ0JBQWdCOWQsRUFBS29DLEVBQU8rSyxHQUFHQyxNQUdwRW9QLEdBQWdCcGEsR0FDaEJ1VyxHQUFjdlcsUUEvRVZxWixHQUFrQnJaLFFBSmxCNFgsR0FBYzVYLEdBc0Z0QixTQUFTeWIsR0FBZ0I5ZSxFQUFRZ2YsRUFBTTlkLEdBQ25DLElBQUkrZCxFQUVKLE9BQWdCLE1BQVovZCxFQUVPOGQsRUFFZ0IsTUFBdkJoZixFQUFPa2YsYUFDQWxmLEVBQU9rZixhQUFhRixFQUFNOWQsR0FDWCxNQUFmbEIsRUFBT3dYLE9BRWR5SCxFQUFPamYsRUFBT3dYLEtBQUt0VyxLQUNQOGQsRUFBTyxLQUNmQSxHQUFRLElBRVBDLEdBQWlCLEtBQVRELElBQ1RBLEVBQU8sR0FFSkEsR0FHQUEsRUFLZixTQUFTRyxHQUF5QjliLEdBQzlCLElBQUkrYixFQUNBQyxFQUNBQyxFQUNBejBCLEVBQ0EwMEIsRUFDQUMsRUFDQUMsR0FBb0IsRUFFeEIsR0FBeUIsSUFBckJwYyxFQUFPUCxHQUFHL1gsT0FHVixPQUZBc1csRUFBZ0JnQyxHQUFReEMsZUFBZ0IsT0FDeEN3QyxFQUFPdlUsR0FBSyxJQUFJNFEsS0FBSzBDLE1BSXpCLElBQUt2WCxFQUFJLEVBQUdBLEVBQUl3WSxFQUFPUCxHQUFHL1gsT0FBUUYsSUFDOUIwMEIsRUFBZSxFQUNmQyxHQUFtQixFQUNuQkosRUFBYTNjLEVBQVcsR0FBSVksR0FDTixNQUFsQkEsRUFBTytaLFVBQ1BnQyxFQUFXaEMsUUFBVS9aLEVBQU8rWixTQUVoQ2dDLEVBQVd0YyxHQUFLTyxFQUFPUCxHQUFHalksR0FDMUIyd0IsR0FBMEI0RCxHQUV0QjVkLEVBQVE0ZCxLQUNSSSxHQUFtQixHQUl2QkQsR0FBZ0JsZSxFQUFnQitkLEdBQVkzZSxjQUc1QzhlLEdBQWtFLEdBQWxEbGUsRUFBZ0IrZCxHQUFZOWUsYUFBYXZWLE9BRXpEc1csRUFBZ0IrZCxHQUFZTSxNQUFRSCxFQUUvQkUsRUFhR0YsRUFBZUQsSUFDZkEsRUFBY0MsRUFDZEYsRUFBYUQsSUFiRSxNQUFmRSxHQUNBQyxFQUFlRCxHQUNmRSxLQUVBRixFQUFjQyxFQUNkRixFQUFhRCxFQUNUSSxJQUNBQyxHQUFvQixJQVdwQzdmLEVBQU95RCxFQUFRZ2MsR0FBY0QsR0FHakMsU0FBU08sR0FBaUJ0YyxHQUN0QixJQUFJQSxFQUFPdlUsR0FBWCxDQUlBLElBQUlqRSxFQUFJeWYsR0FBcUJqSCxFQUFPblUsSUFDaEMwd0IsT0FBc0I1d0IsSUFBVm5FLEVBQUVtcUIsSUFBb0JucUIsRUFBRWloQixLQUFPamhCLEVBQUVtcUIsSUFDakQzUixFQUFPK0ssR0FBS3BiLEVBQ1IsQ0FBQ25JLEVBQUVxZ0IsS0FBTXJnQixFQUFFZ2hCLE1BQU8rVCxFQUFXLzBCLEVBQUVtMEIsS0FBTW4wQixFQUFFZzFCLE9BQVFoMUIsRUFBRWkxQixPQUFRajFCLEVBQUVrMUIsY0FDM0QsU0FBVTMxQixHQUNOLE9BQU9BLEdBQU9zbkIsU0FBU3RuQixFQUFLLE9BSXBDcXpCLEdBQWdCcGEsSUFHcEIsU0FBUzJjLEdBQWlCM2MsR0FDdEIsSUFBSW5MLEVBQU0sSUFBSWtMLEVBQU93VyxHQUFjcUcsR0FBYzVjLEtBT2pELE9BTkluTCxFQUFJNmxCLFdBRUo3bEIsRUFBSXliLElBQUksRUFBRyxLQUNYemIsRUFBSTZsQixjQUFXL3VCLEdBR1prSixFQUdYLFNBQVMrbkIsR0FBYzVjLEdBQ25CLElBQUkvTSxFQUFRK00sRUFBT25VLEdBQ2Y2USxFQUFTc0QsRUFBT1AsR0FJcEIsT0FGQU8sRUFBT0YsUUFBVUUsRUFBT0YsU0FBV2tXLEdBQVVoVyxFQUFPTixJQUV0QyxPQUFWek0sUUFBOEJ0SCxJQUFYK1EsR0FBa0MsS0FBVnpKLEVBQ3BDNkwsRUFBYyxDQUFFekIsV0FBVyxLQUdqQixpQkFBVnBLLElBQ1ArTSxFQUFPblUsR0FBS29ILEVBQVErTSxFQUFPRixRQUFRK2MsU0FBUzVwQixJQUc1Q2lOLEVBQVNqTixHQUNGLElBQUk4TSxFQUFPd1csR0FBY3RqQixLQUN6Qm1KLEVBQU9uSixHQUNkK00sRUFBT3ZVLEdBQUt3SCxFQUNMaEssRUFBUXlULEdBQ2ZvZixHQUF5QjliLEdBQ2xCdEQsRUFDUHliLEdBQTBCblksR0FFMUI4YyxHQUFnQjljLEdBR2Y3QixFQUFRNkIsS0FDVEEsRUFBT3ZVLEdBQUssTUFHVHVVLElBR1gsU0FBUzhjLEdBQWdCOWMsR0FDckIsSUFBSS9NLEVBQVErTSxFQUFPblUsR0FDZnFRLEVBQVlqSixHQUNaK00sRUFBT3ZVLEdBQUssSUFBSTRRLEtBQUtYLEVBQU0wRyxPQUNwQmhHLEVBQU9uSixHQUNkK00sRUFBT3ZVLEdBQUssSUFBSTRRLEtBQUtwSixFQUFNdUosV0FDSCxpQkFBVnZKLEVBQ2R3bUIsR0FBaUJ6WixHQUNWL1csRUFBUWdLLElBQ2YrTSxFQUFPK0ssR0FBS3BiLEVBQUlzRCxFQUFNckssTUFBTSxJQUFJLFNBQVU3QixHQUN0QyxPQUFPc25CLFNBQVN0bkIsRUFBSyxPQUV6QnF6QixHQUFnQnBhLElBQ1RwRSxFQUFTM0ksR0FDaEJxcEIsR0FBaUJ0YyxHQUNWN0QsRUFBU2xKLEdBRWhCK00sRUFBT3ZVLEdBQUssSUFBSTRRLEtBQUtwSixHQUVyQnlJLEVBQU1nZSx3QkFBd0IxWixHQUl0QyxTQUFTbkQsR0FBaUI1SixFQUFPeUosRUFBUUMsRUFBUUMsRUFBUW1nQixHQUNyRCxJQUFJbkQsRUFBSSxHQTJCUixPQXpCZSxJQUFYbGQsSUFBOEIsSUFBWEEsSUFDbkJFLEVBQVNGLEVBQ1RBLE9BQVMvUSxJQUdFLElBQVhnUixJQUE4QixJQUFYQSxJQUNuQkMsRUFBU0QsRUFDVEEsT0FBU2hSLElBSVJpUSxFQUFTM0ksSUFBVStJLEVBQWMvSSxJQUNqQ2hLLEVBQVFnSyxJQUEyQixJQUFqQkEsRUFBTXZMLFVBRXpCdUwsT0FBUXRILEdBSVppdUIsRUFBRXBhLGtCQUFtQixFQUNyQm9hLEVBQUVHLFFBQVVILEVBQUVoYSxPQUFTbWQsRUFDdkJuRCxFQUFFbGEsR0FBSy9DLEVBQ1BpZCxFQUFFL3RCLEdBQUtvSCxFQUNQMm1CLEVBQUVuYSxHQUFLL0MsRUFDUGtkLEVBQUVqYixRQUFVL0IsRUFFTCtmLEdBQWlCL0MsR0FHNUIsU0FBU3NCLEdBQVlqb0IsRUFBT3lKLEVBQVFDLEVBQVFDLEdBQ3hDLE9BQU9DLEdBQWlCNUosRUFBT3lKLEVBQVFDLEVBQVFDLEdBQVEsR0FyZTNEbEIsRUFBTWdlLHdCQUEwQm5aLEVBQzVCLGlTQUdBLFNBQVVQLEdBQ05BLEVBQU92VSxHQUFLLElBQUk0USxLQUFLMkQsRUFBT25VLElBQU1tVSxFQUFPK1osUUFBVSxPQUFTLFFBdUxwRXJlLEVBQU0wZixTQUFXLGFBR2pCMWYsRUFBTTJmLFNBQVcsYUF5U2pCLElBQUkyQixHQUFlemMsRUFDWCxzR0FDQSxXQUNJLElBQUkwYyxFQUFRL0IsR0FBWW56QixNQUFNLEtBQU1OLFdBQ3BDLE9BQUlPLEtBQUttVyxXQUFhOGUsRUFBTTllLFVBQ2pCOGUsRUFBUWoxQixLQUFPQSxLQUFPaTFCLEVBRXRCbmUsT0FJbkJvZSxHQUFlM2MsRUFDWCxzR0FDQSxXQUNJLElBQUkwYyxFQUFRL0IsR0FBWW56QixNQUFNLEtBQU1OLFdBQ3BDLE9BQUlPLEtBQUttVyxXQUFhOGUsRUFBTTllLFVBQ2pCOGUsRUFBUWoxQixLQUFPQSxLQUFPaTFCLEVBRXRCbmUsT0FVdkIsU0FBU3FlLEdBQU83Z0IsRUFBSThnQixHQUNoQixJQUFJdm9CLEVBQUtyTixFQUlULEdBSHVCLElBQW5CNDFCLEVBQVExMUIsUUFBZ0J1QixFQUFRbTBCLEVBQVEsTUFDeENBLEVBQVVBLEVBQVEsS0FFakJBLEVBQVExMUIsT0FDVCxPQUFPd3pCLEtBR1gsSUFEQXJtQixFQUFNdW9CLEVBQVEsR0FDVDUxQixFQUFJLEVBQUdBLEVBQUk0MUIsRUFBUTExQixTQUFVRixFQUN6QjQxQixFQUFRNTFCLEdBQUcyVyxZQUFhaWYsRUFBUTUxQixHQUFHOFUsR0FBSXpILEtBQ3hDQSxFQUFNdW9CLEVBQVE1MUIsSUFHdEIsT0FBT3FOLEVBSVgsU0FBUzBZLEtBR0wsT0FBTzRQLEdBQU8sV0FGSCxHQUFHdjBCLE1BQU1kLEtBQUtMLFVBQVcsSUFLeEMsU0FBU3FiLEtBR0wsT0FBT3FhLEdBQU8sVUFGSCxHQUFHdjBCLE1BQU1kLEtBQUtMLFVBQVcsSUFLeEMsSUFBSTJhLEdBQU0sV0FDTixPQUFPL0YsS0FBSytGLElBQU0vRixLQUFLK0YsT0FBUyxJQUFJL0YsTUFHcENnaEIsR0FBVyxDQUNYLE9BQ0EsVUFDQSxRQUNBLE9BQ0EsTUFDQSxPQUNBLFNBQ0EsU0FDQSxlQUdKLFNBQVNDLEdBQWdCcmYsR0FDckIsSUFBSXJXLEVBRUFKLEVBREErMUIsR0FBaUIsRUFFckIsSUFBSzMxQixLQUFPcVcsRUFDUixHQUNJcEMsRUFBV29DLEVBQUdyVyxNQUV1QixJQUFqQ2tJLEdBQVFoSSxLQUFLdTFCLEdBQVV6MUIsSUFDWixNQUFWcVcsRUFBRXJXLElBQWlCNFcsTUFBTVAsRUFBRXJXLEtBR2hDLE9BQU8sRUFJZixJQUFLSixFQUFJLEVBQUdBLEVBQUk2MUIsR0FBUzMxQixTQUFVRixFQUMvQixHQUFJeVcsRUFBRW9mLEdBQVM3MUIsSUFBSyxDQUNoQixHQUFJKzFCLEVBQ0EsT0FBTyxFQUVQQyxXQUFXdmYsRUFBRW9mLEdBQVM3MUIsT0FBU3lnQixHQUFNaEssRUFBRW9mLEdBQVM3MUIsT0FDaEQrMUIsR0FBaUIsR0FLN0IsT0FBTyxFQUdYLFNBQVNFLEtBQ0wsT0FBT3oxQixLQUFLb1csU0FHaEIsU0FBU3NmLEtBQ0wsT0FBT0MsR0FBZTVlLEtBRzFCLFNBQVM2ZSxHQUFTQyxHQUNkLElBQUl6VyxFQUFrQkgsR0FBcUI0VyxHQUN2Q0MsRUFBUTFXLEVBQWdCUyxNQUFRLEVBQ2hDa1csRUFBVzNXLEVBQWdCNFcsU0FBVyxFQUN0Q25TLEVBQVN6RSxFQUFnQm9CLE9BQVMsRUFDbEN5VixFQUFRN1csRUFBZ0JrSSxNQUFRbEksRUFBZ0I4VyxTQUFXLEVBQzNEQyxFQUFPL1csRUFBZ0J1SyxLQUFPLEVBQzlCNkIsRUFBUXBNLEVBQWdCdVUsTUFBUSxFQUNoQ2hJLEVBQVV2TSxFQUFnQm9WLFFBQVUsRUFDcEN4SSxFQUFVNU0sRUFBZ0JxVixRQUFVLEVBQ3BDMkIsRUFBZWhYLEVBQWdCc1YsYUFBZSxFQUVsRDEwQixLQUFLb1csU0FBV2tmLEdBQWdCbFcsR0FHaENwZixLQUFLcTJCLGVBQ0FELEVBQ1MsSUFBVnBLLEVBQ1UsSUFBVkwsRUFDUSxJQUFSSCxFQUFlLEdBQUssR0FHeEJ4ckIsS0FBS3MyQixPQUFTSCxFQUFlLEVBQVJGLEVBSXJCajJCLEtBQUt1a0IsU0FBV1YsRUFBb0IsRUFBWGtTLEVBQXVCLEdBQVJELEVBRXhDOTFCLEtBQUt1MkIsTUFBUSxHQUVidjJCLEtBQUs4WCxRQUFVa1csS0FFZmh1QixLQUFLdzJCLFVBR1QsU0FBU0MsR0FBVzEzQixHQUNoQixPQUFPQSxhQUFlNjJCLEdBRzFCLFNBQVNjLEdBQVNsYyxHQUNkLE9BQUlBLEVBQVMsR0FDeUIsRUFBM0IxVSxLQUFLNndCLE9BQU8sRUFBSW5jLEdBRWhCMVUsS0FBSzZ3QixNQUFNbmMsR0FLMUIsU0FBU29jLEdBQWNDLEVBQVFDLEVBQVFDLEdBQ25DLElBR0l2M0IsRUFIQVcsRUFBTTJGLEtBQUt5ZixJQUFJc1IsRUFBT24zQixPQUFRbzNCLEVBQU9wM0IsUUFDckNzM0IsRUFBYWx4QixLQUFLQyxJQUFJOHdCLEVBQU9uM0IsT0FBU28zQixFQUFPcDNCLFFBQzdDdTNCLEVBQVEsRUFFWixJQUFLejNCLEVBQUksRUFBR0EsRUFBSVcsRUFBS1gsS0FFWnUzQixHQUFlRixFQUFPcjNCLEtBQU9zM0IsRUFBT3QzQixLQUNuQ3UzQixHQUFlOVcsR0FBTTRXLEVBQU9yM0IsTUFBUXlnQixHQUFNNlcsRUFBT3QzQixNQUVuRHkzQixJQUdSLE9BQU9BLEVBQVFELEVBS25CLFNBQVNFLEdBQU83YixFQUFPOGIsR0FDbkIvYixFQUFlQyxFQUFPLEVBQUcsR0FBRyxXQUN4QixJQUFJNmIsRUFBU2wzQixLQUFLbzNCLFlBQ2RDLEVBQU8sSUFLWCxPQUpJSCxFQUFTLElBQ1RBLEdBQVVBLEVBQ1ZHLEVBQU8sS0FHUEEsRUFDQTljLEtBQVkyYyxFQUFTLElBQUssR0FDMUJDLEVBQ0E1YyxJQUFXMmMsRUFBUyxHQUFJLE1BS3BDQSxHQUFPLElBQUssS0FDWkEsR0FBTyxLQUFNLElBSWJsVixHQUFjLElBQUtILElBQ25CRyxHQUFjLEtBQU1ILElBQ3BCYyxHQUFjLENBQUMsSUFBSyxPQUFPLFNBQVUxWCxFQUFPMlEsRUFBTzVELEdBQy9DQSxFQUFPK1osU0FBVSxFQUNqQi9aLEVBQU9MLEtBQU8yZixHQUFpQnpWLEdBQWtCNVcsTUFRckQsSUFBSXNzQixHQUFjLGtCQUVsQixTQUFTRCxHQUFpQkUsRUFBU25aLEdBQy9CLElBRUlqVCxFQUNBdWdCLEVBSEE4TCxHQUFXcFosR0FBVSxJQUFJN1csTUFBTWd3QixHQUtuQyxPQUFnQixPQUFaQyxFQUNPLEtBT1EsS0FGbkI5TCxFQUF1QixJQUR2QnZnQixJQURRcXNCLEVBQVFBLEVBQVEvM0IsT0FBUyxJQUFNLElBQ3RCLElBQUk4SCxNQUFNK3ZCLEtBQWdCLENBQUMsSUFBSyxFQUFHLElBQ2xDLEdBQVd0WCxHQUFNN1UsRUFBTSxLQUVsQixFQUFpQixNQUFiQSxFQUFNLEdBQWF1Z0IsR0FBV0EsRUFJN0QsU0FBUytMLEdBQWdCenNCLEVBQU8wc0IsR0FDNUIsSUFBSTlxQixFQUFLNFIsRUFDVCxPQUFJa1osRUFBTS9mLFFBQ04vSyxFQUFNOHFCLEVBQU1DLFFBQ1puWixHQUNLdkcsRUFBU2pOLElBQVVtSixFQUFPbkosR0FDckJBLEVBQU11SixVQUNOMGUsR0FBWWpvQixHQUFPdUosV0FBYTNILEVBQUkySCxVQUU5QzNILEVBQUlwSixHQUFHbzBCLFFBQVFockIsRUFBSXBKLEdBQUcrUSxVQUFZaUssR0FDbEMvSyxFQUFNdUUsYUFBYXBMLEdBQUssR0FDakJBLEdBRUFxbUIsR0FBWWpvQixHQUFPNnNCLFFBSWxDLFNBQVNDLEdBQWM5aEIsR0FHbkIsT0FBUW5RLEtBQUs2d0IsTUFBTTFnQixFQUFFeFMsR0FBR3UwQixxQkFxQjVCLFNBQVNDLEdBQWFodEIsRUFBT2l0QixFQUFlQyxHQUN4QyxJQUNJQyxFQURBbEIsRUFBU2wzQixLQUFLNlgsU0FBVyxFQUU3QixJQUFLN1gsS0FBS21XLFVBQ04sT0FBZ0IsTUFBVGxMLEVBQWdCakwsS0FBTytXLElBRWxDLEdBQWEsTUFBVDlMLEVBQWUsQ0FDZixHQUFxQixpQkFBVkEsR0FFUCxHQUFjLFFBRGRBLEVBQVFxc0IsR0FBaUJ6VixHQUFrQjVXLElBRXZDLE9BQU9qTCxVQUVKOEYsS0FBS0MsSUFBSWtGLEdBQVMsS0FBT2t0QixJQUNoQ2x0QixHQUFnQixJQXdCcEIsT0F0QktqTCxLQUFLNFgsUUFBVXNnQixJQUNoQkUsRUFBY0wsR0FBYy8zQixPQUVoQ0EsS0FBSzZYLFFBQVU1TSxFQUNmakwsS0FBSzRYLFFBQVMsRUFDSyxNQUFmd2dCLEdBQ0FwNEIsS0FBS3NvQixJQUFJOFAsRUFBYSxLQUV0QmxCLElBQVdqc0IsS0FDTml0QixHQUFpQmw0QixLQUFLcTRCLGtCQUN2QkMsR0FDSXQ0QixLQUNBMjFCLEdBQWUxcUIsRUFBUWlzQixFQUFRLEtBQy9CLEdBQ0EsR0FFSWwzQixLQUFLcTRCLG9CQUNicjRCLEtBQUtxNEIsbUJBQW9CLEVBQ3pCM2tCLEVBQU11RSxhQUFhalksTUFBTSxHQUN6QkEsS0FBS3E0QixrQkFBb0IsT0FHMUJyNEIsS0FFUCxPQUFPQSxLQUFLNFgsT0FBU3NmLEVBQVNhLEdBQWMvM0IsTUFJcEQsU0FBU3U0QixHQUFXdHRCLEVBQU9pdEIsR0FDdkIsT0FBYSxNQUFUanRCLEdBQ3FCLGlCQUFWQSxJQUNQQSxHQUFTQSxHQUdiakwsS0FBS28zQixVQUFVbnNCLEVBQU9pdEIsR0FFZmw0QixPQUVDQSxLQUFLbzNCLFlBSXJCLFNBQVNvQixHQUFlTixHQUNwQixPQUFPbDRCLEtBQUtvM0IsVUFBVSxFQUFHYyxHQUc3QixTQUFTTyxHQUFpQlAsR0FTdEIsT0FSSWw0QixLQUFLNFgsU0FDTDVYLEtBQUtvM0IsVUFBVSxFQUFHYyxHQUNsQmw0QixLQUFLNFgsUUFBUyxFQUVWc2dCLEdBQ0FsNEIsS0FBSzA0QixTQUFTWCxHQUFjLzNCLE1BQU8sTUFHcENBLEtBR1gsU0FBUzI0QixLQUNMLEdBQWlCLE1BQWIzNEIsS0FBSzJYLEtBQ0wzWCxLQUFLbzNCLFVBQVVwM0IsS0FBSzJYLE1BQU0sR0FBTyxRQUM5QixHQUF1QixpQkFBWjNYLEtBQUs2RCxHQUFpQixDQUNwQyxJQUFJKzBCLEVBQVF0QixHQUFpQjFWLEdBQWE1aEIsS0FBSzZELElBQ2xDLE1BQVQrMEIsRUFDQTU0QixLQUFLbzNCLFVBQVV3QixHQUVmNTRCLEtBQUtvM0IsVUFBVSxHQUFHLEdBRzFCLE9BQU9wM0IsS0FHWCxTQUFTNjRCLEdBQXFCNXRCLEdBQzFCLFFBQUtqTCxLQUFLbVcsWUFHVmxMLEVBQVFBLEVBQVFpb0IsR0FBWWpvQixHQUFPbXNCLFlBQWMsR0FFekNwM0IsS0FBS28zQixZQUFjbnNCLEdBQVMsSUFBTyxHQUcvQyxTQUFTNnRCLEtBQ0wsT0FDSTk0QixLQUFLbzNCLFlBQWNwM0IsS0FBSzQzQixRQUFRcFgsTUFBTSxHQUFHNFcsYUFDekNwM0IsS0FBS28zQixZQUFjcDNCLEtBQUs0M0IsUUFBUXBYLE1BQU0sR0FBRzRXLFlBSWpELFNBQVMyQixLQUNMLElBQUs3a0IsRUFBWWxVLEtBQUtnNUIsZUFDbEIsT0FBT2g1QixLQUFLZzVCLGNBR2hCLElBQ0kvRCxFQURBckQsRUFBSSxHQWNSLE9BWEF4YSxFQUFXd2EsRUFBRzV4QixPQUNkNHhCLEVBQUlnRCxHQUFjaEQsSUFFWjdPLElBQ0ZrUyxFQUFRckQsRUFBRWhhLE9BQVNuRCxFQUFVbWQsRUFBRTdPLElBQU1tUSxHQUFZdEIsRUFBRTdPLElBQ25EL2lCLEtBQUtnNUIsY0FDRGg1QixLQUFLbVcsV0FBYXlnQixHQUFjaEYsRUFBRTdPLEdBQUlrUyxFQUFNZ0UsV0FBYSxHQUU3RGo1QixLQUFLZzVCLGVBQWdCLEVBR2xCaDVCLEtBQUtnNUIsY0FHaEIsU0FBU0UsS0FDTCxRQUFPbDVCLEtBQUttVyxZQUFhblcsS0FBSzRYLE9BR2xDLFNBQVN1aEIsS0FDTCxRQUFPbjVCLEtBQUttVyxXQUFZblcsS0FBSzRYLE9BR2pDLFNBQVN3aEIsS0FDTCxRQUFPcDVCLEtBQUttVyxXQUFZblcsS0FBSzRYLFFBQTJCLElBQWpCNVgsS0FBSzZYLFFBcEpoRG5FLEVBQU11RSxhQUFlLGFBd0pyQixJQUFJb2hCLEdBQWMsd0RBSWRDLEdBQVcsc0tBRWYsU0FBUzNELEdBQWUxcUIsRUFBT3JMLEdBQzNCLElBR0l5M0IsRUFDQWtDLEVBQ0FDLEVBTEEzRCxFQUFXNXFCLEVBRVh6RCxFQUFRLEtBa0VaLE9BN0RJaXZCLEdBQVd4ckIsR0FDWDRxQixFQUFXLENBQ1BwUCxHQUFJeGIsRUFBTW9yQixjQUNWMVksRUFBRzFTLEVBQU1xckIsTUFDVHZZLEVBQUc5UyxFQUFNc1osU0FFTnBRLEVBQVNsSixLQUFXdUwsT0FBT3ZMLElBQ2xDNHFCLEVBQVcsR0FDUGoyQixFQUNBaTJCLEVBQVNqMkIsSUFBUXFMLEVBRWpCNHFCLEVBQVNPLGNBQWdCbnJCLElBRXJCekQsRUFBUTZ4QixHQUFZbkosS0FBS2psQixLQUNqQ29zQixFQUFvQixNQUFiN3ZCLEVBQU0sSUFBYyxFQUFJLEVBQy9CcXVCLEVBQVcsQ0FDUDVYLEVBQUcsRUFDSE4sRUFBR3NDLEdBQU16WSxFQUFNMGIsS0FBU21VLEVBQ3hCNVosRUFBR3dDLEdBQU16WSxFQUFNMmIsS0FBU2tVLEVBQ3hCcGhCLEVBQUdnSyxHQUFNelksRUFBTTRiLEtBQVdpVSxFQUMxQi9aLEVBQUcyQyxHQUFNelksRUFBTTZiLEtBQVdnVSxFQUMxQjVRLEdBQUl4RyxHQUFNeVcsR0FBOEIsSUFBckJsdkIsRUFBTThiLE1BQXdCK1QsS0FFN0M3dkIsRUFBUTh4QixHQUFTcEosS0FBS2psQixLQUM5Qm9zQixFQUFvQixNQUFiN3ZCLEVBQU0sSUFBYyxFQUFJLEVBQy9CcXVCLEVBQVcsQ0FDUDVYLEVBQUd3YixHQUFTanlCLEVBQU0sR0FBSTZ2QixHQUN0QnRaLEVBQUcwYixHQUFTanlCLEVBQU0sR0FBSTZ2QixHQUN0QnhaLEVBQUc0YixHQUFTanlCLEVBQU0sR0FBSTZ2QixHQUN0QjFaLEVBQUc4YixHQUFTanlCLEVBQU0sR0FBSTZ2QixHQUN0QjVaLEVBQUdnYyxHQUFTanlCLEVBQU0sR0FBSTZ2QixHQUN0QnBoQixFQUFHd2pCLEdBQVNqeUIsRUFBTSxHQUFJNnZCLEdBQ3RCL1osRUFBR21jLEdBQVNqeUIsRUFBTSxHQUFJNnZCLEtBRVAsTUFBWnhCLEVBRVBBLEVBQVcsR0FFUyxpQkFBYkEsSUFDTixTQUFVQSxHQUFZLE9BQVFBLEtBRS9CMkQsRUFBVUUsR0FDTnhHLEdBQVkyQyxFQUFTLzBCLE1BQ3JCb3lCLEdBQVkyQyxFQUFTeGUsTUFHekJ3ZSxFQUFXLElBQ0ZwUCxHQUFLK1MsRUFBUXBELGFBQ3RCUCxFQUFTOVgsRUFBSXliLEVBQVEzVixRQUd6QjBWLEVBQU0sSUFBSTNELEdBQVNDLEdBRWZZLEdBQVd4ckIsSUFBVTRJLEVBQVc1SSxFQUFPLGFBQ3ZDc3VCLEVBQUl6aEIsUUFBVTdNLEVBQU02TSxTQUdwQjJlLEdBQVd4ckIsSUFBVTRJLEVBQVc1SSxFQUFPLGNBQ3ZDc3VCLEVBQUluakIsU0FBV25MLEVBQU1tTCxVQUdsQm1qQixFQU1YLFNBQVNFLEdBQVNFLEVBQUt0QyxHQUluQixJQUFJeHFCLEVBQU04c0IsR0FBT25FLFdBQVdtRSxFQUFJL3ZCLFFBQVEsSUFBSyxNQUU3QyxPQUFRNE0sTUFBTTNKLEdBQU8sRUFBSUEsR0FBT3dxQixFQUdwQyxTQUFTdUMsR0FBMEJDLEVBQU01RSxHQUNyQyxJQUFJcG9CLEVBQU0sR0FVVixPQVJBQSxFQUFJZ1gsT0FDQW9SLEVBQU16VSxRQUFVcVosRUFBS3JaLFFBQXlDLElBQTlCeVUsRUFBTXBWLE9BQVNnYSxFQUFLaGEsUUFDcERnYSxFQUFLakMsUUFBUXRQLElBQUl6YixFQUFJZ1gsT0FBUSxLQUFLaVcsUUFBUTdFLE1BQ3hDcG9CLEVBQUlnWCxPQUdWaFgsRUFBSXVwQixjQUFnQm5CLEdBQVM0RSxFQUFLakMsUUFBUXRQLElBQUl6YixFQUFJZ1gsT0FBUSxLQUVuRGhYLEVBR1gsU0FBUzZzQixHQUFrQkcsRUFBTTVFLEdBQzdCLElBQUlwb0IsRUFDSixPQUFNZ3RCLEVBQUsxakIsV0FBYThlLEVBQU05ZSxXQUk5QjhlLEVBQVF5QyxHQUFnQnpDLEVBQU80RSxHQUMzQkEsRUFBS0UsU0FBUzlFLEdBQ2Rwb0IsRUFBTStzQixHQUEwQkMsRUFBTTVFLEtBRXRDcG9CLEVBQU0rc0IsR0FBMEIzRSxFQUFPNEUsSUFDbkN6RCxjQUFnQnZwQixFQUFJdXBCLGFBQ3hCdnBCLEVBQUlnWCxRQUFVaFgsRUFBSWdYLFFBR2ZoWCxHQVpJLENBQUV1cEIsYUFBYyxFQUFHdlMsT0FBUSxHQWdCMUMsU0FBU21XLEdBQVlDLEVBQVdwNUIsR0FDNUIsT0FBTyxTQUFVMFcsRUFBSzJpQixHQUNsQixJQUFTQyxFQW1CVCxPQWpCZSxPQUFYRCxHQUFvQjFqQixPQUFPMGpCLEtBQzNCbmhCLEVBQ0lsWSxFQUNBLFlBQ0lBLEVBQ0EsdURBQ0FBLEVBSEosa0dBT0pzNUIsRUFBTTVpQixFQUNOQSxFQUFNMmlCLEVBQ05BLEVBQVNDLEdBSWI3QixHQUFZdDRCLEtBRE4yMUIsR0FBZXBlLEVBQUsyaUIsR0FDSEQsR0FDaEJqNkIsTUFJZixTQUFTczRCLEdBQVluZSxFQUFLMGIsRUFBVXVFLEVBQVVuaUIsR0FDMUMsSUFBSW1lLEVBQWVQLEVBQVNRLGNBQ3hCRixFQUFPTyxHQUFTYixFQUFTUyxPQUN6QnpTLEVBQVM2UyxHQUFTYixFQUFTdFIsU0FFMUJwSyxFQUFJaEUsWUFLVDhCLEVBQStCLE1BQWhCQSxHQUE4QkEsRUFFekM0TCxHQUNBd0IsR0FBU2xMLEVBQUs1TyxHQUFJNE8sRUFBSyxTQUFXMEosRUFBU3VXLEdBRTNDakUsR0FDQTVWLEdBQU1wRyxFQUFLLE9BQVE1TyxHQUFJNE8sRUFBSyxRQUFVZ2MsRUFBT2lFLEdBRTdDaEUsR0FDQWpjLEVBQUkxVyxHQUFHbzBCLFFBQVExZCxFQUFJMVcsR0FBRytRLFVBQVk0aEIsRUFBZWdFLEdBRWpEbmlCLEdBQ0F2RSxFQUFNdUUsYUFBYWtDLEVBQUtnYyxHQUFRdFMsSUE1RnhDOFIsR0FBZXJoQixHQUFLc2hCLEdBQVN6MkIsVUFDN0J3MkIsR0FBZTBFLFFBQVUzRSxHQStGekIsSUFBSXBOLEdBQU0wUixHQUFZLEVBQUcsT0FDckJ0QixHQUFXc0IsSUFBYSxFQUFHLFlBRS9CLFNBQVM1ekIsR0FBUzZFLEdBQ2QsTUFBd0IsaUJBQVZBLEdBQXNCQSxhQUFpQnF2QixPQUl6RCxTQUFTQyxHQUFjdHZCLEdBQ25CLE9BQ0lpTixFQUFTak4sSUFDVG1KLEVBQU9uSixJQUNQN0UsR0FBUzZFLElBQ1RrSixFQUFTbEosSUFDVHV2QixHQUFzQnZ2QixJQUN0Qnd2QixHQUFvQnh2QixVQUNwQkEsRUFLUixTQUFTd3ZCLEdBQW9CeHZCLEdBQ3pCLElBNEJJekwsRUFDQWs3QixFQTdCQUMsRUFBYS9tQixFQUFTM0ksS0FBVytJLEVBQWMvSSxHQUMvQzJ2QixHQUFlLEVBQ2ZqMkIsRUFBYSxDQUNULFFBQ0EsT0FDQSxJQUNBLFNBQ0EsUUFDQSxJQUNBLE9BQ0EsTUFDQSxJQUNBLFFBQ0EsT0FDQSxJQUNBLFFBQ0EsT0FDQSxJQUNBLFVBQ0EsU0FDQSxJQUNBLFVBQ0EsU0FDQSxJQUNBLGVBQ0EsY0FDQSxNQUtSLElBQUtuRixFQUFJLEVBQUdBLEVBQUltRixFQUFXakYsT0FBUUYsR0FBSyxFQUNwQ2s3QixFQUFXLzFCLEVBQVduRixHQUN0Qm83QixFQUFlQSxHQUFnQi9tQixFQUFXNUksRUFBT3l2QixHQUdyRCxPQUFPQyxHQUFjQyxFQUd6QixTQUFTSixHQUFzQnZ2QixHQUMzQixJQUFJNHZCLEVBQVk1NUIsRUFBUWdLLEdBQ3BCNnZCLEdBQWUsRUFPbkIsT0FOSUQsSUFDQUMsRUFHa0IsSUFGZDd2QixFQUFNckQsUUFBTyxTQUFVeUMsR0FDbkIsT0FBUThKLEVBQVM5SixJQUFTakUsR0FBUzZFLE1BQ3BDdkwsUUFFSm03QixHQUFhQyxFQUd4QixTQUFTQyxHQUFlOXZCLEdBQ3BCLElBVUl6TCxFQUNBazdCLEVBWEFDLEVBQWEvbUIsRUFBUzNJLEtBQVcrSSxFQUFjL0ksR0FDL0MydkIsR0FBZSxFQUNmajJCLEVBQWEsQ0FDVCxVQUNBLFVBQ0EsVUFDQSxXQUNBLFdBQ0EsWUFLUixJQUFLbkYsRUFBSSxFQUFHQSxFQUFJbUYsRUFBV2pGLE9BQVFGLEdBQUssRUFDcENrN0IsRUFBVy8xQixFQUFXbkYsR0FDdEJvN0IsRUFBZUEsR0FBZ0IvbUIsRUFBVzVJLEVBQU95dkIsR0FHckQsT0FBT0MsR0FBY0MsRUFHekIsU0FBU0ksR0FBa0JDLEVBQVU3Z0IsR0FDakMsSUFBSXFFLEVBQU93YyxFQUFTeGMsS0FBS3JFLEVBQUssUUFBUSxHQUN0QyxPQUFPcUUsR0FBUSxFQUNULFdBQ0FBLEdBQVEsRUFDUixXQUNBQSxFQUFPLEVBQ1AsVUFDQUEsRUFBTyxFQUNQLFVBQ0FBLEVBQU8sRUFDUCxVQUNBQSxFQUFPLEVBQ1AsV0FDQSxXQUdWLFNBQVN5YyxHQUFXQyxFQUFNQyxHQUVHLElBQXJCMzdCLFVBQVVDLFNBQ0xELFVBQVUsR0FHSjg2QixHQUFjOTZCLFVBQVUsS0FDL0IwN0IsRUFBTzE3QixVQUFVLEdBQ2pCMjdCLE9BQVV6M0IsR0FDSG8zQixHQUFldDdCLFVBQVUsTUFDaEMyN0IsRUFBVTM3QixVQUFVLEdBQ3BCMDdCLE9BQU94M0IsSUFQUHczQixPQUFPeDNCLEVBQ1B5M0IsT0FBVXozQixJQVdsQixJQUFJeVcsRUFBTStnQixHQUFRakksS0FDZG1JLEVBQU0zRCxHQUFnQnRkLEVBQUtwYSxNQUFNczdCLFFBQVEsT0FDekM1bUIsRUFBU2hCLEVBQU02bkIsZUFBZXY3QixLQUFNcTdCLElBQVEsV0FDNUNoaEIsRUFDSStnQixJQUNDcGlCLEVBQVdvaUIsRUFBUTFtQixJQUNkMG1CLEVBQVExbUIsR0FBUTVVLEtBQUtFLEtBQU1vYSxHQUMzQmdoQixFQUFRMW1CLElBRXRCLE9BQU8xVSxLQUFLMFUsT0FDUjJGLEdBQVVyYSxLQUFLeWIsYUFBYXZCLFNBQVN4RixFQUFRMVUsS0FBTWt6QixHQUFZOVksS0FJdkUsU0FBU3dkLEtBQ0wsT0FBTyxJQUFJN2YsRUFBTy9YLE1BR3RCLFNBQVM4NUIsR0FBUTd1QixFQUFPK1QsR0FDcEIsSUFBSXdjLEVBQWF0akIsRUFBU2pOLEdBQVNBLEVBQVFpb0IsR0FBWWpvQixHQUN2RCxTQUFNakwsS0FBS21XLFlBQWFxbEIsRUFBV3JsQixhQUlyQixpQkFEZDZJLEVBQVFELEdBQWVDLElBQVUsZUFFdEJoZixLQUFLd1UsVUFBWWduQixFQUFXaG5CLFVBRTVCZ25CLEVBQVdobkIsVUFBWXhVLEtBQUs0M0IsUUFBUTBELFFBQVF0YyxHQUFPeEssV0FJbEUsU0FBU3VsQixHQUFTOXVCLEVBQU8rVCxHQUNyQixJQUFJd2MsRUFBYXRqQixFQUFTak4sR0FBU0EsRUFBUWlvQixHQUFZam9CLEdBQ3ZELFNBQU1qTCxLQUFLbVcsWUFBYXFsQixFQUFXcmxCLGFBSXJCLGlCQURkNkksRUFBUUQsR0FBZUMsSUFBVSxlQUV0QmhmLEtBQUt3VSxVQUFZZ25CLEVBQVdobkIsVUFFNUJ4VSxLQUFLNDNCLFFBQVE2RCxNQUFNemMsR0FBT3hLLFVBQVlnbkIsRUFBV2huQixXQUloRSxTQUFTa25CLEdBQVU1NkIsRUFBTXVXLEVBQUkySCxFQUFPMmMsR0FDaEMsSUFBSUMsRUFBWTFqQixFQUFTcFgsR0FBUUEsRUFBT295QixHQUFZcHlCLEdBQ2hEKzZCLEVBQVUzakIsRUFBU2IsR0FBTUEsRUFBSzZiLEdBQVk3YixHQUM5QyxTQUFNclgsS0FBS21XLFdBQWF5bEIsRUFBVXpsQixXQUFhMGxCLEVBQVExbEIsYUFLL0IsT0FGeEJ3bEIsRUFBY0EsR0FBZSxNQUVaLEdBQ1AzN0IsS0FBSzg1QixRQUFROEIsRUFBVzVjLElBQ3ZCaGYsS0FBSys1QixTQUFTNkIsRUFBVzVjLE1BQ1osTUFBbkIyYyxFQUFZLEdBQ1AzN0IsS0FBSys1QixTQUFTOEIsRUFBUzdjLElBQ3RCaGYsS0FBSzg1QixRQUFRK0IsRUFBUzdjLElBSXJDLFNBQVM4YyxHQUFPN3dCLEVBQU8rVCxHQUNuQixJQUNJK2MsRUFEQVAsRUFBYXRqQixFQUFTak4sR0FBU0EsRUFBUWlvQixHQUFZam9CLEdBRXZELFNBQU1qTCxLQUFLbVcsWUFBYXFsQixFQUFXcmxCLGFBSXJCLGlCQURkNkksRUFBUUQsR0FBZUMsSUFBVSxlQUV0QmhmLEtBQUt3VSxZQUFjZ25CLEVBQVdobkIsV0FFckN1bkIsRUFBVVAsRUFBV2huQixVQUVqQnhVLEtBQUs0M0IsUUFBUTBELFFBQVF0YyxHQUFPeEssV0FBYXVuQixHQUN6Q0EsR0FBVy83QixLQUFLNDNCLFFBQVE2RCxNQUFNemMsR0FBT3hLLFlBS2pELFNBQVN3bkIsR0FBYy93QixFQUFPK1QsR0FDMUIsT0FBT2hmLEtBQUs4N0IsT0FBTzd3QixFQUFPK1QsSUFBVWhmLEtBQUs4NUIsUUFBUTd1QixFQUFPK1QsR0FHNUQsU0FBU2lkLEdBQWVoeEIsRUFBTytULEdBQzNCLE9BQU9oZixLQUFLODdCLE9BQU83d0IsRUFBTytULElBQVVoZixLQUFLKzVCLFNBQVM5dUIsRUFBTytULEdBRzdELFNBQVNQLEdBQUt4VCxFQUFPK1QsRUFBT2tkLEdBQ3hCLElBQUlDLEVBQU1DLEVBQVcvaEIsRUFFckIsSUFBS3JhLEtBQUttVyxVQUNOLE9BQU9ZLElBS1gsS0FGQW9sQixFQUFPekUsR0FBZ0J6c0IsRUFBT2pMLE9BRXBCbVcsVUFDTixPQUFPWSxJQU9YLE9BSkFxbEIsRUFBb0QsS0FBdkNELEVBQUsvRSxZQUFjcDNCLEtBQUtvM0IsYUFFckNwWSxFQUFRRCxHQUFlQyxJQUduQixJQUFLLE9BQ0QzRSxFQUFTZ2lCLEdBQVVyOEIsS0FBTW04QixHQUFRLEdBQ2pDLE1BQ0osSUFBSyxRQUNEOWhCLEVBQVNnaUIsR0FBVXI4QixLQUFNbThCLEdBQ3pCLE1BQ0osSUFBSyxVQUNEOWhCLEVBQVNnaUIsR0FBVXI4QixLQUFNbThCLEdBQVEsRUFDakMsTUFDSixJQUFLLFNBQ0Q5aEIsR0FBVXJhLEtBQU9tOEIsR0FBUSxJQUN6QixNQUNKLElBQUssU0FDRDloQixHQUFVcmEsS0FBT204QixHQUFRLElBQ3pCLE1BQ0osSUFBSyxPQUNEOWhCLEdBQVVyYSxLQUFPbThCLEdBQVEsS0FDekIsTUFDSixJQUFLLE1BQ0Q5aEIsR0FBVXJhLEtBQU9tOEIsRUFBT0MsR0FBYSxNQUNyQyxNQUNKLElBQUssT0FDRC9oQixHQUFVcmEsS0FBT204QixFQUFPQyxHQUFhLE9BQ3JDLE1BQ0osUUFDSS9oQixFQUFTcmEsS0FBT204QixFQUd4QixPQUFPRCxFQUFVN2hCLEVBQVN5RixHQUFTekYsR0FHdkMsU0FBU2dpQixHQUFVdm9CLEVBQUdDLEdBQ2xCLEdBQUlELEVBQUUyTSxPQUFTMU0sRUFBRTBNLE9BR2IsT0FBUTRiLEdBQVV0b0IsRUFBR0QsR0FHekIsSUFBSXdvQixFQUF5QyxJQUF2QnZvQixFQUFFOEwsT0FBUy9MLEVBQUUrTCxTQUFnQjlMLEVBQUV5TSxRQUFVMU0sRUFBRTBNLFNBRTdEK2IsRUFBU3pvQixFQUFFOGpCLFFBQVF0UCxJQUFJZ1UsRUFBZ0IsVUFlM0MsUUFBU0EsR0FYTHZvQixFQUFJd29CLEVBQVMsR0FHSHhvQixFQUFJd29CLElBQVdBLEVBRmZ6b0IsRUFBRThqQixRQUFRdFAsSUFBSWdVLEVBQWlCLEVBQUcsWUFNbEN2b0IsRUFBSXdvQixJQUZKem9CLEVBQUU4akIsUUFBUXRQLElBQUlnVSxFQUFpQixFQUFHLFVBRVRDLE1BSUYsRUFNekMsU0FBUzU3QixLQUNMLE9BQU9YLEtBQUs0M0IsUUFBUWpqQixPQUFPLE1BQU1ELE9BQU8sb0NBRzVDLFNBQVM4bkIsR0FBWUMsR0FDakIsSUFBS3o4QixLQUFLbVcsVUFDTixPQUFPLEtBRVgsSUFBSXJCLEdBQXFCLElBQWYybkIsRUFDTnhtQixFQUFJbkIsRUFBTTlVLEtBQUs0M0IsUUFBUTlpQixNQUFROVUsS0FDbkMsT0FBSWlXLEVBQUU0SixPQUFTLEdBQUs1SixFQUFFNEosT0FBUyxLQUNwQmhFLEVBQ0g1RixFQUNBbkIsRUFDTSxpQ0FDQSxnQ0FHVmtFLEVBQVczRSxLQUFLbFYsVUFBVXE5QixhQUV0QjFuQixFQUNPOVUsS0FBSzA4QixTQUFTRixjQUVkLElBQUlub0IsS0FBS3JVLEtBQUt3VSxVQUErQixHQUFuQnhVLEtBQUtvM0IsWUFBbUIsS0FDcERvRixjQUNBNXlCLFFBQVEsSUFBS2lTLEVBQWE1RixFQUFHLE1BR25DNEYsRUFDSDVGLEVBQ0FuQixFQUFNLCtCQUFpQyw4QkFVL0MsU0FBUzZuQixLQUNMLElBQUszOEIsS0FBS21XLFVBQ04sTUFBTyxxQkFBdUJuVyxLQUFLNkQsR0FBSyxPQUU1QyxJQUVJK0gsRUFDQWlVLEVBQ0ErYyxFQUNBQyxFQUxBcmhCLEVBQU8sU0FDUHNoQixFQUFPLEdBY1gsT0FUSzk4QixLQUFLazVCLFlBQ04xZCxFQUE0QixJQUFyQnhiLEtBQUtvM0IsWUFBb0IsYUFBZSxtQkFDL0MwRixFQUFPLEtBRVhseEIsRUFBUyxJQUFNNFAsRUFBTyxNQUN0QnFFLEVBQU8sR0FBSzdmLEtBQUs2ZixRQUFVN2YsS0FBSzZmLFFBQVUsS0FBTyxPQUFTLFNBQzFEK2MsRUFBVyx3QkFDWEMsRUFBU0MsRUFBTyxPQUVUOThCLEtBQUswVSxPQUFPOUksRUFBU2lVLEVBQU8rYyxFQUFXQyxHQUdsRCxTQUFTbm9CLEdBQU9xb0IsR0FDUEEsSUFDREEsRUFBYy84QixLQUFLbzVCLFFBQ2IxbEIsRUFBTXNwQixpQkFDTnRwQixFQUFNdXBCLGVBRWhCLElBQUk1aUIsRUFBU3dCLEVBQWE3YixLQUFNKzhCLEdBQ2hDLE9BQU8vOEIsS0FBS3liLGFBQWF5aEIsV0FBVzdpQixHQUd4QyxTQUFTdlosR0FBS3E2QixFQUFNL2MsR0FDaEIsT0FDSXBlLEtBQUttVyxZQUNIK0IsRUFBU2lqQixJQUFTQSxFQUFLaGxCLFdBQWMrYyxHQUFZaUksR0FBTWhsQixXQUVsRHdmLEdBQWUsQ0FBRXRlLEdBQUlyWCxLQUFNYyxLQUFNcTZCLElBQ25DeG1CLE9BQU8zVSxLQUFLMlUsVUFDWndvQixVQUFVL2UsR0FFUnBlLEtBQUt5YixhQUFhTSxjQUlqQyxTQUFTcWhCLEdBQVFoZixHQUNiLE9BQU9wZSxLQUFLYyxLQUFLb3lCLEtBQWU5VSxHQUdwQyxTQUFTL0csR0FBRzhqQixFQUFNL2MsR0FDZCxPQUNJcGUsS0FBS21XLFlBQ0grQixFQUFTaWpCLElBQVNBLEVBQUtobEIsV0FBYytjLEdBQVlpSSxHQUFNaGxCLFdBRWxEd2YsR0FBZSxDQUFFNzBCLEtBQU1kLEtBQU1xWCxHQUFJOGpCLElBQ25DeG1CLE9BQU8zVSxLQUFLMlUsVUFDWndvQixVQUFVL2UsR0FFUnBlLEtBQUt5YixhQUFhTSxjQUlqQyxTQUFTc2hCLEdBQU1qZixHQUNYLE9BQU9wZSxLQUFLcVgsR0FBRzZiLEtBQWU5VSxHQU1sQyxTQUFTekosR0FBTy9VLEdBQ1osSUFBSTA5QixFQUVKLFlBQVkzNUIsSUFBUi9ELEVBQ09JLEtBQUs4WCxRQUFROFYsT0FHQyxPQURyQjBQLEVBQWdCdFAsR0FBVXB1QixNQUV0QkksS0FBSzhYLFFBQVV3bEIsR0FFWnQ5QixNQTFIZjBULEVBQU11cEIsY0FBZ0IsdUJBQ3RCdnBCLEVBQU1zcEIsaUJBQW1CLHlCQTZIekIsSUFBSTl2QixHQUFPcUwsRUFDUCxtSkFDQSxTQUFVM1ksR0FDTixZQUFZK0QsSUFBUi9ELEVBQ09JLEtBQUt5YixhQUVMemIsS0FBSzJVLE9BQU8vVSxNQUsvQixTQUFTNmIsS0FDTCxPQUFPemIsS0FBSzhYLFFBR2hCLElBQUl5bEIsR0FBZ0IsSUFDaEJDLEdBQWdCLEdBQUtELEdBQ3JCRSxHQUFjLEdBQUtELEdBQ25CRSxHQUFtQixRQUF3QkQsR0FHL0MsU0FBU0UsR0FBTUMsRUFBVUMsR0FDckIsT0FBU0QsRUFBV0MsRUFBV0EsR0FBV0EsRUFHOUMsU0FBU0MsR0FBaUI3ZixFQUFHaEksRUFBRzBILEdBRTVCLE9BQUlNLEVBQUksS0FBT0EsR0FBSyxFQUVULElBQUk1SixLQUFLNEosRUFBSSxJQUFLaEksRUFBRzBILEdBQUsrZixHQUUxQixJQUFJcnBCLEtBQUs0SixFQUFHaEksRUFBRzBILEdBQUduSixVQUlqQyxTQUFTdXBCLEdBQWU5ZixFQUFHaEksRUFBRzBILEdBRTFCLE9BQUlNLEVBQUksS0FBT0EsR0FBSyxFQUVUNUosS0FBS3dTLElBQUk1SSxFQUFJLElBQUtoSSxFQUFHMEgsR0FBSytmLEdBRTFCcnBCLEtBQUt3UyxJQUFJNUksRUFBR2hJLEVBQUcwSCxHQUk5QixTQUFTMmQsR0FBUXRjLEdBQ2IsSUFBSW1jLEVBQU02QyxFQUVWLFFBQWNyNkIsS0FEZHFiLEVBQVFELEdBQWVDLEtBQ2MsZ0JBQVZBLElBQTRCaGYsS0FBS21XLFVBQ3hELE9BQU9uVyxLQUtYLE9BRkFnK0IsRUFBY2grQixLQUFLNFgsT0FBU21tQixHQUFpQkQsR0FFckM5ZSxHQUNKLElBQUssT0FDRG1jLEVBQU82QyxFQUFZaCtCLEtBQUs2ZixPQUFRLEVBQUcsR0FDbkMsTUFDSixJQUFLLFVBQ0RzYixFQUFPNkMsRUFDSGgrQixLQUFLNmYsT0FDTDdmLEtBQUt3Z0IsUUFBV3hnQixLQUFLd2dCLFFBQVUsRUFDL0IsR0FFSixNQUNKLElBQUssUUFDRDJhLEVBQU82QyxFQUFZaCtCLEtBQUs2ZixPQUFRN2YsS0FBS3dnQixRQUFTLEdBQzlDLE1BQ0osSUFBSyxPQUNEMmEsRUFBTzZDLEVBQ0hoK0IsS0FBSzZmLE9BQ0w3ZixLQUFLd2dCLFFBQ0x4Z0IsS0FBS3lnQixPQUFTemdCLEtBQUt1bkIsV0FFdkIsTUFDSixJQUFLLFVBQ0Q0VCxFQUFPNkMsRUFDSGgrQixLQUFLNmYsT0FDTDdmLEtBQUt3Z0IsUUFDTHhnQixLQUFLeWdCLFFBQVV6Z0IsS0FBS2krQixhQUFlLElBRXZDLE1BQ0osSUFBSyxNQUNMLElBQUssT0FDRDlDLEVBQU82QyxFQUFZaCtCLEtBQUs2ZixPQUFRN2YsS0FBS3dnQixRQUFTeGdCLEtBQUt5Z0IsUUFDbkQsTUFDSixJQUFLLE9BQ0QwYSxFQUFPbjdCLEtBQUt5RCxHQUFHK1EsVUFDZjJtQixHQUFRd0MsR0FDSnhDLEdBQVFuN0IsS0FBSzRYLE9BQVMsRUFBSTVYLEtBQUtvM0IsWUFBY29HLElBQzdDQyxJQUVKLE1BQ0osSUFBSyxTQUNEdEMsRUFBT243QixLQUFLeUQsR0FBRytRLFVBQ2YybUIsR0FBUXdDLEdBQU14QyxFQUFNcUMsSUFDcEIsTUFDSixJQUFLLFNBQ0RyQyxFQUFPbjdCLEtBQUt5RCxHQUFHK1EsVUFDZjJtQixHQUFRd0MsR0FBTXhDLEVBQU1vQyxJQU01QixPQUZBdjlCLEtBQUt5RCxHQUFHbzBCLFFBQVFzRCxHQUNoQnpuQixFQUFNdUUsYUFBYWpZLE1BQU0sR0FDbEJBLEtBR1gsU0FBU3k3QixHQUFNemMsR0FDWCxJQUFJbWMsRUFBTTZDLEVBRVYsUUFBY3I2QixLQURkcWIsRUFBUUQsR0FBZUMsS0FDYyxnQkFBVkEsSUFBNEJoZixLQUFLbVcsVUFDeEQsT0FBT25XLEtBS1gsT0FGQWcrQixFQUFjaCtCLEtBQUs0WCxPQUFTbW1CLEdBQWlCRCxHQUVyQzllLEdBQ0osSUFBSyxPQUNEbWMsRUFBTzZDLEVBQVloK0IsS0FBSzZmLE9BQVMsRUFBRyxFQUFHLEdBQUssRUFDNUMsTUFDSixJQUFLLFVBQ0RzYixFQUNJNkMsRUFDSWgrQixLQUFLNmYsT0FDTDdmLEtBQUt3Z0IsUUFBV3hnQixLQUFLd2dCLFFBQVUsRUFBSyxFQUNwQyxHQUNBLEVBQ1IsTUFDSixJQUFLLFFBQ0QyYSxFQUFPNkMsRUFBWWgrQixLQUFLNmYsT0FBUTdmLEtBQUt3Z0IsUUFBVSxFQUFHLEdBQUssRUFDdkQsTUFDSixJQUFLLE9BQ0QyYSxFQUNJNkMsRUFDSWgrQixLQUFLNmYsT0FDTDdmLEtBQUt3Z0IsUUFDTHhnQixLQUFLeWdCLE9BQVN6Z0IsS0FBS3VuQixVQUFZLEdBQy9CLEVBQ1IsTUFDSixJQUFLLFVBQ0Q0VCxFQUNJNkMsRUFDSWgrQixLQUFLNmYsT0FDTDdmLEtBQUt3Z0IsUUFDTHhnQixLQUFLeWdCLFFBQVV6Z0IsS0FBS2krQixhQUFlLEdBQUssR0FDeEMsRUFDUixNQUNKLElBQUssTUFDTCxJQUFLLE9BQ0Q5QyxFQUFPNkMsRUFBWWgrQixLQUFLNmYsT0FBUTdmLEtBQUt3Z0IsUUFBU3hnQixLQUFLeWdCLE9BQVMsR0FBSyxFQUNqRSxNQUNKLElBQUssT0FDRDBhLEVBQU9uN0IsS0FBS3lELEdBQUcrUSxVQUNmMm1CLEdBQ0lzQyxHQUNBRSxHQUNJeEMsR0FBUW43QixLQUFLNFgsT0FBUyxFQUFJNVgsS0FBS28zQixZQUFjb0csSUFDN0NDLElBRUosRUFDSixNQUNKLElBQUssU0FDRHRDLEVBQU9uN0IsS0FBS3lELEdBQUcrUSxVQUNmMm1CLEdBQVFxQyxHQUFnQkcsR0FBTXhDLEVBQU1xQyxJQUFpQixFQUNyRCxNQUNKLElBQUssU0FDRHJDLEVBQU9uN0IsS0FBS3lELEdBQUcrUSxVQUNmMm1CLEdBQVFvQyxHQUFnQkksR0FBTXhDLEVBQU1vQyxJQUFpQixFQU03RCxPQUZBdjlCLEtBQUt5RCxHQUFHbzBCLFFBQVFzRCxHQUNoQnpuQixFQUFNdUUsYUFBYWpZLE1BQU0sR0FDbEJBLEtBR1gsU0FBU3dVLEtBQ0wsT0FBT3hVLEtBQUt5RCxHQUFHK1EsVUFBa0MsS0FBckJ4VSxLQUFLNlgsU0FBVyxHQUdoRCxTQUFTcW1CLEtBQ0wsT0FBT3A0QixLQUFLa2EsTUFBTWhnQixLQUFLd1UsVUFBWSxLQUd2QyxTQUFTa29CLEtBQ0wsT0FBTyxJQUFJcm9CLEtBQUtyVSxLQUFLd1UsV0FHekIsU0FBU3lrQixLQUNMLElBQUloakIsRUFBSWpXLEtBQ1IsTUFBTyxDQUNIaVcsRUFBRTRKLE9BQ0Y1SixFQUFFdUssUUFDRnZLLEVBQUV3SyxPQUNGeEssRUFBRTBkLE9BQ0YxZCxFQUFFdWUsU0FDRnZlLEVBQUV3ZSxTQUNGeGUsRUFBRXllLGVBSVYsU0FBU3lKLEtBQ0wsSUFBSWxvQixFQUFJalcsS0FDUixNQUFPLENBQ0g4MUIsTUFBTzdmLEVBQUU0SixPQUNUZ0UsT0FBUTVOLEVBQUV1SyxRQUNWQyxLQUFNeEssRUFBRXdLLE9BQ1IrSyxNQUFPdlYsRUFBRXVWLFFBQ1RHLFFBQVMxVixFQUFFMFYsVUFDWEssUUFBUy9WLEVBQUUrVixVQUNYb0ssYUFBY25nQixFQUFFbWdCLGdCQUl4QixTQUFTZ0ksS0FFTCxPQUFPcCtCLEtBQUttVyxVQUFZblcsS0FBS3c4QixjQUFnQixLQUdqRCxTQUFTNkIsS0FDTCxPQUFPbG9CLEVBQVFuVyxNQUduQixTQUFTcytCLEtBQ0wsT0FBTy9wQixFQUFPLEdBQUl5QixFQUFnQmhXLE9BR3RDLFNBQVN1K0IsS0FDTCxPQUFPdm9CLEVBQWdCaFcsTUFBTW1WLFNBR2pDLFNBQVNxcEIsS0FDTCxNQUFPLENBQ0h2ekIsTUFBT2pMLEtBQUs2RCxHQUNaNlEsT0FBUTFVLEtBQUt5WCxHQUNiOUMsT0FBUTNVLEtBQUs4WCxRQUNiaWQsTUFBTy8wQixLQUFLNFgsT0FDWmhELE9BQVE1VSxLQUFLMlcsU0F1RHJCLFNBQVM4bkIsR0FBV3hvQixFQUFHdkIsR0FDbkIsSUFBSWxWLEVBQ0Fxd0IsRUFDQXBQLEVBQ0FpZSxFQUFPMStCLEtBQUsyK0IsT0FBUzNRLEdBQVUsTUFBTTJRLE1BQ3pDLElBQUtuL0IsRUFBSSxFQUFHcXdCLEVBQUk2TyxFQUFLaC9CLE9BQVFGLEVBQUlxd0IsSUFBS3J3QixFQVNsQyxPQVBTLGlCQURNay9CLEVBQUtsL0IsR0FBR28vQixRQUdmbmUsRUFBTy9NLEVBQU1nckIsRUFBS2wvQixHQUFHby9CLE9BQU90RCxRQUFRLE9BQ3BDb0QsRUFBS2wvQixHQUFHby9CLE1BQVFuZSxFQUFLak0sa0JBSWRrcUIsRUFBS2wvQixHQUFHcS9CLE9BQ25CLElBQUssWUFDREgsRUFBS2wvQixHQUFHcS9CLE1BQVEsRUFBQSxFQUNoQixNQUNKLElBQUssU0FFRHBlLEVBQU8vTSxFQUFNZ3JCLEVBQUtsL0IsR0FBR3EvQixPQUFPdkQsUUFBUSxPQUFPOW1CLFVBQzNDa3FCLEVBQUtsL0IsR0FBR3EvQixNQUFRcGUsRUFBS2pNLFVBSWpDLE9BQU9rcUIsRUFHWCxTQUFTSSxHQUFnQkMsRUFBU3JxQixFQUFRRSxHQUN0QyxJQUFJcFYsRUFDQXF3QixFQUVBaHZCLEVBQ0FxdEIsRUFDQThRLEVBSEFOLEVBQU8xK0IsS0FBSzArQixPQU1oQixJQUZBSyxFQUFVQSxFQUFRbmlCLGNBRWJwZCxFQUFJLEVBQUdxd0IsRUFBSTZPLEVBQUtoL0IsT0FBUUYsRUFBSXF3QixJQUFLcndCLEVBS2xDLEdBSkFxQixFQUFPNjlCLEVBQUtsL0IsR0FBR3FCLEtBQUsrYixjQUNwQnNSLEVBQU93USxFQUFLbC9CLEdBQUcwdUIsS0FBS3RSLGNBQ3BCb2lCLEVBQVNOLEVBQUtsL0IsR0FBR3cvQixPQUFPcGlCLGNBRXBCaEksRUFDQSxPQUFRRixHQUNKLElBQUssSUFDTCxJQUFLLEtBQ0wsSUFBSyxNQUNELEdBQUl3WixJQUFTNlEsRUFDVCxPQUFPTCxFQUFLbC9CLEdBRWhCLE1BRUosSUFBSyxPQUNELEdBQUlxQixJQUFTaytCLEVBQ1QsT0FBT0wsRUFBS2wvQixHQUVoQixNQUVKLElBQUssUUFDRCxHQUFJdy9CLElBQVdELEVBQ1gsT0FBT0wsRUFBS2wvQixRQUlyQixHQUFJLENBQUNxQixFQUFNcXRCLEVBQU04USxHQUFRbDNCLFFBQVFpM0IsSUFBWSxFQUNoRCxPQUFPTCxFQUFLbC9CLEdBS3hCLFNBQVN5L0IsR0FBc0JycEIsRUFBS2lLLEdBQ2hDLElBQUlxZixFQUFNdHBCLEVBQUlncEIsT0FBU2hwQixFQUFJaXBCLE1BQVEsR0FBTSxFQUN6QyxZQUFhbDdCLElBQVRrYyxFQUNPbk0sRUFBTWtDLEVBQUlncEIsT0FBTy9lLE9BRWpCbk0sRUFBTWtDLEVBQUlncEIsT0FBTy9lLFFBQVVBLEVBQU9qSyxFQUFJc2hCLFFBQVVnSSxFQUkvRCxTQUFTQyxLQUNMLElBQUkzL0IsRUFDQXF3QixFQUNBdFksRUFDQW1uQixFQUFPMStCLEtBQUt5YixhQUFhaWpCLE9BQzdCLElBQUtsL0IsRUFBSSxFQUFHcXdCLEVBQUk2TyxFQUFLaC9CLE9BQVFGLEVBQUlxd0IsSUFBS3J3QixFQUFHLENBSXJDLEdBRkErWCxFQUFNdlgsS0FBSzQzQixRQUFRMEQsUUFBUSxPQUFPOW1CLFVBRTlCa3FCLEVBQUtsL0IsR0FBR28vQixPQUFTcm5CLEdBQU9BLEdBQU9tbkIsRUFBS2wvQixHQUFHcS9CLE1BQ3ZDLE9BQU9ILEVBQUtsL0IsR0FBR3FCLEtBRW5CLEdBQUk2OUIsRUFBS2wvQixHQUFHcS9CLE9BQVN0bkIsR0FBT0EsR0FBT21uQixFQUFLbC9CLEdBQUdvL0IsTUFDdkMsT0FBT0YsRUFBS2wvQixHQUFHcUIsS0FJdkIsTUFBTyxHQUdYLFNBQVN1K0IsS0FDTCxJQUFJNS9CLEVBQ0Fxd0IsRUFDQXRZLEVBQ0FtbkIsRUFBTzErQixLQUFLeWIsYUFBYWlqQixPQUM3QixJQUFLbC9CLEVBQUksRUFBR3F3QixFQUFJNk8sRUFBS2gvQixPQUFRRixFQUFJcXdCLElBQUtyd0IsRUFBRyxDQUlyQyxHQUZBK1gsRUFBTXZYLEtBQUs0M0IsUUFBUTBELFFBQVEsT0FBTzltQixVQUU5QmtxQixFQUFLbC9CLEdBQUdvL0IsT0FBU3JuQixHQUFPQSxHQUFPbW5CLEVBQUtsL0IsR0FBR3EvQixNQUN2QyxPQUFPSCxFQUFLbC9CLEdBQUd3L0IsT0FFbkIsR0FBSU4sRUFBS2wvQixHQUFHcS9CLE9BQVN0bkIsR0FBT0EsR0FBT21uQixFQUFLbC9CLEdBQUdvL0IsTUFDdkMsT0FBT0YsRUFBS2wvQixHQUFHdy9CLE9BSXZCLE1BQU8sR0FHWCxTQUFTSyxLQUNMLElBQUk3L0IsRUFDQXF3QixFQUNBdFksRUFDQW1uQixFQUFPMStCLEtBQUt5YixhQUFhaWpCLE9BQzdCLElBQUtsL0IsRUFBSSxFQUFHcXdCLEVBQUk2TyxFQUFLaC9CLE9BQVFGLEVBQUlxd0IsSUFBS3J3QixFQUFHLENBSXJDLEdBRkErWCxFQUFNdlgsS0FBSzQzQixRQUFRMEQsUUFBUSxPQUFPOW1CLFVBRTlCa3FCLEVBQUtsL0IsR0FBR28vQixPQUFTcm5CLEdBQU9BLEdBQU9tbkIsRUFBS2wvQixHQUFHcS9CLE1BQ3ZDLE9BQU9ILEVBQUtsL0IsR0FBRzB1QixLQUVuQixHQUFJd1EsRUFBS2wvQixHQUFHcS9CLE9BQVN0bkIsR0FBT0EsR0FBT21uQixFQUFLbC9CLEdBQUdvL0IsTUFDdkMsT0FBT0YsRUFBS2wvQixHQUFHMHVCLEtBSXZCLE1BQU8sR0FHWCxTQUFTb1IsS0FDTCxJQUFJOS9CLEVBQ0Fxd0IsRUFDQXFQLEVBQ0EzbkIsRUFDQW1uQixFQUFPMStCLEtBQUt5YixhQUFhaWpCLE9BQzdCLElBQUtsL0IsRUFBSSxFQUFHcXdCLEVBQUk2TyxFQUFLaC9CLE9BQVFGLEVBQUlxd0IsSUFBS3J3QixFQU1sQyxHQUxBMC9CLEVBQU1SLEVBQUtsL0IsR0FBR28vQixPQUFTRixFQUFLbC9CLEdBQUdxL0IsTUFBUSxHQUFNLEVBRzdDdG5CLEVBQU12WCxLQUFLNDNCLFFBQVEwRCxRQUFRLE9BQU85bUIsVUFHN0JrcUIsRUFBS2wvQixHQUFHby9CLE9BQVNybkIsR0FBT0EsR0FBT21uQixFQUFLbC9CLEdBQUdxL0IsT0FDdkNILEVBQUtsL0IsR0FBR3EvQixPQUFTdG5CLEdBQU9BLEdBQU9tbkIsRUFBS2wvQixHQUFHby9CLE1BRXhDLE9BQ0s1K0IsS0FBSzZmLE9BQVNuTSxFQUFNZ3JCLEVBQUtsL0IsR0FBR28vQixPQUFPL2UsUUFBVXFmLEVBQzlDUixFQUFLbC9CLEdBQUcwM0IsT0FLcEIsT0FBT2wzQixLQUFLNmYsT0FHaEIsU0FBUzBmLEdBQWNwZCxHQUluQixPQUhLdE8sRUFBVzdULEtBQU0sbUJBQ2xCdy9CLEdBQWlCMS9CLEtBQUtFLE1BRW5CbWlCLEVBQVduaUIsS0FBS3kvQixlQUFpQnovQixLQUFLMC9CLFdBR2pELFNBQVNDLEdBQWN4ZCxHQUluQixPQUhLdE8sRUFBVzdULEtBQU0sbUJBQ2xCdy9CLEdBQWlCMS9CLEtBQUtFLE1BRW5CbWlCLEVBQVduaUIsS0FBSzQvQixlQUFpQjUvQixLQUFLMC9CLFdBR2pELFNBQVNHLEdBQWdCMWQsR0FJckIsT0FIS3RPLEVBQVc3VCxLQUFNLHFCQUNsQncvQixHQUFpQjEvQixLQUFLRSxNQUVuQm1pQixFQUFXbmlCLEtBQUs4L0IsaUJBQW1COS9CLEtBQUswL0IsV0FHbkQsU0FBU0ssR0FBYTVkLEVBQVV4TixHQUM1QixPQUFPQSxFQUFPZ3JCLGNBQWN4ZCxHQUdoQyxTQUFTNmQsR0FBYTdkLEVBQVV4TixHQUM1QixPQUFPQSxFQUFPNHFCLGNBQWNwZCxHQUdoQyxTQUFTOGQsR0FBZTlkLEVBQVV4TixHQUM5QixPQUFPQSxFQUFPa3JCLGdCQUFnQjFkLEdBR2xDLFNBQVMrZCxHQUFvQi9kLEVBQVV4TixHQUNuQyxPQUFPQSxFQUFPd3JCLHNCQUF3QnplLEdBRzFDLFNBQVM4ZCxLQUNMLElBSUloZ0MsRUFDQXF3QixFQUxBdVEsRUFBYSxHQUNiQyxFQUFhLEdBQ2JDLEVBQWUsR0FDZnBhLEVBQWMsR0FHZHdZLEVBQU8xK0IsS0FBSzArQixPQUVoQixJQUFLbC9CLEVBQUksRUFBR3F3QixFQUFJNk8sRUFBS2gvQixPQUFRRixFQUFJcXdCLElBQUtyd0IsRUFDbEM2Z0MsRUFBV3I4QixLQUFLc2UsR0FBWW9jLEVBQUtsL0IsR0FBR3FCLE9BQ3BDdS9CLEVBQVdwOEIsS0FBS3NlLEdBQVlvYyxFQUFLbC9CLEdBQUcwdUIsT0FDcENvUyxFQUFhdDhCLEtBQUtzZSxHQUFZb2MsRUFBS2wvQixHQUFHdy9CLFNBRXRDOVksRUFBWWxpQixLQUFLc2UsR0FBWW9jLEVBQUtsL0IsR0FBR3FCLE9BQ3JDcWxCLEVBQVlsaUIsS0FBS3NlLEdBQVlvYyxFQUFLbC9CLEdBQUcwdUIsT0FDckNoSSxFQUFZbGlCLEtBQUtzZSxHQUFZb2MsRUFBS2wvQixHQUFHdy9CLFNBR3pDaC9CLEtBQUswL0IsV0FBYSxJQUFJNzFCLE9BQU8sS0FBT3FjLEVBQVl6YSxLQUFLLEtBQU8sSUFBSyxLQUNqRXpMLEtBQUt5L0IsZUFBaUIsSUFBSTUxQixPQUFPLEtBQU93MkIsRUFBVzUwQixLQUFLLEtBQU8sSUFBSyxLQUNwRXpMLEtBQUs0L0IsZUFBaUIsSUFBSS8xQixPQUFPLEtBQU91MkIsRUFBVzMwQixLQUFLLEtBQU8sSUFBSyxLQUNwRXpMLEtBQUs4L0IsaUJBQW1CLElBQUlqMkIsT0FDeEIsS0FBT3kyQixFQUFhNzBCLEtBQUssS0FBTyxJQUNoQyxLQWNSLFNBQVM4MEIsR0FBdUJsbEIsRUFBT21sQixHQUNuQ3BsQixFQUFlLEVBQUcsQ0FBQ0MsRUFBT0EsRUFBTTNiLFFBQVMsRUFBRzhnQyxHQTRDaEQsU0FBU0MsR0FBZXgxQixHQUNwQixPQUFPeTFCLEdBQXFCNWdDLEtBQ3hCRSxLQUNBaUwsRUFDQWpMLEtBQUtzbkIsT0FDTHRuQixLQUFLdW5CLFVBQ0x2bkIsS0FBS3liLGFBQWF3TSxNQUFNaEIsSUFDeEJqbkIsS0FBS3liLGFBQWF3TSxNQUFNZixLQUloQyxTQUFTeVosR0FBa0IxMUIsR0FDdkIsT0FBT3kxQixHQUFxQjVnQyxLQUN4QkUsS0FDQWlMLEVBQ0FqTCxLQUFLazJCLFVBQ0xsMkIsS0FBS2krQixhQUNMLEVBQ0EsR0FJUixTQUFTMkMsS0FDTCxPQUFPOVksR0FBWTluQixLQUFLNmYsT0FBUSxFQUFHLEdBR3ZDLFNBQVNnaEIsS0FDTCxPQUFPL1ksR0FBWTluQixLQUFLOGdDLGNBQWUsRUFBRyxHQUc5QyxTQUFTQyxLQUNMLElBQUlDLEVBQVdoaEMsS0FBS3liLGFBQWF3TSxNQUNqQyxPQUFPSCxHQUFZOW5CLEtBQUs2ZixPQUFRbWhCLEVBQVMvWixJQUFLK1osRUFBUzlaLEtBRzNELFNBQVMrWixLQUNMLElBQUlELEVBQVdoaEMsS0FBS3liLGFBQWF3TSxNQUNqQyxPQUFPSCxHQUFZOW5CLEtBQUsyeUIsV0FBWXFPLEVBQVMvWixJQUFLK1osRUFBUzlaLEtBRy9ELFNBQVN3WixHQUFxQnoxQixFQUFPcWMsRUFBTUMsRUFBU04sRUFBS0MsR0FDckQsSUFBSWdhLEVBQ0osT0FBYSxNQUFUajJCLEVBQ08wYyxHQUFXM25CLEtBQU1pbkIsRUFBS0MsR0FBS3JILE1BRzlCeUgsR0FESjRaLEVBQWNwWixHQUFZN2MsRUFBT2djLEVBQUtDLE1BRWxDSSxFQUFPNFosR0FFSkMsR0FBV3JoQyxLQUFLRSxLQUFNaUwsRUFBT3FjLEVBQU1DLEVBQVNOLEVBQUtDLElBSWhFLFNBQVNpYSxHQUFXeE8sRUFBVXJMLEVBQU1DLEVBQVNOLEVBQUtDLEdBQzlDLElBQUlrYSxFQUFnQi9aLEdBQW1Cc0wsRUFBVXJMLEVBQU1DLEVBQVNOLEVBQUtDLEdBQ2pFekcsRUFBT21HLEdBQWN3YSxFQUFjdmhCLEtBQU0sRUFBR3VoQixFQUFjMVosV0FLOUQsT0FIQTFuQixLQUFLNmYsS0FBS1ksRUFBS3FHLGtCQUNmOW1CLEtBQUt3Z0IsTUFBTUMsRUFBS3VSLGVBQ2hCaHlCLEtBQUt5Z0IsS0FBS0EsRUFBS3dSLGNBQ1JqeUIsS0F3QlgsU0FBU3FoQyxHQUFjcDJCLEdBQ25CLE9BQWdCLE1BQVRBLEVBQ0RuRixLQUFLaWEsTUFBTS9mLEtBQUt3Z0IsUUFBVSxHQUFLLEdBQy9CeGdCLEtBQUt3Z0IsTUFBb0IsR0FBYnZWLEVBQVEsR0FBVWpMLEtBQUt3Z0IsUUFBVSxHQXZhdkRwRixFQUFlLElBQUssRUFBRyxFQUFHLFdBQzFCQSxFQUFlLEtBQU0sRUFBRyxFQUFHLFdBQzNCQSxFQUFlLE1BQU8sRUFBRyxFQUFHLFdBQzVCQSxFQUFlLE9BQVEsRUFBRyxFQUFHLFdBQzdCQSxFQUFlLFFBQVMsRUFBRyxFQUFHLGFBRTlCQSxFQUFlLElBQUssQ0FBQyxJQUFLLEdBQUksS0FBTSxXQUNwQ0EsRUFBZSxJQUFLLENBQUMsS0FBTSxHQUFJLEVBQUcsV0FDbENBLEVBQWUsSUFBSyxDQUFDLE1BQU8sR0FBSSxFQUFHLFdBQ25DQSxFQUFlLElBQUssQ0FBQyxPQUFRLEdBQUksRUFBRyxXQUVwQzRHLEdBQWMsSUFBSytkLElBQ25CL2QsR0FBYyxLQUFNK2QsSUFDcEIvZCxHQUFjLE1BQU8rZCxJQUNyQi9kLEdBQWMsT0FBUWdlLElBQ3RCaGUsR0FBYyxRQUFTaWUsSUFFdkJ0ZCxHQUFjLENBQUMsSUFBSyxLQUFNLE1BQU8sT0FBUSxVQUFVLFNBQy9DMVgsRUFDQTJRLEVBQ0E1RCxFQUNBcUQsR0FFQSxJQUFJekYsRUFBTW9DLEVBQU9GLFFBQVF3cEIsVUFBVXIyQixFQUFPb1EsRUFBT3JELEVBQU9yQixTQUNwRGYsRUFDQUksRUFBZ0JnQyxHQUFRcEMsSUFBTUEsRUFFOUJJLEVBQWdCZ0MsR0FBUTFDLFdBQWFySyxLQUk3QytXLEdBQWMsSUFBS04sSUFDbkJNLEdBQWMsS0FBTU4sSUFDcEJNLEdBQWMsTUFBT04sSUFDckJNLEdBQWMsT0FBUU4sSUFDdEJNLEdBQWMsS0FBTWtlLElBRXBCdmQsR0FBYyxDQUFDLElBQUssS0FBTSxNQUFPLFFBQVNLLElBQzFDTCxHQUFjLENBQUMsT0FBTyxTQUFVMVgsRUFBTzJRLEVBQU81RCxFQUFRcUQsR0FDbEQsSUFBSTdULEVBQ0F3USxFQUFPRixRQUFRcW9CLHVCQUNmMzRCLEVBQVF5RCxFQUFNekQsTUFBTXdRLEVBQU9GLFFBQVFxb0IsdUJBR25Dbm9CLEVBQU9GLFFBQVF5cEIsb0JBQ2YzbEIsRUFBTW9ILElBQVFoTCxFQUFPRixRQUFReXBCLG9CQUFvQnQyQixFQUFPekQsR0FFeERvVSxFQUFNb0gsSUFBUXFELFNBQVNwYixFQUFPLE9BNE90Q21RLEVBQWUsRUFBRyxDQUFDLEtBQU0sR0FBSSxHQUFHLFdBQzVCLE9BQU9wYixLQUFLMnlCLFdBQWEsT0FHN0J2WCxFQUFlLEVBQUcsQ0FBQyxLQUFNLEdBQUksR0FBRyxXQUM1QixPQUFPcGIsS0FBSzhnQyxjQUFnQixPQU9oQ1AsR0FBdUIsT0FBUSxZQUMvQkEsR0FBdUIsUUFBUyxZQUNoQ0EsR0FBdUIsT0FBUSxlQUMvQkEsR0FBdUIsUUFBUyxlQUloQzVoQixHQUFhLFdBQVksTUFDekJBLEdBQWEsY0FBZSxNQUk1QlcsR0FBZ0IsV0FBWSxHQUM1QkEsR0FBZ0IsY0FBZSxHQUkvQjBDLEdBQWMsSUFBS0wsSUFDbkJLLEdBQWMsSUFBS0wsSUFDbkJLLEdBQWMsS0FBTVosR0FBV0osSUFDL0JnQixHQUFjLEtBQU1aLEdBQVdKLElBQy9CZ0IsR0FBYyxPQUFRUixHQUFXTixJQUNqQ2MsR0FBYyxPQUFRUixHQUFXTixJQUNqQ2MsR0FBYyxRQUFTUCxHQUFXTixJQUNsQ2EsR0FBYyxRQUFTUCxHQUFXTixJQUVsQ3lCLEdBQWtCLENBQUMsT0FBUSxRQUFTLE9BQVEsVUFBVSxTQUNsRDNYLEVBQ0FxYyxFQUNBdFAsRUFDQXFELEdBRUFpTSxFQUFLak0sRUFBTU4sT0FBTyxFQUFHLElBQU1rRixHQUFNaFYsTUFHckMyWCxHQUFrQixDQUFDLEtBQU0sT0FBTyxTQUFVM1gsRUFBT3FjLEVBQU10UCxFQUFRcUQsR0FDM0RpTSxFQUFLak0sR0FBUzNILEVBQU0wUyxrQkFBa0JuYixNQXNFMUNtUSxFQUFlLElBQUssRUFBRyxLQUFNLFdBSTdCdUQsR0FBYSxVQUFXLEtBSXhCVyxHQUFnQixVQUFXLEdBSTNCMEMsR0FBYyxJQUFLakIsSUFDbkI0QixHQUFjLEtBQUssU0FBVTFYLEVBQU8yUSxHQUNoQ0EsRUFBTXFILElBQThCLEdBQXBCaEQsR0FBTWhWLEdBQVMsTUFhbkNtUSxFQUFlLElBQUssQ0FBQyxLQUFNLEdBQUksS0FBTSxRQUlyQ3VELEdBQWEsT0FBUSxLQUdyQlcsR0FBZ0IsT0FBUSxHQUl4QjBDLEdBQWMsSUFBS1osSUFDbkJZLEdBQWMsS0FBTVosR0FBV0osSUFDL0JnQixHQUFjLE1BQU0sU0FBVUcsRUFBVXhOLEdBRXBDLE9BQU93TixFQUNEeE4sRUFBTzBFLHlCQUEyQjFFLEVBQU8yRSxjQUN6QzNFLEVBQU95RSxrQ0FHakJ1SixHQUFjLENBQUMsSUFBSyxNQUFPTyxJQUMzQlAsR0FBYyxNQUFNLFNBQVUxWCxFQUFPMlEsR0FDakNBLEVBQU1zSCxJQUFRakQsR0FBTWhWLEVBQU16RCxNQUFNNFosSUFBVyxPQUsvQyxJQUFJb2dCLEdBQW1CbmhCLEdBQVcsUUFBUSxHQXlCMUMsU0FBU29oQixHQUFnQngyQixHQUNyQixJQUFJeWMsRUFDQTVoQixLQUFLNndCLE9BQ0EzMkIsS0FBSzQzQixRQUFRMEQsUUFBUSxPQUFTdDdCLEtBQUs0M0IsUUFBUTBELFFBQVEsU0FBVyxPQUMvRCxFQUNSLE9BQWdCLE1BQVRyd0IsRUFBZ0J5YyxFQUFZMW5CLEtBQUtzb0IsSUFBSXJkLEVBQVF5YyxFQUFXLEtBMUJuRXRNLEVBQWUsTUFBTyxDQUFDLE9BQVEsR0FBSSxPQUFRLGFBSTNDdUQsR0FBYSxZQUFhLE9BRzFCVyxHQUFnQixZQUFhLEdBSTdCMEMsR0FBYyxNQUFPVCxJQUNyQlMsR0FBYyxPQUFRZixJQUN0QjBCLEdBQWMsQ0FBQyxNQUFPLFNBQVMsU0FBVTFYLEVBQU8yUSxFQUFPNUQsR0FDbkRBLEVBQU95YSxXQUFheFMsR0FBTWhWLE1BaUI5Qm1RLEVBQWUsSUFBSyxDQUFDLEtBQU0sR0FBSSxFQUFHLFVBSWxDdUQsR0FBYSxTQUFVLEtBSXZCVyxHQUFnQixTQUFVLElBSTFCMEMsR0FBYyxJQUFLWixJQUNuQlksR0FBYyxLQUFNWixHQUFXSixJQUMvQjJCLEdBQWMsQ0FBQyxJQUFLLE1BQU9TLElBSTNCLElBQUlzZSxHQUFlcmhCLEdBQVcsV0FBVyxHQUl6Q2pGLEVBQWUsSUFBSyxDQUFDLEtBQU0sR0FBSSxFQUFHLFVBSWxDdUQsR0FBYSxTQUFVLEtBSXZCVyxHQUFnQixTQUFVLElBSTFCMEMsR0FBYyxJQUFLWixJQUNuQlksR0FBYyxLQUFNWixHQUFXSixJQUMvQjJCLEdBQWMsQ0FBQyxJQUFLLE1BQU9VLElBSTNCLElBOENJaEksR0FBT3NtQixHQTlDUEMsR0FBZXZoQixHQUFXLFdBQVcsR0ErQ3pDLElBM0NBakYsRUFBZSxJQUFLLEVBQUcsR0FBRyxXQUN0QixTQUFVcGIsS0FBSzAwQixjQUFnQixRQUduQ3RaLEVBQWUsRUFBRyxDQUFDLEtBQU0sR0FBSSxHQUFHLFdBQzVCLFNBQVVwYixLQUFLMDBCLGNBQWdCLE9BR25DdFosRUFBZSxFQUFHLENBQUMsTUFBTyxHQUFJLEVBQUcsZUFDakNBLEVBQWUsRUFBRyxDQUFDLE9BQVEsR0FBSSxHQUFHLFdBQzlCLE9BQTRCLEdBQXJCcGIsS0FBSzAwQixpQkFFaEJ0WixFQUFlLEVBQUcsQ0FBQyxRQUFTLEdBQUksR0FBRyxXQUMvQixPQUE0QixJQUFyQnBiLEtBQUswMEIsaUJBRWhCdFosRUFBZSxFQUFHLENBQUMsU0FBVSxHQUFJLEdBQUcsV0FDaEMsT0FBNEIsSUFBckJwYixLQUFLMDBCLGlCQUVoQnRaLEVBQWUsRUFBRyxDQUFDLFVBQVcsR0FBSSxHQUFHLFdBQ2pDLE9BQTRCLElBQXJCcGIsS0FBSzAwQixpQkFFaEJ0WixFQUFlLEVBQUcsQ0FBQyxXQUFZLEdBQUksR0FBRyxXQUNsQyxPQUE0QixJQUFyQnBiLEtBQUswMEIsaUJBRWhCdFosRUFBZSxFQUFHLENBQUMsWUFBYSxHQUFJLEdBQUcsV0FDbkMsT0FBNEIsSUFBckJwYixLQUFLMDBCLGlCQUtoQi9WLEdBQWEsY0FBZSxNQUk1QlcsR0FBZ0IsY0FBZSxJQUkvQjBDLEdBQWMsSUFBS1QsR0FBV1IsSUFDOUJpQixHQUFjLEtBQU1ULEdBQVdQLElBQy9CZ0IsR0FBYyxNQUFPVCxHQUFXTixJQUczQjVGLEdBQVEsT0FBUUEsR0FBTTNiLFFBQVUsRUFBRzJiLElBQVMsSUFDN0MyRyxHQUFjM0csR0FBT3FHLElBR3pCLFNBQVNtZ0IsR0FBUTUyQixFQUFPMlEsR0FDcEJBLEVBQU0wSCxJQUFlckQsR0FBdUIsS0FBaEIsS0FBT2hWLElBR3ZDLElBQUtvUSxHQUFRLElBQUtBLEdBQU0zYixRQUFVLEVBQUcyYixJQUFTLElBQzFDc0gsR0FBY3RILEdBQU93bUIsSUFZekIsU0FBU0MsS0FDTCxPQUFPOWhDLEtBQUs0WCxPQUFTLE1BQVEsR0FHakMsU0FBU21xQixLQUNMLE9BQU8vaEMsS0FBSzRYLE9BQVMsNkJBQStCLEdBZHhEK3BCLEdBQW9CdGhCLEdBQVcsZ0JBQWdCLEdBSS9DakYsRUFBZSxJQUFLLEVBQUcsRUFBRyxZQUMxQkEsRUFBZSxLQUFNLEVBQUcsRUFBRyxZQVkzQixJQUFJNG1CLEdBQVFqcUIsRUFBTzVZLFVBd0duQixTQUFTOGlDLEdBQVdoM0IsR0FDaEIsT0FBT2lvQixHQUFvQixJQUFSam9CLEdBR3ZCLFNBQVNpM0IsS0FDTCxPQUFPaFAsR0FBWW56QixNQUFNLEtBQU1OLFdBQVcwaUMsWUFHOUMsU0FBU0MsR0FBbUIvakIsR0FDeEIsT0FBT0EsRUEvR1gyakIsR0FBTTFaLElBQU1BLEdBQ1owWixHQUFNOW5CLFNBQVdnaEIsR0FDakI4RyxHQUFNcEssTUFBUUEsR0FDZG9LLEdBQU12akIsS0FBT0EsR0FDYnVqQixHQUFNdkcsTUFBUUEsR0FDZHVHLEdBQU10dEIsT0FBU0EsR0FDZnN0QixHQUFNbGhDLEtBQU9BLEdBQ2JraEMsR0FBTTVFLFFBQVVBLEdBQ2hCNEUsR0FBTTNxQixHQUFLQSxHQUNYMnFCLEdBQU0zRSxNQUFRQSxHQUNkMkUsR0FBTXoyQixJQUFNb1YsR0FDWnFoQixHQUFNekQsVUFBWUEsR0FDbEJ5RCxHQUFNbEksUUFBVUEsR0FDaEJrSSxHQUFNakksU0FBV0EsR0FDakJpSSxHQUFNdEcsVUFBWUEsR0FDbEJzRyxHQUFNbEcsT0FBU0EsR0FDZmtHLEdBQU1oRyxjQUFnQkEsR0FDdEJnRyxHQUFNL0YsZUFBaUJBLEdBQ3ZCK0YsR0FBTTdyQixRQUFVa29CLEdBQ2hCMkQsR0FBTTkwQixLQUFPQSxHQUNiODBCLEdBQU1ydEIsT0FBU0EsR0FDZnF0QixHQUFNdm1CLFdBQWFBLEdBQ25CdW1CLEdBQU1sbkIsSUFBTW9hLEdBQ1o4TSxHQUFNemMsSUFBTXlQLEdBQ1pnTixHQUFNMUQsYUFBZUEsR0FDckIwRCxHQUFNOW9CLElBQU0wSCxHQUNab2hCLEdBQU0xRyxRQUFVQSxHQUNoQjBHLEdBQU10SixTQUFXQSxHQUNqQnNKLEdBQU0vSSxRQUFVQSxHQUNoQitJLEdBQU03RCxTQUFXQSxHQUNqQjZELEdBQU10RixPQUFTQSxHQUNmc0YsR0FBTXhGLFlBQWNBLEdBQ3BCd0YsR0FBTXJGLFFBQVVBLEdBQ00sb0JBQVgzOUIsUUFBd0MsTUFBZEEsT0FBT3FqQyxNQUN4Q0wsR0FBTWhqQyxPQUFPcWpDLElBQUksK0JBQWlDLFdBQzlDLE1BQU8sVUFBWXJpQyxLQUFLMFUsU0FBVyxNQUczQ3N0QixHQUFNNUQsT0FBU0EsR0FDZjRELEdBQU1yaEMsU0FBV0EsR0FDakJxaEMsR0FBTTlELEtBQU9BLEdBQ2I4RCxHQUFNeHRCLFFBQVVBLEdBQ2hCd3RCLEdBQU14RCxhQUFlQSxHQUNyQndELEdBQU1qRCxRQUFVSSxHQUNoQjZDLEdBQU1NLFVBQVlsRCxHQUNsQjRDLEdBQU1PLFFBQVVsRCxHQUNoQjJDLEdBQU1RLFFBQVVsRCxHQUNoQjBDLEdBQU1uaUIsS0FBT3lHLEdBQ2IwYixHQUFNcGlCLFdBQWEyRyxHQUNuQnliLEdBQU1yUCxTQUFXOE4sR0FDakJ1QixHQUFNbEIsWUFBY0gsR0FDcEJxQixHQUFNaE0sUUFBVWdNLEdBQU1qTSxTQUFXc0wsR0FDakNXLEdBQU14aEIsTUFBUWdGLEdBQ2R3YyxHQUFNdGhCLFlBQWMrRSxHQUNwQnVjLEdBQU0xYSxLQUFPMGEsR0FBTS9MLE1BQVE1TixHQUMzQjJaLEdBQU05TCxRQUFVOEwsR0FBTVMsU0FBV2xhLEdBQ2pDeVosR0FBTWxhLFlBQWNpWixHQUNwQmlCLEdBQU1VLGdCQUFrQnpCLEdBQ3hCZSxHQUFNVyxlQUFpQi9CLEdBQ3ZCb0IsR0FBTVksc0JBQXdCL0IsR0FDOUJtQixHQUFNdmhCLEtBQU8rZ0IsR0FDYlEsR0FBTXJZLElBQU1xWSxHQUFNN0wsS0FBTzNMLEdBQ3pCd1gsR0FBTXphLFFBQVVtRCxHQUNoQnNYLEdBQU0vRCxXQUFhdFQsR0FDbkJxWCxHQUFNdGEsVUFBWStaLEdBQ2xCTyxHQUFNck8sS0FBT3FPLEdBQU14VyxNQUFRaUIsR0FDM0J1VixHQUFNeE4sT0FBU3dOLEdBQU1yVyxRQUFVK1YsR0FDL0JNLEdBQU12TixPQUFTdU4sR0FBTWhXLFFBQVU0VixHQUMvQkksR0FBTXROLFlBQWNzTixHQUFNNUwsYUFBZXVMLEdBQ3pDSyxHQUFNNUssVUFBWWEsR0FDbEIrSixHQUFNbHRCLElBQU0wakIsR0FDWndKLEdBQU1sSyxNQUFRVyxHQUNkdUosR0FBTUcsVUFBWXhKLEdBQ2xCcUosR0FBTW5KLHFCQUF1QkEsR0FDN0JtSixHQUFNYSxNQUFRL0osR0FDZGtKLEdBQU05SSxRQUFVQSxHQUNoQjhJLEdBQU03SSxZQUFjQSxHQUNwQjZJLEdBQU01SSxNQUFRQSxHQUNkNEksR0FBTWpOLE1BQVFxRSxHQUNkNEksR0FBTWMsU0FBV2hCLEdBQ2pCRSxHQUFNZSxTQUFXaEIsR0FDakJDLEdBQU1nQixNQUFRenFCLEVBQ1Ysa0RBQ0FpcEIsSUFFSlEsR0FBTW5lLE9BQVN0TCxFQUNYLG1EQUNBaU4sSUFFSndjLEdBQU1sTSxNQUFRdmQsRUFDVixpREFDQStOLElBRUowYixHQUFNbEYsS0FBT3ZrQixFQUNULDJHQUNBZ2dCLElBRUp5SixHQUFNaUIsYUFBZTFxQixFQUNqQiwwR0FDQXdnQixJQWVKLElBQUltSyxHQUFVeHBCLEVBQU92YSxVQXVDckIsU0FBU2drQyxHQUFNenVCLEVBQVEwdUIsRUFBT0MsRUFBT0MsR0FDakMsSUFBSTN1QixFQUFTcVosS0FDVGxaLEVBQU1MLElBQVl5RSxJQUFJb3FCLEVBQVFGLEdBQ2xDLE9BQU96dUIsRUFBTzB1QixHQUFPdnVCLEVBQUtKLEdBRzlCLFNBQVM2dUIsR0FBZTd1QixFQUFRMHVCLEVBQU9DLEdBUW5DLEdBUElsdkIsRUFBU08sS0FDVDB1QixFQUFRMXVCLEVBQ1JBLE9BQVMvUSxHQUdiK1EsRUFBU0EsR0FBVSxHQUVOLE1BQVQwdUIsRUFDQSxPQUFPRCxHQUFNenVCLEVBQVEwdUIsRUFBT0MsRUFBTyxTQUd2QyxJQUFJN2pDLEVBQ0Fna0MsRUFBTSxHQUNWLElBQUtoa0MsRUFBSSxFQUFHQSxFQUFJLEdBQUlBLElBQ2hCZ2tDLEVBQUloa0MsR0FBSzJqQyxHQUFNenVCLEVBQVFsVixFQUFHNmpDLEVBQU8sU0FFckMsT0FBT0csRUFXWCxTQUFTQyxHQUFpQkMsRUFBY2h2QixFQUFRMHVCLEVBQU9DLEdBQ3ZCLGtCQUFqQkssR0FDSHZ2QixFQUFTTyxLQUNUMHVCLEVBQVExdUIsRUFDUkEsT0FBUy9RLEdBR2IrUSxFQUFTQSxHQUFVLEtBR25CMHVCLEVBREExdUIsRUFBU2d2QixFQUVUQSxHQUFlLEVBRVh2dkIsRUFBU08sS0FDVDB1QixFQUFRMXVCLEVBQ1JBLE9BQVMvUSxHQUdiK1EsRUFBU0EsR0FBVSxJQUd2QixJQUVJbFYsRUFGQW1WLEVBQVNxWixLQUNUMlYsRUFBUUQsRUFBZS91QixFQUFPc1QsTUFBTWhCLElBQU0sRUFFMUN1YyxFQUFNLEdBRVYsR0FBYSxNQUFUSixFQUNBLE9BQU9ELEdBQU16dUIsR0FBUzB1QixFQUFRTyxHQUFTLEVBQUdOLEVBQU8sT0FHckQsSUFBSzdqQyxFQUFJLEVBQUdBLEVBQUksRUFBR0EsSUFDZmdrQyxFQUFJaGtDLEdBQUsyakMsR0FBTXp1QixHQUFTbFYsRUFBSW1rQyxHQUFTLEVBQUdOLEVBQU8sT0FFbkQsT0FBT0csRUFHWCxTQUFTSSxHQUFXbHZCLEVBQVEwdUIsR0FDeEIsT0FBT0csR0FBZTd1QixFQUFRMHVCLEVBQU8sVUFHekMsU0FBU1MsR0FBZ0JudkIsRUFBUTB1QixHQUM3QixPQUFPRyxHQUFlN3VCLEVBQVEwdUIsRUFBTyxlQUd6QyxTQUFTVSxHQUFhSixFQUFjaHZCLEVBQVEwdUIsR0FDeEMsT0FBT0ssR0FBaUJDLEVBQWNodkIsRUFBUTB1QixFQUFPLFlBR3pELFNBQVNXLEdBQWtCTCxFQUFjaHZCLEVBQVEwdUIsR0FDN0MsT0FBT0ssR0FBaUJDLEVBQWNodkIsRUFBUTB1QixFQUFPLGlCQUd6RCxTQUFTWSxHQUFnQk4sRUFBY2h2QixFQUFRMHVCLEdBQzNDLE9BQU9LLEdBQWlCQyxFQUFjaHZCLEVBQVEwdUIsRUFBTyxlQTVIekRGLEdBQVFocEIsU0FBV0EsRUFDbkJncEIsR0FBUWpuQixlQUFpQkEsRUFDekJpbkIsR0FBUW5uQixZQUFjQSxFQUN0Qm1uQixHQUFRM25CLFFBQVVBLEVBQ2xCMm5CLEdBQVFyTyxTQUFXdU4sR0FDbkJjLEdBQVFoRyxXQUFha0YsR0FDckJjLEdBQVEva0IsYUFBZUEsRUFDdkIra0IsR0FBUTFrQixXQUFhQSxHQUNyQjBrQixHQUFRaHFCLElBQU1BLEVBQ2RncUIsR0FBUXhFLEtBQU9ELEdBQ2Z5RSxHQUFRNUIsVUFBWXhDLEdBQ3BCb0UsR0FBUXhQLGdCQUFrQnVMLEdBQzFCaUUsR0FBUXZELGNBQWdCQSxHQUN4QnVELEdBQVEzRCxjQUFnQkEsR0FDeEIyRCxHQUFRckQsZ0JBQWtCQSxHQUUxQnFELEdBQVFyZixPQUFTUyxHQUNqQjRlLEdBQVF0ZixZQUFjYSxHQUN0QnllLEdBQVFsZixZQUFjbUIsR0FDdEIrZCxHQUFRbmYsWUFBY0EsR0FDdEJtZixHQUFRcGYsaUJBQW1CQSxHQUMzQm9mLEdBQVE1YixLQUFPVSxHQUNma2IsR0FBUWUsZUFBaUI3YixHQUN6QjhhLEdBQVFnQixlQUFpQi9iLEdBRXpCK2EsR0FBUW5hLFNBQVdVLEdBQ25CeVosR0FBUXJhLFlBQWNpQixHQUN0Qm9aLEdBQVFwYSxjQUFnQmMsR0FDeEJzWixHQUFRemEsY0FBZ0I0QixHQUV4QjZZLEdBQVFoYSxjQUFnQkEsR0FDeEJnYSxHQUFRamEsbUJBQXFCQSxHQUM3QmlhLEdBQVFsYSxpQkFBbUJBLEdBRTNCa2EsR0FBUS9XLEtBQU9MLEdBQ2ZvWCxHQUFRcnRCLFNBQVc2VyxHQTRGbkJtQixHQUFtQixLQUFNLENBQ3JCNlEsS0FBTSxDQUNGLENBQ0lFLE1BQU8sYUFDUEMsTUFBTyxFQUFBLEVBQ1AzSCxPQUFRLEVBQ1JyMkIsS0FBTSxjQUNObStCLE9BQVEsS0FDUjlRLEtBQU0sTUFFVixDQUNJMFEsTUFBTyxhQUNQQyxPQUFPLEVBQUEsRUFDUDNILE9BQVEsRUFDUnIyQixLQUFNLGdCQUNObStCLE9BQVEsS0FDUjlRLEtBQU0sT0FHZHBCLHVCQUF3Qix1QkFDeEJ2UixRQUFTLFNBQVVmLEdBQ2YsSUFBSXpHLEVBQUl5RyxFQUFTLEdBV2pCLE9BQU9BLEdBVGdDLElBQS9CeUYsR0FBT3pGLEVBQVMsSUFBTyxJQUNqQixLQUNNLElBQU56RyxFQUNBLEtBQ00sSUFBTkEsRUFDQSxLQUNNLElBQU5BLEVBQ0EsS0FDQSxTQU90QkwsRUFBTXhHLEtBQU9xTCxFQUNULHdEQUNBc1YsSUFFSm5hLEVBQU15d0IsU0FBVzVyQixFQUNiLGdFQUNBeVYsSUFHSixJQUFJb1csR0FBVXQrQixLQUFLQyxJQUVuQixTQUFTQSxLQUNMLElBQUkrRyxFQUFPOU0sS0FBS3UyQixNQWFoQixPQVhBdjJCLEtBQUtxMkIsY0FBZ0IrTixHQUFRcGtDLEtBQUtxMkIsZUFDbENyMkIsS0FBS3MyQixNQUFROE4sR0FBUXBrQyxLQUFLczJCLE9BQzFCdDJCLEtBQUt1a0IsUUFBVTZmLEdBQVFwa0MsS0FBS3VrQixTQUU1QnpYLEVBQUtzcEIsYUFBZWdPLEdBQVF0M0IsRUFBS3NwQixjQUNqQ3RwQixFQUFLa2YsUUFBVW9ZLEdBQVF0M0IsRUFBS2tmLFNBQzVCbGYsRUFBSzZlLFFBQVV5WSxHQUFRdDNCLEVBQUs2ZSxTQUM1QjdlLEVBQUswZSxNQUFRNFksR0FBUXQzQixFQUFLMGUsT0FDMUIxZSxFQUFLK1csT0FBU3VnQixHQUFRdDNCLEVBQUsrVyxRQUMzQi9XLEVBQUtncEIsTUFBUXNPLEdBQVF0M0IsRUFBS2dwQixPQUVuQjkxQixLQUdYLFNBQVNxa0MsR0FBY3hPLEVBQVU1cUIsRUFBT3BJLEVBQU9vM0IsR0FDM0MsSUFBSWhGLEVBQVFVLEdBQWUxcUIsRUFBT3BJLEdBTWxDLE9BSkFnekIsRUFBU1EsZUFBaUI0RCxFQUFZaEYsRUFBTW9CLGNBQzVDUixFQUFTUyxPQUFTMkQsRUFBWWhGLEVBQU1xQixNQUNwQ1QsRUFBU3RSLFNBQVcwVixFQUFZaEYsRUFBTTFRLFFBRS9Cc1IsRUFBU1csVUFJcEIsU0FBUzhOLEdBQU1yNUIsRUFBT3BJLEdBQ2xCLE9BQU93aEMsR0FBY3JrQyxLQUFNaUwsRUFBT3BJLEVBQU8sR0FJN0MsU0FBUzBoQyxHQUFXdDVCLEVBQU9wSSxHQUN2QixPQUFPd2hDLEdBQWNya0MsS0FBTWlMLEVBQU9wSSxHQUFRLEdBRzlDLFNBQVMyaEMsR0FBUWhxQixHQUNiLE9BQUlBLEVBQVMsRUFDRjFVLEtBQUtrYSxNQUFNeEYsR0FFWDFVLEtBQUtpYSxLQUFLdkYsR0FJekIsU0FBU2lxQixLQUNMLElBSUl6WSxFQUNBTCxFQUNBSCxFQUNBc0ssRUFDQTRPLEVBUkF0TyxFQUFlcDJCLEtBQUtxMkIsY0FDcEJGLEVBQU9uMkIsS0FBS3MyQixNQUNaelMsRUFBUzdqQixLQUFLdWtCLFFBQ2R6WCxFQUFPOU0sS0FBS3UyQixNQWdEaEIsT0FyQ1NILEdBQWdCLEdBQUtELEdBQVEsR0FBS3RTLEdBQVUsR0FDNUN1UyxHQUFnQixHQUFLRCxHQUFRLEdBQUt0UyxHQUFVLElBR2pEdVMsR0FBdUQsTUFBdkNvTyxHQUFRRyxHQUFhOWdCLEdBQVVzUyxHQUMvQ0EsRUFBTyxFQUNQdFMsRUFBUyxHQUtiL1csRUFBS3NwQixhQUFlQSxFQUFlLElBRW5DcEssRUFBVWxNLEdBQVNzVyxFQUFlLEtBQ2xDdHBCLEVBQUtrZixRQUFVQSxFQUFVLEdBRXpCTCxFQUFVN0wsR0FBU2tNLEVBQVUsSUFDN0JsZixFQUFLNmUsUUFBVUEsRUFBVSxHQUV6QkgsRUFBUTFMLEdBQVM2TCxFQUFVLElBQzNCN2UsRUFBSzBlLE1BQVFBLEVBQVEsR0FFckIySyxHQUFRclcsR0FBUzBMLEVBQVEsSUFJekIzSCxHQURBNmdCLEVBQWlCNWtCLEdBQVM4a0IsR0FBYXpPLElBRXZDQSxHQUFRcU8sR0FBUUcsR0FBYUQsSUFHN0I1TyxFQUFRaFcsR0FBUytELEVBQVMsSUFDMUJBLEdBQVUsR0FFVi9XLEVBQUtxcEIsS0FBT0EsRUFDWnJwQixFQUFLK1csT0FBU0EsRUFDZC9XLEVBQUtncEIsTUFBUUEsRUFFTjkxQixLQUdYLFNBQVM0a0MsR0FBYXpPLEdBR2xCLE9BQWUsS0FBUEEsRUFBZSxPQUczQixTQUFTd08sR0FBYTlnQixHQUVsQixPQUFpQixPQUFUQSxFQUFtQixLQUcvQixTQUFTZ2hCLEdBQUc3bEIsR0FDUixJQUFLaGYsS0FBS21XLFVBQ04sT0FBT1ksSUFFWCxJQUFJb2YsRUFDQXRTLEVBQ0F1UyxFQUFlcDJCLEtBQUtxMkIsY0FJeEIsR0FBYyxXQUZkclgsRUFBUUQsR0FBZUMsS0FFWSxZQUFWQSxHQUFpQyxTQUFWQSxFQUc1QyxPQUZBbVgsRUFBT24yQixLQUFLczJCLE1BQVFGLEVBQWUsTUFDbkN2UyxFQUFTN2pCLEtBQUt1a0IsUUFBVXFnQixHQUFhek8sR0FDN0JuWCxHQUNKLElBQUssUUFDRCxPQUFPNkUsRUFDWCxJQUFLLFVBQ0QsT0FBT0EsRUFBUyxFQUNwQixJQUFLLE9BQ0QsT0FBT0EsRUFBUyxRQUt4QixPQURBc1MsRUFBT24yQixLQUFLczJCLE1BQVF4d0IsS0FBSzZ3QixNQUFNZ08sR0FBYTNrQyxLQUFLdWtCLFVBQ3pDdkYsR0FDSixJQUFLLE9BQ0QsT0FBT21YLEVBQU8sRUFBSUMsRUFBZSxPQUNyQyxJQUFLLE1BQ0QsT0FBT0QsRUFBT0MsRUFBZSxNQUNqQyxJQUFLLE9BQ0QsT0FBYyxHQUFQRCxFQUFZQyxFQUFlLEtBQ3RDLElBQUssU0FDRCxPQUFjLEtBQVBELEVBQWNDLEVBQWUsSUFDeEMsSUFBSyxTQUNELE9BQWMsTUFBUEQsRUFBZUMsRUFBZSxJQUV6QyxJQUFLLGNBQ0QsT0FBT3R3QixLQUFLa2EsTUFBYSxNQUFQbVcsR0FBZ0JDLEVBQ3RDLFFBQ0ksTUFBTSxJQUFJeGQsTUFBTSxnQkFBa0JvRyxJQU1sRCxTQUFTOGxCLEtBQ0wsT0FBSzlrQyxLQUFLbVcsVUFJTm5XLEtBQUtxMkIsY0FDUSxNQUFicjJCLEtBQUtzMkIsTUFDSnQyQixLQUFLdWtCLFFBQVUsR0FBTSxPQUNLLFFBQTNCdEUsR0FBTWpnQixLQUFLdWtCLFFBQVUsSUFOZHhOLElBVWYsU0FBU2d1QixHQUFPQyxHQUNaLE9BQU8sV0FDSCxPQUFPaGxDLEtBQUs2a0MsR0FBR0csSUFJdkIsSUFBSUMsR0FBaUJGLEdBQU8sTUFDeEJHLEdBQVlILEdBQU8sS0FDbkJJLEdBQVlKLEdBQU8sS0FDbkJLLEdBQVVMLEdBQU8sS0FDakJNLEdBQVNOLEdBQU8sS0FDaEJPLEdBQVVQLEdBQU8sS0FDakJRLEdBQVdSLEdBQU8sS0FDbEJTLEdBQWFULEdBQU8sS0FDcEJVLEdBQVVWLEdBQU8sS0FFckIsU0FBU1csS0FDTCxPQUFPL1AsR0FBZTMxQixNQUcxQixTQUFTMmxDLEdBQU0zbUIsR0FFWCxPQURBQSxFQUFRRCxHQUFlQyxHQUNoQmhmLEtBQUttVyxVQUFZblcsS0FBS2dmLEVBQVEsT0FBU2pJLElBR2xELFNBQVM2dUIsR0FBVy9rQyxHQUNoQixPQUFPLFdBQ0gsT0FBT2IsS0FBS21XLFVBQVluVyxLQUFLdTJCLE1BQU0xMUIsR0FBUWtXLEtBSW5ELElBQUlxZixHQUFld1AsR0FBVyxnQkFDMUI1WixHQUFVNFosR0FBVyxXQUNyQmphLEdBQVVpYSxHQUFXLFdBQ3JCcGEsR0FBUW9hLEdBQVcsU0FDbkJ6UCxHQUFPeVAsR0FBVyxRQUNsQi9oQixHQUFTK2hCLEdBQVcsVUFDcEI5UCxHQUFROFAsR0FBVyxTQUV2QixTQUFTM1AsS0FDTCxPQUFPblcsR0FBUzlmLEtBQUttMkIsT0FBUyxHQUdsQyxJQUFJUSxHQUFRN3dCLEtBQUs2d0IsTUFDYmtQLEdBQWEsQ0FDVHRvQixHQUFJLEdBQ0pELEVBQUcsR0FDSHJILEVBQUcsR0FDSHdILEVBQUcsR0FDSEUsRUFBRyxHQUNIRSxFQUFHLEtBQ0hFLEVBQUcsSUFJWCxTQUFTK25CLEdBQWtCem5CLEVBQVE3RCxFQUFRNEQsRUFBZUUsRUFBVTNKLEdBQ2hFLE9BQU9BLEVBQU93SixhQUFhM0QsR0FBVSxJQUFLNEQsRUFBZUMsRUFBUUMsR0FHckUsU0FBU3luQixHQUFlQyxFQUFnQjVuQixFQUFleW5CLEVBQVlseEIsR0FDL0QsSUFBSWtoQixFQUFXRixHQUFlcVEsR0FBZ0JqZ0MsTUFDMUNpbUIsRUFBVTJLLEdBQU1kLEVBQVNnUCxHQUFHLE1BQzVCbFosRUFBVWdMLEdBQU1kLEVBQVNnUCxHQUFHLE1BQzVCclosRUFBUW1MLEdBQU1kLEVBQVNnUCxHQUFHLE1BQzFCMU8sRUFBT1EsR0FBTWQsRUFBU2dQLEdBQUcsTUFDekJoaEIsRUFBUzhTLEdBQU1kLEVBQVNnUCxHQUFHLE1BQzNCNU8sRUFBUVUsR0FBTWQsRUFBU2dQLEdBQUcsTUFDMUIvTyxFQUFRYSxHQUFNZCxFQUFTZ1AsR0FBRyxNQUMxQi93QixFQUNLa1ksR0FBVzZaLEVBQVd0b0IsSUFBTSxDQUFDLElBQUt5TyxJQUNsQ0EsRUFBVTZaLEVBQVd2b0IsR0FBSyxDQUFDLEtBQU0wTyxJQUNqQ0wsR0FBVyxHQUFLLENBQUMsTUFDakJBLEVBQVVrYSxFQUFXNXZCLEdBQUssQ0FBQyxLQUFNMFYsSUFDakNILEdBQVMsR0FBSyxDQUFDLE1BQ2ZBLEVBQVFxYSxFQUFXcG9CLEdBQUssQ0FBQyxLQUFNK04sSUFDL0IySyxHQUFRLEdBQUssQ0FBQyxNQUNkQSxFQUFPMFAsRUFBV2xvQixHQUFLLENBQUMsS0FBTXdZLEdBZ0J2QyxPQWRvQixNQUFoQjBQLEVBQVdob0IsSUFDWC9KLEVBQ0lBLEdBQ0NtaUIsR0FBUyxHQUFLLENBQUMsTUFDZkEsRUFBUTRQLEVBQVdob0IsR0FBSyxDQUFDLEtBQU1vWSxLQUV4Q25pQixFQUFJQSxHQUNDK1AsR0FBVSxHQUFLLENBQUMsTUFDaEJBLEVBQVNnaUIsRUFBVzluQixHQUFLLENBQUMsS0FBTThGLElBQ2hDaVMsR0FBUyxHQUFLLENBQUMsTUFBUyxDQUFDLEtBQU1BLElBRWxDLEdBQUsxWCxFQUNQdEssRUFBRSxJQUFNa3lCLEVBQWlCLEVBQ3pCbHlCLEVBQUUsR0FBS2EsRUFDQW14QixHQUFrQi9sQyxNQUFNLEtBQU0rVCxHQUl6QyxTQUFTbXlCLEdBQTJCQyxHQUNoQyxZQUF5QnZpQyxJQUFyQnVpQyxFQUNPdlAsR0FFcUIsbUJBQXJCdVAsSUFDUHZQLEdBQVF1UCxHQUNELEdBTWYsU0FBU0MsR0FBNEJDLEVBQVdDLEdBQzVDLFlBQThCMWlDLElBQTFCa2lDLEdBQVdPLFVBR0R6aUMsSUFBVjBpQyxFQUNPUixHQUFXTyxJQUV0QlAsR0FBV08sR0FBYUMsRUFDTixNQUFkRCxJQUNBUCxHQUFXdG9CLEdBQUs4b0IsRUFBUSxJQUVyQixJQUdYLFNBQVNsSixHQUFTbUosRUFBZUMsR0FDN0IsSUFBS3ZtQyxLQUFLbVcsVUFDTixPQUFPblcsS0FBS3liLGFBQWFNLGNBRzdCLElBRUlwSCxFQUNBMEYsRUFIQW1zQixHQUFhLEVBQ2JDLEVBQUtaLEdBeUJULE1BckI2QixpQkFBbEJTLElBQ1BDLEVBQWdCRCxFQUNoQkEsR0FBZ0IsR0FFUyxrQkFBbEJBLElBQ1BFLEVBQWFGLEdBRVksaUJBQWxCQyxJQUNQRSxFQUFLcG5DLE9BQU9DLE9BQU8sR0FBSXVtQyxHQUFZVSxHQUNaLE1BQW5CQSxFQUFjanBCLEdBQWlDLE1BQXBCaXBCLEVBQWNocEIsS0FDekNrcEIsRUFBR2xwQixHQUFLZ3BCLEVBQWNqcEIsRUFBSSxJQUtsQ2pELEVBQVMwckIsR0FBZS9sQyxNQUFPd21DLEVBQVlDLEVBRDNDOXhCLEVBQVMzVSxLQUFLeWIsY0FHVitxQixJQUNBbnNCLEVBQVMxRixFQUFPNkosWUFBWXhlLEtBQU1xYSxJQUcvQjFGLEVBQU91b0IsV0FBVzdpQixHQUc3QixJQUFJcXNCLEdBQVE1Z0MsS0FBS0MsSUFFakIsU0FBU3N4QixHQUFLM1QsR0FDVixPQUFRQSxFQUFJLElBQU1BLEVBQUksS0FBT0EsRUFHakMsU0FBU2lqQixLQVFMLElBQUszbUMsS0FBS21XLFVBQ04sT0FBT25XLEtBQUt5YixhQUFhTSxjQUc3QixJQUdJNFAsRUFDQUgsRUFDQXNLLEVBQ0F4WSxFQUVBc3BCLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBWEEvYSxFQUFVMGEsR0FBTTFtQyxLQUFLcTJCLGVBQWlCLElBQ3RDRixFQUFPdVEsR0FBTTFtQyxLQUFLczJCLE9BQ2xCelMsRUFBUzZpQixHQUFNMW1DLEtBQUt1a0IsU0FLcEJ5aUIsRUFBUWhuQyxLQUFLa2xDLFlBTWpCLE9BQUs4QixHQU9McmIsRUFBVTdMLEdBQVNrTSxFQUFVLElBQzdCUixFQUFRMUwsR0FBUzZMLEVBQVUsSUFDM0JLLEdBQVcsR0FDWEwsR0FBVyxHQUdYbUssRUFBUWhXLEdBQVMrRCxFQUFTLElBQzFCQSxHQUFVLEdBR1Z2RyxFQUFJME8sRUFBVUEsRUFBUXBhLFFBQVEsR0FBR2hJLFFBQVEsU0FBVSxJQUFNLEdBRXpEZzlCLEVBQVlJLEVBQVEsRUFBSSxJQUFNLEdBQzlCSCxFQUFTeFAsR0FBS3IzQixLQUFLdWtCLFdBQWE4UyxHQUFLMlAsR0FBUyxJQUFNLEdBQ3BERixFQUFXelAsR0FBS3IzQixLQUFLczJCLFNBQVdlLEdBQUsyUCxHQUFTLElBQU0sR0FDcERELEVBQVUxUCxHQUFLcjNCLEtBQUtxMkIsaUJBQW1CZ0IsR0FBSzJQLEdBQVMsSUFBTSxHQUd2REosRUFDQSxLQUNDOVEsRUFBUStRLEVBQVMvUSxFQUFRLElBQU0sS0FDL0JqUyxFQUFTZ2pCLEVBQVNoakIsRUFBUyxJQUFNLEtBQ2pDc1MsRUFBTzJRLEVBQVczUSxFQUFPLElBQU0sS0FDL0IzSyxHQUFTRyxHQUFXSyxFQUFVLElBQU0sS0FDcENSLEVBQVF1YixFQUFVdmIsRUFBUSxJQUFNLEtBQ2hDRyxFQUFVb2IsRUFBVXBiLEVBQVUsSUFBTSxLQUNwQ0ssRUFBVSthLEVBQVV6cEIsRUFBSSxJQUFNLEtBOUJ4QixNQWtDZixJQUFJMnBCLEdBQVVyUixHQUFTejJCLFVBd0d2QixPQXRHQThuQyxHQUFROXdCLFFBQVVzZixHQUNsQndSLEdBQVFsaEMsSUFBTUEsR0FDZGtoQyxHQUFRM2UsSUFBTWdjLEdBQ2QyQyxHQUFRdk8sU0FBVzZMLEdBQ25CMEMsR0FBUXBDLEdBQUtBLEdBQ2JvQyxHQUFRaEMsZUFBaUJBLEdBQ3pCZ0MsR0FBUS9CLFVBQVlBLEdBQ3BCK0IsR0FBUTlCLFVBQVlBLEdBQ3BCOEIsR0FBUTdCLFFBQVVBLEdBQ2xCNkIsR0FBUTVCLE9BQVNBLEdBQ2pCNEIsR0FBUTNCLFFBQVVBLEdBQ2xCMkIsR0FBUTFCLFNBQVdBLEdBQ25CMEIsR0FBUXpCLFdBQWFBLEdBQ3JCeUIsR0FBUXhCLFFBQVVBLEdBQ2xCd0IsR0FBUXp5QixRQUFVc3dCLEdBQ2xCbUMsR0FBUXpRLFFBQVVpTyxHQUNsQndDLEdBQVFyUCxNQUFROE4sR0FDaEJ1QixHQUFRMTdCLElBQU1vNkIsR0FDZHNCLEdBQVE3USxhQUFlQSxHQUN2QjZRLEdBQVFqYixRQUFVQSxHQUNsQmliLEdBQVF0YixRQUFVQSxHQUNsQnNiLEdBQVF6YixNQUFRQSxHQUNoQnliLEdBQVE5USxLQUFPQSxHQUNmOFEsR0FBUWhSLE1BQVFBLEdBQ2hCZ1IsR0FBUXBqQixPQUFTQSxHQUNqQm9qQixHQUFRblIsTUFBUUEsR0FDaEJtUixHQUFROUosU0FBV0EsR0FDbkI4SixHQUFRekssWUFBY21LLEdBQ3RCTSxHQUFRdG1DLFNBQVdnbUMsR0FDbkJNLEdBQVE3SSxPQUFTdUksR0FDakJNLEdBQVF0eUIsT0FBU0EsR0FDakJzeUIsR0FBUXhyQixXQUFhQSxHQUVyQndyQixHQUFRQyxZQUFjM3VCLEVBQ2xCLHNGQUNBb3VCLElBRUpNLEdBQVEvNUIsS0FBT0EsR0FJZmtPLEVBQWUsSUFBSyxFQUFHLEVBQUcsUUFDMUJBLEVBQWUsSUFBSyxFQUFHLEVBQUcsV0FJMUI0RyxHQUFjLElBQUtMLElBQ25CSyxHQUFjLElBQUtGLElBQ25CYSxHQUFjLEtBQUssU0FBVTFYLEVBQU8yUSxFQUFPNUQsR0FDdkNBLEVBQU92VSxHQUFLLElBQUk0USxLQUF5QixJQUFwQm1oQixXQUFXdnFCLE9BRXBDMFgsR0FBYyxLQUFLLFNBQVUxWCxFQUFPMlEsRUFBTzVELEdBQ3ZDQSxFQUFPdlUsR0FBSyxJQUFJNFEsS0FBSzRMLEdBQU1oVjs7QUFLL0J5SSxFQUFNeXpCLFFBQVUsU0FFaEJ4ekIsRUFBZ0J1ZixJQUVoQnhmLEVBQU1ZLEdBQUswdEIsR0FDWHR1QixFQUFNNlIsSUFBTUEsR0FDWjdSLEVBQU1vSCxJQUFNQSxHQUNacEgsRUFBTTBHLElBQU1BLEdBQ1oxRyxFQUFNb0IsSUFBTUwsRUFDWmYsRUFBTXdxQixLQUFPK0QsR0FDYnZ1QixFQUFNbVEsT0FBUytmLEdBQ2Zsd0IsRUFBTVUsT0FBU0EsRUFDZlYsRUFBTWlCLE9BQVNrWixHQUNmbmEsRUFBTTJtQixRQUFVdmpCLEVBQ2hCcEQsRUFBTW1pQixTQUFXRixHQUNqQmppQixFQUFNd0UsU0FBV0EsRUFDakJ4RSxFQUFNcVYsU0FBVythLEdBQ2pCcHdCLEVBQU15dUIsVUFBWUQsR0FDbEJ4dUIsRUFBTStILFdBQWF1UyxHQUNuQnRhLEVBQU0raUIsV0FBYUEsR0FDbkIvaUIsRUFBTWtRLFlBQWNpZ0IsR0FDcEJud0IsRUFBTW1WLFlBQWNtYixHQUNwQnR3QixFQUFNdWEsYUFBZUEsR0FDckJ2YSxFQUFNMGEsYUFBZUEsR0FDckIxYSxFQUFNc1osUUFBVXNCLEdBQ2hCNWEsRUFBTW9WLGNBQWdCaWIsR0FDdEJyd0IsRUFBTXFMLGVBQWlCQSxHQUN2QnJMLEVBQU0wekIscUJBQXVCbkIsR0FDN0J2eUIsRUFBTTJ6QixzQkFBd0JsQixHQUM5Qnp5QixFQUFNNm5CLGVBQWlCUCxHQUN2QnRuQixFQUFNdlUsVUFBWTZpQyxHQUdsQnR1QixFQUFNNHpCLFVBQVksQ0FDZEMsZUFBZ0IsbUJBQ2hCQyx1QkFBd0Isc0JBQ3hCQyxrQkFBbUIsMEJBQ25CdmtCLEtBQU0sYUFDTndrQixLQUFNLFFBQ05DLGFBQWMsV0FDZEMsUUFBUyxlQUNUcmtCLEtBQU0sYUFDTk4sTUFBTyxXQUdKdlAsRUE1aEx5RW0wQjs7Ozs7O0FDRG5GLElBQVVDLEVBQU1ELEVBQU5DLEVBV1Q5bkMsS0FYZTZuQyxFQVdULFNBQVVFLFFBSU1wa0MsSUFBbkJva0MsRUFBT1osU0FBeUJZLEVBQU9DLFVBQzFDRCxFQUFTQSxFQUFPQyxTQVNqQixJQU1DQyxFQUxBQyxFQUFRLEdBQ1JDLEVBQVEsR0FDUkMsRUFBWSxHQUNaN2EsRUFBUSxHQUNSOGEsRUFBVSxHQUdOTixHQUFvQyxpQkFBbkJBLEVBQU9aLFNBQzVCbUIsRUFBUyxnR0FHVixJQUFJQyxFQUFnQlIsRUFBT1osUUFBUXg5QixNQUFNLEtBQ3hDNitCLEdBQVNELEVBQWMsR0FDdkJFLEdBQVNGLEVBQWMsR0FXeEIsU0FBU0csRUFBY0MsR0FDdEIsT0FBSUEsRUFBVyxHQUNQQSxFQUFXLEdBQ1JBLEVBQVcsR0FDZEEsRUFBVyxHQUVaQSxFQUFXLEdBR25CLFNBQVNDLEVBQWF2cUIsR0FDckIsSUFBSTdlLEVBQUksRUFDUDRMLEVBQVFpVCxFQUFPMVUsTUFBTSxLQUNyQmsvQixFQUFRejlCLEVBQU0sR0FDZDA5QixFQUFhMTlCLEVBQU0sSUFBTSxHQUN6QjI5QixFQUFhLEVBRWJ2RixFQUFNLEVBQ05uTSxFQUFPLEVBU1IsSUFONkIsS0FBekJoWixFQUFPMnFCLFdBQVcsS0FDckJ4cEMsRUFBSSxFQUNKNjNCLEdBQVEsR0FJRDczQixFQUFJcXBDLEVBQU1ucEMsT0FBUUYsSUFFekJna0MsRUFBTSxHQUFLQSxFQURMa0YsRUFBY0csRUFBTUcsV0FBV3hwQyxJQUt0QyxJQUFLQSxFQUFJLEVBQUdBLEVBQUlzcEMsRUFBV3BwQyxPQUFRRixJQUNsQ3VwQyxHQUEwQixHQUUxQnZGLEdBRE1rRixFQUFjSSxFQUFXRSxXQUFXeHBDLElBQzdCdXBDLEVBR2QsT0FBT3ZGLEVBQU1uTSxFQUdkLFNBQVM0UixFQUFZcnRCLEdBQ3BCLElBQUssSUFBSXBjLEVBQUksRUFBR0EsRUFBSW9jLEVBQU1sYyxPQUFRRixJQUNqQ29jLEVBQU1wYyxHQUFLb3BDLEVBQWFodEIsRUFBTXBjLElBWWhDLFNBQVMwcEMsRUFBWXZwQyxFQUFRd3BDLEdBQzVCLElBQWMzcEMsRUFBVmdrQyxFQUFNLEdBRVYsSUFBS2hrQyxFQUFJLEVBQUdBLEVBQUkycEMsRUFBUXpwQyxPQUFRRixJQUMvQmdrQyxFQUFJaGtDLEdBQUtHLEVBQU93cEMsRUFBUTNwQyxJQUd6QixPQUFPZ2tDLEVBR1IsU0FBUzRGLEVBQVEvcUIsR0FDaEIsSUFBSXZSLEVBQU91UixFQUFPMVUsTUFBTSxLQUN2QjAvQixFQUFVdjhCLEVBQUssR0FBR25ELE1BQU0sS0FDeEJ3L0IsRUFBVXI4QixFQUFLLEdBQUduRCxNQUFNLElBQ3hCMi9CLEVBQVV4OEIsRUFBSyxHQUFHbkQsTUFBTSxLQVF6QixPQU5Bcy9CLEVBQVdJLEdBQ1hKLEVBQVdFLEdBQ1hGLEVBQVdLLEdBMUJaLFNBQXFCMXRCLEVBQU9sYyxHQUMzQixJQUFLLElBQUlGLEVBQUksRUFBR0EsRUFBSUUsRUFBUUYsSUFDM0JvYyxFQUFNcGMsR0FBS3NHLEtBQUs2d0IsT0FBTy9hLEVBQU1wYyxFQUFJLElBQU0sR0FBaUIsSUFBWG9jLEVBQU1wYyxJQUdwRG9jLEVBQU1sYyxFQUFTLEdBQUs2cEMsRUFBQUEsRUF1QnBCQyxDQUFXRixFQUFRSCxFQUFRenBDLFFBRXBCLENBQ05tQixLQUFhaU0sRUFBSyxHQUNsQjI4QixNQUFhUCxFQUFXcDhCLEVBQUssR0FBR25ELE1BQU0sS0FBTXcvQixHQUM1Q0UsUUFBYUgsRUFBV0csRUFBU0YsR0FDakNHLE9BQWFBLEVBQ2JJLFdBQXVCLEVBQVY1OEIsRUFBSyxJQVFwQixTQUFTNjhCLEVBQU1DLEdBQ1ZBLEdBQ0g1cEMsS0FBSzZwQyxLQUFLVCxFQUFPUSxJQTRFbkIsU0FBU0UsRUFBU0MsRUFBY0MsR0FDL0JocUMsS0FBS2EsS0FBT2twQyxFQUNaL3BDLEtBQUtrb0MsTUFBUThCLEVBT2QsU0FBU0MsRUFBU0MsR0FDakIsSUFBSUMsRUFBYUQsRUFBR0UsZUFDaEJsYyxFQUFPaWMsRUFBVzNpQyxNQUFNLGdCQWFmLFNBUlowbUIsRUFKR0EsR0FBUUEsRUFBSyxJQUdoQkEsRUFBT0EsRUFBSyxHQUFHMW1CLE1BQU0sV0FDUDBtQixFQUFLemlCLEtBQUssU0FBTTlILEdBSTlCdXFCLEVBQU9pYyxFQUFXM2lDLE1BQU0sZ0JBQ1YwbUIsRUFBSyxRQUFLdnFCLEtBSXhCdXFCLE9BQU92cUIsR0FHUjNELEtBQUtrcUMsSUFBTUEsRUFDWGxxQyxLQUFLa3VCLEtBQU9BLEVBQ1psdUIsS0FBS2szQixPQUFTZ1QsRUFBR2xTLG9CQUdsQixTQUFTcVMsRUFBVXZOLEdBQ2xCOThCLEtBQUs4OEIsS0FBT0EsRUFDWjk4QixLQUFLc3FDLFlBQWMsRUFDbkJ0cUMsS0FBS3VxQyxVQUFZLEVBVWxCLFNBQVNDLEVBQVdDLEVBQUtDLEdBR3hCLElBRkEsSUFBSUMsRUFBS2xzQixFQUVEQSxFQUF5QyxNQUFoQ2lzQixFQUFLUixHQUFLTyxFQUFJUCxJQUFNLEtBQU8sS0FDM0NTLEVBQU0sSUFBSVYsRUFBUyxJQUFJNTFCLEtBQUtvMkIsRUFBSVAsR0FBS3pyQixLQUM3QnlZLFNBQVd1VCxFQUFJdlQsT0FDdEJ1VCxFQUFNRSxFQUVORCxFQUFPQyxFQUlULE9BQU9GLEVBMkJSLFNBQVNHLEVBQWdCOTJCLEVBQUdDLEdBQzNCLE9BQUlELEVBQUV3MkIsY0FBZ0J2MkIsRUFBRXUyQixZQUNoQngyQixFQUFFdzJCLFlBQWN2MkIsRUFBRXUyQixZQUV0QngyQixFQUFFeTJCLFlBQWN4MkIsRUFBRXcyQixVQUNkejJCLEVBQUV5MkIsVUFBWXgyQixFQUFFdzJCLFVBRXBCejJCLEVBQUVncEIsS0FBSzRNLGFBQWUzMUIsRUFBRStvQixLQUFLNE0sV0FDekIzMUIsRUFBRStvQixLQUFLNE0sV0FBYTUxQixFQUFFZ3BCLEtBQUs0TSxXQUU1QjMxQixFQUFFK29CLEtBQUtqOEIsS0FBS2dxQyxjQUFjLzJCLEVBQUVncEIsS0FBS2o4QixNQUd6QyxTQUFTaXFDLEVBQWNqcUMsRUFBTXdvQyxHQUM1QixJQUFJN3BDLEVBQUcwM0IsRUFFUCxJQURBK1IsRUFBV0ksR0FDTjdwQyxFQUFJLEVBQUdBLEVBQUk2cEMsRUFBUTNwQyxPQUFRRixJQUMvQjAzQixFQUFTbVMsRUFBUTdwQyxHQUNqQjZvQyxFQUFRblIsR0FBVW1SLEVBQVFuUixJQUFXLEdBQ3JDbVIsRUFBUW5SLEdBQVFyMkIsSUFBUSxFQUkxQixTQUFTa3FDLEVBQXVCMUIsR0FDL0IsSUFHQzdwQyxFQUFHZ3VCLEVBQUd3ZCxFQUhIQyxFQUFnQjVCLEVBQVEzcEMsT0FDM0J3ckMsRUFBa0IsR0FDbEIxSCxFQUFNLEdBR1AsSUFBS2hrQyxFQUFJLEVBQUdBLEVBQUl5ckMsRUFBZXpyQyxJQUU5QixJQUFLZ3VCLEtBREx3ZCxFQUFnQjNDLEVBQVFnQixFQUFRN3BDLEdBQUcwM0IsU0FBVyxHQUV6QzhULEVBQWNuckMsZUFBZTJ0QixLQUNoQzBkLEVBQWdCMWQsSUFBSyxHQUt4QixJQUFLaHVCLEtBQUswckMsRUFDTEEsRUFBZ0JyckMsZUFBZUwsSUFDbENna0MsRUFBSXgvQixLQUFLdXBCLEVBQU0vdEIsSUFJakIsT0FBT2drQyxFQUdSLFNBQVMySCxJQUdSLElBQ0MsSUFBSUMsRUFBV0MsS0FBS0MsaUJBQWlCQyxrQkFBa0JDLFNBQ3ZELEdBQUlKLEdBQVlBLEVBQVMxckMsT0FBUyxFQUFHLENBQ3BDLElBQUltQixFQUFPMHNCLEVBQU1rZSxFQUFjTCxJQUMvQixHQUFJdnFDLEVBQ0gsT0FBT0EsRUFFUnluQyxFQUFTLHlCQUEyQjhDLEVBQVcsMkRBRS9DLE1BQU90ZCxJQUlULElBSUM0ZCxFQUFXbHNDLEVBQUdndUIsRUFKWDZiLEVBdkZMLFdBQ0MsSUFHQ3NDLEVBQVE3bkMsRUFBTXRFLEVBSFhvc0MsR0FBWSxJQUFJdjNCLE1BQU9xUyxjQUFnQixFQUMxQ21sQixFQUFPLElBQUk1QixFQUFTLElBQUk1MUIsS0FBS3UzQixFQUFXLEVBQUcsSUFDM0N2QyxFQUFVLENBQUN3QyxHQUdaLElBQUtyc0MsRUFBSSxFQUFHQSxFQUFJLEdBQUlBLEtBQ25Cc0UsRUFBTyxJQUFJbW1DLEVBQVMsSUFBSTUxQixLQUFLdTNCLEVBQVdwc0MsRUFBRyxLQUNsQzAzQixTQUFXMlUsRUFBSzNVLFNBQ3hCeVUsRUFBU25CLEVBQVdxQixFQUFNL25DLEdBQzFCdWxDLEVBQVFybEMsS0FBSzJuQyxHQUNidEMsRUFBUXJsQyxLQUFLLElBQUlpbUMsRUFBUyxJQUFJNTFCLEtBQUtzM0IsRUFBT3pCLEdBQUssUUFFaEQyQixFQUFPL25DLEVBR1IsSUFBS3RFLEVBQUksRUFBR0EsRUFBSSxFQUFHQSxJQUNsQjZwQyxFQUFRcmxDLEtBQUssSUFBSWltQyxFQUFTLElBQUk1MUIsS0FBS3UzQixFQUFZcHNDLEVBQUcsRUFBRyxLQUNyRDZwQyxFQUFRcmxDLEtBQUssSUFBSWltQyxFQUFTLElBQUk1MUIsS0FBS3UzQixFQUFZcHNDLEVBQUcsRUFBRyxLQUd0RCxPQUFPNnBDLEVBa0VPeUMsR0FDYmIsRUFBZ0I1QixFQUFRM3BDLE9BQ3hCMm9DLEVBQVUwQyxFQUFzQjFCLEdBQ2hDMEMsRUFBYSxHQUdkLElBQUt2c0MsRUFBSSxFQUFHQSxFQUFJNm9DLEVBQVEzb0MsT0FBUUYsSUFBSyxDQUVwQyxJQURBa3NDLEVBQVksSUFBSXJCLEVBQVUyQixFQUFRM0QsRUFBUTdvQyxJQUFLeXJDLEdBQzFDemQsRUFBSSxFQUFHQSxFQUFJeWQsRUFBZXpkLElBQzlCa2UsRUFBVU8sY0FBYzVDLEVBQVE3YixJQUVqQ3VlLEVBQVcvbkMsS0FBSzBuQyxHQUtqQixPQUZBSyxFQUFXcHNCLEtBQUtpckIsR0FFVG1CLEVBQVdyc0MsT0FBUyxFQUFJcXNDLEVBQVcsR0FBR2pQLEtBQUtqOEIsVUFBTzhDLEVBYzFELFNBQVM4bkMsRUFBZTVxQyxHQUN2QixPQUFRQSxHQUFRLElBQUl3RixjQUFjdUQsUUFBUSxNQUFPLEtBR2xELFNBQVNzaUMsRUFBU0MsR0FDakIsSUFBSTNzQyxFQUFHcUIsRUFBTThJLEVBQU95aUMsRUFNcEIsSUFKc0IsaUJBQVhELElBQ1ZBLEVBQVMsQ0FBQ0EsSUFHTjNzQyxFQUFJLEVBQUdBLEVBQUkyc0MsRUFBT3pzQyxPQUFRRixJQUc5QjRzQyxFQUFhWCxFQURiNXFDLEdBREE4SSxFQUFRd2lDLEVBQU8zc0MsR0FBR21LLE1BQU0sTUFDWCxJQUVidStCLEVBQU1rRSxHQUFjRCxFQUFPM3NDLEdBQzNCK3RCLEVBQU02ZSxHQUFjdnJDLEVBQ3BCaXFDLEVBQWFzQixFQUFZemlDLEVBQU0sR0FBR0EsTUFBTSxNQUkxQyxTQUFTcWlDLEVBQVNuckMsRUFBTXdyQyxHQUV2QnhyQyxFQUFPNHFDLEVBQWM1cUMsR0FFckIsSUFDSXlyQyxFQURBeFAsRUFBT29MLEVBQU1ybkMsR0FHakIsT0FBSWk4QixhQUFnQjZNLEVBQ1o3TSxFQUdZLGlCQUFUQSxHQUNWQSxFQUFPLElBQUk2TSxFQUFLN00sR0FDaEJvTCxFQUFNcm5DLEdBQVFpOEIsRUFDUEEsR0FJSnFMLEVBQU10bkMsSUFBU3dyQyxJQUFXTCxJQUFZTSxFQUFPTixFQUFRN0QsRUFBTXRuQyxHQUFPbXJDLE1BQ3JFbFAsRUFBT29MLEVBQU1ybkMsR0FBUSxJQUFJOG9DLEdBQ3BCRSxLQUFLeUMsR0FDVnhQLEVBQUtqOEIsS0FBTzBzQixFQUFNMXNCLEdBQ1hpOEIsR0FHRCxLQW1CUixTQUFTeVAsRUFBUzd0QixHQUNqQixJQUFJbGYsRUFBR3dsQyxFQUFPd0gsRUFBU0MsRUFNdkIsSUFKdUIsaUJBQVovdEIsSUFDVkEsRUFBVSxDQUFDQSxJQUdQbGYsRUFBSSxFQUFHQSxFQUFJa2YsRUFBUWhmLE9BQVFGLElBRy9CZ3RDLEVBQVVmLEdBRlZ6RyxFQUFRdG1CLEVBQVFsZixHQUFHbUssTUFBTSxNQUVLLElBQzlCOGlDLEVBQVVoQixFQUFjekcsRUFBTSxJQUU5Qm1ELEVBQU1xRSxHQUFXQyxFQUNqQmxmLEVBQU1pZixHQUFXeEgsRUFBTSxHQUV2Qm1ELEVBQU1zRSxHQUFXRCxFQUNqQmpmLEVBQU1rZixHQUFXekgsRUFBTSxHQTBEekIsU0FBUzBILEVBQWF6MkIsR0FDckIsSUFBSTAyQixFQUE0QixNQUFUMTJCLEVBQUV3QixJQUF1QixNQUFUeEIsRUFBRXdCLEdBQ3pDLFNBQVV4QixFQUFFOE0sU0FBa0JwZixJQUFYc1MsRUFBRTBCLE1BQXdCZzFCLEdBRzlDLFNBQVNyRSxFQUFVc0UsR0FDSyxvQkFBWnQwQixTQUFvRCxtQkFBbEJBLFFBQVFqRixPQUNwRGlGLFFBQVFqRixNQUFNdTVCLEdBUWhCLFNBQVNDLEVBQUk1aEMsR0FDWixJQUFJME4sRUFBT3RZLE1BQU1sQixVQUFVeUIsTUFBTWQsS0FBS0wsVUFBVyxHQUFJLEdBQ3BEb0IsRUFBT3BCLFVBQVVBLFVBQVVDLE9BQVMsR0FDcENvOUIsRUFBT2tQLEVBQVFuckMsR0FDZjJpQyxFQUFPdUUsRUFBT2p6QixJQUFJL1UsTUFBTSxLQUFNNFksR0FRL0IsT0FOSW1rQixJQUFTaUwsRUFBTzd2QixTQUFTak4sSUFBVXloQyxFQUFZbEosSUFDbERBLEVBQUlsYixJQUFJd1UsRUFBS2dRLE1BQU10SixHQUFNLFdBRzFCQSxFQUFJcUosR0FBR2hzQyxHQUVBMmlDLEdBemdCSmdGLEVBQVEsR0FBZ0IsSUFBVkEsR0FBZUMsRUFBUSxJQUN4Q0gsRUFBUyx3RUFBMEVQLEVBQU9aLFFBQVUsc0JBdUdyR3dDLEVBQUt4cUMsVUFBWSxDQUNoQjBxQyxLQUFPLFNBQVVrRCxHQUNoQi9zQyxLQUFLYSxLQUFha3NDLEVBQVNsc0MsS0FDM0JiLEtBQUt5cEMsTUFBYXNELEVBQVN0RCxNQUMzQnpwQyxLQUFLc3BDLE9BQWF5RCxFQUFTekQsT0FDM0J0cEMsS0FBS3FwQyxRQUFhMEQsRUFBUzFELFFBQzNCcnBDLEtBQUswcEMsV0FBYXFELEVBQVNyRCxZQUc1QnNELE9BQVMsU0FBVUMsR0FDbEIsSUFFQ3p0QyxFQUZHRCxHQUFVMHRDLEVBQ2IzRCxFQUFTdHBDLEtBQUtzcEMsT0FHZixJQUFLOXBDLEVBQUksRUFBR0EsRUFBSThwQyxFQUFPNXBDLE9BQVFGLElBQzlCLEdBQUlELEVBQVMrcEMsRUFBTzlwQyxHQUNuQixPQUFPQSxHQUtWNG9DLFVBQVksV0FDWCxJQUFJOEUsRUFBWWx0QyxLQUFLYSxLQUNyQixPQUFPeEIsT0FBT3dNLEtBQUt1OEIsR0FBV3hnQyxRQUFPLFNBQVV1bEMsR0FDOUMsT0FBNkQsSUFBdEQvRSxFQUFVK0UsR0FBY2pGLE1BQU1wZ0MsUUFBUW9sQyxPQUkvQ0osTUFBUSxTQUFVRyxHQUNqQixJQUlDL1YsRUFBUWtXLEVBQVlDLEVBQVk3dEMsRUFKN0JELEdBQVcwdEMsRUFDZDVELEVBQVVycEMsS0FBS3FwQyxRQUNmQyxFQUFVdHBDLEtBQUtzcEMsT0FDZnh1QixFQUFVd3VCLEVBQU81cEMsT0FBUyxFQUczQixJQUFLRixFQUFJLEVBQUdBLEVBQUlzYixFQUFLdGIsSUFXcEIsR0FWQTAzQixFQUFhbVMsRUFBUTdwQyxHQUNyQjR0QyxFQUFhL0QsRUFBUTdwQyxFQUFJLEdBQ3pCNnRDLEVBQWFoRSxFQUFRN3BDLEVBQUlBLEVBQUksRUFBSUEsR0FFN0IwM0IsRUFBU2tXLEdBQWNQLEVBQUdTLHFCQUM3QnBXLEVBQVNrVyxFQUNDbFcsRUFBU21XLEdBQWNSLEVBQUdVLHFCQUNwQ3JXLEVBQVNtVyxHQUdOOXRDLEVBQVMrcEMsRUFBTzlwQyxHQUFlLElBQVQwM0IsRUFDekIsT0FBT21TLEVBQVE3cEMsR0FJakIsT0FBTzZwQyxFQUFRdnVCLElBR2hCb1QsS0FBTyxTQUFVL1QsR0FDaEIsT0FBT25hLEtBQUt5cEMsTUFBTXpwQyxLQUFLZ3RDLE9BQU83eUIsS0FHL0IrYyxPQUFTLFNBQVUvYyxHQUVsQixPQURBbXVCLEVBQVMsOERBQ0Z0b0MsS0FBS3FwQyxRQUFRcnBDLEtBQUtndEMsT0FBTzd5QixLQUdqQ2lkLFVBQVksU0FBVWpkLEdBQ3JCLE9BQU9uYSxLQUFLcXBDLFFBQVFycEMsS0FBS2d0QyxPQUFPN3lCLE1BK0NsQ2t3QixFQUFVbHJDLFVBQVU4c0MsY0FBZ0IsU0FBVXVCLEdBQzdDeHRDLEtBQUtzcUMsYUFBZXhrQyxLQUFLQyxJQUFJL0YsS0FBSzg4QixLQUFLMUYsVUFBVW9XLEVBQVN0RCxJQUFNc0QsRUFBU3RXLFFBQ3JFbDNCLEtBQUs4OEIsS0FBSzVPLEtBQUtzZixFQUFTdEQsSUFBSXRnQyxRQUFRLFVBQVcsTUFBUTRqQyxFQUFTdGYsTUFDbkVsdUIsS0FBS3VxQyxhQWtUUHNDLEVBQUcxRixRQTdoQlcsU0E4aEJkMEYsRUFBR1ksWUFBZSxHQUNsQlosRUFBR2EsT0FBZXhGLEVBQ2xCMkUsRUFBR2MsT0FBZXhGLEVBQ2xCMEUsRUFBR2UsT0FBZXJnQixFQUNsQnNmLEVBQUdnQixXQUFhekYsRUFDaEJ5RSxFQUFHdmtCLElBQWU0akIsRUFDbEJXLEVBQUdQLEtBQWVDLEVBQ2xCTSxFQUFHaUIsS0FyREgsU0FBbUJoaEMsR0FDbEJvL0IsRUFBUXAvQixFQUFLbzdCLE9BQ2JxRSxFQUFRei9CLEVBQUtxN0IsT0F6Q2QsU0FBdUJyN0IsR0FDdEIsSUFBSXROLEVBQUcydEMsRUFBY1ksRUFBZXBrQyxFQUNwQyxHQUFLbUQsR0FBU0EsRUFBS3BOLE9BQ25CLElBQUtGLEVBQUksRUFBR0EsRUFBSXNOLEVBQUtwTixPQUFRRixJQUU1QjJ0QyxHQURBeGpDLEVBQVFtRCxFQUFLdE4sR0FBR21LLE1BQU0sTUFDRCxHQUFHaVQsY0FDeEJteEIsRUFBZ0Jwa0MsRUFBTSxHQUFHQSxNQUFNLEtBQy9CeStCLEVBQVUrRSxHQUFnQixJQUFJckQsRUFDN0JxRCxFQUNBWSxHQWlDRkMsQ0FBYWxoQyxFQUFLczdCLFdBQ2xCeUUsRUFBR1ksWUFBYzNnQyxFQUFLcTZCLFNBa0R2QjBGLEVBQUcvUCxLQUFla1AsRUFDbEJhLEVBQUdvQixXQWhESCxTQUFTQSxFQUFZcHRDLEdBS3BCLE9BSktvdEMsRUFBV0MsZUFDZkQsRUFBV0MsY0FBZSxFQUN6QjVGLEVBQVMseUJBQTJCem5DLEVBQU8sdURBQXlEQSxFQUFPLFNBRXBHbXJDLEVBQVFuckMsSUE0Q2xCZ3NDLEVBQUdzQixNQWhNSCxTQUFnQkMsR0FJZixPQUhLbkcsSUFBZW1HLElBQ25CbkcsRUFBY2tELEtBRVJsRCxHQTZMUjRFLEVBQUd0ZixNQXJJSCxXQUNDLElBQUkvdEIsRUFBR2drQyxFQUFNLEdBRWIsSUFBS2hrQyxLQUFLK3RCLEVBQ0xBLEVBQU0xdEIsZUFBZUwsS0FBTzBvQyxFQUFNMW9DLElBQU0wb0MsRUFBTUMsRUFBTTNvQyxNQUFRK3RCLEVBQU0vdEIsSUFDckVna0MsRUFBSXgvQixLQUFLdXBCLEVBQU0vdEIsSUFJakIsT0FBT2drQyxFQUFJN2pCLFFBNkhaa3RCLEVBQUdsRCxLQUFlQSxFQUNsQmtELEVBQUd6RCxPQUFlQSxFQUNsQnlELEVBQUdqRSxhQUFlQSxFQUNsQmlFLEVBQUdILFlBQWVBLEVBQ2xCRyxFQUFHVSxvQkFBdUIsRUFDMUJWLEVBQUdTLHNCQUF1QixFQUMxQlQsRUFBR3pFLFVBaElILFdBQ0MsT0FBTy9vQyxPQUFPd00sS0FBS3U4QixJQWdJcEJ5RSxFQUFHd0IsZ0JBckZILFNBQXlCQyxFQUFTQyxHQUxsQyxJQUFxQjF0QyxFQVFwQixHQVBBQSxHQURvQkEsRUFNQ3l0QyxHQUxUMXhCLGdCQUtaMHhCLEVBSk9sRyxFQUFVdm5DLElBQVMsTUFNWixPQUFPLEtBRXJCLElBQUlxbkMsRUFBUW9HLEVBQVFwRyxNQUFNdm9CLE9BRTFCLE9BQUk0dUIsRUFDSXJHLEVBQU12Z0MsS0FBSSxTQUFVdWxDLEdBRTFCLE1BQU8sQ0FDTnJzQyxLQUFNcXNDLEVBQ05oVyxPQUhVOFUsRUFBUWtCLEdBR0w5VixVQUFVLElBQUkvaUIsVUFLdkI2ekIsR0EwRVIsSUE4RHlCc0csRUE5RHJCbDZCLEVBQUt5ekIsRUFBT3p6QixHQWdEaEIsU0FBU202QixFQUFVRCxHQUNsQixPQUFPLFdBQ04sT0FBSXh1QyxLQUFLMHVDLEdBQWExdUMsS0FBSzB1QyxHQUFHeGdCLEtBQUtsdUIsTUFDNUJ3dUMsRUFBSTF1QyxLQUFLRSxPQUlsQixTQUFTMnVDLEVBQWVILEdBQ3ZCLE9BQU8sV0FFTixPQURBeHVDLEtBQUswdUMsR0FBSyxLQUNIRixFQUFJenVDLE1BQU1DLEtBQU1QLFlBeER6QnNvQyxFQUFPOEUsR0FBS0EsRUFFWjlFLEVBQU82RyxZQUFjLEtBRXJCN0csRUFBTzl2QixhQUFlLFNBQVVrQyxFQUFLbUcsR0FDcEMsSUFDQzRXLEVBREc0RixFQUFPaUwsRUFBTzZHLFlBVWxCLFFBUGVqckMsSUFBWHdXLEVBQUl1MEIsS0FDSDVSLEdBQVE0UCxFQUFZdnlCLEtBQVNBLEVBQUl2QyxTQUNwQ3VDLEVBQUkxVyxHQUFLc2tDLEVBQU9qekIsSUFBSXFGLEVBQUk0SSxJQUFJdGYsR0FDNUIwVyxFQUFJckYsTUFBTXdULElBQUl3VSxFQUFLZ1EsTUFBTTN5QixHQUFNLFlBRWhDQSxFQUFJdTBCLEdBQUs1UixHQUVOM2lCLEVBQUl1MEIsR0FLUCxHQUpBeFgsRUFBUy9jLEVBQUl1MEIsR0FBR3RYLFVBQVVqZCxHQUN0QnJVLEtBQUtDLElBQUlteEIsR0FBVSxLQUN0QkEsR0FBa0IsU0FFR3Z6QixJQUFsQndXLEVBQUlpZCxVQUF5QixDQUNoQyxJQUFJeVgsRUFBSTEwQixFQUFJdTBCLEdBQ1p2MEIsRUFBSWlkLFdBQVdGLEVBQVE1VyxHQUN2Qm5HLEVBQUl1MEIsR0FBS0csT0FFVDEwQixFQUFJMmlCLEtBQUs1RixFQUFRNVcsSUFLcEJoTSxFQUFHdTRCLEdBQUssU0FBVWhzQyxFQUFNeWYsR0FDdkIsR0FBSXpmLEVBQU0sQ0FDVCxHQUFvQixpQkFBVEEsRUFDVixNQUFNLElBQUkrWCxNQUFNLHdDQUEwQy9YLEVBQU8sWUFBY0EsRUFBTyxLQVF2RixPQU5BYixLQUFLMHVDLEdBQUsxQyxFQUFRbnJDLEdBQ2RiLEtBQUswdUMsR0FDUjNHLEVBQU85dkIsYUFBYWpZLEtBQU1zZ0IsR0FFMUJnb0IsRUFBUyxtQ0FBcUN6bkMsRUFBTyw0REFFL0NiLEtBRVIsR0FBSUEsS0FBSzB1QyxHQUFNLE9BQU8xdUMsS0FBSzB1QyxHQUFHN3RDLE1Bd0IvQnlULEVBQUd5dUIsU0FBWTBMLEVBQVNuNkIsRUFBR3l1QixVQUMzQnp1QixFQUFHd3VCLFNBQVkyTCxFQUFTbjZCLEVBQUd3dUIsVUFDM0J4dUIsRUFBR1EsSUFBWTY1QixFQUFjcjZCLEVBQUdRLEtBQ2hDUixFQUFHd2pCLE1BQVk2VyxFQUFjcjZCLEVBQUd3akIsT0FDaEN4akIsRUFBRzhpQixXQVhzQm9YLEVBV0tsNkIsRUFBRzhpQixVQVZ6QixXQUVOLE9BREkzM0IsVUFBVUMsT0FBUyxJQUFHTSxLQUFLMHVDLEdBQUssTUFDN0JGLEVBQUl6dUMsTUFBTUMsS0FBTVAsYUFVekJzb0MsRUFBTzhFLEdBQUdpQyxXQUFhLFNBQVNqdUMsR0FLL0IsT0FKSTJuQyxFQUFRLEdBQWdCLElBQVZBLEdBQWVDLEVBQVEsSUFDeENILEVBQVMscUZBQXVGUCxFQUFPWixRQUFVLEtBRWxIWSxFQUFPNkcsWUFBYy90QyxFQUFPbXJDLEVBQVFuckMsR0FBUSxLQUNyQ2tuQyxHQUlSLElBQUk3d0IsRUFBbUI2d0IsRUFBTzd3QixpQkFZOUIsTUFYeUQsbUJBQXJEN1gsT0FBT0YsVUFBVXdCLFNBQVNiLEtBQUtvWCxJQUVsQ0EsRUFBaUJsVCxLQUFLLE1BQ3RCa1QsRUFBaUJsVCxLQUFLLE9BQ1prVCxJQUVWQSxFQUFpQnczQixHQUFLLE1BS2hCM0csR0E1cUIyQngwQixFQUFPb2EsUUFDeENwYSxVQUFpQnMwQixFQUFRa0gsSUFJekJsSCxFQUFRQyxFQUFLQyxpK3NMQ2ZGeDBCLFVBQWlCdzdCLElBQ3ZCbEMsR0FBR2lCLEtBQUtrQixPQ0RUQyxzQkNJSixJQUFrQnBILEVBQUFBLFdBS0RFOztBQUlmLElBQUltSCxFQUFjLHdFQUF3RXZsQyxNQUNsRixLQUVKd2xDLEVBQWdCLENBQ1osUUFDQSxRQUNBLFNBQ0EsU0FDQSxTQUNBLFNBQ0EsU0FDQUQsRUFBWSxHQUNaQSxFQUFZLEdBQ1pBLEVBQVksSUFFcEIsU0FBU0UsRUFBVTUwQixFQUFRNEQsRUFBZXhlLEVBQUswZSxHQUMzQyxJQUFJMVYsRUFBUyxHQUNiLE9BQVFoSixHQUNKLElBQUssSUFDRCxPQUFPMGUsRUFBVyxvQkFBc0Isa0JBQzVDLElBQUssS0FDRDFWLEVBQVMwVixFQUFXLFdBQWEsV0FDakMsTUFDSixJQUFLLElBQ0QsT0FBT0EsRUFBVyxXQUFhLFdBQ25DLElBQUssS0FDRDFWLEVBQVMwVixFQUFXLFdBQWEsWUFDakMsTUFDSixJQUFLLElBQ0QsT0FBT0EsRUFBVyxTQUFXLFFBQ2pDLElBQUssS0FDRDFWLEVBQVMwVixFQUFXLFNBQVcsU0FDL0IsTUFDSixJQUFLLElBQ0QsT0FBT0EsRUFBVyxTQUFXLFFBQ2pDLElBQUssS0FDRDFWLEVBQVMwVixFQUFXLFNBQVcsU0FDL0IsTUFDSixJQUFLLElBQ0QsT0FBT0EsRUFBVyxZQUFjLFdBQ3BDLElBQUssS0FDRDFWLEVBQVMwVixFQUFXLFlBQWMsWUFDbEMsTUFDSixJQUFLLElBQ0QsT0FBT0EsRUFBVyxTQUFXLFFBQ2pDLElBQUssS0FDRDFWLEVBQVMwVixFQUFXLFNBQVcsU0FJdkMsT0FEQTFWLEVBR0osU0FBc0I0UixFQUFROEQsR0FDMUIsT0FBTzlELEVBQVMsR0FDVjhELEVBQ0k2d0IsRUFBYzMwQixHQUNkMDBCLEVBQVkxMEIsR0FDaEJBLEVBUkc2MEIsQ0FBYTcwQixFQUFROEQsR0FBWSxJQUFNMVYsRUFDekNBLEVBa0VYLE9BeERTbS9CLEVBQU85WixhQUFhLEtBQU0sQ0FDL0JwSyxPQUFRLDJHQUEyR2xhLE1BQy9HLEtBRUppYSxZQUFhLHVFQUF1RWphLE1BQ2hGLEtBRUpvZixTQUFVLHFFQUFxRXBmLE1BQzNFLEtBRUptZixjQUFlLHVCQUF1Qm5mLE1BQU0sS0FDNUNrZixZQUFhLHVCQUF1QmxmLE1BQU0sS0FDMUNzUyxlQUFnQixDQUNaSSxHQUFJLFFBQ0pELElBQUssV0FDTEUsRUFBRyxhQUNIQyxHQUFJLG1CQUNKQyxJQUFLLGdDQUNMQyxLQUFNLHNDQUNOb1QsRUFBRyxXQUNIeWYsR0FBSSxjQUNKQyxJQUFLLDJCQUNMQyxLQUFNLGlDQUVWdDFCLFNBQVUsQ0FDTk4sUUFBUyxvQkFDVEMsUUFBUyxzQkFDVEMsU0FBVSxnQkFDVkMsUUFBUyxtQkFDVEMsU0FBVSw0QkFDVkMsU0FBVSxLQUVka0UsYUFBYyxDQUNWZixPQUFRLFlBQ1JDLEtBQU0sWUFDTkMsRUFBRzh4QixFQUNIN3hCLEdBQUk2eEIsRUFDSm41QixFQUFHbTVCLEVBQ0g1eEIsR0FBSTR4QixFQUNKM3hCLEVBQUcyeEIsRUFDSDF4QixHQUFJMHhCLEVBQ0p6eEIsRUFBR3l4QixFQUNIeHhCLEdBQUl3eEIsRUFDSnJ4QixFQUFHcXhCLEVBQ0hweEIsR0FBSW94QixFQUNKbnhCLEVBQUdteEIsRUFDSGx4QixHQUFJa3hCLEdBRVJ0aUIsdUJBQXdCLFlBQ3hCdlIsUUFBUyxNQUNUK0wsS0FBTSxDQUNGTCxJQUFLLEVBQ0xDLElBQUssTUF2SHlCMmdCLEVBQVFrSCx5QkNGaEQsSUFBa0JsSCxFQUFBQSxXQUtERSxHQW1FZixPQS9EU0EsRUFBTzlaLGFBQWEsS0FBTSxDQUMvQnBLLE9BQVEsd0ZBQXdGbGEsTUFDNUYsS0FFSmlhLFlBQWEsa0RBQWtEamEsTUFBTSxLQUNyRW9mLFNBQVUsb0RBQW9EcGYsTUFBTSxLQUNwRW1mLGNBQWUsOEJBQThCbmYsTUFBTSxLQUNuRGtmLFlBQWEsdUJBQXVCbGYsTUFBTSxLQUMxQ3NTLGVBQWdCLENBQ1pJLEdBQUksUUFDSkQsSUFBSyxXQUNMRSxFQUFHLGFBQ0hDLEdBQUksY0FDSkMsSUFBSywwQkFDTEMsS0FBTSwrQkFDTjh5QixJQUFLLG1CQUNMQyxLQUFNLHdCQUVWdDFCLFNBQVUsQ0FDTk4sUUFBUyxZQUNUQyxRQUFTLGVBQ1RFLFFBQVMsWUFDVEQsU0FBVSxlQUNWRSxTQUFVLGlCQUNWQyxTQUFVLEtBRWRrRSxhQUFjLENBQ1ZmLE9BQVEsUUFDUkMsS0FBTSxlQUNOQyxFQUFHLGlCQUNIQyxHQUFJLGNBQ0p0SCxFQUFHLFdBQ0h1SCxHQUFJLGFBQ0pDLEVBQUcsV0FDSEMsR0FBSSxZQUNKQyxFQUFHLFNBQ0hDLEdBQUksV0FDSkcsRUFBRyxXQUNIQyxHQUFJLGFBQ0pDLEVBQUcsU0FDSEMsR0FBSSxTQUVSNE8sdUJBQXdCLG1CQUN4QnZSLFFBQVMsU0FBVWYsR0FDZixJQUFJekcsRUFBSXlHLEVBQVMsR0FXakIsT0FBT0EsR0FUNkIsTUFBeEJBLEVBQVMsSUFBTyxJQUNkLEtBQ00sSUFBTnpHLEdBRU0sSUFBTkEsRUFEQSxLQUlBLE9BSWxCdVQsS0FBTSxDQUNGTCxJQUFLLEVBQ0xDLElBQUssTUFsRXlCMmdCLEVBQVFrSCx5QkNBaEQsSUFBa0JsSCxFQUFBQSxXQUtERTs7QUFJZixTQUFTMEgsRUFBb0JqMUIsRUFBUTRELEVBQWV4ZSxFQUFLMGUsR0FDckQsSUFBSTVKLEVBQVMsQ0FDVHVCLEVBQUcsQ0FBQyxjQUFlLGdCQUNuQndILEVBQUcsQ0FBQyxjQUFlLGdCQUNuQkUsRUFBRyxDQUFDLFVBQVcsYUFDZkMsR0FBSSxDQUFDcEQsRUFBUyxRQUFTQSxFQUFTLFVBQ2hDcUQsRUFBRyxDQUFDLGFBQWMsZUFDbEJFLEVBQUcsQ0FBQyxZQUFhLGVBQ2pCQyxHQUFJLENBQUN4RCxFQUFTLFVBQVdBLEVBQVMsWUFDbEN5RCxFQUFHLENBQUMsV0FBWSxjQUNoQkMsR0FBSSxDQUFDMUQsRUFBUyxTQUFVQSxFQUFTLFlBRXJDLE9BQU80RCxFQUFnQjFKLEVBQU85VSxHQUFLLEdBQUs4VSxFQUFPOVUsR0FBSyxHQTJEeEQsT0F4RFNtb0MsRUFBTzlaLGFBQWEsS0FBTSxDQUMvQnBLLE9BQVEscUZBQXFGbGEsTUFDekYsS0FFSmlhLFlBQWEsNkRBQTZEamEsTUFDdEUsS0FFSitsQyxrQkFBa0IsRUFDbEIzbUIsU0FBVSw4REFBOERwZixNQUNwRSxLQUVKbWYsY0FBZSw4QkFBOEJuZixNQUFNLEtBQ25Ea2YsWUFBYSx1QkFBdUJsZixNQUFNLEtBQzFDZ21DLG9CQUFvQixFQUNwQjF6QixlQUFnQixDQUNaSSxHQUFJLFFBQ0pELElBQUssV0FDTEUsRUFBRyxhQUNIQyxHQUFJLGVBQ0pDLElBQUsscUJBQ0xDLEtBQU0sNEJBRVZ2QyxTQUFVLENBQ05OLFFBQVMsc0JBQ1RLLFNBQVUsSUFDVkosUUFBUyx1QkFDVEMsU0FBVSxxQkFDVkMsUUFBUyx3QkFDVEMsU0FBVSxnQ0FFZG1FLGFBQWMsQ0FDVmYsT0FBUSxRQUNSQyxLQUFNLFNBQ05DLEVBQUcsb0JBQ0hDLEdBQUksY0FDSnRILEVBQUd3NUIsRUFDSGp5QixHQUFJLGFBQ0pDLEVBQUdneUIsRUFDSC94QixHQUFJLGFBQ0pDLEVBQUc4eEIsRUFDSDd4QixHQUFJNnhCLEVBQ0o1eEIsRUFBRzR4QixFQUNIM3hCLEdBQUksWUFDSkMsRUFBRzB4QixFQUNIenhCLEdBQUl5eEIsRUFDSnh4QixFQUFHd3hCLEVBQ0h2eEIsR0FBSXV4QixHQUVSM2lCLHVCQUF3QixZQUN4QnZSLFFBQVMsTUFDVCtMLEtBQU0sQ0FDRkwsSUFBSyxFQUNMQyxJQUFLLE1BMUV5QjJnQixFQUFRa0gsT0hSN0IsQ0FDbkJhLEdBQUksQ0FDRjNwQyxRQUFTLHNDQUNvQixpREFDTCwwREFDUyxpRkFFL0IsMkZBRUEscURBQ0Y0cEMsU0FBVSxPQUNWQyxRQUFTLFVBQ1RDLEtBQU0sU0FDTkMsa0JBQW1CLGtCQUNuQkMsSUFBSyxNQUNMQyxPQUFRLGlDQUNjLGlDQUNFLHVCQUN4QkMsZ0JBQWlCLDJCQUNULHVDQUNzQix3Q0FDOUJDLFVBQVcsVUFDWG5yQyxZQUFhLHFCQUNFLHFDQUNLLGlCQUNwQm9yQyxVQUFXLFlBQ1hDLE1BQU8sdUJBQ1Msd0JBQ2hCdnJDLE9BQVEsK0JBQ2dCLFFBQ3hCd3JDLGFBQWMsbUJBQ2RDLFFBQVMsMEJBQ08sTUFDaEJDLEtBQU0sTUFDTmxrQyxPQUFRLGtDQUNtQixpRUFDSiw2QkFDRCxpRUFDTSw4REFFMUIsOERBQ21CLHFDQUNKLCtEQUNNLHNDQUNKLHdEQUVqQix5SEFDaUMsd0RBQ1QsMEVBRXhCLHdFQUMyQixrQ0FDN0Jta0MsT0FBUSxTQUNSQyxPQUFRLFNBQ1JDLFFBQVMsVUFDVHppQyxLQUFNLDhCQUNXLGdFQUNJLDJEQUNLLCtDQUNKLDZEQUNFLDZEQUNGLGdEQUNWLHlCQUNHLFlBQ2YwaUMsS0FBTSxpQ0FDYywrQ0FDRCwwREFDVSxrQ0FDN0JDLE1BQU8sb0JBQ00sZUFDYkMsTUFBTyxTQUNQQyxNQUFPLE9BRVRDLEdBQUksQ0FDRmhyQyxRQUFTLHNDQUNvQixvREFDTCxnREFDUyxpRkFFL0IsMkZBRUEscURBQ0Y0cEMsU0FBVSxTQUNWQyxRQUFTLFVBQ1RDLEtBQU0sT0FDTm1CLFNBQVUsd0JBQ1ZsQixrQkFBbUIsZUFDbkJDLElBQUssTUFDTEMsT0FBUSxTQUNSaUIsUUFBUyxtQ0FDYSwrQkFDRSx1QkFDeEJoQixnQkFBaUIsMEJBQ1Qsc0NBQ3NCLDJDQUM5QkMsVUFBVyxZQUNYbnJDLFlBQWEsNEJBQ0Usd0NBQ0sseUJBQ3BCb3JDLFVBQVcsWUFDWEMsTUFBTyx1QkFDUyxlQUNoQnZyQyxPQUFRLCtCQUNnQixRQUN4QndyQyxhQUFjLGdCQUNkQyxRQUFTLDRCQUNPLElBQ2hCWSxTQUFVLFdBQ1ZYLEtBQU0sUUFDTlksU0FBVSxpQkFDVjlrQyxPQUFRLG1DQUNtQix3REFDSiw4QkFDRCwrREFDTSwrREFFMUIscUVBQ21CLDhCQUNKLHFEQUNNLGlDQUNKLHFEQUVqQix5SEFFQSxnSEFDd0IsMEVBRXhCLHdFQUMyQixtQ0FDN0Jta0MsT0FBUSxTQUNSQyxPQUFRLFFBQ1JDLFFBQVMsVUFDVHppQyxLQUFNLHVCQUNXLG1EQUNTLGlEQUNMLHNEQUNLLGlEQUNKLHlEQUNFLHdEQUNGLG1EQUNBLGlDQUNWLHlCQUNHLGNBQ2YwaUMsS0FBTSxPQUNOUyxNQUFPLDJCQUNhLHlDQUNELHVEQUNVLDRCQUM3QlIsTUFBTyxvQkFDTSxZQUNiQyxNQUFPLFlBQ1BDLE1BQU8sWUFFVE8sR0FBSSxDQUNGdHJDLFFBQVMscUNBQ29CLG1EQUNMLGtEQUV0Qix3RkFFQSw2RkFFQSx5REFDRjRwQyxTQUFVLFlBQ1ZDLFFBQVMsVUFDVEMsS0FBTSxXQUNOQyxrQkFBbUIsYUFDbkJrQixTQUFVLHNCQUNWakIsSUFBSyxRQUNMQyxPQUFRLFVBQ1JpQixRQUFTLDBDQUNhLGtDQUNFLHdCQUN4QmhCLGdCQUFpQixnQ0FDVCxzQ0FDc0Isb0NBQzlCQyxVQUFXLFlBQ1huckMsWUFBYSxZQUNib3JDLFVBQVcsV0FDWEMsTUFBTyx3QkFDUyw4QkFDRCxpQ0FDSyxZQUNwQnZyQyxPQUFRLHFDQUNnQixjQUN4QndyQyxhQUFjLGNBQ2RDLFFBQVMsNkJBQ08sTUFDaEJZLFNBQVUsVUFDVlgsS0FBTSxPQUNOWSxTQUFVLG9CQUNWOWtDLE9BQVEsaUNBQ21CLDJEQUNKLDJCQUNELGtFQUNNLDZEQUUxQix3RUFDbUIsOEJBQ0osOERBQ00sdURBRXJCLHlIQUVBLDRHQUN3QixnRUFDTyw4REFDSix5REFDVixXQUNuQm1rQyxPQUFRLE9BQ1JDLE9BQVEsUUFDUkMsUUFBUyxRQUNUemlDLEtBQU0sMEJBQ1csb0RBQ1Msa0RBQ0wsd0RBQ0ssK0NBQ0osa0RBQ0Usa0RBQ0YscURBQ0EsbUNBQ1YsMkJBQ0csZUFDZjBpQyxLQUFNLGNBQ05TLE1BQU8sMkJBQ2EsNkNBQ0Qsd0RBQ1UsMkJBQzdCUixNQUFPLHFCQUNNLFlBQ2JDLE1BQU8saUJBQ1BDLE1BQU8sVUFFVFEsR0FBSSxDQUNGdnJDLFFBQVMscUNBQ29CLHFEQUNMLHFEQUV0QixzRkFFQSxnR0FFQSwyREFDRjRwQyxTQUFVLE9BQ1ZDLFFBQVMsV0FDVEMsS0FBTSxXQUNOQyxrQkFBbUIsb0JBQ25Ca0IsU0FBVSxrQ0FDVmpCLElBQUssUUFDTEMsT0FBUSxTQUNSaUIsUUFBUyx3Q0FDYSw2QkFDRSxvQkFDeEJoQixnQkFBaUIsNEJBQ1QsdUNBQ3NCLCtCQUM5QkMsVUFBVyxhQUNYbnJDLFlBQWEsY0FDYm9yQyxVQUFXLFVBQ1hDLE1BQU8sdUJBQ1MsbUNBQ0kseUNBQ0wsNEJBQ2Z2ckMsT0FBUSxzQ0FDZ0IsZUFDeEJ3ckMsYUFBYyxlQUNkQyxRQUFTLDJCQUNPLE1BQ2hCWSxTQUFVLFlBQ1ZYLEtBQU0sTUFDTlksU0FBVSxxQkFDVjlrQyxPQUFRLGdDQUNtQiw2REFDSiwyQkFDRCxvRUFDTSwrREFFMUIsNkRBQ21CLG1DQUNKLGdFQUNNLHVDQUNKLGtEQUVqQixzSUFFQSxrSEFDd0Isd0RBQ0csK0JBQzdCbWtDLE9BQVEsT0FDUkMsT0FBUSxRQUNSQyxRQUFTLFVBQ1R6aUMsS0FBTSw0QkFDVyx3REFDUyxpREFDTCw0REFDSywrQ0FDSixzREFDRSx1REFDRiw0REFDQSxzQ0FDVix5QkFDRyxXQUNmMGlDLEtBQU0sV0FDTlMsTUFBTywwQkFDYSx3Q0FDRCx3REFDVSx5QkFDN0JSLE1BQU8seUJBQ00sWUFDYkMsTUFBTyxvQkFDUEMsTUFBTyxXSXRUWCxTQUFTUyxHQUFZQyxFQUFLQyxRQUNYLElBQVJBLElBQWlCQSxFQUFNLElBQzVCLElBQUlDLEVBQVdELEVBQUlDLFNBRW5CLEdBQUtGLEdBQTJCLG9CQUFiRyxTQUFuQixDQUVBLElBQUlDLEVBQU9ELFNBQVNDLE1BQVFELFNBQVNFLHFCQUFxQixRQUFRLEdBQzlEQyxFQUFRSCxTQUFTSSxjQUFjLFNBQ25DRCxFQUFNbnRDLEtBQU8sV0FFSSxRQUFiK3NDLEdBQ0VFLEVBQUtJLFdBQ1BKLEVBQUtLLGFBQWFILEVBQU9GLEVBQUtJLFlBS2hDSixFQUFLTSxZQUFZSixHQUdmQSxFQUFNSyxXQUNSTCxFQUFNSyxXQUFXQyxRQUFVWixFQUUzQk0sRUFBTUksWUFBWVAsU0FBU1UsZUFBZWIsczlqQkNieENjLDZDQUNRNXdDLHVCQUVKbUIsbUJBREFuQixXQUVObUIsRUFBSzB2QyxzQkFBd0IsV0FDM0IxdkMsRUFBSzJ2Qyx3QkFBeUIsRUFDOUIzdkMsRUFBSzR2QyxrQkFBb0IscUJBTkFDLFdBV3pCQyxHQUFlLGtCQUNuQkMsSUFBQUEsV0FDQXRwQyxJQUFBQSxHQUNBdXBDLElBQUFBLFlBQ0FDLElBQUFBLFdBQ0Fud0MsSUFBQUEsTUFDQW93QyxJQUFBQSxZQUNBQyxJQUFBQSxXQUNBQyxJQUFBQSxjQUNBQyxJQUFBQSxpQkFDQUMsSUFBQUEsbUJBQ0FDLElBQUFBLFVBQ0F0dEMsSUFBQUEsTUFDQXV0QyxJQUFBQSxxQkFDQUMsSUFBQUEsaUJBQ0FDLElBQUFBLGlCQUNBQyxJQUFBQSx3QkFDQUMsSUFBQUEsMEJBQ0FDLElBQUFBLHFCQUNBQyxJQUFBQSxXQUNBQyxJQUFBQSxNQUNBQyxJQUFBQSxXQUNBQyxJQUFBQSx1QkFDQUMsSUFBQUEsV0FDQUMsSUFBQUEsWUFHTUMsSUFGTkMsV0FFNEJDLEdBQWVDLEdBRXJDQyxZQUFhL3FDLFlBQ2JsRSxZQUFha0UsaUJBRW1CZ3JDLFlBQVMsTUFBeENDLE9BQWNDLE9BQ2ZDLEVBQVdDLFVBQU1DLFNBRXZCQyxhQUFVLFdBQ1JDLFVBQVdDLGNBQWNsQyxLQUN4QixRQUVHbUMsRUFBVUMsZUFBWSxXQUMxQm5DLE9BR0lvQyxFQUFXLFNBQUNybkIsRUFBRzZqQixHQUNTLHlCQUF4QkEsRUFBSXRvQyxXQUFXeEUsS0FDakI2dkMsR0FBYyxHQUNKL0MsRUFBSXRvQyxXQUFXMUUsV0FBV3FLLGNBRXBDdWtDLEVBQXFCemxCLEVBQUc2akIsSUFJdEJ5RCxFQUEyQixTQUFBQyxPQUd6QnoxQyxFQUFPeTFDLElBQVVBLEVBQU16MUMsS0FBT3kxQyxFQUFNQyxPQUFTRCxFQUFNRSxVQUFhLFlBRWpFMzFDLElBSlMsQ0FBQyxHQUFJLElBQUssWUFJTDhMLE9BSEwsQ0FBQyxHQUFJLFVBR2NqRyxTQUFTN0YsTUFHMUN5MUMsRUFBTUcsa0JBQ0MsSUFHSEMsRUFBVyxTQUFBcHNDLFNBQ1MseUJBQXBCQSxFQUFXeEUsS0FDTixHQUVGd3VDLEVBQW1CaHFDLElBR3RCcXNDLEVBQWEsU0FBQXJyQyxTQUNDLHlCQUFkQSxFQUFLeEYsS0FFTCt2QyxrQ0FBUS92QyxLQUFLLFNBQVM4d0MsVUFBV3hCLEVBQU8seUJBQ3JDOXBDLEVBQUsvRSxTQUlMOHRDLEVBQWlCL29DLFdBMEZ0QndwQyxhQUFjYyxFQUFTMXNDLHNCQUFUMnRDLEVBQWtCM3FDLE9BQ2xDMHBDLEVBQVMxc0MsUUFBUWdELE1BQU00cUMsUUFJdkJqQix3QkFBQ0csV0FDQ2UsT0FBUTdCLEVBQ1IwQixVQUFXeEIsRUFBTyxnQkFDbEI0QixpQkFBa0I1QixFQUFPLHdCQUN6QjZCLGFBQWNmLEVBQ2RnQixxQkFFQXJCLCtCQUNFZSxVQUFXeEIsRUFBTyx3QkFDbEJuQyxNQUFPLHFCQUNTOEIsZ0NBQ2dCRSw0QkFDVkQsMEJBQ0lHLEVBQVlnQyxTQXBFeEN0QiwrQkFBS2UsVUFBV3hCLEVBQU8sc0JBQXVCZ0MsUUFBUzVCLEdBQ3JESyxrQ0FDRS92QyxLQUFLLFNBQ0w4d0MsVUFBV3hCLEVBQU8saUJBQ2xCaUMsUUFBUyxrQkFBTW5CLEtBQ2ZvQixVQUFXLFNBQUF2b0IsVUFBS3NuQixFQUF5QnRuQixJQUFNbW5CLGtCQUNuQ3RCLEVBQ1oyQyxTQUFVLEdBRVYxQix3QkFBQzJCLFdBQUtDLElBQUksV0FFWjVCLGdDQUFNZSxVQUFXeEIsRUFBTyxpQkFDdEJTLGdDQUFNZSxVQUFXeEIsRUFBTyxrQkFBbUIzcUMsR0FBSWxFLEdBQzVDVSxHQUVINHVDLHdCQUFDcEMsSUFDQ2lFLDJCQUNBanRDLEdBQUlBLEVBQ0p5cEMsWUFBYUEsRUFDYnlELDRCQUE2QnZELEVBQzdCRSxtQkFBb0JvQyxFQUNwQnJDLGlCQUFrQnNDLEVBSWxCaUIsK0JBQ0FDLHdCQUF5QixrQkFBTSxHQUMvQjFELGdCQUNLQSxHQUNIeUMsb0JBQ0t4QixFQUFPbHBDLGtCQUFTa3BDLEVBQU8zcUMsSUFBTyxlQUMvQjBwQyxFQUFXcndDLE1BQVFzeEMsRUFBTzBDLFNBQVcsSUFHekNDLFdBQVcsSUFFYkMscUJBQXNCLFNBQUF6MEMsVUFDcEJzeUMsZ0RBQ0VBLDREQUFtQnRCLEVBQVc5cEMsR0FBSUEsR0FBUWxILElBQ3pDTyxHQXJEWCt4QyxrQ0FDRS92QyxLQUFLLFNBQ0w4d0MsVUFBV3hCLEVBQU8sZUFDbEJpQyxRQUFTcEQsRUFDVHFELFVBQVcsU0FBQXZvQixVQUFLc25CLEVBQXlCdG5CLElBQU1rbEIsa0JBQ25DWSxHQUVaZ0Isd0JBQUMyQixXQUFLQyxJQUFJLFFBQVExQyxNQUFPQSxPQWlEckJrRCxNQUFPN0MsRUFDUFoscUJBQXNCNEIsRUFDdEJ4RCxJQUFLZ0QsTUEvRVhDLHdCQUFDcUMsV0FDQ25FLFdBQVlBLEVBQ1pvRSxZQUFhekMsRUFDYjBDLFlBQWEsa0JBQU16QyxHQUFjLElBQ2pDMEMsV0FBWTNELEVBQ1o0RCxrQkFBbUIzRCxFQUNuQjRELG9CQUFxQjNELEVBQ3JCNEQscUJBQXNCLFdBQ3BCL0QsSUFDQWtCLEdBQWMsSUFFaEI4Qyx1QkFBd0Isa0JBQU05QyxHQUFjLElBQzVDWixNQUFPQSxFQUNQQyxXQUFZQSxFQUNaRyxZQUFhQSxzQkFtR3JCdUQsdUJBQUE1RSxHQUFhNkUsVUFBWSxDQUN2QjVFLFdBQVk2RSxVQUFVdDVCLE9BQU91NUIsV0FDN0JwdUMsR0FBSW11QyxVQUFVdDVCLE9BQU91NUIsV0FDckI3RSxZQUFhNEUsVUFBVW44QixLQUFLbzhCLFdBQzVCNUUsV0FBWTJFLFVBQVVuOEIsS0FBS284QixXQUMzQi8wQyxNQUFPODBDLFVBQVV0NUIsT0FDakJ1MUIscUJBQXNCK0QsVUFBVXQ1QixPQUFPdTVCLFdBQ3ZDM0UsWUFBYTBFLFVBQVUvN0IsTUFBTWc4QixXQUM3QjFFLFdBQVl5RSxVQUFVRSxNQUFNLENBQzFCQyxTQUFVSCxVQUFVbjhCLEtBQUtvOEIsV0FDekJHLE9BQVFKLFVBQVVuOEIsS0FBS284QixXQUN2Qi8wQyxNQUFPODBDLFVBQVV0NUIsT0FBT3U1QixXQUN4QkksWUFBYUwsVUFBVXQ1QixPQUFPdTVCLFdBQzlCakMsVUFBV2dDLFVBQVV0NUIsT0FBT3U1QixhQUMzQkEsV0FDSHpFLGNBQWV3RSxVQUFVbjhCLEtBQUtvOEIsV0FDOUJ2RSxtQkFBb0JzRSxVQUFVbjhCLEtBQUtvOEIsV0FDbkN4RSxpQkFBa0J1RSxVQUFVbjhCLEtBQUtvOEIsV0FDakNyRSxxQkFBc0JvRSxVQUFVbjhCLEtBQUtvOEIsV0FDckM1eEMsTUFBTzJ4QyxVQUFVdDVCLE9BQU91NUIsV0FDeEJwRSxpQkFBa0JtRSxVQUFVbjhCLEtBQUtvOEIsV0FDakN0RSxVQUFXcUUsVUFBVXQ1QixPQUNyQm8xQixpQkFBa0JrRSxVQUFVdDVCLE9BQzVCcTFCLHdCQUF5QmlFLFVBQVV0NUIsT0FDbkNzMUIsMEJBQTJCZ0UsVUFBVXQ1QixPQUNyQ3cxQixXQUFZOEQsVUFBVWh0QyxLQUN0Qm1wQyxNQUFPNkQsVUFBVXQ1QixPQUNqQjAxQixXQUFZNEQsVUFBVXQ1QixPQUN0QjIxQix1QkFBd0IyRCxVQUFVdDVCLE9BQU91NUIsV0FDekMzRCxXQUFZMEQsVUFBVWh0QyxLQUFLaXRDLFdBQzNCMUQsWUFBYXlELFVBQVVFLE1BQU0sQ0FDM0IzQixPQUFReUIsVUFBVW45QixPQUFPbzlCLGFBQ3hCQSxXQUNIeEQsV0FBWXVELFVBQVVodEMsdUNDM1ArVG1qQixFQUE3QyxvQkFBb0IvcUIsTUFBS0EsS0FBL1B3USxXQUFtUnVhLEVBQWxRaWhCLFVBQTRRLFdBQXdCLElBQUk5M0IsRUFBRSxDQUFDLElBQUksU0FBUzZXLEVBQUU3VyxFQUFFdlcsR0FBRyxJQUFJdTNDLEVBQUVqNEMsTUFBTUEsS0FBS2s0QyxrQkFBa0I3NEMsT0FBT3VELE9BQU8sU0FBU2tyQixFQUFFN1csRUFBRXZXLEVBQUV1M0MsUUFBRyxJQUFTQSxJQUFJQSxFQUFFdjNDLEdBQUdyQixPQUFPNEMsZUFBZTZyQixFQUFFbXFCLEVBQUUsQ0FBQ24yQyxZQUFXLEVBQUd5SixJQUFJLFdBQVcsT0FBTzBMLEVBQUV2VyxPQUFPLFNBQVNvdEIsRUFBRTdXLEVBQUV2VyxFQUFFdTNDLFFBQUcsSUFBU0EsSUFBSUEsRUFBRXYzQyxHQUFHb3RCLEVBQUVtcUIsR0FBR2hoQyxFQUFFdlcsS0FBS0gsRUFBRVAsTUFBTUEsS0FBS200QyxjQUFjLFNBQVNycUIsRUFBRTdXLEdBQUcsSUFBSSxJQUFJdlcsS0FBS290QixFQUFFLFlBQVlwdEIsR0FBR3JCLE9BQU9GLFVBQVVVLGVBQWVDLEtBQUttWCxFQUFFdlcsSUFBSXUzQyxFQUFFaGhDLEVBQUU2VyxFQUFFcHRCLElBQUlyQixPQUFPNEMsZUFBZWdWLEVBQUUsYUFBYSxDQUFDcFUsT0FBTSxJQUFLdEMsRUFBRUcsRUFBRSxLQUFLdVcsR0FBRzFXLEVBQUVHLEVBQUUsS0FBS3VXLEdBQUcxVyxFQUFFRyxFQUFFLElBQUl1VyxHQUFHMVcsRUFBRUcsRUFBRSxLQUFLdVcsR0FBRzFXLEVBQUVHLEVBQUUsSUFBSXVXLEdBQUcxVyxFQUFFRyxFQUFFLEtBQUt1VyxHQUFHMVcsRUFBRUcsRUFBRSxLQUFLdVcsR0FBRzFXLEVBQUVHLEVBQUUsS0FBS3VXLElBQUksR0FBRyxTQUFTNlcsRUFBRTdXLEVBQUV2VyxHQUFHckIsT0FBTzRDLGVBQWVnVixFQUFFLGFBQWEsQ0FBQ3BVLE9BQU0sSUFBS29VLEVBQUVtaEMsd0JBQW1CLEVBQU8sSUFBSUgsRUFBRXYzQyxFQUFFLEtBQUt1VyxFQUFFbWhDLG1CQUFtQixTQUFTdHFCLEdBQUcsSUFBSTdXLEVBQUU2VyxFQUFFdXFCLFVBQVUzM0MsRUFBRW90QixFQUFFd3FCLGdCQUFnQi8zQyxHQUFFLEVBQUcwM0MsRUFBRXpELFVBQVUsR0FBRzkwQixFQUFFbmYsRUFBRSxHQUFHZixFQUFFZSxFQUFFLEdBQUdxeEIsR0FBRSxFQUFHcW1CLEVBQUUvQyx1QkFBdUJwbkIsR0FBR3R1QixFQUFFc3VCLEtBQUssQ0FBQzdXLElBQUlxRyxFQUFFLFNBQVN3USxHQUFHLElBQUltcUIsRUFBRW5xQixFQUFFbHVCLElBQUksR0FBRyxNQUFNcVgsT0FBRSxFQUFPQSxFQUFFdlgsT0FBTyxHQUFHLFlBQVl1NEMsRUFBRXYzQyxHQUFHQSxJQUFJb3RCLEVBQUUwbkIsaUJBQWlCNWpCLEVBQUVsUyxFQUFFLEVBQUVBLEVBQUUsRUFBRXpJLEVBQUV2WCxPQUFPLE9BQU8sQ0FBQyxHQUFHLGNBQWN1NEMsRUFBRSxPQUFPdjNDLEdBQUdBLElBQUlvdEIsRUFBRTBuQixpQkFBaUI5MUIsRUFBRXpJLEVBQUV2WCxPQUFPLEVBQUVreUIsRUFBRWxTLEVBQUUsR0FBR2tTLEVBQUUsS0FBSyxPQUFNLEVBQUdxbUIsRUFBRW5ELHVCQUF1QixPQUFPeUQsT0FBT0MsaUJBQWlCLFVBQVVsN0IsR0FBRyxXQUFXLE9BQU9pN0IsT0FBT0Usb0JBQW9CLFVBQVVuN0IsUUFBTyxFQUFHMjZCLEVBQUVuRCx1QkFBdUJsakIsRUFBRSxLQUFLLENBQUMzYSxJQUFJLENBQUN5aEMsY0FBY2g1QixLQUFLLElBQUksU0FBU29PLEVBQUU3VyxFQUFFdlcsR0FBR3JCLE9BQU80QyxlQUFlZ1YsRUFBRSxhQUFhLENBQUNwVSxPQUFNLElBQUtvVSxFQUFFMGhDLDZCQUF3QixFQUFPLElBQUlWLEVBQUV2M0MsRUFBRSxLQUFLdVcsRUFBRTBoQyx3QkFBd0IsU0FBUzdxQixHQUFHLElBQUk3VyxHQUFFLEVBQUdnaEMsRUFBRXBELFFBQVEsTUFBTW4wQyxHQUFFLEVBQUd1M0MsRUFBRXpELFdBQVUsR0FBSWowQyxFQUFFRyxFQUFFLEdBQUdnZixFQUFFaGYsRUFBRSxHQUFHbEIsRUFBRSxTQUFTc3VCLEdBQUcsSUFBSTdXLEVBQUU2VyxFQUFFLEdBQUdwTyxFQUFFekksRUFBRTJoQyxpQkFBaUIsT0FBTSxFQUFHWCxFQUFFbkQsdUJBQXVCLEdBQUd5RCxRQUFRQSxPQUFPTSxxQkFBcUIsQ0FBQyxJQUFJbjRDLEVBQUUsSUFBSW00QyxxQkFBcUJyNUMsRUFBRXN1QixHQUFHbXFCLEVBQUVoaEMsRUFBRWhQLFFBQVEsT0FBT2dQLEVBQUVoUCxTQUFTdkgsRUFBRW80QyxRQUFRN2hDLEVBQUVoUCxTQUFTLFdBQVdnd0MsR0FBR3YzQyxFQUFFcTRDLFVBQVVkLElBQUl2NEIsR0FBRSxLQUFNLENBQUN6SSxFQUFFNlcsSUFBSSxDQUFDa3JCLGFBQWEvaEMsRUFBRWdpQyxVQUFVMTRDLElBQUkwVyxFQUFFK3dCLFFBQVEvd0IsRUFBRTBoQyx5QkFBeUIsR0FBRyxTQUFTN3FCLEVBQUU3VyxFQUFFdlcsR0FBRyxJQUFJdTNDLEVBQUVqNEMsTUFBTUEsS0FBS2s1QyxpQkFBaUIsU0FBU3ByQixHQUFHLE9BQU9BLEdBQUdBLEVBQUVxckIsV0FBV3JyQixFQUFFLENBQUNrYSxRQUFRbGEsSUFBSXp1QixPQUFPNEMsZUFBZWdWLEVBQUUsYUFBYSxDQUFDcFUsT0FBTSxJQUFLb1UsRUFBRW1pQyxxQkFBZ0IsRUFBTyxJQUFJNzRDLEVBQUVHLEVBQUUsS0FBS2dmLEVBQUV1NEIsRUFBRXYzQyxFQUFFLE1BQU1sQixFQUFFLENBQUM2NUMsR0FBRyxFQUFFQyxZQUFZLElBQUlDLE9BQU8sSUFBSUMsT0FBTyxJQUFJQyxZQUFZLElBQUlDLGFBQWEsS0FBS0MsUUFBUSxLQUFLQyxhQUFhLE1BQU0zaUMsRUFBRW1pQyxnQkFBZ0IsU0FBU3RyQixHQUFHLElBQUk3VyxHQUFFLEVBQUcxVyxFQUFFaTBDLFVBQVUsTUFBTTl6QyxFQUFFdVcsRUFBRSxHQUFHZ2hDLEVBQUVoaEMsRUFBRSxHQUFHMmEsR0FBRSxFQUFHcnhCLEVBQUUyMEMseUJBQXlCK0MsRUFBRU0sT0FBT3NCLGNBQWMsSUFBSSxPQUFNLEVBQUd0NUMsRUFBRXUwQyx1QkFBdUJsakIsTUFBTSxLQUFJLEVBQUdsUyxFQUFFc29CLFNBQVNwVyxHQUFHbHhCLEdBQUdsQixFQUFFc3VCLElBQUk3VyxFQUFFK3dCLFFBQVEvd0IsRUFBRW1pQyxpQkFBaUIsSUFBSSxTQUFTdHJCLEVBQUU3VyxFQUFFdlcsR0FBR3JCLE9BQU80QyxlQUFlZ1YsRUFBRSxhQUFhLENBQUNwVSxPQUFNLElBQUtvVSxFQUFFNmlDLCtCQUEwQixFQUFPLElBQUk3QixFQUFFdjNDLEVBQUUsS0FBS3VXLEVBQUU2aUMsMEJBQTBCLG9CQUFvQnZCLE9BQU9OLEVBQUU4QixnQkFBZ0I5QixFQUFFbkQsVUFBVTc5QixFQUFFK3dCLFFBQVEvd0IsRUFBRTZpQywyQkFBMkIsSUFBSSxTQUFTaHNCLEVBQUU3VyxFQUFFdlcsR0FBR3JCLE9BQU80QyxlQUFlZ1YsRUFBRSxhQUFhLENBQUNwVSxPQUFNLElBQUtvVSxFQUFFK2lDLDBCQUFxQixFQUFPLElBQUkvQixFQUFFdjNDLEVBQUUsS0FBS3VXLEVBQUUraUMscUJBQXFCLFNBQVNsc0IsR0FBRyxJQUFJN1csRUFBRTZXLEVBQUU2akIsSUFBSWp4QyxFQUFFb3RCLEVBQUVuZSxTQUFTcFAsRUFBRXV0QixFQUFFbXNCLE9BQU0sRUFBR2hDLEVBQUVuRCx1QkFBdUIsSUFBSWhuQixFQUFFLFdBQVcsSUFBSUEsRUFBRSxHQUFHdnRCLEVBQUUsT0FBTyxRQUFRdXRCLEVBQUU3VyxFQUFFaFAsZUFBVSxJQUFTNmxCLE9BQUUsRUFBT0EsRUFBRTJKLFFBQVEsdUJBQWtCLEVBQU8vMkIsS0FBSyxPQUFPbXhDLFNBQVMyRyxpQkFBaUIsUUFBUTFxQixHQUFHLFdBQVcsT0FBTytqQixTQUFTNEcsb0JBQW9CLFFBQVEzcUIsTUFBTSxDQUFDcHRCLEVBQUV1VyxFQUFFMVcsS0FBSzBXLEVBQUUrd0IsUUFBUS93QixFQUFFK2lDLHNCQUFzQixJQUFJLFNBQVNsc0IsRUFBRTdXLEVBQUV2VyxHQUFHckIsT0FBTzRDLGVBQWVnVixFQUFFLGFBQWEsQ0FBQ3BVLE9BQU0sSUFBSyxJQUFJbzFDLEVBQUV2M0MsRUFBRSxLQUFLdVcsRUFBRSt3QixRQUFRLFNBQVNsYSxJQUFHLEVBQUdtcUIsRUFBRW5ELHVCQUF1QixJQUFJNzlCLEVBQUUsV0FBVzZXLEVBQUV5cUIsT0FBT3NCLGFBQWEsT0FBT3RCLE9BQU9DLGlCQUFpQixTQUFTdmhDLEVBQUUsQ0FBQ2lqQyxTQUFRLElBQUssV0FBVyxPQUFPM0IsT0FBT0Usb0JBQW9CLFNBQVN4aEMsTUFBTSxNQUFNLElBQUksU0FBUzZXLEVBQUU3VyxFQUFFdlcsR0FBR3JCLE9BQU80QyxlQUFlZ1YsRUFBRSxhQUFhLENBQUNwVSxPQUFNLElBQUtvVSxFQUFFa2pDLHVCQUFrQixFQUFPLElBQUlsQyxFQUFFdjNDLEVBQUUsS0FBS3VXLEVBQUVrakMsa0JBQWtCLFNBQVNyc0IsRUFBRTdXLEdBQUcsU0FBU3ZXLEVBQUVBLEdBQUdvdEIsRUFBRTdsQixVQUFVNmxCLEVBQUU3bEIsUUFBUW15QyxTQUFTMTVDLEVBQUVuQixTQUFTMFgsS0FBSSxFQUFHZ2hDLEVBQUVuRCx1QkFBdUIsT0FBT2pELFNBQVMyRyxpQkFBaUIsWUFBWTkzQyxHQUFHLFdBQVdteEMsU0FBUzRHLG9CQUFvQixZQUFZLzNDLFNBQVMsSUFBSSxTQUFTb3RCLEVBQUU3VyxFQUFFdlcsR0FBR3JCLE9BQU80QyxlQUFlZ1YsRUFBRSxhQUFhLENBQUNwVSxPQUFNLElBQUssSUFBSW8xQyxFQUFFdjNDLEVBQUUsS0FBS3VXLEVBQUUrd0IsUUFBUSxXQUFXLElBQUlsYSxHQUFFLEVBQUdtcUIsRUFBRXBELFFBQVEsTUFBTSxPQUFNLEVBQUdvRCxFQUFFbkQsdUJBQXVCaG5CLEVBQUU3bEIsVUFBVTZsQixFQUFFN2xCLFVBQVU2bEIsRUFBRTdsQixRQUFRLFNBQVMsU0FBU2dQLEdBQUc2VyxFQUFFN2xCLFFBQVFnUCxLQUFLLElBQUksU0FBUzZXLEVBQUU3VyxFQUFFdlcsR0FBR3JCLE9BQU80QyxlQUFlZ1YsRUFBRSxhQUFhLENBQUNwVSxPQUFNLElBQUtvVSxFQUFFb2pDLG1CQUFjLEVBQU8sSUFBSXBDLEVBQUV2M0MsRUFBRSxLQUFLdVcsRUFBRW9qQyxjQUFjLFdBQVcsTUFBTSxDQUFDQyxNQUFLLEVBQUdyQyxFQUFFL0MseUJBQXlCLElBQUlwbkIsRUFBRXlxQixPQUFPZ0MsUUFBUSxLQUFLdGpDLEVBQUU0NkIsU0FBUzJJLEtBQUt2akMsRUFBRSs2QixNQUFNMWdDLFNBQVMsUUFBUTJGLEVBQUUrNkIsTUFBTXlJLElBQUksSUFBSTNzQixJQUFJLElBQUk0c0IsUUFBTyxFQUFHekMsRUFBRS9DLHlCQUF5QixJQUFJcG5CLEVBQUUrakIsU0FBUzJJLEtBQUt2akMsRUFBRTZXLEVBQUVra0IsTUFBTXlJLElBQUkvNUMsR0FBRyxFQUFFMmxCLFNBQVNwUCxHQUFHLEtBQUs2VyxFQUFFa2tCLE1BQU0xZ0MsU0FBUyxHQUFHd2MsRUFBRWtrQixNQUFNeUksSUFBSSxHQUFHLzVDLEdBQUc2M0MsT0FBT29DLFNBQVMsR0FBRyxFQUFFdDBCLFNBQVNwUCxHQUFHLFFBQVEsT0FBTyxJQUFJLFNBQVNBLEdBQUdBLEVBQUUwVyxRQUFRRyxJQUFJcHRCLEVBQUUsR0FBRyxPQUFPLFNBQVNvdEIsRUFBRW1xQixHQUFHLElBQUkxM0MsRUFBRUcsRUFBRXUzQyxHQUFHLFFBQUcsSUFBUzEzQyxFQUFFLE9BQU9BLEVBQUVvdEIsUUFBUSxJQUFJak8sRUFBRWhmLEVBQUV1M0MsR0FBRyxDQUFDdHFCLFFBQVEsSUFBSSxPQUFPMVcsRUFBRWdoQyxHQUFHbjRDLEtBQUs0ZixFQUFFaU8sUUFBUWpPLEVBQUVBLEVBQUVpTyxRQUFRRyxHQUFHcE8sRUFBRWlPLFFBQTVILENBQXFJLEtBQTMySSxpaEJDMEIxVmhaLE9BQU8sZ0JBRU5pbUMsS0FBSyxDQUNYQyxZQUFhLEtBQ2JDLFVBQVcsY0FDWEMsY0FBZSxDQUNiQyxhQUFhLG9CQVlqQnZELHNCQUNZRSxVQUFVc0QsS0FHdEIsSUFBTUMsR0FBYyxTQUFBNXNDLE1BQ2JBLEdBQWFBLEVBQVM2c0MsS0FBSy9KLGdCQUdKOWlDLEVBQVM2c0MsS0FBN0JDLElBQUFBLE1BQU9oSyxJQUFBQSxlQUdSLENBRExnSyxHQUFzQixTQUFiQSxFQUFNLEdBQWdCQyxVQUFRcGtDLEVBQUUsU0FBV29rQyxVQUFRcGtDLEVBQUUsWUFDbERtNkIsS0FHaEIsU0FBU2tLLEdBQXFCanhDLE1BQ1YsZ0JBQWRBLEVBQUt4RixLQUF3QixJQUNiLGtCQUFkd0YsRUFBS3hGLFdBQ0EsQ0FBQyxHQUFJdzJDLFVBQVFwa0MsRUFBRSx1QkFFTixvQkFBZDVNLEVBQUt4RixXQUNBLENBQUMsR0FBSXcyQyxVQUFRcGtDLEVBQUUsd0JBRU4sMkJBQWQ1TSxFQUFLeEYsV0FDQSxDQUFDLEdBQUl3MkMsVUFBUXBrQyxFQUFFLGtDQUlwQnNrQyxPQURnQnh4QyxHQUFhTSxFQUFLMUYsWUFBWSxNQUE3QzlELE9BQU1tRixVQUdUcUUsRUFBSzFGLFdBQVdVLE1BQU1nQixjQUFjWixTQUFTLGVBQzdDNEUsRUFBSzFGLFdBQVdVLE1BQU1nQixjQUFjWixTQUFTLHFCQUl0QyxDQUZQODFDLEVBQWlCRixVQUFRcGtDLEVBQUUscUJBRUhwVyxPQUFNOEMsRUFEYjBHLEVBQUsxRixXQUFXVyxZQUlMLGFBQTFCK0UsRUFBSzFGLFdBQVdVLFlBRVgsQ0FEUGsyQyxFQUFpQkYsVUFBUXBrQyxFQUFFLFlBQ0hwVyxPQUFNOEMsT0FBV0EsTUFHYixZQUExQjBHLEVBQUsxRixXQUFXVSxZQUVYLENBRFBrMkMsRUFBaUJGLFVBQVFwa0MsRUFBRSxXQUNIcFcsT0FBTThDLE9BQVdBLE1BR3ZDMEcsRUFBSzFGLFdBQVd1RixLQUNsQnF4QyxFQUFpQkYsVUFBUXBrQyxFQUN2QjVNLEVBQUsxRixXQUFXdUYsS0FBSzdELGNBQWN1RCxRQUFRLFlBQWEsU0FFckQsS0FDQ3ZFLEVBQVFnRixFQUFLMUYsV0FBV1UsTUFDM0J1RSxRQUFRLFNBQVUsSUFDbEJ2RCxjQUNBdUQsUUFBUSxZQUFhLElBQ3hCMnhDLEVBQWlCRixVQUFRcGtDLEVBQUU1UixNQUkzQmdGLEVBQUsxRixXQUFXNkUsS0FDVyxTQUExQmEsRUFBSzFGLFdBQVdVLE9BQThDLFlBQTFCZ0YsRUFBSzFGLFdBQVdVLE9BQ3JELE9BQ000RCxFQUFXTSxHQUFZYyxFQUFLMUYsWUFDNUJ1RixZQUFPRyxFQUFLMUYsV0FBVzJKLDZCQUFoQmt0QyxFQUEwQkwsS0FBS0MsTUFDdENoSyxFQUFXOEosR0FBWTd3QyxFQUFLMUYsV0FBVzJKLGdCQUN0QyxDQUNMaXRDLEVBQ0F2eUMsR0FBWW5JLEVBQU1vSSxHQUNsQmpELEVBQ0FpRCxFQUNBaUIsRUFDQWtuQyxNQUl3QixrQkFBMUIvbUMsRUFBSzFGLFdBQVdVLE9BQ1UscUJBQTFCZ0YsRUFBSzFGLFdBQVdVLE1BQ2hCLE9BQzBCZ0YsRUFBSzFGLFdBQXZCc0IsSUFBQUEsUUFBU3dELElBQUFBLFdBR1YsQ0FBQzh4QyxFQUZRdDFDLEVBQVUrQyxHQUFZL0MsRUFBUTBELE1BQU0sS0FBSyxHQUFJRixHQUFRNUksRUFFcENtRixFQUFPeUQsT0FBTTlGLEVBRDdCdTNDLEdBQVk3d0MsRUFBSzFGLFdBQVcySixpQkFHeEMsQ0FBQ2l0QyxFQUFnQjE2QyxFQUFNbUYsU0FFQXFFLEVBQUsxRixXQUE3QkksSUFBQUEsT0FBUUUsSUFBQUEsWUFDVncyQyxFQUFRMTJDLEVBQU9LLHFCQUFnQkwsRUFBT0ssb0JBQW9CLEdBQzFEczJDLEVBQVF6MkMsRUFBWUcscUJBQWdCSCxFQUFZRyxVQUFhLEdBQzdEdTJDLEVBQVE1MkMsRUFBT2xFLEtBQ2YrNkMsRUFBUTMyQyxFQUFZcEUsV0FDbkIsQ0FDTHc2QyxVQUFRcGtDLEVBQUUsMEJBQ1Bva0MsVUFBUXBrQyxFQUFFLHNCQUFhMGtDLFVBQVFGLGNBQVNKLFVBQVFwa0MsRUFDakQsMkJBQ0cya0MsVUFBUUYsR0FDYnJ4QyxFQUFLd3hDLGdCQUlULFNBQVNDLEdBQW1DenhDLE9BQ3BDOHdCLEVBQU80TSxHQUFPN0osS0FBSzd6QixFQUFLMUYsV0FBV3cyQixNQUNyQ2gxQixFQUFNa0UsRUFBSzFGLFdBQVdvM0MsU0FDdEJWLFVBQVFwa0MsRUFBRSxXQUNWb2tDLFVBQVFwa0MsRUFBRSxvQkFFWjlRLEVBREVnMUIsRUFBS1csT0FBT2lNLEtBQVUsaUJBQ2Y1aEMsY0FBT2sxQyxVQUFRcGtDLEVBQUUsYUFDakJra0IsRUFBS1csT0FBT2lNLEtBQVN6ZixJQUFJLEVBQUcsT0FBUSxpQkFDcENuaUIsY0FBT2sxQyxVQUFRcGtDLEVBQUUsMEJBRWpCOVEsY0FBT2cxQixFQUFLem1CLE9BQU8sWUFFOUJ2TyxZQUFTQSxjQUFPNGhDLEdBQU81TSxHQUFNem1CLE9BQU8sY0FnRmhDc25DLDZDQXFGUXA2Qyx5Q0FDSkEsSUE4QlJxNkMsbUJBQXFCLFdBQ2ZaLFVBQVE1cEMsV0FBYXlxQyxFQUFLdDZDLE1BQU1zTCxNQUNsQ211QyxVQUFRYyxlQUFlRCxFQUFLdDZDLE1BQU1zTCxTQUt0Q2t2QyxpQ0FBbUMsU0FBQUMsR0FFN0JBLEVBQVV4NUMsUUFBVXE1QyxFQUFLSSxNQUFNejVDLE9BQVVxNUMsRUFBS0ksTUFBTUMsV0FDakRDLFNBQVMsQ0FDWjM1QyxNQUFPdzVDLEVBQVV4NUMsV0FLdkJpMUMsU0FBVyxTQUFDekMsU0FBU29ILElBQUFBLFNBQVVod0MsSUFBQUEsT0FDdkJpd0MsRUFBVyxDQUNmNzVDLE1BQU9xNUMsRUFBS1MsUUFBVUYsR0FBWSxHQUNsQ0csbUJBQW9CVixFQUFLdDZDLE1BQU1pN0MsZUFHNUJGLE9BQVMsS0FDVFQsRUFBS0ksTUFBTUMsU0FLVCxHQUFlLFVBQVg5dkMsR0FBc0J5dkMsRUFBS0ksTUFBTVEsTUFBTyxJQUc3Q1osRUFBS0ksTUFBTVMsYUFDYkMsYUFBYWQsRUFBS0ksTUFBTVMsYUFFWCxTQUFYdHdDLEVBQW1CLEtBRWZ3d0MsRUFBUUMsWUFBVyxhQUNsQlYsU0FBUyxDQUFFVyxRQUFRLE1BQ3ZCLEtBQ0hULEVBQVNLLFlBQWNFLEVBQ3ZCUCxFQUFTUyxRQUFTLElBRWZYLFNBQVNFLFNBbEJkQSxFQUFTSCxTQUFVLElBQ2RDLFNBQVNFLEdBQVUsa0JBQ3RCUixFQUFLL0ksY0FBYyxDQUFFdHdDLE1BQU80NUMsR0FBWSxXQW9COUMxRSxPQUFTLFdBQ0htRSxFQUFLSSxNQUFNTSxxQkFHWFYsRUFBS0ksTUFBTUMsV0FDUnR4QyxNQUFNNHFDLFVBRVIyRyxTQUFTLENBQ1pELFNBQVMsRUFDVEssb0JBQW9CLEVBQ3BCLzVDLE1BQU9xNUMsRUFBS3Q2QyxNQUFNaUIsWUFJdEJ1NkMsV0FBYSxTQUFDdHZCLEVBQUc2akIsTUFDWHVLLEVBQUtJLE1BQU1RLE1BQU8sSUFDUSwyQkFBeEJuTCxFQUFJdG9DLFdBQVd4RSxtQkFDWjIzQyxTQUNILENBQ0VwdkMsUUFBUyxDQUFDLFlBQWEsUUFDdkJpd0MsV0FBVyxFQUNYQyxpQkFBa0IzTCxFQUFJdG9DLFdBQVd4RSxLQUNqQ2hDLE1BQU8sS0FFVCxhQUNPc3dDLGNBQWMsQ0FBRXR3QyxNQUFPLFdBTVIsU0FBeEI4dUMsRUFBSXRvQyxXQUFXeEUsTUFDUyxnQkFBeEI4c0MsRUFBSXRvQyxXQUFXeEUsbUJBRVYyM0MsU0FDSCxDQUNFcHZDLFFBQVM4dUMsRUFBS3Q2QyxNQUFNd0wsUUFDcEJpd0MsV0FBVyxFQUNYQyxpQkFBa0IzTCxFQUFJdG9DLFdBQVd4RSxLQUNqQzA0QyxnQkFBaUI1TCxFQUFJNEwsa0JBRXZCLGFBQ09wSyxjQUFjLENBQUV0d0MsTUFBTyxVQUs3QjI2QyxlQUFnQixJQUNoQmhCLFNBQ0gsQ0FDRUQsU0FBUyxFQUNUMTVDLE1BQU84dUMsRUFBSThMLGtCQUViLGFBQ094eUMsTUFBTXl5QyxPQUNQeEIsRUFBS3Q2QyxNQUFNKzdDLGtCQUNSLzdDLE1BQU0rN0MsZ0JBQWdCaE0sRUFBSXRvQyxXQUFZc29DLEVBQUk0TCxtQkFFMUMzN0MsTUFBTXV6QyxTQUFTeEQsRUFBSXRvQyxXQUFZNnlDLEVBQUt0NkMsTUFBTTRILE1BRTVDZ3pDLFNBQ0gsQ0FDRUksb0JBQW9CLEVBQ3BCeHZDLFFBQVM4dUMsRUFBS3Q2QyxNQUFNd0wsUUFDcEJpd0MsV0FBVyxFQUNYcEssWUFBYSxLQUVmLGFBQ091SyxlQUFnQixNQUl2QnRCLEVBQUt0NkMsTUFBTWc4QyxhQUNUMUIsRUFBS3Q2QyxNQUFNaTdDLFdBQVlYLEVBQUt0NkMsTUFBTWk4QyxjQUUvQmo4QyxNQUFNZzhDLGNBRVQxQixFQUFLdDZDLE1BQU1pN0MsWUFDUmlCLDhCQUtOdEIsVUFDSCxTQUFBdUIsU0FBYyxDQUNaVCxpQkFBa0JTLEVBQVVsN0MsVUFFOUIsa0JBQU1xNUMsRUFBSzhCLDhCQUtqQkMsNEJBQThCLGFBQ3ZCekIsU0FBUyxDQUNadkosWUFBYSxHQUNiN2xDLFFBQVM4dUMsRUFBS3Q2QyxNQUFNd0wsUUFDcEJpd0MsV0FBVyxFQUNYZCxTQUFTLE9BSWJsSixtQkFBcUIsU0FBQWhxQyxTQUVHLDJCQUFwQkEsRUFBV3hFLE1BQ1MsU0FBcEJ3RSxFQUFXeEUsS0FFSixHQ3JkRSxTQUFrQkYsT0FDekJ5RyxFQUFRckIsR0FBYXBGLEdBQVksVUFDL0JBLEVBQVdVLFdBQ1osb0JBQ0Esc0JBQ0EsbUJBQ0EsY0FDSStGLEVBQU0sSUFBTUEsRUFBTSxPQUN0QixpQ0FDQSx3QkFDSUEsRUFBTSxrQkFFTkEsRUFBTTFMLE9BQVMsR0FBa0IsS0FBYjBMLEVBQU0sR0FDN0JBLEVBQU1LLEtBQUssTUFDWEwsRUFBTSxJQUFNQSxFQUFNLElEeWNqQjh5QyxDQUFTNzBDLEVBQVcxRSxlQUc3QnE1QyxzQkFBd0IsV0FFYSwyQkFBaEM5QixFQUFLSSxNQUFNZ0Isa0JBQ3NCLFNBQWhDcEIsRUFBS0ksTUFBTWdCLG1CQUNicEIsRUFBS0ksTUFBTVEsTUFZRlosRUFBS0ksTUFBTWdCLGtCQUFvQnBCLEVBQUtJLE1BQU1RLFNBRTlDTixTQUNILENBQ0VjLGlCQUFrQixLQUNsQmYsU0FBUyxJQUVYLFdBQ01MLEVBQUtJLE1BQU1ySixZQUFZdnpDLFdBQ3BCdUwsTUFBTXl5QyxTQUNOOTdDLE1BQU11ekMsU0FDVCtHLEVBQUtJLE1BQU1ySixZQUFZaUosRUFBS0ksTUFBTWlCLGlCQUNsQ3JCLEVBQUt0NkMsTUFBTTRILElBR1QweUMsRUFBS3Q2QyxNQUFNaTdDLFlBQ1JpQixxQkFHTDVCLEVBQUt0NkMsTUFBTWc4QyxhQUNUMUIsRUFBS3Q2QyxNQUFNaTdDLFdBQVlYLEVBQUt0NkMsTUFBTWk4QyxjQUUvQmo4QyxNQUFNZzhDLG9CQWhDZHBCLFNBQ0gsQ0FDRWMsaUJBQWtCLEtBQ2xCZixTQUFTLElBRVgsYUFDT3R4QyxNQUFNNHFDLGNBa0NuQnNJLFlBQWMsa0JBRVZ2SixrQ0FDRS92QyxLQUFLLFNBQ0w4d0MsVUFBV3hCLEdBQU8sZUFDbEJpQyxRQUFTOEYsRUFBS2xKLHdCQUNGcUksVUFBUXBrQyxFQUFFLHVCQUV0QjI5Qix3QkFBQzJCLFdBQUtDLElBQUksUUFBUTFDLE1BQU9vSSxFQUFLdDZDLE1BQU1reUMsWUFLMUNYLGNBQWdCLGdCQUFHdHdDLElBQUFBLE1BQU91N0MsSUFBQUEscUJBQ2pCbEMsRUFBS00sU0FDVixDQUFFTSxPQUFPLEVBQU9zQixjQUFnQkEsSUFBZ0IsSUFDaEQsZUFDTWxDLEVBQUtzQixtQkFPTGx1QyxFQUhFK3VDLEVBQ0pDLFVBQVFwQyxFQUFLdDZDLE1BQU0wTixVQUNuQjRzQyxFQUFLdDZDLE1BQU0wTixRQUFRN0osU0FBUyxhQUUxQnkyQyxFQUFLSSxNQUFNZSxXQUNiL3RDLEVBQVUsQ0FBQyxjQUVUZ3ZDLFVBQVFwQyxFQUFLdDZDLE1BQU0wTixVQUNuQjRzQyxFQUFLdDZDLE1BQU0wTixRQUFRN0osU0FBUyxXQUU1QjZKLEVBQVF0TCxLQUFLLFVBR2JzNkMsVUFBUXBDLEVBQUt0NkMsTUFBTTBOLFVBQ25CNHNDLEVBQUt0NkMsTUFBTTBOLFFBQVE3SixTQUFTLHdCQUU1QjZKLEVBQVF0TCxLQUFLLHVCQUVMczZDLFVBQVFwQyxFQUFLdDZDLE1BQU0wTixXQUM3QkEsSUFBYzRzQyxFQUFLdDZDLE1BQU0wTixTQUd2Qit1QyxJQUNDbkMsRUFBS3Q2QyxNQUFNaTdDLFdBQ1h5QixVQUFRcEMsRUFBS3Q2QyxNQUFNd0wsVUFDbEI4dUMsRUFBS3Q2QyxNQUFNd0wsUUFBUTNILFNBQVMsZUFFOUI2SixFQUFRdEwsS0FBSywyQlhyQkksU0FDM0JzTCxFQUNBbEMsRUFDQW1DLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBQ0E1QyxFQUNBNkMsRUFDQUMsRUFDQUMsR0FFQUYsRUFBUyxNQUNUUCxHQUNFRSxFQUNBbEMsRUFDQW1DLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBQ0E1QyxFQUNBNkMsRUFDQUMsRUFDQUMsR1djSTB1QyxDQUNFanZDLEVBWkE0c0MsRUFBS0ksTUFBTWx2QyxTQUNYOHVDLEVBQUtJLE1BQU1sdkMsUUFBUXhGLFFBQ2pCLFNBQUEwVixXQUVJK2dDLEdBQ00sY0FBTi9nQyxJQUNDNCtCLEVBQUtJLE1BQU1lLFlBQ1huQixFQUFLdDZDLE1BQU1pN0MsYUFPbEJYLEVBQUt0NkMsTUFBTTJOLGNBQ1gyc0MsRUFBS3Q2QyxNQUFNNE4sY0FDWDBzQyxFQUFLdDZDLE1BQU02TixjQUNYeXNDLEVBQUt0NkMsTUFBTThOLGNBQ1gsQ0FDRXpFLE1BQU9wSSxHQUFTLEtBRWxCLFNBQUEyN0MsTUFDc0IsTUFBaEJBLE9BSUV2TCxHQUFldUwsRUFBYWwyQyxTQUFXLElBQzFDVixRQUNDLFNBQUF5QixTQUNzQixnQkFBcEJBLEVBQVd4RSxNQUNVLGdCQUFwQndFLEVBQVd4RSxNQUNWd0UsRUFBVzFFLFdBQVd3MkIsS0FBTzRNLEtBQVM3SixVQUUzQ3YyQixLQUFJLFNBQUEwQixNQUVtQixvQkFBcEJBLEVBQVd4RSxNQUNTLGtCQUFwQndFLEVBQVd4RSxNQUNTLDJCQUFwQndFLEVBQVd4RSxNQUNTLFNBQXBCd0UsRUFBV3hFLEtBQ1gsS0FDTTQ1QyxPQUFrQnAxQyxVQUN4Qm8xQyxFQUFXOTVDLFdBQVdXLFFBQVUrMUMsVUFBUXBrQyxFQUN0QzVOLEVBQVcxRSxXQUFXVyxTQUVqQm01QyxTQUVGcDFDLEtBR1R4RyxJQUFVcTVDLEVBQUtJLE1BQU16NUMsT0FDckJBLElBQVVxNUMsRUFBS0ksTUFBTWdCLGtCQUNXLDJCQUFoQ3BCLEVBQUtJLE1BQU1nQixrQkFDcUIsU0FBaENwQixFQUFLSSxNQUFNZ0Isa0JBQ3FCLGdCQUFoQ3BCLEVBQUtJLE1BQU1nQixvQkFFTmQsU0FDSCxDQUNFTSxPQUFPLEVBQ1A3SixZQUFBQSxJQUVGLGtCQUFNaUosRUFBSzhCLDhCQUlqQjlCLEVBQUt0NkMsTUFBTWdPLFNBQ1hzc0MsRUFBS3Q2QyxNQUFNaU8saUJBTW5CbWpDLFdBQWEsZUFDTDBKLEVBQVcsQ0FDZkgsU0FBUyxFQUNUMTVDLE1BQU8sR0FDUHVLLFFBQVM4dUMsRUFBS3Q2QyxNQUFNd0wsUUFDcEJpd0MsV0FBVyxLQUdSYixTQUFTRSxHQUFVLGtCQUN0QlIsRUFBSy9JLGNBQWMsQ0FBRXR3QyxNQUFPLEdBQUl1N0MsZUFBZSxPQUU3Q2xDLEVBQUt0NkMsTUFBTTg4QyxXQUNSOThDLE1BQU04OEMsUUFBUXhDLEVBQUt0NkMsTUFBTTRILE1BRTNCeUIsTUFBTTRxQyxXQUdiOEksYUFBZSxTQUFBQyxRQUNSM3pDLE1BQU00cUMsUUFDUHFHLEVBQUt0NkMsTUFBTWk3QyxZQUNSajdDLE1BQU0wNEMsUUFFUjRCLEVBQUtJLE1BQU1DLFFBQVMsS0FDakJHLEVBQVcsQ0FDZkgsU0FBUyxFQUVUZSxpQkFBa0IsS0FDbEJWLG1CQUFvQlYsRUFBS3Q2QyxNQUFNaTdDLFVBSTNCZ0MsRUFBZSxDQUNuQnRDLFNBQVMsRUFDVGUsaUJBQWtCLEtBQ2xCejZDLE1BQU8rN0MsR0FHSjFDLEVBQUtJLE1BQU1ySixZQUFZdnpDLFVBWXJCeXpDLGNBQWMsQ0FBRXR3QyxNQUFPcTVDLEVBQUtJLE1BQU16NUMsVUFDbEMyNUMsU0FBU0UsSUFYWSxXQUF0QjU5QyxFQUFPOC9DLElBQTRCQSxJQUtoQ3BDLFNBQVNxQyxHQUFjLGtCQUMxQjNDLEVBQUsvSSxjQUFjLENBQUV0d0MsTUFBTys3QyxTQUx6QnBDLFNBQVNFLEdBQVUsa0JBQ3RCUixFQUFLL0ksY0FBYyxDQUFFdHdDLE1BQU9xNUMsRUFBS0ksTUFBTXo1QyxlQWNqRGk4QyxvQkFBc0IsU0FBQUMsR0FDQSxPQUFoQkEsTUFDRzl6QyxNQUFROHpDLEVBQVk5ekMsTUFDckJpeEMsRUFBS3Q2QyxNQUFNbzlDLFlBQ1JwOUMsTUFBTW85QyxTQUFTRCxFQUFZOXpDLFdBTXRDZzBDLFVBQVksU0FBQXhDLEtBQ0xFLE9BQVNGLEVBQVM5M0MsV0FBVzlELFNBQzVCNjdDLEVBQVcsQ0FDZkgsU0FBUyxFQUNUMTVDLE1BQU80NUMsRUFBUzkzQyxXQUFXOUQsS0FDM0JtOUMsc0JBQXVCdkIsRUFDdkJLLE9BQU8sS0FHSk4sU0FBU0UsS0FDVHZKLGNBQWMsQ0FBRXR3QyxNQUFPNDVDLEVBQVM5M0MsV0FBVzlELFNBQzNDb0ssTUFBTTRxQyxXQUdiSCxXQUFhLFNBQUFyckMsT0FDTHlFLEVBQ1UsZ0JBQWR6RSxFQUFLeEYsVUFFSXdGLEdBQ0h3eEMsZUFBZ0JDLEdBQW1DenhDLEtBRXJEQSxFQUNBNjBDLEVBQVU1RCxHQUFxQmp4QyxVQUVuQ3VxQyx3QkFBQ3VLLFdBQ0M5MEMsS0FBTXlFLEVBQ05vd0MsUUFBU0EsRUFDVDFPLFNBQVUwTCxFQUFLSSxNQUFNUSxNQUNyQkQsU0FBVVgsRUFBS3Q2QyxNQUFNaTdDLFNBQ3JCdUMsb0JBQXFCL0QsVUFBUXBrQyxFQUFFLGFBQy9CNjhCLE1BQU9vSSxFQUFLdDZDLE1BQU1reUMsTUFDbEJFLHVCQUF3QmtJLEVBQUt0NkMsTUFBTW95Qyx1QkFDbkNpTCxVQUFXL0MsRUFBSytDLFVBQ2hCL0ssWUFBYWdJLEVBQUt0NkMsTUFBTXN5QyxZQUN4Qm1MLG9CQUFxQm5ELEVBQUt0NkMsTUFBTXk5QyxvQkFDaENDLGVBQWdCcEQsRUFBS3Q2QyxNQUFNMDlDLGVBQzNCQyxRQUFTckQsRUFBS3Q2QyxNQUFNMjlDLGFBSzFCekIsa0JBQW9CLGFBQ2JsOEMsTUFBTTg0QyxXQUNOOEIsU0FDSCxDQUNFSSxvQkFBb0IsRUFDcEIvNUMsTUFBT3E1QyxFQUFLdDZDLE1BQU1pQixRQUVwQixXQUNFMDFDLE9BQU9vQyxTQUFTLEVBQUd1QixFQUFLSSxNQUFNL0IsV0FDekIwRCxvQ0FLWHVCLFFBQVUsU0FBQW5LLE9BQ0o2RyxFQUFLc0IsbUJBR0hqSSxFQUFVRixFQUFNejFDLE9BQ04sV0FBWjIxQyxLQUNHaUgsU0FBUyxDQUFFRCxTQUFTLElBRXZCTCxFQUFLSSxNQUFNQyxjQUNHLFVBQVpoSCxHQUE0QyxLQUFyQjJHLEVBQUtJLE1BQU16NUMsU0FDL0IyNUMsU0FBUyxDQUFFYyxrQkFBa0IsSUFBUSxhQUNuQ25LLGNBQWMsQ0FBRXR3QyxNQUFPcTVDLEVBQUtJLE1BQU16NUMsa0JBR3RDODdDLGtCQUtRLFVBQVpwSixHQUFtQyxjQUFaQSxHQUNILEtBQXJCMkcsRUFBS0ksTUFBTXo1QyxVQU1HLGNBQVoweUMsR0FBZ0QsS0FBckIyRyxFQUFLSSxNQUFNejVDLE1BQWMsS0FDaEQ2NUMsRUFBVyxDQUNmSCxTQUFTLEVBQ1QxNUMsTUFBT3E1QyxFQUFLSSxNQUFNejVDLFNBR2YyNUMsU0FBU0UsR0FBVSxrQkFDdEJSLEVBQUsvSSxjQUFjLENBQUV0d0MsTUFBT3E1QyxFQUFLSSxNQUFNejVDLFdBR3RDcTVDLEVBQUtJLE1BQU1DLFdBQ1RDLFNBQVMsQ0FBRUQsU0FBUyxJQUdYLFFBQVpoSCxLQUNHd0MsZ0JBbkJBL0UsaUJBdUJUeU0sd0JBQTBCLGVBQ3BCejVDLEVBQVEsR0FDTjA1QyxFQUFrQnhELEVBQUtJLE1BQU1ySixZQUFZLFVBQzNDeU0sSUFDRUEsRUFBZ0I3NkMsTUFBUTY2QyxFQUFnQjc2QyxLQUFLWSxTQUFTLGNBQ3hETyxFQUFNaEMsS0FBS3EzQyxVQUFRcGtDLEVBQUUsY0FFdkJqUixFQUFRQSxFQUFNMEYsT0FBTzR2QyxHQUFxQlksRUFBS0ksTUFBTXJKLFlBQVksTUFFNURqeUMsRUFBSSxJQUFJMitDLElBQUkzNUMsSUFBUXlGLEtBQUssVUFHbEMrbkMsaUJBQW1CLGlCQUtiMEksRUFBS3Q2QyxNQUFNNE4sY0FIYm1CLElBQUFBLFFBQ0E2aUMsSUFBQUEsaUJBQ0FvTSxJQUFBQSxrQkFFRWp2QyxHQUFXNmlDLElBQ2JBLEVBQWlCN2lDLEdBQ2JpdkMsR0FDRkEsRUFBa0JqdkMsS0FFZndpQyxjQUFjLENBQUV0d0MsTUFBT3E1QyxFQUFLSSxNQUFNejVDLFlBSTNDZzlDLDhCQUFnQyxpQkFDWixXQUFsQjNELEVBQUt0NkMsTUFBTTRILElBQ08sZ0JBQWxCMHlDLEVBQUt0NkMsTUFBTTRILElBQ08sY0FBbEIweUMsRUFBS3Q2QyxNQUFNNEgsSUFDTyx5QkFBbEIweUMsRUFBS3Q2QyxNQUFNNEgsTUFFYnMyQyxRQUFVLFdBQ1UsQ0FDaEIsbUJBQ0Esc0JBQ0EsbUJBQ0Esb0JBQ0EsZ0JBQ0Esc0JBQ0EsZUFDQSwyQkFDQSx1QkFDQSx5QkFFWXI2QyxTQUFTeTJDLEVBQUtJLE1BQU16NUMsVUFDM0Jtd0MsaUJBRUR1SCxFQUFVaEMsT0FBT3dILG1CQUNoQjdELEVBQUtNLFNBQVMsQ0FDbkJqQyxRQUFBQSxLQTVqQkZ4UyxHQUFPOEUsR0FBR2lDLFdBQVdsdEMsRUFBTTRwQyxVQUMzQnpELEdBQU9wekIsT0FBTy9TLEVBQU1zTCxRQUVmb3ZDLE1BQVEsQ0FDWHo1QyxNQUFPakIsRUFBTWlCLE1BQ2Jvd0MsWUFBYSxHQUNic0osU0FBUyxFQUNUTyxPQUFPLEVBQ1BGLG9CQUFvQixFQUNwQnh2QyxRQUFTeEwsRUFBTXdMLFFBQ2Zpd0MsV0FBVyxFQUNYTixZQUFhLEtBQ2JJLFFBQVEsRUFDUkcsaUJBQWtCLEtBQ2xCQyxnQkFBaUIsRUFDakJhLGVBQWUsRUFDZjdELFFBQVMsR0FFWGw3QyxPQUFPd00sS0FBS29qQyxJQUFjNWpDLFNBQVEsU0FBQTZCLEdBQ2hDbXVDLFVBQVEyRSxrQkFBa0I5eUMsRUFBTSxjQUFlK2hDLEdBQWEvaEMsd0RBTWhFLFNBQXNCbXZDLEVBQVc0RCxVQUN2QnIxQyxVQUFRcTFDLEVBQVdqZ0QsS0FBS3M4QyxTQUFXMXhDLFVBQVF5eEMsRUFBV3I4QyxLQUFLNEIsNkJBc2lCckUsc0JBQ015NUMsVUFBUTVwQyxXQUFhelIsS0FBSzRCLE1BQU1zTCxNQUNsQ211QyxVQUFRYyxlQUFlbjhDLEtBQUs0QixNQUFNc0wsWUFPaENsTixLQUFLczhDLE1BSlB6NUMsSUFBQUEsTUFDQW93QyxJQUFBQSxZQUNBMkosSUFBQUEsbUJBQ0F3QixJQUFBQSxjQUVJbEwsRUFBYSxDQUNqQjhFLFlBQWFoNEMsS0FBSzRCLE1BQU1zK0Msc0JBQ3BCbGdELEtBQUs0QixNQUFNcytDLHNCQUNYN0UsVUFBUXBrQyxFQUFFalgsS0FBSzRCLE1BQU1vMkMsYUFDekJuMUMsTUFBQUEsRUFDQWkxQyxTQUFVOTNDLEtBQUs4M0MsU0FDZkMsT0FBUS8zQyxLQUFLKzNDLE9BQ2JwQyxvQkFDS3hCLEdBQU9scEMsa0JBQ1JqTCxLQUFLNEIsTUFBTWk3QyxVQUFZNzhDLEtBQUs0QixNQUFNMk4sY0FBZ0I0a0MsR0FBT2dNLEtBQU8sZUFDOURoTSxHQUFPbjBDLEtBQUs0QixNQUFNNEgsS0FBTyxlQUMzQnhKLEtBQUtzOEMsTUFBTXo1QyxNQUFRc3hDLEdBQU8wQyxTQUFXLGVBQ25DNzJDLEtBQUs0QixNQUFNdytDLGdCQUVqQi9KLFVBQVdyMkMsS0FBS3cvQyxRQUNoQm5PLFNBQVVyeEMsS0FBSzRCLE1BQU15dkMsVUFFakJnUCxFQUFZcmdELEtBQUs0QixNQUFNNEgsR0FBR0ksUUFBUSxlQUFnQixJQUNwRDAyQyxFQUFjdGdELEtBQUs0QixNQUFNMHhDLFdBQWErSCxVQUFRcGtDLEVBQUVvcEMsR0FDcERDLEVBQWNBLEVBQVkxMkMsUUFBUSxlQUFnQixRQUM1QzIyQyxFQUFtQnZnRCxLQUFLNEIsTUFBTXl2QyxtQkFDN0JnSyxVQUFRcGtDLEVBQUUsaUJBQ2IsR0FDRXVwQyxFQUFnQnhnRCxLQUFLNEIsTUFBTWk3QyxTQUM3QnhCLFVBQVFwa0MsRUFBRSxtQ0FDVm9rQyxVQUFRcGtDLEVBQUUsb0NBQ1J3cEMsRUFBb0JwRixVQUFRcGtDLEVBQUUseUJBQTBCLENBQzVEeXBDLE1BQU96TixFQUFZdnpDLFNBR2ZpaEQsRUFBd0Isa0JBQ3hCQyxFQUFLbkIsMkJBQTZCbUIsRUFBS2gvQyxNQUFNaUIsTUFDeEN3NEMsVUFBUXBrQyxFQUFFLDRCQUE2QixDQUM1QzRwQyxVQUFXRCxFQUFLbkIsMkJBQTZCbUIsRUFBS2gvQyxNQUFNaUIsUUFHckQsV0FJUCt4Qyx3QkFBQ0EsVUFBTWtNLGNBQ0xsTSxnQ0FBTWUsVUFBV3hCLEdBQU8sV0FBWTRNLEtBQUssVUFDckMvZ0QsS0FBS3M4QyxNQUFNYSxRQUNYbjlDLEtBQUtzOEMsTUFBTUMsbUJBQ1JrRSxjQUFxQkUsTUFFM0IzZ0QsS0FBSzRCLE1BQU1pN0MsVUFDVmpJLHdCQUFDL0IsSUFDQ29CLFdBQVkySSxFQUNaOUosV0FBWTl5QyxLQUFLNEIsTUFBTWt4QyxXQUN2QlUsaUJBQWtCeHpDLEtBQUt3ekMsaUJBQ3ZCaHFDLEdBQUl4SixLQUFLNEIsTUFBTTRILEdBQ2Z3cEMsV0FBWWh6QyxLQUFLZ3pDLFdBQ2pCbndDLE1BQU83QyxLQUFLczhDLE1BQU16NUMsTUFDbEJvd0Msd0JBQ0tBLElBQ0gsQ0FDRXB1QyxLQUFNLHVCQUNOUyxRQUFTKzFDLFVBQVFwa0MsRUFBRSwyQkFHdkJpOEIsZ0JBQ0tBLEdBQ0g4RSxZQUFhaDRDLEtBQUs2L0MsZ0NBQ2R4RSxVQUFRcGtDLEVBQUUsNkJBQ1ZpOEIsRUFBVzhFLGNBRWpCN0UsY0FBZW56QyxLQUFLbXpDLGNBQ3BCOEssNEJBQTZCaitDLEtBQUtpK0MsNEJBQ2xDNUssbUJBQW9CcnpDLEtBQUtxekMsbUJBQ3pCRCxpQkFBa0JwekMsS0FBSzAxQyxXQUN2QjNDLFlBQWEveUMsS0FBSzg5QyxrQkFDbEJ4SyxVQUFXaU4sRUFDUjcwQyxPQUFPLEtBQ1BBLE9BQU80MEMsR0FDUDUwQyxPQUFPLEtBQ1BBLE9BQU9pMUMsS0FDVjM2QyxNQUNFaEcsS0FBSzRCLE1BQU1vL0MsWUFDUGhoRCxLQUFLNEIsTUFBTW8vQyxZQUNYM0YsVUFBUXBrQyxFQUFFalgsS0FBSzRCLE1BQU00SCxJQUUzQitwQyxxQkFBc0J2ekMsS0FBS285QyxXQUMzQjNKLGlCQUFrQjRILFVBQVFwa0MsRUFBRSw4QkFDNUJ5OEIsd0JBQXlCMkgsVUFBUXBrQyxFQUFFLFVBQ25DMDhCLDBCQUEyQjBILFVBQVFwa0MsRUFBRSxVQUNyQzI4QixxQkFBc0J5SCxVQUFRcGtDLEVBQUUsc0JBQ2hDNDhCLFdBQVl1SyxFQUNadEssTUFBTzl6QyxLQUFLNEIsTUFBTWt5QyxNQUNsQkMsV0FBWS96QyxLQUFLNEIsTUFBTW15QyxXQUN2QkMsdUJBQXdCaDBDLEtBQUs0QixNQUFNb3lDLHVCQUNuQ0UsWUFBYWwwQyxLQUFLNEIsTUFBTXN5QyxZQUN4QkUsV0FBWXAwQyxLQUFLNEIsTUFBTXd5QyxjQUd6QndJLEdBQ0FoSSwrQkFDRWUsVUFBV3NMLFVBQ1Q5TSxHQUFPLCtCQUNQQSxHQUFPbjBDLEtBQUs0QixNQUFNNEgsS0FFcEJ3b0MsTUFBTyxxQkFDU2h5QyxLQUFLNEIsTUFBTWt5QyxpQ0FDTDl6QyxLQUFLNEIsTUFBTW15QyxjQUdoQy96QyxLQUFLNEIsTUFBTXMvQyxNQUNWdE0sK0JBQ0VlLFVBQVdzTCxVQUNUOU0sNkJBQ0FBLEdBQU9uMEMsS0FBSzRCLE1BQU00SCxJQUNsQnhKLEtBQUs0QixNQUFNdytDLDBCQUNOcGdELEtBQUs0QixNQUFNdytDLGdDQUdsQnhMLHdCQUFDMkIsV0FBS0MsY0FBUXgyQyxLQUFLNEIsTUFBTXMvQyxTQUc3QnRNLHdCQUFDaEMsV0FDQzZELHdCQUF5QnoyQyxLQUFLczhDLE1BQU1DLFFBQ3BDL3lDLEdBQUl4SixLQUFLNEIsTUFBTTRILEdBQ2Z5cEMsWUFBYUEsRUFDYnlELDRCQUE2QjEyQyxLQUFLbXpDLGNBQ2xDOEssNEJBQTZCaitDLEtBQUtpK0MsNEJBQ2xDNUssbUJBQW9CcnpDLEtBQUtxekMsbUJBQ3pCRCxpQkFBa0JwekMsS0FBSzAxQyxXQUN2QnhDLGdCQUNLQSxHQUNINE0sUUFBUzkvQyxLQUFLOC9DLFVBRWhCbkosK0JBQ0FDLHdCQUF5QixrQkFBTWdLLEVBQUt0RSxNQUFNQyxTQUMxQzRFLDBCQUEyQm5oRCxLQUFLczhDLE1BQU1lLFVBQ3RDckcsTUFBTzdDLEdBQ1A0QyxxQkFBc0IsU0FBQXowQyxVQUNwQnN5QyxnREFDRUEsaUNBQU9lLFVBQVd4QixHQUFPLFdBQVlnQyxRQUFTeUssRUFBS2gvQyxNQUFNNEgsSUFDdERtM0MsSUFDRWoxQyxPQUFPLEtBQ1BBLE9BQU82MEMsR0FDUDcwQyxPQUFPLEtBQ1BBLE9BQU80MEMsR0FDUDUwQyxPQUFPLEtBQ1BBLE9BQU84MEMsSUFFWjVMLDREQUNjK0wsSUFDVGoxQyxPQUFPLEtBQ1BBLE9BQU82MEMsR0FDUDcwQyxPQUFPLEtBQ1BBLE9BQU80MEMsR0FDUDUwQyxPQUFPLEtBQ1BBLE9BQU84MEMsR0FDVmgzQyxHQUFJbzNDLEVBQUtoL0MsTUFBTTRILEdBQ2Y0c0MsUUFBU3dLLEVBQUtqQyxhQUNkdEksVUFBV3VLLEVBQUtwQixTQUNabDlDLElBRUxzK0MsRUFBS3RFLE1BQU16NUMsT0FBUys5QyxFQUFLekMsZ0JBRzlCNUsscUJBQXNCdnpDLEtBQUtvOUMsV0FDM0J6TCxJQUFLM3hDLEtBQUs4K0MsK0JBbjBCSWxLLFVBQU13TSxXQUE1QnBGLEdBZ0RHcUYsYUFBZSxDQUNwQnZLLFdBQVcsRUFDWG5CLFVBQVcsR0FDWHVMLFVBQU12OUMsRUFDTmQsTUFBTyxHQUNQME0sbUJBQWU1TCxFQUNmdUosS0FBTSxLQUNORSxRQUFTLEdBQ1R5dkMsVUFBVSxFQUNWL0ksTUFBTyxVQUNQQyxXQUFZLFVBQ1pDLHVCQUF3QixVQUN4QnhJLFNBQVUsa0JBQ1Y1N0IsU0FBVSxDQUNSMHhDLGFBQWMsU0FDZEMsWUFBYSxXQUVmUCxpQkFBYXI5QyxFQUNieThDLGVBQWdCLEdBQ2hCRiwyQkFBdUJ2OEMsRUFDdkJ1d0MsWUFBYSxDQUNYZ0MsT0FBUSxLQUVWb0osZUFBZ0IsWUFDRixzQkFDQyxzQkFDQSx1QkFDQyx1QkFDQSwwQkFDRywyQkFDQyxXQUVwQmpPLFVBQVUsRUFDVmtPLGFBQVM1N0MsRUFDVHl3QyxZQUFZLHlDQWxGVjRILEdBQ0d0RSxVQUFZLENBQ2pCNUUsV0FBWTZFLFVBQVV0NUIsT0FBT3U1QixXQUM3QmQsVUFBV2EsVUFBVWh0QyxLQUNyQmdyQyxVQUFXZ0MsVUFBVXQ1QixPQUNyQjZpQyxLQUFNdkosVUFBVXQ1QixPQUNoQjdVLEdBQUltdUMsVUFBVXQ1QixPQUFPdTVCLFdBQ3JCSSxZQUFhTCxVQUFVdDVCLE9BQU91NUIsV0FDOUJzSSxzQkFBdUJ2SSxVQUFVdDVCLE9BQ2pDeGIsTUFBTzgwQyxVQUFVdDVCLE9BQ2pCN08sY0FBZW1vQyxVQUFVNkosSUFBSTVKLFdBQzdCdEUsVUFBV3FFLFVBQVV0NUIsT0FDckI4MkIsU0FBVXdDLFVBQVVuOEIsS0FDcEJqTSxjQUFlb29DLFVBQVV0NUIsT0FDekI1TyxjQUFla29DLFVBQVVuOEIsS0FDekI5TCxjQUFlaW9DLFVBQVVuOUIsT0FDekJra0MsUUFBUy9HLFVBQVVuOEIsS0FDbkJ3akMsU0FBVXJILFVBQVVuOEIsS0FDcEJtaUMsZ0JBQWlCaEcsVUFBVW44QixLQUMzQm9pQyxZQUFhakcsVUFBVW44QixLQUN2QnRPLEtBQU15cUMsVUFBVXQ1QixPQUNoQmpSLFFBQVN1cUMsVUFBVThKLFFBQVE5SixVQUFVdDVCLFFBQ3JDL08sUUFBU3FvQyxVQUFVOEosUUFBUTlKLFVBQVV0NUIsUUFDckN3K0IsU0FBVWxGLFVBQVVodEMsS0FDcEJtcEMsTUFBTzZELFVBQVV0NUIsT0FDakIwMUIsV0FBWTRELFVBQVV0NUIsT0FDdEIyMUIsdUJBQXdCMkQsVUFBVXQ1QixPQUNsQ210QixTQUFVbU0sVUFBVXQ1QixPQUNwQnpPLFNBQVUrbkMsVUFBVUUsTUFBTSxDQUN4QnlKLGFBQWMzSixVQUFVdDVCLE9BQ3hCa2pDLFlBQWE1SixVQUFVdDVCLFNBRXpCMmlDLFlBQWFySixVQUFVdDVCLE9BQ3ZCaThCLEtBQU0zQyxVQUFVbjhCLEtBQUtvOEIsV0FDckI4QyxPQUFRL0MsVUFBVW44QixLQUFLbzhCLFdBQ3ZCL25DLFNBQVU4bkMsVUFBVStKLE9BQ3BCdEIsZUFBZ0J6SSxVQUFVdDVCLE9BQzFCNjFCLFlBQWF5RCxVQUFVRSxNQUFNLENBQzNCM0IsT0FBUXlCLFVBQVVuOUIsU0FFcEI4a0MsZUFBZ0IzSCxVQUFVK0osT0FDMUJyQyxvQkFBcUIxSCxVQUFVK0osT0FDL0JyUSxTQUFVc0csVUFBVWh0QyxLQUNwQjQwQyxRQUFTNUgsVUFBVXQ1QixPQUNuQisxQixXQUFZdUQsVUFBVWh0QyxLQUN0Qmt6QyxXQUFZbEcsVUFBVWh0QyxXRXRSSHkyQyxHRnFqQ2pCTyxJRXJqQ2lCUCxHRnFqQzRCcEYsR0VwakMxQyxTQUFBcDZDLFNBQ29COFIsR0FBTTJtQyxnQkFBdkJDLElBQUFBLEtBQU1JLElBQUFBLGNBRVA5Rix3QkFBQ3dNLGtCQUFVOUcsS0FBTUEsRUFBTUksT0FBUUEsR0FBWTk0QyJ9
|