PluginProbe
Booking Calendar / 11.9
Booking Calendar v11.9
11.9 11.8.4 11.8.3 11.8.2 11.8.1 11.8 11.7 11.6.1 11.6 11.5 11.4.3 11.4.2 11.4.1 11.4 11.3 11.2.1 11.2 11.1 11.0 10.15.7 10.15.6 10.1.3 10.10 10.10.1 10.10.2 All 205 releases
booking / includes / page-setup-wizard / first-run-launcher / _out / first-run-launcher.js

first-run-launcher.js in Booking Calendar 11.9, at includes/page-setup-wizard/first-run-launcher/_out/first-run-launcher.js

160 lines 17.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 "use strict";
2
3 /**
4 * First-install Setup Wizard invitation adapter.
5 *
6 * @package Booking Calendar
7 */
8 (function (window, document, $) {
9 'use strict';
10
11 var config = window.wpbc_setup_wizard_first_run_launcher_vars || {};
12 var request = null;
13 var previous_focus = null;
14 var redirect_started = false;
15
16 /**
17 * Restore focus to the pre-dialog control or a stable Booking Listing control.
18 *
19 * @return {void}
20 */
21 function restore_focus() {
22 var fallback_focus;
23 if (previous_focus && document.body !== previous_focus && document.contains(previous_focus)) {
24 previous_focus.focus();
25 return;
26 }
27 fallback_focus = document.querySelector('#wpbc_booking_listing_add_booking_button, .wpbc_ui_el__top_nav a, #wpbody-content h1');
28 if (fallback_focus && 'function' === typeof fallback_focus.focus) {
29 fallback_focus.focus();
30 }
31 }
32
33 /**
34 * Persist one validated launcher choice once per request.
35 *
36 * @param {string} choice Choice identifier.
37 * @return {jqXHR|null} Request, or null when configuration is incomplete.
38 */
39 function persist_choice(choice) {
40 if (request) {
41 return request;
42 }
43 if (!config.ajax_url || !config.action || !config.nonce) {
44 return null;
45 }
46 request = $.post(config.ajax_url, {
47 action: config.action,
48 nonce: config.nonce,
49 choice: choice
50 });
51 return request;
52 }
53
54 /**
55 * Render and open the invitation when all runtime dependencies exist.
56 *
57 * @return {void}
58 */
59 function show_dialog() {
60 var template;
61 var $modal;
62 var choice_started = false;
63 var selected_choice = '';
64 var request_finished = false;
65 var request_saved = false;
66 var modal_hidden = false;
67
68 /**
69 * Continue after both persistence and modal removal finish.
70 *
71 * @return {void}
72 */
73 function finish_dismissal() {
74 if (!request_finished || !modal_hidden) {
75 return;
76 }
77 if (request_saved && config.show_booking_pages_after_dismiss) {
78 $(document).trigger('wpbc:setup-booking-pages-open', [{
79 consume_prompt: true,
80 return_focus: previous_focus
81 }]);
82 return;
83 }
84 restore_focus();
85 }
86 if (!config.setup_url || !window.wp || 'function' !== typeof window.wp.template || 'function' !== typeof $.fn.wpbc_my_modal || !document.getElementById('tmpl-wpbc-setup-wizard-first-run-popup')) {
87 return;
88 }
89 previous_focus = document.activeElement;
90 template = window.wp.template('wpbc-setup-wizard-first-run-popup');
91 $(document.body).append(template({}));
92 $modal = $('#wpbc_setup_wizard_first_run_popup');
93 $modal.on('shown.wpbc.modal.wpbcSetupFirstRun', function () {
94 $modal.attr('aria-hidden', 'false');
95 $('.modal-backdrop').last().addClass('wpbc_setup_wizard_first_run_popup__backdrop');
96 $modal.find('[data-wpbc-setup-first-run-start]').trigger('focus');
97 });
98 $modal.on('hide.wpbc.modal.wpbcSetupFirstRun', function () {
99 var dismissal_request;
100 if (choice_started) {
101 return;
102 }
103 choice_started = true;
104 selected_choice = 'dismiss';
105 dismissal_request = persist_choice(selected_choice);
106 if (!dismissal_request) {
107 request_finished = true;
108 return;
109 }
110 dismissal_request.done(function (response) {
111 request_saved = !!(response && true === response.success);
112 }).always(function () {
113 request_finished = true;
114 finish_dismissal();
115 });
116 });
117 $modal.on('hidden.wpbc.modal.wpbcSetupFirstRun', function () {
118 $modal.attr('aria-hidden', 'true').remove();
119 modal_hidden = true;
120 if ('dismiss' === selected_choice) {
121 finish_dismissal();
122 }
123 });
124 $modal.on('click.wpbcSetupFirstRun', '[data-wpbc-setup-first-run-dismiss]', function (event) {
125 event.preventDefault();
126 $modal.wpbc_my_modal('hide');
127 });
128 $modal.on('click.wpbcSetupFirstRun', '[data-wpbc-setup-first-run-start]', function (event) {
129 var start_request;
130 event.preventDefault();
131 choice_started = true;
132 selected_choice = 'start';
133 start_request = persist_choice(selected_choice);
134 if (start_request) {
135 start_request.always(function () {
136 if (!redirect_started) {
137 redirect_started = true;
138 window.location.assign(config.setup_url);
139 }
140 });
141 } else if (!redirect_started) {
142 redirect_started = true;
143 window.location.assign(config.setup_url);
144 }
145 $modal.wpbc_my_modal('hide');
146 });
147 $modal.wpbc_my_modal({
148 backdrop: 'static',
149 keyboard: true,
150 show: true
151 });
152 }
153 $(function () {
154 if (config.show) {
155 show_dialog();
156 }
157 });
158 })(window, document, window.jQuery);
159 //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jbHVkZXMvcGFnZS1zZXR1cC13aXphcmQvZmlyc3QtcnVuLWxhdW5jaGVyL19vdXQvZmlyc3QtcnVuLWxhdW5jaGVyLmpzIiwibmFtZXMiOlsid2luZG93IiwiZG9jdW1lbnQiLCIkIiwiY29uZmlnIiwid3BiY19zZXR1cF93aXphcmRfZmlyc3RfcnVuX2xhdW5jaGVyX3ZhcnMiLCJyZXF1ZXN0IiwicHJldmlvdXNfZm9jdXMiLCJyZWRpcmVjdF9zdGFydGVkIiwicmVzdG9yZV9mb2N1cyIsImZhbGxiYWNrX2ZvY3VzIiwiYm9keSIsImNvbnRhaW5zIiwiZm9jdXMiLCJxdWVyeVNlbGVjdG9yIiwicGVyc2lzdF9jaG9pY2UiLCJjaG9pY2UiLCJhamF4X3VybCIsImFjdGlvbiIsIm5vbmNlIiwicG9zdCIsInNob3dfZGlhbG9nIiwidGVtcGxhdGUiLCIkbW9kYWwiLCJjaG9pY2Vfc3RhcnRlZCIsInNlbGVjdGVkX2Nob2ljZSIsInJlcXVlc3RfZmluaXNoZWQiLCJyZXF1ZXN0X3NhdmVkIiwibW9kYWxfaGlkZGVuIiwiZmluaXNoX2Rpc21pc3NhbCIsInNob3dfYm9va2luZ19wYWdlc19hZnRlcl9kaXNtaXNzIiwidHJpZ2dlciIsImNvbnN1bWVfcHJvbXB0IiwicmV0dXJuX2ZvY3VzIiwic2V0dXBfdXJsIiwid3AiLCJmbiIsIndwYmNfbXlfbW9kYWwiLCJnZXRFbGVtZW50QnlJZCIsImFjdGl2ZUVsZW1lbnQiLCJhcHBlbmQiLCJvbiIsImF0dHIiLCJsYXN0IiwiYWRkQ2xhc3MiLCJmaW5kIiwiZGlzbWlzc2FsX3JlcXVlc3QiLCJkb25lIiwicmVzcG9uc2UiLCJzdWNjZXNzIiwiYWx3YXlzIiwicmVtb3ZlIiwiZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsInN0YXJ0X3JlcXVlc3QiLCJsb2NhdGlvbiIsImFzc2lnbiIsImJhY2tkcm9wIiwia2V5Ym9hcmQiLCJzaG93IiwialF1ZXJ5Il0sInNvdXJjZXMiOlsiaW5jbHVkZXMvcGFnZS1zZXR1cC13aXphcmQvZmlyc3QtcnVuLWxhdW5jaGVyL19zcmMvZmlyc3QtcnVuLWxhdW5jaGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRmlyc3QtaW5zdGFsbCBTZXR1cCBXaXphcmQgaW52aXRhdGlvbiBhZGFwdGVyLlxuICpcbiAqIEBwYWNrYWdlIEJvb2tpbmcgQ2FsZW5kYXJcbiAqL1xuKCBmdW5jdGlvbiggd2luZG93LCBkb2N1bWVudCwgJCApIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdHZhciBjb25maWcgPSB3aW5kb3cud3BiY19zZXR1cF93aXphcmRfZmlyc3RfcnVuX2xhdW5jaGVyX3ZhcnMgfHwge307XG5cdHZhciByZXF1ZXN0ID0gbnVsbDtcblx0dmFyIHByZXZpb3VzX2ZvY3VzID0gbnVsbDtcblx0dmFyIHJlZGlyZWN0X3N0YXJ0ZWQgPSBmYWxzZTtcblxuXHQvKipcblx0ICogUmVzdG9yZSBmb2N1cyB0byB0aGUgcHJlLWRpYWxvZyBjb250cm9sIG9yIGEgc3RhYmxlIEJvb2tpbmcgTGlzdGluZyBjb250cm9sLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0ZnVuY3Rpb24gcmVzdG9yZV9mb2N1cygpIHtcblx0XHR2YXIgZmFsbGJhY2tfZm9jdXM7XG5cblx0XHRpZiAoIHByZXZpb3VzX2ZvY3VzICYmIGRvY3VtZW50LmJvZHkgIT09IHByZXZpb3VzX2ZvY3VzICYmIGRvY3VtZW50LmNvbnRhaW5zKCBwcmV2aW91c19mb2N1cyApICkge1xuXHRcdFx0cHJldmlvdXNfZm9jdXMuZm9jdXMoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRmYWxsYmFja19mb2N1cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoICcjd3BiY19ib29raW5nX2xpc3RpbmdfYWRkX2Jvb2tpbmdfYnV0dG9uLCAud3BiY191aV9lbF9fdG9wX25hdiBhLCAjd3Bib2R5LWNvbnRlbnQgaDEnICk7XG5cdFx0aWYgKCBmYWxsYmFja19mb2N1cyAmJiAnZnVuY3Rpb24nID09PSB0eXBlb2YgZmFsbGJhY2tfZm9jdXMuZm9jdXMgKSB7XG5cdFx0XHRmYWxsYmFja19mb2N1cy5mb2N1cygpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBQZXJzaXN0IG9uZSB2YWxpZGF0ZWQgbGF1bmNoZXIgY2hvaWNlIG9uY2UgcGVyIHJlcXVlc3QuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBjaG9pY2UgQ2hvaWNlIGlkZW50aWZpZXIuXG5cdCAqIEByZXR1cm4ge2pxWEhSfG51bGx9IFJlcXVlc3QsIG9yIG51bGwgd2hlbiBjb25maWd1cmF0aW9uIGlzIGluY29tcGxldGUuXG5cdCAqL1xuXHRmdW5jdGlvbiBwZXJzaXN0X2Nob2ljZSggY2hvaWNlICkge1xuXHRcdGlmICggcmVxdWVzdCApIHtcblx0XHRcdHJldHVybiByZXF1ZXN0O1xuXHRcdH1cblx0XHRpZiAoICEgY29uZmlnLmFqYXhfdXJsIHx8ICEgY29uZmlnLmFjdGlvbiB8fCAhIGNvbmZpZy5ub25jZSApIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdHJlcXVlc3QgPSAkLnBvc3QoIGNvbmZpZy5hamF4X3VybCwge1xuXHRcdFx0YWN0aW9uOiBjb25maWcuYWN0aW9uLFxuXHRcdFx0bm9uY2U6IGNvbmZpZy5ub25jZSxcblx0XHRcdGNob2ljZTogY2hvaWNlXG5cdFx0fSApO1xuXG5cdFx0cmV0dXJuIHJlcXVlc3Q7XG5cdH1cblxuXHQvKipcblx0ICogUmVuZGVyIGFuZCBvcGVuIHRoZSBpbnZpdGF0aW9uIHdoZW4gYWxsIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIGV4aXN0LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0ZnVuY3Rpb24gc2hvd19kaWFsb2coKSB7XG5cdFx0dmFyIHRlbXBsYXRlO1xuXHRcdHZhciAkbW9kYWw7XG5cdFx0dmFyIGNob2ljZV9zdGFydGVkID0gZmFsc2U7XG5cdFx0dmFyIHNlbGVjdGVkX2Nob2ljZSA9ICcnO1xuXHRcdHZhciByZXF1ZXN0X2ZpbmlzaGVkID0gZmFsc2U7XG5cdFx0dmFyIHJlcXVlc3Rfc2F2ZWQgPSBmYWxzZTtcblx0XHR2YXIgbW9kYWxfaGlkZGVuID0gZmFsc2U7XG5cblx0XHQvKipcblx0XHQgKiBDb250aW51ZSBhZnRlciBib3RoIHBlcnNpc3RlbmNlIGFuZCBtb2RhbCByZW1vdmFsIGZpbmlzaC5cblx0XHQgKlxuXHRcdCAqIEByZXR1cm4ge3ZvaWR9XG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gZmluaXNoX2Rpc21pc3NhbCgpIHtcblx0XHRcdGlmICggISByZXF1ZXN0X2ZpbmlzaGVkIHx8ICEgbW9kYWxfaGlkZGVuICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICggcmVxdWVzdF9zYXZlZCAmJiBjb25maWcuc2hvd19ib29raW5nX3BhZ2VzX2FmdGVyX2Rpc21pc3MgKSB7XG5cdFx0XHRcdCQoIGRvY3VtZW50ICkudHJpZ2dlciggJ3dwYmM6c2V0dXAtYm9va2luZy1wYWdlcy1vcGVuJywgWyB7XG5cdFx0XHRcdFx0Y29uc3VtZV9wcm9tcHQ6IHRydWUsXG5cdFx0XHRcdFx0cmV0dXJuX2ZvY3VzOiBwcmV2aW91c19mb2N1c1xuXHRcdFx0XHR9IF0gKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXN0b3JlX2ZvY3VzKCk7XG5cdFx0fVxuXG5cdFx0aWYgKCAhIGNvbmZpZy5zZXR1cF91cmwgfHwgISB3aW5kb3cud3AgfHwgJ2Z1bmN0aW9uJyAhPT0gdHlwZW9mIHdpbmRvdy53cC50ZW1wbGF0ZSB8fCAnZnVuY3Rpb24nICE9PSB0eXBlb2YgJC5mbi53cGJjX215X21vZGFsIHx8ICEgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICd0bXBsLXdwYmMtc2V0dXAtd2l6YXJkLWZpcnN0LXJ1bi1wb3B1cCcgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRwcmV2aW91c19mb2N1cyA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG5cdFx0dGVtcGxhdGUgPSB3aW5kb3cud3AudGVtcGxhdGUoICd3cGJjLXNldHVwLXdpemFyZC1maXJzdC1ydW4tcG9wdXAnICk7XG5cdFx0JCggZG9jdW1lbnQuYm9keSApLmFwcGVuZCggdGVtcGxhdGUoIHt9ICkgKTtcblx0XHQkbW9kYWwgPSAkKCAnI3dwYmNfc2V0dXBfd2l6YXJkX2ZpcnN0X3J1bl9wb3B1cCcgKTtcblxuXHRcdCRtb2RhbC5vbiggJ3Nob3duLndwYmMubW9kYWwud3BiY1NldHVwRmlyc3RSdW4nLCBmdW5jdGlvbigpIHtcblx0XHRcdCRtb2RhbC5hdHRyKCAnYXJpYS1oaWRkZW4nLCAnZmFsc2UnICk7XG5cdFx0XHQkKCAnLm1vZGFsLWJhY2tkcm9wJyApLmxhc3QoKS5hZGRDbGFzcyggJ3dwYmNfc2V0dXBfd2l6YXJkX2ZpcnN0X3J1bl9wb3B1cF9fYmFja2Ryb3AnICk7XG5cdFx0XHQkbW9kYWwuZmluZCggJ1tkYXRhLXdwYmMtc2V0dXAtZmlyc3QtcnVuLXN0YXJ0XScgKS50cmlnZ2VyKCAnZm9jdXMnICk7XG5cdFx0fSApO1xuXG5cdFx0JG1vZGFsLm9uKCAnaGlkZS53cGJjLm1vZGFsLndwYmNTZXR1cEZpcnN0UnVuJywgZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgZGlzbWlzc2FsX3JlcXVlc3Q7XG5cblx0XHRcdGlmICggY2hvaWNlX3N0YXJ0ZWQgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNob2ljZV9zdGFydGVkID0gdHJ1ZTtcblx0XHRcdHNlbGVjdGVkX2Nob2ljZSA9ICdkaXNtaXNzJztcblx0XHRcdGRpc21pc3NhbF9yZXF1ZXN0ID0gcGVyc2lzdF9jaG9pY2UoIHNlbGVjdGVkX2Nob2ljZSApO1xuXHRcdFx0aWYgKCAhIGRpc21pc3NhbF9yZXF1ZXN0ICkge1xuXHRcdFx0XHRyZXF1ZXN0X2ZpbmlzaGVkID0gdHJ1ZTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0ZGlzbWlzc2FsX3JlcXVlc3QuZG9uZSggZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0XHRyZXF1ZXN0X3NhdmVkID0gISEgKCByZXNwb25zZSAmJiB0cnVlID09PSByZXNwb25zZS5zdWNjZXNzICk7XG5cdFx0XHR9ICkuYWx3YXlzKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmVxdWVzdF9maW5pc2hlZCA9IHRydWU7XG5cdFx0XHRcdGZpbmlzaF9kaXNtaXNzYWwoKTtcblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cblx0XHQkbW9kYWwub24oICdoaWRkZW4ud3BiYy5tb2RhbC53cGJjU2V0dXBGaXJzdFJ1bicsIGZ1bmN0aW9uKCkge1xuXHRcdFx0JG1vZGFsLmF0dHIoICdhcmlhLWhpZGRlbicsICd0cnVlJyApLnJlbW92ZSgpO1xuXHRcdFx0bW9kYWxfaGlkZGVuID0gdHJ1ZTtcblx0XHRcdGlmICggJ2Rpc21pc3MnID09PSBzZWxlY3RlZF9jaG9pY2UgKSB7XG5cdFx0XHRcdGZpbmlzaF9kaXNtaXNzYWwoKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cblx0XHQkbW9kYWwub24oICdjbGljay53cGJjU2V0dXBGaXJzdFJ1bicsICdbZGF0YS13cGJjLXNldHVwLWZpcnN0LXJ1bi1kaXNtaXNzXScsIGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHQkbW9kYWwud3BiY19teV9tb2RhbCggJ2hpZGUnICk7XG5cdFx0fSApO1xuXG5cdFx0JG1vZGFsLm9uKCAnY2xpY2sud3BiY1NldHVwRmlyc3RSdW4nLCAnW2RhdGEtd3BiYy1zZXR1cC1maXJzdC1ydW4tc3RhcnRdJywgZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0dmFyIHN0YXJ0X3JlcXVlc3Q7XG5cblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRjaG9pY2Vfc3RhcnRlZCA9IHRydWU7XG5cdFx0XHRzZWxlY3RlZF9jaG9pY2UgPSAnc3RhcnQnO1xuXHRcdFx0c3RhcnRfcmVxdWVzdCA9IHBlcnNpc3RfY2hvaWNlKCBzZWxlY3RlZF9jaG9pY2UgKTtcblx0XHRcdGlmICggc3RhcnRfcmVxdWVzdCApIHtcblx0XHRcdFx0c3RhcnRfcmVxdWVzdC5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggISByZWRpcmVjdF9zdGFydGVkICkge1xuXHRcdFx0XHRcdFx0cmVkaXJlY3Rfc3RhcnRlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHR3aW5kb3cubG9jYXRpb24uYXNzaWduKCBjb25maWcuc2V0dXBfdXJsICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0XHR9IGVsc2UgaWYgKCAhIHJlZGlyZWN0X3N0YXJ0ZWQgKSB7XG5cdFx0XHRcdHJlZGlyZWN0X3N0YXJ0ZWQgPSB0cnVlO1xuXHRcdFx0XHR3aW5kb3cubG9jYXRpb24uYXNzaWduKCBjb25maWcuc2V0dXBfdXJsICk7XG5cdFx0XHR9XG5cdFx0XHQkbW9kYWwud3BiY19teV9tb2RhbCggJ2hpZGUnICk7XG5cdFx0fSApO1xuXG5cdFx0JG1vZGFsLndwYmNfbXlfbW9kYWwoIHsgYmFja2Ryb3A6ICdzdGF0aWMnLCBrZXlib2FyZDogdHJ1ZSwgc2hvdzogdHJ1ZSB9ICk7XG5cdH1cblxuXHQkKCBmdW5jdGlvbigpIHtcblx0XHRpZiAoIGNvbmZpZy5zaG93ICkge1xuXHRcdFx0c2hvd19kaWFsb2coKTtcblx0XHR9XG5cdH0gKTtcbn0oIHdpbmRvdywgZG9jdW1lbnQsIHdpbmRvdy5qUXVlcnkgKSApO1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDRSxXQUFVQSxNQUFNLEVBQUVDLFFBQVEsRUFBRUMsQ0FBQyxFQUFHO0VBQ2pDLFlBQVk7O0VBRVosSUFBSUMsTUFBTSxHQUFHSCxNQUFNLENBQUNJLHlDQUF5QyxJQUFJLENBQUMsQ0FBQztFQUNuRSxJQUFJQyxPQUFPLEdBQUcsSUFBSTtFQUNsQixJQUFJQyxjQUFjLEdBQUcsSUFBSTtFQUN6QixJQUFJQyxnQkFBZ0IsR0FBRyxLQUFLOztFQUU1QjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0VBQ0MsU0FB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
160