| 1 |
"use strict"; |
| 2 |
|
| 3 |
/** |
| 4 |
* Applies effects in Canvas, after changing some settings in the right sidebar in BFB. |
| 5 |
* |
| 6 |
* @file ../includes/page-form-builder/form-settings/_src/settings_effects.js |
| 7 |
*/ |
| 8 |
(function (w, d) { |
| 9 |
'use strict'; |
| 10 |
|
| 11 |
const Effects = w.WPBC_BFB_Settings_Effects = w.WPBC_BFB_Settings_Effects || {}; |
| 12 |
const map = Effects.map = Effects.map || Object.create(null); |
| 13 |
Effects.register = function (key, fn) { |
| 14 |
if (key && typeof fn === 'function') { |
| 15 |
map[String(key)] = fn; |
| 16 |
} |
| 17 |
}; |
| 18 |
function get_canvas_root() { |
| 19 |
return d.querySelector('#wpbc_bfb__pages_container') || d.querySelector('.wpbc_bfb__panel--preview') || d.getElementById('wpbc_bfb__preview') || d.body || d.documentElement; |
| 20 |
} |
| 21 |
Effects.apply_one = function (key, value, ctx) { |
| 22 |
const fn = map[String(key)]; |
| 23 |
if (!fn) { |
| 24 |
return; |
| 25 |
} |
| 26 |
try { |
| 27 |
fn(value, Object.assign({ |
| 28 |
key, |
| 29 |
value, |
| 30 |
canvas: get_canvas_root() |
| 31 |
}, ctx || {})); |
| 32 |
} catch (e) { |
| 33 |
// keep silent in production if you prefer |
| 34 |
console.error('WPBC Effects error:', key, e); |
| 35 |
} |
| 36 |
}; |
| 37 |
Effects.apply_all = function (options, ctx) { |
| 38 |
if (!options || typeof options !== 'object') { |
| 39 |
return; |
| 40 |
} |
| 41 |
Object.keys(options).forEach(function (k) { |
| 42 |
Effects.apply_one(k, options[k], Object.assign({ |
| 43 |
options: options |
| 44 |
}, ctx || {})); |
| 45 |
}); |
| 46 |
}; |
| 47 |
|
| 48 |
/** |
| 49 |
* Normalize settings pack to the minimum required shape: |
| 50 |
* { options: {}, css_vars: {} } |
| 51 |
* |
| 52 |
* @param {*} pack |
| 53 |
* @return {{options:Object, css_vars:Object, bfb_options?:Object}|null} |
| 54 |
*/ |
| 55 |
Effects.normalize_pack = function (pack) { |
| 56 |
if (pack === null || typeof pack === 'undefined' || pack === '') { |
| 57 |
return null; |
| 58 |
} |
| 59 |
|
| 60 |
// Parse JSON string if needed. |
| 61 |
if (typeof pack === 'string') { |
| 62 |
try { |
| 63 |
pack = JSON.parse(pack); |
| 64 |
} catch (_e) { |
| 65 |
return null; |
| 66 |
} |
| 67 |
} |
| 68 |
if (!pack || typeof pack !== 'object') { |
| 69 |
return null; |
| 70 |
} |
| 71 |
|
| 72 |
// If user passed just {key:value} options map, wrap it. |
| 73 |
const has_shape = Object.prototype.hasOwnProperty.call(pack, 'options') || Object.prototype.hasOwnProperty.call(pack, 'css_vars') || Object.prototype.hasOwnProperty.call(pack, 'bfb_options'); |
| 74 |
if (!has_shape) { |
| 75 |
pack = { |
| 76 |
options: pack, |
| 77 |
css_vars: {} |
| 78 |
}; |
| 79 |
} |
| 80 |
if (!pack.options || typeof pack.options !== 'object') { |
| 81 |
pack.options = {}; |
| 82 |
} |
| 83 |
if (!pack.css_vars || typeof pack.css_vars !== 'object') { |
| 84 |
pack.css_vars = {}; |
| 85 |
} |
| 86 |
|
| 87 |
// bfb_options is optional; keep if valid. |
| 88 |
if (pack.bfb_options && typeof pack.bfb_options !== 'object') { |
| 89 |
delete pack.bfb_options; |
| 90 |
} |
| 91 |
return pack; |
| 92 |
}; |
| 93 |
|
| 94 |
/** |
| 95 |
* Re-apply settings effects after a canvas rebuild / structure load. |
| 96 |
* |
| 97 |
* This is needed because structure loading can replace DOM nodes that effects target. |
| 98 |
* |
| 99 |
* @param {*} settings_pack string|object settings_json pack (or plain options map) |
| 100 |
* @param {Object} [ctx] |
| 101 |
*/ |
| 102 |
Effects.reapply_after_canvas = function (settings_pack, ctx) { |
| 103 |
const pack = Effects.normalize_pack(settings_pack); |
| 104 |
if (!pack) { |
| 105 |
return; |
| 106 |
} |
| 107 |
|
| 108 |
// Apply immediately (best effort). |
| 109 |
Effects.apply_all(pack.options, Object.assign({ |
| 110 |
source: 'reapply_after_canvas' |
| 111 |
}, ctx || {})); |
| 112 |
wpbc_bfb_global_form_style__apply(null, Object.assign({ |
| 113 |
source: 'reapply_after_canvas' |
| 114 |
}, ctx || {})); |
| 115 |
|
| 116 |
// Some modules/hydration may run shortly after; do one more pass. |
| 117 |
setTimeout(function () { |
| 118 |
Effects.apply_all(pack.options, Object.assign({ |
| 119 |
source: 'reapply_after_canvas_delayed' |
| 120 |
}, ctx || {})); |
| 121 |
wpbc_bfb_global_form_style__apply(null, Object.assign({ |
| 122 |
source: 'reapply_after_canvas_delayed' |
| 123 |
}, ctx || {})); |
| 124 |
}, 60); |
| 125 |
}; |
| 126 |
|
| 127 |
// 1) Apply from AJAX load. |
| 128 |
d.addEventListener('wpbc:bfb:form_settings:apply', function (e) { |
| 129 |
const pack = e && e.detail ? e.detail.settings : null; |
| 130 |
if (pack && pack.options) { |
| 131 |
Effects.apply_all(pack.options, { |
| 132 |
source: 'apply' |
| 133 |
}); |
| 134 |
} |
| 135 |
wpbc_bfb_global_form_style__apply(null, { |
| 136 |
source: 'apply-global-style' |
| 137 |
}); |
| 138 |
}); |
| 139 |
|
| 140 |
// 2) Apply live from UI change (delegated). |
| 141 |
function css_escape(value) { |
| 142 |
const v = String(value == null ? '' : value); |
| 143 |
if (w.CSS && typeof w.CSS.escape === 'function') { |
| 144 |
return w.CSS.escape(v); |
| 145 |
} |
| 146 |
return v.replace(/[^a-zA-Z0-9_\-]/g, '\\$&'); |
| 147 |
} |
| 148 |
function find_fs_root(el) { |
| 149 |
if (!el || !el.closest) { |
| 150 |
return null; |
| 151 |
} |
| 152 |
|
| 153 |
// 1) Direct: element or ancestor carries FS key (input/select/textarea writer, radio wrapper, etc.) |
| 154 |
const direct = el.closest('[data-wpbc-bfb-fs-key]'); |
| 155 |
if (direct) { |
| 156 |
return direct; |
| 157 |
} |
| 158 |
|
| 159 |
// 2) Length: event came from number/unit/range inside .wpbc_slider_len_group |
| 160 |
const len_group = el.closest('.wpbc_slider_len_group'); |
| 161 |
if (len_group) { |
| 162 |
return len_group.querySelector('input[data-wpbc_slider_len_writer][data-wpbc-bfb-fs-key]') || len_group.querySelector('input[data-wpbc-bfb-fs-type="length"][data-wpbc-bfb-fs-key]') || null; |
| 163 |
} |
| 164 |
|
| 165 |
// 3) Spacing: event came from vertical/horizontal number inside .wpbc_spacing_group. |
| 166 |
const spacing_group = el.closest('.wpbc_spacing_group'); |
| 167 |
if (spacing_group) { |
| 168 |
return spacing_group.querySelector('input[data-wpbc_spacing_writer][data-wpbc-bfb-fs-key]') || spacing_group.querySelector('input[data-wpbc-bfb-fs-type="spacing"][data-wpbc-bfb-fs-key]') || null; |
| 169 |
} |
| 170 |
|
| 171 |
// 4) Range: event came from range input inside .wpbc_slider_range_group |
| 172 |
const range_group = el.closest('.wpbc_slider_range_group'); |
| 173 |
if (range_group) { |
| 174 |
return range_group.querySelector('input[data-wpbc_slider_range_writer][data-wpbc-bfb-fs-key]') || range_group.querySelector('input[data-wpbc_slider_range_writer]') || null; |
| 175 |
} |
| 176 |
return null; |
| 177 |
} |
| 178 |
function read_value_from_fs_root(fs_root, original_target) { |
| 179 |
if (!fs_root) { |
| 180 |
return ''; |
| 181 |
} |
| 182 |
const fs_type = String(fs_root.getAttribute('data-wpbc-bfb-fs-type') || ''); |
| 183 |
|
| 184 |
// RADIO: read checked within wrapper. |
| 185 |
if (fs_type === 'radio') { |
| 186 |
const control_id = fs_root.getAttribute('data-wpbc-bfb-fs-controlid') || ''; |
| 187 |
const selector = control_id ? 'input[type="radio"][name="' + css_escape(control_id) + '"]:checked' : 'input[type="radio"]:checked'; |
| 188 |
const checked = fs_root.querySelector(selector); |
| 189 |
return checked ? String(checked.value || '') : ''; |
| 190 |
} |
| 191 |
if (fs_type === 'spacing') { |
| 192 |
const group = original_target && original_target.closest ? original_target.closest('.wpbc_spacing_group') : fs_root.closest('.wpbc_spacing_group'); |
| 193 |
const vertical_input = group ? group.querySelector('input[data-wpbc_spacing_vertical]') : null; |
| 194 |
const horizontal_input = group ? group.querySelector('input[data-wpbc_spacing_horizontal]') : null; |
| 195 |
const writer = group ? group.querySelector('input[data-wpbc_spacing_writer]') : null; |
| 196 |
const vertical = vertical_input ? String(vertical_input.value || '0') : '0'; |
| 197 |
const horizontal = horizontal_input ? String(horizontal_input.value || vertical) : vertical; |
| 198 |
const combined = wpbc_bfb_form_appearance__normalize_spacing_numbers(vertical, horizontal); |
| 199 |
if (writer) { |
| 200 |
writer.value = combined; |
| 201 |
} |
| 202 |
return combined; |
| 203 |
} |
| 204 |
|
| 205 |
// CHECKBOX / TOGGLE |
| 206 |
if (original_target && original_target.type === 'checkbox' || fs_root.type === 'checkbox') { |
| 207 |
const cb = original_target && original_target.type === 'checkbox' ? original_target : fs_root; |
| 208 |
return cb.checked ? 'On' : 'Off'; |
| 209 |
} |
| 210 |
|
| 211 |
// DEFAULT: writer/input/textarea/select |
| 212 |
if (fs_root.value != null) { |
| 213 |
return String(fs_root.value); |
| 214 |
} |
| 215 |
if (original_target && original_target.value != null) { |
| 216 |
return String(original_target.value); |
| 217 |
} |
| 218 |
return ''; |
| 219 |
} |
| 220 |
function apply_change_from_target(target, event_type, event_source) { |
| 221 |
if (!target) { |
| 222 |
return; |
| 223 |
} |
| 224 |
const fs_root = find_fs_root(target); |
| 225 |
if (!fs_root) { |
| 226 |
return; |
| 227 |
} |
| 228 |
|
| 229 |
// Normalize events so each control produces exactly one effect call. |
| 230 |
// - toggle/select/radio/checkbox => "change" only. |
| 231 |
// - everything else => "input" only. |
| 232 |
const fs_type = String(fs_root.getAttribute('data-wpbc-bfb-fs-type') || ''); |
| 233 |
const tag = String(target.tagName || '').toLowerCase(); |
| 234 |
const type = String(target.type || '').toLowerCase(); |
| 235 |
const use_change = fs_type === 'toggle' || fs_type === 'select' || fs_type === 'radio' || type === 'checkbox' || type === 'radio' || tag === 'select'; |
| 236 |
if (use_change && event_type !== 'change') { |
| 237 |
return; |
| 238 |
} |
| 239 |
if (!use_change && event_type !== 'input') { |
| 240 |
return; |
| 241 |
} |
| 242 |
// ------------------------------------------------------------------------------------------- |
| 243 |
|
| 244 |
const key = fs_root.getAttribute('data-wpbc-bfb-fs-key'); |
| 245 |
if (!key) { |
| 246 |
return; |
| 247 |
} |
| 248 |
const scope = fs_root.getAttribute('data-wpbc-bfb-fs-scope') || ''; |
| 249 |
const value = read_value_from_fs_root(fs_root, target); |
| 250 |
Effects.apply_one(key, value, { |
| 251 |
source: event_source || 'ui', |
| 252 |
scope: scope, |
| 253 |
control: target, |
| 254 |
fs_root: fs_root |
| 255 |
}); |
| 256 |
} |
| 257 |
function is_coloris_control(target) { |
| 258 |
if (!target || !target.matches) { |
| 259 |
return false; |
| 260 |
} |
| 261 |
return target.matches('[data-wpbc-bfb-fs-type="color"], [data-inspector-type="color"], .wpbc_bfb_coloris'); |
| 262 |
} |
| 263 |
function on_change(ev) { |
| 264 |
// Ignore generic synthetic events dispatched by code (apply/reapply, slider sync, etc.). |
| 265 |
// Coloris dispatches synthetic input events while the user picks a color, so allow those color controls through. |
| 266 |
if (ev && ev.isTrusted === false && !is_coloris_control(ev.target)) { |
| 267 |
return; |
| 268 |
} |
| 269 |
apply_change_from_target(ev && ev.target, ev && ev.type, ev && ev.isTrusted === false ? 'coloris' : 'ui'); |
| 270 |
} |
| 271 |
d.addEventListener('input', on_change, false); |
| 272 |
d.addEventListener('change', on_change, false); |
| 273 |
function on_coloris_pick(ev) { |
| 274 |
const detail = ev && ev.detail ? ev.detail : {}; |
| 275 |
const target = detail.currentEl || detail.el || detail.input || ev.target || null; |
| 276 |
if (!is_coloris_control(target)) { |
| 277 |
return; |
| 278 |
} |
| 279 |
if (detail.color && target.value !== detail.color) { |
| 280 |
target.value = detail.color; |
| 281 |
} |
| 282 |
apply_change_from_target(target, 'input', 'coloris'); |
| 283 |
} |
| 284 |
d.addEventListener('coloris:pick', on_coloris_pick, false); |
| 285 |
d.addEventListener('wpbc:bfb:coloris:change', on_coloris_pick, false); |
| 286 |
})(window, document); |
| 287 |
function wpbc_bfb_form_appearance__get_presets() { |
| 288 |
return { |
| 289 |
bordered: { |
| 290 |
background: '#ffffff', |
| 291 |
borderColor: '#cccccc', |
| 292 |
borderWidth: '1px', |
| 293 |
radius: '2px', |
| 294 |
padding: '10px 30px', |
| 295 |
shadow: 'rgba(0, 0, 0, 0.05) 0px 2px 6px 0px' |
| 296 |
}, |
| 297 |
none: { |
| 298 |
background: 'transparent', |
| 299 |
borderColor: 'transparent', |
| 300 |
borderWidth: '0px', |
| 301 |
radius: '0px', |
| 302 |
padding: '0px', |
| 303 |
shadow: 'none' |
| 304 |
}, |
| 305 |
soft: { |
| 306 |
background: '#f9f9fa', |
| 307 |
borderColor: '#fff', |
| 308 |
borderWidth: '3px', |
| 309 |
radius: '8px', |
| 310 |
padding: '20px', |
| 311 |
shadow: 'rgba(15, 23, 42, 0.06) 0px 4px 16px 0px' |
| 312 |
} |
| 313 |
}; |
| 314 |
} |
| 315 |
function wpbc_bfb_form_appearance__is_dark_theme(options) { |
| 316 |
options = options && typeof options === 'object' ? options : {}; |
| 317 |
return 'wpbc_theme_dark_1' === String(options.booking_form_theme || ''); |
| 318 |
} |
| 319 |
function wpbc_bfb_form_appearance__get_preset_for_options(style, options) { |
| 320 |
const presets = wpbc_bfb_form_appearance__get_presets(); |
| 321 |
if (!wpbc_bfb_form_appearance__is_dark_theme(options)) { |
| 322 |
return presets[style] || presets.bordered; |
| 323 |
} |
| 324 |
if ('soft' === style) { |
| 325 |
return { |
| 326 |
background: '#1f2937', |
| 327 |
borderColor: '#334155', |
| 328 |
borderWidth: '3px', |
| 329 |
radius: '8px', |
| 330 |
padding: '20px', |
| 331 |
shadow: 'rgba(0, 0, 0, 0.24) 0px 4px 16px 0px' |
| 332 |
}; |
| 333 |
} |
| 334 |
return presets[style] || presets.bordered; |
| 335 |
} |
| 336 |
function wpbc_bfb_form_appearance__sanitize_color(value, fallback) { |
| 337 |
const v = String(value == null ? '' : value).trim(); |
| 338 |
if (/^#(?:[0-9a-f]{3}|[0-9a-f]{6})$/i.test(v)) { |
| 339 |
return v; |
| 340 |
} |
| 341 |
if (v === 'transparent') { |
| 342 |
return v; |
| 343 |
} |
| 344 |
return fallback; |
| 345 |
} |
| 346 |
function wpbc_bfb_form_appearance__sanitize_optional_color(value) { |
| 347 |
return wpbc_bfb_form_appearance__sanitize_color(value, ''); |
| 348 |
} |
| 349 |
function wpbc_bfb_form_appearance__sanitize_length(value, fallback) { |
| 350 |
const v = String(value == null ? '' : value).trim(); |
| 351 |
if (/^-?\d+(?:\.\d+)?(?:px|rem|em|%)$/i.test(v)) { |
| 352 |
return v; |
| 353 |
} |
| 354 |
return fallback; |
| 355 |
} |
| 356 |
function wpbc_bfb_form_appearance__sanitize_spacing(value, fallback) { |
| 357 |
const v = String(value == null ? '' : value).trim().replace(/\s+/g, ' '); |
| 358 |
const parts = v ? v.split(' ') : []; |
| 359 |
if (parts.length < 1 || parts.length > 4) { |
| 360 |
return fallback; |
| 361 |
} |
| 362 |
for (let i = 0; i < parts.length; i++) { |
| 363 |
if (!/^-?\d+(?:\.\d+)?(?:px|rem|em|%)$/i.test(parts[i])) { |
| 364 |
return fallback; |
| 365 |
} |
| 366 |
} |
| 367 |
return parts.join(' '); |
| 368 |
} |
| 369 |
function wpbc_bfb_form_appearance__normalize_spacing_numbers(vertical, horizontal) { |
| 370 |
const v = String(vertical == null ? '' : vertical).trim(); |
| 371 |
const h = String(horizontal == null ? '' : horizontal).trim(); |
| 372 |
const vertical_num = /^-?\d+(?:\.\d+)?$/.test(v) ? v : '0'; |
| 373 |
const horizontal_num = /^-?\d+(?:\.\d+)?$/.test(h) ? h : vertical_num; |
| 374 |
return vertical_num + 'px ' + horizontal_num + 'px'; |
| 375 |
} |
| 376 |
function wpbc_bfb_form_appearance__collect_options(ctx, key, value) { |
| 377 |
let options = ctx && ctx.options && typeof ctx.options === 'object' ? Object.assign({}, ctx.options) : {}; |
| 378 |
if (window.WPBC_BFB_FormSettings && typeof window.WPBC_BFB_FormSettings.collect === 'function') { |
| 379 |
options = Object.assign(window.WPBC_BFB_FormSettings.collect('form') || {}, options); |
| 380 |
} |
| 381 |
if (key) { |
| 382 |
options[String(key)] = value; |
| 383 |
} |
| 384 |
if (wpbc_bfb_form_appearance__is_custom_control_key(key)) { |
| 385 |
options.booking_form_container_style = 'custom'; |
| 386 |
wpbc_bfb_form_appearance__set_container_style_control('custom'); |
| 387 |
} |
| 388 |
return options; |
| 389 |
} |
| 390 |
function wpbc_bfb_form_appearance__get_custom_control_keys() { |
| 391 |
return ['booking_form_background_color', 'booking_form_border_color', 'booking_form_border_width', 'booking_form_border_radius', 'booking_form_padding', 'booking_form_text_color', 'booking_form_field_background_color', 'booking_form_field_text_color', 'booking_form_field_border_color']; |
| 392 |
} |
| 393 |
function wpbc_bfb_form_appearance__is_custom_control_key(key) { |
| 394 |
return wpbc_bfb_form_appearance__get_custom_control_keys().indexOf(String(key || '')) !== -1; |
| 395 |
} |
| 396 |
function wpbc_bfb_form_appearance__set_container_style_control(value) { |
| 397 |
const control = document.querySelector('[data-wpbc-bfb-fs-key="booking_form_container_style"]'); |
| 398 |
if (!control || control.value === value) { |
| 399 |
return; |
| 400 |
} |
| 401 |
control.value = value; |
| 402 |
} |
| 403 |
function wpbc_bfb_form_appearance__set_radio_control(key, value) { |
| 404 |
const row = document.querySelector('.wpbc_bfb__form_setting[data-key="' + key + '"]'); |
| 405 |
if (!row) { |
| 406 |
return; |
| 407 |
} |
| 408 |
const wrap = row.querySelector('.wpbc_bfb__form_setting_radio[data-wpbc-bfb-fs-controlid]'); |
| 409 |
const control_id = wrap ? String(wrap.getAttribute('data-wpbc-bfb-fs-controlid') || '') : ''; |
| 410 |
const radios = control_id ? row.querySelectorAll('input[type="radio"][name="' + control_id + '"]') : row.querySelectorAll('input[type="radio"]'); |
| 411 |
radios.forEach(function (radio) { |
| 412 |
const should_check = String(radio.value) === String(value == null ? '' : value); |
| 413 |
radio.checked = should_check; |
| 414 |
const choice = radio.closest ? radio.closest('.wpbc_theme_choice') : null; |
| 415 |
if (choice) { |
| 416 |
choice.classList.toggle('is-selected', should_check); |
| 417 |
} |
| 418 |
}); |
| 419 |
} |
| 420 |
function wpbc_bfb_form_appearance__set_select_control(key, value) { |
| 421 |
const control = document.querySelector('[data-wpbc-bfb-fs-key="' + key + '"]'); |
| 422 |
if (control) { |
| 423 |
control.value = String(value == null ? '' : value); |
| 424 |
} |
| 425 |
} |
| 426 |
function wpbc_bfb_form_appearance__get_current_options() { |
| 427 |
return window.WPBC_BFB_FormSettings && typeof window.WPBC_BFB_FormSettings.collect === 'function' ? window.WPBC_BFB_FormSettings.collect('form') || {} : {}; |
| 428 |
} |
| 429 |
function wpbc_bfb_form_appearance__get_style_value_from_options(options) { |
| 430 |
options = options && typeof options === 'object' ? options : {}; |
| 431 |
const theme = String(options.booking_form_theme || ''); |
| 432 |
const style = String(options.booking_form_container_style || 'inherit'); |
| 433 |
if ('custom' === style) { |
| 434 |
return 'custom'; |
| 435 |
} |
| 436 |
if ('inherit' === style || '' === style) { |
| 437 |
return 'inherit'; |
| 438 |
} |
| 439 |
const prefix = 'wpbc_theme_dark_1' === theme ? 'dark' : 'light'; |
| 440 |
if (['bordered', 'none', 'soft'].indexOf(style) === -1) { |
| 441 |
return prefix + '_bordered'; |
| 442 |
} |
| 443 |
return prefix + '_' + style; |
| 444 |
} |
| 445 |
function wpbc_bfb_form_appearance__sync_form_style_control(options) { |
| 446 |
wpbc_bfb_form_appearance__set_radio_control('booking_form_style', wpbc_bfb_form_appearance__get_style_value_from_options(options)); |
| 447 |
} |
| 448 |
function wpbc_bfb_form_appearance__resolve_form_style_choice(value) { |
| 449 |
const current_options = wpbc_bfb_form_appearance__get_current_options(); |
| 450 |
const current_theme = String(current_options.booking_form_theme || ''); |
| 451 |
const choice = String(value || 'inherit'); |
| 452 |
if ('custom' === choice) { |
| 453 |
return { |
| 454 |
booking_form_theme: current_theme, |
| 455 |
booking_form_container_style: 'custom' |
| 456 |
}; |
| 457 |
} |
| 458 |
if ('inherit' === choice || '' === choice) { |
| 459 |
return { |
| 460 |
booking_form_theme: '', |
| 461 |
booking_form_container_style: 'inherit' |
| 462 |
}; |
| 463 |
} |
| 464 |
const parts = choice.split('_'); |
| 465 |
const theme = 'dark' === parts[0] ? 'wpbc_theme_dark_1' : ''; |
| 466 |
const style = parts[1] || 'bordered'; |
| 467 |
return { |
| 468 |
booking_form_theme: theme, |
| 469 |
booking_form_container_style: ['bordered', 'none', 'soft'].indexOf(style) === -1 ? 'bordered' : style |
| 470 |
}; |
| 471 |
} |
| 472 |
function wpbc_bfb_form_appearance__is_user_theme_switch(ctx) { |
| 473 |
const source = String(ctx && ctx.source ? ctx.source : ''); |
| 474 |
return ['ui', 'coloris'].indexOf(source) !== -1; |
| 475 |
} |
| 476 |
function wpbc_bfb_form_appearance__is_custom_style(options) { |
| 477 |
return String(options && options.booking_form_container_style ? options.booking_form_container_style : 'inherit') === 'custom'; |
| 478 |
} |
| 479 |
function wpbc_bfb_form_appearance__sync_custom_controls(options) { |
| 480 |
const is_custom = wpbc_bfb_form_appearance__is_custom_style(options); |
| 481 |
const reset_row = document.querySelector('[data-wpbc-bfb-custom-appearance-reset-row]'); |
| 482 |
const base_theme_row = document.querySelector('.wpbc_bfb__form_setting[data-key="booking_form_theme"]'); |
| 483 |
wpbc_bfb_form_appearance__get_custom_control_keys().forEach(function (key) { |
| 484 |
const row = document.querySelector('.wpbc_bfb__form_setting[data-key="' + key + '"]'); |
| 485 |
if (!row) { |
| 486 |
return; |
| 487 |
} |
| 488 |
row.hidden = !is_custom; |
| 489 |
row.setAttribute('aria-hidden', is_custom ? 'false' : 'true'); |
| 490 |
row.classList.toggle('is-hidden', !is_custom); |
| 491 |
}); |
| 492 |
if (reset_row) { |
| 493 |
reset_row.hidden = !is_custom; |
| 494 |
reset_row.setAttribute('aria-hidden', is_custom ? 'false' : 'true'); |
| 495 |
reset_row.classList.toggle('is-hidden', !is_custom); |
| 496 |
} |
| 497 |
if (base_theme_row) { |
| 498 |
base_theme_row.hidden = !is_custom; |
| 499 |
base_theme_row.setAttribute('aria-hidden', is_custom ? 'false' : 'true'); |
| 500 |
base_theme_row.classList.toggle('is-hidden', !is_custom); |
| 501 |
} |
| 502 |
} |
| 503 |
function wpbc_bfb_form_appearance__resolve(options) { |
| 504 |
let style = String(options.booking_form_container_style || 'inherit'); |
| 505 |
if (style === 'inherit') { |
| 506 |
const global_options = window.wpbc_bfb_settings_vars && window.wpbc_bfb_settings_vars.global_appearance ? window.wpbc_bfb_settings_vars.global_appearance : {}; |
| 507 |
options = Object.assign({}, global_options || {}); |
| 508 |
style = String(options.booking_form_container_style || 'bordered'); |
| 509 |
} |
| 510 |
if (style === 'bordered') { |
| 511 |
return null; |
| 512 |
} |
| 513 |
if (style !== 'custom') { |
| 514 |
return wpbc_bfb_form_appearance__get_preset_for_options(style, options); |
| 515 |
} |
| 516 |
return { |
| 517 |
background: wpbc_bfb_form_appearance__sanitize_color(options.booking_form_background_color, '#ffffff'), |
| 518 |
borderColor: wpbc_bfb_form_appearance__sanitize_color(options.booking_form_border_color, '#cccccc'), |
| 519 |
borderWidth: wpbc_bfb_form_appearance__sanitize_length(options.booking_form_border_width, '1px'), |
| 520 |
radius: wpbc_bfb_form_appearance__sanitize_length(options.booking_form_border_radius, '2px'), |
| 521 |
padding: wpbc_bfb_form_appearance__sanitize_spacing(options.booking_form_padding, '10px 30px'), |
| 522 |
shadow: 'rgba(0, 0, 0, 0.05) 0px 2px 6px 0px' |
| 523 |
}; |
| 524 |
} |
| 525 |
function wpbc_bfb_form_appearance__resolve_design_colors(options) { |
| 526 |
options = options && typeof options === 'object' ? options : {}; |
| 527 |
if (!wpbc_bfb_form_appearance__is_custom_style(options)) { |
| 528 |
if (wpbc_bfb_form_appearance__is_dark_theme(options) && 'none' === String(options.booking_form_container_style || '')) { |
| 529 |
return { |
| 530 |
textColor: '#1d2327', |
| 531 |
fieldBackground: '', |
| 532 |
fieldText: '', |
| 533 |
fieldBorder: '' |
| 534 |
}; |
| 535 |
} |
| 536 |
return { |
| 537 |
textColor: '', |
| 538 |
fieldBackground: '', |
| 539 |
fieldText: '', |
| 540 |
fieldBorder: '' |
| 541 |
}; |
| 542 |
} |
| 543 |
return { |
| 544 |
textColor: wpbc_bfb_form_appearance__sanitize_optional_color(options.booking_form_text_color), |
| 545 |
fieldBackground: wpbc_bfb_form_appearance__sanitize_optional_color(options.booking_form_field_background_color), |
| 546 |
fieldText: wpbc_bfb_form_appearance__sanitize_optional_color(options.booking_form_field_text_color), |
| 547 |
fieldBorder: wpbc_bfb_form_appearance__sanitize_optional_color(options.booking_form_field_border_color) |
| 548 |
}; |
| 549 |
} |
| 550 |
function wpbc_bfb_form_appearance__apply_vars(value, ctx) { |
| 551 |
const options = wpbc_bfb_form_appearance__collect_options(ctx, ctx && ctx.key, value); |
| 552 |
const resolved = wpbc_bfb_form_appearance__resolve(options); |
| 553 |
const design = wpbc_bfb_form_appearance__resolve_design_colors(options); |
| 554 |
const is_custom = wpbc_bfb_form_appearance__is_custom_style(options); |
| 555 |
const root = ctx && ctx.canvas; |
| 556 |
wpbc_bfb_form_appearance__sync_form_style_control(options); |
| 557 |
wpbc_bfb_form_appearance__sync_custom_controls(options); |
| 558 |
if (!root || !root.querySelectorAll) { |
| 559 |
return; |
| 560 |
} |
| 561 |
const wraps = root.querySelectorAll('.wpbc_bfb__form_preview_section_container, .wpbc_bfb_form'); |
| 562 |
if (!wraps.length) { |
| 563 |
return; |
| 564 |
} |
| 565 |
wraps.forEach(function (wrap) { |
| 566 |
if (!wrap || !wrap.style) { |
| 567 |
return; |
| 568 |
} |
| 569 |
wrap.classList.toggle('wpbc_bfb_form_appearance_custom', is_custom); |
| 570 |
if (!resolved) { |
| 571 |
wrap.style.removeProperty('--wpbc-bfb-form-background'); |
| 572 |
wrap.style.removeProperty('--wpbc-bfb-form-border-color'); |
| 573 |
wrap.style.removeProperty('--wpbc-bfb-form-border-width'); |
| 574 |
wrap.style.removeProperty('--wpbc-bfb-form-border-radius'); |
| 575 |
wrap.style.removeProperty('--wpbc-bfb-form-padding'); |
| 576 |
wrap.style.removeProperty('--wpbc-bfb-form-box-shadow'); |
| 577 |
} else { |
| 578 |
wrap.style.setProperty('--wpbc-bfb-form-background', resolved.background); |
| 579 |
wrap.style.setProperty('--wpbc-bfb-form-border-color', resolved.borderColor); |
| 580 |
wrap.style.setProperty('--wpbc-bfb-form-border-width', resolved.borderWidth); |
| 581 |
wrap.style.setProperty('--wpbc-bfb-form-border-radius', resolved.radius); |
| 582 |
wrap.style.setProperty('--wpbc-bfb-form-padding', resolved.padding); |
| 583 |
wrap.style.setProperty('--wpbc-bfb-form-box-shadow', resolved.shadow); |
| 584 |
} |
| 585 |
if (design.textColor) { |
| 586 |
wrap.style.setProperty('--wpbc_form-label-color', design.textColor); |
| 587 |
wrap.style.setProperty('--wpbc_form-label-sublabel-color', design.textColor); |
| 588 |
} else { |
| 589 |
wrap.style.removeProperty('--wpbc_form-label-color'); |
| 590 |
wrap.style.removeProperty('--wpbc_form-label-sublabel-color'); |
| 591 |
} |
| 592 |
if (design.fieldBackground) { |
| 593 |
wrap.style.setProperty('--wpbc_form-field-background-color', design.fieldBackground); |
| 594 |
wrap.style.setProperty('--wpbc_form-field-menu-color', design.fieldBackground); |
| 595 |
} else { |
| 596 |
wrap.style.removeProperty('--wpbc_form-field-background-color'); |
| 597 |
wrap.style.removeProperty('--wpbc_form-field-menu-color'); |
| 598 |
} |
| 599 |
if (design.fieldText) { |
| 600 |
wrap.style.setProperty('--wpbc_form-field-text-color', design.fieldText); |
| 601 |
} else { |
| 602 |
wrap.style.removeProperty('--wpbc_form-field-text-color'); |
| 603 |
} |
| 604 |
if (design.fieldBorder) { |
| 605 |
wrap.style.setProperty('--wpbc_form-field-border-color', design.fieldBorder); |
| 606 |
wrap.style.setProperty('--wpbc_form-field-border-color-spare', design.fieldBorder); |
| 607 |
} else { |
| 608 |
wrap.style.removeProperty('--wpbc_form-field-border-color'); |
| 609 |
wrap.style.removeProperty('--wpbc_form-field-border-color-spare'); |
| 610 |
} |
| 611 |
}); |
| 612 |
} |
| 613 |
function wpbc_bfb_global_form_style__get_vars() { |
| 614 |
return window.wpbc_bfb_settings_vars || {}; |
| 615 |
} |
| 616 |
function wpbc_bfb_global_form_style__get_presets() { |
| 617 |
const vars = wpbc_bfb_global_form_style__get_vars(); |
| 618 |
return vars.form_style_presets && typeof vars.form_style_presets === 'object' ? vars.form_style_presets : {}; |
| 619 |
} |
| 620 |
function wpbc_bfb_global_form_style__get_custom_keys() { |
| 621 |
return ['booking_form_custom_background_color', 'booking_form_custom_border_color', 'booking_form_custom_border_width', 'booking_form_custom_border_radius', 'booking_form_custom_padding_vertical', 'booking_form_custom_padding_horizontal', 'booking_form_custom_text_color', 'booking_form_custom_field_background_color', 'booking_form_custom_field_text_color', 'booking_form_custom_field_border_color', 'booking_form_custom_button_background_color', 'booking_form_custom_button_text_color', 'booking_form_custom_button_border_color', 'booking_form_custom_button_hover_background_color', 'booking_form_custom_button_hover_text_color', 'booking_form_custom_button_hover_border_color', 'booking_form_custom_secondary_button_background_color', 'booking_form_custom_secondary_button_text_color', 'booking_form_custom_secondary_button_border_color', 'booking_form_custom_secondary_button_hover_background_color', 'booking_form_custom_secondary_button_hover_text_color', 'booking_form_custom_secondary_button_hover_border_color']; |
| 622 |
} |
| 623 |
function wpbc_bfb_global_form_style__get_custom_defaults() { |
| 624 |
const vars = wpbc_bfb_global_form_style__get_vars(); |
| 625 |
const localized = vars.custom_form_style_defaults && typeof vars.custom_form_style_defaults === 'object' ? vars.custom_form_style_defaults : {}; |
| 626 |
return Object.assign({ |
| 627 |
booking_form_custom_background_color: '#ffffff', |
| 628 |
booking_form_custom_border_color: '#cccccc', |
| 629 |
booking_form_custom_border_width: '1px', |
| 630 |
booking_form_custom_border_radius: '2px', |
| 631 |
booking_form_custom_padding_vertical: '10px', |
| 632 |
booking_form_custom_padding_horizontal: '30px', |
| 633 |
booking_form_custom_text_color: '#1d2327', |
| 634 |
booking_form_custom_field_background_color: '#ffffff', |
| 635 |
booking_form_custom_field_text_color: '#3c434a', |
| 636 |
booking_form_custom_field_border_color: '#cccccc', |
| 637 |
booking_form_custom_button_background_color: '#066aab', |
| 638 |
booking_form_custom_button_text_color: '#ffffff', |
| 639 |
booking_form_custom_button_border_color: '#066aab', |
| 640 |
booking_form_custom_button_hover_background_color: '#055589', |
| 641 |
booking_form_custom_button_hover_text_color: '#ffffff', |
| 642 |
booking_form_custom_button_hover_border_color: '#055589', |
| 643 |
booking_form_custom_secondary_button_background_color: '#fdfdfd', |
| 644 |
booking_form_custom_secondary_button_text_color: '#444444', |
| 645 |
booking_form_custom_secondary_button_border_color: '#eeeeee', |
| 646 |
booking_form_custom_secondary_button_hover_background_color: '#fdfdfd', |
| 647 |
booking_form_custom_secondary_button_hover_text_color: '#444444', |
| 648 |
booking_form_custom_secondary_button_hover_border_color: '#4d91cd' |
| 649 |
}, localized); |
| 650 |
} |
| 651 |
function wpbc_bfb_global_form_style__get_current_options(ctx, key, value) { |
| 652 |
const vars = wpbc_bfb_global_form_style__get_vars(); |
| 653 |
let options = vars.global_form_style && typeof vars.global_form_style === 'object' ? Object.assign({}, vars.global_form_style) : {}; |
| 654 |
if (window.WPBC_BFB_FormSettings && typeof window.WPBC_BFB_FormSettings.collect === 'function') { |
| 655 |
options = Object.assign(options, window.WPBC_BFB_FormSettings.collect('global') || {}); |
| 656 |
} |
| 657 |
if (ctx && ctx.options && typeof ctx.options === 'object') { |
| 658 |
options = Object.assign(options, ctx.options); |
| 659 |
} |
| 660 |
if (key) { |
| 661 |
options[String(key)] = value; |
| 662 |
} |
| 663 |
if (!options.booking_form_style) { |
| 664 |
options.booking_form_style = 'light_bordered'; |
| 665 |
} |
| 666 |
return options; |
| 667 |
} |
| 668 |
function wpbc_bfb_global_form_style__resolve_css_vars(options) { |
| 669 |
options = options && typeof options === 'object' ? options : {}; |
| 670 |
const style = String(options.booking_form_style || 'light_bordered'); |
| 671 |
const presets = wpbc_bfb_global_form_style__get_presets(); |
| 672 |
const preset = presets[style] || presets.light_bordered || {}; |
| 673 |
const defaults = wpbc_bfb_global_form_style__get_custom_defaults(); |
| 674 |
if ('custom' !== style) { |
| 675 |
return preset.css_vars && typeof preset.css_vars === 'object' ? Object.assign({}, preset.css_vars) : {}; |
| 676 |
} |
| 677 |
return { |
| 678 |
'--wpbc-bfb-form-background': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_background_color, defaults.booking_form_custom_background_color), |
| 679 |
'--wpbc-bfb-form-border-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_border_color, defaults.booking_form_custom_border_color), |
| 680 |
'--wpbc-bfb-form-border-width': wpbc_bfb_form_appearance__sanitize_length(options.booking_form_custom_border_width, defaults.booking_form_custom_border_width), |
| 681 |
'--wpbc-bfb-form-border-radius': wpbc_bfb_form_appearance__sanitize_length(options.booking_form_custom_border_radius, defaults.booking_form_custom_border_radius), |
| 682 |
'--wpbc-bfb-form-padding': wpbc_bfb_form_appearance__sanitize_length(options.booking_form_custom_padding_vertical, defaults.booking_form_custom_padding_vertical) + ' ' + wpbc_bfb_form_appearance__sanitize_length(options.booking_form_custom_padding_horizontal, defaults.booking_form_custom_padding_horizontal), |
| 683 |
'--wpbc-bfb-form-box-shadow': 'rgba(0, 0, 0, 0.05) 0px 2px 6px 0px', |
| 684 |
'--wpbc_form-label-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_text_color, defaults.booking_form_custom_text_color), |
| 685 |
'--wpbc_form-label-sublabel-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_text_color, defaults.booking_form_custom_text_color), |
| 686 |
'--wpbc_form-label-error-color': '#d63637', |
| 687 |
'--wpbc_form-field-background-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_field_background_color, defaults.booking_form_custom_field_background_color), |
| 688 |
'--wpbc_form-field-menu-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_field_background_color, defaults.booking_form_custom_field_background_color), |
| 689 |
'--wpbc_form-field-text-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_field_text_color, defaults.booking_form_custom_field_text_color), |
| 690 |
'--wpbc_form-field-border-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_field_border_color, defaults.booking_form_custom_field_border_color), |
| 691 |
'--wpbc_form-field-border-color-spare': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_field_border_color, defaults.booking_form_custom_field_border_color), |
| 692 |
'--wpbc_form-field-focus-border-color': '#066aab', |
| 693 |
'--wpbc_form-field-focus-shadow-color': '#066aab', |
| 694 |
'--wpbc_form-field-disabled-color': 'rgba(0, 0, 0, 0.2)', |
| 695 |
'--wpbc_form-button-background-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_button_background_color, defaults.booking_form_custom_button_background_color), |
| 696 |
'--wpbc_form-button-background-color-alt': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_button_background_color, defaults.booking_form_custom_button_background_color), |
| 697 |
'--wpbc_form-button-border-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_button_border_color, defaults.booking_form_custom_button_border_color), |
| 698 |
'--wpbc_form-button-text-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_button_text_color, defaults.booking_form_custom_button_text_color), |
| 699 |
'--wpbc_form-button-text-color-alt': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_button_text_color, defaults.booking_form_custom_button_text_color), |
| 700 |
'--wpbc_form-button-hover-background-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_button_hover_background_color, defaults.booking_form_custom_button_hover_background_color), |
| 701 |
'--wpbc_form-button-hover-border-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_button_hover_border_color, defaults.booking_form_custom_button_hover_border_color), |
| 702 |
'--wpbc_form-button-hover-text-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_button_hover_text_color, defaults.booking_form_custom_button_hover_text_color), |
| 703 |
'--wpbc_form-choice-checked-border-color': '#066aab', |
| 704 |
'--wpbc_form-choice-checked-color': '#066aab', |
| 705 |
'--wpbc_form-choice-focus-color': '#066aab', |
| 706 |
'--wpbc_form-button-light-background-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_secondary_button_background_color, defaults.booking_form_custom_secondary_button_background_color), |
| 707 |
'--wpbc_form-button-light-border-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_secondary_button_border_color, defaults.booking_form_custom_secondary_button_border_color), |
| 708 |
'--wpbc_form-button-light-text-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_secondary_button_text_color, defaults.booking_form_custom_secondary_button_text_color), |
| 709 |
'--wpbc_form-button-light-box-shadow': '0 2px 10px 2px #ffffff54', |
| 710 |
'--wpbc_form-button-light-hover-background-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_secondary_button_hover_background_color, defaults.booking_form_custom_secondary_button_hover_background_color), |
| 711 |
'--wpbc_form-button-light-hover-border-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_secondary_button_hover_border_color, defaults.booking_form_custom_secondary_button_hover_border_color), |
| 712 |
'--wpbc_form-button-light-hover-text-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_secondary_button_hover_text_color, defaults.booking_form_custom_secondary_button_hover_text_color), |
| 713 |
'--wpbc_form-button-light-hover-box-shadow': '0 2px 10px 2px #ffffff54', |
| 714 |
'--wpbc_form-button-primary-hover-border-color': wpbc_bfb_form_appearance__sanitize_color(options.booking_form_custom_button_hover_border_color, defaults.booking_form_custom_button_hover_border_color), |
| 715 |
'--wpbc_form-page-break-color': '#066aab' |
| 716 |
}; |
| 717 |
} |
| 718 |
function wpbc_bfb_global_form_style__get_css_var_keys(options) { |
| 719 |
const vars = wpbc_bfb_global_form_style__get_vars(); |
| 720 |
const localized = Array.isArray(vars.form_style_css_var_names) ? vars.form_style_css_var_names : []; |
| 721 |
const keys = []; |
| 722 |
const presets = wpbc_bfb_global_form_style__get_presets(); |
| 723 |
if (localized.length) { |
| 724 |
return localized; |
| 725 |
} |
| 726 |
Object.keys(presets).forEach(function (preset_key) { |
| 727 |
const preset = presets[preset_key] || {}; |
| 728 |
const css_vars = preset.css_vars && typeof preset.css_vars === 'object' ? preset.css_vars : {}; |
| 729 |
Object.keys(css_vars).forEach(function (var_name) { |
| 730 |
if (keys.indexOf(var_name) === -1) { |
| 731 |
keys.push(var_name); |
| 732 |
} |
| 733 |
}); |
| 734 |
}); |
| 735 |
Object.keys(wpbc_bfb_global_form_style__resolve_css_vars(Object.assign({}, options || {}, { |
| 736 |
booking_form_style: 'custom' |
| 737 |
}))).forEach(function (var_name) { |
| 738 |
if (keys.indexOf(var_name) === -1) { |
| 739 |
keys.push(var_name); |
| 740 |
} |
| 741 |
}); |
| 742 |
return keys; |
| 743 |
} |
| 744 |
function wpbc_bfb_global_form_style__sync_controls(options) { |
| 745 |
const is_custom = 'custom' === String(options && options.booking_form_style ? options.booking_form_style : ''); |
| 746 |
const reset_row = document.querySelector('[data-wpbc-bfb-custom-appearance-reset-row]'); |
| 747 |
wpbc_bfb_form_appearance__set_radio_control('booking_form_style', options.booking_form_style || 'light_bordered'); |
| 748 |
document.querySelectorAll('.wpbc_bfb__form_setting_global_custom_style').forEach(function (row) { |
| 749 |
row.hidden = !is_custom; |
| 750 |
row.setAttribute('aria-hidden', is_custom ? 'false' : 'true'); |
| 751 |
row.classList.toggle('is-hidden', !is_custom); |
| 752 |
}); |
| 753 |
if (reset_row) { |
| 754 |
reset_row.hidden = !is_custom; |
| 755 |
reset_row.setAttribute('aria-hidden', is_custom ? 'false' : 'true'); |
| 756 |
reset_row.classList.toggle('is-hidden', !is_custom); |
| 757 |
} |
| 758 |
} |
| 759 |
function wpbc_bfb_global_form_style__apply(value, ctx) { |
| 760 |
const options = wpbc_bfb_global_form_style__get_current_options(ctx, ctx && ctx.key, value); |
| 761 |
const style = String(options.booking_form_style || 'light_bordered'); |
| 762 |
const presets = wpbc_bfb_global_form_style__get_presets(); |
| 763 |
const preset = presets[style] || presets.light_bordered || {}; |
| 764 |
const css_vars = wpbc_bfb_global_form_style__resolve_css_vars(options); |
| 765 |
const root = ctx && ctx.canvas || document.getElementById('wpbc_bfb__theme_scope') || document; |
| 766 |
const theme_classes = []; |
| 767 |
const css_var_keys = wpbc_bfb_global_form_style__get_css_var_keys(options); |
| 768 |
wpbc_bfb_global_form_style__sync_controls(options); |
| 769 |
Object.keys(presets).forEach(function (preset_key) { |
| 770 |
const class_name = presets[preset_key] && presets[preset_key].theme_class ? String(presets[preset_key].theme_class) : ''; |
| 771 |
if (class_name && theme_classes.indexOf(class_name) === -1) { |
| 772 |
theme_classes.push(class_name); |
| 773 |
} |
| 774 |
}); |
| 775 |
if (!root || !root.querySelectorAll) { |
| 776 |
return; |
| 777 |
} |
| 778 |
const selector = '.wpbc_container.wpbc_form, .wpbc_bfb_form, .wpbc_bfb__pages_panel, .wpbc_bfb__form_preview_section_container'; |
| 779 |
const wraps = []; |
| 780 |
if (root.matches && root.matches(selector)) { |
| 781 |
wraps.push(root); |
| 782 |
} |
| 783 |
root.querySelectorAll(selector).forEach(function (wrap) { |
| 784 |
wraps.push(wrap); |
| 785 |
}); |
| 786 |
wraps.forEach(function (wrap) { |
| 787 |
if (!wrap || !wrap.style) { |
| 788 |
return; |
| 789 |
} |
| 790 |
theme_classes.forEach(function (class_name) { |
| 791 |
wrap.classList.remove(class_name); |
| 792 |
}); |
| 793 |
if (preset.theme_class) { |
| 794 |
wrap.classList.add(String(preset.theme_class)); |
| 795 |
} |
| 796 |
wrap.classList.toggle('wpbc_bfb_form_appearance_custom', 'custom' === style); |
| 797 |
css_var_keys.forEach(function (css_key) { |
| 798 |
wrap.style.removeProperty(css_key); |
| 799 |
}); |
| 800 |
Object.keys(css_vars).forEach(function (css_key) { |
| 801 |
wrap.style.setProperty(css_key, css_vars[css_key]); |
| 802 |
}); |
| 803 |
}); |
| 804 |
} |
| 805 |
['booking_form_style', 'booking_form_custom_background_color', 'booking_form_custom_border_color', 'booking_form_custom_border_width', 'booking_form_custom_border_radius', 'booking_form_custom_padding_vertical', 'booking_form_custom_padding_horizontal', 'booking_form_custom_text_color', 'booking_form_custom_field_background_color', 'booking_form_custom_field_text_color', 'booking_form_custom_field_border_color', 'booking_form_custom_button_background_color', 'booking_form_custom_button_text_color', 'booking_form_custom_button_border_color', 'booking_form_custom_button_hover_background_color', 'booking_form_custom_button_hover_text_color', 'booking_form_custom_button_hover_border_color', 'booking_form_custom_secondary_button_background_color', 'booking_form_custom_secondary_button_text_color', 'booking_form_custom_secondary_button_border_color', 'booking_form_custom_secondary_button_hover_background_color', 'booking_form_custom_secondary_button_hover_text_color', 'booking_form_custom_secondary_button_hover_border_color'].forEach(function (key) { |
| 806 |
WPBC_BFB_Settings_Effects.register(key, function (value, ctx) { |
| 807 |
wpbc_bfb_global_form_style__apply(value, Object.assign({}, ctx || {}, { |
| 808 |
key: key |
| 809 |
})); |
| 810 |
}); |
| 811 |
}); |
| 812 |
function wpbc_bfb_form_appearance__sync_custom_controls_from_ui() { |
| 813 |
const options = wpbc_bfb_global_form_style__get_current_options(); |
| 814 |
wpbc_bfb_global_form_style__sync_controls(options); |
| 815 |
wpbc_bfb_global_form_style__apply(null, { |
| 816 |
source: 'sync-global-style' |
| 817 |
}); |
| 818 |
} |
| 819 |
wpbc_bfb_form_appearance__sync_custom_controls_from_ui(); |
| 820 |
document.addEventListener('DOMContentLoaded', wpbc_bfb_form_appearance__sync_custom_controls_from_ui); |
| 821 |
|
| 822 |
// BOOKING_FORM_THEME. |
| 823 |
WPBC_BFB_Settings_Effects.register('booking_form_theme', function (value, ctx) { |
| 824 |
const root = ctx && ctx.canvas || document.getElementById('wpbc_bfb__theme_scope') || document; |
| 825 |
if (!root || !root.querySelectorAll) { |
| 826 |
return; |
| 827 |
} |
| 828 |
if (wpbc_bfb_form_appearance__is_user_theme_switch(ctx)) { |
| 829 |
const current_options = wpbc_bfb_form_appearance__get_current_options(); |
| 830 |
if ('custom' === String(current_options.booking_form_container_style || '')) { |
| 831 |
current_options.booking_form_theme = value; |
| 832 |
wpbc_bfb_form_appearance__sync_form_style_control(current_options); |
| 833 |
wpbc_bfb_form_appearance__apply_vars('custom', Object.assign({}, ctx || {}, { |
| 834 |
key: 'booking_form_container_style', |
| 835 |
source: 'theme-base-custom', |
| 836 |
options: current_options |
| 837 |
})); |
| 838 |
} else { |
| 839 |
wpbc_bfb_form_appearance__set_container_style_control('bordered'); |
| 840 |
wpbc_bfb_form_appearance__apply_vars('bordered', Object.assign({}, ctx || {}, { |
| 841 |
key: 'booking_form_container_style' |
| 842 |
})); |
| 843 |
} |
| 844 |
} else if (ctx && ctx.options) { |
| 845 |
wpbc_bfb_form_appearance__sync_form_style_control(ctx.options); |
| 846 |
} |
| 847 |
const theme_selector = '.wpbc_container.wpbc_form, .wpbc_bfb_form, .wpbc_bfb__pages_panel'; |
| 848 |
const wraps = []; |
| 849 |
if (root.matches && root.matches(theme_selector)) { |
| 850 |
wraps.push(root); |
| 851 |
} |
| 852 |
root.querySelectorAll(theme_selector).forEach(function (wrap) { |
| 853 |
wraps.push(wrap); |
| 854 |
}); |
| 855 |
if (!wraps.length) { |
| 856 |
return; |
| 857 |
} |
| 858 |
wraps.forEach(function (wrap) { |
| 859 |
// remove any previous theme classes (simple + future-proof). |
| 860 |
Array.from(wrap.classList).forEach(function (cls) { |
| 861 |
if (/^wpbc_theme_/.test(cls)) { |
| 862 |
wrap.classList.remove(cls); |
| 863 |
} |
| 864 |
}); |
| 865 |
if (value) { |
| 866 |
wrap.classList.add(String(value)); |
| 867 |
} |
| 868 |
}); |
| 869 |
}); |
| 870 |
|
| 871 |
// BOOKING_FORM_LAYOUT_WIDTH — Form width: applies combined "100%" / "600px" / "40rem" to the booking form containers. |
| 872 |
WPBC_BFB_Settings_Effects.register('booking_form_layout_width', function (value, ctx) { |
| 873 |
const root = ctx && ctx.canvas; |
| 874 |
if (!root || !root.querySelectorAll) { |
| 875 |
return; |
| 876 |
} |
| 877 |
const wraps = root.querySelectorAll('.wpbc_bfb__form_preview_section_container'); |
| 878 |
if (!wraps.length) { |
| 879 |
return; |
| 880 |
} |
| 881 |
const v = String(value == null ? '' : value).trim(); |
| 882 |
|
| 883 |
// allow only "number + unit". |
| 884 |
if (v && !/^-?\d+(?:\.\d+)?(?:%|px|rem|em|vw|vh)$/.test(v)) { |
| 885 |
return; |
| 886 |
} |
| 887 |
wraps.forEach(function (wrap) { |
| 888 |
if (!wrap || !wrap.style) { |
| 889 |
return; |
| 890 |
} |
| 891 |
if (!v) { |
| 892 |
wrap.style.removeProperty('--wpbc-bfb-booking_form_layout_width'); |
| 893 |
} else { |
| 894 |
wrap.style.setProperty('--wpbc-bfb-booking_form_layout_width', v); |
| 895 |
} |
| 896 |
}); |
| 897 |
}); |
| 898 |
|
| 899 |
// Debug Preview Mode. |
| 900 |
WPBC_BFB_Settings_Effects.register('booking_bfb_preview_mode', function (value, ctx) { |
| 901 |
const root = ctx.canvas; |
| 902 |
if (!root || !root.querySelectorAll) { |
| 903 |
return; |
| 904 |
} |
| 905 |
const wraps = root.querySelectorAll('.wpbc_container.wpbc_form'); |
| 906 |
if (!wraps.length) { |
| 907 |
return; |
| 908 |
} |
| 909 |
|
| 910 |
// Get builder async. |
| 911 |
wpbc_bfb_api.with_builder(function (Builder) { |
| 912 |
/** |
| 913 |
* Capture active right sidebar tab and return restore handle. |
| 914 |
* |
| 915 |
* @return {{restore:function():void}|null} |
| 916 |
*/ |
| 917 |
function capture_right_sidebar_active_tab_restore_handle() { |
| 918 |
var tablist_el = document.querySelector('.wpbc_bfb__rightbar_tabs[role="tablist"]'); |
| 919 |
if (!tablist_el) { |
| 920 |
return null; |
| 921 |
} |
| 922 |
var active_tab_el = tablist_el.querySelector('[role="tab"][aria-selected="true"]'); |
| 923 |
if (!active_tab_el) { |
| 924 |
active_tab_el = tablist_el.querySelector('[role="tab"][aria-controls="wpbc_bfb__palette_add_new"]'); |
| 925 |
} |
| 926 |
if (!active_tab_el || typeof active_tab_el.click !== 'function') { |
| 927 |
return null; |
| 928 |
} |
| 929 |
return { |
| 930 |
restore: function () { |
| 931 |
try { |
| 932 |
active_tab_el.click(); |
| 933 |
} catch (_e) {} |
| 934 |
} |
| 935 |
}; |
| 936 |
} |
| 937 |
var tab_restore_handle = capture_right_sidebar_active_tab_restore_handle(); |
| 938 |
let restored = false; |
| 939 |
var EVS = window.WPBC_BFB_Core && window.WPBC_BFB_Core.WPBC_BFB_Events ? window.WPBC_BFB_Core.WPBC_BFB_Events : {}; |
| 940 |
var EV_DONE = EVS.STRUCTURE_LOADED || EVS.CANVAS_REFRESHED || 'wpbc:bfb:structure-loaded'; |
| 941 |
function do_restore() { |
| 942 |
if (restored) { |
| 943 |
return; |
| 944 |
} |
| 945 |
restored = true; |
| 946 |
try { |
| 947 |
Builder?.bus?.off?.(EV_DONE, do_restore); |
| 948 |
} catch (_) {} |
| 949 |
requestAnimationFrame(function () { |
| 950 |
if (!tab_restore_handle) { |
| 951 |
return; |
| 952 |
} |
| 953 |
tab_restore_handle.restore(); |
| 954 |
}); |
| 955 |
} |
| 956 |
|
| 957 |
// Listen once (best), plus a fallback in case event isn't fired. |
| 958 |
try { |
| 959 |
Builder?.bus?.on?.(EV_DONE, do_restore); |
| 960 |
} catch (_) {} |
| 961 |
var enabled = 'On' === value; |
| 962 |
Builder.set_preview_mode(enabled, { |
| 963 |
rebuild: true, |
| 964 |
reinit: true, |
| 965 |
source: 'settings-effects' |
| 966 |
}); |
| 967 |
}); |
| 968 |
}); |
| 969 |
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jbHVkZXMvcGFnZS1mb3JtLWJ1aWxkZXIvZm9ybS1zZXR0aW5ncy9fb3V0L3NldHRpbmdzX2VmZmVjdHMuanMiLCJuYW1lcyI6WyJ3IiwiZCIsIkVmZmVjdHMiLCJXUEJDX0JGQl9TZXR0aW5nc19FZmZlY3RzIiwibWFwIiwiT2JqZWN0IiwiY3JlYXRlIiwicmVnaXN0ZXIiLCJrZXkiLCJmbiIsIlN0cmluZyIsImdldF9jYW52YXNfcm9vdCIsInF1ZXJ5U2VsZWN0b3IiLCJnZXRFbGVtZW50QnlJZCIsImJvZHkiLCJkb2N1bWVudEVsZW1lbnQiLCJhcHBseV9vbmUiLCJ2YWx1ZSIsImN0eCIsImFzc2lnbiIsImNhbnZhcyIsImUiLCJjb25zb2xlIiwiZXJyb3IiLCJhcHBseV9hbGwiLCJvcHRpb25zIiwia2V5cyIsImZvckVhY2giLCJrIiwibm9ybWFsaXplX3BhY2siLCJwYWNrIiwiSlNPTiIsInBhcnNlIiwiX2UiLCJoYXNfc2hhcGUiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJjc3NfdmFycyIsImJmYl9vcHRpb25zIiwicmVhcHBseV9hZnRlcl9jYW52YXMiLCJzZXR0aW5nc19wYWNrIiwic291cmNlIiwid3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX2FwcGx5Iiwic2V0VGltZW91dCIsImFkZEV2ZW50TGlzdGVuZXIiLCJkZXRhaWwiLCJzZXR0aW5ncyIsImNzc19lc2NhcGUiLCJ2IiwiQ1NTIiwiZXNjYXBlIiwicmVwbGFjZSIsImZpbmRfZnNfcm9vdCIsImVsIiwiY2xvc2VzdCIsImRpcmVjdCIsImxlbl9ncm91cCIsInNwYWNpbmdfZ3JvdXAiLCJyYW5nZV9ncm91cCIsInJlYWRfdmFsdWVfZnJvbV9mc19yb290IiwiZnNfcm9vdCIsIm9yaWdpbmFsX3RhcmdldCIsImZzX3R5cGUiLCJnZXRBdHRyaWJ1dGUiLCJjb250cm9sX2lkIiwic2VsZWN0b3IiLCJjaGVja2VkIiwiZ3JvdXAiLCJ2ZXJ0aWNhbF9pbnB1dCIsImhvcml6b250YWxfaW5wdXQiLCJ3cml0ZXIiLCJ2ZXJ0aWNhbCIsImhvcml6b250YWwiLCJjb21iaW5lZCIsIndwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fbm9ybWFsaXplX3NwYWNpbmdfbnVtYmVycyIsInR5cGUiLCJjYiIsImFwcGx5X2NoYW5nZV9mcm9tX3RhcmdldCIsInRhcmdldCIsImV2ZW50X3R5cGUiLCJldmVudF9zb3VyY2UiLCJ0YWciLCJ0YWdOYW1lIiwidG9Mb3dlckNhc2UiLCJ1c2VfY2hhbmdlIiwic2NvcGUiLCJjb250cm9sIiwiaXNfY29sb3Jpc19jb250cm9sIiwibWF0Y2hlcyIsIm9uX2NoYW5nZSIsImV2IiwiaXNUcnVzdGVkIiwib25fY29sb3Jpc19waWNrIiwiY3VycmVudEVsIiwiaW5wdXQiLCJjb2xvciIsIndpbmRvdyIsImRvY3VtZW50Iiwid3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19nZXRfcHJlc2V0cyIsImJvcmRlcmVkIiwiYmFja2dyb3VuZCIsImJvcmRlckNvbG9yIiwiYm9yZGVyV2lkdGgiLCJyYWRpdXMiLCJwYWRkaW5nIiwic2hhZG93Iiwibm9uZSIsInNvZnQiLCJ3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX2lzX2RhcmtfdGhlbWUiLCJib29raW5nX2Zvcm1fdGhlbWUiLCJ3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX2dldF9wcmVzZXRfZm9yX29wdGlvbnMiLCJzdHlsZSIsInByZXNldHMiLCJ3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2NvbG9yIiwiZmFsbGJhY2siLCJ0cmltIiwidGVzdCIsIndwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfb3B0aW9uYWxfY29sb3IiLCJ3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2xlbmd0aCIsIndwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfc3BhY2luZyIsInBhcnRzIiwic3BsaXQiLCJsZW5ndGgiLCJpIiwiam9pbiIsImgiLCJ2ZXJ0aWNhbF9udW0iLCJob3Jpem9udGFsX251bSIsIndwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fY29sbGVjdF9vcHRpb25zIiwiV1BCQ19CRkJfRm9ybVNldHRpbmdzIiwiY29sbGVjdCIsIndwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9faXNfY3VzdG9tX2NvbnRyb2xfa2V5IiwiYm9va2luZ19mb3JtX2NvbnRhaW5lcl9zdHlsZSIsIndwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2V0X2NvbnRhaW5lcl9zdHlsZV9jb250cm9sIiwid3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19nZXRfY3VzdG9tX2NvbnRyb2xfa2V5cyIsImluZGV4T2YiLCJ3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3NldF9yYWRpb19jb250cm9sIiwicm93Iiwid3JhcCIsInJhZGlvcyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJyYWRpbyIsInNob3VsZF9jaGVjayIsImNob2ljZSIsImNsYXNzTGlzdCIsInRvZ2dsZSIsIndwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2V0X3NlbGVjdF9jb250cm9sIiwid3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19nZXRfY3VycmVudF9vcHRpb25zIiwid3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19nZXRfc3R5bGVfdmFsdWVfZnJvbV9vcHRpb25zIiwidGhlbWUiLCJwcmVmaXgiLCJ3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3N5bmNfZm9ybV9zdHlsZV9jb250cm9sIiwid3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19yZXNvbHZlX2Zvcm1fc3R5bGVfY2hvaWNlIiwiY3VycmVudF9vcHRpb25zIiwiY3VycmVudF90aGVtZSIsIndwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9faXNfdXNlcl90aGVtZV9zd2l0Y2giLCJ3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX2lzX2N1c3RvbV9zdHlsZSIsIndwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc3luY19jdXN0b21fY29udHJvbHMiLCJpc19jdXN0b20iLCJyZXNldF9yb3ciLCJiYXNlX3RoZW1lX3JvdyIsImhpZGRlbiIsInNldEF0dHJpYnV0ZSIsIndwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fcmVzb2x2ZSIsImdsb2JhbF9vcHRpb25zIiwid3BiY19iZmJfc2V0dGluZ3NfdmFycyIsImdsb2JhbF9hcHBlYXJhbmNlIiwiYm9va2luZ19mb3JtX2JhY2tncm91bmRfY29sb3IiLCJib29raW5nX2Zvcm1fYm9yZGVyX2NvbG9yIiwiYm9va2luZ19mb3JtX2JvcmRlcl93aWR0aCIsImJvb2tpbmdfZm9ybV9ib3JkZXJfcmFkaXVzIiwiYm9va2luZ19mb3JtX3BhZGRpbmciLCJ3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Jlc29sdmVfZGVzaWduX2NvbG9ycyIsInRleHRDb2xvciIsImZpZWxkQmFja2dyb3VuZCIsImZpZWxkVGV4dCIsImZpZWxkQm9yZGVyIiwiYm9va2luZ19mb3JtX3RleHRfY29sb3IiLCJib29raW5nX2Zvcm1fZmllbGRfYmFja2dyb3VuZF9jb2xvciIsImJvb2tpbmdfZm9ybV9maWVsZF90ZXh0X2NvbG9yIiwiYm9va2luZ19mb3JtX2ZpZWxkX2JvcmRlcl9jb2xvciIsIndwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fYXBwbHlfdmFycyIsInJlc29sdmVkIiwiZGVzaWduIiwicm9vdCIsIndyYXBzIiwicmVtb3ZlUHJvcGVydHkiLCJzZXRQcm9wZXJ0eSIsIndwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19nZXRfdmFycyIsIndwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19nZXRfcHJlc2V0cyIsInZhcnMiLCJmb3JtX3N0eWxlX3ByZXNldHMiLCJ3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fZ2V0X2N1c3RvbV9rZXlzIiwid3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX2dldF9jdXN0b21fZGVmYXVsdHMiLCJsb2NhbGl6ZWQiLCJjdXN0b21fZm9ybV9zdHlsZV9kZWZhdWx0cyIsImJvb2tpbmdfZm9ybV9jdXN0b21fYmFja2dyb3VuZF9jb2xvciIsImJvb2tpbmdfZm9ybV9jdXN0b21fYm9yZGVyX2NvbG9yIiwiYm9va2luZ19mb3JtX2N1c3RvbV9ib3JkZXJfd2lkdGgiLCJib29raW5nX2Zvcm1fY3VzdG9tX2JvcmRlcl9yYWRpdXMiLCJib29raW5nX2Zvcm1fY3VzdG9tX3BhZGRpbmdfdmVydGljYWwiLCJib29raW5nX2Zvcm1fY3VzdG9tX3BhZGRpbmdfaG9yaXpvbnRhbCIsImJvb2tpbmdfZm9ybV9jdXN0b21fdGV4dF9jb2xvciIsImJvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfYmFja2dyb3VuZF9jb2xvciIsImJvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfdGV4dF9jb2xvciIsImJvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfYm9yZGVyX2NvbG9yIiwiYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fYmFja2dyb3VuZF9jb2xvciIsImJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX3RleHRfY29sb3IiLCJib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ib3JkZXJfY29sb3IiLCJib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ob3Zlcl9iYWNrZ3JvdW5kX2NvbG9yIiwiYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25faG92ZXJfdGV4dF9jb2xvciIsImJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2hvdmVyX2JvcmRlcl9jb2xvciIsImJvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9iYWNrZ3JvdW5kX2NvbG9yIiwiYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX3RleHRfY29sb3IiLCJib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25fYm9yZGVyX2NvbG9yIiwiYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2hvdmVyX2JhY2tncm91bmRfY29sb3IiLCJib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25faG92ZXJfdGV4dF9jb2xvciIsImJvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9ob3Zlcl9ib3JkZXJfY29sb3IiLCJ3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fZ2V0X2N1cnJlbnRfb3B0aW9ucyIsImdsb2JhbF9mb3JtX3N0eWxlIiwiYm9va2luZ19mb3JtX3N0eWxlIiwid3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX3Jlc29sdmVfY3NzX3ZhcnMiLCJwcmVzZXQiLCJsaWdodF9ib3JkZXJlZCIsImRlZmF1bHRzIiwid3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX2dldF9jc3NfdmFyX2tleXMiLCJBcnJheSIsImlzQXJyYXkiLCJmb3JtX3N0eWxlX2Nzc192YXJfbmFtZXMiLCJwcmVzZXRfa2V5IiwidmFyX25hbWUiLCJwdXNoIiwid3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX3N5bmNfY29udHJvbHMiLCJ0aGVtZV9jbGFzc2VzIiwiY3NzX3Zhcl9rZXlzIiwiY2xhc3NfbmFtZSIsInRoZW1lX2NsYXNzIiwicmVtb3ZlIiwiYWRkIiwiY3NzX2tleSIsIndwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc3luY19jdXN0b21fY29udHJvbHNfZnJvbV91aSIsInRoZW1lX3NlbGVjdG9yIiwiZnJvbSIsImNscyIsIndwYmNfYmZiX2FwaSIsIndpdGhfYnVpbGRlciIsIkJ1aWxkZXIiLCJjYXB0dXJlX3JpZ2h0X3NpZGViYXJfYWN0aXZlX3RhYl9yZXN0b3JlX2hhbmRsZSIsInRhYmxpc3RfZWwiLCJhY3RpdmVfdGFiX2VsIiwiY2xpY2siLCJyZXN0b3JlIiwidGFiX3Jlc3RvcmVfaGFuZGxlIiwicmVzdG9yZWQiLCJFVlMiLCJXUEJDX0JGQl9Db3JlIiwiV1BCQ19CRkJfRXZlbnRzIiwiRVZfRE9ORSIsIlNUUlVDVFVSRV9MT0FERUQiLCJDQU5WQVNfUkVGUkVTSEVEIiwiZG9fcmVzdG9yZSIsImJ1cyIsIm9mZiIsIl8iLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJvbiIsImVuYWJsZWQiLCJzZXRfcHJldmlld19tb2RlIiwicmVidWlsZCIsInJlaW5pdCJdLCJzb3VyY2VzIjpbImluY2x1ZGVzL3BhZ2UtZm9ybS1idWlsZGVyL2Zvcm0tc2V0dGluZ3MvX3NyYy9zZXR0aW5nc19lZmZlY3RzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQXBwbGllcyBlZmZlY3RzIGluIENhbnZhcywgYWZ0ZXIgY2hhbmdpbmcgc29tZSBzZXR0aW5ncyBpbiB0aGUgcmlnaHQgc2lkZWJhciBpbiBCRkIuXG4gKlxuICogQGZpbGUgLi4vaW5jbHVkZXMvcGFnZS1mb3JtLWJ1aWxkZXIvZm9ybS1zZXR0aW5ncy9fc3JjL3NldHRpbmdzX2VmZmVjdHMuanNcbiAqL1xuKGZ1bmN0aW9uICh3LCBkKSB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHRjb25zdCBFZmZlY3RzID0gKHcuV1BCQ19CRkJfU2V0dGluZ3NfRWZmZWN0cyA9IHcuV1BCQ19CRkJfU2V0dGluZ3NfRWZmZWN0cyB8fCB7fSk7XG5cdGNvbnN0IG1hcCAgICAgPSAoRWZmZWN0cy5tYXAgPSBFZmZlY3RzLm1hcCB8fCBPYmplY3QuY3JlYXRlKCBudWxsICkpO1xuXG5cdEVmZmVjdHMucmVnaXN0ZXIgPSBmdW5jdGlvbiAoa2V5LCBmbikge1xuXHRcdGlmICgga2V5ICYmIHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJyApIHtcblx0XHRcdG1hcFtTdHJpbmcoIGtleSApXSA9IGZuO1xuXHRcdH1cblx0fTtcblxuXHRmdW5jdGlvbiBnZXRfY2FudmFzX3Jvb3QoKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdGQucXVlcnlTZWxlY3RvciggJyN3cGJjX2JmYl9fcGFnZXNfY29udGFpbmVyJyApIHx8XG5cdFx0XHRkLnF1ZXJ5U2VsZWN0b3IoICcud3BiY19iZmJfX3BhbmVsLS1wcmV2aWV3JyApIHx8XG5cdFx0XHRkLmdldEVsZW1lbnRCeUlkKCAnd3BiY19iZmJfX3ByZXZpZXcnICkgfHxcblx0XHRcdGQuYm9keSB8fCBkLmRvY3VtZW50RWxlbWVudFxuXHRcdCk7XG5cdH1cblxuXHRFZmZlY3RzLmFwcGx5X29uZSA9IGZ1bmN0aW9uIChrZXksIHZhbHVlLCBjdHgpIHtcblx0XHRjb25zdCBmbiA9IG1hcFtTdHJpbmcoIGtleSApXTtcblx0XHRpZiAoICEgZm4gKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRmbiggdmFsdWUsIE9iamVjdC5hc3NpZ24oIHsga2V5LCB2YWx1ZSwgY2FudmFzOiBnZXRfY2FudmFzX3Jvb3QoKSB9LCBjdHggfHwge30gKSApO1xuXHRcdH0gY2F0Y2ggKCBlICkge1xuXHRcdFx0Ly8ga2VlcCBzaWxlbnQgaW4gcHJvZHVjdGlvbiBpZiB5b3UgcHJlZmVyXG5cdFx0XHRjb25zb2xlLmVycm9yKCAnV1BCQyBFZmZlY3RzIGVycm9yOicsIGtleSwgZSApO1xuXHRcdH1cblx0fTtcblxuXHRFZmZlY3RzLmFwcGx5X2FsbCA9IGZ1bmN0aW9uIChvcHRpb25zLCBjdHgpIHtcblx0XHRpZiAoICEgb3B0aW9ucyB8fCB0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdE9iamVjdC5rZXlzKCBvcHRpb25zICkuZm9yRWFjaCggZnVuY3Rpb24gKGspIHtcblx0XHRcdEVmZmVjdHMuYXBwbHlfb25lKCBrLCBvcHRpb25zW2tdLCBPYmplY3QuYXNzaWduKCB7IG9wdGlvbnM6IG9wdGlvbnMgfSwgY3R4IHx8IHt9ICkgKTtcblx0XHR9ICk7XG5cdH07XG5cblx0LyoqXG5cdCAqIE5vcm1hbGl6ZSBzZXR0aW5ncyBwYWNrIHRvIHRoZSBtaW5pbXVtIHJlcXVpcmVkIHNoYXBlOlxuXHQgKiB7IG9wdGlvbnM6IHt9LCBjc3NfdmFyczoge30gfVxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHBhY2tcblx0ICogQHJldHVybiB7e29wdGlvbnM6T2JqZWN0LCBjc3NfdmFyczpPYmplY3QsIGJmYl9vcHRpb25zPzpPYmplY3R9fG51bGx9XG5cdCAqL1xuXHRFZmZlY3RzLm5vcm1hbGl6ZV9wYWNrID0gZnVuY3Rpb24gKHBhY2spIHtcblxuXHRcdGlmICggcGFjayA9PT0gbnVsbCB8fCB0eXBlb2YgcGFjayA9PT0gJ3VuZGVmaW5lZCcgfHwgcGFjayA9PT0gJycgKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHQvLyBQYXJzZSBKU09OIHN0cmluZyBpZiBuZWVkZWQuXG5cdFx0aWYgKCB0eXBlb2YgcGFjayA9PT0gJ3N0cmluZycgKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRwYWNrID0gSlNPTi5wYXJzZSggcGFjayApO1xuXHRcdFx0fSBjYXRjaCAoIF9lICkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoICEgcGFjayB8fCB0eXBlb2YgcGFjayAhPT0gJ29iamVjdCcgKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHQvLyBJZiB1c2VyIHBhc3NlZCBqdXN0IHtrZXk6dmFsdWV9IG9wdGlvbnMgbWFwLCB3cmFwIGl0LlxuXHRcdGNvbnN0IGhhc19zaGFwZSA9XG5cdFx0XHRcdCAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCBwYWNrLCAnb3B0aW9ucycgKSB8fFxuXHRcdFx0XHQgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCggcGFjaywgJ2Nzc192YXJzJyApIHx8XG5cdFx0XHRcdCAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCBwYWNrLCAnYmZiX29wdGlvbnMnICk7XG5cblx0XHRpZiAoICEgaGFzX3NoYXBlICkge1xuXHRcdFx0cGFjayA9IHsgb3B0aW9uczogcGFjaywgY3NzX3ZhcnM6IHt9IH07XG5cdFx0fVxuXG5cdFx0aWYgKCAhIHBhY2sub3B0aW9ucyB8fCB0eXBlb2YgcGFjay5vcHRpb25zICE9PSAnb2JqZWN0JyApIHtcblx0XHRcdHBhY2sub3B0aW9ucyA9IHt9O1xuXHRcdH1cblx0XHRpZiAoICEgcGFjay5jc3NfdmFycyB8fCB0eXBlb2YgcGFjay5jc3NfdmFycyAhPT0gJ29iamVjdCcgKSB7XG5cdFx0XHRwYWNrLmNzc192YXJzID0ge307XG5cdFx0fVxuXG5cdFx0Ly8gYmZiX29wdGlvbnMgaXMgb3B0aW9uYWw7IGtlZXAgaWYgdmFsaWQuXG5cdFx0aWYgKCBwYWNrLmJmYl9vcHRpb25zICYmIHR5cGVvZiBwYWNrLmJmYl9vcHRpb25zICE9PSAnb2JqZWN0JyApIHtcblx0XHRcdGRlbGV0ZSBwYWNrLmJmYl9vcHRpb25zO1xuXHRcdH1cblxuXHRcdHJldHVybiBwYWNrO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBSZS1hcHBseSBzZXR0aW5ncyBlZmZlY3RzIGFmdGVyIGEgY2FudmFzIHJlYnVpbGQgLyBzdHJ1Y3R1cmUgbG9hZC5cblx0ICpcblx0ICogVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBzdHJ1Y3R1cmUgbG9hZGluZyBjYW4gcmVwbGFjZSBET00gbm9kZXMgdGhhdCBlZmZlY3RzIHRhcmdldC5cblx0ICpcblx0ICogQHBhcmFtIHsqfSBzZXR0aW5nc19wYWNrICBzdHJpbmd8b2JqZWN0IHNldHRpbmdzX2pzb24gcGFjayAob3IgcGxhaW4gb3B0aW9ucyBtYXApXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbY3R4XVxuXHQgKi9cblx0RWZmZWN0cy5yZWFwcGx5X2FmdGVyX2NhbnZhcyA9IGZ1bmN0aW9uIChzZXR0aW5nc19wYWNrLCBjdHgpIHtcblxuXHRcdGNvbnN0IHBhY2sgPSBFZmZlY3RzLm5vcm1hbGl6ZV9wYWNrKCBzZXR0aW5nc19wYWNrICk7XG5cdFx0aWYgKCAhIHBhY2sgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gQXBwbHkgaW1tZWRpYXRlbHkgKGJlc3QgZWZmb3J0KS5cblx0XHRFZmZlY3RzLmFwcGx5X2FsbCggcGFjay5vcHRpb25zLCBPYmplY3QuYXNzaWduKCB7IHNvdXJjZTogJ3JlYXBwbHlfYWZ0ZXJfY2FudmFzJyB9LCBjdHggfHwge30gKSApO1xuXHRcdHdwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19hcHBseSggbnVsbCwgT2JqZWN0LmFzc2lnbiggeyBzb3VyY2U6ICdyZWFwcGx5X2FmdGVyX2NhbnZhcycgfSwgY3R4IHx8IHt9ICkgKTtcblxuXHRcdC8vIFNvbWUgbW9kdWxlcy9oeWRyYXRpb24gbWF5IHJ1biBzaG9ydGx5IGFmdGVyOyBkbyBvbmUgbW9yZSBwYXNzLlxuXHRcdHNldFRpbWVvdXQoIGZ1bmN0aW9uICgpIHtcblx0XHRcdEVmZmVjdHMuYXBwbHlfYWxsKCBwYWNrLm9wdGlvbnMsIE9iamVjdC5hc3NpZ24oIHsgc291cmNlOiAncmVhcHBseV9hZnRlcl9jYW52YXNfZGVsYXllZCcgfSwgY3R4IHx8IHt9ICkgKTtcblx0XHRcdHdwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19hcHBseSggbnVsbCwgT2JqZWN0LmFzc2lnbiggeyBzb3VyY2U6ICdyZWFwcGx5X2FmdGVyX2NhbnZhc19kZWxheWVkJyB9LCBjdHggfHwge30gKSApO1xuXHRcdH0sIDYwICk7XG5cdH07XG5cblx0Ly8gMSkgQXBwbHkgZnJvbSBBSkFYIGxvYWQuXG5cdGQuYWRkRXZlbnRMaXN0ZW5lciggJ3dwYmM6YmZiOmZvcm1fc2V0dGluZ3M6YXBwbHknLCBmdW5jdGlvbiAoZSkge1xuXHRcdGNvbnN0IHBhY2sgPSBlICYmIGUuZGV0YWlsID8gZS5kZXRhaWwuc2V0dGluZ3MgOiBudWxsO1xuXHRcdGlmICggcGFjayAmJiBwYWNrLm9wdGlvbnMgKSB7XG5cdFx0XHRFZmZlY3RzLmFwcGx5X2FsbCggcGFjay5vcHRpb25zLCB7IHNvdXJjZTogJ2FwcGx5JyB9ICk7XG5cdFx0fVxuXHRcdHdwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19hcHBseSggbnVsbCwgeyBzb3VyY2U6ICdhcHBseS1nbG9iYWwtc3R5bGUnIH0gKTtcblx0fSApO1xuXG5cdC8vIDIpIEFwcGx5IGxpdmUgZnJvbSBVSSBjaGFuZ2UgKGRlbGVnYXRlZCkuXG5cdGZ1bmN0aW9uIGNzc19lc2NhcGUodmFsdWUpIHtcblx0XHRjb25zdCB2ID0gU3RyaW5nKCB2YWx1ZSA9PSBudWxsID8gJycgOiB2YWx1ZSApO1xuXHRcdGlmICggdy5DU1MgJiYgdHlwZW9mIHcuQ1NTLmVzY2FwZSA9PT0gJ2Z1bmN0aW9uJyApIHtcblx0XHRcdHJldHVybiB3LkNTUy5lc2NhcGUoIHYgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHYucmVwbGFjZSggL1teYS16QS1aMC05X1xcLV0vZywgJ1xcXFwkJicgKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGZpbmRfZnNfcm9vdChlbCkge1xuXHRcdGlmICggISBlbCB8fCAhIGVsLmNsb3Nlc3QgKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHQvLyAxKSBEaXJlY3Q6IGVsZW1lbnQgb3IgYW5jZXN0b3IgY2FycmllcyBGUyBrZXkgKGlucHV0L3NlbGVjdC90ZXh0YXJlYSB3cml0ZXIsIHJhZGlvIHdyYXBwZXIsIGV0Yy4pXG5cdFx0Y29uc3QgZGlyZWN0ID0gZWwuY2xvc2VzdCggJ1tkYXRhLXdwYmMtYmZiLWZzLWtleV0nICk7XG5cdFx0aWYgKCBkaXJlY3QgKSB7XG5cdFx0XHRyZXR1cm4gZGlyZWN0O1xuXHRcdH1cblxuXHRcdC8vIDIpIExlbmd0aDogZXZlbnQgY2FtZSBmcm9tIG51bWJlci91bml0L3JhbmdlIGluc2lkZSAud3BiY19zbGlkZXJfbGVuX2dyb3VwXG5cdFx0Y29uc3QgbGVuX2dyb3VwID0gZWwuY2xvc2VzdCggJy53cGJjX3NsaWRlcl9sZW5fZ3JvdXAnICk7XG5cdFx0aWYgKCBsZW5fZ3JvdXAgKSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRsZW5fZ3JvdXAucXVlcnlTZWxlY3RvciggJ2lucHV0W2RhdGEtd3BiY19zbGlkZXJfbGVuX3dyaXRlcl1bZGF0YS13cGJjLWJmYi1mcy1rZXldJyApIHx8XG5cdFx0XHRcdGxlbl9ncm91cC5xdWVyeVNlbGVjdG9yKCAnaW5wdXRbZGF0YS13cGJjLWJmYi1mcy10eXBlPVwibGVuZ3RoXCJdW2RhdGEtd3BiYy1iZmItZnMta2V5XScgKSB8fFxuXHRcdFx0XHRudWxsXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdC8vIDMpIFNwYWNpbmc6IGV2ZW50IGNhbWUgZnJvbSB2ZXJ0aWNhbC9ob3Jpem9udGFsIG51bWJlciBpbnNpZGUgLndwYmNfc3BhY2luZ19ncm91cC5cblx0XHRjb25zdCBzcGFjaW5nX2dyb3VwID0gZWwuY2xvc2VzdCggJy53cGJjX3NwYWNpbmdfZ3JvdXAnICk7XG5cdFx0aWYgKCBzcGFjaW5nX2dyb3VwICkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0c3BhY2luZ19ncm91cC5xdWVyeVNlbGVjdG9yKCAnaW5wdXRbZGF0YS13cGJjX3NwYWNpbmdfd3JpdGVyXVtkYXRhLXdwYmMtYmZiLWZzLWtleV0nICkgfHxcblx0XHRcdFx0c3BhY2luZ19ncm91cC5xdWVyeVNlbGVjdG9yKCAnaW5wdXRbZGF0YS13cGJjLWJmYi1mcy10eXBlPVwic3BhY2luZ1wiXVtkYXRhLXdwYmMtYmZiLWZzLWtleV0nICkgfHxcblx0XHRcdFx0bnVsbFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHQvLyA0KSBSYW5nZTogZXZlbnQgY2FtZSBmcm9tIHJhbmdlIGlucHV0IGluc2lkZSAud3BiY19zbGlkZXJfcmFuZ2VfZ3JvdXBcblx0XHRjb25zdCByYW5nZV9ncm91cCA9IGVsLmNsb3Nlc3QoICcud3BiY19zbGlkZXJfcmFuZ2VfZ3JvdXAnICk7XG5cdFx0aWYgKCByYW5nZV9ncm91cCApIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdHJhbmdlX2dyb3VwLnF1ZXJ5U2VsZWN0b3IoICdpbnB1dFtkYXRhLXdwYmNfc2xpZGVyX3JhbmdlX3dyaXRlcl1bZGF0YS13cGJjLWJmYi1mcy1rZXldJyApIHx8XG5cdFx0XHRcdHJhbmdlX2dyb3VwLnF1ZXJ5U2VsZWN0b3IoICdpbnB1dFtkYXRhLXdwYmNfc2xpZGVyX3JhbmdlX3dyaXRlcl0nICkgfHxcblx0XHRcdFx0bnVsbFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGZ1bmN0aW9uIHJlYWRfdmFsdWVfZnJvbV9mc19yb290KGZzX3Jvb3QsIG9yaWdpbmFsX3RhcmdldCkge1xuXHRcdGlmICggISBmc19yb290ICkge1xuXHRcdFx0cmV0dXJuICcnO1xuXHRcdH1cblxuXHRcdGNvbnN0IGZzX3R5cGUgPSBTdHJpbmcoIGZzX3Jvb3QuZ2V0QXR0cmlidXRlKCAnZGF0YS13cGJjLWJmYi1mcy10eXBlJyApIHx8ICcnICk7XG5cblx0XHQvLyBSQURJTzogcmVhZCBjaGVja2VkIHdpdGhpbiB3cmFwcGVyLlxuXHRcdGlmICggZnNfdHlwZSA9PT0gJ3JhZGlvJyApIHtcblx0XHRcdGNvbnN0IGNvbnRyb2xfaWQgPSBmc19yb290LmdldEF0dHJpYnV0ZSggJ2RhdGEtd3BiYy1iZmItZnMtY29udHJvbGlkJyApIHx8ICcnO1xuXHRcdFx0Y29uc3Qgc2VsZWN0b3IgICA9IGNvbnRyb2xfaWRcblx0XHRcdFx0PyAnaW5wdXRbdHlwZT1cInJhZGlvXCJdW25hbWU9XCInICsgY3NzX2VzY2FwZSggY29udHJvbF9pZCApICsgJ1wiXTpjaGVja2VkJ1xuXHRcdFx0XHQ6ICdpbnB1dFt0eXBlPVwicmFkaW9cIl06Y2hlY2tlZCc7XG5cblx0XHRcdGNvbnN0IGNoZWNrZWQgPSBmc19yb290LnF1ZXJ5U2VsZWN0b3IoIHNlbGVjdG9yICk7XG5cdFx0XHRyZXR1cm4gY2hlY2tlZCA/IFN0cmluZyggY2hlY2tlZC52YWx1ZSB8fCAnJyApIDogJyc7XG5cdFx0fVxuXG5cdFx0aWYgKCBmc190eXBlID09PSAnc3BhY2luZycgKSB7XG5cdFx0XHRjb25zdCBncm91cCA9ICggb3JpZ2luYWxfdGFyZ2V0ICYmIG9yaWdpbmFsX3RhcmdldC5jbG9zZXN0ICkgPyBvcmlnaW5hbF90YXJnZXQuY2xvc2VzdCggJy53cGJjX3NwYWNpbmdfZ3JvdXAnICkgOiBmc19yb290LmNsb3Nlc3QoICcud3BiY19zcGFjaW5nX2dyb3VwJyApO1xuXHRcdFx0Y29uc3QgdmVydGljYWxfaW5wdXQgPSBncm91cCA/IGdyb3VwLnF1ZXJ5U2VsZWN0b3IoICdpbnB1dFtkYXRhLXdwYmNfc3BhY2luZ192ZXJ0aWNhbF0nICkgOiBudWxsO1xuXHRcdFx0Y29uc3QgaG9yaXpvbnRhbF9pbnB1dCA9IGdyb3VwID8gZ3JvdXAucXVlcnlTZWxlY3RvciggJ2lucHV0W2RhdGEtd3BiY19zcGFjaW5nX2hvcml6b250YWxdJyApIDogbnVsbDtcblx0XHRcdGNvbnN0IHdyaXRlciA9IGdyb3VwID8gZ3JvdXAucXVlcnlTZWxlY3RvciggJ2lucHV0W2RhdGEtd3BiY19zcGFjaW5nX3dyaXRlcl0nICkgOiBudWxsO1xuXHRcdFx0Y29uc3QgdmVydGljYWwgPSB2ZXJ0aWNhbF9pbnB1dCA/IFN0cmluZyggdmVydGljYWxfaW5wdXQudmFsdWUgfHwgJzAnICkgOiAnMCc7XG5cdFx0XHRjb25zdCBob3Jpem9udGFsID0gaG9yaXpvbnRhbF9pbnB1dCA/IFN0cmluZyggaG9yaXpvbnRhbF9pbnB1dC52YWx1ZSB8fCB2ZXJ0aWNhbCApIDogdmVydGljYWw7XG5cdFx0XHRjb25zdCBjb21iaW5lZCA9IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fbm9ybWFsaXplX3NwYWNpbmdfbnVtYmVycyggdmVydGljYWwsIGhvcml6b250YWwgKTtcblxuXHRcdFx0aWYgKCB3cml0ZXIgKSB7XG5cdFx0XHRcdHdyaXRlci52YWx1ZSA9IGNvbWJpbmVkO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gY29tYmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gQ0hFQ0tCT1ggLyBUT0dHTEVcblx0XHRpZiAoIChvcmlnaW5hbF90YXJnZXQgJiYgb3JpZ2luYWxfdGFyZ2V0LnR5cGUgPT09ICdjaGVja2JveCcpIHx8IGZzX3Jvb3QudHlwZSA9PT0gJ2NoZWNrYm94JyApIHtcblx0XHRcdGNvbnN0IGNiID0gKG9yaWdpbmFsX3RhcmdldCAmJiBvcmlnaW5hbF90YXJnZXQudHlwZSA9PT0gJ2NoZWNrYm94JykgPyBvcmlnaW5hbF90YXJnZXQgOiBmc19yb290O1xuXHRcdFx0cmV0dXJuIGNiLmNoZWNrZWQgPyAnT24nIDogJ09mZic7XG5cdFx0fVxuXG5cdFx0Ly8gREVGQVVMVDogd3JpdGVyL2lucHV0L3RleHRhcmVhL3NlbGVjdFxuXHRcdGlmICggZnNfcm9vdC52YWx1ZSAhPSBudWxsICkge1xuXHRcdFx0cmV0dXJuIFN0cmluZyggZnNfcm9vdC52YWx1ZSApO1xuXHRcdH1cblx0XHRpZiAoIG9yaWdpbmFsX3RhcmdldCAmJiBvcmlnaW5hbF90YXJnZXQudmFsdWUgIT0gbnVsbCApIHtcblx0XHRcdHJldHVybiBTdHJpbmcoIG9yaWdpbmFsX3RhcmdldC52YWx1ZSApO1xuXHRcdH1cblxuXHRcdHJldHVybiAnJztcblx0fVxuXG5cdGZ1bmN0aW9uIGFwcGx5X2NoYW5nZV9mcm9tX3RhcmdldCh0YXJnZXQsIGV2ZW50X3R5cGUsIGV2ZW50X3NvdXJjZSkge1xuXHRcdGlmICggISB0YXJnZXQgKSB7IHJldHVybjsgfVxuXG5cdFx0Y29uc3QgZnNfcm9vdCA9IGZpbmRfZnNfcm9vdCggdGFyZ2V0ICk7XG5cdFx0aWYgKCAhIGZzX3Jvb3QgKSB7IHJldHVybjsgfVxuXG5cblx0XHQvLyBOb3JtYWxpemUgZXZlbnRzIHNvIGVhY2ggY29udHJvbCBwcm9kdWNlcyBleGFjdGx5IG9uZSBlZmZlY3QgY2FsbC5cblx0XHQvLyAtIHRvZ2dsZS9zZWxlY3QvcmFkaW8vY2hlY2tib3ggPT4gXCJjaGFuZ2VcIiBvbmx5LlxuXHRcdC8vIC0gZXZlcnl0aGluZyBlbHNlICAgICAgICAgICAgICA9PiBcImlucHV0XCIgb25seS5cblx0XHRjb25zdCBmc190eXBlID0gU3RyaW5nKCBmc19yb290LmdldEF0dHJpYnV0ZSggJ2RhdGEtd3BiYy1iZmItZnMtdHlwZScgKSB8fCAnJyApO1xuXHRcdGNvbnN0IHRhZyAgICAgPSBTdHJpbmcoIHRhcmdldC50YWdOYW1lIHx8ICcnICkudG9Mb3dlckNhc2UoKTtcblx0XHRjb25zdCB0eXBlICAgID0gU3RyaW5nKCB0YXJnZXQudHlwZSB8fCAnJyApLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRjb25zdCB1c2VfY2hhbmdlID0gKGZzX3R5cGUgPT09ICd0b2dnbGUnKSB8fCAoZnNfdHlwZSA9PT0gJ3NlbGVjdCcpIHx8IChmc190eXBlID09PSAncmFkaW8nKSB8fCAodHlwZSA9PT0gJ2NoZWNrYm94JykgfHwgKHR5cGUgPT09ICdyYWRpbycpIHx8ICh0YWcgPT09ICdzZWxlY3QnKTtcblxuXHRcdGlmICggdXNlX2NoYW5nZSAmJiBldmVudF90eXBlICE9PSAnY2hhbmdlJyApIHsgcmV0dXJuOyB9XG5cdFx0aWYgKCAhIHVzZV9jaGFuZ2UgJiYgZXZlbnRfdHlwZSAhPT0gJ2lucHV0JyApIHsgcmV0dXJuOyB9XG5cdFx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cdFx0Y29uc3Qga2V5ID0gZnNfcm9vdC5nZXRBdHRyaWJ1dGUoICdkYXRhLXdwYmMtYmZiLWZzLWtleScgKTtcblx0XHRpZiAoICEga2V5ICkgeyByZXR1cm47IH1cblxuXHRcdGNvbnN0IHNjb3BlID0gZnNfcm9vdC5nZXRBdHRyaWJ1dGUoICdkYXRhLXdwYmMtYmZiLWZzLXNjb3BlJyApIHx8ICcnO1xuXHRcdGNvbnN0IHZhbHVlID0gcmVhZF92YWx1ZV9mcm9tX2ZzX3Jvb3QoIGZzX3Jvb3QsIHRhcmdldCApO1xuXG5cdFx0RWZmZWN0cy5hcHBseV9vbmUoIGtleSwgdmFsdWUsIHsgc291cmNlOiBldmVudF9zb3VyY2UgfHwgJ3VpJywgc2NvcGU6IHNjb3BlLCBjb250cm9sOiB0YXJnZXQsIGZzX3Jvb3Q6IGZzX3Jvb3QgfSApO1xuXHR9XG5cblx0ZnVuY3Rpb24gaXNfY29sb3Jpc19jb250cm9sKHRhcmdldCkge1xuXHRcdGlmICggISB0YXJnZXQgfHwgISB0YXJnZXQubWF0Y2hlcyApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGFyZ2V0Lm1hdGNoZXMoICdbZGF0YS13cGJjLWJmYi1mcy10eXBlPVwiY29sb3JcIl0sIFtkYXRhLWluc3BlY3Rvci10eXBlPVwiY29sb3JcIl0sIC53cGJjX2JmYl9jb2xvcmlzJyApO1xuXHR9XG5cblx0ZnVuY3Rpb24gb25fY2hhbmdlKGV2KSB7XG5cdFx0Ly8gSWdub3JlIGdlbmVyaWMgc3ludGhldGljIGV2ZW50cyBkaXNwYXRjaGVkIGJ5IGNvZGUgKGFwcGx5L3JlYXBwbHksIHNsaWRlciBzeW5jLCBldGMuKS5cblx0XHQvLyBDb2xvcmlzIGRpc3BhdGNoZXMgc3ludGhldGljIGlucHV0IGV2ZW50cyB3aGlsZSB0aGUgdXNlciBwaWNrcyBhIGNvbG9yLCBzbyBhbGxvdyB0aG9zZSBjb2xvciBjb250cm9scyB0aHJvdWdoLlxuXHRcdGlmICggZXYgJiYgZXYuaXNUcnVzdGVkID09PSBmYWxzZSAmJiAhIGlzX2NvbG9yaXNfY29udHJvbCggZXYudGFyZ2V0ICkgKSB7IHJldHVybjsgfVxuXHRcdGFwcGx5X2NoYW5nZV9mcm9tX3RhcmdldCggZXYgJiYgZXYudGFyZ2V0LCBldiAmJiBldi50eXBlLCAoIGV2ICYmIGV2LmlzVHJ1c3RlZCA9PT0gZmFsc2UgKSA/ICdjb2xvcmlzJyA6ICd1aScgKTtcblx0fVxuXG5cdGQuYWRkRXZlbnRMaXN0ZW5lciggJ2lucHV0Jywgb25fY2hhbmdlLCBmYWxzZSApO1xuXHRkLmFkZEV2ZW50TGlzdGVuZXIoICdjaGFuZ2UnLCBvbl9jaGFuZ2UsIGZhbHNlICk7XG5cdGZ1bmN0aW9uIG9uX2NvbG9yaXNfcGljayhldikge1xuXHRcdGNvbnN0IGRldGFpbCA9IGV2ICYmIGV2LmRldGFpbCA/IGV2LmRldGFpbCA6IHt9O1xuXHRcdGNvbnN0IHRhcmdldCA9IGRldGFpbC5jdXJyZW50RWwgfHwgZGV0YWlsLmVsIHx8IGRldGFpbC5pbnB1dCB8fCBldi50YXJnZXQgfHwgbnVsbDtcblxuXHRcdGlmICggISBpc19jb2xvcmlzX2NvbnRyb2woIHRhcmdldCApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggZGV0YWlsLmNvbG9yICYmIHRhcmdldC52YWx1ZSAhPT0gZGV0YWlsLmNvbG9yICkge1xuXHRcdFx0dGFyZ2V0LnZhbHVlID0gZGV0YWlsLmNvbG9yO1xuXHRcdH1cblxuXHRcdGFwcGx5X2NoYW5nZV9mcm9tX3RhcmdldCggdGFyZ2V0LCAnaW5wdXQnLCAnY29sb3JpcycgKTtcblx0fVxuXHRkLmFkZEV2ZW50TGlzdGVuZXIoICdjb2xvcmlzOnBpY2snLCBvbl9jb2xvcmlzX3BpY2ssIGZhbHNlICk7XG5cdGQuYWRkRXZlbnRMaXN0ZW5lciggJ3dwYmM6YmZiOmNvbG9yaXM6Y2hhbmdlJywgb25fY29sb3Jpc19waWNrLCBmYWxzZSApO1xuXG59KSggd2luZG93LCBkb2N1bWVudCApO1xuXG5mdW5jdGlvbiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX2dldF9wcmVzZXRzKCkge1xuXHRyZXR1cm4ge1xuXHRcdGJvcmRlcmVkOiB7XG5cdFx0XHRiYWNrZ3JvdW5kIDogJyNmZmZmZmYnLFxuXHRcdFx0Ym9yZGVyQ29sb3I6ICcjY2NjY2NjJyxcblx0XHRcdGJvcmRlcldpZHRoOiAnMXB4Jyxcblx0XHRcdHJhZGl1cyAgICAgOiAnMnB4Jyxcblx0XHRcdHBhZGRpbmcgICAgOiAnMTBweCAzMHB4Jyxcblx0XHRcdHNoYWRvdyAgICAgOiAncmdiYSgwLCAwLCAwLCAwLjA1KSAwcHggMnB4IDZweCAwcHgnXG5cdFx0fSxcblx0XHRub25lICAgIDoge1xuXHRcdFx0YmFja2dyb3VuZCA6ICd0cmFuc3BhcmVudCcsXG5cdFx0XHRib3JkZXJDb2xvcjogJ3RyYW5zcGFyZW50Jyxcblx0XHRcdGJvcmRlcldpZHRoOiAnMHB4Jyxcblx0XHRcdHJhZGl1cyAgICAgOiAnMHB4Jyxcblx0XHRcdHBhZGRpbmcgICAgOiAnMHB4Jyxcblx0XHRcdHNoYWRvdyAgICAgOiAnbm9uZSdcblx0XHR9LFxuXHRcdHNvZnQgICAgOiB7XG5cdFx0XHRiYWNrZ3JvdW5kIDogJyNmOWY5ZmEnLFxuXHRcdFx0Ym9yZGVyQ29sb3I6ICcjZmZmJyxcblx0XHRcdGJvcmRlcldpZHRoOiAnM3B4Jyxcblx0XHRcdHJhZGl1cyAgICAgOiAnOHB4Jyxcblx0XHRcdHBhZGRpbmcgICAgOiAnMjBweCcsXG5cdFx0XHRzaGFkb3cgICAgIDogJ3JnYmEoMTUsIDIzLCA0MiwgMC4wNikgMHB4IDRweCAxNnB4IDBweCdcblx0XHR9XG5cdH07XG59XG5cbmZ1bmN0aW9uIHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9faXNfZGFya190aGVtZShvcHRpb25zKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zID09PSAnb2JqZWN0JyA/IG9wdGlvbnMgOiB7fTtcblx0cmV0dXJuICd3cGJjX3RoZW1lX2RhcmtfMScgPT09IFN0cmluZyggb3B0aW9ucy5ib29raW5nX2Zvcm1fdGhlbWUgfHwgJycgKTtcbn1cblxuZnVuY3Rpb24gd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19nZXRfcHJlc2V0X2Zvcl9vcHRpb25zKHN0eWxlLCBvcHRpb25zKSB7XG5cdGNvbnN0IHByZXNldHMgPSB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX2dldF9wcmVzZXRzKCk7XG5cblx0aWYgKCAhIHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9faXNfZGFya190aGVtZSggb3B0aW9ucyApICkge1xuXHRcdHJldHVybiBwcmVzZXRzW3N0eWxlXSB8fCBwcmVzZXRzLmJvcmRlcmVkO1xuXHR9XG5cblx0aWYgKCAnc29mdCcgPT09IHN0eWxlICkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRiYWNrZ3JvdW5kIDogJyMxZjI5MzcnLFxuXHRcdFx0Ym9yZGVyQ29sb3I6ICcjMzM0MTU1Jyxcblx0XHRcdGJvcmRlcldpZHRoOiAnM3B4Jyxcblx0XHRcdHJhZGl1cyAgICAgOiAnOHB4Jyxcblx0XHRcdHBhZGRpbmcgICAgOiAnMjBweCcsXG5cdFx0XHRzaGFkb3cgICAgIDogJ3JnYmEoMCwgMCwgMCwgMC4yNCkgMHB4IDRweCAxNnB4IDBweCdcblx0XHR9O1xuXHR9XG5cblx0cmV0dXJuIHByZXNldHNbc3R5bGVdIHx8IHByZXNldHMuYm9yZGVyZWQ7XG59XG5cbmZ1bmN0aW9uIHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfY29sb3IodmFsdWUsIGZhbGxiYWNrKSB7XG5cdGNvbnN0IHYgPSBTdHJpbmcoIHZhbHVlID09IG51bGwgPyAnJyA6IHZhbHVlICkudHJpbSgpO1xuXHRpZiAoIC9eIyg/OlswLTlhLWZdezN9fFswLTlhLWZdezZ9KSQvaS50ZXN0KCB2ICkgKSB7XG5cdFx0cmV0dXJuIHY7XG5cdH1cblx0aWYgKCB2ID09PSAndHJhbnNwYXJlbnQnICkge1xuXHRcdHJldHVybiB2O1xuXHR9XG5cdHJldHVybiBmYWxsYmFjaztcbn1cblxuZnVuY3Rpb24gd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zYW5pdGl6ZV9vcHRpb25hbF9jb2xvcih2YWx1ZSkge1xuXHRyZXR1cm4gd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zYW5pdGl6ZV9jb2xvciggdmFsdWUsICcnICk7XG59XG5cbmZ1bmN0aW9uIHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfbGVuZ3RoKHZhbHVlLCBmYWxsYmFjaykge1xuXHRjb25zdCB2ID0gU3RyaW5nKCB2YWx1ZSA9PSBudWxsID8gJycgOiB2YWx1ZSApLnRyaW0oKTtcblx0aWYgKCAvXi0/XFxkKyg/OlxcLlxcZCspPyg/OnB4fHJlbXxlbXwlKSQvaS50ZXN0KCB2ICkgKSB7XG5cdFx0cmV0dXJuIHY7XG5cdH1cblx0cmV0dXJuIGZhbGxiYWNrO1xufVxuXG5mdW5jdGlvbiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX3NwYWNpbmcodmFsdWUsIGZhbGxiYWNrKSB7XG5cdGNvbnN0IHYgPSBTdHJpbmcoIHZhbHVlID09IG51bGwgPyAnJyA6IHZhbHVlICkudHJpbSgpLnJlcGxhY2UoIC9cXHMrL2csICcgJyApO1xuXHRjb25zdCBwYXJ0cyA9IHYgPyB2LnNwbGl0KCAnICcgKSA6IFtdO1xuXHRpZiAoIHBhcnRzLmxlbmd0aCA8IDEgfHwgcGFydHMubGVuZ3RoID4gNCApIHtcblx0XHRyZXR1cm4gZmFsbGJhY2s7XG5cdH1cblx0Zm9yICggbGV0IGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKysgKSB7XG5cdFx0aWYgKCAhIC9eLT9cXGQrKD86XFwuXFxkKyk/KD86cHh8cmVtfGVtfCUpJC9pLnRlc3QoIHBhcnRzW2ldICkgKSB7XG5cdFx0XHRyZXR1cm4gZmFsbGJhY2s7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBwYXJ0cy5qb2luKCAnICcgKTtcbn1cblxuZnVuY3Rpb24gd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19ub3JtYWxpemVfc3BhY2luZ19udW1iZXJzKHZlcnRpY2FsLCBob3Jpem9udGFsKSB7XG5cdGNvbnN0IHYgPSBTdHJpbmcoIHZlcnRpY2FsID09IG51bGwgPyAnJyA6IHZlcnRpY2FsICkudHJpbSgpO1xuXHRjb25zdCBoID0gU3RyaW5nKCBob3Jpem9udGFsID09IG51bGwgPyAnJyA6IGhvcml6b250YWwgKS50cmltKCk7XG5cdGNvbnN0IHZlcnRpY2FsX251bSA9IC9eLT9cXGQrKD86XFwuXFxkKyk/JC8udGVzdCggdiApID8gdiA6ICcwJztcblx0Y29uc3QgaG9yaXpvbnRhbF9udW0gPSAvXi0/XFxkKyg/OlxcLlxcZCspPyQvLnRlc3QoIGggKSA/IGggOiB2ZXJ0aWNhbF9udW07XG5cblx0cmV0dXJuIHZlcnRpY2FsX251bSArICdweCAnICsgaG9yaXpvbnRhbF9udW0gKyAncHgnO1xufVxuXG5mdW5jdGlvbiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX2NvbGxlY3Rfb3B0aW9ucyhjdHgsIGtleSwgdmFsdWUpIHtcblx0bGV0IG9wdGlvbnMgPSAoY3R4ICYmIGN0eC5vcHRpb25zICYmIHR5cGVvZiBjdHgub3B0aW9ucyA9PT0gJ29iamVjdCcpID8gT2JqZWN0LmFzc2lnbigge30sIGN0eC5vcHRpb25zICkgOiB7fTtcblxuXHRpZiAoIHdpbmRvdy5XUEJDX0JGQl9Gb3JtU2V0dGluZ3MgJiYgdHlwZW9mIHdpbmRvdy5XUEJDX0JGQl9Gb3JtU2V0dGluZ3MuY29sbGVjdCA9PT0gJ2Z1bmN0aW9uJyApIHtcblx0XHRvcHRpb25zID0gT2JqZWN0LmFzc2lnbiggd2luZG93LldQQkNfQkZCX0Zvcm1TZXR0aW5ncy5jb2xsZWN0KCAnZm9ybScgKSB8fCB7fSwgb3B0aW9ucyApO1xuXHR9XG5cblx0aWYgKCBrZXkgKSB7XG5cdFx0b3B0aW9uc1tTdHJpbmcoIGtleSApXSA9IHZhbHVlO1xuXHR9XG5cblx0aWYgKCB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX2lzX2N1c3RvbV9jb250cm9sX2tleSgga2V5ICkgKSB7XG5cdFx0b3B0aW9ucy5ib29raW5nX2Zvcm1fY29udGFpbmVyX3N0eWxlID0gJ2N1c3RvbSc7XG5cdFx0d3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zZXRfY29udGFpbmVyX3N0eWxlX2NvbnRyb2woICdjdXN0b20nICk7XG5cdH1cblxuXHRyZXR1cm4gb3B0aW9ucztcbn1cblxuZnVuY3Rpb24gd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19nZXRfY3VzdG9tX2NvbnRyb2xfa2V5cygpIHtcblx0cmV0dXJuIFtcblx0XHQnYm9va2luZ19mb3JtX2JhY2tncm91bmRfY29sb3InLFxuXHRcdCdib29raW5nX2Zvcm1fYm9yZGVyX2NvbG9yJyxcblx0XHQnYm9va2luZ19mb3JtX2JvcmRlcl93aWR0aCcsXG5cdFx0J2Jvb2tpbmdfZm9ybV9ib3JkZXJfcmFkaXVzJyxcblx0XHQnYm9va2luZ19mb3JtX3BhZGRpbmcnLFxuXHRcdCdib29raW5nX2Zvcm1fdGV4dF9jb2xvcicsXG5cdFx0J2Jvb2tpbmdfZm9ybV9maWVsZF9iYWNrZ3JvdW5kX2NvbG9yJyxcblx0XHQnYm9va2luZ19mb3JtX2ZpZWxkX3RleHRfY29sb3InLFxuXHRcdCdib29raW5nX2Zvcm1fZmllbGRfYm9yZGVyX2NvbG9yJ1xuXHRdO1xufVxuXG5mdW5jdGlvbiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX2lzX2N1c3RvbV9jb250cm9sX2tleShrZXkpIHtcblx0cmV0dXJuIHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fZ2V0X2N1c3RvbV9jb250cm9sX2tleXMoKS5pbmRleE9mKCBTdHJpbmcoIGtleSB8fCAnJyApICkgIT09IC0xO1xufVxuXG5mdW5jdGlvbiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3NldF9jb250YWluZXJfc3R5bGVfY29udHJvbCh2YWx1ZSkge1xuXHRjb25zdCBjb250cm9sID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvciggJ1tkYXRhLXdwYmMtYmZiLWZzLWtleT1cImJvb2tpbmdfZm9ybV9jb250YWluZXJfc3R5bGVcIl0nICk7XG5cdGlmICggISBjb250cm9sIHx8IGNvbnRyb2wudmFsdWUgPT09IHZhbHVlICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnRyb2wudmFsdWUgPSB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zZXRfcmFkaW9fY29udHJvbChrZXksIHZhbHVlKSB7XG5cdGNvbnN0IHJvdyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoICcud3BiY19iZmJfX2Zvcm1fc2V0dGluZ1tkYXRhLWtleT1cIicgKyBrZXkgKyAnXCJdJyApO1xuXHRpZiAoICEgcm93ICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IHdyYXAgPSByb3cucXVlcnlTZWxlY3RvciggJy53cGJjX2JmYl9fZm9ybV9zZXR0aW5nX3JhZGlvW2RhdGEtd3BiYy1iZmItZnMtY29udHJvbGlkXScgKTtcblx0Y29uc3QgY29udHJvbF9pZCA9IHdyYXAgPyBTdHJpbmcoIHdyYXAuZ2V0QXR0cmlidXRlKCAnZGF0YS13cGJjLWJmYi1mcy1jb250cm9saWQnICkgfHwgJycgKSA6ICcnO1xuXHRjb25zdCByYWRpb3MgPSBjb250cm9sX2lkXG5cdFx0PyByb3cucXVlcnlTZWxlY3RvckFsbCggJ2lucHV0W3R5cGU9XCJyYWRpb1wiXVtuYW1lPVwiJyArIGNvbnRyb2xfaWQgKyAnXCJdJyApXG5cdFx0OiByb3cucXVlcnlTZWxlY3RvckFsbCggJ2lucHV0W3R5cGU9XCJyYWRpb1wiXScgKTtcblxuXHRyYWRpb3MuZm9yRWFjaCggZnVuY3Rpb24gKHJhZGlvKSB7XG5cdFx0Y29uc3Qgc2hvdWxkX2NoZWNrID0gKCBTdHJpbmcoIHJhZGlvLnZhbHVlICkgPT09IFN0cmluZyggdmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWUgKSApO1xuXHRcdHJhZGlvLmNoZWNrZWQgPSBzaG91bGRfY2hlY2s7XG5cblx0XHRjb25zdCBjaG9pY2UgPSByYWRpby5jbG9zZXN0ID8gcmFkaW8uY2xvc2VzdCggJy53cGJjX3RoZW1lX2Nob2ljZScgKSA6IG51bGw7XG5cdFx0aWYgKCBjaG9pY2UgKSB7XG5cdFx0XHRjaG9pY2UuY2xhc3NMaXN0LnRvZ2dsZSggJ2lzLXNlbGVjdGVkJywgc2hvdWxkX2NoZWNrICk7XG5cdFx0fVxuXHR9ICk7XG59XG5cbmZ1bmN0aW9uIHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2V0X3NlbGVjdF9jb250cm9sKGtleSwgdmFsdWUpIHtcblx0Y29uc3QgY29udHJvbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoICdbZGF0YS13cGJjLWJmYi1mcy1rZXk9XCInICsga2V5ICsgJ1wiXScgKTtcblx0aWYgKCBjb250cm9sICkge1xuXHRcdGNvbnRyb2wudmFsdWUgPSBTdHJpbmcoIHZhbHVlID09IG51bGwgPyAnJyA6IHZhbHVlICk7XG5cdH1cbn1cblxuZnVuY3Rpb24gd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19nZXRfY3VycmVudF9vcHRpb25zKCkge1xuXHRyZXR1cm4gd2luZG93LldQQkNfQkZCX0Zvcm1TZXR0aW5ncyAmJiB0eXBlb2Ygd2luZG93LldQQkNfQkZCX0Zvcm1TZXR0aW5ncy5jb2xsZWN0ID09PSAnZnVuY3Rpb24nXG5cdFx0PyB3aW5kb3cuV1BCQ19CRkJfRm9ybVNldHRpbmdzLmNvbGxlY3QoICdmb3JtJyApIHx8IHt9XG5cdFx0OiB7fTtcbn1cblxuZnVuY3Rpb24gd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19nZXRfc3R5bGVfdmFsdWVfZnJvbV9vcHRpb25zKG9wdGlvbnMpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMgPT09ICdvYmplY3QnID8gb3B0aW9ucyA6IHt9O1xuXG5cdGNvbnN0IHRoZW1lID0gU3RyaW5nKCBvcHRpb25zLmJvb2tpbmdfZm9ybV90aGVtZSB8fCAnJyApO1xuXHRjb25zdCBzdHlsZSA9IFN0cmluZyggb3B0aW9ucy5ib29raW5nX2Zvcm1fY29udGFpbmVyX3N0eWxlIHx8ICdpbmhlcml0JyApO1xuXG5cdGlmICggJ2N1c3RvbScgPT09IHN0eWxlICkge1xuXHRcdHJldHVybiAnY3VzdG9tJztcblx0fVxuXHRpZiAoICdpbmhlcml0JyA9PT0gc3R5bGUgfHwgJycgPT09IHN0eWxlICkge1xuXHRcdHJldHVybiAnaW5oZXJpdCc7XG5cdH1cblxuXHRjb25zdCBwcmVmaXggPSAoICd3cGJjX3RoZW1lX2RhcmtfMScgPT09IHRoZW1lICkgPyAnZGFyaycgOiAnbGlnaHQnO1xuXHRpZiAoIFsgJ2JvcmRlcmVkJywgJ25vbmUnLCAnc29mdCcgXS5pbmRleE9mKCBzdHlsZSApID09PSAtMSApIHtcblx0XHRyZXR1cm4gcHJlZml4ICsgJ19ib3JkZXJlZCc7XG5cdH1cblxuXHRyZXR1cm4gcHJlZml4ICsgJ18nICsgc3R5bGU7XG59XG5cbmZ1bmN0aW9uIHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc3luY19mb3JtX3N0eWxlX2NvbnRyb2wob3B0aW9ucykge1xuXHR3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3NldF9yYWRpb19jb250cm9sKCAnYm9va2luZ19mb3JtX3N0eWxlJywgd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19nZXRfc3R5bGVfdmFsdWVfZnJvbV9vcHRpb25zKCBvcHRpb25zICkgKTtcbn1cblxuZnVuY3Rpb24gd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19yZXNvbHZlX2Zvcm1fc3R5bGVfY2hvaWNlKHZhbHVlKSB7XG5cdGNvbnN0IGN1cnJlbnRfb3B0aW9ucyA9IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fZ2V0X2N1cnJlbnRfb3B0aW9ucygpO1xuXHRjb25zdCBjdXJyZW50X3RoZW1lID0gU3RyaW5nKCBjdXJyZW50X29wdGlvbnMuYm9va2luZ19mb3JtX3RoZW1lIHx8ICcnICk7XG5cdGNvbnN0IGNob2ljZSA9IFN0cmluZyggdmFsdWUgfHwgJ2luaGVyaXQnICk7XG5cblx0aWYgKCAnY3VzdG9tJyA9PT0gY2hvaWNlICkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRib29raW5nX2Zvcm1fdGhlbWUgICAgICAgICAgOiBjdXJyZW50X3RoZW1lLFxuXHRcdFx0Ym9va2luZ19mb3JtX2NvbnRhaW5lcl9zdHlsZTogJ2N1c3RvbSdcblx0XHR9O1xuXHR9XG5cdGlmICggJ2luaGVyaXQnID09PSBjaG9pY2UgfHwgJycgPT09IGNob2ljZSApIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Ym9va2luZ19mb3JtX3RoZW1lICAgICAgICAgIDogJycsXG5cdFx0XHRib29raW5nX2Zvcm1fY29udGFpbmVyX3N0eWxlOiAnaW5oZXJpdCdcblx0XHR9O1xuXHR9XG5cblx0Y29uc3QgcGFydHMgPSBjaG9pY2Uuc3BsaXQoICdfJyApO1xuXHRjb25zdCB0aGVtZSA9ICggJ2RhcmsnID09PSBwYXJ0c1swXSApID8gJ3dwYmNfdGhlbWVfZGFya18xJyA6ICcnO1xuXHRjb25zdCBzdHlsZSA9IHBhcnRzWzFdIHx8ICdib3JkZXJlZCc7XG5cblx0cmV0dXJuIHtcblx0XHRib29raW5nX2Zvcm1fdGhlbWUgICAgICAgICAgOiB0aGVtZSxcblx0XHRib29raW5nX2Zvcm1fY29udGFpbmVyX3N0eWxlOiAoIFsgJ2JvcmRlcmVkJywgJ25vbmUnLCAnc29mdCcgXS5pbmRleE9mKCBzdHlsZSApID09PSAtMSApID8gJ2JvcmRlcmVkJyA6IHN0eWxlXG5cdH07XG59XG5cbmZ1bmN0aW9uIHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9faXNfdXNlcl90aGVtZV9zd2l0Y2goY3R4KSB7XG5cdGNvbnN0IHNvdXJjZSA9IFN0cmluZyggY3R4ICYmIGN0eC5zb3VyY2UgPyBjdHguc291cmNlIDogJycgKTtcblx0cmV0dXJuIFsgJ3VpJywgJ2NvbG9yaXMnIF0uaW5kZXhPZiggc291cmNlICkgIT09IC0xO1xufVxuXG5mdW5jdGlvbiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX2lzX2N1c3RvbV9zdHlsZShvcHRpb25zKSB7XG5cdHJldHVybiBTdHJpbmcoIG9wdGlvbnMgJiYgb3B0aW9ucy5ib29raW5nX2Zvcm1fY29udGFpbmVyX3N0eWxlID8gb3B0aW9ucy5ib29raW5nX2Zvcm1fY29udGFpbmVyX3N0eWxlIDogJ2luaGVyaXQnICkgPT09ICdjdXN0b20nO1xufVxuXG5mdW5jdGlvbiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3N5bmNfY3VzdG9tX2NvbnRyb2xzKG9wdGlvbnMpIHtcblx0Y29uc3QgaXNfY3VzdG9tID0gd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19pc19jdXN0b21fc3R5bGUoIG9wdGlvbnMgKTtcblx0Y29uc3QgcmVzZXRfcm93ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvciggJ1tkYXRhLXdwYmMtYmZiLWN1c3RvbS1hcHBlYXJhbmNlLXJlc2V0LXJvd10nICk7XG5cdGNvbnN0IGJhc2VfdGhlbWVfcm93ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvciggJy53cGJjX2JmYl9fZm9ybV9zZXR0aW5nW2RhdGEta2V5PVwiYm9va2luZ19mb3JtX3RoZW1lXCJdJyApO1xuXG5cdHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fZ2V0X2N1c3RvbV9jb250cm9sX2tleXMoKS5mb3JFYWNoKCBmdW5jdGlvbiAoa2V5KSB7XG5cdFx0Y29uc3Qgcm93ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvciggJy53cGJjX2JmYl9fZm9ybV9zZXR0aW5nW2RhdGEta2V5PVwiJyArIGtleSArICdcIl0nICk7XG5cdFx0aWYgKCAhIHJvdyApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0cm93LmhpZGRlbiA9ICEgaXNfY3VzdG9tO1xuXHRcdHJvdy5zZXRBdHRyaWJ1dGUoICdhcmlhLWhpZGRlbicsIGlzX2N1c3RvbSA/ICdmYWxzZScgOiAndHJ1ZScgKTtcblx0XHRyb3cuY2xhc3NMaXN0LnRvZ2dsZSggJ2lzLWhpZGRlbicsICEgaXNfY3VzdG9tICk7XG5cdH0gKTtcblxuXHRpZiAoIHJlc2V0X3JvdyApIHtcblx0XHRyZXNldF9yb3cuaGlkZGVuID0gISBpc19jdXN0b207XG5cdFx0cmVzZXRfcm93LnNldEF0dHJpYnV0ZSggJ2FyaWEtaGlkZGVuJywgaXNfY3VzdG9tID8gJ2ZhbHNlJyA6ICd0cnVlJyApO1xuXHRcdHJlc2V0X3Jvdy5jbGFzc0xpc3QudG9nZ2xlKCAnaXMtaGlkZGVuJywgISBpc19jdXN0b20gKTtcblx0fVxuXG5cdGlmICggYmFzZV90aGVtZV9yb3cgKSB7XG5cdFx0YmFzZV90aGVtZV9yb3cuaGlkZGVuID0gISBpc19jdXN0b207XG5cdFx0YmFzZV90aGVtZV9yb3cuc2V0QXR0cmlidXRlKCAnYXJpYS1oaWRkZW4nLCBpc19jdXN0b20gPyAnZmFsc2UnIDogJ3RydWUnICk7XG5cdFx0YmFzZV90aGVtZV9yb3cuY2xhc3NMaXN0LnRvZ2dsZSggJ2lzLWhpZGRlbicsICEgaXNfY3VzdG9tICk7XG5cdH1cbn1cblxuZnVuY3Rpb24gd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19yZXNvbHZlKG9wdGlvbnMpIHtcblx0bGV0IHN0eWxlICAgICA9IFN0cmluZyggb3B0aW9ucy5ib29raW5nX2Zvcm1fY29udGFpbmVyX3N0eWxlIHx8ICdpbmhlcml0JyApO1xuXG5cdGlmICggc3R5bGUgPT09ICdpbmhlcml0JyApIHtcblx0XHRjb25zdCBnbG9iYWxfb3B0aW9ucyA9IHdpbmRvdy53cGJjX2JmYl9zZXR0aW5nc192YXJzICYmIHdpbmRvdy53cGJjX2JmYl9zZXR0aW5nc192YXJzLmdsb2JhbF9hcHBlYXJhbmNlXG5cdFx0XHQ/IHdpbmRvdy53cGJjX2JmYl9zZXR0aW5nc192YXJzLmdsb2JhbF9hcHBlYXJhbmNlXG5cdFx0XHQ6IHt9O1xuXHRcdG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKCB7fSwgZ2xvYmFsX29wdGlvbnMgfHwge30gKTtcblx0XHRzdHlsZSA9IFN0cmluZyggb3B0aW9ucy5ib29raW5nX2Zvcm1fY29udGFpbmVyX3N0eWxlIHx8ICdib3JkZXJlZCcgKTtcblx0fVxuXG5cdGlmICggc3R5bGUgPT09ICdib3JkZXJlZCcgKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRpZiAoIHN0eWxlICE9PSAnY3VzdG9tJyApIHtcblx0XHRyZXR1cm4gd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19nZXRfcHJlc2V0X2Zvcl9vcHRpb25zKCBzdHlsZSwgb3B0aW9ucyApO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRiYWNrZ3JvdW5kIDogd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zYW5pdGl6ZV9jb2xvciggb3B0aW9ucy5ib29raW5nX2Zvcm1fYmFja2dyb3VuZF9jb2xvciwgJyNmZmZmZmYnICksXG5cdFx0Ym9yZGVyQ29sb3I6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfY29sb3IoIG9wdGlvbnMuYm9va2luZ19mb3JtX2JvcmRlcl9jb2xvciwgJyNjY2NjY2MnICksXG5cdFx0Ym9yZGVyV2lkdGg6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfbGVuZ3RoKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9ib3JkZXJfd2lkdGgsICcxcHgnICksXG5cdFx0cmFkaXVzICAgICA6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfbGVuZ3RoKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9ib3JkZXJfcmFkaXVzLCAnMnB4JyApLFxuXHRcdHBhZGRpbmcgICAgOiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX3NwYWNpbmcoIG9wdGlvbnMuYm9va2luZ19mb3JtX3BhZGRpbmcsICcxMHB4IDMwcHgnICksXG5cdFx0c2hhZG93ICAgICA6ICdyZ2JhKDAsIDAsIDAsIDAuMDUpIDBweCAycHggNnB4IDBweCdcblx0fTtcbn1cblxuZnVuY3Rpb24gd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19yZXNvbHZlX2Rlc2lnbl9jb2xvcnMob3B0aW9ucykge1xuXHRvcHRpb25zID0gb3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucyA9PT0gJ29iamVjdCcgPyBvcHRpb25zIDoge307XG5cblx0aWYgKCAhIHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9faXNfY3VzdG9tX3N0eWxlKCBvcHRpb25zICkgKSB7XG5cdFx0aWYgKFxuXHRcdFx0d3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19pc19kYXJrX3RoZW1lKCBvcHRpb25zICkgJiZcblx0XHRcdCdub25lJyA9PT0gU3RyaW5nKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9jb250YWluZXJfc3R5bGUgfHwgJycgKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dGV4dENvbG9yICAgICAgOiAnIzFkMjMyNycsXG5cdFx0XHRcdGZpZWxkQmFja2dyb3VuZDogJycsXG5cdFx0XHRcdGZpZWxkVGV4dCAgICAgIDogJycsXG5cdFx0XHRcdGZpZWxkQm9yZGVyICAgIDogJydcblx0XHRcdH07XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHR0ZXh0Q29sb3IgICAgICA6ICcnLFxuXHRcdFx0ZmllbGRCYWNrZ3JvdW5kOiAnJyxcblx0XHRcdGZpZWxkVGV4dCAgICAgIDogJycsXG5cdFx0XHRmaWVsZEJvcmRlciAgICA6ICcnXG5cdFx0fTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0dGV4dENvbG9yICAgICAgOiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX29wdGlvbmFsX2NvbG9yKCBvcHRpb25zLmJvb2tpbmdfZm9ybV90ZXh0X2NvbG9yICksXG5cdFx0ZmllbGRCYWNrZ3JvdW5kOiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX29wdGlvbmFsX2NvbG9yKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9maWVsZF9iYWNrZ3JvdW5kX2NvbG9yICksXG5cdFx0ZmllbGRUZXh0ICAgICAgOiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX29wdGlvbmFsX2NvbG9yKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9maWVsZF90ZXh0X2NvbG9yICksXG5cdFx0ZmllbGRCb3JkZXIgICAgOiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX29wdGlvbmFsX2NvbG9yKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9maWVsZF9ib3JkZXJfY29sb3IgKVxuXHR9O1xufVxuXG5mdW5jdGlvbiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX2FwcGx5X3ZhcnModmFsdWUsIGN0eCkge1xuXHRjb25zdCBvcHRpb25zID0gd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19jb2xsZWN0X29wdGlvbnMoIGN0eCwgY3R4ICYmIGN0eC5rZXksIHZhbHVlICk7XG5cdGNvbnN0IHJlc29sdmVkID0gd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19yZXNvbHZlKCBvcHRpb25zICk7XG5cdGNvbnN0IGRlc2lnbiA9IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fcmVzb2x2ZV9kZXNpZ25fY29sb3JzKCBvcHRpb25zICk7XG5cdGNvbnN0IGlzX2N1c3RvbSA9IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9faXNfY3VzdG9tX3N0eWxlKCBvcHRpb25zICk7XG5cdGNvbnN0IHJvb3QgPSBjdHggJiYgY3R4LmNhbnZhcztcblxuXHR3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3N5bmNfZm9ybV9zdHlsZV9jb250cm9sKCBvcHRpb25zICk7XG5cdHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc3luY19jdXN0b21fY29udHJvbHMoIG9wdGlvbnMgKTtcblxuXHRpZiAoICEgcm9vdCB8fCAhIHJvb3QucXVlcnlTZWxlY3RvckFsbCApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCB3cmFwcyA9IHJvb3QucXVlcnlTZWxlY3RvckFsbCggJy53cGJjX2JmYl9fZm9ybV9wcmV2aWV3X3NlY3Rpb25fY29udGFpbmVyLCAud3BiY19iZmJfZm9ybScgKTtcblx0aWYgKCAhIHdyYXBzLmxlbmd0aCApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR3cmFwcy5mb3JFYWNoKCBmdW5jdGlvbiAod3JhcCkge1xuXHRcdGlmICggISB3cmFwIHx8ICEgd3JhcC5zdHlsZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0d3JhcC5jbGFzc0xpc3QudG9nZ2xlKCAnd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX2N1c3RvbScsIGlzX2N1c3RvbSApO1xuXHRcdGlmICggISByZXNvbHZlZCApIHtcblx0XHRcdHdyYXAuc3R5bGUucmVtb3ZlUHJvcGVydHkoICctLXdwYmMtYmZiLWZvcm0tYmFja2dyb3VuZCcgKTtcblx0XHRcdHdyYXAuc3R5bGUucmVtb3ZlUHJvcGVydHkoICctLXdwYmMtYmZiLWZvcm0tYm9yZGVyLWNvbG9yJyApO1xuXHRcdFx0d3JhcC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSggJy0td3BiYy1iZmItZm9ybS1ib3JkZXItd2lkdGgnICk7XG5cdFx0XHR3cmFwLnN0eWxlLnJlbW92ZVByb3BlcnR5KCAnLS13cGJjLWJmYi1mb3JtLWJvcmRlci1yYWRpdXMnICk7XG5cdFx0XHR3cmFwLnN0eWxlLnJlbW92ZVByb3BlcnR5KCAnLS13cGJjLWJmYi1mb3JtLXBhZGRpbmcnICk7XG5cdFx0XHR3cmFwLnN0eWxlLnJlbW92ZVByb3BlcnR5KCAnLS13cGJjLWJmYi1mb3JtLWJveC1zaGFkb3cnICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHdyYXAuc3R5bGUuc2V0UHJvcGVydHkoICctLXdwYmMtYmZiLWZvcm0tYmFja2dyb3VuZCcsIHJlc29sdmVkLmJhY2tncm91bmQgKTtcblx0XHRcdHdyYXAuc3R5bGUuc2V0UHJvcGVydHkoICctLXdwYmMtYmZiLWZvcm0tYm9yZGVyLWNvbG9yJywgcmVzb2x2ZWQuYm9yZGVyQ29sb3IgKTtcblx0XHRcdHdyYXAuc3R5bGUuc2V0UHJvcGVydHkoICctLXdwYmMtYmZiLWZvcm0tYm9yZGVyLXdpZHRoJywgcmVzb2x2ZWQuYm9yZGVyV2lkdGggKTtcblx0XHRcdHdyYXAuc3R5bGUuc2V0UHJvcGVydHkoICctLXdwYmMtYmZiLWZvcm0tYm9yZGVyLXJhZGl1cycsIHJlc29sdmVkLnJhZGl1cyApO1xuXHRcdFx0d3JhcC5zdHlsZS5zZXRQcm9wZXJ0eSggJy0td3BiYy1iZmItZm9ybS1wYWRkaW5nJywgcmVzb2x2ZWQucGFkZGluZyApO1xuXHRcdFx0d3JhcC5zdHlsZS5zZXRQcm9wZXJ0eSggJy0td3BiYy1iZmItZm9ybS1ib3gtc2hhZG93JywgcmVzb2x2ZWQuc2hhZG93ICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBkZXNpZ24udGV4dENvbG9yICkge1xuXHRcdFx0d3JhcC5zdHlsZS5zZXRQcm9wZXJ0eSggJy0td3BiY19mb3JtLWxhYmVsLWNvbG9yJywgZGVzaWduLnRleHRDb2xvciApO1xuXHRcdFx0d3JhcC5zdHlsZS5zZXRQcm9wZXJ0eSggJy0td3BiY19mb3JtLWxhYmVsLXN1YmxhYmVsLWNvbG9yJywgZGVzaWduLnRleHRDb2xvciApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR3cmFwLnN0eWxlLnJlbW92ZVByb3BlcnR5KCAnLS13cGJjX2Zvcm0tbGFiZWwtY29sb3InICk7XG5cdFx0XHR3cmFwLnN0eWxlLnJlbW92ZVByb3BlcnR5KCAnLS13cGJjX2Zvcm0tbGFiZWwtc3VibGFiZWwtY29sb3InICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBkZXNpZ24uZmllbGRCYWNrZ3JvdW5kICkge1xuXHRcdFx0d3JhcC5zdHlsZS5zZXRQcm9wZXJ0eSggJy0td3BiY19mb3JtLWZpZWxkLWJhY2tncm91bmQtY29sb3InLCBkZXNpZ24uZmllbGRCYWNrZ3JvdW5kICk7XG5cdFx0XHR3cmFwLnN0eWxlLnNldFByb3BlcnR5KCAnLS13cGJjX2Zvcm0tZmllbGQtbWVudS1jb2xvcicsIGRlc2lnbi5maWVsZEJhY2tncm91bmQgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0d3JhcC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSggJy0td3BiY19mb3JtLWZpZWxkLWJhY2tncm91bmQtY29sb3InICk7XG5cdFx0XHR3cmFwLnN0eWxlLnJlbW92ZVByb3BlcnR5KCAnLS13cGJjX2Zvcm0tZmllbGQtbWVudS1jb2xvcicgKTtcblx0XHR9XG5cblx0XHRpZiAoIGRlc2lnbi5maWVsZFRleHQgKSB7XG5cdFx0XHR3cmFwLnN0eWxlLnNldFByb3BlcnR5KCAnLS13cGJjX2Zvcm0tZmllbGQtdGV4dC1jb2xvcicsIGRlc2lnbi5maWVsZFRleHQgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0d3JhcC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSggJy0td3BiY19mb3JtLWZpZWxkLXRleHQtY29sb3InICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBkZXNpZ24uZmllbGRCb3JkZXIgKSB7XG5cdFx0XHR3cmFwLnN0eWxlLnNldFByb3BlcnR5KCAnLS13cGJjX2Zvcm0tZmllbGQtYm9yZGVyLWNvbG9yJywgZGVzaWduLmZpZWxkQm9yZGVyICk7XG5cdFx0XHR3cmFwLnN0eWxlLnNldFByb3BlcnR5KCAnLS13cGJjX2Zvcm0tZmllbGQtYm9yZGVyLWNvbG9yLXNwYXJlJywgZGVzaWduLmZpZWxkQm9yZGVyICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHdyYXAuc3R5bGUucmVtb3ZlUHJvcGVydHkoICctLXdwYmNfZm9ybS1maWVsZC1ib3JkZXItY29sb3InICk7XG5cdFx0XHR3cmFwLnN0eWxlLnJlbW92ZVByb3BlcnR5KCAnLS13cGJjX2Zvcm0tZmllbGQtYm9yZGVyLWNvbG9yLXNwYXJlJyApO1xuXHRcdH1cblx0fSApO1xufVxuXG5mdW5jdGlvbiB3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fZ2V0X3ZhcnMoKSB7XG5cdHJldHVybiB3aW5kb3cud3BiY19iZmJfc2V0dGluZ3NfdmFycyB8fCB7fTtcbn1cblxuZnVuY3Rpb24gd3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX2dldF9wcmVzZXRzKCkge1xuXHRjb25zdCB2YXJzID0gd3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX2dldF92YXJzKCk7XG5cdHJldHVybiB2YXJzLmZvcm1fc3R5bGVfcHJlc2V0cyAmJiB0eXBlb2YgdmFycy5mb3JtX3N0eWxlX3ByZXNldHMgPT09ICdvYmplY3QnID8gdmFycy5mb3JtX3N0eWxlX3ByZXNldHMgOiB7fTtcbn1cblxuZnVuY3Rpb24gd3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX2dldF9jdXN0b21fa2V5cygpIHtcblx0cmV0dXJuIFtcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9iYWNrZ3JvdW5kX2NvbG9yJyxcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9ib3JkZXJfY29sb3InLFxuXHRcdCdib29raW5nX2Zvcm1fY3VzdG9tX2JvcmRlcl93aWR0aCcsXG5cdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fYm9yZGVyX3JhZGl1cycsXG5cdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fcGFkZGluZ192ZXJ0aWNhbCcsXG5cdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fcGFkZGluZ19ob3Jpem9udGFsJyxcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV90ZXh0X2NvbG9yJyxcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9maWVsZF9iYWNrZ3JvdW5kX2NvbG9yJyxcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9maWVsZF90ZXh0X2NvbG9yJyxcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9maWVsZF9ib3JkZXJfY29sb3InLFxuXHRcdCdib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9iYWNrZ3JvdW5kX2NvbG9yJyxcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fdGV4dF9jb2xvcicsXG5cdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2JvcmRlcl9jb2xvcicsXG5cdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2hvdmVyX2JhY2tncm91bmRfY29sb3InLFxuXHRcdCdib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ob3Zlcl90ZXh0X2NvbG9yJyxcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25faG92ZXJfYm9yZGVyX2NvbG9yJyxcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2JhY2tncm91bmRfY29sb3InLFxuXHRcdCdib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25fdGV4dF9jb2xvcicsXG5cdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9ib3JkZXJfY29sb3InLFxuXHRcdCdib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25faG92ZXJfYmFja2dyb3VuZF9jb2xvcicsXG5cdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9ob3Zlcl90ZXh0X2NvbG9yJyxcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2hvdmVyX2JvcmRlcl9jb2xvcidcblx0XTtcbn1cblxuZnVuY3Rpb24gd3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX2dldF9jdXN0b21fZGVmYXVsdHMoKSB7XG5cdGNvbnN0IHZhcnMgPSB3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fZ2V0X3ZhcnMoKTtcblx0Y29uc3QgbG9jYWxpemVkID0gdmFycy5jdXN0b21fZm9ybV9zdHlsZV9kZWZhdWx0cyAmJiB0eXBlb2YgdmFycy5jdXN0b21fZm9ybV9zdHlsZV9kZWZhdWx0cyA9PT0gJ29iamVjdCdcblx0XHQ/IHZhcnMuY3VzdG9tX2Zvcm1fc3R5bGVfZGVmYXVsdHNcblx0XHQ6IHt9O1xuXG5cdHJldHVybiBPYmplY3QuYXNzaWduKCB7XG5cdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9iYWNrZ3JvdW5kX2NvbG9yICAgICAgIDogJyNmZmZmZmYnLFxuXHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fYm9yZGVyX2NvbG9yICAgICAgICAgICA6ICcjY2NjY2NjJyxcblx0XHRib29raW5nX2Zvcm1fY3VzdG9tX2JvcmRlcl93aWR0aCAgICAgICAgICAgOiAnMXB4Jyxcblx0XHRib29raW5nX2Zvcm1fY3VzdG9tX2JvcmRlcl9yYWRpdXMgICAgICAgICAgOiAnMnB4Jyxcblx0XHRib29raW5nX2Zvcm1fY3VzdG9tX3BhZGRpbmdfdmVydGljYWwgICAgICAgOiAnMTBweCcsXG5cdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9wYWRkaW5nX2hvcml6b250YWwgICAgIDogJzMwcHgnLFxuXHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fdGV4dF9jb2xvciAgICAgICAgICAgICA6ICcjMWQyMzI3Jyxcblx0XHRib29raW5nX2Zvcm1fY3VzdG9tX2ZpZWxkX2JhY2tncm91bmRfY29sb3IgOiAnI2ZmZmZmZicsXG5cdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9maWVsZF90ZXh0X2NvbG9yICAgICAgIDogJyMzYzQzNGEnLFxuXHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfYm9yZGVyX2NvbG9yICAgICA6ICcjY2NjY2NjJyxcblx0XHRib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9iYWNrZ3JvdW5kX2NvbG9yOiAnIzA2NmFhYicsXG5cdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fdGV4dF9jb2xvciAgICAgIDogJyNmZmZmZmYnLFxuXHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2JvcmRlcl9jb2xvciAgICA6ICcjMDY2YWFiJyxcblx0XHRib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ob3Zlcl9iYWNrZ3JvdW5kX2NvbG9yOiAnIzA1NTU4OScsXG5cdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9idXR0b25faG92ZXJfdGV4dF9jb2xvcjogJyNmZmZmZmYnLFxuXHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2hvdmVyX2JvcmRlcl9jb2xvcjogJyMwNTU1ODknLFxuXHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9iYWNrZ3JvdW5kX2NvbG9yOiAnI2ZkZmRmZCcsXG5cdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX3RleHRfY29sb3I6ICcjNDQ0NDQ0Jyxcblx0XHRib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25fYm9yZGVyX2NvbG9yOiAnI2VlZWVlZScsXG5cdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2hvdmVyX2JhY2tncm91bmRfY29sb3I6ICcjZmRmZGZkJyxcblx0XHRib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25faG92ZXJfdGV4dF9jb2xvcjogJyM0NDQ0NDQnLFxuXHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9ob3Zlcl9ib3JkZXJfY29sb3I6ICcjNGQ5MWNkJ1xuXHR9LCBsb2NhbGl6ZWQgKTtcbn1cblxuZnVuY3Rpb24gd3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX2dldF9jdXJyZW50X29wdGlvbnMoY3R4LCBrZXksIHZhbHVlKSB7XG5cdGNvbnN0IHZhcnMgPSB3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fZ2V0X3ZhcnMoKTtcblx0bGV0IG9wdGlvbnMgPSB2YXJzLmdsb2JhbF9mb3JtX3N0eWxlICYmIHR5cGVvZiB2YXJzLmdsb2JhbF9mb3JtX3N0eWxlID09PSAnb2JqZWN0J1xuXHRcdD8gT2JqZWN0LmFzc2lnbigge30sIHZhcnMuZ2xvYmFsX2Zvcm1fc3R5bGUgKVxuXHRcdDoge307XG5cblx0aWYgKCB3aW5kb3cuV1BCQ19CRkJfRm9ybVNldHRpbmdzICYmIHR5cGVvZiB3aW5kb3cuV1BCQ19CRkJfRm9ybVNldHRpbmdzLmNvbGxlY3QgPT09ICdmdW5jdGlvbicgKSB7XG5cdFx0b3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oIG9wdGlvbnMsIHdpbmRvdy5XUEJDX0JGQl9Gb3JtU2V0dGluZ3MuY29sbGVjdCggJ2dsb2JhbCcgKSB8fCB7fSApO1xuXHR9XG5cblx0aWYgKCBjdHggJiYgY3R4Lm9wdGlvbnMgJiYgdHlwZW9mIGN0eC5vcHRpb25zID09PSAnb2JqZWN0JyApIHtcblx0XHRvcHRpb25zID0gT2JqZWN0LmFzc2lnbiggb3B0aW9ucywgY3R4Lm9wdGlvbnMgKTtcblx0fVxuXHRpZiAoIGtleSApIHtcblx0XHRvcHRpb25zW1N0cmluZygga2V5ICldID0gdmFsdWU7XG5cdH1cblx0aWYgKCAhIG9wdGlvbnMuYm9va2luZ19mb3JtX3N0eWxlICkge1xuXHRcdG9wdGlvbnMuYm9va2luZ19mb3JtX3N0eWxlID0gJ2xpZ2h0X2JvcmRlcmVkJztcblx0fVxuXG5cdHJldHVybiBvcHRpb25zO1xufVxuXG5mdW5jdGlvbiB3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fcmVzb2x2ZV9jc3NfdmFycyhvcHRpb25zKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zID09PSAnb2JqZWN0JyA/IG9wdGlvbnMgOiB7fTtcblx0Y29uc3Qgc3R5bGUgPSBTdHJpbmcoIG9wdGlvbnMuYm9va2luZ19mb3JtX3N0eWxlIHx8ICdsaWdodF9ib3JkZXJlZCcgKTtcblx0Y29uc3QgcHJlc2V0cyA9IHdwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19nZXRfcHJlc2V0cygpO1xuXHRjb25zdCBwcmVzZXQgPSBwcmVzZXRzW3N0eWxlXSB8fCBwcmVzZXRzLmxpZ2h0X2JvcmRlcmVkIHx8IHt9O1xuXHRjb25zdCBkZWZhdWx0cyA9IHdwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19nZXRfY3VzdG9tX2RlZmF1bHRzKCk7XG5cblx0aWYgKCAnY3VzdG9tJyAhPT0gc3R5bGUgKSB7XG5cdFx0cmV0dXJuIHByZXNldC5jc3NfdmFycyAmJiB0eXBlb2YgcHJlc2V0LmNzc192YXJzID09PSAnb2JqZWN0JyA/IE9iamVjdC5hc3NpZ24oIHt9LCBwcmVzZXQuY3NzX3ZhcnMgKSA6IHt9O1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHQnLS13cGJjLWJmYi1mb3JtLWJhY2tncm91bmQnICAgICAgICAgIDogd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zYW5pdGl6ZV9jb2xvciggb3B0aW9ucy5ib29raW5nX2Zvcm1fY3VzdG9tX2JhY2tncm91bmRfY29sb3IsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fYmFja2dyb3VuZF9jb2xvciApLFxuXHRcdCctLXdwYmMtYmZiLWZvcm0tYm9yZGVyLWNvbG9yJyAgICAgICAgOiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2NvbG9yKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9jdXN0b21fYm9yZGVyX2NvbG9yLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX2JvcmRlcl9jb2xvciApLFxuXHRcdCctLXdwYmMtYmZiLWZvcm0tYm9yZGVyLXdpZHRoJyAgICAgICAgOiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2xlbmd0aCggb3B0aW9ucy5ib29raW5nX2Zvcm1fY3VzdG9tX2JvcmRlcl93aWR0aCwgZGVmYXVsdHMuYm9va2luZ19mb3JtX2N1c3RvbV9ib3JkZXJfd2lkdGggKSxcblx0XHQnLS13cGJjLWJmYi1mb3JtLWJvcmRlci1yYWRpdXMnICAgICAgIDogd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zYW5pdGl6ZV9sZW5ndGgoIG9wdGlvbnMuYm9va2luZ19mb3JtX2N1c3RvbV9ib3JkZXJfcmFkaXVzLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX2JvcmRlcl9yYWRpdXMgKSxcblx0XHQnLS13cGJjLWJmYi1mb3JtLXBhZGRpbmcnICAgICAgICAgICAgIDogd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zYW5pdGl6ZV9sZW5ndGgoIG9wdGlvbnMuYm9va2luZ19mb3JtX2N1c3RvbV9wYWRkaW5nX3ZlcnRpY2FsLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX3BhZGRpbmdfdmVydGljYWwgKSArICcgJyArIHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfbGVuZ3RoKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9jdXN0b21fcGFkZGluZ19ob3Jpem9udGFsLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX3BhZGRpbmdfaG9yaXpvbnRhbCApLFxuXHRcdCctLXdwYmMtYmZiLWZvcm0tYm94LXNoYWRvdycgICAgICAgICAgOiAncmdiYSgwLCAwLCAwLCAwLjA1KSAwcHggMnB4IDZweCAwcHgnLFxuXHRcdCctLXdwYmNfZm9ybS1sYWJlbC1jb2xvcicgICAgICAgICAgICAgOiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2NvbG9yKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9jdXN0b21fdGV4dF9jb2xvciwgZGVmYXVsdHMuYm9va2luZ19mb3JtX2N1c3RvbV90ZXh0X2NvbG9yICksXG5cdFx0Jy0td3BiY19mb3JtLWxhYmVsLXN1YmxhYmVsLWNvbG9yJyAgICA6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfY29sb3IoIG9wdGlvbnMuYm9va2luZ19mb3JtX2N1c3RvbV90ZXh0X2NvbG9yLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX3RleHRfY29sb3IgKSxcblx0XHQnLS13cGJjX2Zvcm0tbGFiZWwtZXJyb3ItY29sb3InICAgICAgIDogJyNkNjM2MzcnLFxuXHRcdCctLXdwYmNfZm9ybS1maWVsZC1iYWNrZ3JvdW5kLWNvbG9yJyAgOiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2NvbG9yKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfYmFja2dyb3VuZF9jb2xvciwgZGVmYXVsdHMuYm9va2luZ19mb3JtX2N1c3RvbV9maWVsZF9iYWNrZ3JvdW5kX2NvbG9yICksXG5cdFx0Jy0td3BiY19mb3JtLWZpZWxkLW1lbnUtY29sb3InICAgICAgICA6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfY29sb3IoIG9wdGlvbnMuYm9va2luZ19mb3JtX2N1c3RvbV9maWVsZF9iYWNrZ3JvdW5kX2NvbG9yLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX2ZpZWxkX2JhY2tncm91bmRfY29sb3IgKSxcblx0XHQnLS13cGJjX2Zvcm0tZmllbGQtdGV4dC1jb2xvcicgICAgICAgIDogd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zYW5pdGl6ZV9jb2xvciggb3B0aW9ucy5ib29raW5nX2Zvcm1fY3VzdG9tX2ZpZWxkX3RleHRfY29sb3IsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfdGV4dF9jb2xvciApLFxuXHRcdCctLXdwYmNfZm9ybS1maWVsZC1ib3JkZXItY29sb3InICAgICAgOiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2NvbG9yKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfYm9yZGVyX2NvbG9yLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX2ZpZWxkX2JvcmRlcl9jb2xvciApLFxuXHRcdCctLXdwYmNfZm9ybS1maWVsZC1ib3JkZXItY29sb3Itc3BhcmUnOiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2NvbG9yKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfYm9yZGVyX2NvbG9yLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX2ZpZWxkX2JvcmRlcl9jb2xvciApLFxuXHRcdCctLXdwYmNfZm9ybS1maWVsZC1mb2N1cy1ib3JkZXItY29sb3InOiAnIzA2NmFhYicsXG5cdFx0Jy0td3BiY19mb3JtLWZpZWxkLWZvY3VzLXNoYWRvdy1jb2xvcic6ICcjMDY2YWFiJyxcblx0XHQnLS13cGJjX2Zvcm0tZmllbGQtZGlzYWJsZWQtY29sb3InICAgIDogJ3JnYmEoMCwgMCwgMCwgMC4yKScsXG5cdFx0Jy0td3BiY19mb3JtLWJ1dHRvbi1iYWNrZ3JvdW5kLWNvbG9yJyA6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfY29sb3IoIG9wdGlvbnMuYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fYmFja2dyb3VuZF9jb2xvciwgZGVmYXVsdHMuYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fYmFja2dyb3VuZF9jb2xvciApLFxuXHRcdCctLXdwYmNfZm9ybS1idXR0b24tYmFja2dyb3VuZC1jb2xvci1hbHQnOiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2NvbG9yKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2JhY2tncm91bmRfY29sb3IsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2JhY2tncm91bmRfY29sb3IgKSxcblx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLWJvcmRlci1jb2xvcicgICAgIDogd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zYW5pdGl6ZV9jb2xvciggb3B0aW9ucy5ib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ib3JkZXJfY29sb3IsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2JvcmRlcl9jb2xvciApLFxuXHRcdCctLXdwYmNfZm9ybS1idXR0b24tdGV4dC1jb2xvcicgICAgICAgOiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2NvbG9yKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX3RleHRfY29sb3IsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX3RleHRfY29sb3IgKSxcblx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLXRleHQtY29sb3ItYWx0JyAgIDogd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zYW5pdGl6ZV9jb2xvciggb3B0aW9ucy5ib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl90ZXh0X2NvbG9yLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl90ZXh0X2NvbG9yICksXG5cdFx0Jy0td3BiY19mb3JtLWJ1dHRvbi1ob3Zlci1iYWNrZ3JvdW5kLWNvbG9yJzogd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zYW5pdGl6ZV9jb2xvciggb3B0aW9ucy5ib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ob3Zlcl9iYWNrZ3JvdW5kX2NvbG9yLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ob3Zlcl9iYWNrZ3JvdW5kX2NvbG9yICksXG5cdFx0Jy0td3BiY19mb3JtLWJ1dHRvbi1ob3Zlci1ib3JkZXItY29sb3InOiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2NvbG9yKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2hvdmVyX2JvcmRlcl9jb2xvciwgZGVmYXVsdHMuYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25faG92ZXJfYm9yZGVyX2NvbG9yICksXG5cdFx0Jy0td3BiY19mb3JtLWJ1dHRvbi1ob3Zlci10ZXh0LWNvbG9yJyA6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfY29sb3IoIG9wdGlvbnMuYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25faG92ZXJfdGV4dF9jb2xvciwgZGVmYXVsdHMuYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25faG92ZXJfdGV4dF9jb2xvciApLFxuXHRcdCctLXdwYmNfZm9ybS1jaG9pY2UtY2hlY2tlZC1ib3JkZXItY29sb3InOiAnIzA2NmFhYicsXG5cdFx0Jy0td3BiY19mb3JtLWNob2ljZS1jaGVja2VkLWNvbG9yJyAgICA6ICcjMDY2YWFiJyxcblx0XHQnLS13cGJjX2Zvcm0tY2hvaWNlLWZvY3VzLWNvbG9yJyAgICAgIDogJyMwNjZhYWInLFxuXHRcdCctLXdwYmNfZm9ybS1idXR0b24tbGlnaHQtYmFja2dyb3VuZC1jb2xvcic6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfY29sb3IoIG9wdGlvbnMuYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2JhY2tncm91bmRfY29sb3IsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9iYWNrZ3JvdW5kX2NvbG9yICksXG5cdFx0Jy0td3BiY19mb3JtLWJ1dHRvbi1saWdodC1ib3JkZXItY29sb3InOiB3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3Nhbml0aXplX2NvbG9yKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9ib3JkZXJfY29sb3IsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9ib3JkZXJfY29sb3IgKSxcblx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLWxpZ2h0LXRleHQtY29sb3InIDogd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zYW5pdGl6ZV9jb2xvciggb3B0aW9ucy5ib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25fdGV4dF9jb2xvciwgZGVmYXVsdHMuYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX3RleHRfY29sb3IgKSxcblx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLWxpZ2h0LWJveC1zaGFkb3cnIDogJzAgMnB4IDEwcHggMnB4ICNmZmZmZmY1NCcsXG5cdFx0Jy0td3BiY19mb3JtLWJ1dHRvbi1saWdodC1ob3Zlci1iYWNrZ3JvdW5kLWNvbG9yJzogd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zYW5pdGl6ZV9jb2xvciggb3B0aW9ucy5ib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25faG92ZXJfYmFja2dyb3VuZF9jb2xvciwgZGVmYXVsdHMuYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2hvdmVyX2JhY2tncm91bmRfY29sb3IgKSxcblx0XHQnLS13cGJjX2Zvcm0tYnV0dG9uLWxpZ2h0LWhvdmVyLWJvcmRlci1jb2xvcic6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfY29sb3IoIG9wdGlvbnMuYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2hvdmVyX2JvcmRlcl9jb2xvciwgZGVmYXVsdHMuYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2hvdmVyX2JvcmRlcl9jb2xvciApLFxuXHRcdCctLXdwYmNfZm9ybS1idXR0b24tbGlnaHQtaG92ZXItdGV4dC1jb2xvcic6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfY29sb3IoIG9wdGlvbnMuYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2hvdmVyX3RleHRfY29sb3IsIGRlZmF1bHRzLmJvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9ob3Zlcl90ZXh0X2NvbG9yICksXG5cdFx0Jy0td3BiY19mb3JtLWJ1dHRvbi1saWdodC1ob3Zlci1ib3gtc2hhZG93JzogJzAgMnB4IDEwcHggMnB4ICNmZmZmZmY1NCcsXG5cdFx0Jy0td3BiY19mb3JtLWJ1dHRvbi1wcmltYXJ5LWhvdmVyLWJvcmRlci1jb2xvcic6IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2FuaXRpemVfY29sb3IoIG9wdGlvbnMuYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25faG92ZXJfYm9yZGVyX2NvbG9yLCBkZWZhdWx0cy5ib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ob3Zlcl9ib3JkZXJfY29sb3IgKSxcblx0XHQnLS13cGJjX2Zvcm0tcGFnZS1icmVhay1jb2xvcicgICAgICAgIDogJyMwNjZhYWInXG5cdH07XG59XG5cbmZ1bmN0aW9uIHdwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19nZXRfY3NzX3Zhcl9rZXlzKG9wdGlvbnMpIHtcblx0Y29uc3QgdmFycyA9IHdwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19nZXRfdmFycygpO1xuXHRjb25zdCBsb2NhbGl6ZWQgPSBBcnJheS5pc0FycmF5KCB2YXJzLmZvcm1fc3R5bGVfY3NzX3Zhcl9uYW1lcyApID8gdmFycy5mb3JtX3N0eWxlX2Nzc192YXJfbmFtZXMgOiBbXTtcblx0Y29uc3Qga2V5cyA9IFtdO1xuXHRjb25zdCBwcmVzZXRzID0gd3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX2dldF9wcmVzZXRzKCk7XG5cblx0aWYgKCBsb2NhbGl6ZWQubGVuZ3RoICkge1xuXHRcdHJldHVybiBsb2NhbGl6ZWQ7XG5cdH1cblxuXHRPYmplY3Qua2V5cyggcHJlc2V0cyApLmZvckVhY2goIGZ1bmN0aW9uIChwcmVzZXRfa2V5KSB7XG5cdFx0Y29uc3QgcHJlc2V0ID0gcHJlc2V0c1twcmVzZXRfa2V5XSB8fCB7fTtcblx0XHRjb25zdCBjc3NfdmFycyA9IHByZXNldC5jc3NfdmFycyAmJiB0eXBlb2YgcHJlc2V0LmNzc192YXJzID09PSAnb2JqZWN0JyA/IHByZXNldC5jc3NfdmFycyA6IHt9O1xuXG5cdFx0T2JqZWN0LmtleXMoIGNzc192YXJzICkuZm9yRWFjaCggZnVuY3Rpb24gKHZhcl9uYW1lKSB7XG5cdFx0XHRpZiAoIGtleXMuaW5kZXhPZiggdmFyX25hbWUgKSA9PT0gLTEgKSB7XG5cdFx0XHRcdGtleXMucHVzaCggdmFyX25hbWUgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0gKTtcblxuXHRPYmplY3Qua2V5cyggd3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX3Jlc29sdmVfY3NzX3ZhcnMoIE9iamVjdC5hc3NpZ24oIHt9LCBvcHRpb25zIHx8IHt9LCB7IGJvb2tpbmdfZm9ybV9zdHlsZTogJ2N1c3RvbScgfSApICkgKS5mb3JFYWNoKCBmdW5jdGlvbiAodmFyX25hbWUpIHtcblx0XHRpZiAoIGtleXMuaW5kZXhPZiggdmFyX25hbWUgKSA9PT0gLTEgKSB7XG5cdFx0XHRrZXlzLnB1c2goIHZhcl9uYW1lICk7XG5cdFx0fVxuXHR9ICk7XG5cblx0cmV0dXJuIGtleXM7XG59XG5cbmZ1bmN0aW9uIHdwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19zeW5jX2NvbnRyb2xzKG9wdGlvbnMpIHtcblx0Y29uc3QgaXNfY3VzdG9tID0gJ2N1c3RvbScgPT09IFN0cmluZyggb3B0aW9ucyAmJiBvcHRpb25zLmJvb2tpbmdfZm9ybV9zdHlsZSA/IG9wdGlvbnMuYm9va2luZ19mb3JtX3N0eWxlIDogJycgKTtcblx0Y29uc3QgcmVzZXRfcm93ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvciggJ1tkYXRhLXdwYmMtYmZiLWN1c3RvbS1hcHBlYXJhbmNlLXJlc2V0LXJvd10nICk7XG5cblx0d3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zZXRfcmFkaW9fY29udHJvbCggJ2Jvb2tpbmdfZm9ybV9zdHlsZScsIG9wdGlvbnMuYm9va2luZ19mb3JtX3N0eWxlIHx8ICdsaWdodF9ib3JkZXJlZCcgKTtcblxuXHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCAnLndwYmNfYmZiX19mb3JtX3NldHRpbmdfZ2xvYmFsX2N1c3RvbV9zdHlsZScgKS5mb3JFYWNoKCBmdW5jdGlvbiAocm93KSB7XG5cdFx0cm93LmhpZGRlbiA9ICEgaXNfY3VzdG9tO1xuXHRcdHJvdy5zZXRBdHRyaWJ1dGUoICdhcmlhLWhpZGRlbicsIGlzX2N1c3RvbSA/ICdmYWxzZScgOiAndHJ1ZScgKTtcblx0XHRyb3cuY2xhc3NMaXN0LnRvZ2dsZSggJ2lzLWhpZGRlbicsICEgaXNfY3VzdG9tICk7XG5cdH0gKTtcblxuXHRpZiAoIHJlc2V0X3JvdyApIHtcblx0XHRyZXNldF9yb3cuaGlkZGVuID0gISBpc19jdXN0b207XG5cdFx0cmVzZXRfcm93LnNldEF0dHJpYnV0ZSggJ2FyaWEtaGlkZGVuJywgaXNfY3VzdG9tID8gJ2ZhbHNlJyA6ICd0cnVlJyApO1xuXHRcdHJlc2V0X3Jvdy5jbGFzc0xpc3QudG9nZ2xlKCAnaXMtaGlkZGVuJywgISBpc19jdXN0b20gKTtcblx0fVxufVxuXG5mdW5jdGlvbiB3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fYXBwbHkodmFsdWUsIGN0eCkge1xuXHRjb25zdCBvcHRpb25zID0gd3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX2dldF9jdXJyZW50X29wdGlvbnMoIGN0eCwgY3R4ICYmIGN0eC5rZXksIHZhbHVlICk7XG5cdGNvbnN0IHN0eWxlID0gU3RyaW5nKCBvcHRpb25zLmJvb2tpbmdfZm9ybV9zdHlsZSB8fCAnbGlnaHRfYm9yZGVyZWQnICk7XG5cdGNvbnN0IHByZXNldHMgPSB3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fZ2V0X3ByZXNldHMoKTtcblx0Y29uc3QgcHJlc2V0ID0gcHJlc2V0c1tzdHlsZV0gfHwgcHJlc2V0cy5saWdodF9ib3JkZXJlZCB8fCB7fTtcblx0Y29uc3QgY3NzX3ZhcnMgPSB3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fcmVzb2x2ZV9jc3NfdmFycyggb3B0aW9ucyApO1xuXHRjb25zdCByb290ID0gKCBjdHggJiYgY3R4LmNhbnZhcyApIHx8IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnd3BiY19iZmJfX3RoZW1lX3Njb3BlJyApIHx8IGRvY3VtZW50O1xuXHRjb25zdCB0aGVtZV9jbGFzc2VzID0gW107XG5cdGNvbnN0IGNzc192YXJfa2V5cyA9IHdwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19nZXRfY3NzX3Zhcl9rZXlzKCBvcHRpb25zICk7XG5cblx0d3BiY19iZmJfZ2xvYmFsX2Zvcm1fc3R5bGVfX3N5bmNfY29udHJvbHMoIG9wdGlvbnMgKTtcblxuXHRPYmplY3Qua2V5cyggcHJlc2V0cyApLmZvckVhY2goIGZ1bmN0aW9uIChwcmVzZXRfa2V5KSB7XG5cdFx0Y29uc3QgY2xhc3NfbmFtZSA9IHByZXNldHNbcHJlc2V0X2tleV0gJiYgcHJlc2V0c1twcmVzZXRfa2V5XS50aGVtZV9jbGFzcyA/IFN0cmluZyggcHJlc2V0c1twcmVzZXRfa2V5XS50aGVtZV9jbGFzcyApIDogJyc7XG5cdFx0aWYgKCBjbGFzc19uYW1lICYmIHRoZW1lX2NsYXNzZXMuaW5kZXhPZiggY2xhc3NfbmFtZSApID09PSAtMSApIHtcblx0XHRcdHRoZW1lX2NsYXNzZXMucHVzaCggY2xhc3NfbmFtZSApO1xuXHRcdH1cblx0fSApO1xuXG5cdGlmICggISByb290IHx8ICEgcm9vdC5xdWVyeVNlbGVjdG9yQWxsICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IHNlbGVjdG9yID0gJy53cGJjX2NvbnRhaW5lci53cGJjX2Zvcm0sIC53cGJjX2JmYl9mb3JtLCAud3BiY19iZmJfX3BhZ2VzX3BhbmVsLCAud3BiY19iZmJfX2Zvcm1fcHJldmlld19zZWN0aW9uX2NvbnRhaW5lcic7XG5cdGNvbnN0IHdyYXBzID0gW107XG5cdGlmICggcm9vdC5tYXRjaGVzICYmIHJvb3QubWF0Y2hlcyggc2VsZWN0b3IgKSApIHtcblx0XHR3cmFwcy5wdXNoKCByb290ICk7XG5cdH1cblx0cm9vdC5xdWVyeVNlbGVjdG9yQWxsKCBzZWxlY3RvciApLmZvckVhY2goIGZ1bmN0aW9uICh3cmFwKSB7XG5cdFx0d3JhcHMucHVzaCggd3JhcCApO1xuXHR9ICk7XG5cblx0d3JhcHMuZm9yRWFjaCggZnVuY3Rpb24gKHdyYXApIHtcblx0XHRpZiAoICEgd3JhcCB8fCAhIHdyYXAuc3R5bGUgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoZW1lX2NsYXNzZXMuZm9yRWFjaCggZnVuY3Rpb24gKGNsYXNzX25hbWUpIHtcblx0XHRcdHdyYXAuY2xhc3NMaXN0LnJlbW92ZSggY2xhc3NfbmFtZSApO1xuXHRcdH0gKTtcblx0XHRpZiAoIHByZXNldC50aGVtZV9jbGFzcyApIHtcblx0XHRcdHdyYXAuY2xhc3NMaXN0LmFkZCggU3RyaW5nKCBwcmVzZXQudGhlbWVfY2xhc3MgKSApO1xuXHRcdH1cblx0XHR3cmFwLmNsYXNzTGlzdC50b2dnbGUoICd3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfY3VzdG9tJywgJ2N1c3RvbScgPT09IHN0eWxlICk7XG5cblx0XHRjc3NfdmFyX2tleXMuZm9yRWFjaCggZnVuY3Rpb24gKGNzc19rZXkpIHtcblx0XHRcdHdyYXAuc3R5bGUucmVtb3ZlUHJvcGVydHkoIGNzc19rZXkgKTtcblx0XHR9ICk7XG5cdFx0T2JqZWN0LmtleXMoIGNzc192YXJzICkuZm9yRWFjaCggZnVuY3Rpb24gKGNzc19rZXkpIHtcblx0XHRcdHdyYXAuc3R5bGUuc2V0UHJvcGVydHkoIGNzc19rZXksIGNzc192YXJzW2Nzc19rZXldICk7XG5cdFx0fSApO1xuXHR9ICk7XG59XG5cbltcblx0J2Jvb2tpbmdfZm9ybV9zdHlsZScsXG5cdCdib29raW5nX2Zvcm1fY3VzdG9tX2JhY2tncm91bmRfY29sb3InLFxuXHQnYm9va2luZ19mb3JtX2N1c3RvbV9ib3JkZXJfY29sb3InLFxuXHQnYm9va2luZ19mb3JtX2N1c3RvbV9ib3JkZXJfd2lkdGgnLFxuXHQnYm9va2luZ19mb3JtX2N1c3RvbV9ib3JkZXJfcmFkaXVzJyxcblx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fcGFkZGluZ192ZXJ0aWNhbCcsXG5cdCdib29raW5nX2Zvcm1fY3VzdG9tX3BhZGRpbmdfaG9yaXpvbnRhbCcsXG5cdCdib29raW5nX2Zvcm1fY3VzdG9tX3RleHRfY29sb3InLFxuXHQnYm9va2luZ19mb3JtX2N1c3RvbV9maWVsZF9iYWNrZ3JvdW5kX2NvbG9yJyxcblx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfdGV4dF9jb2xvcicsXG5cdCdib29raW5nX2Zvcm1fY3VzdG9tX2ZpZWxkX2JvcmRlcl9jb2xvcicsXG5cdCdib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9iYWNrZ3JvdW5kX2NvbG9yJyxcblx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX3RleHRfY29sb3InLFxuXHQnYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fYm9yZGVyX2NvbG9yJyxcblx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2hvdmVyX2JhY2tncm91bmRfY29sb3InLFxuXHQnYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25faG92ZXJfdGV4dF9jb2xvcicsXG5cdCdib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ob3Zlcl9ib3JkZXJfY29sb3InLFxuXHQnYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2JhY2tncm91bmRfY29sb3InLFxuXHQnYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX3RleHRfY29sb3InLFxuXHQnYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2JvcmRlcl9jb2xvcicsXG5cdCdib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25faG92ZXJfYmFja2dyb3VuZF9jb2xvcicsXG5cdCdib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25faG92ZXJfdGV4dF9jb2xvcicsXG5cdCdib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25faG92ZXJfYm9yZGVyX2NvbG9yJ1xuXS5mb3JFYWNoKCBmdW5jdGlvbiAoa2V5KSB7XG5cdFdQQkNfQkZCX1NldHRpbmdzX0VmZmVjdHMucmVnaXN0ZXIoIGtleSwgZnVuY3Rpb24gKHZhbHVlLCBjdHgpIHtcblx0XHR3cGJjX2JmYl9nbG9iYWxfZm9ybV9zdHlsZV9fYXBwbHkoIHZhbHVlLCBPYmplY3QuYXNzaWduKCB7fSwgY3R4IHx8IHt9LCB7IGtleToga2V5IH0gKSApO1xuXHR9ICk7XG59ICk7XG5cbmZ1bmN0aW9uIHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc3luY19jdXN0b21fY29udHJvbHNfZnJvbV91aSgpIHtcblx0Y29uc3Qgb3B0aW9ucyA9IHdwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19nZXRfY3VycmVudF9vcHRpb25zKCk7XG5cdHdwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19zeW5jX2NvbnRyb2xzKCBvcHRpb25zICk7XG5cdHdwYmNfYmZiX2dsb2JhbF9mb3JtX3N0eWxlX19hcHBseSggbnVsbCwgeyBzb3VyY2U6ICdzeW5jLWdsb2JhbC1zdHlsZScgfSApO1xufVxuXG53cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX3N5bmNfY3VzdG9tX2NvbnRyb2xzX2Zyb21fdWkoKTtcbmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICdET01Db250ZW50TG9hZGVkJywgd3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zeW5jX2N1c3RvbV9jb250cm9sc19mcm9tX3VpICk7XG5cblxuLy8gQk9PS0lOR19GT1JNX1RIRU1FLlxuV1BCQ19CRkJfU2V0dGluZ3NfRWZmZWN0cy5yZWdpc3RlciggJ2Jvb2tpbmdfZm9ybV90aGVtZScsIGZ1bmN0aW9uICh2YWx1ZSwgY3R4KSB7XG5cdGNvbnN0IHJvb3QgPSAoY3R4ICYmIGN0eC5jYW52YXMpIHx8IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnd3BiY19iZmJfX3RoZW1lX3Njb3BlJyApIHx8IGRvY3VtZW50O1xuXHRpZiAoICEgcm9vdCB8fCAhIHJvb3QucXVlcnlTZWxlY3RvckFsbCApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAoIHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9faXNfdXNlcl90aGVtZV9zd2l0Y2goIGN0eCApICkge1xuXHRcdGNvbnN0IGN1cnJlbnRfb3B0aW9ucyA9IHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fZ2V0X2N1cnJlbnRfb3B0aW9ucygpO1xuXHRcdGlmICggJ2N1c3RvbScgPT09IFN0cmluZyggY3VycmVudF9vcHRpb25zLmJvb2tpbmdfZm9ybV9jb250YWluZXJfc3R5bGUgfHwgJycgKSApIHtcblx0XHRcdGN1cnJlbnRfb3B0aW9ucy5ib29raW5nX2Zvcm1fdGhlbWUgPSB2YWx1ZTtcblx0XHRcdHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc3luY19mb3JtX3N0eWxlX2NvbnRyb2woIGN1cnJlbnRfb3B0aW9ucyApO1xuXHRcdFx0d3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19hcHBseV92YXJzKCAnY3VzdG9tJywgT2JqZWN0LmFzc2lnbigge30sIGN0eCB8fCB7fSwge1xuXHRcdFx0XHRrZXkgICAgOiAnYm9va2luZ19mb3JtX2NvbnRhaW5lcl9zdHlsZScsXG5cdFx0XHRcdHNvdXJjZSA6ICd0aGVtZS1iYXNlLWN1c3RvbScsXG5cdFx0XHRcdG9wdGlvbnM6IGN1cnJlbnRfb3B0aW9uc1xuXHRcdFx0fSApICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHdwYmNfYmZiX2Zvcm1fYXBwZWFyYW5jZV9fc2V0X2NvbnRhaW5lcl9zdHlsZV9jb250cm9sKCAnYm9yZGVyZWQnICk7XG5cdFx0XHR3cGJjX2JmYl9mb3JtX2FwcGVhcmFuY2VfX2FwcGx5X3ZhcnMoICdib3JkZXJlZCcsIE9iamVjdC5hc3NpZ24oIHt9LCBjdHggfHwge30sIHsga2V5OiAnYm9va2luZ19mb3JtX2NvbnRhaW5lcl9zdHlsZScgfSApICk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKCBjdHggJiYgY3R4Lm9wdGlvbnMgKSB7XG5cdFx0d3BiY19iZmJfZm9ybV9hcHBlYXJhbmNlX19zeW5jX2Zvcm1fc3R5bGVfY29udHJvbCggY3R4Lm9wdGlvbnMgKTtcblx0fVxuXG5cdGNvbnN0IHRoZW1lX3NlbGVjdG9yID0gJy53cGJjX2NvbnRhaW5lci53cGJjX2Zvcm0sIC53cGJjX2JmYl9mb3JtLCAud3BiY19iZmJfX3BhZ2VzX3BhbmVsJztcblx0Y29uc3Qgd3JhcHMgPSBbXTtcblx0aWYgKCByb290Lm1hdGNoZXMgJiYgcm9vdC5tYXRjaGVzKCB0aGVtZV9zZWxlY3RvciApICkge1xuXHRcdHdyYXBzLnB1c2goIHJvb3QgKTtcblx0fVxuXHRyb290LnF1ZXJ5U2VsZWN0b3JBbGwoIHRoZW1lX3NlbGVjdG9yICkuZm9yRWFjaCggZnVuY3Rpb24gKHdyYXApIHtcblx0XHR3cmFwcy5wdXNoKCB3cmFwICk7XG5cdH0gKTtcblx0aWYgKCAhIHdyYXBzLmxlbmd0aCApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR3cmFwcy5mb3JFYWNoKCBmdW5jdGlvbiAod3JhcCkge1xuXHRcdC8vIHJlbW92ZSBhbnkgcHJldmlvdXMgdGhlbWUgY2xhc3NlcyAoc2ltcGxlICsgZnV0dXJlLXByb29mKS5cblx0XHRBcnJheS5mcm9tKCB3cmFwLmNsYXNzTGlzdCApLmZvckVhY2goIGZ1bmN0aW9uIChjbHMpIHtcblx0XHRcdGlmICggL153cGJjX3RoZW1lXy8udGVzdCggY2xzICkgKSB7XG5cdFx0XHRcdHdyYXAuY2xhc3NMaXN0LnJlbW92ZSggY2xzICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXG5cdFx0aWYgKCB2YWx1ZSApIHtcblx0XHRcdHdyYXAuY2xhc3NMaXN0LmFkZCggU3RyaW5nKCB2YWx1ZSApICk7XG5cdFx0fVxuXHR9ICk7XG59ICk7XG5cblxuLy8gQk9PS0lOR19GT1JNX0xBWU9VVF9XSURUSCDigJQgRm9ybSB3aWR0aDogYXBwbGllcyBjb21iaW5lZCBcIjEwMCVcIiAvIFwiNjAwcHhcIiAvIFwiNDByZW1cIiB0byB0aGUgYm9va2luZyBmb3JtIGNvbnRhaW5lcnMuXG5XUEJDX0JGQl9TZXR0aW5nc19FZmZlY3RzLnJlZ2lzdGVyKCAnYm9va2luZ19mb3JtX2xheW91dF93aWR0aCcsIGZ1bmN0aW9uICh2YWx1ZSwgY3R4KSB7XG5cdGNvbnN0IHJvb3QgPSBjdHggJiYgY3R4LmNhbnZhcztcblx0aWYgKCAhIHJvb3QgfHwgISByb290LnF1ZXJ5U2VsZWN0b3JBbGwgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3Qgd3JhcHMgPSByb290LnF1ZXJ5U2VsZWN0b3JBbGwoICcud3BiY19iZmJfX2Zvcm1fcHJldmlld19zZWN0aW9uX2NvbnRhaW5lcicgKTtcblx0aWYgKCAhIHdyYXBzLmxlbmd0aCApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCB2ID0gU3RyaW5nKCB2YWx1ZSA9PSBudWxsID8gJycgOiB2YWx1ZSApLnRyaW0oKTtcblxuXHQvLyBhbGxvdyBvbmx5IFwibnVtYmVyICsgdW5pdFwiLlxuXHRpZiAoIHYgJiYgISAvXi0/XFxkKyg/OlxcLlxcZCspPyg/OiV8cHh8cmVtfGVtfHZ3fHZoKSQvLnRlc3QoIHYgKSApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR3cmFwcy5mb3JFYWNoKFxuXHRcdGZ1bmN0aW9uICh3cmFwKSB7XG5cdFx0XHRpZiAoICEgd3JhcCB8fCAhIHdyYXAuc3R5bGUgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCAhIHYgKSB7XG5cdFx0XHRcdHdyYXAuc3R5bGUucmVtb3ZlUHJvcGVydHkoICctLXdwYmMtYmZiLWJvb2tpbmdfZm9ybV9sYXlvdXRfd2lkdGgnICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR3cmFwLnN0eWxlLnNldFByb3BlcnR5KCAnLS13cGJjLWJmYi1ib29raW5nX2Zvcm1fbGF5b3V0X3dpZHRoJywgdiApO1xuXHRcdFx0fVxuXHRcdH1cblx0KTtcbn0gKTtcblxuXG4vLyBEZWJ1ZyBQcmV2aWV3IE1vZGUuXG5XUEJDX0JGQl9TZXR0aW5nc19FZmZlY3RzLnJlZ2lzdGVyKCAnYm9va2luZ19iZmJfcHJldmlld19tb2RlJywgZnVuY3Rpb24gKHZhbHVlLCBjdHgpIHtcblx0Y29uc3Qgcm9vdCA9IGN0eC5jYW52YXM7XG5cdGlmICggISByb290IHx8ICEgcm9vdC5xdWVyeVNlbGVjdG9yQWxsICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IHdyYXBzID0gcm9vdC5xdWVyeVNlbGVjdG9yQWxsKCAnLndwYmNfY29udGFpbmVyLndwYmNfZm9ybScgKTtcblx0aWYgKCAhIHdyYXBzLmxlbmd0aCApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBHZXQgYnVpbGRlciBhc3luYy5cblx0d3BiY19iZmJfYXBpLndpdGhfYnVpbGRlcihcblx0XHRmdW5jdGlvbiAoQnVpbGRlcikge1xuXG5cdFx0XHQvKipcblx0XHRcdCAqIENhcHR1cmUgYWN0aXZlIHJpZ2h0IHNpZGViYXIgdGFiIGFuZCByZXR1cm4gcmVzdG9yZSBoYW5kbGUuXG5cdFx0XHQgKlxuXHRcdFx0ICogQHJldHVybiB7e3Jlc3RvcmU6ZnVuY3Rpb24oKTp2b2lkfXxudWxsfVxuXHRcdFx0ICovXG5cdFx0XHRmdW5jdGlvbiBjYXB0dXJlX3JpZ2h0X3NpZGViYXJfYWN0aXZlX3RhYl9yZXN0b3JlX2hhbmRsZSgpIHtcblxuXHRcdFx0XHR2YXIgdGFibGlzdF9lbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoICcud3BiY19iZmJfX3JpZ2h0YmFyX3RhYnNbcm9sZT1cInRhYmxpc3RcIl0nICk7XG5cdFx0XHRcdGlmICggISB0YWJsaXN0X2VsICkge1xuXHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIGFjdGl2ZV90YWJfZWwgPSB0YWJsaXN0X2VsLnF1ZXJ5U2VsZWN0b3IoICdbcm9sZT1cInRhYlwiXVthcmlhLXNlbGVjdGVkPVwidHJ1ZVwiXScgKTtcblxuXHRcdFx0XHRpZiAoICEgYWN0aXZlX3RhYl9lbCApIHtcblx0XHRcdFx0XHRhY3RpdmVfdGFiX2VsID0gdGFibGlzdF9lbC5xdWVyeVNlbGVjdG9yKCAnW3JvbGU9XCJ0YWJcIl1bYXJpYS1jb250cm9scz1cIndwYmNfYmZiX19wYWxldHRlX2FkZF9uZXdcIl0nICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoICEgYWN0aXZlX3RhYl9lbCB8fCB0eXBlb2YgYWN0aXZlX3RhYl9lbC5jbGljayAhPT0gJ2Z1bmN0aW9uJyApIHtcblx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0cmVzdG9yZTogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0dHJ5IHsgYWN0aXZlX3RhYl9lbC5jbGljaygpOyB9IGNhdGNoICggX2UgKSB7fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0dmFyIHRhYl9yZXN0b3JlX2hhbmRsZSA9IGNhcHR1cmVfcmlnaHRfc2lkZWJhcl9hY3RpdmVfdGFiX3Jlc3RvcmVfaGFuZGxlKCk7XG5cblx0XHRcdGxldCByZXN0b3JlZCAgPSBmYWxzZTtcblx0XHRcdHZhciBFVlMgICAgICA9IHdpbmRvdy5XUEJDX0JGQl9Db3JlICYmIHdpbmRvdy5XUEJDX0JGQl9Db3JlLldQQkNfQkZCX0V2ZW50cyA/IHdpbmRvdy5XUEJDX0JGQl9Db3JlLldQQkNfQkZCX0V2ZW50cyA6IHt9O1xuXHRcdFx0dmFyIEVWX0RPTkUgID0gRVZTLlNUUlVDVFVSRV9MT0FERUQgfHwgRVZTLkNBTlZBU19SRUZSRVNIRUQgfHwgJ3dwYmM6YmZiOnN0cnVjdHVyZS1sb2FkZWQnO1xuXG5cblx0XHRcdGZ1bmN0aW9uIGRvX3Jlc3RvcmUoKSB7XG5cdFx0XHRcdGlmICggcmVzdG9yZWQgKSB7IHJldHVybjsgfVxuXHRcdFx0XHRyZXN0b3JlZCA9IHRydWU7XG5cdFx0XHRcdHRyeSB7IEJ1aWxkZXI/LmJ1cz8ub2ZmPy4oIEVWX0RPTkUsIGRvX3Jlc3RvcmUgKTsgfSBjYXRjaCAoIF8gKSB7fVxuXHRcdFx0XHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRpZiAoICEgdGFiX3Jlc3RvcmVfaGFuZGxlICkgeyByZXR1cm47IH1cblx0XHRcdFx0XHR0YWJfcmVzdG9yZV9oYW5kbGUucmVzdG9yZSgpO1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIExpc3RlbiBvbmNlIChiZXN0KSwgcGx1cyBhIGZhbGxiYWNrIGluIGNhc2UgZXZlbnQgaXNuJ3QgZmlyZWQuXG5cdFx0XHR0cnkgeyBCdWlsZGVyPy5idXM/Lm9uPy4oIEVWX0RPTkUsIGRvX3Jlc3RvcmUgKTsgfSBjYXRjaCAoIF8gKSB7fVxuXG5cblx0XHRcdHZhciBlbmFibGVkID0gKCdPbicgPT09IHZhbHVlKTtcblx0XHRcdEJ1aWxkZXIuc2V0X3ByZXZpZXdfbW9kZSggZW5hYmxlZCwgeyByZWJ1aWxkOiB0cnVlLCByZWluaXQ6IHRydWUsIHNvdXJjZTogJ3NldHRpbmdzLWVmZmVjdHMnIH0gKTtcblx0XHR9XG5cdCk7XG5cbn0gKTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxVQUFVQSxDQUFDLEVBQUVDLENBQUMsRUFBRTtFQUNoQixZQUFZOztFQUVaLE1BQU1DLE9BQU8sR0FBSUYsQ0FBQyxDQUFDRyx5QkFBeUIsR0FBR0gsQ0FBQyxDQUFDRyx5QkFBeUIsSUFBSSxDQUFDLENBQUU7RUFDakYsTUFBTUMsR0FBRyxHQUFRRixPQUFPLENBQUNFLEdBQUcsR0FBR0YsT0FBTyxDQUFDRSxHQUFHLElBQUlDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFFLElBQUssQ0FBRTtFQUVwRUosT0FBTyxDQUFDSyxRQUFRLEdBQUcsVUFBVUMsR0FBRyxFQUFFQyxFQUFFLEVBQUU7SUFDckMsSUFBS0QsR0FBRyxJQUFJLE9BQU9DLEVBQUUsS0FBSyxVQUFVLEVBQUc7TUFDdENMLEdBQUcsQ0FBQ00sTUFBTSxDQUFFRixHQUFJLENBQUMsQ0FBQyxHQUFHQyxFQUFFO0lBQ3hCO0VBQ0QsQ0FBQztFQUVELFNBQVNFLGVBQWVBLENBQUEsRUFBRztJQUMxQixPQUNDVixDQUFDLENBQUNXLGFBQWEsQ0FBRSw0QkFBNkIsQ0FBQyxJQUMvQ1gsQ0FBQyxDQUFDVyxhQUFhLENBQUUsMkJBQTRCLENBQUMsSUFDOUNYLENBQUMsQ0FBQ1ksY0FBYyxDQUFFLG1CQUFvQixDQUFDLElBQ3ZDWixDQUFDLENBQUNhLElBQUksSUFBSWIsQ0FBQyxDQUFDYyxlQUFlO0VBRTdCO0VBRUFiLE9BQU8sQ0FBQ2MsU0FBUyxHQUFHLFVBQVVSLEdBQUcsRUFBRVMsS0FBSyxFQUFFQyxHQUFHLEVBQUU7SUFDOUMsTUFBTVQsRUFBRSxHQUFHTCxHQUFHLENBQUNNLE1BQU0sQ0FBRUYsR0FBSSxDQUFDLENBQUM7SUFDN0IsSUFBSyxDQUFFQyxFQUFFLEVBQUc7TUFDWDtJQUNEO0lBQ0EsSUFBSTtNQUNIQSxFQUFFLENBQUVRLEtBQUssRUFBRVosTUFBTSxDQUFDYyxNQUFNLENBQUU7UUFBRVgsR0FBRztRQUFFUyxLQUFLO1FBQUVHLE1BQU0sRUFBRVQsZUFBZSxDQUFDO01BQUUsQ0FBQyxFQUFFTyxHQUFHLElBQUksQ0FBQyxDQUFFLENBQUUsQ0FBQztJQUNuRixDQUFDLENBQUMsT0FBUUcsQ0FBQyxFQUFHO01BQ2I7TUFDQUMsT0FBTyxDQUFDQyxLQUFLLENBQUUscUJBQXFCLEVBQUVmLEdBQUcsRUFBRWEsQ0FBRSxDQUFDO0lBQy9DO0VBQ0QsQ0FBQztFQUVEbkIsT0FBTyxDQUFDc0IsU0FBUyxHQUFHLFVBQVVDLE9BQU8sRUFBRVAsR0FBRyxFQUFFO0lBQzNDLElBQUssQ0FBRU8sT0FBTyxJQUFJLE9BQU9BLE9BQU8sS0FBSyxRQUFRLEVBQUc7TUFDL0M7SUFDRDtJQUNBcEIsTUFBTSxDQUFDcUIsSUFBSSxDQUFFRCxPQUFRLENBQUMsQ0FBQ0UsT0FBTyxDQUFFLFVBQVVDLENBQUMsRUFBRTtNQUM1QzFCLE9BQU8sQ0FBQ2MsU0FBUyxDQUFFWSxDQUFDLEVBQUVILE9BQU8sQ0FBQ0csQ0FBQyxDQUFDLEVBQUV2QixNQUFNLENBQUNjLE1BQU0sQ0FBRTtRQUFFTSxPQUFPLEVBQUVBO01BQVEsQ0FBQyxFQUFFUCxHQUFHLElBQUksQ0FBQyxDQUFFLENBQUUsQ0FBQztJQUNyRixDQUFFLENBQUM7RUFDSixDQUFDOztFQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0NoQixPQUFPLENBQUMyQixjQUFjLEdBQUcsVUFBVUMsSUFBSSxFQUFFO0lBRXhDLElBQUtBLElBQUksS0FBSyxJQUFJLElBQUksT0FBT0EsSUFBSSxLQUFLLFdBQVcsSUFBSUEsSUFBSSxLQUFLLEVBQUUsRUFBRztNQUNsRSxPQUFPLElBQUk7SUFDWjs7SUFFQTtJQUNBLElBQUssT0FBT0EsSUFBSSxLQUFLLFFBQVEsRUFBRztNQUMvQixJQUFJO1FBQ0hBLElBQUksR0FBR0MsSUFBSSxDQUFDQyxLQUFLLENBQUVGLElBQUssQ0FBQztNQUMxQixDQUFDLENBQUMsT0FBUUcsRUFBRSxFQUFHO1FBQ2QsT0FBTyxJQUFJO01BQ1o7SUFDRDtJQUVBLElBQUssQ0FBRUgsSUFBSSxJQUFJLE9BQU9BLElBQUksS0FBSyxRQUFRLEVBQUc7TUFDekMsT0FBTyxJQUFJO0lBQ1o7O0lBRUE7SUFDQSxNQUFNSSxTQUFTLEdBQ1g3QixNQUFNLENBQUM4QixTQUFTLENBQUNDLGNBQWMsQ0FBQ0MsSUFBSSxDQUFFUCxJQUFJLEVBQUUsU0FBVSxDQUFDLElBQ3ZEekIsTUFBTSxDQUFDOEIsU0FBUyxDQUFDQyxjQUFjLENBQUNDLElBQUksQ0FBRVAsSUFBSSxFQUFFLFVBQVcsQ0FBQyxJQUN4RHpCLE1BQU0sQ0FBQzhCLFNBQVMsQ0FBQ0MsY0FBYyxDQUFDQyxJQUFJLENBQUVQLElBQUksRUFBRSxhQUFjLENBQUM7SUFFL0QsSUFBSyxDQUFFSSxTQUFTLEVBQUc7TUFDbEJKLElBQUksR0FBRztRQUFFTCxPQUFPLEVBQUVLLElBQUk7UUFBRVEsUUFBUSxFQUFFLENBQUM7TUFBRSxDQUFDO0lBQ3ZDO0lBRUEsSUFBSyxDQUFFUixJQUFJLENBQUNMLE9BQU8sSUFBSSxPQUFPSyxJQUFJLENBQUNMLE9BQU8sS0FBSyxRQUFRLEVBQUc7TUFDekRLLElBQUksQ0FBQ0wsT0FBTyxHQUFHLENBQUMsQ0FBQztJQUNsQjtJQUNBLElBQUssQ0FBRUssSUFBSSxDQUFDUSxRQUFRLElBQUksT0FBT1IsSUFBSSxDQUFDUSxRQUFRLEtBQUssUUFBUSxFQUFHO01BQzNEUixJQUFJLENBQUNRLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDbkI7O0lBRUE7SUFDQSxJQUFLUixJQUFJLENBQUNTLFdBQVcsSUFBSSxPQUFPVCxJQUFJLENBQUNTLFdBQVcsS0FBSyxRQUFRLEVBQUc7TUFDL0QsT0FBT1QsSUFBSSxDQUFDUyxXQUFXO0lBQ3hCO0lBRUEsT0FBT1QsSUFBSTtFQUNaLENBQUM7O0VBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNDNUIsT0FBTyxDQUFDc0Msb0JBQW9CLEdBQUcsVUFBVUMsYUFBYSxFQUFFdkIsR0FBRyxFQUFFO0lBRTVELE1BQU1ZLElBQUksR0FBRzVCLE9BQU8sQ0FBQzJCLGNBQWMsQ0FBRVksYUFBYyxDQUFDO0lBQ3BELElBQUssQ0FBRVgsSUFBSSxFQUFHO01BQ2I7SUFDRDs7SUFFQTtJQUNBNUIsT0FBTyxDQUFDc0IsU0FBUyxDQUFFTSxJQUFJLENBQUNMLE9BQU8sRUFBRXBCLE1BQU0sQ0FBQ2MsTUFBTSxDQUFFO01BQUV1QixNQUFNLEVBQUU7SUFBdUIsQ0FBQyxFQUFFeEIsR0FBRyxJQUFJLENBQUMsQ0FBRSxDQUFFLENBQUM7SUFDakd5QixpQ0FBaUMsQ0FBRSxJQUFJLEVBQUV0QyxNQUFNLENBQUNjLE1BQU0sQ0FBRTtNQUFFdUIsTUFBTSxFQUFFO0lBQXVCLENBQUMsRUFBRXhCLEdBQUcsSUFBSSxDQUFDLENBQUUsQ0FBRSxDQUFDOztJQUV6RztJQUNBMEIsVUFBVSxDQUFFLFlBQVk7TUFDdkIxQyxPQUFPLENBQUNzQixTQUFTLENBQUVNLElBQUksQ0FBQ0wsT0FBTyxFQUFFcEIsTUFBTSxDQUFDYyxNQUFNLENBQUU7UUFBRXVCLE1BQU0sRUFBRTtNQUErQixDQUFDLEVBQUV4QixHQUFHLElBQUksQ0FBQyxDQUFFLENBQUUsQ0FBQztNQUN6R3lCLGlDQUFpQyxDQUFFLElBQUksRUFBRXRDLE1BQU0sQ0FBQ2MsTUFBTSxDQUFFO1FBQUV1QixNQUFNLEVBQUU7TUFBK0IsQ0FBQyxFQUFFeEIsR0FBRyxJQUFJLENBQUMsQ0FBRSxDQUFFLENBQUM7SUFDbEgsQ0FBQyxFQUFFLEVBQUcsQ0FBQztFQUNSLENBQUM7O0VBRUQ7RUFDQWpCLENBQUMsQ0FBQzRDLGdCQUFnQixDQUFFLDhCQUE4QixFQUFFLFVBQVV4QixDQUFDLEVBQUU7SUFDaEUsTUFBTVMsSUFBSSxHQUFHVCxDQUFDLElBQUlBLENBQUMsQ0FBQ3lCLE1BQU0sR0FBR3pCLENBQUMsQ0FBQ3lCLE1BQU0sQ0FBQ0MsUUFBUSxHQUFHLElBQUk7SUFDckQsSUFBS2pCLElBQUksSUFBSUEsSUFBSSxDQUFDTCxPQUFPLEVBQUc7TUFDM0J2QixPQUFPLENBQUNzQixTQUFTLENBQUVNLElBQUksQ0FBQ0wsT0FBTyxFQUFFO1FBQUVpQixNQUFNLEVBQUU7TUFBUSxDQUFFLENBQUM7SUFDdkQ7SUFDQUMsaUNBQWlDLENBQUUsSUFBSSxFQUFFO01BQUVELE1BQU0sRUFBRTtJQUFxQixDQUFFLENBQUM7RUFDNUUsQ0FBRSxDQUFDOztFQUVIO0VBQ0EsU0FBU00sVUFBVUEsQ0FBQy9CLEtBQUssRUFBRTtJQUMxQixNQUFNZ0MsQ0FBQyxHQUFHdkMsTUFBTSxDQUFFTyxLQUFLLElBQUksSUFBSSxHQUFHLEVBQUUsR0FBR0EsS0FBTSxDQUFDO0lBQzlDLElBQUtqQixDQUFDLENBQUNrRCxHQUFHLElBQUksT0FBT2xELENBQUMsQ0FBQ2tELEdBQUcsQ0FBQ0MsTUFBTSxLQUFLLFVBQVUsRUFBRztNQUNsRCxPQUFPbkQsQ0FBQyxDQUFDa0QsR0FBRyxDQUFDQyxNQUFNLENBQUVGLENBQUUsQ0FBQztJQUN6QjtJQUNBLE9BQU9BLENBQUMsQ0FBQ0csT0FBTyxDQUFFLGtCQUFrQixFQUFFLE1BQU8sQ0FBQztFQUMvQztFQUVBLFNBQVNDLFlBQVlBLENBQUNDLEVBQUUsRUFBRTtJQUN6QixJQUFLLENBQUVBLEVBQUUsSUFBSSxDQUFFQSxFQUFFLENBQUNDLE9BQU8sRUFBRztNQUMzQixPQUFPLElBQUk7SUFDWjs7SUFFQTtJQUNBLE1BQU1DLE1BQU0sR0FBR0YsRUFBRSxDQUFDQyxPQUFPLENBQUUsd0JBQXlCLENBQUM7SUFDckQsSUFBS0MsTUFBTSxFQUFHO01BQ2IsT0FBT0EsTUFBTTtJQUNkOztJQUVBO0lBQ0EsTUFBTUMsU0FBUyxHQUFHSCxFQUFFLENBQUNDLE9BQU8sQ0FBRSx3QkFBeUIsQ0FBQztJQUN4RCxJQUFLRSxTQUFTLEVBQUc7TUFDaEIsT0FDQ0EsU0FBUyxDQUFDN0MsYUFBYSxDQUFFLDBEQUEyRCxDQUFDLElBQ3JGNkMsU0FBUyxDQUFDN0MsYUFBYSxDQUFFLDZEQUE4RCxDQUFDLElBQ3hGLElBQUk7SUFFTjs7SUFFQTtJQUNBLE1BQU04QyxhQUFhLEdBQUdKLEVBQUUsQ0FBQ0MsT0FBTyxDQUFFLHFCQUFzQixDQUFDO0lBQ3pELElBQUtHLGFBQWEsRUFBRztNQUNwQixPQUNDQSxhQUFhLENBQUM5QyxhQUFhLENBQUUsdURBQXdELENBQUMsSUFDdEY4QyxhQUFhLENBQUM5QyxhQUFhLENBQUUsOERBQStELENBQUMsSUFDN0YsSUFBSTtJQUVOOztJQUVBO0lBQ0EsTUFBTStDLFdBQVcsR0FBR0wsRUFBRSxDQUFDQyxPQUFPLENBQUUsMEJBQTJCLENBQUM7SUFDNUQsSUFBS0ksV0FBVyxFQUFHO01BQ2xCLE9BQ0NBLFdBQVcsQ0FBQy9DLGFBQWEsQ0FBRSw0REFBNkQsQ0FBQyxJQUN6RitDLFdBQVcsQ0FBQy9DLGFBQWEsQ0FBRSxzQ0FBdUMsQ0FBQyxJQUNuRSxJQUFJO0lBRU47SUFFQSxPQUFPLElBQUk7RUFDWjtFQUVBLFNBQVNnRCx1QkFBdUJBLENBQUNDLE9BQU8sRUFBRUMsZUFBZSxFQUFFO0lBQzFELElBQUssQ0FBRUQsT0FBTyxFQUFHO01BQ2hCLE9BQU8sRUFBRTtJQUNWO0lBRUEsTUFBTUUsT0FBTyxHQUFHckQsTUFBTSxDQUFFbUQsT0FBTyxDQUFDRyxZQUFZLENBQUUsdUJBQXdCLENBQUMsSUFBSSxFQUFHLENBQUM7O0lBRS9FO0lBQ0EsSUFBS0QsT0FBTyxLQUFLLE9BQU8sRUFBRztNQUMxQixNQUFNRSxVQUFVLEdBQUdKLE9BQU8sQ0FBQ0csWUFBWSxDQUFFLDRCQUE2QixDQUFDLElBQUksRUFBRTtNQUM3RSxNQUFNRSxRQUFRLEdBQUtELFVBQVUsR0FDMUIsNEJBQTRCLEdBQUdqQixVQUFVLENBQUVpQixVQUFXLENBQUMsR0FBRyxZQUFZLEdBQ3RFLDZCQUE2QjtNQUVoQyxNQUFNRSxPQUFPLEdBQUdOLE9BQU8sQ0FBQ2pELGFBQWEsQ0FBRXNELFFBQVMsQ0FBQztNQUNqRCxPQUFPQyxPQUFPLEdBQUd6RCxNQUFNLENBQUV5RCxPQUFPLENBQUNsRCxLQUFLLElBQUksRUFBRyxDQUFDLEdBQUcsRUFBRTtJQUNwRDtJQUVBLElBQUs4QyxPQUFPLEtBQUssU0FBUyxFQUFHO01BQzVCLE1BQU1LLEtBQUssR0FBS04sZUFBZSxJQUFJQSxlQUFlLENBQUNQLE9BQU8sR0FBS08sZUFBZSxDQUFDUCxPQUFPLENBQUUscUJBQXNCLENBQUMsR0FBR00sT0FBTyxDQUFDTixPQUFPLENBQUUscUJBQXNCLENBQUM7TUFDMUosTUFBTWMsY0FBYyxHQUFHRCxLQUFLLEdBQUdBLEtBQUssQ0FBQ3hELGFBQWEsQ0FBRSxtQ0FBb0MsQ0FBQyxHQUFHLElBQUk7TUFDaEcsTUFBTTBELGdCQUFnQixHQUFHRixLQUFLLEdBQUdBLEtBQUssQ0FBQ3hELGFBQWEsQ0FBRSxxQ0FBc0MsQ0FBQyxHQUFHLElBQUk7TUFDcEcsTUFBTTJELE1BQU0sR0FBR0gsS0FBSyxHQUFHQSxLQUFLLENBQUN4RCxhQUFhLENBQUUsaUNBQWtDLENBQUMsR0FBRyxJQUFJO01BQ3RGLE1BQU00RCxRQUFRLEdBQUdILGNBQWMsR0FBRzNELE1BQU0sQ0FBRTJELGNBQWMsQ0FBQ3BELEtBQUssSUFBSSxHQUFJLENBQUMsR0FBRyxHQUFHO01BQzdFLE1BQU13RCxVQUFVLEdBQUdILGdCQUFnQixHQUFHNUQsTUFBTSxDQUFFNEQsZ0JBQWdCLENBQUNyRCxLQUFLLElBQUl1RCxRQUFTLENBQUMsR0FBR0EsUUFBUTtNQUM3RixNQUFNRSxRQUFRLEdBQUdDLG1EQUFtRCxDQUFFSCxRQUFRLEVBQUVDLFVBQVcsQ0FBQztNQUU1RixJQUFLRixNQUFNLEVBQUc7UUFDYkEsTUFBTSxDQUFDdEQsS0FBSyxHQUFHeUQsUUFBUTtNQUN4QjtNQUVBLE9BQU9BLFFBQVE7SUFDaEI7O0lBRUE7SUFDQSxJQUFNWixlQUFlLElBQUlBLGVBQWUsQ0FBQ2MsSUFBSSxLQUFLLFVBQVUsSUFBS2YsT0FBTyxDQUFDZSxJQUFJLEtBQUssVUFBVSxFQUFHO01BQzlGLE1BQU1DLEVBQUUsR0FBSWYsZUFBZSxJQUFJQSxlQUFlLENBQUNjLElBQUksS0FBSyxVQUFVLEdBQUlkLGVBQWUsR0FBR0QsT0FBTztNQUMvRixPQUFPZ0IsRUFBRSxDQUFDVixPQUFPLEdBQUcsSUFBSSxHQUFHLEtBQUs7SUFDakM7O0lBRUE7SUFDQSxJQUFLTixPQUFPLENBQUM1QyxLQUFLLElBQUksSUFBSSxFQUFHO01BQzVCLE9BQU9QLE1BQU0sQ0FBRW1ELE9BQU8sQ0FBQzVDLEtBQU0sQ0FBQztJQUMvQjtJQUNBLElBQUs2QyxlQUFlLElBQUlBLGVBQWUsQ0FBQzdDLEtBQUssSUFBSSxJQUFJLEVBQUc7TUFDdkQsT0FBT1AsTUFBTSxDQUFFb0QsZUFBZSxDQUFDN0MsS0FBTSxDQUFDO0lBQ3ZDO0lBRUEsT0FBTyxFQUFFO0VBQ1Y7RUFFQSxTQUFTNkQsd0JBQXdCQSxDQUFDQyxNQUFNLEVBQUVDLFVBQVUsRUFBRUMsWUFBWSxFQUFFO0lBQ25FLElBQUssQ0FBRUYsTUFBTSxFQUFHO01BQUU7SUFBUTtJQUUxQixNQUFNbEIsT0FBTyxHQUFHUixZQUFZLENBQUUwQixNQUFPLENBQUM7SUFDdEMsSUFBSyxDQUFFbEIsT0FBTyxFQUFHO01BQUU7SUFBUTs7SUFHM0I7SUFDQTtJQUNBO0lBQ0EsTUFBTUUsT0FBTyxHQUFHckQsTUFBTSxDQUFFbUQsT0FBTyxDQUFDRyxZQUFZLENBQUUsdUJBQXdCLENBQUMsSUFBSSxFQUFHLENBQUM7SUFDL0UsTUFBTWtCLEdBQUcsR0FBT3hFLE1BQU0sQ0FBRXFFLE1BQU0sQ0FBQ0ksT0FBTyxJQUFJLEVBQUcsQ0FBQyxDQUFDQyxXQUFXLENBQUMsQ0FBQztJQUM1RCxNQUFNUixJQUFJLEdBQU1sRSxNQUFNLENBQUVxRSxNQUFNLENBQUNILElBQUksSUFBSSxFQUFHLENBQUMsQ0FBQ1EsV0FBVyxDQUFDLENBQUM7SUFFekQsTUFBTUMsVUFBVSxHQUFJdEIsT0FBTyxLQUFLLFFBQVEsSUFBTUEsT0FBTyxLQUFLLFFBQVMsSUFBS0EsT0FBTyxLQUFLLE9BQVEsSUFBS2EsSUFBSSxLQUFLLFVBQVcsSUFBS0EsSUFBSSxLQUFLLE9BQVEsSUFBS00sR0FBRyxLQUFLLFFBQVM7SUFFakssSUFBS0csVUFBVSxJQUFJTCxVQUFVLEtBQUssUUFBUSxFQUFHO01BQUU7SUFBUTtJQUN2RCxJQUFLLENBQUVLLFVBQVUsSUFBSUwsVUFBVSxLQUFLLE9BQU8sRUFBRztNQUFFO0lBQVE7SUFDeEQ7O0lBRUEsTUFBTXhFLEdBQUcsR0FBR3FELE9BQU8sQ0FBQ0csWUFBWSxDQUFFLHNCQUF1QixDQUFDO0lBQzFELElBQUssQ0FBRXhELEdBQUcsRUFBRztNQUFFO0lBQVE7SUFFdkIsTUFBTThFLEtBQUssR0FBR3pCLE9BQU8sQ0FBQ0csWUFBWSxDQUFFLHdCQUF5QixDQUFDLElBQUksRUFBRTtJQUNwRSxNQUFNL0MsS0FBSyxHQUFHMkMsdUJBQXVCLENBQUVDLE9BQU8sRUFBRWtCLE1BQU8sQ0FBQztJQUV4RDdFLE9BQU8sQ0FBQ2MsU0FBUyxDQUFFUixHQUFHLEVBQUVTLEtBQUssRUFBRTtNQUFFeUIsTUFBTSxFQUFFdUMsWUFBWSxJQUFJLElBQUk7TUFBRUssS0FBSyxFQUFFQSxLQUFLO01BQUVDLE9BQU8sRUFBRVIsTUFBTTtNQUFFbEIsT0FBTyxFQUFFQTtJQUFRLENBQUUsQ0FBQztFQUNuSDtFQUVBLFNBQVMyQixrQkFBa0JBLENBQUNULE1BQU0sRUFBRTtJQUNuQyxJQUFLLENBQUVBLE1BQU0sSUFBSSxDQUFFQSxNQUFNLENBQUNVLE9BQU8sRUFBRztNQUNuQyxPQUFPLEtBQUs7SUFDYjtJQUVBLE9BQU9WLE1BQU0sQ0FBQ1UsT0FBTyxDQUFFLG1GQUFvRixDQUFDO0VBQzdHO0VBRUEsU0FBU0MsU0FBU0EsQ0FBQ0MsRUFBRSxFQUFFO0lBQ3RCO0lBQ0E7SUFDQSxJQUFLQSxFQUFFLElBQUlBLEVBQUUsQ0FBQ0MsU0FBUyxLQUFLLEtBQUssSUFBSSxDQUFFSixrQkFBa0IsQ0FBRUcsRUFBRSxDQUFDWixNQUFPLENBQUMsRUFBRztNQUFFO0lBQVE7SUFDbkZELHdCQUF3QixDQUFFYSxFQUFFLElBQUlBLEVBQUUsQ0FBQ1osTUFBTSxFQUFFWSxFQUFFLElBQUlBLEVBQUUsQ0FBQ2YsSUFBSSxFQUFJZSxFQUFFLElBQUlBLEVBQUUsQ0FBQ0MsU0FBUyxLQUFLLEtBQUssR0FBSyxTQUFTLEdBQUcsSUFBSyxDQUFDO0VBQ2hIO0VBRUEzRixDQUFDLENBQUM0QyxnQkFBZ0IsQ0FBRSxPQUFPLEVBQUU2QyxTQUFTLEVBQUUsS0FBTSxDQUFDO0VBQy9DekYsQ0FBQyxDQUFDNEMsZ0JBQWdCLENBQUUsUUFBUSxFQUFFNkMsU0FBUyxFQUFFLEtBQU0sQ0FBQztFQUNoRCxTQUFTRyxlQUFlQSxDQUFDRixFQUFFLEVBQUU7SUFDNUIsTUFBTTdDLE1BQU0sR0FBRzZDLEVBQUUsSUFBSUEsRUFBRSxDQUFDN0MsTUFBTSxHQUFHNkMsRUFBRSxDQUFDN0MsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUMvQyxNQUFNaUMsTUFBTSxHQUFHakMsTUFBTSxDQUFDZ0QsU0FBUyxJQUFJaEQsTUFBTSxDQUFDUSxFQUFFLElBQUlSLE1BQU0sQ0FBQ2lELEtBQUssSUFBSUosRUFBRSxDQUFDWixNQUFNLElBQUksSUFBSTtJQUVqRixJQUFLLENBQUVTLGtCQUFrQixDQUFFVCxNQUFPLENBQUMsRUFBRztNQUNyQztJQUNEO0lBRUEsSUFBS2pDLE1BQU0sQ0FBQ2tELEtBQUssSUFBSWpCLE1BQU0sQ0FBQzlELEtBQUssS0FBSzZCLE1BQU0sQ0FBQ2tELEtBQUssRUFBRztNQUNwRGpCLE1BQU0sQ0FBQzlELEtBQUssR0FBRzZCLE1BQU0sQ0FBQ2tELEtBQUs7SUFDNUI7SUFFQWxCLHdCQUF3QixDQUFFQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFNBQVUsQ0FBQztFQUN2RDtFQUNBOUUsQ0FBQyxDQUFDNEMsZ0JBQWdCLENBQUUsY0FBYyxFQUFFZ0QsZUFBZSxFQUFFLEtBQU0sQ0FBQztFQUM1RDVGLENBQUMsQ0FBQzRDLGdCQUFnQixDQUFFLHlCQUF5QixFQUFFZ0QsZUFBZSxFQUFFLEtBQU0sQ0FBQztBQUV4RSxDQUFDLEVBQUdJLE1BQU0sRUFBRUMsUUFBUyxDQUFDO0FBRXRCLFNBQVNDLHFDQUFxQ0EsQ0FBQSxFQUFHO0VBQ2hELE9BQU87SUFDTkMsUUFBUSxFQUFFO01BQ1RDLFVBQVUsRUFBRyxTQUFTO01BQ3RCQyxXQUFXLEVBQUUsU0FBUztNQUN0QkMsV0FBVyxFQUFFLEtBQUs7TUFDbEJDLE1BQU0sRUFBTyxLQUFLO01BQ2xCQyxPQUFPLEVBQU0sV0FBVztNQUN4QkMsTUFBTSxFQUFPO0lBQ2QsQ0FBQztJQUNEQyxJQUFJLEVBQU07TUFDVE4sVUFBVSxFQUFHLGFBQWE7TUFDMUJDLFdBQVcsRUFBRSxhQUFhO01BQzFCQyxXQUFXLEVBQUUsS0FBSztNQUNsQkMsTUFBTSxFQUFPLEtBQUs7TUFDbEJDLE9BQU8sRUFBTSxLQUFLO01BQ2xCQyxNQUFNLEVBQU87SUFDZCxDQUFDO0lBQ0RFLElBQUksRUFBTTtNQUNUUCxVQUFVLEVBQUcsU0FBUztNQUN0QkMsV0FBVyxFQUFFLE1BQU07TUFDbkJDLFdBQVcsRUFBRSxLQUFLO01BQ2xCQyxNQUFNLEVBQU8sS0FBSztNQUNsQkMsT0FBTyxFQUFNLE1BQU07TUFDbkJDLE1BQU0sRUFBTztJQUNkO0VBQ0QsQ0FBQztBQUNGO0FBRUEsU0FBU0csdUNBQXVDQSxDQUFDcEYsT0FBTyxFQUFFO0VBQ3pEQSxPQUFPLEdBQUdBLE9BQU8sSUFBSSxPQUFPQSxPQUFPLEtBQUssUUFBUSxHQUFHQSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0VBQy9ELE9BQU8sbUJBQW1CLEtBQUtmLE1BQU0sQ0FBRWUsT0FBTyxDQUFDcUYsa0JBQWtCLElBQUksRUFBRyxDQUFDO0FBQzFFO0FBRUEsU0FBU0MsZ0RBQWdEQSxDQUFDQyxLQUFLLEVBQUV2RixPQUFPLEVBQUU7RUFDekUsTUFBTXdGLE9BQU8sR0FBR2QscUNBQXFDLENBQUMsQ0FBQztFQUV2RCxJQUFLLENBQUVVLHVDQUF1QyxDQUFFcEYsT0FBUSxDQUFDLEVBQUc7SUFDM0QsT0FBT3dGLE9BQU8sQ0FBQ0QsS0FBSyxDQUFDLElBQUlDLE9BQU8sQ0FBQ2IsUUFBUTtFQUMxQztFQUVBLElBQUssTUFBTSxLQUFLWSxLQUFLLEVBQUc7SUFDdkIsT0FBTztNQUNOWCxVQUFVLEVBQUcsU0FBUztNQUN0QkMsV0FBVyxFQUFFLFNBQVM7TUFDdEJDLFdBQVcsRUFBRSxLQUFLO01BQ2xCQyxNQUFNLEVBQU8sS0FBSztNQUNsQkMsT0FBTyxFQUFNLE1BQU07TUFDbkJDLE1BQU0sRUFBTztJQUNkLENBQUM7RUFDRjtFQUVBLE9BQU9PLE9BQU8sQ0FBQ0QsS0FBSyxDQUFDLElBQUlDLE9BQU8sQ0FBQ2IsUUFBUTtBQUMxQztBQUVBLFNBQVNjLHdDQUF3Q0EsQ0FBQ2pHLEtBQUssRUFBRWtHLFFBQVEsRUFBRTtFQUNsRSxNQUFNbEUsQ0FBQyxHQUFHdkMsTUFBTSxDQUFFTyxLQUFLLElBQUksSUFBSSxHQUFHLEVBQUUsR0FBR0EsS0FBTSxDQUFDLENBQUNtRyxJQUFJLENBQUMsQ0FBQztFQUNyRCxJQUFLLGlDQUFpQyxDQUFDQyxJQUFJLENBQUVwRSxDQUFFLENBQUMsRUFBRztJQUNsRCxPQUFPQSxDQUFDO0VBQ1Q7RUFDQSxJQUFLQSxDQUFDLEtBQUssYUFBYSxFQUFHO0lBQzFCLE9BQU9BLENBQUM7RUFDVDtFQUNBLE9BQU9rRSxRQUFRO0FBQ2hCO0FBRUEsU0FBU0csaURBQWlEQSxDQUFDckcsS0FBSyxFQUFFO0VBQ2pFLE9BQU9pRyx3Q0FBd0MsQ0FBRWpHLEtBQUssRUFBRSxFQUFHLENBQUM7QUFDN0Q7QUFFQSxTQUFTc0cseUNBQXlDQSxDQUFDdEcsS0FBSyxFQUFFa0csUUFBUSxFQUFFO0VBQ25FLE1BQU1sRSxDQUFDLEdBQUd2QyxNQUFNLENBQUVPLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFHQSxLQUFNLENBQUMsQ0FBQ21HLElBQUksQ0FBQyxDQUFDO0VBQ3JELElBQUssbUNBQW1DLENBQUNDLElBQUksQ0FBRXBFLENBQUUsQ0FBQyxFQUFHO0lBQ3BELE9BQU9BLENBQUM7RUFDVDtFQUNBLE9BQU9rRSxRQUFRO0FBQ2hCO0FBRUEsU0FBU0ssMENBQTBDQSxDQUFDdkcsS0FBSyxFQUFFa0csUUFBUSxFQUFFO0VBQ3BFLE1BQU1sRSxDQUFDLEdBQUd2QyxNQUFNLENBQUVPLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFHQSxLQUFNLENBQUMsQ0FBQ21HLElBQUksQ0FBQyxDQUFDLENBQUNoRSxPQUFPLENBQUUsTUFBTSxFQUFFLEdBQUksQ0FBQztFQUM1RSxNQUFNcUUsS0FBSyxHQUFHeEUsQ0FBQyxHQUFHQSxDQUFDLENBQUN5RSxLQUFLLENBQUUsR0FBSSxDQUFDLEdBQUcsRUFBRTtFQUNyQyxJQUFLRCxLQUFLLENBQUNFLE1BQU0sR0FBRyxDQUFDLElBQUlGLEtBQUssQ0FBQ0UsTUFBTSxHQUFHLENBQUMsRUFBRztJQUMzQyxPQUFPUixRQUFRO0VBQ2hCO0VBQ0EsS0FBTSxJQUFJUyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdILEtBQUssQ0FBQ0UsTUFBTSxFQUFFQyxDQUFDLEVBQUUsRUFBRztJQUN4QyxJQUFLLENBQUUsbUNBQW1DLENBQUNQLElBQUksQ0FBRUksS0FBSyxDQUFDRyxDQUFDLENBQUUsQ0FBQyxFQUFHO01BQzdELE9BQU9ULFFBQVE7SUFDaEI7RUFDRDtFQUNBLE9BQU9NLEtBQUssQ0FBQ0ksSUFBSSxDQUFFLEdBQUksQ0FBQztBQUN6QjtBQUVBLFNBQVNsRCxtREFBbURBLENBQUNILFFBQVEsRUFBRUMsVUFBVSxFQUFFO0VBQ2xGLE1BQU14QixDQUFDLEdBQUd2QyxNQUFNLENBQUU4RCxRQUFRLElBQUksSUFBSSxHQUFHLEVBQUUsR0FBR0EsUUFBUyxDQUFDLENBQUM0QyxJQUFJLENBQUMsQ0FBQztFQUMzRCxNQUFNVSxDQUFDLEdBQUdwSCxNQUFNLENBQUUrRCxVQUFVLElBQUksSUFBSSxHQUFHLEVBQUUsR0FBR0EsVUFBVyxDQUFDLENBQUMyQyxJQUFJLENBQUMsQ0FBQztFQUMvRCxNQUFNVyxZQUFZLEdBQUcsbUJBQW1CLENBQUNWLElBQUksQ0FBRXBFLENBQUUsQ0FBQyxHQUFHQSxDQUFDLEdBQUcsR0FBRztFQUM1RCxNQUFNK0UsY0FBYyxHQUFHLG1CQUFtQixDQUFDWCxJQUFJLENBQUVTLENBQUUsQ0FBQyxHQUFHQSxDQUFDLEdBQUdDLFlBQVk7RUFFdkUsT0FBT0EsWUFBWSxHQUFHLEtBQUssR0FBR0MsY0FBYyxHQUFHLElBQUk7QUFDcEQ7QUFFQSxTQUFTQyx5Q0FBeUNBLENBQUMvRyxHQUFHLEVBQUVWLEdBQUcsRUFBRVMsS0FBSyxFQUFFO0VBQ25FLElBQUlRLE9BQU8sR0FBSVAsR0FBRyxJQUFJQSxHQUFHLENBQUNPLE9BQU8sSUFBSSxPQUFPUCxHQUFHLENBQUNPLE9BQU8sS0FBSyxRQUFRLEdBQUlwQixNQUFNLENBQUNjLE1BQU0sQ0FBRSxDQUFDLENBQUMsRUFBRUQsR0FBRyxDQUFDTyxPQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7RUFFN0csSUFBS3dFLE1BQU0sQ0FBQ2lDLHFCQUFxQixJQUFJLE9BQU9qQyxNQUFNLENBQUNpQyxxQkFBcUIsQ0FBQ0MsT0FBTyxLQUFLLFVBQVUsRUFBRztJQUNqRzFHLE9BQU8sR0FBR3BCLE1BQU0sQ0FBQ2MsTUFBTSxDQUFFOEUsTUFBTSxDQUFDaUMscUJBQXFCLENBQUNDLE9BQU8sQ0FBRSxNQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTFHLE9BQVEsQ0FBQztFQUN6RjtFQUVBLElBQUtqQixHQUFHLEVBQUc7SUFDVmlCLE9BQU8sQ0FBQ2YsTUFBTSxDQUFFRixHQUFJLENBQUMsQ0FBQyxHQUFHUyxLQUFLO0VBQy9CO0VBRUEsSUFBS21ILCtDQUErQyxDQUFFNUgsR0FBSSxDQUFDLEVBQUc7SUFDN0RpQixPQUFPLENBQUM0Ryw0QkFBNEIsR0FBRyxRQUFRO0lBQy9DQyxxREFBcUQsQ0FBRSxRQUFTLENBQUM7RUFDbEU7RUFFQSxPQUFPN0csT0FBTztBQUNmO0FBRUEsU0FBUzhHLGlEQUFpREEsQ0FBQSxFQUFHO0VBQzVELE9BQU8sQ0FDTiwrQkFBK0IsRUFDL0IsMkJBQTJCLEVBQzNCLDJCQUEyQixFQUMzQiw0QkFBNEIsRUFDNUIsc0JBQXNCLEVBQ3RCLHlCQUF5QixFQUN6QixxQ0FBcUMsRUFDckMsK0JBQStCLEVBQy9CLGlDQUFpQyxDQUNqQztBQUNGO0FBRUEsU0FBU0gsK0NBQStDQSxDQUFDNUgsR0FBRyxFQUFFO0VBQzdELE9BQU8rSCxpREFBaUQsQ0FBQyxDQUFDLENBQUNDLE9BQU8sQ0FBRTlILE1BQU0sQ0FBRUYsR0FBRyxJQUFJLEVBQUcsQ0FBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2pHO0FBRUEsU0FBUzhILHFEQUFxREEsQ0FBQ3JILEtBQUssRUFBRTtFQUNyRSxNQUFNc0UsT0FBTyxHQUFHVyxRQUFRLENBQUN0RixhQUFhLENBQUUsdURBQXdELENBQUM7RUFDakcsSUFBSyxDQUFFMkUsT0FBTyxJQUFJQSxPQUFPLENBQUN0RSxLQUFLLEtBQUtBLEtBQUssRUFBRztJQUMzQztFQUNEO0VBRUFzRSxPQUFPLENBQUN0RSxLQUFLLEdBQUdBLEtBQUs7QUFDdEI7QUFFQSxTQUFTd0gsMkNBQTJDQSxDQUFDakksR0FBRyxFQUFFUyxLQUFLLEVBQUU7RUFDaEUsTUFBTXlILEdBQUcsR0FBR3hDLFFBQVEsQ0FBQ3RGLGFBQWEsQ0FBRSxvQ0FBb0MsR0FBR0osR0FBRyxHQUFHLElBQUssQ0FBQztFQUN2RixJQUFLLENBQUVrSSxHQUFHLEVBQUc7SUFDWjtFQUNEO0VBRUEsTUFBTUMsSUFBSSxHQUFHRCxHQUFHLENBQUM5SCxhQUFhLENBQUUsMkRBQTRELENBQUM7RUFDN0YsTUFBTXFELFVBQVUsR0FBRzBFLElBQUksR0FBR2pJLE1BQU0sQ0FBRWlJLElBQUksQ0FBQzNFLFlBQVksQ0FBRSw0QkFBNkIsQ0FBQyxJQUFJLEVBQUcsQ0FBQyxHQUFHLEVBQUU7RUFDaEcsTUFBTTRFLE1BQU0sR0FBRzNFLFVBQVUsR0FDdEJ5RSxHQUFHLENBQUNHLGdCQUFnQixDQUFFLDRCQUE0QixHQUFHNUUsVUFBVSxHQUFHLElBQUssQ0FBQyxHQUN4RXlFLEdBQUcsQ0FBQ0csZ0JBQWdCLENBQUUscUJBQXNCLENBQUM7RUFFaERELE1BQU0sQ0FBQ2pILE9BQU8sQ0FBRSxVQUFVbUgsS0FBSyxFQUFFO0lBQ2hDLE1BQU1DLFlBQVksR0FBS3JJLE1BQU0sQ0FBRW9JLEtBQUssQ0FBQzdILEtBQU0sQ0FBQyxLQUFLUCxNQUFNLENBQUVPLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFHQSxLQUFNLENBQUc7SUFDdkY2SCxLQUFLLENBQUMzRSxPQUFPLEdBQUc0RSxZQUFZO0lBRTVCLE1BQU1DLE1BQU0sR0FBR0YsS0FBSyxDQUFDdkYsT0FBTyxHQUFHdUYsS0FBSyxDQUFDdkYsT0FBTyxDQUFFLG9CQUFxQixDQUFDLEdBQUcsSUFBSTtJQUMzRSxJQUFLeUYsTUFBTSxFQUFHO01BQ2JBLE1BQU0sQ0FBQ0MsU0FBUyxDQUFDQyxNQUFNLENBQUUsYUFBYSxFQUFFSCxZQUFhLENBQUM7SUFDdkQ7RUFDRCxDQUFFLENBQUM7QUFDSjtBQUVBLFNBQVNJLDRDQUE0Q0EsQ0FBQzNJLEdBQUcsRUFBRVMsS0FBSyxFQUFFO0VBQ2pFLE1BQU1zRSxPQUFPLEdBQUdXLFFBQVEsQ0FBQ3RGLGFBQWEsQ0FBRSx5QkFBeUIsR0FBR0osR0FBRyxHQUFHLElBQUssQ0FBQztFQUNoRixJQUFLK0UsT0FBTyxFQUFHO0lBQ2RBLE9BQU8sQ0FBQ3RFLEtBQUssR0FBR1AsTUFBTSxDQUFFTyxLQUFLLElBQUksSUFBSSxHQUFHLEVBQUUsR0FBR0EsS0FBTSxDQUFDO0VBQ3JEO0FBQ0Q7QUFFQSxTQUFTbUksNkNBQTZDQSxDQUFBLEVBQUc7RUFDeEQsT0FBT25ELE1BQU0sQ0FBQ2lDLHFCQUFxQixJQUFJLE9BQU9qQyxNQUFNLENBQUNpQyxxQkFBcUIsQ0FBQ0MsT0FBTyxLQUFLLFVBQVUsR0FDOUZsQyxNQUFNLENBQUNpQyxxQkFBcUIsQ0FBQ0MsT0FBTyxDQUFFLE1BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUNwRCxDQUFDLENBQUM7QUFDTjtBQUVBLFNBQVNrQixzREFBc0RBLENBQUM1SCxPQUFPLEVBQUU7RUFDeEVBLE9BQU8sR0FBR0EsT0FBTyxJQUFJLE9BQU9BLE9BQU8sS0FBSyxRQUFRLEdBQUdBLE9BQU8sR0FBRyxDQUFDLENBQUM7RUFFL0QsTUFBTTZILEtBQUssR0FBRzVJLE1BQU0sQ0FBRWUsT0FBTyxDQUFDcUYsa0JBQWtCLElBQUksRUFBRyxDQUFDO0VBQ3hELE1BQU1FLEtBQUssR0FBR3RHLE1BQU0sQ0FBRWUsT0FBTyxDQUFDNEcsNEJBQTRCLElBQUksU0FBVSxDQUFDO0VBRXpFLElBQUssUUFBUSxLQUFLckIsS0FBSyxFQUFHO0lBQ3pCLE9BQU8sUUFBUTtFQUNoQjtFQUNBLElBQUssU0FBUyxLQUFLQSxLQUFLLElBQUksRUFBRSxLQUFLQSxLQUFLLEVBQUc7SUFDMUMsT0FBTyxTQUFTO0VBQ2pCO0VBRUEsTUFBTXVDLE1BQU0sR0FBSyxtQkFBbUIsS0FBS0QsS0FBSyxHQUFLLE1BQU0sR0FBRyxPQUFPO0VBQ25FLElBQUssQ0FBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBRSxDQUFDZCxPQUFPLENBQUV4QixLQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRztJQUM3RCxPQUFPdUMsTUFBTSxHQUFHLFdBQVc7RUFDNUI7RUFFQSxPQUFPQSxNQUFNLEdBQUcsR0FBRyxHQUFHdkMsS0FBSztBQUM1QjtBQUVBLFNBQVN3QyxpREFBaURBLENBQUMvSCxPQUFPLEVBQUU7RUFDbkVnSCwyQ0FBMkMsQ0FBRSxvQkFBb0IsRUFBRVksc0RBQXNELENBQUU1SCxPQUFRLENBQUUsQ0FBQztBQUN2STtBQUVBLFNBQVNnSSxtREFBbURBLENBQUN4SSxLQUFLLEVBQUU7RUFDbkUsTUFBTXlJLGVBQWUsR0FBR04sNkNBQTZDLENBQUMsQ0FBQztFQUN2RSxNQUFNTyxhQUFhLEdBQUdqSixNQUFNLENBQUVnSixlQUFlLENBQUM1QyxrQkFBa0IsSUFBSSxFQUFHLENBQUM7RUFDeEUsTUFBTWtDLE1BQU0sR0FBR3RJLE1BQU0sQ0FBRU8sS0FBSyxJQUFJLFNBQVUsQ0FBQztFQUUzQyxJQUFLLFFBQVEsS0FBSytILE1BQU0sRUFBRztJQUMxQixPQUFPO01BQ05sQyxrQkFBa0IsRUFBWTZDLGFBQWE7TUFDM0N0Qiw0QkFBNEIsRUFBRTtJQUMvQixDQUFDO0VBQ0Y7RUFDQSxJQUFLLFNBQVMsS0FBS1csTUFBTSxJQUFJLEVBQUUsS0FBS0EsTUFBTSxFQUFHO0lBQzVDLE9BQU87TUFDTmxDLGtCQUFrQixFQUFZLEVBQUU7TUFDaEN1Qiw0QkFBNEIsRUFBRTtJQUMvQixDQUFDO0VBQ0Y7RUFFQSxNQUFNWixLQUFLLEdBQUd1QixNQUFNLENBQUN0QixLQUFLLENBQUUsR0FBSSxDQUFDO0VBQ2pDLE1BQU00QixLQUFLLEdBQUssTUFBTSxLQUFLN0IsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFLLG1CQUFtQixHQUFHLEVBQUU7RUFDaEUsTUFBTVQsS0FBSyxHQUFHUyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVTtFQUVwQyxPQUFPO0lBQ05YLGtCQUFrQixFQUFZd0MsS0FBSztJQUNuQ2pCLDRCQUE0QixFQUFJLENBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUUsQ0FBQ0csT0FBTyxDQUFFeEIsS0FBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUssVUFBVSxHQUFHQTtFQUN6RyxDQUFDO0FBQ0Y7QUFFQSxTQUFTNEMsOENBQThDQSxDQUFDMUksR0FBRyxFQUFFO0VBQzVELE1BQU13QixNQUFNLEdBQUdoQyxNQUFNLENBQUVRLEdBQUcsSUFBSUEsR0FBRyxDQUFDd0IsTUFBTSxHQUFHeEIsR0FBRyxDQUFDd0IsTUFBTSxHQUFHLEVBQUcsQ0FBQztFQUM1RCxPQUFPLENBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBRSxDQUFDOEYsT0FBTyxDQUFFOUYsTUFBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BEO0FBRUEsU0FBU21ILHlDQUF5Q0EsQ0FBQ3BJLE9BQU8sRUFBRTtFQUMzRCxPQUFPZixNQUFNLENBQUVlLE9BQU8sSUFBSUEsT0FBTyxDQUFDNEcsNEJBQTRCLEdBQUc1RyxPQUFPLENBQUM0Ryw0QkFBNEIsR0FBRyxTQUFVLENBQUMsS0FBSyxRQUFRO0FBQ2pJO0FBRUEsU0FBU3lCLDhDQUE4Q0EsQ0FBQ3JJLE9BQU8sRUFBRTtFQUNoRSxNQUFNc0ksU0FBUyxHQUFHRix5Q0FBeUMsQ0FBRXBJLE9BQVEsQ0FBQztFQUN0RSxNQUFNdUksU0FBUyxHQUFHOUQsUUFBUSxDQUFDdEYsYUFBYSxDQUFFLDZDQUE4QyxDQUFDO0VBQ3pGLE1BQU1xSixjQUFjLEdBQUcvRCxRQUFRLENBQUN0RixhQUFhLENBQUUsd0RBQXlELENBQUM7RUFFekcySCxpREFBaUQsQ0FBQyxDQUFDLENBQUM1RyxPQUFPLENBQUUsVUFBVW5CLEdBQUcsRUFBRTtJQUMzRSxNQUFNa0ksR0FBRyxHQUFHeEMsUUFBUSxDQUFDdEYsYUFBYSxDQUFFLG9DQUFvQyxHQUFHSixHQUFHLEdBQUcsSUFBSyxDQUFDO0lBQ3ZGLElBQUssQ0FBRWtJLEdBQUcsRUFBRztNQUNaO0lBQ0Q7SUFDQUEsR0FBRyxDQUFDd0IsTUFBTSxHQUFHLENBQUVILFNBQVM7SUFDeEJyQixHQUFHLENBQUN5QixZQUFZLENBQUUsYUFBYSxFQUFFSixTQUFTLEdBQUcsT0FBTyxHQUFHLE1BQU8sQ0FBQztJQUMvRHJCLEdBQUcsQ0FBQ08sU0FBUyxDQUFDQyxNQUFNLENBQUUsV0FBVyxFQUFFLENBQUVhLFNBQVUsQ0FBQztFQUNqRCxDQUFFLENBQUM7RUFFSCxJQUFLQyxTQUFTLEVBQUc7SUFDaEJBLFNBQVMsQ0FBQ0UsTUFBTSxHQUFHLENBQUVILFNBQVM7SUFDOUJDLFNBQVMsQ0FBQ0csWUFBWSxDQUFFLGFBQWEsRUFBRUosU0FBUyxHQUFHLE9BQU8sR0FBRyxNQUFPLENBQUM7SUFDckVDLFNBQVMsQ0FBQ2YsU0FBUyxDQUFDQyxNQUFNLENBQUUsV0FBVyxFQUFFLENBQUVhLFNBQVUsQ0FBQztFQUN2RDtFQUVBLElBQUtFLGNBQWMsRUFBRztJQUNyQkEsY0FBYyxDQUFDQyxNQUFNLEdBQUcsQ0FBRUgsU0FBUztJQUNuQ0UsY0FBYyxDQUFDRSxZQUFZLENBQUUsYUFBYSxFQUFFSixTQUFTLEdBQUcsT0FBTyxHQUFHLE1BQU8sQ0FBQztJQUMxRUUsY0FBYyxDQUFDaEIsU0FBUyxDQUFDQyxNQUFNLENBQUUsV0FBVyxFQUFFLENBQUVhLFNBQVUsQ0FBQztFQUM1RDtBQUNEO0FBRUEsU0FBU0ssaUNBQWlDQSxDQUFDM0ksT0FBTyxFQUFFO0VBQ25ELElBQUl1RixLQUFLLEdBQU90RyxNQUFNLENBQUVlLE9BQU8sQ0FBQzRHLDRCQUE0QixJQUFJLFNBQVUsQ0FBQztFQUUzRSxJQUFLckIsS0FBSyxLQUFLLFNBQVMsRUFBRztJQUMxQixNQUFNcUQsY0FBYyxHQUFHcEUsTUFBTSxDQUFDcUUsc0JBQXNCLElBQUlyRSxNQUFNLENBQUNxRSxzQkFBc0IsQ0FBQ0MsaUJBQWlCLEdBQ3BHdEUsTUFBTSxDQUFDcUUsc0JBQXNCLENBQUNDLGlCQUFpQixHQUMvQyxDQUFDLENBQUM7SUFDTDlJLE9BQU8sR0FBR3BCLE1BQU0sQ0FBQ2MsTUFBTSxDQUFFLENBQUMsQ0FBQyxFQUFFa0osY0FBYyxJQUFJLENBQUMsQ0FBRSxDQUFDO0lBQ25EckQsS0FBSyxHQUFHdEcsTUFBTSxDQUFFZSxPQUFPLENBQUM0Ryw0QkFBNEIsSUFBSSxVQUFXLENBQUM7RUFDckU7RUFFQSxJQUFLckIsS0FBSyxLQUFLLFVBQVUsRUFBRztJQUMzQixPQUFPLElBQUk7RUFDWjtFQUVBLElBQUtBLEtBQUssS0FBSyxRQUFRLEVBQUc7SUFDekIsT0FBT0QsZ0RBQWdELENBQUVDLEtBQUssRUFBRXZGLE9BQVEsQ0FBQztFQUMxRTtFQUVBLE9BQU87SUFDTjRFLFVBQVUsRUFBR2Esd0NBQXdDLENBQUV6RixPQUFPLENBQUMrSSw2QkFBNkIsRUFBRSxTQUFVLENBQUM7SUFDekdsRSxXQUFXLEVBQUVZLHdDQUF3QyxDQUFFekYsT0FBTyxDQUFDZ0oseUJBQXlCLEVBQUUsU0FBVSxDQUFDO0lBQ3JHbEUsV0FBVyxFQUFFZ0IseUNBQXlDLENBQUU5RixPQUFPLENBQUNpSix5QkFBeUIsRUFBRSxLQUFNLENBQUM7SUFDbEdsRSxNQUFNLEVBQU9lLHlDQUF5QyxDQUFFOUYsT0FBTyxDQUFDa0osMEJBQTBCLEVBQUUsS0FBTSxDQUFDO0lBQ25HbEUsT0FBTyxFQUFNZSwwQ0FBMEMsQ0FBRS9GLE9BQU8sQ0FBQ21KLG9CQUFvQixFQUFFLFdBQVksQ0FBQztJQUNwR2xFLE1BQU0sRUFBTztFQUNkLENBQUM7QUFDRjtBQUVBLFNBQVNtRSwrQ0FBK0NBLENBQUNwSixPQUFPLEVBQUU7RUFDakVBLE9BQU8sR0FBR0EsT0FBTyxJQUFJLE9BQU9BLE9BQU8sS0FBSyxRQUFRLEdBQUdBLE9BQU8sR0FBRyxDQUFDLENBQUM7RUFFL0QsSUFBSyxDQUFFb0kseUNBQXlDLENBQUVwSSxPQUFRLENBQUMsRUFBRztJQUM3RCxJQUNDb0YsdUNBQXVDLENBQUVwRixPQUFRLENBQUMsSUFDbEQsTUFBTSxLQUFLZixNQUFNLENBQUVlLE9BQU8sQ0FBQzRHLDRCQUE0QixJQUFJLEVBQUcsQ0FBQyxFQUM5RDtNQUNELE9BQU87UUFDTnlDLFNBQVMsRUFBUSxTQUFTO1FBQzFCQyxlQUFlLEVBQUUsRUFBRTtRQUNuQkMsU0FBUyxFQUFRLEVBQUU7UUFDbkJDLFdBQVcsRUFBTTtNQUNsQixDQUFDO0lBQ0Y7SUFDQSxPQUFPO01BQ05ILFNBQVMsRUFBUSxFQUFFO01BQ25CQyxlQUFlLEVBQUUsRUFBRTtNQUNuQkMsU0FBUyxFQUFRLEVBQUU7TUFDbkJDLFdBQVcsRUFBTTtJQUNsQixDQUFDO0VBQ0Y7RUFFQSxPQUFPO0lBQ05ILFNBQVMsRUFBUXhELGlEQUFpRCxDQUFFN0YsT0FBTyxDQUFDeUosdUJBQXdCLENBQUM7SUFDckdILGVBQWUsRUFBRXpELGlEQUFpRCxDQUFFN0YsT0FBTyxDQUFDMEosbUNBQW9DLENBQUM7SUFDakhILFNBQVMsRUFBUTFELGlEQUFpRCxDQUFFN0YsT0FBTyxDQUFDMkosNkJBQThCLENBQUM7SUFDM0dILFdBQVcsRUFBTTNELGlEQUFpRCxDQUFFN0YsT0FBTyxDQUFDNEosK0JBQWdDO0VBQzdHLENBQUM7QUFDRjtBQUVBLFNBQVNDLG9DQUFvQ0EsQ0FBQ3JLLEtBQUssRUFBRUMsR0FBRyxFQUFFO0VBQ3pELE1BQU1PLE9BQU8sR0FBR3dHLHlDQUF5QyxDQUFFL0csR0FBRyxFQUFFQSxHQUFHLElBQUlBLEdBQUcsQ0FBQ1YsR0FBRyxFQUFFUyxLQUFNLENBQUM7RUFDdkYsTUFBTXNLLFFBQVEsR0FBR25CLGlDQUFpQyxDQUFFM0ksT0FBUSxDQUFDO0VBQzdELE1BQU0rSixNQUFNLEdBQUdYLCtDQUErQyxDQUFFcEosT0FBUSxDQUFDO0VBQ3pFLE1BQU1zSSxTQUFTLEdBQUdGLHlDQUF5QyxDQUFFcEksT0FBUSxDQUFDO0VBQ3RFLE1BQU1nSyxJQUFJLEdBQUd2SyxHQUFHLElBQUlBLEdBQUcsQ0FBQ0UsTUFBTTtFQUU5Qm9JLGlEQUFpRCxDQUFFL0gsT0FBUSxDQUFDO0VBQzVEcUksOENBQThDLENBQUVySSxPQUFRLENBQUM7RUFFekQsSUFBSyxDQUFFZ0ssSUFBSSxJQUFJLENBQUVBLElBQUksQ0FBQzVDLGdCQUFnQixFQUFHO0lBQ3hDO0VBQ0Q7RUFFQSxNQUFNNkMsS0FBSyxHQUFHRCxJQUFJLENBQUM1QyxnQkFBZ0IsQ0FBRSwyREFBNEQsQ0FBQztFQUNsRyxJQUFLLENBQUU2QyxLQUFLLENBQUMvRCxNQUFNLEVBQUc7SUFDckI7RUFDRDtFQUVBK0QsS0FBSyxDQUFDL0osT0FBTyxDQUFFLFVBQVVnSCxJQUFJLEVBQUU7SUFDOUIsSUFBSyxDQUFFQSxJQUFJLElBQUksQ0FBRUEsSUFBSSxDQUFDM0IsS0FBSyxFQUFHO01BQzdCO0lBQ0Q7SUFDQTJCLElBQUksQ0FBQ00sU0FBUyxDQUFDQyxNQUFNLENBQUUsaUNBQWlDLEVBQUVhLFNBQVUsQ0FBQztJQUNyRSxJQUFLLENBQUV3QixRQUFRLEVBQUc7TUFDakI1QyxJQUFJLENBQUMzQixLQUFLLENBQUMyRSxjQUFjLENBQUUsNEJBQTZCLENBQUM7TUFDekRoRCxJQUFJLENBQUMzQixLQUFLLENBQUMyRSxjQUFjLENBQUUsOEJBQStCLENBQUM7TUFDM0RoRCxJQUFJLENBQUMzQixLQUFLLENBQUMyRSxjQUFjLENBQUUsOEJBQStCLENBQUM7TUFDM0RoRCxJQUFJLENBQUMzQixLQUFLLENBQUMyRSxjQUFjLENBQUUsK0JBQWdDLENBQUM7TUFDNURoRCxJQUFJLENBQUMzQixLQUFLLENBQUMyRSxjQUFjLENBQUUseUJBQTBCLENBQUM7TUFDdERoRCxJQUFJLENBQUMzQixLQUFLLENBQUMyRSxjQUFjLENBQUUsNEJBQTZCLENBQUM7SUFDMUQsQ0FBQyxNQUFNO01BQ05oRCxJQUFJLENBQUMzQixLQUFLLENBQUM0RSxXQUFXLENBQUUsNEJBQTRCLEVBQUVMLFFBQVEsQ0FBQ2xGLFVBQVcsQ0FBQztNQUMzRXNDLElBQUksQ0FBQzNCLEtBQUssQ0FBQzRFLFdBQVcsQ0FBRSw4QkFBOEIsRUFBRUwsUUFBUSxDQUFDakYsV0FBWSxDQUFDO01BQzlFcUMsSUFBSSxDQUFDM0IsS0FBSyxDQUFDNEUsV0FBVyxDQUFFLDhCQUE4QixFQUFFTCxRQUFRLENBQUNoRixXQUFZLENBQUM7TUFDOUVvQyxJQUFJLENBQUMzQixLQUFLLENBQUM0RSxXQUFXLENBQUUsK0JBQStCLEVBQUVMLFFBQVEsQ0FBQy9FLE1BQU8sQ0FBQztNQUMxRW1DLElBQUksQ0FBQzNCLEtBQUssQ0FBQzRFLFdBQVcsQ0FBRSx5QkFBeUIsRUFBRUwsUUFBUSxDQUFDOUUsT0FBUSxDQUFDO01BQ3JFa0MsSUFBSSxDQUFDM0IsS0FBSyxDQUFDNEUsV0FBVyxDQUFFLDRCQUE0QixFQUFFTCxRQUFRLENBQUM3RSxNQUFPLENBQUM7SUFDeEU7SUFFQSxJQUFLOEUsTUFBTSxDQUFDVixTQUFTLEVBQUc7TUFDdkJuQyxJQUFJLENBQUMzQixLQUFLLENBQUM0RSxXQUFXLENBQUUseUJBQXlCLEVBQUVKLE1BQU0sQ0FBQ1YsU0FBVSxDQUFDO01BQ3JFbkMsSUFBSSxDQUFDM0IsS0FBSyxDQUFDNEUsV0FBVyxDQUFFLGtDQUFrQyxFQUFFSixNQUFNLENBQUNWLFNBQVUsQ0FBQztJQUMvRSxDQUFDLE1BQU07TUFDTm5DLElBQUksQ0FBQzNCLEtBQUssQ0FBQzJFLGNBQWMsQ0FBRSx5QkFBMEIsQ0FBQztNQUN0RGhELElBQUksQ0FBQzNCLEtBQUssQ0FBQzJFLGNBQWMsQ0FBRSxrQ0FBbUMsQ0FBQztJQUNoRTtJQUVBLElBQUtILE1BQU0sQ0FBQ1QsZUFBZSxFQUFHO01BQzdCcEMsSUFBSSxDQUFDM0IsS0FBSyxDQUFDNEUsV0FBVyxDQUFFLG9DQUFvQyxFQUFFSixNQUFNLENBQUNULGVBQWdCLENBQUM7TUFDdEZwQyxJQUFJLENBQUMzQixLQUFLLENBQUM0RSxXQUFXLENBQUUsOEJBQThCLEVBQUVKLE1BQU0sQ0FBQ1QsZUFBZ0IsQ0FBQztJQUNqRixDQUFDLE1BQU07TUFDTnBDLElBQUksQ0FBQzNCLEtBQUssQ0FBQzJFLGNBQWMsQ0FBRSxvQ0FBcUMsQ0FBQztNQUNqRWhELElBQUksQ0FBQzNCLEtBQUssQ0FBQzJFLGNBQWMsQ0FBRSw4QkFBK0IsQ0FBQztJQUM1RDtJQUVBLElBQUtILE1BQU0sQ0FBQ1IsU0FBUyxFQUFHO01BQ3ZCckMsSUFBSSxDQUFDM0IsS0FBSyxDQUFDNEUsV0FBVyxDQUFFLDhCQUE4QixFQUFFSixNQUFNLENBQUNSLFNBQVUsQ0FBQztJQUMzRSxDQUFDLE1BQU07TUFDTnJDLElBQUksQ0FBQzNCLEtBQUssQ0FBQzJFLGNBQWMsQ0FBRSw4QkFBK0IsQ0FBQztJQUM1RDtJQUVBLElBQUtILE1BQU0sQ0FBQ1AsV0FBVyxFQUFHO01BQ3pCdEMsSUFBSSxDQUFDM0IsS0FBSyxDQUFDNEUsV0FBVyxDQUFFLGdDQUFnQyxFQUFFSixNQUFNLENBQUNQLFdBQVksQ0FBQztNQUM5RXRDLElBQUksQ0FBQzNCLEtBQUssQ0FBQzRFLFdBQVcsQ0FBRSxzQ0FBc0MsRUFBRUosTUFBTSxDQUFDUCxXQUFZLENBQUM7SUFDckYsQ0FBQyxNQUFNO01BQ050QyxJQUFJLENBQUMzQixLQUFLLENBQUMyRSxjQUFjLENBQUUsZ0NBQWlDLENBQUM7TUFDN0RoRCxJQUFJLENBQUMzQixLQUFLLENBQUMyRSxjQUFjLENBQUUsc0NBQXVDLENBQUM7SUFDcEU7RUFDRCxDQUFFLENBQUM7QUFDSjtBQUVBLFNBQVNFLG9DQUFvQ0EsQ0FBQSxFQUFHO0VBQy9DLE9BQU81RixNQUFNLENBQUNxRSxzQkFBc0IsSUFBSSxDQUFDLENBQUM7QUFDM0M7QUFFQSxTQUFTd0IsdUNBQXVDQSxDQUFBLEVBQUc7RUFDbEQsTUFBTUMsSUFBSSxHQUFHRixvQ0FBb0MsQ0FBQyxDQUFDO0VBQ25ELE9BQU9FLElBQUksQ0FBQ0Msa0JBQWtCLElBQUksT0FBT0QsSUFBSSxDQUFDQyxrQkFBa0IsS0FBSyxRQUFRLEdBQUdELElBQUksQ0FBQ0Msa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO0FBQzdHO0FBRUEsU0FBU0MsMkNBQTJDQSxDQUFBLEVBQUc7RUFDdEQsT0FBTyxDQUNOLHNDQUFzQyxFQUN0QyxrQ0FBa0MsRUFDbEMsa0NBQWtDLEVBQ2xDLG1DQUFtQyxFQUNuQyxzQ0FBc0MsRUFDdEMsd0NBQXdDLEVBQ3hDLGdDQUFnQyxFQUNoQyw0Q0FBNEMsRUFDNUMsc0NBQXNDLEVBQ3RDLHdDQUF3QyxFQUN4Qyw2Q0FBNkMsRUFDN0MsdUNBQXVDLEVBQ3ZDLHlDQUF5QyxFQUN6QyxtREFBbUQsRUFDbkQsNkNBQTZDLEVBQzdDLCtDQUErQyxFQUMvQyx1REFBdUQsRUFDdkQsaURBQWlELEVBQ2pELG1EQUFtRCxFQUNuRCw2REFBNkQsRUFDN0QsdURBQXVELEVBQ3ZELHlEQUF5RCxDQUN6RDtBQUNGO0FBRUEsU0FBU0MsK0NBQStDQSxDQUFBLEVBQUc7RUFDMUQsTUFBTUgsSUFBSSxHQUFHRixvQ0FBb0MsQ0FBQyxDQUFDO0VBQ25ELE1BQU1NLFNBQVMsR0FBR0osSUFBSSxDQUFDSywwQkFBMEIsSUFBSSxPQUFPTCxJQUFJLENBQUNLLDBCQUEwQixLQUFLLFFBQVEsR0FDckdMLElBQUksQ0FBQ0ssMEJBQTBCLEdBQy9CLENBQUMsQ0FBQztFQUVMLE9BQU8vTCxNQUFNLENBQUNjLE1BQU0sQ0FBRTtJQUNyQmtMLG9DQUFvQyxFQUFTLFNBQVM7SUFDdERDLGdDQUFnQyxFQUFhLFNBQVM7SUFDdERDLGdDQUFnQyxFQUFhLEtBQUs7SUFDbERDLGlDQUFpQyxFQUFZLEtBQUs7SUFDbERDLG9DQUFvQyxFQUFTLE1BQU07SUFDbkRDLHNDQUFzQyxFQUFPLE1BQU07SUFDbkRDLDhCQUE4QixFQUFlLFNBQVM7SUFDdERDLDBDQUEwQyxFQUFHLFNBQVM7SUFDdERDLG9DQUFvQyxFQUFTLFNBQVM7SUFDdERDLHNDQUFzQyxFQUFPLFNBQVM7SUFDdERDLDJDQUEyQyxFQUFFLFNBQVM7SUFDdERDLHFDQUFxQyxFQUFRLFNBQVM7SUFDdERDLHVDQUF1QyxFQUFNLFNBQVM7SUFDdERDLGlEQUFpRCxFQUFFLFNBQVM7SUFDNURDLDJDQUEyQyxFQUFFLFNBQVM7SUFDdERDLDZDQUE2QyxFQUFFLFNBQVM7SUFDeERDLHFEQUFxRCxFQUFFLFNBQVM7SUFDaEVDLCtDQUErQyxFQUFFLFNBQVM7SUFDMURDLGlEQUFpRCxFQUFFLFNBQVM7SUFDNURDLDJEQUEyRCxFQUFFLFNBQVM7SUFDdEVDLHFEQUFxRCxFQUFFLFNBQVM7SUFDaEVDLHVEQUF1RCxFQUFFO0VBQzFELENBQUMsRUFBRXZCLFNBQVUsQ0FBQztBQUNmO0FBRUEsU0FBU3dCLCtDQUErQ0EsQ0FBQ3pNLEdBQUcsRUFBRVYsR0FBRyxFQUFFUyxLQUFLLEVBQUU7RUFDekUsTUFBTThLLElBQUksR0FBR0Ysb0NBQW9DLENBQUMsQ0FBQztFQUNuRCxJQUFJcEssT0FBTyxHQUFHc0ssSUFBSSxDQUFDNkIsaUJBQWlCLElBQUksT0FBTzdCLElBQUksQ0FBQzZCLGlCQUFpQixLQUFLLFFBQVEsR0FDL0V2TixNQUFNLENBQUNjLE1BQU0sQ0FBRSxDQUFDLENBQUMsRUFBRTRLLElBQUksQ0FBQzZCLGlCQUFrQixDQUFDLEdBQzNDLENBQUMsQ0FBQztFQUVMLElBQUszSCxNQUFNLENBQUNpQyxxQkFBcUIsSUFBSSxPQUFPakMsTUFBTSxDQUFDaUMscUJBQXFCLENBQUNDLE9BQU8sS0FBSyxVQUFVLEVBQUc7SUFDakcxRyxPQUFPLEdBQUdwQixNQUFNLENBQUNjLE1BQU0sQ0FBRU0sT0FBTyxFQUFFd0UsTUFBTSxDQUFDaUMscUJBQXFCLENBQUNDLE9BQU8sQ0FBRSxRQUFTLENBQUMsSUFBSSxDQUFDLENBQUUsQ0FBQztFQUMzRjtFQUVBLElBQUtqSCxHQUFHLElBQUlBLEdBQUcsQ0FBQ08sT0FBTyxJQUFJLE9BQU9QLEdBQUcsQ0FBQ08sT0FBTyxLQUFLLFFBQVEsRUFBRztJQUM1REEsT0FBTyxHQUFHcEIsTUFBTSxDQUFDYyxNQUFNLENBQUVNLE9BQU8sRUFBRVAsR0FBRyxDQUFDTyxPQUFRLENBQUM7RUFDaEQ7RUFDQSxJQUFLakIsR0FBRyxFQUFHO0lBQ1ZpQixPQUFPLENBQUNmLE1BQU0sQ0FBRUYsR0FBSSxDQUFDLENBQUMsR0FBR1MsS0FBSztFQUMvQjtFQUNBLElBQUssQ0FBRVEsT0FBTyxDQUFDb00sa0JBQWtCLEVBQUc7SUFDbkNwTSxPQUFPLENBQUNvTSxrQkFBa0IsR0FBRyxnQkFBZ0I7RUFDOUM7RUFFQSxPQUFPcE0sT0FBTztBQUNmO0FBRUEsU0FBU3FNLDRDQUE0Q0EsQ0FBQ3JNLE9BQU8sRUFBRTtFQUM5REEsT0FBTyxHQUFHQSxPQUFPLElBQUksT0FBT0EsT0FBTyxLQUFLLFFBQVEsR0FBR0EsT0FBTyxHQUFHLENBQUMsQ0FBQztFQUMvRCxNQUFNdUYsS0FBSyxHQUFHdEcsTUFBTSxDQUFFZSxPQUFPLENBQUNvTSxrQkFBa0IsSUFBSSxnQkFBaUIsQ0FBQztFQUN0RSxNQUFNNUcsT0FBTyxHQUFHNkUsdUNBQXVDLENBQUMsQ0FBQztFQUN6RCxNQUFNaUMsTUFBTSxHQUFHOUcsT0FBTyxDQUFDRCxLQUFLLENBQUMsSUFBSUMsT0FBTyxDQUFDK0csY0FBYyxJQUFJLENBQUMsQ0FBQztFQUM3RCxNQUFNQyxRQUFRLEdBQUcvQiwrQ0FBK0MsQ0FBQyxDQUFDO0VBRWxFLElBQUssUUFBUSxLQUFLbEYsS0FBSyxFQUFHO0lBQ3pCLE9BQU8rRyxNQUFNLENBQUN6TCxRQUFRLElBQUksT0FBT3lMLE1BQU0sQ0FBQ3pMLFFBQVEsS0FBSyxRQUFRLEdBQUdqQyxNQUFNLENBQUNjLE1BQU0sQ0FBRSxDQUFDLENBQUMsRUFBRTRNLE1BQU0sQ0FBQ3pMLFFBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUMxRztFQUVBLE9BQU87SUFDTiw0QkFBNEIsRUFBWTRFLHdDQUF3QyxDQUFFekYsT0FBTyxDQUFDNEssb0NBQW9DLEVBQUU0QixRQUFRLENBQUM1QixvQ0FBcUMsQ0FBQztJQUMvSyw4QkFBOEIsRUFBVW5GLHdDQUF3QyxDQUFFekYsT0FBTyxDQUFDNkssZ0NBQWdDLEVBQUUyQixRQUFRLENBQUMzQixnQ0FBaUMsQ0FBQztJQUN2Syw4QkFBOEIsRUFBVS9FLHlDQUF5QyxDQUFFOUYsT0FBTyxDQUFDOEssZ0NBQWdDLEVBQUUwQixRQUFRLENBQUMxQixnQ0FBaUMsQ0FBQztJQUN4SywrQkFBK0IsRUFBU2hGLHlDQUF5QyxDQUFFOUYsT0FBTyxDQUFDK0ssaUNBQWlDLEVBQUV5QixRQUFRLENBQUN6QixpQ0FBa0MsQ0FBQztJQUMxSyx5QkFBeUIsRUFBZWpGLHlDQUF5QyxDQUFFOUYsT0FBTyxDQUFDZ0wsb0NBQW9DLEVBQUV3QixRQUFRLENBQUN4QixvQ0FBcUMsQ0FBQyxHQUFHLEdBQUcsR0FBR2xGLHlDQUF5QyxDQUFFOUYsT0FBTyxDQUFDaUwsc0NBQXNDLEVBQUV1QixRQUFRLENBQUN2QixzQ0FBdUMsQ0FBQztJQUNyVSw0QkFBNEIsRUFBWSxxQ0FBcUM7SUFDN0UseUJBQXlCLEVBQWV4Rix3Q0FBd0MsQ0FBRXpGLE9BQU8sQ0FBQ2tMLDhCQUE4QixFQUFFc0IsUUFBUSxDQUFDdEIsOEJBQStCLENBQUM7SUFDbkssa0NBQWtDLEVBQU16Rix3Q0FBd0MsQ0FBRXpGLE9BQU8sQ0FBQ2tMLDhCQUE4QixFQUFFc0IsUUFBUSxDQUFDdEIsOEJBQStCLENBQUM7SUFDbkssK0JBQStCLEVBQVMsU0FBUztJQUNqRCxvQ0FBb0MsRUFBSXpGLHdDQUF3QyxDQUFFekYsT0FBTyxDQUFDbUwsMENBQTBDLEVBQUVxQixRQUFRLENBQUNyQiwwQ0FBMkMsQ0FBQztJQUMzTCw4QkFBOEIsRUFBVTFGLHdDQUF3QyxDQUFFekYsT0FBTyxDQUFDbUwsMENBQTBDLEVBQUVxQixRQUFRLENBQUNyQiwwQ0FBMkMsQ0FBQztJQUMzTCw4QkFBOEIsRUFBVTFGLHdDQUF3QyxDQUFFekYsT0FBTyxDQUFDb0wsb0NBQW9DLEVBQUVvQixRQUFRLENBQUNwQixvQ0FBcUMsQ0FBQztJQUMvSyxnQ0FBZ0MsRUFBUTNGLHdDQUF3QyxDQUFFekYsT0FBTyxDQUFDcUwsc0NBQXNDLEVBQUVtQixRQUFRLENBQUNuQixzQ0FBdUMsQ0FBQztJQUNuTCxzQ0FBc0MsRUFBRTVGLHdDQUF3QyxDQUFFekYsT0FBTyxDQUFDcUwsc0NBQXNDLEVBQUVtQixRQUFRLENBQUNuQixzQ0FBdUMsQ0FBQztJQUNuTCxzQ0FBc0MsRUFBRSxTQUFTO0lBQ2pELHNDQUFzQyxFQUFFLFNBQVM7SUFDakQsa0NBQWtDLEVBQU0sb0JBQW9CO0lBQzVELHFDQUFxQyxFQUFHNUYsd0NBQXdDLENBQUV6RixPQUFPLENBQUNzTCwyQ0FBMkMsRUFBRWtCLFFBQVEsQ0FBQ2xCLDJDQUE0QyxDQUFDO0lBQzdMLHlDQUF5QyxFQUFFN0Ysd0NBQXdDLENBQUV6RixPQUFPLENBQUNzTCwyQ0FBMkMsRUFBRWtCLFFBQVEsQ0FBQ2xCLDJDQUE0QyxDQUFDO0lBQ2hNLGlDQUFpQyxFQUFPN0Ysd0NBQXdDLENBQUV6RixPQUFPLENBQUN3TCx1Q0FBdUMsRUFBRWdCLFFBQVEsQ0FBQ2hCLHVDQUF3QyxDQUFDO0lBQ3JMLCtCQUErQixFQUFTL0Ysd0NBQXdDLENBQUV6RixPQUFPLENBQUN1TCxxQ0FBcUMsRUFBRWlCLFFBQVEsQ0FBQ2pCLHFDQUFzQyxDQUFDO0lBQ2pMLG1DQUFtQyxFQUFLOUYsd0NBQXdDLENBQUV6RixPQUFPLENBQUN1TCxxQ0FBcUMsRUFBRWlCLFFBQVEsQ0FBQ2pCLHFDQUFzQyxDQUFDO0lBQ2pMLDJDQUEyQyxFQUFFOUYsd0NBQXdDLENBQUV6RixPQUFPLENBQUN5TCxpREFBaUQsRUFBRWUsUUFBUSxDQUFDZixpREFBa0QsQ0FBQztJQUM5TSx1Q0FBdUMsRUFBRWhHLHdDQUF3QyxDQUFFekYsT0FBTyxDQUFDMkwsNkNBQTZDLEVBQUVhLFFBQVEsQ0FBQ2IsNkNBQThDLENBQUM7SUFDbE0scUNBQXFDLEVBQUdsRyx3Q0FBd0MsQ0FBRXpGLE9BQU8sQ0FBQzBMLDJDQUEyQyxFQUFFYyxRQUFRLENBQUNkLDJDQUE0QyxDQUFDO0lBQzdMLHlDQUF5QyxFQUFFLFNBQVM7SUFDcEQsa0NBQWtDLEVBQU0sU0FBUztJQUNqRCxnQ0FBZ0MsRUFBUSxTQUFTO0lBQ2pELDJDQUEyQyxFQUFFakcsd0NBQXdDLENBQUV6RixPQUFPLENBQUM0TCxxREFBcUQsRUFBRVksUUFBUSxDQUFDWixxREFBc0QsQ0FBQztJQUN0Tix1Q0FBdUMsRUFBRW5HLHdDQUF3QyxDQUFFekYsT0FBTyxDQUFDOEwsaURBQWlELEVBQUVVLFFBQVEsQ0FBQ1YsaURBQWtELENBQUM7SUFDMU0scUNBQXFDLEVBQUdyRyx3Q0FBd0MsQ0FBRXpGLE9BQU8sQ0FBQzZMLCtDQUErQyxFQUFFVyxRQUFRLENBQUNYLCtDQUFnRCxDQUFDO0lBQ3JNLHFDQUFxQyxFQUFHLDBCQUEwQjtJQUNsRSxpREFBaUQsRUFBRXBHLHdDQUF3QyxDQUFFekYsT0FBTyxDQUFDK0wsMkRBQTJELEVBQUVTLFFBQVEsQ0FBQ1QsMkRBQTRELENBQUM7SUFDeE8sNkNBQTZDLEVBQUV0Ryx3Q0FBd0MsQ0FBRXpGLE9BQU8sQ0FBQ2lNLHVEQUF1RCxFQUFFTyxRQUFRLENBQUNQLHVEQUF3RCxDQUFDO0lBQzVOLDJDQUEyQyxFQUFFeEcsd0NBQXdDLENBQUV6RixPQUFPLENBQUNnTSxxREFBcUQsRUFBRVEsUUFBUSxDQUFDUixxREFBc0QsQ0FBQztJQUN0TiwyQ0FBMkMsRUFBRSwwQkFBMEI7SUFDdkUsK0NBQStDLEVBQUV2Ryx3Q0FBd0MsQ0FBRXpGLE9BQU8sQ0FBQzJMLDZDQUE2QyxFQUFFYSxRQUFRLENBQUNiLDZDQUE4QyxDQUFDO0lBQzFNLDhCQUE4QixFQUFVO0VBQ3pDLENBQUM7QUFDRjtBQUVBLFNBQVNjLDRDQUE0Q0EsQ0FBQ3pNLE9BQU8sRUFBRTtFQUM5RCxNQUFNc0ssSUFBSSxHQUFHRixvQ0FBb0MsQ0FBQyxDQUFDO0VBQ25ELE1BQU1NLFNBQVMsR0FBR2dDLEtBQUssQ0FBQ0MsT0FBTyxDQUFFckMsSUFBSSxDQUFDc0Msd0JBQXlCLENBQUMsR0FBR3RDLElBQUksQ0FBQ3NDLHdCQUF3QixHQUFHLEVBQUU7RUFDckcsTUFBTTNNLElBQUksR0FBRyxFQUFFO0VBQ2YsTUFBTXVGLE9BQU8sR0FBRzZFLHVDQUF1QyxDQUFDLENBQUM7RUFFekQsSUFBS0ssU0FBUyxDQUFDeEUsTUFBTSxFQUFHO0lBQ3ZCLE9BQU93RSxTQUFTO0VBQ2pCO0VBRUE5TCxNQUFNLENBQUNxQixJQUFJLENBQUV1RixPQUFRLENBQUMsQ0FBQ3RGLE9BQU8sQ0FBRSxVQUFVMk0sVUFBVSxFQUFFO0lBQ3JELE1BQU1QLE1BQU0sR0FBRzlHLE9BQU8sQ0FBQ3FILFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QyxNQUFNaE0sUUFBUSxHQUFHeUwsTUFBTSxDQUFDekwsUUFBUSxJQUFJLE9BQU95TCxNQUFNLENBQUN6TCxRQUFRLEtBQUssUUFBUSxHQUFHeUwsTUFBTSxDQUFDekwsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUU5RmpDLE1BQU0sQ0FBQ3FCLElBQUksQ0FBRVksUUFBUyxDQUFDLENBQUNYLE9BQU8sQ0FBRSxVQUFVNE0sUUFBUSxFQUFFO01BQ3BELElBQUs3TSxJQUFJLENBQUM4RyxPQUFPLENBQUUrRixRQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRztRQUN0QzdNLElBQUksQ0FBQzhNLElBQUksQ0FBRUQsUUFBUyxDQUFDO01BQ3RCO0lBQ0QsQ0FBRSxDQUFDO0VBQ0osQ0FBRSxDQUFDO0VBRUhsTyxNQUFNLENBQUNxQixJQUFJLENBQUVvTSw0Q0FBNEMsQ0FBRXpOLE1BQU0sQ0FBQ2MsTUFBTSxDQUFFLENBQUMsQ0FBQyxFQUFFTSxPQUFPLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFBRW9NLGtCQUFrQixFQUFFO0VBQVMsQ0FBRSxDQUFFLENBQUUsQ0FBQyxDQUFDbE0sT0FBTyxDQUFFLFVBQVU0TSxRQUFRLEVBQUU7SUFDaEssSUFBSzdNLElBQUksQ0FBQzhHLE9BQU8sQ0FBRStGLFFBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFHO01BQ3RDN00sSUFBSSxDQUFDOE0sSUFBSSxDQUFFRCxRQUFTLENBQUM7SUFDdEI7RUFDRCxDQUFFLENBQUM7RUFFSCxPQUFPN00sSUFBSTtBQUNaO0FBRUEsU0FBUytNLHlDQUF5Q0EsQ0FBQ2hOLE9BQU8sRUFBRTtFQUMzRCxNQUFNc0ksU0FBUyxHQUFHLFFBQVEsS0FBS3JKLE1BQU0sQ0FBRWUsT0FBTyxJQUFJQSxPQUFPLENBQUNvTSxrQkFBa0IsR0FBR3BNLE9BQU8sQ0FBQ29NLGtCQUFrQixHQUFHLEVBQUcsQ0FBQztFQUNoSCxNQUFNN0QsU0FBUyxHQUFHOUQsUUFBUSxDQUFDdEYsYUFBYSxDQUFFLDZDQUE4QyxDQUFDO0VBRXpGNkgsMkNBQTJDLENBQUUsb0JBQW9CLEVBQUVoSCxPQUFPLENBQUNvTSxrQkFBa0IsSUFBSSxnQkFBaUIsQ0FBQztFQUVuSDNILFFBQVEsQ0FBQzJDLGdCQUFnQixDQUFFLDZDQUE4QyxDQUFDLENBQUNsSCxPQUFPLENBQUUsVUFBVStHLEdBQUcsRUFBRTtJQUNsR0EsR0FBRyxDQUFDd0IsTUFBTSxHQUFHLENBQUVILFNBQVM7SUFDeEJyQixHQUFHLENBQUN5QixZQUFZLENBQUUsYUFBYSxFQUFFSixTQUFTLEdBQUcsT0FBTyxHQUFHLE1BQU8sQ0FBQztJQUMvRHJCLEdBQUcsQ0FBQ08sU0FBUyxDQUFDQyxNQUFNLENBQUUsV0FBVyxFQUFFLENBQUVhLFNBQVUsQ0FBQztFQUNqRCxDQUFFLENBQUM7RUFFSCxJQUFLQyxTQUFTLEVBQUc7SUFDaEJBLFNBQVMsQ0FBQ0UsTUFBTSxHQUFHLENBQUVILFNBQVM7SUFDOUJDLFNBQVMsQ0FBQ0csWUFBWSxDQUFFLGFBQWEsRUFBRUosU0FBUyxHQUFHLE9BQU8sR0FBRyxNQUFPLENBQUM7SUFDckVDLFNBQVMsQ0FBQ2YsU0FBUyxDQUFDQyxNQUFNLENBQUUsV0FBVyxFQUFFLENBQUVhLFNBQVUsQ0FBQztFQUN2RDtBQUNEO0FBRUEsU0FBU3BILGlDQUFpQ0EsQ0FBQzFCLEtBQUssRUFBRUMsR0FBRyxFQUFFO0VBQ3RELE1BQU1PLE9BQU8sR0FBR2tNLCtDQUErQyxDQUFFek0sR0FBRyxFQUFFQSxHQUFHLElBQUlBLEdBQUcsQ0FBQ1YsR0FBRyxFQUFFUyxLQUFNLENBQUM7RUFDN0YsTUFBTStGLEtBQUssR0FBR3RHLE1BQU0sQ0FBRWUsT0FBTyxDQUFDb00sa0JBQWtCLElBQUksZ0JBQWlCLENBQUM7RUFDdEUsTUFBTTVHLE9BQU8sR0FBRzZFLHVDQUF1QyxDQUFDLENBQUM7RUFDekQsTUFBTWlDLE1BQU0sR0FBRzlHLE9BQU8sQ0FBQ0QsS0FBSyxDQUFDLElBQUlDLE9BQU8sQ0FBQytHLGNBQWMsSUFBSSxDQUFDLENBQUM7RUFDN0QsTUFBTTFMLFFBQVEsR0FBR3dMLDRDQUE0QyxDQUFFck0sT0FBUSxDQUFDO0VBQ3hFLE1BQU1nSyxJQUFJLEdBQUt2SyxHQUFHLElBQUlBLEdBQUcsQ0FBQ0UsTUFBTSxJQUFNOEUsUUFBUSxDQUFDckYsY0FBYyxDQUFFLHVCQUF3QixDQUFDLElBQUlxRixRQUFRO0VBQ3BHLE1BQU13SSxhQUFhLEdBQUcsRUFBRTtFQUN4QixNQUFNQyxZQUFZLEdBQUdULDRDQUE0QyxDQUFFek0sT0FBUSxDQUFDO0VBRTVFZ04seUNBQXlDLENBQUVoTixPQUFRLENBQUM7RUFFcERwQixNQUFNLENBQUNxQixJQUFJLENBQUV1RixPQUFRLENBQUMsQ0FBQ3RGLE9BQU8sQ0FBRSxVQUFVMk0sVUFBVSxFQUFFO0lBQ3JELE1BQU1NLFVBQVUsR0FBRzNILE9BQU8sQ0FBQ3FILFVBQVUsQ0FBQyxJQUFJckgsT0FBTyxDQUFDcUgsVUFBVSxDQUFDLENBQUNPLFdBQVcsR0FBR25PLE1BQU0sQ0FBRXVHLE9BQU8sQ0FBQ3FILFVBQVUsQ0FBQyxDQUFDTyxXQUFZLENBQUMsR0FBRyxFQUFFO0lBQzFILElBQUtELFVBQVUsSUFBSUYsYUFBYSxDQUFDbEcsT0FBTyxDQUFFb0csVUFBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUc7TUFDL0RGLGFBQWEsQ0FBQ0YsSUFBSSxDQUFFSSxVQUFXLENBQUM7SUFDakM7RUFDRCxDQUFFLENBQUM7RUFFSCxJQUFLLENBQUVuRCxJQUFJLElBQUksQ0FBRUEsSUFBSSxDQUFDNUMsZ0JBQWdCLEVBQUc7SUFDeEM7RUFDRDtFQUVBLE1BQU0zRSxRQUFRLEdBQUcsOEdBQThHO0VBQy9ILE1BQU13SCxLQUFLLEdBQUcsRUFBRTtFQUNoQixJQUFLRCxJQUFJLENBQUNoRyxPQUFPLElBQUlnRyxJQUFJLENBQUNoRyxPQUFPLENBQUV2QixRQUFTLENBQUMsRUFBRztJQUMvQ3dILEtBQUssQ0FBQzhDLElBQUksQ0FBRS9DLElBQUssQ0FBQztFQUNuQjtFQUNBQSxJQUFJLENBQUM1QyxnQkFBZ0IsQ0FBRTNFLFFBQVMsQ0FBQyxDQUFDdkMsT0FBTyxDQUFFLFVBQVVnSCxJQUFJLEVBQUU7SUFDMUQrQyxLQUFLLENBQUM4QyxJQUFJLENBQUU3RixJQUFLLENBQUM7RUFDbkIsQ0FBRSxDQUFDO0VBRUgrQyxLQUFLLENBQUMvSixPQUFPLENBQUUsVUFBVWdILElBQUksRUFBRTtJQUM5QixJQUFLLENBQUVBLElBQUksSUFBSSxDQUFFQSxJQUFJLENBQUMzQixLQUFLLEVBQUc7TUFDN0I7SUFDRDtJQUNBMEgsYUFBYSxDQUFDL00sT0FBTyxDQUFFLFVBQVVpTixVQUFVLEVBQUU7TUFDNUNqRyxJQUFJLENBQUNNLFNBQVMsQ0FBQzZGLE1BQU0sQ0FBRUYsVUFBVyxDQUFDO0lBQ3BDLENBQUUsQ0FBQztJQUNILElBQUtiLE1BQU0sQ0FBQ2MsV0FBVyxFQUFHO01BQ3pCbEcsSUFBSSxDQUFDTSxTQUFTLENBQUM4RixHQUFHLENBQUVyTyxNQUFNLENBQUVxTixNQUFNLENBQUNjLFdBQVksQ0FBRSxDQUFDO0lBQ25EO0lBQ0FsRyxJQUFJLENBQUNNLFNBQVMsQ0FBQ0MsTUFBTSxDQUFFLGlDQUFpQyxFQUFFLFFBQVEsS0FBS2xDLEtBQU0sQ0FBQztJQUU5RTJILFlBQVksQ0FBQ2hOLE9BQU8sQ0FBRSxVQUFVcU4sT0FBTyxFQUFFO01BQ3hDckcsSUFBSSxDQUFDM0IsS0FBSyxDQUFDMkUsY0FBYyxDQUFFcUQsT0FBUSxDQUFDO0lBQ3JDLENBQUUsQ0FBQztJQUNIM08sTUFBTSxDQUFDcUIsSUFBSSxDQUFFWSxRQUFTLENBQUMsQ0FBQ1gsT0FBTyxDQUFFLFVBQVVxTixPQUFPLEVBQUU7TUFDbkRyRyxJQUFJLENBQUMzQixLQUFLLENBQUM0RSxXQUFXLENBQUVvRCxPQUFPLEVBQUUxTSxRQUFRLENBQUMwTSxPQUFPLENBQUUsQ0FBQztJQUNyRCxDQUFFLENBQUM7RUFDSixDQUFFLENBQUM7QUFDSjtBQUVBLENBQ0Msb0JBQW9CLEVBQ3BCLHNDQUFzQyxFQUN0QyxrQ0FBa0MsRUFDbEMsa0NBQWtDLEVBQ2xDLG1DQUFtQyxFQUNuQyxzQ0FBc0MsRUFDdEMsd0NBQXdDLEVBQ3hDLGdDQUFnQyxFQUNoQyw0Q0FBNEMsRUFDNUMsc0NBQXNDLEVBQ3RDLHdDQUF3QyxFQUN4Qyw2Q0FBNkMsRUFDN0MsdUNBQXVDLEVBQ3ZDLHlDQUF5QyxFQUN6QyxtREFBbUQsRUFDbkQsNkNBQTZDLEVBQzdDLCtDQUErQyxFQUMvQyx1REFBdUQsRUFDdkQsaURBQWlELEVBQ2pELG1EQUFtRCxFQUNuRCw2REFBNkQsRUFDN0QsdURBQXVELEVBQ3ZELHlEQUF5RCxDQUN6RCxDQUFDck4sT0FBTyxDQUFFLFVBQVVuQixHQUFHLEVBQUU7RUFDekJMLHlCQUF5QixDQUFDSSxRQUFRLENBQUVDLEdBQUcsRUFBRSxVQUFVUyxLQUFLLEVBQUVDLEdBQUcsRUFBRTtJQUM5RHlCLGlDQUFpQyxDQUFFMUIsS0FBSyxFQUFFWixNQUFNLENBQUNjLE1BQU0sQ0FBRSxDQUFDLENBQUMsRUFBRUQsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFO01BQUVWLEdBQUcsRUFBRUE7SUFBSSxDQUFFLENBQUUsQ0FBQztFQUN6RixDQUFFLENBQUM7QUFDSixDQUFFLENBQUM7QUFFSCxTQUFTeU8sc0RBQXNEQSxDQUFBLEVBQUc7RUFDakUsTUFBTXhOLE9BQU8sR0FBR2tNLCtDQUErQyxDQUFDLENBQUM7RUFDakVjLHlDQUF5QyxDQUFFaE4sT0FBUSxDQUFDO0VBQ3BEa0IsaUNBQWlDLENBQUUsSUFBSSxFQUFFO0lBQUVELE1BQU0sRUFBRTtFQUFvQixDQUFFLENBQUM7QUFDM0U7QUFFQXVNLHNEQUFzRCxDQUFDLENBQUM7QUFDeEQvSSxRQUFRLENBQUNyRCxnQkFBZ0IsQ0FBRSxrQkFBa0IsRUFBRW9NLHNEQUF1RCxDQUFDOztBQUd2RztBQUNBOU8seUJBQXlCLENBQUNJLFFBQVEsQ0FBRSxvQkFBb0IsRUFBRSxVQUFVVSxLQUFLLEVBQUVDLEdBQUcsRUFBRTtFQUMvRSxNQUFNdUssSUFBSSxHQUFJdkssR0FBRyxJQUFJQSxHQUFHLENBQUNFLE1BQU0sSUFBSzhFLFFBQVEsQ0FBQ3JGLGNBQWMsQ0FBRSx1QkFBd0IsQ0FBQyxJQUFJcUYsUUFBUTtFQUNsRyxJQUFLLENBQUV1RixJQUFJLElBQUksQ0FBRUEsSUFBSSxDQUFDNUMsZ0JBQWdCLEVBQUc7SUFDeEM7RUFDRDtFQUVBLElBQUtlLDhDQUE4QyxDQUFFMUksR0FBSSxDQUFDLEVBQUc7SUFDNUQsTUFBTXdJLGVBQWUsR0FBR04sNkNBQTZDLENBQUMsQ0FBQztJQUN2RSxJQUFLLFFBQVEsS0FBSzFJLE1BQU0sQ0FBRWdKLGVBQWUsQ0FBQ3JCLDRCQUE0QixJQUFJLEVBQUcsQ0FBQyxFQUFHO01BQ2hGcUIsZUFBZSxDQUFDNUMsa0JBQWtCLEdBQUc3RixLQUFLO01BQzFDdUksaURBQWlELENBQUVFLGVBQWdCLENBQUM7TUFDcEU0QixvQ0FBb0MsQ0FBRSxRQUFRLEVBQUVqTCxNQUFNLENBQUNjLE1BQU0sQ0FBRSxDQUFDLENBQUMsRUFBRUQsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFO1FBQzdFVixHQUFHLEVBQU0sOEJBQThCO1FBQ3ZDa0MsTUFBTSxFQUFHLG1CQUFtQjtRQUM1QmpCLE9BQU8sRUFBRWlJO01BQ1YsQ0FBRSxDQUFFLENBQUM7SUFDTixDQUFDLE1BQU07TUFDTnBCLHFEQUFxRCxDQUFFLFVBQVcsQ0FBQztNQUNuRWdELG9DQUFvQyxDQUFFLFVBQVUsRUFBRWpMLE1BQU0sQ0FBQ2MsTUFBTSxDQUFFLENBQUMsQ0FBQyxFQUFFRCxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUU7UUFBRVYsR0FBRyxFQUFFO01BQStCLENBQUUsQ0FBRSxDQUFDO0lBQzVIO0VBQ0QsQ0FBQyxNQUFNLElBQUtVLEdBQUcsSUFBSUEsR0FBRyxDQUFDTyxPQUFPLEVBQUc7SUFDaEMrSCxpREFBaUQsQ0FBRXRJLEdBQUcsQ0FBQ08sT0FBUSxDQUFDO0VBQ2pFO0VBRUEsTUFBTXlOLGNBQWMsR0FBRyxtRUFBbUU7RUFDMUYsTUFBTXhELEtBQUssR0FBRyxFQUFFO0VBQ2hCLElBQUtELElBQUksQ0FBQ2hHLE9BQU8sSUFBSWdHLElBQUksQ0FBQ2hHLE9BQU8sQ0FBRXlKLGNBQWUsQ0FBQyxFQUFHO0lBQ3JEeEQsS0FBSyxDQUFDOEMsSUFBSSxDQUFFL0MsSUFBSyxDQUFDO0VBQ25CO0VBQ0FBLElBQUksQ0FBQzVDLGdCQUFnQixDQUFFcUcsY0FBZSxDQUFDLENBQUN2TixPQUFPLENBQUUsVUFBVWdILElBQUksRUFBRTtJQUNoRStDLEtBQUssQ0FBQzhDLElBQUksQ0FBRTdGLElBQUssQ0FBQztFQUNuQixDQUFFLENBQUM7RUFDSCxJQUFLLENBQUUrQyxLQUFLLENBQUMvRCxNQUFNLEVBQUc7SUFDckI7RUFDRDtFQUVBK0QsS0FBSyxDQUFDL0osT0FBTyxDQUFFLFVBQVVnSCxJQUFJLEVBQUU7SUFDOUI7SUFDQXdGLEtBQUssQ0FBQ2dCLElBQUksQ0FBRXhHLElBQUksQ0FBQ00sU0FBVSxDQUFDLENBQUN0SCxPQUFPLENBQUUsVUFBVXlOLEdBQUcsRUFBRTtNQUNwRCxJQUFLLGNBQWMsQ0FBQy9ILElBQUksQ0FBRStILEdBQUksQ0FBQyxFQUFHO1FBQ2pDekcsSUFBSSxDQUFDTSxTQUFTLENBQUM2RixNQUFNLENBQUVNLEdBQUksQ0FBQztNQUM3QjtJQUNELENBQUUsQ0FBQztJQUVILElBQUtuTyxLQUFLLEVBQUc7TUFDWjBILElBQUksQ0FBQ00sU0FBUyxDQUFDOEYsR0FBRyxDQUFFck8sTUFBTSxDQUFFTyxLQUFNLENBQUUsQ0FBQztJQUN0QztFQUNELENBQUUsQ0FBQztBQUNKLENBQUUsQ0FBQzs7QUFHSDtBQUNBZCx5QkFBeUIsQ0FBQ0ksUUFBUSxDQUFFLDJCQUEyQixFQUFFLFVBQVVVLEtBQUssRUFBRUMsR0FBRyxFQUFFO0VBQ3RGLE1BQU11SyxJQUFJLEdBQUd2SyxHQUFHLElBQUlBLEdBQUcsQ0FBQ0UsTUFBTTtFQUM5QixJQUFLLENBQUVxSyxJQUFJLElBQUksQ0FBRUEsSUFBSSxDQUFDNUMsZ0JBQWdCLEVBQUc7SUFDeEM7RUFDRDtFQUVBLE1BQU02QyxLQUFLLEdBQUdELElBQUksQ0FBQzVDLGdCQUFnQixDQUFFLDJDQUE0QyxDQUFDO0VBQ2xGLElBQUssQ0FBRTZDLEtBQUssQ0FBQy9ELE1BQU0sRUFBRztJQUNyQjtFQUNEO0VBRUEsTUFBTTFFLENBQUMsR0FBR3ZDLE1BQU0sQ0FBRU8sS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLEdBQUdBLEtBQU0sQ0FBQyxDQUFDbUcsSUFBSSxDQUFDLENBQUM7O0VBRXJEO0VBQ0EsSUFBS25FLENBQUMsSUFBSSxDQUFFLHdDQUF3QyxDQUFDb0UsSUFBSSxDQUFFcEUsQ0FBRSxDQUFDLEVBQUc7SUFDaEU7RUFDRDtFQUVBeUksS0FBSyxDQUFDL0osT0FBTyxDQUNaLFVBQVVnSCxJQUFJLEVBQUU7SUFDZixJQUFLLENBQUVBLElBQUksSUFBSSxDQUFFQSxJQUFJLENBQUMzQixLQUFLLEVBQUc7TUFDN0I7SUFDRDtJQUVBLElBQUssQ0FBRS9ELENBQUMsRUFBRztNQUNWMEYsSUFBSSxDQUFDM0IsS0FBSyxDQUFDMkUsY0FBYyxDQUFFLHNDQUF1QyxDQUFDO0lBQ3BFLENBQUMsTUFBTTtNQUNOaEQsSUFBSSxDQUFDM0IsS0FBSyxDQUFDNEUsV0FBVyxDQUFFLHNDQUFzQyxFQUFFM0ksQ0FBRSxDQUFDO0lBQ3BFO0VBQ0QsQ0FDRCxDQUFDO0FBQ0YsQ0FBRSxDQUFDOztBQUdIO0FBQ0E5Qyx5QkFBeUIsQ0FBQ0ksUUFBUSxDQUFFLDBCQUEwQixFQUFFLFVBQVVVLEtBQUssRUFBRUMsR0FBRyxFQUFFO0VBQ3JGLE1BQU11SyxJQUFJLEdBQUd2SyxHQUFHLENBQUNFLE1BQU07RUFDdkIsSUFBSyxDQUFFcUssSUFBSSxJQUFJLENBQUVBLElBQUksQ0FBQzVDLGdCQUFnQixFQUFHO0lBQ3hDO0VBQ0Q7RUFFQSxNQUFNNkMsS0FBSyxHQUFHRCxJQUFJLENBQUM1QyxnQkFBZ0IsQ0FBRSwyQkFBNEIsQ0FBQztFQUNsRSxJQUFLLENBQUU2QyxLQUFLLENBQUMvRCxNQUFNLEVBQUc7SUFDckI7RUFDRDs7RUFFQTtFQUNBMEgsWUFBWSxDQUFDQyxZQUFZLENBQ3hCLFVBQVVDLE9BQU8sRUFBRTtJQUVsQjtBQUNIO0FBQ0E7QUFDQTtBQUNBO0lBQ0csU0FBU0MsK0NBQStDQSxDQUFBLEVBQUc7TUFFMUQsSUFBSUMsVUFBVSxHQUFHdkosUUFBUSxDQUFDdEYsYUFBYSxDQUFFLDBDQUEyQyxDQUFDO01BQ3JGLElBQUssQ0FBRTZPLFVBQVUsRUFBRztRQUNuQixPQUFPLElBQUk7TUFDWjtNQUVBLElBQUlDLGFBQWEsR0FBR0QsVUFBVSxDQUFDN08sYUFBYSxDQUFFLG9DQUFxQyxDQUFDO01BRXBGLElBQUssQ0FBRThPLGFBQWEsRUFBRztRQUN0QkEsYUFBYSxHQUFHRCxVQUFVLENBQUM3TyxhQUFhLENBQUUseURBQTBELENBQUM7TUFDdEc7TUFFQSxJQUFLLENBQUU4TyxhQUFhLElBQUksT0FBT0EsYUFBYSxDQUFDQyxLQUFLLEtBQUssVUFBVSxFQUFHO1FBQ25FLE9BQU8sSUFBSTtNQUNaO01BRUEsT0FBTztRQUNOQyxPQUFPLEVBQUUsU0FBQUEsQ0FBQSxFQUFZO1VBQ3BCLElBQUk7WUFBRUYsYUFBYSxDQUFDQyxLQUFLLENBQUMsQ0FBQztVQUFFLENBQUMsQ0FBQyxPQUFRMU4sRUFBRSxFQUFHLENBQUM7UUFDOUM7TUFDRCxDQUFDO0lBQ0Y7SUFFQSxJQUFJNE4sa0JBQWtCLEdBQUdMLCtDQUErQyxDQUFDLENBQUM7SUFFMUUsSUFBSU0sUUFBUSxHQUFJLEtBQUs7SUFDckIsSUFBSUMsR0FBRyxHQUFROUosTUFBTSxDQUFDK0osYUFBYSxJQUFJL0osTUFBTSxDQUFDK0osYUFBYSxDQUFDQyxlQUFlLEdBQUdoSyxNQUFNLENBQUMrSixhQUFhLENBQUNDLGVBQWUsR0FBRyxDQUFDLENBQUM7SUFDdkgsSUFBSUMsT0FBTyxHQUFJSCxHQUFHLENBQUNJLGdCQUFnQixJQUFJSixHQUFHLENBQUNLLGdCQUFnQixJQUFJLDJCQUEyQjtJQUcxRixTQUFTQyxVQUFVQSxDQUFBLEVBQUc7TUFDckIsSUFBS1AsUUFBUSxFQUFHO1FBQUU7TUFBUTtNQUMxQkEsUUFBUSxHQUFHLElBQUk7TUFDZixJQUFJO1FBQUVQLE9BQU8sRUFBRWUsR0FBRyxFQUFFQyxHQUFHLEdBQUlMLE9BQU8sRUFBRUcsVUFBVyxDQUFDO01BQUUsQ0FBQyxDQUFDLE9BQVFHLENBQUMsRUFBRyxDQUFDO01BQ2pFQyxxQkFBcUIsQ0FBRSxZQUFZO1FBQ2xDLElBQUssQ0FBRVosa0JBQWtCLEVBQUc7VUFBRTtRQUFRO1FBQ3RDQSxrQkFBa0IsQ0FBQ0QsT0FBTyxDQUFDLENBQUM7TUFDN0IsQ0FBRSxDQUFDO0lBQ0o7O0lBRUE7SUFDQSxJQUFJO01BQUVMLE9BQU8sRUFBRWUsR0FBRyxFQUFFSSxFQUFFLEdBQUlSLE9BQU8sRUFBRUcsVUFBVyxDQUFDO0lBQUUsQ0FBQyxDQUFDLE9BQVFHLENBQUMsRUFBRyxDQUFDO0lBR2hFLElBQUlHLE9BQU8sR0FBSSxJQUFJLEtBQUsxUCxLQUFNO0lBQzlCc08sT0FBTyxDQUFDcUIsZ0JBQWdCLENBQUVELE9BQU8sRUFBRTtNQUFFRSxPQUFPLEVBQUUsSUFBSTtNQUFFQyxNQUFNLEVBQUUsSUFBSTtNQUFFcE8sTUFBTSxFQUFFO0lBQW1CLENBQUUsQ0FBQztFQUNqRyxDQUNELENBQUM7QUFFRixDQUFFLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0= |
| 970 |
|