@digitransit-component/digitransit-component-autosuggest 4.4.0 → 4.5.0
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 +2 -2
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/package.json +3 -3
package/lib/index.development.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react"),require("prop-types"),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/get"),require("@digitransit-component/digitransit-component-suggestion-item"),require("lodash/isEqual"),require("lodash/memoize"),require("lodash/escapeRegExp"),require("lodash/cloneDeep"),require("@digitransit-component/digitransit-component-icon"),require("luxon"),require("lodash/isEmpty"),require("react-modal"),require("@digitransit-component/digitransit-component-dialog-modal")):"function"==typeof define&&define.amd?define(["exports","react","prop-types","i18next","classnames","react-autosuggest","lodash/debounce","lodash/flatten","lodash/take","lodash/isString","lodash/orderBy","lodash/uniqWith","lodash/get","@digitransit-component/digitransit-component-suggestion-item","lodash/isEqual","lodash/memoize","lodash/escapeRegExp","lodash/cloneDeep","@digitransit-component/digitransit-component-icon","luxon","lodash/isEmpty","react-modal","@digitransit-component/digitransit-component-dialog-modal"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).DTAutosuggest={},e.React,e.PropTypes,e.i18next,e.cx,e.Autosuggest,e.debounce,e.flatten,e.take,e.isString,e.orderBy,e.uniqWith,e.get,e.SuggestionItem,e.isEqual,e.memoize,e.escapeRegExp,e.cloneDeep,e.Icon,e.luxon,e.isEmpty,e.ReactModal,e.DialogModal)}(this,(function(e,t,n,o,i,s,r,a,l,u,c,d,p,h,f,g,b,m,y,v,_,S,k){"use strict";function w(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var x=w(t),O=w(n),j=w(o),M=w(i),R=w(s),P=w(r),E=w(a),C=w(l),L=w(u),I=w(c),N=w(d),z=w(p),F=w(h),A=w(f),T=w(g),q=w(b),D=w(m),V=w(y),B=w(_),H=w(S),$=w(k);function U(e){return U="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},U(e)}function W(e){var t=function(e,t){if("object"!=U(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,t||"default");if("object"!=U(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==U(t)?t:t+""}function G(e,t,n){return(t=W(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Y(e,t){return e&&t&&e===t}const Q=["stop","station","favouriteStop","favouriteStation"],Z=["favouriteVehicleRentalStation","bikestation"];function K(e){if(!e)return"";const t=e.split(":");return 0===t.length?"":`citybikes${t[0]}:bikestation:${t[1]}`}function X(e,t){const n=e.properties,o=t.properties;if("FutureRoute"===e.type&&"FutureRoute"===t.type){const e=n.origin,t=n.destination,i=o.origin,s=o.destination;return`${e.name}//${e.localadmin}//${t.name}//${t.localadmin}`===`${i.name}//${i.localadmin}//${s.name}//${s.localadmin}`}if("FutureRoute"===e.type||"FutureRoute"===t.type)return!1;if(Z.includes(n.layer)&&Z.includes(o.layer)){return(n.gid||K(n.labelId))===(o.gid||K(o.labelId))}if(n.gtfsId&&o.gtfsId)return n.gtfsId===o.gtfsId;if(Q.includes(n.layer)&&Q.includes(o.layer)&&n.gid&&o.gid)return n.gid===o.gid;const i=e&&e.geometry?e.geometry.coordinates:void 0,s=t&&t.geometry?t.geometry.coordinates:void 0;return!!(i&&s&&Math.abs(i[0]-s[0])<1e-6&&Math.abs(i[1]-s[1])<1e-6&&(Y(n.name,o.name)||Y(n.label,o.label)||Y(n.address,o.address)||Y(n.address,o.label)||Y(n.label,o.address)))}const J=e=>L.default(e)?e.toLowerCase():"",ee="back",te="currentPosition",ne="favouriteStop",oe="favouriteStation",ie="favouritePlace",se="favouriteRoute",re="favouriteVehicleRentalStation",ae="futureRoute",le="station",ue="selectFromMap",ce="ownLocations",de="stop",pe="bikestation",he="carpark",fe="bikepark",ge=({layer:e,type:t})=>"stop"===e||"favouriteStop"===e||"stop"===t||"favouriteStop"===t,be=(e,t)=>{switch(e){case te:return 1;case ee:return.9;case ue:return.8;case ce:return.79;case oe:case ie:case ne:case se:case re:return.45;case ae:return.44;case le:return L.default(t)&&0===t.indexOf("gtfs")?.43:.42;case he:case fe:case pe:return.38;case de:return.36;default:return.41}},me=(e,t,n="")=>{if(!Array.isArray(t))return t;const o=t=>L.default(t)&&e&&e.test(t),i=J(n),s=o(i),r=I.default(t,[e=>s&&o(J(e.properties.shortName))&&0===J(e.properties.shortName).indexOf(i)?1:0,e=>{const{confidence:t,layer:n,source:o}=e.properties;if(0===i.length)return be(n,o);if(!t)return be(n,o)+((e,t)=>L.default(e)&&0!==e.length?["name","label","address","shortName"].map((e=>t[e])).filter((e=>L.default(e)&&e.length>0)).map((t=>{const n=J(t);return 0===n.indexOf(e)?.5+e.length/n.length:.5*e.length/(e.length+1)})).reduce(((e,t)=>t>e?t:e),0):0)(i,e.properties);switch(n){case le:return t+(0===o.indexOf("gtfs")?.02:.01);case de:case he:case fe:return t-.05;case pe:return t-.04;default:return t}},"properties.shortName"],["desc","desc","asc"]);return N.default(r,X)},ye=(e,t)=>null!=t&&-1!==e.lastIndexOf(t)?e.substring(0,e.lastIndexOf(t)-1):e;function ve(e,t,n){if("string"==typeof t&&t.length>0){const o=t.toLowerCase().trim(),i=o.includes(" ")||o.includes(",");return e.filter((e=>{let t=[];n.forEach((n=>{let o=z.default(e,n);i||"properties.label"!==n&&"address"!==n||!o||(o=o.split(","),o.length>2?o.splice(o.length-2,2):o.length>1&&o.splice(o.length-1,1),o=o.join(",")),o&&(t=i?t.concat(o.toLowerCase()):t.concat(o.toLowerCase().replace(/,/g," ").split(" ")))}));for(let e=0;e<t.length;e++)if(0===t[e].indexOf(o))return!0;return!1}))}return e}function _e(e,t){return e?Object.keys(e).map((n=>{const o=t||n,i=e[n];return"object"==typeof i?_e(i,o):`${encodeURIComponent(o)}=${encodeURIComponent(i)}`})).join("&"):""}const Se=require("axios").default;function ke(e,t){return Se.get(encodeURI(e)+(t?(-1===e.search(/\?/)?"?":"&")+_e(t):""),{timeout:1e4,method:"GET",headers:{Accept:"application/json"}}).then((e=>e.data))}function we(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function xe(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?we(Object(n),!0).forEach((function(t){G(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):we(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Oe(e,t,n,o,i,s,r,a){const l=e?e.trim():null;if(null==l||l.length<1||r&&!r.test(l))return Promise.resolve([]);const u=s||"https://api.digitransit.fi/geocoding/v1/search";let c=xe(xe(xe({text:l},t),o),{},{lang:n});if(i&&(c=xe(xe({},c),{},{sources:i})),a){const e=a.toString();c=xe(xe({},c),{},{layers:e})}return ke(u,c).then((e=>e.features))}function je(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Me(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?je(Object(n),!0).forEach((function(t){G(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):je(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Re(e,t){if(!e||e.length<1)return Promise.resolve([]);let n="";const o=e.map((e=>{const t="stop"===e.type?"stop":"station";let o=`gtfs${e.gtfsId.split(":")[0].toLowerCase()}:${t}:GTFS:${e.gtfsId}`;return e.code&&(o+=`#${e.code}`),n+=`${o},`,Me(Me({},e),{},{gid:o})})).reduce((function(e,t){return e[t.gid]=t,e}),{});return ke(t,{ids:n.slice(0,-1)}).then((e=>e.features.map((e=>({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:ge(e.properties)?"favouriteStop":"favouriteStation"},geometry:e.geometry})))))}function Pe(e,t,n){let o=ve(e,t,["properties.name","properties.label","properties.address","properties.shortName","properties.longName"]);return n&&(o=o.filter((e=>!n.includes(e.properties.layer)))),Promise.resolve(C.default(o,10).map((e=>{const t=Me(Me({},e),{},{type:"OldSearch",timetableClicked:!1,arrowClicked:!1});return delete t.properties.confidence,t})))}const Ee=["route-TRAM","route-BUS","route-RAIL","route-FERRY","route-SUBWAY","route-AIRPLANE","route-FUNICULAR"],Ce=["venue","address","street"],Le=["carpark","bikepark"],Ie=["stop","station"];const Ne=P.default((function(e,t,n,o,i,s,{input:r},a,l,u){const{getPositions:c,getFavouriteLocations:d,getOldSearches:p,getFavouriteStops:h,parkingAreaSources:f,getLanguage:g,getStopAndStationsQuery:b,getFavouriteVehicleRentalStationsQuery:m,getFavouriteVehicleRentalStations:y,getFavouriteRoutesQuery:v,getFavouriteRoutes:_,getRoutesQuery:S,context:k,isPeliasLocationAware:w,minimalRegexp:x,lineRegexp:O,URL_PELIAS:j,URL_PELIAS_PLACE:M,feedIDs:R,geocodingSearchParams:P,geocodingSources:L,getFutureRoutes:I,cityBikeNetworks:N}=o,z=!e||0===e.length,F=!t||0===t.length,A=c(k),T=[],q={type:"all",term:r,results:[]},D=g(k),V=w&&null!=u&&u.lat&&null!=u&&u.lon?{"focus.point.lat":u.lat.toFixed(3),"focus.point.lon":u.lon.toFixed(3)}:{},B=n?n.split("-")[1]:void 0;if(e.includes("CurrentPosition")&&"geolocation-not-supported"!==A.status&&T.push(function(e,t){return"string"!=typeof e||0===e.length?Promise.resolve([{type:"CurrentLocation",address:t.address,lat:t.lat,lon:t.lon,properties:{labelId:"use-own-position",layer:"currentPosition",address:t.address,lat:t.lat,lon:t.lon},geometry:{type:"Point",coordinates:[t.lon,t.lat]}}]):Promise.resolve([])}(r,A)),(z||e.includes("MapPosition"))&&T.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([])}(r)),e.includes("FutureRoutes")){const e=I(k);T.push(C.default(e,3))}if(e.includes("SelectFromOwnLocations")&&function(e){const t=e.getFavouriteLocations(e.context);if((null==t?void 0:t.length)>0)return!0;const n=e.getFavouriteVehicleRentalStations(e.context);if((null==n?void 0:n.length)>0)return!0;const o=e.getFavouriteStops(e.context);return(null==o?void 0:o.length)>0}(o)&&T.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([])}(r)),z||e.includes("Locations")){const n=P;if(t.includes("Favourite")){const e=d(k);T.push(function(e,t){return Promise.resolve(ve(e,t,["address","name"]).map((e=>({type:"FavouritePlace",properties:Me(Me({},e),{},{label:e.name,layer:"favouritePlace"}),geometry:{type:"Point",coordinates:[e.lon,e.lat]}}))))}(e,r)),t.includes("Back")&&T.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(F||t.includes("Datasource")){const t=["venue","address","street"];e.includes("Stations")&&t.push("station"),T.push(Oe(r,n,D,V,L.join(","),j,x,t))}if(F||t.includes("History")){const e=p(k,"endpoint"),t=["bikestation"];t.push(...Ie),t.push(...Ee),t.push(...Le),T.push(Pe(e,r,t))}}if(z||e.includes("ParkingAreas")){if(F||t.includes("Datasource")){const e=P;s&&10!==s&&(e.size=s);const t=["carpark","bikepark"],n=f?f.join(","):null;T.push(Oe(r,e,D,V,n,j,x,t).then((e=>i?i(e,B):e)))}if(F||t.includes("History")){const e=p(k),t=["bikestation"];t.push(...Ie),t.push(...Ee),t.push(...Ce),T.push(Pe(e,r,t))}}const H=e.includes("Stops"),$=e.includes("Stations");if(z||H||$){if(t.includes("Favourite")){const e=h(k);let t;t=e.every((e=>"station"===e.type))?Re(e,M).then((e=>i?i(e,B):e)):b(e).then((e=>Re(e,M))).then((e=>i?i(e,B):e)),T.push(function(e,t,n,o){return e.then((e=>ve(e.filter((e=>"stop"===e.type?n:o)),t,["properties.name","properties.name","properties.address"])))}(t,r,H,$))}if(F||t.includes("Datasource")){const t=[];H&&t.push("stop"),$&&t.push("station");const n=s&&10!==s?{size:s}:{};P&&P["boundary.country"]&&(n["boundary.country"]=P["boundary.country"]),(z||e.includes("Locations"))&&(n.dedupestops=1);const o=R.map((e=>`gtfs${e}`)).join(",");T.push(Oe(r,n,D,V,o,j,x,t).then((e=>i?i(e,B):e)))}if(F||t.includes("History")){const e=p(k).filter((e=>!e.properties.gid||e.properties.gid.includes("GTFS:"))),t=["bikestation"];t.push(...Ee),t.push(...Ce),t.push(...Le),H||t.push("stop"),$||t.push("station"),n?T.push(Pe(e,r,t).then((e=>i?i(e,B):e))):T.push(Pe(e,r,t))}}if(z||e.includes("Routes")){if(t.includes("Favourite")){const e=_(k);T.push(v(e,r,B,l).then((e=>i?i(e,B,"Routes"):e)))}if(T.push(S(r,R,n,l).then((e=>i?i(e,B,"Routes"):e))),F||t.includes("History")){const e=p(k),t=["bikestation"];n&&t.push(...Ee.filter((e=>!(e===n)))),t.push(...Ie),t.push(...Ce),t.push(...Le),T.push(Pe(e,r,t).then((e=>i?i(e,B,"Routes"):e)))}}if(z||e.includes("VehicleRentalStations")){if(t.includes("Favourite")){const e=y(k);T.push(m(e,r))}if(F||t.includes("Datasource")){const e=["bikestation"],t=s&&10!==s?{size:s}:{};T.push(Oe(r,t,D,V,N.join(","),j,x,e).then((e=>i?i(e,B,"VehicleRentalStations"):e)))}if(F||t.includes("History")){const e=p(k),t=[...Ie];t.push(...Ee),t.push(...Ce),t.push(...Le),T.push(Pe(e,r,t))}}Promise.all(T).then(E.default).then((e=>{q.results=e})).catch((e=>{q.error=e})).then((()=>{a(Me(Me({},q),{},{results:me(O,q.results,r)}))}))}),300,{leading:!0}),ze=e=>e.localadmin||e.localadmin||e.address&&e.address.lastIndexOf(",")<e.address.length-2&&e.address.substring(e.address.lastIndexOf(",")+2)||"",Fe=({id:e,code:t})=>t||(void 0!==e&&void 0!==e.indexOf&&-1!==e.indexOf("#")?e.substring(e.indexOf("#")+1):void 0),Ae=T.default(((e,t=!1)=>{switch(e.layer){case"currentPosition":return[e.labelId,e.address];case"selectFromMap":case"ownLocations":case"back":return[e.labelId];case"favouritePlace":return n=e.name,o=e.address,[n||o&&o.split(",")[0],"string"==typeof o?o.replace(new RegExp(`${q.default(n)}([ ,]|$)+`),""):""];case"favouriteVehicleRentalStation":case"bikestation":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!t&&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(`${q.default(e.name)}(,)?( )?`),"")];case"favouriteStop":case"stop":return t?[e.name||e.label||e.address&&e.address.split(",")[0],ze(e)]:[e.name,e.id,Fe(e),ze(e)];default:return[e.name||e.label||e.address&&e.address.split(",")[0],ze(e)]}var n,o}),((e,t)=>{const n=D.default(e);return n.plain=t,n}));const Te={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":"Venue, place and stopsearch.","search-autosuggest-label-instructions-desktop":"Navigate list with arrow keys and select with enter key.","search-autosuggest-label-instructions-mobile":"Enter the location and navigate in the list by swiping.","search-autosuggest-label-move-to-destination":"After selecting the starting location you are automatically moved to the destination field.","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":"Venue, place and stopsearch.","search-autosuggest-label-instructions-desktop":"Navigate list with arrow keys and select with enter key.","search-autosuggest-label-instructions-mobile":"Enter the location and navigate in the list by swiping.","search-autosuggest-label-move-to-destination":"After selecting the starting location you are automatically moved to the destination field.","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",vehiclerentalstation:"Pyöräasema",bikepark:"Liityntäpysäköinti",bus:"bussi",cancel:"Peruuta",carpark:"Liityntäpysäköinti","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":"Paikka, linja ja pysäkkihaku.","search-autosuggest-label-instructions-desktop":"Navigoi listassa nuolinäppäimillä ja valitse enterillä.","search-autosuggest-label-instructions-mobile":"Syötä sijainti ja navigoi listassa pyyhkäisemällä.","search-autosuggest-label-move-to-destination":"Valittuasi lähtöpaikan siirrytään suoraan määränpää-kenttään.","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"},pl:{address:"Adres","address-place-or-business":"Adres, miejsce lub firma","add-via-button-label":"Dodaj punkt pośredni","add-via-duration-button-label":"Wybierz czas postoju dla punktu {{index}}","add-via-duration-button-label-close":"Zamknij wybornik czasu postoju w punkcie {{index}}","add-via-duration-button-label-open":"Otwórz wybornik czasu postoju w punkcie {{index}}",airplane:"Lot",arrival:"Przyjazd",back:"Wróć",bikepark:"Parkuj i Jedź dla rowerów",bikerentalstation:"Stacja rowerowa",bus:"autobus",cancel:"Anuluj",carpark:"Parkuj i Jedź","clear-button-label":"Wyczyść","clear-search-history":"Wyczyść historię wyszukiwania",currentposition:"Obecne położenie",delete:"Usuń","delete-old-searches-header":"Czy na pewno chcesz wyczyścić historię wyszukiwania?",departure:"Odjazd",destination:"Cel","give-origin":"Wprowadź swój punkt początkowy.","give-destination":"Wprowadź swój cel",favourite:"Ulubione",ferry:"Prom","future-route":"Przyszła trasa",origin:"Początek","origin-stop-near-you":"Początek",ownlocations:"Własne miejsca",loading:"Ładowanie…","minute-short":"min.",platform:"Peron",rail:"Pociąg",required:"wymagane pole",search:"Szukaj","search-address-or-place":"Szukaj po adresie lub nazwie miejsca","search-button-label":"Szukaj","search-destination":"Szukaj celu, trasy lub przystanku","search-destination-index":"Wprowadź punkt docelowy","search-destination-results-but-no-search":"Wyświetl wyniki w sąsiedniej karcie „Cel”","search-no-results":"Brak lokalizacji","search-origin":"Wyszukaj początek, koniec lub punkt pośredni","search-origin-index":"Wprowadź punkt początkowy","search-position":"Wykryj lokalizację","search-autosuggest-label":"Miejsce, lokalizacja i przystanek.","search-autosuggest-label-instructions-desktop":"Nawiguj po liście używając strzałek i wybieraj klawiszem Enter.","search-autosuggest-label-instructions-mobile":"Wprowadź lokalizację i nawiguj po liście gestami przesuwania.","search-autosuggest-label-move-to-destination":"Po wybraniu lokalizacji początkowej, automatycznie przejdziesz do pola miejsca docelowego.","search-autosuggest-len":"Dostępna jest {{count}} propozycja","search-autosuggest-len_few":"Dostępne są {{count}} propozycje","search-autosuggest-len_other":"Dostępne jest {{count}} propozycji","search-current-suggestion":"Obecny wybór: {{selection}}",street:"Ulica",subway:"Metro",station:"Stacja",stop:"Przystanek","stop-near-you":"Szukaj przystanków i tras","stop-near-you-airplane":"Szukaj lotów i lotnisk","stop-near-you-bus":"Szukaj tras autobusowych i przystanków","stop-near-you-citybike":"Szukaj stacji rowerów miejskich","stop-near-you-rail":"Szukaj tras kolejowych i przystanków","stop-near-you-subway":"Szukaj tras metra i przystanków ","stop-near-you-tram":"Szukaj tras tramwajowych i przystanków","stop-route-station":"Wyszukiwanie autobusów i przystanków","today-at":"dziś o","tomorrow-at":"jutro o",tram:"Tramwaj",track:"Tor","use-own-position":"Użyj obecnej lokalizacji","select-from-map":"Wybierz miejsce na mapie","select-from-own-locations":"Wybierz z własnych miejsc",venue:"Miejsce","via-point":"Przez punkt",where:"Dokąd?",place:"Miejsce"},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":"Plats, linje och hållplatssökning.","search-autosuggest-label-instructions-desktop":"Navigera listan med piltangenterna och välj med Enter-tangeten.","search-autosuggest-label-instructions-mobile":"Ange platsen och navigera i listan genom att svepa.","search-autosuggest-label-move-to-destination":"Efter att du valt avgångsplatsen tas du direkt till Destination-fältet.","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 qe(e,t){void 0===t&&(t={});var n=t.insertAt;if(e&&"undefined"!=typeof document){var o=document.head||document.getElementsByTagName("head")[0],i=document.createElement("style");i.type="text/css","top"===n&&o.firstChild?o.insertBefore(i,o.firstChild):o.appendChild(i),i.styleSheet?i.styleSheet.cssText=e:i.appendChild(document.createTextNode(e))}}var De={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"};qe("input[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 #888;\n background-color: #fff;\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 -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: 0 0 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: #666;\n opacity: 1;\n font-size: 15px; }\n\n.styles_hasValue__tzCTr {\n color: #333; }\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: #f2f5f7; }\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: #f2f5f7; }\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: #888;\n width: 16px;\n height: 16px; }\n .styles_autosuggest-input-icon__uhYGQ.styles_origin-stop-near-you__Ekwp- svg {\n fill: #888;\n width: 16px;\n height: 16px; }\n\nbutton.styles_clear-input__Vx7B4 {\n display: flex;\n position: absolute;\n padding: 14px 0;\n right: 0;\n width: 44px;\n height: 100%;\n color: var(--color);\n outline: none;\n border: 0;\n margin: 0;\n justify-content: center;\n text-align: left;\n background: none;\n border-style: none;\n border-width: 0;\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 /* 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, :active) {\n clip: rect(0 0 0 0);\n clip-path: inset(50%);\n height: 1px;\n overflow: hidden;\n position: absolute;\n white-space: nowrap;\n width: 1px; }\n");var Ve={"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"};qe("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 #888 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: #333; }\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: #666;\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: 0;\n padding: 0 15px 7px 0;\n height: 26px;\n color: var(--color);\n border: 0;\n margin: 0;\n justify-content: center;\n text-align: left;\n background: none;\n border-style: none;\n border-width: 0;\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: #333; }\n\n.MobileSearch_suggestion__UBz5O {\n font-size: 15px;\n min-height: 50px;\n letter-spacing: -0.6px;\n color: #333;\n font-weight: 500;\n background: #fff;\n margin: 0;\n padding: 0; }\n\n.MobileSearch_suggestionHighlighted__7ef5G {\n background-color: #f2f5f7; }\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: #f2f5f7; }\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: #f2f5f7;\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 .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: #fff;\n transition: transform 0.25s;\n transform: translateY(10%); }\n");var Be={"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 He(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function $e(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?He(Object(n),!0).forEach((function(t){G(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):He(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}qe("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 #888 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: #333; }\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: #666;\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: 0;\n padding: 0 15px 7px 0;\n height: 26px;\n color: var(--color);\n border: 0;\n margin: 0;\n justify-content: center;\n text-align: left;\n background: none;\n border-style: none;\n border-width: 0;\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: #333; }\n\n.MobileNoScroll_suggestion__NAWcY {\n font-size: 15px;\n min-height: 50px;\n letter-spacing: -0.6px;\n color: #333;\n font-weight: 500;\n background: #fff;\n margin: 0;\n padding: 0; }\n\n.MobileNoScroll_suggestionHighlighted__V0GuG {\n background-color: #f2f5f7; }\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: #f2f5f7; }\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: #f2f5f7;\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 .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: #fff;\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");class Ue extends R.default{constructor(e){super(e);const t=this;t.onSuggestionTouchMove=()=>{t.justSelectedSuggestion=!1,t.pressedSuggestion=null}}}const We=({appElement:e,id:n,closeHandle:o,clearInput:i,value:s,suggestions:r,inputProps:a,fetchFunction:l,renderSuggestion:u,getSuggestionValue:c,ariaLabel:d,label:p,onSuggestionSelected:h,clearOldSearches:f,dialogHeaderText:g,dialogPrimaryButtonText:b,dialogSecondaryButtonText:m,clearInputButtonText:y,focusInput:v,color:_,hoverColor:S,accessiblePrimaryColor:k,searchOpen:w,fontWeights:O,showScroll:j})=>{var M;const R=j?Ve:Be,P=`${n}-input`,E=`${n}-label`,[C,L]=t.useState(!1),I=x.default.useRef();t.useEffect((()=>{H.default.setAppElement(e)}),[]);const N=t.useCallback((()=>{o()})),z=(e,t)=>{"clear-search-history"===t.suggestion.type?L(!0):t.suggestion.properties.arrowClicked||h(e,t)},F=e=>{const t=e&&(e.key||e.which||e.keyCode)||"";return!(!t||![13," ","Spacebar"].concat([32,"Enter"]).includes(t))&&(e.preventDefault(),!0)},A=e=>"clear-search-history"===e.type?"":c(e),T=e=>"clear-search-history"===e.type?x.default.createElement("button",{type:"button",className:R["clear-search-history"]},e.labelId):u(e);return v&&null!==(M=I.current)&&void 0!==M&&M.input&&I.current.input.focus(),x.default.createElement(H.default,{isOpen:w,className:R["mobile-modal"],overlayClassName:R["mobile-modal-overlay"],onAfterClose:N,shouldCloseOnEsc:!0},x.default.createElement("div",{className:R["mobile-modal-content"],style:{"--color":`${_}`,"--accessible-primary-color":k,"--hover-color":`${S}`,"--font-weight-medium":O.medium}},x.default.createElement("div",{className:R["combobox-container"],htmlFor:P},x.default.createElement("button",{type:"button",className:R["combobox-icon"],onClick:()=>N(),onKeyDown:e=>F(e)&&N(),"aria-label":m,tabIndex:0},x.default.createElement(V.default,{img:"arrow"})),x.default.createElement("span",{className:R["right-column"]},x.default.createElement("span",{className:R["combobox-label"],id:E},p),x.default.createElement(Ue,{alwaysRenderSuggestions:!0,id:n,suggestions:r,onSuggestionsFetchRequested:l,getSuggestionValue:A,renderSuggestion:T,focusInputOnSuggestionClick:!0,shouldRenderSuggestions:()=>!0,inputProps:$e($e({},a),{},{className:`${R.input} ${R[n]||""} ${a.value?R.hasValue:""}`,autoFocus:!0}),renderInputComponent:e=>x.default.createElement(x.default.Fragment,null,x.default.createElement("input",Object.assign({"aria-label":d,id:n},e)),s&&x.default.createElement("button",{type:"button",className:R["clear-input"],onClick:i,onKeyDown:e=>F(e)&&i(),"aria-label":y},x.default.createElement(V.default,{img:"close",color:_}))),theme:R,onSuggestionSelected:z,ref:I}))),x.default.createElement($.default,{appElement:e,isModalOpen:C,handleClose:()=>L(!1),headerText:g,primaryButtonText:b,secondaryButtonText:m,primaryButtonOnClick:()=>{f(),L(!1)},secondaryButtonOnClick:()=>L(!1),color:_,hoverColor:S,fontWeights:O})))};"production"!==process.env.NODE_ENV&&(We.propTypes={appElement:O.default.string.isRequired,id:O.default.string.isRequired,closeHandle:O.default.func.isRequired,clearInput:O.default.func.isRequired,value:O.default.string,clearInputButtonText:O.default.string.isRequired,suggestions:O.default.arrayOf(O.default.object).isRequired,inputProps:O.default.shape({onChange:O.default.func.isRequired,onBlur:O.default.func.isRequired,value:O.default.string.isRequired,placeholder:O.default.string.isRequired,className:O.default.string.isRequired}).isRequired,fetchFunction:O.default.func.isRequired,getSuggestionValue:O.default.func.isRequired,renderSuggestion:O.default.func.isRequired,onSuggestionSelected:O.default.func.isRequired,label:O.default.string.isRequired,clearOldSearches:O.default.func.isRequired,ariaLabel:O.default.string,dialogHeaderText:O.default.string,dialogPrimaryButtonText:O.default.string,dialogSecondaryButtonText:O.default.string,focusInput:O.default.bool,color:O.default.string,hoverColor:O.default.string,accessiblePrimaryColor:O.default.string.isRequired,searchOpen:O.default.bool.isRequired,fontWeights:O.default.shape({medium:O.default.number.isRequired}).isRequired,showScroll:O.default.bool}),We.defaultProps={value:void 0,ariaLabel:void 0,dialogHeaderText:void 0,dialogPrimaryButtonText:void 0,dialogSecondaryButtonText:void 0,focusInput:!1,color:void 0,hoverColor:void 0,showScroll:void 0};var Ge,Ye=function(e,t){return e(t={exports:{}},t.exports),t.exports}((function(e,t){var n;"undefined"!=typeof self&&self,e.exports=(n=x.default,function(){var e={888:function(e,t,n){var o,i;i=void 0!==n.g?n.g:"undefined"!=typeof window?window:this,o=function(){return function(e){var t={ignore:"[data-scroll-ignore]",header:null,topOnEmptyHash:!0,speed:500,speedAsDuration:!1,durationMax:null,durationMin:null,clip:!0,offset:0,easing:"easeInOutCubic",customEasing:null,updateURL:!0,popstate:!0,emitEvents:!0},n=function(){var e={};return Array.prototype.forEach.call(arguments,(function(t){for(var n in t){if(!t.hasOwnProperty(n))return;e[n]=t[n]}})),e},o=function(e){"#"===e.charAt(0)&&(e=e.substr(1));for(var t,n=String(e),o=n.length,i=-1,s="",r=n.charCodeAt(0);++i<o;){if(0===(t=n.charCodeAt(i)))throw new InvalidCharacterError("Invalid character: the input contains U+0000.");s+=t>=1&&t<=31||127==t||0===i&&t>=48&&t<=57||1===i&&t>=48&&t<=57&&45===r?"\\"+t.toString(16)+" ":t>=128||45===t||95===t||t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122?n.charAt(i):"\\"+n.charAt(i)}return"#"+s},i=function(){return Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)},s=function(t){return t?(n=t,parseInt(e.getComputedStyle(n).height,10)+t.offsetTop):0;var n},r=function(t,n,o){0===t&&document.body.focus(),o||(t.focus(),document.activeElement!==t&&(t.setAttribute("tabindex","-1"),t.focus(),t.style.outline="none"),e.scrollTo(0,n))},a=function(t,n,o,i){if(n.emitEvents&&"function"==typeof e.CustomEvent){var s=new CustomEvent(t,{bubbles:!0,detail:{anchor:o,toggle:i}});document.dispatchEvent(s)}};return function(l,u){var c,d,p,h,f={cancelScroll:function(e){cancelAnimationFrame(h),h=null,e||a("scrollCancel",c)},animateScroll:function(o,l,u){f.cancelScroll();var d=n(c||t,u||{}),g="[object Number]"===Object.prototype.toString.call(o),b=g||!o.tagName?null:o;if(g||b){var m=e.pageYOffset;d.header&&!p&&(p=document.querySelector(d.header));var y,v,_,S=s(p),k=g?o:function(t,n,o,s){var r=0;if(t.offsetParent)do{r+=t.offsetTop,t=t.offsetParent}while(t);return r=Math.max(r-n-o,0),s&&(r=Math.min(r,i()-e.innerHeight)),r}(b,S,parseInt("function"==typeof d.offset?d.offset(o,l):d.offset,10),d.clip),w=k-m,x=i(),O=0,j=function(e,t){var n=t.speedAsDuration?t.speed:Math.abs(e/1e3*t.speed);return t.durationMax&&n>t.durationMax?t.durationMax:t.durationMin&&n<t.durationMin?t.durationMin:parseInt(n,10)}(w,d),M=function(t){y||(y=t),O+=t-y,_=m+w*function(e,t){var n;return"easeInQuad"===e.easing&&(n=t*t),"easeOutQuad"===e.easing&&(n=t*(2-t)),"easeInOutQuad"===e.easing&&(n=t<.5?2*t*t:(4-2*t)*t-1),"easeInCubic"===e.easing&&(n=t*t*t),"easeOutCubic"===e.easing&&(n=--t*t*t+1),"easeInOutCubic"===e.easing&&(n=t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1),"easeInQuart"===e.easing&&(n=t*t*t*t),"easeOutQuart"===e.easing&&(n=1- --t*t*t*t),"easeInOutQuart"===e.easing&&(n=t<.5?8*t*t*t*t:1-8*--t*t*t*t),"easeInQuint"===e.easing&&(n=t*t*t*t*t),"easeOutQuint"===e.easing&&(n=1+--t*t*t*t*t),"easeInOutQuint"===e.easing&&(n=t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t),e.customEasing&&(n=e.customEasing(t)),n||t}(d,v=(v=0===j?0:O/j)>1?1:v),e.scrollTo(0,Math.floor(_)),function(t,n){var i=e.pageYOffset;if(t==n||i==n||(m<n&&e.innerHeight+i)>=x)return f.cancelScroll(!0),r(o,n,g),a("scrollStop",d,o,l),y=null,h=null,!0}(_,k)||(h=e.requestAnimationFrame(M),y=t)};0===e.pageYOffset&&e.scrollTo(0,0),function(e,t,n){t||history.pushState&&n.updateURL&&history.pushState({smoothScroll:JSON.stringify(n),anchor:e.id},document.title,e===document.documentElement?"#top":"#"+e.id)}(o,g,d),"matchMedia"in e&&e.matchMedia("(prefers-reduced-motion)").matches?r(o,Math.floor(k),!1):(a("scrollStart",d,o,l),f.cancelScroll(!0),e.requestAnimationFrame(M))}}},g=function(t){if(!t.defaultPrevented&&!(0!==t.button||t.metaKey||t.ctrlKey||t.shiftKey)&&"closest"in t.target&&(d=t.target.closest(l))&&"a"===d.tagName.toLowerCase()&&!t.target.closest(c.ignore)&&d.hostname===e.location.hostname&&d.pathname===e.location.pathname&&/#/.test(d.href)){var n,i;try{n=o(decodeURIComponent(d.hash))}catch(e){n=o(d.hash)}if("#"===n){if(!c.topOnEmptyHash)return;i=document.documentElement}else i=document.querySelector(n);(i=i||"#top"!==n?i:document.documentElement)&&(t.preventDefault(),function(t){if(history.replaceState&&t.updateURL&&!history.state){var n=e.location.hash;n=n||"",history.replaceState({smoothScroll:JSON.stringify(t),anchor:n||e.pageYOffset},document.title,n||e.location.href)}}(c),f.animateScroll(i,d))}},b=function(e){if(null!==history.state&&history.state.smoothScroll&&history.state.smoothScroll===JSON.stringify(c)){var t=history.state.anchor;"string"==typeof t&&t&&!(t=document.querySelector(o(history.state.anchor)))||f.animateScroll(t,null,{updateURL:!1})}};return f.destroy=function(){c&&(document.removeEventListener("click",g,!1),e.removeEventListener("popstate",b,!1),f.cancelScroll(),c=null,d=null,p=null,h=null)},function(){if(!("querySelector"in document&&"addEventListener"in e&&"requestAnimationFrame"in e&&"closest"in e.Element.prototype))throw"Smooth Scroll: This browser does not support the required JavaScript methods and browser APIs.";f.destroy(),c=n(t,u||{}),p=c.header?document.querySelector(c.header):null,document.addEventListener("click",g,!1),c.updateURL&&c.popstate&&e.addEventListener("popstate",b,!1)}(),f}}(i)}.apply(t,[]),void 0===o||(e.exports=o)},432:function(e,t,n){var o=this&&this.__createBinding||(Object.create?function(e,t,n,o){void 0===o&&(o=n),Object.defineProperty(e,o,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,o){void 0===o&&(o=n),e[o]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||o(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),i(n(47),t),i(n(926),t),i(n(349),t),i(n(137),t),i(n(729),t),i(n(383),t),i(n(450),t),i(n(358),t),i(n(753),t),i(n(869),t),i(n(352),t),i(n(446),t),i(n(164),t),i(n(305),t),i(n(502),t)},349:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useArrowNavigation=void 0;var o=n(156);t.useArrowNavigation=function(e){var t=e.listItems,n=e.onArrowUpOrDown,i=(0,o.useState)(0),s=i[0],r=i[1],a=(0,o.useCallback)((function(e){r(e)}),[t]),l=function(e){var o=e.key;if(null==t?void 0:t.length)if("ArrowUp"===o)n&&n(),e.preventDefault(),a(s>0?s-1:t.length-1);else{if("ArrowDown"!==o)return;n&&n(),e.preventDefault(),s<t.length-1?a(s+1):a(0)}};return(0,o.useEffect)((function(){return window.addEventListener("keydown",l),function(){return window.removeEventListener("keydown",l)}})),(0,o.useEffect)((function(){a(0)}),[t]),{selectedIndex:s}}},446:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useDebounce=void 0;var o=n(156);t.useDebounce=function(e,t){void 0===t&&(t=300);var n=(0,o.useState)(e),i=n[0],s=n[1];return(0,o.useEffect)((function(){var n=setTimeout((function(){s(e)}),t);return function(){clearTimeout(n)}}),[e,t]),i}},164:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useElementSize=void 0;var o=n(156);t.useElementSize=function(){var e,t,n=(0,o.useRef)(null);return[n,{width:null===(e=null==n?void 0:n.current)||void 0===e?void 0:e.clientWidth,height:null===(t=null==n?void 0:n.current)||void 0===t?void 0:t.clientHeight}]},t.default=t.useElementSize},137:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIntersectionObserver=void 0;var o=n(156);t.useIntersectionObserver=function(e){var t=(0,o.useRef)(null),n=(0,o.useState)(!1),i=n[0],s=n[1],r=function(e){var t=e[0];s(t.isIntersecting)};return(0,o.useEffect)((function(){if(window&&window.IntersectionObserver){var n=new IntersectionObserver(r,e),o=t.current;return t.current&&n.observe(t.current),function(){o&&n.unobserve(o)}}s(!1)}),[t,e]),{containerRef:t,isVisible:i}},t.default=t.useIntersectionObserver},729:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsBreakpoint=void 0;var o=n(156),i=n(432),s={xs:1,mobileSmall:320,mobile:375,tablet:768,tabletLarge:920,desktopSmall:1024,desktop:1260,desktopLarge:1440};t.useIsBreakpoint=function(e){var t="string"==typeof e?s[e]:e,n=(0,o.useState)(null),r=n[0],a=n[1],l=(0,o.useCallback)((function(){a(window.innerWidth)}),[]);return(0,o.useEffect)((function(){l()}),[]),(0,i.useOnResize)(l),r>=t},t.default=t.useIsBreakpoint},450:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsLoadingAfterError=void 0;var o=n(156);t.useIsLoadingAfterError=function(e,t){var n=(0,o.useState)(t),i=n[0],s=n[1];return(0,o.useEffect)((function(){e||s(t)}),[e,t]),e&&i}},305:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsMobile=void 0;var o=n(729);t.useIsMobile=function(){return!(0,o.useIsBreakpoint)("tablet")},t.default=t.useIsMobile},383:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsomorphicLayoutEffect=void 0;var o=n(156);t.useIsomorphicLayoutEffect="undefined"!=typeof window?o.useLayoutEffect:o.useEffect,t.default=t.useIsomorphicLayoutEffect},753:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useOnLoseFocusWithin=void 0;var o=n(156);t.useOnLoseFocusWithin=function(e){var t=e.ref,n=e.callback,i=e.watch;(0,o.useEffect)((function(){var e=function(){var e;if(i)return(null===(e=t.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,t,i])},t.default=t.useOnLoseFocusWithin},502:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useOnResize=void 0;var o=n(156);t.useOnResize=function(e){(0,o.useEffect)((function(){var t=function(){e(window.innerWidth)};return window.addEventListener("resize",t,{passive:!0}),function(){return window.removeEventListener("resize",t)}}),[])},t.default=t.useOnResize},352:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useOnWindowFocus=void 0;var o=n(156);t.useOnWindowFocus=function(e){(0,o.useEffect)((function(){var t=function(){e&&"visible"===document.visibilityState&&e()};return window.addEventListener("visibilitychange",t,!1),function(){return window.removeEventListener("visibilitychange",t)}}),[e])}},47:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useOutsideReacter=void 0;var o=n(156);t.useOutsideReacter=function(e,t){function n(n){e.current&&!e.current.contains(n.target)&&t()}(0,o.useEffect)((function(){return document.addEventListener("mousedown",n),function(){document.removeEventListener("mousedown",n)}}))}},869:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useRunAfterUpdate=void 0;var o=n(156);t.useRunAfterUpdate=function(){var e=(0,o.useRef)(null);return(0,o.useEffect)((function(){e.current&&(e.current(),e.current=null)})),function(t){e.current=t}},t.default=t.useRunAfterUpdate},926:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useScrollLock=void 0;var o=n(156);t.useScrollLock=function(){return{lock:(0,o.useCallback)((function(){var e=window.scrollY+"px",t=document.body;t.style.position="fixed",t.style.top="-"+e}),[]),unlock:(0,o.useCallback)((function(){var e=document.body,t=e.style.top,n=-1*parseInt(t||"0");e.style.position="",e.style.top="",n&&window.scrollTo(0,-1*parseInt(t||"0"))}),[])}}},358:function(e,t,n){var o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.useSmoothScroll=void 0;var i=n(156),s=o(n(888));t.useSmoothScroll=function(e){var t=(0,i.useRef)(null),n=e.ref,o=e.offset,r=void 0===o?0:o,a=e.speed,l=void 0===a?500:a;return(0,i.useEffect)((function(){t.current=new s.default(null,{speed:l,speedAsDuration:!0})}),[]),(0,i.useCallback)((function(){n&&t.current&&t.current.animateScroll(n.current,null,{offset:function(){return r},updateURL:!1})}),[r,n])}},156:function(e){e.exports=n}},t={};function o(n){var i=t[n];if(void 0!==i)return i.exports;var s=t[n]={exports:{}};return e[n].call(s.exports,s,s.exports,o),s.exports}return o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o(432)}())})),Qe=(Ge=Ye)&&Ge.__esModule&&Object.prototype.hasOwnProperty.call(Ge,"default")?Ge.default:Ge;function Ze(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Ke(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ze(Object(n),!0).forEach((function(t){G(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ze(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}v.Settings.defaultLocale="en",j.default.init({fallbackLng:"fi",defaultNS:"translation",interpolation:{escapeValue:!1}}),"production"!==process.env.NODE_ENV&&O.default.node;const Xe=e=>{if(!e||!e.GTFS.platform)return;const{modes:t,platform:n}=e.GTFS;return[t&&"RAIL"===t[0]?j.default.t("track"):j.default.t("platform"),n]};function Je(e){if("FutureRoute"!==e.type){if("SelectFromMap"===e.type)return["",j.default.t("select-from-map")];if("CurrentLocation"===e.type)return["",j.default.t("use-own-position")];if("SelectFromOwnLocations"===e.type)return["",j.default.t("select-from-own-locations")];let n,[o,i]=Ae(e.properties,!0);if(e.properties.layer.toLowerCase().includes("bikerental")||e.properties.layer.toLowerCase().includes("bikestation")){n=j.default.t("vehiclerentalstation");return[n,o,void 0,e.properties.labelId]}if("bikepark"===e.properties.layer)return n=j.default.t("bikepark"),[n,o,void 0,void 0];if("carpark"===e.properties.layer)return n=j.default.t("carpark"),[n,o,void 0,void 0];if(e.properties.mode)n=j.default.t(e.properties.mode.toLowerCase().replace("favourite",""));else{const t=e.properties.layer.replace("route-","").toLowerCase().replace("favourite","");n=j.default.t(t)}if(e.properties.id&&("stop"===e.properties.layer||"station"===e.properties.layer)){var t;const s=Fe(e.properties),r=null===(t=e.properties.addendum)||void 0===t?void 0:t.GTFS.modes,a=Xe(e.properties.addendum);return[n,ye(o,s),i,s,r,a]}if("favouriteStop"===e.properties.layer||"favouriteStation"===e.properties.layer){const{address:t,code:s}=e.properties;return[n,t?ye(t.split(",")[0],s):o,i,s,void 0,Xe(e.properties.addendum)]}return[n,o,i]}const{origin:n,destination:o}=e.properties,i=n.locality?`, ${n.locality} foobar`:"",s=o.locality?`, ${o.locality}`:"",r=n.name,a=o.name;return[j.default.t("future-route"),`${j.default.t("origin")} ${r}${i} ${j.default.t("destination")} ${a}${s}`,e.translatedText]}function et(e){const t=v.DateTime.fromSeconds(Number(e.properties.time)),n=v.DateTime.now();let o=e.properties.arriveBy?j.default.t("arrival"):j.default.t("departure");return o=t.hasSame(n,"day")?`${o} ${j.default.t("today-at")}`:t.hasSame(n.plus({days:1}),"day")?`${o} ${j.default.t("tomorrow-at")}`:`${o} ${t.toFormat("ccc d.L.")}`,o=`${o} ${t.toFormat("HH:mm")}`,o}const tt=e=>"SelectFromOwnLocations"===e.type||"back"===e.type?"":function(e){const t=Ae(e,!0);switch(e.layer){case"selectFromMap":case"currentPosition":case"ownLocations":case"back":return t[1]||t[0];case"favouriteVehicleRentalStation":case"favouritePlace":return t[0];default:return t.length>1&&""!==t[1]?t.join(", "):t[1]||t[0]}}(e.properties);class nt extends x.default.Component{constructor(e){super(e),G(this,"onChange",((e,{newValue:t,method:n})=>{const o={value:this.fInput||t||"",renderMobileSearch:this.props.isMobile};if(this.fInput=null,this.state.editing){if("enter"!==n||this.state.valid){if(this.state.typingTimer&&clearTimeout(this.state.typingTimer),"type"===n){const e=setTimeout((()=>{this.setState({typing:!1})}),1e3);o.typingTimer=e,o.typing=!0}this.setState(o)}}else o.editing=!0,this.setState(o,(()=>this.fetchFunction({value:t||""})))})),G(this,"onBlur",(()=>{this.state.editing&&this.input.focus(),this.setState({editing:!1,renderMobileSearch:!1,value:this.props.value}),this.props.isMobile&&this.state.renderMobileSearch&&this.closeMobileSearch()})),G(this,"onSelected",((e,t)=>{if(this.state.valid){if("SelectFromOwnLocations"===t.suggestion.type)return void this.setState({sources:["Favourite","Back"],ownPlaces:!0,pendingSelection:t.suggestion.type,value:""},(()=>{this.fetchFunction({value:""})}));if("back"===t.suggestion.type||"FutureRoute"===t.suggestion.type)return void this.setState({sources:this.props.sources,ownPlaces:!1,pendingSelection:t.suggestion.type,suggestionIndex:t.suggestionIndex},(()=>{this.fetchFunction({value:""})}));this.selectionDone=!0,this.setState({editing:!1,value:t.suggestionValue},(()=>{this.input.blur(),this.props.handleViaPoints?this.props.handleViaPoints(t.suggestion,t.suggestionIndex):this.props.onSelect(t.suggestion,this.props.id),this.setState({renderMobileSearch:!1,sources:this.props.sources,ownPlaces:!1,suggestions:[]},(()=>{this.selectionDone=!1})),!this.props.focusChange||this.props.isMobile&&!this.props.isEmbedded||this.props.focusChange(),this.props.isMobile&&this.state.renderMobileSearch&&this.closeMobileSearch()}))}else this.setState((e=>({pendingSelection:e.value})),(()=>this.checkPendingSelection()))})),G(this,"onSuggestionsClearRequested",(()=>{this.setState({suggestions:[],sources:this.props.sources,ownPlaces:!1,editing:!1})})),G(this,"checkPendingSelection",(()=>{"SelectFromOwnLocations"!==this.state.pendingSelection&&"back"!==this.state.pendingSelection||!this.state.valid?this.state.pendingSelection&&this.state.valid&&this.setState({pendingSelection:null,editing:!1},(()=>{if(this.state.suggestions.length){this.input.blur();"back"!==this.state.suggestions[this.state.suggestionIndex].type&&this.props.onSelect(this.state.suggestions[this.state.suggestionIndex],this.props.id),this.props.isMobile&&this.state.renderMobileSearch&&this.closeMobileSearch(),!this.props.focusChange||this.props.isMobile&&!this.props.isEmbedded||this.props.focusChange()}})):this.setState({pendingSelection:null,editing:!0},(()=>{this.input.focus()}))})),G(this,"clearButton",(()=>x.default.createElement("button",{type:"button",className:De["clear-input"],onClick:this.clearInput,"aria-label":j.default.t("clear-button-label")},x.default.createElement(V.default,{img:"close",color:this.props.color})))),G(this,"fetchFunction",(({value:e,cleanExecuted:t})=>this.setState({valid:!1,cleanExecuted:t||!1},(()=>{if(this.selectionDone)return;const{targets:t}=this.props,n=B.default(t),o=B.default(t)||t.includes("Locations");let i;this.state.ownPlaces?(i=["Locations"],(n||t.includes("Stops"))&&i.push("Stops"),(n||t.includes("Stations"))&&i.push("Stations"),(n||t.includes("VehicleRentalStations"))&&i.push("VehicleRentalStations")):n||(i=[...t],o&&!this.props.isMobile&&(B.default(this.props.sources)||this.props.sources.includes("Favourite"))&&i.push("SelectFromOwnLocations"));((e,t,n,o,i,s,r,a,l,u)=>{a(null),Ne(e,t,n,o,i,s,r,a,l,u)})(i,this.state.sources&&this.state.sources.filter((e=>!(o&&"Favourite"===e&&!this.state.ownPlaces&&!this.props.isMobile))),this.props.transportMode,this.props.searchContext,this.props.filterResults,this.props.geocodingSize,{input:e||""},(t=>{if(null==t)return;const n=(t.results||[]).filter((e=>"FutureRoute"!==e.type||"FutureRoute"===e.type&&e.properties.time>v.DateTime.now().toUnixInteger())).map((e=>{if("CurrentLocation"===e.type||"SelectFromMap"===e.type||"SelectFromOwnLocations"===e.type||"back"===e.type){const t=Ke({},e);return t.properties.labelId=j.default.t(e.properties.labelId),t}return e}));e!==this.state.value&&e!==this.state.pendingSelection&&"SelectFromOwnLocations"!==this.state.pendingSelection&&"back"!==this.state.pendingSelection&&"FutureRoute"!==this.state.pendingSelection||this.setState({valid:!0,suggestions:n},(()=>this.checkPendingSelection()))}),this.props.pathOpts,this.props.refPoint)})))),G(this,"clearInput",(()=>{const e={editing:!0,value:"",sources:this.props.sources,ownPlaces:!1,renderMobileSearch:this.props.isMobile};this.setState(e,(()=>this.fetchFunction({value:"",cleanExecuted:!0}))),this.props.onClear&&this.props.onClear(this.props.id),this.input.focus()})),G(this,"inputClicked",(e=>{if(this.input.focus(),this.clearLocationText(),this.props.isMobile&&this.props.lock(),this.state.editing)this.props.isMobile&&!this.state.renderMobileSearch&&this.setState({renderMobileSearch:!0});else{const t={editing:!0,pendingSelection:null,renderMobileSearch:this.props.isMobile},n={editing:!0,pendingSelection:null,value:e};this.state.suggestions.length?(this.fetchFunction({value:this.state.value}),this.setState(t)):"object"!=typeof e&&e?this.setState(n,(()=>this.fetchFunction({value:e}))):this.setState(t,(()=>this.fetchFunction({value:this.state.value})))}})),G(this,"storeInputReference",(e=>{null!==e&&(this.input=e.input,this.props.storeRef&&this.props.storeRef(e.input))})),G(this,"fillInput",(e=>{this.fInput=e.properties.name;const t={editing:!0,value:e.properties.name,checkPendingSelection:e,valid:!0};this.setState(t),this.fetchFunction({value:e.properties.name}),this.input.focus()})),G(this,"renderItem",(e=>{const t="FutureRoute"===e.type?Ke(Ke({},e),{},{translatedText:et(e)}):e,n=Je(e);return x.default.createElement(F.default,{item:t,content:n,loading:!this.state.valid,isMobile:this.props.isMobile,ariaFavouriteString:j.default.t("favourite"),color:this.props.color,accessiblePrimaryColor:this.props.accessiblePrimaryColor,fillInput:this.fillInput,fontWeights:this.props.fontWeights,getAutoSuggestIcons:this.props.getAutoSuggestIcons,modeIconColors:this.props.modeIconColors,modeSet:this.props.modeSet})})),G(this,"closeMobileSearch",(()=>{this.props.unlock(),this.setState({renderMobileSearch:!1,value:this.props.value},(()=>{window.scrollTo(0,this.state.scrollY),this.onSuggestionsClearRequested()})),this.input.focus(),this.input.blur()})),G(this,"keyDown",(e=>{if(this.selectionDone)return;const t=e.key;if("Shift"!==t){if("Escape"===t&&this.onBlur(),this.state.editing)return"Enter"===t&&""!==this.state.value&&this.setState({pendingSelection:!0},(()=>{this.fetchFunction({value:this.state.value})})),void this.inputClicked();if("Enter"!==t&&"ArrowDown"!==t||""!==this.state.value){if("ArrowDown"===t&&""!==this.state.value){const e={editing:!0,value:this.state.value};this.setState(e,(()=>this.fetchFunction({value:this.state.value})))}this.state.editing||(this.setState({editing:!0}),this.clearLocationText()),"Tab"===t&&this.onBlur()}else this.clearInput()}})),G(this,"suggestionAsAriaContent",(()=>{let e=[];const t=this.state.suggestions[0];return t&&(t.type&&t.type.includes("Favourite")&&e.push(j.default.t("favourite")),e=e.concat(Je(this.state.suggestions[0]))),[...new Set(e)].join(" - ")})),G(this,"clearOldSearches",(()=>{const{context:e,clearOldSearches:t,clearFutureRoutes:n}=this.props.searchContext;e&&t&&(t(e),n&&n(e),this.fetchFunction({value:this.state.value}))})),G(this,"isOriginDestinationOrViapoint",(()=>"origin"===this.props.id||"destination"===this.props.id||"via-point"===this.props.id||"origin-stop-near-you"===this.props.id)),G(this,"clearLocationText",(()=>{["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","Wybrane miejsce"].includes(this.state.value)&&this.clearInput()})),G(this,"onFocus",(()=>{const e=window.pageYOffset;return this.setState({scrollY:e})})),v.Settings.defaultZone=e.timeZone,v.Settings.defaultLocale=e.lang,this.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(Te).forEach((e=>{j.default.addResourceBundle(e,"translation",Te[e])}))}shouldComponentUpdate(e,t){return!A.default(t,this.state)||!A.default(e,this.props)}componentDidUpdate(){j.default.language!==this.props.lang&&j.default.changeLanguage(this.props.lang)}UNSAFE_componentWillReceiveProps(e){e.value===this.state.value||this.state.editing||this.setState({value:e.value})}render(){j.default.language!==this.props.lang&&j.default.changeLanguage(this.props.lang);const{value:e,suggestions:t,renderMobileSearch:n,cleanExecuted:o}=this.state,i={placeholder:this.props.translatedPlaceholder?this.props.translatedPlaceholder:j.default.t(this.props.placeholder),value:e,onChange:this.onChange,onBlur:this.onBlur,className:`${De.input} ${this.props.isMobile&&this.props.transportMode?De.thin:""} ${De[this.props.id]||""} ${this.state.value?De.hasValue:""} ${this.props.inputClassName}`,onKeyDown:this.keyDown,required:this.props.required},s=this.props.id.replace("searchfield-","");let r=this.props.ariaLabel||j.default.t(s);r=r.replace("searchfield-","").concat(".");const a=this.props.required?`${j.default.t("required")}.`:"",l=this.props.isMobile?j.default.t("search-autosuggest-label-instructions-mobile"):j.default.t("search-autosuggest-label-instructions-desktop"),u="origin"===this.props.id?j.default.t("search-autosuggest-label-move-to-destination"):"",c=l.concat(" ").concat(u),d=j.default.t("search-autosuggest-len",{count:t.length}),p=()=>this.suggestionAsAriaContent()||this.props.value?j.default.t("search-current-suggestion",{selection:this.suggestionAsAriaContent().toLowerCase()||this.props.value}):"";return x.default.createElement(x.default.Fragment,null,x.default.createElement("span",{className:De["sr-only"],role:"alert"},!this.state.typing&&this.state.editing&&`${d} ${p()}`),this.props.isMobile&&x.default.createElement(We,{searchOpen:n,appElement:this.props.appElement,clearOldSearches:this.clearOldSearches,id:this.props.id,clearInput:this.clearInput,value:this.state.value,suggestions:[...t,{type:"clear-search-history",labelId:j.default.t("clear-search-history")}],inputProps:Ke(Ke({},i),{},{placeholder:this.isOriginDestinationOrViapoint()?j.default.t("address-place-or-business"):i.placeholder}),fetchFunction:this.fetchFunction,onSuggestionsClearRequested:this.onSuggestionsClearRequested,getSuggestionValue:tt,renderSuggestion:this.renderItem,closeHandle:this.closeMobileSearch,ariaLabel:a.concat(" ").concat(r).concat(" ").concat(p()),label:this.props.mobileLabel?this.props.mobileLabel:j.default.t(this.props.id),onSuggestionSelected:this.onSelected,dialogHeaderText:j.default.t("delete-old-searches-header"),dialogPrimaryButtonText:j.default.t("delete"),dialogSecondaryButtonText:j.default.t("cancel"),clearInputButtonText:j.default.t("clear-button-label"),focusInput:o,color:this.props.color,hoverColor:this.props.hoverColor,accessiblePrimaryColor:this.props.accessiblePrimaryColor,fontWeights:this.props.fontWeights,showScroll:this.props.showScroll}),!n&&x.default.createElement("div",{className:M.default(De["autosuggest-input-container"],De[this.props.id]),style:{"--color":`${this.props.color}`,"--hover-color":`${this.props.hoverColor}`}},this.props.icon&&x.default.createElement("div",{className:M.default(De["autosuggest-input-icon"],De[this.props.id],this.props.inputClassName&&`${this.props.inputClassName}-input-icon`),"aria-label":a.concat(" ").concat(r).concat(" ").concat(j.default.t("search-autosuggest-label"))},x.default.createElement(V.default,{img:`${this.props.icon}`})),x.default.createElement(R.default,{alwaysRenderSuggestions:this.state.editing,id:this.props.id,suggestions:t,onSuggestionsFetchRequested:this.fetchFunction,onSuggestionsClearRequested:this.onSuggestionsClearRequested,getSuggestionValue:tt,renderSuggestion:this.renderItem,inputProps:Ke(Ke({},i),{},{onFocus:this.onFocus}),focusInputOnSuggestionClick:!0,shouldRenderSuggestions:()=>this.state.editing,highlightFirstSuggestion:!this.state.ownPlaces,theme:De,renderInputComponent:e=>x.default.createElement(x.default.Fragment,null,x.default.createElement("label",{className:De["sr-only"],htmlFor:this.props.id},p().concat(" ").concat(a).concat(" ").concat(r).concat(" ").concat(c)),x.default.createElement("input",Object.assign({"aria-label":p().concat(" ").concat(a).concat(" ").concat(r).concat(" ").concat(c),id:this.props.id,onClick:this.inputClicked,onKeyDown:this.keyDown},e)),this.state.value&&this.clearButton()),onSuggestionSelected:this.onSelected,ref:this.storeInputReference})))}}G(nt,"defaultProps",{autoFocus:!1,className:"",icon:void 0,value:"",transportMode:void 0,filterResults:void 0,onClear:void 0,lang:"fi",storeRef:void 0,handleViaPoints:void 0,focusChange:void 0,getAutoSuggestIcons:void 0,sources:[],targets:void 0,isMobile:!1,isEmbedded:!1,geocodingSize:void 0,color:"#007ac9",hoverColor:"#0062a1",accessiblePrimaryColor:"#0074be",timeZone:"Europe/Helsinki",pathOpts:{routesPrefix:"linjat",stopsPrefix:"pysakit"},ariaLabel:void 0,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,refPoint:{}}),"production"!==process.env.NODE_ENV&&(nt.propTypes={appElement:O.default.string.isRequired,autoFocus:O.default.bool,className:O.default.string,icon:O.default.string,id:O.default.string.isRequired,placeholder:O.default.string.isRequired,translatedPlaceholder:O.default.string,value:O.default.string,searchContext:O.default.shape({URL_PELIAS:O.default.string,context:O.default.object,clearOldSearches:O.default.func,clearFutureRoutes:O.default.func}).isRequired,ariaLabel:O.default.string,onSelect:O.default.func.isRequired,transportMode:O.default.string,filterResults:O.default.func,geocodingSize:O.default.number,onClear:O.default.func,storeRef:O.default.func,handleViaPoints:O.default.func,focusChange:O.default.func,lang:O.default.string,sources:O.default.arrayOf(O.default.string),targets:O.default.arrayOf(O.default.string),isMobile:O.default.bool,color:O.default.string,hoverColor:O.default.string,accessiblePrimaryColor:O.default.string,timeZone:O.default.string,pathOpts:O.default.shape({routesPrefix:O.default.string,stopsPrefix:O.default.string}),mobileLabel:O.default.string,lock:O.default.func.isRequired,unlock:O.default.func.isRequired,refPoint:O.default.shape({address:O.default.string,lat:O.default.number,lon:O.default.number}),inputClassName:O.default.string,fontWeights:O.default.shape({medium:O.default.number}),modeIconColors:O.default.objectOf(O.default.string),getAutoSuggestIcons:O.default.objectOf(O.default.func),required:O.default.bool,modeSet:O.default.string,showScroll:O.default.bool,isEmbedded:O.default.bool});const ot=(it=nt,e=>{const{lock:t,unlock:n}=Qe.useScrollLock();return x.default.createElement(it,Object.assign({lock:t,unlock:n},e))});var it;e.default=ot,Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
2
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZGV2ZWxvcG1lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXRydS1lcS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWlzLWR1cGxpY2F0ZS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWhlbHBlcnMvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1maWx0ZXItbWF0Y2hpbmctdG8taW5wdXQvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1zZXJpYWxpemUvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtanNvbi9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cy9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWV4ZWN1dGUtc2VhcmNoLWltbWlkaWF0ZS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXVuaXEtYnktbGFiZWwvaW5kZXguanMiLCIuLi9zcmMvaGVscGVycy90cmFuc2xhdGlvbnMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtaW5qZWN0L2Rpc3Qvc3R5bGUtaW5qZWN0LmVzLmpzIiwiLi4vc3JjL2hlbHBlcnMvTW9iaWxlU2VhcmNoLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Boc2wtZmkvaG9va3MvbGliL2luZGV4LmpzIiwiLi4vc3JjL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWxhYmVsL2luZGV4LmpzIiwiLi4vc3JjL2hlbHBlcnMvd2l0aFNjcm9sbExvY2suanMiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvO1xuICB9IDogZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbztcbiAgfSwgX3R5cGVvZihvKTtcbn1cbmV4cG9ydCB7IF90eXBlb2YgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IHRvUHJpbWl0aXZlIGZyb20gXCIuL3RvUHJpbWl0aXZlLmpzXCI7XG5mdW5jdGlvbiB0b1Byb3BlcnR5S2V5KHQpIHtcbiAgdmFyIGkgPSB0b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjtcbn1cbmV4cG9ydCB7IHRvUHJvcGVydHlLZXkgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuZnVuY3Rpb24gdG9QcmltaXRpdmUodCwgcikge1xuICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDtcbiAgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07XG4gIGlmICh2b2lkIDAgIT09IGUpIHtcbiAgICB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTtcbn1cbmV4cG9ydCB7IHRvUHJpbWl0aXZlIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkge1xuICByZXR1cm4gKHIgPSB0b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHtcbiAgICB2YWx1ZTogdCxcbiAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICBjb25maWd1cmFibGU6ICEwLFxuICAgIHdyaXRhYmxlOiAhMFxuICB9KSA6IGVbcl0gPSB0LCBlO1xufVxuZXhwb3J0IHsgX2RlZmluZVByb3BlcnR5IGFzIGRlZmF1bHQgfTsiLCIvKipcbiAqICBhY2NlcHQgZXF1YWxpdHkgb2Ygbm9uIG51bGxpc2ggdmFsdWVzXG4gKlxuICogQG5hbWUgdHJ1RXFcbiAqIEBwYXJhbSB7Qm9vbGVhbnxOdW1iZXJ8QmlnSW50fFN0cmluZ3xTeW1ib2x8T2JqZWN0fSB2YWwxIEZpcnN0IHZhbHVlIHRvIGJlIGNvbXBhcmVkXG4gKiBAcGFyYW0ge0Jvb2xlYW58TnVtYmVyfEJpZ0ludHxTdHJpbmd8U3ltYm9sfE9iamVjdH0gcGFyYW0yIFNlY29uZCB2YWx1ZSB0byBiZSBjb21wYXJlZFxuICogQHJldHVybnMge0Jvb2xlYW59IHRydWUvZmFsc2VcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC11dGlsLnRydUVxKCcyJywgJzInKTtcbiAqIC8vPXRydWVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJ1RXEodmFsMSwgdmFsMikge1xuICByZXR1cm4gdmFsMSAmJiB2YWwyICYmIHZhbDEgPT09IHZhbDI7XG59XG4iLCJpbXBvcnQgdHJ1RXEgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXRydS1lcSc7XG4vKipcbiAqIENoZWNrcyB0aGF0IGlzIGl0ZW1zIGR1cGxpY2F0ZVxuICpcbiAqIEBuYW1lIGlzRHVwbGljYXRlXG4gKiBAcGFyYW0ge09iamVjdH0gaXRlbTEgT2JqZWN0IGNvbnRhaW5pbmcgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKiB7XG4gKiAgcHJvcGVydGllcyB7XG4gKiAgICAgIGd0ZnNJZDogU3RyaW5nXG4gKiAgICAgIGdpZDogU3RyaW5nIGZyb20gZ2VvY29kZXJcbiAqICAgICAgbmFtZTogU3RyaW5nXG4gKiAgICAgIGxhYmVsOiBTdHJpbmdcbiAqICAgICAgIGFkZHJlc3M6IFN0cmluZ1xuICogICAgICBnZW9tZXRyeSB7XG4gKiAgICAgICAgIGNvb3JkaW5hdGVzIFtOdW1iZXIgbGF0LCBOdW1iZXIgbG9uXVxuICogICAgICB9XG4gKiAgfVxuICogfVxuICogQHBhcmFtIHtPYmplY3R9IGl0ZW0yIE9iamVjdCB3aXRoIHNhbWUgYXR0cmlidXRlcyBhcyBpdGVtMVxuICogQHJldHVybnMge0Jvb2xlYW59IHRydWUvZmFsc2VcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC11dGlsLmlzRHVwbGljYXRlKHBhcmFtMSwgcGFyYW0yKTtcbiAqIC8vPXRydWVcbiAqL1xuXG5jb25zdCBndGZzU3RvcExheWVycyA9IFsnc3RvcCcsICdzdGF0aW9uJywgJ2Zhdm91cml0ZVN0b3AnLCAnZmF2b3VyaXRlU3RhdGlvbiddO1xuY29uc3QgdmVoaWNsZVJlbnRhbExheWVycyA9IFsnZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24nLCAnYmlrZXN0YXRpb24nXTtcblxuZnVuY3Rpb24gbGFiZWxJZFRvR2lkKGlkKSB7XG4gIGlmICghaWQpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgY29uc3QgcGFydHMgPSBpZC5zcGxpdCgnOicpO1xuICBpZiAocGFydHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBgY2l0eWJpa2VzJHtwYXJ0c1swXX06YmlrZXN0YXRpb246JHtwYXJ0c1sxXX1gO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0R1cGxpY2F0ZShpdGVtMSwgaXRlbTIpIHtcbiAgY29uc3QgcHJvcHMxID0gaXRlbTEucHJvcGVydGllcztcbiAgY29uc3QgcHJvcHMyID0gaXRlbTIucHJvcGVydGllcztcblxuICBpZiAoaXRlbTEudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJyAmJiBpdGVtMi50eXBlID09PSAnRnV0dXJlUm91dGUnKSB7XG4gICAgY29uc3QgbzEgPSBwcm9wczEub3JpZ2luO1xuICAgIGNvbnN0IGQxID0gcHJvcHMxLmRlc3RpbmF0aW9uO1xuICAgIGNvbnN0IG8yID0gcHJvcHMyLm9yaWdpbjtcbiAgICBjb25zdCBkMiA9IHByb3BzMi5kZXN0aW5hdGlvbjtcblxuICAgIGNvbnN0IG5hbWUxID0gYCR7bzEubmFtZX0vLyR7bzEubG9jYWxhZG1pbn0vLyR7ZDEubmFtZX0vLyR7ZDEubG9jYWxhZG1pbn1gO1xuICAgIGNvbnN0IG5hbWUyID0gYCR7bzIubmFtZX0vLyR7bzIubG9jYWxhZG1pbn0vLyR7ZDIubmFtZX0vLyR7ZDIubG9jYWxhZG1pbn1gO1xuXG4gICAgcmV0dXJuIG5hbWUxID09PSBuYW1lMjtcbiAgfVxuICBpZiAoaXRlbTEudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJyB8fCBpdGVtMi50eXBlID09PSAnRnV0dXJlUm91dGUnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChcbiAgICB2ZWhpY2xlUmVudGFsTGF5ZXJzLmluY2x1ZGVzKHByb3BzMS5sYXllcikgJiZcbiAgICB2ZWhpY2xlUmVudGFsTGF5ZXJzLmluY2x1ZGVzKHByb3BzMi5sYXllcilcbiAgKSB7XG4gICAgY29uc3QgaWQxID0gcHJvcHMxLmdpZCB8fCBsYWJlbElkVG9HaWQocHJvcHMxLmxhYmVsSWQpO1xuICAgIGNvbnN0IGlkMiA9IHByb3BzMi5naWQgfHwgbGFiZWxJZFRvR2lkKHByb3BzMi5sYWJlbElkKTtcbiAgICByZXR1cm4gaWQxID09PSBpZDI7XG4gIH1cbiAgaWYgKHByb3BzMS5ndGZzSWQgJiYgcHJvcHMyLmd0ZnNJZCkge1xuICAgIHJldHVybiBwcm9wczEuZ3Rmc0lkID09PSBwcm9wczIuZ3Rmc0lkO1xuICB9XG4gIGlmIChcbiAgICBndGZzU3RvcExheWVycy5pbmNsdWRlcyhwcm9wczEubGF5ZXIpICYmXG4gICAgZ3Rmc1N0b3BMYXllcnMuaW5jbHVkZXMocHJvcHMyLmxheWVyKSAmJlxuICAgIHByb3BzMS5naWQgJiZcbiAgICBwcm9wczIuZ2lkXG4gICkge1xuICAgIHJldHVybiBwcm9wczEuZ2lkID09PSBwcm9wczIuZ2lkO1xuICB9XG5cbiAgY29uc3QgcDEgPSBpdGVtMSAmJiBpdGVtMS5nZW9tZXRyeSA/IGl0ZW0xLmdlb21ldHJ5LmNvb3JkaW5hdGVzIDogdW5kZWZpbmVkO1xuICBjb25zdCBwMiA9IGl0ZW0yICYmIGl0ZW0yLmdlb21ldHJ5ID8gaXRlbTIuZ2VvbWV0cnkuY29vcmRpbmF0ZXMgOiB1bmRlZmluZWQ7XG5cbiAgaWYgKHAxICYmIHAyKSB7XG4gICAgLy8gYm90aCBoYXZlIGdlb21ldHJ5XG4gICAgaWYgKE1hdGguYWJzKHAxWzBdIC0gcDJbMF0pIDwgMWUtNiAmJiBNYXRoLmFicyhwMVsxXSAtIHAyWzFdKSA8IDFlLTYpIHtcbiAgICAgIC8vIGxvY2F0aW9uIG1hdGNoIGlzIG5vdCBlbm91Z2guIFJlcXVpcmUgYSBjb21tb24gcHJvcGVydHlcbiAgICAgIGlmIChcbiAgICAgICAgdHJ1RXEocHJvcHMxLm5hbWUsIHByb3BzMi5uYW1lKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEubGFiZWwsIHByb3BzMi5sYWJlbCkgfHxcbiAgICAgICAgdHJ1RXEocHJvcHMxLmFkZHJlc3MsIHByb3BzMi5hZGRyZXNzKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEuYWRkcmVzcywgcHJvcHMyLmxhYmVsKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEubGFiZWwsIHByb3BzMi5hZGRyZXNzKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG4iLCJpbXBvcnQgaXNTdHJpbmcgZnJvbSAnbG9kYXNoL2lzU3RyaW5nJztcbmltcG9ydCBvcmRlckJ5IGZyb20gJ2xvZGFzaC9vcmRlckJ5JztcbmltcG9ydCB1bmlxV2l0aCBmcm9tICdsb2Rhc2gvdW5pcVdpdGgnO1xuaW1wb3J0IGlzRHVwbGljYXRlIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1pcy1kdXBsaWNhdGUnO1xuXG5jb25zdCBub3JtYWxpemUgPSBzdHIgPT4ge1xuICBpZiAoIWlzU3RyaW5nKHN0cikpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpO1xufTtcblxuLyoqXG4gKiBMYXllclR5cGUgZGVwaWN0cyB0aGUgdHlwZSBvZiB0aGUgcG9pbnQtb2YtaW50ZXJlc3QuXG4gKi9cbmNvbnN0IExheWVyVHlwZSA9IHtcbiAgQWRkcmVzczogJ2FkZHJlc3MnLFxuICBCYWNrOiAnYmFjaycsXG4gIEN1cnJlbnRQb3NpdGlvbjogJ2N1cnJlbnRQb3NpdGlvbicsXG4gIEZhdm91cml0ZVN0b3A6ICdmYXZvdXJpdGVTdG9wJyxcbiAgRmF2b3VyaXRlU3RhdGlvbjogJ2Zhdm91cml0ZVN0YXRpb24nLFxuICBGYXZvdXJpdGVQbGFjZTogJ2Zhdm91cml0ZVBsYWNlJyxcbiAgRmF2b3VyaXRlUm91dGU6ICdmYXZvdXJpdGVSb3V0ZScsXG4gIEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uOiAnZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24nLFxuICBGdXR1cmVSb3V0ZTogJ2Z1dHVyZVJvdXRlJyxcbiAgU3RhdGlvbjogJ3N0YXRpb24nLFxuICBTZWxlY3RGcm9tTWFwOiAnc2VsZWN0RnJvbU1hcCcsXG4gIFNlbGVjdEZyb21Pd25Mb2NhdGlvbnM6ICdvd25Mb2NhdGlvbnMnLFxuICBTdG9wOiAnc3RvcCcsXG4gIFN0cmVldDogJ3N0cmVldCcsXG4gIFZlbnVlOiAndmVudWUnLFxuICBWZWhpY2xlUmVudGFsU3RhdGlvbjogJ2Jpa2VzdGF0aW9uJyxcbiAgQ2FyUGFyazogJ2NhcnBhcmsnLFxuICBCaWtlUGFyazogJ2Jpa2VwYXJrJyxcbn07XG5leHBvcnQgY29uc3QgaXNTdG9wID0gKHsgbGF5ZXIsIHR5cGUgfSkgPT5cbiAgbGF5ZXIgPT09ICdzdG9wJyB8fFxuICBsYXllciA9PT0gJ2Zhdm91cml0ZVN0b3AnIHx8XG4gIHR5cGUgPT09ICdzdG9wJyB8fFxuICB0eXBlID09PSAnZmF2b3VyaXRlU3RvcCc7XG5cbmNvbnN0IERFRkFVTFRfUk9VVEVTX1BSRUZJWCA9ICdsaW5qYXQnO1xuY29uc3QgREVGQVVMVF9TVE9QU19QUkVGSVggPSAncHlzYWtpdCc7XG5cbmV4cG9ydCBjb25zdCBtYXBSb3V0ZSA9IChpdGVtLCBwYXRoT3B0cykgPT4ge1xuICBpZiAoaXRlbSA9PT0gbnVsbCB8fCBpdGVtID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG9wdHMgPSBwYXRoT3B0cyB8fCB7fTtcblxuICBjb25zdCByb3V0ZXNQcmVmaXggPSBvcHRzLnJvdXRlc1ByZWZpeCB8fCBERUZBVUxUX1JPVVRFU19QUkVGSVg7XG4gIGNvbnN0IHN0b3BzUHJlZml4ID0gb3B0cy5zdG9wc1ByZWZpeCB8fCBERUZBVUxUX1NUT1BTX1BSRUZJWDtcblxuICBjb25zdCBsaW5rID0gYC8ke3JvdXRlc1ByZWZpeH0vJHtpdGVtLmd0ZnNJZH0vJHtzdG9wc1ByZWZpeH1gO1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdSb3V0ZScsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgLi4uaXRlbSxcbiAgICAgIGxheWVyOiBgcm91dGUtJHtpdGVtLm1vZGV9YCxcbiAgICAgIGxpbmssXG4gICAgfSxcbiAgICBnZW9tZXRyeToge1xuICAgICAgY29vcmRpbmF0ZXM6IG51bGwsXG4gICAgfSxcbiAgfTtcbn07XG5cbi8qKlxuICogVHJpZXMgdG8gbWF0Y2ggdGhlIGdpdmVuIHNlYXJjaCB0ZXJtIGFnYWlucyB0aGUgY29sbGVjdGlvbiBvZiBwcm9wZXJ0aWVzXG4gKiBmb3IgYSBnZW9jb2RpbmcgcmVzdWx0LiBUaGUgYmVzdCBtYXRjaCB3aWxsIGJlIHJldHVybmVkIChtaW46IDAsIG1heDogMS41KS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbm9ybWFsaXplZFRlcm0gdGhlIG5vcm1hbGl6ZWQgc2VhcmNoIHRlcm0uXG4gKiBAcGFyYW0geyp9IHJlc3VsdFByb3BlcnRpZXMgdGhlIGdlb2NvZGluZyByZXN1bHQncyBwcm9wZXJ0eSBjb2xsZWN0aW9uLlxuICovXG5leHBvcnQgY29uc3QgbWF0Y2ggPSAobm9ybWFsaXplZFRlcm0sIHJlc3VsdFByb3BlcnRpZXMpID0+IHtcbiAgaWYgKCFpc1N0cmluZyhub3JtYWxpemVkVGVybSkgfHwgbm9ybWFsaXplZFRlcm0ubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBjb25zdCBtYXRjaFByb3BzID0gWyduYW1lJywgJ2xhYmVsJywgJ2FkZHJlc3MnLCAnc2hvcnROYW1lJ107XG4gIHJldHVybiBtYXRjaFByb3BzXG4gICAgLm1hcChuYW1lID0+IHJlc3VsdFByb3BlcnRpZXNbbmFtZV0pXG4gICAgLmZpbHRlcih2YWx1ZSA9PiBpc1N0cmluZyh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID4gMClcbiAgICAubWFwKHZhbHVlID0+IHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IG5vcm1hbGl6ZSh2YWx1ZSk7XG4gICAgICBpZiAobm9ybWFsaXplZFZhbHVlLmluZGV4T2Yobm9ybWFsaXplZFRlcm0pID09PSAwKSB7XG4gICAgICAgIC8vIGZ1bGwgbWF0Y2ggYXQgc3RhcnQuIFJldHVybiBtYXggcmVzdWx0IHdoZW4gbWF0Y2ggaXMgZnVsbCwgbm90IG9ubHkgcGFydGlhbFxuICAgICAgICByZXR1cm4gMC41ICsgbm9ybWFsaXplZFRlcm0ubGVuZ3RoIC8gbm9ybWFsaXplZFZhbHVlLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIC8vIGJlY2F1c2Ugb2YgZmlsdGVybWF0Y2hpbmd0b2lucHV0LCB3ZSBrbm93IHRoYXQgbWF0Y2ggb2NjdXJyZWQgc29tZXdoZXJlXG4gICAgICAvLyBkb24ndCBydW4gZmlsdGVybWF0Y2hpbmcgYWdhaW4gYnV0IGVzdGltYXRlIHJvdWdobHk6XG4gICAgICAvLyB0aGUgbG9uZ2VyIHRoZSBtYXRjaGluZyBzdHJpbmcsIHRoZSBiZXR0ZXIgY29uZmlkZW5jZSwgbWF4IGJlaW5nIDAuNVxuICAgICAgcmV0dXJuICgwLjUgKiBub3JtYWxpemVkVGVybS5sZW5ndGgpIC8gKG5vcm1hbGl6ZWRUZXJtLmxlbmd0aCArIDEpO1xuICAgIH0pXG4gICAgLnJlZHVjZShcbiAgICAgIChwcmV2aW91cywgY3VycmVudCkgPT4gKGN1cnJlbnQgPiBwcmV2aW91cyA/IGN1cnJlbnQgOiBwcmV2aW91cyksXG4gICAgICAwLFxuICAgICk7XG59O1xuXG4vKipcbiAqIFJhbmtzIHRoZSByZXN1bHQgYmFzZWQgb24gaXRzIGxheWVyIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYXllciB0aGUgbGF5ZXIgcHJvcGVydHkuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIHRoZSBzb3VyY2UgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRMYXllclJhbmsgPSAobGF5ZXIsIHNvdXJjZSkgPT4ge1xuICBzd2l0Y2ggKGxheWVyKSB7XG4gICAgY2FzZSBMYXllclR5cGUuQ3VycmVudFBvc2l0aW9uOlxuICAgICAgcmV0dXJuIDE7XG4gICAgY2FzZSBMYXllclR5cGUuQmFjazpcbiAgICAgIHJldHVybiAwLjk7XG4gICAgY2FzZSBMYXllclR5cGUuU2VsZWN0RnJvbU1hcDpcbiAgICAgIHJldHVybiAwLjg7XG4gICAgY2FzZSBMYXllclR5cGUuU2VsZWN0RnJvbU93bkxvY2F0aW9uczpcbiAgICAgIHJldHVybiAwLjc5O1xuICAgIGNhc2UgTGF5ZXJUeXBlLkZhdm91cml0ZVN0YXRpb246XG4gICAgY2FzZSBMYXllclR5cGUuRmF2b3VyaXRlUGxhY2U6XG4gICAgY2FzZSBMYXllclR5cGUuRmF2b3VyaXRlU3RvcDpcbiAgICBjYXNlIExheWVyVHlwZS5GYXZvdXJpdGVSb3V0ZTpcbiAgICBjYXNlIExheWVyVHlwZS5GYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbjpcbiAgICAgIHJldHVybiAwLjQ1O1xuICAgIGNhc2UgTGF5ZXJUeXBlLkZ1dHVyZVJvdXRlOlxuICAgICAgcmV0dXJuIDAuNDQ7XG4gICAgY2FzZSBMYXllclR5cGUuU3RhdGlvbjoge1xuICAgICAgaWYgKGlzU3RyaW5nKHNvdXJjZSkgJiYgc291cmNlLmluZGV4T2YoJ2d0ZnMnKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gMC40MztcbiAgICAgIH1cbiAgICAgIHJldHVybiAwLjQyO1xuICAgIH1cbiAgICBjYXNlIExheWVyVHlwZS5DYXJQYXJrOlxuICAgICAgcmV0dXJuIDAuMzg7XG4gICAgY2FzZSBMYXllclR5cGUuQmlrZVBhcms6XG4gICAgICByZXR1cm4gMC4zODtcbiAgICBjYXNlIExheWVyVHlwZS5WZWhpY2xlUmVudGFsU3RhdGlvbjpcbiAgICAgIHJldHVybiAwLjM4O1xuICAgIGNhc2UgTGF5ZXJUeXBlLlN0b3A6XG4gICAgICByZXR1cm4gMC4zNjtcbiAgICBkZWZhdWx0OlxuICAgICAgLy8gdmVudWUsIGFkZHJlc3MsIHN0cmVldCwgcm91dGUteHh4XG4gICAgICByZXR1cm4gMC40MTtcbiAgfVxufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gc29ydCB0aGUgcmVzdWx0cy4gT3JkZXJzIGFzIGZvbGxvd3M6XG4gKiAgLSBjdXJyZW50IHBvc2l0aW9uIGZpcnN0IGZvciBhbiBlbXB0eSBzZWFyY2hcbiAqICAtIG1hdGNoaW5nIHJvdXRlcyBmaXJzdFxuICogIC0gb3RoZXJ3aXNlIGJ5IGNvbmZpZGVuY2UsIGV4Y2VwdCB0aGF0OlxuICogICAgLSBib29zdCB3ZWxsIG1hdGNoaW5nIHN0YXRpb25zIChlc3BlY2lhbGx5IGZyb20gR1RGUylcbiAqICAgIC0gcmFuayBzdG9wcyBsb3dlciBhcyB0aGV5IHRlbmQgdG8gb2NjdXB5IG1vc3Qgb2YgdGhlIHNlYXJjaCByZXN1bHRzXG4gKiAgLSBpdGVtcyB3aXRoIG5vIGNvbmZpZGVuY2UgKG9sZCBzZWFyY2hlcyBhbmQgZmF2b3JpdGVzKTpcbiAqICAgIC0gcmFuayBmYXZvdXJpdGVzIGJldHRlciB0aGFuIG9yZGluYXJ5IG9sZCBzZWFyY2hlc1xuICogICAgLSByYW5rIGZ1bGwgbWF0Y2ggYmV0dGVyIHRoYW4gcGFydGlhbCBtYXRjaFxuICogICAgLSByYW5rIG1hdGNoIGF0IG1pZGRsZSB3b3JkIGxvd2VyIHRoYW4gbWF0Y2ggYXQgdGhlIGJlZ2lubmluZ1xuICogICAgLSByYW5rIGJpa2UgcmVudGFsIHN0YXRpb25zIGxvd2VyXG4gKiBAcGFyYW0geypbXX0gcmVzdWx0cyBUaGUgc2VhcmNoIHJlc3VsdHMgdGhhdCB3ZXJlIHJlY2VpdmVkXG4gKiBAcGFyYW0ge1N0cmluZ30gdGVybSBUaGUgc2VhcmNoIHRlcm0gdGhhdCB3YXMgdXNlZFxuICovXG5leHBvcnQgY29uc3Qgc29ydFNlYXJjaFJlc3VsdHMgPSAobGluZVJlZ2V4cCwgcmVzdWx0cywgdGVybSA9ICcnKSA9PiB7XG4gIGlmICghQXJyYXkuaXNBcnJheShyZXN1bHRzKSkge1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG4gIGNvbnN0IGlzTGluZUlkZW50aWZpZXIgPSB2YWx1ZSA9PlxuICAgIGlzU3RyaW5nKHZhbHVlKSAmJiBsaW5lUmVnZXhwICYmIGxpbmVSZWdleHAudGVzdCh2YWx1ZSk7XG5cbiAgY29uc3Qgbm9ybWFsaXplZFRlcm0gPSBub3JtYWxpemUodGVybSk7XG4gIGNvbnN0IGlzTGluZVNlYXJjaCA9IGlzTGluZUlkZW50aWZpZXIobm9ybWFsaXplZFRlcm0pO1xuXG4gIGNvbnN0IG9yZGVyZWRSZXN1bHRzID0gb3JkZXJCeShcbiAgICByZXN1bHRzLFxuICAgIFtcbiAgICAgIC8vIHJhbmsgbWF0Y2hpbmcgcm91dGVzIGJlc3RcbiAgICAgIHJlc3VsdCA9PlxuICAgICAgICBpc0xpbmVTZWFyY2ggJiZcbiAgICAgICAgaXNMaW5lSWRlbnRpZmllcihub3JtYWxpemUocmVzdWx0LnByb3BlcnRpZXMuc2hvcnROYW1lKSkgJiZcbiAgICAgICAgbm9ybWFsaXplKHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZSkuaW5kZXhPZihub3JtYWxpemVkVGVybSkgPT09IDBcbiAgICAgICAgICA/IDFcbiAgICAgICAgICA6IDAsXG5cbiAgICAgIHJlc3VsdCA9PiB7XG4gICAgICAgIGNvbnN0IHsgY29uZmlkZW5jZSwgbGF5ZXIsIHNvdXJjZSB9ID0gcmVzdWx0LnByb3BlcnRpZXM7XG4gICAgICAgIGlmIChub3JtYWxpemVkVGVybS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAvLyBEb2luZyBzZWFyY2ggd2l0aCBlbXB0eSBzdHJpbmcuXG4gICAgICAgICAgLy8gTm8gY29uZmlkZW5jZSB0byBtYXRjaCwgc28gdXNlIHJhbmtlZCBvbGQgc2VhcmNoZXMgYW5kIGZhdm91cml0ZXNcbiAgICAgICAgICByZXR1cm4gZ2V0TGF5ZXJSYW5rKGxheWVyLCBzb3VyY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbXVzdCBoYW5kbGUgYSBtaXh1cCBvZiBnZW9jb2RlciBzZWFyY2hlcyBhbmQgaXRlbXMgYWJvdmVcbiAgICAgICAgLy8gTm9ybWFsIGNvbmZpZGVuY2UgcmFuZ2UgZnJvbSBnZW9jb2RlciBpcyBhYm91dCAwLjMgLi4gMVxuICAgICAgICBpZiAoIWNvbmZpZGVuY2UpIHtcbiAgICAgICAgICAvLyBub3QgZnJvbSBnZW9jb2RlciwgZXN0aW1hdGUgY29uZmlkZW5jZSBvdXJzZWx2ZXNcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgZ2V0TGF5ZXJSYW5rKGxheWVyLCBzb3VyY2UpICtcbiAgICAgICAgICAgIG1hdGNoKG5vcm1hbGl6ZWRUZXJtLCByZXN1bHQucHJvcGVydGllcylcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIC8vIGdlb2NvZGVkIGl0ZW1zIHdpdGggY29uZmlkZW5jZSwganVzdCBhZGp1c3QgYSBsaXR0bGVcbiAgICAgICAgc3dpdGNoIChsYXllcikge1xuICAgICAgICAgIGNhc2UgTGF5ZXJUeXBlLlN0YXRpb246IHtcbiAgICAgICAgICAgIGNvbnN0IGJvb3N0ID0gc291cmNlLmluZGV4T2YoJ2d0ZnMnKSA9PT0gMCA/IDAuMDIgOiAwLjAxO1xuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2UgKyBib29zdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBMYXllclR5cGUuU3RvcDpcbiAgICAgICAgICAgIHJldHVybiBjb25maWRlbmNlIC0gMC4wNTtcbiAgICAgICAgICBjYXNlIExheWVyVHlwZS5DYXJQYXJrOlxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2UgLSAwLjA1O1xuICAgICAgICAgIGNhc2UgTGF5ZXJUeXBlLkJpa2VQYXJrOlxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2UgLSAwLjA1O1xuICAgICAgICAgIGNhc2UgTGF5ZXJUeXBlLlZlaGljbGVSZW50YWxTdGF0aW9uOlxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2UgLSAwLjA0O1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgICdwcm9wZXJ0aWVzLnNob3J0TmFtZScsXG4gICAgXSxcbiAgICBbJ2Rlc2MnLCAnZGVzYycsICdhc2MnXSxcbiAgKTtcblxuICByZXR1cm4gdW5pcVdpdGgob3JkZXJlZFJlc3VsdHMsIGlzRHVwbGljYXRlKTtcbn07XG5cbi8qKlxuICogUGFyc2VzIHN0b3AncyBuYW1lIHdpdGhvdXQgc3RvcCBjb2RlIGZyb20gYSBzdG9wIG5hbWUgZnJvbSBnZW9jb2RpbmcgcmVzdWx0c1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbCBzdG9wJ3MgbmFtZSBmcm9tIGdlb2NvZGluZyByZXN1bHRzLlxuICogQHBhcmFtIHtzdHJpbmd9IHN0b3BDb2RlIHN0b3AgY29kZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFN0b3BOYW1lID0gKG5hbWUsIHN0b3BDb2RlKSA9PiB7XG4gIGlmIChcbiAgICBzdG9wQ29kZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgc3RvcENvZGUgIT09IG51bGwgJiZcbiAgICBuYW1lLmxhc3RJbmRleE9mKHN0b3BDb2RlKSAhPT0gLTFcbiAgKSB7XG4gICAgcmV0dXJuIG5hbWUuc3Vic3RyaW5nKDAsIG5hbWUubGFzdEluZGV4T2Yoc3RvcENvZGUpIC0gMSk7XG4gIH1cbiAgcmV0dXJuIG5hbWU7XG59O1xuIiwiaW1wb3J0IGdldCBmcm9tICdsb2Rhc2gvZ2V0JztcblxuLyoqXG4gKiBGdW5jdGlvbiB0aGF0IGZpbHRlcnMgbGlzdCBtYXRjaGluZyB0byBpbnB1dC5cbiAqXG4gKiBAbmFtZSBmaWx0ZXJNYXRjaGluZ1RvSW5wdXRcbiAqIEBwYXJhbSB7QXJyYXl9IGxpc3QgTGlzdCBjb250YWluaW4gb2JqZWN0cyBlLmcoICB7XG4gKiAgICAgICAgIHR5cGU6ICdGZWF0dXJlJ1xuICogICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gKiAgICAgICAgICAgbGFiZWw6ICd0ZXN0YWRkcmVzczQnLFxuICogICAgICAgICAgIGxheWVyOiAnYWRkcmVzcycsXG4gKiAgICAgICAgICAgbmFtZTogJ3Rlc3RhZGRyZXNzNCcsXG4gKiAgICAgICAgIH0sXG4gKiAgICAgICAgIGdlb21ldHJ5OiB7IGNvb3JkaW5hdGVzOiBbbG9uLCBsYXRdIH0sXG4gKiAgICAgICB9LClcbiAqIEBwYXJhbSB7U3RyaW5nfSBJbnB1dCBJbnB1dCBnaXZlbiBmb3IgZmlsdGVyaW5nIHRoZSBsaXN0XG4gKiBAcGFyYW0ge0FycmF5fSBmaWVsZHMgTGlzdCBvZiBmaWVsZHMgdGhhdCBsaXN0IGlzIGZpbHRlcmVkIGJ5IGUuZyAoW3Byb3BlcnRpZXMubGFiZWwsIHByb3BlcnRpZXMubmFtZV0pXG4gKiBAcmV0dXJucyB7QXJyYXl9IEZpbHRlcmVkIEFycmF5LlxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXV0aWwuZmlsdGVyTWF0Y2hpbmdUb0lucHV0KFt7dHlwZTogZmVhdHVyZSwgcHJvcGVydGllcyB7IC4uLiBuYW1lOiB0ZXN0YWRkcmVzczQgfSAuLi4gfV0sICd0ZXN0YWRkcmVzczQnLCAncHJvcGVydGllcy5uYW1lJyk7XG4gKiAvLz0gTGlzdCBjb250YWluaW5nIG9iamVjdCB3aXRoIGdpdmVuIG5hbWUuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZpbHRlck1hdGNoaW5nVG9JbnB1dChsaXN0LCBJbnB1dCwgZmllbGRzKSB7XG4gIGlmICh0eXBlb2YgSW5wdXQgPT09ICdzdHJpbmcnICYmIElucHV0Lmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBpbnB1dCA9IElucHV0LnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIGNvbnN0IG11bHRpV29yZCA9IGlucHV0LmluY2x1ZGVzKCcgJykgfHwgaW5wdXQuaW5jbHVkZXMoJywnKTtcbiAgICByZXR1cm4gbGlzdC5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICBsZXQgcGFydHMgPSBbXTtcbiAgICAgIGZpZWxkcy5mb3JFYWNoKHBOYW1lID0+IHtcbiAgICAgICAgbGV0IHZhbHVlID0gZ2V0KGl0ZW0sIHBOYW1lKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgIW11bHRpV29yZCAmJlxuICAgICAgICAgIChwTmFtZSA9PT0gJ3Byb3BlcnRpZXMubGFiZWwnIHx8IHBOYW1lID09PSAnYWRkcmVzcycpICYmXG4gICAgICAgICAgdmFsdWVcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gc3BlY2lhbCBjYXNlOiBkcm9wIGxhc3QgcGFydHMgaS5lLiBjaXR5IGFuZCBuZWlnaGJvdXJob29kXG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zcGxpdCgnLCcpO1xuICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICB2YWx1ZS5zcGxpY2UodmFsdWUubGVuZ3RoIC0gMiwgMik7XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB2YWx1ZS5zcGxpY2UodmFsdWUubGVuZ3RoIC0gMSwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhbHVlID0gdmFsdWUuam9pbignLCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChtdWx0aVdvcmQpIHtcbiAgICAgICAgICAgIHBhcnRzID0gcGFydHMuY29uY2F0KHZhbHVlLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJ0cyA9IHBhcnRzLmNvbmNhdChcbiAgICAgICAgICAgICAgdmFsdWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8sL2csICcgJykuc3BsaXQoJyAnKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHBhcnRzW2ldLmluZGV4T2YoaW5wdXQpID09PSAwKSB7XG4gICAgICAgICAgLy8gYWNjZXB0IG1hdGNoIG9ubHkgYXQgd29yZCBzdGFydFxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbGlzdDtcbn1cbiIsIi8qKlxuICogU2VyaWFsaXplcyBvYmplY3RzXG4gKlxuICogQG5hbWUgc2VyaWFsaXplXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIE9iamVjdCB0byBiZSBzZXJpYWxpemVkXG4gKiBAcGFyYW0ge0FueX0gcHJlZml4XG4gKiBAcmV0dXJucyB7U3RyaW5nfSBTZXJpYWxpemVkIG9iamVjdFxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLnNlcmlhbGl6ZShwYXJhbTEsIHBhcmFtMik7XG4gKiAvLz10cnVlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNlcmlhbGl6ZShvYmosIHByZWZpeCkge1xuICBpZiAoIW9iaikge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKVxuICAgIC5tYXAocCA9PiB7XG4gICAgICBjb25zdCBrID0gcHJlZml4IHx8IHA7XG4gICAgICBjb25zdCB2ID0gb2JqW3BdO1xuXG4gICAgICByZXR1cm4gdHlwZW9mIHYgPT09ICdvYmplY3QnXG4gICAgICAgID8gc2VyaWFsaXplKHYsIGspXG4gICAgICAgIDogYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGspfT0ke2VuY29kZVVSSUNvbXBvbmVudCh2KX1gO1xuICAgIH0pXG4gICAgLmpvaW4oJyYnKTtcbn1cbiIsImltcG9ydCBzZXJpYWxpemUgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXNlcmlhbGl6ZSc7XG4vKipcbiAqICBSZXR1cm4gUHJvbWlzZSBmb3IgYSB1cmwganNvbiBnZXQgcmVxdWVzdFxuICpcbiAqIEBuYW1lIGdldEpzb25cbiAqIEBwYXJhbSB7U3RyaW5nfSB1cmxcbiAqIEBwYXJhbSB7QXJyYXl9IHBhcmFtc1xuICogQHJldHVybnMge09iamVjdH0gcmVzcG9uc2VcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC5nZXRKc29uKHBhcmFtMSwgcGFyYW0yKTtcbiAqIC8vPXJlc3BvbnNlXG4gKi9cbmNvbnN0IGF4aW9zID0gcmVxdWlyZSgnYXhpb3MnKS5kZWZhdWx0O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRKc29uKHVybCwgcGFyYW1zKSB7XG4gIHJldHVybiBheGlvc1xuICAgIC5nZXQoXG4gICAgICBlbmNvZGVVUkkodXJsKSArXG4gICAgICAgIChwYXJhbXNcbiAgICAgICAgICA/ICh1cmwuc2VhcmNoKC9cXD8vKSA9PT0gLTEgPyAnPycgOiAnJicpICsgc2VyaWFsaXplKHBhcmFtcylcbiAgICAgICAgICA6ICcnKSxcbiAgICAgIHtcbiAgICAgICAgdGltZW91dDogMTAwMDAsXG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG5cbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICApXG4gICAgLnRoZW4ocmVzID0+IHtcbiAgICAgIHJldHVybiByZXMuZGF0YTtcbiAgICB9KTtcbn1cbiIsImltcG9ydCBnZXRKc29uIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtanNvbic7XG5cbmNvbnN0IERFRkFVTFRfUEVMSUFTX1VSTCA9ICdodHRwczovL2FwaS5kaWdpdHJhbnNpdC5maS9nZW9jb2RpbmcvdjEvc2VhcmNoJztcbi8qKlxuICogPERFU0NSSVBUSU9OPlxuICpcbiAqIEBuYW1lIGdldEdlb2NvZGluZ1Jlc3VsdHNcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWFyY2hTdHJpbmdcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWFyY2hQYXJhbXMgKE9wdGlvbmFsKSBQYXJhbWV0ZXJzIGFwcGVuZGVkIHRvIHVybCwgYmFzaWNhbGx5IGJveCAvIHBvbHlnb24gdG8gcmVzdHJpY3Qgc2VhcmNoIGFyZWFcbiAqIEBwYXJhbSB7U3RyaW5nfSBsYW5nIChPcHRpb25hbCkgc2VhcmNoIGxhbmd1YWdlXG4gKiBAcGFyYW0ge09iamVjdH0gZm9jdXNQb2ludCAoT3B0aW9uYWwpIE93biBQb3NpdGlvbiAoUEVMSUFTIEFQSSlcbiAqIEBwYXJhbSB7U3RyaW5nfSBzb3VyY2VzIChPcHRpb25hbCkgc2VhcmNoIHNvdXJjZXMgKGUuZyBPU00sIEdURlMuLilcbiAqIEBwYXJhbSB7T2JqZWN0fSBtaW5pbWFsUmVnZXhwIChPcHRpb25hbCkgUmVnZXhwIGZvciB0ZXN0aW5nXG4gKiBAcGFyYW0geyp9IGdlb2NvZGluZ0xheWVycyAoT3B0aW9uYWwpIEFycmF5IG9mIHN0cmluZ3MgdGhhdCBpcyB1c2VkIHRvIGRldGVybWluZSB3aGljaCBsYXllcnMgaXMgc2VhcmNoZWQsIGUuZy4gWyd2ZW51ZScsICdhZGRyZXNzJywgJ3N0b3AnXVxuICogQHJldHVybnMge1N0cmluZ30gUmVzdWx0cyBpbiBKU09OIGZvcm1cbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC5nZXRHZW9jb2RpbmdSZXN1bHRzKFwicmVzdWx0XCIpO1xuICogLy89IGUuZy4ge3RleHQ6XCJyZXN1bHRcIn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0R2VvY29kaW5nUmVzdWx0cyhcbiAgc2VhcmNoU3RyaW5nLFxuICBzZWFyY2hQYXJhbXMsXG4gIGxhbmcsXG4gIGZvY3VzUG9pbnQsXG4gIHNvdXJjZXMsXG4gIHBlbGlhc1VybCxcbiAgbWluaW1hbFJlZ2V4cCxcbiAgZ2VvY29kaW5nTGF5ZXJzLFxuKSB7XG4gIGNvbnN0IHRleHQgPSBzZWFyY2hTdHJpbmcgPyBzZWFyY2hTdHJpbmcudHJpbSgpIDogbnVsbDtcbiAgaWYgKFxuICAgIHRleHQgPT09IHVuZGVmaW5lZCB8fFxuICAgIHRleHQgPT09IG51bGwgfHxcbiAgICB0ZXh0Lmxlbmd0aCA8IDEgfHxcbiAgICAobWluaW1hbFJlZ2V4cCAmJiAhbWluaW1hbFJlZ2V4cC50ZXN0KHRleHQpKVxuICApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbiAgfVxuICBjb25zdCBQRUxJQVNfVVJMID0gcGVsaWFzVXJsIHx8IERFRkFVTFRfUEVMSUFTX1VSTDtcbiAgbGV0IG9wdHMgPSB7IHRleHQsIC4uLnNlYXJjaFBhcmFtcywgLi4uZm9jdXNQb2ludCwgbGFuZyB9O1xuICBpZiAoc291cmNlcykge1xuICAgIG9wdHMgPSB7IC4uLm9wdHMsIHNvdXJjZXMgfTtcbiAgfVxuICBpZiAoZ2VvY29kaW5nTGF5ZXJzKSB7XG4gICAgY29uc3QgbGF5ZXJzID0gZ2VvY29kaW5nTGF5ZXJzLnRvU3RyaW5nKCk7XG4gICAgb3B0cyA9IHsgLi4ub3B0cywgbGF5ZXJzIH07XG4gIH1cbiAgcmV0dXJuIGdldEpzb24oUEVMSUFTX1VSTCwgb3B0cykudGhlbihyZXMgPT4ge1xuICAgIHJldHVybiByZXMuZmVhdHVyZXM7XG4gIH0pO1xufVxuIiwiaW1wb3J0IGRlYm91bmNlIGZyb20gJ2xvZGFzaC9kZWJvdW5jZSc7XG5pbXBvcnQgZmxhdHRlbiBmcm9tICdsb2Rhc2gvZmxhdHRlbic7XG5pbXBvcnQgdGFrZSBmcm9tICdsb2Rhc2gvdGFrZSc7XG5pbXBvcnQge1xuICBzb3J0U2VhcmNoUmVzdWx0cyxcbiAgaXNTdG9wLFxufSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtaGVscGVycyc7XG5pbXBvcnQgZmlsdGVyTWF0Y2hpbmdUb0lucHV0IGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1maWx0ZXItbWF0Y2hpbmctdG8taW5wdXQnO1xuaW1wb3J0IGdldEdlb2NvZGluZ1Jlc3VsdHMgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cyc7XG5pbXBvcnQgZ2V0SnNvbiBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWpzb24nO1xuXG5mdW5jdGlvbiBnZXRTdG9wc0Zyb21HZW9jb2Rpbmcoc3RvcHMsIFVSTF9QRUxJQVNfUExBQ0UpIHtcbiAgaWYgKCFzdG9wcyB8fCBzdG9wcy5sZW5ndGggPCAxKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG4gIH1cbiAgbGV0IGdpZHMgPSAnJztcbiAgY29uc3Qgc3RvcHNXaXRoR2lkcyA9IHN0b3BzLm1hcChzdG9wID0+IHtcbiAgICBjb25zdCB0eXBlID0gc3RvcC50eXBlID09PSAnc3RvcCcgPyAnc3RvcCcgOiAnc3RhdGlvbic7XG4gICAgbGV0IGdpZCA9IGBndGZzJHtzdG9wLmd0ZnNJZC5zcGxpdCgnOicpWzBdLnRvTG93ZXJDYXNlKCl9OiR7dHlwZX06R1RGUzoke1xuICAgICAgc3RvcC5ndGZzSWRcbiAgICB9YDtcbiAgICBpZiAoc3RvcC5jb2RlKSB7XG4gICAgICBnaWQgKz0gYCMke3N0b3AuY29kZX1gO1xuICAgIH1cbiAgICBnaWRzICs9IGAke2dpZH0sYDtcbiAgICByZXR1cm4geyAuLi5zdG9wLCBnaWQgfTtcbiAgfSk7XG4gIGNvbnN0IHN0b3BTdGF0aW9uTWFwID0gc3RvcHNXaXRoR2lkcy5yZWR1Y2UoZnVuY3Rpb24gcmVkdShcbiAgICBtYXAsXG4gICAgc3RvcE9yU3RhdGlvbixcbiAgKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgbWFwW3N0b3BPclN0YXRpb24uZ2lkXSA9IHN0b3BPclN0YXRpb247XG4gICAgcmV0dXJuIG1hcDtcbiAgfSwge30pO1xuICByZXR1cm4gZ2V0SnNvbihVUkxfUEVMSUFTX1BMQUNFLCB7XG4gICAgaWRzOiBnaWRzLnNsaWNlKDAsIC0xKSxcbiAgICAvLyBsYW5nOiBjb250ZXh0LmdldFN0b3JlKCdQcmVmZXJlbmNlc1N0b3JlJykuZ2V0TGFuZ3VhZ2UoKSwgVE9ETyBlbmFibGUgdGhpcyB3aGVuIE9UUCBzdXBwb3J0cyB0cmFuc2xhdGlvbnNcbiAgfSkudGhlbihyZXMgPT4ge1xuICAgIHJldHVybiByZXMuZmVhdHVyZXMubWFwKHN0b3AgPT4ge1xuICAgICAgY29uc3QgZmF2b3VyaXRlID0ge1xuICAgICAgICB0eXBlOiAnRmF2b3VyaXRlU3RvcCcsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBhZGRlbmR1bTogc3RvcC5wcm9wZXJ0aWVzLmFkZGVuZHVtLFxuICAgICAgICAgIGdpZDogc3RvcFN0YXRpb25NYXBbc3RvcC5wcm9wZXJ0aWVzLmdpZF0uZ2lkLFxuICAgICAgICAgIGNvZGU6IHN0b3BTdGF0aW9uTWFwW3N0b3AucHJvcGVydGllcy5naWRdLmNvZGUsXG4gICAgICAgICAgZ3Rmc0lkOiBzdG9wU3RhdGlvbk1hcFtzdG9wLnByb3BlcnRpZXMuZ2lkXS5ndGZzSWQsXG4gICAgICAgICAgbGFzdFVwZGF0ZWQ6IHN0b3BTdGF0aW9uTWFwW3N0b3AucHJvcGVydGllcy5naWRdLmxhc3RVcGRhdGVkLFxuICAgICAgICAgIGZhdm91cml0ZUlkOiBzdG9wU3RhdGlvbk1hcFtzdG9wLnByb3BlcnRpZXMuZ2lkXS5mYXZvdXJpdGVJZCxcbiAgICAgICAgICBhZGRyZXNzOiBzdG9wLnByb3BlcnRpZXMubGFiZWwsXG4gICAgICAgICAgbGF5ZXI6IGlzU3RvcChzdG9wLnByb3BlcnRpZXMpID8gJ2Zhdm91cml0ZVN0b3AnIDogJ2Zhdm91cml0ZVN0YXRpb24nLFxuICAgICAgICB9LFxuICAgICAgICBnZW9tZXRyeTogc3RvcC5nZW9tZXRyeSxcbiAgICAgIH07XG4gICAgICByZXR1cm4gZmF2b3VyaXRlO1xuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGZpbHRlckZhdm91cml0ZUxvY2F0aW9ucyhmYXZvdXJpdGVzLCBpbnB1dCkge1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgIGZpbHRlck1hdGNoaW5nVG9JbnB1dChmYXZvdXJpdGVzLCBpbnB1dCwgWydhZGRyZXNzJywgJ25hbWUnXSkubWFwKGl0ZW0gPT4gKHtcbiAgICAgIHR5cGU6ICdGYXZvdXJpdGVQbGFjZScsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIC4uLml0ZW0sXG4gICAgICAgIGxhYmVsOiBpdGVtLm5hbWUsXG4gICAgICAgIGxheWVyOiAnZmF2b3VyaXRlUGxhY2UnLFxuICAgICAgfSxcbiAgICAgIGdlb21ldHJ5OiB7IHR5cGU6ICdQb2ludCcsIGNvb3JkaW5hdGVzOiBbaXRlbS5sb24sIGl0ZW0ubGF0XSB9LFxuICAgIH0pKSxcbiAgKTtcbn1cbmZ1bmN0aW9uIHNlbGVjdFBvc2l0aW9uRm9tTWFwKGlucHV0KSB7XG4gIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnIHx8IGlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnU2VsZWN0RnJvbU1hcCcsXG4gICAgICAgIGFkZHJlc3M6ICdTZWxlY3RGcm9tTWFwJyxcbiAgICAgICAgbGF0OiBudWxsLFxuICAgICAgICBsb246IG51bGwsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBsYWJlbElkOiAnc2VsZWN0LWZyb20tbWFwJyxcbiAgICAgICAgICBsYXllcjogJ3NlbGVjdEZyb21NYXAnLFxuICAgICAgICAgIGFkZHJlc3M6ICdTZWxlY3RGcm9tTWFwJyxcbiAgICAgICAgICBsYXQ6IG51bGwsXG4gICAgICAgICAgbG9uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgIHR5cGU6ICdQb2ludCcsXG4gICAgICAgICAgY29vcmRpbmF0ZXM6IFtdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdKTtcbiAgfVxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudFBvc2l0aW9uSWZFbXB0eShpbnB1dCwgcG9zaXRpb24pIHtcbiAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycgfHwgaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdDdXJyZW50TG9jYXRpb24nLFxuICAgICAgICBhZGRyZXNzOiBwb3NpdGlvbi5hZGRyZXNzLFxuICAgICAgICBsYXQ6IHBvc2l0aW9uLmxhdCxcbiAgICAgICAgbG9uOiBwb3NpdGlvbi5sb24sXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBsYWJlbElkOiAndXNlLW93bi1wb3NpdGlvbicsXG4gICAgICAgICAgbGF5ZXI6ICdjdXJyZW50UG9zaXRpb24nLFxuICAgICAgICAgIGFkZHJlc3M6IHBvc2l0aW9uLmFkZHJlc3MsXG4gICAgICAgICAgbGF0OiBwb3NpdGlvbi5sYXQsXG4gICAgICAgICAgbG9uOiBwb3NpdGlvbi5sb24sXG4gICAgICAgIH0sXG4gICAgICAgIGdlb21ldHJ5OiB7XG4gICAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgICBjb29yZGluYXRlczogW3Bvc2l0aW9uLmxvbiwgcG9zaXRpb24ubGF0XSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXSk7XG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbn1cblxuZnVuY3Rpb24gc2VsZWN0RnJvbU93bkxvY2F0aW9ucyhpbnB1dCkge1xuICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJyB8fCBpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnLFxuICAgICAgICBhZGRyZXNzOiAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycsXG4gICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgbG9uOiBudWxsLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgbGFiZWxJZDogJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnLFxuICAgICAgICAgIGxheWVyOiAnb3duTG9jYXRpb25zJyxcbiAgICAgICAgICBhZGRyZXNzOiAnc2VsZWN0RnJvbU93bkxvY2F0aW9ucycsXG4gICAgICAgICAgbGF0OiBudWxsLFxuICAgICAgICAgIGxvbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgICAgIGNvb3JkaW5hdGVzOiBbXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXSk7XG4gIH1cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG59XG5cbmZ1bmN0aW9uIGdldEJhY2tTdWdnZXN0aW9uKCkge1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtcbiAgICB7XG4gICAgICB0eXBlOiAnYmFjaycsXG4gICAgICBhZGRyZXNzOiAnYmFjaycsXG4gICAgICBsYXQ6IG51bGwsXG4gICAgICBsb246IG51bGwsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGxhYmVsSWQ6ICdiYWNrJyxcbiAgICAgICAgbGF5ZXI6ICdiYWNrJyxcbiAgICAgICAgYWRkcmVzczogJ2JhY2snLFxuICAgICAgICBsYXQ6IG51bGwsXG4gICAgICAgIGxvbjogbnVsbCxcbiAgICAgIH0sXG4gICAgICBnZW9tZXRyeToge1xuICAgICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgICBjb29yZGluYXRlczogW10sXG4gICAgICB9LFxuICAgIH0sXG4gIF0pO1xufVxuXG5mdW5jdGlvbiBmaWx0ZXJGYXZvdXJpdGVTdG9wcyhzdG9wc0FuZFN0YXRpb25zLCBpbnB1dCwgdXNlU3RvcHMsIHVzZVN0YXRpb25zKSB7XG4gIHJldHVybiBzdG9wc0FuZFN0YXRpb25zLnRoZW4oc3RvcHNTdGF0aW9ucyA9PiB7XG4gICAgY29uc3QgY2FuZGlkYXRlcyA9IHN0b3BzU3RhdGlvbnMuZmlsdGVyKHMgPT5cbiAgICAgIHMudHlwZSA9PT0gJ3N0b3AnID8gdXNlU3RvcHMgOiB1c2VTdGF0aW9ucyxcbiAgICApO1xuICAgIHJldHVybiBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQoY2FuZGlkYXRlcywgaW5wdXQsIFtcbiAgICAgICdwcm9wZXJ0aWVzLm5hbWUnLFxuICAgICAgJ3Byb3BlcnRpZXMubmFtZScsXG4gICAgICAncHJvcGVydGllcy5hZGRyZXNzJyxcbiAgICBdKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGZpbHRlck9sZFNlYXJjaGVzKG9sZFNlYXJjaGVzLCBpbnB1dCwgZHJvcExheWVycykge1xuICBsZXQgbWF0Y2hpbmdPbGRTZWFyY2hlcyA9IGZpbHRlck1hdGNoaW5nVG9JbnB1dChvbGRTZWFyY2hlcywgaW5wdXQsIFtcbiAgICAncHJvcGVydGllcy5uYW1lJyxcbiAgICAncHJvcGVydGllcy5sYWJlbCcsXG4gICAgJ3Byb3BlcnRpZXMuYWRkcmVzcycsXG4gICAgJ3Byb3BlcnRpZXMuc2hvcnROYW1lJyxcbiAgICAncHJvcGVydGllcy5sb25nTmFtZScsXG4gIF0pO1xuICBpZiAoZHJvcExheWVycykge1xuICAgIC8vIGRvbid0IHdhbnQgdGhlc2VcbiAgICBtYXRjaGluZ09sZFNlYXJjaGVzID0gbWF0Y2hpbmdPbGRTZWFyY2hlcy5maWx0ZXIoXG4gICAgICBpdGVtID0+ICFkcm9wTGF5ZXJzLmluY2x1ZGVzKGl0ZW0ucHJvcGVydGllcy5sYXllciksXG4gICAgKTtcbiAgfVxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgIHRha2UobWF0Y2hpbmdPbGRTZWFyY2hlcywgMTApLm1hcChpdGVtID0+IHtcbiAgICAgIGNvbnN0IG5ld0l0ZW0gPSB7XG4gICAgICAgIC4uLml0ZW0sXG4gICAgICAgIHR5cGU6ICdPbGRTZWFyY2gnLFxuICAgICAgICB0aW1ldGFibGVDbGlja2VkOiBmYWxzZSwgLy8gcmVzZXQgbGF0ZXN0IHNlbGVjdGlvbiBhY3Rpb25cbiAgICAgICAgYXJyb3dDbGlja2VkOiBmYWxzZSxcbiAgICAgIH07XG4gICAgICBkZWxldGUgbmV3SXRlbS5wcm9wZXJ0aWVzLmNvbmZpZGVuY2U7XG4gICAgICByZXR1cm4gbmV3SXRlbTtcbiAgICB9KSxcbiAgKTtcbn1cblxuZnVuY3Rpb24gaGFzRmF2b3VyaXRlcyhzZWFyY2hDb250ZXh0KSB7XG4gIGNvbnN0IGZhdm91cml0ZUxvY2F0aW9ucyA9IHNlYXJjaENvbnRleHQuZ2V0RmF2b3VyaXRlTG9jYXRpb25zKFxuICAgIHNlYXJjaENvbnRleHQuY29udGV4dCxcbiAgKTtcbiAgaWYgKGZhdm91cml0ZUxvY2F0aW9ucz8ubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3QgZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zID1cbiAgICBzZWFyY2hDb250ZXh0LmdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucyhzZWFyY2hDb250ZXh0LmNvbnRleHQpO1xuICBpZiAoZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zPy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgY29uc3QgZmF2b3VyaXRlU3RvcHMgPSBzZWFyY2hDb250ZXh0LmdldEZhdm91cml0ZVN0b3BzKHNlYXJjaENvbnRleHQuY29udGV4dCk7XG4gIHJldHVybiBmYXZvdXJpdGVTdG9wcz8ubGVuZ3RoID4gMDtcbn1cblxuY29uc3Qgcm91dGVMYXllcnMgPSBbXG4gICdyb3V0ZS1UUkFNJyxcbiAgJ3JvdXRlLUJVUycsXG4gICdyb3V0ZS1SQUlMJyxcbiAgJ3JvdXRlLUZFUlJZJyxcbiAgJ3JvdXRlLVNVQldBWScsXG4gICdyb3V0ZS1BSVJQTEFORScsXG4gICdyb3V0ZS1GVU5JQ1VMQVInLFxuXTtcbmNvbnN0IGxvY2F0aW9uTGF5ZXJzID0gWyd2ZW51ZScsICdhZGRyZXNzJywgJ3N0cmVldCddO1xuY29uc3QgcGFya2luZ0xheWVycyA9IFsnY2FycGFyaycsICdiaWtlcGFyayddO1xuY29uc3Qgc3RvcExheWVycyA9IFsnc3RvcCcsICdzdGF0aW9uJ107XG5cbi8qKlxuICogRXhlY3V0ZXMgdGhlIHNlYXJjaFxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlYXJjaFJlc3VsdHMoXG4gIHRhcmdldHMsXG4gIHNvdXJjZXMsXG4gIHRyYW5zcG9ydE1vZGUsXG4gIHNlYXJjaENvbnRleHQsXG4gIGZpbHRlclJlc3VsdHMsXG4gIGdlb2NvZGluZ1NpemUsXG4gIHsgaW5wdXQgfSxcbiAgY2FsbGJhY2ssXG4gIHBhdGhPcHRzLFxuICByZWZQb2ludCxcbikge1xuICBjb25zdCB7XG4gICAgZ2V0UG9zaXRpb25zLFxuICAgIGdldEZhdm91cml0ZUxvY2F0aW9ucyxcbiAgICBnZXRPbGRTZWFyY2hlcyxcbiAgICBnZXRGYXZvdXJpdGVTdG9wcyxcbiAgICBwYXJraW5nQXJlYVNvdXJjZXMsXG4gICAgZ2V0TGFuZ3VhZ2UsXG4gICAgZ2V0U3RvcEFuZFN0YXRpb25zUXVlcnksXG4gICAgZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zUXVlcnksXG4gICAgZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zLFxuICAgIGdldEZhdm91cml0ZVJvdXRlc1F1ZXJ5LFxuICAgIGdldEZhdm91cml0ZVJvdXRlcyxcbiAgICBnZXRSb3V0ZXNRdWVyeSxcbiAgICBjb250ZXh0LFxuICAgIGlzUGVsaWFzTG9jYXRpb25Bd2FyZTogbG9jYXRpb25Bd2FyZSxcbiAgICBtaW5pbWFsUmVnZXhwLFxuICAgIGxpbmVSZWdleHAsXG4gICAgVVJMX1BFTElBUyxcbiAgICBVUkxfUEVMSUFTX1BMQUNFLFxuICAgIGZlZWRJRHMsXG4gICAgZ2VvY29kaW5nU2VhcmNoUGFyYW1zLFxuICAgIGdlb2NvZGluZ1NvdXJjZXMsXG4gICAgZ2V0RnV0dXJlUm91dGVzLFxuICAgIGNpdHlCaWtlTmV0d29ya3MsXG4gIH0gPSBzZWFyY2hDb250ZXh0O1xuICAvLyBpZiBubyB0YXJnZXRzIGFyZSBwcm92aWRlZCwgc2VhcmNoIHRoZW0gYWxsLlxuICBjb25zdCBhbGxUYXJnZXRzID0gIXRhcmdldHMgfHwgdGFyZ2V0cy5sZW5ndGggPT09IDA7XG4gIC8vIGlmIG5vIHNvdXJjZXMgYXJlIHByb3ZpZGVkLCB1c2UgdGhlbSBhbGwuXG4gIGNvbnN0IGFsbFNvdXJjZXMgPSAhc291cmNlcyB8fCBzb3VyY2VzLmxlbmd0aCA9PT0gMDtcbiAgY29uc3QgcG9zaXRpb24gPSBnZXRQb3NpdGlvbnMoY29udGV4dCk7XG4gIGNvbnN0IHNlYXJjaENvbXBvbmVudHMgPSBbXTtcbiAgY29uc3Qgc2VhcmNoZXMgPSB7IHR5cGU6ICdhbGwnLCB0ZXJtOiBpbnB1dCwgcmVzdWx0czogW10gfTtcbiAgY29uc3QgbGFuZ3VhZ2UgPSBnZXRMYW5ndWFnZShjb250ZXh0KTtcbiAgY29uc3QgZm9jdXNQb2ludCA9XG4gICAgbG9jYXRpb25Bd2FyZSAmJiByZWZQb2ludD8ubGF0ICYmIHJlZlBvaW50Py5sb25cbiAgICAgID8ge1xuICAgICAgICAgIC8vIFJvdW5kIGNvb3JkaW5hdGVzIHRvIGFwcHJveCAxIGttLCBpbiBvcmRlciB0byBpbXByb3ZlIGNhY2hpbmdcbiAgICAgICAgICAnZm9jdXMucG9pbnQubGF0JzogcmVmUG9pbnQubGF0LnRvRml4ZWQoMyksXG4gICAgICAgICAgJ2ZvY3VzLnBvaW50Lmxvbic6IHJlZlBvaW50Lmxvbi50b0ZpeGVkKDMpLFxuICAgICAgICB9XG4gICAgICA6IHt9O1xuICBjb25zdCBtb2RlID0gdHJhbnNwb3J0TW9kZSA/IHRyYW5zcG9ydE1vZGUuc3BsaXQoJy0nKVsxXSA6IHVuZGVmaW5lZDtcbiAgaWYgKFxuICAgIHRhcmdldHMuaW5jbHVkZXMoJ0N1cnJlbnRQb3NpdGlvbicpICYmXG4gICAgcG9zaXRpb24uc3RhdHVzICE9PSAnZ2VvbG9jYXRpb24tbm90LXN1cHBvcnRlZCdcbiAgKSB7XG4gICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKGdldEN1cnJlbnRQb3NpdGlvbklmRW1wdHkoaW5wdXQsIHBvc2l0aW9uKSk7XG4gIH1cbiAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnTWFwUG9zaXRpb24nKSkge1xuICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChzZWxlY3RQb3NpdGlvbkZvbU1hcChpbnB1dCkpO1xuICB9XG4gIGlmICh0YXJnZXRzLmluY2x1ZGVzKCdGdXR1cmVSb3V0ZXMnKSkge1xuICAgIGNvbnN0IGl0ZW1zID0gZ2V0RnV0dXJlUm91dGVzKGNvbnRleHQpO1xuICAgIHNlYXJjaENvbXBvbmVudHMucHVzaCh0YWtlKGl0ZW1zLCAzKSk7XG4gIH1cbiAgaWYgKFxuICAgIHRhcmdldHMuaW5jbHVkZXMoJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnKSAmJlxuICAgIGhhc0Zhdm91cml0ZXMoc2VhcmNoQ29udGV4dClcbiAgKSB7XG4gICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKHNlbGVjdEZyb21Pd25Mb2NhdGlvbnMoaW5wdXQpKTtcbiAgfVxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdMb2NhdGlvbnMnKSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItZGVzdHJ1Y3R1cmluZ1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IGdlb2NvZGluZ1NlYXJjaFBhcmFtcztcbiAgICBpZiAoc291cmNlcy5pbmNsdWRlcygnRmF2b3VyaXRlJykpIHtcbiAgICAgIGNvbnN0IGZhdm91cml0ZUxvY2F0aW9ucyA9IGdldEZhdm91cml0ZUxvY2F0aW9ucyhjb250ZXh0KTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZmlsdGVyRmF2b3VyaXRlTG9jYXRpb25zKGZhdm91cml0ZUxvY2F0aW9ucywgaW5wdXQpLFxuICAgICAgKTtcbiAgICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdCYWNrJykpIHtcbiAgICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKGdldEJhY2tTdWdnZXN0aW9uKCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0RhdGFzb3VyY2UnKSkge1xuICAgICAgY29uc3QgZ2VvY29kaW5nTGF5ZXJzID0gWyd2ZW51ZScsICdhZGRyZXNzJywgJ3N0cmVldCddO1xuICAgICAgaWYgKHRhcmdldHMuaW5jbHVkZXMoJ1N0YXRpb25zJykpIHtcbiAgICAgICAgZ2VvY29kaW5nTGF5ZXJzLnB1c2goJ3N0YXRpb24nKTsgLy8gc2VhcmNoIHN0YXRpb25zIGZyb20gT1NNXG4gICAgICB9XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGdldEdlb2NvZGluZ1Jlc3VsdHMoXG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgc2VhcmNoUGFyYW1zLFxuICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgIGZvY3VzUG9pbnQsXG4gICAgICAgICAgZ2VvY29kaW5nU291cmNlcy5qb2luKCcsJyksXG4gICAgICAgICAgVVJMX1BFTElBUyxcbiAgICAgICAgICBtaW5pbWFsUmVnZXhwLFxuICAgICAgICAgIGdlb2NvZGluZ0xheWVycyxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0hpc3RvcnknKSkge1xuICAgICAgY29uc3QgbG9jYXRpb25IaXN0b3J5ID0gZ2V0T2xkU2VhcmNoZXMoY29udGV4dCwgJ2VuZHBvaW50Jyk7XG4gICAgICBjb25zdCBkcm9wTGF5ZXJzID0gWydiaWtlc3RhdGlvbiddO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnN0b3BMYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnJvdXRlTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5wYXJraW5nTGF5ZXJzKTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZmlsdGVyT2xkU2VhcmNoZXMobG9jYXRpb25IaXN0b3J5LCBpbnB1dCwgZHJvcExheWVycyksXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdQYXJraW5nQXJlYXMnKSkge1xuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0RhdGFzb3VyY2UnKSkge1xuICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gZ2VvY29kaW5nU2VhcmNoUGFyYW1zO1xuICAgICAgaWYgKGdlb2NvZGluZ1NpemUgJiYgZ2VvY29kaW5nU2l6ZSAhPT0gMTApIHtcbiAgICAgICAgc2VhcmNoUGFyYW1zLnNpemUgPSBnZW9jb2RpbmdTaXplO1xuICAgICAgfVxuICAgICAgY29uc3QgZ2VvY29kaW5nTGF5ZXJzID0gWydjYXJwYXJrJywgJ2Jpa2VwYXJrJ107XG4gICAgICBjb25zdCBmZWVkSWRzID0gcGFya2luZ0FyZWFTb3VyY2VzID8gcGFya2luZ0FyZWFTb3VyY2VzLmpvaW4oJywnKSA6IG51bGw7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGdldEdlb2NvZGluZ1Jlc3VsdHMoXG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgc2VhcmNoUGFyYW1zLFxuICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgIGZvY3VzUG9pbnQsXG4gICAgICAgICAgZmVlZElkcyxcbiAgICAgICAgICBVUkxfUEVMSUFTLFxuICAgICAgICAgIG1pbmltYWxSZWdleHAsXG4gICAgICAgICAgZ2VvY29kaW5nTGF5ZXJzLFxuICAgICAgICApLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgaWYgKGZpbHRlclJlc3VsdHMpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdIaXN0b3J5JykpIHtcbiAgICAgIGNvbnN0IGhpc3RvcnkgPSBnZXRPbGRTZWFyY2hlcyhjb250ZXh0KTtcbiAgICAgIGNvbnN0IGRyb3BMYXllcnMgPSBbJ2Jpa2VzdGF0aW9uJ107XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4uc3RvcExheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucm91dGVMYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLmxvY2F0aW9uTGF5ZXJzKTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChmaWx0ZXJPbGRTZWFyY2hlcyhoaXN0b3J5LCBpbnB1dCwgZHJvcExheWVycykpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHVzZVN0b3BzID0gdGFyZ2V0cy5pbmNsdWRlcygnU3RvcHMnKTtcbiAgY29uc3QgdXNlU3RhdGlvbnMgPSB0YXJnZXRzLmluY2x1ZGVzKCdTdGF0aW9ucycpO1xuXG4gIGlmIChhbGxUYXJnZXRzIHx8IHVzZVN0b3BzIHx8IHVzZVN0YXRpb25zKSB7XG4gICAgaWYgKHNvdXJjZXMuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKSB7XG4gICAgICBjb25zdCBmYXZvdXJpdGVTdG9wcyA9IGdldEZhdm91cml0ZVN0b3BzKGNvbnRleHQpO1xuICAgICAgbGV0IHN0b3BzQW5kU3RhdGlvbnM7XG4gICAgICBpZiAoZmF2b3VyaXRlU3RvcHMuZXZlcnkoc3RvcCA9PiBzdG9wLnR5cGUgPT09ICdzdGF0aW9uJykpIHtcbiAgICAgICAgc3RvcHNBbmRTdGF0aW9ucyA9IGdldFN0b3BzRnJvbUdlb2NvZGluZyhcbiAgICAgICAgICBmYXZvdXJpdGVTdG9wcyxcbiAgICAgICAgICBVUkxfUEVMSUFTX1BMQUNFLFxuICAgICAgICApLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgaWYgKGZpbHRlclJlc3VsdHMpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdG9wc0FuZFN0YXRpb25zID0gZ2V0U3RvcEFuZFN0YXRpb25zUXVlcnkoZmF2b3VyaXRlU3RvcHMpXG4gICAgICAgICAgLnRoZW4oZmF2b3VyaXRlcyA9PlxuICAgICAgICAgICAgZ2V0U3RvcHNGcm9tR2VvY29kaW5nKGZhdm91cml0ZXMsIFVSTF9QRUxJQVNfUExBQ0UpLFxuICAgICAgICAgIClcbiAgICAgICAgICAudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJSZXN1bHRzKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGZpbHRlckZhdm91cml0ZVN0b3BzKHN0b3BzQW5kU3RhdGlvbnMsIGlucHV0LCB1c2VTdG9wcywgdXNlU3RhdGlvbnMpLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnRGF0YXNvdXJjZScpKSB7XG4gICAgICBjb25zdCBnZW9jb2RpbmdMYXllcnMgPSBbXTtcbiAgICAgIGlmICh1c2VTdG9wcykge1xuICAgICAgICBnZW9jb2RpbmdMYXllcnMucHVzaCgnc3RvcCcpO1xuICAgICAgfVxuICAgICAgaWYgKHVzZVN0YXRpb25zKSB7XG4gICAgICAgIGdlb2NvZGluZ0xheWVycy5wdXNoKCdzdGF0aW9uJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPVxuICAgICAgICBnZW9jb2RpbmdTaXplICYmIGdlb2NvZGluZ1NpemUgIT09IDEwID8geyBzaXplOiBnZW9jb2RpbmdTaXplIH0gOiB7fTtcbiAgICAgIGlmIChnZW9jb2RpbmdTZWFyY2hQYXJhbXMgJiYgZ2VvY29kaW5nU2VhcmNoUGFyYW1zWydib3VuZGFyeS5jb3VudHJ5J10pIHtcbiAgICAgICAgc2VhcmNoUGFyYW1zWydib3VuZGFyeS5jb3VudHJ5J10gPVxuICAgICAgICAgIGdlb2NvZGluZ1NlYXJjaFBhcmFtc1snYm91bmRhcnkuY291bnRyeSddO1xuICAgICAgfVxuICAgICAgLy8gYSBsaXR0bGUgaGFjazogd2hlbiBzZWFyY2hpbmcgbG9jYXRpb24gZGF0YSwgYXV0b21hdGljYWxseSBkZWR1cGUgc3RvcHNcbiAgICAgIC8vIHRoaXMgY291bGQgYmUgYSBuZXcgZXhwbGljaXQgcHJvcFxuICAgICAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnTG9jYXRpb25zJykpIHtcbiAgICAgICAgc2VhcmNoUGFyYW1zLmRlZHVwZXN0b3BzID0gMTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZlZWRzID0gZmVlZElEcy5tYXAodiA9PiBgZ3RmcyR7dn1gKS5qb2luKCcsJyk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGdldEdlb2NvZGluZ1Jlc3VsdHMoXG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgc2VhcmNoUGFyYW1zLFxuICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgIGZvY3VzUG9pbnQsXG4gICAgICAgICAgZmVlZHMsXG4gICAgICAgICAgVVJMX1BFTElBUyxcbiAgICAgICAgICBtaW5pbWFsUmVnZXhwLFxuICAgICAgICAgIGdlb2NvZGluZ0xheWVycyxcbiAgICAgICAgKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXJSZXN1bHRzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnSGlzdG9yeScpKSB7XG4gICAgICBjb25zdCBzdG9wSGlzdG9yeSA9IGdldE9sZFNlYXJjaGVzKGNvbnRleHQpLmZpbHRlcihpdGVtID0+IHtcbiAgICAgICAgaWYgKGl0ZW0ucHJvcGVydGllcy5naWQpIHtcbiAgICAgICAgICByZXR1cm4gaXRlbS5wcm9wZXJ0aWVzLmdpZC5pbmNsdWRlcygnR1RGUzonKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZHJvcExheWVycyA9IFsnYmlrZXN0YXRpb24nXTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5yb3V0ZUxheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ubG9jYXRpb25MYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnBhcmtpbmdMYXllcnMpO1xuICAgICAgaWYgKCF1c2VTdG9wcykge1xuICAgICAgICBkcm9wTGF5ZXJzLnB1c2goJ3N0b3AnKTtcbiAgICAgIH1cbiAgICAgIGlmICghdXNlU3RhdGlvbnMpIHtcbiAgICAgICAgZHJvcExheWVycy5wdXNoKCdzdGF0aW9uJyk7XG4gICAgICB9XG4gICAgICBpZiAodHJhbnNwb3J0TW9kZSkge1xuICAgICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgICAgZmlsdGVyT2xkU2VhcmNoZXMoc3RvcEhpc3RvcnksIGlucHV0LCBkcm9wTGF5ZXJzKS50aGVuKHJlc3VsdCA9PlxuICAgICAgICAgICAgZmlsdGVyUmVzdWx0cyA/IGZpbHRlclJlc3VsdHMocmVzdWx0LCBtb2RlKSA6IHJlc3VsdCxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICAgIGZpbHRlck9sZFNlYXJjaGVzKHN0b3BIaXN0b3J5LCBpbnB1dCwgZHJvcExheWVycyksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ1JvdXRlcycpKSB7XG4gICAgaWYgKHNvdXJjZXMuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKSB7XG4gICAgICBjb25zdCBmYXZvdXJpdGVSb3V0ZXMgPSBnZXRGYXZvdXJpdGVSb3V0ZXMoY29udGV4dCk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGdldEZhdm91cml0ZVJvdXRlc1F1ZXJ5KGZhdm91cml0ZVJvdXRlcywgaW5wdXQsIG1vZGUsIHBhdGhPcHRzKS50aGVuKFxuICAgICAgICAgIHJlc3VsdCA9PlxuICAgICAgICAgICAgZmlsdGVyUmVzdWx0cyA/IGZpbHRlclJlc3VsdHMocmVzdWx0LCBtb2RlLCAnUm91dGVzJykgOiByZXN1bHQsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICBnZXRSb3V0ZXNRdWVyeShpbnB1dCwgZmVlZElEcywgdHJhbnNwb3J0TW9kZSwgcGF0aE9wdHMpLnRoZW4ocmVzdWx0ID0+XG4gICAgICAgIGZpbHRlclJlc3VsdHMgPyBmaWx0ZXJSZXN1bHRzKHJlc3VsdCwgbW9kZSwgJ1JvdXRlcycpIDogcmVzdWx0LFxuICAgICAgKSxcbiAgICApO1xuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0hpc3RvcnknKSkge1xuICAgICAgY29uc3Qgcm91dGVIaXN0b3J5ID0gZ2V0T2xkU2VhcmNoZXMoY29udGV4dCk7XG4gICAgICBjb25zdCBkcm9wTGF5ZXJzID0gWydiaWtlc3RhdGlvbiddO1xuICAgICAgaWYgKHRyYW5zcG9ydE1vZGUpIHtcbiAgICAgICAgZHJvcExheWVycy5wdXNoKC4uLnJvdXRlTGF5ZXJzLmZpbHRlcihpID0+ICEoaSA9PT0gdHJhbnNwb3J0TW9kZSkpKTtcbiAgICAgIH1cbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5zdG9wTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5sb2NhdGlvbkxheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucGFya2luZ0xheWVycyk7XG5cbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZmlsdGVyT2xkU2VhcmNoZXMocm91dGVIaXN0b3J5LCBpbnB1dCwgZHJvcExheWVycykudGhlbihyZXN1bHRzID0+XG4gICAgICAgICAgZmlsdGVyUmVzdWx0cyA/IGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSwgJ1JvdXRlcycpIDogcmVzdWx0cyxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ1ZlaGljbGVSZW50YWxTdGF0aW9ucycpKSB7XG4gICAgaWYgKHNvdXJjZXMuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKSB7XG4gICAgICBjb25zdCBmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbiA9XG4gICAgICAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucyhjb250ZXh0KTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zUXVlcnkoXG4gICAgICAgICAgZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24sXG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdEYXRhc291cmNlJykpIHtcbiAgICAgIGNvbnN0IGdlb2NvZGluZ0xheWVycyA9IFsnYmlrZXN0YXRpb24nXTtcbiAgICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9XG4gICAgICAgIGdlb2NvZGluZ1NpemUgJiYgZ2VvY29kaW5nU2l6ZSAhPT0gMTAgPyB7IHNpemU6IGdlb2NvZGluZ1NpemUgfSA6IHt9O1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBmb2N1c1BvaW50LFxuICAgICAgICAgIGNpdHlCaWtlTmV0d29ya3Muam9pbignLCcpLFxuICAgICAgICAgIFVSTF9QRUxJQVMsXG4gICAgICAgICAgbWluaW1hbFJlZ2V4cCxcbiAgICAgICAgICBnZW9jb2RpbmdMYXllcnMsXG4gICAgICAgICkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0cykge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSwgJ1ZlaGljbGVSZW50YWxTdGF0aW9ucycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdIaXN0b3J5JykpIHtcbiAgICAgIGNvbnN0IGhpc3RvcnkgPSBnZXRPbGRTZWFyY2hlcyhjb250ZXh0KTtcbiAgICAgIGNvbnN0IGRyb3BMYXllcnMgPSBbLi4uc3RvcExheWVyc107XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucm91dGVMYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLmxvY2F0aW9uTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5wYXJraW5nTGF5ZXJzKTtcblxuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKGZpbHRlck9sZFNlYXJjaGVzKGhpc3RvcnksIGlucHV0LCBkcm9wTGF5ZXJzKSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2VhcmNoUmVzdWx0c1Byb21pc2UgPSBQcm9taXNlLmFsbChzZWFyY2hDb21wb25lbnRzKVxuICAgIC50aGVuKGZsYXR0ZW4pXG4gICAgLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICBzZWFyY2hlcy5yZXN1bHRzID0gcmVzdWx0cztcbiAgICB9KVxuICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgc2VhcmNoZXMuZXJyb3IgPSBlcnI7XG4gICAgfSk7XG4gIHNlYXJjaFJlc3VsdHNQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgIGNhbGxiYWNrKHtcbiAgICAgIC4uLnNlYXJjaGVzLFxuICAgICAgcmVzdWx0czogc29ydFNlYXJjaFJlc3VsdHMobGluZVJlZ2V4cCwgc2VhcmNoZXMucmVzdWx0cywgaW5wdXQpLFxuICAgIH0pO1xuICB9KTtcbn1cblxuY29uc3QgZGVib3VuY2VkU2VhcmNoID0gZGVib3VuY2UoZ2V0U2VhcmNoUmVzdWx0cywgMzAwLCB7XG4gIGxlYWRpbmc6IHRydWUsXG59KTtcblxuZXhwb3J0IGNvbnN0IGV4ZWN1dGVTZWFyY2ggPSAoXG4gIHRhcmdldHMsXG4gIHNvdXJjZXMsXG4gIHRyYW5zcG9ydE1vZGUsXG4gIHNlYXJjaENvbnRleHQsXG4gIGZpbHRlclJlc3VsdHMsXG4gIGdlb2NvZGluZ1NpemUsXG4gIGRhdGEsXG4gIGNhbGxiYWNrLFxuICBwYXRoT3B0cyxcbiAgcmVmUG9pbnQsXG4pID0+IHtcbiAgY2FsbGJhY2sobnVsbCk7IC8vIFRoaXMgbWVhbnMgJ3dlIGFyZSBzZWFyY2hpbmcnXG4gIGRlYm91bmNlZFNlYXJjaChcbiAgICB0YXJnZXRzLFxuICAgIHNvdXJjZXMsXG4gICAgdHJhbnNwb3J0TW9kZSxcbiAgICBzZWFyY2hDb250ZXh0LFxuICAgIGZpbHRlclJlc3VsdHMsXG4gICAgZ2VvY29kaW5nU2l6ZSxcbiAgICBkYXRhLFxuICAgIGNhbGxiYWNrLFxuICAgIHBhdGhPcHRzLFxuICAgIHJlZlBvaW50LFxuICApO1xufTtcbiIsImltcG9ydCB1bmlxV2l0aCBmcm9tICdsb2Rhc2gvdW5pcVdpdGgnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoL2lzRXF1YWwnO1xuaW1wb3J0IG1lbW9pemUgZnJvbSAnbG9kYXNoL21lbW9pemUnO1xuaW1wb3J0IGVzY2FwZVJlZ0V4cCBmcm9tICdsb2Rhc2gvZXNjYXBlUmVnRXhwJztcbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnbG9kYXNoL2Nsb25lRGVlcCc7XG5cbi8qKlxuICogTG9jYXRpb24gcHJvcGVydGllcy5cbiAqIEB0eXBlZGVmIHtMb2NhdGlvblByb3BlcnRpZXN9XG4gKiBAcHJvcGVydHkge3N0cmluZ30gbGF5ZXIgU3VnZ2VzdGlvbiBsYXllci5cbiAqIEBwcm9wZXJ0eSB7bGF0fSBbbnVtYmVyXVxuICogQHByb3BlcnR5IHtsb259IFtudW1iZXJdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYWRkcmVzcyBBZGRyZXNzLlxuICovXG5cbi8qKlxuICogUmV0dXJucyBsb2NhbGFkbWluIChjaXR5IG5hbWUpIGZvciBzdWdnZXN0aW9uc1xuICpcbiAqIEBuYW1lIGdldExvY2FsYWRtaW5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdWdnZXN0aW9uIHN1Z2dlc3Rpb24ncyBwcm9wZXJ0aWVzIGZyb20gZ2VvY29kaW5nIG9yIGEgZmF2b3VyaXRlIHN0b3Avc3RhdGlvbi5cbiAqIEV4cGVjdHMgbGFzdCBwYXJ0IG9mIGFuIGFkZHJlc3MgKGFmdGVyICcsJykgdG8gY29udGFpbiB0aGUgY2l0eSBuYW1lIG9mIHRoZSBzdWdnZXN0aW9uIGxvY2F0aW9uLlxuICogQHJldHVybnMge1N0cmluZ30gIENpdHkgbmFtZSBvciBlbXB0eSBzdHJpbmdcbiAqL1xuY29uc3QgZ2V0TG9jYWxhZG1pbiA9IHN1Z2dlc3Rpb24gPT5cbiAgc3VnZ2VzdGlvbi5sb2NhbGFkbWluIHx8XG4gIHN1Z2dlc3Rpb24ubG9jYWxhZG1pbiB8fFxuICAoc3VnZ2VzdGlvbi5hZGRyZXNzICYmXG4gICAgc3VnZ2VzdGlvbi5hZGRyZXNzLmxhc3RJbmRleE9mKCcsJykgPCBzdWdnZXN0aW9uLmFkZHJlc3MubGVuZ3RoIC0gMiAmJlxuICAgIHN1Z2dlc3Rpb24uYWRkcmVzcy5zdWJzdHJpbmcoc3VnZ2VzdGlvbi5hZGRyZXNzLmxhc3RJbmRleE9mKCcsJykgKyAyKSkgfHxcbiAgJyc7XG5cbmV4cG9ydCBjb25zdCBnZXRTdG9wQ29kZSA9ICh7IGlkLCBjb2RlIH0pID0+IHtcbiAgaWYgKGNvZGUpIHtcbiAgICByZXR1cm4gY29kZTtcbiAgfVxuICBpZiAoXG4gICAgaWQgPT09IHVuZGVmaW5lZCB8fFxuICAgIHR5cGVvZiBpZC5pbmRleE9mID09PSAndW5kZWZpbmVkJyB8fFxuICAgIGlkLmluZGV4T2YoJyMnKSA9PT0gLTFcbiAgKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICAvLyBpZCBmcm9tIHBlbGlhc1xuICByZXR1cm4gaWQuc3Vic3RyaW5nKGlkLmluZGV4T2YoJyMnKSArIDEpO1xufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdEZhdm91cml0ZVBsYWNlTGFiZWwgPSAobmFtZSwgYWRkcmVzcykgPT4gW1xuICBuYW1lIHx8IChhZGRyZXNzICYmIGFkZHJlc3Muc3BsaXQoJywnKVswXSksXG4gIHR5cGVvZiBhZGRyZXNzID09PSAnc3RyaW5nJ1xuICAgID8gYWRkcmVzcy5yZXBsYWNlKG5ldyBSZWdFeHAoYCR7ZXNjYXBlUmVnRXhwKG5hbWUpfShbICxdfCQpK2ApLCAnJylcbiAgICA6ICcnLFxuXTtcblxuLyoqXG4gKiBGb3JtYXQgc3VnZ2VzdGlvbi1wYWlyIFtuYW1lLCBhZGRyZXNzXSBieSBgc3VnZ2VzdGlvbi5sYXllcmAuXG4gKlxuICogQG5hbWUgZ2V0TmFtZUxhYmVsXG4gKiBAcGFyYW0ge0xvY2F0aW9uUHJvcGVydGllc30gc3VnZ2VzdGlvblxuICogQHBhcmFtIHtib29sZWFufSBbcGxhaW5dXG4gKlxuICogQHJldHVybnMge0FycmF5LjxzdHJpbmc+fSBGb3JtYXR0ZWQgbGFiZWwuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXROYW1lTGFiZWwgPSBtZW1vaXplKFxuICAoc3VnZ2VzdGlvbiwgcGxhaW4gPSBmYWxzZSkgPT4ge1xuICAgIHN3aXRjaCAoc3VnZ2VzdGlvbi5sYXllcikge1xuICAgICAgY2FzZSAnY3VycmVudFBvc2l0aW9uJzpcbiAgICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uLmxhYmVsSWQsIHN1Z2dlc3Rpb24uYWRkcmVzc107XG4gICAgICBjYXNlICdzZWxlY3RGcm9tTWFwJzpcbiAgICAgIGNhc2UgJ293bkxvY2F0aW9ucyc6XG4gICAgICBjYXNlICdiYWNrJzpcbiAgICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uLmxhYmVsSWRdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlUGxhY2UnOlxuICAgICAgICByZXR1cm4gZm9ybWF0RmF2b3VyaXRlUGxhY2VMYWJlbChzdWdnZXN0aW9uLm5hbWUsIHN1Z2dlc3Rpb24uYWRkcmVzcyk7XG4gICAgICBjYXNlICdmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbic6XG4gICAgICBjYXNlICdiaWtlc3RhdGlvbic6XG4gICAgICAgIHJldHVybiBbc3VnZ2VzdGlvbi5uYW1lXTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVJvdXRlJzpcbiAgICAgIGNhc2UgJ3JvdXRlLUJVUyc6XG4gICAgICBjYXNlICdyb3V0ZS1UUkFNJzpcbiAgICAgIGNhc2UgJ3JvdXRlLVJBSUwnOlxuICAgICAgY2FzZSAncm91dGUtU1VCV0FZJzpcbiAgICAgIGNhc2UgJ3JvdXRlLUZFUlJZJzpcbiAgICAgIGNhc2UgJ3JvdXRlLUZVTklDVUxBUic6XG4gICAgICBjYXNlICdyb3V0ZS1BSVJQTEFORSc6XG4gICAgICAgIHJldHVybiAhcGxhaW4gJiYgc3VnZ2VzdGlvbi5zaG9ydE5hbWVcbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5ndGZzSWQsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubW9kZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmxvbmdOYW1lLFxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogW1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uLnNob3J0TmFtZSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5sb25nTmFtZSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5hZ2VuY3kgPyBzdWdnZXN0aW9uLmFnZW5jeS5uYW1lIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgXTtcbiAgICAgIGNhc2UgJ3ZlbnVlJzpcbiAgICAgIGNhc2UgJ2FkZHJlc3MnOlxuICAgICAgY2FzZSAnc3RyZWV0JzpcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBzdWdnZXN0aW9uLm5hbWUsXG4gICAgICAgICAgc3VnZ2VzdGlvbi5sYWJlbC5yZXBsYWNlKFxuICAgICAgICAgICAgbmV3IFJlZ0V4cChgJHtlc2NhcGVSZWdFeHAoc3VnZ2VzdGlvbi5uYW1lKX0oLCk/KCApP2ApLFxuICAgICAgICAgICAgJycsXG4gICAgICAgICAgKSxcbiAgICAgICAgXTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVN0b3AnOlxuICAgICAgY2FzZSAnc3RvcCc6XG4gICAgICAgIHJldHVybiBwbGFpblxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uLm5hbWUgfHxcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLmxhYmVsIHx8XG4gICAgICAgICAgICAgICAgKHN1Z2dlc3Rpb24uYWRkcmVzcyAmJiBzdWdnZXN0aW9uLmFkZHJlc3Muc3BsaXQoJywnKVswXSksXG4gICAgICAgICAgICAgIGdldExvY2FsYWRtaW4oc3VnZ2VzdGlvbiksXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiBbXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubmFtZSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5pZCxcbiAgICAgICAgICAgICAgZ2V0U3RvcENvZGUoc3VnZ2VzdGlvbiksXG4gICAgICAgICAgICAgIGdldExvY2FsYWRtaW4oc3VnZ2VzdGlvbiksXG4gICAgICAgICAgICBdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlU3RhdGlvbic6XG4gICAgICBjYXNlICdzdGF0aW9uJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lIHx8XG4gICAgICAgICAgICBzdWdnZXN0aW9uLmxhYmVsIHx8XG4gICAgICAgICAgICAoc3VnZ2VzdGlvbi5hZGRyZXNzICYmIHN1Z2dlc3Rpb24uYWRkcmVzcy5zcGxpdCgnLCcpWzBdKSxcbiAgICAgICAgICBnZXRMb2NhbGFkbWluKHN1Z2dlc3Rpb24pLFxuICAgICAgICBdO1xuICAgIH1cbiAgfSxcbiAgKGl0ZW0sIHBsYWluKSA9PiB7XG4gICAgY29uc3QgaSA9IGNsb25lRGVlcChpdGVtKTtcbiAgICBpLnBsYWluID0gcGxhaW47XG4gICAgcmV0dXJuIGk7XG4gIH0sXG4pO1xuXG4vKipcbiAqIENoZWNrcyB0aGF0IGZlYXR1cmVzIGFyZSB1bmlxdWUgYnkgbGFiZWxcbiAqXG4gKiBAbmFtZSB1bmlxQnlMYWJlbFxuICogQHBhcmFtIHtBcnJheX0gZmVhdHVyZXMgQXJyYXkgb2YgZmVhdHVyZXNcbiAqIEByZXR1cm5zIHtBcnJheX0gIEFycmF5IG9mIHVuaXF1ZSBmZWF0dXJlc1xuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLnVuaXFCeUxhYmVsKGZlYXR1cmVzKTtcbiAqIC8vPSBBcnJheSgyKVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1bmlxQnlMYWJlbChmZWF0dXJlcykge1xuICByZXR1cm4gdW5pcVdpdGgoZmVhdHVyZXMsIChmZWF0MSwgZmVhdDIpID0+IHtcbiAgICBpZiAoZmVhdDEudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJyB8fCBmZWF0Mi50eXBlID09PSAnRnV0dXJlUm91dGUnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICBpc0VxdWFsKGdldE5hbWVMYWJlbChmZWF0MS5wcm9wZXJ0aWVzKSwgZ2V0TmFtZUxhYmVsKGZlYXQyLnByb3BlcnRpZXMpKSAmJlxuICAgICAgZmVhdDEucHJvcGVydGllcy5sYXllciA9PT0gZmVhdDIucHJvcGVydGllcy5sYXllclxuICAgICk7XG4gIH0pO1xufVxuIiwiY29uc3QgdHJhbnNsYXRpb25zID0ge1xuICBkZToge1xuICAgIGFkZHJlc3M6ICdBZHJlc3NlJyxcbiAgICAnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcyc6ICdBZHJlc3MsIE9ydCBvciBHZXNjaMOkZnQnLFxuICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdGw7xnZSBad2lzY2hlbnppZWwgaGluenUnLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6ICdTZXQgc3RvcCBkdXJhdGlvbiBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgJ0Nsb3NlIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgJ09wZW4gc3RvcCBkdXJhdGlvbiBzZWxlY3RvciBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICBhaXJwbGFuZTogJ0ZsdWcnLFxuICAgIGFycml2YWw6ICdBbmt1bmZ0JyxcbiAgICBiYWNrOiAnWnVyw7xjaycsXG4gICAgYmlrZXJlbnRhbHN0YXRpb246ICdMZWlocmFkLVN0YXRpb24nLFxuICAgIGJ1czogJ0J1cycsXG4gICAgY2FuY2VsOiAnQWJicmVjaGVuJyxcbiAgICAnY2xlYXItYnV0dG9uLWxhYmVsJzogJ0zDtnNjaGVuJyxcbiAgICAnY2xlYXItc2VhcmNoLWhpc3RvcnknOiAnU3VjaGhpc3RvcmllIGzDtnNjaGVuJyxcbiAgICBjdXJyZW50cG9zaXRpb246ICdBa3R1ZWxsZSBQb3NpdGlvbicsXG4gICAgZGVsZXRlOiAnTMO2c2NoZW4nLFxuICAgICdkZWxldGUtb2xkLXNlYXJjaGVzLWhlYWRlcic6ICdXb2xsZW4gU2llIGRpZSBTdWNoLUhpc3RvcmllIGzDtnNjaGVuPycsXG4gICAgZGVwYXJ0dXJlOiAnQWJmYWhydCcsXG4gICAgZGVzdGluYXRpb246ICdaaWVsJyxcbiAgICAnZ2l2ZS1vcmlnaW4nOiAnU3RhcnQgZWluZ2ViZW4uJyxcbiAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdaaWVsIGVpbmdlYmVuLicsXG4gICAgZmF2b3VyaXRlOiAnRmF2b3JpdGVuJyxcbiAgICBmZXJyeTogJ0bDpGhyZScsXG4gICAgJ2Z1dHVyZS1yb3V0ZSc6ICdadWvDvG5mdGlnZSBWZXJiaW5kdW5nJyxcbiAgICBvcmlnaW46ICdTdGFydCcsXG4gICAgJ29yaWdpbi1zdG9wLW5lYXIteW91JzogJ1N0YXJ0JyxcbiAgICBvd25sb2NhdGlvbnM6ICdFaWdlbmUgRmF2b3JpdGVuJyxcbiAgICBsb2FkaW5nOiAnTGFkZW4uLi4nLFxuICAgICdtaW51dGUtc2hvcnQnOiAnbWluJyxcbiAgICByYWlsOiAnWnVnJyxcbiAgICBzZWFyY2g6ICdTdWNoZScsXG4gICAgJ3NlYXJjaC1hZGRyZXNzLW9yLXBsYWNlJzogJ1N1Y2hlIGFuaGFuZCB2b24gQWRyZXNzZSBvZGVyIE9ydHNhbmdhYmUnLFxuICAgICdzZWFyY2gtYnV0dG9uLWxhYmVsJzogJ1N1Y2hlJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uJzogJ1N1Y2hlIFppZWxvcnQsIExpbmllIG9yIEhhbHRlc3RlbGxlJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLWluZGV4JzogJ1ppZWxvcnQgZWluZ2ViZW4nLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24tcmVzdWx0cy1idXQtbm8tc2VhcmNoJzpcbiAgICAgICdFcmdlYm5pc3NlIGluIOKAnFppZWxvcnTigJ0tUmVpdGVyIGFuemVpZ2VuJyxcbiAgICAnc2VhcmNoLW5vLXJlc3VsdHMnOiAnS2VpbiBPcnQgZ2VmdW5kZW4uJyxcbiAgICAnc2VhcmNoLW9yaWdpbic6ICdTdWNoZSBTdGFydG9ydCwgTGluaWUgb2RlciBIYWx0ZXN0ZWxsZScsXG4gICAgJ3NlYXJjaC1vcmlnaW4taW5kZXgnOiAnU3RhcnRvcnQgZWluZ2ViZW4nLFxuICAgICdzZWFyY2gtcG9zaXRpb24nOiAnU3RhbmRvcnQgZXJtaXR0ZWxuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsJzogJ1ZlbnVlLCBwbGFjZSBhbmQgc3RvcHNlYXJjaC4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLWRlc2t0b3AnOlxuICAgICAgJ05hdmlnYXRlIGxpc3Qgd2l0aCBhcnJvdyBrZXlzIGFuZCBzZWxlY3Qgd2l0aCBlbnRlciBrZXkuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1tb2JpbGUnOlxuICAgICAgJ0VudGVyIHRoZSBsb2NhdGlvbiBhbmQgbmF2aWdhdGUgaW4gdGhlIGxpc3QgYnkgc3dpcGluZy4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW92ZS10by1kZXN0aW5hdGlvbic6XG4gICAgICAnQWZ0ZXIgc2VsZWN0aW5nIHRoZSBzdGFydGluZyBsb2NhdGlvbiB5b3UgYXJlIGF1dG9tYXRpY2FsbHkgbW92ZWQgdG8gdGhlIGRlc3RpbmF0aW9uIGZpZWxkLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nOiAnVGhlcmUgaXMge3tjb3VudH19IHN1Z2dlc3Rpb24gYXZhaWxhYmxlJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbl9wbHVyYWwnOlxuICAgICAgJ1RoZXJlIGFyZSB7e2NvdW50fX0gc3VnZ2VzdGlvbnMgYXZhaWxhYmxlJyxcbiAgICAnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbic6ICdBa3R1ZWxsZSBBdXN3YWhsOiB7e3NlbGVjdGlvbn19JyxcbiAgICBzdHJlZXQ6ICdTdHJhw59lJyxcbiAgICBzdWJ3YXk6ICdVLUJhaG4nLFxuICAgIHN0YXRpb246ICdTdGF0aW9uJyxcbiAgICBzdG9wOiAnSGFsdGVzdGVsbGUnLFxuICAgICdzdG9wLW5lYXIteW91JzogJ1N1Y2hlIEhhbHRlc3RlbGxlbiB1bmQgTGluaWVuIGluIGRlciBOw6RoZScsXG4gICAgJ3N0b3AtbmVhci15b3UtYnVzJzogJ1N1Y2hlIEJ1c2xpbmllbiBvciBIYWx0ZXN0ZWxsZW4nLFxuICAgICdzdG9wLW5lYXIteW91LWNpdHliaWtlJzogJ1N1Y2hlIExlaWhyYWQtU3RhdGlvbmVuJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1yYWlsJzogJ1N1Y2hlIFp1Z3ZlcmJpbmR1bmdlbiBvZGVyIEJhaG5ow7ZmZScsXG4gICAgJ3N0b3AtbmVhci15b3Utc3Vid2F5JzogJ1N1Y2hlIFUtQmFobi1MaW5pZW4gb2RlciBIYWx0ZXN0ZWxsZW4nLFxuICAgICdzdG9wLW5lYXIteW91LXRyYW0nOiAnU3VjaGUgU3RhZHRiYWhuLUhhbHRlc3RlbGxlbi1TdWNoZScsXG4gICAgJ3RvZGF5LWF0JzogJ0hldXRlIHVtJyxcbiAgICAndG9tb3Jyb3ctYXQnOiAnTW9yZ2VuIHVtJyxcbiAgICB0cmFtOiAnU3RyYcOfZW5iYWhuJyxcbiAgICAndXNlLW93bi1wb3NpdGlvbic6ICdCZW51dHplIGFrdHVlbGxlbiBTdGFuZG9ydCcsXG4gICAgJ3NlbGVjdC1mcm9tLW1hcCc6ICdXw6RobGUgUG9zaXRpb24gYW5oYW5kIEthcnRlJyxcbiAgICAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucyc6ICdBdXMgZWlnZW5lbiBGYXZvcml0ZW4gYXVzd8OkaGxlbicsXG4gICAgdmVudWU6ICdWZW51ZScsXG4gICAgJ3ZpYS1wb2ludCc6ICdad2lzY2hlbnppZWwnLFxuICAgIHdoZXJlOiAnV29oaW4/JyxcbiAgICBwbGFjZTogJ09ydCcsXG4gIH0sXG4gIGVuOiB7XG4gICAgYWRkcmVzczogJ0FkZHJlc3MnLFxuICAgICdhZGRyZXNzLXBsYWNlLW9yLWJ1c2luZXNzJzogJ0FkZHJlc3MsIHBsYWNlIG9yIGJ1c2luZXNzJyxcbiAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnQWRkIHZpYSBwb2ludCcsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzogJ1NldCBzdG9wIGR1cmF0aW9uIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAnQ2xvc2Ugc3RvcCBkdXJhdGlvbiBzZWxlY3RvciBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAnT3BlbiBzdG9wIGR1cmF0aW9uIHNlbGVjdG9yIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgIGFpcnBsYW5lOiAnRmxpZ2h0JyxcbiAgICBhcnJpdmFsOiAnQXJyaXZhbCcsXG4gICAgYmFjazogJ0JhY2snLFxuICAgIGJpa2VwYXJrOiAnUGFyayAmIFJpZGUgZm9yIGJpa2VzJyxcbiAgICBiaWtlcmVudGFsc3RhdGlvbjogJ0Jpa2Ugc3RhdGlvbicsXG4gICAgYnVzOiAnYnVzJyxcbiAgICBjYW5jZWw6ICdDYW5jZWwnLFxuICAgIGNhcnBhcms6ICdQYXJrICYgUmlkZScsXG4gICAgJ2NsZWFyLWJ1dHRvbi1sYWJlbCc6ICdDbGVhcicsXG4gICAgJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JzogJ0NsZWFyIHNlYXJjaCBoaXN0b3J5JyxcbiAgICBjdXJyZW50cG9zaXRpb246ICdDdXJyZW50IHBvc2l0aW9uJyxcbiAgICBkZWxldGU6ICdEZWxldGUnLFxuICAgICdkZWxldGUtb2xkLXNlYXJjaGVzLWhlYWRlcic6ICdEbyB5b3Ugd2FudCB0byBjbGVhciB0aGUgc2VhcmNoIGhpc3Rvcnk/JyxcbiAgICBkZXBhcnR1cmU6ICdEZXBhcnR1cmUnLFxuICAgIGRlc3RpbmF0aW9uOiAnRGVzdGluYXRpb24nLFxuICAgICdnaXZlLW9yaWdpbic6ICdFbnRlciB5b3VyIG9yaWdpbi4nLFxuICAgICdnaXZlLWRlc3RpbmF0aW9uJzogJ0VudGVyIHlvdXIgZGVzdGluYXRpb24nLFxuICAgIGZhdm91cml0ZTogJ0Zhdm91cml0ZScsXG4gICAgZmVycnk6ICdGZXJyeScsXG4gICAgJ2Z1dHVyZS1yb3V0ZSc6ICdGdXR1cmUgcm91dGUnLFxuICAgIG9yaWdpbjogJ1N0YXJ0JyxcbiAgICAnb3JpZ2luLXN0b3AtbmVhci15b3UnOiAnU3RhcnQnLFxuICAgIG93bmxvY2F0aW9uczogJ093biBsb2NhdGlvbnMnLFxuICAgIGxvYWRpbmc6ICdMb2FkaW5nLi4uJyxcbiAgICAnbWludXRlLXNob3J0JzogJ20nLFxuICAgIHBsYXRmb3JtOiAnUGxhdGZvcm0nLFxuICAgIHJhaWw6ICdUcmFpbicsXG4gICAgcmVxdWlyZWQ6ICdyZXF1aXJlZCBmaWVsZCcsXG4gICAgc2VhcmNoOiAnU2VhcmNoJyxcbiAgICAnc2VhcmNoLWFkZHJlc3Mtb3ItcGxhY2UnOiAnU2VhcmNoIGJ5IGFkZHJlc3Mgb3IgcGxhY2UgbmFtZScsXG4gICAgJ3NlYXJjaC1idXR0b24tbGFiZWwnOiAnU2VhcmNoJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uJzogJ1NlYXJjaCBkZXN0aW5hdGlvbiwgcm91dGUgb3Igc3RvcCcsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1pbmRleCc6ICdFbnRlciBkZXN0aW5hdGlvbicsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1yZXN1bHRzLWJ1dC1uby1zZWFyY2gnOlxuICAgICAgJ1ZpZXcgcmVzdWx0cyBpbiB0aGUgYWRqYWNlbnQg4oCcRGVzdGluYXRpb27igJ0gdGFiJyxcbiAgICAnc2VhcmNoLW5vLXJlc3VsdHMnOiAnTm8gbG9jYXRpb24nLFxuICAgICdzZWFyY2gtb3JpZ2luJzogJ1NlYXJjaCBvcmlnaW4sIHJvdXRlIG9yIHN0b3AnLFxuICAgICdzZWFyY2gtb3JpZ2luLWluZGV4JzogJ0VudGVyIG9yaWdpbicsXG4gICAgJ3NlYXJjaC1wb3NpdGlvbic6ICdEZXRlY3QgbG9jYXRpb24nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwnOiAnVmVudWUsIHBsYWNlIGFuZCBzdG9wc2VhcmNoLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtZGVza3RvcCc6XG4gICAgICAnTmF2aWdhdGUgbGlzdCB3aXRoIGFycm93IGtleXMgYW5kIHNlbGVjdCB3aXRoIGVudGVyIGtleS4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLW1vYmlsZSc6XG4gICAgICAnRW50ZXIgdGhlIGxvY2F0aW9uIGFuZCBuYXZpZ2F0ZSBpbiB0aGUgbGlzdCBieSBzd2lwaW5nLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb3ZlLXRvLWRlc3RpbmF0aW9uJzpcbiAgICAgICdBZnRlciBzZWxlY3RpbmcgdGhlIHN0YXJ0aW5nIGxvY2F0aW9uIHlvdSBhcmUgYXV0b21hdGljYWxseSBtb3ZlZCB0byB0aGUgZGVzdGluYXRpb24gZmllbGQuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbic6ICdUaGVyZSBpcyB7e2NvdW50fX0gc3VnZ2VzdGlvbiBhdmFpbGFibGUnLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuX3BsdXJhbCc6XG4gICAgICAnVGhlcmUgYXJlIHt7Y291bnR9fSBzdWdnZXN0aW9ucyBhdmFpbGFibGUnLFxuICAgICdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJzogJ0N1cnJlbnQgc2VsZWN0aW9uOiB7e3NlbGVjdGlvbn19JyxcbiAgICBzdHJlZXQ6ICdTdHJlZXQnLFxuICAgIHN1YndheTogJ01ldHJvJyxcbiAgICBzdGF0aW9uOiAnU3RhdGlvbicsXG4gICAgc3RvcDogJ1N0b3AnLFxuICAgICdzdG9wLW5lYXIteW91JzogJ1NlYXJjaCBzdG9wcyBhbmQgcm91dGVzJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1haXJwbGFuZSc6ICdTZWFyY2ggZmxpZ2h0cyBvciBhaXJwb3J0cycsXG4gICAgJ3N0b3AtbmVhci15b3UtYnVzJzogJ1NlYXJjaCBidXMgcm91dGVzIG9yIHN0b3BzJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1jaXR5YmlrZSc6ICdTZWFyY2ggY2l0eSBiaWtlIHN0YXRpb25zJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1yYWlsJzogJ1NlYXJjaCB0cmFpbiByb3V0ZXMgb3Igc3RhdGlvbnMnLFxuICAgICdzdG9wLW5lYXIteW91LXN1YndheSc6ICdTZWFyY2ggbWV0cm8gcm91dGVzIG9yIHN0YXRpb25zICcsXG4gICAgJ3N0b3AtbmVhci15b3UtdHJhbSc6ICdTZWFyY2ggdHJhbSByb3V0ZXMgb3Igc3RvcHMnLFxuICAgICdzdG9wLXJvdXRlLXN0YXRpb24nOiAnQnVzIGFuZCBzdG9wIHNlYXJjaCcsXG4gICAgJ3RvZGF5LWF0JzogJ3RvZGF5IGF0JyxcbiAgICAndG9tb3Jyb3ctYXQnOiAndG9tb3Jyb3cgYXQnLFxuICAgIHRyYW06ICdUcmFtJyxcbiAgICB0cmFjazogJ1RyYWNrJyxcbiAgICAndXNlLW93bi1wb3NpdGlvbic6ICdVc2UgY3VycmVudCBsb2NhdGlvbicsXG4gICAgJ3NlbGVjdC1mcm9tLW1hcCc6ICdTZWxlY3QgcG9zaXRpb24gZnJvbSBtYXAnLFxuICAgICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJzogJ1NlbGVjdCBmcm9tIG93biBsb2NhdGlvbnMnLFxuICAgIHZlbnVlOiAnVmVudWUnLFxuICAgICd2aWEtcG9pbnQnOiAnVmlhIHBvaW50JyxcbiAgICB3aGVyZTogJ1doZXJlIHRvPycsXG4gICAgcGxhY2U6ICdMb2NhdGlvbicsXG4gIH0sXG4gIGZpOiB7XG4gICAgYWRkcmVzczogJ09zb2l0ZScsXG4gICAgJ2FkZHJlc3MtcGxhY2Utb3ItYnVzaW5lc3MnOiAnT3NvaXRlLCBwYWlra2EgdGFpIHlyaXR5cycsXG4gICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0xpc8Okw6QgdsOkbGlwaXN0ZScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzpcbiAgICAgICdBc2V0YSB2w6RsaXBpc3RlZWxsZSB7e2luZGV4fX0gcHlzw6RoZHlrc2VuIGtlc3RvJyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgJ0F2YWEgdsOkbGlwaXN0ZWVuIHt7aW5kZXh9fSBweXPDpGhkeWtzZW4ga2VzdG8gdmFsaXRzaW4nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICdTdWxqZSB2w6RsaXBpc3RlZW4ge3tpbmRleH19IHB5c8OkaGR5a3NlbiBrZXN0byB2YWxpdHNpbicsXG4gICAgYWlycGxhbmU6ICdMZW50b2tvbmUnLFxuICAgIGFycml2YWw6ICdQZXJpbGzDpCcsXG4gICAgYmFjazogJ1Rha2Fpc2luJyxcbiAgICB2ZWhpY2xlcmVudGFsc3RhdGlvbjogJ1B5w7Zyw6Rhc2VtYScsXG4gICAgYmlrZXBhcms6ICdMaWl0eW50w6RweXPDpGvDtmludGknLFxuICAgIGJ1czogJ2J1c3NpJyxcbiAgICBjYW5jZWw6ICdQZXJ1dXRhJyxcbiAgICBjYXJwYXJrOiAnTGlpdHludMOkcHlzw6Rrw7ZpbnRpJyxcbiAgICAnY2xlYXItYnV0dG9uLWxhYmVsJzogJ1R5aGplbm7DpCcsXG4gICAgJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JzogJ1R5aGplbm7DpCBoYWt1aGlzdG9yaWEnLFxuICAgIGN1cnJlbnRwb3NpdGlvbjogJ1TDpG3DpG5oZXRraW5lbiBzaWphaW50aScsXG4gICAgZGVsZXRlOiAnUG9pc3RhJyxcbiAgICAnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInOiAnSGFsdWF0a28gdHloamVudMOkw6QgaGFrdWhpc3Rvcmlhbj8nLFxuICAgIGRlcGFydHVyZTogJ0zDpGh0w7ZhaWthJyxcbiAgICBkZXN0aW5hdGlvbjogJ03DpMOkcsOkbnDDpMOkJyxcbiAgICBmYXZvdXJpdGU6ICdTdW9zaWtraScsXG4gICAgZmVycnk6ICdMYXV0dGEnLFxuICAgICdmdXR1cmUtcm91dGUnOiAnVHVsZXZhIHJlaXR0aScsXG4gICAgJ2dpdmUtb3JpZ2luJzogJ0zDpGh0w7ZwYWlra2EnLFxuICAgICdnaXZlLWRlc3RpbmF0aW9uJzogJ03DpMOkcsOkbnDDpMOkJyxcbiAgICBvcmlnaW46ICdMw6RodMO2cGFpa2thJyxcbiAgICAnb3JpZ2luLXN0b3AtbmVhci15b3UnOiAnTMOkaHTDtnBhaWtrYScsXG4gICAgb3dubG9jYXRpb25zOiAnT21hdCBwYWlrYXQnLFxuICAgIGxvYWRpbmc6ICdMYWRhdGFhbi4uLicsXG4gICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4nLFxuICAgIHBsYXRmb3JtOiAnTGFpdHVyaScsXG4gICAgcmFpbDogJ0p1bmEnLFxuICAgIHJlcXVpcmVkOiAncGFrb2xsaW5lbiBrZW50dMOkJyxcbiAgICBzZWFyY2g6ICdFdHNpJyxcbiAgICAnc2VhcmNoLWFkZHJlc3Mtb3ItcGxhY2UnOiAnSGFlIG9zb2l0dGVlbGxhIHRhaSBwYWlrYW4gbmltZWxsw6QnLFxuICAgICdzZWFyY2gtYnV0dG9uLWxhYmVsJzogJ0hhZScsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbic6ICdIYWUgbcOkw6Ryw6RucMOkw6R0w6QsIGxpbmphYSB0YWkgcHlzw6Rra2nDpCcsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1pbmRleCc6ICdTecO2dMOkIG3DpMOkcsOkbnDDpMOkJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLXJlc3VsdHMtYnV0LW5vLXNlYXJjaCc6XG4gICAgICAnS2F0c28gdHVsb2tzZXQgdmllcmVpc2VsdMOkIE3DpMOkcsOkbnDDpMOkLXbDpGxpbGVoZGVsdMOkJyxcbiAgICAnc2VhcmNoLW5vLXJlc3VsdHMnOiAnRWkgdHVsb2tzaWEnLFxuICAgICdzZWFyY2gtb3JpZ2luJzogJ0hhZSBsw6RodMO2cGFpa2thYSwgbGluamFhIHRhaSBweXPDpGtracOkJyxcbiAgICAnc2VhcmNoLW9yaWdpbi1pbmRleCc6ICdTecO2dMOkIGzDpGh0w7ZwYWlra2EnLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwnOiAnUGFpa2thLCBsaW5qYSBqYSBweXPDpGtraWhha3UuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1kZXNrdG9wJzpcbiAgICAgICdOYXZpZ29pIGxpc3Rhc3NhIG51b2xpbsOkcHDDpGltaWxsw6QgamEgdmFsaXRzZSBlbnRlcmlsbMOkLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtbW9iaWxlJzpcbiAgICAgICdTecO2dMOkIHNpamFpbnRpIGphIG5hdmlnb2kgbGlzdGFzc2EgcHl5aGvDpGlzZW3DpGxsw6QuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLW1vdmUtdG8tZGVzdGluYXRpb24nOlxuICAgICAgJ1ZhbGl0dHVhc2kgbMOkaHTDtnBhaWthbiBzaWlycnl0w6TDpG4gc3VvcmFhbiBtw6TDpHLDpG5ww6TDpC1rZW50dMOkw6RuLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nOiAnIEzDtnlkZXR0aWluIHt7Y291bnR9fSBlaGRvdHVzJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbl9wbHVyYWwnOiAnIEzDtnlkZXR0aWluIHt7Y291bnR9fSBlaGRvdHVzdGEnLFxuICAgICdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJzogJ1TDpG3DpG5oZXRraW5lbiB2YWxpbnRhOiB7e3NlbGVjdGlvbn19JyxcbiAgICAnc2VhcmNoLXBvc2l0aW9uJzogJ1BhaWthbm5hJyxcbiAgICBzdHJlZXQ6ICdLYXR1JyxcbiAgICBzdWJ3YXk6ICdNZXRybycsXG4gICAgc3RhdGlvbjogJ0FzZW1hJyxcbiAgICBzdG9wOiAnUHlzw6Rra2knLFxuICAgICdzdG9wLW5lYXIteW91JzogJ0xpbmphLCBweXPDpGtraSB0YWkgYXNlbWEnLFxuICAgICdzdG9wLW5lYXIteW91LWFpcnBsYW5lJzogJ0hhZSBsZW50b2phIHRhaSBsZW50b2FzZW1hYScsXG4gICAgJ3N0b3AtbmVhci15b3UtYnVzJzogJ0hhZSBidXNzaWxpbmphYSB0YWkgcHlzw6Rra2nDpCcsXG4gICAgJ3N0b3AtbmVhci15b3UtY2l0eWJpa2UnOiAnSGFlIGthdXB1bmtpcHnDtnLDpGFzZW1hYScsXG4gICAgJ3N0b3AtbmVhci15b3UtcmFpbCc6ICdIYWUgbMOkaGlqdW5hYSB0YWkgYXNlbWFhJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1zdWJ3YXknOiAnSGFlIG1ldHJvbGluamFhIHRhaSBhc2VtYWEnLFxuICAgICdzdG9wLW5lYXIteW91LXRyYW0nOiAnSGFlIHJhaXRpb2xpbmphYSB0YWkgcHlzw6Rra2nDpCcsXG4gICAgJ3N0b3Atcm91dGUtc3RhdGlvbic6ICdMaW5qYS0gamEgcHlzw6Rra2loYWt1JyxcbiAgICAndG9kYXktYXQnOiAndMOkbsOkw6RuIGtsbycsXG4gICAgJ3RvbW9ycm93LWF0JzogJ2h1b21lbm5hIGtsbycsXG4gICAgdHJhbTogJ1JhaXRpb3ZhdW51JyxcbiAgICB0cmFjazogJ1JhaWRlJyxcbiAgICAndXNlLW93bi1wb3NpdGlvbic6ICdLw6R5dMOkIG55a3lpc3TDpCBzaWphaW50aWEnLFxuICAgICdzZWxlY3QtZnJvbS1tYXAnOiAnVmFsaXRzZSBzaWphaW50aSBrYXJ0YWx0YScsXG4gICAgJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnOiAnVmFsaXRzZSBvbWlzdGEgcGFpa29pc3RhJyxcbiAgICB2ZW51ZTogJ1BhaWtrYScsXG4gICAgJ3ZpYS1wb2ludCc6ICdWw6RsaXBpc3RlJyxcbiAgICB3aGVyZTogJ01pbm5lIG1lbm7DpMOkbj8nLFxuICAgIHBsYWNlOiAnUGFpa2thJyxcbiAgfSxcbiAgcGw6IHtcbiAgICBhZGRyZXNzOiAnQWRyZXMnLFxuICAgICdhZGRyZXNzLXBsYWNlLW9yLWJ1c2luZXNzJzogJ0FkcmVzLCBtaWVqc2NlIGx1YiBmaXJtYScsXG4gICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0RvZGFqIHB1bmt0IHBvxZtyZWRuaScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzpcbiAgICAgICdXeWJpZXJ6IGN6YXMgcG9zdG9qdSBkbGEgcHVua3R1IHt7aW5kZXh9fScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICdaYW1rbmlqIHd5Ym9ybmlrIGN6YXN1IHBvc3RvanUgdyBwdW5rY2llIHt7aW5kZXh9fScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgJ090d8Ozcnogd3lib3JuaWsgY3phc3UgcG9zdG9qdSB3IHB1bmtjaWUge3tpbmRleH19JyxcbiAgICBhaXJwbGFuZTogJ0xvdCcsXG4gICAgYXJyaXZhbDogJ1ByenlqYXpkJyxcbiAgICBiYWNrOiAnV3LDs8SHJyxcbiAgICBiaWtlcGFyazogJ1Bhcmt1aiBpIEplZMW6IGRsYSByb3dlcsOzdycsXG4gICAgYmlrZXJlbnRhbHN0YXRpb246ICdTdGFjamEgcm93ZXJvd2EnLFxuICAgIGJ1czogJ2F1dG9idXMnLFxuICAgIGNhbmNlbDogJ0FudWx1aicsXG4gICAgY2FycGFyazogJ1Bhcmt1aiBpIEplZMW6JyxcbiAgICAnY2xlYXItYnV0dG9uLWxhYmVsJzogJ1d5Y3p5xZvEhycsXG4gICAgJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JzogJ1d5Y3p5xZvEhyBoaXN0b3JpxJkgd3lzenVraXdhbmlhJyxcbiAgICBjdXJyZW50cG9zaXRpb246ICdPYmVjbmUgcG/Fgm/FvGVuaWUnLFxuICAgIGRlbGV0ZTogJ1VzdcWEJyxcbiAgICAnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInOlxuICAgICAgJ0N6eSBuYSBwZXdubyBjaGNlc3ogd3ljennFm2NpxIcgaGlzdG9yacSZIHd5c3p1a2l3YW5pYT8nLFxuICAgIGRlcGFydHVyZTogJ09kamF6ZCcsXG4gICAgZGVzdGluYXRpb246ICdDZWwnLFxuICAgICdnaXZlLW9yaWdpbic6ICdXcHJvd2Fkxbogc3fDs2ogcHVua3QgcG9jesSFdGtvd3kuJyxcbiAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdXcHJvd2Fkxbogc3fDs2ogY2VsJyxcbiAgICBmYXZvdXJpdGU6ICdVbHViaW9uZScsXG4gICAgZmVycnk6ICdQcm9tJyxcbiAgICAnZnV0dXJlLXJvdXRlJzogJ1ByenlzesWCYSB0cmFzYScsXG4gICAgb3JpZ2luOiAnUG9jesSFdGVrJyxcbiAgICAnb3JpZ2luLXN0b3AtbmVhci15b3UnOiAnUG9jesSFdGVrJyxcbiAgICBvd25sb2NhdGlvbnM6ICdXxYJhc25lIG1pZWpzY2EnLFxuICAgIGxvYWRpbmc6ICfFgWFkb3dhbmll4oCmJyxcbiAgICAnbWludXRlLXNob3J0JzogJ21pbi4nLFxuICAgIHBsYXRmb3JtOiAnUGVyb24nLFxuICAgIHJhaWw6ICdQb2NpxIVnJyxcbiAgICByZXF1aXJlZDogJ3d5bWFnYW5lIHBvbGUnLFxuICAgIHNlYXJjaDogJ1N6dWthaicsXG4gICAgJ3NlYXJjaC1hZGRyZXNzLW9yLXBsYWNlJzogJ1N6dWthaiBwbyBhZHJlc2llIGx1YiBuYXp3aWUgbWllanNjYScsXG4gICAgJ3NlYXJjaC1idXR0b24tbGFiZWwnOiAnU3p1a2FqJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uJzogJ1N6dWthaiBjZWx1LCB0cmFzeSBsdWIgcHJ6eXN0YW5rdScsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1pbmRleCc6ICdXcHJvd2FkxbogcHVua3QgZG9jZWxvd3knLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24tcmVzdWx0cy1idXQtbm8tc2VhcmNoJzpcbiAgICAgICdXecWbd2lldGwgd3luaWtpIHcgc8SFc2llZG5pZWoga2FyY2llIOKAnkNlbOKAnScsXG4gICAgJ3NlYXJjaC1uby1yZXN1bHRzJzogJ0JyYWsgbG9rYWxpemFjamknLFxuICAgICdzZWFyY2gtb3JpZ2luJzogJ1d5c3p1a2FqIHBvY3rEhXRlaywga29uaWVjIGx1YiBwdW5rdCBwb8WbcmVkbmknLFxuICAgICdzZWFyY2gtb3JpZ2luLWluZGV4JzogJ1dwcm93YWTFuiBwdW5rdCBwb2N6xIV0a293eScsXG4gICAgJ3NlYXJjaC1wb3NpdGlvbic6ICdXeWtyeWogbG9rYWxpemFjasSZJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsJzogJ01pZWpzY2UsIGxva2FsaXphY2phIGkgcHJ6eXN0YW5lay4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLWRlc2t0b3AnOlxuICAgICAgJ05hd2lndWogcG8gbGnFm2NpZSB1xbx5d2FqxIVjIHN0cnphxYJlayBpIHd5YmllcmFqIGtsYXdpc3plbSBFbnRlci4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLW1vYmlsZSc6XG4gICAgICAnV3Byb3dhZMW6IGxva2FsaXphY2rEmSBpIG5hd2lndWogcG8gbGnFm2NpZSBnZXN0YW1pIHByemVzdXdhbmlhLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb3ZlLXRvLWRlc3RpbmF0aW9uJzpcbiAgICAgICdQbyB3eWJyYW5pdSBsb2thbGl6YWNqaSBwb2N6xIV0a293ZWosIGF1dG9tYXR5Y3puaWUgcHJ6ZWpkemllc3ogZG8gcG9sYSBtaWVqc2NhIGRvY2Vsb3dlZ28uJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbic6ICdEb3N0xJlwbmEgamVzdCB7e2NvdW50fX0gcHJvcG96eWNqYScsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW5fZmV3JzogJ0Rvc3TEmXBuZSBzxIUge3tjb3VudH19IHByb3BvenljamUnLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuX290aGVyJzogJ0Rvc3TEmXBuZSBqZXN0IHt7Y291bnR9fSBwcm9wb3p5Y2ppJyxcbiAgICAnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbic6ICdPYmVjbnkgd3liw7NyOiB7e3NlbGVjdGlvbn19JyxcbiAgICBzdHJlZXQ6ICdVbGljYScsXG4gICAgc3Vid2F5OiAnTWV0cm8nLFxuICAgIHN0YXRpb246ICdTdGFjamEnLFxuICAgIHN0b3A6ICdQcnp5c3RhbmVrJyxcbiAgICAnc3RvcC1uZWFyLXlvdSc6ICdTenVrYWogcHJ6eXN0YW5rw7N3IGkgdHJhcycsXG4gICAgJ3N0b3AtbmVhci15b3UtYWlycGxhbmUnOiAnU3p1a2FqIGxvdMOzdyBpIGxvdG5pc2snLFxuICAgICdzdG9wLW5lYXIteW91LWJ1cyc6ICdTenVrYWogdHJhcyBhdXRvYnVzb3d5Y2ggaSBwcnp5c3RhbmvDs3cnLFxuICAgICdzdG9wLW5lYXIteW91LWNpdHliaWtlJzogJ1N6dWthaiBzdGFjamkgcm93ZXLDs3cgbWllanNraWNoJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1yYWlsJzogJ1N6dWthaiB0cmFzIGtvbGVqb3d5Y2ggaSBwcnp5c3RhbmvDs3cnLFxuICAgICdzdG9wLW5lYXIteW91LXN1YndheSc6ICdTenVrYWogdHJhcyBtZXRyYSBpIHByenlzdGFua8OzdyAnLFxuICAgICdzdG9wLW5lYXIteW91LXRyYW0nOiAnU3p1a2FqIHRyYXMgdHJhbXdham93eWNoIGkgcHJ6eXN0YW5rw7N3JyxcbiAgICAnc3RvcC1yb3V0ZS1zdGF0aW9uJzogJ1d5c3p1a2l3YW5pZSBhdXRvYnVzw7N3IGkgcHJ6eXN0YW5rw7N3JyxcbiAgICAndG9kYXktYXQnOiAnZHppxZsgbycsXG4gICAgJ3RvbW9ycm93LWF0JzogJ2p1dHJvIG8nLFxuICAgIHRyYW06ICdUcmFtd2FqJyxcbiAgICB0cmFjazogJ1RvcicsXG4gICAgJ3VzZS1vd24tcG9zaXRpb24nOiAnVcW8eWogb2JlY25laiBsb2thbGl6YWNqaScsXG4gICAgJ3NlbGVjdC1mcm9tLW1hcCc6ICdXeWJpZXJ6IG1pZWpzY2UgbmEgbWFwaWUnLFxuICAgICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJzogJ1d5YmllcnogeiB3xYJhc255Y2ggbWllanNjJyxcbiAgICB2ZW51ZTogJ01pZWpzY2UnLFxuICAgICd2aWEtcG9pbnQnOiAnUHJ6ZXogcHVua3QnLFxuICAgIHdoZXJlOiAnRG9rxIVkPycsXG4gICAgcGxhY2U6ICdNaWVqc2NlJyxcbiAgfSxcbiAgc3Y6IHtcbiAgICBhZGRyZXNzOiAnQWRyZXNzJyxcbiAgICAnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcyc6ICdBZHJlc3MsIHBsYXRzIGVsbGVyIGbDtnJldGFnJyxcbiAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnTMOkZ2cgdGlsbCB2aWFwdW5rdCcsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzpcbiAgICAgICdTdMOkbGwgaW4gdmFyYWt0aWdoZXQgZsO2ciB2aWFwdW5rdGVuIHt7aW5kZXh9fScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICdTdMOkbmcgdsOkbGphcmVuIGbDtnIgdmFyYWt0aWdoZXQgdmlkIHZpYS1wdW5rdGVuIHt7aW5kZXh9fScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgJ8OWcHBuYSB2w6RsamFyZW4gZsO2ciB2YXJha3RpZ2hldCB2aWQgdmlhLXB1bmt0ZW4ge3tpbmRleH19JyxcbiAgICBhaXJwbGFuZTogJ0ZseWcnLFxuICAgIGFycml2YWw6ICdBbmzDpG5kZXInLFxuICAgIGJhY2s6ICdUaWxsYmFrYScsXG4gICAgYmlrZXJlbnRhbHN0YXRpb246ICdTdGFkc2N5a2Vsc3RhdGlvbicsXG4gICAgYmlrZXBhcms6ICdBbnNsdXRuaW5nc3BhcmtlcmluZyBmw7ZyIGN5a2xhcicsXG4gICAgYnVzOiAnQnVzc2knLFxuICAgIGNhbmNlbDogJ0F2YnJ5dCcsXG4gICAgY2FycGFyazogJ0luZmFydHNwYXJrZXJpbmcnLFxuICAgICdjbGVhci1idXR0b24tbGFiZWwnOiAnVMO2bScsXG4gICAgJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JzogJ1TDtm0gc8O2a2hpc3RvcmlrZW4nLFxuICAgIGN1cnJlbnRwb3NpdGlvbjogJ051dmFyYW5kZSBwb3NpdGlvbicsXG4gICAgZGVsZXRlOiAnVGEgYm9ydCcsXG4gICAgJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJzogJ1ZpbGwgZHUgdMO2bW1hIHPDtmtoaXN0b3Jpa2VuPycsXG4gICAgZGVwYXJ0dXJlOiAnQXZnw6VuZ3N0aWQnLFxuICAgIGRlc3RpbmF0aW9uOiAnRGVzdGluYXRpb24nLFxuICAgIGZhdm91cml0ZTogJ0Zhdm9yaXQnLFxuICAgIGZlcnJ5OiAnRsOkcmphJyxcbiAgICAnZnV0dXJlLXJvdXRlJzogJ0ZyYW10aWRhIHJ1dHQnLFxuICAgICdnaXZlLWRlc3RpbmF0aW9uJzogJ1Nrcml2IGluIGRpbiBkZXN0aW5hdGlvbicsXG4gICAgJ2dpdmUtb3JpZ2luJzogJ1Nrcml2IGluIGRpbiBhdmbDpHJkc3BsYXRzJyxcbiAgICBvcmlnaW46ICdBdmbDpHJkc3BsYXRzJyxcbiAgICAnb3JpZ2luLXN0b3AtbmVhci15b3UnOiAnQXZmw6RyZHNwbGF0cycsXG4gICAgb3dubG9jYXRpb25zOiAnRWduYSBwbGF0c2VyJyxcbiAgICBsb2FkaW5nOiAnTGFkZGFyLi4uJyxcbiAgICAnbWludXRlLXNob3J0JzogJ21pbicsXG4gICAgcGxhdGZvcm06ICdQbGF0dGZvcm0nLFxuICAgIHJhaWw6ICdUw6VnJyxcbiAgICByZXF1aXJlZDogJ29ibGlnYXRvcmlza3QgZsOkbHQnLFxuICAgIHNlYXJjaDogJ1PDtmsnLFxuICAgICdzZWFyY2gtYWRkcmVzcy1vci1wbGFjZSc6ICdTw7ZrIG1lZCBhZHJlc3NlbiBlbGxlciBwbGF0c2VucyBuYW1uJyxcbiAgICAnc2VhcmNoLWJ1dHRvbi1sYWJlbCc6ICdTw7ZrJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uJzogJ1PDtmsgZGVzdGluYXRpb24sIGxpbmplIGVsbGVyIGjDpWxscGxhdHMnLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24taW5kZXgnOiAnU2tyaXYgZGVzdGluYXRpb24nLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24tcmVzdWx0cy1idXQtbm8tc2VhcmNoJzpcbiAgICAgICdTZSByZXN1bHRhdGVuIHVuZGVyIGZsaWtlbiBEZXN0aW5hdGlvbicsXG4gICAgJ3NlYXJjaC1uby1yZXN1bHRzJzogJ0luZ2Egc8O2a3Jlc3VsdGF0JyxcbiAgICAnc2VhcmNoLW9yaWdpbic6ICdTw7ZrIGF2ZsOkcmRzcGxhdHMsIGxpbmplIGVsbGVyIGjDpWxscGxhdHMnLFxuICAgICdzZWFyY2gtb3JpZ2luLWluZGV4JzogJ1Nrcml2IGF2ZsOkcmRzcGxhdHMnLFxuICAgICdzZWFyY2gtcG9zaXRpb24nOiAnU8O2ayBwb3NpdGlvbicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbCc6ICdQbGF0cywgbGluamUgb2NoIGjDpWxscGxhdHNzw7ZrbmluZy4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLWRlc2t0b3AnOlxuICAgICAgJ05hdmlnZXJhIGxpc3RhbiBtZWQgcGlsdGFuZ2VudGVybmEgb2NoIHbDpGxqIG1lZCBFbnRlci10YW5nZXRlbi4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLW1vYmlsZSc6XG4gICAgICAnQW5nZSBwbGF0c2VuIG9jaCBuYXZpZ2VyYSBpIGxpc3RhbiBnZW5vbSBhdHQgc3ZlcGEuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLW1vdmUtdG8tZGVzdGluYXRpb24nOlxuICAgICAgJ0VmdGVyIGF0dCBkdSB2YWx0IGF2Z8OlbmdzcGxhdHNlbiB0YXMgZHUgZGlyZWt0IHRpbGwgRGVzdGluYXRpb24tZsOkbHRldC4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuJzogJ0hpdHRhZGUge3tjb3VudH19IGbDtnJzbGFnJyxcbiAgICAnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbic6ICdOdXZhcmFuZGUgdmFsOiB7e3NlbGVjdGlvbn19JyxcbiAgICBzdHJlZXQ6ICdHYXRhJyxcbiAgICBzdWJ3YXk6ICdNZXRybycsXG4gICAgc3RhdGlvbjogJ1N0YXRpb24nLFxuICAgIHN0b3A6ICdIw6VsbHBsYXRzJyxcbiAgICAnc3RvcC1uZWFyLXlvdSc6ICdTw7ZrIGjDpWxscGxhdHNlciBlbGxlciBsaW5qZXInLFxuICAgICdzdG9wLW5lYXIteW91LWFpcnBsYW5lJzogJ1PDtmsgZmx5ZyBlbGxlciBmbHlncGxhdHNlcicsXG4gICAgJ3N0b3AtbmVhci15b3UtYnVzJzogJ1PDtmsgYnVzc2xpbmplciBlbGxlciBow6VsbHBsYXRzZXInLFxuICAgICdzdG9wLW5lYXIteW91LWNpdHliaWtlJzogJ1PDtmsgc3RhZHNjeWtlbHN0YXRpb25lcicsXG4gICAgJ3N0b3AtbmVhci15b3UtcmFpbCc6ICdTw7ZrIG7DpHJ0w6VnZXIgZWxsZXIgc3RhdGlvbmVyJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1zdWJ3YXknOiAnU8O2ayBtZXRyb2xpbmplciBlbGxlciBzdGF0aW9uZXInLFxuICAgICdzdG9wLW5lYXIteW91LXRyYW0nOiAnU8O2ayBzcMOlcnZhZ25saW5qZXIgZWxsZXIgaMOlbGxwbGF0c2VyJyxcbiAgICAnc3RvcC1yb3V0ZS1zdGF0aW9uJzogJ0J1c3Mgb2NoIHN0b3BwIHPDtmtuaW5nZW4nLFxuICAgICd0b2RheS1hdCc6ICdpIGRhZyBrbCcsXG4gICAgJ3RvbW9ycm93LWF0JzogJ2kgbW9yZ29uJyxcbiAgICB0cmFtOiAnU3DDpXJ2YWduJyxcbiAgICB0cmFjazogJ1Nww6VyJyxcbiAgICAndXNlLW93bi1wb3NpdGlvbic6ICdBbnbDpG5kIG1pbiBwb3NpdGlvbicsXG4gICAgJ3NlbGVjdC1mcm9tLW1hcCc6ICdWw6RsaiBwb3NpdGlvbiBmcsOlbiBrYXJ0YW4nLFxuICAgICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJzogJ1bDpGxqIGZyw6VuIGVnbmEgcGxhdHNlcicsXG4gICAgdmVudWU6ICdNw7Z0ZXNwbGF0cycsXG4gICAgJ3ZpYS1wb2ludCc6ICdWaWEgcHVua3QnLFxuICAgIHdoZXJlOiAnVmFydCB2aWxsIGR1IMOla2E/JyxcbiAgICBwbGFjZTogJ1BsYXRzJyxcbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHRyYW5zbGF0aW9ucztcbiIsImZ1bmN0aW9uIHN0eWxlSW5qZWN0KGNzcywgcmVmKSB7XG4gIGlmICggcmVmID09PSB2b2lkIDAgKSByZWYgPSB7fTtcbiAgdmFyIGluc2VydEF0ID0gcmVmLmluc2VydEF0O1xuXG4gIGlmICghY3NzIHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuOyB9XG5cbiAgdmFyIGhlYWQgPSBkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG4gIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHN0eWxlLnR5cGUgPSAndGV4dC9jc3MnO1xuXG4gIGlmIChpbnNlcnRBdCA9PT0gJ3RvcCcpIHtcbiAgICBpZiAoaGVhZC5maXJzdENoaWxkKSB7XG4gICAgICBoZWFkLmluc2VydEJlZm9yZShzdHlsZSwgaGVhZC5maXJzdENoaWxkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICB9XG5cbiAgaWYgKHN0eWxlLnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG4gIH0gZWxzZSB7XG4gICAgc3R5bGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgc3R5bGVJbmplY3Q7XG4iLCJpbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0TW9kYWwgZnJvbSAncmVhY3QtbW9kYWwnO1xuaW1wb3J0IGN4IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IEljb24gZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtaWNvbic7XG5pbXBvcnQgRGlhbG9nTW9kYWwgZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtZGlhbG9nLW1vZGFsJztcbmltcG9ydCBBdXRvc3VnZ2VzdCBmcm9tICdyZWFjdC1hdXRvc3VnZ2VzdCc7XG5pbXBvcnQgbW9iaWxlU3R5bGVzIGZyb20gJy4vTW9iaWxlU2VhcmNoLnNjc3MnO1xuaW1wb3J0IG1vYmlsZU5vU2Nyb2xsU3R5bGVzIGZyb20gJy4vTW9iaWxlTm9TY3JvbGwuc2Nzcyc7XG5cbmNsYXNzIEF1dG9zdWdnZXN0UGF0Y2ggZXh0ZW5kcyBBdXRvc3VnZ2VzdCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIHNlbGYub25TdWdnZXN0aW9uVG91Y2hNb3ZlID0gKCkgPT4ge1xuICAgICAgc2VsZi5qdXN0U2VsZWN0ZWRTdWdnZXN0aW9uID0gZmFsc2U7XG4gICAgICBzZWxmLnByZXNzZWRTdWdnZXN0aW9uID0gbnVsbDtcbiAgICB9O1xuICB9XG59XG5cbmNvbnN0IE1vYmlsZVNlYXJjaCA9ICh7XG4gIGFwcEVsZW1lbnQsXG4gIGlkLFxuICBjbG9zZUhhbmRsZSxcbiAgY2xlYXJJbnB1dCxcbiAgdmFsdWUsXG4gIHN1Z2dlc3Rpb25zLFxuICBpbnB1dFByb3BzLFxuICBmZXRjaEZ1bmN0aW9uLFxuICByZW5kZXJTdWdnZXN0aW9uLFxuICBnZXRTdWdnZXN0aW9uVmFsdWUsXG4gIGFyaWFMYWJlbCxcbiAgbGFiZWwsXG4gIG9uU3VnZ2VzdGlvblNlbGVjdGVkLFxuICBjbGVhck9sZFNlYXJjaGVzLFxuICBkaWFsb2dIZWFkZXJUZXh0LFxuICBkaWFsb2dQcmltYXJ5QnV0dG9uVGV4dCxcbiAgZGlhbG9nU2Vjb25kYXJ5QnV0dG9uVGV4dCxcbiAgY2xlYXJJbnB1dEJ1dHRvblRleHQsXG4gIGZvY3VzSW5wdXQsXG4gIGNvbG9yLFxuICBob3ZlckNvbG9yLFxuICBhY2Nlc3NpYmxlUHJpbWFyeUNvbG9yLFxuICBzZWFyY2hPcGVuLFxuICBmb250V2VpZ2h0cyxcbiAgc2hvd1Njcm9sbCxcbn0pID0+IHtcbiAgY29uc3Qgc3R5bGVzID0gc2hvd1Njcm9sbCA/IG1vYmlsZVN0eWxlcyA6IG1vYmlsZU5vU2Nyb2xsU3R5bGVzO1xuXG4gIGNvbnN0IGlucHV0SWQgPSBgJHtpZH0taW5wdXRgO1xuICBjb25zdCBsYWJlbElkID0gYCR7aWR9LWxhYmVsYDtcblxuICBjb25zdCBbaXNEaWFsb2dPcGVuLCBzZXREaWFsb2dPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgaW5wdXRSZWYgPSBSZWFjdC51c2VSZWYoKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIFJlYWN0TW9kYWwuc2V0QXBwRWxlbWVudChhcHBFbGVtZW50KTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IG9uQ2xvc2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY2xvc2VIYW5kbGUoKTtcbiAgfSk7XG5cbiAgY29uc3Qgb25TZWxlY3QgPSAoZSwgcmVmKSA9PiB7XG4gICAgaWYgKHJlZi5zdWdnZXN0aW9uLnR5cGUgPT09ICdjbGVhci1zZWFyY2gtaGlzdG9yeScpIHtcbiAgICAgIHNldERpYWxvZ09wZW4odHJ1ZSk7XG4gICAgfSBlbHNlIGlmICghcmVmLnN1Z2dlc3Rpb24ucHJvcGVydGllcy5hcnJvd0NsaWNrZWQpIHtcbiAgICAgIC8vIFNlbGVjdCBpdGVtIGlmIGZpbGwgaW5wdXQgYnV0dG9uIGlzIG5vdCBwcmVzc2VkIChkaWFnb25hbCBhcnJvdyBpbiBzdWdnZXN0aW9uIGl0ZW1zKVxuICAgICAgb25TdWdnZXN0aW9uU2VsZWN0ZWQoZSwgcmVmKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50ID0gZXZlbnQgPT4ge1xuICAgIGNvbnN0IHNwYWNlID0gWzEzLCAnICcsICdTcGFjZWJhciddO1xuICAgIGNvbnN0IGVudGVyID0gWzMyLCAnRW50ZXInXTtcbiAgICBjb25zdCBrZXkgPSAoZXZlbnQgJiYgKGV2ZW50LmtleSB8fCBldmVudC53aGljaCB8fCBldmVudC5rZXlDb2RlKSkgfHwgJyc7XG5cbiAgICBpZiAoIWtleSB8fCAhc3BhY2UuY29uY2F0KGVudGVyKS5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgY29uc3QgZ2V0VmFsdWUgPSBzdWdnZXN0aW9uID0+IHtcbiAgICBpZiAoc3VnZ2VzdGlvbi50eXBlID09PSAnY2xlYXItc2VhcmNoLWhpc3RvcnknKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiBnZXRTdWdnZXN0aW9uVmFsdWUoc3VnZ2VzdGlvbik7XG4gIH07XG5cbiAgY29uc3QgcmVuZGVySXRlbSA9IGl0ZW0gPT4ge1xuICAgIGlmIChpdGVtLnR5cGUgPT09ICdjbGVhci1zZWFyY2gtaGlzdG9yeScpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT17c3R5bGVzWydjbGVhci1zZWFyY2gtaGlzdG9yeSddfT5cbiAgICAgICAgICB7aXRlbS5sYWJlbElkfVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiByZW5kZXJTdWdnZXN0aW9uKGl0ZW0pO1xuICB9O1xuXG4gIGNvbnN0IHJlbmRlckRpYWxvZ01vZGFsID0gKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8RGlhbG9nTW9kYWxcbiAgICAgICAgYXBwRWxlbWVudD17YXBwRWxlbWVudH1cbiAgICAgICAgaXNNb2RhbE9wZW49e2lzRGlhbG9nT3Blbn1cbiAgICAgICAgaGFuZGxlQ2xvc2U9eygpID0+IHNldERpYWxvZ09wZW4oZmFsc2UpfVxuICAgICAgICBoZWFkZXJUZXh0PXtkaWFsb2dIZWFkZXJUZXh0fVxuICAgICAgICBwcmltYXJ5QnV0dG9uVGV4dD17ZGlhbG9nUHJpbWFyeUJ1dHRvblRleHR9XG4gICAgICAgIHNlY29uZGFyeUJ1dHRvblRleHQ9e2RpYWxvZ1NlY29uZGFyeUJ1dHRvblRleHR9XG4gICAgICAgIHByaW1hcnlCdXR0b25PbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgY2xlYXJPbGRTZWFyY2hlcygpO1xuICAgICAgICAgIHNldERpYWxvZ09wZW4oZmFsc2UpO1xuICAgICAgICB9fVxuICAgICAgICBzZWNvbmRhcnlCdXR0b25PbkNsaWNrPXsoKSA9PiBzZXREaWFsb2dPcGVuKGZhbHNlKX1cbiAgICAgICAgY29sb3I9e2NvbG9yfVxuICAgICAgICBob3ZlckNvbG9yPXtob3ZlckNvbG9yfVxuICAgICAgICBmb250V2VpZ2h0cz17Zm9udFdlaWdodHN9XG4gICAgICAvPlxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgY2xlYXJCdXR0b24gPSAoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydjbGVhci1pbnB1dCddfVxuICAgICAgICBvbkNsaWNrPXtjbGVhcklucHV0fVxuICAgICAgICBvbktleURvd249e2UgPT4gaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50KGUpICYmIGNsZWFySW5wdXQoKX1cbiAgICAgICAgYXJpYS1sYWJlbD17Y2xlYXJJbnB1dEJ1dHRvblRleHR9XG4gICAgICA+XG4gICAgICAgIDxJY29uIGltZz1cImNsb3NlXCIgY29sb3I9e2NvbG9yfSAvPlxuICAgICAgPC9idXR0b24+XG4gICAgKTtcbiAgfTtcblxuICBjb25zdCByZW5kZXJDb250ZW50ID0gKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydjb21ib2JveC1jb250YWluZXInXX0gaHRtbEZvcj17aW5wdXRJZH0+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1snY29tYm9ib3gtaWNvbiddfVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9uQ2xvc2UoKX1cbiAgICAgICAgICBvbktleURvd249e2UgPT4gaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50KGUpICYmIG9uQ2xvc2UoKX1cbiAgICAgICAgICBhcmlhLWxhYmVsPXtkaWFsb2dTZWNvbmRhcnlCdXR0b25UZXh0fVxuICAgICAgICAgIHRhYkluZGV4PXswfVxuICAgICAgICA+XG4gICAgICAgICAgPEljb24gaW1nPVwiYXJyb3dcIiAvPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXNbJ3JpZ2h0LWNvbHVtbiddfT5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlc1snY29tYm9ib3gtbGFiZWwnXX0gaWQ9e2xhYmVsSWR9PlxuICAgICAgICAgICAge2xhYmVsfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8QXV0b3N1Z2dlc3RQYXRjaFxuICAgICAgICAgICAgYWx3YXlzUmVuZGVyU3VnZ2VzdGlvbnNcbiAgICAgICAgICAgIGlkPXtpZH1cbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zPXtzdWdnZXN0aW9uc31cbiAgICAgICAgICAgIG9uU3VnZ2VzdGlvbnNGZXRjaFJlcXVlc3RlZD17ZmV0Y2hGdW5jdGlvbn1cbiAgICAgICAgICAgIGdldFN1Z2dlc3Rpb25WYWx1ZT17Z2V0VmFsdWV9XG4gICAgICAgICAgICByZW5kZXJTdWdnZXN0aW9uPXtyZW5kZXJJdGVtfVxuICAgICAgICAgICAgLy8gZm9jdXNJbnB1dE9uU3VnZ2VzdGlvbkNsaWNrIG11c3QgYmUgc2V0IHRvIHRydWUuXG4gICAgICAgICAgICAvLyBJZiBzZXQgdG8gZmFsc2UsIGlucHV0IHdvbid0IGJlIGZvY3VzZWQgd2hlbiB1c2VyIGNsaWNrcyBvblxuICAgICAgICAgICAgLy8gRmlsbCBpbnB1dCBidXR0b24gaW4gc3VnZ2VzdGlvbiBsaXN0LiAoZGlhZ29uYWwgYXJyb3cgaW4gc3RyZWV0IG5hbWUgaXRlbXMpXG4gICAgICAgICAgICBmb2N1c0lucHV0T25TdWdnZXN0aW9uQ2xpY2tcbiAgICAgICAgICAgIHNob3VsZFJlbmRlclN1Z2dlc3Rpb25zPXsoKSA9PiB0cnVlfVxuICAgICAgICAgICAgaW5wdXRQcm9wcz17e1xuICAgICAgICAgICAgICAuLi5pbnB1dFByb3BzLFxuICAgICAgICAgICAgICBjbGFzc05hbWU6IGN4KFxuICAgICAgICAgICAgICAgIGAke3N0eWxlcy5pbnB1dH0gJHtzdHlsZXNbaWRdIHx8ICcnfSAke1xuICAgICAgICAgICAgICAgICAgaW5wdXRQcm9wcy52YWx1ZSA/IHN0eWxlcy5oYXNWYWx1ZSA6ICcnXG4gICAgICAgICAgICAgICAgfWAsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIGF1dG9Gb2N1czogdHJ1ZSxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICByZW5kZXJJbnB1dENvbXBvbmVudD17cCA9PiAoXG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgPGlucHV0IGFyaWEtbGFiZWw9e2FyaWFMYWJlbH0gaWQ9e2lkfSB7Li4ucH0gLz5cbiAgICAgICAgICAgICAgICB7dmFsdWUgJiYgY2xlYXJCdXR0b24oKX1cbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgdGhlbWU9e3N0eWxlc31cbiAgICAgICAgICAgIG9uU3VnZ2VzdGlvblNlbGVjdGVkPXtvblNlbGVjdH1cbiAgICAgICAgICAgIHJlZj17aW5wdXRSZWZ9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfTtcbiAgLy8gVGhpcyBkb2VzIG5vdCBzZWVtIHRvIGRvIGFueXRoaW5nLlxuICAvLyBXaGVuIGRvaW5nIHF1aWNrIHRlc3Rpbmcgb24gdGhpcyBpdCBsb29rZWQgbGlrZSBpbnB1dFJlZi5jdXJyZW50IGlzIGFsd2F5cyB1bmRlZmluZWQuXG4gIGlmIChmb2N1c0lucHV0ICYmIGlucHV0UmVmLmN1cnJlbnQ/LmlucHV0KSB7XG4gICAgaW5wdXRSZWYuY3VycmVudC5pbnB1dC5mb2N1cygpO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8UmVhY3RNb2RhbFxuICAgICAgaXNPcGVuPXtzZWFyY2hPcGVufVxuICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ21vYmlsZS1tb2RhbCddfVxuICAgICAgb3ZlcmxheUNsYXNzTmFtZT17c3R5bGVzWydtb2JpbGUtbW9kYWwtb3ZlcmxheSddfVxuICAgICAgb25BZnRlckNsb3NlPXtvbkNsb3NlfVxuICAgICAgc2hvdWxkQ2xvc2VPbkVzY1xuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ21vYmlsZS1tb2RhbC1jb250ZW50J119XG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgJy0tY29sb3InOiBgJHtjb2xvcn1gLFxuICAgICAgICAgICctLWFjY2Vzc2libGUtcHJpbWFyeS1jb2xvcic6IGFjY2Vzc2libGVQcmltYXJ5Q29sb3IsXG4gICAgICAgICAgJy0taG92ZXItY29sb3InOiBgJHtob3ZlckNvbG9yfWAsXG4gICAgICAgICAgJy0tZm9udC13ZWlnaHQtbWVkaXVtJzogZm9udFdlaWdodHMubWVkaXVtLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7cmVuZGVyQ29udGVudCgpfVxuICAgICAgICB7cmVuZGVyRGlhbG9nTW9kYWwoKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvUmVhY3RNb2RhbD5cbiAgKTtcbn07XG5cbk1vYmlsZVNlYXJjaC5wcm9wVHlwZXMgPSB7XG4gIGFwcEVsZW1lbnQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgY2xvc2VIYW5kbGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGNsZWFySW5wdXQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjbGVhcklucHV0QnV0dG9uVGV4dDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgc3VnZ2VzdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vYmplY3QpLmlzUmVxdWlyZWQsXG4gIGlucHV0UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25CbHVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgfSkuaXNSZXF1aXJlZCxcbiAgZmV0Y2hGdW5jdGlvbjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgZ2V0U3VnZ2VzdGlvblZhbHVlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICByZW5kZXJTdWdnZXN0aW9uOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvblN1Z2dlc3Rpb25TZWxlY3RlZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgY2xlYXJPbGRTZWFyY2hlczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgYXJpYUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBkaWFsb2dIZWFkZXJUZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICBkaWFsb2dQcmltYXJ5QnV0dG9uVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgZGlhbG9nU2Vjb25kYXJ5QnV0dG9uVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgZm9jdXNJbnB1dDogUHJvcFR5cGVzLmJvb2wsXG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBob3ZlckNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBhY2Nlc3NpYmxlUHJpbWFyeUNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHNlYXJjaE9wZW46IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIGZvbnRXZWlnaHRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIG1lZGl1bTogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICB9KS5pc1JlcXVpcmVkLFxuICBzaG93U2Nyb2xsOiBQcm9wVHlwZXMuYm9vbCxcbn07XG5cbk1vYmlsZVNlYXJjaC5kZWZhdWx0UHJvcHMgPSB7XG4gIHZhbHVlOiB1bmRlZmluZWQsXG4gIGFyaWFMYWJlbDogdW5kZWZpbmVkLFxuICBkaWFsb2dIZWFkZXJUZXh0OiB1bmRlZmluZWQsXG4gIGRpYWxvZ1ByaW1hcnlCdXR0b25UZXh0OiB1bmRlZmluZWQsXG4gIGRpYWxvZ1NlY29uZGFyeUJ1dHRvblRleHQ6IHVuZGVmaW5lZCxcbiAgZm9jdXNJbnB1dDogZmFsc2UsXG4gIGNvbG9yOiB1bmRlZmluZWQsXG4gIGhvdmVyQ29sb3I6IHVuZGVmaW5lZCxcbiAgc2hvd1Njcm9sbDogdW5kZWZpbmVkLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgTW9iaWxlU2VhcmNoO1xuIiwiLyohIEZvciBsaWNlbnNlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgaW5kZXguanMuTElDRU5TRS50eHQgKi9cbiFmdW5jdGlvbihlLHQpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlKW1vZHVsZS5leHBvcnRzPXQocmVxdWlyZShcInJlYWN0XCIpKTtlbHNlIGlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClkZWZpbmUoW1wicmVhY3RcIl0sdCk7ZWxzZXt2YXIgbj1cIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cz90KHJlcXVpcmUoXCJyZWFjdFwiKSk6dChlLnJlYWN0KTtmb3IodmFyIG8gaW4gbikoXCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHM/ZXhwb3J0czplKVtvXT1uW29dfX0oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjp0aGlzLChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD17ODg4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgbyxyO3I9dm9pZCAwIT09bi5nP24uZzpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp0aGlzLG89ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHQ9e2lnbm9yZTpcIltkYXRhLXNjcm9sbC1pZ25vcmVdXCIsaGVhZGVyOm51bGwsdG9wT25FbXB0eUhhc2g6ITAsc3BlZWQ6NTAwLHNwZWVkQXNEdXJhdGlvbjohMSxkdXJhdGlvbk1heDpudWxsLGR1cmF0aW9uTWluOm51bGwsY2xpcDohMCxvZmZzZXQ6MCxlYXNpbmc6XCJlYXNlSW5PdXRDdWJpY1wiLGN1c3RvbUVhc2luZzpudWxsLHVwZGF0ZVVSTDohMCxwb3BzdGF0ZTohMCxlbWl0RXZlbnRzOiEwfSxuPWZ1bmN0aW9uKCl7dmFyIGU9e307cmV0dXJuIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoYXJndW1lbnRzLChmdW5jdGlvbih0KXtmb3IodmFyIG4gaW4gdCl7aWYoIXQuaGFzT3duUHJvcGVydHkobikpcmV0dXJuO2Vbbl09dFtuXX19KSksZX0sbz1mdW5jdGlvbihlKXtcIiNcIj09PWUuY2hhckF0KDApJiYoZT1lLnN1YnN0cigxKSk7Zm9yKHZhciB0LG49U3RyaW5nKGUpLG89bi5sZW5ndGgscj0tMSx1PVwiXCIsaT1uLmNoYXJDb2RlQXQoMCk7KytyPG87KXtpZigwPT09KHQ9bi5jaGFyQ29kZUF0KHIpKSl0aHJvdyBuZXcgSW52YWxpZENoYXJhY3RlckVycm9yKFwiSW52YWxpZCBjaGFyYWN0ZXI6IHRoZSBpbnB1dCBjb250YWlucyBVKzAwMDAuXCIpO3UrPXQ+PTEmJnQ8PTMxfHwxMjc9PXR8fDA9PT1yJiZ0Pj00OCYmdDw9NTd8fDE9PT1yJiZ0Pj00OCYmdDw9NTcmJjQ1PT09aT9cIlxcXFxcIit0LnRvU3RyaW5nKDE2KStcIiBcIjp0Pj0xMjh8fDQ1PT09dHx8OTU9PT10fHx0Pj00OCYmdDw9NTd8fHQ+PTY1JiZ0PD05MHx8dD49OTcmJnQ8PTEyMj9uLmNoYXJBdChyKTpcIlxcXFxcIituLmNoYXJBdChyKX1yZXR1cm5cIiNcIit1fSxyPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWF4KGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0LGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQsZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm9mZnNldEhlaWdodCxkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodCxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KX0sdT1mdW5jdGlvbih0KXtyZXR1cm4gdD8obj10LHBhcnNlSW50KGUuZ2V0Q29tcHV0ZWRTdHlsZShuKS5oZWlnaHQsMTApK3Qub2Zmc2V0VG9wKTowO3ZhciBufSxpPWZ1bmN0aW9uKHQsbixvKXswPT09dCYmZG9jdW1lbnQuYm9keS5mb2N1cygpLG98fCh0LmZvY3VzKCksZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PXQmJih0LnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsXCItMVwiKSx0LmZvY3VzKCksdC5zdHlsZS5vdXRsaW5lPVwibm9uZVwiKSxlLnNjcm9sbFRvKDAsbikpfSxzPWZ1bmN0aW9uKHQsbixvLHIpe2lmKG4uZW1pdEV2ZW50cyYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5DdXN0b21FdmVudCl7dmFyIHU9bmV3IEN1c3RvbUV2ZW50KHQse2J1YmJsZXM6ITAsZGV0YWlsOnthbmNob3I6byx0b2dnbGU6cn19KTtkb2N1bWVudC5kaXNwYXRjaEV2ZW50KHUpfX07cmV0dXJuIGZ1bmN0aW9uKGMsYSl7dmFyIGwsZixkLHYscD17Y2FuY2VsU2Nyb2xsOmZ1bmN0aW9uKGUpe2NhbmNlbEFuaW1hdGlvbkZyYW1lKHYpLHY9bnVsbCxlfHxzKFwic2Nyb2xsQ2FuY2VsXCIsbCl9LGFuaW1hdGVTY3JvbGw6ZnVuY3Rpb24obyxjLGEpe3AuY2FuY2VsU2Nyb2xsKCk7dmFyIGY9bihsfHx0LGF8fHt9KSxoPVwiW29iamVjdCBOdW1iZXJdXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobyksbT1ofHwhby50YWdOYW1lP251bGw6bztpZihofHxtKXt2YXIgeT1lLnBhZ2VZT2Zmc2V0O2YuaGVhZGVyJiYhZCYmKGQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihmLmhlYWRlcikpO3ZhciBiLGcsdyxFPXUoZCksTz1oP286ZnVuY3Rpb24odCxuLG8sdSl7dmFyIGk9MDtpZih0Lm9mZnNldFBhcmVudClkb3tpKz10Lm9mZnNldFRvcCx0PXQub2Zmc2V0UGFyZW50fXdoaWxlKHQpO3JldHVybiBpPU1hdGgubWF4KGktbi1vLDApLHUmJihpPU1hdGgubWluKGkscigpLWUuaW5uZXJIZWlnaHQpKSxpfShtLEUscGFyc2VJbnQoXCJmdW5jdGlvblwiPT10eXBlb2YgZi5vZmZzZXQ/Zi5vZmZzZXQobyxjKTpmLm9mZnNldCwxMCksZi5jbGlwKSxTPU8teSxfPXIoKSxJPTAsTT1mdW5jdGlvbihlLHQpe3ZhciBuPXQuc3BlZWRBc0R1cmF0aW9uP3Quc3BlZWQ6TWF0aC5hYnMoZS8xZTMqdC5zcGVlZCk7cmV0dXJuIHQuZHVyYXRpb25NYXgmJm4+dC5kdXJhdGlvbk1heD90LmR1cmF0aW9uTWF4OnQuZHVyYXRpb25NaW4mJm48dC5kdXJhdGlvbk1pbj90LmR1cmF0aW9uTWluOnBhcnNlSW50KG4sMTApfShTLGYpLEw9ZnVuY3Rpb24odCl7Ynx8KGI9dCksSSs9dC1iLHc9eStTKmZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuXCJlYXNlSW5RdWFkXCI9PT1lLmVhc2luZyYmKG49dCp0KSxcImVhc2VPdXRRdWFkXCI9PT1lLmVhc2luZyYmKG49dCooMi10KSksXCJlYXNlSW5PdXRRdWFkXCI9PT1lLmVhc2luZyYmKG49dDwuNT8yKnQqdDooNC0yKnQpKnQtMSksXCJlYXNlSW5DdWJpY1wiPT09ZS5lYXNpbmcmJihuPXQqdCp0KSxcImVhc2VPdXRDdWJpY1wiPT09ZS5lYXNpbmcmJihuPS0tdCp0KnQrMSksXCJlYXNlSW5PdXRDdWJpY1wiPT09ZS5lYXNpbmcmJihuPXQ8LjU/NCp0KnQqdDoodC0xKSooMip0LTIpKigyKnQtMikrMSksXCJlYXNlSW5RdWFydFwiPT09ZS5lYXNpbmcmJihuPXQqdCp0KnQpLFwiZWFzZU91dFF1YXJ0XCI9PT1lLmVhc2luZyYmKG49MS0gLS10KnQqdCp0KSxcImVhc2VJbk91dFF1YXJ0XCI9PT1lLmVhc2luZyYmKG49dDwuNT84KnQqdCp0KnQ6MS04Ki0tdCp0KnQqdCksXCJlYXNlSW5RdWludFwiPT09ZS5lYXNpbmcmJihuPXQqdCp0KnQqdCksXCJlYXNlT3V0UXVpbnRcIj09PWUuZWFzaW5nJiYobj0xKy0tdCp0KnQqdCp0KSxcImVhc2VJbk91dFF1aW50XCI9PT1lLmVhc2luZyYmKG49dDwuNT8xNip0KnQqdCp0KnQ6MSsxNiotLXQqdCp0KnQqdCksZS5jdXN0b21FYXNpbmcmJihuPWUuY3VzdG9tRWFzaW5nKHQpKSxufHx0fShmLGc9KGc9MD09PU0/MDpJL00pPjE/MTpnKSxlLnNjcm9sbFRvKDAsTWF0aC5mbG9vcih3KSksZnVuY3Rpb24odCxuKXt2YXIgcj1lLnBhZ2VZT2Zmc2V0O2lmKHQ9PW58fHI9PW58fCh5PG4mJmUuaW5uZXJIZWlnaHQrcik+PV8pcmV0dXJuIHAuY2FuY2VsU2Nyb2xsKCEwKSxpKG8sbixoKSxzKFwic2Nyb2xsU3RvcFwiLGYsbyxjKSxiPW51bGwsdj1udWxsLCEwfSh3LE8pfHwodj1lLnJlcXVlc3RBbmltYXRpb25GcmFtZShMKSxiPXQpfTswPT09ZS5wYWdlWU9mZnNldCYmZS5zY3JvbGxUbygwLDApLGZ1bmN0aW9uKGUsdCxuKXt0fHxoaXN0b3J5LnB1c2hTdGF0ZSYmbi51cGRhdGVVUkwmJmhpc3RvcnkucHVzaFN0YXRlKHtzbW9vdGhTY3JvbGw6SlNPTi5zdHJpbmdpZnkobiksYW5jaG9yOmUuaWR9LGRvY3VtZW50LnRpdGxlLGU9PT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ/XCIjdG9wXCI6XCIjXCIrZS5pZCl9KG8saCxmKSxcIm1hdGNoTWVkaWFcImluIGUmJmUubWF0Y2hNZWRpYShcIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uKVwiKS5tYXRjaGVzP2kobyxNYXRoLmZsb29yKE8pLCExKToocyhcInNjcm9sbFN0YXJ0XCIsZixvLGMpLHAuY2FuY2VsU2Nyb2xsKCEwKSxlLnJlcXVlc3RBbmltYXRpb25GcmFtZShMKSl9fX0saD1mdW5jdGlvbih0KXtpZighdC5kZWZhdWx0UHJldmVudGVkJiYhKDAhPT10LmJ1dHRvbnx8dC5tZXRhS2V5fHx0LmN0cmxLZXl8fHQuc2hpZnRLZXkpJiZcImNsb3Nlc3RcImluIHQudGFyZ2V0JiYoZj10LnRhcmdldC5jbG9zZXN0KGMpKSYmXCJhXCI9PT1mLnRhZ05hbWUudG9Mb3dlckNhc2UoKSYmIXQudGFyZ2V0LmNsb3Nlc3QobC5pZ25vcmUpJiZmLmhvc3RuYW1lPT09ZS5sb2NhdGlvbi5ob3N0bmFtZSYmZi5wYXRobmFtZT09PWUubG9jYXRpb24ucGF0aG5hbWUmJi8jLy50ZXN0KGYuaHJlZikpe3ZhciBuLHI7dHJ5e249byhkZWNvZGVVUklDb21wb25lbnQoZi5oYXNoKSl9Y2F0Y2goZSl7bj1vKGYuaGFzaCl9aWYoXCIjXCI9PT1uKXtpZighbC50b3BPbkVtcHR5SGFzaClyZXR1cm47cj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnR9ZWxzZSByPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Iobik7KHI9cnx8XCIjdG9wXCIhPT1uP3I6ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSYmKHQucHJldmVudERlZmF1bHQoKSxmdW5jdGlvbih0KXtpZihoaXN0b3J5LnJlcGxhY2VTdGF0ZSYmdC51cGRhdGVVUkwmJiFoaXN0b3J5LnN0YXRlKXt2YXIgbj1lLmxvY2F0aW9uLmhhc2g7bj1ufHxcIlwiLGhpc3RvcnkucmVwbGFjZVN0YXRlKHtzbW9vdGhTY3JvbGw6SlNPTi5zdHJpbmdpZnkodCksYW5jaG9yOm58fGUucGFnZVlPZmZzZXR9LGRvY3VtZW50LnRpdGxlLG58fGUubG9jYXRpb24uaHJlZil9fShsKSxwLmFuaW1hdGVTY3JvbGwocixmKSl9fSxtPWZ1bmN0aW9uKGUpe2lmKG51bGwhPT1oaXN0b3J5LnN0YXRlJiZoaXN0b3J5LnN0YXRlLnNtb290aFNjcm9sbCYmaGlzdG9yeS5zdGF0ZS5zbW9vdGhTY3JvbGw9PT1KU09OLnN0cmluZ2lmeShsKSl7dmFyIHQ9aGlzdG9yeS5zdGF0ZS5hbmNob3I7XCJzdHJpbmdcIj09dHlwZW9mIHQmJnQmJiEodD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKG8oaGlzdG9yeS5zdGF0ZS5hbmNob3IpKSl8fHAuYW5pbWF0ZVNjcm9sbCh0LG51bGwse3VwZGF0ZVVSTDohMX0pfX07cmV0dXJuIHAuZGVzdHJveT1mdW5jdGlvbigpe2wmJihkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIixoLCExKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb3BzdGF0ZVwiLG0sITEpLHAuY2FuY2VsU2Nyb2xsKCksbD1udWxsLGY9bnVsbCxkPW51bGwsdj1udWxsKX0sZnVuY3Rpb24oKXtpZighKFwicXVlcnlTZWxlY3RvclwiaW4gZG9jdW1lbnQmJlwiYWRkRXZlbnRMaXN0ZW5lclwiaW4gZSYmXCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWVcImluIGUmJlwiY2xvc2VzdFwiaW4gZS5FbGVtZW50LnByb3RvdHlwZSkpdGhyb3dcIlNtb290aCBTY3JvbGw6IFRoaXMgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSByZXF1aXJlZCBKYXZhU2NyaXB0IG1ldGhvZHMgYW5kIGJyb3dzZXIgQVBJcy5cIjtwLmRlc3Ryb3koKSxsPW4odCxhfHx7fSksZD1sLmhlYWRlcj9kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGwuaGVhZGVyKTpudWxsLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLGgsITEpLGwudXBkYXRlVVJMJiZsLnBvcHN0YXRlJiZlLmFkZEV2ZW50TGlzdGVuZXIoXCJwb3BzdGF0ZVwiLG0sITEpfSgpLHB9fShyKX0uYXBwbHkodCxbXSksdm9pZCAwPT09b3x8KGUuZXhwb3J0cz1vKX0sNDMyOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjt2YXIgbz10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4sbyl7dm9pZCAwPT09byYmKG89biksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbyx7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KX06ZnVuY3Rpb24oZSx0LG4sbyl7dm9pZCAwPT09byYmKG89biksZVtvXT10W25dfSkscj10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxvKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSkscihuKDQ3KSx0KSxyKG4oOTI2KSx0KSxyKG4oMzQ5KSx0KSxyKG4oMTM3KSx0KSxyKG4oNzI5KSx0KSxyKG4oMzgzKSx0KSxyKG4oNDUwKSx0KSxyKG4oMzU4KSx0KSxyKG4oNzUzKSx0KSxyKG4oODY5KSx0KSxyKG4oMzUyKSx0KSxyKG4oNDQ2KSx0KSxyKG4oMTY0KSx0KSxyKG4oMzA1KSx0KSxyKG4oNTAyKSx0KX0sMzQ5OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUFycm93TmF2aWdhdGlvbj12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlQXJyb3dOYXZpZ2F0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PWUubGlzdEl0ZW1zLG49ZS5vbkFycm93VXBPckRvd24scj0oMCxvLnVzZVN0YXRlKSgwKSx1PXJbMF0saT1yWzFdLHM9KDAsby51c2VDYWxsYmFjaykoKGZ1bmN0aW9uKGUpe2koZSl9KSxbdF0pLGM9ZnVuY3Rpb24oZSl7dmFyIG89ZS5rZXk7aWYobnVsbD09dD92b2lkIDA6dC5sZW5ndGgpaWYoXCJBcnJvd1VwXCI9PT1vKW4mJm4oKSxlLnByZXZlbnREZWZhdWx0KCkscyh1PjA/dS0xOnQubGVuZ3RoLTEpO2Vsc2V7aWYoXCJBcnJvd0Rvd25cIiE9PW8pcmV0dXJuO24mJm4oKSxlLnByZXZlbnREZWZhdWx0KCksdTx0Lmxlbmd0aC0xP3ModSsxKTpzKDApfX07cmV0dXJuKDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixjKSxmdW5jdGlvbigpe3JldHVybiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixjKX19KSksKDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe3MoMCl9KSxbdF0pLHtzZWxlY3RlZEluZGV4OnV9fX0sNDQ2OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZURlYm91bmNlPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VEZWJvdW5jZT1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PTMwMCk7dmFyIG49KDAsby51c2VTdGF0ZSkoZSkscj1uWzBdLHU9blsxXTtyZXR1cm4oMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7dmFyIG49c2V0VGltZW91dCgoZnVuY3Rpb24oKXt1KGUpfSksdCk7cmV0dXJuIGZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KG4pfX0pLFtlLHRdKSxyfX0sMTY0OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUVsZW1lbnRTaXplPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VFbGVtZW50U2l6ZT1mdW5jdGlvbigpe3ZhciBlLHQsbj0oMCxvLnVzZVJlZikobnVsbCk7cmV0dXJuW24se3dpZHRoOm51bGw9PT0oZT1udWxsPT1uP3ZvaWQgMDpuLmN1cnJlbnQpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNsaWVudFdpZHRoLGhlaWdodDpudWxsPT09KHQ9bnVsbD09bj92b2lkIDA6bi5jdXJyZW50KXx8dm9pZCAwPT09dD92b2lkIDA6dC5jbGllbnRIZWlnaHR9XX0sdC5kZWZhdWx0PXQudXNlRWxlbWVudFNpemV9LDEzNzpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VJbnRlcnNlY3Rpb25PYnNlcnZlcj12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9KDAsby51c2VSZWYpKG51bGwpLG49KDAsby51c2VTdGF0ZSkoITEpLHI9blswXSx1PW5bMV0saT1mdW5jdGlvbihlKXt2YXIgdD1lWzBdO3UodC5pc0ludGVyc2VjdGluZyl9O3JldHVybigwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtpZih3aW5kb3cmJndpbmRvdy5JbnRlcnNlY3Rpb25PYnNlcnZlcil7dmFyIG49bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGksZSksbz10LmN1cnJlbnQ7cmV0dXJuIHQuY3VycmVudCYmbi5vYnNlcnZlKHQuY3VycmVudCksZnVuY3Rpb24oKXtvJiZuLnVub2JzZXJ2ZShvKX19dSghMSl9KSxbdCxlXSkse2NvbnRhaW5lclJlZjp0LGlzVmlzaWJsZTpyfX0sdC5kZWZhdWx0PXQudXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXJ9LDcyOTpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VJc0JyZWFrcG9pbnQ9dm9pZCAwO3ZhciBvPW4oMTU2KSxyPW4oNDMyKSx1PXt4czoxLG1vYmlsZVNtYWxsOjMyMCxtb2JpbGU6Mzc1LHRhYmxldDo3NjgsdGFibGV0TGFyZ2U6OTIwLGRlc2t0b3BTbWFsbDoxMDI0LGRlc2t0b3A6MTI2MCxkZXNrdG9wTGFyZ2U6MTQ0MH07dC51c2VJc0JyZWFrcG9pbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9XCJzdHJpbmdcIj09dHlwZW9mIGU/dVtlXTplLG49KDAsby51c2VTdGF0ZSkobnVsbCksaT1uWzBdLHM9blsxXSxjPSgwLG8udXNlQ2FsbGJhY2spKChmdW5jdGlvbigpe3Mod2luZG93LmlubmVyV2lkdGgpfSksW10pO3JldHVybigwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtjKCl9KSxbXSksKDAsci51c2VPblJlc2l6ZSkoYyksaT49dH0sdC5kZWZhdWx0PXQudXNlSXNCcmVha3BvaW50fSw0NTA6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlSXNMb2FkaW5nQWZ0ZXJFcnJvcj12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlSXNMb2FkaW5nQWZ0ZXJFcnJvcj1mdW5jdGlvbihlLHQpe3ZhciBuPSgwLG8udXNlU3RhdGUpKHQpLHI9blswXSx1PW5bMV07cmV0dXJuKDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe2V8fHUodCl9KSxbZSx0XSksZSYmcn19LDMwNTpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VJc01vYmlsZT12b2lkIDA7dmFyIG89big3MjkpO3QudXNlSXNNb2JpbGU9ZnVuY3Rpb24oKXtyZXR1cm4hKDAsby51c2VJc0JyZWFrcG9pbnQpKFwidGFibGV0XCIpfSx0LmRlZmF1bHQ9dC51c2VJc01vYmlsZX0sMzgzOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3Q9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3Q9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz9vLnVzZUxheW91dEVmZmVjdDpvLnVzZUVmZmVjdCx0LmRlZmF1bHQ9dC51c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0fSw3NTM6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlT25Mb3NlRm9jdXNXaXRoaW49dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZU9uTG9zZUZvY3VzV2l0aGluPWZ1bmN0aW9uKGUpe3ZhciB0PWUucmVmLG49ZS5jYWxsYmFjayxyPWUud2F0Y2g7KDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKCl7dmFyIGU7aWYocilyZXR1cm4obnVsbD09PShlPXQuY3VycmVudCl8fHZvaWQgMD09PWU/dm9pZCAwOmUubWF0Y2hlcyhcIjpmb2N1cy13aXRoaW5cIikpP3ZvaWQgMDpuKCl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIixlKSxmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIixlKX19KSxbbix0LHJdKX0sdC5kZWZhdWx0PXQudXNlT25Mb3NlRm9jdXNXaXRoaW59LDUwMjpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VPblJlc2l6ZT12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlT25SZXNpemU9ZnVuY3Rpb24oZSl7KDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKCl7ZSh3aW5kb3cuaW5uZXJXaWR0aCl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHQse3Bhc3NpdmU6ITB9KSxmdW5jdGlvbigpe3JldHVybiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHQpfX0pLFtdKX0sdC5kZWZhdWx0PXQudXNlT25SZXNpemV9LDM1MjpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VPbldpbmRvd0ZvY3VzPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VPbldpbmRvd0ZvY3VzPWZ1bmN0aW9uKGUpeygwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbigpe2UmJlwidmlzaWJsZVwiPT09ZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlJiZlKCl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInZpc2liaWxpdHljaGFuZ2VcIix0LCExKSxmdW5jdGlvbigpe3JldHVybiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInZpc2liaWxpdHljaGFuZ2VcIix0KX19KSxbZV0pfX0sNDc6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlT3V0c2lkZVJlYWN0ZXI9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZU91dHNpZGVSZWFjdGVyPWZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihuKXtlLmN1cnJlbnQmJiFlLmN1cnJlbnQuY29udGFpbnMobi50YXJnZXQpJiZ0KCl9KDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsbiksZnVuY3Rpb24oKXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsbil9fSkpfX0sODY5OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZVJ1bkFmdGVyVXBkYXRlPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VSdW5BZnRlclVwZGF0ZT1mdW5jdGlvbigpe3ZhciBlPSgwLG8udXNlUmVmKShudWxsKTtyZXR1cm4oMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7ZS5jdXJyZW50JiYoZS5jdXJyZW50KCksZS5jdXJyZW50PW51bGwpfSkpLGZ1bmN0aW9uKHQpe2UuY3VycmVudD10fX0sdC5kZWZhdWx0PXQudXNlUnVuQWZ0ZXJVcGRhdGV9LDkyNjpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VTY3JvbGxMb2NrPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VTY3JvbGxMb2NrPWZ1bmN0aW9uKCl7cmV0dXJue2xvY2s6KDAsby51c2VDYWxsYmFjaykoKGZ1bmN0aW9uKCl7dmFyIGU9d2luZG93LnNjcm9sbFkrXCJweFwiLHQ9ZG9jdW1lbnQuYm9keTt0LnN0eWxlLnBvc2l0aW9uPVwiZml4ZWRcIix0LnN0eWxlLnRvcD1cIi1cIitlfSksW10pLHVubG9jazooMCxvLnVzZUNhbGxiYWNrKSgoZnVuY3Rpb24oKXt2YXIgZT1kb2N1bWVudC5ib2R5LHQ9ZS5zdHlsZS50b3Asbj0tMSpwYXJzZUludCh0fHxcIjBcIik7ZS5zdHlsZS5wb3NpdGlvbj1cIlwiLGUuc3R5bGUudG9wPVwiXCIsbiYmd2luZG93LnNjcm9sbFRvKDAsLTEqcGFyc2VJbnQodHx8XCIwXCIpKX0pLFtdKX19fSwzNTg6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO3ZhciBvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlU21vb3RoU2Nyb2xsPXZvaWQgMDt2YXIgcj1uKDE1NiksdT1vKG4oODg4KSk7dC51c2VTbW9vdGhTY3JvbGw9ZnVuY3Rpb24oZSl7dmFyIHQ9KDAsci51c2VSZWYpKG51bGwpLG49ZS5yZWYsbz1lLm9mZnNldCxpPXZvaWQgMD09PW8/MDpvLHM9ZS5zcGVlZCxjPXZvaWQgMD09PXM/NTAwOnM7cmV0dXJuKDAsci51c2VFZmZlY3QpKChmdW5jdGlvbigpe3QuY3VycmVudD1uZXcgdS5kZWZhdWx0KG51bGwse3NwZWVkOmMsc3BlZWRBc0R1cmF0aW9uOiEwfSl9KSxbXSksKDAsci51c2VDYWxsYmFjaykoKGZ1bmN0aW9uKCl7biYmdC5jdXJyZW50JiZ0LmN1cnJlbnQuYW5pbWF0ZVNjcm9sbChuLmN1cnJlbnQsbnVsbCx7b2Zmc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGl9LHVwZGF0ZVVSTDohMX0pfSksW2ksbl0pfX0sMTU2OmZ1bmN0aW9uKHQpe1widXNlIHN0cmljdFwiO3QuZXhwb3J0cz1lfX0sbj17fTtmdW5jdGlvbiBvKGUpe3ZhciByPW5bZV07aWYodm9pZCAwIT09cilyZXR1cm4gci5leHBvcnRzO3ZhciB1PW5bZV09e2V4cG9ydHM6e319O3JldHVybiB0W2VdLmNhbGwodS5leHBvcnRzLHUsdS5leHBvcnRzLG8pLHUuZXhwb3J0c31yZXR1cm4gby5nPWZ1bmN0aW9uKCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGdsb2JhbFRoaXMpcmV0dXJuIGdsb2JhbFRoaXM7dHJ5e3JldHVybiB0aGlzfHxuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpfWNhdGNoKGUpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvd319KCksbyg0MzIpfSgpfSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBpMThuZXh0IGZyb20gJ2kxOG5leHQnO1xuaW1wb3J0IGN4IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IEF1dG9zdWdnZXN0IGZyb20gJ3JlYWN0LWF1dG9zdWdnZXN0JztcbmltcG9ydCB7IGV4ZWN1dGVTZWFyY2ggfSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZXhlY3V0ZS1zZWFyY2gtaW1taWRpYXRlJztcbmltcG9ydCBTdWdnZXN0aW9uSXRlbSBmcm9tICdAZGlnaXRyYW5zaXQtY29tcG9uZW50L2RpZ2l0cmFuc2l0LWNvbXBvbmVudC1zdWdnZXN0aW9uLWl0ZW0nO1xuaW1wb3J0IHtcbiAgZ2V0TmFtZUxhYmVsLFxuICBnZXRTdG9wQ29kZSxcbn0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXVuaXEtYnktbGFiZWwnO1xuaW1wb3J0IHsgZ2V0U3RvcE5hbWUgfSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtaGVscGVycyc7XG5pbXBvcnQgZ2V0TGFiZWwgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1sYWJlbCc7XG5pbXBvcnQgSWNvbiBmcm9tICdAZGlnaXRyYW5zaXQtY29tcG9uZW50L2RpZ2l0cmFuc2l0LWNvbXBvbmVudC1pY29uJztcbmltcG9ydCB7IERhdGVUaW1lLCBTZXR0aW5ncyB9IGZyb20gJ2x1eG9uJztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC9pc0VxdWFsJztcbmltcG9ydCBpc0VtcHR5IGZyb20gJ2xvZGFzaC9pc0VtcHR5JztcbmltcG9ydCB0cmFuc2xhdGlvbnMgZnJvbSAnLi9oZWxwZXJzL3RyYW5zbGF0aW9ucyc7XG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vaGVscGVycy9zdHlsZXMuc2Nzcyc7XG5pbXBvcnQgTW9iaWxlU2VhcmNoIGZyb20gJy4vaGVscGVycy9Nb2JpbGVTZWFyY2gnO1xuaW1wb3J0IHdpdGhTY3JvbGxMb2NrIGZyb20gJy4vaGVscGVycy93aXRoU2Nyb2xsTG9jayc7XG5cblNldHRpbmdzLmRlZmF1bHRMb2NhbGUgPSAnZW4nO1xuXG5pMThuZXh0LmluaXQoe1xuICBmYWxsYmFja0xuZzogJ2ZpJyxcbiAgZGVmYXVsdE5TOiAndHJhbnNsYXRpb24nLFxuICBpbnRlcnBvbGF0aW9uOiB7XG4gICAgZXNjYXBlVmFsdWU6IGZhbHNlLCAvLyBub3QgbmVlZGVkIGZvciByZWFjdCBhcyBpdCBlc2NhcGVzIGJ5IGRlZmF1bHRcbiAgfSxcbn0pO1xuXG5jb25zdCBMb2FkaW5nID0gcHJvcHMgPT4gKFxuICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydzcGlubmVyLWxvYWRlciddfT5cbiAgICB7KHByb3BzICYmIHByb3BzLmNoaWxkcmVuKSB8fCAoXG4gICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlc1snc3Itb25seSddfT57aTE4bmV4dC50KCdsb2FkaW5nJyl9PC9zcGFuPlxuICAgICl9XG4gIDwvZGl2PlxuKTtcblxuTG9hZGluZy5wcm9wVHlwZXMgPSB7XG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbn07XG5cbkxvYWRpbmcuZGVmYXVsdFByb3BzID0ge1xuICBjaGlsZHJlbjogdW5kZWZpbmVkLFxufTtcblxuY29uc3QgZ2V0UGxhdGZvcm0gPSBhZGRlbmR1bSA9PiB7XG4gIGlmICghYWRkZW5kdW0gfHwgIWFkZGVuZHVtLkdURlMucGxhdGZvcm0pIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHsgbW9kZXMsIHBsYXRmb3JtIH0gPSBhZGRlbmR1bS5HVEZTO1xuICBjb25zdCB0eXBlID1cbiAgICBtb2RlcyAmJiBtb2Rlc1swXSA9PT0gJ1JBSUwnID8gaTE4bmV4dC50KCd0cmFjaycpIDogaTE4bmV4dC50KCdwbGF0Zm9ybScpO1xuICByZXR1cm4gW3R5cGUsIHBsYXRmb3JtXTtcbn07XG5cbmZ1bmN0aW9uIGdldFN1Z2dlc3Rpb25Db250ZW50KGl0ZW0pIHtcbiAgaWYgKGl0ZW0udHlwZSAhPT0gJ0Z1dHVyZVJvdXRlJykge1xuICAgIGlmIChpdGVtLnR5cGUgPT09ICdTZWxlY3RGcm9tTWFwJykge1xuICAgICAgcmV0dXJuIFsnJywgaTE4bmV4dC50KCdzZWxlY3QtZnJvbS1tYXAnKV07XG4gICAgfVxuICAgIGlmIChpdGVtLnR5cGUgPT09ICdDdXJyZW50TG9jYXRpb24nKSB7XG4gICAgICByZXR1cm4gWycnLCBpMThuZXh0LnQoJ3VzZS1vd24tcG9zaXRpb24nKV07XG4gICAgfVxuICAgIGlmIChpdGVtLnR5cGUgPT09ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJykge1xuICAgICAgcmV0dXJuIFsnJywgaTE4bmV4dC50KCdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJyldO1xuICAgIH1cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0ICovXG4gICAgbGV0IFtuYW1lLCBsYWJlbF0gPSBnZXROYW1lTGFiZWwoaXRlbS5wcm9wZXJ0aWVzLCB0cnVlKTtcbiAgICBsZXQgc3VnZ2VzdGlvblR5cGU7XG4gICAgaWYgKFxuICAgICAgaXRlbS5wcm9wZXJ0aWVzLmxheWVyLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2Jpa2VyZW50YWwnKSB8fFxuICAgICAgaXRlbS5wcm9wZXJ0aWVzLmxheWVyLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2Jpa2VzdGF0aW9uJylcbiAgICApIHtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gaTE4bmV4dC50KCd2ZWhpY2xlcmVudGFsc3RhdGlvbicpO1xuICAgICAgY29uc3Qgc3RvcENvZGUgPSBpdGVtLnByb3BlcnRpZXMubGFiZWxJZDtcbiAgICAgIHJldHVybiBbc3VnZ2VzdGlvblR5cGUsIG5hbWUsIHVuZGVmaW5lZCwgc3RvcENvZGVdO1xuICAgIH1cblxuICAgIGlmIChpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdiaWtlcGFyaycpIHtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gaTE4bmV4dC50KCdiaWtlcGFyaycpO1xuICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uVHlwZSwgbmFtZSwgdW5kZWZpbmVkLCB1bmRlZmluZWRdO1xuICAgIH1cblxuICAgIGlmIChpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdjYXJwYXJrJykge1xuICAgICAgc3VnZ2VzdGlvblR5cGUgPSBpMThuZXh0LnQoJ2NhcnBhcmsnKTtcbiAgICAgIHJldHVybiBbc3VnZ2VzdGlvblR5cGUsIG5hbWUsIHVuZGVmaW5lZCwgdW5kZWZpbmVkXTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbS5wcm9wZXJ0aWVzLm1vZGUpIHtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gaTE4bmV4dC50KFxuICAgICAgICBpdGVtLnByb3BlcnRpZXMubW9kZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ2Zhdm91cml0ZScsICcnKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGxheWVyID0gaXRlbS5wcm9wZXJ0aWVzLmxheWVyXG4gICAgICAgIC5yZXBsYWNlKCdyb3V0ZS0nLCAnJylcbiAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgLnJlcGxhY2UoJ2Zhdm91cml0ZScsICcnKTtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gaTE4bmV4dC50KGxheWVyKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBpdGVtLnByb3BlcnRpZXMuaWQgJiZcbiAgICAgIChpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdzdG9wJyB8fCBpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdzdGF0aW9uJylcbiAgICApIHtcbiAgICAgIGNvbnN0IHN0b3BDb2RlID0gZ2V0U3RvcENvZGUoaXRlbS5wcm9wZXJ0aWVzKTtcbiAgICAgIGNvbnN0IG1vZGUgPSBpdGVtLnByb3BlcnRpZXMuYWRkZW5kdW0/LkdURlMubW9kZXM7XG4gICAgICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKGl0ZW0ucHJvcGVydGllcy5hZGRlbmR1bSk7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBzdWdnZXN0aW9uVHlwZSxcbiAgICAgICAgZ2V0U3RvcE5hbWUobmFtZSwgc3RvcENvZGUpLFxuICAgICAgICBsYWJlbCxcbiAgICAgICAgc3RvcENvZGUsXG4gICAgICAgIG1vZGUsXG4gICAgICAgIHBsYXRmb3JtLFxuICAgICAgXTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnZmF2b3VyaXRlU3RvcCcgfHxcbiAgICAgIGl0ZW0ucHJvcGVydGllcy5sYXllciA9PT0gJ2Zhdm91cml0ZVN0YXRpb24nXG4gICAgKSB7XG4gICAgICBjb25zdCB7IGFkZHJlc3MsIGNvZGUgfSA9IGl0ZW0ucHJvcGVydGllcztcbiAgICAgIGNvbnN0IHN0b05hbWUgPSBhZGRyZXNzID8gZ2V0U3RvcE5hbWUoYWRkcmVzcy5zcGxpdCgnLCcpWzBdLCBjb2RlKSA6IG5hbWU7XG4gICAgICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKGl0ZW0ucHJvcGVydGllcy5hZGRlbmR1bSk7XG4gICAgICByZXR1cm4gW3N1Z2dlc3Rpb25UeXBlLCBzdG9OYW1lLCBsYWJlbCwgY29kZSwgdW5kZWZpbmVkLCBwbGF0Zm9ybV07XG4gICAgfVxuICAgIHJldHVybiBbc3VnZ2VzdGlvblR5cGUsIG5hbWUsIGxhYmVsXTtcbiAgfVxuICBjb25zdCB7IG9yaWdpbiwgZGVzdGluYXRpb24gfSA9IGl0ZW0ucHJvcGVydGllcztcbiAgY29uc3QgdGFpbDEgPSBvcmlnaW4ubG9jYWxpdHkgPyBgLCAke29yaWdpbi5sb2NhbGl0eX0gZm9vYmFyYCA6ICcnO1xuICBjb25zdCB0YWlsMiA9IGRlc3RpbmF0aW9uLmxvY2FsaXR5ID8gYCwgJHtkZXN0aW5hdGlvbi5sb2NhbGl0eX1gIDogJyc7XG4gIGNvbnN0IG5hbWUxID0gb3JpZ2luLm5hbWU7XG4gIGNvbnN0IG5hbWUyID0gZGVzdGluYXRpb24ubmFtZTtcbiAgcmV0dXJuIFtcbiAgICBpMThuZXh0LnQoJ2Z1dHVyZS1yb3V0ZScpLFxuICAgIGAke2kxOG5leHQudCgnb3JpZ2luJyl9ICR7bmFtZTF9JHt0YWlsMX0gJHtpMThuZXh0LnQoXG4gICAgICAnZGVzdGluYXRpb24nLFxuICAgICl9ICR7bmFtZTJ9JHt0YWlsMn1gLFxuICAgIGl0ZW0udHJhbnNsYXRlZFRleHQsXG4gIF07XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZUZ1dHVyZVJvdXRlU3VnZ2VzdGlvblRpbWUoaXRlbSkge1xuICBjb25zdCB0aW1lID0gRGF0ZVRpbWUuZnJvbVNlY29uZHMoTnVtYmVyKGl0ZW0ucHJvcGVydGllcy50aW1lKSk7XG4gIGNvbnN0IG5vdyA9IERhdGVUaW1lLm5vdygpO1xuICBsZXQgc3RyID0gaXRlbS5wcm9wZXJ0aWVzLmFycml2ZUJ5XG4gICAgPyBpMThuZXh0LnQoJ2Fycml2YWwnKVxuICAgIDogaTE4bmV4dC50KCdkZXBhcnR1cmUnKTtcbiAgaWYgKHRpbWUuaGFzU2FtZShub3csICdkYXknKSkge1xuICAgIHN0ciA9IGAke3N0cn0gJHtpMThuZXh0LnQoJ3RvZGF5LWF0Jyl9YDtcbiAgfSBlbHNlIGlmICh0aW1lLmhhc1NhbWUobm93LnBsdXMoeyBkYXlzOiAxIH0pLCAnZGF5JykpIHtcbiAgICBzdHIgPSBgJHtzdHJ9ICR7aTE4bmV4dC50KCd0b21vcnJvdy1hdCcpfWA7XG4gIH0gZWxzZSB7XG4gICAgc3RyID0gYCR7c3RyfSAke3RpbWUudG9Gb3JtYXQoJ2NjYyBkLkwuJyl9YDtcbiAgfVxuICBzdHIgPSBgJHtzdHJ9ICR7dGltZS50b0Zvcm1hdCgnSEg6bW0nKX1gO1xuICByZXR1cm4gc3RyO1xufVxuXG5jb25zdCBnZXRTdWdnZXN0aW9uVmFsdWUgPSBzdWdnZXN0aW9uID0+IHtcbiAgaWYgKFxuICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnIHx8XG4gICAgc3VnZ2VzdGlvbi50eXBlID09PSAnYmFjaydcbiAgKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBnZXRMYWJlbChzdWdnZXN0aW9uLnByb3BlcnRpZXMpO1xufTtcbi8qKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHNlYXJjaENvbnRleHQgPSB7XG4gKiAgIGlzUGVsaWFzTG9jYXRpb25Bd2FyZTogZmFsc2UgLy8gdHJ1ZSAvIGZhbHNlIGRvZXMgTGV0IFBlbGlhcyBzdWdnZXN0IGJhc2VkIG9uIGN1cnJlbnQgdXNlciBsb2NhdGlvblxuICogICBtaW5pbWFsUmVnZXhwOiB1bmRlZmluZWQgLy8gdXNlZCBmb3IgdGVzdGluZyBtaW4uIHJlZ2V4cC4gRm9yIGV4YW1wbGU6IG5ldyBSZWdFeHAoJy57Mix9JyksXG4gKiAgIGxpbmVSZWdleHA6IHVuZGVmaW5lZCAvLyAgaWRlbnRpZnkgc2VhcmNoZXMgZm9yIHJvdXRlIG51bWJlcnMvbGFiZWxzOiBidXMgfCB0cmFpbiB8IG1ldHJvLiBGb3IgZXhhbXBsZTogbmV3IFJlZ0V4cChcbiAqICAgIC8vICAgJyheWzAtOV0rW2Etel0/JHxeW3l1bGVhcGlua3J0ZHpdJHwoXm1bMTJdP2I/JCkpJyxcbiAqICAgIC8vICAnaScsXG4gKiAgICAvLyAgKSxcbiAqICAgVVJMX1BFTElBUzogJycgLy8gdXJsIGZvciBwZWxpYXMgc2VhcmNoZXNcbiAqICAgZmVlZElEczogWydIU0wnLCAnSFNMTGF1dHRhJ10gLy8gRmVlZElkJ3MgbGlrZSAgW0hTTCwgSFNMTGF1dHRhXVxuICogICBnZW9jb2RpbmdTb3VyY2VzOiBbJ29hJywnb3NtJywnbmxzZmknXSAgLy8gc291cmNlcyBmb3IgZ2VvY29kaW5nXG4gKiAgIGdlb2NvZGluZ1NlYXJjaFBhcmFtczsge30gIC8vIFNlYXJjaHBhcm1hcyBmcm8gZ2VvY29kaW5nXG4gKiAgIGdldEZhdm91cml0ZUxvY2F0aW9uczogKCkgPT4gKHt9KSwgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGFycmF5IG9mIGZhdm91cml0ZSBsb2NhdGlvbnMuXG4gKiAgIGdldEZhdm91cml0ZVN0b3BzOiAoKSA9PiAoe30pLCAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGFycmF5IG9mIGZhdm91cml0ZSBzdG9wcy5cbiAqICAgZ2V0TGFuZ3VhZ2U6ICgpID0+ICh7fSksICAgICAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgY3VycmVudCBsYW5ndWFnZS5cbiAqICAgZ2V0RmF2b3VyaXRlUm91dGVzOiAoKSA9PiAoe30pLCAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgYXJyYXkgb2YgZmF2b3VyaXRlIHJvdXRlcy5cbiAqICAgZ2V0UG9zaXRpb25zOiAoKSA9PiAoe30pLCAgICAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgdXNlcidzIGdlb2xvY2F0aW9uLlxuICogICBnZXRSb3V0ZXNRdWVyeTogKCkgPT4gKHt9KSwgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBxdWVyeSBmb3IgZmV0Y2hpbmcgcm91dGVzLlxuICogICBnZXRTdG9wQW5kU3RhdGlvbnNRdWVyeTogKCkgPT4gKHt9KSwgIC8vIEZ1bmN0aW9uIHRoYXQgZmV0Y2hlcyBmYXZvdXJpdGUgc3RvcHMgYW5kIHN0YXRpb25zIGZyb20gZ3JhcGhxbCBBUEkuXG4gKiAgIGdldEZhdm91cml0ZVJvdXRlc1F1ZXJ5OiAoKSA9PiAoe30pLCAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHF1ZXJ5IGZvciBmZXRjaGluZyBmYXZvdXJpdGUgcm91dGVzLlxuICogICBnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnM6ICgpID0+ICh7fSksICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgZmF2b3VyaXRlIGJpa2UgcmVudGFsIHN0YXRpb24uXG4gKiAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uc1F1ZXJ5OiAoKSA9PiAoe30pLCAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgcXVlcnkgZm9yIGZldGNoaW5nIGZhdm91cml0ZSBiaWtlIHJlbnRhbCBzdGF0aW9ucy5cbiAqICAgc3RhcnRMb2NhdGlvbldhdGNoOiAoKSA9PiAoe30pLCAgICAgICAvLyBGdW5jdGlvbiB0aGF0IGxvY2F0ZXMgdXNlcnMgZ2VvbG9jYXRpb24uXG4gKiAgIHNhdmVTZWFyY2g6ICgpID0+ICh7fSksICAgICAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBzYXZlcyBzZWFyY2ggdG8gb2xkIHNlYXJjaGVzIHN0b3JlLlxuICogICBjbGVhck9sZFNlYXJjaGVzOiAoKSA9PiAoe30pLCAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgY2xlYXJzIG9sZCBzZWFyY2hlcyBzdG9yZS5cbiAqICAgZ2V0RnV0dXJlUm91dGVzOiAoKSA9PiAoe30pLCAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybiBmdXR1cmUgcm91dGVzXG4gKiAgIHNhdmVGdXR1cmVSb3V0ZTogKCkgPT4gKHt9KSwgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBzYXZlcyBhIGZ1dHVyZSByb3V0ZVxuICogICBjbGVhckZ1dHVyZVJvdXRlczogKCkgPT4gKHt9KSwgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgY2xlYXJzIGZ1dHVyZSByb3V0ZXNcbiAqIH07XG4gKiBjb25zdCBsYW5nID0gJ2ZpJzsgLy8gZW4sIGZpIG9yIHN2XG4gKiBjb25zdCBvblNlbGVjdCA9IChpdGVtLCBpZCkgPT4ge1xuICogICAgLy8gRnVudGlvbmFsaXR5IHdoZW4gdXNlciBzZWxlY3RzIGEgc3VnZ2VzaW9ucy4gTm8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyBnaXZlbi5cbiAqICAgIHJldHVybiBudWxsO1xuICogfTtcbiAqIGNvbnN0IG9uQ2xlYXIgPSBpZCA9PiB7XG4gKiAgICAvLyBDYWxsZWQgIHdoZW4gdXNlciBjbGlja3MgdGhlIGNsZWFyIHNlYXJjaCBzdHJpbmcgYnV0dG9uLiBObyBkZWZhdWx0IGltcGxlbWVudGF0aW9uLlxuICogICAgcmV0dXJuIG51bGw7XG4gKiB9O1xuICogY29uc3QgZ2V0QXV0b1N1Z2dlc3RJY29uczoge1xuICogICAvLyBDYWxsZWQgZm9yIGV2ZXJ5IGNpdHkgYmlrZSBzdGF0aW9uIHJlbmRlcmVkIGFzIGEgc2VhcmNoIHN1Z2dlc3Rpb24uIFNob3VsZCByZXR1cm4gdGhlIGljb24gYW5kXG4gKiAgIC8vIGNvbG9yIHVzZWQgZm9yIHRoYXQgc3RhdGlvbi4gVHdvIGljb25zIGFyZSBhdmFpbGFibGUsICdjaXR5YmlrZS1zdG9wLWRpZ2l0cmFuc2l0JyBhbmRpdHliaWtlLXN0b3AtZGlnaXRyYW5zaXQtc2Vjb25kYXJ5Jy5cbiAqICAgY2l0eWJpa2VzOiBzdGF0aW9uID0+IHtcbiAqICAgICAgcmV0dXJuIFsnY2l0eWJpa2Utc3RvcC1kaWdpdHJhbnNpdCcsICcjZjJiNjJkJ107XG4gKiAgIH1cbiAqIH1cbiAqIGNvbnN0IHRyYW5zcG9ydE1vZGUgPSB1bmRlZmluZWQ7XG4gKiBjb25zdCBwbGFjZWhvbGRlciA9IFwic3RvcC1uZWFyLXlvdVwiO1xuICogY29uc3QgdGFyZ2V0cyA9IFsnTG9jYXRpb25zJywgJ1N0b3BzJywgJ1JvdXRlcyddOyAvLyBEZWZpbmVzIHdoYXQgeW91IGFyZSBzZWFyY2hpbmcuIE9wdGlvbnMgYXJlIExvY2F0aW9ucywgU3RvcHMsIFN0YXRpb25zLCBSb3V0ZXMsIFZlaGljbGVSZW50YWxTdGF0aW9ucywgRnV0dXJlUm91dGVzLCBNYXBQb3NpdGlvbiBhbmQgQ3VycmVudFBvc2l0aW9uLiBMZWF2ZSBlbXB0eSB0byBzZWFyY2ggYWxsIHRhcmdldHMuXG4gKiBjb25zdCBzb3VyY2VzID0gWydGYXZvdXJpdGUnLCAnSGlzdG9yeScsICdEYXRhc291cmNlJ10gLy8gRGVmaW5lcyB3aGVyZSB5b3UgYXJlIHNlYXJjaGluZy4gYWxsIGF2YWlsYWJsZSBhcmU6IEZhdm91cml0ZSwgSGlzdG9yeSAocHJldmlvdXNseSBzZWFyY2hlZCBzZWFyY2hlcykgYW5kIERhdGFzb3VyY2UuIExlYXZlIGVtcHR5IHRvIHVzZSBhbGwgc291cmNlcy5cbiAqIHJldHVybiAoXG4gKiAgPERUQXV0b3N1Z2dlc3RcbiAqICAgIGFwcEVsZW1lbnQ9e2FwcEVsZW1lbnR9IC8vIFJlcXVpcmVkLiBSb290IGVsZW1lbnQncyBpZC4gTmVlZGVkIGZvciByZWFjdC1tb2RhbCBjb21wb25lbnQuXG4gKiAgICBzZWFyY2hDb250ZXh0PXtzZWFyY2hDb250ZXh0fVxuICogICAgaWNvbj1cIm9yaWdpblwiIC8vIE9wdGlvbmFsIFN0cmluZyBmb3IgaWNvbiB0aGF0IGlzIHNob3duIGxlZnQgb2Ygc2VhcmNoZmllbGQuIHVzZWQgd2l0aCBJY29uIGxpYnJhcnlcbiAqICAgIGlkPVwib3JpZ2luXCIgLy8gdXNlZCBmb3Igc3R5bGUgcHJvcHMgYW5kIGluZm8gZm9yIGNvbXBvbmVudC5cbiAqICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn0gLy8gU3RyaW5nIHRoYXQgaXMgc2hvd25zIGluaXRhbGx5IGluIHNlYXJjaCBmaWVsZFxuICogICAgdmFsdWU9XCJcIiAvLyBlLmcuIHVzZXIgdHlwZWQgc3RyaW5nIHRoYXQgaXMgc2hvd24gaW4gc2VhcmNoIGZpZWxkXG4gKiAgICBvblNlbGVjdD17b25TZWxlY3R9XG4gKiAgICBvbkNsZWFyPXtvbkNsZWFyfVxuICogICAgYXV0b0ZvY3VzPXtmYWxzZX0gLy8gZGVmaW5lcyB0aGF0IHNob3VsZCB0aGlzIGZpZWxkIGJlIGF1dG9tYXRpY2FsbHkgZm9jdXNlZCB3aGVuIHBhZ2UgaXMgbG9hZGVkLlxuICogICAgbGFuZz17bGFuZ31cbiAqICAgIGdldEF1dG9TdWdnZXN0SWNvbnM9e2dldEF1dG9TdWdnZXN0SWNvbnN9XG4gKiAgICB0cmFuc3BvcnRNb2RlPXt0cmFuc3BvcnRNb2RlfSAvLyB0cmFuc3BvcnRtb2RlIHdpdGggd2hpY2ggd2UgZmlsdGVyIHRoZSByb3V0ZXMsIGUuZy4gcm91dGUtQlVTXG4gKiAgICBnZW9jb2RpbmdTaXplPXsxMH0gLy8gZGVmaW5lcyBob3cgbWFueSBzdG9wcyBhbmQgc3RhdGlvbnMgdG8gZmV0Y2ggZnJvbSBnZW9jb2RpbmcuIFVzZWZ1bCBpZiB5b3Ugd2FudCB0byBmaWx0ZXIgdGhlIHJlc3VsdHMgYW5kIHN0aWxsIGdldCBhIHJlYXNvbmFibGUgYW1vdW50IG9mIHN1Z2dlc3Rpb25zLlxuICogICAgZmlsdGVyUmVzdWx0cz17cmVzdWx0cyA9PiByZXR1cm4gcmVzdWx0c30gLy8gT3B0aW9uYWwgZmlsdGVyaW5nIGZ1bmN0aW9uIGZvciByb3V0ZXMgYW5kIHN0b3BzXG4gKiAgICBoYW5kZWxWaWFQb2ludHM9eygpID0+IHJldHVybiBudWxsIH0gLy8gT3B0aW9uYWwgVmlhIHBvaW50IGhhbmRsaW5nIGxvZ2ljLiBUaGlzIGlzIGN1cnJlbnRseSBtYW5hZ2VkIHdpdGggRFRBdXRvc3VnZ2VzdHBhbmVsIGJ5IGRlZmF1bHQsIGJ1dCBpZiBEVEF1dG9zdWdnZXN0IGlzIHVzZWQgc2VwZXJhdGVsbHkgb3duIGltcGxlbWVudGF0aW9uIG11c3QgYmUgcHJvdmlkZWQuXG4gKiAgICBmb2N1c0NoYW5nZT17KCkgPT4gcmV0dXJuIG51bGx9IC8vIFdoZW4gc3VnZ2VzdGlvbiBpcyBzZWxlY3RlZCwgaGFuZGxlIGNoYW5naW5nIGZvY3VzLiBUaGlzIGlzIGN1cnJlbnRseSBtYW5hZ2VkIHdpdGggRFRBdXRvc3VnZ2VzdHBhbmVsIGJ5IGRlZmF1bHQsIGJ1dCBpZiBEVEF1dG9zdWdnZXN0IGlzIHVzZWQgc2VwZXJhdGVsbHkgb3duIGltcGxlbWVudGF0aW9uIG11c3QgYmUgcHJvdmlkZWQuXG4gKiAgICBzdG9yZVJlZj17KCkgPT4gcmV0dXJuIG51bGx9IC8vIEZ1bmN0aW9uYWxpdHkgdG8gc3RvcmUgcmVmcy4gQ3VycmVubHR5IG1hbmFnZWQgd2l0aCBEVEF1dG9zdWdnZXN0cGFuZWwgYnkgZGVmYXVsdCwgYnV0IGlmIERUQXV0b3N1Z2dlc3QgaXMgdXNlZCBzZXBlcmF0ZWxseSBvd24gaW1wbGVtZW50YXRpb24gbXVzdCBiZSBwcm92aWRlZC5cbiAqICAgIHNvdXJjZXM9e3NvdXJjZXN9XG4gKiAgICB0YXJnZXRzPXt0YXJnZXRzfVxuICogICAgaXNNb2JpbGUgIC8vIE9wdGlvbmFsLiBEZWZhdWx0cyB0byBmYWxzZS4gV2hldGhlciB0byB1c2UgbW9iaWxlIHNlYXJjaC5cbiAqICAgIG1vYmlsZUxhYmVsPVwiQ3VzdG9tIGxhYmVsXCIgLy8gT3B0aW9uYWwuIEN1c3RvbSBsYWJlbCB0ZXh0IGZvciBhdXRvc3VnZ2VzdCBmaWVsZCBvbiBtb2JpbGUuXG4gKiAgICBpbnB1dENsYXNzTmFtZT1cIlwiIC8vIE9wdGlvbmFsLiBDdXN0b20gY2xhc3NuYW1lIGFwcGxpZWQgdG8gdGhlIGlucHV0IGVsZW1lbnQgb2YgdGhlIGNvbXBvbmVudCBmb3IgcHJvdmlkaW5nIENTUyBzdHlsZXMuXG4gKiAgICB0cmFuc2xhdGVkUGxhY2Vob2xkZXI9IC8vIE9wdGlvbmFsLiBDdXN0b24gdHJhbnNsYXRlZCBwbGFjZWhvbGRlciB0ZXh0IGZvciBhdXRvc3VnZ2VzdCBmaWVsZC5cbiAqL1xuY2xhc3MgRFRBdXRvc3VnZ2VzdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgYXBwRWxlbWVudDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGljb246IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgaWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHRyYW5zbGF0ZWRQbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzZWFyY2hDb250ZXh0OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgVVJMX1BFTElBUzogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgY29udGV4dDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgIGNsZWFyT2xkU2VhcmNoZXM6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgY2xlYXJGdXR1cmVSb3V0ZXM6IFByb3BUeXBlcy5mdW5jLFxuICAgIH0pLmlzUmVxdWlyZWQsXG4gICAgYXJpYUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIG9uU2VsZWN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHRyYW5zcG9ydE1vZGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZmlsdGVyUmVzdWx0czogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZ2VvY29kaW5nU2l6ZTogUHJvcFR5cGVzLm51bWJlcixcbiAgICBvbkNsZWFyOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBzdG9yZVJlZjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgaGFuZGxlVmlhUG9pbnRzOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBmb2N1c0NoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgbGFuZzogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzb3VyY2VzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nKSxcbiAgICB0YXJnZXRzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nKSxcbiAgICBpc01vYmlsZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgaG92ZXJDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBhY2Nlc3NpYmxlUHJpbWFyeUNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHRpbWVab25lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHBhdGhPcHRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgcm91dGVzUHJlZml4OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgc3RvcHNQcmVmaXg6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgfSksXG4gICAgbW9iaWxlTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgbG9jazogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICB1bmxvY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgcmVmUG9pbnQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBhZGRyZXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgbGF0OiBQcm9wVHlwZXMubnVtYmVyLFxuICAgICAgbG9uOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIH0pLFxuICAgIGlucHV0Q2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGZvbnRXZWlnaHRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgbWVkaXVtOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIH0pLFxuICAgIG1vZGVJY29uQ29sb3JzOiBQcm9wVHlwZXMub2JqZWN0T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gICAgZ2V0QXV0b1N1Z2dlc3RJY29uczogUHJvcFR5cGVzLm9iamVjdE9mKFByb3BUeXBlcy5mdW5jKSxcbiAgICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgbW9kZVNldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzaG93U2Nyb2xsOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBpc0VtYmVkZGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgfTtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgY2xhc3NOYW1lOiAnJyxcbiAgICBpY29uOiB1bmRlZmluZWQsXG4gICAgdmFsdWU6ICcnLFxuICAgIHRyYW5zcG9ydE1vZGU6IHVuZGVmaW5lZCxcbiAgICBmaWx0ZXJSZXN1bHRzOiB1bmRlZmluZWQsXG4gICAgb25DbGVhcjogdW5kZWZpbmVkLFxuICAgIGxhbmc6ICdmaScsXG4gICAgc3RvcmVSZWY6IHVuZGVmaW5lZCxcbiAgICBoYW5kbGVWaWFQb2ludHM6IHVuZGVmaW5lZCxcbiAgICBmb2N1c0NoYW5nZTogdW5kZWZpbmVkLFxuICAgIGdldEF1dG9TdWdnZXN0SWNvbnM6IHVuZGVmaW5lZCxcbiAgICBzb3VyY2VzOiBbXSxcbiAgICB0YXJnZXRzOiB1bmRlZmluZWQsXG4gICAgaXNNb2JpbGU6IGZhbHNlLFxuICAgIGlzRW1iZWRkZWQ6IGZhbHNlLFxuICAgIGdlb2NvZGluZ1NpemU6IHVuZGVmaW5lZCxcbiAgICBjb2xvcjogJyMwMDdhYzknLFxuICAgIGhvdmVyQ29sb3I6ICcjMDA2MmExJyxcbiAgICBhY2Nlc3NpYmxlUHJpbWFyeUNvbG9yOiAnIzAwNzRiZScsXG4gICAgdGltZVpvbmU6ICdFdXJvcGUvSGVsc2lua2knLFxuICAgIHBhdGhPcHRzOiB7XG4gICAgICByb3V0ZXNQcmVmaXg6ICdsaW5qYXQnLFxuICAgICAgc3RvcHNQcmVmaXg6ICdweXNha2l0JyxcbiAgICB9LFxuICAgIGFyaWFMYWJlbDogdW5kZWZpbmVkLFxuICAgIG1vYmlsZUxhYmVsOiB1bmRlZmluZWQsXG4gICAgaW5wdXRDbGFzc05hbWU6ICcnLFxuICAgIHRyYW5zbGF0ZWRQbGFjZWhvbGRlcjogdW5kZWZpbmVkLFxuICAgIGZvbnRXZWlnaHRzOiB7XG4gICAgICBtZWRpdW06IDUwMCxcbiAgICB9LFxuICAgIG1vZGVJY29uQ29sb3JzOiB7XG4gICAgICAnbW9kZS1idXMnOiAnIzAwN2FjOScsXG4gICAgICAnbW9kZS1yYWlsJzogJyM4YzQ3OTknLFxuICAgICAgJ21vZGUtdHJhbSc6ICcjMDA4MTUxJyxcbiAgICAgICdtb2RlLW1ldHJvJzogJyNlZDhjMDAnLFxuICAgICAgJ21vZGUtZmVycnknOiAnIzAwN0E5NycsXG4gICAgICAnbW9kZS1jaXR5YmlrZSc6ICcjZjJiNjJkJyxcbiAgICAgICdtb2RlLWZ1bmljdWxhcic6ICcjZmYwMGZmJyxcbiAgICB9LFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBtb2RlU2V0OiB1bmRlZmluZWQsXG4gICAgc2hvd1Njcm9sbDogZmFsc2UsXG4gICAgcmVmUG9pbnQ6IHt9LFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIFNldHRpbmdzLmRlZmF1bHRab25lID0gcHJvcHMudGltZVpvbmU7XG4gICAgU2V0dGluZ3MuZGVmYXVsdExvY2FsZSA9IHByb3BzLmxhbmc7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHZhbHVlOiBwcm9wcy52YWx1ZSxcbiAgICAgIHN1Z2dlc3Rpb25zOiBbXSxcbiAgICAgIGVkaXRpbmc6IGZhbHNlLFxuICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICByZW5kZXJNb2JpbGVTZWFyY2g6IGZhbHNlLFxuICAgICAgc291cmNlczogcHJvcHMuc291cmNlcyxcbiAgICAgIG93blBsYWNlczogZmFsc2UsXG4gICAgICB0eXBpbmdUaW1lcjogbnVsbCxcbiAgICAgIHR5cGluZzogZmFsc2UsXG4gICAgICBwZW5kaW5nU2VsZWN0aW9uOiBudWxsLFxuICAgICAgc3VnZ2VzdGlvbkluZGV4OiAwLFxuICAgICAgY2xlYW5FeGVjdXRlZDogZmFsc2UsXG4gICAgICBzY3JvbGxZOiAwLFxuICAgIH07XG4gICAgT2JqZWN0LmtleXModHJhbnNsYXRpb25zKS5mb3JFYWNoKGxhbmcgPT4ge1xuICAgICAgaTE4bmV4dC5hZGRSZXNvdXJjZUJ1bmRsZShsYW5nLCAndHJhbnNsYXRpb24nLCB0cmFuc2xhdGlvbnNbbGFuZ10pO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gRFQtNDA3NDogV2hlbiBhIHVzZXIncyBsb2NhdGlvbiBpcyB1cGRhdGVkIERUQXV0b3N1Z2dlc3Qgd291bGQgcmUtcmVuZGVyIGNhdXNpbmcgc3VnZ2VzdGlvbiBsaXN0IHRvIHJlc2V0LlxuICAvLyBUaGlzIHdpbGwgcHJldmVudCBpdC5cbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlKSB7XG4gICAgcmV0dXJuICFpc0VxdWFsKG5leHRTdGF0ZSwgdGhpcy5zdGF0ZSkgfHwgIWlzRXF1YWwobmV4dFByb3BzLCB0aGlzLnByb3BzKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICBpZiAoaTE4bmV4dC5sYW5ndWFnZSAhPT0gdGhpcy5wcm9wcy5sYW5nKSB7XG4gICAgICBpMThuZXh0LmNoYW5nZUxhbmd1YWdlKHRoaXMucHJvcHMubGFuZyk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNhbWVsY2FzZVxuICBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcbiAgICAvLyB3YWl0IHVudGlsIGFkZHJlc3MgaXMgc2V0IG9yIGdlb2xvY2F0aW9uaW5nIGZhaWxzXG4gICAgaWYgKG5leHRQcm9wcy52YWx1ZSAhPT0gdGhpcy5zdGF0ZS52YWx1ZSAmJiAhdGhpcy5zdGF0ZS5lZGl0aW5nKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgdmFsdWU6IG5leHRQcm9wcy52YWx1ZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2hhbmdlID0gKGV2ZW50LCB7IG5ld1ZhbHVlLCBtZXRob2QgfSkgPT4ge1xuICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgdmFsdWU6IHRoaXMuZklucHV0IHx8IG5ld1ZhbHVlIHx8ICcnLFxuICAgICAgcmVuZGVyTW9iaWxlU2VhcmNoOiB0aGlzLnByb3BzLmlzTW9iaWxlLFxuICAgIH07XG4gICAgLy8gUmVtb3ZlIGZpbGxlZCBpbnB1dCB2YWx1ZSBzbyBpdCB3b250IGJlIHJldXNlZCB1bm5lY2Vzc2FyeVxuICAgIHRoaXMuZklucHV0ID0gbnVsbDtcbiAgICBpZiAoIXRoaXMuc3RhdGUuZWRpdGluZykge1xuICAgICAgbmV3U3RhdGUuZWRpdGluZyA9IHRydWU7XG4gICAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlLCAoKSA9PlxuICAgICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogbmV3VmFsdWUgfHwgJycgfSksXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAobWV0aG9kICE9PSAnZW50ZXInIHx8IHRoaXMuc3RhdGUudmFsaWQpIHtcbiAgICAgIC8vIHRlc3QgYWJvdmUgZHJvcHMgdW5uZWNlc3NhcnkgdXBkYXRlXG4gICAgICAvLyB3aGVuIHVzZXIgaGl0cyBlbnRlciBidXQgc2VhcmNoIGlzIHVuZmluaXNoZWRcbiAgICAgIGlmICh0aGlzLnN0YXRlLnR5cGluZ1RpbWVyKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnN0YXRlLnR5cGluZ1RpbWVyKTtcbiAgICAgIH1cbiAgICAgIGlmIChtZXRob2QgPT09ICd0eXBlJykge1xuICAgICAgICAvLyBhZnRlciB0aW1lb3V0IHJ1bnMsIGFyaWEgYWxlcnQgd2lsbCBhbm5vdW5jZSBjdXJyZW50IHNlbGVjdGlvblxuICAgICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyB0eXBpbmc6IGZhbHNlIH0pO1xuICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgbmV3U3RhdGUudHlwaW5nVGltZXIgPSB0aW1lcjtcbiAgICAgICAgbmV3U3RhdGUudHlwaW5nID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUpO1xuICAgIH1cbiAgfTtcblxuICBvbkJsdXIgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuc3RhdGUuZWRpdGluZykge1xuICAgICAgdGhpcy5pbnB1dC5mb2N1cygpO1xuICAgIH1cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGVkaXRpbmc6IGZhbHNlLFxuICAgICAgcmVuZGVyTW9iaWxlU2VhcmNoOiBmYWxzZSxcbiAgICAgIHZhbHVlOiB0aGlzLnByb3BzLnZhbHVlLFxuICAgIH0pO1xuICAgIGlmICh0aGlzLnByb3BzLmlzTW9iaWxlICYmIHRoaXMuc3RhdGUucmVuZGVyTW9iaWxlU2VhcmNoKSB7XG4gICAgICB0aGlzLmNsb3NlTW9iaWxlU2VhcmNoKCk7XG4gICAgfVxuICB9O1xuXG4gIG9uU2VsZWN0ZWQgPSAoZSwgcmVmKSA9PiB7XG4gICAgaWYgKHRoaXMuc3RhdGUudmFsaWQpIHtcbiAgICAgIGlmIChyZWYuc3VnZ2VzdGlvbi50eXBlID09PSAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2VzOiBbJ0Zhdm91cml0ZScsICdCYWNrJ10sXG4gICAgICAgICAgICBvd25QbGFjZXM6IHRydWUsXG4gICAgICAgICAgICBwZW5kaW5nU2VsZWN0aW9uOiByZWYuc3VnZ2VzdGlvbi50eXBlLFxuICAgICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6ICcnIH0pO1xuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgcmVmLnN1Z2dlc3Rpb24udHlwZSA9PT0gJ2JhY2snIHx8XG4gICAgICAgIHJlZi5zdWdnZXN0aW9uLnR5cGUgPT09ICdGdXR1cmVSb3V0ZSdcbiAgICAgICkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNvdXJjZXM6IHRoaXMucHJvcHMuc291cmNlcyxcbiAgICAgICAgICAgIG93blBsYWNlczogZmFsc2UsXG4gICAgICAgICAgICBwZW5kaW5nU2VsZWN0aW9uOiByZWYuc3VnZ2VzdGlvbi50eXBlLFxuICAgICAgICAgICAgc3VnZ2VzdGlvbkluZGV4OiByZWYuc3VnZ2VzdGlvbkluZGV4LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6ICcnIH0pO1xuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0aW9uRG9uZSA9IHRydWU7IC8vIHNlbGVjdGlvbiBkb25lLCBkbyBub3QgbGV0IHVwY29taW5nIGtleWJvYXJkIGV2ZW50cyBjb25mdXNlIHRoZSBmbG93XG4gICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICB7XG4gICAgICAgICAgZWRpdGluZzogZmFsc2UsXG4gICAgICAgICAgdmFsdWU6IHJlZi5zdWdnZXN0aW9uVmFsdWUsXG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0aGlzLmlucHV0LmJsdXIoKTtcbiAgICAgICAgICBpZiAodGhpcy5wcm9wcy5oYW5kbGVWaWFQb2ludHMpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMuaGFuZGxlVmlhUG9pbnRzKHJlZi5zdWdnZXN0aW9uLCByZWYuc3VnZ2VzdGlvbkluZGV4KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5vblNlbGVjdChyZWYuc3VnZ2VzdGlvbiwgdGhpcy5wcm9wcy5pZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHJlbmRlck1vYmlsZVNlYXJjaDogZmFsc2UsXG4gICAgICAgICAgICAgIHNvdXJjZXM6IHRoaXMucHJvcHMuc291cmNlcyxcbiAgICAgICAgICAgICAgb3duUGxhY2VzOiBmYWxzZSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbnM6IFtdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Eb25lID0gZmFsc2U7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5wcm9wcy5mb2N1c0NoYW5nZSAmJlxuICAgICAgICAgICAgKCF0aGlzLnByb3BzLmlzTW9iaWxlIHx8IHRoaXMucHJvcHMuaXNFbWJlZGRlZClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMuZm9jdXNDaGFuZ2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMucHJvcHMuaXNNb2JpbGUgJiYgdGhpcy5zdGF0ZS5yZW5kZXJNb2JpbGVTZWFyY2gpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VNb2JpbGVTZWFyY2goKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICBwcmV2U3RhdGUgPT4gKHtcbiAgICAgICAgICBwZW5kaW5nU2VsZWN0aW9uOiBwcmV2U3RhdGUudmFsdWUsXG4gICAgICAgIH0pLFxuICAgICAgICAoKSA9PiB0aGlzLmNoZWNrUGVuZGluZ1NlbGVjdGlvbigpLCAvLyBzZWFyY2ggbWF5IGZpbmlzaCBkdXJpbmcgc3RhdGUgY2hhbmdlXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICBvblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWQgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBzdWdnZXN0aW9uczogW10sXG4gICAgICBzb3VyY2VzOiB0aGlzLnByb3BzLnNvdXJjZXMsXG4gICAgICBvd25QbGFjZXM6IGZhbHNlLFxuICAgICAgZWRpdGluZzogZmFsc2UsXG4gICAgfSk7XG4gIH07XG5cbiAgY2hlY2tQZW5kaW5nU2VsZWN0aW9uID0gKCkgPT4ge1xuICAgIGlmIChcbiAgICAgICh0aGlzLnN0YXRlLnBlbmRpbmdTZWxlY3Rpb24gPT09ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyB8fFxuICAgICAgICB0aGlzLnN0YXRlLnBlbmRpbmdTZWxlY3Rpb24gPT09ICdiYWNrJykgJiZcbiAgICAgIHRoaXMuc3RhdGUudmFsaWRcbiAgICApIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgIHtcbiAgICAgICAgICBwZW5kaW5nU2VsZWN0aW9uOiBudWxsLFxuICAgICAgICAgIGVkaXRpbmc6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0aGlzLmlucHV0LmZvY3VzKCk7XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgLy8gYWNjZXB0IGFmdGVyIGFsbCBvbmdvaW5nIHNlYXJjaGVzIGhhdmUgZmluaXNoZWRcbiAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGUucGVuZGluZ1NlbGVjdGlvbiAmJiB0aGlzLnN0YXRlLnZhbGlkKSB7XG4gICAgICAvLyBmaW5pc2ggdGhlIHNlbGVjdGlvbiBieSBwaWNraW5nIGZpcnN0ID0gYmVzdCBtYXRjaCBvciB3aXRoICdGdXR1cmVSb3V0ZScgYnkgc3VnZ2VzdGlvbkluZGV4XG4gICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICB7XG4gICAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogbnVsbCxcbiAgICAgICAgICBlZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnN0YXRlLnN1Z2dlc3Rpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dC5ibHVyKCk7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5zdGF0ZS5zdWdnZXN0aW9uc1t0aGlzLnN0YXRlLnN1Z2dlc3Rpb25JbmRleF07XG4gICAgICAgICAgICBpZiAoaXRlbS50eXBlICE9PSAnYmFjaycpIHtcbiAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vblNlbGVjdChcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLnN1Z2dlc3Rpb25zW3RoaXMuc3RhdGUuc3VnZ2VzdGlvbkluZGV4XSxcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMucHJvcHMuaXNNb2JpbGUgJiYgdGhpcy5zdGF0ZS5yZW5kZXJNb2JpbGVTZWFyY2gpIHtcbiAgICAgICAgICAgICAgdGhpcy5jbG9zZU1vYmlsZVNlYXJjaCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB0aGlzLnByb3BzLmZvY3VzQ2hhbmdlICYmXG4gICAgICAgICAgICAgICghdGhpcy5wcm9wcy5pc01vYmlsZSB8fCB0aGlzLnByb3BzLmlzRW1iZWRkZWQpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5wcm9wcy5mb2N1c0NoYW5nZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIGNsZWFyQnV0dG9uID0gKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1snY2xlYXItaW5wdXQnXX1cbiAgICAgICAgb25DbGljaz17dGhpcy5jbGVhcklucHV0fVxuICAgICAgICBhcmlhLWxhYmVsPXtpMThuZXh0LnQoJ2NsZWFyLWJ1dHRvbi1sYWJlbCcpfVxuICAgICAgPlxuICAgICAgICA8SWNvbiBpbWc9XCJjbG9zZVwiIGNvbG9yPXt0aGlzLnByb3BzLmNvbG9yfSAvPlxuICAgICAgPC9idXR0b24+XG4gICAgKTtcbiAgfTtcblxuICBmZXRjaEZ1bmN0aW9uID0gKHsgdmFsdWUsIGNsZWFuRXhlY3V0ZWQgfSkgPT4ge1xuICAgIHJldHVybiB0aGlzLnNldFN0YXRlKFxuICAgICAgeyB2YWxpZDogZmFsc2UsIGNsZWFuRXhlY3V0ZWQ6ICFjbGVhbkV4ZWN1dGVkID8gZmFsc2UgOiBjbGVhbkV4ZWN1dGVkIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbkRvbmUpIHtcbiAgICAgICAgICAvLyBkbyBub3QgbGV0IGNvbXBvbmVudCBjYXN0IHVubmVjZXNzYXJ5IHJlcXVlc3RzXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgdGFyZ2V0cyB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgY29uc3QgdXNlQWxsID0gaXNFbXB0eSh0YXJnZXRzKTtcbiAgICAgICAgY29uc3QgaXNMb2NhdGlvblNlYXJjaCA9XG4gICAgICAgICAgaXNFbXB0eSh0YXJnZXRzKSB8fCB0YXJnZXRzLmluY2x1ZGVzKCdMb2NhdGlvbnMnKTtcbiAgICAgICAgbGV0IG5ld1RhcmdldHM7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlLm93blBsYWNlcykge1xuICAgICAgICAgIG5ld1RhcmdldHMgPSBbJ0xvY2F0aW9ucyddO1xuICAgICAgICAgIGlmICh1c2VBbGwgfHwgdGFyZ2V0cy5pbmNsdWRlcygnU3RvcHMnKSkge1xuICAgICAgICAgICAgbmV3VGFyZ2V0cy5wdXNoKCdTdG9wcycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodXNlQWxsIHx8IHRhcmdldHMuaW5jbHVkZXMoJ1N0YXRpb25zJykpIHtcbiAgICAgICAgICAgIG5ld1RhcmdldHMucHVzaCgnU3RhdGlvbnMnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHVzZUFsbCB8fCB0YXJnZXRzLmluY2x1ZGVzKCdWZWhpY2xlUmVudGFsU3RhdGlvbnMnKSkge1xuICAgICAgICAgICAgbmV3VGFyZ2V0cy5wdXNoKCdWZWhpY2xlUmVudGFsU3RhdGlvbnMnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoIXVzZUFsbCkge1xuICAgICAgICAgIG5ld1RhcmdldHMgPSBbLi4udGFyZ2V0c107XG4gICAgICAgICAgLy8gaW4gZGVza3RvcCwgZmF2b3JpdGVzIGFyZSBhY2Nlc3NlZCB2aWEgc3ViIHNlYXJjaFxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGlzTG9jYXRpb25TZWFyY2ggJiZcbiAgICAgICAgICAgICF0aGlzLnByb3BzLmlzTW9iaWxlICYmXG4gICAgICAgICAgICAoaXNFbXB0eSh0aGlzLnByb3BzLnNvdXJjZXMpIHx8XG4gICAgICAgICAgICAgIHRoaXMucHJvcHMuc291cmNlcy5pbmNsdWRlcygnRmF2b3VyaXRlJykpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBuZXdUYXJnZXRzLnB1c2goJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVtb3ZlICBsb2NhdGlvbiBmYXZvdXJpdGVzIGluIGRlc2t0b3Agc2VhcmNoIChjb2xsZWN0aW9uIGl0ZW0gcmVwbGFjZXMgaXQgaW4gdGFyZ2V0IGFycmF5KVxuICAgICAgICBjb25zdCBzb3VyY2VzID1cbiAgICAgICAgICB0aGlzLnN0YXRlLnNvdXJjZXMgJiZcbiAgICAgICAgICB0aGlzLnN0YXRlLnNvdXJjZXMuZmlsdGVyKFxuICAgICAgICAgICAgcyA9PlxuICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgIGlzTG9jYXRpb25TZWFyY2ggJiZcbiAgICAgICAgICAgICAgICBzID09PSAnRmF2b3VyaXRlJyAmJlxuICAgICAgICAgICAgICAgICF0aGlzLnN0YXRlLm93blBsYWNlcyAmJlxuICAgICAgICAgICAgICAgICF0aGlzLnByb3BzLmlzTW9iaWxlXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgKTtcblxuICAgICAgICBleGVjdXRlU2VhcmNoKFxuICAgICAgICAgIG5ld1RhcmdldHMsXG4gICAgICAgICAgc291cmNlcyxcbiAgICAgICAgICB0aGlzLnByb3BzLnRyYW5zcG9ydE1vZGUsXG4gICAgICAgICAgdGhpcy5wcm9wcy5zZWFyY2hDb250ZXh0LFxuICAgICAgICAgIHRoaXMucHJvcHMuZmlsdGVyUmVzdWx0cyxcbiAgICAgICAgICB0aGlzLnByb3BzLmdlb2NvZGluZ1NpemUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaW5wdXQ6IHZhbHVlIHx8ICcnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2VhcmNoUmVzdWx0ID0+IHtcbiAgICAgICAgICAgIGlmIChzZWFyY2hSZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBYWFggdHJhbnNsYXRlcyBjdXJyZW50IGxvY2F0aW9uXG4gICAgICAgICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IChzZWFyY2hSZXN1bHQucmVzdWx0cyB8fCBbXSlcbiAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9uID0+XG4gICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnR5cGUgIT09ICdGdXR1cmVSb3V0ZScgfHxcbiAgICAgICAgICAgICAgICAgIChzdWdnZXN0aW9uLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScgJiZcbiAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5wcm9wZXJ0aWVzLnRpbWUgPlxuICAgICAgICAgICAgICAgICAgICAgIERhdGVUaW1lLm5vdygpLnRvVW5peEludGVnZXIoKSksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLm1hcChzdWdnZXN0aW9uID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnR5cGUgPT09ICdDdXJyZW50TG9jYXRpb24nIHx8XG4gICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnR5cGUgPT09ICdTZWxlY3RGcm9tTWFwJyB8fFxuICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi50eXBlID09PSAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycgfHxcbiAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ2JhY2snXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2xhdGVkID0geyAuLi5zdWdnZXN0aW9uIH07XG4gICAgICAgICAgICAgICAgICB0cmFuc2xhdGVkLnByb3BlcnRpZXMubGFiZWxJZCA9IGkxOG5leHQudChcbiAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5wcm9wZXJ0aWVzLmxhYmVsSWQsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBzdWdnZXN0aW9uO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdmFsdWUgPT09IHRoaXMuc3RhdGUudmFsdWUgfHxcbiAgICAgICAgICAgICAgdmFsdWUgPT09IHRoaXMuc3RhdGUucGVuZGluZ1NlbGVjdGlvbiB8fFxuICAgICAgICAgICAgICB0aGlzLnN0YXRlLnBlbmRpbmdTZWxlY3Rpb24gPT09ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyB8fFxuICAgICAgICAgICAgICB0aGlzLnN0YXRlLnBlbmRpbmdTZWxlY3Rpb24gPT09ICdiYWNrJyB8fFxuICAgICAgICAgICAgICB0aGlzLnN0YXRlLnBlbmRpbmdTZWxlY3Rpb24gPT09ICdGdXR1cmVSb3V0ZSdcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAoKSA9PiB0aGlzLmNoZWNrUGVuZGluZ1NlbGVjdGlvbigpLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy5wcm9wcy5wYXRoT3B0cyxcbiAgICAgICAgICB0aGlzLnByb3BzLnJlZlBvaW50LFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICApO1xuICB9O1xuXG4gIGNsZWFySW5wdXQgPSAoKSA9PiB7XG4gICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICBlZGl0aW5nOiB0cnVlLFxuICAgICAgdmFsdWU6ICcnLFxuICAgICAgc291cmNlczogdGhpcy5wcm9wcy5zb3VyY2VzLFxuICAgICAgb3duUGxhY2VzOiBmYWxzZSxcbiAgICAgIHJlbmRlck1vYmlsZVNlYXJjaDogdGhpcy5wcm9wcy5pc01vYmlsZSxcbiAgICB9O1xuICAgIC8vIG11c3QgdXBkYXRlIHN1Z2dlc3Rpb25zXG4gICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSwgKCkgPT5cbiAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiAnJywgY2xlYW5FeGVjdXRlZDogdHJ1ZSB9KSxcbiAgICApO1xuICAgIGlmICh0aGlzLnByb3BzLm9uQ2xlYXIpIHtcbiAgICAgIHRoaXMucHJvcHMub25DbGVhcih0aGlzLnByb3BzLmlkKTtcbiAgICB9XG4gICAgdGhpcy5pbnB1dC5mb2N1cygpO1xuICB9O1xuXG4gIGlucHV0Q2xpY2tlZCA9IGlucHV0VmFsdWUgPT4ge1xuICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgICB0aGlzLmNsZWFyTG9jYXRpb25UZXh0KCk7XG4gICAgaWYgKHRoaXMucHJvcHMuaXNNb2JpbGUpIHtcbiAgICAgIHRoaXMucHJvcHMubG9jaygpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc3RhdGUuZWRpdGluZykge1xuICAgICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICAgIGVkaXRpbmc6IHRydWUsXG4gICAgICAgIC8vIHJlc2V0IGF0IHN0YXJ0LCBqdXN0IGluIGNhc2Ugd2UgbWlzc2VkIHNvbWV0aGluZ1xuICAgICAgICBwZW5kaW5nU2VsZWN0aW9uOiBudWxsLFxuICAgICAgICByZW5kZXJNb2JpbGVTZWFyY2g6IHRoaXMucHJvcHMuaXNNb2JpbGUsXG4gICAgICB9O1xuXG4gICAgICAvLyBEVC0zMjYzOiBhZGRlZCBzdGF0ZUtleURvd25cbiAgICAgIGNvbnN0IHN0YXRlS2V5RG93biA9IHtcbiAgICAgICAgZWRpdGluZzogdHJ1ZSxcbiAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogbnVsbCxcbiAgICAgICAgdmFsdWU6IGlucHV0VmFsdWUsXG4gICAgICB9O1xuXG4gICAgICBpZiAoIXRoaXMuc3RhdGUuc3VnZ2VzdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIC8vIERULTMyNjM6IGFkZGVkIGlmLWVsc2Ugc3RhdGVtZW50XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXRWYWx1ZSA9PT0gJ29iamVjdCcgfHwgIWlucHV0VmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlLCAoKSA9PlxuICAgICAgICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6IHRoaXMuc3RhdGUudmFsdWUgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHN0YXRlS2V5RG93biwgKCkgPT5cbiAgICAgICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiBpbnB1dFZhbHVlIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiB0aGlzLnN0YXRlLnZhbHVlIH0pO1xuICAgICAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuaXNNb2JpbGUgJiYgIXRoaXMuc3RhdGUucmVuZGVyTW9iaWxlU2VhcmNoKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgcmVuZGVyTW9iaWxlU2VhcmNoOiB0cnVlIH0pO1xuICAgIH1cbiAgfTtcblxuICBzdG9yZUlucHV0UmVmZXJlbmNlID0gYXV0b3N1Z2dlc3QgPT4ge1xuICAgIGlmIChhdXRvc3VnZ2VzdCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5pbnB1dCA9IGF1dG9zdWdnZXN0LmlucHV0O1xuICAgICAgaWYgKHRoaXMucHJvcHMuc3RvcmVSZWYpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5zdG9yZVJlZihhdXRvc3VnZ2VzdC5pbnB1dCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8vIEZpbGwgaW5wdXQgd2hlbiB1c2VyIGNsaWNrcyBmaWxsIGlucHV0IGJ1dHRvbiBpbiBzdHJlZXQgc3VnZ2VzdGlvbiBpdGVtXG4gIGZpbGxJbnB1dCA9IG5ld1ZhbHVlID0+IHtcbiAgICB0aGlzLmZJbnB1dCA9IG5ld1ZhbHVlLnByb3BlcnRpZXMubmFtZTtcbiAgICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAgIGVkaXRpbmc6IHRydWUsXG4gICAgICB2YWx1ZTogbmV3VmFsdWUucHJvcGVydGllcy5uYW1lLFxuICAgICAgY2hlY2tQZW5kaW5nU2VsZWN0aW9uOiBuZXdWYWx1ZSxcbiAgICAgIHZhbGlkOiB0cnVlLFxuICAgIH07XG4gICAgLy8gbXVzdCB1cGRhdGUgc3VnZ2VzdGlvbnNcbiAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlKTtcbiAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogbmV3VmFsdWUucHJvcGVydGllcy5uYW1lIH0pO1xuICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgfTtcblxuICByZW5kZXJJdGVtID0gaXRlbSA9PiB7XG4gICAgY29uc3QgbmV3SXRlbSA9XG4gICAgICBpdGVtLnR5cGUgPT09ICdGdXR1cmVSb3V0ZSdcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgdHJhbnNsYXRlZFRleHQ6IHRyYW5zbGF0ZUZ1dHVyZVJvdXRlU3VnZ2VzdGlvblRpbWUoaXRlbSksXG4gICAgICAgICAgfVxuICAgICAgICA6IGl0ZW07XG4gICAgY29uc3QgY29udGVudCA9IGdldFN1Z2dlc3Rpb25Db250ZW50KGl0ZW0pO1xuICAgIHJldHVybiAoXG4gICAgICA8U3VnZ2VzdGlvbkl0ZW1cbiAgICAgICAgaXRlbT17bmV3SXRlbX1cbiAgICAgICAgY29udGVudD17Y29udGVudH1cbiAgICAgICAgbG9hZGluZz17IXRoaXMuc3RhdGUudmFsaWR9XG4gICAgICAgIGlzTW9iaWxlPXt0aGlzLnByb3BzLmlzTW9iaWxlfVxuICAgICAgICBhcmlhRmF2b3VyaXRlU3RyaW5nPXtpMThuZXh0LnQoJ2Zhdm91cml0ZScpfVxuICAgICAgICBjb2xvcj17dGhpcy5wcm9wcy5jb2xvcn1cbiAgICAgICAgYWNjZXNzaWJsZVByaW1hcnlDb2xvcj17dGhpcy5wcm9wcy5hY2Nlc3NpYmxlUHJpbWFyeUNvbG9yfVxuICAgICAgICBmaWxsSW5wdXQ9e3RoaXMuZmlsbElucHV0fVxuICAgICAgICBmb250V2VpZ2h0cz17dGhpcy5wcm9wcy5mb250V2VpZ2h0c31cbiAgICAgICAgZ2V0QXV0b1N1Z2dlc3RJY29ucz17dGhpcy5wcm9wcy5nZXRBdXRvU3VnZ2VzdEljb25zfVxuICAgICAgICBtb2RlSWNvbkNvbG9ycz17dGhpcy5wcm9wcy5tb2RlSWNvbkNvbG9yc31cbiAgICAgICAgbW9kZVNldD17dGhpcy5wcm9wcy5tb2RlU2V0fVxuICAgICAgLz5cbiAgICApO1xuICB9O1xuXG4gIGNsb3NlTW9iaWxlU2VhcmNoID0gKCkgPT4ge1xuICAgIHRoaXMucHJvcHMudW5sb2NrKCk7XG4gICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgIHtcbiAgICAgICAgcmVuZGVyTW9iaWxlU2VhcmNoOiBmYWxzZSxcbiAgICAgICAgdmFsdWU6IHRoaXMucHJvcHMudmFsdWUsXG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgdGhpcy5zdGF0ZS5zY3JvbGxZKTtcbiAgICAgICAgdGhpcy5vblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWQoKTtcbiAgICAgIH0sXG4gICAgKTtcbiAgICB0aGlzLmlucHV0LmZvY3VzKCk7XG4gICAgLy8gVGhpcyBjbG9zZXMgdGhlIG1vYmlsZSBrZXlib2FyZFxuICAgIHRoaXMuaW5wdXQuYmx1cigpO1xuICB9O1xuXG4gIGtleURvd24gPSBldmVudCA9PiB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uRG9uZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBrZXlDb2RlID0gZXZlbnQua2V5O1xuICAgIGlmIChrZXlDb2RlID09PSAnU2hpZnQnKSB7XG4gICAgICAvLyBUaGlzIGVuYWJsZXMgc2hpZnQgKyB0YWIgdG8gYmUgdXNlZFxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoa2V5Q29kZSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgIC8vIFVzaW5nIG9uQmx1ciBtYWtlcyAnRXNjYXBlJyBhY3Qgc2ltaWxhcmx5IHRvIHVzaW5nICdUYWInXG4gICAgICB0aGlzLm9uQmx1cigpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdGF0ZS5lZGl0aW5nKSB7XG4gICAgICBpZiAoa2V5Q29kZSA9PT0gJ0VudGVyJyAmJiB0aGlzLnN0YXRlLnZhbHVlICE9PSAnJykge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsgcGVuZGluZ1NlbGVjdGlvbjogdHJ1ZSB9LCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6IHRoaXMuc3RhdGUudmFsdWUgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5pbnB1dENsaWNrZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAoa2V5Q29kZSA9PT0gJ0VudGVyJyB8fCBrZXlDb2RlID09PSAnQXJyb3dEb3duJykgJiZcbiAgICAgIHRoaXMuc3RhdGUudmFsdWUgPT09ICcnXG4gICAgKSB7XG4gICAgICB0aGlzLmNsZWFySW5wdXQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5Q29kZSA9PT0gJ0Fycm93RG93bicgJiYgdGhpcy5zdGF0ZS52YWx1ZSAhPT0gJycpIHtcbiAgICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgICBlZGl0aW5nOiB0cnVlLFxuICAgICAgICB2YWx1ZTogdGhpcy5zdGF0ZS52YWx1ZSxcbiAgICAgIH07XG4gICAgICAvLyBtdXN0IHVwZGF0ZSBzdWdnZXN0aW9uc1xuICAgICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSwgKCkgPT5cbiAgICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6IHRoaXMuc3RhdGUudmFsdWUgfSksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc3RhdGUuZWRpdGluZykge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGVkaXRpbmc6IHRydWUgfSk7XG4gICAgICB0aGlzLmNsZWFyTG9jYXRpb25UZXh0KCk7XG4gICAgfVxuXG4gICAgaWYgKGtleUNvZGUgPT09ICdUYWInKSB7XG4gICAgICB0aGlzLm9uQmx1cigpO1xuICAgIH1cbiAgfTtcblxuICBzdWdnZXN0aW9uQXNBcmlhQ29udGVudCA9ICgpID0+IHtcbiAgICBsZXQgbGFiZWwgPSBbXTtcbiAgICBjb25zdCBmaXJzdFN1Z2dlc3Rpb24gPSB0aGlzLnN0YXRlLnN1Z2dlc3Rpb25zWzBdO1xuICAgIGlmIChmaXJzdFN1Z2dlc3Rpb24pIHtcbiAgICAgIGlmIChmaXJzdFN1Z2dlc3Rpb24udHlwZSAmJiBmaXJzdFN1Z2dlc3Rpb24udHlwZS5pbmNsdWRlcygnRmF2b3VyaXRlJykpIHtcbiAgICAgICAgbGFiZWwucHVzaChpMThuZXh0LnQoJ2Zhdm91cml0ZScpKTtcbiAgICAgIH1cbiAgICAgIGxhYmVsID0gbGFiZWwuY29uY2F0KGdldFN1Z2dlc3Rpb25Db250ZW50KHRoaXMuc3RhdGUuc3VnZ2VzdGlvbnNbMF0pKTtcbiAgICB9XG4gICAgcmV0dXJuIFsuLi5uZXcgU2V0KGxhYmVsKV0uam9pbignIC0gJyk7XG4gIH07XG5cbiAgY2xlYXJPbGRTZWFyY2hlcyA9ICgpID0+IHtcbiAgICBjb25zdCB7IGNvbnRleHQsIGNsZWFyT2xkU2VhcmNoZXMsIGNsZWFyRnV0dXJlUm91dGVzIH0gPVxuICAgICAgdGhpcy5wcm9wcy5zZWFyY2hDb250ZXh0O1xuICAgIGlmIChjb250ZXh0ICYmIGNsZWFyT2xkU2VhcmNoZXMpIHtcbiAgICAgIGNsZWFyT2xkU2VhcmNoZXMoY29udGV4dCk7XG4gICAgICBpZiAoY2xlYXJGdXR1cmVSb3V0ZXMpIHtcbiAgICAgICAgY2xlYXJGdXR1cmVSb3V0ZXMoY29udGV4dCk7XG4gICAgICB9XG4gICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogdGhpcy5zdGF0ZS52YWx1ZSB9KTtcbiAgICB9XG4gIH07XG5cbiAgaXNPcmlnaW5EZXN0aW5hdGlvbk9yVmlhcG9pbnQgPSAoKSA9PlxuICAgIHRoaXMucHJvcHMuaWQgPT09ICdvcmlnaW4nIHx8XG4gICAgdGhpcy5wcm9wcy5pZCA9PT0gJ2Rlc3RpbmF0aW9uJyB8fFxuICAgIHRoaXMucHJvcHMuaWQgPT09ICd2aWEtcG9pbnQnIHx8XG4gICAgdGhpcy5wcm9wcy5pZCA9PT0gJ29yaWdpbi1zdG9wLW5lYXIteW91JztcblxuICBjbGVhckxvY2F0aW9uVGV4dCA9ICgpID0+IHtcbiAgICBjb25zdCBwb3NpdGlvbnMgPSBbXG4gICAgICAnVmFsaXR0dSBzaWphaW50aScsXG4gICAgICAnTnlreWluZW4gc2lqYWludGlzaScsXG4gICAgICAnQ3VycmVudCBwb3NpdGlvbicsXG4gICAgICAnU2VsZWN0ZWQgbG9jYXRpb24nLFxuICAgICAgJ1ZhbGQgcG9zaXRpb24nLFxuICAgICAgJ0FudsOkbmQgbWluIHBvc2l0aW9uJyxcbiAgICAgICdNaW4gcG9zaXRpb24nLFxuICAgICAgJ0vDpHl0w6QgbnlreWlzdMOkIHNpamFpbnRpYScsXG4gICAgICAnVXNlIGN1cnJlbnQgbG9jYXRpb24nLFxuICAgICAgJ1lvdXIgY3VycmVudCBsb2NhdGlvbicsXG4gICAgICAnV3licmFuZSBtaWVqc2NlJyxcbiAgICBdO1xuICAgIGlmIChwb3NpdGlvbnMuaW5jbHVkZXModGhpcy5zdGF0ZS52YWx1ZSkpIHtcbiAgICAgIHRoaXMuY2xlYXJJbnB1dCgpO1xuICAgIH1cbiAgfTtcblxuICBvbkZvY3VzID0gKCkgPT4ge1xuICAgIGNvbnN0IHNjcm9sbFkgPSB3aW5kb3cucGFnZVlPZmZzZXQ7XG4gICAgcmV0dXJuIHRoaXMuc2V0U3RhdGUoeyBzY3JvbGxZIH0pO1xuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAoaTE4bmV4dC5sYW5ndWFnZSAhPT0gdGhpcy5wcm9wcy5sYW5nKSB7XG4gICAgICBpMThuZXh0LmNoYW5nZUxhbmd1YWdlKHRoaXMucHJvcHMubGFuZyk7XG4gICAgfVxuICAgIGNvbnN0IHsgdmFsdWUsIHN1Z2dlc3Rpb25zLCByZW5kZXJNb2JpbGVTZWFyY2gsIGNsZWFuRXhlY3V0ZWQgfSA9XG4gICAgICB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IGlucHV0UHJvcHMgPSB7XG4gICAgICBwbGFjZWhvbGRlcjogdGhpcy5wcm9wcy50cmFuc2xhdGVkUGxhY2Vob2xkZXJcbiAgICAgICAgPyB0aGlzLnByb3BzLnRyYW5zbGF0ZWRQbGFjZWhvbGRlclxuICAgICAgICA6IGkxOG5leHQudCh0aGlzLnByb3BzLnBsYWNlaG9sZGVyKSxcbiAgICAgIHZhbHVlLFxuICAgICAgb25DaGFuZ2U6IHRoaXMub25DaGFuZ2UsXG4gICAgICBvbkJsdXI6IHRoaXMub25CbHVyLFxuICAgICAgY2xhc3NOYW1lOiBjeChcbiAgICAgICAgYCR7c3R5bGVzLmlucHV0fSAke1xuICAgICAgICAgIHRoaXMucHJvcHMuaXNNb2JpbGUgJiYgdGhpcy5wcm9wcy50cmFuc3BvcnRNb2RlID8gc3R5bGVzLnRoaW4gOiAnJ1xuICAgICAgICB9ICR7c3R5bGVzW3RoaXMucHJvcHMuaWRdIHx8ICcnfSAke1xuICAgICAgICAgIHRoaXMuc3RhdGUudmFsdWUgPyBzdHlsZXMuaGFzVmFsdWUgOiAnJ1xuICAgICAgICB9ICR7dGhpcy5wcm9wcy5pbnB1dENsYXNzTmFtZX1gLFxuICAgICAgKSxcbiAgICAgIG9uS2V5RG93bjogdGhpcy5rZXlEb3duLCAvLyBEVC0zMjYzXG4gICAgICByZXF1aXJlZDogdGhpcy5wcm9wcy5yZXF1aXJlZCxcbiAgICB9O1xuICAgIGNvbnN0IGFyaWFCYXJJZCA9IHRoaXMucHJvcHMuaWQucmVwbGFjZSgnc2VhcmNoZmllbGQtJywgJycpO1xuICAgIGxldCBTZWFyY2hCYXJJZCA9IHRoaXMucHJvcHMuYXJpYUxhYmVsIHx8IGkxOG5leHQudChhcmlhQmFySWQpO1xuICAgIFNlYXJjaEJhcklkID0gU2VhcmNoQmFySWQucmVwbGFjZSgnc2VhcmNoZmllbGQtJywgJycpLmNvbmNhdCgnLicpOyAvLyBGdWxsIHN0b3AgbWFrZXMgc2NyZWVuIHJlYWRlciBzcGVlY2ggY2xlYXJlci5cbiAgICBjb25zdCBhcmlhUmVxdWlyZWRUZXh0ID0gdGhpcy5wcm9wcy5yZXF1aXJlZFxuICAgICAgPyBgJHtpMThuZXh0LnQoJ3JlcXVpcmVkJyl9LmBcbiAgICAgIDogJyc7XG4gICAgY29uc3QgYXJpYUxhYmVsSW5zdHJ1Y3Rpb25zID0gdGhpcy5wcm9wcy5pc01vYmlsZVxuICAgICAgPyBpMThuZXh0LnQoJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtbW9iaWxlJylcbiAgICAgIDogaTE4bmV4dC50KCdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLWRlc2t0b3AnKTtcbiAgICBjb25zdCBtb3ZpbmdUb0Rlc3RpbmF0aW9uRmllbGRUZXh0ID1cbiAgICAgIHRoaXMucHJvcHMuaWQgPT09ICdvcmlnaW4nXG4gICAgICAgID8gaTE4bmV4dC50KCdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW92ZS10by1kZXN0aW5hdGlvbicpXG4gICAgICAgIDogJyc7XG4gICAgY29uc3QgYXJpYUxhYmVsVGV4dCA9IGFyaWFMYWJlbEluc3RydWN0aW9uc1xuICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAuY29uY2F0KG1vdmluZ1RvRGVzdGluYXRpb25GaWVsZFRleHQpO1xuXG4gICAgY29uc3QgYXJpYVN1Z2dlc3Rpb25MZW4gPSBpMThuZXh0LnQoJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nLCB7XG4gICAgICBjb3VudDogc3VnZ2VzdGlvbnMubGVuZ3RoLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYXJpYUN1cnJlbnRTdWdnZXN0aW9uID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuc3VnZ2VzdGlvbkFzQXJpYUNvbnRlbnQoKSB8fCB0aGlzLnByb3BzLnZhbHVlKSB7XG4gICAgICAgIHJldHVybiBpMThuZXh0LnQoJ3NlYXJjaC1jdXJyZW50LXN1Z2dlc3Rpb24nLCB7XG4gICAgICAgICAgc2VsZWN0aW9uOlxuICAgICAgICAgICAgdGhpcy5zdWdnZXN0aW9uQXNBcmlhQ29udGVudCgpLnRvTG93ZXJDYXNlKCkgfHwgdGhpcy5wcm9wcy52YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gJyc7XG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzWydzci1vbmx5J119IHJvbGU9XCJhbGVydFwiPlxuICAgICAgICAgIHshdGhpcy5zdGF0ZS50eXBpbmcgJiZcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuZWRpdGluZyAmJlxuICAgICAgICAgICAgYCR7YXJpYVN1Z2dlc3Rpb25MZW59ICR7YXJpYUN1cnJlbnRTdWdnZXN0aW9uKCl9YH1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICB7dGhpcy5wcm9wcy5pc01vYmlsZSAmJiAoXG4gICAgICAgICAgPE1vYmlsZVNlYXJjaFxuICAgICAgICAgICAgc2VhcmNoT3Blbj17cmVuZGVyTW9iaWxlU2VhcmNofVxuICAgICAgICAgICAgYXBwRWxlbWVudD17dGhpcy5wcm9wcy5hcHBFbGVtZW50fVxuICAgICAgICAgICAgY2xlYXJPbGRTZWFyY2hlcz17dGhpcy5jbGVhck9sZFNlYXJjaGVzfVxuICAgICAgICAgICAgaWQ9e3RoaXMucHJvcHMuaWR9XG4gICAgICAgICAgICBjbGVhcklucHV0PXt0aGlzLmNsZWFySW5wdXR9XG4gICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS52YWx1ZX1cbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zPXtbXG4gICAgICAgICAgICAgIC4uLnN1Z2dlc3Rpb25zLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICBsYWJlbElkOiBpMThuZXh0LnQoJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JyksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdfVxuICAgICAgICAgICAgaW5wdXRQcm9wcz17e1xuICAgICAgICAgICAgICAuLi5pbnB1dFByb3BzLFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogdGhpcy5pc09yaWdpbkRlc3RpbmF0aW9uT3JWaWFwb2ludCgpXG4gICAgICAgICAgICAgICAgPyBpMThuZXh0LnQoJ2FkZHJlc3MtcGxhY2Utb3ItYnVzaW5lc3MnKVxuICAgICAgICAgICAgICAgIDogaW5wdXRQcm9wcy5wbGFjZWhvbGRlcixcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBmZXRjaEZ1bmN0aW9uPXt0aGlzLmZldGNoRnVuY3Rpb259XG4gICAgICAgICAgICBvblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWQ9e3RoaXMub25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkfVxuICAgICAgICAgICAgZ2V0U3VnZ2VzdGlvblZhbHVlPXtnZXRTdWdnZXN0aW9uVmFsdWV9XG4gICAgICAgICAgICByZW5kZXJTdWdnZXN0aW9uPXt0aGlzLnJlbmRlckl0ZW19XG4gICAgICAgICAgICBjbG9zZUhhbmRsZT17dGhpcy5jbG9zZU1vYmlsZVNlYXJjaH1cbiAgICAgICAgICAgIGFyaWFMYWJlbD17YXJpYVJlcXVpcmVkVGV4dFxuICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgLmNvbmNhdChTZWFyY2hCYXJJZClcbiAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgIC5jb25jYXQoYXJpYUN1cnJlbnRTdWdnZXN0aW9uKCkpfVxuICAgICAgICAgICAgbGFiZWw9e1xuICAgICAgICAgICAgICB0aGlzLnByb3BzLm1vYmlsZUxhYmVsXG4gICAgICAgICAgICAgICAgPyB0aGlzLnByb3BzLm1vYmlsZUxhYmVsXG4gICAgICAgICAgICAgICAgOiBpMThuZXh0LnQodGhpcy5wcm9wcy5pZClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9uU3VnZ2VzdGlvblNlbGVjdGVkPXt0aGlzLm9uU2VsZWN0ZWR9XG4gICAgICAgICAgICBkaWFsb2dIZWFkZXJUZXh0PXtpMThuZXh0LnQoJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJyl9XG4gICAgICAgICAgICBkaWFsb2dQcmltYXJ5QnV0dG9uVGV4dD17aTE4bmV4dC50KCdkZWxldGUnKX1cbiAgICAgICAgICAgIGRpYWxvZ1NlY29uZGFyeUJ1dHRvblRleHQ9e2kxOG5leHQudCgnY2FuY2VsJyl9XG4gICAgICAgICAgICBjbGVhcklucHV0QnV0dG9uVGV4dD17aTE4bmV4dC50KCdjbGVhci1idXR0b24tbGFiZWwnKX1cbiAgICAgICAgICAgIGZvY3VzSW5wdXQ9e2NsZWFuRXhlY3V0ZWR9XG4gICAgICAgICAgICBjb2xvcj17dGhpcy5wcm9wcy5jb2xvcn1cbiAgICAgICAgICAgIGhvdmVyQ29sb3I9e3RoaXMucHJvcHMuaG92ZXJDb2xvcn1cbiAgICAgICAgICAgIGFjY2Vzc2libGVQcmltYXJ5Q29sb3I9e3RoaXMucHJvcHMuYWNjZXNzaWJsZVByaW1hcnlDb2xvcn1cbiAgICAgICAgICAgIGZvbnRXZWlnaHRzPXt0aGlzLnByb3BzLmZvbnRXZWlnaHRzfVxuICAgICAgICAgICAgc2hvd1Njcm9sbD17dGhpcy5wcm9wcy5zaG93U2Nyb2xsfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIHshcmVuZGVyTW9iaWxlU2VhcmNoICYmIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2N4KFtcbiAgICAgICAgICAgICAgc3R5bGVzWydhdXRvc3VnZ2VzdC1pbnB1dC1jb250YWluZXInXSxcbiAgICAgICAgICAgICAgc3R5bGVzW3RoaXMucHJvcHMuaWRdLFxuICAgICAgICAgICAgXSl9XG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAnLS1jb2xvcic6IGAke3RoaXMucHJvcHMuY29sb3J9YCxcbiAgICAgICAgICAgICAgJy0taG92ZXItY29sb3InOiBgJHt0aGlzLnByb3BzLmhvdmVyQ29sb3J9YCxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RoaXMucHJvcHMuaWNvbiAmJiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2N4KFtcbiAgICAgICAgICAgICAgICAgIHN0eWxlc1tgYXV0b3N1Z2dlc3QtaW5wdXQtaWNvbmBdLFxuICAgICAgICAgICAgICAgICAgc3R5bGVzW3RoaXMucHJvcHMuaWRdLFxuICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5pbnB1dENsYXNzTmFtZSAmJlxuICAgICAgICAgICAgICAgICAgICBgJHt0aGlzLnByb3BzLmlucHV0Q2xhc3NOYW1lfS1pbnB1dC1pY29uYCxcbiAgICAgICAgICAgICAgICBdKX1cbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXthcmlhUmVxdWlyZWRUZXh0XG4gICAgICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgICAgIC5jb25jYXQoU2VhcmNoQmFySWQpXG4gICAgICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgICAgIC5jb25jYXQoaTE4bmV4dC50KCdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwnKSl9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8SWNvbiBpbWc9e2Ake3RoaXMucHJvcHMuaWNvbn1gfSAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8QXV0b3N1Z2dlc3RcbiAgICAgICAgICAgICAgYWx3YXlzUmVuZGVyU3VnZ2VzdGlvbnM9e3RoaXMuc3RhdGUuZWRpdGluZ31cbiAgICAgICAgICAgICAgaWQ9e3RoaXMucHJvcHMuaWR9XG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb25zPXtzdWdnZXN0aW9uc31cbiAgICAgICAgICAgICAgb25TdWdnZXN0aW9uc0ZldGNoUmVxdWVzdGVkPXt0aGlzLmZldGNoRnVuY3Rpb259XG4gICAgICAgICAgICAgIG9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZD17dGhpcy5vblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWR9XG4gICAgICAgICAgICAgIGdldFN1Z2dlc3Rpb25WYWx1ZT17Z2V0U3VnZ2VzdGlvblZhbHVlfVxuICAgICAgICAgICAgICByZW5kZXJTdWdnZXN0aW9uPXt0aGlzLnJlbmRlckl0ZW19XG4gICAgICAgICAgICAgIGlucHV0UHJvcHM9e3tcbiAgICAgICAgICAgICAgICAuLi5pbnB1dFByb3BzLFxuICAgICAgICAgICAgICAgIG9uRm9jdXM6IHRoaXMub25Gb2N1cyxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgZm9jdXNJbnB1dE9uU3VnZ2VzdGlvbkNsaWNrXG4gICAgICAgICAgICAgIHNob3VsZFJlbmRlclN1Z2dlc3Rpb25zPXsoKSA9PiB0aGlzLnN0YXRlLmVkaXRpbmd9XG4gICAgICAgICAgICAgIGhpZ2hsaWdodEZpcnN0U3VnZ2VzdGlvbj17IXRoaXMuc3RhdGUub3duUGxhY2VzfVxuICAgICAgICAgICAgICB0aGVtZT17c3R5bGVzfVxuICAgICAgICAgICAgICByZW5kZXJJbnB1dENvbXBvbmVudD17cCA9PiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9e3N0eWxlc1snc3Itb25seSddfSBodG1sRm9yPXt0aGlzLnByb3BzLmlkfT5cbiAgICAgICAgICAgICAgICAgICAge2FyaWFDdXJyZW50U3VnZ2VzdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChhcmlhUmVxdWlyZWRUZXh0KVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoU2VhcmNoQmFySWQpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChhcmlhTGFiZWxUZXh0KX1cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17YXJpYUN1cnJlbnRTdWdnZXN0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KGFyaWFSZXF1aXJlZFRleHQpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChTZWFyY2hCYXJJZClcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KGFyaWFMYWJlbFRleHQpfVxuICAgICAgICAgICAgICAgICAgICBpZD17dGhpcy5wcm9wcy5pZH1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5pbnB1dENsaWNrZWR9XG4gICAgICAgICAgICAgICAgICAgIG9uS2V5RG93bj17dGhpcy5rZXlEb3dufVxuICAgICAgICAgICAgICAgICAgICB7Li4ucH1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS52YWx1ZSAmJiB0aGlzLmNsZWFyQnV0dG9uKCl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIG9uU3VnZ2VzdGlvblNlbGVjdGVkPXt0aGlzLm9uU2VsZWN0ZWR9XG4gICAgICAgICAgICAgIHJlZj17dGhpcy5zdG9yZUlucHV0UmVmZXJlbmNlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCBEVEF1dG9zdWdnZXN0V2l0aFNjcm9sbExvY2sgPSB3aXRoU2Nyb2xsTG9jayhEVEF1dG9zdWdnZXN0KTtcblxuZXhwb3J0IGRlZmF1bHQgRFRBdXRvc3VnZ2VzdFdpdGhTY3JvbGxMb2NrO1xuIiwiaW1wb3J0IHsgZ2V0TmFtZUxhYmVsIH0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXVuaXEtYnktbGFiZWwnO1xuLyoqXG4gKiBSZXR1cm5zIGxhYmVsIGZvciBwcm9wZXJ0aWVzXG4gKlxuICogQG5hbWUgZ2V0TGFiZWxcbiAqIEBwYXJhbSB7Kn0gcHJvcGVydGllcyBvYmplY3RcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0cnVlL2ZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldExhYmVsKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgcGFydHMgPSBnZXROYW1lTGFiZWwocHJvcGVydGllcywgdHJ1ZSk7XG4gIHN3aXRjaCAocHJvcGVydGllcy5sYXllcikge1xuICAgIGNhc2UgJ3NlbGVjdEZyb21NYXAnOlxuICAgIGNhc2UgJ2N1cnJlbnRQb3NpdGlvbic6XG4gICAgY2FzZSAnb3duTG9jYXRpb25zJzpcbiAgICBjYXNlICdiYWNrJzpcbiAgICAgIHJldHVybiBwYXJ0c1sxXSB8fCBwYXJ0c1swXTtcbiAgICBjYXNlICdmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbic6XG4gICAgY2FzZSAnZmF2b3VyaXRlUGxhY2UnOlxuICAgICAgcmV0dXJuIHBhcnRzWzBdO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gcGFydHMubGVuZ3RoID4gMSAmJiBwYXJ0c1sxXSAhPT0gJydcbiAgICAgICAgPyBwYXJ0cy5qb2luKCcsICcpXG4gICAgICAgIDogcGFydHNbMV0gfHwgcGFydHNbMF07XG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgaG9va3MgZnJvbSAnQGhzbC1maS9ob29rcyc7XG5cbmNvbnN0IHdpdGhTY3JvbGxMb2NrID0gQ29tcG9uZW50ID0+IHtcbiAgcmV0dXJuIHByb3BzID0+IHtcbiAgICBjb25zdCB7IGxvY2ssIHVubG9jayB9ID0gaG9va3MudXNlU2Nyb2xsTG9jaygpO1xuXG4gICAgcmV0dXJuIDxDb21wb25lbnQgbG9jaz17bG9ja30gdW5sb2NrPXt1bmxvY2t9IHsuLi5wcm9wc30gLz47XG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoU2Nyb2xsTG9jaztcbiJdLCJuYW1lcyI6WyJfdHlwZW9mIiwibyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJ0b1Byb3BlcnR5S2V5IiwidCIsImkiLCJyIiwiZSIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIl9kZWZpbmVQcm9wZXJ0eSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJ0cnVFcSIsInZhbDEiLCJ2YWwyIiwiZ3Rmc1N0b3BMYXllcnMiLCJ2ZWhpY2xlUmVudGFsTGF5ZXJzIiwibGFiZWxJZFRvR2lkIiwiaWQiLCJwYXJ0cyIsInNwbGl0IiwibGVuZ3RoIiwiaXNEdXBsaWNhdGUiLCJpdGVtMSIsIml0ZW0yIiwicHJvcHMxIiwicHJvcGVydGllcyIsInByb3BzMiIsInR5cGUiLCJvMSIsIm9yaWdpbiIsImQxIiwiZGVzdGluYXRpb24iLCJvMiIsImQyIiwibmFtZSIsImxvY2FsYWRtaW4iLCJpbmNsdWRlcyIsImxheWVyIiwiZ2lkIiwibGFiZWxJZCIsImd0ZnNJZCIsInAxIiwiZ2VvbWV0cnkiLCJjb29yZGluYXRlcyIsInVuZGVmaW5lZCIsInAyIiwiTWF0aCIsImFicyIsImxhYmVsIiwiYWRkcmVzcyIsIm5vcm1hbGl6ZSIsInN0ciIsImlzU3RyaW5nIiwidG9Mb3dlckNhc2UiLCJMYXllclR5cGUiLCJpc1N0b3AiLCJnZXRMYXllclJhbmsiLCJzb3VyY2UiLCJpbmRleE9mIiwic29ydFNlYXJjaFJlc3VsdHMiLCJsaW5lUmVnZXhwIiwicmVzdWx0cyIsInRlcm0iLCJBcnJheSIsImlzQXJyYXkiLCJpc0xpbmVJZGVudGlmaWVyIiwidGVzdCIsIm5vcm1hbGl6ZWRUZXJtIiwiaXNMaW5lU2VhcmNoIiwib3JkZXJlZFJlc3VsdHMiLCJvcmRlckJ5IiwicmVzdWx0Iiwic2hvcnROYW1lIiwiY29uZmlkZW5jZSIsIm1hdGNoIiwicmVzdWx0UHJvcGVydGllcyIsIm1hcCIsImZpbHRlciIsIm5vcm1hbGl6ZWRWYWx1ZSIsInJlZHVjZSIsInByZXZpb3VzIiwiY3VycmVudCIsInVuaXFXaXRoIiwiZ2V0U3RvcE5hbWUiLCJzdG9wQ29kZSIsImxhc3RJbmRleE9mIiwic3Vic3RyaW5nIiwiZmlsdGVyTWF0Y2hpbmdUb0lucHV0IiwibGlzdCIsIklucHV0IiwiZmllbGRzIiwiaW5wdXQiLCJ0cmltIiwibXVsdGlXb3JkIiwiaXRlbSIsImZvckVhY2giLCJwTmFtZSIsImdldCIsInNwbGljZSIsImpvaW4iLCJjb25jYXQiLCJyZXBsYWNlIiwic2VyaWFsaXplIiwib2JqIiwicHJlZml4Iiwia2V5cyIsInAiLCJrIiwidiIsImVuY29kZVVSSUNvbXBvbmVudCIsImF4aW9zIiwicmVxdWlyZSIsImRlZmF1bHQiLCJnZXRKc29uIiwidXJsIiwicGFyYW1zIiwiZW5jb2RlVVJJIiwic2VhcmNoIiwidGltZW91dCIsIm1ldGhvZCIsImhlYWRlcnMiLCJBY2NlcHQiLCJ0aGVuIiwicmVzIiwiZGF0YSIsImdldEdlb2NvZGluZ1Jlc3VsdHMiLCJzZWFyY2hTdHJpbmciLCJzZWFyY2hQYXJhbXMiLCJsYW5nIiwiZm9jdXNQb2ludCIsInNvdXJjZXMiLCJwZWxpYXNVcmwiLCJtaW5pbWFsUmVnZXhwIiwiZ2VvY29kaW5nTGF5ZXJzIiwidGV4dCIsIlByb21pc2UiLCJyZXNvbHZlIiwiUEVMSUFTX1VSTCIsIm9wdHMiLCJfb2JqZWN0U3ByZWFkIiwibGF5ZXJzIiwidG9TdHJpbmciLCJmZWF0dXJlcyIsImdldFN0b3BzRnJvbUdlb2NvZGluZyIsInN0b3BzIiwiVVJMX1BFTElBU19QTEFDRSIsImdpZHMiLCJzdG9wU3RhdGlvbk1hcCIsInN0b3AiLCJjb2RlIiwic3RvcE9yU3RhdGlvbiIsImlkcyIsInNsaWNlIiwiYWRkZW5kdW0iLCJsYXN0VXBkYXRlZCIsImZhdm91cml0ZUlkIiwiZmlsdGVyT2xkU2VhcmNoZXMiLCJvbGRTZWFyY2hlcyIsImRyb3BMYXllcnMiLCJtYXRjaGluZ09sZFNlYXJjaGVzIiwidGFrZSIsIm5ld0l0ZW0iLCJ0aW1ldGFibGVDbGlja2VkIiwiYXJyb3dDbGlja2VkIiwicm91dGVMYXllcnMiLCJsb2NhdGlvbkxheWVycyIsInBhcmtpbmdMYXllcnMiLCJzdG9wTGF5ZXJzIiwiZGVib3VuY2VkU2VhcmNoIiwiZGVib3VuY2UiLCJ0YXJnZXRzIiwidHJhbnNwb3J0TW9kZSIsInNlYXJjaENvbnRleHQiLCJmaWx0ZXJSZXN1bHRzIiwiZ2VvY29kaW5nU2l6ZSIsImNhbGxiYWNrIiwicGF0aE9wdHMiLCJyZWZQb2ludCIsImdldFBvc2l0aW9ucyIsImdldEZhdm91cml0ZUxvY2F0aW9ucyIsImdldE9sZFNlYXJjaGVzIiwiZ2V0RmF2b3VyaXRlU3RvcHMiLCJwYXJraW5nQXJlYVNvdXJjZXMiLCJnZXRMYW5ndWFnZSIsImdldFN0b3BBbmRTdGF0aW9uc1F1ZXJ5IiwiZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zUXVlcnkiLCJnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnMiLCJnZXRGYXZvdXJpdGVSb3V0ZXNRdWVyeSIsImdldEZhdm91cml0ZVJvdXRlcyIsImdldFJvdXRlc1F1ZXJ5IiwiY29udGV4dCIsImlzUGVsaWFzTG9jYXRpb25Bd2FyZSIsImxvY2F0aW9uQXdhcmUiLCJVUkxfUEVMSUFTIiwiZmVlZElEcyIsImdlb2NvZGluZ1NlYXJjaFBhcmFtcyIsImdlb2NvZGluZ1NvdXJjZXMiLCJnZXRGdXR1cmVSb3V0ZXMiLCJjaXR5QmlrZU5ldHdvcmtzIiwiYWxsVGFyZ2V0cyIsImFsbFNvdXJjZXMiLCJwb3NpdGlvbiIsInNlYXJjaENvbXBvbmVudHMiLCJzZWFyY2hlcyIsImxhbmd1YWdlIiwibGF0IiwibG9uIiwidG9GaXhlZCIsIm1vZGUiLCJzdGF0dXMiLCJwdXNoIiwiZ2V0Q3VycmVudFBvc2l0aW9uSWZFbXB0eSIsInNlbGVjdFBvc2l0aW9uRm9tTWFwIiwiaXRlbXMiLCJmYXZvdXJpdGVMb2NhdGlvbnMiLCJmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnMiLCJmYXZvdXJpdGVTdG9wcyIsImhhc0Zhdm91cml0ZXMiLCJzZWxlY3RGcm9tT3duTG9jYXRpb25zIiwiZmF2b3VyaXRlcyIsImZpbHRlckZhdm91cml0ZUxvY2F0aW9ucyIsImxvY2F0aW9uSGlzdG9yeSIsInNpemUiLCJmZWVkSWRzIiwiaGlzdG9yeSIsInVzZVN0b3BzIiwidXNlU3RhdGlvbnMiLCJzdG9wc0FuZFN0YXRpb25zIiwiZXZlcnkiLCJzdG9wc1N0YXRpb25zIiwicyIsImZpbHRlckZhdm91cml0ZVN0b3BzIiwiZGVkdXBlc3RvcHMiLCJmZWVkcyIsInN0b3BIaXN0b3J5IiwiZmF2b3VyaXRlUm91dGVzIiwicm91dGVIaXN0b3J5IiwiZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24iLCJhbGwiLCJmbGF0dGVuIiwiY2F0Y2giLCJlcnIiLCJlcnJvciIsImxlYWRpbmciLCJnZXRMb2NhbGFkbWluIiwic3VnZ2VzdGlvbiIsImdldFN0b3BDb2RlIiwiZ2V0TmFtZUxhYmVsIiwibWVtb2l6ZSIsInBsYWluIiwiUmVnRXhwIiwiZXNjYXBlUmVnRXhwIiwibG9uZ05hbWUiLCJhZ2VuY3kiLCJmb3JtYXRGYXZvdXJpdGVQbGFjZUxhYmVsIiwiY2xvbmVEZWVwIiwidHJhbnNsYXRpb25zIiwiZGUiLCJhaXJwbGFuZSIsImFycml2YWwiLCJiYWNrIiwiYmlrZXJlbnRhbHN0YXRpb24iLCJidXMiLCJjYW5jZWwiLCJjdXJyZW50cG9zaXRpb24iLCJkZWxldGUiLCJkZXBhcnR1cmUiLCJmYXZvdXJpdGUiLCJmZXJyeSIsIm93bmxvY2F0aW9ucyIsImxvYWRpbmciLCJyYWlsIiwic3RyZWV0Iiwic3Vid2F5Iiwic3RhdGlvbiIsInRyYW0iLCJ2ZW51ZSIsIndoZXJlIiwicGxhY2UiLCJlbiIsImJpa2VwYXJrIiwiY2FycGFyayIsInBsYXRmb3JtIiwicmVxdWlyZWQiLCJ0cmFjayIsImZpIiwidmVoaWNsZXJlbnRhbHN0YXRpb24iLCJwbCIsInN2Iiwic3R5bGVJbmplY3QiLCJjc3MiLCJyZWYiLCJpbnNlcnRBdCIsImRvY3VtZW50IiwiaGVhZCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwic3R5bGUiLCJjcmVhdGVFbGVtZW50IiwiZmlyc3RDaGlsZCIsImluc2VydEJlZm9yZSIsImFwcGVuZENoaWxkIiwic3R5bGVTaGVldCIsImNzc1RleHQiLCJjcmVhdGVUZXh0Tm9kZSIsIkF1dG9zdWdnZXN0UGF0Y2giLCJBdXRvc3VnZ2VzdCIsInByb3BzIiwic3VwZXIiLCJzZWxmIiwidGhpcyIsIm9uU3VnZ2VzdGlvblRvdWNoTW92ZSIsImp1c3RTZWxlY3RlZFN1Z2dlc3Rpb24iLCJwcmVzc2VkU3VnZ2VzdGlvbiIsIk1vYmlsZVNlYXJjaCIsImFwcEVsZW1lbnQiLCJjbG9zZUhhbmRsZSIsImNsZWFySW5wdXQiLCJzdWdnZXN0aW9ucyIsImlucHV0UHJvcHMiLCJmZXRjaEZ1bmN0aW9uIiwicmVuZGVyU3VnZ2VzdGlvbiIsImdldFN1Z2dlc3Rpb25WYWx1ZSIsImFyaWFMYWJlbCIsIm9uU3VnZ2VzdGlvblNlbGVjdGVkIiwiY2xlYXJPbGRTZWFyY2hlcyIsImRpYWxvZ0hlYWRlclRleHQiLCJkaWFsb2dQcmltYXJ5QnV0dG9uVGV4dCIsImRpYWxvZ1NlY29uZGFyeUJ1dHRvblRleHQiLCJjbGVhcklucHV0QnV0dG9uVGV4dCIsImZvY3VzSW5wdXQiLCJjb2xvciIsImhvdmVyQ29sb3IiLCJhY2Nlc3NpYmxlUHJpbWFyeUNvbG9yIiwic2VhcmNoT3BlbiIsImZvbnRXZWlnaHRzIiwic2hvd1Njcm9sbCIsIl9pbnB1dFJlZiRjdXJyZW50Iiwic3R5bGVzIiwibW9iaWxlU3R5bGVzIiwibW9iaWxlTm9TY3JvbGxTdHlsZXMiLCJpbnB1dElkIiwiaXNEaWFsb2dPcGVuIiwic2V0RGlhbG9nT3BlbiIsInVzZVN0YXRlIiwiaW5wdXRSZWYiLCJSZWFjdCIsInVzZVJlZiIsInVzZUVmZmVjdCIsIlJlYWN0TW9kYWwiLCJzZXRBcHBFbGVtZW50Iiwib25DbG9zZSIsInVzZUNhbGxiYWNrIiwib25TZWxlY3QiLCJpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQiLCJldmVudCIsImtleSIsIndoaWNoIiwia2V5Q29kZSIsInByZXZlbnREZWZhdWx0IiwiZ2V0VmFsdWUiLCJyZW5kZXJJdGVtIiwiY2xhc3NOYW1lIiwiZm9jdXMiLCJpc09wZW4iLCJvdmVybGF5Q2xhc3NOYW1lIiwib25BZnRlckNsb3NlIiwic2hvdWxkQ2xvc2VPbkVzYyIsIm1lZGl1bSIsImh0bWxGb3IiLCJvbkNsaWNrIiwib25LZXlEb3duIiwidGFiSW5kZXgiLCJJY29uIiwiaW1nIiwiYWx3YXlzUmVuZGVyU3VnZ2VzdGlvbnMiLCJvblN1Z2dlc3Rpb25zRmV0Y2hSZXF1ZXN0ZWQiLCJmb2N1c0lucHV0T25TdWdnZXN0aW9uQ2xpY2siLCJzaG91bGRSZW5kZXJTdWdnZXN0aW9ucyIsImhhc1ZhbHVlIiwiYXV0b0ZvY3VzIiwicmVuZGVySW5wdXRDb21wb25lbnQiLCJGcmFnbWVudCIsImFzc2lnbiIsInRoZW1lIiwiRGlhbG9nTW9kYWwiLCJpc01vZGFsT3BlbiIsImhhbmRsZUNsb3NlIiwiaGVhZGVyVGV4dCIsInByaW1hcnlCdXR0b25UZXh0Iiwic2Vjb25kYXJ5QnV0dG9uVGV4dCIsInByaW1hcnlCdXR0b25PbkNsaWNrIiwic2Vjb25kYXJ5QnV0dG9uT25DbGljayIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsInN0cmluZyIsImlzUmVxdWlyZWQiLCJmdW5jIiwiYXJyYXlPZiIsIm9iamVjdCIsInNoYXBlIiwib25DaGFuZ2UiLCJvbkJsdXIiLCJwbGFjZWhvbGRlciIsImJvb2wiLCJudW1iZXIiLCJkZWZhdWx0UHJvcHMiLCJtb2R1bGUiLCJleHBvcnRzIiwicmVxdWlyZSQkMCIsIm4iLCJnIiwid2luZG93IiwiaWdub3JlIiwiaGVhZGVyIiwidG9wT25FbXB0eUhhc2giLCJzcGVlZCIsInNwZWVkQXNEdXJhdGlvbiIsImR1cmF0aW9uTWF4IiwiZHVyYXRpb25NaW4iLCJjbGlwIiwib2Zmc2V0IiwiZWFzaW5nIiwiY3VzdG9tRWFzaW5nIiwidXBkYXRlVVJMIiwicG9wc3RhdGUiLCJlbWl0RXZlbnRzIiwiYXJndW1lbnRzIiwiaGFzT3duUHJvcGVydHkiLCJjaGFyQXQiLCJzdWJzdHIiLCJ1IiwiY2hhckNvZGVBdCIsIkludmFsaWRDaGFyYWN0ZXJFcnJvciIsIm1heCIsImJvZHkiLCJzY3JvbGxIZWlnaHQiLCJkb2N1bWVudEVsZW1lbnQiLCJvZmZzZXRIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJwYXJzZUludCIsImdldENvbXB1dGVkU3R5bGUiLCJoZWlnaHQiLCJvZmZzZXRUb3AiLCJhY3RpdmVFbGVtZW50Iiwic2V0QXR0cmlidXRlIiwib3V0bGluZSIsInNjcm9sbFRvIiwiQ3VzdG9tRXZlbnQiLCJidWJibGVzIiwiZGV0YWlsIiwiYW5jaG9yIiwidG9nZ2xlIiwiZGlzcGF0Y2hFdmVudCIsImMiLCJhIiwibCIsImYiLCJkIiwiY2FuY2VsU2Nyb2xsIiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJhbmltYXRlU2Nyb2xsIiwiaCIsIm0iLCJ0YWdOYW1lIiwieSIsInBhZ2VZT2Zmc2V0IiwicXVlcnlTZWxlY3RvciIsImIiLCJ3IiwiRSIsIk8iLCJvZmZzZXRQYXJlbnQiLCJtaW4iLCJpbm5lckhlaWdodCIsIlMiLCJfIiwiSSIsIk0iLCJMIiwiZmxvb3IiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJwdXNoU3RhdGUiLCJzbW9vdGhTY3JvbGwiLCJKU09OIiwic3RyaW5naWZ5IiwidGl0bGUiLCJtYXRjaE1lZGlhIiwibWF0Y2hlcyIsImRlZmF1bHRQcmV2ZW50ZWQiLCJidXR0b24iLCJtZXRhS2V5IiwiY3RybEtleSIsInNoaWZ0S2V5IiwidGFyZ2V0IiwiY2xvc2VzdCIsImhvc3RuYW1lIiwibG9jYXRpb24iLCJwYXRobmFtZSIsImhyZWYiLCJkZWNvZGVVUklDb21wb25lbnQiLCJoYXNoIiwicmVwbGFjZVN0YXRlIiwic3RhdGUiLCJkZXN0cm95IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIkVsZW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwiYXBwbHkiLCJfX2NyZWF0ZUJpbmRpbmciLCJjcmVhdGUiLCJfX2V4cG9ydFN0YXIiLCJ1c2VBcnJvd05hdmlnYXRpb24iLCJsaXN0SXRlbXMiLCJvbkFycm93VXBPckRvd24iLCJzZWxlY3RlZEluZGV4IiwidXNlRGVib3VuY2UiLCJzZXRUaW1lb3V0IiwiY2xlYXJUaW1lb3V0IiwidXNlRWxlbWVudFNpemUiLCJ3aWR0aCIsImNsaWVudFdpZHRoIiwidXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJpc0ludGVyc2VjdGluZyIsIkludGVyc2VjdGlvbk9ic2VydmVyIiwib2JzZXJ2ZSIsInVub2JzZXJ2ZSIsImNvbnRhaW5lclJlZiIsImlzVmlzaWJsZSIsInVzZUlzQnJlYWtwb2ludCIsInhzIiwibW9iaWxlU21hbGwiLCJtb2JpbGUiLCJ0YWJsZXQiLCJ0YWJsZXRMYXJnZSIsImRlc2t0b3BTbWFsbCIsImRlc2t0b3AiLCJkZXNrdG9wTGFyZ2UiLCJpbm5lcldpZHRoIiwidXNlT25SZXNpemUiLCJ1c2VJc0xvYWRpbmdBZnRlckVycm9yIiwidXNlSXNNb2JpbGUiLCJ1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0IiwidXNlTGF5b3V0RWZmZWN0IiwidXNlT25Mb3NlRm9jdXNXaXRoaW4iLCJ3YXRjaCIsInBhc3NpdmUiLCJ1c2VPbldpbmRvd0ZvY3VzIiwidmlzaWJpbGl0eVN0YXRlIiwidXNlT3V0c2lkZVJlYWN0ZXIiLCJjb250YWlucyIsInVzZVJ1bkFmdGVyVXBkYXRlIiwidXNlU2Nyb2xsTG9jayIsImxvY2siLCJzY3JvbGxZIiwidG9wIiwidW5sb2NrIiwiX19pbXBvcnREZWZhdWx0IiwiX19lc01vZHVsZSIsInVzZVNtb290aFNjcm9sbCIsImdsb2JhbFRoaXMiLCJGdW5jdGlvbiIsIlNldHRpbmdzIiwiZGVmYXVsdExvY2FsZSIsImkxOG5leHRfX2RlZmF1bHQiLCJpbml0IiwiZmFsbGJhY2tMbmciLCJkZWZhdWx0TlMiLCJpbnRlcnBvbGF0aW9uIiwiZXNjYXBlVmFsdWUiLCJub2RlIiwiZ2V0UGxhdGZvcm0iLCJHVEZTIiwibW9kZXMiLCJpMThuZXh0IiwiZ2V0U3VnZ2VzdGlvbkNvbnRlbnQiLCJzdWdnZXN0aW9uVHlwZSIsIl9pdGVtJHByb3BlcnRpZXMkYWRkZSIsInRhaWwxIiwibG9jYWxpdHkiLCJ0YWlsMiIsIm5hbWUxIiwibmFtZTIiLCJ0cmFuc2xhdGVkVGV4dCIsInRyYW5zbGF0ZUZ1dHVyZVJvdXRlU3VnZ2VzdGlvblRpbWUiLCJ0aW1lIiwiRGF0ZVRpbWUiLCJmcm9tU2Vjb25kcyIsIm5vdyIsImFycml2ZUJ5IiwiaGFzU2FtZSIsInBsdXMiLCJkYXlzIiwidG9Gb3JtYXQiLCJnZXRMYWJlbCIsIkRUQXV0b3N1Z2dlc3QiLCJDb21wb25lbnQiLCJuZXdWYWx1ZSIsIm5ld1N0YXRlIiwiZklucHV0IiwicmVuZGVyTW9iaWxlU2VhcmNoIiwiaXNNb2JpbGUiLCJlZGl0aW5nIiwidmFsaWQiLCJ0eXBpbmdUaW1lciIsInRpbWVyIiwic2V0U3RhdGUiLCJ0eXBpbmciLCJjbG9zZU1vYmlsZVNlYXJjaCIsIm93blBsYWNlcyIsInBlbmRpbmdTZWxlY3Rpb24iLCJzdWdnZXN0aW9uSW5kZXgiLCJzZWxlY3Rpb25Eb25lIiwic3VnZ2VzdGlvblZhbHVlIiwiYmx1ciIsImhhbmRsZVZpYVBvaW50cyIsImZvY3VzQ2hhbmdlIiwiaXNFbWJlZGRlZCIsInByZXZTdGF0ZSIsImNoZWNrUGVuZGluZ1NlbGVjdGlvbiIsImNsZWFuRXhlY3V0ZWQiLCJ1c2VBbGwiLCJpc0VtcHR5IiwiaXNMb2NhdGlvblNlYXJjaCIsIm5ld1RhcmdldHMiLCJleGVjdXRlU2VhcmNoIiwic2VhcmNoUmVzdWx0IiwidG9Vbml4SW50ZWdlciIsInRyYW5zbGF0ZWQiLCJvbkNsZWFyIiwiaW5wdXRWYWx1ZSIsImNsZWFyTG9jYXRpb25UZXh0Iiwic3RhdGVLZXlEb3duIiwiYXV0b3N1Z2dlc3QiLCJzdG9yZVJlZiIsImNvbnRlbnQiLCJTdWdnZXN0aW9uSXRlbSIsImFyaWFGYXZvdXJpdGVTdHJpbmciLCJmaWxsSW5wdXQiLCJnZXRBdXRvU3VnZ2VzdEljb25zIiwibW9kZUljb25Db2xvcnMiLCJtb2RlU2V0Iiwib25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkIiwiaW5wdXRDbGlja2VkIiwiZmlyc3RTdWdnZXN0aW9uIiwiU2V0IiwiY2xlYXJGdXR1cmVSb3V0ZXMiLCJkZWZhdWx0Wm9uZSIsInRpbWVab25lIiwiYWRkUmVzb3VyY2VCdW5kbGUiLCJzaG91bGRDb21wb25lbnRVcGRhdGUiLCJuZXh0UHJvcHMiLCJuZXh0U3RhdGUiLCJpc0VxdWFsIiwiY29tcG9uZW50RGlkVXBkYXRlIiwiY2hhbmdlTGFuZ3VhZ2UiLCJVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsInJlbmRlciIsInRyYW5zbGF0ZWRQbGFjZWhvbGRlciIsInRoaW4iLCJpbnB1dENsYXNzTmFtZSIsImtleURvd24iLCJhcmlhQmFySWQiLCJTZWFyY2hCYXJJZCIsImFyaWFSZXF1aXJlZFRleHQiLCJhcmlhTGFiZWxJbnN0cnVjdGlvbnMiLCJtb3ZpbmdUb0Rlc3RpbmF0aW9uRmllbGRUZXh0IiwiYXJpYUxhYmVsVGV4dCIsImFyaWFTdWdnZXN0aW9uTGVuIiwiY291bnQiLCJhcmlhQ3VycmVudFN1Z2dlc3Rpb24iLCJzdWdnZXN0aW9uQXNBcmlhQ29udGVudCIsInNlbGVjdGlvbiIsInJvbGUiLCJpc09yaWdpbkRlc3RpbmF0aW9uT3JWaWFwb2ludCIsIm1vYmlsZUxhYmVsIiwib25TZWxlY3RlZCIsImN4IiwiaWNvbiIsIm9uRm9jdXMiLCJoaWdobGlnaHRGaXJzdFN1Z2dlc3Rpb24iLCJjbGVhckJ1dHRvbiIsInN0b3JlSW5wdXRSZWZlcmVuY2UiLCJyb3V0ZXNQcmVmaXgiLCJzdG9wc1ByZWZpeCIsIm9iamVjdE9mIiwiRFRBdXRvc3VnZ2VzdFdpdGhTY3JvbGxMb2NrIiwiaG9va3MiXSwibWFwcGluZ3MiOiJxMURBQUEsU0FBU0EsRUFBUUMsR0FHZixPQUFPRCxFQUFVLG1CQUFxQkUsUUFBVSxpQkFBbUJBLE9BQU9DLFNBQVcsU0FBVUYsR0FDN0YsY0FBY0EsQ0FDZixFQUFHLFNBQVVBLEdBQ1osT0FBT0EsR0FBSyxtQkFBcUJDLFFBQVVELEVBQUVHLGNBQWdCRixRQUFVRCxJQUFNQyxPQUFPRyxVQUFZLGdCQUFrQkosQ0FDdEgsRUFBS0QsRUFBUUMsRUFDYixDQ05BLFNBQVNLLEVBQWNDLEdBQ3JCLElBQUlDLEVD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
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react"),require("prop-types"),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/get"),require("@digitransit-component/digitransit-component-suggestion-item"),require("lodash/isEqual"),require("lodash/memoize"),require("lodash/escapeRegExp"),require("lodash/cloneDeep"),require("@digitransit-component/digitransit-component-icon"),require("luxon"),require("lodash/isEmpty"),require("react-modal"),require("@digitransit-component/digitransit-component-dialog-modal")):"function"==typeof define&&define.amd?define(["exports","react","prop-types","i18next","classnames","react-autosuggest","lodash/debounce","lodash/flatten","lodash/take","lodash/isString","lodash/orderBy","lodash/uniqWith","lodash/get","@digitransit-component/digitransit-component-suggestion-item","lodash/isEqual","lodash/memoize","lodash/escapeRegExp","lodash/cloneDeep","@digitransit-component/digitransit-component-icon","luxon","lodash/isEmpty","react-modal","@digitransit-component/digitransit-component-dialog-modal"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).DTAutosuggest={},e.React,e.PropTypes,e.i18next,e.cx,e.Autosuggest,e.debounce,e.flatten,e.take,e.isString,e.orderBy,e.uniqWith,e.get,e.SuggestionItem,e.isEqual,e.memoize,e.escapeRegExp,e.cloneDeep,e.Icon,e.luxon,e.isEmpty,e.ReactModal,e.DialogModal)}(this,(function(e,t,n,o,i,s,r,a,l,u,c,d,p,h,g,f,b,m,y,v,_,S,k){"use strict";function w(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var x=w(t),O=w(n),j=w(o),M=w(i),R=w(s),P=w(r),E=w(a),C=w(l),L=w(u),I=w(c),N=w(d),z=w(p),F=w(h),A=w(g),T=w(f),q=w(b),D=w(m),V=w(y),B=w(_),H=w(S),$=w(k);function U(e){return U="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},U(e)}function W(e){var t=function(e,t){if("object"!=U(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,t||"default");if("object"!=U(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==U(t)?t:t+""}function G(e,t,n){return(t=W(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Y(e,t){return e&&t&&e===t}const Q=["stop","station","favouriteStop","favouriteStation"],Z=["favouriteVehicleRentalStation","bikestation"];function K(e){if(!e)return"";const t=e.split(":");return 0===t.length?"":`citybikes${t[0]}:bikestation:${t[1]}`}function X(e,t){const n=e.properties,o=t.properties;if("FutureRoute"===e.type&&"FutureRoute"===t.type){const e=n.origin,t=n.destination,i=o.origin,s=o.destination;return`${e.name}//${e.localadmin}//${t.name}//${t.localadmin}`===`${i.name}//${i.localadmin}//${s.name}//${s.localadmin}`}if("FutureRoute"===e.type||"FutureRoute"===t.type)return!1;if(Z.includes(n.layer)&&Z.includes(o.layer)){return(n.gid||K(n.labelId))===(o.gid||K(o.labelId))}if(n.gtfsId&&o.gtfsId)return n.gtfsId===o.gtfsId;if(Q.includes(n.layer)&&Q.includes(o.layer)&&n.gid&&o.gid)return n.gid===o.gid;const i=e&&e.geometry?e.geometry.coordinates:void 0,s=t&&t.geometry?t.geometry.coordinates:void 0;return!!(i&&s&&Math.abs(i[0]-s[0])<1e-6&&Math.abs(i[1]-s[1])<1e-6&&(Y(n.name,o.name)||Y(n.label,o.label)||Y(n.address,o.address)||Y(n.address,o.label)||Y(n.label,o.address)))}const J=e=>L.default(e)?e.toLowerCase():"",ee="back",te="currentPosition",ne="favouriteStop",oe="favouriteStation",ie="favouritePlace",se="favouriteRoute",re="favouriteVehicleRentalStation",ae="futureRoute",le="station",ue="selectFromMap",ce="ownLocations",de="stop",pe="bikestation",he="carpark",ge="bikepark",fe=({layer:e,type:t})=>"stop"===e||"favouriteStop"===e||"stop"===t||"favouriteStop"===t,be=(e,t)=>{switch(e){case te:return 1;case ee:return.9;case ue:return.8;case ce:return.79;case oe:case ie:case ne:case se:case re:return.45;case ae:return.44;case le:return L.default(t)&&0===t.indexOf("gtfs")?.43:.42;case he:case ge:case pe:return.38;case de:return.36;default:return.41}},me=(e,t,n="")=>{if(!Array.isArray(t))return t;const o=t=>L.default(t)&&e&&e.test(t),i=J(n),s=o(i),r=I.default(t,[e=>s&&o(J(e.properties.shortName))&&0===J(e.properties.shortName).indexOf(i)?1:0,e=>{const{confidence:t,layer:n,source:o}=e.properties;if(0===i.length)return be(n,o);if(!t)return be(n,o)+((e,t)=>L.default(e)&&0!==e.length?["name","label","address","shortName"].map((e=>t[e])).filter((e=>L.default(e)&&e.length>0)).map((t=>{const n=J(t);return 0===n.indexOf(e)?.5+e.length/n.length:.5*e.length/(e.length+1)})).reduce(((e,t)=>t>e?t:e),0):0)(i,e.properties);switch(n){case le:return t+(0===o.indexOf("gtfs")?.02:.01);case de:case he:case ge:return t-.05;case pe:return t-.04;default:return t}},"properties.shortName","properties.longName"],["desc","desc","asc","asc"]);return N.default((e=>{let t=[],n=0,o=0,i=[],s=[];for(;n<e.length;){var r,a,l;o!==(null===(r=e[n].properties)||void 0===r||null===(r=r.shortName)||void 0===r?void 0:r.length)&&(t=t.concat(i,s),o=null===(l=e[n].properties)||void 0===l||null===(l=l.shortName)||void 0===l?void 0:l.length,i=[],s=[]),isNaN(null===(a=e[n].properties)||void 0===a||null===(a=a.shortName)||void 0===a?void 0:a.slice(-1))?i.push(e[n]):s.push(e[n]),n+=1}return t=t.concat(i,s),t})(r),X)},ye=(e,t)=>null!=t&&-1!==e.lastIndexOf(t)?e.substring(0,e.lastIndexOf(t)-1):e;function ve(e,t,n){if("string"==typeof t&&t.length>0){const o=t.toLowerCase().trim(),i=o.includes(" ")||o.includes(",");return e.filter((e=>{let t=[];n.forEach((n=>{let o=z.default(e,n);i||"properties.label"!==n&&"address"!==n||!o||(o=o.split(","),o.length>2?o.splice(o.length-2,2):o.length>1&&o.splice(o.length-1,1),o=o.join(",")),o&&(t=i?t.concat(o.toLowerCase()):t.concat(o.toLowerCase().replace(/,/g," ").split(" ")))}));for(let e=0;e<t.length;e++)if(0===t[e].indexOf(o))return!0;return!1}))}return e}function _e(e,t){return e?Object.keys(e).map((n=>{const o=t||n,i=e[n];return"object"==typeof i?_e(i,o):`${encodeURIComponent(o)}=${encodeURIComponent(i)}`})).join("&"):""}const Se=require("axios").default;function ke(e,t){return Se.get(encodeURI(e)+(t?(-1===e.search(/\?/)?"?":"&")+_e(t):""),{timeout:1e4,method:"GET",headers:{Accept:"application/json"}}).then((e=>e.data))}function we(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function xe(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?we(Object(n),!0).forEach((function(t){G(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):we(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Oe(e,t,n,o,i,s,r,a){const l=e?e.trim():null;if(null==l||l.length<1||r&&!r.test(l))return Promise.resolve([]);const u=s||"https://api.digitransit.fi/geocoding/v1/search";let c=xe(xe(xe({text:l},t),o),{},{lang:n});if(i&&(c=xe(xe({},c),{},{sources:i})),a){const e=a.toString();c=xe(xe({},c),{},{layers:e})}return ke(u,c).then((e=>e.features))}function je(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Me(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?je(Object(n),!0).forEach((function(t){G(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):je(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Re(e,t){if(!e||e.length<1)return Promise.resolve([]);let n="";const o=e.map((e=>{const t="stop"===e.type?"stop":"station";let o=`gtfs${e.gtfsId.split(":")[0].toLowerCase()}:${t}:GTFS:${e.gtfsId}`;return e.code&&(o+=`#${e.code}`),n+=`${o},`,Me(Me({},e),{},{gid:o})})).reduce((function(e,t){return e[t.gid]=t,e}),{});return ke(t,{ids:n.slice(0,-1)}).then((e=>e.features.map((e=>({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:fe(e.properties)?"favouriteStop":"favouriteStation"},geometry:e.geometry})))))}function Pe(e,t,n){let o=ve(e,t,["properties.name","properties.label","properties.address","properties.shortName","properties.longName"]);return n&&(o=o.filter((e=>!n.includes(e.properties.layer)))),Promise.resolve(C.default(o,10).map((e=>{const t=Me(Me({},e),{},{type:"OldSearch",timetableClicked:!1,arrowClicked:!1});return delete t.properties.confidence,t})))}const Ee=["route-TRAM","route-BUS","route-RAIL","route-FERRY","route-SUBWAY","route-AIRPLANE","route-FUNICULAR"],Ce=["venue","address","street"],Le=["carpark","bikepark"],Ie=["stop","station"];const Ne=P.default((function(e,t,n,o,i,s,{input:r},a,l,u){const{getPositions:c,getFavouriteLocations:d,getOldSearches:p,getFavouriteStops:h,parkingAreaSources:g,getLanguage:f,getStopAndStationsQuery:b,getFavouriteVehicleRentalStationsQuery:m,getFavouriteVehicleRentalStations:y,getFavouriteRoutesQuery:v,getFavouriteRoutes:_,getRoutesQuery:S,context:k,isPeliasLocationAware:w,minimalRegexp:x,lineRegexp:O,URL_PELIAS:j,URL_PELIAS_PLACE:M,feedIDs:R,geocodingSearchParams:P,geocodingSources:L,getFutureRoutes:I,cityBikeNetworks:N}=o,z=!e||0===e.length,F=!t||0===t.length,A=c(k),T=[],q={type:"all",term:r,results:[]},D=f(k),V=w&&null!=u&&u.lat&&null!=u&&u.lon?{"focus.point.lat":u.lat.toFixed(3),"focus.point.lon":u.lon.toFixed(3)}:{},B=n?n.split("-")[1]:void 0;if(e.includes("CurrentPosition")&&"geolocation-not-supported"!==A.status&&T.push(function(e,t){return"string"!=typeof e||0===e.length?Promise.resolve([{type:"CurrentLocation",address:t.address,lat:t.lat,lon:t.lon,properties:{labelId:"use-own-position",layer:"currentPosition",address:t.address,lat:t.lat,lon:t.lon},geometry:{type:"Point",coordinates:[t.lon,t.lat]}}]):Promise.resolve([])}(r,A)),(z||e.includes("MapPosition"))&&T.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([])}(r)),e.includes("FutureRoutes")){const e=I(k);T.push(C.default(e,3))}if(e.includes("SelectFromOwnLocations")&&function(e){const t=e.getFavouriteLocations(e.context);if((null==t?void 0:t.length)>0)return!0;const n=e.getFavouriteVehicleRentalStations(e.context);if((null==n?void 0:n.length)>0)return!0;const o=e.getFavouriteStops(e.context);return(null==o?void 0:o.length)>0}(o)&&T.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([])}(r)),z||e.includes("Locations")){const n=P;if(t.includes("Favourite")){const e=d(k);T.push(function(e,t){return Promise.resolve(ve(e,t,["address","name"]).map((e=>({type:"FavouritePlace",properties:Me(Me({},e),{},{label:e.name,layer:"favouritePlace"}),geometry:{type:"Point",coordinates:[e.lon,e.lat]}}))))}(e,r)),t.includes("Back")&&T.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(F||t.includes("Datasource")){const t=["venue","address","street"];e.includes("Stations")&&t.push("station"),T.push(Oe(r,n,D,V,L.join(","),j,x,t))}if(F||t.includes("History")){const e=p(k,"endpoint"),t=["bikestation"];t.push(...Ie),t.push(...Ee),t.push(...Le),T.push(Pe(e,r,t))}}if(z||e.includes("ParkingAreas")){if(F||t.includes("Datasource")){const e=P;s&&10!==s&&(e.size=s);const t=["carpark","bikepark"],n=g?g.join(","):null;T.push(Oe(r,e,D,V,n,j,x,t).then((e=>i?i(e,B):e)))}if(F||t.includes("History")){const e=p(k),t=["bikestation"];t.push(...Ie),t.push(...Ee),t.push(...Ce),T.push(Pe(e,r,t))}}const H=e.includes("Stops"),$=e.includes("Stations");if(z||H||$){if(t.includes("Favourite")){const e=h(k);let t;t=e.every((e=>"station"===e.type))?Re(e,M).then((e=>i?i(e,B):e)):b(e).then((e=>Re(e,M))).then((e=>i?i(e,B):e)),T.push(function(e,t,n,o){return e.then((e=>ve(e.filter((e=>"stop"===e.type?n:o)),t,["properties.name","properties.name","properties.address"])))}(t,r,H,$))}if(F||t.includes("Datasource")){const t=[];H&&t.push("stop"),$&&t.push("station");const n=s&&10!==s?{size:s}:{};P&&P["boundary.country"]&&(n["boundary.country"]=P["boundary.country"]),(z||e.includes("Locations"))&&(n.dedupestops=1);const o=R.map((e=>`gtfs${e}`)).join(",");T.push(Oe(r,n,D,V,o,j,x,t).then((e=>i?i(e,B):e)))}if(F||t.includes("History")){const e=p(k).filter((e=>!e.properties.gid||e.properties.gid.includes("GTFS:"))),t=["bikestation"];t.push(...Ee),t.push(...Ce),t.push(...Le),H||t.push("stop"),$||t.push("station"),n?T.push(Pe(e,r,t).then((e=>i?i(e,B):e))):T.push(Pe(e,r,t))}}if(z||e.includes("Routes")){if(t.includes("Favourite")){const e=_(k);T.push(v(e,r,B,l).then((e=>i?i(e,B,"Routes"):e)))}if(T.push(S(r,R,n,l).then((e=>i?i(e,B,"Routes"):e))),F||t.includes("History")){const e=p(k),t=["bikestation"];n&&t.push(...Ee.filter((e=>!(e===n)))),t.push(...Ie),t.push(...Ce),t.push(...Le),T.push(Pe(e,r,t).then((e=>i?i(e,B,"Routes"):e)))}}if(z||e.includes("VehicleRentalStations")){if(t.includes("Favourite")){const e=y(k);T.push(m(e,r))}if(F||t.includes("Datasource")){const e=["bikestation"],t=s&&10!==s?{size:s}:{};T.push(Oe(r,t,D,V,N.join(","),j,x,e).then((e=>i?i(e,B,"VehicleRentalStations"):e)))}if(F||t.includes("History")){const e=p(k),t=[...Ie];t.push(...Ee),t.push(...Ce),t.push(...Le),T.push(Pe(e,r,t))}}Promise.all(T).then(E.default).then((e=>{q.results=e})).catch((e=>{q.error=e})).then((()=>{a(Me(Me({},q),{},{results:me(O,q.results,r)}))}))}),300,{leading:!0}),ze=e=>e.localadmin||e.localadmin||e.address&&e.address.lastIndexOf(",")<e.address.length-2&&e.address.substring(e.address.lastIndexOf(",")+2)||"",Fe=({id:e,code:t})=>t||(void 0!==e&&void 0!==e.indexOf&&-1!==e.indexOf("#")?e.substring(e.indexOf("#")+1):void 0),Ae=T.default(((e,t=!1)=>{switch(e.layer){case"currentPosition":return[e.labelId,e.address];case"selectFromMap":case"ownLocations":case"back":return[e.labelId];case"favouritePlace":return n=e.name,o=e.address,[n||o&&o.split(",")[0],"string"==typeof o?o.replace(new RegExp(`${q.default(n)}([ ,]|$)+`),""):""];case"favouriteVehicleRentalStation":case"bikestation":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!t&&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(`${q.default(e.name)}(,)?( )?`),"")];case"favouriteStop":case"stop":return t?[e.name||e.label||e.address&&e.address.split(",")[0],ze(e)]:[e.name,e.id,Fe(e),ze(e)];default:return[e.name||e.label||e.address&&e.address.split(",")[0],ze(e)]}var n,o}),((e,t)=>{const n=D.default(e);return n.plain=t,n}));const Te={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":"Venue, place and stopsearch.","search-autosuggest-label-instructions-desktop":"Navigate list with arrow keys and select with enter key.","search-autosuggest-label-instructions-mobile":"Enter the location and navigate in the list by swiping.","search-autosuggest-label-move-to-destination":"After selecting the starting location you are automatically moved to the destination field.","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":"Venue, place and stopsearch.","search-autosuggest-label-instructions-desktop":"Navigate list with arrow keys and select with enter key.","search-autosuggest-label-instructions-mobile":"Enter the location and navigate in the list by swiping.","search-autosuggest-label-move-to-destination":"After selecting the starting location you are automatically moved to the destination field.","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",vehiclerentalstation:"Pyöräasema",bikepark:"Liityntäpysäköinti",bus:"bussi",cancel:"Peruuta",carpark:"Liityntäpysäköinti","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":"Paikka, linja ja pysäkkihaku.","search-autosuggest-label-instructions-desktop":"Navigoi listassa nuolinäppäimillä ja valitse enterillä.","search-autosuggest-label-instructions-mobile":"Syötä sijainti ja navigoi listassa pyyhkäisemällä.","search-autosuggest-label-move-to-destination":"Valittuasi lähtöpaikan siirrytään suoraan määränpää-kenttään.","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"},pl:{address:"Adres","address-place-or-business":"Adres, miejsce lub firma","add-via-button-label":"Dodaj punkt pośredni","add-via-duration-button-label":"Wybierz czas postoju dla punktu {{index}}","add-via-duration-button-label-close":"Zamknij wybornik czasu postoju w punkcie {{index}}","add-via-duration-button-label-open":"Otwórz wybornik czasu postoju w punkcie {{index}}",airplane:"Lot",arrival:"Przyjazd",back:"Wróć",bikepark:"Parkuj i Jedź dla rowerów",bikerentalstation:"Stacja rowerowa",bus:"autobus",cancel:"Anuluj",carpark:"Parkuj i Jedź","clear-button-label":"Wyczyść","clear-search-history":"Wyczyść historię wyszukiwania",currentposition:"Obecne położenie",delete:"Usuń","delete-old-searches-header":"Czy na pewno chcesz wyczyścić historię wyszukiwania?",departure:"Odjazd",destination:"Cel","give-origin":"Wprowadź swój punkt początkowy.","give-destination":"Wprowadź swój cel",favourite:"Ulubione",ferry:"Prom","future-route":"Przyszła trasa",origin:"Początek","origin-stop-near-you":"Początek",ownlocations:"Własne miejsca",loading:"Ładowanie…","minute-short":"min.",platform:"Peron",rail:"Pociąg",required:"wymagane pole",search:"Szukaj","search-address-or-place":"Szukaj po adresie lub nazwie miejsca","search-button-label":"Szukaj","search-destination":"Szukaj celu, trasy lub przystanku","search-destination-index":"Wprowadź punkt docelowy","search-destination-results-but-no-search":"Wyświetl wyniki w sąsiedniej karcie „Cel”","search-no-results":"Brak lokalizacji","search-origin":"Wyszukaj początek, koniec lub punkt pośredni","search-origin-index":"Wprowadź punkt początkowy","search-position":"Wykryj lokalizację","search-autosuggest-label":"Miejsce, lokalizacja i przystanek.","search-autosuggest-label-instructions-desktop":"Nawiguj po liście używając strzałek i wybieraj klawiszem Enter.","search-autosuggest-label-instructions-mobile":"Wprowadź lokalizację i nawiguj po liście gestami przesuwania.","search-autosuggest-label-move-to-destination":"Po wybraniu lokalizacji początkowej, automatycznie przejdziesz do pola miejsca docelowego.","search-autosuggest-len":"Dostępna jest {{count}} propozycja","search-autosuggest-len_few":"Dostępne są {{count}} propozycje","search-autosuggest-len_other":"Dostępne jest {{count}} propozycji","search-current-suggestion":"Obecny wybór: {{selection}}",street:"Ulica",subway:"Metro",station:"Stacja",stop:"Przystanek","stop-near-you":"Szukaj przystanków i tras","stop-near-you-airplane":"Szukaj lotów i lotnisk","stop-near-you-bus":"Szukaj tras autobusowych i przystanków","stop-near-you-citybike":"Szukaj stacji rowerów miejskich","stop-near-you-rail":"Szukaj tras kolejowych i przystanków","stop-near-you-subway":"Szukaj tras metra i przystanków ","stop-near-you-tram":"Szukaj tras tramwajowych i przystanków","stop-route-station":"Wyszukiwanie autobusów i przystanków","today-at":"dziś o","tomorrow-at":"jutro o",tram:"Tramwaj",track:"Tor","use-own-position":"Użyj obecnej lokalizacji","select-from-map":"Wybierz miejsce na mapie","select-from-own-locations":"Wybierz z własnych miejsc",venue:"Miejsce","via-point":"Przez punkt",where:"Dokąd?",place:"Miejsce"},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":"Plats, linje och hållplatssökning.","search-autosuggest-label-instructions-desktop":"Navigera listan med piltangenterna och välj med Enter-tangeten.","search-autosuggest-label-instructions-mobile":"Ange platsen och navigera i listan genom att svepa.","search-autosuggest-label-move-to-destination":"Efter att du valt avgångsplatsen tas du direkt till Destination-fältet.","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 qe(e,t){void 0===t&&(t={});var n=t.insertAt;if(e&&"undefined"!=typeof document){var o=document.head||document.getElementsByTagName("head")[0],i=document.createElement("style");i.type="text/css","top"===n&&o.firstChild?o.insertBefore(i,o.firstChild):o.appendChild(i),i.styleSheet?i.styleSheet.cssText=e:i.appendChild(document.createTextNode(e))}}var De={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"};qe("input[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 #888;\n background-color: #fff;\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 -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: 0 0 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: #666;\n opacity: 1;\n font-size: 15px; }\n\n.styles_hasValue__tzCTr {\n color: #333; }\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: #f2f5f7; }\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: #f2f5f7; }\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: #888;\n width: 16px;\n height: 16px; }\n .styles_autosuggest-input-icon__uhYGQ.styles_origin-stop-near-you__Ekwp- svg {\n fill: #888;\n width: 16px;\n height: 16px; }\n\nbutton.styles_clear-input__Vx7B4 {\n display: flex;\n position: absolute;\n padding: 14px 0;\n right: 0;\n width: 44px;\n height: 100%;\n color: var(--color);\n outline: none;\n border: 0;\n margin: 0;\n justify-content: center;\n text-align: left;\n background: none;\n border-style: none;\n border-width: 0;\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 /* 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, :active) {\n clip: rect(0 0 0 0);\n clip-path: inset(50%);\n height: 1px;\n overflow: hidden;\n position: absolute;\n white-space: nowrap;\n width: 1px; }\n");var Ve={"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"};qe("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 #888 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: #333; }\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: #666;\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: 0;\n padding: 0 15px 7px 0;\n height: 26px;\n color: var(--color);\n border: 0;\n margin: 0;\n justify-content: center;\n text-align: left;\n background: none;\n border-style: none;\n border-width: 0;\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: #333; }\n\n.MobileSearch_suggestion__UBz5O {\n font-size: 15px;\n min-height: 50px;\n letter-spacing: -0.6px;\n color: #333;\n font-weight: 500;\n background: #fff;\n margin: 0;\n padding: 0; }\n\n.MobileSearch_suggestionHighlighted__7ef5G {\n background-color: #f2f5f7; }\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: #f2f5f7; }\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: #f2f5f7;\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 .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: #fff;\n transition: transform 0.25s;\n transform: translateY(10%); }\n");var Be={"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 He(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function $e(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?He(Object(n),!0).forEach((function(t){G(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):He(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}qe("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 #888 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: #333; }\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: #666;\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: 0;\n padding: 0 15px 7px 0;\n height: 26px;\n color: var(--color);\n border: 0;\n margin: 0;\n justify-content: center;\n text-align: left;\n background: none;\n border-style: none;\n border-width: 0;\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: #333; }\n\n.MobileNoScroll_suggestion__NAWcY {\n font-size: 15px;\n min-height: 50px;\n letter-spacing: -0.6px;\n color: #333;\n font-weight: 500;\n background: #fff;\n margin: 0;\n padding: 0; }\n\n.MobileNoScroll_suggestionHighlighted__V0GuG {\n background-color: #f2f5f7; }\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: #f2f5f7; }\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: #f2f5f7;\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 .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: #fff;\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");class Ue extends R.default{constructor(e){super(e);const t=this;t.onSuggestionTouchMove=()=>{t.justSelectedSuggestion=!1,t.pressedSuggestion=null}}}const We=({appElement:e,id:n,closeHandle:o,clearInput:i,value:s,suggestions:r,inputProps:a,fetchFunction:l,renderSuggestion:u,getSuggestionValue:c,ariaLabel:d,label:p,onSuggestionSelected:h,clearOldSearches:g,dialogHeaderText:f,dialogPrimaryButtonText:b,dialogSecondaryButtonText:m,clearInputButtonText:y,focusInput:v,color:_,hoverColor:S,accessiblePrimaryColor:k,searchOpen:w,fontWeights:O,showScroll:j})=>{var M;const R=j?Ve:Be,P=`${n}-input`,E=`${n}-label`,[C,L]=t.useState(!1),I=x.default.useRef();t.useEffect((()=>{H.default.setAppElement(e)}),[]);const N=t.useCallback((()=>{o()})),z=(e,t)=>{"clear-search-history"===t.suggestion.type?L(!0):t.suggestion.properties.arrowClicked||h(e,t)},F=e=>{const t=e&&(e.key||e.which||e.keyCode)||"";return!(!t||![13," ","Spacebar"].concat([32,"Enter"]).includes(t))&&(e.preventDefault(),!0)},A=e=>"clear-search-history"===e.type?"":c(e),T=e=>"clear-search-history"===e.type?x.default.createElement("button",{type:"button",className:R["clear-search-history"]},e.labelId):u(e);return v&&null!==(M=I.current)&&void 0!==M&&M.input&&I.current.input.focus(),x.default.createElement(H.default,{isOpen:w,className:R["mobile-modal"],overlayClassName:R["mobile-modal-overlay"],onAfterClose:N,shouldCloseOnEsc:!0},x.default.createElement("div",{className:R["mobile-modal-content"],style:{"--color":`${_}`,"--accessible-primary-color":k,"--hover-color":`${S}`,"--font-weight-medium":O.medium}},x.default.createElement("div",{className:R["combobox-container"],htmlFor:P},x.default.createElement("button",{type:"button",className:R["combobox-icon"],onClick:()=>N(),onKeyDown:e=>F(e)&&N(),"aria-label":m,tabIndex:0},x.default.createElement(V.default,{img:"arrow"})),x.default.createElement("span",{className:R["right-column"]},x.default.createElement("span",{className:R["combobox-label"],id:E},p),x.default.createElement(Ue,{alwaysRenderSuggestions:!0,id:n,suggestions:r,onSuggestionsFetchRequested:l,getSuggestionValue:A,renderSuggestion:T,focusInputOnSuggestionClick:!0,shouldRenderSuggestions:()=>!0,inputProps:$e($e({},a),{},{className:`${R.input} ${R[n]||""} ${a.value?R.hasValue:""}`,autoFocus:!0}),renderInputComponent:e=>x.default.createElement(x.default.Fragment,null,x.default.createElement("input",Object.assign({"aria-label":d,id:n},e)),s&&x.default.createElement("button",{type:"button",className:R["clear-input"],onClick:i,onKeyDown:e=>F(e)&&i(),"aria-label":y},x.default.createElement(V.default,{img:"close",color:_}))),theme:R,onSuggestionSelected:z,ref:I}))),x.default.createElement($.default,{appElement:e,isModalOpen:C,handleClose:()=>L(!1),headerText:f,primaryButtonText:b,secondaryButtonText:m,primaryButtonOnClick:()=>{g(),L(!1)},secondaryButtonOnClick:()=>L(!1),color:_,hoverColor:S,fontWeights:O})))};"production"!==process.env.NODE_ENV&&(We.propTypes={appElement:O.default.string.isRequired,id:O.default.string.isRequired,closeHandle:O.default.func.isRequired,clearInput:O.default.func.isRequired,value:O.default.string,clearInputButtonText:O.default.string.isRequired,suggestions:O.default.arrayOf(O.default.object).isRequired,inputProps:O.default.shape({onChange:O.default.func.isRequired,onBlur:O.default.func.isRequired,value:O.default.string.isRequired,placeholder:O.default.string.isRequired,className:O.default.string.isRequired}).isRequired,fetchFunction:O.default.func.isRequired,getSuggestionValue:O.default.func.isRequired,renderSuggestion:O.default.func.isRequired,onSuggestionSelected:O.default.func.isRequired,label:O.default.string.isRequired,clearOldSearches:O.default.func.isRequired,ariaLabel:O.default.string,dialogHeaderText:O.default.string,dialogPrimaryButtonText:O.default.string,dialogSecondaryButtonText:O.default.string,focusInput:O.default.bool,color:O.default.string,hoverColor:O.default.string,accessiblePrimaryColor:O.default.string.isRequired,searchOpen:O.default.bool.isRequired,fontWeights:O.default.shape({medium:O.default.number.isRequired}).isRequired,showScroll:O.default.bool}),We.defaultProps={value:void 0,ariaLabel:void 0,dialogHeaderText:void 0,dialogPrimaryButtonText:void 0,dialogSecondaryButtonText:void 0,focusInput:!1,color:void 0,hoverColor:void 0,showScroll:void 0};var Ge,Ye=function(e,t){return e(t={exports:{}},t.exports),t.exports}((function(e,t){var n;"undefined"!=typeof self&&self,e.exports=(n=x.default,function(){var e={888:function(e,t,n){var o,i;i=void 0!==n.g?n.g:"undefined"!=typeof window?window:this,o=function(){return function(e){var t={ignore:"[data-scroll-ignore]",header:null,topOnEmptyHash:!0,speed:500,speedAsDuration:!1,durationMax:null,durationMin:null,clip:!0,offset:0,easing:"easeInOutCubic",customEasing:null,updateURL:!0,popstate:!0,emitEvents:!0},n=function(){var e={};return Array.prototype.forEach.call(arguments,(function(t){for(var n in t){if(!t.hasOwnProperty(n))return;e[n]=t[n]}})),e},o=function(e){"#"===e.charAt(0)&&(e=e.substr(1));for(var t,n=String(e),o=n.length,i=-1,s="",r=n.charCodeAt(0);++i<o;){if(0===(t=n.charCodeAt(i)))throw new InvalidCharacterError("Invalid character: the input contains U+0000.");s+=t>=1&&t<=31||127==t||0===i&&t>=48&&t<=57||1===i&&t>=48&&t<=57&&45===r?"\\"+t.toString(16)+" ":t>=128||45===t||95===t||t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122?n.charAt(i):"\\"+n.charAt(i)}return"#"+s},i=function(){return Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)},s=function(t){return t?(n=t,parseInt(e.getComputedStyle(n).height,10)+t.offsetTop):0;var n},r=function(t,n,o){0===t&&document.body.focus(),o||(t.focus(),document.activeElement!==t&&(t.setAttribute("tabindex","-1"),t.focus(),t.style.outline="none"),e.scrollTo(0,n))},a=function(t,n,o,i){if(n.emitEvents&&"function"==typeof e.CustomEvent){var s=new CustomEvent(t,{bubbles:!0,detail:{anchor:o,toggle:i}});document.dispatchEvent(s)}};return function(l,u){var c,d,p,h,g={cancelScroll:function(e){cancelAnimationFrame(h),h=null,e||a("scrollCancel",c)},animateScroll:function(o,l,u){g.cancelScroll();var d=n(c||t,u||{}),f="[object Number]"===Object.prototype.toString.call(o),b=f||!o.tagName?null:o;if(f||b){var m=e.pageYOffset;d.header&&!p&&(p=document.querySelector(d.header));var y,v,_,S=s(p),k=f?o:function(t,n,o,s){var r=0;if(t.offsetParent)do{r+=t.offsetTop,t=t.offsetParent}while(t);return r=Math.max(r-n-o,0),s&&(r=Math.min(r,i()-e.innerHeight)),r}(b,S,parseInt("function"==typeof d.offset?d.offset(o,l):d.offset,10),d.clip),w=k-m,x=i(),O=0,j=function(e,t){var n=t.speedAsDuration?t.speed:Math.abs(e/1e3*t.speed);return t.durationMax&&n>t.durationMax?t.durationMax:t.durationMin&&n<t.durationMin?t.durationMin:parseInt(n,10)}(w,d),M=function(t){y||(y=t),O+=t-y,_=m+w*function(e,t){var n;return"easeInQuad"===e.easing&&(n=t*t),"easeOutQuad"===e.easing&&(n=t*(2-t)),"easeInOutQuad"===e.easing&&(n=t<.5?2*t*t:(4-2*t)*t-1),"easeInCubic"===e.easing&&(n=t*t*t),"easeOutCubic"===e.easing&&(n=--t*t*t+1),"easeInOutCubic"===e.easing&&(n=t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1),"easeInQuart"===e.easing&&(n=t*t*t*t),"easeOutQuart"===e.easing&&(n=1- --t*t*t*t),"easeInOutQuart"===e.easing&&(n=t<.5?8*t*t*t*t:1-8*--t*t*t*t),"easeInQuint"===e.easing&&(n=t*t*t*t*t),"easeOutQuint"===e.easing&&(n=1+--t*t*t*t*t),"easeInOutQuint"===e.easing&&(n=t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t),e.customEasing&&(n=e.customEasing(t)),n||t}(d,v=(v=0===j?0:O/j)>1?1:v),e.scrollTo(0,Math.floor(_)),function(t,n){var i=e.pageYOffset;if(t==n||i==n||(m<n&&e.innerHeight+i)>=x)return g.cancelScroll(!0),r(o,n,f),a("scrollStop",d,o,l),y=null,h=null,!0}(_,k)||(h=e.requestAnimationFrame(M),y=t)};0===e.pageYOffset&&e.scrollTo(0,0),function(e,t,n){t||history.pushState&&n.updateURL&&history.pushState({smoothScroll:JSON.stringify(n),anchor:e.id},document.title,e===document.documentElement?"#top":"#"+e.id)}(o,f,d),"matchMedia"in e&&e.matchMedia("(prefers-reduced-motion)").matches?r(o,Math.floor(k),!1):(a("scrollStart",d,o,l),g.cancelScroll(!0),e.requestAnimationFrame(M))}}},f=function(t){if(!t.defaultPrevented&&!(0!==t.button||t.metaKey||t.ctrlKey||t.shiftKey)&&"closest"in t.target&&(d=t.target.closest(l))&&"a"===d.tagName.toLowerCase()&&!t.target.closest(c.ignore)&&d.hostname===e.location.hostname&&d.pathname===e.location.pathname&&/#/.test(d.href)){var n,i;try{n=o(decodeURIComponent(d.hash))}catch(e){n=o(d.hash)}if("#"===n){if(!c.topOnEmptyHash)return;i=document.documentElement}else i=document.querySelector(n);(i=i||"#top"!==n?i:document.documentElement)&&(t.preventDefault(),function(t){if(history.replaceState&&t.updateURL&&!history.state){var n=e.location.hash;n=n||"",history.replaceState({smoothScroll:JSON.stringify(t),anchor:n||e.pageYOffset},document.title,n||e.location.href)}}(c),g.animateScroll(i,d))}},b=function(e){if(null!==history.state&&history.state.smoothScroll&&history.state.smoothScroll===JSON.stringify(c)){var t=history.state.anchor;"string"==typeof t&&t&&!(t=document.querySelector(o(history.state.anchor)))||g.animateScroll(t,null,{updateURL:!1})}};return g.destroy=function(){c&&(document.removeEventListener("click",f,!1),e.removeEventListener("popstate",b,!1),g.cancelScroll(),c=null,d=null,p=null,h=null)},function(){if(!("querySelector"in document&&"addEventListener"in e&&"requestAnimationFrame"in e&&"closest"in e.Element.prototype))throw"Smooth Scroll: This browser does not support the required JavaScript methods and browser APIs.";g.destroy(),c=n(t,u||{}),p=c.header?document.querySelector(c.header):null,document.addEventListener("click",f,!1),c.updateURL&&c.popstate&&e.addEventListener("popstate",b,!1)}(),g}}(i)}.apply(t,[]),void 0===o||(e.exports=o)},432:function(e,t,n){var o=this&&this.__createBinding||(Object.create?function(e,t,n,o){void 0===o&&(o=n),Object.defineProperty(e,o,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,o){void 0===o&&(o=n),e[o]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||o(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),i(n(47),t),i(n(926),t),i(n(349),t),i(n(137),t),i(n(729),t),i(n(383),t),i(n(450),t),i(n(358),t),i(n(753),t),i(n(869),t),i(n(352),t),i(n(446),t),i(n(164),t),i(n(305),t),i(n(502),t)},349:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useArrowNavigation=void 0;var o=n(156);t.useArrowNavigation=function(e){var t=e.listItems,n=e.onArrowUpOrDown,i=(0,o.useState)(0),s=i[0],r=i[1],a=(0,o.useCallback)((function(e){r(e)}),[t]),l=function(e){var o=e.key;if(null==t?void 0:t.length)if("ArrowUp"===o)n&&n(),e.preventDefault(),a(s>0?s-1:t.length-1);else{if("ArrowDown"!==o)return;n&&n(),e.preventDefault(),s<t.length-1?a(s+1):a(0)}};return(0,o.useEffect)((function(){return window.addEventListener("keydown",l),function(){return window.removeEventListener("keydown",l)}})),(0,o.useEffect)((function(){a(0)}),[t]),{selectedIndex:s}}},446:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useDebounce=void 0;var o=n(156);t.useDebounce=function(e,t){void 0===t&&(t=300);var n=(0,o.useState)(e),i=n[0],s=n[1];return(0,o.useEffect)((function(){var n=setTimeout((function(){s(e)}),t);return function(){clearTimeout(n)}}),[e,t]),i}},164:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useElementSize=void 0;var o=n(156);t.useElementSize=function(){var e,t,n=(0,o.useRef)(null);return[n,{width:null===(e=null==n?void 0:n.current)||void 0===e?void 0:e.clientWidth,height:null===(t=null==n?void 0:n.current)||void 0===t?void 0:t.clientHeight}]},t.default=t.useElementSize},137:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIntersectionObserver=void 0;var o=n(156);t.useIntersectionObserver=function(e){var t=(0,o.useRef)(null),n=(0,o.useState)(!1),i=n[0],s=n[1],r=function(e){var t=e[0];s(t.isIntersecting)};return(0,o.useEffect)((function(){if(window&&window.IntersectionObserver){var n=new IntersectionObserver(r,e),o=t.current;return t.current&&n.observe(t.current),function(){o&&n.unobserve(o)}}s(!1)}),[t,e]),{containerRef:t,isVisible:i}},t.default=t.useIntersectionObserver},729:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsBreakpoint=void 0;var o=n(156),i=n(432),s={xs:1,mobileSmall:320,mobile:375,tablet:768,tabletLarge:920,desktopSmall:1024,desktop:1260,desktopLarge:1440};t.useIsBreakpoint=function(e){var t="string"==typeof e?s[e]:e,n=(0,o.useState)(null),r=n[0],a=n[1],l=(0,o.useCallback)((function(){a(window.innerWidth)}),[]);return(0,o.useEffect)((function(){l()}),[]),(0,i.useOnResize)(l),r>=t},t.default=t.useIsBreakpoint},450:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsLoadingAfterError=void 0;var o=n(156);t.useIsLoadingAfterError=function(e,t){var n=(0,o.useState)(t),i=n[0],s=n[1];return(0,o.useEffect)((function(){e||s(t)}),[e,t]),e&&i}},305:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsMobile=void 0;var o=n(729);t.useIsMobile=function(){return!(0,o.useIsBreakpoint)("tablet")},t.default=t.useIsMobile},383:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsomorphicLayoutEffect=void 0;var o=n(156);t.useIsomorphicLayoutEffect="undefined"!=typeof window?o.useLayoutEffect:o.useEffect,t.default=t.useIsomorphicLayoutEffect},753:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useOnLoseFocusWithin=void 0;var o=n(156);t.useOnLoseFocusWithin=function(e){var t=e.ref,n=e.callback,i=e.watch;(0,o.useEffect)((function(){var e=function(){var e;if(i)return(null===(e=t.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,t,i])},t.default=t.useOnLoseFocusWithin},502:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useOnResize=void 0;var o=n(156);t.useOnResize=function(e){(0,o.useEffect)((function(){var t=function(){e(window.innerWidth)};return window.addEventListener("resize",t,{passive:!0}),function(){return window.removeEventListener("resize",t)}}),[])},t.default=t.useOnResize},352:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useOnWindowFocus=void 0;var o=n(156);t.useOnWindowFocus=function(e){(0,o.useEffect)((function(){var t=function(){e&&"visible"===document.visibilityState&&e()};return window.addEventListener("visibilitychange",t,!1),function(){return window.removeEventListener("visibilitychange",t)}}),[e])}},47:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useOutsideReacter=void 0;var o=n(156);t.useOutsideReacter=function(e,t){function n(n){e.current&&!e.current.contains(n.target)&&t()}(0,o.useEffect)((function(){return document.addEventListener("mousedown",n),function(){document.removeEventListener("mousedown",n)}}))}},869:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useRunAfterUpdate=void 0;var o=n(156);t.useRunAfterUpdate=function(){var e=(0,o.useRef)(null);return(0,o.useEffect)((function(){e.current&&(e.current(),e.current=null)})),function(t){e.current=t}},t.default=t.useRunAfterUpdate},926:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useScrollLock=void 0;var o=n(156);t.useScrollLock=function(){return{lock:(0,o.useCallback)((function(){var e=window.scrollY+"px",t=document.body;t.style.position="fixed",t.style.top="-"+e}),[]),unlock:(0,o.useCallback)((function(){var e=document.body,t=e.style.top,n=-1*parseInt(t||"0");e.style.position="",e.style.top="",n&&window.scrollTo(0,-1*parseInt(t||"0"))}),[])}}},358:function(e,t,n){var o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.useSmoothScroll=void 0;var i=n(156),s=o(n(888));t.useSmoothScroll=function(e){var t=(0,i.useRef)(null),n=e.ref,o=e.offset,r=void 0===o?0:o,a=e.speed,l=void 0===a?500:a;return(0,i.useEffect)((function(){t.current=new s.default(null,{speed:l,speedAsDuration:!0})}),[]),(0,i.useCallback)((function(){n&&t.current&&t.current.animateScroll(n.current,null,{offset:function(){return r},updateURL:!1})}),[r,n])}},156:function(e){e.exports=n}},t={};function o(n){var i=t[n];if(void 0!==i)return i.exports;var s=t[n]={exports:{}};return e[n].call(s.exports,s,s.exports,o),s.exports}return o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o(432)}())})),Qe=(Ge=Ye)&&Ge.__esModule&&Object.prototype.hasOwnProperty.call(Ge,"default")?Ge.default:Ge;function Ze(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Ke(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ze(Object(n),!0).forEach((function(t){G(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ze(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}v.Settings.defaultLocale="en",j.default.init({fallbackLng:"fi",defaultNS:"translation",interpolation:{escapeValue:!1}}),"production"!==process.env.NODE_ENV&&O.default.node;const Xe=e=>{if(!e||!e.GTFS.platform)return;const{modes:t,platform:n}=e.GTFS;return[t&&"RAIL"===t[0]?j.default.t("track"):j.default.t("platform"),n]};function Je(e){if("FutureRoute"!==e.type){if("SelectFromMap"===e.type)return["",j.default.t("select-from-map")];if("CurrentLocation"===e.type)return["",j.default.t("use-own-position")];if("SelectFromOwnLocations"===e.type)return["",j.default.t("select-from-own-locations")];let n,[o,i]=Ae(e.properties,!0);if(e.properties.layer.toLowerCase().includes("bikerental")||e.properties.layer.toLowerCase().includes("bikestation")){n=j.default.t("vehiclerentalstation");return[n,o,void 0,e.properties.labelId]}if("bikepark"===e.properties.layer)return n=j.default.t("bikepark"),[n,o,void 0,void 0];if("carpark"===e.properties.layer)return n=j.default.t("carpark"),[n,o,void 0,void 0];if(e.properties.mode)n=j.default.t(e.properties.mode.toLowerCase().replace("favourite",""));else{const t=e.properties.layer.replace("route-","").toLowerCase().replace("favourite","");n=j.default.t(t)}if(e.properties.id&&("stop"===e.properties.layer||"station"===e.properties.layer)){var t;const s=Fe(e.properties),r=null===(t=e.properties.addendum)||void 0===t?void 0:t.GTFS.modes,a=Xe(e.properties.addendum);return[n,ye(o,s),i,s,r,a]}if("favouriteStop"===e.properties.layer||"favouriteStation"===e.properties.layer){const{address:t,code:s}=e.properties;return[n,t?ye(t.split(",")[0],s):o,i,s,void 0,Xe(e.properties.addendum)]}return[n,o,i]}const{origin:n,destination:o}=e.properties,i=n.locality?`, ${n.locality} foobar`:"",s=o.locality?`, ${o.locality}`:"",r=n.name,a=o.name;return[j.default.t("future-route"),`${j.default.t("origin")} ${r}${i} ${j.default.t("destination")} ${a}${s}`,e.translatedText]}function et(e){const t=v.DateTime.fromSeconds(Number(e.properties.time)),n=v.DateTime.now();let o=e.properties.arriveBy?j.default.t("arrival"):j.default.t("departure");return o=t.hasSame(n,"day")?`${o} ${j.default.t("today-at")}`:t.hasSame(n.plus({days:1}),"day")?`${o} ${j.default.t("tomorrow-at")}`:`${o} ${t.toFormat("ccc d.L.")}`,o=`${o} ${t.toFormat("HH:mm")}`,o}const tt=e=>"SelectFromOwnLocations"===e.type||"back"===e.type?"":function(e){const t=Ae(e,!0);switch(e.layer){case"selectFromMap":case"currentPosition":case"ownLocations":case"back":return t[1]||t[0];case"favouriteVehicleRentalStation":case"favouritePlace":return t[0];default:return t.length>1&&""!==t[1]?t.join(", "):t[1]||t[0]}}(e.properties);class nt extends x.default.Component{constructor(e){super(e),G(this,"onChange",((e,{newValue:t,method:n})=>{const o={value:this.fInput||t||"",renderMobileSearch:this.props.isMobile};if(this.fInput=null,this.state.editing){if("enter"!==n||this.state.valid){if(this.state.typingTimer&&clearTimeout(this.state.typingTimer),"type"===n){const e=setTimeout((()=>{this.setState({typing:!1})}),1e3);o.typingTimer=e,o.typing=!0}this.setState(o)}}else o.editing=!0,this.setState(o,(()=>this.fetchFunction({value:t||""})))})),G(this,"onBlur",(()=>{this.state.editing&&this.input.focus(),this.setState({editing:!1,renderMobileSearch:!1,value:this.props.value}),this.props.isMobile&&this.state.renderMobileSearch&&this.closeMobileSearch()})),G(this,"onSelected",((e,t)=>{if(this.state.valid){if("SelectFromOwnLocations"===t.suggestion.type)return void this.setState({sources:["Favourite","Back"],ownPlaces:!0,pendingSelection:t.suggestion.type,value:""},(()=>{this.fetchFunction({value:""})}));if("back"===t.suggestion.type||"FutureRoute"===t.suggestion.type)return void this.setState({sources:this.props.sources,ownPlaces:!1,pendingSelection:t.suggestion.type,suggestionIndex:t.suggestionIndex},(()=>{this.fetchFunction({value:""})}));this.selectionDone=!0,this.setState({editing:!1,value:t.suggestionValue},(()=>{this.input.blur(),this.props.handleViaPoints?this.props.handleViaPoints(t.suggestion,t.suggestionIndex):this.props.onSelect(t.suggestion,this.props.id),this.setState({renderMobileSearch:!1,sources:this.props.sources,ownPlaces:!1,suggestions:[]},(()=>{this.selectionDone=!1})),!this.props.focusChange||this.props.isMobile&&!this.props.isEmbedded||this.props.focusChange(),this.props.isMobile&&this.state.renderMobileSearch&&this.closeMobileSearch()}))}else this.setState((e=>({pendingSelection:e.value})),(()=>this.checkPendingSelection()))})),G(this,"onSuggestionsClearRequested",(()=>{this.setState({suggestions:[],sources:this.props.sources,ownPlaces:!1,editing:!1})})),G(this,"checkPendingSelection",(()=>{"SelectFromOwnLocations"!==this.state.pendingSelection&&"back"!==this.state.pendingSelection||!this.state.valid?this.state.pendingSelection&&this.state.valid&&this.setState({pendingSelection:null,editing:!1},(()=>{if(this.state.suggestions.length){this.input.blur();"back"!==this.state.suggestions[this.state.suggestionIndex].type&&this.props.onSelect(this.state.suggestions[this.state.suggestionIndex],this.props.id),this.props.isMobile&&this.state.renderMobileSearch&&this.closeMobileSearch(),!this.props.focusChange||this.props.isMobile&&!this.props.isEmbedded||this.props.focusChange()}})):this.setState({pendingSelection:null,editing:!0},(()=>{this.input.focus()}))})),G(this,"clearButton",(()=>x.default.createElement("button",{type:"button",className:De["clear-input"],onClick:this.clearInput,"aria-label":j.default.t("clear-button-label")},x.default.createElement(V.default,{img:"close",color:this.props.color})))),G(this,"fetchFunction",(({value:e,cleanExecuted:t})=>this.setState({valid:!1,cleanExecuted:t||!1},(()=>{if(this.selectionDone)return;const{targets:t}=this.props,n=B.default(t),o=B.default(t)||t.includes("Locations");let i;this.state.ownPlaces?(i=["Locations"],(n||t.includes("Stops"))&&i.push("Stops"),(n||t.includes("Stations"))&&i.push("Stations"),(n||t.includes("VehicleRentalStations"))&&i.push("VehicleRentalStations")):n||(i=[...t],o&&!this.props.isMobile&&(B.default(this.props.sources)||this.props.sources.includes("Favourite"))&&i.push("SelectFromOwnLocations"));((e,t,n,o,i,s,r,a,l,u)=>{a(null),Ne(e,t,n,o,i,s,r,a,l,u)})(i,this.state.sources&&this.state.sources.filter((e=>!(o&&"Favourite"===e&&!this.state.ownPlaces&&!this.props.isMobile))),this.props.transportMode,this.props.searchContext,this.props.filterResults,this.props.geocodingSize,{input:e||""},(t=>{if(null==t)return;const n=(t.results||[]).filter((e=>"FutureRoute"!==e.type||"FutureRoute"===e.type&&e.properties.time>v.DateTime.now().toUnixInteger())).map((e=>{if("CurrentLocation"===e.type||"SelectFromMap"===e.type||"SelectFromOwnLocations"===e.type||"back"===e.type){const t=Ke({},e);return t.properties.labelId=j.default.t(e.properties.labelId),t}return e}));e!==this.state.value&&e!==this.state.pendingSelection&&"SelectFromOwnLocations"!==this.state.pendingSelection&&"back"!==this.state.pendingSelection&&"FutureRoute"!==this.state.pendingSelection||this.setState({valid:!0,suggestions:n},(()=>this.checkPendingSelection()))}),this.props.pathOpts,this.props.refPoint)})))),G(this,"clearInput",(()=>{const e={editing:!0,value:"",sources:this.props.sources,ownPlaces:!1,renderMobileSearch:this.props.isMobile};this.setState(e,(()=>this.fetchFunction({value:"",cleanExecuted:!0}))),this.props.onClear&&this.props.onClear(this.props.id),this.input.focus()})),G(this,"inputClicked",(e=>{if(this.input.focus(),this.clearLocationText(),this.props.isMobile&&this.props.lock(),this.state.editing)this.props.isMobile&&!this.state.renderMobileSearch&&this.setState({renderMobileSearch:!0});else{const t={editing:!0,pendingSelection:null,renderMobileSearch:this.props.isMobile},n={editing:!0,pendingSelection:null,value:e};this.state.suggestions.length?(this.fetchFunction({value:this.state.value}),this.setState(t)):"object"!=typeof e&&e?this.setState(n,(()=>this.fetchFunction({value:e}))):this.setState(t,(()=>this.fetchFunction({value:this.state.value})))}})),G(this,"storeInputReference",(e=>{null!==e&&(this.input=e.input,this.props.storeRef&&this.props.storeRef(e.input))})),G(this,"fillInput",(e=>{this.fInput=e.properties.name;const t={editing:!0,value:e.properties.name,checkPendingSelection:e,valid:!0};this.setState(t),this.fetchFunction({value:e.properties.name}),this.input.focus()})),G(this,"renderItem",(e=>{const t="FutureRoute"===e.type?Ke(Ke({},e),{},{translatedText:et(e)}):e,n=Je(e);return x.default.createElement(F.default,{item:t,content:n,loading:!this.state.valid,isMobile:this.props.isMobile,ariaFavouriteString:j.default.t("favourite"),color:this.props.color,accessiblePrimaryColor:this.props.accessiblePrimaryColor,fillInput:this.fillInput,fontWeights:this.props.fontWeights,getAutoSuggestIcons:this.props.getAutoSuggestIcons,modeIconColors:this.props.modeIconColors,modeSet:this.props.modeSet})})),G(this,"closeMobileSearch",(()=>{this.props.unlock(),this.setState({renderMobileSearch:!1,value:this.props.value},(()=>{window.scrollTo(0,this.state.scrollY),this.onSuggestionsClearRequested()})),this.input.focus(),this.input.blur()})),G(this,"keyDown",(e=>{if(this.selectionDone)return;const t=e.key;if("Shift"!==t){if("Escape"===t&&this.onBlur(),this.state.editing)return"Enter"===t&&""!==this.state.value&&this.setState({pendingSelection:!0},(()=>{this.fetchFunction({value:this.state.value})})),void this.inputClicked();if("Enter"!==t&&"ArrowDown"!==t||""!==this.state.value){if("ArrowDown"===t&&""!==this.state.value){const e={editing:!0,value:this.state.value};this.setState(e,(()=>this.fetchFunction({value:this.state.value})))}this.state.editing||(this.setState({editing:!0}),this.clearLocationText()),"Tab"===t&&this.onBlur()}else this.clearInput()}})),G(this,"suggestionAsAriaContent",(()=>{let e=[];const t=this.state.suggestions[0];return t&&(t.type&&t.type.includes("Favourite")&&e.push(j.default.t("favourite")),e=e.concat(Je(this.state.suggestions[0]))),[...new Set(e)].join(" - ")})),G(this,"clearOldSearches",(()=>{const{context:e,clearOldSearches:t,clearFutureRoutes:n}=this.props.searchContext;e&&t&&(t(e),n&&n(e),this.fetchFunction({value:this.state.value}))})),G(this,"isOriginDestinationOrViapoint",(()=>"origin"===this.props.id||"destination"===this.props.id||"via-point"===this.props.id||"origin-stop-near-you"===this.props.id)),G(this,"clearLocationText",(()=>{["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","Wybrane miejsce"].includes(this.state.value)&&this.clearInput()})),G(this,"onFocus",(()=>{const e=window.pageYOffset;return this.setState({scrollY:e})})),v.Settings.defaultZone=e.timeZone,v.Settings.defaultLocale=e.lang,this.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(Te).forEach((e=>{j.default.addResourceBundle(e,"translation",Te[e])}))}shouldComponentUpdate(e,t){return!A.default(t,this.state)||!A.default(e,this.props)}componentDidUpdate(){j.default.language!==this.props.lang&&j.default.changeLanguage(this.props.lang)}UNSAFE_componentWillReceiveProps(e){e.value===this.state.value||this.state.editing||this.setState({value:e.value})}render(){j.default.language!==this.props.lang&&j.default.changeLanguage(this.props.lang);const{value:e,suggestions:t,renderMobileSearch:n,cleanExecuted:o}=this.state,i={placeholder:this.props.translatedPlaceholder?this.props.translatedPlaceholder:j.default.t(this.props.placeholder),value:e,onChange:this.onChange,onBlur:this.onBlur,className:`${De.input} ${this.props.isMobile&&this.props.transportMode?De.thin:""} ${De[this.props.id]||""} ${this.state.value?De.hasValue:""} ${this.props.inputClassName}`,onKeyDown:this.keyDown,required:this.props.required},s=this.props.id.replace("searchfield-","");let r=this.props.ariaLabel||j.default.t(s);r=r.replace("searchfield-","").concat(".");const a=this.props.required?`${j.default.t("required")}.`:"",l=this.props.isMobile?j.default.t("search-autosuggest-label-instructions-mobile"):j.default.t("search-autosuggest-label-instructions-desktop"),u="origin"===this.props.id?j.default.t("search-autosuggest-label-move-to-destination"):"",c=l.concat(" ").concat(u),d=j.default.t("search-autosuggest-len",{count:t.length}),p=()=>this.suggestionAsAriaContent()||this.props.value?j.default.t("search-current-suggestion",{selection:this.suggestionAsAriaContent().toLowerCase()||this.props.value}):"";return x.default.createElement(x.default.Fragment,null,x.default.createElement("span",{className:De["sr-only"],role:"alert"},!this.state.typing&&this.state.editing&&`${d} ${p()}`),this.props.isMobile&&x.default.createElement(We,{searchOpen:n,appElement:this.props.appElement,clearOldSearches:this.clearOldSearches,id:this.props.id,clearInput:this.clearInput,value:this.state.value,suggestions:[...t,{type:"clear-search-history",labelId:j.default.t("clear-search-history")}],inputProps:Ke(Ke({},i),{},{placeholder:this.isOriginDestinationOrViapoint()?j.default.t("address-place-or-business"):i.placeholder}),fetchFunction:this.fetchFunction,onSuggestionsClearRequested:this.onSuggestionsClearRequested,getSuggestionValue:tt,renderSuggestion:this.renderItem,closeHandle:this.closeMobileSearch,ariaLabel:a.concat(" ").concat(r).concat(" ").concat(p()),label:this.props.mobileLabel?this.props.mobileLabel:j.default.t(this.props.id),onSuggestionSelected:this.onSelected,dialogHeaderText:j.default.t("delete-old-searches-header"),dialogPrimaryButtonText:j.default.t("delete"),dialogSecondaryButtonText:j.default.t("cancel"),clearInputButtonText:j.default.t("clear-button-label"),focusInput:o,color:this.props.color,hoverColor:this.props.hoverColor,accessiblePrimaryColor:this.props.accessiblePrimaryColor,fontWeights:this.props.fontWeights,showScroll:this.props.showScroll}),!n&&x.default.createElement("div",{className:M.default(De["autosuggest-input-container"],De[this.props.id]),style:{"--color":`${this.props.color}`,"--hover-color":`${this.props.hoverColor}`}},this.props.icon&&x.default.createElement("div",{className:M.default(De["autosuggest-input-icon"],De[this.props.id],this.props.inputClassName&&`${this.props.inputClassName}-input-icon`),"aria-label":a.concat(" ").concat(r).concat(" ").concat(j.default.t("search-autosuggest-label"))},x.default.createElement(V.default,{img:`${this.props.icon}`})),x.default.createElement(R.default,{alwaysRenderSuggestions:this.state.editing,id:this.props.id,suggestions:t,onSuggestionsFetchRequested:this.fetchFunction,onSuggestionsClearRequested:this.onSuggestionsClearRequested,getSuggestionValue:tt,renderSuggestion:this.renderItem,inputProps:Ke(Ke({},i),{},{onFocus:this.onFocus}),focusInputOnSuggestionClick:!0,shouldRenderSuggestions:()=>this.state.editing,highlightFirstSuggestion:!this.state.ownPlaces,theme:De,renderInputComponent:e=>x.default.createElement(x.default.Fragment,null,x.default.createElement("label",{className:De["sr-only"],htmlFor:this.props.id},p().concat(" ").concat(a).concat(" ").concat(r).concat(" ").concat(c)),x.default.createElement("input",Object.assign({"aria-label":p().concat(" ").concat(a).concat(" ").concat(r).concat(" ").concat(c),id:this.props.id,onClick:this.inputClicked,onKeyDown:this.keyDown},e)),this.state.value&&this.clearButton()),onSuggestionSelected:this.onSelected,ref:this.storeInputReference})))}}G(nt,"defaultProps",{autoFocus:!1,className:"",icon:void 0,value:"",transportMode:void 0,filterResults:void 0,onClear:void 0,lang:"fi",storeRef:void 0,handleViaPoints:void 0,focusChange:void 0,getAutoSuggestIcons:void 0,sources:[],targets:void 0,isMobile:!1,isEmbedded:!1,geocodingSize:void 0,color:"#007ac9",hoverColor:"#0062a1",accessiblePrimaryColor:"#0074be",timeZone:"Europe/Helsinki",pathOpts:{routesPrefix:"linjat",stopsPrefix:"pysakit"},ariaLabel:void 0,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,refPoint:{}}),"production"!==process.env.NODE_ENV&&(nt.propTypes={appElement:O.default.string.isRequired,autoFocus:O.default.bool,className:O.default.string,icon:O.default.string,id:O.default.string.isRequired,placeholder:O.default.string.isRequired,translatedPlaceholder:O.default.string,value:O.default.string,searchContext:O.default.shape({URL_PELIAS:O.default.string,context:O.default.object,clearOldSearches:O.default.func,clearFutureRoutes:O.default.func}).isRequired,ariaLabel:O.default.string,onSelect:O.default.func.isRequired,transportMode:O.default.string,filterResults:O.default.func,geocodingSize:O.default.number,onClear:O.default.func,storeRef:O.default.func,handleViaPoints:O.default.func,focusChange:O.default.func,lang:O.default.string,sources:O.default.arrayOf(O.default.string),targets:O.default.arrayOf(O.default.string),isMobile:O.default.bool,color:O.default.string,hoverColor:O.default.string,accessiblePrimaryColor:O.default.string,timeZone:O.default.string,pathOpts:O.default.shape({routesPrefix:O.default.string,stopsPrefix:O.default.string}),mobileLabel:O.default.string,lock:O.default.func.isRequired,unlock:O.default.func.isRequired,refPoint:O.default.shape({address:O.default.string,lat:O.default.number,lon:O.default.number}),inputClassName:O.default.string,fontWeights:O.default.shape({medium:O.default.number}),modeIconColors:O.default.objectOf(O.default.string),getAutoSuggestIcons:O.default.objectOf(O.default.func),required:O.default.bool,modeSet:O.default.string,showScroll:O.default.bool,isEmbedded:O.default.bool});const ot=(it=nt,e=>{const{lock:t,unlock:n}=Qe.useScrollLock();return x.default.createElement(it,Object.assign({lock:t,unlock:n},e))});var it;e.default=ot,Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZGV2ZWxvcG1lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXRydS1lcS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWlzLWR1cGxpY2F0ZS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWhlbHBlcnMvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1maWx0ZXItbWF0Y2hpbmctdG8taW5wdXQvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1zZXJpYWxpemUvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtanNvbi9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cy9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWV4ZWN1dGUtc2VhcmNoLWltbWlkaWF0ZS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXVuaXEtYnktbGFiZWwvaW5kZXguanMiLCIuLi9zcmMvaGVscGVycy90cmFuc2xhdGlvbnMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtaW5qZWN0L2Rpc3Qvc3R5bGUtaW5qZWN0LmVzLmpzIiwiLi4vc3JjL2hlbHBlcnMvTW9iaWxlU2VhcmNoLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Boc2wtZmkvaG9va3MvbGliL2luZGV4LmpzIiwiLi4vc3JjL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWxhYmVsL2luZGV4LmpzIiwiLi4vc3JjL2hlbHBlcnMvd2l0aFNjcm9sbExvY2suanMiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvO1xuICB9IDogZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbztcbiAgfSwgX3R5cGVvZihvKTtcbn1cbmV4cG9ydCB7IF90eXBlb2YgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IHRvUHJpbWl0aXZlIGZyb20gXCIuL3RvUHJpbWl0aXZlLmpzXCI7XG5mdW5jdGlvbiB0b1Byb3BlcnR5S2V5KHQpIHtcbiAgdmFyIGkgPSB0b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjtcbn1cbmV4cG9ydCB7IHRvUHJvcGVydHlLZXkgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuZnVuY3Rpb24gdG9QcmltaXRpdmUodCwgcikge1xuICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDtcbiAgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07XG4gIGlmICh2b2lkIDAgIT09IGUpIHtcbiAgICB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTtcbn1cbmV4cG9ydCB7IHRvUHJpbWl0aXZlIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkge1xuICByZXR1cm4gKHIgPSB0b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHtcbiAgICB2YWx1ZTogdCxcbiAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICBjb25maWd1cmFibGU6ICEwLFxuICAgIHdyaXRhYmxlOiAhMFxuICB9KSA6IGVbcl0gPSB0LCBlO1xufVxuZXhwb3J0IHsgX2RlZmluZVByb3BlcnR5IGFzIGRlZmF1bHQgfTsiLCIvKipcbiAqICBhY2NlcHQgZXF1YWxpdHkgb2Ygbm9uIG51bGxpc2ggdmFsdWVzXG4gKlxuICogQG5hbWUgdHJ1RXFcbiAqIEBwYXJhbSB7Qm9vbGVhbnxOdW1iZXJ8QmlnSW50fFN0cmluZ3xTeW1ib2x8T2JqZWN0fSB2YWwxIEZpcnN0IHZhbHVlIHRvIGJlIGNvbXBhcmVkXG4gKiBAcGFyYW0ge0Jvb2xlYW58TnVtYmVyfEJpZ0ludHxTdHJpbmd8U3ltYm9sfE9iamVjdH0gcGFyYW0yIFNlY29uZCB2YWx1ZSB0byBiZSBjb21wYXJlZFxuICogQHJldHVybnMge0Jvb2xlYW59IHRydWUvZmFsc2VcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC11dGlsLnRydUVxKCcyJywgJzInKTtcbiAqIC8vPXRydWVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJ1RXEodmFsMSwgdmFsMikge1xuICByZXR1cm4gdmFsMSAmJiB2YWwyICYmIHZhbDEgPT09IHZhbDI7XG59XG4iLCJpbXBvcnQgdHJ1RXEgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXRydS1lcSc7XG4vKipcbiAqIENoZWNrcyB0aGF0IGlzIGl0ZW1zIGR1cGxpY2F0ZVxuICpcbiAqIEBuYW1lIGlzRHVwbGljYXRlXG4gKiBAcGFyYW0ge09iamVjdH0gaXRlbTEgT2JqZWN0IGNvbnRhaW5pbmcgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKiB7XG4gKiAgcHJvcGVydGllcyB7XG4gKiAgICAgIGd0ZnNJZDogU3RyaW5nXG4gKiAgICAgIGdpZDogU3RyaW5nIGZyb20gZ2VvY29kZXJcbiAqICAgICAgbmFtZTogU3RyaW5nXG4gKiAgICAgIGxhYmVsOiBTdHJpbmdcbiAqICAgICAgIGFkZHJlc3M6IFN0cmluZ1xuICogICAgICBnZW9tZXRyeSB7XG4gKiAgICAgICAgIGNvb3JkaW5hdGVzIFtOdW1iZXIgbGF0LCBOdW1iZXIgbG9uXVxuICogICAgICB9XG4gKiAgfVxuICogfVxuICogQHBhcmFtIHtPYmplY3R9IGl0ZW0yIE9iamVjdCB3aXRoIHNhbWUgYXR0cmlidXRlcyBhcyBpdGVtMVxuICogQHJldHVybnMge0Jvb2xlYW59IHRydWUvZmFsc2VcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC11dGlsLmlzRHVwbGljYXRlKHBhcmFtMSwgcGFyYW0yKTtcbiAqIC8vPXRydWVcbiAqL1xuXG5jb25zdCBndGZzU3RvcExheWVycyA9IFsnc3RvcCcsICdzdGF0aW9uJywgJ2Zhdm91cml0ZVN0b3AnLCAnZmF2b3VyaXRlU3RhdGlvbiddO1xuY29uc3QgdmVoaWNsZVJlbnRhbExheWVycyA9IFsnZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24nLCAnYmlrZXN0YXRpb24nXTtcblxuZnVuY3Rpb24gbGFiZWxJZFRvR2lkKGlkKSB7XG4gIGlmICghaWQpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgY29uc3QgcGFydHMgPSBpZC5zcGxpdCgnOicpO1xuICBpZiAocGFydHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBgY2l0eWJpa2VzJHtwYXJ0c1swXX06YmlrZXN0YXRpb246JHtwYXJ0c1sxXX1gO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0R1cGxpY2F0ZShpdGVtMSwgaXRlbTIpIHtcbiAgY29uc3QgcHJvcHMxID0gaXRlbTEucHJvcGVydGllcztcbiAgY29uc3QgcHJvcHMyID0gaXRlbTIucHJvcGVydGllcztcblxuICBpZiAoaXRlbTEudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJyAmJiBpdGVtMi50eXBlID09PSAnRnV0dXJlUm91dGUnKSB7XG4gICAgY29uc3QgbzEgPSBwcm9wczEub3JpZ2luO1xuICAgIGNvbnN0IGQxID0gcHJvcHMxLmRlc3RpbmF0aW9uO1xuICAgIGNvbnN0IG8yID0gcHJvcHMyLm9yaWdpbjtcbiAgICBjb25zdCBkMiA9IHByb3BzMi5kZXN0aW5hdGlvbjtcblxuICAgIGNvbnN0IG5hbWUxID0gYCR7bzEubmFtZX0vLyR7bzEubG9jYWxhZG1pbn0vLyR7ZDEubmFtZX0vLyR7ZDEubG9jYWxhZG1pbn1gO1xuICAgIGNvbnN0IG5hbWUyID0gYCR7bzIubmFtZX0vLyR7bzIubG9jYWxhZG1pbn0vLyR7ZDIubmFtZX0vLyR7ZDIubG9jYWxhZG1pbn1gO1xuXG4gICAgcmV0dXJuIG5hbWUxID09PSBuYW1lMjtcbiAgfVxuICBpZiAoaXRlbTEudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJyB8fCBpdGVtMi50eXBlID09PSAnRnV0dXJlUm91dGUnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChcbiAgICB2ZWhpY2xlUmVudGFsTGF5ZXJzLmluY2x1ZGVzKHByb3BzMS5sYXllcikgJiZcbiAgICB2ZWhpY2xlUmVudGFsTGF5ZXJzLmluY2x1ZGVzKHByb3BzMi5sYXllcilcbiAgKSB7XG4gICAgY29uc3QgaWQxID0gcHJvcHMxLmdpZCB8fCBsYWJlbElkVG9HaWQocHJvcHMxLmxhYmVsSWQpO1xuICAgIGNvbnN0IGlkMiA9IHByb3BzMi5naWQgfHwgbGFiZWxJZFRvR2lkKHByb3BzMi5sYWJlbElkKTtcbiAgICByZXR1cm4gaWQxID09PSBpZDI7XG4gIH1cbiAgaWYgKHByb3BzMS5ndGZzSWQgJiYgcHJvcHMyLmd0ZnNJZCkge1xuICAgIHJldHVybiBwcm9wczEuZ3Rmc0lkID09PSBwcm9wczIuZ3Rmc0lkO1xuICB9XG4gIGlmIChcbiAgICBndGZzU3RvcExheWVycy5pbmNsdWRlcyhwcm9wczEubGF5ZXIpICYmXG4gICAgZ3Rmc1N0b3BMYXllcnMuaW5jbHVkZXMocHJvcHMyLmxheWVyKSAmJlxuICAgIHByb3BzMS5naWQgJiZcbiAgICBwcm9wczIuZ2lkXG4gICkge1xuICAgIHJldHVybiBwcm9wczEuZ2lkID09PSBwcm9wczIuZ2lkO1xuICB9XG5cbiAgY29uc3QgcDEgPSBpdGVtMSAmJiBpdGVtMS5nZW9tZXRyeSA/IGl0ZW0xLmdlb21ldHJ5LmNvb3JkaW5hdGVzIDogdW5kZWZpbmVkO1xuICBjb25zdCBwMiA9IGl0ZW0yICYmIGl0ZW0yLmdlb21ldHJ5ID8gaXRlbTIuZ2VvbWV0cnkuY29vcmRpbmF0ZXMgOiB1bmRlZmluZWQ7XG5cbiAgaWYgKHAxICYmIHAyKSB7XG4gICAgLy8gYm90aCBoYXZlIGdlb21ldHJ5XG4gICAgaWYgKE1hdGguYWJzKHAxWzBdIC0gcDJbMF0pIDwgMWUtNiAmJiBNYXRoLmFicyhwMVsxXSAtIHAyWzFdKSA8IDFlLTYpIHtcbiAgICAgIC8vIGxvY2F0aW9uIG1hdGNoIGlzIG5vdCBlbm91Z2guIFJlcXVpcmUgYSBjb21tb24gcHJvcGVydHlcbiAgICAgIGlmIChcbiAgICAgICAgdHJ1RXEocHJvcHMxLm5hbWUsIHByb3BzMi5uYW1lKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEubGFiZWwsIHByb3BzMi5sYWJlbCkgfHxcbiAgICAgICAgdHJ1RXEocHJvcHMxLmFkZHJlc3MsIHByb3BzMi5hZGRyZXNzKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEuYWRkcmVzcywgcHJvcHMyLmxhYmVsKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEubGFiZWwsIHByb3BzMi5hZGRyZXNzKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG4iLCJpbXBvcnQgaXNTdHJpbmcgZnJvbSAnbG9kYXNoL2lzU3RyaW5nJztcbmltcG9ydCBvcmRlckJ5IGZyb20gJ2xvZGFzaC9vcmRlckJ5JztcbmltcG9ydCB1bmlxV2l0aCBmcm9tICdsb2Rhc2gvdW5pcVdpdGgnO1xuaW1wb3J0IGlzRHVwbGljYXRlIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1pcy1kdXBsaWNhdGUnO1xuXG5jb25zdCBub3JtYWxpemUgPSBzdHIgPT4ge1xuICBpZiAoIWlzU3RyaW5nKHN0cikpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpO1xufTtcblxuLyoqXG4gKiBUaGlzIHRha2VzIHRoZSBzb3J0ZWQgc2VhcmNoIHJlc3VsdHMgYXMgaW5wdXQgYW5kIG1vdmVzIHJlc3VsdHMgdGhhdCBlbmQgaW4gbGV0dGVycyBmaXJzdFxuICogYW1vbmcgcmVzdWx0cyB3aXRoIHRoZSBzYW1lIHNob3J0IG5hbWUgbGVuZ3RoLlxuICovXG5jb25zdCBvcmRlclJlc3VsdHNXaXRoTGV0dGVyc0ZpcnN0ID0gc29ydGVkU2VhcmNoUmVzdWx0cyA9PiB7XG4gIGxldCBvcmRlcmVkUmVzdWx0c1dpdGhMZXR0ZXJzRmlyc3QgPSBbXTtcblxuICBsZXQgaSA9IDA7XG4gIGxldCBjdXJyZW50TGVuZ3RoID0gMDtcbiAgbGV0IGxldHRlckFycmF5ID0gW107XG4gIGxldCBudW1iZXJBcnJheSA9IFtdO1xuICB3aGlsZSAoaSA8IHNvcnRlZFNlYXJjaFJlc3VsdHMubGVuZ3RoKSB7XG4gICAgaWYgKFxuICAgICAgY3VycmVudExlbmd0aCAhPT0gc29ydGVkU2VhcmNoUmVzdWx0c1tpXS5wcm9wZXJ0aWVzPy5zaG9ydE5hbWU/Lmxlbmd0aFxuICAgICkge1xuICAgICAgb3JkZXJlZFJlc3VsdHNXaXRoTGV0dGVyc0ZpcnN0ID0gb3JkZXJlZFJlc3VsdHNXaXRoTGV0dGVyc0ZpcnN0LmNvbmNhdChcbiAgICAgICAgbGV0dGVyQXJyYXksXG4gICAgICAgIG51bWJlckFycmF5LFxuICAgICAgKTtcbiAgICAgIGN1cnJlbnRMZW5ndGggPSBzb3J0ZWRTZWFyY2hSZXN1bHRzW2ldLnByb3BlcnRpZXM/LnNob3J0TmFtZT8ubGVuZ3RoO1xuICAgICAgbGV0dGVyQXJyYXkgPSBbXTtcbiAgICAgIG51bWJlckFycmF5ID0gW107XG4gICAgfVxuICAgIC8vIEdsb2JhbCBpc05hTiBhbmQgTnVtYmVyLmlzTmFOIGhhdmUgZGlmZmVyZW50IGZ1bmN0aW9uYWxpdHkuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFsc1xuICAgIGlmIChpc05hTihzb3J0ZWRTZWFyY2hSZXN1bHRzW2ldLnByb3BlcnRpZXM/LnNob3J0TmFtZT8uc2xpY2UoLTEpKSkge1xuICAgICAgbGV0dGVyQXJyYXkucHVzaChzb3J0ZWRTZWFyY2hSZXN1bHRzW2ldKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbnVtYmVyQXJyYXkucHVzaChzb3J0ZWRTZWFyY2hSZXN1bHRzW2ldKTtcbiAgICB9XG4gICAgaSArPSAxO1xuICB9XG4gIG9yZGVyZWRSZXN1bHRzV2l0aExldHRlcnNGaXJzdCA9IG9yZGVyZWRSZXN1bHRzV2l0aExldHRlcnNGaXJzdC5jb25jYXQoXG4gICAgbGV0dGVyQXJyYXksXG4gICAgbnVtYmVyQXJyYXksXG4gICk7XG5cbiAgcmV0dXJuIG9yZGVyZWRSZXN1bHRzV2l0aExldHRlcnNGaXJzdDtcbn07XG5cbi8qKlxuICogTGF5ZXJUeXBlIGRlcGljdHMgdGhlIHR5cGUgb2YgdGhlIHBvaW50LW9mLWludGVyZXN0LlxuICovXG5jb25zdCBMYXllclR5cGUgPSB7XG4gIEFkZHJlc3M6ICdhZGRyZXNzJyxcbiAgQmFjazogJ2JhY2snLFxuICBDdXJyZW50UG9zaXRpb246ICdjdXJyZW50UG9zaXRpb24nLFxuICBGYXZvdXJpdGVTdG9wOiAnZmF2b3VyaXRlU3RvcCcsXG4gIEZhdm91cml0ZVN0YXRpb246ICdmYXZvdXJpdGVTdGF0aW9uJyxcbiAgRmF2b3VyaXRlUGxhY2U6ICdmYXZvdXJpdGVQbGFjZScsXG4gIEZhdm91cml0ZVJvdXRlOiAnZmF2b3VyaXRlUm91dGUnLFxuICBGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbjogJ2Zhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uJyxcbiAgRnV0dXJlUm91dGU6ICdmdXR1cmVSb3V0ZScsXG4gIFN0YXRpb246ICdzdGF0aW9uJyxcbiAgU2VsZWN0RnJvbU1hcDogJ3NlbGVjdEZyb21NYXAnLFxuICBTZWxlY3RGcm9tT3duTG9jYXRpb25zOiAnb3duTG9jYXRpb25zJyxcbiAgU3RvcDogJ3N0b3AnLFxuICBTdHJlZXQ6ICdzdHJlZXQnLFxuICBWZW51ZTogJ3ZlbnVlJyxcbiAgVmVoaWNsZVJlbnRhbFN0YXRpb246ICdiaWtlc3RhdGlvbicsXG4gIENhclBhcms6ICdjYXJwYXJrJyxcbiAgQmlrZVBhcms6ICdiaWtlcGFyaycsXG59O1xuZXhwb3J0IGNvbnN0IGlzU3RvcCA9ICh7IGxheWVyLCB0eXBlIH0pID0+XG4gIGxheWVyID09PSAnc3RvcCcgfHxcbiAgbGF5ZXIgPT09ICdmYXZvdXJpdGVTdG9wJyB8fFxuICB0eXBlID09PSAnc3RvcCcgfHxcbiAgdHlwZSA9PT0gJ2Zhdm91cml0ZVN0b3AnO1xuXG5jb25zdCBERUZBVUxUX1JPVVRFU19QUkVGSVggPSAnbGluamF0JztcbmNvbnN0IERFRkFVTFRfU1RPUFNfUFJFRklYID0gJ3B5c2FraXQnO1xuXG5leHBvcnQgY29uc3QgbWFwUm91dGUgPSAoaXRlbSwgcGF0aE9wdHMpID0+IHtcbiAgaWYgKGl0ZW0gPT09IG51bGwgfHwgaXRlbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBvcHRzID0gcGF0aE9wdHMgfHwge307XG5cbiAgY29uc3Qgcm91dGVzUHJlZml4ID0gb3B0cy5yb3V0ZXNQcmVmaXggfHwgREVGQVVMVF9ST1VURVNfUFJFRklYO1xuICBjb25zdCBzdG9wc1ByZWZpeCA9IG9wdHMuc3RvcHNQcmVmaXggfHwgREVGQVVMVF9TVE9QU19QUkVGSVg7XG5cbiAgY29uc3QgbGluayA9IGAvJHtyb3V0ZXNQcmVmaXh9LyR7aXRlbS5ndGZzSWR9LyR7c3RvcHNQcmVmaXh9YDtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnUm91dGUnLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIC4uLml0ZW0sXG4gICAgICBsYXllcjogYHJvdXRlLSR7aXRlbS5tb2RlfWAsXG4gICAgICBsaW5rLFxuICAgIH0sXG4gICAgZ2VvbWV0cnk6IHtcbiAgICAgIGNvb3JkaW5hdGVzOiBudWxsLFxuICAgIH0sXG4gIH07XG59O1xuXG4vKipcbiAqIFRyaWVzIHRvIG1hdGNoIHRoZSBnaXZlbiBzZWFyY2ggdGVybSBhZ2FpbnMgdGhlIGNvbGxlY3Rpb24gb2YgcHJvcGVydGllc1xuICogZm9yIGEgZ2VvY29kaW5nIHJlc3VsdC4gVGhlIGJlc3QgbWF0Y2ggd2lsbCBiZSByZXR1cm5lZCAobWluOiAwLCBtYXg6IDEuNSkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5vcm1hbGl6ZWRUZXJtIHRoZSBub3JtYWxpemVkIHNlYXJjaCB0ZXJtLlxuICogQHBhcmFtIHsqfSByZXN1bHRQcm9wZXJ0aWVzIHRoZSBnZW9jb2RpbmcgcmVzdWx0J3MgcHJvcGVydHkgY29sbGVjdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IG1hdGNoID0gKG5vcm1hbGl6ZWRUZXJtLCByZXN1bHRQcm9wZXJ0aWVzKSA9PiB7XG4gIGlmICghaXNTdHJpbmcobm9ybWFsaXplZFRlcm0pIHx8IG5vcm1hbGl6ZWRUZXJtLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgY29uc3QgbWF0Y2hQcm9wcyA9IFsnbmFtZScsICdsYWJlbCcsICdhZGRyZXNzJywgJ3Nob3J0TmFtZSddO1xuICByZXR1cm4gbWF0Y2hQcm9wc1xuICAgIC5tYXAobmFtZSA9PiByZXN1bHRQcm9wZXJ0aWVzW25hbWVdKVxuICAgIC5maWx0ZXIodmFsdWUgPT4gaXNTdHJpbmcodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA+IDApXG4gICAgLm1hcCh2YWx1ZSA9PiB7XG4gICAgICBjb25zdCBub3JtYWxpemVkVmFsdWUgPSBub3JtYWxpemUodmFsdWUpO1xuICAgICAgaWYgKG5vcm1hbGl6ZWRWYWx1ZS5pbmRleE9mKG5vcm1hbGl6ZWRUZXJtKSA9PT0gMCkge1xuICAgICAgICAvLyBmdWxsIG1hdGNoIGF0IHN0YXJ0LiBSZXR1cm4gbWF4IHJlc3VsdCB3aGVuIG1hdGNoIGlzIGZ1bGwsIG5vdCBvbmx5IHBhcnRpYWxcbiAgICAgICAgcmV0dXJuIDAuNSArIG5vcm1hbGl6ZWRUZXJtLmxlbmd0aCAvIG5vcm1hbGl6ZWRWYWx1ZS5sZW5ndGg7XG4gICAgICB9XG4gICAgICAvLyBiZWNhdXNlIG9mIGZpbHRlcm1hdGNoaW5ndG9pbnB1dCwgd2Uga25vdyB0aGF0IG1hdGNoIG9jY3VycmVkIHNvbWV3aGVyZVxuICAgICAgLy8gZG9uJ3QgcnVuIGZpbHRlcm1hdGNoaW5nIGFnYWluIGJ1dCBlc3RpbWF0ZSByb3VnaGx5OlxuICAgICAgLy8gdGhlIGxvbmdlciB0aGUgbWF0Y2hpbmcgc3RyaW5nLCB0aGUgYmV0dGVyIGNvbmZpZGVuY2UsIG1heCBiZWluZyAwLjVcbiAgICAgIHJldHVybiAoMC41ICogbm9ybWFsaXplZFRlcm0ubGVuZ3RoKSAvIChub3JtYWxpemVkVGVybS5sZW5ndGggKyAxKTtcbiAgICB9KVxuICAgIC5yZWR1Y2UoXG4gICAgICAocHJldmlvdXMsIGN1cnJlbnQpID0+IChjdXJyZW50ID4gcHJldmlvdXMgPyBjdXJyZW50IDogcHJldmlvdXMpLFxuICAgICAgMCxcbiAgICApO1xufTtcblxuLyoqXG4gKiBSYW5rcyB0aGUgcmVzdWx0IGJhc2VkIG9uIGl0cyBsYXllciBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXIgdGhlIGxheWVyIHByb3BlcnR5LlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSB0aGUgc291cmNlIHByb3BlcnR5LlxuICovXG5leHBvcnQgY29uc3QgZ2V0TGF5ZXJSYW5rID0gKGxheWVyLCBzb3VyY2UpID0+IHtcbiAgc3dpdGNoIChsYXllcikge1xuICAgIGNhc2UgTGF5ZXJUeXBlLkN1cnJlbnRQb3NpdGlvbjpcbiAgICAgIHJldHVybiAxO1xuICAgIGNhc2UgTGF5ZXJUeXBlLkJhY2s6XG4gICAgICByZXR1cm4gMC45O1xuICAgIGNhc2UgTGF5ZXJUeXBlLlNlbGVjdEZyb21NYXA6XG4gICAgICByZXR1cm4gMC44O1xuICAgIGNhc2UgTGF5ZXJUeXBlLlNlbGVjdEZyb21Pd25Mb2NhdGlvbnM6XG4gICAgICByZXR1cm4gMC43OTtcbiAgICBjYXNlIExheWVyVHlwZS5GYXZvdXJpdGVTdGF0aW9uOlxuICAgIGNhc2UgTGF5ZXJUeXBlLkZhdm91cml0ZVBsYWNlOlxuICAgIGNhc2UgTGF5ZXJUeXBlLkZhdm91cml0ZVN0b3A6XG4gICAgY2FzZSBMYXllclR5cGUuRmF2b3VyaXRlUm91dGU6XG4gICAgY2FzZSBMYXllclR5cGUuRmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb246XG4gICAgICByZXR1cm4gMC40NTtcbiAgICBjYXNlIExheWVyVHlwZS5GdXR1cmVSb3V0ZTpcbiAgICAgIHJldHVybiAwLjQ0O1xuICAgIGNhc2UgTGF5ZXJUeXBlLlN0YXRpb246IHtcbiAgICAgIGlmIChpc1N0cmluZyhzb3VyY2UpICYmIHNvdXJjZS5pbmRleE9mKCdndGZzJykgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIDAuNDM7XG4gICAgICB9XG4gICAgICByZXR1cm4gMC40MjtcbiAgICB9XG4gICAgY2FzZSBMYXllclR5cGUuQ2FyUGFyazpcbiAgICAgIHJldHVybiAwLjM4O1xuICAgIGNhc2UgTGF5ZXJUeXBlLkJpa2VQYXJrOlxuICAgICAgcmV0dXJuIDAuMzg7XG4gICAgY2FzZSBMYXllclR5cGUuVmVoaWNsZVJlbnRhbFN0YXRpb246XG4gICAgICByZXR1cm4gMC4zODtcbiAgICBjYXNlIExheWVyVHlwZS5TdG9wOlxuICAgICAgcmV0dXJuIDAuMzY7XG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIHZlbnVlLCBhZGRyZXNzLCBzdHJlZXQsIHJvdXRlLXh4eFxuICAgICAgcmV0dXJuIDAuNDE7XG4gIH1cbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIHNvcnQgdGhlIHJlc3VsdHMuIE9yZGVycyBhcyBmb2xsb3dzOlxuICogIC0gY3VycmVudCBwb3NpdGlvbiBmaXJzdCBmb3IgYW4gZW1wdHkgc2VhcmNoXG4gKiAgLSBtYXRjaGluZyByb3V0ZXMgZmlyc3RcbiAqICAtIG90aGVyd2lzZSBieSBjb25maWRlbmNlLCBleGNlcHQgdGhhdDpcbiAqICAgIC0gYm9vc3Qgd2VsbCBtYXRjaGluZyBzdGF0aW9ucyAoZXNwZWNpYWxseSBmcm9tIEdURlMpXG4gKiAgICAtIHJhbmsgc3RvcHMgbG93ZXIgYXMgdGhleSB0ZW5kIHRvIG9jY3VweSBtb3N0IG9mIHRoZSBzZWFyY2ggcmVzdWx0c1xuICogIC0gaXRlbXMgd2l0aCBubyBjb25maWRlbmNlIChvbGQgc2VhcmNoZXMgYW5kIGZhdm9yaXRlcyk6XG4gKiAgICAtIHJhbmsgZmF2b3VyaXRlcyBiZXR0ZXIgdGhhbiBvcmRpbmFyeSBvbGQgc2VhcmNoZXNcbiAqICAgIC0gcmFuayBmdWxsIG1hdGNoIGJldHRlciB0aGFuIHBhcnRpYWwgbWF0Y2hcbiAqICAgIC0gcmFuayBtYXRjaCBhdCBtaWRkbGUgd29yZCBsb3dlciB0aGFuIG1hdGNoIGF0IHRoZSBiZWdpbm5pbmdcbiAqICAgIC0gcmFuayBiaWtlIHJlbnRhbCBzdGF0aW9ucyBsb3dlclxuICogQHBhcmFtIHsqW119IHJlc3VsdHMgVGhlIHNlYXJjaCByZXN1bHRzIHRoYXQgd2VyZSByZWNlaXZlZFxuICogQHBhcmFtIHtTdHJpbmd9IHRlcm0gVGhlIHNlYXJjaCB0ZXJtIHRoYXQgd2FzIHVzZWRcbiAqL1xuZXhwb3J0IGNvbnN0IHNvcnRTZWFyY2hSZXN1bHRzID0gKGxpbmVSZWdleHAsIHJlc3VsdHMsIHRlcm0gPSAnJykgPT4ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkocmVzdWx0cykpIHtcbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuICBjb25zdCBpc0xpbmVJZGVudGlmaWVyID0gdmFsdWUgPT5cbiAgICBpc1N0cmluZyh2YWx1ZSkgJiYgbGluZVJlZ2V4cCAmJiBsaW5lUmVnZXhwLnRlc3QodmFsdWUpO1xuXG4gIGNvbnN0IG5vcm1hbGl6ZWRUZXJtID0gbm9ybWFsaXplKHRlcm0pO1xuICBjb25zdCBpc0xpbmVTZWFyY2ggPSBpc0xpbmVJZGVudGlmaWVyKG5vcm1hbGl6ZWRUZXJtKTtcblxuICBjb25zdCBvcmRlcmVkUmVzdWx0cyA9IG9yZGVyQnkoXG4gICAgcmVzdWx0cyxcbiAgICBbXG4gICAgICAvLyByYW5rIG1hdGNoaW5nIHJvdXRlcyBiZXN0XG4gICAgICByZXN1bHQgPT5cbiAgICAgICAgaXNMaW5lU2VhcmNoICYmXG4gICAgICAgIGlzTGluZUlkZW50aWZpZXIobm9ybWFsaXplKHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZSkpICYmXG4gICAgICAgIG5vcm1hbGl6ZShyZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWUpLmluZGV4T2Yobm9ybWFsaXplZFRlcm0pID09PSAwXG4gICAgICAgICAgPyAxXG4gICAgICAgICAgOiAwLFxuXG4gICAgICByZXN1bHQgPT4ge1xuICAgICAgICBjb25zdCB7IGNvbmZpZGVuY2UsIGxheWVyLCBzb3VyY2UgfSA9IHJlc3VsdC5wcm9wZXJ0aWVzO1xuICAgICAgICBpZiAobm9ybWFsaXplZFRlcm0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgLy8gRG9pbmcgc2VhcmNoIHdpdGggZW1wdHkgc3RyaW5nLlxuICAgICAgICAgIC8vIE5vIGNvbmZpZGVuY2UgdG8gbWF0Y2gsIHNvIHVzZSByYW5rZWQgb2xkIHNlYXJjaGVzIGFuZCBmYXZvdXJpdGVzXG4gICAgICAgICAgcmV0dXJuIGdldExheWVyUmFuayhsYXllciwgc291cmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG11c3QgaGFuZGxlIGEgbWl4dXAgb2YgZ2VvY29kZXIgc2VhcmNoZXMgYW5kIGl0ZW1zIGFib3ZlXG4gICAgICAgIC8vIE5vcm1hbCBjb25maWRlbmNlIHJhbmdlIGZyb20gZ2VvY29kZXIgaXMgYWJvdXQgMC4zIC4uIDFcbiAgICAgICAgaWYgKCFjb25maWRlbmNlKSB7XG4gICAgICAgICAgLy8gbm90IGZyb20gZ2VvY29kZXIsIGVzdGltYXRlIGNvbmZpZGVuY2Ugb3Vyc2VsdmVzXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGdldExheWVyUmFuayhsYXllciwgc291cmNlKSArXG4gICAgICAgICAgICBtYXRjaChub3JtYWxpemVkVGVybSwgcmVzdWx0LnByb3BlcnRpZXMpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBnZW9jb2RlZCBpdGVtcyB3aXRoIGNvbmZpZGVuY2UsIGp1c3QgYWRqdXN0IGEgbGl0dGxlXG4gICAgICAgIHN3aXRjaCAobGF5ZXIpIHtcbiAgICAgICAgICBjYXNlIExheWVyVHlwZS5TdGF0aW9uOiB7XG4gICAgICAgICAgICBjb25zdCBib29zdCA9IHNvdXJjZS5pbmRleE9mKCdndGZzJykgPT09IDAgPyAwLjAyIDogMC4wMTtcbiAgICAgICAgICAgIHJldHVybiBjb25maWRlbmNlICsgYm9vc3Q7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgTGF5ZXJUeXBlLlN0b3A6XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZSAtIDAuMDU7XG4gICAgICAgICAgY2FzZSBMYXllclR5cGUuQ2FyUGFyazpcbiAgICAgICAgICAgIHJldHVybiBjb25maWRlbmNlIC0gMC4wNTtcbiAgICAgICAgICBjYXNlIExheWVyVHlwZS5CaWtlUGFyazpcbiAgICAgICAgICAgIHJldHVybiBjb25maWRlbmNlIC0gMC4wNTtcbiAgICAgICAgICBjYXNlIExheWVyVHlwZS5WZWhpY2xlUmVudGFsU3RhdGlvbjpcbiAgICAgICAgICAgIHJldHVybiBjb25maWRlbmNlIC0gMC4wNDtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2U7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAncHJvcGVydGllcy5zaG9ydE5hbWUnLFxuICAgICAgJ3Byb3BlcnRpZXMubG9uZ05hbWUnLFxuICAgIF0sXG4gICAgWydkZXNjJywgJ2Rlc2MnLCAnYXNjJywgJ2FzYyddLFxuICApO1xuXG4gIHJldHVybiB1bmlxV2l0aChvcmRlclJlc3VsdHNXaXRoTGV0dGVyc0ZpcnN0KG9yZGVyZWRSZXN1bHRzKSwgaXNEdXBsaWNhdGUpO1xufTtcblxuLyoqXG4gKiBQYXJzZXMgc3RvcCdzIG5hbWUgd2l0aG91dCBzdG9wIGNvZGUgZnJvbSBhIHN0b3AgbmFtZSBmcm9tIGdlb2NvZGluZyByZXN1bHRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIHN0b3AncyBuYW1lIGZyb20gZ2VvY29kaW5nIHJlc3VsdHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RvcENvZGUgc3RvcCBjb2RlLlxuICovXG5leHBvcnQgY29uc3QgZ2V0U3RvcE5hbWUgPSAobmFtZSwgc3RvcENvZGUpID0+IHtcbiAgaWYgKFxuICAgIHN0b3BDb2RlICE9PSB1bmRlZmluZWQgJiZcbiAgICBzdG9wQ29kZSAhPT0gbnVsbCAmJlxuICAgIG5hbWUubGFzdEluZGV4T2Yoc3RvcENvZGUpICE9PSAtMVxuICApIHtcbiAgICByZXR1cm4gbmFtZS5zdWJzdHJpbmcoMCwgbmFtZS5sYXN0SW5kZXhPZihzdG9wQ29kZSkgLSAxKTtcbiAgfVxuICByZXR1cm4gbmFtZTtcbn07XG4iLCJpbXBvcnQgZ2V0IGZyb20gJ2xvZGFzaC9nZXQnO1xuXG4vKipcbiAqIEZ1bmN0aW9uIHRoYXQgZmlsdGVycyBsaXN0IG1hdGNoaW5nIHRvIGlucHV0LlxuICpcbiAqIEBuYW1lIGZpbHRlck1hdGNoaW5nVG9JbnB1dFxuICogQHBhcmFtIHtBcnJheX0gbGlzdCBMaXN0IGNvbnRhaW5pbiBvYmplY3RzIGUuZyggIHtcbiAqICAgICAgICAgdHlwZTogJ0ZlYXR1cmUnXG4gKiAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAqICAgICAgICAgICBsYWJlbDogJ3Rlc3RhZGRyZXNzNCcsXG4gKiAgICAgICAgICAgbGF5ZXI6ICdhZGRyZXNzJyxcbiAqICAgICAgICAgICBuYW1lOiAndGVzdGFkZHJlc3M0JyxcbiAqICAgICAgICAgfSxcbiAqICAgICAgICAgZ2VvbWV0cnk6IHsgY29vcmRpbmF0ZXM6IFtsb24sIGxhdF0gfSxcbiAqICAgICAgIH0sKVxuICogQHBhcmFtIHtTdHJpbmd9IElucHV0IElucHV0IGdpdmVuIGZvciBmaWx0ZXJpbmcgdGhlIGxpc3RcbiAqIEBwYXJhbSB7QXJyYXl9IGZpZWxkcyBMaXN0IG9mIGZpZWxkcyB0aGF0IGxpc3QgaXMgZmlsdGVyZWQgYnkgZS5nIChbcHJvcGVydGllcy5sYWJlbCwgcHJvcGVydGllcy5uYW1lXSlcbiAqIEByZXR1cm5zIHtBcnJheX0gRmlsdGVyZWQgQXJyYXkuXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtdXRpbC5maWx0ZXJNYXRjaGluZ1RvSW5wdXQoW3t0eXBlOiBmZWF0dXJlLCBwcm9wZXJ0aWVzIHsgLi4uIG5hbWU6IHRlc3RhZGRyZXNzNCB9IC4uLiB9XSwgJ3Rlc3RhZGRyZXNzNCcsICdwcm9wZXJ0aWVzLm5hbWUnKTtcbiAqIC8vPSBMaXN0IGNvbnRhaW5pbmcgb2JqZWN0IHdpdGggZ2l2ZW4gbmFtZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZmlsdGVyTWF0Y2hpbmdUb0lucHV0KGxpc3QsIElucHV0LCBmaWVsZHMpIHtcbiAgaWYgKHR5cGVvZiBJbnB1dCA9PT0gJ3N0cmluZycgJiYgSW5wdXQubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGlucHV0ID0gSW5wdXQudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgY29uc3QgbXVsdGlXb3JkID0gaW5wdXQuaW5jbHVkZXMoJyAnKSB8fCBpbnB1dC5pbmNsdWRlcygnLCcpO1xuICAgIHJldHVybiBsaXN0LmZpbHRlcihpdGVtID0+IHtcbiAgICAgIGxldCBwYXJ0cyA9IFtdO1xuICAgICAgZmllbGRzLmZvckVhY2gocE5hbWUgPT4ge1xuICAgICAgICBsZXQgdmFsdWUgPSBnZXQoaXRlbSwgcE5hbWUpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhbXVsdGlXb3JkICYmXG4gICAgICAgICAgKHBOYW1lID09PSAncHJvcGVydGllcy5sYWJlbCcgfHwgcE5hbWUgPT09ICdhZGRyZXNzJykgJiZcbiAgICAgICAgICB2YWx1ZVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBzcGVjaWFsIGNhc2U6IGRyb3AgbGFzdCBwYXJ0cyBpLmUuIGNpdHkgYW5kIG5laWdoYm91cmhvb2RcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNwbGl0KCcsJyk7XG4gICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIHZhbHVlLnNwbGljZSh2YWx1ZS5sZW5ndGggLSAyLCAyKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHZhbHVlLnNwbGljZSh2YWx1ZS5sZW5ndGggLSAxLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZS5qb2luKCcsJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKG11bHRpV29yZCkge1xuICAgICAgICAgICAgcGFydHMgPSBwYXJ0cy5jb25jYXQodmFsdWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnRzID0gcGFydHMuY29uY2F0KFxuICAgICAgICAgICAgICB2YWx1ZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLywvZywgJyAnKS5zcGxpdCgnICcpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAocGFydHNbaV0uaW5kZXhPZihpbnB1dCkgPT09IDApIHtcbiAgICAgICAgICAvLyBhY2NlcHQgbWF0Y2ggb25seSBhdCB3b3JkIHN0YXJ0XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBsaXN0O1xufVxuIiwiLyoqXG4gKiBTZXJpYWxpemVzIG9iamVjdHNcbiAqXG4gKiBAbmFtZSBzZXJpYWxpemVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogT2JqZWN0IHRvIGJlIHNlcmlhbGl6ZWRcbiAqIEBwYXJhbSB7QW55fSBwcmVmaXhcbiAqIEByZXR1cm5zIHtTdHJpbmd9IFNlcmlhbGl6ZWQgb2JqZWN0XG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwuc2VyaWFsaXplKHBhcmFtMSwgcGFyYW0yKTtcbiAqIC8vPXRydWVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2VyaWFsaXplKG9iaiwgcHJlZml4KSB7XG4gIGlmICghb2JqKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopXG4gICAgLm1hcChwID0+IHtcbiAgICAgIGNvbnN0IGsgPSBwcmVmaXggfHwgcDtcbiAgICAgIGNvbnN0IHYgPSBvYmpbcF07XG5cbiAgICAgIHJldHVybiB0eXBlb2YgdiA9PT0gJ29iamVjdCdcbiAgICAgICAgPyBzZXJpYWxpemUodiwgaylcbiAgICAgICAgOiBgJHtlbmNvZGVVUklDb21wb25lbnQoayl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHYpfWA7XG4gICAgfSlcbiAgICAuam9pbignJicpO1xufVxuIiwiaW1wb3J0IHNlcmlhbGl6ZSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtc2VyaWFsaXplJztcbi8qKlxuICogIFJldHVybiBQcm9taXNlIGZvciBhIHVybCBqc29uIGdldCByZXF1ZXN0XG4gKlxuICogQG5hbWUgZ2V0SnNvblxuICogQHBhcmFtIHtTdHJpbmd9IHVybFxuICogQHBhcmFtIHtBcnJheX0gcGFyYW1zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSByZXNwb25zZVxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLmdldEpzb24ocGFyYW0xLCBwYXJhbTIpO1xuICogLy89cmVzcG9uc2VcbiAqL1xuY29uc3QgYXhpb3MgPSByZXF1aXJlKCdheGlvcycpLmRlZmF1bHQ7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEpzb24odXJsLCBwYXJhbXMpIHtcbiAgcmV0dXJuIGF4aW9zXG4gICAgLmdldChcbiAgICAgIGVuY29kZVVSSSh1cmwpICtcbiAgICAgICAgKHBhcmFtc1xuICAgICAgICAgID8gKHVybC5zZWFyY2goL1xcPy8pID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemUocGFyYW1zKVxuICAgICAgICAgIDogJycpLFxuICAgICAge1xuICAgICAgICB0aW1lb3V0OiAxMDAwMCxcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcblxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIClcbiAgICAudGhlbihyZXMgPT4ge1xuICAgICAgcmV0dXJuIHJlcy5kYXRhO1xuICAgIH0pO1xufVxuIiwiaW1wb3J0IGdldEpzb24gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1qc29uJztcblxuY29uc3QgREVGQVVMVF9QRUxJQVNfVVJMID0gJ2h0dHBzOi8vYXBpLmRpZ2l0cmFuc2l0LmZpL2dlb2NvZGluZy92MS9zZWFyY2gnO1xuLyoqXG4gKiA8REVTQ1JJUFRJT04+XG4gKlxuICogQG5hbWUgZ2V0R2VvY29kaW5nUmVzdWx0c1xuICogQHBhcmFtIHtTdHJpbmd9IHNlYXJjaFN0cmluZ1xuICogQHBhcmFtIHtTdHJpbmd9IHNlYXJjaFBhcmFtcyAoT3B0aW9uYWwpIFBhcmFtZXRlcnMgYXBwZW5kZWQgdG8gdXJsLCBiYXNpY2FsbHkgYm94IC8gcG9seWdvbiB0byByZXN0cmljdCBzZWFyY2ggYXJlYVxuICogQHBhcmFtIHtTdHJpbmd9IGxhbmcgKE9wdGlvbmFsKSBzZWFyY2ggbGFuZ3VhZ2VcbiAqIEBwYXJhbSB7T2JqZWN0fSBmb2N1c1BvaW50IChPcHRpb25hbCkgT3duIFBvc2l0aW9uIChQRUxJQVMgQVBJKVxuICogQHBhcmFtIHtTdHJpbmd9IHNvdXJjZXMgKE9wdGlvbmFsKSBzZWFyY2ggc291cmNlcyAoZS5nIE9TTSwgR1RGUy4uKVxuICogQHBhcmFtIHtPYmplY3R9IG1pbmltYWxSZWdleHAgKE9wdGlvbmFsKSBSZWdleHAgZm9yIHRlc3RpbmdcbiAqIEBwYXJhbSB7Kn0gZ2VvY29kaW5nTGF5ZXJzIChPcHRpb25hbCkgQXJyYXkgb2Ygc3RyaW5ncyB0aGF0IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIGxheWVycyBpcyBzZWFyY2hlZCwgZS5nLiBbJ3ZlbnVlJywgJ2FkZHJlc3MnLCAnc3RvcCddXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBSZXN1bHRzIGluIEpTT04gZm9ybVxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLmdldEdlb2NvZGluZ1Jlc3VsdHMoXCJyZXN1bHRcIik7XG4gKiAvLz0gZS5nLiB7dGV4dDpcInJlc3VsdFwifVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICBzZWFyY2hTdHJpbmcsXG4gIHNlYXJjaFBhcmFtcyxcbiAgbGFuZyxcbiAgZm9jdXNQb2ludCxcbiAgc291cmNlcyxcbiAgcGVsaWFzVXJsLFxuICBtaW5pbWFsUmVnZXhwLFxuICBnZW9jb2RpbmdMYXllcnMsXG4pIHtcbiAgY29uc3QgdGV4dCA9IHNlYXJjaFN0cmluZyA/IHNlYXJjaFN0cmluZy50cmltKCkgOiBudWxsO1xuICBpZiAoXG4gICAgdGV4dCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgdGV4dCA9PT0gbnVsbCB8fFxuICAgIHRleHQubGVuZ3RoIDwgMSB8fFxuICAgIChtaW5pbWFsUmVnZXhwICYmICFtaW5pbWFsUmVnZXhwLnRlc3QodGV4dCkpXG4gICkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICB9XG4gIGNvbnN0IFBFTElBU19VUkwgPSBwZWxpYXNVcmwgfHwgREVGQVVMVF9QRUxJQVNfVVJMO1xuICBsZXQgb3B0cyA9IHsgdGV4dCwgLi4uc2VhcmNoUGFyYW1zLCAuLi5mb2N1c1BvaW50LCBsYW5nIH07XG4gIGlmIChzb3VyY2VzKSB7XG4gICAgb3B0cyA9IHsgLi4ub3B0cywgc291cmNlcyB9O1xuICB9XG4gIGlmIChnZW9jb2RpbmdMYXllcnMpIHtcbiAgICBjb25zdCBsYXllcnMgPSBnZW9jb2RpbmdMYXllcnMudG9TdHJpbmcoKTtcbiAgICBvcHRzID0geyAuLi5vcHRzLCBsYXllcnMgfTtcbiAgfVxuICByZXR1cm4gZ2V0SnNvbihQRUxJQVNfVVJMLCBvcHRzKS50aGVuKHJlcyA9PiB7XG4gICAgcmV0dXJuIHJlcy5mZWF0dXJlcztcbiAgfSk7XG59XG4iLCJpbXBvcnQgZGVib3VuY2UgZnJvbSAnbG9kYXNoL2RlYm91bmNlJztcbmltcG9ydCBmbGF0dGVuIGZyb20gJ2xvZGFzaC9mbGF0dGVuJztcbmltcG9ydCB0YWtlIGZyb20gJ2xvZGFzaC90YWtlJztcbmltcG9ydCB7XG4gIHNvcnRTZWFyY2hSZXN1bHRzLFxuICBpc1N0b3AsXG59IGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1oZWxwZXJzJztcbmltcG9ydCBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWZpbHRlci1tYXRjaGluZy10by1pbnB1dCc7XG5pbXBvcnQgZ2V0R2VvY29kaW5nUmVzdWx0cyBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWdlb2NvZGluZy1yZXN1bHRzJztcbmltcG9ydCBnZXRKc29uIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtanNvbic7XG5cbmZ1bmN0aW9uIGdldFN0b3BzRnJvbUdlb2NvZGluZyhzdG9wcywgVVJMX1BFTElBU19QTEFDRSkge1xuICBpZiAoIXN0b3BzIHx8IHN0b3BzLmxlbmd0aCA8IDEpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbiAgfVxuICBsZXQgZ2lkcyA9ICcnO1xuICBjb25zdCBzdG9wc1dpdGhHaWRzID0gc3RvcHMubWFwKHN0b3AgPT4ge1xuICAgIGNvbnN0IHR5cGUgPSBzdG9wLnR5cGUgPT09ICdzdG9wJyA/ICdzdG9wJyA6ICdzdGF0aW9uJztcbiAgICBsZXQgZ2lkID0gYGd0ZnMke3N0b3AuZ3Rmc0lkLnNwbGl0KCc6JylbMF0udG9Mb3dlckNhc2UoKX06JHt0eXBlfTpHVEZTOiR7XG4gICAgICBzdG9wLmd0ZnNJZFxuICAgIH1gO1xuICAgIGlmIChzdG9wLmNvZGUpIHtcbiAgICAgIGdpZCArPSBgIyR7c3RvcC5jb2RlfWA7XG4gICAgfVxuICAgIGdpZHMgKz0gYCR7Z2lkfSxgO1xuICAgIHJldHVybiB7IC4uLnN0b3AsIGdpZCB9O1xuICB9KTtcbiAgY29uc3Qgc3RvcFN0YXRpb25NYXAgPSBzdG9wc1dpdGhHaWRzLnJlZHVjZShmdW5jdGlvbiByZWR1KFxuICAgIG1hcCxcbiAgICBzdG9wT3JTdGF0aW9uLFxuICApIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICBtYXBbc3RvcE9yU3RhdGlvbi5naWRdID0gc3RvcE9yU3RhdGlvbjtcbiAgICByZXR1cm4gbWFwO1xuICB9LCB7fSk7XG4gIHJldHVybiBnZXRKc29uKFVSTF9QRUxJQVNfUExBQ0UsIHtcbiAgICBpZHM6IGdpZHMuc2xpY2UoMCwgLTEpLFxuICAgIC8vIGxhbmc6IGNvbnRleHQuZ2V0U3RvcmUoJ1ByZWZlcmVuY2VzU3RvcmUnKS5nZXRMYW5ndWFnZSgpLCBUT0RPIGVuYWJsZSB0aGlzIHdoZW4gT1RQIHN1cHBvcnRzIHRyYW5zbGF0aW9uc1xuICB9KS50aGVuKHJlcyA9PiB7XG4gICAgcmV0dXJuIHJlcy5mZWF0dXJlcy5tYXAoc3RvcCA9PiB7XG4gICAgICBjb25zdCBmYXZvdXJpdGUgPSB7XG4gICAgICAgIHR5cGU6ICdGYXZvdXJpdGVTdG9wJyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGFkZGVuZHVtOiBzdG9wLnByb3BlcnRpZXMuYWRkZW5kdW0sXG4gICAgICAgICAgZ2lkOiBzdG9wU3RhdGlvbk1hcFtzdG9wLnByb3BlcnRpZXMuZ2lkXS5naWQsXG4gICAgICAgICAgY29kZTogc3RvcFN0YXRpb25NYXBbc3RvcC5wcm9wZXJ0aWVzLmdpZF0uY29kZSxcbiAgICAgICAgICBndGZzSWQ6IHN0b3BTdGF0aW9uTWFwW3N0b3AucHJvcGVydGllcy5naWRdLmd0ZnNJZCxcbiAgICAgICAgICBsYXN0VXBkYXRlZDogc3RvcFN0YXRpb25NYXBbc3RvcC5wcm9wZXJ0aWVzLmdpZF0ubGFzdFVwZGF0ZWQsXG4gICAgICAgICAgZmF2b3VyaXRlSWQ6IHN0b3BTdGF0aW9uTWFwW3N0b3AucHJvcGVydGllcy5naWRdLmZhdm91cml0ZUlkLFxuICAgICAgICAgIGFkZHJlc3M6IHN0b3AucHJvcGVydGllcy5sYWJlbCxcbiAgICAgICAgICBsYXllcjogaXNTdG9wKHN0b3AucHJvcGVydGllcykgPyAnZmF2b3VyaXRlU3RvcCcgOiAnZmF2b3VyaXRlU3RhdGlvbicsXG4gICAgICAgIH0sXG4gICAgICAgIGdlb21ldHJ5OiBzdG9wLmdlb21ldHJ5LFxuICAgICAgfTtcbiAgICAgIHJldHVybiBmYXZvdXJpdGU7XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZmlsdGVyRmF2b3VyaXRlTG9jYXRpb25zKGZhdm91cml0ZXMsIGlucHV0KSB7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgZmlsdGVyTWF0Y2hpbmdUb0lucHV0KGZhdm91cml0ZXMsIGlucHV0LCBbJ2FkZHJlc3MnLCAnbmFtZSddKS5tYXAoaXRlbSA9PiAoe1xuICAgICAgdHlwZTogJ0Zhdm91cml0ZVBsYWNlJyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgbGFiZWw6IGl0ZW0ubmFtZSxcbiAgICAgICAgbGF5ZXI6ICdmYXZvdXJpdGVQbGFjZScsXG4gICAgICB9LFxuICAgICAgZ2VvbWV0cnk6IHsgdHlwZTogJ1BvaW50JywgY29vcmRpbmF0ZXM6IFtpdGVtLmxvbiwgaXRlbS5sYXRdIH0sXG4gICAgfSkpLFxuICApO1xufVxuZnVuY3Rpb24gc2VsZWN0UG9zaXRpb25Gb21NYXAoaW5wdXQpIHtcbiAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycgfHwgaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdTZWxlY3RGcm9tTWFwJyxcbiAgICAgICAgYWRkcmVzczogJ1NlbGVjdEZyb21NYXAnLFxuICAgICAgICBsYXQ6IG51bGwsXG4gICAgICAgIGxvbjogbnVsbCxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGxhYmVsSWQ6ICdzZWxlY3QtZnJvbS1tYXAnLFxuICAgICAgICAgIGxheWVyOiAnc2VsZWN0RnJvbU1hcCcsXG4gICAgICAgICAgYWRkcmVzczogJ1NlbGVjdEZyb21NYXAnLFxuICAgICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgICBsb246IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIGdlb21ldHJ5OiB7XG4gICAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgICBjb29yZGluYXRlczogW10sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50UG9zaXRpb25JZkVtcHR5KGlucHV0LCBwb3NpdGlvbikge1xuICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJyB8fCBpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ0N1cnJlbnRMb2NhdGlvbicsXG4gICAgICAgIGFkZHJlc3M6IHBvc2l0aW9uLmFkZHJlc3MsXG4gICAgICAgIGxhdDogcG9zaXRpb24ubGF0LFxuICAgICAgICBsb246IHBvc2l0aW9uLmxvbixcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGxhYmVsSWQ6ICd1c2Utb3duLXBvc2l0aW9uJyxcbiAgICAgICAgICBsYXllcjogJ2N1cnJlbnRQb3NpdGlvbicsXG4gICAgICAgICAgYWRkcmVzczogcG9zaXRpb24uYWRkcmVzcyxcbiAgICAgICAgICBsYXQ6IHBvc2l0aW9uLmxhdCxcbiAgICAgICAgICBsb246IHBvc2l0aW9uLmxvbixcbiAgICAgICAgfSxcbiAgICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgICAgIGNvb3JkaW5hdGVzOiBbcG9zaXRpb24ubG9uLCBwb3NpdGlvbi5sYXRdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdKTtcbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xufVxuXG5mdW5jdGlvbiBzZWxlY3RGcm9tT3duTG9jYXRpb25zKGlucHV0KSB7XG4gIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnIHx8IGlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycsXG4gICAgICAgIGFkZHJlc3M6ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyxcbiAgICAgICAgbGF0OiBudWxsLFxuICAgICAgICBsb246IG51bGwsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBsYWJlbElkOiAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucycsXG4gICAgICAgICAgbGF5ZXI6ICdvd25Mb2NhdGlvbnMnLFxuICAgICAgICAgIGFkZHJlc3M6ICdzZWxlY3RGcm9tT3duTG9jYXRpb25zJyxcbiAgICAgICAgICBsYXQ6IG51bGwsXG4gICAgICAgICAgbG9uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgIHR5cGU6ICdQb2ludCcsXG4gICAgICAgICAgY29vcmRpbmF0ZXM6IFtdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdKTtcbiAgfVxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbn1cblxuZnVuY3Rpb24gZ2V0QmFja1N1Z2dlc3Rpb24oKSB7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoW1xuICAgIHtcbiAgICAgIHR5cGU6ICdiYWNrJyxcbiAgICAgIGFkZHJlc3M6ICdiYWNrJyxcbiAgICAgIGxhdDogbnVsbCxcbiAgICAgIGxvbjogbnVsbCxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgbGFiZWxJZDogJ2JhY2snLFxuICAgICAgICBsYXllcjogJ2JhY2snLFxuICAgICAgICBhZGRyZXNzOiAnYmFjaycsXG4gICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgbG9uOiBudWxsLFxuICAgICAgfSxcbiAgICAgIGdlb21ldHJ5OiB7XG4gICAgICAgIHR5cGU6ICdQb2ludCcsXG4gICAgICAgIGNvb3JkaW5hdGVzOiBbXSxcbiAgICAgIH0sXG4gICAgfSxcbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGZpbHRlckZhdm91cml0ZVN0b3BzKHN0b3BzQW5kU3RhdGlvbnMsIGlucHV0LCB1c2VTdG9wcywgdXNlU3RhdGlvbnMpIHtcbiAgcmV0dXJuIHN0b3BzQW5kU3RhdGlvbnMudGhlbihzdG9wc1N0YXRpb25zID0+IHtcbiAgICBjb25zdCBjYW5kaWRhdGVzID0gc3RvcHNTdGF0aW9ucy5maWx0ZXIocyA9PlxuICAgICAgcy50eXBlID09PSAnc3RvcCcgPyB1c2VTdG9wcyA6IHVzZVN0YXRpb25zLFxuICAgICk7XG4gICAgcmV0dXJuIGZpbHRlck1hdGNoaW5nVG9JbnB1dChjYW5kaWRhdGVzLCBpbnB1dCwgW1xuICAgICAgJ3Byb3BlcnRpZXMubmFtZScsXG4gICAgICAncHJvcGVydGllcy5uYW1lJyxcbiAgICAgICdwcm9wZXJ0aWVzLmFkZHJlc3MnLFxuICAgIF0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZmlsdGVyT2xkU2VhcmNoZXMob2xkU2VhcmNoZXMsIGlucHV0LCBkcm9wTGF5ZXJzKSB7XG4gIGxldCBtYXRjaGluZ09sZFNlYXJjaGVzID0gZmlsdGVyTWF0Y2hpbmdUb0lucHV0KG9sZFNlYXJjaGVzLCBpbnB1dCwgW1xuICAgICdwcm9wZXJ0aWVzLm5hbWUnLFxuICAgICdwcm9wZXJ0aWVzLmxhYmVsJyxcbiAgICAncHJvcGVydGllcy5hZGRyZXNzJyxcbiAgICAncHJvcGVydGllcy5zaG9ydE5hbWUnLFxuICAgICdwcm9wZXJ0aWVzLmxvbmdOYW1lJyxcbiAgXSk7XG4gIGlmIChkcm9wTGF5ZXJzKSB7XG4gICAgLy8gZG9uJ3Qgd2FudCB0aGVzZVxuICAgIG1hdGNoaW5nT2xkU2VhcmNoZXMgPSBtYXRjaGluZ09sZFNlYXJjaGVzLmZpbHRlcihcbiAgICAgIGl0ZW0gPT4gIWRyb3BMYXllcnMuaW5jbHVkZXMoaXRlbS5wcm9wZXJ0aWVzLmxheWVyKSxcbiAgICApO1xuICB9XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgdGFrZShtYXRjaGluZ09sZFNlYXJjaGVzLCAxMCkubWFwKGl0ZW0gPT4ge1xuICAgICAgY29uc3QgbmV3SXRlbSA9IHtcbiAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgdHlwZTogJ09sZFNlYXJjaCcsXG4gICAgICAgIHRpbWV0YWJsZUNsaWNrZWQ6IGZhbHNlLCAvLyByZXNldCBsYXRlc3Qgc2VsZWN0aW9uIGFjdGlvblxuICAgICAgICBhcnJvd0NsaWNrZWQ6IGZhbHNlLFxuICAgICAgfTtcbiAgICAgIGRlbGV0ZSBuZXdJdGVtLnByb3BlcnRpZXMuY29uZmlkZW5jZTtcbiAgICAgIHJldHVybiBuZXdJdGVtO1xuICAgIH0pLFxuICApO1xufVxuXG5mdW5jdGlvbiBoYXNGYXZvdXJpdGVzKHNlYXJjaENvbnRleHQpIHtcbiAgY29uc3QgZmF2b3VyaXRlTG9jYXRpb25zID0gc2VhcmNoQ29udGV4dC5nZXRGYXZvdXJpdGVMb2NhdGlvbnMoXG4gICAgc2VhcmNoQ29udGV4dC5jb250ZXh0LFxuICApO1xuICBpZiAoZmF2b3VyaXRlTG9jYXRpb25zPy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCBmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnMgPVxuICAgIHNlYXJjaENvbnRleHQuZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zKHNlYXJjaENvbnRleHQuY29udGV4dCk7XG4gIGlmIChmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnM/Lmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjb25zdCBmYXZvdXJpdGVTdG9wcyA9IHNlYXJjaENvbnRleHQuZ2V0RmF2b3VyaXRlU3RvcHMoc2VhcmNoQ29udGV4dC5jb250ZXh0KTtcbiAgcmV0dXJuIGZhdm91cml0ZVN0b3BzPy5sZW5ndGggPiAwO1xufVxuXG5jb25zdCByb3V0ZUxheWVycyA9IFtcbiAgJ3JvdXRlLVRSQU0nLFxuICAncm91dGUtQlVTJyxcbiAgJ3JvdXRlLVJBSUwnLFxuICAncm91dGUtRkVSUlknLFxuICAncm91dGUtU1VCV0FZJyxcbiAgJ3JvdXRlLUFJUlBMQU5FJyxcbiAgJ3JvdXRlLUZVTklDVUxBUicsXG5dO1xuY29uc3QgbG9jYXRpb25MYXllcnMgPSBbJ3ZlbnVlJywgJ2FkZHJlc3MnLCAnc3RyZWV0J107XG5jb25zdCBwYXJraW5nTGF5ZXJzID0gWydjYXJwYXJrJywgJ2Jpa2VwYXJrJ107XG5jb25zdCBzdG9wTGF5ZXJzID0gWydzdG9wJywgJ3N0YXRpb24nXTtcblxuLyoqXG4gKiBFeGVjdXRlcyB0aGUgc2VhcmNoXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VhcmNoUmVzdWx0cyhcbiAgdGFyZ2V0cyxcbiAgc291cmNlcyxcbiAgdHJhbnNwb3J0TW9kZSxcbiAgc2VhcmNoQ29udGV4dCxcbiAgZmlsdGVyUmVzdWx0cyxcbiAgZ2VvY29kaW5nU2l6ZSxcbiAgeyBpbnB1dCB9LFxuICBjYWxsYmFjayxcbiAgcGF0aE9wdHMsXG4gIHJlZlBvaW50LFxuKSB7XG4gIGNvbnN0IHtcbiAgICBnZXRQb3NpdGlvbnMsXG4gICAgZ2V0RmF2b3VyaXRlTG9jYXRpb25zLFxuICAgIGdldE9sZFNlYXJjaGVzLFxuICAgIGdldEZhdm91cml0ZVN0b3BzLFxuICAgIHBhcmtpbmdBcmVhU291cmNlcyxcbiAgICBnZXRMYW5ndWFnZSxcbiAgICBnZXRTdG9wQW5kU3RhdGlvbnNRdWVyeSxcbiAgICBnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnNRdWVyeSxcbiAgICBnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnMsXG4gICAgZ2V0RmF2b3VyaXRlUm91dGVzUXVlcnksXG4gICAgZ2V0RmF2b3VyaXRlUm91dGVzLFxuICAgIGdldFJvdXRlc1F1ZXJ5LFxuICAgIGNvbnRleHQsXG4gICAgaXNQZWxpYXNMb2NhdGlvbkF3YXJlOiBsb2NhdGlvbkF3YXJlLFxuICAgIG1pbmltYWxSZWdleHAsXG4gICAgbGluZVJlZ2V4cCxcbiAgICBVUkxfUEVMSUFTLFxuICAgIFVSTF9QRUxJQVNfUExBQ0UsXG4gICAgZmVlZElEcyxcbiAgICBnZW9jb2RpbmdTZWFyY2hQYXJhbXMsXG4gICAgZ2VvY29kaW5nU291cmNlcyxcbiAgICBnZXRGdXR1cmVSb3V0ZXMsXG4gICAgY2l0eUJpa2VOZXR3b3JrcyxcbiAgfSA9IHNlYXJjaENvbnRleHQ7XG4gIC8vIGlmIG5vIHRhcmdldHMgYXJlIHByb3ZpZGVkLCBzZWFyY2ggdGhlbSBhbGwuXG4gIGNvbnN0IGFsbFRhcmdldHMgPSAhdGFyZ2V0cyB8fCB0YXJnZXRzLmxlbmd0aCA9PT0gMDtcbiAgLy8gaWYgbm8gc291cmNlcyBhcmUgcHJvdmlkZWQsIHVzZSB0aGVtIGFsbC5cbiAgY29uc3QgYWxsU291cmNlcyA9ICFzb3VyY2VzIHx8IHNvdXJjZXMubGVuZ3RoID09PSAwO1xuICBjb25zdCBwb3NpdGlvbiA9IGdldFBvc2l0aW9ucyhjb250ZXh0KTtcbiAgY29uc3Qgc2VhcmNoQ29tcG9uZW50cyA9IFtdO1xuICBjb25zdCBzZWFyY2hlcyA9IHsgdHlwZTogJ2FsbCcsIHRlcm06IGlucHV0LCByZXN1bHRzOiBbXSB9O1xuICBjb25zdCBsYW5ndWFnZSA9IGdldExhbmd1YWdlKGNvbnRleHQpO1xuICBjb25zdCBmb2N1c1BvaW50ID1cbiAgICBsb2NhdGlvbkF3YXJlICYmIHJlZlBvaW50Py5sYXQgJiYgcmVmUG9pbnQ/LmxvblxuICAgICAgPyB7XG4gICAgICAgICAgLy8gUm91bmQgY29vcmRpbmF0ZXMgdG8gYXBwcm94IDEga20sIGluIG9yZGVyIHRvIGltcHJvdmUgY2FjaGluZ1xuICAgICAgICAgICdmb2N1cy5wb2ludC5sYXQnOiByZWZQb2ludC5sYXQudG9GaXhlZCgzKSxcbiAgICAgICAgICAnZm9jdXMucG9pbnQubG9uJzogcmVmUG9pbnQubG9uLnRvRml4ZWQoMyksXG4gICAgICAgIH1cbiAgICAgIDoge307XG4gIGNvbnN0IG1vZGUgPSB0cmFuc3BvcnRNb2RlID8gdHJhbnNwb3J0TW9kZS5zcGxpdCgnLScpWzFdIDogdW5kZWZpbmVkO1xuICBpZiAoXG4gICAgdGFyZ2V0cy5pbmNsdWRlcygnQ3VycmVudFBvc2l0aW9uJykgJiZcbiAgICBwb3NpdGlvbi5zdGF0dXMgIT09ICdnZW9sb2NhdGlvbi1ub3Qtc3VwcG9ydGVkJ1xuICApIHtcbiAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goZ2V0Q3VycmVudFBvc2l0aW9uSWZFbXB0eShpbnB1dCwgcG9zaXRpb24pKTtcbiAgfVxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdNYXBQb3NpdGlvbicpKSB7XG4gICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKHNlbGVjdFBvc2l0aW9uRm9tTWFwKGlucHV0KSk7XG4gIH1cbiAgaWYgKHRhcmdldHMuaW5jbHVkZXMoJ0Z1dHVyZVJvdXRlcycpKSB7XG4gICAgY29uc3QgaXRlbXMgPSBnZXRGdXR1cmVSb3V0ZXMoY29udGV4dCk7XG4gICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKHRha2UoaXRlbXMsIDMpKTtcbiAgfVxuICBpZiAoXG4gICAgdGFyZ2V0cy5pbmNsdWRlcygnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycpICYmXG4gICAgaGFzRmF2b3VyaXRlcyhzZWFyY2hDb250ZXh0KVxuICApIHtcbiAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goc2VsZWN0RnJvbU93bkxvY2F0aW9ucyhpbnB1dCkpO1xuICB9XG4gIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ0xvY2F0aW9ucycpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gZ2VvY29kaW5nU2VhcmNoUGFyYW1zO1xuICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgY29uc3QgZmF2b3VyaXRlTG9jYXRpb25zID0gZ2V0RmF2b3VyaXRlTG9jYXRpb25zKGNvbnRleHQpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBmaWx0ZXJGYXZvdXJpdGVMb2NhdGlvbnMoZmF2b3VyaXRlTG9jYXRpb25zLCBpbnB1dCksXG4gICAgICApO1xuICAgICAgaWYgKHNvdXJjZXMuaW5jbHVkZXMoJ0JhY2snKSkge1xuICAgICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goZ2V0QmFja1N1Z2dlc3Rpb24oKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnRGF0YXNvdXJjZScpKSB7XG4gICAgICBjb25zdCBnZW9jb2RpbmdMYXllcnMgPSBbJ3ZlbnVlJywgJ2FkZHJlc3MnLCAnc3RyZWV0J107XG4gICAgICBpZiAodGFyZ2V0cy5pbmNsdWRlcygnU3RhdGlvbnMnKSkge1xuICAgICAgICBnZW9jb2RpbmdMYXllcnMucHVzaCgnc3RhdGlvbicpOyAvLyBzZWFyY2ggc3RhdGlvbnMgZnJvbSBPU01cbiAgICAgIH1cbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0R2VvY29kaW5nUmVzdWx0cyhcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBzZWFyY2hQYXJhbXMsXG4gICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgZm9jdXNQb2ludCxcbiAgICAgICAgICBnZW9jb2RpbmdTb3VyY2VzLmpvaW4oJywnKSxcbiAgICAgICAgICBVUkxfUEVMSUFTLFxuICAgICAgICAgIG1pbmltYWxSZWdleHAsXG4gICAgICAgICAgZ2VvY29kaW5nTGF5ZXJzLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnSGlzdG9yeScpKSB7XG4gICAgICBjb25zdCBsb2NhdGlvbkhpc3RvcnkgPSBnZXRPbGRTZWFyY2hlcyhjb250ZXh0LCAnZW5kcG9pbnQnKTtcbiAgICAgIGNvbnN0IGRyb3BMYXllcnMgPSBbJ2Jpa2VzdGF0aW9uJ107XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4uc3RvcExheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucm91dGVMYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnBhcmtpbmdMYXllcnMpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBmaWx0ZXJPbGRTZWFyY2hlcyhsb2NhdGlvbkhpc3RvcnksIGlucHV0LCBkcm9wTGF5ZXJzKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ1BhcmtpbmdBcmVhcycpKSB7XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnRGF0YXNvdXJjZScpKSB7XG4gICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBnZW9jb2RpbmdTZWFyY2hQYXJhbXM7XG4gICAgICBpZiAoZ2VvY29kaW5nU2l6ZSAmJiBnZW9jb2RpbmdTaXplICE9PSAxMCkge1xuICAgICAgICBzZWFyY2hQYXJhbXMuc2l6ZSA9IGdlb2NvZGluZ1NpemU7XG4gICAgICB9XG4gICAgICBjb25zdCBnZW9jb2RpbmdMYXllcnMgPSBbJ2NhcnBhcmsnLCAnYmlrZXBhcmsnXTtcbiAgICAgIGNvbnN0IGZlZWRJZHMgPSBwYXJraW5nQXJlYVNvdXJjZXMgPyBwYXJraW5nQXJlYVNvdXJjZXMuam9pbignLCcpIDogbnVsbDtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0R2VvY29kaW5nUmVzdWx0cyhcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBzZWFyY2hQYXJhbXMsXG4gICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgZm9jdXNQb2ludCxcbiAgICAgICAgICBmZWVkSWRzLFxuICAgICAgICAgIFVSTF9QRUxJQVMsXG4gICAgICAgICAgbWluaW1hbFJlZ2V4cCxcbiAgICAgICAgICBnZW9jb2RpbmdMYXllcnMsXG4gICAgICAgICkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0cykge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0hpc3RvcnknKSkge1xuICAgICAgY29uc3QgaGlzdG9yeSA9IGdldE9sZFNlYXJjaGVzKGNvbnRleHQpO1xuICAgICAgY29uc3QgZHJvcExheWVycyA9IFsnYmlrZXN0YXRpb24nXTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5zdG9wTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5yb3V0ZUxheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ubG9jYXRpb25MYXllcnMpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKGZpbHRlck9sZFNlYXJjaGVzKGhpc3RvcnksIGlucHV0LCBkcm9wTGF5ZXJzKSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgdXNlU3RvcHMgPSB0YXJnZXRzLmluY2x1ZGVzKCdTdG9wcycpO1xuICBjb25zdCB1c2VTdGF0aW9ucyA9IHRhcmdldHMuaW5jbHVkZXMoJ1N0YXRpb25zJyk7XG5cbiAgaWYgKGFsbFRhcmdldHMgfHwgdXNlU3RvcHMgfHwgdXNlU3RhdGlvbnMpIHtcbiAgICBpZiAoc291cmNlcy5pbmNsdWRlcygnRmF2b3VyaXRlJykpIHtcbiAgICAgIGNvbnN0IGZhdm91cml0ZVN0b3BzID0gZ2V0RmF2b3VyaXRlU3RvcHMoY29udGV4dCk7XG4gICAgICBsZXQgc3RvcHNBbmRTdGF0aW9ucztcbiAgICAgIGlmIChmYXZvdXJpdGVTdG9wcy5ldmVyeShzdG9wID0+IHN0b3AudHlwZSA9PT0gJ3N0YXRpb24nKSkge1xuICAgICAgICBzdG9wc0FuZFN0YXRpb25zID0gZ2V0U3RvcHNGcm9tR2VvY29kaW5nKFxuICAgICAgICAgIGZhdm91cml0ZVN0b3BzLFxuICAgICAgICAgIFVSTF9QRUxJQVNfUExBQ0UsXG4gICAgICAgICkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0cykge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0b3BzQW5kU3RhdGlvbnMgPSBnZXRTdG9wQW5kU3RhdGlvbnNRdWVyeShmYXZvdXJpdGVTdG9wcylcbiAgICAgICAgICAudGhlbihmYXZvdXJpdGVzID0+XG4gICAgICAgICAgICBnZXRTdG9wc0Zyb21HZW9jb2RpbmcoZmF2b3VyaXRlcywgVVJMX1BFTElBU19QTEFDRSksXG4gICAgICAgICAgKVxuICAgICAgICAgIC50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICAgICAgaWYgKGZpbHRlclJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZmlsdGVyRmF2b3VyaXRlU3RvcHMoc3RvcHNBbmRTdGF0aW9ucywgaW5wdXQsIHVzZVN0b3BzLCB1c2VTdGF0aW9ucyksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdEYXRhc291cmNlJykpIHtcbiAgICAgIGNvbnN0IGdlb2NvZGluZ0xheWVycyA9IFtdO1xuICAgICAgaWYgKHVzZVN0b3BzKSB7XG4gICAgICAgIGdlb2NvZGluZ0xheWVycy5wdXNoKCdzdG9wJyk7XG4gICAgICB9XG4gICAgICBpZiAodXNlU3RhdGlvbnMpIHtcbiAgICAgICAgZ2VvY29kaW5nTGF5ZXJzLnB1c2goJ3N0YXRpb24nKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9XG4gICAgICAgIGdlb2NvZGluZ1NpemUgJiYgZ2VvY29kaW5nU2l6ZSAhPT0gMTAgPyB7IHNpemU6IGdlb2NvZGluZ1NpemUgfSA6IHt9O1xuICAgICAgaWYgKGdlb2NvZGluZ1NlYXJjaFBhcmFtcyAmJiBnZW9jb2RpbmdTZWFyY2hQYXJhbXNbJ2JvdW5kYXJ5LmNvdW50cnknXSkge1xuICAgICAgICBzZWFyY2hQYXJhbXNbJ2JvdW5kYXJ5LmNvdW50cnknXSA9XG4gICAgICAgICAgZ2VvY29kaW5nU2VhcmNoUGFyYW1zWydib3VuZGFyeS5jb3VudHJ5J107XG4gICAgICB9XG4gICAgICAvLyBhIGxpdHRsZSBoYWNrOiB3aGVuIHNlYXJjaGluZyBsb2NhdGlvbiBkYXRhLCBhdXRvbWF0aWNhbGx5IGRlZHVwZSBzdG9wc1xuICAgICAgLy8gdGhpcyBjb3VsZCBiZSBhIG5ldyBleHBsaWNpdCBwcm9wXG4gICAgICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdMb2NhdGlvbnMnKSkge1xuICAgICAgICBzZWFyY2hQYXJhbXMuZGVkdXBlc3RvcHMgPSAxO1xuICAgICAgfVxuICAgICAgY29uc3QgZmVlZHMgPSBmZWVkSURzLm1hcCh2ID0+IGBndGZzJHt2fWApLmpvaW4oJywnKTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0R2VvY29kaW5nUmVzdWx0cyhcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBzZWFyY2hQYXJhbXMsXG4gICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgZm9jdXNQb2ludCxcbiAgICAgICAgICBmZWVkcyxcbiAgICAgICAgICBVUkxfUEVMSUFTLFxuICAgICAgICAgIG1pbmltYWxSZWdleHAsXG4gICAgICAgICAgZ2VvY29kaW5nTGF5ZXJzLFxuICAgICAgICApLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgaWYgKGZpbHRlclJlc3VsdHMpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdIaXN0b3J5JykpIHtcbiAgICAgIGNvbnN0IHN0b3BIaXN0b3J5ID0gZ2V0T2xkU2VhcmNoZXMoY29udGV4dCkuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgICBpZiAoaXRlbS5wcm9wZXJ0aWVzLmdpZCkge1xuICAgICAgICAgIHJldHVybiBpdGVtLnByb3BlcnRpZXMuZ2lkLmluY2x1ZGVzKCdHVEZTOicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBkcm9wTGF5ZXJzID0gWydiaWtlc3RhdGlvbiddO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnJvdXRlTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5sb2NhdGlvbkxheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucGFya2luZ0xheWVycyk7XG4gICAgICBpZiAoIXVzZVN0b3BzKSB7XG4gICAgICAgIGRyb3BMYXllcnMucHVzaCgnc3RvcCcpO1xuICAgICAgfVxuICAgICAgaWYgKCF1c2VTdGF0aW9ucykge1xuICAgICAgICBkcm9wTGF5ZXJzLnB1c2goJ3N0YXRpb24nKTtcbiAgICAgIH1cbiAgICAgIGlmICh0cmFuc3BvcnRNb2RlKSB7XG4gICAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgICBmaWx0ZXJPbGRTZWFyY2hlcyhzdG9wSGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpLnRoZW4ocmVzdWx0ID0+XG4gICAgICAgICAgICBmaWx0ZXJSZXN1bHRzID8gZmlsdGVyUmVzdWx0cyhyZXN1bHQsIG1vZGUpIDogcmVzdWx0LFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgICAgZmlsdGVyT2xkU2VhcmNoZXMoc3RvcEhpc3RvcnksIGlucHV0LCBkcm9wTGF5ZXJzKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnUm91dGVzJykpIHtcbiAgICBpZiAoc291cmNlcy5pbmNsdWRlcygnRmF2b3VyaXRlJykpIHtcbiAgICAgIGNvbnN0IGZhdm91cml0ZVJvdXRlcyA9IGdldEZhdm91cml0ZVJvdXRlcyhjb250ZXh0KTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0RmF2b3VyaXRlUm91dGVzUXVlcnkoZmF2b3VyaXRlUm91dGVzLCBpbnB1dCwgbW9kZSwgcGF0aE9wdHMpLnRoZW4oXG4gICAgICAgICAgcmVzdWx0ID0+XG4gICAgICAgICAgICBmaWx0ZXJSZXN1bHRzID8gZmlsdGVyUmVzdWx0cyhyZXN1bHQsIG1vZGUsICdSb3V0ZXMnKSA6IHJlc3VsdCxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgIGdldFJvdXRlc1F1ZXJ5KGlucHV0LCBmZWVkSURzLCB0cmFuc3BvcnRNb2RlLCBwYXRoT3B0cykudGhlbihyZXN1bHQgPT5cbiAgICAgICAgZmlsdGVyUmVzdWx0cyA/IGZpbHRlclJlc3VsdHMocmVzdWx0LCBtb2RlLCAnUm91dGVzJykgOiByZXN1bHQsXG4gICAgICApLFxuICAgICk7XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnSGlzdG9yeScpKSB7XG4gICAgICBjb25zdCByb3V0ZUhpc3RvcnkgPSBnZXRPbGRTZWFyY2hlcyhjb250ZXh0KTtcbiAgICAgIGNvbnN0IGRyb3BMYXllcnMgPSBbJ2Jpa2VzdGF0aW9uJ107XG4gICAgICBpZiAodHJhbnNwb3J0TW9kZSkge1xuICAgICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucm91dGVMYXllcnMuZmlsdGVyKGkgPT4gIShpID09PSB0cmFuc3BvcnRNb2RlKSkpO1xuICAgICAgfVxuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnN0b3BMYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLmxvY2F0aW9uTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5wYXJraW5nTGF5ZXJzKTtcblxuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBmaWx0ZXJPbGRTZWFyY2hlcyhyb3V0ZUhpc3RvcnksIGlucHV0LCBkcm9wTGF5ZXJzKS50aGVuKHJlc3VsdHMgPT5cbiAgICAgICAgICBmaWx0ZXJSZXN1bHRzID8gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlLCAnUm91dGVzJykgOiByZXN1bHRzLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnVmVoaWNsZVJlbnRhbFN0YXRpb25zJykpIHtcbiAgICBpZiAoc291cmNlcy5pbmNsdWRlcygnRmF2b3VyaXRlJykpIHtcbiAgICAgIGNvbnN0IGZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uID1cbiAgICAgICAgZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zKGNvbnRleHQpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnNRdWVyeShcbiAgICAgICAgICBmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbixcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0RhdGFzb3VyY2UnKSkge1xuICAgICAgY29uc3QgZ2VvY29kaW5nTGF5ZXJzID0gWydiaWtlc3RhdGlvbiddO1xuICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID1cbiAgICAgICAgZ2VvY29kaW5nU2l6ZSAmJiBnZW9jb2RpbmdTaXplICE9PSAxMCA/IHsgc2l6ZTogZ2VvY29kaW5nU2l6ZSB9IDoge307XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGdldEdlb2NvZGluZ1Jlc3VsdHMoXG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgc2VhcmNoUGFyYW1zLFxuICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgIGZvY3VzUG9pbnQsXG4gICAgICAgICAgY2l0eUJpa2VOZXR3b3Jrcy5qb2luKCcsJyksXG4gICAgICAgICAgVVJMX1BFTElBUyxcbiAgICAgICAgICBtaW5pbWFsUmVnZXhwLFxuICAgICAgICAgIGdlb2NvZGluZ0xheWVycyxcbiAgICAgICAgKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXJSZXN1bHRzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlLCAnVmVoaWNsZVJlbnRhbFN0YXRpb25zJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0hpc3RvcnknKSkge1xuICAgICAgY29uc3QgaGlzdG9yeSA9IGdldE9sZFNlYXJjaGVzKGNvbnRleHQpO1xuICAgICAgY29uc3QgZHJvcExheWVycyA9IFsuLi5zdG9wTGF5ZXJzXTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5yb3V0ZUxheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ubG9jYXRpb25MYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnBhcmtpbmdMYXllcnMpO1xuXG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goZmlsdGVyT2xkU2VhcmNoZXMoaGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzZWFyY2hSZXN1bHRzUHJvbWlzZSA9IFByb21pc2UuYWxsKHNlYXJjaENvbXBvbmVudHMpXG4gICAgLnRoZW4oZmxhdHRlbilcbiAgICAudGhlbihyZXN1bHRzID0+IHtcbiAgICAgIHNlYXJjaGVzLnJlc3VsdHMgPSByZXN1bHRzO1xuICAgIH0pXG4gICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICBzZWFyY2hlcy5lcnJvciA9IGVycjtcbiAgICB9KTtcbiAgc2VhcmNoUmVzdWx0c1Byb21pc2UudGhlbigoKSA9PiB7XG4gICAgY2FsbGJhY2soe1xuICAgICAgLi4uc2VhcmNoZXMsXG4gICAgICByZXN1bHRzOiBzb3J0U2VhcmNoUmVzdWx0cyhsaW5lUmVnZXhwLCBzZWFyY2hlcy5yZXN1bHRzLCBpbnB1dCksXG4gICAgfSk7XG4gIH0pO1xufVxuXG5jb25zdCBkZWJvdW5jZWRTZWFyY2ggPSBkZWJvdW5jZShnZXRTZWFyY2hSZXN1bHRzLCAzMDAsIHtcbiAgbGVhZGluZzogdHJ1ZSxcbn0pO1xuXG5leHBvcnQgY29uc3QgZXhlY3V0ZVNlYXJjaCA9IChcbiAgdGFyZ2V0cyxcbiAgc291cmNlcyxcbiAgdHJhbnNwb3J0TW9kZSxcbiAgc2VhcmNoQ29udGV4dCxcbiAgZmlsdGVyUmVzdWx0cyxcbiAgZ2VvY29kaW5nU2l6ZSxcbiAgZGF0YSxcbiAgY2FsbGJhY2ssXG4gIHBhdGhPcHRzLFxuICByZWZQb2ludCxcbikgPT4ge1xuICBjYWxsYmFjayhudWxsKTsgLy8gVGhpcyBtZWFucyAnd2UgYXJlIHNlYXJjaGluZydcbiAgZGVib3VuY2VkU2VhcmNoKFxuICAgIHRhcmdldHMsXG4gICAgc291cmNlcyxcbiAgICB0cmFuc3BvcnRNb2RlLFxuICAgIHNlYXJjaENvbnRleHQsXG4gICAgZmlsdGVyUmVzdWx0cyxcbiAgICBnZW9jb2RpbmdTaXplLFxuICAgIGRhdGEsXG4gICAgY2FsbGJhY2ssXG4gICAgcGF0aE9wdHMsXG4gICAgcmVmUG9pbnQsXG4gICk7XG59O1xuIiwiaW1wb3J0IHVuaXFXaXRoIGZyb20gJ2xvZGFzaC91bmlxV2l0aCc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2gvaXNFcXVhbCc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICdsb2Rhc2gvbWVtb2l6ZSc7XG5pbXBvcnQgZXNjYXBlUmVnRXhwIGZyb20gJ2xvZGFzaC9lc2NhcGVSZWdFeHAnO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdsb2Rhc2gvY2xvbmVEZWVwJztcblxuLyoqXG4gKiBMb2NhdGlvbiBwcm9wZXJ0aWVzLlxuICogQHR5cGVkZWYge0xvY2F0aW9uUHJvcGVydGllc31cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYXllciBTdWdnZXN0aW9uIGxheWVyLlxuICogQHByb3BlcnR5IHtsYXR9IFtudW1iZXJdXG4gKiBAcHJvcGVydHkge2xvbn0gW251bWJlcl1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhZGRyZXNzIEFkZHJlc3MuXG4gKi9cblxuLyoqXG4gKiBSZXR1cm5zIGxvY2FsYWRtaW4gKGNpdHkgbmFtZSkgZm9yIHN1Z2dlc3Rpb25zXG4gKlxuICogQG5hbWUgZ2V0TG9jYWxhZG1pblxuICogQHBhcmFtIHtPYmplY3R9IHN1Z2dlc3Rpb24gc3VnZ2VzdGlvbidzIHByb3BlcnRpZXMgZnJvbSBnZW9jb2Rpbmcgb3IgYSBmYXZvdXJpdGUgc3RvcC9zdGF0aW9uLlxuICogRXhwZWN0cyBsYXN0IHBhcnQgb2YgYW4gYWRkcmVzcyAoYWZ0ZXIgJywnKSB0byBjb250YWluIHRoZSBjaXR5IG5hbWUgb2YgdGhlIHN1Z2dlc3Rpb24gbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7U3RyaW5nfSAgQ2l0eSBuYW1lIG9yIGVtcHR5IHN0cmluZ1xuICovXG5jb25zdCBnZXRMb2NhbGFkbWluID0gc3VnZ2VzdGlvbiA9PlxuICBzdWdnZXN0aW9uLmxvY2FsYWRtaW4gfHxcbiAgc3VnZ2VzdGlvbi5sb2NhbGFkbWluIHx8XG4gIChzdWdnZXN0aW9uLmFkZHJlc3MgJiZcbiAgICBzdWdnZXN0aW9uLmFkZHJlc3MubGFzdEluZGV4T2YoJywnKSA8IHN1Z2dlc3Rpb24uYWRkcmVzcy5sZW5ndGggLSAyICYmXG4gICAgc3VnZ2VzdGlvbi5hZGRyZXNzLnN1YnN0cmluZyhzdWdnZXN0aW9uLmFkZHJlc3MubGFzdEluZGV4T2YoJywnKSArIDIpKSB8fFxuICAnJztcblxuZXhwb3J0IGNvbnN0IGdldFN0b3BDb2RlID0gKHsgaWQsIGNvZGUgfSkgPT4ge1xuICBpZiAoY29kZSkge1xuICAgIHJldHVybiBjb2RlO1xuICB9XG4gIGlmIChcbiAgICBpZCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgdHlwZW9mIGlkLmluZGV4T2YgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgaWQuaW5kZXhPZignIycpID09PSAtMVxuICApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIC8vIGlkIGZyb20gcGVsaWFzXG4gIHJldHVybiBpZC5zdWJzdHJpbmcoaWQuaW5kZXhPZignIycpICsgMSk7XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0RmF2b3VyaXRlUGxhY2VMYWJlbCA9IChuYW1lLCBhZGRyZXNzKSA9PiBbXG4gIG5hbWUgfHwgKGFkZHJlc3MgJiYgYWRkcmVzcy5zcGxpdCgnLCcpWzBdKSxcbiAgdHlwZW9mIGFkZHJlc3MgPT09ICdzdHJpbmcnXG4gICAgPyBhZGRyZXNzLnJlcGxhY2UobmV3IFJlZ0V4cChgJHtlc2NhcGVSZWdFeHAobmFtZSl9KFsgLF18JCkrYCksICcnKVxuICAgIDogJycsXG5dO1xuXG4vKipcbiAqIEZvcm1hdCBzdWdnZXN0aW9uLXBhaXIgW25hbWUsIGFkZHJlc3NdIGJ5IGBzdWdnZXN0aW9uLmxheWVyYC5cbiAqXG4gKiBAbmFtZSBnZXROYW1lTGFiZWxcbiAqIEBwYXJhbSB7TG9jYXRpb25Qcm9wZXJ0aWVzfSBzdWdnZXN0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwbGFpbl1cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXkuPHN0cmluZz59IEZvcm1hdHRlZCBsYWJlbC5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldE5hbWVMYWJlbCA9IG1lbW9pemUoXG4gIChzdWdnZXN0aW9uLCBwbGFpbiA9IGZhbHNlKSA9PiB7XG4gICAgc3dpdGNoIChzdWdnZXN0aW9uLmxheWVyKSB7XG4gICAgICBjYXNlICdjdXJyZW50UG9zaXRpb24nOlxuICAgICAgICByZXR1cm4gW3N1Z2dlc3Rpb24ubGFiZWxJZCwgc3VnZ2VzdGlvbi5hZGRyZXNzXTtcbiAgICAgIGNhc2UgJ3NlbGVjdEZyb21NYXAnOlxuICAgICAgY2FzZSAnb3duTG9jYXRpb25zJzpcbiAgICAgIGNhc2UgJ2JhY2snOlxuICAgICAgICByZXR1cm4gW3N1Z2dlc3Rpb24ubGFiZWxJZF07XG4gICAgICBjYXNlICdmYXZvdXJpdGVQbGFjZSc6XG4gICAgICAgIHJldHVybiBmb3JtYXRGYXZvdXJpdGVQbGFjZUxhYmVsKHN1Z2dlc3Rpb24ubmFtZSwgc3VnZ2VzdGlvbi5hZGRyZXNzKTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uJzpcbiAgICAgIGNhc2UgJ2Jpa2VzdGF0aW9uJzpcbiAgICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uLm5hbWVdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlUm91dGUnOlxuICAgICAgY2FzZSAncm91dGUtQlVTJzpcbiAgICAgIGNhc2UgJ3JvdXRlLVRSQU0nOlxuICAgICAgY2FzZSAncm91dGUtUkFJTCc6XG4gICAgICBjYXNlICdyb3V0ZS1TVUJXQVknOlxuICAgICAgY2FzZSAncm91dGUtRkVSUlknOlxuICAgICAgY2FzZSAncm91dGUtRlVOSUNVTEFSJzpcbiAgICAgIGNhc2UgJ3JvdXRlLUFJUlBMQU5FJzpcbiAgICAgICAgcmV0dXJuICFwbGFpbiAmJiBzdWdnZXN0aW9uLnNob3J0TmFtZVxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmd0ZnNJZCxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5tb2RlLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubG9uZ05hbWUsXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiBbXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uc2hvcnROYW1lLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmxvbmdOYW1lLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmFnZW5jeSA/IHN1Z2dlc3Rpb24uYWdlbmN5Lm5hbWUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBdO1xuICAgICAgY2FzZSAndmVudWUnOlxuICAgICAgY2FzZSAnYWRkcmVzcyc6XG4gICAgICBjYXNlICdzdHJlZXQnOlxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHN1Z2dlc3Rpb24ubmFtZSxcbiAgICAgICAgICBzdWdnZXN0aW9uLmxhYmVsLnJlcGxhY2UoXG4gICAgICAgICAgICBuZXcgUmVnRXhwKGAke2VzY2FwZVJlZ0V4cChzdWdnZXN0aW9uLm5hbWUpfSgsKT8oICk/YCksXG4gICAgICAgICAgICAnJyxcbiAgICAgICAgICApLFxuICAgICAgICBdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlU3RvcCc6XG4gICAgICBjYXNlICdzdG9wJzpcbiAgICAgICAgcmV0dXJuIHBsYWluXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubmFtZSB8fFxuICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubGFiZWwgfHxcbiAgICAgICAgICAgICAgICAoc3VnZ2VzdGlvbi5hZGRyZXNzICYmIHN1Z2dlc3Rpb24uYWRkcmVzcy5zcGxpdCgnLCcpWzBdKSxcbiAgICAgICAgICAgICAgZ2V0TG9jYWxhZG1pbihzdWdnZXN0aW9uKSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmlkLFxuICAgICAgICAgICAgICBnZXRTdG9wQ29kZShzdWdnZXN0aW9uKSxcbiAgICAgICAgICAgICAgZ2V0TG9jYWxhZG1pbihzdWdnZXN0aW9uKSxcbiAgICAgICAgICAgIF07XG4gICAgICBjYXNlICdmYXZvdXJpdGVTdGF0aW9uJzpcbiAgICAgIGNhc2UgJ3N0YXRpb24nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBzdWdnZXN0aW9uLm5hbWUgfHxcbiAgICAgICAgICAgIHN1Z2dlc3Rpb24ubGFiZWwgfHxcbiAgICAgICAgICAgIChzdWdnZXN0aW9uLmFkZHJlc3MgJiYgc3VnZ2VzdGlvbi5hZGRyZXNzLnNwbGl0KCcsJylbMF0pLFxuICAgICAgICAgIGdldExvY2FsYWRtaW4oc3VnZ2VzdGlvbiksXG4gICAgICAgIF07XG4gICAgfVxuICB9LFxuICAoaXRlbSwgcGxhaW4pID0+IHtcbiAgICBjb25zdCBpID0gY2xvbmVEZWVwKGl0ZW0pO1xuICAgIGkucGxhaW4gPSBwbGFpbjtcbiAgICByZXR1cm4gaTtcbiAgfSxcbik7XG5cbi8qKlxuICogQ2hlY2tzIHRoYXQgZmVhdHVyZXMgYXJlIHVuaXF1ZSBieSBsYWJlbFxuICpcbiAqIEBuYW1lIHVuaXFCeUxhYmVsXG4gKiBAcGFyYW0ge0FycmF5fSBmZWF0dXJlcyBBcnJheSBvZiBmZWF0dXJlc1xuICogQHJldHVybnMge0FycmF5fSAgQXJyYXkgb2YgdW5pcXVlIGZlYXR1cmVzXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwudW5pcUJ5TGFiZWwoZmVhdHVyZXMpO1xuICogLy89IEFycmF5KDIpXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVuaXFCeUxhYmVsKGZlYXR1cmVzKSB7XG4gIHJldHVybiB1bmlxV2l0aChmZWF0dXJlcywgKGZlYXQxLCBmZWF0MikgPT4ge1xuICAgIGlmIChmZWF0MS50eXBlID09PSAnRnV0dXJlUm91dGUnIHx8IGZlYXQyLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIGlzRXF1YWwoZ2V0TmFtZUxhYmVsKGZlYXQxLnByb3BlcnRpZXMpLCBnZXROYW1lTGFiZWwoZmVhdDIucHJvcGVydGllcykpICYmXG4gICAgICBmZWF0MS5wcm9wZXJ0aWVzLmxheWVyID09PSBmZWF0Mi5wcm9wZXJ0aWVzLmxheWVyXG4gICAgKTtcbiAgfSk7XG59XG4iLCJjb25zdCB0cmFuc2xhdGlvbnMgPSB7XG4gIGRlOiB7XG4gICAgYWRkcmVzczogJ0FkcmVzc2UnLFxuICAgICdhZGRyZXNzLXBsYWNlLW9yLWJ1c2luZXNzJzogJ0FkcmVzcywgT3J0IG9yIEdlc2Now6RmdCcsXG4gICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0bDvGdlIFp3aXNjaGVuemllbCBoaW56dScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzogJ1NldCBzdG9wIGR1cmF0aW9uIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAnQ2xvc2Ugc3RvcCBkdXJhdGlvbiBzZWxlY3RvciBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAnT3BlbiBzdG9wIGR1cmF0aW9uIHNlbGVjdG9yIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgIGFpcnBsYW5lOiAnRmx1ZycsXG4gICAgYXJyaXZhbDogJ0Fua3VuZnQnLFxuICAgIGJhY2s6ICdadXLDvGNrJyxcbiAgICBiaWtlcmVudGFsc3RhdGlvbjogJ0xlaWhyYWQtU3RhdGlvbicsXG4gICAgYnVzOiAnQnVzJyxcbiAgICBjYW5jZWw6ICdBYmJyZWNoZW4nLFxuICAgICdjbGVhci1idXR0b24tbGFiZWwnOiAnTMO2c2NoZW4nLFxuICAgICdjbGVhci1zZWFyY2gtaGlzdG9yeSc6ICdTdWNoaGlzdG9yaWUgbMO2c2NoZW4nLFxuICAgIGN1cnJlbnRwb3NpdGlvbjogJ0FrdHVlbGxlIFBvc2l0aW9uJyxcbiAgICBkZWxldGU6ICdMw7ZzY2hlbicsXG4gICAgJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJzogJ1dvbGxlbiBTaWUgZGllIFN1Y2gtSGlzdG9yaWUgbMO2c2NoZW4/JyxcbiAgICBkZXBhcnR1cmU6ICdBYmZhaHJ0JyxcbiAgICBkZXN0aW5hdGlvbjogJ1ppZWwnLFxuICAgICdnaXZlLW9yaWdpbic6ICdTdGFydCBlaW5nZWJlbi4nLFxuICAgICdnaXZlLWRlc3RpbmF0aW9uJzogJ1ppZWwgZWluZ2ViZW4uJyxcbiAgICBmYXZvdXJpdGU6ICdGYXZvcml0ZW4nLFxuICAgIGZlcnJ5OiAnRsOkaHJlJyxcbiAgICAnZnV0dXJlLXJvdXRlJzogJ1p1a8O8bmZ0aWdlIFZlcmJpbmR1bmcnLFxuICAgIG9yaWdpbjogJ1N0YXJ0JyxcbiAgICAnb3JpZ2luLXN0b3AtbmVhci15b3UnOiAnU3RhcnQnLFxuICAgIG93bmxvY2F0aW9uczogJ0VpZ2VuZSBGYXZvcml0ZW4nLFxuICAgIGxvYWRpbmc6ICdMYWRlbi4uLicsXG4gICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4nLFxuICAgIHJhaWw6ICdadWcnLFxuICAgIHNlYXJjaDogJ1N1Y2hlJyxcbiAgICAnc2VhcmNoLWFkZHJlc3Mtb3ItcGxhY2UnOiAnU3VjaGUgYW5oYW5kIHZvbiBBZHJlc3NlIG9kZXIgT3J0c2FuZ2FiZScsXG4gICAgJ3NlYXJjaC1idXR0b24tbGFiZWwnOiAnU3VjaGUnLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24nOiAnU3VjaGUgWmllbG9ydCwgTGluaWUgb3IgSGFsdGVzdGVsbGUnLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24taW5kZXgnOiAnWmllbG9ydCBlaW5nZWJlbicsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1yZXN1bHRzLWJ1dC1uby1zZWFyY2gnOlxuICAgICAgJ0VyZ2Vibmlzc2UgaW4g4oCcWmllbG9ydOKAnS1SZWl0ZXIgYW56ZWlnZW4nLFxuICAgICdzZWFyY2gtbm8tcmVzdWx0cyc6ICdLZWluIE9ydCBnZWZ1bmRlbi4nLFxuICAgICdzZWFyY2gtb3JpZ2luJzogJ1N1Y2hlIFN0YXJ0b3J0LCBMaW5pZSBvZGVyIEhhbHRlc3RlbGxlJyxcbiAgICAnc2VhcmNoLW9yaWdpbi1pbmRleCc6ICdTdGFydG9ydCBlaW5nZWJlbicsXG4gICAgJ3NlYXJjaC1wb3NpdGlvbic6ICdTdGFuZG9ydCBlcm1pdHRlbG4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwnOiAnVmVudWUsIHBsYWNlIGFuZCBzdG9wc2VhcmNoLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtZGVza3RvcCc6XG4gICAgICAnTmF2aWdhdGUgbGlzdCB3aXRoIGFycm93IGtleXMgYW5kIHNlbGVjdCB3aXRoIGVudGVyIGtleS4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLW1vYmlsZSc6XG4gICAgICAnRW50ZXIgdGhlIGxvY2F0aW9uIGFuZCBuYXZpZ2F0ZSBpbiB0aGUgbGlzdCBieSBzd2lwaW5nLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb3ZlLXRvLWRlc3RpbmF0aW9uJzpcbiAgICAgICdBZnRlciBzZWxlY3RpbmcgdGhlIHN0YXJ0aW5nIGxvY2F0aW9uIHlvdSBhcmUgYXV0b21hdGljYWxseSBtb3ZlZCB0byB0aGUgZGVzdGluYXRpb24gZmllbGQuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbic6ICdUaGVyZSBpcyB7e2NvdW50fX0gc3VnZ2VzdGlvbiBhdmFpbGFibGUnLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuX3BsdXJhbCc6XG4gICAgICAnVGhlcmUgYXJlIHt7Y291bnR9fSBzdWdnZXN0aW9ucyBhdmFpbGFibGUnLFxuICAgICdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJzogJ0FrdHVlbGxlIEF1c3dhaGw6IHt7c2VsZWN0aW9ufX0nLFxuICAgIHN0cmVldDogJ1N0cmHDn2UnLFxuICAgIHN1YndheTogJ1UtQmFobicsXG4gICAgc3RhdGlvbjogJ1N0YXRpb24nLFxuICAgIHN0b3A6ICdIYWx0ZXN0ZWxsZScsXG4gICAgJ3N0b3AtbmVhci15b3UnOiAnU3VjaGUgSGFsdGVzdGVsbGVuIHVuZCBMaW5pZW4gaW4gZGVyIE7DpGhlJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1idXMnOiAnU3VjaGUgQnVzbGluaWVuIG9yIEhhbHRlc3RlbGxlbicsXG4gICAgJ3N0b3AtbmVhci15b3UtY2l0eWJpa2UnOiAnU3VjaGUgTGVpaHJhZC1TdGF0aW9uZW4nLFxuICAgICdzdG9wLW5lYXIteW91LXJhaWwnOiAnU3VjaGUgWnVndmVyYmluZHVuZ2VuIG9kZXIgQmFobmjDtmZlJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1zdWJ3YXknOiAnU3VjaGUgVS1CYWhuLUxpbmllbiBvZGVyIEhhbHRlc3RlbGxlbicsXG4gICAgJ3N0b3AtbmVhci15b3UtdHJhbSc6ICdTdWNoZSBTdGFkdGJhaG4tSGFsdGVzdGVsbGVuLVN1Y2hlJyxcbiAgICAndG9kYXktYXQnOiAnSGV1dGUgdW0nLFxuICAgICd0b21vcnJvdy1hdCc6ICdNb3JnZW4gdW0nLFxuICAgIHRyYW06ICdTdHJhw59lbmJhaG4nLFxuICAgICd1c2Utb3duLXBvc2l0aW9uJzogJ0JlbnV0emUgYWt0dWVsbGVuIFN0YW5kb3J0JyxcbiAgICAnc2VsZWN0LWZyb20tbWFwJzogJ1fDpGhsZSBQb3NpdGlvbiBhbmhhbmQgS2FydGUnLFxuICAgICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJzogJ0F1cyBlaWdlbmVuIEZhdm9yaXRlbiBhdXN3w6RobGVuJyxcbiAgICB2ZW51ZTogJ1ZlbnVlJyxcbiAgICAndmlhLXBvaW50JzogJ1p3aXNjaGVuemllbCcsXG4gICAgd2hlcmU6ICdXb2hpbj8nLFxuICAgIHBsYWNlOiAnT3J0JyxcbiAgfSxcbiAgZW46IHtcbiAgICBhZGRyZXNzOiAnQWRkcmVzcycsXG4gICAgJ2FkZHJlc3MtcGxhY2Utb3ItYnVzaW5lc3MnOiAnQWRkcmVzcywgcGxhY2Ugb3IgYnVzaW5lc3MnLFxuICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdBZGQgdmlhIHBvaW50JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwnOiAnU2V0IHN0b3AgZHVyYXRpb24gYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICdDbG9zZSBzdG9wIGR1cmF0aW9uIHNlbGVjdG9yIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICdPcGVuIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgYWlycGxhbmU6ICdGbGlnaHQnLFxuICAgIGFycml2YWw6ICdBcnJpdmFsJyxcbiAgICBiYWNrOiAnQmFjaycsXG4gICAgYmlrZXBhcms6ICdQYXJrICYgUmlkZSBmb3IgYmlrZXMnLFxuICAgIGJpa2VyZW50YWxzdGF0aW9uOiAnQmlrZSBzdGF0aW9uJyxcbiAgICBidXM6ICdidXMnLFxuICAgIGNhbmNlbDogJ0NhbmNlbCcsXG4gICAgY2FycGFyazogJ1BhcmsgJiBSaWRlJyxcbiAgICAnY2xlYXItYnV0dG9uLWxhYmVsJzogJ0NsZWFyJyxcbiAgICAnY2xlYXItc2VhcmNoLWhpc3RvcnknOiAnQ2xlYXIgc2VhcmNoIGhpc3RvcnknLFxuICAgIGN1cnJlbnRwb3NpdGlvbjogJ0N1cnJlbnQgcG9zaXRpb24nLFxuICAgIGRlbGV0ZTogJ0RlbGV0ZScsXG4gICAgJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJzogJ0RvIHlvdSB3YW50IHRvIGNsZWFyIHRoZSBzZWFyY2ggaGlzdG9yeT8nLFxuICAgIGRlcGFydHVyZTogJ0RlcGFydHVyZScsXG4gICAgZGVzdGluYXRpb246ICdEZXN0aW5hdGlvbicsXG4gICAgJ2dpdmUtb3JpZ2luJzogJ0VudGVyIHlvdXIgb3JpZ2luLicsXG4gICAgJ2dpdmUtZGVzdGluYXRpb24nOiAnRW50ZXIgeW91ciBkZXN0aW5hdGlvbicsXG4gICAgZmF2b3VyaXRlOiAnRmF2b3VyaXRlJyxcbiAgICBmZXJyeTogJ0ZlcnJ5JyxcbiAgICAnZnV0dXJlLXJvdXRlJzogJ0Z1dHVyZSByb3V0ZScsXG4gICAgb3JpZ2luOiAnU3RhcnQnLFxuICAgICdvcmlnaW4tc3RvcC1uZWFyLXlvdSc6ICdTdGFydCcsXG4gICAgb3dubG9jYXRpb25zOiAnT3duIGxvY2F0aW9ucycsXG4gICAgbG9hZGluZzogJ0xvYWRpbmcuLi4nLFxuICAgICdtaW51dGUtc2hvcnQnOiAnbScsXG4gICAgcGxhdGZvcm06ICdQbGF0Zm9ybScsXG4gICAgcmFpbDogJ1RyYWluJyxcbiAgICByZXF1aXJlZDogJ3JlcXVpcmVkIGZpZWxkJyxcbiAgICBzZWFyY2g6ICdTZWFyY2gnLFxuICAgICdzZWFyY2gtYWRkcmVzcy1vci1wbGFjZSc6ICdTZWFyY2ggYnkgYWRkcmVzcyBvciBwbGFjZSBuYW1lJyxcbiAgICAnc2VhcmNoLWJ1dHRvbi1sYWJlbCc6ICdTZWFyY2gnLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24nOiAnU2VhcmNoIGRlc3RpbmF0aW9uLCByb3V0ZSBvciBzdG9wJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLWluZGV4JzogJ0VudGVyIGRlc3RpbmF0aW9uJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLXJlc3VsdHMtYnV0LW5vLXNlYXJjaCc6XG4gICAgICAnVmlldyByZXN1bHRzIGluIHRoZSBhZGphY2VudCDigJxEZXN0aW5hdGlvbuKAnSB0YWInLFxuICAgICdzZWFyY2gtbm8tcmVzdWx0cyc6ICdObyBsb2NhdGlvbicsXG4gICAgJ3NlYXJjaC1vcmlnaW4nOiAnU2VhcmNoIG9yaWdpbiwgcm91dGUgb3Igc3RvcCcsXG4gICAgJ3NlYXJjaC1vcmlnaW4taW5kZXgnOiAnRW50ZXIgb3JpZ2luJyxcbiAgICAnc2VhcmNoLXBvc2l0aW9uJzogJ0RldGVjdCBsb2NhdGlvbicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbCc6ICdWZW51ZSwgcGxhY2UgYW5kIHN0b3BzZWFyY2guJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1kZXNrdG9wJzpcbiAgICAgICdOYXZpZ2F0ZSBsaXN0IHdpdGggYXJyb3cga2V5cyBhbmQgc2VsZWN0IHdpdGggZW50ZXIga2V5LicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtbW9iaWxlJzpcbiAgICAgICdFbnRlciB0aGUgbG9jYXRpb24gYW5kIG5hdmlnYXRlIGluIHRoZSBsaXN0IGJ5IHN3aXBpbmcuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLW1vdmUtdG8tZGVzdGluYXRpb24nOlxuICAgICAgJ0FmdGVyIHNlbGVjdGluZyB0aGUgc3RhcnRpbmcgbG9jYXRpb24geW91IGFyZSBhdXRvbWF0aWNhbGx5IG1vdmVkIHRvIHRoZSBkZXN0aW5hdGlvbiBmaWVsZC4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuJzogJ1RoZXJlIGlzIHt7Y291bnR9fSBzdWdnZXN0aW9uIGF2YWlsYWJsZScsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW5fcGx1cmFsJzpcbiAgICAgICdUaGVyZSBhcmUge3tjb3VudH19IHN1Z2dlc3Rpb25zIGF2YWlsYWJsZScsXG4gICAgJ3NlYXJjaC1jdXJyZW50LXN1Z2dlc3Rpb24nOiAnQ3VycmVudCBzZWxlY3Rpb246IHt7c2VsZWN0aW9ufX0nLFxuICAgIHN0cmVldDogJ1N0cmVldCcsXG4gICAgc3Vid2F5OiAnTWV0cm8nLFxuICAgIHN0YXRpb246ICdTdGF0aW9uJyxcbiAgICBzdG9wOiAnU3RvcCcsXG4gICAgJ3N0b3AtbmVhci15b3UnOiAnU2VhcmNoIHN0b3BzIGFuZCByb3V0ZXMnLFxuICAgICdzdG9wLW5lYXIteW91LWFpcnBsYW5lJzogJ1NlYXJjaCBmbGlnaHRzIG9yIGFpcnBvcnRzJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1idXMnOiAnU2VhcmNoIGJ1cyByb3V0ZXMgb3Igc3RvcHMnLFxuICAgICdzdG9wLW5lYXIteW91LWNpdHliaWtlJzogJ1NlYXJjaCBjaXR5IGJpa2Ugc3RhdGlvbnMnLFxuICAgICdzdG9wLW5lYXIteW91LXJhaWwnOiAnU2VhcmNoIHRyYWluIHJvdXRlcyBvciBzdGF0aW9ucycsXG4gICAgJ3N0b3AtbmVhci15b3Utc3Vid2F5JzogJ1NlYXJjaCBtZXRybyByb3V0ZXMgb3Igc3RhdGlvbnMgJyxcbiAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ1NlYXJjaCB0cmFtIHJvdXRlcyBvciBzdG9wcycsXG4gICAgJ3N0b3Atcm91dGUtc3RhdGlvbic6ICdCdXMgYW5kIHN0b3Agc2VhcmNoJyxcbiAgICAndG9kYXktYXQnOiAndG9kYXkgYXQnLFxuICAgICd0b21vcnJvdy1hdCc6ICd0b21vcnJvdyBhdCcsXG4gICAgdHJhbTogJ1RyYW0nLFxuICAgIHRyYWNrOiAnVHJhY2snLFxuICAgICd1c2Utb3duLXBvc2l0aW9uJzogJ1VzZSBjdXJyZW50IGxvY2F0aW9uJyxcbiAgICAnc2VsZWN0LWZyb20tbWFwJzogJ1NlbGVjdCBwb3NpdGlvbiBmcm9tIG1hcCcsXG4gICAgJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnOiAnU2VsZWN0IGZyb20gb3duIGxvY2F0aW9ucycsXG4gICAgdmVudWU6ICdWZW51ZScsXG4gICAgJ3ZpYS1wb2ludCc6ICdWaWEgcG9pbnQnLFxuICAgIHdoZXJlOiAnV2hlcmUgdG8/JyxcbiAgICBwbGFjZTogJ0xvY2F0aW9uJyxcbiAgfSxcbiAgZmk6IHtcbiAgICBhZGRyZXNzOiAnT3NvaXRlJyxcbiAgICAnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcyc6ICdPc29pdGUsIHBhaWtrYSB0YWkgeXJpdHlzJyxcbiAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnTGlzw6TDpCB2w6RsaXBpc3RlJyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwnOlxuICAgICAgJ0FzZXRhIHbDpGxpcGlzdGVlbGxlIHt7aW5kZXh9fSBweXPDpGhkeWtzZW4ga2VzdG8nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAnQXZhYSB2w6RsaXBpc3RlZW4ge3tpbmRleH19IHB5c8OkaGR5a3NlbiBrZXN0byB2YWxpdHNpbicsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgJ1N1bGplIHbDpGxpcGlzdGVlbiB7e2luZGV4fX0gcHlzw6RoZHlrc2VuIGtlc3RvIHZhbGl0c2luJyxcbiAgICBhaXJwbGFuZTogJ0xlbnRva29uZScsXG4gICAgYXJyaXZhbDogJ1BlcmlsbMOkJyxcbiAgICBiYWNrOiAnVGFrYWlzaW4nLFxuICAgIHZlaGljbGVyZW50YWxzdGF0aW9uOiAnUHnDtnLDpGFzZW1hJyxcbiAgICBiaWtlcGFyazogJ0xpaXR5bnTDpHB5c8Oka8O2aW50aScsXG4gICAgYnVzOiAnYnVzc2knLFxuICAgIGNhbmNlbDogJ1BlcnV1dGEnLFxuICAgIGNhcnBhcms6ICdMaWl0eW50w6RweXPDpGvDtmludGknLFxuICAgICdjbGVhci1idXR0b24tbGFiZWwnOiAnVHloamVubsOkJyxcbiAgICAnY2xlYXItc2VhcmNoLWhpc3RvcnknOiAnVHloamVubsOkIGhha3VoaXN0b3JpYScsXG4gICAgY3VycmVudHBvc2l0aW9uOiAnVMOkbcOkbmhldGtpbmVuIHNpamFpbnRpJyxcbiAgICBkZWxldGU6ICdQb2lzdGEnLFxuICAgICdkZWxldGUtb2xkLXNlYXJjaGVzLWhlYWRlcic6ICdIYWx1YXRrbyB0eWhqZW50w6TDpCBoYWt1aGlzdG9yaWFuPycsXG4gICAgZGVwYXJ0dXJlOiAnTMOkaHTDtmFpa2EnLFxuICAgIGRlc3RpbmF0aW9uOiAnTcOkw6Ryw6RucMOkw6QnLFxuICAgIGZhdm91cml0ZTogJ1N1b3Npa2tpJyxcbiAgICBmZXJyeTogJ0xhdXR0YScsXG4gICAgJ2Z1dHVyZS1yb3V0ZSc6ICdUdWxldmEgcmVpdHRpJyxcbiAgICAnZ2l2ZS1vcmlnaW4nOiAnTMOkaHTDtnBhaWtrYScsXG4gICAgJ2dpdmUtZGVzdGluYXRpb24nOiAnTcOkw6Ryw6RucMOkw6QnLFxuICAgIG9yaWdpbjogJ0zDpGh0w7ZwYWlra2EnLFxuICAgICdvcmlnaW4tc3RvcC1uZWFyLXlvdSc6ICdMw6RodMO2cGFpa2thJyxcbiAgICBvd25sb2NhdGlvbnM6ICdPbWF0IHBhaWthdCcsXG4gICAgbG9hZGluZzogJ0xhZGF0YWFuLi4uJyxcbiAgICAnbWludXRlLXNob3J0JzogJ21pbicsXG4gICAgcGxhdGZvcm06ICdMYWl0dXJpJyxcbiAgICByYWlsOiAnSnVuYScsXG4gICAgcmVxdWlyZWQ6ICdwYWtvbGxpbmVuIGtlbnR0w6QnLFxuICAgIHNlYXJjaDogJ0V0c2knLFxuICAgICdzZWFyY2gtYWRkcmVzcy1vci1wbGFjZSc6ICdIYWUgb3NvaXR0ZWVsbGEgdGFpIHBhaWthbiBuaW1lbGzDpCcsXG4gICAgJ3NlYXJjaC1idXR0b24tbGFiZWwnOiAnSGFlJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uJzogJ0hhZSBtw6TDpHLDpG5ww6TDpHTDpCwgbGluamFhIHRhaSBweXPDpGtracOkJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLWluZGV4JzogJ1N5w7Z0w6QgbcOkw6Ryw6RucMOkw6QnLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24tcmVzdWx0cy1idXQtbm8tc2VhcmNoJzpcbiAgICAgICdLYXRzbyB0dWxva3NldCB2aWVyZWlzZWx0w6QgTcOkw6Ryw6RucMOkw6QtdsOkbGlsZWhkZWx0w6QnLFxuICAgICdzZWFyY2gtbm8tcmVzdWx0cyc6ICdFaSB0dWxva3NpYScsXG4gICAgJ3NlYXJjaC1vcmlnaW4nOiAnSGFlIGzDpGh0w7ZwYWlra2FhLCBsaW5qYWEgdGFpIHB5c8Oka2tpw6QnLFxuICAgICdzZWFyY2gtb3JpZ2luLWluZGV4JzogJ1N5w7Z0w6QgbMOkaHTDtnBhaWtrYScsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbCc6ICdQYWlra2EsIGxpbmphIGphIHB5c8Oka2tpaGFrdS4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLWRlc2t0b3AnOlxuICAgICAgJ05hdmlnb2kgbGlzdGFzc2EgbnVvbGluw6RwcMOkaW1pbGzDpCBqYSB2YWxpdHNlIGVudGVyaWxsw6QuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1tb2JpbGUnOlxuICAgICAgJ1N5w7Z0w6Qgc2lqYWludGkgamEgbmF2aWdvaSBsaXN0YXNzYSBweXloa8OkaXNlbcOkbGzDpC4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW92ZS10by1kZXN0aW5hdGlvbic6XG4gICAgICAnVmFsaXR0dWFzaSBsw6RodMO2cGFpa2FuIHNpaXJyeXTDpMOkbiBzdW9yYWFuIG3DpMOkcsOkbnDDpMOkLWtlbnR0w6TDpG4uJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbic6ICcgTMO2eWRldHRpaW4ge3tjb3VudH19IGVoZG90dXMnLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuX3BsdXJhbCc6ICcgTMO2eWRldHRpaW4ge3tjb3VudH19IGVoZG90dXN0YScsXG4gICAgJ3NlYXJjaC1jdXJyZW50LXN1Z2dlc3Rpb24nOiAnVMOkbcOkbmhldGtpbmVuIHZhbGludGE6IHt7c2VsZWN0aW9ufX0nLFxuICAgICdzZWFyY2gtcG9zaXRpb24nOiAnUGFpa2FubmEnLFxuICAgIHN0cmVldDogJ0thdHUnLFxuICAgIHN1YndheTogJ01ldHJvJyxcbiAgICBzdGF0aW9uOiAnQXNlbWEnLFxuICAgIHN0b3A6ICdQeXPDpGtraScsXG4gICAgJ3N0b3AtbmVhci15b3UnOiAnTGluamEsIHB5c8Oka2tpIHRhaSBhc2VtYScsXG4gICAgJ3N0b3AtbmVhci15b3UtYWlycGxhbmUnOiAnSGFlIGxlbnRvamEgdGFpIGxlbnRvYXNlbWFhJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1idXMnOiAnSGFlIGJ1c3NpbGluamFhIHRhaSBweXPDpGtracOkJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1jaXR5YmlrZSc6ICdIYWUga2F1cHVua2lwecO2csOkYXNlbWFhJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1yYWlsJzogJ0hhZSBsw6RoaWp1bmFhIHRhaSBhc2VtYWEnLFxuICAgICdzdG9wLW5lYXIteW91LXN1YndheSc6ICdIYWUgbWV0cm9saW5qYWEgdGFpIGFzZW1hYScsXG4gICAgJ3N0b3AtbmVhci15b3UtdHJhbSc6ICdIYWUgcmFpdGlvbGluamFhIHRhaSBweXPDpGtracOkJyxcbiAgICAnc3RvcC1yb3V0ZS1zdGF0aW9uJzogJ0xpbmphLSBqYSBweXPDpGtraWhha3UnLFxuICAgICd0b2RheS1hdCc6ICd0w6Ruw6TDpG4ga2xvJyxcbiAgICAndG9tb3Jyb3ctYXQnOiAnaHVvbWVubmEga2xvJyxcbiAgICB0cmFtOiAnUmFpdGlvdmF1bnUnLFxuICAgIHRyYWNrOiAnUmFpZGUnLFxuICAgICd1c2Utb3duLXBvc2l0aW9uJzogJ0vDpHl0w6QgbnlreWlzdMOkIHNpamFpbnRpYScsXG4gICAgJ3NlbGVjdC1mcm9tLW1hcCc6ICdWYWxpdHNlIHNpamFpbnRpIGthcnRhbHRhJyxcbiAgICAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucyc6ICdWYWxpdHNlIG9taXN0YSBwYWlrb2lzdGEnLFxuICAgIHZlbnVlOiAnUGFpa2thJyxcbiAgICAndmlhLXBvaW50JzogJ1bDpGxpcGlzdGUnLFxuICAgIHdoZXJlOiAnTWlubmUgbWVubsOkw6RuPycsXG4gICAgcGxhY2U6ICdQYWlra2EnLFxuICB9LFxuICBwbDoge1xuICAgIGFkZHJlc3M6ICdBZHJlcycsXG4gICAgJ2FkZHJlc3MtcGxhY2Utb3ItYnVzaW5lc3MnOiAnQWRyZXMsIG1pZWpzY2UgbHViIGZpcm1hJyxcbiAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnRG9kYWogcHVua3QgcG/Fm3JlZG5pJyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwnOlxuICAgICAgJ1d5YmllcnogY3phcyBwb3N0b2p1IGRsYSBwdW5rdHUge3tpbmRleH19JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgJ1phbWtuaWogd3lib3JuaWsgY3phc3UgcG9zdG9qdSB3IHB1bmtjaWUge3tpbmRleH19JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAnT3R3w7NyeiB3eWJvcm5payBjemFzdSBwb3N0b2p1IHcgcHVua2NpZSB7e2luZGV4fX0nLFxuICAgIGFpcnBsYW5lOiAnTG90JyxcbiAgICBhcnJpdmFsOiAnUHJ6eWphemQnLFxuICAgIGJhY2s6ICdXcsOzxIcnLFxuICAgIGJpa2VwYXJrOiAnUGFya3VqIGkgSmVkxbogZGxhIHJvd2Vyw7N3JyxcbiAgICBiaWtlcmVudGFsc3RhdGlvbjogJ1N0YWNqYSByb3dlcm93YScsXG4gICAgYnVzOiAnYXV0b2J1cycsXG4gICAgY2FuY2VsOiAnQW51bHVqJyxcbiAgICBjYXJwYXJrOiAnUGFya3VqIGkgSmVkxbonLFxuICAgICdjbGVhci1idXR0b24tbGFiZWwnOiAnV3ljennFm8SHJyxcbiAgICAnY2xlYXItc2VhcmNoLWhpc3RvcnknOiAnV3ljennFm8SHIGhpc3RvcmnEmSB3eXN6dWtpd2FuaWEnLFxuICAgIGN1cnJlbnRwb3NpdGlvbjogJ09iZWNuZSBwb8WCb8W8ZW5pZScsXG4gICAgZGVsZXRlOiAnVXN1xYQnLFxuICAgICdkZWxldGUtb2xkLXNlYXJjaGVzLWhlYWRlcic6XG4gICAgICAnQ3p5IG5hIHBld25vIGNoY2VzeiB3eWN6ecWbY2nEhyBoaXN0b3JpxJkgd3lzenVraXdhbmlhPycsXG4gICAgZGVwYXJ0dXJlOiAnT2RqYXpkJyxcbiAgICBkZXN0aW5hdGlvbjogJ0NlbCcsXG4gICAgJ2dpdmUtb3JpZ2luJzogJ1dwcm93YWTFuiBzd8OzaiBwdW5rdCBwb2N6xIV0a293eS4nLFxuICAgICdnaXZlLWRlc3RpbmF0aW9uJzogJ1dwcm93YWTFuiBzd8OzaiBjZWwnLFxuICAgIGZhdm91cml0ZTogJ1VsdWJpb25lJyxcbiAgICBmZXJyeTogJ1Byb20nLFxuICAgICdmdXR1cmUtcm91dGUnOiAnUHJ6eXN6xYJhIHRyYXNhJyxcbiAgICBvcmlnaW46ICdQb2N6xIV0ZWsnLFxuICAgICdvcmlnaW4tc3RvcC1uZWFyLXlvdSc6ICdQb2N6xIV0ZWsnLFxuICAgIG93bmxvY2F0aW9uczogJ1fFgmFzbmUgbWllanNjYScsXG4gICAgbG9hZGluZzogJ8WBYWRvd2FuaWXigKYnLFxuICAgICdtaW51dGUtc2hvcnQnOiAnbWluLicsXG4gICAgcGxhdGZvcm06ICdQZXJvbicsXG4gICAgcmFpbDogJ1BvY2nEhWcnLFxuICAgIHJlcXVpcmVkOiAnd3ltYWdhbmUgcG9sZScsXG4gICAgc2VhcmNoOiAnU3p1a2FqJyxcbiAgICAnc2VhcmNoLWFkZHJlc3Mtb3ItcGxhY2UnOiAnU3p1a2FqIHBvIGFkcmVzaWUgbHViIG5hendpZSBtaWVqc2NhJyxcbiAgICAnc2VhcmNoLWJ1dHRvbi1sYWJlbCc6ICdTenVrYWonLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24nOiAnU3p1a2FqIGNlbHUsIHRyYXN5IGx1YiBwcnp5c3Rhbmt1JyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLWluZGV4JzogJ1dwcm93YWTFuiBwdW5rdCBkb2NlbG93eScsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1yZXN1bHRzLWJ1dC1uby1zZWFyY2gnOlxuICAgICAgJ1d5xZt3aWV0bCB3eW5pa2kgdyBzxIVzaWVkbmllaiBrYXJjaWUg4oCeQ2Vs4oCdJyxcbiAgICAnc2VhcmNoLW5vLXJlc3VsdHMnOiAnQnJhayBsb2thbGl6YWNqaScsXG4gICAgJ3NlYXJjaC1vcmlnaW4nOiAnV3lzenVrYWogcG9jesSFdGVrLCBrb25pZWMgbHViIHB1bmt0IHBvxZtyZWRuaScsXG4gICAgJ3NlYXJjaC1vcmlnaW4taW5kZXgnOiAnV3Byb3dhZMW6IHB1bmt0IHBvY3rEhXRrb3d5JyxcbiAgICAnc2VhcmNoLXBvc2l0aW9uJzogJ1d5a3J5aiBsb2thbGl6YWNqxJknLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwnOiAnTWllanNjZSwgbG9rYWxpemFjamEgaSBwcnp5c3RhbmVrLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtZGVza3RvcCc6XG4gICAgICAnTmF3aWd1aiBwbyBsacWbY2llIHXFvHl3YWrEhWMgc3RyemHFgmVrIGkgd3liaWVyYWoga2xhd2lzemVtIEVudGVyLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtbW9iaWxlJzpcbiAgICAgICdXcHJvd2FkxbogbG9rYWxpemFjasSZIGkgbmF3aWd1aiBwbyBsacWbY2llIGdlc3RhbWkgcHJ6ZXN1d2FuaWEuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLW1vdmUtdG8tZGVzdGluYXRpb24nOlxuICAgICAgJ1BvIHd5YnJhbml1IGxva2FsaXphY2ppIHBvY3rEhXRrb3dlaiwgYXV0b21hdHljem5pZSBwcnplamR6aWVzeiBkbyBwb2xhIG1pZWpzY2EgZG9jZWxvd2Vnby4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuJzogJ0Rvc3TEmXBuYSBqZXN0IHt7Y291bnR9fSBwcm9wb3p5Y2phJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbl9mZXcnOiAnRG9zdMSZcG5lIHPEhSB7e2NvdW50fX0gcHJvcG96eWNqZScsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW5fb3RoZXInOiAnRG9zdMSZcG5lIGplc3Qge3tjb3VudH19IHByb3BvenljamknLFxuICAgICdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJzogJ09iZWNueSB3eWLDs3I6IHt7c2VsZWN0aW9ufX0nLFxuICAgIHN0cmVldDogJ1VsaWNhJyxcbiAgICBzdWJ3YXk6ICdNZXRybycsXG4gICAgc3RhdGlvbjogJ1N0YWNqYScsXG4gICAgc3RvcDogJ1ByenlzdGFuZWsnLFxuICAgICdzdG9wLW5lYXIteW91JzogJ1N6dWthaiBwcnp5c3RhbmvDs3cgaSB0cmFzJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1haXJwbGFuZSc6ICdTenVrYWogbG90w7N3IGkgbG90bmlzaycsXG4gICAgJ3N0b3AtbmVhci15b3UtYnVzJzogJ1N6dWthaiB0cmFzIGF1dG9idXNvd3ljaCBpIHByenlzdGFua8OzdycsXG4gICAgJ3N0b3AtbmVhci15b3UtY2l0eWJpa2UnOiAnU3p1a2FqIHN0YWNqaSByb3dlcsOzdyBtaWVqc2tpY2gnLFxuICAgICdzdG9wLW5lYXIteW91LXJhaWwnOiAnU3p1a2FqIHRyYXMga29sZWpvd3ljaCBpIHByenlzdGFua8OzdycsXG4gICAgJ3N0b3AtbmVhci15b3Utc3Vid2F5JzogJ1N6dWthaiB0cmFzIG1ldHJhIGkgcHJ6eXN0YW5rw7N3ICcsXG4gICAgJ3N0b3AtbmVhci15b3UtdHJhbSc6ICdTenVrYWogdHJhcyB0cmFtd2Fqb3d5Y2ggaSBwcnp5c3RhbmvDs3cnLFxuICAgICdzdG9wLXJvdXRlLXN0YXRpb24nOiAnV3lzenVraXdhbmllIGF1dG9idXPDs3cgaSBwcnp5c3RhbmvDs3cnLFxuICAgICd0b2RheS1hdCc6ICdkemnFmyBvJyxcbiAgICAndG9tb3Jyb3ctYXQnOiAnanV0cm8gbycsXG4gICAgdHJhbTogJ1RyYW13YWonLFxuICAgIHRyYWNrOiAnVG9yJyxcbiAgICAndXNlLW93bi1wb3NpdGlvbic6ICdVxbx5aiBvYmVjbmVqIGxva2FsaXphY2ppJyxcbiAgICAnc2VsZWN0LWZyb20tbWFwJzogJ1d5YmllcnogbWllanNjZSBuYSBtYXBpZScsXG4gICAgJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnOiAnV3liaWVyeiB6IHfFgmFzbnljaCBtaWVqc2MnLFxuICAgIHZlbnVlOiAnTWllanNjZScsXG4gICAgJ3ZpYS1wb2ludCc6ICdQcnpleiBwdW5rdCcsXG4gICAgd2hlcmU6ICdEb2vEhWQ/JyxcbiAgICBwbGFjZTogJ01pZWpzY2UnLFxuICB9LFxuICBzdjoge1xuICAgIGFkZHJlc3M6ICdBZHJlc3MnLFxuICAgICdhZGRyZXNzLXBsYWNlLW9yLWJ1c2luZXNzJzogJ0FkcmVzcywgcGxhdHMgZWxsZXIgZsO2cmV0YWcnLFxuICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdMw6RnZyB0aWxsIHZpYXB1bmt0JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwnOlxuICAgICAgJ1N0w6RsbCBpbiB2YXJha3RpZ2hldCBmw7ZyIHZpYXB1bmt0ZW4ge3tpbmRleH19JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgJ1N0w6RuZyB2w6RsamFyZW4gZsO2ciB2YXJha3RpZ2hldCB2aWQgdmlhLXB1bmt0ZW4ge3tpbmRleH19JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAnw5ZwcG5hIHbDpGxqYXJlbiBmw7ZyIHZhcmFrdGlnaGV0IHZpZCB2aWEtcHVua3RlbiB7e2luZGV4fX0nLFxuICAgIGFpcnBsYW5lOiAnRmx5ZycsXG4gICAgYXJyaXZhbDogJ0FubMOkbmRlcicsXG4gICAgYmFjazogJ1RpbGxiYWthJyxcbiAgICBiaWtlcmVudGFsc3RhdGlvbjogJ1N0YWRzY3lrZWxzdGF0aW9uJyxcbiAgICBiaWtlcGFyazogJ0Fuc2x1dG5pbmdzcGFya2VyaW5nIGbDtnIgY3lrbGFyJyxcbiAgICBidXM6ICdCdXNzaScsXG4gICAgY2FuY2VsOiAnQXZicnl0JyxcbiAgICBjYXJwYXJrOiAnSW5mYXJ0c3BhcmtlcmluZycsXG4gICAgJ2NsZWFyLWJ1dHRvbi1sYWJlbCc6ICdUw7ZtJyxcbiAgICAnY2xlYXItc2VhcmNoLWhpc3RvcnknOiAnVMO2bSBzw7ZraGlzdG9yaWtlbicsXG4gICAgY3VycmVudHBvc2l0aW9uOiAnTnV2YXJhbmRlIHBvc2l0aW9uJyxcbiAgICBkZWxldGU6ICdUYSBib3J0JyxcbiAgICAnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInOiAnVmlsbCBkdSB0w7ZtbWEgc8O2a2hpc3RvcmlrZW4/JyxcbiAgICBkZXBhcnR1cmU6ICdBdmfDpW5nc3RpZCcsXG4gICAgZGVzdGluYXRpb246ICdEZXN0aW5hdGlvbicsXG4gICAgZmF2b3VyaXRlOiAnRmF2b3JpdCcsXG4gICAgZmVycnk6ICdGw6RyamEnLFxuICAgICdmdXR1cmUtcm91dGUnOiAnRnJhbXRpZGEgcnV0dCcsXG4gICAgJ2dpdmUtZGVzdGluYXRpb24nOiAnU2tyaXYgaW4gZGluIGRlc3RpbmF0aW9uJyxcbiAgICAnZ2l2ZS1vcmlnaW4nOiAnU2tyaXYgaW4gZGluIGF2ZsOkcmRzcGxhdHMnLFxuICAgIG9yaWdpbjogJ0F2ZsOkcmRzcGxhdHMnLFxuICAgICdvcmlnaW4tc3RvcC1uZWFyLXlvdSc6ICdBdmbDpHJkc3BsYXRzJyxcbiAgICBvd25sb2NhdGlvbnM6ICdFZ25hIHBsYXRzZXInLFxuICAgIGxvYWRpbmc6ICdMYWRkYXIuLi4nLFxuICAgICdtaW51dGUtc2hvcnQnOiAnbWluJyxcbiAgICBwbGF0Zm9ybTogJ1BsYXR0Zm9ybScsXG4gICAgcmFpbDogJ1TDpWcnLFxuICAgIHJlcXVpcmVkOiAnb2JsaWdhdG9yaXNrdCBmw6RsdCcsXG4gICAgc2VhcmNoOiAnU8O2aycsXG4gICAgJ3NlYXJjaC1hZGRyZXNzLW9yLXBsYWNlJzogJ1PDtmsgbWVkIGFkcmVzc2VuIGVsbGVyIHBsYXRzZW5zIG5hbW4nLFxuICAgICdzZWFyY2gtYnV0dG9uLWxhYmVsJzogJ1PDtmsnLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24nOiAnU8O2ayBkZXN0aW5hdGlvbiwgbGluamUgZWxsZXIgaMOlbGxwbGF0cycsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1pbmRleCc6ICdTa3JpdiBkZXN0aW5hdGlvbicsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1yZXN1bHRzLWJ1dC1uby1zZWFyY2gnOlxuICAgICAgJ1NlIHJlc3VsdGF0ZW4gdW5kZXIgZmxpa2VuIERlc3RpbmF0aW9uJyxcbiAgICAnc2VhcmNoLW5vLXJlc3VsdHMnOiAnSW5nYSBzw7ZrcmVzdWx0YXQnLFxuICAgICdzZWFyY2gtb3JpZ2luJzogJ1PDtmsgYXZmw6RyZHNwbGF0cywgbGluamUgZWxsZXIgaMOlbGxwbGF0cycsXG4gICAgJ3NlYXJjaC1vcmlnaW4taW5kZXgnOiAnU2tyaXYgYXZmw6RyZHNwbGF0cycsXG4gICAgJ3NlYXJjaC1wb3NpdGlvbic6ICdTw7ZrIHBvc2l0aW9uJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsJzogJ1BsYXRzLCBsaW5qZSBvY2ggaMOlbGxwbGF0c3PDtmtuaW5nLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtZGVza3RvcCc6XG4gICAgICAnTmF2aWdlcmEgbGlzdGFuIG1lZCBwaWx0YW5nZW50ZXJuYSBvY2ggdsOkbGogbWVkIEVudGVyLXRhbmdldGVuLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtbW9iaWxlJzpcbiAgICAgICdBbmdlIHBsYXRzZW4gb2NoIG5hdmlnZXJhIGkgbGlzdGFuIGdlbm9tIGF0dCBzdmVwYS4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW92ZS10by1kZXN0aW5hdGlvbic6XG4gICAgICAnRWZ0ZXIgYXR0IGR1IHZhbHQgYXZnw6VuZ3NwbGF0c2VuIHRhcyBkdSBkaXJla3QgdGlsbCBEZXN0aW5hdGlvbi1mw6RsdGV0LicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nOiAnSGl0dGFkZSB7e2NvdW50fX0gZsO2cnNsYWcnLFxuICAgICdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJzogJ051dmFyYW5kZSB2YWw6IHt7c2VsZWN0aW9ufX0nLFxuICAgIHN0cmVldDogJ0dhdGEnLFxuICAgIHN1YndheTogJ01ldHJvJyxcbiAgICBzdGF0aW9uOiAnU3RhdGlvbicsXG4gICAgc3RvcDogJ0jDpWxscGxhdHMnLFxuICAgICdzdG9wLW5lYXIteW91JzogJ1PDtmsgaMOlbGxwbGF0c2VyIGVsbGVyIGxpbmplcicsXG4gICAgJ3N0b3AtbmVhci15b3UtYWlycGxhbmUnOiAnU8O2ayBmbHlnIGVsbGVyIGZseWdwbGF0c2VyJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1idXMnOiAnU8O2ayBidXNzbGluamVyIGVsbGVyIGjDpWxscGxhdHNlcicsXG4gICAgJ3N0b3AtbmVhci15b3UtY2l0eWJpa2UnOiAnU8O2ayBzdGFkc2N5a2Vsc3RhdGlvbmVyJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1yYWlsJzogJ1PDtmsgbsOkcnTDpWdlciBlbGxlciBzdGF0aW9uZXInLFxuICAgICdzdG9wLW5lYXIteW91LXN1YndheSc6ICdTw7ZrIG1ldHJvbGluamVyIGVsbGVyIHN0YXRpb25lcicsXG4gICAgJ3N0b3AtbmVhci15b3UtdHJhbSc6ICdTw7ZrIHNww6VydmFnbmxpbmplciBlbGxlciBow6VsbHBsYXRzZXInLFxuICAgICdzdG9wLXJvdXRlLXN0YXRpb24nOiAnQnVzcyBvY2ggc3RvcHAgc8O2a25pbmdlbicsXG4gICAgJ3RvZGF5LWF0JzogJ2kgZGFnIGtsJyxcbiAgICAndG9tb3Jyb3ctYXQnOiAnaSBtb3Jnb24nLFxuICAgIHRyYW06ICdTcMOlcnZhZ24nLFxuICAgIHRyYWNrOiAnU3DDpXInLFxuICAgICd1c2Utb3duLXBvc2l0aW9uJzogJ0FudsOkbmQgbWluIHBvc2l0aW9uJyxcbiAgICAnc2VsZWN0LWZyb20tbWFwJzogJ1bDpGxqIHBvc2l0aW9uIGZyw6VuIGthcnRhbicsXG4gICAgJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnOiAnVsOkbGogZnLDpW4gZWduYSBwbGF0c2VyJyxcbiAgICB2ZW51ZTogJ03DtnRlc3BsYXRzJyxcbiAgICAndmlhLXBvaW50JzogJ1ZpYSBwdW5rdCcsXG4gICAgd2hlcmU6ICdWYXJ0IHZpbGwgZHUgw6VrYT8nLFxuICAgIHBsYWNlOiAnUGxhdHMnLFxuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgdHJhbnNsYXRpb25zO1xuIiwiZnVuY3Rpb24gc3R5bGVJbmplY3QoY3NzLCByZWYpIHtcbiAgaWYgKCByZWYgPT09IHZvaWQgMCApIHJlZiA9IHt9O1xuICB2YXIgaW5zZXJ0QXQgPSByZWYuaW5zZXJ0QXQ7XG5cbiAgaWYgKCFjc3MgfHwgdHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm47IH1cblxuICB2YXIgaGVhZCA9IGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcbiAgdmFyIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgc3R5bGUudHlwZSA9ICd0ZXh0L2Nzcyc7XG5cbiAgaWYgKGluc2VydEF0ID09PSAndG9wJykge1xuICAgIGlmIChoZWFkLmZpcnN0Q2hpbGQpIHtcbiAgICAgIGhlYWQuaW5zZXJ0QmVmb3JlKHN0eWxlLCBoZWFkLmZpcnN0Q2hpbGQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gIH1cblxuICBpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgfSBlbHNlIHtcbiAgICBzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBzdHlsZUluamVjdDtcbiIsImltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUVmZmVjdCwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3RNb2RhbCBmcm9tICdyZWFjdC1tb2RhbCc7XG5pbXBvcnQgY3ggZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgSWNvbiBmcm9tICdAZGlnaXRyYW5zaXQtY29tcG9uZW50L2RpZ2l0cmFuc2l0LWNvbXBvbmVudC1pY29uJztcbmltcG9ydCBEaWFsb2dNb2RhbCBmcm9tICdAZGlnaXRyYW5zaXQtY29tcG9uZW50L2RpZ2l0cmFuc2l0LWNvbXBvbmVudC1kaWFsb2ctbW9kYWwnO1xuaW1wb3J0IEF1dG9zdWdnZXN0IGZyb20gJ3JlYWN0LWF1dG9zdWdnZXN0JztcbmltcG9ydCBtb2JpbGVTdHlsZXMgZnJvbSAnLi9Nb2JpbGVTZWFyY2guc2Nzcyc7XG5pbXBvcnQgbW9iaWxlTm9TY3JvbGxTdHlsZXMgZnJvbSAnLi9Nb2JpbGVOb1Njcm9sbC5zY3NzJztcblxuY2xhc3MgQXV0b3N1Z2dlc3RQYXRjaCBleHRlbmRzIEF1dG9zdWdnZXN0IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgc2VsZi5vblN1Z2dlc3Rpb25Ub3VjaE1vdmUgPSAoKSA9PiB7XG4gICAgICBzZWxmLmp1c3RTZWxlY3RlZFN1Z2dlc3Rpb24gPSBmYWxzZTtcbiAgICAgIHNlbGYucHJlc3NlZFN1Z2dlc3Rpb24gPSBudWxsO1xuICAgIH07XG4gIH1cbn1cblxuY29uc3QgTW9iaWxlU2VhcmNoID0gKHtcbiAgYXBwRWxlbWVudCxcbiAgaWQsXG4gIGNsb3NlSGFuZGxlLFxuICBjbGVhcklucHV0LFxuICB2YWx1ZSxcbiAgc3VnZ2VzdGlvbnMsXG4gIGlucHV0UHJvcHMsXG4gIGZldGNoRnVuY3Rpb24sXG4gIHJlbmRlclN1Z2dlc3Rpb24sXG4gIGdldFN1Z2dlc3Rpb25WYWx1ZSxcbiAgYXJpYUxhYmVsLFxuICBsYWJlbCxcbiAgb25TdWdnZXN0aW9uU2VsZWN0ZWQsXG4gIGNsZWFyT2xkU2VhcmNoZXMsXG4gIGRpYWxvZ0hlYWRlclRleHQsXG4gIGRpYWxvZ1ByaW1hcnlCdXR0b25UZXh0LFxuICBkaWFsb2dTZWNvbmRhcnlCdXR0b25UZXh0LFxuICBjbGVhcklucHV0QnV0dG9uVGV4dCxcbiAgZm9jdXNJbnB1dCxcbiAgY29sb3IsXG4gIGhvdmVyQ29sb3IsXG4gIGFjY2Vzc2libGVQcmltYXJ5Q29sb3IsXG4gIHNlYXJjaE9wZW4sXG4gIGZvbnRXZWlnaHRzLFxuICBzaG93U2Nyb2xsLFxufSkgPT4ge1xuICBjb25zdCBzdHlsZXMgPSBzaG93U2Nyb2xsID8gbW9iaWxlU3R5bGVzIDogbW9iaWxlTm9TY3JvbGxTdHlsZXM7XG5cbiAgY29uc3QgaW5wdXRJZCA9IGAke2lkfS1pbnB1dGA7XG4gIGNvbnN0IGxhYmVsSWQgPSBgJHtpZH0tbGFiZWxgO1xuXG4gIGNvbnN0IFtpc0RpYWxvZ09wZW4sIHNldERpYWxvZ09wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBpbnB1dFJlZiA9IFJlYWN0LnVzZVJlZigpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgUmVhY3RNb2RhbC5zZXRBcHBFbGVtZW50KGFwcEVsZW1lbnQpO1xuICB9LCBbXSk7XG5cbiAgY29uc3Qgb25DbG9zZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjbG9zZUhhbmRsZSgpO1xuICB9KTtcblxuICBjb25zdCBvblNlbGVjdCA9IChlLCByZWYpID0+IHtcbiAgICBpZiAocmVmLnN1Z2dlc3Rpb24udHlwZSA9PT0gJ2NsZWFyLXNlYXJjaC1oaXN0b3J5Jykge1xuICAgICAgc2V0RGlhbG9nT3Blbih0cnVlKTtcbiAgICB9IGVsc2UgaWYgKCFyZWYuc3VnZ2VzdGlvbi5wcm9wZXJ0aWVzLmFycm93Q2xpY2tlZCkge1xuICAgICAgLy8gU2VsZWN0IGl0ZW0gaWYgZmlsbCBpbnB1dCBidXR0b24gaXMgbm90IHByZXNzZWQgKGRpYWdvbmFsIGFycm93IGluIHN1Z2dlc3Rpb24gaXRlbXMpXG4gICAgICBvblN1Z2dlc3Rpb25TZWxlY3RlZChlLCByZWYpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQgPSBldmVudCA9PiB7XG4gICAgY29uc3Qgc3BhY2UgPSBbMTMsICcgJywgJ1NwYWNlYmFyJ107XG4gICAgY29uc3QgZW50ZXIgPSBbMzIsICdFbnRlciddO1xuICAgIGNvbnN0IGtleSA9IChldmVudCAmJiAoZXZlbnQua2V5IHx8IGV2ZW50LndoaWNoIHx8IGV2ZW50LmtleUNvZGUpKSB8fCAnJztcblxuICAgIGlmICgha2V5IHx8ICFzcGFjZS5jb25jYXQoZW50ZXIpLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCBnZXRWYWx1ZSA9IHN1Z2dlc3Rpb24gPT4ge1xuICAgIGlmIChzdWdnZXN0aW9uLnR5cGUgPT09ICdjbGVhci1zZWFyY2gtaGlzdG9yeScpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIGdldFN1Z2dlc3Rpb25WYWx1ZShzdWdnZXN0aW9uKTtcbiAgfTtcblxuICBjb25zdCByZW5kZXJJdGVtID0gaXRlbSA9PiB7XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ2NsZWFyLXNlYXJjaC1oaXN0b3J5Jykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPXtzdHlsZXNbJ2NsZWFyLXNlYXJjaC1oaXN0b3J5J119PlxuICAgICAgICAgIHtpdGVtLmxhYmVsSWR9XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlbmRlclN1Z2dlc3Rpb24oaXRlbSk7XG4gIH07XG5cbiAgY29uc3QgcmVuZGVyRGlhbG9nTW9kYWwgPSAoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxEaWFsb2dNb2RhbFxuICAgICAgICBhcHBFbGVtZW50PXthcHBFbGVtZW50fVxuICAgICAgICBpc01vZGFsT3Blbj17aXNEaWFsb2dPcGVufVxuICAgICAgICBoYW5kbGVDbG9zZT17KCkgPT4gc2V0RGlhbG9nT3BlbihmYWxzZSl9XG4gICAgICAgIGhlYWRlclRleHQ9e2RpYWxvZ0hlYWRlclRleHR9XG4gICAgICAgIHByaW1hcnlCdXR0b25UZXh0PXtkaWFsb2dQcmltYXJ5QnV0dG9uVGV4dH1cbiAgICAgICAgc2Vjb25kYXJ5QnV0dG9uVGV4dD17ZGlhbG9nU2Vjb25kYXJ5QnV0dG9uVGV4dH1cbiAgICAgICAgcHJpbWFyeUJ1dHRvbk9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICBjbGVhck9sZFNlYXJjaGVzKCk7XG4gICAgICAgICAgc2V0RGlhbG9nT3BlbihmYWxzZSk7XG4gICAgICAgIH19XG4gICAgICAgIHNlY29uZGFyeUJ1dHRvbk9uQ2xpY2s9eygpID0+IHNldERpYWxvZ09wZW4oZmFsc2UpfVxuICAgICAgICBjb2xvcj17Y29sb3J9XG4gICAgICAgIGhvdmVyQ29sb3I9e2hvdmVyQ29sb3J9XG4gICAgICAgIGZvbnRXZWlnaHRzPXtmb250V2VpZ2h0c31cbiAgICAgIC8+XG4gICAgKTtcbiAgfTtcblxuICBjb25zdCBjbGVhckJ1dHRvbiA9ICgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ2NsZWFyLWlucHV0J119XG4gICAgICAgIG9uQ2xpY2s9e2NsZWFySW5wdXR9XG4gICAgICAgIG9uS2V5RG93bj17ZSA9PiBpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQoZSkgJiYgY2xlYXJJbnB1dCgpfVxuICAgICAgICBhcmlhLWxhYmVsPXtjbGVhcklucHV0QnV0dG9uVGV4dH1cbiAgICAgID5cbiAgICAgICAgPEljb24gaW1nPVwiY2xvc2VcIiBjb2xvcj17Y29sb3J9IC8+XG4gICAgICA8L2J1dHRvbj5cbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IHJlbmRlckNvbnRlbnQgPSAoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ2NvbWJvYm94LWNvbnRhaW5lciddfSBodG1sRm9yPXtpbnB1dElkfT5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydjb21ib2JveC1pY29uJ119XG4gICAgICAgICAgb25DbGljaz17KCkgPT4gb25DbG9zZSgpfVxuICAgICAgICAgIG9uS2V5RG93bj17ZSA9PiBpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQoZSkgJiYgb25DbG9zZSgpfVxuICAgICAgICAgIGFyaWEtbGFiZWw9e2RpYWxvZ1NlY29uZGFyeUJ1dHRvblRleHR9XG4gICAgICAgICAgdGFiSW5kZXg9ezB9XG4gICAgICAgID5cbiAgICAgICAgICA8SWNvbiBpbWc9XCJhcnJvd1wiIC8+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlc1sncmlnaHQtY29sdW1uJ119PlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzWydjb21ib2JveC1sYWJlbCddfSBpZD17bGFiZWxJZH0+XG4gICAgICAgICAgICB7bGFiZWx9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxBdXRvc3VnZ2VzdFBhdGNoXG4gICAgICAgICAgICBhbHdheXNSZW5kZXJTdWdnZXN0aW9uc1xuICAgICAgICAgICAgaWQ9e2lkfVxuICAgICAgICAgICAgc3VnZ2VzdGlvbnM9e3N1Z2dlc3Rpb25zfVxuICAgICAgICAgICAgb25TdWdnZXN0aW9uc0ZldGNoUmVxdWVzdGVkPXtmZXRjaEZ1bmN0aW9ufVxuICAgICAgICAgICAgZ2V0U3VnZ2VzdGlvblZhbHVlPXtnZXRWYWx1ZX1cbiAgICAgICAgICAgIHJlbmRlclN1Z2dlc3Rpb249e3JlbmRlckl0ZW19XG4gICAgICAgICAgICAvLyBmb2N1c0lucHV0T25TdWdnZXN0aW9uQ2xpY2sgbXVzdCBiZSBzZXQgdG8gdHJ1ZS5cbiAgICAgICAgICAgIC8vIElmIHNldCB0byBmYWxzZSwgaW5wdXQgd29uJ3QgYmUgZm9jdXNlZCB3aGVuIHVzZXIgY2xpY2tzIG9uXG4gICAgICAgICAgICAvLyBGaWxsIGlucHV0IGJ1dHRvbiBpbiBzdWdnZXN0aW9uIGxpc3QuIChkaWFnb25hbCBhcnJvdyBpbiBzdHJlZXQgbmFtZSBpdGVtcylcbiAgICAgICAgICAgIGZvY3VzSW5wdXRPblN1Z2dlc3Rpb25DbGlja1xuICAgICAgICAgICAgc2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnM9eygpID0+IHRydWV9XG4gICAgICAgICAgICBpbnB1dFByb3BzPXt7XG4gICAgICAgICAgICAgIC4uLmlucHV0UHJvcHMsXG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogY3goXG4gICAgICAgICAgICAgICAgYCR7c3R5bGVzLmlucHV0fSAke3N0eWxlc1tpZF0gfHwgJyd9ICR7XG4gICAgICAgICAgICAgICAgICBpbnB1dFByb3BzLnZhbHVlID8gc3R5bGVzLmhhc1ZhbHVlIDogJydcbiAgICAgICAgICAgICAgICB9YCxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgYXV0b0ZvY3VzOiB0cnVlLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHJlbmRlcklucHV0Q29tcG9uZW50PXtwID0+IChcbiAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgYXJpYS1sYWJlbD17YXJpYUxhYmVsfSBpZD17aWR9IHsuLi5wfSAvPlxuICAgICAgICAgICAgICAgIHt2YWx1ZSAmJiBjbGVhckJ1dHRvbigpfVxuICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB0aGVtZT17c3R5bGVzfVxuICAgICAgICAgICAgb25TdWdnZXN0aW9uU2VsZWN0ZWQ9e29uU2VsZWN0fVxuICAgICAgICAgICAgcmVmPXtpbnB1dFJlZn1cbiAgICAgICAgICAvPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9O1xuICAvLyBUaGlzIGRvZXMgbm90IHNlZW0gdG8gZG8gYW55dGhpbmcuXG4gIC8vIFdoZW4gZG9pbmcgcXVpY2sgdGVzdGluZyBvbiB0aGlzIGl0IGxvb2tlZCBsaWtlIGlucHV0UmVmLmN1cnJlbnQgaXMgYWx3YXlzIHVuZGVmaW5lZC5cbiAgaWYgKGZvY3VzSW5wdXQgJiYgaW5wdXRSZWYuY3VycmVudD8uaW5wdXQpIHtcbiAgICBpbnB1dFJlZi5jdXJyZW50LmlucHV0LmZvY3VzKCk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxSZWFjdE1vZGFsXG4gICAgICBpc09wZW49e3NlYXJjaE9wZW59XG4gICAgICBjbGFzc05hbWU9e3N0eWxlc1snbW9iaWxlLW1vZGFsJ119XG4gICAgICBvdmVybGF5Q2xhc3NOYW1lPXtzdHlsZXNbJ21vYmlsZS1tb2RhbC1vdmVybGF5J119XG4gICAgICBvbkFmdGVyQ2xvc2U9e29uQ2xvc2V9XG4gICAgICBzaG91bGRDbG9zZU9uRXNjXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1snbW9iaWxlLW1vZGFsLWNvbnRlbnQnXX1cbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAnLS1jb2xvcic6IGAke2NvbG9yfWAsXG4gICAgICAgICAgJy0tYWNjZXNzaWJsZS1wcmltYXJ5LWNvbG9yJzogYWNjZXNzaWJsZVByaW1hcnlDb2xvcixcbiAgICAgICAgICAnLS1ob3Zlci1jb2xvcic6IGAke2hvdmVyQ29sb3J9YCxcbiAgICAgICAgICAnLS1mb250LXdlaWdodC1tZWRpdW0nOiBmb250V2VpZ2h0cy5tZWRpdW0sXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHtyZW5kZXJDb250ZW50KCl9XG4gICAgICAgIHtyZW5kZXJEaWFsb2dNb2RhbCgpfVxuICAgICAgPC9kaXY+XG4gICAgPC9SZWFjdE1vZGFsPlxuICApO1xufTtcblxuTW9iaWxlU2VhcmNoLnByb3BUeXBlcyA9IHtcbiAgYXBwRWxlbWVudDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBjbG9zZUhhbmRsZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgY2xlYXJJbnB1dDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNsZWFySW5wdXRCdXR0b25UZXh0OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBzdWdnZXN0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9iamVjdCkuaXNSZXF1aXJlZCxcbiAgaW5wdXRQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbkJsdXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICB9KS5pc1JlcXVpcmVkLFxuICBmZXRjaEZ1bmN0aW9uOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBnZXRTdWdnZXN0aW9uVmFsdWU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIHJlbmRlclN1Z2dlc3Rpb246IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uU3VnZ2VzdGlvblNlbGVjdGVkOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBjbGVhck9sZFNlYXJjaGVzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBhcmlhTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGRpYWxvZ0hlYWRlclRleHQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGRpYWxvZ1ByaW1hcnlCdXR0b25UZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICBkaWFsb2dTZWNvbmRhcnlCdXR0b25UZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICBmb2N1c0lucHV0OiBQcm9wVHlwZXMuYm9vbCxcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGhvdmVyQ29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGFjY2Vzc2libGVQcmltYXJ5Q29sb3I6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgc2VhcmNoT3BlbjogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgZm9udFdlaWdodHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgbWVkaXVtOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIH0pLmlzUmVxdWlyZWQsXG4gIHNob3dTY3JvbGw6IFByb3BUeXBlcy5ib29sLFxufTtcblxuTW9iaWxlU2VhcmNoLmRlZmF1bHRQcm9wcyA9IHtcbiAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgYXJpYUxhYmVsOiB1bmRlZmluZWQsXG4gIGRpYWxvZ0hlYWRlclRleHQ6IHVuZGVmaW5lZCxcbiAgZGlhbG9nUHJpbWFyeUJ1dHRvblRleHQ6IHVuZGVmaW5lZCxcbiAgZGlhbG9nU2Vjb25kYXJ5QnV0dG9uVGV4dDogdW5kZWZpbmVkLFxuICBmb2N1c0lucHV0OiBmYWxzZSxcbiAgY29sb3I6IHVuZGVmaW5lZCxcbiAgaG92ZXJDb2xvcjogdW5kZWZpbmVkLFxuICBzaG93U2Nyb2xsOiB1bmRlZmluZWQsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBNb2JpbGVTZWFyY2g7XG4iLCIvKiEgRm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gcGxlYXNlIHNlZSBpbmRleC5qcy5MSUNFTlNFLnR4dCAqL1xuIWZ1bmN0aW9uKGUsdCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwib2JqZWN0XCI9PXR5cGVvZiBtb2R1bGUpbW9kdWxlLmV4cG9ydHM9dChyZXF1aXJlKFwicmVhY3RcIikpO2Vsc2UgaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXCJyZWFjdFwiXSx0KTtlbHNle3ZhciBuPVwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP3QocmVxdWlyZShcInJlYWN0XCIpKTp0KGUucmVhY3QpO2Zvcih2YXIgbyBpbiBuKShcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cz9leHBvcnRzOmUpW29dPW5bb119fShcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOnRoaXMsKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXs4ODg6ZnVuY3Rpb24oZSx0LG4pe3ZhciBvLHI7cj12b2lkIDAhPT1uLmc/bi5nOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnRoaXMsbz1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXtcInVzZSBzdHJpY3RcIjt2YXIgdD17aWdub3JlOlwiW2RhdGEtc2Nyb2xsLWlnbm9yZV1cIixoZWFkZXI6bnVsbCx0b3BPbkVtcHR5SGFzaDohMCxzcGVlZDo1MDAsc3BlZWRBc0R1cmF0aW9uOiExLGR1cmF0aW9uTWF4Om51bGwsZHVyYXRpb25NaW46bnVsbCxjbGlwOiEwLG9mZnNldDowLGVhc2luZzpcImVhc2VJbk91dEN1YmljXCIsY3VzdG9tRWFzaW5nOm51bGwsdXBkYXRlVVJMOiEwLHBvcHN0YXRlOiEwLGVtaXRFdmVudHM6ITB9LG49ZnVuY3Rpb24oKXt2YXIgZT17fTtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChhcmd1bWVudHMsKGZ1bmN0aW9uKHQpe2Zvcih2YXIgbiBpbiB0KXtpZighdC5oYXNPd25Qcm9wZXJ0eShuKSlyZXR1cm47ZVtuXT10W25dfX0pKSxlfSxvPWZ1bmN0aW9uKGUpe1wiI1wiPT09ZS5jaGFyQXQoMCkmJihlPWUuc3Vic3RyKDEpKTtmb3IodmFyIHQsbj1TdHJpbmcoZSksbz1uLmxlbmd0aCxyPS0xLHU9XCJcIixpPW4uY2hhckNvZGVBdCgwKTsrK3I8bzspe2lmKDA9PT0odD1uLmNoYXJDb2RlQXQocikpKXRocm93IG5ldyBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IoXCJJbnZhbGlkIGNoYXJhY3RlcjogdGhlIGlucHV0IGNvbnRhaW5zIFUrMDAwMC5cIik7dSs9dD49MSYmdDw9MzF8fDEyNz09dHx8MD09PXImJnQ+PTQ4JiZ0PD01N3x8MT09PXImJnQ+PTQ4JiZ0PD01NyYmNDU9PT1pP1wiXFxcXFwiK3QudG9TdHJpbmcoMTYpK1wiIFwiOnQ+PTEyOHx8NDU9PT10fHw5NT09PXR8fHQ+PTQ4JiZ0PD01N3x8dD49NjUmJnQ8PTkwfHx0Pj05NyYmdDw9MTIyP24uY2hhckF0KHIpOlwiXFxcXFwiK24uY2hhckF0KHIpfXJldHVyblwiI1wiK3V9LHI9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5tYXgoZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbEhlaWdodCxkb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodCxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQub2Zmc2V0SGVpZ2h0LGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0LGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpfSx1PWZ1bmN0aW9uKHQpe3JldHVybiB0PyhuPXQscGFyc2VJbnQoZS5nZXRDb21wdXRlZFN0eWxlKG4pLmhlaWdodCwxMCkrdC5vZmZzZXRUb3ApOjA7dmFyIG59LGk9ZnVuY3Rpb24odCxuLG8pezA9PT10JiZkb2N1bWVudC5ib2R5LmZvY3VzKCksb3x8KHQuZm9jdXMoKSxkb2N1bWVudC5hY3RpdmVFbGVtZW50IT09dCYmKHQuc2V0QXR0cmlidXRlKFwidGFiaW5kZXhcIixcIi0xXCIpLHQuZm9jdXMoKSx0LnN0eWxlLm91dGxpbmU9XCJub25lXCIpLGUuc2Nyb2xsVG8oMCxuKSl9LHM9ZnVuY3Rpb24odCxuLG8scil7aWYobi5lbWl0RXZlbnRzJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLkN1c3RvbUV2ZW50KXt2YXIgdT1uZXcgQ3VzdG9tRXZlbnQodCx7YnViYmxlczohMCxkZXRhaWw6e2FuY2hvcjpvLHRvZ2dsZTpyfX0pO2RvY3VtZW50LmRpc3BhdGNoRXZlbnQodSl9fTtyZXR1cm4gZnVuY3Rpb24oYyxhKXt2YXIgbCxmLGQsdixwPXtjYW5jZWxTY3JvbGw6ZnVuY3Rpb24oZSl7Y2FuY2VsQW5pbWF0aW9uRnJhbWUodiksdj1udWxsLGV8fHMoXCJzY3JvbGxDYW5jZWxcIixsKX0sYW5pbWF0ZVNjcm9sbDpmdW5jdGlvbihvLGMsYSl7cC5jYW5jZWxTY3JvbGwoKTt2YXIgZj1uKGx8fHQsYXx8e30pLGg9XCJbb2JqZWN0IE51bWJlcl1cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKSxtPWh8fCFvLnRhZ05hbWU/bnVsbDpvO2lmKGh8fG0pe3ZhciB5PWUucGFnZVlPZmZzZXQ7Zi5oZWFkZXImJiFkJiYoZD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGYuaGVhZGVyKSk7dmFyIGIsZyx3LEU9dShkKSxPPWg/bzpmdW5jdGlvbih0LG4sbyx1KXt2YXIgaT0wO2lmKHQub2Zmc2V0UGFyZW50KWRve2krPXQub2Zmc2V0VG9wLHQ9dC5vZmZzZXRQYXJlbnR9d2hpbGUodCk7cmV0dXJuIGk9TWF0aC5tYXgoaS1uLW8sMCksdSYmKGk9TWF0aC5taW4oaSxyKCktZS5pbm5lckhlaWdodCkpLGl9KG0sRSxwYXJzZUludChcImZ1bmN0aW9uXCI9PXR5cGVvZiBmLm9mZnNldD9mLm9mZnNldChvLGMpOmYub2Zmc2V0LDEwKSxmLmNsaXApLFM9Ty15LF89cigpLEk9MCxNPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5zcGVlZEFzRHVyYXRpb24/dC5zcGVlZDpNYXRoLmFicyhlLzFlMyp0LnNwZWVkKTtyZXR1cm4gdC5kdXJhdGlvbk1heCYmbj50LmR1cmF0aW9uTWF4P3QuZHVyYXRpb25NYXg6dC5kdXJhdGlvbk1pbiYmbjx0LmR1cmF0aW9uTWluP3QuZHVyYXRpb25NaW46cGFyc2VJbnQobiwxMCl9KFMsZiksTD1mdW5jdGlvbih0KXtifHwoYj10KSxJKz10LWIsdz15K1MqZnVuY3Rpb24oZSx0KXt2YXIgbjtyZXR1cm5cImVhc2VJblF1YWRcIj09PWUuZWFzaW5nJiYobj10KnQpLFwiZWFzZU91dFF1YWRcIj09PWUuZWFzaW5nJiYobj10KigyLXQpKSxcImVhc2VJbk91dFF1YWRcIj09PWUuZWFzaW5nJiYobj10PC41PzIqdCp0Oig0LTIqdCkqdC0xKSxcImVhc2VJbkN1YmljXCI9PT1lLmVhc2luZyYmKG49dCp0KnQpLFwiZWFzZU91dEN1YmljXCI9PT1lLmVhc2luZyYmKG49LS10KnQqdCsxKSxcImVhc2VJbk91dEN1YmljXCI9PT1lLmVhc2luZyYmKG49dDwuNT80KnQqdCp0Oih0LTEpKigyKnQtMikqKDIqdC0yKSsxKSxcImVhc2VJblF1YXJ0XCI9PT1lLmVhc2luZyYmKG49dCp0KnQqdCksXCJlYXNlT3V0UXVhcnRcIj09PWUuZWFzaW5nJiYobj0xLSAtLXQqdCp0KnQpLFwiZWFzZUluT3V0UXVhcnRcIj09PWUuZWFzaW5nJiYobj10PC41PzgqdCp0KnQqdDoxLTgqLS10KnQqdCp0KSxcImVhc2VJblF1aW50XCI9PT1lLmVhc2luZyYmKG49dCp0KnQqdCp0KSxcImVhc2VPdXRRdWludFwiPT09ZS5lYXNpbmcmJihuPTErLS10KnQqdCp0KnQpLFwiZWFzZUluT3V0UXVpbnRcIj09PWUuZWFzaW5nJiYobj10PC41PzE2KnQqdCp0KnQqdDoxKzE2Ki0tdCp0KnQqdCp0KSxlLmN1c3RvbUVhc2luZyYmKG49ZS5jdXN0b21FYXNpbmcodCkpLG58fHR9KGYsZz0oZz0wPT09TT8wOkkvTSk+MT8xOmcpLGUuc2Nyb2xsVG8oMCxNYXRoLmZsb29yKHcpKSxmdW5jdGlvbih0LG4pe3ZhciByPWUucGFnZVlPZmZzZXQ7aWYodD09bnx8cj09bnx8KHk8biYmZS5pbm5lckhlaWdodCtyKT49XylyZXR1cm4gcC5jYW5jZWxTY3JvbGwoITApLGkobyxuLGgpLHMoXCJzY3JvbGxTdG9wXCIsZixvLGMpLGI9bnVsbCx2PW51bGwsITB9KHcsTyl8fCh2PWUucmVxdWVzdEFuaW1hdGlvbkZyYW1lKEwpLGI9dCl9OzA9PT1lLnBhZ2VZT2Zmc2V0JiZlLnNjcm9sbFRvKDAsMCksZnVuY3Rpb24oZSx0LG4pe3R8fGhpc3RvcnkucHVzaFN0YXRlJiZuLnVwZGF0ZVVSTCYmaGlzdG9yeS5wdXNoU3RhdGUoe3Ntb290aFNjcm9sbDpKU09OLnN0cmluZ2lmeShuKSxhbmNob3I6ZS5pZH0sZG9jdW1lbnQudGl0bGUsZT09PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudD9cIiN0b3BcIjpcIiNcIitlLmlkKX0obyxoLGYpLFwibWF0Y2hNZWRpYVwiaW4gZSYmZS5tYXRjaE1lZGlhKFwiKHByZWZlcnMtcmVkdWNlZC1tb3Rpb24pXCIpLm1hdGNoZXM/aShvLE1hdGguZmxvb3IoTyksITEpOihzKFwic2Nyb2xsU3RhcnRcIixmLG8sYykscC5jYW5jZWxTY3JvbGwoITApLGUucmVxdWVzdEFuaW1hdGlvbkZyYW1lKEwpKX19fSxoPWZ1bmN0aW9uKHQpe2lmKCF0LmRlZmF1bHRQcmV2ZW50ZWQmJiEoMCE9PXQuYnV0dG9ufHx0Lm1ldGFLZXl8fHQuY3RybEtleXx8dC5zaGlmdEtleSkmJlwiY2xvc2VzdFwiaW4gdC50YXJnZXQmJihmPXQudGFyZ2V0LmNsb3Nlc3QoYykpJiZcImFcIj09PWYudGFnTmFtZS50b0xvd2VyQ2FzZSgpJiYhdC50YXJnZXQuY2xvc2VzdChsLmlnbm9yZSkmJmYuaG9zdG5hbWU9PT1lLmxvY2F0aW9uLmhvc3RuYW1lJiZmLnBhdGhuYW1lPT09ZS5sb2NhdGlvbi5wYXRobmFtZSYmLyMvLnRlc3QoZi5ocmVmKSl7dmFyIG4scjt0cnl7bj1vKGRlY29kZVVSSUNvbXBvbmVudChmLmhhc2gpKX1jYXRjaChlKXtuPW8oZi5oYXNoKX1pZihcIiNcIj09PW4pe2lmKCFsLnRvcE9uRW1wdHlIYXNoKXJldHVybjtyPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudH1lbHNlIHI9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihuKTsocj1yfHxcIiN0b3BcIiE9PW4/cjpkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpJiYodC5wcmV2ZW50RGVmYXVsdCgpLGZ1bmN0aW9uKHQpe2lmKGhpc3RvcnkucmVwbGFjZVN0YXRlJiZ0LnVwZGF0ZVVSTCYmIWhpc3Rvcnkuc3RhdGUpe3ZhciBuPWUubG9jYXRpb24uaGFzaDtuPW58fFwiXCIsaGlzdG9yeS5yZXBsYWNlU3RhdGUoe3Ntb290aFNjcm9sbDpKU09OLnN0cmluZ2lmeSh0KSxhbmNob3I6bnx8ZS5wYWdlWU9mZnNldH0sZG9jdW1lbnQudGl0bGUsbnx8ZS5sb2NhdGlvbi5ocmVmKX19KGwpLHAuYW5pbWF0ZVNjcm9sbChyLGYpKX19LG09ZnVuY3Rpb24oZSl7aWYobnVsbCE9PWhpc3Rvcnkuc3RhdGUmJmhpc3Rvcnkuc3RhdGUuc21vb3RoU2Nyb2xsJiZoaXN0b3J5LnN0YXRlLnNtb290aFNjcm9sbD09PUpTT04uc3RyaW5naWZ5KGwpKXt2YXIgdD1oaXN0b3J5LnN0YXRlLmFuY2hvcjtcInN0cmluZ1wiPT10eXBlb2YgdCYmdCYmISh0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IobyhoaXN0b3J5LnN0YXRlLmFuY2hvcikpKXx8cC5hbmltYXRlU2Nyb2xsKHQsbnVsbCx7dXBkYXRlVVJMOiExfSl9fTtyZXR1cm4gcC5kZXN0cm95PWZ1bmN0aW9uKCl7bCYmKGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLGgsITEpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvcHN0YXRlXCIsbSwhMSkscC5jYW5jZWxTY3JvbGwoKSxsPW51bGwsZj1udWxsLGQ9bnVsbCx2PW51bGwpfSxmdW5jdGlvbigpe2lmKCEoXCJxdWVyeVNlbGVjdG9yXCJpbiBkb2N1bWVudCYmXCJhZGRFdmVudExpc3RlbmVyXCJpbiBlJiZcInJlcXVlc3RBbmltYXRpb25GcmFtZVwiaW4gZSYmXCJjbG9zZXN0XCJpbiBlLkVsZW1lbnQucHJvdG90eXBlKSl0aHJvd1wiU21vb3RoIFNjcm9sbDogVGhpcyBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgdGhlIHJlcXVpcmVkIEphdmFTY3JpcHQgbWV0aG9kcyBhbmQgYnJvd3NlciBBUElzLlwiO3AuZGVzdHJveSgpLGw9bih0LGF8fHt9KSxkPWwuaGVhZGVyP2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IobC5oZWFkZXIpOm51bGwsZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsaCwhMSksbC51cGRhdGVVUkwmJmwucG9wc3RhdGUmJmUuYWRkRXZlbnRMaXN0ZW5lcihcInBvcHN0YXRlXCIsbSwhMSl9KCkscH19KHIpfS5hcHBseSh0LFtdKSx2b2lkIDA9PT1vfHwoZS5leHBvcnRzPW8pfSw0MzI6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO3ZhciBvPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixvKXt2b2lkIDA9PT1vJiYobz1uKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxvLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pfTpmdW5jdGlvbihlLHQsbixvKXt2b2lkIDA9PT1vJiYobz1uKSxlW29dPXRbbl19KSxyPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fG8odCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxyKG4oNDcpLHQpLHIobig5MjYpLHQpLHIobigzNDkpLHQpLHIobigxMzcpLHQpLHIobig3MjkpLHQpLHIobigzODMpLHQpLHIobig0NTApLHQpLHIobigzNTgpLHQpLHIobig3NTMpLHQpLHIobig4NjkpLHQpLHIobigzNTIpLHQpLHIobig0NDYpLHQpLHIobigxNjQpLHQpLHIobigzMDUpLHQpLHIobig1MDIpLHQpfSwzNDk6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlQXJyb3dOYXZpZ2F0aW9uPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VBcnJvd05hdmlnYXRpb249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5saXN0SXRlbXMsbj1lLm9uQXJyb3dVcE9yRG93bixyPSgwLG8udXNlU3RhdGUpKDApLHU9clswXSxpPXJbMV0scz0oMCxvLnVzZUNhbGxiYWNrKSgoZnVuY3Rpb24oZSl7aShlKX0pLFt0XSksYz1mdW5jdGlvbihlKXt2YXIgbz1lLmtleTtpZihudWxsPT10P3ZvaWQgMDp0Lmxlbmd0aClpZihcIkFycm93VXBcIj09PW8pbiYmbigpLGUucHJldmVudERlZmF1bHQoKSxzKHU+MD91LTE6dC5sZW5ndGgtMSk7ZWxzZXtpZihcIkFycm93RG93blwiIT09bylyZXR1cm47biYmbigpLGUucHJldmVudERlZmF1bHQoKSx1PHQubGVuZ3RoLTE/cyh1KzEpOnMoMCl9fTtyZXR1cm4oMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLGMpLGZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLGMpfX0pKSwoMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7cygwKX0pLFt0XSkse3NlbGVjdGVkSW5kZXg6dX19fSw0NDY6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlRGVib3VuY2U9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZURlYm91bmNlPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9MzAwKTt2YXIgbj0oMCxvLnVzZVN0YXRlKShlKSxyPW5bMF0sdT1uWzFdO3JldHVybigwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXt2YXIgbj1zZXRUaW1lb3V0KChmdW5jdGlvbigpe3UoZSl9KSx0KTtyZXR1cm4gZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQobil9fSksW2UsdF0pLHJ9fSwxNjQ6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlRWxlbWVudFNpemU9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZUVsZW1lbnRTaXplPWZ1bmN0aW9uKCl7dmFyIGUsdCxuPSgwLG8udXNlUmVmKShudWxsKTtyZXR1cm5bbix7d2lkdGg6bnVsbD09PShlPW51bGw9PW4/dm9pZCAwOm4uY3VycmVudCl8fHZvaWQgMD09PWU/dm9pZCAwOmUuY2xpZW50V2lkdGgsaGVpZ2h0Om51bGw9PT0odD1udWxsPT1uP3ZvaWQgMDpuLmN1cnJlbnQpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmNsaWVudEhlaWdodH1dfSx0LmRlZmF1bHQ9dC51c2VFbGVtZW50U2l6ZX0sMTM3OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUludGVyc2VjdGlvbk9ic2VydmVyPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VJbnRlcnNlY3Rpb25PYnNlcnZlcj1mdW5jdGlvbihlKXt2YXIgdD0oMCxvLnVzZVJlZikobnVsbCksbj0oMCxvLnVzZVN0YXRlKSghMSkscj1uWzBdLHU9blsxXSxpPWZ1bmN0aW9uKGUpe3ZhciB0PWVbMF07dSh0LmlzSW50ZXJzZWN0aW5nKX07cmV0dXJuKDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe2lmKHdpbmRvdyYmd2luZG93LkludGVyc2VjdGlvbk9ic2VydmVyKXt2YXIgbj1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoaSxlKSxvPXQuY3VycmVudDtyZXR1cm4gdC5jdXJyZW50JiZuLm9ic2VydmUodC5jdXJyZW50KSxmdW5jdGlvbigpe28mJm4udW5vYnNlcnZlKG8pfX11KCExKX0pLFt0LGVdKSx7Y29udGFpbmVyUmVmOnQsaXNWaXNpYmxlOnJ9fSx0LmRlZmF1bHQ9dC51c2VJbnRlcnNlY3Rpb25PYnNlcnZlcn0sNzI5OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUlzQnJlYWtwb2ludD12b2lkIDA7dmFyIG89bigxNTYpLHI9big0MzIpLHU9e3hzOjEsbW9iaWxlU21hbGw6MzIwLG1vYmlsZTozNzUsdGFibGV0Ojc2OCx0YWJsZXRMYXJnZTo5MjAsZGVza3RvcFNtYWxsOjEwMjQsZGVza3RvcDoxMjYwLGRlc2t0b3BMYXJnZToxNDQwfTt0LnVzZUlzQnJlYWtwb2ludD1mdW5jdGlvbihlKXt2YXIgdD1cInN0cmluZ1wiPT10eXBlb2YgZT91W2VdOmUsbj0oMCxvLnVzZVN0YXRlKShudWxsKSxpPW5bMF0scz1uWzFdLGM9KDAsby51c2VDYWxsYmFjaykoKGZ1bmN0aW9uKCl7cyh3aW5kb3cuaW5uZXJXaWR0aCl9KSxbXSk7cmV0dXJuKDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe2MoKX0pLFtdKSwoMCxyLnVzZU9uUmVzaXplKShjKSxpPj10fSx0LmRlZmF1bHQ9dC51c2VJc0JyZWFrcG9pbnR9LDQ1MDpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VJc0xvYWRpbmdBZnRlckVycm9yPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VJc0xvYWRpbmdBZnRlckVycm9yPWZ1bmN0aW9uKGUsdCl7dmFyIG49KDAsby51c2VTdGF0ZSkodCkscj1uWzBdLHU9blsxXTtyZXR1cm4oMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7ZXx8dSh0KX0pLFtlLHRdKSxlJiZyfX0sMzA1OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUlzTW9iaWxlPXZvaWQgMDt2YXIgbz1uKDcyOSk7dC51c2VJc01vYmlsZT1mdW5jdGlvbigpe3JldHVybiEoMCxvLnVzZUlzQnJlYWtwb2ludCkoXCJ0YWJsZXRcIil9LHQuZGVmYXVsdD10LnVzZUlzTW9iaWxlfSwzODM6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdD12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdD1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P28udXNlTGF5b3V0RWZmZWN0Om8udXNlRWZmZWN0LHQuZGVmYXVsdD10LnVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3R9LDc1MzpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VPbkxvc2VGb2N1c1dpdGhpbj12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlT25Mb3NlRm9jdXNXaXRoaW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZWYsbj1lLmNhbGxiYWNrLHI9ZS53YXRjaDsoMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oKXt2YXIgZTtpZihyKXJldHVybihudWxsPT09KGU9dC5jdXJyZW50KXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5tYXRjaGVzKFwiOmZvY3VzLXdpdGhpblwiKSk/dm9pZCAwOm4oKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLGUpLGZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLGUpfX0pLFtuLHQscl0pfSx0LmRlZmF1bHQ9dC51c2VPbkxvc2VGb2N1c1dpdGhpbn0sNTAyOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZU9uUmVzaXplPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VPblJlc2l6ZT1mdW5jdGlvbihlKXsoMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24oKXtlKHdpbmRvdy5pbm5lcldpZHRoKX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdCx7cGFzc2l2ZTohMH0pLGZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdCl9fSksW10pfSx0LmRlZmF1bHQ9dC51c2VPblJlc2l6ZX0sMzUyOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZU9uV2luZG93Rm9jdXM9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZU9uV2luZG93Rm9jdXM9ZnVuY3Rpb24oZSl7KDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKCl7ZSYmXCJ2aXNpYmxlXCI9PT1kb2N1bWVudC52aXNpYmlsaXR5U3RhdGUmJmUoKX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwidmlzaWJpbGl0eWNoYW5nZVwiLHQsITEpLGZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwidmlzaWJpbGl0eWNoYW5nZVwiLHQpfX0pLFtlXSl9fSw0NzpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VPdXRzaWRlUmVhY3Rlcj12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlT3V0c2lkZVJlYWN0ZXI9ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKG4pe2UuY3VycmVudCYmIWUuY3VycmVudC5jb250YWlucyhuLnRhcmdldCkmJnQoKX0oMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIixuKSxmdW5jdGlvbigpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIixuKX19KSl9fSw4Njk6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlUnVuQWZ0ZXJVcGRhdGU9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZVJ1bkFmdGVyVXBkYXRlPWZ1bmN0aW9uKCl7dmFyIGU9KDAsby51c2VSZWYpKG51bGwpO3JldHVybigwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtlLmN1cnJlbnQmJihlLmN1cnJlbnQoKSxlLmN1cnJlbnQ9bnVsbCl9KSksZnVuY3Rpb24odCl7ZS5jdXJyZW50PXR9fSx0LmRlZmF1bHQ9dC51c2VSdW5BZnRlclVwZGF0ZX0sOTI2OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZVNjcm9sbExvY2s9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZVNjcm9sbExvY2s9ZnVuY3Rpb24oKXtyZXR1cm57bG9jazooMCxvLnVzZUNhbGxiYWNrKSgoZnVuY3Rpb24oKXt2YXIgZT13aW5kb3cuc2Nyb2xsWStcInB4XCIsdD1kb2N1bWVudC5ib2R5O3Quc3R5bGUucG9zaXRpb249XCJmaXhlZFwiLHQuc3R5bGUudG9wPVwiLVwiK2V9KSxbXSksdW5sb2NrOigwLG8udXNlQ2FsbGJhY2spKChmdW5jdGlvbigpe3ZhciBlPWRvY3VtZW50LmJvZHksdD1lLnN0eWxlLnRvcCxuPS0xKnBhcnNlSW50KHR8fFwiMFwiKTtlLnN0eWxlLnBvc2l0aW9uPVwiXCIsZS5zdHlsZS50b3A9XCJcIixuJiZ3aW5kb3cuc2Nyb2xsVG8oMCwtMSpwYXJzZUludCh0fHxcIjBcIikpfSksW10pfX19LDM1ODpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VTbW9vdGhTY3JvbGw9dm9pZCAwO3ZhciByPW4oMTU2KSx1PW8obig4ODgpKTt0LnVzZVNtb290aFNjcm9sbD1mdW5jdGlvbihlKXt2YXIgdD0oMCxyLnVzZVJlZikobnVsbCksbj1lLnJlZixvPWUub2Zmc2V0LGk9dm9pZCAwPT09bz8wOm8scz1lLnNwZWVkLGM9dm9pZCAwPT09cz81MDA6cztyZXR1cm4oMCxyLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7dC5jdXJyZW50PW5ldyB1LmRlZmF1bHQobnVsbCx7c3BlZWQ6YyxzcGVlZEFzRHVyYXRpb246ITB9KX0pLFtdKSwoMCxyLnVzZUNhbGxiYWNrKSgoZnVuY3Rpb24oKXtuJiZ0LmN1cnJlbnQmJnQuY3VycmVudC5hbmltYXRlU2Nyb2xsKG4uY3VycmVudCxudWxsLHtvZmZzZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaX0sdXBkYXRlVVJMOiExfSl9KSxbaSxuXSl9fSwxNTY6ZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7dC5leHBvcnRzPWV9fSxuPXt9O2Z1bmN0aW9uIG8oZSl7dmFyIHI9bltlXTtpZih2b2lkIDAhPT1yKXJldHVybiByLmV4cG9ydHM7dmFyIHU9bltlXT17ZXhwb3J0czp7fX07cmV0dXJuIHRbZV0uY2FsbCh1LmV4cG9ydHMsdSx1LmV4cG9ydHMsbyksdS5leHBvcnRzfXJldHVybiBvLmc9ZnVuY3Rpb24oKXtpZihcIm9iamVjdFwiPT10eXBlb2YgZ2xvYmFsVGhpcylyZXR1cm4gZ2xvYmFsVGhpczt0cnl7cmV0dXJuIHRoaXN8fG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCl9Y2F0Y2goZSl7aWYoXCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdylyZXR1cm4gd2luZG93fX0oKSxvKDQzMil9KCl9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGkxOG5leHQgZnJvbSAnaTE4bmV4dCc7XG5pbXBvcnQgY3ggZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgQXV0b3N1Z2dlc3QgZnJvbSAncmVhY3QtYXV0b3N1Z2dlc3QnO1xuaW1wb3J0IHsgZXhlY3V0ZVNlYXJjaCB9IGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1leGVjdXRlLXNlYXJjaC1pbW1pZGlhdGUnO1xuaW1wb3J0IFN1Z2dlc3Rpb25JdGVtIGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LXN1Z2dlc3Rpb24taXRlbSc7XG5pbXBvcnQge1xuICBnZXROYW1lTGFiZWwsXG4gIGdldFN0b3BDb2RlLFxufSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtdW5pcS1ieS1sYWJlbCc7XG5pbXBvcnQgeyBnZXRTdG9wTmFtZSB9IGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1oZWxwZXJzJztcbmltcG9ydCBnZXRMYWJlbCBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWxhYmVsJztcbmltcG9ydCBJY29uIGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LWljb24nO1xuaW1wb3J0IHsgRGF0ZVRpbWUsIFNldHRpbmdzIH0gZnJvbSAnbHV4b24nO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoL2lzRXF1YWwnO1xuaW1wb3J0IGlzRW1wdHkgZnJvbSAnbG9kYXNoL2lzRW1wdHknO1xuaW1wb3J0IHRyYW5zbGF0aW9ucyBmcm9tICcuL2hlbHBlcnMvdHJhbnNsYXRpb25zJztcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9oZWxwZXJzL3N0eWxlcy5zY3NzJztcbmltcG9ydCBNb2JpbGVTZWFyY2ggZnJvbSAnLi9oZWxwZXJzL01vYmlsZVNlYXJjaCc7XG5pbXBvcnQgd2l0aFNjcm9sbExvY2sgZnJvbSAnLi9oZWxwZXJzL3dpdGhTY3JvbGxMb2NrJztcblxuU2V0dGluZ3MuZGVmYXVsdExvY2FsZSA9ICdlbic7XG5cbmkxOG5leHQuaW5pdCh7XG4gIGZhbGxiYWNrTG5nOiAnZmknLFxuICBkZWZhdWx0TlM6ICd0cmFuc2xhdGlvbicsXG4gIGludGVycG9sYXRpb246IHtcbiAgICBlc2NhcGVWYWx1ZTogZmFsc2UsIC8vIG5vdCBuZWVkZWQgZm9yIHJlYWN0IGFzIGl0IGVzY2FwZXMgYnkgZGVmYXVsdFxuICB9LFxufSk7XG5cbmNvbnN0IExvYWRpbmcgPSBwcm9wcyA9PiAoXG4gIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ3NwaW5uZXItbG9hZGVyJ119PlxuICAgIHsocHJvcHMgJiYgcHJvcHMuY2hpbGRyZW4pIHx8IChcbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzWydzci1vbmx5J119PntpMThuZXh0LnQoJ2xvYWRpbmcnKX08L3NwYW4+XG4gICAgKX1cbiAgPC9kaXY+XG4pO1xuXG5Mb2FkaW5nLnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxufTtcblxuTG9hZGluZy5kZWZhdWx0UHJvcHMgPSB7XG4gIGNoaWxkcmVuOiB1bmRlZmluZWQsXG59O1xuXG5jb25zdCBnZXRQbGF0Zm9ybSA9IGFkZGVuZHVtID0+IHtcbiAgaWYgKCFhZGRlbmR1bSB8fCAhYWRkZW5kdW0uR1RGUy5wbGF0Zm9ybSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgeyBtb2RlcywgcGxhdGZvcm0gfSA9IGFkZGVuZHVtLkdURlM7XG4gIGNvbnN0IHR5cGUgPVxuICAgIG1vZGVzICYmIG1vZGVzWzBdID09PSAnUkFJTCcgPyBpMThuZXh0LnQoJ3RyYWNrJykgOiBpMThuZXh0LnQoJ3BsYXRmb3JtJyk7XG4gIHJldHVybiBbdHlwZSwgcGxhdGZvcm1dO1xufTtcblxuZnVuY3Rpb24gZ2V0U3VnZ2VzdGlvbkNvbnRlbnQoaXRlbSkge1xuICBpZiAoaXRlbS50eXBlICE9PSAnRnV0dXJlUm91dGUnKSB7XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ1NlbGVjdEZyb21NYXAnKSB7XG4gICAgICByZXR1cm4gWycnLCBpMThuZXh0LnQoJ3NlbGVjdC1mcm9tLW1hcCcpXTtcbiAgICB9XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ0N1cnJlbnRMb2NhdGlvbicpIHtcbiAgICAgIHJldHVybiBbJycsIGkxOG5leHQudCgndXNlLW93bi1wb3NpdGlvbicpXTtcbiAgICB9XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnKSB7XG4gICAgICByZXR1cm4gWycnLCBpMThuZXh0LnQoJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnKV07XG4gICAgfVxuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3QgKi9cbiAgICBsZXQgW25hbWUsIGxhYmVsXSA9IGdldE5hbWVMYWJlbChpdGVtLnByb3BlcnRpZXMsIHRydWUpO1xuICAgIGxldCBzdWdnZXN0aW9uVHlwZTtcbiAgICBpZiAoXG4gICAgICBpdGVtLnByb3BlcnRpZXMubGF5ZXIudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnYmlrZXJlbnRhbCcpIHx8XG4gICAgICBpdGVtLnByb3BlcnRpZXMubGF5ZXIudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnYmlrZXN0YXRpb24nKVxuICAgICkge1xuICAgICAgc3VnZ2VzdGlvblR5cGUgPSBpMThuZXh0LnQoJ3ZlaGljbGVyZW50YWxzdGF0aW9uJyk7XG4gICAgICBjb25zdCBzdG9wQ29kZSA9IGl0ZW0ucHJvcGVydGllcy5sYWJlbElkO1xuICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uVHlwZSwgbmFtZSwgdW5kZWZpbmVkLCBzdG9wQ29kZV07XG4gICAgfVxuXG4gICAgaWYgKGl0ZW0ucHJvcGVydGllcy5sYXllciA9PT0gJ2Jpa2VwYXJrJykge1xuICAgICAgc3VnZ2VzdGlvblR5cGUgPSBpMThuZXh0LnQoJ2Jpa2VwYXJrJyk7XG4gICAgICByZXR1cm4gW3N1Z2dlc3Rpb25UeXBlLCBuYW1lLCB1bmRlZmluZWQsIHVuZGVmaW5lZF07XG4gICAgfVxuXG4gICAgaWYgKGl0ZW0ucHJvcGVydGllcy5sYXllciA9PT0gJ2NhcnBhcmsnKSB7XG4gICAgICBzdWdnZXN0aW9uVHlwZSA9IGkxOG5leHQudCgnY2FycGFyaycpO1xuICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uVHlwZSwgbmFtZSwgdW5kZWZpbmVkLCB1bmRlZmluZWRdO1xuICAgIH1cblxuICAgIGlmIChpdGVtLnByb3BlcnRpZXMubW9kZSkge1xuICAgICAgc3VnZ2VzdGlvblR5cGUgPSBpMThuZXh0LnQoXG4gICAgICAgIGl0ZW0ucHJvcGVydGllcy5tb2RlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnZmF2b3VyaXRlJywgJycpLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbGF5ZXIgPSBpdGVtLnByb3BlcnRpZXMubGF5ZXJcbiAgICAgICAgLnJlcGxhY2UoJ3JvdXRlLScsICcnKVxuICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAucmVwbGFjZSgnZmF2b3VyaXRlJywgJycpO1xuICAgICAgc3VnZ2VzdGlvblR5cGUgPSBpMThuZXh0LnQobGF5ZXIpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGl0ZW0ucHJvcGVydGllcy5pZCAmJlxuICAgICAgKGl0ZW0ucHJvcGVydGllcy5sYXllciA9PT0gJ3N0b3AnIHx8IGl0ZW0ucHJvcGVydGllcy5sYXllciA9PT0gJ3N0YXRpb24nKVxuICAgICkge1xuICAgICAgY29uc3Qgc3RvcENvZGUgPSBnZXRTdG9wQ29kZShpdGVtLnByb3BlcnRpZXMpO1xuICAgICAgY29uc3QgbW9kZSA9IGl0ZW0ucHJvcGVydGllcy5hZGRlbmR1bT8uR1RGUy5tb2RlcztcbiAgICAgIGNvbnN0IHBsYXRmb3JtID0gZ2V0UGxhdGZvcm0oaXRlbS5wcm9wZXJ0aWVzLmFkZGVuZHVtKTtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHN1Z2dlc3Rpb25UeXBlLFxuICAgICAgICBnZXRTdG9wTmFtZShuYW1lLCBzdG9wQ29kZSksXG4gICAgICAgIGxhYmVsLFxuICAgICAgICBzdG9wQ29kZSxcbiAgICAgICAgbW9kZSxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICBdO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdmYXZvdXJpdGVTdG9wJyB8fFxuICAgICAgaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnZmF2b3VyaXRlU3RhdGlvbidcbiAgICApIHtcbiAgICAgIGNvbnN0IHsgYWRkcmVzcywgY29kZSB9ID0gaXRlbS5wcm9wZXJ0aWVzO1xuICAgICAgY29uc3Qgc3RvTmFtZSA9IGFkZHJlc3MgPyBnZXRTdG9wTmFtZShhZGRyZXNzLnNwbGl0KCcsJylbMF0sIGNvZGUpIDogbmFtZTtcbiAgICAgIGNvbnN0IHBsYXRmb3JtID0gZ2V0UGxhdGZvcm0oaXRlbS5wcm9wZXJ0aWVzLmFkZGVuZHVtKTtcbiAgICAgIHJldHVybiBbc3VnZ2VzdGlvblR5cGUsIHN0b05hbWUsIGxhYmVsLCBjb2RlLCB1bmRlZmluZWQsIHBsYXRmb3JtXTtcbiAgICB9XG4gICAgcmV0dXJuIFtzdWdnZXN0aW9uVHlwZSwgbmFtZSwgbGFiZWxdO1xuICB9XG4gIGNvbnN0IHsgb3JpZ2luLCBkZXN0aW5hdGlvbiB9ID0gaXRlbS5wcm9wZXJ0aWVzO1xuICBjb25zdCB0YWlsMSA9IG9yaWdpbi5sb2NhbGl0eSA/IGAsICR7b3JpZ2luLmxvY2FsaXR5fSBmb29iYXJgIDogJyc7XG4gIGNvbnN0IHRhaWwyID0gZGVzdGluYXRpb24ubG9jYWxpdHkgPyBgLCAke2Rlc3RpbmF0aW9uLmxvY2FsaXR5fWAgOiAnJztcbiAgY29uc3QgbmFtZTEgPSBvcmlnaW4ubmFtZTtcbiAgY29uc3QgbmFtZTIgPSBkZXN0aW5hdGlvbi5uYW1lO1xuICByZXR1cm4gW1xuICAgIGkxOG5leHQudCgnZnV0dXJlLXJvdXRlJyksXG4gICAgYCR7aTE4bmV4dC50KCdvcmlnaW4nKX0gJHtuYW1lMX0ke3RhaWwxfSAke2kxOG5leHQudChcbiAgICAgICdkZXN0aW5hdGlvbicsXG4gICAgKX0gJHtuYW1lMn0ke3RhaWwyfWAsXG4gICAgaXRlbS50cmFuc2xhdGVkVGV4dCxcbiAgXTtcbn1cblxuZnVuY3Rpb24gdHJhbnNsYXRlRnV0dXJlUm91dGVTdWdnZXN0aW9uVGltZShpdGVtKSB7XG4gIGNvbnN0IHRpbWUgPSBEYXRlVGltZS5mcm9tU2Vjb25kcyhOdW1iZXIoaXRlbS5wcm9wZXJ0aWVzLnRpbWUpKTtcbiAgY29uc3Qgbm93ID0gRGF0ZVRpbWUubm93KCk7XG4gIGxldCBzdHIgPSBpdGVtLnByb3BlcnRpZXMuYXJyaXZlQnlcbiAgICA/IGkxOG5leHQudCgnYXJyaXZhbCcpXG4gICAgOiBpMThuZXh0LnQoJ2RlcGFydHVyZScpO1xuICBpZiAodGltZS5oYXNTYW1lKG5vdywgJ2RheScpKSB7XG4gICAgc3RyID0gYCR7c3RyfSAke2kxOG5leHQudCgndG9kYXktYXQnKX1gO1xuICB9IGVsc2UgaWYgKHRpbWUuaGFzU2FtZShub3cucGx1cyh7IGRheXM6IDEgfSksICdkYXknKSkge1xuICAgIHN0ciA9IGAke3N0cn0gJHtpMThuZXh0LnQoJ3RvbW9ycm93LWF0Jyl9YDtcbiAgfSBlbHNlIHtcbiAgICBzdHIgPSBgJHtzdHJ9ICR7dGltZS50b0Zvcm1hdCgnY2NjIGQuTC4nKX1gO1xuICB9XG4gIHN0ciA9IGAke3N0cn0gJHt0aW1lLnRvRm9ybWF0KCdISDptbScpfWA7XG4gIHJldHVybiBzdHI7XG59XG5cbmNvbnN0IGdldFN1Z2dlc3Rpb25WYWx1ZSA9IHN1Z2dlc3Rpb24gPT4ge1xuICBpZiAoXG4gICAgc3VnZ2VzdGlvbi50eXBlID09PSAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycgfHxcbiAgICBzdWdnZXN0aW9uLnR5cGUgPT09ICdiYWNrJ1xuICApIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIGdldExhYmVsKHN1Z2dlc3Rpb24ucHJvcGVydGllcyk7XG59O1xuLyoqXG4gKiBAZXhhbXBsZVxuICogY29uc3Qgc2VhcmNoQ29udGV4dCA9IHtcbiAqICAgaXNQZWxpYXNMb2NhdGlvbkF3YXJlOiBmYWxzZSAvLyB0cnVlIC8gZmFsc2UgZG9lcyBMZXQgUGVsaWFzIHN1Z2dlc3QgYmFzZWQgb24gY3VycmVudCB1c2VyIGxvY2F0aW9uXG4gKiAgIG1pbmltYWxSZWdleHA6IHVuZGVmaW5lZCAvLyB1c2VkIGZvciB0ZXN0aW5nIG1pbi4gcmVnZXhwLiBGb3IgZXhhbXBsZTogbmV3IFJlZ0V4cCgnLnsyLH0nKSxcbiAqICAgbGluZVJlZ2V4cDogdW5kZWZpbmVkIC8vICBpZGVudGlmeSBzZWFyY2hlcyBmb3Igcm91dGUgbnVtYmVycy9sYWJlbHM6IGJ1cyB8IHRyYWluIHwgbWV0cm8uIEZvciBleGFtcGxlOiBuZXcgUmVnRXhwKFxuICogICAgLy8gICAnKF5bMC05XStbYS16XT8kfF5beXVsZWFwaW5rcnRkel0kfChebVsxMl0/Yj8kKSknLFxuICogICAgLy8gICdpJyxcbiAqICAgIC8vICApLFxuICogICBVUkxfUEVMSUFTOiAnJyAvLyB1cmwgZm9yIHBlbGlhcyBzZWFyY2hlc1xuICogICBmZWVkSURzOiBbJ0hTTCcsICdIU0xMYXV0dGEnXSAvLyBGZWVkSWQncyBsaWtlICBbSFNMLCBIU0xMYXV0dGFdXG4gKiAgIGdlb2NvZGluZ1NvdXJjZXM6IFsnb2EnLCdvc20nLCdubHNmaSddICAvLyBzb3VyY2VzIGZvciBnZW9jb2RpbmdcbiAqICAgZ2VvY29kaW5nU2VhcmNoUGFyYW1zOyB7fSAgLy8gU2VhcmNocGFybWFzIGZybyBnZW9jb2RpbmdcbiAqICAgZ2V0RmF2b3VyaXRlTG9jYXRpb25zOiAoKSA9PiAoe30pLCAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgYXJyYXkgb2YgZmF2b3VyaXRlIGxvY2F0aW9ucy5cbiAqICAgZ2V0RmF2b3VyaXRlU3RvcHM6ICgpID0+ICh7fSksICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgYXJyYXkgb2YgZmF2b3VyaXRlIHN0b3BzLlxuICogICBnZXRMYW5ndWFnZTogKCkgPT4gKHt9KSwgICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBjdXJyZW50IGxhbmd1YWdlLlxuICogICBnZXRGYXZvdXJpdGVSb3V0ZXM6ICgpID0+ICh7fSksICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhcnJheSBvZiBmYXZvdXJpdGUgcm91dGVzLlxuICogICBnZXRQb3NpdGlvbnM6ICgpID0+ICh7fSksICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyB1c2VyJ3MgZ2VvbG9jYXRpb24uXG4gKiAgIGdldFJvdXRlc1F1ZXJ5OiAoKSA9PiAoe30pLCAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHF1ZXJ5IGZvciBmZXRjaGluZyByb3V0ZXMuXG4gKiAgIGdldFN0b3BBbmRTdGF0aW9uc1F1ZXJ5OiAoKSA9PiAoe30pLCAgLy8gRnVuY3Rpb24gdGhhdCBmZXRjaGVzIGZhdm91cml0ZSBzdG9wcyBhbmQgc3RhdGlvbnMgZnJvbSBncmFwaHFsIEFQSS5cbiAqICAgZ2V0RmF2b3VyaXRlUm91dGVzUXVlcnk6ICgpID0+ICh7fSksICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgcXVlcnkgZm9yIGZldGNoaW5nIGZhdm91cml0ZSByb3V0ZXMuXG4gKiAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uczogKCkgPT4gKHt9KSwgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBmYXZvdXJpdGUgYmlrZSByZW50YWwgc3RhdGlvbi5cbiAqICAgZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zUXVlcnk6ICgpID0+ICh7fSksIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBxdWVyeSBmb3IgZmV0Y2hpbmcgZmF2b3VyaXRlIGJpa2UgcmVudGFsIHN0YXRpb25zLlxuICogICBzdGFydExvY2F0aW9uV2F0Y2g6ICgpID0+ICh7fSksICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgbG9jYXRlcyB1c2VycyBnZW9sb2NhdGlvbi5cbiAqICAgc2F2ZVNlYXJjaDogKCkgPT4gKHt9KSwgICAgICAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHNhdmVzIHNlYXJjaCB0byBvbGQgc2VhcmNoZXMgc3RvcmUuXG4gKiAgIGNsZWFyT2xkU2VhcmNoZXM6ICgpID0+ICh7fSksICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBjbGVhcnMgb2xkIHNlYXJjaGVzIHN0b3JlLlxuICogICBnZXRGdXR1cmVSb3V0ZXM6ICgpID0+ICh7fSksICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJuIGZ1dHVyZSByb3V0ZXNcbiAqICAgc2F2ZUZ1dHVyZVJvdXRlOiAoKSA9PiAoe30pLCAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHNhdmVzIGEgZnV0dXJlIHJvdXRlXG4gKiAgIGNsZWFyRnV0dXJlUm91dGVzOiAoKSA9PiAoe30pLCAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBjbGVhcnMgZnV0dXJlIHJvdXRlc1xuICogfTtcbiAqIGNvbnN0IGxhbmcgPSAnZmknOyAvLyBlbiwgZmkgb3Igc3ZcbiAqIGNvbnN0IG9uU2VsZWN0ID0gKGl0ZW0sIGlkKSA9PiB7XG4gKiAgICAvLyBGdW50aW9uYWxpdHkgd2hlbiB1c2VyIHNlbGVjdHMgYSBzdWdnZXNpb25zLiBObyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIGdpdmVuLlxuICogICAgcmV0dXJuIG51bGw7XG4gKiB9O1xuICogY29uc3Qgb25DbGVhciA9IGlkID0+IHtcbiAqICAgIC8vIENhbGxlZCAgd2hlbiB1c2VyIGNsaWNrcyB0aGUgY2xlYXIgc2VhcmNoIHN0cmluZyBidXR0b24uIE5vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24uXG4gKiAgICByZXR1cm4gbnVsbDtcbiAqIH07XG4gKiBjb25zdCBnZXRBdXRvU3VnZ2VzdEljb25zOiB7XG4gKiAgIC8vIENhbGxlZCBmb3IgZXZlcnkgY2l0eSBiaWtlIHN0YXRpb24gcmVuZGVyZWQgYXMgYSBzZWFyY2ggc3VnZ2VzdGlvbi4gU2hvdWxkIHJldHVybiB0aGUgaWNvbiBhbmRcbiAqICAgLy8gY29sb3IgdXNlZCBmb3IgdGhhdCBzdGF0aW9uLiBUd28gaWNvbnMgYXJlIGF2YWlsYWJsZSwgJ2NpdHliaWtlLXN0b3AtZGlnaXRyYW5zaXQnIGFuZGl0eWJpa2Utc3RvcC1kaWdpdHJhbnNpdC1zZWNvbmRhcnknLlxuICogICBjaXR5YmlrZXM6IHN0YXRpb24gPT4ge1xuICogICAgICByZXR1cm4gWydjaXR5YmlrZS1zdG9wLWRpZ2l0cmFuc2l0JywgJyNmMmI2MmQnXTtcbiAqICAgfVxuICogfVxuICogY29uc3QgdHJhbnNwb3J0TW9kZSA9IHVuZGVmaW5lZDtcbiAqIGNvbnN0IHBsYWNlaG9sZGVyID0gXCJzdG9wLW5lYXIteW91XCI7XG4gKiBjb25zdCB0YXJnZXRzID0gWydMb2NhdGlvbnMnLCAnU3RvcHMnLCAnUm91dGVzJ107IC8vIERlZmluZXMgd2hhdCB5b3UgYXJlIHNlYXJjaGluZy4gT3B0aW9ucyBhcmUgTG9jYXRpb25zLCBTdG9wcywgU3RhdGlvbnMsIFJvdXRlcywgVmVoaWNsZVJlbnRhbFN0YXRpb25zLCBGdXR1cmVSb3V0ZXMsIE1hcFBvc2l0aW9uIGFuZCBDdXJyZW50UG9zaXRpb24uIExlYXZlIGVtcHR5IHRvIHNlYXJjaCBhbGwgdGFyZ2V0cy5cbiAqIGNvbnN0IHNvdXJjZXMgPSBbJ0Zhdm91cml0ZScsICdIaXN0b3J5JywgJ0RhdGFzb3VyY2UnXSAvLyBEZWZpbmVzIHdoZXJlIHlvdSBhcmUgc2VhcmNoaW5nLiBhbGwgYXZhaWxhYmxlIGFyZTogRmF2b3VyaXRlLCBIaXN0b3J5IChwcmV2aW91c2x5IHNlYXJjaGVkIHNlYXJjaGVzKSBhbmQgRGF0YXNvdXJjZS4gTGVhdmUgZW1wdHkgdG8gdXNlIGFsbCBzb3VyY2VzLlxuICogcmV0dXJuIChcbiAqICA8RFRBdXRvc3VnZ2VzdFxuICogICAgYXBwRWxlbWVudD17YXBwRWxlbWVudH0gLy8gUmVxdWlyZWQuIFJvb3QgZWxlbWVudCdzIGlkLiBOZWVkZWQgZm9yIHJlYWN0LW1vZGFsIGNvbXBvbmVudC5cbiAqICAgIHNlYXJjaENvbnRleHQ9e3NlYXJjaENvbnRleHR9XG4gKiAgICBpY29uPVwib3JpZ2luXCIgLy8gT3B0aW9uYWwgU3RyaW5nIGZvciBpY29uIHRoYXQgaXMgc2hvd24gbGVmdCBvZiBzZWFyY2hmaWVsZC4gdXNlZCB3aXRoIEljb24gbGlicmFyeVxuICogICAgaWQ9XCJvcmlnaW5cIiAvLyB1c2VkIGZvciBzdHlsZSBwcm9wcyBhbmQgaW5mbyBmb3IgY29tcG9uZW50LlxuICogICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfSAvLyBTdHJpbmcgdGhhdCBpcyBzaG93bnMgaW5pdGFsbHkgaW4gc2VhcmNoIGZpZWxkXG4gKiAgICB2YWx1ZT1cIlwiIC8vIGUuZy4gdXNlciB0eXBlZCBzdHJpbmcgdGhhdCBpcyBzaG93biBpbiBzZWFyY2ggZmllbGRcbiAqICAgIG9uU2VsZWN0PXtvblNlbGVjdH1cbiAqICAgIG9uQ2xlYXI9e29uQ2xlYXJ9XG4gKiAgICBhdXRvRm9jdXM9e2ZhbHNlfSAvLyBkZWZpbmVzIHRoYXQgc2hvdWxkIHRoaXMgZmllbGQgYmUgYXV0b21hdGljYWxseSBmb2N1c2VkIHdoZW4gcGFnZSBpcyBsb2FkZWQuXG4gKiAgICBsYW5nPXtsYW5nfVxuICogICAgZ2V0QXV0b1N1Z2dlc3RJY29ucz17Z2V0QXV0b1N1Z2dlc3RJY29uc31cbiAqICAgIHRyYW5zcG9ydE1vZGU9e3RyYW5zcG9ydE1vZGV9IC8vIHRyYW5zcG9ydG1vZGUgd2l0aCB3aGljaCB3ZSBmaWx0ZXIgdGhlIHJvdXRlcywgZS5nLiByb3V0ZS1CVVNcbiAqICAgIGdlb2NvZGluZ1NpemU9ezEwfSAvLyBkZWZpbmVzIGhvdyBtYW55IHN0b3BzIGFuZCBzdGF0aW9ucyB0byBmZXRjaCBmcm9tIGdlb2NvZGluZy4gVXNlZnVsIGlmIHlvdSB3YW50IHRvIGZpbHRlciB0aGUgcmVzdWx0cyBhbmQgc3RpbGwgZ2V0IGEgcmVhc29uYWJsZSBhbW91bnQgb2Ygc3VnZ2VzdGlvbnMuXG4gKiAgICBmaWx0ZXJSZXN1bHRzPXtyZXN1bHRzID0+IHJldHVybiByZXN1bHRzfSAvLyBPcHRpb25hbCBmaWx0ZXJpbmcgZnVuY3Rpb24gZm9yIHJvdXRlcyBhbmQgc3RvcHNcbiAqICAgIGhhbmRlbFZpYVBvaW50cz17KCkgPT4gcmV0dXJuIG51bGwgfSAvLyBPcHRpb25hbCBWaWEgcG9pbnQgaGFuZGxpbmcgbG9naWMuIFRoaXMgaXMgY3VycmVudGx5IG1hbmFnZWQgd2l0aCBEVEF1dG9zdWdnZXN0cGFuZWwgYnkgZGVmYXVsdCwgYnV0IGlmIERUQXV0b3N1Z2dlc3QgaXMgdXNlZCBzZXBlcmF0ZWxseSBvd24gaW1wbGVtZW50YXRpb24gbXVzdCBiZSBwcm92aWRlZC5cbiAqICAgIGZvY3VzQ2hhbmdlPXsoKSA9PiByZXR1cm4gbnVsbH0gLy8gV2hlbiBzdWdnZXN0aW9uIGlzIHNlbGVjdGVkLCBoYW5kbGUgY2hhbmdpbmcgZm9jdXMuIFRoaXMgaXMgY3VycmVudGx5IG1hbmFnZWQgd2l0aCBEVEF1dG9zdWdnZXN0cGFuZWwgYnkgZGVmYXVsdCwgYnV0IGlmIERUQXV0b3N1Z2dlc3QgaXMgdXNlZCBzZXBlcmF0ZWxseSBvd24gaW1wbGVtZW50YXRpb24gbXVzdCBiZSBwcm92aWRlZC5cbiAqICAgIHN0b3JlUmVmPXsoKSA9PiByZXR1cm4gbnVsbH0gLy8gRnVuY3Rpb25hbGl0eSB0byBzdG9yZSByZWZzLiBDdXJyZW5sdHkgbWFuYWdlZCB3aXRoIERUQXV0b3N1Z2dlc3RwYW5lbCBieSBkZWZhdWx0LCBidXQgaWYgRFRBdXRvc3VnZ2VzdCBpcyB1c2VkIHNlcGVyYXRlbGx5IG93biBpbXBsZW1lbnRhdGlvbiBtdXN0IGJlIHByb3ZpZGVkLlxuICogICAgc291cmNlcz17c291cmNlc31cbiAqICAgIHRhcmdldHM9e3RhcmdldHN9XG4gKiAgICBpc01vYmlsZSAgLy8gT3B0aW9uYWwuIERlZmF1bHRzIHRvIGZhbHNlLiBXaGV0aGVyIHRvIHVzZSBtb2JpbGUgc2VhcmNoLlxuICogICAgbW9iaWxlTGFiZWw9XCJDdXN0b20gbGFiZWxcIiAvLyBPcHRpb25hbC4gQ3VzdG9tIGxhYmVsIHRleHQgZm9yIGF1dG9zdWdnZXN0IGZpZWxkIG9uIG1vYmlsZS5cbiAqICAgIGlucHV0Q2xhc3NOYW1lPVwiXCIgLy8gT3B0aW9uYWwuIEN1c3RvbSBjbGFzc25hbWUgYXBwbGllZCB0byB0aGUgaW5wdXQgZWxlbWVudCBvZiB0aGUgY29tcG9uZW50IGZvciBwcm92aWRpbmcgQ1NTIHN0eWxlcy5cbiAqICAgIHRyYW5zbGF0ZWRQbGFjZWhvbGRlcj0gLy8gT3B0aW9uYWwuIEN1c3RvbiB0cmFuc2xhdGVkIHBsYWNlaG9sZGVyIHRleHQgZm9yIGF1dG9zdWdnZXN0IGZpZWxkLlxuICovXG5jbGFzcyBEVEF1dG9zdWdnZXN0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBhcHBFbGVtZW50OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgaWNvbjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgdHJhbnNsYXRlZFBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNlYXJjaENvbnRleHQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBVUkxfUEVMSUFTOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICBjb250ZXh0OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgY2xlYXJPbGRTZWFyY2hlczogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICBjbGVhckZ1dHVyZVJvdXRlczogUHJvcFR5cGVzLmZ1bmMsXG4gICAgfSkuaXNSZXF1aXJlZCxcbiAgICBhcmlhTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgb25TZWxlY3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdHJhbnNwb3J0TW9kZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBmaWx0ZXJSZXN1bHRzOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBnZW9jb2RpbmdTaXplOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIG9uQ2xlYXI6IFByb3BUeXBlcy5mdW5jLFxuICAgIHN0b3JlUmVmOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBoYW5kbGVWaWFQb2ludHM6IFByb3BUeXBlcy5mdW5jLFxuICAgIGZvY3VzQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBsYW5nOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNvdXJjZXM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zdHJpbmcpLFxuICAgIHRhcmdldHM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zdHJpbmcpLFxuICAgIGlzTW9iaWxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBob3ZlckNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGFjY2Vzc2libGVQcmltYXJ5Q29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgdGltZVpvbmU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgcGF0aE9wdHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICByb3V0ZXNQcmVmaXg6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBzdG9wc1ByZWZpeDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB9KSxcbiAgICBtb2JpbGVMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBsb2NrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHVubG9jazogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICByZWZQb2ludDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGFkZHJlc3M6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBsYXQ6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgICBsb246IFByb3BUeXBlcy5udW1iZXIsXG4gICAgfSksXG4gICAgaW5wdXRDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZm9udFdlaWdodHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBtZWRpdW06IFByb3BUeXBlcy5udW1iZXIsXG4gICAgfSksXG4gICAgbW9kZUljb25Db2xvcnM6IFByb3BUeXBlcy5vYmplY3RPZihQcm9wVHlwZXMuc3RyaW5nKSxcbiAgICBnZXRBdXRvU3VnZ2VzdEljb25zOiBQcm9wVHlwZXMub2JqZWN0T2YoUHJvcFR5cGVzLmZ1bmMpLFxuICAgIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBtb2RlU2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNob3dTY3JvbGw6IFByb3BUeXBlcy5ib29sLFxuICAgIGlzRW1iZWRkZWQ6IFByb3BUeXBlcy5ib29sLFxuICB9O1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICBjbGFzc05hbWU6ICcnLFxuICAgIGljb246IHVuZGVmaW5lZCxcbiAgICB2YWx1ZTogJycsXG4gICAgdHJhbnNwb3J0TW9kZTogdW5kZWZpbmVkLFxuICAgIGZpbHRlclJlc3VsdHM6IHVuZGVmaW5lZCxcbiAgICBvbkNsZWFyOiB1bmRlZmluZWQsXG4gICAgbGFuZzogJ2ZpJyxcbiAgICBzdG9yZVJlZjogdW5kZWZpbmVkLFxuICAgIGhhbmRsZVZpYVBvaW50czogdW5kZWZpbmVkLFxuICAgIGZvY3VzQ2hhbmdlOiB1bmRlZmluZWQsXG4gICAgZ2V0QXV0b1N1Z2dlc3RJY29uczogdW5kZWZpbmVkLFxuICAgIHNvdXJjZXM6IFtdLFxuICAgIHRhcmdldHM6IHVuZGVmaW5lZCxcbiAgICBpc01vYmlsZTogZmFsc2UsXG4gICAgaXNFbWJlZGRlZDogZmFsc2UsXG4gICAgZ2VvY29kaW5nU2l6ZTogdW5kZWZpbmVkLFxuICAgIGNvbG9yOiAnIzAwN2FjOScsXG4gICAgaG92ZXJDb2xvcjogJyMwMDYyYTEnLFxuICAgIGFjY2Vzc2libGVQcmltYXJ5Q29sb3I6ICcjMDA3NGJlJyxcbiAgICB0aW1lWm9uZTogJ0V1cm9wZS9IZWxzaW5raScsXG4gICAgcGF0aE9wdHM6IHtcbiAgICAgIHJvdXRlc1ByZWZpeDogJ2xpbmphdCcsXG4gICAgICBzdG9wc1ByZWZpeDogJ3B5c2FraXQnLFxuICAgIH0sXG4gICAgYXJpYUxhYmVsOiB1bmRlZmluZWQsXG4gICAgbW9iaWxlTGFiZWw6IHVuZGVmaW5lZCxcbiAgICBpbnB1dENsYXNzTmFtZTogJycsXG4gICAgdHJhbnNsYXRlZFBsYWNlaG9sZGVyOiB1bmRlZmluZWQsXG4gICAgZm9udFdlaWdodHM6IHtcbiAgICAgIG1lZGl1bTogNTAwLFxuICAgIH0sXG4gICAgbW9kZUljb25Db2xvcnM6IHtcbiAgICAgICdtb2RlLWJ1cyc6ICcjMDA3YWM5JyxcbiAgICAgICdtb2RlLXJhaWwnOiAnIzhjNDc5OScsXG4gICAgICAnbW9kZS10cmFtJzogJyMwMDgxNTEnLFxuICAgICAgJ21vZGUtbWV0cm8nOiAnI2VkOGMwMCcsXG4gICAgICAnbW9kZS1mZXJyeSc6ICcjMDA3QTk3JyxcbiAgICAgICdtb2RlLWNpdHliaWtlJzogJyNmMmI2MmQnLFxuICAgICAgJ21vZGUtZnVuaWN1bGFyJzogJyNmZjAwZmYnLFxuICAgIH0sXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIG1vZGVTZXQ6IHVuZGVmaW5lZCxcbiAgICBzaG93U2Nyb2xsOiBmYWxzZSxcbiAgICByZWZQb2ludDoge30sXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgU2V0dGluZ3MuZGVmYXVsdFpvbmUgPSBwcm9wcy50aW1lWm9uZTtcbiAgICBTZXR0aW5ncy5kZWZhdWx0TG9jYWxlID0gcHJvcHMubGFuZztcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgdmFsdWU6IHByb3BzLnZhbHVlLFxuICAgICAgc3VnZ2VzdGlvbnM6IFtdLFxuICAgICAgZWRpdGluZzogZmFsc2UsXG4gICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgIHJlbmRlck1vYmlsZVNlYXJjaDogZmFsc2UsXG4gICAgICBzb3VyY2VzOiBwcm9wcy5zb3VyY2VzLFxuICAgICAgb3duUGxhY2VzOiBmYWxzZSxcbiAgICAgIHR5cGluZ1RpbWVyOiBudWxsLFxuICAgICAgdHlwaW5nOiBmYWxzZSxcbiAgICAgIHBlbmRpbmdTZWxlY3Rpb246IG51bGwsXG4gICAgICBzdWdnZXN0aW9uSW5kZXg6IDAsXG4gICAgICBjbGVhbkV4ZWN1dGVkOiBmYWxzZSxcbiAgICAgIHNjcm9sbFk6IDAsXG4gICAgfTtcbiAgICBPYmplY3Qua2V5cyh0cmFuc2xhdGlvbnMpLmZvckVhY2gobGFuZyA9PiB7XG4gICAgICBpMThuZXh0LmFkZFJlc291cmNlQnVuZGxlKGxhbmcsICd0cmFuc2xhdGlvbicsIHRyYW5zbGF0aW9uc1tsYW5nXSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBEVC00MDc0OiBXaGVuIGEgdXNlcidzIGxvY2F0aW9uIGlzIHVwZGF0ZWQgRFRBdXRvc3VnZ2VzdCB3b3VsZCByZS1yZW5kZXIgY2F1c2luZyBzdWdnZXN0aW9uIGxpc3QgdG8gcmVzZXQuXG4gIC8vIFRoaXMgd2lsbCBwcmV2ZW50IGl0LlxuICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpIHtcbiAgICByZXR1cm4gIWlzRXF1YWwobmV4dFN0YXRlLCB0aGlzLnN0YXRlKSB8fCAhaXNFcXVhbChuZXh0UHJvcHMsIHRoaXMucHJvcHMpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgIGlmIChpMThuZXh0Lmxhbmd1YWdlICE9PSB0aGlzLnByb3BzLmxhbmcpIHtcbiAgICAgIGkxOG5leHQuY2hhbmdlTGFuZ3VhZ2UodGhpcy5wcm9wcy5sYW5nKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2FtZWxjYXNlXG4gIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xuICAgIC8vIHdhaXQgdW50aWwgYWRkcmVzcyBpcyBzZXQgb3IgZ2VvbG9jYXRpb25pbmcgZmFpbHNcbiAgICBpZiAobmV4dFByb3BzLnZhbHVlICE9PSB0aGlzLnN0YXRlLnZhbHVlICYmICF0aGlzLnN0YXRlLmVkaXRpbmcpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICB2YWx1ZTogbmV4dFByb3BzLnZhbHVlLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25DaGFuZ2UgPSAoZXZlbnQsIHsgbmV3VmFsdWUsIG1ldGhvZCB9KSA9PiB7XG4gICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICB2YWx1ZTogdGhpcy5mSW5wdXQgfHwgbmV3VmFsdWUgfHwgJycsXG4gICAgICByZW5kZXJNb2JpbGVTZWFyY2g6IHRoaXMucHJvcHMuaXNNb2JpbGUsXG4gICAgfTtcbiAgICAvLyBSZW1vdmUgZmlsbGVkIGlucHV0IHZhbHVlIHNvIGl0IHdvbnQgYmUgcmV1c2VkIHVubmVjZXNzYXJ5XG4gICAgdGhpcy5mSW5wdXQgPSBudWxsO1xuICAgIGlmICghdGhpcy5zdGF0ZS5lZGl0aW5nKSB7XG4gICAgICBuZXdTdGF0ZS5lZGl0aW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUsICgpID0+XG4gICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiBuZXdWYWx1ZSB8fCAnJyB9KSxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChtZXRob2QgIT09ICdlbnRlcicgfHwgdGhpcy5zdGF0ZS52YWxpZCkge1xuICAgICAgLy8gdGVzdCBhYm92ZSBkcm9wcyB1bm5lY2Vzc2FyeSB1cGRhdGVcbiAgICAgIC8vIHdoZW4gdXNlciBoaXRzIGVudGVyIGJ1dCBzZWFyY2ggaXMgdW5maW5pc2hlZFxuICAgICAgaWYgKHRoaXMuc3RhdGUudHlwaW5nVGltZXIpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc3RhdGUudHlwaW5nVGltZXIpO1xuICAgICAgfVxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ3R5cGUnKSB7XG4gICAgICAgIC8vIGFmdGVyIHRpbWVvdXQgcnVucywgYXJpYSBhbGVydCB3aWxsIGFubm91bmNlIGN1cnJlbnQgc2VsZWN0aW9uXG4gICAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHR5cGluZzogZmFsc2UgfSk7XG4gICAgICAgIH0sIDEwMDApO1xuICAgICAgICBuZXdTdGF0ZS50eXBpbmdUaW1lciA9IHRpbWVyO1xuICAgICAgICBuZXdTdGF0ZS50eXBpbmcgPSB0cnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSk7XG4gICAgfVxuICB9O1xuXG4gIG9uQmx1ciA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5zdGF0ZS5lZGl0aW5nKSB7XG4gICAgICB0aGlzLmlucHV0LmZvY3VzKCk7XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgZWRpdGluZzogZmFsc2UsXG4gICAgICByZW5kZXJNb2JpbGVTZWFyY2g6IGZhbHNlLFxuICAgICAgdmFsdWU6IHRoaXMucHJvcHMudmFsdWUsXG4gICAgfSk7XG4gICAgaWYgKHRoaXMucHJvcHMuaXNNb2JpbGUgJiYgdGhpcy5zdGF0ZS5yZW5kZXJNb2JpbGVTZWFyY2gpIHtcbiAgICAgIHRoaXMuY2xvc2VNb2JpbGVTZWFyY2goKTtcbiAgICB9XG4gIH07XG5cbiAgb25TZWxlY3RlZCA9IChlLCByZWYpID0+IHtcbiAgICBpZiAodGhpcy5zdGF0ZS52YWxpZCkge1xuICAgICAgaWYgKHJlZi5zdWdnZXN0aW9uLnR5cGUgPT09ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJykge1xuICAgICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNvdXJjZXM6IFsnRmF2b3VyaXRlJywgJ0JhY2snXSxcbiAgICAgICAgICAgIG93blBsYWNlczogdHJ1ZSxcbiAgICAgICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IHJlZi5zdWdnZXN0aW9uLnR5cGUsXG4gICAgICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogJycgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICByZWYuc3VnZ2VzdGlvbi50eXBlID09PSAnYmFjaycgfHxcbiAgICAgICAgcmVmLnN1Z2dlc3Rpb24udHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJ1xuICAgICAgKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgICAge1xuICAgICAgICAgICAgc291cmNlczogdGhpcy5wcm9wcy5zb3VyY2VzLFxuICAgICAgICAgICAgb3duUGxhY2VzOiBmYWxzZSxcbiAgICAgICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IHJlZi5zdWdnZXN0aW9uLnR5cGUsXG4gICAgICAgICAgICBzdWdnZXN0aW9uSW5kZXg6IHJlZi5zdWdnZXN0aW9uSW5kZXgsXG4gICAgICAgICAgfSxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogJycgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWxlY3Rpb25Eb25lID0gdHJ1ZTsgLy8gc2VsZWN0aW9uIGRvbmUsIGRvIG5vdCBsZXQgdXBjb21pbmcga2V5Ym9hcmQgZXZlbnRzIGNvbmZ1c2UgdGhlIGZsb3dcbiAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgIHtcbiAgICAgICAgICBlZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgICB2YWx1ZTogcmVmLnN1Z2dlc3Rpb25WYWx1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaW5wdXQuYmx1cigpO1xuICAgICAgICAgIGlmICh0aGlzLnByb3BzLmhhbmRsZVZpYVBvaW50cykge1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5oYW5kbGVWaWFQb2ludHMocmVmLnN1Z2dlc3Rpb24sIHJlZi5zdWdnZXN0aW9uSW5kZXgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uU2VsZWN0KHJlZi5zdWdnZXN0aW9uLCB0aGlzLnByb3BzLmlkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcmVuZGVyTW9iaWxlU2VhcmNoOiBmYWxzZSxcbiAgICAgICAgICAgICAgc291cmNlczogdGhpcy5wcm9wcy5zb3VyY2VzLFxuICAgICAgICAgICAgICBvd25QbGFjZXM6IGZhbHNlLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uczogW10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnByb3BzLmZvY3VzQ2hhbmdlICYmXG4gICAgICAgICAgICAoIXRoaXMucHJvcHMuaXNNb2JpbGUgfHwgdGhpcy5wcm9wcy5pc0VtYmVkZGVkKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5mb2N1c0NoYW5nZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5wcm9wcy5pc01vYmlsZSAmJiB0aGlzLnN0YXRlLnJlbmRlck1vYmlsZVNlYXJjaCkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZU1vYmlsZVNlYXJjaCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgIHByZXZTdGF0ZSA9PiAoe1xuICAgICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IHByZXZTdGF0ZS52YWx1ZSxcbiAgICAgICAgfSksXG4gICAgICAgICgpID0+IHRoaXMuY2hlY2tQZW5kaW5nU2VsZWN0aW9uKCksIC8vIHNlYXJjaCBtYXkgZmluaXNoIGR1cmluZyBzdGF0ZSBjaGFuZ2VcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIG9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZCA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHN1Z2dlc3Rpb25zOiBbXSxcbiAgICAgIHNvdXJjZXM6IHRoaXMucHJvcHMuc291cmNlcyxcbiAgICAgIG93blBsYWNlczogZmFsc2UsXG4gICAgICBlZGl0aW5nOiBmYWxzZSxcbiAgICB9KTtcbiAgfTtcblxuICBjaGVja1BlbmRpbmdTZWxlY3Rpb24gPSAoKSA9PiB7XG4gICAgaWYgKFxuICAgICAgKHRoaXMuc3RhdGUucGVuZGluZ1NlbGVjdGlvbiA9PT0gJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnIHx8XG4gICAgICAgIHRoaXMuc3RhdGUucGVuZGluZ1NlbGVjdGlvbiA9PT0gJ2JhY2snKSAmJlxuICAgICAgdGhpcy5zdGF0ZS52YWxpZFxuICAgICkge1xuICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAge1xuICAgICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IG51bGwsXG4gICAgICAgICAgZWRpdGluZzogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICAvLyBhY2NlcHQgYWZ0ZXIgYWxsIG9uZ29pbmcgc2VhcmNoZXMgaGF2ZSBmaW5pc2hlZFxuICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZS5wZW5kaW5nU2VsZWN0aW9uICYmIHRoaXMuc3RhdGUudmFsaWQpIHtcbiAgICAgIC8vIGZpbmlzaCB0aGUgc2VsZWN0aW9uIGJ5IHBpY2tpbmcgZmlyc3QgPSBiZXN0IG1hdGNoIG9yIHdpdGggJ0Z1dHVyZVJvdXRlJyBieSBzdWdnZXN0aW9uSW5kZXhcbiAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgIHtcbiAgICAgICAgICBwZW5kaW5nU2VsZWN0aW9uOiBudWxsLFxuICAgICAgICAgIGVkaXRpbmc6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuc3RhdGUuc3VnZ2VzdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0LmJsdXIoKTtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnN0YXRlLnN1Z2dlc3Rpb25zW3RoaXMuc3RhdGUuc3VnZ2VzdGlvbkluZGV4XTtcbiAgICAgICAgICAgIGlmIChpdGVtLnR5cGUgIT09ICdiYWNrJykge1xuICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uU2VsZWN0KFxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUuc3VnZ2VzdGlvbnNbdGhpcy5zdGF0ZS5zdWdnZXN0aW9uSW5kZXhdLFxuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5wcm9wcy5pc01vYmlsZSAmJiB0aGlzLnN0YXRlLnJlbmRlck1vYmlsZVNlYXJjaCkge1xuICAgICAgICAgICAgICB0aGlzLmNsb3NlTW9iaWxlU2VhcmNoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHRoaXMucHJvcHMuZm9jdXNDaGFuZ2UgJiZcbiAgICAgICAgICAgICAgKCF0aGlzLnByb3BzLmlzTW9iaWxlIHx8IHRoaXMucHJvcHMuaXNFbWJlZGRlZClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLnByb3BzLmZvY3VzQ2hhbmdlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgY2xlYXJCdXR0b24gPSAoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydjbGVhci1pbnB1dCddfVxuICAgICAgICBvbkNsaWNrPXt0aGlzLmNsZWFySW5wdXR9XG4gICAgICAgIGFyaWEtbGFiZWw9e2kxOG5leHQudCgnY2xlYXItYnV0dG9uLWxhYmVsJyl9XG4gICAgICA+XG4gICAgICAgIDxJY29uIGltZz1cImNsb3NlXCIgY29sb3I9e3RoaXMucHJvcHMuY29sb3J9IC8+XG4gICAgICA8L2J1dHRvbj5cbiAgICApO1xuICB9O1xuXG4gIGZldGNoRnVuY3Rpb24gPSAoeyB2YWx1ZSwgY2xlYW5FeGVjdXRlZCB9KSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuc2V0U3RhdGUoXG4gICAgICB7IHZhbGlkOiBmYWxzZSwgY2xlYW5FeGVjdXRlZDogIWNsZWFuRXhlY3V0ZWQgPyBmYWxzZSA6IGNsZWFuRXhlY3V0ZWQgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uRG9uZSkge1xuICAgICAgICAgIC8vIGRvIG5vdCBsZXQgY29tcG9uZW50IGNhc3QgdW5uZWNlc3NhcnkgcmVxdWVzdHNcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyB0YXJnZXRzIH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBjb25zdCB1c2VBbGwgPSBpc0VtcHR5KHRhcmdldHMpO1xuICAgICAgICBjb25zdCBpc0xvY2F0aW9uU2VhcmNoID1cbiAgICAgICAgICBpc0VtcHR5KHRhcmdldHMpIHx8IHRhcmdldHMuaW5jbHVkZXMoJ0xvY2F0aW9ucycpO1xuICAgICAgICBsZXQgbmV3VGFyZ2V0cztcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUub3duUGxhY2VzKSB7XG4gICAgICAgICAgbmV3VGFyZ2V0cyA9IFsnTG9jYXRpb25zJ107XG4gICAgICAgICAgaWYgKHVzZUFsbCB8fCB0YXJnZXRzLmluY2x1ZGVzKCdTdG9wcycpKSB7XG4gICAgICAgICAgICBuZXdUYXJnZXRzLnB1c2goJ1N0b3BzJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1c2VBbGwgfHwgdGFyZ2V0cy5pbmNsdWRlcygnU3RhdGlvbnMnKSkge1xuICAgICAgICAgICAgbmV3VGFyZ2V0cy5wdXNoKCdTdGF0aW9ucycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodXNlQWxsIHx8IHRhcmdldHMuaW5jbHVkZXMoJ1ZlaGljbGVSZW50YWxTdGF0aW9ucycpKSB7XG4gICAgICAgICAgICBuZXdUYXJnZXRzLnB1c2goJ1ZlaGljbGVSZW50YWxTdGF0aW9ucycpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICghdXNlQWxsKSB7XG4gICAgICAgICAgbmV3VGFyZ2V0cyA9IFsuLi50YXJnZXRzXTtcbiAgICAgICAgICAvLyBpbiBkZXNrdG9wLCBmYXZvcml0ZXMgYXJlIGFjY2Vzc2VkIHZpYSBzdWIgc2VhcmNoXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaXNMb2NhdGlvblNlYXJjaCAmJlxuICAgICAgICAgICAgIXRoaXMucHJvcHMuaXNNb2JpbGUgJiZcbiAgICAgICAgICAgIChpc0VtcHR5KHRoaXMucHJvcHMuc291cmNlcykgfHxcbiAgICAgICAgICAgICAgdGhpcy5wcm9wcy5zb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIG5ld1RhcmdldHMucHVzaCgnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyByZW1vdmUgIGxvY2F0aW9uIGZhdm91cml0ZXMgaW4gZGVza3RvcCBzZWFyY2ggKGNvbGxlY3Rpb24gaXRlbSByZXBsYWNlcyBpdCBpbiB0YXJnZXQgYXJyYXkpXG4gICAgICAgIGNvbnN0IHNvdXJjZXMgPVxuICAgICAgICAgIHRoaXMuc3RhdGUuc291cmNlcyAmJlxuICAgICAgICAgIHRoaXMuc3RhdGUuc291cmNlcy5maWx0ZXIoXG4gICAgICAgICAgICBzID0+XG4gICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgaXNMb2NhdGlvblNlYXJjaCAmJlxuICAgICAgICAgICAgICAgIHMgPT09ICdGYXZvdXJpdGUnICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuc3RhdGUub3duUGxhY2VzICYmXG4gICAgICAgICAgICAgICAgIXRoaXMucHJvcHMuaXNNb2JpbGVcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuXG4gICAgICAgIGV4ZWN1dGVTZWFyY2goXG4gICAgICAgICAgbmV3VGFyZ2V0cyxcbiAgICAgICAgICBzb3VyY2VzLFxuICAgICAgICAgIHRoaXMucHJvcHMudHJhbnNwb3J0TW9kZSxcbiAgICAgICAgICB0aGlzLnByb3BzLnNlYXJjaENvbnRleHQsXG4gICAgICAgICAgdGhpcy5wcm9wcy5maWx0ZXJSZXN1bHRzLFxuICAgICAgICAgIHRoaXMucHJvcHMuZ2VvY29kaW5nU2l6ZSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpbnB1dDogdmFsdWUgfHwgJycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZWFyY2hSZXN1bHQgPT4ge1xuICAgICAgICAgICAgaWYgKHNlYXJjaFJlc3VsdCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFhYWCB0cmFuc2xhdGVzIGN1cnJlbnQgbG9jYXRpb25cbiAgICAgICAgICAgIGNvbnN0IHN1Z2dlc3Rpb25zID0gKHNlYXJjaFJlc3VsdC5yZXN1bHRzIHx8IFtdKVxuICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24gPT5cbiAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24udHlwZSAhPT0gJ0Z1dHVyZVJvdXRlJyB8fFxuICAgICAgICAgICAgICAgICAgKHN1Z2dlc3Rpb24udHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJyAmJlxuICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnByb3BlcnRpZXMudGltZSA+XG4gICAgICAgICAgICAgICAgICAgICAgRGF0ZVRpbWUubm93KCkudG9Vbml4SW50ZWdlcigpKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAubWFwKHN1Z2dlc3Rpb24gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ0N1cnJlbnRMb2NhdGlvbicgfHxcbiAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ1NlbGVjdEZyb21NYXAnIHx8XG4gICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnR5cGUgPT09ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyB8fFxuICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi50eXBlID09PSAnYmFjaydcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0ZWQgPSB7IC4uLnN1Z2dlc3Rpb24gfTtcbiAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWQucHJvcGVydGllcy5sYWJlbElkID0gaTE4bmV4dC50KFxuICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnByb3BlcnRpZXMubGFiZWxJZCxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJhbnNsYXRlZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN1Z2dlc3Rpb247XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB2YWx1ZSA9PT0gdGhpcy5zdGF0ZS52YWx1ZSB8fFxuICAgICAgICAgICAgICB2YWx1ZSA9PT0gdGhpcy5zdGF0ZS5wZW5kaW5nU2VsZWN0aW9uIHx8XG4gICAgICAgICAgICAgIHRoaXMuc3RhdGUucGVuZGluZ1NlbGVjdGlvbiA9PT0gJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnIHx8XG4gICAgICAgICAgICAgIHRoaXMuc3RhdGUucGVuZGluZ1NlbGVjdGlvbiA9PT0gJ2JhY2snIHx8XG4gICAgICAgICAgICAgIHRoaXMuc3RhdGUucGVuZGluZ1NlbGVjdGlvbiA9PT0gJ0Z1dHVyZVJvdXRlJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICBzdWdnZXN0aW9ucyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICgpID0+IHRoaXMuY2hlY2tQZW5kaW5nU2VsZWN0aW9uKCksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGlzLnByb3BzLnBhdGhPcHRzLFxuICAgICAgICAgIHRoaXMucHJvcHMucmVmUG9pbnQsXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICk7XG4gIH07XG5cbiAgY2xlYXJJbnB1dCA9ICgpID0+IHtcbiAgICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAgIGVkaXRpbmc6IHRydWUsXG4gICAgICB2YWx1ZTogJycsXG4gICAgICBzb3VyY2VzOiB0aGlzLnByb3BzLnNvdXJjZXMsXG4gICAgICBvd25QbGFjZXM6IGZhbHNlLFxuICAgICAgcmVuZGVyTW9iaWxlU2VhcmNoOiB0aGlzLnByb3BzLmlzTW9iaWxlLFxuICAgIH07XG4gICAgLy8gbXVzdCB1cGRhdGUgc3VnZ2VzdGlvbnNcbiAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlLCAoKSA9PlxuICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6ICcnLCBjbGVhbkV4ZWN1dGVkOiB0cnVlIH0pLFxuICAgICk7XG4gICAgaWYgKHRoaXMucHJvcHMub25DbGVhcikge1xuICAgICAgdGhpcy5wcm9wcy5vbkNsZWFyKHRoaXMucHJvcHMuaWQpO1xuICAgIH1cbiAgICB0aGlzLmlucHV0LmZvY3VzKCk7XG4gIH07XG5cbiAgaW5wdXRDbGlja2VkID0gaW5wdXRWYWx1ZSA9PiB7XG4gICAgdGhpcy5pbnB1dC5mb2N1cygpO1xuICAgIHRoaXMuY2xlYXJMb2NhdGlvblRleHQoKTtcbiAgICBpZiAodGhpcy5wcm9wcy5pc01vYmlsZSkge1xuICAgICAgdGhpcy5wcm9wcy5sb2NrKCk7XG4gICAgfVxuICAgIGlmICghdGhpcy5zdGF0ZS5lZGl0aW5nKSB7XG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAgICAgZWRpdGluZzogdHJ1ZSxcbiAgICAgICAgLy8gcmVzZXQgYXQgc3RhcnQsIGp1c3QgaW4gY2FzZSB3ZSBtaXNzZWQgc29tZXRoaW5nXG4gICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IG51bGwsXG4gICAgICAgIHJlbmRlck1vYmlsZVNlYXJjaDogdGhpcy5wcm9wcy5pc01vYmlsZSxcbiAgICAgIH07XG5cbiAgICAgIC8vIERULTMyNjM6IGFkZGVkIHN0YXRlS2V5RG93blxuICAgICAgY29uc3Qgc3RhdGVLZXlEb3duID0ge1xuICAgICAgICBlZGl0aW5nOiB0cnVlLFxuICAgICAgICBwZW5kaW5nU2VsZWN0aW9uOiBudWxsLFxuICAgICAgICB2YWx1ZTogaW5wdXRWYWx1ZSxcbiAgICAgIH07XG5cbiAgICAgIGlmICghdGhpcy5zdGF0ZS5zdWdnZXN0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgLy8gRFQtMzI2MzogYWRkZWQgaWYtZWxzZSBzdGF0ZW1lbnRcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dFZhbHVlID09PSAnb2JqZWN0JyB8fCAhaW5wdXRWYWx1ZSkge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUsICgpID0+XG4gICAgICAgICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogdGhpcy5zdGF0ZS52YWx1ZSB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoc3RhdGVLZXlEb3duLCAoKSA9PlxuICAgICAgICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6IGlucHV0VmFsdWUgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6IHRoaXMuc3RhdGUudmFsdWUgfSk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5pc01vYmlsZSAmJiAhdGhpcy5zdGF0ZS5yZW5kZXJNb2JpbGVTZWFyY2gpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyByZW5kZXJNb2JpbGVTZWFyY2g6IHRydWUgfSk7XG4gICAgfVxuICB9O1xuXG4gIHN0b3JlSW5wdXRSZWZlcmVuY2UgPSBhdXRvc3VnZ2VzdCA9PiB7XG4gICAgaWYgKGF1dG9zdWdnZXN0ICE9PSBudWxsKSB7XG4gICAgICB0aGlzLmlucHV0ID0gYXV0b3N1Z2dlc3QuaW5wdXQ7XG4gICAgICBpZiAodGhpcy5wcm9wcy5zdG9yZVJlZikge1xuICAgICAgICB0aGlzLnByb3BzLnN0b3JlUmVmKGF1dG9zdWdnZXN0LmlucHV0KTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLy8gRmlsbCBpbnB1dCB3aGVuIHVzZXIgY2xpY2tzIGZpbGwgaW5wdXQgYnV0dG9uIGluIHN0cmVldCBzdWdnZXN0aW9uIGl0ZW1cbiAgZmlsbElucHV0ID0gbmV3VmFsdWUgPT4ge1xuICAgIHRoaXMuZklucHV0ID0gbmV3VmFsdWUucHJvcGVydGllcy5uYW1lO1xuICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgZWRpdGluZzogdHJ1ZSxcbiAgICAgIHZhbHVlOiBuZXdWYWx1ZS5wcm9wZXJ0aWVzLm5hbWUsXG4gICAgICBjaGVja1BlbmRpbmdTZWxlY3Rpb246IG5ld1ZhbHVlLFxuICAgICAgdmFsaWQ6IHRydWUsXG4gICAgfTtcbiAgICAvLyBtdXN0IHVwZGF0ZSBzdWdnZXN0aW9uc1xuICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUpO1xuICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiBuZXdWYWx1ZS5wcm9wZXJ0aWVzLm5hbWUgfSk7XG4gICAgdGhpcy5pbnB1dC5mb2N1cygpO1xuICB9O1xuXG4gIHJlbmRlckl0ZW0gPSBpdGVtID0+IHtcbiAgICBjb25zdCBuZXdJdGVtID1cbiAgICAgIGl0ZW0udHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJ1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICB0cmFuc2xhdGVkVGV4dDogdHJhbnNsYXRlRnV0dXJlUm91dGVTdWdnZXN0aW9uVGltZShpdGVtKSxcbiAgICAgICAgICB9XG4gICAgICAgIDogaXRlbTtcbiAgICBjb25zdCBjb250ZW50ID0gZ2V0U3VnZ2VzdGlvbkNvbnRlbnQoaXRlbSk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdWdnZXN0aW9uSXRlbVxuICAgICAgICBpdGVtPXtuZXdJdGVtfVxuICAgICAgICBjb250ZW50PXtjb250ZW50fVxuICAgICAgICBsb2FkaW5nPXshdGhpcy5zdGF0ZS52YWxpZH1cbiAgICAgICAgaXNNb2JpbGU9e3RoaXMucHJvcHMuaXNNb2JpbGV9XG4gICAgICAgIGFyaWFGYXZvdXJpdGVTdHJpbmc9e2kxOG5leHQudCgnZmF2b3VyaXRlJyl9XG4gICAgICAgIGNvbG9yPXt0aGlzLnByb3BzLmNvbG9yfVxuICAgICAgICBhY2Nlc3NpYmxlUHJpbWFyeUNvbG9yPXt0aGlzLnByb3BzLmFjY2Vzc2libGVQcmltYXJ5Q29sb3J9XG4gICAgICAgIGZpbGxJbnB1dD17dGhpcy5maWxsSW5wdXR9XG4gICAgICAgIGZvbnRXZWlnaHRzPXt0aGlzLnByb3BzLmZvbnRXZWlnaHRzfVxuICAgICAgICBnZXRBdXRvU3VnZ2VzdEljb25zPXt0aGlzLnByb3BzLmdldEF1dG9TdWdnZXN0SWNvbnN9XG4gICAgICAgIG1vZGVJY29uQ29sb3JzPXt0aGlzLnByb3BzLm1vZGVJY29uQ29sb3JzfVxuICAgICAgICBtb2RlU2V0PXt0aGlzLnByb3BzLm1vZGVTZXR9XG4gICAgICAvPlxuICAgICk7XG4gIH07XG5cbiAgY2xvc2VNb2JpbGVTZWFyY2ggPSAoKSA9PiB7XG4gICAgdGhpcy5wcm9wcy51bmxvY2soKTtcbiAgICB0aGlzLnNldFN0YXRlKFxuICAgICAge1xuICAgICAgICByZW5kZXJNb2JpbGVTZWFyY2g6IGZhbHNlLFxuICAgICAgICB2YWx1ZTogdGhpcy5wcm9wcy52YWx1ZSxcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCB0aGlzLnN0YXRlLnNjcm9sbFkpO1xuICAgICAgICB0aGlzLm9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZCgpO1xuICAgICAgfSxcbiAgICApO1xuICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgICAvLyBUaGlzIGNsb3NlcyB0aGUgbW9iaWxlIGtleWJvYXJkXG4gICAgdGhpcy5pbnB1dC5ibHVyKCk7XG4gIH07XG5cbiAga2V5RG93biA9IGV2ZW50ID0+IHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25Eb25lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGtleUNvZGUgPSBldmVudC5rZXk7XG4gICAgaWYgKGtleUNvZGUgPT09ICdTaGlmdCcpIHtcbiAgICAgIC8vIFRoaXMgZW5hYmxlcyBzaGlmdCArIHRhYiB0byBiZSB1c2VkXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChrZXlDb2RlID09PSAnRXNjYXBlJykge1xuICAgICAgLy8gVXNpbmcgb25CbHVyIG1ha2VzICdFc2NhcGUnIGFjdCBzaW1pbGFybHkgdG8gdXNpbmcgJ1RhYidcbiAgICAgIHRoaXMub25CbHVyKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnN0YXRlLmVkaXRpbmcpIHtcbiAgICAgIGlmIChrZXlDb2RlID09PSAnRW50ZXInICYmIHRoaXMuc3RhdGUudmFsdWUgIT09ICcnKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBwZW5kaW5nU2VsZWN0aW9uOiB0cnVlIH0sICgpID0+IHtcbiAgICAgICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogdGhpcy5zdGF0ZS52YWx1ZSB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLmlucHV0Q2xpY2tlZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIChrZXlDb2RlID09PSAnRW50ZXInIHx8IGtleUNvZGUgPT09ICdBcnJvd0Rvd24nKSAmJlxuICAgICAgdGhpcy5zdGF0ZS52YWx1ZSA9PT0gJydcbiAgICApIHtcbiAgICAgIHRoaXMuY2xlYXJJbnB1dCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChrZXlDb2RlID09PSAnQXJyb3dEb3duJyAmJiB0aGlzLnN0YXRlLnZhbHVlICE9PSAnJykge1xuICAgICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICAgIGVkaXRpbmc6IHRydWUsXG4gICAgICAgIHZhbHVlOiB0aGlzLnN0YXRlLnZhbHVlLFxuICAgICAgfTtcbiAgICAgIC8vIG11c3QgdXBkYXRlIHN1Z2dlc3Rpb25zXG4gICAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlLCAoKSA9PlxuICAgICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogdGhpcy5zdGF0ZS52YWx1ZSB9KSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghdGhpcy5zdGF0ZS5lZGl0aW5nKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgZWRpdGluZzogdHJ1ZSB9KTtcbiAgICAgIHRoaXMuY2xlYXJMb2NhdGlvblRleHQoKTtcbiAgICB9XG5cbiAgICBpZiAoa2V5Q29kZSA9PT0gJ1RhYicpIHtcbiAgICAgIHRoaXMub25CbHVyKCk7XG4gICAgfVxuICB9O1xuXG4gIHN1Z2dlc3Rpb25Bc0FyaWFDb250ZW50ID0gKCkgPT4ge1xuICAgIGxldCBsYWJlbCA9IFtdO1xuICAgIGNvbnN0IGZpcnN0U3VnZ2VzdGlvbiA9IHRoaXMuc3RhdGUuc3VnZ2VzdGlvbnNbMF07XG4gICAgaWYgKGZpcnN0U3VnZ2VzdGlvbikge1xuICAgICAgaWYgKGZpcnN0U3VnZ2VzdGlvbi50eXBlICYmIGZpcnN0U3VnZ2VzdGlvbi50eXBlLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgICBsYWJlbC5wdXNoKGkxOG5leHQudCgnZmF2b3VyaXRlJykpO1xuICAgICAgfVxuICAgICAgbGFiZWwgPSBsYWJlbC5jb25jYXQoZ2V0U3VnZ2VzdGlvbkNvbnRlbnQodGhpcy5zdGF0ZS5zdWdnZXN0aW9uc1swXSkpO1xuICAgIH1cbiAgICByZXR1cm4gWy4uLm5ldyBTZXQobGFiZWwpXS5qb2luKCcgLSAnKTtcbiAgfTtcblxuICBjbGVhck9sZFNlYXJjaGVzID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgY29udGV4dCwgY2xlYXJPbGRTZWFyY2hlcywgY2xlYXJGdXR1cmVSb3V0ZXMgfSA9XG4gICAgICB0aGlzLnByb3BzLnNlYXJjaENvbnRleHQ7XG4gICAgaWYgKGNvbnRleHQgJiYgY2xlYXJPbGRTZWFyY2hlcykge1xuICAgICAgY2xlYXJPbGRTZWFyY2hlcyhjb250ZXh0KTtcbiAgICAgIGlmIChjbGVhckZ1dHVyZVJvdXRlcykge1xuICAgICAgICBjbGVhckZ1dHVyZVJvdXRlcyhjb250ZXh0KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiB0aGlzLnN0YXRlLnZhbHVlIH0pO1xuICAgIH1cbiAgfTtcblxuICBpc09yaWdpbkRlc3RpbmF0aW9uT3JWaWFwb2ludCA9ICgpID0+XG4gICAgdGhpcy5wcm9wcy5pZCA9PT0gJ29yaWdpbicgfHxcbiAgICB0aGlzLnByb3BzLmlkID09PSAnZGVzdGluYXRpb24nIHx8XG4gICAgdGhpcy5wcm9wcy5pZCA9PT0gJ3ZpYS1wb2ludCcgfHxcbiAgICB0aGlzLnByb3BzLmlkID09PSAnb3JpZ2luLXN0b3AtbmVhci15b3UnO1xuXG4gIGNsZWFyTG9jYXRpb25UZXh0ID0gKCkgPT4ge1xuICAgIGNvbnN0IHBvc2l0aW9ucyA9IFtcbiAgICAgICdWYWxpdHR1IHNpamFpbnRpJyxcbiAgICAgICdOeWt5aW5lbiBzaWphaW50aXNpJyxcbiAgICAgICdDdXJyZW50IHBvc2l0aW9uJyxcbiAgICAgICdTZWxlY3RlZCBsb2NhdGlvbicsXG4gICAgICAnVmFsZCBwb3NpdGlvbicsXG4gICAgICAnQW52w6RuZCBtaW4gcG9zaXRpb24nLFxuICAgICAgJ01pbiBwb3NpdGlvbicsXG4gICAgICAnS8OkeXTDpCBueWt5aXN0w6Qgc2lqYWludGlhJyxcbiAgICAgICdVc2UgY3VycmVudCBsb2NhdGlvbicsXG4gICAgICAnWW91ciBjdXJyZW50IGxvY2F0aW9uJyxcbiAgICAgICdXeWJyYW5lIG1pZWpzY2UnLFxuICAgIF07XG4gICAgaWYgKHBvc2l0aW9ucy5pbmNsdWRlcyh0aGlzLnN0YXRlLnZhbHVlKSkge1xuICAgICAgdGhpcy5jbGVhcklucHV0KCk7XG4gICAgfVxuICB9O1xuXG4gIG9uRm9jdXMgPSAoKSA9PiB7XG4gICAgY29uc3Qgc2Nyb2xsWSA9IHdpbmRvdy5wYWdlWU9mZnNldDtcbiAgICByZXR1cm4gdGhpcy5zZXRTdGF0ZSh7IHNjcm9sbFkgfSk7XG4gIH07XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmIChpMThuZXh0Lmxhbmd1YWdlICE9PSB0aGlzLnByb3BzLmxhbmcpIHtcbiAgICAgIGkxOG5leHQuY2hhbmdlTGFuZ3VhZ2UodGhpcy5wcm9wcy5sYW5nKTtcbiAgICB9XG4gICAgY29uc3QgeyB2YWx1ZSwgc3VnZ2VzdGlvbnMsIHJlbmRlck1vYmlsZVNlYXJjaCwgY2xlYW5FeGVjdXRlZCB9ID1cbiAgICAgIHRoaXMuc3RhdGU7XG4gICAgY29uc3QgaW5wdXRQcm9wcyA9IHtcbiAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLnByb3BzLnRyYW5zbGF0ZWRQbGFjZWhvbGRlclxuICAgICAgICA/IHRoaXMucHJvcHMudHJhbnNsYXRlZFBsYWNlaG9sZGVyXG4gICAgICAgIDogaTE4bmV4dC50KHRoaXMucHJvcHMucGxhY2Vob2xkZXIpLFxuICAgICAgdmFsdWUsXG4gICAgICBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSxcbiAgICAgIG9uQmx1cjogdGhpcy5vbkJsdXIsXG4gICAgICBjbGFzc05hbWU6IGN4KFxuICAgICAgICBgJHtzdHlsZXMuaW5wdXR9ICR7XG4gICAgICAgICAgdGhpcy5wcm9wcy5pc01vYmlsZSAmJiB0aGlzLnByb3BzLnRyYW5zcG9ydE1vZGUgPyBzdHlsZXMudGhpbiA6ICcnXG4gICAgICAgIH0gJHtzdHlsZXNbdGhpcy5wcm9wcy5pZF0gfHwgJyd9ICR7XG4gICAgICAgICAgdGhpcy5zdGF0ZS52YWx1ZSA/IHN0eWxlcy5oYXNWYWx1ZSA6ICcnXG4gICAgICAgIH0gJHt0aGlzLnByb3BzLmlucHV0Q2xhc3NOYW1lfWAsXG4gICAgICApLFxuICAgICAgb25LZXlEb3duOiB0aGlzLmtleURvd24sIC8vIERULTMyNjNcbiAgICAgIHJlcXVpcmVkOiB0aGlzLnByb3BzLnJlcXVpcmVkLFxuICAgIH07XG4gICAgY29uc3QgYXJpYUJhcklkID0gdGhpcy5wcm9wcy5pZC5yZXBsYWNlKCdzZWFyY2hmaWVsZC0nLCAnJyk7XG4gICAgbGV0IFNlYXJjaEJhcklkID0gdGhpcy5wcm9wcy5hcmlhTGFiZWwgfHwgaTE4bmV4dC50KGFyaWFCYXJJZCk7XG4gICAgU2VhcmNoQmFySWQgPSBTZWFyY2hCYXJJZC5yZXBsYWNlKCdzZWFyY2hmaWVsZC0nLCAnJykuY29uY2F0KCcuJyk7IC8vIEZ1bGwgc3RvcCBtYWtlcyBzY3JlZW4gcmVhZGVyIHNwZWVjaCBjbGVhcmVyLlxuICAgIGNvbnN0IGFyaWFSZXF1aXJlZFRleHQgPSB0aGlzLnByb3BzLnJlcXVpcmVkXG4gICAgICA/IGAke2kxOG5leHQudCgncmVxdWlyZWQnKX0uYFxuICAgICAgOiAnJztcbiAgICBjb25zdCBhcmlhTGFiZWxJbnN0cnVjdGlvbnMgPSB0aGlzLnByb3BzLmlzTW9iaWxlXG4gICAgICA/IGkxOG5leHQudCgnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1tb2JpbGUnKVxuICAgICAgOiBpMThuZXh0LnQoJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtZGVza3RvcCcpO1xuICAgIGNvbnN0IG1vdmluZ1RvRGVzdGluYXRpb25GaWVsZFRleHQgPVxuICAgICAgdGhpcy5wcm9wcy5pZCA9PT0gJ29yaWdpbidcbiAgICAgICAgPyBpMThuZXh0LnQoJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb3ZlLXRvLWRlc3RpbmF0aW9uJylcbiAgICAgICAgOiAnJztcbiAgICBjb25zdCBhcmlhTGFiZWxUZXh0ID0gYXJpYUxhYmVsSW5zdHJ1Y3Rpb25zXG4gICAgICAuY29uY2F0KCcgJylcbiAgICAgIC5jb25jYXQobW92aW5nVG9EZXN0aW5hdGlvbkZpZWxkVGV4dCk7XG5cbiAgICBjb25zdCBhcmlhU3VnZ2VzdGlvbkxlbiA9IGkxOG5leHQudCgnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbicsIHtcbiAgICAgIGNvdW50OiBzdWdnZXN0aW9ucy5sZW5ndGgsXG4gICAgfSk7XG5cbiAgICBjb25zdCBhcmlhQ3VycmVudFN1Z2dlc3Rpb24gPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5zdWdnZXN0aW9uQXNBcmlhQ29udGVudCgpIHx8IHRoaXMucHJvcHMudmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGkxOG5leHQudCgnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbicsIHtcbiAgICAgICAgICBzZWxlY3Rpb246XG4gICAgICAgICAgICB0aGlzLnN1Z2dlc3Rpb25Bc0FyaWFDb250ZW50KCkudG9Mb3dlckNhc2UoKSB8fCB0aGlzLnByb3BzLnZhbHVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAnJztcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXNbJ3NyLW9ubHknXX0gcm9sZT1cImFsZXJ0XCI+XG4gICAgICAgICAgeyF0aGlzLnN0YXRlLnR5cGluZyAmJlxuICAgICAgICAgICAgdGhpcy5zdGF0ZS5lZGl0aW5nICYmXG4gICAgICAgICAgICBgJHthcmlhU3VnZ2VzdGlvbkxlbn0gJHthcmlhQ3VycmVudFN1Z2dlc3Rpb24oKX1gfVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIHt0aGlzLnByb3BzLmlzTW9iaWxlICYmIChcbiAgICAgICAgICA8TW9iaWxlU2VhcmNoXG4gICAgICAgICAgICBzZWFyY2hPcGVuPXtyZW5kZXJNb2JpbGVTZWFyY2h9XG4gICAgICAgICAgICBhcHBFbGVtZW50PXt0aGlzLnByb3BzLmFwcEVsZW1lbnR9XG4gICAgICAgICAgICBjbGVhck9sZFNlYXJjaGVzPXt0aGlzLmNsZWFyT2xkU2VhcmNoZXN9XG4gICAgICAgICAgICBpZD17dGhpcy5wcm9wcy5pZH1cbiAgICAgICAgICAgIGNsZWFySW5wdXQ9e3RoaXMuY2xlYXJJbnB1dH1cbiAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnZhbHVlfVxuICAgICAgICAgICAgc3VnZ2VzdGlvbnM9e1tcbiAgICAgICAgICAgICAgLi4uc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnY2xlYXItc2VhcmNoLWhpc3RvcnknLFxuICAgICAgICAgICAgICAgIGxhYmVsSWQ6IGkxOG5leHQudCgnY2xlYXItc2VhcmNoLWhpc3RvcnknKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF19XG4gICAgICAgICAgICBpbnB1dFByb3BzPXt7XG4gICAgICAgICAgICAgIC4uLmlucHV0UHJvcHMsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLmlzT3JpZ2luRGVzdGluYXRpb25PclZpYXBvaW50KClcbiAgICAgICAgICAgICAgICA/IGkxOG5leHQudCgnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcycpXG4gICAgICAgICAgICAgICAgOiBpbnB1dFByb3BzLnBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIGZldGNoRnVuY3Rpb249e3RoaXMuZmV0Y2hGdW5jdGlvbn1cbiAgICAgICAgICAgIG9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZD17dGhpcy5vblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWR9XG4gICAgICAgICAgICBnZXRTdWdnZXN0aW9uVmFsdWU9e2dldFN1Z2dlc3Rpb25WYWx1ZX1cbiAgICAgICAgICAgIHJlbmRlclN1Z2dlc3Rpb249e3RoaXMucmVuZGVySXRlbX1cbiAgICAgICAgICAgIGNsb3NlSGFuZGxlPXt0aGlzLmNsb3NlTW9iaWxlU2VhcmNofVxuICAgICAgICAgICAgYXJpYUxhYmVsPXthcmlhUmVxdWlyZWRUZXh0XG4gICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAuY29uY2F0KFNlYXJjaEJhcklkKVxuICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgLmNvbmNhdChhcmlhQ3VycmVudFN1Z2dlc3Rpb24oKSl9XG4gICAgICAgICAgICBsYWJlbD17XG4gICAgICAgICAgICAgIHRoaXMucHJvcHMubW9iaWxlTGFiZWxcbiAgICAgICAgICAgICAgICA/IHRoaXMucHJvcHMubW9iaWxlTGFiZWxcbiAgICAgICAgICAgICAgICA6IGkxOG5leHQudCh0aGlzLnByb3BzLmlkKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb25TdWdnZXN0aW9uU2VsZWN0ZWQ9e3RoaXMub25TZWxlY3RlZH1cbiAgICAgICAgICAgIGRpYWxvZ0hlYWRlclRleHQ9e2kxOG5leHQudCgnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInKX1cbiAgICAgICAgICAgIGRpYWxvZ1ByaW1hcnlCdXR0b25UZXh0PXtpMThuZXh0LnQoJ2RlbGV0ZScpfVxuICAgICAgICAgICAgZGlhbG9nU2Vjb25kYXJ5QnV0dG9uVGV4dD17aTE4bmV4dC50KCdjYW5jZWwnKX1cbiAgICAgICAgICAgIGNsZWFySW5wdXRCdXR0b25UZXh0PXtpMThuZXh0LnQoJ2NsZWFyLWJ1dHRvbi1sYWJlbCcpfVxuICAgICAgICAgICAgZm9jdXNJbnB1dD17Y2xlYW5FeGVjdXRlZH1cbiAgICAgICAgICAgIGNvbG9yPXt0aGlzLnByb3BzLmNvbG9yfVxuICAgICAgICAgICAgaG92ZXJDb2xvcj17dGhpcy5wcm9wcy5ob3ZlckNvbG9yfVxuICAgICAgICAgICAgYWNjZXNzaWJsZVByaW1hcnlDb2xvcj17dGhpcy5wcm9wcy5hY2Nlc3NpYmxlUHJpbWFyeUNvbG9yfVxuICAgICAgICAgICAgZm9udFdlaWdodHM9e3RoaXMucHJvcHMuZm9udFdlaWdodHN9XG4gICAgICAgICAgICBzaG93U2Nyb2xsPXt0aGlzLnByb3BzLnNob3dTY3JvbGx9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAgeyFyZW5kZXJNb2JpbGVTZWFyY2ggJiYgKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goW1xuICAgICAgICAgICAgICBzdHlsZXNbJ2F1dG9zdWdnZXN0LWlucHV0LWNvbnRhaW5lciddLFxuICAgICAgICAgICAgICBzdHlsZXNbdGhpcy5wcm9wcy5pZF0sXG4gICAgICAgICAgICBdKX1cbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICctLWNvbG9yJzogYCR7dGhpcy5wcm9wcy5jb2xvcn1gLFxuICAgICAgICAgICAgICAnLS1ob3Zlci1jb2xvcic6IGAke3RoaXMucHJvcHMuaG92ZXJDb2xvcn1gLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dGhpcy5wcm9wcy5pY29uICYmIChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goW1xuICAgICAgICAgICAgICAgICAgc3R5bGVzW2BhdXRvc3VnZ2VzdC1pbnB1dC1pY29uYF0sXG4gICAgICAgICAgICAgICAgICBzdHlsZXNbdGhpcy5wcm9wcy5pZF0sXG4gICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLmlucHV0Q2xhc3NOYW1lICYmXG4gICAgICAgICAgICAgICAgICAgIGAke3RoaXMucHJvcHMuaW5wdXRDbGFzc05hbWV9LWlucHV0LWljb25gLFxuICAgICAgICAgICAgICAgIF0pfVxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2FyaWFSZXF1aXJlZFRleHRcbiAgICAgICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAgICAgLmNvbmNhdChTZWFyY2hCYXJJZClcbiAgICAgICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAgICAgLmNvbmNhdChpMThuZXh0LnQoJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbCcpKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxJY29uIGltZz17YCR7dGhpcy5wcm9wcy5pY29ufWB9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxBdXRvc3VnZ2VzdFxuICAgICAgICAgICAgICBhbHdheXNSZW5kZXJTdWdnZXN0aW9ucz17dGhpcy5zdGF0ZS5lZGl0aW5nfVxuICAgICAgICAgICAgICBpZD17dGhpcy5wcm9wcy5pZH1cbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbnM9e3N1Z2dlc3Rpb25zfVxuICAgICAgICAgICAgICBvblN1Z2dlc3Rpb25zRmV0Y2hSZXF1ZXN0ZWQ9e3RoaXMuZmV0Y2hGdW5jdGlvbn1cbiAgICAgICAgICAgICAgb25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkPXt0aGlzLm9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZH1cbiAgICAgICAgICAgICAgZ2V0U3VnZ2VzdGlvblZhbHVlPXtnZXRTdWdnZXN0aW9uVmFsdWV9XG4gICAgICAgICAgICAgIHJlbmRlclN1Z2dlc3Rpb249e3RoaXMucmVuZGVySXRlbX1cbiAgICAgICAgICAgICAgaW5wdXRQcm9wcz17e1xuICAgICAgICAgICAgICAgIC4uLmlucHV0UHJvcHMsXG4gICAgICAgICAgICAgICAgb25Gb2N1czogdGhpcy5vbkZvY3VzLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBmb2N1c0lucHV0T25TdWdnZXN0aW9uQ2xpY2tcbiAgICAgICAgICAgICAgc2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnM9eygpID0+IHRoaXMuc3RhdGUuZWRpdGluZ31cbiAgICAgICAgICAgICAgaGlnaGxpZ2h0Rmlyc3RTdWdnZXN0aW9uPXshdGhpcy5zdGF0ZS5vd25QbGFjZXN9XG4gICAgICAgICAgICAgIHRoZW1lPXtzdHlsZXN9XG4gICAgICAgICAgICAgIHJlbmRlcklucHV0Q29tcG9uZW50PXtwID0+IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT17c3R5bGVzWydzci1vbmx5J119IGh0bWxGb3I9e3RoaXMucHJvcHMuaWR9PlxuICAgICAgICAgICAgICAgICAgICB7YXJpYUN1cnJlbnRTdWdnZXN0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KGFyaWFSZXF1aXJlZFRleHQpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChTZWFyY2hCYXJJZClcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KGFyaWFMYWJlbFRleHQpfVxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXthcmlhQ3VycmVudFN1Z2dlc3Rpb24oKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoYXJpYVJlcXVpcmVkVGV4dClcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KFNlYXJjaEJhcklkKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoYXJpYUxhYmVsVGV4dCl9XG4gICAgICAgICAgICAgICAgICAgIGlkPXt0aGlzLnByb3BzLmlkfVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLmlucHV0Q2xpY2tlZH1cbiAgICAgICAgICAgICAgICAgICAgb25LZXlEb3duPXt0aGlzLmtleURvd259XG4gICAgICAgICAgICAgICAgICAgIHsuLi5wfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLnZhbHVlICYmIHRoaXMuY2xlYXJCdXR0b24oKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgb25TdWdnZXN0aW9uU2VsZWN0ZWQ9e3RoaXMub25TZWxlY3RlZH1cbiAgICAgICAgICAgICAgcmVmPXt0aGlzLnN0b3JlSW5wdXRSZWZlcmVuY2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IERUQXV0b3N1Z2dlc3RXaXRoU2Nyb2xsTG9jayA9IHdpdGhTY3JvbGxMb2NrKERUQXV0b3N1Z2dlc3QpO1xuXG5leHBvcnQgZGVmYXVsdCBEVEF1dG9zdWdnZXN0V2l0aFNjcm9sbExvY2s7XG4iLCJpbXBvcnQgeyBnZXROYW1lTGFiZWwgfSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtdW5pcS1ieS1sYWJlbCc7XG4vKipcbiAqIFJldHVybnMgbGFiZWwgZm9yIHByb3BlcnRpZXNcbiAqXG4gKiBAbmFtZSBnZXRMYWJlbFxuICogQHBhcmFtIHsqfSBwcm9wZXJ0aWVzIG9iamVjdFxuICogQHJldHVybnMge0Jvb2xlYW59IHRydWUvZmFsc2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0TGFiZWwocHJvcGVydGllcykge1xuICBjb25zdCBwYXJ0cyA9IGdldE5hbWVMYWJlbChwcm9wZXJ0aWVzLCB0cnVlKTtcbiAgc3dpdGNoIChwcm9wZXJ0aWVzLmxheWVyKSB7XG4gICAgY2FzZSAnc2VsZWN0RnJvbU1hcCc6XG4gICAgY2FzZSAnY3VycmVudFBvc2l0aW9uJzpcbiAgICBjYXNlICdvd25Mb2NhdGlvbnMnOlxuICAgIGNhc2UgJ2JhY2snOlxuICAgICAgcmV0dXJuIHBhcnRzWzFdIHx8IHBhcnRzWzBdO1xuICAgIGNhc2UgJ2Zhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uJzpcbiAgICBjYXNlICdmYXZvdXJpdGVQbGFjZSc6XG4gICAgICByZXR1cm4gcGFydHNbMF07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBwYXJ0cy5sZW5ndGggPiAxICYmIHBhcnRzWzFdICE9PSAnJ1xuICAgICAgICA/IHBhcnRzLmpvaW4oJywgJylcbiAgICAgICAgOiBwYXJ0c1sxXSB8fCBwYXJ0c1swXTtcbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBob29rcyBmcm9tICdAaHNsLWZpL2hvb2tzJztcblxuY29uc3Qgd2l0aFNjcm9sbExvY2sgPSBDb21wb25lbnQgPT4ge1xuICByZXR1cm4gcHJvcHMgPT4ge1xuICAgIGNvbnN0IHsgbG9jaywgdW5sb2NrIH0gPSBob29rcy51c2VTY3JvbGxMb2NrKCk7XG5cbiAgICByZXR1cm4gPENvbXBvbmVudCBsb2NrPXtsb2NrfSB1bmxvY2s9e3VubG9ja30gey4uLnByb3BzfSAvPjtcbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTY3JvbGxMb2NrO1xuIl0sIm5hbWVzIjpbIl90eXBlb2YiLCJvIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsInRvUHJvcGVydHlLZXkiLCJ0IiwiaSIsInIiLCJlIiwidG9QcmltaXRpdmUiLCJjYWxsIiwiVHlwZUVycm9yIiwiU3RyaW5nIiwiTnVtYmVyIiwiX2RlZmluZVByb3BlcnR5IiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsInRydUVxIiwidmFsMSIsInZhbDIiLCJndGZzU3RvcExheWVycyIsInZlaGljbGVSZW50YWxMYXllcnMiLCJsYWJlbElkVG9HaWQiLCJpZCIsInBhcnRzIiwic3BsaXQiLCJsZW5ndGgiLCJpc0R1cGxpY2F0ZSIsIml0ZW0xIiwiaXRlbTIiLCJwcm9wczEiLCJwcm9wZXJ0aWVzIiwicHJvcHMyIiwidHlwZSIsIm8xIiwib3JpZ2luIiwiZDEiLCJkZXN0aW5hdGlvbiIsIm8yIiwiZDIiLCJuYW1lIiwibG9jYWxhZG1pbiIsImluY2x1ZGVzIiwibGF5ZXIiLCJnaWQiLCJsYWJlbElkIiwiZ3Rmc0lkIiwicDEiLCJnZW9tZXRyeSIsImNvb3JkaW5hdGVzIiwidW5kZWZpbmVkIiwicDIiLCJNYXRoIiwiYWJzIiwibGFiZWwiLCJhZGRyZXNzIiwibm9ybWFsaXplIiwic3RyIiwiaXNTdHJpbmciLCJ0b0xvd2VyQ2FzZSIsIkxheWVyVHlwZSIsImlzU3RvcCIsImdldExheWVyUmFuayIsInNvdXJjZSIsImluZGV4T2YiLCJzb3J0U2VhcmNoUmVzdWx0cyIsImxpbmVSZWdleHAiLCJyZXN1bHRzIiwidGVybSIsIkFycmF5IiwiaXNBcnJheSIsImlzTGluZUlkZW50aWZpZXIiLCJ0ZXN0Iiwibm9ybWFsaXplZFRlcm0iLCJpc0xpbmVTZWFyY2giLCJvcmRlcmVkUmVzdWx0cyIsIm9yZGVyQnkiLCJyZXN1bHQiLCJzaG9ydE5hbWUiLCJjb25maWRlbmNlIiwibWF0Y2giLCJyZXN1bHRQcm9wZXJ0aWVzIiwibWFwIiwiZmlsdGVyIiwibm9ybWFsaXplZFZhbHVlIiwicmVkdWNlIiwicHJldmlvdXMiLCJjdXJyZW50IiwidW5pcVdpdGgiLCJzb3J0ZWRTZWFyY2hSZXN1bHRzIiwib3JkZXJlZFJlc3VsdHNXaXRoTGV0dGVyc0ZpcnN0IiwiY3VycmVudExlbmd0aCIsImxldHRlckFycmF5IiwibnVtYmVyQXJyYXkiLCJfc29ydGVkU2VhcmNoUmVzdWx0cyQiLCJfc29ydGVkU2VhcmNoUmVzdWx0cyQzIiwiX3NvcnRlZFNlYXJjaFJlc3VsdHMkMiIsImNvbmNhdCIsImlzTmFOIiwic2xpY2UiLCJwdXNoIiwib3JkZXJSZXN1bHRzV2l0aExldHRlcnNGaXJzdCIsImdldFN0b3BOYW1lIiwic3RvcENvZGUiLCJsYXN0SW5kZXhPZiIsInN1YnN0cmluZyIsImZpbHRlck1hdGNoaW5nVG9JbnB1dCIsImxpc3QiLCJJbnB1dCIsImZpZWxkcyIsImlucHV0IiwidHJpbSIsIm11bHRpV29yZCIsIml0ZW0iLCJmb3JFYWNoIiwicE5hbWUiLCJnZXQiLCJzcGxpY2UiLCJqb2luIiwicmVwbGFjZSIsInNlcmlhbGl6ZSIsIm9iaiIsInByZWZpeCIsImtleXMiLCJwIiwiayIsInYiLCJlbmNvZGVVUklDb21wb25lbnQiLCJheGlvcyIsInJlcXVpcmUiLCJkZWZhdWx0IiwiZ2V0SnNvbiIsInVybCIsInBhcmFtcyIsImVuY29kZVVSSSIsInNlYXJjaCIsInRpbWVvdXQiLCJtZXRob2QiLCJoZWFkZXJzIiwiQWNjZXB0IiwidGhlbiIsInJlcyIsImRhdGEiLCJnZXRHZW9jb2RpbmdSZXN1bHRzIiwic2VhcmNoU3RyaW5nIiwic2VhcmNoUGFyYW1zIiwibGFuZyIsImZvY3VzUG9pbnQiLCJzb3VyY2VzIiwicGVsaWFzVXJsIiwibWluaW1hbFJlZ2V4cCIsImdlb2NvZGluZ0xheWVycyIsInRleHQiLCJQcm9taXNlIiwicmVzb2x2ZSIsIlBFTElBU19VUkwiLCJvcHRzIiwiX29iamVjdFNwcmVhZCIsImxheWVycyIsInRvU3RyaW5nIiwiZmVhdHVyZXMiLCJnZXRTdG9wc0Zyb21HZW9jb2RpbmciLCJzdG9wcyIsIlVSTF9QRUxJQVNfUExBQ0UiLCJnaWRzIiwic3RvcFN0YXRpb25NYXAiLCJzdG9wIiwiY29kZSIsInN0b3BPclN0YXRpb24iLCJpZHMiLCJhZGRlbmR1bSIsImxhc3RVcGRhdGVkIiwiZmF2b3VyaXRlSWQiLCJmaWx0ZXJPbGRTZWFyY2hlcyIsIm9sZFNlYXJjaGVzIiwiZHJvcExheWVycyIsIm1hdGNoaW5nT2xkU2VhcmNoZXMiLCJ0YWtlIiwibmV3SXRlbSIsInRpbWV0YWJsZUNsaWNrZWQiLCJhcnJvd0NsaWNrZWQiLCJyb3V0ZUxheWVycyIsImxvY2F0aW9uTGF5ZXJzIiwicGFya2luZ0xheWVycyIsInN0b3BMYXllcnMiLCJkZWJvdW5jZWRTZWFyY2giLCJkZWJvdW5jZSIsInRhcmdldHMiLCJ0cmFuc3BvcnRNb2RlIiwic2VhcmNoQ29udGV4dCIsImZpbHRlclJlc3VsdHMiLCJnZW9jb2RpbmdTaXplIiwiY2FsbGJhY2siLCJwYXRoT3B0cyIsInJlZlBvaW50IiwiZ2V0UG9zaXRpb25zIiwiZ2V0RmF2b3VyaXRlTG9jYXRpb25zIiwiZ2V0T2xkU2VhcmNoZXMiLCJnZXRGYXZvdXJpdGVTdG9wcyIsInBhcmtpbmdBcmVhU291cmNlcyIsImdldExhbmd1YWdlIiwiZ2V0U3RvcEFuZFN0YXRpb25zUXVlcnkiLCJnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnNRdWVyeSIsImdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucyIsImdldEZhdm91cml0ZVJvdXRlc1F1ZXJ5IiwiZ2V0RmF2b3VyaXRlUm91dGVzIiwiZ2V0Um91dGVzUXVlcnkiLCJjb250ZXh0IiwiaXNQZWxpYXNMb2NhdGlvbkF3YXJlIiwibG9jYXRpb25Bd2FyZSIsIlVSTF9QRUxJQVMiLCJmZWVkSURzIiwiZ2VvY29kaW5nU2VhcmNoUGFyYW1zIiwiZ2VvY29kaW5nU291cmNlcyIsImdldEZ1dHVyZVJvdXRlcyIsImNpdHlCaWtlTmV0d29ya3MiLCJhbGxUYXJnZXRzIiwiYWxsU291cmNlcyIsInBvc2l0aW9uIiwic2VhcmNoQ29tcG9uZW50cyIsInNlYXJjaGVzIiwibGFuZ3VhZ2UiLCJsYXQiLCJsb24iLCJ0b0ZpeGVkIiwibW9kZSIsInN0YXR1cyIsImdldEN1cnJlbnRQb3NpdGlvbklmRW1wdHkiLCJzZWxlY3RQb3NpdGlvbkZvbU1hcCIsIml0ZW1zIiwiZmF2b3VyaXRlTG9jYXRpb25zIiwiZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zIiwiZmF2b3VyaXRlU3RvcHMiLCJoYXNGYXZvdXJpdGVzIiwic2VsZWN0RnJvbU93bkxvY2F0aW9ucyIsImZhdm91cml0ZXMiLCJmaWx0ZXJGYXZvdXJpdGVMb2NhdGlvbnMiLCJsb2NhdGlvbkhpc3RvcnkiLCJzaXplIiwiZmVlZElkcyIsImhpc3RvcnkiLCJ1c2VTdG9wcyIsInVzZVN0YXRpb25zIiwic3RvcHNBbmRTdGF0aW9ucyIsImV2ZXJ5Iiwic3RvcHNTdGF0aW9ucyIsInMiLCJmaWx0ZXJGYXZvdXJpdGVTdG9wcyIsImRlZHVwZXN0b3BzIiwiZmVlZHMiLCJzdG9wSGlzdG9yeSIsImZhdm91cml0ZVJvdXRlcyIsInJvdXRlSGlzdG9yeSIsImZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uIiwiYWxsIiwiZmxhdHRlbiIsImNhdGNoIiwiZXJyIiwiZXJyb3IiLCJsZWFkaW5nIiwiZ2V0TG9jYWxhZG1pbiIsInN1Z2dlc3Rpb24iLCJnZXRTdG9wQ29kZSIsImdldE5hbWVMYWJlbCIsIm1lbW9pemUiLCJwbGFpbiIsIlJlZ0V4cCIsImVzY2FwZVJlZ0V4cCIsImxvbmdOYW1lIiwiYWdlbmN5IiwiZm9ybWF0RmF2b3VyaXRlUGxhY2VMYWJlbCIsImNsb25lRGVlcCIsInRyYW5zbGF0aW9ucyIsImRlIiwiYWlycGxhbmUiLCJhcnJpdmFsIiwiYmFjayIsImJpa2VyZW50YWxzdGF0aW9uIiwiYnVzIiwiY2FuY2VsIiwiY3VycmVudHBvc2l0aW9uIiwiZGVsZXRlIiwiZGVwYXJ0dXJlIiwiZmF2b3VyaXRlIiwiZmVycnkiLCJvd25sb2NhdGlvbnMiLCJsb2FkaW5nIiwicmFpbCIsInN0cmVldCIsInN1YndheSIsInN0YXRpb24iLCJ0cmFtIiwidmVudWUiLCJ3aGVyZSIsInBsYWNlIiwiZW4iLCJiaWtlcGFyayIsImNhcnBhcmsiLCJwbGF0Zm9ybSIsInJlcXVpcmVkIiwidHJhY2siLCJmaSIsInZlaGljbGVyZW50YWxzdGF0aW9uIiwicGwiLCJzdiIsInN0eWxlSW5qZWN0IiwiY3NzIiwicmVmIiwiaW5zZXJ0QXQiLCJkb2N1bWVudCIsImhlYWQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInN0eWxlIiwiY3JlYXRlRWxlbWVudCIsImZpcnN0Q2hpbGQiLCJpbnNlcnRCZWZvcmUiLCJhcHBlbmRDaGlsZCIsInN0eWxlU2hlZXQiLCJjc3NUZXh0IiwiY3JlYXRlVGV4dE5vZGUiLCJBdXRvc3VnZ2VzdFBhdGNoIiwiQXV0b3N1Z2dlc3QiLCJwcm9wcyIsInN1cGVyIiwic2VsZiIsInRoaXMiLCJvblN1Z2dlc3Rpb25Ub3VjaE1vdmUiLCJqdXN0U2VsZWN0ZWRTdWdnZXN0aW9uIiwicHJlc3NlZFN1Z2dlc3Rpb24iLCJNb2JpbGVTZWFyY2giLCJhcHBFbGVtZW50IiwiY2xvc2VIYW5kbGUiLCJjbGVhcklucHV0Iiwic3VnZ2VzdGlvbnMiLCJpbnB1dFByb3BzIiwiZmV0Y2hGdW5jdGlvbiIsInJlbmRlclN1Z2dlc3Rpb24iLCJnZXRTdWdnZXN0aW9uVmFsdWUiLCJhcmlhTGFiZWwiLCJvblN1Z2dlc3Rpb25TZWxlY3RlZCIsImNsZWFyT2xkU2VhcmNoZXMiLCJkaWFsb2dIZWFkZXJUZXh0IiwiZGlhbG9nUHJpbWFyeUJ1dHRvblRleHQiLCJkaWFsb2dTZWNvbmRhcnlCdXR0b25UZXh0IiwiY2xlYXJJbnB1dEJ1dHRvblRleHQiLCJmb2N1c0lucHV0IiwiY29sb3IiLCJob3ZlckNvbG9yIiwiYWNjZXNzaWJsZVByaW1hcnlDb2xvciIsInNlYXJjaE9wZW4iLCJmb250V2VpZ2h0cyIsInNob3dTY3JvbGwiLCJfaW5wdXRSZWYkY3VycmVudCIsInN0eWxlcyIsIm1vYmlsZVN0eWxlcyIsIm1vYmlsZU5vU2Nyb2xsU3R5bGVzIiwiaW5wdXRJZCIsImlzRGlhbG9nT3BlbiIsInNldERpYWxvZ09wZW4iLCJ1c2VTdGF0ZSIsImlucHV0UmVmIiwiUmVhY3QiLCJ1c2VSZWYiLCJ1c2VFZmZlY3QiLCJSZWFjdE1vZGFsIiwic2V0QXBwRWxlbWVudCIsIm9uQ2xvc2UiLCJ1c2VDYWxsYmFjayIsIm9uU2VsZWN0IiwiaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50IiwiZXZlbnQiLCJrZXkiLCJ3aGljaCIsImtleUNvZGUiLCJwcmV2ZW50RGVmYXVsdCIsImdldFZhbHVlIiwicmVuZGVySXRlbSIsImNsYXNzTmFtZSIsImZvY3VzIiwiaXNPcGVuIiwib3ZlcmxheUNsYXNzTmFtZSIsIm9uQWZ0ZXJDbG9zZSIsInNob3VsZENsb3NlT25Fc2MiLCJtZWRpdW0iLCJodG1sRm9yIiwib25DbGljayIsIm9uS2V5RG93biIsInRhYkluZGV4IiwiSWNvbiIsImltZyIsImFsd2F5c1JlbmRlclN1Z2dlc3Rpb25zIiwib25TdWdnZXN0aW9uc0ZldGNoUmVxdWVzdGVkIiwiZm9jdXNJbnB1dE9uU3VnZ2VzdGlvbkNsaWNrIiwic2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnMiLCJoYXNWYWx1ZSIsImF1dG9Gb2N1cyIsInJlbmRlcklucHV0Q29tcG9uZW50IiwiRnJhZ21lbnQiLCJhc3NpZ24iLCJ0aGVtZSIsIkRpYWxvZ01vZGFsIiwiaXNNb2RhbE9wZW4iLCJoYW5kbGVDbG9zZSIsImhlYWRlclRleHQiLCJwcmltYXJ5QnV0dG9uVGV4dCIsInNlY29uZGFyeUJ1dHRvblRleHQiLCJwcmltYXJ5QnV0dG9uT25DbGljayIsInNlY29uZGFyeUJ1dHRvbk9uQ2xpY2siLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJzdHJpbmciLCJpc1JlcXVpcmVkIiwiZnVuYyIsImFycmF5T2YiLCJvYmplY3QiLCJzaGFwZSIsIm9uQ2hhbmdlIiwib25CbHVyIiwicGxhY2Vob2xkZXIiLCJib29sIiwibnVtYmVyIiwiZGVmYXVsdFByb3BzIiwibW9kdWxlIiwiZXhwb3J0cyIsInJlcXVpcmUkJDAiLCJuIiwiZyIsIndpbmRvdyIsImlnbm9yZSIsImhlYWRlciIsInRvcE9uRW1wdHlIYXNoIiwic3BlZWQiLCJzcGVlZEFzRHVyYXRpb24iLCJkdXJhdGlvbk1heCIsImR1cmF0aW9uTWluIiwiY2xpcCIsIm9mZnNldCIsImVhc2luZyIsImN1c3RvbUVhc2luZyIsInVwZGF0ZVVSTCIsInBvcHN0YXRlIiwiZW1pdEV2ZW50cyIsImFyZ3VtZW50cyIsImhhc093blByb3BlcnR5IiwiY2hhckF0Iiwic3Vic3RyIiwidSIsImNoYXJDb2RlQXQiLCJJbnZhbGlkQ2hhcmFjdGVyRXJyb3IiLCJtYXgiLCJib2R5Iiwic2Nyb2xsSGVpZ2h0IiwiZG9jdW1lbnRFbGVtZW50Iiwib2Zmc2V0SGVpZ2h0IiwiY2xpZW50SGVpZ2h0IiwicGFyc2VJbnQiLCJnZXRDb21wdXRlZFN0eWxlIiwiaGVpZ2h0Iiwib2Zmc2V0VG9wIiwiYWN0aXZlRWxlbWVudCIsInNldEF0dHJpYnV0ZSIsIm91dGxpbmUiLCJzY3JvbGxUbyIsIkN1c3RvbUV2ZW50IiwiYnViYmxlcyIsImRldGFpbCIsImFuY2hvciIsInRvZ2dsZSIsImRpc3BhdGNoRXZlbnQiLCJjIiwiYSIsImwiLCJmIiwiZCIsImNhbmNlbFNjcm9sbCIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiYW5pbWF0ZVNjcm9sbCIsImgiLCJtIiwidGFnTmFtZSIsInkiLCJwYWdlWU9mZnNldCIsInF1ZXJ5U2VsZWN0b3IiLCJiIiwidyIsIkUiLCJPIiwib2Zmc2V0UGFyZW50IiwibWluIiwiaW5uZXJIZWlnaHQiLCJTIiwiXyIsIkkiLCJNIiwiTCIsImZsb29yIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwicHVzaFN0YXRlIiwic21vb3RoU2Nyb2xsIiwiSlNPTiIsInN0cmluZ2lmeSIsInRpdGxlIiwibWF0Y2hNZWRpYSIsIm1hdGNoZXMiLCJkZWZhdWx0UHJldmVudGVkIiwiYnV0dG9uIiwibWV0YUtleSIsImN0cmxLZXkiLCJzaGlmdEtleSIsInRhcmdldCIsImNsb3Nlc3QiLCJob3N0bmFtZSIsImxvY2F0aW9uIiwicGF0aG5hbWUiLCJocmVmIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiaGFzaCIsInJlcGxhY2VTdGF0ZSIsInN0YXRlIiwiZGVzdHJveSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJFbGVtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsImFwcGx5IiwiX19jcmVhdGVCaW5kaW5nIiwiY3JlYXRlIiwiX19leHBvcnRTdGFyIiwidXNlQXJyb3dOYXZpZ2F0aW9uIiwibGlzdEl0ZW1zIiwib25BcnJvd1VwT3JEb3duIiwic2VsZWN0ZWRJbmRleCIsInVzZURlYm91bmNlIiwic2V0VGltZW91dCIsImNsZWFyVGltZW91dCIsInVzZUVsZW1lbnRTaXplIiwid2lkdGgiLCJjbGllbnRXaWR0aCIsInVzZUludGVyc2VjdGlvbk9ic2VydmVyIiwiaXNJbnRlcnNlY3RpbmciLCJJbnRlcnNlY3Rpb25PYnNlcnZlciIsIm9ic2VydmUiLCJ1bm9ic2VydmUiLCJjb250YWluZXJSZWYiLCJpc1Zpc2libGUiLCJ1c2VJc0JyZWFrcG9pbnQiLCJ4cyIsIm1vYmlsZVNtYWxsIiwibW9iaWxlIiwidGFibGV0IiwidGFibGV0TGFyZ2UiLCJkZXNrdG9wU21hbGwiLCJkZXNrdG9wIiwiZGVza3RvcExhcmdlIiwiaW5uZXJXaWR0aCIsInVzZU9uUmVzaXplIiwidXNlSXNMb2FkaW5nQWZ0ZXJFcnJvciIsInVzZUlzTW9iaWxlIiwidXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZU9uTG9zZUZvY3VzV2l0aGluIiwid2F0Y2giLCJwYXNzaXZlIiwidXNlT25XaW5kb3dGb2N1cyIsInZpc2liaWxpdHlTdGF0ZSIsInVzZU91dHNpZGVSZWFjdGVyIiwiY29udGFpbnMiLCJ1c2VSdW5BZnRlclVwZGF0ZSIsInVzZVNjcm9sbExvY2siLCJsb2NrIiwic2Nyb2xsWSIsInRvcCIsInVubG9jayIsIl9faW1wb3J0RGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJ1c2VTbW9vdGhTY3JvbGwiLCJnbG9iYWxUaGlzIiwiRnVuY3Rpb24iLCJTZXR0aW5ncyIsImRlZmF1bHRMb2NhbGUiLCJpMThuZXh0X19kZWZhdWx0IiwiaW5pdCIsImZhbGxiYWNrTG5nIiwiZGVmYXVsdE5TIiwiaW50ZXJwb2xhdGlvbiIsImVzY2FwZVZhbHVlIiwibm9kZSIsImdldFBsYXRmb3JtIiwiR1RGUyIsIm1vZGVzIiwiaTE4bmV4dCIsImdldFN1Z2dlc3Rpb25Db250ZW50Iiwic3VnZ2VzdGlvblR5cGUiLCJfaXRlbSRwcm9wZXJ0aWVzJGFkZGUiLCJ0YWlsMSIsImxvY2FsaXR5IiwidGFpbDIiLCJuYW1lMSIsIm5hbWUyIiwidHJhbnNsYXRlZFRleHQiLCJ0cmFuc2xhdGVGdXR1cmVSb3V0ZVN1Z2dlc3Rpb25UaW1lIiwidGltZSIsIkRhdGVUaW1lIiwiZnJvbVNlY29uZHMiLCJub3ciLCJhcnJpdmVCeSIsImhhc1NhbWUiLCJwbHVzIiwiZGF5cyIsInRvRm9ybWF0IiwiZ2V0TGFiZWwiLCJEVEF1dG9zdWdnZXN0IiwiQ29tcG9uZW50IiwibmV3VmFsdWUiLCJuZXdTdGF0ZSIsImZJbnB1dCIsInJlbmRlck1vYmlsZVNlYXJjaCIsImlzTW9iaWxlIiwiZWRpdGluZyIsInZhbGlkIiwidHlwaW5nVGltZXIiLCJ0aW1lciIsInNldFN0YXRlIiwidHlwaW5nIiwiY2xvc2VNb2JpbGVTZWFyY2giLCJvd25QbGFjZXMiLCJwZW5kaW5nU2VsZWN0aW9uIiwic3VnZ2VzdGlvbkluZGV4Iiwic2VsZWN0aW9uRG9uZSIsInN1Z2dlc3Rpb25WYWx1ZSIsImJsdXIiLCJoYW5kbGVWaWFQb2ludHMiLCJmb2N1c0NoYW5nZSIsImlzRW1iZWRkZWQiLCJwcmV2U3RhdGUiLCJjaGVja1BlbmRpbmdTZWxlY3Rpb24iLCJjbGVhbkV4ZWN1dGVkIiwidXNlQWxsIiwiaXNFbXB0eSIsImlzTG9jYXRpb25TZWFyY2giLCJuZXdUYXJnZXRzIiwiZXhlY3V0ZVNlYXJjaCIsInNlYXJjaFJlc3VsdCIsInRvVW5peEludGVnZXIiLCJ0cmFuc2xhdGVkIiwib25DbGVhciIsImlucHV0VmFsdWUiLCJjbGVhckxvY2F0aW9uVGV4dCIsInN0YXRlS2V5RG93biIsImF1dG9zdWdnZXN0Iiwic3RvcmVSZWYiLCJjb250ZW50IiwiU3VnZ2VzdGlvbkl0ZW0iLCJhcmlhRmF2b3VyaXRlU3RyaW5nIiwiZmlsbElucHV0IiwiZ2V0QXV0b1N1Z2dlc3RJY29ucyIsIm1vZGVJY29uQ29sb3JzIiwibW9kZVNldCIsIm9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZCIsImlucHV0Q2xpY2tlZCIsImZpcnN0U3VnZ2VzdGlvbiIsIlNldCIsImNsZWFyRnV0dXJlUm91dGVzIiwiZGVmYXVsdFpvbmUiLCJ0aW1lWm9uZSIsImFkZFJlc291cmNlQnVuZGxlIiwic2hvdWxkQ29tcG9uZW50VXBkYXRlIiwibmV4dFByb3BzIiwibmV4dFN0YXRlIiwiaXNFcXVhbCIsImNvbXBvbmVudERpZFVwZGF0ZSIsImNoYW5nZUxhbmd1YWdlIiwiVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLCJyZW5kZXIiLCJ0cmFuc2xhdGVkUGxhY2Vob2xkZXIiLCJ0aGluIiwiaW5wdXRDbGFzc05hbWUiLCJrZXlEb3duIiwiYXJpYUJhcklkIiwiU2VhcmNoQmFySWQiLCJhcmlhUmVxdWlyZWRUZXh0IiwiYXJpYUxhYmVsSW5zdHJ1Y3Rpb25zIiwibW92aW5nVG9EZXN0aW5hdGlvbkZpZWxkVGV4dCIsImFyaWFMYWJlbFRleHQiLCJhcmlhU3VnZ2VzdGlvbkxlbiIsImNvdW50IiwiYXJpYUN1cnJlbnRTdWdnZXN0aW9uIiwic3VnZ2VzdGlvbkFzQXJpYUNvbnRlbnQiLCJzZWxlY3Rpb24iLCJyb2xlIiwiaXNPcmlnaW5EZXN0aW5hdGlvbk9yVmlhcG9pbnQiLCJtb2JpbGVMYWJlbCIsIm9uU2VsZWN0ZWQiLCJjeCIsImljb24iLCJvbkZvY3VzIiwiaGlnaGxpZ2h0Rmlyc3RTdWdnZXN0aW9uIiwiY2xlYXJCdXR0b24iLCJzdG9yZUlucHV0UmVmZXJlbmNlIiwicm91dGVzUHJlZml4Iiwic3RvcHNQcmVmaXgiLCJvYmplY3RPZiIsIkRUQXV0b3N1Z2dlc3RXaXRoU2Nyb2xsTG9jayIsImhvb2tzIl0sIm1hcHBpbmdzIjoicTFEQUFBLFNBQVNBLEVBQVFDLEdBR2YsT0FBT0QsRUFBVSxtQkFBcUJFLFFBQVUsaUJBQW1CQSxPQUFPQyxTQUFXLFNBQVVGLEdBQzdGLGNBQWNBLENBQ2YsRUFBRyxTQUFVQSxHQUNaLE9BQU9BLEdBQUssbUJBQXFCQyxRQUFVRCxFQUFFRyxjQUFnQkYsUUFBVUQsSUFBTUMsT0FBT0csVUFBWSxnQkFBa0JKLENBQ3RILEVBQUtELEVBQVFDLEVBQ2IsQ0NOQSxTQUFTSyxFQUFjQyxHQUNyQixJQUFJQyxFQ0ZOLFNBQXFCRCxFQUFHRSxHQUN0QixHQUFJLFVBQVlULEVBQVFPLEtBQU9BLEVBQUcsT0FBT0EsRUFDekMsSUFBSUcsRUFBSUgsRUFBRUwsT0FBT1MsYUFDakIsUUFBSSxJQUFXRCxFQUFHLENBQ2hCLElBQUlGLEVBQUlFLEVBQUVFLEtBQUtMLEVBQUdFLEdBQUssV0FDdkIsR0FBSSxVQUFZVCxFQUFRUSxHQUFJLE9BQU9BLEVBQ25DLE1BQU0sSUFBSUssVUFBVSwrQ0FDckIsQ0FDRCxPQUFRLFdBQWFKLEVBQUlLLE9BQVNDLFFBQVFSLEVBQzVDLENEUFVJ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
|