← All changes
|
includes/page-form-builder/form-settings/_out/settings.js
+162
-5
11.4
→
11.9
View file →
| @@ -14,8 +14,10 @@ | ||
| 14 | 14 | * Optional: |
| 15 | 15 | * - re-apply after Builder STRUCTURE_LOADED (timing hook only) |
| 16 | 16 | */ |
| 17 | 17 | const api = w.WPBC_BFB_FormSettings = w.WPBC_BFB_FormSettings || {}; |
| 18 | + let pending_time_picker_skin_button = null; | |
| 19 | + let previous_time_picker_skin_url = ''; | |
| 18 | 20 | |
| 19 | 21 | // Last received settings pack (from AJAX). |
| 20 | 22 | let last_settings_pack = null; |
| 21 | 23 | |
| @@ -22,9 +24,9 @@ | ||
| 22 | 24 | // Small retry, because DOM can be re-rendered after apply event. |
| 23 | 25 | let raf_id = 0; |
| 24 | 26 | let retry_count = 0; |
| 25 | 27 | const retry_max = 20; |
| 26 | - const fallback_form_style_option_keys = ['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', 'booking_form_theme', 'booking_form_container_style', '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']; | |
| 28 | + const fallback_form_style_option_keys = ['booking_form_style', 'booking_form_accent_enabled', 'booking_form_accent_color', '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', 'booking_form_custom_button_border_width', 'booking_form_custom_button_border_radius', 'booking_form_theme', 'booking_form_container_style', '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']; | |
| 27 | 29 | |
| 28 | 30 | // ----------------------------------------------------------------------------------------------- |
| 29 | 31 | // Small helpers |
| 30 | 32 | // ----------------------------------------------------------------------------------------------- |
| @@ -108,10 +110,12 @@ | ||
| 108 | 110 | console.warn('WPBC Form Settings: Coloris init failed:', e); |
| 109 | 111 | } |
| 110 | 112 | } |
| 111 | 113 | function get_default_custom_appearance_settings() { |
| 112 | - const localized = w.wpbc_bfb_settings_vars && w.wpbc_bfb_settings_vars.custom_form_style_defaults ? w.wpbc_bfb_settings_vars.custom_form_style_defaults : {}; | |
| 114 | + const localized_custom_style = w.wpbc_bfb_settings_vars && w.wpbc_bfb_settings_vars.custom_form_style_defaults ? w.wpbc_bfb_settings_vars.custom_form_style_defaults : {}; | |
| 115 | + const localized_form_accent = w.wpbc_bfb_settings_vars && w.wpbc_bfb_settings_vars.form_accent_defaults ? w.wpbc_bfb_settings_vars.form_accent_defaults : {}; | |
| 113 | 116 | return Object.assign({ |
| 117 | + booking_form_accent_enabled: 'Off', | |
| 114 | 118 | booking_form_custom_background_color: '#ffffff', |
| 115 | 119 | booking_form_custom_border_color: '#cccccc', |
| 116 | 120 | booking_form_custom_border_width: '1px', |
| 117 | 121 | booking_form_custom_border_radius: '2px', |
| @@ -131,10 +135,12 @@ | ||
| 131 | 135 | booking_form_custom_secondary_button_text_color: '#444444', |
| 132 | 136 | booking_form_custom_secondary_button_border_color: '#eeeeee', |
| 133 | 137 | booking_form_custom_secondary_button_hover_background_color: '#fdfdfd', |
| 134 | 138 | booking_form_custom_secondary_button_hover_text_color: '#444444', |
| 135 | - booking_form_custom_secondary_button_hover_border_color: '#4d91cd' | |
| 136 | - }, localized); | |
| 139 | + booking_form_custom_secondary_button_hover_border_color: '#4d91cd', | |
| 140 | + booking_form_custom_button_border_width: '1px', | |
| 141 | + booking_form_custom_button_border_radius: '3px' | |
| 142 | + }, localized_custom_style, localized_form_accent); | |
| 137 | 143 | } |
| 138 | 144 | function get_form_style_option_keys() { |
| 139 | 145 | const localized = w.wpbc_bfb_settings_vars && Array.isArray(w.wpbc_bfb_settings_vars.form_style_option_keys) ? w.wpbc_bfb_settings_vars.form_style_option_keys : []; |
| 140 | 146 | return localized.length ? localized : fallback_form_style_option_keys; |
| @@ -455,8 +461,159 @@ | ||
| 455 | 461 | } |
| 456 | 462 | e.preventDefault(); |
| 457 | 463 | api.reset_custom_appearance(); |
| 458 | 464 | }, false); |
| 465 | + | |
| 466 | + /** | |
| 467 | + * Switch the global time-picker skin to the form-aware Automatic skin. | |
| 468 | + * | |
| 469 | + * The option is saved through the existing nonce-protected option saver. | |
| 470 | + * Legacy skins are changed only by this explicit user action. | |
| 471 | + * | |
| 472 | + * @param {HTMLButtonElement} button Accent action button. | |
| 473 | + * @returns {boolean} Whether an AJAX option save was started. | |
| 474 | + */ | |
| 475 | + function switch_time_picker_to_automatic(button) { | |
| 476 | + const automatic_skin = '/css/time_picker_skins/form_style.css'; | |
| 477 | + const current_skin = button ? String(button.getAttribute('data-wpbc-time-picker-skin-current') || '') : ''; | |
| 478 | + const automatic_url = button ? String(button.getAttribute('data-wpbc-time-picker-skin-url') || '') : ''; | |
| 479 | + if (!button || current_skin.slice(-automatic_skin.length) === automatic_skin) { | |
| 480 | + return false; | |
| 481 | + } | |
| 482 | + if (typeof w.wpbc_save_option_from_element !== 'function') { | |
| 483 | + return false; | |
| 484 | + } | |
| 485 | + const time_api = w.WPBC_BFB_Core && w.WPBC_BFB_Core.Time ? w.WPBC_BFB_Core.Time : null; | |
| 486 | + if (automatic_url) { | |
| 487 | + previous_time_picker_skin_url = d.getElementById('wpbc-time_picker-skin-css') ? String(d.getElementById('wpbc-time_picker-skin-css').getAttribute('href') || '') : ''; | |
| 488 | + if (time_api && typeof time_api.apply_picker_skin_url === 'function') { | |
| 489 | + time_api.apply_picker_skin_url(automatic_url); | |
| 490 | + } else if (typeof w.wpbc__css__change_skin === 'function' && d.getElementById('wpbc-time_picker-skin-css')) { | |
| 491 | + w.wpbc__css__change_skin(automatic_url, 'wpbc-time_picker-skin-css'); | |
| 492 | + } | |
| 493 | + } | |
| 494 | + pending_time_picker_skin_button = button; | |
| 495 | + button.setAttribute('data-wpbc-u-save-value', automatic_skin); | |
| 496 | + w.wpbc_save_option_from_element(button); | |
| 497 | + return true; | |
| 498 | + } | |
| 499 | + | |
| 500 | + /** | |
| 501 | + * Mark the Automatic skin as current after the option saver confirms it. | |
| 502 | + * | |
| 503 | + * @returns {void} | |
| 504 | + */ | |
| 505 | + w.wpbc_bfb_time_picker_skin_saved = function () { | |
| 506 | + if (pending_time_picker_skin_button) { | |
| 507 | + pending_time_picker_skin_button.setAttribute('data-wpbc-time-picker-skin-current', '/css/time_picker_skins/form_style.css'); | |
| 508 | + } | |
| 509 | + if (w.WPBC_BFB_Core && w.WPBC_BFB_Core.Time && typeof w.WPBC_BFB_Core.Time.ui_set_picker_skin_value === 'function') { | |
| 510 | + w.WPBC_BFB_Core.Time.ui_set_picker_skin_value('/css/time_picker_skins/form_style.css'); | |
| 511 | + } | |
| 512 | + pending_time_picker_skin_button = null; | |
| 513 | + previous_time_picker_skin_url = ''; | |
| 514 | + }; | |
| 515 | + if (w.jQuery) { | |
| 516 | + w.jQuery(d).on('wpbc:option:afterSave.wpbcBfbTimePickerSkin', function (event, response) { | |
| 517 | + if (!pending_time_picker_skin_button || response && response.success) { | |
| 518 | + return; | |
| 519 | + } | |
| 520 | + const previous_skin = String(pending_time_picker_skin_button.getAttribute('data-wpbc-time-picker-skin-current') || ''); | |
| 521 | + const time_api = w.WPBC_BFB_Core && w.WPBC_BFB_Core.Time ? w.WPBC_BFB_Core.Time : null; | |
| 522 | + if (previous_time_picker_skin_url && time_api && typeof time_api.apply_picker_skin_url === 'function') { | |
| 523 | + time_api.apply_picker_skin_url(previous_time_picker_skin_url); | |
| 524 | + } else if (previous_time_picker_skin_url && typeof w.wpbc__css__change_skin === 'function') { | |
| 525 | + w.wpbc__css__change_skin(previous_time_picker_skin_url, 'wpbc-time_picker-skin-css'); | |
| 526 | + } | |
| 527 | + if (w.WPBC_BFB_Core && w.WPBC_BFB_Core.Time && typeof w.WPBC_BFB_Core.Time.ui_set_picker_skin_value === 'function') { | |
| 528 | + w.WPBC_BFB_Core.Time.ui_set_picker_skin_value(previous_skin); | |
| 529 | + } | |
| 530 | + pending_time_picker_skin_button = null; | |
| 531 | + previous_time_picker_skin_url = ''; | |
| 532 | + }); | |
| 533 | + } | |
| 534 | + | |
| 535 | + /** | |
| 536 | + * Ask accent-capable field packs to copy the current accent into their | |
| 537 | + * existing editable color properties. Field packs update the counters. | |
| 538 | + * | |
| 539 | + * @param {HTMLButtonElement} button Action button. | |
| 540 | + * @returns {void} | |
| 541 | + */ | |
| 542 | + api.apply_accent_to_components = function (button) { | |
| 543 | + const toggle = d.getElementById('booking_form_accent_enabled'); | |
| 544 | + const color_control = d.getElementById('booking_form_accent_color'); | |
| 545 | + const status = d.querySelector('[data-wpbc-bfb-accent-components-status="1"]'); | |
| 546 | + const i18n = w.wpbc_bfb_settings_vars && w.wpbc_bfb_settings_vars.i18n ? w.wpbc_bfb_settings_vars.i18n : {}; | |
| 547 | + const default_appearance = get_default_custom_appearance_settings(); | |
| 548 | + const accent_color = color_control && /^#(?:[0-9a-f]{3}|[0-9a-f]{6})$/i.test(String(color_control.value || '').trim()) ? String(color_control.value).trim() : String(default_appearance.booking_form_accent_color || '').trim(); | |
| 549 | + if (!toggle || !toggle.checked) { | |
| 550 | + if (status) { | |
| 551 | + status.textContent = i18n.accent_enable_first || 'Enable Custom accent color first.'; | |
| 552 | + } | |
| 553 | + return; | |
| 554 | + } | |
| 555 | + if (button) { | |
| 556 | + button.disabled = true; | |
| 557 | + } | |
| 558 | + const apply_to_builder = function (builder) { | |
| 559 | + const detail = { | |
| 560 | + accent_color: accent_color, | |
| 561 | + builder: builder || w.wpbc_bfb || null, | |
| 562 | + matched: 0, | |
| 563 | + updated: 0 | |
| 564 | + }; | |
| 565 | + try { | |
| 566 | + d.dispatchEvent(new CustomEvent('wpbc:bfb:apply-accent-to-components', { | |
| 567 | + bubbles: true, | |
| 568 | + detail: detail | |
| 569 | + })); | |
| 570 | + } catch (_e) {} | |
| 571 | + const time_picker_save_started = switch_time_picker_to_automatic(button); | |
| 572 | + if (status) { | |
| 573 | + if (detail.updated > 0) { | |
| 574 | + status.textContent = 1 === detail.updated ? i18n.accent_applied_one || 'Accent applied to one form element. Save Form to keep the change.' : String(i18n.accent_applied_many || 'Accent applied to %d form elements. Save Form to keep the changes.').replace('%d', String(detail.updated)); | |
| 575 | + } else if (detail.matched > 0) { | |
| 576 | + status.textContent = i18n.accent_already_applied || 'All supported form elements already have the current accent color.'; | |
| 577 | + } else { | |
| 578 | + status.textContent = i18n.accent_no_elements || 'No accent-capable form elements were found.'; | |
| 579 | + } | |
| 580 | + if (time_picker_save_started) { | |
| 581 | + status.textContent += ' ' + (i18n.accent_time_picker_automatic || 'Time slots now use Automatic — Match Booking Form.'); | |
| 582 | + } | |
| 583 | + } | |
| 584 | + if (detail.updated > 0) { | |
| 585 | + try { | |
| 586 | + d.dispatchEvent(new CustomEvent('wpbc:bfb:structure:change', { | |
| 587 | + bubbles: true, | |
| 588 | + detail: { | |
| 589 | + source: 'apply-accent-to-components', | |
| 590 | + updated: detail.updated | |
| 591 | + } | |
| 592 | + })); | |
| 593 | + } catch (_e2) {} | |
| 594 | + } | |
| 595 | + if (detail.builder && typeof detail.builder._announce === 'function') { | |
| 596 | + detail.builder._announce(status ? status.textContent : i18n.accent_applied_announcement || 'Form accent applied.'); | |
| 597 | + } | |
| 598 | + if (button && !time_picker_save_started) { | |
| 599 | + button.disabled = false; | |
| 600 | + } | |
| 601 | + }; | |
| 602 | + if (w.wpbc_bfb_api && w.wpbc_bfb_api.ready && typeof w.wpbc_bfb_api.ready.then === 'function') { | |
| 603 | + w.wpbc_bfb_api.ready.then(apply_to_builder); | |
| 604 | + return; | |
| 605 | + } | |
| 606 | + apply_to_builder(w.wpbc_bfb || null); | |
| 607 | + }; | |
| 608 | + d.addEventListener('click', function (e) { | |
| 609 | + const btn = e && e.target && e.target.closest ? e.target.closest('[data-wpbc-bfb-apply-accent-components="1"]') : null; | |
| 610 | + if (!btn) { | |
| 611 | + return; | |
| 612 | + } | |
| 613 | + e.preventDefault(); | |
| 614 | + api.apply_accent_to_components(btn); | |
| 615 | + }, false); | |
| 459 | 616 | function schedule_apply_retry() { |
| 460 | 617 | if (raf_id) return; |
| 461 | 618 | raf_id = w.requestAnimationFrame(function () { |
| 462 | 619 | raf_id = 0; |
| @@ -499,5 +656,5 @@ | ||
| 499 | 656 | |
| 500 | 657 | // DOM ready init. |
| 501 | 658 | if (d.readyState === 'loading') d.addEventListener('DOMContentLoaded', api.init);else api.init(); |
| 502 | 659 | })(window, document); |
| 503 | -//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jbHVkZXMvcGFnZS1mb3JtLWJ1aWxkZXIvZm9ybS1zZXR0aW5ncy9fb3V0L3NldHRpbmdzLmpzIiwibmFtZXMiOlsidyIsImQiLCJhcGkiLCJXUEJDX0JGQl9Gb3JtU2V0dGluZ3MiLCJsYXN0X3NldHRpbmdzX3BhY2siLCJyYWZfaWQiLCJyZXRyeV9jb3VudCIsInJldHJ5X21heCIsImZhbGxiYWNrX2Zvcm1fc3R5bGVfb3B0aW9uX2tleXMiLCJxdWVyeV9hbGwiLCJyb290Iiwic2VsZWN0b3IiLCJBcnJheSIsImZyb20iLCJxdWVyeVNlbGVjdG9yQWxsIiwiY3NzX2VzY2FwZSIsInZhbHVlIiwidiIsIlN0cmluZyIsIkNTUyIsImVzY2FwZSIsInJlcGxhY2UiLCJpc19vbiIsInRyaW0iLCJ0b0xvd2VyQ2FzZSIsInNldF9pbml0aWFsX2F0dHIiLCJlbCIsInNldEF0dHJpYnV0ZSIsInRyaWdnZXJfY2hhbmdlIiwiZGlzcGF0Y2hFdmVudCIsIkV2ZW50IiwiYnViYmxlcyIsIl8iLCJ0cmlnZ2VyX2lucHV0IiwiZmluZF9yb3dzIiwic2NvcGUiLCJyb3dzIiwiZmlsdGVyIiwicm93IiwiZ2V0QXR0cmlidXRlIiwiaGFzX2FueV9yb3dzIiwibGVuZ3RoIiwiaW5pdF9jb2xvcmlzX3BpY2tlcnMiLCJDb2xvcmlzIiwiaW5wdXRzIiwiZm9yRWFjaCIsImlucHV0IiwiY2xhc3NMaXN0IiwiY29udGFpbnMiLCJhZGQiLCJhbHBoYSIsImZvcm1hdCIsInRoZW1lTW9kZSIsIm9uQ2hhbmdlIiwiY29sb3IiLCJDdXN0b21FdmVudCIsImRldGFpbCIsImN1cnJlbnRFbCIsIl9lIiwiZSIsImNvbnNvbGUiLCJ3YXJuIiwiZ2V0X2RlZmF1bHRfY3VzdG9tX2FwcGVhcmFuY2Vfc2V0dGluZ3MiLCJsb2NhbGl6ZWQiLCJ3cGJjX2JmYl9zZXR0aW5nc192YXJzIiwiY3VzdG9tX2Zvcm1fc3R5bGVfZGVmYXVsdHMiLCJPYmplY3QiLCJhc3NpZ24iLCJib29raW5nX2Zvcm1fY3VzdG9tX2JhY2tncm91bmRfY29sb3IiLCJib29raW5nX2Zvcm1fY3VzdG9tX2JvcmRlcl9jb2xvciIsImJvb2tpbmdfZm9ybV9jdXN0b21fYm9yZGVyX3dpZHRoIiwiYm9va2luZ19mb3JtX2N1c3RvbV9ib3JkZXJfcmFkaXVzIiwiYm9va2luZ19mb3JtX2N1c3RvbV9wYWRkaW5nX3ZlcnRpY2FsIiwiYm9va2luZ19mb3JtX2N1c3RvbV9wYWRkaW5nX2hvcml6b250YWwiLCJib29raW5nX2Zvcm1fY3VzdG9tX3RleHRfY29sb3IiLCJib29raW5nX2Zvcm1fY3VzdG9tX2ZpZWxkX2JhY2tncm91bmRfY29sb3IiLCJib29raW5nX2Zvcm1fY3VzdG9tX2ZpZWxkX3RleHRfY29sb3IiLCJib29raW5nX2Zvcm1fY3VzdG9tX2ZpZWxkX2JvcmRlcl9jb2xvciIsImJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2JhY2tncm91bmRfY29sb3IiLCJib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl90ZXh0X2NvbG9yIiwiYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fYm9yZGVyX2NvbG9yIiwiYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25faG92ZXJfYmFja2dyb3VuZF9jb2xvciIsImJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2hvdmVyX3RleHRfY29sb3IiLCJib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ob3Zlcl9ib3JkZXJfY29sb3IiLCJib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25fYmFja2dyb3VuZF9jb2xvciIsImJvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl90ZXh0X2NvbG9yIiwiYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2JvcmRlcl9jb2xvciIsImJvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9ob3Zlcl9iYWNrZ3JvdW5kX2NvbG9yIiwiYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2hvdmVyX3RleHRfY29sb3IiLCJib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25faG92ZXJfYm9yZGVyX2NvbG9yIiwiZ2V0X2Zvcm1fc3R5bGVfb3B0aW9uX2tleXMiLCJpc0FycmF5IiwiZm9ybV9zdHlsZV9vcHRpb25fa2V5cyIsInN0cmlwX2Zvcm1fc3R5bGVfb3B0aW9uc19mcm9tX3BhY2siLCJzZXR0aW5nc19wYWNrIiwib3B0aW9ucyIsImtleSIsInNldF92YWx1ZV9mb3Jfcm93Iiwib3B0cyIsInJvd190eXBlIiwicm93X2tleSIsImRvX3RyaWdnZXJfZXZlbnRzIiwid3JhcCIsInF1ZXJ5U2VsZWN0b3IiLCJjb250cm9sX2lkIiwidGFyZ2V0X3ZhbHVlIiwicmFkaW9zIiwiY2hlY2tlZF9yYWRpbyIsInJhZGlvIiwic2hvdWxkX2NoZWNrIiwiY2hlY2tlZCIsImNob2ljZSIsImNsb3Nlc3QiLCJ0b2dnbGUiLCJjaGVja2JveCIsInNlbGVjdCIsIndyaXRlciIsImNvbWJpbmVkIiwiZ3JvdXAiLCJ2ZXJ0aWNhbF9pbnB1dCIsImhvcml6b250YWxfaW5wdXQiLCJwYXJzZWQiLCJwYXJzZV9zcGFjaW5nX3ZhbHVlIiwidmVydGljYWwiLCJob3Jpem9udGFsIiwiY29udHJvbCIsImFwcGx5X2ZsYXRfc2V0dGluZ3MiLCJmbGF0X3NldHRpbmdzIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiYXBwbHkiLCJyZXNldF9jdXN0b21fYXBwZWFyYW5jZSIsImRlZmF1bHRzIiwiY3NzX3ZhcnMiLCJrZXlzIiwiV1BCQ19CRkJfU2V0dGluZ3NfRWZmZWN0cyIsImFwcGx5X2FsbCIsInNvdXJjZSIsInNldHRpbmdzIiwiY29sbGVjdCIsIm91dCIsInR5cGUiLCJoaWRkZW4iLCJnZXRfc3BhY2luZ192YWx1ZSIsImZhbGxiYWNrIiwibWF0Y2hlcyIsIm1hdGNoIiwiaXNOYU4iLCJOdW1iZXIiLCJyZWFwcGx5X2xhc3QiLCJpbml0Iiwic2NoZWR1bGVfYXBwbHlfcmV0cnkiLCJhZGRFdmVudExpc3RlbmVyIiwidGFyZ2V0X3BhY2siLCJjb2xsZWN0ZWQiLCJrIiwiYnRuIiwidGFyZ2V0IiwicHJldmVudERlZmF1bHQiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJiaW5kX2J1aWxkZXJfdGltaW5nX2hvb2siLCJidWlsZGVyX2luc3RhbmNlIiwiY29yZSIsIldQQkNfQkZCX0NvcmUiLCJldmVudHMiLCJXUEJDX0JGQl9FdmVudHMiLCJidXMiLCJTVFJVQ1RVUkVfTE9BREVEIiwib24iLCJ3cGJjX2JmYl9hcGkiLCJyZWFkeSIsInRoZW4iLCJzZXRUaW1lb3V0IiwiX19CIiwicmVhZHlTdGF0ZSIsIndpbmRvdyIsImRvY3VtZW50Il0sInNvdXJjZXMiOlsiaW5jbHVkZXMvcGFnZS1mb3JtLWJ1aWxkZXIvZm9ybS1zZXR0aW5ncy9fc3JjL3NldHRpbmdzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGdsb2JhbHMgd2luZG93LCBkb2N1bWVudCAqL1xyXG4oZnVuY3Rpb24gKHcsIGQpIHtcclxuXHQndXNlIHN0cmljdCc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEJGQiBGb3JtIFNldHRpbmdzIFVJIGJyaWRnZS5cclxuXHQgKlxyXG5cdCAqIExpc3RlbnMgdG86XHJcblx0ICogLSB3cGJjOmJmYjpmb3JtX3NldHRpbmdzOmFwcGx5ICAgKGZyb20gQUpBWCBsb2FkKSAgLT4gYXBwbHkgdG8gY29udHJvbHNcclxuXHQgKiAtIHdwYmM6YmZiOmZvcm1fc2V0dGluZ3M6Y29sbGVjdCAoZnJvbSBBSkFYIHNhdmUpICAtPiBjb2xsZWN0IGZyb20gY29udHJvbHNcclxuXHQgKlxyXG5cdCAqIE9wdGlvbmFsOlxyXG5cdCAqIC0gcmUtYXBwbHkgYWZ0ZXIgQnVpbGRlciBTVFJVQ1RVUkVfTE9BREVEICh0aW1pbmcgaG9vayBvbmx5KVxyXG5cdCAqL1xyXG5cdGNvbnN0IGFwaSA9ICh3LldQQkNfQkZCX0Zvcm1TZXR0aW5ncyA9IHcuV1BCQ19CRkJfRm9ybVNldHRpbmdzIHx8IHt9KTtcclxuXHJcblx0Ly8gTGFzdCByZWNlaXZlZCBzZXR0aW5ncyBwYWNrIChmcm9tIEFKQVgpLlxyXG5cdGxldCBsYXN0X3NldHRpbmdzX3BhY2sgPSBudWxsO1xyXG5cclxuXHQvLyBTbWFsbCByZXRyeSwgYmVjYXVzZSBET00gY2FuIGJlIHJlLXJlbmRlcmVkIGFmdGVyIGFwcGx5IGV2ZW50LlxyXG5cdGxldCByYWZfaWQgICAgICA9IDA7XHJcblx0bGV0IHJldHJ5X2NvdW50ID0gMDtcblx0Y29uc3QgcmV0cnlfbWF4ID0gMjA7XG5cdGNvbnN0IGZhbGxiYWNrX2Zvcm1fc3R5bGVfb3B0aW9uX2tleXMgPSBbXG5cdFx0J2Jvb2tpbmdfZm9ybV9zdHlsZScsXG5cdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fYmFja2dyb3VuZF9jb2xvcicsXG5cdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fYm9yZGVyX2NvbG9yJyxcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9ib3JkZXJfd2lkdGgnLFxuXHRcdCdib29raW5nX2Zvcm1fY3VzdG9tX2JvcmRlcl9yYWRpdXMnLFxuXHRcdCdib29raW5nX2Zvcm1fY3VzdG9tX3BhZGRpbmdfdmVydGljYWwnLFxuXHRcdCdib29raW5nX2Zvcm1fY3VzdG9tX3BhZGRpbmdfaG9yaXpvbnRhbCcsXG5cdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fdGV4dF9jb2xvcicsXG5cdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfYmFja2dyb3VuZF9jb2xvcicsXG5cdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfdGV4dF9jb2xvcicsXG5cdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfYm9yZGVyX2NvbG9yJyxcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fYmFja2dyb3VuZF9jb2xvcicsXG5cdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX3RleHRfY29sb3InLFxuXHRcdCdib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ib3JkZXJfY29sb3InLFxuXHRcdCdib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ob3Zlcl9iYWNrZ3JvdW5kX2NvbG9yJyxcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25faG92ZXJfdGV4dF9jb2xvcicsXG5cdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2hvdmVyX2JvcmRlcl9jb2xvcicsXG5cdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9iYWNrZ3JvdW5kX2NvbG9yJyxcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX3RleHRfY29sb3InLFxuXHRcdCdib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25fYm9yZGVyX2NvbG9yJyxcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2hvdmVyX2JhY2tncm91bmRfY29sb3InLFxuXHRcdCdib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25faG92ZXJfdGV4dF9jb2xvcicsXG5cdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9ob3Zlcl9ib3JkZXJfY29sb3InLFxuXHRcdCdib29raW5nX2Zvcm1fdGhlbWUnLFxuXHRcdCdib29raW5nX2Zvcm1fY29udGFpbmVyX3N0eWxlJyxcblx0XHQnYm9va2luZ19mb3JtX2JhY2tncm91bmRfY29sb3InLFxuXHRcdCdib29raW5nX2Zvcm1fYm9yZGVyX2NvbG9yJyxcblx0XHQnYm9va2luZ19mb3JtX2JvcmRlcl93aWR0aCcsXG5cdFx0J2Jvb2tpbmdfZm9ybV9ib3JkZXJfcmFkaXVzJyxcblx0XHQnYm9va2luZ19mb3JtX3BhZGRpbmcnLFxuXHRcdCdib29raW5nX2Zvcm1fdGV4dF9jb2xvcicsXG5cdFx0J2Jvb2tpbmdfZm9ybV9maWVsZF9iYWNrZ3JvdW5kX2NvbG9yJyxcblx0XHQnYm9va2luZ19mb3JtX2ZpZWxkX3RleHRfY29sb3InLFxuXHRcdCdib29raW5nX2Zvcm1fZmllbGRfYm9yZGVyX2NvbG9yJ1xuXHRdO1xuXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0Ly8gU21hbGwgaGVscGVyc1xyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdGZ1bmN0aW9uIHF1ZXJ5X2FsbChyb290LCBzZWxlY3Rvcikge1xyXG5cdFx0cmV0dXJuIEFycmF5LmZyb20oKHJvb3QgfHwgZCkucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcikpO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gY3NzX2VzY2FwZSh2YWx1ZSkge1xyXG5cdFx0Y29uc3QgdiA9IFN0cmluZyh2YWx1ZSA9PSBudWxsID8gJycgOiB2YWx1ZSk7XHJcblx0XHRpZiAody5DU1MgJiYgdHlwZW9mIHcuQ1NTLmVzY2FwZSA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHcuQ1NTLmVzY2FwZSh2KTtcclxuXHRcdHJldHVybiB2LnJlcGxhY2UoL1teYS16QS1aMC05X1xcLV0vZywgJ1xcXFwkJicpO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gaXNfb24odmFsdWUpIHtcclxuXHRcdGNvbnN0IHYgPSBTdHJpbmcodmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWUpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0cmV0dXJuICh2ID09PSAnb24nIHx8IHYgPT09ICcxJyB8fCB2ID09PSAndHJ1ZScgfHwgdiA9PT0gJ3llcycpO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gc2V0X2luaXRpYWxfYXR0cihlbCwgdmFsdWUpIHtcclxuXHRcdGlmICghZWwpIHJldHVybjtcclxuXHRcdGVsLnNldEF0dHJpYnV0ZSgnZGF0YS13cGJjLWJmYi1mcy1pbml0aWFsJywgU3RyaW5nKHZhbHVlID09IG51bGwgPyAnJyA6IHZhbHVlKSk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiB0cmlnZ2VyX2NoYW5nZShlbCkge1xyXG5cdFx0aWYgKCFlbCkgcmV0dXJuO1xyXG5cdFx0dHJ5IHsgZWwuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2NoYW5nZScsIHsgYnViYmxlczogdHJ1ZSB9KSk7IH0gY2F0Y2ggKF8pIHt9XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiB0cmlnZ2VyX2lucHV0KGVsKSB7XHJcblx0XHRpZiAoICFlbCApIHJldHVybjtcclxuXHRcdHRyeSB7IGVsLmRpc3BhdGNoRXZlbnQoIG5ldyBFdmVudCggJ2lucHV0JywgeyBidWJibGVzOiB0cnVlIH0gKSApOyB9IGNhdGNoICggXyApIHt9XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBmaW5kX3Jvd3Moc2NvcGUpIHtcclxuXHRcdGNvbnN0IHJvd3MgPSBxdWVyeV9hbGwoZCwgJy53cGJjLXNldHRpbmdbZGF0YS1rZXldJyk7XHJcblx0XHRpZiAoIXNjb3BlKSByZXR1cm4gcm93cztcclxuXHJcblx0XHRyZXR1cm4gcm93cy5maWx0ZXIoZnVuY3Rpb24gKHJvdykge1xyXG5cdFx0XHRyZXR1cm4gU3RyaW5nKHJvdy5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2NvcGUnKSB8fCAnJykgPT09IFN0cmluZyhzY29wZSk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGhhc19hbnlfcm93cygpIHtcblx0XHRyZXR1cm4gcXVlcnlfYWxsKGQsICcud3BiYy1zZXR0aW5nW2RhdGEta2V5XScpLmxlbmd0aCA+IDA7XG5cdH1cblxuXHRmdW5jdGlvbiBpbml0X2NvbG9yaXNfcGlja2Vycyhyb290KSB7XG5cdFx0aWYgKCAhIHJvb3QgfHwgISB3LkNvbG9yaXMgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgaW5wdXRzID0gcXVlcnlfYWxsKHJvb3QsICdpbnB1dFtkYXRhLXdwYmMtYmZiLWZzLXR5cGU9XCJjb2xvclwiXVtkYXRhLWNvbG9yaXNdLCBpbnB1dFtkYXRhLWluc3BlY3Rvci10eXBlPVwiY29sb3JcIl1bZGF0YS1jb2xvcmlzXScpO1xuXHRcdGlmICggISBpbnB1dHMubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlucHV0cy5mb3JFYWNoKGZ1bmN0aW9uIChpbnB1dCkge1xuXHRcdFx0aWYgKGlucHV0LmNsYXNzTGlzdC5jb250YWlucygnd3BiY19iZmJfY29sb3JpcycpKSByZXR1cm47XG5cdFx0XHRpbnB1dC5jbGFzc0xpc3QuYWRkKCd3cGJjX2JmYl9jb2xvcmlzJyk7XG5cdFx0fSk7XG5cblx0XHR0cnkge1xuXHRcdFx0dy5Db2xvcmlzKHtcblx0XHRcdFx0ZWwgICAgICAgOiAnLndwYmNfYmZiX2NvbG9yaXMnLFxuXHRcdFx0XHRhbHBoYSAgICA6IGZhbHNlLFxuXHRcdFx0XHRmb3JtYXQgICA6ICdoZXgnLFxuXHRcdFx0XHR0aGVtZU1vZGU6ICdhdXRvJyxcblx0XHRcdFx0b25DaGFuZ2UgOiBmdW5jdGlvbiAoY29sb3IsIGlucHV0KSB7XG5cdFx0XHRcdFx0aWYgKCAhIGlucHV0ICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0aW5wdXQuZGlzcGF0Y2hFdmVudCggbmV3IEN1c3RvbUV2ZW50KCAnd3BiYzpiZmI6Y29sb3JpczpjaGFuZ2UnLCB7XG5cdFx0XHRcdFx0XHRcdGJ1YmJsZXM6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGRldGFpbCA6IHtcblx0XHRcdFx0XHRcdFx0XHRjb2xvciAgICA6IGNvbG9yLFxuXHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRFbDogaW5wdXRcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSApICk7XG5cdFx0XHRcdFx0fSBjYXRjaCAoIF9lICkge31cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdXUEJDIEZvcm0gU2V0dGluZ3M6IENvbG9yaXMgaW5pdCBmYWlsZWQ6JywgZSk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0X2RlZmF1bHRfY3VzdG9tX2FwcGVhcmFuY2Vfc2V0dGluZ3MoKSB7XG5cdFx0Y29uc3QgbG9jYWxpemVkID0gdy53cGJjX2JmYl9zZXR0aW5nc192YXJzICYmIHcud3BiY19iZmJfc2V0dGluZ3NfdmFycy5jdXN0b21fZm9ybV9zdHlsZV9kZWZhdWx0c1xuXHRcdFx0PyB3LndwYmNfYmZiX3NldHRpbmdzX3ZhcnMuY3VzdG9tX2Zvcm1fc3R5bGVfZGVmYXVsdHNcblx0XHRcdDoge307XG5cblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbigge1xuXHRcdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9iYWNrZ3JvdW5kX2NvbG9yICAgICAgIDogJyNmZmZmZmYnLFxuXHRcdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9ib3JkZXJfY29sb3IgICAgICAgICAgIDogJyNjY2NjY2MnLFxuXHRcdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9ib3JkZXJfd2lkdGggICAgICAgICAgIDogJzFweCcsXG5cdFx0XHRib29raW5nX2Zvcm1fY3VzdG9tX2JvcmRlcl9yYWRpdXMgICAgICAgICAgOiAnMnB4Jyxcblx0XHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fcGFkZGluZ192ZXJ0aWNhbCAgICAgICA6ICcxMHB4Jyxcblx0XHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fcGFkZGluZ19ob3Jpem9udGFsICAgICA6ICczMHB4Jyxcblx0XHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fdGV4dF9jb2xvciAgICAgICAgICAgICA6ICcjMWQyMzI3Jyxcblx0XHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfYmFja2dyb3VuZF9jb2xvciA6ICcjZmZmZmZmJyxcblx0XHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfdGV4dF9jb2xvciAgICAgICA6ICcjM2M0MzRhJyxcblx0XHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fZmllbGRfYm9yZGVyX2NvbG9yICAgICA6ICcjY2NjY2NjJyxcblx0XHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2JhY2tncm91bmRfY29sb3I6ICcjMDY2YWFiJyxcblx0XHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX3RleHRfY29sb3IgICAgICA6ICcjZmZmZmZmJyxcblx0XHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2JvcmRlcl9jb2xvciAgICA6ICcjMDY2YWFiJyxcblx0XHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2hvdmVyX2JhY2tncm91bmRfY29sb3I6ICcjMDU1NTg5Jyxcblx0XHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2hvdmVyX3RleHRfY29sb3I6ICcjZmZmZmZmJyxcblx0XHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2hvdmVyX2JvcmRlcl9jb2xvcjogJyMwNTU1ODknLFxuXHRcdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2JhY2tncm91bmRfY29sb3I6ICcjZmRmZGZkJyxcblx0XHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl90ZXh0X2NvbG9yOiAnIzQ0NDQ0NCcsXG5cdFx0XHRib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25fYm9yZGVyX2NvbG9yOiAnI2VlZWVlZScsXG5cdFx0XHRib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25faG92ZXJfYmFja2dyb3VuZF9jb2xvcjogJyNmZGZkZmQnLFxuXHRcdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2hvdmVyX3RleHRfY29sb3I6ICcjNDQ0NDQ0Jyxcblx0XHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9ob3Zlcl9ib3JkZXJfY29sb3I6ICcjNGQ5MWNkJ1xuXHRcdH0sIGxvY2FsaXplZCApO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0X2Zvcm1fc3R5bGVfb3B0aW9uX2tleXMoKSB7XG5cdFx0Y29uc3QgbG9jYWxpemVkID0gdy53cGJjX2JmYl9zZXR0aW5nc192YXJzICYmIEFycmF5LmlzQXJyYXkoIHcud3BiY19iZmJfc2V0dGluZ3NfdmFycy5mb3JtX3N0eWxlX29wdGlvbl9rZXlzIClcblx0XHRcdD8gdy53cGJjX2JmYl9zZXR0aW5nc192YXJzLmZvcm1fc3R5bGVfb3B0aW9uX2tleXNcblx0XHRcdDogW107XG5cblx0XHRyZXR1cm4gbG9jYWxpemVkLmxlbmd0aCA/IGxvY2FsaXplZCA6IGZhbGxiYWNrX2Zvcm1fc3R5bGVfb3B0aW9uX2tleXM7XG5cdH1cblxuXHRmdW5jdGlvbiBzdHJpcF9mb3JtX3N0eWxlX29wdGlvbnNfZnJvbV9wYWNrKHNldHRpbmdzX3BhY2spIHtcblx0XHRpZiAoIXNldHRpbmdzX3BhY2sgfHwgdHlwZW9mIHNldHRpbmdzX3BhY2sgIT09ICdvYmplY3QnKSByZXR1cm4gc2V0dGluZ3NfcGFjaztcblx0XHRpZiAoIXNldHRpbmdzX3BhY2sub3B0aW9ucyB8fCB0eXBlb2Ygc2V0dGluZ3NfcGFjay5vcHRpb25zICE9PSAnb2JqZWN0JykgcmV0dXJuIHNldHRpbmdzX3BhY2s7XG5cblx0XHRnZXRfZm9ybV9zdHlsZV9vcHRpb25fa2V5cygpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0ZGVsZXRlIHNldHRpbmdzX3BhY2sub3B0aW9uc1trZXldO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHNldHRpbmdzX3BhY2s7XG5cdH1cblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0Ly8gUm93IHNldHRlclxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdGZ1bmN0aW9uIHNldF92YWx1ZV9mb3Jfcm93KHJvdywgdmFsdWUsIG9wdHMpIHtcclxuXHRcdGlmICghcm93KSByZXR1cm47XHJcblxyXG5cdFx0Y29uc3Qgcm93X3R5cGUgPSBTdHJpbmcocm93LmdldEF0dHJpYnV0ZSgnZGF0YS10eXBlJykgfHwgJycpO1xyXG5cdFx0Y29uc3Qgcm93X2tleSAgPSBTdHJpbmcocm93LmdldEF0dHJpYnV0ZSgnZGF0YS1rZXknKSB8fCAnJyk7XHJcblx0XHRjb25zdCBkb190cmlnZ2VyX2V2ZW50cyA9ICEhKG9wdHMgJiYgb3B0cy50cmlnZ2VyX2NoYW5nZSk7XHJcblxyXG5cdFx0aWYgKCFyb3dfa2V5KSByZXR1cm47XHJcblxyXG5cdFx0Ly8gUmFkaW8gZ3JvdXBcclxuXHRcdGlmIChyb3dfdHlwZSA9PT0gJ3JhZGlvJykge1xyXG5cdFx0XHRjb25zdCB3cmFwID0gcm93LnF1ZXJ5U2VsZWN0b3IoJy53cGJjX2JmYl9fZm9ybV9zZXR0aW5nX3JhZGlvW2RhdGEtd3BiYy1iZmItZnMtY29udHJvbGlkXScpO1xyXG5cdFx0XHRjb25zdCBjb250cm9sX2lkID0gd3JhcCA/IFN0cmluZyh3cmFwLmdldEF0dHJpYnV0ZSgnZGF0YS13cGJjLWJmYi1mcy1jb250cm9saWQnKSB8fCAnJykgOiAnJztcclxuXHRcdFx0aWYgKCFjb250cm9sX2lkKSByZXR1cm47XHJcblxyXG5cdFx0XHRjb25zdCB0YXJnZXRfdmFsdWUgPSBTdHJpbmcodmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWUpO1xyXG5cdFx0XHRjb25zdCByYWRpb3MgPSBxdWVyeV9hbGwocm93LCAnaW5wdXRbdHlwZT1cInJhZGlvXCJdW25hbWU9XCInICsgY3NzX2VzY2FwZShjb250cm9sX2lkKSArICdcIl0nKTtcclxuXHJcblx0XHRcdGxldCBjaGVja2VkX3JhZGlvID0gbnVsbDtcblx0XHRcdHJhZGlvcy5mb3JFYWNoKGZ1bmN0aW9uIChyYWRpbykge1xuXHRcdFx0XHRjb25zdCBzaG91bGRfY2hlY2sgPSAoU3RyaW5nKHJhZGlvLnZhbHVlKSA9PT0gdGFyZ2V0X3ZhbHVlKTtcblx0XHRcdFx0cmFkaW8uY2hlY2tlZCA9IHNob3VsZF9jaGVjaztcblx0XHRcdFx0aWYgKHNob3VsZF9jaGVjaykgY2hlY2tlZF9yYWRpbyA9IHJhZGlvO1xuXG5cdFx0XHRcdGNvbnN0IGNob2ljZSA9IHJhZGlvLmNsb3Nlc3QgPyByYWRpby5jbG9zZXN0KCcud3BiY190aGVtZV9jaG9pY2UnKSA6IG51bGw7XG5cdFx0XHRcdGlmICggY2hvaWNlICkge1xuXHRcdFx0XHRcdGNob2ljZS5jbGFzc0xpc3QudG9nZ2xlKCdpcy1zZWxlY3RlZCcsIHNob3VsZF9jaGVjayk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHJcblx0XHRcdGlmICh3cmFwKSBzZXRfaW5pdGlhbF9hdHRyKHdyYXAsIHRhcmdldF92YWx1ZSk7XHJcblx0XHRcdGlmIChkb190cmlnZ2VyX2V2ZW50cyAmJiBjaGVja2VkX3JhZGlvKSB0cmlnZ2VyX2NoYW5nZShjaGVja2VkX3JhZGlvKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFRvZ2dsZVxyXG5cdFx0aWYgKHJvd190eXBlID09PSAndG9nZ2xlJykge1xyXG5cdFx0XHRjb25zdCBjaGVja2JveCA9XHJcblx0XHRcdFx0cm93LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9XCJjaGVja2JveFwiXVtkYXRhLXdwYmMtYmZiLWZzLXR5cGU9XCJ0b2dnbGVcIl0nKSB8fFxyXG5cdFx0XHRcdHJvdy5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nKTtcclxuXHJcblx0XHRcdGlmICghY2hlY2tib3gpIHJldHVybjtcclxuXHJcblx0XHRcdGNvbnN0IGNoZWNrZWQgPSBpc19vbih2YWx1ZSk7XHJcblx0XHRcdGNoZWNrYm94LmNoZWNrZWQgPSBjaGVja2VkO1xyXG5cdFx0XHRjaGVja2JveC5zZXRBdHRyaWJ1dGUoJ2FyaWEtY2hlY2tlZCcsIGNoZWNrZWQgPyAndHJ1ZScgOiAnZmFsc2UnKTtcclxuXHJcblx0XHRcdHNldF9pbml0aWFsX2F0dHIoY2hlY2tib3gsIGNoZWNrZWQgPyAnT24nIDogJ09mZicpO1xyXG5cdFx0XHRpZiAoZG9fdHJpZ2dlcl9ldmVudHMpIHRyaWdnZXJfY2hhbmdlKGNoZWNrYm94KTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFNlbGVjdFxyXG5cdFx0aWYgKHJvd190eXBlID09PSAnc2VsZWN0Jykge1xyXG5cdFx0XHRjb25zdCBzZWxlY3QgPVxyXG5cdFx0XHRcdHJvdy5xdWVyeVNlbGVjdG9yKCdzZWxlY3RbZGF0YS13cGJjLWJmYi1mcy10eXBlPVwic2VsZWN0XCJdJykgfHxcclxuXHRcdFx0XHRyb3cucXVlcnlTZWxlY3Rvcignc2VsZWN0Jyk7XHJcblxyXG5cdFx0XHRpZiAoIXNlbGVjdCkgcmV0dXJuO1xyXG5cclxuXHRcdFx0c2VsZWN0LnZhbHVlID0gU3RyaW5nKHZhbHVlID09IG51bGwgPyAnJyA6IHZhbHVlKTtcclxuXHRcdFx0c2V0X2luaXRpYWxfYXR0cihzZWxlY3QsIHNlbGVjdC52YWx1ZSk7XHJcblx0XHRcdGlmIChkb190cmlnZ2VyX2V2ZW50cykgdHJpZ2dlcl9jaGFuZ2Uoc2VsZWN0KTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIExlbmd0aDogaGlkZGVuIGNvbWJpbmVkICsgbnVtL3VuaXRcblx0XHRpZiAoIHJvd190eXBlID09PSAnbGVuZ3RoJyApIHtcblx0XHRcdC8vIEpTIHNsaWRlciBsZW5ndGggY29udHJvbDogLSBoaWRkZW4gd3JpdGVyIGNhcnJpZXMgRlMgbWFya2VycyBhbmQgbXVzdCByZWNlaXZlIGlucHV0IGV2ZW50IHNvIHdwYmNfc2xpZGVyX2xlbl9ncm91cHMuanMgc3luY3MgVUkuXHJcblx0XHRcdGNvbnN0IHdyaXRlciA9XHJcblx0XHRcdFx0XHQgIHJvdy5xdWVyeVNlbGVjdG9yKCAnaW5wdXRbZGF0YS13cGJjX3NsaWRlcl9sZW5fd3JpdGVyXVtkYXRhLXdwYmMtYmZiLWZzLXR5cGU9XCJsZW5ndGhcIl0nICkgfHxcclxuXHRcdFx0XHRcdCAgcm93LnF1ZXJ5U2VsZWN0b3IoICdpbnB1dFtkYXRhLXdwYmMtYmZiLWZzLXR5cGU9XCJsZW5ndGhcIl0nICk7XHJcblx0XHRcdGlmICggIXdyaXRlciApIHJldHVybjtcclxuXHJcblx0XHRcdGNvbnN0IGNvbWJpbmVkID0gU3RyaW5nKCB2YWx1ZSA9PSBudWxsID8gJycgOiB2YWx1ZSApO1xyXG5cdFx0XHR3cml0ZXIudmFsdWUgICA9IGNvbWJpbmVkO1xyXG5cdFx0XHRzZXRfaW5pdGlhbF9hdHRyKCB3cml0ZXIsIGNvbWJpbmVkICk7XHJcblx0XHRcdGlmICggZG9fdHJpZ2dlcl9ldmVudHMgKSB0cmlnZ2VyX2lucHV0KCB3cml0ZXIgKTtcclxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFNwYWNpbmc6IHR3byBudW1iZXIgaW5wdXRzIHNhdmVkIGludG8gYSBoaWRkZW4gQ1NTIHNob3J0aGFuZCB3cml0ZXIuXG5cdFx0aWYgKCByb3dfdHlwZSA9PT0gJ3NwYWNpbmcnICkge1xuXHRcdFx0Y29uc3QgZ3JvdXAgPSByb3cucXVlcnlTZWxlY3RvciggJy53cGJjX3NwYWNpbmdfZ3JvdXAnICk7XG5cdFx0XHRjb25zdCB2ZXJ0aWNhbF9pbnB1dCA9IGdyb3VwID8gZ3JvdXAucXVlcnlTZWxlY3RvciggJ2lucHV0W2RhdGEtd3BiY19zcGFjaW5nX3ZlcnRpY2FsXScgKSA6IG51bGw7XG5cdFx0XHRjb25zdCBob3Jpem9udGFsX2lucHV0ID0gZ3JvdXAgPyBncm91cC5xdWVyeVNlbGVjdG9yKCAnaW5wdXRbZGF0YS13cGJjX3NwYWNpbmdfaG9yaXpvbnRhbF0nICkgOiBudWxsO1xuXHRcdFx0Y29uc3Qgd3JpdGVyID0gZ3JvdXAgPyBncm91cC5xdWVyeVNlbGVjdG9yKCAnaW5wdXRbZGF0YS13cGJjX3NwYWNpbmdfd3JpdGVyXScgKSA6IG51bGw7XG5cdFx0XHRjb25zdCBwYXJzZWQgPSBwYXJzZV9zcGFjaW5nX3ZhbHVlKCB2YWx1ZSApO1xuXG5cdFx0XHRpZiAoICEgd3JpdGVyICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICggdmVydGljYWxfaW5wdXQgKSB7XG5cdFx0XHRcdHZlcnRpY2FsX2lucHV0LnZhbHVlID0gcGFyc2VkLnZlcnRpY2FsO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBob3Jpem9udGFsX2lucHV0ICkge1xuXHRcdFx0XHRob3Jpem9udGFsX2lucHV0LnZhbHVlID0gcGFyc2VkLmhvcml6b250YWw7XG5cdFx0XHR9XG5cdFx0XHR3cml0ZXIudmFsdWUgPSBwYXJzZWQuY29tYmluZWQ7XG5cdFx0XHRzZXRfaW5pdGlhbF9hdHRyKCB3cml0ZXIsIHBhcnNlZC5jb21iaW5lZCApO1xuXHRcdFx0aWYgKCBkb190cmlnZ2VyX2V2ZW50cyApIHRyaWdnZXJfaW5wdXQoIHdyaXRlciApO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFJhbmdlIChzbGlkZXIgbnVtYmVyKTogd3JpdGVyIGlzIHRoZSBudW1iZXIgaW5wdXQuXHJcblx0XHRpZiAocm93X3R5cGUgPT09ICdyYW5nZScpIHtcclxuXHRcdFx0Y29uc3Qgd3JpdGVyID1cclxuXHRcdFx0XHRyb3cucXVlcnlTZWxlY3RvcignaW5wdXRbZGF0YS13cGJjX3NsaWRlcl9yYW5nZV93cml0ZXJdJykgfHxcclxuXHRcdFx0XHRyb3cucXVlcnlTZWxlY3RvcignaW5wdXRbZGF0YS13cGJjLWJmYi1mcy1rZXk9XCInICsgY3NzX2VzY2FwZShyb3dfa2V5KSArICdcIl0nKSB8fFxyXG5cdFx0XHRcdHJvdy5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPVwibnVtYmVyXCJdJyk7XHJcblx0XHRcdGlmICghd3JpdGVyKSByZXR1cm47XHJcblxyXG5cdFx0XHR3cml0ZXIudmFsdWUgPSBTdHJpbmcodmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWUpO1xyXG5cdFx0XHRzZXRfaW5pdGlhbF9hdHRyKHdyaXRlciwgd3JpdGVyLnZhbHVlKTtcclxuXHRcdFx0aWYgKGRvX3RyaWdnZXJfZXZlbnRzKSB0cmlnZ2VyX2lucHV0KHdyaXRlcik7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBEZWZhdWx0OiBpbnB1dC90ZXh0YXJlYVxyXG5cdFx0Y29uc3QgY29udHJvbCA9XHJcblx0XHRcdHJvdy5xdWVyeVNlbGVjdG9yKCdbZGF0YS13cGJjLWJmYi1mcy1rZXk9XCInICsgY3NzX2VzY2FwZShyb3dfa2V5KSArICdcIl0nKSB8fFxyXG5cdFx0XHRyb3cucXVlcnlTZWxlY3RvcignaW5wdXQsdGV4dGFyZWEnKTtcclxuXHJcblx0XHRpZiAoIWNvbnRyb2wpIHJldHVybjtcclxuXHJcblx0XHRjb250cm9sLnZhbHVlID0gU3RyaW5nKHZhbHVlID09IG51bGwgPyAnJyA6IHZhbHVlKTtcclxuXHRcdHNldF9pbml0aWFsX2F0dHIoY29udHJvbCwgY29udHJvbC52YWx1ZSk7XHJcblx0XHQvLyBGb3Igbm9ybWFsIGlucHV0cywgXCJpbnB1dFwiIGdpdmVzIGJldHRlciByZWFjdGl2aXR5IHRoYW4gXCJjaGFuZ2VcIi5cclxuXHRcdGlmIChkb190cmlnZ2VyX2V2ZW50cykgdHJpZ2dlcl9pbnB1dChjb250cm9sKTtcclxuXHR9XHJcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0Ly8gUHVibGljIEFQSVxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdC8qKlxyXG5cdCAqIEFwcGx5IEZMQVQgb2JqZWN0IChrZXk9PnZhbHVlKSB0byByb3dzIG9mIHNvbWUgc2NvcGUuXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gYXBwbHlfZmxhdF9zZXR0aW5ncyhmbGF0X3NldHRpbmdzLCBzY29wZSwgb3B0cykge1xyXG5cdFx0aWYgKCFmbGF0X3NldHRpbmdzIHx8IHR5cGVvZiBmbGF0X3NldHRpbmdzICE9PSAnb2JqZWN0JykgcmV0dXJuO1xyXG5cclxuXHRcdGZpbmRfcm93cyhzY29wZSkuZm9yRWFjaChmdW5jdGlvbiAocm93KSB7XHJcblx0XHRcdGNvbnN0IGtleSA9IFN0cmluZyhyb3cuZ2V0QXR0cmlidXRlKCdkYXRhLWtleScpIHx8ICcnKTtcclxuXHRcdFx0aWYgKCFrZXkpIHJldHVybjtcclxuXHRcdFx0aWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZmxhdF9zZXR0aW5ncywga2V5KSkgcmV0dXJuO1xyXG5cdFx0XHRzZXRfdmFsdWVfZm9yX3Jvdyhyb3csIGZsYXRfc2V0dGluZ3Nba2V5XSwgb3B0cyk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFwcGx5IHNldHRpbmdzLlxyXG5cdCAqXHJcblx0ICogU3VwcG9ydHM6XHJcblx0ICogLSBmbGF0OiB7IGJvb2tpbmdfZm9ybV9sYXlvdXRfd2lkdGg6ICcxMDAlJywgLi4uIH1cclxuXHQgKiAtIHBhY2s6IHsgb3B0aW9uczogey4uLn0sIGNzc192YXJzOiB7Li4ufSB9ICAgKE9wdGlvbiBBKVxyXG5cdCAqL1xyXG5cdGFwaS5hcHBseSA9IGZ1bmN0aW9uIChzZXR0aW5nc19wYWNrLCBzY29wZSwgb3B0cykge1xuXHRcdGlmICghc2V0dGluZ3NfcGFjayB8fCB0eXBlb2Ygc2V0dGluZ3NfcGFjayAhPT0gJ29iamVjdCcpIHJldHVybjtcblx0XHRpZiAoIXNldHRpbmdzX3BhY2sub3B0aW9ucyB8fCB0eXBlb2Ygc2V0dGluZ3NfcGFjay5vcHRpb25zICE9PSAnb2JqZWN0JykgcmV0dXJuOyAvLyBzdHJpY3QgT3B0aW9uIEFcblx0XHRzdHJpcF9mb3JtX3N0eWxlX29wdGlvbnNfZnJvbV9wYWNrKHNldHRpbmdzX3BhY2spO1xuXHRcdGFwcGx5X2ZsYXRfc2V0dGluZ3Moc2V0dGluZ3NfcGFjay5vcHRpb25zLCBzY29wZSB8fCAnZm9ybScsIG9wdHMpO1xuXHR9O1xuXG5cdGFwaS5yZXNldF9jdXN0b21fYXBwZWFyYW5jZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRjb25zdCBkZWZhdWx0cyA9IGdldF9kZWZhdWx0X2N1c3RvbV9hcHBlYXJhbmNlX3NldHRpbmdzKCk7XG5cblx0XHRpZiAoICEgbGFzdF9zZXR0aW5nc19wYWNrIHx8IHR5cGVvZiBsYXN0X3NldHRpbmdzX3BhY2sgIT09ICdvYmplY3QnICkge1xuXHRcdFx0bGFzdF9zZXR0aW5nc19wYWNrID0geyBvcHRpb25zOiB7fSwgY3NzX3ZhcnM6IHt9IH07XG5cdFx0fVxuXHRcdGlmICggISBsYXN0X3NldHRpbmdzX3BhY2sub3B0aW9ucyB8fCB0eXBlb2YgbGFzdF9zZXR0aW5nc19wYWNrLm9wdGlvbnMgIT09ICdvYmplY3QnICkge1xuXHRcdFx0bGFzdF9zZXR0aW5nc19wYWNrLm9wdGlvbnMgPSB7fTtcblx0XHR9XG5cdFx0T2JqZWN0LmtleXMoIGRlZmF1bHRzICkuZm9yRWFjaCggZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0bGFzdF9zZXR0aW5nc19wYWNrLm9wdGlvbnNba2V5XSA9IGRlZmF1bHRzW2tleV07XG5cdFx0fSApO1xuXG5cdFx0YXBwbHlfZmxhdF9zZXR0aW5ncyggZGVmYXVsdHMsICdnbG9iYWwnLCB7IHRyaWdnZXJfY2hhbmdlOiB0cnVlIH0gKTtcblx0XHRpbml0X2NvbG9yaXNfcGlja2VycyggZCApO1xuXG5cdFx0aWYgKCB3LldQQkNfQkZCX1NldHRpbmdzX0VmZmVjdHMgJiYgdHlwZW9mIHcuV1BCQ19CRkJfU2V0dGluZ3NfRWZmZWN0cy5hcHBseV9hbGwgPT09ICdmdW5jdGlvbicgKSB7XG5cdFx0XHR3LldQQkNfQkZCX1NldHRpbmdzX0VmZmVjdHMuYXBwbHlfYWxsKCBkZWZhdWx0cywgeyBzb3VyY2U6ICdyZXNldC1jdXN0b20tYXBwZWFyYW5jZScsIG9wdGlvbnM6IGRlZmF1bHRzIH0gKTtcblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0ZC5kaXNwYXRjaEV2ZW50KCBuZXcgQ3VzdG9tRXZlbnQoICd3cGJjOmJmYjpmb3JtX3NldHRpbmdzOmNoYW5nZWQnLCB7XG5cdFx0XHRcdGJ1YmJsZXM6IHRydWUsXG5cdFx0XHRcdGRldGFpbCA6IHtcblx0XHRcdFx0XHRzb3VyY2UgIDogJ3Jlc2V0LWN1c3RvbS1hcHBlYXJhbmNlJyxcblx0XHRcdFx0XHRzZXR0aW5nczogeyBvcHRpb25zOiBPYmplY3QuYXNzaWduKCB7fSwgZGVmYXVsdHMgKSB9XG5cdFx0XHRcdH1cblx0XHRcdH0gKSApO1xuXHRcdH0gY2F0Y2ggKCBfZSApIHt9XG5cdH07XG5cclxuXHQvKipcclxuXHQgKiBDb2xsZWN0IGN1cnJlbnQgdmFsdWVzIChmbGF0IG9iamVjdCkuXHJcblx0ICovXHJcblx0YXBpLmNvbGxlY3QgPSBmdW5jdGlvbiAoc2NvcGUpIHtcclxuXHRcdGNvbnN0IG91dCA9IHt9O1xyXG5cclxuXHRcdGZpbmRfcm93cyhzY29wZSB8fCAnZm9ybScpLmZvckVhY2goZnVuY3Rpb24gKHJvdykge1xyXG5cdFx0XHRjb25zdCBrZXkgID0gU3RyaW5nKHJvdy5nZXRBdHRyaWJ1dGUoJ2RhdGEta2V5JykgfHwgJycpO1xyXG5cdFx0XHRjb25zdCB0eXBlID0gU3RyaW5nKHJvdy5nZXRBdHRyaWJ1dGUoJ2RhdGEtdHlwZScpIHx8ICcnKTtcclxuXHRcdFx0aWYgKCFrZXkpIHJldHVybjtcclxuXHJcblx0XHRcdGlmICh0eXBlID09PSAncmFkaW8nKSB7XHJcblx0XHRcdFx0Y29uc3Qgd3JhcCA9IHJvdy5xdWVyeVNlbGVjdG9yKCcud3BiY19iZmJfX2Zvcm1fc2V0dGluZ19yYWRpb1tkYXRhLXdwYmMtYmZiLWZzLWNvbnRyb2xpZF0nKTtcclxuXHRcdFx0XHRjb25zdCBjb250cm9sX2lkID0gd3JhcCA/IFN0cmluZyh3cmFwLmdldEF0dHJpYnV0ZSgnZGF0YS13cGJjLWJmYi1mcy1jb250cm9saWQnKSB8fCAnJykgOiAnJztcclxuXHRcdFx0XHRpZiAoIWNvbnRyb2xfaWQpIHJldHVybjtcclxuXHJcblx0XHRcdFx0Y29uc3QgY2hlY2tlZCA9IHJvdy5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPVwicmFkaW9cIl1bbmFtZT1cIicgKyBjc3NfZXNjYXBlKGNvbnRyb2xfaWQpICsgJ1wiXTpjaGVja2VkJyk7XHJcblx0XHRcdFx0b3V0W2tleV0gPSBjaGVja2VkID8gU3RyaW5nKGNoZWNrZWQudmFsdWUpIDogJyc7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAodHlwZSA9PT0gJ3RvZ2dsZScpIHtcclxuXHRcdFx0XHRjb25zdCBjaGVja2JveCA9XHJcblx0XHRcdFx0XHRyb3cucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdW2RhdGEtd3BiYy1iZmItZnMtdHlwZT1cInRvZ2dsZVwiXScpIHx8XHJcblx0XHRcdFx0XHRyb3cucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdJyk7XHJcblx0XHRcdFx0b3V0W2tleV0gPSBjaGVja2JveCAmJiBjaGVja2JveC5jaGVja2VkID8gJ09uJyA6ICdPZmYnO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKHR5cGUgPT09ICdzZWxlY3QnKSB7XHJcblx0XHRcdFx0Y29uc3Qgc2VsZWN0ID0gcm93LnF1ZXJ5U2VsZWN0b3IoJ3NlbGVjdCcpO1xyXG5cdFx0XHRcdG91dFtrZXldID0gc2VsZWN0ID8gU3RyaW5nKHNlbGVjdC52YWx1ZSkgOiAnJztcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICh0eXBlID09PSAnbGVuZ3RoJykge1xuXHRcdFx0XHRjb25zdCBoaWRkZW4gPSByb3cucXVlcnlTZWxlY3RvcignaW5wdXRbZGF0YS13cGJjLWJmYi1mcy10eXBlPVwibGVuZ3RoXCJdJyk7XG5cdFx0XHRcdG91dFtrZXldID0gaGlkZGVuID8gU3RyaW5nKGhpZGRlbi52YWx1ZSB8fCAnJykgOiAnJztcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodHlwZSA9PT0gJ3NwYWNpbmcnKSB7XG5cdFx0XHRcdG91dFtrZXldID0gZ2V0X3NwYWNpbmdfdmFsdWUocm93KTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodHlwZSA9PT0gJ3JhbmdlJykge1xyXG5cdFx0XHRcdGNvbnN0IHdyaXRlciA9XHJcblx0XHRcdFx0XHRyb3cucXVlcnlTZWxlY3RvcignaW5wdXRbZGF0YS13cGJjX3NsaWRlcl9yYW5nZV93cml0ZXJdJykgfHxcclxuXHRcdFx0XHRcdHJvdy5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPVwibnVtYmVyXCJdJykgfHxcclxuXHRcdFx0XHRcdHJvdy5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPVwicmFuZ2VcIl0nKTtcclxuXHRcdFx0XHRvdXRba2V5XSA9IHdyaXRlciA/IFN0cmluZyh3cml0ZXIudmFsdWUgfHwgJycpIDogJyc7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNvbnN0IGNvbnRyb2wgPSByb3cucXVlcnlTZWxlY3RvcignaW5wdXQsdGV4dGFyZWEnKTtcclxuXHRcdFx0b3V0W2tleV0gPSBjb250cm9sID8gU3RyaW5nKGNvbnRyb2wudmFsdWUgfHwgJycpIDogJyc7XHJcblx0XHR9KTtcclxuXHJcblx0XHRyZXR1cm4gb3V0O1xuXHR9O1xuXG5cdGZ1bmN0aW9uIHBhcnNlX3NwYWNpbmdfdmFsdWUodmFsdWUpIHtcblx0XHRjb25zdCBmYWxsYmFjayA9IHsgdmVydGljYWw6ICcxMCcsIGhvcml6b250YWw6ICczMCcsIGNvbWJpbmVkOiAnMTBweCAzMHB4JyB9O1xuXHRcdGNvbnN0IG1hdGNoZXMgPSBTdHJpbmcodmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWUpLm1hdGNoKC8tP1xcZCsoPzpcXC5cXGQrKT8vZykgfHwgW107XG5cdFx0bGV0IHZlcnRpY2FsID0gbWF0Y2hlc1swXSAhPSBudWxsID8gU3RyaW5nKG1hdGNoZXNbMF0pIDogZmFsbGJhY2sudmVydGljYWw7XG5cdFx0bGV0IGhvcml6b250YWwgPSBtYXRjaGVzWzFdICE9IG51bGwgPyBTdHJpbmcobWF0Y2hlc1sxXSkgOiB2ZXJ0aWNhbDtcblxuXHRcdGlmIChpc05hTihOdW1iZXIodmVydGljYWwpKSkge1xuXHRcdFx0dmVydGljYWwgPSBmYWxsYmFjay52ZXJ0aWNhbDtcblx0XHR9XG5cdFx0aWYgKGlzTmFOKE51bWJlcihob3Jpem9udGFsKSkpIHtcblx0XHRcdGhvcml6b250YWwgPSBmYWxsYmFjay5ob3Jpem9udGFsO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHR2ZXJ0aWNhbCAgOiB2ZXJ0aWNhbCxcblx0XHRcdGhvcml6b250YWw6IGhvcml6b250YWwsXG5cdFx0XHRjb21iaW5lZCAgOiB2ZXJ0aWNhbCArICdweCAnICsgaG9yaXpvbnRhbCArICdweCdcblx0XHR9O1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0X3NwYWNpbmdfdmFsdWUocm93KSB7XG5cdFx0Y29uc3QgZ3JvdXAgPSByb3cgPyByb3cucXVlcnlTZWxlY3RvcignLndwYmNfc3BhY2luZ19ncm91cCcpIDogbnVsbDtcblx0XHRjb25zdCB2ZXJ0aWNhbF9pbnB1dCA9IGdyb3VwID8gZ3JvdXAucXVlcnlTZWxlY3RvcignaW5wdXRbZGF0YS13cGJjX3NwYWNpbmdfdmVydGljYWxdJykgOiBudWxsO1xuXHRcdGNvbnN0IGhvcml6b250YWxfaW5wdXQgPSBncm91cCA/IGdyb3VwLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W2RhdGEtd3BiY19zcGFjaW5nX2hvcml6b250YWxdJykgOiBudWxsO1xuXHRcdGNvbnN0IHdyaXRlciA9IGdyb3VwID8gZ3JvdXAucXVlcnlTZWxlY3RvcignaW5wdXRbZGF0YS13cGJjX3NwYWNpbmdfd3JpdGVyXScpIDogbnVsbDtcblx0XHRjb25zdCB2ZXJ0aWNhbCA9IHZlcnRpY2FsX2lucHV0ID8gU3RyaW5nKHZlcnRpY2FsX2lucHV0LnZhbHVlIHx8ICcwJykgOiAnMCc7XG5cdFx0Y29uc3QgaG9yaXpvbnRhbCA9IGhvcml6b250YWxfaW5wdXQgPyBTdHJpbmcoaG9yaXpvbnRhbF9pbnB1dC52YWx1ZSB8fCB2ZXJ0aWNhbCkgOiB2ZXJ0aWNhbDtcblx0XHRjb25zdCBjb21iaW5lZCA9IHBhcnNlX3NwYWNpbmdfdmFsdWUodmVydGljYWwgKyAncHggJyArIGhvcml6b250YWwgKyAncHgnKS5jb21iaW5lZDtcblxuXHRcdGlmICh3cml0ZXIpIHtcblx0XHRcdHdyaXRlci52YWx1ZSA9IGNvbWJpbmVkO1xuXHRcdH1cblxuXHRcdHJldHVybiBjb21iaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZS1hcHBseSBsYXN0IHJlY2VpdmVkIHNldHRpbmdzICh1c2VmdWwgYWZ0ZXIgRE9NIHJlLXJlbmRlcikuXG5cdCAqL1xyXG5cdGFwaS5yZWFwcGx5X2xhc3QgPSBmdW5jdGlvbiAoKSB7XHJcblx0XHRpZiAoIWxhc3Rfc2V0dGluZ3NfcGFjaykgcmV0dXJuO1xyXG5cdFx0YXBpLmFwcGx5KGxhc3Rfc2V0dGluZ3NfcGFjaywgJ2Zvcm0nLCB7IHRyaWdnZXJfY2hhbmdlOiB0cnVlIH0pO1xyXG5cdH07XHJcblxyXG5cdGFwaS5pbml0ID0gZnVuY3Rpb24gKCkge1xuXHRcdGluaXRfY29sb3Jpc19waWNrZXJzKGQpO1xuXG5cdFx0Ly8gSWYgYXBwbHkgZXZlbnQgZmlyZWQgYmVmb3JlIGluaXQsIHRyeSBhZ2FpbiBub3cuXG5cdFx0aWYgKGxhc3Rfc2V0dGluZ3NfcGFjaykgc2NoZWR1bGVfYXBwbHlfcmV0cnkoKTtcblx0fTtcblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0Ly8gRE9NIEV2ZW50cyAoQUpBWCBsYXllcilcclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHQvLyBTYXZlOiBsZXQgbW9kdWxlcyBjb250cmlidXRlIGludG8geyBvcHRpb25zOnt9LCBjc3NfdmFyczp7fSB9XHJcblx0ZC5hZGRFdmVudExpc3RlbmVyKCd3cGJjOmJmYjpmb3JtX3NldHRpbmdzOmNvbGxlY3QnLCBmdW5jdGlvbiAoZSkge1xyXG5cdFx0Y29uc3QgZGV0YWlsID0gKGUgJiYgZS5kZXRhaWwpID8gZS5kZXRhaWwgOiB7fTtcclxuXHRcdGNvbnN0IHRhcmdldF9wYWNrID0gZGV0YWlsLnNldHRpbmdzO1xyXG5cclxuXHRcdGlmICghdGFyZ2V0X3BhY2sgfHwgdHlwZW9mIHRhcmdldF9wYWNrICE9PSAnb2JqZWN0JykgcmV0dXJuO1xyXG5cclxuXHRcdC8vIE9wdGlvbiBBOiB3cml0ZSBpbnRvIHRhcmdldF9wYWNrLm9wdGlvbnNcclxuXHRcdGlmICghdGFyZ2V0X3BhY2sub3B0aW9ucyB8fCB0eXBlb2YgdGFyZ2V0X3BhY2sub3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcclxuXHRcdFx0dGFyZ2V0X3BhY2sub3B0aW9ucyA9IHt9O1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGNvbGxlY3RlZCA9IGFwaS5jb2xsZWN0KCdmb3JtJyk7XG5cdFx0T2JqZWN0LmtleXMoY29sbGVjdGVkKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG5cdFx0XHR0YXJnZXRfcGFjay5vcHRpb25zW2tdID0gY29sbGVjdGVkW2tdO1xuXHRcdH0pO1xuXHRcdHN0cmlwX2Zvcm1fc3R5bGVfb3B0aW9uc19mcm9tX3BhY2sodGFyZ2V0X3BhY2spO1xuXHR9KTtcblxyXG5cdC8vIExvYWQ6IHJlY2VpdmUgc2V0dGluZ3MgZnJvbSBBSkFYIGFuZCBhcHBseS5cclxuXHRkLmFkZEV2ZW50TGlzdGVuZXIoJ3dwYmM6YmZiOmZvcm1fc2V0dGluZ3M6YXBwbHknLCBmdW5jdGlvbiAoZSkge1xuXHRcdGNvbnN0IGRldGFpbCA9IChlICYmIGUuZGV0YWlsKSA/IGUuZGV0YWlsIDoge307XG5cblx0XHRsYXN0X3NldHRpbmdzX3BhY2sgPSBkZXRhaWwuc2V0dGluZ3MgfHwgbnVsbDtcblxuXHRcdHJldHJ5X2NvdW50ID0gMDtcblx0XHRzY2hlZHVsZV9hcHBseV9yZXRyeSgpO1xuXHR9KTtcblxuXHRkLmFkZEV2ZW50TGlzdGVuZXIoICdjbGljaycsIGZ1bmN0aW9uIChlKSB7XG5cdFx0Y29uc3QgYnRuID0gZSAmJiBlLnRhcmdldCAmJiBlLnRhcmdldC5jbG9zZXN0ID8gZS50YXJnZXQuY2xvc2VzdCggJ1tkYXRhLXdwYmMtYmZiLXJlc2V0LWN1c3RvbS1hcHBlYXJhbmNlXScgKSA6IG51bGw7XG5cdFx0aWYgKCAhIGJ0biApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0YXBpLnJlc2V0X2N1c3RvbV9hcHBlYXJhbmNlKCk7XG5cdH0sIGZhbHNlICk7XG5cclxuXHRmdW5jdGlvbiBzY2hlZHVsZV9hcHBseV9yZXRyeSgpIHtcclxuXHRcdGlmIChyYWZfaWQpIHJldHVybjtcclxuXHJcblx0XHRyYWZfaWQgPSB3LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XHJcblx0XHRcdHJhZl9pZCA9IDA7XHJcblxyXG5cdFx0XHQvLyBJZiBzZXR0aW5ncyBVSSBub3QgcHJlc2VudCB5ZXQsIHJldHJ5IGEgZmV3IGZyYW1lcy5cclxuXHRcdFx0aWYgKCFoYXNfYW55X3Jvd3MoKSkge1xyXG5cdFx0XHRcdHJldHJ5X2NvdW50Kys7XHJcblx0XHRcdFx0aWYgKHJldHJ5X2NvdW50IDwgcmV0cnlfbWF4KSBzY2hlZHVsZV9hcHBseV9yZXRyeSgpO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0YXBpLnJlYXBwbHlfbGFzdCgpO1xuXHRcdFx0aW5pdF9jb2xvcmlzX3BpY2tlcnMoZCk7XG5cdFx0fSk7XG5cdH1cblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0Ly8gT3B0aW9uYWwgQnVpbGRlciB0aW1pbmcgaG9vayAoU1RSVUNUVVJFX0xPQURFRCkgLT4gcmVhcHBseV9sYXN0KClcclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRmdW5jdGlvbiBiaW5kX2J1aWxkZXJfdGltaW5nX2hvb2soYnVpbGRlcl9pbnN0YW5jZSkge1xyXG5cdFx0Y29uc3QgY29yZSA9IHcuV1BCQ19CRkJfQ29yZTtcclxuXHRcdGNvbnN0IGV2ZW50cyA9IChjb3JlICYmIGNvcmUuV1BCQ19CRkJfRXZlbnRzKSA/IGNvcmUuV1BCQ19CRkJfRXZlbnRzIDogKHcuV1BCQ19CRkJfRXZlbnRzIHx8IG51bGwpO1xyXG5cclxuXHJcblx0XHRpZiAoIWJ1aWxkZXJfaW5zdGFuY2UgfHwgIWJ1aWxkZXJfaW5zdGFuY2UuYnVzIHx8ICFldmVudHMgfHwgIWV2ZW50cy5TVFJVQ1RVUkVfTE9BREVEKSByZXR1cm47XHJcblxyXG5cdFx0YnVpbGRlcl9pbnN0YW5jZS5idXMub24oZXZlbnRzLlNUUlVDVFVSRV9MT0FERUQsIGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0Ly8gQnVpbGRlciBtYXkgcmUtcmVuZGVyIHNldHRpbmdzIHBhbmVsIGFmdGVyIHN0cnVjdHVyZSBsb2FkLlxyXG5cdFx0XHQvLyBSZS1hcHBseSBsYXN0IHNldHRpbmdzIHBhY2sgKGlmIGFueSkuXHJcblx0XHRcdHJldHJ5X2NvdW50ID0gMDtcclxuXHRcdFx0c2NoZWR1bGVfYXBwbHlfcmV0cnkoKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0aWYgKHcud3BiY19iZmJfYXBpICYmIHcud3BiY19iZmJfYXBpLnJlYWR5ICYmIHR5cGVvZiB3LndwYmNfYmZiX2FwaS5yZWFkeS50aGVuID09PSAnZnVuY3Rpb24nKSB7XHJcblx0XHR3LndwYmNfYmZiX2FwaS5yZWFkeS50aGVuKGJpbmRfYnVpbGRlcl90aW1pbmdfaG9vayk7XHJcblx0fSBlbHNlIHtcclxuXHRcdHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyBpZiAody5fX0IpIHsgYmluZF9idWlsZGVyX3RpbWluZ19ob29rKCB3Ll9fQiApOyB9IH0sIDApO1xyXG5cdH1cclxuXHJcblx0Ly8gRE9NIHJlYWR5IGluaXQuXHJcblx0aWYgKGQucmVhZHlTdGF0ZSA9PT0gJ2xvYWRpbmcnKSBkLmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBhcGkuaW5pdCk7XHJcblx0ZWxzZSBhcGkuaW5pdCgpO1xyXG5cclxufSkod2luZG93LCBkb2N1bWVudCk7XHJcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBLENBQUMsVUFBVUEsQ0FBQyxFQUFFQyxDQUFDLEVBQUU7RUFDaEIsWUFBWTs7RUFFWjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNDLE1BQU1DLEdBQUcsR0FBSUYsQ0FBQyxDQUFDRyxxQkFBcUIsR0FBR0gsQ0FBQyxDQUFDRyxxQkFBcUIsSUFBSSxDQUFDLENBQUU7O0VBRXJFO0VBQ0EsSUFBSUMsa0JBQWtCLEdBQUcsSUFBSTs7RUFFN0I7RUFDQSxJQUFJQyxNQUFNLEdBQVEsQ0FBQztFQUNuQixJQUFJQyxXQUFXLEdBQUcsQ0FBQztFQUNuQixNQUFNQyxT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 | |
| 660 | +//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jbHVkZXMvcGFnZS1mb3JtLWJ1aWxkZXIvZm9ybS1zZXR0aW5ncy9fb3V0L3NldHRpbmdzLmpzIiwibmFtZXMiOlsidyIsImQiLCJhcGkiLCJXUEJDX0JGQl9Gb3JtU2V0dGluZ3MiLCJwZW5kaW5nX3RpbWVfcGlja2VyX3NraW5fYnV0dG9uIiwicHJldmlvdXNfdGltZV9waWNrZXJfc2tpbl91cmwiLCJsYXN0X3NldHRpbmdzX3BhY2siLCJyYWZfaWQiLCJyZXRyeV9jb3VudCIsInJldHJ5X21heCIsImZhbGxiYWNrX2Zvcm1fc3R5bGVfb3B0aW9uX2tleXMiLCJxdWVyeV9hbGwiLCJyb290Iiwic2VsZWN0b3IiLCJBcnJheSIsImZyb20iLCJxdWVyeVNlbGVjdG9yQWxsIiwiY3NzX2VzY2FwZSIsInZhbHVlIiwidiIsIlN0cmluZyIsIkNTUyIsImVzY2FwZSIsInJlcGxhY2UiLCJpc19vbiIsInRyaW0iLCJ0b0xvd2VyQ2FzZSIsInNldF9pbml0aWFsX2F0dHIiLCJlbCIsInNldEF0dHJpYnV0ZSIsInRyaWdnZXJfY2hhbmdlIiwiZGlzcGF0Y2hFdmVudCIsIkV2ZW50IiwiYnViYmxlcyIsIl8iLCJ0cmlnZ2VyX2lucHV0IiwiZmluZF9yb3dzIiwic2NvcGUiLCJyb3dzIiwiZmlsdGVyIiwicm93IiwiZ2V0QXR0cmlidXRlIiwiaGFzX2FueV9yb3dzIiwibGVuZ3RoIiwiaW5pdF9jb2xvcmlzX3BpY2tlcnMiLCJDb2xvcmlzIiwiaW5wdXRzIiwiZm9yRWFjaCIsImlucHV0IiwiY2xhc3NMaXN0IiwiY29udGFpbnMiLCJhZGQiLCJhbHBoYSIsImZvcm1hdCIsInRoZW1lTW9kZSIsIm9uQ2hhbmdlIiwiY29sb3IiLCJDdXN0b21FdmVudCIsImRldGFpbCIsImN1cnJlbnRFbCIsIl9lIiwiZSIsImNvbnNvbGUiLCJ3YXJuIiwiZ2V0X2RlZmF1bHRfY3VzdG9tX2FwcGVhcmFuY2Vfc2V0dGluZ3MiLCJsb2NhbGl6ZWRfY3VzdG9tX3N0eWxlIiwid3BiY19iZmJfc2V0dGluZ3NfdmFycyIsImN1c3RvbV9mb3JtX3N0eWxlX2RlZmF1bHRzIiwibG9jYWxpemVkX2Zvcm1fYWNjZW50IiwiZm9ybV9hY2NlbnRfZGVmYXVsdHMiLCJPYmplY3QiLCJhc3NpZ24iLCJib29raW5nX2Zvcm1fYWNjZW50X2VuYWJsZWQiLCJib29raW5nX2Zvcm1fY3VzdG9tX2JhY2tncm91bmRfY29sb3IiLCJib29raW5nX2Zvcm1fY3VzdG9tX2JvcmRlcl9jb2xvciIsImJvb2tpbmdfZm9ybV9jdXN0b21fYm9yZGVyX3dpZHRoIiwiYm9va2luZ19mb3JtX2N1c3RvbV9ib3JkZXJfcmFkaXVzIiwiYm9va2luZ19mb3JtX2N1c3RvbV9wYWRkaW5nX3ZlcnRpY2FsIiwiYm9va2luZ19mb3JtX2N1c3RvbV9wYWRkaW5nX2hvcml6b250YWwiLCJib29raW5nX2Zvcm1fY3VzdG9tX3RleHRfY29sb3IiLCJib29raW5nX2Zvcm1fY3VzdG9tX2ZpZWxkX2JhY2tncm91bmRfY29sb3IiLCJib29raW5nX2Zvcm1fY3VzdG9tX2ZpZWxkX3RleHRfY29sb3IiLCJib29raW5nX2Zvcm1fY3VzdG9tX2ZpZWxkX2JvcmRlcl9jb2xvciIsImJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2JhY2tncm91bmRfY29sb3IiLCJib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl90ZXh0X2NvbG9yIiwiYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fYm9yZGVyX2NvbG9yIiwiYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25faG92ZXJfYmFja2dyb3VuZF9jb2xvciIsImJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2hvdmVyX3RleHRfY29sb3IiLCJib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ob3Zlcl9ib3JkZXJfY29sb3IiLCJib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25fYmFja2dyb3VuZF9jb2xvciIsImJvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl90ZXh0X2NvbG9yIiwiYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2JvcmRlcl9jb2xvciIsImJvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9ob3Zlcl9iYWNrZ3JvdW5kX2NvbG9yIiwiYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2hvdmVyX3RleHRfY29sb3IiLCJib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25faG92ZXJfYm9yZGVyX2NvbG9yIiwiYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fYm9yZGVyX3dpZHRoIiwiYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fYm9yZGVyX3JhZGl1cyIsImdldF9mb3JtX3N0eWxlX29wdGlvbl9rZXlzIiwibG9jYWxpemVkIiwiaXNBcnJheSIsImZvcm1fc3R5bGVfb3B0aW9uX2tleXMiLCJzdHJpcF9mb3JtX3N0eWxlX29wdGlvbnNfZnJvbV9wYWNrIiwic2V0dGluZ3NfcGFjayIsIm9wdGlvbnMiLCJrZXkiLCJzZXRfdmFsdWVfZm9yX3JvdyIsIm9wdHMiLCJyb3dfdHlwZSIsInJvd19rZXkiLCJkb190cmlnZ2VyX2V2ZW50cyIsIndyYXAiLCJxdWVyeVNlbGVjdG9yIiwiY29udHJvbF9pZCIsInRhcmdldF92YWx1ZSIsInJhZGlvcyIsImNoZWNrZWRfcmFkaW8iLCJyYWRpbyIsInNob3VsZF9jaGVjayIsImNoZWNrZWQiLCJjaG9pY2UiLCJjbG9zZXN0IiwidG9nZ2xlIiwiY2hlY2tib3giLCJzZWxlY3QiLCJ3cml0ZXIiLCJjb21iaW5lZCIsImdyb3VwIiwidmVydGljYWxfaW5wdXQiLCJob3Jpem9udGFsX2lucHV0IiwicGFyc2VkIiwicGFyc2Vfc3BhY2luZ192YWx1ZSIsInZlcnRpY2FsIiwiaG9yaXpvbnRhbCIsImNvbnRyb2wiLCJhcHBseV9mbGF0X3NldHRpbmdzIiwiZmxhdF9zZXR0aW5ncyIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImFwcGx5IiwicmVzZXRfY3VzdG9tX2FwcGVhcmFuY2UiLCJkZWZhdWx0cyIsImNzc192YXJzIiwia2V5cyIsIldQQkNfQkZCX1NldHRpbmdzX0VmZmVjdHMiLCJhcHBseV9hbGwiLCJzb3VyY2UiLCJzZXR0aW5ncyIsImNvbGxlY3QiLCJvdXQiLCJ0eXBlIiwiaGlkZGVuIiwiZ2V0X3NwYWNpbmdfdmFsdWUiLCJmYWxsYmFjayIsIm1hdGNoZXMiLCJtYXRjaCIsImlzTmFOIiwiTnVtYmVyIiwicmVhcHBseV9sYXN0IiwiaW5pdCIsInNjaGVkdWxlX2FwcGx5X3JldHJ5IiwiYWRkRXZlbnRMaXN0ZW5lciIsInRhcmdldF9wYWNrIiwiY29sbGVjdGVkIiwiayIsImJ0biIsInRhcmdldCIsInByZXZlbnREZWZhdWx0Iiwic3dpdGNoX3RpbWVfcGlja2VyX3RvX2F1dG9tYXRpYyIsImJ1dHRvbiIsImF1dG9tYXRpY19za2luIiwiY3VycmVudF9za2luIiwiYXV0b21hdGljX3VybCIsInNsaWNlIiwid3BiY19zYXZlX29wdGlvbl9mcm9tX2VsZW1lbnQiLCJ0aW1lX2FwaSIsIldQQkNfQkZCX0NvcmUiLCJUaW1lIiwiZ2V0RWxlbWVudEJ5SWQiLCJhcHBseV9waWNrZXJfc2tpbl91cmwiLCJ3cGJjX19jc3NfX2NoYW5nZV9za2luIiwid3BiY19iZmJfdGltZV9waWNrZXJfc2tpbl9zYXZlZCIsInVpX3NldF9waWNrZXJfc2tpbl92YWx1ZSIsImpRdWVyeSIsIm9uIiwiZXZlbnQiLCJyZXNwb25zZSIsInN1Y2Nlc3MiLCJwcmV2aW91c19za2luIiwiYXBwbHlfYWNjZW50X3RvX2NvbXBvbmVudHMiLCJjb2xvcl9jb250cm9sIiwic3RhdHVzIiwiaTE4biIsImRlZmF1bHRfYXBwZWFyYW5jZSIsImFjY2VudF9jb2xvciIsInRlc3QiLCJib29raW5nX2Zvcm1fYWNjZW50X2NvbG9yIiwidGV4dENvbnRlbnQiLCJhY2NlbnRfZW5hYmxlX2ZpcnN0IiwiZGlzYWJsZWQiLCJhcHBseV90b19idWlsZGVyIiwiYnVpbGRlciIsIndwYmNfYmZiIiwibWF0Y2hlZCIsInVwZGF0ZWQiLCJ0aW1lX3BpY2tlcl9zYXZlX3N0YXJ0ZWQiLCJhY2NlbnRfYXBwbGllZF9vbmUiLCJhY2NlbnRfYXBwbGllZF9tYW55IiwiYWNjZW50X2FscmVhZHlfYXBwbGllZCIsImFjY2VudF9ub19lbGVtZW50cyIsImFjY2VudF90aW1lX3BpY2tlcl9hdXRvbWF0aWMiLCJfZTIiLCJfYW5ub3VuY2UiLCJhY2NlbnRfYXBwbGllZF9hbm5vdW5jZW1lbnQiLCJ3cGJjX2JmYl9hcGkiLCJyZWFkeSIsInRoZW4iLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJiaW5kX2J1aWxkZXJfdGltaW5nX2hvb2siLCJidWlsZGVyX2luc3RhbmNlIiwiY29yZSIsImV2ZW50cyIsIldQQkNfQkZCX0V2ZW50cyIsImJ1cyIsIlNUUlVDVFVSRV9MT0FERUQiLCJzZXRUaW1lb3V0IiwiX19CIiwicmVhZHlTdGF0ZSIsIndpbmRvdyIsImRvY3VtZW50Il0sInNvdXJjZXMiOlsiaW5jbHVkZXMvcGFnZS1mb3JtLWJ1aWxkZXIvZm9ybS1zZXR0aW5ncy9fc3JjL3NldHRpbmdzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGdsb2JhbHMgd2luZG93LCBkb2N1bWVudCAqL1xyXG4oZnVuY3Rpb24gKHcsIGQpIHtcclxuXHQndXNlIHN0cmljdCc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEJGQiBGb3JtIFNldHRpbmdzIFVJIGJyaWRnZS5cclxuXHQgKlxyXG5cdCAqIExpc3RlbnMgdG86XHJcblx0ICogLSB3cGJjOmJmYjpmb3JtX3NldHRpbmdzOmFwcGx5ICAgKGZyb20gQUpBWCBsb2FkKSAgLT4gYXBwbHkgdG8gY29udHJvbHNcclxuXHQgKiAtIHdwYmM6YmZiOmZvcm1fc2V0dGluZ3M6Y29sbGVjdCAoZnJvbSBBSkFYIHNhdmUpICAtPiBjb2xsZWN0IGZyb20gY29udHJvbHNcclxuXHQgKlxyXG5cdCAqIE9wdGlvbmFsOlxyXG5cdCAqIC0gcmUtYXBwbHkgYWZ0ZXIgQnVpbGRlciBTVFJVQ1RVUkVfTE9BREVEICh0aW1pbmcgaG9vayBvbmx5KVxyXG5cdCAqL1xyXG5cdGNvbnN0IGFwaSA9ICh3LldQQkNfQkZCX0Zvcm1TZXR0aW5ncyA9IHcuV1BCQ19CRkJfRm9ybVNldHRpbmdzIHx8IHt9KTtcblx0bGV0IHBlbmRpbmdfdGltZV9waWNrZXJfc2tpbl9idXR0b24gPSBudWxsO1xuXHRsZXQgcHJldmlvdXNfdGltZV9waWNrZXJfc2tpbl91cmwgPSAnJztcblxyXG5cdC8vIExhc3QgcmVjZWl2ZWQgc2V0dGluZ3MgcGFjayAoZnJvbSBBSkFYKS5cclxuXHRsZXQgbGFzdF9zZXR0aW5nc19wYWNrID0gbnVsbDtcclxuXHJcblx0Ly8gU21hbGwgcmV0cnksIGJlY2F1c2UgRE9NIGNhbiBiZSByZS1yZW5kZXJlZCBhZnRlciBhcHBseSBldmVudC5cclxuXHRsZXQgcmFmX2lkICAgICAgPSAwO1xyXG5cdGxldCByZXRyeV9jb3VudCA9IDA7XG5cdGNvbnN0IHJldHJ5X21heCA9IDIwO1xuXHRjb25zdCBmYWxsYmFja19mb3JtX3N0eWxlX29wdGlvbl9rZXlzID0gW1xuXHRcdCdib29raW5nX2Zvcm1fc3R5bGUnLFxuXHRcdCdib29raW5nX2Zvcm1fYWNjZW50X2VuYWJsZWQnLFxuXHRcdCdib29raW5nX2Zvcm1fYWNjZW50X2NvbG9yJyxcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9iYWNrZ3JvdW5kX2NvbG9yJyxcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9ib3JkZXJfY29sb3InLFxuXHRcdCdib29raW5nX2Zvcm1fY3VzdG9tX2JvcmRlcl93aWR0aCcsXG5cdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fYm9yZGVyX3JhZGl1cycsXG5cdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fcGFkZGluZ192ZXJ0aWNhbCcsXG5cdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fcGFkZGluZ19ob3Jpem9udGFsJyxcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV90ZXh0X2NvbG9yJyxcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9maWVsZF9iYWNrZ3JvdW5kX2NvbG9yJyxcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9maWVsZF90ZXh0X2NvbG9yJyxcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9maWVsZF9ib3JkZXJfY29sb3InLFxuXHRcdCdib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9iYWNrZ3JvdW5kX2NvbG9yJyxcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fdGV4dF9jb2xvcicsXG5cdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2JvcmRlcl9jb2xvcicsXG5cdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2hvdmVyX2JhY2tncm91bmRfY29sb3InLFxuXHRcdCdib29raW5nX2Zvcm1fY3VzdG9tX2J1dHRvbl9ob3Zlcl90ZXh0X2NvbG9yJyxcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9idXR0b25faG92ZXJfYm9yZGVyX2NvbG9yJyxcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2JhY2tncm91bmRfY29sb3InLFxuXHRcdCdib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25fdGV4dF9jb2xvcicsXG5cdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9ib3JkZXJfY29sb3InLFxuXHRcdCdib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25faG92ZXJfYmFja2dyb3VuZF9jb2xvcicsXG5cdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9ob3Zlcl90ZXh0X2NvbG9yJyxcblx0XHQnYm9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2hvdmVyX2JvcmRlcl9jb2xvcicsXG5cdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2JvcmRlcl93aWR0aCcsXG5cdFx0J2Jvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2JvcmRlcl9yYWRpdXMnLFxuXHRcdCdib29raW5nX2Zvcm1fdGhlbWUnLFxuXHRcdCdib29raW5nX2Zvcm1fY29udGFpbmVyX3N0eWxlJyxcblx0XHQnYm9va2luZ19mb3JtX2JhY2tncm91bmRfY29sb3InLFxuXHRcdCdib29raW5nX2Zvcm1fYm9yZGVyX2NvbG9yJyxcblx0XHQnYm9va2luZ19mb3JtX2JvcmRlcl93aWR0aCcsXG5cdFx0J2Jvb2tpbmdfZm9ybV9ib3JkZXJfcmFkaXVzJyxcblx0XHQnYm9va2luZ19mb3JtX3BhZGRpbmcnLFxuXHRcdCdib29raW5nX2Zvcm1fdGV4dF9jb2xvcicsXG5cdFx0J2Jvb2tpbmdfZm9ybV9maWVsZF9iYWNrZ3JvdW5kX2NvbG9yJyxcblx0XHQnYm9va2luZ19mb3JtX2ZpZWxkX3RleHRfY29sb3InLFxuXHRcdCdib29raW5nX2Zvcm1fZmllbGRfYm9yZGVyX2NvbG9yJ1xuXHRdO1xuXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0Ly8gU21hbGwgaGVscGVyc1xyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cdGZ1bmN0aW9uIHF1ZXJ5X2FsbChyb290LCBzZWxlY3Rvcikge1xyXG5cdFx0cmV0dXJuIEFycmF5LmZyb20oKHJvb3QgfHwgZCkucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcikpO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gY3NzX2VzY2FwZSh2YWx1ZSkge1xyXG5cdFx0Y29uc3QgdiA9IFN0cmluZyh2YWx1ZSA9PSBudWxsID8gJycgOiB2YWx1ZSk7XHJcblx0XHRpZiAody5DU1MgJiYgdHlwZW9mIHcuQ1NTLmVzY2FwZSA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHcuQ1NTLmVzY2FwZSh2KTtcclxuXHRcdHJldHVybiB2LnJlcGxhY2UoL1teYS16QS1aMC05X1xcLV0vZywgJ1xcXFwkJicpO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gaXNfb24odmFsdWUpIHtcclxuXHRcdGNvbnN0IHYgPSBTdHJpbmcodmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWUpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0cmV0dXJuICh2ID09PSAnb24nIHx8IHYgPT09ICcxJyB8fCB2ID09PSAndHJ1ZScgfHwgdiA9PT0gJ3llcycpO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gc2V0X2luaXRpYWxfYXR0cihlbCwgdmFsdWUpIHtcclxuXHRcdGlmICghZWwpIHJldHVybjtcclxuXHRcdGVsLnNldEF0dHJpYnV0ZSgnZGF0YS13cGJjLWJmYi1mcy1pbml0aWFsJywgU3RyaW5nKHZhbHVlID09IG51bGwgPyAnJyA6IHZhbHVlKSk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiB0cmlnZ2VyX2NoYW5nZShlbCkge1xyXG5cdFx0aWYgKCFlbCkgcmV0dXJuO1xyXG5cdFx0dHJ5IHsgZWwuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2NoYW5nZScsIHsgYnViYmxlczogdHJ1ZSB9KSk7IH0gY2F0Y2ggKF8pIHt9XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiB0cmlnZ2VyX2lucHV0KGVsKSB7XHJcblx0XHRpZiAoICFlbCApIHJldHVybjtcclxuXHRcdHRyeSB7IGVsLmRpc3BhdGNoRXZlbnQoIG5ldyBFdmVudCggJ2lucHV0JywgeyBidWJibGVzOiB0cnVlIH0gKSApOyB9IGNhdGNoICggXyApIHt9XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBmaW5kX3Jvd3Moc2NvcGUpIHtcclxuXHRcdGNvbnN0IHJvd3MgPSBxdWVyeV9hbGwoZCwgJy53cGJjLXNldHRpbmdbZGF0YS1rZXldJyk7XHJcblx0XHRpZiAoIXNjb3BlKSByZXR1cm4gcm93cztcclxuXHJcblx0XHRyZXR1cm4gcm93cy5maWx0ZXIoZnVuY3Rpb24gKHJvdykge1xyXG5cdFx0XHRyZXR1cm4gU3RyaW5nKHJvdy5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2NvcGUnKSB8fCAnJykgPT09IFN0cmluZyhzY29wZSk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGhhc19hbnlfcm93cygpIHtcblx0XHRyZXR1cm4gcXVlcnlfYWxsKGQsICcud3BiYy1zZXR0aW5nW2RhdGEta2V5XScpLmxlbmd0aCA+IDA7XG5cdH1cblxuXHRmdW5jdGlvbiBpbml0X2NvbG9yaXNfcGlja2Vycyhyb290KSB7XG5cdFx0aWYgKCAhIHJvb3QgfHwgISB3LkNvbG9yaXMgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgaW5wdXRzID0gcXVlcnlfYWxsKHJvb3QsICdpbnB1dFtkYXRhLXdwYmMtYmZiLWZzLXR5cGU9XCJjb2xvclwiXVtkYXRhLWNvbG9yaXNdLCBpbnB1dFtkYXRhLWluc3BlY3Rvci10eXBlPVwiY29sb3JcIl1bZGF0YS1jb2xvcmlzXScpO1xuXHRcdGlmICggISBpbnB1dHMubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlucHV0cy5mb3JFYWNoKGZ1bmN0aW9uIChpbnB1dCkge1xuXHRcdFx0aWYgKGlucHV0LmNsYXNzTGlzdC5jb250YWlucygnd3BiY19iZmJfY29sb3JpcycpKSByZXR1cm47XG5cdFx0XHRpbnB1dC5jbGFzc0xpc3QuYWRkKCd3cGJjX2JmYl9jb2xvcmlzJyk7XG5cdFx0fSk7XG5cblx0XHR0cnkge1xuXHRcdFx0dy5Db2xvcmlzKHtcblx0XHRcdFx0ZWwgICAgICAgOiAnLndwYmNfYmZiX2NvbG9yaXMnLFxuXHRcdFx0XHRhbHBoYSAgICA6IGZhbHNlLFxuXHRcdFx0XHRmb3JtYXQgICA6ICdoZXgnLFxuXHRcdFx0XHR0aGVtZU1vZGU6ICdhdXRvJyxcblx0XHRcdFx0b25DaGFuZ2UgOiBmdW5jdGlvbiAoY29sb3IsIGlucHV0KSB7XG5cdFx0XHRcdFx0aWYgKCAhIGlucHV0ICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0aW5wdXQuZGlzcGF0Y2hFdmVudCggbmV3IEN1c3RvbUV2ZW50KCAnd3BiYzpiZmI6Y29sb3JpczpjaGFuZ2UnLCB7XG5cdFx0XHRcdFx0XHRcdGJ1YmJsZXM6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGRldGFpbCA6IHtcblx0XHRcdFx0XHRcdFx0XHRjb2xvciAgICA6IGNvbG9yLFxuXHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRFbDogaW5wdXRcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSApICk7XG5cdFx0XHRcdFx0fSBjYXRjaCAoIF9lICkge31cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdXUEJDIEZvcm0gU2V0dGluZ3M6IENvbG9yaXMgaW5pdCBmYWlsZWQ6JywgZSk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0X2RlZmF1bHRfY3VzdG9tX2FwcGVhcmFuY2Vfc2V0dGluZ3MoKSB7XG5cdFx0Y29uc3QgbG9jYWxpemVkX2N1c3RvbV9zdHlsZSA9IHcud3BiY19iZmJfc2V0dGluZ3NfdmFycyAmJiB3LndwYmNfYmZiX3NldHRpbmdzX3ZhcnMuY3VzdG9tX2Zvcm1fc3R5bGVfZGVmYXVsdHNcblx0XHRcdD8gdy53cGJjX2JmYl9zZXR0aW5nc192YXJzLmN1c3RvbV9mb3JtX3N0eWxlX2RlZmF1bHRzXG5cdFx0XHQ6IHt9O1xuXHRcdGNvbnN0IGxvY2FsaXplZF9mb3JtX2FjY2VudCA9IHcud3BiY19iZmJfc2V0dGluZ3NfdmFycyAmJiB3LndwYmNfYmZiX3NldHRpbmdzX3ZhcnMuZm9ybV9hY2NlbnRfZGVmYXVsdHNcblx0XHRcdD8gdy53cGJjX2JmYl9zZXR0aW5nc192YXJzLmZvcm1fYWNjZW50X2RlZmF1bHRzXG5cdFx0XHQ6IHt9O1xuXG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oIHtcblx0XHRcdGJvb2tpbmdfZm9ybV9hY2NlbnRfZW5hYmxlZDogJ09mZicsXG5cdFx0XHRib29raW5nX2Zvcm1fY3VzdG9tX2JhY2tncm91bmRfY29sb3IgICAgICAgOiAnI2ZmZmZmZicsXG5cdFx0XHRib29raW5nX2Zvcm1fY3VzdG9tX2JvcmRlcl9jb2xvciAgICAgICAgICAgOiAnI2NjY2NjYycsXG5cdFx0XHRib29raW5nX2Zvcm1fY3VzdG9tX2JvcmRlcl93aWR0aCAgICAgICAgICAgOiAnMXB4Jyxcblx0XHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fYm9yZGVyX3JhZGl1cyAgICAgICAgICA6ICcycHgnLFxuXHRcdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9wYWRkaW5nX3ZlcnRpY2FsICAgICAgIDogJzEwcHgnLFxuXHRcdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9wYWRkaW5nX2hvcml6b250YWwgICAgIDogJzMwcHgnLFxuXHRcdFx0Ym9va2luZ19mb3JtX2N1c3RvbV90ZXh0X2NvbG9yICAgICAgICAgICAgIDogJyMxZDIzMjcnLFxuXHRcdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9maWVsZF9iYWNrZ3JvdW5kX2NvbG9yIDogJyNmZmZmZmYnLFxuXHRcdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9maWVsZF90ZXh0X2NvbG9yICAgICAgIDogJyMzYzQzNGEnLFxuXHRcdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9maWVsZF9ib3JkZXJfY29sb3IgICAgIDogJyNjY2NjY2MnLFxuXHRcdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fYmFja2dyb3VuZF9jb2xvcjogJyMwNjZhYWInLFxuXHRcdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fdGV4dF9jb2xvciAgICAgIDogJyNmZmZmZmYnLFxuXHRcdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fYm9yZGVyX2NvbG9yICAgIDogJyMwNjZhYWInLFxuXHRcdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9idXR0b25faG92ZXJfYmFja2dyb3VuZF9jb2xvcjogJyMwNTU1ODknLFxuXHRcdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9idXR0b25faG92ZXJfdGV4dF9jb2xvcjogJyNmZmZmZmYnLFxuXHRcdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9idXR0b25faG92ZXJfYm9yZGVyX2NvbG9yOiAnIzA1NTU4OScsXG5cdFx0XHRib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25fYmFja2dyb3VuZF9jb2xvcjogJyNmZGZkZmQnLFxuXHRcdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX3RleHRfY29sb3I6ICcjNDQ0NDQ0Jyxcblx0XHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9ib3JkZXJfY29sb3I6ICcjZWVlZWVlJyxcblx0XHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fc2Vjb25kYXJ5X2J1dHRvbl9ob3Zlcl9iYWNrZ3JvdW5kX2NvbG9yOiAnI2ZkZmRmZCcsXG5cdFx0XHRib29raW5nX2Zvcm1fY3VzdG9tX3NlY29uZGFyeV9idXR0b25faG92ZXJfdGV4dF9jb2xvcjogJyM0NDQ0NDQnLFxuXHRcdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9zZWNvbmRhcnlfYnV0dG9uX2hvdmVyX2JvcmRlcl9jb2xvcjogJyM0ZDkxY2QnLFxuXHRcdFx0Ym9va2luZ19mb3JtX2N1c3RvbV9idXR0b25fYm9yZGVyX3dpZHRoICAgICAgOiAnMXB4Jyxcblx0XHRcdGJvb2tpbmdfZm9ybV9jdXN0b21fYnV0dG9uX2JvcmRlcl9yYWRpdXMgICAgIDogJzNweCdcblx0XHR9LCBsb2NhbGl6ZWRfY3VzdG9tX3N0eWxlLCBsb2NhbGl6ZWRfZm9ybV9hY2NlbnQgKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGdldF9mb3JtX3N0eWxlX29wdGlvbl9rZXlzKCkge1xuXHRcdGNvbnN0IGxvY2FsaXplZCA9IHcud3BiY19iZmJfc2V0dGluZ3NfdmFycyAmJiBBcnJheS5pc0FycmF5KCB3LndwYmNfYmZiX3NldHRpbmdzX3ZhcnMuZm9ybV9zdHlsZV9vcHRpb25fa2V5cyApXG5cdFx0XHQ/IHcud3BiY19iZmJfc2V0dGluZ3NfdmFycy5mb3JtX3N0eWxlX29wdGlvbl9rZXlzXG5cdFx0XHQ6IFtdO1xuXG5cdFx0cmV0dXJuIGxvY2FsaXplZC5sZW5ndGggPyBsb2NhbGl6ZWQgOiBmYWxsYmFja19mb3JtX3N0eWxlX29wdGlvbl9rZXlzO1xuXHR9XG5cblx0ZnVuY3Rpb24gc3RyaXBfZm9ybV9zdHlsZV9vcHRpb25zX2Zyb21fcGFjayhzZXR0aW5nc19wYWNrKSB7XG5cdFx0aWYgKCFzZXR0aW5nc19wYWNrIHx8IHR5cGVvZiBzZXR0aW5nc19wYWNrICE9PSAnb2JqZWN0JykgcmV0dXJuIHNldHRpbmdzX3BhY2s7XG5cdFx0aWYgKCFzZXR0aW5nc19wYWNrLm9wdGlvbnMgfHwgdHlwZW9mIHNldHRpbmdzX3BhY2sub3B0aW9ucyAhPT0gJ29iamVjdCcpIHJldHVybiBzZXR0aW5nc19wYWNrO1xuXG5cdFx0Z2V0X2Zvcm1fc3R5bGVfb3B0aW9uX2tleXMoKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdGRlbGV0ZSBzZXR0aW5nc19wYWNrLm9wdGlvbnNba2V5XTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBzZXR0aW5nc19wYWNrO1xuXHR9XG5cclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdC8vIFJvdyBzZXR0ZXJcclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRmdW5jdGlvbiBzZXRfdmFsdWVfZm9yX3Jvdyhyb3csIHZhbHVlLCBvcHRzKSB7XHJcblx0XHRpZiAoIXJvdykgcmV0dXJuO1xyXG5cclxuXHRcdGNvbnN0IHJvd190eXBlID0gU3RyaW5nKHJvdy5nZXRBdHRyaWJ1dGUoJ2RhdGEtdHlwZScpIHx8ICcnKTtcclxuXHRcdGNvbnN0IHJvd19rZXkgID0gU3RyaW5nKHJvdy5nZXRBdHRyaWJ1dGUoJ2RhdGEta2V5JykgfHwgJycpO1xyXG5cdFx0Y29uc3QgZG9fdHJpZ2dlcl9ldmVudHMgPSAhIShvcHRzICYmIG9wdHMudHJpZ2dlcl9jaGFuZ2UpO1xyXG5cclxuXHRcdGlmICghcm93X2tleSkgcmV0dXJuO1xyXG5cclxuXHRcdC8vIFJhZGlvIGdyb3VwXHJcblx0XHRpZiAocm93X3R5cGUgPT09ICdyYWRpbycpIHtcclxuXHRcdFx0Y29uc3Qgd3JhcCA9IHJvdy5xdWVyeVNlbGVjdG9yKCcud3BiY19iZmJfX2Zvcm1fc2V0dGluZ19yYWRpb1tkYXRhLXdwYmMtYmZiLWZzLWNvbnRyb2xpZF0nKTtcclxuXHRcdFx0Y29uc3QgY29udHJvbF9pZCA9IHdyYXAgPyBTdHJpbmcod3JhcC5nZXRBdHRyaWJ1dGUoJ2RhdGEtd3BiYy1iZmItZnMtY29udHJvbGlkJykgfHwgJycpIDogJyc7XHJcblx0XHRcdGlmICghY29udHJvbF9pZCkgcmV0dXJuO1xyXG5cclxuXHRcdFx0Y29uc3QgdGFyZ2V0X3ZhbHVlID0gU3RyaW5nKHZhbHVlID09IG51bGwgPyAnJyA6IHZhbHVlKTtcclxuXHRcdFx0Y29uc3QgcmFkaW9zID0gcXVlcnlfYWxsKHJvdywgJ2lucHV0W3R5cGU9XCJyYWRpb1wiXVtuYW1lPVwiJyArIGNzc19lc2NhcGUoY29udHJvbF9pZCkgKyAnXCJdJyk7XHJcblxyXG5cdFx0XHRsZXQgY2hlY2tlZF9yYWRpbyA9IG51bGw7XG5cdFx0XHRyYWRpb3MuZm9yRWFjaChmdW5jdGlvbiAocmFkaW8pIHtcblx0XHRcdFx0Y29uc3Qgc2hvdWxkX2NoZWNrID0gKFN0cmluZyhyYWRpby52YWx1ZSkgPT09IHRhcmdldF92YWx1ZSk7XG5cdFx0XHRcdHJhZGlvLmNoZWNrZWQgPSBzaG91bGRfY2hlY2s7XG5cdFx0XHRcdGlmIChzaG91bGRfY2hlY2spIGNoZWNrZWRfcmFkaW8gPSByYWRpbztcblxuXHRcdFx0XHRjb25zdCBjaG9pY2UgPSByYWRpby5jbG9zZXN0ID8gcmFkaW8uY2xvc2VzdCgnLndwYmNfdGhlbWVfY2hvaWNlJykgOiBudWxsO1xuXHRcdFx0XHRpZiAoIGNob2ljZSApIHtcblx0XHRcdFx0XHRjaG9pY2UuY2xhc3NMaXN0LnRvZ2dsZSgnaXMtc2VsZWN0ZWQnLCBzaG91bGRfY2hlY2spO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxyXG5cdFx0XHRpZiAod3JhcCkgc2V0X2luaXRpYWxfYXR0cih3cmFwLCB0YXJnZXRfdmFsdWUpO1xyXG5cdFx0XHRpZiAoZG9fdHJpZ2dlcl9ldmVudHMgJiYgY2hlY2tlZF9yYWRpbykgdHJpZ2dlcl9jaGFuZ2UoY2hlY2tlZF9yYWRpbyk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBUb2dnbGVcclxuXHRcdGlmIChyb3dfdHlwZSA9PT0gJ3RvZ2dsZScpIHtcclxuXHRcdFx0Y29uc3QgY2hlY2tib3ggPVxyXG5cdFx0XHRcdHJvdy5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl1bZGF0YS13cGJjLWJmYi1mcy10eXBlPVwidG9nZ2xlXCJdJykgfHxcclxuXHRcdFx0XHRyb3cucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdJyk7XHJcblxyXG5cdFx0XHRpZiAoIWNoZWNrYm94KSByZXR1cm47XHJcblxyXG5cdFx0XHRjb25zdCBjaGVja2VkID0gaXNfb24odmFsdWUpO1xyXG5cdFx0XHRjaGVja2JveC5jaGVja2VkID0gY2hlY2tlZDtcclxuXHRcdFx0Y2hlY2tib3guc2V0QXR0cmlidXRlKCdhcmlhLWNoZWNrZWQnLCBjaGVja2VkID8gJ3RydWUnIDogJ2ZhbHNlJyk7XHJcblxyXG5cdFx0XHRzZXRfaW5pdGlhbF9hdHRyKGNoZWNrYm94LCBjaGVja2VkID8gJ09uJyA6ICdPZmYnKTtcclxuXHRcdFx0aWYgKGRvX3RyaWdnZXJfZXZlbnRzKSB0cmlnZ2VyX2NoYW5nZShjaGVja2JveCk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBTZWxlY3RcclxuXHRcdGlmIChyb3dfdHlwZSA9PT0gJ3NlbGVjdCcpIHtcclxuXHRcdFx0Y29uc3Qgc2VsZWN0ID1cclxuXHRcdFx0XHRyb3cucXVlcnlTZWxlY3Rvcignc2VsZWN0W2RhdGEtd3BiYy1iZmItZnMtdHlwZT1cInNlbGVjdFwiXScpIHx8XHJcblx0XHRcdFx0cm93LnF1ZXJ5U2VsZWN0b3IoJ3NlbGVjdCcpO1xyXG5cclxuXHRcdFx0aWYgKCFzZWxlY3QpIHJldHVybjtcclxuXHJcblx0XHRcdHNlbGVjdC52YWx1ZSA9IFN0cmluZyh2YWx1ZSA9PSBudWxsID8gJycgOiB2YWx1ZSk7XHJcblx0XHRcdHNldF9pbml0aWFsX2F0dHIoc2VsZWN0LCBzZWxlY3QudmFsdWUpO1xyXG5cdFx0XHRpZiAoZG9fdHJpZ2dlcl9ldmVudHMpIHRyaWdnZXJfY2hhbmdlKHNlbGVjdCk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBMZW5ndGg6IGhpZGRlbiBjb21iaW5lZCArIG51bS91bml0XG5cdFx0aWYgKCByb3dfdHlwZSA9PT0gJ2xlbmd0aCcgKSB7XG5cdFx0XHQvLyBKUyBzbGlkZXIgbGVuZ3RoIGNvbnRyb2w6IC0gaGlkZGVuIHdyaXRlciBjYXJyaWVzIEZTIG1hcmtlcnMgYW5kIG11c3QgcmVjZWl2ZSBpbnB1dCBldmVudCBzbyB3cGJjX3NsaWRlcl9sZW5fZ3JvdXBzLmpzIHN5bmNzIFVJLlxyXG5cdFx0XHRjb25zdCB3cml0ZXIgPVxyXG5cdFx0XHRcdFx0ICByb3cucXVlcnlTZWxlY3RvciggJ2lucHV0W2RhdGEtd3BiY19zbGlkZXJfbGVuX3dyaXRlcl1bZGF0YS13cGJjLWJmYi1mcy10eXBlPVwibGVuZ3RoXCJdJyApIHx8XHJcblx0XHRcdFx0XHQgIHJvdy5xdWVyeVNlbGVjdG9yKCAnaW5wdXRbZGF0YS13cGJjLWJmYi1mcy10eXBlPVwibGVuZ3RoXCJdJyApO1xyXG5cdFx0XHRpZiAoICF3cml0ZXIgKSByZXR1cm47XHJcblxyXG5cdFx0XHRjb25zdCBjb21iaW5lZCA9IFN0cmluZyggdmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWUgKTtcclxuXHRcdFx0d3JpdGVyLnZhbHVlICAgPSBjb21iaW5lZDtcclxuXHRcdFx0c2V0X2luaXRpYWxfYXR0ciggd3JpdGVyLCBjb21iaW5lZCApO1xyXG5cdFx0XHRpZiAoIGRvX3RyaWdnZXJfZXZlbnRzICkgdHJpZ2dlcl9pbnB1dCggd3JpdGVyICk7XHJcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBTcGFjaW5nOiB0d28gbnVtYmVyIGlucHV0cyBzYXZlZCBpbnRvIGEgaGlkZGVuIENTUyBzaG9ydGhhbmQgd3JpdGVyLlxuXHRcdGlmICggcm93X3R5cGUgPT09ICdzcGFjaW5nJyApIHtcblx0XHRcdGNvbnN0IGdyb3VwID0gcm93LnF1ZXJ5U2VsZWN0b3IoICcud3BiY19zcGFjaW5nX2dyb3VwJyApO1xuXHRcdFx0Y29uc3QgdmVydGljYWxfaW5wdXQgPSBncm91cCA/IGdyb3VwLnF1ZXJ5U2VsZWN0b3IoICdpbnB1dFtkYXRhLXdwYmNfc3BhY2luZ192ZXJ0aWNhbF0nICkgOiBudWxsO1xuXHRcdFx0Y29uc3QgaG9yaXpvbnRhbF9pbnB1dCA9IGdyb3VwID8gZ3JvdXAucXVlcnlTZWxlY3RvciggJ2lucHV0W2RhdGEtd3BiY19zcGFjaW5nX2hvcml6b250YWxdJyApIDogbnVsbDtcblx0XHRcdGNvbnN0IHdyaXRlciA9IGdyb3VwID8gZ3JvdXAucXVlcnlTZWxlY3RvciggJ2lucHV0W2RhdGEtd3BiY19zcGFjaW5nX3dyaXRlcl0nICkgOiBudWxsO1xuXHRcdFx0Y29uc3QgcGFyc2VkID0gcGFyc2Vfc3BhY2luZ192YWx1ZSggdmFsdWUgKTtcblxuXHRcdFx0aWYgKCAhIHdyaXRlciApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHZlcnRpY2FsX2lucHV0ICkge1xuXHRcdFx0XHR2ZXJ0aWNhbF9pbnB1dC52YWx1ZSA9IHBhcnNlZC52ZXJ0aWNhbDtcblx0XHRcdH1cblx0XHRcdGlmICggaG9yaXpvbnRhbF9pbnB1dCApIHtcblx0XHRcdFx0aG9yaXpvbnRhbF9pbnB1dC52YWx1ZSA9IHBhcnNlZC5ob3Jpem9udGFsO1xuXHRcdFx0fVxuXHRcdFx0d3JpdGVyLnZhbHVlID0gcGFyc2VkLmNvbWJpbmVkO1xuXHRcdFx0c2V0X2luaXRpYWxfYXR0ciggd3JpdGVyLCBwYXJzZWQuY29tYmluZWQgKTtcblx0XHRcdGlmICggZG9fdHJpZ2dlcl9ldmVudHMgKSB0cmlnZ2VyX2lucHV0KCB3cml0ZXIgKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBSYW5nZSAoc2xpZGVyIG51bWJlcik6IHdyaXRlciBpcyB0aGUgbnVtYmVyIGlucHV0LlxyXG5cdFx0aWYgKHJvd190eXBlID09PSAncmFuZ2UnKSB7XHJcblx0XHRcdGNvbnN0IHdyaXRlciA9XHJcblx0XHRcdFx0cm93LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W2RhdGEtd3BiY19zbGlkZXJfcmFuZ2Vfd3JpdGVyXScpIHx8XHJcblx0XHRcdFx0cm93LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W2RhdGEtd3BiYy1iZmItZnMta2V5PVwiJyArIGNzc19lc2NhcGUocm93X2tleSkgKyAnXCJdJykgfHxcclxuXHRcdFx0XHRyb3cucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT1cIm51bWJlclwiXScpO1xyXG5cdFx0XHRpZiAoIXdyaXRlcikgcmV0dXJuO1xyXG5cclxuXHRcdFx0d3JpdGVyLnZhbHVlID0gU3RyaW5nKHZhbHVlID09IG51bGwgPyAnJyA6IHZhbHVlKTtcclxuXHRcdFx0c2V0X2luaXRpYWxfYXR0cih3cml0ZXIsIHdyaXRlci52YWx1ZSk7XHJcblx0XHRcdGlmIChkb190cmlnZ2VyX2V2ZW50cykgdHJpZ2dlcl9pbnB1dCh3cml0ZXIpO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRGVmYXVsdDogaW5wdXQvdGV4dGFyZWFcclxuXHRcdGNvbnN0IGNvbnRyb2wgPVxyXG5cdFx0XHRyb3cucXVlcnlTZWxlY3RvcignW2RhdGEtd3BiYy1iZmItZnMta2V5PVwiJyArIGNzc19lc2NhcGUocm93X2tleSkgKyAnXCJdJykgfHxcclxuXHRcdFx0cm93LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0LHRleHRhcmVhJyk7XHJcblxyXG5cdFx0aWYgKCFjb250cm9sKSByZXR1cm47XHJcblxyXG5cdFx0Y29udHJvbC52YWx1ZSA9IFN0cmluZyh2YWx1ZSA9PSBudWxsID8gJycgOiB2YWx1ZSk7XHJcblx0XHRzZXRfaW5pdGlhbF9hdHRyKGNvbnRyb2wsIGNvbnRyb2wudmFsdWUpO1xyXG5cdFx0Ly8gRm9yIG5vcm1hbCBpbnB1dHMsIFwiaW5wdXRcIiBnaXZlcyBiZXR0ZXIgcmVhY3Rpdml0eSB0aGFuIFwiY2hhbmdlXCIuXHJcblx0XHRpZiAoZG9fdHJpZ2dlcl9ldmVudHMpIHRyaWdnZXJfaW5wdXQoY29udHJvbCk7XHJcblx0fVxyXG5cclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdC8vIFB1YmxpYyBBUElcclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHQvKipcclxuXHQgKiBBcHBseSBGTEFUIG9iamVjdCAoa2V5PT52YWx1ZSkgdG8gcm93cyBvZiBzb21lIHNjb3BlLlxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIGFwcGx5X2ZsYXRfc2V0dGluZ3MoZmxhdF9zZXR0aW5ncywgc2NvcGUsIG9wdHMpIHtcclxuXHRcdGlmICghZmxhdF9zZXR0aW5ncyB8fCB0eXBlb2YgZmxhdF9zZXR0aW5ncyAhPT0gJ29iamVjdCcpIHJldHVybjtcclxuXHJcblx0XHRmaW5kX3Jvd3Moc2NvcGUpLmZvckVhY2goZnVuY3Rpb24gKHJvdykge1xyXG5cdFx0XHRjb25zdCBrZXkgPSBTdHJpbmcocm93LmdldEF0dHJpYnV0ZSgnZGF0YS1rZXknKSB8fCAnJyk7XHJcblx0XHRcdGlmICgha2V5KSByZXR1cm47XHJcblx0XHRcdGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGZsYXRfc2V0dGluZ3MsIGtleSkpIHJldHVybjtcclxuXHRcdFx0c2V0X3ZhbHVlX2Zvcl9yb3cocm93LCBmbGF0X3NldHRpbmdzW2tleV0sIG9wdHMpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBBcHBseSBzZXR0aW5ncy5cclxuXHQgKlxyXG5cdCAqIFN1cHBvcnRzOlxyXG5cdCAqIC0gZmxhdDogeyBib29raW5nX2Zvcm1fbGF5b3V0X3dpZHRoOiAnMTAwJScsIC4uLiB9XHJcblx0ICogLSBwYWNrOiB7IG9wdGlvbnM6IHsuLi59LCBjc3NfdmFyczogey4uLn0gfSAgIChPcHRpb24gQSlcclxuXHQgKi9cclxuXHRhcGkuYXBwbHkgPSBmdW5jdGlvbiAoc2V0dGluZ3NfcGFjaywgc2NvcGUsIG9wdHMpIHtcblx0XHRpZiAoIXNldHRpbmdzX3BhY2sgfHwgdHlwZW9mIHNldHRpbmdzX3BhY2sgIT09ICdvYmplY3QnKSByZXR1cm47XG5cdFx0aWYgKCFzZXR0aW5nc19wYWNrLm9wdGlvbnMgfHwgdHlwZW9mIHNldHRpbmdzX3BhY2sub3B0aW9ucyAhPT0gJ29iamVjdCcpIHJldHVybjsgLy8gc3RyaWN0IE9wdGlvbiBBXG5cdFx0c3RyaXBfZm9ybV9zdHlsZV9vcHRpb25zX2Zyb21fcGFjayhzZXR0aW5nc19wYWNrKTtcblx0XHRhcHBseV9mbGF0X3NldHRpbmdzKHNldHRpbmdzX3BhY2sub3B0aW9ucywgc2NvcGUgfHwgJ2Zvcm0nLCBvcHRzKTtcblx0fTtcblxuXHRhcGkucmVzZXRfY3VzdG9tX2FwcGVhcmFuY2UgPSBmdW5jdGlvbiAoKSB7XG5cdFx0Y29uc3QgZGVmYXVsdHMgPSBnZXRfZGVmYXVsdF9jdXN0b21fYXBwZWFyYW5jZV9zZXR0aW5ncygpO1xuXG5cdFx0aWYgKCAhIGxhc3Rfc2V0dGluZ3NfcGFjayB8fCB0eXBlb2YgbGFzdF9zZXR0aW5nc19wYWNrICE9PSAnb2JqZWN0JyApIHtcblx0XHRcdGxhc3Rfc2V0dGluZ3NfcGFjayA9IHsgb3B0aW9uczoge30sIGNzc192YXJzOiB7fSB9O1xuXHRcdH1cblx0XHRpZiAoICEgbGFzdF9zZXR0aW5nc19wYWNrLm9wdGlvbnMgfHwgdHlwZW9mIGxhc3Rfc2V0dGluZ3NfcGFjay5vcHRpb25zICE9PSAnb2JqZWN0JyApIHtcblx0XHRcdGxhc3Rfc2V0dGluZ3NfcGFjay5vcHRpb25zID0ge307XG5cdFx0fVxuXHRcdE9iamVjdC5rZXlzKCBkZWZhdWx0cyApLmZvckVhY2goIGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdGxhc3Rfc2V0dGluZ3NfcGFjay5vcHRpb25zW2tleV0gPSBkZWZhdWx0c1trZXldO1xuXHRcdH0gKTtcblxuXHRcdGFwcGx5X2ZsYXRfc2V0dGluZ3MoIGRlZmF1bHRzLCAnZ2xvYmFsJywgeyB0cmlnZ2VyX2NoYW5nZTogdHJ1ZSB9ICk7XG5cdFx0aW5pdF9jb2xvcmlzX3BpY2tlcnMoIGQgKTtcblxuXHRcdGlmICggdy5XUEJDX0JGQl9TZXR0aW5nc19FZmZlY3RzICYmIHR5cGVvZiB3LldQQkNfQkZCX1NldHRpbmdzX0VmZmVjdHMuYXBwbHlfYWxsID09PSAnZnVuY3Rpb24nICkge1xuXHRcdFx0dy5XUEJDX0JGQl9TZXR0aW5nc19FZmZlY3RzLmFwcGx5X2FsbCggZGVmYXVsdHMsIHsgc291cmNlOiAncmVzZXQtY3VzdG9tLWFwcGVhcmFuY2UnLCBvcHRpb25zOiBkZWZhdWx0cyB9ICk7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdGQuZGlzcGF0Y2hFdmVudCggbmV3IEN1c3RvbUV2ZW50KCAnd3BiYzpiZmI6Zm9ybV9zZXR0aW5nczpjaGFuZ2VkJywge1xuXHRcdFx0XHRidWJibGVzOiB0cnVlLFxuXHRcdFx0XHRkZXRhaWwgOiB7XG5cdFx0XHRcdFx0c291cmNlICA6ICdyZXNldC1jdXN0b20tYXBwZWFyYW5jZScsXG5cdFx0XHRcdFx0c2V0dGluZ3M6IHsgb3B0aW9uczogT2JqZWN0LmFzc2lnbigge30sIGRlZmF1bHRzICkgfVxuXHRcdFx0XHR9XG5cdFx0XHR9ICkgKTtcblx0XHR9IGNhdGNoICggX2UgKSB7fVxuXHR9O1xuXHJcblx0LyoqXHJcblx0ICogQ29sbGVjdCBjdXJyZW50IHZhbHVlcyAoZmxhdCBvYmplY3QpLlxyXG5cdCAqL1xyXG5cdGFwaS5jb2xsZWN0ID0gZnVuY3Rpb24gKHNjb3BlKSB7XHJcblx0XHRjb25zdCBvdXQgPSB7fTtcclxuXHJcblx0XHRmaW5kX3Jvd3Moc2NvcGUgfHwgJ2Zvcm0nKS5mb3JFYWNoKGZ1bmN0aW9uIChyb3cpIHtcclxuXHRcdFx0Y29uc3Qga2V5ICA9IFN0cmluZyhyb3cuZ2V0QXR0cmlidXRlKCdkYXRhLWtleScpIHx8ICcnKTtcclxuXHRcdFx0Y29uc3QgdHlwZSA9IFN0cmluZyhyb3cuZ2V0QXR0cmlidXRlKCdkYXRhLXR5cGUnKSB8fCAnJyk7XHJcblx0XHRcdGlmICgha2V5KSByZXR1cm47XHJcblxyXG5cdFx0XHRpZiAodHlwZSA9PT0gJ3JhZGlvJykge1xyXG5cdFx0XHRcdGNvbnN0IHdyYXAgPSByb3cucXVlcnlTZWxlY3RvcignLndwYmNfYmZiX19mb3JtX3NldHRpbmdfcmFkaW9bZGF0YS13cGJjLWJmYi1mcy1jb250cm9saWRdJyk7XHJcblx0XHRcdFx0Y29uc3QgY29udHJvbF9pZCA9IHdyYXAgPyBTdHJpbmcod3JhcC5nZXRBdHRyaWJ1dGUoJ2RhdGEtd3BiYy1iZmItZnMtY29udHJvbGlkJykgfHwgJycpIDogJyc7XHJcblx0XHRcdFx0aWYgKCFjb250cm9sX2lkKSByZXR1cm47XHJcblxyXG5cdFx0XHRcdGNvbnN0IGNoZWNrZWQgPSByb3cucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT1cInJhZGlvXCJdW25hbWU9XCInICsgY3NzX2VzY2FwZShjb250cm9sX2lkKSArICdcIl06Y2hlY2tlZCcpO1xyXG5cdFx0XHRcdG91dFtrZXldID0gY2hlY2tlZCA/IFN0cmluZyhjaGVja2VkLnZhbHVlKSA6ICcnO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKHR5cGUgPT09ICd0b2dnbGUnKSB7XHJcblx0XHRcdFx0Y29uc3QgY2hlY2tib3ggPVxyXG5cdFx0XHRcdFx0cm93LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9XCJjaGVja2JveFwiXVtkYXRhLXdwYmMtYmZiLWZzLXR5cGU9XCJ0b2dnbGVcIl0nKSB8fFxyXG5cdFx0XHRcdFx0cm93LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9XCJjaGVja2JveFwiXScpO1xyXG5cdFx0XHRcdG91dFtrZXldID0gY2hlY2tib3ggJiYgY2hlY2tib3guY2hlY2tlZCA/ICdPbicgOiAnT2ZmJztcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICh0eXBlID09PSAnc2VsZWN0Jykge1xyXG5cdFx0XHRcdGNvbnN0IHNlbGVjdCA9IHJvdy5xdWVyeVNlbGVjdG9yKCdzZWxlY3QnKTtcclxuXHRcdFx0XHRvdXRba2V5XSA9IHNlbGVjdCA/IFN0cmluZyhzZWxlY3QudmFsdWUpIDogJyc7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAodHlwZSA9PT0gJ2xlbmd0aCcpIHtcblx0XHRcdFx0Y29uc3QgaGlkZGVuID0gcm93LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W2RhdGEtd3BiYy1iZmItZnMtdHlwZT1cImxlbmd0aFwiXScpO1xuXHRcdFx0XHRvdXRba2V5XSA9IGhpZGRlbiA/IFN0cmluZyhoaWRkZW4udmFsdWUgfHwgJycpIDogJyc7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHR5cGUgPT09ICdzcGFjaW5nJykge1xuXHRcdFx0XHRvdXRba2V5XSA9IGdldF9zcGFjaW5nX3ZhbHVlKHJvdyk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHR5cGUgPT09ICdyYW5nZScpIHtcclxuXHRcdFx0XHRjb25zdCB3cml0ZXIgPVxyXG5cdFx0XHRcdFx0cm93LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W2RhdGEtd3BiY19zbGlkZXJfcmFuZ2Vfd3JpdGVyXScpIHx8XHJcblx0XHRcdFx0XHRyb3cucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT1cIm51bWJlclwiXScpIHx8XHJcblx0XHRcdFx0XHRyb3cucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT1cInJhbmdlXCJdJyk7XHJcblx0XHRcdFx0b3V0W2tleV0gPSB3cml0ZXIgPyBTdHJpbmcod3JpdGVyLnZhbHVlIHx8ICcnKSA6ICcnO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRjb25zdCBjb250cm9sID0gcm93LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0LHRleHRhcmVhJyk7XHJcblx0XHRcdG91dFtrZXldID0gY29udHJvbCA/IFN0cmluZyhjb250cm9sLnZhbHVlIHx8ICcnKSA6ICcnO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0cmV0dXJuIG91dDtcblx0fTtcblxuXHRmdW5jdGlvbiBwYXJzZV9zcGFjaW5nX3ZhbHVlKHZhbHVlKSB7XG5cdFx0Y29uc3QgZmFsbGJhY2sgPSB7IHZlcnRpY2FsOiAnMTAnLCBob3Jpem9udGFsOiAnMzAnLCBjb21iaW5lZDogJzEwcHggMzBweCcgfTtcblx0XHRjb25zdCBtYXRjaGVzID0gU3RyaW5nKHZhbHVlID09IG51bGwgPyAnJyA6IHZhbHVlKS5tYXRjaCgvLT9cXGQrKD86XFwuXFxkKyk/L2cpIHx8IFtdO1xuXHRcdGxldCB2ZXJ0aWNhbCA9IG1hdGNoZXNbMF0gIT0gbnVsbCA/IFN0cmluZyhtYXRjaGVzWzBdKSA6IGZhbGxiYWNrLnZlcnRpY2FsO1xuXHRcdGxldCBob3Jpem9udGFsID0gbWF0Y2hlc1sxXSAhPSBudWxsID8gU3RyaW5nKG1hdGNoZXNbMV0pIDogdmVydGljYWw7XG5cblx0XHRpZiAoaXNOYU4oTnVtYmVyKHZlcnRpY2FsKSkpIHtcblx0XHRcdHZlcnRpY2FsID0gZmFsbGJhY2sudmVydGljYWw7XG5cdFx0fVxuXHRcdGlmIChpc05hTihOdW1iZXIoaG9yaXpvbnRhbCkpKSB7XG5cdFx0XHRob3Jpem9udGFsID0gZmFsbGJhY2suaG9yaXpvbnRhbDtcblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0dmVydGljYWwgIDogdmVydGljYWwsXG5cdFx0XHRob3Jpem9udGFsOiBob3Jpem9udGFsLFxuXHRcdFx0Y29tYmluZWQgIDogdmVydGljYWwgKyAncHggJyArIGhvcml6b250YWwgKyAncHgnXG5cdFx0fTtcblx0fVxuXG5cdGZ1bmN0aW9uIGdldF9zcGFjaW5nX3ZhbHVlKHJvdykge1xuXHRcdGNvbnN0IGdyb3VwID0gcm93ID8gcm93LnF1ZXJ5U2VsZWN0b3IoJy53cGJjX3NwYWNpbmdfZ3JvdXAnKSA6IG51bGw7XG5cdFx0Y29uc3QgdmVydGljYWxfaW5wdXQgPSBncm91cCA/IGdyb3VwLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W2RhdGEtd3BiY19zcGFjaW5nX3ZlcnRpY2FsXScpIDogbnVsbDtcblx0XHRjb25zdCBob3Jpem9udGFsX2lucHV0ID0gZ3JvdXAgPyBncm91cC5xdWVyeVNlbGVjdG9yKCdpbnB1dFtkYXRhLXdwYmNfc3BhY2luZ19ob3Jpem9udGFsXScpIDogbnVsbDtcblx0XHRjb25zdCB3cml0ZXIgPSBncm91cCA/IGdyb3VwLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W2RhdGEtd3BiY19zcGFjaW5nX3dyaXRlcl0nKSA6IG51bGw7XG5cdFx0Y29uc3QgdmVydGljYWwgPSB2ZXJ0aWNhbF9pbnB1dCA/IFN0cmluZyh2ZXJ0aWNhbF9pbnB1dC52YWx1ZSB8fCAnMCcpIDogJzAnO1xuXHRcdGNvbnN0IGhvcml6b250YWwgPSBob3Jpem9udGFsX2lucHV0ID8gU3RyaW5nKGhvcml6b250YWxfaW5wdXQudmFsdWUgfHwgdmVydGljYWwpIDogdmVydGljYWw7XG5cdFx0Y29uc3QgY29tYmluZWQgPSBwYXJzZV9zcGFjaW5nX3ZhbHVlKHZlcnRpY2FsICsgJ3B4ICcgKyBob3Jpem9udGFsICsgJ3B4JykuY29tYmluZWQ7XG5cblx0XHRpZiAod3JpdGVyKSB7XG5cdFx0XHR3cml0ZXIudmFsdWUgPSBjb21iaW5lZDtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29tYmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogUmUtYXBwbHkgbGFzdCByZWNlaXZlZCBzZXR0aW5ncyAodXNlZnVsIGFmdGVyIERPTSByZS1yZW5kZXIpLlxuXHQgKi9cclxuXHRhcGkucmVhcHBseV9sYXN0ID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0aWYgKCFsYXN0X3NldHRpbmdzX3BhY2spIHJldHVybjtcclxuXHRcdGFwaS5hcHBseShsYXN0X3NldHRpbmdzX3BhY2ssICdmb3JtJywgeyB0cmlnZ2VyX2NoYW5nZTogdHJ1ZSB9KTtcclxuXHR9O1xyXG5cclxuXHRhcGkuaW5pdCA9IGZ1bmN0aW9uICgpIHtcblx0XHRpbml0X2NvbG9yaXNfcGlja2VycyhkKTtcblxuXHRcdC8vIElmIGFwcGx5IGV2ZW50IGZpcmVkIGJlZm9yZSBpbml0LCB0cnkgYWdhaW4gbm93LlxuXHRcdGlmIChsYXN0X3NldHRpbmdzX3BhY2spIHNjaGVkdWxlX2FwcGx5X3JldHJ5KCk7XG5cdH07XG5cclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdC8vIERPTSBFdmVudHMgKEFKQVggbGF5ZXIpXHJcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0Ly8gU2F2ZTogbGV0IG1vZHVsZXMgY29udHJpYnV0ZSBpbnRvIHsgb3B0aW9uczp7fSwgY3NzX3ZhcnM6e30gfVxyXG5cdGQuYWRkRXZlbnRMaXN0ZW5lcignd3BiYzpiZmI6Zm9ybV9zZXR0aW5nczpjb2xsZWN0JywgZnVuY3Rpb24gKGUpIHtcclxuXHRcdGNvbnN0IGRldGFpbCA9IChlICYmIGUuZGV0YWlsKSA/IGUuZGV0YWlsIDoge307XHJcblx0XHRjb25zdCB0YXJnZXRfcGFjayA9IGRldGFpbC5zZXR0aW5ncztcclxuXHJcblx0XHRpZiAoIXRhcmdldF9wYWNrIHx8IHR5cGVvZiB0YXJnZXRfcGFjayAhPT0gJ29iamVjdCcpIHJldHVybjtcclxuXHJcblx0XHQvLyBPcHRpb24gQTogd3JpdGUgaW50byB0YXJnZXRfcGFjay5vcHRpb25zXHJcblx0XHRpZiAoIXRhcmdldF9wYWNrLm9wdGlvbnMgfHwgdHlwZW9mIHRhcmdldF9wYWNrLm9wdGlvbnMgIT09ICdvYmplY3QnKSB7XHJcblx0XHRcdHRhcmdldF9wYWNrLm9wdGlvbnMgPSB7fTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBjb2xsZWN0ZWQgPSBhcGkuY29sbGVjdCgnZm9ybScpO1xuXHRcdE9iamVjdC5rZXlzKGNvbGxlY3RlZCkuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuXHRcdFx0dGFyZ2V0X3BhY2sub3B0aW9uc1trXSA9IGNvbGxlY3RlZFtrXTtcblx0XHR9KTtcblx0XHRzdHJpcF9mb3JtX3N0eWxlX29wdGlvbnNfZnJvbV9wYWNrKHRhcmdldF9wYWNrKTtcblx0fSk7XG5cclxuXHQvLyBMb2FkOiByZWNlaXZlIHNldHRpbmdzIGZyb20gQUpBWCBhbmQgYXBwbHkuXHJcblx0ZC5hZGRFdmVudExpc3RlbmVyKCd3cGJjOmJmYjpmb3JtX3NldHRpbmdzOmFwcGx5JywgZnVuY3Rpb24gKGUpIHtcblx0XHRjb25zdCBkZXRhaWwgPSAoZSAmJiBlLmRldGFpbCkgPyBlLmRldGFpbCA6IHt9O1xuXG5cdFx0bGFzdF9zZXR0aW5nc19wYWNrID0gZGV0YWlsLnNldHRpbmdzIHx8IG51bGw7XG5cblx0XHRyZXRyeV9jb3VudCA9IDA7XG5cdFx0c2NoZWR1bGVfYXBwbHlfcmV0cnkoKTtcblx0fSk7XG5cblx0ZC5hZGRFdmVudExpc3RlbmVyKCAnY2xpY2snLCBmdW5jdGlvbiAoZSkge1xuXHRcdGNvbnN0IGJ0biA9IGUgJiYgZS50YXJnZXQgJiYgZS50YXJnZXQuY2xvc2VzdCA/IGUudGFyZ2V0LmNsb3Nlc3QoICdbZGF0YS13cGJjLWJmYi1yZXNldC1jdXN0b20tYXBwZWFyYW5jZV0nICkgOiBudWxsO1xuXHRcdGlmICggISBidG4gKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdGFwaS5yZXNldF9jdXN0b21fYXBwZWFyYW5jZSgpO1xuXHR9LCBmYWxzZSApO1xuXG5cdC8qKlxuXHQgKiBTd2l0Y2ggdGhlIGdsb2JhbCB0aW1lLXBpY2tlciBza2luIHRvIHRoZSBmb3JtLWF3YXJlIEF1dG9tYXRpYyBza2luLlxuXHQgKlxuXHQgKiBUaGUgb3B0aW9uIGlzIHNhdmVkIHRocm91Z2ggdGhlIGV4aXN0aW5nIG5vbmNlLXByb3RlY3RlZCBvcHRpb24gc2F2ZXIuXG5cdCAqIExlZ2FjeSBza2lucyBhcmUgY2hhbmdlZCBvbmx5IGJ5IHRoaXMgZXhwbGljaXQgdXNlciBhY3Rpb24uXG5cdCAqXG5cdCAqIEBwYXJhbSB7SFRNTEJ1dHRvbkVsZW1lbnR9IGJ1dHRvbiBBY2NlbnQgYWN0aW9uIGJ1dHRvbi5cblx0ICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgYW4gQUpBWCBvcHRpb24gc2F2ZSB3YXMgc3RhcnRlZC5cblx0ICovXG5cdGZ1bmN0aW9uIHN3aXRjaF90aW1lX3BpY2tlcl90b19hdXRvbWF0aWMoYnV0dG9uKSB7XG5cdFx0Y29uc3QgYXV0b21hdGljX3NraW4gPSAnL2Nzcy90aW1lX3BpY2tlcl9za2lucy9mb3JtX3N0eWxlLmNzcyc7XG5cdFx0Y29uc3QgY3VycmVudF9za2luID0gYnV0dG9uID8gU3RyaW5nKCBidXR0b24uZ2V0QXR0cmlidXRlKCAnZGF0YS13cGJjLXRpbWUtcGlja2VyLXNraW4tY3VycmVudCcgKSB8fCAnJyApIDogJyc7XG5cdFx0Y29uc3QgYXV0b21hdGljX3VybCA9IGJ1dHRvbiA/IFN0cmluZyggYnV0dG9uLmdldEF0dHJpYnV0ZSggJ2RhdGEtd3BiYy10aW1lLXBpY2tlci1za2luLXVybCcgKSB8fCAnJyApIDogJyc7XG5cblx0XHRpZiAoICEgYnV0dG9uIHx8IGN1cnJlbnRfc2tpbi5zbGljZSggLWF1dG9tYXRpY19za2luLmxlbmd0aCApID09PSBhdXRvbWF0aWNfc2tpbiApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKCB0eXBlb2Ygdy53cGJjX3NhdmVfb3B0aW9uX2Zyb21fZWxlbWVudCAhPT0gJ2Z1bmN0aW9uJyApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRjb25zdCB0aW1lX2FwaSA9IHcuV1BCQ19CRkJfQ29yZSAmJiB3LldQQkNfQkZCX0NvcmUuVGltZSA/IHcuV1BCQ19CRkJfQ29yZS5UaW1lIDogbnVsbDtcblx0XHRpZiAoIGF1dG9tYXRpY191cmwgKSB7XG5cdFx0XHRwcmV2aW91c190aW1lX3BpY2tlcl9za2luX3VybCA9IGQuZ2V0RWxlbWVudEJ5SWQoICd3cGJjLXRpbWVfcGlja2VyLXNraW4tY3NzJyApXG5cdFx0XHRcdD8gU3RyaW5nKCBkLmdldEVsZW1lbnRCeUlkKCAnd3BiYy10aW1lX3BpY2tlci1za2luLWNzcycgKS5nZXRBdHRyaWJ1dGUoICdocmVmJyApIHx8ICcnIClcblx0XHRcdFx0OiAnJztcblx0XHRcdGlmICggdGltZV9hcGkgJiYgdHlwZW9mIHRpbWVfYXBpLmFwcGx5X3BpY2tlcl9za2luX3VybCA9PT0gJ2Z1bmN0aW9uJyApIHtcblx0XHRcdFx0dGltZV9hcGkuYXBwbHlfcGlja2VyX3NraW5fdXJsKCBhdXRvbWF0aWNfdXJsICk7XG5cdFx0XHR9IGVsc2UgaWYgKCB0eXBlb2Ygdy53cGJjX19jc3NfX2NoYW5nZV9za2luID09PSAnZnVuY3Rpb24nICYmIGQuZ2V0RWxlbWVudEJ5SWQoICd3cGJjLXRpbWVfcGlja2VyLXNraW4tY3NzJyApICkge1xuXHRcdFx0XHR3LndwYmNfX2Nzc19fY2hhbmdlX3NraW4oIGF1dG9tYXRpY191cmwsICd3cGJjLXRpbWVfcGlja2VyLXNraW4tY3NzJyApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHBlbmRpbmdfdGltZV9waWNrZXJfc2tpbl9idXR0b24gPSBidXR0b247XG5cdFx0YnV0dG9uLnNldEF0dHJpYnV0ZSggJ2RhdGEtd3BiYy11LXNhdmUtdmFsdWUnLCBhdXRvbWF0aWNfc2tpbiApO1xuXHRcdHcud3BiY19zYXZlX29wdGlvbl9mcm9tX2VsZW1lbnQoIGJ1dHRvbiApO1xuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogTWFyayB0aGUgQXV0b21hdGljIHNraW4gYXMgY3VycmVudCBhZnRlciB0aGUgb3B0aW9uIHNhdmVyIGNvbmZpcm1zIGl0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdHcud3BiY19iZmJfdGltZV9waWNrZXJfc2tpbl9zYXZlZCA9IGZ1bmN0aW9uICgpIHtcblx0XHRpZiAoIHBlbmRpbmdfdGltZV9waWNrZXJfc2tpbl9idXR0b24gKSB7XG5cdFx0XHRwZW5kaW5nX3RpbWVfcGlja2VyX3NraW5fYnV0dG9uLnNldEF0dHJpYnV0ZSggJ2RhdGEtd3BiYy10aW1lLXBpY2tlci1za2luLWN1cnJlbnQnLCAnL2Nzcy90aW1lX3BpY2tlcl9za2lucy9mb3JtX3N0eWxlLmNzcycgKTtcblx0XHR9XG5cdFx0aWYgKCB3LldQQkNfQkZCX0NvcmUgJiYgdy5XUEJDX0JGQl9Db3JlLlRpbWUgJiYgdHlwZW9mIHcuV1BCQ19CRkJfQ29yZS5UaW1lLnVpX3NldF9waWNrZXJfc2tpbl92YWx1ZSA9PT0gJ2Z1bmN0aW9uJyApIHtcblx0XHRcdHcuV1BCQ19CRkJfQ29yZS5UaW1lLnVpX3NldF9waWNrZXJfc2tpbl92YWx1ZSggJy9jc3MvdGltZV9waWNrZXJfc2tpbnMvZm9ybV9zdHlsZS5jc3MnICk7XG5cdFx0fVxuXHRcdHBlbmRpbmdfdGltZV9waWNrZXJfc2tpbl9idXR0b24gPSBudWxsO1xuXHRcdHByZXZpb3VzX3RpbWVfcGlja2VyX3NraW5fdXJsID0gJyc7XG5cdH07XG5cblx0aWYgKCB3LmpRdWVyeSApIHtcblx0XHR3LmpRdWVyeSggZCApLm9uKCAnd3BiYzpvcHRpb246YWZ0ZXJTYXZlLndwYmNCZmJUaW1lUGlja2VyU2tpbicsIGZ1bmN0aW9uIChldmVudCwgcmVzcG9uc2UpIHtcblx0XHRcdGlmICggISBwZW5kaW5nX3RpbWVfcGlja2VyX3NraW5fYnV0dG9uIHx8ICggcmVzcG9uc2UgJiYgcmVzcG9uc2Uuc3VjY2VzcyApICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBwcmV2aW91c19za2luID0gU3RyaW5nKCBwZW5kaW5nX3RpbWVfcGlja2VyX3NraW5fYnV0dG9uLmdldEF0dHJpYnV0ZSggJ2RhdGEtd3BiYy10aW1lLXBpY2tlci1za2luLWN1cnJlbnQnICkgfHwgJycgKTtcblxuXHRcdFx0Y29uc3QgdGltZV9hcGkgPSB3LldQQkNfQkZCX0NvcmUgJiYgdy5XUEJDX0JGQl9Db3JlLlRpbWUgPyB3LldQQkNfQkZCX0NvcmUuVGltZSA6IG51bGw7XG5cdFx0XHRpZiAoIHByZXZpb3VzX3RpbWVfcGlja2VyX3NraW5fdXJsICYmIHRpbWVfYXBpICYmIHR5cGVvZiB0aW1lX2FwaS5hcHBseV9waWNrZXJfc2tpbl91cmwgPT09ICdmdW5jdGlvbicgKSB7XG5cdFx0XHRcdHRpbWVfYXBpLmFwcGx5X3BpY2tlcl9za2luX3VybCggcHJldmlvdXNfdGltZV9waWNrZXJfc2tpbl91cmwgKTtcblx0XHRcdH0gZWxzZSBpZiAoIHByZXZpb3VzX3RpbWVfcGlja2VyX3NraW5fdXJsICYmIHR5cGVvZiB3LndwYmNfX2Nzc19fY2hhbmdlX3NraW4gPT09ICdmdW5jdGlvbicgKSB7XG5cdFx0XHRcdHcud3BiY19fY3NzX19jaGFuZ2Vfc2tpbiggcHJldmlvdXNfdGltZV9waWNrZXJfc2tpbl91cmwsICd3cGJjLXRpbWVfcGlja2VyLXNraW4tY3NzJyApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCB3LldQQkNfQkZCX0NvcmUgJiYgdy5XUEJDX0JGQl9Db3JlLlRpbWUgJiYgdHlwZW9mIHcuV1BCQ19CRkJfQ29yZS5UaW1lLnVpX3NldF9waWNrZXJfc2tpbl92YWx1ZSA9PT0gJ2Z1bmN0aW9uJyApIHtcblx0XHRcdFx0dy5XUEJDX0JGQl9Db3JlLlRpbWUudWlfc2V0X3BpY2tlcl9za2luX3ZhbHVlKCBwcmV2aW91c19za2luICk7XG5cdFx0XHR9XG5cdFx0XHRwZW5kaW5nX3RpbWVfcGlja2VyX3NraW5fYnV0dG9uID0gbnVsbDtcblx0XHRcdHByZXZpb3VzX3RpbWVfcGlja2VyX3NraW5fdXJsID0gJyc7XG5cdFx0fSApO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFzayBhY2NlbnQtY2FwYWJsZSBmaWVsZCBwYWNrcyB0byBjb3B5IHRoZSBjdXJyZW50IGFjY2VudCBpbnRvIHRoZWlyXG5cdCAqIGV4aXN0aW5nIGVkaXRhYmxlIGNvbG9yIHByb3BlcnRpZXMuIEZpZWxkIHBhY2tzIHVwZGF0ZSB0aGUgY291bnRlcnMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7SFRNTEJ1dHRvbkVsZW1lbnR9IGJ1dHRvbiBBY3Rpb24gYnV0dG9uLlxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdGFwaS5hcHBseV9hY2NlbnRfdG9fY29tcG9uZW50cyA9IGZ1bmN0aW9uIChidXR0b24pIHtcblx0XHRjb25zdCB0b2dnbGUgPSBkLmdldEVsZW1lbnRCeUlkKCAnYm9va2luZ19mb3JtX2FjY2VudF9lbmFibGVkJyApO1xuXHRcdGNvbnN0IGNvbG9yX2NvbnRyb2wgPSBkLmdldEVsZW1lbnRCeUlkKCAnYm9va2luZ19mb3JtX2FjY2VudF9jb2xvcicgKTtcblx0XHRjb25zdCBzdGF0dXMgPSBkLnF1ZXJ5U2VsZWN0b3IoICdbZGF0YS13cGJjLWJmYi1hY2NlbnQtY29tcG9uZW50cy1zdGF0dXM9XCIxXCJdJyApO1xuXHRcdGNvbnN0IGkxOG4gPSB3LndwYmNfYmZiX3NldHRpbmdzX3ZhcnMgJiYgdy53cGJjX2JmYl9zZXR0aW5nc192YXJzLmkxOG4gPyB3LndwYmNfYmZiX3NldHRpbmdzX3ZhcnMuaTE4biA6IHt9O1xuXHRcdGNvbnN0IGRlZmF1bHRfYXBwZWFyYW5jZSA9IGdldF9kZWZhdWx0X2N1c3RvbV9hcHBlYXJhbmNlX3NldHRpbmdzKCk7XG5cdFx0Y29uc3QgYWNjZW50X2NvbG9yID0gY29sb3JfY29udHJvbCAmJiAvXiMoPzpbMC05YS1mXXszfXxbMC05YS1mXXs2fSkkL2kudGVzdCggU3RyaW5nKCBjb2xvcl9jb250cm9sLnZhbHVlIHx8ICcnICkudHJpbSgpIClcblx0XHRcdD8gU3RyaW5nKCBjb2xvcl9jb250cm9sLnZhbHVlICkudHJpbSgpXG5cdFx0XHQ6IFN0cmluZyggZGVmYXVsdF9hcHBlYXJhbmNlLmJvb2tpbmdfZm9ybV9hY2NlbnRfY29sb3IgfHwgJycgKS50cmltKCk7XG5cblx0XHRpZiAoICEgdG9nZ2xlIHx8ICEgdG9nZ2xlLmNoZWNrZWQgKSB7XG5cdFx0XHRpZiAoIHN0YXR1cyApIHtcblx0XHRcdFx0c3RhdHVzLnRleHRDb250ZW50ID0gaTE4bi5hY2NlbnRfZW5hYmxlX2ZpcnN0IHx8ICdFbmFibGUgQ3VzdG9tIGFjY2VudCBjb2xvciBmaXJzdC4nO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggYnV0dG9uICkge1xuXHRcdFx0YnV0dG9uLmRpc2FibGVkID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRjb25zdCBhcHBseV90b19idWlsZGVyID0gZnVuY3Rpb24gKGJ1aWxkZXIpIHtcblx0XHRcdGNvbnN0IGRldGFpbCA9IHtcblx0XHRcdFx0YWNjZW50X2NvbG9yOiBhY2NlbnRfY29sb3IsXG5cdFx0XHRcdGJ1aWxkZXIgICAgIDogYnVpbGRlciB8fCB3LndwYmNfYmZiIHx8IG51bGwsXG5cdFx0XHRcdG1hdGNoZWQgICAgIDogMCxcblx0XHRcdFx0dXBkYXRlZCAgICAgOiAwXG5cdFx0XHR9O1xuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRkLmRpc3BhdGNoRXZlbnQoIG5ldyBDdXN0b21FdmVudCggJ3dwYmM6YmZiOmFwcGx5LWFjY2VudC10by1jb21wb25lbnRzJywge1xuXHRcdFx0XHRcdGJ1YmJsZXM6IHRydWUsXG5cdFx0XHRcdFx0ZGV0YWlsIDogZGV0YWlsXG5cdFx0XHRcdH0gKSApO1xuXHRcdFx0fSBjYXRjaCAoIF9lICkge31cblxuXHRcdFx0Y29uc3QgdGltZV9waWNrZXJfc2F2ZV9zdGFydGVkID0gc3dpdGNoX3RpbWVfcGlja2VyX3RvX2F1dG9tYXRpYyggYnV0dG9uICk7XG5cblx0XHRcdGlmICggc3RhdHVzICkge1xuXHRcdFx0XHRpZiAoIGRldGFpbC51cGRhdGVkID4gMCApIHtcblx0XHRcdFx0XHRzdGF0dXMudGV4dENvbnRlbnQgPSAoIDEgPT09IGRldGFpbC51cGRhdGVkIClcblx0XHRcdFx0XHRcdD8gKCBpMThuLmFjY2VudF9hcHBsaWVkX29uZSB8fCAnQWNjZW50IGFwcGxpZWQgdG8gb25lIGZvcm0gZWxlbWVudC4gU2F2ZSBGb3JtIHRvIGtlZXAgdGhlIGNoYW5nZS4nIClcblx0XHRcdFx0XHRcdDogU3RyaW5nKCBpMThuLmFjY2VudF9hcHBsaWVkX21hbnkgfHwgJ0FjY2VudCBhcHBsaWVkIHRvICVkIGZvcm0gZWxlbWVudHMuIFNhdmUgRm9ybSB0byBrZWVwIHRoZSBjaGFuZ2VzLicgKS5yZXBsYWNlKCAnJWQnLCBTdHJpbmcoIGRldGFpbC51cGRhdGVkICkgKTtcblx0XHRcdFx0fSBlbHNlIGlmICggZGV0YWlsLm1hdGNoZWQgPiAwICkge1xuXHRcdFx0XHRcdHN0YXR1cy50ZXh0Q29udGVudCA9IGkxOG4uYWNjZW50X2FscmVhZHlfYXBwbGllZCB8fCAnQWxsIHN1cHBvcnRlZCBmb3JtIGVsZW1lbnRzIGFscmVhZHkgaGF2ZSB0aGUgY3VycmVudCBhY2NlbnQgY29sb3IuJztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzdGF0dXMudGV4dENvbnRlbnQgPSBpMThuLmFjY2VudF9ub19lbGVtZW50cyB8fCAnTm8gYWNjZW50LWNhcGFibGUgZm9ybSBlbGVtZW50cyB3ZXJlIGZvdW5kLic7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCB0aW1lX3BpY2tlcl9zYXZlX3N0YXJ0ZWQgKSB7XG5cdFx0XHRcdFx0c3RhdHVzLnRleHRDb250ZW50ICs9ICcgJyArICggaTE4bi5hY2NlbnRfdGltZV9waWNrZXJfYXV0b21hdGljIHx8ICdUaW1lIHNsb3RzIG5vdyB1c2UgQXV0b21hdGljIOKAlCBNYXRjaCBCb29raW5nIEZvcm0uJyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICggZGV0YWlsLnVwZGF0ZWQgPiAwICkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGQuZGlzcGF0Y2hFdmVudCggbmV3IEN1c3RvbUV2ZW50KCAnd3BiYzpiZmI6c3RydWN0dXJlOmNoYW5nZScsIHtcblx0XHRcdFx0XHRcdGJ1YmJsZXM6IHRydWUsXG5cdFx0XHRcdFx0XHRkZXRhaWwgOiB7IHNvdXJjZTogJ2FwcGx5LWFjY2VudC10by1jb21wb25lbnRzJywgdXBkYXRlZDogZGV0YWlsLnVwZGF0ZWQgfVxuXHRcdFx0XHRcdH0gKSApO1xuXHRcdFx0XHR9IGNhdGNoICggX2UyICkge31cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBkZXRhaWwuYnVpbGRlciAmJiB0eXBlb2YgZGV0YWlsLmJ1aWxkZXIuX2Fubm91bmNlID09PSAnZnVuY3Rpb24nICkge1xuXHRcdFx0XHRkZXRhaWwuYnVpbGRlci5fYW5ub3VuY2UoIHN0YXR1cyA/IHN0YXR1cy50ZXh0Q29udGVudCA6ICggaTE4bi5hY2NlbnRfYXBwbGllZF9hbm5vdW5jZW1lbnQgfHwgJ0Zvcm0gYWNjZW50IGFwcGxpZWQuJyApICk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIGJ1dHRvbiAmJiAhIHRpbWVfcGlja2VyX3NhdmVfc3RhcnRlZCApIHtcblx0XHRcdFx0YnV0dG9uLmRpc2FibGVkID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGlmICggdy53cGJjX2JmYl9hcGkgJiYgdy53cGJjX2JmYl9hcGkucmVhZHkgJiYgdHlwZW9mIHcud3BiY19iZmJfYXBpLnJlYWR5LnRoZW4gPT09ICdmdW5jdGlvbicgKSB7XG5cdFx0XHR3LndwYmNfYmZiX2FwaS5yZWFkeS50aGVuKCBhcHBseV90b19idWlsZGVyICk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0YXBwbHlfdG9fYnVpbGRlciggdy53cGJjX2JmYiB8fCBudWxsICk7XG5cdH07XG5cblx0ZC5hZGRFdmVudExpc3RlbmVyKCAnY2xpY2snLCBmdW5jdGlvbiAoZSkge1xuXHRcdGNvbnN0IGJ0biA9IGUgJiYgZS50YXJnZXQgJiYgZS50YXJnZXQuY2xvc2VzdCA/IGUudGFyZ2V0LmNsb3Nlc3QoICdbZGF0YS13cGJjLWJmYi1hcHBseS1hY2NlbnQtY29tcG9uZW50cz1cIjFcIl0nICkgOiBudWxsO1xuXHRcdGlmICggISBidG4gKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdGFwaS5hcHBseV9hY2NlbnRfdG9fY29tcG9uZW50cyggYnRuICk7XG5cdH0sIGZhbHNlICk7XG5cclxuXHRmdW5jdGlvbiBzY2hlZHVsZV9hcHBseV9yZXRyeSgpIHtcclxuXHRcdGlmIChyYWZfaWQpIHJldHVybjtcclxuXHJcblx0XHRyYWZfaWQgPSB3LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XHJcblx0XHRcdHJhZl9pZCA9IDA7XHJcblxyXG5cdFx0XHQvLyBJZiBzZXR0aW5ncyBVSSBub3QgcHJlc2VudCB5ZXQsIHJldHJ5IGEgZmV3IGZyYW1lcy5cclxuXHRcdFx0aWYgKCFoYXNfYW55X3Jvd3MoKSkge1xyXG5cdFx0XHRcdHJldHJ5X2NvdW50Kys7XHJcblx0XHRcdFx0aWYgKHJldHJ5X2NvdW50IDwgcmV0cnlfbWF4KSBzY2hlZHVsZV9hcHBseV9yZXRyeSgpO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0YXBpLnJlYXBwbHlfbGFzdCgpO1xuXHRcdFx0aW5pdF9jb2xvcmlzX3BpY2tlcnMoZCk7XG5cdFx0fSk7XG5cdH1cblxyXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0Ly8gT3B0aW9uYWwgQnVpbGRlciB0aW1pbmcgaG9vayAoU1RSVUNUVVJFX0xPQURFRCkgLT4gcmVhcHBseV9sYXN0KClcclxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHRmdW5jdGlvbiBiaW5kX2J1aWxkZXJfdGltaW5nX2hvb2soYnVpbGRlcl9pbnN0YW5jZSkge1xyXG5cdFx0Y29uc3QgY29yZSA9IHcuV1BCQ19CRkJfQ29yZTtcclxuXHRcdGNvbnN0IGV2ZW50cyA9IChjb3JlICYmIGNvcmUuV1BCQ19CRkJfRXZlbnRzKSA/IGNvcmUuV1BCQ19CRkJfRXZlbnRzIDogKHcuV1BCQ19CRkJfRXZlbnRzIHx8IG51bGwpO1xyXG5cclxuXHJcblx0XHRpZiAoIWJ1aWxkZXJfaW5zdGFuY2UgfHwgIWJ1aWxkZXJfaW5zdGFuY2UuYnVzIHx8ICFldmVudHMgfHwgIWV2ZW50cy5TVFJVQ1RVUkVfTE9BREVEKSByZXR1cm47XHJcblxyXG5cdFx0YnVpbGRlcl9pbnN0YW5jZS5idXMub24oZXZlbnRzLlNUUlVDVFVSRV9MT0FERUQsIGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0Ly8gQnVpbGRlciBtYXkgcmUtcmVuZGVyIHNldHRpbmdzIHBhbmVsIGFmdGVyIHN0cnVjdHVyZSBsb2FkLlxyXG5cdFx0XHQvLyBSZS1hcHBseSBsYXN0IHNldHRpbmdzIHBhY2sgKGlmIGFueSkuXHJcblx0XHRcdHJldHJ5X2NvdW50ID0gMDtcclxuXHRcdFx0c2NoZWR1bGVfYXBwbHlfcmV0cnkoKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0aWYgKHcud3BiY19iZmJfYXBpICYmIHcud3BiY19iZmJfYXBpLnJlYWR5ICYmIHR5cGVvZiB3LndwYmNfYmZiX2FwaS5yZWFkeS50aGVuID09PSAnZnVuY3Rpb24nKSB7XHJcblx0XHR3LndwYmNfYmZiX2FwaS5yZWFkeS50aGVuKGJpbmRfYnVpbGRlcl90aW1pbmdfaG9vayk7XHJcblx0fSBlbHNlIHtcclxuXHRcdHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyBpZiAody5fX0IpIHsgYmluZF9idWlsZGVyX3RpbWluZ19ob29rKCB3Ll9fQiApOyB9IH0sIDApO1xyXG5cdH1cclxuXHJcblx0Ly8gRE9NIHJlYWR5IGluaXQuXHJcblx0aWYgKGQucmVhZHlTdGF0ZSA9PT0gJ2xvYWRpbmcnKSBkLmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBhcGkuaW5pdCk7XHJcblx0ZWxzZSBhcGkuaW5pdCgpO1xyXG5cclxufSkod2luZG93LCBkb2N1bWVudCk7XHJcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBLENBQUMsVUFBVUEsQ0FBQyxFQUFFQyxDQUFDLEVBQUU7RUFDaEIsWUFBWTs7RUFFWjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNDLE1BQU1DLEdBQUcsR0FBSUYsQ0FBQyxDQUFDRyxx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 | |