@digitransit-component/digitransit-component-autosuggest-panel 6.0.1 → 7.0.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.
@@ -1,2 +1,2 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("classnames"),require("prop-types"),require("react"),require("react-sortablejs"),require("i18next"),require("@digitransit-component/digitransit-component-autosuggest"),require("@digitransit-component/digitransit-component-icon"),require("lodash/isEmpty"),require("react-autosuggest")):"function"==typeof define&&define.amd?define(["exports","classnames","prop-types","react","react-sortablejs","i18next","@digitransit-component/digitransit-component-autosuggest","@digitransit-component/digitransit-component-icon","lodash/isEmpty","react-autosuggest"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["@digitransit-component/digitransit-component-autosuggest-panel"]={},e.cx,e.PropTypes,e.React,e.reactSortablejs,e.i18next,e.DTAutosuggest,e.Icon,e.isEmpty,e.Autosuggest)}(this,(function(e,t,n,i,o,s,a,l,r,c){"use strict";function p(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var d=p(t),u=p(n),_=p(i),h=p(s),g=p(a),f=p(l),v=p(r),y=p(c);function m(e){return m="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},m(e)}function b(e){var t=function(e,t){if("object"!=m(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,t||"default");if("object"!=m(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==m(t)?t:t+""}function x(e,t,n){return(t=b(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function k(e,t){if(null==e)return{};var n,i,o=function(e,t){if(null==e)return{};var n={};for(var i in e)if({}.hasOwnProperty.call(e,i)){if(-1!==t.indexOf(i))continue;n[i]=e[i]}return n}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(i=0;i<s.length;i++)n=s[i],-1===t.indexOf(n)&&{}.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function w(e,t){void 0===t&&(t={});var n=t.insertAt;if(e&&"undefined"!=typeof document){var i=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css","top"===n&&i.firstChild?i.insertBefore(o,i.firstChild):i.appendChild(o),o.styleSheet?o.styleSheet.cssText=e:o.appendChild(document.createTextNode(e))}}var S={"combobox-container":"select_combobox-container__0lRpm","left-column":"select_left-column__cSrMR","combobox-label":"select_combobox-label__F9Ayd",container:"select_container__yrA-N",suggestion:"select_suggestion__b05iD",suggestionHighlighted:"select_suggestionHighlighted__ZFPWo",suggestionsContainerOpen:"select_suggestionsContainerOpen__9wcJ5",input:"select_input__pK5vk"};w(".select_combobox-container__0lRpm {\n background-color: #fff;\n border: solid #888 1px;\n display: flex;\n align-items: center;\n border-radius: 5px;\n height: 50px;\n justify-content: space-between;\n flex-grow: 1; }\n .select_combobox-container__0lRpm:focus-within {\n border-color: #007ac9; }\n .select_combobox-container__0lRpm .select_left-column__cSrMR {\n display: flex;\n flex-direction: column;\n width: 100%; }\n\n.select_combobox-label__F9Ayd {\n font-size: 12px;\n line-height: 20px;\n color: #666;\n letter-spacing: -0.48px;\n margin-left: 12px;\n margin-top: 4px; }\n\n.select_container__yrA-N {\n position: relative; }\n .select_container__yrA-N .select_suggestion__b05iD {\n font-size: 15px;\n line-height: 49px;\n height: 50px;\n padding: 0 0 0 12px;\n letter-spacing: -0.6px;\n color: #333;\n font-weight: 500; }\n .select_container__yrA-N .select_suggestionHighlighted__ZFPWo {\n font-size: 15px;\n font-weight: 500;\n background: #f2f5f7; }\n .select_container__yrA-N .select_suggestionsContainerOpen__9wcJ5 {\n position: absolute;\n background-color: #fff;\n z-index: 20;\n max-height: 250px;\n overflow-x: hidden;\n overflow-y: scroll;\n border-radius: 5px;\n box-shadow: 0 2px 0 0 rgba(0, 0, 0, 0.06);\n border: 1px rgba(0, 0, 0, 0.1) solid;\n top: 35px;\n width: calc(100% + 45px); }\n .select_container__yrA-N .select_suggestionsContainerOpen__9wcJ5 ul {\n padding: 0;\n margin: 0; }\n .select_container__yrA-N .select_suggestionsContainerOpen__9wcJ5 li:not(:last-child) {\n border-bottom: 1px solid #ddd; }\n .select_container__yrA-N .select_input__pK5vk {\n -moz-appearance: none;\n appearance: none;\n margin: -4px 0 0 0;\n padding-left: 12px;\n border: none;\n height: 26px;\n background: #fff;\n font-weight: 500;\n box-shadow: none;\n font-size: 15px;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.33;\n letter-spacing: -0.6px;\n color: #333; }\n .select_container__yrA-N .select_input__pK5vk:focus {\n outline: none;\n border: none;\n box-shadow: none;\n background: #fff; }\n .select_container__yrA-N .select_input__pK5vk:-moz-read-only {\n cursor: pointer;\n background: #fff; }\n .select_container__yrA-N .select_input__pK5vk:read-only {\n cursor: pointer;\n background: #fff; }\n");const E=["ref"],C=({value:e,getDisplay:t,options:n,onSlackTimeSelected:o,viaPointIndex:s,id:a,label:l,icon:r})=>{const[c,p]=i.useState(t(e)),[d,u]=i.useState(!1);i.useEffect((()=>p(t(e))),[e]);const h=i.useRef(null),g=Math.floor(e/600);i.useLayoutEffect((()=>{d&&h.current&&(h.current.scrollTop=50*g)}),[e,d]);const f=`${a}-input`,v=`${a}-label`;return _.default.createElement("label",{className:S["combobox-container"],htmlFor:f},_.default.createElement("span",{className:S["left-column"]},_.default.createElement("span",{className:S["combobox-label"],id:v},l),_.default.createElement(y.default,{id:a,suggestions:n,getSuggestionValue:e=>e.value,renderSuggestion:e=>e.displayName,onSuggestionsFetchRequested:()=>null,shouldRenderSuggestions:()=>!0,focusInputOnSuggestionClick:!1,onSuggestionsClearRequested:()=>null,inputProps:{value:c,onChange:(t,{newValue:n,method:i})=>{switch(i){case"enter":case"click":o(n,s);break;case"escape":p(e)}},onFocus:()=>{u(!0)},onBlur:()=>{u(!1)},id:f,"aria-labelledby":v,"aria-autocomplete":"none",readOnly:!0},renderSuggestionsContainer:({containerProps:e,children:t})=>{const{ref:n}=e,i=k(e,E);return _.default.createElement("div",Object.assign({tabIndex:"-1"},i,{ref:e=>{e&&(h.current=e,n(e))}}),t)},theme:S})),r)};"production"!==process.env.NODE_ENV&&(C.propTypes={value:u.default.number.isRequired,onSlackTimeSelected:u.default.func.isRequired,getDisplay:u.default.func.isRequired,options:u.default.arrayOf(u.default.shape({displayName:u.default.string.isRequired,value:u.default.number.isRequired}).isRequired).isRequired,id:u.default.string.isRequired,label:u.default.node.isRequired,icon:u.default.node.isRequired,viaPointIndex:u.default.number.isRequired});const P={de:{"add-via-button-label":"Füge Zwischenziel hinzu","add-via-duration-button-label":"Setze Umsteigezeit für Zwischenziel {{index}}","add-via-duration-button-label-close":"Schließe Umsteigezeit-Auswahl für Zwischenziel {{index}}","add-via-duration-button-label-open":"Öffne Umsteigezeit-Auswahl für Zwischenziel {{index}}","minute-short":"min","remove-via-button-label":"Entferne Zwischenziel {{index}}","swap-order-button-label":"Tausche Start mit Ziel","via-point":"Zwischenziel","via-point-index":"Zwischenziel {{index}}","viapoint-slack-amount":"Umsteigezeit"},en:{"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}}","minute-short":"min","remove-via-button-label":"Remove via point {{index}}","swap-order-button-label":"Reverse origin and destination","via-point":"Via point","via-point-index":"Via point {{index}}","viapoint-slack-amount":"Stop duration"},fi:{"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","minute-short":"min","remove-via-button-label":"Poista välipiste {{index}}","swap-order-button-label":"Käännä reitin suunta vastakkaiseksi","via-point":"Välipiste","via-point-index":"Välipiste {{index}}","viapoint-slack-amount":"Pysähdyksen kesto"},pl:{"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}}","minute-short":"min.","remove-via-button-label":"Usuń punkt pośredni {{index}}","swap-order-button-label":"Odwróć początek i cel","via-point":"Punkt pośredni","via-point-index":"Punkt pośredni {{index}}","viapoint-slack-amount":"Czas postoju"},sv:{"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}}","minute-short":"min","remove-via-button-label":"Ta bort viapunkt {{index}}","swap-order-button-label":"Sväng ruttens riktning till den motsatta","via-point":"Via punkt","via-point-index":"Via punkt {{index}}","viapoint-slack-amount":"Stoppets varaktighet"}};var N={"autosuggest-panel":"styles_autosuggest-panel__meNwd","autosuggest-searchpanel-text":"styles_autosuggest-searchpanel-text__-VQTg","origin-input-container":"styles_origin-input-container__p4Qik","destination-input-container":"styles_destination-input-container__jBY4I",row:"styles_row__1GhCD","viapoints-container":"styles_viapoints-container__FYp7K","viapoint-container":"styles_viapoint-container__8yh1M","light-gray-background":"styles_light-gray-background__4fyZs","viapoint-before":"styles_viapoint-before__t4saF","viapoint-input-container":"styles_viapoint-input-container__uZx95","viapoint-1":"styles_viapoint-1__8Mna8",viapoint:"styles_viapoint__vUO9L","viapoint-2":"styles_viapoint-2__-OoUa","viapoint-3":"styles_viapoint-3__vvivE","viapoint-4":"styles_viapoint-4__jS9k1","viapoint-5":"styles_viapoint-5__J4V5N","viapoint-slack-time":"styles_viapoint-slack-time__Xpo0G","select-wrapper":"styles_select-wrapper__1usZw","via-point-button-container":"styles_via-point-button-container__cI2JI","input-viapoint-slack-container":"styles_input-viapoint-slack-container__TNgVy","itinerary-search-control":"styles_itinerary-search-control__cEL1X",opposite:"styles_opposite__zQQhd","add-via-point":"styles_add-via-point__E-gGB","add-via-point-slack":"styles_add-via-point-slack__GKjFf","remove-via-point":"styles_remove-via-point__e9DMQ","combobox-icon":"styles_combobox-icon__d3k1e","time-input-icon":"styles_time-input-icon__M8dmw","rectangle-container":"styles_rectangle-container__AdbAA",rectangle:"styles_rectangle__1IO7E","search-panel-whitespace":"styles_search-panel-whitespace__Luhwx"};w(".styles_autosuggest-panel__meNwd {\n width: 100%; }\n\n.styles_autosuggest-searchpanel-text__-VQTg {\n font-size: 24px;\n font-weight: var(--font-weight-medium);\n letter-spacing: -0.8px;\n color: #333;\n line-height: 1;\n margin-bottom: 17px;\n margin-top: unset; }\n @media screen and (min-width: 768px) {\n .styles_autosuggest-searchpanel-text__-VQTg {\n letter-spacing: -0.8px;\n line-height: 27px;\n margin-bottom: 21px; } }\n\n.styles_origin-input-container__p4Qik,\n.styles_destination-input-container__jBY4I {\n display: flex;\n flex: 1 0 100%; }\n .styles_origin-input-container__p4Qik input[type='text'],\n .styles_destination-input-container__jBY4I input[type='text'] {\n margin: 0; }\n\n.styles_row__1GhCD {\n display: flex;\n flex-direction: row; }\n\n.styles_viapoints-container__FYp7K {\n display: flex;\n flex-direction: column; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M {\n display: flex;\n flex: 1 0 100%;\n min-height: 50px; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M:first-child {\n margin-top: 6px; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M:not(:first-child) {\n margin-top: 3px; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M:last-child {\n margin-bottom: 6px; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs {\n display: flex;\n padding: 3px 0;\n flex-direction: column;\n background: #f2f5f7;\n border-radius: 5px;\n width: 100%; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-before__t4saF {\n display: flex;\n min-width: 27px;\n justify-content: center;\n align-items: center; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-before__t4saF svg {\n fill: #888;\n height: 20px; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-input-container__uZx95 {\n display: flex;\n align-items: center;\n width: 100%; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-input-container__uZx95 input[type='text'] {\n margin: 0; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-input-container__uZx95.styles_viapoint-1__8Mna8 > div.styles_viapoint__vUO9L {\n z-index: 15; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-input-container__uZx95.styles_viapoint-2__-OoUa > div.styles_viapoint__vUO9L {\n z-index: 14; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-input-container__uZx95.styles_viapoint-3__vvivE > div.styles_viapoint__vUO9L {\n z-index: 13; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-input-container__uZx95.styles_viapoint-4__jS9k1 > div.styles_viapoint__vUO9L {\n z-index: 12; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-input-container__uZx95.styles_viapoint-5__J4V5N > div.styles_viapoint__vUO9L {\n z-index: 11; }\n\n.styles_viapoint-slack-time__Xpo0G {\n font-size: 13px;\n font-weight: normal;\n letter-spacing: -0.36px;\n color: #333;\n padding-left: 27px;\n padding-top: 12px;\n padding-bottom: 10px; }\n\n.styles_select-wrapper__1usZw {\n display: flex;\n height: 50px;\n margin-top: 9px;\n padding-left: 27px;\n padding-right: 47px; }\n\n.styles_via-point-button-container__cI2JI {\n display: flex; }\n .styles_via-point-button-container__cI2JI > div:nth-child(1) {\n order: 1;\n border-left: none; }\n .styles_via-point-button-container__cI2JI > div:nth-child(2) {\n order: 2;\n border-left: 1px solid rgba(151, 151, 151, 0.2); }\n\n.styles_input-viapoint-slack-container__TNgVy {\n display: flex;\n flex-direction: column; }\n\n.styles_itinerary-search-control__cEL1X {\n display: flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n max-height: 50px;\n min-width: var(--width); }\n .styles_itinerary-search-control__cEL1X + .styles_itinerary-search-control__cEL1X {\n border-left: 1px solid rgba(151, 151, 151, 0.2); }\n .styles_itinerary-search-control__cEL1X .styles_opposite__zQQhd {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n min-width: 40px;\n cursor: pointer; }\n .styles_itinerary-search-control__cEL1X .styles_opposite__zQQhd svg {\n width: 19px;\n height: 17px; }\n .styles_itinerary-search-control__cEL1X .styles_add-via-point__E-gGB {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n min-width: 40px;\n cursor: pointer; }\n .styles_itinerary-search-control__cEL1X .styles_add-via-point__E-gGB svg {\n width: 20px;\n height: 22px; }\n .styles_itinerary-search-control__cEL1X .styles_add-via-point-slack__GKjFf {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n min-width: 47px;\n cursor: pointer; }\n .styles_itinerary-search-control__cEL1X .styles_add-via-point-slack__GKjFf svg {\n width: 18px;\n height: 19px; }\n .styles_itinerary-search-control__cEL1X .styles_remove-via-point__e9DMQ {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n max-height: 44px;\n min-width: 40px;\n cursor: pointer; }\n .styles_itinerary-search-control__cEL1X .styles_remove-via-point__e9DMQ svg {\n width: 14px;\n height: 14px; }\n\n.styles_combobox-icon__d3k1e {\n color: var(--color);\n border-left: solid #888 1px;\n height: 35px; }\n .styles_combobox-icon__d3k1e.styles_time-input-icon__M8dmw {\n padding: 9px 13px 0 13px; }\n .styles_combobox-icon__d3k1e.styles_time-input-icon__M8dmw svg {\n width: 18px;\n height: 19px; }\n\n.styles_rectangle-container__AdbAA {\n display: block;\n position: relative;\n height: 9px;\n z-index: 19; }\n .styles_rectangle-container__AdbAA .styles_rectangle__1IO7E {\n position: absolute;\n width: 4px;\n height: 21px;\n border-radius: 2px;\n background-color: #ddd;\n margin-left: 25px;\n margin-top: -5px; }\n\n.styles_search-panel-whitespace__Luhwx {\n min-width: 40px; }\n");const A=["children","className","enabled","onClick","onKeyPress","wide"];Object.keys(P).forEach((e=>h.default.addResourceBundle(e,"translation",P[e],!0)));const V=()=>({}),R=e=>{if(void 0===e||v.default(e))return!0;const t=Object.keys(e);return 1===t.length||2===t.length&&t.includes("locationSlack")},O=e=>{let{children:t,className:n,enabled:i,onClick:o,onKeyPress:s,wide:a}=e,l=k(e,A);return _.default.createElement("div",{className:N["itinerary-search-control"],style:{"--width":a?"47px":"40px"}},o&&i&&_.default.createElement("div",Object.assign({},l,{className:n,onClick:o,onKeyPress:s,role:"button",tabIndex:"0"}),t))},I=(e,t,n=!1)=>{const i=e.indexOf(t);return i>-1&&e.splice(i,1),n?e.map((e=>e>t?e-1:e)):e},M=e=>{const t=e&&(e.key||e.which||e.keyCode)||"";return!(!t||![13," ","Spacebar"].concat([32,"Enter"]).includes(t))&&(e.preventDefault(),!0)},j=e=>e&&e.address||e&&e.gps&&e.ready&&"Nykyinen sijainti"||"",F=e=>e&&!0===e.gps?"position":"location";"production"!==process.env.NODE_ENV&&(O.propTypes={children:u.default.node,className:u.default.string.isRequired,enabled:u.default.bool.isRequired,onClick:u.default.func.isRequired,onKeyPress:u.default.func.isRequired,wide:u.default.bool}),O.defaultProps={children:void 0,wide:!1};const L="production"!==process.env.NODE_ENV?u.default.shape({address:u.default.string,lat:u.default.number,lon:u.default.number,locationSlack:u.default.number}):{};class z extends _.default.Component{constructor(e){super(e),x(this,"storeReference",(e=>{this.setState((t=>({refs:[...t.refs,e]})))})),x(this,"handleFocusChange",(()=>{const{destination:e}=this.props;e&&e.lat||this.state.refs[1].focus()})),x(this,"updateViaPoints",(e=>{0!==e.length?this.props.updateViaPoints(e.filter((e=>!R(e)))):this.props.updateViaPoints([])})),x(this,"handleToggleViaPointSlackClick",(e=>{const{activeSlackInputs:t}=this.state;this.setState({activeSlackInputs:t.includes(e)?I(t,e):t.concat([e])})})),x(this,"handleViaPointSlackTimeSelected",((e,t)=>{this.props.addAnalyticsEvent&&this.props.addAnalyticsEvent({action:"EditViaPointStopDuration",category:"ItinerarySettings",name:e/60});const{viaPoints:n}=this.props;n[t].locationSlack=Number.parseInt(e,10),this.updateViaPoints(n)})),x(this,"handleViaPointLocationSelected",((e,t)=>{this.props.handleViaPointLocationSelected(e,t)})),x(this,"handleRemoveViaPointClick",(e=>{this.props.addAnalyticsEvent&&this.props.addAnalyticsEvent({action:"RemoveJourneyViaPoint",category:"ItinerarySettings",name:null});const{activeSlackInputs:t}=this.state,{viaPoints:n}=this.props;n.splice(e,1),this.setState({activeSlackInputs:I(t,e,!0)},(()=>this.updateViaPoints(n)))})),x(this,"handleAddViaPointClick",(()=>{this.props.addAnalyticsEvent&&this.props.addAnalyticsEvent({action:"AddJourneyViaPoint",category:"ItinerarySettings",name:"QuickSettingsButton"});const{viaPoints:e}=this.props;e.push({}),this.setState(this.state)})),x(this,"handleSwapOrderClick",(()=>{this.props.addAnalyticsEvent&&this.props.addAnalyticsEvent({action:"SwitchJourneyStartAndEndPointOrder",category:"ItinerarySettings",name:null});const{viaPoints:e}=this.props;e.reverse(),this.props.swapOrder()})),x(this,"getSlackDisplay",(e=>`${e/60} ${h.default.t("minute-short",{lng:this.props.lang})}`)),this.state={activeSlackInputs:[],refs:[]}}render(){const{origin:e,searchPanelText:t,searchContext:n,disableAutoFocus:i,viaPoints:s,originMobileLabel:a,destinationMobileLabel:l,fontWeights:r,onFocusChange:c,showSwapControl:p,showViapointControl:u}=this.props,v=this.props.lang,{activeSlackInputs:y}=this.state,m=(()=>{const e=[];for(let t=0;t<=9;t++){const n=10*t;e.push({displayName:`${n} ${h.default.t("minute-short")}`,value:60*n})}return e})(),b=(e,t=0)=>e&&e.locationSlack||t,x=e=>y.includes(e);return _.default.createElement("div",{className:d.default(N["autosuggest-panel"],this.props.isMobile&&"small"),style:{"--color":`${this.props.color}`,"--font-weight-medium":r.medium}}," ",t?_.default.createElement("div",null,_.default.createElement("h1",{className:N["autosuggest-searchpanel-text"]}," ",t)):null,_.default.createElement("div",{className:N["origin-input-container"]},_.default.createElement(g.default,{appElement:this.props.appElement,icon:"mapMarker",id:"origin",autoFocus:!0!==i&&(!this.props.isMobile&&!e.lat),storeRef:this.storeReference,refPoint:this.props.refPoint,className:F(e),placeholder:this.props.originPlaceHolder,value:j(e),searchContext:n,getAutoSuggestIcons:this.props.getAutoSuggestIcons,onSelect:this.props.onSelect,onClear:this.props.onClear,focusChange:c||this.handleFocusChange,lang:this.props.lang,sources:this.props.sources,targets:this.props.targets,filterResults:this.props.filterResults,isMobile:this.props.isMobile,color:this.props.color,hoverColor:this.props.hoverColor,mobileLabel:a,fontWeights:this.props.fontWeights,modeSet:this.props.modeSet,modeIconColors:this.props.modeIconColors,showScroll:this.props.showScroll,isEmbedded:this.props.isEmbedded}),(p||u)&&_.default.createElement(O,{className:N.opposite,enabled:p,onClick:()=>this.handleSwapOrderClick(),onKeyPress:e=>M(e)&&this.handleSwapOrderClick(),"aria-label":h.default.t("swap-order-button-label",{lng:v})},_.default.createElement(f.default,{img:"opposite",color:this.props.color}))),0===s.length&&_.default.createElement("div",{className:N["rectangle-container"]},_.default.createElement("div",{className:N.rectangle})),_.default.createElement(o.ReactSortable,{className:N["viapoints-container"],list:s,handle:`.${N["viapoint-before"]}`,animation:200,disabled:s.length<=1,setList:e=>{const t=e.filter((e=>!R(e)));t.length>0&&this.props.updateViaPoints(t)}},s.map(((e,t)=>_.default.createElement("div",{className:d.default(N["viapoint-container"]),key:`viapoint-${t}`},_.default.createElement("div",{className:N["light-gray-background"]},_.default.createElement("div",{className:N.row},_.default.createElement("div",{className:N["viapoint-before"],style:s.length>1?{cursor:"move"}:{}},s.length>1&&_.default.createElement(f.default,{img:"ellipsis",rotate:90,color:this.props.color})),_.default.createElement("div",{className:`${N["viapoint-input-container"]} ${N[`viapoint-${t+1}`]}`},_.default.createElement(g.default,{appElement:this.props.appElement,icon:"mapMarker-via",id:"via-point",ariaLabel:h.default.t("via-point-index",{index:t+1,lng:v}),autoFocus:!0!==i&&!this.props.isMobile,placeholder:"via-point",className:"viapoint",searchContext:n,refPoint:this.props.refPoint,value:e&&e.address||"",onSelect:this.props.onSelect,onClear:this.props.onClear,handleViaPoints:e=>this.handleViaPointLocationSelected(e,t),lang:this.props.lang,sources:this.props.sources,targets:["Stops","Stations"],filterResults:this.props.filterResults,getAutoSuggestIcons:this.props.getAutoSuggestIcons,isMobile:this.props.isMobile,color:this.props.color,hoverColor:this.props.hoverColor,fontWeights:this.props.fontWeights,modeSet:this.props.modeSet,modeIconColors:this.props.modeIconColors,showScroll:this.props.showScroll})),this.props.showSlackControl&&_.default.createElement(O,{className:N["add-via-point-slack"],enabled:this.props.showViapointControl,onClick:()=>this.handleToggleViaPointSlackClick(t),onKeyPress:e=>M(e)&&this.handleToggleViaPointSlackClick(t),"aria-label":h.default.t(x(t)?"add-via-duration-button-label-open":"add-via-duration-button-label-close",{index:t+1,lng:v}),wide:!0},_.default.createElement(f.default,{img:"time",color:this.props.color}))),!x(t)&&s[t]&&s[t].locationSlack>0&&_.default.createElement("span",{className:N["viapoint-slack-time"]},`${h.default.t("viapoint-slack-amount",{lng:v})}: ${this.getSlackDisplay(s[t].locationSlack)}`),_.default.createElement("div",{className:d.default(N["input-viapoint-slack-container"],!x(t)&&"collapsed")},_.default.createElement("div",{className:N["select-wrapper"]},_.default.createElement(C,{id:`viapoint-slack-${t}`,label:h.default.t("viapoint-slack-amount",{lng:v}),options:m,value:b(s[t]),getDisplay:this.getSlackDisplay,viaPointIndex:t,icon:_.default.createElement("span",{className:`${N["combobox-icon"]} ${N["time-input-icon"]}`},_.default.createElement(f.default,{img:"time",color:this.props.color})),onSlackTimeSelected:this.handleViaPointSlackTimeSelected})))),_.default.createElement(O,{className:N["remove-via-point"],enabled:this.props.showViapointControl,onClick:()=>this.handleRemoveViaPointClick(t),onKeyPress:e=>M(e)&&this.handleRemoveViaPointClick(t),"aria-label":h.default.t("remove-via-button-label",{index:t+1,lng:v})},_.default.createElement(f.default,{img:"trash",color:this.props.color})))))),_.default.createElement("div",{className:N["destination-input-container"]},_.default.createElement(g.default,{appElement:this.props.appElement,icon:"mapMarker",id:"destination",autoFocus:!0!==i&&(!this.props.isMobile&&!Number.isNaN(e.lat)),storeRef:this.storeReference,placeholder:this.props.destinationPlaceHolder,className:F(this.props.destination),getAutoSuggestIcons:this.props.getAutoSuggestIcons,searchContext:n,onSelect:this.props.onSelect,onClear:this.props.onClear,refPoint:this.props.refPoint,value:j(this.props.destination),lang:this.props.lang,sources:this.props.sources,targets:this.props.targets,filterResults:this.props.filterResults,isMobile:this.props.isMobile,color:this.props.color,hoverColor:this.props.hoverColor,mobileLabel:l,fontWeights:this.props.fontWeights,modeSet:this.props.modeSet,modeIconColors:this.props.modeIconColors,showScroll:this.props.showScroll,isEmbedded:this.props.isEmbedded}),(p||u)&&_.default.createElement(O,{className:d.default(N["add-via-point"],N.more,s.length>4&&"collapsed"),enabled:u&&0===s.length,onClick:()=>this.handleAddViaPointClick(),onKeyPress:e=>M(e)&&this.handleAddViaPointClick(),"aria-label":h.default.t("add-via-button-label",{lng:v})},_.default.createElement(f.default,{img:"viapoint",width:1.25,height:1.375,color:this.props.color}))))}}x(z,"defaultProps",{origin:void 0,destination:void 0,viaPoints:[],originPlaceHolder:"give-origin",destinationPlaceHolder:"give-destination",swapOrder:void 0,updateViaPoints:()=>{},searchPanelText:void 0,sources:[],targets:[],filterResults:void 0,onClear:void 0,getAutoSuggestIcons:void 0,refPoint:void 0,addAnalyticsEvent:void 0,disableAutoFocus:!1,isMobile:!1,handleViaPointLocationSelected:void 0,color:"#007ac9",hoverColor:"#0062a1",originMobileLabel:null,destinationMobileLabel:null,modeSet:void 0,modeIconColors:void 0,fontWeights:{medium:500},showScroll:!1,onFocusChange:void 0,isEmbedded:!1,showSwapControl:!1,showViapointControl:!1,showSlackControl:!1}),"production"!==process.env.NODE_ENV&&(z.propTypes={appElement:u.default.string.isRequired,origin:L,destination:L,originPlaceHolder:u.default.string,destinationPlaceHolder:u.default.string,viaPoints:u.default.arrayOf(L),updateViaPoints:u.default.func,handleViaPointLocationSelected:u.default.func,swapOrder:u.default.func,searchPanelText:u.default.string,searchContext:u.default.shape({URL_PELIAS:u.default.string}).isRequired,onSelect:u.default.func.isRequired,onClear:u.default.func,addAnalyticsEvent:u.default.func,lang:u.default.string.isRequired,disableAutoFocus:u.default.bool,sources:u.default.arrayOf(u.default.string),targets:u.default.arrayOf(u.default.string),filterResults:u.default.func,isMobile:u.default.bool,color:u.default.string,hoverColor:u.default.string,originMobileLabel:u.default.string,destinationMobileLabel:u.default.string,refPoint:L,modeSet:u.default.string,modeIconColors:u.default.objectOf(u.default.string),getAutoSuggestIcons:u.default.objectOf(u.default.func),fontWeights:u.default.shape({medium:u.default.number}),showScroll:u.default.bool,onFocusChange:u.default.func,isEmbedded:u.default.bool,showSwapControl:u.default.bool,showViapointControl:u.default.bool,showSlackControl:u.default.bool}),e.default=z,e.getEmptyViaPointPlaceHolder=V,Object.defineProperty(e,"__esModule",{value:!0})}));
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZGV2ZWxvcG1lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWluamVjdC9kaXN0L3N0eWxlLWluamVjdC5lcy5qcyIsIi4uL3NyYy9oZWxwZXJzL1NlbGVjdC5qcyIsIi4uL3NyYy9oZWxwZXJzL3RyYW5zbGF0aW9ucy5qcyIsIi4uL3NyYy9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG87XG4gIH0gOiBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvO1xuICB9LCBfdHlwZW9mKG8pO1xufVxuZXhwb3J0IHsgX3R5cGVvZiBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgdG9QcmltaXRpdmUgZnJvbSBcIi4vdG9QcmltaXRpdmUuanNcIjtcbmZ1bmN0aW9uIHRvUHJvcGVydHlLZXkodCkge1xuICB2YXIgaSA9IHRvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpO1xuICByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiO1xufVxuZXhwb3J0IHsgdG9Qcm9wZXJ0eUtleSBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5mdW5jdGlvbiB0b1ByaW1pdGl2ZSh0LCByKSB7XG4gIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0O1xuICB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTtcbiAgaWYgKHZvaWQgMCAhPT0gZSkge1xuICAgIHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpO1xuICAgIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpO1xufVxuZXhwb3J0IHsgdG9QcmltaXRpdmUgYXMgZGVmYXVsdCB9OyIsImltcG9ydCB0b1Byb3BlcnR5S2V5IGZyb20gXCIuL3RvUHJvcGVydHlLZXkuanNcIjtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7XG4gIHJldHVybiAociA9IHRvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwge1xuICAgIHZhbHVlOiB0LFxuICAgIGVudW1lcmFibGU6ICEwLFxuICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgd3JpdGFibGU6ICEwXG4gIH0pIDogZVtyXSA9IHQsIGU7XG59XG5leHBvcnQgeyBfZGVmaW5lUHJvcGVydHkgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBvYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCIuL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanNcIjtcbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhlLCB0KSB7XG4gIGlmIChudWxsID09IGUpIHJldHVybiB7fTtcbiAgdmFyIG8sXG4gICAgcixcbiAgICBpID0gb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShlLCB0KTtcbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7XG4gICAgZm9yIChyID0gMDsgciA8IG4ubGVuZ3RoOyByKyspIG8gPSBuW3JdLCAtMSA9PT0gdC5pbmRleE9mKG8pICYmIHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSwgbykgJiYgKGlbb10gPSBlW29dKTtcbiAgfVxuICByZXR1cm4gaTtcbn1cbmV4cG9ydCB7IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UociwgZSkge1xuICBpZiAobnVsbCA9PSByKSByZXR1cm4ge307XG4gIHZhciB0ID0ge307XG4gIGZvciAodmFyIG4gaW4gcikgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwociwgbikpIHtcbiAgICBpZiAoLTEgIT09IGUuaW5kZXhPZihuKSkgY29udGludWU7XG4gICAgdFtuXSA9IHJbbl07XG4gIH1cbiAgcmV0dXJuIHQ7XG59XG5leHBvcnQgeyBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gc3R5bGVJbmplY3QoY3NzLCByZWYpIHtcbiAgaWYgKCByZWYgPT09IHZvaWQgMCApIHJlZiA9IHt9O1xuICB2YXIgaW5zZXJ0QXQgPSByZWYuaW5zZXJ0QXQ7XG5cbiAgaWYgKCFjc3MgfHwgdHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm47IH1cblxuICB2YXIgaGVhZCA9IGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcbiAgdmFyIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgc3R5bGUudHlwZSA9ICd0ZXh0L2Nzcyc7XG5cbiAgaWYgKGluc2VydEF0ID09PSAndG9wJykge1xuICAgIGlmIChoZWFkLmZpcnN0Q2hpbGQpIHtcbiAgICAgIGhlYWQuaW5zZXJ0QmVmb3JlKHN0eWxlLCBoZWFkLmZpcnN0Q2hpbGQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gIH1cblxuICBpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgfSBlbHNlIHtcbiAgICBzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBzdHlsZUluamVjdDtcbiIsImltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VMYXlvdXRFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQXV0b3N1Z2dlc3QgZnJvbSAncmVhY3QtYXV0b3N1Z2dlc3QnO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3NlbGVjdC5zY3NzJztcblxuY29uc3QgU2VsZWN0ID0gKHtcbiAgdmFsdWUsXG4gIGdldERpc3BsYXksXG4gIG9wdGlvbnMsXG4gIG9uU2xhY2tUaW1lU2VsZWN0ZWQsXG4gIHZpYVBvaW50SW5kZXgsXG4gIGlkLFxuICBsYWJlbCxcbiAgaWNvbixcbn0pID0+IHtcbiAgY29uc3QgW2Rpc3BsYXlWYWx1ZSwgY2hhbmdlRGlzcGxheVZhbHVlXSA9IHVzZVN0YXRlKGdldERpc3BsYXkodmFsdWUpKTtcbiAgY29uc3QgW29wZW4sIGNoYW5nZU9wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICB1c2VFZmZlY3QoKCkgPT4gY2hhbmdlRGlzcGxheVZhbHVlKGdldERpc3BsYXkodmFsdWUpKSwgW3ZhbHVlXSk7XG4gIGNvbnN0IHNjcm9sbFJlZiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3Qgc2Nyb2xsSW5kZXggPSBNYXRoLmZsb29yKHZhbHVlIC8gNjAwKTtcbiAgY29uc3QgZWxlbWVudEhlaWdodCA9IDUwO1xuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvcGVuICYmIHNjcm9sbFJlZi5jdXJyZW50KSB7XG4gICAgICBzY3JvbGxSZWYuY3VycmVudC5zY3JvbGxUb3AgPSBlbGVtZW50SGVpZ2h0ICogc2Nyb2xsSW5kZXg7XG4gICAgfVxuICB9LCBbdmFsdWUsIG9wZW5dKTtcblxuICBjb25zdCBpbnB1dElkID0gYCR7aWR9LWlucHV0YDtcbiAgY29uc3QgbGFiZWxJZCA9IGAke2lkfS1sYWJlbGA7XG5cbiAgY29uc3Qgb25JbnB1dENoYW5nZSA9IChfLCB7IG5ld1ZhbHVlLCBtZXRob2QgfSkgPT4ge1xuICAgIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgICBjYXNlICdlbnRlcic6XG4gICAgICBjYXNlICdjbGljayc6XG4gICAgICAgIG9uU2xhY2tUaW1lU2VsZWN0ZWQobmV3VmFsdWUsIHZpYVBvaW50SW5kZXgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2VzY2FwZSc6XG4gICAgICAgIGNoYW5nZURpc3BsYXlWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndXAnOlxuICAgICAgY2FzZSAnZG93bic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH07XG4gIHJldHVybiAoXG4gICAgPGxhYmVsIGNsYXNzTmFtZT17c3R5bGVzWydjb21ib2JveC1jb250YWluZXInXX0gaHRtbEZvcj17aW5wdXRJZH0+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlc1snbGVmdC1jb2x1bW4nXX0+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzWydjb21ib2JveC1sYWJlbCddfSBpZD17bGFiZWxJZH0+XG4gICAgICAgICAge2xhYmVsfVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxBdXRvc3VnZ2VzdFxuICAgICAgICAgIGlkPXtpZH1cbiAgICAgICAgICBzdWdnZXN0aW9ucz17b3B0aW9uc31cbiAgICAgICAgICBnZXRTdWdnZXN0aW9uVmFsdWU9e3MgPT4gcy52YWx1ZX1cbiAgICAgICAgICByZW5kZXJTdWdnZXN0aW9uPXtzID0+IHMuZGlzcGxheU5hbWV9XG4gICAgICAgICAgb25TdWdnZXN0aW9uc0ZldGNoUmVxdWVzdGVkPXsoKSA9PiBudWxsfVxuICAgICAgICAgIHNob3VsZFJlbmRlclN1Z2dlc3Rpb25zPXsoKSA9PiB0cnVlfVxuICAgICAgICAgIGZvY3VzSW5wdXRPblN1Z2dlc3Rpb25DbGljaz17ZmFsc2V9XG4gICAgICAgICAgb25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkPXsoKSA9PiBudWxsfVxuICAgICAgICAgIGlucHV0UHJvcHM9e3tcbiAgICAgICAgICAgIHZhbHVlOiBkaXNwbGF5VmFsdWUsXG4gICAgICAgICAgICBvbkNoYW5nZTogb25JbnB1dENoYW5nZSxcbiAgICAgICAgICAgIG9uRm9jdXM6ICgpID0+IHtcbiAgICAgICAgICAgICAgY2hhbmdlT3Blbih0cnVlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbkJsdXI6ICgpID0+IHtcbiAgICAgICAgICAgICAgY2hhbmdlT3BlbihmYWxzZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaWQ6IGlucHV0SWQsXG4gICAgICAgICAgICAnYXJpYS1sYWJlbGxlZGJ5JzogbGFiZWxJZCxcbiAgICAgICAgICAgICdhcmlhLWF1dG9jb21wbGV0ZSc6ICdub25lJyxcbiAgICAgICAgICAgIHJlYWRPbmx5OiB0cnVlLFxuICAgICAgICAgIH19XG4gICAgICAgICAgcmVuZGVyU3VnZ2VzdGlvbnNDb250YWluZXI9eyh7IGNvbnRhaW5lclByb3BzLCBjaGlsZHJlbiB9KSA9PiB7XG4gICAgICAgICAgICAvLyBzZXQgcmVmcyBmb3IgYXV0b3N1Z2dlc3QgbGlicmFyeSBhbmQgc2Nyb2xsYmFyIHBvc2l0aW9uaW5nXG4gICAgICAgICAgICBjb25zdCB7IHJlZiwgLi4ub3RoZXJSZWZzIH0gPSBjb250YWluZXJQcm9wcztcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lclJlZiA9IGVsZW0gPT4ge1xuICAgICAgICAgICAgICBpZiAoZWxlbSkge1xuICAgICAgICAgICAgICAgIHNjcm9sbFJlZi5jdXJyZW50ID0gZWxlbTtcbiAgICAgICAgICAgICAgICByZWYoZWxlbSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8ZGl2IHRhYkluZGV4PVwiLTFcIiB7Li4ub3RoZXJSZWZzfSByZWY9e2NvbnRhaW5lclJlZn0+XG4gICAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfX1cbiAgICAgICAgICB0aGVtZT17c3R5bGVzfVxuICAgICAgICAvPlxuICAgICAgPC9zcGFuPlxuICAgICAge2ljb259XG4gICAgPC9sYWJlbD5cbiAgKTtcbn07XG5cblNlbGVjdC5wcm9wVHlwZXMgPSB7XG4gIHZhbHVlOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIG9uU2xhY2tUaW1lU2VsZWN0ZWQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGdldERpc3BsYXk6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFxuICAgIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBkaXNwbGF5TmFtZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAgdmFsdWU6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgICB9KS5pc1JlcXVpcmVkLFxuICApLmlzUmVxdWlyZWQsXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGxhYmVsOiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuICBpY29uOiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuICB2aWFQb2ludEluZGV4OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBTZWxlY3Q7XG4iLCJjb25zdCB0cmFuc2xhdGlvbnMgPSB7XG4gIGRlOiB7XG4gICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0bDvGdlIFp3aXNjaGVuemllbCBoaW56dScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzpcbiAgICAgICdTZXR6ZSBVbXN0ZWlnZXplaXQgZsO8ciBad2lzY2hlbnppZWwge3tpbmRleH19JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgJ1NjaGxpZcOfZSBVbXN0ZWlnZXplaXQtQXVzd2FobCBmw7xyIFp3aXNjaGVuemllbCB7e2luZGV4fX0nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICfDlmZmbmUgVW1zdGVpZ2V6ZWl0LUF1c3dhaGwgZsO8ciBad2lzY2hlbnppZWwge3tpbmRleH19JyxcbiAgICAnbWludXRlLXNob3J0JzogJ21pbicsXG4gICAgJ3JlbW92ZS12aWEtYnV0dG9uLWxhYmVsJzogJ0VudGZlcm5lIFp3aXNjaGVuemllbCB7e2luZGV4fX0nLFxuICAgICdzd2FwLW9yZGVyLWJ1dHRvbi1sYWJlbCc6ICdUYXVzY2hlIFN0YXJ0IG1pdCBaaWVsJyxcbiAgICAndmlhLXBvaW50JzogJ1p3aXNjaGVuemllbCcsXG4gICAgJ3ZpYS1wb2ludC1pbmRleCc6ICdad2lzY2hlbnppZWwge3tpbmRleH19JyxcbiAgICAndmlhcG9pbnQtc2xhY2stYW1vdW50JzogJ1Vtc3RlaWdlemVpdCcsXG4gIH0sXG4gIGVuOiB7XG4gICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0FkZCB2aWEgcG9pbnQnLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6ICdTZXQgc3RvcCBkdXJhdGlvbiBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgJ0Nsb3NlIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgJ09wZW4gc3RvcCBkdXJhdGlvbiBzZWxlY3RvciBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAnbWludXRlLXNob3J0JzogJ21pbicsXG4gICAgJ3JlbW92ZS12aWEtYnV0dG9uLWxhYmVsJzogJ1JlbW92ZSB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAnc3dhcC1vcmRlci1idXR0b24tbGFiZWwnOiAnUmV2ZXJzZSBvcmlnaW4gYW5kIGRlc3RpbmF0aW9uJyxcbiAgICAndmlhLXBvaW50JzogJ1ZpYSBwb2ludCcsXG4gICAgJ3ZpYS1wb2ludC1pbmRleCc6ICdWaWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAndmlhcG9pbnQtc2xhY2stYW1vdW50JzogJ1N0b3AgZHVyYXRpb24nLFxuICB9LFxuICBmaToge1xuICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdMaXPDpMOkIHbDpGxpcGlzdGUnLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAnQXNldGEgdsOkbGlwaXN0ZWVsbGUge3tpbmRleH19IHB5c8OkaGR5a3NlbiBrZXN0bycsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICdBdmFhIHbDpGxpcGlzdGVlbiB7e2luZGV4fX0gcHlzw6RoZHlrc2VuIGtlc3RvIHZhbGl0c2luJyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAnU3VsamUgdsOkbGlwaXN0ZWVuIHt7aW5kZXh9fSBweXPDpGhkeWtzZW4ga2VzdG8gdmFsaXRzaW4nLFxuICAgICdtaW51dGUtc2hvcnQnOiAnbWluJyxcbiAgICAncmVtb3ZlLXZpYS1idXR0b24tbGFiZWwnOiAnUG9pc3RhIHbDpGxpcGlzdGUge3tpbmRleH19JyxcbiAgICAnc3dhcC1vcmRlci1idXR0b24tbGFiZWwnOiAnS8Okw6RubsOkIHJlaXRpbiBzdXVudGEgdmFzdGFra2Fpc2Vrc2knLFxuICAgICd2aWEtcG9pbnQnOiAnVsOkbGlwaXN0ZScsXG4gICAgJ3ZpYS1wb2ludC1pbmRleCc6ICdWw6RsaXBpc3RlIHt7aW5kZXh9fScsXG4gICAgJ3ZpYXBvaW50LXNsYWNrLWFtb3VudCc6ICdQeXPDpGhkeWtzZW4ga2VzdG8nLFxuICB9LFxuICBwbDoge1xuICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdEb2RhaiBwdW5rdCBwb8WbcmVkbmknLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAnV3liaWVyeiBjemFzIHBvc3RvanUgZGxhIHB1bmt0dSB7e2luZGV4fX0nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAnWmFta25paiB3eWJvcm5payBjemFzdSBwb3N0b2p1IHcgcHVua2NpZSB7e2luZGV4fX0nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICdPdHfDs3J6IHd5Ym9ybmlrIGN6YXN1IHBvc3RvanUgdyBwdW5rY2llIHt7aW5kZXh9fScsXG4gICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4uJyxcbiAgICAncmVtb3ZlLXZpYS1idXR0b24tbGFiZWwnOiAnVXN1xYQgcHVua3QgcG/Fm3JlZG5pIHt7aW5kZXh9fScsXG4gICAgJ3N3YXAtb3JkZXItYnV0dG9uLWxhYmVsJzogJ09kd3LDs8SHIHBvY3rEhXRlayBpIGNlbCcsXG4gICAgJ3ZpYS1wb2ludCc6ICdQdW5rdCBwb8WbcmVkbmknLFxuICAgICd2aWEtcG9pbnQtaW5kZXgnOiAnUHVua3QgcG/Fm3JlZG5pIHt7aW5kZXh9fScsXG4gICAgJ3ZpYXBvaW50LXNsYWNrLWFtb3VudCc6ICdDemFzIHBvc3RvanUnLFxuICB9LFxuICBzdjoge1xuICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdMw6RnZyB0aWxsIHZpYXB1bmt0JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwnOlxuICAgICAgJ1N0w6RsbCBpbiB2YXJha3RpZ2hldCBmw7ZyIHZpYXB1bmt0ZW4ge3tpbmRleH19JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgJ1N0w6RuZyB2w6RsamFyZW4gZsO2ciB2YXJha3RpZ2hldCB2aWQgdmlhLXB1bmt0ZW4ge3tpbmRleH19JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAnw5ZwcG5hIHbDpGxqYXJlbiBmw7ZyIHZhcmFrdGlnaGV0IHZpZCB2aWEtcHVua3RlbiB7e2luZGV4fX0nLFxuICAgICdtaW51dGUtc2hvcnQnOiAnbWluJyxcbiAgICAncmVtb3ZlLXZpYS1idXR0b24tbGFiZWwnOiAnVGEgYm9ydCB2aWFwdW5rdCB7e2luZGV4fX0nLFxuICAgICdzd2FwLW9yZGVyLWJ1dHRvbi1sYWJlbCc6ICdTdsOkbmcgcnV0dGVucyByaWt0bmluZyB0aWxsIGRlbiBtb3RzYXR0YScsXG4gICAgJ3ZpYS1wb2ludCc6ICdWaWEgcHVua3QnLFxuICAgICd2aWEtcG9pbnQtaW5kZXgnOiAnVmlhIHB1bmt0IHt7aW5kZXh9fScsXG4gICAgJ3ZpYXBvaW50LXNsYWNrLWFtb3VudCc6ICdTdG9wcGV0cyB2YXJha3RpZ2hldCcsXG4gIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCB0cmFuc2xhdGlvbnM7XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbmltcG9ydCBjeCBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgUmVhY3RTb3J0YWJsZSB9IGZyb20gJ3JlYWN0LXNvcnRhYmxlanMnO1xuaW1wb3J0IGkxOG5leHQgZnJvbSAnaTE4bmV4dCc7XG5pbXBvcnQgRFRBdXRvU3VnZ2VzdCBmcm9tICdAZGlnaXRyYW5zaXQtY29tcG9uZW50L2RpZ2l0cmFuc2l0LWNvbXBvbmVudC1hdXRvc3VnZ2VzdCc7XG5pbXBvcnQgSWNvbiBmcm9tICdAZGlnaXRyYW5zaXQtY29tcG9uZW50L2RpZ2l0cmFuc2l0LWNvbXBvbmVudC1pY29uJztcbmltcG9ydCBpc0VtcHR5IGZyb20gJ2xvZGFzaC9pc0VtcHR5JztcbmltcG9ydCBTZWxlY3QgZnJvbSAnLi9oZWxwZXJzL1NlbGVjdCc7XG5pbXBvcnQgdHJhbnNsYXRpb25zIGZyb20gJy4vaGVscGVycy90cmFuc2xhdGlvbnMnO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL2hlbHBlcnMvc3R5bGVzLnNjc3MnO1xuXG5PYmplY3Qua2V5cyh0cmFuc2xhdGlvbnMpLmZvckVhY2gobGFuZyA9PlxuICBpMThuZXh0LmFkZFJlc291cmNlQnVuZGxlKGxhbmcsICd0cmFuc2xhdGlvbicsIHRyYW5zbGF0aW9uc1tsYW5nXSwgdHJ1ZSksXG4pO1xuXG5leHBvcnQgY29uc3QgZ2V0RW1wdHlWaWFQb2ludFBsYWNlSG9sZGVyID0gKCkgPT4gKHt9KTtcblxuY29uc3QgaXNWaWFQb2ludEVtcHR5ID0gdmlhUG9pbnQgPT4ge1xuICBpZiAodmlhUG9pbnQgPT09IHVuZGVmaW5lZCB8fCBpc0VtcHR5KHZpYVBvaW50KSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh2aWFQb2ludCk7XG4gIHJldHVybiAoXG4gICAga2V5cy5sZW5ndGggPT09IDEgfHwgKGtleXMubGVuZ3RoID09PSAyICYmIGtleXMuaW5jbHVkZXMoJ2xvY2F0aW9uU2xhY2snKSlcbiAgKTtcbn07XG5cbmNvbnN0IEl0aW5lcmFyeVNlYXJjaENvbnRyb2wgPSAoe1xuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBlbmFibGVkLFxuICBvbkNsaWNrLFxuICBvbktleVByZXNzLFxuICB3aWRlLFxuICAuLi5yZXN0XG59KSA9PiAoXG4gIDxkaXZcbiAgICBjbGFzc05hbWU9e3N0eWxlc1snaXRpbmVyYXJ5LXNlYXJjaC1jb250cm9sJ119XG4gICAgc3R5bGU9e3sgJy0td2lkdGgnOiB3aWRlID8gJzQ3cHgnIDogJzQwcHgnIH19XG4gID5cbiAgICB7b25DbGljayAmJiBlbmFibGVkICYmIChcbiAgICAgIDxkaXZcbiAgICAgICAgey4uLnJlc3R9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgICBvbktleVByZXNzPXtvbktleVByZXNzfVxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgdGFiSW5kZXg9XCIwXCJcbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9kaXY+XG4gICAgKX1cbiAgPC9kaXY+XG4pO1xuXG5jb25zdCB1cGRhdGVWaWFQb2ludFNsYWNrID0gKFxuICBhY3RpdmVWaWFQb2ludFNsYWNrcyxcbiAgdXBkYXRlZFZpYVBvaW50SW5kZXgsXG4gIHZpYVBvaW50UmVtb3ZlZCA9IGZhbHNlLFxuKSA9PiB7XG4gIGNvbnN0IGZvdW5kQXRJbmRleCA9IGFjdGl2ZVZpYVBvaW50U2xhY2tzLmluZGV4T2YodXBkYXRlZFZpYVBvaW50SW5kZXgpO1xuICBpZiAoZm91bmRBdEluZGV4ID4gLTEpIHtcbiAgICBhY3RpdmVWaWFQb2ludFNsYWNrcy5zcGxpY2UoZm91bmRBdEluZGV4LCAxKTtcbiAgfVxuICByZXR1cm4gdmlhUG9pbnRSZW1vdmVkXG4gICAgPyBhY3RpdmVWaWFQb2ludFNsYWNrcy5tYXAodmFsdWUgPT5cbiAgICAgICAgdmFsdWUgPiB1cGRhdGVkVmlhUG9pbnRJbmRleCA/IHZhbHVlIC0gMSA6IHZhbHVlLFxuICAgICAgKVxuICAgIDogYWN0aXZlVmlhUG9pbnRTbGFja3M7XG59O1xuXG5jb25zdCBpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQgPSBldmVudCA9PiB7XG4gIGNvbnN0IHNwYWNlID0gWzEzLCAnICcsICdTcGFjZWJhciddO1xuICBjb25zdCBlbnRlciA9IFszMiwgJ0VudGVyJ107XG4gIGNvbnN0IGtleSA9IChldmVudCAmJiAoZXZlbnQua2V5IHx8IGV2ZW50LndoaWNoIHx8IGV2ZW50LmtleUNvZGUpKSB8fCAnJztcbiAgaWYgKCFrZXkgfHwgIXNwYWNlLmNvbmNhdChlbnRlcikuaW5jbHVkZXMoa2V5KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmNvbnN0IHZhbHVlID0gbG9jYXRpb24gPT5cbiAgKGxvY2F0aW9uICYmIGxvY2F0aW9uLmFkZHJlc3MpIHx8XG4gIChsb2NhdGlvbiAmJiBsb2NhdGlvbi5ncHMgJiYgbG9jYXRpb24ucmVhZHkgJiYgJ055a3lpbmVuIHNpamFpbnRpJykgfHxcbiAgJyc7XG5cbmNvbnN0IGdldExvY2F0aW9uVHlwZSA9IGxvY2F0aW9uID0+XG4gIGxvY2F0aW9uICYmIGxvY2F0aW9uLmdwcyA9PT0gdHJ1ZSA/ICdwb3NpdGlvbicgOiAnbG9jYXRpb24nO1xuXG5jb25zdCBnZXRTbGFja1RpbWVPcHRpb25zID0gKCkgPT4ge1xuICBjb25zdCB0aW1lT3B0aW9ucyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8PSA5OyBpKyspIHtcbiAgICBjb25zdCB2YWx1ZUluTWludXRlcyA9IGkgKiAxMDtcbiAgICB0aW1lT3B0aW9ucy5wdXNoKHtcbiAgICAgIGRpc3BsYXlOYW1lOiBgJHt2YWx1ZUluTWludXRlc30gJHtpMThuZXh0LnQoJ21pbnV0ZS1zaG9ydCcpfWAsXG4gICAgICB2YWx1ZTogdmFsdWVJbk1pbnV0ZXMgKiA2MCxcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdGltZU9wdGlvbnM7XG59O1xuXG5JdGluZXJhcnlTZWFyY2hDb250cm9sLnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgZW5hYmxlZDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25LZXlQcmVzczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgd2lkZTogUHJvcFR5cGVzLmJvb2wsXG59O1xuXG5JdGluZXJhcnlTZWFyY2hDb250cm9sLmRlZmF1bHRQcm9wcyA9IHtcbiAgY2hpbGRyZW46IHVuZGVmaW5lZCxcbiAgd2lkZTogZmFsc2UsXG59O1xuXG4vKipcbiAqIFBhbmVsIHRoYXQgcmVuZGVycyB0d28gRFRBdXRvc3VnZ2VzdCBzZWFyY2ggZmllbGRzLCBpbmNsdWRpbmcgdmlhcG9pbnQgaGFuZGxpbmdcbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3Qgc2VhcmNoQ29udGV4dCA9IHtcbiAqICAgaXNQZWxpYXNMb2NhdGlvbkF3YXJlOiBmYWxzZSAvLyB0cnVlIC8gZmFsc2UgZG9lcyBMZXQgUGVsaWFzIHN1Z2dlc3QgYmFzZWQgb24gY3VycmVudCB1c2VyIGxvY2F0aW9uXG4gKiAgIG1pbmltYWxSZWdleHA6IHVuZGVmaW5lZCAvLyB1c2VkIGZvciB0ZXN0aW5nIG1pbi4gcmVnZXhwLiBGb3IgZXhhbXBsZTogbmV3IFJlZ0V4cCgnLnsyLH0nKSxcbiAqICAgbGluZVJlZ2V4cDogdW5kZWZpbmVkIC8vICBpZGVudGlmeSBzZWFyY2hlcyBmb3Igcm91dGUgbnVtYmVycy9sYWJlbHM6IGJ1cyB8IHRyYWluIHwgbWV0cm8uIEZvciBleGFtcGxlOiBuZXcgUmVnRXhwKFxuICogICAgLy8gICAnKF5bMC05XStbYS16XT8kfF5beXVsZWFwaW5rcnRkel0kfChebVsxMl0/Yj8kKSknLFxuICogICAgLy8gICdpJyxcbiAqICAgIC8vICApLFxuICogICBVUkxfUEVMSUFTOiAnJyAvLyB1cmwgZm9yIHBlbGlhcyBzZWFyY2hlc1xuICogICBmZWVkSURzOiBbJ0hTTCcsICdIU0xMYXV0dGEnXSAvLyBGZWVkSWQncyBsaWtlICBbSFNMLCBIU0xMYXV0dGFdXG4gKiAgIGdlb2NvZGluZ1NvdXJjZXM6IFsnb2EnLCdvc20nLCdubHNmaSddICAvLyBzb3VyY2VzIGZvciBnZW9jb2RpbmdcbiAqICAgZ2VvY29kaW5nU2VhcmNoUGFyYW1zOyB7fSAgLy8gU2VhcmNocGFybWFzIGZybyBnZW9jb2RpbmdcbiAqICAgZ2V0RmF2b3VyaXRlTG9jYXRpb25zOiAoKSA9PiAoe30pLCAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgYXJyYXkgb2YgZmF2b3VyaXRlIGxvY2F0aW9ucy5cbiAqICAgZ2V0RmF2b3VyaXRlU3RvcHM6ICgpID0+ICh7fSksICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgYXJyYXkgb2YgZmF2b3VyaXRlIHN0b3BzLlxuICogICBnZXRMYW5ndWFnZTogKCkgPT4gKHt9KSwgICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBjdXJyZW50IGxhbmd1YWdlLlxuICogICBnZXRGYXZvdXJpdGVSb3V0ZXM6ICgpID0+ICh7fSksICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhcnJheSBvZiBmYXZvdXJpdGUgcm91dGVzLlxuICogICBnZXRQb3NpdGlvbnM6ICgpID0+ICh7fSksICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyB1c2VyJ3MgZ2VvbG9jYXRpb24uXG4gKiAgIGdldFJvdXRlc1F1ZXJ5OiAoKSA9PiAoe30pLCAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHF1ZXJ5IGZvciBmZXRjaGluZyByb3V0ZXMuXG4gKiAgIGdldFN0b3BBbmRTdGF0aW9uc1F1ZXJ5OiAoKSA9PiAoe30pLCAgLy8gRnVuY3Rpb24gdGhhdCBmZXRjaGVzIGZhdm91cml0ZSBzdG9wcyBhbmQgc3RhdGlvbnMgZnJvbSBncmFwaHFsIEFQSS5cbiAqICAgZ2V0RmF2b3VyaXRlUm91dGVzUXVlcnk6ICgpID0+ICh7fSksICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgcXVlcnkgZm9yIGZldGNoaW5nIGZhdm91cml0ZSByb3V0ZXMuXG4gKiAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uczogKCkgPT4gKHt9KSwgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBmYXZvdXJpdGUgYmlrZSByZW50YWwgc3RhdGlvbi5cbiAqICAgZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zUXVlcnk6ICgpID0+ICh7fSksIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBxdWVyeSBmb3IgZmV0Y2hpbmcgZmF2b3VyaXRlIGJpa2UgcmVudGFsIHN0YXRpb25zLlxuICogICBzdGFydExvY2F0aW9uV2F0Y2g6ICgpID0+ICh7fSksICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgbG9jYXRlcyB1c2VycyBnZW9sb2NhdGlvbi5cbiAqICAgc2F2ZVNlYXJjaDogKCkgPT4gKHt9KSwgICAgICAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHNhdmVzIHNlYXJjaCB0byBvbGQgc2VhcmNoZXMgc3RvcmUuXG4gKiAgIGNsZWFyT2xkU2VhcmNoZXM6ICgpID0+ICh7fSksICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBjbGVhcnMgb2xkIHNlYXJjaGVzIHN0b3JlLlxuICogICBnZXRGdXR1cmVSb3V0ZXM6ICgpID0+ICh7fSksICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJuIGZ1dHVyZSByb3V0ZXNcbiAqICAgc2F2ZUZ1dHVyZVJvdXRlOiAoKSA9PiAoe30pLCAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHNhdmVzIGEgZnV0dXJlIHJvdXRlXG4gKiAgIGNsZWFyRnV0dXJlUm91dGVzOiAoKSA9PiAoe30pLCAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBjbGVhcnMgZnV0dXJlIHJvdXRlc1xuICogfTtcbiAqXG4gKiBjb25zdCBvcmlnaW4gPSB7XG4gKiAgbGF0OiA2MC4xNjkxOTYsXG4gKiAgbG9uOiAyNC45NTc2NzQsXG4gKiAgYWRkcmVzczogJ0FsZWtzYW50ZXJpbmthdHUsIEhlbHNpbmtpJyxcbiAqICBzZXQ6IHRydWUsXG4gKiAgcmVhZHk6IHRydWUsXG4gKiB9XG4gKlxuICogY29uc3QgZGVzdGluYXRpb24gPSB7XG4gKiAgIGxhdDogNjAuMTk5MDkzLFxuICogICBsb246IDI0Ljk0MDUzNixcbiAqICAgYWRkcmVzczogJ09wYXN0aW5zaWx0YSA2LCBIZWxzaW5raScsXG4gKiAgIHNldDogdHJ1ZSxcbiAqICAgcmVhZHk6IHRydWUsXG4gKiB9XG4gKiBvblNlbGVjdChpdGVtLCBpZCkge1xuICogIHJldHVybiBudWxsOyAgLy8gRGVmaW5lIHdoYXQgdG8gZG8gd2hlbiBhIHN1Z2dlc3Rpb24gaXMgYmVpbmcgc2VsZWN0ZWQuIE5vbmUgYnkgZGVmYXVsdC5cbiAqICB9XG4gKiBvbkNsZWFyKGlkKSB7XG4gKiAgcmV0dXJuIG51bGw7ICAvLyBEZWZpbmUgd2hhdCB0byBkbyB3aGVuIGEgc3VnZ2VzdGlvbiBpcyBiZWluZyBzZWxlY3RlZC4gTm9uZSBieSBkZWZhdWx0LlxuICogfVxuICogY29uc3QgZ2V0QXV0b1N1Z2dlc3RJY29uczoge1xuICogICAvLyBDYWxsZWQgZm9yIGV2ZXJ5IGNpdHkgYmlrZSBzdGF0aW9uIHJlbmRlcmVkIGFzIGEgc2VhcmNoIHN1Z2dlc3Rpb24uIFNob3VsZCByZXR1cm4gdGhlIGljb24gYW5kXG4gKiAgIC8vIGNvbG9yIHVzZWQgZm9yIHRoYXQgc3RhdGlvbi4gVHdvIGljb25zIGFyZSBhdmFpbGFibGUsICdjaXR5YmlrZS1zdG9wLWRpZ2l0cmFuc2l0JyBhbmRpdHliaWtlLXN0b3AtZGlnaXRyYW5zaXQtc2Vjb25kYXJ5Jy5cbiAqICAgY2l0eWJpa2VzOiBzdGF0aW9uID0+IHtcbiAqICAgICAgcmV0dXJuIFsnY2l0eWJpa2Utc3RvcC1kaWdpdHJhbnNpdCcsICcjZjJiNjJkJ107XG4gKiAgIH1cbiAqIH1cbiAqIGNvbnN0IHRhcmdldHMgPSBbJ0xvY2F0aW9ucycsICdTdG9wcycsICdSb3V0ZXMnXTsgLy8gRGVmaW5lcyB3aGF0IHlvdSBhcmUgc2VhcmNoaW5nLiBhbGwgYXZhaWxhYmxlIG9wdGlvbnMgYXJlIExvY2F0aW9ucywgU3RvcHMsIFJvdXRlcywgVmVoaWNsZVJlbnRhbFN0YXRpb25zLCBGdXR1cmVSb3V0ZXMsIE1hcFBvc2l0aW9uIGFuZCBDdXJyZW50UG9zaXRpb24uIExlYXZlIGVtcHR5IHRvIHNlYXJjaCBhbGwgdGFyZ2V0cy5cbiAqIGNvbnN0IHNvdXJjZXMgPSBbJ0Zhdm91cml0ZScsICdIaXN0b3J5JywgJ0RhdGFzb3VyY2UnXSAvLyBEZWZpbmVzIHdoZXJlIHlvdSBhcmUgc2VhcmNoaW5nLiBhbGwgYXZhaWxhYmxlIGFyZTogRmF2b3VyaXRlLCBIaXN0b3J5IChwcmV2aW91c2x5IHNlYXJjaGVkIHNlYXJjaGVzKSwgYW5kIERhdGFzb3VyY2UuIExlYXZlIGVtcHR5IHRvIHVzZSBhbGwgc291cmNlcy5cbiAqIDxEVEF1dG9zdWdnZXN0UGFuZWxcbiAqICAgIGFwcEVsZW1lbnQ9e2FwcEVsZW1lbnR9IC8vIFJlcXVpcmVkLiBSb290IGVsZW1lbnQncyBpZC4gTmVlZGVkIGZvciByZWFjdC1tb2RhbCBjb21wb25lbnQuXG4gKiAgICBvcmlnaW49e29yaWdpbn0gLy8gU2VsZWN0ZWQgb3JpZ2luIHBvaW50XG4gKiAgICBkZXN0aW5hdGlvbj17ZGVzdGluYXRpb259IC8vIFNlbGVjdGVkIGRlc3RpbmF0aW9uIHBvaW50XG4gKiAgICBvcmlnaW5QbGFjZUhvbGRlcj17J0dpdmUgb3JpZ2luJ30gLy8gT3B0aW9uYWwgR2l2ZSBzdHJpbmcgc2hvd24gaW5pdGlhbGx5IGluc2lkZSBvcmlnaW4gc2VhcmNoIGZpZWxkXG4gKiAgICBkZXN0aW5hdGlvblBsYWNlSG9sZGVyPXsnR2l2ZSBkZXN0aW5hdGlvbid9IC8vIE9wdGlvbmFsIEdpdmUgc3RyaW5nIHNob3duIGluaXRhbGx5IGluc2lkZSBkZXN0aW5hdGlvbiBzZWFyY2ggZmllbGRcbiAqICAgIGluaXRpYWxWaWFQb2ludHM9e1tdfSAvLyBPcHRpb25hbC4gIElmIHNob3dWaWFwb2ludENvbnRyb2wgaXMgc2V0IHRvIHRydWUsIHBhc3MgaW5pdGlhbCB2aWEgcG9pbnRzIHRvIHRoZSBwYW5lbC4gQ3VycmVudGx5IG5vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMgZ2l2ZW4uXG4gKiAgICB1cGRhdGVWaWFQb2ludHM9eygpID0+IHJldHVybiBbXX0gLy8gT3B0aW9uYWwuIElmIHNob3dWaWFwb2ludENvbnRyb2wgaXMgc2V0IHRvIHRydWUsIGRlZmluZSBob3cgdG8gdXBkYXRlIHlvdXIgdmlhIHBvaW50IGxpc3Qgd2l0aCB0aGlzIGZ1bmN0aW9uLiBDdXJyZW5sdHkgbm8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyBnaXZlbi5cbiAqICAgIHN3YXBPcmRlcj17KCkgPT4gcmV0dXJuIG51bGx9IC8vIE9wdGlvbmFsLiBJZiBzaG93U3dhcENvbnRyb2wgaXMgc2V0IHRvIHRydWUsIGRlZmluZSBob3cgdG8gc3dhcCBvcmRlciBvZiB5b3VyIHBvaW50cyAob3JpZ2luLCBkZXN0aW5hdGlvbiwgdmlhcG9pbnRzKS4gQ3VycmVudGx5IG5vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMgZ2l2ZW4uXG4gKiAgICBzZWFyY2hDb250ZXh0PXtzZWFyY2hDb250ZXh0fVxuICogICAgZ2V0QXV0b1N1Z2dlc3RJY29ucz17Z2V0QXV0b1N1Z2dlc3RJY29uc31cbiAqICAgIG9uU2VsZWN0PXt0aGlzLm9uU2VsZWN0fVxuICogICAgb25DbGVhcj17dGhpcy5vbkNsZWFyfVxuICogICAgbGFuZz1cImZpXCIgLy8gRGVmaW5lIGxhbmd1YWdlIGZpIHN2IG9yIGVuLlxuICogICAgYWRkQW5hbHl0aWNzRXZlbnQ9e251bGx9IC8vIE9wdGlvbmFsLiB5b3UgY2FuIHJlY29yZCBhbiBhbmFseXRpY3MgZXZlbnQgaWYgeW91IHdpc2guIGlmIHBhc3NlZCwgY29tcG9uZW50IHdpbGwgcGFzcyBhbiBjYXRlZ29yeSwgYWN0aW9uLCBuYW1lIHBhcmFtZXRlcnMgdG8gYWRkQW5hbHl0aWNzRXZlbnRcbiAqICAgIGRpc2FibGVBdXRvRm9jdXM9e2ZhbHNlfSAvLyBPcHRpb25hbC4gdXNlIHRoaXMgdG8gZGlzYWJsZSBhdXRvZm9jdXMgY29tcGxldGVseSBmcm9tIERUQXV0b3N1Z2dlc3RQYW5lbFxuICogICAgc291cmNlcz17c291cmNlc31cbiAqICAgIHRhcmdldHM9e3RhcmdldHN9XG4gKiAgICBpc01vYmlsZSAgLy8gT3B0aW9uYWwuIERlZmF1bHRzIHRvIGZhbHNlLiBXaGV0aGVyIHRvIHVzZSBtb2JpbGUgc2VhcmNoLlxuICogICAgb3JpZ2luTW9iaWxlTGFiZWw9XCJPcmlnaW4gbGFiZWxcIiAvLyBPcHRpb25hbC4gQ3VzdG9tIGxhYmVsIHRleHQgZm9yIG9yaWdpbiBmaWVsZCBvbiBtb2JpbGUuXG4gKiAgICBkZXN0aW5hdGlvbk1vYmlsZUxhYmVsPVwiRGVzdGluYXRpb24gbGFiZWxcIiAvLyBPcHRpb25hbC4gQ3VzdG9tIGxhYmVsIHRleHQgZm9yIGRlc3RpbmF0aW9uIGZpZWxkIG9uIG1vYmlsZS5cbiAqICAgIGhhbmRsZUZvY3VzQ2hhbmdlPXsoKSA9PiB7fX0gLy8gT3B0aW9uYWwuIElmIGRlZmluZWQgb3ZlcnJpZGVzIGRlZmF1bHQgb25Gb2N1c0NoYW5nZSBiZWhhdmlvdXJcbiAqICAgIHNob3dTd2FwQ29udHJvbD17ZmFsc2V9IC8vIE9wdGlvbmFsLlxuICogICAgc2hvd1ZpYXBvaW50Q29udHJvbD17ZmFsc2V9IC8vIE9wdGlvbmFsLlxuICovXG5cbmNvbnN0IGxvY2F0aW9uU2hhcGUgPSBQcm9wVHlwZXMuc2hhcGUoe1xuICBhZGRyZXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBsYXQ6IFByb3BUeXBlcy5udW1iZXIsXG4gIGxvbjogUHJvcFR5cGVzLm51bWJlcixcbiAgbG9jYXRpb25TbGFjazogUHJvcFR5cGVzLm51bWJlcixcbn0pO1xuXG5jbGFzcyBEVEF1dG9zdWdnZXN0UGFuZWwgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIGFwcEVsZW1lbnQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBvcmlnaW46IGxvY2F0aW9uU2hhcGUsXG4gICAgZGVzdGluYXRpb246IGxvY2F0aW9uU2hhcGUsXG4gICAgb3JpZ2luUGxhY2VIb2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZGVzdGluYXRpb25QbGFjZUhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB2aWFQb2ludHM6IFByb3BUeXBlcy5hcnJheU9mKGxvY2F0aW9uU2hhcGUpLFxuICAgIHVwZGF0ZVZpYVBvaW50czogUHJvcFR5cGVzLmZ1bmMsXG4gICAgaGFuZGxlVmlhUG9pbnRMb2NhdGlvblNlbGVjdGVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBzd2FwT3JkZXI6IFByb3BUeXBlcy5mdW5jLFxuICAgIHNlYXJjaFBhbmVsVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzZWFyY2hDb250ZXh0OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgVVJMX1BFTElBUzogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB9KS5pc1JlcXVpcmVkLFxuICAgIG9uU2VsZWN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQ2xlYXI6IFByb3BUeXBlcy5mdW5jLFxuICAgIGFkZEFuYWx5dGljc0V2ZW50OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBsYW5nOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgZGlzYWJsZUF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gICAgc291cmNlczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gICAgdGFyZ2V0czogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gICAgZmlsdGVyUmVzdWx0czogUHJvcFR5cGVzLmZ1bmMsXG4gICAgaXNNb2JpbGU6IFByb3BUeXBlcy5ib29sLFxuICAgIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGhvdmVyQ29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgb3JpZ2luTW9iaWxlTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZGVzdGluYXRpb25Nb2JpbGVMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICByZWZQb2ludDogbG9jYXRpb25TaGFwZSxcbiAgICBtb2RlU2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIG1vZGVJY29uQ29sb3JzOiBQcm9wVHlwZXMub2JqZWN0T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gICAgZ2V0QXV0b1N1Z2dlc3RJY29uczogUHJvcFR5cGVzLm9iamVjdE9mKFByb3BUeXBlcy5mdW5jKSxcbiAgICBmb250V2VpZ2h0czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIG1lZGl1bTogUHJvcFR5cGVzLm51bWJlcixcbiAgICB9KSxcbiAgICBzaG93U2Nyb2xsOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBvbkZvY3VzQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBpc0VtYmVkZGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBzaG93U3dhcENvbnRyb2w6IFByb3BUeXBlcy5ib29sLFxuICAgIHNob3dWaWFwb2ludENvbnRyb2w6IFByb3BUeXBlcy5ib29sLFxuICAgIHNob3dTbGFja0NvbnRyb2w6IFByb3BUeXBlcy5ib29sLFxuICB9O1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgb3JpZ2luOiB1bmRlZmluZWQsXG4gICAgZGVzdGluYXRpb246IHVuZGVmaW5lZCxcbiAgICB2aWFQb2ludHM6IFtdLFxuICAgIG9yaWdpblBsYWNlSG9sZGVyOiAnZ2l2ZS1vcmlnaW4nLFxuICAgIGRlc3RpbmF0aW9uUGxhY2VIb2xkZXI6ICdnaXZlLWRlc3RpbmF0aW9uJyxcbiAgICBzd2FwT3JkZXI6IHVuZGVmaW5lZCxcbiAgICB1cGRhdGVWaWFQb2ludHM6ICgpID0+IHt9LFxuICAgIHNlYXJjaFBhbmVsVGV4dDogdW5kZWZpbmVkLFxuICAgIHNvdXJjZXM6IFtdLFxuICAgIHRhcmdldHM6IFtdLFxuICAgIGZpbHRlclJlc3VsdHM6IHVuZGVmaW5lZCxcbiAgICBvbkNsZWFyOiB1bmRlZmluZWQsXG4gICAgZ2V0QXV0b1N1Z2dlc3RJY29uczogdW5kZWZpbmVkLFxuICAgIHJlZlBvaW50OiB1bmRlZmluZWQsXG4gICAgYWRkQW5hbHl0aWNzRXZlbnQ6IHVuZGVmaW5lZCxcbiAgICBkaXNhYmxlQXV0b0ZvY3VzOiBmYWxzZSxcbiAgICBpc01vYmlsZTogZmFsc2UsXG4gICAgaGFuZGxlVmlhUG9pbnRMb2NhdGlvblNlbGVjdGVkOiB1bmRlZmluZWQsXG4gICAgY29sb3I6ICcjMDA3YWM5JyxcbiAgICBob3ZlckNvbG9yOiAnIzAwNjJhMScsXG4gICAgb3JpZ2luTW9iaWxlTGFiZWw6IG51bGwsXG4gICAgZGVzdGluYXRpb25Nb2JpbGVMYWJlbDogbnVsbCxcbiAgICBtb2RlU2V0OiB1bmRlZmluZWQsXG4gICAgbW9kZUljb25Db2xvcnM6IHVuZGVmaW5lZCxcbiAgICBmb250V2VpZ2h0czoge1xuICAgICAgbWVkaXVtOiA1MDAsXG4gICAgfSxcbiAgICBzaG93U2Nyb2xsOiBmYWxzZSxcbiAgICBvbkZvY3VzQ2hhbmdlOiB1bmRlZmluZWQsXG4gICAgaXNFbWJlZGRlZDogZmFsc2UsXG4gICAgc2hvd1N3YXBDb250cm9sOiBmYWxzZSxcbiAgICBzaG93VmlhcG9pbnRDb250cm9sOiBmYWxzZSxcbiAgICBzaG93U2xhY2tDb250cm9sOiBmYWxzZSxcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgYWN0aXZlU2xhY2tJbnB1dHM6IFtdLFxuICAgICAgcmVmczogW10sXG4gICAgfTtcbiAgfVxuXG4gIHN0b3JlUmVmZXJlbmNlID0gcmVmID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHByZXZTdGF0ZSA9PiAoeyByZWZzOiBbLi4ucHJldlN0YXRlLnJlZnMsIHJlZl0gfSkpO1xuICB9O1xuXG4gIGhhbmRsZUZvY3VzQ2hhbmdlID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZGVzdGluYXRpb24gfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKCFkZXN0aW5hdGlvbiB8fCAhZGVzdGluYXRpb24ubGF0KSB7XG4gICAgICB0aGlzLnN0YXRlLnJlZnNbMV0uZm9jdXMoKTtcbiAgICB9XG4gIH07XG5cbiAgdXBkYXRlVmlhUG9pbnRzID0gdmlhUG9pbnRzID0+IHtcbiAgICBpZiAodmlhUG9pbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5wcm9wcy51cGRhdGVWaWFQb2ludHMoW10pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnByb3BzLnVwZGF0ZVZpYVBvaW50cyh2aWFQb2ludHMuZmlsdGVyKHZwID0+ICFpc1ZpYVBvaW50RW1wdHkodnApKSk7XG4gIH07XG5cbiAgaGFuZGxlVG9nZ2xlVmlhUG9pbnRTbGFja0NsaWNrID0gdmlhUG9pbnRJbmRleCA9PiB7XG4gICAgY29uc3QgeyBhY3RpdmVTbGFja0lucHV0cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGFjdGl2ZVNsYWNrSW5wdXRzOiBhY3RpdmVTbGFja0lucHV0cy5pbmNsdWRlcyh2aWFQb2ludEluZGV4KVxuICAgICAgICA/IHVwZGF0ZVZpYVBvaW50U2xhY2soYWN0aXZlU2xhY2tJbnB1dHMsIHZpYVBvaW50SW5kZXgpXG4gICAgICAgIDogYWN0aXZlU2xhY2tJbnB1dHMuY29uY2F0KFt2aWFQb2ludEluZGV4XSksXG4gICAgfSk7XG4gIH07XG5cbiAgaGFuZGxlVmlhUG9pbnRTbGFja1RpbWVTZWxlY3RlZCA9IChzbGFja1RpbWVJblNlY29uZHMsIGkpID0+IHtcbiAgICBpZiAodGhpcy5wcm9wcy5hZGRBbmFseXRpY3NFdmVudCkge1xuICAgICAgdGhpcy5wcm9wcy5hZGRBbmFseXRpY3NFdmVudCh7XG4gICAgICAgIGFjdGlvbjogJ0VkaXRWaWFQb2ludFN0b3BEdXJhdGlvbicsXG4gICAgICAgIGNhdGVnb3J5OiAnSXRpbmVyYXJ5U2V0dGluZ3MnLFxuICAgICAgICBuYW1lOiBzbGFja1RpbWVJblNlY29uZHMgLyA2MCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCB7IHZpYVBvaW50cyB9ID0gdGhpcy5wcm9wcztcbiAgICB2aWFQb2ludHNbaV0ubG9jYXRpb25TbGFjayA9IE51bWJlci5wYXJzZUludChzbGFja1RpbWVJblNlY29uZHMsIDEwKTtcbiAgICB0aGlzLnVwZGF0ZVZpYVBvaW50cyh2aWFQb2ludHMpO1xuICB9O1xuXG4gIGhhbmRsZVZpYVBvaW50TG9jYXRpb25TZWxlY3RlZCA9ICh2aWFQb2ludExvY2F0aW9uLCBpKSA9PiB7XG4gICAgdGhpcy5wcm9wcy5oYW5kbGVWaWFQb2ludExvY2F0aW9uU2VsZWN0ZWQodmlhUG9pbnRMb2NhdGlvbiwgaSk7XG4gIH07XG5cbiAgaGFuZGxlUmVtb3ZlVmlhUG9pbnRDbGljayA9IHZpYVBvaW50SW5kZXggPT4ge1xuICAgIGlmICh0aGlzLnByb3BzLmFkZEFuYWx5dGljc0V2ZW50KSB7XG4gICAgICB0aGlzLnByb3BzLmFkZEFuYWx5dGljc0V2ZW50KHtcbiAgICAgICAgYWN0aW9uOiAnUmVtb3ZlSm91cm5leVZpYVBvaW50JyxcbiAgICAgICAgY2F0ZWdvcnk6ICdJdGluZXJhcnlTZXR0aW5ncycsXG4gICAgICAgIG5hbWU6IG51bGwsXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgeyBhY3RpdmVTbGFja0lucHV0cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCB7IHZpYVBvaW50cyB9ID0gdGhpcy5wcm9wcztcbiAgICB2aWFQb2ludHMuc3BsaWNlKHZpYVBvaW50SW5kZXgsIDEpO1xuICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICB7XG4gICAgICAgIGFjdGl2ZVNsYWNrSW5wdXRzOiB1cGRhdGVWaWFQb2ludFNsYWNrKFxuICAgICAgICAgIGFjdGl2ZVNsYWNrSW5wdXRzLFxuICAgICAgICAgIHZpYVBvaW50SW5kZXgsXG4gICAgICAgICAgdHJ1ZSxcbiAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgICAoKSA9PiB0aGlzLnVwZGF0ZVZpYVBvaW50cyh2aWFQb2ludHMpLFxuICAgICk7XG4gIH07XG5cbiAgaGFuZGxlQWRkVmlhUG9pbnRDbGljayA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5wcm9wcy5hZGRBbmFseXRpY3NFdmVudCkge1xuICAgICAgdGhpcy5wcm9wcy5hZGRBbmFseXRpY3NFdmVudCh7XG4gICAgICAgIGFjdGlvbjogJ0FkZEpvdXJuZXlWaWFQb2ludCcsXG4gICAgICAgIGNhdGVnb3J5OiAnSXRpbmVyYXJ5U2V0dGluZ3MnLFxuICAgICAgICBuYW1lOiAnUXVpY2tTZXR0aW5nc0J1dHRvbicsXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgeyB2aWFQb2ludHMgfSA9IHRoaXMucHJvcHM7XG4gICAgdmlhUG9pbnRzLnB1c2goZ2V0RW1wdHlWaWFQb2ludFBsYWNlSG9sZGVyKCkpO1xuICAgIC8vIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBzdGF0ZSBzbyB0aGF0IHBsYWNlSG9sZGVyIHdpbGwgc2hvdyB1cCBpbiBwYW5lbC5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3Qvbm8tYWNjZXNzLXN0YXRlLWluLXNldHN0YXRlXG4gICAgdGhpcy5zZXRTdGF0ZSh0aGlzLnN0YXRlKTtcbiAgfTtcblxuICBoYW5kbGVTd2FwT3JkZXJDbGljayA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5wcm9wcy5hZGRBbmFseXRpY3NFdmVudCkge1xuICAgICAgdGhpcy5wcm9wcy5hZGRBbmFseXRpY3NFdmVudCh7XG4gICAgICAgIGFjdGlvbjogJ1N3aXRjaEpvdXJuZXlTdGFydEFuZEVuZFBvaW50T3JkZXInLFxuICAgICAgICBjYXRlZ29yeTogJ0l0aW5lcmFyeVNldHRpbmdzJyxcbiAgICAgICAgbmFtZTogbnVsbCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCB7IHZpYVBvaW50cyB9ID0gdGhpcy5wcm9wcztcbiAgICB2aWFQb2ludHMucmV2ZXJzZSgpO1xuICAgIHRoaXMucHJvcHMuc3dhcE9yZGVyKCk7XG4gIH07XG5cbiAgZ2V0U2xhY2tEaXNwbGF5ID0gc2xhY2tJblNlY29uZHMgPT5cbiAgICBgJHtzbGFja0luU2Vjb25kcyAvIDYwfSAke2kxOG5leHQudCgnbWludXRlLXNob3J0Jywge1xuICAgICAgbG5nOiB0aGlzLnByb3BzLmxhbmcsXG4gICAgfSl9YDtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgb3JpZ2luLFxuICAgICAgc2VhcmNoUGFuZWxUZXh0LFxuICAgICAgc2VhcmNoQ29udGV4dCxcbiAgICAgIGRpc2FibGVBdXRvRm9jdXMsXG4gICAgICB2aWFQb2ludHMsXG4gICAgICBvcmlnaW5Nb2JpbGVMYWJlbCxcbiAgICAgIGRlc3RpbmF0aW9uTW9iaWxlTGFiZWwsXG4gICAgICBmb250V2VpZ2h0cyxcbiAgICAgIG9uRm9jdXNDaGFuZ2UsXG4gICAgICBzaG93U3dhcENvbnRyb2wsXG4gICAgICBzaG93VmlhcG9pbnRDb250cm9sLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGxuZyA9IHRoaXMucHJvcHMubGFuZztcbiAgICBjb25zdCB7IGFjdGl2ZVNsYWNrSW5wdXRzIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IHNsYWNrVGltZSA9IGdldFNsYWNrVGltZU9wdGlvbnMoKTtcbiAgICBjb25zdCBkZWZhdWx0U2xhY2tUaW1lVmFsdWUgPSAwO1xuICAgIGNvbnN0IGdldFZpYVBvaW50U2xhY2tUaW1lT3JEZWZhdWx0ID0gKFxuICAgICAgdmlhUG9pbnQsXG4gICAgICBkZWZhdWx0VmFsdWUgPSBkZWZhdWx0U2xhY2tUaW1lVmFsdWUsXG4gICAgKSA9PiAodmlhUG9pbnQgJiYgdmlhUG9pbnQubG9jYXRpb25TbGFjaykgfHwgZGVmYXVsdFZhbHVlO1xuICAgIGNvbnN0IGlzVmlhUG9pbnRTbGFja1RpbWVJbnB1dEFjdGl2ZSA9IGluZGV4ID0+XG4gICAgICBhY3RpdmVTbGFja0lucHV0cy5pbmNsdWRlcyhpbmRleCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjeChbXG4gICAgICAgICAgc3R5bGVzWydhdXRvc3VnZ2VzdC1wYW5lbCddLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNtYWxsOiB0aGlzLnByb3BzLmlzTW9iaWxlLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pfVxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICctLWNvbG9yJzogYCR7dGhpcy5wcm9wcy5jb2xvcn1gLFxuICAgICAgICAgICctLWZvbnQtd2VpZ2h0LW1lZGl1bSc6IGZvbnRXZWlnaHRzLm1lZGl1bSxcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgeycgJ31cbiAgICAgICAge3NlYXJjaFBhbmVsVGV4dCA/IChcbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT17c3R5bGVzWydhdXRvc3VnZ2VzdC1zZWFyY2hwYW5lbC10ZXh0J119PlxuICAgICAgICAgICAgICB7JyAnfVxuICAgICAgICAgICAgICB7c2VhcmNoUGFuZWxUZXh0fVxuICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ29yaWdpbi1pbnB1dC1jb250YWluZXInXX0+XG4gICAgICAgICAgPERUQXV0b1N1Z2dlc3RcbiAgICAgICAgICAgIGFwcEVsZW1lbnQ9e3RoaXMucHJvcHMuYXBwRWxlbWVudH1cbiAgICAgICAgICAgIGljb249XCJtYXBNYXJrZXJcIlxuICAgICAgICAgICAgaWQ9XCJvcmlnaW5cIlxuICAgICAgICAgICAgYXV0b0ZvY3VzPXtcbiAgICAgICAgICAgICAgZGlzYWJsZUF1dG9Gb2N1cyA9PT0gdHJ1ZVxuICAgICAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgICAgICA6ICF0aGlzLnByb3BzLmlzTW9iaWxlICYmICFvcmlnaW4ubGF0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdG9yZVJlZj17dGhpcy5zdG9yZVJlZmVyZW5jZX1cbiAgICAgICAgICAgIHJlZlBvaW50PXt0aGlzLnByb3BzLnJlZlBvaW50fVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtnZXRMb2NhdGlvblR5cGUob3JpZ2luKX1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPXt0aGlzLnByb3BzLm9yaWdpblBsYWNlSG9sZGVyfVxuICAgICAgICAgICAgdmFsdWU9e3ZhbHVlKG9yaWdpbil9XG4gICAgICAgICAgICBzZWFyY2hDb250ZXh0PXtzZWFyY2hDb250ZXh0fVxuICAgICAgICAgICAgZ2V0QXV0b1N1Z2dlc3RJY29ucz17dGhpcy5wcm9wcy5nZXRBdXRvU3VnZ2VzdEljb25zfVxuICAgICAgICAgICAgb25TZWxlY3Q9e3RoaXMucHJvcHMub25TZWxlY3R9XG4gICAgICAgICAgICBvbkNsZWFyPXt0aGlzLnByb3BzLm9uQ2xlYXJ9XG4gICAgICAgICAgICBmb2N1c0NoYW5nZT17b25Gb2N1c0NoYW5nZSB8fCB0aGlzLmhhbmRsZUZvY3VzQ2hhbmdlfVxuICAgICAgICAgICAgbGFuZz17dGhpcy5wcm9wcy5sYW5nfVxuICAgICAgICAgICAgc291cmNlcz17dGhpcy5wcm9wcy5zb3VyY2VzfVxuICAgICAgICAgICAgdGFyZ2V0cz17dGhpcy5wcm9wcy50YXJnZXRzfVxuICAgICAgICAgICAgZmlsdGVyUmVzdWx0cz17dGhpcy5wcm9wcy5maWx0ZXJSZXN1bHRzfVxuICAgICAgICAgICAgaXNNb2JpbGU9e3RoaXMucHJvcHMuaXNNb2JpbGV9XG4gICAgICAgICAgICBjb2xvcj17dGhpcy5wcm9wcy5jb2xvcn1cbiAgICAgICAgICAgIGhvdmVyQ29sb3I9e3RoaXMucHJvcHMuaG92ZXJDb2xvcn1cbiAgICAgICAgICAgIG1vYmlsZUxhYmVsPXtvcmlnaW5Nb2JpbGVMYWJlbH1cbiAgICAgICAgICAgIGZvbnRXZWlnaHRzPXt0aGlzLnByb3BzLmZvbnRXZWlnaHRzfVxuICAgICAgICAgICAgbW9kZVNldD17dGhpcy5wcm9wcy5tb2RlU2V0fVxuICAgICAgICAgICAgbW9kZUljb25Db2xvcnM9e3RoaXMucHJvcHMubW9kZUljb25Db2xvcnN9XG4gICAgICAgICAgICBzaG93U2Nyb2xsPXt0aGlzLnByb3BzLnNob3dTY3JvbGx9XG4gICAgICAgICAgICBpc0VtYmVkZGVkPXt0aGlzLnByb3BzLmlzRW1iZWRkZWR9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7KHNob3dTd2FwQ29udHJvbCB8fCBzaG93VmlhcG9pbnRDb250cm9sKSAmJiAoXG4gICAgICAgICAgICA8SXRpbmVyYXJ5U2VhcmNoQ29udHJvbFxuICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5vcHBvc2l0ZX1cbiAgICAgICAgICAgICAgZW5hYmxlZD17c2hvd1N3YXBDb250cm9sfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLmhhbmRsZVN3YXBPcmRlckNsaWNrKCl9XG4gICAgICAgICAgICAgIG9uS2V5UHJlc3M9e2UgPT5cbiAgICAgICAgICAgICAgICBpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQoZSkgJiYgdGhpcy5oYW5kbGVTd2FwT3JkZXJDbGljaygpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD17aTE4bmV4dC50KCdzd2FwLW9yZGVyLWJ1dHRvbi1sYWJlbCcsIHsgbG5nIH0pfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8SWNvbiBpbWc9XCJvcHBvc2l0ZVwiIGNvbG9yPXt0aGlzLnByb3BzLmNvbG9yfSAvPlxuICAgICAgICAgICAgPC9JdGluZXJhcnlTZWFyY2hDb250cm9sPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7dmlhUG9pbnRzLmxlbmd0aCA9PT0gMCAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1sncmVjdGFuZ2xlLWNvbnRhaW5lciddfT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucmVjdGFuZ2xlfSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgICA8UmVhY3RTb3J0YWJsZVxuICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWyd2aWFwb2ludHMtY29udGFpbmVyJ119XG4gICAgICAgICAgbGlzdD17dmlhUG9pbnRzfVxuICAgICAgICAgIGhhbmRsZT17YC4ke3N0eWxlc1sndmlhcG9pbnQtYmVmb3JlJ119YH1cbiAgICAgICAgICBhbmltYXRpb249ezIwMH1cbiAgICAgICAgICBkaXNhYmxlZD17dmlhUG9pbnRzLmxlbmd0aCA8PSAxfVxuICAgICAgICAgIHNldExpc3Q9e2l0ZW1zID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZpYVBvaW50cyA9IGl0ZW1zLmZpbHRlcih2cCA9PiAhaXNWaWFQb2ludEVtcHR5KHZwKSk7XG4gICAgICAgICAgICBpZiAobmV3VmlhUG9pbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgdGhpcy5wcm9wcy51cGRhdGVWaWFQb2ludHMobmV3VmlhUG9pbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAge3ZpYVBvaW50cy5tYXAoKG8sIGkpID0+IChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjeChzdHlsZXNbJ3ZpYXBvaW50LWNvbnRhaW5lciddKX1cbiAgICAgICAgICAgICAga2V5PXtgdmlhcG9pbnQtJHtpfWB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snbGlnaHQtZ3JheS1iYWNrZ3JvdW5kJ119PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucm93fT5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ3ZpYXBvaW50LWJlZm9yZSddfVxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17dmlhUG9pbnRzLmxlbmd0aCA+IDEgPyB7IGN1cnNvcjogJ21vdmUnIH0gOiB7fX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3ZpYVBvaW50cy5sZW5ndGggPiAxICYmIChcbiAgICAgICAgICAgICAgICAgICAgICA8SWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nPVwiZWxsaXBzaXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlPXs5MH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXt0aGlzLnByb3BzLmNvbG9yfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjeChcbiAgICAgICAgICAgICAgICAgICAgICBgJHtzdHlsZXNbJ3ZpYXBvaW50LWlucHV0LWNvbnRhaW5lciddfSAke1xuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVzW2B2aWFwb2ludC0ke2kgKyAxfWBdXG4gICAgICAgICAgICAgICAgICAgICAgfWAsXG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxEVEF1dG9TdWdnZXN0XG4gICAgICAgICAgICAgICAgICAgICAgYXBwRWxlbWVudD17dGhpcy5wcm9wcy5hcHBFbGVtZW50fVxuICAgICAgICAgICAgICAgICAgICAgIGljb249XCJtYXBNYXJrZXItdmlhXCJcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cInZpYS1wb2ludFwiXG4gICAgICAgICAgICAgICAgICAgICAgYXJpYUxhYmVsPXtpMThuZXh0LnQoJ3ZpYS1wb2ludC1pbmRleCcsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpICsgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxuZyxcbiAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgICBhdXRvRm9jdXM9e1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUF1dG9Gb2N1cyA9PT0gdHJ1ZSA/IGZhbHNlIDogIXRoaXMucHJvcHMuaXNNb2JpbGVcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ2aWEtcG9pbnRcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInZpYXBvaW50XCJcbiAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hDb250ZXh0PXtzZWFyY2hDb250ZXh0fVxuICAgICAgICAgICAgICAgICAgICAgIHJlZlBvaW50PXt0aGlzLnByb3BzLnJlZlBvaW50fVxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXsobyAmJiBvLmFkZHJlc3MpIHx8ICcnfVxuICAgICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0PXt0aGlzLnByb3BzLm9uU2VsZWN0fVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xlYXI9e3RoaXMucHJvcHMub25DbGVhcn1cbiAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVWaWFQb2ludHM9e2l0ZW0gPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlVmlhUG9pbnRMb2NhdGlvblNlbGVjdGVkKGl0ZW0sIGkpXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIGxhbmc9e3RoaXMucHJvcHMubGFuZ31cbiAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VzPXt0aGlzLnByb3BzLnNvdXJjZXN9XG4gICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0cz17WydTdG9wcycsICdTdGF0aW9ucyddfVxuICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclJlc3VsdHM9e3RoaXMucHJvcHMuZmlsdGVyUmVzdWx0c31cbiAgICAgICAgICAgICAgICAgICAgICBnZXRBdXRvU3VnZ2VzdEljb25zPXt0aGlzLnByb3BzLmdldEF1dG9TdWdnZXN0SWNvbnN9XG4gICAgICAgICAgICAgICAgICAgICAgaXNNb2JpbGU9e3RoaXMucHJvcHMuaXNNb2JpbGV9XG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I9e3RoaXMucHJvcHMuY29sb3J9XG4gICAgICAgICAgICAgICAgICAgICAgaG92ZXJDb2xvcj17dGhpcy5wcm9wcy5ob3ZlckNvbG9yfVxuICAgICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHRzPXt0aGlzLnByb3BzLmZvbnRXZWlnaHRzfVxuICAgICAgICAgICAgICAgICAgICAgIG1vZGVTZXQ9e3RoaXMucHJvcHMubW9kZVNldH1cbiAgICAgICAgICAgICAgICAgICAgICBtb2RlSWNvbkNvbG9ycz17dGhpcy5wcm9wcy5tb2RlSWNvbkNvbG9yc31cbiAgICAgICAgICAgICAgICAgICAgICBzaG93U2Nyb2xsPXt0aGlzLnByb3BzLnNob3dTY3JvbGx9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIHt0aGlzLnByb3BzLnNob3dTbGFja0NvbnRyb2wgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8SXRpbmVyYXJ5U2VhcmNoQ29udHJvbFxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydhZGQtdmlhLXBvaW50LXNsYWNrJ119XG4gICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZD17dGhpcy5wcm9wcy5zaG93VmlhcG9pbnRDb250cm9sfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMuaGFuZGxlVG9nZ2xlVmlhUG9pbnRTbGFja0NsaWNrKGkpfVxuICAgICAgICAgICAgICAgICAgICAgIG9uS2V5UHJlc3M9e2UgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudChlKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVUb2dnbGVWaWFQb2ludFNsYWNrQ2xpY2soaSlcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17aTE4bmV4dC50KFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNWaWFQb2ludFNsYWNrVGltZUlucHV0QWN0aXZlKGkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgaW5kZXg6IGkgKyAxLCBsbmcgfSxcbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgIHdpZGVcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxJY29uIGltZz1cInRpbWVcIiBjb2xvcj17dGhpcy5wcm9wcy5jb2xvcn0gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9JdGluZXJhcnlTZWFyY2hDb250cm9sPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB7IWlzVmlhUG9pbnRTbGFja1RpbWVJbnB1dEFjdGl2ZShpKSAmJlxuICAgICAgICAgICAgICAgICAgdmlhUG9pbnRzW2ldICYmXG4gICAgICAgICAgICAgICAgICB2aWFQb2ludHNbaV0ubG9jYXRpb25TbGFjayA+IDAgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWyd2aWFwb2ludC1zbGFjay10aW1lJ119XG4gICAgICAgICAgICAgICAgICAgID57YCR7aTE4bmV4dC50KCd2aWFwb2ludC1zbGFjay1hbW91bnQnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgbG5nLFxuICAgICAgICAgICAgICAgICAgICB9KX06ICR7dGhpcy5nZXRTbGFja0Rpc3BsYXkoXG4gICAgICAgICAgICAgICAgICAgICAgdmlhUG9pbnRzW2ldLmxvY2F0aW9uU2xhY2ssXG4gICAgICAgICAgICAgICAgICAgICl9YH08L3NwYW4+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goc3R5bGVzWydpbnB1dC12aWFwb2ludC1zbGFjay1jb250YWluZXInXSwge1xuICAgICAgICAgICAgICAgICAgICBjb2xsYXBzZWQ6ICFpc1ZpYVBvaW50U2xhY2tUaW1lSW5wdXRBY3RpdmUoaSksXG4gICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydzZWxlY3Qtd3JhcHBlciddfT5cbiAgICAgICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgIGlkPXtgdmlhcG9pbnQtc2xhY2stJHtpfWB9XG4gICAgICAgICAgICAgICAgICAgICAgbGFiZWw9e2kxOG5leHQudCgndmlhcG9pbnQtc2xhY2stYW1vdW50JywgeyBsbmcgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17c2xhY2tUaW1lfVxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtnZXRWaWFQb2ludFNsYWNrVGltZU9yRGVmYXVsdCh2aWFQb2ludHNbaV0pfVxuICAgICAgICAgICAgICAgICAgICAgIGdldERpc3BsYXk9e3RoaXMuZ2V0U2xhY2tEaXNwbGF5fVxuICAgICAgICAgICAgICAgICAgICAgIHZpYVBvaW50SW5kZXg9e2l9XG4gICAgICAgICAgICAgICAgICAgICAgaWNvbj17XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake3N0eWxlc1snY29tYm9ib3gtaWNvbiddfSAke3N0eWxlc1sndGltZS1pbnB1dC1pY29uJ119YH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gaW1nPVwidGltZVwiIGNvbG9yPXt0aGlzLnByb3BzLmNvbG9yfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBvblNsYWNrVGltZVNlbGVjdGVkPXt0aGlzLmhhbmRsZVZpYVBvaW50U2xhY2tUaW1lU2VsZWN0ZWR9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxJdGluZXJhcnlTZWFyY2hDb250cm9sXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ3JlbW92ZS12aWEtcG9pbnQnXX1cbiAgICAgICAgICAgICAgICBlbmFibGVkPXt0aGlzLnByb3BzLnNob3dWaWFwb2ludENvbnRyb2x9XG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5oYW5kbGVSZW1vdmVWaWFQb2ludENsaWNrKGkpfVxuICAgICAgICAgICAgICAgIG9uS2V5UHJlc3M9e2UgPT5cbiAgICAgICAgICAgICAgICAgIGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudChlKSAmJlxuICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVSZW1vdmVWaWFQb2ludENsaWNrKGkpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2kxOG5leHQudCgncmVtb3ZlLXZpYS1idXR0b24tbGFiZWwnLCB7XG4gICAgICAgICAgICAgICAgICBpbmRleDogaSArIDEsXG4gICAgICAgICAgICAgICAgICBsbmcsXG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8SWNvbiBpbWc9XCJ0cmFzaFwiIGNvbG9yPXt0aGlzLnByb3BzLmNvbG9yfSAvPlxuICAgICAgICAgICAgICA8L0l0aW5lcmFyeVNlYXJjaENvbnRyb2w+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9SZWFjdFNvcnRhYmxlPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydkZXN0aW5hdGlvbi1pbnB1dC1jb250YWluZXInXX0+XG4gICAgICAgICAgPERUQXV0b1N1Z2dlc3RcbiAgICAgICAgICAgIGFwcEVsZW1lbnQ9e3RoaXMucHJvcHMuYXBwRWxlbWVudH1cbiAgICAgICAgICAgIGljb249XCJtYXBNYXJrZXJcIlxuICAgICAgICAgICAgaWQ9XCJkZXN0aW5hdGlvblwiXG4gICAgICAgICAgICBhdXRvRm9jdXM9e1xuICAgICAgICAgICAgICBkaXNhYmxlQXV0b0ZvY3VzID09PSB0cnVlXG4gICAgICAgICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgICAgICAgIDogIXRoaXMucHJvcHMuaXNNb2JpbGUgJiYgIU51bWJlci5pc05hTihvcmlnaW4ubGF0KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RvcmVSZWY9e3RoaXMuc3RvcmVSZWZlcmVuY2V9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj17dGhpcy5wcm9wcy5kZXN0aW5hdGlvblBsYWNlSG9sZGVyfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtnZXRMb2NhdGlvblR5cGUodGhpcy5wcm9wcy5kZXN0aW5hdGlvbil9XG4gICAgICAgICAgICBnZXRBdXRvU3VnZ2VzdEljb25zPXt0aGlzLnByb3BzLmdldEF1dG9TdWdnZXN0SWNvbnN9XG4gICAgICAgICAgICBzZWFyY2hDb250ZXh0PXtzZWFyY2hDb250ZXh0fVxuICAgICAgICAgICAgb25TZWxlY3Q9e3RoaXMucHJvcHMub25TZWxlY3R9XG4gICAgICAgICAgICBvbkNsZWFyPXt0aGlzLnByb3BzLm9uQ2xlYXJ9XG4gICAgICAgICAgICByZWZQb2ludD17dGhpcy5wcm9wcy5yZWZQb2ludH1cbiAgICAgICAgICAgIHZhbHVlPXt2YWx1ZSh0aGlzLnByb3BzLmRlc3RpbmF0aW9uKX1cbiAgICAgICAgICAgIGxhbmc9e3RoaXMucHJvcHMubGFuZ31cbiAgICAgICAgICAgIHNvdXJjZXM9e3RoaXMucHJvcHMuc291cmNlc31cbiAgICAgICAgICAgIHRhcmdldHM9e3RoaXMucHJvcHMudGFyZ2V0c31cbiAgICAgICAgICAgIGZpbHRlclJlc3VsdHM9e3RoaXMucHJvcHMuZmlsdGVyUmVzdWx0c31cbiAgICAgICAgICAgIGlzTW9iaWxlPXt0aGlzLnByb3BzLmlzTW9iaWxlfVxuICAgICAgICAgICAgY29sb3I9e3RoaXMucHJvcHMuY29sb3J9XG4gICAgICAgICAgICBob3ZlckNvbG9yPXt0aGlzLnByb3BzLmhvdmVyQ29sb3J9XG4gICAgICAgICAgICBtb2JpbGVMYWJlbD17ZGVzdGluYXRpb25Nb2JpbGVMYWJlbH1cbiAgICAgICAgICAgIGZvbnRXZWlnaHRzPXt0aGlzLnByb3BzLmZvbnRXZWlnaHRzfVxuICAgICAgICAgICAgbW9kZVNldD17dGhpcy5wcm9wcy5tb2RlU2V0fVxuICAgICAgICAgICAgbW9kZUljb25Db2xvcnM9e3RoaXMucHJvcHMubW9kZUljb25Db2xvcnN9XG4gICAgICAgICAgICBzaG93U2Nyb2xsPXt0aGlzLnByb3BzLnNob3dTY3JvbGx9XG4gICAgICAgICAgICBpc0VtYmVkZGVkPXt0aGlzLnByb3BzLmlzRW1iZWRkZWR9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7KHNob3dTd2FwQ29udHJvbCB8fCBzaG93VmlhcG9pbnRDb250cm9sKSAmJiAoXG4gICAgICAgICAgICA8SXRpbmVyYXJ5U2VhcmNoQ29udHJvbFxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2N4KHN0eWxlc1snYWRkLXZpYS1wb2ludCddLCBzdHlsZXMubW9yZSwge1xuICAgICAgICAgICAgICAgIGNvbGxhcHNlZDogdmlhUG9pbnRzLmxlbmd0aCA+IDQsXG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICBlbmFibGVkPXtzaG93VmlhcG9pbnRDb250cm9sICYmIHZpYVBvaW50cy5sZW5ndGggPT09IDB9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMuaGFuZGxlQWRkVmlhUG9pbnRDbGljaygpfVxuICAgICAgICAgICAgICBvbktleVByZXNzPXtlID0+XG4gICAgICAgICAgICAgICAgaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50KGUpICYmIHRoaXMuaGFuZGxlQWRkVmlhUG9pbnRDbGljaygpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD17aTE4bmV4dC50KCdhZGQtdmlhLWJ1dHRvbi1sYWJlbCcsIHsgbG5nIH0pfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8SWNvblxuICAgICAgICAgICAgICAgIGltZz1cInZpYXBvaW50XCJcbiAgICAgICAgICAgICAgICB3aWR0aD17MS4yNX1cbiAgICAgICAgICAgICAgICBoZWlnaHQ9ezEuMzc1fVxuICAgICAgICAgICAgICAgIGNvbG9yPXt0aGlzLnByb3BzLmNvbG9yfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9JdGluZXJhcnlTZWFyY2hDb250cm9sPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEVEF1dG9zdWdnZXN0UGFuZWw7XG4iXSwibmFtZXMiOlsiX3R5cGVvZiIsIm8iLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwidG9Qcm9wZXJ0eUtleSIsInQiLCJpIiwiciIsImUiLCJ0b1ByaW1pdGl2ZSIsImNhbGwiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJfZGVmaW5lUHJvcGVydHkiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwibiIsImhhc093blByb3BlcnR5IiwiaW5kZXhPZiIsIm9iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJsZW5ndGgiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInN0eWxlSW5qZWN0IiwiY3NzIiwicmVmIiwiaW5zZXJ0QXQiLCJkb2N1bWVudCIsImhlYWQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInN0eWxlIiwiY3JlYXRlRWxlbWVudCIsInR5cGUiLCJmaXJzdENoaWxkIiwiaW5zZXJ0QmVmb3JlIiwiYXBwZW5kQ2hpbGQiLCJzdHlsZVNoZWV0IiwiY3NzVGV4dCIsImNyZWF0ZVRleHROb2RlIiwiU2VsZWN0IiwiZ2V0RGlzcGxheSIsIm9wdGlvbnMiLCJvblNsYWNrVGltZVNlbGVjdGVkIiwidmlhUG9pbnRJbmRleCIsImlkIiwibGFiZWwiLCJpY29uIiwiZGlzcGxheVZhbHVlIiwiY2hhbmdlRGlzcGxheVZhbHVlIiwidXNlU3RhdGUiLCJvcGVuIiwiY2hhbmdlT3BlbiIsInVzZUVmZmVjdCIsInNjcm9sbFJlZiIsInVzZVJlZiIsInNjcm9sbEluZGV4IiwiTWF0aCIsImZsb29yIiwidXNlTGF5b3V0RWZmZWN0IiwiY3VycmVudCIsInNjcm9sbFRvcCIsImlucHV0SWQiLCJsYWJlbElkIiwiUmVhY3QiLCJjbGFzc05hbWUiLCJzdHlsZXMiLCJodG1sRm9yIiwiQXV0b3N1Z2dlc3QiLCJzdWdnZXN0aW9ucyIsImdldFN1Z2dlc3Rpb25WYWx1ZSIsInMiLCJyZW5kZXJTdWdnZXN0aW9uIiwiZGlzcGxheU5hbWUiLCJvblN1Z2dlc3Rpb25zRmV0Y2hSZXF1ZXN0ZWQiLCJzaG91bGRSZW5kZXJTdWdnZXN0aW9ucyIsImZvY3VzSW5wdXRPblN1Z2dlc3Rpb25DbGljayIsIm9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZCIsImlucHV0UHJvcHMiLCJvbkNoYW5nZSIsIm9uSW5wdXRDaGFuZ2UiLCJfIiwibmV3VmFsdWUiLCJtZXRob2QiLCJvbkZvY3VzIiwib25CbHVyIiwicmVhZE9ubHkiLCJyZW5kZXJTdWdnZXN0aW9uc0NvbnRhaW5lciIsImNvbnRhaW5lclByb3BzIiwiY2hpbGRyZW4iLCJvdGhlclJlZnMiLCJfZXhjbHVkZWQiLCJhc3NpZ24iLCJ0YWJJbmRleCIsImVsZW0iLCJ0aGVtZSIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsIm51bWJlciIsImlzUmVxdWlyZWQiLCJmdW5jIiwiYXJyYXlPZiIsInNoYXBlIiwic3RyaW5nIiwibm9kZSIsInRyYW5zbGF0aW9ucyIsImRlIiwiZW4iLCJmaSIsInBsIiwic3YiLCJrZXlzIiwiZm9yRWFjaCIsImxhbmciLCJpMThuZXh0IiwiYWRkUmVzb3VyY2VCdW5kbGUiLCJnZXRFbXB0eVZpYVBvaW50UGxhY2VIb2xkZXIiLCJpc1ZpYVBvaW50RW1wdHkiLCJ2aWFQb2ludCIsInVuZGVmaW5lZCIsImlzRW1wdHkiLCJpbmNsdWRlcyIsIkl0aW5lcmFyeVNlYXJjaENvbnRyb2wiLCJfcmVmIiwiZW5hYmxlZCIsIm9uQ2xpY2siLCJvbktleVByZXNzIiwid2lkZSIsInJlc3QiLCJyb2xlIiwidXBkYXRlVmlhUG9pbnRTbGFjayIsImFjdGl2ZVZpYVBvaW50U2xhY2tzIiwidXBkYXRlZFZpYVBvaW50SW5kZXgiLCJ2aWFQb2ludFJlbW92ZWQiLCJmb3VuZEF0SW5kZXgiLCJzcGxpY2UiLCJtYXAiLCJpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQiLCJldmVudCIsImtleSIsIndoaWNoIiwia2V5Q29kZSIsImNvbmNhdCIsInByZXZlbnREZWZhdWx0IiwibG9jYXRpb24iLCJhZGRyZXNzIiwiZ3BzIiwicmVhZHkiLCJnZXRMb2NhdGlvblR5cGUiLCJib29sIiwiZGVmYXVsdFByb3BzIiwibG9jYXRpb25TaGFwZSIsImxhdCIsImxvbiIsImxvY2F0aW9uU2xhY2siLCJEVEF1dG9zdWdnZXN0UGFuZWwiLCJDb21wb25lbnQiLCJwcm9wcyIsInN1cGVyIiwidGhpcyIsInNldFN0YXRlIiwicHJldlN0YXRlIiwicmVmcyIsImRlc3RpbmF0aW9uIiwic3RhdGUiLCJmb2N1cyIsInZpYVBvaW50cyIsInVwZGF0ZVZpYVBvaW50cyIsImZpbHRlciIsInZwIiwiYWN0aXZlU2xhY2tJbnB1dHMiLCJzbGFja1RpbWVJblNlY29uZHMiLCJhZGRBbmFseXRpY3NFdmVudCIsImFjdGlvbiIsImNhdGVnb3J5IiwibmFtZSIsInBhcnNlSW50IiwidmlhUG9pbnRMb2NhdGlvbiIsImhhbmRsZVZpYVBvaW50TG9jYXRpb25TZWxlY3RlZCIsInB1c2giLCJyZXZlcnNlIiwic3dhcE9yZGVyIiwic2xhY2tJblNlY29uZHMiLCJsbmciLCJyZW5kZXIiLCJvcmlnaW4iLCJzZWFyY2hQYW5lbFRleHQiLCJzZWFyY2hDb250ZXh0IiwiZGlzYWJsZUF1dG9Gb2N1cyIsIm9yaWdpbk1vYmlsZUxhYmVsIiwiZGVzdGluYXRpb25Nb2JpbGVMYWJlbCIsImZvbnRXZWlnaHRzIiwib25Gb2N1c0NoYW5nZSIsInNob3dTd2FwQ29udHJvbCIsInNob3dWaWFwb2ludENvbnRyb2wiLCJzbGFja1RpbWUiLCJnZXRTbGFja1RpbWVPcHRpb25zIiwidGltZU9wdGlvbnMiLCJ2YWx1ZUluTWludXRlcyIsImdldFZpYVBvaW50U2xhY2tUaW1lT3JEZWZhdWx0IiwiZGVmYXVsdFZhbHVlIiwiaXNWaWFQb2ludFNsYWNrVGltZUlucHV0QWN0aXZlIiwiaW5kZXgiLCJjeCIsImlzTW9iaWxlIiwiY29sb3IiLCJtZWRpdW0iLCJEVEF1dG9TdWdnZXN0IiwiYXBwRWxlbWVudCIsImF1dG9Gb2N1cyIsInN0b3JlUmVmIiwic3RvcmVSZWZlcmVuY2UiLCJyZWZQb2ludCIsInBsYWNlaG9sZGVyIiwib3JpZ2luUGxhY2VIb2xkZXIiLCJnZXRBdXRvU3VnZ2VzdEljb25zIiwib25TZWxlY3QiLCJvbkNsZWFyIiwiZm9jdXNDaGFuZ2UiLCJoYW5kbGVGb2N1c0NoYW5nZSIsInNvdXJjZXMiLCJ0YXJnZXRzIiwiZmlsdGVyUmVzdWx0cyIsImhvdmVyQ29sb3IiLCJtb2JpbGVMYWJlbCIsIm1vZGVTZXQiLCJtb2RlSWNvbkNvbG9ycyIsInNob3dTY3JvbGwiLCJpc0VtYmVkZGVkIiwib3Bwb3NpdGUiLCJoYW5kbGVTd2FwT3JkZXJDbGljayIsIkljb24iLCJpbWciLCJyZWN0YW5nbGUiLCJSZWFjdFNvcnRhYmxlIiwibGlzdCIsImhhbmRsZSIsImFuaW1hdGlvbiIsImRpc2FibGVkIiwic2V0TGlzdCIsIml0ZW1zIiwibmV3VmlhUG9pbnRzIiwicm93IiwiY3Vyc29yIiwicm90YXRlIiwiYXJpYUxhYmVsIiwiaGFuZGxlVmlhUG9pbnRzIiwiaXRlbSIsInNob3dTbGFja0NvbnRyb2wiLCJoYW5kbGVUb2dnbGVWaWFQb2ludFNsYWNrQ2xpY2siLCJnZXRTbGFja0Rpc3BsYXkiLCJoYW5kbGVWaWFQb2ludFNsYWNrVGltZVNlbGVjdGVkIiwiaGFuZGxlUmVtb3ZlVmlhUG9pbnRDbGljayIsImlzTmFOIiwiZGVzdGluYXRpb25QbGFjZUhvbGRlciIsIm1vcmUiLCJoYW5kbGVBZGRWaWFQb2ludENsaWNrIiwid2lkdGgiLCJoZWlnaHQiLCJVUkxfUEVMSUFTIiwib2JqZWN0T2YiXSwibWFwcGluZ3MiOiIwaENBQUEsU0FBU0EsRUFBUUMsR0FHZixPQUFPRCxFQUFVLG1CQUFxQkUsUUFBVSxpQkFBbUJBLE9BQU9DLFNBQVcsU0FBVUYsR0FDN0YsY0FBY0EsQ0FDZixFQUFHLFNBQVVBLEdBQ1osT0FBT0EsR0FBSyxtQkFBcUJDLFFBQVVELEVBQUVHLGNBQWdCRixRQUFVRCxJQUFNQyxPQUFPRyxVQUFZLGdCQUFrQkosQ0FDdEgsRUFBS0QsRUFBUUMsRUFDYixDQ05BLFNBQVNLLEVBQWNDLEdBQ3JCLElBQUlDLEVDRk4sU0FBcUJELEVBQUdFLEdBQ3RCLEdBQUksVUFBWVQsRUFBUU8sS0FBT0EsRUFBRyxPQUFPQSxF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
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("classnames"),require("prop-types"),require("react"),require("react-i18next"),require("react-sortablejs"),require("@digitransit-component/digitransit-component-autosuggest"),require("@digitransit-component/digitransit-component-icon"),require("lodash/isEmpty"),require("react-autosuggest"),require("i18next")):"function"==typeof define&&define.amd?define(["exports","classnames","prop-types","react","react-i18next","react-sortablejs","@digitransit-component/digitransit-component-autosuggest","@digitransit-component/digitransit-component-icon","lodash/isEmpty","react-autosuggest","i18next"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["@digitransit-component/digitransit-component-autosuggest-panel"]={},e.cx,e.PropTypes,e.React,e.reactI18next,e.reactSortablejs,e.DTAutosuggest,e.Icon,e.isEmpty,e.Autosuggest,e.i18next)}(this,(function(e,t,n,i,o,s,a,l,r,c,p){"use strict";function d(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var u=d(t),_=d(n),h=d(i),g=d(a),f=d(l),v=d(r),y=d(c);function m(e){return m="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},m(e)}function b(e){var t=function(e,t){if("object"!=m(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,t||"default");if("object"!=m(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==m(t)?t:t+""}function x(e,t,n){return(t=b(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function k(e,t){if(null==e)return{};var n,i,o=function(e,t){if(null==e)return{};var n={};for(var i in e)if({}.hasOwnProperty.call(e,i)){if(-1!==t.indexOf(i))continue;n[i]=e[i]}return n}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(i=0;i<s.length;i++)n=s[i],-1===t.indexOf(n)&&{}.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function w(e,t){void 0===t&&(t={});var n=t.insertAt;if(e&&"undefined"!=typeof document){var i=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css","top"===n&&i.firstChild?i.insertBefore(o,i.firstChild):i.appendChild(o),o.styleSheet?o.styleSheet.cssText=e:o.appendChild(document.createTextNode(e))}}var S={"combobox-container":"select_combobox-container__0lRpm","left-column":"select_left-column__cSrMR","combobox-label":"select_combobox-label__F9Ayd",container:"select_container__yrA-N",suggestion:"select_suggestion__b05iD",suggestionHighlighted:"select_suggestionHighlighted__ZFPWo",suggestionsContainerOpen:"select_suggestionsContainerOpen__9wcJ5",input:"select_input__pK5vk"};w(".select_combobox-container__0lRpm {\n background-color: #fff;\n border: solid #888 1px;\n display: flex;\n align-items: center;\n border-radius: 5px;\n height: 50px;\n justify-content: space-between;\n flex-grow: 1; }\n .select_combobox-container__0lRpm:focus-within {\n border-color: #007ac9; }\n .select_combobox-container__0lRpm .select_left-column__cSrMR {\n display: flex;\n flex-direction: column;\n width: 100%; }\n\n.select_combobox-label__F9Ayd {\n font-size: 12px;\n line-height: 20px;\n color: #666;\n letter-spacing: -0.48px;\n margin-left: 12px;\n margin-top: 4px; }\n\n.select_container__yrA-N {\n position: relative; }\n .select_container__yrA-N .select_suggestion__b05iD {\n font-size: 15px;\n line-height: 49px;\n height: 50px;\n padding: 0 0 0 12px;\n letter-spacing: -0.6px;\n color: #333;\n font-weight: 500; }\n .select_container__yrA-N .select_suggestionHighlighted__ZFPWo {\n font-size: 15px;\n font-weight: 500;\n background: #f2f5f7; }\n .select_container__yrA-N .select_suggestionsContainerOpen__9wcJ5 {\n position: absolute;\n background-color: #fff;\n z-index: 20;\n max-height: 250px;\n overflow-x: hidden;\n overflow-y: scroll;\n border-radius: 5px;\n box-shadow: 0 2px 0 0 rgba(0, 0, 0, 0.06);\n border: 1px rgba(0, 0, 0, 0.1) solid;\n top: 35px;\n width: calc(100% + 45px); }\n .select_container__yrA-N .select_suggestionsContainerOpen__9wcJ5 ul {\n padding: 0;\n margin: 0; }\n .select_container__yrA-N .select_suggestionsContainerOpen__9wcJ5 li:not(:last-child) {\n border-bottom: 1px solid #ddd; }\n .select_container__yrA-N .select_input__pK5vk {\n -webkit-appearance: none;\n appearance: none;\n margin: -4px 0 0 0;\n padding-left: 12px;\n border: none;\n height: 26px;\n background: #fff;\n font-weight: 500;\n box-shadow: none;\n font-size: 15px;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.33;\n letter-spacing: -0.6px;\n color: #333; }\n .select_container__yrA-N .select_input__pK5vk:focus {\n outline: none;\n border: none;\n box-shadow: none;\n background: #fff; }\n .select_container__yrA-N .select_input__pK5vk:read-only {\n cursor: pointer;\n background: #fff; }\n");const E=["ref"],P=({value:e,getDisplay:t,options:n,onSlackTimeSelected:o,viaPointIndex:s,id:a,label:l,icon:r})=>{const[c,p]=i.useState(t(e)),[d,u]=i.useState(!1);i.useEffect((()=>p(t(e))),[e]);const _=i.useRef(null),g=Math.floor(e/600);i.useLayoutEffect((()=>{d&&_.current&&(_.current.scrollTop=50*g)}),[e,d]);const f=`${a}-input`,v=`${a}-label`;return h.default.createElement("label",{className:S["combobox-container"],htmlFor:f},h.default.createElement("span",{className:S["left-column"]},h.default.createElement("span",{className:S["combobox-label"],id:v},l),h.default.createElement(y.default,{id:a,suggestions:n,getSuggestionValue:e=>e.value,renderSuggestion:e=>e.displayName,onSuggestionsFetchRequested:()=>null,shouldRenderSuggestions:()=>!0,focusInputOnSuggestionClick:!1,onSuggestionsClearRequested:()=>null,inputProps:{value:c,onChange:(t,{newValue:n,method:i})=>{switch(i){case"enter":case"click":o(n,s);break;case"escape":p(e)}},onFocus:()=>{u(!0)},onBlur:()=>{u(!1)},id:f,"aria-labelledby":v,"aria-autocomplete":"none",readOnly:!0},renderSuggestionsContainer:({containerProps:e,children:t})=>{const{ref:n}=e,i=k(e,E);return h.default.createElement("div",Object.assign({tabIndex:"-1"},i,{ref:e=>{e&&(_.current=e,n(e))}}),t)},theme:S})),r)};"production"!==process.env.NODE_ENV&&(P.propTypes={value:_.default.number.isRequired,onSlackTimeSelected:_.default.func.isRequired,getDisplay:_.default.func.isRequired,options:_.default.arrayOf(_.default.shape({displayName:_.default.string.isRequired,value:_.default.number.isRequired}).isRequired).isRequired,id:_.default.string.isRequired,label:_.default.node.isRequired,icon:_.default.node.isRequired,viaPointIndex:_.default.number.isRequired});const C=p.createInstance({fallbackLng:"fi",resources:{de:{translation:{"add-via-button-label":"Füge Zwischenziel hinzu","add-via-duration-button-label":"Setze Umsteigezeit für Zwischenziel {{index}}","add-via-duration-button-label-close":"Schließe Umsteigezeit-Auswahl für Zwischenziel {{index}}","add-via-duration-button-label-open":"Öffne Umsteigezeit-Auswahl für Zwischenziel {{index}}","minute-short":"min","remove-via-button-label":"Entferne Zwischenziel {{index}}","swap-order-button-label":"Tausche Start mit Ziel","via-point":"Zwischenziel","via-point-index":"Zwischenziel {{index}}","viapoint-slack-amount":"Umsteigezeit"}},en:{translation:{"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}}","minute-short":"min","remove-via-button-label":"Remove via point {{index}}","swap-order-button-label":"Reverse origin and destination","via-point":"Via point","via-point-index":"Via point {{index}}","viapoint-slack-amount":"Stop duration"}},fi:{translation:{"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","minute-short":"min","remove-via-button-label":"Poista välipiste {{index}}","swap-order-button-label":"Käännä reitin suunta vastakkaiseksi","via-point":"Välipiste","via-point-index":"Välipiste {{index}}","viapoint-slack-amount":"Pysähdyksen kesto"}},pl:{translation:{"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}}","minute-short":"min.","remove-via-button-label":"Usuń punkt pośredni {{index}}","swap-order-button-label":"Odwróć początek i cel","via-point":"Punkt pośredni","via-point-index":"Punkt pośredni {{index}}","viapoint-slack-amount":"Czas postoju"}},sv:{translation:{"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}}","minute-short":"min","remove-via-button-label":"Ta bort viapunkt {{index}}","swap-order-button-label":"Sväng ruttens riktning till den motsatta","via-point":"Via punkt","via-point-index":"Via punkt {{index}}","viapoint-slack-amount":"Stoppets varaktighet"}}},defaultNS:"translation",react:{useSuspense:!0}});C.init();var N={"autosuggest-panel":"styles_autosuggest-panel__meNwd","autosuggest-searchpanel-text":"styles_autosuggest-searchpanel-text__-VQTg","origin-input-container":"styles_origin-input-container__p4Qik","destination-input-container":"styles_destination-input-container__jBY4I",row:"styles_row__1GhCD","viapoints-container":"styles_viapoints-container__FYp7K","viapoint-container":"styles_viapoint-container__8yh1M","light-gray-background":"styles_light-gray-background__4fyZs","viapoint-before":"styles_viapoint-before__t4saF","viapoint-input-container":"styles_viapoint-input-container__uZx95","viapoint-1":"styles_viapoint-1__8Mna8",viapoint:"styles_viapoint__vUO9L","viapoint-2":"styles_viapoint-2__-OoUa","viapoint-3":"styles_viapoint-3__vvivE","viapoint-4":"styles_viapoint-4__jS9k1","viapoint-5":"styles_viapoint-5__J4V5N","viapoint-slack-time":"styles_viapoint-slack-time__Xpo0G","select-wrapper":"styles_select-wrapper__1usZw","via-point-button-container":"styles_via-point-button-container__cI2JI","input-viapoint-slack-container":"styles_input-viapoint-slack-container__TNgVy","itinerary-search-control":"styles_itinerary-search-control__cEL1X",opposite:"styles_opposite__zQQhd","add-via-point":"styles_add-via-point__E-gGB","add-via-point-slack":"styles_add-via-point-slack__GKjFf","remove-via-point":"styles_remove-via-point__e9DMQ","combobox-icon":"styles_combobox-icon__d3k1e","time-input-icon":"styles_time-input-icon__M8dmw","rectangle-container":"styles_rectangle-container__AdbAA",rectangle:"styles_rectangle__1IO7E","search-panel-whitespace":"styles_search-panel-whitespace__Luhwx"};w(".styles_autosuggest-panel__meNwd {\n width: 100%; }\n\n.styles_autosuggest-searchpanel-text__-VQTg {\n font-size: 24px;\n font-weight: var(--font-weight-medium);\n letter-spacing: -0.8px;\n color: #333;\n line-height: 1;\n margin-bottom: 17px;\n margin-top: unset; }\n @media screen and (min-width: 768px) {\n .styles_autosuggest-searchpanel-text__-VQTg {\n letter-spacing: -0.8px;\n line-height: 27px;\n margin-bottom: 21px; } }\n\n.styles_origin-input-container__p4Qik,\n.styles_destination-input-container__jBY4I {\n display: flex;\n flex: 1 0 100%; }\n .styles_origin-input-container__p4Qik input[type='text'],\n .styles_destination-input-container__jBY4I input[type='text'] {\n margin: 0; }\n\n.styles_row__1GhCD {\n display: flex;\n flex-direction: row; }\n\n.styles_viapoints-container__FYp7K {\n display: flex;\n flex-direction: column; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M {\n display: flex;\n flex: 1 0 100%;\n min-height: 50px; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M:first-child {\n margin-top: 6px; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M:not(:first-child) {\n margin-top: 3px; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M:last-child {\n margin-bottom: 6px; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs {\n display: flex;\n padding: 3px 0;\n flex-direction: column;\n background: #f2f5f7;\n border-radius: 5px;\n width: 100%; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-before__t4saF {\n display: flex;\n min-width: 27px;\n justify-content: center;\n align-items: center; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-before__t4saF svg {\n fill: #888;\n height: 20px; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-input-container__uZx95 {\n display: flex;\n align-items: center;\n width: 100%; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-input-container__uZx95 input[type='text'] {\n margin: 0; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-input-container__uZx95.styles_viapoint-1__8Mna8 > div.styles_viapoint__vUO9L {\n z-index: 15; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-input-container__uZx95.styles_viapoint-2__-OoUa > div.styles_viapoint__vUO9L {\n z-index: 14; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-input-container__uZx95.styles_viapoint-3__vvivE > div.styles_viapoint__vUO9L {\n z-index: 13; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-input-container__uZx95.styles_viapoint-4__jS9k1 > div.styles_viapoint__vUO9L {\n z-index: 12; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-input-container__uZx95.styles_viapoint-5__J4V5N > div.styles_viapoint__vUO9L {\n z-index: 11; }\n\n.styles_viapoint-slack-time__Xpo0G {\n font-size: 13px;\n font-weight: normal;\n letter-spacing: -0.36px;\n color: #333;\n padding-left: 27px;\n padding-top: 12px;\n padding-bottom: 10px; }\n\n.styles_select-wrapper__1usZw {\n display: flex;\n height: 50px;\n margin-top: 9px;\n padding-left: 27px;\n padding-right: 47px; }\n\n.styles_via-point-button-container__cI2JI {\n display: flex; }\n .styles_via-point-button-container__cI2JI > div:nth-child(1) {\n order: 1;\n border-left: none; }\n .styles_via-point-button-container__cI2JI > div:nth-child(2) {\n order: 2;\n border-left: 1px solid rgba(151, 151, 151, 0.2); }\n\n.styles_input-viapoint-slack-container__TNgVy {\n display: flex;\n flex-direction: column; }\n\n.styles_itinerary-search-control__cEL1X {\n display: flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n max-height: 50px;\n min-width: var(--width); }\n .styles_itinerary-search-control__cEL1X + .styles_itinerary-search-control__cEL1X {\n border-left: 1px solid rgba(151, 151, 151, 0.2); }\n .styles_itinerary-search-control__cEL1X .styles_opposite__zQQhd {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n min-width: 40px;\n cursor: pointer; }\n .styles_itinerary-search-control__cEL1X .styles_opposite__zQQhd svg {\n width: 19px;\n height: 17px; }\n .styles_itinerary-search-control__cEL1X .styles_add-via-point__E-gGB {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n min-width: 40px;\n cursor: pointer; }\n .styles_itinerary-search-control__cEL1X .styles_add-via-point__E-gGB svg {\n width: 20px;\n height: 22px; }\n .styles_itinerary-search-control__cEL1X .styles_add-via-point-slack__GKjFf {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n min-width: 47px;\n cursor: pointer; }\n .styles_itinerary-search-control__cEL1X .styles_add-via-point-slack__GKjFf svg {\n width: 18px;\n height: 19px; }\n .styles_itinerary-search-control__cEL1X .styles_remove-via-point__e9DMQ {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n max-height: 44px;\n min-width: 40px;\n cursor: pointer; }\n .styles_itinerary-search-control__cEL1X .styles_remove-via-point__e9DMQ svg {\n width: 14px;\n height: 14px; }\n\n.styles_combobox-icon__d3k1e {\n color: var(--color);\n border-left: solid #888 1px;\n height: 35px; }\n .styles_combobox-icon__d3k1e.styles_time-input-icon__M8dmw {\n padding: 9px 13px 0 13px; }\n .styles_combobox-icon__d3k1e.styles_time-input-icon__M8dmw svg {\n width: 18px;\n height: 19px; }\n\n.styles_rectangle-container__AdbAA {\n display: block;\n position: relative;\n height: 9px;\n z-index: 19; }\n .styles_rectangle-container__AdbAA .styles_rectangle__1IO7E {\n position: absolute;\n width: 4px;\n height: 21px;\n border-radius: 2px;\n background-color: #ddd;\n margin-left: 25px;\n margin-top: -5px; }\n\n.styles_search-panel-whitespace__Luhwx {\n min-width: 40px; }\n");const A=["children","className","enabled","onClick","onKeyPress","wide"],V=()=>({}),I=e=>{if(void 0===e||v.default(e))return!0;const t=Object.keys(e);return 1===t.length||2===t.length&&t.includes("locationSlack")},R=e=>{let{children:t,className:n,enabled:i,onClick:o,onKeyPress:s,wide:a}=e,l=k(e,A);return h.default.createElement("div",{className:N["itinerary-search-control"],style:{"--width":a?"47px":"40px"}},o&&i&&h.default.createElement("div",Object.assign({},l,{className:n,onClick:o,onKeyPress:s,role:"button",tabIndex:"0"}),t))},O=(e,t,n=!1)=>{const i=e.indexOf(t);return i>-1&&e.splice(i,1),n?e.map((e=>e>t?e-1:e)):e},M=e=>{const t=e&&(e.key||e.which||e.keyCode)||"";return!(!t||![13," ","Spacebar"].concat([32,"Enter"]).includes(t))&&(e.preventDefault(),!0)},j=e=>e&&e.address||e&&e.gps&&e.ready&&"Nykyinen sijainti"||"",F=e=>e&&!0===e.gps?"position":"location";"production"!==process.env.NODE_ENV&&(R.propTypes={children:_.default.node,className:_.default.string.isRequired,enabled:_.default.bool.isRequired,onClick:_.default.func.isRequired,onKeyPress:_.default.func.isRequired,wide:_.default.bool}),R.defaultProps={children:void 0,wide:!1};const L="production"!==process.env.NODE_ENV?_.default.shape({address:_.default.string,lat:_.default.number,lon:_.default.number,locationSlack:_.default.number}):{};class z extends h.default.Component{constructor(e){super(e),x(this,"storeReference",(e=>{this.setState((t=>({refs:[...t.refs,e]})))})),x(this,"handleFocusChange",(()=>{const{destination:e}=this.props;e&&e.lat||this.state.refs[1].focus()})),x(this,"updateViaPoints",(e=>{0!==e.length?this.props.updateViaPoints(e.filter((e=>!I(e)))):this.props.updateViaPoints([])})),x(this,"handleToggleViaPointSlackClick",(e=>{const{activeSlackInputs:t}=this.state;this.setState({activeSlackInputs:t.includes(e)?O(t,e):t.concat([e])})})),x(this,"handleViaPointSlackTimeSelected",((e,t)=>{this.props.addAnalyticsEvent&&this.props.addAnalyticsEvent({action:"EditViaPointStopDuration",category:"ItinerarySettings",name:e/60});const{viaPoints:n}=this.props;n[t].locationSlack=Number.parseInt(e,10),this.updateViaPoints(n)})),x(this,"handleViaPointLocationSelected",((e,t)=>{this.props.handleViaPointLocationSelected(e,t)})),x(this,"handleRemoveViaPointClick",(e=>{this.props.addAnalyticsEvent&&this.props.addAnalyticsEvent({action:"RemoveJourneyViaPoint",category:"ItinerarySettings",name:null});const{activeSlackInputs:t}=this.state,{viaPoints:n}=this.props;n.splice(e,1),this.setState({activeSlackInputs:O(t,e,!0)},(()=>this.updateViaPoints(n)))})),x(this,"handleAddViaPointClick",(()=>{this.props.addAnalyticsEvent&&this.props.addAnalyticsEvent({action:"AddJourneyViaPoint",category:"ItinerarySettings",name:"QuickSettingsButton"});const{viaPoints:e}=this.props;e.push({}),this.setState(this.state)})),x(this,"handleSwapOrderClick",(()=>{this.props.addAnalyticsEvent&&this.props.addAnalyticsEvent({action:"SwitchJourneyStartAndEndPointOrder",category:"ItinerarySettings",name:null});const{viaPoints:e}=this.props;e.reverse(),this.props.swapOrder()})),x(this,"getSlackDisplay",(e=>`${e/60} ${this.props.t("minute-short",{lng:this.props.lang})}`)),this.state={activeSlackInputs:[],refs:[]}}render(){const{origin:e,searchPanelText:t,searchContext:n,disableAutoFocus:i,viaPoints:o,originMobileLabel:a,destinationMobileLabel:l,fontWeights:r,onFocusChange:c,showSwapControl:p,showViapointControl:d,t:_,lang:v}=this.props,{activeSlackInputs:y}=this.state,m=(e=>{const t=[];for(let n=0;n<=9;n++){const i=10*n;t.push({displayName:`${i} ${e("minute-short")}`,value:60*i})}return t})(_),b=(e,t=0)=>e&&e.locationSlack||t,x=e=>y.includes(e);return h.default.createElement("div",{className:u.default(N["autosuggest-panel"],this.props.isMobile&&"small"),style:{"--color":`${this.props.color}`,"--font-weight-medium":r.medium}}," ",t?h.default.createElement("div",null,h.default.createElement("h1",{className:N["autosuggest-searchpanel-text"]}," ",t)):null,h.default.createElement("div",{className:N["origin-input-container"]},h.default.createElement(g.default,{appElement:this.props.appElement,icon:"mapMarker",id:"origin",autoFocus:!0!==i&&(!this.props.isMobile&&!e.lat),storeRef:this.storeReference,refPoint:this.props.refPoint,className:F(e),placeholder:this.props.originPlaceHolder,value:j(e),searchContext:n,getAutoSuggestIcons:this.props.getAutoSuggestIcons,onSelect:this.props.onSelect,onClear:this.props.onClear,focusChange:c||this.handleFocusChange,lang:this.props.lang,sources:this.props.sources,targets:this.props.targets,filterResults:this.props.filterResults,isMobile:this.props.isMobile,color:this.props.color,hoverColor:this.props.hoverColor,mobileLabel:a,fontWeights:this.props.fontWeights,modeSet:this.props.modeSet,modeIconColors:this.props.modeIconColors,showScroll:this.props.showScroll,isEmbedded:this.props.isEmbedded}),(p||d)&&h.default.createElement(R,{className:N.opposite,enabled:p,onClick:()=>this.handleSwapOrderClick(),onKeyPress:e=>M(e)&&this.handleSwapOrderClick(),"aria-label":_("swap-order-button-label",{lng:v})},h.default.createElement(f.default,{img:"opposite",color:this.props.color}))),0===o.length&&h.default.createElement("div",{className:N["rectangle-container"]},h.default.createElement("div",{className:N.rectangle})),h.default.createElement(s.ReactSortable,{className:N["viapoints-container"],list:o,handle:`.${N["viapoint-before"]}`,animation:200,disabled:o.length<=1,setList:e=>{const t=e.filter((e=>!I(e)));t.length>0&&this.props.updateViaPoints(t)}},o.map(((e,t)=>h.default.createElement("div",{className:u.default(N["viapoint-container"]),key:`viapoint-${t}`},h.default.createElement("div",{className:N["light-gray-background"]},h.default.createElement("div",{className:N.row},h.default.createElement("div",{className:N["viapoint-before"],style:o.length>1?{cursor:"move"}:{}},o.length>1&&h.default.createElement(f.default,{img:"ellipsis",rotate:90,color:this.props.color})),h.default.createElement("div",{className:`${N["viapoint-input-container"]} ${N[`viapoint-${t+1}`]}`},h.default.createElement(g.default,{appElement:this.props.appElement,icon:"mapMarker-via",id:"via-point",ariaLabel:_("via-point-index",{index:t+1,lng:v}),autoFocus:!0!==i&&!this.props.isMobile,placeholder:"via-point",className:"viapoint",searchContext:n,refPoint:this.props.refPoint,value:e&&e.address||"",onSelect:this.props.onSelect,onClear:this.props.onClear,handleViaPoints:e=>this.handleViaPointLocationSelected(e,t),lang:this.props.lang,sources:this.props.sources,targets:["Stops","Stations"],filterResults:this.props.filterResults,getAutoSuggestIcons:this.props.getAutoSuggestIcons,isMobile:this.props.isMobile,color:this.props.color,hoverColor:this.props.hoverColor,fontWeights:this.props.fontWeights,modeSet:this.props.modeSet,modeIconColors:this.props.modeIconColors,showScroll:this.props.showScroll})),this.props.showSlackControl&&h.default.createElement(R,{className:N["add-via-point-slack"],enabled:this.props.showViapointControl,onClick:()=>this.handleToggleViaPointSlackClick(t),onKeyPress:e=>M(e)&&this.handleToggleViaPointSlackClick(t),"aria-label":_(x(t)?"add-via-duration-button-label-open":"add-via-duration-button-label-close",{index:t+1,lng:v}),wide:!0},h.default.createElement(f.default,{img:"time",color:this.props.color}))),!x(t)&&o[t]&&o[t].locationSlack>0&&h.default.createElement("span",{className:N["viapoint-slack-time"]},`${_("viapoint-slack-amount",{lng:v})}: ${this.getSlackDisplay(o[t].locationSlack)}`),h.default.createElement("div",{className:u.default(N["input-viapoint-slack-container"],!x(t)&&"collapsed")},h.default.createElement("div",{className:N["select-wrapper"]},h.default.createElement(P,{id:`viapoint-slack-${t}`,label:_("viapoint-slack-amount",{lng:v}),options:m,value:b(o[t]),getDisplay:this.getSlackDisplay,viaPointIndex:t,icon:h.default.createElement("span",{className:`${N["combobox-icon"]} ${N["time-input-icon"]}`},h.default.createElement(f.default,{img:"time",color:this.props.color})),onSlackTimeSelected:this.handleViaPointSlackTimeSelected})))),h.default.createElement(R,{className:N["remove-via-point"],enabled:this.props.showViapointControl,onClick:()=>this.handleRemoveViaPointClick(t),onKeyPress:e=>M(e)&&this.handleRemoveViaPointClick(t),"aria-label":_("remove-via-button-label",{index:t+1,lng:v})},h.default.createElement(f.default,{img:"trash",color:this.props.color})))))),h.default.createElement("div",{className:N["destination-input-container"]},h.default.createElement(g.default,{appElement:this.props.appElement,icon:"mapMarker",id:"destination",autoFocus:!0!==i&&(!this.props.isMobile&&!Number.isNaN(e.lat)),storeRef:this.storeReference,placeholder:this.props.destinationPlaceHolder,className:F(this.props.destination),getAutoSuggestIcons:this.props.getAutoSuggestIcons,searchContext:n,onSelect:this.props.onSelect,onClear:this.props.onClear,refPoint:this.props.refPoint,value:j(this.props.destination),lang:this.props.lang,sources:this.props.sources,targets:this.props.targets,filterResults:this.props.filterResults,isMobile:this.props.isMobile,color:this.props.color,hoverColor:this.props.hoverColor,mobileLabel:l,fontWeights:this.props.fontWeights,modeSet:this.props.modeSet,modeIconColors:this.props.modeIconColors,showScroll:this.props.showScroll,isEmbedded:this.props.isEmbedded}),(p||d)&&h.default.createElement(R,{className:u.default(N["add-via-point"],N.more,o.length>4&&"collapsed"),enabled:d&&0===o.length,onClick:()=>this.handleAddViaPointClick(),onKeyPress:e=>M(e)&&this.handleAddViaPointClick(),"aria-label":_("add-via-button-label",{lng:v})},h.default.createElement(f.default,{img:"viapoint",width:1.25,height:1.375,color:this.props.color}))))}}x(z,"defaultProps",{origin:void 0,destination:void 0,viaPoints:[],originPlaceHolder:"give-origin",destinationPlaceHolder:"give-destination",swapOrder:void 0,updateViaPoints:()=>{},searchPanelText:void 0,sources:[],targets:[],filterResults:void 0,onClear:void 0,getAutoSuggestIcons:void 0,refPoint:void 0,addAnalyticsEvent:void 0,disableAutoFocus:!1,isMobile:!1,handleViaPointLocationSelected:void 0,color:"#007ac9",hoverColor:"#0062a1",originMobileLabel:null,destinationMobileLabel:null,modeSet:void 0,modeIconColors:void 0,fontWeights:{medium:500},showScroll:!1,onFocusChange:void 0,isEmbedded:!1,showSwapControl:!1,showViapointControl:!1,showSlackControl:!1}),"production"!==process.env.NODE_ENV&&(z.propTypes={appElement:_.default.string.isRequired,origin:L,destination:L,originPlaceHolder:_.default.string,destinationPlaceHolder:_.default.string,viaPoints:_.default.arrayOf(L),updateViaPoints:_.default.func,handleViaPointLocationSelected:_.default.func,swapOrder:_.default.func,searchPanelText:_.default.string,searchContext:_.default.shape({URL_PELIAS:_.default.string}).isRequired,onSelect:_.default.func.isRequired,onClear:_.default.func,addAnalyticsEvent:_.default.func,lang:_.default.string.isRequired,disableAutoFocus:_.default.bool,sources:_.default.arrayOf(_.default.string),targets:_.default.arrayOf(_.default.string),filterResults:_.default.func,isMobile:_.default.bool,color:_.default.string,hoverColor:_.default.string,originMobileLabel:_.default.string,destinationMobileLabel:_.default.string,refPoint:L,modeSet:_.default.string,modeIconColors:_.default.objectOf(_.default.string),getAutoSuggestIcons:_.default.objectOf(_.default.func),fontWeights:_.default.shape({medium:_.default.number}),showScroll:_.default.bool,onFocusChange:_.default.func,isEmbedded:_.default.bool,showSwapControl:_.default.bool,showViapointControl:_.default.bool,showSlackControl:_.default.bool,t:_.default.func.isRequired});const q=o.withTranslation()(z);e.default=e=>h.default.createElement(o.I18nextProvider,{i18n:C},h.default.createElement(q,e)),e.getEmptyViaPointPlaceHolder=V,Object.defineProperty(e,"__esModule",{value:!0})}));
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZGV2ZWxvcG1lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWluamVjdC9kaXN0L3N0eWxlLWluamVjdC5lcy5qcyIsIi4uL3NyYy9oZWxwZXJzL1NlbGVjdC5qcyIsIi4uL3NyYy9oZWxwZXJzL3RyYW5zbGF0aW9ucy5qcyIsIi4uL3NyYy9oZWxwZXJzL2kxOG4uanMiLCIuLi9zcmMvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvO1xuICB9IDogZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbztcbiAgfSwgX3R5cGVvZihvKTtcbn1cbmV4cG9ydCB7IF90eXBlb2YgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IHRvUHJpbWl0aXZlIGZyb20gXCIuL3RvUHJpbWl0aXZlLmpzXCI7XG5mdW5jdGlvbiB0b1Byb3BlcnR5S2V5KHQpIHtcbiAgdmFyIGkgPSB0b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjtcbn1cbmV4cG9ydCB7IHRvUHJvcGVydHlLZXkgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuZnVuY3Rpb24gdG9QcmltaXRpdmUodCwgcikge1xuICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDtcbiAgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07XG4gIGlmICh2b2lkIDAgIT09IGUpIHtcbiAgICB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTtcbn1cbmV4cG9ydCB7IHRvUHJpbWl0aXZlIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkge1xuICByZXR1cm4gKHIgPSB0b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHtcbiAgICB2YWx1ZTogdCxcbiAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICBjb25maWd1cmFibGU6ICEwLFxuICAgIHdyaXRhYmxlOiAhMFxuICB9KSA6IGVbcl0gPSB0LCBlO1xufVxuZXhwb3J0IHsgX2RlZmluZVByb3BlcnR5IGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiLi9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzXCI7XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkge1xuICBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307XG4gIHZhciBvLFxuICAgIHIsXG4gICAgaSA9IG9iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7XG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO1xuICAgIGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgLTEgPT09IHQuaW5kZXhPZihvKSAmJiB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7XG4gIH1cbiAgcmV0dXJuIGk7XG59XG5leHBvcnQgeyBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHtcbiAgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9O1xuICB2YXIgdCA9IHt9O1xuICBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7XG4gICAgaWYgKC0xICE9PSBlLmluZGV4T2YobikpIGNvbnRpbnVlO1xuICAgIHRbbl0gPSByW25dO1xuICB9XG4gIHJldHVybiB0O1xufVxuZXhwb3J0IHsgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIHN0eWxlSW5qZWN0KGNzcywgcmVmKSB7XG4gIGlmICggcmVmID09PSB2b2lkIDAgKSByZWYgPSB7fTtcbiAgdmFyIGluc2VydEF0ID0gcmVmLmluc2VydEF0O1xuXG4gIGlmICghY3NzIHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuOyB9XG5cbiAgdmFyIGhlYWQgPSBkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG4gIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHN0eWxlLnR5cGUgPSAndGV4dC9jc3MnO1xuXG4gIGlmIChpbnNlcnRBdCA9PT0gJ3RvcCcpIHtcbiAgICBpZiAoaGVhZC5maXJzdENoaWxkKSB7XG4gICAgICBoZWFkLmluc2VydEJlZm9yZShzdHlsZSwgaGVhZC5maXJzdENoaWxkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICB9XG5cbiAgaWYgKHN0eWxlLnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG4gIH0gZWxzZSB7XG4gICAgc3R5bGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgc3R5bGVJbmplY3Q7XG4iLCJpbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlTGF5b3V0RWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IEF1dG9zdWdnZXN0IGZyb20gJ3JlYWN0LWF1dG9zdWdnZXN0JztcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zZWxlY3Quc2Nzcyc7XG5cbmNvbnN0IFNlbGVjdCA9ICh7XG4gIHZhbHVlLFxuICBnZXREaXNwbGF5LFxuICBvcHRpb25zLFxuICBvblNsYWNrVGltZVNlbGVjdGVkLFxuICB2aWFQb2ludEluZGV4LFxuICBpZCxcbiAgbGFiZWwsXG4gIGljb24sXG59KSA9PiB7XG4gIGNvbnN0IFtkaXNwbGF5VmFsdWUsIGNoYW5nZURpc3BsYXlWYWx1ZV0gPSB1c2VTdGF0ZShnZXREaXNwbGF5KHZhbHVlKSk7XG4gIGNvbnN0IFtvcGVuLCBjaGFuZ2VPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgdXNlRWZmZWN0KCgpID0+IGNoYW5nZURpc3BsYXlWYWx1ZShnZXREaXNwbGF5KHZhbHVlKSksIFt2YWx1ZV0pO1xuICBjb25zdCBzY3JvbGxSZWYgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IHNjcm9sbEluZGV4ID0gTWF0aC5mbG9vcih2YWx1ZSAvIDYwMCk7XG4gIGNvbnN0IGVsZW1lbnRIZWlnaHQgPSA1MDtcbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAob3BlbiAmJiBzY3JvbGxSZWYuY3VycmVudCkge1xuICAgICAgc2Nyb2xsUmVmLmN1cnJlbnQuc2Nyb2xsVG9wID0gZWxlbWVudEhlaWdodCAqIHNjcm9sbEluZGV4O1xuICAgIH1cbiAgfSwgW3ZhbHVlLCBvcGVuXSk7XG5cbiAgY29uc3QgaW5wdXRJZCA9IGAke2lkfS1pbnB1dGA7XG4gIGNvbnN0IGxhYmVsSWQgPSBgJHtpZH0tbGFiZWxgO1xuXG4gIGNvbnN0IG9uSW5wdXRDaGFuZ2UgPSAoXywgeyBuZXdWYWx1ZSwgbWV0aG9kIH0pID0+IHtcbiAgICBzd2l0Y2ggKG1ldGhvZCkge1xuICAgICAgY2FzZSAnZW50ZXInOlxuICAgICAgY2FzZSAnY2xpY2snOlxuICAgICAgICBvblNsYWNrVGltZVNlbGVjdGVkKG5ld1ZhbHVlLCB2aWFQb2ludEluZGV4KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdlc2NhcGUnOlxuICAgICAgICBjaGFuZ2VEaXNwbGF5VmFsdWUodmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3VwJzpcbiAgICAgIGNhc2UgJ2Rvd24nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9O1xuICByZXR1cm4gKFxuICAgIDxsYWJlbCBjbGFzc05hbWU9e3N0eWxlc1snY29tYm9ib3gtY29udGFpbmVyJ119IGh0bWxGb3I9e2lucHV0SWR9PlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXNbJ2xlZnQtY29sdW1uJ119PlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlc1snY29tYm9ib3gtbGFiZWwnXX0gaWQ9e2xhYmVsSWR9PlxuICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8QXV0b3N1Z2dlc3RcbiAgICAgICAgICBpZD17aWR9XG4gICAgICAgICAgc3VnZ2VzdGlvbnM9e29wdGlvbnN9XG4gICAgICAgICAgZ2V0U3VnZ2VzdGlvblZhbHVlPXtzID0+IHMudmFsdWV9XG4gICAgICAgICAgcmVuZGVyU3VnZ2VzdGlvbj17cyA9PiBzLmRpc3BsYXlOYW1lfVxuICAgICAgICAgIG9uU3VnZ2VzdGlvbnNGZXRjaFJlcXVlc3RlZD17KCkgPT4gbnVsbH1cbiAgICAgICAgICBzaG91bGRSZW5kZXJTdWdnZXN0aW9ucz17KCkgPT4gdHJ1ZX1cbiAgICAgICAgICBmb2N1c0lucHV0T25TdWdnZXN0aW9uQ2xpY2s9e2ZhbHNlfVxuICAgICAgICAgIG9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZD17KCkgPT4gbnVsbH1cbiAgICAgICAgICBpbnB1dFByb3BzPXt7XG4gICAgICAgICAgICB2YWx1ZTogZGlzcGxheVZhbHVlLFxuICAgICAgICAgICAgb25DaGFuZ2U6IG9uSW5wdXRDaGFuZ2UsXG4gICAgICAgICAgICBvbkZvY3VzOiAoKSA9PiB7XG4gICAgICAgICAgICAgIGNoYW5nZU9wZW4odHJ1ZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25CbHVyOiAoKSA9PiB7XG4gICAgICAgICAgICAgIGNoYW5nZU9wZW4oZmFsc2UpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkOiBpbnB1dElkLFxuICAgICAgICAgICAgJ2FyaWEtbGFiZWxsZWRieSc6IGxhYmVsSWQsXG4gICAgICAgICAgICAnYXJpYS1hdXRvY29tcGxldGUnOiAnbm9uZScsXG4gICAgICAgICAgICByZWFkT25seTogdHJ1ZSxcbiAgICAgICAgICB9fVxuICAgICAgICAgIHJlbmRlclN1Z2dlc3Rpb25zQ29udGFpbmVyPXsoeyBjb250YWluZXJQcm9wcywgY2hpbGRyZW4gfSkgPT4ge1xuICAgICAgICAgICAgLy8gc2V0IHJlZnMgZm9yIGF1dG9zdWdnZXN0IGxpYnJhcnkgYW5kIHNjcm9sbGJhciBwb3NpdGlvbmluZ1xuICAgICAgICAgICAgY29uc3QgeyByZWYsIC4uLm90aGVyUmVmcyB9ID0gY29udGFpbmVyUHJvcHM7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJSZWYgPSBlbGVtID0+IHtcbiAgICAgICAgICAgICAgaWYgKGVsZW0pIHtcbiAgICAgICAgICAgICAgICBzY3JvbGxSZWYuY3VycmVudCA9IGVsZW07XG4gICAgICAgICAgICAgICAgcmVmKGVsZW0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPGRpdiB0YWJJbmRleD1cIi0xXCIgey4uLm90aGVyUmVmc30gcmVmPXtjb250YWluZXJSZWZ9PlxuICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH19XG4gICAgICAgICAgdGhlbWU9e3N0eWxlc31cbiAgICAgICAgLz5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIHtpY29ufVxuICAgIDwvbGFiZWw+XG4gICk7XG59O1xuXG5TZWxlY3QucHJvcFR5cGVzID0ge1xuICB2YWx1ZTogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICBvblNsYWNrVGltZVNlbGVjdGVkOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBnZXREaXNwbGF5OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihcbiAgICBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgZGlzcGxheU5hbWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAgIHZhbHVlOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gICAgfSkuaXNSZXF1aXJlZCxcbiAgKS5pc1JlcXVpcmVkLFxuICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBsYWJlbDogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgaWNvbjogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgdmlhUG9pbnRJbmRleDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgU2VsZWN0O1xuIiwiY29uc3QgdHJhbnNsYXRpb25zID0ge1xuICBkZToge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnRsO8Z2UgWndpc2NoZW56aWVsIGhpbnp1JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAgICdTZXR6ZSBVbXN0ZWlnZXplaXQgZsO8ciBad2lzY2hlbnppZWwge3tpbmRleH19JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAgICdTY2hsaWXDn2UgVW1zdGVpZ2V6ZWl0LUF1c3dhaGwgZsO8ciBad2lzY2hlbnppZWwge3tpbmRleH19JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICAgJ8OWZmZuZSBVbXN0ZWlnZXplaXQtQXVzd2FobCBmw7xyIFp3aXNjaGVuemllbCB7e2luZGV4fX0nLFxuICAgICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4nLFxuICAgICAgJ3JlbW92ZS12aWEtYnV0dG9uLWxhYmVsJzogJ0VudGZlcm5lIFp3aXNjaGVuemllbCB7e2luZGV4fX0nLFxuICAgICAgJ3N3YXAtb3JkZXItYnV0dG9uLWxhYmVsJzogJ1RhdXNjaGUgU3RhcnQgbWl0IFppZWwnLFxuICAgICAgJ3ZpYS1wb2ludCc6ICdad2lzY2hlbnppZWwnLFxuICAgICAgJ3ZpYS1wb2ludC1pbmRleCc6ICdad2lzY2hlbnppZWwge3tpbmRleH19JyxcbiAgICAgICd2aWFwb2ludC1zbGFjay1hbW91bnQnOiAnVW1zdGVpZ2V6ZWl0JyxcbiAgICB9LFxuICB9LFxuICBlbjoge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnQWRkIHZpYSBwb2ludCcsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwnOlxuICAgICAgICAnU2V0IHN0b3AgZHVyYXRpb24gYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgICAnQ2xvc2Ugc3RvcCBkdXJhdGlvbiBzZWxlY3RvciBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICAgJ09wZW4gc3RvcCBkdXJhdGlvbiBzZWxlY3RvciBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAgICdtaW51dGUtc2hvcnQnOiAnbWluJyxcbiAgICAgICdyZW1vdmUtdmlhLWJ1dHRvbi1sYWJlbCc6ICdSZW1vdmUgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgICAnc3dhcC1vcmRlci1idXR0b24tbGFiZWwnOiAnUmV2ZXJzZSBvcmlnaW4gYW5kIGRlc3RpbmF0aW9uJyxcbiAgICAgICd2aWEtcG9pbnQnOiAnVmlhIHBvaW50JyxcbiAgICAgICd2aWEtcG9pbnQtaW5kZXgnOiAnVmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgICAndmlhcG9pbnQtc2xhY2stYW1vdW50JzogJ1N0b3AgZHVyYXRpb24nLFxuICAgIH0sXG4gIH0sXG4gIGZpOiB7XG4gICAgdHJhbnNsYXRpb246IHtcbiAgICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdMaXPDpMOkIHbDpGxpcGlzdGUnLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzpcbiAgICAgICAgJ0FzZXRhIHbDpGxpcGlzdGVlbGxlIHt7aW5kZXh9fSBweXPDpGhkeWtzZW4ga2VzdG8nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICAgJ0F2YWEgdsOkbGlwaXN0ZWVuIHt7aW5kZXh9fSBweXPDpGhkeWtzZW4ga2VzdG8gdmFsaXRzaW4nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgICAnU3VsamUgdsOkbGlwaXN0ZWVuIHt7aW5kZXh9fSBweXPDpGhkeWtzZW4ga2VzdG8gdmFsaXRzaW4nLFxuICAgICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4nLFxuICAgICAgJ3JlbW92ZS12aWEtYnV0dG9uLWxhYmVsJzogJ1BvaXN0YSB2w6RsaXBpc3RlIHt7aW5kZXh9fScsXG4gICAgICAnc3dhcC1vcmRlci1idXR0b24tbGFiZWwnOiAnS8Okw6RubsOkIHJlaXRpbiBzdXVudGEgdmFzdGFra2Fpc2Vrc2knLFxuICAgICAgJ3ZpYS1wb2ludCc6ICdWw6RsaXBpc3RlJyxcbiAgICAgICd2aWEtcG9pbnQtaW5kZXgnOiAnVsOkbGlwaXN0ZSB7e2luZGV4fX0nLFxuICAgICAgJ3ZpYXBvaW50LXNsYWNrLWFtb3VudCc6ICdQeXPDpGhkeWtzZW4ga2VzdG8nLFxuICAgIH0sXG4gIH0sXG4gIHBsOiB7XG4gICAgdHJhbnNsYXRpb246IHtcbiAgICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdEb2RhaiBwdW5rdCBwb8WbcmVkbmknLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzpcbiAgICAgICAgJ1d5YmllcnogY3phcyBwb3N0b2p1IGRsYSBwdW5rdHUge3tpbmRleH19JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAgICdaYW1rbmlqIHd5Ym9ybmlrIGN6YXN1IHBvc3RvanUgdyBwdW5rY2llIHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAgICdPdHfDs3J6IHd5Ym9ybmlrIGN6YXN1IHBvc3RvanUgdyBwdW5rY2llIHt7aW5kZXh9fScsXG4gICAgICAnbWludXRlLXNob3J0JzogJ21pbi4nLFxuICAgICAgJ3JlbW92ZS12aWEtYnV0dG9uLWxhYmVsJzogJ1VzdcWEIHB1bmt0IHBvxZtyZWRuaSB7e2luZGV4fX0nLFxuICAgICAgJ3N3YXAtb3JkZXItYnV0dG9uLWxhYmVsJzogJ09kd3LDs8SHIHBvY3rEhXRlayBpIGNlbCcsXG4gICAgICAndmlhLXBvaW50JzogJ1B1bmt0IHBvxZtyZWRuaScsXG4gICAgICAndmlhLXBvaW50LWluZGV4JzogJ1B1bmt0IHBvxZtyZWRuaSB7e2luZGV4fX0nLFxuICAgICAgJ3ZpYXBvaW50LXNsYWNrLWFtb3VudCc6ICdDemFzIHBvc3RvanUnLFxuICAgIH0sXG4gIH0sXG4gIHN2OiB7XG4gICAgdHJhbnNsYXRpb246IHtcbiAgICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdMw6RnZyB0aWxsIHZpYXB1bmt0JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAgICdTdMOkbGwgaW4gdmFyYWt0aWdoZXQgZsO2ciB2aWFwdW5rdGVuIHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgICAnU3TDpG5nIHbDpGxqYXJlbiBmw7ZyIHZhcmFrdGlnaGV0IHZpZCB2aWEtcHVua3RlbiB7e2luZGV4fX0nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgICAnw5ZwcG5hIHbDpGxqYXJlbiBmw7ZyIHZhcmFrdGlnaGV0IHZpZCB2aWEtcHVua3RlbiB7e2luZGV4fX0nLFxuICAgICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4nLFxuICAgICAgJ3JlbW92ZS12aWEtYnV0dG9uLWxhYmVsJzogJ1RhIGJvcnQgdmlhcHVua3Qge3tpbmRleH19JyxcbiAgICAgICdzd2FwLW9yZGVyLWJ1dHRvbi1sYWJlbCc6ICdTdsOkbmcgcnV0dGVucyByaWt0bmluZyB0aWxsIGRlbiBtb3RzYXR0YScsXG4gICAgICAndmlhLXBvaW50JzogJ1ZpYSBwdW5rdCcsXG4gICAgICAndmlhLXBvaW50LWluZGV4JzogJ1ZpYSBwdW5rdCB7e2luZGV4fX0nLFxuICAgICAgJ3ZpYXBvaW50LXNsYWNrLWFtb3VudCc6ICdTdG9wcGV0cyB2YXJha3RpZ2hldCcsXG4gICAgfSxcbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHRyYW5zbGF0aW9ucztcbiIsImltcG9ydCB7IGNyZWF0ZUluc3RhbmNlIH0gZnJvbSAnaTE4bmV4dCc7XG5pbXBvcnQgdHJhbnNsYXRpb25zIGZyb20gJy4vdHJhbnNsYXRpb25zJztcblxuY29uc3QgaTE4biA9IGNyZWF0ZUluc3RhbmNlKHtcbiAgZmFsbGJhY2tMbmc6ICdmaScsXG4gIC8vIGRlYnVnOiB0cnVlLFxuICByZXNvdXJjZXM6IHRyYW5zbGF0aW9ucyxcbiAgZGVmYXVsdE5TOiAndHJhbnNsYXRpb24nLFxuICByZWFjdDoge1xuICAgIHVzZVN1c3BlbnNlOiB0cnVlLFxuICB9LFxufSk7XG5cbmkxOG4uaW5pdCgpO1xuXG5leHBvcnQgZGVmYXVsdCBpMThuO1xuIiwiLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG5pbXBvcnQgY3ggZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEkxOG5leHRQcm92aWRlciwgd2l0aFRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCc7XG5pbXBvcnQgeyBSZWFjdFNvcnRhYmxlIH0gZnJvbSAncmVhY3Qtc29ydGFibGVqcyc7XG5pbXBvcnQgRFRBdXRvU3VnZ2VzdCBmcm9tICdAZGlnaXRyYW5zaXQtY29tcG9uZW50L2RpZ2l0cmFuc2l0LWNvbXBvbmVudC1hdXRvc3VnZ2VzdCc7XG5pbXBvcnQgSWNvbiBmcm9tICdAZGlnaXRyYW5zaXQtY29tcG9uZW50L2RpZ2l0cmFuc2l0LWNvbXBvbmVudC1pY29uJztcbmltcG9ydCBpc0VtcHR5IGZyb20gJ2xvZGFzaC9pc0VtcHR5JztcbmltcG9ydCBTZWxlY3QgZnJvbSAnLi9oZWxwZXJzL1NlbGVjdCc7XG5pbXBvcnQgaTE4biBmcm9tICcuL2hlbHBlcnMvaTE4bic7XG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vaGVscGVycy9zdHlsZXMuc2Nzcyc7XG5cbmV4cG9ydCBjb25zdCBnZXRFbXB0eVZpYVBvaW50UGxhY2VIb2xkZXIgPSAoKSA9PiAoe30pO1xuXG5jb25zdCBpc1ZpYVBvaW50RW1wdHkgPSB2aWFQb2ludCA9PiB7XG4gIGlmICh2aWFQb2ludCA9PT0gdW5kZWZpbmVkIHx8IGlzRW1wdHkodmlhUG9pbnQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHZpYVBvaW50KTtcbiAgcmV0dXJuIChcbiAgICBrZXlzLmxlbmd0aCA9PT0gMSB8fCAoa2V5cy5sZW5ndGggPT09IDIgJiYga2V5cy5pbmNsdWRlcygnbG9jYXRpb25TbGFjaycpKVxuICApO1xufTtcblxuY29uc3QgSXRpbmVyYXJ5U2VhcmNoQ29udHJvbCA9ICh7XG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIGVuYWJsZWQsXG4gIG9uQ2xpY2ssXG4gIG9uS2V5UHJlc3MsXG4gIHdpZGUsXG4gIC4uLnJlc3Rcbn0pID0+IChcbiAgPGRpdlxuICAgIGNsYXNzTmFtZT17c3R5bGVzWydpdGluZXJhcnktc2VhcmNoLWNvbnRyb2wnXX1cbiAgICBzdHlsZT17eyAnLS13aWR0aCc6IHdpZGUgPyAnNDdweCcgOiAnNDBweCcgfX1cbiAgPlxuICAgIHtvbkNsaWNrICYmIGVuYWJsZWQgJiYgKFxuICAgICAgPGRpdlxuICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICAgIG9uS2V5UHJlc3M9e29uS2V5UHJlc3N9XG4gICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICB0YWJJbmRleD1cIjBcIlxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L2Rpdj5cbiAgICApfVxuICA8L2Rpdj5cbik7XG5cbmNvbnN0IHVwZGF0ZVZpYVBvaW50U2xhY2sgPSAoXG4gIGFjdGl2ZVZpYVBvaW50U2xhY2tzLFxuICB1cGRhdGVkVmlhUG9pbnRJbmRleCxcbiAgdmlhUG9pbnRSZW1vdmVkID0gZmFsc2UsXG4pID0+IHtcbiAgY29uc3QgZm91bmRBdEluZGV4ID0gYWN0aXZlVmlhUG9pbnRTbGFja3MuaW5kZXhPZih1cGRhdGVkVmlhUG9pbnRJbmRleCk7XG4gIGlmIChmb3VuZEF0SW5kZXggPiAtMSkge1xuICAgIGFjdGl2ZVZpYVBvaW50U2xhY2tzLnNwbGljZShmb3VuZEF0SW5kZXgsIDEpO1xuICB9XG4gIHJldHVybiB2aWFQb2ludFJlbW92ZWRcbiAgICA/IGFjdGl2ZVZpYVBvaW50U2xhY2tzLm1hcCh2YWx1ZSA9PlxuICAgICAgICB2YWx1ZSA+IHVwZGF0ZWRWaWFQb2ludEluZGV4ID8gdmFsdWUgLSAxIDogdmFsdWUsXG4gICAgICApXG4gICAgOiBhY3RpdmVWaWFQb2ludFNsYWNrcztcbn07XG5cbmNvbnN0IGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudCA9IGV2ZW50ID0+IHtcbiAgY29uc3Qgc3BhY2UgPSBbMTMsICcgJywgJ1NwYWNlYmFyJ107XG4gIGNvbnN0IGVudGVyID0gWzMyLCAnRW50ZXInXTtcbiAgY29uc3Qga2V5ID0gKGV2ZW50ICYmIChldmVudC5rZXkgfHwgZXZlbnQud2hpY2ggfHwgZXZlbnQua2V5Q29kZSkpIHx8ICcnO1xuICBpZiAoIWtleSB8fCAhc3BhY2UuY29uY2F0KGVudGVyKS5pbmNsdWRlcyhrZXkpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIHJldHVybiB0cnVlO1xufTtcblxuY29uc3QgdmFsdWUgPSBsb2NhdGlvbiA9PlxuICAobG9jYXRpb24gJiYgbG9jYXRpb24uYWRkcmVzcykgfHxcbiAgKGxvY2F0aW9uICYmIGxvY2F0aW9uLmdwcyAmJiBsb2NhdGlvbi5yZWFkeSAmJiAnTnlreWluZW4gc2lqYWludGknKSB8fFxuICAnJztcblxuY29uc3QgZ2V0TG9jYXRpb25UeXBlID0gbG9jYXRpb24gPT5cbiAgbG9jYXRpb24gJiYgbG9jYXRpb24uZ3BzID09PSB0cnVlID8gJ3Bvc2l0aW9uJyA6ICdsb2NhdGlvbic7XG5cbmNvbnN0IGdldFNsYWNrVGltZU9wdGlvbnMgPSB0ID0+IHtcbiAgY29uc3QgdGltZU9wdGlvbnMgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPD0gOTsgaSsrKSB7XG4gICAgY29uc3QgdmFsdWVJbk1pbnV0ZXMgPSBpICogMTA7XG4gICAgdGltZU9wdGlvbnMucHVzaCh7XG4gICAgICBkaXNwbGF5TmFtZTogYCR7dmFsdWVJbk1pbnV0ZXN9ICR7dCgnbWludXRlLXNob3J0Jyl9YCxcbiAgICAgIHZhbHVlOiB2YWx1ZUluTWludXRlcyAqIDYwLFxuICAgIH0pO1xuICB9XG4gIHJldHVybiB0aW1lT3B0aW9ucztcbn07XG5cbkl0aW5lcmFyeVNlYXJjaENvbnRyb2wucHJvcFR5cGVzID0ge1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBlbmFibGVkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvbktleVByZXNzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICB3aWRlOiBQcm9wVHlwZXMuYm9vbCxcbn07XG5cbkl0aW5lcmFyeVNlYXJjaENvbnRyb2wuZGVmYXVsdFByb3BzID0ge1xuICBjaGlsZHJlbjogdW5kZWZpbmVkLFxuICB3aWRlOiBmYWxzZSxcbn07XG5cbi8qKlxuICogUGFuZWwgdGhhdCByZW5kZXJzIHR3byBEVEF1dG9zdWdnZXN0IHNlYXJjaCBmaWVsZHMsIGluY2x1ZGluZyB2aWFwb2ludCBoYW5kbGluZ1xuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBzZWFyY2hDb250ZXh0ID0ge1xuICogICBpc1BlbGlhc0xvY2F0aW9uQXdhcmU6IGZhbHNlIC8vIHRydWUgLyBmYWxzZSBkb2VzIExldCBQZWxpYXMgc3VnZ2VzdCBiYXNlZCBvbiBjdXJyZW50IHVzZXIgbG9jYXRpb25cbiAqICAgbWluaW1hbFJlZ2V4cDogdW5kZWZpbmVkIC8vIHVzZWQgZm9yIHRlc3RpbmcgbWluLiByZWdleHAuIEZvciBleGFtcGxlOiBuZXcgUmVnRXhwKCcuezIsfScpLFxuICogICBsaW5lUmVnZXhwOiB1bmRlZmluZWQgLy8gIGlkZW50aWZ5IHNlYXJjaGVzIGZvciByb3V0ZSBudW1iZXJzL2xhYmVsczogYnVzIHwgdHJhaW4gfCBtZXRyby4gRm9yIGV4YW1wbGU6IG5ldyBSZWdFeHAoXG4gKiAgICAvLyAgICcoXlswLTldK1thLXpdPyR8Xlt5dWxlYXBpbmtydGR6XSR8KF5tWzEyXT9iPyQpKScsXG4gKiAgICAvLyAgJ2knLFxuICogICAgLy8gICksXG4gKiAgIFVSTF9QRUxJQVM6ICcnIC8vIHVybCBmb3IgcGVsaWFzIHNlYXJjaGVzXG4gKiAgIGZlZWRJRHM6IFsnSFNMJywgJ0hTTExhdXR0YSddIC8vIEZlZWRJZCdzIGxpa2UgIFtIU0wsIEhTTExhdXR0YV1cbiAqICAgZ2VvY29kaW5nU291cmNlczogWydvYScsJ29zbScsJ25sc2ZpJ10gIC8vIHNvdXJjZXMgZm9yIGdlb2NvZGluZ1xuICogICBnZW9jb2RpbmdTZWFyY2hQYXJhbXM7IHt9ICAvLyBTZWFyY2hwYXJtYXMgZnJvIGdlb2NvZGluZ1xuICogICBnZXRGYXZvdXJpdGVMb2NhdGlvbnM6ICgpID0+ICh7fSksICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhcnJheSBvZiBmYXZvdXJpdGUgbG9jYXRpb25zLlxuICogICBnZXRGYXZvdXJpdGVTdG9wczogKCkgPT4gKHt9KSwgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhcnJheSBvZiBmYXZvdXJpdGUgc3RvcHMuXG4gKiAgIGdldExhbmd1YWdlOiAoKSA9PiAoe30pLCAgICAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGN1cnJlbnQgbGFuZ3VhZ2UuXG4gKiAgIGdldEZhdm91cml0ZVJvdXRlczogKCkgPT4gKHt9KSwgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGFycmF5IG9mIGZhdm91cml0ZSByb3V0ZXMuXG4gKiAgIGdldFBvc2l0aW9uczogKCkgPT4gKHt9KSwgICAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHVzZXIncyBnZW9sb2NhdGlvbi5cbiAqICAgZ2V0Um91dGVzUXVlcnk6ICgpID0+ICh7fSksICAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgcXVlcnkgZm9yIGZldGNoaW5nIHJvdXRlcy5cbiAqICAgZ2V0U3RvcEFuZFN0YXRpb25zUXVlcnk6ICgpID0+ICh7fSksICAvLyBGdW5jdGlvbiB0aGF0IGZldGNoZXMgZmF2b3VyaXRlIHN0b3BzIGFuZCBzdGF0aW9ucyBmcm9tIGdyYXBocWwgQVBJLlxuICogICBnZXRGYXZvdXJpdGVSb3V0ZXNRdWVyeTogKCkgPT4gKHt9KSwgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBxdWVyeSBmb3IgZmV0Y2hpbmcgZmF2b3VyaXRlIHJvdXRlcy5cbiAqICAgZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zOiAoKSA9PiAoe30pLCAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGZhdm91cml0ZSBiaWtlIHJlbnRhbCBzdGF0aW9uLlxuICogICBnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnNRdWVyeTogKCkgPT4gKHt9KSwgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHF1ZXJ5IGZvciBmZXRjaGluZyBmYXZvdXJpdGUgYmlrZSByZW50YWwgc3RhdGlvbnMuXG4gKiAgIHN0YXJ0TG9jYXRpb25XYXRjaDogKCkgPT4gKHt9KSwgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBsb2NhdGVzIHVzZXJzIGdlb2xvY2F0aW9uLlxuICogICBzYXZlU2VhcmNoOiAoKSA9PiAoe30pLCAgICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgc2F2ZXMgc2VhcmNoIHRvIG9sZCBzZWFyY2hlcyBzdG9yZS5cbiAqICAgY2xlYXJPbGRTZWFyY2hlczogKCkgPT4gKHt9KSwgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IGNsZWFycyBvbGQgc2VhcmNoZXMgc3RvcmUuXG4gKiAgIGdldEZ1dHVyZVJvdXRlczogKCkgPT4gKHt9KSwgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm4gZnV0dXJlIHJvdXRlc1xuICogICBzYXZlRnV0dXJlUm91dGU6ICgpID0+ICh7fSksICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgc2F2ZXMgYSBmdXR1cmUgcm91dGVcbiAqICAgY2xlYXJGdXR1cmVSb3V0ZXM6ICgpID0+ICh7fSksICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IGNsZWFycyBmdXR1cmUgcm91dGVzXG4gKiB9O1xuICpcbiAqIGNvbnN0IG9yaWdpbiA9IHtcbiAqICBsYXQ6IDYwLjE2OTE5NixcbiAqICBsb246IDI0Ljk1NzY3NCxcbiAqICBhZGRyZXNzOiAnQWxla3NhbnRlcmlua2F0dSwgSGVsc2lua2knLFxuICogIHNldDogdHJ1ZSxcbiAqICByZWFkeTogdHJ1ZSxcbiAqIH1cbiAqXG4gKiBjb25zdCBkZXN0aW5hdGlvbiA9IHtcbiAqICAgbGF0OiA2MC4xOTkwOTMsXG4gKiAgIGxvbjogMjQuOTQwNTM2LFxuICogICBhZGRyZXNzOiAnT3Bhc3RpbnNpbHRhIDYsIEhlbHNpbmtpJyxcbiAqICAgc2V0OiB0cnVlLFxuICogICByZWFkeTogdHJ1ZSxcbiAqIH1cbiAqIG9uU2VsZWN0KGl0ZW0sIGlkKSB7XG4gKiAgcmV0dXJuIG51bGw7ICAvLyBEZWZpbmUgd2hhdCB0byBkbyB3aGVuIGEgc3VnZ2VzdGlvbiBpcyBiZWluZyBzZWxlY3RlZC4gTm9uZSBieSBkZWZhdWx0LlxuICogIH1cbiAqIG9uQ2xlYXIoaWQpIHtcbiAqICByZXR1cm4gbnVsbDsgIC8vIERlZmluZSB3aGF0IHRvIGRvIHdoZW4gYSBzdWdnZXN0aW9uIGlzIGJlaW5nIHNlbGVjdGVkLiBOb25lIGJ5IGRlZmF1bHQuXG4gKiB9XG4gKiBjb25zdCBnZXRBdXRvU3VnZ2VzdEljb25zOiB7XG4gKiAgIC8vIENhbGxlZCBmb3IgZXZlcnkgY2l0eSBiaWtlIHN0YXRpb24gcmVuZGVyZWQgYXMgYSBzZWFyY2ggc3VnZ2VzdGlvbi4gU2hvdWxkIHJldHVybiB0aGUgaWNvbiBhbmRcbiAqICAgLy8gY29sb3IgdXNlZCBmb3IgdGhhdCBzdGF0aW9uLiBUd28gaWNvbnMgYXJlIGF2YWlsYWJsZSwgJ2NpdHliaWtlLXN0b3AtZGlnaXRyYW5zaXQnIGFuZGl0eWJpa2Utc3RvcC1kaWdpdHJhbnNpdC1zZWNvbmRhcnknLlxuICogICBjaXR5YmlrZXM6IHN0YXRpb24gPT4ge1xuICogICAgICByZXR1cm4gWydjaXR5YmlrZS1zdG9wLWRpZ2l0cmFuc2l0JywgJyNmMmI2MmQnXTtcbiAqICAgfVxuICogfVxuICogY29uc3QgdGFyZ2V0cyA9IFsnTG9jYXRpb25zJywgJ1N0b3BzJywgJ1JvdXRlcyddOyAvLyBEZWZpbmVzIHdoYXQgeW91IGFyZSBzZWFyY2hpbmcuIGFsbCBhdmFpbGFibGUgb3B0aW9ucyBhcmUgTG9jYXRpb25zLCBTdG9wcywgUm91dGVzLCBWZWhpY2xlUmVudGFsU3RhdGlvbnMsIEZ1dHVyZVJvdXRlcywgTWFwUG9zaXRpb24gYW5kIEN1cnJlbnRQb3NpdGlvbi4gTGVhdmUgZW1wdHkgdG8gc2VhcmNoIGFsbCB0YXJnZXRzLlxuICogY29uc3Qgc291cmNlcyA9IFsnRmF2b3VyaXRlJywgJ0hpc3RvcnknLCAnRGF0YXNvdXJjZSddIC8vIERlZmluZXMgd2hlcmUgeW91IGFyZSBzZWFyY2hpbmcuIGFsbCBhdmFpbGFibGUgYXJlOiBGYXZvdXJpdGUsIEhpc3RvcnkgKHByZXZpb3VzbHkgc2VhcmNoZWQgc2VhcmNoZXMpLCBhbmQgRGF0YXNvdXJjZS4gTGVhdmUgZW1wdHkgdG8gdXNlIGFsbCBzb3VyY2VzLlxuICogPERUQXV0b3N1Z2dlc3RQYW5lbFxuICogICAgYXBwRWxlbWVudD17YXBwRWxlbWVudH0gLy8gUmVxdWlyZWQuIFJvb3QgZWxlbWVudCdzIGlkLiBOZWVkZWQgZm9yIHJlYWN0LW1vZGFsIGNvbXBvbmVudC5cbiAqICAgIG9yaWdpbj17b3JpZ2lufSAvLyBTZWxlY3RlZCBvcmlnaW4gcG9pbnRcbiAqICAgIGRlc3RpbmF0aW9uPXtkZXN0aW5hdGlvbn0gLy8gU2VsZWN0ZWQgZGVzdGluYXRpb24gcG9pbnRcbiAqICAgIG9yaWdpblBsYWNlSG9sZGVyPXsnR2l2ZSBvcmlnaW4nfSAvLyBPcHRpb25hbCBHaXZlIHN0cmluZyBzaG93biBpbml0aWFsbHkgaW5zaWRlIG9yaWdpbiBzZWFyY2ggZmllbGRcbiAqICAgIGRlc3RpbmF0aW9uUGxhY2VIb2xkZXI9eydHaXZlIGRlc3RpbmF0aW9uJ30gLy8gT3B0aW9uYWwgR2l2ZSBzdHJpbmcgc2hvd24gaW5pdGFsbHkgaW5zaWRlIGRlc3RpbmF0aW9uIHNlYXJjaCBmaWVsZFxuICogICAgaW5pdGlhbFZpYVBvaW50cz17W119IC8vIE9wdGlvbmFsLiAgSWYgc2hvd1ZpYXBvaW50Q29udHJvbCBpcyBzZXQgdG8gdHJ1ZSwgcGFzcyBpbml0aWFsIHZpYSBwb2ludHMgdG8gdGhlIHBhbmVsLiBDdXJyZW50bHkgbm8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyBnaXZlbi5cbiAqICAgIHVwZGF0ZVZpYVBvaW50cz17KCkgPT4gcmV0dXJuIFtdfSAvLyBPcHRpb25hbC4gSWYgc2hvd1ZpYXBvaW50Q29udHJvbCBpcyBzZXQgdG8gdHJ1ZSwgZGVmaW5lIGhvdyB0byB1cGRhdGUgeW91ciB2aWEgcG9pbnQgbGlzdCB3aXRoIHRoaXMgZnVuY3Rpb24uIEN1cnJlbmx0eSBubyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIGdpdmVuLlxuICogICAgc3dhcE9yZGVyPXsoKSA9PiByZXR1cm4gbnVsbH0gLy8gT3B0aW9uYWwuIElmIHNob3dTd2FwQ29udHJvbCBpcyBzZXQgdG8gdHJ1ZSwgZGVmaW5lIGhvdyB0byBzd2FwIG9yZGVyIG9mIHlvdXIgcG9pbnRzIChvcmlnaW4sIGRlc3RpbmF0aW9uLCB2aWFwb2ludHMpLiBDdXJyZW50bHkgbm8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyBnaXZlbi5cbiAqICAgIHNlYXJjaENvbnRleHQ9e3NlYXJjaENvbnRleHR9XG4gKiAgICBnZXRBdXRvU3VnZ2VzdEljb25zPXtnZXRBdXRvU3VnZ2VzdEljb25zfVxuICogICAgb25TZWxlY3Q9e3RoaXMub25TZWxlY3R9XG4gKiAgICBvbkNsZWFyPXt0aGlzLm9uQ2xlYXJ9XG4gKiAgICBsYW5nPVwiZmlcIiAvLyBEZWZpbmUgbGFuZ3VhZ2UgZmkgc3Ygb3IgZW4uXG4gKiAgICBhZGRBbmFseXRpY3NFdmVudD17bnVsbH0gLy8gT3B0aW9uYWwuIHlvdSBjYW4gcmVjb3JkIGFuIGFuYWx5dGljcyBldmVudCBpZiB5b3Ugd2lzaC4gaWYgcGFzc2VkLCBjb21wb25lbnQgd2lsbCBwYXNzIGFuIGNhdGVnb3J5LCBhY3Rpb24sIG5hbWUgcGFyYW1ldGVycyB0byBhZGRBbmFseXRpY3NFdmVudFxuICogICAgZGlzYWJsZUF1dG9Gb2N1cz17ZmFsc2V9IC8vIE9wdGlvbmFsLiB1c2UgdGhpcyB0byBkaXNhYmxlIGF1dG9mb2N1cyBjb21wbGV0ZWx5IGZyb20gRFRBdXRvc3VnZ2VzdFBhbmVsXG4gKiAgICBzb3VyY2VzPXtzb3VyY2VzfVxuICogICAgdGFyZ2V0cz17dGFyZ2V0c31cbiAqICAgIGlzTW9iaWxlICAvLyBPcHRpb25hbC4gRGVmYXVsdHMgdG8gZmFsc2UuIFdoZXRoZXIgdG8gdXNlIG1vYmlsZSBzZWFyY2guXG4gKiAgICBvcmlnaW5Nb2JpbGVMYWJlbD1cIk9yaWdpbiBsYWJlbFwiIC8vIE9wdGlvbmFsLiBDdXN0b20gbGFiZWwgdGV4dCBmb3Igb3JpZ2luIGZpZWxkIG9uIG1vYmlsZS5cbiAqICAgIGRlc3RpbmF0aW9uTW9iaWxlTGFiZWw9XCJEZXN0aW5hdGlvbiBsYWJlbFwiIC8vIE9wdGlvbmFsLiBDdXN0b20gbGFiZWwgdGV4dCBmb3IgZGVzdGluYXRpb24gZmllbGQgb24gbW9iaWxlLlxuICogICAgaGFuZGxlRm9jdXNDaGFuZ2U9eygpID0+IHt9fSAvLyBPcHRpb25hbC4gSWYgZGVmaW5lZCBvdmVycmlkZXMgZGVmYXVsdCBvbkZvY3VzQ2hhbmdlIGJlaGF2aW91clxuICogICAgc2hvd1N3YXBDb250cm9sPXtmYWxzZX0gLy8gT3B0aW9uYWwuXG4gKiAgICBzaG93VmlhcG9pbnRDb250cm9sPXtmYWxzZX0gLy8gT3B0aW9uYWwuXG4gKi9cblxuY29uc3QgbG9jYXRpb25TaGFwZSA9IFByb3BUeXBlcy5zaGFwZSh7XG4gIGFkZHJlc3M6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGxhdDogUHJvcFR5cGVzLm51bWJlcixcbiAgbG9uOiBQcm9wVHlwZXMubnVtYmVyLFxuICBsb2NhdGlvblNsYWNrOiBQcm9wVHlwZXMubnVtYmVyLFxufSk7XG5cbmNsYXNzIERUQXV0b3N1Z2dlc3RQYW5lbCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgYXBwRWxlbWVudDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIG9yaWdpbjogbG9jYXRpb25TaGFwZSxcbiAgICBkZXN0aW5hdGlvbjogbG9jYXRpb25TaGFwZSxcbiAgICBvcmlnaW5QbGFjZUhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBkZXN0aW5hdGlvblBsYWNlSG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHZpYVBvaW50czogUHJvcFR5cGVzLmFycmF5T2YobG9jYXRpb25TaGFwZSksXG4gICAgdXBkYXRlVmlhUG9pbnRzOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBoYW5kbGVWaWFQb2ludExvY2F0aW9uU2VsZWN0ZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIHN3YXBPcmRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgc2VhcmNoUGFuZWxUZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNlYXJjaENvbnRleHQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBVUkxfUEVMSUFTOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIH0pLmlzUmVxdWlyZWQsXG4gICAgb25TZWxlY3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25DbGVhcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgYWRkQW5hbHl0aWNzRXZlbnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIGxhbmc6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBkaXNhYmxlQXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBzb3VyY2VzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nKSxcbiAgICB0YXJnZXRzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nKSxcbiAgICBmaWx0ZXJSZXN1bHRzOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBpc01vYmlsZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgaG92ZXJDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBvcmlnaW5Nb2JpbGVMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBkZXN0aW5hdGlvbk1vYmlsZUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHJlZlBvaW50OiBsb2NhdGlvblNoYXBlLFxuICAgIG1vZGVTZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgbW9kZUljb25Db2xvcnM6IFByb3BUeXBlcy5vYmplY3RPZihQcm9wVHlwZXMuc3RyaW5nKSxcbiAgICBnZXRBdXRvU3VnZ2VzdEljb25zOiBQcm9wVHlwZXMub2JqZWN0T2YoUHJvcFR5cGVzLmZ1bmMpLFxuICAgIGZvbnRXZWlnaHRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgbWVkaXVtOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIH0pLFxuICAgIHNob3dTY3JvbGw6IFByb3BUeXBlcy5ib29sLFxuICAgIG9uRm9jdXNDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAgIGlzRW1iZWRkZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIHNob3dTd2FwQ29udHJvbDogUHJvcFR5cGVzLmJvb2wsXG4gICAgc2hvd1ZpYXBvaW50Q29udHJvbDogUHJvcFR5cGVzLmJvb2wsXG4gICAgc2hvd1NsYWNrQ29udHJvbDogUHJvcFR5cGVzLmJvb2wsXG4gICAgdDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgfTtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIG9yaWdpbjogdW5kZWZpbmVkLFxuICAgIGRlc3RpbmF0aW9uOiB1bmRlZmluZWQsXG4gICAgdmlhUG9pbnRzOiBbXSxcbiAgICBvcmlnaW5QbGFjZUhvbGRlcjogJ2dpdmUtb3JpZ2luJyxcbiAgICBkZXN0aW5hdGlvblBsYWNlSG9sZGVyOiAnZ2l2ZS1kZXN0aW5hdGlvbicsXG4gICAgc3dhcE9yZGVyOiB1bmRlZmluZWQsXG4gICAgdXBkYXRlVmlhUG9pbnRzOiAoKSA9PiB7fSxcbiAgICBzZWFyY2hQYW5lbFRleHQ6IHVuZGVmaW5lZCxcbiAgICBzb3VyY2VzOiBbXSxcbiAgICB0YXJnZXRzOiBbXSxcbiAgICBmaWx0ZXJSZXN1bHRzOiB1bmRlZmluZWQsXG4gICAgb25DbGVhcjogdW5kZWZpbmVkLFxuICAgIGdldEF1dG9TdWdnZXN0SWNvbnM6IHVuZGVmaW5lZCxcbiAgICByZWZQb2ludDogdW5kZWZpbmVkLFxuICAgIGFkZEFuYWx5dGljc0V2ZW50OiB1bmRlZmluZWQsXG4gICAgZGlzYWJsZUF1dG9Gb2N1czogZmFsc2UsXG4gICAgaXNNb2JpbGU6IGZhbHNlLFxuICAgIGhhbmRsZVZpYVBvaW50TG9jYXRpb25TZWxlY3RlZDogdW5kZWZpbmVkLFxuICAgIGNvbG9yOiAnIzAwN2FjOScsXG4gICAgaG92ZXJDb2xvcjogJyMwMDYyYTEnLFxuICAgIG9yaWdpbk1vYmlsZUxhYmVsOiBudWxsLFxuICAgIGRlc3RpbmF0aW9uTW9iaWxlTGFiZWw6IG51bGwsXG4gICAgbW9kZVNldDogdW5kZWZpbmVkLFxuICAgIG1vZGVJY29uQ29sb3JzOiB1bmRlZmluZWQsXG4gICAgZm9udFdlaWdodHM6IHtcbiAgICAgIG1lZGl1bTogNTAwLFxuICAgIH0sXG4gICAgc2hvd1Njcm9sbDogZmFsc2UsXG4gICAgb25Gb2N1c0NoYW5nZTogdW5kZWZpbmVkLFxuICAgIGlzRW1iZWRkZWQ6IGZhbHNlLFxuICAgIHNob3dTd2FwQ29udHJvbDogZmFsc2UsXG4gICAgc2hvd1ZpYXBvaW50Q29udHJvbDogZmFsc2UsXG4gICAgc2hvd1NsYWNrQ29udHJvbDogZmFsc2UsXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGFjdGl2ZVNsYWNrSW5wdXRzOiBbXSxcbiAgICAgIHJlZnM6IFtdLFxuICAgIH07XG4gIH1cblxuICBzdG9yZVJlZmVyZW5jZSA9IHJlZiA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZShwcmV2U3RhdGUgPT4gKHsgcmVmczogWy4uLnByZXZTdGF0ZS5yZWZzLCByZWZdIH0pKTtcbiAgfTtcblxuICBoYW5kbGVGb2N1c0NoYW5nZSA9ICgpID0+IHtcbiAgICBjb25zdCB7IGRlc3RpbmF0aW9uIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmICghZGVzdGluYXRpb24gfHwgIWRlc3RpbmF0aW9uLmxhdCkge1xuICAgICAgdGhpcy5zdGF0ZS5yZWZzWzFdLmZvY3VzKCk7XG4gICAgfVxuICB9O1xuXG4gIHVwZGF0ZVZpYVBvaW50cyA9IHZpYVBvaW50cyA9PiB7XG4gICAgaWYgKHZpYVBvaW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMucHJvcHMudXBkYXRlVmlhUG9pbnRzKFtdKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wcm9wcy51cGRhdGVWaWFQb2ludHModmlhUG9pbnRzLmZpbHRlcih2cCA9PiAhaXNWaWFQb2ludEVtcHR5KHZwKSkpO1xuICB9O1xuXG4gIGhhbmRsZVRvZ2dsZVZpYVBvaW50U2xhY2tDbGljayA9IHZpYVBvaW50SW5kZXggPT4ge1xuICAgIGNvbnN0IHsgYWN0aXZlU2xhY2tJbnB1dHMgfSA9IHRoaXMuc3RhdGU7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBhY3RpdmVTbGFja0lucHV0czogYWN0aXZlU2xhY2tJbnB1dHMuaW5jbHVkZXModmlhUG9pbnRJbmRleClcbiAgICAgICAgPyB1cGRhdGVWaWFQb2ludFNsYWNrKGFjdGl2ZVNsYWNrSW5wdXRzLCB2aWFQb2ludEluZGV4KVxuICAgICAgICA6IGFjdGl2ZVNsYWNrSW5wdXRzLmNvbmNhdChbdmlhUG9pbnRJbmRleF0pLFxuICAgIH0pO1xuICB9O1xuXG4gIGhhbmRsZVZpYVBvaW50U2xhY2tUaW1lU2VsZWN0ZWQgPSAoc2xhY2tUaW1lSW5TZWNvbmRzLCBpKSA9PiB7XG4gICAgaWYgKHRoaXMucHJvcHMuYWRkQW5hbHl0aWNzRXZlbnQpIHtcbiAgICAgIHRoaXMucHJvcHMuYWRkQW5hbHl0aWNzRXZlbnQoe1xuICAgICAgICBhY3Rpb246ICdFZGl0VmlhUG9pbnRTdG9wRHVyYXRpb24nLFxuICAgICAgICBjYXRlZ29yeTogJ0l0aW5lcmFyeVNldHRpbmdzJyxcbiAgICAgICAgbmFtZTogc2xhY2tUaW1lSW5TZWNvbmRzIC8gNjAsXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgeyB2aWFQb2ludHMgfSA9IHRoaXMucHJvcHM7XG4gICAgdmlhUG9pbnRzW2ldLmxvY2F0aW9uU2xhY2sgPSBOdW1iZXIucGFyc2VJbnQoc2xhY2tUaW1lSW5TZWNvbmRzLCAxMCk7XG4gICAgdGhpcy51cGRhdGVWaWFQb2ludHModmlhUG9pbnRzKTtcbiAgfTtcblxuICBoYW5kbGVWaWFQb2ludExvY2F0aW9uU2VsZWN0ZWQgPSAodmlhUG9pbnRMb2NhdGlvbiwgaSkgPT4ge1xuICAgIHRoaXMucHJvcHMuaGFuZGxlVmlhUG9pbnRMb2NhdGlvblNlbGVjdGVkKHZpYVBvaW50TG9jYXRpb24sIGkpO1xuICB9O1xuXG4gIGhhbmRsZVJlbW92ZVZpYVBvaW50Q2xpY2sgPSB2aWFQb2ludEluZGV4ID0+IHtcbiAgICBpZiAodGhpcy5wcm9wcy5hZGRBbmFseXRpY3NFdmVudCkge1xuICAgICAgdGhpcy5wcm9wcy5hZGRBbmFseXRpY3NFdmVudCh7XG4gICAgICAgIGFjdGlvbjogJ1JlbW92ZUpvdXJuZXlWaWFQb2ludCcsXG4gICAgICAgIGNhdGVnb3J5OiAnSXRpbmVyYXJ5U2V0dGluZ3MnLFxuICAgICAgICBuYW1lOiBudWxsLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHsgYWN0aXZlU2xhY2tJbnB1dHMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgeyB2aWFQb2ludHMgfSA9IHRoaXMucHJvcHM7XG4gICAgdmlhUG9pbnRzLnNwbGljZSh2aWFQb2ludEluZGV4LCAxKTtcbiAgICB0aGlzLnNldFN0YXRlKFxuICAgICAge1xuICAgICAgICBhY3RpdmVTbGFja0lucHV0czogdXBkYXRlVmlhUG9pbnRTbGFjayhcbiAgICAgICAgICBhY3RpdmVTbGFja0lucHV0cyxcbiAgICAgICAgICB2aWFQb2ludEluZGV4LFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICksXG4gICAgICB9LFxuICAgICAgKCkgPT4gdGhpcy51cGRhdGVWaWFQb2ludHModmlhUG9pbnRzKSxcbiAgICApO1xuICB9O1xuXG4gIGhhbmRsZUFkZFZpYVBvaW50Q2xpY2sgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMucHJvcHMuYWRkQW5hbHl0aWNzRXZlbnQpIHtcbiAgICAgIHRoaXMucHJvcHMuYWRkQW5hbHl0aWNzRXZlbnQoe1xuICAgICAgICBhY3Rpb246ICdBZGRKb3VybmV5VmlhUG9pbnQnLFxuICAgICAgICBjYXRlZ29yeTogJ0l0aW5lcmFyeVNldHRpbmdzJyxcbiAgICAgICAgbmFtZTogJ1F1aWNrU2V0dGluZ3NCdXR0b24nLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHsgdmlhUG9pbnRzIH0gPSB0aGlzLnByb3BzO1xuICAgIHZpYVBvaW50cy5wdXNoKGdldEVtcHR5VmlhUG9pbnRQbGFjZUhvbGRlcigpKTtcbiAgICAvLyBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgc3RhdGUgc28gdGhhdCBwbGFjZUhvbGRlciB3aWxsIHNob3cgdXAgaW4gcGFuZWwuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L25vLWFjY2Vzcy1zdGF0ZS1pbi1zZXRzdGF0ZVxuICAgIHRoaXMuc2V0U3RhdGUodGhpcy5zdGF0ZSk7XG4gIH07XG5cbiAgaGFuZGxlU3dhcE9yZGVyQ2xpY2sgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMucHJvcHMuYWRkQW5hbHl0aWNzRXZlbnQpIHtcbiAgICAgIHRoaXMucHJvcHMuYWRkQW5hbHl0aWNzRXZlbnQoe1xuICAgICAgICBhY3Rpb246ICdTd2l0Y2hKb3VybmV5U3RhcnRBbmRFbmRQb2ludE9yZGVyJyxcbiAgICAgICAgY2F0ZWdvcnk6ICdJdGluZXJhcnlTZXR0aW5ncycsXG4gICAgICAgIG5hbWU6IG51bGwsXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgeyB2aWFQb2ludHMgfSA9IHRoaXMucHJvcHM7XG4gICAgdmlhUG9pbnRzLnJldmVyc2UoKTtcbiAgICB0aGlzLnByb3BzLnN3YXBPcmRlcigpO1xuICB9O1xuXG4gIGdldFNsYWNrRGlzcGxheSA9IHNsYWNrSW5TZWNvbmRzID0+XG4gICAgYCR7c2xhY2tJblNlY29uZHMgLyA2MH0gJHt0aGlzLnByb3BzLnQoJ21pbnV0ZS1zaG9ydCcsIHtcbiAgICAgIGxuZzogdGhpcy5wcm9wcy5sYW5nLFxuICAgIH0pfWA7XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIG9yaWdpbixcbiAgICAgIHNlYXJjaFBhbmVsVGV4dCxcbiAgICAgIHNlYXJjaENvbnRleHQsXG4gICAgICBkaXNhYmxlQXV0b0ZvY3VzLFxuICAgICAgdmlhUG9pbnRzLFxuICAgICAgb3JpZ2luTW9iaWxlTGFiZWwsXG4gICAgICBkZXN0aW5hdGlvbk1vYmlsZUxhYmVsLFxuICAgICAgZm9udFdlaWdodHMsXG4gICAgICBvbkZvY3VzQ2hhbmdlLFxuICAgICAgc2hvd1N3YXBDb250cm9sLFxuICAgICAgc2hvd1ZpYXBvaW50Q29udHJvbCxcbiAgICAgIHQsXG4gICAgICBsYW5nOiBsbmcsXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBhY3RpdmVTbGFja0lucHV0cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBzbGFja1RpbWUgPSBnZXRTbGFja1RpbWVPcHRpb25zKHQpO1xuICAgIGNvbnN0IGRlZmF1bHRTbGFja1RpbWVWYWx1ZSA9IDA7XG4gICAgY29uc3QgZ2V0VmlhUG9pbnRTbGFja1RpbWVPckRlZmF1bHQgPSAoXG4gICAgICB2aWFQb2ludCxcbiAgICAgIGRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRTbGFja1RpbWVWYWx1ZSxcbiAgICApID0+ICh2aWFQb2ludCAmJiB2aWFQb2ludC5sb2NhdGlvblNsYWNrKSB8fCBkZWZhdWx0VmFsdWU7XG4gICAgY29uc3QgaXNWaWFQb2ludFNsYWNrVGltZUlucHV0QWN0aXZlID0gaW5kZXggPT5cbiAgICAgIGFjdGl2ZVNsYWNrSW5wdXRzLmluY2x1ZGVzKGluZGV4KTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2N4KFtcbiAgICAgICAgICBzdHlsZXNbJ2F1dG9zdWdnZXN0LXBhbmVsJ10sXG4gICAgICAgICAge1xuICAgICAgICAgICAgc21hbGw6IHRoaXMucHJvcHMuaXNNb2JpbGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSl9XG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgJy0tY29sb3InOiBgJHt0aGlzLnByb3BzLmNvbG9yfWAsXG4gICAgICAgICAgJy0tZm9udC13ZWlnaHQtbWVkaXVtJzogZm9udFdlaWdodHMubWVkaXVtLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7JyAnfVxuICAgICAgICB7c2VhcmNoUGFuZWxUZXh0ID8gKFxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8aDEgY2xhc3NOYW1lPXtzdHlsZXNbJ2F1dG9zdWdnZXN0LXNlYXJjaHBhbmVsLXRleHQnXX0+XG4gICAgICAgICAgICAgIHsnICd9XG4gICAgICAgICAgICAgIHtzZWFyY2hQYW5lbFRleHR9XG4gICAgICAgICAgICA8L2gxPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snb3JpZ2luLWlucHV0LWNvbnRhaW5lciddfT5cbiAgICAgICAgICA8RFRBdXRvU3VnZ2VzdFxuICAgICAgICAgICAgYXBwRWxlbWVudD17dGhpcy5wcm9wcy5hcHBFbGVtZW50fVxuICAgICAgICAgICAgaWNvbj1cIm1hcE1hcmtlclwiXG4gICAgICAgICAgICBpZD1cIm9yaWdpblwiXG4gICAgICAgICAgICBhdXRvRm9jdXM9e1xuICAgICAgICAgICAgICBkaXNhYmxlQXV0b0ZvY3VzID09PSB0cnVlXG4gICAgICAgICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgICAgICAgIDogIXRoaXMucHJvcHMuaXNNb2JpbGUgJiYgIW9yaWdpbi5sYXRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0b3JlUmVmPXt0aGlzLnN0b3JlUmVmZXJlbmNlfVxuICAgICAgICAgICAgcmVmUG9pbnQ9e3RoaXMucHJvcHMucmVmUG9pbnR9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2dldExvY2F0aW9uVHlwZShvcmlnaW4pfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3RoaXMucHJvcHMub3JpZ2luUGxhY2VIb2xkZXJ9XG4gICAgICAgICAgICB2YWx1ZT17dmFsdWUob3JpZ2luKX1cbiAgICAgICAgICAgIHNlYXJjaENvbnRleHQ9e3NlYXJjaENvbnRleHR9XG4gICAgICAgICAgICBnZXRBdXRvU3VnZ2VzdEljb25zPXt0aGlzLnByb3BzLmdldEF1dG9TdWdnZXN0SWNvbnN9XG4gICAgICAgICAgICBvblNlbGVjdD17dGhpcy5wcm9wcy5vblNlbGVjdH1cbiAgICAgICAgICAgIG9uQ2xlYXI9e3RoaXMucHJvcHMub25DbGVhcn1cbiAgICAgICAgICAgIGZvY3VzQ2hhbmdlPXtvbkZvY3VzQ2hhbmdlIHx8IHRoaXMuaGFuZGxlRm9jdXNDaGFuZ2V9XG4gICAgICAgICAgICBsYW5nPXt0aGlzLnByb3BzLmxhbmd9XG4gICAgICAgICAgICBzb3VyY2VzPXt0aGlzLnByb3BzLnNvdXJjZXN9XG4gICAgICAgICAgICB0YXJnZXRzPXt0aGlzLnByb3BzLnRhcmdldHN9XG4gICAgICAgICAgICBmaWx0ZXJSZXN1bHRzPXt0aGlzLnByb3BzLmZpbHRlclJlc3VsdHN9XG4gICAgICAgICAgICBpc01vYmlsZT17dGhpcy5wcm9wcy5pc01vYmlsZX1cbiAgICAgICAgICAgIGNvbG9yPXt0aGlzLnByb3BzLmNvbG9yfVxuICAgICAgICAgICAgaG92ZXJDb2xvcj17dGhpcy5wcm9wcy5ob3ZlckNvbG9yfVxuICAgICAgICAgICAgbW9iaWxlTGFiZWw9e29yaWdpbk1vYmlsZUxhYmVsfVxuICAgICAgICAgICAgZm9udFdlaWdodHM9e3RoaXMucHJvcHMuZm9udFdlaWdodHN9XG4gICAgICAgICAgICBtb2RlU2V0PXt0aGlzLnByb3BzLm1vZGVTZXR9XG4gICAgICAgICAgICBtb2RlSWNvbkNvbG9ycz17dGhpcy5wcm9wcy5tb2RlSWNvbkNvbG9yc31cbiAgICAgICAgICAgIHNob3dTY3JvbGw9e3RoaXMucHJvcHMuc2hvd1Njcm9sbH1cbiAgICAgICAgICAgIGlzRW1iZWRkZWQ9e3RoaXMucHJvcHMuaXNFbWJlZGRlZH1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHsoc2hvd1N3YXBDb250cm9sIHx8IHNob3dWaWFwb2ludENvbnRyb2wpICYmIChcbiAgICAgICAgICAgIDxJdGluZXJhcnlTZWFyY2hDb250cm9sXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLm9wcG9zaXRlfVxuICAgICAgICAgICAgICBlbmFibGVkPXtzaG93U3dhcENvbnRyb2x9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMuaGFuZGxlU3dhcE9yZGVyQ2xpY2soKX1cbiAgICAgICAgICAgICAgb25LZXlQcmVzcz17ZSA9PlxuICAgICAgICAgICAgICAgIGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudChlKSAmJiB0aGlzLmhhbmRsZVN3YXBPcmRlckNsaWNrKClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPXt0KCdzd2FwLW9yZGVyLWJ1dHRvbi1sYWJlbCcsIHsgbG5nIH0pfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8SWNvbiBpbWc9XCJvcHBvc2l0ZVwiIGNvbG9yPXt0aGlzLnByb3BzLmNvbG9yfSAvPlxuICAgICAgICAgICAgPC9JdGluZXJhcnlTZWFyY2hDb250cm9sPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7dmlhUG9pbnRzLmxlbmd0aCA9PT0gMCAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1sncmVjdGFuZ2xlLWNvbnRhaW5lciddfT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucmVjdGFuZ2xlfSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgICA8UmVhY3RTb3J0YWJsZVxuICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWyd2aWFwb2ludHMtY29udGFpbmVyJ119XG4gICAgICAgICAgbGlzdD17dmlhUG9pbnRzfVxuICAgICAgICAgIGhhbmRsZT17YC4ke3N0eWxlc1sndmlhcG9pbnQtYmVmb3JlJ119YH1cbiAgICAgICAgICBhbmltYXRpb249ezIwMH1cbiAgICAgICAgICBkaXNhYmxlZD17dmlhUG9pbnRzLmxlbmd0aCA8PSAxfVxuICAgICAgICAgIHNldExpc3Q9e2l0ZW1zID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZpYVBvaW50cyA9IGl0ZW1zLmZpbHRlcih2cCA9PiAhaXNWaWFQb2ludEVtcHR5KHZwKSk7XG4gICAgICAgICAgICBpZiAobmV3VmlhUG9pbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgdGhpcy5wcm9wcy51cGRhdGVWaWFQb2ludHMobmV3VmlhUG9pbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAge3ZpYVBvaW50cy5tYXAoKG8sIGkpID0+IChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjeChzdHlsZXNbJ3ZpYXBvaW50LWNvbnRhaW5lciddKX1cbiAgICAgICAgICAgICAga2V5PXtgdmlhcG9pbnQtJHtpfWB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snbGlnaHQtZ3JheS1iYWNrZ3JvdW5kJ119PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucm93fT5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ3ZpYXBvaW50LWJlZm9yZSddfVxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17dmlhUG9pbnRzLmxlbmd0aCA+IDEgPyB7IGN1cnNvcjogJ21vdmUnIH0gOiB7fX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3ZpYVBvaW50cy5sZW5ndGggPiAxICYmIChcbiAgICAgICAgICAgICAgICAgICAgICA8SWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nPVwiZWxsaXBzaXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlPXs5MH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXt0aGlzLnByb3BzLmNvbG9yfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjeChcbiAgICAgICAgICAgICAgICAgICAgICBgJHtzdHlsZXNbJ3ZpYXBvaW50LWlucHV0LWNvbnRhaW5lciddfSAke1xuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVzW2B2aWFwb2ludC0ke2kgKyAxfWBdXG4gICAgICAgICAgICAgICAgICAgICAgfWAsXG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxEVEF1dG9TdWdnZXN0XG4gICAgICAgICAgICAgICAgICAgICAgYXBwRWxlbWVudD17dGhpcy5wcm9wcy5hcHBFbGVtZW50fVxuICAgICAgICAgICAgICAgICAgICAgIGljb249XCJtYXBNYXJrZXItdmlhXCJcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cInZpYS1wb2ludFwiXG4gICAgICAgICAgICAgICAgICAgICAgYXJpYUxhYmVsPXt0KCd2aWEtcG9pbnQtaW5kZXgnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaSArIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBsbmcsXG4gICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgYXV0b0ZvY3VzPXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVBdXRvRm9jdXMgPT09IHRydWUgPyBmYWxzZSA6ICF0aGlzLnByb3BzLmlzTW9iaWxlXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwidmlhLXBvaW50XCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ2aWFwb2ludFwiXG4gICAgICAgICAgICAgICAgICAgICAgc2VhcmNoQ29udGV4dD17c2VhcmNoQ29udGV4dH1cbiAgICAgICAgICAgICAgICAgICAgICByZWZQb2ludD17dGhpcy5wcm9wcy5yZWZQb2ludH1cbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17KG8gJiYgby5hZGRyZXNzKSB8fCAnJ31cbiAgICAgICAgICAgICAgICAgICAgICBvblNlbGVjdD17dGhpcy5wcm9wcy5vblNlbGVjdH1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsZWFyPXt0aGlzLnByb3BzLm9uQ2xlYXJ9XG4gICAgICAgICAgICAgICAgICAgICAgaGFuZGxlVmlhUG9pbnRzPXtpdGVtID0+XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVZpYVBvaW50TG9jYXRpb25TZWxlY3RlZChpdGVtLCBpKVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBsYW5nPXt0aGlzLnByb3BzLmxhbmd9XG4gICAgICAgICAgICAgICAgICAgICAgc291cmNlcz17dGhpcy5wcm9wcy5zb3VyY2VzfVxuICAgICAgICAgICAgICAgICAgICAgIHRhcmdldHM9e1snU3RvcHMnLCAnU3RhdGlvbnMnXX1cbiAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJSZXN1bHRzPXt0aGlzLnByb3BzLmZpbHRlclJlc3VsdHN9XG4gICAgICAgICAgICAgICAgICAgICAgZ2V0QXV0b1N1Z2dlc3RJY29ucz17dGhpcy5wcm9wcy5nZXRBdXRvU3VnZ2VzdEljb25zfVxuICAgICAgICAgICAgICAgICAgICAgIGlzTW9iaWxlPXt0aGlzLnByb3BzLmlzTW9iaWxlfVxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXt0aGlzLnByb3BzLmNvbG9yfVxuICAgICAgICAgICAgICAgICAgICAgIGhvdmVyQ29sb3I9e3RoaXMucHJvcHMuaG92ZXJDb2xvcn1cbiAgICAgICAgICAgICAgICAgICAgICBmb250V2VpZ2h0cz17dGhpcy5wcm9wcy5mb250V2VpZ2h0c31cbiAgICAgICAgICAgICAgICAgICAgICBtb2RlU2V0PXt0aGlzLnByb3BzLm1vZGVTZXR9XG4gICAgICAgICAgICAgICAgICAgICAgbW9kZUljb25Db2xvcnM9e3RoaXMucHJvcHMubW9kZUljb25Db2xvcnN9XG4gICAgICAgICAgICAgICAgICAgICAgc2hvd1Njcm9sbD17dGhpcy5wcm9wcy5zaG93U2Nyb2xsfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5zaG93U2xhY2tDb250cm9sICYmIChcbiAgICAgICAgICAgICAgICAgICAgPEl0aW5lcmFyeVNlYXJjaENvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1snYWRkLXZpYS1wb2ludC1zbGFjayddfVxuICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ9e3RoaXMucHJvcHMuc2hvd1ZpYXBvaW50Q29udHJvbH1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLmhhbmRsZVRvZ2dsZVZpYVBvaW50U2xhY2tDbGljayhpKX1cbiAgICAgICAgICAgICAgICAgICAgICBvbktleVByZXNzPXtlID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQoZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlVG9nZ2xlVmlhUG9pbnRTbGFja0NsaWNrKGkpXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1ZpYVBvaW50U2xhY2tUaW1lSW5wdXRBY3RpdmUoaSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3BlbidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBpbmRleDogaSArIDEsIGxuZyB9LFxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgd2lkZVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPEljb24gaW1nPVwidGltZVwiIGNvbG9yPXt0aGlzLnByb3BzLmNvbG9yfSAvPlxuICAgICAgICAgICAgICAgICAgICA8L0l0aW5lcmFyeVNlYXJjaENvbnRyb2w+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIHshaXNWaWFQb2ludFNsYWNrVGltZUlucHV0QWN0aXZlKGkpICYmXG4gICAgICAgICAgICAgICAgICB2aWFQb2ludHNbaV0gJiZcbiAgICAgICAgICAgICAgICAgIHZpYVBvaW50c1tpXS5sb2NhdGlvblNsYWNrID4gMCAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzWyd2aWFwb2ludC1zbGFjay10aW1lJ119PntgJHt0KFxuICAgICAgICAgICAgICAgICAgICAgICd2aWFwb2ludC1zbGFjay1hbW91bnQnLFxuICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxuZyxcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICApfTogJHt0aGlzLmdldFNsYWNrRGlzcGxheShcbiAgICAgICAgICAgICAgICAgICAgICB2aWFQb2ludHNbaV0ubG9jYXRpb25TbGFjayxcbiAgICAgICAgICAgICAgICAgICAgKX1gfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjeChzdHlsZXNbJ2lucHV0LXZpYXBvaW50LXNsYWNrLWNvbnRhaW5lciddLCB7XG4gICAgICAgICAgICAgICAgICAgIGNvbGxhcHNlZDogIWlzVmlhUG9pbnRTbGFja1RpbWVJbnB1dEFjdGl2ZShpKSxcbiAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ3NlbGVjdC13cmFwcGVyJ119PlxuICAgICAgICAgICAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgaWQ9e2B2aWFwb2ludC1zbGFjay0ke2l9YH1cbiAgICAgICAgICAgICAgICAgICAgICBsYWJlbD17dCgndmlhcG9pbnQtc2xhY2stYW1vdW50JywgeyBsbmcgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17c2xhY2tUaW1lfVxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtnZXRWaWFQb2ludFNsYWNrVGltZU9yRGVmYXVsdCh2aWFQb2ludHNbaV0pfVxuICAgICAgICAgICAgICAgICAgICAgIGdldERpc3BsYXk9e3RoaXMuZ2V0U2xhY2tEaXNwbGF5fVxuICAgICAgICAgICAgICAgICAgICAgIHZpYVBvaW50SW5kZXg9e2l9XG4gICAgICAgICAgICAgICAgICAgICAgaWNvbj17XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake3N0eWxlc1snY29tYm9ib3gtaWNvbiddfSAke3N0eWxlc1sndGltZS1pbnB1dC1pY29uJ119YH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gaW1nPVwidGltZVwiIGNvbG9yPXt0aGlzLnByb3BzLmNvbG9yfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBvblNsYWNrVGltZVNlbGVjdGVkPXt0aGlzLmhhbmRsZVZpYVBvaW50U2xhY2tUaW1lU2VsZWN0ZWR9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxJdGluZXJhcnlTZWFyY2hDb250cm9sXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ3JlbW92ZS12aWEtcG9pbnQnXX1cbiAgICAgICAgICAgICAgICBlbmFibGVkPXt0aGlzLnByb3BzLnNob3dWaWFwb2ludENvbnRyb2x9XG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5oYW5kbGVSZW1vdmVWaWFQb2ludENsaWNrKGkpfVxuICAgICAgICAgICAgICAgIG9uS2V5UHJlc3M9e2UgPT5cbiAgICAgICAgICAgICAgICAgIGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudChlKSAmJlxuICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVSZW1vdmVWaWFQb2ludENsaWNrKGkpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ3JlbW92ZS12aWEtYnV0dG9uLWxhYmVsJywge1xuICAgICAgICAgICAgICAgICAgaW5kZXg6IGkgKyAxLFxuICAgICAgICAgICAgICAgICAgbG5nLFxuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEljb24gaW1nPVwidHJhc2hcIiBjb2xvcj17dGhpcy5wcm9wcy5jb2xvcn0gLz5cbiAgICAgICAgICAgICAgPC9JdGluZXJhcnlTZWFyY2hDb250cm9sPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvUmVhY3RTb3J0YWJsZT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snZGVzdGluYXRpb24taW5wdXQtY29udGFpbmVyJ119PlxuICAgICAgICAgIDxEVEF1dG9TdWdnZXN0XG4gICAgICAgICAgICBhcHBFbGVtZW50PXt0aGlzLnByb3BzLmFwcEVsZW1lbnR9XG4gICAgICAgICAgICBpY29uPVwibWFwTWFya2VyXCJcbiAgICAgICAgICAgIGlkPVwiZGVzdGluYXRpb25cIlxuICAgICAgICAgICAgYXV0b0ZvY3VzPXtcbiAgICAgICAgICAgICAgZGlzYWJsZUF1dG9Gb2N1cyA9PT0gdHJ1ZVxuICAgICAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgICAgICA6ICF0aGlzLnByb3BzLmlzTW9iaWxlICYmICFOdW1iZXIuaXNOYU4ob3JpZ2luLmxhdClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0b3JlUmVmPXt0aGlzLnN0b3JlUmVmZXJlbmNlfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3RoaXMucHJvcHMuZGVzdGluYXRpb25QbGFjZUhvbGRlcn1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Z2V0TG9jYXRpb25UeXBlKHRoaXMucHJvcHMuZGVzdGluYXRpb24pfVxuICAgICAgICAgICAgZ2V0QXV0b1N1Z2dlc3RJY29ucz17dGhpcy5wcm9wcy5nZXRBdXRvU3VnZ2VzdEljb25zfVxuICAgICAgICAgICAgc2VhcmNoQ29udGV4dD17c2VhcmNoQ29udGV4dH1cbiAgICAgICAgICAgIG9uU2VsZWN0PXt0aGlzLnByb3BzLm9uU2VsZWN0fVxuICAgICAgICAgICAgb25DbGVhcj17dGhpcy5wcm9wcy5vbkNsZWFyfVxuICAgICAgICAgICAgcmVmUG9pbnQ9e3RoaXMucHJvcHMucmVmUG9pbnR9XG4gICAgICAgICAgICB2YWx1ZT17dmFsdWUodGhpcy5wcm9wcy5kZXN0aW5hdGlvbil9XG4gICAgICAgICAgICBsYW5nPXt0aGlzLnByb3BzLmxhbmd9XG4gICAgICAgICAgICBzb3VyY2VzPXt0aGlzLnByb3BzLnNvdXJjZXN9XG4gICAgICAgICAgICB0YXJnZXRzPXt0aGlzLnByb3BzLnRhcmdldHN9XG4gICAgICAgICAgICBmaWx0ZXJSZXN1bHRzPXt0aGlzLnByb3BzLmZpbHRlclJlc3VsdHN9XG4gICAgICAgICAgICBpc01vYmlsZT17dGhpcy5wcm9wcy5pc01vYmlsZX1cbiAgICAgICAgICAgIGNvbG9yPXt0aGlzLnByb3BzLmNvbG9yfVxuICAgICAgICAgICAgaG92ZXJDb2xvcj17dGhpcy5wcm9wcy5ob3ZlckNvbG9yfVxuICAgICAgICAgICAgbW9iaWxlTGFiZWw9e2Rlc3RpbmF0aW9uTW9iaWxlTGFiZWx9XG4gICAgICAgICAgICBmb250V2VpZ2h0cz17dGhpcy5wcm9wcy5mb250V2VpZ2h0c31cbiAgICAgICAgICAgIG1vZGVTZXQ9e3RoaXMucHJvcHMubW9kZVNldH1cbiAgICAgICAgICAgIG1vZGVJY29uQ29sb3JzPXt0aGlzLnByb3BzLm1vZGVJY29uQ29sb3JzfVxuICAgICAgICAgICAgc2hvd1Njcm9sbD17dGhpcy5wcm9wcy5zaG93U2Nyb2xsfVxuICAgICAgICAgICAgaXNFbWJlZGRlZD17dGhpcy5wcm9wcy5pc0VtYmVkZGVkfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgeyhzaG93U3dhcENvbnRyb2wgfHwgc2hvd1ZpYXBvaW50Q29udHJvbCkgJiYgKFxuICAgICAgICAgICAgPEl0aW5lcmFyeVNlYXJjaENvbnRyb2xcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjeChzdHlsZXNbJ2FkZC12aWEtcG9pbnQnXSwgc3R5bGVzLm1vcmUsIHtcbiAgICAgICAgICAgICAgICBjb2xsYXBzZWQ6IHZpYVBvaW50cy5sZW5ndGggPiA0LFxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgZW5hYmxlZD17c2hvd1ZpYXBvaW50Q29udHJvbCAmJiB2aWFQb2ludHMubGVuZ3RoID09PSAwfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLmhhbmRsZUFkZFZpYVBvaW50Q2xpY2soKX1cbiAgICAgICAgICAgICAgb25LZXlQcmVzcz17ZSA9PlxuICAgICAgICAgICAgICAgIGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudChlKSAmJiB0aGlzLmhhbmRsZUFkZFZpYVBvaW50Q2xpY2soKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ2FkZC12aWEtYnV0dG9uLWxhYmVsJywgeyBsbmcgfSl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxJY29uXG4gICAgICAgICAgICAgICAgaW1nPVwidmlhcG9pbnRcIlxuICAgICAgICAgICAgICAgIHdpZHRoPXsxLjI1fVxuICAgICAgICAgICAgICAgIGhlaWdodD17MS4zNzV9XG4gICAgICAgICAgICAgICAgY29sb3I9e3RoaXMucHJvcHMuY29sb3J9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0l0aW5lcmFyeVNlYXJjaENvbnRyb2w+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IERUQXV0b3N1Z2dlc3RQYW5lbFdpdGhUcmFuc2xhdGlvbiA9IHdpdGhUcmFuc2xhdGlvbigpKERUQXV0b3N1Z2dlc3RQYW5lbCk7XG5cbmV4cG9ydCBkZWZhdWx0IHByb3BzID0+IHtcbiAgcmV0dXJuIChcbiAgICA8STE4bmV4dFByb3ZpZGVyIGkxOG49e2kxOG59PlxuICAgICAgPERUQXV0b3N1Z2dlc3RQYW5lbFdpdGhUcmFuc2xhdGlvbiB7Li4ucHJvcHN9IC8+XG4gICAgPC9JMThuZXh0UHJvdmlkZXI+XG4gICk7XG59O1xuIl0sIm5hbWVzIjpbIl90eXBlb2YiLCJvIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsInRvUHJvcGVydHlLZXkiLCJ0IiwiaSIsInIiLCJlIiwidG9QcmltaXRpdmUiLCJjYWxsIiwiVHlwZUVycm9yIiwiU3RyaW5nIiwiTnVtYmVyIiwiX2RlZmluZVByb3BlcnR5IiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIm4iLCJoYXNPd25Qcm9wZXJ0eSIsImluZGV4T2YiLCJvYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibGVuZ3RoIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJzdHlsZUluamVjdCIsImNzcyIsInJlZiIsImluc2VydEF0IiwiZG9jdW1lbnQiLCJoZWFkIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJzdHlsZSIsImNyZWF0ZUVsZW1lbnQiLCJ0eXBlIiwiZmlyc3RDaGlsZCIsImluc2VydEJlZm9yZSIsImFwcGVuZENoaWxkIiwic3R5bGVTaGVldCIsImNzc1RleHQiLCJjcmVhdGVUZXh0Tm9kZSIsIlNlbGVjdCIsImdldERpc3BsYXkiLCJvcHRpb25zIiwib25TbGFja1RpbWVTZWxlY3RlZCIsInZpYVBvaW50SW5kZXgiLCJpZCIsImxhYmVsIiwiaWNvbiIsImRpc3BsYXlWYWx1ZSIsImNoYW5nZURpc3BsYXlWYWx1ZSIsInVzZVN0YXRlIiwib3BlbiIsImNoYW5nZU9wZW4iLCJ1c2VFZmZlY3QiLCJzY3JvbGxSZWYiLCJ1c2VSZWYiLCJzY3JvbGxJbmRleCIsIk1hdGgiLCJmbG9vciIsInVzZUxheW91dEVmZmVjdCIsImN1cnJlbnQiLCJzY3JvbGxUb3AiLCJpbnB1dElkIiwibGFiZWxJZCIsIlJlYWN0IiwiY2xhc3NOYW1lIiwic3R5bGVzIiwiaHRtbEZvciIsIkF1dG9zdWdnZXN0Iiwic3VnZ2VzdGlvbnMiLCJnZXRTdWdnZXN0aW9uVmFsdWUiLCJzIiwicmVuZGVyU3VnZ2VzdGlvbiIsImRpc3BsYXlOYW1lIiwib25TdWdnZXN0aW9uc0ZldGNoUmVxdWVzdGVkIiwic2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnMiLCJmb2N1c0lucHV0T25TdWdnZXN0aW9uQ2xpY2siLCJvblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWQiLCJpbnB1dFByb3BzIiwib25DaGFuZ2UiLCJvbklucHV0Q2hhbmdlIiwiXyIsIm5ld1ZhbHVlIiwibWV0aG9kIiwib25Gb2N1cyIsIm9uQmx1ciIsInJlYWRPbmx5IiwicmVuZGVyU3VnZ2VzdGlvbnNDb250YWluZXIiLCJjb250YWluZXJQcm9wcyIsImNoaWxkcmVuIiwib3RoZXJSZWZzIiwiX2V4Y2x1ZGVkIiwiYXNzaWduIiwidGFiSW5kZXgiLCJlbGVtIiwidGhlbWUiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJudW1iZXIiLCJpc1JlcXVpcmVkIiwiZnVuYyIsImFycmF5T2YiLCJzaGFwZSIsInN0cmluZyIsIm5vZGUiLCJpMThuIiwiY3JlYXRlSW5zdGFuY2UiLCJmYWxsYmFja0xuZyIsInJlc291cmNlcyIsImRlIiwidHJhbnNsYXRpb24iLCJlbiIsImZpIiwicGwiLCJzdiIsImRlZmF1bHROUyIsInJlYWN0IiwidXNlU3VzcGVuc2UiLCJpbml0IiwiZ2V0RW1wdHlWaWFQb2ludFBsYWNlSG9sZGVyIiwiaXNWaWFQb2ludEVtcHR5IiwidmlhUG9pbnQiLCJ1bmRlZmluZWQiLCJpc0VtcHR5Iiwia2V5cyIsImluY2x1ZGVzIiwiSXRpbmVyYXJ5U2VhcmNoQ29udHJvbCIsIl9yZWYiLCJlbmFibGVkIiwib25DbGljayIsIm9uS2V5UHJlc3MiLCJ3aWRlIiwicmVzdCIsInJvbGUiLCJ1cGRhdGVWaWFQb2ludFNsYWNrIiwiYWN0aXZlVmlhUG9pbnRTbGFja3MiLCJ1cGRhdGVkVmlhUG9pbnRJbmRleCIsInZpYVBvaW50UmVtb3ZlZCIsImZvdW5kQXRJbmRleCIsInNwbGljZSIsIm1hcCIsImlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudCIsImV2ZW50Iiwia2V5Iiwid2hpY2giLCJrZXlDb2RlIiwiY29uY2F0IiwicHJldmVudERlZmF1bHQiLCJsb2NhdGlvbiIsImFkZHJlc3MiLCJncHMiLCJyZWFkeSIsImdldExvY2F0aW9uVHlwZSIsImJvb2wiLCJkZWZhdWx0UHJvcHMiLCJsb2NhdGlvblNoYXBlIiwibGF0IiwibG9uIiwibG9jYXRpb25TbGFjayIsIkRUQXV0b3N1Z2dlc3RQYW5lbCIsIkNvbXBvbmVudCIsInByb3BzIiwic3VwZXIiLCJ0aGlzIiwic2V0U3RhdGUiLCJwcmV2U3RhdGUiLCJyZWZzIiwiZGVzdGluYXRpb24iLCJzdGF0ZSIsImZvY3VzIiwidmlhUG9pbnRzIiwidXBkYXRlVmlhUG9pbnRzIiwiZmlsdGVyIiwidnAiLCJhY3RpdmVTbGFja0lucHV0cyIsInNsYWNrVGltZUluU2Vjb25kcyIsImFkZEFuYWx5dGljc0V2ZW50IiwiYWN0aW9uIiwiY2F0ZWdvcnkiLCJuYW1lIiwicGFyc2VJbnQiLCJ2aWFQb2ludExvY2F0aW9uIiwiaGFuZGxlVmlhUG9pbnRMb2NhdGlvblNlbGVjdGVkIiwicHVzaCIsInJldmVyc2UiLCJzd2FwT3JkZXIiLCJzbGFja0luU2Vjb25kcyIsImxuZyIsImxhbmciLCJyZW5kZXIiLCJvcmlnaW4iLCJzZWFyY2hQYW5lbFRleHQiLCJzZWFyY2hDb250ZXh0IiwiZGlzYWJsZUF1dG9Gb2N1cyIsIm9yaWdpbk1vYmlsZUxhYmVsIiwiZGVzdGluYXRpb25Nb2JpbGVMYWJlbCIsImZvbnRXZWlnaHRzIiwib25Gb2N1c0NoYW5nZSIsInNob3dTd2FwQ29udHJvbCIsInNob3dWaWFwb2ludENvbnRyb2wiLCJzbGFja1RpbWUiLCJ0aW1lT3B0aW9ucyIsInZhbHVlSW5NaW51dGVzIiwiZ2V0U2xhY2tUaW1lT3B0aW9ucyIsImdldFZpYVBvaW50U2xhY2tUaW1lT3JEZWZhdWx0IiwiZGVmYXVsdFZhbHVlIiwiaXNWaWFQb2ludFNsYWNrVGltZUlucHV0QWN0aXZlIiwiaW5kZXgiLCJjeCIsImlzTW9iaWxlIiwiY29sb3IiLCJtZWRpdW0iLCJEVEF1dG9TdWdnZXN0IiwiYXBwRWxlbWVudCIsImF1dG9Gb2N1cyIsInN0b3JlUmVmIiwic3RvcmVSZWZlcmVuY2UiLCJyZWZQb2ludCIsInBsYWNlaG9sZGVyIiwib3JpZ2luUGxhY2VIb2xkZXIiLCJnZXRBdXRvU3VnZ2VzdEljb25zIiwib25TZWxlY3QiLCJvbkNsZWFyIiwiZm9jdXNDaGFuZ2UiLCJoYW5kbGVGb2N1c0NoYW5nZSIsInNvdXJjZXMiLCJ0YXJnZXRzIiwiZmlsdGVyUmVzdWx0cyIsImhvdmVyQ29sb3IiLCJtb2JpbGVMYWJlbCIsIm1vZGVTZXQiLCJtb2RlSWNvbkNvbG9ycyIsInNob3dTY3JvbGwiLCJpc0VtYmVkZGVkIiwib3Bwb3NpdGUiLCJoYW5kbGVTd2FwT3JkZXJDbGljayIsIkljb24iLCJpbWciLCJyZWN0YW5nbGUiLCJSZWFjdFNvcnRhYmxlIiwibGlzdCIsImhhbmRsZSIsImFuaW1hdGlvbiIsImRpc2FibGVkIiwic2V0TGlzdCIsIml0ZW1zIiwibmV3VmlhUG9pbnRzIiwicm93IiwiY3Vyc29yIiwicm90YXRlIiwiYXJpYUxhYmVsIiwiaGFuZGxlVmlhUG9pbnRzIiwiaXRlbSIsInNob3dTbGFja0NvbnRyb2wiLCJoYW5kbGVUb2dnbGVWaWFQb2ludFNsYWNrQ2xpY2siLCJnZXRTbGFja0Rpc3BsYXkiLCJoYW5kbGVWaWFQb2ludFNsYWNrVGltZVNlbGVjdGVkIiwiaGFuZGxlUmVtb3ZlVmlhUG9pbnRDbGljayIsImlzTmFOIiwiZGVzdGluYXRpb25QbGFjZUhvbGRlciIsIm1vcmUiLCJoYW5kbGVBZGRWaWFQb2ludENsaWNrIiwid2lkdGgiLCJoZWlnaHQiLCJVUkxfUEVMSUFTIiwib2JqZWN0T2YiLCJEVEF1dG9zdWdnZXN0UGFuZWxXaXRoVHJhbnNsYXRpb24iLCJ3aXRoVHJhbnNsYXRpb24iLCJJMThuZXh0UHJvdmlkZXIiXSwibWFwcGluZ3MiOiI2a0NBQUEsU0FBU0EsRUFBUUMsR0FHZixPQUFPRCxFQUFVLG1CQUFxQkUsUUFBVSxpQkFBbUJBLE9BQU9DLFNBQVcsU0FBVUYsR0FDN0YsY0FBY0EsQ0FDZixFQUFHLFNBQVVBLEdBQ1osT0FBT0EsR0FBSyxtQkFBcUJDLFFBQVVELEVBQUVHLGNBQWdCRixRQUFVRCxJQUFNQyxPQUFPRyxVQUFZLGdCQUFrQkosQ0FDdEgsRUFBS0QsRUFBUUMsRUFDYixDQ05BLFNBQVNLLEVBQWNDLEdBQ3JCLElBQUlDLEVDRk4sU0FBcUJELEVBQUdFLEdBQ3RCLEdBQUksVUFBWVQsRUFBUU8sS0FBT0EsRUFBRyxPQUFPQSxFQUN6QyxJQUFJRyxFQUFJSCxFQUFFTCxPQUFPUyxhQUNqQixRQUFJLElBQVdELEVBQUcsQ0FDaEIsSUFBSUYsRUFB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
package/lib/index.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("classnames"),require("prop-types"),require("react"),require("react-sortablejs"),require("i18next"),require("@digitransit-component/digitransit-component-autosuggest"),require("@digitransit-component/digitransit-component-icon"),require("lodash/isEmpty"),require("react-autosuggest")):"function"==typeof define&&define.amd?define(["exports","classnames","prop-types","react","react-sortablejs","i18next","@digitransit-component/digitransit-component-autosuggest","@digitransit-component/digitransit-component-icon","lodash/isEmpty","react-autosuggest"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["@digitransit-component/digitransit-component-autosuggest-panel"]={},e.cx,e.PropTypes,e.React,e.reactSortablejs,e.i18next,e.DTAutosuggest,e.Icon,e.isEmpty,e.Autosuggest)}(this,(function(e,t,n,i,o,s,a,l,r,c){"use strict";function p(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var d=p(t),u=p(n),_=p(i),h=p(s),g=p(a),f=p(l),v=p(r),y=p(c);function m(e){return m="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},m(e)}function b(e){var t=function(e,t){if("object"!=m(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,t||"default");if("object"!=m(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==m(t)?t:t+""}function x(e,t,n){return(t=b(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function k(e,t){if(null==e)return{};var n,i,o=function(e,t){if(null==e)return{};var n={};for(var i in e)if({}.hasOwnProperty.call(e,i)){if(-1!==t.indexOf(i))continue;n[i]=e[i]}return n}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(i=0;i<s.length;i++)n=s[i],-1===t.indexOf(n)&&{}.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function w(e,t){void 0===t&&(t={});var n=t.insertAt;if(e&&"undefined"!=typeof document){var i=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css","top"===n&&i.firstChild?i.insertBefore(o,i.firstChild):i.appendChild(o),o.styleSheet?o.styleSheet.cssText=e:o.appendChild(document.createTextNode(e))}}var S={"combobox-container":"select_combobox-container__0lRpm","left-column":"select_left-column__cSrMR","combobox-label":"select_combobox-label__F9Ayd",container:"select_container__yrA-N",suggestion:"select_suggestion__b05iD",suggestionHighlighted:"select_suggestionHighlighted__ZFPWo",suggestionsContainerOpen:"select_suggestionsContainerOpen__9wcJ5",input:"select_input__pK5vk"};w(".select_combobox-container__0lRpm {\n background-color: #fff;\n border: solid #888 1px;\n display: flex;\n align-items: center;\n border-radius: 5px;\n height: 50px;\n justify-content: space-between;\n flex-grow: 1; }\n .select_combobox-container__0lRpm:focus-within {\n border-color: #007ac9; }\n .select_combobox-container__0lRpm .select_left-column__cSrMR {\n display: flex;\n flex-direction: column;\n width: 100%; }\n\n.select_combobox-label__F9Ayd {\n font-size: 12px;\n line-height: 20px;\n color: #666;\n letter-spacing: -0.48px;\n margin-left: 12px;\n margin-top: 4px; }\n\n.select_container__yrA-N {\n position: relative; }\n .select_container__yrA-N .select_suggestion__b05iD {\n font-size: 15px;\n line-height: 49px;\n height: 50px;\n padding: 0 0 0 12px;\n letter-spacing: -0.6px;\n color: #333;\n font-weight: 500; }\n .select_container__yrA-N .select_suggestionHighlighted__ZFPWo {\n font-size: 15px;\n font-weight: 500;\n background: #f2f5f7; }\n .select_container__yrA-N .select_suggestionsContainerOpen__9wcJ5 {\n position: absolute;\n background-color: #fff;\n z-index: 20;\n max-height: 250px;\n overflow-x: hidden;\n overflow-y: scroll;\n border-radius: 5px;\n box-shadow: 0 2px 0 0 rgba(0, 0, 0, 0.06);\n border: 1px rgba(0, 0, 0, 0.1) solid;\n top: 35px;\n width: calc(100% + 45px); }\n .select_container__yrA-N .select_suggestionsContainerOpen__9wcJ5 ul {\n padding: 0;\n margin: 0; }\n .select_container__yrA-N .select_suggestionsContainerOpen__9wcJ5 li:not(:last-child) {\n border-bottom: 1px solid #ddd; }\n .select_container__yrA-N .select_input__pK5vk {\n -moz-appearance: none;\n appearance: none;\n margin: -4px 0 0 0;\n padding-left: 12px;\n border: none;\n height: 26px;\n background: #fff;\n font-weight: 500;\n box-shadow: none;\n font-size: 15px;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.33;\n letter-spacing: -0.6px;\n color: #333; }\n .select_container__yrA-N .select_input__pK5vk:focus {\n outline: none;\n border: none;\n box-shadow: none;\n background: #fff; }\n .select_container__yrA-N .select_input__pK5vk:-moz-read-only {\n cursor: pointer;\n background: #fff; }\n .select_container__yrA-N .select_input__pK5vk:read-only {\n cursor: pointer;\n background: #fff; }\n");const E=["ref"],C=({value:e,getDisplay:t,options:n,onSlackTimeSelected:o,viaPointIndex:s,id:a,label:l,icon:r})=>{const[c,p]=i.useState(t(e)),[d,u]=i.useState(!1);i.useEffect((()=>p(t(e))),[e]);const h=i.useRef(null),g=Math.floor(e/600);i.useLayoutEffect((()=>{d&&h.current&&(h.current.scrollTop=50*g)}),[e,d]);const f=`${a}-input`,v=`${a}-label`;return _.default.createElement("label",{className:S["combobox-container"],htmlFor:f},_.default.createElement("span",{className:S["left-column"]},_.default.createElement("span",{className:S["combobox-label"],id:v},l),_.default.createElement(y.default,{id:a,suggestions:n,getSuggestionValue:e=>e.value,renderSuggestion:e=>e.displayName,onSuggestionsFetchRequested:()=>null,shouldRenderSuggestions:()=>!0,focusInputOnSuggestionClick:!1,onSuggestionsClearRequested:()=>null,inputProps:{value:c,onChange:(t,{newValue:n,method:i})=>{switch(i){case"enter":case"click":o(n,s);break;case"escape":p(e)}},onFocus:()=>{u(!0)},onBlur:()=>{u(!1)},id:f,"aria-labelledby":v,"aria-autocomplete":"none",readOnly:!0},renderSuggestionsContainer:({containerProps:e,children:t})=>{const{ref:n}=e,i=k(e,E);return _.default.createElement("div",Object.assign({tabIndex:"-1"},i,{ref:e=>{e&&(h.current=e,n(e))}}),t)},theme:S})),r)};"production"!==process.env.NODE_ENV&&(C.propTypes={value:u.default.number.isRequired,onSlackTimeSelected:u.default.func.isRequired,getDisplay:u.default.func.isRequired,options:u.default.arrayOf(u.default.shape({displayName:u.default.string.isRequired,value:u.default.number.isRequired}).isRequired).isRequired,id:u.default.string.isRequired,label:u.default.node.isRequired,icon:u.default.node.isRequired,viaPointIndex:u.default.number.isRequired});const P={de:{"add-via-button-label":"Füge Zwischenziel hinzu","add-via-duration-button-label":"Setze Umsteigezeit für Zwischenziel {{index}}","add-via-duration-button-label-close":"Schließe Umsteigezeit-Auswahl für Zwischenziel {{index}}","add-via-duration-button-label-open":"Öffne Umsteigezeit-Auswahl für Zwischenziel {{index}}","minute-short":"min","remove-via-button-label":"Entferne Zwischenziel {{index}}","swap-order-button-label":"Tausche Start mit Ziel","via-point":"Zwischenziel","via-point-index":"Zwischenziel {{index}}","viapoint-slack-amount":"Umsteigezeit"},en:{"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}}","minute-short":"min","remove-via-button-label":"Remove via point {{index}}","swap-order-button-label":"Reverse origin and destination","via-point":"Via point","via-point-index":"Via point {{index}}","viapoint-slack-amount":"Stop duration"},fi:{"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","minute-short":"min","remove-via-button-label":"Poista välipiste {{index}}","swap-order-button-label":"Käännä reitin suunta vastakkaiseksi","via-point":"Välipiste","via-point-index":"Välipiste {{index}}","viapoint-slack-amount":"Pysähdyksen kesto"},pl:{"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}}","minute-short":"min.","remove-via-button-label":"Usuń punkt pośredni {{index}}","swap-order-button-label":"Odwróć początek i cel","via-point":"Punkt pośredni","via-point-index":"Punkt pośredni {{index}}","viapoint-slack-amount":"Czas postoju"},sv:{"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}}","minute-short":"min","remove-via-button-label":"Ta bort viapunkt {{index}}","swap-order-button-label":"Sväng ruttens riktning till den motsatta","via-point":"Via punkt","via-point-index":"Via punkt {{index}}","viapoint-slack-amount":"Stoppets varaktighet"}};var N={"autosuggest-panel":"styles_autosuggest-panel__meNwd","autosuggest-searchpanel-text":"styles_autosuggest-searchpanel-text__-VQTg","origin-input-container":"styles_origin-input-container__p4Qik","destination-input-container":"styles_destination-input-container__jBY4I",row:"styles_row__1GhCD","viapoints-container":"styles_viapoints-container__FYp7K","viapoint-container":"styles_viapoint-container__8yh1M","light-gray-background":"styles_light-gray-background__4fyZs","viapoint-before":"styles_viapoint-before__t4saF","viapoint-input-container":"styles_viapoint-input-container__uZx95","viapoint-1":"styles_viapoint-1__8Mna8",viapoint:"styles_viapoint__vUO9L","viapoint-2":"styles_viapoint-2__-OoUa","viapoint-3":"styles_viapoint-3__vvivE","viapoint-4":"styles_viapoint-4__jS9k1","viapoint-5":"styles_viapoint-5__J4V5N","viapoint-slack-time":"styles_viapoint-slack-time__Xpo0G","select-wrapper":"styles_select-wrapper__1usZw","via-point-button-container":"styles_via-point-button-container__cI2JI","input-viapoint-slack-container":"styles_input-viapoint-slack-container__TNgVy","itinerary-search-control":"styles_itinerary-search-control__cEL1X",opposite:"styles_opposite__zQQhd","add-via-point":"styles_add-via-point__E-gGB","add-via-point-slack":"styles_add-via-point-slack__GKjFf","remove-via-point":"styles_remove-via-point__e9DMQ","combobox-icon":"styles_combobox-icon__d3k1e","time-input-icon":"styles_time-input-icon__M8dmw","rectangle-container":"styles_rectangle-container__AdbAA",rectangle:"styles_rectangle__1IO7E","search-panel-whitespace":"styles_search-panel-whitespace__Luhwx"};w(".styles_autosuggest-panel__meNwd {\n width: 100%; }\n\n.styles_autosuggest-searchpanel-text__-VQTg {\n font-size: 24px;\n font-weight: var(--font-weight-medium);\n letter-spacing: -0.8px;\n color: #333;\n line-height: 1;\n margin-bottom: 17px;\n margin-top: unset; }\n @media screen and (min-width: 768px) {\n .styles_autosuggest-searchpanel-text__-VQTg {\n letter-spacing: -0.8px;\n line-height: 27px;\n margin-bottom: 21px; } }\n\n.styles_origin-input-container__p4Qik,\n.styles_destination-input-container__jBY4I {\n display: flex;\n flex: 1 0 100%; }\n .styles_origin-input-container__p4Qik input[type='text'],\n .styles_destination-input-container__jBY4I input[type='text'] {\n margin: 0; }\n\n.styles_row__1GhCD {\n display: flex;\n flex-direction: row; }\n\n.styles_viapoints-container__FYp7K {\n display: flex;\n flex-direction: column; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M {\n display: flex;\n flex: 1 0 100%;\n min-height: 50px; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M:first-child {\n margin-top: 6px; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M:not(:first-child) {\n margin-top: 3px; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M:last-child {\n margin-bottom: 6px; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs {\n display: flex;\n padding: 3px 0;\n flex-direction: column;\n background: #f2f5f7;\n border-radius: 5px;\n width: 100%; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-before__t4saF {\n display: flex;\n min-width: 27px;\n justify-content: center;\n align-items: center; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-before__t4saF svg {\n fill: #888;\n height: 20px; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-input-container__uZx95 {\n display: flex;\n align-items: center;\n width: 100%; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-input-container__uZx95 input[type='text'] {\n margin: 0; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-input-container__uZx95.styles_viapoint-1__8Mna8 > div.styles_viapoint__vUO9L {\n z-index: 15; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-input-container__uZx95.styles_viapoint-2__-OoUa > div.styles_viapoint__vUO9L {\n z-index: 14; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-input-container__uZx95.styles_viapoint-3__vvivE > div.styles_viapoint__vUO9L {\n z-index: 13; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-input-container__uZx95.styles_viapoint-4__jS9k1 > div.styles_viapoint__vUO9L {\n z-index: 12; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-input-container__uZx95.styles_viapoint-5__J4V5N > div.styles_viapoint__vUO9L {\n z-index: 11; }\n\n.styles_viapoint-slack-time__Xpo0G {\n font-size: 13px;\n font-weight: normal;\n letter-spacing: -0.36px;\n color: #333;\n padding-left: 27px;\n padding-top: 12px;\n padding-bottom: 10px; }\n\n.styles_select-wrapper__1usZw {\n display: flex;\n height: 50px;\n margin-top: 9px;\n padding-left: 27px;\n padding-right: 47px; }\n\n.styles_via-point-button-container__cI2JI {\n display: flex; }\n .styles_via-point-button-container__cI2JI > div:nth-child(1) {\n order: 1;\n border-left: none; }\n .styles_via-point-button-container__cI2JI > div:nth-child(2) {\n order: 2;\n border-left: 1px solid rgba(151, 151, 151, 0.2); }\n\n.styles_input-viapoint-slack-container__TNgVy {\n display: flex;\n flex-direction: column; }\n\n.styles_itinerary-search-control__cEL1X {\n display: flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n max-height: 50px;\n min-width: var(--width); }\n .styles_itinerary-search-control__cEL1X + .styles_itinerary-search-control__cEL1X {\n border-left: 1px solid rgba(151, 151, 151, 0.2); }\n .styles_itinerary-search-control__cEL1X .styles_opposite__zQQhd {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n min-width: 40px;\n cursor: pointer; }\n .styles_itinerary-search-control__cEL1X .styles_opposite__zQQhd svg {\n width: 19px;\n height: 17px; }\n .styles_itinerary-search-control__cEL1X .styles_add-via-point__E-gGB {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n min-width: 40px;\n cursor: pointer; }\n .styles_itinerary-search-control__cEL1X .styles_add-via-point__E-gGB svg {\n width: 20px;\n height: 22px; }\n .styles_itinerary-search-control__cEL1X .styles_add-via-point-slack__GKjFf {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n min-width: 47px;\n cursor: pointer; }\n .styles_itinerary-search-control__cEL1X .styles_add-via-point-slack__GKjFf svg {\n width: 18px;\n height: 19px; }\n .styles_itinerary-search-control__cEL1X .styles_remove-via-point__e9DMQ {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n max-height: 44px;\n min-width: 40px;\n cursor: pointer; }\n .styles_itinerary-search-control__cEL1X .styles_remove-via-point__e9DMQ svg {\n width: 14px;\n height: 14px; }\n\n.styles_combobox-icon__d3k1e {\n color: var(--color);\n border-left: solid #888 1px;\n height: 35px; }\n .styles_combobox-icon__d3k1e.styles_time-input-icon__M8dmw {\n padding: 9px 13px 0 13px; }\n .styles_combobox-icon__d3k1e.styles_time-input-icon__M8dmw svg {\n width: 18px;\n height: 19px; }\n\n.styles_rectangle-container__AdbAA {\n display: block;\n position: relative;\n height: 9px;\n z-index: 19; }\n .styles_rectangle-container__AdbAA .styles_rectangle__1IO7E {\n position: absolute;\n width: 4px;\n height: 21px;\n border-radius: 2px;\n background-color: #ddd;\n margin-left: 25px;\n margin-top: -5px; }\n\n.styles_search-panel-whitespace__Luhwx {\n min-width: 40px; }\n");const A=["children","className","enabled","onClick","onKeyPress","wide"];Object.keys(P).forEach((e=>h.default.addResourceBundle(e,"translation",P[e],!0)));const V=()=>({}),R=e=>{if(void 0===e||v.default(e))return!0;const t=Object.keys(e);return 1===t.length||2===t.length&&t.includes("locationSlack")},O=e=>{let{children:t,className:n,enabled:i,onClick:o,onKeyPress:s,wide:a}=e,l=k(e,A);return _.default.createElement("div",{className:N["itinerary-search-control"],style:{"--width":a?"47px":"40px"}},o&&i&&_.default.createElement("div",Object.assign({},l,{className:n,onClick:o,onKeyPress:s,role:"button",tabIndex:"0"}),t))},I=(e,t,n=!1)=>{const i=e.indexOf(t);return i>-1&&e.splice(i,1),n?e.map((e=>e>t?e-1:e)):e},M=e=>{const t=e&&(e.key||e.which||e.keyCode)||"";return!(!t||![13," ","Spacebar"].concat([32,"Enter"]).includes(t))&&(e.preventDefault(),!0)},j=e=>e&&e.address||e&&e.gps&&e.ready&&"Nykyinen sijainti"||"",F=e=>e&&!0===e.gps?"position":"location";"production"!==process.env.NODE_ENV&&(O.propTypes={children:u.default.node,className:u.default.string.isRequired,enabled:u.default.bool.isRequired,onClick:u.default.func.isRequired,onKeyPress:u.default.func.isRequired,wide:u.default.bool}),O.defaultProps={children:void 0,wide:!1};const L="production"!==process.env.NODE_ENV?u.default.shape({address:u.default.string,lat:u.default.number,lon:u.default.number,locationSlack:u.default.number}):{};class z extends _.default.Component{constructor(e){super(e),x(this,"storeReference",(e=>{this.setState((t=>({refs:[...t.refs,e]})))})),x(this,"handleFocusChange",(()=>{const{destination:e}=this.props;e&&e.lat||this.state.refs[1].focus()})),x(this,"updateViaPoints",(e=>{0!==e.length?this.props.updateViaPoints(e.filter((e=>!R(e)))):this.props.updateViaPoints([])})),x(this,"handleToggleViaPointSlackClick",(e=>{const{activeSlackInputs:t}=this.state;this.setState({activeSlackInputs:t.includes(e)?I(t,e):t.concat([e])})})),x(this,"handleViaPointSlackTimeSelected",((e,t)=>{this.props.addAnalyticsEvent&&this.props.addAnalyticsEvent({action:"EditViaPointStopDuration",category:"ItinerarySettings",name:e/60});const{viaPoints:n}=this.props;n[t].locationSlack=Number.parseInt(e,10),this.updateViaPoints(n)})),x(this,"handleViaPointLocationSelected",((e,t)=>{this.props.handleViaPointLocationSelected(e,t)})),x(this,"handleRemoveViaPointClick",(e=>{this.props.addAnalyticsEvent&&this.props.addAnalyticsEvent({action:"RemoveJourneyViaPoint",category:"ItinerarySettings",name:null});const{activeSlackInputs:t}=this.state,{viaPoints:n}=this.props;n.splice(e,1),this.setState({activeSlackInputs:I(t,e,!0)},(()=>this.updateViaPoints(n)))})),x(this,"handleAddViaPointClick",(()=>{this.props.addAnalyticsEvent&&this.props.addAnalyticsEvent({action:"AddJourneyViaPoint",category:"ItinerarySettings",name:"QuickSettingsButton"});const{viaPoints:e}=this.props;e.push({}),this.setState(this.state)})),x(this,"handleSwapOrderClick",(()=>{this.props.addAnalyticsEvent&&this.props.addAnalyticsEvent({action:"SwitchJourneyStartAndEndPointOrder",category:"ItinerarySettings",name:null});const{viaPoints:e}=this.props;e.reverse(),this.props.swapOrder()})),x(this,"getSlackDisplay",(e=>`${e/60} ${h.default.t("minute-short",{lng:this.props.lang})}`)),this.state={activeSlackInputs:[],refs:[]}}render(){const{origin:e,searchPanelText:t,searchContext:n,disableAutoFocus:i,viaPoints:s,originMobileLabel:a,destinationMobileLabel:l,fontWeights:r,onFocusChange:c,showSwapControl:p,showViapointControl:u}=this.props,v=this.props.lang,{activeSlackInputs:y}=this.state,m=(()=>{const e=[];for(let t=0;t<=9;t++){const n=10*t;e.push({displayName:`${n} ${h.default.t("minute-short")}`,value:60*n})}return e})(),b=(e,t=0)=>e&&e.locationSlack||t,x=e=>y.includes(e);return _.default.createElement("div",{className:d.default(N["autosuggest-panel"],this.props.isMobile&&"small"),style:{"--color":`${this.props.color}`,"--font-weight-medium":r.medium}}," ",t?_.default.createElement("div",null,_.default.createElement("h1",{className:N["autosuggest-searchpanel-text"]}," ",t)):null,_.default.createElement("div",{className:N["origin-input-container"]},_.default.createElement(g.default,{appElement:this.props.appElement,icon:"mapMarker",id:"origin",autoFocus:!0!==i&&(!this.props.isMobile&&!e.lat),storeRef:this.storeReference,refPoint:this.props.refPoint,className:F(e),placeholder:this.props.originPlaceHolder,value:j(e),searchContext:n,getAutoSuggestIcons:this.props.getAutoSuggestIcons,onSelect:this.props.onSelect,onClear:this.props.onClear,focusChange:c||this.handleFocusChange,lang:this.props.lang,sources:this.props.sources,targets:this.props.targets,filterResults:this.props.filterResults,isMobile:this.props.isMobile,color:this.props.color,hoverColor:this.props.hoverColor,mobileLabel:a,fontWeights:this.props.fontWeights,modeSet:this.props.modeSet,modeIconColors:this.props.modeIconColors,showScroll:this.props.showScroll,isEmbedded:this.props.isEmbedded}),(p||u)&&_.default.createElement(O,{className:N.opposite,enabled:p,onClick:()=>this.handleSwapOrderClick(),onKeyPress:e=>M(e)&&this.handleSwapOrderClick(),"aria-label":h.default.t("swap-order-button-label",{lng:v})},_.default.createElement(f.default,{img:"opposite",color:this.props.color}))),0===s.length&&_.default.createElement("div",{className:N["rectangle-container"]},_.default.createElement("div",{className:N.rectangle})),_.default.createElement(o.ReactSortable,{className:N["viapoints-container"],list:s,handle:`.${N["viapoint-before"]}`,animation:200,disabled:s.length<=1,setList:e=>{const t=e.filter((e=>!R(e)));t.length>0&&this.props.updateViaPoints(t)}},s.map(((e,t)=>_.default.createElement("div",{className:d.default(N["viapoint-container"]),key:`viapoint-${t}`},_.default.createElement("div",{className:N["light-gray-background"]},_.default.createElement("div",{className:N.row},_.default.createElement("div",{className:N["viapoint-before"],style:s.length>1?{cursor:"move"}:{}},s.length>1&&_.default.createElement(f.default,{img:"ellipsis",rotate:90,color:this.props.color})),_.default.createElement("div",{className:`${N["viapoint-input-container"]} ${N[`viapoint-${t+1}`]}`},_.default.createElement(g.default,{appElement:this.props.appElement,icon:"mapMarker-via",id:"via-point",ariaLabel:h.default.t("via-point-index",{index:t+1,lng:v}),autoFocus:!0!==i&&!this.props.isMobile,placeholder:"via-point",className:"viapoint",searchContext:n,refPoint:this.props.refPoint,value:e&&e.address||"",onSelect:this.props.onSelect,onClear:this.props.onClear,handleViaPoints:e=>this.handleViaPointLocationSelected(e,t),lang:this.props.lang,sources:this.props.sources,targets:["Stops","Stations"],filterResults:this.props.filterResults,getAutoSuggestIcons:this.props.getAutoSuggestIcons,isMobile:this.props.isMobile,color:this.props.color,hoverColor:this.props.hoverColor,fontWeights:this.props.fontWeights,modeSet:this.props.modeSet,modeIconColors:this.props.modeIconColors,showScroll:this.props.showScroll})),this.props.showSlackControl&&_.default.createElement(O,{className:N["add-via-point-slack"],enabled:this.props.showViapointControl,onClick:()=>this.handleToggleViaPointSlackClick(t),onKeyPress:e=>M(e)&&this.handleToggleViaPointSlackClick(t),"aria-label":h.default.t(x(t)?"add-via-duration-button-label-open":"add-via-duration-button-label-close",{index:t+1,lng:v}),wide:!0},_.default.createElement(f.default,{img:"time",color:this.props.color}))),!x(t)&&s[t]&&s[t].locationSlack>0&&_.default.createElement("span",{className:N["viapoint-slack-time"]},`${h.default.t("viapoint-slack-amount",{lng:v})}: ${this.getSlackDisplay(s[t].locationSlack)}`),_.default.createElement("div",{className:d.default(N["input-viapoint-slack-container"],!x(t)&&"collapsed")},_.default.createElement("div",{className:N["select-wrapper"]},_.default.createElement(C,{id:`viapoint-slack-${t}`,label:h.default.t("viapoint-slack-amount",{lng:v}),options:m,value:b(s[t]),getDisplay:this.getSlackDisplay,viaPointIndex:t,icon:_.default.createElement("span",{className:`${N["combobox-icon"]} ${N["time-input-icon"]}`},_.default.createElement(f.default,{img:"time",color:this.props.color})),onSlackTimeSelected:this.handleViaPointSlackTimeSelected})))),_.default.createElement(O,{className:N["remove-via-point"],enabled:this.props.showViapointControl,onClick:()=>this.handleRemoveViaPointClick(t),onKeyPress:e=>M(e)&&this.handleRemoveViaPointClick(t),"aria-label":h.default.t("remove-via-button-label",{index:t+1,lng:v})},_.default.createElement(f.default,{img:"trash",color:this.props.color})))))),_.default.createElement("div",{className:N["destination-input-container"]},_.default.createElement(g.default,{appElement:this.props.appElement,icon:"mapMarker",id:"destination",autoFocus:!0!==i&&(!this.props.isMobile&&!Number.isNaN(e.lat)),storeRef:this.storeReference,placeholder:this.props.destinationPlaceHolder,className:F(this.props.destination),getAutoSuggestIcons:this.props.getAutoSuggestIcons,searchContext:n,onSelect:this.props.onSelect,onClear:this.props.onClear,refPoint:this.props.refPoint,value:j(this.props.destination),lang:this.props.lang,sources:this.props.sources,targets:this.props.targets,filterResults:this.props.filterResults,isMobile:this.props.isMobile,color:this.props.color,hoverColor:this.props.hoverColor,mobileLabel:l,fontWeights:this.props.fontWeights,modeSet:this.props.modeSet,modeIconColors:this.props.modeIconColors,showScroll:this.props.showScroll,isEmbedded:this.props.isEmbedded}),(p||u)&&_.default.createElement(O,{className:d.default(N["add-via-point"],N.more,s.length>4&&"collapsed"),enabled:u&&0===s.length,onClick:()=>this.handleAddViaPointClick(),onKeyPress:e=>M(e)&&this.handleAddViaPointClick(),"aria-label":h.default.t("add-via-button-label",{lng:v})},_.default.createElement(f.default,{img:"viapoint",width:1.25,height:1.375,color:this.props.color}))))}}x(z,"defaultProps",{origin:void 0,destination:void 0,viaPoints:[],originPlaceHolder:"give-origin",destinationPlaceHolder:"give-destination",swapOrder:void 0,updateViaPoints:()=>{},searchPanelText:void 0,sources:[],targets:[],filterResults:void 0,onClear:void 0,getAutoSuggestIcons:void 0,refPoint:void 0,addAnalyticsEvent:void 0,disableAutoFocus:!1,isMobile:!1,handleViaPointLocationSelected:void 0,color:"#007ac9",hoverColor:"#0062a1",originMobileLabel:null,destinationMobileLabel:null,modeSet:void 0,modeIconColors:void 0,fontWeights:{medium:500},showScroll:!1,onFocusChange:void 0,isEmbedded:!1,showSwapControl:!1,showViapointControl:!1,showSlackControl:!1}),"production"!==process.env.NODE_ENV&&(z.propTypes={appElement:u.default.string.isRequired,origin:L,destination:L,originPlaceHolder:u.default.string,destinationPlaceHolder:u.default.string,viaPoints:u.default.arrayOf(L),updateViaPoints:u.default.func,handleViaPointLocationSelected:u.default.func,swapOrder:u.default.func,searchPanelText:u.default.string,searchContext:u.default.shape({URL_PELIAS:u.default.string}).isRequired,onSelect:u.default.func.isRequired,onClear:u.default.func,addAnalyticsEvent:u.default.func,lang:u.default.string.isRequired,disableAutoFocus:u.default.bool,sources:u.default.arrayOf(u.default.string),targets:u.default.arrayOf(u.default.string),filterResults:u.default.func,isMobile:u.default.bool,color:u.default.string,hoverColor:u.default.string,originMobileLabel:u.default.string,destinationMobileLabel:u.default.string,refPoint:L,modeSet:u.default.string,modeIconColors:u.default.objectOf(u.default.string),getAutoSuggestIcons:u.default.objectOf(u.default.func),fontWeights:u.default.shape({medium:u.default.number}),showScroll:u.default.bool,onFocusChange:u.default.func,isEmbedded:u.default.bool,showSwapControl:u.default.bool,showViapointControl:u.default.bool,showSlackControl:u.default.bool}),e.default=z,e.getEmptyViaPointPlaceHolder=V,Object.defineProperty(e,"__esModule",{value:!0})}));
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("classnames"),require("prop-types"),require("react"),require("react-i18next"),require("react-sortablejs"),require("@digitransit-component/digitransit-component-autosuggest"),require("@digitransit-component/digitransit-component-icon"),require("lodash/isEmpty"),require("react-autosuggest"),require("i18next")):"function"==typeof define&&define.amd?define(["exports","classnames","prop-types","react","react-i18next","react-sortablejs","@digitransit-component/digitransit-component-autosuggest","@digitransit-component/digitransit-component-icon","lodash/isEmpty","react-autosuggest","i18next"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["@digitransit-component/digitransit-component-autosuggest-panel"]={},e.cx,e.PropTypes,e.React,e.reactI18next,e.reactSortablejs,e.DTAutosuggest,e.Icon,e.isEmpty,e.Autosuggest,e.i18next)}(this,(function(e,t,n,i,o,s,a,l,r,c,p){"use strict";function d(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var u=d(t),_=d(n),h=d(i),g=d(a),f=d(l),v=d(r),y=d(c);function m(e){return m="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},m(e)}function b(e){var t=function(e,t){if("object"!=m(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,t||"default");if("object"!=m(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==m(t)?t:t+""}function x(e,t,n){return(t=b(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function k(e,t){if(null==e)return{};var n,i,o=function(e,t){if(null==e)return{};var n={};for(var i in e)if({}.hasOwnProperty.call(e,i)){if(-1!==t.indexOf(i))continue;n[i]=e[i]}return n}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(i=0;i<s.length;i++)n=s[i],-1===t.indexOf(n)&&{}.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function w(e,t){void 0===t&&(t={});var n=t.insertAt;if(e&&"undefined"!=typeof document){var i=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css","top"===n&&i.firstChild?i.insertBefore(o,i.firstChild):i.appendChild(o),o.styleSheet?o.styleSheet.cssText=e:o.appendChild(document.createTextNode(e))}}var S={"combobox-container":"select_combobox-container__0lRpm","left-column":"select_left-column__cSrMR","combobox-label":"select_combobox-label__F9Ayd",container:"select_container__yrA-N",suggestion:"select_suggestion__b05iD",suggestionHighlighted:"select_suggestionHighlighted__ZFPWo",suggestionsContainerOpen:"select_suggestionsContainerOpen__9wcJ5",input:"select_input__pK5vk"};w(".select_combobox-container__0lRpm {\n background-color: #fff;\n border: solid #888 1px;\n display: flex;\n align-items: center;\n border-radius: 5px;\n height: 50px;\n justify-content: space-between;\n flex-grow: 1; }\n .select_combobox-container__0lRpm:focus-within {\n border-color: #007ac9; }\n .select_combobox-container__0lRpm .select_left-column__cSrMR {\n display: flex;\n flex-direction: column;\n width: 100%; }\n\n.select_combobox-label__F9Ayd {\n font-size: 12px;\n line-height: 20px;\n color: #666;\n letter-spacing: -0.48px;\n margin-left: 12px;\n margin-top: 4px; }\n\n.select_container__yrA-N {\n position: relative; }\n .select_container__yrA-N .select_suggestion__b05iD {\n font-size: 15px;\n line-height: 49px;\n height: 50px;\n padding: 0 0 0 12px;\n letter-spacing: -0.6px;\n color: #333;\n font-weight: 500; }\n .select_container__yrA-N .select_suggestionHighlighted__ZFPWo {\n font-size: 15px;\n font-weight: 500;\n background: #f2f5f7; }\n .select_container__yrA-N .select_suggestionsContainerOpen__9wcJ5 {\n position: absolute;\n background-color: #fff;\n z-index: 20;\n max-height: 250px;\n overflow-x: hidden;\n overflow-y: scroll;\n border-radius: 5px;\n box-shadow: 0 2px 0 0 rgba(0, 0, 0, 0.06);\n border: 1px rgba(0, 0, 0, 0.1) solid;\n top: 35px;\n width: calc(100% + 45px); }\n .select_container__yrA-N .select_suggestionsContainerOpen__9wcJ5 ul {\n padding: 0;\n margin: 0; }\n .select_container__yrA-N .select_suggestionsContainerOpen__9wcJ5 li:not(:last-child) {\n border-bottom: 1px solid #ddd; }\n .select_container__yrA-N .select_input__pK5vk {\n -webkit-appearance: none;\n appearance: none;\n margin: -4px 0 0 0;\n padding-left: 12px;\n border: none;\n height: 26px;\n background: #fff;\n font-weight: 500;\n box-shadow: none;\n font-size: 15px;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.33;\n letter-spacing: -0.6px;\n color: #333; }\n .select_container__yrA-N .select_input__pK5vk:focus {\n outline: none;\n border: none;\n box-shadow: none;\n background: #fff; }\n .select_container__yrA-N .select_input__pK5vk:read-only {\n cursor: pointer;\n background: #fff; }\n");const E=["ref"],P=({value:e,getDisplay:t,options:n,onSlackTimeSelected:o,viaPointIndex:s,id:a,label:l,icon:r})=>{const[c,p]=i.useState(t(e)),[d,u]=i.useState(!1);i.useEffect((()=>p(t(e))),[e]);const _=i.useRef(null),g=Math.floor(e/600);i.useLayoutEffect((()=>{d&&_.current&&(_.current.scrollTop=50*g)}),[e,d]);const f=`${a}-input`,v=`${a}-label`;return h.default.createElement("label",{className:S["combobox-container"],htmlFor:f},h.default.createElement("span",{className:S["left-column"]},h.default.createElement("span",{className:S["combobox-label"],id:v},l),h.default.createElement(y.default,{id:a,suggestions:n,getSuggestionValue:e=>e.value,renderSuggestion:e=>e.displayName,onSuggestionsFetchRequested:()=>null,shouldRenderSuggestions:()=>!0,focusInputOnSuggestionClick:!1,onSuggestionsClearRequested:()=>null,inputProps:{value:c,onChange:(t,{newValue:n,method:i})=>{switch(i){case"enter":case"click":o(n,s);break;case"escape":p(e)}},onFocus:()=>{u(!0)},onBlur:()=>{u(!1)},id:f,"aria-labelledby":v,"aria-autocomplete":"none",readOnly:!0},renderSuggestionsContainer:({containerProps:e,children:t})=>{const{ref:n}=e,i=k(e,E);return h.default.createElement("div",Object.assign({tabIndex:"-1"},i,{ref:e=>{e&&(_.current=e,n(e))}}),t)},theme:S})),r)};"production"!==process.env.NODE_ENV&&(P.propTypes={value:_.default.number.isRequired,onSlackTimeSelected:_.default.func.isRequired,getDisplay:_.default.func.isRequired,options:_.default.arrayOf(_.default.shape({displayName:_.default.string.isRequired,value:_.default.number.isRequired}).isRequired).isRequired,id:_.default.string.isRequired,label:_.default.node.isRequired,icon:_.default.node.isRequired,viaPointIndex:_.default.number.isRequired});const C=p.createInstance({fallbackLng:"fi",resources:{de:{translation:{"add-via-button-label":"Füge Zwischenziel hinzu","add-via-duration-button-label":"Setze Umsteigezeit für Zwischenziel {{index}}","add-via-duration-button-label-close":"Schließe Umsteigezeit-Auswahl für Zwischenziel {{index}}","add-via-duration-button-label-open":"Öffne Umsteigezeit-Auswahl für Zwischenziel {{index}}","minute-short":"min","remove-via-button-label":"Entferne Zwischenziel {{index}}","swap-order-button-label":"Tausche Start mit Ziel","via-point":"Zwischenziel","via-point-index":"Zwischenziel {{index}}","viapoint-slack-amount":"Umsteigezeit"}},en:{translation:{"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}}","minute-short":"min","remove-via-button-label":"Remove via point {{index}}","swap-order-button-label":"Reverse origin and destination","via-point":"Via point","via-point-index":"Via point {{index}}","viapoint-slack-amount":"Stop duration"}},fi:{translation:{"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","minute-short":"min","remove-via-button-label":"Poista välipiste {{index}}","swap-order-button-label":"Käännä reitin suunta vastakkaiseksi","via-point":"Välipiste","via-point-index":"Välipiste {{index}}","viapoint-slack-amount":"Pysähdyksen kesto"}},pl:{translation:{"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}}","minute-short":"min.","remove-via-button-label":"Usuń punkt pośredni {{index}}","swap-order-button-label":"Odwróć początek i cel","via-point":"Punkt pośredni","via-point-index":"Punkt pośredni {{index}}","viapoint-slack-amount":"Czas postoju"}},sv:{translation:{"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}}","minute-short":"min","remove-via-button-label":"Ta bort viapunkt {{index}}","swap-order-button-label":"Sväng ruttens riktning till den motsatta","via-point":"Via punkt","via-point-index":"Via punkt {{index}}","viapoint-slack-amount":"Stoppets varaktighet"}}},defaultNS:"translation",react:{useSuspense:!0}});C.init();var N={"autosuggest-panel":"styles_autosuggest-panel__meNwd","autosuggest-searchpanel-text":"styles_autosuggest-searchpanel-text__-VQTg","origin-input-container":"styles_origin-input-container__p4Qik","destination-input-container":"styles_destination-input-container__jBY4I",row:"styles_row__1GhCD","viapoints-container":"styles_viapoints-container__FYp7K","viapoint-container":"styles_viapoint-container__8yh1M","light-gray-background":"styles_light-gray-background__4fyZs","viapoint-before":"styles_viapoint-before__t4saF","viapoint-input-container":"styles_viapoint-input-container__uZx95","viapoint-1":"styles_viapoint-1__8Mna8",viapoint:"styles_viapoint__vUO9L","viapoint-2":"styles_viapoint-2__-OoUa","viapoint-3":"styles_viapoint-3__vvivE","viapoint-4":"styles_viapoint-4__jS9k1","viapoint-5":"styles_viapoint-5__J4V5N","viapoint-slack-time":"styles_viapoint-slack-time__Xpo0G","select-wrapper":"styles_select-wrapper__1usZw","via-point-button-container":"styles_via-point-button-container__cI2JI","input-viapoint-slack-container":"styles_input-viapoint-slack-container__TNgVy","itinerary-search-control":"styles_itinerary-search-control__cEL1X",opposite:"styles_opposite__zQQhd","add-via-point":"styles_add-via-point__E-gGB","add-via-point-slack":"styles_add-via-point-slack__GKjFf","remove-via-point":"styles_remove-via-point__e9DMQ","combobox-icon":"styles_combobox-icon__d3k1e","time-input-icon":"styles_time-input-icon__M8dmw","rectangle-container":"styles_rectangle-container__AdbAA",rectangle:"styles_rectangle__1IO7E","search-panel-whitespace":"styles_search-panel-whitespace__Luhwx"};w(".styles_autosuggest-panel__meNwd {\n width: 100%; }\n\n.styles_autosuggest-searchpanel-text__-VQTg {\n font-size: 24px;\n font-weight: var(--font-weight-medium);\n letter-spacing: -0.8px;\n color: #333;\n line-height: 1;\n margin-bottom: 17px;\n margin-top: unset; }\n @media screen and (min-width: 768px) {\n .styles_autosuggest-searchpanel-text__-VQTg {\n letter-spacing: -0.8px;\n line-height: 27px;\n margin-bottom: 21px; } }\n\n.styles_origin-input-container__p4Qik,\n.styles_destination-input-container__jBY4I {\n display: flex;\n flex: 1 0 100%; }\n .styles_origin-input-container__p4Qik input[type='text'],\n .styles_destination-input-container__jBY4I input[type='text'] {\n margin: 0; }\n\n.styles_row__1GhCD {\n display: flex;\n flex-direction: row; }\n\n.styles_viapoints-container__FYp7K {\n display: flex;\n flex-direction: column; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M {\n display: flex;\n flex: 1 0 100%;\n min-height: 50px; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M:first-child {\n margin-top: 6px; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M:not(:first-child) {\n margin-top: 3px; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M:last-child {\n margin-bottom: 6px; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs {\n display: flex;\n padding: 3px 0;\n flex-direction: column;\n background: #f2f5f7;\n border-radius: 5px;\n width: 100%; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-before__t4saF {\n display: flex;\n min-width: 27px;\n justify-content: center;\n align-items: center; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-before__t4saF svg {\n fill: #888;\n height: 20px; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-input-container__uZx95 {\n display: flex;\n align-items: center;\n width: 100%; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-input-container__uZx95 input[type='text'] {\n margin: 0; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-input-container__uZx95.styles_viapoint-1__8Mna8 > div.styles_viapoint__vUO9L {\n z-index: 15; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-input-container__uZx95.styles_viapoint-2__-OoUa > div.styles_viapoint__vUO9L {\n z-index: 14; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-input-container__uZx95.styles_viapoint-3__vvivE > div.styles_viapoint__vUO9L {\n z-index: 13; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-input-container__uZx95.styles_viapoint-4__jS9k1 > div.styles_viapoint__vUO9L {\n z-index: 12; }\n .styles_viapoints-container__FYp7K .styles_viapoint-container__8yh1M .styles_light-gray-background__4fyZs .styles_viapoint-input-container__uZx95.styles_viapoint-5__J4V5N > div.styles_viapoint__vUO9L {\n z-index: 11; }\n\n.styles_viapoint-slack-time__Xpo0G {\n font-size: 13px;\n font-weight: normal;\n letter-spacing: -0.36px;\n color: #333;\n padding-left: 27px;\n padding-top: 12px;\n padding-bottom: 10px; }\n\n.styles_select-wrapper__1usZw {\n display: flex;\n height: 50px;\n margin-top: 9px;\n padding-left: 27px;\n padding-right: 47px; }\n\n.styles_via-point-button-container__cI2JI {\n display: flex; }\n .styles_via-point-button-container__cI2JI > div:nth-child(1) {\n order: 1;\n border-left: none; }\n .styles_via-point-button-container__cI2JI > div:nth-child(2) {\n order: 2;\n border-left: 1px solid rgba(151, 151, 151, 0.2); }\n\n.styles_input-viapoint-slack-container__TNgVy {\n display: flex;\n flex-direction: column; }\n\n.styles_itinerary-search-control__cEL1X {\n display: flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n max-height: 50px;\n min-width: var(--width); }\n .styles_itinerary-search-control__cEL1X + .styles_itinerary-search-control__cEL1X {\n border-left: 1px solid rgba(151, 151, 151, 0.2); }\n .styles_itinerary-search-control__cEL1X .styles_opposite__zQQhd {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n min-width: 40px;\n cursor: pointer; }\n .styles_itinerary-search-control__cEL1X .styles_opposite__zQQhd svg {\n width: 19px;\n height: 17px; }\n .styles_itinerary-search-control__cEL1X .styles_add-via-point__E-gGB {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n min-width: 40px;\n cursor: pointer; }\n .styles_itinerary-search-control__cEL1X .styles_add-via-point__E-gGB svg {\n width: 20px;\n height: 22px; }\n .styles_itinerary-search-control__cEL1X .styles_add-via-point-slack__GKjFf {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n min-width: 47px;\n cursor: pointer; }\n .styles_itinerary-search-control__cEL1X .styles_add-via-point-slack__GKjFf svg {\n width: 18px;\n height: 19px; }\n .styles_itinerary-search-control__cEL1X .styles_remove-via-point__e9DMQ {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n max-height: 44px;\n min-width: 40px;\n cursor: pointer; }\n .styles_itinerary-search-control__cEL1X .styles_remove-via-point__e9DMQ svg {\n width: 14px;\n height: 14px; }\n\n.styles_combobox-icon__d3k1e {\n color: var(--color);\n border-left: solid #888 1px;\n height: 35px; }\n .styles_combobox-icon__d3k1e.styles_time-input-icon__M8dmw {\n padding: 9px 13px 0 13px; }\n .styles_combobox-icon__d3k1e.styles_time-input-icon__M8dmw svg {\n width: 18px;\n height: 19px; }\n\n.styles_rectangle-container__AdbAA {\n display: block;\n position: relative;\n height: 9px;\n z-index: 19; }\n .styles_rectangle-container__AdbAA .styles_rectangle__1IO7E {\n position: absolute;\n width: 4px;\n height: 21px;\n border-radius: 2px;\n background-color: #ddd;\n margin-left: 25px;\n margin-top: -5px; }\n\n.styles_search-panel-whitespace__Luhwx {\n min-width: 40px; }\n");const A=["children","className","enabled","onClick","onKeyPress","wide"],V=()=>({}),I=e=>{if(void 0===e||v.default(e))return!0;const t=Object.keys(e);return 1===t.length||2===t.length&&t.includes("locationSlack")},R=e=>{let{children:t,className:n,enabled:i,onClick:o,onKeyPress:s,wide:a}=e,l=k(e,A);return h.default.createElement("div",{className:N["itinerary-search-control"],style:{"--width":a?"47px":"40px"}},o&&i&&h.default.createElement("div",Object.assign({},l,{className:n,onClick:o,onKeyPress:s,role:"button",tabIndex:"0"}),t))},O=(e,t,n=!1)=>{const i=e.indexOf(t);return i>-1&&e.splice(i,1),n?e.map((e=>e>t?e-1:e)):e},M=e=>{const t=e&&(e.key||e.which||e.keyCode)||"";return!(!t||![13," ","Spacebar"].concat([32,"Enter"]).includes(t))&&(e.preventDefault(),!0)},j=e=>e&&e.address||e&&e.gps&&e.ready&&"Nykyinen sijainti"||"",F=e=>e&&!0===e.gps?"position":"location";"production"!==process.env.NODE_ENV&&(R.propTypes={children:_.default.node,className:_.default.string.isRequired,enabled:_.default.bool.isRequired,onClick:_.default.func.isRequired,onKeyPress:_.default.func.isRequired,wide:_.default.bool}),R.defaultProps={children:void 0,wide:!1};const L="production"!==process.env.NODE_ENV?_.default.shape({address:_.default.string,lat:_.default.number,lon:_.default.number,locationSlack:_.default.number}):{};class z extends h.default.Component{constructor(e){super(e),x(this,"storeReference",(e=>{this.setState((t=>({refs:[...t.refs,e]})))})),x(this,"handleFocusChange",(()=>{const{destination:e}=this.props;e&&e.lat||this.state.refs[1].focus()})),x(this,"updateViaPoints",(e=>{0!==e.length?this.props.updateViaPoints(e.filter((e=>!I(e)))):this.props.updateViaPoints([])})),x(this,"handleToggleViaPointSlackClick",(e=>{const{activeSlackInputs:t}=this.state;this.setState({activeSlackInputs:t.includes(e)?O(t,e):t.concat([e])})})),x(this,"handleViaPointSlackTimeSelected",((e,t)=>{this.props.addAnalyticsEvent&&this.props.addAnalyticsEvent({action:"EditViaPointStopDuration",category:"ItinerarySettings",name:e/60});const{viaPoints:n}=this.props;n[t].locationSlack=Number.parseInt(e,10),this.updateViaPoints(n)})),x(this,"handleViaPointLocationSelected",((e,t)=>{this.props.handleViaPointLocationSelected(e,t)})),x(this,"handleRemoveViaPointClick",(e=>{this.props.addAnalyticsEvent&&this.props.addAnalyticsEvent({action:"RemoveJourneyViaPoint",category:"ItinerarySettings",name:null});const{activeSlackInputs:t}=this.state,{viaPoints:n}=this.props;n.splice(e,1),this.setState({activeSlackInputs:O(t,e,!0)},(()=>this.updateViaPoints(n)))})),x(this,"handleAddViaPointClick",(()=>{this.props.addAnalyticsEvent&&this.props.addAnalyticsEvent({action:"AddJourneyViaPoint",category:"ItinerarySettings",name:"QuickSettingsButton"});const{viaPoints:e}=this.props;e.push({}),this.setState(this.state)})),x(this,"handleSwapOrderClick",(()=>{this.props.addAnalyticsEvent&&this.props.addAnalyticsEvent({action:"SwitchJourneyStartAndEndPointOrder",category:"ItinerarySettings",name:null});const{viaPoints:e}=this.props;e.reverse(),this.props.swapOrder()})),x(this,"getSlackDisplay",(e=>`${e/60} ${this.props.t("minute-short",{lng:this.props.lang})}`)),this.state={activeSlackInputs:[],refs:[]}}render(){const{origin:e,searchPanelText:t,searchContext:n,disableAutoFocus:i,viaPoints:o,originMobileLabel:a,destinationMobileLabel:l,fontWeights:r,onFocusChange:c,showSwapControl:p,showViapointControl:d,t:_,lang:v}=this.props,{activeSlackInputs:y}=this.state,m=(e=>{const t=[];for(let n=0;n<=9;n++){const i=10*n;t.push({displayName:`${i} ${e("minute-short")}`,value:60*i})}return t})(_),b=(e,t=0)=>e&&e.locationSlack||t,x=e=>y.includes(e);return h.default.createElement("div",{className:u.default(N["autosuggest-panel"],this.props.isMobile&&"small"),style:{"--color":`${this.props.color}`,"--font-weight-medium":r.medium}}," ",t?h.default.createElement("div",null,h.default.createElement("h1",{className:N["autosuggest-searchpanel-text"]}," ",t)):null,h.default.createElement("div",{className:N["origin-input-container"]},h.default.createElement(g.default,{appElement:this.props.appElement,icon:"mapMarker",id:"origin",autoFocus:!0!==i&&(!this.props.isMobile&&!e.lat),storeRef:this.storeReference,refPoint:this.props.refPoint,className:F(e),placeholder:this.props.originPlaceHolder,value:j(e),searchContext:n,getAutoSuggestIcons:this.props.getAutoSuggestIcons,onSelect:this.props.onSelect,onClear:this.props.onClear,focusChange:c||this.handleFocusChange,lang:this.props.lang,sources:this.props.sources,targets:this.props.targets,filterResults:this.props.filterResults,isMobile:this.props.isMobile,color:this.props.color,hoverColor:this.props.hoverColor,mobileLabel:a,fontWeights:this.props.fontWeights,modeSet:this.props.modeSet,modeIconColors:this.props.modeIconColors,showScroll:this.props.showScroll,isEmbedded:this.props.isEmbedded}),(p||d)&&h.default.createElement(R,{className:N.opposite,enabled:p,onClick:()=>this.handleSwapOrderClick(),onKeyPress:e=>M(e)&&this.handleSwapOrderClick(),"aria-label":_("swap-order-button-label",{lng:v})},h.default.createElement(f.default,{img:"opposite",color:this.props.color}))),0===o.length&&h.default.createElement("div",{className:N["rectangle-container"]},h.default.createElement("div",{className:N.rectangle})),h.default.createElement(s.ReactSortable,{className:N["viapoints-container"],list:o,handle:`.${N["viapoint-before"]}`,animation:200,disabled:o.length<=1,setList:e=>{const t=e.filter((e=>!I(e)));t.length>0&&this.props.updateViaPoints(t)}},o.map(((e,t)=>h.default.createElement("div",{className:u.default(N["viapoint-container"]),key:`viapoint-${t}`},h.default.createElement("div",{className:N["light-gray-background"]},h.default.createElement("div",{className:N.row},h.default.createElement("div",{className:N["viapoint-before"],style:o.length>1?{cursor:"move"}:{}},o.length>1&&h.default.createElement(f.default,{img:"ellipsis",rotate:90,color:this.props.color})),h.default.createElement("div",{className:`${N["viapoint-input-container"]} ${N[`viapoint-${t+1}`]}`},h.default.createElement(g.default,{appElement:this.props.appElement,icon:"mapMarker-via",id:"via-point",ariaLabel:_("via-point-index",{index:t+1,lng:v}),autoFocus:!0!==i&&!this.props.isMobile,placeholder:"via-point",className:"viapoint",searchContext:n,refPoint:this.props.refPoint,value:e&&e.address||"",onSelect:this.props.onSelect,onClear:this.props.onClear,handleViaPoints:e=>this.handleViaPointLocationSelected(e,t),lang:this.props.lang,sources:this.props.sources,targets:["Stops","Stations"],filterResults:this.props.filterResults,getAutoSuggestIcons:this.props.getAutoSuggestIcons,isMobile:this.props.isMobile,color:this.props.color,hoverColor:this.props.hoverColor,fontWeights:this.props.fontWeights,modeSet:this.props.modeSet,modeIconColors:this.props.modeIconColors,showScroll:this.props.showScroll})),this.props.showSlackControl&&h.default.createElement(R,{className:N["add-via-point-slack"],enabled:this.props.showViapointControl,onClick:()=>this.handleToggleViaPointSlackClick(t),onKeyPress:e=>M(e)&&this.handleToggleViaPointSlackClick(t),"aria-label":_(x(t)?"add-via-duration-button-label-open":"add-via-duration-button-label-close",{index:t+1,lng:v}),wide:!0},h.default.createElement(f.default,{img:"time",color:this.props.color}))),!x(t)&&o[t]&&o[t].locationSlack>0&&h.default.createElement("span",{className:N["viapoint-slack-time"]},`${_("viapoint-slack-amount",{lng:v})}: ${this.getSlackDisplay(o[t].locationSlack)}`),h.default.createElement("div",{className:u.default(N["input-viapoint-slack-container"],!x(t)&&"collapsed")},h.default.createElement("div",{className:N["select-wrapper"]},h.default.createElement(P,{id:`viapoint-slack-${t}`,label:_("viapoint-slack-amount",{lng:v}),options:m,value:b(o[t]),getDisplay:this.getSlackDisplay,viaPointIndex:t,icon:h.default.createElement("span",{className:`${N["combobox-icon"]} ${N["time-input-icon"]}`},h.default.createElement(f.default,{img:"time",color:this.props.color})),onSlackTimeSelected:this.handleViaPointSlackTimeSelected})))),h.default.createElement(R,{className:N["remove-via-point"],enabled:this.props.showViapointControl,onClick:()=>this.handleRemoveViaPointClick(t),onKeyPress:e=>M(e)&&this.handleRemoveViaPointClick(t),"aria-label":_("remove-via-button-label",{index:t+1,lng:v})},h.default.createElement(f.default,{img:"trash",color:this.props.color})))))),h.default.createElement("div",{className:N["destination-input-container"]},h.default.createElement(g.default,{appElement:this.props.appElement,icon:"mapMarker",id:"destination",autoFocus:!0!==i&&(!this.props.isMobile&&!Number.isNaN(e.lat)),storeRef:this.storeReference,placeholder:this.props.destinationPlaceHolder,className:F(this.props.destination),getAutoSuggestIcons:this.props.getAutoSuggestIcons,searchContext:n,onSelect:this.props.onSelect,onClear:this.props.onClear,refPoint:this.props.refPoint,value:j(this.props.destination),lang:this.props.lang,sources:this.props.sources,targets:this.props.targets,filterResults:this.props.filterResults,isMobile:this.props.isMobile,color:this.props.color,hoverColor:this.props.hoverColor,mobileLabel:l,fontWeights:this.props.fontWeights,modeSet:this.props.modeSet,modeIconColors:this.props.modeIconColors,showScroll:this.props.showScroll,isEmbedded:this.props.isEmbedded}),(p||d)&&h.default.createElement(R,{className:u.default(N["add-via-point"],N.more,o.length>4&&"collapsed"),enabled:d&&0===o.length,onClick:()=>this.handleAddViaPointClick(),onKeyPress:e=>M(e)&&this.handleAddViaPointClick(),"aria-label":_("add-via-button-label",{lng:v})},h.default.createElement(f.default,{img:"viapoint",width:1.25,height:1.375,color:this.props.color}))))}}x(z,"defaultProps",{origin:void 0,destination:void 0,viaPoints:[],originPlaceHolder:"give-origin",destinationPlaceHolder:"give-destination",swapOrder:void 0,updateViaPoints:()=>{},searchPanelText:void 0,sources:[],targets:[],filterResults:void 0,onClear:void 0,getAutoSuggestIcons:void 0,refPoint:void 0,addAnalyticsEvent:void 0,disableAutoFocus:!1,isMobile:!1,handleViaPointLocationSelected:void 0,color:"#007ac9",hoverColor:"#0062a1",originMobileLabel:null,destinationMobileLabel:null,modeSet:void 0,modeIconColors:void 0,fontWeights:{medium:500},showScroll:!1,onFocusChange:void 0,isEmbedded:!1,showSwapControl:!1,showViapointControl:!1,showSlackControl:!1}),"production"!==process.env.NODE_ENV&&(z.propTypes={appElement:_.default.string.isRequired,origin:L,destination:L,originPlaceHolder:_.default.string,destinationPlaceHolder:_.default.string,viaPoints:_.default.arrayOf(L),updateViaPoints:_.default.func,handleViaPointLocationSelected:_.default.func,swapOrder:_.default.func,searchPanelText:_.default.string,searchContext:_.default.shape({URL_PELIAS:_.default.string}).isRequired,onSelect:_.default.func.isRequired,onClear:_.default.func,addAnalyticsEvent:_.default.func,lang:_.default.string.isRequired,disableAutoFocus:_.default.bool,sources:_.default.arrayOf(_.default.string),targets:_.default.arrayOf(_.default.string),filterResults:_.default.func,isMobile:_.default.bool,color:_.default.string,hoverColor:_.default.string,originMobileLabel:_.default.string,destinationMobileLabel:_.default.string,refPoint:L,modeSet:_.default.string,modeIconColors:_.default.objectOf(_.default.string),getAutoSuggestIcons:_.default.objectOf(_.default.func),fontWeights:_.default.shape({medium:_.default.number}),showScroll:_.default.bool,onFocusChange:_.default.func,isEmbedded:_.default.bool,showSwapControl:_.default.bool,showViapointControl:_.default.bool,showSlackControl:_.default.bool,t:_.default.func.isRequired});const q=o.withTranslation()(z);e.default=e=>h.default.createElement(o.I18nextProvider,{i18n:C},h.default.createElement(q,e)),e.getEmptyViaPointPlaceHolder=V,Object.defineProperty(e,"__esModule",{value:!0})}));
2
2
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../node_modules/@babel/runtime/helpers/esm/typeof.js","../../../../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../../../../node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","../../../../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../../../../node_modules/style-inject/dist/style-inject.es.js","../src/helpers/Select.js","../src/helpers/translations.js","../src/index.js"],"sourcesContent":["function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nexport { _typeof as default };","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };","import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nexport { _defineProperty as default };","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose.js\";\nfunction _objectWithoutProperties(e, t) {\n if (null == e) return {};\n var o,\n r,\n i = objectWithoutPropertiesLoose(e, t);\n if (Object.getOwnPropertySymbols) {\n var n = Object.getOwnPropertySymbols(e);\n for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);\n }\n return i;\n}\nexport { _objectWithoutProperties as default };","function _objectWithoutPropertiesLoose(r, e) {\n if (null == r) return {};\n var t = {};\n for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n if (-1 !== e.indexOf(n)) continue;\n t[n] = r[n];\n }\n return t;\n}\nexport { _objectWithoutPropertiesLoose as default };","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import PropTypes from 'prop-types';\nimport React, { useState, useEffect, useRef, useLayoutEffect } from 'react';\nimport Autosuggest from 'react-autosuggest';\nimport styles from './select.scss';\n\nconst Select = ({\n value,\n getDisplay,\n options,\n onSlackTimeSelected,\n viaPointIndex,\n id,\n label,\n icon,\n}) => {\n const [displayValue, changeDisplayValue] = useState(getDisplay(value));\n const [open, changeOpen] = useState(false);\n useEffect(() => changeDisplayValue(getDisplay(value)), [value]);\n const scrollRef = useRef(null);\n const scrollIndex = Math.floor(value / 600);\n const elementHeight = 50;\n useLayoutEffect(() => {\n if (open && scrollRef.current) {\n scrollRef.current.scrollTop = elementHeight * scrollIndex;\n }\n }, [value, open]);\n\n const inputId = `${id}-input`;\n const labelId = `${id}-label`;\n\n const onInputChange = (_, { newValue, method }) => {\n switch (method) {\n case 'enter':\n case 'click':\n onSlackTimeSelected(newValue, viaPointIndex);\n break;\n case 'escape':\n changeDisplayValue(value);\n break;\n case 'up':\n case 'down':\n default:\n break;\n }\n };\n return (\n <label className={styles['combobox-container']} htmlFor={inputId}>\n <span className={styles['left-column']}>\n <span className={styles['combobox-label']} id={labelId}>\n {label}\n </span>\n <Autosuggest\n id={id}\n suggestions={options}\n getSuggestionValue={s => s.value}\n renderSuggestion={s => s.displayName}\n onSuggestionsFetchRequested={() => null}\n shouldRenderSuggestions={() => true}\n focusInputOnSuggestionClick={false}\n onSuggestionsClearRequested={() => null}\n inputProps={{\n value: displayValue,\n onChange: onInputChange,\n onFocus: () => {\n changeOpen(true);\n },\n onBlur: () => {\n changeOpen(false);\n },\n id: inputId,\n 'aria-labelledby': labelId,\n 'aria-autocomplete': 'none',\n readOnly: true,\n }}\n renderSuggestionsContainer={({ containerProps, children }) => {\n // set refs for autosuggest library and scrollbar positioning\n const { ref, ...otherRefs } = containerProps;\n const containerRef = elem => {\n if (elem) {\n scrollRef.current = elem;\n ref(elem);\n }\n };\n return (\n <div tabIndex=\"-1\" {...otherRefs} ref={containerRef}>\n {children}\n </div>\n );\n }}\n theme={styles}\n />\n </span>\n {icon}\n </label>\n );\n};\n\nSelect.propTypes = {\n value: PropTypes.number.isRequired,\n onSlackTimeSelected: PropTypes.func.isRequired,\n getDisplay: PropTypes.func.isRequired,\n options: PropTypes.arrayOf(\n PropTypes.shape({\n displayName: PropTypes.string.isRequired,\n value: PropTypes.number.isRequired,\n }).isRequired,\n ).isRequired,\n id: PropTypes.string.isRequired,\n label: PropTypes.node.isRequired,\n icon: PropTypes.node.isRequired,\n viaPointIndex: PropTypes.number.isRequired,\n};\n\nexport default Select;\n","const translations = {\n de: {\n 'add-via-button-label': 'Füge Zwischenziel hinzu',\n 'add-via-duration-button-label':\n 'Setze Umsteigezeit für Zwischenziel {{index}}',\n 'add-via-duration-button-label-close':\n 'Schließe Umsteigezeit-Auswahl für Zwischenziel {{index}}',\n 'add-via-duration-button-label-open':\n 'Öffne Umsteigezeit-Auswahl für Zwischenziel {{index}}',\n 'minute-short': 'min',\n 'remove-via-button-label': 'Entferne Zwischenziel {{index}}',\n 'swap-order-button-label': 'Tausche Start mit Ziel',\n 'via-point': 'Zwischenziel',\n 'via-point-index': 'Zwischenziel {{index}}',\n 'viapoint-slack-amount': 'Umsteigezeit',\n },\n en: {\n 'add-via-button-label': 'Add via point',\n 'add-via-duration-button-label': 'Set stop duration at via point {{index}}',\n 'add-via-duration-button-label-close':\n 'Close stop duration selector at via point {{index}}',\n 'add-via-duration-button-label-open':\n 'Open stop duration selector at via point {{index}}',\n 'minute-short': 'min',\n 'remove-via-button-label': 'Remove via point {{index}}',\n 'swap-order-button-label': 'Reverse origin and destination',\n 'via-point': 'Via point',\n 'via-point-index': 'Via point {{index}}',\n 'viapoint-slack-amount': 'Stop duration',\n },\n fi: {\n 'add-via-button-label': 'Lisää välipiste',\n 'add-via-duration-button-label':\n 'Aseta välipisteelle {{index}} pysähdyksen kesto',\n 'add-via-duration-button-label-close':\n 'Avaa välipisteen {{index}} pysähdyksen kesto valitsin',\n 'add-via-duration-button-label-open':\n 'Sulje välipisteen {{index}} pysähdyksen kesto valitsin',\n 'minute-short': 'min',\n 'remove-via-button-label': 'Poista välipiste {{index}}',\n 'swap-order-button-label': 'Käännä reitin suunta vastakkaiseksi',\n 'via-point': 'Välipiste',\n 'via-point-index': 'Välipiste {{index}}',\n 'viapoint-slack-amount': 'Pysähdyksen kesto',\n },\n pl: {\n 'add-via-button-label': 'Dodaj punkt pośredni',\n 'add-via-duration-button-label':\n 'Wybierz czas postoju dla punktu {{index}}',\n 'add-via-duration-button-label-close':\n 'Zamknij wybornik czasu postoju w punkcie {{index}}',\n 'add-via-duration-button-label-open':\n 'Otwórz wybornik czasu postoju w punkcie {{index}}',\n 'minute-short': 'min.',\n 'remove-via-button-label': 'Usuń punkt pośredni {{index}}',\n 'swap-order-button-label': 'Odwróć początek i cel',\n 'via-point': 'Punkt pośredni',\n 'via-point-index': 'Punkt pośredni {{index}}',\n 'viapoint-slack-amount': 'Czas postoju',\n },\n sv: {\n 'add-via-button-label': 'Lägg till viapunkt',\n 'add-via-duration-button-label':\n 'Ställ in varaktighet för viapunkten {{index}}',\n 'add-via-duration-button-label-close':\n 'Stäng väljaren för varaktighet vid via-punkten {{index}}',\n 'add-via-duration-button-label-open':\n 'Öppna väljaren för varaktighet vid via-punkten {{index}}',\n 'minute-short': 'min',\n 'remove-via-button-label': 'Ta bort viapunkt {{index}}',\n 'swap-order-button-label': 'Sväng ruttens riktning till den motsatta',\n 'via-point': 'Via punkt',\n 'via-point-index': 'Via punkt {{index}}',\n 'viapoint-slack-amount': 'Stoppets varaktighet',\n },\n};\n\nexport default translations;\n","/* eslint-disable import/no-extraneous-dependencies */\nimport cx from 'classnames';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport { ReactSortable } from 'react-sortablejs';\nimport i18next from 'i18next';\nimport DTAutoSuggest from '@digitransit-component/digitransit-component-autosuggest';\nimport Icon from '@digitransit-component/digitransit-component-icon';\nimport isEmpty from 'lodash/isEmpty';\nimport Select from './helpers/Select';\nimport translations from './helpers/translations';\nimport styles from './helpers/styles.scss';\n\nObject.keys(translations).forEach(lang =>\n i18next.addResourceBundle(lang, 'translation', translations[lang], true),\n);\n\nexport const getEmptyViaPointPlaceHolder = () => ({});\n\nconst isViaPointEmpty = viaPoint => {\n if (viaPoint === undefined || isEmpty(viaPoint)) {\n return true;\n }\n const keys = Object.keys(viaPoint);\n return (\n keys.length === 1 || (keys.length === 2 && keys.includes('locationSlack'))\n );\n};\n\nconst ItinerarySearchControl = ({\n children,\n className,\n enabled,\n onClick,\n onKeyPress,\n wide,\n ...rest\n}) => (\n <div\n className={styles['itinerary-search-control']}\n style={{ '--width': wide ? '47px' : '40px' }}\n >\n {onClick && enabled && (\n <div\n {...rest}\n className={className}\n onClick={onClick}\n onKeyPress={onKeyPress}\n role=\"button\"\n tabIndex=\"0\"\n >\n {children}\n </div>\n )}\n </div>\n);\n\nconst updateViaPointSlack = (\n activeViaPointSlacks,\n updatedViaPointIndex,\n viaPointRemoved = false,\n) => {\n const foundAtIndex = activeViaPointSlacks.indexOf(updatedViaPointIndex);\n if (foundAtIndex > -1) {\n activeViaPointSlacks.splice(foundAtIndex, 1);\n }\n return viaPointRemoved\n ? activeViaPointSlacks.map(value =>\n value > updatedViaPointIndex ? value - 1 : value,\n )\n : activeViaPointSlacks;\n};\n\nconst isKeyboardSelectionEvent = event => {\n const space = [13, ' ', 'Spacebar'];\n const enter = [32, 'Enter'];\n const key = (event && (event.key || event.which || event.keyCode)) || '';\n if (!key || !space.concat(enter).includes(key)) {\n return false;\n }\n event.preventDefault();\n return true;\n};\n\nconst value = location =>\n (location && location.address) ||\n (location && location.gps && location.ready && 'Nykyinen sijainti') ||\n '';\n\nconst getLocationType = location =>\n location && location.gps === true ? 'position' : 'location';\n\nconst getSlackTimeOptions = () => {\n const timeOptions = [];\n for (let i = 0; i <= 9; i++) {\n const valueInMinutes = i * 10;\n timeOptions.push({\n displayName: `${valueInMinutes} ${i18next.t('minute-short')}`,\n value: valueInMinutes * 60,\n });\n }\n return timeOptions;\n};\n\nItinerarySearchControl.propTypes = {\n children: PropTypes.node,\n className: PropTypes.string.isRequired,\n enabled: PropTypes.bool.isRequired,\n onClick: PropTypes.func.isRequired,\n onKeyPress: PropTypes.func.isRequired,\n wide: PropTypes.bool,\n};\n\nItinerarySearchControl.defaultProps = {\n children: undefined,\n wide: false,\n};\n\n/**\n * Panel that renders two DTAutosuggest search fields, including viapoint handling\n *\n * @example\n * const searchContext = {\n * isPeliasLocationAware: false // true / false does Let Pelias suggest based on current user location\n * minimalRegexp: undefined // used for testing min. regexp. For example: new RegExp('.{2,}'),\n * lineRegexp: undefined // identify searches for route numbers/labels: bus | train | metro. For example: new RegExp(\n * // '(^[0-9]+[a-z]?$|^[yuleapinkrtdz]$|(^m[12]?b?$))',\n * // 'i',\n * // ),\n * URL_PELIAS: '' // url for pelias searches\n * feedIDs: ['HSL', 'HSLLautta'] // FeedId's like [HSL, HSLLautta]\n * geocodingSources: ['oa','osm','nlsfi'] // sources for geocoding\n * geocodingSearchParams; {} // Searchparmas fro geocoding\n * getFavouriteLocations: () => ({}), // Function that returns array of favourite locations.\n * getFavouriteStops: () => ({}), // Function that returns array of favourite stops.\n * getLanguage: () => ({}), // Function that returns current language.\n * getFavouriteRoutes: () => ({}), // Function that returns array of favourite routes.\n * getPositions: () => ({}), // Function that returns user's geolocation.\n * getRoutesQuery: () => ({}), // Function that returns query for fetching routes.\n * getStopAndStationsQuery: () => ({}), // Function that fetches favourite stops and stations from graphql API.\n * getFavouriteRoutesQuery: () => ({}), // Function that returns query for fetching favourite routes.\n * getFavouriteVehicleRentalStations: () => ({}), // Function that returns favourite bike rental station.\n * getFavouriteVehicleRentalStationsQuery: () => ({}), // Function that returns query for fetching favourite bike rental stations.\n * startLocationWatch: () => ({}), // Function that locates users geolocation.\n * saveSearch: () => ({}), // Function that saves search to old searches store.\n * clearOldSearches: () => ({}), // Function that clears old searches store.\n * getFutureRoutes: () => ({}), // Function that return future routes\n * saveFutureRoute: () => ({}), // Function that saves a future route\n * clearFutureRoutes: () => ({}), // Function that clears future routes\n * };\n *\n * const origin = {\n * lat: 60.169196,\n * lon: 24.957674,\n * address: 'Aleksanterinkatu, Helsinki',\n * set: true,\n * ready: true,\n * }\n *\n * const destination = {\n * lat: 60.199093,\n * lon: 24.940536,\n * address: 'Opastinsilta 6, Helsinki',\n * set: true,\n * ready: true,\n * }\n * onSelect(item, id) {\n * return null; // Define what to do when a suggestion is being selected. None by default.\n * }\n * onClear(id) {\n * return null; // Define what to do when a suggestion is being selected. None by default.\n * }\n * const getAutoSuggestIcons: {\n * // Called for every city bike station rendered as a search suggestion. Should return the icon and\n * // color used for that station. Two icons are available, 'citybike-stop-digitransit' anditybike-stop-digitransit-secondary'.\n * citybikes: station => {\n * return ['citybike-stop-digitransit', '#f2b62d'];\n * }\n * }\n * const targets = ['Locations', 'Stops', 'Routes']; // Defines what you are searching. all available options are Locations, Stops, Routes, VehicleRentalStations, FutureRoutes, MapPosition and CurrentPosition. Leave empty to search all targets.\n * const sources = ['Favourite', 'History', 'Datasource'] // Defines where you are searching. all available are: Favourite, History (previously searched searches), and Datasource. Leave empty to use all sources.\n * <DTAutosuggestPanel\n * appElement={appElement} // Required. Root element's id. Needed for react-modal component.\n * origin={origin} // Selected origin point\n * destination={destination} // Selected destination point\n * originPlaceHolder={'Give origin'} // Optional Give string shown initially inside origin search field\n * destinationPlaceHolder={'Give destination'} // Optional Give string shown initally inside destination search field\n * initialViaPoints={[]} // Optional. If showViapointControl is set to true, pass initial via points to the panel. Currently no default implementation is given.\n * updateViaPoints={() => return []} // Optional. If showViapointControl is set to true, define how to update your via point list with this function. Currenlty no default implementation is given.\n * swapOrder={() => return null} // Optional. If showSwapControl is set to true, define how to swap order of your points (origin, destination, viapoints). Currently no default implementation is given.\n * searchContext={searchContext}\n * getAutoSuggestIcons={getAutoSuggestIcons}\n * onSelect={this.onSelect}\n * onClear={this.onClear}\n * lang=\"fi\" // Define language fi sv or en.\n * addAnalyticsEvent={null} // Optional. you can record an analytics event if you wish. if passed, component will pass an category, action, name parameters to addAnalyticsEvent\n * disableAutoFocus={false} // Optional. use this to disable autofocus completely from DTAutosuggestPanel\n * sources={sources}\n * targets={targets}\n * isMobile // Optional. Defaults to false. Whether to use mobile search.\n * originMobileLabel=\"Origin label\" // Optional. Custom label text for origin field on mobile.\n * destinationMobileLabel=\"Destination label\" // Optional. Custom label text for destination field on mobile.\n * handleFocusChange={() => {}} // Optional. If defined overrides default onFocusChange behaviour\n * showSwapControl={false} // Optional.\n * showViapointControl={false} // Optional.\n */\n\nconst locationShape = PropTypes.shape({\n address: PropTypes.string,\n lat: PropTypes.number,\n lon: PropTypes.number,\n locationSlack: PropTypes.number,\n});\n\nclass DTAutosuggestPanel extends React.Component {\n static propTypes = {\n appElement: PropTypes.string.isRequired,\n origin: locationShape,\n destination: locationShape,\n originPlaceHolder: PropTypes.string,\n destinationPlaceHolder: PropTypes.string,\n viaPoints: PropTypes.arrayOf(locationShape),\n updateViaPoints: PropTypes.func,\n handleViaPointLocationSelected: PropTypes.func,\n swapOrder: PropTypes.func,\n searchPanelText: PropTypes.string,\n searchContext: PropTypes.shape({\n URL_PELIAS: PropTypes.string,\n }).isRequired,\n onSelect: PropTypes.func.isRequired,\n onClear: PropTypes.func,\n addAnalyticsEvent: PropTypes.func,\n lang: PropTypes.string.isRequired,\n disableAutoFocus: PropTypes.bool,\n sources: PropTypes.arrayOf(PropTypes.string),\n targets: PropTypes.arrayOf(PropTypes.string),\n filterResults: PropTypes.func,\n isMobile: PropTypes.bool,\n color: PropTypes.string,\n hoverColor: PropTypes.string,\n originMobileLabel: PropTypes.string,\n destinationMobileLabel: PropTypes.string,\n refPoint: locationShape,\n modeSet: PropTypes.string,\n modeIconColors: PropTypes.objectOf(PropTypes.string),\n getAutoSuggestIcons: PropTypes.objectOf(PropTypes.func),\n fontWeights: PropTypes.shape({\n medium: PropTypes.number,\n }),\n showScroll: PropTypes.bool,\n onFocusChange: PropTypes.func,\n isEmbedded: PropTypes.bool,\n showSwapControl: PropTypes.bool,\n showViapointControl: PropTypes.bool,\n showSlackControl: PropTypes.bool,\n };\n\n static defaultProps = {\n origin: undefined,\n destination: undefined,\n viaPoints: [],\n originPlaceHolder: 'give-origin',\n destinationPlaceHolder: 'give-destination',\n swapOrder: undefined,\n updateViaPoints: () => {},\n searchPanelText: undefined,\n sources: [],\n targets: [],\n filterResults: undefined,\n onClear: undefined,\n getAutoSuggestIcons: undefined,\n refPoint: undefined,\n addAnalyticsEvent: undefined,\n disableAutoFocus: false,\n isMobile: false,\n handleViaPointLocationSelected: undefined,\n color: '#007ac9',\n hoverColor: '#0062a1',\n originMobileLabel: null,\n destinationMobileLabel: null,\n modeSet: undefined,\n modeIconColors: undefined,\n fontWeights: {\n medium: 500,\n },\n showScroll: false,\n onFocusChange: undefined,\n isEmbedded: false,\n showSwapControl: false,\n showViapointControl: false,\n showSlackControl: false,\n };\n\n constructor(props) {\n super(props);\n this.state = {\n activeSlackInputs: [],\n refs: [],\n };\n }\n\n storeReference = ref => {\n this.setState(prevState => ({ refs: [...prevState.refs, ref] }));\n };\n\n handleFocusChange = () => {\n const { destination } = this.props;\n if (!destination || !destination.lat) {\n this.state.refs[1].focus();\n }\n };\n\n updateViaPoints = viaPoints => {\n if (viaPoints.length === 0) {\n this.props.updateViaPoints([]);\n return;\n }\n this.props.updateViaPoints(viaPoints.filter(vp => !isViaPointEmpty(vp)));\n };\n\n handleToggleViaPointSlackClick = viaPointIndex => {\n const { activeSlackInputs } = this.state;\n this.setState({\n activeSlackInputs: activeSlackInputs.includes(viaPointIndex)\n ? updateViaPointSlack(activeSlackInputs, viaPointIndex)\n : activeSlackInputs.concat([viaPointIndex]),\n });\n };\n\n handleViaPointSlackTimeSelected = (slackTimeInSeconds, i) => {\n if (this.props.addAnalyticsEvent) {\n this.props.addAnalyticsEvent({\n action: 'EditViaPointStopDuration',\n category: 'ItinerarySettings',\n name: slackTimeInSeconds / 60,\n });\n }\n const { viaPoints } = this.props;\n viaPoints[i].locationSlack = Number.parseInt(slackTimeInSeconds, 10);\n this.updateViaPoints(viaPoints);\n };\n\n handleViaPointLocationSelected = (viaPointLocation, i) => {\n this.props.handleViaPointLocationSelected(viaPointLocation, i);\n };\n\n handleRemoveViaPointClick = viaPointIndex => {\n if (this.props.addAnalyticsEvent) {\n this.props.addAnalyticsEvent({\n action: 'RemoveJourneyViaPoint',\n category: 'ItinerarySettings',\n name: null,\n });\n }\n const { activeSlackInputs } = this.state;\n const { viaPoints } = this.props;\n viaPoints.splice(viaPointIndex, 1);\n this.setState(\n {\n activeSlackInputs: updateViaPointSlack(\n activeSlackInputs,\n viaPointIndex,\n true,\n ),\n },\n () => this.updateViaPoints(viaPoints),\n );\n };\n\n handleAddViaPointClick = () => {\n if (this.props.addAnalyticsEvent) {\n this.props.addAnalyticsEvent({\n action: 'AddJourneyViaPoint',\n category: 'ItinerarySettings',\n name: 'QuickSettingsButton',\n });\n }\n const { viaPoints } = this.props;\n viaPoints.push(getEmptyViaPointPlaceHolder());\n // We need to update the state so that placeHolder will show up in panel.\n // eslint-disable-next-line react/no-access-state-in-setstate\n this.setState(this.state);\n };\n\n handleSwapOrderClick = () => {\n if (this.props.addAnalyticsEvent) {\n this.props.addAnalyticsEvent({\n action: 'SwitchJourneyStartAndEndPointOrder',\n category: 'ItinerarySettings',\n name: null,\n });\n }\n const { viaPoints } = this.props;\n viaPoints.reverse();\n this.props.swapOrder();\n };\n\n getSlackDisplay = slackInSeconds =>\n `${slackInSeconds / 60} ${i18next.t('minute-short', {\n lng: this.props.lang,\n })}`;\n\n render() {\n const {\n origin,\n searchPanelText,\n searchContext,\n disableAutoFocus,\n viaPoints,\n originMobileLabel,\n destinationMobileLabel,\n fontWeights,\n onFocusChange,\n showSwapControl,\n showViapointControl,\n } = this.props;\n const lng = this.props.lang;\n const { activeSlackInputs } = this.state;\n const slackTime = getSlackTimeOptions();\n const defaultSlackTimeValue = 0;\n const getViaPointSlackTimeOrDefault = (\n viaPoint,\n defaultValue = defaultSlackTimeValue,\n ) => (viaPoint && viaPoint.locationSlack) || defaultValue;\n const isViaPointSlackTimeInputActive = index =>\n activeSlackInputs.includes(index);\n return (\n <div\n className={cx([\n styles['autosuggest-panel'],\n {\n small: this.props.isMobile,\n },\n ])}\n style={{\n '--color': `${this.props.color}`,\n '--font-weight-medium': fontWeights.medium,\n }}\n >\n {' '}\n {searchPanelText ? (\n <div>\n <h1 className={styles['autosuggest-searchpanel-text']}>\n {' '}\n {searchPanelText}\n </h1>\n </div>\n ) : null}\n <div className={styles['origin-input-container']}>\n <DTAutoSuggest\n appElement={this.props.appElement}\n icon=\"mapMarker\"\n id=\"origin\"\n autoFocus={\n disableAutoFocus === true\n ? false\n : !this.props.isMobile && !origin.lat\n }\n storeRef={this.storeReference}\n refPoint={this.props.refPoint}\n className={getLocationType(origin)}\n placeholder={this.props.originPlaceHolder}\n value={value(origin)}\n searchContext={searchContext}\n getAutoSuggestIcons={this.props.getAutoSuggestIcons}\n onSelect={this.props.onSelect}\n onClear={this.props.onClear}\n focusChange={onFocusChange || this.handleFocusChange}\n lang={this.props.lang}\n sources={this.props.sources}\n targets={this.props.targets}\n filterResults={this.props.filterResults}\n isMobile={this.props.isMobile}\n color={this.props.color}\n hoverColor={this.props.hoverColor}\n mobileLabel={originMobileLabel}\n fontWeights={this.props.fontWeights}\n modeSet={this.props.modeSet}\n modeIconColors={this.props.modeIconColors}\n showScroll={this.props.showScroll}\n isEmbedded={this.props.isEmbedded}\n />\n {(showSwapControl || showViapointControl) && (\n <ItinerarySearchControl\n className={styles.opposite}\n enabled={showSwapControl}\n onClick={() => this.handleSwapOrderClick()}\n onKeyPress={e =>\n isKeyboardSelectionEvent(e) && this.handleSwapOrderClick()\n }\n aria-label={i18next.t('swap-order-button-label', { lng })}\n >\n <Icon img=\"opposite\" color={this.props.color} />\n </ItinerarySearchControl>\n )}\n </div>\n {viaPoints.length === 0 && (\n <div className={styles['rectangle-container']}>\n <div className={styles.rectangle} />\n </div>\n )}\n <ReactSortable\n className={styles['viapoints-container']}\n list={viaPoints}\n handle={`.${styles['viapoint-before']}`}\n animation={200}\n disabled={viaPoints.length <= 1}\n setList={items => {\n const newViaPoints = items.filter(vp => !isViaPointEmpty(vp));\n if (newViaPoints.length > 0) {\n this.props.updateViaPoints(newViaPoints);\n }\n }}\n >\n {viaPoints.map((o, i) => (\n <div\n className={cx(styles['viapoint-container'])}\n key={`viapoint-${i}`} // eslint-disable-line\n >\n <div className={styles['light-gray-background']}>\n <div className={styles.row}>\n <div\n className={styles['viapoint-before']}\n style={viaPoints.length > 1 ? { cursor: 'move' } : {}}\n >\n {viaPoints.length > 1 && (\n <Icon\n img=\"ellipsis\"\n rotate={90}\n color={this.props.color}\n />\n )}\n </div>\n <div\n className={cx(\n `${styles['viapoint-input-container']} ${\n styles[`viapoint-${i + 1}`]\n }`,\n )}\n >\n <DTAutoSuggest\n appElement={this.props.appElement}\n icon=\"mapMarker-via\"\n id=\"via-point\"\n ariaLabel={i18next.t('via-point-index', {\n index: i + 1,\n lng,\n })}\n autoFocus={\n disableAutoFocus === true ? false : !this.props.isMobile\n }\n placeholder=\"via-point\"\n className=\"viapoint\"\n searchContext={searchContext}\n refPoint={this.props.refPoint}\n value={(o && o.address) || ''}\n onSelect={this.props.onSelect}\n onClear={this.props.onClear}\n handleViaPoints={item =>\n this.handleViaPointLocationSelected(item, i)\n }\n lang={this.props.lang}\n sources={this.props.sources}\n targets={['Stops', 'Stations']}\n filterResults={this.props.filterResults}\n getAutoSuggestIcons={this.props.getAutoSuggestIcons}\n isMobile={this.props.isMobile}\n color={this.props.color}\n hoverColor={this.props.hoverColor}\n fontWeights={this.props.fontWeights}\n modeSet={this.props.modeSet}\n modeIconColors={this.props.modeIconColors}\n showScroll={this.props.showScroll}\n />\n </div>\n {this.props.showSlackControl && (\n <ItinerarySearchControl\n className={styles['add-via-point-slack']}\n enabled={this.props.showViapointControl}\n onClick={() => this.handleToggleViaPointSlackClick(i)}\n onKeyPress={e =>\n isKeyboardSelectionEvent(e) &&\n this.handleToggleViaPointSlackClick(i)\n }\n aria-label={i18next.t(\n isViaPointSlackTimeInputActive(i)\n ? 'add-via-duration-button-label-open'\n : 'add-via-duration-button-label-close',\n { index: i + 1, lng },\n )}\n wide\n >\n <Icon img=\"time\" color={this.props.color} />\n </ItinerarySearchControl>\n )}\n </div>\n {!isViaPointSlackTimeInputActive(i) &&\n viaPoints[i] &&\n viaPoints[i].locationSlack > 0 && (\n <span\n className={styles['viapoint-slack-time']}\n >{`${i18next.t('viapoint-slack-amount', {\n lng,\n })}: ${this.getSlackDisplay(\n viaPoints[i].locationSlack,\n )}`}</span>\n )}\n <div\n className={cx(styles['input-viapoint-slack-container'], {\n collapsed: !isViaPointSlackTimeInputActive(i),\n })}\n >\n <div className={styles['select-wrapper']}>\n <Select\n id={`viapoint-slack-${i}`}\n label={i18next.t('viapoint-slack-amount', { lng })}\n options={slackTime}\n value={getViaPointSlackTimeOrDefault(viaPoints[i])}\n getDisplay={this.getSlackDisplay}\n viaPointIndex={i}\n icon={\n <span\n className={`${styles['combobox-icon']} ${styles['time-input-icon']}`}\n >\n <Icon img=\"time\" color={this.props.color} />\n </span>\n }\n onSlackTimeSelected={this.handleViaPointSlackTimeSelected}\n />\n </div>\n </div>\n </div>\n <ItinerarySearchControl\n className={styles['remove-via-point']}\n enabled={this.props.showViapointControl}\n onClick={() => this.handleRemoveViaPointClick(i)}\n onKeyPress={e =>\n isKeyboardSelectionEvent(e) &&\n this.handleRemoveViaPointClick(i)\n }\n aria-label={i18next.t('remove-via-button-label', {\n index: i + 1,\n lng,\n })}\n >\n <Icon img=\"trash\" color={this.props.color} />\n </ItinerarySearchControl>\n </div>\n ))}\n </ReactSortable>\n <div className={styles['destination-input-container']}>\n <DTAutoSuggest\n appElement={this.props.appElement}\n icon=\"mapMarker\"\n id=\"destination\"\n autoFocus={\n disableAutoFocus === true\n ? false\n : !this.props.isMobile && !Number.isNaN(origin.lat)\n }\n storeRef={this.storeReference}\n placeholder={this.props.destinationPlaceHolder}\n className={getLocationType(this.props.destination)}\n getAutoSuggestIcons={this.props.getAutoSuggestIcons}\n searchContext={searchContext}\n onSelect={this.props.onSelect}\n onClear={this.props.onClear}\n refPoint={this.props.refPoint}\n value={value(this.props.destination)}\n lang={this.props.lang}\n sources={this.props.sources}\n targets={this.props.targets}\n filterResults={this.props.filterResults}\n isMobile={this.props.isMobile}\n color={this.props.color}\n hoverColor={this.props.hoverColor}\n mobileLabel={destinationMobileLabel}\n fontWeights={this.props.fontWeights}\n modeSet={this.props.modeSet}\n modeIconColors={this.props.modeIconColors}\n showScroll={this.props.showScroll}\n isEmbedded={this.props.isEmbedded}\n />\n {(showSwapControl || showViapointControl) && (\n <ItinerarySearchControl\n className={cx(styles['add-via-point'], styles.more, {\n collapsed: viaPoints.length > 4,\n })}\n enabled={showViapointControl && viaPoints.length === 0}\n onClick={() => this.handleAddViaPointClick()}\n onKeyPress={e =>\n isKeyboardSelectionEvent(e) && this.handleAddViaPointClick()\n }\n aria-label={i18next.t('add-via-button-label', { lng })}\n >\n <Icon\n img=\"viapoint\"\n width={1.25}\n height={1.375}\n color={this.props.color}\n />\n </ItinerarySearchControl>\n )}\n </div>\n </div>\n );\n }\n}\n\nexport default DTAutosuggestPanel;\n"],"names":["_typeof","o","Symbol","iterator","constructor","prototype","toPropertyKey","t","i","r","e","toPrimitive","call","TypeError","String","Number","_defineProperty","Object","defineProperty","value","enumerable","configurable","writable","_objectWithoutProperties","n","hasOwnProperty","indexOf","objectWithoutPropertiesLoose","getOwnPropertySymbols","length","propertyIsEnumerable","styleInject","css","ref","insertAt","document","head","getElementsByTagName","style","createElement","type","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","Select","getDisplay","options","onSlackTimeSelected","viaPointIndex","id","label","icon","displayValue","changeDisplayValue","useState","open","changeOpen","useEffect","scrollRef","useRef","scrollIndex","Math","floor","useLayoutEffect","current","scrollTop","inputId","labelId","React","className","styles","htmlFor","Autosuggest","suggestions","getSuggestionValue","s","renderSuggestion","displayName","onSuggestionsFetchRequested","shouldRenderSuggestions","focusInputOnSuggestionClick","onSuggestionsClearRequested","inputProps","onChange","onInputChange","_","newValue","method","onFocus","onBlur","readOnly","renderSuggestionsContainer","containerProps","children","otherRefs","_excluded","assign","tabIndex","elem","theme","process","env","NODE_ENV","propTypes","PropTypes","number","isRequired","func","arrayOf","shape","string","node","translations","de","en","fi","pl","sv","keys","forEach","lang","i18next","addResourceBundle","getEmptyViaPointPlaceHolder","isViaPointEmpty","viaPoint","undefined","isEmpty","includes","ItinerarySearchControl","_ref","enabled","onClick","onKeyPress","wide","rest","role","updateViaPointSlack","activeViaPointSlacks","updatedViaPointIndex","viaPointRemoved","foundAtIndex","splice","map","isKeyboardSelectionEvent","event","key","which","keyCode","concat","preventDefault","location","address","gps","ready","getLocationType","bool","defaultProps","locationShape","lat","lon","locationSlack","DTAutosuggestPanel","Component","props","super","this","setState","prevState","refs","destination","state","focus","viaPoints","updateViaPoints","filter","vp","activeSlackInputs","slackTimeInSeconds","addAnalyticsEvent","action","category","name","parseInt","viaPointLocation","handleViaPointLocationSelected","push","reverse","swapOrder","slackInSeconds","lng","render","origin","searchPanelText","searchContext","disableAutoFocus","originMobileLabel","destinationMobileLabel","fontWeights","onFocusChange","showSwapControl","showViapointControl","slackTime","getSlackTimeOptions","timeOptions","valueInMinutes","getViaPointSlackTimeOrDefault","defaultValue","isViaPointSlackTimeInputActive","index","cx","isMobile","color","medium","DTAutoSuggest","appElement","autoFocus","storeRef","storeReference","refPoint","placeholder","originPlaceHolder","getAutoSuggestIcons","onSelect","onClear","focusChange","handleFocusChange","sources","targets","filterResults","hoverColor","mobileLabel","modeSet","modeIconColors","showScroll","isEmbedded","opposite","handleSwapOrderClick","Icon","img","rectangle","ReactSortable","list","handle","animation","disabled","setList","items","newViaPoints","row","cursor","rotate","ariaLabel","handleViaPoints","item","showSlackControl","handleToggleViaPointSlackClick","getSlackDisplay","handleViaPointSlackTimeSelected","handleRemoveViaPointClick","isNaN","destinationPlaceHolder","more","handleAddViaPointClick","width","height","URL_PELIAS","objectOf"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../node_modules/@babel/runtime/helpers/esm/typeof.js","../../../../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../../../../node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","../../../../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../../../../node_modules/style-inject/dist/style-inject.es.js","../src/helpers/Select.js","../src/helpers/translations.js","../src/helpers/i18n.js","../src/index.js"],"sourcesContent":["function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nexport { _typeof as default };","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };","import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nexport { _defineProperty as default };","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose.js\";\nfunction _objectWithoutProperties(e, t) {\n if (null == e) return {};\n var o,\n r,\n i = objectWithoutPropertiesLoose(e, t);\n if (Object.getOwnPropertySymbols) {\n var n = Object.getOwnPropertySymbols(e);\n for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);\n }\n return i;\n}\nexport { _objectWithoutProperties as default };","function _objectWithoutPropertiesLoose(r, e) {\n if (null == r) return {};\n var t = {};\n for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n if (-1 !== e.indexOf(n)) continue;\n t[n] = r[n];\n }\n return t;\n}\nexport { _objectWithoutPropertiesLoose as default };","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import PropTypes from 'prop-types';\nimport React, { useState, useEffect, useRef, useLayoutEffect } from 'react';\nimport Autosuggest from 'react-autosuggest';\nimport styles from './select.scss';\n\nconst Select = ({\n value,\n getDisplay,\n options,\n onSlackTimeSelected,\n viaPointIndex,\n id,\n label,\n icon,\n}) => {\n const [displayValue, changeDisplayValue] = useState(getDisplay(value));\n const [open, changeOpen] = useState(false);\n useEffect(() => changeDisplayValue(getDisplay(value)), [value]);\n const scrollRef = useRef(null);\n const scrollIndex = Math.floor(value / 600);\n const elementHeight = 50;\n useLayoutEffect(() => {\n if (open && scrollRef.current) {\n scrollRef.current.scrollTop = elementHeight * scrollIndex;\n }\n }, [value, open]);\n\n const inputId = `${id}-input`;\n const labelId = `${id}-label`;\n\n const onInputChange = (_, { newValue, method }) => {\n switch (method) {\n case 'enter':\n case 'click':\n onSlackTimeSelected(newValue, viaPointIndex);\n break;\n case 'escape':\n changeDisplayValue(value);\n break;\n case 'up':\n case 'down':\n default:\n break;\n }\n };\n return (\n <label className={styles['combobox-container']} htmlFor={inputId}>\n <span className={styles['left-column']}>\n <span className={styles['combobox-label']} id={labelId}>\n {label}\n </span>\n <Autosuggest\n id={id}\n suggestions={options}\n getSuggestionValue={s => s.value}\n renderSuggestion={s => s.displayName}\n onSuggestionsFetchRequested={() => null}\n shouldRenderSuggestions={() => true}\n focusInputOnSuggestionClick={false}\n onSuggestionsClearRequested={() => null}\n inputProps={{\n value: displayValue,\n onChange: onInputChange,\n onFocus: () => {\n changeOpen(true);\n },\n onBlur: () => {\n changeOpen(false);\n },\n id: inputId,\n 'aria-labelledby': labelId,\n 'aria-autocomplete': 'none',\n readOnly: true,\n }}\n renderSuggestionsContainer={({ containerProps, children }) => {\n // set refs for autosuggest library and scrollbar positioning\n const { ref, ...otherRefs } = containerProps;\n const containerRef = elem => {\n if (elem) {\n scrollRef.current = elem;\n ref(elem);\n }\n };\n return (\n <div tabIndex=\"-1\" {...otherRefs} ref={containerRef}>\n {children}\n </div>\n );\n }}\n theme={styles}\n />\n </span>\n {icon}\n </label>\n );\n};\n\nSelect.propTypes = {\n value: PropTypes.number.isRequired,\n onSlackTimeSelected: PropTypes.func.isRequired,\n getDisplay: PropTypes.func.isRequired,\n options: PropTypes.arrayOf(\n PropTypes.shape({\n displayName: PropTypes.string.isRequired,\n value: PropTypes.number.isRequired,\n }).isRequired,\n ).isRequired,\n id: PropTypes.string.isRequired,\n label: PropTypes.node.isRequired,\n icon: PropTypes.node.isRequired,\n viaPointIndex: PropTypes.number.isRequired,\n};\n\nexport default Select;\n","const translations = {\n de: {\n translation: {\n 'add-via-button-label': 'Füge Zwischenziel hinzu',\n 'add-via-duration-button-label':\n 'Setze Umsteigezeit für Zwischenziel {{index}}',\n 'add-via-duration-button-label-close':\n 'Schließe Umsteigezeit-Auswahl für Zwischenziel {{index}}',\n 'add-via-duration-button-label-open':\n 'Öffne Umsteigezeit-Auswahl für Zwischenziel {{index}}',\n 'minute-short': 'min',\n 'remove-via-button-label': 'Entferne Zwischenziel {{index}}',\n 'swap-order-button-label': 'Tausche Start mit Ziel',\n 'via-point': 'Zwischenziel',\n 'via-point-index': 'Zwischenziel {{index}}',\n 'viapoint-slack-amount': 'Umsteigezeit',\n },\n },\n en: {\n translation: {\n 'add-via-button-label': 'Add via point',\n 'add-via-duration-button-label':\n 'Set stop duration at via point {{index}}',\n 'add-via-duration-button-label-close':\n 'Close stop duration selector at via point {{index}}',\n 'add-via-duration-button-label-open':\n 'Open stop duration selector at via point {{index}}',\n 'minute-short': 'min',\n 'remove-via-button-label': 'Remove via point {{index}}',\n 'swap-order-button-label': 'Reverse origin and destination',\n 'via-point': 'Via point',\n 'via-point-index': 'Via point {{index}}',\n 'viapoint-slack-amount': 'Stop duration',\n },\n },\n fi: {\n translation: {\n 'add-via-button-label': 'Lisää välipiste',\n 'add-via-duration-button-label':\n 'Aseta välipisteelle {{index}} pysähdyksen kesto',\n 'add-via-duration-button-label-close':\n 'Avaa välipisteen {{index}} pysähdyksen kesto valitsin',\n 'add-via-duration-button-label-open':\n 'Sulje välipisteen {{index}} pysähdyksen kesto valitsin',\n 'minute-short': 'min',\n 'remove-via-button-label': 'Poista välipiste {{index}}',\n 'swap-order-button-label': 'Käännä reitin suunta vastakkaiseksi',\n 'via-point': 'Välipiste',\n 'via-point-index': 'Välipiste {{index}}',\n 'viapoint-slack-amount': 'Pysähdyksen kesto',\n },\n },\n pl: {\n translation: {\n 'add-via-button-label': 'Dodaj punkt pośredni',\n 'add-via-duration-button-label':\n 'Wybierz czas postoju dla punktu {{index}}',\n 'add-via-duration-button-label-close':\n 'Zamknij wybornik czasu postoju w punkcie {{index}}',\n 'add-via-duration-button-label-open':\n 'Otwórz wybornik czasu postoju w punkcie {{index}}',\n 'minute-short': 'min.',\n 'remove-via-button-label': 'Usuń punkt pośredni {{index}}',\n 'swap-order-button-label': 'Odwróć początek i cel',\n 'via-point': 'Punkt pośredni',\n 'via-point-index': 'Punkt pośredni {{index}}',\n 'viapoint-slack-amount': 'Czas postoju',\n },\n },\n sv: {\n translation: {\n 'add-via-button-label': 'Lägg till viapunkt',\n 'add-via-duration-button-label':\n 'Ställ in varaktighet för viapunkten {{index}}',\n 'add-via-duration-button-label-close':\n 'Stäng väljaren för varaktighet vid via-punkten {{index}}',\n 'add-via-duration-button-label-open':\n 'Öppna väljaren för varaktighet vid via-punkten {{index}}',\n 'minute-short': 'min',\n 'remove-via-button-label': 'Ta bort viapunkt {{index}}',\n 'swap-order-button-label': 'Sväng ruttens riktning till den motsatta',\n 'via-point': 'Via punkt',\n 'via-point-index': 'Via punkt {{index}}',\n 'viapoint-slack-amount': 'Stoppets varaktighet',\n },\n },\n};\n\nexport default translations;\n","import { createInstance } from 'i18next';\nimport translations from './translations';\n\nconst i18n = createInstance({\n fallbackLng: 'fi',\n // debug: true,\n resources: translations,\n defaultNS: 'translation',\n react: {\n useSuspense: true,\n },\n});\n\ni18n.init();\n\nexport default i18n;\n","/* eslint-disable import/no-extraneous-dependencies */\nimport cx from 'classnames';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport { I18nextProvider, withTranslation } from 'react-i18next';\nimport { ReactSortable } from 'react-sortablejs';\nimport DTAutoSuggest from '@digitransit-component/digitransit-component-autosuggest';\nimport Icon from '@digitransit-component/digitransit-component-icon';\nimport isEmpty from 'lodash/isEmpty';\nimport Select from './helpers/Select';\nimport i18n from './helpers/i18n';\nimport styles from './helpers/styles.scss';\n\nexport const getEmptyViaPointPlaceHolder = () => ({});\n\nconst isViaPointEmpty = viaPoint => {\n if (viaPoint === undefined || isEmpty(viaPoint)) {\n return true;\n }\n const keys = Object.keys(viaPoint);\n return (\n keys.length === 1 || (keys.length === 2 && keys.includes('locationSlack'))\n );\n};\n\nconst ItinerarySearchControl = ({\n children,\n className,\n enabled,\n onClick,\n onKeyPress,\n wide,\n ...rest\n}) => (\n <div\n className={styles['itinerary-search-control']}\n style={{ '--width': wide ? '47px' : '40px' }}\n >\n {onClick && enabled && (\n <div\n {...rest}\n className={className}\n onClick={onClick}\n onKeyPress={onKeyPress}\n role=\"button\"\n tabIndex=\"0\"\n >\n {children}\n </div>\n )}\n </div>\n);\n\nconst updateViaPointSlack = (\n activeViaPointSlacks,\n updatedViaPointIndex,\n viaPointRemoved = false,\n) => {\n const foundAtIndex = activeViaPointSlacks.indexOf(updatedViaPointIndex);\n if (foundAtIndex > -1) {\n activeViaPointSlacks.splice(foundAtIndex, 1);\n }\n return viaPointRemoved\n ? activeViaPointSlacks.map(value =>\n value > updatedViaPointIndex ? value - 1 : value,\n )\n : activeViaPointSlacks;\n};\n\nconst isKeyboardSelectionEvent = event => {\n const space = [13, ' ', 'Spacebar'];\n const enter = [32, 'Enter'];\n const key = (event && (event.key || event.which || event.keyCode)) || '';\n if (!key || !space.concat(enter).includes(key)) {\n return false;\n }\n event.preventDefault();\n return true;\n};\n\nconst value = location =>\n (location && location.address) ||\n (location && location.gps && location.ready && 'Nykyinen sijainti') ||\n '';\n\nconst getLocationType = location =>\n location && location.gps === true ? 'position' : 'location';\n\nconst getSlackTimeOptions = t => {\n const timeOptions = [];\n for (let i = 0; i <= 9; i++) {\n const valueInMinutes = i * 10;\n timeOptions.push({\n displayName: `${valueInMinutes} ${t('minute-short')}`,\n value: valueInMinutes * 60,\n });\n }\n return timeOptions;\n};\n\nItinerarySearchControl.propTypes = {\n children: PropTypes.node,\n className: PropTypes.string.isRequired,\n enabled: PropTypes.bool.isRequired,\n onClick: PropTypes.func.isRequired,\n onKeyPress: PropTypes.func.isRequired,\n wide: PropTypes.bool,\n};\n\nItinerarySearchControl.defaultProps = {\n children: undefined,\n wide: false,\n};\n\n/**\n * Panel that renders two DTAutosuggest search fields, including viapoint handling\n *\n * @example\n * const searchContext = {\n * isPeliasLocationAware: false // true / false does Let Pelias suggest based on current user location\n * minimalRegexp: undefined // used for testing min. regexp. For example: new RegExp('.{2,}'),\n * lineRegexp: undefined // identify searches for route numbers/labels: bus | train | metro. For example: new RegExp(\n * // '(^[0-9]+[a-z]?$|^[yuleapinkrtdz]$|(^m[12]?b?$))',\n * // 'i',\n * // ),\n * URL_PELIAS: '' // url for pelias searches\n * feedIDs: ['HSL', 'HSLLautta'] // FeedId's like [HSL, HSLLautta]\n * geocodingSources: ['oa','osm','nlsfi'] // sources for geocoding\n * geocodingSearchParams; {} // Searchparmas fro geocoding\n * getFavouriteLocations: () => ({}), // Function that returns array of favourite locations.\n * getFavouriteStops: () => ({}), // Function that returns array of favourite stops.\n * getLanguage: () => ({}), // Function that returns current language.\n * getFavouriteRoutes: () => ({}), // Function that returns array of favourite routes.\n * getPositions: () => ({}), // Function that returns user's geolocation.\n * getRoutesQuery: () => ({}), // Function that returns query for fetching routes.\n * getStopAndStationsQuery: () => ({}), // Function that fetches favourite stops and stations from graphql API.\n * getFavouriteRoutesQuery: () => ({}), // Function that returns query for fetching favourite routes.\n * getFavouriteVehicleRentalStations: () => ({}), // Function that returns favourite bike rental station.\n * getFavouriteVehicleRentalStationsQuery: () => ({}), // Function that returns query for fetching favourite bike rental stations.\n * startLocationWatch: () => ({}), // Function that locates users geolocation.\n * saveSearch: () => ({}), // Function that saves search to old searches store.\n * clearOldSearches: () => ({}), // Function that clears old searches store.\n * getFutureRoutes: () => ({}), // Function that return future routes\n * saveFutureRoute: () => ({}), // Function that saves a future route\n * clearFutureRoutes: () => ({}), // Function that clears future routes\n * };\n *\n * const origin = {\n * lat: 60.169196,\n * lon: 24.957674,\n * address: 'Aleksanterinkatu, Helsinki',\n * set: true,\n * ready: true,\n * }\n *\n * const destination = {\n * lat: 60.199093,\n * lon: 24.940536,\n * address: 'Opastinsilta 6, Helsinki',\n * set: true,\n * ready: true,\n * }\n * onSelect(item, id) {\n * return null; // Define what to do when a suggestion is being selected. None by default.\n * }\n * onClear(id) {\n * return null; // Define what to do when a suggestion is being selected. None by default.\n * }\n * const getAutoSuggestIcons: {\n * // Called for every city bike station rendered as a search suggestion. Should return the icon and\n * // color used for that station. Two icons are available, 'citybike-stop-digitransit' anditybike-stop-digitransit-secondary'.\n * citybikes: station => {\n * return ['citybike-stop-digitransit', '#f2b62d'];\n * }\n * }\n * const targets = ['Locations', 'Stops', 'Routes']; // Defines what you are searching. all available options are Locations, Stops, Routes, VehicleRentalStations, FutureRoutes, MapPosition and CurrentPosition. Leave empty to search all targets.\n * const sources = ['Favourite', 'History', 'Datasource'] // Defines where you are searching. all available are: Favourite, History (previously searched searches), and Datasource. Leave empty to use all sources.\n * <DTAutosuggestPanel\n * appElement={appElement} // Required. Root element's id. Needed for react-modal component.\n * origin={origin} // Selected origin point\n * destination={destination} // Selected destination point\n * originPlaceHolder={'Give origin'} // Optional Give string shown initially inside origin search field\n * destinationPlaceHolder={'Give destination'} // Optional Give string shown initally inside destination search field\n * initialViaPoints={[]} // Optional. If showViapointControl is set to true, pass initial via points to the panel. Currently no default implementation is given.\n * updateViaPoints={() => return []} // Optional. If showViapointControl is set to true, define how to update your via point list with this function. Currenlty no default implementation is given.\n * swapOrder={() => return null} // Optional. If showSwapControl is set to true, define how to swap order of your points (origin, destination, viapoints). Currently no default implementation is given.\n * searchContext={searchContext}\n * getAutoSuggestIcons={getAutoSuggestIcons}\n * onSelect={this.onSelect}\n * onClear={this.onClear}\n * lang=\"fi\" // Define language fi sv or en.\n * addAnalyticsEvent={null} // Optional. you can record an analytics event if you wish. if passed, component will pass an category, action, name parameters to addAnalyticsEvent\n * disableAutoFocus={false} // Optional. use this to disable autofocus completely from DTAutosuggestPanel\n * sources={sources}\n * targets={targets}\n * isMobile // Optional. Defaults to false. Whether to use mobile search.\n * originMobileLabel=\"Origin label\" // Optional. Custom label text for origin field on mobile.\n * destinationMobileLabel=\"Destination label\" // Optional. Custom label text for destination field on mobile.\n * handleFocusChange={() => {}} // Optional. If defined overrides default onFocusChange behaviour\n * showSwapControl={false} // Optional.\n * showViapointControl={false} // Optional.\n */\n\nconst locationShape = PropTypes.shape({\n address: PropTypes.string,\n lat: PropTypes.number,\n lon: PropTypes.number,\n locationSlack: PropTypes.number,\n});\n\nclass DTAutosuggestPanel extends React.Component {\n static propTypes = {\n appElement: PropTypes.string.isRequired,\n origin: locationShape,\n destination: locationShape,\n originPlaceHolder: PropTypes.string,\n destinationPlaceHolder: PropTypes.string,\n viaPoints: PropTypes.arrayOf(locationShape),\n updateViaPoints: PropTypes.func,\n handleViaPointLocationSelected: PropTypes.func,\n swapOrder: PropTypes.func,\n searchPanelText: PropTypes.string,\n searchContext: PropTypes.shape({\n URL_PELIAS: PropTypes.string,\n }).isRequired,\n onSelect: PropTypes.func.isRequired,\n onClear: PropTypes.func,\n addAnalyticsEvent: PropTypes.func,\n lang: PropTypes.string.isRequired,\n disableAutoFocus: PropTypes.bool,\n sources: PropTypes.arrayOf(PropTypes.string),\n targets: PropTypes.arrayOf(PropTypes.string),\n filterResults: PropTypes.func,\n isMobile: PropTypes.bool,\n color: PropTypes.string,\n hoverColor: PropTypes.string,\n originMobileLabel: PropTypes.string,\n destinationMobileLabel: PropTypes.string,\n refPoint: locationShape,\n modeSet: PropTypes.string,\n modeIconColors: PropTypes.objectOf(PropTypes.string),\n getAutoSuggestIcons: PropTypes.objectOf(PropTypes.func),\n fontWeights: PropTypes.shape({\n medium: PropTypes.number,\n }),\n showScroll: PropTypes.bool,\n onFocusChange: PropTypes.func,\n isEmbedded: PropTypes.bool,\n showSwapControl: PropTypes.bool,\n showViapointControl: PropTypes.bool,\n showSlackControl: PropTypes.bool,\n t: PropTypes.func.isRequired,\n };\n\n static defaultProps = {\n origin: undefined,\n destination: undefined,\n viaPoints: [],\n originPlaceHolder: 'give-origin',\n destinationPlaceHolder: 'give-destination',\n swapOrder: undefined,\n updateViaPoints: () => {},\n searchPanelText: undefined,\n sources: [],\n targets: [],\n filterResults: undefined,\n onClear: undefined,\n getAutoSuggestIcons: undefined,\n refPoint: undefined,\n addAnalyticsEvent: undefined,\n disableAutoFocus: false,\n isMobile: false,\n handleViaPointLocationSelected: undefined,\n color: '#007ac9',\n hoverColor: '#0062a1',\n originMobileLabel: null,\n destinationMobileLabel: null,\n modeSet: undefined,\n modeIconColors: undefined,\n fontWeights: {\n medium: 500,\n },\n showScroll: false,\n onFocusChange: undefined,\n isEmbedded: false,\n showSwapControl: false,\n showViapointControl: false,\n showSlackControl: false,\n };\n\n constructor(props) {\n super(props);\n this.state = {\n activeSlackInputs: [],\n refs: [],\n };\n }\n\n storeReference = ref => {\n this.setState(prevState => ({ refs: [...prevState.refs, ref] }));\n };\n\n handleFocusChange = () => {\n const { destination } = this.props;\n if (!destination || !destination.lat) {\n this.state.refs[1].focus();\n }\n };\n\n updateViaPoints = viaPoints => {\n if (viaPoints.length === 0) {\n this.props.updateViaPoints([]);\n return;\n }\n this.props.updateViaPoints(viaPoints.filter(vp => !isViaPointEmpty(vp)));\n };\n\n handleToggleViaPointSlackClick = viaPointIndex => {\n const { activeSlackInputs } = this.state;\n this.setState({\n activeSlackInputs: activeSlackInputs.includes(viaPointIndex)\n ? updateViaPointSlack(activeSlackInputs, viaPointIndex)\n : activeSlackInputs.concat([viaPointIndex]),\n });\n };\n\n handleViaPointSlackTimeSelected = (slackTimeInSeconds, i) => {\n if (this.props.addAnalyticsEvent) {\n this.props.addAnalyticsEvent({\n action: 'EditViaPointStopDuration',\n category: 'ItinerarySettings',\n name: slackTimeInSeconds / 60,\n });\n }\n const { viaPoints } = this.props;\n viaPoints[i].locationSlack = Number.parseInt(slackTimeInSeconds, 10);\n this.updateViaPoints(viaPoints);\n };\n\n handleViaPointLocationSelected = (viaPointLocation, i) => {\n this.props.handleViaPointLocationSelected(viaPointLocation, i);\n };\n\n handleRemoveViaPointClick = viaPointIndex => {\n if (this.props.addAnalyticsEvent) {\n this.props.addAnalyticsEvent({\n action: 'RemoveJourneyViaPoint',\n category: 'ItinerarySettings',\n name: null,\n });\n }\n const { activeSlackInputs } = this.state;\n const { viaPoints } = this.props;\n viaPoints.splice(viaPointIndex, 1);\n this.setState(\n {\n activeSlackInputs: updateViaPointSlack(\n activeSlackInputs,\n viaPointIndex,\n true,\n ),\n },\n () => this.updateViaPoints(viaPoints),\n );\n };\n\n handleAddViaPointClick = () => {\n if (this.props.addAnalyticsEvent) {\n this.props.addAnalyticsEvent({\n action: 'AddJourneyViaPoint',\n category: 'ItinerarySettings',\n name: 'QuickSettingsButton',\n });\n }\n const { viaPoints } = this.props;\n viaPoints.push(getEmptyViaPointPlaceHolder());\n // We need to update the state so that placeHolder will show up in panel.\n // eslint-disable-next-line react/no-access-state-in-setstate\n this.setState(this.state);\n };\n\n handleSwapOrderClick = () => {\n if (this.props.addAnalyticsEvent) {\n this.props.addAnalyticsEvent({\n action: 'SwitchJourneyStartAndEndPointOrder',\n category: 'ItinerarySettings',\n name: null,\n });\n }\n const { viaPoints } = this.props;\n viaPoints.reverse();\n this.props.swapOrder();\n };\n\n getSlackDisplay = slackInSeconds =>\n `${slackInSeconds / 60} ${this.props.t('minute-short', {\n lng: this.props.lang,\n })}`;\n\n render() {\n const {\n origin,\n searchPanelText,\n searchContext,\n disableAutoFocus,\n viaPoints,\n originMobileLabel,\n destinationMobileLabel,\n fontWeights,\n onFocusChange,\n showSwapControl,\n showViapointControl,\n t,\n lang: lng,\n } = this.props;\n const { activeSlackInputs } = this.state;\n const slackTime = getSlackTimeOptions(t);\n const defaultSlackTimeValue = 0;\n const getViaPointSlackTimeOrDefault = (\n viaPoint,\n defaultValue = defaultSlackTimeValue,\n ) => (viaPoint && viaPoint.locationSlack) || defaultValue;\n const isViaPointSlackTimeInputActive = index =>\n activeSlackInputs.includes(index);\n return (\n <div\n className={cx([\n styles['autosuggest-panel'],\n {\n small: this.props.isMobile,\n },\n ])}\n style={{\n '--color': `${this.props.color}`,\n '--font-weight-medium': fontWeights.medium,\n }}\n >\n {' '}\n {searchPanelText ? (\n <div>\n <h1 className={styles['autosuggest-searchpanel-text']}>\n {' '}\n {searchPanelText}\n </h1>\n </div>\n ) : null}\n <div className={styles['origin-input-container']}>\n <DTAutoSuggest\n appElement={this.props.appElement}\n icon=\"mapMarker\"\n id=\"origin\"\n autoFocus={\n disableAutoFocus === true\n ? false\n : !this.props.isMobile && !origin.lat\n }\n storeRef={this.storeReference}\n refPoint={this.props.refPoint}\n className={getLocationType(origin)}\n placeholder={this.props.originPlaceHolder}\n value={value(origin)}\n searchContext={searchContext}\n getAutoSuggestIcons={this.props.getAutoSuggestIcons}\n onSelect={this.props.onSelect}\n onClear={this.props.onClear}\n focusChange={onFocusChange || this.handleFocusChange}\n lang={this.props.lang}\n sources={this.props.sources}\n targets={this.props.targets}\n filterResults={this.props.filterResults}\n isMobile={this.props.isMobile}\n color={this.props.color}\n hoverColor={this.props.hoverColor}\n mobileLabel={originMobileLabel}\n fontWeights={this.props.fontWeights}\n modeSet={this.props.modeSet}\n modeIconColors={this.props.modeIconColors}\n showScroll={this.props.showScroll}\n isEmbedded={this.props.isEmbedded}\n />\n {(showSwapControl || showViapointControl) && (\n <ItinerarySearchControl\n className={styles.opposite}\n enabled={showSwapControl}\n onClick={() => this.handleSwapOrderClick()}\n onKeyPress={e =>\n isKeyboardSelectionEvent(e) && this.handleSwapOrderClick()\n }\n aria-label={t('swap-order-button-label', { lng })}\n >\n <Icon img=\"opposite\" color={this.props.color} />\n </ItinerarySearchControl>\n )}\n </div>\n {viaPoints.length === 0 && (\n <div className={styles['rectangle-container']}>\n <div className={styles.rectangle} />\n </div>\n )}\n <ReactSortable\n className={styles['viapoints-container']}\n list={viaPoints}\n handle={`.${styles['viapoint-before']}`}\n animation={200}\n disabled={viaPoints.length <= 1}\n setList={items => {\n const newViaPoints = items.filter(vp => !isViaPointEmpty(vp));\n if (newViaPoints.length > 0) {\n this.props.updateViaPoints(newViaPoints);\n }\n }}\n >\n {viaPoints.map((o, i) => (\n <div\n className={cx(styles['viapoint-container'])}\n key={`viapoint-${i}`} // eslint-disable-line\n >\n <div className={styles['light-gray-background']}>\n <div className={styles.row}>\n <div\n className={styles['viapoint-before']}\n style={viaPoints.length > 1 ? { cursor: 'move' } : {}}\n >\n {viaPoints.length > 1 && (\n <Icon\n img=\"ellipsis\"\n rotate={90}\n color={this.props.color}\n />\n )}\n </div>\n <div\n className={cx(\n `${styles['viapoint-input-container']} ${\n styles[`viapoint-${i + 1}`]\n }`,\n )}\n >\n <DTAutoSuggest\n appElement={this.props.appElement}\n icon=\"mapMarker-via\"\n id=\"via-point\"\n ariaLabel={t('via-point-index', {\n index: i + 1,\n lng,\n })}\n autoFocus={\n disableAutoFocus === true ? false : !this.props.isMobile\n }\n placeholder=\"via-point\"\n className=\"viapoint\"\n searchContext={searchContext}\n refPoint={this.props.refPoint}\n value={(o && o.address) || ''}\n onSelect={this.props.onSelect}\n onClear={this.props.onClear}\n handleViaPoints={item =>\n this.handleViaPointLocationSelected(item, i)\n }\n lang={this.props.lang}\n sources={this.props.sources}\n targets={['Stops', 'Stations']}\n filterResults={this.props.filterResults}\n getAutoSuggestIcons={this.props.getAutoSuggestIcons}\n isMobile={this.props.isMobile}\n color={this.props.color}\n hoverColor={this.props.hoverColor}\n fontWeights={this.props.fontWeights}\n modeSet={this.props.modeSet}\n modeIconColors={this.props.modeIconColors}\n showScroll={this.props.showScroll}\n />\n </div>\n {this.props.showSlackControl && (\n <ItinerarySearchControl\n className={styles['add-via-point-slack']}\n enabled={this.props.showViapointControl}\n onClick={() => this.handleToggleViaPointSlackClick(i)}\n onKeyPress={e =>\n isKeyboardSelectionEvent(e) &&\n this.handleToggleViaPointSlackClick(i)\n }\n aria-label={t(\n isViaPointSlackTimeInputActive(i)\n ? 'add-via-duration-button-label-open'\n : 'add-via-duration-button-label-close',\n { index: i + 1, lng },\n )}\n wide\n >\n <Icon img=\"time\" color={this.props.color} />\n </ItinerarySearchControl>\n )}\n </div>\n {!isViaPointSlackTimeInputActive(i) &&\n viaPoints[i] &&\n viaPoints[i].locationSlack > 0 && (\n <span className={styles['viapoint-slack-time']}>{`${t(\n 'viapoint-slack-amount',\n {\n lng,\n },\n )}: ${this.getSlackDisplay(\n viaPoints[i].locationSlack,\n )}`}</span>\n )}\n <div\n className={cx(styles['input-viapoint-slack-container'], {\n collapsed: !isViaPointSlackTimeInputActive(i),\n })}\n >\n <div className={styles['select-wrapper']}>\n <Select\n id={`viapoint-slack-${i}`}\n label={t('viapoint-slack-amount', { lng })}\n options={slackTime}\n value={getViaPointSlackTimeOrDefault(viaPoints[i])}\n getDisplay={this.getSlackDisplay}\n viaPointIndex={i}\n icon={\n <span\n className={`${styles['combobox-icon']} ${styles['time-input-icon']}`}\n >\n <Icon img=\"time\" color={this.props.color} />\n </span>\n }\n onSlackTimeSelected={this.handleViaPointSlackTimeSelected}\n />\n </div>\n </div>\n </div>\n <ItinerarySearchControl\n className={styles['remove-via-point']}\n enabled={this.props.showViapointControl}\n onClick={() => this.handleRemoveViaPointClick(i)}\n onKeyPress={e =>\n isKeyboardSelectionEvent(e) &&\n this.handleRemoveViaPointClick(i)\n }\n aria-label={t('remove-via-button-label', {\n index: i + 1,\n lng,\n })}\n >\n <Icon img=\"trash\" color={this.props.color} />\n </ItinerarySearchControl>\n </div>\n ))}\n </ReactSortable>\n <div className={styles['destination-input-container']}>\n <DTAutoSuggest\n appElement={this.props.appElement}\n icon=\"mapMarker\"\n id=\"destination\"\n autoFocus={\n disableAutoFocus === true\n ? false\n : !this.props.isMobile && !Number.isNaN(origin.lat)\n }\n storeRef={this.storeReference}\n placeholder={this.props.destinationPlaceHolder}\n className={getLocationType(this.props.destination)}\n getAutoSuggestIcons={this.props.getAutoSuggestIcons}\n searchContext={searchContext}\n onSelect={this.props.onSelect}\n onClear={this.props.onClear}\n refPoint={this.props.refPoint}\n value={value(this.props.destination)}\n lang={this.props.lang}\n sources={this.props.sources}\n targets={this.props.targets}\n filterResults={this.props.filterResults}\n isMobile={this.props.isMobile}\n color={this.props.color}\n hoverColor={this.props.hoverColor}\n mobileLabel={destinationMobileLabel}\n fontWeights={this.props.fontWeights}\n modeSet={this.props.modeSet}\n modeIconColors={this.props.modeIconColors}\n showScroll={this.props.showScroll}\n isEmbedded={this.props.isEmbedded}\n />\n {(showSwapControl || showViapointControl) && (\n <ItinerarySearchControl\n className={cx(styles['add-via-point'], styles.more, {\n collapsed: viaPoints.length > 4,\n })}\n enabled={showViapointControl && viaPoints.length === 0}\n onClick={() => this.handleAddViaPointClick()}\n onKeyPress={e =>\n isKeyboardSelectionEvent(e) && this.handleAddViaPointClick()\n }\n aria-label={t('add-via-button-label', { lng })}\n >\n <Icon\n img=\"viapoint\"\n width={1.25}\n height={1.375}\n color={this.props.color}\n />\n </ItinerarySearchControl>\n )}\n </div>\n </div>\n );\n }\n}\n\nconst DTAutosuggestPanelWithTranslation = withTranslation()(DTAutosuggestPanel);\n\nexport default props => {\n return (\n <I18nextProvider i18n={i18n}>\n <DTAutosuggestPanelWithTranslation {...props} />\n </I18nextProvider>\n );\n};\n"],"names":["_typeof","o","Symbol","iterator","constructor","prototype","toPropertyKey","t","i","r","e","toPrimitive","call","TypeError","String","Number","_defineProperty","Object","defineProperty","value","enumerable","configurable","writable","_objectWithoutProperties","n","hasOwnProperty","indexOf","objectWithoutPropertiesLoose","getOwnPropertySymbols","length","propertyIsEnumerable","styleInject","css","ref","insertAt","document","head","getElementsByTagName","style","createElement","type","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","Select","getDisplay","options","onSlackTimeSelected","viaPointIndex","id","label","icon","displayValue","changeDisplayValue","useState","open","changeOpen","useEffect","scrollRef","useRef","scrollIndex","Math","floor","useLayoutEffect","current","scrollTop","inputId","labelId","React","className","styles","htmlFor","Autosuggest","suggestions","getSuggestionValue","s","renderSuggestion","displayName","onSuggestionsFetchRequested","shouldRenderSuggestions","focusInputOnSuggestionClick","onSuggestionsClearRequested","inputProps","onChange","onInputChange","_","newValue","method","onFocus","onBlur","readOnly","renderSuggestionsContainer","containerProps","children","otherRefs","_excluded","assign","tabIndex","elem","theme","process","env","NODE_ENV","propTypes","PropTypes","number","isRequired","func","arrayOf","shape","string","node","i18n","createInstance","fallbackLng","resources","de","translation","en","fi","pl","sv","defaultNS","react","useSuspense","init","getEmptyViaPointPlaceHolder","isViaPointEmpty","viaPoint","undefined","isEmpty","keys","includes","ItinerarySearchControl","_ref","enabled","onClick","onKeyPress","wide","rest","role","updateViaPointSlack","activeViaPointSlacks","updatedViaPointIndex","viaPointRemoved","foundAtIndex","splice","map","isKeyboardSelectionEvent","event","key","which","keyCode","concat","preventDefault","location","address","gps","ready","getLocationType","bool","defaultProps","locationShape","lat","lon","locationSlack","DTAutosuggestPanel","Component","props","super","this","setState","prevState","refs","destination","state","focus","viaPoints","updateViaPoints","filter","vp","activeSlackInputs","slackTimeInSeconds","addAnalyticsEvent","action","category","name","parseInt","viaPointLocation","handleViaPointLocationSelected","push","reverse","swapOrder","slackInSeconds","lng","lang","render","origin","searchPanelText","searchContext","disableAutoFocus","originMobileLabel","destinationMobileLabel","fontWeights","onFocusChange","showSwapControl","showViapointControl","slackTime","timeOptions","valueInMinutes","getSlackTimeOptions","getViaPointSlackTimeOrDefault","defaultValue","isViaPointSlackTimeInputActive","index","cx","isMobile","color","medium","DTAutoSuggest","appElement","autoFocus","storeRef","storeReference","refPoint","placeholder","originPlaceHolder","getAutoSuggestIcons","onSelect","onClear","focusChange","handleFocusChange","sources","targets","filterResults","hoverColor","mobileLabel","modeSet","modeIconColors","showScroll","isEmbedded","opposite","handleSwapOrderClick","Icon","img","rectangle","ReactSortable","list","handle","animation","disabled","setList","items","newViaPoints","row","cursor","rotate","ariaLabel","handleViaPoints","item","showSlackControl","handleToggleViaPointSlackClick","getSlackDisplay","handleViaPointSlackTimeSelected","handleRemoveViaPointClick","isNaN","destinationPlaceHolder","more","handleAddViaPointClick","width","height","URL_PELIAS","objectOf","DTAutosuggestPanelWithTranslation","withTranslation","I18nextProvider"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@digitransit-component/digitransit-component-autosuggest-panel",
3
- "version": "6.0.1",
3
+ "version": "7.0.0",
4
4
  "description": "digitransit-component autosuggest-panel module",
5
5
  "main": "index.js",
6
6
  "files": [
@@ -28,7 +28,7 @@
28
28
  "author": "Digitransit Authors",
29
29
  "license": "(AGPL-3.0 OR EUPL-1.2)",
30
30
  "peerDependencies": {
31
- "@digitransit-component/digitransit-component-autosuggest": "^5.0.0",
31
+ "@digitransit-component/digitransit-component-autosuggest": "^6.0.0",
32
32
  "@digitransit-component/digitransit-component-icon": "^1.1.0",
33
33
  "@hsl-fi/sass": "^0.2.0",
34
34
  "classnames": "2.5.1",
@@ -39,7 +39,8 @@
39
39
  "react": "^16.13.0",
40
40
  "react-autosuggest": "^10.0.0",
41
41
  "react-autowhatever": "10.2.1",
42
+ "react-i18next": "^12.3.1",
42
43
  "react-sortablejs": "2.0.11"
43
44
  },
44
- "gitHead": "7c09b387f361416fbd953a2bfbda307129a7ad0b"
45
+ "gitHead": "8b4045b4d9eb4b1af001cbe4793e4412e11b094d"
45
46
  }