@digitransit-component/digitransit-component-autosuggest-panel 8.4.2 → 9.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.
@@ -0,0 +1,840 @@
1
+ (function (global, factory) {
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(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.js'), require('downshift'), require('i18next')) :
3
+ typeof define === 'function' && define.amd ? define(['exports', 'classnames', 'prop-types', 'react', 'react-i18next', 'react-sortablejs', '@digitransit-component/digitransit-component-autosuggest', '@digitransit-component/digitransit-component-icon', 'lodash/isEmpty.js', 'downshift', 'i18next'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["@digitransit-component/digitransit-component-autosuggest-panel"] = {}, global.cx, global.PropTypes, global.React, global.reactI18next, global.reactSortablejs, global.DTAutosuggest, global.Icon, global.isEmpty, global.downshift, global.i18next));
5
+ })(this, (function (exports, cx, PropTypes, React, reactI18next, reactSortablejs, DTAutoSuggest, Icon, isEmpty, downshift, i18next) { 'use strict';
6
+
7
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
8
+
9
+ var cx__default = /*#__PURE__*/_interopDefault(cx);
10
+ var PropTypes__default = /*#__PURE__*/_interopDefault(PropTypes);
11
+ var React__default = /*#__PURE__*/_interopDefault(React);
12
+ var DTAutoSuggest__default = /*#__PURE__*/_interopDefault(DTAutoSuggest);
13
+ var Icon__default = /*#__PURE__*/_interopDefault(Icon);
14
+ var isEmpty__default = /*#__PURE__*/_interopDefault(isEmpty);
15
+
16
+ function _typeof(o) {
17
+ "@babel/helpers - typeof";
18
+
19
+ return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
20
+ return typeof o;
21
+ } : function (o) {
22
+ return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
23
+ }, _typeof(o);
24
+ }
25
+
26
+ function toPrimitive(t, r) {
27
+ if ("object" != _typeof(t) || !t) return t;
28
+ var e = t[Symbol.toPrimitive];
29
+ if (void 0 !== e) {
30
+ var i = e.call(t, r);
31
+ if ("object" != _typeof(i)) return i;
32
+ throw new TypeError("@@toPrimitive must return a primitive value.");
33
+ }
34
+ return ("string" === r ? String : Number)(t);
35
+ }
36
+
37
+ function toPropertyKey(t) {
38
+ var i = toPrimitive(t, "string");
39
+ return "symbol" == _typeof(i) ? i : i + "";
40
+ }
41
+
42
+ function _defineProperty(e, r, t) {
43
+ return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
44
+ value: t,
45
+ enumerable: true,
46
+ configurable: true,
47
+ writable: true
48
+ }) : e[r] = t, e;
49
+ }
50
+
51
+ function _objectWithoutPropertiesLoose(r, e) {
52
+ if (null == r) return {};
53
+ var t = {};
54
+ for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
55
+ if (-1 !== e.indexOf(n)) continue;
56
+ t[n] = r[n];
57
+ }
58
+ return t;
59
+ }
60
+
61
+ function _objectWithoutProperties(e, t) {
62
+ if (null == e) return {};
63
+ var o,
64
+ r,
65
+ i = _objectWithoutPropertiesLoose(e, t);
66
+ if (Object.getOwnPropertySymbols) {
67
+ var n = Object.getOwnPropertySymbols(e);
68
+ for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);
69
+ }
70
+ return i;
71
+ }
72
+
73
+ function styleInject(css, ref) {
74
+ if ( ref === void 0 ) ref = {};
75
+ var insertAt = ref.insertAt;
76
+
77
+ if (!css || typeof document === 'undefined') { return; }
78
+
79
+ var head = document.head || document.getElementsByTagName('head')[0];
80
+ var style = document.createElement('style');
81
+ style.type = 'text/css';
82
+
83
+ if (insertAt === 'top') {
84
+ if (head.firstChild) {
85
+ head.insertBefore(style, head.firstChild);
86
+ } else {
87
+ head.appendChild(style);
88
+ }
89
+ } else {
90
+ head.appendChild(style);
91
+ }
92
+
93
+ if (style.styleSheet) {
94
+ style.styleSheet.cssText = css;
95
+ } else {
96
+ style.appendChild(document.createTextNode(css));
97
+ }
98
+ }
99
+
100
+ var css_248z$1 = ".select_combobox-container__l-gXK {\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}\n.select_combobox-container__l-gXK:focus-within {\n border-color: #007ac9;\n}\n.select_combobox-container__l-gXK .select_left-column__NCDpJ {\n display: flex;\n flex-direction: column;\n width: 100%;\n}\n\n.select_combobox-label__QYe0V {\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\n.select_container__U5yMR {\n position: relative;\n width: 100%;\n height: 100%;\n}\n.select_container__U5yMR > div {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n height: 100%;\n cursor: pointer;\n}\n.select_container__U5yMR .select_suggestion__7in7q {\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}\n.select_container__U5yMR .select_suggestionHighlighted__HV-5T {\n font-size: 15px;\n font-weight: 500;\n background: #f2f5f7;\n}\n.select_container__U5yMR .select_suggestionsContainerOpen__SzPE6 {\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: calc(100% + 4px);\n left: 0;\n width: 100%;\n list-style-type: none;\n padding: 0;\n margin: 0;\n}\n.select_container__U5yMR .select_suggestionsContainerOpen__SzPE6 ul {\n padding: 0;\n margin: 0;\n}\n.select_container__U5yMR .select_suggestionsContainerOpen__SzPE6 li:not(:last-child) {\n border-bottom: 1px solid #ddd;\n}\n.select_container__U5yMR .select_input__tiwn5 {\n appearance: none;\n margin: -4px 0 0 0;\n padding-left: 12px;\n border: none;\n height: 26px;\n}\n.select_container__U5yMR .select_input__tiwn5:focus {\n outline: none;\n border: none;\n box-shadow: none;\n background: #fff;\n}\n.select_container__U5yMR .select_input__tiwn5:read-only {\n cursor: pointer;\n background: #fff;\n}\n.select_container__U5yMR .select_input__tiwn5 {\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}";
101
+ var styles$1 = {"combobox-container":"select_combobox-container__l-gXK","left-column":"select_left-column__NCDpJ","combobox-label":"select_combobox-label__QYe0V","container":"select_container__U5yMR","suggestion":"select_suggestion__7in7q","suggestionHighlighted":"select_suggestionHighlighted__HV-5T","suggestionsContainerOpen":"select_suggestionsContainerOpen__SzPE6","input":"select_input__tiwn5"};
102
+ styleInject(css_248z$1);
103
+
104
+ const Select = ({
105
+ value,
106
+ options,
107
+ onSlackTimeSelected,
108
+ viaPointIndex,
109
+ id,
110
+ label,
111
+ icon
112
+ }) => {
113
+ const labelId = `${id}-label`;
114
+ const selectedItem = options.find(option => option.value === value);
115
+ const {
116
+ isOpen,
117
+ getToggleButtonProps,
118
+ getMenuProps,
119
+ getItemProps,
120
+ getLabelProps,
121
+ highlightedIndex
122
+ } = downshift.useSelect({
123
+ selectedItem,
124
+ items: options,
125
+ labelId,
126
+ id,
127
+ itemToString: item => item.displayName,
128
+ onSelectedItemChange: ({
129
+ selectedItem: newItem
130
+ }) => {
131
+ onSlackTimeSelected(newItem.value, viaPointIndex);
132
+ }
133
+ });
134
+ return /*#__PURE__*/React__default.default.createElement("div", {
135
+ className: styles$1['combobox-container']
136
+ }, /*#__PURE__*/React__default.default.createElement("div", {
137
+ className: styles$1.container
138
+ }, /*#__PURE__*/React__default.default.createElement("div", getToggleButtonProps(), /*#__PURE__*/React__default.default.createElement("span", {
139
+ className: styles$1['left-column']
140
+ }, /*#__PURE__*/React__default.default.createElement("label", Object.assign({}, getLabelProps(), {
141
+ className: styles$1['combobox-label']
142
+ }), label), /*#__PURE__*/React__default.default.createElement("div", {
143
+ className: styles$1.input
144
+ }, /*#__PURE__*/React__default.default.createElement("span", null, selectedItem.displayName))), icon), /*#__PURE__*/React__default.default.createElement("ul", Object.assign({
145
+ className: cx__default.default(styles$1.suggestionsContainerOpen, !isOpen && 'hidden')
146
+ }, getMenuProps()), isOpen && options.map((option, index) => /*#__PURE__*/React__default.default.createElement("li", Object.assign({
147
+ key: option.value,
148
+ className: cx__default.default(styles$1.suggestion, index === highlightedIndex && styles$1.suggestionHighlighted)
149
+ }, getItemProps({
150
+ index
151
+ })), /*#__PURE__*/React__default.default.createElement("span", null, option.displayName))))));
152
+ };
153
+ process.env.NODE_ENV !== "production" ? Select.propTypes = {
154
+ value: PropTypes__default.default.number.isRequired,
155
+ onSlackTimeSelected: PropTypes__default.default.func.isRequired,
156
+ options: PropTypes__default.default.arrayOf(PropTypes__default.default.shape({
157
+ displayName: PropTypes__default.default.string.isRequired,
158
+ value: PropTypes__default.default.number.isRequired
159
+ }).isRequired).isRequired,
160
+ id: PropTypes__default.default.string.isRequired,
161
+ label: PropTypes__default.default.node.isRequired,
162
+ icon: PropTypes__default.default.node.isRequired,
163
+ viaPointIndex: PropTypes__default.default.number.isRequired
164
+ } : void 0;
165
+
166
+ const translations = {
167
+ de: {
168
+ translation: {
169
+ 'add-via-button-label': 'Füge Zwischenziel hinzu',
170
+ 'add-via-duration-button-label': 'Setze Umsteigezeit für Zwischenziel {{index}}',
171
+ 'add-via-duration-button-label-close': 'Schließe Umsteigezeit-Auswahl für Zwischenziel {{index}}',
172
+ 'add-via-duration-button-label-open': 'Öffne Umsteigezeit-Auswahl für Zwischenziel {{index}}',
173
+ 'minute-short': 'min',
174
+ 'remove-via-button-label': 'Entferne Zwischenziel {{index}}',
175
+ 'swap-order-button-label': 'Tausche Start mit Ziel',
176
+ 'via-point': 'Zwischenziel',
177
+ 'via-point-index': 'Zwischenziel {{index}}',
178
+ 'viapoint-slack-amount': 'Umsteigezeit'
179
+ }
180
+ },
181
+ en: {
182
+ translation: {
183
+ 'add-via-button-label': 'Add via point',
184
+ 'add-via-duration-button-label': 'Set stop duration at via point {{index}}',
185
+ 'add-via-duration-button-label-close': 'Close stop duration selector at via point {{index}}',
186
+ 'add-via-duration-button-label-open': 'Open stop duration selector at via point {{index}}',
187
+ 'minute-short': 'min',
188
+ 'remove-via-button-label': 'Remove via point {{index}}',
189
+ 'swap-order-button-label': 'Reverse origin and destination',
190
+ 'via-point': 'Via point',
191
+ 'via-point-index': 'Via point {{index}}',
192
+ 'viapoint-slack-amount': 'Stop duration'
193
+ }
194
+ },
195
+ fi: {
196
+ translation: {
197
+ 'add-via-button-label': 'Lisää välipiste',
198
+ 'add-via-duration-button-label': 'Aseta välipisteelle {{index}} pysähdyksen kesto',
199
+ 'add-via-duration-button-label-close': 'Avaa välipisteen {{index}} pysähdyksen kesto valitsin',
200
+ 'add-via-duration-button-label-open': 'Sulje välipisteen {{index}} pysähdyksen kesto valitsin',
201
+ 'minute-short': 'min',
202
+ 'remove-via-button-label': 'Poista välipiste {{index}}',
203
+ 'swap-order-button-label': 'Käännä reitin suunta vastakkaiseksi',
204
+ 'via-point': 'Välipiste',
205
+ 'via-point-index': 'Välipiste {{index}}',
206
+ 'viapoint-slack-amount': 'Pysähdyksen kesto'
207
+ }
208
+ },
209
+ pl: {
210
+ translation: {
211
+ 'add-via-button-label': 'Dodaj punkt pośredni',
212
+ 'add-via-duration-button-label': 'Wybierz czas postoju dla punktu {{index}}',
213
+ 'add-via-duration-button-label-close': 'Zamknij wybornik czasu postoju w punkcie {{index}}',
214
+ 'add-via-duration-button-label-open': 'Otwórz wybornik czasu postoju w punkcie {{index}}',
215
+ 'minute-short': 'min.',
216
+ 'remove-via-button-label': 'Usuń punkt pośredni {{index}}',
217
+ 'swap-order-button-label': 'Odwróć początek i cel',
218
+ 'via-point': 'Punkt pośredni',
219
+ 'via-point-index': 'Punkt pośredni {{index}}',
220
+ 'viapoint-slack-amount': 'Czas postoju'
221
+ }
222
+ },
223
+ sv: {
224
+ translation: {
225
+ 'add-via-button-label': 'Lägg till viapunkt',
226
+ 'add-via-duration-button-label': 'Ställ in varaktighet för viapunkten {{index}}',
227
+ 'add-via-duration-button-label-close': 'Stäng väljaren för varaktighet vid via-punkten {{index}}',
228
+ 'add-via-duration-button-label-open': 'Öppna väljaren för varaktighet vid via-punkten {{index}}',
229
+ 'minute-short': 'min',
230
+ 'remove-via-button-label': 'Ta bort viapunkt {{index}}',
231
+ 'swap-order-button-label': 'Sväng ruttens riktning till den motsatta',
232
+ 'via-point': 'Via punkt',
233
+ 'via-point-index': 'Via punkt {{index}}',
234
+ 'viapoint-slack-amount': 'Stoppets varaktighet'
235
+ }
236
+ }
237
+ };
238
+
239
+ const i18n = i18next.createInstance({
240
+ fallbackLng: 'fi',
241
+ // debug: true,
242
+ resources: translations,
243
+ defaultNS: 'translation',
244
+ react: {
245
+ useSuspense: true
246
+ }
247
+ });
248
+ i18n.init();
249
+
250
+ var css_248z = ".styles_autosuggest-panel__GEaoJ {\n width: 100%;\n}\n\n.styles_autosuggest-searchpanel-text__7O850 {\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}\n@media screen and (min-width: 768px) {\n .styles_autosuggest-searchpanel-text__7O850 {\n letter-spacing: -0.8px;\n line-height: 27px;\n margin-bottom: 21px;\n }\n}\n\n.styles_origin-input-container__yfozN,\n.styles_destination-input-container__kJPky {\n display: flex;\n flex: 1 0 100%;\n}\n.styles_origin-input-container__yfozN input[type=text],\n.styles_destination-input-container__kJPky input[type=text] {\n margin: 0;\n}\n\n.styles_row__MvzsR {\n display: flex;\n flex-direction: row;\n}\n\n.styles_viapoints-container__fukkW {\n display: flex;\n flex-direction: column;\n}\n.styles_viapoints-container__fukkW .styles_viapoint-container__O-xAE {\n display: flex;\n flex: 1 0 100%;\n min-height: 50px;\n}\n.styles_viapoints-container__fukkW .styles_viapoint-container__O-xAE:first-child {\n margin-top: 6px;\n}\n.styles_viapoints-container__fukkW .styles_viapoint-container__O-xAE:not(:first-child) {\n margin-top: 3px;\n}\n.styles_viapoints-container__fukkW .styles_viapoint-container__O-xAE:last-child {\n margin-bottom: 6px;\n}\n.styles_viapoints-container__fukkW .styles_viapoint-container__O-xAE .styles_light-gray-background__0vkzM {\n display: flex;\n padding: 3px 0;\n flex-direction: column;\n background: #f2f5f7;\n border-radius: 5px;\n width: 100%;\n}\n.styles_viapoints-container__fukkW .styles_viapoint-container__O-xAE .styles_light-gray-background__0vkzM .styles_viapoint-before__J1O3f {\n display: flex;\n min-width: 27px;\n justify-content: center;\n align-items: center;\n}\n.styles_viapoints-container__fukkW .styles_viapoint-container__O-xAE .styles_light-gray-background__0vkzM .styles_viapoint-before__J1O3f svg {\n fill: #888;\n height: 20px;\n}\n.styles_viapoints-container__fukkW .styles_viapoint-container__O-xAE .styles_light-gray-background__0vkzM .styles_viapoint-input-container__fEQi9 {\n display: flex;\n align-items: center;\n width: 100%;\n}\n.styles_viapoints-container__fukkW .styles_viapoint-container__O-xAE .styles_light-gray-background__0vkzM .styles_viapoint-input-container__fEQi9 input[type=text] {\n margin: 0;\n}\n.styles_viapoints-container__fukkW .styles_viapoint-container__O-xAE .styles_light-gray-background__0vkzM .styles_viapoint-input-container__fEQi9.styles_viapoint-1__s2wSB > div.styles_viapoint__UnOwm {\n z-index: 15;\n}\n.styles_viapoints-container__fukkW .styles_viapoint-container__O-xAE .styles_light-gray-background__0vkzM .styles_viapoint-input-container__fEQi9.styles_viapoint-2__JNsq8 > div.styles_viapoint__UnOwm {\n z-index: 14;\n}\n.styles_viapoints-container__fukkW .styles_viapoint-container__O-xAE .styles_light-gray-background__0vkzM .styles_viapoint-input-container__fEQi9.styles_viapoint-3__tv7Qy > div.styles_viapoint__UnOwm {\n z-index: 13;\n}\n.styles_viapoints-container__fukkW .styles_viapoint-container__O-xAE .styles_light-gray-background__0vkzM .styles_viapoint-input-container__fEQi9.styles_viapoint-4__v0tfs > div.styles_viapoint__UnOwm {\n z-index: 12;\n}\n.styles_viapoints-container__fukkW .styles_viapoint-container__O-xAE .styles_light-gray-background__0vkzM .styles_viapoint-input-container__fEQi9.styles_viapoint-5__luT-- > div.styles_viapoint__UnOwm {\n z-index: 11;\n}\n\n.styles_viapoint-slack-time__dV527 {\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\n.styles_select-wrapper__zaWty {\n display: flex;\n height: 50px;\n margin-top: 9px;\n padding-left: 27px;\n padding-right: 47px;\n}\n\n.styles_via-point-button-container__kUBm7 {\n display: flex;\n}\n.styles_via-point-button-container__kUBm7 > div:nth-child(1) {\n order: 1;\n border-left: none;\n}\n.styles_via-point-button-container__kUBm7 > div:nth-child(2) {\n order: 2;\n border-left: 1px solid rgba(151, 151, 151, 0.2);\n}\n\n.styles_input-viapoint-slack-container__-LDqu {\n display: flex;\n flex-direction: column;\n}\n\n.styles_itinerary-search-control__1KyCb {\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}\n.styles_itinerary-search-control__1KyCb + .styles_itinerary-search-control__1KyCb {\n border-left: 1px solid rgba(151, 151, 151, 0.2);\n}\n.styles_itinerary-search-control__1KyCb .styles_opposite__BE7K1 {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n min-width: 40px;\n cursor: pointer;\n}\n.styles_itinerary-search-control__1KyCb .styles_opposite__BE7K1 svg {\n width: 19px;\n height: 17px;\n}\n.styles_itinerary-search-control__1KyCb .styles_add-via-point__7E6zU {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n min-width: 40px;\n cursor: pointer;\n}\n.styles_itinerary-search-control__1KyCb .styles_add-via-point__7E6zU svg {\n width: 20px;\n height: 22px;\n}\n.styles_itinerary-search-control__1KyCb .styles_add-via-point-slack__kddhr {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n min-width: 47px;\n cursor: pointer;\n}\n.styles_itinerary-search-control__1KyCb .styles_add-via-point-slack__kddhr svg {\n width: 18px;\n height: 19px;\n}\n.styles_itinerary-search-control__1KyCb .styles_remove-via-point__1oWx- {\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}\n.styles_itinerary-search-control__1KyCb .styles_remove-via-point__1oWx- svg {\n width: 14px;\n height: 14px;\n}\n\n.styles_combobox-icon__fhYvA {\n color: var(--color);\n border-left: solid #888 1px;\n height: 35px;\n}\n.styles_combobox-icon__fhYvA.styles_time-input-icon__L2TcV {\n padding: 9px 13px 0 13px;\n}\n.styles_combobox-icon__fhYvA.styles_time-input-icon__L2TcV svg {\n width: 18px;\n height: 19px;\n}\n\n.styles_rectangle-container__4Vtuo {\n display: block;\n position: relative;\n height: 9px;\n z-index: 19;\n}\n.styles_rectangle-container__4Vtuo .styles_rectangle__s-y7y {\n position: absolute;\n width: 4px;\n height: 25px;\n border-radius: 2px;\n background-color: #ddd;\n margin-left: 25px;\n margin-top: -9px;\n}\n\n.styles_search-panel-whitespace__RefGL {\n min-width: 40px;\n}";
251
+ var styles = {"autosuggest-panel":"styles_autosuggest-panel__GEaoJ","autosuggest-searchpanel-text":"styles_autosuggest-searchpanel-text__7O850","origin-input-container":"styles_origin-input-container__yfozN","destination-input-container":"styles_destination-input-container__kJPky","row":"styles_row__MvzsR","viapoints-container":"styles_viapoints-container__fukkW","viapoint-container":"styles_viapoint-container__O-xAE","light-gray-background":"styles_light-gray-background__0vkzM","viapoint-before":"styles_viapoint-before__J1O3f","viapoint-input-container":"styles_viapoint-input-container__fEQi9","viapoint-1":"styles_viapoint-1__s2wSB","viapoint":"styles_viapoint__UnOwm","viapoint-2":"styles_viapoint-2__JNsq8","viapoint-3":"styles_viapoint-3__tv7Qy","viapoint-4":"styles_viapoint-4__v0tfs","viapoint-5":"styles_viapoint-5__luT--","viapoint-slack-time":"styles_viapoint-slack-time__dV527","select-wrapper":"styles_select-wrapper__zaWty","via-point-button-container":"styles_via-point-button-container__kUBm7","input-viapoint-slack-container":"styles_input-viapoint-slack-container__-LDqu","itinerary-search-control":"styles_itinerary-search-control__1KyCb","opposite":"styles_opposite__BE7K1","add-via-point":"styles_add-via-point__7E6zU","add-via-point-slack":"styles_add-via-point-slack__kddhr","remove-via-point":"styles_remove-via-point__1oWx-","combobox-icon":"styles_combobox-icon__fhYvA","time-input-icon":"styles_time-input-icon__L2TcV","rectangle-container":"styles_rectangle-container__4Vtuo","rectangle":"styles_rectangle__s-y7y","search-panel-whitespace":"styles_search-panel-whitespace__RefGL"};
252
+ styleInject(css_248z);
253
+
254
+ const _excluded = ["children", "className", "enabled", "onClick", "onKeyPress", "wide"];
255
+ const getEmptyViaPointPlaceHolder = () => ({});
256
+ const isViaPointEmpty = viaPoint => {
257
+ if (viaPoint === undefined || isEmpty__default.default(viaPoint)) {
258
+ return true;
259
+ }
260
+ const keys = Object.keys(viaPoint);
261
+ return keys.length === 1 || keys.length === 2 && keys.includes('locationSlack');
262
+ };
263
+ const ItinerarySearchControl = _ref => {
264
+ let {
265
+ children,
266
+ className,
267
+ enabled,
268
+ onClick,
269
+ onKeyPress,
270
+ wide
271
+ } = _ref,
272
+ rest = _objectWithoutProperties(_ref, _excluded);
273
+ return /*#__PURE__*/React__default.default.createElement("div", {
274
+ className: styles['itinerary-search-control'],
275
+ style: {
276
+ '--width': wide ? '47px' : '40px'
277
+ }
278
+ }, onClick && enabled && /*#__PURE__*/React__default.default.createElement("div", Object.assign({}, rest, {
279
+ className: className,
280
+ onClick: onClick,
281
+ onKeyPress: onKeyPress,
282
+ role: "button",
283
+ tabIndex: "0"
284
+ }), children));
285
+ };
286
+ const updateViaPointSlack = (activeViaPointSlacks, updatedViaPointIndex, viaPointRemoved = false) => {
287
+ const foundAtIndex = activeViaPointSlacks.indexOf(updatedViaPointIndex);
288
+ if (foundAtIndex > -1) {
289
+ activeViaPointSlacks.splice(foundAtIndex, 1);
290
+ }
291
+ return viaPointRemoved ? activeViaPointSlacks.map(value => value > updatedViaPointIndex ? value - 1 : value) : activeViaPointSlacks;
292
+ };
293
+ const isKeyboardSelectionEvent = event => {
294
+ const space = [13, ' ', 'Spacebar'];
295
+ const enter = [32, 'Enter'];
296
+ const key = event && (event.key || event.which || event.keyCode) || '';
297
+ if (!key || !space.concat(enter).includes(key)) {
298
+ return false;
299
+ }
300
+ event.preventDefault();
301
+ return true;
302
+ };
303
+ const value = location => location && location.address || location && location.gps && location.ready && 'Nykyinen sijainti' || '';
304
+ const getLocationType = location => location && location.gps === true ? 'position' : 'location';
305
+ const getSlackTimeOptions = t => {
306
+ const timeOptions = [];
307
+ for (let i = 0; i <= 9; i++) {
308
+ const valueInMinutes = i * 10;
309
+ timeOptions.push({
310
+ displayName: `${valueInMinutes} ${t('minute-short')}`,
311
+ value: valueInMinutes * 60
312
+ });
313
+ }
314
+ return timeOptions;
315
+ };
316
+ process.env.NODE_ENV !== "production" ? ItinerarySearchControl.propTypes = {
317
+ children: PropTypes__default.default.node,
318
+ className: PropTypes__default.default.string.isRequired,
319
+ enabled: PropTypes__default.default.bool.isRequired,
320
+ onClick: PropTypes__default.default.func.isRequired,
321
+ onKeyPress: PropTypes__default.default.func.isRequired,
322
+ wide: PropTypes__default.default.bool
323
+ } : void 0;
324
+ ItinerarySearchControl.defaultProps = {
325
+ children: undefined,
326
+ wide: false
327
+ };
328
+
329
+ /**
330
+ * Panel that renders two DTAutosuggest search fields, including viapoint handling
331
+ *
332
+ * @example
333
+ * const searchContext = {
334
+ * isPeliasLocationAware: false // true / false does Let Pelias suggest based on current user location
335
+ * minimalRegexp: undefined // used for testing min. regexp. For example: new RegExp('.{2,}'),
336
+ * lineRegexp: undefined // identify searches for route numbers/labels: bus | train | metro. For example: new RegExp(
337
+ * // '(^[0-9]+[a-z]?$|^[yuleapinkrtdz]$|(^m[12]?b?$))',
338
+ * // 'i',
339
+ * // ),
340
+ * URL_PELIAS: '' // url for pelias searches
341
+ * feedIDs: ['HSL', 'HSLLautta'] // FeedId's like [HSL, HSLLautta]
342
+ * geocodingSources: ['oa','osm','nlsfi'] // sources for geocoding
343
+ * geocodingSearchParams; {} // Searchparmas fro geocoding
344
+ * getFavouriteLocations: () => ({}), // Function that returns array of favourite locations.
345
+ * getFavouriteStops: () => ({}), // Function that returns array of favourite stops.
346
+ * getLanguage: () => ({}), // Function that returns current language.
347
+ * getFavouriteRoutes: () => ({}), // Function that returns array of favourite routes.
348
+ * getPositions: () => ({}), // Function that returns user's geolocation.
349
+ * getRoutesQuery: () => ({}), // Function that returns query for fetching routes.
350
+ * getStopAndStationsQuery: () => ({}), // Function that fetches favourite stops and stations from graphql API.
351
+ * getFavouriteRoutesQuery: () => ({}), // Function that returns query for fetching favourite routes.
352
+ * getFavouriteVehicleRentalStations: () => ({}), // Function that returns favourite bike rental station.
353
+ * getFavouriteVehicleRentalStationsQuery: () => ({}), // Function that returns query for fetching favourite bike rental stations.
354
+ * startLocationWatch: () => ({}), // Function that locates users geolocation.
355
+ * saveSearch: () => ({}), // Function that saves search to old searches store.
356
+ * clearOldSearches: () => ({}), // Function that clears old searches store.
357
+ * getFutureRoutes: () => ({}), // Function that return future routes
358
+ * saveFutureRoute: () => ({}), // Function that saves a future route
359
+ * clearFutureRoutes: () => ({}), // Function that clears future routes
360
+ * };
361
+ *
362
+ * const origin = {
363
+ * lat: 60.169196,
364
+ * lon: 24.957674,
365
+ * address: 'Aleksanterinkatu, Helsinki',
366
+ * set: true,
367
+ * ready: true,
368
+ * }
369
+ *
370
+ * const destination = {
371
+ * lat: 60.199093,
372
+ * lon: 24.940536,
373
+ * address: 'Opastinsilta 6, Helsinki',
374
+ * set: true,
375
+ * ready: true,
376
+ * }
377
+ * onSelect(item, id) {
378
+ * return null; // Define what to do when a suggestion is being selected. None by default.
379
+ * }
380
+ * onClear(id) {
381
+ * return null; // Define what to do when a suggestion is being selected. None by default.
382
+ * }
383
+ * const getAutoSuggestIcons: {
384
+ * // Called for every city bike station rendered as a search suggestion. Should return the icon and
385
+ * // color used for that station. Two icons are available, 'citybike-stop-digitransit' anditybike-stop-digitransit-secondary'.
386
+ * citybikes: station => {
387
+ * return ['citybike-stop-digitransit', '#f2b62d'];
388
+ * }
389
+ * }
390
+ * 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.
391
+ * 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.
392
+ * <DTAutosuggestPanel
393
+ * appElement={appElement} // Required. Root element's id. Needed for react-modal component.
394
+ * origin={origin} // Selected origin point
395
+ * destination={destination} // Selected destination point
396
+ * originPlaceHolder={'Give origin'} // Optional Give string shown initially inside origin search field
397
+ * destinationPlaceHolder={'Give destination'} // Optional Give string shown initally inside destination search field
398
+ * initialViaPoints={[]} // Optional. If showViapointControl is set to true, pass initial via points to the panel. Currently no default implementation is given.
399
+ * 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.
400
+ * 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.
401
+ * searchContext={searchContext}
402
+ * getAutoSuggestIcons={getAutoSuggestIcons}
403
+ * onSelect={this.onSelect}
404
+ * onClear={this.onClear}
405
+ * lang="fi" // Define language fi sv or en.
406
+ * addAnalyticsEvent={null} // Optional. you can record an analytics event if you wish. if passed, component will pass an category, action, name parameters to addAnalyticsEvent
407
+ * disableAutoFocus={false} // Optional. use this to disable autofocus completely from DTAutosuggestPanel
408
+ * sources={sources}
409
+ * targets={targets}
410
+ * isMobile // Optional. Defaults to false. Whether to use mobile search.
411
+ * originMobileLabel="Origin label" // Optional. Custom label text for origin field on mobile.
412
+ * destinationMobileLabel="Destination label" // Optional. Custom label text for destination field on mobile.
413
+ * handleFocusChange={() => {}} // Optional. If defined overrides default onFocusChange behaviour
414
+ * showSwapControl={false} // Optional.
415
+ * showViapointControl={false} // Optional.
416
+ */
417
+
418
+ const locationShape = process.env.NODE_ENV !== "production" ? PropTypes__default.default.shape({
419
+ address: PropTypes__default.default.string,
420
+ lat: PropTypes__default.default.number,
421
+ lon: PropTypes__default.default.number,
422
+ locationSlack: PropTypes__default.default.number
423
+ }) : {};
424
+ class DTAutosuggestPanel extends React__default.default.Component {
425
+ constructor(props) {
426
+ super(props);
427
+ _defineProperty(this, "storeReference", ref => {
428
+ this.setState(prevState => ({
429
+ refs: [...prevState.refs, ref]
430
+ }));
431
+ });
432
+ _defineProperty(this, "handleFocusChange", () => {
433
+ const {
434
+ destination
435
+ } = this.props;
436
+ if (!destination || !destination.lat) {
437
+ this.state.refs[1].focus();
438
+ }
439
+ });
440
+ _defineProperty(this, "updateViaPoints", viaPoints => {
441
+ if (viaPoints.length === 0) {
442
+ this.props.updateViaPoints([]);
443
+ return;
444
+ }
445
+ this.props.updateViaPoints(viaPoints.filter(vp => !isViaPointEmpty(vp)));
446
+ });
447
+ _defineProperty(this, "handleToggleViaPointSlackClick", viaPointIndex => {
448
+ const {
449
+ activeSlackInputs
450
+ } = this.state;
451
+ this.setState({
452
+ activeSlackInputs: activeSlackInputs.includes(viaPointIndex) ? updateViaPointSlack(activeSlackInputs, viaPointIndex) : activeSlackInputs.concat([viaPointIndex])
453
+ });
454
+ });
455
+ _defineProperty(this, "handleViaPointSlackTimeSelected", (slackTimeInSeconds, i) => {
456
+ if (this.props.addAnalyticsEvent) {
457
+ this.props.addAnalyticsEvent({
458
+ action: 'EditViaPointStopDuration',
459
+ category: 'ItinerarySettings',
460
+ name: slackTimeInSeconds / 60
461
+ });
462
+ }
463
+ const {
464
+ viaPoints
465
+ } = this.props;
466
+ viaPoints[i].locationSlack = Number.parseInt(slackTimeInSeconds, 10);
467
+ this.updateViaPoints(viaPoints);
468
+ });
469
+ _defineProperty(this, "handleViaPointLocationSelected", (viaPointLocation, i) => {
470
+ this.props.handleViaPointLocationSelected(viaPointLocation, i);
471
+ });
472
+ _defineProperty(this, "handleRemoveViaPointClick", viaPointIndex => {
473
+ if (this.props.addAnalyticsEvent) {
474
+ this.props.addAnalyticsEvent({
475
+ action: 'RemoveJourneyViaPoint',
476
+ category: 'ItinerarySettings',
477
+ name: null
478
+ });
479
+ }
480
+ const {
481
+ activeSlackInputs
482
+ } = this.state;
483
+ const {
484
+ viaPoints
485
+ } = this.props;
486
+ viaPoints.splice(viaPointIndex, 1);
487
+ this.setState({
488
+ activeSlackInputs: updateViaPointSlack(activeSlackInputs, viaPointIndex, true)
489
+ }, () => this.updateViaPoints(viaPoints));
490
+ });
491
+ _defineProperty(this, "handleAddViaPointClick", () => {
492
+ if (this.props.addAnalyticsEvent) {
493
+ this.props.addAnalyticsEvent({
494
+ action: 'AddJourneyViaPoint',
495
+ category: 'ItinerarySettings',
496
+ name: 'QuickSettingsButton'
497
+ });
498
+ }
499
+ const {
500
+ viaPoints
501
+ } = this.props;
502
+ viaPoints.push(getEmptyViaPointPlaceHolder());
503
+ // We need to update the state so that placeHolder will show up in panel.
504
+ // eslint-disable-next-line react/no-access-state-in-setstate
505
+ this.setState(this.state);
506
+ });
507
+ _defineProperty(this, "handleSwapOrderClick", () => {
508
+ if (this.props.addAnalyticsEvent) {
509
+ this.props.addAnalyticsEvent({
510
+ action: 'SwitchJourneyStartAndEndPointOrder',
511
+ category: 'ItinerarySettings',
512
+ name: null
513
+ });
514
+ }
515
+ const {
516
+ viaPoints
517
+ } = this.props;
518
+ viaPoints.reverse();
519
+ this.props.swapOrder();
520
+ });
521
+ _defineProperty(this, "getSlackDisplay", slackInSeconds => `${slackInSeconds / 60} ${this.props.t('minute-short', {
522
+ lng: this.props.lang
523
+ })}`);
524
+ this.state = {
525
+ activeSlackInputs: [],
526
+ refs: []
527
+ };
528
+ }
529
+ render() {
530
+ const {
531
+ origin,
532
+ searchPanelText,
533
+ searchContext,
534
+ disableAutoFocus,
535
+ viaPoints,
536
+ originMobileLabel,
537
+ destinationMobileLabel,
538
+ fontWeights,
539
+ onFocusChange,
540
+ showSwapControl,
541
+ showViapointControl,
542
+ t,
543
+ lang: lng
544
+ } = this.props;
545
+ const {
546
+ primary
547
+ } = this.props.colors;
548
+ const {
549
+ activeSlackInputs
550
+ } = this.state;
551
+ const slackTime = getSlackTimeOptions(t);
552
+ const defaultSlackTimeValue = 0;
553
+ const getViaPointSlackTimeOrDefault = (viaPoint, defaultValue = defaultSlackTimeValue) => viaPoint && viaPoint.locationSlack || defaultValue;
554
+ const isViaPointSlackTimeInputActive = index => activeSlackInputs.includes(index);
555
+ return /*#__PURE__*/React__default.default.createElement("div", {
556
+ className: cx__default.default(styles['autosuggest-panel'], this.props.isMobile && "small"),
557
+ style: {
558
+ '--color': primary,
559
+ '--font-weight-medium': fontWeights.medium
560
+ }
561
+ }, ' ', searchPanelText ? /*#__PURE__*/React__default.default.createElement("div", null, /*#__PURE__*/React__default.default.createElement("h1", {
562
+ className: styles['autosuggest-searchpanel-text']
563
+ }, ' ', searchPanelText)) : null, /*#__PURE__*/React__default.default.createElement("div", {
564
+ className: styles['origin-input-container']
565
+ }, /*#__PURE__*/React__default.default.createElement(DTAutoSuggest__default.default, {
566
+ appElement: this.props.appElement,
567
+ icon: "originEllipse",
568
+ id: "origin",
569
+ autoFocus: disableAutoFocus === true ? false : !this.props.isMobile && !origin?.lat,
570
+ storeRef: this.storeReference,
571
+ refPoint: this.props.refPoint,
572
+ className: getLocationType(origin),
573
+ placeholder: this.props.originPlaceHolder,
574
+ value: value(origin),
575
+ searchContext: searchContext,
576
+ getAutoSuggestIcons: this.props.getAutoSuggestIcons,
577
+ onSelect: this.props.onSelect,
578
+ onClear: this.props.onClear,
579
+ focusChange: onFocusChange || this.handleFocusChange,
580
+ lang: this.props.lang,
581
+ sources: this.props.sources,
582
+ targets: this.props.targets,
583
+ filterResults: this.props.filterResults,
584
+ isMobile: this.props.isMobile,
585
+ colors: this.props.colors,
586
+ mobileLabel: originMobileLabel,
587
+ fontWeights: this.props.fontWeights,
588
+ modeSet: this.props.modeSet,
589
+ showScroll: this.props.showScroll,
590
+ isEmbedded: this.props.isEmbedded
591
+ }), (showSwapControl || showViapointControl) && /*#__PURE__*/React__default.default.createElement(ItinerarySearchControl, {
592
+ className: styles.opposite,
593
+ enabled: showSwapControl,
594
+ onClick: () => this.handleSwapOrderClick(),
595
+ onKeyPress: e => isKeyboardSelectionEvent(e) && this.handleSwapOrderClick(),
596
+ "aria-label": t('swap-order-button-label', {
597
+ lng
598
+ })
599
+ }, /*#__PURE__*/React__default.default.createElement(Icon__default.default, {
600
+ img: "opposite",
601
+ color: primary
602
+ }))), viaPoints.length === 0 && /*#__PURE__*/React__default.default.createElement("div", {
603
+ className: styles['rectangle-container']
604
+ }, /*#__PURE__*/React__default.default.createElement("div", {
605
+ className: styles.rectangle
606
+ })), /*#__PURE__*/React__default.default.createElement(reactSortablejs.ReactSortable, {
607
+ className: styles['viapoints-container'],
608
+ list: viaPoints,
609
+ handle: `.${styles['viapoint-before']}`,
610
+ animation: 200,
611
+ disabled: viaPoints.length <= 1,
612
+ setList: items => {
613
+ const newViaPoints = items.filter(vp => !isViaPointEmpty(vp));
614
+ if (newViaPoints.length > 0) {
615
+ this.props.updateViaPoints(newViaPoints);
616
+ }
617
+ }
618
+ }, viaPoints.map((o, i) => /*#__PURE__*/React__default.default.createElement("div", {
619
+ className: cx__default.default(styles['viapoint-container']),
620
+ key: `viapoint-${i}` // eslint-disable-line
621
+ }, /*#__PURE__*/React__default.default.createElement("div", {
622
+ className: styles['light-gray-background']
623
+ }, /*#__PURE__*/React__default.default.createElement("div", {
624
+ className: styles.row
625
+ }, /*#__PURE__*/React__default.default.createElement("div", {
626
+ className: styles['viapoint-before'],
627
+ style: viaPoints.length > 1 ? {
628
+ cursor: 'move'
629
+ } : {}
630
+ }, viaPoints.length > 1 && /*#__PURE__*/React__default.default.createElement(Icon__default.default, {
631
+ img: "ellipsis",
632
+ rotate: 90,
633
+ color: primary
634
+ })), /*#__PURE__*/React__default.default.createElement("div", {
635
+ className: `${styles['viapoint-input-container']} ${styles[`viapoint-${i + 1}`]}`
636
+ }, /*#__PURE__*/React__default.default.createElement(DTAutoSuggest__default.default, {
637
+ appElement: this.props.appElement,
638
+ icon: "mapMarker",
639
+ id: "via-point",
640
+ ariaLabel: t('via-point-index', {
641
+ index: i + 1,
642
+ lng
643
+ }),
644
+ autoFocus: disableAutoFocus === true ? false : !this.props.isMobile,
645
+ placeholder: "via-point",
646
+ className: "viapoint",
647
+ searchContext: searchContext,
648
+ refPoint: this.props.refPoint,
649
+ value: o && o.address || '',
650
+ onSelect: this.props.onSelect,
651
+ onClear: this.props.onClear,
652
+ handleViaPoints: item => this.handleViaPointLocationSelected(item, i),
653
+ lang: this.props.lang,
654
+ sources: this.props.sources,
655
+ targets: this.props.targets,
656
+ filterResults: this.props.filterResults,
657
+ getAutoSuggestIcons: this.props.getAutoSuggestIcons,
658
+ isMobile: this.props.isMobile,
659
+ fontWeights: this.props.fontWeights,
660
+ modeSet: this.props.modeSet,
661
+ colors: this.props.colors,
662
+ showScroll: this.props.showScroll
663
+ })), this.props.showSlackControl && /*#__PURE__*/React__default.default.createElement(ItinerarySearchControl, {
664
+ className: styles['add-via-point-slack'],
665
+ enabled: this.props.showViapointControl,
666
+ onClick: () => this.handleToggleViaPointSlackClick(i),
667
+ onKeyPress: e => isKeyboardSelectionEvent(e) && this.handleToggleViaPointSlackClick(i),
668
+ "aria-label": t(isViaPointSlackTimeInputActive(i) ? 'add-via-duration-button-label-open' : 'add-via-duration-button-label-close', {
669
+ index: i + 1,
670
+ lng
671
+ }),
672
+ wide: true
673
+ }, /*#__PURE__*/React__default.default.createElement(Icon__default.default, {
674
+ img: "time",
675
+ color: primary
676
+ }))), !isViaPointSlackTimeInputActive(i) && viaPoints[i] && viaPoints[i].locationSlack > 0 && /*#__PURE__*/React__default.default.createElement("span", {
677
+ className: styles['viapoint-slack-time']
678
+ }, `${t('viapoint-slack-amount', {
679
+ lng
680
+ })}: ${this.getSlackDisplay(viaPoints[i].locationSlack)}`), /*#__PURE__*/React__default.default.createElement("div", {
681
+ className: cx__default.default(styles['input-viapoint-slack-container'], !isViaPointSlackTimeInputActive(i) && "collapsed")
682
+ }, /*#__PURE__*/React__default.default.createElement("div", {
683
+ className: styles['select-wrapper']
684
+ }, /*#__PURE__*/React__default.default.createElement(Select, {
685
+ id: `viapoint-slack-${i}`,
686
+ label: t('viapoint-slack-amount', {
687
+ lng
688
+ }),
689
+ options: slackTime,
690
+ value: getViaPointSlackTimeOrDefault(viaPoints[i]),
691
+ viaPointIndex: i,
692
+ icon: /*#__PURE__*/React__default.default.createElement("span", {
693
+ className: `${styles['combobox-icon']} ${styles['time-input-icon']}`
694
+ }, /*#__PURE__*/React__default.default.createElement(Icon__default.default, {
695
+ img: "time",
696
+ color: primary
697
+ })),
698
+ onSlackTimeSelected: this.handleViaPointSlackTimeSelected
699
+ })))), /*#__PURE__*/React__default.default.createElement(ItinerarySearchControl, {
700
+ className: styles['remove-via-point'],
701
+ enabled: this.props.showViapointControl,
702
+ onClick: () => this.handleRemoveViaPointClick(i),
703
+ onKeyPress: e => isKeyboardSelectionEvent(e) && this.handleRemoveViaPointClick(i),
704
+ "aria-label": t('remove-via-button-label', {
705
+ index: i + 1,
706
+ lng
707
+ })
708
+ }, /*#__PURE__*/React__default.default.createElement(Icon__default.default, {
709
+ img: "trash",
710
+ color: primary
711
+ }))))), /*#__PURE__*/React__default.default.createElement("div", {
712
+ className: styles['destination-input-container']
713
+ }, /*#__PURE__*/React__default.default.createElement(DTAutoSuggest__default.default, {
714
+ appElement: this.props.appElement,
715
+ icon: "mapMarker",
716
+ id: "destination",
717
+ autoFocus: disableAutoFocus === true ? false : !this.props.isMobile && !Number.isNaN(origin?.lat),
718
+ storeRef: this.storeReference,
719
+ placeholder: this.props.destinationPlaceHolder,
720
+ className: getLocationType(this.props.destination),
721
+ getAutoSuggestIcons: this.props.getAutoSuggestIcons,
722
+ searchContext: searchContext,
723
+ onSelect: this.props.onSelect,
724
+ onClear: this.props.onClear,
725
+ refPoint: this.props.refPoint,
726
+ value: value(this.props.destination),
727
+ lang: this.props.lang,
728
+ sources: this.props.sources,
729
+ targets: this.props.targets,
730
+ filterResults: this.props.filterResults,
731
+ isMobile: this.props.isMobile,
732
+ mobileLabel: destinationMobileLabel,
733
+ fontWeights: this.props.fontWeights,
734
+ modeSet: this.props.modeSet,
735
+ colors: this.props.colors,
736
+ showScroll: this.props.showScroll,
737
+ isEmbedded: this.props.isEmbedded
738
+ }), (showSwapControl || showViapointControl) && /*#__PURE__*/React__default.default.createElement(ItinerarySearchControl, {
739
+ className: cx__default.default(styles['add-via-point'], styles.more, viaPoints.length > 4 && "collapsed"),
740
+ enabled: showViapointControl && viaPoints.length === 0,
741
+ onClick: () => this.handleAddViaPointClick(),
742
+ onKeyPress: e => isKeyboardSelectionEvent(e) && this.handleAddViaPointClick(),
743
+ "aria-label": t('add-via-button-label', {
744
+ lng
745
+ })
746
+ }, /*#__PURE__*/React__default.default.createElement(Icon__default.default, {
747
+ img: "viapoint",
748
+ width: 1.25,
749
+ height: 1.375,
750
+ color: primary
751
+ }))));
752
+ }
753
+ }
754
+ _defineProperty(DTAutosuggestPanel, "defaultProps", {
755
+ origin: undefined,
756
+ destination: undefined,
757
+ viaPoints: [],
758
+ originPlaceHolder: 'give-origin',
759
+ destinationPlaceHolder: 'give-destination',
760
+ swapOrder: undefined,
761
+ updateViaPoints: () => {},
762
+ searchPanelText: undefined,
763
+ sources: [],
764
+ targets: [],
765
+ filterResults: undefined,
766
+ onClear: undefined,
767
+ getAutoSuggestIcons: undefined,
768
+ refPoint: undefined,
769
+ addAnalyticsEvent: undefined,
770
+ disableAutoFocus: false,
771
+ isMobile: false,
772
+ handleViaPointLocationSelected: undefined,
773
+ originMobileLabel: null,
774
+ destinationMobileLabel: null,
775
+ modeSet: undefined,
776
+ colors: Icon.defaultColors,
777
+ fontWeights: {
778
+ medium: 500
779
+ },
780
+ showScroll: false,
781
+ onFocusChange: undefined,
782
+ isEmbedded: false,
783
+ showSwapControl: false,
784
+ showViapointControl: false,
785
+ showSlackControl: false
786
+ });
787
+ process.env.NODE_ENV !== "production" ? DTAutosuggestPanel.propTypes = {
788
+ appElement: PropTypes__default.default.string.isRequired,
789
+ origin: locationShape,
790
+ destination: locationShape,
791
+ originPlaceHolder: PropTypes__default.default.string,
792
+ destinationPlaceHolder: PropTypes__default.default.string,
793
+ viaPoints: PropTypes__default.default.arrayOf(locationShape),
794
+ updateViaPoints: PropTypes__default.default.func,
795
+ handleViaPointLocationSelected: PropTypes__default.default.func,
796
+ swapOrder: PropTypes__default.default.func,
797
+ searchPanelText: PropTypes__default.default.string,
798
+ searchContext: PropTypes__default.default.shape({
799
+ URL_PELIAS: PropTypes__default.default.string
800
+ }).isRequired,
801
+ onSelect: PropTypes__default.default.func.isRequired,
802
+ onClear: PropTypes__default.default.func,
803
+ addAnalyticsEvent: PropTypes__default.default.func,
804
+ lang: PropTypes__default.default.string.isRequired,
805
+ disableAutoFocus: PropTypes__default.default.bool,
806
+ sources: PropTypes__default.default.arrayOf(PropTypes__default.default.string),
807
+ targets: PropTypes__default.default.arrayOf(PropTypes__default.default.string),
808
+ filterResults: PropTypes__default.default.func,
809
+ isMobile: PropTypes__default.default.bool,
810
+ originMobileLabel: PropTypes__default.default.string,
811
+ destinationMobileLabel: PropTypes__default.default.string,
812
+ refPoint: locationShape,
813
+ modeSet: PropTypes__default.default.string,
814
+ colors: PropTypes__default.default.objectOf(PropTypes__default.default.string),
815
+ getAutoSuggestIcons: PropTypes__default.default.objectOf(PropTypes__default.default.func),
816
+ fontWeights: PropTypes__default.default.shape({
817
+ medium: PropTypes__default.default.number
818
+ }),
819
+ showScroll: PropTypes__default.default.bool,
820
+ onFocusChange: PropTypes__default.default.func,
821
+ isEmbedded: PropTypes__default.default.bool,
822
+ showSwapControl: PropTypes__default.default.bool,
823
+ showViapointControl: PropTypes__default.default.bool,
824
+ showSlackControl: PropTypes__default.default.bool,
825
+ t: PropTypes__default.default.func.isRequired
826
+ } : void 0;
827
+ const DTAutosuggestPanelWithTranslation = reactI18next.withTranslation()(DTAutosuggestPanel);
828
+ var index = props => {
829
+ return /*#__PURE__*/React__default.default.createElement(reactI18next.I18nextProvider, {
830
+ i18n: i18n
831
+ }, /*#__PURE__*/React__default.default.createElement(DTAutosuggestPanelWithTranslation, props));
832
+ };
833
+
834
+ exports.default = index;
835
+ exports.getEmptyViaPointPlaceHolder = getEmptyViaPointPlaceHolder;
836
+
837
+ Object.defineProperty(exports, '__esModule', { value: true });
838
+
839
+ }));
840
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZGV2ZWxvcG1lbnQuY2pzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJpbWl0aXZlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJvcGVydHlLZXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1pbmplY3QvZGlzdC9zdHlsZS1pbmplY3QuZXMuanMiLCIuLi9zcmMvaGVscGVycy9TZWxlY3QuanN4IiwiLi4vc3JjL2hlbHBlcnMvdHJhbnNsYXRpb25zLmpzIiwiLi4vc3JjL2hlbHBlcnMvaTE4bi5qcyIsIi4uL3NyYy9pbmRleC5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvO1xuICB9IDogZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbztcbiAgfSwgX3R5cGVvZihvKTtcbn1cbmV4cG9ydCB7IF90eXBlb2YgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuZnVuY3Rpb24gdG9QcmltaXRpdmUodCwgcikge1xuICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDtcbiAgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07XG4gIGlmICh2b2lkIDAgIT09IGUpIHtcbiAgICB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTtcbn1cbmV4cG9ydCB7IHRvUHJpbWl0aXZlIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCB0b1ByaW1pdGl2ZSBmcm9tIFwiLi90b1ByaW1pdGl2ZS5qc1wiO1xuZnVuY3Rpb24gdG9Qcm9wZXJ0eUtleSh0KSB7XG4gIHZhciBpID0gdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7XG4gIHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7XG59XG5leHBvcnQgeyB0b1Byb3BlcnR5S2V5IGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkge1xuICByZXR1cm4gKHIgPSB0b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHtcbiAgICB2YWx1ZTogdCxcbiAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICBjb25maWd1cmFibGU6ICEwLFxuICAgIHdyaXRhYmxlOiAhMFxuICB9KSA6IGVbcl0gPSB0LCBlO1xufVxuZXhwb3J0IHsgX2RlZmluZVByb3BlcnR5IGFzIGRlZmF1bHQgfTsiLCJmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7XG4gIGlmIChudWxsID09IHIpIHJldHVybiB7fTtcbiAgdmFyIHQgPSB7fTtcbiAgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkge1xuICAgIGlmICgtMSAhPT0gZS5pbmRleE9mKG4pKSBjb250aW51ZTtcbiAgICB0W25dID0gcltuXTtcbiAgfVxuICByZXR1cm4gdDtcbn1cbmV4cG9ydCB7IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiLi9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzXCI7XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkge1xuICBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307XG4gIHZhciBvLFxuICAgIHIsXG4gICAgaSA9IG9iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7XG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO1xuICAgIGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgLTEgPT09IHQuaW5kZXhPZihvKSAmJiB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7XG4gIH1cbiAgcmV0dXJuIGk7XG59XG5leHBvcnQgeyBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIHN0eWxlSW5qZWN0KGNzcywgcmVmKSB7XG4gIGlmICggcmVmID09PSB2b2lkIDAgKSByZWYgPSB7fTtcbiAgdmFyIGluc2VydEF0ID0gcmVmLmluc2VydEF0O1xuXG4gIGlmICghY3NzIHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuOyB9XG5cbiAgdmFyIGhlYWQgPSBkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG4gIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHN0eWxlLnR5cGUgPSAndGV4dC9jc3MnO1xuXG4gIGlmIChpbnNlcnRBdCA9PT0gJ3RvcCcpIHtcbiAgICBpZiAoaGVhZC5maXJzdENoaWxkKSB7XG4gICAgICBoZWFkLmluc2VydEJlZm9yZShzdHlsZSwgaGVhZC5maXJzdENoaWxkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICB9XG5cbiAgaWYgKHN0eWxlLnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG4gIH0gZWxzZSB7XG4gICAgc3R5bGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgc3R5bGVJbmplY3Q7XG4iLCJpbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGN4IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVNlbGVjdCB9IGZyb20gJ2Rvd25zaGlmdCc7XG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc2VsZWN0LnNjc3MnO1xuXG5jb25zdCBTZWxlY3QgPSAoe1xuICB2YWx1ZSxcbiAgb3B0aW9ucyxcbiAgb25TbGFja1RpbWVTZWxlY3RlZCxcbiAgdmlhUG9pbnRJbmRleCxcbiAgaWQsXG4gIGxhYmVsLFxuICBpY29uLFxufSkgPT4ge1xuICBjb25zdCBsYWJlbElkID0gYCR7aWR9LWxhYmVsYDtcbiAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gb3B0aW9ucy5maW5kKG9wdGlvbiA9PiBvcHRpb24udmFsdWUgPT09IHZhbHVlKTtcblxuICBjb25zdCB7XG4gICAgaXNPcGVuLFxuICAgIGdldFRvZ2dsZUJ1dHRvblByb3BzLFxuICAgIGdldE1lbnVQcm9wcyxcbiAgICBnZXRJdGVtUHJvcHMsXG4gICAgZ2V0TGFiZWxQcm9wcyxcbiAgICBoaWdobGlnaHRlZEluZGV4LFxuICB9ID0gdXNlU2VsZWN0KHtcbiAgICBzZWxlY3RlZEl0ZW0sXG4gICAgaXRlbXM6IG9wdGlvbnMsXG4gICAgbGFiZWxJZCxcbiAgICBpZCxcbiAgICBpdGVtVG9TdHJpbmc6IGl0ZW0gPT4gaXRlbS5kaXNwbGF5TmFtZSxcbiAgICBvblNlbGVjdGVkSXRlbUNoYW5nZTogKHsgc2VsZWN0ZWRJdGVtOiBuZXdJdGVtIH0pID0+IHtcbiAgICAgIG9uU2xhY2tUaW1lU2VsZWN0ZWQobmV3SXRlbS52YWx1ZSwgdmlhUG9pbnRJbmRleCk7XG4gICAgfSxcbiAgfSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydjb21ib2JveC1jb250YWluZXInXX0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRhaW5lcn0+XG4gICAgICAgIDxkaXYgey4uLmdldFRvZ2dsZUJ1dHRvblByb3BzKCl9PlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzWydsZWZ0LWNvbHVtbiddfT5cbiAgICAgICAgICAgIDxsYWJlbCB7Li4uZ2V0TGFiZWxQcm9wcygpfSBjbGFzc05hbWU9e3N0eWxlc1snY29tYm9ib3gtbGFiZWwnXX0+XG4gICAgICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmlucHV0fT5cbiAgICAgICAgICAgICAgPHNwYW4+e3NlbGVjdGVkSXRlbS5kaXNwbGF5TmFtZX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAge2ljb259XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8dWxcbiAgICAgICAgICBjbGFzc05hbWU9e2N4KFtzdHlsZXMuc3VnZ2VzdGlvbnNDb250YWluZXJPcGVuLCAhaXNPcGVuICYmICdoaWRkZW4nXSl9XG4gICAgICAgICAgey4uLmdldE1lbnVQcm9wcygpfVxuICAgICAgICA+XG4gICAgICAgICAge2lzT3BlbiAmJlxuICAgICAgICAgICAgb3B0aW9ucy5tYXAoKG9wdGlvbiwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAga2V5PXtvcHRpb24udmFsdWV9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjeChbXG4gICAgICAgICAgICAgICAgICBzdHlsZXMuc3VnZ2VzdGlvbixcbiAgICAgICAgICAgICAgICAgIGluZGV4ID09PSBoaWdobGlnaHRlZEluZGV4ICYmIHN0eWxlcy5zdWdnZXN0aW9uSGlnaGxpZ2h0ZWQsXG4gICAgICAgICAgICAgICAgXSl9XG4gICAgICAgICAgICAgICAgey4uLmdldEl0ZW1Qcm9wcyh7IGluZGV4IH0pfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4+e29wdGlvbi5kaXNwbGF5TmFtZX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgPC91bD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuU2VsZWN0LnByb3BUeXBlcyA9IHtcbiAgdmFsdWU6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgb25TbGFja1RpbWVTZWxlY3RlZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoXG4gICAgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGRpc3BsYXlOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICB2YWx1ZTogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICAgIH0pLmlzUmVxdWlyZWQsXG4gICkuaXNSZXF1aXJlZCxcbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgbGFiZWw6IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gIGljb246IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gIHZpYVBvaW50SW5kZXg6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFNlbGVjdDtcbiIsImNvbnN0IHRyYW5zbGF0aW9ucyA9IHtcbiAgZGU6IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0bDvGdlIFp3aXNjaGVuemllbCBoaW56dScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwnOlxuICAgICAgICAnU2V0emUgVW1zdGVpZ2V6ZWl0IGbDvHIgWndpc2NoZW56aWVsIHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgICAnU2NobGllw59lIFVtc3RlaWdlemVpdC1BdXN3YWhsIGbDvHIgWndpc2NoZW56aWVsIHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAgICfDlmZmbmUgVW1zdGVpZ2V6ZWl0LUF1c3dhaGwgZsO8ciBad2lzY2hlbnppZWwge3tpbmRleH19JyxcbiAgICAgICdtaW51dGUtc2hvcnQnOiAnbWluJyxcbiAgICAgICdyZW1vdmUtdmlhLWJ1dHRvbi1sYWJlbCc6ICdFbnRmZXJuZSBad2lzY2hlbnppZWwge3tpbmRleH19JyxcbiAgICAgICdzd2FwLW9yZGVyLWJ1dHRvbi1sYWJlbCc6ICdUYXVzY2hlIFN0YXJ0IG1pdCBaaWVsJyxcbiAgICAgICd2aWEtcG9pbnQnOiAnWndpc2NoZW56aWVsJyxcbiAgICAgICd2aWEtcG9pbnQtaW5kZXgnOiAnWndpc2NoZW56aWVsIHt7aW5kZXh9fScsXG4gICAgICAndmlhcG9pbnQtc2xhY2stYW1vdW50JzogJ1Vtc3RlaWdlemVpdCcsXG4gICAgfSxcbiAgfSxcbiAgZW46IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0FkZCB2aWEgcG9pbnQnLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzpcbiAgICAgICAgJ1NldCBzdG9wIGR1cmF0aW9uIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICAgJ0Nsb3NlIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAgICdPcGVuIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgICAnbWludXRlLXNob3J0JzogJ21pbicsXG4gICAgICAncmVtb3ZlLXZpYS1idXR0b24tbGFiZWwnOiAnUmVtb3ZlIHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICAgJ3N3YXAtb3JkZXItYnV0dG9uLWxhYmVsJzogJ1JldmVyc2Ugb3JpZ2luIGFuZCBkZXN0aW5hdGlvbicsXG4gICAgICAndmlhLXBvaW50JzogJ1ZpYSBwb2ludCcsXG4gICAgICAndmlhLXBvaW50LWluZGV4JzogJ1ZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICAgJ3ZpYXBvaW50LXNsYWNrLWFtb3VudCc6ICdTdG9wIGR1cmF0aW9uJyxcbiAgICB9LFxuICB9LFxuICBmaToge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnTGlzw6TDpCB2w6RsaXBpc3RlJyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAgICdBc2V0YSB2w6RsaXBpc3RlZWxsZSB7e2luZGV4fX0gcHlzw6RoZHlrc2VuIGtlc3RvJyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAgICdBdmFhIHbDpGxpcGlzdGVlbiB7e2luZGV4fX0gcHlzw6RoZHlrc2VuIGtlc3RvIHZhbGl0c2luJyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICAgJ1N1bGplIHbDpGxpcGlzdGVlbiB7e2luZGV4fX0gcHlzw6RoZHlrc2VuIGtlc3RvIHZhbGl0c2luJyxcbiAgICAgICdtaW51dGUtc2hvcnQnOiAnbWluJyxcbiAgICAgICdyZW1vdmUtdmlhLWJ1dHRvbi1sYWJlbCc6ICdQb2lzdGEgdsOkbGlwaXN0ZSB7e2luZGV4fX0nLFxuICAgICAgJ3N3YXAtb3JkZXItYnV0dG9uLWxhYmVsJzogJ0vDpMOkbm7DpCByZWl0aW4gc3V1bnRhIHZhc3Rha2thaXNla3NpJyxcbiAgICAgICd2aWEtcG9pbnQnOiAnVsOkbGlwaXN0ZScsXG4gICAgICAndmlhLXBvaW50LWluZGV4JzogJ1bDpGxpcGlzdGUge3tpbmRleH19JyxcbiAgICAgICd2aWFwb2ludC1zbGFjay1hbW91bnQnOiAnUHlzw6RoZHlrc2VuIGtlc3RvJyxcbiAgICB9LFxuICB9LFxuICBwbDoge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnRG9kYWogcHVua3QgcG/Fm3JlZG5pJyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAgICdXeWJpZXJ6IGN6YXMgcG9zdG9qdSBkbGEgcHVua3R1IHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgICAnWmFta25paiB3eWJvcm5payBjemFzdSBwb3N0b2p1IHcgcHVua2NpZSB7e2luZGV4fX0nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgICAnT3R3w7NyeiB3eWJvcm5payBjemFzdSBwb3N0b2p1IHcgcHVua2NpZSB7e2luZGV4fX0nLFxuICAgICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4uJyxcbiAgICAgICdyZW1vdmUtdmlhLWJ1dHRvbi1sYWJlbCc6ICdVc3XFhCBwdW5rdCBwb8WbcmVkbmkge3tpbmRleH19JyxcbiAgICAgICdzd2FwLW9yZGVyLWJ1dHRvbi1sYWJlbCc6ICdPZHdyw7PEhyBwb2N6xIV0ZWsgaSBjZWwnLFxuICAgICAgJ3ZpYS1wb2ludCc6ICdQdW5rdCBwb8WbcmVkbmknLFxuICAgICAgJ3ZpYS1wb2ludC1pbmRleCc6ICdQdW5rdCBwb8WbcmVkbmkge3tpbmRleH19JyxcbiAgICAgICd2aWFwb2ludC1zbGFjay1hbW91bnQnOiAnQ3phcyBwb3N0b2p1JyxcbiAgICB9LFxuICB9LFxuICBzdjoge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnTMOkZ2cgdGlsbCB2aWFwdW5rdCcsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwnOlxuICAgICAgICAnU3TDpGxsIGluIHZhcmFrdGlnaGV0IGbDtnIgdmlhcHVua3RlbiB7e2luZGV4fX0nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICAgJ1N0w6RuZyB2w6RsamFyZW4gZsO2ciB2YXJha3RpZ2hldCB2aWQgdmlhLXB1bmt0ZW4ge3tpbmRleH19JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICAgJ8OWcHBuYSB2w6RsamFyZW4gZsO2ciB2YXJha3RpZ2hldCB2aWQgdmlhLXB1bmt0ZW4ge3tpbmRleH19JyxcbiAgICAgICdtaW51dGUtc2hvcnQnOiAnbWluJyxcbiAgICAgICdyZW1vdmUtdmlhLWJ1dHRvbi1sYWJlbCc6ICdUYSBib3J0IHZpYXB1bmt0IHt7aW5kZXh9fScsXG4gICAgICAnc3dhcC1vcmRlci1idXR0b24tbGFiZWwnOiAnU3bDpG5nIHJ1dHRlbnMgcmlrdG5pbmcgdGlsbCBkZW4gbW90c2F0dGEnLFxuICAgICAgJ3ZpYS1wb2ludCc6ICdWaWEgcHVua3QnLFxuICAgICAgJ3ZpYS1wb2ludC1pbmRleCc6ICdWaWEgcHVua3Qge3tpbmRleH19JyxcbiAgICAgICd2aWFwb2ludC1zbGFjay1hbW91bnQnOiAnU3RvcHBldHMgdmFyYWt0aWdoZXQnLFxuICAgIH0sXG4gIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCB0cmFuc2xhdGlvbnM7XG4iLCJpbXBvcnQgeyBjcmVhdGVJbnN0YW5jZSB9IGZyb20gJ2kxOG5leHQnO1xuaW1wb3J0IHRyYW5zbGF0aW9ucyBmcm9tICcuL3RyYW5zbGF0aW9ucyc7XG5cbmNvbnN0IGkxOG4gPSBjcmVhdGVJbnN0YW5jZSh7XG4gIGZhbGxiYWNrTG5nOiAnZmknLFxuICAvLyBkZWJ1ZzogdHJ1ZSxcbiAgcmVzb3VyY2VzOiB0cmFuc2xhdGlvbnMsXG4gIGRlZmF1bHROUzogJ3RyYW5zbGF0aW9uJyxcbiAgcmVhY3Q6IHtcbiAgICB1c2VTdXNwZW5zZTogdHJ1ZSxcbiAgfSxcbn0pO1xuXG5pMThuLmluaXQoKTtcblxuZXhwb3J0IGRlZmF1bHQgaTE4bjtcbiIsIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuaW1wb3J0IGN4IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBJMThuZXh0UHJvdmlkZXIsIHdpdGhUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuaW1wb3J0IHsgUmVhY3RTb3J0YWJsZSB9IGZyb20gJ3JlYWN0LXNvcnRhYmxlanMnO1xuaW1wb3J0IERUQXV0b1N1Z2dlc3QgZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtYXV0b3N1Z2dlc3QnO1xuaW1wb3J0IEljb24sIHtcbiAgZGVmYXVsdENvbG9ycyxcbn0gZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtaWNvbic7XG5pbXBvcnQgaXNFbXB0eSBmcm9tICdsb2Rhc2gvaXNFbXB0eS5qcyc7XG5pbXBvcnQgU2VsZWN0IGZyb20gJy4vaGVscGVycy9TZWxlY3QnO1xuaW1wb3J0IGkxOG4gZnJvbSAnLi9oZWxwZXJzL2kxOG4nO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL2hlbHBlcnMvc3R5bGVzLnNjc3MnO1xuXG5leHBvcnQgY29uc3QgZ2V0RW1wdHlWaWFQb2ludFBsYWNlSG9sZGVyID0gKCkgPT4gKHt9KTtcblxuY29uc3QgaXNWaWFQb2ludEVtcHR5ID0gdmlhUG9pbnQgPT4ge1xuICBpZiAodmlhUG9pbnQgPT09IHVuZGVmaW5lZCB8fCBpc0VtcHR5KHZpYVBvaW50KSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh2aWFQb2ludCk7XG4gIHJldHVybiAoXG4gICAga2V5cy5sZW5ndGggPT09IDEgfHwgKGtleXMubGVuZ3RoID09PSAyICYmIGtleXMuaW5jbHVkZXMoJ2xvY2F0aW9uU2xhY2snKSlcbiAgKTtcbn07XG5cbmNvbnN0IEl0aW5lcmFyeVNlYXJjaENvbnRyb2wgPSAoe1xuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBlbmFibGVkLFxuICBvbkNsaWNrLFxuICBvbktleVByZXNzLFxuICB3aWRlLFxuICAuLi5yZXN0XG59KSA9PiAoXG4gIDxkaXZcbiAgICBjbGFzc05hbWU9e3N0eWxlc1snaXRpbmVyYXJ5LXNlYXJjaC1jb250cm9sJ119XG4gICAgc3R5bGU9e3sgJy0td2lkdGgnOiB3aWRlID8gJzQ3cHgnIDogJzQwcHgnIH19XG4gID5cbiAgICB7b25DbGljayAmJiBlbmFibGVkICYmIChcbiAgICAgIDxkaXZcbiAgICAgICAgey4uLnJlc3R9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgICBvbktleVByZXNzPXtvbktleVByZXNzfVxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgdGFiSW5kZXg9XCIwXCJcbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9kaXY+XG4gICAgKX1cbiAgPC9kaXY+XG4pO1xuXG5jb25zdCB1cGRhdGVWaWFQb2ludFNsYWNrID0gKFxuICBhY3RpdmVWaWFQb2ludFNsYWNrcyxcbiAgdXBkYXRlZFZpYVBvaW50SW5kZXgsXG4gIHZpYVBvaW50UmVtb3ZlZCA9IGZhbHNlLFxuKSA9PiB7XG4gIGNvbnN0IGZvdW5kQXRJbmRleCA9IGFjdGl2ZVZpYVBvaW50U2xhY2tzLmluZGV4T2YodXBkYXRlZFZpYVBvaW50SW5kZXgpO1xuICBpZiAoZm91bmRBdEluZGV4ID4gLTEpIHtcbiAgICBhY3RpdmVWaWFQb2ludFNsYWNrcy5zcGxpY2UoZm91bmRBdEluZGV4LCAxKTtcbiAgfVxuICByZXR1cm4gdmlhUG9pbnRSZW1vdmVkXG4gICAgPyBhY3RpdmVWaWFQb2ludFNsYWNrcy5tYXAodmFsdWUgPT5cbiAgICAgICAgdmFsdWUgPiB1cGRhdGVkVmlhUG9pbnRJbmRleCA/IHZhbHVlIC0gMSA6IHZhbHVlLFxuICAgICAgKVxuICAgIDogYWN0aXZlVmlhUG9pbnRTbGFja3M7XG59O1xuXG5jb25zdCBpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQgPSBldmVudCA9PiB7XG4gIGNvbnN0IHNwYWNlID0gWzEzLCAnICcsICdTcGFjZWJhciddO1xuICBjb25zdCBlbnRlciA9IFszMiwgJ0VudGVyJ107XG4gIGNvbnN0IGtleSA9IChldmVudCAmJiAoZXZlbnQua2V5IHx8IGV2ZW50LndoaWNoIHx8IGV2ZW50LmtleUNvZGUpKSB8fCAnJztcbiAgaWYgKCFrZXkgfHwgIXNwYWNlLmNvbmNhdChlbnRlcikuaW5jbHVkZXMoa2V5KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmNvbnN0IHZhbHVlID0gbG9jYXRpb24gPT5cbiAgKGxvY2F0aW9uICYmIGxvY2F0aW9uLmFkZHJlc3MpIHx8XG4gIChsb2NhdGlvbiAmJiBsb2NhdGlvbi5ncHMgJiYgbG9jYXRpb24ucmVhZHkgJiYgJ055a3lpbmVuIHNpamFpbnRpJykgfHxcbiAgJyc7XG5cbmNvbnN0IGdldExvY2F0aW9uVHlwZSA9IGxvY2F0aW9uID0+XG4gIGxvY2F0aW9uICYmIGxvY2F0aW9uLmdwcyA9PT0gdHJ1ZSA/ICdwb3NpdGlvbicgOiAnbG9jYXRpb24nO1xuXG5jb25zdCBnZXRTbGFja1RpbWVPcHRpb25zID0gdCA9PiB7XG4gIGNvbnN0IHRpbWVPcHRpb25zID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDw9IDk7IGkrKykge1xuICAgIGNvbnN0IHZhbHVlSW5NaW51dGVzID0gaSAqIDEwO1xuICAgIHRpbWVPcHRpb25zLnB1c2goe1xuICAgICAgZGlzcGxheU5hbWU6IGAke3ZhbHVlSW5NaW51dGVzfSAke3QoJ21pbnV0ZS1zaG9ydCcpfWAsXG4gICAgICB2YWx1ZTogdmFsdWVJbk1pbnV0ZXMgKiA2MCxcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdGltZU9wdGlvbnM7XG59O1xuXG5JdGluZXJhcnlTZWFyY2hDb250cm9sLnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgZW5hYmxlZDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25LZXlQcmVzczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgd2lkZTogUHJvcFR5cGVzLmJvb2wsXG59O1xuXG5JdGluZXJhcnlTZWFyY2hDb250cm9sLmRlZmF1bHRQcm9wcyA9IHtcbiAgY2hpbGRyZW46IHVuZGVmaW5lZCxcbiAgd2lkZTogZmFsc2UsXG59O1xuXG4vKipcbiAqIFBhbmVsIHRoYXQgcmVuZGVycyB0d28gRFRBdXRvc3VnZ2VzdCBzZWFyY2ggZmllbGRzLCBpbmNsdWRpbmcgdmlhcG9pbnQgaGFuZGxpbmdcbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3Qgc2VhcmNoQ29udGV4dCA9IHtcbiAqICAgaXNQZWxpYXNMb2NhdGlvbkF3YXJlOiBmYWxzZSAvLyB0cnVlIC8gZmFsc2UgZG9lcyBMZXQgUGVsaWFzIHN1Z2dlc3QgYmFzZWQgb24gY3VycmVudCB1c2VyIGxvY2F0aW9uXG4gKiAgIG1pbmltYWxSZWdleHA6IHVuZGVmaW5lZCAvLyB1c2VkIGZvciB0ZXN0aW5nIG1pbi4gcmVnZXhwLiBGb3IgZXhhbXBsZTogbmV3IFJlZ0V4cCgnLnsyLH0nKSxcbiAqICAgbGluZVJlZ2V4cDogdW5kZWZpbmVkIC8vICBpZGVudGlmeSBzZWFyY2hlcyBmb3Igcm91dGUgbnVtYmVycy9sYWJlbHM6IGJ1cyB8IHRyYWluIHwgbWV0cm8uIEZvciBleGFtcGxlOiBuZXcgUmVnRXhwKFxuICogICAgLy8gICAnKF5bMC05XStbYS16XT8kfF5beXVsZWFwaW5rcnRkel0kfChebVsxMl0/Yj8kKSknLFxuICogICAgLy8gICdpJyxcbiAqICAgIC8vICApLFxuICogICBVUkxfUEVMSUFTOiAnJyAvLyB1cmwgZm9yIHBlbGlhcyBzZWFyY2hlc1xuICogICBmZWVkSURzOiBbJ0hTTCcsICdIU0xMYXV0dGEnXSAvLyBGZWVkSWQncyBsaWtlICBbSFNMLCBIU0xMYXV0dGFdXG4gKiAgIGdlb2NvZGluZ1NvdXJjZXM6IFsnb2EnLCdvc20nLCdubHNmaSddICAvLyBzb3VyY2VzIGZvciBnZW9jb2RpbmdcbiAqICAgZ2VvY29kaW5nU2VhcmNoUGFyYW1zOyB7fSAgLy8gU2VhcmNocGFybWFzIGZybyBnZW9jb2RpbmdcbiAqICAgZ2V0RmF2b3VyaXRlTG9jYXRpb25zOiAoKSA9PiAoe30pLCAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgYXJyYXkgb2YgZmF2b3VyaXRlIGxvY2F0aW9ucy5cbiAqICAgZ2V0RmF2b3VyaXRlU3RvcHM6ICgpID0+ICh7fSksICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgYXJyYXkgb2YgZmF2b3VyaXRlIHN0b3BzLlxuICogICBnZXRMYW5ndWFnZTogKCkgPT4gKHt9KSwgICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBjdXJyZW50IGxhbmd1YWdlLlxuICogICBnZXRGYXZvdXJpdGVSb3V0ZXM6ICgpID0+ICh7fSksICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhcnJheSBvZiBmYXZvdXJpdGUgcm91dGVzLlxuICogICBnZXRQb3NpdGlvbnM6ICgpID0+ICh7fSksICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyB1c2VyJ3MgZ2VvbG9jYXRpb24uXG4gKiAgIGdldFJvdXRlc1F1ZXJ5OiAoKSA9PiAoe30pLCAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHF1ZXJ5IGZvciBmZXRjaGluZyByb3V0ZXMuXG4gKiAgIGdldFN0b3BBbmRTdGF0aW9uc1F1ZXJ5OiAoKSA9PiAoe30pLCAgLy8gRnVuY3Rpb24gdGhhdCBmZXRjaGVzIGZhdm91cml0ZSBzdG9wcyBhbmQgc3RhdGlvbnMgZnJvbSBncmFwaHFsIEFQSS5cbiAqICAgZ2V0RmF2b3VyaXRlUm91dGVzUXVlcnk6ICgpID0+ICh7fSksICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgcXVlcnkgZm9yIGZldGNoaW5nIGZhdm91cml0ZSByb3V0ZXMuXG4gKiAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uczogKCkgPT4gKHt9KSwgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBmYXZvdXJpdGUgYmlrZSByZW50YWwgc3RhdGlvbi5cbiAqICAgZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zUXVlcnk6ICgpID0+ICh7fSksIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBxdWVyeSBmb3IgZmV0Y2hpbmcgZmF2b3VyaXRlIGJpa2UgcmVudGFsIHN0YXRpb25zLlxuICogICBzdGFydExvY2F0aW9uV2F0Y2g6ICgpID0+ICh7fSksICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgbG9jYXRlcyB1c2VycyBnZW9sb2NhdGlvbi5cbiAqICAgc2F2ZVNlYXJjaDogKCkgPT4gKHt9KSwgICAgICAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHNhdmVzIHNlYXJjaCB0byBvbGQgc2VhcmNoZXMgc3RvcmUuXG4gKiAgIGNsZWFyT2xkU2VhcmNoZXM6ICgpID0+ICh7fSksICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBjbGVhcnMgb2xkIHNlYXJjaGVzIHN0b3JlLlxuICogICBnZXRGdXR1cmVSb3V0ZXM6ICgpID0+ICh7fSksICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJuIGZ1dHVyZSByb3V0ZXNcbiAqICAgc2F2ZUZ1dHVyZVJvdXRlOiAoKSA9PiAoe30pLCAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHNhdmVzIGEgZnV0dXJlIHJvdXRlXG4gKiAgIGNsZWFyRnV0dXJlUm91dGVzOiAoKSA9PiAoe30pLCAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBjbGVhcnMgZnV0dXJlIHJvdXRlc1xuICogfTtcbiAqXG4gKiBjb25zdCBvcmlnaW4gPSB7XG4gKiAgbGF0OiA2MC4xNjkxOTYsXG4gKiAgbG9uOiAyNC45NTc2NzQsXG4gKiAgYWRkcmVzczogJ0FsZWtzYW50ZXJpbmthdHUsIEhlbHNpbmtpJyxcbiAqICBzZXQ6IHRydWUsXG4gKiAgcmVhZHk6IHRydWUsXG4gKiB9XG4gKlxuICogY29uc3QgZGVzdGluYXRpb24gPSB7XG4gKiAgIGxhdDogNjAuMTk5MDkzLFxuICogICBsb246IDI0Ljk0MDUzNixcbiAqICAgYWRkcmVzczogJ09wYXN0aW5zaWx0YSA2LCBIZWxzaW5raScsXG4gKiAgIHNldDogdHJ1ZSxcbiAqICAgcmVhZHk6IHRydWUsXG4gKiB9XG4gKiBvblNlbGVjdChpdGVtLCBpZCkge1xuICogIHJldHVybiBudWxsOyAgLy8gRGVmaW5lIHdoYXQgdG8gZG8gd2hlbiBhIHN1Z2dlc3Rpb24gaXMgYmVpbmcgc2VsZWN0ZWQuIE5vbmUgYnkgZGVmYXVsdC5cbiAqICB9XG4gKiBvbkNsZWFyKGlkKSB7XG4gKiAgcmV0dXJuIG51bGw7ICAvLyBEZWZpbmUgd2hhdCB0byBkbyB3aGVuIGEgc3VnZ2VzdGlvbiBpcyBiZWluZyBzZWxlY3RlZC4gTm9uZSBieSBkZWZhdWx0LlxuICogfVxuICogY29uc3QgZ2V0QXV0b1N1Z2dlc3RJY29uczoge1xuICogICAvLyBDYWxsZWQgZm9yIGV2ZXJ5IGNpdHkgYmlrZSBzdGF0aW9uIHJlbmRlcmVkIGFzIGEgc2VhcmNoIHN1Z2dlc3Rpb24uIFNob3VsZCByZXR1cm4gdGhlIGljb24gYW5kXG4gKiAgIC8vIGNvbG9yIHVzZWQgZm9yIHRoYXQgc3RhdGlvbi4gVHdvIGljb25zIGFyZSBhdmFpbGFibGUsICdjaXR5YmlrZS1zdG9wLWRpZ2l0cmFuc2l0JyBhbmRpdHliaWtlLXN0b3AtZGlnaXRyYW5zaXQtc2Vjb25kYXJ5Jy5cbiAqICAgY2l0eWJpa2VzOiBzdGF0aW9uID0+IHtcbiAqICAgICAgcmV0dXJuIFsnY2l0eWJpa2Utc3RvcC1kaWdpdHJhbnNpdCcsICcjZjJiNjJkJ107XG4gKiAgIH1cbiAqIH1cbiAqIGNvbnN0IHRhcmdldHMgPSBbJ0xvY2F0aW9ucycsICdTdG9wcycsICdSb3V0ZXMnXTsgLy8gRGVmaW5lcyB3aGF0IHlvdSBhcmUgc2VhcmNoaW5nLiBhbGwgYXZhaWxhYmxlIG9wdGlvbnMgYXJlIExvY2F0aW9ucywgU3RvcHMsIFJvdXRlcywgVmVoaWNsZVJlbnRhbFN0YXRpb25zLCBGdXR1cmVSb3V0ZXMsIE1hcFBvc2l0aW9uIGFuZCBDdXJyZW50UG9zaXRpb24uIExlYXZlIGVtcHR5IHRvIHNlYXJjaCBhbGwgdGFyZ2V0cy5cbiAqIGNvbnN0IHNvdXJjZXMgPSBbJ0Zhdm91cml0ZScsICdIaXN0b3J5JywgJ0RhdGFzb3VyY2UnXSAvLyBEZWZpbmVzIHdoZXJlIHlvdSBhcmUgc2VhcmNoaW5nLiBhbGwgYXZhaWxhYmxlIGFyZTogRmF2b3VyaXRlLCBIaXN0b3J5IChwcmV2aW91c2x5IHNlYXJjaGVkIHNlYXJjaGVzKSwgYW5kIERhdGFzb3VyY2UuIExlYXZlIGVtcHR5IHRvIHVzZSBhbGwgc291cmNlcy5cbiAqIDxEVEF1dG9zdWdnZXN0UGFuZWxcbiAqICAgIGFwcEVsZW1lbnQ9e2FwcEVsZW1lbnR9IC8vIFJlcXVpcmVkLiBSb290IGVsZW1lbnQncyBpZC4gTmVlZGVkIGZvciByZWFjdC1tb2RhbCBjb21wb25lbnQuXG4gKiAgICBvcmlnaW49e29yaWdpbn0gLy8gU2VsZWN0ZWQgb3JpZ2luIHBvaW50XG4gKiAgICBkZXN0aW5hdGlvbj17ZGVzdGluYXRpb259IC8vIFNlbGVjdGVkIGRlc3RpbmF0aW9uIHBvaW50XG4gKiAgICBvcmlnaW5QbGFjZUhvbGRlcj17J0dpdmUgb3JpZ2luJ30gLy8gT3B0aW9uYWwgR2l2ZSBzdHJpbmcgc2hvd24gaW5pdGlhbGx5IGluc2lkZSBvcmlnaW4gc2VhcmNoIGZpZWxkXG4gKiAgICBkZXN0aW5hdGlvblBsYWNlSG9sZGVyPXsnR2l2ZSBkZXN0aW5hdGlvbid9IC8vIE9wdGlvbmFsIEdpdmUgc3RyaW5nIHNob3duIGluaXRhbGx5IGluc2lkZSBkZXN0aW5hdGlvbiBzZWFyY2ggZmllbGRcbiAqICAgIGluaXRpYWxWaWFQb2ludHM9e1tdfSAvLyBPcHRpb25hbC4gIElmIHNob3dWaWFwb2ludENvbnRyb2wgaXMgc2V0IHRvIHRydWUsIHBhc3MgaW5pdGlhbCB2aWEgcG9pbnRzIHRvIHRoZSBwYW5lbC4gQ3VycmVudGx5IG5vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMgZ2l2ZW4uXG4gKiAgICB1cGRhdGVWaWFQb2ludHM9eygpID0+IHJldHVybiBbXX0gLy8gT3B0aW9uYWwuIElmIHNob3dWaWFwb2ludENvbnRyb2wgaXMgc2V0IHRvIHRydWUsIGRlZmluZSBob3cgdG8gdXBkYXRlIHlvdXIgdmlhIHBvaW50IGxpc3Qgd2l0aCB0aGlzIGZ1bmN0aW9uLiBDdXJyZW5sdHkgbm8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyBnaXZlbi5cbiAqICAgIHN3YXBPcmRlcj17KCkgPT4gcmV0dXJuIG51bGx9IC8vIE9wdGlvbmFsLiBJZiBzaG93U3dhcENvbnRyb2wgaXMgc2V0IHRvIHRydWUsIGRlZmluZSBob3cgdG8gc3dhcCBvcmRlciBvZiB5b3VyIHBvaW50cyAob3JpZ2luLCBkZXN0aW5hdGlvbiwgdmlhcG9pbnRzKS4gQ3VycmVudGx5IG5vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMgZ2l2ZW4uXG4gKiAgICBzZWFyY2hDb250ZXh0PXtzZWFyY2hDb250ZXh0fVxuICogICAgZ2V0QXV0b1N1Z2dlc3RJY29ucz17Z2V0QXV0b1N1Z2dlc3RJY29uc31cbiAqICAgIG9uU2VsZWN0PXt0aGlzLm9uU2VsZWN0fVxuICogICAgb25DbGVhcj17dGhpcy5vbkNsZWFyfVxuICogICAgbGFuZz1cImZpXCIgLy8gRGVmaW5lIGxhbmd1YWdlIGZpIHN2IG9yIGVuLlxuICogICAgYWRkQW5hbHl0aWNzRXZlbnQ9e251bGx9IC8vIE9wdGlvbmFsLiB5b3UgY2FuIHJlY29yZCBhbiBhbmFseXRpY3MgZXZlbnQgaWYgeW91IHdpc2guIGlmIHBhc3NlZCwgY29tcG9uZW50IHdpbGwgcGFzcyBhbiBjYXRlZ29yeSwgYWN0aW9uLCBuYW1lIHBhcmFtZXRlcnMgdG8gYWRkQW5hbHl0aWNzRXZlbnRcbiAqICAgIGRpc2FibGVBdXRvRm9jdXM9e2ZhbHNlfSAvLyBPcHRpb25hbC4gdXNlIHRoaXMgdG8gZGlzYWJsZSBhdXRvZm9jdXMgY29tcGxldGVseSBmcm9tIERUQXV0b3N1Z2dlc3RQYW5lbFxuICogICAgc291cmNlcz17c291cmNlc31cbiAqICAgIHRhcmdldHM9e3RhcmdldHN9XG4gKiAgICBpc01vYmlsZSAgLy8gT3B0aW9uYWwuIERlZmF1bHRzIHRvIGZhbHNlLiBXaGV0aGVyIHRvIHVzZSBtb2JpbGUgc2VhcmNoLlxuICogICAgb3JpZ2luTW9iaWxlTGFiZWw9XCJPcmlnaW4gbGFiZWxcIiAvLyBPcHRpb25hbC4gQ3VzdG9tIGxhYmVsIHRleHQgZm9yIG9yaWdpbiBmaWVsZCBvbiBtb2JpbGUuXG4gKiAgICBkZXN0aW5hdGlvbk1vYmlsZUxhYmVsPVwiRGVzdGluYXRpb24gbGFiZWxcIiAvLyBPcHRpb25hbC4gQ3VzdG9tIGxhYmVsIHRleHQgZm9yIGRlc3RpbmF0aW9uIGZpZWxkIG9uIG1vYmlsZS5cbiAqICAgIGhhbmRsZUZvY3VzQ2hhbmdlPXsoKSA9PiB7fX0gLy8gT3B0aW9uYWwuIElmIGRlZmluZWQgb3ZlcnJpZGVzIGRlZmF1bHQgb25Gb2N1c0NoYW5nZSBiZWhhdmlvdXJcbiAqICAgIHNob3dTd2FwQ29udHJvbD17ZmFsc2V9IC8vIE9wdGlvbmFsLlxuICogICAgc2hvd1ZpYXBvaW50Q29udHJvbD17ZmFsc2V9IC8vIE9wdGlvbmFsLlxuICovXG5cbmNvbnN0IGxvY2F0aW9uU2hhcGUgPSBQcm9wVHlwZXMuc2hhcGUoe1xuICBhZGRyZXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBsYXQ6IFByb3BUeXBlcy5udW1iZXIsXG4gIGxvbjogUHJvcFR5cGVzLm51bWJlcixcbiAgbG9jYXRpb25TbGFjazogUHJvcFR5cGVzLm51bWJlcixcbn0pO1xuXG5jbGFzcyBEVEF1dG9zdWdnZXN0UGFuZWwgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIGFwcEVsZW1lbnQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBvcmlnaW46IGxvY2F0aW9uU2hhcGUsXG4gICAgZGVzdGluYXRpb246IGxvY2F0aW9uU2hhcGUsXG4gICAgb3JpZ2luUGxhY2VIb2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZGVzdGluYXRpb25QbGFjZUhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB2aWFQb2ludHM6IFByb3BUeXBlcy5hcnJheU9mKGxvY2F0aW9uU2hhcGUpLFxuICAgIHVwZGF0ZVZpYVBvaW50czogUHJvcFR5cGVzLmZ1bmMsXG4gICAgaGFuZGxlVmlhUG9pbnRMb2NhdGlvblNlbGVjdGVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBzd2FwT3JkZXI6IFByb3BUeXBlcy5mdW5jLFxuICAgIHNlYXJjaFBhbmVsVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzZWFyY2hDb250ZXh0OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgVVJMX1BFTElBUzogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB9KS5pc1JlcXVpcmVkLFxuICAgIG9uU2VsZWN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQ2xlYXI6IFByb3BUeXBlcy5mdW5jLFxuICAgIGFkZEFuYWx5dGljc0V2ZW50OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBsYW5nOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgZGlzYWJsZUF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gICAgc291cmNlczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gICAgdGFyZ2V0czogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gICAgZmlsdGVyUmVzdWx0czogUHJvcFR5cGVzLmZ1bmMsXG4gICAgaXNNb2JpbGU6IFByb3BUeXBlcy5ib29sLFxuICAgIG9yaWdpbk1vYmlsZUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGRlc3RpbmF0aW9uTW9iaWxlTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgcmVmUG9pbnQ6IGxvY2F0aW9uU2hhcGUsXG4gICAgbW9kZVNldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjb2xvcnM6IFByb3BUeXBlcy5vYmplY3RPZihQcm9wVHlwZXMuc3RyaW5nKSxcbiAgICBnZXRBdXRvU3VnZ2VzdEljb25zOiBQcm9wVHlwZXMub2JqZWN0T2YoUHJvcFR5cGVzLmZ1bmMpLFxuICAgIGZvbnRXZWlnaHRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgbWVkaXVtOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIH0pLFxuICAgIHNob3dTY3JvbGw6IFByb3BUeXBlcy5ib29sLFxuICAgIG9uRm9jdXNDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAgIGlzRW1iZWRkZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIHNob3dTd2FwQ29udHJvbDogUHJvcFR5cGVzLmJvb2wsXG4gICAgc2hvd1ZpYXBvaW50Q29udHJvbDogUHJvcFR5cGVzLmJvb2wsXG4gICAgc2hvd1NsYWNrQ29udHJvbDogUHJvcFR5cGVzLmJvb2wsXG4gICAgdDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgfTtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIG9yaWdpbjogdW5kZWZpbmVkLFxuICAgIGRlc3RpbmF0aW9uOiB1bmRlZmluZWQsXG4gICAgdmlhUG9pbnRzOiBbXSxcbiAgICBvcmlnaW5QbGFjZUhvbGRlcjogJ2dpdmUtb3JpZ2luJyxcbiAgICBkZXN0aW5hdGlvblBsYWNlSG9sZGVyOiAnZ2l2ZS1kZXN0aW5hdGlvbicsXG4gICAgc3dhcE9yZGVyOiB1bmRlZmluZWQsXG4gICAgdXBkYXRlVmlhUG9pbnRzOiAoKSA9PiB7fSxcbiAgICBzZWFyY2hQYW5lbFRleHQ6IHVuZGVmaW5lZCxcbiAgICBzb3VyY2VzOiBbXSxcbiAgICB0YXJnZXRzOiBbXSxcbiAgICBmaWx0ZXJSZXN1bHRzOiB1bmRlZmluZWQsXG4gICAgb25DbGVhcjogdW5kZWZpbmVkLFxuICAgIGdldEF1dG9TdWdnZXN0SWNvbnM6IHVuZGVmaW5lZCxcbiAgICByZWZQb2ludDogdW5kZWZpbmVkLFxuICAgIGFkZEFuYWx5dGljc0V2ZW50OiB1bmRlZmluZWQsXG4gICAgZGlzYWJsZUF1dG9Gb2N1czogZmFsc2UsXG4gICAgaXNNb2JpbGU6IGZhbHNlLFxuICAgIGhhbmRsZVZpYVBvaW50TG9jYXRpb25TZWxlY3RlZDogdW5kZWZpbmVkLFxuICAgIG9yaWdpbk1vYmlsZUxhYmVsOiBudWxsLFxuICAgIGRlc3RpbmF0aW9uTW9iaWxlTGFiZWw6IG51bGwsXG4gICAgbW9kZVNldDogdW5kZWZpbmVkLFxuICAgIGNvbG9yczogZGVmYXVsdENvbG9ycyxcbiAgICBmb250V2VpZ2h0czoge1xuICAgICAgbWVkaXVtOiA1MDAsXG4gICAgfSxcbiAgICBzaG93U2Nyb2xsOiBmYWxzZSxcbiAgICBvbkZvY3VzQ2hhbmdlOiB1bmRlZmluZWQsXG4gICAgaXNFbWJlZGRlZDogZmFsc2UsXG4gICAgc2hvd1N3YXBDb250cm9sOiBmYWxzZSxcbiAgICBzaG93VmlhcG9pbnRDb250cm9sOiBmYWxzZSxcbiAgICBzaG93U2xhY2tDb250cm9sOiBmYWxzZSxcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgYWN0aXZlU2xhY2tJbnB1dHM6IFtdLFxuICAgICAgcmVmczogW10sXG4gICAgfTtcbiAgfVxuXG4gIHN0b3JlUmVmZXJlbmNlID0gcmVmID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHByZXZTdGF0ZSA9PiAoeyByZWZzOiBbLi4ucHJldlN0YXRlLnJlZnMsIHJlZl0gfSkpO1xuICB9O1xuXG4gIGhhbmRsZUZvY3VzQ2hhbmdlID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZGVzdGluYXRpb24gfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKCFkZXN0aW5hdGlvbiB8fCAhZGVzdGluYXRpb24ubGF0KSB7XG4gICAgICB0aGlzLnN0YXRlLnJlZnNbMV0uZm9jdXMoKTtcbiAgICB9XG4gIH07XG5cbiAgdXBkYXRlVmlhUG9pbnRzID0gdmlhUG9pbnRzID0+IHtcbiAgICBpZiAodmlhUG9pbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5wcm9wcy51cGRhdGVWaWFQb2ludHMoW10pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnByb3BzLnVwZGF0ZVZpYVBvaW50cyh2aWFQb2ludHMuZmlsdGVyKHZwID0+ICFpc1ZpYVBvaW50RW1wdHkodnApKSk7XG4gIH07XG5cbiAgaGFuZGxlVG9nZ2xlVmlhUG9pbnRTbGFja0NsaWNrID0gdmlhUG9pbnRJbmRleCA9PiB7XG4gICAgY29uc3QgeyBhY3RpdmVTbGFja0lucHV0cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGFjdGl2ZVNsYWNrSW5wdXRzOiBhY3RpdmVTbGFja0lucHV0cy5pbmNsdWRlcyh2aWFQb2ludEluZGV4KVxuICAgICAgICA/IHVwZGF0ZVZpYVBvaW50U2xhY2soYWN0aXZlU2xhY2tJbnB1dHMsIHZpYVBvaW50SW5kZXgpXG4gICAgICAgIDogYWN0aXZlU2xhY2tJbnB1dHMuY29uY2F0KFt2aWFQb2ludEluZGV4XSksXG4gICAgfSk7XG4gIH07XG5cbiAgaGFuZGxlVmlhUG9pbnRTbGFja1RpbWVTZWxlY3RlZCA9IChzbGFja1RpbWVJblNlY29uZHMsIGkpID0+IHtcbiAgICBpZiAodGhpcy5wcm9wcy5hZGRBbmFseXRpY3NFdmVudCkge1xuICAgICAgdGhpcy5wcm9wcy5hZGRBbmFseXRpY3NFdmVudCh7XG4gICAgICAgIGFjdGlvbjogJ0VkaXRWaWFQb2ludFN0b3BEdXJhdGlvbicsXG4gICAgICAgIGNhdGVnb3J5OiAnSXRpbmVyYXJ5U2V0dGluZ3MnLFxuICAgICAgICBuYW1lOiBzbGFja1RpbWVJblNlY29uZHMgLyA2MCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCB7IHZpYVBvaW50cyB9ID0gdGhpcy5wcm9wcztcbiAgICB2aWFQb2ludHNbaV0ubG9jYXRpb25TbGFjayA9IE51bWJlci5wYXJzZUludChzbGFja1RpbWVJblNlY29uZHMsIDEwKTtcbiAgICB0aGlzLnVwZGF0ZVZpYVBvaW50cyh2aWFQb2ludHMpO1xuICB9O1xuXG4gIGhhbmRsZVZpYVBvaW50TG9jYXRpb25TZWxlY3RlZCA9ICh2aWFQb2ludExvY2F0aW9uLCBpKSA9PiB7XG4gICAgdGhpcy5wcm9wcy5oYW5kbGVWaWFQb2ludExvY2F0aW9uU2VsZWN0ZWQodmlhUG9pbnRMb2NhdGlvbiwgaSk7XG4gIH07XG5cbiAgaGFuZGxlUmVtb3ZlVmlhUG9pbnRDbGljayA9IHZpYVBvaW50SW5kZXggPT4ge1xuICAgIGlmICh0aGlzLnByb3BzLmFkZEFuYWx5dGljc0V2ZW50KSB7XG4gICAgICB0aGlzLnByb3BzLmFkZEFuYWx5dGljc0V2ZW50KHtcbiAgICAgICAgYWN0aW9uOiAnUmVtb3ZlSm91cm5leVZpYVBvaW50JyxcbiAgICAgICAgY2F0ZWdvcnk6ICdJdGluZXJhcnlTZXR0aW5ncycsXG4gICAgICAgIG5hbWU6IG51bGwsXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgeyBhY3RpdmVTbGFja0lucHV0cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCB7IHZpYVBvaW50cyB9ID0gdGhpcy5wcm9wcztcbiAgICB2aWFQb2ludHMuc3BsaWNlKHZpYVBvaW50SW5kZXgsIDEpO1xuICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICB7XG4gICAgICAgIGFjdGl2ZVNsYWNrSW5wdXRzOiB1cGRhdGVWaWFQb2ludFNsYWNrKFxuICAgICAgICAgIGFjdGl2ZVNsYWNrSW5wdXRzLFxuICAgICAgICAgIHZpYVBvaW50SW5kZXgsXG4gICAgICAgICAgdHJ1ZSxcbiAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgICAoKSA9PiB0aGlzLnVwZGF0ZVZpYVBvaW50cyh2aWFQb2ludHMpLFxuICAgICk7XG4gIH07XG5cbiAgaGFuZGxlQWRkVmlhUG9pbnRDbGljayA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5wcm9wcy5hZGRBbmFseXRpY3NFdmVudCkge1xuICAgICAgdGhpcy5wcm9wcy5hZGRBbmFseXRpY3NFdmVudCh7XG4gICAgICAgIGFjdGlvbjogJ0FkZEpvdXJuZXlWaWFQb2ludCcsXG4gICAgICAgIGNhdGVnb3J5OiAnSXRpbmVyYXJ5U2V0dGluZ3MnLFxuICAgICAgICBuYW1lOiAnUXVpY2tTZXR0aW5nc0J1dHRvbicsXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgeyB2aWFQb2ludHMgfSA9IHRoaXMucHJvcHM7XG4gICAgdmlhUG9pbnRzLnB1c2goZ2V0RW1wdHlWaWFQb2ludFBsYWNlSG9sZGVyKCkpO1xuICAgIC8vIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBzdGF0ZSBzbyB0aGF0IHBsYWNlSG9sZGVyIHdpbGwgc2hvdyB1cCBpbiBwYW5lbC5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3Qvbm8tYWNjZXNzLXN0YXRlLWluLXNldHN0YXRlXG4gICAgdGhpcy5zZXRTdGF0ZSh0aGlzLnN0YXRlKTtcbiAgfTtcblxuICBoYW5kbGVTd2FwT3JkZXJDbGljayA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5wcm9wcy5hZGRBbmFseXRpY3NFdmVudCkge1xuICAgICAgdGhpcy5wcm9wcy5hZGRBbmFseXRpY3NFdmVudCh7XG4gICAgICAgIGFjdGlvbjogJ1N3aXRjaEpvdXJuZXlTdGFydEFuZEVuZFBvaW50T3JkZXInLFxuICAgICAgICBjYXRlZ29yeTogJ0l0aW5lcmFyeVNldHRpbmdzJyxcbiAgICAgICAgbmFtZTogbnVsbCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCB7IHZpYVBvaW50cyB9ID0gdGhpcy5wcm9wcztcbiAgICB2aWFQb2ludHMucmV2ZXJzZSgpO1xuICAgIHRoaXMucHJvcHMuc3dhcE9yZGVyKCk7XG4gIH07XG5cbiAgZ2V0U2xhY2tEaXNwbGF5ID0gc2xhY2tJblNlY29uZHMgPT5cbiAgICBgJHtzbGFja0luU2Vjb25kcyAvIDYwfSAke3RoaXMucHJvcHMudCgnbWludXRlLXNob3J0Jywge1xuICAgICAgbG5nOiB0aGlzLnByb3BzLmxhbmcsXG4gICAgfSl9YDtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgb3JpZ2luLFxuICAgICAgc2VhcmNoUGFuZWxUZXh0LFxuICAgICAgc2VhcmNoQ29udGV4dCxcbiAgICAgIGRpc2FibGVBdXRvRm9jdXMsXG4gICAgICB2aWFQb2ludHMsXG4gICAgICBvcmlnaW5Nb2JpbGVMYWJlbCxcbiAgICAgIGRlc3RpbmF0aW9uTW9iaWxlTGFiZWwsXG4gICAgICBmb250V2VpZ2h0cyxcbiAgICAgIG9uRm9jdXNDaGFuZ2UsXG4gICAgICBzaG93U3dhcENvbnRyb2wsXG4gICAgICBzaG93VmlhcG9pbnRDb250cm9sLFxuICAgICAgdCxcbiAgICAgIGxhbmc6IGxuZyxcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IHByaW1hcnkgfSA9IHRoaXMucHJvcHMuY29sb3JzO1xuICAgIGNvbnN0IHsgYWN0aXZlU2xhY2tJbnB1dHMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3Qgc2xhY2tUaW1lID0gZ2V0U2xhY2tUaW1lT3B0aW9ucyh0KTtcbiAgICBjb25zdCBkZWZhdWx0U2xhY2tUaW1lVmFsdWUgPSAwO1xuICAgIGNvbnN0IGdldFZpYVBvaW50U2xhY2tUaW1lT3JEZWZhdWx0ID0gKFxuICAgICAgdmlhUG9pbnQsXG4gICAgICBkZWZhdWx0VmFsdWUgPSBkZWZhdWx0U2xhY2tUaW1lVmFsdWUsXG4gICAgKSA9PiAodmlhUG9pbnQgJiYgdmlhUG9pbnQubG9jYXRpb25TbGFjaykgfHwgZGVmYXVsdFZhbHVlO1xuICAgIGNvbnN0IGlzVmlhUG9pbnRTbGFja1RpbWVJbnB1dEFjdGl2ZSA9IGluZGV4ID0+XG4gICAgICBhY3RpdmVTbGFja0lucHV0cy5pbmNsdWRlcyhpbmRleCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjeChbXG4gICAgICAgICAgc3R5bGVzWydhdXRvc3VnZ2VzdC1wYW5lbCddLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNtYWxsOiB0aGlzLnByb3BzLmlzTW9iaWxlLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pfVxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICctLWNvbG9yJzogcHJpbWFyeSxcbiAgICAgICAgICAnLS1mb250LXdlaWdodC1tZWRpdW0nOiBmb250V2VpZ2h0cy5tZWRpdW0sXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHsnICd9XG4gICAgICAgIHtzZWFyY2hQYW5lbFRleHQgPyAoXG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9e3N0eWxlc1snYXV0b3N1Z2dlc3Qtc2VhcmNocGFuZWwtdGV4dCddfT5cbiAgICAgICAgICAgICAgeycgJ31cbiAgICAgICAgICAgICAge3NlYXJjaFBhbmVsVGV4dH1cbiAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydvcmlnaW4taW5wdXQtY29udGFpbmVyJ119PlxuICAgICAgICAgIDxEVEF1dG9TdWdnZXN0XG4gICAgICAgICAgICBhcHBFbGVtZW50PXt0aGlzLnByb3BzLmFwcEVsZW1lbnR9XG4gICAgICAgICAgICBpY29uPVwib3JpZ2luRWxsaXBzZVwiXG4gICAgICAgICAgICBpZD1cIm9yaWdpblwiXG4gICAgICAgICAgICBhdXRvRm9jdXM9e1xuICAgICAgICAgICAgICBkaXNhYmxlQXV0b0ZvY3VzID09PSB0cnVlXG4gICAgICAgICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgICAgICAgIDogIXRoaXMucHJvcHMuaXNNb2JpbGUgJiYgIW9yaWdpbj8ubGF0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdG9yZVJlZj17dGhpcy5zdG9yZVJlZmVyZW5jZX1cbiAgICAgICAgICAgIHJlZlBvaW50PXt0aGlzLnByb3BzLnJlZlBvaW50fVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtnZXRMb2NhdGlvblR5cGUob3JpZ2luKX1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPXt0aGlzLnByb3BzLm9yaWdpblBsYWNlSG9sZGVyfVxuICAgICAgICAgICAgdmFsdWU9e3ZhbHVlKG9yaWdpbil9XG4gICAgICAgICAgICBzZWFyY2hDb250ZXh0PXtzZWFyY2hDb250ZXh0fVxuICAgICAgICAgICAgZ2V0QXV0b1N1Z2dlc3RJY29ucz17dGhpcy5wcm9wcy5nZXRBdXRvU3VnZ2VzdEljb25zfVxuICAgICAgICAgICAgb25TZWxlY3Q9e3RoaXMucHJvcHMub25TZWxlY3R9XG4gICAgICAgICAgICBvbkNsZWFyPXt0aGlzLnByb3BzLm9uQ2xlYXJ9XG4gICAgICAgICAgICBmb2N1c0NoYW5nZT17b25Gb2N1c0NoYW5nZSB8fCB0aGlzLmhhbmRsZUZvY3VzQ2hhbmdlfVxuICAgICAgICAgICAgbGFuZz17dGhpcy5wcm9wcy5sYW5nfVxuICAgICAgICAgICAgc291cmNlcz17dGhpcy5wcm9wcy5zb3VyY2VzfVxuICAgICAgICAgICAgdGFyZ2V0cz17dGhpcy5wcm9wcy50YXJnZXRzfVxuICAgICAgICAgICAgZmlsdGVyUmVzdWx0cz17dGhpcy5wcm9wcy5maWx0ZXJSZXN1bHRzfVxuICAgICAgICAgICAgaXNNb2JpbGU9e3RoaXMucHJvcHMuaXNNb2JpbGV9XG4gICAgICAgICAgICBjb2xvcnM9e3RoaXMucHJvcHMuY29sb3JzfVxuICAgICAgICAgICAgbW9iaWxlTGFiZWw9e29yaWdpbk1vYmlsZUxhYmVsfVxuICAgICAgICAgICAgZm9udFdlaWdodHM9e3RoaXMucHJvcHMuZm9udFdlaWdodHN9XG4gICAgICAgICAgICBtb2RlU2V0PXt0aGlzLnByb3BzLm1vZGVTZXR9XG4gICAgICAgICAgICBzaG93U2Nyb2xsPXt0aGlzLnByb3BzLnNob3dTY3JvbGx9XG4gICAgICAgICAgICBpc0VtYmVkZGVkPXt0aGlzLnByb3BzLmlzRW1iZWRkZWR9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7KHNob3dTd2FwQ29udHJvbCB8fCBzaG93VmlhcG9pbnRDb250cm9sKSAmJiAoXG4gICAgICAgICAgICA8SXRpbmVyYXJ5U2VhcmNoQ29udHJvbFxuICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5vcHBvc2l0ZX1cbiAgICAgICAgICAgICAgZW5hYmxlZD17c2hvd1N3YXBDb250cm9sfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLmhhbmRsZVN3YXBPcmRlckNsaWNrKCl9XG4gICAgICAgICAgICAgIG9uS2V5UHJlc3M9e2UgPT5cbiAgICAgICAgICAgICAgICBpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQoZSkgJiYgdGhpcy5oYW5kbGVTd2FwT3JkZXJDbGljaygpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnc3dhcC1vcmRlci1idXR0b24tbGFiZWwnLCB7IGxuZyB9KX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEljb24gaW1nPVwib3Bwb3NpdGVcIiBjb2xvcj17cHJpbWFyeX0gLz5cbiAgICAgICAgICAgIDwvSXRpbmVyYXJ5U2VhcmNoQ29udHJvbD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge3ZpYVBvaW50cy5sZW5ndGggPT09IDAgJiYgKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ3JlY3RhbmdsZS1jb250YWluZXInXX0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnJlY3RhbmdsZX0gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgICAgPFJlYWN0U29ydGFibGVcbiAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1sndmlhcG9pbnRzLWNvbnRhaW5lciddfVxuICAgICAgICAgIGxpc3Q9e3ZpYVBvaW50c31cbiAgICAgICAgICBoYW5kbGU9e2AuJHtzdHlsZXNbJ3ZpYXBvaW50LWJlZm9yZSddfWB9XG4gICAgICAgICAgYW5pbWF0aW9uPXsyMDB9XG4gICAgICAgICAgZGlzYWJsZWQ9e3ZpYVBvaW50cy5sZW5ndGggPD0gMX1cbiAgICAgICAgICBzZXRMaXN0PXtpdGVtcyA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdWaWFQb2ludHMgPSBpdGVtcy5maWx0ZXIodnAgPT4gIWlzVmlhUG9pbnRFbXB0eSh2cCkpO1xuICAgICAgICAgICAgaWYgKG5ld1ZpYVBvaW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHRoaXMucHJvcHMudXBkYXRlVmlhUG9pbnRzKG5ld1ZpYVBvaW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHt2aWFQb2ludHMubWFwKChvLCBpKSA9PiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goc3R5bGVzWyd2aWFwb2ludC1jb250YWluZXInXSl9XG4gICAgICAgICAgICAgIGtleT17YHZpYXBvaW50LSR7aX1gfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ2xpZ2h0LWdyYXktYmFja2dyb3VuZCddfT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnJvd30+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWyd2aWFwb2ludC1iZWZvcmUnXX1cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3ZpYVBvaW50cy5sZW5ndGggPiAxID8geyBjdXJzb3I6ICdtb3ZlJyB9IDoge319XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt2aWFQb2ludHMubGVuZ3RoID4gMSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgPEljb24gaW1nPVwiZWxsaXBzaXNcIiByb3RhdGU9ezkwfSBjb2xvcj17cHJpbWFyeX0gLz5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2N4KFxuICAgICAgICAgICAgICAgICAgICAgIGAke3N0eWxlc1sndmlhcG9pbnQtaW5wdXQtY29udGFpbmVyJ119ICR7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZXNbYHZpYXBvaW50LSR7aSArIDF9YF1cbiAgICAgICAgICAgICAgICAgICAgICB9YCxcbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPERUQXV0b1N1Z2dlc3RcbiAgICAgICAgICAgICAgICAgICAgICBhcHBFbGVtZW50PXt0aGlzLnByb3BzLmFwcEVsZW1lbnR9XG4gICAgICAgICAgICAgICAgICAgICAgaWNvbj1cIm1hcE1hcmtlclwiXG4gICAgICAgICAgICAgICAgICAgICAgaWQ9XCJ2aWEtcG9pbnRcIlxuICAgICAgICAgICAgICAgICAgICAgIGFyaWFMYWJlbD17dCgndmlhLXBvaW50LWluZGV4Jywge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGkgKyAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgbG5nLFxuICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICAgIGF1dG9Gb2N1cz17XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQXV0b0ZvY3VzID09PSB0cnVlID8gZmFsc2UgOiAhdGhpcy5wcm9wcy5pc01vYmlsZVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInZpYS1wb2ludFwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidmlhcG9pbnRcIlxuICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaENvbnRleHQ9e3NlYXJjaENvbnRleHR9XG4gICAgICAgICAgICAgICAgICAgICAgcmVmUG9pbnQ9e3RoaXMucHJvcHMucmVmUG9pbnR9XG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9eyhvICYmIG8uYWRkcmVzcykgfHwgJyd9XG4gICAgICAgICAgICAgICAgICAgICAgb25TZWxlY3Q9e3RoaXMucHJvcHMub25TZWxlY3R9XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGVhcj17dGhpcy5wcm9wcy5vbkNsZWFyfVxuICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVZpYVBvaW50cz17aXRlbSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVWaWFQb2ludExvY2F0aW9uU2VsZWN0ZWQoaXRlbSwgaSlcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgbGFuZz17dGhpcy5wcm9wcy5sYW5nfVxuICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZXM9e3RoaXMucHJvcHMuc291cmNlc31cbiAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRzPXt0aGlzLnByb3BzLnRhcmdldHN9XG4gICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUmVzdWx0cz17dGhpcy5wcm9wcy5maWx0ZXJSZXN1bHRzfVxuICAgICAgICAgICAgICAgICAgICAgIGdldEF1dG9TdWdnZXN0SWNvbnM9e3RoaXMucHJvcHMuZ2V0QXV0b1N1Z2dlc3RJY29uc31cbiAgICAgICAgICAgICAgICAgICAgICBpc01vYmlsZT17dGhpcy5wcm9wcy5pc01vYmlsZX1cbiAgICAgICAgICAgICAgICAgICAgICBmb250V2VpZ2h0cz17dGhpcy5wcm9wcy5mb250V2VpZ2h0c31cbiAgICAgICAgICAgICAgICAgICAgICBtb2RlU2V0PXt0aGlzLnByb3BzLm1vZGVTZXR9XG4gICAgICAgICAgICAgICAgICAgICAgY29sb3JzPXt0aGlzLnByb3BzLmNvbG9yc31cbiAgICAgICAgICAgICAgICAgICAgICBzaG93U2Nyb2xsPXt0aGlzLnByb3BzLnNob3dTY3JvbGx9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIHt0aGlzLnByb3BzLnNob3dTbGFja0NvbnRyb2wgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8SXRpbmVyYXJ5U2VhcmNoQ29udHJvbFxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydhZGQtdmlhLXBvaW50LXNsYWNrJ119XG4gICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZD17dGhpcy5wcm9wcy5zaG93VmlhcG9pbnRDb250cm9sfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMuaGFuZGxlVG9nZ2xlVmlhUG9pbnRTbGFja0NsaWNrKGkpfVxuICAgICAgICAgICAgICAgICAgICAgIG9uS2V5UHJlc3M9e2UgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudChlKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVUb2dnbGVWaWFQb2ludFNsYWNrQ2xpY2soaSlcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dChcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzVmlhUG9pbnRTbGFja1RpbWVJbnB1dEFjdGl2ZShpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZScsXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGluZGV4OiBpICsgMSwgbG5nIH0sXG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICB3aWRlXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBpbWc9XCJ0aW1lXCIgY29sb3I9e3ByaW1hcnl9IC8+XG4gICAgICAgICAgICAgICAgICAgIDwvSXRpbmVyYXJ5U2VhcmNoQ29udHJvbD5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgeyFpc1ZpYVBvaW50U2xhY2tUaW1lSW5wdXRBY3RpdmUoaSkgJiZcbiAgICAgICAgICAgICAgICAgIHZpYVBvaW50c1tpXSAmJlxuICAgICAgICAgICAgICAgICAgdmlhUG9pbnRzW2ldLmxvY2F0aW9uU2xhY2sgPiAwICYmIChcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXNbJ3ZpYXBvaW50LXNsYWNrLXRpbWUnXX0+e2Ake3QoXG4gICAgICAgICAgICAgICAgICAgICAgJ3ZpYXBvaW50LXNsYWNrLWFtb3VudCcsXG4gICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG5nLFxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICl9OiAke3RoaXMuZ2V0U2xhY2tEaXNwbGF5KFxuICAgICAgICAgICAgICAgICAgICAgIHZpYVBvaW50c1tpXS5sb2NhdGlvblNsYWNrLFxuICAgICAgICAgICAgICAgICAgICApfWB9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2N4KHN0eWxlc1snaW5wdXQtdmlhcG9pbnQtc2xhY2stY29udGFpbmVyJ10sIHtcbiAgICAgICAgICAgICAgICAgICAgY29sbGFwc2VkOiAhaXNWaWFQb2ludFNsYWNrVGltZUlucHV0QWN0aXZlKGkpLFxuICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snc2VsZWN0LXdyYXBwZXInXX0+XG4gICAgICAgICAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICBpZD17YHZpYXBvaW50LXNsYWNrLSR7aX1gfVxuICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPXt0KCd2aWFwb2ludC1zbGFjay1hbW91bnQnLCB7IGxuZyB9KX1cbiAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtzbGFja1RpbWV9XG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2dldFZpYVBvaW50U2xhY2tUaW1lT3JEZWZhdWx0KHZpYVBvaW50c1tpXSl9XG4gICAgICAgICAgICAgICAgICAgICAgdmlhUG9pbnRJbmRleD17aX1cbiAgICAgICAgICAgICAgICAgICAgICBpY29uPXtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7c3R5bGVzWydjb21ib2JveC1pY29uJ119ICR7c3R5bGVzWyd0aW1lLWlucHV0LWljb24nXX1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBpbWc9XCJ0aW1lXCIgY29sb3I9e3ByaW1hcnl9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIG9uU2xhY2tUaW1lU2VsZWN0ZWQ9e3RoaXMuaGFuZGxlVmlhUG9pbnRTbGFja1RpbWVTZWxlY3RlZH1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPEl0aW5lcmFyeVNlYXJjaENvbnRyb2xcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1sncmVtb3ZlLXZpYS1wb2ludCddfVxuICAgICAgICAgICAgICAgIGVuYWJsZWQ9e3RoaXMucHJvcHMuc2hvd1ZpYXBvaW50Q29udHJvbH1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLmhhbmRsZVJlbW92ZVZpYVBvaW50Q2xpY2soaSl9XG4gICAgICAgICAgICAgICAgb25LZXlQcmVzcz17ZSA9PlxuICAgICAgICAgICAgICAgICAgaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50KGUpICYmXG4gICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVJlbW92ZVZpYVBvaW50Q2xpY2soaSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgncmVtb3ZlLXZpYS1idXR0b24tbGFiZWwnLCB7XG4gICAgICAgICAgICAgICAgICBpbmRleDogaSArIDEsXG4gICAgICAgICAgICAgICAgICBsbmcsXG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8SWNvbiBpbWc9XCJ0cmFzaFwiIGNvbG9yPXtwcmltYXJ5fSAvPlxuICAgICAgICAgICAgICA8L0l0aW5lcmFyeVNlYXJjaENvbnRyb2w+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9SZWFjdFNvcnRhYmxlPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydkZXN0aW5hdGlvbi1pbnB1dC1jb250YWluZXInXX0+XG4gICAgICAgICAgPERUQXV0b1N1Z2dlc3RcbiAgICAgICAgICAgIGFwcEVsZW1lbnQ9e3RoaXMucHJvcHMuYXBwRWxlbWVudH1cbiAgICAgICAgICAgIGljb249XCJtYXBNYXJrZXJcIlxuICAgICAgICAgICAgaWQ9XCJkZXN0aW5hdGlvblwiXG4gICAgICAgICAgICBhdXRvRm9jdXM9e1xuICAgICAgICAgICAgICBkaXNhYmxlQXV0b0ZvY3VzID09PSB0cnVlXG4gICAgICAgICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgICAgICAgIDogIXRoaXMucHJvcHMuaXNNb2JpbGUgJiYgIU51bWJlci5pc05hTihvcmlnaW4/LmxhdClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0b3JlUmVmPXt0aGlzLnN0b3JlUmVmZXJlbmNlfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3RoaXMucHJvcHMuZGVzdGluYXRpb25QbGFjZUhvbGRlcn1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Z2V0TG9jYXRpb25UeXBlKHRoaXMucHJvcHMuZGVzdGluYXRpb24pfVxuICAgICAgICAgICAgZ2V0QXV0b1N1Z2dlc3RJY29ucz17dGhpcy5wcm9wcy5nZXRBdXRvU3VnZ2VzdEljb25zfVxuICAgICAgICAgICAgc2VhcmNoQ29udGV4dD17c2VhcmNoQ29udGV4dH1cbiAgICAgICAgICAgIG9uU2VsZWN0PXt0aGlzLnByb3BzLm9uU2VsZWN0fVxuICAgICAgICAgICAgb25DbGVhcj17dGhpcy5wcm9wcy5vbkNsZWFyfVxuICAgICAgICAgICAgcmVmUG9pbnQ9e3RoaXMucHJvcHMucmVmUG9pbnR9XG4gICAgICAgICAgICB2YWx1ZT17dmFsdWUodGhpcy5wcm9wcy5kZXN0aW5hdGlvbil9XG4gICAgICAgICAgICBsYW5nPXt0aGlzLnByb3BzLmxhbmd9XG4gICAgICAgICAgICBzb3VyY2VzPXt0aGlzLnByb3BzLnNvdXJjZXN9XG4gICAgICAgICAgICB0YXJnZXRzPXt0aGlzLnByb3BzLnRhcmdldHN9XG4gICAgICAgICAgICBmaWx0ZXJSZXN1bHRzPXt0aGlzLnByb3BzLmZpbHRlclJlc3VsdHN9XG4gICAgICAgICAgICBpc01vYmlsZT17dGhpcy5wcm9wcy5pc01vYmlsZX1cbiAgICAgICAgICAgIG1vYmlsZUxhYmVsPXtkZXN0aW5hdGlvbk1vYmlsZUxhYmVsfVxuICAgICAgICAgICAgZm9udFdlaWdodHM9e3RoaXMucHJvcHMuZm9udFdlaWdodHN9XG4gICAgICAgICAgICBtb2RlU2V0PXt0aGlzLnByb3BzLm1vZGVTZXR9XG4gICAgICAgICAgICBjb2xvcnM9e3RoaXMucHJvcHMuY29sb3JzfVxuICAgICAgICAgICAgc2hvd1Njcm9sbD17dGhpcy5wcm9wcy5zaG93U2Nyb2xsfVxuICAgICAgICAgICAgaXNFbWJlZGRlZD17dGhpcy5wcm9wcy5pc0VtYmVkZGVkfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgeyhzaG93U3dhcENvbnRyb2wgfHwgc2hvd1ZpYXBvaW50Q29udHJvbCkgJiYgKFxuICAgICAgICAgICAgPEl0aW5lcmFyeVNlYXJjaENvbnRyb2xcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjeChzdHlsZXNbJ2FkZC12aWEtcG9pbnQnXSwgc3R5bGVzLm1vcmUsIHtcbiAgICAgICAgICAgICAgICBjb2xsYXBzZWQ6IHZpYVBvaW50cy5sZW5ndGggPiA0LFxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgZW5hYmxlZD17c2hvd1ZpYXBvaW50Q29udHJvbCAmJiB2aWFQb2ludHMubGVuZ3RoID09PSAwfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLmhhbmRsZUFkZFZpYVBvaW50Q2xpY2soKX1cbiAgICAgICAgICAgICAgb25LZXlQcmVzcz17ZSA9PlxuICAgICAgICAgICAgICAgIGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudChlKSAmJiB0aGlzLmhhbmRsZUFkZFZpYVBvaW50Q2xpY2soKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ2FkZC12aWEtYnV0dG9uLWxhYmVsJywgeyBsbmcgfSl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxJY29uXG4gICAgICAgICAgICAgICAgaW1nPVwidmlhcG9pbnRcIlxuICAgICAgICAgICAgICAgIHdpZHRoPXsxLjI1fVxuICAgICAgICAgICAgICAgIGhlaWdodD17MS4zNzV9XG4gICAgICAgICAgICAgICAgY29sb3I9e3ByaW1hcnl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0l0aW5lcmFyeVNlYXJjaENvbnRyb2w+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IERUQXV0b3N1Z2dlc3RQYW5lbFdpdGhUcmFuc2xhdGlvbiA9IHdpdGhUcmFuc2xhdGlvbigpKERUQXV0b3N1Z2dlc3RQYW5lbCk7XG5cbmV4cG9ydCBkZWZhdWx0IHByb3BzID0+IHtcbiAgcmV0dXJuIChcbiAgICA8STE4bmV4dFByb3ZpZGVyIGkxOG49e2kxOG59PlxuICAgICAgPERUQXV0b3N1Z2dlc3RQYW5lbFdpdGhUcmFuc2xhdGlvbiB7Li4ucHJvcHN9IC8+XG4gICAgPC9JMThuZXh0UHJvdmlkZXI+XG4gICk7XG59O1xuIl0sIm5hbWVzIjpbIm9iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJTZWxlY3QiLCJ2YWx1ZSIsIm9wdGlvbnMiLCJvblNsYWNrVGltZVNlbGVjdGVkIiwidmlhUG9pbnRJbmRleCIsImlkIiwibGFiZWwiLCJpY29uIiwibGFiZWxJZCIsInNlbGVjdGVkSXRlbSIsImZpbmQiLCJvcHRpb24iLCJpc09wZW4iLCJnZXRUb2dnbGVCdXR0b25Qcm9wcyIsImdldE1lbnVQcm9wcyIsImdldEl0ZW1Qcm9wcyIsImdldExhYmVsUHJvcHMiLCJoaWdobGlnaHRlZEluZGV4IiwidXNlU2VsZWN0IiwiaXRlbXMiLCJpdGVtVG9TdHJpbmciLCJpdGVtIiwiZGlzcGxheU5hbWUiLCJvblNlbGVjdGVkSXRlbUNoYW5nZSIsIm5ld0l0ZW0iLCJSZWFjdCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJzdHlsZXMiLCJjb250YWluZXIiLCJPYmplY3QiLCJhc3NpZ24iLCJpbnB1dCIsImN4Iiwic3VnZ2VzdGlvbnNDb250YWluZXJPcGVuIiwibWFwIiwiaW5kZXgiLCJrZXkiLCJzdWdnZXN0aW9uIiwic3VnZ2VzdGlvbkhpZ2hsaWdodGVkIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwibnVtYmVyIiwiaXNSZXF1aXJlZCIsImZ1bmMiLCJhcnJheU9mIiwic2hhcGUiLCJzdHJpbmciLCJub2RlIiwidHJhbnNsYXRpb25zIiwiZGUiLCJ0cmFuc2xhdGlvbiIsImVuIiwiZmkiLCJwbCIsInN2IiwiaTE4biIsImNyZWF0ZUluc3RhbmNlIiwiZmFsbGJhY2tMbmciLCJyZXNvdXJjZXMiLCJkZWZhdWx0TlMiLCJyZWFjdCIsInVzZVN1c3BlbnNlIiwiaW5pdCIsImdldEVtcHR5VmlhUG9pbnRQbGFjZUhvbGRlciIsImlzVmlhUG9pbnRFbXB0eSIsInZpYVBvaW50IiwidW5kZWZpbmVkIiwiaXNFbXB0eSIsImtleXMiLCJsZW5ndGgiLCJpbmNsdWRlcyIsIkl0aW5lcmFyeVNlYXJjaENvbnRyb2wiLCJfcmVmIiwiY2hpbGRyZW4iLCJlbmFibGVkIiwib25DbGljayIsIm9uS2V5UHJlc3MiLCJ3aWRlIiwicmVzdCIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIl9leGNsdWRlZCIsInN0eWxlIiwicm9sZSIsInRhYkluZGV4IiwidXBkYXRlVmlhUG9pbnRTbGFjayIsImFjdGl2ZVZpYVBvaW50U2xhY2tzIiwidXBkYXRlZFZpYVBvaW50SW5kZXgiLCJ2aWFQb2ludFJlbW92ZWQiLCJmb3VuZEF0SW5kZXgiLCJpbmRleE9mIiwic3BsaWNlIiwiaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50IiwiZXZlbnQiLCJzcGFjZSIsImVudGVyIiwid2hpY2giLCJrZXlDb2RlIiwiY29uY2F0IiwicHJldmVudERlZmF1bHQiLCJsb2NhdGlvbiIsImFkZHJlc3MiLCJncHMiLCJyZWFkeSIsImdldExvY2F0aW9uVHlwZSIsImdldFNsYWNrVGltZU9wdGlvbnMiLCJ0IiwidGltZU9wdGlvbnMiLCJpIiwidmFsdWVJbk1pbnV0ZXMiLCJwdXNoIiwiYm9vbCIsImRlZmF1bHRQcm9wcyIsImxvY2F0aW9uU2hhcGUiLCJsYXQiLCJsb24iLCJsb2NhdGlvblNsYWNrIiwiRFRBdXRvc3VnZ2VzdFBhbmVsIiwiQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsIl9kZWZpbmVQcm9wZXJ0eSIsInJlZiIsInNldFN0YXRlIiwicHJldlN0YXRlIiwicmVmcyIsImRlc3RpbmF0aW9uIiwic3RhdGUiLCJmb2N1cyIsInZpYVBvaW50cyIsInVwZGF0ZVZpYVBvaW50cyIsImZpbHRlciIsInZwIiwiYWN0aXZlU2xhY2tJbnB1dHMiLCJzbGFja1RpbWVJblNlY29uZHMiLCJhZGRBbmFseXRpY3NFdmVudCIsImFjdGlvbiIsImNhdGVnb3J5IiwibmFtZSIsIk51bWJlciIsInBhcnNlSW50IiwidmlhUG9pbnRMb2NhdGlvbiIsImhhbmRsZVZpYVBvaW50TG9jYXRpb25TZWxlY3RlZCIsInJldmVyc2UiLCJzd2FwT3JkZXIiLCJzbGFja0luU2Vjb25kcyIsImxuZyIsImxhbmciLCJyZW5kZXIiLCJvcmlnaW4iLCJzZWFyY2hQYW5lbFRleHQiLCJzZWFyY2hDb250ZXh0IiwiZGlzYWJsZUF1dG9Gb2N1cyIsIm9yaWdpbk1vYmlsZUxhYmVsIiwiZGVzdGluYXRpb25Nb2JpbGVMYWJlbCIsImZvbnRXZWlnaHRzIiwib25Gb2N1c0NoYW5nZSIsInNob3dTd2FwQ29udHJvbCIsInNob3dWaWFwb2ludENvbnRyb2wiLCJwcmltYXJ5IiwiY29sb3JzIiwic2xhY2tUaW1lIiwiZGVmYXVsdFNsYWNrVGltZVZhbHVlIiwiZ2V0VmlhUG9pbnRTbGFja1RpbWVPckRlZmF1bHQiLCJkZWZhdWx0VmFsdWUiLCJpc1ZpYVBvaW50U2xhY2tUaW1lSW5wdXRBY3RpdmUiLCJpc01vYmlsZSIsIm1lZGl1bSIsIkRUQXV0b1N1Z2dlc3QiLCJhcHBFbGVtZW50IiwiYXV0b0ZvY3VzIiwic3RvcmVSZWYiLCJzdG9yZVJlZmVyZW5jZSIsInJlZlBvaW50IiwicGxhY2Vob2xkZXIiLCJvcmlnaW5QbGFjZUhvbGRlciIsImdldEF1dG9TdWdnZXN0SWNvbnMiLCJvblNlbGVjdCIsIm9uQ2xlYXIiLCJmb2N1c0NoYW5nZSIsImhhbmRsZUZvY3VzQ2hhbmdlIiwic291cmNlcyIsInRhcmdldHMiLCJmaWx0ZXJSZXN1bHRzIiwibW9iaWxlTGFiZWwiLCJtb2RlU2V0Iiwic2hvd1Njcm9sbCIsImlzRW1iZWRkZWQiLCJvcHBvc2l0ZSIsImhhbmRsZVN3YXBPcmRlckNsaWNrIiwiZSIsIkljb24iLCJpbWciLCJjb2xvciIsInJlY3RhbmdsZSIsIlJlYWN0U29ydGFibGUiLCJsaXN0IiwiaGFuZGxlIiwiYW5pbWF0aW9uIiwiZGlzYWJsZWQiLCJzZXRMaXN0IiwibmV3VmlhUG9pbnRzIiwibyIsInJvdyIsImN1cnNvciIsInJvdGF0ZSIsImFyaWFMYWJlbCIsImhhbmRsZVZpYVBvaW50cyIsInNob3dTbGFja0NvbnRyb2wiLCJoYW5kbGVUb2dnbGVWaWFQb2ludFNsYWNrQ2xpY2siLCJnZXRTbGFja0Rpc3BsYXkiLCJoYW5kbGVWaWFQb2ludFNsYWNrVGltZVNlbGVjdGVkIiwiaGFuZGxlUmVtb3ZlVmlhUG9pbnRDbGljayIsImlzTmFOIiwiZGVzdGluYXRpb25QbGFjZUhvbGRlciIsIm1vcmUiLCJoYW5kbGVBZGRWaWFQb2ludENsaWNrIiwid2lkdGgiLCJoZWlnaHQiLCJkZWZhdWx0Q29sb3JzIiwiVVJMX1BFTElBUyIsIm9iamVjdE9mIiwiRFRBdXRvc3VnZ2VzdFBhbmVsV2l0aFRyYW5zbGF0aW9uIiwid2l0aFRyYW5zbGF0aW9uIiwiSTE4bmV4dFByb3ZpZGVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7RUFBQSxTQUFTLE9BQU8sQ0FBQyxDQUFDLEVBQUU7RUFDcEIsRUFBRSx5QkFBeUI7O0VBRTNCLEVBQUUsT0FBTyxPQUFPLEdBQUcsVUFBVSxJQUFJLE9BQU8sTUFBTSxJQUFJLFFBQVEsSUFBSSxPQUFPLE1BQU0sQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLEVBQUU7RUFDcEcsSUFBSSxPQUFPLE9BQU8sQ0FBQztFQUNuQixFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsRUFBRTtFQUNuQixJQUFJLE9BQU8sQ0FBQyxJQUFJLFVBQVUsSUFBSSxPQUFPLE1BQU0sSUFBSSxDQUFDLENBQUMsV0FBVyxLQUFLLE1BQU0sSUFBSSxDQUFDLEtBQUssTUFBTSxDQUFDLFNBQVMsR0FBRyxRQUFRLEdBQUcsT0FBTyxDQUFDO0VBQ3ZILEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7RUFDZjs7RUNQQSxTQUFTLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQzNCLEVBQUUsSUFBSSxRQUFRLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQztFQUM1QyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO0VBQy9CLEVBQUUsSUFBSSxNQUFNLEtBQUssQ0FBQyxFQUFFO0VBQ3BCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBYyxDQUFDO0VBQ3JDLElBQUksSUFBSSxRQUFRLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQztFQUN4QyxJQUFJLE1BQU0sSUFBSSxTQUFTLENBQUMsOENB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