Changeset 3339385
- Timestamp:
- 08/05/2025 05:01:50 AM (7 months ago)
- Location:
- wc-dpd
- Files:
-
- 89 added
- 21 edited
-
assets/screenshot-1.png (modified) (previous)
-
assets/screenshot-2.png (modified) (previous)
-
assets/screenshot-3.png (modified) (previous)
-
assets/screenshot-4.png (modified) (previous)
-
tags/8.1.0 (added)
-
tags/8.1.0/includes (added)
-
tags/8.1.0/includes/Ajax.php (added)
-
tags/8.1.0/includes/Assets.php (added)
-
tags/8.1.0/includes/Blocks.php (added)
-
tags/8.1.0/includes/Client.php (added)
-
tags/8.1.0/includes/Core.php (added)
-
tags/8.1.0/includes/DpdExport.php (added)
-
tags/8.1.0/includes/DpdExportSettings.php (added)
-
tags/8.1.0/includes/DpdParcelShopShippingMethod.php (added)
-
tags/8.1.0/includes/Email.php (added)
-
tags/8.1.0/includes/Hooks.php (added)
-
tags/8.1.0/includes/Notice.php (added)
-
tags/8.1.0/includes/Order.php (added)
-
tags/8.1.0/includes/OrderList.php (added)
-
tags/8.1.0/includes/OrderMetabox.php (added)
-
tags/8.1.0/includes/Shipping.php (added)
-
tags/8.1.0/includes/helpers.php (added)
-
tags/8.1.0/index.php (added)
-
tags/8.1.0/languages (added)
-
tags/8.1.0/languages/wc-dpd-sk_SK.mo (added)
-
tags/8.1.0/languages/wc-dpd-sk_SK.po (added)
-
tags/8.1.0/languages/wc-dpd.pot (added)
-
tags/8.1.0/public (added)
-
tags/8.1.0/public/js (added)
-
tags/8.1.0/public/main.js (added)
-
tags/8.1.0/public/mix-manifest.json (added)
-
tags/8.1.0/public/scripts (added)
-
tags/8.1.0/public/scripts/dpd-export-settings-admin-repeater.js (added)
-
tags/8.1.0/public/scripts/dpd-export-settings-admin-repeater.js.map (added)
-
tags/8.1.0/public/scripts/dpd-export-settings-admin.js (added)
-
tags/8.1.0/public/scripts/dpd-export-settings-admin.js.map (added)
-
tags/8.1.0/public/scripts/dpd-parcelshop-block-shipping-method.js (added)
-
tags/8.1.0/public/scripts/dpd-parcelshop-map-widget.js (added)
-
tags/8.1.0/public/scripts/dpd-parcelshop-map-widget.js.map (added)
-
tags/8.1.0/public/scripts/dpd-parcelshop-popup.js (added)
-
tags/8.1.0/public/scripts/dpd-parcelshop-popup.js.map (added)
-
tags/8.1.0/public/scripts/dpd-parcelshop-shipping-method-weight-by-package-repeater.js (added)
-
tags/8.1.0/public/scripts/dpd-parcelshop-shipping-method-weight-by-package-repeater.js.map (added)
-
tags/8.1.0/public/scripts/dpd-parcelshop-widget.js (added)
-
tags/8.1.0/public/styles (added)
-
tags/8.1.0/public/styles/dpd-export-repeater-settings-field.css (added)
-
tags/8.1.0/public/styles/dpd-export-repeater-settings-field.css.map (added)
-
tags/8.1.0/public/styles/dpd-parcelshop-block-shipping-method.css (added)
-
tags/8.1.0/public/styles/dpd-parcelshop-map-widget.css (added)
-
tags/8.1.0/public/styles/dpd-parcelshop-map-widget.css.map (added)
-
tags/8.1.0/public/styles/dpd-parcelshop-popup.css (added)
-
tags/8.1.0/public/styles/dpd-parcelshop-popup.css.map (added)
-
tags/8.1.0/public/styles/dpd-parcelshop-shipping-method-content.css (added)
-
tags/8.1.0/public/styles/dpd-parcelshop-shipping-method-content.css.map (added)
-
tags/8.1.0/public/styles/dpd-parcelshop-widget.css (added)
-
tags/8.1.0/readme.txt (added)
-
tags/8.1.0/templates (added)
-
tags/8.1.0/templates/chosen-parcelshop-order-data.php (added)
-
tags/8.1.0/templates/parcelshop-map-widget.php (added)
-
tags/8.1.0/templates/parcelshop-popup.php (added)
-
tags/8.1.0/templates/parcelshop-shipping-method-content.php (added)
-
tags/8.1.0/vendor (added)
-
tags/8.1.0/vendor/autoload.php (added)
-
tags/8.1.0/vendor/composer (added)
-
tags/8.1.0/vendor/composer/ClassLoader.php (added)
-
tags/8.1.0/vendor/composer/InstalledVersions.php (added)
-
tags/8.1.0/vendor/composer/LICENSE (added)
-
tags/8.1.0/vendor/composer/autoload_classmap.php (added)
-
tags/8.1.0/vendor/composer/autoload_files.php (added)
-
tags/8.1.0/vendor/composer/autoload_namespaces.php (added)
-
tags/8.1.0/vendor/composer/autoload_psr4.php (added)
-
tags/8.1.0/vendor/composer/autoload_real.php (added)
-
tags/8.1.0/vendor/composer/autoload_static.php (added)
-
tags/8.1.0/vendor/composer/installed.json (added)
-
tags/8.1.0/vendor/composer/installed.php (added)
-
tags/8.1.0/vendor/composer/platform_check.php (added)
-
tags/8.1.0/vendor/league (added)
-
tags/8.1.0/vendor/league/iso3166 (added)
-
tags/8.1.0/vendor/league/iso3166/.yamllint (added)
-
tags/8.1.0/vendor/league/iso3166/LICENSE (added)
-
tags/8.1.0/vendor/league/iso3166/composer.json (added)
-
tags/8.1.0/vendor/league/iso3166/src (added)
-
tags/8.1.0/vendor/league/iso3166/src/Exception (added)
-
tags/8.1.0/vendor/league/iso3166/src/Exception/DomainException.php (added)
-
tags/8.1.0/vendor/league/iso3166/src/Exception/ISO3166Exception.php (added)
-
tags/8.1.0/vendor/league/iso3166/src/Exception/OutOfBoundsException.php (added)
-
tags/8.1.0/vendor/league/iso3166/src/Guards.php (added)
-
tags/8.1.0/vendor/league/iso3166/src/ISO3166.php (added)
-
tags/8.1.0/vendor/league/iso3166/src/ISO3166DataProvider.php (added)
-
tags/8.1.0/vendor/league/iso3166/src/ISO3166DataValidator.php (added)
-
tags/8.1.0/vendor/league/iso3166/src/ISO3166WithAliases.php (added)
-
tags/8.1.0/wc-dpd.php (added)
-
trunk/includes/Blocks.php (modified) (1 diff)
-
trunk/includes/Core.php (modified) (1 diff)
-
trunk/includes/DpdParcelShopShippingMethod.php (modified) (1 diff)
-
trunk/includes/helpers.php (modified) (1 diff)
-
trunk/languages/wc-dpd-sk_SK.mo (modified) (previous)
-
trunk/languages/wc-dpd-sk_SK.po (modified) (9 diffs)
-
trunk/languages/wc-dpd.pot (modified) (7 diffs)
-
trunk/public/js (added)
-
trunk/public/mix-manifest.json (modified) (1 diff)
-
trunk/public/scripts/dpd-parcelshop-map-widget.js (modified) (1 diff)
-
trunk/readme.txt (modified) (2 diffs)
-
trunk/vendor/composer/installed.json (modified) (2 diffs)
-
trunk/vendor/composer/installed.php (modified) (1 diff)
-
trunk/vendor/league/iso3166/src/Guards.php (modified) (1 diff)
-
trunk/vendor/league/iso3166/src/ISO3166.php (modified) (3 diffs)
-
trunk/vendor/league/iso3166/src/ISO3166DataValidator.php (modified) (3 diffs)
-
trunk/vendor/league/iso3166/src/ISO3166WithAliases.php (modified) (2 diffs)
-
trunk/wc-dpd.php (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
wc-dpd/trunk/includes/Blocks.php
r3255337 r3339385 15 15 if (!is_woocommerce_blocks_enabled()) { 16 16 return; 17 } 18 19 // Hook into Store API validation - this is the main validation for blocks checkout 20 add_action('woocommerce_store_api_checkout_update_order_from_request', [__CLASS__, 'validateParcelShopOnStoreApi'], 10, 2); 21 22 // Additional validation hook for checkout processing 23 add_action('woocommerce_rest_checkout_process_payment_with_context', [__CLASS__, 'validateParcelShopBeforePayment'], 5, 2); 24 } 25 26 /** 27 * Validate parcel shop selection for Store API requests 28 * 29 * @param \WC_Order $order 30 * @param \WP_REST_Request $request 31 */ 32 public static function validateParcelShopOnStoreApi($order, $request) 33 { 34 self::validateParcelShopSelection($order); 35 } 36 37 /** 38 * Validate parcel shop selection before payment processing 39 * 40 * @param \Automattic\WooCommerce\StoreApi\Utilities\CheckoutTrait $context 41 * @param \Automattic\WooCommerce\StoreApi\Utilities\PaymentResult $result 42 */ 43 public static function validateParcelShopBeforePayment($context, $result) 44 { 45 if (isset($context->order)) { 46 self::validateParcelShopSelection($context->order); 47 } 48 } 49 50 /** 51 * Core validation logic for parcel shop selection 52 * 53 * @param \WC_Order $order 54 * @throws \Exception 55 */ 56 private static function validateParcelShopSelection($order) 57 { 58 $shipping_methods = $order->get_shipping_methods(); 59 60 foreach ($shipping_methods as $shipping_method) { 61 if ($shipping_method->get_method_id() === DpdParcelShopShippingMethod::SETTINGS_ID_KEY) { 62 // Check if parcel shop data exists in session 63 $chosen_parcelshop_data = WC()->session ? WC()->session->get(Shipping::SESSION_CHOSEN_PARCELSHOP_KEY) : null; 64 65 // If no session data, also check if data was passed in the request 66 if (empty($chosen_parcelshop_data)) { 67 // Check if parcel shop data was passed directly in the order meta or request 68 $parcelshop_pus_id = $order->get_meta(DpdParcelShopShippingMethod::PARCELSHOP_PUS_ID_META_KEY); 69 $parcelshop_name = $order->get_meta(DpdParcelShopShippingMethod::PARCELSHOP_NAME_META_KEY); 70 71 if (empty($parcelshop_pus_id) && empty($parcelshop_name)) { 72 throw new \Exception(__("You have to choose a parcelshop.", "wc-dpd")); 73 } 74 } else { 75 // Validate session data completeness using the correct field names 76 $required_fields = [ 77 DpdParcelShopShippingMethod::PARCELSHOP_PUS_ID_META_KEY => __("Parcel shop ID is required.", "wc-dpd"), 78 DpdParcelShopShippingMethod::PARCELSHOP_NAME_META_KEY => __("Parcel shop name is required.", "wc-dpd"), 79 DpdParcelShopShippingMethod::PARCELSHOP_STREET_META_KEY => __("Parcel shop street is required.", "wc-dpd"), 80 DpdParcelShopShippingMethod::PARCELSHOP_ZIP_META_KEY => __("Parcel shop ZIP code is required.", "wc-dpd"), 81 DpdParcelShopShippingMethod::PARCELSHOP_CITY_META_KEY => __("Parcel shop city is required.", "wc-dpd"), 82 DpdParcelShopShippingMethod::PARCELSHOP_COUNTRY_CODE_META_KEY => __("Parcel shop country code is required.", "wc-dpd") 83 ]; 84 85 foreach ($required_fields as $field => $error_message) { 86 if (empty($chosen_parcelshop_data[$field])) { 87 throw new \Exception($error_message); 88 } 89 } 90 } 91 92 break; 93 } 17 94 } 18 95 } -
wc-dpd/trunk/includes/Core.php
r3255337 r3339385 25 25 Email::init(); 26 26 Hooks::init(); 27 Blocks::init();27 Blocks::init(); 28 28 } 29 29 -
wc-dpd/trunk/includes/DpdParcelShopShippingMethod.php
r3292802 r3339385 137 137 'title' => __('Free shipping from', 'wc-dpd'), 138 138 'type' => 'price', 139 'description' => __(' If you exceed the price in the cart, shipping will be free.', 'wc-dpd'),139 'description' => __('Set minimum cart value for free shipping. Leave empty to disable free shipping entirely.', 'wc-dpd'), 140 140 'default' => '', 141 141 'desc_tip' => true, -
wc-dpd/trunk/includes/helpers.php
r3255337 r3339385 173 173 function is_cart_or_checkout_page() 174 174 { 175 return (bool) (is_cart() || is_checkout()); 175 $is_cart_or_checkout = (bool) (is_cart() || is_checkout()); 176 177 /** 178 * Filter to customize cart or checkout page detection 179 * 180 * @param bool $is_cart_or_checkout Current detection result 181 * @return bool Modified detection result 182 */ 183 return apply_filters('wc_dpd_is_cart_or_checkout_page', $is_cart_or_checkout); 176 184 } 177 185 -
wc-dpd/trunk/languages/wc-dpd-sk_SK.po
r3255337 r3339385 1 1 msgid "" 2 2 msgstr "" 3 "Project-Id-Version: DPD SK for WooCommerce - 7.0.1\n"3 "Project-Id-Version: DPD SK for WooCommerce - 8.1.0\n" 4 4 "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wc-dpd\n" 5 "POT-Creation-Date: 2025-0 3-12T13:34:54+00:00\n"6 "PO-Revision-Date: 2025-0 3-12 14:35+0100\n"5 "POT-Creation-Date: 2025-08-04T19:06:58+00:00\n" 6 "PO-Revision-Date: 2025-08-05 06:42+0200\n" 7 7 "Last-Translator: \n" 8 8 "Language-Team: Slovenčina\n" … … 13 13 "Plural-Forms: nplurals=3; plural=( n == 1 ) ? 0 : ( n >= 2 && n <= 4 ) ? 1 : " 14 14 "2;\n" 15 "X-Generator: Poedit 3. 5\n"15 "X-Generator: Poedit 3.6\n" 16 16 "X-Loco-Version: 2.6.1; wp-5.9.3\n" 17 17 "X-Domain: wc-dpd\n" … … 60 60 msgstr "Vyberte si prosím jeden z dostupných DPD Pickup/Pickup Station miest!" 61 61 62 #: includes/Blocks.php:72 includes/Shipping.php:76 63 msgid "You have to choose a parcelshop." 64 msgstr "Musíte si vybrať DPD Pickup/Pickup Station." 65 66 #: includes/Blocks.php:77 67 msgid "Parcel shop ID is required." 68 msgstr "ID DPD Pickup/Pickup Station je povinné." 69 70 #: includes/Blocks.php:78 71 msgid "Parcel shop name is required." 72 msgstr "Názov DPD Pickup/Pickup Station je povinný." 73 74 #: includes/Blocks.php:79 75 msgid "Parcel shop street is required." 76 msgstr "Ulica DPD Pickup/Pickup Station je povinná." 77 78 #: includes/Blocks.php:80 79 msgid "Parcel shop ZIP code is required." 80 msgstr "PSČ DPD Pickup/Pickup Station je povinné." 81 82 #: includes/Blocks.php:81 83 msgid "Parcel shop city is required." 84 msgstr "Mesto DPD Pickup/Pickup Station je povinné." 85 86 #: includes/Blocks.php:82 87 msgid "Parcel shop country code is required." 88 msgstr "Kód krajiny DPD Pickup/Pickup Station je povinný." 89 62 90 #: includes/Client.php:40 63 91 msgid "Use the correct request method. Possible values are: %s" … … 276 304 277 305 #: includes/DpdParcelShopShippingMethod.php:139 278 msgid "If you exceed the price in the cart, shipping will be free." 279 msgstr "Ak prekročíte cenu v košíku, poštovné bude zadarmo." 306 msgid "" 307 "Set minimum cart value for free shipping. Leave empty to disable free " 308 "shipping entirely." 309 msgstr "" 310 "Nastavte minimálnu hodnotu košíka pre dopravu zadarmo. Nechajte prázdne pre " 311 "zakázanie dopravy zdarma." 280 312 281 313 #: includes/DpdParcelShopShippingMethod.php:146 … … 489 521 msgstr "DPD Hromadné stiahnutie štítkov" 490 522 491 #: includes/OrderList.php:92 includes/OrderMetabox.php: 174523 #: includes/OrderList.php:92 includes/OrderMetabox.php:275 492 524 msgid "Export to DPD" 493 525 msgstr "Export do DPD" … … 501 533 msgstr "Stiahnuť štítok" 502 534 503 #: includes/OrderList.php:140 includes/OrderMetabox.php: 61535 #: includes/OrderList.php:140 includes/OrderMetabox.php:155 504 536 msgid "Package number" 505 537 msgstr "Číslo balíka" … … 509 541 msgstr "Zlé ID objednávky %d" 510 542 511 #: includes/OrderMetabox.php:3 0543 #: includes/OrderMetabox.php:31 512 544 msgid "DPD Export" 513 545 msgstr "DPD Export" 514 546 515 #: includes/OrderMetabox.php: 54547 #: includes/OrderMetabox.php:148 516 548 msgid "Export Status" 517 549 msgstr "Stav exportu" 518 550 519 #: includes/OrderMetabox.php: 54551 #: includes/OrderMetabox.php:148 520 552 msgid "Success" 521 553 msgstr "Úspech" 522 554 523 #: includes/OrderMetabox.php: 57555 #: includes/OrderMetabox.php:151 524 556 msgid "Download DPD label" 525 557 msgstr "Stiahnuť DPD štítok" 526 558 527 #: includes/OrderMetabox.php: 64559 #: includes/OrderMetabox.php:161 528 560 msgid "Reset" 529 561 msgstr "Resetovať" 530 562 531 #: includes/OrderMetabox.php: 100563 #: includes/OrderMetabox.php:201 532 564 msgid "ID Bank account" 533 565 msgstr "ID bankového účtu" 534 566 535 #: includes/OrderMetabox.php: 120567 #: includes/OrderMetabox.php:221 536 568 msgid "ID of the collection point" 537 569 msgstr "ID zberného miesta" 538 570 539 #: includes/OrderMetabox.php: 140571 #: includes/OrderMetabox.php:241 540 572 msgid "Shipping product" 541 573 msgstr "Preprava produktu" 542 574 543 #: includes/OrderMetabox.php: 152575 #: includes/OrderMetabox.php:253 544 576 msgid "Notification" 545 577 msgstr "Notifikácie" 546 578 547 #: includes/OrderMetabox.php: 157 includes/OrderMetabox.php:162579 #: includes/OrderMetabox.php:258 includes/OrderMetabox.php:263 548 580 msgid "Reference %d" 549 581 msgstr "Referencia %d" 550 582 551 #: includes/OrderMetabox.php: 167583 #: includes/OrderMetabox.php:268 552 584 msgid "Package Weight (kg)" 553 585 msgstr "Hmotnosť balíka (kg)" 554 586 555 #: includes/OrderMetabox.php: 169587 #: includes/OrderMetabox.php:270 556 588 msgid "" 557 589 "You can set the weight of the package. Leave empty for default: 3.00 kg." … … 559 591 "Môžete si nastaviť hmotnosť balíka. Ponechajte prázdne pre predvolenú " 560 592 "hodnotu: 3,00 kg." 561 562 #: includes/Shipping.php:76563 msgid "You have to choose a parcelshop."564 msgstr "Musíte si vybrať DPD Pickup/Pickup Station."565 593 566 594 #: templates/chosen-parcelshop-order-data.php:17 … … 625 653 msgid "Selected parcelshop" 626 654 msgstr "Vybraná DPD Pickup/Pickup Station" 655 656 #~ msgid "If you exceed the price in the cart, shipping will be free." 657 #~ msgstr "Ak prekročíte cenu v košíku, poštovné bude zadarmo." 627 658 628 659 #, php-format -
wc-dpd/trunk/languages/wc-dpd.pot
r3255337 r3339385 3 3 msgid "" 4 4 msgstr "" 5 "Project-Id-Version: DPD SK for WooCommerce 8. 0.0\n"5 "Project-Id-Version: DPD SK for WooCommerce 8.1.0\n" 6 6 "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wc-dpd\n" 7 7 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" … … 10 10 "Content-Type: text/plain; charset=UTF-8\n" 11 11 "Content-Transfer-Encoding: 8bit\n" 12 "POT-Creation-Date: 2025-0 3-12T13:34:54+00:00\n"12 "POT-Creation-Date: 2025-08-04T19:06:58+00:00\n" 13 13 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 14 14 "X-Generator: WP-CLI 2.11.0\n" … … 50 50 msgstr "" 51 51 52 #: includes/Blocks.php:72 53 #: includes/Shipping.php:76 54 msgid "You have to choose a parcelshop." 55 msgstr "" 56 57 #: includes/Blocks.php:77 58 msgid "Parcel shop ID is required." 59 msgstr "" 60 61 #: includes/Blocks.php:78 62 msgid "Parcel shop name is required." 63 msgstr "" 64 65 #: includes/Blocks.php:79 66 msgid "Parcel shop street is required." 67 msgstr "" 68 69 #: includes/Blocks.php:80 70 msgid "Parcel shop ZIP code is required." 71 msgstr "" 72 73 #: includes/Blocks.php:81 74 msgid "Parcel shop city is required." 75 msgstr "" 76 77 #: includes/Blocks.php:82 78 msgid "Parcel shop country code is required." 79 msgstr "" 80 52 81 #: includes/Client.php:40 53 82 msgid "Use the correct request method. Possible values are: %s" … … 259 288 260 289 #: includes/DpdParcelShopShippingMethod.php:139 261 msgid " If you exceed the price in the cart, shipping will be free."290 msgid "Set minimum cart value for free shipping. Leave empty to disable free shipping entirely." 262 291 msgstr "" 263 292 … … 460 489 461 490 #: includes/OrderList.php:92 462 #: includes/OrderMetabox.php: 174491 #: includes/OrderMetabox.php:275 463 492 msgid "Export to DPD" 464 493 msgstr "" … … 473 502 474 503 #: includes/OrderList.php:140 475 #: includes/OrderMetabox.php: 61504 #: includes/OrderMetabox.php:155 476 505 msgid "Package number" 477 506 msgstr "" … … 481 510 msgstr "" 482 511 483 #: includes/OrderMetabox.php:3 0512 #: includes/OrderMetabox.php:31 484 513 msgid "DPD Export" 485 514 msgstr "" 486 515 487 #: includes/OrderMetabox.php: 54516 #: includes/OrderMetabox.php:148 488 517 msgid "Export Status" 489 518 msgstr "" 490 519 491 #: includes/OrderMetabox.php: 54520 #: includes/OrderMetabox.php:148 492 521 msgid "Success" 493 522 msgstr "" 494 523 495 #: includes/OrderMetabox.php: 57524 #: includes/OrderMetabox.php:151 496 525 msgid "Download DPD label" 497 526 msgstr "" 498 527 499 #: includes/OrderMetabox.php: 64528 #: includes/OrderMetabox.php:161 500 529 msgid "Reset" 501 530 msgstr "" 502 531 503 #: includes/OrderMetabox.php: 100532 #: includes/OrderMetabox.php:201 504 533 msgid "ID Bank account" 505 534 msgstr "" 506 535 507 #: includes/OrderMetabox.php: 120536 #: includes/OrderMetabox.php:221 508 537 msgid "ID of the collection point" 509 538 msgstr "" 510 539 511 #: includes/OrderMetabox.php: 140540 #: includes/OrderMetabox.php:241 512 541 msgid "Shipping product" 513 542 msgstr "" 514 543 515 #: includes/OrderMetabox.php: 152544 #: includes/OrderMetabox.php:253 516 545 msgid "Notification" 517 546 msgstr "" 518 547 519 #: includes/OrderMetabox.php: 157520 #: includes/OrderMetabox.php: 162548 #: includes/OrderMetabox.php:258 549 #: includes/OrderMetabox.php:263 521 550 msgid "Reference %d" 522 551 msgstr "" 523 552 524 #: includes/OrderMetabox.php: 167553 #: includes/OrderMetabox.php:268 525 554 msgid "Package Weight (kg)" 526 555 msgstr "" 527 556 528 #: includes/OrderMetabox.php: 169557 #: includes/OrderMetabox.php:270 529 558 msgid "You can set the weight of the package. Leave empty for default: 3.00 kg." 530 msgstr ""531 532 #: includes/Shipping.php:76533 msgid "You have to choose a parcelshop."534 559 msgstr "" 535 560 -
wc-dpd/trunk/public/mix-manifest.json
r3254821 r3339385 3 3 "/scripts/dpd-export-settings-admin.js": "/scripts/dpd-export-settings-admin.js?id=0ccbc1dea8f7fd9c9ef3fb889590e84e", 4 4 "/scripts/dpd-parcelshop-block-shipping-method.js": "/scripts/dpd-parcelshop-block-shipping-method.js?id=e5f0e422d50e710a939bb849736ffed5", 5 "/scripts/dpd-parcelshop-map-widget.js": "/scripts/dpd-parcelshop-map-widget.js?id= 6cc3fe831b5d8c730b612bc3b8a2ab84",5 "/scripts/dpd-parcelshop-map-widget.js": "/scripts/dpd-parcelshop-map-widget.js?id=24a777dbdacde05004c3b4e8e09920f3", 6 6 "/scripts/dpd-parcelshop-popup.js": "/scripts/dpd-parcelshop-popup.js?id=1075b4ccd465fad2aa5393edf9a42e77", 7 7 "/scripts/dpd-parcelshop-shipping-method-weight-by-package-repeater.js": "/scripts/dpd-parcelshop-shipping-method-weight-by-package-repeater.js?id=b23c5e1e691f8153be782553760b97f7", -
wc-dpd/trunk/public/scripts/dpd-parcelshop-map-widget.js
r3292802 r3339385 16 16 /***/ (() => { 17 17 18 eval("function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nwindow.dpdParcelShopWidget = function () {\n var mapWidgetPopupSelector,\n popup,\n dpdMapWidget,\n mapWidgetPopupContainerSelector,\n mapWidgetPopupOpenBtnSelector,\n chosenParcelShopContentSelector,\n chosenParcelShopContentTextSelector,\n chosenParcelShopHiddenParcelIdSelector,\n chosenParcelShopHiddenParcelPusIdSelector,\n chosenParcelShopHiddenParcelNameSelector,\n chosenParcelShopHiddenParcelStreetSelector,\n chosenParcelShopHiddenParcelCitySelector,\n chosenParcelShopHiddenParcelZipSelector,\n chosenParcelShopHiddenParcelCountryCodeSelector,\n dpdMapWidgetEl,\n customerZip,\n countries,\n baseCountryCode,\n isMapInitialized = false;\n function init() {\n mapWidgetPopupOpenBtnSelector = '.js-dpd-parcelshop-map-widget-open-popup-btn';\n mapWidgetPopupSelector = '.js-dpd-parcelshop-map-widget-popup';\n mapWidgetPopupContainerSelector = '.js-dpd-parcelshop-map-widget-popup-container';\n chosenParcelShopContentSelector = '.js-dpd-chosen-parcelshop-content';\n chosenParcelShopContentTextSelector = '.js-dpd-chosen-parcelshop-chosen-parcelshop-text';\n chosenParcelShopHiddenParcelIdSelector = '.js-dpd-parcelshop-hidden-parcelshop-id';\n chosenParcelShopHiddenParcelPusIdSelector = '.js-dpd-parcelshop-hidden-parcelshop-pus-id';\n chosenParcelShopHiddenParcelNameSelector = '.js-dpd-parcelshop-hidden-parcelshop-name';\n chosenParcelShopHiddenParcelStreetSelector = '.js-dpd-parcelshop-hidden-parcelshop-street';\n chosenParcelShopHiddenParcelCitySelector = '.js-dpd-parcelshop-hidden-parcelshop-city';\n chosenParcelShopHiddenParcelZipSelector = '.js-dpd-parcelshop-hidden-parcelshop-zip';\n chosenParcelShopHiddenParcelCountryCodeSelector = '.js-dpd-parcelshop-hidden-parcelshop-country-code';\n popup = document.querySelector(mapWidgetPopupSelector);\n\n /**\ n * Open the popup when the user clicks the open button\n */\n document.addEventListener('click', function (event) {\n if (!event.target.matches(mapWidgetPopupOpenBtnSelector)) {\n return;\n }\n event.preventDefault();\n\n // Fetch the dpdMapWidgetEl element dynamically\n dpdMapWidgetEl = document.querySelector('.js-dpd-parcelshop-map-widget-popup-embed');\n if (!dpdMapWidgetEl) {\n return;\n }\n\n // Fetch the dpdMapOpenWidgetMapPopupEl element dynamically\n dpdMapOpenWidgetMapPopupEl = event.target.closest(mapWidgetPopupOpenBtnSelector);\n if (!dpdMapOpenWidgetMapPopupEl) {\n return;\n }\n initMap();\n openPopup();\n }, false);\n\n /**\n * Close the popup when the user clicks outside of it\n */\n document.addEventListener('click', function (event) {\n if (!event.target.matches(mapWidgetPopupContainerSelector)) {\n return;\n }\n event.preventDefault();\n closePopup();\n }, false);\n\n /**\n * Close the popup when the escape key is pressed\n */\n document.addEventListener('keydown', function (event) {\n if (event.key !== 'Escape') {\n return;\n }\n closePopup();\n }, false);\n\n /**\n * Trigger the update_checkout event when the payment method is changed and a parcel shop is chosen\n */\n document.addEventListener('change', function (event) {\n if (event.target && event.target.matches('input[name=\"payment_method\"]')) {\n // Check if a parcel shop is chosen\n if (isParcelShopChosen()) {\n // Trigger the update_checkout event\n document.body.dispatchEvent(new Event('update_checkout'));\n }\n }\n }, false);\n }\n\n /**\n * Initialize the map\n */\n function initMap() {\n if (isMapInitialized) {\n return;\n }\n var apiKey = dpdMapWidgetEl.getAttribute('data-api-key');\n if (!apiKey) {\n console.log('Map Api key is missing');\n return;\n }\n countries = JSON.parse(dpdMapOpenWidgetMapPopupEl.getAttribute('data-countries'));\n allowedCountries = JSON.parse(dpdMapOpenWidgetMapPopupEl.getAttribute('data-allowed-countries'));\n allowedCountries = allowedCountries.join(',');\n baseCountryCode = dpdMapOpenWidgetMapPopupEl.getAttribute('data-base-country-code');\n dpdMapWidget = new DpdPudo.Widget({\n apiKey: apiKey,\n country: baseCountryCode,\n allowedCountries: [allowedCountries]\n });\n isMapInitialized = true;\n }\n\n /**\n * Set the selected parcel shop in the session and update the frontend field\n */\n function setSelectedParcelShop() {\n var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (!data || Object.keys(data).length === 0) {\n return;\n }\n var parcelShopId = data.hasOwnProperty('id') ? data.id : null;\n var parcelShopPusId = data.hasOwnProperty('id') ? data.id : null;\n var parcelShopName = data.hasOwnProperty('name') ? data.name : null;\n var parcelShopStreet = data.hasOwnProperty('street') ? data.street : null;\n var parcelShopZip = data.hasOwnProperty('zip') ? data.zip : null;\n var parcelShopCity = data.hasOwnProperty('city') ? data.city : null;\n var parcelShopCountryCode = data.hasOwnProperty('countryCode') ? data.countryCode : null;\n var parcelShopMaxWeight = data.hasOwnProperty('maxweight') ? data.maxweight : null;\n var parcelShopCod = data.hasOwnProperty('cod') ? data.cod : null;\n var parcelShopCard = data.hasOwnProperty('card') ? data.card : null;\n var isEligibleForAlzabox = data.hasOwnProperty('isEligibleForAlzabox') ? data.isEligibleForAlzabox : null;\n var isEligibleForSlovenskaPostaBox = data.hasOwnProperty('isEligibleForSlovenskaPostaBox') ? data.isEligibleForSlovenskaPostaBox : null;\n\n // Update session\n setSelectedParcelShopSession(parcelShopId, parcelShopPusId, parcelShopName, parcelShopStreet, parcelShopZip, parcelShopCity, parcelShopCountryCode, parcelShopMaxWeight, parcelShopCod, parcelShopCard, isEligibleForAlzabox, isEligibleForSlovenskaPostaBox);\n var parcelShopCountry = countries && _typeof(countries) === 'object' && countries.hasOwnProperty(parcelShopCountryCode) ? countries[parcelShopCountryCode] : parcelShopCountryCode;\n\n // Update frontend field\n document.querySelector(chosenParcelShopHiddenParcelIdSelector).value = parcelShopId;\n document.querySelector(chosenParcelShopHiddenParcelPusIdSelector).value = parcelShopPusId;\n document.querySelector(chosenParcelShopHiddenParcelNameSelector).value = parcelShopName;\n document.querySelector(chosenParcelShopHiddenParcelStreetSelector).value = parcelShopStreet;\n document.querySelector(chosenParcelShopHiddenParcelZipSelector).value = parcelShopZip;\n document.querySelector(chosenParcelShopHiddenParcelCitySelector).value = parcelShopCity;\n document.querySelector(chosenParcelShopHiddenParcelCountryCodeSelector).value = parcelShopCountryCode;\n\n // Filter out empty values\n var notEmptyAddressValues = Object.values([parcelShopName, parcelShopStreet, parcelShopZip, parcelShopCity, parcelShopCountry]).filter(function (value) {\n return !!value;\n });\n\n // Construct the text content\n document.querySelector(chosenParcelShopContentTextSelector).innerHTML = notEmptyAddressValues.join(', ');\n document.querySelector(chosenParcelShopContentSelector).classList.add('active');\n }\n\n /**\n * Set the selected parcel shop in the session\n */\n function setSelectedParcelShopSession() {\n var parcelShopId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var parcelShopPusId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var parcelShopName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n var parcelShopStreet = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';\n var parcelShopZip = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : '';\n var parcelShopCity = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : '';\n var parcelShopCountryCode = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : '';\n var parcelShopMaxWeight = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : '';\n var parcelShopCod = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : '';\n var parcelShopCard = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : '';\n var isEligibleForAlzabox = arguments.length > 10 && arguments[10] !== undefined ? arguments[10] : true;\n var isEligibleForSlovenskaPostaBox = arguments.length > 11 && arguments[11] !== undefined ? arguments[11] : true;\n // Prepare XHR Request.\n var xhr = new XMLHttpRequest();\n xhr.open('POST', wc_dpd_parcelshop_map_widget_settings.ajax_url, true);\n xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');\n\n // Callback on response.\n xhr.onreadystatechange = function () {\n // readyState 4 means the request is done.\n var DONE = 4;\n\n // status 200 is a successful return.\n var OK = 200;\n\n // Check response.\n if (xhr.readyState === DONE) {\n if (xhr.status === OK) {\n document.body.dispatchEvent(new Event('update_checkout'));\n }\n }\n };\n\n // Finally do the call with the right parametetrs.\n xhr.send('action=wc_dpd_update_chosen_parcelshop&wp_nonce=' + popup.getAttribute('data-nonce') + '&wc_dpd_parcelshop_id=' + parcelShopId + '&wc_dpd_parcelshop_pus_id=' + parcelShopPusId + '&wc_dpd_parcelshop_name=' + parcelShopName + '&wc_dpd_parcelshop_street=' + parcelShopStreet + '&wc_dpd_parcelshop_zip=' + parcelShopZip + '&wc_dpd_parcelshop_city=' + parcelShopCity + '&wc_dpd_parcelshop_country_code=' + parcelShopCountryCode + '&wc_dpd_parcelshop_max_weight=' + parcelShopMaxWeight + '&wc_dpd_parcelshop_cod=' + parcelShopCod + '&wc_dpd_parcelshop_card=' + parcelShopCard + '&wc_dpd_parcelshop_is_alzabox_eligible=' + isEligibleForAlzabox + '&wc_dpd_parcelshop_is_slovenska_posta_eligible=' + isEligibleForSlovenskaPostaBox);\n }\n\n /**\n * Open the popup\n */\n function openPopup() {\n popup.classList.add('active');\n if (dpdMapWidgetEl && dpdMapWidget) {\n var chosenParcelShopId = document.querySelector(chosenParcelShopHiddenParcelIdSelector).value;\n if (chosenParcelShopId) {\n dpdMapWidget.options.selectedPudoId = chosenParcelShopId;\n }\n\n // Reselect open button to get refreshed data\n dpdMapOpenWidgetMapPopupEl = document.querySelector(mapWidgetPopupOpenBtnSelector);\n\n // Add zip if available\n customerZip = getCustomerZip();\n if (customerZip) {\n dpdMapWidget.options.zip = customerZip;\n }\n\n // Get the selected customer country\n var countryCode = dpdMapOpenWidgetMapPopupEl.getAttribute('data-base-country-code');\n if (countryCode) {\n dpdMapWidget.options.country = countryCode;\n }\n\n // Update weight and allowed locker types when opening the popup\n var minWeightInKg = parseInt(dpdMapOpenWidgetMapPopupEl.getAttribute('data-min-weight-in-kg'));\n var isEligibleForAlzabox = dpdMapOpenWidgetMapPopupEl.getAttribute('data-is-eligible-for-alzabox') === 'true';\n var isEligibleForSlovenskaPostaBox = dpdMapOpenWidgetMapPopupEl.getAttribute('data-is-eligible-for-slovenska-posta-box') === 'true';\n dpdMapWidget.options.minWeightInKg = minWeightInKg;\n var disallowShops = dpdMapOpenWidgetMapPopupEl.getAttribute('data-disallow-shops') === 'true';\n var disallowLockers = dpdMapOpenWidgetMapPopupEl.getAttribute('data-disallow-lockers') === 'true';\n var disallowDpdPickupStations = dpdMapOpenWidgetMapPopupEl.getAttribute('data-disallow-dpd-pickup-stations') === 'true';\n var disallowSkPost = dpdMapOpenWidgetMapPopupEl.getAttribute('data-disallow-sk-post') === 'true';\n var disallowAlzaBoxes = dpdMapOpenWidgetMapPopupEl.getAttribute('data-disallow-alza-boxes') === 'true';\n var allowedPudoTypes = ['shop', 'locker'];\n if (disallowShops) {\n allowedPudoTypes = allowedPudoTypes.filter(function (type) {\n return type !== 'shop';\n });\n }\n if (disallowLockers) {\n allowedPudoTypes = allowedPudoTypes.filter(function (type) {\n return type !== 'locker';\n });\n }\n dpdMapWidget.options.allowedPudoTypes = allowedPudoTypes;\n var allowedLockerTypes = ['dpdSkPickupStations', 'skPost', 'alzaSlovakia', 'outsideOfSlovakia'];\n if (!isEligibleForAlzabox || !isEligibleForSlovenskaPostaBox) {\n if (!isEligibleForAlzabox) {\n allowedLockerTypes = allowedLockerTypes.filter(function (type) {\n return type !== 'alzaSlovakia';\n });\n }\n if (!isEligibleForSlovenskaPostaBox) {\n allowedLockerTypes = allowedLockerTypes.filter(function (type) {\n return type !== 'skPost';\n });\n }\n }\n if (!disallowLockers) {\n if (disallowDpdPickupStations) {\n allowedLockerTypes = allowedLockerTypes.filter(function (type) {\n return type !== 'dpdSkPickupStations';\n });\n }\n if (disallowSkPost) {\n allowedLockerTypes = allowedLockerTypes.filter(function (type) {\n return type !== 'skPost';\n });\n }\n if (disallowAlzaBoxes) {\n allowedLockerTypes = allowedLockerTypes.filter(function (type) {\n return type !== 'alzaSlovakia';\n });\n }\n }\n dpdMapWidget.options.allowedLockerTypes = allowedLockerTypes;\n var requiredServices = [];\n var isCodRequired = dpdMapOpenWidgetMapPopupEl.getAttribute('data-is-cod-required') === 'true';\n var isCardPaymentRequired = dpdMapOpenWidgetMapPopupEl.getAttribute('data-is-card-payment-required') === 'true';\n if (isCodRequired || isCardPaymentRequired) {\n if (isCodRequired) {\n requiredServices.push('cod');\n }\n if (isCardPaymentRequired) {\n requiredServices.push('cardPayment');\n }\n }\n dpdMapWidget.options.requiredServices = requiredServices;\n dpdMapWidget.attach(dpdMapWidgetEl).then(function (pudo) {\n setSelectedParcelShop({\n id: pudo.id,\n name: pudo.name,\n street: pudo.street,\n houseno: pudo.houseno,\n zip: pudo.zip,\n city: pudo.city,\n countryCode: pudo.countryCode,\n maxweight: pudo.maxWeightInKg,\n cod: pudo.services && pudo.services.includes('cod') ? true : false,\n card: pudo.services && pudo.services.includes('cardPayment') ? true : false,\n isEligibleForAlzabox: isEligibleForAlzabox,\n isEligibleForSlovenskaPostaBox: isEligibleForSlovenskaPostaBox\n });\n closePopup();\n })[\"catch\"](function (code) {\n closePopup();\n });\n }\n }\n\n /**\n * Close the popup\n */\n function closePopup() {\n popup.classList.remove('active');\n\n // Check if close method exists\n if (dpdMapWidget && dpdMapWidget.close) {\n dpdMapWidget.close();\n }\n }\n\n /**\n * Check if a parcel shop is chosen\n */\n function isParcelShopChosen() {\n var chosenParcelShopId = document.querySelector(chosenParcelShopHiddenParcelIdSelector).value;\n return chosenParcelShopId !== '';\n }\n\n /**\n * Get customer zip\n */\n function getCustomerZip() {\n // Check if ship to different address is checked\n var shipToDifferentAddress = document.querySelector('input[name=\"ship_to_different_address\"]');\n if (shipToDifferentAddress && shipToDifferentAddress.checked) {\n var shippingPostcodeField = document.querySelector('input[name=\"shipping_postcode\"]');\n if (shippingPostcodeField) {\n customerZip = shippingPostcodeField.value;\n }\n if (customerZip) {\n return customerZip;\n }\n }\n var billingPostcodeField = document.querySelector('input[name=\"billing_postcode\"]');\n if (billingPostcodeField) {\n customerZip = billingPostcodeField.value;\n }\n if (customerZip) {\n return customerZip;\n }\n customerZip = dpdMapOpenWidgetMapPopupEl.getAttribute('data-customer-zip');\n if (customerZip) {\n return customerZip;\n }\n return '';\n }\n\n /**\n * Check if document is ready\n */\n function docReady(fn) {\n if (document.readyState === 'complete' || document.readyState === 'interactive') {\n setTimeout(fn, 1);\n } else {\n document.addEventListener('DOMContentLoaded', fn);\n }\n }\n docReady(function () {\n init();\n });\n\n // Allow the functions to be called from outside\n return {\n openPopup: openPopup\n };\n}();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ3aW5kb3ciLCJkcGRQYXJjZWxTaG9wV2lkZ2V0IiwibWFwV2lkZ2V0UG9wdXBTZWxlY3RvciIsInBvcHVwIiwiZHBkTWFwV2lkZ2V0IiwibWFwV2lkZ2V0UG9wdXBDb250YWluZXJTZWxlY3RvciIsIm1hcFdpZGdldFBvcHVwT3BlbkJ0blNlbGVjdG9yIiwiY2hvc2VuUGFyY2VsU2hvcENvbnRlbnRTZWxlY3RvciIsImNob3NlblBhcmNlbFNob3BDb250ZW50VGV4dFNlbGVjdG9yIiwiY2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbElkU2VsZWN0b3IiLCJjaG9zZW5QYXJjZWxTaG9wSGlkZGVuUGFyY2VsUHVzSWRTZWxlY3RvciIsImNob3NlblBhcmNlbFNob3BIaWRkZW5QYXJjZWxOYW1lU2VsZWN0b3IiLCJjaG9zZW5QYXJjZWxTaG9wSGlkZGVuUGFyY2VsU3RyZWV0U2VsZWN0b3IiLCJjaG9zZW5QYXJjZWxTaG9wSGlkZGVuUGFyY2VsQ2l0eVNlbGVjdG9yIiwiY2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbFppcFNlbGVjdG9yIiwiY2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbENvdW50cnlDb2RlU2VsZWN0b3IiLCJkcGRNYXBXaWRnZXRFbCIsImN1c3RvbWVyWmlwIiwiY291bnRyaWVzIiwiYmFzZUNvdW50cnlDb2RlIiwiaXNNYXBJbml0aWFsaXplZCIsImluaXQiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJhZGRFdmVudExpc3RlbmVyIiwiZXZlbnQiLCJ0YXJnZXQiLCJtYXRjaGVzIiwicHJldmVudERlZmF1bHQiLCJkcGRNYXBPcGVuV2lkZ2V0TWFwUG9wdXBFbCIsImNsb3Nlc3QiLCJpbml0TWFwIiwib3BlblBvcHVwIiwiY2xvc2VQb3B1cCIsImtleSIsImlzUGFyY2VsU2hvcENob3NlbiIsImJvZHkiLCJkaXNwYXRjaEV2ZW50IiwiRXZlbnQiLCJhcGlLZXkiLCJnZXRBdHRyaWJ1dGUiLCJjb25zb2xlIiwibG9nIiwiSlNPTiIsInBhcnNlIiwiYWxsb3dlZENvdW50cmllcyIsImpvaW4iLCJEcGRQdWRvIiwiV2lkZ2V0IiwiY291bnRyeSIsInNldFNlbGVjdGVkUGFyY2VsU2hvcCIsImRhdGEiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJPYmplY3QiLCJrZXlzIiwicGFyY2VsU2hvcElkIiwiaGFzT3duUHJvcGVydHkiLCJpZCIsInBhcmNlbFNob3BQdXNJZCIsInBhcmNlbFNob3BOYW1lIiwibmFtZSIsInBhcmNlbFNob3BTdHJlZXQiLCJzdHJlZXQiLCJwYXJjZWxTaG9wWmlwIiwiemlwIiwicGFyY2VsU2hvcENpdHkiLCJjaXR5IiwicGFyY2VsU2hvcENvdW50cnlDb2RlIiwiY291bnRyeUNvZGUiLCJwYXJjZWxTaG9wTWF4V2VpZ2h0IiwibWF4d2VpZ2h0IiwicGFyY2VsU2hvcENvZCIsImNvZCIsInBhcmNlbFNob3BDYXJkIiwiY2FyZCIsImlzRWxpZ2libGVGb3JBbHphYm94IiwiaXNFbGlnaWJsZUZvclNsb3ZlbnNrYVBvc3RhQm94Iiwic2V0U2VsZWN0ZWRQYXJjZWxTaG9wU2Vzc2lvbiIsInBhcmNlbFNob3BDb3VudHJ5IiwiX3R5cGVvZiIsInZhbHVlIiwibm90RW1wdHlBZGRyZXNzVmFsdWVzIiwidmFsdWVzIiwiZmlsdGVyIiwiaW5uZXJIVE1MIiwiY2xhc3NMaXN0IiwiYWRkIiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwid2NfZHBkX3BhcmNlbHNob3BfbWFwX3dpZGdldF9zZXR0aW5ncyIsImFqYXhfdXJsIiwic2V0UmVxdWVzdEhlYWRlciIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsIkRPTkUiLCJPSyIsInJlYWR5U3RhdGUiLCJzdGF0dXMiLCJzZW5kIiwiY2hvc2VuUGFyY2VsU2hvcElkIiwib3B0aW9ucyIsInNlbGVjdGVkUHVkb0lkIiwiZ2V0Q3VzdG9tZXJaaXAiLCJtaW5XZWlnaHRJbktnIiwicGFyc2VJbnQiLCJkaXNhbGxvd1Nob3BzIiwiZGlzYWxsb3dMb2NrZXJzIiwiZGlzYWxsb3dEcGRQaWNrdXBTdGF0aW9ucyIsImRpc2FsbG93U2tQb3N0IiwiZGlzYWxsb3dBbHphQm94ZXMiLCJhbGxvd2VkUHVkb1R5cGVzIiwidHlwZSIsImFsbG93ZWRMb2NrZXJUeXBlcyIsInJlcXVpcmVkU2VydmljZXMiLCJpc0NvZFJlcXVpcmVkIiwiaXNDYXJkUGF5bWVudFJlcXVpcmVkIiwicHVzaCIsImF0dGFjaCIsInRoZW4iLCJwdWRvIiwiaG91c2VubyIsIm1heFdlaWdodEluS2ciLCJzZXJ2aWNlcyIsImluY2x1ZGVzIiwiY29kZSIsInJlbW92ZSIsImNsb3NlIiwic2hpcFRvRGlmZmVyZW50QWRkcmVzcyIsImNoZWNrZWQiLCJzaGlwcGluZ1Bvc3Rjb2RlRmllbGQiLCJiaWxsaW5nUG9zdGNvZGVGaWVsZCIsImRvY1JlYWR5IiwiZm4iLCJzZXRUaW1lb3V0Il0sInNvdXJjZXMiOlsid2VicGFjazovLy8uL2Fzc2V0cy9zY3JpcHRzL2RwZC1wYXJjZWxzaG9wLW1hcC13aWRnZXQuanM/NTcwNyJdLCJzb3VyY2VzQ29udGVudCI6WyJ3aW5kb3cuZHBkUGFyY2VsU2hvcFdpZGdldCA9IChmdW5jdGlvbiAoKSB7XG5cdHZhciBtYXBXaWRnZXRQb3B1cFNlbGVjdG9yLFxuXHRcdHBvcHVwLFxuXHRcdGRwZE1hcFdpZGdldCxcblx0XHRtYXBXaWRnZXRQb3B1cENvbnRhaW5lclNlbGVjdG9yLFxuXHRcdG1hcFdpZGdldFBvcHVwT3BlbkJ0blNlbGVjdG9yLFxuXHRcdGNob3NlblBhcmNlbFNob3BDb250ZW50U2VsZWN0b3IsXG5cdFx0Y2hvc2VuUGFyY2VsU2hvcENvbnRlbnRUZXh0U2VsZWN0b3IsXG5cdFx0Y2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbElkU2VsZWN0b3IsXG5cdFx0Y2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbFB1c0lkU2VsZWN0b3IsXG5cdFx0Y2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbE5hbWVTZWxlY3Rvcixcblx0XHRjaG9zZW5QYXJjZWxTaG9wSGlkZGVuUGFyY2VsU3RyZWV0U2VsZWN0b3IsXG5cdFx0Y2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbENpdHlTZWxlY3Rvcixcblx0XHRjaG9zZW5QYXJjZWxTaG9wSGlkZGVuUGFyY2VsWmlwU2VsZWN0b3IsXG5cdFx0Y2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbENvdW50cnlDb2RlU2VsZWN0b3IsXG5cdFx0ZHBkTWFwV2lkZ2V0RWwsXG5cdFx0Y3VzdG9tZXJaaXAsXG5cdFx0Y291bnRyaWVzLFxuXHRcdGJhc2VDb3VudHJ5Q29kZSxcblx0XHRpc01hcEluaXRpYWxpemVkID0gZmFsc2U7XG5cblx0ZnVuY3Rpb24gaW5pdCgpIHtcblx0XHRtYXBXaWRnZXRQb3B1cE9wZW5CdG5TZWxlY3RvciA9XG5cdFx0XHQnLmpzLWRwZC1wYXJjZWxzaG9wLW1hcC13aWRnZXQtb3Blbi1wb3B1cC1idG4nO1xuXG5cdFx0bWFwV2lkZ2V0UG9wdXBTZWxlY3RvciA9ICcuanMtZHBkLXBhcmNlbHNob3AtbWFwLXdpZGdldC1wb3B1cCc7XG5cblx0XHRtYXBXaWRnZXRQb3B1cENvbnRhaW5lclNlbGVjdG9yID1cblx0XHRcdCcuanMtZHBkLXBhcmNlbHNob3AtbWFwLXdpZGdldC1wb3B1cC1jb250YWluZXInO1xuXG5cdFx0Y2hvc2VuUGFyY2VsU2hvcENvbnRlbnRTZWxlY3RvciA9ICcuanMtZHBkLWNob3Nlbi1wYXJjZWxzaG9wLWNvbnRlbnQnO1xuXHRcdGNob3NlblBhcmNlbFNob3BDb250ZW50VGV4dFNlbGVjdG9yID1cblx0XHRcdCcuanMtZHBkLWNob3Nlbi1wYXJjZWxzaG9wLWNob3Nlbi1wYXJjZWxzaG9wLXRleHQnO1xuXHRcdGNob3NlblBhcmNlbFNob3BIaWRkZW5QYXJjZWxJZFNlbGVjdG9yID1cblx0XHRcdCcuanMtZHBkLXBhcmNlbHNob3AtaGlkZGVuLXBhcmNlbHNob3AtaWQnO1xuXHRcdGNob3NlblBhcmNlbFNob3BIaWRkZW5QYXJjZWxQdXNJZFNlbGVjdG9yID1cblx0XHRcdCcuanMtZHBkLXBhcmNlbHNob3AtaGlkZGVuLXBhcmNlbHNob3AtcHVzLWlkJztcblx0XHRjaG9zZW5QYXJjZWxTaG9wSGlkZGVuUGFyY2VsTmFtZVNlbGVjdG9yID1cblx0XHRcdCcuanMtZHBkLXBhcmNlbHNob3AtaGlkZGVuLXBhcmNlbHNob3AtbmFtZSc7XG5cdFx0Y2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbFN0cmVldFNlbGVjdG9yID1cblx0XHRcdCcuanMtZHBkLXBhcmNlbHNob3AtaGlkZGVuLXBhcmNlbHNob3Atc3RyZWV0Jztcblx0XHRjaG9zZW5QYXJjZWxTaG9wSGlkZGVuUGFyY2VsQ2l0eVNlbGVjdG9yID1cblx0XHRcdCcuanMtZHBkLXBhcmNlbHNob3AtaGlkZGVuLXBhcmNlbHNob3AtY2l0eSc7XG5cdFx0Y2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbFppcFNlbGVjdG9yID1cblx0XHRcdCcuanMtZHBkLXBhcmNlbHNob3AtaGlkZGVuLXBhcmNlbHNob3AtemlwJztcblx0XHRjaG9zZW5QYXJjZWxTaG9wSGlkZGVuUGFyY2VsQ291bnRyeUNvZGVTZWxlY3RvciA9XG5cdFx0XHQnLmpzLWRwZC1wYXJjZWxzaG9wLWhpZGRlbi1wYXJjZWxzaG9wLWNvdW50cnktY29kZSc7XG5cblx0XHRwb3B1cCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IobWFwV2lkZ2V0UG9wdXBTZWxlY3Rvcik7XG5cblx0XHQvKipcblx0XHQgKiBPcGVuIHRoZSBwb3B1cCB3aGVuIHRoZSB1c2VyIGNsaWNrcyB0aGUgb3BlbiBidXR0b25cblx0XHQgKi9cblx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFxuXHRcdFx0J2NsaWNrJyxcblx0XHRcdGZ1bmN0aW9uIChldmVudCkge1xuXHRcdFx0XHRpZiAoIWV2ZW50LnRhcmdldC5tYXRjaGVzKG1hcFdpZGdldFBvcHVwT3BlbkJ0blNlbGVjdG9yKSkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRcdFx0Ly8gRmV0Y2ggdGhlIGRwZE1hcFdpZGdldEVsIGVsZW1lbnQgZHluYW1pY2FsbHlcblx0XHRcdFx0ZHBkTWFwV2lkZ2V0RWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuXHRcdFx0XHRcdCcuanMtZHBkLXBhcmNlbHNob3AtbWFwLXdpZGdldC1wb3B1cC1lbWJlZCdcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRpZiAoIWRwZE1hcFdpZGdldEVsKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRmV0Y2ggdGhlIGRwZE1hcE9wZW5XaWRnZXRNYXBQb3B1cEVsIGVsZW1lbnQgZHluYW1pY2FsbHlcblx0XHRcdFx0ZHBkTWFwT3BlbldpZGdldE1hcFBvcHVwRWwgPSBldmVudC50YXJnZXQuY2xvc2VzdChcblx0XHRcdFx0XHRtYXBXaWRnZXRQb3B1cE9wZW5CdG5TZWxlY3RvclxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGlmICghZHBkTWFwT3BlbldpZGdldE1hcFBvcHVwRWwpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpbml0TWFwKCk7XG5cdFx0XHRcdG9wZW5Qb3B1cCgpO1xuXHRcdFx0fSxcblx0XHRcdGZhbHNlXG5cdFx0KTtcblxuXHRcdC8qKlxuXHRcdCAqIENsb3NlIHRoZSBwb3B1cCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBvdXRzaWRlIG9mIGl0XG5cdFx0ICovXG5cdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcblx0XHRcdCdjbGljaycsXG5cdFx0XHRmdW5jdGlvbiAoZXZlbnQpIHtcblx0XHRcdFx0aWYgKCFldmVudC50YXJnZXQubWF0Y2hlcyhtYXBXaWRnZXRQb3B1cENvbnRhaW5lclNlbGVjdG9yKSkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRcdFx0Y2xvc2VQb3B1cCgpO1xuXHRcdFx0fSxcblx0XHRcdGZhbHNlXG5cdFx0KTtcblxuXHRcdC8qKlxuXHRcdCAqIENsb3NlIHRoZSBwb3B1cCB3aGVuIHRoZSBlc2NhcGUga2V5IGlzIHByZXNzZWRcblx0XHQgKi9cblx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFxuXHRcdFx0J2tleWRvd24nLFxuXHRcdFx0ZnVuY3Rpb24gKGV2ZW50KSB7XG5cdFx0XHRcdGlmIChldmVudC5rZXkgIT09ICdFc2NhcGUnKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y2xvc2VQb3B1cCgpO1xuXHRcdFx0fSxcblx0XHRcdGZhbHNlXG5cdFx0KTtcblxuXHRcdC8qKlxuXHRcdCAqIFRyaWdnZXIgdGhlIHVwZGF0ZV9jaGVja291dCBldmVudCB3aGVuIHRoZSBwYXltZW50IG1ldGhvZCBpcyBjaGFuZ2VkIGFuZCBhIHBhcmNlbCBzaG9wIGlzIGNob3NlblxuXHRcdCAqL1xuXHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXG5cdFx0XHQnY2hhbmdlJyxcblx0XHRcdGZ1bmN0aW9uIChldmVudCkge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0ZXZlbnQudGFyZ2V0ICYmXG5cdFx0XHRcdFx0ZXZlbnQudGFyZ2V0Lm1hdGNoZXMoJ2lucHV0W25hbWU9XCJwYXltZW50X21ldGhvZFwiXScpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdC8vIENoZWNrIGlmIGEgcGFyY2VsIHNob3AgaXMgY2hvc2VuXG5cdFx0XHRcdFx0aWYgKGlzUGFyY2VsU2hvcENob3NlbigpKSB7XG5cdFx0XHRcdFx0XHQvLyBUcmlnZ2VyIHRoZSB1cGRhdGVfY2hlY2tvdXQgZXZlbnRcblx0XHRcdFx0XHRcdGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ3VwZGF0ZV9jaGVja291dCcpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRmYWxzZVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogSW5pdGlhbGl6ZSB0aGUgbWFwXG5cdCAqL1xuXHRmdW5jdGlvbiBpbml0TWFwKCkge1xuXHRcdGlmIChpc01hcEluaXRpYWxpemVkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgYXBpS2V5ID0gZHBkTWFwV2lkZ2V0RWwuZ2V0QXR0cmlidXRlKCdkYXRhLWFwaS1rZXknKTtcblxuXHRcdGlmICghYXBpS2V5KSB7XG5cdFx0XHRjb25zb2xlLmxvZygnTWFwIEFwaSBrZXkgaXMgbWlzc2luZycpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvdW50cmllcyA9IEpTT04ucGFyc2UoXG5cdFx0XHRkcGRNYXBPcGVuV2lkZ2V0TWFwUG9wdXBFbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY291bnRyaWVzJylcblx0XHQpO1xuXHRcdGFsbG93ZWRDb3VudHJpZXMgPSBKU09OLnBhcnNlKFxuXHRcdFx0ZHBkTWFwT3BlbldpZGdldE1hcFBvcHVwRWwuZ2V0QXR0cmlidXRlKCdkYXRhLWFsbG93ZWQtY291bnRyaWVzJylcblx0XHQpO1xuXHRcdGFsbG93ZWRDb3VudHJpZXMgPSBhbGxvd2VkQ291bnRyaWVzLmpvaW4oJywnKTtcblx0XHRiYXNlQ291bnRyeUNvZGUgPSBkcGRNYXBPcGVuV2lkZ2V0TWFwUG9wdXBFbC5nZXRBdHRyaWJ1dGUoXG5cdFx0XHQnZGF0YS1iYXNlLWNvdW50cnktY29kZSdcblx0XHQpO1xuXG5cdFx0ZHBkTWFwV2lkZ2V0ID0gbmV3IERwZFB1ZG8uV2lkZ2V0KHtcblx0XHRcdGFwaUtleTogYXBpS2V5LFxuXHRcdFx0Y291bnRyeTogYmFzZUNvdW50cnlDb2RlLFxuXHRcdFx0YWxsb3dlZENvdW50cmllczogW2FsbG93ZWRDb3VudHJpZXNdLFxuXHRcdH0pO1xuXG5cdFx0aXNNYXBJbml0aWFsaXplZCA9IHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSBzZWxlY3RlZCBwYXJjZWwgc2hvcCBpbiB0aGUgc2Vzc2lvbiBhbmQgdXBkYXRlIHRoZSBmcm9udGVuZCBmaWVsZFxuXHQgKi9cblx0ZnVuY3Rpb24gc2V0U2VsZWN0ZWRQYXJjZWxTaG9wKGRhdGEgPSB7fSkge1xuXHRcdGlmICghZGF0YSB8fCBPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBwYXJjZWxTaG9wSWQgPSBkYXRhLmhhc093blByb3BlcnR5KCdpZCcpID8gZGF0YS5pZCA6IG51bGw7XG5cdFx0Y29uc3QgcGFyY2VsU2hvcFB1c0lkID0gZGF0YS5oYXNPd25Qcm9wZXJ0eSgnaWQnKSA/IGRhdGEuaWQgOiBudWxsO1xuXHRcdGNvbnN0IHBhcmNlbFNob3BOYW1lID0gZGF0YS5oYXNPd25Qcm9wZXJ0eSgnbmFtZScpID8gZGF0YS5uYW1lIDogbnVsbDtcblx0XHRjb25zdCBwYXJjZWxTaG9wU3RyZWV0ID0gZGF0YS5oYXNPd25Qcm9wZXJ0eSgnc3RyZWV0JykgPyBkYXRhLnN0cmVldCA6IG51bGw7XG5cdFx0Y29uc3QgcGFyY2VsU2hvcFppcCA9IGRhdGEuaGFzT3duUHJvcGVydHkoJ3ppcCcpID8gZGF0YS56aXAgOiBudWxsO1xuXHRcdGNvbnN0IHBhcmNlbFNob3BDaXR5ID0gZGF0YS5oYXNPd25Qcm9wZXJ0eSgnY2l0eScpID8gZGF0YS5jaXR5IDogbnVsbDtcblx0XHRjb25zdCBwYXJjZWxTaG9wQ291bnRyeUNvZGUgPSBkYXRhLmhhc093blByb3BlcnR5KCdjb3VudHJ5Q29kZScpXG5cdFx0XHQ/IGRhdGEuY291bnRyeUNvZGVcblx0XHRcdDogbnVsbDtcblx0XHRjb25zdCBwYXJjZWxTaG9wTWF4V2VpZ2h0ID0gZGF0YS5oYXNPd25Qcm9wZXJ0eSgnbWF4d2VpZ2h0Jylcblx0XHRcdD8gZGF0YS5tYXh3ZWlnaHRcblx0XHRcdDogbnVsbDtcblx0XHRjb25zdCBwYXJjZWxTaG9wQ29kID0gZGF0YS5oYXNPd25Qcm9wZXJ0eSgnY29kJykgPyBkYXRhLmNvZCA6IG51bGw7XG5cdFx0Y29uc3QgcGFyY2VsU2hvcENhcmQgPSBkYXRhLmhhc093blByb3BlcnR5KCdjYXJkJykgPyBkYXRhLmNhcmQgOiBudWxsO1xuXHRcdGNvbnN0IGlzRWxpZ2libGVGb3JBbHphYm94ID0gZGF0YS5oYXNPd25Qcm9wZXJ0eSgnaXNFbGlnaWJsZUZvckFsemFib3gnKVxuXHRcdFx0PyBkYXRhLmlzRWxpZ2libGVGb3JBbHphYm94XG5cdFx0XHQ6IG51bGw7XG5cdFx0Y29uc3QgaXNFbGlnaWJsZUZvclNsb3ZlbnNrYVBvc3RhQm94ID0gZGF0YS5oYXNPd25Qcm9wZXJ0eShcblx0XHRcdCdpc0VsaWdpYmxlRm9yU2xvdmVuc2thUG9zdGFCb3gnXG5cdFx0KVxuXHRcdFx0PyBkYXRhLmlzRWxpZ2libGVGb3JTbG92ZW5za2FQb3N0YUJveFxuXHRcdFx0OiBudWxsO1xuXG5cdFx0Ly8gVXBkYXRlIHNlc3Npb25cblx0XHRzZXRTZWxlY3RlZFBhcmNlbFNob3BTZXNzaW9uKFxuXHRcdFx0cGFyY2VsU2hvcElkLFxuXHRcdFx0cGFyY2VsU2hvcFB1c0lkLFxuXHRcdFx0cGFyY2VsU2hvcE5hbWUsXG5cdFx0XHRwYXJjZWxTaG9wU3RyZWV0LFxuXHRcdFx0cGFyY2VsU2hvcFppcCxcblx0XHRcdHBhcmNlbFNob3BDaXR5LFxuXHRcdFx0cGFyY2VsU2hvcENvdW50cnlDb2RlLFxuXHRcdFx0cGFyY2VsU2hvcE1heFdlaWdodCxcblx0XHRcdHBhcmNlbFNob3BDb2QsXG5cdFx0XHRwYXJjZWxTaG9wQ2FyZCxcblx0XHRcdGlzRWxpZ2libGVGb3JBbHphYm94LFxuXHRcdFx0aXNFbGlnaWJsZUZvclNsb3ZlbnNrYVBvc3RhQm94XG5cdFx0KTtcblxuXHRcdGNvbnN0IHBhcmNlbFNob3BDb3VudHJ5ID1cblx0XHRcdGNvdW50cmllcyAmJlxuXHRcdFx0dHlwZW9mIGNvdW50cmllcyA9PT0gJ29iamVjdCcgJiZcblx0XHRcdGNvdW50cmllcy5oYXNPd25Qcm9wZXJ0eShwYXJjZWxTaG9wQ291bnRyeUNvZGUpXG5cdFx0XHRcdD8gY291bnRyaWVzW3BhcmNlbFNob3BDb3VudHJ5Q29kZV1cblx0XHRcdFx0OiBwYXJjZWxTaG9wQ291bnRyeUNvZGU7XG5cblx0XHQvLyBVcGRhdGUgZnJvbnRlbmQgZmllbGRcblx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGNob3NlblBhcmNlbFNob3BIaWRkZW5QYXJjZWxJZFNlbGVjdG9yKS52YWx1ZSA9XG5cdFx0XHRwYXJjZWxTaG9wSWQ7XG5cdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihjaG9zZW5QYXJjZWxTaG9wSGlkZGVuUGFyY2VsUHVzSWRTZWxlY3RvcikudmFsdWUgPVxuXHRcdFx0cGFyY2VsU2hvcFB1c0lkO1xuXHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoY2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbE5hbWVTZWxlY3RvcikudmFsdWUgPVxuXHRcdFx0cGFyY2VsU2hvcE5hbWU7XG5cdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihjaG9zZW5QYXJjZWxTaG9wSGlkZGVuUGFyY2VsU3RyZWV0U2VsZWN0b3IpLnZhbHVlID1cblx0XHRcdHBhcmNlbFNob3BTdHJlZXQ7XG5cdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihjaG9zZW5QYXJjZWxTaG9wSGlkZGVuUGFyY2VsWmlwU2VsZWN0b3IpLnZhbHVlID1cblx0XHRcdHBhcmNlbFNob3BaaXA7XG5cdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihjaG9zZW5QYXJjZWxTaG9wSGlkZGVuUGFyY2VsQ2l0eVNlbGVjdG9yKS52YWx1ZSA9XG5cdFx0XHRwYXJjZWxTaG9wQ2l0eTtcblx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuXHRcdFx0Y2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbENvdW50cnlDb2RlU2VsZWN0b3Jcblx0XHQpLnZhbHVlID0gcGFyY2VsU2hvcENvdW50cnlDb2RlO1xuXG5cdFx0Ly8gRmlsdGVyIG91dCBlbXB0eSB2YWx1ZXNcblx0XHRjb25zdCBub3RFbXB0eUFkZHJlc3NWYWx1ZXMgPSBPYmplY3QudmFsdWVzKFtcblx0XHRcdHBhcmNlbFNob3BOYW1lLFxuXHRcdFx0cGFyY2VsU2hvcFN0cmVldCxcblx0XHRcdHBhcmNlbFNob3BaaXAsXG5cdFx0XHRwYXJjZWxTaG9wQ2l0eSxcblx0XHRcdHBhcmNlbFNob3BDb3VudHJ5LFxuXHRcdF0pLmZpbHRlcigodmFsdWUpID0+ICEhdmFsdWUpO1xuXG5cdFx0Ly8gQ29uc3RydWN0IHRoZSB0ZXh0IGNvbnRlbnRcblx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGNob3NlblBhcmNlbFNob3BDb250ZW50VGV4dFNlbGVjdG9yKS5pbm5lckhUTUwgPVxuXHRcdFx0bm90RW1wdHlBZGRyZXNzVmFsdWVzLmpvaW4oJywgJyk7XG5cblx0XHRkb2N1bWVudFxuXHRcdFx0LnF1ZXJ5U2VsZWN0b3IoY2hvc2VuUGFyY2VsU2hvcENvbnRlbnRTZWxlY3Rvcilcblx0XHRcdC5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIHNlbGVjdGVkIHBhcmNlbCBzaG9wIGluIHRoZSBzZXNzaW9uXG5cdCAqL1xuXHRmdW5jdGlvbiBzZXRTZWxlY3RlZFBhcmNlbFNob3BTZXNzaW9uKFxuXHRcdHBhcmNlbFNob3BJZCA9ICcnLFxuXHRcdHBhcmNlbFNob3BQdXNJZCA9ICcnLFxuXHRcdHBhcmNlbFNob3BOYW1lID0gJycsXG5cdFx0cGFyY2VsU2hvcFN0cmVldCA9ICcnLFxuXHRcdHBhcmNlbFNob3BaaXAgPSAnJyxcblx0XHRwYXJjZWxTaG9wQ2l0eSA9ICcnLFxuXHRcdHBhcmNlbFNob3BDb3VudHJ5Q29kZSA9ICcnLFxuXHRcdHBhcmNlbFNob3BNYXhXZWlnaHQgPSAnJyxcblx0XHRwYXJjZWxTaG9wQ29kID0gJycsXG5cdFx0cGFyY2VsU2hvcENhcmQgPSAnJyxcblx0XHRpc0VsaWdpYmxlRm9yQWx6YWJveCA9IHRydWUsXG5cdFx0aXNFbGlnaWJsZUZvclNsb3ZlbnNrYVBvc3RhQm94ID0gdHJ1ZVxuXHQpIHtcblx0XHQvLyBQcmVwYXJlIFhIUiBSZXF1ZXN0LlxuXHRcdHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblx0XHR4aHIub3BlbignUE9TVCcsIHdjX2RwZF9wYXJjZWxzaG9wX21hcF93aWRnZXRfc2V0dGluZ3MuYWpheF91cmwsIHRydWUpO1xuXHRcdHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyk7XG5cblx0XHQvLyBDYWxsYmFjayBvbiByZXNwb25zZS5cblx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0Ly8gcmVhZHlTdGF0ZSA0IG1lYW5zIHRoZSByZXF1ZXN0IGlzIGRvbmUuXG5cdFx0XHR2YXIgRE9ORSA9IDQ7XG5cblx0XHRcdC8vIHN0YXR1cyAyMDAgaXMgYSBzdWNjZXNzZnVsIHJldHVybi5cblx0XHRcdHZhciBPSyA9IDIwMDtcblxuXHRcdFx0Ly8gQ2hlY2sgcmVzcG9uc2UuXG5cdFx0XHRpZiAoeGhyLnJlYWR5U3RhdGUgPT09IERPTkUpIHtcblx0XHRcdFx0aWYgKHhoci5zdGF0dXMgPT09IE9LKSB7XG5cdFx0XHRcdFx0ZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgndXBkYXRlX2NoZWNrb3V0JykpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdC8vIEZpbmFsbHkgZG8gdGhlIGNhbGwgd2l0aCB0aGUgcmlnaHQgcGFyYW1ldGV0cnMuXG5cdFx0eGhyLnNlbmQoXG5cdFx0XHQnYWN0aW9uPXdjX2RwZF91cGRhdGVfY2hvc2VuX3BhcmNlbHNob3Amd3Bfbm9uY2U9JyArXG5cdFx0XHRcdHBvcHVwLmdldEF0dHJpYnV0ZSgnZGF0YS1ub25jZScpICtcblx0XHRcdFx0JyZ3Y19kcGRfcGFyY2Vsc2hvcF9pZD0nICtcblx0XHRcdFx0cGFyY2VsU2hvcElkICtcblx0XHRcdFx0JyZ3Y19kcGRfcGFyY2Vsc2hvcF9wdXNfaWQ9JyArXG5cdFx0XHRcdHBhcmNlbFNob3BQdXNJZCArXG5cdFx0XHRcdCcmd2NfZHBkX3BhcmNlbHNob3BfbmFtZT0nICtcblx0XHRcdFx0cGFyY2VsU2hvcE5hbWUgK1xuXHRcdFx0XHQnJndjX2RwZF9wYXJjZWxzaG9wX3N0cmVldD0nICtcblx0XHRcdFx0cGFyY2VsU2hvcFN0cmVldCArXG5cdFx0XHRcdCcmd2NfZHBkX3BhcmNlbHNob3BfemlwPScgK1xuXHRcdFx0XHRwYXJjZWxTaG9wWmlwICtcblx0XHRcdFx0JyZ3Y19kcGRfcGFyY2Vsc2hvcF9jaXR5PScgK1xuXHRcdFx0XHRwYXJjZWxTaG9wQ2l0eSArXG5cdFx0XHRcdCcmd2NfZHBkX3BhcmNlbHNob3BfY291bnRyeV9jb2RlPScgK1xuXHRcdFx0XHRwYXJjZWxTaG9wQ291bnRyeUNvZGUgK1xuXHRcdFx0XHQnJndjX2RwZF9wYXJjZWxzaG9wX21heF93ZWlnaHQ9JyArXG5cdFx0XHRcdHBhcmNlbFNob3BNYXhXZWlnaHQgK1xuXHRcdFx0XHQnJndjX2RwZF9wYXJjZWxzaG9wX2NvZD0nICtcblx0XHRcdFx0cGFyY2VsU2hvcENvZCArXG5cdFx0XHRcdCcmd2NfZHBkX3BhcmNlbHNob3BfY2FyZD0nICtcblx0XHRcdFx0cGFyY2VsU2hvcENhcmQgK1xuXHRcdFx0XHQnJndjX2RwZF9wYXJjZWxzaG9wX2lzX2FsemFib3hfZWxpZ2libGU9JyArXG5cdFx0XHRcdGlzRWxpZ2libGVGb3JBbHphYm94ICtcblx0XHRcdFx0JyZ3Y19kcGRfcGFyY2Vsc2hvcF9pc19zbG92ZW5za2FfcG9zdGFfZWxpZ2libGU9JyArXG5cdFx0XHRcdGlzRWxpZ2libGVGb3JTbG92ZW5za2FQb3N0YUJveFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogT3BlbiB0aGUgcG9wdXBcblx0ICovXG5cdGZ1bmN0aW9uIG9wZW5Qb3B1cCgpIHtcblx0XHRwb3B1cC5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcblxuXHRcdGlmIChkcGRNYXBXaWRnZXRFbCAmJiBkcGRNYXBXaWRnZXQpIHtcblx0XHRcdGNvbnN0IGNob3NlblBhcmNlbFNob3BJZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XHRcdGNob3NlblBhcmNlbFNob3BIaWRkZW5QYXJjZWxJZFNlbGVjdG9yXG5cdFx0XHQpLnZhbHVlO1xuXG5cdFx0XHRpZiAoY2hvc2VuUGFyY2VsU2hvcElkKSB7XG5cdFx0XHRcdGRwZE1hcFdpZGdldC5vcHRpb25zLnNlbGVjdGVkUHVkb0lkID0gY2hvc2VuUGFyY2VsU2hvcElkO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXNlbGVjdCBvcGVuIGJ1dHRvbiB0byBnZXQgcmVmcmVzaGVkIGRhdGFcblx0XHRcdGRwZE1hcE9wZW5XaWRnZXRNYXBQb3B1cEVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihcblx0XHRcdFx0bWFwV2lkZ2V0UG9wdXBPcGVuQnRuU2VsZWN0b3Jcblx0XHRcdCk7XG5cblx0XHRcdC8vIEFkZCB6aXAgaWYgYXZhaWxhYmxlXG5cdFx0XHRjdXN0b21lclppcCA9IGdldEN1c3RvbWVyWmlwKCk7XG5cblx0XHRcdGlmIChjdXN0b21lclppcCkge1xuXHRcdFx0XHRkcGRNYXBXaWRnZXQub3B0aW9ucy56aXAgPSBjdXN0b21lclppcDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gR2V0IHRoZSBzZWxlY3RlZCBjdXN0b21lciBjb3VudHJ5XG5cdFx0XHRjb25zdCBjb3VudHJ5Q29kZSA9IGRwZE1hcE9wZW5XaWRnZXRNYXBQb3B1cEVsLmdldEF0dHJpYnV0ZShcblx0XHRcdFx0J2RhdGEtYmFzZS1jb3VudHJ5LWNvZGUnXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoY291bnRyeUNvZGUpIHtcblx0XHRcdFx0ZHBkTWFwV2lkZ2V0Lm9wdGlvbnMuY291bnRyeSA9IGNvdW50cnlDb2RlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBVcGRhdGUgd2VpZ2h0IGFuZCBhbGxvd2VkIGxvY2tlciB0eXBlcyB3aGVuIG9wZW5pbmcgdGhlIHBvcHVwXG5cdFx0XHRjb25zdCBtaW5XZWlnaHRJbktnID0gcGFyc2VJbnQoXG5cdFx0XHRcdGRwZE1hcE9wZW5XaWRnZXRNYXBQb3B1cEVsLmdldEF0dHJpYnV0ZSgnZGF0YS1taW4td2VpZ2h0LWluLWtnJylcblx0XHRcdCk7XG5cdFx0XHRjb25zdCBpc0VsaWdpYmxlRm9yQWx6YWJveCA9XG5cdFx0XHRcdGRwZE1hcE9wZW5XaWRnZXRNYXBQb3B1cEVsLmdldEF0dHJpYnV0ZShcblx0XHRcdFx0XHQnZGF0YS1pcy1lbGlnaWJsZS1mb3ItYWx6YWJveCdcblx0XHRcdFx0KSA9PT0gJ3RydWUnO1xuXHRcdFx0Y29uc3QgaXNFbGlnaWJsZUZvclNsb3ZlbnNrYVBvc3RhQm94ID1cblx0XHRcdFx0ZHBkTWFwT3BlbldpZGdldE1hcFBvcHVwRWwuZ2V0QXR0cmlidXRlKFxuXHRcdFx0XHRcdCdkYXRhLWlzLWVsaWdpYmxlLWZvci1zbG92ZW5za2EtcG9zdGEtYm94J1xuXHRcdFx0XHQpID09PSAndHJ1ZSc7XG5cblx0XHRcdGRwZE1hcFdpZGdldC5vcHRpb25zLm1pbldlaWdodEluS2cgPSBtaW5XZWlnaHRJbktnO1xuXG5cdFx0XHRjb25zdCBkaXNhbGxvd1Nob3BzID1cblx0XHRcdFx0ZHBkTWFwT3BlbldpZGdldE1hcFBvcHVwRWwuZ2V0QXR0cmlidXRlKCdkYXRhLWRpc2FsbG93LXNob3BzJykgPT09XG5cdFx0XHRcdCd0cnVlJztcblx0XHRcdGNvbnN0IGRpc2FsbG93TG9ja2VycyA9XG5cdFx0XHRcdGRwZE1hcE9wZW5XaWRnZXRNYXBQb3B1cEVsLmdldEF0dHJpYnV0ZSgnZGF0YS1kaXNhbGxvdy1sb2NrZXJzJykgPT09XG5cdFx0XHRcdCd0cnVlJztcblx0XHRcdGNvbnN0IGRpc2FsbG93RHBkUGlja3VwU3RhdGlvbnMgPVxuXHRcdFx0XHRkcGRNYXBPcGVuV2lkZ2V0TWFwUG9wdXBFbC5nZXRBdHRyaWJ1dGUoXG5cdFx0XHRcdFx0J2RhdGEtZGlzYWxsb3ctZHBkLXBpY2t1cC1zdGF0aW9ucydcblx0XHRcdFx0KSA9PT0gJ3RydWUnO1xuXHRcdFx0Y29uc3QgZGlzYWxsb3dTa1Bvc3QgPVxuXHRcdFx0XHRkcGRNYXBPcGVuV2lkZ2V0TWFwUG9wdXBFbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtZGlzYWxsb3ctc2stcG9zdCcpID09PVxuXHRcdFx0XHQndHJ1ZSc7XG5cdFx0XHRjb25zdCBkaXNhbGxvd0FsemFCb3hlcyA9XG5cdFx0XHRcdGRwZE1hcE9wZW5XaWRnZXRNYXBQb3B1cEVsLmdldEF0dHJpYnV0ZSgnZGF0YS1kaXNhbGxvdy1hbHphLWJveGVzJykgPT09XG5cdFx0XHRcdCd0cnVlJztcblxuXHRcdFx0bGV0IGFsbG93ZWRQdWRvVHlwZXMgPSBbJ3Nob3AnLCAnbG9ja2VyJ107XG5cdFx0XHRpZiAoZGlzYWxsb3dTaG9wcykge1xuXHRcdFx0XHRhbGxvd2VkUHVkb1R5cGVzID0gYWxsb3dlZFB1ZG9UeXBlcy5maWx0ZXIoKHR5cGUpID0+IHR5cGUgIT09ICdzaG9wJyk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoZGlzYWxsb3dMb2NrZXJzKSB7XG5cdFx0XHRcdGFsbG93ZWRQdWRvVHlwZXMgPSBhbGxvd2VkUHVkb1R5cGVzLmZpbHRlcigodHlwZSkgPT4gdHlwZSAhPT0gJ2xvY2tlcicpO1xuXHRcdFx0fVxuXG5cdFx0XHRkcGRNYXBXaWRnZXQub3B0aW9ucy5hbGxvd2VkUHVkb1R5cGVzID0gYWxsb3dlZFB1ZG9UeXBlcztcblxuXHRcdFx0bGV0IGFsbG93ZWRMb2NrZXJUeXBlcyA9IFtcblx0XHRcdFx0J2RwZFNrUGlja3VwU3RhdGlvbnMnLFxuXHRcdFx0XHQnc2tQb3N0Jyxcblx0XHRcdFx0J2FsemFTbG92YWtpYScsXG5cdFx0XHRcdCdvdXRzaWRlT2ZTbG92YWtpYScsXG5cdFx0XHRdO1xuXG5cdFx0XHRpZiAoIWlzRWxpZ2libGVGb3JBbHphYm94IHx8ICFpc0VsaWdpYmxlRm9yU2xvdmVuc2thUG9zdGFCb3gpIHtcblx0XHRcdFx0aWYgKCFpc0VsaWdpYmxlRm9yQWx6YWJveCkge1xuXHRcdFx0XHRcdGFsbG93ZWRMb2NrZXJUeXBlcyA9IGFsbG93ZWRMb2NrZXJUeXBlcy5maWx0ZXIoXG5cdFx0XHRcdFx0XHQodHlwZSkgPT4gdHlwZSAhPT0gJ2FsemFTbG92YWtpYSdcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCFpc0VsaWdpYmxlRm9yU2xvdmVuc2thUG9zdGFCb3gpIHtcblx0XHRcdFx0XHRhbGxvd2VkTG9ja2VyVHlwZXMgPSBhbGxvd2VkTG9ja2VyVHlwZXMuZmlsdGVyKFxuXHRcdFx0XHRcdFx0KHR5cGUpID0+IHR5cGUgIT09ICdza1Bvc3QnXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWRpc2FsbG93TG9ja2Vycykge1xuXHRcdFx0XHRpZiAoZGlzYWxsb3dEcGRQaWNrdXBTdGF0aW9ucykge1xuXHRcdFx0XHRcdGFsbG93ZWRMb2NrZXJUeXBlcyA9IGFsbG93ZWRMb2NrZXJUeXBlcy5maWx0ZXIoXG5cdFx0XHRcdFx0XHQodHlwZSkgPT4gdHlwZSAhPT0gJ2RwZFNrUGlja3VwU3RhdGlvbnMnXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZGlzYWxsb3dTa1Bvc3QpIHtcblx0XHRcdFx0XHRhbGxvd2VkTG9ja2VyVHlwZXMgPSBhbGxvd2VkTG9ja2VyVHlwZXMuZmlsdGVyKFxuXHRcdFx0XHRcdFx0KHR5cGUpID0+IHR5cGUgIT09ICdza1Bvc3QnXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZGlzYWxsb3dBbHphQm94ZXMpIHtcblx0XHRcdFx0XHRhbGxvd2VkTG9ja2VyVHlwZXMgPSBhbGxvd2VkTG9ja2VyVHlwZXMuZmlsdGVyKFxuXHRcdFx0XHRcdFx0KHR5cGUpID0+IHR5cGUgIT09ICdhbHphU2xvdmFraWEnXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRkcGRNYXBXaWRnZXQub3B0aW9ucy5hbGxvd2VkTG9ja2VyVHlwZXMgPSBhbGxvd2VkTG9ja2VyVHlwZXM7XG5cblx0XHRcdGxldCByZXF1aXJlZFNlcnZpY2VzID0gW107XG5cblx0XHRcdGNvbnN0IGlzQ29kUmVxdWlyZWQgPVxuXHRcdFx0XHRkcGRNYXBPcGVuV2lkZ2V0TWFwUG9wdXBFbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaXMtY29kLXJlcXVpcmVkJykgPT09XG5cdFx0XHRcdCd0cnVlJztcblx0XHRcdGNvbnN0IGlzQ2FyZFBheW1lbnRSZXF1aXJlZCA9XG5cdFx0XHRcdGRwZE1hcE9wZW5XaWRnZXRNYXBQb3B1cEVsLmdldEF0dHJpYnV0ZShcblx0XHRcdFx0XHQnZGF0YS1pcy1jYXJkLXBheW1lbnQtcmVxdWlyZWQnXG5cdFx0XHRcdCkgPT09ICd0cnVlJztcblxuXHRcdFx0aWYgKGlzQ29kUmVxdWlyZWQgfHwgaXNDYXJkUGF5bWVudFJlcXVpcmVkKSB7XG5cdFx0XHRcdGlmIChpc0NvZFJlcXVpcmVkKSB7XG5cdFx0XHRcdFx0cmVxdWlyZWRTZXJ2aWNlcy5wdXNoKCdjb2QnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChpc0NhcmRQYXltZW50UmVxdWlyZWQpIHtcblx0XHRcdFx0XHRyZXF1aXJlZFNlcnZpY2VzLnB1c2goJ2NhcmRQYXltZW50Jyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0ZHBkTWFwV2lkZ2V0Lm9wdGlvbnMucmVxdWlyZWRTZXJ2aWNlcyA9IHJlcXVpcmVkU2VydmljZXM7XG5cblx0XHRcdGRwZE1hcFdpZGdldFxuXHRcdFx0XHQuYXR0YWNoKGRwZE1hcFdpZGdldEVsKVxuXHRcdFx0XHQudGhlbigocHVkbykgPT4ge1xuXHRcdFx0XHRcdHNldFNlbGVjdGVkUGFyY2VsU2hvcCh7XG5cdFx0XHRcdFx0XHRpZDogcHVkby5pZCxcblx0XHRcdFx0XHRcdG5hbWU6IHB1ZG8ubmFtZSxcblx0XHRcdFx0XHRcdHN0cmVldDogcHVkby5zdHJlZXQsXG5cdFx0XHRcdFx0XHRob3VzZW5vOiBwdWRvLmhvdXNlbm8sXG5cdFx0XHRcdFx0XHR6aXA6IHB1ZG8uemlwLFxuXHRcdFx0XHRcdFx0Y2l0eTogcHVkby5jaXR5LFxuXHRcdFx0XHRcdFx0Y291bnRyeUNvZGU6IHB1ZG8uY291bnRyeUNvZGUsXG5cdFx0XHRcdFx0XHRtYXh3ZWlnaHQ6IHB1ZG8ubWF4V2VpZ2h0SW5LZyxcblx0XHRcdFx0XHRcdGNvZDogcHVkby5zZXJ2aWNlcyAmJiBwdWRvLnNlcnZpY2VzLmluY2x1ZGVzKCdjb2QnKSA/IHRydWUgOiBmYWxzZSxcblx0XHRcdFx0XHRcdGNhcmQ6XG5cdFx0XHRcdFx0XHRcdHB1ZG8uc2VydmljZXMgJiYgcHVkby5zZXJ2aWNlcy5pbmNsdWRlcygnY2FyZFBheW1lbnQnKVxuXHRcdFx0XHRcdFx0XHRcdD8gdHJ1ZVxuXHRcdFx0XHRcdFx0XHRcdDogZmFsc2UsXG5cdFx0XHRcdFx0XHRpc0VsaWdpYmxlRm9yQWx6YWJveDogaXNFbGlnaWJsZUZvckFsemFib3gsXG5cdFx0XHRcdFx0XHRpc0VsaWdpYmxlRm9yU2xvdmVuc2thUG9zdGFCb3g6IGlzRWxpZ2libGVGb3JTbG92ZW5za2FQb3N0YUJveCxcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdGNsb3NlUG9wdXAoKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKChjb2RlKSA9PiB7XG5cdFx0XHRcdFx0Y2xvc2VQb3B1cCgpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2xvc2UgdGhlIHBvcHVwXG5cdCAqL1xuXHRmdW5jdGlvbiBjbG9zZVBvcHVwKCkge1xuXHRcdHBvcHVwLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgY2xvc2UgbWV0aG9kIGV4aXN0c1xuXHRcdGlmIChkcGRNYXBXaWRnZXQgJiYgZHBkTWFwV2lkZ2V0LmNsb3NlKSB7XG5cdFx0XHRkcGRNYXBXaWRnZXQuY2xvc2UoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2sgaWYgYSBwYXJjZWwgc2hvcCBpcyBjaG9zZW5cblx0ICovXG5cdGZ1bmN0aW9uIGlzUGFyY2VsU2hvcENob3NlbigpIHtcblx0XHR2YXIgY2hvc2VuUGFyY2VsU2hvcElkID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihcblx0XHRcdGNob3NlblBhcmNlbFNob3BIaWRkZW5QYXJjZWxJZFNlbGVjdG9yXG5cdFx0KS52YWx1ZTtcblx0XHRyZXR1cm4gY2hvc2VuUGFyY2VsU2hvcElkICE9PSAnJztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgY3VzdG9tZXIgemlwXG5cdCAqL1xuXHRmdW5jdGlvbiBnZXRDdXN0b21lclppcCgpIHtcblx0XHQvLyBDaGVjayBpZiBzaGlwIHRvIGRpZmZlcmVudCBhZGRyZXNzIGlzIGNoZWNrZWRcblx0XHRjb25zdCBzaGlwVG9EaWZmZXJlbnRBZGRyZXNzID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihcblx0XHRcdCdpbnB1dFtuYW1lPVwic2hpcF90b19kaWZmZXJlbnRfYWRkcmVzc1wiXSdcblx0XHQpO1xuXG5cdFx0aWYgKHNoaXBUb0RpZmZlcmVudEFkZHJlc3MgJiYgc2hpcFRvRGlmZmVyZW50QWRkcmVzcy5jaGVja2VkKSB7XG5cdFx0XHRjb25zdCBzaGlwcGluZ1Bvc3Rjb2RlRmllbGQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuXHRcdFx0XHQnaW5wdXRbbmFtZT1cInNoaXBwaW5nX3Bvc3Rjb2RlXCJdJ1xuXHRcdFx0KTtcblxuXHRcdFx0aWYgKHNoaXBwaW5nUG9zdGNvZGVGaWVsZCkge1xuXHRcdFx0XHRjdXN0b21lclppcCA9IHNoaXBwaW5nUG9zdGNvZGVGaWVsZC52YWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGN1c3RvbWVyWmlwKSB7XG5cdFx0XHRcdHJldHVybiBjdXN0b21lclppcDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBiaWxsaW5nUG9zdGNvZGVGaWVsZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XHQnaW5wdXRbbmFtZT1cImJpbGxpbmdfcG9zdGNvZGVcIl0nXG5cdFx0KTtcblxuXHRcdGlmIChiaWxsaW5nUG9zdGNvZGVGaWVsZCkge1xuXHRcdFx0Y3VzdG9tZXJaaXAgPSBiaWxsaW5nUG9zdGNvZGVGaWVsZC52YWx1ZTtcblx0XHR9XG5cblx0XHRpZiAoY3VzdG9tZXJaaXApIHtcblx0XHRcdHJldHVybiBjdXN0b21lclppcDtcblx0XHR9XG5cblx0XHRjdXN0b21lclppcCA9IGRwZE1hcE9wZW5XaWRnZXRNYXBQb3B1cEVsLmdldEF0dHJpYnV0ZSgnZGF0YS1jdXN0b21lci16aXAnKTtcblxuXHRcdGlmIChjdXN0b21lclppcCkge1xuXHRcdFx0cmV0dXJuIGN1c3RvbWVyWmlwO1xuXHRcdH1cblxuXHRcdHJldHVybiAnJztcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVjayBpZiBkb2N1bWVudCBpcyByZWFkeVxuXHQgKi9cblx0ZnVuY3Rpb24gZG9jUmVhZHkoZm4pIHtcblx0XHRpZiAoXG5cdFx0XHRkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnY29tcGxldGUnIHx8XG5cdFx0XHRkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnaW50ZXJhY3RpdmUnXG5cdFx0KSB7XG5cdFx0XHRzZXRUaW1lb3V0KGZuLCAxKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZuKTtcblx0XHR9XG5cdH1cblxuXHRkb2NSZWFkeShmdW5jdGlvbiAoKSB7XG5cdFx0aW5pdCgpO1xuXHR9KTtcblxuXHQvLyBBbGxvdyB0aGUgZnVuY3Rpb25zIHRvIGJlIGNhbGxlZCBmcm9tIG91dHNpZGVcblx0cmV0dXJuIHtcblx0XHRvcGVuUG9wdXA6IG9wZW5Qb3B1cCxcblx0fTtcbn0pKCk7XG4iXSwibWFwcGluZ3MiOiI7QUFBQUEsTUFBTSxDQUFDQyxtQkFBbUIsR0FBSSxZQUFZO0VBQ3pDLElBQUlDLHNCQUFzQjtJQUN6QkMsS0FBSztJQUNMQyxZQUFZO0lBQ1pDLCtCQUErQjtJQUMvQkMsNkJB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\n//# sourceURL=webpack-internal:///./assets/scripts/dpd-parcelshop-map-widget.js\n");18 eval("function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nwindow.dpdParcelShopWidget = function () {\n var mapWidgetPopupSelector,\n popup,\n dpdMapWidget,\n mapWidgetPopupContainerSelector,\n mapWidgetPopupOpenBtnSelector,\n chosenParcelShopContentSelector,\n chosenParcelShopContentTextSelector,\n chosenParcelShopHiddenParcelIdSelector,\n chosenParcelShopHiddenParcelPusIdSelector,\n chosenParcelShopHiddenParcelNameSelector,\n chosenParcelShopHiddenParcelStreetSelector,\n chosenParcelShopHiddenParcelCitySelector,\n chosenParcelShopHiddenParcelZipSelector,\n chosenParcelShopHiddenParcelCountryCodeSelector,\n dpdMapWidgetEl,\n customerZip,\n countries,\n baseCountryCode,\n isMapInitialized = false;\n function init() {\n mapWidgetPopupOpenBtnSelector = '.js-dpd-parcelshop-map-widget-open-popup-btn';\n mapWidgetPopupSelector = '.js-dpd-parcelshop-map-widget-popup';\n mapWidgetPopupContainerSelector = '.js-dpd-parcelshop-map-widget-popup-container';\n chosenParcelShopContentSelector = '.js-dpd-chosen-parcelshop-content';\n chosenParcelShopContentTextSelector = '.js-dpd-chosen-parcelshop-chosen-parcelshop-text';\n chosenParcelShopHiddenParcelIdSelector = '.js-dpd-parcelshop-hidden-parcelshop-id';\n chosenParcelShopHiddenParcelPusIdSelector = '.js-dpd-parcelshop-hidden-parcelshop-pus-id';\n chosenParcelShopHiddenParcelNameSelector = '.js-dpd-parcelshop-hidden-parcelshop-name';\n chosenParcelShopHiddenParcelStreetSelector = '.js-dpd-parcelshop-hidden-parcelshop-street';\n chosenParcelShopHiddenParcelCitySelector = '.js-dpd-parcelshop-hidden-parcelshop-city';\n chosenParcelShopHiddenParcelZipSelector = '.js-dpd-parcelshop-hidden-parcelshop-zip';\n chosenParcelShopHiddenParcelCountryCodeSelector = '.js-dpd-parcelshop-hidden-parcelshop-country-code';\n popup = document.querySelector(mapWidgetPopupSelector);\n\n /**\r\n * Open the popup when the user clicks the open button\r\n */\n document.addEventListener('click', function (event) {\n if (!event.target.matches(mapWidgetPopupOpenBtnSelector)) {\n return;\n }\n event.preventDefault();\n\n // Fetch the dpdMapWidgetEl element dynamically\n dpdMapWidgetEl = document.querySelector('.js-dpd-parcelshop-map-widget-popup-embed');\n if (!dpdMapWidgetEl) {\n return;\n }\n\n // Fetch the dpdMapOpenWidgetMapPopupEl element dynamically\n dpdMapOpenWidgetMapPopupEl = event.target.closest(mapWidgetPopupOpenBtnSelector);\n if (!dpdMapOpenWidgetMapPopupEl) {\n return;\n }\n initMap();\n openPopup();\n }, false);\n\n /**\r\n * Close the popup when the user clicks outside of it\r\n */\n document.addEventListener('click', function (event) {\n if (!event.target.matches(mapWidgetPopupContainerSelector)) {\n return;\n }\n event.preventDefault();\n closePopup();\n }, false);\n\n /**\r\n * Close the popup when the escape key is pressed\r\n */\n document.addEventListener('keydown', function (event) {\n if (event.key !== 'Escape') {\n return;\n }\n closePopup();\n }, false);\n\n /**\r\n * Trigger the update_checkout event when the payment method is changed and a parcel shop is chosen\r\n */\n document.addEventListener('change', function (event) {\n if (event.target && event.target.matches('input[name=\"payment_method\"]')) {\n // Check if a parcel shop is chosen\n if (isParcelShopChosen()) {\n // Trigger the update_checkout event\n document.body.dispatchEvent(new Event('update_checkout'));\n }\n }\n }, false);\n }\n\n /**\r\n * Initialize the map\r\n */\n function initMap() {\n if (isMapInitialized) {\n return;\n }\n var apiKey = dpdMapWidgetEl.getAttribute('data-api-key');\n if (!apiKey) {\n console.log('Map Api key is missing');\n return;\n }\n countries = JSON.parse(dpdMapOpenWidgetMapPopupEl.getAttribute('data-countries'));\n allowedCountries = JSON.parse(dpdMapOpenWidgetMapPopupEl.getAttribute('data-allowed-countries'));\n allowedCountries = allowedCountries.join(',');\n baseCountryCode = dpdMapOpenWidgetMapPopupEl.getAttribute('data-base-country-code');\n dpdMapWidget = new DpdPudo.Widget({\n apiKey: apiKey,\n country: baseCountryCode,\n allowedCountries: [allowedCountries]\n });\n isMapInitialized = true;\n }\n\n /**\r\n * Set the selected parcel shop in the session and update the frontend field\r\n */\n function setSelectedParcelShop() {\n var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (!data || Object.keys(data).length === 0) {\n return;\n }\n var parcelShopId = data.hasOwnProperty('id') ? data.id : null;\n var parcelShopPusId = data.hasOwnProperty('id') ? data.id : null;\n var parcelShopName = data.hasOwnProperty('name') ? data.name : null;\n var parcelShopStreet = data.hasOwnProperty('street') ? data.street : null;\n var parcelShopZip = data.hasOwnProperty('zip') ? data.zip : null;\n var parcelShopCity = data.hasOwnProperty('city') ? data.city : null;\n var parcelShopCountryCode = data.hasOwnProperty('countryCode') ? data.countryCode : null;\n var parcelShopMaxWeight = data.hasOwnProperty('maxweight') ? data.maxweight : null;\n var parcelShopCod = data.hasOwnProperty('cod') ? data.cod : null;\n var parcelShopCard = data.hasOwnProperty('card') ? data.card : null;\n var isEligibleForAlzabox = data.hasOwnProperty('isEligibleForAlzabox') ? data.isEligibleForAlzabox : null;\n var isEligibleForSlovenskaPostaBox = data.hasOwnProperty('isEligibleForSlovenskaPostaBox') ? data.isEligibleForSlovenskaPostaBox : null;\n\n // Update session\n setSelectedParcelShopSession(parcelShopId, parcelShopPusId, parcelShopName, parcelShopStreet, parcelShopZip, parcelShopCity, parcelShopCountryCode, parcelShopMaxWeight, parcelShopCod, parcelShopCard, isEligibleForAlzabox, isEligibleForSlovenskaPostaBox);\n var parcelShopCountry = countries && _typeof(countries) === 'object' && countries.hasOwnProperty(parcelShopCountryCode) ? countries[parcelShopCountryCode] : parcelShopCountryCode;\n\n // Update frontend field\n document.querySelector(chosenParcelShopHiddenParcelIdSelector).value = parcelShopId;\n document.querySelector(chosenParcelShopHiddenParcelPusIdSelector).value = parcelShopPusId;\n document.querySelector(chosenParcelShopHiddenParcelNameSelector).value = parcelShopName;\n document.querySelector(chosenParcelShopHiddenParcelStreetSelector).value = parcelShopStreet;\n document.querySelector(chosenParcelShopHiddenParcelZipSelector).value = parcelShopZip;\n document.querySelector(chosenParcelShopHiddenParcelCitySelector).value = parcelShopCity;\n document.querySelector(chosenParcelShopHiddenParcelCountryCodeSelector).value = parcelShopCountryCode;\n\n // Filter out empty values\n var notEmptyAddressValues = Object.values([parcelShopName, parcelShopStreet, parcelShopZip, parcelShopCity, parcelShopCountry]).filter(function (value) {\n return !!value;\n });\n\n // Construct the text content\n document.querySelector(chosenParcelShopContentTextSelector).innerHTML = notEmptyAddressValues.join(', ');\n document.querySelector(chosenParcelShopContentSelector).classList.add('active');\n }\n\n /**\r\n * Set the selected parcel shop in the session\r\n */\n function setSelectedParcelShopSession() {\n var parcelShopId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var parcelShopPusId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var parcelShopName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n var parcelShopStreet = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';\n var parcelShopZip = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : '';\n var parcelShopCity = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : '';\n var parcelShopCountryCode = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : '';\n var parcelShopMaxWeight = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : '';\n var parcelShopCod = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : '';\n var parcelShopCard = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : '';\n var isEligibleForAlzabox = arguments.length > 10 && arguments[10] !== undefined ? arguments[10] : true;\n var isEligibleForSlovenskaPostaBox = arguments.length > 11 && arguments[11] !== undefined ? arguments[11] : true;\n // Prepare XHR Request.\n var xhr = new XMLHttpRequest();\n xhr.open('POST', wc_dpd_parcelshop_map_widget_settings.ajax_url, true);\n xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');\n\n // Callback on response.\n xhr.onreadystatechange = function () {\n // readyState 4 means the request is done.\n var DONE = 4;\n\n // status 200 is a successful return.\n var OK = 200;\n\n // Check response.\n if (xhr.readyState === DONE) {\n if (xhr.status === OK) {\n document.body.dispatchEvent(new Event('update_checkout'));\n }\n }\n };\n\n // Finally do the call with the right parametetrs.\n xhr.send('action=wc_dpd_update_chosen_parcelshop&wp_nonce=' + popup.getAttribute('data-nonce') + '&wc_dpd_parcelshop_id=' + parcelShopId + '&wc_dpd_parcelshop_pus_id=' + parcelShopPusId + '&wc_dpd_parcelshop_name=' + parcelShopName + '&wc_dpd_parcelshop_street=' + parcelShopStreet + '&wc_dpd_parcelshop_zip=' + parcelShopZip + '&wc_dpd_parcelshop_city=' + parcelShopCity + '&wc_dpd_parcelshop_country_code=' + parcelShopCountryCode + '&wc_dpd_parcelshop_max_weight=' + parcelShopMaxWeight + '&wc_dpd_parcelshop_cod=' + parcelShopCod + '&wc_dpd_parcelshop_card=' + parcelShopCard + '&wc_dpd_parcelshop_is_alzabox_eligible=' + isEligibleForAlzabox + '&wc_dpd_parcelshop_is_slovenska_posta_eligible=' + isEligibleForSlovenskaPostaBox);\n }\n\n /**\r\n * Open the popup\r\n */\n function openPopup() {\n popup.classList.add('active');\n if (dpdMapWidgetEl && dpdMapWidget) {\n var chosenParcelShopId = document.querySelector(chosenParcelShopHiddenParcelIdSelector).value;\n if (chosenParcelShopId) {\n dpdMapWidget.options.selectedPudoId = chosenParcelShopId;\n }\n\n // Reselect open button to get refreshed data\n dpdMapOpenWidgetMapPopupEl = document.querySelector(mapWidgetPopupOpenBtnSelector);\n\n // Add zip if available\n customerZip = getCustomerZip();\n if (customerZip) {\n dpdMapWidget.options.zip = customerZip;\n }\n\n // Get the selected customer country\n var countryCode = dpdMapOpenWidgetMapPopupEl.getAttribute('data-base-country-code');\n if (countryCode) {\n dpdMapWidget.options.country = countryCode;\n }\n\n // Update weight and allowed locker types when opening the popup\n var minWeightInKg = parseInt(dpdMapOpenWidgetMapPopupEl.getAttribute('data-min-weight-in-kg'));\n var isEligibleForAlzabox = dpdMapOpenWidgetMapPopupEl.getAttribute('data-is-eligible-for-alzabox') === 'true';\n var isEligibleForSlovenskaPostaBox = dpdMapOpenWidgetMapPopupEl.getAttribute('data-is-eligible-for-slovenska-posta-box') === 'true';\n dpdMapWidget.options.minWeightInKg = minWeightInKg;\n var disallowShops = dpdMapOpenWidgetMapPopupEl.getAttribute('data-disallow-shops') === 'true';\n var disallowLockers = dpdMapOpenWidgetMapPopupEl.getAttribute('data-disallow-lockers') === 'true';\n var disallowDpdPickupStations = dpdMapOpenWidgetMapPopupEl.getAttribute('data-disallow-dpd-pickup-stations') === 'true';\n var disallowSkPost = dpdMapOpenWidgetMapPopupEl.getAttribute('data-disallow-sk-post') === 'true';\n var disallowAlzaBoxes = dpdMapOpenWidgetMapPopupEl.getAttribute('data-disallow-alza-boxes') === 'true';\n var allowedPudoTypes = ['shop', 'locker'];\n if (disallowShops) {\n allowedPudoTypes = allowedPudoTypes.filter(function (type) {\n return type !== 'shop';\n });\n }\n if (disallowLockers) {\n allowedPudoTypes = allowedPudoTypes.filter(function (type) {\n return type !== 'locker';\n });\n }\n dpdMapWidget.options.allowedPudoTypes = allowedPudoTypes;\n var allowedLockerTypes = ['dpdSkPickupStations', 'skPost', 'alzaSlovakia', 'outsideOfSlovakia'];\n if (!isEligibleForAlzabox || !isEligibleForSlovenskaPostaBox) {\n if (!isEligibleForAlzabox) {\n allowedLockerTypes = allowedLockerTypes.filter(function (type) {\n return type !== 'alzaSlovakia';\n });\n }\n if (!isEligibleForSlovenskaPostaBox) {\n allowedLockerTypes = allowedLockerTypes.filter(function (type) {\n return type !== 'skPost';\n });\n }\n }\n if (!disallowLockers) {\n if (disallowDpdPickupStations) {\n allowedLockerTypes = allowedLockerTypes.filter(function (type) {\n return type !== 'dpdSkPickupStations';\n });\n }\n if (disallowSkPost) {\n allowedLockerTypes = allowedLockerTypes.filter(function (type) {\n return type !== 'skPost';\n });\n }\n if (disallowAlzaBoxes) {\n allowedLockerTypes = allowedLockerTypes.filter(function (type) {\n return type !== 'alzaSlovakia';\n });\n }\n }\n dpdMapWidget.options.allowedLockerTypes = allowedLockerTypes;\n var requiredServices = [];\n var isCodRequired = dpdMapOpenWidgetMapPopupEl.getAttribute('data-is-cod-required') === 'true';\n var isCardPaymentRequired = dpdMapOpenWidgetMapPopupEl.getAttribute('data-is-card-payment-required') === 'true';\n if (isCodRequired || isCardPaymentRequired) {\n if (isCodRequired) {\n requiredServices.push('cod');\n }\n if (isCardPaymentRequired) {\n requiredServices.push('cardPayment');\n }\n }\n dpdMapWidget.options.requiredServices = requiredServices;\n dpdMapWidget.attach(dpdMapWidgetEl).then(function (pudo) {\n setSelectedParcelShop({\n id: pudo.id,\n name: pudo.name,\n street: pudo.street,\n houseno: pudo.houseno,\n zip: pudo.zip,\n city: pudo.city,\n countryCode: pudo.countryCode,\n maxweight: pudo.maxWeightInKg,\n cod: pudo.services && pudo.services.includes('cod') ? true : false,\n card: pudo.services && pudo.services.includes('cardPayment') ? true : false,\n isEligibleForAlzabox: isEligibleForAlzabox,\n isEligibleForSlovenskaPostaBox: isEligibleForSlovenskaPostaBox\n });\n closePopup();\n })[\"catch\"](function (code) {\n closePopup();\n });\n }\n }\n\n /**\r\n * Close the popup\r\n */\n function closePopup() {\n popup.classList.remove('active');\n\n // Check if close method exists\n if (dpdMapWidget && dpdMapWidget.close) {\n dpdMapWidget.close();\n }\n }\n\n /**\r\n * Check if a parcel shop is chosen\r\n */\n function isParcelShopChosen() {\n var chosenParcelShopId = document.querySelector(chosenParcelShopHiddenParcelIdSelector).value;\n return chosenParcelShopId !== '';\n }\n\n /**\r\n * Get customer zip\r\n */\n function getCustomerZip() {\n // Check if ship to different address is checked\n var shipToDifferentAddress = document.querySelector('input[name=\"ship_to_different_address\"]');\n if (shipToDifferentAddress && shipToDifferentAddress.checked) {\n var shippingPostcodeField = document.querySelector('input[name=\"shipping_postcode\"]');\n if (shippingPostcodeField) {\n customerZip = shippingPostcodeField.value;\n }\n if (customerZip) {\n return customerZip;\n }\n }\n var billingPostcodeField = document.querySelector('input[name=\"billing_postcode\"]');\n if (billingPostcodeField) {\n customerZip = billingPostcodeField.value;\n }\n if (customerZip) {\n return customerZip;\n }\n customerZip = dpdMapOpenWidgetMapPopupEl.getAttribute('data-customer-zip');\n if (customerZip) {\n return customerZip;\n }\n return '';\n }\n\n /**\r\n * Check if document is ready\r\n */\n function docReady(fn) {\n if (document.readyState === 'complete' || document.readyState === 'interactive') {\n setTimeout(fn, 1);\n } else {\n document.addEventListener('DOMContentLoaded', fn);\n }\n }\n docReady(function () {\n init();\n });\n\n // Allow the functions to be called from outside\n return {\n openPopup: openPopup\n };\n}();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ3aW5kb3ciLCJkcGRQYXJjZWxTaG9wV2lkZ2V0IiwibWFwV2lkZ2V0UG9wdXBTZWxlY3RvciIsInBvcHVwIiwiZHBkTWFwV2lkZ2V0IiwibWFwV2lkZ2V0UG9wdXBDb250YWluZXJTZWxlY3RvciIsIm1hcFdpZGdldFBvcHVwT3BlbkJ0blNlbGVjdG9yIiwiY2hvc2VuUGFyY2VsU2hvcENvbnRlbnRTZWxlY3RvciIsImNob3NlblBhcmNlbFNob3BDb250ZW50VGV4dFNlbGVjdG9yIiwiY2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbElkU2VsZWN0b3IiLCJjaG9zZW5QYXJjZWxTaG9wSGlkZGVuUGFyY2VsUHVzSWRTZWxlY3RvciIsImNob3NlblBhcmNlbFNob3BIaWRkZW5QYXJjZWxOYW1lU2VsZWN0b3IiLCJjaG9zZW5QYXJjZWxTaG9wSGlkZGVuUGFyY2VsU3RyZWV0U2VsZWN0b3IiLCJjaG9zZW5QYXJjZWxTaG9wSGlkZGVuUGFyY2VsQ2l0eVNlbGVjdG9yIiwiY2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbFppcFNlbGVjdG9yIiwiY2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbENvdW50cnlDb2RlU2VsZWN0b3IiLCJkcGRNYXBXaWRnZXRFbCIsImN1c3RvbWVyWmlwIiwiY291bnRyaWVzIiwiYmFzZUNvdW50cnlDb2RlIiwiaXNNYXBJbml0aWFsaXplZCIsImluaXQiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJhZGRFdmVudExpc3RlbmVyIiwiZXZlbnQiLCJ0YXJnZXQiLCJtYXRjaGVzIiwicHJldmVudERlZmF1bHQiLCJkcGRNYXBPcGVuV2lkZ2V0TWFwUG9wdXBFbCIsImNsb3Nlc3QiLCJpbml0TWFwIiwib3BlblBvcHVwIiwiY2xvc2VQb3B1cCIsImtleSIsImlzUGFyY2VsU2hvcENob3NlbiIsImJvZHkiLCJkaXNwYXRjaEV2ZW50IiwiRXZlbnQiLCJhcGlLZXkiLCJnZXRBdHRyaWJ1dGUiLCJjb25zb2xlIiwibG9nIiwiSlNPTiIsInBhcnNlIiwiYWxsb3dlZENvdW50cmllcyIsImpvaW4iLCJEcGRQdWRvIiwiV2lkZ2V0IiwiY291bnRyeSIsInNldFNlbGVjdGVkUGFyY2VsU2hvcCIsImRhdGEiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJPYmplY3QiLCJrZXlzIiwicGFyY2VsU2hvcElkIiwiaGFzT3duUHJvcGVydHkiLCJpZCIsInBhcmNlbFNob3BQdXNJZCIsInBhcmNlbFNob3BOYW1lIiwibmFtZSIsInBhcmNlbFNob3BTdHJlZXQiLCJzdHJlZXQiLCJwYXJjZWxTaG9wWmlwIiwiemlwIiwicGFyY2VsU2hvcENpdHkiLCJjaXR5IiwicGFyY2VsU2hvcENvdW50cnlDb2RlIiwiY291bnRyeUNvZGUiLCJwYXJjZWxTaG9wTWF4V2VpZ2h0IiwibWF4d2VpZ2h0IiwicGFyY2VsU2hvcENvZCIsImNvZCIsInBhcmNlbFNob3BDYXJkIiwiY2FyZCIsImlzRWxpZ2libGVGb3JBbHphYm94IiwiaXNFbGlnaWJsZUZvclNsb3ZlbnNrYVBvc3RhQm94Iiwic2V0U2VsZWN0ZWRQYXJjZWxTaG9wU2Vzc2lvbiIsInBhcmNlbFNob3BDb3VudHJ5IiwiX3R5cGVvZiIsInZhbHVlIiwibm90RW1wdHlBZGRyZXNzVmFsdWVzIiwidmFsdWVzIiwiZmlsdGVyIiwiaW5uZXJIVE1MIiwiY2xhc3NMaXN0IiwiYWRkIiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwid2NfZHBkX3BhcmNlbHNob3BfbWFwX3dpZGdldF9zZXR0aW5ncyIsImFqYXhfdXJsIiwic2V0UmVxdWVzdEhlYWRlciIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsIkRPTkUiLCJPSyIsInJlYWR5U3RhdGUiLCJzdGF0dXMiLCJzZW5kIiwiY2hvc2VuUGFyY2VsU2hvcElkIiwib3B0aW9ucyIsInNlbGVjdGVkUHVkb0lkIiwiZ2V0Q3VzdG9tZXJaaXAiLCJtaW5XZWlnaHRJbktnIiwicGFyc2VJbnQiLCJkaXNhbGxvd1Nob3BzIiwiZGlzYWxsb3dMb2NrZXJzIiwiZGlzYWxsb3dEcGRQaWNrdXBTdGF0aW9ucyIsImRpc2FsbG93U2tQb3N0IiwiZGlzYWxsb3dBbHphQm94ZXMiLCJhbGxvd2VkUHVkb1R5cGVzIiwidHlwZSIsImFsbG93ZWRMb2NrZXJUeXBlcyIsInJlcXVpcmVkU2VydmljZXMiLCJpc0NvZFJlcXVpcmVkIiwiaXNDYXJkUGF5bWVudFJlcXVpcmVkIiwicHVzaCIsImF0dGFjaCIsInRoZW4iLCJwdWRvIiwiaG91c2VubyIsIm1heFdlaWdodEluS2ciLCJzZXJ2aWNlcyIsImluY2x1ZGVzIiwiY29kZSIsInJlbW92ZSIsImNsb3NlIiwic2hpcFRvRGlmZmVyZW50QWRkcmVzcyIsImNoZWNrZWQiLCJzaGlwcGluZ1Bvc3Rjb2RlRmllbGQiLCJiaWxsaW5nUG9zdGNvZGVGaWVsZCIsImRvY1JlYWR5IiwiZm4iLCJzZXRUaW1lb3V0Il0sInNvdXJjZXMiOlsid2VicGFjazovLy8uL2Fzc2V0cy9zY3JpcHRzL2RwZC1wYXJjZWxzaG9wLW1hcC13aWRnZXQuanM/NTcwNyJdLCJzb3VyY2VzQ29udGVudCI6WyJ3aW5kb3cuZHBkUGFyY2VsU2hvcFdpZGdldCA9IChmdW5jdGlvbiAoKSB7XHJcblx0dmFyIG1hcFdpZGdldFBvcHVwU2VsZWN0b3IsXHJcblx0XHRwb3B1cCxcclxuXHRcdGRwZE1hcFdpZGdldCxcclxuXHRcdG1hcFdpZGdldFBvcHVwQ29udGFpbmVyU2VsZWN0b3IsXHJcblx0XHRtYXBXaWRnZXRQb3B1cE9wZW5CdG5TZWxlY3RvcixcclxuXHRcdGNob3NlblBhcmNlbFNob3BDb250ZW50U2VsZWN0b3IsXHJcblx0XHRjaG9zZW5QYXJjZWxTaG9wQ29udGVudFRleHRTZWxlY3RvcixcclxuXHRcdGNob3NlblBhcmNlbFNob3BIaWRkZW5QYXJjZWxJZFNlbGVjdG9yLFxyXG5cdFx0Y2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbFB1c0lkU2VsZWN0b3IsXHJcblx0XHRjaG9zZW5QYXJjZWxTaG9wSGlkZGVuUGFyY2VsTmFtZVNlbGVjdG9yLFxyXG5cdFx0Y2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbFN0cmVldFNlbGVjdG9yLFxyXG5cdFx0Y2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbENpdHlTZWxlY3RvcixcclxuXHRcdGNob3NlblBhcmNlbFNob3BIaWRkZW5QYXJjZWxaaXBTZWxlY3RvcixcclxuXHRcdGNob3NlblBhcmNlbFNob3BIaWRkZW5QYXJjZWxDb3VudHJ5Q29kZVNlbGVjdG9yLFxyXG5cdFx0ZHBkTWFwV2lkZ2V0RWwsXHJcblx0XHRjdXN0b21lclppcCxcclxuXHRcdGNvdW50cmllcyxcclxuXHRcdGJhc2VDb3VudHJ5Q29kZSxcclxuXHRcdGlzTWFwSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuXHJcblx0ZnVuY3Rpb24gaW5pdCgpIHtcclxuXHRcdG1hcFdpZGdldFBvcHVwT3BlbkJ0blNlbGVjdG9yID1cclxuXHRcdFx0Jy5qcy1kcGQtcGFyY2Vsc2hvcC1tYXAtd2lkZ2V0LW9wZW4tcG9wdXAtYnRuJztcclxuXHJcblx0XHRtYXBXaWRnZXRQb3B1cFNlbGVjdG9yID0gJy5qcy1kcGQtcGFyY2Vsc2hvcC1tYXAtd2lkZ2V0LXBvcHVwJztcclxuXHJcblx0XHRtYXBXaWRnZXRQb3B1cENvbnRhaW5lclNlbGVjdG9yID1cclxuXHRcdFx0Jy5qcy1kcGQtcGFyY2Vsc2hvcC1tYXAtd2lkZ2V0LXBvcHVwLWNvbnRhaW5lcic7XHJcblxyXG5cdFx0Y2hvc2VuUGFyY2VsU2hvcENvbnRlbnRTZWxlY3RvciA9ICcuanMtZHBkLWNob3Nlbi1wYXJjZWxzaG9wLWNvbnRlbnQnO1xyXG5cdFx0Y2hvc2VuUGFyY2VsU2hvcENvbnRlbnRUZXh0U2VsZWN0b3IgPVxyXG5cdFx0XHQnLmpzLWRwZC1jaG9zZW4tcGFyY2Vsc2hvcC1jaG9zZW4tcGFyY2Vsc2hvcC10ZXh0JztcclxuXHRcdGNob3NlblBhcmNlbFNob3BIaWRkZW5QYXJjZWxJZFNlbGVjdG9yID1cclxuXHRcdFx0Jy5qcy1kcGQtcGFyY2Vsc2hvcC1oaWRkZW4tcGFyY2Vsc2hvcC1pZCc7XHJcblx0XHRjaG9zZW5QYXJjZWxTaG9wSGlkZGVuUGFyY2VsUHVzSWRTZWxlY3RvciA9XHJcblx0XHRcdCcuanMtZHBkLXBhcmNlbHNob3AtaGlkZGVuLXBhcmNlbHNob3AtcHVzLWlkJztcclxuXHRcdGNob3NlblBhcmNlbFNob3BIaWRkZW5QYXJjZWxOYW1lU2VsZWN0b3IgPVxyXG5cdFx0XHQnLmpzLWRwZC1wYXJjZWxzaG9wLWhpZGRlbi1wYXJjZWxzaG9wLW5hbWUnO1xyXG5cdFx0Y2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbFN0cmVldFNlbGVjdG9yID1cclxuXHRcdFx0Jy5qcy1kcGQtcGFyY2Vsc2hvcC1oaWRkZW4tcGFyY2Vsc2hvcC1zdHJlZXQnO1xyXG5cdFx0Y2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbENpdHlTZWxlY3RvciA9XHJcblx0XHRcdCcuanMtZHBkLXBhcmNlbHNob3AtaGlkZGVuLXBhcmNlbHNob3AtY2l0eSc7XHJcblx0XHRjaG9zZW5QYXJjZWxTaG9wSGlkZGVuUGFyY2VsWmlwU2VsZWN0b3IgPVxyXG5cdFx0XHQnLmpzLWRwZC1wYXJjZWxzaG9wLWhpZGRlbi1wYXJjZWxzaG9wLXppcCc7XHJcblx0XHRjaG9zZW5QYXJjZWxTaG9wSGlkZGVuUGFyY2VsQ291bnRyeUNvZGVTZWxlY3RvciA9XHJcblx0XHRcdCcuanMtZHBkLXBhcmNlbHNob3AtaGlkZGVuLXBhcmNlbHNob3AtY291bnRyeS1jb2RlJztcclxuXHJcblx0XHRwb3B1cCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IobWFwV2lkZ2V0UG9wdXBTZWxlY3Rvcik7XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBPcGVuIHRoZSBwb3B1cCB3aGVuIHRoZSB1c2VyIGNsaWNrcyB0aGUgb3BlbiBidXR0b25cclxuXHRcdCAqL1xyXG5cdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcclxuXHRcdFx0J2NsaWNrJyxcclxuXHRcdFx0ZnVuY3Rpb24gKGV2ZW50KSB7XHJcblx0XHRcdFx0aWYgKCFldmVudC50YXJnZXQubWF0Y2hlcyhtYXBXaWRnZXRQb3B1cE9wZW5CdG5TZWxlY3RvcikpIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG5cdFx0XHRcdC8vIEZldGNoIHRoZSBkcGRNYXBXaWRnZXRFbCBlbGVtZW50IGR5bmFtaWNhbGx5XHJcblx0XHRcdFx0ZHBkTWFwV2lkZ2V0RWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG5cdFx0XHRcdFx0Jy5qcy1kcGQtcGFyY2Vsc2hvcC1tYXAtd2lkZ2V0LXBvcHVwLWVtYmVkJ1xyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdGlmICghZHBkTWFwV2lkZ2V0RWwpIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIEZldGNoIHRoZSBkcGRNYXBPcGVuV2lkZ2V0TWFwUG9wdXBFbCBlbGVtZW50IGR5bmFtaWNhbGx5XHJcblx0XHRcdFx0ZHBkTWFwT3BlbldpZGdldE1hcFBvcHVwRWwgPSBldmVudC50YXJnZXQuY2xvc2VzdChcclxuXHRcdFx0XHRcdG1hcFdpZGdldFBvcHVwT3BlbkJ0blNlbGVjdG9yXHJcblx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0aWYgKCFkcGRNYXBPcGVuV2lkZ2V0TWFwUG9wdXBFbCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aW5pdE1hcCgpO1xyXG5cdFx0XHRcdG9wZW5Qb3B1cCgpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRmYWxzZVxyXG5cdFx0KTtcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIENsb3NlIHRoZSBwb3B1cCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBvdXRzaWRlIG9mIGl0XHJcblx0XHQgKi9cclxuXHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXHJcblx0XHRcdCdjbGljaycsXHJcblx0XHRcdGZ1bmN0aW9uIChldmVudCkge1xyXG5cdFx0XHRcdGlmICghZXZlbnQudGFyZ2V0Lm1hdGNoZXMobWFwV2lkZ2V0UG9wdXBDb250YWluZXJTZWxlY3RvcikpIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG5cdFx0XHRcdGNsb3NlUG9wdXAoKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0ZmFsc2VcclxuXHRcdCk7XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBDbG9zZSB0aGUgcG9wdXAgd2hlbiB0aGUgZXNjYXBlIGtleSBpcyBwcmVzc2VkXHJcblx0XHQgKi9cclxuXHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXHJcblx0XHRcdCdrZXlkb3duJyxcclxuXHRcdFx0ZnVuY3Rpb24gKGV2ZW50KSB7XHJcblx0XHRcdFx0aWYgKGV2ZW50LmtleSAhPT0gJ0VzY2FwZScpIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGNsb3NlUG9wdXAoKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0ZmFsc2VcclxuXHRcdCk7XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBUcmlnZ2VyIHRoZSB1cGRhdGVfY2hlY2tvdXQgZXZlbnQgd2hlbiB0aGUgcGF5bWVudCBtZXRob2QgaXMgY2hhbmdlZCBhbmQgYSBwYXJjZWwgc2hvcCBpcyBjaG9zZW5cclxuXHRcdCAqL1xyXG5cdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcclxuXHRcdFx0J2NoYW5nZScsXHJcblx0XHRcdGZ1bmN0aW9uIChldmVudCkge1xyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdGV2ZW50LnRhcmdldCAmJlxyXG5cdFx0XHRcdFx0ZXZlbnQudGFyZ2V0Lm1hdGNoZXMoJ2lucHV0W25hbWU9XCJwYXltZW50X21ldGhvZFwiXScpXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHQvLyBDaGVjayBpZiBhIHBhcmNlbCBzaG9wIGlzIGNob3NlblxyXG5cdFx0XHRcdFx0aWYgKGlzUGFyY2VsU2hvcENob3NlbigpKSB7XHJcblx0XHRcdFx0XHRcdC8vIFRyaWdnZXIgdGhlIHVwZGF0ZV9jaGVja291dCBldmVudFxyXG5cdFx0XHRcdFx0XHRkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCd1cGRhdGVfY2hlY2tvdXQnKSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRmYWxzZVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEluaXRpYWxpemUgdGhlIG1hcFxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIGluaXRNYXAoKSB7XHJcblx0XHRpZiAoaXNNYXBJbml0aWFsaXplZCkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgYXBpS2V5ID0gZHBkTWFwV2lkZ2V0RWwuZ2V0QXR0cmlidXRlKCdkYXRhLWFwaS1rZXknKTtcclxuXHJcblx0XHRpZiAoIWFwaUtleSkge1xyXG5cdFx0XHRjb25zb2xlLmxvZygnTWFwIEFwaSBrZXkgaXMgbWlzc2luZycpO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Y291bnRyaWVzID0gSlNPTi5wYXJzZShcclxuXHRcdFx0ZHBkTWFwT3BlbldpZGdldE1hcFBvcHVwRWwuZ2V0QXR0cmlidXRlKCdkYXRhLWNvdW50cmllcycpXHJcblx0XHQpO1xyXG5cdFx0YWxsb3dlZENvdW50cmllcyA9IEpTT04ucGFyc2UoXHJcblx0XHRcdGRwZE1hcE9wZW5XaWRnZXRNYXBQb3B1cEVsLmdldEF0dHJpYnV0ZSgnZGF0YS1hbGxvd2VkLWNvdW50cmllcycpXHJcblx0XHQpO1xyXG5cdFx0YWxsb3dlZENvdW50cmllcyA9IGFsbG93ZWRDb3VudHJpZXMuam9pbignLCcpO1xyXG5cdFx0YmFzZUNvdW50cnlDb2RlID0gZHBkTWFwT3BlbldpZGdldE1hcFBvcHVwRWwuZ2V0QXR0cmlidXRlKFxyXG5cdFx0XHQnZGF0YS1iYXNlLWNvdW50cnktY29kZSdcclxuXHRcdCk7XHJcblxyXG5cdFx0ZHBkTWFwV2lkZ2V0ID0gbmV3IERwZFB1ZG8uV2lkZ2V0KHtcclxuXHRcdFx0YXBpS2V5OiBhcGlLZXksXHJcblx0XHRcdGNvdW50cnk6IGJhc2VDb3VudHJ5Q29kZSxcclxuXHRcdFx0YWxsb3dlZENvdW50cmllczogW2FsbG93ZWRDb3VudHJpZXNdLFxyXG5cdFx0fSk7XHJcblxyXG5cdFx0aXNNYXBJbml0aWFsaXplZCA9IHRydWU7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTZXQgdGhlIHNlbGVjdGVkIHBhcmNlbCBzaG9wIGluIHRoZSBzZXNzaW9uIGFuZCB1cGRhdGUgdGhlIGZyb250ZW5kIGZpZWxkXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gc2V0U2VsZWN0ZWRQYXJjZWxTaG9wKGRhdGEgPSB7fSkge1xyXG5cdFx0aWYgKCFkYXRhIHx8IE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aCA9PT0gMCkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgcGFyY2VsU2hvcElkID0gZGF0YS5oYXNPd25Qcm9wZXJ0eSgnaWQnKSA/IGRhdGEuaWQgOiBudWxsO1xyXG5cdFx0Y29uc3QgcGFyY2VsU2hvcFB1c0lkID0gZGF0YS5oYXNPd25Qcm9wZXJ0eSgnaWQnKSA/IGRhdGEuaWQgOiBudWxsO1xyXG5cdFx0Y29uc3QgcGFyY2VsU2hvcE5hbWUgPSBkYXRhLmhhc093blByb3BlcnR5KCduYW1lJykgPyBkYXRhLm5hbWUgOiBudWxsO1xyXG5cdFx0Y29uc3QgcGFyY2VsU2hvcFN0cmVldCA9IGRhdGEuaGFzT3duUHJvcGVydHkoJ3N0cmVldCcpID8gZGF0YS5zdHJlZXQgOiBudWxsO1xyXG5cdFx0Y29uc3QgcGFyY2VsU2hvcFppcCA9IGRhdGEuaGFzT3duUHJvcGVydHkoJ3ppcCcpID8gZGF0YS56aXAgOiBudWxsO1xyXG5cdFx0Y29uc3QgcGFyY2VsU2hvcENpdHkgPSBkYXRhLmhhc093blByb3BlcnR5KCdjaXR5JykgPyBkYXRhLmNpdHkgOiBudWxsO1xyXG5cdFx0Y29uc3QgcGFyY2VsU2hvcENvdW50cnlDb2RlID0gZGF0YS5oYXNPd25Qcm9wZXJ0eSgnY291bnRyeUNvZGUnKVxyXG5cdFx0XHQ/IGRhdGEuY291bnRyeUNvZGVcclxuXHRcdFx0OiBudWxsO1xyXG5cdFx0Y29uc3QgcGFyY2VsU2hvcE1heFdlaWdodCA9IGRhdGEuaGFzT3duUHJvcGVydHkoJ21heHdlaWdodCcpXHJcblx0XHRcdD8gZGF0YS5tYXh3ZWlnaHRcclxuXHRcdFx0OiBudWxsO1xyXG5cdFx0Y29uc3QgcGFyY2VsU2hvcENvZCA9IGRhdGEuaGFzT3duUHJvcGVydHkoJ2NvZCcpID8gZGF0YS5jb2QgOiBudWxsO1xyXG5cdFx0Y29uc3QgcGFyY2VsU2hvcENhcmQgPSBkYXRhLmhhc093blByb3BlcnR5KCdjYXJkJykgPyBkYXRhLmNhcmQgOiBudWxsO1xyXG5cdFx0Y29uc3QgaXNFbGlnaWJsZUZvckFsemFib3ggPSBkYXRhLmhhc093blByb3BlcnR5KCdpc0VsaWdpYmxlRm9yQWx6YWJveCcpXHJcblx0XHRcdD8gZGF0YS5pc0VsaWdpYmxlRm9yQWx6YWJveFxyXG5cdFx0XHQ6IG51bGw7XHJcblx0XHRjb25zdCBpc0VsaWdpYmxlRm9yU2xvdmVuc2thUG9zdGFCb3ggPSBkYXRhLmhhc093blByb3BlcnR5KFxyXG5cdFx0XHQnaXNFbGlnaWJsZUZvclNsb3ZlbnNrYVBvc3RhQm94J1xyXG5cdFx0KVxyXG5cdFx0XHQ/IGRhdGEuaXNFbGlnaWJsZUZvclNsb3ZlbnNrYVBvc3RhQm94XHJcblx0XHRcdDogbnVsbDtcclxuXHJcblx0XHQvLyBVcGRhdGUgc2Vzc2lvblxyXG5cdFx0c2V0U2VsZWN0ZWRQYXJjZWxTaG9wU2Vzc2lvbihcclxuXHRcdFx0cGFyY2VsU2hvcElkLFxyXG5cdFx0XHRwYXJjZWxTaG9wUHVzSWQsXHJcblx0XHRcdHBhcmNlbFNob3BOYW1lLFxyXG5cdFx0XHRwYXJjZWxTaG9wU3RyZWV0LFxyXG5cdFx0XHRwYXJjZWxTaG9wWmlwLFxyXG5cdFx0XHRwYXJjZWxTaG9wQ2l0eSxcclxuXHRcdFx0cGFyY2VsU2hvcENvdW50cnlDb2RlLFxyXG5cdFx0XHRwYXJjZWxTaG9wTWF4V2VpZ2h0LFxyXG5cdFx0XHRwYXJjZWxTaG9wQ29kLFxyXG5cdFx0XHRwYXJjZWxTaG9wQ2FyZCxcclxuXHRcdFx0aXNFbGlnaWJsZUZvckFsemFib3gsXHJcblx0XHRcdGlzRWxpZ2libGVGb3JTbG92ZW5za2FQb3N0YUJveFxyXG5cdFx0KTtcclxuXHJcblx0XHRjb25zdCBwYXJjZWxTaG9wQ291bnRyeSA9XHJcblx0XHRcdGNvdW50cmllcyAmJlxyXG5cdFx0XHR0eXBlb2YgY291bnRyaWVzID09PSAnb2JqZWN0JyAmJlxyXG5cdFx0XHRjb3VudHJpZXMuaGFzT3duUHJvcGVydHkocGFyY2VsU2hvcENvdW50cnlDb2RlKVxyXG5cdFx0XHRcdD8gY291bnRyaWVzW3BhcmNlbFNob3BDb3VudHJ5Q29kZV1cclxuXHRcdFx0XHQ6IHBhcmNlbFNob3BDb3VudHJ5Q29kZTtcclxuXHJcblx0XHQvLyBVcGRhdGUgZnJvbnRlbmQgZmllbGRcclxuXHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoY2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbElkU2VsZWN0b3IpLnZhbHVlID1cclxuXHRcdFx0cGFyY2VsU2hvcElkO1xyXG5cdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihjaG9zZW5QYXJjZWxTaG9wSGlkZGVuUGFyY2VsUHVzSWRTZWxlY3RvcikudmFsdWUgPVxyXG5cdFx0XHRwYXJjZWxTaG9wUHVzSWQ7XHJcblx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGNob3NlblBhcmNlbFNob3BIaWRkZW5QYXJjZWxOYW1lU2VsZWN0b3IpLnZhbHVlID1cclxuXHRcdFx0cGFyY2VsU2hvcE5hbWU7XHJcblx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGNob3NlblBhcmNlbFNob3BIaWRkZW5QYXJjZWxTdHJlZXRTZWxlY3RvcikudmFsdWUgPVxyXG5cdFx0XHRwYXJjZWxTaG9wU3RyZWV0O1xyXG5cdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihjaG9zZW5QYXJjZWxTaG9wSGlkZGVuUGFyY2VsWmlwU2VsZWN0b3IpLnZhbHVlID1cclxuXHRcdFx0cGFyY2VsU2hvcFppcDtcclxuXHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoY2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbENpdHlTZWxlY3RvcikudmFsdWUgPVxyXG5cdFx0XHRwYXJjZWxTaG9wQ2l0eTtcclxuXHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcblx0XHRcdGNob3NlblBhcmNlbFNob3BIaWRkZW5QYXJjZWxDb3VudHJ5Q29kZVNlbGVjdG9yXHJcblx0XHQpLnZhbHVlID0gcGFyY2VsU2hvcENvdW50cnlDb2RlO1xyXG5cclxuXHRcdC8vIEZpbHRlciBvdXQgZW1wdHkgdmFsdWVzXHJcblx0XHRjb25zdCBub3RFbXB0eUFkZHJlc3NWYWx1ZXMgPSBPYmplY3QudmFsdWVzKFtcclxuXHRcdFx0cGFyY2VsU2hvcE5hbWUsXHJcblx0XHRcdHBhcmNlbFNob3BTdHJlZXQsXHJcblx0XHRcdHBhcmNlbFNob3BaaXAsXHJcblx0XHRcdHBhcmNlbFNob3BDaXR5LFxyXG5cdFx0XHRwYXJjZWxTaG9wQ291bnRyeSxcclxuXHRcdF0pLmZpbHRlcigodmFsdWUpID0+ICEhdmFsdWUpO1xyXG5cclxuXHRcdC8vIENvbnN0cnVjdCB0aGUgdGV4dCBjb250ZW50XHJcblx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGNob3NlblBhcmNlbFNob3BDb250ZW50VGV4dFNlbGVjdG9yKS5pbm5lckhUTUwgPVxyXG5cdFx0XHRub3RFbXB0eUFkZHJlc3NWYWx1ZXMuam9pbignLCAnKTtcclxuXHJcblx0XHRkb2N1bWVudFxyXG5cdFx0XHQucXVlcnlTZWxlY3RvcihjaG9zZW5QYXJjZWxTaG9wQ29udGVudFNlbGVjdG9yKVxyXG5cdFx0XHQuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTZXQgdGhlIHNlbGVjdGVkIHBhcmNlbCBzaG9wIGluIHRoZSBzZXNzaW9uXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gc2V0U2VsZWN0ZWRQYXJjZWxTaG9wU2Vzc2lvbihcclxuXHRcdHBhcmNlbFNob3BJZCA9ICcnLFxyXG5cdFx0cGFyY2VsU2hvcFB1c0lkID0gJycsXHJcblx0XHRwYXJjZWxTaG9wTmFtZSA9ICcnLFxyXG5cdFx0cGFyY2VsU2hvcFN0cmVldCA9ICcnLFxyXG5cdFx0cGFyY2VsU2hvcFppcCA9ICcnLFxyXG5cdFx0cGFyY2VsU2hvcENpdHkgPSAnJyxcclxuXHRcdHBhcmNlbFNob3BDb3VudHJ5Q29kZSA9ICcnLFxyXG5cdFx0cGFyY2VsU2hvcE1heFdlaWdodCA9ICcnLFxyXG5cdFx0cGFyY2VsU2hvcENvZCA9ICcnLFxyXG5cdFx0cGFyY2VsU2hvcENhcmQgPSAnJyxcclxuXHRcdGlzRWxpZ2libGVGb3JBbHphYm94ID0gdHJ1ZSxcclxuXHRcdGlzRWxpZ2libGVGb3JTbG92ZW5za2FQb3N0YUJveCA9IHRydWVcclxuXHQpIHtcclxuXHRcdC8vIFByZXBhcmUgWEhSIFJlcXVlc3QuXHJcblx0XHR2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcblx0XHR4aHIub3BlbignUE9TVCcsIHdjX2RwZF9wYXJjZWxzaG9wX21hcF93aWRnZXRfc2V0dGluZ3MuYWpheF91cmwsIHRydWUpO1xyXG5cdFx0eGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKTtcclxuXHJcblx0XHQvLyBDYWxsYmFjayBvbiByZXNwb25zZS5cclxuXHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdC8vIHJlYWR5U3RhdGUgNCBtZWFucyB0aGUgcmVxdWVzdCBpcyBkb25lLlxyXG5cdFx0XHR2YXIgRE9ORSA9IDQ7XHJcblxyXG5cdFx0XHQvLyBzdGF0dXMgMjAwIGlzIGEgc3VjY2Vzc2Z1bCByZXR1cm4uXHJcblx0XHRcdHZhciBPSyA9IDIwMDtcclxuXHJcblx0XHRcdC8vIENoZWNrIHJlc3BvbnNlLlxyXG5cdFx0XHRpZiAoeGhyLnJlYWR5U3RhdGUgPT09IERPTkUpIHtcclxuXHRcdFx0XHRpZiAoeGhyLnN0YXR1cyA9PT0gT0spIHtcclxuXHRcdFx0XHRcdGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ3VwZGF0ZV9jaGVja291dCcpKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH07XHJcblxyXG5cdFx0Ly8gRmluYWxseSBkbyB0aGUgY2FsbCB3aXRoIHRoZSByaWdodCBwYXJhbWV0ZXRycy5cclxuXHRcdHhoci5zZW5kKFxyXG5cdFx0XHQnYWN0aW9uPXdjX2RwZF91cGRhdGVfY2hvc2VuX3BhcmNlbHNob3Amd3Bfbm9uY2U9JyArXHJcblx0XHRcdFx0cG9wdXAuZ2V0QXR0cmlidXRlKCdkYXRhLW5vbmNlJykgK1xyXG5cdFx0XHRcdCcmd2NfZHBkX3BhcmNlbHNob3BfaWQ9JyArXHJcblx0XHRcdFx0cGFyY2VsU2hvcElkICtcclxuXHRcdFx0XHQnJndjX2RwZF9wYXJjZWxzaG9wX3B1c19pZD0nICtcclxuXHRcdFx0XHRwYXJjZWxTaG9wUHVzSWQgK1xyXG5cdFx0XHRcdCcmd2NfZHBkX3BhcmNlbHNob3BfbmFtZT0nICtcclxuXHRcdFx0XHRwYXJjZWxTaG9wTmFtZSArXHJcblx0XHRcdFx0JyZ3Y19kcGRfcGFyY2Vsc2hvcF9zdHJlZXQ9JyArXHJcblx0XHRcdFx0cGFyY2VsU2hvcFN0cmVldCArXHJcblx0XHRcdFx0JyZ3Y19kcGRfcGFyY2Vsc2hvcF96aXA9JyArXHJcblx0XHRcdFx0cGFyY2VsU2hvcFppcCArXHJcblx0XHRcdFx0JyZ3Y19kcGRfcGFyY2Vsc2hvcF9jaXR5PScgK1xyXG5cdFx0XHRcdHBhcmNlbFNob3BDaXR5ICtcclxuXHRcdFx0XHQnJndjX2RwZF9wYXJjZWxzaG9wX2NvdW50cnlfY29kZT0nICtcclxuXHRcdFx0XHRwYXJjZWxTaG9wQ291bnRyeUNvZGUgK1xyXG5cdFx0XHRcdCcmd2NfZHBkX3BhcmNlbHNob3BfbWF4X3dlaWdodD0nICtcclxuXHRcdFx0XHRwYXJjZWxTaG9wTWF4V2VpZ2h0ICtcclxuXHRcdFx0XHQnJndjX2RwZF9wYXJjZWxzaG9wX2NvZD0nICtcclxuXHRcdFx0XHRwYXJjZWxTaG9wQ29kICtcclxuXHRcdFx0XHQnJndjX2RwZF9wYXJjZWxzaG9wX2NhcmQ9JyArXHJcblx0XHRcdFx0cGFyY2VsU2hvcENhcmQgK1xyXG5cdFx0XHRcdCcmd2NfZHBkX3BhcmNlbHNob3BfaXNfYWx6YWJveF9lbGlnaWJsZT0nICtcclxuXHRcdFx0XHRpc0VsaWdpYmxlRm9yQWx6YWJveCArXHJcblx0XHRcdFx0JyZ3Y19kcGRfcGFyY2Vsc2hvcF9pc19zbG92ZW5za2FfcG9zdGFfZWxpZ2libGU9JyArXHJcblx0XHRcdFx0aXNFbGlnaWJsZUZvclNsb3ZlbnNrYVBvc3RhQm94XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogT3BlbiB0aGUgcG9wdXBcclxuXHQgKi9cclxuXHRmdW5jdGlvbiBvcGVuUG9wdXAoKSB7XHJcblx0XHRwb3B1cC5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcclxuXHJcblx0XHRpZiAoZHBkTWFwV2lkZ2V0RWwgJiYgZHBkTWFwV2lkZ2V0KSB7XHJcblx0XHRcdGNvbnN0IGNob3NlblBhcmNlbFNob3BJZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcblx0XHRcdFx0Y2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbElkU2VsZWN0b3JcclxuXHRcdFx0KS52YWx1ZTtcclxuXHJcblx0XHRcdGlmIChjaG9zZW5QYXJjZWxTaG9wSWQpIHtcclxuXHRcdFx0XHRkcGRNYXBXaWRnZXQub3B0aW9ucy5zZWxlY3RlZFB1ZG9JZCA9IGNob3NlblBhcmNlbFNob3BJZDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gUmVzZWxlY3Qgb3BlbiBidXR0b24gdG8gZ2V0IHJlZnJlc2hlZCBkYXRhXHJcblx0XHRcdGRwZE1hcE9wZW5XaWRnZXRNYXBQb3B1cEVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcclxuXHRcdFx0XHRtYXBXaWRnZXRQb3B1cE9wZW5CdG5TZWxlY3RvclxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0Ly8gQWRkIHppcCBpZiBhdmFpbGFibGVcclxuXHRcdFx0Y3VzdG9tZXJaaXAgPSBnZXRDdXN0b21lclppcCgpO1xyXG5cclxuXHRcdFx0aWYgKGN1c3RvbWVyWmlwKSB7XHJcblx0XHRcdFx0ZHBkTWFwV2lkZ2V0Lm9wdGlvbnMuemlwID0gY3VzdG9tZXJaaXA7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEdldCB0aGUgc2VsZWN0ZWQgY3VzdG9tZXIgY291bnRyeVxyXG5cdFx0XHRjb25zdCBjb3VudHJ5Q29kZSA9IGRwZE1hcE9wZW5XaWRnZXRNYXBQb3B1cEVsLmdldEF0dHJpYnV0ZShcclxuXHRcdFx0XHQnZGF0YS1iYXNlLWNvdW50cnktY29kZSdcclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdGlmIChjb3VudHJ5Q29kZSkge1xyXG5cdFx0XHRcdGRwZE1hcFdpZGdldC5vcHRpb25zLmNvdW50cnkgPSBjb3VudHJ5Q29kZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gVXBkYXRlIHdlaWdodCBhbmQgYWxsb3dlZCBsb2NrZXIgdHlwZXMgd2hlbiBvcGVuaW5nIHRoZSBwb3B1cFxyXG5cdFx0XHRjb25zdCBtaW5XZWlnaHRJbktnID0gcGFyc2VJbnQoXHJcblx0XHRcdFx0ZHBkTWFwT3BlbldpZGdldE1hcFBvcHVwRWwuZ2V0QXR0cmlidXRlKCdkYXRhLW1pbi13ZWlnaHQtaW4ta2cnKVxyXG5cdFx0XHQpO1xyXG5cdFx0XHRjb25zdCBpc0VsaWdpYmxlRm9yQWx6YWJveCA9XHJcblx0XHRcdFx0ZHBkTWFwT3BlbldpZGdldE1hcFBvcHVwRWwuZ2V0QXR0cmlidXRlKFxyXG5cdFx0XHRcdFx0J2RhdGEtaXMtZWxpZ2libGUtZm9yLWFsemFib3gnXHJcblx0XHRcdFx0KSA9PT0gJ3RydWUnO1xyXG5cdFx0XHRjb25zdCBpc0VsaWdpYmxlRm9yU2xvdmVuc2thUG9zdGFCb3ggPVxyXG5cdFx0XHRcdGRwZE1hcE9wZW5XaWRnZXRNYXBQb3B1cEVsLmdldEF0dHJpYnV0ZShcclxuXHRcdFx0XHRcdCdkYXRhLWlzLWVsaWdpYmxlLWZvci1zbG92ZW5za2EtcG9zdGEtYm94J1xyXG5cdFx0XHRcdCkgPT09ICd0cnVlJztcclxuXHJcblx0XHRcdGRwZE1hcFdpZGdldC5vcHRpb25zLm1pbldlaWdodEluS2cgPSBtaW5XZWlnaHRJbktnO1xyXG5cclxuXHRcdFx0Y29uc3QgZGlzYWxsb3dTaG9wcyA9XHJcblx0XHRcdFx0ZHBkTWFwT3BlbldpZGdldE1hcFBvcHVwRWwuZ2V0QXR0cmlidXRlKCdkYXRhLWRpc2FsbG93LXNob3BzJykgPT09XHJcblx0XHRcdFx0J3RydWUnO1xyXG5cdFx0XHRjb25zdCBkaXNhbGxvd0xvY2tlcnMgPVxyXG5cdFx0XHRcdGRwZE1hcE9wZW5XaWRnZXRNYXBQb3B1cEVsLmdldEF0dHJpYnV0ZSgnZGF0YS1kaXNhbGxvdy1sb2NrZXJzJykgPT09XHJcblx0XHRcdFx0J3RydWUnO1xyXG5cdFx0XHRjb25zdCBkaXNhbGxvd0RwZFBpY2t1cFN0YXRpb25zID1cclxuXHRcdFx0XHRkcGRNYXBPcGVuV2lkZ2V0TWFwUG9wdXBFbC5nZXRBdHRyaWJ1dGUoXHJcblx0XHRcdFx0XHQnZGF0YS1kaXNhbGxvdy1kcGQtcGlja3VwLXN0YXRpb25zJ1xyXG5cdFx0XHRcdCkgPT09ICd0cnVlJztcclxuXHRcdFx0Y29uc3QgZGlzYWxsb3dTa1Bvc3QgPVxyXG5cdFx0XHRcdGRwZE1hcE9wZW5XaWRnZXRNYXBQb3B1cEVsLmdldEF0dHJpYnV0ZSgnZGF0YS1kaXNhbGxvdy1zay1wb3N0JykgPT09XHJcblx0XHRcdFx0J3RydWUnO1xyXG5cdFx0XHRjb25zdCBkaXNhbGxvd0FsemFCb3hlcyA9XHJcblx0XHRcdFx0ZHBkTWFwT3BlbldpZGdldE1hcFBvcHVwRWwuZ2V0QXR0cmlidXRlKCdkYXRhLWRpc2FsbG93LWFsemEtYm94ZXMnKSA9PT1cclxuXHRcdFx0XHQndHJ1ZSc7XHJcblxyXG5cdFx0XHRsZXQgYWxsb3dlZFB1ZG9UeXBlcyA9IFsnc2hvcCcsICdsb2NrZXInXTtcclxuXHRcdFx0aWYgKGRpc2FsbG93U2hvcHMpIHtcclxuXHRcdFx0XHRhbGxvd2VkUHVkb1R5cGVzID0gYWxsb3dlZFB1ZG9UeXBlcy5maWx0ZXIoKHR5cGUpID0+IHR5cGUgIT09ICdzaG9wJyk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKGRpc2FsbG93TG9ja2Vycykge1xyXG5cdFx0XHRcdGFsbG93ZWRQdWRvVHlwZXMgPSBhbGxvd2VkUHVkb1R5cGVzLmZpbHRlcigodHlwZSkgPT4gdHlwZSAhPT0gJ2xvY2tlcicpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRkcGRNYXBXaWRnZXQub3B0aW9ucy5hbGxvd2VkUHVkb1R5cGVzID0gYWxsb3dlZFB1ZG9UeXBlcztcclxuXHJcblx0XHRcdGxldCBhbGxvd2VkTG9ja2VyVHlwZXMgPSBbXHJcblx0XHRcdFx0J2RwZFNrUGlja3VwU3RhdGlvbnMnLFxyXG5cdFx0XHRcdCdza1Bvc3QnLFxyXG5cdFx0XHRcdCdhbHphU2xvdmFraWEnLFxyXG5cdFx0XHRcdCdvdXRzaWRlT2ZTbG92YWtpYScsXHJcblx0XHRcdF07XHJcblxyXG5cdFx0XHRpZiAoIWlzRWxpZ2libGVGb3JBbHphYm94IHx8ICFpc0VsaWdpYmxlRm9yU2xvdmVuc2thUG9zdGFCb3gpIHtcclxuXHRcdFx0XHRpZiAoIWlzRWxpZ2libGVGb3JBbHphYm94KSB7XHJcblx0XHRcdFx0XHRhbGxvd2VkTG9ja2VyVHlwZXMgPSBhbGxvd2VkTG9ja2VyVHlwZXMuZmlsdGVyKFxyXG5cdFx0XHRcdFx0XHQodHlwZSkgPT4gdHlwZSAhPT0gJ2FsemFTbG92YWtpYSdcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZiAoIWlzRWxpZ2libGVGb3JTbG92ZW5za2FQb3N0YUJveCkge1xyXG5cdFx0XHRcdFx0YWxsb3dlZExvY2tlclR5cGVzID0gYWxsb3dlZExvY2tlclR5cGVzLmZpbHRlcihcclxuXHRcdFx0XHRcdFx0KHR5cGUpID0+IHR5cGUgIT09ICdza1Bvc3QnXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCFkaXNhbGxvd0xvY2tlcnMpIHtcclxuXHRcdFx0XHRpZiAoZGlzYWxsb3dEcGRQaWNrdXBTdGF0aW9ucykge1xyXG5cdFx0XHRcdFx0YWxsb3dlZExvY2tlclR5cGVzID0gYWxsb3dlZExvY2tlclR5cGVzLmZpbHRlcihcclxuXHRcdFx0XHRcdFx0KHR5cGUpID0+IHR5cGUgIT09ICdkcGRTa1BpY2t1cFN0YXRpb25zJ1xyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGRpc2FsbG93U2tQb3N0KSB7XHJcblx0XHRcdFx0XHRhbGxvd2VkTG9ja2VyVHlwZXMgPSBhbGxvd2VkTG9ja2VyVHlwZXMuZmlsdGVyKFxyXG5cdFx0XHRcdFx0XHQodHlwZSkgPT4gdHlwZSAhPT0gJ3NrUG9zdCdcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChkaXNhbGxvd0FsemFCb3hlcykge1xyXG5cdFx0XHRcdFx0YWxsb3dlZExvY2tlclR5cGVzID0gYWxsb3dlZExvY2tlclR5cGVzLmZpbHRlcihcclxuXHRcdFx0XHRcdFx0KHR5cGUpID0+IHR5cGUgIT09ICdhbHphU2xvdmFraWEnXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0ZHBkTWFwV2lkZ2V0Lm9wdGlvbnMuYWxsb3dlZExvY2tlclR5cGVzID0gYWxsb3dlZExvY2tlclR5cGVzO1xyXG5cclxuXHRcdFx0bGV0IHJlcXVpcmVkU2VydmljZXMgPSBbXTtcclxuXHJcblx0XHRcdGNvbnN0IGlzQ29kUmVxdWlyZWQgPVxyXG5cdFx0XHRcdGRwZE1hcE9wZW5XaWRnZXRNYXBQb3B1cEVsLmdldEF0dHJpYnV0ZSgnZGF0YS1pcy1jb2QtcmVxdWlyZWQnKSA9PT1cclxuXHRcdFx0XHQndHJ1ZSc7XHJcblx0XHRcdGNvbnN0IGlzQ2FyZFBheW1lbnRSZXF1aXJlZCA9XHJcblx0XHRcdFx0ZHBkTWFwT3BlbldpZGdldE1hcFBvcHVwRWwuZ2V0QXR0cmlidXRlKFxyXG5cdFx0XHRcdFx0J2RhdGEtaXMtY2FyZC1wYXltZW50LXJlcXVpcmVkJ1xyXG5cdFx0XHRcdCkgPT09ICd0cnVlJztcclxuXHJcblx0XHRcdGlmIChpc0NvZFJlcXVpcmVkIHx8IGlzQ2FyZFBheW1lbnRSZXF1aXJlZCkge1xyXG5cdFx0XHRcdGlmIChpc0NvZFJlcXVpcmVkKSB7XHJcblx0XHRcdFx0XHRyZXF1aXJlZFNlcnZpY2VzLnB1c2goJ2NvZCcpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKGlzQ2FyZFBheW1lbnRSZXF1aXJlZCkge1xyXG5cdFx0XHRcdFx0cmVxdWlyZWRTZXJ2aWNlcy5wdXNoKCdjYXJkUGF5bWVudCcpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0ZHBkTWFwV2lkZ2V0Lm9wdGlvbnMucmVxdWlyZWRTZXJ2aWNlcyA9IHJlcXVpcmVkU2VydmljZXM7XHJcblxyXG5cdFx0XHRkcGRNYXBXaWRnZXRcclxuXHRcdFx0XHQuYXR0YWNoKGRwZE1hcFdpZGdldEVsKVxyXG5cdFx0XHRcdC50aGVuKChwdWRvKSA9PiB7XHJcblx0XHRcdFx0XHRzZXRTZWxlY3RlZFBhcmNlbFNob3Aoe1xyXG5cdFx0XHRcdFx0XHRpZDogcHVkby5pZCxcclxuXHRcdFx0XHRcdFx0bmFtZTogcHVkby5uYW1lLFxyXG5cdFx0XHRcdFx0XHRzdHJlZXQ6IHB1ZG8uc3RyZWV0LFxyXG5cdFx0XHRcdFx0XHRob3VzZW5vOiBwdWRvLmhvdXNlbm8sXHJcblx0XHRcdFx0XHRcdHppcDogcHVkby56aXAsXHJcblx0XHRcdFx0XHRcdGNpdHk6IHB1ZG8uY2l0eSxcclxuXHRcdFx0XHRcdFx0Y291bnRyeUNvZGU6IHB1ZG8uY291bnRyeUNvZGUsXHJcblx0XHRcdFx0XHRcdG1heHdlaWdodDogcHVkby5tYXhXZWlnaHRJbktnLFxyXG5cdFx0XHRcdFx0XHRjb2Q6IHB1ZG8uc2VydmljZXMgJiYgcHVkby5zZXJ2aWNlcy5pbmNsdWRlcygnY29kJykgPyB0cnVlIDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdGNhcmQ6XHJcblx0XHRcdFx0XHRcdFx0cHVkby5zZXJ2aWNlcyAmJiBwdWRvLnNlcnZpY2VzLmluY2x1ZGVzKCdjYXJkUGF5bWVudCcpXHJcblx0XHRcdFx0XHRcdFx0XHQ/IHRydWVcclxuXHRcdFx0XHRcdFx0XHRcdDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdGlzRWxpZ2libGVGb3JBbHphYm94OiBpc0VsaWdpYmxlRm9yQWx6YWJveCxcclxuXHRcdFx0XHRcdFx0aXNFbGlnaWJsZUZvclNsb3ZlbnNrYVBvc3RhQm94OiBpc0VsaWdpYmxlRm9yU2xvdmVuc2thUG9zdGFCb3gsXHJcblx0XHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0XHRjbG9zZVBvcHVwKCk7XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0XHQuY2F0Y2goKGNvZGUpID0+IHtcclxuXHRcdFx0XHRcdGNsb3NlUG9wdXAoKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENsb3NlIHRoZSBwb3B1cFxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIGNsb3NlUG9wdXAoKSB7XHJcblx0XHRwb3B1cC5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcclxuXHJcblx0XHQvLyBDaGVjayBpZiBjbG9zZSBtZXRob2QgZXhpc3RzXHJcblx0XHRpZiAoZHBkTWFwV2lkZ2V0ICYmIGRwZE1hcFdpZGdldC5jbG9zZSkge1xyXG5cdFx0XHRkcGRNYXBXaWRnZXQuY2xvc2UoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENoZWNrIGlmIGEgcGFyY2VsIHNob3AgaXMgY2hvc2VuXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gaXNQYXJjZWxTaG9wQ2hvc2VuKCkge1xyXG5cdFx0dmFyIGNob3NlblBhcmNlbFNob3BJZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcblx0XHRcdGNob3NlblBhcmNlbFNob3BIaWRkZW5QYXJjZWxJZFNlbGVjdG9yXHJcblx0XHQpLnZhbHVlO1xyXG5cdFx0cmV0dXJuIGNob3NlblBhcmNlbFNob3BJZCAhPT0gJyc7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgY3VzdG9tZXIgemlwXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gZ2V0Q3VzdG9tZXJaaXAoKSB7XHJcblx0XHQvLyBDaGVjayBpZiBzaGlwIHRvIGRpZmZlcmVudCBhZGRyZXNzIGlzIGNoZWNrZWRcclxuXHRcdGNvbnN0IHNoaXBUb0RpZmZlcmVudEFkZHJlc3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG5cdFx0XHQnaW5wdXRbbmFtZT1cInNoaXBfdG9fZGlmZmVyZW50X2FkZHJlc3NcIl0nXHJcblx0XHQpO1xyXG5cclxuXHRcdGlmIChzaGlwVG9EaWZmZXJlbnRBZGRyZXNzICYmIHNoaXBUb0RpZmZlcmVudEFkZHJlc3MuY2hlY2tlZCkge1xyXG5cdFx0XHRjb25zdCBzaGlwcGluZ1Bvc3Rjb2RlRmllbGQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG5cdFx0XHRcdCdpbnB1dFtuYW1lPVwic2hpcHBpbmdfcG9zdGNvZGVcIl0nXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHRpZiAoc2hpcHBpbmdQb3N0Y29kZUZpZWxkKSB7XHJcblx0XHRcdFx0Y3VzdG9tZXJaaXAgPSBzaGlwcGluZ1Bvc3Rjb2RlRmllbGQudmFsdWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChjdXN0b21lclppcCkge1xyXG5cdFx0XHRcdHJldHVybiBjdXN0b21lclppcDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGJpbGxpbmdQb3N0Y29kZUZpZWxkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcclxuXHRcdFx0J2lucHV0W25hbWU9XCJiaWxsaW5nX3Bvc3Rjb2RlXCJdJ1xyXG5cdFx0KTtcclxuXHJcblx0XHRpZiAoYmlsbGluZ1Bvc3Rjb2RlRmllbGQpIHtcclxuXHRcdFx0Y3VzdG9tZXJaaXAgPSBiaWxsaW5nUG9zdGNvZGVGaWVsZC52YWx1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoY3VzdG9tZXJaaXApIHtcclxuXHRcdFx0cmV0dXJuIGN1c3RvbWVyWmlwO1xyXG5cdFx0fVxyXG5cclxuXHRcdGN1c3RvbWVyWmlwID0gZHBkTWFwT3BlbldpZGdldE1hcFBvcHVwRWwuZ2V0QXR0cmlidXRlKCdkYXRhLWN1c3RvbWVyLXppcCcpO1xyXG5cclxuXHRcdGlmIChjdXN0b21lclppcCkge1xyXG5cdFx0XHRyZXR1cm4gY3VzdG9tZXJaaXA7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuICcnO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2hlY2sgaWYgZG9jdW1lbnQgaXMgcmVhZHlcclxuXHQgKi9cclxuXHRmdW5jdGlvbiBkb2NSZWFkeShmbikge1xyXG5cdFx0aWYgKFxyXG5cdFx0XHRkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnY29tcGxldGUnIHx8XHJcblx0XHRcdGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdpbnRlcmFjdGl2ZSdcclxuXHRcdCkge1xyXG5cdFx0XHRzZXRUaW1lb3V0KGZuLCAxKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBmbik7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRkb2NSZWFkeShmdW5jdGlvbiAoKSB7XHJcblx0XHRpbml0KCk7XHJcblx0fSk7XHJcblxyXG5cdC8vIEFsbG93IHRoZSBmdW5jdGlvbnMgdG8gYmUgY2FsbGVkIGZyb20gb3V0c2lkZVxyXG5cdHJldHVybiB7XHJcblx0XHRvcGVuUG9wdXA6IG9wZW5Qb3B1cCxcclxuXHR9O1xyXG59KSgpO1xyXG4iXSwibWFwcGluZ3MiOiI7QUFBQUEsTUFBTSxDQUFDQyxtQkFBbUIsR0FBSSxZQUFZO0VBQ3pDLElBQUlDLHNCQUFzQjtJQUN6QkMsS0FBSztJQUNMQyxZQUFZO0lBQ1pDLCtCQUErQjtJQUMvQkMsNkJBQTZCO0lBQzdCQywrQkFBK0I7SUFDL0JDLG1DQUFtQztJQUNuQ0Msc0NBQXNDO0lBQ3RDQyx5Q0FBeUM7SUFDekNDLHdDQUF3QztJQUN4Q0MsMENBQTBDO0lBQzFDQyx3Q0FBd0M7SUFDeENDLHVDQUF1QztJQUN2Q0MsK0NBQStDO0lBQy9DQyxjQUFjO0lBQ2RDLFdBQVc7SUFDWEMsU0FBUztJQUNUQyxlQUFlO0lBQ2ZDLGdCQUFnQixHQUFHLEtBQUs7RUFFekIsU0FBU0MsSUFBSUEsQ0FBQSxFQUFHO0lBQ2ZmLDZCQUE2QixHQUM1Qiw4Q0FBOEM7SUFFL0NKLHNCQUFzQixHQUFHLHFDQUFxQztJQUU5REcsK0JBQStCLEdBQzlCLCtDQUErQztJQUVoREUsK0JBQStCLEdBQUcsbUNBQW1DO0lBQ3JFQyxtQ0FBbUMsR0FDbEMsa0RBQWtEO0lBQ25EQyxzQ0FBc0MsR0FDckMseUNBQXlDO0lBQzFDQyx5Q0FBeUMsR0FDeEMsNkNBQTZDO0lBQzlDQyx3Q0FBd0MsR0FDdkMsMkNBQTJDO0lBQzVDQywwQ0FBMEMsR0FDekMsNkNBQTZDO0lBQzlDQyx3Q0FBd0MsR0FDdkMsMkNBQTJDO0lBQzVDQyx1Q0FBdUMsR0FDdEMsMENBQTBDO0lBQzNDQywrQ0FBK0MsR0FDOUMsbURBQW1EO0lBRXBEWixLQUFLLEdBQUdtQixRQUFRLENBQUNDLGFBQWEsQ0FBQ3JCLHNCQUFzQixDQUFDOztJQUV0RDtBQUNGO0FBQ0E7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QUlBLFlBQVksQ0FBQzRILEtBQUssRUFBRTtNQUN2QzVILFlBQVksQ0FBQzRILEtBQUssQ0FBQyxDQUFDO0lBQ3JCO0VBQ0Q7O0VBRUE7QUFDRDtBQUNBO0VBQ0MsU0FBUzdGLGtCQUFrQkEsQ0FBQSxFQUFHO0lBQzdCLElBQUlrRSxrQkFBa0IsR0FBRy9FLFFBQVEsQ0FBQ0MsYUFBYSxDQUM5Q2Qsc0NBQ0QsQ0FBQyxDQUFDeUUsS0FBSztJQUNQLE9BQU9tQixrQkFBa0IsS0FBSyxFQUFFO0VBQ2pDOztFQUVBO0FBQ0Q7QUFDQTtFQUNDLFNBQVNHLGNBQWNBLENBQUEsRUFBRztJQUN6QjtJQUNBLElBQU15QixzQkFBc0IsR0FBRzNHLFFBQVEsQ0FBQ0MsYUFBYSxDQUNwRCx5Q0FDRCxDQUFDO0lBRUQsSUFBSTBHLHNCQUFzQixJQUFJQSxzQkFBc0IsQ0FBQ0MsT0FBTyxFQUFFO01BQzdELElBQU1DLHFCQUFxQixHQUFHN0csUUFBUSxDQUFDQyxhQUFhLENBQ25ELGlDQUNELENBQUM7TUFFRCxJQUFJNEcscUJBQXFCLEVBQUU7UUFDMUJsSCxXQUFXLEdBQUdrSCxxQkFBcUIsQ0FBQ2pELEtBQUs7TUFDMUM7TUFFQSxJQUFJakUsV0FBVyxFQUFFO1FBQ2hCLE9BQU9BLFdBQVc7TUFDbkI7SUFDRDtJQUVBLElBQU1tSCxvQkFBb0IsR0FBRzlHLFFBQVEsQ0FBQ0MsYUFBYSxDQUNsRCxnQ0FDRCxDQUFDO0lBRUQsSUFBSTZHLG9CQUFvQixFQUFFO01BQ3pCbkgsV0FBVyxHQUFHbUgsb0JBQW9CLENBQUNsRCxLQUFLO0lBQ3pDO0lBRUEsSUFBSWpFLFdBQVcsRUFBRTtNQUNoQixPQUFPQSxXQUFXO0lBQ25CO0lBRUFBLFdBQVcsR0FBR1ksMEJBQTBCLENBQUNXLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQztJQUUxRSxJQUFJdkIsV0FBVyxFQUFFO01BQ2hCLE9BQU9BLFdBQVc7SUFDbkI7SUFFQSxPQUFPLEVBQUU7RUFDVjs7RUFFQTtBQUNEO0FBQ0E7RUFDQyxTQUFTb0gsUUFBUUEsQ0FBQ0MsRUFBRSxFQUFFO0lBQ3JCLElBQ0NoSCxRQUFRLENBQUM0RSxVQUFVLEtBQUssVUFBVSxJQUNsQzVFLFFBQVEsQ0FBQzRFLFVBQVUsS0FBSyxhQUFhLEVBQ3BDO01BQ0RxQyxVQUFVLENBQUNELEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbEIsQ0FBQyxNQUFNO01BQ05oSCxRQUFRLENBQUNFLGdCQUFnQixDQUFDLGtCQUFrQixFQUFFOEcsRUFBRSxDQUFDO0lBQ2xEO0VBQ0Q7RUFFQUQsUUFBUSxDQUFDLFlBQVk7SUFDcEJoSCxJQUFJLENBQUMsQ0FBQztFQUNQLENBQUMsQ0FBQzs7RUFFRjtFQUNBLE9BQU87SUFDTlcsU0FBUyxFQUFFQTtFQUNaLENBQUM7QUFDRixDQUFDLENBQUUsQ0FBQyIsImlnbm9yZUxpc3QiOltdLCJmaWxlIjoiLi9hc3NldHMvc2NyaXB0cy9kcGQtcGFyY2Vsc2hvcC1tYXAtd2lkZ2V0LmpzIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./assets/scripts/dpd-parcelshop-map-widget.js\n"); 19 19 20 20 /***/ }) -
wc-dpd/trunk/readme.txt
r3292802 r3339385 4 4 Donate link: https://platobnebrany.sk/ 5 5 Requires at least: 5.3 6 Tested up to: 6.8. 16 Tested up to: 6.8.2 7 7 Requires PHP: 7.4 8 Stable tag: 8. 0.28 Stable tag: 8.1.0 9 9 License: GPLv2 or later 10 10 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 62 62 63 63 == Changelog == 64 65 = 8.1.0 = 66 * Fixed parcel shop validation for WooCommerce Blocks checkout 67 * Added filter 'wc_dpd_is_cart_or_checkout_page' for custom checkout page detection 68 * Improved WooCommerce Blocks compatibility for parcel shop selection validation 69 * Updated free shipping description hint 64 70 65 71 = 8.0.2 = -
wc-dpd/trunk/vendor/composer/installed.json
r3254821 r3339385 3 3 { 4 4 "name": "league/iso3166", 5 "version": "4.3. 2",6 "version_normalized": "4.3. 2.0",5 "version": "4.3.3", 6 "version_normalized": "4.3.3.0", 7 7 "source": { 8 8 "type": "git", 9 9 "url": "https://github.com/alcohol/iso3166.git", 10 "reference": " 5133fed7d54728222f4058702487dccedda20472"10 "reference": "3f692113a1c07859ec69303a0127b43da8a66768" 11 11 }, 12 12 "dist": { 13 13 "type": "zip", 14 "url": "https://api.github.com/repos/alcohol/iso3166/zipball/ 5133fed7d54728222f4058702487dccedda20472",15 "reference": " 5133fed7d54728222f4058702487dccedda20472",14 "url": "https://api.github.com/repos/alcohol/iso3166/zipball/3f692113a1c07859ec69303a0127b43da8a66768", 15 "reference": "3f692113a1c07859ec69303a0127b43da8a66768", 16 16 "shasum": "" 17 17 }, … … 26 26 "phpunit/phpunit": "^9.6.21" 27 27 }, 28 "time": "202 4-10-10T07:39:24+00:00",28 "time": "2025-06-05T08:06:30+00:00", 29 29 "type": "library", 30 30 "extra": { -
wc-dpd/trunk/vendor/composer/installed.php
r3254821 r3339385 12 12 'versions' => array( 13 13 'league/iso3166' => array( 14 'pretty_version' => '4.3. 2',15 'version' => '4.3. 2.0',16 'reference' => ' 5133fed7d54728222f4058702487dccedda20472',14 'pretty_version' => '4.3.3', 15 'version' => '4.3.3.0', 16 'reference' => '3f692113a1c07859ec69303a0127b43da8a66768', 17 17 'type' => 'library', 18 18 'install_path' => __DIR__ . '/../league/iso3166', -
wc-dpd/trunk/vendor/league/iso3166/src/Guards.php
r2796559 r3339385 16 16 final class Guards 17 17 { 18 /** 19 * Assert that input is not an empty string. 20 * 21 * @throws \League\ISO3166\Exception\DomainException if input is an empty string 22 */ 23 public static function guardAgainstInvalidName(string $name): void 24 { 25 if ('' === trim($name)) { 26 throw new DomainException('Expected string, got empty string'); 27 } 28 } 29 18 30 /** 19 31 * Assert that input looks like an alpha2 key. -
wc-dpd/trunk/vendor/league/iso3166/src/ISO3166.php
r3254821 r3339385 44 44 public function name(string $name): array 45 45 { 46 Guards::guardAgainstInvalidName($name); 47 46 48 return $this->lookup(self::KEY_NAME, $name); 47 49 } … … 82 84 public function exactName(string $name): array 83 85 { 86 Guards::guardAgainstInvalidName($name); 87 84 88 $value = mb_strtolower($name); 85 89 … … 2260 2264 ], 2261 2265 [ 2262 'name' => 'T urkey',2266 'name' => 'Türkiye', 2263 2267 'alpha2' => 'TR', 2264 2268 'alpha3' => 'TUR', -
wc-dpd/trunk/vendor/league/iso3166/src/ISO3166DataValidator.php
r2796559 r3339385 37 37 private function assertEntryHasRequiredKeys(array $entry): void 38 38 { 39 if (!isset($entry[ISO3166::KEY_NAME])) { 40 throw new DomainException('Each data entry must have a name key.'); 41 } 42 43 Guards::guardAgainstInvalidName($entry[ISO3166::KEY_NAME]); 44 39 45 if (!isset($entry[ISO3166::KEY_ALPHA2])) { 40 throw new DomainException('Each data entry must have a validalpha2 key.');46 throw new DomainException('Each data entry must have a alpha2 key.'); 41 47 } 42 48 … … 44 50 45 51 if (!isset($entry[ISO3166::KEY_ALPHA3])) { 46 throw new DomainException('Each data entry must have a validalpha3 key.');52 throw new DomainException('Each data entry must have a alpha3 key.'); 47 53 } 48 54 … … 50 56 51 57 if (!isset($entry[ISO3166::KEY_NUMERIC])) { 52 throw new DomainException('Each data entry must have a validnumeric key.');58 throw new DomainException('Each data entry must have a numeric key.'); 53 59 } 54 60 -
wc-dpd/trunk/vendor/league/iso3166/src/ISO3166WithAliases.php
r3254821 r3339385 16 16 private ISO3166DataProvider $source; 17 17 18 /** @type array<string, string> */ 19 public const aliases = [ 20 'Bolivia' => 'Bolivia (Plurinational State of)', 21 'Bolivia, Plurinational State of' => 'Bolivia (Plurinational State of)', 22 'Congo-Kinshasa' => 'Congo (Democratic Republic of the)', 23 'Congo, Democratic Republic of the' => 'Congo (Democratic Republic of the)', 24 'Czech Republic' => 'Czechia', 25 'Iran' => 'Iran (Islamic Republic of)', 26 'North Korea' => 'Korea (Democratic People\'s Republic of)', 27 'South Korea' => 'Korea (Republic of)', 28 'Laos' => 'Lao People\'s Democratic Republic', 29 'Micronesia' => 'Micronesia (Federated States of)', 30 'Moldova' => 'Moldova (Republic of)', 31 'Palestine' => 'Palestine, State of', 32 'Russia' => 'Russian Federation', 33 'Saint Martin' => 'Saint Martin (French part)', 34 'Sint Maarten' => 'Sint Maarten (Dutch part)', 35 'Taiwan' => 'Taiwan (Province of China)', 36 'Tanzania' => 'Tanzania, United Republic of', 37 'United Kingdom' => 'United Kingdom of Great Britain and Northern Ireland', 38 'United States' => 'United States of America', 39 'USA' => 'United States of America', 40 'Venezuela' => 'Venezuela (Bolivarian Republic of)', 41 'Vietnam' => 'Viet Nam', 42 ]; 43 18 44 public function __construct(ISO3166DataProvider $iso3166) 19 45 { … … 23 49 public function name(string $name): array 24 50 { 25 $aliases = [ 26 'Bolivia' => 'Bolivia (Plurinational State of)', 27 'Bolivia, Plurinational State of' => 'Bolivia (Plurinational State of)', 28 'Congo-Kinshasa' => 'Congo (Democratic Republic of the)', 29 'Congo, Democratic Republic of the' => 'Congo (Democratic Republic of the)', 30 'Czech Republic' => 'Czechia', 31 'Iran' => 'Iran (Islamic Republic of)', 32 'North Korea' => 'Korea (Democratic People\'s Republic of)', 33 'South Korea' => 'Korea (Republic of)', 34 'Laos' => 'Lao People\'s Democratic Republic', 35 'Micronesia' => 'Micronesia (Federated States of)', 36 'Moldova' => 'Moldova (Republic of)', 37 'Palestine' => 'Palestine, State of', 38 'Russia' => 'Russian Federation', 39 'Saint Martin' => 'Saint Martin (French part)', 40 'Sint Maarten' => 'Sint Maarten (Dutch part)', 41 'Taiwan' => 'Taiwan (Province of China)', 42 'Tanzania' => 'Tanzania, United Republic of', 43 'United Kingdom' => 'United Kingdom of Great Britain and Northern Ireland', 44 'United States' => 'United States of America', 45 'Venezuela' => 'Venezuela (Bolivarian Republic of)', 46 'Vietnam' => 'Viet Nam', 47 ]; 48 49 foreach ($aliases as $alias => $original) { 51 foreach (self::aliases as $alias => $original) { 50 52 if (0 === strcasecmp($alias, $name)) { 51 53 $name = $original; -
wc-dpd/trunk/wc-dpd.php
r3292802 r3339385 4 4 * Plugin Name: DPD SK for WooCommerce 5 5 * Description: DPD SK plugin for WooCommerce which exports orders to the DPD through their API 6 * Version: 8. 0.26 * Version: 8.1.0 7 7 * Author: Webikon 8 8 * Author URI: https://www.webikon.sk … … 12 12 * Domain Path: /languages 13 13 * Requires at least: 5.3 14 * Tested up to: 6.8. 114 * Tested up to: 6.8.2 15 15 * Requires PHP: 7.4 16 16 * WC requires at least: 7.0 17 * WC tested up to: 9.8.517 * WC tested up to: 10.0.4 18 18 */ 19 19
Note: See TracChangeset
for help on using the changeset viewer.