Version Description
Download this release
Release Info
Developer | aljullu |
Plugin | WooCommerce Gutenberg Products Block |
Version | 4.9.2 |
Comparing to | |
See all releases |
Code changes from version 5.5.0 to 4.9.2
- LICENSE +0 -674
- assets/css/abstracts/_colors.scss +0 -1
- assets/css/editor.scss +5 -11
- assets/img/avatar.jpg +0 -0
- {images/previews → assets/img}/beanie.jpg +0 -0
- assets/img/block-error.svg +2727 -0
- {images/previews → assets/img}/cap.jpg +0 -0
- {images/previews → assets/img}/collection.jpg +0 -0
- assets/img/grid.svg +50 -0
- assets/img/no-matching-products.svg +1 -0
- assets/img/no-products.svg +1 -0
- {images → assets/img}/payment-methods/alipay.svg +0 -0
- {images → assets/img}/payment-methods/amex.svg +0 -0
- {images → assets/img}/payment-methods/bancontact.svg +0 -0
- {images → assets/img}/payment-methods/diners.svg +0 -0
- {images → assets/img}/payment-methods/discover.svg +0 -0
- {images → assets/img}/payment-methods/eps.svg +0 -0
- {images → assets/img}/payment-methods/giropay.svg +0 -0
- {images → assets/img}/payment-methods/ideal.svg +0 -0
- {images → assets/img}/payment-methods/jcb.svg +0 -0
- {images → assets/img}/payment-methods/laser.svg +0 -0
- {images → assets/img}/payment-methods/maestro.svg +0 -0
- {images → assets/img}/payment-methods/mastercard.svg +0 -0
- {images → assets/img}/payment-methods/multibanco.svg +0 -0
- {images → assets/img}/payment-methods/p24.svg +0 -0
- {images → assets/img}/payment-methods/sepa.svg +0 -0
- {images → assets/img}/payment-methods/sofort.svg +0 -0
- {images → assets/img}/payment-methods/unionpay.svg +0 -0
- {images → assets/img}/payment-methods/visa.svg +0 -0
- {images → assets/img}/payment-methods/wechat.svg +0 -0
- {images/previews → assets/img}/pennant.jpg +0 -0
- assets/img/single-product-preview.svg +5 -0
- assets/js/atomic/blocks/product-elements/button/block.js +12 -0
- assets/js/atomic/blocks/product-elements/image/block.js +1 -1
- assets/js/atomic/blocks/product-elements/summary/block.js +4 -2
- assets/js/atomic/utils/index.js +5 -4
- assets/js/atomic/utils/render-inner-blocks.js +69 -0
- assets/js/atomic/utils/render-parent-block.js +41 -0
- assets/js/atomic/utils/render-parent-block.tsx +0 -126
- assets/js/base/components/block-error-boundary/block-error.js +2 -12
- assets/js/base/components/block-error-boundary/index.js +0 -2
- assets/js/base/components/block-error-boundary/style.scss +18 -15
- assets/js/base/components/button/index.js +55 -0
- assets/js/base/components/button/index.tsx +0 -48
- assets/js/base/components/button/style.scss +39 -1
- assets/js/base/components/cart-checkout/address-form/{address-form.tsx → address-form.js} +13 -34
- assets/js/base/components/cart-checkout/address-form/{index.ts → index.js} +0 -0
- assets/js/base/components/cart-checkout/address-form/{prepare-address-fields.ts → prepare-address-fields.js} +10 -34
- assets/js/base/components/cart-checkout/order-summary/index.js +1 -1
- assets/js/base/components/cart-checkout/order-summary/order-summary-item.js +6 -11
- assets/js/base/components/cart-checkout/order-summary/style.scss +0 -12
- assets/js/base/components/cart-checkout/payment-method-icons/common-icons.js +20 -20
- assets/js/base/components/cart-checkout/place-order-button/index.js +1 -5
- assets/js/base/components/cart-checkout/policies/{index.tsx → index.js} +1 -1
- assets/js/base/components/cart-checkout/product-backorder-badge/{index.tsx → index.js} +1 -1
- assets/js/base/components/cart-checkout/product-badge/{index.tsx → index.js} +6 -9
- assets/js/base/components/cart-checkout/product-details/{index.tsx → index.js} +13 -8
- assets/js/base/components/cart-checkout/product-image/{index.tsx → index.js} +10 -5
- assets/js/base/components/cart-checkout/product-low-stock-badge/{index.tsx → index.js} +7 -7
- assets/js/base/components/cart-checkout/product-metadata/{index.tsx → index.js} +14 -10
- assets/js/base/components/cart-checkout/product-sale-badge/{index.tsx → index.js} +7 -11
- assets/js/base/components/cart-checkout/product-summary/{index.tsx → index.js} +10 -8
- assets/js/base/components/cart-checkout/shipping-calculator/{address.tsx → address.js} +8 -7
- assets/js/base/components/cart-checkout/shipping-calculator/{index.tsx → index.js} +8 -10
- assets/js/base/components/cart-checkout/shipping-location/{index.tsx → index.js} +20 -21
- assets/js/base/components/cart-checkout/shipping-rates-control-package/index.tsx +19 -23
- assets/js/base/components/cart-checkout/shipping-rates-control-package/package-rates.tsx +3 -6
- assets/js/base/components/cart-checkout/shipping-rates-control-package/render-package-rate-option.tsx +4 -10
- assets/js/base/components/cart-checkout/shipping-rates-control-package/style.scss +7 -1
- assets/js/base/components/cart-checkout/shipping-rates-control/{index.tsx → index.js} +60 -66
- assets/js/base/components/cart-checkout/totals/coupon/index.js +4 -3
- assets/js/base/components/cart-checkout/totals/coupon/style.scss +1 -17
- assets/js/base/components/cart-checkout/totals/discount/index.js +32 -48
- assets/js/base/components/cart-checkout/totals/discount/style.scss +0 -4
- assets/js/base/components/cart-checkout/totals/footer-item/index.js +13 -17
- assets/js/base/components/cart-checkout/totals/footer-item/test/__snapshots__/index.js.snap +0 -79
- assets/js/base/components/cart-checkout/totals/footer-item/test/index.js +0 -81
- assets/js/base/components/cart-checkout/totals/shipping/index.tsx +8 -27
- assets/js/base/components/cart-checkout/totals/shipping/shipping-via.tsx +0 -17
- assets/js/base/components/cart-checkout/totals/shipping/style.scss +0 -4
- assets/js/base/components/chip/stories/index.js +0 -42
- assets/js/base/components/country-input/CountryInputProps.ts +0 -15
- assets/js/base/components/country-input/billing-country-input.js +23 -0
- assets/js/base/components/country-input/billing-country-input.tsx +0 -16
- assets/js/base/components/country-input/{country-input.tsx → country-input.js} +14 -2
- assets/js/base/components/country-input/{index.ts → index.js} +0 -0
- assets/js/base/components/country-input/shipping-country-input.js +23 -0
- assets/js/base/components/country-input/shipping-country-input.tsx +0 -16
- assets/js/base/components/label/index.tsx +3 -3
- assets/js/base/components/loading-mask/index.js +17 -16
- assets/js/base/components/loading-mask/style.scss +3 -4
- assets/js/base/components/price-slider/index.js +2 -6
- assets/js/base/components/product-list/container.js +1 -6
- assets/js/base/components/product-list/product-list.js +4 -9
- assets/js/base/components/product-list/style.scss +0 -5
- assets/js/base/components/product-name/index.js +39 -0
- assets/js/base/components/product-name/index.tsx +0 -48
- assets/js/base/components/product-name/test/__snapshots__/index.js.snap +12 -24
- assets/js/base/components/product-price/index.js +19 -33
- assets/js/base/components/quantity-selector/{index.tsx → index.js} +14 -16
- assets/js/base/components/reviews/review-list/index.js +6 -5
- assets/js/base/components/sidebar-layout/style.scss +0 -7
- assets/js/base/components/spinner/index.tsx +0 -10
- assets/js/base/components/spinner/style.scss +0 -37
- assets/js/base/components/state-input/StateInputProps.ts +0 -15
- assets/js/base/components/state-input/billing-state-input.js +23 -0
- assets/js/base/components/state-input/billing-state-input.tsx +0 -16
- assets/js/base/components/state-input/{index.ts → index.js} +0 -0
- assets/js/base/components/state-input/shipping-state-input.js +23 -0
- assets/js/base/components/state-input/shipping-state-input.tsx +0 -16
- assets/js/base/components/state-input/{state-input.tsx → state-input.js} +18 -2
- assets/js/base/components/summary/{index.tsx → index.js} +1 -8
- assets/js/base/components/text-input/{index.ts → index.js} +0 -0
- assets/js/base/components/text-input/style.scss +0 -12
- assets/js/base/components/text-input/{text-input.tsx → text-input.js} +21 -26
- assets/js/base/components/text-input/{validated-text-input.tsx → validated-text-input.js} +27 -54
- assets/js/base/context/event-emit/emitters.ts +8 -21
- assets/js/base/context/event-emit/test/emitters.js +8 -14
- assets/js/base/context/hooks/cart/use-store-cart-coupons.ts +2 -4
- assets/js/base/context/hooks/cart/use-store-cart-item-quantity.ts +24 -48
- assets/js/base/context/hooks/cart/use-store-cart.ts +4 -20
- assets/js/base/context/hooks/payment-methods/test/use-payment-method-interface.js +1 -6
- assets/js/base/context/hooks/payment-methods/{use-payment-method-interface.ts → use-payment-method-interface.js} +95 -61
- assets/js/base/context/hooks/payment-methods/use-payment-methods.js +6 -19
- assets/js/base/context/hooks/payment-methods/utils.ts +0 -85
- assets/js/base/context/hooks/shipping/use-select-shipping-rate.ts +5 -6
- assets/js/base/context/hooks/shipping/use-select-shipping-rates.ts +2 -2
- assets/js/base/context/hooks/test/use-checkout-submit.js +1 -6
- assets/js/base/context/hooks/test/use-store-notices.js +12 -2
- assets/js/base/context/hooks/test/use-store-snackbar-notices.js +0 -51
- assets/js/base/context/hooks/use-checkout-address.js +3 -9
- assets/js/base/context/hooks/use-checkout-submit.js +4 -10
- assets/js/base/context/hooks/use-customer-data.ts +7 -24
- assets/js/base/context/hooks/use-emit-response.js +59 -0
- assets/js/base/context/hooks/use-emit-response.ts +0 -66
- assets/js/base/context/hooks/use-store-events.ts +3 -10
- assets/js/base/context/hooks/use-store-notices.js +5 -1
- assets/js/base/context/hooks/use-store-snackbar-notices.js +0 -52
- assets/js/base/context/{index.ts → index.js} +0 -0
- assets/js/base/context/providers/add-to-cart-form/form-state/index.js +20 -25
- assets/js/base/context/providers/add-to-cart-form/form/submit/index.js +2 -0
- assets/js/base/context/providers/cart-checkout/checkout-state/actions.js +82 -0
- assets/js/base/context/providers/cart-checkout/checkout-state/actions.ts +0 -110
- assets/js/base/context/providers/cart-checkout/checkout-state/constants.js +51 -0
- assets/js/base/context/providers/cart-checkout/checkout-state/constants.ts +0 -84
- assets/js/base/context/providers/cart-checkout/checkout-state/event-emit.js +47 -0
- assets/js/base/context/providers/cart-checkout/checkout-state/event-emit.ts +0 -62
- assets/js/base/context/providers/cart-checkout/checkout-state/{index.tsx → index.js} +125 -131
- assets/js/base/context/providers/cart-checkout/checkout-state/reducer.js +235 -0
- assets/js/base/context/providers/cart-checkout/checkout-state/reducer.ts +0 -197
- assets/js/base/context/providers/cart-checkout/checkout-state/types.ts +0 -103
- assets/js/base/context/providers/cart-checkout/checkout-state/utils.ts +0 -63
- assets/js/base/context/providers/cart-checkout/checkout/index.js +1 -1
- assets/js/base/context/providers/cart-checkout/checkout/processor/index.js +17 -22
- assets/js/base/context/providers/cart-checkout/payment-methods/actions.ts +92 -63
- assets/js/base/context/providers/cart-checkout/payment-methods/constants.ts +0 -3
- assets/js/base/context/providers/cart-checkout/payment-methods/payment-method-data-context.tsx +214 -125
- assets/js/base/context/providers/cart-checkout/payment-methods/reducer.ts +11 -8
- assets/js/base/context/providers/cart-checkout/payment-methods/types.ts +3 -12
- assets/js/base/context/providers/cart-checkout/payment-methods/use-active-payment-method.ts +0 -38
- assets/js/base/context/providers/cart-checkout/payment-methods/use-payment-method-dispatchers.ts +0 -105
- assets/js/base/context/providers/cart-checkout/payment-methods/use-payment-method-registration.ts +10 -11
- assets/js/base/context/providers/cart-checkout/payment-methods/utils.ts +0 -3
- assets/js/base/context/providers/index.js +0 -1
- assets/js/base/context/providers/{store-snackbar-notices → store-notices}/components/snackbar-notices-container.js +1 -7
- assets/js/base/context/providers/store-notices/components/style.scss +21 -0
- assets/js/base/context/providers/store-notices/context.js +22 -0
- assets/js/base/context/providers/store-notices/index.js +1 -0
- assets/js/base/context/providers/store-snackbar-notices/components/style.scss +0 -20
- assets/js/base/context/providers/store-snackbar-notices/context.js +0 -125
- assets/js/base/context/providers/store-snackbar-notices/index.ts +0 -1
- assets/js/base/context/providers/validation/components/validation-input-error/index.js +1 -2
- assets/js/base/hooks/index.js +1 -0
- assets/js/base/hooks/use-shallow-equal.ts +5 -4
- assets/js/base/hooks/use-trigger-fragment-refresh.ts +22 -0
- assets/js/base/utils/address.js +23 -0
- assets/js/base/utils/address.ts +0 -85
- assets/js/base/utils/legacy-events.js +1 -11
- assets/js/base/utils/test/address.ts +0 -24
- assets/js/blocks/attribute-filter/edit.js +10 -11
- assets/js/blocks/cart-checkout/cart/attributes.js +6 -7
- assets/js/blocks/cart-checkout/cart/checkout-button/index.js +8 -6
- assets/js/blocks/cart-checkout/cart/edit.js +3 -28
- assets/js/blocks/cart-checkout/cart/frontend.js +21 -19
- assets/js/blocks/cart-checkout/cart/full-cart/{cart-line-item-row.tsx → cart-line-item-row.js} +23 -32
- assets/js/blocks/cart-checkout/cart/full-cart/{cart-line-items-table.tsx → cart-line-items-table.js} +12 -11
- assets/js/blocks/cart-checkout/cart/full-cart/{cart-line-items-title.tsx → cart-line-items-title.js} +6 -5
- assets/js/blocks/cart-checkout/cart/full-cart/{index.tsx → index.js} +51 -80
- assets/js/blocks/cart-checkout/cart/full-cart/style.scss +6 -10
- assets/js/blocks/cart-checkout/cart/test/__snapshots__/block.js.snap +0 -2219
- assets/js/blocks/cart-checkout/cart/test/block.js +0 -54
- assets/js/blocks/cart-checkout/checkout/attributes.js +2 -6
- assets/js/blocks/cart-checkout/checkout/block.js +6 -3
- assets/js/blocks/cart-checkout/checkout/checkout-order-error/index.js +1 -7
- assets/js/blocks/cart-checkout/checkout/edit.js +3 -28
- assets/js/blocks/cart-checkout/checkout/form/billing-fields-step.js +4 -3
- assets/js/blocks/cart-checkout/checkout/form/contact-fields-step.js +8 -7
- assets/js/blocks/cart-checkout/checkout/form/login-prompt.js +2 -2
- assets/js/blocks/cart-checkout/checkout/form/order-notes-step.js +7 -5
- assets/js/blocks/cart-checkout/checkout/form/payment-method-step.js +6 -4
- assets/js/blocks/cart-checkout/checkout/form/shipping-fields-step.js +3 -3
- assets/js/blocks/cart-checkout/checkout/form/{shipping-options-step.tsx → shipping-options-step.js} +7 -11
- assets/js/blocks/cart-checkout/checkout/frontend.js +47 -26
- assets/js/blocks/cart-checkout/checkout/sidebar/index.js +33 -55
- assets/js/blocks/cart-checkout/checkout/sidebar/test/__snapshots__/index.js.snap +0 -167
- assets/js/blocks/cart-checkout/checkout/sidebar/test/index.js +0 -27
- assets/js/blocks/cart-checkout/checkout/style.scss +0 -5
- assets/js/blocks/cart-checkout/payment-methods/express-payment-methods.js +6 -77
- assets/js/blocks/cart-checkout/payment-methods/express-payment/cart-express-payment.js +9 -38
- assets/js/blocks/cart-checkout/payment-methods/express-payment/checkout-express-payment.js +23 -50
- assets/js/blocks/cart-checkout/payment-methods/payment-method-error-boundary.js +1 -1
- assets/js/blocks/cart-checkout/payment-methods/payment-method-options.js +5 -2
- assets/js/blocks/featured-category/block.js +2 -2
- assets/js/blocks/featured-category/example.js +2 -2
- assets/js/blocks/featured-category/index.js +2 -2
- assets/js/blocks/featured-product/block.js +2 -2
- assets/js/blocks/featured-product/example.js +2 -2
- assets/js/blocks/featured-product/index.js +2 -2
- assets/js/blocks/handpicked-products/block.js +3 -4
- assets/js/blocks/handpicked-products/index.js +2 -2
- assets/js/blocks/price-filter/edit.js +2 -2
- assets/js/blocks/product-best-sellers/block.js +0 -5
- assets/js/blocks/product-categories/block.js +6 -13
- assets/js/blocks/product-categories/index.js +1 -21
- assets/js/blocks/product-categories/style.scss +0 -3
- assets/js/blocks/product-category/block.js +0 -6
- assets/js/blocks/product-new/block.js +0 -5
- assets/js/blocks/product-on-sale/block.js +0 -5
- assets/js/blocks/product-search/block.js +1 -1
- assets/js/blocks/product-search/index.js +1 -20
- assets/js/blocks/product-tag/block.js +2 -7
- assets/js/blocks/product-tag/index.js +3 -3
- assets/js/blocks/product-top-rated/block.js +0 -5
- assets/js/blocks/products-by-attribute/block.js +0 -6
- assets/js/blocks/products-by-attribute/index.js +3 -3
- assets/js/blocks/products/all-products/block.js +0 -4
- assets/js/blocks/products/all-products/edit.js +2 -7
- assets/js/blocks/products/attributes.js +3 -3
- assets/js/blocks/reviews/all-reviews/index.js +1 -22
- assets/js/blocks/reviews/edit-utils.js +7 -5
- assets/js/blocks/reviews/editor-block.js +2 -4
- assets/js/blocks/reviews/frontend-block.js +2 -4
- assets/js/blocks/reviews/reviews-by-category/edit.js +9 -10
- assets/js/blocks/reviews/reviews-by-product/edit.js +3 -3
- assets/js/blocks/reviews/utils.js +2 -4
- assets/js/blocks/single-product/frontend.js +0 -2
- assets/js/data/cart/action-types.ts +0 -1
- assets/js/data/cart/actions.ts +3 -53
- assets/js/data/cart/controls.js +0 -15
- assets/js/data/cart/index.ts +2 -3
- assets/js/data/shared-controls.ts +25 -125
- assets/js/data/types.ts +0 -36
- assets/js/editor-components/expandable-search-list-item/expandable-search-list-item.tsx +0 -60
- assets/js/editor-components/grid-layout-control/index.js +24 -23
- assets/js/editor-components/product-attribute-term-control/index.js +41 -72
- assets/js/editor-components/product-attribute-term-control/style.scss +12 -1
- assets/js/editor-components/product-category-control/index.js +15 -20
- assets/js/editor-components/product-category-control/style.scss +11 -0
- assets/js/editor-components/product-control/index.js +95 -64
- assets/js/editor-components/product-control/style.scss +1 -1
- assets/js/editor-components/product-tag-control/index.js +14 -27
- assets/js/editor-components/product-tag-control/style.scss +11 -0
- assets/js/editor-components/products-control/index.js +1 -14
- assets/js/editor-components/utils/index.js +7 -10
- assets/js/hocs/index.js +1 -1
- assets/js/hocs/test/with-categories.js +1 -1
- assets/js/hocs/test/with-searched-products.js +2 -5
- assets/js/hocs/with-categories.js +2 -2
- assets/js/hocs/with-rest-api-hydration.js +2 -2
- assets/js/hocs/with-searched-products.js +2 -2
- assets/js/hocs/with-store-cart-api-hydration.js +6 -11
- assets/js/icons/stories/index.js +6 -7
- assets/js/middleware/cart-update.ts +3 -27
- assets/js/middleware/store-api-nonce.js +15 -35
- assets/js/previews/cart.ts +33 -38
- assets/js/previews/categories.js +2 -2
- assets/js/previews/grid-block.js +7 -276
LICENSE
DELETED
@@ -1,674 +0,0 @@
|
|
1 |
-
GNU GENERAL PUBLIC LICENSE
|
2 |
-
Version 3, 29 June 2007
|
3 |
-
|
4 |
-
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
5 |
-
Everyone is permitted to copy and distribute verbatim copies
|
6 |
-
of this license document, but changing it is not allowed.
|
7 |
-
|
8 |
-
Preamble
|
9 |
-
|
10 |
-
The GNU General Public License is a free, copyleft license for
|
11 |
-
software and other kinds of works.
|
12 |
-
|
13 |
-
The licenses for most software and other practical works are designed
|
14 |
-
to take away your freedom to share and change the works. By contrast,
|
15 |
-
the GNU General Public License is intended to guarantee your freedom to
|
16 |
-
share and change all versions of a program--to make sure it remains free
|
17 |
-
software for all its users. We, the Free Software Foundation, use the
|
18 |
-
GNU General Public License for most of our software; it applies also to
|
19 |
-
any other work released this way by its authors. You can apply it to
|
20 |
-
your programs, too.
|
21 |
-
|
22 |
-
When we speak of free software, we are referring to freedom, not
|
23 |
-
price. Our General Public Licenses are designed to make sure that you
|
24 |
-
have the freedom to distribute copies of free software (and charge for
|
25 |
-
them if you wish), that you receive source code or can get it if you
|
26 |
-
want it, that you can change the software or use pieces of it in new
|
27 |
-
free programs, and that you know you can do these things.
|
28 |
-
|
29 |
-
To protect your rights, we need to prevent others from denying you
|
30 |
-
these rights or asking you to surrender the rights. Therefore, you have
|
31 |
-
certain responsibilities if you distribute copies of the software, or if
|
32 |
-
you modify it: responsibilities to respect the freedom of others.
|
33 |
-
|
34 |
-
For example, if you distribute copies of such a program, whether
|
35 |
-
gratis or for a fee, you must pass on to the recipients the same
|
36 |
-
freedoms that you received. You must make sure that they, too, receive
|
37 |
-
or can get the source code. And you must show them these terms so they
|
38 |
-
know their rights.
|
39 |
-
|
40 |
-
Developers that use the GNU GPL protect your rights with two steps:
|
41 |
-
(1) assert copyright on the software, and (2) offer you this License
|
42 |
-
giving you legal permission to copy, distribute and/or modify it.
|
43 |
-
|
44 |
-
For the developers' and authors' protection, the GPL clearly explains
|
45 |
-
that there is no warranty for this free software. For both users' and
|
46 |
-
authors' sake, the GPL requires that modified versions be marked as
|
47 |
-
changed, so that their problems will not be attributed erroneously to
|
48 |
-
authors of previous versions.
|
49 |
-
|
50 |
-
Some devices are designed to deny users access to install or run
|
51 |
-
modified versions of the software inside them, although the manufacturer
|
52 |
-
can do so. This is fundamentally incompatible with the aim of
|
53 |
-
protecting users' freedom to change the software. The systematic
|
54 |
-
pattern of such abuse occurs in the area of products for individuals to
|
55 |
-
use, which is precisely where it is most unacceptable. Therefore, we
|
56 |
-
have designed this version of the GPL to prohibit the practice for those
|
57 |
-
products. If such problems arise substantially in other domains, we
|
58 |
-
stand ready to extend this provision to those domains in future versions
|
59 |
-
of the GPL, as needed to protect the freedom of users.
|
60 |
-
|
61 |
-
Finally, every program is threatened constantly by software patents.
|
62 |
-
States should not allow patents to restrict development and use of
|
63 |
-
software on general-purpose computers, but in those that do, we wish to
|
64 |
-
avoid the special danger that patents applied to a free program could
|
65 |
-
make it effectively proprietary. To prevent this, the GPL assures that
|
66 |
-
patents cannot be used to render the program non-free.
|
67 |
-
|
68 |
-
The precise terms and conditions for copying, distribution and
|
69 |
-
modification follow.
|
70 |
-
|
71 |
-
TERMS AND CONDITIONS
|
72 |
-
|
73 |
-
0. Definitions.
|
74 |
-
|
75 |
-
"This License" refers to version 3 of the GNU General Public License.
|
76 |
-
|
77 |
-
"Copyright" also means copyright-like laws that apply to other kinds of
|
78 |
-
works, such as semiconductor masks.
|
79 |
-
|
80 |
-
"The Program" refers to any copyrightable work licensed under this
|
81 |
-
License. Each licensee is addressed as "you". "Licensees" and
|
82 |
-
"recipients" may be individuals or organizations.
|
83 |
-
|
84 |
-
To "modify" a work means to copy from or adapt all or part of the work
|
85 |
-
in a fashion requiring copyright permission, other than the making of an
|
86 |
-
exact copy. The resulting work is called a "modified version" of the
|
87 |
-
earlier work or a work "based on" the earlier work.
|
88 |
-
|
89 |
-
A "covered work" means either the unmodified Program or a work based
|
90 |
-
on the Program.
|
91 |
-
|
92 |
-
To "propagate" a work means to do anything with it that, without
|
93 |
-
permission, would make you directly or secondarily liable for
|
94 |
-
infringement under applicable copyright law, except executing it on a
|
95 |
-
computer or modifying a private copy. Propagation includes copying,
|
96 |
-
distribution (with or without modification), making available to the
|
97 |
-
public, and in some countries other activities as well.
|
98 |
-
|
99 |
-
To "convey" a work means any kind of propagation that enables other
|
100 |
-
parties to make or receive copies. Mere interaction with a user through
|
101 |
-
a computer network, with no transfer of a copy, is not conveying.
|
102 |
-
|
103 |
-
An interactive user interface displays "Appropriate Legal Notices"
|
104 |
-
to the extent that it includes a convenient and prominently visible
|
105 |
-
feature that (1) displays an appropriate copyright notice, and (2)
|
106 |
-
tells the user that there is no warranty for the work (except to the
|
107 |
-
extent that warranties are provided), that licensees may convey the
|
108 |
-
work under this License, and how to view a copy of this License. If
|
109 |
-
the interface presents a list of user commands or options, such as a
|
110 |
-
menu, a prominent item in the list meets this criterion.
|
111 |
-
|
112 |
-
1. Source Code.
|
113 |
-
|
114 |
-
The "source code" for a work means the preferred form of the work
|
115 |
-
for making modifications to it. "Object code" means any non-source
|
116 |
-
form of a work.
|
117 |
-
|
118 |
-
A "Standard Interface" means an interface that either is an official
|
119 |
-
standard defined by a recognized standards body, or, in the case of
|
120 |
-
interfaces specified for a particular programming language, one that
|
121 |
-
is widely used among developers working in that language.
|
122 |
-
|
123 |
-
The "System Libraries" of an executable work include anything, other
|
124 |
-
than the work as a whole, that (a) is included in the normal form of
|
125 |
-
packaging a Major Component, but which is not part of that Major
|
126 |
-
Component, and (b) serves only to enable use of the work with that
|
127 |
-
Major Component, or to implement a Standard Interface for which an
|
128 |
-
implementation is available to the public in source code form. A
|
129 |
-
"Major Component", in this context, means a major essential component
|
130 |
-
(kernel, window system, and so on) of the specific operating system
|
131 |
-
(if any) on which the executable work runs, or a compiler used to
|
132 |
-
produce the work, or an object code interpreter used to run it.
|
133 |
-
|
134 |
-
The "Corresponding Source" for a work in object code form means all
|
135 |
-
the source code needed to generate, install, and (for an executable
|
136 |
-
work) run the object code and to modify the work, including scripts to
|
137 |
-
control those activities. However, it does not include the work's
|
138 |
-
System Libraries, or general-purpose tools or generally available free
|
139 |
-
programs which are used unmodified in performing those activities but
|
140 |
-
which are not part of the work. For example, Corresponding Source
|
141 |
-
includes interface definition files associated with source files for
|
142 |
-
the work, and the source code for shared libraries and dynamically
|
143 |
-
linked subprograms that the work is specifically designed to require,
|
144 |
-
such as by intimate data communication or control flow between those
|
145 |
-
subprograms and other parts of the work.
|
146 |
-
|
147 |
-
The Corresponding Source need not include anything that users
|
148 |
-
can regenerate automatically from other parts of the Corresponding
|
149 |
-
Source.
|
150 |
-
|
151 |
-
The Corresponding Source for a work in source code form is that
|
152 |
-
same work.
|
153 |
-
|
154 |
-
2. Basic Permissions.
|
155 |
-
|
156 |
-
All rights granted under this License are granted for the term of
|
157 |
-
copyright on the Program, and are irrevocable provided the stated
|
158 |
-
conditions are met. This License explicitly affirms your unlimited
|
159 |
-
permission to run the unmodified Program. The output from running a
|
160 |
-
covered work is covered by this License only if the output, given its
|
161 |
-
content, constitutes a covered work. This License acknowledges your
|
162 |
-
rights of fair use or other equivalent, as provided by copyright law.
|
163 |
-
|
164 |
-
You may make, run and propagate covered works that you do not
|
165 |
-
convey, without conditions so long as your license otherwise remains
|
166 |
-
in force. You may convey covered works to others for the sole purpose
|
167 |
-
of having them make modifications exclusively for you, or provide you
|
168 |
-
with facilities for running those works, provided that you comply with
|
169 |
-
the terms of this License in conveying all material for which you do
|
170 |
-
not control copyright. Those thus making or running the covered works
|
171 |
-
for you must do so exclusively on your behalf, under your direction
|
172 |
-
and control, on terms that prohibit them from making any copies of
|
173 |
-
your copyrighted material outside their relationship with you.
|
174 |
-
|
175 |
-
Conveying under any other circumstances is permitted solely under
|
176 |
-
the conditions stated below. Sublicensing is not allowed; section 10
|
177 |
-
makes it unnecessary.
|
178 |
-
|
179 |
-
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
180 |
-
|
181 |
-
No covered work shall be deemed part of an effective technological
|
182 |
-
measure under any applicable law fulfilling obligations under article
|
183 |
-
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
184 |
-
similar laws prohibiting or restricting circumvention of such
|
185 |
-
measures.
|
186 |
-
|
187 |
-
When you convey a covered work, you waive any legal power to forbid
|
188 |
-
circumvention of technological measures to the extent such circumvention
|
189 |
-
is effected by exercising rights under this License with respect to
|
190 |
-
the covered work, and you disclaim any intention to limit operation or
|
191 |
-
modification of the work as a means of enforcing, against the work's
|
192 |
-
users, your or third parties' legal rights to forbid circumvention of
|
193 |
-
technological measures.
|
194 |
-
|
195 |
-
4. Conveying Verbatim Copies.
|
196 |
-
|
197 |
-
You may convey verbatim copies of the Program's source code as you
|
198 |
-
receive it, in any medium, provided that you conspicuously and
|
199 |
-
appropriately publish on each copy an appropriate copyright notice;
|
200 |
-
keep intact all notices stating that this License and any
|
201 |
-
non-permissive terms added in accord with section 7 apply to the code;
|
202 |
-
keep intact all notices of the absence of any warranty; and give all
|
203 |
-
recipients a copy of this License along with the Program.
|
204 |
-
|
205 |
-
You may charge any price or no price for each copy that you convey,
|
206 |
-
and you may offer support or warranty protection for a fee.
|
207 |
-
|
208 |
-
5. Conveying Modified Source Versions.
|
209 |
-
|
210 |
-
You may convey a work based on the Program, or the modifications to
|
211 |
-
produce it from the Program, in the form of source code under the
|
212 |
-
terms of section 4, provided that you also meet all of these conditions:
|
213 |
-
|
214 |
-
a) The work must carry prominent notices stating that you modified
|
215 |
-
it, and giving a relevant date.
|
216 |
-
|
217 |
-
b) The work must carry prominent notices stating that it is
|
218 |
-
released under this License and any conditions added under section
|
219 |
-
7. This requirement modifies the requirement in section 4 to
|
220 |
-
"keep intact all notices".
|
221 |
-
|
222 |
-
c) You must license the entire work, as a whole, under this
|
223 |
-
License to anyone who comes into possession of a copy. This
|
224 |
-
License will therefore apply, along with any applicable section 7
|
225 |
-
additional terms, to the whole of the work, and all its parts,
|
226 |
-
regardless of how they are packaged. This License gives no
|
227 |
-
permission to license the work in any other way, but it does not
|
228 |
-
invalidate such permission if you have separately received it.
|
229 |
-
|
230 |
-
d) If the work has interactive user interfaces, each must display
|
231 |
-
Appropriate Legal Notices; however, if the Program has interactive
|
232 |
-
interfaces that do not display Appropriate Legal Notices, your
|
233 |
-
work need not make them do so.
|
234 |
-
|
235 |
-
A compilation of a covered work with other separate and independent
|
236 |
-
works, which are not by their nature extensions of the covered work,
|
237 |
-
and which are not combined with it such as to form a larger program,
|
238 |
-
in or on a volume of a storage or distribution medium, is called an
|
239 |
-
"aggregate" if the compilation and its resulting copyright are not
|
240 |
-
used to limit the access or legal rights of the compilation's users
|
241 |
-
beyond what the individual works permit. Inclusion of a covered work
|
242 |
-
in an aggregate does not cause this License to apply to the other
|
243 |
-
parts of the aggregate.
|
244 |
-
|
245 |
-
6. Conveying Non-Source Forms.
|
246 |
-
|
247 |
-
You may convey a covered work in object code form under the terms
|
248 |
-
of sections 4 and 5, provided that you also convey the
|
249 |
-
machine-readable Corresponding Source under the terms of this License,
|
250 |
-
in one of these ways:
|
251 |
-
|
252 |
-
a) Convey the object code in, or embodied in, a physical product
|
253 |
-
(including a physical distribution medium), accompanied by the
|
254 |
-
Corresponding Source fixed on a durable physical medium
|
255 |
-
customarily used for software interchange.
|
256 |
-
|
257 |
-
b) Convey the object code in, or embodied in, a physical product
|
258 |
-
(including a physical distribution medium), accompanied by a
|
259 |
-
written offer, valid for at least three years and valid for as
|
260 |
-
long as you offer spare parts or customer support for that product
|
261 |
-
model, to give anyone who possesses the object code either (1) a
|
262 |
-
copy of the Corresponding Source for all the software in the
|
263 |
-
product that is covered by this License, on a durable physical
|
264 |
-
medium customarily used for software interchange, for a price no
|
265 |
-
more than your reasonable cost of physically performing this
|
266 |
-
conveying of source, or (2) access to copy the
|
267 |
-
Corresponding Source from a network server at no charge.
|
268 |
-
|
269 |
-
c) Convey individual copies of the object code with a copy of the
|
270 |
-
written offer to provide the Corresponding Source. This
|
271 |
-
alternative is allowed only occasionally and noncommercially, and
|
272 |
-
only if you received the object code with such an offer, in accord
|
273 |
-
with subsection 6b.
|
274 |
-
|
275 |
-
d) Convey the object code by offering access from a designated
|
276 |
-
place (gratis or for a charge), and offer equivalent access to the
|
277 |
-
Corresponding Source in the same way through the same place at no
|
278 |
-
further charge. You need not require recipients to copy the
|
279 |
-
Corresponding Source along with the object code. If the place to
|
280 |
-
copy the object code is a network server, the Corresponding Source
|
281 |
-
may be on a different server (operated by you or a third party)
|
282 |
-
that supports equivalent copying facilities, provided you maintain
|
283 |
-
clear directions next to the object code saying where to find the
|
284 |
-
Corresponding Source. Regardless of what server hosts the
|
285 |
-
Corresponding Source, you remain obligated to ensure that it is
|
286 |
-
available for as long as needed to satisfy these requirements.
|
287 |
-
|
288 |
-
e) Convey the object code using peer-to-peer transmission, provided
|
289 |
-
you inform other peers where the object code and Corresponding
|
290 |
-
Source of the work are being offered to the general public at no
|
291 |
-
charge under subsection 6d.
|
292 |
-
|
293 |
-
A separable portion of the object code, whose source code is excluded
|
294 |
-
from the Corresponding Source as a System Library, need not be
|
295 |
-
included in conveying the object code work.
|
296 |
-
|
297 |
-
A "User Product" is either (1) a "consumer product", which means any
|
298 |
-
tangible personal property which is normally used for personal, family,
|
299 |
-
or household purposes, or (2) anything designed or sold for incorporation
|
300 |
-
into a dwelling. In determining whether a product is a consumer product,
|
301 |
-
doubtful cases shall be resolved in favor of coverage. For a particular
|
302 |
-
product received by a particular user, "normally used" refers to a
|
303 |
-
typical or common use of that class of product, regardless of the status
|
304 |
-
of the particular user or of the way in which the particular user
|
305 |
-
actually uses, or expects or is expected to use, the product. A product
|
306 |
-
is a consumer product regardless of whether the product has substantial
|
307 |
-
commercial, industrial or non-consumer uses, unless such uses represent
|
308 |
-
the only significant mode of use of the product.
|
309 |
-
|
310 |
-
"Installation Information" for a User Product means any methods,
|
311 |
-
procedures, authorization keys, or other information required to install
|
312 |
-
and execute modified versions of a covered work in that User Product from
|
313 |
-
a modified version of its Corresponding Source. The information must
|
314 |
-
suffice to ensure that the continued functioning of the modified object
|
315 |
-
code is in no case prevented or interfered with solely because
|
316 |
-
modification has been made.
|
317 |
-
|
318 |
-
If you convey an object code work under this section in, or with, or
|
319 |
-
specifically for use in, a User Product, and the conveying occurs as
|
320 |
-
part of a transaction in which the right of possession and use of the
|
321 |
-
User Product is transferred to the recipient in perpetuity or for a
|
322 |
-
fixed term (regardless of how the transaction is characterized), the
|
323 |
-
Corresponding Source conveyed under this section must be accompanied
|
324 |
-
by the Installation Information. But this requirement does not apply
|
325 |
-
if neither you nor any third party retains the ability to install
|
326 |
-
modified object code on the User Product (for example, the work has
|
327 |
-
been installed in ROM).
|
328 |
-
|
329 |
-
The requirement to provide Installation Information does not include a
|
330 |
-
requirement to continue to provide support service, warranty, or updates
|
331 |
-
for a work that has been modified or installed by the recipient, or for
|
332 |
-
the User Product in which it has been modified or installed. Access to a
|
333 |
-
network may be denied when the modification itself materially and
|
334 |
-
adversely affects the operation of the network or violates the rules and
|
335 |
-
protocols for communication across the network.
|
336 |
-
|
337 |
-
Corresponding Source conveyed, and Installation Information provided,
|
338 |
-
in accord with this section must be in a format that is publicly
|
339 |
-
documented (and with an implementation available to the public in
|
340 |
-
source code form), and must require no special password or key for
|
341 |
-
unpacking, reading or copying.
|
342 |
-
|
343 |
-
7. Additional Terms.
|
344 |
-
|
345 |
-
"Additional permissions" are terms that supplement the terms of this
|
346 |
-
License by making exceptions from one or more of its conditions.
|
347 |
-
Additional permissions that are applicable to the entire Program shall
|
348 |
-
be treated as though they were included in this License, to the extent
|
349 |
-
that they are valid under applicable law. If additional permissions
|
350 |
-
apply only to part of the Program, that part may be used separately
|
351 |
-
under those permissions, but the entire Program remains governed by
|
352 |
-
this License without regard to the additional permissions.
|
353 |
-
|
354 |
-
When you convey a copy of a covered work, you may at your option
|
355 |
-
remove any additional permissions from that copy, or from any part of
|
356 |
-
it. (Additional permissions may be written to require their own
|
357 |
-
removal in certain cases when you modify the work.) You may place
|
358 |
-
additional permissions on material, added by you to a covered work,
|
359 |
-
for which you have or can give appropriate copyright permission.
|
360 |
-
|
361 |
-
Notwithstanding any other provision of this License, for material you
|
362 |
-
add to a covered work, you may (if authorized by the copyright holders of
|
363 |
-
that material) supplement the terms of this License with terms:
|
364 |
-
|
365 |
-
a) Disclaiming warranty or limiting liability differently from the
|
366 |
-
terms of sections 15 and 16 of this License; or
|
367 |
-
|
368 |
-
b) Requiring preservation of specified reasonable legal notices or
|
369 |
-
author attributions in that material or in the Appropriate Legal
|
370 |
-
Notices displayed by works containing it; or
|
371 |
-
|
372 |
-
c) Prohibiting misrepresentation of the origin of that material, or
|
373 |
-
requiring that modified versions of such material be marked in
|
374 |
-
reasonable ways as different from the original version; or
|
375 |
-
|
376 |
-
d) Limiting the use for publicity purposes of names of licensors or
|
377 |
-
authors of the material; or
|
378 |
-
|
379 |
-
e) Declining to grant rights under trademark law for use of some
|
380 |
-
trade names, trademarks, or service marks; or
|
381 |
-
|
382 |
-
f) Requiring indemnification of licensors and authors of that
|
383 |
-
material by anyone who conveys the material (or modified versions of
|
384 |
-
it) with contractual assumptions of liability to the recipient, for
|
385 |
-
any liability that these contractual assumptions directly impose on
|
386 |
-
those licensors and authors.
|
387 |
-
|
388 |
-
All other non-permissive additional terms are considered "further
|
389 |
-
restrictions" within the meaning of section 10. If the Program as you
|
390 |
-
received it, or any part of it, contains a notice stating that it is
|
391 |
-
governed by this License along with a term that is a further
|
392 |
-
restriction, you may remove that term. If a license document contains
|
393 |
-
a further restriction but permits relicensing or conveying under this
|
394 |
-
License, you may add to a covered work material governed by the terms
|
395 |
-
of that license document, provided that the further restriction does
|
396 |
-
not survive such relicensing or conveying.
|
397 |
-
|
398 |
-
If you add terms to a covered work in accord with this section, you
|
399 |
-
must place, in the relevant source files, a statement of the
|
400 |
-
additional terms that apply to those files, or a notice indicating
|
401 |
-
where to find the applicable terms.
|
402 |
-
|
403 |
-
Additional terms, permissive or non-permissive, may be stated in the
|
404 |
-
form of a separately written license, or stated as exceptions;
|
405 |
-
the above requirements apply either way.
|
406 |
-
|
407 |
-
8. Termination.
|
408 |
-
|
409 |
-
You may not propagate or modify a covered work except as expressly
|
410 |
-
provided under this License. Any attempt otherwise to propagate or
|
411 |
-
modify it is void, and will automatically terminate your rights under
|
412 |
-
this License (including any patent licenses granted under the third
|
413 |
-
paragraph of section 11).
|
414 |
-
|
415 |
-
However, if you cease all violation of this License, then your
|
416 |
-
license from a particular copyright holder is reinstated (a)
|
417 |
-
provisionally, unless and until the copyright holder explicitly and
|
418 |
-
finally terminates your license, and (b) permanently, if the copyright
|
419 |
-
holder fails to notify you of the violation by some reasonable means
|
420 |
-
prior to 60 days after the cessation.
|
421 |
-
|
422 |
-
Moreover, your license from a particular copyright holder is
|
423 |
-
reinstated permanently if the copyright holder notifies you of the
|
424 |
-
violation by some reasonable means, this is the first time you have
|
425 |
-
received notice of violation of this License (for any work) from that
|
426 |
-
copyright holder, and you cure the violation prior to 30 days after
|
427 |
-
your receipt of the notice.
|
428 |
-
|
429 |
-
Termination of your rights under this section does not terminate the
|
430 |
-
licenses of parties who have received copies or rights from you under
|
431 |
-
this License. If your rights have been terminated and not permanently
|
432 |
-
reinstated, you do not qualify to receive new licenses for the same
|
433 |
-
material under section 10.
|
434 |
-
|
435 |
-
9. Acceptance Not Required for Having Copies.
|
436 |
-
|
437 |
-
You are not required to accept this License in order to receive or
|
438 |
-
run a copy of the Program. Ancillary propagation of a covered work
|
439 |
-
occurring solely as a consequence of using peer-to-peer transmission
|
440 |
-
to receive a copy likewise does not require acceptance. However,
|
441 |
-
nothing other than this License grants you permission to propagate or
|
442 |
-
modify any covered work. These actions infringe copyright if you do
|
443 |
-
not accept this License. Therefore, by modifying or propagating a
|
444 |
-
covered work, you indicate your acceptance of this License to do so.
|
445 |
-
|
446 |
-
10. Automatic Licensing of Downstream Recipients.
|
447 |
-
|
448 |
-
Each time you convey a covered work, the recipient automatically
|
449 |
-
receives a license from the original licensors, to run, modify and
|
450 |
-
propagate that work, subject to this License. You are not responsible
|
451 |
-
for enforcing compliance by third parties with this License.
|
452 |
-
|
453 |
-
An "entity transaction" is a transaction transferring control of an
|
454 |
-
organization, or substantially all assets of one, or subdividing an
|
455 |
-
organization, or merging organizations. If propagation of a covered
|
456 |
-
work results from an entity transaction, each party to that
|
457 |
-
transaction who receives a copy of the work also receives whatever
|
458 |
-
licenses to the work the party's predecessor in interest had or could
|
459 |
-
give under the previous paragraph, plus a right to possession of the
|
460 |
-
Corresponding Source of the work from the predecessor in interest, if
|
461 |
-
the predecessor has it or can get it with reasonable efforts.
|
462 |
-
|
463 |
-
You may not impose any further restrictions on the exercise of the
|
464 |
-
rights granted or affirmed under this License. For example, you may
|
465 |
-
not impose a license fee, royalty, or other charge for exercise of
|
466 |
-
rights granted under this License, and you may not initiate litigation
|
467 |
-
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
468 |
-
any patent claim is infringed by making, using, selling, offering for
|
469 |
-
sale, or importing the Program or any portion of it.
|
470 |
-
|
471 |
-
11. Patents.
|
472 |
-
|
473 |
-
A "contributor" is a copyright holder who authorizes use under this
|
474 |
-
License of the Program or a work on which the Program is based. The
|
475 |
-
work thus licensed is called the contributor's "contributor version".
|
476 |
-
|
477 |
-
A contributor's "essential patent claims" are all patent claims
|
478 |
-
owned or controlled by the contributor, whether already acquired or
|
479 |
-
hereafter acquired, that would be infringed by some manner, permitted
|
480 |
-
by this License, of making, using, or selling its contributor version,
|
481 |
-
but do not include claims that would be infringed only as a
|
482 |
-
consequence of further modification of the contributor version. For
|
483 |
-
purposes of this definition, "control" includes the right to grant
|
484 |
-
patent sublicenses in a manner consistent with the requirements of
|
485 |
-
this License.
|
486 |
-
|
487 |
-
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
488 |
-
patent license under the contributor's essential patent claims, to
|
489 |
-
make, use, sell, offer for sale, import and otherwise run, modify and
|
490 |
-
propagate the contents of its contributor version.
|
491 |
-
|
492 |
-
In the following three paragraphs, a "patent license" is any express
|
493 |
-
agreement or commitment, however denominated, not to enforce a patent
|
494 |
-
(such as an express permission to practice a patent or covenant not to
|
495 |
-
sue for patent infringement). To "grant" such a patent license to a
|
496 |
-
party means to make such an agreement or commitment not to enforce a
|
497 |
-
patent against the party.
|
498 |
-
|
499 |
-
If you convey a covered work, knowingly relying on a patent license,
|
500 |
-
and the Corresponding Source of the work is not available for anyone
|
501 |
-
to copy, free of charge and under the terms of this License, through a
|
502 |
-
publicly available network server or other readily accessible means,
|
503 |
-
then you must either (1) cause the Corresponding Source to be so
|
504 |
-
available, or (2) arrange to deprive yourself of the benefit of the
|
505 |
-
patent license for this particular work, or (3) arrange, in a manner
|
506 |
-
consistent with the requirements of this License, to extend the patent
|
507 |
-
license to downstream recipients. "Knowingly relying" means you have
|
508 |
-
actual knowledge that, but for the patent license, your conveying the
|
509 |
-
covered work in a country, or your recipient's use of the covered work
|
510 |
-
in a country, would infringe one or more identifiable patents in that
|
511 |
-
country that you have reason to believe are valid.
|
512 |
-
|
513 |
-
If, pursuant to or in connection with a single transaction or
|
514 |
-
arrangement, you convey, or propagate by procuring conveyance of, a
|
515 |
-
covered work, and grant a patent license to some of the parties
|
516 |
-
receiving the covered work authorizing them to use, propagate, modify
|
517 |
-
or convey a specific copy of the covered work, then the patent license
|
518 |
-
you grant is automatically extended to all recipients of the covered
|
519 |
-
work and works based on it.
|
520 |
-
|
521 |
-
A patent license is "discriminatory" if it does not include within
|
522 |
-
the scope of its coverage, prohibits the exercise of, or is
|
523 |
-
conditioned on the non-exercise of one or more of the rights that are
|
524 |
-
specifically granted under this License. You may not convey a covered
|
525 |
-
work if you are a party to an arrangement with a third party that is
|
526 |
-
in the business of distributing software, under which you make payment
|
527 |
-
to the third party based on the extent of your activity of conveying
|
528 |
-
the work, and under which the third party grants, to any of the
|
529 |
-
parties who would receive the covered work from you, a discriminatory
|
530 |
-
patent license (a) in connection with copies of the covered work
|
531 |
-
conveyed by you (or copies made from those copies), or (b) primarily
|
532 |
-
for and in connection with specific products or compilations that
|
533 |
-
contain the covered work, unless you entered into that arrangement,
|
534 |
-
or that patent license was granted, prior to 28 March 2007.
|
535 |
-
|
536 |
-
Nothing in this License shall be construed as excluding or limiting
|
537 |
-
any implied license or other defenses to infringement that may
|
538 |
-
otherwise be available to you under applicable patent law.
|
539 |
-
|
540 |
-
12. No Surrender of Others' Freedom.
|
541 |
-
|
542 |
-
If conditions are imposed on you (whether by court order, agreement or
|
543 |
-
otherwise) that contradict the conditions of this License, they do not
|
544 |
-
excuse you from the conditions of this License. If you cannot convey a
|
545 |
-
covered work so as to satisfy simultaneously your obligations under this
|
546 |
-
License and any other pertinent obligations, then as a consequence you may
|
547 |
-
not convey it at all. For example, if you agree to terms that obligate you
|
548 |
-
to collect a royalty for further conveying from those to whom you convey
|
549 |
-
the Program, the only way you could satisfy both those terms and this
|
550 |
-
License would be to refrain entirely from conveying the Program.
|
551 |
-
|
552 |
-
13. Use with the GNU Affero General Public License.
|
553 |
-
|
554 |
-
Notwithstanding any other provision of this License, you have
|
555 |
-
permission to link or combine any covered work with a work licensed
|
556 |
-
under version 3 of the GNU Affero General Public License into a single
|
557 |
-
combined work, and to convey the resulting work. The terms of this
|
558 |
-
License will continue to apply to the part which is the covered work,
|
559 |
-
but the special requirements of the GNU Affero General Public License,
|
560 |
-
section 13, concerning interaction through a network will apply to the
|
561 |
-
combination as such.
|
562 |
-
|
563 |
-
14. Revised Versions of this License.
|
564 |
-
|
565 |
-
The Free Software Foundation may publish revised and/or new versions of
|
566 |
-
the GNU General Public License from time to time. Such new versions will
|
567 |
-
be similar in spirit to the present version, but may differ in detail to
|
568 |
-
address new problems or concerns.
|
569 |
-
|
570 |
-
Each version is given a distinguishing version number. If the
|
571 |
-
Program specifies that a certain numbered version of the GNU General
|
572 |
-
Public License "or any later version" applies to it, you have the
|
573 |
-
option of following the terms and conditions either of that numbered
|
574 |
-
version or of any later version published by the Free Software
|
575 |
-
Foundation. If the Program does not specify a version number of the
|
576 |
-
GNU General Public License, you may choose any version ever published
|
577 |
-
by the Free Software Foundation.
|
578 |
-
|
579 |
-
If the Program specifies that a proxy can decide which future
|
580 |
-
versions of the GNU General Public License can be used, that proxy's
|
581 |
-
public statement of acceptance of a version permanently authorizes you
|
582 |
-
to choose that version for the Program.
|
583 |
-
|
584 |
-
Later license versions may give you additional or different
|
585 |
-
permissions. However, no additional obligations are imposed on any
|
586 |
-
author or copyright holder as a result of your choosing to follow a
|
587 |
-
later version.
|
588 |
-
|
589 |
-
15. Disclaimer of Warranty.
|
590 |
-
|
591 |
-
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
592 |
-
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
593 |
-
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
594 |
-
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
595 |
-
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
596 |
-
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
597 |
-
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
598 |
-
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
599 |
-
|
600 |
-
16. Limitation of Liability.
|
601 |
-
|
602 |
-
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
603 |
-
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
604 |
-
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
605 |
-
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
606 |
-
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
607 |
-
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
608 |
-
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
609 |
-
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
610 |
-
SUCH DAMAGES.
|
611 |
-
|
612 |
-
17. Interpretation of Sections 15 and 16.
|
613 |
-
|
614 |
-
If the disclaimer of warranty and limitation of liability provided
|
615 |
-
above cannot be given local legal effect according to their terms,
|
616 |
-
reviewing courts shall apply local law that most closely approximates
|
617 |
-
an absolute waiver of all civil liability in connection with the
|
618 |
-
Program, unless a warranty or assumption of liability accompanies a
|
619 |
-
copy of the Program in return for a fee.
|
620 |
-
|
621 |
-
END OF TERMS AND CONDITIONS
|
622 |
-
|
623 |
-
How to Apply These Terms to Your New Programs
|
624 |
-
|
625 |
-
If you develop a new program, and you want it to be of the greatest
|
626 |
-
possible use to the public, the best way to achieve this is to make it
|
627 |
-
free software which everyone can redistribute and change under these terms.
|
628 |
-
|
629 |
-
To do so, attach the following notices to the program. It is safest
|
630 |
-
to attach them to the start of each source file to most effectively
|
631 |
-
state the exclusion of warranty; and each file should have at least
|
632 |
-
the "copyright" line and a pointer to where the full notice is found.
|
633 |
-
|
634 |
-
<one line to give the program's name and a brief idea of what it does.>
|
635 |
-
Copyright (C) <year> <name of author>
|
636 |
-
|
637 |
-
This program is free software: you can redistribute it and/or modify
|
638 |
-
it under the terms of the GNU General Public License as published by
|
639 |
-
the Free Software Foundation, either version 3 of the License, or
|
640 |
-
(at your option) any later version.
|
641 |
-
|
642 |
-
This program is distributed in the hope that it will be useful,
|
643 |
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
644 |
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
645 |
-
GNU General Public License for more details.
|
646 |
-
|
647 |
-
You should have received a copy of the GNU General Public License
|
648 |
-
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
649 |
-
|
650 |
-
Also add information on how to contact you by electronic and paper mail.
|
651 |
-
|
652 |
-
If the program does terminal interaction, make it output a short
|
653 |
-
notice like this when it starts in an interactive mode:
|
654 |
-
|
655 |
-
<program> Copyright (C) <year> <name of author>
|
656 |
-
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
657 |
-
This is free software, and you are welcome to redistribute it
|
658 |
-
under certain conditions; type `show c' for details.
|
659 |
-
|
660 |
-
The hypothetical commands `show w' and `show c' should show the appropriate
|
661 |
-
parts of the General Public License. Of course, your program's commands
|
662 |
-
might be different; for a GUI interface, you would use an "about box".
|
663 |
-
|
664 |
-
You should also get your employer (if you work as a programmer) or school,
|
665 |
-
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
666 |
-
For more information on this, and how to apply and follow the GNU GPL, see
|
667 |
-
<https://www.gnu.org/licenses/>.
|
668 |
-
|
669 |
-
The GNU General Public License does not permit incorporating your program
|
670 |
-
into proprietary programs. If your program is a subroutine library, you
|
671 |
-
may consider it more useful to permit linking proprietary applications with
|
672 |
-
the library. If this is what you want to do, use the GNU Lesser General
|
673 |
-
Public License instead of this License. But first, please read
|
674 |
-
<https://www.gnu.org/licenses/why-not-lgpl.html>.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/css/abstracts/_colors.scss
CHANGED
@@ -5,7 +5,6 @@
|
|
5 |
$no-stock-color: $alert-red;
|
6 |
$low-stock-color: $alert-yellow;
|
7 |
$in-stock-color: $alert-green;
|
8 |
-
$discount-color: $alert-green;
|
9 |
|
10 |
$placeholder-color: var(--global--color-primary, $gray-200);
|
11 |
$input-border-gray: #50575e;
|
5 |
$no-stock-color: $alert-red;
|
6 |
$low-stock-color: $alert-yellow;
|
7 |
$in-stock-color: $alert-green;
|
|
|
8 |
|
9 |
$placeholder-color: var(--global--color-primary, $gray-200);
|
10 |
$input-border-gray: #50575e;
|
assets/css/editor.scss
CHANGED
@@ -48,15 +48,9 @@
|
|
48 |
}
|
49 |
}
|
50 |
|
51 |
-
//
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
}
|
57 |
-
|
58 |
-
.woocommerce-search-list__selected.woocommerce-search-list__selected > ul {
|
59 |
-
list-style: none;
|
60 |
-
margin: 0;
|
61 |
-
padding: 0;
|
62 |
}
|
48 |
}
|
49 |
}
|
50 |
|
51 |
+
// This border has been upstreamed to WooCommerce Admin, so it can be removed
|
52 |
+
// from here once @woocommerce/components gets updated.
|
53 |
+
// https://github.com/woocommerce/woocommerce-admin/pull/5901
|
54 |
+
.woocommerce-search-list__list {
|
55 |
+
border: 1px solid $gray-200;
|
|
|
|
|
|
|
|
|
|
|
|
|
56 |
}
|
assets/img/avatar.jpg
ADDED
Binary file
|
{images/previews → assets/img}/beanie.jpg
RENAMED
File without changes
|
assets/img/block-error.svg
ADDED
@@ -0,0 +1,2727 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<svg
|
2 |
+
width="208.5"
|
3 |
+
height="92"
|
4 |
+
viewBox="0 0 834 368"
|
5 |
+
xmlns="http://www.w3.org/2000/svg"
|
6 |
+
>
|
7 |
+
<g>
|
8 |
+
<g>
|
9 |
+
<path
|
10 |
+
fill="#DCDDDE"
|
11 |
+
d="M77.3,290.2h0.3l0.3,0.1l0.2,0.1l0.4,0.1h0.1l0.4,0.2h0.1l0.2,0.2l0.3,0.2l0,0l0.3,0.3l0.2,0.3l0,0h0.4l2,0.1
|
12 |
+
l2,0.1l2.1,0.2l1.1,0.1l1.1,0.1l1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1,0.1l1.1,0.2l1,0.2l1,0.2l1,0.2l0.9,0.2
|
13 |
+
l0.9,0.2l0.9,0.2l0.9,0.2l0.9,0.2l0.8,0.2l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.2l0.4,0.2
|
14 |
+
l0.4,0.2l0.4,0.2l0.3,0.2l0.4,0.2l0.3,0.2l0.4,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.2,0.3l0.2,0.2h0.2h1.4h0.6l0,0
|
15 |
+
l-0.2-0.3v-0.1l-0.2-0.3v-0.1l-0.1-0.3v-0.1l-0.1-0.3v-0.1l-0.1-0.4v-0.1l0.1-0.3v-0.1l0.1-0.3v-0.1l0.1-0.3l0.1-0.1l0.1-0.2
|
16 |
+
l0.1-0.2l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1
|
17 |
+
l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.4-0.1l0.5-0.1h0.4h0.5h0.4h0.4h0.4h0.4h0.4h0.4h0.4l0.7,0.1l0.7,0.1l0.7,0.1
|
18 |
+
h0.3h0.3h0.3h0.2h0.2h0.2h0.3h0.4h0.8h0.8l0.9-0.1l0.9-0.1l1-0.1l2.2-0.2l2.3-0.2l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l1.3-0.1
|
19 |
+
l1.2-0.1l1.3-0.1h1.2h0.7h0.7h0.7h0.6h0.7h0.6h0.7h0.6h0.7h0.6h0.6l0.6,0.1l0.6,0.1l0.5,0.1l0.6,0.1l0.5,0.1l0.6,0.1l0.5,0.1
|
20 |
+
l0.5,0.1l0.5,0.1l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.2l0.2,0.1l0.2,0.2l0.2,0.2
|
21 |
+
l0.1,0.1l0.2,0.2v0.1l0.2,0.3l0,0l0.2,0.5l0,0l0.1,0.5l0,0l0.1,0.6l0,0l-0.1,0.6l0,0l-0.2,0.5h-0.1l-0.2,0.4h-0.1l-0.1,0.1
|
22 |
+
l1.9,0.3l2.3,0.4l2.2,0.4h1.1l2.5,0.1l2.2,0.1l0.7-0.1l0.6-0.1l0.5-0.1h0.5h0.5h0.6h0.6h0.6h0.6h0.6h0.6h1.1h1.1h1.1h1.1h1.1h5.2
|
23 |
+
h0.4l4-0.2l2-0.1l2-0.1l1.2-0.1l0.1-0.2l0.4-0.4l0.5-0.3l0,0l0.3-0.1l0.4-0.1l0,0l0.4-0.1h0.2h0.4h0.4h2.4h2.4h2.4h2.4h4.8
|
24 |
+
l4.8,0.1l9.5,0.1l4.8,0.1l4.7,0.1h4.8h2.4h2.4h2.4h2.4h2.4h2.4h2.4h2.4h2.4h2.4l2.4-0.1l2.4-0.1l2.4-0.1l2.4-0.1h1.2h1.2h1.2h1.2
|
25 |
+
h1.2h1.2h1.2h1.2h2.5h2.4h2.4h1.2h1.2h0.2h0.2h0.5h0.5l0.5-0.1l0.7-0.1l0.7-0.1l1.4-0.2l1.4-0.2l0.8-0.1l0.7-0.1l0.8-0.1l0.7-0.1
|
26 |
+
l0.8-0.1h0.7h0.7h0.4h0.4h0.4h0.4h0.4h0.4h0.3h0.4h0.4l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.2l0.4,0.2l0.2,0.2l0.2,0.1
|
27 |
+
l0.2,0.1l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.1,0.2l0.2,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.3l0.1,0.2v0.2
|
28 |
+
v0.2v0.2l-0.1,0.3l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.2,0.4l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.2l-0.2,0.2l-0.2,0.2
|
29 |
+
l-0.2,0.2l-0.2,0.2l-0.3,0.2l-0.2,0.1l-0.2,0.1l-0.3,0.1l-0.2,0.1l-0.1,0.1h0.1l0.5,0.1l0.2,0.1l0.3,0.1l0.2,0.1h0.1h0.2l0.7-0.1
|
30 |
+
l0.7-0.1l0.7-0.1l1.5-0.2l1.6-0.2l0.8-0.1l0.8-0.1l0.8-0.1l0.8-0.1h0.1h0.1l0,0l0.2-0.4l0.4-0.4l0,0l0.3-0.2l0.3-0.2l0,0l0.4-0.2
|
31 |
+
h0.1l0.4-0.1h0.1l0.3-0.1h0.2h0.4h0.4h0.4h0.4h0.4h0.4h0.7l0.8,0.1l0.8,0.1l1.6,0.1l0.8,0.1h0.7h0.6h0.2h0.2h1.4h1.5h2.9h1.4h1.4
|
32 |
+
h0.7h0.7h0.7h0.7l1.9-0.1l1.9-0.1l1.8-0.1l1.9-0.1l1.9-0.1l1.9-0.1l3.8-0.3l3.7-0.3l2-0.1l1.9-0.1l1.9-0.1l1.9-0.1l2-0.1l1.9-0.1
|
33 |
+
h0.7h0.7h1.4h1.4h1.4h2.7h1.3h1.3h0.5h0.5h0.6h0.7l1.5-0.1l1.4-0.1h0.7h0.7h0.5h0.2h0.3h0.2h0.3h0.1l0.5,0.1h0.1l0.3,0.1l0.3,0.2
|
34 |
+
l0,0l0.5,0.4l0.4,0.5l0,0l0.2,0.5l0.2,0.5v0.5v0.5l0,0l-0.2,0.5L404,306l-0.2,0.4h-0.1l-0.2,0.3l-0.3,0.2l0,0l-0.5,0.3h-0.1
|
35 |
+
l-0.3,0.1l-0.2,0.1l-0.3,0.1l-1.3,0.4l-1.2,0.3l-1.3,0.3l-1.4,0.3l-1.3,0.3l-1.4,0.3l-1.3,0.3l-1.4,0.3l-1.3,0.3l-1.4,0.3
|
36 |
+
l-2.6,0.5l-5,1l-3.5,0.7h-0.2l2-0.1l2.1-0.1l2.1-0.1l2-0.1h1.8h1.6h0.8h0.6h0.2h0.6l0.9-0.1l1.1-0.1h0.7h0.7h0.7h0.7h0.8h0.8h0.8
|
37 |
+
h0.8h0.8l0.8,0.1l0.8,0.1h0.4h0.4l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1
|
38 |
+
l0.4,0.2l0.4,0.2l0.3,0.2l0.4,0.2l0.4,0.3l0.2,0.2l0.2,0.2l0.2,0.2l0.1,0.2l0.2,0.2l0.1,0.2l0.1,0.2l0.1,0.3l0.1,0.3l0.1,0.3
|
39 |
+
l0.1,0.3v0.3l0.1,0.3v0.3l-0.1,0.3v0.3l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.2,0.4l-0.2,0.4l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.3,0.3
|
40 |
+
l-0.2,0.3l-0.3,0.2l-0.3,0.2l-0.3,0.2L407,323l-0.4,0.2l-0.3,0.2l-0.3,0.2l-0.4,0.2l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1
|
41 |
+
l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.5,0.1l-0.8,0.1l-0.9,0.1
|
42 |
+
l-0.9,0.1l-0.9,0.1l-1,0.1h-0.9h-0.9h-1h-1h-1h-1h-1.1h-1h-1.1h-1h-1.1h-1l-1.1-0.1l-1-0.1l-1-0.1l-1.1-0.1l-1.2-0.1v0.1v0.3v0.1
|
43 |
+
l-0.1,0.3v0.1l-0.1,0.3l-0.1,0.2l-0.1,0.3l-0.1,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.3,0.2l-0.2,0.2l-0.3,0.2
|
44 |
+
l-0.2,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.4,0.1l-0.7,0.2
|
45 |
+
l-0.7,0.2l-0.7,0.2l-0.7,0.2l-0.7,0.2l-0.7,0.2l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.6,0.1l-0.7,0.1l-0.5,0.1l-1.1,0.1
|
46 |
+
l-0.9,0.1l-0.8,0.1l-0.7,0.1h-0.5h-0.6h-0.7h-0.7h-0.8h-0.7h-0.8h-0.8h-0.8h-0.8h-0.9h-0.9H349h-0.9h-0.9h-0.9h-1l-0.9-0.1l-1-0.1
|
47 |
+
l-1.1-0.1l-1-0.1l-1-0.1l-1.1-0.1l-1.1-0.1l-1-0.1l-1.1-0.1l-1.1-0.1l-1.1-0.2l-1.1-0.2l-1.1-0.2l-1.1-0.2l-1.1-0.2l-1.1-0.2
|
48 |
+
l-1.1-0.2l-1.1-0.2l-1-0.2l-1.1-0.3l-1-0.3l-1.1-0.3l-1-0.3l-1-0.3l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2
|
49 |
+
l-0.5-0.2l-0.5-0.2l-0.4-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.4-0.2l-0.4-0.2l-0.5-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2
|
50 |
+
l-0.4-0.2l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.3-0.3l-0.4-0.3l-0.4-0.3
|
51 |
+
l-0.3-0.3l-0.3-0.3l-0.1-0.1l-0.6,0.1l-0.9,0.1l-1,0.1l-1,0.1l-1,0.1l-1,0.1l-1,0.1l-1,0.1l-1,0.1l-1,0.1l-1,0.1l-1.1,0.1l-1,0.1
|
52 |
+
h-0.9h-1h-1.2l-0.1,0.3l0,0l-0.3,0.4l-0.3,0.4l-0.4,0.3l0,0l-0.4,0.2l-0.3,0.2h-0.1l-0.5,0.1h-0.1h-0.4h-0.2h-0.3h-1.5h-1.5h-2.9
|
53 |
+
h-3l-2.9-0.1l-2.9-0.1l-2.9-0.1l-5.8-0.2l-5.7-0.2l-2.9-0.1l-2.9-0.1l-2.9-0.1h-2.8h-2.9h-1.4h-1.4h-2.1h-2.1h-2.1h-2.1h-2.1h-1.1
|
54 |
+
h-1.1h-1.1H225h-1.1h-1.1h-0.3h-0.3h-0.8h-1.8h-1h-1h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.2-0.1l-0.2-0.1
|
55 |
+
l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.3-0.1l-0.3-0.1l-0.2-0.1l-0.2-0.2l-0.1-0.1l-0.2-0.2l-0.1-0.1l-0.2-0.3l-0.1-0.1l-0.2-0.4
|
56 |
+
l-0.1-0.1l-0.2-0.4v-0.1l-0.2-0.5v-0.1l-0.1-0.5v-0.1l0.1-0.5v-0.1l0.1-0.4l0.1-0.1l0.1-0.4l0.1-0.1l0.1-0.3l0.1-0.1l0.2-0.2
|
57 |
+
l0.1-0.2l0.2-0.3l0.2-0.2l0.4-0.4l0.4-0.3l0.3-0.3h-0.2h-0.1l-0.7,0.3l-0.7,0.3l-0.7,0.3l-0.8,0.3l-0.8,0.3l-0.7,0.3l-0.8,0.3
|
58 |
+
l-0.8,0.3l-0.8,0.3l-0.8,0.3l-0.8,0.3l-0.8,0.3l-1.6,0.5l-1.7,0.5l-1.6,0.5l-1.7,0.5l-1.7,0.5l-1.7,0.5l-1.7,0.5l-1.7,0.4
|
59 |
+
l-1.6,0.4l-1.6,0.4l-1.6,0.4l-2.2,0.6l0.2,0.6l0.1,0.1l0.1,0.4l0.1,0.4v0.1v0.4v0.1l0.1,0.1l0.2,0.3l0.1,0.3l0.1,0.3l0.1,0.3
|
60 |
+
l0.1,0.3v0.3l0.1,0.3l-0.1,0.3v0.2v0.2l-0.1,0.2v0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2
|
61 |
+
l-0.1,0.2l-0.1,0.2l-0.2,0.2l-0.1,0.2l-0.1,0.2l-0.3,0.3l-0.3,0.3l-0.3,0.3l-0.4,0.3l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2
|
62 |
+
l-0.4,0.2l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1H175h-0.4h-0.4h-0.4h-0.4H173h-0.8h-0.8h-0.8
|
63 |
+
h-0.8H169h-0.8l-1.5-0.1l-1.5-0.1h-0.7h-0.7h-0.6h-0.6H162h-0.2h-0.2l-6.1,0.5l-3.1,0.2l-3.1,0.2l-3.1,0.2l-3.1,0.2l-3.1,0.2
|
64 |
+
l-3.1,0.2l-3.1,0.2l-1.5,0.1l-1.5,0.1l-1.5,0.1l-1.5,0.1l-1.5,0.1l-1.5,0.1l-1.5,0.1h-1.6h-1.5h-1.5h-1.5h-1.5h-1.5h-1.5h-0.4
|
65 |
+
h-0.4h-0.2l-0.4-0.1h-0.1l-0.5-0.2l0,0l-0.5-0.3l-0.4-0.4l-0.3-0.4l0,0l-0.3-0.6l-0.2-0.6v-0.6l0.1-0.6l0.2-0.6l0,0l0.2-0.4
|
66 |
+
l0.3-0.3l0.4-0.3l0,0l0.5-0.3l0,0l0.3-0.1l0.2-0.1l0.4-0.1l0.3-0.1l0.4-0.1l0.7-0.1l0.9-0.1l1-0.1l2.1-0.3l2.2-0.3l2-0.3l0.9-0.1
|
67 |
+
l0.7-0.1l1-0.1l0.9-0.1l0.9-0.1l1-0.1l1.9-0.2l1.9-0.2l1.9-0.2l1.9-0.2l1.9-0.2l0.9-0.1l0.9-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.4-0.1
|
68 |
+
l0.6-0.2l1.2-0.3l1.2-0.3l1.2-0.3l1.2-0.3l1.1-0.3l-1.2-0.1l-2.2-0.2l-1.1-0.1l-1.1-0.1l-1.1-0.1l-0.9-0.1l-1-0.1l-0.9-0.1
|
69 |
+
l-0.9-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.7-0.1l-0.7-0.1l-0.5-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.2-0.1l-0.3-0.1
|
70 |
+
l-0.3-0.2l-0.2-0.1l-0.2-0.2l-0.1-0.1l-0.4-0.4l-0.1-0.1l-0.3-0.4l0,0l-0.2-0.3l0,0l-0.2-0.5l0,0l-0.1-0.5l0,0v-0.5l0,0l0.1-0.5
|
71 |
+
l0,0l0.2-0.4l0,0l0.2-0.4l0,0l0.3-0.4l0.1-0.1l0.3-0.3h-0.4h-0.7h-0.7h-0.7h-0.3h-0.3h-0.2h-0.3l-0.5-0.1l-0.5-0.1l-0.5-0.1
|
72 |
+
l-0.6-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.3-0.2l-0.2-0.1l-0.2-0.2l-0.1-0.1l-0.4-0.4
|
73 |
+
l-0.1-0.1l-0.3-0.5h-0.1l-0.2-0.5l0,0l-0.1-0.4v-0.4l0,0V314l0.1-0.4l0,0l0,0h-0.4l-0.8,0.1l-0.7,0.1h-0.7h-0.7h-0.7h-0.7h-0.8
|
74 |
+
h-0.7h-1.4h-1.4h-1.4h-1.4h-1.4h-1.4l-2.7-0.1l-2.5-0.1h-1.2h-1.2h-1.1h-1.1H76.9h-0.2h-0.4h-0.8h-0.9h-0.9h-0.4h-0.4h-0.4h-0.4
|
75 |
+
h-0.3h-0.2l-0.4-0.1l-0.4-0.1l0,0l-0.5-0.3l-0.4-0.4l-0.4-0.5l0,0l-0.2-0.5l-0.2-0.6v-0.6l0.1-0.6l0,0l0.2-0.6l0.4-0.5l0.4-0.4
|
76 |
+
l0,0l0.4-0.2L71,308h0.1l0.3-0.1h0.1l0.2-0.1l0.7-0.2l0.7-0.2l0.7-0.1l0.2-0.1l-0.1-0.1l-0.3-0.5l0,0l-0.2-0.5l-0.1-0.5l-0.1-0.6
|
77 |
+
l0.1-0.6l0.2-0.5h0.1l0.3-0.5l0.5-0.5l0,0l0.5-0.3H75l0.4-0.2l0.2-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l-0.3-0.1
|
78 |
+
l-0.5-0.4l-0.5-0.4h-0.1h-0.9h-0.9h-0.9H73h-0.9l-0.9-0.1l-0.9-0.1l-0.9-0.1l-0.9-0.1l-0.7-0.1l-0.5,0.1l-0.6,0.1h-0.5h-0.6h-0.5
|
79 |
+
h-0.6H64h-0.5h-0.6h-0.5h-0.6h-0.5h-1.1h-1.1h-1l-1.1-0.1l-1.9-0.1l-1.8-0.1h-0.8h-0.7h-0.7h-0.5h-0.4h-0.9l-2.8,0.1l-3.9,0.2
|
80 |
+
l-4.3,0.2l-2.2,0.1l-2.1,0.1l-2,0.1l-1.8,0.1h-0.8h-0.7H28h-0.6h-0.5h-0.5h-0.3h-0.2l-0.4-0.1l0,0l-0.4-0.1l-0.4-0.2l0,0l-0.4-0.3
|
81 |
+
L24,300l-0.3-0.4l0,0l-0.2-0.5l-0.1-0.5v-0.1v-0.3l-0.1-0.1v-0.3l0.1-0.1v-0.3l0.1-0.1l0.1-0.3v-0.1l0.1-0.3l0.1-0.1l0.1-0.3
|
82 |
+
l0.1-0.1l0.1-0.2l0.1-0.2l0.2-0.3l0.3-0.3l0.2-0.3l0.3-0.2l0.2-0.2l0.3-0.2L26,294l0.3-0.2l0.3-0.1l0.3-0.1l0.3-0.1l0,0h-0.5h-0.6
|
83 |
+
h-0.3h-0.3h-0.3h-0.3l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.4-0.1l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2
|
84 |
+
l-0.3-0.3l-0.2-0.3l-0.3-0.3l-0.2-0.3l-0.2-0.4l-0.2-0.4l-0.1-0.4l-0.1-0.4l-0.1-0.4v-0.4l-0.1-0.4l0.1-0.4v-0.4l0.1-0.4l0.1-0.3
|
85 |
+
l0.1-0.3l0.1-0.2l0.1-0.3l0.1-0.2l0.1-0.3l0.1-0.1l0.2-0.3l0.1-0.1l0.2-0.2l0.1-0.1l0.2-0.2l0.1-0.1l0.3-0.2l0.1-0.1l0.2-0.2
|
86 |
+
l0.2-0.1l0.4-0.2l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1h0.4h0.4h0.4h0.3h0.4h0.3h0.4h0.3h0.4l0.3,0.1l0.4,0.1l0.7,0.1l0.7,0.2l0.7,0.2
|
87 |
+
l0.7,0.2l0.7,0.2l0.7,0.2l1.2,0.4l1.2,0.4l0.6,0.2l0.6,0.2l0.5,0.2l0.5,0.1l0.5,0.1l0.4,0.1h0.2h0.2h0.2h0.2l1.7,0.2l1.7,0.2
|
88 |
+
l1.8,0.2l1.8,0.2l3.8,0.5l4,0.5l3.9,0.5l2,0.2l1.8,0.2l1.8,0.2l1.8,0.2l1.7,0.2l1.5,0.1h0.4h0.7h0.5l0.5-0.1l1-0.2l1-0.2l1-0.2
|
89 |
+
l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.4-0.1h0.5h0.4h0.4h0.4L77.3,290.2z M330.2,321.8l-0.7,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1
|
90 |
+
l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1h-0.8h-0.8h-0.8h-0.8h-0.8H316h-0.7h-0.7h-0.7h-0.1
|
91 |
+
l0.2,0.1l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2
|
92 |
+
l0.5,0.1l0.4,0.1l0.9,0.3l0.9,0.3l0.9,0.3l0.9,0.2l0.9,0.2l0.9,0.2l1,0.2l0.9,0.2l1,0.2l1,0.2l1,0.2l1,0.2l1,0.2l1,0.1l1,0.1
|
93 |
+
l1,0.1l1,0.1l1,0.1l1,0.1l1,0.1l0.9,0.1l0.9,0.1l1,0.1l0.9,0.1h0.9h0.9h0.9h0.9h0.9h0.8h0.8h0.8h0.8h0.8h0.8h0.7h0.7h0.6h0.7h0.5
|
94 |
+
h0.4l0.5-0.1l0.8-0.1l0.9-0.1l1-0.1l0.5-0.1l0.6-0.1l0.5-0.1l0.6-0.1l0.5-0.1l0.6-0.1l0.6-0.1l0.5-0.1l0.6-0.1l0.5-0.1l0.5-0.2
|
95 |
+
l0.5-0.2l0.5-0.2l0.2-0.1h-0.1l-0.3-0.1l-0.7-0.2l-0.7-0.2l-0.6-0.2l-0.7-0.2l-0.5-0.1h-0.1H363l-0.4-0.1l-0.5-0.1l-0.7-0.1
|
96 |
+
l-0.8-0.1l-0.9-0.1l-1-0.1h-0.2l-0.7-0.1h-0.2h-0.1h-0.8h-0.8h-0.8h0.2h-1.6H352h-1.7h-0.8h-0.9h-0.8h-0.9H346h-0.8h-0.3h-0.3
|
97 |
+
h-0.4h-0.4h-0.4H343l-0.9,0.1l-0.9,0.1l-1,0.1h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5h-0.3h-0.2h-0.3h-0.2l-0.3-0.1l-0.3-0.1
|
98 |
+
l-0.2-0.1l-0.3-0.1l-0.3-0.1L334,326l-0.2-0.1l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.2-0.3l-0.2-0.3l-0.2-0.2l-0.1-0.2l-0.2-0.2
|
99 |
+
l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.2-0.4l-0.1-0.4l-0.1-0.4V322L330.2,321.8z M172.4,323.5l-0.9,0.1l-1,0.1l-1,0.1h-0.9h-1h-0.9h-0.9
|
100 |
+
h-0.9H164h-1.7h-1.6h-1.4h-0.7h-0.5h-0.5h-0.4l-3.4,0.2h-0.1l2.2,0.2l4.7,0.4l3.6,0.3h0.2l0.7-0.1l0.7-0.1l0.7-0.1l0.7-0.1
|
101 |
+
l0.7-0.1l0.7-0.1l0.7-0.1l0.6-0.1l0.8-0.2l1.2-0.3L172.4,323.5L172.4,323.5z M394.4,320.2h-0.7H393h-0.7h-0.6l-1.1,0.1h-0.8h-0.6
|
102 |
+
h-0.4h-0.5h-0.7h-1.5h-1.8l-2,0.1l-2,0.1l-2.2,0.1l-4.5,0.2l-3,0.1l0.6,0.1l1.9,0.2l1.9,0.2l2,0.1l1,0.1l1,0.1l1,0.1l1,0.1h1h1
|
103 |
+
h0.9h1h1h1h0.9h0.9h0.9h0.9h0.9h0.9l0.9-0.1l0.8-0.1l0.8-0.1l0.8-0.1l0.8-0.1l0.3-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.3-0.1l0.4-0.1
|
104 |
+
l0.3-0.1l0.3-0.1l0.3-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1h0.1h-0.2h-0.3h-0.4h-0.3l-0.7-0.1h-0.7h-0.7h-0.7h-0.7H395h-0.6V320.2z
|
105 |
+
M185.1,311.1v0.5l-0.1,0.5l0,0l-0.2,0.5l-0.3,0.5l0,0l-0.2,0.3l-0.3,0.2l0,0l-0.2,0.2l0,0l0.4,0.4l0.1,0.1l0.2,0.3h0.1l0.2,0.3
|
106 |
+
l0,0l0.1,0.3h0.1l0.1,0.4l0,0l0.1,0.3l0,0l0.1,0.3l0,0l-0.1,0.4v0.1l-0.1,0.5v0.1l-0.2,0.4l-0.1,0.1l-0.2,0.3l-0.1,0.2l-0.2,0.3
|
107 |
+
l-0.2,0.3l-0.2,0.3l-0.3,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.2l-0.4,0.2l1.4-0.4l1.5-0.4l1.6-0.4l1.6-0.4l1.7-0.4l1.6-0.4
|
108 |
+
l1.6-0.5l1.7-0.5l1.6-0.5l1.6-0.5l1.6-0.5l0,0h-0.2l-1.1-0.2l-1.1-0.3l-1-0.3l-1.1-0.3l-1-0.3l-1.1-0.3l-1-0.3l-0.5-0.2l-0.5-0.2
|
109 |
+
l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.4-0.2l-0.2-0.1l-0.2-0.2h-0.1l-0.3-0.2l0,0l-0.4-0.3l0,0l-0.2-0.3l-0.2-0.3h-0.1
|
110 |
+
l-0.1-0.3l-0.5-0.1l-0.8-0.2L185.1,311.1z M222.2,319.9h0.4h1.1h1h1.1h1h1.1l-0.4-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2
|
111 |
+
l-0.4-0.2l0,0h-0.6h-0.2H224h-0.1l-0.4-0.1l-0.2-0.1h-0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1
|
112 |
+
l-0.3,0.1l-0.4,0.1l-0.4,0.1l-0.3,0.2h-0.1h1.6h0.8L222.2,319.9z M297.2,316.3l-2.4,0.3l-2.4,0.3l-2.4,0.3l-4.8,0.6l-4.8,0.6
|
113 |
+
l-2.4,0.3l-2.4,0.3h1h2.9h1.6h1.7h1.7h1.8l1.8-0.1l2-0.1h0.9h0.9l1-0.1l0.9-0.1l1-0.1l0.9-0.1l0.9-0.1l1-0.1l0.9-0.1l0.9-0.1
|
114 |
+
l1-0.1l0.9-0.1l0,0v-0.1l-0.1-0.3v-0.1l-0.1-0.3v-0.1v-0.3v-0.1v-0.3l0,0h-0.8h-1.2L297.2,316.3z M345.5,317.8L343,318l-0.9,0.1
|
115 |
+
l1.2,0.1l1.4,0.1l1.4,0.1h0.1l-0.1-0.2l0,0v-0.4L345.5,317.8z M159.4,308.6l-1.8,0.1l-1.8,0.1l-1.8,0.1h-0.5h-0.9h-1.3h-0.8h-0.8
|
116 |
+
h-0.9h-1h-1h-1.1h-1.1l-1.1,0.1l-1.1,0.1h-0.2l-0.1,0.2l-0.4,0.5l-0.4,0.3h0.1h0.7h0.6h0.6h0.6h0.6h1.1h1.1l1.2-0.1l1.1-0.1
|
117 |
+
l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l2.4-0.2l2.4-0.2l2-0.2l-0.8-0.2L159.4,308.6z M219.2,306.9l-2,0.1l-1.6,0.1l0.2,0.1
|
118 |
+
l0.3,0.2l0.3,0.2l0.4,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2h0.1h0.8l3,0.1l3,0.1l6,0.2l6,0.2l3.5,0.1l3.5,0.1l3.5,0.1h0.1h-0.2
|
119 |
+
l-0.3-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.1-0.1h-0.6l-2-0.1l-2-0.1l-2-0.1l-2-0.1l-2-0.1l-2-0.2l-2-0.2l-0.9-0.1l-0.9-0.1
|
120 |
+
l-0.9-0.1l-0.9-0.1l-1.8-0.2l-1.8-0.2l-1.8-0.2l-1.4-0.2H219.2z M288.8,304.3h-1.2h-0.8l1.2,0.1h0.2l2.5-0.1l2.4-0.1l0,0h-0.8
|
121 |
+
h-1.2h-1.2L288.8,304.3z"
|
122 |
+
/>
|
123 |
+
<path
|
124 |
+
fill="#DCDDDE"
|
125 |
+
d="M582.2,247.8h2.8h1.4h1.4h1.4h1.4h1.4h0.7h0.7h0.7h0.7h0.7h0.7l0.7-0.1l0.7-0.1l0.7-0.1l0.7-0.1l0.7-0.1
|
126 |
+
l0.7-0.1l0.7-0.1l0.7-0.1l0.5-0.1l0.6-0.1l1.1-0.2l1.2-0.1l1.1-0.1l2-0.2l0.8-0.1h0.6l0.5,0.1l0.5,0.2l0.5,0.3l0.4,0.4l0.3,0.5
|
127 |
+
l0.2,0.5l0.1,0.6v0.6l-0.1,0.6l-0.2,0.5l-0.3,0.5l-0.4,0.4l-0.5,0.3l-0.5,0.2l-0.4,0.1h1.2h1.9l0.7-0.1l1.7-0.2l0.9-0.1l0.9-0.1
|
128 |
+
l0.8-0.1l0.9-0.1h0.5h0.5h0.5h0.5h0.5h0.5h0.5h0.5h0.5h0.5h0.5h0.5h0.4l0.4,0.1l0.9,0.1l0.9,0.2l0.9,0.2l0.5,0.1l0.4,0.1l0.4,0.1
|
129 |
+
l0.4,0.1l0.2,0.1l0.2,0.1h0.1l0.3,0.2l0.3,0.2h0.1l0,0h0.2h0.5h0.5h0.5l0.5,0.1l0.5,0.1l0.5,0.1l1.1,0.1l1.1,0.2l1,0.2l1,0.1
|
130 |
+
l0.9,0.1h0.4h0.4h0.3h0.4l0.9,0.1l0.9,0.1l0.9,0.1l0.9,0.1l0.9,0.1l0.9,0.1l0.9,0.1l0.9,0.1l0.9,0.1l0.9,0.1l1.8,0.3h0.1l1-0.1
|
131 |
+
l1.4-0.1l1.4-0.1l0.9-0.1l-0.4-0.2l-0.8-0.4l-0.2-0.1l-0.2-0.1l-0.2-0.2l-0.1-0.1l-0.2-0.2h-0.1l-0.2-0.3h-0.1l-0.3-0.5l0,0
|
132 |
+
l-0.1-0.3l-0.1-0.3l0,0l-0.1-0.4l-0.1-0.4l0,0l0.1-0.4l0.1-0.4l0,0l0.2-0.3l0.2-0.3l0,0l0.4-0.5l0,0l0.4-0.3h0.1l0.2-0.2l0.2-0.1
|
133 |
+
l0.2-0.1l0.3-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1h0.4h0.4h0.4h0.4h0.4h0.4h0.8h0.8h0.8h0.8h0.7h0.7l0.6,0.1l0.7,0.1l0.7,0.1
|
134 |
+
l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.8,0.2h1.1h0.8h0.7h0.7h0.6l1.6,0.1l1.6,0.1l1.6,0.1l1.5,0.1l1.6,0.1l1.5,0.1l1.6,0.1l1.5,0.1
|
135 |
+
l3,0.3l2.6,0.2h0.3h1.8h2.2h1.1h1.1h1.1h1.1h1.1h1.1h1.1h1.1l1.1,0.1l1.1,0.1l1.1,0.1l1.2,0.1l0.4,0.1l0.5,0.1l0.5,0.1h0.1
|
136 |
+
l0.1-0.1l0.2-0.2h0.1l0.4-0.2h0.1l0.2-0.1l0.2-0.1l0.3-0.1l0.3-0.1h0.2h0.2h0.3h0.2h0.3h0.6h0.6l0.6,0.1l0.5,0.2l0.5,0.3l0.5,0.4
|
137 |
+
l0.4,0.4l0.2,0.5l0.2,0.6l0,0h0.2l0.6,0.2l0.6,0.1l1.2,0.1l1.8,0.1l3.6,0.2l1.8,0.1l1.7,0.1l1.8,0.1h0.9h0.8h0.1h0.1h0.1h0.1h0.3
|
138 |
+
h0.3l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.9-0.2l0.9-0.2l1-0.2l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1h0.3h0.2h0.3h0.3
|
139 |
+
h0.2h0.3h0.3l0.4,0.1l0.3,0.1l0.3,0.1l0.4,0.1l0.4,0.2l0.2,0.1l0.2,0.1l0.1,0.1l0.2,0.2l0.1,0.1l0.2,0.2l0.1,0.1l0.2,0.2l0.1,0.1
|
140 |
+
l0.2,0.3l0.1,0.1l0.1,0.3l0.1,0.1l0.1,0.2l0.1,0.1l0.1,0.3l0.1,0.3l0.1,0.4l0.1,0.4v0.3v0.3v0.1l-0.1,0.4v0.1l-0.1,0.4v0.1
|
141 |
+
l-0.1,0.1h0.2h0.9h0.8h0.9h0.9h0.9h0.5h0.6h0.6l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.4,0.1l0.4,0.1l0.3,0.1l0.4,0.1l0.3,0.1l0.4,0.1
|
142 |
+
l0.4,0.1l0.4,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.3,0.2l0.2,0.2l0.1,0.1l0.2,0.2l0,0l0.2,0.3h0.1l0.2,0.3l0.5-0.2l0.9-0.3l0.9-0.3
|
143 |
+
l0.9-0.3l1.6-0.5l2-0.6l1.1-0.3l1.1-0.3l1.1-0.3l1.1-0.3l0.9-0.3l0.9-0.2l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1h0.4h0.3h0.1h0.4h0.1
|
144 |
+
l0.3,0.1l0.3,0.1h0.1l0.4,0.2l0.4,0.2l0.3,0.3h0.1l0.4,0.4l0.2,0.5l0.2,0.5l0.1,0.5l0,0l-0.1,0.6l-0.1,0.5l-0.2,0.5h-0.1l-0.2,0.3
|
145 |
+
l-0.2,0.2h-0.1l-0.3,0.3l-0.1,0.1l-0.2,0.2l-0.4,0.2l-0.4,0.2l-0.6,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.2l-0.6,0.2l-0.5,0.2l-0.6,0.2
|
146 |
+
l-0.5,0.2l-0.6,0.2l-0.6,0.2l-0.5,0.2l-0.6,0.2l-0.6,0.2l-0.6,0.2l-1.2,0.4l-1.2,0.4l-1.2,0.4l-1.2,0.3l-1.2,0.3l0.8,0.1h0.4h7.9
|
147 |
+
h4h3.9h1.9h1.2h1.5h1.5h0.8h0.8h0.8h0.9l0.9,0.1l0.9,0.1l0.8,0.1l0.9,0.1l0.9,0.1l0.8,0.1l0.9,0.1l0.8,0.1l0.8,0.1l0.4,0.1
|
148 |
+
l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.3,0.1l0.4,0.1l0.4,0.1l0.3,0.2l0.4,0.2l0.3,0.2l0.4,0.2
|
149 |
+
l0.3,0.2l0.3,0.3l0.2,0.2l0.2,0.2l0.2,0.3l0.1,0.2l0.2,0.3v0.1l0.1,0.3l0.1,0.1l0.1,0.5v0.1v0.6v0.1v0.3l-0.1,0.3v0.1l-0.1,0.3
|
150 |
+
l-0.2,0.3l0,0l-0.2,0.3l-0.2,0.3l0,0l-0.4,0.3l0,0l-0.4,0.3h-0.1l-0.3,0.1H804l-0.2,0.1l-0.2,0.1l-0.2,0.1h-0.2h-0.3h-0.4h-0.4
|
151 |
+
h-0.4h-0.4h-0.4h-0.4H800l-0.8-0.1l-0.9-0.1l-1.7-0.3l-0.8-0.1h-0.4H795h-0.3h-0.3h-0.2H794h-2.6h-2.5h-1.2h-1.2h-1.2h-1.2h-1.2
|
152 |
+
l-1.2-0.1H781h-0.6h-0.7h-0.6l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1
|
153 |
+
l-1.4-0.2l-1.4-0.3l-1.5-0.3l-3.3-0.6h-0.2h-3h-4h-3.9h-4h-4h-2h-2h-0.8l-0.4,0.1l-0.7,0.2l-1.4,0.5l-1.4,0.5l-0.8,0.2l-0.7,0.3
|
154 |
+
l-0.8,0.2l-0.7,0.2l-0.8,0.2l-0.8,0.2l-0.8,0.2l-0.8,0.2l-0.8,0.2l-0.4,0.1l-0.4,0.1l-0.3,0.1l-0.3,0.1l-0.7,0.1l-0.7,0.1
|
155 |
+
l-0.7,0.1h-0.8H725h-0.4h-0.4h-0.4h-0.1l-0.7,0.2l-0.7,0.2l-0.7,0.2l-0.7,0.2l-0.7,0.2l-0.7,0.2l-0.7,0.1l-0.7,0.1l-0.7,0.1
|
156 |
+
l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-1.3,0.2l-1.4,0.1l-1.4,0.1
|
157 |
+
l-1.4,0.1l-1.4,0.1l-1.4,0.1l-1.4,0.1h-1.4h-1.4h-1.3h-1.4h-1.4h-1.4H691h-1.3h-1.4H687h-1.4h-1.3l-1.2-0.1l-1.1-0.1l-1.2-0.1
|
158 |
+
h-0.6l-0.5-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-1.4-0.2l-0.7-0.1
|
159 |
+
l-0.8-0.1l-0.8-0.2l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.2l-0.4-0.2l-0.2-0.2l-0.2-0.1
|
160 |
+
l-0.2-0.2l-0.2-0.1l-0.2-0.2l-0.1-0.1l-0.2-0.2l-0.1-0.1l-0.2-0.3l-0.1-0.1l-0.1-0.4l-0.1-0.1l-0.1-0.5v-0.1l-0.1-0.5v-0.1
|
161 |
+
l0.1-0.5v-0.1l0.1-0.5v-0.1l0.2-0.4l0.1-0.1l0.2-0.3l0.1-0.1l0.2-0.3l0.1-0.1l0.2-0.2l0.2-0.1l0.2-0.2l0.2-0.2l0.3-0.2l0.3-0.2
|
162 |
+
l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.1l0.3-0.1l0.4-0.1l0.7-0.3l0.7-0.3l0.7-0.2l0.7-0.2l0.7-0.2l0.7-0.2l0.7-0.2
|
163 |
+
l0.7-0.2l0.7-0.2l0.8-0.2l0.7-0.1l0.8-0.1l0.8-0.1l0.8-0.1l0.8-0.1l0.8-0.1l0.8-0.1h0.1v-0.1v-0.1l0.1-0.4V266l0.1-0.3v-0.1
|
164 |
+
l0.2-0.3v-0.1l0.1-0.1l-0.5-0.1l-0.8-0.1l-0.9-0.1l-0.8-0.2l-0.9-0.2l-0.8-0.2l-0.8-0.2l-0.8-0.2l-0.8-0.2l-0.6-0.2h-0.2h-0.5
|
165 |
+
h-0.5h-0.5l-0.9-0.1l-0.9-0.1l-0.8-0.1L670,263h-0.7l-0.9-0.1l-0.9-0.1l-0.9-0.1l-0.9-0.1l-0.9-0.1l-0.9-0.1h-0.1l-1.2,0.2
|
166 |
+
l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.3,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2l-0.6,0.1l-0.7,0.1l-0.6,0.1l-0.7,0.1l-0.6,0.1l-0.6,0.1h-0.7
|
167 |
+
H649h-0.6h-0.7h-0.6h-0.6h-0.6h-0.6h-0.6h-0.6h-0.6h-0.6h-0.6l-0.6-0.1l-0.5-0.1l-0.6-0.1l-0.6-0.1l-0.5-0.1l-0.6-0.1l-0.5-0.1
|
168 |
+
l-0.6-0.1l-0.5-0.1l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.6-0.2l-0.4-0.2l-3.7,0.5l-2.8,0.3l-2.7,0.3l-0.9,0.1l-0.9,0.1l-0.9,0.1
|
169 |
+
l-0.9,0.1l-0.8,0.1l-0.9,0.1l-0.9,0.1l-0.8,0.1h-0.8h-0.9h-0.8h-0.8l-1.6,0.1H612h-1.6h-1.6h-1.7h-1l-0.5,0.2l-0.7,0.3l-0.7,0.3
|
170 |
+
l-0.7,0.3l-0.7,0.3l-0.7,0.3l-0.7,0.3l-0.7,0.3l-0.7,0.3l-0.8,0.2l-0.7,0.2l-0.7,0.2l-0.8,0.2l-0.7,0.2l-0.8,0.2l-0.7,0.2
|
171 |
+
l-0.8,0.2l-0.8,0.2l-0.7,0.2l-0.8,0.2l-0.8,0.2l-0.8,0.2l-0.8,0.2l-0.8,0.2l-1.5,0.3l-1.5,0.3l-1.5,0.3l-0.7,0.1l-1.1,0.4
|
172 |
+
l-1.3,0.5l-1.3,0.5l-1.3,0.5l-1.3,0.5l-1.3,0.5l-1.3,0.5l-1.4,0.5l-1.4,0.5l-1.3,0.5l-0.7,0.2l-0.7,0.2l-0.7,0.2l-0.7,0.2
|
173 |
+
l-0.7,0.2l-0.7,0.2l-0.7,0.2l-0.7,0.2L564,278l-0.7,0.2l-0.7,0.2l-0.7,0.2l-0.7,0.2l-0.7,0.1l-0.4,0.1l-0.4,0.1l-0.9,0.2l-2.3,0.6
|
174 |
+
l-1.4,0.3l-0.7,0.2l-0.7,0.2l-0.7,0.2l-0.8,0.2l-0.8,0.2l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1h-0.4h-0.4h-0.4
|
175 |
+
H545h-0.4h-0.4h-0.4h-0.4H543h-0.4h-0.4l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.2l-0.4-0.2
|
176 |
+
l-0.4-0.2l-0.4-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.1-0.1l-0.2-0.3l-0.1-0.1l-0.2-0.3l-0.1-0.1l-0.2-0.4v-0.1l-0.1-0.5
|
177 |
+
l-0.1-0.1V277v-0.1v-0.5l0.1-0.1l0.1-0.5v-0.1l0.2-0.4l0.1-0.1l0.2-0.3l0.1-0.1l0.2-0.2l0.1-0.1l0.2-0.2l0.1-0.1l0.2-0.2l0.2-0.2
|
178 |
+
l0.2-0.1l0.2-0.1l0.2-0.1l0.4-0.2l0.4-0.2l0.4-0.1l0.5-0.1l0.4-0.1l0.5-0.1l0.4-0.1l0.5-0.1l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.2
|
179 |
+
l0.8-0.2l0.7-0.2l0.2-0.1l0.3-0.1l1.3-0.4l0.7-0.2l0.6-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.4-0.1l0.4-0.1l0.8-0.1l0.8-0.1
|
180 |
+
l0.7-0.1l1.4-0.2l0.7-0.1l0.7-0.1l0.8-0.1l0.9-0.2l1.1-0.2l1.2-0.2l1.3-0.2l1.3-0.2l1.4-0.2l1.4-0.2l1.4-0.2l1.4-0.2l2.9-0.4
|
181 |
+
l3-0.5l1.5-0.2l1.5-0.2l1.5-0.2h0.2l0.8-0.4l2.5-1.1l2.5-1.1l-0.1-0.1h-9.7h-0.2h-0.2h-0.4h-0.5h-0.6l-1.2,0.1l-0.7,0.1l-0.6,0.1
|
182 |
+
h-0.7h-0.5h-0.3h-0.3h-0.3h-0.3h-0.2l-0.5-0.1h-0.1l-0.3-0.1l-0.3-0.2l0,0l-0.3-0.2l-0.2-0.2h-0.1l-0.1-0.1l-0.5,0.1l-0.7,0.1
|
183 |
+
l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1h-0.7h-0.7h-0.7H561h-0.7h-0.7h-0.7h-0.7h-0.7h-0.7l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1
|
184 |
+
l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-1-0.2l-2.4,0.6l-1.7,0.4l-1.8,0.4
|
185 |
+
l-2,0.4l-2,0.4L534,264l-1.1,0.2l-1.1,0.2l-1.1,0.2l-1.1,0.2l-1.1,0.2l-1.1,0.2l-1.1,0.2l-1.1,0.2l-1.1,0.2L523,266l-1.1,0.2
|
186 |
+
l-1.1,0.2l-1.1,0.1l-1.1,0.1l-1.1,0.1l-1.1,0.1l-1.1,0.1l-1.1,0.1l-1.1,0.1H512h-1.1h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5
|
187 |
+
h-0.5h-0.5l-0.5-0.1l-0.5-0.1l-0.4-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.4-0.1l-0.5-0.1l-0.4-0.1l-0.4-0.1l-0.5-0.1
|
188 |
+
l-0.4-0.1l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.3-0.3
|
189 |
+
l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.2-0.4l-0.3-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.1-0.3l-0.1-0.3l-0.1-0.2v-0.3v-0.2
|
190 |
+
l-0.1-0.3l0.1-0.2v-0.3v-0.2l0.1-0.3v-0.2l0.1-0.3l0.1-0.1l0.1-0.3l0.1-0.1l0.2-0.3l0.1-0.1l0.2-0.2l0.2-0.2l0.3-0.3l0.3-0.3
|
191 |
+
l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.6-0.1
|
192 |
+
l0.6-0.1l0.7-0.1l0.6-0.1h0.6h0.6h0.5h0.3v-0.1l-0.1-0.1l-0.1-0.2l-0.1-0.3l-0.1-0.3v-0.3v-0.3v-0.3l0.1-0.3l0.1-0.3l0.1-0.3
|
193 |
+
l0.1-0.3l0.1-0.2l0.2-0.2l0.1-0.2l0.2-0.2l0.1-0.2l0.2-0.2l0.2-0.2l0.4-0.3l0.4-0.3l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.1
|
194 |
+
l0.4-0.1l0.4-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.6-0.1l0.6-0.1l0.7-0.1l0.7-0.1l0.7-0.1h0.7h0.6h0.6h0.6h0.6
|
195 |
+
h0.6h0.6h1.1h2.2h1.1h1.1h8.9h0.3h0.2h0.2h0.2h0.2h0.2h0.3h0.3l0.5-0.1l0.6-0.1l0.7-0.1l0.6-0.1l0.7-0.1l0.7-0.2l1.4-0.3l0.7-0.2
|
196 |
+
l0.7-0.2l0.7-0.1l0.7-0.1l0.7-0.1l0.4-0.1h0.4h0.4h0.4h0.4h0.4h0.4h0.4h0.4h0.4h0.4h0.4h0.4l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1
|
197 |
+
l0.4,0.1l0.4,0.1l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.3,0.2l0.4,0.3l0.3,0.3l0.4,0.3l0.3,0.3l0.2,0.3l0.3,0.3l0.1,0.2l0.1,0.2
|
198 |
+
l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2v0.2l0.5,0.1l1.5,0.2l1.4,0.2l0.7,0.1l0.6,0.1l0.6,0.1l0.5,0.1
|
199 |
+
l1,0.1l0.9,0.1l1,0.1l1,0.1l0.9,0.1h0.5l0,0l0.2-0.2l0.2-0.2l0.2-0.1l0.2-0.1l0.3-0.1l0.2-0.1l0.2-0.1l0.5-0.2l0.5-0.2l0.5-0.2
|
200 |
+
l0.5-0.2l0.6-0.1l0.5-0.1l0.6-0.1l0.5-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.5-0.1l0.6-0.1l0.5-0.1l0.5-0.1h0.5h0.5h0.5
|
201 |
+
h0.4h1.5L582.2,247.8z M689.3,272.3h-0.8h-0.8h-0.8h-0.8h-0.8l-0.8,0.1l-0.7,0.1l-0.8,0.1l-0.8,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1
|
202 |
+
l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.5,0.1l0.4,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1
|
203 |
+
l0.5,0.1h0.5l1.1,0.1l1.1,0.1l1.1,0.1h1.3h1.3h1.3h1.3h1.3h1.3h1.3h1.3h1.3h1.3h1.3h1.3l1.3-0.1l1.3-0.1l1.3-0.1l1.2-0.1l1.3-0.1
|
204 |
+
l1.3-0.1l1.3-0.1l0.6-0.1l0.7-0.1l0.7-0.1l0.6-0.1h0.2h-1.4h-1.5H706h-1.5H703h-1.5H700l-1.2-0.1l-1.2-0.1l-1.3-0.1h-0.7H695
|
205 |
+
l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.6-0.1l-0.5-0.1L689.3,272.3z M504.5,259h-0.4h-0.5h-0.5h-0.5
|
206 |
+
h-0.5h-0.5l-0.4,0.1l-0.5,0.1l-0.4,0.1h-0.2H500l0.2,0.1l0.1,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1
|
207 |
+
l0.2,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1h0.4h0.4h0.4h0.4h0.4
|
208 |
+
h0.4h0.5h0.4h0.5h0.4h0.5h0.5h0.9h1l1-0.1l1-0.1l1-0.1l1.1-0.1l1.1-0.1l1.1-0.1l1.1-0.1l1.1-0.1l1-0.1l-1-0.1l-1.1-0.1l-1.1-0.1
|
209 |
+
l-2.1-0.2l-2.1-0.3l-2.1-0.2l-1-0.1l-1-0.1l-1-0.1l-1-0.1l-1-0.1l-0.9-0.1h-0.2h-0.5h-0.7h-0.8L504.5,259L504.5,259z M624.9,258.1
|
210 |
+
l-0.1,0.2l1.5-0.2h0.1l0,0H624.9L624.9,258.1L624.9,258.1z M707.9,257.6l0.5,0.1l0.5,0.1l0.6,0.1l0.7,0.1l1.2,0.2l1.4,0.2h0.2
|
211 |
+
l0.3-0.1l0,0l-0.4-0.2l-0.4-0.2l0,0l-0.9-0.1l-2.3-0.1l-2-0.1h-0.2H707.9z"
|
212 |
+
/>
|
213 |
+
</g>
|
214 |
+
<g transform="matrix(0.998358,0.0572833,-0.0572833,0.998358,15.545,-79.3702)">
|
215 |
+
<g>
|
216 |
+
<g>
|
217 |
+
<g transform="matrix(1,0,0,1,398.965,43.2222)">
|
218 |
+
<path
|
219 |
+
fill="#0096FF"
|
220 |
+
d="M73.8,141.4c0.7,0.2-1.1-1-1.5-1.6c-0.9-1.5,2.2-4.9,2.2-4.9c3.4-5.2,7.1-9.9,11-14.8
|
221 |
+
c1.8-2.2,2.9-7.9,5.5-6.6c2.4,1.2-12.2,20.2-13.7,21.9c-1.4,1.6-4.4,6.5-4.4,4.4c0-8.8,14.7-31.8,23-34.6
|
222 |
+
c1.9-0.6-1.5,3.8-2.7,5.5c-0.4,0.5-9.3,12.1-11.5,9.9c-1.4-1.4,1.7-7,2.2-7.7c4.6-7.2,10.6-13.6,17-19.2
|
223 |
+
c2.6-2.3,5.1-4.9,7.7-7.1c1.3-1.1,3.8-5,3.8-3.3c0,5-10.9,14.5-14.3,18.1c-1.6,1.7-3.8,6-5.5,4.4c-2.2-2.2,3.5-5.2,5.5-7.7
|
224 |
+
c5.4-6.7,11-13,17.6-18.7c2-1.7,5.3-4.6,7.7-6c2-1.2,6.5-6.5,5.5-4.4c-4.5,9-22.9,15.6-11,5.5c17.2-14.6,33.4-19.6,53.8-26.3
|
225 |
+
c11.7-3.9,17.5-13.2,31.3-10.4c6.4,1.3,14.9,1.8,20.9,3.8c7.3,2.4,14.8,8.8,22.5,8.8c1.3,0-2.6,0.2-3.8,0
|
226 |
+
c-2.5-0.4-4.9-1.3-7.1-2.2c-8.1-3.2-16.5-5-24.7-7.7c-0.7-0.2-1.5-7.1-1.1-7.1c1.3,0,3.6,3.6,5.5,3.8
|
227 |
+
c12.3,1.8,20.7,8.4,32.4,13.7c22.6,10.3,41.6,23.5,58.7,40.6c13.3,13.3,10.8,40,15.9,55.4c2.8,8.5,3.1,19,5.5,28.5
|
228 |
+
c1.2,4.7,4.1,11.7,2.2,17.6c-0.7,2-0.2,4.6-1.6,6c-1,1-11-1.2-12.6-1.6c-12.4-3.1-27.3-1.1-40.1-1.1
|
229 |
+
c-13.3,0-31.3,5.8-42.8,11.5c-5.8,2.9-15.5,0.6-21.9,2.7c-6.1,2-17.2-0.7-23-2.2s-12.2-0.5-18.1-1.6c-9.3-1.9-18.1-5.5-28-7.1
|
230 |
+
c-17.9-3-41,1-58.2,4.4c-4.6,0.9-10.8,3.8-15.4,3.8c-5.9,0-11.9-0.5-17.6-0.5c-0.9,0-8.8,1.5-8.8,0.5c0-6.2,10.5-16.6,12.6-23
|
231 |
+
c6.8-20.3,4-39.2,24.7-51.6c5.3-3.2,16.3-10.1,23-7.1c10.2,4.5-3.5,26.8-5.5,30.7c-1.7,3.4-3.8,6.5-5.5,9.9
|
232 |
+
c-0.3,0.7-5.8,12.5-6.6,14.3c-0.7,1.6-2.4,6-1.1,4.9c24.9-21.4,45.1-47,72.4-65.8c7-4.9,19.9-13.4,28-18.1
|
233 |
+
c2.2-1.3,8.3-5,7.1-2.7c-2.1,4.3-14.3,15-15.4,15.9c-16.6,15-33.5,29.5-51,43.3c-2.1,1.7-10.6,10.4-14.3,8.8
|
234 |
+
c-2.9-1.3,1.7-6.1,3.3-8.8c4-6.8,4-6.4,7.7-13.2c8.7-16.1,18.3-32.5,30.7-46.1c5.2-5.8,9.5-10.4,15.4-15.4
|
235 |
+
c1.4-1.2,5.4-4.6,4.9-2.7c-1.1,4.3-7.7,8.4-11,11.5c-13.9,13.2-21.5,20.4-36.2,32.9c-3.8,3.2-7.6,6.3-11.5,9.3
|
236 |
+
c-0.2,0.2-5.1,4.2-5.1,2c0-2.4,15-17.5,17.4-20c19.7-20.9,43.7-41.6,70.3-53.3c3.7-1.6,36.7-14.9,30.5,1.6
|
237 |
+
c-0.9,2.5-2.2,4.8-3.6,7.1c-1.4,2.5-3,4.9-4.7,7.2c-4.6,6.6-11.3,15.3-16.5,21.4c-0.3,0.3-14.5,16.8-19.2,21.9
|
238 |
+
c-12.9,14.2-25.4,29.2-39,42.8c-2.3,2.3,4.9-4.3,7.1-6.6c4.2-4.4,8.3-8.9,12.6-13.2c17-16.7,34.9-32.5,53.2-47.7
|
239 |
+
c2.5-2.1,10.2-9.4,15.4-10.4c2.3-0.5-1.7,4.5-3.1,6.3c-1.5,2-3,3.9-4.5,5.7c-4.9,5.7-14,15.5-19.2,20.9
|
240 |
+
c-15,15.4-30,30.7-45,46.1c-6.9,7.1-6.8,6.8-13.2,14.3c-0.4,0.5-1.7,1.8-1.1,1.6c8.5-1.7,13-11.5,19.2-17.6
|
241 |
+
c20.5-20.2,41.2-40.1,63.6-58.2c4.9-3.9,14.5-11.4,21.2-15.7c1.4-0.9,14.5-8.4,9.5,0.8c-1.4,2.6-3.1,4.9-4.8,7.3
|
242 |
+
c-2,2.7-4.1,5.4-6.1,8c-5.8,7.5-11.3,14.2-17.6,21.4c-10.5,11.9-24.6,23.5-31.8,37.9c-1,2,3.9-2.3,5.5-3.8
|
243 |
+
c3.3-3.1,6.2-6.6,9.3-9.9c14-14.7,28.3-28.8,44.4-41.2c3.5-2.7,7.2-5.3,11-7.7c2.6-1.7,9.6-6.3,8.8-3.3
|
244 |
+
c-2.5,9.5-15.1,18.9-21.4,25.2c-21.4,21.7-43.1,45.9-67.5,64.2c-2.2,1.6,3.5-4.2,5.5-6c4-3.7,7.9-7.5,12.1-11
|
245 |
+
c16-13.6,32.5-27.1,49.9-39c4.5-3,10.5-7.2,16-9.6c2-0.9,6.8-3,6.5-0.8c-1.6,12-23.9,29.7-30.7,36.8c-5.2,5.4-15.4,9-15.4,16.5
|
246 |
+
c0,1.3,2.5-0.6,3.7-1.1c4.1-1.7,4.3-2,8.3-5.2c9.8-7.6,19-16.1,29.2-23.3c2.8-2,5.8-3.7,8.8-5.5c1-0.6,3-2.8,3.3-1.6
|
247 |
+
c1.5,5.8-14,19.7-16.5,22.5c-2.3,2.7-4.5,5.4-6.6,8.2c-0.8,1.1-2.8,4.6-1.6,3.8c5.1-3.1,8.5-6.5,13.2-10.4c2.4-2,4.7-4.1,7.1-6
|
248 |
+
c1.8-1.5,3.5-3.1,5.5-4.4c14.7-9.8-6,15.4-6,18.7c0,2.5,4.7-1.8,6.6-3.3c2.9-2.3,7.3-7.4,11.9-5.9c3.6,1.2-2.4,11.3-0.9,13.6
|
249 |
+
c2.1,3.1,8.1-3.9,9.3-2.7c0.6,0.6,0.8,5.3,0,6c-2.1,2.1-5.8-4.9-7.1-4.9"
|
250 |
+
/>
|
251 |
+
<path
|
252 |
+
fill="#0096FF"
|
253 |
+
d="M210.4,9.7h1l1,0.1l1.2,0.2l1.2,0.2h0.1l1.3,0.3l1.3,0.4h0.1l1,0.4l1,0.4l0.9,0.4l1.5,0.8l1.2,0.8l1,0.7
|
254 |
+
l0.5,0.4l0.3,0.1l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.3l0.8,0.3l0.7,0.3l0.7,0.3l0.7,0.3l0.7,0.3l0.7,0.3
|
255 |
+
l0.7,0.3l1.3,0.5l1.3,0.6l1.3,0.6l1.2,0.6l1.2,0.6L243,22l1.1,0.6l1.1,0.6l1,0.6l2,1.1l1.9,1l0.9,0.5l0.9,0.5l0.9,0.5l0.9,0.4
|
256 |
+
l0.7,0.3l1.3,0.5l1.4,0.7l1.4,0.7l0.1,0.1l0.9,0.4l1.2,0.5l1.2,0.5l1.1,0.6l1.1,0.6l1.1,0.6l1.1,0.6l1.1,0.6l1.1,0.6l1.1,0.6
|
257 |
+
l1.1,0.6l1.1,0.6l1.1,0.6l1.1,0.6l1.1,0.6l1.1,0.6l1.1,0.6l1.1,0.6l1.1,0.6l1.1,0.6l1.1,0.7l1.1,0.7l1.1,0.7l1.1,0.7l1.1,0.7
|
258 |
+
l1.1,0.7l1,0.7l1,0.7l1,0.7l1,0.7l1,0.7l1,0.7l1,0.7l1,0.7l1,0.7l1,0.7l1,0.7l1,0.8l1,0.8l1,0.8l1,0.8l1,0.8l1,0.8l1,0.8l1,0.8
|
259 |
+
l1,0.8l1,0.8l1,0.8l0.9,0.8L311,64l0.9,0.8l0.9,0.8l0.9,0.8l0.9,0.8l0.9,0.8l0.9,0.9l0.9,0.9l0.9,0.9l0.9,0.9l0.9,0.9l0.9,0.9
|
260 |
+
l0.9,0.9l0.9,0.9l0.5,0.6l0.6,0.6l0.6,0.6l0.5,0.6l0.5,0.6l0.5,0.6l0.5,0.6l0.5,0.6l0.5,0.7l0.5,0.6l0.5,0.6l0.4,0.7l0.4,0.7
|
261 |
+
l0.4,0.7l0.4,0.7l0.4,0.7l0.4,0.7l0.4,0.6l0.4,0.7l0.4,0.7l0.3,0.7l0.3,0.7l0.3,0.7l0.3,0.6l0.3,0.7l0.3,0.7l0.3,0.7l0.3,0.6
|
262 |
+
l0.3,0.7l0.3,0.6l0.2,0.6l0.3,0.7l0.4,1.2l0.4,1.3l0.4,1.3l0.4,1.3l0.4,1.2l0.3,1.2l0.3,1.2l0.3,1.2l0.3,1.2l0.3,1.2l0.2,1.2
|
263 |
+
l0.2,1.2l0.2,1.1l0.2,1.1l0.2,1.1l0.2,1.1l0.2,1.1l0.2,1.1l0.2,1.1l0.2,1.1l0.3,2.1l0.3,2l0.5,3.8l0.2,1.8l0.2,1.7l0.1,0.8
|
264 |
+
l0.1,0.8l0.1,0.8l0.1,0.7l0.1,0.7l0.1,0.7l0.1,0.6l0.1,0.6l0.1,0.6l0.1,0.5l0.1,0.5l0.1,0.5l0.1,0.4l0.1,0.4l0.1,0.3l0.2,0.5
|
265 |
+
l0.3,1l0.4,1.2l0.3,1.2l0.3,1.2l0.3,1.2l0.3,1.2l0.2,1.2l0.2,1.1l0.2,1.1l0.2,1.1l0.2,1.1l0.2,1l0.2,1l0.2,1l0.3,1.9l0.5,3.7
|
266 |
+
l0.3,1.7l0.1,0.8l0.1,0.8l0.1,0.8l0.1,0.7l0.1,0.7l0.1,0.7l0.1,0.7l0.1,0.6l0.1,0.6l0.1,0.6v0.1v0.2l0.2,0.7l0.6,2l0.4,1.2
|
267 |
+
l0.2,0.7l0.2,0.8l0.2,0.8l0.2,0.8l0.2,0.9l0.2,0.9l0.2,1l0.2,1l0.2,1.1l0.2,1.1l0.1,1.2l0.1,1.2l0.1,1.2v0.7v0.7v0.7v0.7v0.7
|
268 |
+
v0.7v0.7l-0.1,0.7l-0.1,0.8l-0.1,0.8l-0.1,0.8l-0.1,0.8l-0.2,0.8l-0.2,0.8l-0.2,0.8l-0.1,0.6l0,0l-0.1,0.9l-0.1,1l-0.1,0.8
|
269 |
+
l-0.2,0.8l-0.2,0.8l-0.2,0.9l-0.3,1l-0.4,1.1l-0.4,1.1l-0.5,1.2l-0.6,1.3l-0.7,1.3l-0.8,1.3l-0.9,1.3l-1.1,1.3l-0.7,0.7l-1,1
|
270 |
+
l-1,0.9h-0.1l-0.9,0.7l-0.9,0.7l-1,0.6h-0.1l-1.3,0.7l-1.3,0.7l-1,0.5l-1.9,0.7l-1.6,0.4l-1.4,0.3l-1.2,0.2l-1.2,0.1l-1.5,0.1
|
271 |
+
H326h-1.2l-1-0.1l-0.9-0.1l-0.9-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-1.4-0.2l-1.4-0.2l-1.3-0.2l-1.2-0.2l-1.1-0.2l-1-0.2
|
272 |
+
l-0.9-0.2l-0.8-0.2l-0.5-0.1l-0.4-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.4-0.1l-0.4-0.1h-0.4h-0.4H305
|
273 |
+
h-0.4h-0.4h-0.4h-0.4H303h-0.4h-0.5h-0.4h-1h-1h-1h-1.1h-1.1h-1.1h-1.1h-1.2h-1.2h-1.2l-2.5,0.1l-2.5,0.1l-2.6,0.1h-1.3h-1.4
|
274 |
+
H279h-1.4h-1.4h-1.3h0.1h-0.3h-0.3H274h-0.4h-0.4h-0.4h-0.4H272h-0.4l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1
|
275 |
+
l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.2
|
276 |
+
l-0.6,0.2l-0.6,0.2l-0.5,0.2l-1.2,0.3l-1.2,0.4l-1.2,0.4l-1.1,0.4l-1.1,0.4l-1.1,0.4l-1.1,0.4l-1.1,0.4l-1.1,0.4l-1,0.4l-1,0.4
|
277 |
+
l-1,0.4l-0.9,0.4l-0.9,0.4l-0.8,0.4l-1,0.5l-0.7,0.3l-0.9,0.4l-0.9,0.4l-0.9,0.3l-0.8,0.3l-0.9,0.3l-0.8,0.2l-0.8,0.2l-0.8,0.2
|
278 |
+
l-0.8,0.2l-0.7,0.2l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-1.2,0.1l-1.2,0.1l-1.1,0.1l-1.1,0.1h-1h-1H223h-0.8h-1.5
|
279 |
+
h-1.3h-0.5h-0.5H218h-0.3h-0.3l0,0h-0.1l-0.9,0.3l-0.9,0.2l-0.9,0.2l-0.9,0.2l-0.8,0.2l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1
|
280 |
+
l-0.7,0.1l-0.7,0.1h-0.7h-0.7h-0.7h-0.7h-0.7h-0.7h-1.2l-1.3-0.1l-1.2-0.1l-1.2-0.1l-1.2-0.1l-1.1-0.1l-1.1-0.2l-1.1-0.2
|
281 |
+
l-1.1-0.2l-1-0.2l-1-0.2l-1-0.2l-1-0.2l-0.9-0.2l-0.9-0.2l-1.7-0.4l-1.6-0.4l-1.4-0.3l-1.1-0.3h-0.1l0,0h-0.1h-0.1h-0.1h-0.2
|
282 |
+
h-0.2H181h-0.3h-0.3h-0.3h-0.3h-0.9h-1h-1.2h-1.3l-1.4-0.1h-0.8h-0.8l-0.8-0.1l-0.9-0.1l-0.9-0.1l-1-0.1l-1-0.1l-1-0.1
|
283 |
+
l-1.1-0.2l-1-0.2l-1.2-0.2l-1.1-0.2l-1.1-0.2l-1.1-0.3l-1.1-0.3l-1-0.3l-1-0.3l-1-0.3l-1.9-0.5l-1.9-0.5l-3.5-1l-1.6-0.5
|
284 |
+
l-1.6-0.5l-0.7-0.2l-0.8-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.1l-0.7-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1
|
285 |
+
l-0.5-0.1l-0.5-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1h-0.6h-0.7h-0.7h-0.7H130h-0.7h-0.7h-0.7h-0.7h-0.7h-0.8h-0.8
|
286 |
+
h-0.8h-0.8h-0.8h-0.8h-0.8h-0.8l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1l-1.7,0.2
|
287 |
+
l-1.7,0.2l-1.7,0.2l-1.7,0.2l-1.7,0.3l-1.7,0.3l-1.7,0.3l-1.7,0.3l-1.7,0.3l-1.7,0.3l-1.6,0.3l-1.6,0.3l-1.6,0.3l-1.6,0.3
|
288 |
+
l-1.5,0.3h-0.1l0,0h-0.1h-0.2l-0.2,0.1l-0.2,0.1l-0.7,0.2l-0.8,0.2l-0.9,0.3l-1,0.3l-1.2,0.4l-1.2,0.4l-0.7,0.2l-0.7,0.2
|
289 |
+
l-0.8,0.2l-0.8,0.2l-0.8,0.2l-0.9,0.2l-0.9,0.2l-1,0.2l-1,0.2l-1.1,0.2l-1.1,0.1l-1.2,0.1l-1.2,0.1H68h-1.5h-1.3h-1.3h-1.3
|
290 |
+
h-1.2l-1.2-0.1l-2.3-0.1l-2.2-0.1h-1h-1h-0.9h-0.9h-0.3l-1.3,0.2l-0.9,0.1l-1,0.1l-1.1,0.1l-1.2,0.1l-0.7,0.1h-0.7h-0.8H43
|
291 |
+
h-1.1l-1.3-0.1l-1.7-0.2l-2-0.4l-1.8-0.5l-0.8-0.3l-1-0.4l-1-0.4h-0.1l-1.3-0.6l-1.2-0.7h-0.1l-1.1-0.7l-1.1-0.8l-1-0.8l0,0
|
292 |
+
l-1.2-1.1l-1.1-1.2l-1-1.2l0,0l-0.9-1.2l-0.8-1.3l-0.7-1.3l-0.6-1.4l0,0l-0.6-1.5l-0.5-1.6l-0.4-1.6l-0.3-1.6l0,0l-0.1-1.2
|
293 |
+
l-0.1-1.2v-1.2l0-0.9l0.1-1.4l0.2-1.3l0.2-1.3l0.2-1.2l0.3-1.1l0.3-1.1l0.3-1l0.3-0.9l0.3-0.9l0.3-0.9l0.3-0.8l0.3-0.8l0.3-0.7
|
294 |
+
l0.4-0.7l0.3-0.7l0.3-0.7l0.3-0.6l0.3-0.6l0.4-0.6l0.7-1.1l0.7-1.1l0.7-1l0.7-1l0.6-0.9l0.6-0.9l1.1-1.6l1.1-1.5l0.5-0.7
|
295 |
+
l0.4-0.6l0.4-0.6l0.3-0.5l0.3-0.4l0.2-0.4l0,0l0.2-0.5l0.2-0.7l0.2-0.7l0.2-0.7l0.2-0.7l0.2-0.7l0.2-0.8l0.2-0.8l0.2-0.8
|
296 |
+
l0.2-0.8l0.2-0.8l0.4-1.7l0.4-1.7l0.8-3.6l0.4-1.9l0.2-1l0.2-1l0.2-1l0.2-1l0.3-1l0.3-1.1l0.3-1.1L38,152l0.3-1.1l0.3-1.1
|
297 |
+
l0.4-1.1l0.4-1.1l0.4-1.2l0.4-1.2l0.5-1.2l0.5-1.2l0.5-1.2l0.5-1.2l0.3-0.7l0.3-0.6l0.3-0.6l0.3-0.6l0.3-0.6l0.3-0.6l0.3-0.6
|
298 |
+
l0.3-0.6l0.4-0.6l0.4-0.6l0.4-0.6l0.4-0.6l0.4-0.6l0.4-0.6l0.4-0.6l0.4-0.6l0.4-0.6l0.4-0.6l0.5-0.6l0.5-0.6l0.5-0.6l0.5-0.6
|
299 |
+
l0.5-0.6l0.5-0.6l0.5-0.6v-0.1v-0.1l0.4-1l0.4-0.9l0.4-0.9l0.4-0.9l0.4-0.9l0.4-0.9l0.4-0.9l0.5-0.9l0.5-0.9l0.5-0.9l0.5-0.9
|
300 |
+
l0.5-0.9l0.5-0.9l0.5-0.9l0,0l0.2-0.7l0.3-0.9l0.3-0.8l0.3-0.8l0.3-0.7l0.3-0.7l0.3-0.7l0.5-1.1l0.5-1l0.5-0.9l0.4-0.8l0.4-0.8
|
301 |
+
l0.4-0.8l0.5-0.8l0.7-1.1l0.6-0.9l0.6-0.9l0.6-0.9l0.6-0.9l0.6-0.9l0.6-0.8l0.6-0.8l0.6-0.8l0.6-0.8l0.7-0.8l0.7-0.8l0.7-0.8
|
302 |
+
l0.7-0.8l0.7-0.8l0.7-0.8l0.7-0.8l0.7-0.7l0.7-0.7l0.7-0.7l0.7-0.7l0.7-0.7l0.7-0.7l0.7-0.7l0.7-0.7l0.7-0.7l0.7-0.7l0.7-0.7
|
303 |
+
l0.7-0.6l0.7-0.6l0.7-0.6l0.6-0.6l0.4-0.3l0.3-0.3l0.3-0.3l0.4-0.3l0.9-0.8l0.9-0.9l1-1l0.2-0.1l0.2-0.3l0.6-0.7l0.6-0.7
|
304 |
+
l0.7-0.7l0.7-0.7l0.1-0.1l0.3-0.6l0.5-1l0.6-1l0.8-1.3l0.9-1.3l0.8-1.1L97,62l0.8-0.9l0.8-0.8l0.8-0.7l0.8-0.7l0.8-0.7l0.8-0.7
|
305 |
+
l0.8-0.7l1-0.8l1-0.8l1-0.8l1-0.8l1-0.8l1-0.7l1-0.7l1-0.7l1-0.7l1-0.7l1-0.7l1-0.7l1-0.7l1-0.6l1-0.6l1-0.6l1-0.6l1-0.6l1-0.6
|
306 |
+
l1-0.6l1-0.6l1-0.5l1-0.5l1-0.5l1-0.5l1-0.5l1-0.5l1-0.5l1-0.5l1-0.5l1-0.4l1-0.4l1-0.4l1-0.4l1-0.4l1-0.4l1-0.4l1-0.4l1-0.4
|
307 |
+
l1-0.4l1.9-0.7l1.9-0.7l1.9-0.7l1.9-0.7l1.9-0.7l1.9-0.7l1.9-0.6l1.9-0.6l3.7-1.2l3.7-1.2l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1
|
308 |
+
l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.3-0.1l0.3-0.2l0.3-0.1l0.7-0.4l0.7-0.4l0.8-0.4l1.7-1l1-0.6
|
309 |
+
l1.1-0.6l1.1-0.6l0.7-0.4l0.6-0.3l0.7-0.3l0.7-0.3l0.7-0.4l0.7-0.3l0.8-0.4l0.8-0.3l0.8-0.3l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.3
|
310 |
+
l0.9-0.3l1-0.3l1-0.3l1-0.2l1-0.2l1.1-0.2l1.1-0.2l1.1-0.2l1.1-0.1l1.1-0.1l1.2-0.1h0.6h0.1l1.4-0.8l1.4-0.7l1.5-0.6l1.5-0.5
|
311 |
+
l1.5-0.4l0,0l1.6-0.3l1.6-0.2l1.6-0.1L210.4,9.7z M55.5,120.7l-0.1,0.1L55.5,120.7L55.5,120.7z"
|
312 |
+
/>
|
313 |
+
</g>
|
314 |
+
<g transform="matrix(1,0,0,1,400.214,44.558)">
|
315 |
+
<path
|
316 |
+
fill="#E2F0FD"
|
317 |
+
d="M184.1,73.1l1.4,0.1l1.3,0.2l1,0.2l0.9,0.2l0.9,0.3l0.9,0.3l0.9,0.4l1,0.5l1,0.5l1,0.6l1,0.7l0.9,0.8
|
318 |
+
l0.9,0.9l0.9,0.9l0.8,1l0.7,1.1l0.7,1.1l0.6,1.1l0.5,1.1l0.4,1l0.3,0.9l0.2,0.7l0.2,0.7l0.2,0.7l0.1,0.7l0.1,0.7l0.1,0.7
|
319 |
+
l0.1,0.7l0.1,0.7l0.1,0.7V94v0.7v0.7v0.7v0.7v0.7l-0.1,0.7l-0.1,0.7l-0.1,0.7l-0.1,0.7l-0.1,0.7l-0.1,0.6l-0.1,0.6l-0.2,0.6
|
320 |
+
l-0.2,0.6L202,104l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.5l-0.2,0.6l-0.2,0.5l-0.2,0.5l-0.2,0.5l-0.3,0.6l-0.5,0.9
|
321 |
+
l-0.5,1l-0.5,0.9l-0.5,0.9l-0.6,0.9l-0.6,0.9l-0.6,0.8l-0.6,0.8l-0.6,0.8l-0.6,0.8l-0.6,0.7l-0.6,0.7l-0.6,0.7l-0.6,0.7
|
322 |
+
l-0.6,0.7l-0.6,0.7l-0.6,0.6l-0.6,0.6l-0.6,0.6l-0.6,0.6l-0.6,0.6l-0.6,0.6l-0.6,0.6l-0.6,0.6l-1.1,1l-1.1,1l-1.1,1l-1.9,1.7
|
323 |
+
l-1.7,1.5l-0.7,0.6l-0.6,0.6l-0.5,0.5l-0.2,0.2l-0.2,0.2l-0.4,0.4l-0.5,0.4l-0.5,0.4l-0.5,0.4l-0.5,0.4l-0.5,0.3l-0.5,0.3
|
324 |
+
l-0.5,0.3l-0.5,0.3l-0.6,0.3l-0.6,0.2l-0.6,0.2l-0.6,0.2l-0.6,0.2l-0.6,0.2l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1h-0.6
|
325 |
+
h-0.6l0,0l-0.5,0.3l-0.9,0.4l-0.8,0.4l-0.9,0.3l-0.9,0.3l-0.9,0.3l-0.9,0.3l-1,0.2l-1,0.2l-1,0.2l-1,0.1l-1,0.1h-1h-1.1h-1.1
|
326 |
+
l-1.1-0.1l-1-0.1l-1-0.2l-1-0.2l-1-0.3l-1-0.3l-1-0.4l-0.9-0.4l-0.9-0.4l-0.9-0.5l-0.8-0.5l-0.8-0.5l-0.8-0.5l-0.7-0.5
|
327 |
+
l-0.7-0.6l-0.7-0.6l-0.6-0.6l-0.6-0.6l-0.6-0.6l-0.3-0.4l-1-0.2l-1.1-0.3l-1.1-0.4l-1.1-0.4l-1-0.5l-0.9-0.5l-0.9-0.5l-0.9-0.6
|
328 |
+
l-0.8-0.6l-0.7-0.6l-0.7-0.6l-0.6-0.6l-0.6-0.6l-0.5-0.6l-0.5-0.6l-0.5-0.6l-0.4-0.6l-0.4-0.6l-0.4-0.6l-0.4-0.6l-0.5-0.9
|
329 |
+
l-0.5-1l-0.4-1l-0.4-0.9l-0.3-0.9l-0.3-0.9l-0.3-0.9l-0.2-0.8l-0.2-0.8l-0.2-0.8l-0.2-0.8l-0.2-0.8l-0.1-0.8l-0.1-0.7l-0.1-0.7
|
330 |
+
l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7v-0.7v-0.7v-0.7l-0.1-1.2v-1.2l0-1.2V101v-1.1l0.1-1.1v-0.6l0.1-0.6
|
331 |
+
l0.1-0.6l0.1-0.6l0.1-0.7l0.1-0.8l0.2-1l0.4-1.4l0.3-0.8l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.3-0.5v-0.1l0.3-0.5l0.3-0.5
|
332 |
+
l0.3-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.4l0.4-0.4l0.5-0.4l0.5-0.4l0.5-0.4l0.5-0.4l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.3
|
333 |
+
l0.5-0.3l0.6-0.2l0.6-0.2l0.6-0.2l0.6-0.2l0.6-0.2l0.6-0.2l0.6-0.1l0.6-0.1l0.6-0.1h0.4l0.3-0.2l0.5-0.4l0.5-0.4l0.5-0.3
|
334 |
+
l0.5-0.3l0.5-0.3l0,0l0.5-0.3l0.5-0.3l0.5-0.3l0.6-0.2l0.6-0.2l0.6-0.2l0.6-0.2l0.6-0.2l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1
|
335 |
+
l0.6-0.1h0.6h0.6h0.6h0.6h0.6l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.2l0.3,0.2
|
336 |
+
l0.3-0.3l0.5-0.5l0.5-0.5l0.6-0.5l0.6-0.5l0.7-0.5l0.7-0.5l0.8-0.6l0.9-0.6l1-0.6l1.1-0.6l1.2-0.6l1.3-0.5l1.2-0.4l1.1-0.3
|
337 |
+
l1.2-0.2l1.2-0.2l1.3-0.1h1.3h1.4l1.4,0.1l1.4,0.2l1.4,0.3l1.5,0.5l1.4,0.6l1.3,0.7l1.3,0.8l0.1,0.1l0.6-0.1l1-0.1l1.1-0.1h1.2
|
338 |
+
L184.1,73.1z"
|
339 |
+
/>
|
340 |
+
</g>
|
341 |
+
<g transform="matrix(1,0,0,1,400.214,44.558)">
|
342 |
+
<path
|
343 |
+
fill="#E2F0FD"
|
344 |
+
d="M104.3,122.6h0.2h0.2h0.2h0.2h0.1h0.2h0.2h0.2h0.2h0.2h0.1h0.2h0.2l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0,0
|
345 |
+
l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.1,0.1l0,0l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1
|
346 |
+
l0.1,0.1l0,0l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0,0l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2
|
347 |
+
l0.1,0.2v0.2l0,0v0.2v0.2v0.2v0.2v0.2v0.2l0,0.3v0.5v0.4l-0.1,0.6l-0.1,0.6l-0.1,0.6l-0.1,0.6l-0.1,0.6l-0.1,0.6l-0.2,0.6
|
348 |
+
l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.5l-0.3,0.5l-0.3,0.5
|
349 |
+
l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.4,0.5l-0.4,0.4l-0.2,0.3l-0.2,0.2l-0.3,0.3
|
350 |
+
l-0.3,0.3l-0.3,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.5,0.2l-0.5,0.2l-0.3,0.1l-0.2,0.1H100h-0.2h-0.1h-0.2h-0.2h-0.2H99h-0.2
|
351 |
+
h-0.1h-0.1h-0.2h-0.1h-0.2H98l-0.2,0.1l-0.4,0.2l-0.5,0.2l-0.5,0.2l-0.6,0.2l-0.6,0.2l-0.4,0.1h-0.2h-0.2h-0.2H94h-0.2h-0.2
|
352 |
+
h-0.2h-0.2H93h-0.2h-0.2h-0.2l-0.4-0.1l-0.5-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2
|
353 |
+
l-0.3-0.3l-0.5-0.4l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.3-0.5l-0.3-0.6l-0.3-0.6l-0.2-0.6l-0.2-0.6l-0.1-0.6l-0.1-0.6v-0.6v-0.6
|
354 |
+
v-0.6l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.2-0.5l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3
|
355 |
+
l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.5-0.5l0.5-0.5l0.5-0.5l0.5-0.5l0.5-0.4l0.4-0.4l0.4-0.4l0.4-0.4l0.8-0.6l0.6-0.5
|
356 |
+
l0.5-0.4l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.3-0.2l0.8-0.6l0.5-0.4l0.6-0.4l0.6-0.4l0.7-0.4l0.7-0.4l0.4-0.2
|
357 |
+
l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.5-0.2l0.6-0.2l0.4-0.1l0.4-0.1l0.5-0.1L104.3,122.6z"
|
358 |
+
/>
|
359 |
+
</g>
|
360 |
+
<g transform="matrix(1,0,0,1,400.214,44.558)">
|
361 |
+
<path
|
362 |
+
fill="#E2F0FD"
|
363 |
+
d="M77.7,183.2h0.2h0.2h0.2h0.1h0.2h0.2H79l0.3,0.1l0.5,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.6,0.2l0.6,0.3l0.7,0.3
|
364 |
+
l0.7,0.3l0.7,0.4l0.7,0.4l0.8,0.4l0.8,0.4l0.8,0.4l0.8,0.4l0.8,0.5l1.7,0.9l1.6,0.9l1.6,0.9l1.4,0.9l1.3,0.8l1.1,0.7l0.5,0.3
|
365 |
+
l0.4,0.3l0.4,0.3l0.4,0.3l0.3,0.2l0.2,0.1l0.2,0.1l0.2,0.1l0.1,0.1l0,0l0.2,0.2l0.2,0.2l0.2,0.2l0.1,0.2l0.1,0.2l0.1,0.2
|
366 |
+
l0.1,0.2l0.1,0.2l0.1,0.2l0,0l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3l-0.1,0.2l-0.1,0.3
|
367 |
+
l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.3l-0.2,0.3l-0.1,0.2l-0.1,0.1l-0.1,0.1v0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
|
368 |
+
l0,0l-0.1,0.1l-0.1,0.1l-0.1,0.1H100l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.3,0.2l-0.5,0.3l-0.3,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1
|
369 |
+
l-0.3,0.1l-0.5,0.1l-0.5,0.1h-0.3h-0.2h-0.2h-0.2h-0.1h-0.2H95h-0.2h-0.4l-0.6-0.1l-0.5-0.1l-0.5-0.1l-0.4-0.1l-0.4-0.1
|
370 |
+
l-0.4-0.1l-0.6-0.2l-0.5-0.2l-0.4-0.2H90l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.9,0.1l-0.9,0.1h-0.9h-1h-1h-1h-1h-0.5h-0.5h-0.5h-0.5
|
371 |
+
h-0.5h-0.5l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1
|
372 |
+
l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.4
|
373 |
+
l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.4-0.4l-0.2-0.3l-0.2-0.2l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.3
|
374 |
+
l-0.2-0.3l-0.2-0.4l-0.2-0.4l-0.1-0.5l-0.1-0.5l-0.1-0.5v-0.5v-0.5v-0.5l0.1-0.5l0.1-0.5l0.2-0.5l0.1-0.3l0.1-0.2l0.1-0.2
|
375 |
+
l0.1-0.2l0.1-0.1l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.1l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.3-0.3l0.5-0.4
|
376 |
+
l0.4-0.3l0.4-0.3l0.4-0.2l0.4-0.2l0.4-0.2L66,185l0.4-0.1l0.4-0.1l0.4-0.1l0.3-0.1l0.4-0.1l0.7-0.2l0.7-0.1l0.7-0.1l0.7-0.1
|
377 |
+
l0.7-0.1l0.7-0.1l0.6-0.1h0.6h0.6h0.6h0.4l0.1-0.1l0.2-0.1l0.2-0.1l0.2-0.1h0.1l0.2-0.1l0.2-0.1l0.2-0.1h0.1l0.2-0.1h0.2H77
|
378 |
+
l0.3-0.1l0.6-0.1L77.7,183.2z M82.6,187.1L82.6,187.1h-0.1H82.6z M72.7,185.7L72.7,185.7L72.7,185.7L72.7,185.7z"
|
379 |
+
/>
|
380 |
+
</g>
|
381 |
+
<g transform="matrix(1,0,0,1,400.214,44.558)">
|
382 |
+
<path
|
383 |
+
fill="#0065FF"
|
384 |
+
d="M154.3,188.6l1.6-0.1l1.5-0.1l1.5-0.1h0.7h0.7h0.6l0.6-0.1h0.6l0.6-0.1l0.5-0.1l0.6-0.1l3.9-0.6l2-0.3
|
385 |
+
l2-0.3l2.1-0.3l2.1-0.3l2.1-0.3l2.1-0.3l2.1-0.4l2.1-0.4l2.1-0.4l2.1-0.4l2.1-0.4l1-0.2l1.1-0.2l1.1-0.2l1-0.2l1-0.2l1-0.2
|
386 |
+
l1-0.2l1-0.2l1-0.2l1-0.3l1-0.3l1-0.3l1-0.3l1-0.3l1-0.3l1-0.3l1-0.3l1-0.3l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.3
|
387 |
+
l0.9-0.3l0.9-0.3l0.8-0.3l0.8-0.3l0.8-0.3l0.8-0.3l0.8-0.3l0.8-0.3l0.7-0.3l0.7-0.3l0.7-0.4l0.7-0.3l0.7-0.4l0.7-0.4l0.8-0.5
|
388 |
+
l0.8-0.5l0.8-0.5l0.8-0.5l0.8-0.5l0.8-0.5l0.8-0.5l0.8-0.6l0.8-0.6l0.8-0.6l0.8-0.6l0.8-0.6l0.8-0.6l0.8-0.6l0.8-0.7l0.8-0.7
|
389 |
+
l0.8-0.7l0.8-0.7l0.8-0.7l0.8-0.7l0.8-0.7l0.8-0.7l0.8-0.7l0.8-0.8l0.8-0.8l0.8-0.8l0.8-0.8l0.8-0.8l0.8-0.8l0.8-0.8l0.8-0.8
|
390 |
+
l0.8-0.8l0.8-0.8l0.8-0.8l1.7-1.7l1.6-1.7l1.6-1.7l1.6-1.7l1.6-1.8l3.3-3.5l3.3-3.5l1.7-1.8l1.7-1.8l1.7-1.8l1.7-1.8l1.7-1.7
|
391 |
+
l0.9-0.9l0,0v-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.7l0.1-0.8l0.1-0.8l0.1-0.9l0.1-0.9
|
392 |
+
l0.3-1.9l0.3-2l0.1-1.1l0.2-1.1l0.2-1.1l0.2-1.2l0.2-1.2l0.1-0.7l0.1-0.6l0.1-0.6l0.1-0.7l0.2-0.6l0.2-0.7l0.2-0.7l0.2-0.7
|
393 |
+
l0.2-0.7l0.2-0.7l0.2-0.6l0.2-0.6l0.2-0.6l0.2-0.6l0.2-0.5l0.2-0.5l0.3-0.5l0.3-0.5l0.3-0.5l0.3-0.5l0.3-0.5l0.3-0.5l0.3-0.5
|
394 |
+
l0.3-0.5l0.3-0.5l0.4-0.5l0.4-0.5l0.4-0.4l0.4-0.5l0.4-0.4l0.4-0.4l0.5-0.5l0.8-0.7l0.9-0.8l0.9-0.7l0.9-0.7l0.9-0.6l0.9-0.6
|
395 |
+
l0.9-0.5l0.9-0.5l0.9-0.5l0.9-0.4l0.9-0.4l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.1l0.8-0.1l0.8-0.1
|
396 |
+
l0.8-0.1l0.8-0.1l0.8-0.1h0.8h0.8h0.8h0.7h0.8h0.7h0.7l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.6,0.1
|
397 |
+
l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l1.1,0.3l1.1,0.3l1.1,0.3l1.1,0.4L328,85l0.8,0.3l0.7,0.3l0.7,0.3l0.7,0.4
|
398 |
+
l0.6,0.4l0.6,0.4l0.6,0.4l0.5,0.4l0.5,0.4l0.5,0.4l0.5,0.4l0.8,0.7l0.8,0.8l0.8,0.8l0.7,0.8l0.6,0.8l0.6,0.8l0.6,0.8l0.5,0.7
|
399 |
+
l0.5,0.7l0.5,0.7l0.4,0.7l0.4,0.7l0.4,0.7l0.4,0.7l0.3,0.7l0.3,0.7l0.3,0.7l0.3,0.7l0.3,0.7l0.3,0.7l0.3,0.7l0.3,0.7l0.3,0.7
|
400 |
+
l0.3,0.7l0.5,1.3l0.5,1.3l0.4,1.2l0.4,1.2l0.4,1.2l0.4,1.2l0.3,1.1l0.6,2l0.6,1.8l0.2,0.8l0.2,0.7l0.2,0.6l0.2,0.5l0.1,0.3
|
401 |
+
l0.1,0.2l0.4,1.1l0.5,1.2l0.5,1.2l0.5,1.2l0.5,1.2l0.4,1.2l0.4,1.2l0.4,1.2l0.4,1.2l0.4,1.2l0.4,1.2l0.4,1.2l0.4,1.2l0.4,1.2
|
402 |
+
l0.4,1.2l0.4,1.3l0.4,1.2l0.4,1.3l0.4,1.2l0.3,1.3l0.3,1.3l0.3,1.3l0.3,1.3l0.3,1.3l0.3,1.3l0.3,1.3l0.3,1.3l0.3,1.3l0.3,1.3
|
403 |
+
l0.3,1.3l0.3,1.3l0.2,1.1l0.1,0.2l0.1,0.3l0.1,0.5l0.2,0.7l0.2,0.8l0.2,0.9l0.2,1l0.2,1.1l0.1,0.6l0.1,0.6l0.1,0.7l0.1,0.7
|
404 |
+
l0.1,0.7l0.1,0.8l0.1,0.8l0.1,0.8v0.9v0.9v1l-0.1,1.1l-0.1,1.1l-0.1,0.8l-0.1,0.7l-0.1,0.7l-0.2,0.7l-0.2,0.8l-0.2,0.5
|
405 |
+
l-0.1,0.3v0.1v0.1v0.1l-0.1,0.5l-0.1,0.6l-0.2,0.7l-0.2,0.8l-0.2,0.9l-0.2,1l-0.3,1.1l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.7
|
406 |
+
l-0.2,0.7L361,192l-0.3,0.7l-0.3,0.7l-0.3,0.8l-0.3,0.8l-0.4,0.8l-0.4,0.8l-0.4,0.8l-0.5,0.8l-0.5,0.8l-0.5,0.7l-0.5,0.7
|
407 |
+
l-0.4,0.6l-0.4,0.6l-0.4,0.5l-0.4,0.5l-0.4,0.5l-0.7,0.8l-0.7,0.8l-0.6,0.7l-0.5,0.6l-0.4,0.5l-0.2,0.2l-0.1,0.1l-0.2,0.4
|
408 |
+
l-0.3,0.6l-0.3,0.5l-0.3,0.6l-0.5,0.9l-0.5,0.9l-0.5,0.8l-0.5,0.8l-0.5,0.8l-0.6,0.8l-0.6,0.7l-0.6,0.7l-0.6,0.7l-0.6,0.7
|
409 |
+
l-0.6,0.7l-0.6,0.7l-0.7,0.7l-0.7,0.7l-0.7,0.7l-0.7,0.7l-0.7,0.7l-0.8,0.7l-0.8,0.6l-0.8,0.6l-0.8,0.6l-0.8,0.6l-0.5,0.4
|
410 |
+
l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.6,0.3l-0.6,0.3l-0.6,0.3l-0.7,0.3l-0.7,0.3l-0.8,0.3l-0.8,0.3l-0.8,0.2
|
411 |
+
l-1.1,0.3l-1,0.2l-1,0.2l-1,0.2l-1,0.2l-1,0.2l-1,0.2l-1,0.1l-1,0.1l-1,0.1l-1,0.1l-1,0.1l-0.9,0.1l-0.9,0.1l-0.9,0.1l-0.9,0.1
|
412 |
+
h-0.9H310h-0.9h-0.9h-0.9h-0.9h-1.7H303h-1.7h-1.7H298h-3.2h-1.5h-1.5h-1.5h-1.4h-1.4h-0.7h-0.7h-0.7h-0.7h-0.6h-0.6h-0.6h-0.6
|
413 |
+
l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.5,0.1l-0.5,0.1l-0.6,0.1L273,233l-3.6,0.7l-3.6,0.7
|
414 |
+
l-3.6,0.7l-7.2,1.5l-7.2,1.5l-7.3,1.5l-7.3,1.5l-3.7,0.8l-3.7,0.8l-3.7,0.8l-3.8,0.8l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1
|
415 |
+
l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1h-0.8h-0.8h-0.8h-0.8h-0.8h-0.8h-0.8h-0.8h-0.8h-0.8h-0.7l-0.7-0.1l-0.7-0.1l-0.7-0.1
|
416 |
+
l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-1.4-0.2l-1.4-0.2l-1.4-0.2l-1.3-0.2l-1.3-0.2l-1.3-0.3l-1.3-0.3l-1.3-0.3l-1.2-0.3
|
417 |
+
l-1.2-0.3l-1.2-0.3l-1.2-0.3l-1.1-0.3l-2.2-0.5l-2-0.5l-2.1-0.5l-0.7-0.2l-0.8-0.2l-0.8-0.3l-0.7-0.3l-0.7-0.3l-0.7-0.3
|
418 |
+
l-0.6-0.3l-0.6-0.3l-0.5-0.3l-0.6-0.3l-0.9-0.5h-0.1h-0.3h-0.6l-0.6-0.1l-0.6-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.2
|
419 |
+
l-0.7-0.2l-0.7-0.2l-0.8-0.3l-0.7-0.3l-0.3,0.3l-0.9,0.8l-1,0.7l-1,0.6l-1.1,0.6l-1.1,0.5l-1.1,0.4l-1.2,0.3l-1.2,0.2l-0.6,0.1
|
420 |
+
l-0.8,0.1l-0.9,0.1l-0.9,0.1l-1,0.1h-1.1h-1.1l-1.2-0.1l-1.2-0.2l-1.3-0.2l-1.2-0.3l-0.8-0.2l-0.7-0.2l-0.7-0.3l-0.7-0.3
|
421 |
+
l-0.7-0.3l-0.7-0.3l-0.7-0.4l-0.7-0.4l-0.7-0.4l-0.6-0.5l-0.6-0.5l-0.6-0.5l-0.5-0.5l-0.6-0.5l-0.5-0.6l-0.5-0.5l-0.5-0.6
|
422 |
+
l-0.4-0.6l-0.4-0.6l-0.5-0.7l-0.6-1l-0.6-1.1l-0.5-1.1l-0.4-1l-0.4-1l-0.3-0.9l-0.3-0.9l-0.2-0.9l-0.2-0.9l-0.2-0.8l-0.2-0.6
|
423 |
+
l-0.2-0.7l-0.2-0.8l-0.2-0.9l-0.2-0.9l-0.1-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.7l-0.1-0.8l-0.1-0.8l-0.1-1v-1.1V208
|
424 |
+
l0.1-1.4l0.2-1.2l0.3-1.2l0.4-1.3l0.3-0.7l0.3-0.8l0.4-0.8v-0.1l0.4-0.8l0.4-0.7v-0.1l0.7-1l0.7-0.9l0,0l0.5-0.6l0.6-0.6
|
425 |
+
l0.6-0.6l0,0l0.7-0.6l0.8-0.6l0.8-0.5h0.1l0.9-0.5l0.9-0.5l0.9-0.4l0.8-0.3l1.2-0.4l0.6-0.2l0.6-0.2l0.6-0.2l0.6-0.2l0.6-0.2
|
426 |
+
l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l1.1-0.2l1.1-0.2l1.1-0.2l1.1-0.1l1-0.1l1-0.1l1-0.1l1-0.1l1-0.1l0.9-0.1h0.9L154.3,188.6z
|
427 |
+
M353.1,204.9L353.1,204.9L353.1,204.9L353.1,204.9z"
|
428 |
+
/>
|
429 |
+
</g>
|
430 |
+
<g transform="matrix(1,0,0,1,381.866,45.2348)">
|
431 |
+
<path
|
432 |
+
fill="#0096FF"
|
433 |
+
d="M100,290.7h0.6h0.6h0.6h0.6h0.6h0.5h0.5h0.5h0.5l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l1,0.2
|
434 |
+
l1,0.2l1,0.2l0.9,0.2l0.9,0.2l0.9,0.2l0.9,0.2l0.9,0.2l0.8,0.2l1.6,0.4l1.5,0.4l0.7,0.2l0.7,0.2l0.7,0.2l0.7,0.2l0.6,0.1
|
435 |
+
l0.6,0.1h0.1h0.1h0.3h0.3h0.3h0.4h0.4h0.4h0.4h0.5h0.5h0.5h0.5h1.1l1.2-0.1l1.2-0.1h0.7h0.7h0.7h0.7h0.7h0.7h0.8l0.8,0.1
|
436 |
+
l0.8,0.1l0.8,0.1l0.8,0.1l0.5,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0,0l20.9,0h0.2h0.4h0.4l0.4,0.1l0,0
|
437 |
+
l0.5,0.1l0.5,0.1l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.3l0.5,0.3l0.4,0.3l0.4,0.3l0.4,0.4l0.4,0.4l0.4,0.4l0.3,0.4l0.3,0.4l0.3,0.5
|
438 |
+
l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.1,0.5l0.1,0.5l0.1,0.5v0.5v0.5l0,0v0.6l-0.1,0.6l-0.1,0.5l-0.1,0.5l-0.2,0.5l-0.2,0.5
|
439 |
+
l-0.2,0.5l-0.3,0.5l-0.3,0.5l-0.3,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.2l0,0l-0.5,0.2
|
440 |
+
l-0.5,0.2l-0.5,0.1l-0.4,0.1l-0.7,0.1l-0.5,0.1l-0.5,0.1l-0.4,0.1h-0.2l-0.4,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.5,0.1h-0.5
|
441 |
+
h-0.5h-0.5h-0.9h-0.9h-0.8h-0.7h-2h-1h-1h-1h-1.1h-1.1l-1.1-0.1h-0.6h-0.6l-0.6,0l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1
|
442 |
+
l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.4-0.1H101h-0.6h-0.6l-0.5-0.1l-0.5-0.1l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.3l-0.5-0.3l-0.5-0.3
|
443 |
+
l-0.4-0.3l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.2-0.2l-0.1,0.1l-0.6,0.3l-1.3,0.6l-1.3,0.7l-1.4,0.7l-0.7,0.4l-0.8,0.4l-0.8,0.3
|
444 |
+
l-0.8,0.3l-0.8,0.3l-0.8,0.3l-0.8,0.3l-0.5,0.2l-0.4,0.1l-0.4,0.1L82,315l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1
|
445 |
+
l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1L77,316h-0.5H76h-0.5h-0.6h-0.6h-0.4l-0.5-0.1l-0.5-0.1l-0.5-0.1l0,0l-0.5-0.2l-0.5-0.2
|
446 |
+
l-0.5-0.2l-0.5-0.2l-0.4-0.3l-0.4-0.3l0,0l-0.4-0.3l-0.4-0.3l-0.4-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.2-0.5
|
447 |
+
l-0.2-0.5l0,0l-0.2-0.5l-0.1-0.5l-0.1-0.5l-0.1-0.5v-0.5v-0.5v-0.5l0.1-0.6l0,0l0.1-0.5l0.1-0.5l0.1-0.5l0.2-0.5l0.2-0.5
|
448 |
+
l0.2-0.4l0.2-0.4l0.3-0.4l0,0l0.3-0.4l0.3-0.4l0.3-0.4l0.4-0.4l0.4-0.3l0,0l0.4-0.3L70,300h0.1l0.4-0.2l0.4-0.2l0.4-0.2
|
449 |
+
l0.2-0.1l0.1-0.4l0.2-0.4L72,298l0.3-0.5l0.4-0.6l0.5-0.7l0.3-0.4l0.3-0.3l0.3-0.3l0.4-0.4l0.6-0.5l0.5-0.4l0.5-0.4l0.6-0.3
|
450 |
+
l0.7-0.3l0.7-0.3l0.7-0.2l0.7-0.2l0.8-0.1h0.8h0.8l0.7,0.1l0.6,0.1l0.4,0.1l0.5,0.1l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.3l0.5,0.3
|
451 |
+
l0.2,0.2l0.5-0.2l0.7-0.3l0.8-0.3l0.8-0.3l0.8-0.3l0.8-0.3l0.8-0.3l0.5-0.2l0.4-0.1l0.4-0.1l0.5-0.1l0.6-0.2l0.6-0.1l0.6-0.1
|
452 |
+
l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1h0.6L100,290.7z M79.4,310.3h0.2l-0.4-0.1L79.4,310.3z"
|
453 |
+
/>
|
454 |
+
</g>
|
455 |
+
<g transform="matrix(1,0,0,1,396.607,49.2944)">
|
456 |
+
<path
|
457 |
+
d="M110.6,285.7h0.4h0.4h0.4h0.4h0.4h0.4h0.4h0.4h0.4l0.4,0.1l0.4,0.1l0.4,0.1l0.3,0.1l0.4,0.1l0.7,0.2
|
458 |
+
l0.7,0.2l0.7,0.2l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.2l1.1,0.5l1.1,0.5l1.1,0.4l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2
|
459 |
+
l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1h0.2h0.2h0.2h0.3h0.3h0.3h0.3h0.3h0.3h0.6h0.6h0.6h0.6l0.6,0h0.6h0.7l1.3-0.1l1.4-0.1
|
460 |
+
l1.4-0.1h0.7h0.7h0.7h0.7h0.7h0.7h0.7h0.7h0.4h0.4h0.4h0.4h0.4l0.4,0.1l0.4,0.1l0.3,0.1h0.2h0.2h0.2h0.3h0.3h0.3h0.3h0.3h0.7
|
461 |
+
h0.8h0.8h0.4h0.4h0.4h0.4h0.4h0.4h0.4l0.5,0.1l0.5,0.1l0.5,0.1l0.4,0.1l0.3,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1
|
462 |
+
l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.3,0.3l0.3,0.3l0.2,0.3l0.2,0.4l0.2,0.4l0.1,0.4l0.1,0.4
|
463 |
+
l0.1,0.4l0.1,0.4v0.4v0.4v0.3v0.3v0.3v0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3
|
464 |
+
l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.3,0.5l-0.3,0.6l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.4,0.5l-0.4,0.5l-0.4,0.4
|
465 |
+
l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.3,0.4l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.2,0.2l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.6,0.3l-0.6,0.3
|
466 |
+
l-0.6,0.3l-0.6,0.2l-0.6,0.2l-0.6,0.2l-0.6,0.2l-0.6,0.2l-0.6,0.2l-0.6,0.2l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1
|
467 |
+
l-0.6,0.1l-0.6,0.1l-0.6,0.1H142h-0.6h-0.6h-0.6h-0.6H139h-0.6h-0.6h-0.6h-0.6l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1
|
468 |
+
l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-1.1-0.2l-1.1-0.2l-1.1-0.3l-1.1-0.3l-1.1-0.3l-1.1-0.3l-1.1-0.3l-2.1-0.6
|
469 |
+
l-2.1-0.6l-1-0.3l-1-0.3h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.4h-0.4h-0.4H113h-0.5l-0.5,0.1l-0.5,0.1
|
470 |
+
l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1L108,309l-0.5,0.1l-0.5,0.1l-0.5,0.1l-1,0.3l-1,0.3l-1,0.3l-1.8,0.6
|
471 |
+
l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1h-0.4h-0.4h-0.4h-0.4h-0.4h-0.4h-0.4h-0.9
|
472 |
+
h-0.9h-0.9h-0.9h-0.9h-0.9l-0.9-0.1l-0.9-0.1l-1.8-0.1l-1.8-0.1l-0.9-0.1h-0.9h-0.8h-0.8h-0.8h-0.8h-0.8h-0.4h-0.4h-0.4h-0.4
|
473 |
+
h-0.3h-0.3h-0.3h-0.3h-0.3l-0.3,0.1l-0.4,0.1l-0.5,0.1l-0.6,0.1l-0.7,0.1l-0.7,0.1l-0.8,0.1l-0.8,0.1l-0.9,0.1l-0.9,0.1h-0.9
|
474 |
+
h-1h-1h-1h-1h-1h-1h-1h-1h-1h-1l-1-0.1l-0.9-0.1h-0.5h-0.5l-0.5-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1
|
475 |
+
l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.3-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2
|
476 |
+
l-0.2-0.3l-0.2-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3v-0.3v-0.2v-0.2v-0.3v-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.3
|
477 |
+
l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.3-0.5l0.3-0.5l0.3-0.5l0.4-0.8l0.1-0.3l0.1-0.2l0.2-0.4l0.2-0.4
|
478 |
+
l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3
|
479 |
+
l0.3-0.3L55,293l0.3-0.2l0.4-0.2l0.4-0.2l0.3-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.7-0.4l0.7-0.3l0.7-0.3l0.7-0.3l0.7-0.3l1.3-0.6
|
480 |
+
l0.6-0.3l0.6-0.3l0.6-0.3l0.6-0.3l0.6-0.3l0.3-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1
|
481 |
+
l0.2-0.2l0.2-0.1l0.2-0.2l0.2-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.1l0.3-0.1h0.4h0.4H71l0.3,0.1l0.3,0.1l0.2,0.1h0.1l0.4-0.1
|
482 |
+
l0.4-0.1l0.4-0.1l0.4-0.2l0.9-0.3l0.9-0.4l0.9-0.3l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1h0.3h0.3
|
483 |
+
h0.3h0.3h0.3H82h0.3h0.3h0.3h0.3l0.3,0.1l0.3,0.1l0.5,0.1l0.5,0.1l0.9,0.3l0.9,0.3l0.8,0.3l0.8,0.3l0.8,0.3l0.7,0.3l0.7,0.3
|
484 |
+
l1.2,0.5l1.1,0.4l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.1l0.5,0.1l0.2,0.1l0.2,0.1l0.2,0.1H96h0.2h0.2h0.2h0.2H97h0.3h0.3h0.3h0.3h0.3
|
485 |
+
h0.3h0.3h0.3h0.3h0.3h0.3h0.4l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.4-0.1l0.4-0.1
|
486 |
+
l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1h0.4h0.4h0.4h0.4L110.6,285.7z M115.3,302.4h0.6h0.3h0.3h0.3h0.3h0.3h0.3l0.3,0.1
|
487 |
+
l0.3,0.1l0.3,0.1l0.3,0.1l1.1,0.3l1.1,0.3l2.1,0.6l2.1,0.6l1.1,0.3l1,0.3l1,0.3l1,0.3l1,0.2l1,0.2l1,0.2l0.5,0.1l0.5,0.1
|
488 |
+
l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1h0.5h0.5h0.5h0.5h0.5h0.5h0.5h0.5h0.5h0.5h0.5h0.5l0.5-0.1l0.5-0.1
|
489 |
+
l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.4-0.2
|
490 |
+
l0,0l0.1-0.1l0.2-0.1l0.2-0.2l0.2-0.2l0.2-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.2-0.4
|
491 |
+
l0.2-0.4l0.2-0.4l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2v-0.1V298v-0.1v-0.1v-0.1v-0.1v-0.1
|
492 |
+
l0,0H156h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1l-0.2-0.1H155h-0.2h-0.3h-0.3h-0.3h-0.3h-0.3H153h-0.4h-0.4h-0.8h-0.8h-0.8h-0.4H149
|
493 |
+
h-0.4h-0.4h-0.4h-0.4l-0.4-0.1l-0.4-0.1l-0.3-0.1h-0.2h-0.3h-0.3h-0.3h-0.3h-0.3h-0.3h-0.6h-0.6h-0.6h-0.6h-0.6h-0.6H140h-0.7
|
494 |
+
l-1.4,0.1l-1.4,0.1l-1.4,0.1h-0.7h-0.7H133l-0.7,0h-0.7h-0.7h-0.7h-0.4h-0.4H129h-0.4h-0.4h-0.4l-0.4-0.1l-0.4-0.1l-0.4-0.1
|
495 |
+
l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.6-0.2l-0.6-0.2l-0.6-0.2l-0.6-0.2l-1.1-0.5l-1.1-0.5l-1.1-0.4l-0.5-0.2
|
496 |
+
l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.1l-0.5-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1h-0.3h-0.3h-0.3h-0.3
|
497 |
+
H112h-0.3h-0.3h-0.3h-0.3h-0.3h-0.3h-0.3h-0.3h-0.3H109h-0.3h-0.3h-0.3h-0.3l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.5,0.1
|
498 |
+
l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.4,0.1h-0.4h-0.4h-0.4h-0.4h-0.4h-0.4H99h-0.4
|
499 |
+
h-0.4h-0.4h-0.4H97h-0.4h-0.4l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.6-0.2l-0.6-0.2l-0.6-0.2l-0.6-0.2
|
500 |
+
l-0.6-0.2l-1.2-0.5l-1.2-0.5l-0.6-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.8-0.2l-0.8-0.2l-0.4-0.1l-0.4-0.1h-0.1l0,0l0,0
|
501 |
+
H83h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.2
|
502 |
+
l-0.9,0.3l-0.9,0.3l-0.9,0.4l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1h-0.3h-0.3
|
503 |
+
h-0.1l-0.2,0.1l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.7,0.3l-0.7,0.3l-0.7,0.3l-0.7,0.3l-0.7,0.3
|
504 |
+
l-1.3,0.6l-0.6,0.3l-0.6,0.3l-0.6,0.3l-0.6,0.3l-0.6,0.3l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2
|
505 |
+
l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2
|
506 |
+
l-0.2,0.2l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.4,0.8l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.1,0.2
|
507 |
+
l-0.1,0.2l-0.1,0.2l0,0l0,0l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1h0.3H56h0.4h0.4h0.4l0.9,0.1l0.9,0.1h0.9h0.9h1h1h1h1h1h1
|
508 |
+
h0.9h0.9h0.9h0.9l0.8-0.1l0.8-0.1l0.7-0.1l0.7-0.1l0.6-0.1l0.5-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1h0.4h0.4h0.4h0.4
|
509 |
+
h0.4h0.4h0.4h0.9h0.9H82h0.9h0.9h0.9l0.9,0.1l1.8,0.1l1.8,0.1l0.9,0.1l0.9,0.1h0.9h0.8h0.8h0.8h0.8h0.8h0.4h0.4h0.4h0.4h0.3
|
510 |
+
h0.3h0.3h0.3H99l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l1.8-0.6l1-0.3l1-0.3l1.1-0.3l0.6-0.2l0.6-0.2
|
511 |
+
l0.6-0.2l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1h0.6h0.6L115.3,302.4z"
|
512 |
+
/>
|
513 |
+
</g>
|
514 |
+
<g transform="matrix(1,0,0,1,381.866,45.2348)">
|
515 |
+
<path
|
516 |
+
fill="#0096FF"
|
517 |
+
d="M258.4,272.4h0.5h0.5h0.6h0.4h0.3h0.3h0.2h0.2h0.2l0,0l0.2,0.1l0.2,0.1l0.2,0.1l0,0l0.2,0.1l0.2,0.1
|
518 |
+
l0.2,0.1l0.2,0.1l0,0l0.1,0.1l0.1,0.1l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0,0l0.1,0.2l0.1,0.2v0.2v0.2v0.2v0.2v0.2l0,0v0.2v0.2
|
519 |
+
l-0.1,0.2l-0.1,0.2l-0.1,0.2l0,0l-0.1,0.2l-0.1,0.2l-0.1,0.1l-0.1,0.1l0,0l-0.1,0.2l-0.1,0.1l0,0l-0.1,0.1l-0.1,0.1h-0.1
|
520 |
+
l-0.1,0.1l-0.1,0.1l-0.2,0.1l-0.3,0.2l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.8,0.3l-0.9,0.2
|
521 |
+
l-0.8,0.2v0.1l0.1,0.2v0.2v0.2v0.2v0.2v0.2l0,0v0.2v0.2v0.2v0.2l-0.1,0.2l-0.1,0.2l0,0l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2
|
522 |
+
l0,0l-0.1,0.1l-0.1,0.1l-0.1,0.1l0,0l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.3,0.1l-0.2,0.1l-0.3,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1
|
523 |
+
l-0.5,0.1l-0.5,0.1l-0.6,0.1l-0.6,0.1l-0.7,0.1l-0.7,0.1l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.1
|
524 |
+
L249,286l-0.2,0.2l-0.2,0.2l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1H248l-0.1,0.1l-0.2,0.1h-0.1h-0.1h-0.1h-0.1h-0.2
|
525 |
+
h-0.2h-0.1h-0.1h-0.2h-0.1h-0.1h-0.1h-0.1H246h-0.1h-0.1h-0.1h-0.1l-0.2-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.2l-0.2-0.2
|
526 |
+
l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2h-0.1l-0.8,0.1l-0.8,0.1h-0.8H240h-0.7h-0.7H238h-0.6h-0.5h-0.5h-0.3h-0.3l-0.3-0.1
|
527 |
+
l-0.2-0.1h-0.2l-0.2-0.1h-0.1l-0.2-0.1l-0.1-0.1l-0.1-0.1h-0.1l-0.2-0.1l0,0l-0.8,0.3l-0.9,0.3l-0.9,0.2l-0.5,0.1l-0.4,0.1
|
528 |
+
l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1h-0.4H227h-0.4h-0.4h-0.4h-0.4H225h-0.4h-0.4l-0.4-0.1
|
529 |
+
l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.2l-0.3-0.1l-0.2-0.1l-0.2-0.1l0,0l-0.2-0.1l-0.2-0.1l-0.1-0.1l0,0l-0.1-0.1l-0.1-0.2
|
530 |
+
l-0.1-0.2l0,0l-0.1-0.1l-0.1-0.2l-0.1-0.2l0,0l-0.1-0.2l-0.1-0.2v-0.2v-0.1v-0.2v-0.2v-0.1v-0.2v-0.2v-0.2v-0.3v-0.3l0.1-0.3
|
531 |
+
l0.1-0.4l0.1-0.4l0.2-0.4l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.4-0.6l0.4-0.6l0.4-0.6l0.4-0.5
|
532 |
+
l0.4-0.5l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.1l0.1-0.1l0.1-0.1h0.1l0.1-0.1l0.1-0.1l0.2-0.1l0.3-0.1l0.3-0.1l0.3-0.1
|
533 |
+
l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.4-0.1l0.1-0.1l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.2
|
534 |
+
l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1
|
535 |
+
l0.3-0.1l0.3-0.1l0.3-0.1h0.3h0.3h0.3h0.6h0.6h0.6h0.6h0.6h0.5l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1
|
536 |
+
l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.9,0.3l0.9,0.3l0.9,0.3l0.9,0.3l4.8,1.4l0.9-0.1l1.1-0.1h1L258.4,272.4z"
|
537 |
+
/>
|
538 |
+
</g>
|
539 |
+
<g transform="matrix(1,0,0,1,381.866,45.2348)">
|
540 |
+
<path
|
541 |
+
d="M240.3,267.1h0.9h0.9h0.9h0.9h0.9h0.9h0.9h0.9h0.9h0.9h0.9h0.9l0.9,0h0.8l0.8,0.1l0.8,0.1l0.8,0.1l0.8,0.1
|
542 |
+
l0.8,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.5,0.2l0.5,0.2l0.3,0.1l0.3,0.1l0.3,0.1
|
543 |
+
l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.1,0.2l0.1,0.2l0.1,0.2
|
544 |
+
l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2v0.2v0.3v0.2v0.3v0.3v0.1v0.1v0.3l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.2,0.3l-0.2,0.3l-0.2,0.3
|
545 |
+
l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.3,0.3l-0.3,0.3l-0.3,0.3l-0.3,0.2l-0.3,0.3
|
546 |
+
l-0.6,0.5l-0.6,0.5l-0.6,0.5l-0.6,0.4l-0.6,0.4l-0.6,0.4l-0.6,0.4l-0.6,0.4l-0.6,0.4l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3
|
547 |
+
l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.3,0.1l-0.2,0.1l-1.2,0.2l-1.1,0.2l-1.1,0.3l-1.1,0.3l-1.1,0.3l-1.1,0.3l-2.2,0.6
|
548 |
+
l-2.2,0.6l-1.1,0.3l-1.1,0.3l-1.1,0.3l-1.1,0.2l-1.1,0.2l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1L234,291l-0.6,0.1
|
549 |
+
l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1h-0.6h-0.6h-0.6h-0.6H228h-0.6h-0.6h-0.6h-0.6H225l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1
|
550 |
+
L222,291l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.6-0.2h-0.1l0,0h-0.1h-0.1H216h-0.2h-0.2h-0.2
|
551 |
+
h-0.2h-0.3h-0.3H214h-0.6h-0.7h-0.4h-0.4h-0.4h-0.4h-0.4h-0.4l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.3-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1
|
552 |
+
l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.3
|
553 |
+
l-0.2-0.3l-0.2-0.3l-0.1-0.2v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1V285v-0.1v-0.1v-0.1v-0.1v-0.2l0.1-0.3l0.1-0.3
|
554 |
+
l0.1-0.3l0.1-0.3l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.2-0.2l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2
|
555 |
+
l0.3-0.2l0.3-0.2l0.3-0.1l0.3-0.1l0.5-0.2l0.4-0.2l0.4-0.1l0.3-0.1l0.2-0.1l0.7-0.2l0.7-0.2l0.7-0.2l0.7-0.2l0.8-0.2l0.8-0.2
|
556 |
+
l1.5-0.4l1.4-0.4l1.3-0.3l0.4-0.1l-0.2-0.1l-0.2-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2V275v-0.3v-0.3v-0.3v-0.3
|
557 |
+
l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.1
|
558 |
+
l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.6-0.2l0.6-0.2l0.7-0.2l0.7-0.2l0.7-0.2l0.7-0.2l0.8-0.1
|
559 |
+
l0.8-0.1l0.8-0.1l0.8-0.1l0.8-0.1l0.8-0.1l0.8-0.1l0.9-0.1l0.9-0.1l0.9-0.1l0.9-0.1l0.9-0.1l0.9-0.1L240.3,267.1z M238.9,273.1
|
560 |
+
l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.6,0.1
|
561 |
+
l-0.6,0.1l-0.6,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.2l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.1,0.1l-0.1,0.1
|
562 |
+
l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1h-0.1h-0.1l0,0l-0.1,0.1l-0.2,0.1l0.1,0.1l0.2,0.2l0.2,0.2l0.2,0.2l0.1,0.2l0.1,0.2
|
563 |
+
l0.1,0.2l0.1,0.2l0.1,0.3v0.3v0.3v0.3v0.3v0.3l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2
|
564 |
+
l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.4,0.1l-0.5,0.1l-0.5,0.1l-0.6,0.2l-1.3,0.3l-1.4,0.4l-1.5,0.4l-0.7,0.2l-0.7,0.2
|
565 |
+
l-0.3,0.1h0.1h0.4h0.4h0.4l0.4,0.1l0.4,0.1l0.4,0.1l0.2,0.1l0.2,0.1l0.6,0.2l0.5,0.2l0.5,0.2l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1
|
566 |
+
l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1h0.5h0.5h0.5h0.5h0.5h0.5h0.5h0.5h0.5h0.5h0.5h0.5l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1
|
567 |
+
l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l1.1-0.2l1.1-0.2l1.1-0.2l1.1-0.3l1.1-0.3l2.2-0.6l2.2-0.6l1.1-0.3l1.1-0.3
|
568 |
+
l1.1-0.3l1.1-0.3l1.2-0.3l1-0.2l0,0l0.2-0.1l0.3-0.1l0.3-0.2l0.4-0.2l0.4-0.2l0.4-0.3l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.4
|
569 |
+
l0.5-0.4l0.5-0.4l0.5-0.4l0.5-0.4l0.5-0.4l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.1-0.2v-0.1l-0.4-0.1
|
570 |
+
l-0.4-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1L253,273l-0.8-0.1h-0.8
|
571 |
+
l-0.8,0h-0.8H249h-0.8h-0.8h-0.8h-0.9h-0.9h-0.9H243h-0.9h-0.9h-0.9h-0.9h-0.9L238.9,273.1z"
|
572 |
+
/>
|
573 |
+
</g>
|
574 |
+
<path
|
575 |
+
d="M708.1,249.1h0.2h0.1h0.1h0.1h0.2h0.1h0.1h0.1l0.1,0.1l0.2,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1
|
576 |
+
l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1v0.1l0.1,0.1v0.1l0.1,0.1
|
577 |
+
v0.1v0.1v0.1v0.1v0.1v0.1l-0.1,0.1v0.1l-0.1,0.1l-0.1,0.1v0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
|
578 |
+
l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2
|
579 |
+
l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1
|
580 |
+
l-0.4,0.1h-0.4h-0.4H701h-0.4h-0.4h-0.4H699h-0.8h-0.9h-1h-0.2h-0.3h-0.2h-0.2l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.7-0.2
|
581 |
+
l-0.2-0.1l-0.2-0.1h-0.1h-0.1h-0.1h-0.1h-0.2H692h-0.1h-0.2h-0.1h-0.1h-0.2h-0.1h-0.1H691l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
|
582 |
+
l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
|
583 |
+
l-0.1-0.1v-0.1l-0.1-0.1v-0.1l-0.1-0.1v-0.1v-0.1v-0.1v-0.1v-0.1V253v-0.1l0.1-0.1v-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1
|
584 |
+
l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1h0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1h0.1
|
585 |
+
l0.1-0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.2h0.1h0.1h0.1h0.1h0.2h0.4h0.2h0.3h0.2h0.2l0.4,0.1l0.4,0.1l0.4,0.1l0.7,0.2l0.3,0.1
|
586 |
+
l0.3,0.1l0.2,0.1h0.2h0.7h0.9h0.7h0.8h0.3h0.3h0.4h0.3h0.3h0.2h0.3h0.3h0.2l0.2-0.1l0.3-0.1l0.2-0.1l0.3-0.1l0.3-0.1l0.2-0.1
|
587 |
+
l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.4-0.1l0.3-0.1l0.4-0.2l0.4-0.2l0.4-0.2l0.1-0.1l0.1-0.1h0.1h0.1h0.2h0.1h0.1h0.2h0.1h-0.1
|
588 |
+
V249.1z M693.9,255.9L693.9,255.9L693.9,255.9L693.9,255.9L693.9,255.9L693.9,255.9z"
|
589 |
+
/>
|
590 |
+
<path
|
591 |
+
d="M698.7,232.2L698.7,232.2h0.2h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1l0.1,0.1
|
592 |
+
l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1v0.1l0.1,0.1
|
593 |
+
l0.1,0.1l0.1,0.1v0.1l0.1,0.1l0.1,0.1v0.1v0.1l0.1,0.1v0.1v0.1l0.1,0.1v0.1v0.1v0.1v0.1v0.1v0.1l-0.1,0.1v0.1v0.1l-0.1,0.1v0.1
|
594 |
+
l-0.1,0.1v0.1l-0.1,0.1v0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1v0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
|
595 |
+
l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1h-0.1h-0.1h-0.1H700h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1l-0.1,0.1
|
596 |
+
l-0.2,0.1l-0.2,0.1l-0.3,0.2l-0.5,0.4l-0.7,0.4l-0.7,0.5l-0.8,0.5l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2
|
597 |
+
l-0.5,0.2l-0.4,0.2l-0.2,0.1l-0.2,0.1l-0.3,0.1h-0.2h-0.3H691h-0.3h-0.2h-0.1h-0.1h-0.1h-0.1H690h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1
|
598 |
+
h-0.1h-0.1h-0.1H689h-0.1h-0.1l-0.1-0.1h-0.1h-0.1h-0.1h-0.1h-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
|
599 |
+
l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1V241l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1v-0.1l-0.1-0.1l-0.1-0.1
|
600 |
+
l-0.1-0.1v-0.1l-0.1-0.1v-0.1l-0.1-0.1v-0.1v-0.1l-0.1-0.1v-0.1v-0.1v-0.1v-0.1V239v-0.1v-0.1l0.1-0.1v-0.1v-0.1v-0.1l0.1-0.1
|
601 |
+
v-0.1l0.1-0.1l0.1-0.1v-0.1l0.1-0.1l0.1-0.1l0.1-0.1v-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1
|
602 |
+
l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1
|
603 |
+
h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1l0.2-0.1l0.3-0.1l0.2-0.2l0.3-0.2l0.4-0.2l0.7-0.4l0.7-0.4l0.7-0.4l0.7-0.4l0.3-0.2
|
604 |
+
l0.4-0.2l0.3-0.2l0.3-0.2l0.4-0.2l0.4-0.2l0.3-0.1l0.3-0.1h0.2h0.1h0.1h0.1h0.1L698.7,232.2L698.7,232.2z M699.1,238.1
|
605 |
+
L699.1,238.1L699.1,238.1L699.1,238.1L699.1,238.1z M692.9,237.4L692.9,237.4L692.9,237.4L692.9,237.4L692.9,237.4z"
|
606 |
+
/>
|
607 |
+
<path
|
608 |
+
d="M688.9,250.5h0.5h0.5h0.5h0.2h0.2h0.2h0.1l0.2,0.1l0.1,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.1,0.1
|
609 |
+
l0.1,0.1l0.2,0.1l0.1,0.1l0.1,0.1l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2v0.2v0.2l0.1,0.2l-0.1,0.2v0.2v0.2
|
610 |
+
l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.2,0.1l-0.1,0.1
|
611 |
+
l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1h-0.2h-0.2h-0.2h-0.2h-0.5h-0.4H689h-0.4h-0.4h-0.5h-0.4h-0.4l-0.4,0.1l-0.5,0.1
|
612 |
+
l-0.4,0.1l-0.4,0.1l-0.5,0.1l-0.4,0.1l-0.4,0.1l-0.5,0.1l-0.9,0.2l-0.8,0.2l-0.9,0.2l-0.9,0.2l-0.9,0.2l-0.9,0.3l-0.9,0.3
|
613 |
+
l-0.9,0.3l-0.9,0.3l-0.9,0.3l-1.8,0.6l-1.8,0.6l-0.9,0.3l-0.9,0.3l-0.9,0.3l-0.9,0.3l-0.9,0.3l-0.9,0.3l-0.9,0.3l-1,0.2
|
614 |
+
l-0.9,0.2l-0.9,0.2h-0.2h-0.2h-0.2H661h-0.2h-0.2h-0.2h-0.2l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.1-0.1l-0.2-0.1l-0.2-0.1l-0.1-0.1
|
615 |
+
l-0.1-0.1l-0.2-0.1l-0.1-0.1l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2v-0.2l-0.1-0.2v-0.2v-0.2l0.1-0.2
|
616 |
+
v-0.2l0.1-0.2v-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.2-0.1l0.1-0.1l0.2-0.1l0.2-0.1
|
617 |
+
l0.2-0.1l0.2-0.1l0.2-0.1h0.2l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.3l1.9-0.6
|
618 |
+
l1.8-0.6l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.2l1-0.2l0.9-0.2l0.9-0.2l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1
|
619 |
+
l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1h0.5h0.5h0.5L688.9,250.5z"
|
620 |
+
/>
|
621 |
+
<path
|
622 |
+
fill="#25B3FF"
|
623 |
+
d="M616.5,62.9h0.5h0.5h0.5h0.5L619,63l0.5,0.1l0.5,0.1l0.5,0.1l0.2,0.1l0.2,0.1l0.3,0.1l0.2,0.1l0.2,0.1
|
624 |
+
l0.2,0.1l0.4,0.2l0.4,0.2l0.2,0.2l0.2,0.2l0.2,0.1l0.2,0.2l0.1,0.1h0.1h0.2h0.5h0.5h0.5h0.4h0.5l0.5,0.1l0.5,0.1l0.4,0.1
|
625 |
+
l0.5,0.1l0.4,0.1l0.4,0.1l0.5,0.1l0.2,0.1l0.2,0.1l0.3,0.1l0.1,0.1l0.3,0.2h0.1l0.1,0.1l0.1,0.1h0.1l0.2,0.2l0.2,0.2l0,0
|
626 |
+
l0.2,0.2l0.1,0.3l0,0l0.1,0.3l0.1,0.3l0,0v0.4v0.4l0,0l-0.1,0.3l-0.1,0.3l0,0l-0.1,0.2l-0.1,0.2l0,0l-0.1,0.2l-0.1,0.2h-0.1
|
627 |
+
l-0.2,0.3h-0.1l-0.2,0.1l-0.1,0.1l-0.1,0.1l-0.2,0.2l-0.2,0.1l-0.3,0.2l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1
|
628 |
+
l-0.6,0.2l-0.7,0.2l-0.6,0.2l-0.6,0.1l-1.1,0.2l-0.9,0.2l-0.5,0.1l-0.4,0.1l-0.5,0.1l-0.5,0.1l-1,0.1h-0.1l-0.4,0.3l-0.5,0.4
|
629 |
+
l-0.5,0.4l-0.2,0.1l0.3-0.1h0.2l0.3-0.1h0.3h0.3l0,0h0.4l0.4,0.1l0.3,0.1l0.4,0.2l0.3,0.2l0.3,0.2l0.2,0.3l0.2,0.3l0.2,0.3
|
630 |
+
l0.1,0.3l0.1,0.1h0.4l1.1-0.1l2.3-0.3l1.1-0.1l1.2-0.1l1.2-0.1l1.2-0.1l0.5-0.1h0.6h0.6h0.6h0.6h0.6h0.6h0.6h0.1h0.4h0.1
|
631 |
+
l0.3,0.1l0.3,0.1h0.1l0.3,0.1l0.2,0.2l0.3,0.2l0,0l0.2,0.2l0.2,0.3l0.2,0.3l0.1,0.3l0.1,0.3l0,0l0.1,0.3v0.3v0.4l-0.1,0.4l0,0
|
632 |
+
l-0.1,0.3l-0.1,0.3l-0.1,0.3h-0.1l-0.1,0.2l-0.2,0.2l0,0l-0.1,0.1l-0.2,0.1l-0.1,0.1l-0.2,0.2l-0.1,0.1l-0.2,0.1l-0.2,0.1
|
633 |
+
l-0.3,0.2l-0.4,0.2l-0.3,0.1l-0.2,0.1l-1.3,0.6l-0.9,0.5l-0.8,0.4l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.5,0.2l-0.5,0.2
|
634 |
+
l-0.5,0.2l-0.6,0.2l-1.4,0.4l-0.4,0.1l-0.4,0.1l-0.9,0.2l-0.9,0.2l-1.1,0.2l-1.1,0.3l-1.1,0.3L622,87l0.1,0.1h0.1l0.1,0.3
|
635 |
+
l0.1,0.1l0.1,0.3v0.1l0.1,0.2l0.1,0.3l0.1,0.3l0,0V89l-0.1,0.3l-0.1,0.3l-0.1,0.3h-0.1l-0.1,0.3l-0.1,0.3l-0.2,0.2l-0.2,0.2
|
636 |
+
l-0.2,0.2l0,0l-0.2,0.2l-0.3,0.2l-0.3,0.1l-0.3,0.1l-0.3,0.1l0,0h-0.1l0,0l-0.3,0.4l-0.4,0.5l-0.4,0.5l-0.4,0.5l-0.9,1.2
|
637 |
+
l-0.9,1.3l-0.9,1.3l-0.5,0.7l-0.5,0.6l-0.5,0.6l-0.5,0.6l-0.5,0.6l-0.5,0.6l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.2l-0.2,0.2
|
638 |
+
l-0.2,0.2l-0.2,0.2l-0.3,0.2l-0.2,0.2l-0.3,0.2l-0.3,0.2l-0.4,0.2l-0.2,0.1l-0.3,0.1h-0.1l-0.2,0.1H609h-0.3h-0.2h-0.2H608h-0.1
|
639 |
+
h-0.3h-0.2l-0.3-0.1H607l-0.4-0.1h-0.1l-0.4-0.1l-0.1-0.1l-0.3-0.2l-0.1-0.1l-0.2-0.2l-0.1-0.1l-0.2-0.2l-0.1-0.1l-0.2-0.2
|
640 |
+
l-0.2-0.2l-0.2-0.3l-0.2-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3v-0.2l-0.7,0.8l-0.7,0.8
|
641 |
+
l-0.4,0.4l-0.3,0.3l-0.3,0.3l-0.4,0.3l-0.3,0.3l-0.3,0.3l-0.2,0.2l-0.2,0.2l-0.2,0.1l-0.3,0.2H599l-0.2,0.1l-0.2,0.1h-0.1h-0.2
|
642 |
+
h-0.2H598h-0.2h-0.2h0.4h-0.3h-0.2h-0.1l-0.3-0.1l-0.3-0.1h-0.1l-0.3-0.1l-0.2-0.2h-0.1l-0.2-0.2l-0.2-0.2l-0.1-0.1l-0.2-0.2
|
643 |
+
l-0.1-0.2l-0.1-0.1l-0.1-0.2l-0.1-0.2v-0.1l-0.1-0.3l-0.1-0.1l-0.1-0.3v-0.2l-0.1-0.3v-0.3V100v-0.1l-0.4,0.4l-0.6,0.9l-0.3,0.4
|
644 |
+
L593,102l-0.3,0.4l-0.3,0.4l-0.4,0.4l-0.3,0.4l-0.4,0.4l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.1
|
645 |
+
l-0.3,0.2h-0.1l-0.2,0.1l-0.3,0.1h-0.1l-0.4,0.1h-0.4H588h-0.3h-0.4l0,0l-0.3-0.1l-0.3-0.1l-0.3-0.1l0,0l-0.2-0.2l-0.2-0.2
|
646 |
+
l-0.2-0.2l0,0l-0.2-0.2l-0.2-0.2l-0.1-0.2l0,0l-0.2-0.3l-0.1-0.3l0,0l-0.1-0.3l-0.1-0.3V103v-0.2l-0.1,0.2l-0.2,0.4l-0.3,0.4
|
647 |
+
l-0.2,0.4l-0.2,0.2l-0.1,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.3,0.2l-0.4,0.2l-0.2,0.1l-0.2,0.1
|
648 |
+
l-0.1,0.1l-0.3,0.1h-0.1l-0.3,0.1h-0.2h-0.3h-0.3h-0.3h-0.2h-0.2h-0.2l-0.3-0.1h-0.1l-0.3-0.1h-0.1l-0.2-0.1l-0.2-0.1l0,0
|
649 |
+
l-0.2-0.1l-0.2-0.2h-0.1l-0.2-0.2l-0.1-0.2h-0.1l-0.1-0.2l-0.1-0.2l0,0l-0.1-0.3h-0.1l-0.1-0.2l-0.1-0.2l-0.1-0.1l-0.1-0.2V104
|
650 |
+
l-0.1-0.1v-0.3v-0.3V103v-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.2-0.6l0.1-0.6l0.2-0.7l0.2-0.7l0.4-1.4l0.5-1.5l0.2-0.7
|
651 |
+
l0.2-0.6l-0.6,0.3l-0.9,0.4l-0.9,0.4l-0.9,0.4l-0.9,0.4l-0.2,0.1l-0.6,0.7l-0.4,0.5l-0.4,0.5l-0.4,0.5l-0.5,0.5l-0.4,0.5
|
652 |
+
l-0.5,0.5l-0.5,0.5l-0.5,0.4l-0.5,0.4l-0.5,0.4l-0.3,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.3,0.2l-0.2,0.2l-0.2,0.2l-0.3,0.2
|
653 |
+
l-0.3,0.2l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1H564h-0.2h-0.3h-0.2H563h-0.2l-0.3-0.1h-0.2l-0.3-0.1h-0.1
|
654 |
+
l-0.2-0.1l-0.2-0.1l-0.1-0.1l-0.2-0.1l-0.2-0.1l-0.1-0.1l-0.2-0.2l-0.2-0.2l-0.1-0.1l-0.1-0.2l-0.1-0.2l-0.1-0.1l-0.1-0.2
|
655 |
+
l-0.1-0.2l-0.1-0.1l-0.1-0.2l-0.1-0.2v-0.1l-0.1-0.3l-0.1-0.1V101v-0.2v-0.3l0,0h-0.2h-0.4l-0.4-0.1l-0.5-0.1l-0.2-0.1l-0.2-0.1
|
656 |
+
l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.1,0.1l-0.4,0.1l-0.3,0.1l-0.4,0.1H555h-0.3h-0.2h-0.2h-0.2H554h-0.3h-0.1
|
657 |
+
l-0.3-0.1l0,0l-0.4-0.1l0,0l-0.2-0.1l-0.2-0.1h-0.1l-0.2-0.1l-0.2-0.1h-0.1l-0.2-0.2l-0.2-0.2l0,0l-0.2-0.2l-0.2-0.2l0,0
|
658 |
+
l-0.2-0.3l-0.1-0.3l0,0l-0.1-0.2l-0.1-0.1l-0.3,0.2l-0.4,0.2l-0.5,0.2l-0.4,0.2l-0.3,0.1l-0.2,0.1l-0.2,0.1l-0.3,0.1l-0.3,0.1
|
659 |
+
l-0.3,0.1H547h-0.4h-0.4h-0.3h-0.2h-0.2l-0.3-0.1h-0.1l-0.4-0.1h-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.2l-0.2-0.2
|
660 |
+
l-0.2-0.2l-0.2-0.2l-0.1-0.2l-0.2-0.2l-0.1-0.2l-0.1-0.3h-0.1l-0.1-0.2l-0.1-0.2l0,0l-0.1-0.2V96l0,0v-0.2l0,0l-0.4,0.3
|
661 |
+
l-0.8,0.6l-0.8,0.6l-1.7,1.2l-1.7,1.2l-0.8,0.6l-0.9,0.6l-0.8,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.4,0.3l-0.5,0.3
|
662 |
+
l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.4,0.3l-0.5,0.3l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2
|
663 |
+
l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.2,0.1h-0.2h-0.2H521h-0.1h-0.3h-0.4l0,0H520l-0.2-0.1l-0.2-0.1h-0.1l-0.3-0.1l-0.2-0.2l-0.3-0.2
|
664 |
+
l-0.2-0.2l0,0l-0.2-0.2l-0.2-0.3l-0.1-0.2l-0.3-0.2l-0.2-0.3l0,0l-0.2-0.3l-0.1-0.3l-0.1-0.1l-0.1-0.3l-0.1-0.3l-0.1-0.1v-0.2
|
665 |
+
l-0.1-0.2v-0.2v-0.4l0.1-0.3v-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.2-0.2l0.1-0.2
|
666 |
+
l0.2-0.2l0.2-0.2l0.1-0.2l0.2-0.2l0.4-0.3l0.3-0.3l0.4-0.3l0.4-0.2l0.4-0.2l0.4-0.2l0.3-0.2l0.4-0.2l0.4-0.2l0.7-0.3l1.2-0.6
|
667 |
+
l0.6-0.3l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.3l1.1-0.6l1.1-0.6
|
668 |
+
l1.1-0.6l1.1-0.6l1.1-0.6l1.1-0.6l1.1-0.6l1.1-0.6l1.1-0.6l2.2-1.1l2.2-1.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1h0.1l0.9-0.5
|
669 |
+
l0.9-0.5l0.9-0.5l0.9-0.5l0.9-0.5l0.9-0.4l0.9-0.4l0.9-0.4l0.9-0.4l0.9-0.4l0.9-0.4l0.9-0.4l0.2-0.1l0.2-0.1l0.2-0.1l0,0
|
670 |
+
l0.4-0.1h0.4h0.4l0.4,0.1l0.4,0.1l0.3,0.2l0.4,0.2l0.2,0.2l0.2,0.3l0.1,0.1l2.1-0.4l4.8-1l2.3-0.5l2.3-0.5l0.4-0.2l0.4-0.2
|
671 |
+
l0.4-0.2l0.4-0.2l0.4-0.2l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.4-0.1h0.2h0.4h0.1h0.3h0.2h0.1h0.2l0.3,0.1l0,0l0.2,0.1l0.1-0.1
|
672 |
+
l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.2l0.2-0.2l0.2-0.2l0.3-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.3-0.2l0.2-0.2l0.3-0.2
|
673 |
+
l0.2-0.2l0.5-0.3l0.6-0.3l0.4-0.2l0.1-0.3l0.1-0.3l0,0l0.2-0.2l0.1-0.2l0.2-0.2l0,0l0.2-0.2l0.2-0.2l0,0l0.3-0.2l0.1-0.1
|
674 |
+
l0.2-0.1l0.4-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.2-0.1l0.5-0.1l0.5-0.1l0.4-0.1l0.6-0.1l0.7-0.1l1.2-0.2l1.2-0.2l0.5-0.1l0.6-0.1
|
675 |
+
l0.5-0.1l0.2-0.2l0.6-0.4l0.6-0.4l0.5-0.4l0.6-0.3l0.5-0.3l0.9-0.6l0.8-0.5l0.3-0.2l0.3-0.2l0.3-0.2l0.4-0.3l0.5-0.3l0.5-0.4
|
676 |
+
l0.5-0.4l0.5-0.4l0.6-0.4l0.5-0.4l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.4-0.1l0.4-0.1l0.3-0.1l0.2-0.1h0.2h0.4h0.2h0.4
|
677 |
+
h0.1h0.2h0.2h0.1l0.2,0.1l0.2,0.1h0.1l0.2,0.1l0.2,0.1l0,0l0.2,0.2l0.2,0.2h0.1l0.2,0.2l0.2,0.2l0,0l0.1,0.2l0.1,0.2l0,0
|
678 |
+
l0.1,0.2l0.4-0.1l0.6-0.1l0.5-0.1l0.6-0.1l0.5-0.1l0.6-0.1l0.5-0.1l0.5-0.1l0.6-0.1l0.5-0.1l0.5-0.1l0.5-0.1h0.6h0.5h0.5
|
679 |
+
L616.5,62.9z M609.5,90.5L609.5,90.5l0.1,0.4l0.1,0.2l0.1,0.3v0.2l0.1,0.2v0.4l0,0.4V93v0.4l-0.1,0.4l-0.1,0.8l-0.1,0.9
|
680 |
+
l-0.1,0.9l-0.1,0.1l0.3-0.4l0.5-0.6l0.4-0.6l0.5-0.6L612,93l0.9-1.3l0.4-0.6l0,0l-0.3,0.1l-0.2,0.1l-0.3,0.1h-0.2H612h-0.1h-0.2
|
681 |
+
h-0.2h-0.1l-0.3-0.1l-0.3-0.1h-0.1l-0.3-0.1l-0.3-0.1l0,0l-0.2-0.2l-0.2-0.2L609.5,90.5L609.5,90.5z M586.1,91.5L586.1,91.5
|
682 |
+
l-0.5,0.3l0,0l-0.1,0.4v0.2l0.2-0.3L586.1,91.5l0.1-0.1L586.1,91.5z M599.9,89l-0.8,0.1l-0.1,0.1l-0.5,0.3l-0.4,0.3l-0.5,0.3
|
683 |
+
l-0.3,0.2h0.3h0.2h0.4h0.1h0.2h0.2h0.1l0.2,0.1l0.2,0.1h0.1l0.2,0.1l0.2,0.1v-0.2l0.1-0.3l0.2-0.3l0.1-0.3l0,0l0.2-0.2l0.1-0.2
|
684 |
+
l0,0L599.9,89z"
|
685 |
+
/>
|
686 |
+
<path
|
687 |
+
fill="#25B3FF"
|
688 |
+
d="M474.6,336.5h0.3h0.4l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.2l0.5,0.3
|
689 |
+
l0.5,0.3l0.4,0.3l0.4,0.3l0.4,0.2l0.3,0.2l0.1,0.1l0.1,0.1l0.3,0.1l0.2,0.1l0.2,0.1h0.1l0.4,0.1l0.5,0.1l0.5,0.1l0.5,0.1
|
690 |
+
l0.5,0.1l0.9,0.2l0.9,0.2l0.9,0.2l1.8,0.4l0.8,0.2l0.8,0.2l0,0l0.2-0.1l0.2-0.1h0.2h0.2h0.2h0.2h0.2h0.2h0.3h0.2l0.5,0.1
|
691 |
+
l0.5,0.1l0.5,0.1l0.4,0.1l0.4,0.1l0.4,0.2l0.2,0.1l0.2,0.1l0.2,0.1l0.1,0.1l0.2,0.1l0,0l0.2,0.1l0.1,0.1l0.1,0.1l0,0l0.1,0.2
|
692 |
+
l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0,0l0.1,0.2v0.2l0.1,0.2v0.2v0.2v0.2v0.2v0.2l0,0l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2
|
693 |
+
l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2h-0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.2,0.1l-0.1,0.1l-0.2,0.1h-0.1l-0.1,0.1l-0.2,0.1
|
694 |
+
l-0.2,0.1h-0.1h-0.2h-0.2h-0.2h-0.3h-0.2h-0.3h-0.2H493l-0.5-0.1l-0.5-0.1v0.1l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2
|
695 |
+
l-0.1,0.2l-0.2,0.1l-0.1,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1h-0.1l-0.2,0.1l-0.2,0.1h-0.2h-0.2l0,0h-0.2h-0.1h-0.2h-0.6
|
696 |
+
h-0.6h-0.5h-0.6l-1.2,0.1h-1.2h-0.6h-0.7h-0.6h-0.7h-0.7h-0.7l-0.7-0.1h-0.1H479h-0.8h-0.8h-0.8h-0.8h-1.5h-1.5h-1.5h0.7
|
697 |
+
l-0.9,0.4l-1.1,0.5l-0.7,0.3l-0.2,0.2l-0.3,0.3l-0.4,0.3l-0.5,0.3l-0.2,0.2l-0.2,0.2l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1
|
698 |
+
l-0.2,0.1l-0.3,0.1l-0.2,0.1h-0.1h-0.2h-0.1h-0.1h-0.2h-0.1h-0.1h-0.2h-0.2h-0.1h-0.1h-0.2h-0.2l-0.2-0.1l-0.2-0.1h-0.1
|
699 |
+
l-0.4,0.1l-0.6,0.2l-0.6,0.1l-0.4,0.1l-0.3,0.1l-0.3,0.1h-0.3h-0.4H460h-0.3h-0.3H459h-0.3h-0.4h-0.2h-0.2h-0.2h-0.1h-0.1h-0.2
|
700 |
+
l-0.2-0.1l-0.1-0.1l-0.2-0.1l0,0l-0.2-0.1l-0.2-0.1l-0.1-0.1l-0.2-0.1l0,0l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.2
|
701 |
+
l-0.1-0.2l-0.1-0.2l0,0l-0.1-0.2l-0.1-0.2l-0.1-0.2v-0.2L455,351v-0.2v-0.2l0,0v-0.2l0.1-0.2l0.1-0.2v-0.2l0.1-0.2l0.1-0.2l0,0
|
702 |
+
l0.1-0.2l0.1-0.1l0.1-0.1l0.1-0.1l0,0l0.1-0.2l0.2-0.1l0.1-0.1h0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.4-0.2
|
703 |
+
l0.4-0.2l0.5-0.2l0.8-0.3l0,0l0.1-0.2l0,0l0.1-0.1l0.1-0.1l0.1-0.1l0,0l0.1-0.1l0.1-0.1l0,0l0.1-0.2l0.1-0.2l0.1-0.1l0.1-0.1
|
704 |
+
l0.1-0.1l0.2-0.2l0.3-0.2l0.2-0.2l0.2-0.2l0.2-0.1l0.3-0.1l0.5-0.3l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.8-0.4l0.7-0.3l0.2-0.1
|
705 |
+
l0,0l1.2-0.6l0.8-0.4l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.1l0.2-0.1h0.1l0,0v-0.1v-0.1v-0.2v-0.1l0.1-0.2v-0.2v-0.1l0.1-0.1
|
706 |
+
v-0.1l0.1-0.2l0.1-0.3l0.1-0.3l0.2-0.3l0.1-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.3-0.1l0.3-0.1l0.3-0.1
|
707 |
+
l0.3-0.1h0.2h0.3L474.6,336.5z"
|
708 |
+
/>
|
709 |
+
<path
|
710 |
+
fill="#25B3FF"
|
711 |
+
d="M632.9,316.7h0.5h0.5h0.4h0.2h0.2l0.2,0h0.2h0.2l0.2,0.1l0.2,0.1l0.2,0.1l0.1,0.1l0.2,0.1l0.1,0.1l0.2,0.1
|
712 |
+
l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2v0.2l0.1,0.2v0.2v0.2l-0.1,0.2v0.2
|
713 |
+
l-0.1,0.2l-0.1,0.2v0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.2,0.1l-0.1,0.1
|
714 |
+
l-0.2,0.1l-0.1,0.1l-0.2,0.1l-0.2,0.1h-0.2h-0.2h-0.2h-0.2h-0.2l-0.4,0h-0.4h-0.4h-0.4h-0.4h-0.4h-0.4h-0.4h-0.4l-0.4,0.1
|
715 |
+
l-0.4,0.1l-0.4,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.2l-0.8,0.2l-0.8,0.2l-0.8,0.2l-0.8,0.2l-0.3,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
|
716 |
+
l-0.2,0.1l-0.1,0.1l-0.2,0.1l-0.2,0.1l-0.1,0.1l-0.2,0.1l-0.2,0.1l-0.5,0.2l-0.7,0.2l-0.8,0.2l-0.8,0.2l-0.4,0.1l-0.5,0.1
|
717 |
+
l-0.4,0.1l-0.5,0.1l-0.4,0.1l-0.4,0.1l-7,0.8h-0.5h-0.6h-0.5h-0.6h-0.8h-0.2h-0.2h-0.2h-0.2h-0.2l-0.1-0.1l-0.2-0.1l-0.2-0.1
|
718 |
+
l-0.2-0.1l-0.1-0.1l-0.1-0.1l-0.2-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2
|
719 |
+
l-0.1-0.2l-0.1-0.2v-0.2l-0.1-0.2v-0.2v-0.2l0.1-0.2v-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.1l0.1-0.1
|
720 |
+
l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.2-0.1l0.1-0.1l0.2-0.1l0.1-0.1l0.2-0.1l0.2-0.1h0.2h0.2h0.2h0.2h0.2h0.2h0.4h0.4h0.4h0.4
|
721 |
+
l0,0l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.2-0.1l0.2-0.1l0.3-0.1l0.3-0.1l0.2-0.1l0.3-0.1l0.2-0.1l0.2-0.1l0.5-0.1
|
722 |
+
l0.5-0.1l0.5-0.1l0.5-0.1l0.6-0.1h0.6h0.6h0.6h0.6l1.2-0.1h1.1h0.4l1.3-0.3l1.7-0.4l0.9-0.2l0.8-0.2l0.9-0.2l0.9-0.2l0.9-0.2
|
723 |
+
l0.9-0.2l0.9-0.2l0.9-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.4-0.1l0.5-0.1h0.5h0.5h0.5L632.9,316.7z"
|
724 |
+
/>
|
725 |
+
<g transform="matrix(1,0,0,1,400.214,44.558)">
|
726 |
+
<path
|
727 |
+
d="M208.6,8l0.8,0h0.8l0.8,0h0.8l0.8,0h0.8l0.8,0.1l0.8,0.1l0.8,0.1l0.8,0.1l0.8,0.1l0.8,0.1l0.8,0.1l0.8,0.1
|
728 |
+
l0.8,0.1l0.8,0.1l0.8,0.1l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.2
|
729 |
+
l0.8,0.2l0.8,0.2l0.8,0.3l0.8,0.3l0.8,0.3l0.8,0.3l0.8,0.3l0.8,0.3L239,14l0.8,0.3l1.5,0.6l1.5,0.6l1.5,0.6l1.4,0.6l1.4,0.6
|
730 |
+
l1.4,0.6l1.3,0.6l1.3,0.6l1.3,0.6l1.2,0.6l1.2,0.6l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.9,0.4
|
731 |
+
l0.9,0.3l0.9,0.3l0.9,0.3l1,0.3l1,0.3l1,0.3l1,0.3l2,0.6l2.1,0.6l2.1,0.6l1.1,0.3l1.1,0.3l1.1,0.3l1.1,0.4l1.1,0.4l1.1,0.4
|
732 |
+
l1.1,0.4l1.1,0.4l0.6,0.2l0.6,0.2l0.5,0.2l0.6,0.2l0.6,0.2L284,31l0.6,0.3l0.6,0.3l0.6,0.3l0.6,0.3l0.5,0.3l0.5,0.3l0.9,0.5
|
733 |
+
l0.9,0.5l0.9,0.5l0.9,0.5l0.9,0.5l0.9,0.5l0.8,0.5l0.8,0.5l0.8,0.5l0.8,0.5l0.8,0.5l0.8,0.5l0.8,0.5l0.8,0.5l0.8,0.5l0.8,0.6
|
734 |
+
l0.8,0.6l0.8,0.6l0.8,0.6l0.8,0.6l0.8,0.6l0.8,0.6l0.7,0.6l0.7,0.6l0.7,0.6l0.7,0.6l0.7,0.6l0.7,0.6l0.7,0.6l0.7,0.6l0.7,0.6
|
735 |
+
l0.7,0.6l0.7,0.6l0.7,0.6l0.7,0.6l0.7,0.6l0.7,0.6l0.7,0.6l0.7,0.6l0.6,0.6l0.6,0.7l0.6,0.7l0.6,0.7l0.6,0.7l0.6,0.7l0.6,0.7
|
736 |
+
l0.6,0.7l0.6,0.7l0.6,0.7l0.6,0.7l0.6,0.7l0.6,0.7l0.6,0.7l0.6,0.7l0.6,0.7l0.6,0.7l0.5,0.7l0.5,0.7l0.5,0.7l0.5,0.7l0.5,0.7
|
737 |
+
l0.5,0.7l0.5,0.7l0.5,0.7l0.5,0.7l0.5,0.7l0.5,0.7l0.5,0.7l0.5,0.8l0.5,0.8l0.5,0.8l0.5,0.8l0.5,0.8l0.5,0.8l0.5,0.8l0.5,0.8
|
738 |
+
l0.5,0.8l0.5,0.8l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.8
|
739 |
+
l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.9l0.4,0.9l0.7,1.7l0.7,1.7l0.7,1.7l0.7,1.8
|
740 |
+
l0.6,1.8l0.6,1.8l0.6,1.8l0.6,1.8l0.6,1.8l0.6,1.8l0.6,1.8l0.5,1.9l0.5,1.8l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4
|
741 |
+
l0.1,0.4l0.1,0.4l0.1,0.4l0.2,0.4l0.3,0.8l0.3,0.7l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.8l0.8,1.6l0.4,0.8l0.4,0.8l0.4,0.9
|
742 |
+
l0.4,0.9l0.4,0.9l0.4,0.9l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.1,0.5l0.1,0.5
|
743 |
+
l0.1,0.5l0.1,0.5l0.1,0.6l0.1,0.5l0.1,0.6l0.1,0.6l0.1,0.6l0.1,0.6v0.6v0.6v0.6v0.5l-0.1,0.9l-0.2,0.9l-0.3,0.8l-0.4,0.8
|
744 |
+
l-0.5,0.7l-0.6,0.6l-0.7,0.5l-0.8,0.4l-0.8,0.3l-0.9,0.1H360l-0.9-0.1l-0.9-0.3l-0.8-0.4l-0.7-0.5l-0.7-0.6l-0.6-0.7l-0.4-0.8
|
745 |
+
l-0.3-0.8l-0.2-0.9l-0.1-0.9v-0.4v-0.3v-0.3v-0.3V153v-0.3v-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3
|
746 |
+
l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.3-0.7l-0.3-0.7
|
747 |
+
l-0.4-0.7l-0.4-0.7l-0.4-0.8l-0.4-0.8l-0.8-1.6l-0.4-0.8l-0.4-0.8l-0.4-0.9l-0.4-0.9l-0.4-0.9l-0.4-0.9l-0.4-0.9l-0.2-0.5
|
748 |
+
l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.1-0.5l-0.5-1.8l-0.5-1.8l-0.5-1.8l-0.5-1.7
|
749 |
+
l-0.6-1.7l-0.6-1.7l-0.6-1.7l-0.6-1.7l-0.6-1.7l-0.6-1.7l-0.6-1.6l-0.6-1.6l-0.7-1.6l-0.3-0.8l-0.3-0.8l-0.3-0.8l-0.3-0.8
|
750 |
+
l-0.3-0.8l-0.3-0.8l-0.3-0.8l-0.4-0.8l-0.4-0.8l-0.4-0.8l-0.4-0.8l-0.4-0.8l-0.4-0.8l-0.4-0.8l-0.4-0.8l-0.4-0.7l-0.4-0.7
|
751 |
+
L331,94l-0.4-0.7l-0.4-0.7l-0.4-0.7l-0.4-0.7l-0.4-0.7l-0.4-0.7l-0.4-0.7l-0.4-0.7l-0.4-0.7L327,87l-0.4-0.7l-0.4-0.7l-0.4-0.7
|
752 |
+
l-0.4-0.7l-0.4-0.7l-0.5-0.7l-0.5-0.7l-0.5-0.7l-0.5-0.7l-0.5-0.7l-0.5-0.7l-0.5-0.7l-0.5-0.7l-0.5-0.7l-0.5-0.7l-0.5-0.7
|
753 |
+
l-0.5-0.6l-0.5-0.6L318,74l-0.5-0.6l-0.5-0.6l-0.5-0.6l-0.5-0.6l-0.5-0.6l-0.5-0.6l-0.5-0.6l-0.5-0.6l-0.5-0.6l-0.6-0.6
|
754 |
+
l-0.6-0.6l-0.6-0.6l-0.6-0.6l-0.6-0.6l-0.6-0.6l-0.6-0.6l-0.6-0.6l-0.6-0.6l-0.6-0.6l-0.6-0.6l-0.6-0.6l-0.6-0.6l-0.6-0.6
|
755 |
+
l-0.6-0.6l-0.6-0.6l-0.6-0.6l-0.6-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5
|
756 |
+
l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.8-0.5l-0.8-0.5l-0.8-0.5l-0.8-0.5l-0.8-0.5
|
757 |
+
l-0.8-0.5l-0.8-0.5l-0.8-0.5l-0.8-0.5l-0.8-0.5l-0.8-0.5l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2
|
758 |
+
l-0.4-0.2l-0.4-0.2l-0.5-0.2l-0.5-0.2l-0.4-0.2l-0.9-0.4l-0.9-0.4l-0.9-0.3l-1-0.3l-1-0.3l-1-0.3l-1-0.3l-1-0.3l-2-0.6
|
759 |
+
l-2.1-0.6l-2.1-0.6l-1.1-0.3l-1.1-0.3l-1.1-0.3l-1.1-0.4l-1.1-0.4l-1.1-0.4l-1.1-0.4l-1.1-0.4l-0.6-0.2l-0.5-0.2l-0.5-0.2
|
760 |
+
l-0.5-0.2l-0.5-0.2l-0.5-0.3l-0.5-0.3l-0.5-0.3l-1.1-0.6l-1.2-0.6l-1.2-0.6l-1.2-0.6l-1.2-0.6l-1.3-0.6l-1.3-0.6l-1.3-0.6
|
761 |
+
l-1.3-0.5l-1.4-0.5l-1.4-0.5l-0.7-0.3l-0.7-0.2l-0.7-0.3l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2L230,24l-0.7-0.2
|
762 |
+
l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2L223,22l-0.7-0.2l-0.7-0.1l-0.7-0.1l-0.7-0.1
|
763 |
+
l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.6-0.1h-0.6h-0.6h-0.6h-0.6l-0.6,0h-0.6h-0.6h-0.6h-0.6
|
764 |
+
h-0.6h-0.5l-0.9,0.1l-0.9,0.1l-0.9,0.1l-0.9,0.1l-0.9,0.1l-0.9,0.2l-0.9,0.2l-0.9,0.2l-0.9,0.2l-0.9,0.2l-0.9,0.2l-0.9,0.2
|
765 |
+
l-0.9,0.2l-0.9,0.2l-0.9,0.2l-0.9,0.3l-0.9,0.3l-0.9,0.3l-0.9,0.3l-0.9,0.3l-0.9,0.3l-0.9,0.3l-0.9,0.3l-0.9,0.3l-0.9,0.3
|
766 |
+
l-0.9,0.3l-0.9,0.3l-0.9,0.4l-0.9,0.4l-0.9,0.4l-0.9,0.4l-0.9,0.4l-0.9,0.4l-0.9,0.4l-0.9,0.4l-0.9,0.4l-0.9,0.4l-0.9,0.4
|
767 |
+
l-0.9,0.4l-0.9,0.4l-1.7,0.9l-1.7,0.9l-1.7,0.9l-1.7,0.9l-1.7,0.9l-1.7,0.9l-1.7,0.9l-1.7,0.9l-3.4,1.9l-3.4,1.9l-0.5,0.3
|
768 |
+
l-0.6,0.3l-0.6,0.3l-0.6,0.3l-0.6,0.3l-0.6,0.3l-0.6,0.3l-0.6,0.3l-0.6,0.2l-0.6,0.2l-1.2,0.5l-1.2,0.5l-1.2,0.5l-1.2,0.4
|
769 |
+
l-1.2,0.4l-2.3,0.9l-2.3,0.8l-1.1,0.4l-1.1,0.4L132,51l-1.1,0.4l-1.1,0.4l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2
|
770 |
+
l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.4,0.3l-0.4,0.2l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.3
|
771 |
+
l-0.4,0.3l-0.4,0.3l-0.3,0.3l-0.3,0.3l-0.3,0.3l-0.3,0.3l-0.3,0.3l-0.3,0.3l-1.1,1.1l-1.2,1.2l-2.3,2.3l-2.4,2.3l-2.4,2.3
|
772 |
+
l-4.7,4.6l-2.3,2.3l-2.3,2.3L99,77.9L97.8,79l-1.2,1.1l-1.1,1.2l-1.1,1.1l-1.1,1.2l-1.1,1.2L91.1,86L90,87.2l-1.1,1.2l-1.1,1.2
|
773 |
+
l-1.1,1.2L85.6,92l-1.1,1.2l-1.1,1.2l-1,1.2l-0.9,1.1l-0.9,1.1l-0.9,1.1l-0.9,1.1l-0.9,1.1l-0.9,1.1l-0.9,1.1l-0.9,1.2
|
774 |
+
l-0.9,1.2l-0.9,1.2l-0.8,1.2l-0.8,1.2l-0.8,1.2l-0.8,1.2l-0.8,1.2l-0.8,1.2l-0.8,1.2l-0.8,1.2l-0.8,1.3l-0.8,1.3l-0.8,1.3
|
775 |
+
l-0.8,1.3l-0.7,1.3l-0.7,1.3l-0.7,1.3l-0.7,1.3l-0.7,1.3l-0.7,1.3l-0.7,1.3l-0.7,1.3l-0.7,1.3l-0.7,1.3l-0.6,1.3l-0.6,1.3
|
776 |
+
l-0.6,1.4l-0.6,1.4l-0.6,1.4l-0.6,1.4l-0.6,1.4l-0.5,1.4l-0.5,1.4l-0.5,1.4l-0.5,1.4l-0.5,1.4l-0.5,1.4l-0.5,1.4l-0.4,1.4
|
777 |
+
l-0.4,1.4l-0.4,1.4l-0.4,1.4l-0.4,1.4l-0.4,1.4l-0.3,1.4l-0.3,1.4l-0.3,1.4l-0.3,1.4l-0.3,1.4l-0.3,1.4l-0.2,1.4l-0.1,0.7
|
778 |
+
l-0.1,0.7l-0.1,0.7l-0.1,0.7l-0.1,0.7l-0.1,0.7l-0.1,0.7l-0.1,0.7l-0.1,0.7l-0.1,0.7l-0.1,0.7l-0.1,0.7l-0.1,0.7l-0.1,0.7
|
779 |
+
l-0.1,0.7l-0.2,0.7l-0.2,0.7l-0.2,0.7l-0.2,0.7l-0.2,0.7L42,187l-0.2,0.7l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.6
|
780 |
+
l-0.2,0.6l-0.5,1.2l-0.5,1.2l-0.5,1.2l-0.5,1.1l-0.5,1.1l-1,2.2l-0.1,0.3l-0.2,0.3l-0.3,0.7l-0.2,0.4l-0.2,0.4l-0.2,0.4
|
781 |
+
l-0.2,0.4l-0.2,0.4l0,0v0.1v0.9l-0.2,0.9l-0.3,0.8l-0.4,0.8l-0.5,0.7l-0.6,0.6l-0.7,0.5l-0.8,0.4l-0.8,0.3l-0.9,0.2h-0.9
|
782 |
+
l-0.9-0.1l-0.9-0.2l-0.8-0.4l-0.7-0.5l-0.7-0.6l0,0l-0.6-0.6l0,0l-0.4-0.7l0,0l-0.3-0.7v-0.1l-0.2-0.6l-0.1-0.3l-0.1-0.5
|
783 |
+
l-0.1-0.5v-0.5v-0.7l0.1-0.6l0.1-0.5l0.1-0.5l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.3l0.1-0.4l0.3-0.6l0.3-0.6l0.3-0.6
|
784 |
+
l0.3-0.5l0.2-0.5l0.4-0.7l0.1-0.1l0.9-2l0.5-1.1l0.5-1.1l0.4-1.1l0.4-1.1l0.4-1.1l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5
|
785 |
+
l0.2-0.5l0.2-0.5l0.2-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.4l0.1-0.4l0.1-0.5l0.1-0.7l0.1-0.8
|
786 |
+
l0.1-0.8l0.1-0.8l0.1-0.8l0.1-0.8l0.1-0.8l0.1-0.8l0.1-0.8l0.1-0.8l0.3-1.5l0.3-1.5l0.3-1.5l0.3-1.5l0.3-1.5l0.4-1.5l0.4-1.5
|
787 |
+
l0.4-1.5l0.4-1.5l0.4-1.5l0.4-1.5l0.5-1.5l0.5-1.5l0.5-1.5l0.5-1.5l0.5-1.5l0.5-1.5l0.6-1.5l0.6-1.5l0.6-1.5l0.6-1.5l0.6-1.5
|
788 |
+
l0.6-1.5l0.6-1.5l0.7-1.4l0.7-1.4l0.7-1.4l0.7-1.4l0.7-1.4l0.7-1.4l0.7-1.4l0.7-1.4l0.8-1.4l0.8-1.4l0.8-1.4l0.8-1.4l0.8-1.4
|
789 |
+
l0.8-1.4l0.8-1.4l0.8-1.3l0.8-1.3l0.8-1.3l0.9-1.3l0.9-1.3l0.9-1.3l0.9-1.3l0.9-1.3l0.9-1.3l0.9-1.3l0.9-1.2l0.9-1.2l0.9-1.2
|
790 |
+
l0.9-1.2l0.9-1.2l0.9-1.2l1-1.2l1-1.2l1-1.2l1-1.1l1.1-1.3l1.1-1.3l1.1-1.3l1.1-1.2l1.1-1.2l1.1-1.2l1.1-1.2l1.2-1.2l1.2-1.2
|
791 |
+
l1.2-1.2l1.2-1.2l1.2-1.2l1.2-1.2l1.2-1.2l1.2-1.2l1.2-1.2l2.4-2.3l2.4-2.3l4.7-4.6l2.3-2.3l2.3-2.3l2.3-2.3l1.1-1.1l1.2-1.2
|
792 |
+
l0.5-0.5l0.5-0.5l0.5-0.5l0.5-0.4l0.5-0.4l0.5-0.4l0.5-0.4l0.5-0.4l0.6-0.4l0.6-0.4l0.6-0.4l0.6-0.4l0.6-0.3l0.6-0.3l0.6-0.3
|
793 |
+
l0.6-0.3l0.6-0.3l0.6-0.3l0.6-0.3l0.6-0.3l0.6-0.3l0.6-0.3l0.6-0.3l0.6-0.3l0.6-0.3l0.6-0.3l1.2-0.5l1.2-0.5l1.2-0.5l1.2-0.5
|
794 |
+
l1.2-0.4l2.3-0.9l2.3-0.8l1.1-0.4l1.1-0.4l1.1-0.4l1.1-0.4l1-0.4l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.4-0.2
|
795 |
+
l0.4-0.2l0.4-0.2l0.4-0.2l3.4-1.8l3.4-1.9l1.7-0.9l1.7-0.9l1.7-0.9l1.8-0.9l1.8-0.9l1.8-0.9l1.8-0.9L167,22l0.9-0.4l0.9-0.4
|
796 |
+
l0.9-0.4l0.9-0.4l0.9-0.4l0.9-0.4l0.9-0.4l0.9-0.4l0.9-0.4L176,18l0.9-0.4l0.9-0.4l0.9-0.4l0.9-0.4l1-0.4l1-0.4l1-0.4l1-0.4
|
797 |
+
l1-0.3l1-0.3l1-0.3l1-0.3l1-0.3l1-0.3l1-0.3l1-0.3l1-0.3l1-0.3l1-0.2l1-0.2l1-0.2l1-0.2l1-0.2l1-0.2l1-0.2l1-0.2l1-0.2l1-0.1
|
798 |
+
l1-0.1l1.1-0.1l0.8-0.1l0.8-0.1L208.6,8z M35.3,198.2l-0.1-0.2l-0.1-0.1L35.3,198.2z M34.9,197.7l-0.2-0.3l-0.3-0.3L34.9,197.7
|
799 |
+
z"
|
800 |
+
/>
|
801 |
+
</g>
|
802 |
+
<g transform="matrix(1,0,0,1,381.866,45.2348)">
|
803 |
+
<path
|
804 |
+
d="M223.3,0.9l1.4-0.1l1.4-0.1l1.4-0.1l1.4,0l1.4,0l1.4,0l1.4,0l1.4,0l1.4,0l1.4,0l1.4,0l1.4,0l1.4,0l1.4,0.1
|
805 |
+
l1.4,0.1l1.4,0.1l1.4,0.1l1.4,0.1l1.4,0.1l1.4,0.1l1.4,0.1l1.4,0.1l1.4,0.1l1.4,0.2l1.4,0.2l1.4,0.2l1.4,0.2l1.4,0.2l1.4,0.2
|
806 |
+
l1.4,0.2l1.4,0.2l1.4,0.2l1.4,0.3l1.4,0.3l1.4,0.3l1.4,0.3l1.4,0.3l1.3,0.3l1.3,0.3l1.3,0.3l1.3,0.4l1.3,0.4l1.3,0.4l1.3,0.4
|
807 |
+
l1.3,0.4l1.3,0.4l1.3,0.4l1.3,0.4l1.3,0.5L292,10l1.3,0.5l1.3,0.5l1.3,0.5l1.3,0.5l1.3,0.6l1.3,0.6l1.2,0.6l1.2,0.6l1.2,0.6
|
808 |
+
l1.2,0.6l1.2,0.6l1.2,0.7l1.2,0.7l1.2,0.7l1.2,0.7l1.2,0.7l1.2,0.7l1.2,0.8l1.1,0.8l1.1,0.8l1.1,0.8l0.6,0.4l0.6,0.4l0.6,0.4
|
809 |
+
l0.5,0.4l0.5,0.4l0.5,0.4l0.5,0.4l0.5,0.4l0.5,0.4l0.5,0.4l0.5,0.5l0.5,0.4l0.5,0.5l0.5,0.5l0.5,0.5l0.5,0.5l0.5,0.5l0.5,0.5
|
810 |
+
l0.5,0.5l0.5,0.5l0.5,0.5l0.5,0.5l0.5,0.5l0.5,0.5l0.5,0.5l0.5,0.5l0.5,0.5l0.5,0.5l0.5,0.5l0.5,0.5l0.5,0.5l0.5,0.5l0.5,0.6
|
811 |
+
l0.5,0.5l0.5,0.6l0.5,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6
|
812 |
+
l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.1,0.2l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.2l0.1,0.1l0.1,0.2
|
813 |
+
l0.1,0.1l0.3,0.4l0.3,0.4l0.4,0.4l0.4,0.4l0.4,0.4l0.5,0.4l0.5,0.4l1,0.9l1.1,1l0.6,0.5l0.6,0.5l0.6,0.6l0.6,0.6l0.6,0.6
|
814 |
+
l0.6,0.6l0.6,0.7l0.6,0.7l0.3,0.4l0.3,0.4l0.3,0.4l0.3,0.4l0.3,0.4l0.3,0.4l0.3,0.4l0.3,0.4l0.3,0.4l0.3,0.4l0.3,0.4l0.3,0.5
|
815 |
+
l0.3,0.5l0.3,0.5l0.3,0.5l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.5,0.8
|
816 |
+
l0.5,0.8l0.5,0.8l0.5,0.8l0.6,0.8l0.6,0.8l0.6,0.8l0.6,0.8l0.6,0.8l1.3,1.7l1.3,1.7l0.7,0.9l0.7,0.9l0.7,0.9l0.7,0.9l0.7,0.9
|
817 |
+
l0.7,0.9l0.7,1l0.7,1l0.6,1l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.6l0.3,0.6l0.3,0.6l0.3,0.7
|
818 |
+
l0.3,0.7l0.3,0.6l0.3,0.6l0.3,0.6l0.3,0.6l0.3,0.6l0.2,0.6l0.2,0.6l0.2,0.6l0.2,0.6l0.2,0.6l0.2,0.6l0.4,1.2l0.4,1.2l0.4,1.2
|
819 |
+
l0.4,1.2l0.3,1.2l0.3,1.2l0.3,1.2l0.6,2.3l0.6,2.3l0.3,1.1l0.3,1.1l0.3,1.1l0.3,1.1l0.3,1.1l0.3,1.1l0.4,1.1l0.2,0.5l0.2,0.5
|
820 |
+
l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.3,0.6l0.2,0.4l0.2,0.5l0.2,0.4
|
821 |
+
l0.2,0.5l0.3,0.9l0.3,1l0.4,1.1l0.4,1.1l0.4,1.2l0.4,1.3l0.8,2.7l0.9,2.8l0.9,2.9l0.9,2.9l0.4,1.4l0.4,1.4l0.4,1.3l0.4,1.3
|
822 |
+
l0.4,1.2l0.4,1.1l0.4,1l0.3,0.9l0.2,0.4l0.1,0.3l0.1,0.1l0.7,0.9l0.6,0.9l0.5,1l0.4,1.1l0.2,1.1l0.1,1.1l-0.1,1.1l-0.2,1.1
|
823 |
+
l-0.3,1.1l-0.5,1l-0.6,0.9l-0.7,0.9l-0.8,0.8l0,0l-0.8,0.6l-0.8,0.5l0,0l-0.9,0.4l-1,0.3l0,0l-1,0.2l-1,0.1l0,0h-1l-1-0.1h-0.1
|
824 |
+
l-0.7-0.2l-0.7-0.2h-0.1l-0.6-0.3l-0.6-0.3h-0.1l-0.9-0.6l-0.3-0.3l-0.6-0.5l-0.5-0.5l-0.4-0.4l-0.3-0.4l-0.4-0.6l-0.4-0.6
|
825 |
+
l-0.3-0.6l-0.3-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.6l-0.4-1.1l-0.4-1.2l-0.4-1.3l-0.4-1.3l-0.5-1.4
|
826 |
+
l-0.5-1.4l-0.5-1.4l-0.5-1.5l-0.9-3l-0.9-2.9l-0.9-2.8l-0.8-2.6l-0.4-1.2l-0.4-1.1l-0.3-1l-0.3-0.9l-0.3-0.7l-0.2-0.6l-0.1-0.2
|
827 |
+
l-0.1-0.1l0,0l0,0l-0.3-0.6l-0.3-0.7l-0.3-0.7l-0.3-0.7l-0.3-0.7l-0.3-0.7l-0.3-0.7l-0.3-0.7l-0.3-0.7l-0.2-0.7l-0.2-0.7
|
828 |
+
l-0.2-0.7l-0.2-0.7l-0.2-0.7l-0.4-1.3l-0.4-1.3l-0.4-1.3l-0.4-1.2l-0.3-1.2l-0.3-1.2l-0.3-1.2l-0.6-2.3l-0.6-2.3L366,118
|
829 |
+
l-0.3-1.1l-0.3-1.1l-0.3-1.1l-0.3-1l-0.3-1l-0.3-1l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5
|
830 |
+
l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.4l-0.2-0.5l-0.2-0.4L361,104l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4L360,102
|
831 |
+
l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.5-0.8l-0.5-0.8l-0.5-0.8l-0.5-0.8l-0.6-0.8l-0.6-0.8l-0.6-0.8l-0.6-0.8l-0.6-0.8l-1.3-1.7
|
832 |
+
l-1.3-1.7l-0.7-0.9l-0.7-0.9l-0.7-0.9l-0.7-0.9l-0.7-0.9l-0.7-0.9l-0.7-1l-0.7-1l-0.6-1l-0.3-0.5l-0.3-0.5l-0.3-0.5l-0.3-0.5
|
833 |
+
l-0.3-0.5l-0.3-0.5l-0.3-0.5l-0.3-0.5l-0.3-0.6l-0.2-0.5l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2
|
834 |
+
l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4
|
835 |
+
l-0.5-0.4l-0.5-0.4l-0.5-0.5l-0.5-0.5l-1.1-1l-1.1-1l-0.6-0.5l-0.6-0.6l-0.6-0.6l-0.6-0.6l-0.6-0.6l-0.6-0.7l-0.6-0.7l-0.3-0.4
|
836 |
+
l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.2-0.4l-0.4-0.6l-0.3-0.5l-0.3-0.5l-0.3-0.5
|
837 |
+
l-0.3-0.5l-0.3-0.5l-0.3-0.5l-0.3-0.5l-0.3-0.5l-0.3-0.5l-0.3-0.5l-0.3-0.5l-0.3-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5
|
838 |
+
l-0.4-0.5l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4
|
839 |
+
l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4
|
840 |
+
l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.3l-0.4-0.4l-0.4-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.4-0.3l-0.9-0.7l-0.9-0.6
|
841 |
+
l-0.9-0.6l-1-0.6l-1-0.6l-1-0.6l-1-0.6l-1-0.6l-1-0.6l-1-0.5l-1-0.5l-1-0.5l-1-0.5l-1-0.5l-1.1-0.5l-1.1-0.5l-1.1-0.5l-1.1-0.5
|
842 |
+
l-1.1-0.4l-1.1-0.4l-1.1-0.4l-1.1-0.4l-1.1-0.4l-1.1-0.4l-1.1-0.4l-1.1-0.4l-1.1-0.4L278,23l-1.2-0.3l-1.2-0.3l-1.2-0.3
|
843 |
+
l-1.2-0.3l-1.2-0.3l-1.2-0.3l-1.2-0.3l-1.2-0.3l-1.2-0.2l-1.2-0.2l-1.2-0.2l-1.2-0.2l-1.2-0.2l-1.2-0.2l-1.2-0.2l-1.2-0.2
|
844 |
+
l-1.2-0.2l-1.2-0.2l-1.2-0.1l-1.2-0.1l-1.3-0.1l-1.3-0.1l-1.3-0.1l-1.3-0.1l-1.3-0.1l-1.3-0.1l-1.3-0.1l-1.3-0.1l-1.3-0.1H241
|
845 |
+
l-1.3,0h-1.3h-1.3h-1.3h-1.3l-1.3,0h-1.3h-1.3h-1.3H228l-1.3,0l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.3,0.1
|
846 |
+
l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.3,0.2l-1.3,0.2l-1.3,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2
|
847 |
+
l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.3l-1.2,0.3
|
848 |
+
l-1.3,0.3l-1.3,0.3l-1.3,0.3l-1.2,0.3l-1.2,0.3l-1.2,0.3l-1.2,0.3l-1.2,0.4l-1.2,0.4l-1.2,0.4l-1.2,0.4l-1.1,0.4l-1.1,0.4
|
849 |
+
l-1.1,0.4l-1.1,0.4l-1.1,0.4l-1.1,0.4l-1.1,0.4l-1.1,0.4l-1.1,0.4l-1,0.5l-1,0.5l-1,0.5l-1,0.5l-1,0.5l-1,0.5l-1,0.5l-1,0.5
|
850 |
+
l-1,0.5l-1,0.5l-1,0.5l-0.9,0.5l-0.9,0.5l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.6
|
851 |
+
l-0.9,0.6l-0.9,0.6l-0.8,0.6l-0.8,0.6l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7
|
852 |
+
l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7L127,55l-0.8,0.8l-0.8,0.8l-0.8,0.8l-0.8,0.8l-0.7,0.8l-0.7,0.8l-0.7,0.8
|
853 |
+
l-0.7,0.8l-0.1,0.1l-0.1,0.2l-0.2,0.5l-0.2,0.5l-0.3,0.5l-0.5,0.9l-0.5,0.9l-0.6,0.9l-0.6,0.9l-0.6,0.9l-0.6,0.9l-0.6,0.9
|
854 |
+
l-0.6,0.9l-0.6,0.9l-0.7,0.9l-0.7,0.9l-0.7,0.9l-0.7,0.8l-0.7,0.8l-0.7,0.8l-0.7,0.8l-0.7,0.8l-0.7,0.8l-0.7,0.8l-0.7,0.8
|
855 |
+
l-0.7,0.8l-0.7,0.8l-0.7,0.8l-1.5,1.6l-1.5,1.6l-1.5,1.6l-1.1,1.2l-0.2,0.3l-1.4,2l-1.4,2l-1.4,2l-1.4,2l-2.8,4.1l-2.9,4.1
|
856 |
+
l-2.9,4.2l-1.5,2.1l-1.5,2.1l-1.5,2.1l-1.5,2.1l-1.2,1.7l-0.4,0.9l-0.5,1.2l-0.5,1.2l-0.5,1.2l-0.5,1.2l-0.5,1.2l-0.5,1.2
|
857 |
+
l-0.9,2.5l-0.9,2.5l-0.9,2.5l-0.9,2.6l-0.9,2.6l-1.8,5.2l-0.9,2.6l-0.9,2.6l-0.9,2.6l-1,2.6l-1,2.6l-0.5,1.3l-0.5,1.3l-0.5,1.3
|
858 |
+
l-0.5,1.3l-0.5,1.3l-0.5,1.4l-0.4,0.9l-0.4,0.9l-0.4,0.9l-0.4,0.9l-0.4,0.9l-0.4,0.9l-0.4,0.9l-0.4,0.9l-0.4,0.9l-0.4,0.9
|
859 |
+
l-0.4,0.8l-0.4,0.8l-0.4,0.8l-0.4,0.8l-0.4,0.8l-0.5,0.8l-0.9,1.6l-0.9,1.6l-0.9,1.5l-0.9,1.5l-1.8,3l-0.9,1.5l-0.8,1.5
|
860 |
+
l-0.2,0.3l-0.2,0.4l-0.2,0.5l-0.3,0.5l-0.3,0.6l-0.3,0.6l-0.6,1.4l-1.4,3l-0.7,1.5l-0.7,1.5l-0.4,0.7l-0.3,0.7l-0.3,0.7
|
861 |
+
l-0.4,0.7l-0.4,0.6l-0.4,0.6l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.3,0.4l-0.4,0.5l-0.5,0.5l-0.3,0.3l-0.7,0.6l-0.1,0.1l-0.5,0.4
|
862 |
+
l-0.6,0.4h-0.1l-0.7,0.3l-0.7,0.3l0,0l-0.6,0.2l-0.6,0.2l0,0l-0.7,0.1l-0.7,0.1l0,0h-0.9l-0.9-0.1l0,0l-0.9-0.2l-0.9-0.3l0,0
|
863 |
+
l-0.9-0.4l-0.8-0.5l0,0l-0.6-0.5l-0.6-0.5l0,0l-0.5-0.5l-0.5-0.6l0,0l-0.5-0.7l-0.4-0.7v-0.1l-0.3-0.7l-0.2-0.7v-0.1l-0.2-1
|
864 |
+
l-0.1-0.5l-0.1-0.8v-0.6v-0.6v-0.4l0.1-1.1l0.3-1.1l0.4-1l0.5-1l0.7-0.9l0.8-0.8l0.9-0.7l0.3-0.2l0.5-1.1l0.7-1.4l1.2-2.6v-0.1
|
865 |
+
v-0.5v-0.7V188v-0.7v-0.7v-0.7l0-0.7l0.1-0.7l0.1-0.7l0.1-0.7l0.1-0.7l0.1-0.7l0.1-0.7l0.1-0.7l0.1-0.7l0.1-0.7l0.1-0.7
|
866 |
+
l0.1-0.7l0.1-0.7l0.2-0.7l0.2-0.7l0.2-0.7l0.2-0.7l0.2-0.7l0.2-0.7l0.2-0.7l0.2-0.7l0.2-0.7l0.2-0.7l0.2-0.7l0.2-0.7l0.2-0.7
|
867 |
+
l0.2-0.7l0.5-1.4l0.5-1.4l0.5-1.4l0.5-1.4l0.5-1.4l0.6-1.4l0.6-1.4l0.6-1.4l0.6-1.4l0.6-1.4l0.6-1.4l0.6-1.4l0.7-1.4l0.7-1.4
|
868 |
+
l0.7-1.4l0.7-1.4l0.7-1.4l0.7-1.4l0.7-1.3l0.7-1.3l0.7-1.3l0.7-1.3l0.7-1.3l0.7-1.3l0.7-1.3l0.8-1.3l0.8-1.3l0.8-1.3l0.8-1.2
|
869 |
+
l0.8-1.2l0.8-1.2l0.8-1.2l0.3-0.4l0.6-1.1l1-1.9l1-1.9l1-1.9l1-1.9l1-1.9l1-1.9l1-1.9l0.5-0.9l0.5-0.9l0.5-0.9l0.5-0.9l0.5-0.9
|
870 |
+
l0.5-0.9l0.6-0.9l0.6-0.9l0.6-0.9l0.6-0.9l0.4-0.7l0.2-0.5l0.6-1.3l0.6-1.3l0.7-1.3l0.7-1.3l0.7-1.3l0.7-1.3l0.7-1.3l0.7-1.3
|
871 |
+
l0.7-1.3l0.7-1.3l0.8-1.3l0.8-1.3l0.8-1.3l0.8-1.3l0.8-1.3l0.8-1.3l0.9-1.3l0.5-0.7l0.5-0.7l0.5-0.7l0.5-0.7l0.5-0.7l0.5-0.7
|
872 |
+
l0.5-0.7l0.5-0.7l0.5-0.7l0.6-0.7l0.6-0.7l0.6-0.7l0.6-0.7l0.6-0.7l0.6-0.7l0.6-0.7l0.6-0.7l0.6-0.7l0.6-0.7l0.6-0.7l0.6-0.7
|
873 |
+
l0.6-0.7l0.6-0.7l0.6-0.7l0.6-0.7l0.6-0.6l0.6-0.6l0.6-0.6l0.6-0.6l0.6-0.6l0.6-0.6l0.6-0.6l1.5-1.5l0.9-0.9l1-1l1-1l1.1-1
|
874 |
+
l0.5-0.5l0.5-0.5l0.5-0.5l0.5-0.5l0.5-0.5l0.6-0.5l0.6-0.4l0.6-0.4l0.6-0.4l0.4-0.2l0.3-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.5-0.3
|
875 |
+
l0.6-0.3l0.8-0.3l0.5-0.1l1-0.2h0.1l0,0l0.2-0.2l0.8-0.8l0.9-0.8l0.9-0.8l0.9-0.8l0.9-0.8l0.9-0.8l0.9-0.8l0.9-0.8l0.9-0.8
|
876 |
+
l0.9-0.8l0.9-0.8l0.9-0.8l0.9-0.8l0.9-0.8l0.9-0.8l1-0.8l1-0.7l1-0.7l1-0.7l1-0.7l1-0.7l1-0.7l1-0.7l1-0.7l1-0.7l1-0.7l1.1-0.7
|
877 |
+
l1.1-0.7l1.1-0.7l1.1-0.6l1.1-0.6l1.1-0.6l1.1-0.6l1.1-0.6l1.1-0.6l1.1-0.6l1.1-0.6l1.2-0.6l1.2-0.6l1.2-0.5l1.2-0.5l1.2-0.5
|
878 |
+
l1.2-0.5l1.2-0.5l1.2-0.5l1.2-0.5l1.3-0.5l1.3-0.5l1.3-0.5l1.3-0.5l1.3-0.4L170,9l1.3-0.4l1.3-0.4l1.4-0.4l1.4-0.4l1.4-0.4
|
879 |
+
l1.4-0.4l1.4-0.4l1.4-0.3l1.4-0.3l1.4-0.3l1.3-0.3l1.3-0.3l1.3-0.3l1.3-0.3l1.3-0.3l1.3-0.3l1.3-0.2l1.3-0.2l1.3-0.2l1.3-0.2
|
880 |
+
l1.3-0.2l1.3-0.2l1.3-0.2l1.3-0.2l1.3-0.2l1.3-0.2l1.3-0.2l1.4-0.2l1.4-0.2l1.4-0.2l1.4-0.1l1.4-0.1l1.4-0.1l1.4-0.1l1.4-0.1
|
881 |
+
l1.4-0.1l1.4-0.1l1.4-0.1l1.4-0.1L223.3,0.9z M388.7,162.8l-0.7,0.6l0.9-0.7l0.8-0.4L388.7,162.8z M390.5,161.8l-0.5,0.3
|
882 |
+
l0.9-0.4L390.5,161.8z M392.2,161.4l0.4-0.1h-0.2L392.2,161.4z"
|
883 |
+
/>
|
884 |
+
<path
|
885 |
+
d="M156.3,235.9l1.3-0.1l1.3-0.1h1.4h1.3h1.3h1.4h1.3h1.4h1.3h1.3h1.3h1.3h1.3h1.3l1.3,0.1l1.3,0.1l1.3,0.1
|
886 |
+
l1.3,0.1l1.3,0.1l1.3,0.1l2.6,0.2l2.7,0.2l2.6,0.2l2.6,0.2l5.3,0.4l2.6,0.2l2.6,0.2l2.6,0.2l2.6,0.2l2.6,0.2l1.3,0.1l1.3,0.1
|
887 |
+
l1.3,0.1l1.3,0.1h1.3h1.3h1.3h1.3h1.3h1.3h1.3h1.2h1.2l1.2,0h1.2h1.2l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1
|
888 |
+
l1.2-0.1l1.2-0.2l1.2-0.2l1.2-0.2l1.1-0.2l1.1-0.2l1.1-0.2l0.9-0.2l0.9-0.2l1-0.2l1-0.2l1-0.2l1-0.2l1-0.3l1-0.3l1-0.3l1-0.3
|
889 |
+
l2.1-0.6l2.1-0.6l2.1-0.6l4.3-1.3l2.2-0.6l2.2-0.6l2.2-0.6l2.3-0.6l1.1-0.3l1.1-0.3l1.2-0.3l1.2-0.3l1.2-0.3l1.2-0.3l1.2-0.3
|
890 |
+
l1.2-0.3l1.2-0.3l1.2-0.2l1.2-0.2l1.2-0.2l1.2-0.2l1.2-0.2l1.2-0.2l1.2-0.2l1.2-0.2l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1
|
891 |
+
l1.2-0.1h1.2h0.6h0.6h0.6h0.6h0.6h0.6h0.6h0.6h0.6h0.6h0.6h0.6l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1
|
892 |
+
l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l2.6,0.5l2.6,0.5l5.4,1.1l2.8,0.6l2.8,0.6l2.9,0.6l2.9,0.6l2.9,0.6l3,0.6l1.5,0.3
|
893 |
+
l1.5,0.3l1.5,0.3l1.5,0.3l1.5,0.3l1.5,0.2l1.5,0.2l1.5,0.2l1.5,0.2l1.5,0.2l1.5,0.2l1.5,0.2l1.5,0.2l1.5,0.2l1.5,0.2l1.5,0.2
|
894 |
+
l1.5,0.2l1.5,0.2l1.5,0.1l1.5,0.1l1.5,0.1l1.5,0.1l1.5,0.1l1.4,0.1l1.4,0.1l1.4,0.1l1.4,0.1h1.4h1.4h1.4h1.4h1.4h1.3l1.3-0.1
|
895 |
+
h0.6h0.7h0.7h0.6h0.6h0.6l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1
|
896 |
+
l0.6-0.1l0.6-0.1l0.5-0.1l0.6-0.1l0.6-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.6-0.1l1-0.1l1-0.1l1-0.1l1-0.1l2-0.1l1.9-0.1h0.9
|
897 |
+
l0.9-0.1l0.9-0.1l0.8-0.1l0.8-0.1h0.4h0.4l0.4-0.1l0.4-0.1l0.4-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1
|
898 |
+
l0.3-0.1l0.3-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.1-0.1l0.1-0.1l0.1-0.1
|
899 |
+
l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.2l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1v-0.1v-0.1
|
900 |
+
v-0.1v-0.1v-0.1v-0.1V228l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0v-0.1v-0.1v-0.1v-0.1v-0.1
|
901 |
+
v-0.1v-0.1v-0.1v-0.1V227v-0.1v-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
|
902 |
+
l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.2l-0.1-0.1l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3
|
903 |
+
l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3
|
904 |
+
l-0.5-0.2l-0.5-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.8-0.3
|
905 |
+
l-0.9-0.3l-1.7-0.6l-1.8-0.6l-0.9-0.3l-0.9-0.3l-0.9-0.3l-0.9-0.3l-0.8-0.3l-0.8-0.2l-0.8-0.2l-0.3-0.1l-0.8,0.4l-0.5,0.2
|
906 |
+
l-0.6,0.3l-0.7,0.2l-0.4,0.1l-0.9,0.2l-0.9,0.1l0,0h-1l-0.9-0.1l-0.9-0.2l-0.9-0.3l0,0l-1.1-0.5l-1-0.6l-0.9-0.7l-0.8-0.9
|
907 |
+
l-0.7-1l0,0l-0.5-0.9l-0.4-1l-0.3-1l-0.1-1v-1l0,0l0.1-1.1l0.2-1.1l0.4-1l0,0l0.4-0.8l0.5-0.8v-0.1l0.7-0.8l0.2-0.3l0.3-0.3
|
908 |
+
l0.9-0.8l1-0.7l1.1-0.5l1.2-0.4h0.1l0.2-0.1l0.7-0.3l0.4-0.2l0.4-0.2l0.4-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.6-0.1l0.7-0.1l0.8-0.1
|
909 |
+
l0.8-0.1h0.6h0.5l0.6,0.1l0.5,0.1l0.7,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l1,0.3l1.1,0.3l1,0.3l1,0.3l1,0.3l1,0.3
|
910 |
+
l1,0.3l1.8,0.6l1.7,0.6l0.8,0.3l0.8,0.3l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.3l0.7,0.3l0.7,0.3l0.7,0.3l0.7,0.3l0.7,0.3l0.7,0.3
|
911 |
+
l0.7,0.3l0.7,0.4l0.7,0.4l0.7,0.4l0.7,0.4l0.7,0.4l0.7,0.4l0.7,0.4l0.7,0.5l0.7,0.5l0.7,0.5l0.7,0.5l0.7,0.5l0.7,0.5l0.7,0.5
|
912 |
+
l0.6,0.5l0.6,0.6l0.6,0.6l0.6,0.6l0.6,0.6l0.6,0.6l0.6,0.7l0.6,0.7l0.3,0.4l0.3,0.3l0.3,0.3l0.3,0.4l0.3,0.4l0.3,0.4l0.3,0.4
|
913 |
+
l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.5l0.2,0.5l0.2,0.4l0.2,0.5l0.1,0.5
|
914 |
+
l0.1,0.5l0.1,0.5l0.1,0.5l0.1,0.5l0.1,0.5l0.1,0.5l0.1,0.5v0.5v0.5v0.5v0.5v0.5v0.5v0.5l-0.1,0.5l-0.1,0.6l-0.1,0.5l-0.1,0.5
|
915 |
+
l-0.1,0.5l-0.1,0.5l-0.2,0.5l-0.2,0.5l-0.2,0.5l-0.2,0.5l-0.2,0.5l-0.2,0.5l-0.2,0.5l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.3,0.5
|
916 |
+
l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.5,0.5l-0.6,0.5l-0.6,0.5l-0.6,0.5
|
917 |
+
l-0.6,0.4l-0.6,0.4l-0.6,0.4l-0.6,0.4l-0.6,0.3l-0.6,0.3l-0.6,0.3l-0.6,0.3l-0.6,0.3l-0.6,0.2l-0.6,0.2l-0.6,0.2l-0.6,0.2
|
918 |
+
l-0.6,0.2l-0.6,0.2l-0.6,0.2l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1
|
919 |
+
l-1.1,0.1l-1.1,0.1l-1.1,0.1l-1.1,0.1l-1,0.1l-2,0.1l-1.9,0.1h-0.9l-0.9,0.1l-0.8,0.1l-0.8,0.1h-0.3h-0.4h-0.3h-0.3h-0.3
|
920 |
+
l-0.3,0.1H414l-0.3,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1
|
921 |
+
l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1h-0.8h-0.8h-0.8h-0.8l-1.5,0.1h-1.5h-1.5h-1.6h-1.6h-1.6h-1.6l-1.6-0.1l-1.6-0.1
|
922 |
+
l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.2l-1.6-0.2l-1.6-0.2l-1.6-0.2l-1.6-0.2l-1.6-0.2l-1.6-0.2
|
923 |
+
l-1.6-0.2l-1.6-0.2l-1.6-0.2l-1.6-0.2l-1.6-0.2l-1.6-0.3l-1.6-0.3l-1.6-0.3l-1.6-0.3l-1.5-0.3l-1.5-0.3l-1.5-0.3l-3-0.6l-3-0.6
|
924 |
+
l-3-0.6l-2.9-0.6l-2.9-0.6l-2.8-0.6l-5.4-1.1l-2.6-0.5l-2.5-0.5l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1
|
925 |
+
l-0.5-0.1l-0.5-0.1h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5h-1l-1,0.1l-1,0.1l-1,0.1
|
926 |
+
l-1,0.1l-1,0.1l-1,0.1l-1,0.1l-1,0.1l-1,0.2l-1,0.2l-1,0.2l-1,0.2l-1,0.2l-1,0.2l-1,0.2l-1.1,0.2l-1.1,0.2l-1.1,0.3l-1.1,0.3
|
927 |
+
l-1.1,0.3l-1.1,0.3l-1.1,0.3l-1.1,0.3l-2.2,0.6l-2.2,0.6l-2.2,0.6l-2.2,0.6l-4.3,1.3l-2.2,0.6l-2.2,0.6l-2.2,0.6l-1.1,0.3
|
928 |
+
l-1.1,0.3l-1.1,0.3l-1.1,0.3l-1.1,0.3l-1.1,0.3l-1.1,0.3l-1.1,0.2l-1.1,0.2l-1.1,0.2l-1.4,0.3l-1.4,0.2l-1.4,0.2l-1.4,0.2
|
929 |
+
l-1.4,0.2l-1.4,0.2l-1.4,0.2l-1.4,0.1l-1.4,0.1l-1.4,0.1l-1.4,0.1l-1.4,0.1l-1.4,0.1l-1.4,0.1l-1.4,0.1l-1.4,0h-1.4h-1.4h-1.4
|
930 |
+
h-1.4H220h-1.4h-1.4h-1.4h-1.4l-1.4-0.1l-1.4-0.1l-1.4-0.1l-1.4-0.1l-1.4-0.1l-2.7-0.2l-2.7-0.2l-2.7-0.2l-2.7-0.2l-2.7-0.2
|
931 |
+
l-5.3-0.4l-2.6-0.2l-2.6-0.2l-2.6-0.2l-2.6-0.2l-1.3-0.1l-1.3-0.1l-1.3-0.1l-1.3-0.1l-1.2-0.1l-1.2-0.1h-1.2h-1.2H167h-1.2
|
932 |
+
h-1.2h-1.2h-1.2H161h-1.2h-1.2h-1.3h-1.2h-1.3l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.3,0.1l-2.6,0.2l-2.6,0.2l-2.6,0.2
|
933 |
+
l-2.6,0.2l-5.3,0.4l-2.7,0.2l-2.7,0.2l-2.7,0.2l-2.7,0.2l-2.7,0.2l-1.4,0.1l-1.4,0.1l-1.4,0.1l-1.4,0.1l-1.4,0.1l-1.4,0.1
|
934 |
+
l-1.4,0.1h-1.4h-1.4h-1.4h-1.4h-1.4h-1.4h-1.4h-1.4h-1.4h-1.4h-1.4l-1.4-0.1l-1.4-0.1l-1.4-0.1l-1.4-0.1l-1.4-0.1l-1.4-0.1
|
935 |
+
l-1.4-0.1l-1.4-0.2l-1.4-0.2l-1.4-0.2l-1.4-0.2l-1.3-0.2l-1-0.2l-0.9-0.1l-0.9-0.1l-0.9-0.1l-0.9-0.1l-0.9-0.1l-0.9-0.1
|
936 |
+
l-0.9-0.1L69,253l-0.9-0.1l-1-0.1l-1-0.1l-1-0.1l-1-0.1l-1-0.1h-1l-2-0.1l-2-0.1l-2-0.1l-2-0.1h-2h-2l-4.1-0.1l-2.1-0.1
|
937 |
+
l-2.1-0.1l-2.1-0.1l-2.1-0.1l-1.1-0.1l-1.1-0.1l-1.1-0.1l-1.1-0.1l-1.1-0.1l-1.1-0.1l-1.1-0.1l-1.1-0.1l-1.1-0.1l-1.1-0.1
|
938 |
+
l-1.1-0.1l-1.1-0.1l-1.1-0.1l-1.1-0.1l-1.1-0.1l-1.1-0.2l-1.1-0.2l-1.1-0.2l-1.1-0.2l-1.1-0.2l-1.1-0.2l-1.1-0.2l-1.1-0.2
|
939 |
+
l-1.1-0.3l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2L7,246.9l-0.7-0.2l-0.7-0.2L5,246.2l-0.6-0.3l-0.6-0.3l-0.6-0.3
|
940 |
+
L2.6,245L2,244.7l-0.6-0.3l-0.6-0.3l-0.6-0.3l-0.5-0.3l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.4
|
941 |
+
l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.3-0.5l-0.3-0.5l-0.3-0.6l-0.3-0.6l-0.3-0.6l-0.2-0.6l-0.2-0.6
|
942 |
+
l-0.2-0.6l-0.2-0.6l-0.2-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.6v-0.6v-0.6l0-0.6v-0.6v-0.6l0.1-0.6l0.1-0.6l0.1-0.6l0.1-0.5
|
943 |
+
l0.1-0.5l0.1-0.5l0.1-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.4
|
944 |
+
l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4
|
945 |
+
l0.3-0.4l0.4-0.4l0.7-0.7l0.7-0.7l0.7-0.7l0.7-0.7l0.7-0.7l0.8-0.7l0.8-0.6l0.8-0.6l0.8-0.6l0.8-0.6l0.8-0.6l0.8-0.6l0.8-0.6
|
946 |
+
l0.8-0.5l0.8-0.5l0.8-0.5l0.8-0.5l0.8-0.5l0.8-0.5l0.8-0.4l0.7-0.4l0.1-0.1l0,0l0,0h0.1h0.1l0,0l0.2-0.1l0.2-0.2l0.2-0.2
|
947 |
+
l0.3-0.2l0.3-0.3l0.3-0.3l0.3-0.3l0.4-0.3l0.4-0.3l0.8-0.8l0.9-0.8l0.9-0.9l0.5-0.5l0.5-0.5l0.5-0.5l0.5-0.5l0.6-0.5l0.6-0.5
|
948 |
+
l0.6-0.5l0.6-0.5l0.7-0.5l0.7-0.5l0.4-0.3l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.3-0.2l1.1-0.5l1.2-0.3l1.2-0.2
|
949 |
+
h1.2l1.2,0.2l1.2,0.3l1.1,0.5l1,0.6l0.9,0.8l0.8,0.9l0.7,1l0.6,1.1l0.4,1.1l0.2,1.2l0.1,1.2l-0.1,1.2l-0.3,1.2l-0.4,1.1
|
950 |
+
l-0.6,1.1l-0.7,1l-0.8,0.9l-0.9,0.8l-1,0.6l-0.2,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.3,0.2
|
951 |
+
l-0.3,0.2l-0.3,0.2l-0.3,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.8,0.8l-0.9,0.9l-0.9,0.9l-0.5,0.5
|
952 |
+
l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.6,0.5l-0.6,0.5l-0.6,0.5l-0.6,0.4l-0.4,0.2l-0.3,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2
|
953 |
+
l-0.3,0.2l-0.6,0.3l-0.6,0.3l-0.6,0.3l-0.6,0.3l-0.6,0.3l-0.6,0.4l-0.6,0.4l-0.6,0.4l-0.6,0.4l-0.6,0.4l-0.6,0.4l-0.6,0.4
|
954 |
+
l-0.6,0.4l-0.5,0.4l-0.5,0.4l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2
|
955 |
+
l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2L9.6,225l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2L9.1,226
|
956 |
+
L9,226.2l-0.1,0.2l-0.1,0.2l-0.1,0.2L8.6,227l-0.1,0.1l-0.1,0.1l-0.1,0.1v0.1v0.1v0.1v0.1v0.1v0.1v0.1v0.1l0,0v0.1l0,0l0,0l0,0
|
957 |
+
l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.3,0.1l0.3,0.1l0.3,0.1
|
958 |
+
l0.3,0.1l0.3,0.1l0.3,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.9,0.2l0.9,0.2l0.9,0.2l0.9,0.2
|
959 |
+
l0.9,0.2l0.9,0.2l0.9,0.2l0.9,0.1l0.9,0.1l0.9,0.1l0.9,0.1l0.9,0.1l0.9,0.1l0.9,0.1l0.9,0.1l0.9,0.1l1,0.1l0.9,0.1l1,0.1l1,0.1
|
960 |
+
l1,0.1l1,0.1h1h1l2,0.1l2,0.1l2,0.1l2,0.1l4.1,0.1h2.1h2.1l2.1,0.1l2.1,0.1l2.1,0.1l2.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1
|
961 |
+
l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.2l1,0.2l1.2,0.2l1.2,0.2l1.2,0.2
|
962 |
+
l1.2,0.1l1.2,0.1l1.2,0.1l1.2,0.1l1.2,0.1l1.2,0.1l1.2,0.1l1.2,0.1l1.2,0.1h1.2h1.2h1.2h1.3h1.3h1.3h1.3h1.3h1.3h1.3h1.3
|
963 |
+
l1.3-0.1l1.3-0.1l1.3-0.1l1.3-0.1l1.3-0.1l1.3-0.1l1.3-0.1l2.6-0.2l2.6-0.2l2.6-0.2l2.6-0.2l2.7-0.2l5.3-0.4l2.7-0.2l2.7-0.2
|
964 |
+
l2.7-0.2l2.7-0.2l1.4-0.1l1.3-0.1l1.3-0.1L156.3,235.9z M411.9,211.1L411.9,211.1l0.5-0.6l0.1-0.1L411.9,211.1z"
|
965 |
+
/>
|
966 |
+
</g>
|
967 |
+
<g transform="matrix(1,0,0,1,400.214,44.558)">
|
968 |
+
<path
|
969 |
+
d="M6,210.5h0.6h0.6h0.6H9h1.2h1.1h1.1l1.1,0h1h1l1.9,0.1h0.8H19h0.7h0.6l1,0.1l0.9,0.2l0.9,0.4l0.8,0.5
|
970 |
+
l0.7,0.7l0.6,0.8l0.5,0.9l0.3,0.9l0.2,1v1l-0.2,1l-0.3,0.9l-0.5,0.9l-0.6,0.8l-0.7,0.7l-0.8,0.5l-0.9,0.4l-0.9,0.2l-1,0.1h-0.7
|
971 |
+
h-0.8H18h-0.9l-1.8-0.1h-1h-1h-1l-1,0h-1h-1h-1H7.8H7.3H6.8H6.3H5.8H5.3H4.8H4.3l-0.5,0.1l-0.4,0.1L3,222.8l-0.4,0.1L2.2,223
|
972 |
+
l-0.4,0.1l-0.4,0.1L1,223.3l-0.4,0.1l-0.3,0.1L0,223.6l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.2,0.1l-0.2,0.1l0,0l0.2,0.2l0.2,0.2
|
973 |
+
l0.2,0.2l0.2,0.1l0.3,0.1L0,225l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l1.6,0.7l1.6,0.7l1.6,0.7l1.7,0.7l1.7,0.7
|
974 |
+
l0.8,0.3l0.9,0.3L12,230l0.9,0.3l0.9,0.3l0.9,0.3l0.9,0.3l0.9,0.3l0.9,0.3l0.9,0.3l0.9,0.3l0.9,0.3l0.9,0.2l0.9,0.2l0.8,0.2
|
975 |
+
l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.2l0.3,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1h0.4H31h0.4h0.5h0.5h0.5
|
976 |
+
h0.5h0.5h0.5h0.5h0.5h1.1h1.1h1.1l1.1-0.1L41,235l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1
|
977 |
+
l1.2-0.2l1.2-0.2l2.3-0.3l2.2-0.3l4-0.6l0.5-0.1l0.5-0.1l0.9-0.1l0.9-0.1l0.9-0.1l0.9-0.1h0.9h0.9H70h0.9h0.9h0.9h0.9l1.7,0.1
|
978 |
+
l1.7,0.1l1.6,0.1h1.6H81h0.8h0.8h0.8h0.8h0.7h0.7h0.7H87l0.7-0.1l0.7-0.1h0.3h0.4l1.7-0.2l1.8-0.2l1.8-0.2l1.8-0.2L98,231
|
979 |
+
l1.8-0.2l1.8-0.2l1.8-0.2l1.8-0.2l1.8-0.2l1.8-0.2l1.8-0.2l1.8-0.2l1.8-0.2l1.8-0.2l1.8-0.1l1.8-0.1l1.8-0.1l1.8-0.1l1.8-0.1
|
980 |
+
l1.8-0.1l1.8-0.1l1.8-0.1l1.8-0.1l1.8-0.1l1.8-0.1l1.8-0.1h1.8h1.8h1.8h1.8h1.8h1.1h1.1h1.1h1.1h1.1l1.1,0.1l1,0.1l1,0.1l1,0.1
|
981 |
+
l1,0.1l1,0.1l1,0.1l1,0.1l1,0.1l1,0.1l1,0.1l1,0.2l1,0.2l1,0.2l0.9,0.2l0.9,0.2l0.9,0.2l0.9,0.2l0.9,0.2l0.9,0.2l0.9,0.2
|
982 |
+
l0.9,0.2l0.9,0.2l1.8,0.4l1.8,0.4l1.8,0.5l1.8,0.5l1.8,0.5l1.7,0.5l3.5,1l1.8,0.5l1.8,0.5l1.8,0.5l1.8,0.5l1.8,0.5l1.8,0.4
|
983 |
+
l1.8,0.4l0.9,0.2l0.9,0.2l0.9,0.2l0.9,0.2l0.9,0.2l0.9,0.2l0.4,0.1l0.4,0.1l0.4,0.1h0.4h0.4h0.4h0.4h0.4h0.4h0.4h0.4h0.4h0.4
|
984 |
+
h0.4h0.4h0.4l0.4,0h0.4l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.9-0.2l0.9-0.2
|
985 |
+
l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.3l1.9-0.6l1.9-0.7l1-0.3l1-0.3l1-0.3l1-0.3l1-0.3l1-0.3l1.4-0.4l1.4-0.4
|
986 |
+
l1.4-0.4l1.4-0.4l1.5-0.4l1.5-0.4l1.5-0.4l1.5-0.4l1.5-0.4l1.5-0.4l1.5-0.3l1.5-0.3l1.5-0.3l1.5-0.3l1.5-0.3l1.5-0.3l1.5-0.3
|
987 |
+
l1.5-0.3l1.5-0.3l1.5-0.3l1.5-0.3l1.5-0.3l1.5-0.3l1.5-0.3l1.5-0.3l1.5-0.3l1.5-0.2l1.5-0.2l1.5-0.2l1.5-0.2l1.5-0.2l1.5-0.2
|
988 |
+
l1.1-0.2l1.2-0.1l1.2-0.1l1.1-0.1l1.1-0.1l1.1-0.1l1.1-0.1h1.1h1.1h1.1h1.1h1.1h1.1h1.1h1.1h1.1l1.1,0.1l1.1,0.1l1.1,0.1
|
989 |
+
l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l2.1,0.3l2.1,0.3l2.1,0.3l2.1,0.3l4.1,0.6l2,0.3
|
990 |
+
l2,0.3l2,0.3l2,0.3l1,0.1l1,0.1l1,0.1l1,0.1l1,0.1l1,0.1l1,0.1l1,0.1l1,0.1l1,0.1l1,0.1h1h1h1h1h1h0.9h0.9h0.9h0.9h0.9h0.9h0.9
|
991 |
+
h0.9l0.9,0.1l0.9,0.1l1.7,0.1l1.7,0.1l1.7,0.1l1.7,0.2l1.7,0.2l3.3,0.3l3.3,0.3l1.6,0.2l1.6,0.2l1.6,0.2l1.6,0.1l1.6,0.1
|
992 |
+
l1.6,0.1l0.8,0.1h0.8h0.8h0.8h0.8h0.8h0.8h0.8h0.8h0.8h0.8h0.8h0.8h0.8h0.8h0.8h0.8h0.8l0.8-0.1l0.8-0.1l0.8-0.1l0.8-0.1
|
993 |
+
l0.8-0.1l0.8-0.1l0.7-0.1l0.9-0.1l0.4-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.2
|
994 |
+
l0.5-0.2l0.4-0.2l0.4-0.2l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1
|
995 |
+
l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0,0l0,0v-0.1l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2V225v-0.2v-0.2v-0.2v-0.2V224
|
996 |
+
v-0.2v-0.2v-0.2v-0.2V223v-0.2v-0.2v-0.2v-0.2v-0.1V222v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1V221v-0.1l0-0.1v-0.1
|
997 |
+
v-0.1v-0.1v-0.1l-0.1-0.1v-0.1v-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
|
998 |
+
l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
|
999 |
+
l-0.2-0.2l-0.2-0.1l-0.2-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1
|
1000 |
+
l-0.4-0.1l-0.4-0.1l-0.4-0.1h-0.4H406h-0.4h-0.4h-0.4h-0.4H404h-0.4h-0.4l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1
|
1001 |
+
l-0.4,0.1l-0.6,0.2l-0.4,0.1l-0.4,0.1l-0.7,0.1l-0.8,0.1l-0.9,0.1l-1,0.1l-1.1,0.1l-1.1,0.1l-1.2,0.1l-1.2,0.1h-0.6h-0.6h-0.6
|
1002 |
+
h-0.5h-0.5h-0.5h-0.5h-0.5l-0.6-0.1l-0.6-0.1l-0.4-0.1l-0.4-0.1l-0.3-0.1l-0.5-0.2h-0.1l-0.6-0.3h-0.1l-0.5-0.3l-0.4-0.4l0,0
|
1003 |
+
l-0.5-0.5l-0.4-0.6l0,0l-0.3-0.6l-0.3-0.6l-0.2-0.7l0,0l-0.1-1v-1l0.2-1l0.3-0.9l0.5-0.9l0.6-0.8l0.7-0.7l0.8-0.5l0.9-0.4
|
1004 |
+
l0.9-0.2l1-0.1l1,0.1l0.9,0.2l0.1,0.1h0.2h0.3h0.4h0.4h0.5h0.5h1l1-0.1l1-0.1l1-0.1l0.9-0.1l0.7-0.1l0.6-0.1h0.2l0.4-0.1
|
1005 |
+
l0.7-0.2l0.7-0.2l0.7-0.1l0.7-0.1l0.7-0.1l0.7-0.1l0.7-0.1l0.7-0.1h0.7h0.7h0.7h0.7h0.7l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1
|
1006 |
+
l0.7,0.1l0.7,0.2l0.7,0.2l0.7,0.2l0.7,0.2l0.7,0.2l0.6,0.2l0.6,0.3l0.6,0.3l0.6,0.3l0.6,0.3l0.6,0.4l0.6,0.4l0.5,0.4l0.3,0.2
|
1007 |
+
l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.2,0.2l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3
|
1008 |
+
l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.1,0.3l0.2,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.4
|
1009 |
+
l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4v0.4v0.4v0.4v0.4l0,0.4v0.4v0.4v0.4v0.4v0.4v0.4v0.4v0.4v0.4
|
1010 |
+
l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4L425,228l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.5l-0.2,0.5
|
1011 |
+
l-0.2,0.5l-0.2,0.5l-0.3,0.5l-0.3,0.4l-0.3,0.4l-0.3,0.4l-0.3,0.4l-0.3,0.4l-0.3,0.3l-0.3,0.3l-0.3,0.3l-0.3,0.3l-0.3,0.3
|
1012 |
+
l-0.3,0.3l-0.3,0.3l-0.4,0.2l-0.4,0.2l-0.3,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2
|
1013 |
+
l-0.4,0.2l-0.7,0.3l-0.7,0.3l-0.7,0.2l-0.7,0.2l-0.7,0.2l-0.7,0.2l-0.7,0.2l-0.7,0.2l-0.7,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1
|
1014 |
+
l-0.6,0.1l-0.6,0.1l-1,0.2l-0.9,0.1l-0.9,0.1l-0.9,0.1l-0.9,0.1l-0.9,0.1l-0.9,0.1l-0.9,0.1l-0.9,0.1h-0.9h-0.9H395h-0.9h-0.9
|
1015 |
+
h-0.9h-0.9h-0.9h-0.9h-0.9h-0.9h-0.9H386h-0.9l-0.9-0.1l-0.9-0.1l-0.9-0.1l-1.7-0.1l-1.7-0.1l-1.7-0.2l-1.7-0.2l-1.6-0.2
|
1016 |
+
l-1.6-0.2l-3.3-0.3l-3.2-0.3l-1.6-0.2l-1.6-0.2l-1.6-0.1l-1.6-0.1l-1.6-0.1l-0.8-0.1h-0.8h-0.8h-0.8h-0.8h-0.8h-0.8h-0.8h-0.8
|
1017 |
+
h-0.8h-1.1h-1.1h-1.1h-1.1l-1.1-0.1l-1.1-0.1l-1.1-0.1l-1.1-0.1l-1.1-0.1l-1.1-0.1l-1.1-0.1l-1.1-0.1l-1.1-0.1l-1.1-0.1
|
1018 |
+
l-1.1-0.1l-1.1-0.1l-2.1-0.3l-2.1-0.3l-2.1-0.3l-2.1-0.3l-4.1-0.6l-2-0.3l-2-0.3l-2-0.3l-2-0.3l-1-0.1l-1-0.1l-1-0.1l-1-0.1
|
1019 |
+
l-1-0.1l-1-0.1l-1-0.1l-1-0.1l-1-0.1l-1-0.1l-1-0.1l-1-0.1h-1h-1h-1h-1h-1h-1h-1h-1h-1l-1,0.1l-1,0.1l-1,0.1l-1,0.1l-1,0.1
|
1020 |
+
l-1,0.1l-1,0.1l-1.4,0.2l-1.4,0.2l-1.4,0.2l-1.4,0.2l-1.4,0.2l-1.4,0.2l-1.4,0.2l-1.4,0.3l-1.4,0.3l-1.4,0.3l-1.4,0.3l-1.4,0.3
|
1021 |
+
l-1.4,0.3l-1.4,0.3l-1.4,0.3l-1.4,0.3l-1.4,0.3l-1.4,0.3l-1.4,0.3l-1.4,0.3l-1.4,0.3l-1.4,0.3l-1.4,0.3l-1.4,0.3l-1.4,0.4
|
1022 |
+
l-1.4,0.4l-1.4,0.4l-1.4,0.4l-1.4,0.4l-1.4,0.4l-1.4,0.4l-1.4,0.4l-0.9,0.3l-0.9,0.3l-0.9,0.3l-0.9,0.3l-0.9,0.3l-0.9,0.3
|
1023 |
+
l-1.9,0.7l-1.9,0.7l-1,0.3l-1,0.3l-1,0.3l-1,0.3l-1,0.3l-1.1,0.3l-1.1,0.3l-1.1,0.3l-0.6,0.1l-0.5,0.1l-0.5,0.1l-0.6,0.1
|
1024 |
+
l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1h-0.6h-0.6l-0.6,0h-0.6h-0.6h-0.6h-0.6
|
1025 |
+
h-0.6h-0.6l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-1-0.2l-1-0.2l-1-0.2l-1-0.2l-1-0.2l-1-0.2l-1.9-0.5
|
1026 |
+
l-1.9-0.5l-1.9-0.5l-1.8-0.5l-1.8-0.5l-1.8-0.5l-1.8-0.5l-3.5-1l-1.7-0.5l-1.7-0.5l-1.7-0.4l-1.7-0.4l-1.7-0.4l-1.7-0.4
|
1027 |
+
l-0.8-0.2l-0.8-0.2l-0.9-0.2l-0.8-0.2l-0.9-0.2l-0.9-0.2l-0.9-0.2l-0.9-0.2l-0.9-0.2l-0.9-0.2l-0.9-0.1l-0.9-0.1l-0.9-0.1
|
1028 |
+
l-0.9-0.1l-0.9-0.1l-0.9-0.1l-0.9-0.1l-0.9-0.1l-0.9-0.1l-0.9-0.1l-0.9-0.1l-0.9-0.1l-0.9-0.1H151h-1h-1h-1h-1h-1.7h-1.7h-1.7
|
1029 |
+
h-1.7h-1.7l-1.8,0.1l-1.8,0.1l-1.8,0.1l-1.8,0.1l-1.8,0.1l-1.8,0.1l-1.8,0.1l-1.8,0.1l-1.8,0.1l-1.8,0.1l-1.8,0.1l-1.8,0.1
|
1030 |
+
l-1.8,0.2l-1.8,0.2l-1.8,0.2l-1.8,0.2l-1.8,0.2l-1.8,0.2l-1.8,0.2l-1.8,0.2l-1.8,0.2l-1.8,0.2l-1.7,0.2l-1.7,0.2l-1.7,0.2
|
1031 |
+
l-1.7,0.2l-1.7,0.2l-0.4,0.1l-0.5,0.1l-0.9,0.1l-0.9,0.1l-0.9,0.1h-0.9H85h-0.9h-0.9H82h-0.9h-0.9h-0.9l-1.7-0.1l-1.7-0.1
|
1032 |
+
l-1.6-0.1l-1.6-0.1h-0.8h-0.8h-0.8h-0.8h-0.8H68h-0.7h-0.7h-0.7l-0.7,0.1l-0.7,0.1h-0.3h-0.4l-3.9,0.6l-2.2,0.3l-2.3,0.3
|
1033 |
+
l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.3,0.1h-1.3
|
1034 |
+
h-1.3H35h-0.6h-0.6h-0.6h-0.6H32h-0.6h-0.6h-0.6h-0.6l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.5-0.1
|
1035 |
+
l-0.9-0.2l-0.9-0.2l-0.9-0.2l-0.9-0.2L21,245l-0.9-0.2l-0.9-0.2l-0.9-0.3l-0.9-0.3l-0.9-0.3l-0.9-0.3l-0.9-0.3l-0.9-0.3
|
1036 |
+
l-0.9-0.3l-0.9-0.3l-0.9-0.3l-0.9-0.3l-0.9-0.3L8.4,241l-0.9-0.3l-0.9-0.3l-0.9-0.3l-1.8-0.7l-1.8-0.7L0.4,238l-1.7-0.7
|
1037 |
+
l-1.7-0.7l-0.3-0.1l-0.3-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3
|
1038 |
+
l-0.5-0.3l-0.5-0.3l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.4-0.5l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.3
|
1039 |
+
l-0.2-0.3l-0.2-0.3l-0.2-0.4L-13,228l-0.2-0.4l-0.2-0.4l-0.1-0.4l-0.1-0.4l-0.1-0.4l-0.1-0.5l-0.1-0.5v-0.5V224v-0.5l0-0.5
|
1040 |
+
l0.1-0.5l0.1-0.5l0.1-0.5l0.2-0.5l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3
|
1041 |
+
l0.2-0.3l0.2-0.3l0.2-0.3l0.3-0.3l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.6-0.3
|
1042 |
+
l0.6-0.3l0.6-0.3l0.6-0.3l0.6-0.2l0.6-0.2l0.6-0.2l0.6-0.2l0.6-0.2l0.6-0.2l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1
|
1043 |
+
l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1h0.6h0.6L6,210.5z M389.5,208l-0.3-0.4l-0.1-0.1L389.5,208z"
|
1044 |
+
/>
|
1045 |
+
</g>
|
1046 |
+
<g transform="matrix(1,0,0,1,400.214,44.558)">
|
1047 |
+
<path
|
1048 |
+
d="M168.7,64h0.7h0.7h0.7h0.7h0.7l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.2
|
1049 |
+
l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.3l0.6,0.3l0.6,0.3l0.6,0.3l0.6,0.3l0.6,0.3l0.6,0.3
|
1050 |
+
l0.6,0.3l0.6,0.3l0.6,0.3l0.6,0.3l0.6,0.4l0.5,0.4l0.5,0.4l0.5,0.4l0.5,0.4l0.5,0.4l0.5,0.4l0.5,0.4l0.5,0.4l0.5,0.4l0.5,0.4
|
1051 |
+
l0.5,0.4l0.5,0.4l0.5,0.4l0.4,0.5l0.4,0.5l0.4,0.5l0.4,0.5L199,78l0.4,0.5l0.4,0.5l0.4,0.5l0.4,0.5l0.4,0.5l0.4,0.5l0.4,0.6
|
1052 |
+
l0.3,0.6l0.3,0.6l0.3,0.6L203,84l0.3,0.6l0.3,0.6l0.2,0.6l0.2,0.6l0.2,0.6l0.2,0.6l0.2,0.6l0.2,0.6l0.1,0.6L205,90l0.1,0.6
|
1053 |
+
l0.1,0.6l0.1,0.6l0.1,0.6V93v0.6v0.6v0.6v0.6V96v0.6l-0.1,0.6l-0.1,0.6l-0.1,0.6L205,99l-0.1,0.6l-0.1,0.6l-0.1,0.6l-0.1,0.6
|
1054 |
+
l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.3,0.6l-0.3,0.6l-0.3,0.6
|
1055 |
+
l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.4,0.6l-0.4,0.6l-0.4,0.6
|
1056 |
+
l-0.4,0.6l-0.4,0.6l-0.4,0.5l-0.4,0.5l-0.4,0.6l-0.4,0.5l-0.4,0.5l-0.4,0.5l-0.4,0.5l-0.4,0.5l-0.4,0.5l-0.4,0.5l-0.4,0.5
|
1057 |
+
l-0.4,0.5l-0.4,0.5l-0.4,0.5l-0.4,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.9,1l-0.9,0.9l-0.9,0.9l-1,0.9l-1,0.9
|
1058 |
+
l-1,0.9l-1,0.8l-1,0.8l-1,0.8l-1,0.8l-1,0.7l-0.9,0.7l-0.9,0.7l-0.9,0.7l-0.9,0.6L173,141l-0.9,0.6l-0.9,0.6l-0.9,0.5l-0.9,0.5
|
1059 |
+
l-0.8,0.5l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.7,0.3l-0.7,0.3l-0.7,0.3l-0.7,0.3l-0.7,0.3l-0.7,0.3l-0.7,0.2l-0.7,0.2
|
1060 |
+
l-0.7,0.2l-0.7,0.2l-0.7,0.2l-0.7,0.2l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1h-0.7H153h-0.7h-0.7h-0.7h-0.7
|
1061 |
+
l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.2l-0.6-0.2l-0.6-0.2l-0.6-0.2l-0.6-0.2l-0.6-0.2
|
1062 |
+
l-0.6-0.2l-0.6-0.2l-0.6-0.3l-0.6-0.3l-0.6-0.3l-0.6-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.4l-0.5-0.4
|
1063 |
+
l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.4-0.4l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5
|
1064 |
+
l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.3-0.6l-0.3-0.6l-0.3-0.6
|
1065 |
+
l-0.3-0.6l-0.3-0.6l-0.3-0.6l-0.3-0.6l-0.3-0.6l-0.3-0.6l-0.3-0.6l-0.3-0.6l-0.3-0.6l-0.3-0.6l-0.3-0.6l-0.2-0.6l-0.2-0.6
|
1066 |
+
l-0.2-0.6l-0.2-0.6l-0.2-0.6l-0.2-0.6l-0.2-0.6l-0.2-0.6l-0.2-0.6l-0.2-0.6l-0.2-0.6l-0.2-0.6l-0.1-0.6l-0.1-0.7l-0.1-0.7
|
1067 |
+
l-0.1-0.6l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7v-0.7v-0.7v-0.7v-0.7v-0.7v-0.7l0-0.7v-0.7
|
1068 |
+
v-0.7V101l0.1-0.7l0.1-0.6l0.1-0.6l0.1-0.6l0.1-0.6l0.1-0.6l0.1-0.6l0.3-1.5l0.3-1.7l0.3-1.8l0.2-0.9l0.2-0.9l0.2-1l0.2-1
|
1069 |
+
l0.2-1l0.2-1l0.2-1l0.3-1l0.3-1l0.3-1l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5
|
1070 |
+
l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.3l0.3-0.3
|
1071 |
+
l0.3-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.2l0.2-0.1l0.2-0.1l0.3-0.1l0.3-0.1l0.3-0.1h0.3h0.3h0.3L132,69l0.3,0.1
|
1072 |
+
l0.3,0.1l0.3,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3v0.3v0.3v0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3
|
1073 |
+
l-0.2,0.3l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.3,0.2l-0.3,0.1l-0.1,0.1h-0.1l-0.2,0.1l-0.1,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.2
|
1074 |
+
l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3
|
1075 |
+
l-0.2,0.3l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.3,0.9
|
1076 |
+
l-0.3,0.9l-0.2,0.9l-0.2,0.9l-0.2,0.9l-0.2,0.9l-0.2,0.9l-0.2,0.9l-0.2,0.9l-0.2,0.9l-0.3,1.8l-0.3,1.7l-0.3,1.5l-0.1,0.6
|
1077 |
+
l-0.1,0.5l-0.1,0.5l-0.1,0.5l-0.1,0.6l-0.1,0.5l-0.1,0.6v0.6v0.6v0.6v0.6v0.6l0,0.6v0.6v0.6v0.6v0.6v0.6l0.1,0.6l0.1,0.6
|
1078 |
+
l0.1,0.6l0.1,0.6l0.1,0.6l0.1,0.6l0.1,0.6l0.1,0.6l0.1,0.6l0.1,0.6l0.1,0.6l0.1,0.6l0.1,0.6l0.2,0.6l0.2,0.6l0.2,0.6l0.2,0.6
|
1079 |
+
l0.2,0.6l0.2,0.6l0.2,0.6l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.5
|
1080 |
+
l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.4l0.3,0.4l0.3,0.4l0.3,0.4l0.4,0.4l0.4,0.4
|
1081 |
+
l0.4,0.4l0.4,0.4l0.4,0.4l0.4,0.4l0.4,0.4l0.4,0.4l0.4,0.4l0.4,0.4l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3
|
1082 |
+
l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.2l0.4,0.2l0.4,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.1
|
1083 |
+
l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1h0.5h0.5h0.5h0.5h0.5h0.5h0.5h0.5l0.5-0.1l0.5-0.1l0.5-0.1
|
1084 |
+
l0.5-0.1l0.5-0.1l0.5-0.1l0.6-0.1l0.6-0.1l0.6-0.2l0.6-0.2l0.6-0.2l0.6-0.2l0.6-0.2l0.6-0.2l0.6-0.3l0.6-0.3l0.6-0.3l0.3-0.2
|
1085 |
+
l0.3-0.2l0.4-0.2l0.4-0.2l0.8-0.4l0.8-0.5l0.8-0.5l0.8-0.5l0.8-0.5l0.8-0.6l0.9-0.6l0.9-0.6l0.9-0.7l0.9-0.7l0.9-0.7l0.9-0.7
|
1086 |
+
l0.9-0.7l0.9-0.8l0.9-0.8l0.9-0.8l0.9-0.8l0.9-0.8l0.9-0.9l0.9-0.9l0.9-0.9l0.4-0.4l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5
|
1087 |
+
l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5
|
1088 |
+
l0.3-0.5l0.3-0.5l0.3-0.5l0.3-0.5l0.3-0.5l0.3-0.5l0.3-0.5l0.3-0.5l0.3-0.5l0.3-0.5l0.3-0.5l0.3-0.5l0.3-0.5l0.3-0.5l0.2-0.5
|
1089 |
+
l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5
|
1090 |
+
l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5V96v-0.5V95v-0.5V94v-0.5V93v-0.5V92l-0.1-0.5l-0.1-0.5l-0.1-0.5l-0.1-0.5l-0.1-0.4l-0.1-0.5
|
1091 |
+
l-0.1-0.4l-0.1-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4
|
1092 |
+
l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4
|
1093 |
+
l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3
|
1094 |
+
l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2
|
1095 |
+
l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1h-0.5h-0.5
|
1096 |
+
h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1
|
1097 |
+
l-0.4,0.1l-0.4,0.1l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2
|
1098 |
+
l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.8,0.5l-0.8,0.5l-0.8,0.5l-0.8,0.5l-0.7,0.5l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.5,0.4l-0.5,0.4
|
1099 |
+
l-0.5,0.4l-0.5,0.4l-0.2,0.2h-0.1v0.2l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.2,0.3l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.3,0.2
|
1100 |
+
l-0.3,0.1l-0.3,0.1l-0.3,0.1h-0.3h-0.3h-0.2h-0.2h-0.3h-0.1h-0.2h-0.2h-0.1l-0.2-0.1l-0.2-0.1h-0.1l-0.2-0.1l-0.2-0.2l0,0
|
1101 |
+
l-0.2-0.1l-0.2-0.2l-0.2-0.2l0,0l-0.1-0.2l-0.1-0.2l-0.1-0.2l0,0l-0.1-0.2l-0.1-0.2l-0.1-0.2l0,0v-0.3v-0.3V79v-0.2v-0.2v-0.1
|
1102 |
+
v-0.2l0.1-0.2V78l0.1-0.3l0.1-0.2l0.1-0.3l0.1-0.2l0.1-0.2l0.2-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3
|
1103 |
+
l0.6-0.5l0.6-0.5l0.6-0.4l0.6-0.4l0.5-0.3l0.4-0.3l0.5-0.3l0.8-0.5l0.8-0.5l0.8-0.5l0.9-0.5l0.9-0.5l0.5-0.3l0.5-0.3l0.5-0.3
|
1104 |
+
L157,68l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2L162,66l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2
|
1105 |
+
l0.5-0.1L165,65l0.5-0.1l0.5-0.1l0.7-0.1l0.7-0.1l0.7-0.1l0.7-0.1h0.7L168.7,64z M146,75.9L146,75.9L146,75.9L146,75.9z"
|
1106 |
+
/>
|
1107 |
+
</g>
|
1108 |
+
<g transform="matrix(1,0,0,1,400.214,44.558)">
|
1109 |
+
<path
|
1110 |
+
d="M102.5,119.3h0.5h0.5h0.5h0.5h0.5l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.2l0.5,0.2l0.5,0.2
|
1111 |
+
l0.5,0.2l0.5,0.2l0.5,0.2l0.3,0.1l0.2,0.1l0.2,0.1l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2
|
1112 |
+
l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.3l0.2,0.3l0.2,0.3l0.1,0.3l0.1,0.3
|
1113 |
+
l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3
|
1114 |
+
l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3
|
1115 |
+
l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.4,0.6l-0.4,0.6l-0.4,0.6l-0.4,0.6l-0.4,0.6l-0.4,0.5l-0.4,0.5l-0.5,0.5
|
1116 |
+
l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.4
|
1117 |
+
l-0.5,0.4l-0.5,0.4l-0.5,0.4l-0.5,0.4l-0.5,0.4l-0.5,0.4l-0.5,0.4l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3
|
1118 |
+
l-0.5,0.3l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.1l-0.5,0.1l-0.3,0.1h-0.2l-0.6,0.1l-0.6,0.1h-0.6h-0.5h-0.5
|
1119 |
+
h-0.5h-0.5l-0.5-0.1l-0.5-0.1l-0.3-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1L87,156l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1
|
1120 |
+
l-0.4-0.2l-0.4-0.2l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3L83,153l-0.3-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4
|
1121 |
+
l-0.2-0.4l-0.2-0.4l-0.1-0.4l-0.1-0.4l-0.1-0.4l-0.1-0.4l-0.1-0.4l-0.1-0.4l-0.1-0.4l-0.1-0.4V147v-0.4v-0.4v-0.4v-0.4V145
|
1122 |
+
v-0.4v-0.4v-0.4v-0.4V143v-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4
|
1123 |
+
l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.2-0.5L83,135l0.3-0.8l0.4-0.9l0.4-1l0.5-1l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5
|
1124 |
+
l0.2-0.5l0.2-0.5v-0.1V128v-0.2v-0.2v-0.2l0.1-0.2L86,127l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.1l0.1-0.1l0.3-0.3
|
1125 |
+
l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3L89,124l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.5-0.2l0.5-0.2l0.5-0.2
|
1126 |
+
l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1
|
1127 |
+
l0.5-0.1h0.5L102.5,119.3z M102,125.2h-0.4h-0.4l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1L98,126
|
1128 |
+
l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l0,0
|
1129 |
+
v0.1v0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.2,0.1l-0.2,0.1
|
1130 |
+
l-0.2,0.1l-0.2,0.1l-0.2,0.1l0,0l-0.2,0.3l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.2,0.4L90,133l-0.2,0.5l-0.2,0.5l-0.4,0.9l-0.4,0.9
|
1131 |
+
l-0.4,0.8l-0.3,0.7l-0.2,0.6l-0.2,0.4l-0.1,0.2l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3
|
1132 |
+
l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3l0.1,0.2
|
1133 |
+
l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1
|
1134 |
+
l0.1,0.1l0.1,0.1l0.1,0.1l0.2,0.1h0.1h0.1h0.1h0.1h0.1H89h0.1h0.1h0.1h0.1h0.2h0.2h0.3h0.3h0.3H91h0.3h0.4l0.4-0.1h0.1h0.1
|
1135 |
+
l0.2-0.1l0.2-0.1L93,150l0.3-0.1l0.3-0.1l0.3-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3
|
1136 |
+
l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.4l0.5-0.4l0.5-0.4l0.5-0.4l0.5-0.4l0.5-0.4l0.5-0.4l0.5-0.4l0.5-0.4l0.5-0.4l0.4-0.4l0.4-0.5
|
1137 |
+
l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.3-0.5l0.3-0.5l0.3-0.5l0.3-0.5l0.3-0.5l0.3-0.5l0.2-0.4
|
1138 |
+
l0.2-0.4l0.2-0.4l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2v-0.2v-0.2V131v-0.2v-0.2v-0.2v-0.2
|
1139 |
+
V130v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1V129v-0.1v-0.1v-0.1v-0.1l-0.1-0.1l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2
|
1140 |
+
l-0.1-0.2l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
|
1141 |
+
l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.3-0.1l-0.3-0.1
|
1142 |
+
l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1h-0.3h-0.3h-0.3h-0.4h-0.4h-0.4h-0.4L102,125.2z"
|
1143 |
+
/>
|
1144 |
+
</g>
|
1145 |
+
<g transform="matrix(1,0,0,1,400.214,44.558)">
|
1146 |
+
<path
|
1147 |
+
d="M80.8,178.7h0.4h0.4H82h0.4l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.6,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2
|
1148 |
+
l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2
|
1149 |
+
l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.7,0.5l0.7,0.5l0.6,0.5l0.6,0.5l0.6,0.5l0.6,0.5l0.6,0.5l0.6,0.5l1.2,1l1.2,1.1l0.6,0.5
|
1150 |
+
l0.7,0.6l0.7,0.6l0.7,0.6l0.7,0.6l0.8,0.6l0.8,0.6l0.8,0.6l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.4,0.2l0.4,0.2
|
1151 |
+
l0.4,0.2l0.4,0.2l0.4,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l1.1,0.3l1.1,0.3l1.1,0.3l1.1,0.3l0.6,0.2l0.6,0.2
|
1152 |
+
l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.2l0.5,0.2l0.6,0.2l0.5,0.2l0.5,0.3l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.4,0.2l0.4,0.2l0.4,0.3
|
1153 |
+
l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.4l0.4,0.4l0.4,0.4l0.4,0.4l0.4,0.4l0.3,0.4l0.2,0.2l0.2,0.2l0.2,0.2
|
1154 |
+
l0.2,0.2l0.2,0.2l0.1,0.2l0.1,0.2l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3v0.3v0.3v0.3v0.3
|
1155 |
+
v0.4l-0.1,0.4l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.2,0.2l-0.2,0.2
|
1156 |
+
l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1
|
1157 |
+
l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.4,0.1l-0.5,0.1l-0.4,0.1l-0.4,0.1h-0.4h-0.4h-0.4h-0.4h-0.4h-0.4l-0.4-0.1l-0.4-0.1l-0.4-0.1
|
1158 |
+
l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.8-0.3l-0.8-0.3l-0.8-0.3l-0.8-0.3
|
1159 |
+
l-0.7-0.3l-1.4-0.6l-0.7-0.3l-0.6-0.3l-0.6-0.2l-0.5-0.2l-0.5-0.2l-0.2-0.1l-0.2-0.1l-0.2-0.1h-0.2h-0.1h-0.2l-0.3-0.1
|
1160 |
+
l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1
|
1161 |
+
l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.4-0.3l-0.4-0.3l-0.8-0.6l-0.8-0.6l-0.8-0.6l-0.4-0.3l-0.4-0.3l-0.4-0.3
|
1162 |
+
l-0.4-0.3l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1
|
1163 |
+
l-0.5-0.2l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1h-0.5h-0.5h-0.5h-0.5
|
1164 |
+
h-0.5h-0.5h-0.5h-0.5h-0.5h-0.6h-0.5h-1.1l-1.1,0.1l-1.1,0.1l-2.3,0.2l-1.2,0.1l-1.2,0.1l-1.2,0.1l-1.2,0.1h-1.2h-0.6H72h-0.6
|
1165 |
+
H69h-0.6h-0.6h-0.6h-0.6H66h-0.6l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.2l-0.6-0.2
|
1166 |
+
l-0.6-0.2l-0.6-0.2l-0.6-0.2l-0.6-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2L55,202l-0.5-0.3l-0.5-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3
|
1167 |
+
l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.1-0.4
|
1168 |
+
l-0.1-0.4l-0.1-0.4l-0.1-0.4V194v-0.4v-0.4v-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.4
|
1169 |
+
l0.2-0.4l0.2-0.4l0.2-0.4l0.3-0.4l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3
|
1170 |
+
l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.2l0.2-0.1l0,0v-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.3-0.2
|
1171 |
+
l0.3-0.1l0.3-0.1l0.3-0.1h0.3h0.3h0.3l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.2,0.2l0.2,0.2h0.1l0.5-0.1l0.3-0.1l0.3-0.1l0.3-0.1
|
1172 |
+
h0.3h0.4h0.4h0.4h0.4l0.4,0.1h0.3l0.2,0.1L66,181l0.2,0.1l0.2,0.1l0.2,0.1l0.3,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1
|
1173 |
+
h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2l0.2-0.1l0.2-0.1l0.5-0.1l0.5-0.2l0.5-0.2l0.5-0.2l1.1-0.4
|
1174 |
+
l0.5-0.2l0.6-0.2l0.6-0.2l0.6-0.2l0.6-0.2l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1h0.3h0.3h0.4L80.8,178.7z
|
1175 |
+
M80.5,184.6h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2l-0.2,0.1l-0.2,0.1l-0.4,0.1L78,185l-0.5,0.2l-0.5,0.2l-0.5,0.2l-1.1,0.4l-0.6,0.2
|
1176 |
+
l-0.6,0.2l-0.6,0.2l-0.6,0.2l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1h-0.4h-0.4H70h-0.4h-0.4h-0.4h-0.4H68h-0.4
|
1177 |
+
l-0.4-0.1l-0.4-0.1l-0.4-0.1L66,187l-0.4-0.1l-0.4-0.1l-0.4-0.2l-0.4-0.2l-0.2-0.1l0,0h-0.1H64h-0.2h-0.2h-0.2h-0.2l-0.5,0.1
|
1178 |
+
l-0.5,0.1l-0.5,0.1h-0.2l-0.2,0.2L61,187l-0.3,0.1l-0.4,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2
|
1179 |
+
l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.1,0.2
|
1180 |
+
l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2v0.2l0,0.1v0.1v0.1v0.1v0.1v0.1v0.1v0.1v0.1v0.1v0.1
|
1181 |
+
v0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.2l0.1,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.3,0.2
|
1182 |
+
l0.3,0.2l0.3,0.2l0.3,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.5,0.2l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1
|
1183 |
+
l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1h0.5h0.5h0.5h0.5h0.5h0.5h0.6h0.6h0.6H71h1.1l1.1-0.1l1.1-0.1l1.2-0.1l1.2-0.1
|
1184 |
+
l2.3-0.2l1.2-0.1l1.2-0.1h1.2h0.6h0.6h0.6H85h0.6h0.6h0.6h0.6H88h0.6l0.6,0.1l0.6,0.1l0.6,0.1L91,199l0.6,0.1l0.6,0.1l0.6,0.1
|
1185 |
+
l0.6,0.1l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.2l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.5,0.3l0.5,0.3
|
1186 |
+
l0.5,0.3l0.5,0.3l0.5,0.3l0.5,0.3l0.4,0.3l0.4,0.3l0.8,0.7l0.8,0.6l0.8,0.6l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.2l0.4,0.2l0.4,0.2
|
1187 |
+
l0.4,0.2l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1h0.2l0.2,0.1
|
1188 |
+
l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.6,0.2l0.6,0.3l0.7,0.3l0.7,0.3l0.7,0.3l1.4,0.6l0.7,0.3l0.7,0.3l0.7,0.3
|
1189 |
+
l0.7,0.3l0.7,0.3l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1h0.3h0.3h0.2h0.2h0.2h0.2
|
1190 |
+
h0.2h0.2h0.2h0.1h0.1h0.1l0,0h0.1l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0v-0.1v-0.1v-0.1V213v-0.1v-0.1
|
1191 |
+
l0,0l0,0l0,0l0,0v-0.1v-0.1v-0.1v-0.1v-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.2-0.3
|
1192 |
+
l-0.2-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2
|
1193 |
+
l-0.3-0.2l-0.2-0.2l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2
|
1194 |
+
l-0.5-0.2l-0.5-0.2l-1.1-0.3l-1.1-0.3l-1.1-0.3l-1.1-0.4l-0.6-0.2l-0.6-0.2l-0.6-0.2l-0.6-0.2l-0.6-0.2l-0.6-0.2l-0.6-0.2
|
1195 |
+
l-0.6-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.2-0.2l-0.9-0.7l-0.9-0.7l-0.8-0.6
|
1196 |
+
l-0.8-0.6l-0.7-0.6l-0.7-0.6l-0.7-0.6l-0.7-0.6l-1.2-1.1l-1.2-1l-0.6-0.5l-0.6-0.5l-0.5-0.5l-0.6-0.4l-0.5-0.4l-0.6-0.4
|
1197 |
+
l-0.6-0.4l-0.6-0.4l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.4-0.2
|
1198 |
+
l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2H80
|
1199 |
+
h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.2L80.5,184.6z"
|
1200 |
+
/>
|
1201 |
+
</g>
|
1202 |
+
<g transform="matrix(1,0,0,1,400.214,44.558)">
|
1203 |
+
<path
|
1204 |
+
d="M332.3,146.1h0.2h0.2h0.2h0.2h0.2l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.1,0.1l0.1,0.1l0,0l0,0l0.6,0.1
|
1205 |
+
l0.6,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.3,0.1l0.3,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1
|
1206 |
+
l0.2,0.1l0.4,0.3l0.4,0.3l0.4,0.3l0.3,0.3l0.3,0.3l0.3,0.4l0.3,0.4l0.3,0.4l0.3,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4
|
1207 |
+
l0.2,0.4l0.2,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.2,0.8l0.2,0.8l0.2,0.8l0.2,0.8l0.2,0.8l0.2,0.8l0.2,0.8
|
1208 |
+
l0.2,0.8l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.3,0.5
|
1209 |
+
l0.3,0.7l0.4,0.7l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.1,0.5l0.1,0.5l0.1,0.3v0.3v0.3
|
1210 |
+
v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.2,0.3l-0.2,0.3L350,181l-0.2,0.3l-0.2,0.3
|
1211 |
+
l-0.3,0.3l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1h-0.3h-0.2
|
1212 |
+
h-0.3h-0.3h-0.2H345h-0.2h-0.2h-0.2h-0.2H344h-0.2l-0.2-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2
|
1213 |
+
l-0.4-0.2l-0.4-0.2l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.3-0.3l-0.4-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3
|
1214 |
+
l-0.3-0.3l-0.3-0.3l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.5-0.7
|
1215 |
+
l-0.5-0.7l-0.4-0.7l-0.4-0.7l-0.4-0.7l-0.3-0.7l-0.3-0.6l-0.3-0.6l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3
|
1216 |
+
l-0.1-0.4l-0.1-0.4l-0.1-0.4l-0.1-0.4l-0.1-0.4l-0.1-0.4l-0.1-0.4v-0.4V163v-0.4v-0.4v-0.4v-0.4V161v-0.9v-0.9v-0.8v-1.6v-1.6
|
1217 |
+
v-0.7v-0.8v-0.2v-0.1v-0.1v-0.2l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.2l0.1-0.2l0.2-0.4l0.2-0.4l0.1-0.2l0,0v-0.1v-0.1
|
1218 |
+
l-0.1-0.2v-0.2v-0.2v-0.2v-0.2v-0.2v-0.2v-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.1l0.1-0.1
|
1219 |
+
l0.1-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1h0.2h0.2h0.2L332.3,146.1z M334.7,152.9l-0.1,0.3l-0.1,0.3v0.1v0.1
|
1220 |
+
l0,0v0.6v0.8l-0.1,1.6v1.6v0.8v0.8v0.8v0.4v0.4v0.4v0.4v0.4v0.3v0.3v0.3v0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3v0.1v0.1
|
1221 |
+
l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.2,0.5l0.2,0.5l0.3,0.5l0.3,0.6l0.3,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.2,0.3l0.2,0.3l0.2,0.3
|
1222 |
+
l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.3,0.3l0.2,0.3l0.2,0.3l0.3,0.3l0.3,0.3l0.3,0.3l0.3,0.2l0.2,0.2l0.2,0.2
|
1223 |
+
l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1h0.2h0.2l0,0h0.1h0.1h0.1
|
1224 |
+
h0.1h0.1h0.1l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1V177l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3
|
1225 |
+
l-0.1-0.4l-0.1-0.4l-0.1-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.3l-0.3-0.7l-0.3-0.6l-0.3-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5
|
1226 |
+
l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.1-0.5l-0.1-0.5l-0.1-0.5l-0.1-0.5l-0.2-0.9l-0.2-0.9l-0.2-0.9
|
1227 |
+
l-0.2-0.9l-0.2-0.8l-0.2-0.8l-0.2-0.8l-0.2-0.7l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3
|
1228 |
+
l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
|
1229 |
+
l-0.2-0.1h-0.1h-0.1l-0.1-0.1h-0.1l-0.1-0.1h-0.1h-0.1H336h-0.1h-0.1h-0.1h-0.1l-0.3-0.1l-0.3-0.1h-0.1L334.7,152.9z"
|
1230 |
+
/>
|
1231 |
+
</g>
|
1232 |
+
</g>
|
1233 |
+
</g>
|
1234 |
+
</g>
|
1235 |
+
<g>
|
1236 |
+
<g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
|
1237 |
+
<path
|
1238 |
+
fill="#B5A47D"
|
1239 |
+
d="M-204.2,1379.2L-204.2,1379.2l-0.4-0.9l-0.3-0.8l-0.3-0.9l-0.4-0.9l-0.4-0.9l-0.7-1.9l-0.6-1.7l-0.3-0.8
|
1240 |
+
l-0.2-0.7l-0.2-0.7l-0.2-0.8l-0.3-1.2l-0.2-1l-0.2-0.9l-0.2-0.9l-0.2-0.9l-0.1-0.9l-0.1-0.9l-0.1-0.9l-0.1-0.9l-0.1-0.9l-0.2-1.6
|
1241 |
+
l-0.2-1.6l-0.2-1.5l-0.2-1.5l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.6
|
1242 |
+
l-0.1-0.5l-0.1-0.5l-0.1-0.5l-0.2-0.6l-0.5-1.6l-0.5-1.7l-0.5-1.7l-0.5-1.7l-0.5-1.7l-0.5-1.8l-0.5-1.8l-0.4-1.8l-0.4-1.8
|
1243 |
+
l-0.4-1.8l-0.4-1.8l-0.4-1.8l-0.4-1.8l-0.4-1.8l-0.4-1.8l-0.4-1.8l-0.4-1.8l-0.4-1.8l-0.4-1.8l-0.3-1.8l-0.3-1.8l-0.3-1.8
|
1244 |
+
l-0.3-1.8l-0.3-1.8l-0.3-1.8l-0.3-1.8l-0.3-1.8l-0.3-1.8l-0.3-1.8l-0.2-1.8l-0.2-1.8l-0.2-1.8l-0.1-1.2l-0.2-1.2l-0.2-1.2
|
1245 |
+
l-0.2-1.2l-0.2-1.2l-0.2-1.2l-0.1-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.5l-0.1-0.5l-0.1-0.5l-0.1-0.5l-0.1-0.5l-0.1-0.5l-0.1-0.5
|
1246 |
+
l-0.1-0.5l-0.1-0.5l-0.1-0.5l-0.1-0.4l-0.1-0.3l-0.5-0.3l-0.6-0.4l-0.4-0.3l-0.4-0.4l-0.6-0.5l-0.4-0.4l-0.8-0.8l-0.1-0.1l-0.8-1
|
1247 |
+
l0,0l-0.6-1l0,0l-0.4-0.7l-0.3-0.8l0,0l-0.4-1.2l-0.2-1.2l0,0l-0.1-1.4v-1.4l0,0l0.2-1.2l0.3-1.2l0.4-1.1l0,0l0.3-0.7l-0.1-0.2
|
1248 |
+
l-0.3-0.7l-0.3-0.7l-0.2-0.7l-0.2-0.7l-0.1-0.3h-0.2l-0.5-0.1l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2
|
1249 |
+
l-0.5-0.2l-0.5-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.3-0.3l-0.3-0.3
|
1250 |
+
l-0.3-0.3l-0.3-0.3l-0.3-0.4l-0.6-0.6l-0.6-0.7l-0.5-0.7l-0.5-0.7l-0.5-0.7l-0.5-0.7l-0.4-0.7l-0.4-0.7l-0.4-0.7l-0.4-0.7
|
1251 |
+
l-0.4-0.7l-0.3-0.7l-0.3-0.7l-0.3-0.7l-0.3-0.7l-0.3-0.7l-0.1-0.3l-0.1-0.1l-0.4-0.4l-0.4-0.4l-0.3-0.4l-0.3-0.4l-0.5-0.7
|
1252 |
+
l-0.5-0.7l-0.4-0.7l-0.4-0.6l-0.3-0.6l-0.3-0.6l-0.3-0.5l-0.2-0.5l-0.2-0.5l-0.4-0.9l-0.3-0.8l-0.3-0.6l-0.2-0.4l-0.1-0.2
|
1253 |
+
l-0.8-1.1l-0.5-0.7l-0.5-0.7l-0.5-0.8l-0.6-0.9l-0.6-0.9l-0.6-1l-0.6-1l-0.3-0.5l-0.3-0.5l-0.3-0.5l-0.3-0.5l-0.3-0.6l-0.3-0.6
|
1254 |
+
l-0.3-0.6l-0.3-0.6l-0.3-0.6l-0.3-0.6l-0.3-0.7l-0.3-0.7l-0.3-0.7l-0.2-0.7l-0.2-0.7l-0.2-0.8l-0.2-0.8l-0.2-0.8l-0.1-0.8
|
1255 |
+
l-0.1-0.9l-0.1-0.8v-0.5v-0.5v-0.5v-0.5v-0.5v-0.5v-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.2-0.6l0.2-0.5
|
1256 |
+
l0.2-0.6l0.2-0.6l0.3-0.6l0.3-0.5l0.3-0.5l0.3-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.4l0.4-0.4l0.5-0.4l0.5-0.4
|
1257 |
+
l0.5-0.4l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.6-0.2l0.7-0.2l0.8-0.2l0.8-0.2
|
1258 |
+
l0.8-0.1l0.9-0.1l0.8-0.1h0.8h0.9l0.9,0.1h0.4l0.1-0.2l0.4-0.6l0.4-0.6l0.5-0.6l0.5-0.5l0.5-0.5l0.5-0.5l0.5-0.4l0.5-0.4l0.5-0.4
|
1259 |
+
l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.5-0.2l0.8-0.3l0.8-0.3l0.8-0.2l0.7-0.2l0.7-0.2l0.7-0.1
|
1260 |
+
l0.7-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.7-0.1l0.5-0.5l0.5-0.5l0.5-0.4l0.5-0.4l0.5-0.3l0.5-0.3l0.5-0.3l0.4-0.3l0.5-0.3l0.8-0.4
|
1261 |
+
l0.8-0.4l0.8-0.3l0.8-0.3l0.7-0.2l0.7-0.2l0.7-0.2l0.7-0.1l0.7-0.1l0.7-0.1l0.7-0.1l0.7-0.1l0.6-0.1l0.7-0.1l0.6-0.1h0.6h0.6h0.6
|
1262 |
+
h0.6h0.7h1.2h1.2h1.2h1.2h1.1l1.1,0.1l1.1,0.1l1,0.1l1.9,0.1l1.7,0.1l1.3,0.1h0.5h0.3h0.1l3-0.1l3.2-0.1l3.2-0.1l3.2-0.1l3.2-0.1
|
1263 |
+
l3.2-0.1l3.6-0.2l0.6-0.5l1.2-0.8l1.3-0.6l1.3-0.4l0,0l1.1-0.2l1.2-0.1h1.2h0.1l0.8,0.1l0.8,0.1l0.5,0.1l0.8,0.2l0.6,0.2l0.7,0.2
|
1264 |
+
l0.5,0.2l0.4,0.2l0.4,0.2h0.1h0.3h0.7h0.8h0.9h1h0.6h0.5h0.6h0.6h0.6h0.6h0.6h0.6h0.6l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1
|
1265 |
+
l0.6-0.1l0.6-0.1l1.2-0.2l1.2-0.2l1.3-0.2l2.7-0.5l1.4-0.2l1.5-0.2l1.5-0.2l0.8-0.1l0.8-0.1l2.5-0.3l2.5-0.3l2.5-0.3l2.5-0.3
|
1266 |
+
l2.4-0.2l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1l1.2-0.1
|
1267 |
+
l1.2-0.1h1.2h1.2h1.2h1.2h1.2h1.2h1.2h1.2h1.2h1.2h1.2h1.2h1.2h1.2h1.2h1.2h1.2h1.2h1.2l1.2,0.1l1.2,0.1l1.2,0.1l1.2,0.1l1.2,0.1
|
1268 |
+
l1.2,0.1l1.2,0.1l1.2,0.1l1.2,0.1l1.2,0.1l1.2,0.1l1.2,0.1l1.2,0.1l1.2,0.1l1.2,0.1l1.2,0.1l1.2,0.1l1.2,0.2l1.2,0.2l1.3,0.2
|
1269 |
+
l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l1.3,0.3l1.3,0.3l1.3,0.3l1.3,0.3l1.2,0.3l1.2,0.3l2.4,0.6h0.1
|
1270 |
+
h0.7l1.2-0.1l1.2-0.1h1.2h1.2h0.3l0.7-0.6l1.1-0.7l1.2-0.6l1.2-0.5l1.3-0.3l1.3-0.2l0,0h1.2l1.2,0.1l1.2,0.2l0,0l1.1,0.3l1,0.4
|
1271 |
+
l0.4,0.2l0.9,0.4l0.6,0.3l0.6,0.3l0.6,0.3l0.6,0.3l0.7,0.3l0.7,0.3l0.7,0.3l0.7,0.3l0.7,0.3l0.7,0.3l0.7,0.3l0.7,0.3l0.7,0.3
|
1272 |
+
l0.8,0.3h0.6h0.4h0.4h0.4h0.3h0.2l0.3-0.2l0.8-0.5l0.5-0.3l0.5-0.3l0.6-0.3l0.6-0.3l0.6-0.4l0.7-0.4l0.8-0.4l0.8-0.3l0.5-0.2
|
1273 |
+
l0.5-0.2l0.5-0.2l0.5-0.2l0.6-0.2l0.6-0.1l0.7-0.1l0.7-0.1l0.8-0.1h0.9h0.9l0.9,0.1l1,0.1l1.1,0.2l1,0.3l0.5,0.2l1,0.5l0.1,0.1
|
1274 |
+
l0.9,0.5l0.5,0.4l0.5,0.4l0.8,0.7l0.4,0.4l0.8,0.8l0.7,0.9l0.6,0.9l0.5,0.9l0.4,0.8l0.3,0.9l0.3,0.9l0.2,1l0.1,0.5l0.1,1.1v0.6
|
1275 |
+
v0.6l-0.1,0.8l0.3,0.3l0.5,0.4l0.5,0.5l0.4,0.5l0.5,0.5l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.7l0.3,0.7l0.3,0.6l0.3,0.7l0.1,0.3
|
1276 |
+
l0.9,0.5l0.1,0.1l1,0.7l0.1,0.1l0.9,0.8l0.1,0.1l0.9,1l0.1,0.1l0.7,1l0.1,0.1l0.6,1l0.1,0.1l0.5,1l0.3,0.6l0.3,1.1l0.2,1l0.1,1
|
1277 |
+
l0.1,0.9v0.8v0.8l-0.1,0.7l-0.1,0.7l-0.1,0.6l-0.1,0.6l-0.1,0.6l-0.1,0.5l-0.1,0.5l-0.2,0.5l-0.2,0.5l-0.2,0.5l-0.2,0.5l-0.3,0.8
|
1278 |
+
l-0.3,0.8l-0.4,0.8l-0.3,0.7l-0.4,0.7l-0.3,0.7l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.6,1l-0.6,0.9l-0.5,0.7l-0.3,0.5l-0.1,0.1v0.1
|
1279 |
+
l-0.3,0.5l-0.3,0.6l-0.3,0.6l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.4,0.5l-0.7,1l-0.7,1l-0.7,1l-0.7,1l-0.7,0.9l-0.2,0.4
|
1280 |
+
l-0.4,0.8l-0.4,0.8l-0.4,0.8l-0.4,0.8l-0.4,0.8l-0.4,0.8l-0.4,0.7l-0.4,0.7l-0.4,0.7l-0.4,0.7l-0.4,0.7l-0.5,0.7l-0.5,0.7
|
1281 |
+
l-0.5,0.7l-0.5,0.7l-0.5,0.7l-0.5,0.7l-0.5,0.7l-0.5,0.7l-0.5,0.7l-0.5,0.7l-0.5,0.7l-0.5,0.7l-0.5,0.7l-0.5,0.7l-0.5,0.7
|
1282 |
+
l-0.5,0.7l-0.4,0.5l0,0l0,0l-0.1,0.1l-0.1,0.1l-0.3,0.5l-0.4,0.6l-0.5,0.7l-0.5,0.8l-0.6,0.9l-0.3,0.5l-0.4,0.5l-0.4,0.5
|
1283 |
+
l-0.4,0.5l-0.5,0.6l-0.5,0.6l-0.6,0.6l-0.4,0.4l-0.4,0.4l-0.4,0.3v1.2l-0.1,1.4l-0.3,1.4l-0.4,1.3l-0.2,0.5l-0.5,1.1l-0.3,0.7
|
1284 |
+
l-0.3,0.8l-0.3,0.8l-0.2,0.5l-0.2,0.5l-0.4,0.7l-0.4,0.7l-0.4,0.7l-0.4,0.6l-0.4,0.6l-0.4,0.6l-0.4,0.6l-0.4,0.5l-0.4,0.5
|
1285 |
+
l-0.4,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.4l-0.5,0.5
|
1286 |
+
l-0.9,0.8l-0.5,0.4l-0.5,0.4l-0.5,0.4l-0.5,0.4l-0.5,0.4l-0.5,0.4l-0.4,0.3v0.4l-0.1,0.8l-0.1,0.8l-0.1,0.9l-0.2,0.9l-0.2,0.9
|
1287 |
+
l-0.2,0.8l-0.2,0.5l-0.1,0.5l-0.2,0.5l-0.2,0.5l-0.2,0.5l-0.2,0.5l-0.2,0.5l-0.3,0.5l-0.3,0.5l-0.2,0.4l-0.1,0.2l0,0l-0.2,0.4
|
1288 |
+
l-0.3,0.5l-0.3,0.6l-0.7,1.4l-0.4,0.8l-0.4,0.8l-0.4,0.8l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.4,0.6l-0.5,0.7l-0.7,0.8l-0.6,0.6
|
1289 |
+
l-0.3,0.3l-0.8,0.7l0,0l-0.6,0.4l-0.2,0.5l-1,2.3l-1,2.3l-2,4.6l-3.2,7.4l-3.2,7.4l-3.2,7.4l-3.2,7.4l-3.2,7.5l-3.2,7.4l-3.2,7.5
|
1290 |
+
l-3.2,7.5l-3.1,7.5l-3.1,7.5l-3.1,7.5l-3.1,7.5l-6.3,15l-6.3,15l-2.4,5.7l-2.4,5.7l-2.4,5.7l-1.2,2.9l-1.2,2.9l-1.2,2.9l-1.2,2.9
|
1291 |
+
l-1.1,2.9l-1.1,2.9l-1.1,2.8l-1.1,2.9l-1.1,2.9l-1.1,2.9l-0.5,1.3l-0.5,1.2l-0.4,1.1l-0.4,1l-0.4,0.9l-0.3,0.8l-0.6,1.4l-0.6,1.4
|
1292 |
+
l-0.7,1.5l-0.4,0.9l-0.4,1l-0.5,1.1l-0.5,1.3l-0.2,0.6l-0.2,0.6l-0.3,0.7l-0.3,0.7l-0.4,0.8l-0.4,0.8l-0.3,0.5l-0.3,0.5l-0.3,0.5
|
1293 |
+
l-0.3,0.5l-0.3,0.5l-0.4,0.6l-0.4,0.6l-0.5,0.6l-0.6,0.7l-0.7,0.7l-0.5,0.5l-0.5,0.4l-0.6,0.4l-0.7,0.5l-0.8,0.5l-1,0.5l-0.6,0.2
|
1294 |
+
l-1.1,0.4h-0.1l-1.2,0.3h-0.1l-0.7,0.1h-0.4l-0.1,0.4l-0.3,0.9l-0.2,0.5l-0.2,0.5l-0.2,0.6l-0.2,0.6l-0.3,0.7l-0.4,0.8l-0.5,0.8
|
1295 |
+
l-0.4,0.6l-0.5,0.6l-0.6,0.7l-0.3,0.4l-0.8,0.8h-0.1l-1,0.8h-0.1l-0.7,0.4l-0.7,0.4h-0.1l-0.9,0.4l-0.4,0.1l-0.8,2l-0.8,2.1
|
1296 |
+
l-0.8,2.1l-0.8,2.1l-0.8,2.1l-0.8,2.1l-0.7,2.1l-0.7,2.1l-0.7,2.1l-0.7,2.1l-0.3,1l-0.3,0.8l0,0v0.2v0.2l-0.1,0.6l-0.2,1.6
|
1297 |
+
l-0.1,0.9l-0.1,0.5l-0.1,0.5l-0.1,0.6l-0.1,0.6l-0.1,0.6l-0.2,0.7l-0.2,0.8l-0.3,0.8l-0.2,0.6l-0.3,0.6l-0.3,0.6l-0.4,0.7
|
1298 |
+
l-0.5,0.8l-0.6,0.8l-0.4,0.4l-0.9,0.9l-0.1,0.1l-1.1,0.8h-0.1l-0.7,0.4l-0.7,0.4h-0.1l-0.8,0.3l-0.6,0.2v0.1l-0.1,0.9v0.1v0.3
|
1299 |
+
v0.8v1l-0.1,2.6v1.5l-0.1,1.5v0.8v0.8v0.8l-0.1,0.8l-0.1,0.8l-0.1,0.8l-0.1,0.8l-0.1,0.8l-0.1,0.8l-0.1,0.8l-0.1,0.5l-0.1,0.5
|
1300 |
+
l-0.1,0.5l-0.1,0.5l-0.2,0.5l-0.2,0.6l-0.3,0.6l-0.3,0.7l-0.4,0.8l-0.5,0.9l-0.4,0.5l-0.7,0.9l-0.1,0.1l-0.8,0.8l-0.9,0.7l0,0
|
1301 |
+
l-0.9,0.6l-1,0.5l-1,0.4l0,0l-1.1,0.4l-1.1,0.2l-1.1,0.1h-1.1l0,0l-1.3-0.1l-1.3-0.2l-1.2-0.4l0,0l-1.2-0.5l-1.1-0.6l-1.1-0.8
|
1302 |
+
l0,0l-0.8-0.7l-0.7-0.8l-0.6-0.8l0,0l-0.5-0.7l-0.4-0.7l-0.3-0.5l-0.3-0.8l-0.2-0.6l-0.2-0.5l-0.2-0.7l-0.2-0.7l-0.1-0.6
|
1303 |
+
l-0.1-0.6l-0.1-0.6l-0.1-0.7l-0.2-1.3l-0.2-1.4l-0.2-1.4l-0.2-1.4l-0.2-1.4l-0.4-2.5l-0.2-1.6l-0.1-0.3l-0.2-0.6l-0.2-0.6
|
1304 |
+
l-0.2-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.6l-0.2-1.1l-0.2-1.1l-0.2-1.1l-0.2-1.1l-0.2-1.1l-0.1-1.1l-0.1-1.1
|
1305 |
+
l-0.1-1.1l-0.1-1.1l-0.1-1.1l-0.1-1.1l-0.1-1.1l-0.1-1.1l-0.1-2l-0.3-3.9l-0.1-1.9l-0.1-0.9l-0.1-0.9l-0.1-0.9l-0.1-0.8l-0.1-0.8
|
1306 |
+
l-0.1-0.8l-0.4-2.8l-0.4-2.8l-0.4-2.8l-0.4-2.8l-0.4-2.8l-0.4-2.8l-0.4-2.9l-0.4-2.8l-0.4-2.9l-0.4-2.8l-0.9-5.7l-0.9-5.7
|
1307 |
+
l-0.9-5.7l-1.8-11.5l-0.9-5.8l-0.9-5.8l-0.4-2.9l-0.4-2.9l-0.4-2.9l-0.4-2.9l-0.4-2.9l-0.4-2.9l-0.4-2.9l-0.4-2.9l-0.3-2.3
|
1308 |
+
l-0.3-2.2l-0.6-4.5l-0.3-2.2l-0.2-1.3l-0.2-0.4l-0.3-1.3l-0.2-1.3l-0.6-3.2l-0.7-3.9l-0.3-1.9l-0.3-1.6l-0.2-0.8l-0.2-0.8
|
1309 |
+
l-0.2-0.9l-0.2-0.9l-0.2-1l-0.2-1.1l-0.2-1.1l-0.1-0.6l-0.1-0.6l-0.2-1.1l-0.2-1.1l-0.1-1l-0.1-1l-0.1-0.9l-0.1-0.9l-0.1-0.8
|
1310 |
+
v-0.1l-0.3-1.1l-0.1-0.2l-0.1-0.3l-0.3-1l-0.8-2.2l-0.3-1.1l-0.2-0.6l-0.2-0.7l-0.2-0.7l-0.1-0.4l-0.1-1.2v-1.2l0,0l0.1-1.4
|
1311 |
+
l0.3-1.3l0.4-1.3l0.6-1.2L-204.2,1379.2z M-182.3,1308.4l0.3,1.6h0.1l0,0v-0.1l0.2-0.6l0.1-0.4l-0.1-0.2l-0.7-0.9L-182.3,1308.4z
|
1312 |
+
"
|
1313 |
+
/>
|
1314 |
+
</g>
|
1315 |
+
<g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
|
1316 |
+
<path
|
1317 |
+
fill="#836F40"
|
1318 |
+
d="M-165.2,1548.9l0.5-0.9l0.3-0.5l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1
|
1319 |
+
l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1
|
1320 |
+
l0.1-0.1l0.1-0.1l0.1-0.1l0.4-0.3l0.8-0.6l0.5-0.3l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1h0.1l0.1-0.1l0.1-0.1
|
1321 |
+
l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.2
|
1322 |
+
h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.1h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.2h0.2h0.1h0.2h0.1h0.1h0.1
|
1323 |
+
l0.2,0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1l0.5,0.2l0.9,0.4l0.4,0.2l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1
|
1324 |
+
l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1
|
1325 |
+
l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1
|
1326 |
+
l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1
|
1327 |
+
l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1v0.1v0.2v0.1v0.1v0.2v0.1v0.2v0.1v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2
|
1328 |
+
v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.1v0.2v0.1v0.2v0.1v0.1v0.1l-0.1,0.1l-0.1,0.1
|
1329 |
+
l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
|
1330 |
+
l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1v0.1v0.2v0.2v0.2v0.2v0.2v0.2v0.1v0.2v0.2v0.1v0.1v0.2v0.1v0.1l-0.1,0.1l-0.1,0.1
|
1331 |
+
l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
|
1332 |
+
l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
|
1333 |
+
l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
|
1334 |
+
l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
|
1335 |
+
l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
|
1336 |
+
l-0.1,0.1l-0.1,0.1h-0.1h-0.1h-0.1h-0.1h-0.2h-0.1h-0.2h-0.2h-0.1h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2
|
1337 |
+
h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.1h-0.2h-0.2
|
1338 |
+
h-0.1h-0.1h-0.2h-0.1l-0.1-0.1h-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
|
1339 |
+
l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
|
1340 |
+
l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
|
1341 |
+
l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
|
1342 |
+
l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
|
1343 |
+
l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1v-0.1v-0.1v-0.1v-0.1v-0.2v-0.1v-0.2v-0.2v-0.1v-0.2v-0.2v-0.2v-0.2v-0.2
|
1344 |
+
v-0.2v-0.2v-0.2v-0.2v-0.2v-0.2v-0.2v-0.2v-0.2v-0.2v-0.2v-0.2v-0.5v-0.6v-0.7l0.1-0.7l0.1-0.8l0.1-0.8l0.1-0.5l0.1-0.5l0.1-0.5
|
1345 |
+
l0.1-0.5l0.1-0.5l0.2-0.6l0.2-0.6l0.3-0.7L-165.2,1548.9z M-158.6,1564.1L-158.6,1564.1L-158.6,1564.1L-158.6,1564.1l-0.2-0.1
|
1346 |
+
l-0.1-0.1L-158.6,1564.1z"
|
1347 |
+
/>
|
1348 |
+
</g>
|
1349 |
+
<g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
|
1350 |
+
<path
|
1351 |
+
fill="#836F40"
|
1352 |
+
d="M-49.4,1288.3l0.6-1.3l0.6-1.3l0.6-1.2l0.3-0.6l0.3-0.6l0.3-0.6l0.3-0.6l0.3-0.6l0.3-0.6l0.3-0.6l0.3-0.6
|
1353 |
+
l0.3-0.6l0.4-0.6l0.4-0.6l0.4-0.6l0.4-0.6l0.5-0.6l0.2-0.2l0.4-0.6l0.5-0.8l0.5-1l0.6-1l0.3-0.6l0.3-0.6l0.4-0.6l0.4-0.6l0.4-0.6
|
1354 |
+
l0.4-0.6l0.5-0.6l0.5-0.7l0.5-0.6l0.3-0.4l0.3-0.4l0.4-0.4l0.4-0.4l0.4-0.4l0.5-0.4l0.5-0.4l0.6-0.4l0.7-0.5l0.8-0.5l1-0.4
|
1355 |
+
l0.6-0.2l1.1-0.3h0.1l0.6-0.1l0.6-0.1h0.1l0.7-0.1h0.7h0.1h0.8l0.8,0.1h0.1l0.8,0.1l0.8,0.2h0.1l0.8,0.2l0.8,0.3h0.1l0.7,0.3
|
1356 |
+
l0.7,0.4l0.1,0.1l0.6,0.4l0.6,0.4l0.1,0.1l0.6,0.5l0.5,0.5l0.1,0.1l0.5,0.5l0.5,0.6l0.1,0.1l0.4,0.5l0.4,0.6l0.1,0.1l0.3,0.5
|
1357 |
+
l0.3,0.6l0.1,0.1l0.4,1l0.2,0.6l0.3,1.1l0.2,1l0.1,0.9l0.1,0.8v0.8v0.7v0.7l-0.1,0.6l-0.1,0.6l-0.1,0.5l-0.1,0.5l-0.1,0.5
|
1358 |
+
l-0.1,0.5l-0.1,0.5l-0.1,0.5l-0.2,0.8l-0.3,0.8l-0.3,0.8l-0.3,0.7l-0.3,0.7l-0.3,0.7l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.3,0.6
|
1359 |
+
l-0.3,0.5l-0.5,0.9l-0.4,0.8l-0.3,0.6l-0.1,0.2l-0.3,0.5l-0.4,0.9l-0.9,1.6l-0.9,1.6l-0.8,1.6l-1.7,3.1l-0.8,1.5l-0.8,1.5
|
1360 |
+
l-0.7,1.4l-0.7,1.4l-1.4,2.8l-1.4,2.9l-1.5,2.9l-0.7,1.5l-0.8,1.5l-0.8,1.5l-0.8,1.5l-0.8,1.5l-0.8,1.5l-0.8,1.5l-0.8,1.5
|
1361 |
+
l-0.9,1.5l-0.4,0.8l-0.4,0.8l-0.4,0.8l-0.5,0.8l-0.5,0.8l-0.3,0.5l-0.1,0.2l-0.4,0.8l-0.3,0.7l-0.1,0.3l-0.1,0.6l-0.2,0.6
|
1362 |
+
l-0.2,0.6l-0.2,0.5l-0.2,0.5l-0.2,0.5l-0.2,0.4l-0.2,0.5l-0.4,0.7l-0.4,0.7l-0.4,0.7l-0.4,0.7l-0.4,0.6l0,0l-0.6,1.6l-0.8,2.1
|
1363 |
+
l-0.8,2.1l-0.8,2.1l-0.8,2.1l-0.8,2.1l-0.8,2.1l-0.8,2.1l-0.8,2.1l-0.9,2l-0.9,2l-0.9,2l-0.7,1.7v0.1l-0.1,0.3l-0.1,0.5l-0.2,0.6
|
1364 |
+
l-0.2,0.7l-0.1,0.5l-0.2,0.5l-0.2,0.5l-0.2,0.6l-0.3,0.6l-0.3,0.7l-0.4,0.7l-0.5,0.8l-0.6,0.8l-0.7,0.9l-0.7,0.8l-0.6,0.5
|
1365 |
+
l-0.5,0.4l-0.5,0.4l-0.6,0.4l-0.7,0.4l-0.7,0.3l-0.7,0.3l0,0l-0.2,0.8l-0.2,0.8l-0.2,0.8l-0.2,0.7l-0.2,0.7l-0.2,0.7l-0.3,0.7
|
1366 |
+
l-0.3,0.7l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.5,1.1l-0.4,1l-0.4,0.9l-0.3,0.7l-0.3,0.7l-0.6,1.3l-0.7,1.4l-0.7,1.4l-0.8,1.5l-0.7,1.4
|
1367 |
+
l0,0l-0.1,0.7l-0.1,0.7l-0.1,0.6l-0.1,0.6l-0.1,0.5l-0.2,0.5l-0.2,0.5l-0.3,0.8l-0.3,0.8l-0.3,0.7l-0.3,0.7l-0.3,0.7l-0.3,0.6
|
1368 |
+
l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.6,1.1l-1.1,1.8l-0.4,0.7l-0.1,0.2l-0.1,0.3l-1.1,2.1l-1.2,2.1l-1.2,2.1l-1.2,2.1
|
1369 |
+
l-1.2,2.1l-1.2,2.1l-1.3,2.1l-1.3,2.1l-1.3,2.1l-1.3,2.1l-1.3,2.1l-1.3,2.1l-0.1,0.2l-0.5,1.1l-0.8,1.5l-0.7,1.5l-0.7,1.5
|
1370 |
+
l-0.7,1.5l-0.7,1.5l-0.7,1.5l-0.7,1.5l-0.7,1.5l-0.7,1.5l-0.7,1.5l-0.7,1.5l-0.7,1.5l-0.1,0.1v0.1v0.4l-0.1,0.7l-0.1,0.8
|
1371 |
+
l-0.2,1.2l-0.3,1.2l-0.4,1.1l-0.5,1l-0.6,2.4l-0.6,2.5l-0.6,2.5l-0.3,1.3l-0.3,1.3l-0.3,1.3l-0.4,1.3l-0.4,1.3l-0.4,1.3l-0.4,1.3
|
1372 |
+
l-0.4,1.3l-0.4,1.3l-0.2,0.7l-0.2,0.7l-0.2,0.7l-0.2,0.7l-0.2,0.7l-0.3,0.7l-0.3,0.7l-0.3,0.7l0,0v0.1v0.7v0.6v0.6l-0.1,0.6
|
1373 |
+
l-0.1,0.5l-0.1,0.5l-0.1,0.5l-0.1,0.5l-0.1,0.5l-0.2,0.8l-0.2,0.8l-0.3,0.8l-0.3,0.7l-0.3,0.7l-0.3,0.7l-0.3,0.6l-0.3,0.6
|
1374 |
+
l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.3,0.5l-0.3,0.5l-0.6,1l-0.6,1l-0.5,0.9l-0.9,1.5l-0.4,0.6l-0.3,0.5l-0.7,1.2l-0.7,1.1
|
1375 |
+
l-0.6,1l-0.6,0.9l-0.5,0.7l-0.3,0.8l-0.5,1.1l-0.5,1.1l-0.5,1.1l-0.5,1.1l-0.5,1.1l-0.5,1.1l-0.5,1.1l-0.5,1l-0.5,1l-0.5,1
|
1376 |
+
l-0.5,1l-0.6,1l-0.5,1l-0.6,1l-0.6,1l-0.6,1l-0.6,1l-0.6,1l-0.6,1l-0.6,1l-1.2,1.9l-1.2,1.9l-2.3,3.7l-0.2,0.4l-0.3,0.5l-0.8,1.4
|
1377 |
+
l-0.5,0.8l-0.5,0.9l-0.4,1l-0.4,1l-0.4,1l-0.4,1l-0.4,1l-0.4,1l-0.3,1l-0.1,0.5l-0.1,0.5l-0.1,0.5l-0.1,0.5l-0.1,0.5l-0.1,0.4
|
1378 |
+
l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.3l-0.1,0.3v0.3v0.3v0.3v0.2v0.2v0.2v0.2v0.1v0.1l0,0v0.1l0.2,1.2
|
1379 |
+
l0.1,1.2v1.2l-0.2,1.2l-0.3,1.2l-0.4,1.1l-0.5,1.1l-0.6,1l-0.7,1l-0.8,0.9l-0.9,0.8l-1,0.7l-1,0.6l-1.1,0.5l-1.1,0.4l-1.2,0.3
|
1380 |
+
l-1.2,0.1h-1.2l-1.2-0.1l-1.2-0.2l-1.1-0.3l-1.1-0.5l-1.1-0.6l-1-0.7l-0.9-0.8l-0.8-0.9l-0.7-0.9l-0.6-1l-0.5-1.1l-0.4-1.1
|
1381 |
+
l-0.3-1.2l-0.1-0.6l-0.1-0.9l-0.1-0.9l-0.1-0.8l-0.1-0.8v-0.8v-0.8v-0.8v-0.8l0.1-0.7l0.1-0.7l0.1-0.7l0.1-0.7l0.1-0.7l0.1-0.7
|
1382 |
+
l0.1-0.7l0.1-0.7l0.1-0.7l0.2-0.7l-0.1-0.2l-0.4-1l-0.3-1l-0.2-1l-0.1-1.1l0,0v-1l0.1-1l0.2-1l0.2-1l0,0l0.3-0.8l0.3-0.8l0,0
|
1383 |
+
l0.3-0.6l0.4-0.6l0.3-0.5l0.5-0.7l0.4-0.5l0.3-0.4l0.5-0.6l0.4-0.5l0.2-0.2l2.2-3l0.1-0.1l0.3-0.7l0.3-0.8l0.3-0.8l0.7-1.8
|
1384 |
+
l0.7-1.8l0.6-1.5l0.6-1.6l1.5-3.9l1.5-3.9l3-7.7l3-7.7l1.5-3.8l1.5-3.8l1-2.6l1-2.6l1.1-2.6l1.1-2.6l1.1-2.6l1.1-2.6l1.1-2.6
|
1385 |
+
l1.1-2.6l1.1-2.6l1.1-2.6l1.1-2.6l1.1-2.6l1.1-2.6l1.2-2.6l1.2-2.6l1.2-2.6l1.2-2.6l1.2-2.6l0.2-0.4v-0.2l0.1-0.5l0.1-0.5
|
1386 |
+
l0.1-0.5l0.1-0.5l0.2-0.6l0.3-0.8l0.4-0.8l0.4-0.8l0.4-0.7l0.4-0.7l0.4-0.6l0.4-0.6l0.3-0.4l0.1-0.3l0.3-0.8l0.3-0.8l0.3-0.8
|
1387 |
+
l0.3-0.8l0.4-1.3h-0.1l-1-0.1h-0.1l-0.8-0.2l-0.8-0.2l-0.8-0.3h-0.1l-0.9-0.4l-0.9-0.5l-0.8-0.5l0,0l-0.8-0.6l-0.7-0.7l-0.7-0.8
|
1388 |
+
l0,0l-0.5-0.7l-0.5-0.8l-0.4-0.8v-0.1l-0.4-1l-0.3-1.1v-0.1l-0.2-0.9l-0.1-0.9v-0.1l-0.1-0.7v-0.7v-0.1l0.1-1.1v-0.5l0.1-0.8
|
1389 |
+
l0.2-0.7l0.2-0.7l0.3-0.9l0.3-0.8l0.3-0.7l0.3-0.6l0.3-0.6l0.3-0.5l0.3-0.5l0.3-0.5l0.3-0.5l0.5-0.9l0.5-0.9l0.5-0.8l0.9-1.5
|
1390 |
+
l0.3-0.5l0.2-0.4l0.6-1.1l0.6-1.1l0.6-1l0.5-0.9l0.5-0.8l0.5-0.7l0.8-1.2l0.7-1.1l0.3-0.5l0.4-0.6l0.4-0.7l0.5-0.8l0.6-1l0.6-1.1
|
1391 |
+
l1-1.9l1-1.9l1-1.9l1-1.9l1-1.9l1-1.9l1-1.9l1-1.9l1-1.9l0.9-1.9l0.9-2l0.9-2l0.9-2l0.9-2l0.7-1.5l0.5-1.3l0.5-1.3l0.5-1.3
|
1392 |
+
l0.5-1.2l0.9-2.3l0.4-1.1l0.4-1l0.4-0.9l0.3-0.9l0.3-0.8l0.1-0.3l0.1-0.4v-0.1l0.5-1.1l0.6-1.1l0.7-1l0.8-0.9l0.9-0.9l0.9-0.8
|
1393 |
+
l1-0.7l1.1-0.6l1.1-0.4l1.2-0.3l1.2-0.2l1.2-0.1l1.2,0.1l1.2,0.2l1.2,0.3l1.1,0.4l0.6,0.3l0.7-1.4l1.4-2.7l1.4-2.7l1.3-2.7
|
1394 |
+
l1.3-2.7l1.3-2.7l0.6-1.3l0.7-1.4l0.3-0.7l0.4-0.7l0.4-0.6l0.5-0.8l0.4-0.5l0.7-0.8l0.8-0.7l0,0l0.7-0.6l0.2-0.1l0.5-1.1l0.6-1.2
|
1395 |
+
l0.3-0.6l0.3-0.6l0.3-0.6l0.3-0.6l0.6-1.1l0.6-1.1l1.2-1.9l0.5-0.9l0.4-0.8l0,0l0.1-0.1l0.1-0.3l0.2-0.4l0.2-0.5l0.3-0.6l0.3-0.7
|
1396 |
+
l0.4-0.7l0.3-0.5l0.3-0.4l0.3-0.5l0.4-0.5l0.5-0.6l0.6-0.7l0.4-0.4l0.8-0.8l0.1-0.1l0.9-0.7l0.4-0.3l0.8-0.5l0.5-0.2l0.6-0.3l0,0
|
1397 |
+
l0.8-2.2l1.1-2.8l0.5-1.4l0.5-1.4l0.5-1.4l0.6-1.4l0.6-1.4l0.6-1.4L-49.4,1288.3z"
|
1398 |
+
/>
|
1399 |
+
</g>
|
1400 |
+
<g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
|
1401 |
+
<path
|
1402 |
+
fill="#836F40"
|
1403 |
+
d="M-235.9,1180.2l0.5-0.9l0.5-0.8l0.6-0.8l0.7-0.7l0.7-0.7l0.8-0.6l0.8-0.5l0.9-0.5l0.9-0.4l0.9-0.3l1-0.2
|
1404 |
+
l1-0.2l1-0.1h0.1h0.5h0.3h0.1l0,0l0.4-0.3l0.4-0.2l0.5-0.3l0.5-0.2l0.5-0.2l0.6-0.2l0.6-0.2l0.6-0.2l0.7-0.2l0.7-0.2l0.7-0.1
|
1405 |
+
l0.7-0.1l0.7-0.1h0.7h0.7l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.6,0.2l0.6,0.2l0.6,0.2l0.8,0.4l0.8,0.4l0.4,0.2l1.1-0.1l1.2-0.1
|
1406 |
+
l1.2-0.1l1.2-0.1l1.2-0.1l2.5-0.2l2.5-0.2l2.5-0.3l2.5-0.3l2.6-0.3l2.6-0.3l2.6-0.3l2.6-0.3l2.6-0.3l2.6-0.3l2.6-0.3l5.2-0.7
|
1407 |
+
l5.2-0.7l5.2-0.7l2.6-0.3l2.6-0.3l2.6-0.3l2.6-0.3l2.6-0.3l2.6-0.3l2-0.2l2-0.2l2-0.2l2-0.2l2-0.2l2-0.2l2-0.2l2-0.1l2-0.1l2-0.1
|
1408 |
+
l2-0.1l2-0.1l2-0.1l2-0.1l2-0.1l2-0.1l2-0.1l2-0.1l1.9-0.1l2-0.1l1.9-0.1l2-0.1h1.9h2h1.9h2l3.9-0.1h3.9h3.9h3.9h3.9h3.9h3.9h3.8
|
1409 |
+
h3.8l7.7,0.1l7.7,0.1l7.6,0.1h3.8h3.8h3.8h3.8h1l1,0.1l1,0.2l0.9,0.3l0.9,0.4l0.9,0.4l0.8,0.5l0.8,0.6l0.7,0.6l0.7,0.7l0.6,0.8
|
1410 |
+
l0.6,0.8l0.5,0.8l0.4,0.9l0.4-0.2l0.6-0.2l0.7-0.3l0.8-0.3l0.5-0.2l0.5-0.1l0.5-0.1l0.5-0.2l0.6-0.1l0.6-0.1l0.6-0.1l0.7-0.1
|
1411 |
+
l0.8-0.1l0.8-0.1h0.9h1l0.7,0.1l0.6,0.1l0.7,0.1l0.7,0.2l0.8,0.2l0.8,0.3l0.9,0.4l0.9,0.5l0.5,0.3l0.4,0.3l0.4,0.3l0.1,0.1
|
1412 |
+
l0.4,0.3l0.4,0.4l0.1,0.1l0.4,0.4l0.4,0.4l0.1,0.1l0.4,0.5l0.4,0.5l0.1,0.1l0.3,0.5l0.3,0.5v0.1l0.3,0.5l0.3,0.5v0.1l0.2,0.5
|
1413 |
+
l0.2,0.5l0.2,0.6l0.3,1.1l0.2,1.1l0.1,1v0.8v0.8v0.7l-0.1,0.7l-0.1,0.7l-0.1,0.8l-0.2,0.7l-0.2,0.7L14,1187l-0.3,0.7l-0.3,0.7
|
1414 |
+
l-0.3,0.7l-0.3,0.7l-0.4,0.7l-0.4,0.7l-0.4,0.6l-0.4,0.6l-0.5,0.6l-0.5,0.6l-0.5,0.5l-0.5,0.5l-0.5,0.5l-0.5,0.4l-0.5,0.4
|
1415 |
+
l-0.5,0.4l-0.5,0.4l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2
|
1416 |
+
l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.9,0.1l-1,0.1l-1,0.1h-1h-0.9
|
1417 |
+
h-0.9h-0.9h-0.9h-0.9h-0.9l-0.9-0.1l-0.9-0.1l-0.9,0.3l-1,0.3l-1,0.3l-1,0.3l-1,0.3l-1,0.3l-1,0.3l-1,0.3l-1,0.2l-1,0.2l-0.9,0.2
|
1418 |
+
l-0.9,0.2l-1.7,0.4l-1.6,0.3l-1.4,0.3l-1.1,0.2l-1.1,0.2l-0.7,0.1l-0.8,0.1l-0.6,0.1h-0.6h-0.6h-0.6l-1.3,0.1l-1.5,0.1l-1.6,0.1
|
1419 |
+
h-1.6H-45h-1.6h-1.5h-2.7h-0.3l-1.1,0.2l-1.4,0.3l-1.4,0.2l-1.4,0.2l-1.4,0.2l-0.9,0.1l-0.1,0.1h-0.1l-0.7,0.3l-0.7,0.3l-0.4,0.2
|
1420 |
+
l-0.8,0.3l-0.7,0.2l-0.6,0.1l-0.5,0.1l-0.5,0.1l-0.8,0.1l-0.8,0.1l-0.8,0.1h-0.9h-0.6h-0.6h-0.6h-0.6h-1h-1h-0.9h-0.8h-0.7h-0.3
|
1421 |
+
h-0.3h-1l-1,0.1l-1,0.1l-1,0.1l-2.2,0.2l-2.2,0.2l-0.8,0.1l-0.8,0.1l-0.8,0.1l-0.9,0.1l-1.9,0.2l-1.9,0.2l-1,0.1l-1,0.1l-1,0.1
|
1422 |
+
l-1.1,0.1l-1.1,0.1h-1.1h-1.1h-1.2h-0.8h-0.5l-0.8-0.1l-0.8-0.2l-0.8-0.2l0,0l-0.6-0.2h-1.1h-1.4l-1.4-0.1l-1.4-0.1l-1.4-0.1
|
1423 |
+
l-1.4-0.1l-1.4-0.1l-1.4-0.1l-1.4-0.2l-0.7-0.1l-0.8-0.1l-0.9-0.1l-0.9-0.2l-0.9-0.2l-0.9-0.2l-0.9-0.2l-0.9-0.2l-0.9-0.2
|
1424 |
+
l-0.9-0.2l-0.9-0.2l-0.8-0.3l-0.8-0.3l-0.8-0.3l-0.8-0.3l-0.8-0.3l-0.8-0.3l-0.8-0.3l-0.8-0.3l-0.8-0.3l-0.7-0.3l-0.7-0.3
|
1425 |
+
l-0.7-0.3l-0.7-0.3l-0.6-0.3l-0.9,0.1l-1.4,0.2l-1.4,0.2l-1.4,0.2l-1.4,0.2l-1.4,0.2l-1.4,0.2l-1.4,0.1l-1.4,0.1l-1.4,0.1
|
1426 |
+
l-1.4,0.1l-1.4,0.1l-1.4,0.1l-1.4,0.1l-1.4,0.1l-1.4,0.1l-1.4,0.1h-1.4h-1.4h-1.4h-1.4h-1.4h-1.4h-1.4h-1.4h-1.4h-1.4h-1.3
|
1427 |
+
l-1.5-0.1l-0.7-0.1l-0.8-0.1l-0.7-0.1l-0.7-0.1l-0.6-0.2l-0.6-0.2l-0.6-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2
|
1428 |
+
l-0.4-0.2l-0.5-0.2l-0.2-0.1h-0.7l-1.4-0.1l-1.4-0.1l-1.4-0.1l-1.4-0.1l-1.4-0.2l-1.3-0.2l-1.4-0.2l-1.3-0.2l-1.3-0.2l-1.3-0.2
|
1429 |
+
l-1.3-0.3l-1.3-0.3l-1.3-0.3l-1.3-0.3l-1.3-0.3l-1.3-0.3l-1.3-0.3l-1.3-0.4l-1.2-0.4l-1.2-0.4l-1.2-0.4l-0.4-0.1h-0.1l-1.3,0.1
|
1430 |
+
l-1.3,0.1h-1.3h-1.3h-1.3h-1.3h-1.3h-1.3h-0.4h-1l-1-0.1l-1-0.2l-0.9-0.3l-0.9-0.4l-0.9-0.4l-0.9-0.5l-0.8-0.6l-0.8-0.7l-0.7-0.7
|
1431 |
+
l-0.6-0.8l-0.6-0.8l-0.5-0.9l-0.4-0.9l-0.3-0.9l-0.3-1l-0.2-1l-0.1-1v-1l0.1-1l0.1-1l0.2-1l0.3-0.9L-235.9,1180.2z"
|
1432 |
+
/>
|
1433 |
+
</g>
|
1434 |
+
<g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
|
1435 |
+
<path
|
1436 |
+
d="M-214.1,1345.5L-214.1,1345.5l0.2-0.3l0.1-0.1l0.2-0.3l0.3-0.4l0.2-0.2l0.2-0.3l0.2-0.3l0.3-0.3l0.3-0.3
|
1437 |
+
l0.3-0.3l0.3-0.3l0.3-0.3l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.4-0.2l0.4-0.2l0.4-0.2l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.3
|
1438 |
+
l0.5-0.3l0.5-0.3l0.5-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l1.3-1.1l1.4-1.1l2.8-2.3l1.4-1.2l1.4-1.2l1.4-1.2l0.7-0.6
|
1439 |
+
l0.7-0.6l0.7-0.6l0.7-0.6l0.8-0.6l0.7-0.6l0.8-0.6l0.8-0.6l0.8-0.6l0.8-0.5l0.8-0.5l0.8-0.5l0.8-0.5l0.8-0.5l0.8-0.5l0.8-0.5
|
1440 |
+
l0.8-0.5l0.8-0.4l0.9-0.5l0.9-0.5l0.9-0.5l0.9-0.5l0.9-0.6l0.9-0.6l0.9-0.6l0.8-0.6l0.8-0.6l0.8-0.6l0.8-0.6l0.8-0.6l0.8-0.6
|
1441 |
+
l0.8-0.6l0.8-0.6l0.8-0.6l0.8-0.6l0.8-0.7l0.8-0.7l0.8-0.7l0.8-0.7l0.8-0.7l0.8-0.7l0.8-0.7l0.8-0.7l0.8-0.7l1.5-1.4l1.5-1.4
|
1442 |
+
l1.5-1.4l1.5-1.4l1.5-1.4l3-2.9l3-2.9l1.5-1.5l1.5-1.5l1.5-1.4l1.6-1.4l0.8-0.7l0.8-0.7l0.8-0.7l0.8-0.7l0.8-0.7l0.8-0.7l0.8-0.7
|
1443 |
+
l0.8-0.7l0.8-0.7l0.8-0.7l0.8-0.7l0.8-0.7l0.3-0.2l0.4-0.3l0.9-0.7l2.4-1.8l1.4-1.1l1.5-1.1l0.8-0.6l0.8-0.6l0.8-0.6l0.8-0.6
|
1444 |
+
l0.8-0.6l0.8-0.6l0.7-0.6l0.7-0.6l0.7-0.6l0.6-0.6l0.6-0.5l0.5-0.5l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.1-0.2
|
1445 |
+
l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.3l0.1-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.3-0.2l0.3-0.2l0.3-0.2l0.4-0.1l0.4-0.1h0.4h0.4l0.4,0.1
|
1446 |
+
l0.4,0.1l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.3l0.2,0.3l0.2,0.3l0.1,0.3l0.1,0.4l0.1,0.4v0.4v0.2v0.3v0.3l-0.1,0.3l-0.1,0.4l-0.2,0.4
|
1447 |
+
l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.3,0.3l-0.3,0.3l-0.3,0.3l-0.3,0.3l-0.3,0.3l-0.6,0.6
|
1448 |
+
l-0.7,0.6l-0.7,0.6l-0.7,0.6l-0.8,0.6l-0.8,0.6l-0.8,0.6l-0.8,0.6l-0.8,0.6l-0.8,0.6l-0.8,0.6l-0.8,0.6l-1.5,1.2l-1.4,1.1
|
1449 |
+
l-2.4,1.8l-0.9,0.7l-0.3,0.3l-0.3,0.2l-0.8,0.6l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7
|
1450 |
+
l-0.8,0.7l-0.8,0.7l-0.8,0.7l-1.5,1.4l-1.5,1.4l-1.5,1.4l-1.5,1.4l-3,2.9l-3,2.9l-1.5,1.5l-1.5,1.5l-1.5,1.4l-1.5,1.4l-1.6,1.4
|
1451 |
+
l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7l-0.8,0.7
|
1452 |
+
l-0.9,0.7l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.5
|
1453 |
+
l-0.7,0.4l-0.7,0.4l-0.7,0.4l-0.7,0.5l-0.7,0.5l-0.7,0.5l-0.7,0.5l-0.7,0.5l-0.7,0.5l-0.7,0.5l-0.7,0.5l-0.7,0.5l-0.7,0.5
|
1454 |
+
l-0.7,0.6l-0.7,0.6l-0.7,0.6l-0.7,0.6l-0.7,0.6l-1.4,1.2l-1.4,1.2l-1.4,1.2l-2.8,2.3l-1.4,1.1l-1.4,1.1l-0.4,0.4l-0.5,0.4
|
1455 |
+
l-0.5,0.4l-0.5,0.4l-0.5,0.4l-0.5,0.4l-0.5,0.4l-0.5,0.4l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3
|
1456 |
+
l-0.4,0.2l0,0l0,0l0,0l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.2,0.2l-0.2,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.1l-0.2,0.3l-0.1,0.1l0,0l-0.2,0.3
|
1457 |
+
l-0.3,0.3l0,0l-0.3,0.2l-0.3,0.2l-0.3,0.1l-0.3,0.1l-0.3,0.1h-0.4h-0.4l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.2l-0.3-0.2l-0.3-0.3
|
1458 |
+
l-0.2-0.3l-0.2-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.4v-0.4v-0.4l0.1-0.3l0.1-0.3L-214.1,1345.5z M-112,1262.3L-112,1262.3L-112,1262.3
|
1459 |
+
L-112,1262.3L-112,1262.3z M-209,1348.5L-209,1348.5L-209,1348.5L-209,1348.5L-209,1348.5z"
|
1460 |
+
/>
|
1461 |
+
</g>
|
1462 |
+
<g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
|
1463 |
+
<path
|
1464 |
+
d="M-199.4,1433l0.2-0.3l0.2-0.3l0.2-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.4l0.3-0.4l0.7-0.8l0.7-0.8l0.8-0.8
|
1465 |
+
l0.8-0.8l0.8-0.8l1.5-1.5l2.3-2.3l1-1l1-1l1-1l1-1l1-1l1-1l2-1.9l2-1.9l2-1.9l2-1.9l2-1.9l2-1.9l2-1.9l2-1.9l2-1.9l2-1.9l1-1l1-1
|
1466 |
+
l1-1l1-1l1-1l1-1l1.7-1.7l1.7-1.7l1.7-1.7l1.7-1.7l1.7-1.7l1.7-1.7l1.7-1.6l1.7-1.6l1.7-1.6l1.7-1.6l1.8-1.6l1.8-1.6l1.8-1.6
|
1467 |
+
l1.8-1.6l1.8-1.6l1.8-1.6l1.8-1.6l1.8-1.6l3.6-3.2l3.6-3.2l3.6-3.2l3.6-3.2l3.6-3.2l7.2-6.3l7.2-6.3l3.6-3.2l3.6-3.2l3.6-3.2
|
1468 |
+
l3.6-3.2l3.5-3.2l1.8-1.6l1.8-1.6l1.8-1.6l1.8-1.6l1.7-1.6l1.8-1.6l1.7-1.6l1.7-1.6l1.7-1.6l1.7-1.6l1.7-1.6l1.7-1.6l1.7-1.6
|
1469 |
+
l1.7-1.6l1.7-1.7l1.7-1.7l1.7-1.7l1.7-1.7l0.9-0.9l0.9-0.9l0.9-0.9l0.9-0.9l1-0.9l1-0.9l1-0.8l1-0.8l1-0.8l1-0.8l1-0.8l1-0.8
|
1470 |
+
l2-1.6l2-1.6l1.9-1.6l1.9-1.6l1-0.8l1-0.8l0.9-0.8l0.9-0.8l0.9-0.8l0.9-0.8l0.9-0.8l0.9-0.8l0.9-0.8l0.9-0.8l0.9-0.8l0.8-0.8
|
1471 |
+
l0.4-0.4l0.5-0.5l1.3-1.4l0.7-0.8l0.8-0.8l0.8-0.9l0.4-0.4l0.4-0.4l0.4-0.4l0.4-0.4l0.4-0.4l0.4-0.4l0.4-0.4l0.4-0.4l0.4-0.4
|
1472 |
+
l0.4-0.3l0.4-0.3l0.4-0.3l0.2-0.2l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1h0.2h0.3h0.1h0.5
|
1473 |
+
l0.5,0.1l0.5,0.2l0.4,0.3l0.4,0.3l0.3,0.4l0.2,0.5l0.2,0.5l0.1,0.5v0.5l-0.1,0.5l-0.2,0.5l-0.3,0.4l-0.3,0.4l-0.4,0.3l-0.5,0.2
|
1474 |
+
l-0.5,0.2h-0.3l0,0h-0.1h-0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.3,0.2l-0.3,0.2l-0.3,0.3l-0.3,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.4
|
1475 |
+
l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.8,0.8l-0.8,0.8l-0.7,0.8l-1.3,1.4l-0.5,0.6l-0.5,0.5l-0.9,0.9l-0.9,0.9
|
1476 |
+
l-0.9,0.9l-0.9,0.9l-0.9,0.9l-0.9,0.8l-1,0.8l-1,0.8l-1,0.8l-1,0.8l-1,0.8l-1,0.8l-1.9,1.6l-2,1.6l-1.9,1.6l-1.9,1.6l-1,0.8
|
1477 |
+
l-1,0.8l-0.9,0.8l-0.9,0.8l-0.9,0.8l-0.9,0.8l-0.9,0.8l-0.9,0.8l-0.9,0.8l-0.9,0.8l-0.9,0.9l-0.9,0.9l-1.7,1.7l-1.7,1.7l-1.7,1.7
|
1478 |
+
l-1.7,1.7l-1.7,1.7l-1.7,1.7l-1.7,1.7l-1.7,1.6l-1.7,1.6l-1.7,1.6l-1.7,1.6l-1.8,1.6l-1.8,1.6l-1.8,1.6l-1.8,1.6l-1.8,1.6
|
1479 |
+
l-1.8,1.6l-1.8,1.6l-3.6,3.2l-3.6,3.2l-3.6,3.2l-3.6,3.2l-3.6,3.2l-7.2,6.3l-7.2,6.3l-3.6,3.2l-3.6,3.2l-3.6,3.2l-3.6,3.2
|
1480 |
+
l-3.5,3.2l-1.8,1.6l-1.8,1.6l-1.8,1.6l-1.8,1.6l-1.8,1.6l-1.7,1.6l-1.7,1.6l-1.7,1.6l-1.7,1.6l-1.7,1.6l-1.7,1.6l-1.7,1.6
|
1481 |
+
l-1.7,1.6l-1.7,1.6l-1.7,1.7l-1.7,1.7l-1.7,1.7l-1.7,1.7l-1,1l-1,1l-1,1l-1,1l-1,1l-1,1l-2,1.9l-2,1.9l-2,1.9l-2,1.9l-2,1.9
|
1482 |
+
l-2,1.9l-2,1.9l-2,1.9l-2,1.9l-2,1.9l-1,1l-1,1l-1,1l-1,1l-1,1l-1,1l-2.3,2.3l-1.5,1.5l-0.8,0.8l-0.8,0.8l-0.7,0.8l-0.7,0.7
|
1483 |
+
l-0.6,0.7l-0.3,0.3l-0.3,0.3l-0.2,0.3l-0.2,0.2l-0.2,0.2l-0.1,0.1l0,0l-0.2,0.4l-0.3,0.4l-0.4,0.4l-0.4,0.3l-0.5,0.2l-0.5,0.1
|
1484 |
+
l-0.5,0.1h-0.5l-0.5-0.1l-0.5-0.2l-0.4-0.3l-0.4-0.4l-0.3-0.4l-0.2-0.5l-0.1-0.5v-0.5v-0.5v-0.1l0.1-0.4v-0.1l0.1-0.3l0.1-0.2
|
1485 |
+
L-199.4,1433z M-1.4,1257.3L-1.4,1257.3L-1.4,1257.3L-1.4,1257.3L-1.4,1257.3z M-194.1,1435.5L-194.1,1435.5l0.1-0.3v-0.1
|
1486 |
+
L-194.1,1435.5z"
|
1487 |
+
/>
|
1488 |
+
</g>
|
1489 |
+
<g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
|
1490 |
+
<path
|
1491 |
+
d="M-186.5,1518.6l0.2-0.4l0.2-0.5l0.3-0.5l0.3-0.6l0.4-0.6l0.4-0.6l0.4-0.7l0.4-0.6l0.4-0.6l0.2-0.3l0.2-0.3
|
1492 |
+
l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.2l0.3-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.4
|
1493 |
+
l0.2-0.4l0.4-0.8l0.4-0.8l0.4-0.8l0.4-0.8l0.4-0.8l0.2-0.4l0.2-0.4l0.2-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4
|
1494 |
+
l0.3-0.4l0.9-1.1l0.9-1.1l0.9-1.1l0.9-1.1l0.9-1.1l0.9-1.1l0.9-1.1l0.9-1.1l0.9-1.1l0.9-1.1l1.7-2.2l1.7-2.3l1.7-2.3l1.7-2.3
|
1495 |
+
l1.7-2.3l1.7-2.3l1.7-2.3l3.3-4.6l3.3-4.6l0.9-1.3l1-1.3l1-1.3l1-1.3l1-1.3l1-1.3l1-1.3l1-1.3l1-1.3l1-1.3l1-1.3l1-1.3l1-1.3
|
1496 |
+
l1-1.3l2-2.5l2-2.5l2-2.5l2.1-2.5l2.1-2.5l2.1-2.5l2.1-2.5l2.1-2.4l2.1-2.4l2.1-2.4l2.1-2.4l2.1-2.4l2.2-2.4l2.2-2.4l2.2-2.4
|
1497 |
+
l2.2-2.4l2.2-2.3l2.2-2.3l2.2-2.3l2.2-2.3l2.2-2.3l2.2-2.3l2.2-2.3l2.2-2.3l2.2-2.3l0.3-0.3l0.3-0.3l0.6-0.7l0.7-0.7l0.7-0.8
|
1498 |
+
l0.7-0.8l0.7-0.8l0.7-0.9l0.7-0.9l1.5-1.8l1.6-1.9l1.6-1.9l0.8-1l0.8-1l0.8-1l0.8-1l0.8-0.9l0.8-0.9l0.8-0.9l0.4-0.4l0.4-0.4
|
1499 |
+
l0.4-0.4l0.4-0.4l0.4-0.4l0.4-0.4l0.4-0.4l0.4-0.4l0.4-0.4l0.4-0.4l0.4-0.4l0.4-0.4l0.4-0.4l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3
|
1500 |
+
l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.2l0.4-0.2l0.4-0.1h0.5h0.5l0.4,0.1l0.4,0.2l0.4,0.2l0.4,0.3l0.3,0.3l0.2,0.4l0.2,0.4
|
1501 |
+
l0.1,0.4v0.5v0.5l-0.1,0.4l-0.2,0.4l-0.2,0.4l-0.3,0.4l-0.4,0.3l-0.4,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2
|
1502 |
+
l-0.3,0.2l-0.3,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4
|
1503 |
+
l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.8,0.9l-0.8,0.9l-0.8,0.9l-0.8,0.9l-0.8,0.9l-0.8,0.9l-0.8,1l-1.6,1.9l-1.6,1.9l-1.5,1.9l-0.8,0.9
|
1504 |
+
l-0.7,0.9l-0.7,0.9l-0.7,0.8l-0.7,0.8l-0.7,0.8l-0.7,0.7l-0.3,0.4l-0.3,0.3l-2.2,2.2l-2.2,2.3l-2.2,2.3l-2.2,2.3l-2.2,2.3
|
1505 |
+
l-2.2,2.3l-2.2,2.3l-2.2,2.3l-2.2,2.3l-2.2,2.3l-2.2,2.4l-2.2,2.4l-2.1,2.4l-2.1,2.4l-2.1,2.4l-2.1,2.4l-2.1,2.4l-2.1,2.4
|
1506 |
+
l-2.1,2.4l-2.1,2.4l-2,2.5l-2,2.5l-2,2.5l-2,2.5l-2,2.5l-1,1.2l-1,1.3l-1,1.3l-1,1.3l-1,1.3l-1,1.3l-1,1.3l-1,1.3l-1,1.3l-1,1.3
|
1507 |
+
l-0.9,1.3l-0.9,1.3l-0.9,1.3l-0.9,1.3l-3.3,4.6l-3.3,4.6l-1.7,2.3l-1.7,2.3l-1.7,2.3l-1.7,2.3l-1.7,2.3l-1.7,2.3l-1.7,2.3
|
1508 |
+
l-0.9,1.1l-0.9,1.1l-0.9,1.1l-0.9,1.1l-0.9,1.1l-0.9,1.1l-0.9,1.1l-0.9,1.1l-0.9,1.1l-0.9,1.1l-0.2,0.3l-0.2,0.3l-0.2,0.3
|
1509 |
+
l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.4,0.8l-0.4,0.8l-0.4,0.8l-0.4,0.8l-0.4,0.8l-0.2,0.4
|
1510 |
+
l-0.2,0.4l-0.3,0.4l-0.3,0.4l-0.3,0.4l-0.3,0.4l-0.3,0.4l-0.3,0.4l-0.3,0.4l-0.3,0.4l-0.4,0.4l-0.3,0.4l-0.1,0.1l-0.1,0.1
|
1511 |
+
l-0.1,0.2l-0.1,0.2l-0.2,0.2l-0.2,0.2l-0.4,0.5l-0.4,0.5l-0.4,0.6l-0.3,0.6l-0.3,0.5l-0.3,0.5l-0.1,0.2l-0.1,0.2l-0.2,0.4
|
1512 |
+
l-0.2,0.4l-0.1,0.2l-0.2,0.2l-0.1,0.1l-0.2,0.2l-0.2,0.2l0,0l-0.3,0.2l-0.4,0.2l-0.4,0.1l-0.4,0.1h-0.4l0,0h-0.5l-0.5-0.1
|
1513 |
+
l-0.4-0.2l-0.4-0.3l-0.4-0.3l-0.3-0.4l-0.2-0.4l-0.2-0.4l0,0l-0.1-0.4v-0.4v-0.4l0.1-0.4l0,0l0.1-0.4l0.1-0.1L-186.5,1518.6z"
|
1514 |
+
/>
|
1515 |
+
</g>
|
1516 |
+
<g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
|
1517 |
+
<path
|
1518 |
+
d="M-226.1,1292.2l0.1-0.2l0.1-0.2l0.1-0.2l0.2-0.2l0.2-0.2l0.2-0.1l0.2-0.1l0.9-0.6l0.9-0.6l1-0.7l1.1-0.7
|
1519 |
+
l1.1-0.8l1.2-0.8l1.2-0.9l1.3-0.9l2.7-1.9l2.8-2l2.9-2.1l1.5-1.1l1.5-1.1l1.5-1.1l1.5-1.1l1.6-1.1l1.6-1.1l1.6-1.1l1.6-1l1.6-1
|
1520 |
+
l1.6-1l1.5-1l1.5-1l0.8-0.5l0.8-0.5l0.8-0.4l0.8-0.4l0.7-0.4l0.7-0.4l0.7-0.4l0.7-0.4l0.7-0.4l0.7-0.4l0.7-0.4l0.7-0.3l0.2-0.1
|
1521 |
+
l0.2-0.1l0.2-0.1h0.2h0.2h0.2h0.2h0.2h0.2l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.2l0.1,0.2l0.1,0.2
|
1522 |
+
l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2v0.2v0.2v0.2v0.2v0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2
|
1523 |
+
l-0.2,0.2l-0.2,0.2l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.7,0.3l-0.7,0.3l-0.7,0.4l-0.7,0.4l-0.7,0.4l-0.7,0.4l-0.7,0.4l-0.7,0.4
|
1524 |
+
l-0.7,0.4l-0.7,0.4l-0.7,0.4l-0.7,0.4l-1.5,0.9l-1.5,1l-1.5,1l-1.5,1l-1.5,1l-1.5,1l-1.5,1.1l-1.5,1.1l-1.5,1.1l-1.5,1.1
|
1525 |
+
l-1.5,1.1l-1.5,1.1l-2.9,2.1l-2.8,2l-2.7,1.9l-1.3,0.9l-1.2,0.9l-1.2,0.8l-1.1,0.8l-1.1,0.7l-1,0.7l-1,0.6l-0.9,0.6l-0.2,0.1
|
1526 |
+
l-0.2,0.1l-0.2,0.1l-0.2,0.1h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1
|
1527 |
+
l-0.2-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2v-0.2v-0.2v-0.2v-0.2v-0.2v-0.2l0.1-0.2l0.1-0.2
|
1528 |
+
L-226.1,1292.2z"
|
1529 |
+
/>
|
1530 |
+
</g>
|
1531 |
+
<g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
|
1532 |
+
<path
|
1533 |
+
d="M-223.1,1301.8l0.2-0.4l0.3-0.3l0.3-0.3l0.4-0.2l0.4-0.2l0.4-0.1h0.4h0.4l0.4,0.1l0.4,0.1l0.5,0.1l0.5,0.1
|
1534 |
+
l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.3l1,0.5l1,0.6l1,0.6
|
1535 |
+
l1,0.6l1,0.6l1,0.6l1,0.6l1,0.6l1,0.7l1,0.7l1,0.7l1,0.7l2,1.3l1.9,1.3l1.8,1.2l1.7,1.1l0.8,0.5l0.8,0.5l0.8,0.5l0.7,0.4l1.9,1.1
|
1536 |
+
l1.9,1.1l1.8,1.1l1.8,1.1l1.8,1.1l1.8,1.1l1.8,1.1l1.8,1.1l1.7,1.1l1.7,1.1l1.7,1.1l1.7,1.1l1.7,1.1l1.7,1.1l1.7,1.1l1.7,1.1
|
1537 |
+
l1.7,1.2l1.7,1.2l1.7,1.2l1.7,1.2l1.7,1.2l1.6,1.2l1.7,1.2l1.6,1.2l1.7,1.3l1.7,1.3l1.7,1.3l1.7,1.3l1.7,1.3l1.7,1.4l1.7,1.4
|
1538 |
+
l1.7,1.4l0.6,0.5l0.6,0.5l0.6,0.5l0.6,0.5l0.6,0.5l0.6,0.5l0.6,0.5l0.6,0.5l0.6,0.5l0.7,0.5l0.7,0.4l0.7,0.4l0.7,0.4l0.7,0.4
|
1539 |
+
l0.7,0.4l0.7,0.4l0.7,0.4l0.7,0.4l1.4,0.8l1.4,0.8l1.4,0.8l1.4,0.8l1.4,0.8l1.4,0.8l1.4,0.8l2.8,1.6l2.8,1.5l2.8,1.6l1.4,0.8
|
1540 |
+
l1.4,0.8l1.4,0.8l1.4,0.8l1.4,0.8l1.4,0.8l1.4,0.8l0.7,0.4l0.7,0.4l0.7,0.4l0.7,0.4l0.7,0.4l0.7,0.4l0.8,0.5l0.7,0.5l0.7,0.5
|
1541 |
+
l0.7,0.5l0.7,0.5l0.7,0.5l0.7,0.5l0.7,0.5l1.3,1l1.2,1l1.2,1l1.2,1l1.2,0.9l0.6,0.5l0.6,0.4l0.6,0.4l0.6,0.4l0.6,0.4l0.6,0.4
|
1542 |
+
l0.6,0.4l0.6,0.4l0.6,0.4l0.6,0.4l0.7,0.4l0.7,0.4l0.7,0.4l0.7,0.4l0.4,0.2l0.3,0.3l0.3,0.3l0.2,0.4l0.2,0.4l0.1,0.4l0.1,0.4v0.4
|
1543 |
+
l-0.1,0.4l-0.1,0.4l-0.2,0.4l-0.3,0.4l-0.3,0.3l-0.4,0.3l-0.4,0.2l-0.4,0.1l-0.4,0.1h-0.4h-0.4l-0.4-0.1l-0.4-0.2l-0.8-0.4
|
1544 |
+
l-0.8-0.4l-0.8-0.4l-0.7-0.4l-0.7-0.4l-0.7-0.4l-0.7-0.4l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.6-0.5l-0.6-0.5l-0.6-0.5l-1.2-1
|
1545 |
+
l-1.2-1l-1.2-1l-1.2-1l-1.2-1l-0.6-0.5l-0.6-0.5l-0.6-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.6-0.4l-0.6-0.4
|
1546 |
+
l-0.6-0.4l-0.6-0.4l-0.6-0.4l-0.7-0.4l-1.3-0.8l-1.3-0.8l-1.3-0.8l-1.4-0.8l-1.4-0.8l-1.4-0.8l-1.4-0.8l-2.8-1.5l-2.8-1.6
|
1547 |
+
l-2.9-1.6l-1.4-0.8l-1.4-0.8l-1.4-0.8l-1.4-0.8l-1.4-0.8l-1.4-0.9l-1.4-0.9l-0.7-0.4l-0.7-0.4l-0.7-0.4l-0.7-0.4l-0.7-0.5
|
1548 |
+
l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.6-0.5
|
1549 |
+
l-1.7-1.4l-1.7-1.4l-1.6-1.3l-1.6-1.3l-1.6-1.3l-1.6-1.3l-1.6-1.3l-1.6-1.2l-1.6-1.2l-1.6-1.2l-1.6-1.2l-1.6-1.2l-1.6-1.2
|
1550 |
+
l-1.6-1.2l-1.6-1.1l-1.6-1.1l-1.6-1.1l-1.6-1.1l-1.7-1.1l-1.7-1.1l-1.7-1.1l-1.7-1.1l-1.7-1.1l-1.7-1.1l-1.7-1.1l-1.7-1.1
|
1551 |
+
l-1.8-1.1l-1.8-1.1l-1.8-1.1l-1.8-1.1l-1.8-1.1l-1.9-1.1l-0.8-0.5l-0.8-0.5l-0.8-0.5l-0.9-0.6l-1.8-1.2l-1.8-1.2l-1.9-1.3l-2-1.3
|
1552 |
+
l-1-0.6l-1-0.6l-1-0.6l-1-0.6l-1-0.6l-1-0.6l-1-0.6l-1-0.6l-1-0.6l-1-0.5l-0.9-0.5l-0.9-0.5l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2
|
1553 |
+
l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.3-0.1l-0.3-0.1l-0.4-0.1l-0.4-0.1
|
1554 |
+
l-0.4-0.2l-0.4-0.3l-0.3-0.3l-0.3-0.4l-0.2-0.4l-0.1-0.4l-0.1-0.4v-0.4v-0.4l0.1-0.4L-223.1,1301.8z"
|
1555 |
+
/>
|
1556 |
+
</g>
|
1557 |
+
<g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
|
1558 |
+
<path
|
1559 |
+
d="M-183.5,1261.5l0.2-0.3l0.3-0.3l0.3-0.3l0.4-0.2l0.4-0.2l0.4-0.1h0.1l0.2-0.1l0.3-0.1l0.4-0.1l0.3-0.1h0.2
|
1560 |
+
h0.3h0.1h0.3h0.1l0.4,0.1h0.1l0.2,0.1l0.2,0.1h0.1l0.3,0.1l0.5,0.3l0.6,0.3l0.6,0.3l0.6,0.3l0.6,0.3l0.6,0.4l0.6,0.4l0.6,0.4
|
1561 |
+
l0.6,0.4l0.6,0.4l0.6,0.4l0.6,0.4l0.6,0.4l0.6,0.4l0.5,0.4l0.5,0.4l1.3,1.1l1.3,1.1l1.3,1.1l1.3,1.1l2.6,2.3l2.6,2.2l1.3,1.1
|
1562 |
+
l1.3,1.1l1.3,1.1l1.3,1.1l1.3,1.1l0.6,0.5l0.7,0.5l0.7,0.5l0.7,0.5l0.7,0.5l0.7,0.5l2.2,1.6l2.2,1.6l2.2,1.6l2.2,1.6l2.2,1.7
|
1563 |
+
l2.2,1.7l4.3,3.3l4.3,3.3l4.3,3.3l4.3,3.4l4.3,3.3l4.3,3.3l4.3,3.3l2.2,1.7l2.2,1.6l2.2,1.6l2.2,1.6l2.2,1.6l2.2,1.6l2.2,1.6
|
1564 |
+
l2.2,1.6l2.2,1.6l2.2,1.6l2.2,1.6l2.2,1.6l0.3,0.2l0.4,0.3l0.7,0.6l0.8,0.6l0.8,0.6l0.8,0.7l0.8,0.7l1.7,1.5l1.8,1.5l0.9,0.8
|
1565 |
+
l1,0.8l1,0.8l1,0.8l1,0.8l1,0.8l1,0.8l0.5,0.4l0.5,0.4l0.5,0.4l0.5,0.3l0.5,0.3l0.5,0.3l0.5,0.3l0.5,0.3l0.5,0.3l0.5,0.3l0.5,0.3
|
1566 |
+
l0.5,0.3l0.5,0.3l0.5,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1h0.2
|
1567 |
+
h0.2h0.2h0.2h0.1h0.1h0.1h0.2h0.4l0.4,0.1l0.4,0.2l0.4,0.2l0.3,0.3l0.3,0.3l0.2,0.3l0.2,0.4l0.1,0.4l0.1,0.4v0.4v0.4l-0.1,0.4
|
1568 |
+
l-0.2,0.4l-0.2,0.4l-0.3,0.3l-0.3,0.3l-0.3,0.2l-0.4,0.2l-0.4,0.1l-0.4,0.1H-50h-0.2h-0.3h-0.3h-0.3h-0.3h-0.3H-52h-0.3l-0.5-0.1
|
1569 |
+
l-0.6-0.1l-0.6-0.1l-0.5-0.2l-0.6-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3
|
1570 |
+
l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.4l-1.1-0.8l-1-0.8
|
1571 |
+
l-1-0.8l-1-0.8l-1-0.8l-1-0.8l-1-0.8l-1.8-1.6l-1.7-1.5l-0.8-0.7l-0.8-0.6l-0.7-0.6l-0.7-0.6l-0.7-0.5l-0.3-0.2l-0.3-0.2
|
1572 |
+
l-2.2-1.6l-2.2-1.6l-2.2-1.6l-2.2-1.6l-2.2-1.6l-2.2-1.6l-2.2-1.6l-2.2-1.6l-2.2-1.6l-2.2-1.6l-2.2-1.7l-2.2-1.7l-4.3-3.3
|
1573 |
+
l-4.3-3.3l-4.3-3.3l-4.3-3.4l-4.3-3.3l-4.3-3.3l-4.3-3.3l-2.1-1.6l-2.2-1.6l-2.1-1.6l-2.1-1.6l-2.2-1.6l-2.2-1.6l-0.7-0.5
|
1574 |
+
l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-1.3-1.1l-1.3-1.1l-1.3-1.1l-1.3-1.1l-1.3-1.1l-2.6-2.2l-2.6-2.2l-1.3-1.1
|
1575 |
+
l-1.3-1.1l-1.3-1.1l-1.3-1.1l-0.4-0.3l-0.4-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.4l-0.6-0.4l-0.6-0.3l-0.6-0.3l-0.6-0.3
|
1576 |
+
l-0.6-0.3l-0.6-0.3l-0.5-0.3l-0.4-0.2l-0.2,0.1l-0.3,0.1l0,0h-0.2h-0.2l0,0h-0.3h-0.3l0,0l-0.4-0.1l-0.4-0.1l-0.3-0.2l0,0
|
1577 |
+
l-0.3-0.2l-0.3-0.2l-0.2-0.3l-0.2-0.3l0,0l-0.2-0.4l-0.1-0.4l-0.1-0.4l0,0v-0.4v-0.4l0,0v-0.2v-0.2l0,0l0.1-0.4L-183.5,1261.5z
|
1578 |
+
M-178.1,1263.7v-0.2v-0.2V1263.7z M-178,1263.2v-0.2v-0.1V1263.2z"
|
1579 |
+
/>
|
1580 |
+
</g>
|
1581 |
+
<g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
|
1582 |
+
<path
|
1583 |
+
d="M-82.3,1264.1l0.1-0.2l0.1-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.1l0.2-0.1l0.3-0.1l0.2-0.1l0.3-0.1
|
1584 |
+
l0.3-0.1h0.3h0.3h0.3h0.3l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.2l0.3,0.3l0.3,0.3l0.3,0.3
|
1585 |
+
l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.3,0.5l0.3,0.5l0.3,0.5l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.1l0.1,0.1l0.1,0.1
|
1586 |
+
l0.1,0.1l0,0l0,0l0.7,0.5l0.7,0.5l0.7,0.5l0.7,0.5l0.7,0.5l0.7,0.5l0.7,0.6l0.7,0.6l0.7,0.6l0.6,0.6l0.6,0.6l0.6,0.6l0.6,0.6
|
1587 |
+
l0.6,0.6l1.2,1.2l1.2,1.2l1.2,1.2l1.2,1.2l1.2,1.2l1.2,1.2l1.2,1.2l2.4,2.4l0.5,0.5l0.5,0.5l0.5,0.5l0.5,0.5l0.5,0.4l0.5,0.4
|
1588 |
+
l0.5,0.4l0.5,0.4l0.5,0.4l0.5,0.4l0.5,0.4l0.5,0.4l0.6,0.4l0.6,0.4l0.6,0.4l0.6,0.4l1.2,0.8l1.2,0.8l1.2,0.8l1.2,0.8l1.2,0.8
|
1589 |
+
l1.2,0.8l2.3,1.5l0.3,0.2l0.4,0.2l0.9,0.6l0.5,0.3l0.6,0.3l0.6,0.4l0.6,0.4l0.6,0.4l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2
|
1590 |
+
l0.3,0.2l0.3,0.2l0.3,0.3l0.3,0.3l0.3,0.3l0.2,0.3l0.1,0.3l0.1,0.3l0.1,0.2l0.1,0.3v0.1v0.1v0.1v0.1v0.2v0.2v0.1v0.3v0.3v0.3
|
1591 |
+
l-0.1,0.3l-0.1,0.3l-0.1,0.2l-0.1,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.3,0.1l-0.3,0.1h-0.3
|
1592 |
+
h-0.3H-30h-0.3l-0.3-0.1l-0.3-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.1
|
1593 |
+
l0,0l-0.1-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.2l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-1-0.6l-0.4-0.3
|
1594 |
+
l-0.4-0.2l-2.3-1.5l-1.2-0.8l-1.2-0.8l-1.2-0.8l-1.2-0.8l-1.2-0.8l-1.2-0.9l-0.6-0.4l-0.6-0.4l-0.6-0.4l-0.6-0.5l-0.6-0.5
|
1595 |
+
l-0.6-0.5l-0.6-0.5l-0.6-0.5l-0.6-0.5l-0.6-0.5l-0.6-0.5l-0.6-0.5l-0.5-0.5l-0.5-0.5l-0.5-0.5l-0.5-0.5l-2.4-2.4l-1.2-1.2
|
1596 |
+
l-1.2-1.2l-1.2-1.2l-1.2-1.2l-1.2-1.1l-1.2-1.1l-1.2-1.1l-0.6-0.5l-0.6-0.6l-0.6-0.6l-0.6-0.5l-0.6-0.5l-0.6-0.5l-0.6-0.5
|
1597 |
+
l-0.6-0.5l-0.6-0.5l-0.6-0.5l-0.6-0.5l-0.6-0.5l-0.6-0.5l-0.7-0.5l-0.2-0.1l-0.2-0.2l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.2-0.3
|
1598 |
+
l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.3-0.5l-0.3-0.5l-0.3-0.4l-0.1-0.2l-0.1-0.2l0,0h-0.1H-80h-0.3l-0.3-0.1
|
1599 |
+
l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.3l-0.1-0.3v-0.3v-0.3v-0.3
|
1600 |
+
v-0.3l0.1-0.3l0.1-0.2L-82.3,1264.1z M-33,1307.9L-33,1307.9L-33,1307.9L-33,1307.9z"
|
1601 |
+
/>
|
1602 |
+
</g>
|
1603 |
+
<g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
|
1604 |
+
<path
|
1605 |
+
d="M-214.8,1340L-214.8,1340l0.2-0.3l0.1-0.2l0,0l0.2-0.2l0,0l0.3-0.3l0,0l0.3-0.2l0,0l0.3-0.2l0,0l0.3-0.1l0,0
|
1606 |
+
l0.2-0.1h0.2h0.1h0.3h0.3h0.1h0.2h0.2h0.1l0.3,0.1h0.1l0.2,0.1l0.2,0.1l0.3,0.2l0.3,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2
|
1607 |
+
l0.4,0.4l0.4,0.4l0.4,0.4l0.4,0.4l0.4,0.4l0.4,0.5l0.9,0.9l0.9,1l0.5,0.5l0.5,0.5l0.5,0.5l0.5,0.4l0.4,0.4l0.4,0.4l0.4,0.4
|
1608 |
+
l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.5,0.3l0.5,0.3l0.5,0.3l0.5,0.3l1.1,0.6
|
1609 |
+
l1.1,0.6l1.1,0.6l1,0.6l1,0.6l1,0.7l1,0.7l1,0.7l1,0.7l1,0.7l1,0.7l1,0.7l1,0.7l1,0.7l1,0.7l1,0.7l1,0.7l1,0.7l1.9,1.5l1.9,1.5
|
1610 |
+
l1.9,1.5l1.9,1.5l1.9,1.5l1.8,1.4l3.7,2.9l3.7,2.9l3.7,2.9l3.7,2.9l3.7,3l3.7,3l3.7,3l3.7,3l3.7,3l3.7,3l3.7,3l3.6,3l3.6,3l3.6,3
|
1611 |
+
l3.6,3.1l3.6,3.1l0.2,0.2l0.2,0.2l0.2,0.2l0.3,0.2l0.6,0.4l0.6,0.4l0.6,0.4l0.7,0.4l0.7,0.5l0.7,0.5l1.5,1l1.5,1l1.6,1l0.8,0.5
|
1612 |
+
l0.8,0.5l0.8,0.5l0.8,0.5l0.8,0.5l0.8,0.6l0.8,0.6l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3l0.3,0.3l0.3,0.3l0.3,0.3l0.3,0.3
|
1613 |
+
l0.3,0.3l0.3,0.3l0.3,0.3l0.3,0.3l0.3,0.3l0.3,0.3l0.3,0.3l0.3,0.4l0.3,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.3l0.2,0.4l0.1,0.4
|
1614 |
+
l0.1,0.4v0.4l-0.1,0.4l-0.1,0.4l-0.2,0.4l-0.2,0.3l-0.3,0.3l-0.3,0.3l-0.3,0.2l-0.4,0.2l-0.4,0.1l-0.4,0.1h-0.4H-91l-0.4-0.1
|
1615 |
+
l-0.4-0.1l-0.4-0.2l-0.3-0.2l-0.3-0.3l-0.3-0.3l-0.2-0.3l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2
|
1616 |
+
l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.3l-0.3-0.2l-0.3-0.3l-0.3-0.2
|
1617 |
+
l-0.3-0.3l-0.3-0.2l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.8-0.5l-0.8-0.5l-0.8-0.5l-1.5-1l-1.5-1l-1.5-1l-0.7-0.5l-0.7-0.5
|
1618 |
+
l-0.7-0.5l-0.7-0.5l-0.7-0.5l-0.6-0.5l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-3.6-3.1l-3.6-3l-3.6-3l-3.6-3l-3.6-3l-3.6-3l-3.6-3
|
1619 |
+
l-3.7-3l-3.7-3l-3.7-3l-3.7-3l-3.7-2.9l-3.7-2.9l-3.7-2.9l-3.7-2.9l-3.7-2.9l-1.8-1.4l-1.9-1.5l-1.9-1.5l-1.9-1.5l-1.9-1.5
|
1620 |
+
l-1.9-1.5l-1-0.7l-1-0.7l-1-0.7l-1-0.7l-1-0.7l-1-0.7l-1-0.7l-1-0.7l-1-0.7l-1-0.7l-1-0.7l-1-0.6l-1-0.6l-1-0.6l-1-0.6l-1-0.6
|
1621 |
+
l-1-0.6l-1-0.5l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.3-0.1l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2
|
1622 |
+
l-0.3-0.2l-0.3-0.2l-0.5-0.4l-0.5-0.5l-0.5-0.5l-0.5-0.5l-0.5-0.5l-0.5-0.5l-0.5-0.5l-0.9-1l-0.9-0.9l-0.4-0.4l-0.4-0.4l-0.4-0.4
|
1623 |
+
l-0.3-0.3h-0.4h-0.4l-0.4-0.1l-0.4-0.1l-0.4-0.2l-0.3-0.2l-0.3-0.3l-0.3-0.3l-0.2-0.3l-0.2-0.4l-0.1-0.4l-0.1-0.4v-0.4v-0.3v-0.3
|
1624 |
+
l0.1-0.3v-0.1l0.1-0.4v-0.1l0.1-0.2L-214.8,1340z"
|
1625 |
+
/>
|
1626 |
+
</g>
|
1627 |
+
<g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
|
1628 |
+
<path
|
1629 |
+
d="M-204.5,1408.5l0.2-0.3l0.2-0.3l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.1l0.3-0.1h0.4h0.4h0.4l0.3,0.1l0.3,0.1
|
1630 |
+
l0.3,0.2l0.3,0.2l0.3,0.2l0.2,0.3l0.2,0.3l0.2,0.3l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.2,0.2l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3
|
1631 |
+
l0.3,0.3l0.3,0.3l0.3,0.3l0.3,0.3l0.3,0.3l0.3,0.3l0.3,0.3l0.4,0.4l0.4,0.4l0.4,0.4l0.4,0.4l0.8,0.8l0.9,0.8l0.9,0.8l0.9,0.8
|
1632 |
+
l1,0.8l1,0.8l1,0.8l1,0.8l1,0.8l1.1,0.8l2.1,1.6l2.1,1.6l2.1,1.6l1,0.8l1,0.8l1,0.8l0.9,0.8l0.9,0.8l0.9,0.7l3.8,3.3l3.9,3.3
|
1633 |
+
l1.9,1.7l2,1.7l2,1.7l2,1.7l2,1.7l2,1.7l2,1.7l2,1.6l2,1.6l2,1.6l2,1.6l1,0.8l1,0.8l1,0.8l1,0.8l1,0.8l1,0.8l1,0.8l1,0.8l1,0.8
|
1634 |
+
l1,0.8l1,0.8l1.1,0.7l1.1,0.7l1.1,0.7l1.1,0.7l1.1,0.7l1.1,0.7l1.1,0.7l1.1,0.7l1.1,0.7l1.1,0.7l1.1,0.7l1.1,0.7l1.1,0.7l1.1,0.6
|
1635 |
+
l1.1,0.6l1.1,0.6l1.1,0.6l1.1,0.6l1.1,0.6l1.1,0.6l1.1,0.6l1.1,0.6l1.1,0.6l0.3,0.2l0.3,0.2l0.3,0.2l0.2,0.3l0.2,0.3l0.1,0.3
|
1636 |
+
l0.1,0.3l0.1,0.4v0.4v0.4l-0.1,0.4l-0.1,0.3l-0.1,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.3,0.2l-0.3,0.2l-0.3,0.1l-0.3,0.1l-0.4,0.1
|
1637 |
+
h-0.4h-0.4l-0.4-0.1l-0.3-0.1l-0.3-0.1l-1.1-0.6l-1.1-0.6l-1.1-0.6l-1.1-0.6l-1.1-0.6l-1.1-0.6l-1.1-0.6l-1.1-0.7l-1.1-0.7
|
1638 |
+
l-1.1-0.7l-1.1-0.7l-1.1-0.7l-1.1-0.7l-1.1-0.7l-1.1-0.7l-1.1-0.7l-1.1-0.7l-1.1-0.7l-1.1-0.7l-1.1-0.7l-1.1-0.7l-1.1-0.8
|
1639 |
+
l-1.1-0.8l-1.1-0.8l-1.1-0.8l-1.1-0.8l-1.1-0.8l-1.1-0.8l-1.1-0.8l-1.1-0.8l-1.1-0.8l-1-0.8l-1-0.8l-1-0.8l-2.1-1.6l-2.1-1.6
|
1640 |
+
l-2-1.7l-2-1.7l-2-1.7l-2-1.7l-2-1.7l-2-1.7l-2-1.7l-2-1.7l-2-1.7l-3.9-3.3l-3.8-3.3l-0.8-0.7l-0.9-0.7l-0.9-0.7l-0.9-0.8l-1-0.8
|
1641 |
+
l-1-0.8l-2.1-1.6l-2.1-1.6l-2.1-1.6l-1.1-0.8l-1.1-0.8l-1.1-0.8l-1-0.8l-1-0.8l-1-0.8l-1-0.8l-1-0.8l-0.9-0.8l-0.9-0.8l-0.4-0.4
|
1642 |
+
l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4
|
1643 |
+
l-0.3-0.4l-0.3-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.1-0.3l-0.1-0.3v-0.4v-0.4v-0.4l0.1-0.3l0.1-0.3L-204.5,1408.5z"
|
1644 |
+
/>
|
1645 |
+
</g>
|
1646 |
+
<g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
|
1647 |
+
<path
|
1648 |
+
d="M-196.1,1467.1l0.1-0.3l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0,0l0.2-0.1l0.3-0.1l0.3-0.1l0.3-0.1h0.3
|
1649 |
+
h0.3h0.3l0,0l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.3l0.1,0.1l0.2,0.2l0.3,0.4l0.4,0.4l0.4,0.5
|
1650 |
+
l0.5,0.5l1,1.1l0.9,1l0.7,0.7l0.2,0.2l0.1,0.1l0.4,0.4l0.5,0.4l0.5,0.4l0.5,0.4l0.5,0.4l0.5,0.4l0.5,0.4l0.5,0.4l0.9,0.7l0.9,0.7
|
1651 |
+
l1,0.7l1,0.7l1,0.7l1,0.7l1,0.7l1,0.7l2,1.4l2.1,1.4l0.9,0.6l0.9,0.6l0.9,0.6l0.9,0.6l0.9,0.5l0.9,0.5l0.9,0.5l0.9,0.5l0.9,0.5
|
1652 |
+
l0.9,0.5l0.9,0.5l0.9,0.5l1.8,1l1.8,1l1.9,1l1.9,1l1.9,1l1.9,1l1.9,1l1.9,1l0.9,0.5l0.9,0.5l0.9,0.5l1,0.5l0.5,0.3l0.6,0.3
|
1653 |
+
l0.6,0.4l0.6,0.4l0.6,0.4l0.6,0.4l1.2,0.8l1.2,0.9l1.2,0.9l0.6,0.4l0.6,0.4l0.6,0.4l0.6,0.4l0.6,0.4l0.6,0.4l0.6,0.4l0.6,0.4
|
1654 |
+
l0.6,0.3l0.6,0.3l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1
|
1655 |
+
l0.2,0.1h0.2h0.2h0.2h0.2h0.2h0.2h0.3l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.3l0.1,0.3l0.1,0.3
|
1656 |
+
l0.1,0.3v0.3v0.3v0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.2,0.3l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.3,0.2l-0.3,0.1l-0.3,0.1
|
1657 |
+
l-0.3,0.1h-0.3h-0.3h-0.3h-0.4h-0.4h-0.4l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1
|
1658 |
+
l-0.4-0.1l-0.4-0.1l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.3-0.2l-0.4-0.2l-0.7-0.4l-0.7-0.4l-0.7-0.4l-0.7-0.4l-0.7-0.4l-0.7-0.4
|
1659 |
+
l-0.7-0.4l-0.7-0.4l-0.7-0.4l-0.6-0.4l-1.3-0.9l-1.2-0.9l-1.2-0.8l-0.5-0.4l-0.5-0.4l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.4-0.3
|
1660 |
+
l-0.9-0.5l-0.9-0.5l-0.9-0.5l-0.9-0.5l-1.9-1l-1.9-1l-1.9-1l-1.9-1l-1.9-1l-1.9-1l-1.9-1l-1.9-1l-0.9-0.5l-0.9-0.5l-0.9-0.5
|
1661 |
+
l-0.9-0.5l-0.9-0.5l-0.9-0.5l-0.9-0.6l-0.9-0.6l-0.9-0.6l-0.9-0.6l-0.9-0.6l-0.9-0.6l-2.1-1.4l-2-1.4l-1-0.7l-1-0.7l-1-0.7
|
1662 |
+
l-1-0.7l-1-0.7l-1-0.7l-1-0.7l-1-0.8l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.5l-0.2-0.2
|
1663 |
+
l-0.3-0.3l-0.8-0.8l-0.9-1l-1-1.1l-0.5-0.6l-0.5-0.5l-0.4-0.5l-0.4-0.5l-0.3-0.4l-0.2-0.2l-0.2-0.2l-0.1-0.2l-0.2-0.3v-0.1
|
1664 |
+
l-0.1-0.2l-0.1-0.2l-0.1-0.2l0,0l-0.1-0.3v-0.3v-0.3v-0.3l0,0l0.1-0.3l0.1-0.3L-196.1,1467.1z"
|
1665 |
+
/>
|
1666 |
+
</g>
|
1667 |
+
<g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
|
1668 |
+
<path
|
1669 |
+
fill="#DACEB3"
|
1670 |
+
d="M-197.1,1289.5l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.4l0.1-0.2l0.1-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2
|
1671 |
+
l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.1l0.3-0.2l0.2-0.1l0.3-0.1h0.1l0.1-0.1h0.1h0.1h0.2h0.2h0.1h0.3h0.1h0.2h0.2h0.1h0.3h0.1h0.3h0.1
|
1672 |
+
l0.3,0.1l0.2,0.1l0.3,0.1l0.2,0.1l0,0l0.2-0.3l0.2-0.3l0.3-0.3l0.3-0.3l0.2-0.2l0.2-0.1l0.2-0.2l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1
|
1673 |
+
l0.2-0.1l0,0l0.2-0.1l0.2-0.1l0,0h0.2h0.2l0,0h0.2h0.2l0,0h0.2h0.2l0,0h0.2h0.2l0,0l0.2,0.1l0.2,0.1h0.1l0.2,0.1l0.2,0.1l0.1,0.1
|
1674 |
+
l0.2,0.2l0.2,0.1l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.3l0.3,0.5l0.3,0.6l0.3,0.6l0.4,0.6l0.4,0.7
|
1675 |
+
l0.4,0.7l0.4,0.7l0.4,0.7l0.4,0.7l0.4,0.7l0.4,0.7l0.3,0.7l0.2,0.3l0.2,0.1l0.3,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.1,0.3
|
1676 |
+
l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3v0.3v0.3v0.2l0.2,0.4l0.2,0.5l0.2,0.5l0.1,0.5l0.1,0.4l0.1,0.3v0.2l0.1,0.8
|
1677 |
+
l0.1,0.8l0.1,0.8l0.1,0.8l0.1,0.8l0.1,0.8l0.1,1.5l0.1,1.5l0.1,1.5l0.1,1.5l0.1,1.6v1.6v1.6v1.6v1.6v1.6v1.6v0.7l0,0l0.2,0.2
|
1678 |
+
l0.2,0.2l0,0l0.2,0.2l0.2,0.2l0,0l0.1,0.2l0.1,0.2l0,0l0.1,0.2l0.1,0.2v0.1v0.2v0.2v0.2l0.1,0.6v0.5v0.5v0.5v0.5v0.5v0.5v0.5v0.5
|
1679 |
+
v0.5v0.5v0.1v0.2v0.5v0.5v0.5v0.5v0.5v0.5l-0.1,0.5l-0.1,0.5l-0.1,0.5l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.2,0.8
|
1680 |
+
l-0.2,0.8l-0.2,0.8l-0.2,0.8l-0.1,0.3l-0.2,0.7l-0.1,2l-0.1,3l-0.1,3v0.4v0.5v1.1v1.3v1.5v0.8v0.8v0.8v0.9v0.9v0.9l-0.1,0.9
|
1681 |
+
l-0.1,0.9l-0.1,0.9l-0.1,0.9l-0.1,0.5l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4
|
1682 |
+
l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.3,0.3l-0.3,0.3
|
1683 |
+
l-0.3,0.3l-0.3,0.3l-0.3,0.3l-0.2,0.2l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.3,0.1l-0.3,0.1h-0.3
|
1684 |
+
h-0.3h-0.3h-0.3h-0.3h-0.3l-0.3-0.1l-0.3-0.1h-0.1l-0.2,0.1l0,0l-0.3,0.1l-0.3,0.1l-0.3,0.1h-0.3h-0.3h-0.3h-0.3l-0.3-0.1l0,0
|
1685 |
+
l-0.3-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.2l-0.2-0.2l-0.2-0.2l0,0l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l0,0l-0.1-0.2l-0.1-0.2v-0.2
|
1686 |
+
v-0.3v-0.2l-0.1-0.4v-0.5v-0.6v-0.7v-0.8l-0.1-1.7l0,0v-0.1l-0.3-0.6l-0.3-0.7l-0.3-0.7l-0.3-0.8l-0.3-0.8l-0.3-0.9l-0.3-0.9
|
1687 |
+
l-0.3-0.9l-0.3-0.9l-0.6-1.8l-0.6-1.8l-0.5-1.7l-0.5-1.6l-0.8-2.5v-0.1l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2
|
1688 |
+
v-0.2l-0.1-0.3l-0.2-0.8l-0.2-0.8l-0.2-0.8l-0.2-0.8l-0.2-0.8l-0.2-0.8l-0.2-0.8l-0.2-0.8l-0.2-0.8l-0.2-0.8l-0.1-0.8l-0.1-0.8
|
1689 |
+
l-0.1-0.8l-0.1-0.8l-0.1-0.8l-0.1-0.8l-0.1-0.8l-0.1-0.6l-0.1-0.1l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.1-0.2l-0.1-0.3
|
1690 |
+
l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.2-0.5l-0.2-0.5l-0.2-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.6
|
1691 |
+
l-0.1-0.6l-0.1-0.6l-0.1-0.6v-0.6v-0.6v-0.6v-0.6v-0.6v-0.6v-0.6v-0.6v-0.6v-0.6v-0.5v-0.1v-0.6v-0.6v-0.6v-0.6v-0.6v-0.6v-0.6
|
1692 |
+
v-0.6v-0.6v-0.6l0.1-1.2l0.1-1.2l0.1-1.2l0.1-1.2l0.1-1.2l0.1-1.2l0.2-1.2l0.2-1.2l0.2-1.2l0.2-1.2l0.2-1.2l0.4-2.3l0.4-2.3
|
1693 |
+
l0.1-0.5l0.1-0.5l0.2-1.3l0.1-0.7l0.1-0.7l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4L-197.1,1289.5l0-0.4l0.2-0.4
|
1694 |
+
L-197.1,1289.5z M-184.6,1294.6L-184.6,1294.6v-0.2l-0.1-0.3L-184.6,1294.6z"
|
1695 |
+
/>
|
1696 |
+
</g>
|
1697 |
+
<g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
|
1698 |
+
<path
|
1699 |
+
fill="#DACEB3"
|
1700 |
+
d="M-182,1397.3L-182,1397.3L-182,1397.3l0.2-0.2l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0,0v-0.3
|
1701 |
+
v-0.1v-0.1v-0.1l0,0v-0.2v-0.2v-0.1v-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0,0l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1
|
1702 |
+
l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1h0.1h0.1h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.1h0.2h0.1l0.1,0.1l0.1,0.1
|
1703 |
+
l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1v0.1
|
1704 |
+
v0.1v0.1v0.2v0.4v0.4v0.5l0.1,1.3v0.7h0.1h0.1h0.1h0.1l0,0h0.1h0.1h0.1h0.1l0,0l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0,0l0.1,0.1
|
1705 |
+
l0.1,0.1l0.1,0.1l0.1,0.1l0,0l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0,0l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0,0l0.1,0.1v0.1v0.1v0.1v0.1
|
1706 |
+
v0.1v0.1v0.1v0.1v0.2v0.2v0.1v0.1v0.3v0.4l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.2,0.6l-0.2,0.6l-0.1,0.3v0.1v0.5v0.5v0.6v0.6
|
1707 |
+
v0.6v0.6v0.6v0.6v0.6v0.6v0.6v0.6v0.6l-0.1,0.6l-0.1,0.6l-0.1,0.6l-0.1,0.6l-0.1,0.6l-0.1,0.6l-0.1,0.3l-0.1,0.3l-0.1,0.3
|
1708 |
+
l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.2,0.3l-0.2,0.3l-0.1,0.2l-0.2,0.2l-0.2,0.2l-0.1,0.1
|
1709 |
+
l-0.1,0.1l-0.1,0.1l-0.1,0.1h-0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l0,0l-0.1,0.1l-0.1,0.1l-0.1,0.1l0,0h-0.1h-0.1h-0.1l0,0h-0.1h-0.1
|
1710 |
+
h-0.1h-0.1l0,0h-0.1h-0.1h-0.1h-0.1l0,0h-0.2h-0.2h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1l0,0h-0.1h-0.1h-0.1h-0.1l-0.1-0.1
|
1711 |
+
l-0.1-0.1l-0.1-0.1l0,0l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l0,0l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l0,0
|
1712 |
+
l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.2l-0.1-0.3l-0.1-0.3l-0.1-0.4l-0.1-0.4v-0.2l0,0l-0.2-0.4l-0.2-0.4l-0.1-0.4l-0.1-0.4
|
1713 |
+
l-0.1-0.4l-0.1-0.4l-0.1-0.4l-0.1-0.4v-0.4v-0.4v-0.4v-0.4v-0.4v-0.4v-0.4v-0.4v-0.4v-0.4v-0.4l0.1-0.8l0.1-0.8l0.1-0.9l0.1-0.6
|
1714 |
+
v-0.1v-0.5v-0.6v-0.6v-0.4v-0.6v-0.8v-0.8v-0.8v-0.8v-0.4v-0.4v-0.4v-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.3v-0.1
|
1715 |
+
v-0.1v-0.1l0.1-0.1L-182,1397.3z"
|
1716 |
+
/>
|
1717 |
+
</g>
|
1718 |
+
<g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
|
1719 |
+
<path
|
1720 |
+
fill="#DACEB3"
|
1721 |
+
d="M-240.6,1222l0.1-0.2l0.1-0.2l0.1-0.1l0.1-0.2l0.1-0.2l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1
|
1722 |
+
l0.1-0.1l0.1-0.1l0.1-0.1l0.2-0.1l0.4-0.2l0.4-0.2l0.3-0.1l0.5-0.2l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.2-0.1l0,0l0.1-0.1l0.1-0.1
|
1723 |
+
l0.1-0.1l0.1-0.1l0.1-0.1l0.2-0.2l0.1-0.1l0.1-0.1l0.1-0.1h0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.4-0.1l0.4-0.1
|
1724 |
+
h0.4h0.3h0.3h0.3h0.3h0.3h0.3l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.5,0.1l0.5,0.1l0.8,0.2h0.2h0.1l0.4,0.1l0.5,0.1l0.5,0.1l0.5,0.1
|
1725 |
+
l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.2l0.5,0.2l0.5,0.2h0.1l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.3l0.8,0.3l0.8,0.3l0.8,0.3l0.8,0.3l0.8,0.3
|
1726 |
+
l0.8,0.3l0.8,0.3l0.8,0.3l0.8,0.3l1.5,0.7l1.5,0.7l1.5,0.7l1.5,0.7l1.4,0.7l0.7,0.3l0.7,0.3l0.7,0.3l0.7,0.3l0.7,0.3l0.7,0.3
|
1727 |
+
l0.7,0.3l0.7,0.2l0.7,0.2l0.7,0.2l0.7,0.2l0.7,0.2l0.7,0.2l0.3,0.1l0.4,0.1l0.3,0.1h0.2h0.2h0.4h0.5h0.5h0.5h0.5l0.5,0.1l1,0.1
|
1728 |
+
l0.5,0.1l0.4,0.1l0.4,0.1l0.3,0.1l0.2,0.1h0.1l0.2,0.1l0.2,0.1l0,0l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.2l0.2,0.2l0.2,0.2l0.1,0.2l0,0
|
1729 |
+
l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2v0.2v0.2v0.2v0.2v0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l0,0l-0.1,0.2l-0.1,0.2l-0.2,0.2
|
1730 |
+
l-0.2,0.2l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l0,0l-0.2,0.1h-0.2h-0.2h-0.1h-0.1h-0.1h-0.2l0,0l0.1,0.2l0.1,0.2v0.2
|
1731 |
+
l0,0v0.2v0.2l0,0v0.2v0.2l0,0v0.2l-0.1,0.2l0,0l-0.1,0.2l-0.1,0.2l-0.1,0.2l0,0l-0.1,0.2l-0.1,0.2l-0.1,0.1l-0.1,0.1l0,0
|
1732 |
+
l-0.1,0.1l-0.1,0.1l-0.1,0.1h-0.1l-0.2,0.1l-0.2,0.1h-0.1l-0.1,0.1l-0.1,0.1l-0.2,0.1l-0.3,0.1l-0.3,0.1h-0.3h-0.3l-0.5,0.1h-0.5
|
1733 |
+
h-0.5h-0.5h-0.5h-0.5h-0.6h-0.6h-0.6h-0.6h-0.6l-1.1-0.1l-1.1-0.1l-1-0.1l-0.9-0.1l-0.8-0.1l-0.6-0.1l-0.3-0.1l-0.3-0.1l-0.7-0.2
|
1734 |
+
l-0.6-0.2l-0.6-0.2l-0.6-0.2l-0.6-0.2l-0.6-0.3l-0.6-0.3l-0.6-0.3l-0.6-0.3l-0.6-0.3l-0.6-0.3l-0.6-0.3l-0.6-0.3l-0.6-0.3
|
1735 |
+
l-0.6-0.3l-0.6-0.3l-0.6-0.3l-0.6-0.4l-0.6-0.3l-0.7-0.1l-1.2-0.2l-1.2-0.2l-1.2-0.2l-1.2-0.2l-1.2-0.2l-2.5-0.4l-2.5-0.4
|
1736 |
+
l-2.5-0.4l-2.5-0.5h-0.1h-0.1l-0.2-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.2l-0.3-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2
|
1737 |
+
l-0.4-0.2l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2
|
1738 |
+
l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.1-0.3l-0.1-0.2v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1v-0.2v-0.2v-0.1v-0.2
|
1739 |
+
v-0.2v-0.1v-0.2l0.1-0.2v-0.1l0.1-0.2l0.1-0.2L-240.6,1222z"
|
1740 |
+
/>
|
1741 |
+
</g>
|
1742 |
+
<g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
|
1743 |
+
<path
|
1744 |
+
d="M-236.9,1244.6l0.5-0.8l0.6-0.7l0.7-0.6l0.8-0.4l0.9-0.3l0.9-0.2h0.9l0.9,0.1l0.9,0.3l0.8,0.4l0.8,0.5
|
1745 |
+
l0.7,0.6l0.1,0.1l0.5,0.6l0.1,0.1l0.4,0.6v0.1l0.3,0.7v0.1l0.2,0.8v0.1l0.1,0.6v0.1v0.7v0.1v0.5v0.3l-0.1,0.5l-0.1,0.5l-0.1,0.4
|
1746 |
+
l-0.1,0.4l-0.2,0.5l-0.2,0.5l-0.1,0.2v0.1v0.4v0.4v0.3l0.1,0.7l0.1,0.7l0.1,0.7l0.1,0.8l0.1,0.8l0.1,0.8l0.1,0.8l0.3,1.6l0.3,1.6
|
1747 |
+
l0.3,1.6l0.3,1.5l0.3,1.5l0.3,1.5l0.3,1.5l0.3,1.5l0.3,1.5l0.6,2.9l0.6,2.9l0.6,2.9l1.2,5.9l0.6,3l0.6,3l0.6,3l0.3,1.5l0.3,1.5
|
1748 |
+
l0.3,1.5l0.3,1.5l0.3,1.5l0.3,1.5l0.2,1.5l0.2,1.6l0.2,1.6l0.3,2.4l0.1,0.8l0.1,0.9l0.1,0.8l0.3,1.7l0.3,1.7l0.3,1.7l0.3,1.7
|
1749 |
+
l0.3,1.7l0.4,1.7l0.4,1.7l0.4,1.7l0.4,1.7l0.4,1.7l0.8,3.5l0.8,3.5l0.8,3.5l0.8,3.5l0.4,1.8l0.4,1.8l0.4,1.8l0.4,1.8l0.4,1.8
|
1750 |
+
l0.4,1.8l0.3,1.8l0.3,1.8l0.3,1.8l0.3,1.8l0.1,0.9l0.1,0.9l0.1,0.9l0.1,0.9l0.5,3.8l0.5,3.8l0.6,3.8l0.6,3.8l0.6,3.8l0.6,3.8
|
1751 |
+
l0.6,3.8l0.6,3.8l0.6,3.8l0.6,3.8l0.6,3.8l0.6,3.8l1.3,7.5l1.3,7.5l1.3,7.5l1.3,7.5l2.6,15l1.3,7.5l1.3,7.5l1.3,7.5l1.3,7.5
|
1752 |
+
l0.4,2.6l0.4,2.6l0.4,2.6l0.4,2.6l0.4,2.6l0.4,2.6l0.4,2.6l0.4,2.6l0.7,5.2l0.7,5.2l0.7,5.1l0.7,5.1l0.7,5.1l0.4,2.5l0.4,2.5
|
1753 |
+
l0.4,2.5l0.4,2.5l0.4,2.5l0.4,2.5l0.4,2.5l0.4,2.5l0.4,2.5l0.4,2.5l0.4,2.5l0.5,2.5l0.5,2.5l0.5,2.5v0.2v0.2l0.1,0.2v0.2l0.1,0.4
|
1754 |
+
l0.1,0.4l0.1,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.4l0.2,0.5l0.2,0.5l0.2,0.5l0.5,1l1.1,2.1l0.6,1.1l0.3,0.6
|
1755 |
+
l0.3,0.6l0.3,0.6l0,0l0.2-0.4l0.4-1l0.4-1.1l0.2-0.6l0.2-0.6l0.2-0.6l0.3-0.6l0.3-0.6l0.3-0.6l0.3-0.6l0.3-0.6l0.3-0.6l0.4-0.6
|
1756 |
+
l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.5-0.7l0.5-0.7l0.5-0.7l0.5-0.7l0.5-0.7l0.5-0.7l0.5-0.7l0.5-0.7l0.5-0.7l0.5-0.7l0.5-0.7
|
1757 |
+
l0.5-0.7l0.5-0.7l0.5-0.8l0.5-0.8l0.5-0.8l0.9-1.5l0.9-1.5l0.9-1.6l0.9-1.6l0.9-1.6l0.9-1.6l0.9-1.6l0.9-1.6l1.7-3.3l1.7-3.3
|
1758 |
+
l1.8-3.3l0.9-1.7l0.9-1.7l0.9-1.7l0.9-1.7l0.9-1.7l0.9-1.6l1-1.6l1-1.6l0.5-0.8l0.5-0.8l0.5-0.8l0.5-0.8l0.9-1.4l0.9-1.4l0.9-1.4
|
1759 |
+
l0.8-1.4l0.8-1.5l0.8-1.5l0.8-1.5l0.8-1.5l0.8-1.5l0.8-1.5l0.8-1.5l0.8-1.5l0.8-1.5l0.8-1.5l0.8-1.5l0.8-1.5l0.8-1.5l0.8-1.6
|
1760 |
+
l1.5-3.1l3-6.3l1.5-3.2l1.5-3.1l0.8-1.6l0.8-1.6l0.8-1.6l0.8-1.6l1.3-2.7l1.3-2.7l1.3-2.7l1.3-2.7l1.3-2.7l1.3-2.7l1.3-2.7
|
1761 |
+
l1.3-2.7l1.3-2.7l1.3-2.7l1.3-2.7l1.3-2.7l1.2-2.7l1.2-2.7l1.2-2.7l1.2-2.7l2.5-5.5l2.4-5.5l2.4-5.5l2.4-5.5l4.9-11l2.4-5.5
|
1762 |
+
l2.4-5.5l1.4-3.1l1.4-3.1l1.4-3.1l1.4-3.1l1.4-3.1l1.4-3.1l1.4-3.1l1.4-3.1l1.4-3.1l1.4-3.1l1.4-3.1l1.4-3.1l1.4-3.1l1.4-3.1
|
1763 |
+
l1.4-3.1l1.4-3.1l1.4-3.1l1.4-3l1.4-3l1.5-3l1.5-3l1.5-3l1.5-3l1.5-3l1.5-3l1.5-3l1.5-3l1.5-3l1.5-3l1.5-3l1.5-3l1.5-3l1.1-2.1
|
1764 |
+
l1.1-2.1l1-2.1l1-2.1l1-2.2l1-2.2l0.5-1.1l0.5-1.1l0.5-1.1l0.5-1.1l0.5-1.1l0.5-1.1l0.5-1.1l0.5-1.1l0.5-1.1l0.4-1.1l0.4-1.1
|
1765 |
+
l0.4-1.1l0.4-1.1l0.4-1.1l0.4-1.1l0.4-1.1l0.4-1.1l0.4-1.1l0.4-1.1l0.4-1.1l0.1-0.4l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.4
|
1766 |
+
l0.2-0.3l0.2-0.3l0.4-0.6l0.4-0.6l0.6-1l0.3-0.4l0.2-0.4l0.1-0.2l0.1-0.1l0.1-0.1v-0.1l0.1-0.4l0.3-0.9l0.4-0.8l0.5-0.8l0.6-0.7
|
1767 |
+
l0.7-0.6l0.8-0.4l0.9-0.3l0.9-0.2h0.9l0.9,0.1l0.9,0.3l0.8,0.4l0.8,0.5l0.7,0.6l0.6,0.7l0.4,0.8l0.3,0.9l0.2,0.9v0.9v0.4
|
1768 |
+
l-0.1,0.6l-0.1,0.6l-0.1,0.6l-0.2,0.5l-0.2,0.5l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.2,0.3l-0.2,0.3l-0.4,0.6l-0.4,0.6l-0.7,1
|
1769 |
+
l-0.3,0.4l-0.3,0.4l-0.1,0.2l-0.1,0.2l-0.1,0.1l-0.1,0.1v0.1v0.1l0,0v0.1l-0.4,1.1l-0.4,1.1l-0.4,1.1l-0.4,1.1l-0.4,1.1l-0.4,1.1
|
1770 |
+
l-0.4,1.1l-0.4,1.1l-0.5,1.1l-0.5,1.1l-0.5,1.1l-0.5,1.1l-0.5,1.1l-0.5,1.1l-0.5,1.1l-0.5,1.1l-0.5,1.1l-0.5,1.1l-0.5,1.1
|
1771 |
+
l-0.5,1.1l-1,2.2l-1.1,2.2l-1.1,2.2l-1.1,2.2l-1.1,2.2l-1.1,2.1l-1.5,3l-1.5,3l-1.5,3l-1.5,3l-1.5,3l-1.5,3l-1.5,3l-1.5,3l-1.5,3
|
1772 |
+
l-1.5,3l-1.5,3l-1.5,3l-1.4,3l-1.4,3l-1.4,3l-1.4,3l-1.4,3l-1.4,3l-1.4,3l-1.4,3l-1.4,3l-1.4,3.1l-1.4,3.1l-1.4,3.1l-1.4,3.1
|
1773 |
+
l-1.4,3.1l-1.4,3.1l-1.4,3.1l-1.4,3.1l-1.4,3.1l-1.4,3.1l-1.4,3.1l-2.4,5.5l-2.4,5.5l-4.9,11l-2.4,5.5l-2.4,5.5l-2.5,5.5
|
1774 |
+
l-2.5,5.5l-1.2,2.8l-1.2,2.8l-1.3,2.8l-1.3,2.8l-1.3,2.8l-1.3,2.8l-1.3,2.8l-1.3,2.7l-1.3,2.7l-1.3,2.7l-1.3,2.7l-1.3,2.7
|
1775 |
+
l-1.3,2.7l-1.3,2.7l-1.3,2.7l-1.3,2.7l-0.8,1.5l-0.8,1.5l-0.8,1.5l-0.7,1.5l-1.5,3.1l-1.5,3.1l-3,6.3l-1.5,3.2l-0.8,1.6l-0.8,1.6
|
1776 |
+
l-0.8,1.6l-0.8,1.6l-0.8,1.6l-0.8,1.6l-0.8,1.6l-0.8,1.6l-0.8,1.6l-0.8,1.6l-0.8,1.6l-0.9,1.6l-0.9,1.5l-0.9,1.5l-0.9,1.5
|
1777 |
+
l-0.9,1.5l-0.9,1.5l-0.9,1.5l-0.5,0.8l-0.5,0.8l-0.5,0.8l-0.5,0.8l-0.9,1.6l-0.9,1.6l-0.9,1.6l-0.9,1.6l-0.9,1.6l-0.9,1.6
|
1778 |
+
l-0.9,1.6l-0.9,1.6l-1.7,3.3l-1.7,3.3l-1.7,3.3l-0.9,1.7l-0.9,1.6l-0.9,1.6l-0.9,1.6l-0.9,1.6l-0.9,1.6l-0.9,1.6l-1,1.6l-0.5,0.8
|
1779 |
+
l-0.5,0.8l-0.5,0.8l-0.5,0.8l-0.5,0.8l-0.5,0.8l-0.5,0.8l-0.5,0.8l-0.5,0.8l-0.5,0.8l-0.5,0.8l-0.5,0.8l-0.5,0.8l-0.6,0.8
|
1780 |
+
l-0.6,0.8l-0.5,0.7l-0.1,0.2l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.2,0.4
|
1781 |
+
l-0.2,0.4l-0.2,0.5l-0.2,0.5l-0.4,1l-0.4,1.1l-0.5,1.1l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.4,0.6
|
1782 |
+
l-0.4,0.6l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.3,0.3l-0.3,0.3l-0.3,0.3l-0.3,0.3l-0.3,0.3l-0.4,0.3
|
1783 |
+
l-0.5,0.3l-0.4,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.1l-0.5,0.1l-0.4,0.1h-0.4h-0.4h-0.5h-0.4l-0.5-0.1l-0.4-0.1l-0.6-0.2l-0.5-0.2
|
1784 |
+
l-0.5-0.2l-0.5-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3
|
1785 |
+
l-0.3-0.3l-0.3-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.4l-0.3-0.4l-0.3-0.5l-0.2-0.5l-0.2-0.7l-0.2-0.5l-0.2-0.5l-0.2-0.5
|
1786 |
+
l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.5-1l-1.1-2.1l-0.6-1.1l-0.3-0.6l-0.3-0.6l-0.3-0.6l-0.3-0.6l-0.3-0.6
|
1787 |
+
l-0.3-0.6l-0.3-0.7l-0.3-0.7l-0.2-0.7l-0.2-0.7l-0.2-0.7l-0.2-0.7l-0.1-0.4l-0.1-0.4l-0.1-0.4l-0.1-0.4l-0.5-2.6l-0.5-2.5
|
1788 |
+
l-0.5-2.5l-0.5-2.6l-0.4-2.6l-0.4-2.6l-0.4-2.6l-0.4-2.6l-0.4-2.6l-0.4-2.6l-0.4-2.6l-0.4-2.6l-0.4-2.6l-0.4-2.6l-0.7-5.1
|
1789 |
+
l-0.7-5.1l-0.7-5.1l-0.7-5.1l-0.7-5.1l-0.4-2.6l-0.4-2.6l-0.4-2.6l-0.4-2.6l-0.4-2.6l-0.4-2.5l-0.4-2.5l-0.4-2.5l-1.2-7.4
|
1790 |
+
l-1.3-7.4l-1.3-7.5l-1.3-7.5l-2.6-15l-1.3-7.5l-1.3-7.5l-1.3-7.5l-1.3-7.5l-0.6-3.8l-0.6-3.8l-0.6-3.8l-0.6-3.8l-0.6-3.8
|
1791 |
+
l-0.6-3.8l-0.6-3.8l-0.6-3.8l-0.6-3.8l-0.6-3.8l-0.6-3.8l-0.5-3.8l-0.1-0.9l-0.1-0.9l-0.1-0.9l-0.1-0.8l-0.3-1.7l-0.3-1.7
|
1792 |
+
l-0.3-1.7l-0.3-1.7l-0.3-1.7l-0.4-1.7l-0.4-1.7l-0.4-1.7l-0.4-1.7l-0.4-1.7l-0.8-3.5l-0.8-3.5l-0.8-3.5l-0.8-3.5l-0.4-1.8
|
1793 |
+
l-0.4-1.8l-0.4-1.8l-0.4-1.8l-0.4-1.8l-0.4-1.8l-0.4-1.8l-0.3-1.8l-0.3-1.8l-0.3-1.8l-0.2-0.9l-0.1-0.9l-0.1-0.9l-0.1-0.9
|
1794 |
+
l-0.2-1.5l-0.2-1.5l-0.2-1.5l-0.2-1.5l-0.2-1.5l-0.3-1.5l-0.3-1.5l-0.3-1.5l-0.3-1.5l-0.3-1.5l-0.6-3l-0.6-2.9l-0.6-2.9l-1.2-5.9
|
1795 |
+
l-0.6-3l-0.6-3l-0.6-3l-0.3-1.5l-0.3-1.5l-0.3-1.5l-0.3-1.5l-0.3-1.5l-0.3-1.5l-0.3-1.6l-0.3-1.6l-0.3-1.7l-0.1-0.9l-0.1-0.9
|
1796 |
+
l-0.1-0.9l-0.1-0.9l-0.1-0.9l-0.1-0.9l-0.1-0.9v-0.5v-0.5v-0.5v-0.5v-0.5v-0.6v-0.5l0.1-0.5l0.1-0.5l0.1-0.4l0.1-0.4l0.1-0.4
|
1797 |
+
l0.2-0.5l0.1-0.2v-0.3l0.1-0.9l0.3-0.9L-236.9,1244.6z M-3,1245.6v0.2l0,0V1245.6L-3,1245.6z M-236.3,1251.3l0.2,0.2l-0.4-0.6
|
1798 |
+
L-236.3,1251.3z"
|
1799 |
+
/>
|
1800 |
+
</g>
|
1801 |
+
<g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
|
1802 |
+
<path
|
1803 |
+
d="M-269.9,1186.4l0.1-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.2l0.2-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2
|
1804 |
+
l0.3-0.2l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1h0.3h0.3h0.3h0.3h0.3l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.2
|
1805 |
+
l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.2,0.2l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3
|
1806 |
+
l0.1,0.3v0.3l0,0v0.3v0.3v0.3v0.3l0,0v0.2v0.2l-0.1,0.2l-0.1,0.3l-0.1,0.4l-0.2,0.4l-0.3,0.9l-0.4,0.9l-0.4,0.9l-0.3,0.8
|
1807 |
+
l-0.1,0.3l-0.1,0.2l-0.2,1.4l-0.1,0.9l-0.1,0.9l-0.1,1l-0.1,1l-0.1,0.5l-0.1,0.5v0.5v0.5v0.5v0.5v0.5v0.5v0.4v0.4v0.4v0.4v0.4
|
1808 |
+
v0.3v0.3v0.3v0.3l0.1,0.2v0.1v0.1v0.1v0.1l0.4,1.1l0.4,1.2l0.5,1.3l0.2,0.7l0.3,0.7l0.3,0.7l0.3,0.7l0.3,0.7l0.3,0.7l0.3,0.7
|
1809 |
+
l0.3,0.7l0.3,0.7l0.3,0.7l0.3,0.7l0.3,0.7l0.3,0.7l0.4,0.7l0.4,0.7l0.4,0.7l0.4,0.7l0.4,0.7l0.4,0.7l0.4,0.7l0.4,0.7l0.4,0.7
|
1810 |
+
l0.4,0.7l0.4,0.7l0.4,0.7l0.4,0.7l0.5,0.7l0.5,0.7l0.5,0.6l0.5,0.6l0.5,0.6l0.5,0.6l0.5,0.6l0.5,0.6l0.5,0.5l0.2,0.3l0.2,0.3
|
1811 |
+
l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2
|
1812 |
+
l0.2,0.2l0.2,0.2l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1
|
1813 |
+
l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.3h0.3h0.3h0.3l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1
|
1814 |
+
l0.3,0.1l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.2,0.2l0.2,0.2l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.1,0.3l0.1,0.3l0.1,0.3
|
1815 |
+
l0.1,0.3l0.1,0.3l0.1,0.3v0.3v0.3v0.3v0.3v0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3
|
1816 |
+
l-0.2,0.3l-0.2,0.3l-0.2,0.2l-0.2,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1
|
1817 |
+
l-0.3,0.1h-0.3h-0.3h1.6h-0.4h-0.5h-0.5h-0.5l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1
|
1818 |
+
l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2
|
1819 |
+
l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.4-0.3
|
1820 |
+
l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.4l-0.6-0.7l-0.6-0.7l-0.6-0.7l-0.6-0.8l-0.6-0.8l-0.6-0.8
|
1821 |
+
l-0.6-0.8l-0.6-0.8l-0.5-0.8l-0.5-0.8l-0.5-0.8l-0.5-0.8l-0.5-0.8l-0.5-0.8l-0.5-0.8l-0.5-0.8l-0.5-0.8l-0.4-0.8l-0.4-0.8
|
1822 |
+
l-0.4-0.8l-0.4-0.8l-0.4-0.8l-0.4-0.8l-0.4-0.8l-0.4-0.8l-0.4-0.8l-0.4-0.8l-0.3-0.8l-0.3-0.8l-0.3-0.8l-0.3-0.8l-0.3-0.8
|
1823 |
+
l-0.3-0.8l-0.3-0.7l-0.3-0.7l-0.5-1.4l-0.5-1.4l-0.4-1.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.4l-0.1-0.6l-0.1-0.7l-0.1-0.7
|
1824 |
+
l-0.1-0.7l-0.1-0.7v-0.6v-0.6v-0.6v-0.6v-0.6v-0.6v-0.6v-0.6v-0.6l0.1-0.6l0.1-0.6l0.1-0.6l0.1-0.6l0.1-1.1l0.1-1.1l0.2-1l0.2-1
|
1825 |
+
l0.3-1.8l0.1-0.3l0.1-0.4l0.1-0.5l0.2-0.5l0.2-0.5l0.4-1l0.4-1l0.3-0.9l0.3-0.7v-0.1v-0.2l0.1-0.3l0.1-0.3L-269.9,1186.4z
|
1826 |
+
M-270.5,1188.7v0.6v-0.3V1188.7l0.1-0.3v-0.1L-270.5,1188.7z M-270.4,1187.7L-270.4,1187.7L-270.4,1187.7L-270.4,1187.7z"
|
1827 |
+
/>
|
1828 |
+
</g>
|
1829 |
+
<g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
|
1830 |
+
<path
|
1831 |
+
d="M-5,1240.4l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.3-0.3l0.3-0.3l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2
|
1832 |
+
l0.3-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.3-0.1l0.4-0.1l0.3-0.1l0.3-0.1l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2
|
1833 |
+
l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.3l0.3-0.3l0.3-0.3
|
1834 |
+
l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.3
|
1835 |
+
l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4
|
1836 |
+
l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.4l0.5-0.9l0.4-0.9l0.4-0.9l0.4-0.9l0.4-0.9l0.4-0.9l0.4-0.9l0.4-0.9l0.4-0.9
|
1837 |
+
l0.3-0.9l0.3-0.9l0.3-0.9l0.3-0.9l0.3-0.9l0.3-0.9l0.3-1l0.2-0.9l0.2-0.9l0.2-0.9l0.2-0.9l0.2-0.9l0.2-0.9l0.2-0.9l0.1-0.9
|
1838 |
+
l0.1-0.9l0.1-0.9l0.1-0.9l0.1-0.9l0.1-0.9v-0.9v-0.9v-0.9v-0.4v-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.2-0.3l0.2-0.3l0.2-0.3
|
1839 |
+
l0.2-0.3l0.2-0.3l0.3-0.3l0.3-0.3l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1h0.4h0.4h0.4h0.4
|
1840 |
+
l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.3,0.1l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.3l0.3,0.3l0.2,0.3l0.2,0.3l0.2,0.3
|
1841 |
+
l0.2,0.3l0.2,0.3l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4v0.4v0.4v1v1.1v1.1l-0.1,1.1l-0.1,1.1l-0.1,1.1l-0.1,1.1l-0.1,1.1l-0.2,1.1
|
1842 |
+
l-0.2,1.1l-0.2,1.1l-0.2,1.1l-0.2,1.1l-0.2,1.1l-0.3,1.1l-0.3,1.1l-0.3,1.1l-0.3,1.1l-0.3,1.1l-0.4,1.1l-0.4,1.1l-0.4,1.1
|
1843 |
+
l-0.4,1.1l-0.4,1.1l-0.4,1.1l-0.4,1.1l-0.5,1.1l-0.5,1.1l-0.5,1.1l-0.5,1l-0.5,1l-0.5,1l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.3,0.5
|
1844 |
+
l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.3,0.5l-0.3,0.5
|
1845 |
+
l-0.3,0.5l-0.4,0.5l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4
|
1846 |
+
l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.3l-0.5,0.3l-0.5,0.3
|
1847 |
+
l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.2l-0.5,0.2
|
1848 |
+
l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.4,0.1l-0.4,0.1l-0.4,0.1H0.8H0.4H0h-0.4l-0.4-0.1
|
1849 |
+
l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.3l-0.3-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.3
|
1850 |
+
l-0.2-0.3l-0.2-0.3l-0.1-0.3l-0.1-0.4l-0.1-0.4l-0.1-0.4v-0.4v-0.4v-0.4v-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4L-5,1240.4z"
|
1851 |
+
/>
|
1852 |
+
</g>
|
1853 |
+
<g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
|
1854 |
+
<path
|
1855 |
+
d="M-271.2,1188.2l0.2-0.4l0.2-0.4l0.1-0.2l0.3-0.4l0.3-0.4l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.3-0.3l0.3-0.3
|
1856 |
+
l0.3-0.3l0.3-0.3l0.3-0.3l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.6-0.3l0.6-0.3l0.7-0.3l0.6-0.3l0.6-0.3
|
1857 |
+
l0.6-0.2l0.6-0.2l0.6-0.2l0.6-0.2l0.6-0.2l0.4-0.1l0.4-0.1l0.5-0.1h0.5h0.5h0.4h0.4h0.4h0.4h0.4h0.4h0.4l0.4,0.1l0.4,0.1l0.4,0.1
|
1858 |
+
l0.4,0.1l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.2l0.8,0.3l0.8,0.3l0.8,0.3l0.8,0.3l0.8,0.3l0.8,0.3l0.8,0.3l0.8,0.3
|
1859 |
+
l0.8,0.3l1.5,0.6l1.4,0.5l1.3,0.5l1.1,0.5l1,0.4l1.1,0.4l1,0.4l1.1,0.4l1,0.4l1,0.4l1.1,0.4l1.1,0.4l1.1,0.4l1.1,0.4l1.1,0.4
|
1860 |
+
l1.1,0.4l1.1,0.4l1.1,0.4l1.1,0.4l1.1,0.4l1.1,0.3l1.1,0.3l1.1,0.3l1.1,0.3l1.1,0.3l1.1,0.3l1.1,0.3l1.1,0.3l1.1,0.3l1.1,0.3
|
1861 |
+
l1.1,0.3l1.1,0.3l1.1,0.3l1.1,0.3l1.1,0.3l1.1,0.2l1.1,0.2l1.1,0.2l1.1,0.2l1.1,0.2l1.1,0.2l1.1,0.2l1.1,0.2l1.1,0.2l1.1,0.2
|
1862 |
+
l1.1,0.2l1.1,0.2l1.1,0.2l1.1,0.2l1.1,0.2l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1l1.1,0.1
|
1863 |
+
l1.1,0.1l1.1,0.1l1.1,0.1h1.1h1.1h1.1h1.1h1.1h1.1h1.6h1.6h1.6h1.6h1.6l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1
|
1864 |
+
l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l3.2,0.3l3.2,0.3l3.2,0.3l6.5,0.6l3.2,0.3l3.2,0.3l3.2,0.3l3.2,0.3l3.2,0.3
|
1865 |
+
l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1h1.6h1.6h1.6h1.6h1.6
|
1866 |
+
h1.6h1.6h1.6h1.6l1.6-0.1l1.6-0.1l1.6-0.1l1.6-0.1l0.9-0.1l0.9-0.1l0.9-0.1l0.9-0.1l0.9-0.1l0.9-0.1l0.9-0.1l0.9-0.1l0.9-0.1
|
1867 |
+
l0.9-0.1l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.3
|
1868 |
+
l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.3l0.9-0.3l1.8-0.7l1.8-0.7l1.8-0.7
|
1869 |
+
l1.8-0.7l1.8-0.7l1.8-0.7l1.8-0.7l1.8-0.7l1.8-0.7l1.8-0.7l3.5-1.5l3.5-1.5l0.5-0.2l0.5-0.2l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.3
|
1870 |
+
l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.3l1.1-0.7l1.1-0.7l1.2-0.7l1.2-0.7l0.6-0.4l0.6-0.4l0.6-0.4l0.7-0.4l0.7-0.4l0.7-0.4l0.7-0.4
|
1871 |
+
l0.7-0.4l0.7-0.3l0.7-0.3l0.7-0.3l0.8-0.3l0.8-0.3l0.4-0.1l0.4-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1h0.5h0.5h0.5l0.5,0.1
|
1872 |
+
l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.2l0.5,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.3,0.3l0.3,0.3l0.3,0.3l0.3,0.3l0.3,0.3l0.2,0.3
|
1873 |
+
l0.2,0.2l0.2,0.3l0.4,0.4l0.3,0.4l0.3,0.4l0.5,0.7l0.2,0.3l0.2,0.2v0.1l0.5,0.1l0.7,0.3l0.7,0.4l0.6,0.4l0.6,0.5l0.5,0.6l0.4,0.7
|
1874 |
+
l0.3,0.7l0.2,0.7l0.1,0.8v0.8l-0.1,0.8l-0.2,0.8l-0.3,0.7l-0.4,0.7l-0.4,0.6l-0.5,0.6l-0.6,0.5l-0.7,0.4l-0.7,0.3l-0.7,0.2
|
1875 |
+
l-0.8,0.1h-0.8h-0.4h-0.5l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.3l-0.3-0.3
|
1876 |
+
l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.2-0.4l-0.2-0.3l-0.3,0.1
|
1877 |
+
l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.5,0.3l-1.1,0.7l-1.2,0.7
|
1878 |
+
l-1.2,0.8l-1.2,0.8l-0.6,0.4l-0.6,0.4l-0.7,0.4l-0.7,0.4l-0.7,0.4l-0.7,0.4l-0.7,0.4l-0.7,0.3l-0.7,0.3l-0.7,0.3l-3.6,1.5
|
1879 |
+
l-3.6,1.5l-1.8,0.8l-1.8,0.8l-1.8,0.8l-1.8,0.8l-1.8,0.7l-1.9,0.7l-1.9,0.7l-1.9,0.7l-1.9,0.7l-1.9,0.7l-1,0.3l-1,0.3l-1,0.3
|
1880 |
+
l-1,0.3l-1,0.3l-1,0.3l-1,0.3l-1,0.3l-1,0.3l-1,0.3l-1,0.3l-1,0.3l-1,0.3l-1,0.3l-1,0.3l-1,0.3l-1,0.2l-1,0.2l-1,0.2l-1,0.2
|
1881 |
+
l-1,0.2l-1,0.2l-1,0.2l-1,0.2l-1,0.2l-1,0.2l-1,0.2l-1,0.2l-1,0.1l-1,0.1l-1,0.1l-1,0.1l-1,0.1l-1,0.1l-1,0.1l-1,0.1l-1.7,0.1
|
1882 |
+
l-1.7,0.1l-1.7,0.1l-1.7,0.1h-1.7h-1.7h-1.7h-1.7h-1.7h-1.7H-80h-1.6h-1.6l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1
|
1883 |
+
l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1l-3.3-0.3l-3.3-0.3l-3.3-0.3l-3.2-0.3l-3.2-0.3
|
1884 |
+
l-6.5-0.6l-3.2-0.3l-3.2-0.3l-3.2-0.3l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1
|
1885 |
+
l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1h-1.6h-1.6h-1.6h-1.6h-1.6h-1.2h-1.2h-1.2h-1.2h-1.2h-1.2l-1.2-0.1l-1.2-0.1l-1.2-0.1
|
1886 |
+
l-1.2-0.1l-1.2-0.1l-1.2-0.1l-1.2-0.1l-1.2-0.1l-1.2-0.1l-1.2-0.1l-1.2-0.1l-1.2-0.1l-1.2-0.2l-1.2-0.2l-1.2-0.2l-1.2-0.2
|
1887 |
+
l-1.2-0.2l-1.2-0.2l-1.2-0.2l-1.2-0.2l-1.2-0.2l-1.2-0.2l-1.2-0.2l-1.2-0.2l-1.2-0.2l-1.2-0.3l-1.1-0.3l-1.1-0.3l-1.1-0.3
|
1888 |
+
l-1.1-0.3l-1.1-0.3l-1.1-0.3l-1.1-0.3l-1.1-0.3l-1.1-0.3l-1.1-0.3l-1.1-0.3l-1.1-0.3l-1.1-0.3l-1.1-0.3l-1.1-0.4l-1.1-0.4
|
1889 |
+
l-1.1-0.4l-1.1-0.4l-1.1-0.4l-1.1-0.4l-1.1-0.4l-1.1-0.4l-1.1-0.4l-1.1-0.4l-1.1-0.4l-1.1-0.4l-1.1-0.4l-1.1-0.4l-1.1-0.4
|
1890 |
+
l-1.1-0.4l-1.1-0.4l-1.1-0.4l-0.9-0.4l-1.1-0.4l-1.2-0.5l-1.3-0.5l-1.4-0.5l-0.7-0.3l-0.7-0.3l-0.7-0.3l-0.7-0.3l-0.7-0.3
|
1891 |
+
l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.6-0.2l-0.6-0.1l-0.6-0.1l-0.6-0.1h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2
|
1892 |
+
h-0.2h-0.1h-0.1h-0.1h-0.1h-0.1l0,0l0,0l0,0l-0.2,0.1l-0.3,0.1l-0.3,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2
|
1893 |
+
l-0.4,0.2l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l0,0l-0.1,0.1l-0.3,0.4l-0.3,0.4l-0.3,0.4l-0.2,0.3v0.1l0.1-0.1l-0.4,0.6l-0.5,0.6
|
1894 |
+
l-0.6,0.5l-0.6,0.4l-0.7,0.3l-0.7,0.2l-0.8,0.1h-0.8l0,0l-0.8-0.1l-0.8-0.2l-0.7-0.3l-0.7-0.4l-0.6-0.4l-0.6-0.5l-0.5-0.6
|
1895 |
+
l-0.4-0.7l-0.3-0.7l-0.2-0.7l-0.1-0.8v-0.8l0.1-0.8l0.2-0.8L-271.2,1188.2L-271.2,1188.2z M-260.6,1193.4l0.2-0.4l0,0
|
1896 |
+
L-260.6,1193.4L-260.6,1193.4z"
|
1897 |
+
/>
|
1898 |
+
</g>
|
1899 |
+
<g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
|
1900 |
+
<path
|
1901 |
+
d="M-265.5,1181.6l0.4-0.7l0.5-0.6l0.6-0.5l0.4-0.3l0.4-0.4l0.4-0.3l0.4-0.3l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.3
|
1902 |
+
l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2
|
1903 |
+
l0.5-0.1l0.5-0.1l0.5-0.1l0.9-0.3l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.2l1.8-0.3l1.7-0.3l0.8-0.2l0.8-0.2l0.8-0.2
|
1904 |
+
l0.8-0.2l0.8-0.2l0.7-0.2l0.7-0.2l0.7-0.2l1.3-0.4l1.3-0.4l1.3-0.4l1.3-0.4l1.3-0.3l1.3-0.3l1.3-0.3l1.3-0.3l1.3-0.3l1.3-0.3
|
1905 |
+
l1.3-0.3l1.3-0.3l1.3-0.3l1.3-0.3l1.3-0.3l1.3-0.3l1.3-0.2l1.3-0.2l1.3-0.2l1.3-0.2l1.3-0.2l1.3-0.2l1.3-0.2l1.3-0.2l1.3-0.2
|
1906 |
+
l1.4-0.2l1.4-0.1l1.4-0.1l1.4-0.1l1.4-0.1l1.4-0.1l1.4-0.1l5.1-0.3l5.1-0.3l5.2-0.3l5.2-0.3l10.4-0.7l5.2-0.3l5.2-0.3l5.2-0.3
|
1907 |
+
l5.2-0.3l5.2-0.3l5.2-0.3l5.2-0.3l2.6-0.1l2.6-0.1l2.6-0.1l2.6-0.1l2.6-0.1l2.6-0.1l2.6-0.1l2.6-0.1l2.6-0.1l2.6-0.1l2.6-0.1
|
1908 |
+
l2.6-0.1l2.6-0.1l2.6-0.1h2.6h2.6h2.6h2.6h2.6h2.6h2.6h2.6h2.6h2.6l2.6,0.1l2.6,0.1l2.6,0.1l2.6,0.1l2.6,0.1l2.6,0.1l2.6,0.1
|
1909 |
+
l2.6,0.1l2.6,0.2l2.6,0.2l2.6,0.2l2.6,0.2l2.6,0.2l2.6,0.2l3.2,0.3l3.2,0.3l1.7,0.1l1.7,0.2l1.7,0.2l1.7,0.2l1.7,0.2l1.7,0.2
|
1910 |
+
l0.9,0.1l0.9,0.1l0.9,0.1l0.9,0.1l0.9,0.1l0.9,0.1l0.9,0.2l0.9,0.2l0.9,0.2l0.9,0.2l0.9,0.2l0.9,0.2l0.9,0.2l0.9,0.2l0.9,0.2
|
1911 |
+
l0.9,0.2l0.9,0.2l0.9,0.3l0.9,0.3l0.9,0.3l0.9,0.3l0.9,0.3l0.9,0.3l0.8,0.3l0.8,0.3l0.8,0.4l0.8,0.4l0.8,0.4l0.8,0.4l0.8,0.4
|
1912 |
+
l0.8,0.4l0.8,0.4l0.8,0.5l0.8,0.5l0.8,0.5l0.8,0.5l0.8,0.5l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3
|
1913 |
+
l0.4,0.3l0.4,0.3l0.3,0.3l0.3,0.3l0.3,0.3l0.3,0.3l0.5,0.6l0.4,0.6l0.3,0.7l0.3,0.7l0.2,0.8l0.1,0.8v0.8l-0.1,0.8l-0.2,0.7
|
1914 |
+
l-0.3,0.7l-0.4,0.6l-0.5,0.6l-0.6,0.5l-0.6,0.4l-0.7,0.3l-0.7,0.3l-0.8,0.2l-0.8,0.1H22l-0.8-0.1l-0.7-0.2l-0.7-0.3l-0.6-0.4
|
1915 |
+
l-0.6-0.5l-0.3-0.3l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2
|
1916 |
+
l-0.3-0.2l-0.3-0.2l-0.6-0.4l-0.6-0.4l-0.6-0.4l-0.6-0.4l-0.6-0.3l-0.6-0.3l-0.6-0.3l-0.6-0.3l-0.6-0.3l-0.6-0.3l-0.7-0.3
|
1917 |
+
l-0.7-0.3l-0.7-0.3l-0.7-0.3l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2
|
1918 |
+
l-0.8-0.2l-0.8-0.2l-0.8-0.2l-0.8-0.2l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1L-9,1173l-0.8-0.1l-0.8-0.1l-0.8-0.1
|
1919 |
+
l-1.6-0.2l-1.6-0.2l-1.6-0.2l-1.6-0.2l-1.6-0.2l-1.6-0.1l-3.2-0.3l-3.2-0.3l-2.6-0.2l-2.5-0.2l-2.5-0.2l-2.5-0.2l-2.6-0.2
|
1920 |
+
l-2.6-0.2l-2.6-0.1l-2.6-0.1l-2.6-0.1l-2.6-0.1l-2.6-0.1l-2.6-0.1l-2.6-0.1l-2.6-0.1h-2.6h-2.6h-2.6h-2.6h-2.6h-2.6h-2.6h-2.6
|
1921 |
+
h-2.6h-2.6l-2.6,0.1l-2.6,0.1l-2.6,0.1l-2.6,0.1l-2.6,0.1l-2.6,0.1l-2.6,0.1l-2.6,0.1l-2.6,0.1l-2.6,0.1l-2.6,0.1l-2.6,0.1
|
1922 |
+
l-2.6,0.1l-2.6,0.1l-5.2,0.3l-5.2,0.3l-5.2,0.3l-5.2,0.3l-5.2,0.3l-5.2,0.3l-5.2,0.3l-10.4,0.7l-5.2,0.3l-5.2,0.3l-5.2,0.3
|
1923 |
+
l-5.1,0.3l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.3,0.1l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2
|
1924 |
+
l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.3l-1.2,0.3l-1.2,0.3l-1.2,0.3l-1.2,0.3l-1.2,0.3l-1.2,0.3
|
1925 |
+
l-1.2,0.3l-1.2,0.3l-1.3,0.3l-1.3,0.3l-1.3,0.4l-1.3,0.4l-1.3,0.4l-0.9,0.2l-0.9,0.2l-0.9,0.2l-0.9,0.2l-0.9,0.2l-0.9,0.2
|
1926 |
+
l-0.9,0.2l-0.9,0.2l-1.7,0.3l-1.7,0.3l-0.8,0.2l-0.8,0.2l-0.8,0.2l-0.8,0.2l-0.8,0.2l-0.8,0.2l-0.8,0.2l-0.4,0.1l-0.4,0.1
|
1927 |
+
l-0.4,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1
|
1928 |
+
l-0.3,0.1l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.3,0.2l-0.6,0.5l-0.7,0.4
|
1929 |
+
l-0.7,0.3l-0.8,0.2l-0.8,0.1h-0.8l-0.8-0.1l-0.7-0.2l-0.7-0.3l-0.7-0.4l-0.6-0.5l-0.5-0.6l-0.5-0.6l-0.4-0.7l-0.3-0.7l-0.2-0.8
|
1930 |
+
l-0.1-0.8v-0.8l0.1-0.8l0.2-0.7L-265.5,1181.6z"
|
1931 |
+
/>
|
1932 |
+
</g>
|
1933 |
+
<g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
|
1934 |
+
<path
|
1935 |
+
d="M-231.8,1244l0.4-0.6l0.4-0.5l0.5-0.5l0.5-0.4l0.6-0.4l0,0l0.5-0.2l0.5-0.2l0.6-0.1l0.6-0.1l0,0h0.5h0.5h0.3
|
1936 |
+
l0.5,0.1l0.5,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.8,0.3l0.9,0.3l1,0.4l2.1,0.8l2.2,0.9l1.1,0.4l1,0.4l0.9,0.3l0.4,0.1l0.4,0.1l0.3,0.1
|
1937 |
+
l0.2,0.1h0.2h0.1l1.5,0.3l1.6,0.4l1.5,0.4l1.5,0.4l1.5,0.4l1.5,0.4l6.1,1.6l1.5,0.4l1.5,0.4l1.5,0.4l1.5,0.4l1.5,0.4l1.5,0.3
|
1938 |
+
l1.5,0.3l1.5,0.3l1.5,0.3l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1
|
1939 |
+
l0.7,0.1l0.7,0.1l0.7,0.1h0.7h0.7h0.7h0.7h0.7h0.7h0.7h0.7h0.7h0.7h0.7l1.6-0.1l1.6-0.1h1.6h1.6h1.6h1.6h1.6h1.6h1.6h1.6h1.6h1.6
|
1940 |
+
l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l3.2,0.2l3.2,0.2l3.2,0.2l3.2,0.2l3.2,0.2l3.2,0.2l3.2,0.2
|
1941 |
+
l3.2,0.2l3.2,0.2l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1l1.6,0.1h1.6h1.6h1.6h1.6h1.6h1.6h1.6h1.6h1.6h1.6l1.6-0.1l1.5-0.1
|
1942 |
+
l1.5-0.1l1.5-0.1l1.5-0.1l1.5-0.1l1.5-0.1l1.5-0.2l1.5-0.2l1.5-0.2l1.2-0.1l1.2-0.2l1.2-0.2l1.2-0.2l1.2-0.2l1.2-0.2l1.1-0.2
|
1943 |
+
l1.1-0.2l1.1-0.2l1.1-0.2l1.1-0.2l1.1-0.2l1.1-0.2l1.1-0.3l1.1-0.3l1.1-0.3l1.1-0.3l1.1-0.3l1.1-0.3l1.1-0.3l1.1-0.3l1.1-0.3
|
1944 |
+
l1.1-0.3l1.1-0.3l1.1-0.3l1.1-0.3l1.1-0.3l1.1-0.3l1.1-0.3l1.1-0.4l1.1-0.4l1.1-0.4l1.1-0.4l1.1-0.4l1-0.4l1-0.4l1-0.4l1-0.4
|
1945 |
+
l1-0.4l1-0.4l1-0.4l1-0.4l1-0.4l1-0.4l1-0.4l1-0.4l1-0.4l1-0.5l1-0.5l1-0.5l2.1-0.9l2.1-1l2.1-1l2.1-1l2.1-1l2.1-1L5,1233
|
1946 |
+
l0.6-0.3l0.7-0.2l0.7-0.1h0.7h0.7l0.7,0.1l0.7,0.2l0.6,0.3l0.6,0.3l0.5,0.4l0.5,0.5l0.4,0.5l0.4,0.6l0.3,0.6l0.2,0.6l0.2,0.7
|
1947 |
+
l0.1,0.7v0.7l-0.1,0.7l-0.2,0.7l-0.2,0.6l-0.3,0.6l-0.4,0.6l-0.4,0.5l-0.5,0.5l-0.6,0.4l-0.6,0.3l-2.2,1.1l-2.2,1.1l-2.2,1
|
1948 |
+
l-2.2,1l-2.2,1l-2.2,1l-2.2,1l-1.1,0.5l-1.1,0.5l-1.1,0.5l-1.1,0.5l-1.1,0.5l-1.1,0.5l-1.1,0.5l-1.1,0.4l-1.1,0.4l-1.1,0.4
|
1949 |
+
l-1.1,0.4l-1.1,0.4l-1.1,0.4l-1.1,0.4l-1.1,0.4l-1.1,0.4l-1.1,0.4l-1.1,0.4l-1.1,0.4l-1.1,0.4l-1.1,0.4l-1.1,0.4l-1.1,0.4
|
1950 |
+
l-1.1,0.4l-1.1,0.4l-1.1,0.3l-1.1,0.3l-1.1,0.3l-1.2,0.3l-1.2,0.3l-1.2,0.3l-1.2,0.3l-1.2,0.3l-1.2,0.3l-1.2,0.3l-1.2,0.3
|
1951 |
+
l-1.2,0.3l-1.2,0.3l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.3,0.2l-1.3,0.2
|
1952 |
+
l-1.3,0.2l-1.6,0.2l-1.7,0.2l-1.6,0.2l-1.7,0.1l-1.6,0.1l-1.7,0.1l-1.6,0.1l-1.6,0.1l-1.6,0.1l-1.6,0.1h-1.6h-1.6h-1.6h-1.6h-1.6
|
1953 |
+
h-1.6h-1.6h-1.6h-1.6h-1.6l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1l-3.2-0.2l-3.2-0.2l-3.2-0.2l-3.2-0.2l-3.2-0.2
|
1954 |
+
l-3.2-0.2l-3.2-0.2l-3.2-0.2l-3.2-0.2l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1l-1.6-0.1h-1.6h-1.6h-1.6h-1.6h-1.6
|
1955 |
+
h-1.6h-1.6h-1.6h-1.5h-1.5h-1.5l-1.5,0.1l-1.6,0.1h-0.8h-0.9h-0.9h-0.9h-0.9h-0.9h-0.8h-0.8h-0.9l-0.8-0.1l-0.8-0.1l-0.8-0.1
|
1956 |
+
l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1
|
1957 |
+
l-0.8-0.2l-1.6-0.3l-1.6-0.3l-1.6-0.4l-1.6-0.4l-1.6-0.4l-1.6-0.4l-1.6-0.4l-1.6-0.4l-1.5-0.4l-3.1-0.8l-3-0.8l-1.5-0.4l-1.5-0.4
|
1958 |
+
l-1.5-0.4l-1.5-0.4l-1.5-0.3l-1.5-0.3l-0.4-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.2l-0.5-0.2l-0.5-0.2l-1-0.4l-1.1-0.4l-1.1-0.4l-2.3-0.9
|
1959 |
+
l-2.1-0.8l-0.9-0.4l-0.8-0.3l-0.6-0.2h-0.1h-0.1l-0.7-0.2l-0.6-0.3l-0.6-0.3l-0.6-0.4l-0.5-0.5l-0.5-0.5l-0.4-0.6l-0.3-0.6
|
1960 |
+
l-0.3-0.6l-0.2-0.7l-0.1-0.7v-0.7l0.1-0.7l0.1-0.7l0.2-0.7L-231.8,1244z M-226.5,1252.7l0.5-0.1l0,0L-226.5,1252.7h-0.3H-226.5z"
|
1961 |
+
/>
|
1962 |
+
</g>
|
1963 |
+
<g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
|
1964 |
+
<path
|
1965 |
+
d="M-196.9,1287.6l0.2-0.3l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0,0
|
1966 |
+
l0.2-0.1h0.3l0,0h0.3h0.3h0.3l0,0h0.3l0.3,0.1l0.2,0.1h0.1l0.1-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.1l0.3-0.2l0.3-0.1l0.3-0.1
|
1967 |
+
l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1h0.3h0.3h0.3h0.3h0.3h0.3h0.3h0.3h0.3l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1
|
1968 |
+
l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.4l0.4,0.4
|
1969 |
+
l0.4,0.4l0.3,0.4l0.3,0.4l0.3,0.4l0.3,0.4l0.3,0.4l0.3,0.4l0.3,0.4l0.3,0.4l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.5
|
1970 |
+
l0.3,0.5l0.3,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.4,0.9l0.4,0.9l0.4,0.9l0.3,0.8l0.3,0.8l0.3,0.8l0.2,0.7
|
1971 |
+
l0.2,0.7l0.2,0.6l0.2,0.8l0.2,0.8l0.2,0.8l0.2,0.8l0.1,0.8l0.1,0.8l0.1,0.8l0.1,0.8l0.1,0.8l0.1,0.8l0.1,0.8l0.1,0.8l0.1,0.8
|
1972 |
+
l0.1,0.8v0.8v0.8v0.8v0.8v0.8v0.8v0.8v0.8v0.8v0.8v0.8v0.8v0.8v0.8l-0.1,0.8l-0.1,0.8l-0.1,0.8l-0.1,0.8l-0.1,1.6l-0.2,1.6
|
1973 |
+
l-0.2,1.6l-0.2,1.6l-0.2,1.6l-0.2,1.6l-0.2,1.5l-0.2,1.5l-0.4,3.1l-0.4,3l-0.2,1.5l-0.2,1.5l-0.2,1.5l-0.2,1.5l-0.1,1.1l-0.1,1.2
|
1974 |
+
l-0.1,0.6l-0.1,0.6l-0.1,0.6l-0.1,0.6l-0.1,0.6l-0.1,0.6l-0.1,0.6l-0.1,0.6l-0.1,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.6
|
1975 |
+
l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.3,0.6l-0.3,0.6l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3
|
1976 |
+
l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.2l-0.2,0.2
|
1977 |
+
l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.1l-0.2,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1h-0.3
|
1978 |
+
h-0.3h-0.3h-0.3h-0.3h-0.3h-0.3h-0.3l-0.3-0.1l-0.3-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1
|
1979 |
+
l-0.2-0.1l-0.2-0.1l-0.4-0.2l-0.4-0.3l-0.4-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.4l-0.3-0.4l-0.3-0.4
|
1980 |
+
l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.4-0.8l-0.4-0.8l-0.4-0.8
|
1981 |
+
l-0.4-0.8l-0.3-0.7l-0.3-0.7l-0.3-0.6l-0.5-1.1l-0.4-0.8l-0.1-0.3l-0.1-0.2l-0.3-0.7l-0.3-0.7l-0.3-0.7l-0.3-0.7l-0.3-0.7
|
1982 |
+
l-0.3-0.7l-0.3-0.7l-0.3-0.7l-0.2-0.8l-0.2-0.8l-0.2-0.8l-0.2-0.8l-0.2-0.8l-0.2-0.8l-0.2-0.8l-0.2-0.8l-0.2-0.8l-0.2-0.8
|
1983 |
+
l-0.1-0.8l-0.1-0.8l-0.1-0.8l-0.1-0.8l-0.1-0.8l-0.1-0.8l-0.1-0.8l-0.1-0.8l-0.1-0.8l-0.1-0.8l-0.1-0.8l-0.1-0.8l-0.1-0.8
|
1984 |
+
l-0.1-0.8v-0.8v-0.8v-0.8v-0.8l-0.1-1.6v-1.6v-1.6v-1.6v-1.6v-1.6v-1.6v-1.6v-3.1v-3.1v-1.5v-1.5v-0.5v-0.5v-0.5v-0.5l0.1-0.5
|
1985 |
+
l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.2-0.5l0.3-1l0.3-1l0.3-1
|
1986 |
+
l0.3-0.9l0.3-0.9l0.3-0.9l0.3-0.9l0.1-0.3l0.1-0.3l0.3-0.6l0.3-0.6l0.3-0.6l0.7-1.3l0.3-0.6l0.3-0.6v-0.1v-0.2v-0.3v-0.3v-0.3
|
1987 |
+
l0.1-0.3l0.1-0.3L-196.9,1287.6z M-194.5,1297.5l-0.3,0.9l-0.3,0.9l-0.3,0.9l-0.3,0.9l-0.3,0.9l-0.3,0.9l-0.1,0.4l-0.1,0.4
|
1988 |
+
l-0.1,0.5l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4v0.4v0.4v0.4v0.4v0.4v1.5
|
1989 |
+
v1.5v3.1v3.1v1.6v1.6v1.6v1.6v1.6v1.6v1.6v1.6v0.8v0.8v0.8v0.8l0.1,0.8l0.1,0.8l0.1,0.8l0.1,0.8l0.1,0.8l0.1,0.8l0.1,0.8l0.1,0.8
|
1990 |
+
l0.1,0.7l0.1,0.7l0.1,0.7l0.1,0.7l0.1,0.7l0.1,0.7l0.1,0.7l0.1,0.7l0.2,0.7l0.2,0.7l0.2,0.7l0.2,0.7l0.2,0.7l0.2,0.7l0.2,0.7
|
1991 |
+
l0.2,0.7l0.2,0.7l0.2,0.6l0.2,0.6l0.3,0.6l0.3,0.6l0.3,0.6l0.3,0.6l0.3,0.7l0.1,0.3l0.2,0.4l0.4,0.9l0.5,1.1l0.3,0.6l0.3,0.6
|
1992 |
+
l0.3,0.7l0.3,0.7l0.3,0.7l0.4,0.7l0.4,0.7l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3
|
1993 |
+
l0.2,0.3l0.2,0.3l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.1l0.2,0.1l0.2,0.1l0,0h0.1h0.1l0,0l0,0h0.1h0.1l0,0l0,0
|
1994 |
+
l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0h0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2
|
1995 |
+
l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.2-0.5
|
1996 |
+
l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.6l0.1-0.6l0.1-0.6l0.1-0.6l0.1-0.6l0.1-0.6
|
1997 |
+
l0.1-0.6l0.1-0.6l0.1-0.5l0.1-1.1l0.1-1.1l0.2-1.5l0.2-1.5l0.2-1.5l0.2-1.5l0.4-3l0.4-3.1l0.2-1.5l0.2-1.5l0.2-1.5l0.2-1.5
|
1998 |
+
l0.2-1.5l0.2-1.5l0.1-1.5l0.1-1.5l0.1-0.8l0.1-0.8v-0.8v-0.8v-0.8v-0.8v-0.8v-0.8v-0.8v-0.8v-0.7v-0.8v-0.7v-0.7v-0.7v-0.7v-0.7
|
1999 |
+
v-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.2-0.7
|
2000 |
+
l-0.2-0.7l-0.1-0.5l-0.2-0.5l-0.2-0.6l-0.2-0.7l-0.3-0.7l-0.3-0.8l-0.3-0.8l-0.3-0.8l-0.4-0.8l-0.2-0.4l-0.2-0.4l-0.2-0.4
|
2001 |
+
l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.3-0.4
|
2002 |
+
l-0.2-0.4l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2
|
2003 |
+
l-0.2-0.1h-0.1l-0.1-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1l0,0l0,0h-0.1l0,0l0,0l0,0l0,0h-0.1
|
2004 |
+
h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1l-0.1,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1h-0.3h-0.3h-0.3l-0.3-0.1l-0.2-0.1
|
2005 |
+
l-0.1,0.1l-0.1,0.3l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.3,0.6l-0.6,1.2l-0.3,0.6l-0.3,0.5l-0.2,0.5l-0.1,0.2l-0.1,0.2L-194.5,1297.5z"
|
2006 |
+
/>
|
2007 |
+
</g>
|
2008 |
+
<g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
|
2009 |
+
<path
|
2010 |
+
d="M-181.5,1393.6L-181.5,1393.6l0.2-0.2l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.2-0.2l0.2-0.2
|
2011 |
+
l0.2-0.2l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1h0.2h0.2h0.2h0.3h0.4h0.5h0.4l0.4,0.1l0.4,0.1l0.4,0.1
|
2012 |
+
l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.3,0.2l0.3,0.3l0.3,0.3l0.3,0.3l0.3,0.3l0.3,0.3
|
2013 |
+
l0.2,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.4l0.1,0.3l0.1,0.3l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4
|
2014 |
+
l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4v0.4v0.4v0.4v0.4v0.4v0.4v0.4v0.4v0.4v0.4v0.4v0.4v0.4v0.4v0.4v0.4v0.4v0.4v0.4l-0.1,0.4
|
2015 |
+
l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4
|
2016 |
+
l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.2,0.4l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3
|
2017 |
+
l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.3,0.3l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.1
|
2018 |
+
l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.4,0.1h-0.4h-0.4h-0.4l-0.4-0.1l-0.4-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.2l-0.3-0.2l-0.3-0.2
|
2019 |
+
l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.3
|
2020 |
+
l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.1-0.5l-0.1-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.6
|
2021 |
+
l-0.1-0.6l-0.1-0.6v-0.6v-0.6v-0.6v-0.6v-0.6v-0.6v-0.6v-0.6v-0.6v-1.1v-1.1v-1l0.1-0.9v-0.4v-0.4v-0.4v-0.4l0.1-0.4l0.1-0.3
|
2022 |
+
l0.1-0.3l0.1-0.3l0.1-0.4l0.1-0.2l0.1-0.2l0.1-0.1l0,0l0.1-0.1l0.1-0.1l0,0l0.1-0.1l0.1-0.1l0,0l0,0l-0.1-0.2v-0.2v-0.2v-0.2
|
2023 |
+
v-0.2v-0.2v-0.2v-0.2v-0.2v-0.2v-0.2v-0.2l0.1-0.2L-181.5,1393.6z M-176.3,1397.1v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2v0.2
|
2024 |
+
l-0.1,0.2l-0.1,0.2l-0.1,0.1l-0.1,0.1l-0.1,0.1l0,0v0.1v0.3v0.3v0.3v0.4l-0.1,0.8v0.9v0.9v1v0.5v0.5v0.5v0.5v0.5v0.6v0.5v0.5v0.5
|
2025 |
+
v0.5v0.5l0.1,0.5l0.1,0.5l0.1,0.5l0.1,0.5l0.1,0.5l0.1,0.5l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.3l0.1,0.2l0,0l0.1-0.1l0.1-0.2
|
2026 |
+
l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3
|
2027 |
+
l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3v-0.3v-0.3v-0.4v-0.3v-0.3v-0.3v-0.3
|
2028 |
+
v-0.3v-0.3v-0.3v-0.3v-0.3v-0.3v-0.3v-0.3v-0.3v-0.3v-0.3v-0.3v-0.3v-0.3v-0.3v-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.2
|
2029 |
+
l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.1v-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.2-0.1
|
2030 |
+
l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1h-0.2h-0.2L-176.3,1397.1L-176.3,1397.1L-176.3,1397.1z M-180.9,1400.2
|
2031 |
+
l0.2,0.1l-0.1-0.1H-180.9L-180.9,1400.2l-0.2-0.2L-180.9,1400.2z"
|
2032 |
+
/>
|
2033 |
+
</g>
|
2034 |
+
<g transform="matrix(0.380231,0.924892,-0.924892,0.380231,1549.4,-185.872)">
|
2035 |
+
<path
|
2036 |
+
d="M-240.4,1219l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.3-0.3l0.3-0.3l0.3-0.3
|
2037 |
+
l0.3-0.3l0.3-0.3l0.3-0.2l0.3-0.2l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1
|
2038 |
+
l0.3-0.1l0.3-0.1h0.3h0.3h0.3h0.3h0.3h0.3h0.3h0.4h0.3h0.1h0.1h0.1l0.2,0.1l0.2,0.1h0.1l0.1,0.1l0.1,0.1l0.2,0.1l0.1,0.1l0.1,0.1
|
2039 |
+
l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.2l0.1,0.2l0,0l0.1,0.1l0.1,0.2l0,0l0.1,0.2l0.1,0.2l0,0l0.1,0.2l0.1,0.2l0,0v0.2v0.2l0,0v0.2v0.2
|
2040 |
+
v0.1v0.2v0.2v0.1v0.1v0.1v0.2l-0.1,0.3l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.1
|
2041 |
+
l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1h-0.2h-0.2h-0.3h-0.2h-0.2l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l0,0l0,0h-0.2h-0.2
|
2042 |
+
h-0.2h-0.2l-0.1,0.1h-0.1h-0.1h-0.1h-0.1h-0.1l0,0l0,0h-0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.2l-0.1,0.2
|
2043 |
+
l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2v0.2v0.2v0.2v0.2l0,0v0.1l0,0v0.1v0.1l0,0
|
2044 |
+
l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.1l0.2,0.1l0.4,0.3l0.4,0.3l0.5,0.3
|
2045 |
+
l0.5,0.3l0.5,0.3l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.2
|
2046 |
+
l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l1.3,0.2l1.3,0.2l1.3,0.2l1.3,0.2l2.7,0.3l1.3,0.2l1.3,0.2
|
2047 |
+
l1.3,0.2l1.3,0.2l1.3,0.2l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.2l0.6,0.2l0.6,0.2l0.7,0.2
|
2048 |
+
l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1h0.5h0.5h0.4h0.4h0.4h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2
|
2049 |
+
h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0v-0.1v-0.1v-0.1v-0.1l0,0v-0.1l0,0l0,0l0,0
|
2050 |
+
v-0.1l0,0v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
|
2051 |
+
l-0.1-0.1l-0.1-0.1l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2
|
2052 |
+
l-0.3-0.2l-0.3-0.1l-0.3-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-1-0.3l-1-0.3
|
2053 |
+
l-1-0.3l-1-0.3l-1-0.3l-1-0.3l-1-0.3l-2.1-0.5l-2.1-0.5l-1.1-0.3l-1.1-0.3l-1.1-0.3l-1.1-0.3l-1.1-0.3l-1.1-0.3l-1.1-0.3
|
2054 |
+
l-1.1-0.3l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.5-0.2
|
2055 |
+
l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.5-0.3l-0.2-0.1l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.1-0.2
|
2056 |
+
l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2v-0.2v-0.2v-0.3v-0.2v-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.2-0.2l0.2-0.2
|
2057 |
+
l0.2-0.2l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1h0.2h0.2h0.3h0.2l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.4,0.3
|
2058 |
+
l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.5,0.2l0.5,0.2l0.5,0.2
|
2059 |
+
l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l1,0.3l1,0.3l1,0.3l1,0.3l1,0.3l1,0.3l1,0.3l1,0.3l2.1,0.5l2.1,0.5l1.1,0.3l1.1,0.3l1.1,0.3
|
2060 |
+
l1.1,0.3l1.1,0.3l1.1,0.3l1.1,0.3l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.3,0.1l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2
|
2061 |
+
l0.4,0.2l0.4,0.2l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.4l0.4,0.4l0.4,0.4l0.4,0.4l0.2,0.2l0.2,0.2l0.2,0.2
|
2062 |
+
l0.2,0.2l0.2,0.2l0.1,0.2l0.1,0.2l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3v0.3v0.3v0.3
|
2063 |
+
v0.3v0.3v0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3
|
2064 |
+
l-0.3,0.3l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1
|
2065 |
+
l-0.3,0.1l-0.3,0.1l-0.3,0.1h-0.3h-0.3h-0.3h-0.3h-0.3h-0.3h-0.3h-0.6h-0.6h-0.6h-0.6l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1
|
2066 |
+
l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.4-0.1l-0.8-0.2l-0.7-0.2l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1
|
2067 |
+
l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-1.2-0.2l-1.2-0.2l-1.3-0.2l-1.3-0.2l-1.3-0.2l-2.7-0.3l-1.4-0.2l-1.4-0.2
|
2068 |
+
l-1.4-0.2l-1.4-0.2l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2
|
2069 |
+
l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.6-0.2l-0.6-0.3l-0.6-0.3l-0.6-0.3l-0.6-0.3l-0.6-0.3l-0.6-0.3l-0.6-0.3
|
2070 |
+
l-0.6-0.4l-0.6-0.4l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2
|
2071 |
+
l-0.3-0.3l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.1-0.3l-0.1-0.2l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3
|
2072 |
+
l-0.1-0.3v-0.2v-0.3v-0.2v-0.2v-0.2v-0.2v-0.3v-0.4l0.1-0.5l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.2-0.4L-240.4,1219z
|
2073 |
+
M-233.2,1215.7L-233.2,1215.7L-233.2,1215.7L-233.2,1215.7z"
|
2074 |
+
/>
|
2075 |
+
</g>
|
2076 |
+
<path
|
2077 |
+
d="M402.7,260L402.7,260h0.2h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1
|
2078 |
+
l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1v0.1l0.1,0.1l0.1,0.1l0.1,0.1v0.1
|
2079 |
+
l0.1,0.1v0.1v0.1l0.1,0.1v0.1v0.1v0.1v0.1v0.1l-0.1,0.1v0.1v0.1l-0.1,0.1v0.1l-0.1,0.1l-0.1,0.1v0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
|
2080 |
+
l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
|
2081 |
+
l-0.1,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1L403,266l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2
|
2082 |
+
l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.1,0.2l-0.2,0.2l-0.1,0.2
|
2083 |
+
l-0.2,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2v0.1l-0.1,0.2l-0.1,0.3l-0.1,0.3l-0.2,0.7l-0.2,0.7l-0.2,0.7l-0.1,0.5
|
2084 |
+
l-0.1,0.3l0,0v0.1v0.1l-0.1,0.1v0.1l-0.1,0.1l-0.1,0.1v0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
|
2085 |
+
l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1h-0.1h-0.1h-0.1h-0.1h-0.1
|
2086 |
+
h-0.1h-0.1h-0.1H394h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1H393h-0.1h-0.1h-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
|
2087 |
+
l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
|
2088 |
+
l-0.1-0.1l-0.1-0.1l0,0v-0.1l-0.1-0.1v-0.1l-0.1-0.1v-0.1l-0.1-0.1V275v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1l0.1-0.3l0.1-0.5l0.1-0.6
|
2089 |
+
l0.2-0.7l0.2-0.8l0.2-0.8l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.3l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3
|
2090 |
+
l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.3-0.3l0.2-0.3l0.3-0.3l0.2-0.3l0.3-0.3l0.3-0.3l0.3-0.3l0.2-0.3l0.3-0.3l0.3-0.2l0.3-0.2
|
2091 |
+
l0.3-0.2l0.3-0.2l0.4-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.1l0.1-0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1
|
2092 |
+
h1.5V260z"
|
2093 |
+
/>
|
2094 |
+
<path
|
2095 |
+
d="M413.3,271L413.3,271h0.2h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1
|
2096 |
+
l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1v0.1l0.1,0.1l0.1,0.1
|
2097 |
+
v0.1v0.1l0.1,0.1v0.1v0.1v0.1v0.1v0.1v0.1v0.1l-0.1,0.1v0.1v0.1l-0.1,0.1l-0.1,0.1v0.1l-0.1,0.1L416,275l-0.1,0.1l-0.1,0.1
|
2098 |
+
l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1L415,276l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
|
2099 |
+
l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.5,0.3l-0.5,0.3l-0.5,0.4l-0.5,0.4l-0.2,0.2l-0.3,0.2l-0.3,0.2l-0.2,0.2l-0.3,0.2
|
2100 |
+
l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.1,0.2l-0.1,0.1v0.1l0,0v0.1l0.1,0.2
|
2101 |
+
l0.1,0.4l0.1,0.4l0.1,0.4l0.2,0.5l0.1,0.5l0.1,0.3l0.1,0.3l0.1,0.3v0.2v0.1v0.1v0.1v0.1v0.1l-0.1,0.1v0.1v0.1v0.1l-0.1,0.1v0.1
|
2102 |
+
l0,0l-0.1,0.1v0.1l-0.1,0.1l0,0l-0.1,0.1l-0.1,0.1l-0.1,0.1v0.1h-0.1v0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l0,0l-0.1,0.1l-0.1,0.1
|
2103 |
+
l-0.1,0.1l-0.1,0.1l-0.1,0.1h-0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1H407l-0.1,0.1l-0.1,0.1h-0.1h-0.1h-0.1l0,0h-0.1
|
2104 |
+
h-0.1h-0.1h-0.1H406h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1l0,0h-0.1H405h-0.1h-0.2l-0.3-0.1h-0.2h-0.1H404h-0.1h-0.1h-0.1
|
2105 |
+
l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
|
2106 |
+
l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1v-0.1l-0.1-0.1l-0.1-0.1v-0.1l-0.1-0.1v-0.1l-0.1-0.1V286v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1
|
2107 |
+
v-0.1l0.1-0.1v-0.1l0.1-0.1v-0.1l0.1-0.1l0.1-0.1l0,0l-0.1-0.1l-0.1-0.5l-0.2-0.5l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.4
|
2108 |
+
v-0.4v-0.4l0.1-0.4v-0.3l0.1-0.2l0.1-0.3l0.1-0.3l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.3l0.2-0.3l0.3-0.3l0.2-0.3l0.3-0.3l0.2-0.3
|
2109 |
+
l0.3-0.3l0.3-0.3l0.4-0.3l0.3-0.3l0.3-0.3l0.4-0.3l0.3-0.3l0.4-0.3l0.3-0.3l0.4-0.3l0.3-0.3l0.7-0.5l0.7-0.4l0.7-0.4l0.6-0.4
|
2110 |
+
l0.3-0.2l0.3-0.2l0.2-0.2l0.2-0.1l0.1-0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h1.2V271z M406.4,283.1L406.4,283.1
|
2111 |
+
L406.4,283.1L406.4,283.1z"
|
2112 |
+
/>
|
2113 |
+
<path
|
2114 |
+
d="M393,250.3L393,250.3h0.2h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1
|
2115 |
+
l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1v0.1l0.1,0.1l0.1,0.1l0.1,0.1v0.1l0.1,0.1
|
2116 |
+
l0.1,0.1v0.1v0.1l0.1,0.1v0.1v0.1v0.1v0.1v0.1v0.1v0.1l-0.1,0.1v0.1l-0.1,0.1v0.1l-0.1,0.1v0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
|
2117 |
+
l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1L395,255l-0.1,0.1l-0.1,0.1l-0.2,0.2l-0.3,0.2l-0.2,0.2l-0.3,0.2l-0.2,0.2l-0.3,0.2
|
2118 |
+
l-0.3,0.2l-0.2,0.2l-0.3,0.2l-0.2,0.2l-0.5,0.3l-0.5,0.3l-0.5,0.2l-0.5,0.2l-0.4,0.2l-0.4,0.2l-0.2,0.1l-0.2,0.1l-0.2,0.1
|
2119 |
+
l-0.2,0.1l-0.1,0.1l-0.2,0.1l-0.1,0.1l-0.1,0.1l-0.2,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
|
2120 |
+
l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.4l-0.1,0.4l-0.2,0.9l-0.1,0.5l-0.1,0.3l-0.1,0.3l-0.1,0.3
|
2121 |
+
l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.2,0.3l-0.2,0.3L385,266l-0.2,0.2l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
|
2122 |
+
L384,267l-0.1,0.1l-0.1,0.1l-0.1,0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1H383h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1H382h-0.1
|
2123 |
+
h-0.1h-0.1h-0.1h-0.1h-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
|
2124 |
+
l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1v-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1v-0.1l-0.1-0.1v-0.1v-0.1l-0.1-0.1v-0.1
|
2125 |
+
v-0.1v-0.1v-0.1v-0.1v-0.1V264l0.1-0.1v-0.1l0.1-0.1v-0.1l0.1-0.1v-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1
|
2126 |
+
l0.1-0.1l0.1-0.1l0,0h0.1v-0.1l0.1-0.1v-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.4l0.2-0.9l0.1-0.5l0.2-0.5l0.1-0.3l0.1-0.3l0.1-0.3
|
2127 |
+
l0.2-0.3l0.1-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.3-0.3l0.2-0.3l0.3-0.3l0.3-0.2l0.2-0.2l0.3-0.2l0.3-0.2l0.2-0.2
|
2128 |
+
l0.3-0.2l0.2-0.2l0.3-0.2l0.2-0.2l0.5-0.3l0.5-0.3l0.5-0.2l0.5-0.2l0.4-0.2l0.4-0.2l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.1-0.1
|
2129 |
+
l0.2-0.1l0.1-0.1l0.2-0.1l0.1-0.1l0.1-0.2l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1h0.1l0.1-0.1h0.1h0.1h0.1h0.1
|
2130 |
+
h0.1h0.1h0.1h0.1h0.1h0.1h0.1L393,250.3z"
|
2131 |
+
/>
|
2132 |
+
<path
|
2133 |
+
d="M400,91h0.2h0.1h0.2h0.1h0.2h0.1l0.2,0.1l0.1,0.1l0.1,0.1l0.2,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1
|
2134 |
+
l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1v0.1L403,93l0,0v0.1l0.1,0.1v0.1v0.1v0.1l0,0v0.1
|
2135 |
+
l-0.1,0.1v0.1v0.1l-0.1,0.1v0.1l-0.1,0.1v0.1l-0.1,0.2l-0.1,0.3l-0.1,0.3l-0.3,0.5l-0.2,0.5l-0.4,0.6l-0.7,1.2l-0.7,1.2l-0.4,0.6
|
2136 |
+
l-0.2,0.5l-0.2,0.4l-0.1,0.2l-0.1,0.1l-0.3,0.8l-0.4,0.8l-0.3,0.8l-0.2,0.4l-0.1,0.4l-0.2,0.4l-0.2,0.4l-0.1,0.4l-0.1,0.4
|
2137 |
+
l-0.2,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.1,0.4
|
2138 |
+
l-0.1,0.4v0.4l-0.1,0.4l-0.1,0.4v0.4v0.4v0.4v0.2l-0.1,0.2v0.2v0.2l-0.1,0.2l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
|
2139 |
+
l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.2,0.1l-0.1,0.1l-0.2,0.1h-0.1
|
2140 |
+
h-0.2H393h-0.2h-0.2h-0.1h-0.2h-0.2H392h-0.2h-0.2h-0.1h-0.2l-0.1-0.1l-0.1-0.1l-0.2-0.1l-0.1-0.1l-0.1-0.1l-0.2-0.1l-0.1-0.1
|
2141 |
+
l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.2v-0.2l-0.1-0.2V114v-0.2
|
2142 |
+
v-0.2v-0.5v-0.5l0.1-0.5v-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.5
|
2143 |
+
l0.2-0.5l0.1-0.5l0.2-0.5l0.1-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.1-0.5l0.2-0.5l0.2-0.5l0.4-0.9l0.4-0.9l0.4-0.9l0.1-0.3l0.2-0.3
|
2144 |
+
l0.2-0.6l0.4-0.6l0.4-0.6l0.7-1.2l0.7-1.2l0.2-0.3l0,0v-0.2v-0.2l0.1-0.2V92l0.1-0.2l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1
|
2145 |
+
l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.2-0.2l0.2-0.2l0.1-0.1l0.1-0.1l0.1-0.1h0.1l0.1-0.1l0.2-0.1l0.1-0.1l0.1-0.1h0.1h0.1
|
2146 |
+
h0.1h0.2h0.1h0.1h0.2l0,0h0.1h0.2V91z"
|
2147 |
+
/>
|
2148 |
+
<path
|
2149 |
+
d="M408.1,107.3h0.2h0.1h0.1h0.1h0.1h0.1h0.1h0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1
|
2150 |
+
l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1v0.1l0.1,0.1
|
2151 |
+
v0.1v0.1l0,0v0.1v0.1v0.1v0.1v0.1v0.1v0.1l-0.1,0.1v0.3l-0.1,0.4l-0.1,0.4l-0.1,0.4l-0.2,0.4l-0.3,0.9l-0.4,1l-0.4,1.1l-0.5,1.2
|
2152 |
+
l-0.5,1.2l-0.5,1.2l-0.5,1.2l-0.5,1.2l-0.5,1.1l-0.4,1l-0.4,0.8l-0.3,0.7l-0.2,0.4l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
|
2153 |
+
l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1h-0.1h-0.1h-0.1
|
2154 |
+
h-0.1h-0.2h-0.1h-0.1h-0.1h-0.3h-0.1H402h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
|
2155 |
+
l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
|
2156 |
+
l-0.1-0.1l-0.1-0.1v-0.1l-0.1-0.1v-0.1v-0.1l-0.1-0.1v-0.1v-0.1v-0.1v-0.1l0.1-0.1v-0.1V124l0.1-0.1l0.1-0.1v-0.1l0.1-0.1l0.1-0.1
|
2157 |
+
l0.2-0.4l0.3-0.6l0.4-0.8l0.4-0.9l0.4-1.1l0.5-1.1l0.5-1.2l0.5-1.2l0.5-1.2l0.5-1.2l0.4-1.1l0.4-1l0.3-0.8l0.1-0.3l0.1-0.3
|
2158 |
+
l0.1-0.2V110v-0.1v-0.1l0.1-0.1l0.1-0.1v-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1
|
2159 |
+
l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1h0.1h0.1h0.1h0.1h0.1h0.2h0.1h0.1h0.1h-0.2V107.3z
|
2160 |
+
M405,110.4v0.2V110.4L405,110.4L405,110.4L405,110.4z"
|
2161 |
+
/>
|
2162 |
+
<path
|
2163 |
+
fill="#25B3FF"
|
2164 |
+
d="M483.4,329.1L483.4,329.1h0.3h0.1h0.1h0.1h0.2h0.1l0.1,0.1l0.2,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1
|
2165 |
+
l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1v0.1h0.1l1.4-0.3l0.8-0.2l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.6-0.1h0.4
|
2166 |
+
h0.4h0.2h0.3h0.2h0.1h0.2h0.1h0.1h0.1h0.1h0.1h0.1h0.2l0.1,0.1l0.1,0.1l0,0l0.2,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0,0
|
2167 |
+
l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.2v0.1l0.1,0.1v0.1l0.1,0.2v0.2v0.1v0.2l-0.1,0.2
|
2168 |
+
v0.1v0.2l-0.1,0.1l0,0l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1h-0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
|
2169 |
+
l-0.1,0.1l0,0L494,334l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.2,0.1l-0.2,0.1l-0.4,0.2l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1
|
2170 |
+
l-0.4,0.1l-0.9,0.2l-0.8,0.2l-0.9,0.2l-0.2,0.1h-0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l0,0l-0.2,0.1l-0.1,0.1h-0.1h-0.1h-0.1
|
2171 |
+
h-0.2h-0.1h-0.1H486l-1.4,0.1l-0.5,0.1l-0.5,0.1h-0.1l0,0l-0.2,0.1l-0.1,0.1l-0.1,0.1l-0.2,0.1h-0.2h-0.1h-0.2h-0.1h-0.2h-0.2
|
2172 |
+
h-0.1h-0.2h-0.2h-0.1h-0.1l-0.7,0.4l-0.8,0.4l-0.8,0.4l-0.5,0.2l-0.4,0.2l-0.4,0.2l-0.5,0.2l-0.4,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2
|
2173 |
+
l-0.5,0.2l-0.4,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1h-0.2h-0.2h-0.3h-0.2h0.4H472h-0.3h-0.3l-0.3-0.1l-0.2-0.1h-0.1l-0.1-0.1h-0.1
|
2174 |
+
l-0.1-0.1l-0.2-0.1h-0.1l-0.1-0.1l-0.2-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
|
2175 |
+
l0,0l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1h-0.1v-0.1l-0.1-0.1l-0.1-0.1v-0.1l-0.1-0.2v-0.2l0,0v-0.1v-0.1v-0.1
|
2176 |
+
l0.1-0.1v-0.1l0.1-0.1V337v-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0,0l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1V336l0.1-0.1l0.1-0.1
|
2177 |
+
l0.1-0.1l0.1-0.1l0.2-0.2l0.2-0.2l0.2-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.2-0.1l0,0l0.2-0.1l0.2-0.1l0.2-0.1
|
2178 |
+
l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.1l0.5-0.1l0.4-0.1l0.5-0.1l0.4-0.1l0.4-0.1l0.5-0.1l0.9-0.2l0.4-0.1
|
2179 |
+
l0.1-0.1v-0.2l0.1-0.1l0.1-0.2l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1
|
2180 |
+
l0.2-0.1h0.1l0.1-0.1l0.1-0.1l0.1-0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.2h0.1h0.1L483.4,329.1L483.4,329.1z"
|
2181 |
+
/>
|
2182 |
+
<path
|
2183 |
+
fill="#25B3FF"
|
2184 |
+
d="M489.4,325L489.4,325h0.2h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1
|
2185 |
+
l0.1,0.1l0.1,0.1l0.1,0.1h0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.2,0.2l0.2,0.2l0.1,0.1v0.1l0.1,0.1l0.1,0.3l0.1,0.3
|
2186 |
+
l0.1,0.1v0.1l0.1,0.1l0.1,0.3l0.1,0.4l0.1,0.4v0.4v0.4v0.4l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3
|
2187 |
+
l-0.1,0.3l-0.2,0.3l-0.1,0.3l-0.2,0.2l-0.2,0.2l-0.1,0.2l-0.2,0.2l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.4
|
2188 |
+
l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.3L486,339l-0.4,0.3l-0.3,0.2l-0.3,0.2l-0.2,0.2l0,0l-0.3,0.4
|
2189 |
+
l-0.4,0.5l-0.4,0.5l-0.5,0.7l-0.7,0.8l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
|
2190 |
+
l-0.1,0.1l-0.1,0.1l-0.1,0.1h-0.1h-0.1H481h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1h-0.2h-0.1h-0.1h-0.1h-0.1h-0.1h-0.1
|
2191 |
+
l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l0,0h-0.1L478,343l-0.3-0.1l-0.1-0.1h-0.1
|
2192 |
+
h-0.1h-0.1h-0.1h-0.1H477h-0.1h-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.2-0.2L476,342l-0.2-0.2l-0.1-0.2l-0.1-0.2v-0.1
|
2193 |
+
l-0.1-0.1l-0.1-0.1l0,0l-0.1-0.1v-0.1l-0.1-0.1v-0.1v-0.1l-0.1-0.1v-0.1l-0.1-0.1v-0.1v-0.1V340v-0.1v-0.1v-0.1v-0.1v-0.1v-0.2
|
2194 |
+
V339l0.1-0.3l0.1-0.3l0.1-0.4l0.2-0.4l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.3-0.3l0.2-0.3
|
2195 |
+
l0.3-0.3l0.5-0.6l0.3-0.3l-0.1-0.3l-0.1-0.2l-0.1-0.1l-0.1-0.1v-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1v-0.1l-0.1-0.1v-0.1l-0.1-0.1v-0.1
|
2196 |
+
v-0.1l-0.1-0.1v-0.1v-0.1V331v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1l0.1-0.1l0,0v-0.1V330l0.1-0.1v-0.1l0.1-0.1v-0.1l0.1-0.1v-0.1
|
2197 |
+
h0.1l0.1-0.1v-0.1l0.1-0.1l0.1-0.1h0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.3-0.2l0.4-0.2l0.3-0.2l0.4-0.2
|
2198 |
+
l0.3-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.8-0.2l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.4-0.1
|
2199 |
+
l0.4-0.1l0.4-0.1l0.4-0.1h0.3h0.4h0.3L489.4,325L489.4,325z"
|
2200 |
+
/>
|
2201 |
+
</g>
|
2202 |
+
<path
|
2203 |
+
fill="#0096FF"
|
2204 |
+
d="M447.3,221.9h0.8h0.8h0.7h0.7h0.7h0.7l0.7,0.1l0.7,0.1l0.7,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.5,0.1l0.5,0.1
|
2205 |
+
l0.5,0.1l0.3,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.3,0.1l0.2,0.1l0.2,0.2l0.2,0.2l0.2,0.2l0.3,0.3l0.1,0.2l0.1,0.1
|
2206 |
+
l0.1,0.1l0.1,0.1l0.1,0.2l0.1,0.2l0.1,0.1l0.1,0.2l0.1,0.2l0.1,0.1l0.1,0.2v0.2l0.1,0.1v0.2l0.1,0.2v0.1v0.1v0.1v0.2v0.3l-0.1,0.2
|
2207 |
+
v0.3l-0.1,0.3l-0.1,0.1l0.2,0.1l0.2,0.1l0.2,0.2l0.3,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.3l0.2,0.3l0.2,0.3
|
2208 |
+
l0.1,0.2l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1v0.1l0.1,0.1l0.3,0.3l0.3,0.3l0.1,0.2l0.1,0.2l0.5,0.8l0.2,0.4
|
2209 |
+
l0.1,0.1l0.1,0.1l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.3,0.6l0.4,0.6l0.3,0.6l0.3,0.6l0.3,0.6l0.3,0.6l0.2,0.6l0.3,0.6l0.2,0.6
|
2210 |
+
l0.2,0.6l0.2,0.6l0.2,0.6l0.2,0.6l0.2,0.6l0.2,0.6l0.2,0.6l0.2,0.6l0.2,0.6l0.4,1.2l0.4,1.2l0.4,1.2l0.4,1.2l0.3,1.2l0.7,2.5
|
2211 |
+
l0.4,1.2l0.3,1.2l0.4,1.1l0.2,0.4l0.4,0.5l0.4,0.6l0.3,0.6l0.4,0.6l0.3,0.6l0.3,0.6l0.3,0.6l0.2,0.6l0.3,0.6l0.2,0.6l0.1,0.3
|
2212 |
+
l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3v0.3l0.1,0.3v0.3v0.3v0.3v0.3v0.3v0.3l-0.1,0.3
|
2213 |
+
l-0.1,0.3v0.2l0.1,0.6l0.2,1.1l0.1,0.5l0.1,0.5l0.1,0.5l0.1,0.5l0.1,0.5l0.1,0.5l0.1,0.5l0.1,0.5v0.5v0.4v0.3v0.2v0.2l-0.1,0.3
|
2214 |
+
l-0.1,0.3l-0.1,0.2v0.1l-0.1,0.1l-0.1,0.1l-0.1,0.2l-0.1,0.2v0.1l-0.1,0.2l-0.2,0.2l0,0l-0.2,0.2l-0.1,0.2l-0.2,0.1h-0.1l-0.1,0.1
|
2215 |
+
l-0.1,0.1h-0.1l-0.1,0.2l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.2,0.2l-0.2,0.2
|
2216 |
+
l-0.1,0.1l-0.1,0.1l-0.1,0.1h-0.1l-0.1,0.1l-0.2,0.1l0,0h-0.1h-0.2h-0.1h-0.1h-0.1h-0.1h-0.2h-0.1h-0.1H476h-0.1h-0.1h-0.2h-0.2
|
2217 |
+
h-0.1h-0.2l-0.2-0.1h-0.1l-0.2-0.1l-0.2-0.1h-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.2-0.1l-0.3-0.2l-0.2-0.2
|
2218 |
+
l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.3l-0.3-0.5l-0.3-0.5l-0.2-0.4h-0.1h-0.4H470h-0.4h-0.4h-0.4h-0.4
|
2219 |
+
l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1L466,280l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.2l-0.4-0.2l-0.3-0.2
|
2220 |
+
l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.3-0.2l-0.4-0.2l-0.4-0.2l-0.3-0.2l-0.4-0.2l-0.3-0.3l-0.4-0.3l-0.3-0.3
|
2221 |
+
l-0.4-0.3l-0.3-0.3l-0.3-0.3l-0.4-0.3l-0.3-0.3l-0.3-0.3l-0.6-0.6l-0.7-0.6l-0.5-0.6l-0.6-0.6l-0.6-0.7l-0.5-0.7l-0.5-0.7l-0.5-0.7
|
2222 |
+
l-0.5-0.7l-0.5-0.7l-0.5-0.7l-0.4-0.7l-0.5-0.7l-0.4-0.7l-0.4-0.7l-0.4-0.7l-0.4-0.7l-0.4-0.7l-0.4-0.7l-0.2-0.4l-0.1-0.4l-0.1-0.2
|
2223 |
+
l0,0h-0.1h-0.1l-0.5-0.1l-0.5-0.2l-0.5-0.2l-0.5-0.2l-0.4-0.2l-0.5-0.2l-0.4-0.2l-0.4-0.2l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.2
|
2224 |
+
l-0.2-0.2l-0.2-0.2l-0.5-0.4l-0.5-0.5l-0.7-0.6l-0.7-0.7l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.5l-0.4-0.5l-0.4-0.5
|
2225 |
+
l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5L433,249l-0.2-0.3l-0.1-0.3l-0.2-0.3l-0.1-0.3l-0.2-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3
|
2226 |
+
l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3v-0.3l0,0h-0.1l-0.4-0.4l-0.5-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4l-0.4-0.4
|
2227 |
+
l-0.3-0.4l-0.4-0.4l-0.1-0.2l-0.2-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.2-0.2l-0.1-0.2h-0.1l-0.1-0.1l-0.3-0.2l-0.2-0.3l-0.3-0.3
|
2228 |
+
l-0.3-0.3l-0.2-0.3l-0.1-0.2l-0.2-0.2l-0.1-0.2l-0.1-0.3l-0.1-0.3l-0.1-0.3v-0.2l-0.1-0.1v-0.1v-0.2l-0.1-0.2v-0.1l0.1-0.1v-0.1
|
2229 |
+
v-0.1v-0.1v-0.1l0.1-0.1v-0.1l0.1-0.2l0.1-0.2l0.1-0.1l0,0l-0.1-0.1l0,0l-0.5-0.1l-0.4-0.1l-0.3-0.1l-0.3-0.1l-0.4-0.1l-0.3-0.1
|
2230 |
+
l-0.4-0.1l-0.4-0.2l-0.3-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.1l-0.1-0.1l-0.1-0.1h-0.1l-0.1-0.1l-0.1-0.1h-0.1l-0.1-0.2l-0.1-0.2H420
|
2231 |
+
l-0.1-0.2l-0.1-0.2l0,0l-0.1-0.2l-0.1-0.3l0,0v-0.2v-0.2v-0.1v-0.1l0.1-0.1v-0.3l0.1-0.4l0.1-0.4l0.1-0.3l0.2-0.3l0.2-0.3l0.2-0.3
|
2232 |
+
l0.2-0.3l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.3-0.2l0.2-0.2l0.2-0.2l0.2-0.1l0.3-0.1l0.2-0.1l0.3-0.1l0.3-0.1l0.2-0.1
|
2233 |
+
l0.3-0.1l0.6-0.2l0.6-0.2l0.7-0.2l0.7-0.2l0.7-0.2l0.7-0.2l0.7-0.2l0.8-0.1l0.7-0.1l0.7-0.1l0.8-0.1l0.8-0.1l0.8-0.1l0.8-0.1
|
2234 |
+
l0.8-0.1l0.8-0.1l0.8-0.1l0.8-0.1l0.8-0.1l0.8-0.1l0.8-0.1h0.8h0.8h0.8h0.8h0.8h0.8h2.5V221.9z M463.1,271.3l-0.2,0.1l0,0l-0.2,0.1
|
2235 |
+
l-0.2,0.1h-0.1h-0.2H462h-0.2l0,0l0,0l0.3,0.2l0.2,0.2l0.3,0.2l0.2,0.2l0.3,0.2l0.2,0.2l0.3,0.2l0.2,0.2l0.3,0.2l0.2,0.2l0.2,0.2
|
2236 |
+
l0.2,0.1l0.3,0.1l0.2,0.1l0.1,0.1l-0.7-0.9l-0.7-1L463.1,271.3l-0.1-0.1l-0.2-0.1L463.1,271.3z"
|
2237 |
+
/>
|
2238 |
+
<path
|
2239 |
+
d="M438.7,215.5h0.6h0.6h0.5h0.6h0.5h0.6h0.5l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l1,0.1l0.9,0.2l0.9,0.2
|
2240 |
+
l0.8,0.2l0.8,0.2l0.7,0.2l0,0h0.1h0.2h0.2h0.2h0.3l0.6-0.1l0.7-0.1l0.7-0.1l0.7-0.1l0.8-0.1h0.4h0.4h0.4h0.4h0.4h0.4h0.4h0.4
|
2241 |
+
l0.4,0.1l0.4,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.3,0.1l0.2,0.1l0.3,0.2l0.2,0.2l0.2,0.2l0.5,0.5l0.5,0.5l0.4,0.5l0.5,0.5l0.4,0.5
|
2242 |
+
l0.5,0.5l0.4,0.5l0.5,0.5l0.4,0.5l0.4,0.5l0.4,0.5l0.5,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6
|
2243 |
+
l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.7l0.4,0.7l0.4,0.7l0.4,0.7l0.3,0.7l0.4,0.7l0.3,0.7l0.3,0.7l0.3,0.7l0.3,0.7l0.3,0.7
|
2244 |
+
l0.3,0.7l0.2,0.7l0.2,0.7l0.2,0.7l0.2,0.7l0.2,0.7l0.2,0.7l0.2,0.7l0.2,0.7l0.1,0.8l0.2,0.8l0.1,0.8l0.1,0.8l0.1,0.8l0.1,0.8
|
2245 |
+
l0.1,0.8l0.1,0.8l0.1,0.8l0.1,0.8v0.8v0.8v0.8l-0.1,0.8v0.8l-0.1,0.8l-0.1,0.8l-0.1,0.8l-0.1,0.8l-0.1,0.4l-0.1,0.4l-0.1,0.5
|
2246 |
+
l-0.1,0.5l-0.1,0.5l-0.1,0.5l-0.1,0.5l-0.1,0.5l-0.2,0.5l-0.1,0.5l-0.1,0.5l-0.2,0.5l-0.1,0.4l-0.2,0.4l-0.1,0.4l-0.2,0.4l-0.1,0.4
|
2247 |
+
l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.2,0.4l-0.2,0.3l-0.2,0.3l-0.2,0.3
|
2248 |
+
l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.3,0.3l-0.2,0.3l-0.2,0.3l-0.3,0.3l-0.2,0.3l-0.3,0.2l-0.2,0.2
|
2249 |
+
l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.4,0.2l-0.3,0.2l-0.3,0.1l-0.4,0.1l-0.3,0.1
|
2250 |
+
l-0.4,0.1l-0.4,0.1l-0.3,0.1l-0.4,0.1l-0.4,0.1l-0.3,0.1l-0.4,0.1l-0.4,0.1h-0.4h-0.4h-0.4h-0.3h-0.4h-0.4h-0.4h-0.4h-0.4h-0.4
|
2251 |
+
h-0.4l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.3-0.1l-0.4-0.1l-0.4-0.1
|
2252 |
+
l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.3-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.3-0.2l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.3-0.2
|
2253 |
+
l-0.4-0.3l-0.4-0.3l-0.4-0.3l-0.3-0.3l-0.4-0.3l-0.4-0.3l-0.3-0.3l-0.4-0.3l-0.4-0.3l-0.3-0.3l-0.4-0.3l-0.3-0.3l-0.4-0.3l-0.3-0.3
|
2254 |
+
l-0.4-0.4l-0.4-0.4l-0.3-0.4l-0.4-0.4l-0.3-0.4l-0.4-0.4l-0.3-0.4l-0.4-0.4l-0.3-0.4l-0.3-0.4l-0.4-0.4l-1-1.4l-1-1.3l-0.9-1.3
|
2255 |
+
l-0.9-1.3l-0.9-1.3l-0.9-1.3l-0.9-1.3l-0.4-0.6l-0.4-0.6l-0.4-0.6l-0.4-0.6l-0.4-0.6l-0.4-0.6l-0.4-0.6l-0.4-0.6l-0.4-0.6l-0.4-0.6
|
2256 |
+
l-0.4-0.6l-0.4-0.6l-0.3-0.6l-0.4-0.6l-0.3-0.6l-0.4-0.6l-0.3-0.6l-0.3-0.6l-0.3-0.6l-0.2-0.6l-0.3-0.6l-0.2-0.6l-0.2-0.7l-0.2-0.7
|
2257 |
+
l-0.2-0.7l-0.2-0.7l-0.2-0.7l-0.2-0.7l-0.2-0.7l-0.2-0.7l-0.1-0.7l-0.2-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7
|
2258 |
+
l-0.1-0.7l-0.1-0.7v-0.7v-0.7V231l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2
|
2259 |
+
l-0.1-0.2L419,229l-0.1-0.3l-0.1-0.3v-0.3v-0.3v-0.3l0.1-0.3v-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3
|
2260 |
+
l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.2-0.3l0.1-0.3l0.2-0.3l0.1-0.3l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2
|
2261 |
+
l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.1l0.2-0.1l0.3-0.1l0.2-0.1l0.3-0.1l0.5-0.2
|
2262 |
+
l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.6-0.2l0.5-0.1l0.5-0.1l0.6-0.1l0.6-0.1l0.5-0.1l0.6-0.1l0.6-0.1h0.6h0.5h0.6h0.6h0.6h0.6h3.2
|
2263 |
+
V215.5z M437.6,221.4h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5l-0.4,0.1l-0.5,0.1l-0.4,0.1l-0.5,0.1l-0.4,0.1L432,222l-0.4,0.1l-0.4,0.1
|
2264 |
+
l-0.4,0.1l-0.4,0.1l-0.3,0.1l-0.4,0.1l-0.1,0.1l-0.2,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.2,0.1l0,0l0.1,0.2l0.1,0.2
|
2265 |
+
l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.3l0.1,0.3v0.3l-0.1,0.3l-0.1,0.7l-0.1,0.6l-0.1,0.6v0.6l-0.1,0.6v0.6v0.6v0.6v0.6v0.6l0.1,0.6v0.6
|
2266 |
+
l0.1,0.6l0.1,0.6l0.1,0.6l0.1,0.6l0.1,0.6l0.1,0.6l0.1,0.6l0.1,0.6l0.2,0.6l0.1,0.6l0.2,0.6l0.2,0.6l0.2,0.6l0.2,0.6l0.2,0.6
|
2267 |
+
l0.2,0.6l0.2,0.6l0.2,0.6l0.2,0.6l0.2,0.6l0.3,0.6l0.2,0.6l0.3,0.6l0.3,0.6l0.3,0.6l0.3,0.6l0.4,0.6l0.3,0.6l0.4,0.6l0.3,0.6
|
2268 |
+
l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.4,0.6l0.8,1.2l0.9,1.2l0.9,1.3l0.9,1.3l0.9,1.3l0.9,1.3l1,1.3l0.3,0.4
|
2269 |
+
l0.3,0.4l0.3,0.4l0.3,0.4l0.2,0.3l0.3,0.3l0.3,0.3l0.3,0.3l0.3,0.3l0.3,0.3l0.2,0.3l0.3,0.3l0.3,0.3l0.3,0.3l0.3,0.3l0.2,0.3
|
2270 |
+
l0.3,0.3l0.3,0.3l0.2,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.2,0.2l0.3,0.2l0.2,0.2l0.3,0.2l0.3,0.2l0.2,0.2l0.2,0.2l0.3,0.2l0.3,0.2
|
2271 |
+
l0.2,0.2l0.2,0.2l0.3,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.3,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1
|
2272 |
+
l0.2,0.1l0.2,0.1h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2l0.2-0.1l0.2-0.1l0.2-0.1
|
2273 |
+
l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.2
|
2274 |
+
l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.1-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.1-0.2l0.2-0.2l0.2-0.2l0.2-0.3l0.1-0.3
|
2275 |
+
l0.2-0.3l0.2-0.3l0.1-0.3l0.2-0.3l0.1-0.3l0.2-0.3l0.1-0.3l0.2-0.3l0.1-0.3l0.2-0.3l0.1-0.3l0.1-0.3l0.1-0.4l0.2-0.4l0.1-0.4
|
2276 |
+
l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.4l0.1-0.5l0.1-0.3l0.1-0.3l0.1-0.7
|
2277 |
+
l0.1-0.6l0.1-0.6l0.1-0.7l0.1-0.7v-0.6v-0.7v-0.7v-0.7l-0.1-0.7V252l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7
|
2278 |
+
l-0.2-0.7l-0.1-0.7l-0.2-0.7l-0.1-0.6l-0.2-0.6l-0.2-0.6l-0.2-0.6l-0.2-0.6l-0.2-0.6l-0.2-0.6l-0.2-0.6l-0.2-0.6l-0.3-0.6l-0.2-0.6
|
2279 |
+
l-0.3-0.6l-0.3-0.6l-0.3-0.6l-0.3-0.6l-0.3-0.6l-0.3-0.6l-0.4-0.6l-0.3-0.6l-0.4-0.6l-0.4-0.6l-0.4-0.6l-0.4-0.6l-0.4-0.6l-0.4-0.5
|
2280 |
+
l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.4-0.4l-0.4-0.4
|
2281 |
+
l-0.4-0.4l-0.4-0.4l-0.4-0.4h-0.1h-0.2h-0.2h-0.3h-0.2h-0.3h-0.3l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1h-0.4h-0.4H450h-0.4
|
2282 |
+
h-0.4h-0.4h-0.4l-0.3-0.1l-0.8-0.2l-0.7-0.2l-0.8-0.2l-0.8-0.1l-0.8-0.1l-0.9-0.1l-0.4-0.1l-0.5-0.1l-0.5-0.1h-0.5h-0.5h-0.5h-0.5
|
2283 |
+
h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5h0.7V221.4z"
|
2284 |
+
/>
|
2285 |
+
<path
|
2286 |
+
fill="#0096FF"
|
2287 |
+
d="M481.7,317.6L481.7,317.6h0.3h0.2h0.1l0.2,0.1l0.2,0.1l0.3,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.4,0.2l0.4,0.2
|
2288 |
+
l0.4,0.2l0.7,0.4l0.2,0.2l0.2,0.1l0.2,0.1h0.1l0,0l0.2,0.1l0.7,0.2l0.9,0.3l1,0.3l0.6,0.2l0.6,0.2l0.7,0.2l0.7,0.2l0.7,0.3l0.7,0.3
|
2289 |
+
l0.7,0.3l0.3,0.2l0.4,0.2l0.3,0.2l0.4,0.2l0.3,0.2l0.4,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.2,0.3
|
2290 |
+
l0.3,0.3l0.2,0.3l0.2,0.3l0,0l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.4-0.1l0.5-0.1l0.5-0.1h0.5h0.5h0.4h0.5h0.5h0.5l0.5,0.1l0.4,0.1
|
2291 |
+
l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.4,0.1l0.5,0.1l0.5,0.1l0.9,0.2l0.9,0.2l0.4,0.1l0.2-0.1l0.7-0.2l0.7-0.2l0.7-0.2l0.7-0.1
|
2292 |
+
l0.7-0.1l0.7-0.1l0.6-0.1l0.6-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.8-0.1l0.7-0.1h0.5h0.3h0.2h0.3l0.3,0.1l0.2,0.1l0.2,0.1
|
2293 |
+
l0.2,0.1l0.2,0.2l0.2,0.2l0.2,0.2l0.1,0.1l0.2,0.1l0.2,0.2l0.2,0.2h0.1l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2h0.1l0.1,0.2l0.1,0.2h0.1
|
2294 |
+
l0.1,0.1l0.2,0.1l0.1,0.1l0.1,0.1l0.2,0.1l0,0l0.2,0.1l0.1,0.1l0,0l0.2,0.1l0.1,0.1l0,0l0.2,0.2l0.2,0.2l0,0l0.1,0.2l0.1,0.2
|
2295 |
+
l0.1,0.2l0,0l0.1,0.2v0.2l0.1,0.2l0,0v0.2l-0.1,0.2v0.2l0,0l-0.1,0.2l-0.1,0.2l-0.1,0.2l0,0l-0.1,0.2l-0.2,0.2l0,0l-0.1,0.2
|
2296 |
+
l-0.2,0.2l0,0l-0.1,0.1l-0.2,0.1l-0.1,0.1l-0.2,0.2l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1H523l-0.1,0.3
|
2297 |
+
l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.2,0.3l-0.1,0.3l-0.2,0.3l-0.1,0.3l-0.2,0.2l-0.2,0.3l-0.3,0.5l-0.4,0.5l-0.4,0.4l-0.4,0.4l-0.4,0.4
|
2298 |
+
l-0.4,0.4l-0.7,0.8l-0.2,0.2v0.1l-0.1,0.3l-0.1,0.3l-0.2,0.3l-0.1,0.3l-0.2,0.3l-0.1,0.3l-0.2,0.3l-0.1,0.3l-0.2,0.3l-0.2,0.3
|
2299 |
+
l-0.2,0.3l-0.2,0.3l-0.2,0.2l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.2,0.1l0,0l-0.1,0.1l-0.2,0.1h-0.1l-0.2,0.1l-0.2,0.1h-0.1
|
2300 |
+
l-0.2,0.1h-0.2h-0.2l0,0h-0.3h-0.2h-0.3h-0.1h-0.2l-0.2-0.1l-0.2-0.1l-0.2-0.1h-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.2l0,0
|
2301 |
+
l-0.2-0.2l-0.1-0.2l-0.2-0.2l0,0l-0.1-0.2l-0.1-0.2l0,0l-0.1-0.2l-0.1-0.2l0,0v-0.1v-0.1l-0.1-0.2v-0.3v-0.2l0.1-0.3v-0.2l0.1-0.3
|
2302 |
+
l0.1-0.3l0.1-0.1l-0.4,0.5l-0.4,0.5l-0.3,0.4l-0.2,0.4l-0.2,0.3l-0.2,0.3l-0.1,0.2l0,0l-0.1,0.1v0.1v0.1l-0.1,0.1l0,0l0.1,0.1
|
2303 |
+
l0.2,0.2l0.2,0.2l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.1,0.4l0.2,0.4l0.1,0.4l0.1,0.4l0.1,0.4v0.4l-0.1,0.4l0.5,0.2
|
2304 |
+
l0.8,0.3l0.8,0.3l0.8,0.3l0.2,0.1h0.2l1.3,0.2l0.7,0.1l0.7,0.1l0.7,0.1l0.6,0.1l0.7,0.1l0.6,0.2l0.5,0.2l0.4,0.1l0.5-0.1l0.4-0.1
|
2305 |
+
l0.4-0.1h0.4h0.4h0.4h0.4h0.4h0.4h0.4h0.4h0.4h0.5l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1
|
2306 |
+
l0.5,0.1l0.5,0.1l0.5,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.3,0.1l0.4,0.2l0.2,0.1l0.2,0.1h0.1l0.2,0.2l0,0
|
2307 |
+
l0.2,0.1l0.1,0.1h0.1l0.1,0.2l0.2,0.2l0.1,0.2l0,0l0.1,0.2l0.1,0.3l0.1,0.3l0.1,0.3l0,0v0.2v0.2v0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2
|
2308 |
+
l0,0l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.2,0.2l-0.2,0.2l0,0l-0.2,0.2l-0.2,0.2l-0.2,0.1l0,0l-0.2,0.1l-0.2,0.1H535h-0.2h-0.1h-0.2h-0.1
|
2309 |
+
h-0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.4,0.1l-0.2,0.1h-0.3h-0.3l-0.5,0.1h-0.6h-0.5h-0.6l-1.2,0.1h-0.5h-0.5h-0.4h-0.3h-0.2h-0.4
|
2310 |
+
l-0.7,0.1l-0.8,0.1l-0.8,0.1l-0.9,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5h-0.5l-0.5-0.1h-0.3h-0.1
|
2311 |
+
l-0.9,0.4l-1,0.4l-1.1,0.4l-1.1,0.4l-1.1,0.4l-0.7,0.2l-0.6,0.2l-0.6,0.2l-0.7,0.2l-0.7,0.2l-0.6,0.2l-0.7,0.2l-0.7,0.2l-0.7,0.2
|
2312 |
+
l-0.7,0.2l-0.6,0.2l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.6,0.1h-0.7h-0.7h-0.6h-0.3h-0.3h-0.4h-0.3h-0.3H496
|
2313 |
+
h-0.3h-0.3l-0.3-0.1l-0.4-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.2-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.2l-0.2-0.2
|
2314 |
+
l-0.3-0.2l-0.2-0.2l-0.3-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.3l0,0h-0.2l-0.4,0.1l-0.4,0.1l-0.4,0.1
|
2315 |
+
l-0.5,0.1h-0.4H487h-0.4h-0.4h-0.4h-0.5h-0.8h-0.9h-0.8H482h-0.8h-0.9h-0.8l-0.8-0.1l-1.5-0.1l-1.5-0.1l-1.4-0.1h-0.7H473h-0.6
|
2316 |
+
h-0.5h-0.2h-0.2h-0.6h-0.7l-0.8,0.1l-0.8,0.1l-0.8,0.1H467h-0.4h-0.4h-0.4h-0.4H465h-0.4h-0.4l-0.4-0.1l-0.4-0.1l-0.3-0.1l-0.2-0.1
|
2317 |
+
l-0.3-0.1l-0.3-0.1l-0.1-0.1l-0.2-0.1l-0.1-0.1h-0.1l-0.2-0.1l-0.1-0.1h-0.1l-0.1-0.2l-0.2-0.2H461l-0.1-0.2l-0.1-0.2v-0.1
|
2318 |
+
l-0.1-0.2l-0.1-0.2l-0.1-0.2v-0.1l-0.1-0.2v-0.2v-0.2v-0.1v-0.3v-0.3v-0.1l0.1-0.2l0.1-0.2V356l0.1-0.2l0.1-0.2v-0.1l0.1-0.1
|
2319 |
+
l0.1-0.1v-0.1l0.2-0.2l0.1-0.2l0.2-0.2l0.2-0.2l0.2-0.1l0.2-0.2l0.2-0.1l0.2-0.2l0.2-0.1l0.2-0.1l0.2-0.1l0.4-0.1l0.4-0.1l0.4-0.1
|
2320 |
+
l0.5-0.1l0.4-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.6-0.1l1.1-0.2l0.6-0.1l0,0l0.1-0.2l0.1-0.2l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.4
|
2321 |
+
l0.3-0.4l0.2-0.4l0.3-0.4l0.3-0.4l0.4-0.4l0.3-0.3l0.3-0.4l0.3-0.3l0.4-0.3l0.3-0.3l0.3-0.3l0.4-0.3l0.3-0.3l0.3-0.3l0.3-0.3
|
2322 |
+
l0.3-0.2l0.3-0.2l0.4-0.3l0.4-0.3l0.4-0.3l0.5-0.3l0.6-0.3l0.5-0.4l0.7-0.4l0.7-0.4l0.7-0.4l0.4-0.2l0,0l-0.3-0.1l-0.3-0.1
|
2323 |
+
l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.2-0.2l-0.3-0.2l-0.3-0.2
|
2324 |
+
l-0.2-0.2l-0.3-0.2l-0.2-0.2l-0.3-0.2l-0.2-0.2l-0.3-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.1-0.1h-3.7
|
2325 |
+
h-0.3h-0.2l-0.3-0.1l-0.3-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.1-0.2l-0.2-0.2l-0.1-0.3l-0.1-0.3
|
2326 |
+
l-0.1-0.3v-0.3v-0.3v-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.1l0.3-0.1l0.2-0.1
|
2327 |
+
l0.3-0.1h0.2h0.3h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2l0.2-0.1l0.3-0.1l0.2-0.1l0.2-0.1l0.3-0.1l0.2-0.1l0.6-0.2l0.5-0.2l0.6-0.2
|
2328 |
+
l0.6-0.2l0.3-0.1l-0.1-0.2v-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.2-0.3l0.1-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.1l0.2-0.1
|
2329 |
+
l0.2-0.1l0.3-0.1h0.3h0.3h0.2h0.1h0.4h0.4l0.5-0.1l0.5-0.1l0.5-0.1h0.2l0.1-0.1l0.3-0.3l0.2-0.3l0.3-0.3l0.3-0.3l0.3-0.2l0.3-0.2
|
2330 |
+
l0.3-0.2l0.3-0.2l0.2-0.2l-0.4-0.1l-0.5-0.1l-0.3-0.1l-0.2-0.1l-0.3-0.1l-0.3-0.1l-0.2-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.2l-0.3-0.2
|
2331 |
+
l-0.3-0.2l-0.2-0.2l-0.2-0.2l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.2l-0.1-0.2l-0.1-0.1l-0.1-0.2
|
2332 |
+
l-0.1-0.2l-0.1-0.1l-0.1-0.2v-0.2l-0.1-0.1v-0.2v-0.2l-0.1-0.1v-0.2v-0.2l0.1-0.1v-0.2v-0.2l0.1-0.2l0.1-0.2v-0.1l0.1-0.1l0,0
|
2333 |
+
l0.1-0.2l0.1-0.2l0,0l0.1-0.2l0.1-0.2l0,0l0.1-0.1l0.2-0.1l0,0l0.2-0.2l0.2-0.1l0,0l0.2-0.1l0.2-0.1h0.1l0.2-0.1l0.2-0.1l0,0
|
2334 |
+
l0.2-0.1l0.2-0.1l0,0h0.2h0.2h0.1h0.3L481.7,317.6z M492.7,346.7l-1.1,0.8l-1.1,0.8l-1.1,0.8l-1.2,0.8l-1.1,0.8l-0.8,0.6l0.4-0.1
|
2335 |
+
l0.6-0.2l0.7-0.2l0.5-0.2l0.2-0.1l0.2-0.2l0.7-0.4l0.6-0.4l0.6-0.4l0.6-0.4l0.6-0.4l0.9-0.7l0,0v-0.1v-0.1v-0.1v-0.1v-0.1V347v-0.1
|
2336 |
+
v-0.1l-0.1-0.1v-0.1L492.7,346.7L492.7,346.7L492.7,346.7L492.7,346.7z M491.1,334.8v0.3l0.1,0.3v0.3l0,0h0.2l0.3,0.1l0.2,0.1
|
2337 |
+
l0.2,0.1l0.1-0.2l0.1-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.1-0.1h-0.2h-0.4h-0.5h-0.4h-0.4H491L491.1,334.8z"
|
2338 |
+
/>
|
2339 |
+
<path
|
2340 |
+
d="M521.4,320.1h0.5h0.5l0.4,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.4,0.1l0.4,0.2l0.2,0.1l0.2,0.1l0.2,0.1
|
2341 |
+
l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.1,0.2l0.2,0.4l0.2,0.4
|
2342 |
+
l0.1,0.4l0.2,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4l0.1,0.4v0.4v0.4v0.4v0.3l-0.1,0.4l-0.1,0.3l-0.1,0.3
|
2343 |
+
l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.2,0.3l-0.2,0.3l-0.1,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3
|
2344 |
+
l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.4,0.4l-0.5,0.4l-0.5,0.4l-0.5,0.4l-0.5,0.3l-0.5,0.3l-0.5,0.3
|
2345 |
+
l-0.5,0.3l-0.5,0.3l-0.5,0.3l-0.9,0.6l-0.9,0.6l-0.8,0.5l-0.4,0.3l-0.4,0.3l-0.4,0.2l-0.4,0.2l-0.3,0.2l-0.4,0.2l-0.2,0.2l-0.2,0.2
|
2346 |
+
l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1v0.1l-0.1,0.1l-0.1,0.1l0,0l0,0h-0.1l0,0l0,0l0,0l0,0l0,0l0,0l0,0
|
2347 |
+
l0,0v0.1v0.1l0,0l0.1,0.1v0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1h0.2h0.3h0.3h0.4l0.8,0.1
|
2348 |
+
l0.9,0.1l1.1,0.1l2.4,0.1l1.2,0.1l1.4,0.1l1.3,0.1l1.4,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1
|
2349 |
+
l0.7,0.1l0.7,0.1l0.6,0.1l0.7,0.1l0.6,0.2l0.7,0.2l0.6,0.2l0.5,0.2l0.3,0.1l0.3,0.1l0.3,0.1l0.2,0.1l0.3,0.1l0.2,0.1l0.3,0.1
|
2350 |
+
l0.2,0.1l0.3,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.3,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3
|
2351 |
+
l0.1,0.3l0.1,0.3l0.1,0.4l0.1,0.4l0.1,0.4v0.4v0.4l-0.1,0.4l-0.1,0.4l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.2,0.3
|
2352 |
+
l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.3,0.4l-0.3,0.4l-0.3,0.4l-0.4,0.4l-0.3,0.4l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.3
|
2353 |
+
l-0.4,0.3l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1
|
2354 |
+
l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1h-0.4h-0.4H530h-0.4h-0.8H528h-0.8h-0.8h-0.8h-1.5h-1.5h-0.7h-0.7h-0.7h-0.7h-0.7
|
2355 |
+
h-0.3h-0.4l-2.6,0.2l-2.7,0.2l-2.7,0.2l-2.7,0.2l-2.7,0.2l-2.7,0.2l-2.7,0.2l-2.7,0.2l-2.7,0.2l-2.7,0.1l-1.4,0.1l-1.4,0.1
|
2356 |
+
l-1.3,0.1H486h-1.4h-1.3h-1.4h-1.4h-1.4h-1.3h-1.4H475h-0.3h-0.4h-0.4h-0.4l-1.1,0.1l-1.2,0.1l-1.3,0.1l-1.4,0.1l-0.7,0.1h-0.7
|
2357 |
+
h-0.8h-0.7h-0.8H464h-0.7h-0.8h-0.7h-0.7h-0.4h-0.4h-0.4h-0.4h-0.4l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.3-0.1l-0.4-0.1l-0.4-0.1
|
2358 |
+
l-0.3-0.1l-0.4-0.1l-0.3-0.1l-0.4-0.2l-0.3-0.2l-0.4-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.3l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.3l-0.2-0.3
|
2359 |
+
l-0.1-0.3l-0.2-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3v-0.3l-0.1-0.3v-0.3l0.1-0.3v-0.3l0.1-0.3l0.1-0.3
|
2360 |
+
l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.2-0.2l0.1-0.2l0.1-0.2l0.2-0.2l0.1-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.3-0.4
|
2361 |
+
l0.4-0.4l0.4-0.4l0.4-0.4l0.4-0.4l0.4-0.4l0.5-0.4l0.4-0.4l0.5-0.4l0.5-0.3l0.5-0.3l0.4-0.3l0.5-0.3l0.5-0.3l0.5-0.3l0.5-0.3
|
2362 |
+
l0.5-0.3l1-0.6l1-0.6l0.9-0.6l1-0.6l0.9-0.5l1.8-1l0.8-0.5l0.7-0.4l0.3-0.2l0.3-0.2l0.3-0.2l0.2-0.2l0.2-0.1l0.2-0.1l0.1-0.1l0,0
|
2363 |
+
h0.1l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0h-0.1l0,0l0,0h-0.1l0,0h-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
|
2364 |
+
l-0.1-0.1l-0.1-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.3-0.2l-0.2-0.2l-0.3-0.2l-0.3-0.2l-0.4-0.2l-0.3-0.1l-0.4-0.1l-0.4-0.1
|
2365 |
+
l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.8-0.3l-0.8-0.3l-1.6-0.5l-0.8-0.2l-0.7-0.2l-0.7-0.2l-0.4-0.1l-0.4-0.1l-0.3-0.1l-0.4-0.1
|
2366 |
+
l-0.3-0.1l-0.3-0.2l-0.4-0.2l-0.3-0.2L457,339l-0.3-0.3l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.1l-0.1-0.2v-0.1
|
2367 |
+
l-0.1-0.2l-0.1-0.2v-0.1l-0.1-0.2l-0.1-0.2v-0.1v-0.2v-0.2v-0.1v-0.2v-0.2v-0.1l0.1-0.2v-0.2l0.1-0.1v-0.2l0.1-0.2l0.1-0.1l0.1-0.1
|
2368 |
+
l0.1-0.1l0.1-0.1l0.1-0.2l0.1-0.1l0.2-0.2l0.1-0.1l0.2-0.2l0.4-0.4l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3
|
2369 |
+
l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.2l0.4-0.2l0.4-0.2l0.5-0.2l0.4-0.2l0.4-0.2l0.4-0.2
|
2370 |
+
l0.5-0.2l0.4-0.2l0.5-0.2l0.4-0.2l0.5-0.2l0.4-0.2l0.5-0.2l0.4-0.2l0.5-0.2h0.1L470,325l-0.3-0.3l-0.2-0.3l-0.3-0.3l-0.1-0.2
|
2371 |
+
l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2v-0.2l-0.1-0.3v-0.3v-0.3v-0.2V321l0.1-0.2l0.1-0.2l0.1-0.2
|
2372 |
+
l0.1-0.3l0.1-0.3l0.1-0.2l0.1-0.3l0.2-0.4l0.2-0.3l0.3-0.3l0.2-0.3l0.2-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2
|
2373 |
+
l0.3-0.2l0.3-0.2l0.3-0.1l0.4-0.1l0.3-0.1l0.4-0.1l0.6-0.3l0.7-0.2l0.7-0.2l0.7-0.2l0.7-0.2l0.7-0.2l0.7-0.2l0.7-0.2l1.2-0.3
|
2374 |
+
l1.1-0.3l0.4-0.1l0.4-0.1h0.5h0.4h0.4h0.4h0.4l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.3,0.1l0.4,0.2l0.4,0.2
|
2375 |
+
l0.3,0.2l0.4,0.2l0.3,0.2l0.3,0.2l0.4,0.2l0.6,0.4l0.6,0.4l0.7,0.4l0.6,0.4l0.6,0.4l0.5,0.4l0.6,0.4l1.1,0.8l0.5,0.4l0.5,0.4
|
2376 |
+
l0.5,0.4l0.5,0.3l0.5,0.3l0.5,0.3l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.1,0.1l0.2,0.1h0.1h0.1h0.1l0,0h0.1
|
2377 |
+
h0.1h0.2h0.2h0.2h0.3h0.2h0.3l0.7-0.1l0.8-0.1l0.8-0.1l0.8-0.1l0.9-0.1l2-0.3l1-0.2l1-0.1l1.1-0.1l1.1-0.1l1.1-0.1l1.1-0.1l1-0.1
|
2378 |
+
h0.5h0.5h0.5h0.5h0.5h0.5h0.5h0.5L521.4,320.1z M485.3,319L485.3,319L485.3,319h-0.2l-1.1,0.3l-1.2,0.3l-0.6,0.2l-0.6,0.2l-0.6,0.2
|
2379 |
+
l-0.6,0.2l-0.6,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1h-0.1h0.1l0.2,0.2l0.3,0.2l0.4,0.2
|
2380 |
+
l0.4,0.2l0.3,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.3l0.1,0.3l0.1,0.3l0.1,0.3h0.1l0.3,0.1l0.3,0.1l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2
|
2381 |
+
l0.2,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3v0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.2,0.2l-0.2,0.2l-0.2,0.2
|
2382 |
+
l-0.2,0.2l-0.3,0.2l-0.2,0.1l-0.3,0.1H480h-0.1l-0.3,0.1l-0.7,0.1l-1.9,0.3l-1.1,0.2l-0.9,0.2l-0.4,0.1l-0.4,0.1H474h-0.1l-0.4,0.1
|
2383 |
+
l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2
|
2384 |
+
l-0.4,0.2l-0.3,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.3,0.2l-0.4,0.2l-0.2,0.1l0.5,0.1l1.6,0.5l0.8,0.3l0.9,0.3l0.4,0.2l0.5,0.2
|
2385 |
+
l0.4,0.2l0.4,0.2l0.5,0.2l0.4,0.2l0.5,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3l0.2,0.2
|
2386 |
+
l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.1,0.2l0.2,0.2l0.1,0.2l0.2,0.2l0.1,0.2l0.1,0.2l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3
|
2387 |
+
l0.1,0.3l0.1,0.3v0.3l0.1,0.3v0.3v0.3v0.3l-0.1,0.3v0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.2
|
2388 |
+
l-0.2,0.2l-0.1,0.2l-0.2,0.2l-0.2,0.3l-0.3,0.3l-0.3,0.3l-0.3,0.2l-0.3,0.2l-0.4,0.2l-0.4,0.2l-0.3,0.2l-0.4,0.2l-0.4,0.2l-0.8,0.5
|
2389 |
+
l-0.8,0.5l-1.8,1l-0.9,0.5l-0.9,0.5l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.4,0.3l-0.5,0.3l-0.5,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.3
|
2390 |
+
l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.3,0.3l-0.3,0.3l-0.3,0.3l-0.3,0.3l-0.2,0.3l-0.2,0.2l-0.2,0.2l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
|
2391 |
+
l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1v0.1l-0.1,0.1v0.1l0,0l0,0h-0.1l0,0l0,0l0,0h0.1v0.1h0.1l0.1,0.1v0.1h0.1h0.1h0.1h0.1h0.1h0.1
|
2392 |
+
h0.2h0.1h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.3h0.2h0.6h0.7h0.6h0.7h0.7h0.7h0.7h0.7h0.7h0.7l1.4-0.1l1.3-0.1l1.2-0.1l1.1-0.1h0.5
|
2393 |
+
h0.5h0.5h0.5h1.3h1.4h1.3h1.3h1.3h1.4h1.3h1.4h1.3l1.3-0.1l1.4-0.1l1.3-0.1l2.6-0.1l2.7-0.2l2.7-0.2l2.7-0.2l2.6-0.2l2.7-0.2
|
2394 |
+
l2.7-0.2l2.6-0.2l2.7-0.2l2.7-0.2h0.4h0.4h0.8h0.8h0.8h0.8h0.8h1.5h1.5h0.7h0.7h0.7h0.7h0.7h0.4h0.3h0.3h0.4h0.3h0.3l0.3-0.1
|
2395 |
+
l0.3-0.1l0.3-0.1l0.2-0.1l0.3-0.1l0.3-0.1l0.2-0.1l0.2-0.1l0.3-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1l0.2-0.1
|
2396 |
+
l0.2-0.1l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.3l0.2-0.3l0.1-0.1l0.1-0.1l0.1-0.1
|
2397 |
+
l0.1-0.1l0.1-0.1v-0.1l0,0h-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.2-0.1l-0.1-0.1l-0.1-0.1l-0.2-0.1l-0.2-0.1
|
2398 |
+
l-0.2-0.1l-0.2-0.1l-0.4-0.1l-0.4-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.7-0.1
|
2399 |
+
l-0.6-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-1.3-0.1l-1.3-0.1l-1.2-0.1l-1.3-0.1l-2.4-0.1l-1.1-0.1l-1.1-0.1l-0.9-0.1h-0.5l-0.4-0.1
|
2400 |
+
l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.1-0.1l-0.2-0.1h-0.1l-0.2-0.1l-0.1-0.1l-0.1-0.1
|
2401 |
+
l-0.4-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.1-0.3l-0.2-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3
|
2402 |
+
L510,346l-0.1-0.3l-0.1-0.3l-0.1-0.3v-0.3v-0.3v-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.2-0.3l0.1-0.3
|
2403 |
+
l0.2-0.2l0.1-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.5-0.3
|
2404 |
+
l0.4-0.3l0.5-0.3l0.4-0.3l0.9-0.6l0.9-0.6l0.9-0.6l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.3-0.3l0.4-0.3
|
2405 |
+
l0.3-0.3l0.1-0.1l0.1-0.1l0.2-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1v-0.1
|
2406 |
+
l0.1-0.1l0.1-0.1l0.1-0.1v-0.1l0.1-0.1v-0.1l0.1-0.1V330v-0.1v-0.1v-0.1v-0.1v-0.1v-0.1v-0.2l-0.1-0.2v-0.2l-0.1-0.2l-0.1-0.2
|
2407 |
+
l-0.1-0.2L524,328l-0.1-0.2l-0.1-0.2l-0.1-0.2v-0.1h-0.1l0,0h-0.1l-0.2-0.1l-0.1-0.1L523,327h-0.2h-0.2h-0.3H522h-0.4h-0.3h-0.4
|
2408 |
+
h-0.4h-0.4h-0.4h-0.4h-0.4h-0.5H518h-0.5l-0.9,0.1l-1,0.1l-1,0.1l-1,0.1l-1,0.1l-1,0.1l-0.9,0.1l-2,0.3l-0.9,0.1l-0.9,0.1l-0.8,0.1
|
2409 |
+
l-0.8,0.1l-0.8,0.1h-0.4h-0.4h-0.4h-0.4h-0.4h-0.4h-0.4h-0.4l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.3-0.1l-0.4-0.1l-0.3-0.1
|
2410 |
+
l-0.3-0.1l-0.4-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.6-0.4l-0.5-0.4l-0.6-0.4l-0.6-0.4l-0.5-0.4l-0.6-0.4l-1.1-0.8
|
2411 |
+
l-0.5-0.4l-0.5-0.4l-0.6-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.3l-0.5-0.3l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1L487,320
|
2412 |
+
l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.1-0.1h-0.2h-0.2h-0.1h-0.1h-0.1h-0.1h-0.2V319z"
|
2413 |
+
/>
|
2414 |
+
<path
|
2415 |
+
fill="#25B3FF"
|
2416 |
+
d="M486.3,321.2h0.2h0.1h0.2h0.1h0.2h0.1l0.1,0.1l0.2,0.1l0.1,0.1h0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.3,0.2l0.2,0.2
|
2417 |
+
l0.1,0.1l0,0h0.1h0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.2,0.1l0.4,0.1h0.1
|
2418 |
+
l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.1,0.1l0.2,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2
|
2419 |
+
l0.1,0.2l0.1,0.2v0.2l0.1,0.1h0.2l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.5,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.2,0.1l0.3,0.1
|
2420 |
+
l0.2,0.1l0.3,0.1l0.3,0.1l0.2,0.2l0.3,0.2l0.1,0.1h0.2h0.3h0.3h0.3h0.3h0.3h0.3h0.3l0.3,0.1l0.4,0.1l0.3,0.1l0.3,0.1l0.4,0.1
|
2421 |
+
l0.3,0.2l0.4,0.2l0.3,0.2l0.4,0.2l0.3,0.3l0.3,0.3l0.2,0.3l0.2,0.4l0.2,0.4l0.2,0.4l0.1,0.4l0.1,0.4l0.1,0.3v0.2v0.2v0.2v0.3v0.3
|
2422 |
+
l-0.1,0.2l-0.1,0.2v0.1l-0.1,0.1l-0.1,0.1l-0.1,0.2l-0.1,0.2l-0.1,0.1l-0.1,0.2l-0.1,0.2l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
|
2423 |
+
l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.2,0.2l-0.3,0.2l-0.3,0.2l-0.2,0.1l-0.3,0.1l-0.3,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1
|
2424 |
+
l-0.5,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.5,0.1l-0.4,0.1h-0.4h-0.4H500l-0.9,0.1h-0.3l0.1,0.1l0.1,0.2l0.1,0.2l0,0l0.1,0.2l0.1,0.2
|
2425 |
+
v0.2l0.1,0.2v0.2v0.1v0.2l-0.1,0.2v0.2v0.2l-0.1,0.1v0.1l-0.1,0.1L499,341v0.1l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.2,0.3l-0.1,0.2
|
2426 |
+
l-0.2,0.2l-0.2,0.2l-0.3,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.8,0.6l-0.9,0.6l-0.9,0.6l-0.8,0.5
|
2427 |
+
l-0.8,0.5l-0.2,0.1h0.1l0.1,0.1l0.1,0.1l0.1,0.1l0,0l0.1,0.2l0.1,0.1l0.1,0.2l0,0l0.1,0.1v0.1l0.1,0.1l0,0v0.1l0.1,0.1v0.2l0,0
|
2428 |
+
l-0.1,0.2v0.2l0,0v0.2l-0.1,0.2l0,0l-0.1,0.1v0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
|
2429 |
+
l-0.1,0.2l-0.2,0.3l-0.2,0.3l-0.2,0.2l-0.2,0.2l-0.5,0.5l-0.5,0.5l-1.1,0.9l-0.5,0.4l-0.5,0.4l-0.5,0.4l-0.2,0.2l-0.2,0.2l-0.1,0.1
|
2430 |
+
l-0.2,0.1l-0.2,0.1l-0.1,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.2,0.1h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2l-0.2-0.1l-0.2-0.1
|
2431 |
+
l-0.2-0.1l-0.1-0.1l-0.2-0.1l-0.2-0.1l-0.1-0.1l-0.2-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2
|
2432 |
+
l-0.1-0.2l-0.1-0.2V354v-0.2v-0.2v-0.2v-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.1l0.2-0.1
|
2433 |
+
l0.2-0.3l0.3-0.3l0.5-0.5l0.1-0.1l-0.1-0.1L482,350l-0.1-0.1l0,0l-0.2-0.1l-0.1-0.1l0,0l-0.1-0.1l-0.1-0.1l-0.1-0.1l0,0l-0.1-0.1
|
2434 |
+
l-0.1-0.1l-0.1-0.1l0,0l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l0,0v-0.2l-0.1-0.2v-0.2l0,0V348v-0.2v-0.1l0,0v-0.2v-0.2l0.1-0.2l0,0
|
2435 |
+
l0.1-0.2l0.1-0.2l0.1-0.2v-0.1l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.1l0.2-0.1
|
2436 |
+
l0.4-0.2l0.4-0.2l0.4-0.2l0.7-0.4l0.7-0.3l0.2-0.1l0.2-0.1l0.5-0.3l0.5-0.3l0.6-0.4l0.3-0.2h-0.1H487h-0.4l-0.4-0.1l-0.4-0.1
|
2437 |
+
l-0.4-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.1-0.1l-0.1-0.1h-0.1l-0.2-0.1l-0.1-0.1h-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1h-0.1l-0.1-0.1
|
2438 |
+
l-0.1-0.1l-0.1-0.1l-0.1-0.2h-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.2l0,0v-0.1h-0.1h-0.1l-0.5,0.2l-0.5,0.2l-0.5,0.2
|
2439 |
+
l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1l-0.5,0.1h-0.2h-0.2h-0.3h-0.2h-0.3h-0.3l-0.3-0.1l-0.4-0.1l-0.2-0.1l-0.2-0.1
|
2440 |
+
l-0.1-0.1h-0.1l-0.2-0.1l-0.1-0.1h-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1L474,339l-0.1-0.1l-0.1-0.1
|
2441 |
+
l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1v-0.1l-0.1-0.2l-0.1-0.1l-0.8-0.2l-0.4-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1
|
2442 |
+
l-0.1-0.1l-0.2-0.1l-0.1-0.1h-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.2-0.1l-0.1-0.1l0,0l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.2l-0.1-0.2
|
2443 |
+
l-0.1-0.2l-0.1-0.2l-0.1-0.2l-0.1-0.2l0,0l-0.1-0.2l-0.1-0.2v-0.2v-0.2v-0.2v-0.2l0.1-0.2v-0.2l0.1-0.2l0.1-0.2l0.1-0.2l0,0
|
2444 |
+
l0.1-0.2l0.1-0.2l0.1-0.2l0.1-0.1l0.1-0.1l0.2-0.1l0.1-0.1l0.1-0.1l0.2-0.1l0.1-0.1l0.2-0.1h0.1l0.1-0.1l0.2-0.1l0.2-0.1h0.1h0.2
|
2445 |
+
h0.1h0.2h0.1h0.2h0.2h0.6h0.3h0.1l0.2-0.1l0.4-0.1l0.4-0.1l0.4-0.1l0.5-0.1l0.4-0.1h-0.1v-0.2L475,330l0,0v-0.2l-0.1-0.2v-0.2v-0.2
|
2446 |
+
V329l0.1-0.1v-0.1v-0.2l0.1-0.1v-0.1l0.1-0.2v-0.1l0.1-0.1l0.1-0.2l0.1-0.1l0.1-0.1l0.1-0.2l0.1-0.1l0.1-0.1l0.1-0.3l0.2-0.4
|
2447 |
+
l0.3-0.3l0.2-0.3l0.3-0.3l0.2-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.1l0.4-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1
|
2448 |
+
l0.4-0.1l0.3-0.1l0.3-0.1l0.3-0.1h0.2l0,0l0.1-0.2v-0.1l0.1-0.2v-0.2h0.1v-0.1l0.1-0.1l0.1-0.1l0,0l0.1-0.1l0.1-0.1l0.1-0.1
|
2449 |
+
l0.1-0.1h0.1l0.1-0.2l0.1-0.1l0.1-0.1l0.2-0.1l0,0l0.1-0.1l0.2-0.1l0.1-0.1l0.2-0.1l0.1-0.1h0.1l0.2-0.1l0.1-0.1h0.2h0.2h0.2l0,0
|
2450 |
+
h0.2h0.2L486.3,321.2z"
|
2451 |
+
/>
|
2452 |
+
<path
|
2453 |
+
fill="#25B3FF"
|
2454 |
+
d="M455.7,235.5L455.7,235.5h0.2h0.1h0.1h0.2l0,0h0.1h0.2l0.1,0.1l0,0l0.2,0.1l0.1,0.1l0.2,0.1l0,0l0.1,0.1
|
2455 |
+
l0.1,0.1l0.1,0.1l0.1,0.1l0,0l0.1,0.1l0.1,0.1l0.1,0.1l0,0l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0,0l0.1,0.1l0.1,0.1v0.1h0.1v0.1
|
2456 |
+
l0.1,0.1v0.1l0,0l0.1,0.2v0.2v0.2v0.2v0.2v0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.1h0.2h0.1h0.1h0.2h0.1h0.1h0.1h0.1h0.1h0.1l0.1,0.1
|
2457 |
+
l0.1,0.1l0.1,0.1h0.1l0.1,0.1l0.1,0.1l0.1,0.1l0,0l0.1,0.1l0.1,0.1l0.1,0.1h0.1l0.1,0.1l0.1,0.1l0.1,0.1l0,0l0.1,0.1l0.1,0.1
|
2458 |
+
l0.1,0.1l0,0l0.1,0.2l0.1,0.2l0,0l0.1,0.1l0.1,0.1v0.1l0.1,0.1v0.1l0.1,0.2v0.3v0.2v0.1v0.1v0.1v0.1l-0.1,0.2v0.2l-0.1,0.2
|
2459 |
+
l-0.1,0.4l-0.2,0.5l-0.2,0.5l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.2,0.6l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.2l0,0l0.1,0.1l0.1,0.2
|
2460 |
+
l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2v0.2v0.2l0.1,0.2v0.2l-0.1,0.2v0.2l-0.1,0.2v0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.1
|
2461 |
+
l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.2,0.1l-0.1,0.1l-0.2,0.1l-0.2,0.1l-0.1,0.1l-0.2,0.1h-0.2h-0.2H459
|
2462 |
+
h-0.2h-0.2h-0.2h-0.1h-0.1H458h-0.1h-0.1h-0.2h-0.1l-0.2-0.1h-0.1l-0.1-0.1l-0.2-0.1l-0.1-0.1h-0.1l-0.2-0.1l-0.1-0.1l-0.1-0.1
|
2463 |
+
h-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.2v-0.1l-0.1-0.1l-0.1-0.1
|
2464 |
+
l-0.1-0.1v-0.1l-0.1-0.1l-0.1-0.2l-0.1-0.3l-0.1-0.3V249v-0.3v-0.4l0.1-0.4v-0.4l0.1-0.1h-0.1l-0.6,0.3l-0.7,0.3l-0.7,0.3l-0.4,0.2
|
2465 |
+
l-0.4,0.2l-0.4,0.2l-0.4,0.2l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.4,0.1l-0.5,0.1l-0.5,0.1l-0.4,0.1l-0.5,0.1L447,250h-0.5H446h-0.5h-0.3
|
2466 |
+
H445h-0.2h-0.2h-0.3l-0.2-0.1l-0.3-0.1l-0.2-0.1l-0.2-0.1l-0.3-0.1l-0.2-0.1l-0.3-0.1l-0.2-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
|
2467 |
+
l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1h-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1h-0.1l-0.1-0.1L441,248l-0.1-0.1l0,0l-0.1-0.1l-0.1-0.1
|
2468 |
+
l-0.1-0.1l-0.1-0.1l0,0v-0.1h-0.1h-0.1h-0.2H440h-0.2h-0.1h-0.1h-0.1l-0.2-0.1l-0.2-0.1l-0.1-0.1h-0.1l-0.1-0.1l-0.2-0.1l-0.1-0.1
|
2469 |
+
l-0.1-0.1h-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1v-0.1
|
2470 |
+
l-0.1-0.1v-0.1l-0.1-0.1v-0.1l-0.1-0.1v-0.1v-0.1v-0.2v-0.1v-0.1l0,0l0.1-0.2V244l0.1-0.2l0,0l0.1-0.1v-0.1l0.1-0.1l0.1-0.1
|
2471 |
+
l0.1-0.1l0.1-0.1l0.1-0.2l0.1-0.2l0.2-0.2l0.2-0.3l0.3-0.3l0.3-0.2l0.2-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.6-0.4l0.7-0.4l0.7-0.4
|
2472 |
+
l0.5-0.3H442l-0.8,0.1h-0.4h-0.5h-0.4h-0.4h-0.4h-0.5h-0.4h-0.4h-0.4h-0.5l-0.4-0.1l-0.4-0.1l-0.5-0.1l-0.4-0.1l-0.2-0.1l-0.2-0.1
|
2473 |
+
l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.2l-0.1-0.1l-0.1-0.1l-0.1-0.1h-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l0,0l-0.1-0.1l-0.1-0.1
|
2474 |
+
l-0.1-0.1h-0.1l-0.1-0.2l-0.1-0.2l-0.1-0.2l0,0l-0.1-0.1v-0.1l-0.1-0.1l0,0l0,0l-0.4-0.1l-0.3-0.1l-0.2-0.1l-0.3-0.1l-0.2-0.1
|
2475 |
+
l-0.2-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1
|
2476 |
+
v-0.1l-0.1-0.2l-0.1-0.2L429,234l-0.1-0.2v-0.1v-0.2l-0.1-0.2v-0.2v-0.2v-0.1v-0.2v-0.2l0.1-0.2V232l0.1-0.1v-0.1l0.1-0.1l0.1-0.1
|
2477 |
+
v-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.2l0.3-0.3l0.2-0.2l0.2-0.2l0.3-0.2l0.2-0.2l0.2-0.2l0.3-0.1
|
2478 |
+
l0.2-0.1l0.3-0.1l0.2-0.1l0.3-0.1l0.2-0.1l0.3-0.1l0.3-0.1l0.2-0.1l0.5-0.1l0.6-0.1l0.5-0.1l0.5-0.1l0.6-0.1l0.6-0.1l0.5-0.1h0.6
|
2479 |
+
h0.5h0.6l1.1-0.1l2.1-0.1l0.9-0.1h0.4h0.4h0.3h0.3h0.2h0.2l0.8-0.2l0.8-0.2l0.8-0.2l0.8-0.2l0.1-0.1l0.2-0.1l0.2-0.1l0.5-0.2
|
2480 |
+
l0.4-0.2l0.4-0.2l0.4-0.2l0.4-0.2l0.5-0.1l0.2-0.1h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2h0.2l0.2,0.1l0.1,0.1l0.2,0.1l0.2,0.1
|
2481 |
+
l0.1,0.1l0.1,0.1l0.2,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2v0.2l0.1,0.2
|
2482 |
+
v0.2v0.2v0.2v0.2l-0.1,0.2v0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l-0.1,0.1l-0.1,0.1l0,0l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1
|
2483 |
+
l-0.1,0.1l-0.1,0.1l-0.2,0.1l-0.1,0.1l0,0l-0.2,0.1L454,231l-0.2,0.1l-0.4,0.2l-0.6,0.2l-0.7,0.3l-0.5,0.2l0,0l0.1,0.2v0.2v0.2v0.2
|
2484 |
+
v0.2l-0.1,0.2v0.2l-0.1,0.2l-0.1,0.2l-0.1,0.2l0,0l-0.1,0.1l0.2,0.1l0.2,0.1l0.1,0.1l0.1,0.1l0,0l0.1,0.1l0.1,0.1h0.1l0.1,0.1
|
2485 |
+
l0.1,0.1h0.1l0.1,0.1l0.1,0.1l0.1,0.1v0.1l0.1,0.1l0.1,0.1l0.1,0.1v0.1l0.1,0.2l0.1,0.2v0.1l0.1,0.1v0.1l0.1,0.1v0.1v0.1v0.1
|
2486 |
+
l0.2-0.1h0.1h0.2h0.1h0.1h0.1h0.1h0.1h0.1h0.2h0.1L455.7,235.5z M458.8,246.9L458.8,246.9h-0.2H458.8z"
|
2487 |
+
/>
|
2488 |
+
<g>
|
2489 |
+
<g transform="matrix(1,0,0,1,454.698,46.683)">
|
2490 |
+
<path
|
2491 |
+
d="M343.4,257.1h0.9h0.9h0.9h0.9h0.5h0.2l0.3-0.1l0.4-0.1h0.4h0.4h0.4h0.4h0.4h0.4h0.3h0.3h0.3h0.3h0.3h0.3h0.3
|
2492 |
+
l0.3,0.1l0.7,0.1l0.7,0.1l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.2l0.4,0.1l0.6,0.1l0.6,0.1h0.2h0.2h0.3h0.3l0.8,0.1
|
2493 |
+
l0.9,0.1l1,0.1l1.1,0.1l1.1,0.2l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.5,0.1l0.5,0.2l0.5,0.2
|
2494 |
+
l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.2l0.3,0.2l0.3,0.2l0.2,0.2l0.3,0.2l0.2,0.2l0.2,0.2l0.1,0.1l0.2,0.3
|
2495 |
+
l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.3v0.2v0.2v0.2v0.1v0.2v0.2l0,0v0.3v0.3l0,0v0.2l-0.1,0.2l-0.1,0.2l0,0l-0.1,0.2l-0.1,0.2
|
2496 |
+
l-0.1,0.2l0,0l-0.2,0.2l-0.2,0.2l-0.2,0.2l0,0l-0.2,0.1l-0.2,0.1l-0.2,0.1l0,0l-0.2,0.1l-0.2,0.1l0,0H374h-0.2l0,0h-0.3h-0.1
|
2497 |
+
h-0.2H373h-0.1l-0.3-0.1l-0.2-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.5-0.2l-0.5-0.2l-1.1-0.5l-0.5-0.2l-0.2-0.1l-0.2-0.1l-0.2-0.1
|
2498 |
+
l-0.2-0.1l-0.2-0.1h-0.1h-0.1h-0.1l0,0h-0.3h-0.4h-0.4h-0.3h-0.3h-0.3h-0.3H365l-0.3-0.1l-0.3-0.1l-0.7-0.1l-0.7-0.1l-0.6-0.2
|
2499 |
+
l-0.6-0.2l-0.6-0.2l-0.6-0.2l-0.6-0.2l-1.2-0.4l-0.5-0.2l-0.4-0.1l-0.6-0.1l-0.6-0.1l-0.6-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1
|
2500 |
+
l-0.7-0.1l-0.7-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1H349l-0.4,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1
|
2501 |
+
l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-1.4,0.1l-1.5,0.1l-1.5,0.1l-1.5,0.1l-1.5,0.1l-1.5,0.1h-1.5h-1.5h-1.5h-1.5h-2.4h-0.9l0,0
|
2502 |
+
l-0.8,0.2l-0.8,0.2l-0.8,0.2l-0.7,0.2l-0.7,0.2l-0.7,0.2l-0.7,0.3l-0.7,0.3l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1
|
2503 |
+
l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.2l-0.3,0.2l-0.3,0.1l-0.3,0.2l-0.3,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2
|
2504 |
+
l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.1h0.1l0.3,0.1l0.3,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.9,0.1l1,0.1l1,0.1
|
2505 |
+
l1,0.1l2,0.2l1,0.1l1,0.1l0.9,0.1l0.5,0.1l0.5,0.1l0.5,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1
|
2506 |
+
l0.4,0.2l0.4,0.2l0.2,0.1l0.3,0.2h0.1l0.1,0.1l0.1,0.1l0.4,0.2l0.4,0.2l0.5,0.2l0.5,0.3l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2
|
2507 |
+
l0.3,0.2l0.3,0.2l0.3,0.3l0.3,0.3l0.3,0.3l0.2,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.2l0.1,0.3l0.1,0.3
|
2508 |
+
l0.1,0.3v0.3v0.3v0.3v0.3v0.3v0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.2l-0.2,0.2
|
2509 |
+
l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.3,0.1l-0.3,0.1
|
2510 |
+
l-0.5,0.2l-0.5,0.2l-0.6,0.2l-0.6,0.2l-0.6,0.2l-0.6,0.2l-0.6,0.2l-0.6,0.2l-0.6,0.2l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1
|
2511 |
+
l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-1.4,0.2l-1.4,0.1l-1.4,0.1l-1.3,0.1L312,289l-1.2,0.1
|
2512 |
+
l-1.2,0.1l-1.1,0.1h-1l-1.8,0.1h-1.3h-0.5h-0.2h-0.1h-0.3H303h-0.3l-0.3-0.1l-0.3-0.1l-0.3-0.1l0,0l-0.3-0.2l-0.2-0.2l-0.2-0.2
|
2513 |
+
l-0.2-0.2l-0.2-0.2l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3v-0.3v-0.3V286l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0,0l0.2-0.2l0.2-0.2
|
2514 |
+
l0.2-0.2l0.2-0.2l0.2-0.2l0.3-0.1l0.3-0.1l0.3-0.1l0,0h0.2h0.2h0.2h0.4h0.5h1.3l1.7-0.1h1l1.1-0.1l1.1-0.1l1.2-0.1l1.2-0.1
|
2515 |
+
l1.3-0.1l1.3-0.1l1.3-0.1l1.3-0.1l0.7-0.1l0.7-0.1l0.7-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1
|
2516 |
+
l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.4-0.1l0.4-0.1l0.4-0.2l0.3-0.2l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0.1-0.1l0,0
|
2517 |
+
h-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.4-0.2l-0.4-0.2l-0.5-0.2l-0.5-0.2l-0.3-0.1l-0.3-0.1l-0.3-0.2l-0.2-0.1l0,0h-0.1h-0.1
|
2518 |
+
l-0.1-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.4-0.1l-0.4-0.1l-0.4-0.1h-0.4l-0.9-0.1l-0.9-0.1l-1-0.1
|
2519 |
+
l-2-0.2l-1-0.1l-1-0.1l-1-0.1l-1-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.4-0.1l-0.4-0.1
|
2520 |
+
l-0.4-0.1l-0.4-0.1l-0.4-0.2l-0.4-0.2l-0.4-0.2l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.2l-0.2-0.2l-0.2-0.2
|
2521 |
+
l-0.2-0.2l-0.2-0.2l-0.2-0.2l-0.2-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3l-0.1-0.3v-0.3v-0.3v-0.3v-0.3l0.1-0.3l0.1-0.3
|
2522 |
+
l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.2l0.1-0.2l0.1-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.3-0.3l0.3-0.3
|
2523 |
+
l0.3-0.3l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0,0l-1.4-0.1l-1.4-0.1l-1.3-0.1l-1.3-0.1l-1.2-0.2l-0.4-0.1h-0.5l-1.1-0.1
|
2524 |
+
l-1.2-0.1l-0.6-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.4-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1
|
2525 |
+
l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.2l-0.3-0.3
|
2526 |
+
l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.2-0.3l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.1-0.4l-0.1-0.4l-0.1-0.4l-0.1-0.4V255
|
2527 |
+
v-0.5V254v-0.5l0.1-0.5l0.1-0.5l0.1-0.5l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.3l0.1-0.2l0.2-0.2l0.2-0.2l0.2-0.2
|
2528 |
+
l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.2
|
2529 |
+
l0.4-0.2l0.4-0.2l0.4-0.2l0.8-0.4l0.8-0.4l1.4-0.7l0.6-0.3l0.5-0.3l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1
|
2530 |
+
l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1h0.3h0.3h0.3h0.3h0.3h0.6h0.6h0.6h0.5h0.5l0.5,0.1l0.5,0.1l0.5,0.1l0.5,0.1
|
2531 |
+
l0.5,0.1l0.5,0.1l1,0.2l0.9,0.2l0.9,0.2l0.9,0.2l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1
|
2532 |
+
l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1h0.7h0.7h0.8h0.8h0.8l1.5,0.1h1.5h1.5h1.5h1.5h3h2.9h1.1h1.1h1.1l1.1-0.1l1.1-0.1l1.1-0.1
|
2533 |
+
l1.1-0.1l1.1-0.1l1.1-0.1l1.1-0.2l1.1-0.2l1.1-0.2l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1l0.5-0.1h0.1h0.1
|
2534 |
+
l0.2-0.1l0.2-0.1l0.2-0.1l0.3-0.1l0.6-0.3l0.6-0.3l0.6-0.3l0.7-0.3l0.6-0.3l0.6-0.3l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1
|
2535 |
+
l0.4-0.1l0.3-0.1h0.3h0.2h0.2h0.2h0.1h0.2h0.2l0,0l0.3,0.1l0.3,0.1l0,0l0.2,0.1l0.2,0.1l0.2,0.2l0,0l0.2,0.2l0.2,0.2l0.2,0.2l0,0
|
2536 |
+
l0.1,0.2l0.1,0.2l0.1,0.3l0,0l0.1,0.2v0.2v0.2l0,0v0.3v0.3v0.1v0.2v0.2v0.1l-0.1,0.3l-0.1,0.2l-0.1,0.3l-0.1,0.2l-0.1,0.2
|
2537 |
+
l-0.2,0.3l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.3,0.2l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1h-0.3h-0.3h-0.3h-0.2l0,0l-0.6,0.3l-0.6,0.3
|
2538 |
+
l-0.7,0.3l-0.7,0.3l-0.7,0.3l-0.4,0.2l-0.4,0.2l-0.4,0.1L357,248l-0.4,0.1l-0.3,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1
|
2539 |
+
l-0.6,0.1l-0.6,0.1l-0.6,0.1l-0.6,0.1l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.2l-1.2,0.1l-1.2,0.1l-1.2,0.1l-1.2,0.1l-1.2,0.1h-1.2
|
2540 |
+
h-1.2h-1.2h-2.9h-3h-1.5h-1.6h-1.6h-1.6l-1.6-0.1h-0.8h-0.8h-0.8h-0.8l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1
|
2541 |
+
l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-1-0.2l-0.9-0.2l-0.9-0.2l-0.9-0.2l-0.4-0.1l-0.4-0.1
|
2542 |
+
l-0.4-0.1l-0.4-0.1l-0.4-0.1H304h-0.4h-0.4h-0.4h-0.4H302h-0.2h-0.2h-0.2h-0.2H301h-0.2h-0.2h-0.2h-0.2H300l-0.2,0.1l-0.2,0.1
|
2543 |
+
l-0.2,0.1l-0.2,0.1L299,248l-0.2,0.1l-0.2,0.1l-0.2,0.1l-0.6,0.3l-0.7,0.3l-1.4,0.6l-0.7,0.3l-0.7,0.4l-0.4,0.2l-0.3,0.2
|
2544 |
+
l-0.3,0.2L293,251l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.1,0.1l-0.1,0.1l-0.1,0.1
|
2545 |
+
l-0.1,0.1l-0.1,0.1l-0.1,0.1l-0.1,0.1v0.1v0.1v0.1l0,0l0,0l0,0l0,0l0,0l0,0v0.2v0.2v0.2v0.2v0.1v0.1v0.1v0.1v0.1v0.1v0.1v0.1v0.1
|
2546 |
+
v0.1v0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1
|
2547 |
+
l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1
|
2548 |
+
l0.6,0.1l1.1,0.1l1.1,0.1l0.5,0.1l0.5,0.1l1.2,0.1l1.2,0.1l1.3,0.1l1.3,0.1l1.3,0.1l1.4,0.1l1.4,0.1l1.4,0.1l1.4,0.1l1.4,0.1
|
2549 |
+
l1.4,0.1l1.5,0.1h1.5h1.4h0.1l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.2l0.9-0.1l0.9-0.1l0.9-0.1l0.9-0.1l0.9-0.1l0.9-0.1l1-0.1l0.9-0.1
|
2550 |
+
l1-0.1l1-0.1h0.9h0.9h0.9h0.9h0.9h0.9h0.9L343.4,257.1z M303.7,289.4L303.7,289.4L303.7,289.4L303.7,289.4z"
|
2551 |
+
/>
|
2552 |
+
</g>
|
2553 |
+
<g transform="matrix(1,0,0,1,381.866,45.2348)">
|
2554 |
+
<path
|
2555 |
+
d="M-30.6-41.7h1l1,0.1l1,0.1l1,0.1l1,0.1l1,0.1l1,0.1l1,0.2l1,0.2l1,0.2l1,0.2l1,0.2l1,0.3l1,0.3l0.5,0.2
|
2556 |
+
l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2l0.5,0.2
|
2557 |
+
l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.3l0.4,0.2l0.9,0.7l0.8,0.8l0.7,0.9l0.6,1l0.5,1l0.3,1.1l0.2,1.1l0.1,1.1
|
2558 |
+
l-0.1,1.1l-0.2,1.1L-2-23.3l-0.5,1l-0.6,0.9l-0.7,0.8l-0.8,0.8l-0.9,0.6l-1,0.5l-1,0.4L-8.6-18l-1.1,0.1h-1.1l-1.1-0.2l-1.1-0.3
|
2559 |
+
l-1-0.4l-1-0.6l-0.3-0.2l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.2-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1
|
2560 |
+
l-0.3-0.1l-0.3-0.1L-19-21l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.6-0.2l-0.6-0.2
|
2561 |
+
l-0.6-0.2l-0.6-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1h-0.7h-0.7h-0.7h-0.7h-0.7h-0.7h-0.7h-0.7
|
2562 |
+
h-0.7l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.1l-0.7,0.2l-0.7,0.2l-0.7,0.2l-0.7,0.2l-0.6,0.2l-0.6,0.2
|
2563 |
+
l-0.6,0.2l-0.6,0.2l-0.6,0.2l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1
|
2564 |
+
l-0.3,0.1l-0.3,0.2l-0.3,0.1l-0.3,0.2l-0.2,0.2l-0.2,0.2l-0.3,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2
|
2565 |
+
l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.7,0.7l-0.7,0.7l-1.4,1.4l-1.5,1.4
|
2566 |
+
l-1.5,1.4l-0.7,0.7l-0.7,0.7l-0.7,0.7l-0.7,0.7l-0.7,0.7l-0.7,0.7l-0.7,0.7l-0.7,0.7l-0.6,0.7l-0.3,0.3L-66.5-3l-0.3,0.4
|
2567 |
+
l-0.3,0.3L-67.4-2l-0.3,0.3L-68-1.4l-0.3,0.3l-0.3,0.3l-0.2,0.3L-69-0.2l-0.2,0.3l-0.2,0.3l-0.2,0.3L-69.8,1L-70,1.3l-0.2,0.3
|
2568 |
+
l-0.2,0.3l-0.2,0.3l-0.2,0.3L-71,2.8l-0.1,0.3l-0.1,0.3l-0.1,0.3L-71.4,4l-0.1,0.3l-0.1,0.3l-0.1,0.3l0,0.1v0.2v0.1v0.2v0.4v0.4
|
2569 |
+
l-0.1,0.5l-0.1,1.3l-0.2,3l-0.1,1.7l-0.1,0.9l-0.1,0.9l-0.1,0.9l-0.1,0.9l-0.1,0.9l-0.1,0.9l-0.1,0.9l-0.2,0.9l-0.2,0.9l-0.1,0.5
|
2570 |
+
l-0.1,0.4l-0.1,0.5l-0.1,0.5l-0.1,0.5l-0.2,0.5l-0.2,0.5l-0.2,0.5l-0.2,0.5l-0.3,0.5l-0.3,0.6l-0.4,0.6l-0.4,0.6l-0.7,0.4
|
2571 |
+
l-0.3,0.4l-0.6,0.6l-0.4,0.3l-0.5,0.4L-79,30l-0.5,0.3l-0.4,0.2l-1.9,0.9l-1.7,0.9l-1.7,0.9l-1.7,0.9l-1.7,0.9l-1.7,1l-1.7,1
|
2572 |
+
l-1.7,1l-1.7,1l-1.7,1l-1.7,1l-1.7,1l-1.7,1l-1.7,1.1l-1.7,1.1l-1.7,1.1l-1.7,1.1l-1.7,1.1l-1.7,1.1l-1.7,1.1l-1.7,1.1l-1.7,1.1
|
2573 |
+
l-1.7,1.1l-1.7,1.1l-1.7,1.2l-1.7,1.2l-3.4,2.3l-3.4,2.4l-3.4,2.4l-6.9,4.8l-3.5,2.4l-3.5,2.4l-3.5,2.4l-3.5,2.4l-1.8,1.2
|
2574 |
+
l-1.8,1.2l-1.8,1.2l-1.8,1.2l-1.8,1.2l-1.8,1.2l-1.8,1.2l-1.8,1.2l-1.8,1.1l-1.8,1.1l-1.8,1.1L-177,93l-1.8,1.1l-1.8,1.1
|
2575 |
+
l-1.8,1.1l-1.8,1.1l-1.8,1.1l-1.8,1.1l-1.9,1l-1.8,1l-4.2,2.4l-4.2,2.4l-4.2,2.4l-4.2,2.4l-4.2,2.4l-4.2,2.4l-2.1,1.2l-2.1,1.2
|
2576 |
+
l-2.1,1.2l-2.1,1.2l-2.1,1.2l-2.1,1.2l-2.1,1.2l-2.1,1.2l-2.1,1.2l-2.1,1.3l-2.1,1.3l-2.1,1.3l-2.1,1.3l-2.1,1.3l-2.1,1.3
|
2577 |
+
l-2.1,1.3l-2,1.3l-2,1.3l-2,1.3l-2,1.3l-2,1.3l-2,1.3l-2,1.3l-2,1.3l-2,1.3l-2,1.3l-2,1.3l-2,1.3l-2,1.3l-2,1.3l-2,1.4l-2,1.4
|
2578 |
+
l-2,1.4l-2,1.4l-2,1.4l-2,1.4l-2,1.4l-1.9,1.4l-1.9,1.4l-1.9,1.4l-1.9,1.4l-1.9,1.4l-1.9,1.4l-1.9,1.4l-1.9,1.4l-1.9,1.4
|
2579 |
+
l-1.9,1.4l-1.9,1.5l-1.9,1.5l-1.9,1.5l-1.9,1.5l-1.9,1.5l-1,0.8l-1,0.8l-1,0.8l-1,0.8l-1,0.7l-1,0.7l-1,0.7l-1,0.7l-1,0.7l-1,0.7
|
2580 |
+
l-1,0.7l-1,0.7l-2,1.3l-2,1.3l-4,2.6l-2,1.3l-1,0.6l-1,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.6l-0.9,0.7
|
2581 |
+
l-0.9,0.7l-0.5,0.4l-0.5,0.4l-0.5,0.4l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2v0.4l-0.1,1.1l-0.2,1.1l-0.3,1.1l-0.5,1l-0.6,0.9
|
2582 |
+
l-0.7,0.9l-0.8,0.8l-0.9,0.7l-1,0.5l-1,0.4l-1.1,0.3l-1.1,0.1h-1.1l-1.1-0.1l-1.1-0.3l-1-0.4l-1-0.5l-0.9-0.7l-0.8-0.8l-0.7-0.9
|
2583 |
+
l-0.3-0.4l-0.4-0.6l-0.3-0.6l-0.3-0.6l-0.3-0.7l-0.2-0.7l-0.2-0.7l-0.1-0.7l-0.1-0.7l-0.1-0.7v-0.7v-0.6l0.1-0.6l0.1-0.6l0.1-0.6
|
2584 |
+
l0.1-0.6l0.1-0.5l0.2-0.5l0.2-0.5l0.2-0.5l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.4l0.2-0.4l0.4-0.6l0.4-0.6l0.4-0.6l0.5-0.5
|
2585 |
+
l0.4-0.5l0.4-0.5l0.4-0.4l0.4-0.4l0.4-0.4l0.4-0.4l0.4-0.4l0.4-0.3l0.4-0.3l0.7-0.6l0.7-0.5l0.6-0.5l1-0.8l1-0.7l1-0.7l1-0.7
|
2586 |
+
l1-0.7l1-0.7l1-0.7l1-0.7l1-0.7l1-0.7l2-1.3l4-2.6l2-1.3l2-1.3l1-0.6l1-0.6l0.9-0.6l0.9-0.6l0.9-0.6l0.9-0.6l0.9-0.7l0.9-0.7
|
2587 |
+
l0.9-0.7l0.9-0.7l0.9-0.7l0.9-0.7l1.9-1.5l1.9-1.5l1.9-1.5l1.9-1.5l1.9-1.5l1.9-1.5l2-1.5l2-1.5l2-1.5l2-1.5l2-1.5l2-1.4l2-1.4
|
2588 |
+
l2-1.4l2-1.4l2-1.4l2-1.4l2-1.4l2-1.4l2-1.4l2-1.4l2-1.4l2-1.4l2-1.4l2-1.4l2-1.4l2-1.4l2.1-1.4l2.1-1.3l2.1-1.3l2.1-1.3l2.1-1.3
|
2589 |
+
l2.1-1.3l2.1-1.3l2.1-1.3l2.1-1.3l2.1-1.3l2.1-1.3l2.1-1.3l2.1-1.3l2.1-1.3l2.1-1.3l2.1-1.3l2.1-1.3l2.1-1.3l2.1-1.3l2.1-1.3
|
2590 |
+
l2.1-1.3l2.1-1.2l2.1-1.2l2.1-1.2l2.1-1.2l4.2-2.4l4.2-2.4l4.2-2.4l4.2-2.4l4.2-2.4l4.2-2.4l1.8-1l1.7-1l1.7-1l1.7-1l1.8-1l1.7-1
|
2591 |
+
l1.7-1.1l1.7-1.1l1.7-1.1l1.7-1.1l1.7-1.1l1.7-1.1l1.7-1.1l1.7-1.1l1.7-1.1l1.7-1.1l1.7-1.1l1.7-1.2l1.7-1.2l1.7-1.2l3.5-2.4
|
2592 |
+
l3.5-2.4l3.5-2.4l3.5-2.4l6.9-4.8l3.5-2.4l3.5-2.4l3.5-2.4l1.7-1.2l1.8-1.2l1.8-1.2l1.8-1.2l1.8-1.2l1.8-1.2l1.8-1.2l1.8-1.1
|
2593 |
+
l1.8-1.1l1.8-1.1l1.8-1.1l1.8-1.1l1.8-1.1l1.8-1.1l1.8-1.1l1.8-1.1l1.8-1.1l1.8-1.1l1.8-1l1.8-1l1.8-1l1.8-1l1.8-1l1.8-1l1-0.5
|
2594 |
+
v-0.2l0.1-0.6l0.1-0.6l0.1-0.7l0.1-0.7l0.1-0.7l0.1-0.8l0.1-0.8l0.1-1.5l0.2-3l0.1-1.4l0.1-0.7l0.1-0.7l0.1-0.7l0.1-0.7l0.1-0.7
|
2595 |
+
l0.1-0.4l0.1-0.4l0.2-0.7l0.2-0.7l0.2-0.7l0.2-0.7l0.2-0.7l0.2-0.6l0.3-0.6l0.3-0.6l0.3-0.6l0.3-0.6l0.3-0.6l0.3-0.6l0.3-0.6
|
2596 |
+
l0.3-0.6l0.3-0.6l0.3-0.6l0.3-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5l0.4-0.5
|
2597 |
+
l0.4-0.5l0.4-0.5l0.8-0.9l0.8-0.9l0.8-0.9l0.8-0.9l0.8-0.8l0.8-0.8l0.8-0.8l0.8-0.8l0.8-0.8l1.5-1.5l1.5-1.4l1.4-1.3l0.6-0.6
|
2598 |
+
l0.6-0.6l0.3-0.3l0.4-0.4l0.4-0.4l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3
|
2599 |
+
l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.3l0.4-0.2l0.5-0.2l0.5-0.2l0.4-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2
|
2600 |
+
l0.5-0.2l0.5-0.2l0.5-0.2l0.9-0.4l1-0.4l1-0.3l1-0.3l1-0.3l1-0.3l1-0.3l1-0.2l1-0.2l1-0.2l1-0.2l1-0.2l1-0.1l1-0.1l1-0.1l1-0.1
|
2601 |
+
l1-0.1l1-0.1h1h1h1L-30.6-41.7z M-356,204.7l-0.1-0.1l-0.2-0.3v-0.1L-356,204.7z"
|
2602 |
+
/>
|
2603 |
+
<path
|
2604 |
+
d="M-5.6-32.2l0.8,0.1l0.7,0.2l0,0l0.7,0.2l0.7,0.3l0.6,0.3l0,0l0.8,0.5l0.7,0.6l0,0l0.4,0.4l0.4,0.5l0.3,0.3
|
2605 |
+
l0.4,0.5l0.3,0.4l0.3,0.6l0.3,0.5l0.3,0.5l0.4,0.9l0.4,0.9l0.2,0.3l0.1,0.3l0.1,0.1l0,0l0.1,0.1l0.2,0.2l0.6,0.6l0.4,0.4L5-22
|
2606 |
+
l0.4,0.6L5.7-21l0.2,0.4l0.3,0.4l0.3,0.4l0.3,0.5L7-18.8l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.6L8-16.1l0.1,0.4l0.1,0.5l0.1,0.4
|
2607 |
+
l0.1,0.5l0.2,0.5l0.2,0.6L9-12.6l0.2,0.7l0.2,0.7l0.3,0.7L10-9.7l0.3,0.8l0.3,0.8l0.3,0.8l0.3,0.8l0.4,0.8L12-4.9l0.4,0.8
|
2608 |
+
l0.4,0.8l0.4,0.8l0.2,0.3l0.2,0.3l0.2,0.3L14-1.3L14.2-1l0.2,0.3l0.2,0.3l0.2,0.3L15,0.2l0.2,0.2l0.2,0.2l0.2,0.2L15.8,1l0.1,0.2
|
2609 |
+
L16,1.4l0.1,0.1l0.1,0.1l0.1,0.1l0,0l0.2,0.1L17,2.1l0.5,0.3L18,2.7L18.5,3L19,3.3l0.4,0.4l0.4,0.4l0.4,0.4l0.4,0.4L21,5.3
|
2610 |
+
l0.4,0.4l0.4,0.4l0.3,0.4l0.3,0.4l0.3,0.4L23,7.7l0.3,0.4l0.3,0.4l0.2,0.4L24,9.3l0.2,0.4l0.2,0.4l0.2,0.4l0.4,0.7l0.3,0.7
|
2611 |
+
l0.3,0.7l0.3,0.7l0.3,0.6l0.3,0.6l0.5,1.1l0.2,0.5l0.2,0.5l0.2,0.4l0.2,0.4l0.2,0.3l0.2,0.3l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1
|
2612 |
+
l0.1,0.1l0.1,0.1v0.1l0.1,0.1l0,0l0.1,0.1l0.4,0.4l0.4,0.4l0.4,0.4l0.4,0.4l0.4,0.4l0.4,0.5l0.4,0.5l0.4,0.5l0.4,0.5l0.4,0.5
|
2613 |
+
l0.4,0.5l0.4,0.5l0.4,0.5l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.5l0.3,0.5l0.6,1l0.6,1l0.6,1l0.6,1l0.5,1l0.5,1l0.5,1
|
2614 |
+
l0.5,1l0.5,1l0.5,1l0.5,1l0.5,1l0.4,1l0.4,1l0.4,1l0.4,1l0.4,1l0.4,1l0.8,2l0.8,2l1.5,4l0.8,2l0.8,2l0.4,1l0.4,1l0.4,0.9l0.4,0.9
|
2615 |
+
l0.4,0.9l0.4,0.9l0.4,0.9l0.4,0.9l0.4,0.9l0.4,0.9l0.4,0.9l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.8l0.4,0.8l0.5,0.8l0.2,0.3
|
2616 |
+
l0.2,0.4l0.2,0.4l0.2,0.3l0.2,0.4l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.3,0.3l0.3,0.4l0.5,0.6l0.5,0.6l0.5,0.6l0.4,0.7
|
2617 |
+
l0.4,0.7l0.4,0.7l0.4,0.7l0.4,0.7l0.4,0.7l0.4,0.7l0.4,0.7l0.3,0.7l0.3,0.7l0.3,0.7l0.3,0.7l0.3,0.7l0.3,0.7l0.3,0.7l0.3,0.7
|
2618 |
+
l0.3,0.7l0.3,0.7l0.2,0.7l0.2,0.6l0.2,0.6l0.2,0.6l0.2,0.6l0.4,1.3l0.4,1.3l0.4,1.2l0.4,1.2l0.4,1.2l0.7,2.4l0.3,1.1l0.3,1.1
|
2619 |
+
l0.3,1.1l0.3,1.1l0.3,1.1l0.4,1.1l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.5l0.2,0.4l0.2,0.4
|
2620 |
+
l0.2,0.5l0.9,1.7l0.9,1.8l0.9,1.8l0.9,1.8l0.9,1.9l0.9,1.9l0.9,1.9l0.9,2l0.9,2l0.9,2l0.9,2l0.8,2l0.8,2.1l0.8,2.1l0.8,2.1
|
2621 |
+
l0.8,2.1l0.8,2.1l0.8,2.2l0.4,1.1l0.4,1.1l0.4,1.1l0.4,1.1l0.4,1.1l0.4,1.1l0.4,1.1l0.4,1.1l0.4,1.1l0.4,1.1l0.3,1.1l0.3,1.1
|
2622 |
+
l0.3,1.1l0.3,1.1l0.3,1.1l0.3,1.1l0.3,1.1l0.3,1.1l0.3,1.1l0.3,1.1l0.3,1.1l0.3,1.1l0.3,1.1l0.3,1.1l0.3,1.2l0.3,1.1l0.3,1.2
|
2623 |
+
l0.3,1.2l0.2,1.2l0.2,1.2l0.2,1.2l0.2,1.2l0.2,1.2l0.2,1.2l0.2,1.2l0.2,1.2l0.2,1.2l0.2,1.2l0.2,1.2l0.2,1.2l0.2,1.2l0.1,1.2
|
2624 |
+
l0.1,1.2l0.1,1.2l0.1,1.2l0.1,1.2l0.1,1.2l0.1,1.2l0.1,1.2l0.1,1.2l0.1,1.2l0.1,1.1v1.1v1.1v1.1v1.1v1.1v1.1v1.1v1.1v1.1
|
2625 |
+
l-0.1,1.1l-0.1,1.1l-0.1,1.1l-0.1,1.1l-0.1,1.1l-0.1,1.1l-0.1,1.1l-0.1,1.1l-0.2,1.1l-0.2,1.1l-0.2,1.1l-0.2,1.1l-0.2,1.1
|
2626 |
+
l-0.2,1.1l-0.2,1.1l-0.2,1.1l-0.3,1.1l-0.3,1.1l-0.3,1.1l-0.3,1.1l-0.3,1.1l-0.3,1.1l-0.4,1.1l-0.4,1l-0.4,1l-0.4,1l-0.4,1
|
2627 |
+
l-0.4,1l-0.5,1l-0.5,1l-0.5,1.1l-0.3,0.6l-0.4,0.6l-0.4,0.5l-0.4,0.5l-0.4,0.4l-0.4,0.4l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.3,0.2
|
2628 |
+
l-0.3,0.2l-0.4,0.2l-0.6,0.4l-0.6,0.3l-0.6,0.3L89,261l-0.6,0.3l-0.6,0.2l-0.6,0.2l-0.5,0.2l-0.5,0.2l-0.5,0.2l-1,0.4l-1,0.3
|
2629 |
+
l-0.9,0.3l-0.8,0.3l-0.3,0.1l-0.3,0.1l-0.2,0.1L81,264l-0.1,0.1l-0.4,0.3l-0.4,0.3l-0.4,0.3l-0.4,0.2l-0.4,0.3l-0.8,0.5l-0.8,0.4
|
2630 |
+
l-0.9,0.4l-0.9,0.4l-0.9,0.4l-0.9,0.4l-0.9,0.3l-0.9,0.3l-0.9,0.3l-0.9,0.3l-0.9,0.3l-0.9,0.2l-0.9,0.2l-0.9,0.2l-0.9,0.2
|
2631 |
+
l-0.9,0.2l-0.9,0.2l-0.9,0.1l-0.9,0.1l-0.9,0.1l-0.9,0.1l-0.9,0.1l-0.9,0.1h-0.9h-0.9h-0.9h-0.9h-0.9H53h-0.9h-0.9h-0.9l-0.9-0.1
|
2632 |
+
l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1l-0.8-0.1
|
2633 |
+
l-0.8-0.2l-0.8-0.2l-0.8-0.2L35,269l-1.6-0.3l-1.6-0.4l-1.5-0.4l-1.5-0.4l-1.6-0.4l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.6-0.3
|
2634 |
+
l-0.6-0.3l-0.6-0.3l-0.6-0.3l-0.6-0.3l-0.6-0.3l-1.1-0.5l-2.1-1.1l-1-0.5l-0.9-0.4l-0.4-0.2l-0.4-0.2l-0.3-0.2l-0.3-0.1l-0.2-0.1
|
2635 |
+
l-0.2-0.1h-0.1h-0.3l-1-0.2l-0.9-0.3l-0.9-0.4l-0.9-0.5L9,259.1l-0.7-0.7l-0.6-0.8l-0.6-0.8l-0.5-0.9L6.2,255L6,254l-0.1-1v-1
|
2636 |
+
l0.1-1l0.2-1l0.3-0.9l0.4-0.9l0.5-0.9l0.6-0.8l0.7-0.7l0.8-0.6l0.8-0.6l0.9-0.5l0.9-0.4l1-0.3l1-0.1h1h0.3h0.5l0.5,0.1l0.5,0.1
|
2637 |
+
l0.4,0.1l0.4,0.1l0.4,0.1l0.4,0.1l0.7,0.2l0.7,0.2l0.7,0.2l0.6,0.3l0.6,0.3l0.6,0.3l0.6,0.3l0.6,0.3l1.1,0.5l1.1,0.5l2.1,1l1,0.5
|
2638 |
+
l0.4,0.2l0.4,0.2l0.4,0.2l0.4,0.2l0.3,0.1l0.3,0.1l0.2,0.1l0.2,0.1h0.1h0.2l1.3,0.3l1.4,0.3l1.4,0.3l1.4,0.3l1.4,0.3l1.4,0.3
|
2639 |
+
l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1
|
2640 |
+
l0.7,0.1H52h0.6h0.6h0.6h0.6H55h0.6h0.6h0.6h0.6H58h0.6l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.6-0.1l0.5-0.1l0.5-0.1
|
2641 |
+
l0.5-0.1l0.5-0.1l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.3l0.5-0.3l0.2-0.1l0.2-0.1
|
2642 |
+
l0.2-0.1l0.2-0.1l0.2-0.1l0.4-0.3l0.5-0.3l0.6-0.3l0.6-0.3l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.9-0.3l0.9-0.3l0.9-0.3
|
2643 |
+
l0.9-0.3l0.4-0.1l0.4-0.1l0.4-0.1l0.3-0.1l0.2-0.4l0.3-0.8l0.3-0.8l0.3-0.8l0.3-0.8l0.3-0.8l0.3-0.8l0.3-0.8l0.3-0.8l0.2-0.8
|
2644 |
+
l0.2-0.8l0.2-0.8l0.2-0.8l0.2-0.9l0.2-0.9l0.2-0.9l0.2-0.9l0.2-0.9l0.1-0.9l0.1-0.9l0.1-0.9l0.1-0.9l0.1-0.9l0.1-0.9l0.1-0.9
|
2645 |
+
l0.1-0.9l0.1-0.9l0.1-0.9V221v-1v-1v-1v-1v-1v-1v-1v-1v-1v-1l-0.1-1l-0.1-1l-0.1-1l-0.1-1l-0.1-1l-0.1-1l-0.1-1l-0.1-1l-0.1-1
|
2646 |
+
l-0.1-1l-0.1-1l-0.1-1l-0.2-1l-0.2-1l-0.2-1l-0.2-1l-0.2-1l-0.2-1l-0.2-1l-0.2-1l-0.2-1l-0.2-1.1l-0.2-1.1l-0.2-1.1l-0.2-1.1
|
2647 |
+
l-0.2-1.1l-0.2-1.1l-0.3-1.1l-0.3-1.1l-0.3-1.1l-0.3-1.1l-0.3-1.1l-0.3-1.1l-0.3-1.1l-0.3-1.1l-0.3-1l-0.3-1l-0.3-1.1l-0.3-1
|
2648 |
+
l-0.3-1l-0.3-1l-0.3-1l-0.3-1l-0.3-1l-0.3-1l-0.3-1l-0.4-1l-0.4-1l-0.4-1l-0.4-1l-0.4-1l-0.7-2l-0.8-2l-0.8-2l-0.8-2l-0.8-2
|
2649 |
+
l-0.8-2l-0.8-1.9l-0.8-1.9l-0.8-1.9l-0.8-1.9l-0.8-1.9l-0.8-1.8l-0.8-1.8l-0.8-1.8l-0.8-1.8l-0.8-1.7l-0.8-1.7l-0.8-1.7l-0.3-0.6
|
2650 |
+
l-0.3-0.7l-0.3-0.7l-0.3-0.7l-0.3-0.7l-0.3-0.7l-0.3-0.7l-0.3-0.6l-0.2-0.7l-0.2-0.7l-0.2-0.6l-0.2-0.7l-0.4-1.3l-0.4-1.3
|
2651 |
+
l-0.4-1.2l-0.4-1.2l-0.4-1.2l-0.3-1.2l-0.7-2.3l-0.3-1.1l-0.3-1.1l-0.3-1.1l-0.3-1.1l-0.4-1.1l-0.2-0.5l-0.2-0.5l-0.2-0.5
|
2652 |
+
L51,99.4l-0.2-0.5l-0.2-0.5l-0.2-0.5l-0.2-0.5L50,96.9l-0.2-0.5l-0.2-0.5l-0.2-0.4l-0.2-0.4L49,94.7l-0.2-0.4l-0.2-0.4l-0.2-0.4
|
2653 |
+
l-0.2-0.4L48,92.7l-0.2-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4l-0.3-0.4L46,89.9l-0.3-0.4L45.3,89l-0.4-0.5L44.5,88l-0.4-0.5
|
2654 |
+
L43.8,87l-0.3-0.5L43.2,86l-0.3-0.5L42.6,85l-0.3-0.5L42,84l-0.6-1l-0.6-1l-0.6-1l-0.6-1l-0.5-1l-0.5-1l-0.5-1l-0.5-1l-0.5-1
|
2655 |
+
l-0.5-1l-0.5-1l-0.5-1l-0.4-1l-0.4-1l-0.4-1L34,68l-0.4-1l-0.4-1l-0.8-2l-0.8-2l-1.5-4l-0.8-2l-0.8-2l-0.4-1l-0.4-0.9l-0.4-0.9
|
2656 |
+
l-0.4-0.9l-0.4-0.9l-0.4-0.9l-0.4-0.9l-0.4-0.9l-0.4-0.9l-0.4-0.9l-0.4-0.8l-0.4-0.8l-0.4-0.8l-0.4-0.8l-0.4-0.8l-0.4-0.8
|
2657 |
+
l-0.5-0.8l-0.5-0.7l-0.2-0.3l-0.2-0.4l-0.2-0.3l-0.2-0.3L20.1,37l-0.2-0.3l-0.2-0.3l-0.2-0.3l-0.2-0.3L19,35.5l-0.2-0.3l-0.3-0.3
|
2658 |
+
l-0.3-0.3l-0.3-0.3L17.6,34l-0.3-0.3L17,33.4l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.3-0.3l-0.4-0.4l-0.3-0.4L14.8,31l-0.3-0.4l-0.3-0.4
|
2659 |
+
l-0.3-0.4l-0.3-0.4L13.4,29l-0.2-0.4L13,28.2l-0.2-0.4l-0.4-0.7L12,26.4l-0.3-0.7L11.4,25l-0.3-0.6l-0.3-0.6l-0.5-1.1l-0.2-0.5
|
2660 |
+
l-0.2-0.5l-0.2-0.4l-0.2-0.4l-0.2-0.4l-0.2-0.4L9,20l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1l-0.1-0.1v-0.1
|
2661 |
+
l-0.1-0.1L8.1,19l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l-0.2-0.1l-0.5-0.3l-0.6-0.4l-0.6-0.4l-0.6-0.4L5.1,17
|
2662 |
+
l-0.5-0.4l-0.5-0.4l-0.4-0.4l-0.4-0.4L2.9,15l-0.4-0.4l-0.4-0.5l-0.4-0.4l-0.3-0.5l-0.3-0.5l-0.3-0.5l-0.3-0.5l-0.3-0.5l-0.3-0.5
|
2663 |
+
l-0.3-0.5l-0.3-0.5L-1,9.2l-0.3-0.5l-0.3-0.5l-0.3-0.5l-0.3-0.5l-0.5-1l-0.5-1l-0.5-1l-0.5-1l-0.4-1l-0.4-1l-0.4-1l-0.4-1l-0.4-1
|
2664 |
+
l-0.4-1l-0.3-1l-0.3-0.9l-0.3-0.9l-0.3-0.9l-0.3-0.9l-0.2-0.8L-8.5-9l-0.2-0.7l-0.2-0.2l-0.3-0.3l-0.4-0.4l-0.4-0.5l-0.4-0.5
|
2665 |
+
l-0.3-0.4l-0.2-0.4l-0.2-0.4l-0.3-0.4l-0.3-0.6l-0.3-0.5l-0.2-0.5l-0.2-0.5l-0.3-0.7l-0.5-0.5l-0.5-0.8l-0.5-0.9l-0.4-0.9l-0.2-1
|
2666 |
+
l-0.1-1v-0.5v-0.5v-0.7l0.1-0.7v-0.1l0.1-0.7l0.2-0.7l0.2-0.6l0,0l0.3-0.7l0.4-0.7l0.4-0.7l0,0l0.6-0.7L-12-29l0.7-0.5l0.7-0.5
|
2667 |
+
l0,0l0.7-0.4l0.8-0.3l0.8-0.2l0.8-0.2l0.8-0.1l0,0h0.8L-5.6-32.2z M14.2,260.9h0.2l0,0H14H14.2z M2.1-22.5L2.1-22.5v-0.2V-22.5z
|
2668 |
+
M2.1-23.1v-0.5v-0.2V-23.1z"
|
2669 |
+
/>
|
2670 |
+
<path
|
2671 |
+
d="M-358.4,223.5l1.1,0.2l0,0l0.6,0.2l0.6,0.2l0.2,0.1l1.3,0.5l1.7,0.7l0.7,0.3l0.5,0.2l0.2,0.1l0.2,0.1
|
2672 |
+
l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.4,0.1l0.4,0.1l0.5,0.1l0.5,0.1l0.5,0.1l1.2,0.2l1.3,0.3l0.7,0.2l0.8,0.2l0.8,0.2l0.7,0.2
|
2673 |
+
l0.4,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.7,0.1l0.8,0.1
|
2674 |
+
l0.8,0.1l1.6,0.1l1.6,0.1l1.7,0.1l1.7,0.1l0.9,0.1l0.9,0.1l0.9,0.1l0.9,0.1l0.9,0.1l1,0.1l1,0.1l1,0.2l1,0.2l0.9,0.2l1.2,0.2
|
2675 |
+
l1.2,0.2l1.2,0.2l1.2,0.2l1.2,0.2l1.2,0.2l1.2,0.2l1.2,0.2l1.2,0.2l1.2,0.2l1.2,0.2l1.2,0.2l1.2,0.2l1.2,0.2l1.2,0.1l1.2,0.1
|
2676 |
+
l1.3,0.1l1.3,0.1l1.3,0.1l1.3,0.1l1.3,0.1l1.3,0.1l1.3,0.1l1.3,0.1l1.3,0.1l1.3,0.1l1.3,0.1l1.3,0.1l2.6,0.2l2.6,0.1l2.6,0.1
|
2677 |
+
l2.6,0.1l2.6,0.1l2.6,0.1l2.6,0.1l2.6,0.1l2.6,0.1l2.6,0.1h2.6h2.6h2.6h2.6h2.5h2.5h5h5.3h5.3h5.3l5.3,0.1l5.3,0.1l5.3,0.1
|
2678 |
+
l5.3,0.1l5.3,0.1l5.3,0.1l5.3,0.2l5.3,0.2l5.3,0.2l5.3,0.2l5.3,0.2l5.3,0.2l5.3,0.2l5.3,0.2l5.3,0.2l5.3,0.3l5.3,0.3l5.3,0.3
|
2679 |
+
l5.3,0.3l5.3,0.3l5.3,0.3l5.3,0.3l5.3,0.3l5.3,0.3l5.3,0.3l5.3,0.3l5.3,0.4l5.3,0.4l5.2,0.4l1.7,0.1l1.7,0.1l3.4,0.2l3.4,0.2
|
2680 |
+
l3.4,0.2l3.5,0.2l3.5,0.2l3.5,0.1l3.5,0.1l3.5,0.1l3.5,0.1l3.5,0.1l3.4,0.1h3.4h3.4h3.4h3.3h0.6h0.6h0.7h0.7h0.7l0.8-0.1l1.7-0.1
|
2681 |
+
l1.8-0.1l1.9-0.1l1-0.1l1-0.1l1-0.1l1-0.1h1h1.1h1.1h1.1h1.1h0.6h0.5h0.5h0.5h0.5h0.5l0.5,0.1L12,245l0.6,0.1l0.5,0.1l0.6,0.1
|
2682 |
+
l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.1l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.2l0.6,0.3l0.4,0.2l1,0.5l0.9,0.7l0.8,0.8l0.7,0.9
|
2683 |
+
l0.6,0.9l0.5,1l0.3,1.1l0.2,1.1l0.1,1.1l-0.1,1.1l-0.2,1.1l-0.4,1.1l-0.5,1l-0.6,0.9l-0.7,0.9l-0.8,0.8l-0.9,0.7l-1,0.5l-1,0.4
|
2684 |
+
l-1.1,0.3l-1.1,0.1h-1.1l-1.1-0.1l-1.1-0.3l-1-0.4l-0.2-0.1l0,0h-0.1h-0.1H12h-0.1h-0.2h-0.2h-0.2h-0.2h-0.2h-0.2h-0.3h-0.3H9.8
|
2685 |
+
H9.5H9.2H8.9H8.6H8.3H7.9H7.6H6.8H6H5.2H4.4H3.5H2.6l-0.9,0.1l-0.9,0.1l-0.9,0.1l-1.8,0.1l-1.8,0.1l-1.8,0.1l-0.9,0.1l-0.9,0.1
|
2686 |
+
h-0.9h-0.9H-10h-0.8h-3.5h-3.5h-3.5h-3.5l-3.5-0.1l-3.5-0.1l-3.5-0.1l-3.5-0.1l-3.5-0.1l-3.5-0.1l-3.5-0.2l-3.5-0.2l-3.5-0.2
|
2687 |
+
l-3.5-0.2l-3.5-0.2l-1.7-0.1l-1.7-0.1l-5.2-0.4l-5.2-0.4l-5.2-0.4l-5.2-0.4l-5.2-0.3l-5.2-0.3l-5.2-0.3l-5.3-0.3l-5.2-0.3
|
2688 |
+
l-5.3-0.3l-5.3-0.3l-5.3-0.3l-5.3-0.3l-5.3-0.3l-5.3-0.2l-5.3-0.2l-5.3-0.2l-5.3-0.2l-5.3-0.2l-5.3-0.2l-5.3-0.2l-5.3-0.2
|
2689 |
+
l-5.3-0.1l-5.3-0.1l-5.3-0.1l-5.3-0.1l-5.2-0.1l-5.2-0.1l-5.2-0.1h-5.2h-5.2h-5.2h-5.1h-2.6h-2.6h-2.6h-2.6h-2.6h-2.6h-2.6
|
2690 |
+
l-2.6-0.1l-2.7-0.1l-2.7-0.1l-2.7-0.1l-2.7-0.1l-2.7-0.1l-2.7-0.1l-2.7-0.2l-2.7-0.2l-1.3-0.1l-1.3-0.1l-1.3-0.1l-1.3-0.1
|
2691 |
+
l-1.3-0.1l-1.3-0.1l-1.3-0.1l-1.3-0.1l-1.3-0.1l-1.3-0.1l-1.3-0.1l-1.3-0.1l-1.3-0.2l-1.3-0.2l-1.3-0.2l-1.3-0.2l-1.3-0.2
|
2692 |
+
l-1.3-0.2l-1.3-0.2l-1.3-0.2l-1.3-0.2l-1.3-0.2l-1.3-0.2l-1.3-0.2l-1.3-0.2l-1.3-0.2l-1.3-0.2l-1.2-0.2l-0.7-0.1l-0.7-0.1
|
2693 |
+
l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.7-0.1l-0.8-0.1l-0.8-0.1l-1.6-0.1l-1.6-0.1l-1.7-0.1l-1.7-0.1l-0.9-0.1
|
2694 |
+
l-0.9-0.1l-0.9-0.1l-0.9-0.1l-0.9-0.1l-0.9-0.1l-0.9-0.1l-1-0.1l-1-0.2l-1-0.2l-1-0.2l-1-0.2l-0.5-0.1l-0.5-0.1l-0.5-0.1
|
2695 |
+
l-0.4-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-0.5-0.1l-1.2-0.2l-1.3-0.3l-0.7-0.2l-0.7-0.2l-0.8-0.2l-0.8-0.2l-0.8-0.2l-0.4-0.1
|
2696 |
+
l-0.4-0.1l-0.4-0.1l-0.4-0.2l-0.5-0.2l-0.5-0.2l-0.8-0.3l-0.9-0.4l-1.7-0.8l-0.8-0.3l-0.7-0.3l-0.3-0.1l-1-0.6l-0.9-0.7l-0.8-0.8
|
2697 |
+
l-0.7-0.9l-0.6-1l-0.4-1l-0.3-1.1l-0.2-1.1v-1.1l0.1-1.1l0.3-1.1l0.4-1.1l0.5-1l0.7-0.9l0.8-0.8l0.9-0.7l1-0.6l1-0.5l1.1-0.4
|
2698 |
+
l1.1-0.2l1.1-0.1L-358.4,223.5z"
|
2699 |
+
/>
|
2700 |
+
<path
|
2701 |
+
d="M-365,199.4h0.3h0.3h0.3l0.4,0.1l0.7,0.2l0.4,0.1l0.3,0.1l0.3,0.1l0.3,0.1h0.1l0.2,0.1l0.2,0.1l0.2,0.1
|
2702 |
+
l0.2,0.1h0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.2h0.1l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.1,0.1l0.2,0.2l0.2,0.2
|
2703 |
+
l0.2,0.2l0.2,0.2l0.2,0.3l0.2,0.3v0.1l0.2,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3v0.1l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3
|
2704 |
+
l0.1,0.3v0.3v0.1v0.3v0.3v0.3v0.3v0.3v0.1v0.3v0.3v0.3v0.3l-0.1,0.3v0.1l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3v0.1l-0.1,0.3
|
2705 |
+
l-0.1,0.3l-0.1,0.3l-0.2,0.4l-0.4,0.7l-0.3,0.5l-0.3,0.4l-0.3,0.4l-0.5,0.6l-0.5,0.5l-0.4,0.4l-0.4,0.4l-0.4,0.4l-0.7,0.6
|
2706 |
+
l-0.7,0.6l-0.3,0.3l-0.3,0.3l-0.3,0.2l-0.1,0.1l-0.1,0.5v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.2v0.2v0.2
|
2707 |
+
v0.2v0.2v0.2v0.2v0.2v0.2v0.1v0.1v0.1v0.1v0.1v0.1v0.1v0.1v0.1v0.1v0.1v0.1v0.1v0.1v0.1v0.1l0,0v0.1h0.1l0.1,0.1h0.1l0.1,0.1
|
2708 |
+
l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.1,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.2,0.1l0.4,0.1l0.3,0.1l0.3,0.1
|
2709 |
+
l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.1l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.3,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2l0.2,0.2
|
2710 |
+
l0.2,0.2l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.2,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3l0.1,0.3v0.3
|
2711 |
+
v0.3v0.3v0.3v0.3v0.3v0.3v0.3v0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.1,0.3l-0.2,0.3
|
2712 |
+
l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.3l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.2,0.2l-0.3,0.2l-0.3,0.2l-0.3,0.2
|
2713 |
+
l-0.3,0.2l-0.3,0.2l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1l-0.3,0.1h-0.3h-0.3h-0.3
|
2714 |
+
h-0.3h-0.3h-0.3h-0.3h-0.3l-0.3-0.1l-0.3-0.1l-0.3-0.1l-0.6-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.2l-0.7-0.3l-0.7-0.3l-0.6-0.3l-0.6-0.3
|
2715 |
+
l-0.6-0.3l-0.6-0.3l-0.6-0.4l-0.6-0.4l-0.6-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.4l-0.5-0.5l-0.5-0.5l-0.5-0.5l-0.4-0.5l-0.4-0.5
|
2716 |
+
l-0.4-0.5l-0.4-0.5l-0.4-0.5l-0.3-0.5l-0.3-0.5l-0.3-0.6l-0.3-0.6l-0.3-0.6l-0.2-0.6l-0.2-0.6l-0.2-0.6l-0.2-0.6l-0.2-0.6
|
2717 |
+
l-0.2-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.6l-0.1-0.5l-0.1-0.6v-0.6v-0.5v-0.5v-0.5v-0.5v-0.5v-0.6v-0.5
|
2718 |
+
v-0.5v-0.5v-0.5v-0.5v-0.5l0.1-0.5l0.1-0.5l0.1-1l0.1-1l0.2-1.1l0.1-0.7l0.2-0.7l0.2-0.7l0.2-0.6l0.3-0.6l0.3-0.5l0.3-0.5
|
2719 |
+
l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.4l0.3-0.3l0.3-0.3l0.3-0.3l0.5-0.5l0.5-0.5l0.5-0.5l0.5-0.4l0.5-0.4l0.4-0.4l0,0l0.1-0.2l0.1-0.3
|
2720 |
+
l0.1-0.3l0.1-0.3l0.1-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.3l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.2-0.2l0.3-0.2
|
2721 |
+
l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.2l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1l0.3-0.1h0.3h0.3h0.3h0.3h0.3
|
2722 |
+
L-365,199.4z M-366.9,217h0.1H-366.9L-366.9,217z"
|
2723 |
+
/>
|
2724 |
+
</g>
|
2725 |
+
</g>
|
2726 |
+
</g>
|
2727 |
+
</svg>
|
{images/previews → assets/img}/cap.jpg
RENAMED
File without changes
|
{images/previews → assets/img}/collection.jpg
RENAMED
File without changes
|
assets/img/grid.svg
ADDED
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<svg xmlns="http://www.w3.org/2000/svg" width="231" height="252" fill="none">
|
2 |
+
<rect width="65.374" height="65.374" x=".162" y=".779" fill="#E1E3E6" rx="3"/>
|
3 |
+
<rect width="47.266" height="5.148" x="9.216" y="76.153" fill="#E1E3E6" rx="2.574"/>
|
4 |
+
<rect width="62.8" height="15" x="1.565" y="101.448" fill="#E1E3E6" rx="5"/>
|
5 |
+
<rect width="65.374" height="65.374" x=".162" y="136.277" fill="#E1E3E6" rx="3"/>
|
6 |
+
<rect width="47.266" height="5.148" x="9.216" y="211.651" fill="#E1E3E6" rx="2.574"/>
|
7 |
+
<rect width="62.8" height="15" x="1.565" y="236.946" fill="#E1E3E6" rx="5"/>
|
8 |
+
<rect width="65.374" height="65.374" x="82.478" y=".779" fill="#E1E3E6" rx="3"/>
|
9 |
+
<rect width="47.266" height="5.148" x="91.532" y="76.153" fill="#E1E3E6" rx="2.574"/>
|
10 |
+
<rect width="62.8" height="15" x="83.882" y="101.448" fill="#E1E3E6" rx="5"/>
|
11 |
+
<rect width="65.374" height="65.374" x="82.478" y="136.277" fill="#E1E3E6" rx="3"/>
|
12 |
+
<rect width="47.266" height="5.148" x="91.532" y="211.651" fill="#E1E3E6" rx="2.574"/>
|
13 |
+
<rect width="62.8" height="15" x="83.882" y="236.946" fill="#E1E3E6" rx="5"/>
|
14 |
+
<rect width="65.374" height="65.374" x="164.788" y=".779" fill="#E1E3E6" rx="3"/>
|
15 |
+
<rect width="47.266" height="5.148" x="173.843" y="76.153" fill="#E1E3E6" rx="2.574"/>
|
16 |
+
<rect width="62.8" height="15" x="166.192" y="101.448" fill="#E1E3E6" rx="5"/>
|
17 |
+
<rect width="65.374" height="65.374" x="164.788" y="136.277" fill="#E1E3E6" rx="3"/>
|
18 |
+
<rect width="47.266" height="5.148" x="173.843" y="211.651" fill="#E1E3E6" rx="2.574"/>
|
19 |
+
<rect width="62.8" height="15" x="166.192" y="236.946" fill="#E1E3E6" rx="5"/>
|
20 |
+
<rect width="6.177" height="6.177" x="13.283" y="86.301" fill="#E1E3E6" rx="3"/>
|
21 |
+
<rect width="6.177" height="6.177" x="21.498" y="86.301" fill="#E1E3E6" rx="3"/>
|
22 |
+
<rect width="6.177" height="6.177" x="29.713" y="86.301" fill="#E1E3E6" rx="3"/>
|
23 |
+
<rect width="6.177" height="6.177" x="37.927" y="86.301" fill="#E1E3E6" rx="3"/>
|
24 |
+
<rect width="6.177" height="6.177" x="46.238" y="86.301" fill="#E1E3E6" rx="3"/>
|
25 |
+
<rect width="6.177" height="6.177" x="95.599" y="86.301" fill="#E1E3E6" rx="3"/>
|
26 |
+
<rect width="6.177" height="6.177" x="103.814" y="86.301" fill="#E1E3E6" rx="3"/>
|
27 |
+
<rect width="6.177" height="6.177" x="112.029" y="86.301" fill="#E1E3E6" rx="3"/>
|
28 |
+
<rect width="6.177" height="6.177" x="120.243" y="86.301" fill="#E1E3E6" rx="3"/>
|
29 |
+
<rect width="6.177" height="6.177" x="128.554" y="86.301" fill="#E1E3E6" rx="3"/>
|
30 |
+
<rect width="6.177" height="6.177" x="177.909" y="86.301" fill="#E1E3E6" rx="3"/>
|
31 |
+
<rect width="6.177" height="6.177" x="186.124" y="86.301" fill="#E1E3E6" rx="3"/>
|
32 |
+
<rect width="6.177" height="6.177" x="194.339" y="86.301" fill="#E1E3E6" rx="3"/>
|
33 |
+
<rect width="6.177" height="6.177" x="202.553" y="86.301" fill="#E1E3E6" rx="3"/>
|
34 |
+
<rect width="6.177" height="6.177" x="210.864" y="86.301" fill="#E1E3E6" rx="3"/>
|
35 |
+
<rect width="6.177" height="6.177" x="13.283" y="221.798" fill="#E1E3E6" rx="3"/>
|
36 |
+
<rect width="6.177" height="6.177" x="21.498" y="221.798" fill="#E1E3E6" rx="3"/>
|
37 |
+
<rect width="6.177" height="6.177" x="29.713" y="221.798" fill="#E1E3E6" rx="3"/>
|
38 |
+
<rect width="6.177" height="6.177" x="37.927" y="221.798" fill="#E1E3E6" rx="3"/>
|
39 |
+
<rect width="6.177" height="6.177" x="46.238" y="221.798" fill="#E1E3E6" rx="3"/>
|
40 |
+
<rect width="6.177" height="6.177" x="95.599" y="221.798" fill="#E1E3E6" rx="3"/>
|
41 |
+
<rect width="6.177" height="6.177" x="103.814" y="221.798" fill="#E1E3E6" rx="3"/>
|
42 |
+
<rect width="6.177" height="6.177" x="112.029" y="221.798" fill="#E1E3E6" rx="3"/>
|
43 |
+
<rect width="6.177" height="6.177" x="120.243" y="221.798" fill="#E1E3E6" rx="3"/>
|
44 |
+
<rect width="6.177" height="6.177" x="128.554" y="221.798" fill="#E1E3E6" rx="3"/>
|
45 |
+
<rect width="6.177" height="6.177" x="177.909" y="221.798" fill="#E1E3E6" rx="3"/>
|
46 |
+
<rect width="6.177" height="6.177" x="186.124" y="221.798" fill="#E1E3E6" rx="3"/>
|
47 |
+
<rect width="6.177" height="6.177" x="194.339" y="221.798" fill="#E1E3E6" rx="3"/>
|
48 |
+
<rect width="6.177" height="6.177" x="202.553" y="221.798" fill="#E1E3E6" rx="3"/>
|
49 |
+
<rect width="6.177" height="6.177" x="210.864" y="221.798" fill="#E1E3E6" rx="3"/>
|
50 |
+
</svg>
|
assets/img/no-matching-products.svg
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
<svg viewBox="0 0 797.12 564.08" xmlns="http://www.w3.org/2000/svg"><g fill-rule="evenodd"><path d="m216.92 118.87 1 .15 1 .25.61.2.7.28.25.12.67.35.25.13.63.4.54.37.78.63.7.7.63.72.55.73.52.8.42.77.36.81.29.8.23.8.17.77.11.77.07.71v2.14l-.13 1.16-.22 1.2-.26 1.17-.34 1.13-.45 1.07-.42 1.1-.45 1.1-.5 1.09-.28.61.41.57.37.6.08.13.27.52.22.53.06.17.3 1v.18l.07.28.72-.48.75-.48.76-.47.79-.45.83-.43.9-.4 1-.39.73-.23.79-.18.4-.09.76-.11.49-.07h1.35l.78.08h.17l.86.17h.15l.95.3.14.05.5.2.46.23.14.08.5.29.46.33.14.08.43.35.42.39.11.1.39.4.36.43.1.12.32.41.28.45.09.14.45.86.08.17.3.8.07.18.21.74.12.53.13.85.07.82v1.21l-.07 1.2-.13 1.19-.2 1.15-.27 1.11-.31 1.09-.35 1.06-.09.24.62-.34 1-.55 1.1-.53 1.12-.48.72-.29.71-.23.8-.22.87-.18.62-.08.76-.07h1.52l.57.07.57.1.25.05.63.17.63.21.24.09.68.3.67.38.2.12.66.45.62.51.18.17.55.57.5.61.15.2.4.6.35.64.14.25.25.56.21.6.1.3.22.84.17.8.15 1.11.06 1.1v1.67h.17l1.45-.08h2.88l1.44.07 1.43.11 1.42.15 1.41.2 1.42.24 1.4.26.58.12 1.14-.27 1.35-.25 1.35-.18 1.38-.15 1.4-.1h5.85l1.52.08 1.55.12 1.58.15 1.6.17 1.63.2 1.65.21 1.67.25 1.7.27 1.7.3 1.73.32 1.74.35 1.75.35 1.76.38 1.79.4 1.78.42 1.8.43 1.78.47 1.8.46 1.8.49 1.8.5 1.79.51 1.78.54 1.78.53 1.77.57 1.77.55 1.75.58 1.71.58 1.72.6 1.7.6 1.67.62 1.65.62 1.61.63 1.6.63 1.57.64 1.53.65 1.52.65 1.47.66 1.43.65 1.4.67 1.37.67 1.31.68 1.29.68 1.23.69 1.2.68 1.17.7 1.1.72 1.08.71 1 .74 1 .76.95.8.91.84.85.86.74.82.66.8.64.83.6.85.56.87.52.87.48.88.47.9.42.9.4.9.36.92.35.91.32.94.28.91.27.94.25.93.22.93.2.94.18.93.17.93.16.94.14 1 .23 1.84.17 1.86.13 1.87.1 1.85.07 1.83v1.15l.09.14.83 1.38.82 1.43.78 1.47.73 1.48.7 1.52.65 1.52.29.68.56.05h.15l.87.17h.15l.88.27h.14l.8.35.15.07.73.4.13.1.65.45.14.1.56.46.37.35.55.59.3.38.48.67.22.31.45.79.35.7.42 1 .31 1 .25 1 .2.93.17.92.12.92.08.91.08.92.05.93v4.82l-.08 2-.12 2-.17 2.05-.18 2.07v.62l.15.35.32.8.25.8.23.8.18.8.14.78.1.78.08.77v.53l.18-.21 1.23-1.6.65-.8.55-1.15.42-.8.38-.69.37-.6.52-.83.7-1.07.85-1.26 1-1.4.58-.77.58-.77.64-.8.66-.78.69-.82.73-.8.77-.8.81-.78.87-.78.92-.77 1-.75 1-.67.62-.36.6-.34.61-.31.65-.3.7-.27.74-.25.78-.22.82-.16.86-.14.92-.06h.93l1 .08 1 .15 1 .25 1 .33.94.42.9.5.83.55.78.62.65.6.59.6.5.53.48.57.47.56.45.57.41.6.42.58.38.62.39.6.38.67.63 1.21.6 1.29.55 1.3.49 1.33.43 1.33.38 1.35.34 1.37.3 1.38.25 1.39.21 1.4.19 1.41.13 1.42.12 1.43.08 1.44.05 1.45v3.91l.66.27.72.4.13.07.65.43.6.48.14.12.48.47.45.51.12.14.33.46.32.47.1.17.45.85.08.2.3.71.18.54.22.83.15.77.1.73.07.7.05.68v3.29l-.06 1.61-.12 1.62-.17 1.62-.2 1.6-.25 1.58-.3 1.58-.33 1.57-.38 1.55-.4 1.55-.45 1.53-.49 1.54-.51 1.51-.55 1.5-.59 1.49-.6 1.48-.63 1.47-.67 1.46-.68 1.45-.7 1.44-.73 1.43-.75 1.42-.77 1.41-.78 1.4-.82 1.39-.82 1.38-.85 1.37-.85 1.36-.86 1.35-.87 1.34-.9 1.35-.43.61-.77 3.07-.43 1.63-.42 1.54-.42 1.43-.43 1.4-.59 1.56-.5 1.4-.55 1.4-.6 1.49-.68 1.56-.75 1.7-1.82 4.05-.36.75-.44.82-.46.83-.52.84-.55.83-.58.85-.62.85-.68.87-.77.86-.83.84-.6.51-.64.5-.46.3-.67.4-.18.1-.49.24-.5.21-.16.07-.67.22-.68.16h-.17l-.93.13h-1.09l-.76-.05-.75-.14-.75-.2-.14-.05-.78-.28-.43-.22-1.45 2-1.33 1.88-.24.35-.23.37-.23.38-.22.4-.52 1-.51 1.05-.54 1.16-.58 1.25-.62 1.32-.66 1.38-.74 1.4-.41.77-.45.75-.47.75-.5.77-.55.76-.58.77-.64.75-.7.75-.73.73-.8.72-.4.32-.45 1.06-.8 1.84-.8 1.8-.83 1.76-.84 1.75-.85 1.74-.88 1.7-.88 1.66-.92 1.65-.93 1.62-.95 1.57-1 1.55-1 1.5-1 1.48-1 1.43-1.08 1.39-1.1 1.35-1.15 1.3-1.15 1.23-.62.63-.61.6-.62.59-.63.56-.64.55-.65.55-.66.52-.67.52-.7.5-.75.51-.57.35-.7.37-.43.2-.73.27-.15.05-.85.23h-.14l-1 .15h-1.98l-.59-.09h-.11l-.62-.13-.6-.19h-.1l-.57-.21-.55-.27-.1-.05-.51-.3-.5-.32-.09-.08-.43-.32-.38-.35-.1-.08-.65-.7-.09-.1-.51-.65-.07-.12-.53-.88-.13-.31-.23-.46-.18-.49-.12-.31-.25-.77-.08-.32v.05l-.2 1.15-.24 1.1-.26 1.07-.3 1.05-.34 1-.36 1-.44 1-.5 1-.4.65-.4.6-.75.94-.73.85-.77.8-.8.76-.81.72-.85.68-.89.64-.88.58-.92.55-.91.5-.95.47-.95.41-1 .39-1 .35-1 .3-1 .26-1 .24-1 .18-1 .17-1 .13-1 .1-1 .07-1 .05h-2l-1-.05-1-.05-1-.1-1-.12-1-.13-1-.15-.95-.19-.95-.21-.95-.22-.94-.25-.15-.05-.06.07-.84.55-.83.55-.87.51-.88.49-.9.46-.92.45-.93.4-.95.39-1 .35-1 .31-.8.22-.81.18-.79.15-.8.14-.76.08-.77.07h-2.98l-1.34-.08-1.33-.15-1-.14-.2.1-1.17.59-1.2.55-1.23.51-1.25.45-1.28.4-1.27.34-.72.16-.68.14-.7.1-.7.08-.72.07h-2.26l-.79-.06-.81-.1-.84-.17-.85-.22-.88-.28-.87-.37-.88-.43-.8-.5-.82-.57-.71-.55-.22-.18-.92.2-1.48.3-1.48.25-1.42.18-.8.09-.73.05h-2.35l-.82-.07-.88-.13-.89-.18-.88-.25-.83-.29-.8-.33-.77-.38-.75-.4-.7-.45-.67-.49-.63-.5-.6-.51-.55-.54-.19-.55-.49-.57-.46-.58-.44-.59-.4-.58-.38-.62-.35-.6-.32-.6-.31-.61-.3-.67-.5-1.18-.44-1.24-.38-1.25-.33-1.25-.27-1.25-.22-1.25-.18-1.25-.13-1.25-.09-1.25-.01-1.21v-2.42l.07-1.2.11-1.2.15-1.18.2-1.17.24-1.17.3-1.15.36-1.15.42-1.15.48-1.06.34-.65.25-.42.5-.78.16-.24.59-.7.41-.46.65-.64.64-.56.65-.55.7-.57.71-.55-.06-.22-.19-.81-.13-.69-.1-.68-.07-.68v-.25l-.82.05h-.18l-.69-.05-.66-.09h-.17l-.85-.2-.82-.28h-.15l-.91-.44-.85-.55-.14-.1-.56-.45-.54-.5-.48-.55-.08-.11-.6-.84-.49-.9-.06-.15-.32-.8-.25-.81v-.19l-.14-.66-.06-.67v-1.78l.06-1 .14-1 .16-.95.22-.92.25-.92.28-.88.32-.85.35-.83.37-.84.38-.8.2-.4-.9-.53-1.92-1.17-1.91-1.2-1.94-1.25-1.97-1.29-2-1.3-2-1.34-2-1.35-2-1.4-2-1.4-2-1.43-2-1.45-1.95-1.48-2-1.49-1.93-1.5-1.95-1.53-1.92-1.53-1.92-1.54-1.88-1.55-1.88-1.56-1.85-1.57-1.57-1.58-1.8-1.58-1.79-1.59-1.75-1.56-1.71-1.57-1.7-1.57-.49-.45-.56.32-1.2.55-1.25.53-1.26.54-1.3.51-1.34.49-1.33.46-1.37.44-1.36.41-1.4.4-1.39.35-1.41.34-1.4.28-1.42.25-1.4.2-1.42.17-1.43.1-1.32-.02h-1.5l-.71-.05-.74-.06-.73-.09-.75-.11-.75-.15-.77-.19-.76-.21-.77-.27-.78-.3-.85-.4-.64-.35-.73-.47-.3-.2-.77-.61-.25-.24-.4-.36-.36-.4-.2-.25-.37-.45-.32-.49-.16-.25-.32-.51-.27-.54-.11-.28-.24-.53-.18-.57-.08-.3-.14-.55-.11-.55v-.3l-.06-.53v-2.09l.12-.83.11-.68.12-.4h-.4l-.85-.05-.48-.05-.79-.13-.78-.2-.78-.27-.74-.31-.73-.37-.68-.42-.64-.46-.58-.49-.37-.33-.51-.55-.49-.58v-.07l-.46-.72-.4-.76-.32-.8v-.09l-.21-.71-.14-.74-.08-.73v-.92l.07-.81v-.1l.12-.6.15-.62v-.12l.29-.8.06-.13.4-.85.17-.28.4-.65.37-.54.53-.7.5-.61.52-.59 1-1.1 1.06-1.13 1.05-1.13 1-1.17.47-.55.45-.55.43-.52.39-.51.33-.47.28-.42.09-.15-.09-.3-.15-.73v-.17l-.1-.88v-1.38l.07-.62.12-.62v-.11l.15-.64.22-.61v-.1l.26-.62.32-.58.05-.1.33-.52.35-.48.09-.09.33-.4.37-.38.08-.08.43-.39.45-.35.2-.15.74-.46.33-.75.42-.95.4-1 .4-1 .36-1 .37-1 .37-1.05.35-1.07.23-.73h-.67l-1-.06-1-.19-1-.31-.92-.42-.86-.53-.79-.64-.71-.73-.62-.8-.27-.47-1 .17-1 .05-1-.05-1-.19-.92-.28-.88-.37-.74-.46-.7-.51-.65-.59-.58-.63-.5-.7v-.08l-.44-.75-.36-.8-.27-.84v-.11l-.15-.69-.09-.68v-2.18l.13-1 .13-.82-.33-.5-.16.25-.54.71-.53.72-.55.68-.58.67-.64.67-.66.65-.77.66-.57.44-.63.41-.33.2-.84.45-.3.15-.85.34-.46.15-.47.11-.75.17h-.13l-.85.08h-1.48l-1-.11-.52-.1-.48-.14-.79-.26-.11-.05-.82-.35-.12-.07-.78-.47-.12-.06-.76-.59-.1-.08-.69-.65-.08-.08-.63-.75-.07-.1-.5-.74-.07-.11-.4-.77v-.12l-.21-.51-.19-.55-.08-.25-.15-.62-.12-.63v-.29l-.08-1v-1.83l.15-.93.19-.85.21-.77.24-.73.23-.69.28-.7.5-1.2.57-1.2.57-1.13.56-1.07 1-1.83.82-1.5.58-1.08.65-1.14.65-1.11.67-1.1.67-1.09.66-1.08 1.35-2.05 1.35-2 1.32-2 1.3-1.94 1.27-1.9 3.05-4.7.15-.26 1-1.94 1.39-2.6.45-.86-.17-1-.25-1.65-.22-1.67-.18-1.7h-.2l-1-.07h-.1l-.95-.16-.93-.29h-.1l-.8-.35-.75-.4-.1-.07-.59-.4-.55-.43-.1-.1-.4-.38-.38-.4-.1-.12-.55-.72-.3-.41-.42-.72-.31-.67-.25-.56-.3-.79-.27-.73-.25-.75-.25-.78-.42-1.47-.36-1.52-.3-1.53-.25-1.53-.2-1.54-.15-1.56-.1-1.55v-4.7l.08-1.59.12-1.56.16-1.59.22-1.58.23-1.58.27-1.59.32-1.56.05-.25-.27-.42-.42-.7-.36-.68-.32-.7-.3-.7-.25-.7-.22-.69-.18-.7-.15-.66-.13-.69-.12-.73-.15-1.23-.08-1.3v-2.54l.07-1.23.12-1.22.15-1.2.18-1.2.22-1.16.23-1.15.25-1.14.27-1.11.26-1.09.3-1.06.3-1.07.6-1.95.6-1.83.57-1.67 1-2.68.36-.95.4-1 .42-1 .47-1 .48-1 .5-1.05.55-1 .57-1.07.58-1.08.62-1.09.63-1.1.67-1.1.68-1.11.72-1.12.73-1.12.75-1.13.78-1.13.8-1.14.82-1.13.83-1.13.87-1.14.88-1.13.9-1.13.92-1.14.93-1.11 1-1.1 1-1.12 1-1.08 1-1.09 1-1.06 1-1.07 1-1 1.06-1 1.09-1 1.1-1 1.11-1 1.14-1 1.15-.94 1.15-.9 1.18-.86 1.18-.85 1.2-.84 1.24-.78 1.23-.77 1.25-.71 1.27-.7 1.28-.65 1.3-.62 1.32-.57 1.33-.53 1.35-.48 1.37-.42 1.4-.38 1.4-.32 1.43-.27 1.38-.2.79-.06.73-.07h3.7l.75.07.73.08.75.1.75.12.75.15.75.16.74.19.75.21.88.27.47.2.81.37.2.1.84.5.16.11.79.62.15.13.71.7.14.15.63.79.12.16.48.77.08.18.39.8.08.19.27.73.18.55.18.88.12.84.05.76v1.52l-.11 1.13-.14.65.24-.15 1-.56.62-.3.6-.27.63-.25.65-.23.7-.22.72-.18.78-.15.82-.12h1.75zm129.63 298.13.09.2.06.2v-.6zm-128.31-72.17.33.25-.1-.31zm-4.72-18.38v2.33h.5l.16-.05-.48-2-.12-.5zm84.25-11.62.4 1.1.33 1.12.3 1.12.25 1.11.24 1.14.2 1.16.06.49.17-.55.2-.79.15-.73.13-.73v-3.09l-.09-.07-.31-.25-.35-.28-.35-.25-.34-.23-.33-.22-.32-.2-.25-.15zm-143.22-.53v.05zm83.1-12.25-.36 1-.34 1-.31 1-.3 1-.29.95-.28.95-.23.95-.24.94-.21.93-.2.92-.07.35.48-.55.89-1.07.1-.53.4-2 .45-2 .45-2 .45-1.85-.27-.17zm-55.83 6.58-.22.7.5.1-.11-1.2v-.2zm235.7-17.1-1.75 1.94-1.2 1.33.05.18.18.77.15.75.12.77.1.73.07.75.05.73v1.4l.05-.06.75-1.45.75-1.4.75-1.35.25-.45v-.07l.18-1.32.19-1.31.16-1.32.14-1.3.06-.55zm.3-19-.38 1.13-.42 1.1-.47 1.1-.35.84.49.21.88.54.8.65.65.66-.07-1.1-.08-1.05-.1-1-.12-1-.15-.95-.16-.91-.19-.87-.06-.22zm-60-41.38.47-.07.71-.08h.42l-.1-.06-.42-.25-.42-.24-.4-.2-.4-.18-.23-.12zm-7.7-26.54.23 1.3.24 1.09.08.36.1.37.42 1.53.73 2.67.15.55h2.73l1 .06 1 .12 1 .13 1 .19.86.2-.06-.2-.19-.5-.18-.47-.2-.47-.2-.43-.22-.42-.21-.38-.24-.38-.23-.35-.23-.34-.25-.33-.25-.3-.24-.27-.23-.25-.33-.28-.42-.35-.52-.4-.6-.43-.7-.47-.76-.48-.84-.52-.91-.52-1-.55-.56-.3zm-105.47 1.85.19.64.31 1 .12.49.43.06 1.1.22-.45-.7-.78-1.23-.38-.65zm25.4-4.35h-2.76l-1.4.08-1.44.1-1.43.13h-.1l.1.12.48.51.49.52.48.5.52.5.5.48.53.47.53.47.54.46.55.45.55.44.4.3.43-.65.45-.64.43-.6.47-.58.48-.57.5-.58.54-.55.56-.57.62-.53.37-.32h-2.04zm48.82-10.11 1.37 1 .28.2.3.2.43.27.55.3.64.33.7.35 1.66.82 1.84.86 2 1 2.05 1 .9.46v-2.85l-1.25-.43-1.61-.55-1.62-.53-1.63-.52-1.65-.52-1.65-.5-1.67-.5-1.57-.45zm-121.77-39-1.35 1.3-1.35 1.34-1.35 1.36-1.35 1.37-1.35 1.36-1.33 1.4-1.32 1.4-1.31 1.42-1.3 1.43-1.3 1.44-1.29 1.45-1.25 1.46-.26.3-.49.92-1.58 3.05-3.22 6.16-.4.75.39-.51.56-.75.74-1 1.85-2.27 5.13-6.25 2-2.5 1.2-1.67 1.4-1.93 1.42-1.92 1.45-1.91 1.5-1.92 1.53-1.92 1.57-1.88.83-1 .82-.95.33-.36.35-.49zm480.9-96.23.8.13.52.13.76.25h.17l.9.4.15.07.55.3.52.35.11.08.57.44.53.5.1.1.39.41.36.45.4.55.55.87.47.9.38 1 .3.93.22 1 .15.94v.25l1.18-.84 1.73-1.23 1.8-1.27 1-.65 1-.63 1-.65 1-.62 1-.6 1.08-.58 1.12-.57 1.16-.51 1.17-.45.68-.25.65-.2.67-.19.67-.16.7-.15.71-.14.78-.13.76-.08h2.37l.8.09.83.13.84.17.81.23.82.27.82.33.8.37.76.43.75.47.72.5.73.56.64.57.63.65.55.67.5.7.45.71.38.72.34.72.28.71.25.7.2.72.17.68.11.69.1.66.09.74.08 1.23v1.28l-.05 1.27-.12 1.25-.16 1.25-.2 1.27-.25 1.26-.29 1.27-.33 1.28-.35 1.3-.38 1.3-.45 1.33-.43 1.33-.25.72h.55l.78-.05h1.57l.8.07.88.11.68.14.77.2.35.1.8.3.33.13.8.38.3.17.8.5.27.2.62.48h.05l.56-.23h.09l.75-.25.75-.18h.1l.91-.1h1l1 .1 1 .23h.09l.93.34.88.43h.09l.73.47.67.55.08.06.52.52.46.55.09.08.31.45.3.47.07.12.42.81.2.44.16.48.24.77.18.68.27 1.53.18 1.44.13 1.45.07 1.46v2.92l-.07 1.48-.1 1.49-.15 1.5-.18 1.5-.23 1.51-.25 1.52-.29 1.53-.31 1.54-.35 1.55-.37 1.56-.4 1.57-.4 1.48-.45 1.58-.46 1.58-.49 1.6-.5 1.6-.53 1.62-.53 1.6-.55 1.62-.59 1.63-1.18 3.23-1.22 3.24-1.3 3.25-1.29 3.23-1.3 3.2-1.31 3.17-1.32 3.13-2.57 6.12-2.46 5.87-1.15 2.8-1.1 2.71-1 2.62-1 2.48-.88 2.39-.38 1.1-.39 1.1-.33 1.05-.32 1-.28.95-.12.4-.16 1.25-.29 2.1-.36 2.7-.47 3.21-.52 3.57-.63 3.8-.34 2-.35 2-.38 2-.38 2-.42 2-.42 1.91-.45 1.87-.43 1.72-.48 1.75-.5 1.65-.27.85-.28.78-.28.78-.32.79-.32.75-.36.76-.39.77-.45.78-.53.8-.42.55-.48.59-.25.25-.53.53-.07.77-.13 1.2-.17 1.2-.2 1.2-.22 1.18-.26 1.2-.29 1.18-.3 1.2-.35 1.19-.35 1.18-.38 1.18-.42 1.19-.43 1.18-.45 1.18-.47 1.19-.5 1.18-.5 1.17-.53 1.18-.55 1.17-.55 1.16-.58 1.17-.59 1.17-.61 1.16-.64 1.17-1.26 2.28-1.32 2.29-1.37 2.26-.61.95-.4 2.07-.24 1.17-.3 1.35-.7 3-1.78 7.28-1 4.14-.52 2.15-.5 2.2-.5 2.23-.5 2.27-.46 2.26-.19.94.6.06.84.12.68.15.77.2.38.12.8.3.35.15.83.41.32.19.82.51.28.22.75.62.25.23.68.72.22.25.57.76.2.29.45.76.16.32.35.75.14.33.25.72.2.68.21 1 .14 1 .06.95v1.75l-.09.83-.11.82-.14.78-.16.78-.19.75-.2.75-.21.72-.25.73-.25.7-.29.75-.56 1.35-.64 1.35-.66 1.32-.7 1.3-.75 1.25-.77 1.23-.8 1.17-.82 1.13-.85 1.09-.86 1-.89 1-.51.51-.5.47-.52.47-.57.45-.61.45-.67.45-.77.43-.55.27-.7.3-.23.08-.9.28-.22.05-.58.12-.57.08h-.21l-.72.05h-.9l-.82-.1-.78-.17h-.18l-.85-.28-.82-.37-.17-.08-.78-.47-.73-.53-.15-.14-.6-.55-.55-.61-.14-.17-.31-.43-.3-.45-.47-.77-.55-1.07-.47-1.06-.38-1.07-.33-1.05-.27-1.07-.23-1.06-.19-1.07-.15-1.07-.11-1.08-.07-.82-1.13.55-1.33.76-1.33.8-1.34.84-1.36.86-1.35.89-1 .66-.07.62-.11.77-.14.75-.16.75-.2.73-.22.72-.23.71-.25.7-.29.69-.3.66-.31.65-.34.65-.35.64-.36.61-.39.62-.41.65-.79 1.12-.88 1.13-.92 1.08-1 1.05-1 1-1.05 1-.67.58-.13.53-.2.69-.25.66-.25.65-.29.62-.3.62-.31.56-.37.64-.67 1-.73 1-.77.92-.8.86-.81.8-.84.77-.83.7-.85.68-.85.64-.85.6-.85.56-.85.54-.83.51-.85.5-1.57.87-1.53.8-1.4.7-1.27.6-1 .47-.37.18-.47.25-1.36.75-1.59.88-.91.5-1 .47-1 .47-1.05.43-.72.23-.75.22-.51.1-.77.13h-.23l-.52.05h-1.47l-.73-.12h-.17l-1-.25-1-.4-.13-.07-.79-.42-.71-.48-.67-.58-.12-.1-.63-.67-.57-.75-.43-.75-.25.23-.8.62-.88.5-.94.4-1 .28-1 .17h-1l-1-.08-1-.2-1-.33-.92-.44-.85-.55-.67-.55-.78 2.35-1 2.9-.51 1.47-.33 1.38-.53 1.43-.55 1.45-.57 1.42-.6 1.4-.63 1.38-.67 1.39-.7 1.33-.75 1.28-.42.69-.41.65-.45.63-.47.63-.48.62-.5.62-.54.6-.63.65-.8.73-.65.52-.4.26-.68.44-.15.06-.47.25-.48.2-.14.05-.7.24-.71.18h-.12l-1 .13h-1.09l-.85-.08-.81-.17-.82-.25h-.07l-.83-.35-.77-.45-.73-.52-.07-.07-.58-.51-.53-.57-.49-.62-.05-.06-.46-.77-.4-.82v-.1l-.23-.61-.18-.64v-.11l-.16-.9v-.15l-.07-1v-1.19l.06-.7.15-1 .19-.88.2-.87.23-.85.25-.88.55-1.75v-.12l-.38-.48-.62-.95-.52-.95-.4-.9-.35-.88-.33-.87-.3-.9-.28-.92-.29-1-.28-1-.53-2.09-.57-2.25-.2-.86-.47-.09.14 1.07.1 1v1.89l-.11.85-.2.83-.29.8-.36.78-.55.87-.65.81-.75.72-.82.62-.9.51-1 .39-1 .28-.8.12-.1.81-.17 1-.2 1-.22 1-.26 1-.32 1-.37 1-.41 1-.5 1-.57 1-.65 1-.77 1-.81.87-.55.52-.52.41-.53.42-.57.38-.6.37-.65.33-1 .47-1 .38-1.05.34-1 .25-1 .18-1.05.12-1 .05h-1l-1-.06-1-.1-1-.14-.95-.18-.92-.23-.9-.25-.88-.29-.87-.31-.85-.34-.83-.35-.82-.38-.8-.4-.78-.43-.77-.44-.77-.45-.75-.48-.75-.48-.73-.49-.72-.51-.73-.54-1.35-1.05-1.49-1.04-1.32-1.14-1.26-1.16-1.22-1.19-.92-.91-.6.28-.66.28-.69.24-.71.2-.74.16-.76.12-.79.07h-1.6l-.8-.08-.8-.15-.76-.19-.77-.25-.73-.28-.67-.32-.75-.38-.68-.4-.67-.43-.65-.47-.63-.47-.6-.5-.57-.51-.55-.55-.53-.55-.5-.57-.49-.58-.45-.59-.43-.61-.42-.62-.38-.62-.37-.63-.35-.65-.33-.65-.1-.22-.37.32-.78.62-.87.51-.91.4-1 .3-1 .19h-1l-1-.07-1-.18-1-.3-.82-.47-.85-.51-.8-.62-.7-.72-.61-.8-.52-.86-.42-.92-.28-1-.18-1-.05-1 .06-1 .19-1 .3-1 .41-.91.54-.85.61-.79.59-.58.1-.13.11-.22.14-.28.16-.33.17-.39.18-.43.19-.45.4-1.1.41-1.22.42-1.33.43-1.4.9-3.12.94-3.3.48-1.71.5-1.74.53-1.73.55-1.73.59-1.74.61-1.71.65-1.67.37-.87.37-.83.38-.83.4-.82.42-.82.43-.8.48-.8.5-.78.54-.78.58-.77.62-.75.68-.75.75-.73.8-.7.9-.67.67-.43.08-.15.82-1.27.86-1.23.9-1.2.94-1.15 1-1.14 1-1 .57-.55.55-.51.56-.5.57-.5.58-.47.6-.47.62-.45.63-.43.64-.4.66-.4.67-.38.68-.37v-.01l.15-1.37.18-1.38.2-1.42.24-1.43.25-1.45.26-1.47.3-1.48.32-1.5.35-1.5.35-1.52.4-1.52.4-1.51.42-1.54.45-1.51.46-1.5.5-1.52.5-1.5.54-1.47.55-1.48.56-1.45.59-1.42.6-1.41.63-1.39.65-1.36.67-1.32.7-1.32.73-1.26.22-.35.45-1 .48-1.05.52-1 .53-1 .55-1 .58-1 .6-1 .65-1 .67-.93.7-.92.73-.9.79-.86.9-.95.51-.47.65-.52.42-.31.42-.27.8-.42.11-.06.52-.22.53-.2h.12l.67-.19.68-.11h.1l.82-.08h.91l.92.1.88.2h.1l.87.3.82.38.08.05.75.45.68.52.07.06.53.5.5.55.07.07.35.47.32.46.4.17.8.37.78.41.75.45.72.49.36.28.29-.25.73-.63.75-.62.77-.58.78-.59.8-.55.82-.55.83-.51.83-.49.87-.46.87-.45.9-.44.9-.4.91-.36.94-.35 1-.32 1-.28 1-.27 1-.23 1-.19 1-.16 1-.15 1-.1 1.05-.07h2.31l-.41-.61-.1-.17-.37-.67-.23-.5-.3-.78-.22-.67-.23-.85-.19-.78-.18-.78-.17-.8-.15-.79-.15-.81-.21-1.55-.15-1.57-.1-1.58v-3.15l.06-1.57.1-1.55.15-1.57.2-1.55.24-1.53.16-1.64.32-1.54.35-1.51.38-1.52.42-1.52.45-1.5.47-1.5.5-1.48.51-1.48.55-1.49.57-1.46.58-1.47.62-1.47.47-1.11v-.09l-.72-3.18-.68-3.2-.63-3.25-.25-1.35-.42.42-.7.75-.73.76-.75.75-.75.74-.79.71-.78.7-.8.69-.8.66-.83.65-.85.62-.87.6-.88.57-.92.55-.93.53-1 .48-1 .45-1 .42-1 .38-.82.24-.87.21-.6.09-.82.15h-1.97l-.55-.08h-.2l-.63-.14-.62-.18-.18-.07-.69-.26-.65-.34-.16-.08-.67-.42-.62-.46-.15-.12-.56-.52-.52-.56-.12-.14-.43-.58-.4-.63-.1-.17-.28-.55-.25-.58-.07-.19-.18-.53-.15-.53v-.22l-.15-.88v-.22l-.06-.77v-1.25l-.16-.56-.27-1.19-.2-1.23-.13-1.23-.07-1.22v-2.4l.1-1.18.14-1.19.18-1.16.22-1.17.25-1.15.28-1.15.32-1.15.33-1.15.37-1.15.4-1.15.41-1.13.12-.32-.18-.22-.42-.53-.4-.53-.38-.57-.37-.57-.35-.58-.33-.58-.3-.6-.27-.6-.27-.6-.23-.62-.23-.68-.35-1.19-.29-1.25-.2-1.25-.13-1.23-.07-1.23v-1.22l.07-1.22.11-1.18.17-1.17.23-1.16.27-1.14.3-1.13.33-1.1.39-1.1.41-1.08.44-1.07.46-1.05.5-1 .52-1 .55-1 .55-1 .6-1 .6-1 .62-1 .65-1 .65-.95.66-.93.69-.92.7-.92.71-.9.72-.88.72-.87.73-.86.75-.84.75-.83.75-.82.77-.81 1.5-1.52 1.53-1.47 1.52-1.4 1.51-1.31 1.5-1.24 1.45-1.13.75-.57.74-.51.71-.5.55-.37.12-1.4.27-3.25.33-3.22.35-3.18.38-3.1.39-3.18.28-2.12.33-2.4.42-2.6.25-1.38.25-1.42.28-1.45.32-1.47.33-1.5.37-1.5.4-1.51.43-1.52.47-1.52.52-1.51.55-1.5.6-1.5.63-1.44.37-.75.36-.73.4-.72.4-.71.42-.7.45-.7.47-.7.5-.67.51-.68.55-.65.59-.65.61-.64.67-.61.68-.59.74-.56.78-.55.82-.5.8-.44 1-.48.94-.42 1-.38.95-.37 1-.31 1-.29 1-.23 1-.22 1-.16 1-.12 1-.08h1l.42-.25.6-.33.61-.33.64-.32.65-.28.66-.29.69-.25.7-.23.71-.22.74-.18.75-.15.76-.13.77-.1.78-.05h1.62l.82.05.81.09.82.11.83.17.82.22.8.23.82.28.78.34.78.35.77.4.75.43.45.3.7-.47 1.52-.95.93-.57 1-.58 1.05-.6 1.13-.62 1.18-.65.97-.79 1.3-.65 1.35-.65 1.39-.63 1.41-.64 1.47-.6 1.48-.56 1.52-.54 1.53-.5 1.54-.43.81-.22.8-.18.82-.17.8-.15.83-.13.82-.1.85-.08.85-.07h2.65l.92.09 1 .15 1 .2 1 .25 1 .35 1 .41 1 .5.95.6.93.69.88.78.55.6.49.55.5.65.66 1 .55 1 .44 1 .31.85.27.76.15.54.3-.09 1-.31 1-.29 1-.26 1-.25 1-.22 1-.2 1-.17 1-.13 1.08-.08h1.08l.75.05zm-149 296.91-.48.89-.5.86-.5.84-.52.81-.15.22-.1.3-.38 1.12-.39 1v1.15l-.07 2.09v1.86l-.12 1-.1.42.33.33 1 .92 1 .88 1 .85 1 .8 1 .77.47.33.47.33.46.34.47.3.47.28.45.27.43.25.42.23.41.2.4.18.37.17.37.13.33.14.32.1.28.08.27.05.23.05h.15l.1-.33.08-.43.1-.49.09-.51.08-.59.07-.61.05-.67v-4.63l-.07-1.77-.1-1.82-.15-1.85-.18-1.9-.2-1.91-.13-1.1-3-.95-3.9-1.2-1.15-.34zm136.2-52.88-.48.6-1.13 1.42-1.22 1.53-1.3 1.65-.78 1 .76-.38 1.45-.68 1.44-.65.56-.25.14-.82.43-2.45.18-1zm-34.2 3.82-1.77 2.2.89-.09h1.23l1.12.05-.12-.65-.15-1.27-.08-1.26v-.34zm-29.5-12.25v.83l-.06.52-.1.5.75.41.45.29.68.5.57.5.55.51.66.74.65.8.55.81.49.8.43.82.38.82.32.8.3.8.25.81.23.8.2.8.1.42 1-1.3 2.62-3.28.75-.95-.45-.1-.72-.19-.71-.21-.72-.24-.7-.28-.7-.3-.7-.33-.67-.37-.66-.4-.64-.43-.63-.45-.62-.49-.6-.5-.56-.53-.84-.83-.78-.85-.75-.9-.27-.35zm-22-24.77-.78.58-.77.59-.75.58-.7.55-1.28 1.1-1.15 1-.93.85-.67.64-.32.31-.31.37-.34.4-.35.43-.35.49-.36.53-.37.57-.38.6-.39.63-.36.67-.39.7-.36.73-.39.77-.36.78-.35.8-.37.85-.35.85-.33.87 1.33-1.62 1.87-2.35 1.86-2.35 1.85-2.37 3.67-4.73 1.82-2.35 1.26-1.6zm17.12 13-.43 1.28-.45 1.3-.15.4.51.22.14.05.51.26.5.3.12.09.17.13-.24-.88-.23-1.07-.17-1.07-.13-1.06v-.37zm40.38-12.53-.45.7-1.48 2.23-1 1.5-1.07 1.68-1.26 1.82-.82 1.16.72-.55.55-.41.3-.39 2.91-3.85 1.59-2.11.26-2v-.18zm-17-4.55-.47.61-.45.64-.45.63-.43.63-.43.62-.4.63-.39.62-.1.17.12-.07 1.14-1.6 1.08-1.59 1-1.51v-.09zm-9.85-14.9h-1.32v.68l.1 1v.31l.37-.45 1.35-1.55zm-18.68-5.7-.5.86-.5.85-.54.84-.13.2h.5l.83.05.82.1v-3.72zm36.23-12.7-.32.95-.31.91-.34.9-.35.9-.35.85.67-.48 1-.73v-.62l.18-2.45.12-1.4zm52.73-36.69-1.6 3.79-.43 1 .43.14.82.31.77.4.55.38v-7.39zm-60.2-23.4-.46.72-.49.7-.45.72-.93 1.5-.88 1.51-.87 1.57-.83 1.58-.82 1.62-.78 1.65-.79 1.68-.73 1.7-.73 1.72-.52 1.27 1.9-2.92.13-.2.49-1.1.7-1.55.4-.85.41-.83.45-.85.49-.85.51-.87.57-.87.62-.86.7-.89.76-.86.57-.57.23-1 .39-1.95.18-1.05v-.2zm-30.83 5.94-.1.13.2 1.65.08.58.2-.38v-2.45zm49.12-40.7-2.52 1.56-2.55 1.59-2.6 1.58-5.18 3.13-2.14 1.29h.09l.86-.26.37-.09.5-.1.53-.08h1.84l.63.05.65.1.28.05.67.15.65.22.27.1.61.25.6.32.25.13.55.33.52.39.23.18.44.37.41.4.2.21.55.64 1-2.72 1.25-3.32 1.27-3.3 1.32-3.26.45-1.07zm76.9-28.07-.8.65-.84.72-.86.75-.89.81-.88.85-.92.92-.91.93-.94 1-.95 1-1 1-.33.37-.27.53-1.35 2.5-1.3 2.4-1.18 2.34-1.18 2.11v1.22l-.05.57-.1.86-.13.95-.32 2.22-.37 2.55-.35 2.6-.15 1.18-.11 1.09-.09.88v.68l-.05 1.12v2.92l.15-.35 1.11-2.69 1.15-2.68 2.29-5.28 2.31-5.25 2.32-5.2 2.32-5.29.36-.75.52-1 .63-1.33.75-1.6.82-1.82.4-.93.42-1 .4-1 .38-1 .23-.61zm-107.42-8.3-1 1.5-1 1.5-1 1.53-1 1.55-1 1.55-.95 1.57-1 1.58-.35.62.08.06.33.35.62-.91 1.45-2.19 1.42-2.21 1.4-2.27.66-1.12.67-1.13.65-1.13.22-.39v-.8zm49.22 6h.06l.42-.47zm48.15-30.5-.62.33-.66.39-.7.43-.74.47-.75.5-.76.51-1.65 1.17-.34.23v.27l.06.92v2.7l-.06.88-.09.88-.11.87-.12.88-.17.87-.16.87-.19.88-.2.87-.23.9-.47 1.7-.53 1.75-.58 1.75-.62 1.75-.61 1.73-.68 1.75-.72 1.75-.72 1.7.14.2.26.45.44-.81 1.3-2.59 1.28-2.61 1.25-2.62 1.22-2.6 1.16-2.55 1.1-2.57.5-1.22.5-1.23.46-1.2.44-1.18.41-1.17.4-1.12.35-1.08.34-1 .3-1 .26-1 .22-.92.2-.85.15-.8.07-.35zm-55.18-10.15-.35.05-.39.07-.4.06-.43.09-.45.11-.43.1-1 .3-1 .34-1.08.38-1.1.43-1.12.45-1.13.5-1.12.5-1.08.54-1.11.53-1 .53-1 .54-.94.51-.86.5-.8.47-.7.42-1.2.75-.15.11.08.37.17.73.15.75.11.75.1.74.07.75v.73l.05.75v.53l.82-.78.91-.87.94-.86.93-.84 1-.83 1-.82 1-.81 1-.79 1-.78 1-.77 1-.75 1-.73 1-.72 1.05-.71 1.06-.69 1.09-.66 1.1-.67 1.02-.65.31-.17v-.23l-.05-.27zm-150.99 344.98 1.34.1 1.33.15 1.37.2.7.14.71.16.7.19.69.21.66.24.67.28.67.28.63.34.62.35.6.38.58.4.57.43.53.45.52.47.48.48.47.5.43.54.42.51.36.54.42.61.58 1 .07.13.43-.33 1.34-.95 1.3-.87.71-.45.69-.4.7-.4.7-.37.73-.35.75-.35.78-.3.82-.3.87-.25.93-.21 1-.15.71-.07h2.09l.33.05.52.1.53.11.3.09.38.11.39.14.38.15.27.13.4.18.38.2.37.24.25.15.36.26.37.27.33.3.24.2.31.3.3.32.29.33.2.23.25.34.23.33.22.35.16.28.19.34.18.35.22.5.3.71.25.72.21.77.17.78.12.78.08.8v1.64l-.08.8-.12.8-.18.76-.23.75-.27.74-.28.68-.34.65-.35.62-.38.6-.38.56-.42.54-.42.5-.48.53-.83.82-.92.8-.95.71-1 .67-1 .6-1 .57-1 .53-1 .5-1.05.47-1.08.45-1.1.41-1.12.39-1.13.38-1.15.35-1.17.35-1.18.32-1.18.3-1.22.3-1.22.26-1.21.27-1.22.23-.33.37-.54.72-1.51 2-.62.8-.3.35-.38.42-.44.42-.43.36-.48.34-.5.3-.52.28-.53.23-.55.19-.55.16-.57.12-.58.07-.59.05h-1.16l-.57-.1-.57-.12-.56-.17-.55-.2-.52-.25-.52-.26-.5-.32-.46-.35-.44-.38-.41-.4-.39-.44-.36-.46-.32-.49-.28-.51-.25-.52-.1-.25h-5.38l-1-.05-1-.07-1-.08-1-.1-1-.12-.95-.15-.94-.16-.93-.2-.93-.25-.95-.3-1-.39-.68-.31-.35-.19-.33-.18-.64-.37-1-.7-.77-.6-.37.33-.4.3-.42.27-.43.27-.43.21-.55.27-.7.3-.72.27-.72.23-.72.39-.72.16-.72.15-.71.14-.7.1-.7.06-.7.05h-2.1l-1.27-.08-1.28-.17-1.25-.21-1.22-.27h-.18l-.45.07-1.07.37-1.08.35-1.12.32-1.11.28-1.14.27-1.16.21-1.19.2-1.2.15-1.21.1-1.24.07h-1.65l-.55-.05-.55-.07-.53-.13-.53-.15-.54-.19-.5-.21-.5-.27-.47-.28-.43-.32-.32.1-.56.14-.59.08-.58.05h-1.15l-.58-.08-.57-.12-.57-.15-.55-.18-.53-.23-.52-.27h-.05l-.58-.07-1.17-.18-1.2-.22-.71-.18-.72-.19-.75-.25-.8-.3-.87-.38-.6-.32-.33-.18-.32-.22-.28-.18-.38-.28-.39-.3-.23-.2-.3-.25-.28-.29-.27-.28-.18-.22-.34-.4-.3-.41-.08-.12-.2-.32-.2-.31-.07-.12-.21-.42-.2-.43-.09-.2-.2-.52-.16-.53-.05-.2-.1-.4-.07-.4-.07-.42v-2.45l.07-.41v-.19l.09-.38.1-.38.11-.39.07-.16.18-.5.22-.49.08-.18.22-.42.25-.4.1-.16.23-.35.25-.34.35-.43.6-.63.57-.54.63-.51.2-.14v-.27l.05-.43.08-.43.1-.44.07-.3.13-.45.17-.43.25-.65.45-.93.48-.82.48-.75.52-.68.42-.49v-.26l.06-1.14.14-1.11.18-1.1.23-1.07.27-1.05.32-1 .36-1 .39-1 .43-1 .47-1 .5-.91.51-.92.55-.9.59-.87.6-.86.61-.84.65-.81.69-.8.68-.79.72-.76.73-.74.75-.73.77-.7.78-.68.82-.67.81-.63.85-.62.85-.6.87-.57.88-.55.92-.51.92-.5.93-.47.95-.43 1-.4 1-.39 1-.33 1-.3 1-.27 1.05-.23 1.07-.18 1.07-.14 1.1-.08h2.4l.41.07.44.08.25.07.5.11.48.17.48.18.22.1.52.24.5.28.46.32.19.11.36.27.34.28.33.3.32.32.15.17.35.41.33.44.3.45.12.2.23.41.22.44.2.45.08.21.13.39.14.36.1.39.05.25.1.5.06.48v1.67l-.05.9v.11h.19l.88.07.92.11.95.17 1 .27.68.23.4.15.39.17.35.16.46.24.45.26.3.2.47.32.43.33.27.22.3.27.28.28.27.28.22.25.25.29.23.31.23.32.19.27.3.5.26.51.15.3.22.49.18.5.1.31.15.47.12.48.07.35.08.44.05.45v1.86l-.08 1.05-.1.69.2-.09 1.07-.41 1.06-.4 1.1-.37 1.14-.35 1.13-.33 1.15-.29 1.18-.26 1.2-.24 1.22-.18 1.25-.17 1.25-.11 1.27-.07h2.6zm-.2 17.3-.45.6-.48.59-.5.53-.35.33 1.75-.11 1.83-.17v-1.57l-.05-.23-.05-.2-.05-.15h-.08l-.79-.11-.33-.05z" fill="#808080"/><path d="m105.75 43.78.9.19 1 .31.92.42.85.53.8.64.7.71v.07l.55.7.46.75.39.8v.13l.2.54.16.55.12.46.1.55.13 1.09v1.08l-.03 1.08-.3 1-.43 1v.1l-.13 1.27-.19 1.92-.3 3.3-.25 2.03-.17 1.9-.16 1.91-.14 1.94-.13 1.91-.12 1.94-.1 2-.08 1.93-.15 3.9-.1 3.88-.07 3.9v9.36l-.05 2.78-.09 2.77-.1 2.76-.11 2.77-.14 2.75-.15 2.77-.33 5.46-.37 5.47-.4 5.43-.44 5.47-.4 5.42-.4 5.38-.35 5.37-.33 5.35-.13 2.65-.14 2.66-.11 2.67-.1 2.65-.07 2.65-.07 2.63v82.92l-.06 15.6v7.8l-.07 7.8-.08 7.82-.1 7.8-.12 7.81-.15 7.8-.17 7.82-.18 7.8-.22 7.8-.25 7.82-.28 7.8-.3 7.8-.35 7.78-.37 7.8-.41 7.78-.45 7.79-.5 7.76-.54 7.77-.58 7.77-.62 7.73-.15 1.07-.3 1.05-.43 1-.57.93-.66.87-.79.75-.88.65-1 .53-1 .4-1.07.27-1.08.13h-1.08l-1.09-.23-1-.29-1-.43-.93-.57-.85-.66-.77-.79-.65-.88-.53-1-.4-1-.27-1.05-.13-1.08v-1.08l.61-7.69.59-7.66.51-7.69.49-7.68.45-7.7.41-7.7.37-7.72.35-7.71.3-7.74.27-7.73.25-7.73.21-7.75.19-7.75.16-7.77.15-7.75.12-7.77.1-7.76.08-7.77.07-7.77.05-7.78.07-15.55v-83.12l.06-2.78.09-2.77.1-2.77.11-2.75.14-2.76.15-2.75.33-5.47.37-5.47.38-5.45.42-5.41.4-5.4.38-5.39.37-5.36.33-5.37.13-2.65.14-2.67.11-2.65.09-2.65.08-2.65.07-2.65v-13.35l.1-4.08.17-4.07.08-2.07.12-2.05.12-2 .13-2 .15-2 .17-2 .18-2 .18-2 .3-3.28.2-2.05.22-2 .12-1 .13-1 .18-1 .15-.69.22-.73v-.15l.37-1 .06-.1.39-.73.45-.69.53-.63.05-.07.8-.76.9-.67 1-.53 1-.39.88-.22.9-.12h.92zm-9.12 10.47.1.35-.1-.37z"/><path d="m619.78 0 1.3.1 1.29.14 1.25.16 1.21.22 1.17.26 1.16.25 1.14.29 1.11.3 1.07.3 1.08.31 2 .64 2 .65 1.88.6 1.83.58.87.25.87.23.85.24.83.2.82.18.81.17.8.13.82.12 2.63.3 2.7.3 2.7.25 2.72.23 2.73.2 2.75.2 2.75.15 2.79.15 2.78.12 2.8.11 2.8.1 2.82.09 5.68.13 5.7.12 11.48.2 5.79.13 5.78.17 2.9.1 2.92.11 2.9.14 2.91.15 2.9.16 2.92.2 2.92.22 2.91.25 1.37.15 1.37.15 1.33.17 1.32.16 1.3.2 1.26.22 1.27.23 1.23.25 1.2.25 1.2.29 1.17.3 1.15.3 1.13.33 1.1.33 1.1.37 1.07.38 1 .39 1 .41 1 .44 1 .43 1 .47 1 .48.94.5.91.52.9.53.87.55.87.57.83.58.82.6.8.62.78.63.75.65.73.67.72.66.7.7.67.72.65.72.63.73.6.75.58.77.57.76.55.79.52.8.5.8.48.81.45.84.43.83.42.83.4.85.38.85.37.87.33.87.34.86.3.89.3.88.26.88.27.89.23.9.24.9.21 1 .39 1.78.31 1.85.29 1.85.23 1.87.2 1.88.15 1.9.12 1.92.08 1.91.05 1.94v6l-.05 2-.07 2-.08 2-.08 2-.24 4.05-.26 4.12-.23 4.06-.3 4.12-.25 4.2-.24 4.23-.1 2.1-.08 2.12-.07 2.11v26.73l.05 6.84.06 6.81.1 6.85.1 6.85.12 6.85.13 6.85.15 6.87.19 6.87.18 6.86.2 6.89.22 6.86.23 6.89.27 6.86.26 6.87.3 6.88.3 6.87.34 6.87.33 6.85.37 6.85.38 6.85.4 6.85.42 6.83.43 6.83.47 6.82.46 6.8.5 6.8.52 6.78.53 6.77.55 6.77.82 9.8.78 9.73.39 4.87.35 4.85.35 4.85.31 4.86.3 4.89.25 4.88.24 4.92.2 4.93.16 5 .12 5 .07 5.05v6.35l.1 1.65.13 1.88.15 2.08.17 2.24.16 2.36.12 2.44.05 1.28v3.87l-.05 1.31-.08 1.32-.12 1.33-.15 1.34-.2 1.33-.27 1.35-.3 1.28-.21.74-.2.66-.24.69-.25.68-.26.67-.3.68-.34.68-.36.67-.4.67-.42.66-.47.65-.5.65-.53.62-.58.6-.54.53-.56.49-.59.45-.6.43-.63.38-.65.37-.65.32-.67.3-.66.25-.67.21-.68.17-.65.15-.67.12-.73.08-1.17.08h-1.2l-1.15-.09-1.08-.15-1.05-.18-1-.23-.95-.25-.9-.29-.86-.28-.84-.32-.81-.3-1.49-.6-1.38-.58-1.27-.52-1.15-.45-.46-.16-.45-.15-.39-.12-.26-.07-.27-.05-.25-.05-1.28-.17-1.42-.17-1.45-.16-1.48-.14-1.54-.11-1.55-.12-1.58-.08-1.62-.09-1.63-.05h-8.4l-1.7.05-1.7.06-1.7.1-1.68.1-1.69.12-1.66.15-1.65.17-1.64.18-1.6.2-1.58.22-1.55.23-1.52.27-1.46.26-1.45.29-1.39.31-1.35.32-1.28.35-1.25.35-2 .62-2 .66-2 .69-2 .73-2 .77-2 .78-2 .82-2 .83-2.05.85-2 .87-4.13 1.78-4.17 1.82-4.2 1.81-2.11.92-2.15.9-2.15.88-2.17.89-2.18.85-2.2.85-2.24.81-2.23.79-2.27.75-2.28.71-2.3.69-2.33.65-2.34.58-1.2.3-1.2.27-1.2.25-1.2.23-1.21.23-1.22.2-1.93.32-2 .28-1.92.25-1.93.22-1.92.2-1.9.17-1.9.13-1.9.13-1.88.09-1.89.08-1.86.05h-9.25l-1.84-.07-1.81-.08-1.82-.08-1.83-.12-3.59-.25-3.58-.3-3.55-.33-3.55-.35-3.52-.4-3.5-.4-7-.84-6.9-.83-3.43-.4-3.42-.37-3.41-.35-3.4-.31-3.42-.27-1.68-.12-1.7-.11-1.7-.1-1.7-.09-1.7-.06-1.69-.05h-10.2l-1.73.04-1.73.08-25.8 1.55-25.8 1.52-12.9.75-12.9.71-12.92.69-12.9.65-6.46.3-6.47.3-6.47.28-6.46.25-6.47.25-6.47.23-6.48.22-6.48.2-6.49.18-6.48.15-6.5.14-6.5.11-6.5.09-6.52.06h-21.2l-2.73-.05-5.43-.14-5.42-.18-5.42-.22-5.38-.25-5.4-.28-5.37-.3-10.71-.62-10.69-.67-5.32-.3-5.31-.28-5.29-.25-5.28-.24-5.27-.2-5.26-.15-2.62-.06h-15.67l-2.6.05-2.6.07-2.58.08-2.6.08-2.58.14-2.57.06-2.58.15-2.58.18-2.57.2-2.58.24-2.57.25-2.57.28-2.55.3-2.56.32-2.55.36-2.57.37-2.55.42-2.55.43-2.53.47-2.55.5-2.6.53-1.9.4-2.84.55-3.63.68-4.27.77-4.78.83-2.57.42-2.63.43-2.7.42-2.75.42-2.78.4-2.8.38-2.8.37-2.8.33-2.75.32-2.74.26-2.66.24-2.59.2-2.51.15-2.4.08h-5.67l-1.07-.07-1-.08-1-.13-1-.15-1-.2-1-.25-1.07-.32-1.23-.45-1.07-.52-.7-.42-.61-.43-.64-.5-.38-.33-.6-.62-.22-.25-.6-.77-.18-.26-.45-.72-.17-.3-.33-.68-.28-.64-.32-.95-.25-.9-.18-.86-.14-.85-.08-.8-.07-.82v-2.33l.05-.82.11-1.52.17-1.56.22-1.57.26-1.6.3-1.62.34-1.63.35-1.65.36-1.65.39-1.65.8-3.27.81-3.21.77-3.07.7-2.88.32-1.32.26-1.25.25-1.13.19-1 .15-.88.1-.73.06-.59v-.45l.15-1.44.42-1.4.63-1.3.85-1.18 1-1 1.22-.82 1.32-.58 1.41-.35 1.45-.1 1.44.17 1.4.4 1.3.63 1.18.85 1 1.05.82 1.22.58 1.31.35 1.42.1 1.45v1.25l-.12 1.27-.18 1.31-.22 1.34-.26 1.36-.29 1.4-.31 1.44-.35 1.48-.74 3-.8 3.11-.78 3.15-.77 3.14-.35 1.51-.35 1.5-.3 1.45-.28 1.4-.25 1.34-.2 1.23-.17 1.17-.08.76h4.03l2.09-.08 2.2-.14 2.35-.16 2.43-.22 2.53-.27 2.6-.28 2.65-.33 2.69-.34 2.68-.38 2.68-.38 2.65-.4 2.62-.4 2.55-.42 2.47-.4 4.67-.74 4.15-.73 3.48-.67 2.7-.53 1.82-.37 2.67-.55 2.73-.53 2.73-.5 2.74-.48 2.73-.44 2.73-.4 2.74-.38 2.73-.35 2.73-.32 2.72-.3 2.73-.26 2.72-.24 2.73-.21 2.72-.19 2.72-.18 2.71-.13 2.72-.14 2.72-.1 2.71-.08 2.72-.07h16.23l2.7.05 2.72.05 5.38.16 5.39.2 5.38.24 5.37.25 5.36.3 5.37.3 10.7.61 10.67.64 5.31.28 5.32.28 5.32.25 5.3.22 5.3.17 5.3.13 2.63.05h20.8l6.45-.07 6.45-.08 6.43-.12 6.44-.13 6.45-.15 6.43-.19 6.42-.18 6.43-.22 6.43-.23 6.44-.25 6.41-.27 6.44-.26 6.43-.3 6.42-.3 12.86-.65 12.85-.69 12.87-.71 12.87-.74 25.8-1.53 25.85-1.53 1.88-.1 1.9-.09 1.88-.05h7.49l1.86.05h1.84l1.85.06 1.81.1 1.84.1 1.81.12 1.82.13 3.6.29 3.57.33 3.56.35 3.54.4 3.5.4 7 .83 6.9.84 3.44.4 3.4.36 3.41.35 3.39.32 3.38.28 3.4.24 1.67.1 1.68.08 1.68.08 1.69.05h10.08l1.68-.06 1.69-.09 1.68-.1 1.68-.13 1.7-.15 1.69-.17 1.7-.2 1.7-.21 1.7-.25 1.7-.27 1-.17 1-.2 1-.2 1-.2 1-.23 1-.23 2-.52 2-.55 2-.6 2-.63 2-.67 2-.72 2-.73 2-.77 2-.8 2-.81 2-.85 2.05-.87 2-.87 4.15-1.8 4.17-1.81 4.2-1.82 2.13-.9 2.15-.9 2.15-.88 2.17-.87 2.18-.85 2.22-.83 2.21-.8 2.25-.79 2.25-.73 2.3-.72 1.59-.45 1.63-.43 1.67-.4 1.7-.38 1.71-.35 1.75-.32 1.77-.3 1.8-.28 1.8-.25 1.83-.22 1.85-.22 1.85-.18 1.87-.15 1.87-.15 1.88-.12 1.88-.1 1.89-.06 1.86-.07h9.3l1.82.06 1.8.09 1.77.1 1.76.11 1.74.15 1.7.15 1.66.19 1.65.2 1.69.21 1 .17 1 .22.93.25.89.26.86.29.85.31 1.5.59 1.44.58 1.33.55 1.25.52.53.2.52.18.48.17.44.13.38.1h.1v-.11l.07-.2.08-.24.07-.23.06-.23.15-.64.14-.66.11-.75.09-.79.08-.86v-5.84l-.1-2.15-.15-2.17.12-2.08-.16-2.12-.14-2.06-.11-2v-6.9l-.07-4.89-.11-4.85-.15-4.83-.2-4.82-.22-4.78-.27-4.78-.28-4.79-.32-4.78-.33-4.78-.35-4.8-.38-4.8-.79-9.69-.81-9.8-.55-6.8-.54-6.81-.51-6.84-.5-6.85-.49-6.85-.45-6.86-.45-6.87-.41-6.88-.4-6.9-.39-6.89-.36-6.9-.35-6.91-.34-6.9-.3-6.92-.3-6.92-.26-6.91-.27-6.92-.23-6.92-.24-6.9-.2-6.91-.18-6.92-.17-6.9-.16-6.92-.14-6.9-.11-6.88-.1-6.88-.09-6.89-.08-6.86v-29.69l.05-2.26v-2.27l.07-2.23.08-2.24.1-2.21.25-4.37.25-4.3.29-4.2.26-4.13.27-4 .22-3.93.08-1.9.08-1.89.07-1.85v-8.78l-.08-1.64-.09-1.6-.13-1.55-.15-1.51-.36-1.47-.22-1.43-.25-1.39-.28-1.35-.15-.61-.17-.64-.17-.61-.16-.62-.19-.6-.2-.58-.2-.59-.2-.55-.21-.55-.24-.55-.23-.51-.25-.52-.25-.5-.25-.5-.27-.48-.28-.47-.28-.47-.3-.45-.3-.45-.32-.43-.33-.42-.3-.43-.35-.4-.36-.4-.39-.4-.38-.38-.4-.39-.42-.38-.43-.37-.45-.36-.45-.35-.48-.37-.5-.35-.52-.33-.55-.34-.55-.33-.57-.32-.6-.31-.6-.32-.63-.3-.67-.3-.68-.3-.72-.28-.73-.27-.77-.27-.78-.26-.82-.25-.83-.25-.87-.24-.9-.21-.92-.22-1-.2-1-.2-1-.18-1-.17-1-.17-1.1-.15-1.1-.13-1.15-.13-1.18-.12-2.78-.2-2.77-.2-2.77-.2-2.78-.17-2.8-.13-2.8-.14-2.82-.16-2.81-.1-5.67-.15-5.7-.14-11.45-.18-5.75-.11-5.76-.15-2.89-.09-2.9-.1-2.88-.1-2.88-.13-2.94-.15-2.89-.17-2.88-.2-2.86-.23-2.89-.25-2.88-.27-2.88-.32-2.9-.35-1.25-.16-1.24-.22-1.21-.23-1.19-.2-1.16-.28-1.14-.3-1.1-.3-1.08-.34-2.05-.63-2-.63-1.89-.62-1.81-.57-.85-.25-.85-.25-.84-.21-.8-.2-.78-.17-.78-.17-.75-.11-.74-.1-.71-.09-.72-.05h-2.07l-.7.05-.68.1-.73.12-1 .23-1.05.25-1 .3-1.07.33-1.06.37-1.09.4-1.08.43-1.08.45-1.1.5-1.12.52-1.12.53-1.11.57-1.14.58-1.11.6-2.32 1.29-2.33 1.31-2.4 1.34-2.39 1.4-2.41 1.4-2.45 1.38-1.25.7-1.25.69-1.29.66-1.28.65-1.28.64-1.3.61-2 .89-1.95.86-2 .85-2 .84-2 .83-2.05.82-2.09.8-2.08.78-2.12.78-2.13.75-2.15.75-2.17.74-2.18.71-2.22.72-2.21.68-2.24.69-2.25.66-2.26.65-2.29.64-2.28.61-2.3.62-2.32.58-2.31.59-2.34.55-2.33.55-2.35.53-2.37.5-2.35.5-2.38.48-2.37.47-2.33.45-2.37.43-2.38.42-2.4.4-2.38.38-2.39.35-2.38.35-2.38.34-2.39.31-2.38.29-2.38.28-2.37.25-2.36.23-2.37.24-2.35.2-2.35.18-2.35.15-2.33.15-2.34.12-2.31.11-2.3.09h-13.59l-2.21-.06-2.2-.09-2.19-.11-2.18-.01-2.15-.17-2.12-.16-2.1-.2-3.68-.47-3.65-.4-3.64-.4-3.61-.43-7.17-.88-7.12-.89-7.06-.86-3.52-.42-3.5-.42-3.5-.38-3.48-.38-3.47-.35-3.47-.32-3.45-.3-3.45-.27-3.43-.2-3.45-.18-3.43-.17-3.45-.1-3.45-.07h-8.57l-1.73.05-1.72.07-1.71.1-1.74.08-1.71.12-1.74.13-1.71.15-1.74.17-1.73.16-1.73.2-1.74.22-1.73.23-1.75.25-1.7.27-1.7.28-3.45.59-3.45.63-3.47.72-3.48.71-3.47.74-3.5.76-3.5.79-7.07 1.63-7.08 1.63-3.57.84-3.58.8-3.6.8-3.6.78-3.63.75-3.64.73-3.65.69-3.66.65-3.67.6-1.85.28-1.85.28-1.87.25-1.85.25-1.86.22-1.87.22-1.87.18-1.88.18-1.87.15-1.88.15-1.9.12-1.88.08-1.9.09h-9.54l-1.91-.05-1.94-.1-1.91-.12-1.94-.08-1.63-.15-1.63-.18-1.64-.2-1.6-.23-1.63-.24-1.6-.29-1.6-.3-1.59-.31-1.58-.34-1.57-.36-1.54-.4-1.52-.4-1.55-.4-1.55-.42-1.53-.43-1.55-.45-3-.92-3-1-3-1-3-1-2.95-1-2.92-1-5.8-2-2.85-1-2.83-1-2.82-.92-2.78-.87-2.87-.69-1.37-.38-1.37-.39-1.35-.36-1.33-.37-1.35-.32-1.35-.32-1.33-.3-1.32-.26-1.31-.25-1.32-.24-1.32-.21-1.28-.2-1.3-.17-1.28-.13-1.29-.12-1.26-.1-1.27-.07h-5l-1.32.07h-1.46l-1.42-.38-1.35-.55-1.22-.77-1.08-1-.9-1.14-.67-1.28-.45-1.38-.2-1.45v-1.45l.3-1.42.55-1.35.82-1.21 1-1.07 1.14-.9 1.28-.68 1.38-.44 1.45-.2 1.52-.08h4.82l1.6.06 1.6.09 1.58.11 1.58.15 1.57.19 1.57.2 1.56.23 1.55.25 1.57.27 1.53.3 1.55.31 1.54.35 1.53.35 1.52.37 1.51.4 1.52.4 1.52.42 1.51.43 3 .88 3 .94 3 1 2.95 1 2.93 1 5.82 2 2.9 1 2.88 1 2.87 1 2.85.94 2.83.9 2.85.85 1.38.4 1.4.4 1.4.38 1.4.37 1.4.33 1.39.33 1.38.32 1.38.3 1.29.15 1.37.25 1.36.24 1.37.21 1.37.2 1.35.17 1.35.15 1.35.12 1.7.13 1.68.1 1.7.08 1.7.07h6.8l1.7-.05 1.7-.07 1.7-.1 1.72-.1 1.7-.13 1.71-.14 1.72-.16 1.72-.19 1.71-.18 1.72-.22 1.72-.21 1.73-.24 1.72-.25 1.71-.26 3.49-.59 3.46-.61 3.47-.65 3.5-.7 3.48-.72 3.5-.77 3.52-.76 3.52-.8 3.53-.82 7.1-1.65 7.1-1.63 3.58-.8 3.6-.79 3.59-.76 3.61-.74 3.62-.71 3.63-.67 3.64-.62 1.83-.3 1.83-.28 1.92-.27 1.9-.26 1.9-.24 1.9-.21 1.88-.19 1.9-.18 1.89-.17 1.86-.13 1.89-.13 1.86-.1 1.87-.1 1.87-.07h11.07l3.65.06 3.66.12 3.64.17 3.63.2 3.62.23 3.61.28 3.6.32 3.59.33 3.61.29 3.58.39 3.57.41 3.57.42 3.55.42 7.11.88 7.1.88 7.12.87 3.55.42 3.57.41 3.56.39 3.55.36 1.94.19 1.93.15 1.95.15 2 .11 2 .1 2 .07 2.05.07h10.55l2.15-.07 2.17-.08 2.17-.09 2.2-.11 2.2-.15 2.21-.15 2.22-.17 2.23-.18 2.24-.22 2.25-.22 2.25-.25 2.25-.26 2.26-.27 2.27-.3 2.27-.32 2.26-.33 2.27-.33 2.27-.37 2.26-.38 2.27-.4 2.27-.4 2.26-.44 2.27-.45 2.25-.45 2.25-.46 2.23-.5 2.24-.5 2.23-.52 2.22-.53 2.2-.55 2.2-.55 2.18-.59 2.17-.58 2.16-.6 2.15-.62 2.12-.63 2.12-.63 2.1-.67 2.08-.67 2-.66 2.05-.7 2-.7 2-.72 2-.72 1.95-.73 1.93-.75 1.9-.77 1.89-.76 1.85-.77 1.83-.78 1.8-.8 1.75-.8 1.07-.52 1.06-.52 1.09-.55 1.1-.58 1.1-.6 1.11-.6 2.29-1.3 2.36-1.37 2.37-1.4 2.43-1.4 2.45-1.42 2.54-1.4 1.3-.7 1.34-.68 1.34-.67 1.33-.65 1.37-.63 1.38-.62 1.4-.58 1.41-.57 1.45-.53 1.47-.5 1.5-.47 1.52-.43 1.57-.35 1.58-.38 1.4-.25 1.42-.19 1.4-.11 1.38-.07h1.35z"/><path d="m201.17 342.78h1.11l.35.07.27.06.28.07.27.08.28.09.35.13.22.1.22.1.21.1.22.12.22.1.28.18.2.12.2.15.2.13.2.15.18.15.25.22.2.18.2.18.19.19.16.2.24.28.15.17.13.2.15.18.12.18.18.3.13.22.12.22.12.23.16.33.1.22.09.22.08.21.07.24.08.21.07.27.06.23.07.24v.23l.05.25v3.48l-.05.29-.07.28-.07.27-.08.28-.08.27-.1.26-.12.27-.1.27-.13.25-.14.25-.15.25-.15.23-.15.23-.16.24-.17.23-.18.22-.2.21-.2.2-.2.2-.2.19-.22.2-.23.16-.22.17-.23.17-.25.15-.24.15-.25.13-.26.13-.25.12-.27.12-.27.1-.26.08-.27.08-.28.09-.27.06-.28.05h-.29l-.2.27-.78 1.08-.8 1.17-.82 1.23-.83 1.3-.83 1.32-.82 1.35-.78 1.32-.74 1.3-.7 1.25-.63 1.18-.37.7v2.43l-.07.29-.06.26-.07.29-.08.26-.1.27-.1.27-.12.26-.12.25-.13.27-.13.23-.15.25-.15.24-.17.23-.17.23-.18.22-.18.22-.2.21-.2.2-.2.2-.47.42-.45.35-.18.17-.22.15-.2.13-.22.15-.2.12-.2.13-.21.12-.22.11-.22.1-.16.09-.25.11-.25.1-.25.1-.27.1-.27.07-.26.08-.18.24-.27.05h-.13l-.28.05h-2.55l-.27-.05-.25-.05-.25-.07-.27-.06-.25-.07-.23-.08-.25-.1-.25-.1-.23-.1-.24-.12-.25-.14-.25-.13-.23-.15-.23-.17-.24-.15-.23-.18-.22-.18-.21-.19-.2-.2-.18-.18-.18-.2-.19-.2-.16-.22-.15-.2-.17-.22-.13-.23-.15-.22-.14-.23v-.05l-.14-.25-.13-.25-.1-.25-.12-.25-.1-.27-.08-.26-.08-.25-.07-.29-.07-.26v-.14l-.05-.26v-2.66l.05-.27.08-.58.2-.84.24-.75.43-1.16.5-1.2.58-1.24.64-1.28.7-1.33.75-1.4.8-1.45.85-1.49.9-1.5.91-1.51.94-1.5 1-1.5 1-1.45 1-1.4 1-1.37 1-1.28 1-1.24.95-1.11.55-.59.53-.55.57-.55.63-.55.73-.56.54-.35.23-.15.23-.14.25-.13.25-.13.2-.12.22-.1.22-.08.21-.1.22-.09.23-.08.25-.08.27-.09.25-.06.27-.07-.2-.05.27-.05h1.87zm16.38 18.75h1.25l.25.05.23.05.25.07.24.06.25.07.23.08.23.1.24.1.23.1.22.1.23.14.22.11.21.14.2.13.22.15.2.15.2.15.18.17.2.16.19.17.16.18.17.19.17.18.16.2.15.2.15.2.15.22.14.2.13.21.12.24.11.21.12.24.1.21.08.24.1.25.09.23.06.23.07.25.05.25.07.24v3.35l-.07.25v.25l-.06.23-.09.25-.08.23-.08.24-.1.23-.1.23-.12.22-.12.23-.13.22-.12.22-.15.2-.13.21-.15.2-.17.2-.15.19-.18.18-.17.18-1.05 1.07-1 1.08-1.12 1.19-1 1.16-2.2 2.52-2.25 2.57-2.26 2.58-1.17 1.3-1.17 1.28-1.2 1.24-1.2 1.21-1.26 1.14-1.15 1-.19.17-.2.15-.18.16-.22.15-.2.14-.21.13-.22.13-.22.12-.21.12-.24.11-.23.1-.23.1-.24.09-.23.08-.25.07-.23.06-.25.07-.25.05-.24.05h-2.51l-.25-.05-.25-.05h-.24l-.25-.05-.25-.08-.23-.07-.23-.08-.24-.1-.23-.08-.23-.12-.24-.1-.21-.12-.22-.13-.22-.13-.21-.14-.2-.15-.2-.15-.2-.15-.2-.16-.19-.17-.18-.17-.17-.18-.18-.18-.17-.19-.15-.2-.16-.2-.15-.2-.14-.2-.13-.21-.13-.22-.12-.22-.12-.23-.11-.22-.1-.23-.1-.23-.09-.24-.08-.23-.07-.25-.06-.23-.07-.25-.05-.25v-3l.05-.25v-.25l.06-.24.07-.25.07-.23.15-.22.1-.23.08-.24.12-.21.1-.24.12-.21.13-.22.13-.22.14-.21.15-.2.15-.2.15-.2.16-.2.17-.19.17-.18.18-.18.18-.17.95-.87.9-.86.95-1 1-1 1-1.1 1-1.16 2.18-2.47 2.23-2.57 2.29-2.6 1.18-1.31 1.18-1.29 1.19-1.28 1.15-1.17.18-.18.18-.17.2-.16.19-.17.2-.15.2-.15.21-.13.22-.14.22-.13.21-.13.22-.12.23-.1.24-.1.23-.1.23-.08.24-.09.23-.08.25-.07h.25l.23-.05.25-.05h1.52zm58.37-103.15h.4l.4.05.38.05.4.08.38.1.39.12.36.13.37.15.37.17.35.18.33.2.33.22.32.23.32.25.3.27.28.27.27.3.25.3.25.31.23.32.2.33.2.35.18.35.15.37.15.37.1.33.32.12 2.73 1 1.5.57.8.33.82.33.82.37.83.42.85.45.88.51.89.6.76.59 1.07.86.92.75 2 1.54 2 1.53 2.09 1.53 2.11 1.55 2.17 1.57 4.4 3.18 2.22 1.62 2.21 1.67 2.22 1.68 2.17 1.72 1.1.88 1.08.9 1.07.9 1.05.92 1.05.93 1 .95 1 1 .95.91.28.29.25.3.25.31.24.32.21.33.2.34.19.35.16.36.17.37.12.37.11.38.1.38.09.4.06.39v1.98l-.07.38-.06.4-.09.39-.11.38-.12.37-.15.38-.17.35-.16.37-.2.33-.22.33-.22.34-.25.31-.25.3-.28.29-.28.28-.3.27-.3.23-.32.23-.33.22-.35.22-.35.18-.35.17-.37.15-.38.13-.41.07-.38.08-.38.08-.4.07h-2.37l-.38-.09-.39-.08-.38-.12-.38-.11-.37-.15-.37-.15-.35-.19-.35-.2-.33-.21-.32-.22-.31-.25-.3-.25-.3-.27-.84-.83-.81-.78-.85-.77-.87-.78-.9-.77-.9-.78-.95-.77-.93-.77-2-1.56-2-1.55-2.07-1.58-2.14-1.55-4.35-3.15-2.2-1.6-2.2-1.6-2.2-1.64-2.18-1.66-2.15-1.69-1.08-.88-.92-.75-.1-.07h-.05l-.15-.1-.27-.13-.35-.17-.4-.18-.48-.22-.52-.2-1.23-.47-1.32-.48-1.43-.52-1.43-.53-.79-.32-.78-.33-.78-.37-.82-.4-.85-.46-.88-.57-.64-.45-.28-.23-.3-.25-.58-.52-.59-.6-.5-.6-.5-.68-.26-.45-.2-.35-.19-.35-.06-.17-.12-.25-.1-.23-.1-.27-.07-.15-.1-.3-.08-.3-.08-.3v-.17l-.06-.3-.07-.3v-3.04l.05-.3.06-.3v-.18l.06-.28.09-.3.08-.29.07-.18.13-.37.15-.35.08-.2.15-.33.19-.33.25-.47.46-.72.34-.43.25-.3.26-.3.29-.28.28-.29.3-.25.32-.25.33-.21.33-.22.34-.2.36-.17.35-.16.39-.15.36-.12.39-.12.38-.08.4-.07.38-.05h.8z"/><path d="m315.58 245.38h.82l.4.07.4.08.4.1.38.12.39.13.38.17.37.18.35.18.35.22.35.23.31.25.32.25.3.29.28.28.29.32.25.31.25.32.21.35.22.35.18.37.19.36.15.39.05.15.1.28.1.28.08.29v.16l.07.27.05.28v.45l.05.37v2.27l-.05.38-.07.38-.08.42v.28l-.09.29-.08.28-.23.77-.42 1-.45.93-.48.89-.5.83-.54.82-.55.8-.58.78-.6.8-.65.82-1.25 1.68-1.43 1.65-1.57 1.7-1.6 1.74-1.65 1.78-3.46 3.63-3.57 3.77-1.72 1.88-1.75 1.9-1.74 1.9-1.68 1.88-1.6 1.85-1.55 1.84-.7.88-.7.88-.68.87-.64.83-.6.84-.56.8-.54.78-.48.75-.45.72-.4.68-.35.65-.32.6-.26.55-.21.5-.15.43-.12.37-.07.27-.05.26v.97l-.07.42-.07.4-.1.4-.11.38-.15.38-.15.39-.17.36-.2.37-.2.35-.23.35-.24.32-.26.31-.27.32-.3.28-.3.29-.32.25-.31.25-.35.23-.35.2-.35.2-.37.17-.38.16-.39.14-.4.13-.38.1-.4.07-.42.06-.4.05h-1.63l-.4-.07-.4-.08-.4-.08-.4-.12-.38-.15-.39-.15-.36-.17-.35-.2-.37-.2-.33-.23-.34-.25-.31-.25-.3-.27-.3-.3-.27-.3-.27-.31-.23-.32-.23-.35-.22-.35-.18-.35-.19-.37-.16-.38-.14-.38-.11-.4-.1-.39-.09-.4-.06-.41v-2.42l.06-.67.1-.71.24-1.2.3-1.22.38-1.18.42-1.15.48-1.12.52-1.1.55-1.08.58-1.09.62-1.05.65-1.05.68-1.05.72-1.05.73-1 .75-1 .78-1.05.8-1 .82-1 .85-1 1.72-2.05 1.76-2 1.82-2 1.83-2 1.85-2 1.85-2 3.6-3.8 3.4-3.6 1.59-1.69 1.48-1.61 1.37-1.5 1.21-1.42 1.07-1.3.45-.55.42-.53.35-.49.3-.43.13-.2v-.72l.07-.4.08-.4.1-.4.12-.38.15-.38.15-.39.18-.36.2-.37.2-.35.23-.33.25-.34.27-.3.27-.3.3-.3.3-.26.31-.27.34-.23.33-.24.35-.2.37-.18.36-.18.39-.15.38-.14.4-.11.4-.1.4-.09h1.22zm-8.16 11 .1.29-.12-.37zm-20.55-118.71h1l.31.05.34.07.31.08.32.08.32.1.31.12.3.13.3.14.3.16.29.15.28.19.27.18.26.2.27.2.25.22.23.23.24.23.23.25.2.25.2.27.2.27.18.28.17.28.15.29.15.3.13.3.14.31.1.32.1.32.08.31.07.32.06.33.05.34v2.43l-.1.52-.22 1.11-.27 1.42-.26 1.52-.22 1.28v3.25l-.05.15-.05.17-.05.15-.05.16-.07.15-.05.15-.06.15-.07.15-.07.15-.39.15-.07.15-.08.15-.08.14-.09.15-.1.13-.08.15-.1.13-.08.14-.1.13-.1.13-.12.14-.1.11-.12.14-.1.11-.11.12-.12.12-.07.06-.11.12-.12.12-.12.1-.13.11-.12.1-.13.1-.13.1-.12.1-.13.09-.14.1-.15.08-.13.08-.13.09-.15.08-.14.08-.15.07-.15.08-.15.07-.15.07-.15.06-.15.07-.15.05-.15.07-.15.05h-.32l-.15.05h-4.33l-.17-.05h-.17l-.15-.06-.15-.05h-.16l-.15-.07-.15-.07-.15-.06-.15-.07-.15-.07-.15-.08-.15-.08-.14-.09-.15-.08-.13-.08-.15-.09-.13-.1-.14-.1-.13-.08-.13-.12-.12-.1-.13-.1-.14-.11-.11-.1-.12-.12-.12-.12-.11-.11-.12-.12-.12-.13-.1-.12-.11-.13-.1-.13-.1-.13-.1-.12-.08-.13-.1-.14-.08-.13-.09-.15-.08-.13-.08-.14-.09-.15-.06-.13-.09-.15-.06-.15-.07-.15-.07-.15-.05-.15-.06-.15-.05-.15-.05-.15v-.15l-.05-.15-.05-.17v-2.88l.06-.92.1-.88.14-.88.26-1.7.32-1.72.28-1.48.2-1-.06.31v.22-1.85l.05-.17v-.15l.07-.17v-.15l.05-.15.07-.16.06-.15.07-.15.08-.15.07-.15.08-.14.09-.15.08-.15.08-.13.09-.15.1-.13.08-.14.1-.13.1-.13.1-.14.12-.11.1-.14.11-.11.1-.14.12-.11.12-.12.11-.12.14-.11.11-.1.14-.12.11-.1.14-.1.13-.1.13-.1.14-.1.15-.08.13-.09.15-.1.13-.08.15-.07.15-.08.14-.08.15-.07.15-.07.16-.06.15-.07.15-.05.15-.07h.17l.15-.05.17-.05h2.45zm17.26-13h1.22l.3.06h.3l.28.09.3.08.29.1.28.1.28.12.29.13.26.13.27.15.27.17.25.17.25.16.23.19.25.2.22.2.23.2.2.23.22.22.18.23.2.23.17.25.16.25.17.27.15.27.15.26.12.27.13.28v.12l.19.2.2.23.18.25.17.25.16.25.17.27.13.27.15.26.12.27.12.28.11.29.09.3.08.28.08.3.07.3.05.3v4.2l-.05.08v.29l-.21.5-.25.46-.05.09v.08l-.05.08-.05.07-.05.08-.05.09v.08l-.05.07-.05.08-.05.08-.05.07-.08.12-.05.08-.07.07-.66.23-.06.08-.07.09v.06l-.07.09-.06.06-.07.09-.07.06-.06.09-.07.06-.07.07-.06.08-.09.07-.06.07-.07.06-.07.07-.06.07-.09.06-.06.07-.09.07-.06.06-.09.07-.06.05-.09.07-.08.06h-.07l-.08.07h-.08l-.09.07-.05.18-.07.05h-.08l-.08.05-.09.06h-.08l-.08.05h-.09l-.08.05h-.1l-.08.05-.09.05h-.18l-.1.05h-6.95l-.09-.05h-.1l-.08-.05h-.25l-.08-.05-.1-.05h-.17l-.08-.05-.1-.05h-.09l-.08-.05-.08-.06h-.09l-.08-.05-.08-.07-.09-.05-.06-.07-.09-.05-.08-.06h-.08l-.07-.07-.08-.07h-.07l-.08-.06-.07-.07-.08-.07-.07-.06-.07-.07-.08-.07-.07-.06-.06-.07-.07-.07-.07-.06-.06-.09-.07-.06-.07-.07-.06-.08-.07-.09-.07-.06-.06-.07-.05-.08-.07-.07-.05-.08-.07-.07-.05-.08-.06-.07-.05-.08-.05-.09v-.06l-.07-.09v-.08l-.05-.08-.12-.2-.05-.09-.05-.08-.05-.08v-.09l-.05-.08-.05-.08v-.09l-.05-.08v-.27l-.26-.56-.3-.82-.2-.68-.19-.65-.23-1-.15-.87-.07-.43v-4.24l.05-.1v-.18l.05-.1v-.18l.05-.09v-.08l.05-.1.05-.08v-.1l.05-.09.05-.08.05-.08.06-.09v-.1l.05-.08.05-.08.07-.09.05-.08.07-.08.06-.09.05-.06.07-.09.07-.08.06-.08.07-.07.07-.08.06-.07.07-.08.07-.07.06-.08.07-.07.08-.08.07-.07.07-.07.08-.06.07-.07.08-.07.08-.06.07-.07.08-.07.09-.06.08-.07.07-.05.08-.07h.08l.09-.06h.08l.08-.07h.17l.1-.07h.35l.08-.05h4zm8.2 7.63v.3-.32zm-14.33-.18-.07.15.05-.1v-.07zm36.07-22.42h1.23l.3.05.3.06.3.07.3.08.3.1.28.12h.12l.37.07.3.06.3.09.3.1.28.1.3.11.28.12.27.15.28.13.27.17.25.17.27.16.25.19.23.2.23.2.24.21.21.22.2.23.22.24.18.23.19.25.18.27.15.26.17.27.13.27.13.28.14.28.1.29.11.3.09.3.08.3.07.3v.3l.05.3v5.03l-.05.08v.27l-.05.07v.06l-.05.07v.13l-.05.07-.05.07-.05.06v.07l-.05.07-.05.06v.07l-.05.07-.05.06-.05.07-.05.05-.05.07-.05.06h-.05l-.05.07h-.05v.07l-.07.05-.05.06h-.16l-.07.05h-.05l-.07.07h-.05l-.06.05h-.3l-.05.05h-.92l-.08.05h-11.31l-.07-.05h-.25l-.06-.05h-.32l-.05-.05h-.18l-.07-.05h-.13l-.05-.05-.05-.07h-.12l-.1-.1-.05-.06h-.1l-.05-.07-.05-.07h-.05l-.05-.06-.05-.05v-.07h-.05l-.05-.07-.05-.06-.05-.07v-.07l-.05-.06v-.07l-.31-.47-.05-.06v-.2l-.05-.07v-.07l-.05-.06v-.14l-.05-.06v-7.98l.05-.07v-.13l.05-.07v-.13l.05-.07v-.06l.05-.07v-.07l.05-.06h.05v-.14l.05-.06h.05l.05-.07v-.07h.05l.05-.06.05-.07.05-.07h.05l.05-.06h.05l.07-.07h.05l.05-.07.06-.05h.1l.07-.06h.05l.07-.05h.18l.07-.05h.55l.06-.05h.4l.07-.05h4.13zm6.73 3.53.1.12-.1-.13zm54.28-11.66h.94l.46.06.45.1.47.12.43.15.44.17.43.2.42.21.4.25.38.25.37.29.36.31.34.32.31.35.3.35.29.38.25.4.23.4.22.42.18.43.17.44.13.45.12.45.08.46.07.47v2.75h-12.44v-1.11.36-3.03h.3-1.18 3.64l.5-.05h.85zm-5.66 15.1.2.15h-.1zm10.4-13 .2.18-.22-.23-.3-.22zm36.78 11.73h1.32l.31.06.32.07.33.08.3.1.32.12.3.13.3.14.3.15.28.16.29.17.28.18.27.19.26.21.25.22.24.22.23.23.23.23.22.27.2.25.18.27.19.28.18.28.2.34.15.3.15.28.12.3.1.23.11.32.1.32.1.31.07.32.07.33.06.32v5.4l-.05.07v.13l-.05.08v.07l-.05.07v.06l-.05.07-.05.07v.06l-.06.1v.14l-.05.06-.05.07-.05.05v.07l-.05.06-.05.07-.05.07-.05.06v.05l-.05.07-.05.07-.06.05-.05.06v.07l-.05.05-.07.07-.05.05h-.07l-.05.06-.06.05v.06l-.05.07v.07l-.05.06-.05.07-.05.07-.05.06v.07l-.05.05-.05.07-.07.06-.05.07-.05.05-.05.07-.07.06h-.05v.07l-.06.07h-.05l-.07.06-.05.05-.07.05-.06.07h-.05l-1.61.41h-.07l-.05.05h-.06l-.07.05-.07.06-.06.05h-.07l-.07.05h-.06l-.07.05h-.07l-.06.05h-.07l-.07.05-.06.05h-.14l-.08.05h-.42l-.08.05h-.37l-.08.05h-7l-.07-.05h-.37l-.06-.05h-.09l-.06-.05h-.14l-.08-.05h-.07l-.06-.05h-.07l-.07-.05h-.13l-.07-.05-.06-.05h-.07l-.07-.05h-.06l-.07-.07-.07-.05h-.06l-.07-.05v-.07l-.07-.05-.06-.06h-.05l-.07-.05-.05-.07-.07-.07-.05-.05-.06-.06-.05-.05-.05-.07-.07-.07-.05-.05v-.06l-.05-.07-.23-.14-.05-.07-.07-.05-.05-.07v-.06l-.05-.07-.05-.07v-.08l-.05-.07-.05-.06v-.07l-.05-.07-.05-.06v-.09l-.05-.06v-.07l-.05-.07v-.15l-.05-.06v-6.33l.07-.22v-1.55l.09-.18.05-.07v-.22l.05-.06v-.07l.05-.08v-.2l.05-.07v-.07l.05-.06.05-.07.05-.07v-.06l.05-.07.05-.07.05-.06.05-.06v-.24l.05-.06v-.22l.05-.07v-.06l.05-.09v-.13l.05-.07.05-.06.05-.07v-.13l.05-.07.05-.07.05-.06.05-.07v-.07l.06-.06.05-.07h.05l.05-.07v-.06h.07v-.07l.07-.07.05-.06.06-.05.05-.07h.07l.07-.07h.11l.07-.06h.12l.06-.05h.07l.07-.07h.06l.05-.05h.35l.07-.05h.2l.07-.05h.36l.07-.05h4.61zm-7.53 12.12.23.41v-.51zm14.7-1v.63l.05-.13v-.52zm18.36 20.83h1.42l.28.07.29.07.26.06.29.09.26.1.27.1.27.11.25.12.25.13.25.14.25.15.25.16.23.15.22.19.23.18.22.18.2.2.2.2.2.2.18.22.18.22.19.23.16.23.15.24.15.25.14.25.13.25.13.26.12.25.1.27.1.28.08.27.07.27.08.28.05.28v3.82l-.05.15v.13l-.05.14-.05.13-.05.13-.05.14v.13l-.05.13-.06.14v.21l.05.72.07.73v3.09l-.05.13v.28l-.05.14-.05.13-.05.13v.14l-.05.13-.05.13-.05.14-.06.13-.07.12-.05.13-.07.13-.06.12-.09.13-.06.12-.07.13-.08.12-.09.12-.06.11-.09.12-.1.12-.08.11-.08.12-.09.1-.1.12-.1.1-.08.11-.1.1-.1.1-.1.1-.1.1-.12.1-.1.1-.11.09-.1.1-.12.08-.12.1-.1.08-.11.09-.12.08-.12.08-.13.07-.12.08-.11.07-.14.08-.11.07-.14.07-.11.06-.14.07h-.13l-.13.07h-.14l-.11.05-.14.06h-.41l-.14.05h-4.93l-.13-.05h-.14l-.13-.05h-.13l-.14-.07-.13-.05-.13-.05-.14-.06-.11-.07-.14-.07-.13-.06-.12-.07-.13-.07-.12-.06-.11-.09-.14-.08-.11-.07-.12-.08-.12-.08-.11-.09-.1-.1-.12-.08-.12-.08-.1-.1-.11-.1-.1-.1-.1-.09-.1-.1-.1-.11-.1-.1-.1-.1-.1-.12-.09-.1-.1-.12-.08-.1-.08-.11-.09-.12-.08-.12-.08-.11-.09-.12-.08-.13-.07-.12-.08-.12-.07-.13-.06-.12-.07-.13-.07-.12-.06-.13-.05-.13-.07-.14-.05-.13-.05-.13-.05-.14v-.13l-.05-.13-.05-.14v-.28l-.05-.13v-1.89l-.05-.68-.09-1.05v-3.05l.09-1 .18-1.08.18-.75v-.72l.15-.45.33-.78.27-.49.07-.11.06-.12.07-.13.08-.12.07-.12.08-.11.1-.15.07-.1.08-.1.07-.1.08-.1.07-.1.08-.1.09-.1.08-.1.1-.12.1-.1.08-.1.09-.1.1-.08.08-.1.1-.09.1-.1.1-.08.1-.08.12-.1.1-.1.11-.09.1-.08.12-.1.12-.08.11-.09.12-.06.13-.09.12-.08.12-.07.11-.08.14-.07.13-.06.12-.07.13-.07.13-.05.12-.06h.13l.14-.07h.13l.13-.05h.27l.15-.05h.13l.14-.05h.98-.57 1.15zm5.77 14.27-.1.1-.1.08-.12.1-.1.1.34-.28.1-.12zm6.32 23.13h.96l.32.05.32.06.31.07.3.08.32.1.3.12.3.12.3.13.28.13.29.17.26.15.29.18.25.19.26.2.25.2.24.21.23.22.22.23.21.25.2.25.2.25.12.19.17.21.15.19.2.2.78.73.87.83.21.24.24.23.2.23.2.27.2.25.16.27.19.28.15.27.15.3.13.28.13.3.12.3.1.3.08.32.09.3.06.31.05.32.05.33v3.9l-.05.1v.29l-.05.1v.1l-.05.1-.05.1v.08l-.05.1-.05.1-.05.08-.06.1v.09l-.05.1-.07.08-.05.1-.07.08-.05.09-.06.1-.07.08-.07.08-.06.09-.07.08-.07.08-.06.09-.07.08-.07.08-.08.09-.07.06-.06.09-.09.08-.06.07-.09.08-.08.07-.07.08-.08.07-.08.06-.09.07-.08.07-.08.08-.09.07h-.08l-.08.06-.09.07-.08.07-.1.06h-.08l-.09.07h-.1l-.08.07-.1.05-.08.05h-.1l-.1.05h-.09l-.1.05-.1.05h-.1l-.08.05h-.2l-.1.05h-.2l-.1.05h-5.98l-.1-.05h-.1l-.1-.05h-.19l-.1-.05-.1-.05h-.1l-.08-.05h-.1l-.1-.05-.08-.05-.1-.06h-.09l-.1-.05-.08-.07-.08-.05-.1-.07-.09-.06-.08-.07-.08-.05-.09-.07-.08-.06-.08-.07-.09-.08-.08-.07-.08-.07-.09-.06-.08-.09-.07-.06-.85-.82-1-.92-.64-.65-.68-.75-.72-.88-.5-.73-.06-.09-.05-.1-.07-.08-.05-.1-.05-.08-.07-.1-.05-.09-.05-.1v-.1l-.05-.08-.05-.1-.05-.1v-.1l-.05-.1-.05-.08v-.1l-.05-.1v-.2l-.05-.1v-1.79.05-3.82l.05-.1v-.2l.05-.1v-.2l.05-.08v-.1l.05-.1.05-.1.05-.08.05-.1v-.09l.07-.1v-.1l.05-.08.06-.08.05-.1.07-.09.07-.08.06-.1.05-.08.07-.09.07-.08.06-.08.07-.09.08-.08.07-.08.07-.07.06-.08.09-.09.06-.06.09-.09.06-.08.09-.07.08-.06.08-.09.07-.06.08-.07.09-.07.08-.06.08-.07.09-.07.08-.06.1-.07.08-.07.09-.06.08-.05.1-.07h.08l.1-.07h.09l.1-.05h.08l.1-.06.1-.05.08-.05h.2l.1-.05.1-.05h.29l.1-.05h3.15zm14.66 34.8h1.22l.25.05.23.05h.24l.23.06.23.07.24.08.23.09.23.1.22.1.22.1.21.11.22.12.22.12.2.13.2.13.2.15.2.15.18.15.2.17.17.17.18.16.17.17.16.18.17.19.15.2.15.18.13.2.55.23.77.37.22.12.21.11.2.12.22.13.2.14.2.13.2.15.2.15.18.15.19.17.16.16.19.19.16.16.17.19.15.2.15.18.15.2.13.2.14.2.13.22.12.2.11.21.12.24.1.21.1.22.08.23.09.24.08.23.07.23.05.24.06.23.05.25v3.87l-.05.11v.24l-.05.11v.24l-.05.11v.22l-.05.12-.05.1-.07.11-.05.12-.05.1-.06.12-.07.1-.05.1-.07.11-.06.1-.07.1-.07.1-.06.1-.07.1-.08.1-.07.1-.08.1-.07.09-.08.1-.09.1-.08.08-.07.1-.08.08-.1.09-.08.08-.09.1-.08.08-.1.09-.08.08-.1.07-.09.08-.1.08-.1.07-.08.08-.1.07-.1.08-.1.07-.1.07-.1.06-.1.07-.12.07-.1.06-.1.05-.11.07-.1.07-.12.05h-.1l-.12.06-.1.05-.11.05h-.24l-.1.05-.11.05h-6.32l-.12-.05-.11-.05h-.22l-.12-.06-.11-.05-.52-.25-.32-.14-.25-.1-.21-.08-.62-.22-.55-.2-.43-.18-.12-.05-.1-.05h-.12l-.11-.07-.1-.05-.12-.06-.1-.05-.18-.1-.1-.07-.1-.05-.1-.07-.1-.06-.1-.07-.1-.07-.1-.06-.1-.07-.1-.07-.09-.06-.16-.14-.1-.06-.09-.09-.1-.06-.08-.09-.08-.06-.1-.09-.09-.08-.08-.08-.08-.09-.09-.08-.08-.08-.15-.17-.08-.08-.07-.09-.08-.08-.07-.08-.08-.09-.07-.08-.07-.1-.06-.08-.09-.09-.06-.1-.14-.2-.06-.1-.07-.1-.07-.1-.06-.1-.07-.1-.07-.1-.06-.1-.29-.5-.36-.75-.45-1.06-.05-.1v-.12l-.05-.12v-.11l-.05-.12v-4.98l.05-.11v-.24l.05-.11v-.12l.05-.12.05-.11.05-.1v-.12l.05-.12.05-.1.07-.11.05-.1.05-.12.06-.1.07-.1.07-.12.05-.1.06-.1.07-.1.08-.1.07-.1.07-.1.08-.1.07-.1.08-.1.07-.08.08-.1.08-.08.09-.1.08-.09.08-.1.09-.08.08-.08.08-.09.1-.08.09-.08.1-.09.08-.08.1-.07.1-.08.08-.07.1-.08.1-.07.1-.06.1-.09.1-.06.12-.07.1-.07.1-.05.1-.06.12-.07h.1l.11-.07h.1l.12-.05h.1l.12-.05.11-.05h.12l.1-.05h.23l.12-.35h2.88zm22 25.07h1.35l.49.08h.23l.23.05h.22l.23.07.22.06.22.09.23.08.22.08.2.1.21.1.2.1.22.12.25.15.5.15h.38l.24.05h.23l.22.05.23.07.22.08.21.07.22.08.22.1.21.1.22.1.2.1.2.12.22.12.18.13.2.13.18.14.2.13.17.15.18.15.19.15.16.17.17.16.15.17.17.18.15.19.13.18.15.18.13.19.12.2.13.2.12.2.12.2.1.21.1.2.1.22.08.22.08.21.09.24.06.21.07.22v.47l.05.23v4.38l-.05.12v.22l-.05.1v.21l-.05.12v.1l-.05.12v.2l-.05.1v.11l-.06.1v.1l-.07.1v.1l-.07.1-.06.1-.07.1-.07.09-.06.1-.07.1-.07.08-.06.1-.09.1-.06.08-.07.09-.08.1-.09.08-.75.08-.09.09-.08.08-.08.08-.09.09-.08.08-.08.08-.1.07-.09.08-.08.09-.1.06-.08.07-.1.08-.09.07-.1.07-.1.06-.08.07-.1.07-.1.06-.1.07-.1.05-.1.07-.1.05-.1.06-.1.05-.1.05-.12.07-.1.05h-.21l-.1.05h-.12l-.1.05h-.22l-.11.05h-4.55l-.5-.1-1.1-.29-1.1-.35-1.05-.35-1.05-.38-.69-.3-.1-.05h-.11l-.1-.05-.1-.05-.1-.05-.1-.05-.12-.07-.1-.05-.1-.06-.1-.05-.1-.07-.1-.07-.1-.06-.08-.05-.1-.07-.1-.07-.09-.06-.1-.07-.08-.08-.1-.07-.08-.07-.09-.08-.1-.07-.08-.08-.08-.07-.09-.08-.06.35-.08-.09-.09-.06-.06-.09-.09-.08-.08-.08-.07-.1-.08-.09-.07-.08-.06-.08-.09-.1-.06-.09-.07-.1-.07-.08-.06-.1-.07-.1-.07-.08-.06-.1v-.1l-.07-.1-.05-.1-.06-.12v-.1l-.05-.1-.07-.1-.05-.1-.05-.11-.05-.1-.05-.1v-.12l-.05-.1-.22-.15v-.21l-.05-.12v-5.25l.05-.1v-.34l.05-.11v-.1l.05-.12.05-.1v-.1l.05-.12.05-.1.05-.1.06-.1v-.1l.05-.11.07-.1.07-.1v-.09l.06-.1.07-.1.07-.1.06-.1.07-.08.08-.1.07-.08.07-.1.08-.09.07-.1.08-.08.08-.08.07-.09.08-.08.09-.08.35-.17.09-.08.08-.09.1-.08.1-.08.08-.07.09-.08.1-.07.08-.07.1-.06.08-.07.1-.07.1-.06.09-.07.1-.07.1-.06.1-.05.1-.07.1-.05h.1l.1-.07.1-.05.1-.05h.1l.1-.05h.21l.1-.05.12-.05h3.19zm-.68 16.66h-.35zm5.57-15.28h.23-.2zm27 17.12h.95l.25.05h.23l.23.05.22.05.23.06.24.07.21.08.24.07.21.1.22.08.22.1.21.12.22.1.2.13.2.12.2.13.2.14.22.15.31.05h.24l.23.05.23.05.24.07.21.06.24.09.21.06.24.1.21.09.22.1.22.1.2.11.21.12.2.13.2.12.2.13.19.15.18.14.18.15.19.16.18.17.17.15.16.18.17.17.15.18.15.19.15.18.13.2.14.2.13.2.12.2.11.2.12.22.1.21.1.22.1.22.08.21.09.24.06.21.07.24.07.23.05.23v4.35l-.05.1v.24l-.05.11v.22l-.05.1v.22l-.05.11v.1l-.07.1v.12l-.06.1v.1l-.07.1-.07.1-.05.1-.06.1-.07.1-.07.1-.08.1-.07.1-.06.08-.07.1-.08.1-.09.09-.06.08-.09.1-.08.08-.08.09-.09.08-.08.1-.08.08-.09.09-.08.06-.08.09-.1.08-.09.08-.1.07-.08.08-.1.07-.08.07-.1.06-.1.09-.1.06-.1.07-.1.07-.1.05-.1.06-.1.07-.1.05-.12.07-.1.05h-.1l-.12.06-.1.05-.1.05-.11.05h-.12l-.1.05-.12.05h-.1l-.11.05h-.24l-.1.05h-3.2l-.75-.07-1.8.52-.72-.12-.66-.15-.7-.16-.74-.2-.81-.29-.57-.23h-.2l-.1-.05-.1-.05-.1-.05-.1-.05h-.12l-.25-.14-.1-.05-.1-.06-.1-.05-.1-.05-.08-.07-.1-.07-.1-.05-.1-.06-.08-.07-.1-.07-.09-.06-.2-.15-.08-.07-.08-.07-.1-.06-.09-.07-.08-.07-.08-.08-.09-.07-.08-.08-.08-.07-.09-.08-.08-.08-.08-.09-.07-.06-.07-.09-.08-.08-.08-.08-.09-.1-.06-.09-.09-.08-.06-.1-.09-.08-.06-.1-.07-.1-.07-.09-.06-.1-.07-.1v-.08l-.07-.08-.06-.1v-.1l-.07-.1-.07-.1v-.2l-.06-.1v-.12l-.05-.1v-.42l-.05-.11v-6.59l.05-.1v-.2l.05-.11v-.1l.05-.1v-.19l.05-.1v-.1l.05-.1.07-.1.05-.1.06-.08v-.1l.07-.1.07-.1.06-.08.07-.1.07-.09.06-.1.07-.08.07-.08.08-.1.07-.07.06-.1.09-.08.06-.09.09-.08.08-.08.08-.09.09-.08.08-.08.08-.09.09-.08.08-.07.08-.08.1-.08.1-.07.09-.08.1-.07.08-.08.1-.07.1-.07.1-.06.1-.07.1-.07.1-.06.1-.07.1-.07h.1l.1-.06.1-.05.12-.07.1-.05.1-.05.11-.05h.1l.12-.05.1-.05h.12l.11-.05.1-.05h.24l.11-.05h2.62zm5.78 14.16-.08.09-.09.08-.08.08-.1.09-.08.08-.09.08.44-.38.15-.18zm.83-1 .06-.07v-.05zm36.42-31.73h1.23l.3.07.3.06.3.09.3.08.3.1.29.12.28.11.28.14.27.15.27.15.26.16.27.17.25.18.23.19.24.2.23.21.22.22.21.22.2.23.2.25.19.25.18.25.17.27.15.26.15.27.13.28.13.29.12.28.1.28.1.3.08.3.07.3.07.3v4.22l-.05.15v.15l-.05.13-.07.15-.07.13v.15l-.06.14-.09.15-.06.13-.07.13-.08.14-.09.13-.08.13-.08.14-.09.11-.08.14-.1.13-.08.12-.1.11-.1.12-.1.13-.1.12-.1.1-.12.12-.1.11-.12.1-.11.12-.1.1-.12.1-.13.1-.12.1-.12.1-.13.08-.12.1-.13.09-.12.08-.13.08-.5.09-.14.08h-.08l-.11.1-.15.13-.47.45-.53.54-.55.6-.57.63-.53.62-1 1.21-.81 1-.32.35-.1.1-.1.1-.1.12-.12.1-.1.1-.11.1-.12.1-.12.1-.11.1-.12.08-.12.1-.13.09-.12.08-.13.08-.12.09-.13.08-.13.08-.14.07-.13.07-.13.06-.14.07-.13.07-.15.06-.13.07h-.14l-.15.05-.13.05-.15.05-.15.05h-.15l-.15.05h-4.28l-.15-.05h-.3l-.15-.05-.15-.05-.14-.05-.15-.07-.13-.05-.15-.06-.13-.07-.15-.07-.14-.06-.13-.07-.13-.08-.15-.07-.12-.08-.13-.09-.14-.08-.13-.08-.12-.1-.13-.09-.12-.1-.13-.1-.12-.1-.11-.1-.12-.1-.12-.1-.1-.11-.11-.1-.1-.12-.12-.12-.1-.1-.1-.11-.1-.14-.1-.11-.08-.12-.1-.13-.09-.12-.1-.13-.08-.14-.08-.11-.09-.14-.06-.13-.09-.13-.06-.15-.07-.14-.07-.13-.06-.15-.05-.15-.07-.13-.05-.15-.06-.15v-.15l-.05-.14v-4.67l.05-.15v-.3l.05-.15v-.14l.07-.15v-.15l.07-.13.06-.15.07-.13.07-.17.06-.12.07-.13.07-.12.06-.11.07-.14.07-.11.25-.39.08-.13.08-.13.09-.12.08-.13.1-.12.1-.13.08-.12.1-.12.1-.11.1-.12.12-.12.1-.11.12-.1.1-.12.11-.1.12-.1.12-.1.11-.1.64-.75.68-.8.75-.84.82-.86.85-.89.88-.83.53-.48.52-.44.57-.45.63-.45.72-.46.51-.29.14-.06.15-.09.13-.06.13-.07.15-.07h.14l.15-.06.15-.05h.13l.15-.05.15-.05h.3l.15-.05h2.03zm24.52-21.67h1.63l.23.05h.22l.23.06.22.07.22.08.23.09.22.08.2.1.21.1.22.12.2.11.2.12.2.12.2.13.18.13.2.15.19.14.16.16.19.15.16.17.17.17.17.16.15.17.15.18.15.19.13.18.13.2.14.2.13.2.12.2.11.2.1.22.1.2.1.21.09.22.08.23.08.22.07.22.07.23.05.22v5.25l-.05.12v.22l-.05.1v.21l-.05.1v.1l-.05.07v2.75l-.05.11v.54l-.05.11v.1l-.05.1v.22l-.06.1v.1l-.07.1v.1l-.07.1-.06.1-.07.1-.07.1-.06.1-.07.1-.07.08-.06.1-.09.09-.06.1-.07.08-.08.1-.09.08-.06.09-.09.08-.08.08-.08.09-.09.08-.08.08-.08.09-.1.08-.09.07-.08.08-.1.07-.08.08-.1.07-.09.08-.1.07-.1.06-.08.07-.1.07-.1.06-.1.05-.12.09-.1.06h-.1l-.1.07h-.11l-.1.07-.1.05-.1.05h-.1l-.12.05h-.1l-.1.05h-.12l-.1.05h-.2l-.11.05h-7.51l-.1-.05h-.22l-.1-.05-.12-.05h-.1l-.1-.05h-.1l-.1-.05-.11-.05-.1-.07h-.1l-.09-.05-.1-.07-.1-.06h-.05l-.1-.06-.1-.05-.08-.07-.1-.07-.1-.06-.08-.09-.09-.06-.1-.07-.08-.07-.08-.08-.09-.07-.1-.08-.08-.07-.08-.08-.09-.08-.06-.09-.09-.08-.08-.08-.08-.09-.07-.08-.08-.08-.07-.09-.07-.08-.08-.1-.07-.08-.06-.1-.07-.09-.07-.1-.06-.08-.07-.1-.07-.1-.07-.1v-.1l-.06-.1-.05-.1-.07-.1-.05-.1v-.1l-.05-.1v-.22l-.05-.1v-.1l-.05-.11v-5.17l.12-.62.23-.85.24-.73.23-.67.28-.7.47-1.08.32-.63.35-.64.25-.4.05-.1.06-.08v-.08l.07-.1v-.09l.07-.08.06-.08.07-.09.07-.08.1-.15.08-.08.07-.09.08-.1.07-.08.08-.08.08-.1.09-.09.06-.08.09-.08.08-.09.1-.06.08-.09.09-.08.08-.08.1-.07.08-.08.1-.07.09-.07.1-.06.1-.09.08-.06.1-.07.1-.07h.1l.1-.06.1-.07.1-.05.1-.07.1-.05h.12l.1-.06.1-.05.11-.05h.1l.1-.05h.12l.1-.05h.22l.11-.05h1.49-.6 1.29zm6.58 13.3-.07.09-.06.1.18-.24zm-11.73-8.25-.37.24.1-.07h.1l.1-.07h.1l.1-.06zm1.26-.56h-.06.09zm26.22-33.62h.88l.44.05.43.08.42.12.38.1.82.26.41.17.4.17.4.2.39.21.36.24.37.26.33.27.34.3.31.3.3.33.29.34.25.36.25.37.21.38.2.39.19.4.16.41.14.42.11.43.09.44.06.43v4.77h-9.72l-1.86 4.05h-.7v-13.1h.85-.15 2.38z"/><path d="m677.68 113.33 1.27.17 1.25.25 1.22.35 1.21.42 1.19.51 1.15.57 1.13.67 1.08.71 1.07.79 1 .85.51.45.49.48.45.5.43.5.4.52.43.6.62 1 .58 1.1.5 1.12.4 1.12.34 1.11.26 1.14.2 1.11.17 1.12.1 1.12.05 1.1v2.21l-.07 1.12-.1 1.1-.11 1.12-.17 1.1-.18 1.11-.22 1.1-.23 1.1-.27 1.1-.28 1.1-.32 1.1-.35 1.1-.35 1.09-.38 1.08-.42 1.08-.42 1.07-.45 1.07-.46 1.06-.49 1-.5 1.05-.53 1-.55 1-.57 1-.56 1-.6 1-.64 1-.63.93-.65.92-.68.88-.7.89-.72.85-.75.83-.77.8-.8.78-.81.75-.85.72-.9.7-.92.65-1 .62-1 .56-1.06.54-1.1.46-1.15.4-1.22.34-1.17.23-.73.08-.65.07h-2.02l-.68-.05-.68-.1-.69-.12-.66-.15-.69-.18-.65-.22-.63-.25-.63-.26-.6-.32-.6-.33-.57-.37-.53-.38-.6-.49-.6-.55-.19-.18-.18-.18-.18-.2-.34-.37-.25-.28-.21-.3-.52-.69-.63-1-.54-1-.45-1-.36-1-.32-1-.23-1-.2-1-.14-1-.11-1-.05-1v-3l.07-1 .1-1 .08-.61v-.24l-.22-1-.16-1-.14-1-.1-1v-4l.07-1 .08-1 .12-1 .15-1 .18-1 .18-1 .24-1 .23-1 .27-1 .3-1 .31-1 .34-1 .36-1 .39-.95.4-1 .43-.94.47-.91.46-.92.5-.9.54-.88.55-.89.58-.85.62-.85.63-.81.67-.8.68-.79.73-.76.77-.74.8-.7.85-.68.88-.65.92-.6 1-.57 1-.51 1.06-.47 1.09-.42 1.15-.33 1.16-.27 1.22-.2 1.23-.1h1.25zm-3.53 35.54v-.65zm-.13-5-.2.19-.24.23-.25.25-.26.3-.27.33-.27.35-.28.4-.27.42-.28.43-.15.29.35-.44.48-.58 1-1.37.65-.83z" fill="#fff"/><path d="m684.42 115.93h2.15l.38-.05h2.5l.35.07.35.08h.1l.37.1.33.12.5-.18.69-.24.7-.2.71-.18.74-.13.75-.1.75-.07h2.3l.76.08.77.12.75.15.75.2.73.21.74.27.7.28.7.34.68.35.67.36.65.4.63.44.62.45.56.43.54.43.51.47.52.48.48.5.47.52.43.53.44.54.4.55.38.56.37.59.33.6.32.58.28.62.27.61.25.62.21.62.22.68.32 1.2.23 1.25.15 1.27.08 1.23v1.23l-.05 1.22-.06.6.15.37.28.93.18.87.14.81.1.79v3.41l-.11 1.22-.15 1.12-.17 1-.18 1-.32 1.48-.22 1-.36 1.52-.25.9-.25.92-.29.95-.31 1-.35 1-.37 1-.4 1-.43 1-.47 1.06-.5 1.07-.55 1.07-.58 1.06-.64 1.07-.68 1-.73 1.05-.8 1-.84 1-.5.55-.48.48-.5.49-.53.46-.55.47-.59.45-.64.7-.64.41-.66.4-.69.37-.73.33-.75.32-.77.27-.81.25-.82.18-.85.17-.87.1-.86.06h-1.77l-.88-.08-.87-.14-.88-.18-.85-.23-.85-.27-.84-.3-.7-.3-.7-.33-.66-.37-.65-.38-.64-.4-.61-.44-.59-.45-.55-.46-.51-.53-.52-.52-.5-.52-.46-.53-.44-.55-.41-.57-.4-.56-.14-.19-.65-.11-.71-.17-.64-.17-.65-.18-.65-.22-.63-.21-.63-.27-.64-.27-.65-.31-.83-.45-.85-.5-.8-.54-.77-.56-.75-.62-.7-.65-.66-.67-.62-.7-.58-.73-.54-.75-.5-.75-.45-.78-.41-.79-.37-.8-.33-.8-.3-.8-.25-.8-.24-.81-.2-.8-.15-.8-.15-.8-.1-.79-.08-.8-.07-.78v-3.91l.07-.78.15-1.45.2-1.47.26-1.45.32-1.42.35-1.4.38-1.36.42-1.34.45-1.31.47-1.27.5-1.25.51-1.2.54-1.15.53-1.13.57-1.07.56-1 .6-1 .6-1 .55-.8.64-.82.68-.8.78-.78.6-.5.2-.17.2-.15.22-.15.33-.23.24-.15.21-.15.24-.13.35-.2.25-.14.23-.11.25-.12.37-.15.23-.1.25-.1.25-.08.72-.24 1-.25 1-.15.9-.08.82-.05h2.01zm-570.8 299.49h.53l.42.07.41.06.42.1.42.12.4.13.4.15.38.19h.07l.4.22.38.21.37.25.36.29.34.28.33.3.32.33.05.05.28.34.27.35.25.35.23.36.2.39.18.38v.08l.19.44.15.45.13.45.12.45v.11l.07.4.07.4v2.15l-.08 1.1-.15 1.09-.2 1.06-.23 1-.3 1-.34 1-.35.95-.4.93-.43.9-.45.89-.48.85-.5.83-.52.82-.12.16.07.22.1.37.1.38v.07l.06.41.07.4v2.12l-.05.37v.25l-.1.45-.12.46-.16.6-.34.87-.33.77-.35.73-.38.73-.42.74-.47.8-1 1.63-1.24 1.9-1.06 1.57.08.13.1.13.23.4.24.4.18.4.08.15.15.4.15.4.12.4.07.22.38-.25.77-.42.86-.4.6-.21.4-.14.4-.11.29-.07.45-.12.48-.06h3.04l.42.08.42.09.4.1.26.08.4.13.4.15.39.17.25.13.36.19.37.2.35.21.25.17.3.22.3.23.28.23.24.22.28.25.27.27.25.28.23.28.1.12.23.33.24.34.2.33.2.37.16.35.07.15.17.4.15.4.13.41.1.44v.15l.09.38v2.71l.08.5-.08.45v.22l-.1.36-.1.35-.17.5v.09l.25.28.29.4.28.4.25.42.22.45.2.45.16.45.15.46.12.49.08.48.05.48v1.47l-.07.48-.08.49-.12.48-.13.47-.17.46-.2.45-.21.44-.25.43v.08l-.24.34-.23.33-.25.3-.27.32-.35.36-.56.54-.57.48-1.13 1-1.39 1.08-1.6 1.24-1.78 1.33-1.92 1.4-2 1.45-2.07 1.45-2.18 1.4-2 1.35-2 1.25-.95.6-.92.55-.9.52-.86.5-.89.45-.91.42-1 .43-.75.22-.42.11-.43.1h-.17l-.43.08h-2.17l-.4.22-2.63 1.43-2.48 1.29-2.28 1.13-1.1.52-1 .46-1 .42-1 .38-1 .37-1 .3-.51.12-.37.06-.38.05h-1.93l-.47-.05-.43-.08-.45-.1-.43-.14h-.09l-.45-.15-.43-.18-.42-.2-.4-.24-.4-.25-.38-.26-.37-.3-.33-.3-.33-.34v-.05l-.32-.36-.3-.37-.27-.4-.25-.4-.23-.43-.2-.44-.17-.43-.16-.45-.12-.47-.07-.33h-2.05l-.4-.07-.4-.06h-.16l-.44-.1-.43-.11-.43-.15-.42-.19-.12-.05-.38-.18-.38-.2-.39-.23-.35-.25-.35-.27-.33-.28-.07-.07-.33-.32-.32-.33-.3-.35-.28-.37-.25-.38-.23-.4-.22-.4v-.08l-.18-.4-.15-.42-.14-.42-.11-.41-.1-.44-.07-.43v-2.3l.06-.43v-.12l.06-.38.1-.39.12-.36.13-.37.05-.13.12-.32.15-.3.15-.3.25-.47.48-.76.69-.89.66-.73.64-.67 1.08-1 1-.93.39-.37.26-.27.1-.11.07-.09 1.35-1.75 1.39-1.94 1.49-1.82 1.51-1.78 1.54-1.84.85-1-.12-.15-.25-.4v-.1l-.47-.09-.48-.11-.47-.14-.45-.15-.44-.19-.43-.21-.42-.24-.4-.26-.46-.29-.37-.3-.35-.33-.31-.34-.32-.36-.3-.37-.27-.4-.23-.4-.23-.42-.19-.43-.18-.45-.13-.45-.14-.47-.08-.45-.07-.48v-1.93l.08-.49.08-.46.12-.45.13-.41.15-.4.18-.4.2-.4.22-.39.23-.36.25-.35.29-.35v-.05l.26-.3.3-.3.32-.29.38-.33.64-.5 1.15-.8 1.46-1 1.75-1.17 2-1.3 1.3-.83.85-.79.93-.81.92-.79 1.73-1.48.72-.63.6-.57.2-.18.15-.17.08-.08v-.07l1.49-1.92 1.13-1.51.87-1.2.76-1.12.82-1.2 1-1.43 1.27-1.8 1.65-2.27 1.25-1.68 1.28-1.72 1.35-1.7.72-.9.68-.8 1.18-1.42.8-.93.49-.55.51-.53.59-.59.7-.63.83-.63.43-.29.34-.2.31-.18.14-.05.31-.17.32-.13.33-.13h.1l.37-.11.35-.12.37-.08.38-.07h.08l.45-.06h1.34z" fill="#fff"/><path d="m161.32 358.78.75.05.75.09.75.1.71.13.74.15.7.17.7.18.7.22.66.23.72.25 1.27.52 1.3.6 1.25.63 1.25.7 1.21.73 1.2.79 1.17.8 1.17.86 1.15.87 1.13.92 1.13 1 1.1 1 1.1 1 1.09 1 1.06 1 1.07 1 1 1.09 1 1.08 1 1.1 1 1.12 1 1.11 1 1.12 1 1.13.91 1.14.92 1.11.88 1.14.87 1.11.83 1.12.82 1.12.82 1.11 1.5 2.14 1.4 2.08 1.26 2 .62 1 .57.95.53.94.52.9.46.88.45.85.42.83.38.84.35.81.32.85.3.87.27 1 .13.69.08.46.05.47v1.92l-.06.58-.12.55-.07.33-.11.44-.12.43-.23.68-.42 1-.45.85-.45.78-.48.74-.5.7-.52.68-.53.67-.55.66-.6.69-1.19 1.3-1.3 1.33-1.38 1.35-1.45 1.38-1.52 1.4-1.56 1.4-1.64 1.44-1.65 1.43-1.71 1.34-1.72 1.43-3.4 2.8-3.33 2.77-3.18 2.55-2.94 2.33-2.56 2.07-2.14 1.71-.83.69-.67.56-.43.39-.27.23-2.73 2.69-2.8 2.78-2.83 2.78-2.85 2.75-2.85 2.75-2.85 2.72-5.72 5.44-5.75 5.41-5.75 5.39-11.5 10.76-11.48 10.69-5.72 5.31-5.68 5.37-5.65 5.38-2.82 2.7-2.8 2.7-2.8 2.72-2.78 2.71-2.77 2.74-2.73 2.73-.54.55-.5.52-1 1.13-1 1.17-1 1.2-1 1.23-1 1.25-2 2.62-2 2.61-1 1.34-1 1.31-1.08 1.32-1.12 1.3-1.15 1.25-.62.65-.63.62-.63.61-.65.6-.69.59-.7.58-.71.57-.75.55-.77.53-.8.5-.83.5-.85.45-.89.43-.91.4-.94.35-1 .34-1 .28-1 .23-1 .19-1 .13-1.06.1h-2.35l-1.08-.05-1.09-.12-1.1-.17-1.1-.21-1.1-.27-1.08-.3-1.1-.37-1.05-.36-1.1-.45-1.1-.48-1.1-.54-.72-.36-.7-.4-.68-.4-.69-.44-.65-.41-.66-.49-1.22-.88-1.18-1-1.15-1-1.12-1-1.07-1-1-1-1-1-.95-1-.94-1-1.7-1.89-1.55-1.78-1.31-1.52-1.25-1.5-1.2-1.46-1.16-1.38-1.07-1.42-1-1.38-1-1.37-.83-1.35-.82-1.3-.76-1.34-.7-1.31-.62-1.35-.59-1.3-.53-1.3-.47-1.3-.4-1.3-.36-1.3-.27-1.3-.2-1.32-.13-1.31v-1.32l-.05-1.25.11-1.28.19-1.32.25-1.25.32-1.22.38-1.18.45-1.13.5-1.1.53-1.07.59-1 .61-1 .65-.95.67-.92.7-.86.72-.85.75-.84.75-.81.76-.79.79-.76.8-.77.83-.77 1.65-1.46 1.7-1.47 1.71-1.48 1.75-1.49 1.77-1.51 1.78-1.57 1.82-1.63.88-.8.9-.85.9-.87.9-.88.9-.9.9-.92.89-.95.91-1 7.19-8 3.63-4 3.65-4 3.67-4 3.71-3.95 3.74-3.93 3.76-3.9 1.94-1.85 1.92-1.94 1.93-1.93 2-1.92 2-1.9 2-1.9 2-1.88 2-1.88 2-1.85 2-1.85 2-1.85 1.95-1.82 2.08-1.82 2.1-1.8 2.12-1.76 2.1-1.74 2.13-1.78 2.09-1.78 2-1.8 2-1.82 2-1.85 2-1.85 2-1.88 2-1.9 4-3.84 4.09-3.86 2.08-1.95 2.1-1.95 2.13-1.94 2.2-2 1.55-1.33 2.32-1.94 2.8-2.3 3-2.45 5.27-4.28 1.71-1.37.7-.53.34-.23.68-.42.72-.35.75-.28.51-.14-.06-.79v-.8l.08-.78.15-.78.22-.77.3-.73.35-.7.43-.67.49-.63.55-.57.48-.47.63-.55.67-.53.67-.5.71-.45.74-.43.73-.39.77-.35.76-.31.79-.27.78-.23.8-.2.8-.15.78-.12.8-.08h2.34zm-.95 16.65h-.22l-.06.05-.07.06-.2.2-.6.52-.65.47-.68.4-.72.31-.75.27-.35.08.08.7v.8l-.06.8-.14.79-.21.76-.29.74-.36.71-.42.69-.48.63-.55.58-.59.52-.53.38.07-.07-.19.15-1.56 1.25-5.2 4.22-2.94 2.4-2.73 2.27-2.22 1.83-1.31 1.13-2 1.8-2 1.85-2 1.89-2 1.88-4.05 3.83-4.39 4.01-2 1.94-2.08 1.93-2.1 1.95-2.13 1.93-2.17 1.92-2.2 1.91-2.25 1.92-2.25 1.87-2 1.7-2 1.68-2 1.7-2 1.73-2 1.74-2 1.75-1.95 1.76-1.87 1.81-1.92 1.8-1.9 1.8-1.88 1.83-1.88 1.83-1.89 1.85-1.85 1.87-1.86 1.87-1.82 1.88-3.68 3.8-3.65 3.83-3.67 3.89-3.62 3.9-3.6 3.91-3.58 3.95-7.2 8-1 1.11-1 1.12-1 1.1-1.17 1.09-1 1-1 1-1 1-1 .95-2 1.76-1.91 1.69-1.92 1.5-1.75 1.5-1.67 1.42-1.58 1.33-1.44 1.28-.56.57-.62.59-.58.56-.53.55-.5.54-.45.51-.42.49-.37.46-.33.45-.28.42-.25.4-.22.37-.17.35-.15.31-.11.3-.1.3-.07.29-.07.26v1.65l.06.42.1.48.14.52.18.58.23.64.27.68.33.73.4.8.45.85.52.9.58 1 .65 1 .74 1 .78 1.1.87 1.15.95 1.2 1 1.25 1.09 1.32 1.18 1.37 1.43 1.63 1.55 1.72.72.86.78.82.8.81.8.79.8.73.79.72.76.65.75.6.77.56.32.22.33.22.33.21.32.19.3.16.28.15.64.3.6.27.58.23.53.2.5.15.47.14.42.1.4.08.36.05h1.75l.24-.05h.25l.23-.07.25-.08.25-.1.25-.1.27-.13.28-.15.28-.17.32-.2.3-.22.33-.25.35-.25.34-.3.36-.31.37-.34.38-.36.39-.39.38-.4.83-.91.85-1 .89-1 .9-1.13.91-1.2 2-2.57 2.08-2.7 1.1-1.41 1.14-1.56 1.2-1.43 1.25-1.45 1.3-1.42.7-.73.7-.7 2.82-2.82 2.81-2.78 2.84-2.77 2.83-2.75 2.85-2.75 2.85-2.73 5.72-5.43 5.73-5.4 5.73-5.39 11.5-10.7 11.5-10.7 5.7-5.35 5.7-5.36 5.67-5.34 2.82-2.7 2.8-2.71 2.8-2.72 2.8-2.73 2.76-2.74 2.87-2.85.63-.6.79-.68.85-.73 1-.8 2.22-1.8 2.61-2.09 2.92-2.33 3.13-2.52 3.27-2.63 3.28-2.72 1.62-1.35 1.6-1.35 1.55-1.33 1.5-1.32 1.42-1.28 1.35-1.25 1.25-1.18 1.13-1.12 1-1 .88-1 .23-.27-.08-.15-.33-.61-.39-.69-.41-.71-.47-.77-.47-.78-1.1-1.72-1.21-1.8-1.34-1.9-.68-.95-.72-1-.75-1-.76-1-.77-1-.8-1-.82-1-.83-1-.83-1-.85-1-.87-1-.87-.95-.88-.92-.87-.9-.88-.88-.88-.87-.89-.82-.88-.8-.87-.76-.86-.72-.85-.68-.84-.65-.81-.6-.82-.55-.77-.5-.75-.47-.71-.4-.69-.33-.63-.3-.63-.25-.24-.09-.25-.1-.25-.06-.21-.07-.22-.05h-.98z"/><path d="m336.5 188.15 1.07.1 1 .13 1 .19 1 .2.95.21.94.24.9.25.9.26 1.65.54 1.58.55 1.52.53 1.38.48 1 .19 2.13.43 1 .17 1.27.21 2.93.47 1.34.23.66.14.82.18.53.17.69.25.63.3.62.36.6.42.56.48.52.52.47.56.41.6.1.19h.12l.2.05.68.19.67.23.2.08.53.25.52.27.2.12.42.26.4.29.2.13.3.25.3.27.43.38.58.62.5.6.42.56.4.59.27.43.25.17 4.2 2.81 1.63 1.12.77.57.45.36.58.52.52.57.1.13.43.57.38.6.34.63.28.67.22.66.15.71.07.4.52.29 1.25.71.68.42.68.42.7.46.7.5.74.55.75.64.75.73.51.58.49.6.46.62.42.67.37.68.18.42.18.43.15.43.05.12.15.52.1.53.09.53v.09l.05.76v.75l-.09.77-.15.73v.07l-.2.65-.24.63-.3.62-.35.58-.4.55-.43.54-.47.48h-.05l-.35.3.2.64.24.9.2.9.18.88.15.88.12.87.1.85.1.88.11 1.6v1.19l.27 1 .35 1.43.18 1.12.29 1.78.35 2.37.36 2.65.17 1.38.15 1.35.13 1.32.1 1.25.05 1.18v1.45l-.05.53-.07.47-.08.45-.05.18-.17.67-.23.65-.27.62-.07.11.05.07.3.5.24.41.4.84.3.73.26.75.24.75.2.75.18.73.13.74.12.73.08.73.07.72v2.87l-.08 1.33-.14 1.37-.2 1.35-.23 1.35-.27 1.31-.31 1.3-.35 1.3-.39 1.27-.4 1.27-.41 1.25-.45 1.21-.47 1.2-.23.55v2.94l-.05.76-.1.77-.19.75-.25.72-.31.7-.37.68-.43.63-.5.59-.55.53-.59.5-.65.43-.66.37-.57.25-.1.17-.83 1.36-.39.65-.65 1.14-.85 1.48-.5.85-.55.87-.58.9-.63.9-.7.93-.17.2-.85 1.6-1 1.68-.83 1.42-.8 1.25-.77 1.13-.82 1.19-1 1.41-.32.45-.28 1.1-.37 1.1-.4 1-.45 1-.47 1-.51 1-.54 1-.36.68-.17.53v.12l-.22.6-.27.57-.08.15-.23.41-.25.4-.42.64-.65.83-.63.73v.05l-.35.55-.66 1-.67 1-.67.95-.65.91-.66.89-.67.83-.68.8-.72.78-.82.8-.9.77-.73.52-.45.26-.42.24-.41.2-.14.06-.61.25h-.05l-1.59 1.59-3.25 3.13-.13.13-.27.54-.41.63-.47.6-.52.55-.83.83-.95.9-1.18 1.12-1.32 1.23-1.4 1.27-1.4 1.2-.73.62-.65.51-2.55 2-1.5 1.15-1.5 1.39-1.73 1.28-1.84 1.35-1.9 1.3-1 .66-1 .65-1 .65-1 .64-1 .61-1.05.6-1.05.59-1.08.55-1.07.53-1.1.5-1.11.48-1.14.44-1.15.4-1.18.35-1.22.3-1.2.21-.71.1-.69.07h-1.95l-.76-.08-.74-.15-.73-.23-.37-.15-.26.11-1.97.87-2 .81-2 .79-1.07.38-1.05.37-1 .33-1.05.33-1.05.29-1.06.26-1.07.24-1.1.2-1.13.15-1.19.1h-1.33l-.78-.05-.74-.09-.76-.15-.84-.2-.51-.18-.72-.27-.2-.1-.35-.21-.23.07-.45.07-1 .11-1 .05-1.15.05h-1.94l-.78-.08-.93-.13-1-.24-1.31-.43-1.12-.4-1.08-.43-1-.44-.23-.11h-4.35l-.76-.1-.74-.18-.73-.23-.7-.32-.67-.37-.63-.43-.6-.48-.53-.54-.5-.6-.44-.61-.25-.45-.53-.17-2.53-.85-1.55-.5-.92-.28-.12.06-1 .54-1 .43-1 .33-1 .27-1 .17-1 .1h-1.88l-.88-.09-.87-.13-.83-.17-.8-.2-.77-.23-.75-.25-.73-.27-.7-.3-.69-.31-.68-.34-.65-.33-.65-.37-.67-.38-1.18-.75-1.18-.82-1.17-.83-1.12-.87-1.08-.9-1.07-.9-1-.91-1-.92-.8-.78-.14-.07-.43-.28-.27-.19-.36-.25-.35-.28-.52-.45-.68-.67-.6-.65-.55-.63-.54-.65-.53-.7-1-1.35-1-1.45-.89-1.28-1.88-2.59-1.25-1.73-1.23-1.72-1.07-1.55-.5-.75-.29-.59-.37-.66-.13-.27-.3-.68-.24-.72-.16-.73v-.07l-.1-.7v-1.4l.07-.68.13-.7.2-.67.25-.65.1-.21-.36-.7-1-1.9-.93-1.9-.45-1-.45-1-.42-1-.42-1-.4-1-.38-1-.37-1.05-.35-1.06-.36-1.22-.34-1.22-.3-1.2-.28-1.2-.27-1.16-.23-1.19-.43-2.26-.75-4.32-.39-2.05-.18-1-.2-.91-.3-1.37-.42-1.83-.18-1-.1-.63-.05-.44v-1.21l.05-.74.11-.73.19-.7.13-.38-.27-.4-.4-.75-.33-.74-.27-.73-.21-.7-.15-.68-.14-.67-.1-.72-.08-1.1v-1.15l.05-1.08.1-1.05.15-1 .18-1 .2-1 .24-.95.25-.92.26-.91.29-.9.3-.89.3-.88.61-1.63.62-1.57.62-1.43.56-1.32.54-1.15.8-1.65.36-.7.3-.55v-.07l.07-.51v-.15l.17-.77v-.17l.12-.4.15-.38.27-.7.45-1 .41-.75.39-.65.36-.58.54-.82.13-.48.22-.74.23-.73.27-.73.51-1.32.57-1.3.57-1.23.58-1.19.58-1.13.57-1.08.43-.82.57-1.27.78-1.66.25-.55.15-.47.44-1.27.48-1.25.53-1.21.55-1.19.59-1.16.6-1.15.63-1.14.63-1.11.65-1.09.67-1.06.67-1.05.68-1 .27-.4v-.08l.2-.38.12-.72.13-.7.17-.68.18-.67.2-.65.23-.63.25-.67.5-1.13.57-1.15.6-1.1.65-1 .67-1 .68-1 .73-1 .74-1 .75-.92.76-.9.77-.88.78-.85.79-.87 1.53-1.56 1.52-1.52 1.46-1.4 2.57-2.45 1.07-1 1.1-1.08 1.63-1.42 3-2.58 3.11-2.64 1.24-1 .91-.73.72-.48.63-.4 1.22-.72 1.3-.7.75-.38.73-.34.79-.33.58-.23.35-.25.72-.54.71-.48.72-.48.75-.47.75-.45.77-.43.78-.42.8-.38.83-.39.87-.33.88-.32.94-.28 1-.22 1-.18 1.08-.12h1.12l1.16.07.82.1.38.06.39.09.45.1.4.11.38.12.43.15.4.15.39.17.41.18.34.17 1-.17 1.07-.52v-.15l.1-.7.15-.68.2-.67.24-.58.28-.58.33-.54.37-.53.43-.5.45-.49.5-.43.52-.38.56-.35h.07l.58-.32.62-.25.62-.22.63-.16h.13l.69-.12.7-.06h1.6l.75.1 1 .18 1 .22.92.25 1.68.48 1.62.47.68.2.55.13.34.09h.16l.77.1.95.09 1.07.06 1.15.09 2.51.13 1.35.08 1.4.12 1.45.13 1.49.17 1.48.22.8.15.77.15.8.16.78.2.8.22.8.25.82.27.81.31.82.35.67.3.68.37.17.1.5.32.46.35.45.38v.05l.53.53.48.59.1.15h.6l.3-.27.62-.46.65-.4.7-.35.72-.29.75-.2.75-.15.78-.06h1.7zm-35.93 17-2.14.33-2.13.3-2 .29-1.89.25-1.68.2-1.43.15-1.19.11-.81.05-1.54.78-3.11 1.6-1.65.79h-.08l-.07.05-.73.41-.75.44-1.4.73-1.42.7-1.35.63-1.26.55-1.15.49-1 .4-1 .35-.62.18-.38.1-.38.08-.54.1-.73.12-1.32.17h-.25l-.6.12-.91.15h-.27l-1.38 1-1.49 1-1.4 1-1 .65-.65.58-1 .87-1 .83-.64.48-.4.69-.76 1.16-.77 1.15-.78 1.12-.79 1.08-.8 1.07-.8 1-.8 1-1.55 1.92-1.43 1.73-.28.35-.34.43-.76 1.07-.17.4-.32.77-.35.76-.66 1.44-.7 1.38-.7 1.35-.7 1.28-1.29 2.34-.55 1-.48.93-.38.79-.3.65-.2.51-.29.79-.73 2.11-.82 2.42-.45 1.27-.46 1.26-.49 1.25-.51 1.19-.35.7-.37.68-.45.75-.37.5-.28.37-.3.36-.17.19-.53.53-.58.5-.17.12-.48.35-.5.3-.54.26h-.06l-.4.16v.17l.12.57.16 1.33.1 1.18v3.4l.12.33.2.73.13.77.05.77v1.26l-.07.55-.1.55-.13.55v.09l-.2.63-.26.62-.3.58-.37.57-.2.26-.2 1-.45 1.88-.9 3.54-.42 1.68-.38 1.6-.33 1.57-.1.53.53.47.53.56.47.6.42.65.36.67.3.72.22.73.15.75.1.77v1.45l-.08.9-.14 1-.15.63-.08.38-.12.39-.1.26-.16.45-.19.45-.1.22-.28.55-.32.52-.11.18-.45.6-.49.57-.13.13-.43.42-.45.38-.49.35-.13.1-.58.35h-.07l.43 1.45.3.92.3.88.3.84.35.91.27.74.33.9.62 1.9.62 2 .28 1 .28 1 .24 1 .21 1 .2 1 .09.71v1.55l-.05.54v.13l-.1.62-.14.6-.05.16.77 1.44.9 1.63.93 1.63 1 1.67 2 3.38 1 1.7 1 1.74 1 1.76.87 1.59.05.08.13.2.25.32.7.86.44.59.5.7.16.23.57-.08h2.35l1.1.09 1.06.13 1 .15 1 .2 1 .23 1 .27 1 .28 1 .3 1 .32.95.33.95.35.94.39.93.38 1.78.77 1.75.8 1.69.81 1.63.8 1.55.79 2.83 1.43 1.25.63 2.07 1 .93.47 1.59.82.78.2.92.21.93.22.72.15h.18l1.82-.35 1.91-.37 1.94-.35 1.71-.28 1.19-.19 1.23-.15.8-.06h2l.5.07.27.05.68.13.67.2h.08l.72.29.66.33h.07l.52.3.23.17 2.5-.34 1.5-.2 1.53-.16 1.57-.17 1.62-.12 1.65-.06h1.46l2.6-1.2 1.9-.86.12-.05.39-.22.5-.31.65-.4 1.53-1 .87-.55.93-.57.95-.55.62-.3.6-.3.68-.28.78-.27.55-.15.39-.1.38-.08.25-.05.48.17.51-.05h.92l.7.05h.2l.6.08.6.15.57.17.18.06.52.2.65-.46 1.55-1.2 1.5-1.13 1.42-1.09 2.45-1.88.43-.35.45-.37 1.12-1 1.18-1.07.87-.82.25-.45.38-.6.45-.55.27-.31 1.88-1.87 1.64-1.6 3.21-3.12 1.55-1.51 1.14-1.15.35-.69.35-.65.38-.6.4-.61.73-1.05.8-1 .84-1 .85-1 .85-.94.86-.88.85-.83.35-.34v-.26l.1-.69.13-.75.17-.83.23-.9.27-1 .38-1.09.45-1.06.37-.7.38-.67.48-.72.37-.45.5-.56.17-.19.31-.31.35-.3.17-.15.42-.34.45-.3.18-.11.53-.3.1-.05.69-.81.76-1.12.34-.46-.07-.32-.07-.48v-1.57l.05-.5v-.32l.06-.48.1-.47.17-.71.32-1 .35-.85.35-.78.36-.72.39-.68.4-.7.75-1.22.8-1.18.8-1.12.73-1 .7-.9 1.05-1.32.42-.52.5-.56.55-.52.61-.47.64-.4.68-.35.7-.28.22-.07.41-.86.17-.35v-8.3l.05-.9.09-.92.05-.5.05-4.3v-13.1l-.05-.17-.24-.7-.35-1.28-.33-1.35-.28-1.38-.25-1.4-.24-1.42-.2-1.45-.18-1.47-.17-1.46-.15-1.47-.11-1.45-.12-1.45-.2-2.75-.13-2.57v-.11l-.37-.79-1-1.93-1-1.92-1.07-2-1.1-2-2.25-4-1.13-2-.37-.67-.51-.32-1.64-.91-1.65-.89-1.68-.86-1.73-.89-1.77-.86-3.63-1.8-1.87-.94-1.88-1-1.9-1-1.93-.94-1-.57-1-.56-1-.6-1-.62-.94-.63-.88-.64-.8-.61-.68-.59-.44-.38h-4.6l-2.48.05h-11.6l-1.57-.07-1.58-.08-1.6-.12-1.62-.15-1.61-.17-1.62-.21-1.63-.25-1.64-.3-1.61-.34-1.59-.38z" fill="#fff"/><path d="m318.07 198.68h2.53l1.27.05 1.26.07 1.27.08 1.25.1 1.27.12 1.25.15 1.25.15 1.23.17 1.25.18 1.23.22 1.24.21 1.21.25 1.22.25 1.2.32 1.2.3 1.2.33 1.2.33 1.18.37 1.18.37 1.17.4 1.17.43 1.15.43 1.13.47 1.13.48 1.12.52 1.17.57 1.1.55 1.08.59 1.08.6 1.07.61 1.05.65 1 .67 1 .7 1 .72 1 .75 1 .76 1 .8.94.82.91.83.9.87.89.9.86.92.84.95.81 1 .8 1 .77 1 .75 1 .72 1.07.7 1.08.68 1.12.63 1.15.64 1.16.58 1.19.57 1.21.53 1.24.52 1.25.46 1.28.45 1.3.44 1.32.38 1.35.37 1.36.31 1.39.3 1.41.32 1.65.27 1.69.25 1.68.2 1.7.16 1.7.12 1.7.1 1.72.07 1.71v5.2l-.07 1.74-.1 1.73-.13 1.75-.17 1.73-.25 1.73-.22 1.75-.25 1.74-.28 1.75-.3 1.73-.32 1.75-.36 1.73-.37 1.74-.42 1.73-.41 1.73-.47 1.74-.47 1.71-.51 1.72-.52 1.7-.55 1.7-.57 1.7-.6 1.68-.6 1.69-.63 1.66-.67 1.65-.66 1.65-.7 1.64-.7 1.63-.74 1.62-.75 1.6-.78 1.6-.78 1.56-.8 1.57-.84 1.55-.83 1.53-.8 1.55-.88 1.5-.89 1.47-.9 1.46-.91 1.45-.94 1.44-.95 1.4-1 1.4-1 1.36-1 1.34-1 1.33-1 1.3-1 1.28-1 1.25-1.07 1.24-1.06 1.2-1.09 1.18-1.1 1.15-1.21 1.15-1.08 1-1.17 1-1.2 1-1.25 1-1.3 1-1.32.9-1.35.87-1.38.83-1.4.8-1.44.77-1.46.75-1.49.71-1.5.7-1.5.65-1.53.65-1.53.6-1.55.57-1.57.55-1.55.52-1.57.48-1.56.45-1.55.42-1.55.38-1.55.35-1.55.32-1.52.28-1.52.23-1.51.2-1.49.17-1.48.12-1.45.06h-3.78l-2.4-.06-2.45-.12-2.49-.18-2.53-.22-2.57-.28-2.56-.34-1.35-.23-1.3-.2-1.31-.23-1.32-.24-1.33-.25-1.32-.25-1.33-.28-1.34-.3-1.31-.32-1.34-.33-1.33-.33-1.33-.37-1.32-.38-1.32-.4-1.33-.42-1.32-.43-1.3-.47-1.31-.47-1.3-.5-1.29-.51-1.28-.54-1.28-.55-1.27-.58-1.27-.6-1.25-.62-1.23-.65-1.23-.66-1.22-.69-1.2-.71-1.18-.74-1.17-.76-1.17-.79-1.13-.81-1.12-.84-1.1-.86-1.08-.9-1.07-.92-1-.95-1-1-1-1-1-1-.95-1.06-.9-1.1-.9-1.12-.85-1.15-.82-1.2-.78-1.2-.75-1.25-.72-1.27-.7-1.35-.57-1.18-.5-1.25-.46-1.28-.4-1.29-.35-1.3-.3-1.31-.27-1.34-.23-1.33-.19-1.37-.15-1.36-.11-1.39-.09-1.4-.06-1.41v-5.77l.08-1.47.09-1.48.11-1.48.14-1.49.15-1.5.18-1.5.18-1.51.22-1.52.22-1.52.25-1.5.25-1.51.26-1.52.29-1.53.6-3 .65-3 .68-2.95.73-2.91.75-2.87.77-2.8.78-2.72.82-2.65.8-2.55.82-2.43.8-2.33.8-2.22.8-2.08.76-1.95.77-1.82.75-1.65.65-1.38.28-.6.25-.57.25-.68.29-.77.28-.83.3-.9.62-2 .63-2.15.68-2.22.35-1.15.39-1.15.38-1.15.42-1.15.45-1.17.46-1.15.52-1.15.58-1.15.62-1.08.38-.63.4-.57.42-.58.45-.59.5-.58.55-.57.62-.56.66-.55.74-.54.83-.5.88-.45.62-.25.4-.14.35-.12.3-.08.38-.12.39-.08h.28l.4-.08.4-.05h2.88l.37.07.68.11.27.07.27-.17 1-.63 1-.62 1-.6 1-.58 1-.58 1-.57 1-.57 1-.53 1.07-.55 1.07-.52 1.08-.51 1.1-.5 1.1-.5 1.12-.49 1.13-.46 1.13-.45 1.14-.45 1.15-.44 1.16-.43 1.17-.42 1.18-.4 1.19-.38 1.24-.37 1.22-.37 2.4-.68 2.41-.65 1.25-.3 1.24-.3 1.23-.29 1.25-.26 1.23-.25 1.25-.24 1.27-.23 1.25-.22 1.27-.2 1.26-.18 1.25-.17 1.29-.16 1.26-.15 1.27-.12 1.27-.12 1.28-.1 1.27-.1 1.28-.06 1.27-.07h5.1zm-2.3 16.67h-2.15l-1.07.05-1.08.05-1.09.08-1.08.08-1.08.1-1.09.12-1.08.12-1.1.13-1.08.15-1.09.17-1.08.16-1.07.19-1.08.2-1.08.2-1.07.21-1.07.24-1.06.23-1.07.27-1 .25-2.12.56-2.08.6-1 .3-1 .34-1 .33-1 .33-1 .35-1 .37-1 .37-1 .38-1 .38-.95.4-.93.4-.93.42-.9.42-.92.43-.88.43-.89.45-.85.45-.85.45-.85.47-.81.47-.8.46-.8.49-.79.5-.75.48-.75.5-.71.5-.64.62-.7.5-.67.51-.66.52-.64.52-.61.53-.6.52-.59.53-.56.53-.6.59-.5.46-.55.42-.59.37-.61.31-.64.29-.65.21-.48.12-.58 1.93-.65 2.19-.69 2.18-.36 1.13-.37 1.1-.4 1.1-.43 1.1-.47 1.1-.45 1-.58 1.22-.57 1.28-.63 1.5-.67 1.67-.7 1.83-.72 2-.73 2.12-.75 2.23-.73 2.35-.75 2.44-.74 2.53-.71 2.58-.69 2.65-.66 2.69-.64 2.71-.6 2.74-.55 2.76-.25 1.35-.28 1.29-.21 1.37-.22 1.35-.2 1.35-.18 1.33-.17 1.33-.17 1.3-.13 1.3-.1 1.29-.1 1.25-.08 1.23v1.22l-.05 1.18v4.47l.06 1 .09 1 .11.95.12.9.15.87.15.82.18.75.19.7.21.65.2.6.22.51.25.52.4.8.47.8.48.8.5.78.53.77.55.75.59.73.6.74.63.7.65.7.68.7.7.66.72.67.75.65.78.63.79.62.81.62.84.6.86.58.89.57.88.56.92.54 1 .53 1 .52 1 .5 1 .5 1 .46 1 .47 1 .45 1 .43 1.05.42 1.06.4 1.09.4 1.08.38 1.1.37 1.1.35 1.12.33 1.11.32 1.14.32 1.13.28 1.13.28 1.14.27 1.13.27 1.15.23 1.15.23 1.13.22 1.15.2 1.14.18 1.13.19 1.12.15 2.28.3 2.23.25 2.2.18 2.17.15 2.12.12 2.06.05h3.85l1-.08 1.05-.12 1.09-.15 1.13-.16 1.17-.22 1.18-.25 1.22-.27 1.23-.3 1.25-.35 1.25-.35 1.27-.4 1.26-.41 1.27-.44 1.27-.46 1.25-.5 1.23-.52 1.22-.52 1.18-.56 1.17-.57 1.15-.58 1.1-.6 1.06-.6 1-.62 1-.63.93-.64.87-.61.82-.64.76-.63.69-.6.66-.63.87-.89.9-.95.9-1 .88-1 .89-1 .88-1.05.87-1.09.86-1.11.87-1.12.85-1.17.83-1.16.84-1.2.83-1.22.8-1.25.8-1.25.8-1.28.77-1.3.76-1.32.75-1.32.74-1.35.73-1.36.7-1.37.7-1.4.68-1.4.65-1.42.65-1.41.64-1.44.61-1.45.59-1.45.58-1.46.57-1.47.53-1.48.52-1.49.5-1.48.48-1.5.47-1.5.43-1.5.42-1.5.4-1.5.36-1.5.35-1.5.34-1.5.3-1.5.28-1.5.27-1.5.23-1.48.2-1.49.18-1.48.17-1.48.13-1.45.12-1.47.08-1.45.05-1.43v-5.66l-.08-1.37-.1-1.37-.14-1.35-.15-1.33-.18-1.32-.22-1.3-.23-1.28-.22-1-.25-1-.25-1-.26-1-.3-.92-.32-.9-.32-.88-.35-.87-.36-.83-.39-.82-.38-.78-.42-.79-.43-.75-.45-.73-.45-.73-.48-.7-.49-.69-.51-.66-.52-.65-.53-.64-.55-.63-.57-.6-.58-.6-.6-.57-.62-.56-.63-.55-.64-.54-.66-.51-.67-.52-.68-.48-.72-.49-.72-.46-.73-.45-.75-.44-.75-.43-.78-.4-.79-.4-.81-.38-.82-.39-.83-.35-.84-.35-.86-.33-.87-.32-.88-.3-.9-.28-.9-.28-.94-.25-.91-.25-.95-.24-.95-.23-.95-.2-1-.2-1-.17-1-.16-1-.15-1-.15-1-.12-1-.12-1-.08-1-.08-1-.09h-1.05l-1.05-.05h-4.4z"/><path d="m296.1 170.57 2 .05 2 .08 2 .13 2 .15 2 .19 1.95.2 1.95.23 1.92.25 1.91.27 1.92.26 3.75.59 7.4 1.21 3.67.59 1.78.26 1.9.29 1.53.25 1.22.21 1.38.27 1.55.32 1.69.36 1.78.42 1.82.45 1.81.48.94.29.9.28.9.28.9.32.88.35.88.37.9.4.9.46 1 .59.92.65.61.51h.17l1.25.12 1.25.13 1.23.15 1.22.19 1.22.21 1.18.24 1.18.25 1.17.26 1.15.3 1.13.34 1.14.33 1.1.38 1.1.39 1.08.41 1.07.44 1.05.45 1 .46 1 .5 1 .52 1 .53 1 .55 1 .59.93.58.94.62.9.63.9.63.86.67.87.68.85.7.82.7.81.74.8.73.79.77.75.76.75.79.73.8.72.8.7.83.68.83.67.85.65.85.63.87.62.88.6.89.6.9.56.91.57.92.55.93.52.94.51.93.5 1 .5.95.47 1 .47 1 .43 1 .43 1 .42 1 .42 1 .38 1 .38 1 .37 1 .35 1.05.67 2 .61 2.09.57 2.11.52 2.12.48 2.13.42 2.15.38 2.15.33 2.17.3 2.18.24 2.17.21 2.18.17 2.19.12 2.2.06 2.18.05 2.18v2.17l-.05 2.18-.08 2.17-.12 2.15-.15 2.15-.2 2.13-.23 2.12-.27 2.1-.3 2.08-.35 2.07-.36 2.05-.42 2-.45 2-.48 2-.52 2-.55 1.9-.53 1.68-.54 1.68-.55 1.67-.58 1.65-.6 1.67-.62 1.65-.65 1.63-.65 1.65-.68 1.63-.7 1.62-.73 1.62-.74 1.61-.88 1.62-.79 1.58-.8 1.6-.81 1.59-.84 1.56-.85 1.57-.86 1.57-.9 1.55-.92 1.53-.92 1.53-.95 1.52-1 1.5-1 1.5-1 1.5-1 1.48-1 1.47-1 1.45-1.05 1.45-1.08 1.43-1.1 1.42-1.13 1.4-1.12 1.4-1.15 1.38-1.15 1.37-1.16 1.35-1.2 1.33-1.2 1.33-1.22 1.34-1.23 1.3-1.24 1.28-1.26 1.27-1.27 1.27-1.3 1.23-1.3 1.23-1.3 1.2-1.33 1.2-1.35 1.17-1.35 1.15-1.37 1.15-1.37 1.12-1.4 1.11-1.4 1.09-1.41 1.06-1.44 1.05-1.43 1-1.45 1-1.47 1-1.48 1-1.48.95-1.5.94-1.5.91-1.52.89-1.53.86-1.54.85-1.55.82-1.56.8-1.57.78-1.58.75-1.59.74-1.6.71-1.61.69-1.62.66-1.63.64-1.64.6-1.63.58-1.65.57-1.67.53-1.66.5-1.69.48-1.68.45-1.65.42-1.7.38-1.7.38-1.72.34-1.72.31-1.71.29-1.74.25-1.73.21-1.75.2-1.75.15-1.75.14-1.75.1-1.77.06h-5.3l-1.78-.07-1.77-.1-1.78-.13-1.78-.17-1.79-.2-1.81-.14-1.8-.27-1.78-.3-1.79-.33-1.8-.38-1.78-.4-1.8-.45-1.78-.49-1.79-.51-1.78-.55-1.8-.6-1.78-.64-1.77-.66-1.78-.7-1.79-.75-1.76-.79-1.77-.81-1.77-.87-1.76-.88-1.75-.95-1.77-1-1.75-1-1.73-1.05-1.74-1.1-1.75-1.13-1.7-1.17-1.66-1.2-1.62-1.23-1.58-1.25-1.54-1.3-1.5-1.32-1.45-1.35-1.41-1.38-1.39-1.4-1.31-1.43-1.3-1.45-1.25-1.49-1.2-1.51-1.17-1.52-1.13-1.57-1.09-1.56-1-1.6-1-1.62-.95-1.63-.93-1.65-.88-1.69-.85-1.68-.8-1.72-.77-1.71-.73-1.74-.69-1.75-.65-1.78-.61-1.77-.59-1.8-.53-1.8-.5-1.81-.47-1.84-.43-1.83-.4-1.85-.37-1.85-.33-1.87-.28-1.88-.27-1.88-.23-1.89-.19-1.88-.16-1.9-.14-1.92-.08-1.9-.07-1.91v-5.77l.06-1.93.09-1.92.11-1.93.14-1.94.18-1.93.2-1.93.23-1.94.27-1.93.28-1.93.32-1.92.33-1.93.39-1.94.38-1.91.43-1.92.45-1.92.47-1.9.5-1.9.52-1.9.55-1.9.58-1.88.6-1.88.62-1.89.65-1.86.66-1.85.7-1.85.72-1.85.73-1.82.77-1.83.78-1.8.82-1.82.82-1.78.86-1.79.87-1.76.9-1.75.92-1.74.93-1.73 1-1.72 1-1.7 1-1.68 1-1.67 1-1.65 1.07-1.63 1.07-1.62 1.1-1.6 1.11-1.58 1.14-1.58 1.16-1.54 1.09-1.57 1.18-1.52 1.22-1.48 1.22-1.47 1.25-1.45 1.26-1.41 1.29-1.4 1.3-1.39 1.31-1.36 1.34-1.34 1.35-1.3 1.35-1.28 1.38-1.27 1.4-1.23 1.42-1.2 1.43-1.18 1.45-1.15 1.47-1.12 1.48-1.1 1.48-1.07 1.52-1 1.53-1 1.54-1 1.56-.94 1.57-.91 1.58-.89 1.6-.83 1.62-.82 1.63-.76 1.64-.74 1.65-.7 1.68-.66 1.68-.64 1.67-.58 1.08-.35 1.07-.32 1.07-.31 1.05-.29 1.06-.26 1.07-.25 1.05-.24 1.05-.21 1.07-.2 1.05-.19 1.05-.16 1-.14 1-.15 1.05-.11 1-.1 1.07-.09 2-.15 2-.08h2.05zm-3.55 16.7-1.65.06-1.67.12-.8.07-.81.08-.82.08-.8.1-.82.12-.8.13-.81.14-.8.16-.8.15-.82.19-.8.18-.8.22-.8.21-.8.22-.8.25-.8.27-1.35.46-1.32.49-1.33.53-1.32.55-1.31.6-1.32.62-1.3.65-1.3.68-1.3.72-1.28.75-1.29.78-1.26.8-1.27.83-1.27.87-1.25.88-1.23.92-1.23.95-1.24 1-1.2 1-1.21 1-1.19 1.05-1.18 1.08-1.18 1.1-1.17 1.14-1.15 1.15-1.13 1.16-1.14 1.2-1.1 1.22-1.11 1.25-1.09 1.27-1.06 1.28-1.07 1.3-1 1.33-1 1.35-1 1.37-1 1.38-1 1.4-1 1.42-.95 1.43-.93 1.47-.93 1.47-.9 1.48-.9 1.5-.87 1.52-.85 1.51-.83 1.55-.82 1.55-.8 1.57-.78 1.58-.77 1.59-.73 1.6-.74 1.61-.7 1.62-.68 1.63-.67 1.64-.63 1.65-.62 1.65-.6 1.66-.58 1.67-.55 1.67-.53 1.68-.52 1.68-.48 1.69-.47 1.68-.45 1.7-.42 1.7-.5 1.7-.38 1.7-.35 1.7-.32 1.7-.3 1.7-.28 1.7-.25 1.7-.23 1.68-.2 1.7-.19 1.69-.15 1.7-.13 1.68-.1 1.67-.07 1.68-.05 1.67v4.96l.07 1.64.08 1.63.1 1.62.15 1.61.15 1.62.2 1.58.22 1.59.25 1.56.27 1.57.3 1.55.33 1.53.37 1.52.38 1.52.42 1.48.43 1.48.48 1.47.5 1.45.54 1.43.55 1.44.58 1.4.62 1.38.65 1.37.68 1.35.7 1.35.73 1.31.77 1.3.8 1.29.82 1.26.86 1.24.89 1.23.93 1.2 1 1.2 1 1.17 1 1.15 1 1.13 1.08 1.1 1.14 1.1 1.15 1.07 1.18 1.05 1.22 1 1.26 1 1.3 1 1.34 1 1.38.93 1.48 1 1.49.95 1.48.88 1.5.87 1.48.83 1.49.8 1.48.75 1.5.74 1.48.68 1.49.65 1.48.63 1.5.59 1.48.56 1.49.52 1.48.5 1.48.45 1.49.43 1.48.4 1.47.37 1.48.35 1.48.3 1.47.28 1.48.25 1.47.22 1.48.2 1.47.15 1.47.15 1.46.1 1.47.08 1.47.05h4.38l1.47-.05 1.45-.09 1.45-.1 1.45-.13 1.45-.17 1.45-.18 1.45-.22 1.43-.23 1.43-.25 1.45-.3 1.44-.3 1.41-.33 1.44-.37 1.41-.38 1.42-.4 1.42-.44 1.41-.45 1.4-.46 1.4-.5 1.4-.54 1.39-.53 1.38-.57 1.38-.58 1.39-.62 1.36-.63 1.37-.65 1.43-.76 1.35-.7 1.35-.71 1.33-.74 1.34-.75 1.33-.78 1.32-.8 1.3-.8 1.3-.83 1.3-.87 1.28-.87 1.28-.88 1.27-.92 1.25-.91 1.25-1 1.25-.95 1.23-1 1.22-1 1.22-1 1.2-1 1.18-1.05 1.18-1.05 1.17-1.08 1.17-1.09 1.15-1.1 1.13-1.13 1.12-1.13 1.11-1.15 1.1-1.15 1.09-1.19 1.08-1.18 1.07-1.2 1.05-1.22 1-1.23 1-1.23 1-1.25 1-1.27 1-1.27 1-1.28 1-1.3.94-1.32.91-1.3.92-1.33.88-1.33.89-1.35.86-1.35.85-1.37.82-1.37.82-1.36.8-1.4.78-1.39.77-1.4.75-1.4.73-1.41.7-1.42.7-1.43.68-1.44.65-1.43.65-1.43.62-1.45.62-1.45.58-1.45.57-1.47.55-1.47.53-1.45.5-1.46.5-1.49.47-1.46.45-1.45.46-1.62.44-1.62.4-1.66.38-1.69.35-1.71.32-1.74.3-1.76.25-1.79.23-1.8.2-1.81.17-1.84.13-1.85.1-1.85.08-1.86v-5.62l-.06-1.88-.1-1.87-.15-1.87-.17-1.86-.22-1.85-.25-1.84-.32-1.72-.32-1.82-.35-1.8-.4-1.77-.41-1.75-.52-1.76-.5-1.7-.55-1.7-.28-.8-.29-.82-.31-.8-.3-.81-.32-.79-.33-.78-.35-.78-.34-.77-.36-.75-.37-.75-.37-.75-.38-.72-.4-.71-.4-.72-.4-.7-.42-.68-.43-.69-.43-.66-.45-.65-.45-.64-.47-.63-.47-.63-.48-.6-.48-.6-.5-.59-.52-.56-.52-.57-.51-.55-.54-.53-.53-.54-.55-.51-.57-.5-.56-.49-.59-.48-.58-.45-.6-.45-.6-.45-.62-.42-.61-.41-.65-.4-.64-.39-.66-.38-.67-.35-.68-.35-.69-.33-.7-.34-.71-.3-.72-.3-.75-.28-.75-.27-.75-.25-.78-.23-.79-.23-.81-.2-.82-.2-.83-.19-.85-.15-.85-.15-.89-.13-.9-.12-.9-.1-.93-.08-.93-.07h-3.83l-.8-.12-.8-.21-.77-.29-.73-.35-.7-.43-.65-.48-.6-.55-.55-.62-.48-.67-.35-.61-.58-.2-.65-.19-.65-.2-1.49-.4-1.51-.38-1.48-.48-1.48-.32-1.37-.28-1.22-.23-1-.17-1.25-.22-1.8-.26-1.9-.29-3.73-.6-7.37-1.2-3.61-.56-1.79-.25-1.76-.25-1.77-.24-1.75-.2-1.75-.18-1.72-.17-1.71-.13-1.72-.1-1.68-.07-1.69-.05h-1.66zm393.75-86.22 1.53.08 1.54.14 1.55.16 1.55.24.75.15.75.15.73.18.75.2.72.22.71.23.72.25.7.27.68.28.69.3.68.32.7.35 1.28.68 1.27.77 1.23.81 1.22.85 1.18.92 1.14 1 1.11 1 1.09 1 1 1.05 1 1.1 1 1.13 1 1.17.94 1.18.9 1.23.86 1.24.85 1.28.82 1.28.78 1.32.75 1.35.72 1.35.68 1.38.67 1.39.62 1.41.6 1.44.56 1.43.52 1.45.5 1.47.45 1.46.42 1.49.38 1.5.35 1.5.3 1.5.27 1.5.23 1.51.18 1.52.14 1.52.1 1.51.05 1.52v1.52l-.05 1.5-.1 1.51-.15 1.5-.22 1.5-.27 1.49-.31 1.43-.2.78-.22.74-.22.73-.23.72-.25.71-.28.72-.29.72-.31.7-.32.7-.35.7-.37.68-.38.68-.4.67-.42.67-.45.65-.45.63-.48.63-.5.62-.52.6-.53.6-.57.58-.56.57-.6.55-.62.53-.63.52-.65.52-.92.65-.92.63-.93.58-.95.57-1 .53-1 .5-1 .45-1 .45-1 .4-1 .37-1 .35-1 .33-1 .29-1 .28-1 .23-1 .24-1 .2-1 .16-1 .17-1 .13-1 .12-1 .1-1 .08-1 .09-1.93.08-2 .05h-1.66l-1.92-.05-1.91-.08-1.89-.1-1.88-.14-1.85-.15-3.62-.33-3.51-.35-3.4-.32-1.64-.15-1.6-.13-1.55-.1-1.5-.08h-3.45l-.48-.05-.5-.08-.48-.1-.47-.13-.47-.17-.45-.18-.45-.22-.43-.25-.42-.27-.4-.3-.36-.31-.37-.34-.33-.36-.22-.24-.17.07-.46.15-.49.13-.48.1-.48.07h-1.97l-.48-.08-.49-.1-.48-.13-.47-.17-.45-.18-.45-.22-.43-.25-.42-.27-.43-.28-.62-.5-.56-.52-.54-.53-.46-.53-.49-.6-.66-1-.59-1.05-.5-1-.4-1-.35-1-.28-1-.23-1-.22-1-.17-1-.15-1-.13-.95-.1-.93-.08-1-.14-1.8-.08-1.8v-10.7l.06-1.3.12-1.3.15-1.3.17-1.28.2-1.28.23-1.29.27-1.28.28-1.28.32-1.27.35-1.27.38-1.25.4-1.25.43-1.25.47-1.23.48-1.22.52-1.21.53-1.22.59-1.18.6-1.19.61-1.16.65-1.15.69-1.15.7-1.12.73-1.12.75-1.1.78-1.06.82-1.07.83-1 .87-1 .88-1 .92-1 1-1 1-.94 1-.9 1-.88 1-.87 1.07-.81 1.1-.8 1.12-.77 1.15-.73 1.18-.7 1.2-.69 1.22-.63 1.25-.6 1.26-.57 1.3-.51 1.32-.49 1.33-.45 1.37-.4 1.38-.35 1.4-.31 1.42-.27 1.43-.22 1.45-.18 1.49-.12 1.48-.08h1.5zm-2.43 16.67h-.94l-.9.06-.9.12-.86.13-.87.17-.87.18-.83.22-.83.25-.82.27-.82.3-.8.31-.78.35-.78.39-.77.4-.75.41-.75.45-.73.47-.72.5-.72.52-.7.53-.68.57-.68.58-.67.6-.65.63-.63.64-.62.66-.62.69-.6.71-.58.72-.57.73-.53.75-.53.79-.52.78-.5.8-.48.8-.47.83-.45.84-.43.85-.4.85-.4.86-.37.89-.35.88-.33.88-.32.9-.28.9-.29.9-.25.92-.21.9-.22.92-.18.91-.17.9-.13.92-.14.9-.1.9-.06.9-.07.9v9.35l.06 1.4.09 1.4.06.62.07.63.08.59.09.55.08.51.1.45.1.4.1.32v.07l.23.21.33.35.24.29.2-.09.46-.15.49-.13.48-.1.5-.07h2.65l1.78.05 1.79.1 1.78.11 1.77.14 1.78.16 3.5.34 3.48.35 3.46.3 1.69.14 1.66.11 1.65.1 1.64.07h4.68l1.53-.07h.7l.72-.06.72-.09.7-.08.7-.08.66-.12.67-.12.65-.13.65-.15.63-.15.62-.17.6-.18.6-.18.58-.22.59-.22.55-.23.55-.23.55-.27.51-.27.54-.28.5-.32.51-.31.49-.34.5-.36.26-.2.25-.2.25-.22.24-.22.21-.23.24-.22.2-.23.21-.25.2-.25.2-.25.19-.27.21-.25.18-.27.17-.28.17-.3.16-.3.15-.32.15-.31.15-.34.14-.33.13-.35.12-.35.11-.37.12-.38.12-.37.08-.35.18-.85.15-.85.14-.86.08-.9.07-.92v-3l-.07-1-.08-1-.14-1.05-.16-1.07-.19-1.07-.21-1.08-.25-1.08-.29-1.1-.31-1.09-.34-1.1-.36-1.08-.39-1.08-.43-1.09-.43-1.06-.52-1.05-.5-1.05-.52-1-.53-1-.55-1-.58-1-.6-.94-.6-.93-.64-.88-.63-.87-.65-.83-.67-.82-.68-.77-.67-.73-.7-.68-.68-.67-.68-.62-.7-.56-.69-.54-.7-.48-.68-.45-.67-.4-.7-.38-.28-.14-.33-.16-.32-.14-.32-.13-.31-.12-.3-.11-.32-.1-.3-.09-.3-.08-.3-.07-.28-.06h-.29l-1-.15-1-.12-1-.08h-2zm-30.65 50.76h-.05z"/></g></svg>
|
assets/img/no-products.svg
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
<svg viewBox="0 0 923.65 1082.82" xmlns="http://www.w3.org/2000/svg"><g fill-rule="evenodd"><path d="m296.42 899.72h6.81l3.44.07 3.45.1h.2l.18-.1 1.48-.68 1.49-.63 1.53-.48 1.5-.5 1.5-.5 1.5-.43 1.52-.37 1.51-.35 1.52-.31 1.53-.27 1.54-.25 1.55-.23 1.53-.19 1.57-.18 1.55-.15 1.56-.12 1.57-.11 1.55-.04 1.59-.08h7.93l3.18.05 3.19.09 3.11-.06 3.15.17 3.12.18 3.07.2 3.05.22 5.83.47 5.57.46 5.15.42 2.38.18 2.23.15 2.09.14 1.88.1h11.98l8.87-.07 8.87-.12 8.86-.15 8.9-.18 8.89-.2 17.85-.45 16.88-.42 1-.08 2-.13 2.58-.15 3.05-.15 3.39-.14h11.56l2 .08h3.55l.15-.15 1.22-1 1.06-.73.95-.57 1-.53 1.24-.55 1.23-.45 1.12-.35 1.05-.27 1-.22 1-.18.93-.15 1-.15 1.75-.2 1.86-.15 1.9-.12 2-.08h12.53l4.3.13 4.27.17 4.11.2 3.85.2 3.52.21 5.53.34 1.77.1h1l3 .08 3.15.13 3.13.14 3.12.16 6.15.35 6.08.39 6 .38 6 .37 3 .15h.18l1.45-.05 6.08-.2 6.09-.2 6.1-.16 6.11-.15 6.14-.14 6.13-.1 6.15-.05h6.62l3-.2 2-.12 2.25-.08 2.41-.07h5.4l1.4.05 1.44.08 1.45.1 1.46.13 1.49.19 1.5.21 1.53.27 1.57.33 1.5.39.9.26.83.29.87.3.86.33.89.4.91.43.94.5 1 .57 1 .65 1.2.9.57.52.93-.2 1.92-.39 1.91-.35 2-.35 2-.31 2.05-.27 2-.23 1.1-.1 1.08-.07 1.08-.07h4.47l1.15.05 1.17.08 1.16.12 1.19.13 1.2.19 1.2.21 1.21.27 1.22.3 1.23.35 1.24.4 1.23.45 1.23.52 1.24.55 1.21.61 1.2.67 1.19.73 1.16.79 1.14.83 1.11.9 1.07.95 1.1 1.05.8.83.85 1.05.87 1.24.85 1.5.76 1.75.6 2 .35 2.28v2.43l-.37 2.45-.7 2.29-1 2-1.1 1.72-1.15 1.4-1.13 1.13-1.08.9-1.19.85-1.6.94-1.58.73-1.38.53-1.27.4-1.17.34-1.1.25-1.06.21-1 .19-1 .16-1 .15-1.85.24-1.82.18-1.72.17-3 .25-1.14.11-.91.1-3.54.45-3.53.42-3.42.38-3.33.35-3.27.32-3.2.3-3.18.25-3.17.23-3.16.2-3.19.19-3.23.16-3.3.14-3.37.13-3.48.1-3.6.1-3.68.08h-2.15l-2.44.14-2.6.15-2.81.2-3 .25-3.15.26-6.75.6-7.19.64-3.75.31-3.81.32-3.89.28-3.91.29-4 .25-4 .2-4 .16-2 .09-2 .05h-12l-2-.07-2-.08-1.95-.1-1.93-.14-1.93-.15-1.92-.18-1.92-.22-1.88-.23-1.88-.27-1.87-.3-1.85-.33-1.4-.28h-4.05l-2.72.12-2.71.1-5.29.17-10.11.3-4.79.16-2.28.1-2.27.12-8.5.43-8.56.42-8.59.4-3.13.13.4.05 1.27.24 1.41.33 1.5.48 1.17.49 1.2.58 1.4.87 1.62 1.26 1.8 1.9.81 1.29.82 1.5.63 1.6v.1l.48 1.83.23 1.88v1.95l-.25 1.84-.35 1.66-1.21 2.74-1.34 2-1.26 1.4-1.12 1-1 .77-.88.61-.77.45-.88.5-.87.45-1.56.79-1.64.71-1.63.67-1.64.83-1.64.52-1.6.47-1.61.41-1.59.37-1.58.32-1.55.26-1.55.24-1.52.21-1.5.17-1.48.15-1.47.13-1.43.1-1.45.09-2.75.15-2.68.1-2.59.1-2.48.1-2.42.11-1.1.07-1.11.08-1.07.09-1.13.11-4.15.44-4.24.41-4.23.4-4.22.37-4.23.37-4.22.31-4.23.32-4.22.28-4.21.29-4.22.23-4.22.23-4.21.2-4.24.19-4.21.16-4.22.15-4.22.12-4.21.18-4.22.08-4.22.07h-21.11l-4.22-.05-4.23-.1-4.24-.1-4-.1-.76.16-4.19 1-4.2.9-4.18.85-4.2.84-4.2.78-4.2.75-4.22.72-4.2.68-4.21.65-4.22.6-4.22.58-4.21.55-4.22.54-4.22.48-4.21.47-4.22.45-4.22.4-4.23.38-4.22.37-4.21.33-4.22.32-4.22.3-4.21.26-4.22.25-4.22.24-4.2.2-4.21.2-4.2.18-2.3.08-2.54.44-2.56.41-2.57.4-2.58.4-2.59.37-2.58.37-2.58.33-2.59.33-2.54.32-2.67.32-3 .4-3.25.43-3.45.45-3.61.44-1.9.21-1.9.19-2 .18-2 .17h-.47l-.63.19-1.07.26-1.08.24-1.08.2-1.09.16-1.08.14-1.08.1-1.1.06h-3.3l-1.12-.06-1.13-.1-1.14-.15-1.13-.2-1.17-.24-1.16-.3-1.17-.35-.52-.16-1-.13-1-.15h-.07l-2.38.18-2.4.15-2.42.1h-6.1l-1.21-.05h-1.24l-1.23-.08-1.23-.1-1.24-.12-1.23-.13-1.23-.17-1.24-.18-1.23-.22-1.23-.23-1.24-.27-1.23-.28-1.23-.34-1.24-.35-1.23-.4-1.22-.43-1.23-.47-1.22-.5-1.2-.56-1.21-.59-1.19-.65-1.18-.7-1.37-.86-1.48-1.12-2-2-.94-1.47-.78-1.43-.6-1.5-.45-1.3-.45-2.91.17-2.9.7-2.71 1.1-2.3 1.48-2.14 2-2 2-1.33 1.55-.77 1.25-.5 1-.33 1-.27 1.45-.32 1.43-.23 1.33-.18 1.27-.14 1.22-.11 1.16-.09 2-.13 1.5-.1 3.81-.25 3.84-.28 2.86-.22.92-.92 1.95-1.36 2.15-1 2.3-.63 2.37-.24h2.68l.63-.47.94-.67 1-.63 1-.6 1-.58 1-.55 1-.54 1-.5 1-.5 1-.46 1.05-.45 1.07-.44 1.07-.41 1.08-.4 1.1-.37 1.12-.37 1.11-.33 1.12-.32 1.13-.3 1.15-.28 1.15-.25 1.17-.23 1.18-.2 1.17-.2 1.2-.15 1.2-.14.55-.05-.37-.08-1.16-.28-1.15-.32-1.17-.32-1.15-.35-1.15-.36-1.15-.4-1.15-.42-1.23-.47-.95-.41-1.54-.79-.91-.66-1.87-1.55-1.57-1.85-1.11-1.9-.87-2-.55-2.1-.21-2.17-9.42 3.27-3.75 1.3-2.12.7-4.6 1.38-4.61 1.37-4.79 1.37-2.5.7-2.5.68-2.55.68-2.58.67-2.63.65-2.64.63-2.68.62-2.7.6-2.72.57-2.73.55-2.77.51-2.76.49-2.79.43-2.8.4-2.81.37-2.8.31-2.79.25h-.16l-1.29.08-1.41.07-1.42.07-1.42.05h-7.06l-1.4-.07-1.42-.06-1.4-.1-1.4-.17-1.4-.13-1.4-.15-1.4-.19-1.4-.2-2.08-.33-1.83-.5-1.49-.6-1-.46-1-.47-1.69-.88-1.73-1-1.73-1-1.34-.84-1.41-.16-1.2-.12h-4.95l-1.77-.08-1.77-.09-1.76-.13-1.75-.13-1.75-.17-1.74-.2-1.76-.27-1.73-.25-1.72-.29-1.72-.31-1.7-.37-1.68-.38-1.68-.44-1.67-.46-1.67-.5-1.63-.57-1.63-.6-1.64-.65-1.6-.7-1.58-.8-1.57-.81-1.75-1-1.45-1-2.06-1.87-1-1.4-1.17-2.08-.85-2.27v-.08l-.42-2-.13-2 .17-2v-.17l.4-1.86.65-1.79.89-1.68.05-.08 1.18-1.65 1.38-1.47 1.07-1 2-1.25 1.48-.68 1.32-.48 1.51-.42 1.34-.27 1.15-.16 1-.12 1-.1h.94l1-.05h3.35l3.08.22 2.69.2 2.38.22 2.15.23 1.95.23 1.78.24 1.65.23 1.52.23 2.88.45 1.45.22 1.57.23 1.72.22 2 .23 2.25.25h.6l.13-.56.58-1.32.85-1.65 1.05-1.52.1-.11 1.14-1.38 1.47-1.23 1.2-.89 2.18-1.06 1.7-.59 1.35-.33 1.12-.18 1.06-.15 1.49-.1h3.96l2.12.1 1.75.1h30.46l1.85.05 1.89.09 1.93.11 2 .15 2 .19 2.1.23 2.15.28 2 .3.86.14 1 .11 3 .29 4.48-.09 6-.15 6-.16 6-.22 6-.23h.95l-.28-.63-.6-2-.3-2.08v-2.58l.48-2.53.9-2.42 1.32-2.22 1.66-2 2-1.65 1.85-1.08 2-.82 2.07-.52 2.13-.21 1.47-.05 2 .3 1.05.23 1.21.32 1.24.36 2.56.79 2.87.86 1.42.42 1.35.4 1.21.33 1 .25.77.17h.16l1.69.22 1.76.18 1.8.17 1.82.15 1.85.12 1.87.1 1.9.08 1.68.07h51.2l.83-.08 1.09-.05h4.66l1.54.05 1.23.07 1.07.06 2.51.4 2.42.8 2.23 1.2 2 1.59 1.7 1.88 1.37 2.15.13.33h10.04zm-87.32 57.86h.17-.34z" fill="#808080"/><path d="m419.77 413.53 1.43.19 1.37.26 1.3.35 1.4.44 1.45.58 1.53.77 1.45.93 1.35 1 1.22 1.14 1.08 1.21.93 1.24.79 1.25.65 1.23.53 1.22.43 1.18.34 1.13.25 1.1.2 1.07.13 1 .08 1v1.98l-.09 1.6-.2 1.67-.26 1.58-.37 1.52-.42 1.48-.48 1.44-.55 1.41-.5 1.17-.1.22-.68 1.36-.75 1.34-.82 1.31-.9 1.32-1 1.28-1 1.19-.67.71-.63.64-.69.61-.71.62-.79.6-.81.6-.89.57-.95.55-1 .51-1.09.47-1.15.43-1.23.37-1.3.28-1.35.2-1.42.1h-1.43l-1.45-.13-1.38-.23-1.22-.3-1.15-.37-1.13-.45-1.12-.47-1.07-.6-1-.69-.93-.71-.9-.8-.82-.83-.75-.87-.67-.88-.6-.9-.51-.92-.55-1.07-.64-1.61-.51-1.74-.32-1.7-.17-1.61v-1.57l.09-1.52.16-1.46.09-.39.21-1 .4-1.38.5-1.35.25-.59v-1.81l.05-1 .12-1 .15-1 .2-1 .26-1 .32-1.07.27-.77.11-.31.49-1.1.56-1.1.67-1.12.75-1.1.87-1.12 1-1.06 1.08-1 1.22-1 1.32-.9 1.41-.8 1.49-.68 1.53-.55 1.57-.42 1.58-.28 1.57-.14h1.51zm3.38 29.8-.28.15 1.18-.61v-.22.22l.05-.64v-.48l.05.52-.09-1.07.09.5-.19-1.15.12.47-.27-1-6.35 4.41h1.14-.35l1.18-.08-.35.05 1.23-.17-.31.07 1.25-.29-.32.1 1.27-.4-.3.12zm.65-.3.25-.15zm.05-3.08.1.3zm-6.33-15.72h-.75l.48.15.9.3.58.26 1.52 2.19 5.55.13-.37-.33.19.16-1.05-.8.2.17-1.2-.75.21.13-1.31-.65.21.1-1.45-.55.24.1-1.54-.41.25.06-1.58-.26.25.05-1.6-.1z" fill="#fff"/><path d="m463.47 357.9 1.9.33 1.83.57 1.73.83h.09l1.45.93 1.33 1.1 1.2 1.34 1 1.23 1.22 2.27.55 1.45.37 1.2.28 1 .25 1 .25 1.06.45 2.12.43 2.35.44 2.55.43 2.75.42 2.93.25 1.94.43.71.73 1.45.64 1.5.48 1.4.4 1.34.33 1.31.3 1.3.25 1.3.22 1.3.2 1.34.17 1.36.15 1.39.15 1.41.11 1.44.1 1.46.1 1.5.07 1.54.07 1.55.05 1.58v6.53l-.05 3.39-.1 3.41-.15 3.44-.2 3.41-.13 1.75-.13 1.72-.14 1.72-.16 1.7-.17 1.68-.2 1.67-.2 1.66-.22 1.64-.21 1.61-.07.35-.08 1.12-.17 1.6-.18 1.58-.22 1.55-.12.79.42.8.45 1.05.42 1.1.35 1.16.26 1.2.2 1.24.14 1.25v2.51l-.12 1.24-.18 1.21-.07.3-.23.85-.39 1.12-.51 1.23-.87 1.72-.98 1.67-1.13 1.49-1.15 1.26-1.15 1.12-1.16 1-1.14.87-1.13.78-1.12.69-1.11.63-1.1.57-1.1.53-1.09.48-1.1.45-1.08.42-1.1.38-1.1.37-1.1.33-1.12.32-1.11.3-1.12.28-1.12.27-1.13.23-1.12.24-1.15.2-1.13.18-1.13.18-1.15.17-1.14.13-1.15.14-1.13.11-1.15.09-1.15.08-1.13.07-1.14.05h-5.65l-1.13-.07-1.12-.08-1.13-.12-1.12-.14-1.13-.17-1.13-.18-1.15-.24-1.15-.26-1.19-.32-1.2-.37-1.25-.46-1.27-.52-1.53-.71-1.58-.94-1.7-1.31-1.52-1.52-4.93 1.55-2.69.83-2.71.85-2.77.82-2.8.82-2.82.8-2.83.75-2.83.7-1.45.35-1.44.33-1.43.3-1.43.3-1.44.27-1.45.26-1.43.24-1.43.21-1.45.2-1.44.17-1.45.15-1.45.12-1.45.08h-4.38l-1.48-.06-1.49-.12-1.5-.17h-.28l-1.23-.17-1.52-.28-1.55-.35-1.53-.43-1.57-.5-1.45-.59-.88-.38-1.3-.62-2.1-1.31-1.19-1.12-1.11-1.25-1-1.35-.93-1.45-1.07-3-.4-2.71v-2.27l.28-1.82.43-1.7.72-1.85.8-1.55.15-.21-.32-.32-1.41-2.07-1.05-2.2-.64-2.18-.28-2-.05-1.8.13-1.58.24-1.37.3-1.18.33-1.05.35-.93.37-.84.4-.86.48-.89v-.06l-.72-1-.66-1.08-.59-1.17-.5-1.2-.4-1.23-.3-1.25-.21-1.24-.12-1.21v-1.19l.06-1.35.24-1.86.46-1.89.59-1.65.65-1.46.7-1.3.71-1.19.74-1.06.73-1 .77-.91.75-.87.76-.83.79-.79.8-.76.78-.75.82-.72.81-.7.84-.7.88-.7 1.67-1.3 1.73-1.28 1.78-1.27 1.79-1.23 1.8-1.2 1.8-1.15 1.78-1.14 1.77-1.08 1.71-1.05 1.7-1 3.12-1.81 2.8-1.6 2.32-1.3 1.68-.94.92-.53 1.65-1 .23-.14 2.55-1.48 1.45-.82 1.5-.81 1.55-.8 1.58-.79 1.59-.73.95-.38.56-.22 2.44-2 2.66-2.07 2.42-1.85 2.1-1.36 2.32-1 1.8-.42 1.36-.83 1.39-.82 1.4-.78 1.4-.77 1.4-.73 1.41-.7 1.42-.7 1.42-.67 1.41-.63 1.42-.63 1.42-.6 1.4-.59 1.41-.58 2.72-1.05 2.7-1 2.62-.92 2.51-.85 2.4-.76 2.29-.7 2.11-.64.43-1.07.65-1.33 1.18-1.85.94-1 1.6-1.48 1.8-1.24h.08l2.12-1 2.26-.65 2.35-.25h.07z" fill="#808080"/><path d="m69 892.63 12.82.17 6.5.07h19.62l3.25-.06 3.25-.09 3.23-.11 3.22-.14 3.2-.16 3.16-.19 3.15-.23 3.14-.27 3.1-.28 3.05-.33 3-.39 3-.41 1.47-.22 1.46-.23 1.47-.24 1.45-.26 1.46-.26 1.42-.28 1.4-.29 1.4-.3 1.95-.45 2-.45 2-.48 1.95-.5 4-1 4-1.06 4-1.07 4.08-1 2.07-.52 2.07-.5 2.1-.5 2.1-.48 2.11-.45 2.12-.43 2.15-.42 2.15-.38 2.17-.35 2.18-.32 2.2-.28 2.22-.24 2.23-.2 2.25-.15 2.23-.1h5.77l1.15.05 1.17.06 1.15.07 1.18.1 1.13.1 4 .4 4 .37 4 .35 4 .35 4 .31 4 .3 4 .3 4 .27 4 .27 4 .23 3.95.23 4 .2 4 .2 3.95.19 4 .16 3.95.15 3.95.14 3.95.13 3.95.12 4 .08 3.95.08 3.93.09h3.95l3.95.05h23.7l7.9-.1 7.92-.14 7.92-.18 7.93-.22 7.93-.26 7.95-.3 7.95-.34 8-.38 8-.4 8-.43 8-.47 8.05-.5 8.05-.53 8.08-.55 8.1-.57 8.13-.6 8.19-.62 1.63-.11 1.68-.09h8.35l1.67.08 1.65.08 1.67.12 1.65.13 1.63.15 1.65.17 1.63.18 1.64.2 1.65.2 3.23.47 3.23.5 3.22.53 3.2.55 3.17.57 3.16.58 5.81 1.13 3.1.55 3.08.53 3 .52 3 .47 3 .43 1.47.18 1.5.19 1.46.16 1.49.15 1.46.14 1.45.11 1.45.1 1.45.09 1.44.06h7.05l1.38-.06 1.37-.09 1.36-.11 1.37-.15 1.35-.17 1.35-.2 1.33-.22 1.4-.26 2.14-.42 2.23-.4 2.23-.4 2.25-.37 2.27-.35 2.27-.35 2.3-.31 2.28-.3 2.32-.27 2.3-.27 2.33-.25 2.33-.23 2.34-.22 2.35-.2 2.36-.18 2.37-.17 2.37-.16 2.36-.14 2.39-.13 2.4-.12 2.38-.1 2.42-.08 4.78-.13 4.83-.09 4.82-.05h9.67l4.83.08 4.83.1 4.82.15 4.82.17 4.78.2 4.77.21 4.75.25 4.71.27 4.7.28 4.65.3 4.62.32 4.57.32 9 .66 8.76.67 2.92.2 2.88.2 2.89.17 2.88.13 2.88.13 2.89.1 2.9.09 2.88.08 2.9.05h14.47l2.9-.05 2.9-.07 2.9-.06 2.9-.09 5.81-.2 5.82-.25 5.83-.3 5.82-.31 5.83-.35 5.85-.37 5.84-.4 11.71-.83 11.74-.85 11.75-.82 5.9-.4 5.9-.38 5.9-.34 5.9-.33 5.91-.28 5.94-.24 5.91-.2 3-.08 3-.07 3-.05h8.95l1.62.17 1.56.46 1.45.77 1.27 1 1 1.27.79 1.43.46 1.57.17 1.62-.15 1.63-.48 1.54-.76 1.43-1 1.27-1.26 1-1.44.78-1.54.52-1.62.15h-5.8l-2.9.05h-2.88l-2.9.07-2.89.06-5.8.2-5.8.24-5.81.28-5.82.32-5.82.35-5.83.36-5.83.39-11.72.83-11.72.85-11.76.82-5.89.4-5.91.38-5.9.35-5.92.33-5.93.3-5.94.25-5.93.22-3 .08-3 .07-3 .07h-18l-3-.07-3-.07-3-.08-3-.12-3-.13-3-.15-3-.17-3-.2-3-.21-8.77-.67-8.95-.67-4.53-.31-4.57-.3-4.58-.3-4.63-.29-4.65-.25-4.67-.25-4.68-.21-4.7-.2-4.7-.17-4.72-.13-4.72-.12-4.7-.07h-14.08l-4.65.1-4.65.14-2.3.08-2.3.08-2.28.12-2.29.12-2.28.13-2.27.15-2.25.17-2.25.18-2.23.18-2.23.2-2.22.24-2.2.23-2.18.25-2.17.27-2.17.26-2.15.3-2.13.32-2.12.33-2.1.35-2.08.37-2.07.38-2.11.4-1.62.32-1.68.28-1.7.24-1.67.21-1.68.17-1.69.15-1.68.12-1.67.06-1.68.07h-5l-1.65-.05-1.67-.06-1.65-.1-1.65-.1-1.65-.14-1.63-.16-1.65-.17-1.63-.18-1.64-.2-1.46-.09-3.23-.47-3.22-.5-3.22-.53-3.2-.55-3.16-.59-6.3-1.15-3.14-.58-3.1-.55-3.08-.55-3-.5-3-.47-3-.43-1.48-.18-1.48-.19-1.49-.16-1.48-.15-1.47-.14-1.45-.11-1.45-.1-1.45-.09-1.43-.05h-7.08l-1.39.07-1.41.1-8.15.62-8.17.6-8.15.58-8.12.55-8.11.53-8.1.5-8.07.47-8.07.45-8.06.4-8 .38-8 .34-8 .3-8 .26-8 .24-8 .18-8 .13-8 .1h-24l-4-.05-4-.06-4-.07-4-.08-4-.1-4-.1-4-.14-4-.13-4-.17-4-.16-4-.19-4-.2-4-.21-4-.24-4-.23-4-.27-4-.28-4-.3-4-.3-4-.33-4.05-.35-4-.35-4-.39-4-.4-1-.08-.94-.07-.93-.06h-7.22l-1.9.09-1.89.13-1.88.17-1.9.2-1.9.25-1.9.26-1.92.32-1.91.33-1.92.39-1.93.38-1.95.43-1.94.44-2 .46-2 .49-2 .48-4 1-4 1.05-4.05 1.07-4.07 1.05-2.06.53-2.07.5-2.08.49-2.1.48-1.55.33-1.59.34-1.58.3-1.58.3-1.59.28-1.6.27-1.61.25-1.64.25-3.21.45-3.27.4-3.3.36-3.3.32-3.32.27-3.33.23-3.35.22-3.35.16-3.37.15-3.36.12-3.37.08-3.37.07h-13.31l-6.61-.05-6.57-.06-12.82-.17-6.2-.07h-40.4l-.28.06-.28.07-.89.25-1 .32-1.1.35-1.2.4-1.25.36-.72.2-.73.19-.77.16-.82.15-.86.14-1 .06h-1.07l-.75-.07-.9-.11-.35-.07-1.06-.27-.32-.11-.88-.32-.48-.21-.45-.27-.63-.4-.14-.08-.6-.47-.13-.1-.57-.47-.1-.1-.54-.58-.1-.14-.46-.63-.09-.13-.4-.64-.25-.46-.36-.82-.27-.78-.2-.77-.1-.5-.13-1.68.17-1.64.48-1.55.78-1.43 1.05-1.27 1.27-1 1.45-.77 1.57-.47 1.61-.15 1.64.17 1.55.48 1.11.6.82-.26 1.17-.37 1.25-.4 1.33-.38.77-.2.76-.17.82-.17.87-.11 1-.1h41.28zm-52.51 7.62v-.08l-.1-.39-.13-.4z"/><path d="m365.47 647.05.85.15.85.23.8.32.76.42.74.48.66.55.62.63.53.69.47.73.38.78.3.82.22.85.12.87v1.73l-.05 1-.07 1-.08 1-.1 1-.13 1-.15.94-.19 1-.18.93-.2.93-.23.92-.24.93-.26.92-.27.93-.57 1.79-.63 1.81-.68 1.79-.72 1.76-.75 1.75-.78 1.75-.82 1.72-.83 1.72-.84 1.41-.87 1.68-.88 1.65-.88 1.64-.9 1.61-1.77 3.12-1.7 3.1-1.73 2.9-1.59 2.82-.73 1.33-.7 1.3-.67 1.27-.58 1.28-1.45 2.95-1.44 3-1.4 3-1.39 3.05-1.32 3.05-1.34 3.12-1.3 3.13-1.3 3.15-1.26 3.18-1.27 3.19-1.28 3.18-1.25 3.27-2.47 6.51-2.43 6.55-2.45 6.59-2.45 6.6-2.5 6.6-1.27 3.31-1.27 3.3-1.3 3.29-1.31 3.3-1.34 3.26-1.36 3.29-1.39 3.25-1.41 3.25-1.45 3.23-1.45 3.15-.79 1.73-.73 1.67-.72 1.7-.7 1.72-.66 1.71-.65 1.72-.63 1.75-.62 1.76-.6 1.77-.6 1.78-.57 1.8-.56 1.79-1.1 3.65-1.09 3.7-1.05 3.7-1 3.75-2.15 7.55-1.08 3.82-1.13 3.82-.59 1.91-.6 1.92-.61 1.93-.6 1.84-.07.18v.08l-.1.44-.08.45-.07.56-.06.65-.05.72v10.78l-.07 1.12-.12 1.17-.15 1.18-.21 1.22-.34 1.21-.2.72-.22.63-.25.68-.28.67-.32.68-.38.69-.43.7-.49.7-.53.68-.62.65-.68.63-.73.6-.79.54-.83.48-.87.43-.9.35-.91.27-.92.22-.9.15-.67.05h-1.73l-.87-.15-.83-.23-.82-.32-.76-.42-.74-.48-.66-.55-.6-.63-.55-.69-.47-.73-.38-.78-.3-.82-.22-.85-.15-.87v-.88l.07-.87.13-.85.24-.85.33-.8.4-.78.48-.72.57-.68.62-.6.68-.55.73-.47.79-.38.05-.57.05-.7v-9.7l.05-1.13.07-1.17.12-1.18.16-1.22.22-1.23.27-1.22.2-.7.18-.56.62-1.89.56-1.8.57-1.8.55-1.81 1.08-3.67 1.07-3.7 2.14-7.52 1.07-3.79 1.07-3.8 1.11-3.81 1.15-3.8.62-1.94.62-1.91.63-1.92.65-1.93.68-1.92.7-1.92.72-1.91.75-1.92.78-1.92.8-1.91.84-1.9.85-1.87 1.43-3.1 1.37-3.07 1.36-3.11 1.32-3.12 1.32-3.15 1.3-3.18 1.26-3.19 1.27-3.21 1.25-3.24 1.25-3.23 2.45-6.53 2.45-6.55 2.43-6.6 2.47-6.6 2.48-6.59 1.27-3.3 1.28-3.28 1.3-3.28 1.3-3.29 1.35-3.25 1.35-3.26 1.39-3.24 1.41-3.21 1.44-3.22 1.48-3.18 1.52-3.17 1.55-3.15.71-1.42.75-1.43.79-1.45.8-1.47 1.65-2.91 1.71-3 1.72-3 1.72-3.05.83-1.52.83-1.52.8-1.51.8-1.52.75-1.52.74-1.5.71-1.48.65-1.48.64-1.45.58-1.44.53-1.41.49-1.39.45-1.4.18-.63.18-.65.17-.65.17-.63.13-.64.12-.61.11-.6.1-.6.1-.65v-.56l.05-.55.05-.55v-1.14l.07-.87.15-.85.23-.85.32-.8.42-.78.48-.72.57-.66.61-.62.69-.53.73-.47.78-.38.84-.3.83-.22.87-.13h.86zm27.53 6.95.83.1.82.18.8.27.77.35.73.42.68.5.64.55.56.63.52.67.43.73.35.77.29.8.2.81.1.84v1.93l-.06 1.23-.1 1.22-.15 1.22-.19 1.2-.21 1.2-.25 1.18-.29 1.17-.31 1.16-.34 1.15-.36 1.15-.4 1.14-.42 1.13-.43 1.12-.45 1.1-.49 1.1-.48 1.1-.52 1.08-.51 1.08-.55 1.09-.55 1.06-.59 1.07-1.15 2.08-1.2 2.09-1.23 2.06-1.27 2-1.26 2-1.29 2-1.28 2-2.53 3.88-1.24 1.9-1.2 1.89-1.16 1.85-1.14 1.81-1.06 1.79-1 1.75-.95 1.71-.43.82-.42.83-.42.82-.38.8-.35.78-.35.77-.32.75-.28.75-.27.72-.26.76-1.22 3.64-1.25 3.68-2.53 7.32-2.55 7.3-2.57 7.25-5.15 14.48-2.56 7.22-2.52 7.21-2.48 7.22-1.23 3.6-1.2 3.62-1.2 3.61-1.17 3.64-1.16 3.62-1.14 3.63-1.13 3.65-1.1 3.63-1.07 3.65-1.05 3.67-1 3.67-1 3.68-1 3.68-1 3.84-.32 1.13-.41 1.3-.49 1.37-.53 1.43-.58 1.52-.65 1.61-1.37 3.42-1.55 3.68-1.67 3.92-1.66 3.95-1.65 4-1.59 3.88-.73 1.88-.72 1.82-.65 1.75-.6 1.67-.53 1.56-.48 1.45-.39 1.3-.31 1.17-.12.47-.08.43-.09.37v.11l.13.49.12.83v.85l-.05.85-.13.83-.23.8-.3.8-.39.75-.45.7-.53.67-.58.6-.65.55-.7.47-.75.4-.79.31-.8.25-.83.15-.83.09h-.85l-.84-.1-.83-.18-.8-.27-.77-.33-.73-.44-.68-.48-.64-.57-.58-.61-.5-.67-.43-.73-.14-.24-.28-.6-.25-.63-.1-.35-.15-.5-.13-.54-.07-.31-.12-.8-.06-.69v-1.91l.06-.85.12-.84.13-.81.15-.82.19-.82.2-.83.43-1.63.52-1.7.56-1.77.64-1.83.68-1.87.72-1.93.75-1.95.8-2 1.63-4 1.7-4.07 1.68-4 1.64-3.83 1.51-3.62 1.34-3.27.58-1.45.52-1.35.45-1.18.35-1 .25-.78.18-.65.95-3.72 1-3.82 1-3.8 1.07-3.78 1.08-3.78 1.1-3.75 1.14-3.74 1.15-3.73 1.16-3.72 1.19-3.7 1.21-3.7 1.22-3.68 1.23-3.67 1.24-3.68 2.51-7.28 2.55-7.29 2.57-7.25 5.15-14.48 2.55-7.22 2.53-7.23 2.5-7.25 1.22-3.62 1.23-3.68.35-1 .4-1.05.42-1 .43-1 .47-1.05.47-1 .5-1 .5-1 .53-1 .55-1 1.1-2 1.15-2 1.2-2 1.23-2 1.24-2 1.26-2 1.27-2 2.53-3.88 1.25-1.92 1.22-1.92 1.2-1.88 1.15-1.88 1.12-1.85 1.06-1.85 1-1.84.47-.86.46-.9.44-.87.43-.88.4-.87.38-.85.37-.85.35-.83.32-.82.3-.82.26-.8.27-.78.22-.78.2-.75.18-.75.17-.74.11-.71.12-.7.08-.69v-2.11l.07-.85.13-.84.24-.81.3-.79.38-.75.47-.7.53-.66.58-.6.65-.54.7-.46.75-.4.79-.32.81-.25.82-.15.85-.07zm-78.3 232.38-.05-.18-.2-.35z"/><path d="m395.53 658.87h.22l.63.09.64.13.23.07.53.15.52.2.25.08.4.18.4.2.25.14.65.38.55.35.73.58.5.42.6.6.55.63.49.7.4.74.33.78.25.8.17.83.08.84v.85l-.08.83-.18.83-.25.8-.34.79-.41.73-.49.68-.55.64-.61.58-.69.52-.13.08v.67l.05 1.11.06 1.17.17 2.52.22 2.58.23 2.63.22 2.59.18 2.48.08 1.23.07 1.17v5.5l-.05 1.62-.07 1.61-.08 1.6-.1 1.6-.22 3.15-.28 3.14-.3 3.11-.32 3.09-.33 3.05-.32 3-.31 3-.29 3-.25 3-.21 3-.1 1.45-.07 1.47-.07 1.45v13.27l-.08 4.45-.09 4.45-.11 4.43-.15 4.45-.17 4.43-.17 4.44-.2 4.43-.2 4.43-.45 8.85-.46 8.84-.5 8.85-.49 8.81-.46 8.84-.45 8.81-.2 4.4-.19 4.42-.18 4.4-.15 4.4-.15 4.42-.12 4.4-.08 4.4-.08 4.4v9.68l-.14.83-.2.82-.3.78-.38.77-.45.72-.52.66-.58.6-.63.55-.7.49-.74.4-.78.33-.8.25-.83.17-.84.08h-1.06l-.83-.08-.83-.19-.8-.25-.79-.33-.73-.42-.68-.48-.65-.55-.59-.62-.5-.66-.45-.72-.36-.77-.3-.78-.2-.82-.14-.83v-5.33l.05-4.52.06-4.5.1-4.48.12-4.49.13-4.48.17-4.48.17-4.47.2-4.45.2-4.47.45-8.88.48-8.87.48-8.85.49-8.81.48-8.8.43-8.79.2-4.38.2-4.38.17-4.37.17-4.37.13-4.36.12-4.37.1-4.35.06-4.35v-12l.05-1.65.07-1.63.08-1.62.1-1.63.24-3.17.26-3.17.3-3.13.32-3.1.33-3 .32-3 .32-3 .28-3 .27-2.93.21-2.93.09-1.44.06-1.43.07-1.43.05-1.44v-4.45l-.05-1-.07-1-.18-2.3-.22-2.52-.21-2.65-.24-2.73-.18-2.72-.08-1.37-.05-1.35v-5.2l.1-1.28.16-1.23.12-.72.15-.68.18-.74.24-.75.31-.81.42-.87.32-.53.25-.4.26-.39.14-.18.35-.43.38-.42.15-.17.47-.43.5-.4.16-.12.64-.43.65-.35.18-.1.72-.3.73-.25.2-.05.77-.18.8-.1h.93zm28.79-8.37.83.08.83.17.8.27.77.33.75.42.68.48.64.55.58.62.52.66.45.72.36.77.29.78.21.82.12.83v6.07l-.05 5.26-.1 5.25-.14 5.25-.15 5.25-.2 5.25-.2 5.25-.25 5.25-.25 5.24-.26 5.25-.3 5.25-.3 5.25-.64 10.46-.65 10.49-.66 10.48-.63 10.47-.3 5.23-.28 5.23-.27 5.25-.27 5.22-.23 5.23-.2 5.24-.18 5.23-.17 5.23-.12 5.24-.1 5.21-.06 5.24v6.78l-.07 2.35-.28 6.88-.35 9-.37 9.94-.15 5-.13 4.77-.1 4.42-.07 3.93v6.14l.17.83.1.83v.86l-.08.84-.15.83-.25.8-.34.78-.4.74-.48.7-.53.65-.62.58-.67.52-.7.45-.76.38-.79.3-.81.22-.84.13-.85.05h-.83l-.83-.12-.82-.22-.8-.28-.77-.37-.71-.43-.53-.4-.52-.45-.46-.49-.44-.51-.4-.55-.34-.6-.3-.62-.05-.13-.23-.6-.18-.64-.12-.5-.15-.86-.13-1.2-.07-1.27-.05-1.38v-5.09l.07-4.08.1-4.53.13-4.85.17-5 .37-10 .35-9 .26-6.85.09-2.2v-6.45l.05-5.33.1-5.33.13-5.34.15-5.33.18-5.32.22-5.3.23-5.3.27-5.3.27-5.28.3-5.28.3-5.27.63-10.52.65-10.5.65-10.46.63-10.44.3-5.21.29-5.2.26-5.19.27-5.18.23-5.18.2-5.17.19-5.17.16-5.16.12-5.15.1-5.14.05-5.13v-5.17l.05-.83.13-.85.22-.82.3-.78.36-.75.53-.92.52-.66.58-.62.65-.55.7-.47.74-.41.81-.29.8-.25.83-.16.84-.07zm-1.55 227.65.35.62-.19-.4-.45-.62z"/><path d="m436 653.85.83.12.82.21.78.3.77.37.71.45.67.52.6.58.55.63.48.7.42.74.33.78.25.8.17.83.08.84v.85l-.08.83-.18.83-.17.55.12.47.15.57.18.58.42 1.33.46 1.39.5 1.38.5 1.35.5 1.27.87 2.16.55 1.35.8 2 .82 1.9.83 1.9.88 1.92.9 1.9.92 1.9.95 1.92 1 1.91 2 3.87 2 3.9 2.05 3.93 2 4 1 2 1 2 1 2.05 1 2.09.95 2.1.93 2.11.92 2.14.86 2.18.85 2.18.82 2.24.77 2.25.71 2.26.35 1.19.34 1.15.33 1.16.3 1.19.3 1.18.28 1.2.27 1.2.23 1.18.59 2.82.6 2.92.63 3 .67 3.13.71 3.22.75 3.32.79 3.38.81 3.47.85 3.51.89 3.55.91 3.6.95 3.64 1 3.66 1 3.65 1.05 3.67 1.16 3.73 1.1 3.63 1.13 3.62 1.15 3.56 1.2 3.54 1.2 3.48 1.25 3.42.62 1.65.65 1.66.63 1.64.65 1.6.65 1.58.65 1.57.67 1.53.67 1.5.66 1.48.67 1.45.68 1.4.69 1.39.68 1.35.68 1.3.7 1.28.69 1.22.7 1.2.68 1.15.7 1.1.75 1.15.3.46.35.6.57 1 .53 1.1.48 1.1.47 1.12.43 1.13.42 1.14.4 1.16.8 2.32.78 2.32.79 2.3.38 1.08.4 1.07.4 1 .4 1 .38.9.4.85.39.75.38.7.15.26.17.27.15.23.15.2.11.17.55.1.8.25.79.32.73.4.7.48.65.53.58.62.54.65.45.72.38.75.3.8.22.81.13.84.07.83v.85l-.13.83-.2.82-.28.8-.37.75-.43.73-.52.67-.57.62-.63.56-.68.49-.74.41-.78.34-.8.26-.82.19-.85.1h-1.56l-1-.11-1-.22-1-.28-1-.34-.89-.41-.83-.45-.78-.49-.72-.51-.68-.55-.64-.55-.58-.57-.53-.6-.52-.58-.48-.6-.45-.6-.42-.6-.42-.62-.38-.62-.38-.65-.67-1.2-.62-1.26-.6-1.27-.55-1.27-.51-1.28-.5-1.27-.56-1.3-.45-1.29-.85-2.43-.78-2.35-.75-2.2-.35-1-.35-.94-.32-.85-.32-.75-.26-.63-.25-.5-.22-.4v-.07l-.12-.16-.78-1.22-.85-1.35-.84-1.38-.83-1.42-.82-1.45-.8-1.47-.78-1.5-.78-1.53-.77-1.57-.75-1.56-.75-1.62-.75-1.63-.73-1.65-.72-1.67-.72-1.7-.7-1.72-.7-1.73-.68-1.75-.67-1.77-.68-1.8-1.32-3.6-1.26-3.65-1.28-3.69-1.22-3.74-1.18-3.76-1.12-3.77-1.1-3.8-1.09-3.78-1-3.78-1-3.77-1-3.75-.95-3.7-.9-3.67-.88-3.6-.84-3.53-.8-3.48-.76-3.39-.74-3.3-.74-3.18-.65-3.1-.62-3-.56-2.83-.22-1-.22-1-.23-1-.25-1-.25-1-.27-1-.28-1-.28-.95-.64-2-.65-1.93-.7-1.94-.75-1.91-.76-1.92-.82-1.92-.85-1.9-.87-1.91-.9-1.92-.91-1.92-.95-1.91-1-1.92-2-3.87-2-3.9-2.05-3.93-2-4-1-2-1-2-1-2.05-1-2.07-1-2.08-.94-2.1-.91-2.13-.85-2.09-.59-1.41-.91-2.3-.55-1.44-.59-1.55-.58-1.61-.57-1.69-.53-1.66-.25-.89-.25-.85-.22-.86-.2-.89-.16-.86-.15-.92-.12-1-.07-1v-1.63l.05-.38.07-.45.1-.45v-.17l.2-.73.05-.15.15-.42.18-.42.07-.13.23-.48.29-.49.06-.11.37-.54.42-.5.08-.1.5-.53.55-.48.1-.09.63-.45.67-.4.12-.06.7-.34.73-.26h.12l.81-.21.85-.14h.84zm2.41 15.95-.8.28.64-.2.35-.18zm17.67-36.8.49.07.86.13.35.09.52.13.52.15.35.13.45.17.41.2.37.18.7.39.68.41.89.65.8.69.7.7.66.7.6.71.55.72.54.75.51.75.49.77.46.78.45.8.45.8.45.87.82 1.66.82 1.77.78 1.82.77 1.86.75 1.92.73 1.93.7 1.95.68 2 .67 2 .65 2 .62 1.95 1.16 3.73 1.07 3.52 1.75 5.93.65 2.2.48 1.53.7 2.07.74 2.13.75 2.14.76 2.13.79 2.13.81 2.15.82 2.15.82 2.14 1.71 4.33 1.75 4.33 1.8 4.35 1.84 4.37 1.88 4.37 1.9 4.4 1.93 4.41 2 4.42 3.93 8.92 4 9 2 4.5 2 4.51 1.95 4.54 1.92 4.53 1.77 4.47 1.87 4.58 1.81 4.58 1.79 4.6.86 2.34.87 2.3.85 2.31.83 2.34.82 2.31.8 2.34.78 2.33.77 2.35.75 2.33.73 2.35.7 2.35.7 2.37.67 2.35.65 2.37.63 2.38.59 2.32.3 1.1.28 1.05.33 1.08.35 1.1.37 1.12.4 1.11.42 1.15.43 1.14.47 1.16.48 1.15.5 1.19.53 1.16.54 1.17.55 1.17.58 1.18.58 1.17.6 1.16.62 1.17.63 1.15.64 1.15.65 1.13.66 1.14.67 1.11.67 1.1.68 1.09.68 1.08.7 1.05.7 1 .7 1 .7 1 .7 1 .79 1 .35.5.38.61.35.62.35.65.5 1.1.43 1.13.37 1.12.3 1.08.25 1.07.22 1 .2 1 .16 1 .29 1.86.23 1.77.25 1.76.6.3.73.48.67.55.62.62.55.66.48.74.38.78.32.82.22.83.15.87v1.75l-.13.85-.22.85-.32.81-.4.77-.46.73-.55.69-.64.61-.66.55-.74.47-.78.4-.55.25-.87.3-.56.17-.74.16h-.25l-.81.11h-2.5l-.54-.12-.48-.12-.2-.05-.47-.15-.46-.17-.19-.06-.45-.2-.41-.22-.19-.08-.76-.47-.19-.13-.66-.5-.17-.15-.58-.54-.39-.4-.56-.66-.47-.67-.4-.63-.35-.64-.32-.66-.43-1.05-.35-1.07-.28-1-.24-1-.2-1-.16-1-.15-.94-.27-1.78-.22-1.66-.25-1.63-.12-.73-.13-.69-.14-.61-.13-.55-.12-.49-.13-.36-.08-.25-.07-.15-.72-.95-.81-1.14-.82-1.15-.8-1.16-.8-1.19-.78-1.2-.79-1.23-.78-1.23-.77-1.25-.75-1.27-.75-1.27-.73-1.3-.73-1.3-.7-1.31-.7-1.32-.69-1.32-.68-1.35-.65-1.33-.63-1.35-.62-1.35-.62-1.37-.58-1.35-.57-1.35-.53-1.36-.53-1.37-.5-1.37-.49-1.35-.45-1.36-.43-1.35-.4-1.37-.38-1.35-.34-1.28-.58-2.29-.58-2.21-.62-2.22-.63-2.22-.65-2.23-.67-2.22-.7-2.23-.72-2.22-.71-2.21-.75-2.24-.77-2.21-.78-2.24-.8-2.23-.82-2.22-.82-2.23-.83-2.22-1.73-4.46-1.77-4.45-1.82-4.45-1.85-4.47-1.88-4.45-1.92-4.47-1.91-4.47-1.95-4.48-3.95-8.93-4-8.9-2-4.47-1.95-4.45-1.93-4.46-1.92-4.45-1.88-4.47-1.83-4.45-1.74-4.42-1.75-4.45-.87-2.25-.85-2.21-.83-2.24-.83-2.23-.8-2.25-.79-2.23-.76-2.24-.79-2.28-.56-1.83-.7-2.34-1.75-5.9-1-3.4-1.12-3.6-.58-1.81-.6-1.82-.62-1.83-.63-1.8-.65-1.79-.65-1.71-.65-1.69-.65-1.58-.65-1.5-.63-1.4-.65-1.28-.29-.57-.3-.53-.28-.5-.27-.45-.25-.4-.23-.34-.22-.3-.2-.06-.8-.34-.76-.43-.72-.5-.65-.57-.6-.65-.52-.68-.45-.75-.36-.8-.29-.82-.2-.85-.1-.86v-.94l.08-.86.17-.85.25-.84.35-.8.41-.76.52-.72.57-.65.63-.6.7-.52.75-.45.8-.36.82-.29.85-.2.86-.1h1.35zm-1.21 16.64h.13-.43zm-77.97-37.57h1l.33.05.34.07.31.08.32.1.33.1.3.12.32.13.3.15.3.15.28.17.29.18.28.2.27.2.25.22.25.21.25.24.23.25.22.25.21.26.2.27.19.27.18.28.17.3.15.3.15.3.11.3.14.32.1.31.08.34.08.31.07.34.05.33.05.33v2.25l-.07.7-.1.74-.23 1.23-.32 1.27-.37 1.26-.4 1.24-.51 1.31-.48 1.25-.52 1.25-.55 1.25-.58 1.27-.6 1.26-.62 1.27-.66 1.3-1.32 2.52-1.37 2.53-1.4 2.5-1.36 2.42-1.34 2.31-2.43 4.25-1 1.84-.92 1.66-.17.3-.16.29-.2.26-.2.29-.2.25-.24.25-.21.25-.25.23-.25.22-.27.21-.27.2-.26.2-.29.19-.28.16-.3.15-.3.15-.32.14-.31.11-.32.1-.32.1-.33.09-.32.06h-3l-.32-.07-.33-.08-.32-.08-.32-.12-.31-.12-.32-.13-.3-.13-.3-.15-.28-.17-.29-.18-.28-.19-.27-.21-.26-.2-.25-.24-.25-.21-.24-.25-.21-.25-.22-.25-.2-.27-.18-.28-.19-.29-.16-.28-.17-.3-.15-.3-.13-.32-.12-.31-.1-.32-.1-.32-.08-.33-.07-.32-.05-.33-.05-.33v-2.01l.05-.33.07-.32.08-.33.1-.32.1-.32.12-.31.13-.32.14-.3.16-.3 1-1.77 1.12-2 2.46-4.3 1.3-2.28 1.34-2.34 1.3-2.35 1.27-2.35 1.22-2.31.57-1.1.53-1.1.5-1 .47-1 .43-1 .4-.93.33-.87.29-.8.23-.72.18-.63.14-.5.08-.45v-1.37l.05-.33.08-.32.07-.33.1-.32.12-.31.11-.32.14-.3.13-.32.17-.28.16-.3.19-.28.18-.27.22-.27.2-.26.23-.25.23-.24.24-.23.25-.23.26-.2.27-.2.28-.2.29-.17.28-.17.3-.16.3-.14.32-.13.31-.12.32-.1.32-.1.33-.08.33-.07h1.34z"/><path d="m444.32 609.3 1.1.07 1.11.11 1.12.15 1.12.22 1.15.27 1.13.35 1.13.41 1.14.5 1.11.57 1 .63.6.4.52.39.51.41.5.42.49.45.46.47.45.46.44.5.41.52.4.53.39.54.36.55.35.56.37.64.58 1.13.54 1.22.48 1.26.42 1.3.36 1.32.32 1.38.27 1.4.23 1.45.17 1.5.13 1.54.1 1.6.07 1.63v2.6l-.06.48-.1.49-.14.48-.15.47-.18.46-.2.45-.23.44-.27.41-.28.4-.3.4-.34.37-.35.35-.36.32-.39.3-.41.28-.42.27-.43.21-.45.22-.47.17-.47.15-.48.11-.48.1-.49.07h-2l-.48-.09-.49-.11-.46-.14-.47-.16-.45-.2-.45-.22-.42-.25-.41-.27-.4-.3-.39-.31-.35-.34-.33-.36-.32-.39-.3-.4-.26-.41-.25-.42-.22-.45-.18-.45-.17-.47-.13-.48-.1-.48-.09-.49v-2.38l-.05-1.23-.07-1.15-.1-1-.1-1-.15-.88-.15-.8-.15-.7-.18-.63-.17-.54-.18-.45-.17-.38-.18-.37-.05-.08-.07-.12-.06-.1-.07-.08-.05-.07-.05-.06-.07-.07h-.1l-.17-.1-.11-.06-.15-.07-.19-.07-.23-.06-.28-.07-.34-.07-.38-.05h-3.56l-.72.05-.75.08-.78.1-.8.1-1.78.28-1.87.32-2 .37-4.25.81-2.25.44-2.35.4-2.4.4-1.25.18-1.25.17-1.28.16-1.28.14-1.32.13-1.32.12-1.33.08-1.37.07h-3.65l-.68.09-.82.13-.9.15-1 .22-1.05.21-1.1.27-2.35.58-2.41.62-2.45.65-2.4.62-2.32.56-1.15.25-1.12.24-1.11.18-1.14.17-1.11.1h-1.4l-.77-.05-.88-.11-.55-.12-.47-.12-.45-.13-.18-.07-.39-.15-.38-.15-.38-.18-.15-.08-.35-.2-.34-.2-.33-.24-.33-.23-.12-.1-.37-.32-.36-.33-.34-.37-.31-.38-.09-.1-.26-.37-.24-.35-.21-.38-.22-.38-.17-.4-.06-.14-.15-.4-.14-.4-.11-.4-.09-.41-.08-.42v-.13l-.05-.47v-1.57l.05-.48.07-.48.12-.47.05-.18.1-.37.11-.37.13-.56.08-.2.17-.38.18-.38.28-.54.49-.75.48-.65.37-.45.31-.38.35-.35.37-.33.38-.32.4-.28.42-.27.43-.23.44-.22.46-.18.47-.17.47-.13.48-.1.5-.07h1.97l.48.07.48.1.49.13.46.15.45.18.45.22.44.23.41.27.1.08.74-.18 2.25-.58 2.43-.64 2.53-.65 2.55-.65 1.32-.3 1.3-.28 1.28-.27 1.27-.23 1.28-.18 1.29-.17 1.23-.1h4.48l1.07-.09 1.07-.08 1.05-.1 1.06-.12 1.09-.13 1.06-.15 1.05-.15 2.17-.35 2.13-.38 2.15-.4 4.25-.82 2.12-.4 2.12-.37 2.08-.31 1.07-.15 1.06-.14 1.07-.1 1.05-.1 1.07-.06h2.16z"/><path d="m417.2 620.8h1.13l.39.08.36.08.35.12.37.12.35.15.35.15.33.18.34.18.31.2.32.22.3.23.28.25.29.25.26.27.25.28.25.3.22.3.22.32.2.32.18.33.17.33.15.35.15.35.11.37.1.37.09.36.08.37v1.92l.15 1.71.22 2.4.3 2.94.37 3.35.41 3.65.47 3.81.47 3.87.5 3.82.5 3.63.5 3.33.46 2.94.2 1.21.2 1.09.19.86.05.24.11.2.15.35.15.35.14.35.11.36.1.37.07.37.07.38.05.37v1.51l-.05.39-.05.36-.06.39-.1.36-.1.37-.14.35-.13.35-.17.35-.16.33-.19.34-.2.31-.21.32-.24.3-.25.3-.25.27-.26.26-.29.27-.28.23-.32.24-.3.21-.33.2-.33.19-.34.16-.35.15-.35.15-.36.12-.35.1-.39.1-.35.07-.37.05h-2.18l-.37-.07-.36-.07-.33-.09-.33-.1-.34-.11-.31-.12-.32-.15-.32-.15-.3-.17-.3-.18-.3-.18-.28-.2-.27-.22-.06-.07-.29-.23-.26-.25-.25-.25-.25-.27-.22-.28-.23-.3-.2-.3-.07-.1-.17-.25-.13-.25-.13-.25-.14-.25-.23-.48-.27-.72-.21-.67-.29-1.05-.25-1.11-.25-1.22-.25-1.32-.25-1.43-.5-3.15-.51-3.5-.52-3.77-.5-3.91-.5-4-.47-3.9-.43-3.73-.37-3.44-.31-3.06-.25-2.59-.15-2-.05-.88v-1.73l.05-.37.07-.38.08-.37.1-.37.12-.36.13-.35.15-.35.17-.34.18-.33.2-.33.2-.32.24-.3.23-.3.25-.28.27-.27.26-.27.3-.25.3-.23.3-.22.32-.2.33-.2.34-.16.35-.17.35-.15.35-.13.36-.1.37-.1.37-.09.38-.06h1.13z"/><path d="m401.65 620.8h.4l.42.07.4.07.4.1.38.11.4.12.37.17.38.16.37.19.35.2.33.23.33.23.32.25.32.29.28.28.28.3.27.3.25.33.23.34.22.35.2.35.17.36.16.39.15.38.12.38.1.4.1.4v.4l.05.42v2.97l-.07 2.33-.12 2.4-.16 2.47-.2 2.53-.25 2.55-.29 2.58-.33 2.6-.37 2.59-.41 2.58-.47 2.53-.48 2.49-.29 1.26-.28 1.22-.28 1.2-.3 1.18-.32 1.17-.33 1.15-.34 1.13-.31.95v.25l-.05.25-.05.29-.13.93-.12 1.07-.1 1.2-.08 1.26-.15 2.59-.15 2.33-.09 1.13-.13 1.12-.1.52-.07.28-.06.27-.07.26-.05.17-.12.33-.11.32-.14.33-.15.32-.16.3-.17.3-.05.1-.22.32-.21.31-.24.3-.25.3-.26.29-.27.26-.3.25-.3.25-.3.24-.33.2-.32.2-.35.18-.36.16-.37.17-.37.13-.36.12-.39.1-.38.08-.38.07-.4.05h-1.57l-.4-.05-.38-.07-.36-.08-.39-.1-.36-.12-.37-.13-.35-.15-.35-.17-.33-.18-.34-.2-.33-.2-.3-.23-.3-.25-.29-.25-.26-.25-.25-.27-.25-.28-.24-.28-.21-.3-.21-.35-.22-.35-.18-.37-.17-.37-.08-.16-.12-.29-.1-.28-.1-.3-.15-.5-.15-.6-.08-.4-.07-.4-.05-.42v-2.03l.08-.4.08-.4.12-.4.13-.38.15-.39.12-.26v-.37l.16-2.68.1-1.49.14-1.51.15-1.54.21-1.48.15-.82.15-.78.22-.82.2-.71.32-1 .26-.87.27-.9.25-.93.25-1 .23-1 .24-1 .23-1 .43-2.19.4-2.23.37-2.3.33-2.32.3-2.31.27-2.34.22-2.3.18-2.26.13-2.2.1-2.12.07-2v-2.81l.05-.4.08-.4.08-.4.12-.4.13-.39.15-.38.17-.37.2-.36.2-.35.22-.35.25-.34.25-.31.26-.3.29-.3.3-.29.31-.25.34-.25.33-.23.35-.22.35-.2.37-.18.38-.17.38-.13.39-.13.4-.1.4-.09.4-.06h1.23z"/><path d="m489.6 554.8h2l1 .07 1 .08 1 .1 1 .14 1 .15 1 .18 1 .22 1 .25 1 .26 1 .32 1 .37.95.4.95.45.95.5.94.56.9.64.9.68.86.77.82.81.77.9.71 1 .67 1 .53 1 .5 1 .42.95.4.93.37.95.35 1 .31 1 .3 1 .27 1 .23 1 .22.95.18 1 .17 1 .13 1 .1 1 .09 1 .06.95v4.81l-.1.94-.1.91-.13.92-.17.92-.17.9-.2.9-.21.9-.24.88-.26.87-.27.86-.3.87-.32.85-.33.85-.35.83-.37.84-.38.81-.4.8-.42.8-.43.8-.43.79-.47.76-.48.77-.49.75-.5.75-.51.73-.54.74-.55.71-.55.7-.56.7-.59.69-.58.68-.62.67-.6.65-.63.65-.65.66-1.75.76-1.35 1.2-1.37 1.15-1.42 1.12-1.45 1.08-1.48 1-1.52 1-1.53.93-1.58.89-1.59.85-1.63.78-1.63.73-1.67.7-1.68.64-1.67.56-.9.29-.85.25-.88.23-.87.23-.87.2-.88.2-.88.19-.89.16-.88.15-.88.14-.9.11-.89.1-.9.09-.9.06h-5.4l-.9-.05-.91-.08-.9-.1-.9-.14-.9-.13-.9-.17-.89-.16-.9-.22-.88-.22-.9-.25-.88-.26-.87-.29-.88-.31-.87-.34-.87-.36-.85-.39-.85-.4-.85-.43-.83-.45-.82-.47-.81-.5-.72-.46-.65-.47-.6-.52-.53-.58-.5-.62-.42-.66-.37-.72-.28-.73-.23-.77-.14-.77-.08-.8v-.78l.08-.8.15-.77.24-.76.3-.74.36-.7.44-.66.48-.62.55-.58.6-.52.65-.45.68-.4.74-.33.75-.25.76-.19.79-.11h1.58l.78.12.77.18.75.27.73.33.69.4.51.34.45.28.45.25.45.25.47.23.45.22.47.22.48.18.48.2.49.17.48.16.5.15.5.14.52.13.51.12.52.1.52.1.53.08.53.07.55.06h.54l.55.05h3.4l.58-.05h.58l.59-.07.58-.08.6-.08.58-.1.6-.12.59-.12.6-.13.6-.13.6-.17.6-.17.58-.16.57-.19 1.23-.41 1.18-.45 1.19-.49 1.16-.53 1.17-.55 1.13-.62 1.14-.63 1.11-.67 1.09-.7 1.06-.75 1-.76 1-.79 1-.83.95-.85.95-.9.42-.42.43-.45.42-.45.41-.46.4-.45.4-.49.39-.46.38-.47.37-.48.35-.5.33-.49.33-.48.34-.5.3-.48.3-.5.28-.5.27-.5.26-.5.25-.52.24-.5.23-.52.2-.5.22-.51.18-.5.17-.52.16-.52.15-.5.21-.48.13-.52.12-.52.1-.5.08-.51.07-.5.06-.52.05-.52v-3.1l-.05-.51-.07-.52-.06-.53-.09-.52-.1-.52-.11-.53-.14-.53-.15-.54-.16-.55-.19-.53-.2-.55-.21-.55-.24-.55-.25-.55-.23-.47-.05-.11v-.05h-.05l-.09-.06-.11-.09-.17-.08-.18-.12-.24-.1-.28-.11-.32-.14-.36-.11-.4-.12-.44-.1-.48-.1-.5-.1-.55-.08-.57-.09-.6-.06h-.63l-.65-.05h-5.13l-1.59.08-1.61.13-1.65.15-1.67.17-1.67.2-1.66.22-1.64.21-3.25.45-3.06.44-1.49.21-1.45.17-1.38.17-1.35.11-1.33.09h-24.45l-4.59.06-4.75.12-4.86.15-5 .18-2.52.12-2.53.13-2.57.15-2.58.15-2.59.19-2.58.2-2.6.2-2.6.23-2.6.25-2.6.27-2.58.28-2.59.32-2.56.33-2.55.35-2.54.38-2.51.4-2.49.42-2.46.45-2.44.48-2.4.5-2.35.52-2.33.57-2.27.56-2.27.55-2.18.63-2.14.67-2.1.7-1 .35-1 .35-1 .38-1 .37-.95.38-.93.4-.93.39-.9.41-.89.4-.86.42-.84.42-.83.43-.82.43-.78.45-.77.44-.75.45-.73.46-.7.47-.68.47-.67.46-.63.49-.64.46-.6.5-.56.49-.55.48-.54.5-.51.5-.49.5-.46.52-.45.5-.42.51-.4.52-.22.28.05.09.15.26.19.32.21.33.27.37.3.38.33.4.37.44.4.45.43.45.47.46.48.47.54.48.53.49.57.48.58.48.62.5.61.49.62.46 1.35 1 1.35 1 1.4.91 1.4.9 1.42.85 1.38.82 1.38.75 1.32.72 1.28.65 1.2.56 1.14.52 1 .43.88.35.7.25.57.17h5.58l2.6-.07 2.84-.1 5.91-.2 3-.08h7.95l1.16.07 1.17.11 1.1.17.7.13.7.17.82.27.5.2.46.21.45.24.15.08.6.37.59.43.11.08.54.49.5.51.45.57.06.1.42.63.35.65.3.69.23.71v.1l.15.64.1.65.05.63v.65l-.05.65v.12l-.1.66-.16.67-.22.63-.27.64v.11l-.38.7-.43.65-.5.62-.55.57-.62.51-.65.45-.7.39-.72.31-.75.25-.78.19-.78.1h-.8l-.79-.05-.78-.11-.77-.2-.75-.29-.71-.33-.27-.17h-6.68l-2.78.07-5.85.2-2.88.1-2.74.08h-6.9l-1.07-.08-1.05-.17-.78-.17-.73-.2-1.24-.36-1.31-.49-1.37-.53-1.42-.6-1.46-.67-1.52-.73-1.57-.8-1.61-.85-1.65-.92-1.67-1-1.68-1-1.69-1.08-1.7-1.12-1.66-1.17-1.64-1.2-.83-.63-.82-.63-.8-.64-.78-.66-.78-.67-.75-.68-.75-.69-.74-.7-.71-.71-.7-.74-.69-.75-.66-.76-.64-.79-.61-.8-.6-.83-.57-.87-.53-.88-.52-.92-.47-1-.43-1-.38-1-.32-1.1-.27-1.13-.28-1.16-.08-1.23v-1.27l.11-1.18.12-.74.13-.65.17-.63.18-.63.24-.64.25-.61.28-.6.3-.6.33-.57.34-.53.66-1 .67-.92.7-.9.72-.87.73-.85.77-.83.78-.8.82-.8.81-.77.85-.75.87-.73.88-.72.9-.7.92-.68.95-.67.95-.65 1-.63 1-.62 1-.6 1-.58 1-.58 1-.55 1.06-.55 1.07-.54 1.07-.51 1.1-.52 1.1-.48 1.11-.49 1.14-.46 1.13-.47 1.15-.45 1.17-.43 1.18-.42 1.2-.43 2.37-.79 2.43-.76 2.48-.72 2.5-.68 2.54-.64 2.55-.58 2.59-.59 2.61-.55 2.64-.5 2.66-.5 2.67-.45 2.68-.43 2.7-.4 2.72-.37 2.72-.35 2.73-.33 2.72-.3 2.73-.28 2.72-.27 2.71-.23 2.72-.22 2.7-.2 2.68-.18 2.67-.17 2.67-.15 2.63-.15 2.62-.12 5.11-.2 5-.15 4.87-.11 4.68-.07h24.7l.95-.09 1.12-.13 1.25-.15 1.36-.18 3-.44 3.32-.46 1.75-.24 1.8-.23 1.83-.22 1.88-.18 1.9-.18 1.92-.15 1.93-.1 1.95-.07h1.92z"/><path d="m389.85 479.05h.5l.52.07.5.1.48.13.48.15.47.2.47.22.45.25.43.27.4.3.4.31.37.35.36.37.32.38.32.44.26.4.24.41.21.42.2.45.15.43.15.47.1.47.1.46v2.09l-.06.51-.1.52-.14.5-.15.5-.2.48-.21.49-.25.45-.15.4-.35 1-.4 1.18-.43 1.35-.47 1.45-.45 1.52-.37 1.56-.4 1.52-.35 1.45-.3 1.35-.1.55-.08.51-.07.47v3.45l-.07 2.77-.13 2.85-.18 2.86-.24 2.9-.26 2.92-.3 2.93-.35 2.94-.39 2.93-.41 2.92-.45 2.88-.47 2.87-.5 2.81-.53 2.77-.55 2.72-.54 2.48-.06.32v.3l-.27.43v5.28l.07 1.85.11 3.72.05 1.8v2.65l-.05.9-.11 1-.12.7-.1.42-.1.4-.1.35-.15.47-.18.46v.15l-.2.42-.22.42-.07.11-.21.37-.24.35-.25.35-.08.1-.27.32-.28.31-.3.3-.32.27-.06.08-.35.27-.35.27-.39.23-.38.22-.38.2h-.09l-.45.2-.46.17-.47.13-.47.12-.48.08h-.1l-.47.06h-2l-.48-.09-.48-.11-.47-.14-.55-.16-.11-.05-.45-.19-.44-.23-.43-.23-.12-.09-.31-.2-.3-.21-.29-.22-.13-.12-.3-.25-.3-.28-.35-.37-.58-.66-.5-.7-.3-.44-.27-.45-.23-.46-.22-.47-.17-.5-.15-.5-.11-.52-.09-.51-.05-.52v-1l.05-.52.09-.51.11-.52.14-.5.18-.5.2-.47.25-.46.27-.45.28-.44.17-.23-.12-3.45-.07-2v-6l.07-1 .1-1 .15-1 .18-.92.55-2.6.52-2.52.48-2.56.47-2.64.45-2.66.41-2.7.39-2.72.36-2.73.32-2.74.28-2.71.25-2.69.2-2.66.17-2.62.12-2.55.08-2.52v-3.35l.09-.93.1-.92.11-.9.15-.88.19-.93.38-1.77.43-1.83.49-1.82.51-1.8.52-1.75.53-1.65.5-1.55.49-1.4.43-1.23.42-1.09.4-1 .35-.71.25-.44.23-.36.25-.34.25-.33.28-.33.31-.35.35-.32.37-.3.38-.26.39-.27.41-.23.42-.2.43-.19.44-.16.5-.15.49-.12.51-.08.5-.05h.5zm24.42-1.7h.48l.47.07.48.08.45.13.47.14.45.18.43.2.42.22.41.25.4.26.39.3.35.32.35.33.35.39.28.35.27.38.26.38.22.4.22.42.18.42.15.43v.07l.13.45.12.45.08.45.08.56.07.92v2.32l-.06.48-.09.48-.13.49-.15.46-.17.47-.2.42-.06.71-.32 3.37-.27 3.43-.11 1.54-.07 1.35-.05 1v3.58l-.05 1.47-.06 1.43-.09 1.43-.1 1.44-.23 2.76-.28 2.72-.3 2.68-.32 2.65-.33 2.59-.32 2.55-.32 2.53-.28 2.48-.25 2.49-.22 2.46-.08 1.2-.07 1.22-.06 1.22-.05 1.21v4.04l-.06.78-.09.83-.18 1.57-.22 1.65-.26 1.65-.27 1.63-.5 3-.13.82.05.25.06.48.05.5v.98l-.05.49-.07.5-.1.48-.13.47-.15.46-.18.47-.25.58-.24.47-.2.37-.2.35-.11.18-.25.38-.29.37-.3.37-.05.05-.28.3-.3.3-.32.26-.33.27-.35.25-.42.26-.43.24-.44.21-.46.19-.47.15-.47.13-.48.1-.48.07h-1.99l-.49-.08-.48-.1-.47-.12-.46-.16-.47-.19-.43-.2-.44-.25-.41-.25-.4-.3-.39-.3-.35-.34-.33-.33-.32-.37-.3-.38-.28-.38-.24-.42-.23-.42-.2-.45-.18-.45-.14-.45v-.1l-.13-.48-.1-.48-.07-.49v-1.98l.13-1.15.17-1.23.43-2.65.52-3 .25-1.5.21-1.47.19-1.36.15-1.22.05-.48v-3.75l.05-1.43.06-1.42.09-1.42.1-1.4.23-2.73.28-2.7.3-2.67.32-2.61.33-2.59.32-2.56.32-2.54.28-2.5.25-2.5.22-2.5.08-1.23.08-1.23v-1.25l.05-1.24v-3.63l.07-1.37.1-1.53.12-1.7.28-3.62.33-3.58.17-1.67.17-1.48.18-1.32.2-1.18.1-.5.12-.43.15-.45.05-.15.16-.42.19-.42.2-.41.23-.39.23-.38.27-.39.3-.35.32-.35.33-.31.35-.3.37-.29.4-.26.38-.24.42-.21.41-.2.44-.17.45-.15.45-.12.47-.09.48-.08h.95zm26.58 3.52.5.05.48.08.49.12.46.15.47.16.45.2.43.22.44.25.41.28.39.3.38.32.35.35.33.35.32.38.28.4.27.42.25.43.2.45.2.45.15.47.13.48.1.49.09.48.05.5v6l.05 2.78.08 2.82.1 2.83.12 2.87.15 2.87.18 2.9.22 2.9.25 2.91.26 2.92.32 2.92.35 2.9.38 2.91.42 2.9.45 2.89.65 3.71.38 2.25.42 2.45.4 2.57.37 2.6.18 1.33.15 1.32.15 1.3.12 1.3.1 1.28.06 1.25v2.49l-.05 1.25-.1 1.18-.1.72-.12.68-.17.7-.2.77-.28.8-.23.53-.15.33-.19.35-.11.2-.22.4-.27.39-.11.18-.22.3-.23.28-.25.29-.14.15-.3.31-.31.29-.34.28-.15.12-.38.3-.42.26-.41.25-.17.09-.35.18-.37.17-.36.15-.39.13h-.16l-.39.12-.38.08-.38.07-.39.06h-2.31l-.42-.07-.43-.08h-.22l-.35-.1-.35-.1-.35-.12-.23-.08-.44-.17-.41-.18-.25-.14-.23-.14-.33-.19-.52-.33-.75-.53-.5-.4-.36-.32-.37-.35-.33-.37-.3-.38-.3-.4-.25-.42-.25-.43-.2-.45-.19-.45-.16-.48-.14-.47-.1-.48-.06-.5v-1.99l.08-.48.1-.49.13-.48.15-.47.19-.45.21-.45.25-.43.27-.42.28-.4.32-.38.33-.37.35-.33.37-.33.18-.14v-.28l-.08-1-.12-1.09-.13-1.11-.15-1.15-.35-2.39-.37-2.38-.4-2.32-.37-2.21-.66-3.82-.5-3.12-.45-3.11-.42-3.12-.37-3.12-.33-3.11-.28-3.1-.27-3.1-.22-3.07-.2-3.07-.16-3-.14-3-.1-3-.08-2.95v-9.12l.05-.48.06-.5.1-.49.14-.46.15-.47.18-.47.22-.45.15-.38.27-.42.28-.4.32-.38.33-.37.35-.35.37-.31.4-.3.4-.29.43-.25.43-.23.45-.2.47-.17.47-.15.48-.11.48-.09.49-.06h1zm20.5-5.27h.65l.48.07.48.08.47.12h.13l.4.12.42.15.4.15.12.07.35.16.33.17.32.18.13.09.4.26.38.29.14.1.3.26.3.27.38.37.53.6.52.65.63 1 .54 1 .45 1 .4 1 .35 1 .31 1 .32 1 .28 1 .29 1.1.28 1.14.27 1.18.26 1.25.5 2.53.5 2.7.49 2.85.46 3 .45 3 .45 3.14.44 3.18.41 3.23.42 3.24.38 3.25.75 6.35.69 6.06.61 5.6.55 4.94.49 4.11.2 1.64.18 1.35.15 1 .13.72.07.48.05.49v1.45l-.07.48-.1.48-.12.47-.15.45-.18.45-.2.45-.23.43-.25.4-.27.4-.3.39-.32.36-.35.35-.35.32-.38.3-.4.28-.42.27-.41.23-.44.2-.45.19-.46.15-.47.13-.47.1-.48.07h-1.96l-.5-.09-.48-.1-.47-.12-.45-.15-.45-.18-.45-.2-.43-.24-.4-.25-.4-.26-.38-.3-.37-.32-.35-.35-.32-.35-.3-.38-.28-.4-.27-.42-.23-.42-.2-.43-.18-.45-.15-.47-.14-.46-.1-.47-.18-1-.2-1.35-.2-1.55-.23-1.8-.49-4.2-.56-5-.62-5.6-.68-6-.74-6.29-.38-3.16-.4-3.17-.4-3.15-.42-3.1-.43-3-.43-2.91-.45-2.79-.45-2.65-.45-2.46-.45-2.29-.24-1-.21-1-.22-.91-.22-.84-.2-.73-.2-.67-.18-.53-.35-.33-.33-.35-.32-.39-.28-.38-.27-.4-.23-.43-.22-.44-.2-.43-.17-.47-.13-.46-.12-.47-.08-.48-.05-.47v-1.47l.07-.46.08-.49.1-.46.15-.47.17-.47.18-.43.22-.43.25-.42.26-.42.29-.38.31-.37.34-.35.35-.33.38-.32.38-.28.4-.27.44-.25.43-.21.43-.19.47-.16.45-.14.48-.11.47-.09.48-.05h.49zm-1.58 16.58.6.05-.49-.06-.38-.07z"/><path d="m459.68 356.52 1.74.05 1.71.08 1.72.13 1.68.15 1.67.2 1.65.25 1.63.29 1.6.33 1.6.38 1.54.44.81.25.77.26.77.27.75.28.76.3.75.32.74.35.63.3.35.18.35.2.15.09.52.35.5.38.13.12.38.33.35.37.14.13.28.32.25.31.33.44.45.7.39.66.3.64.28.65.38 1.05.34 1.1.26 1.06.25 1.1.2 1.1.19 1.12.16 1.13.17 1.17.13 1.17.14 1.21.2 2.37.23 2.4.13 2.31.12 2.19.08 2 .05 1.8v5.73l.06.87.17 2 .23 2.22.3 2.42.34 2.6.38 2.78.42 2.9.88 6.22.95 6.55.47 3.4.45 3.41.43 3.47.4 3.48.37 3.47.33 3.45.13 1.75.14 1.7.11 1.72.1 1.7.07 1.68.07 1.67.05 1.65v4.85l-.05 1.58-.07 1.57-.1 1.53-.13 1.52-.17 1.5-.2 1.48-.25 1.45-.26 1.43-.34 1.42-.36 1.38-.44 1.39-.46 1.28-.3.72-.29.66-.31.65-.32.65-.35.65-.38.64-.4.63-.44.62-.45.61-.48.6-.5.59-.53.55-.55.51-.55.5-.57.47-.57.45-.58.42-.58.4-.62.38-.6.37-.62.33-.66.37-1.22.58-1.28.55-1.32.52-1.33.46-1.37.42-1.38.38-1.42.35-1.43.32-1.47.3-1.48.27-1.5.23-1.54.22-1.55.18-1.56.17-1.59.15-1.6.13-1.61.12-1.65.1-1.65.08-1.65.07-1.69.05h-10.18l-3.42-.06-3.38-.12-3.37-.13-3.31-.15-3.27-.19-3.2-.18-6.08-.38-5.62-.37-5-.3-2.22-.13-2-.09-1.76-.05h-13.6l-1.62.07-1.62.08-1.6.1-1.56.13-1.59.15-1.55.2-1.56.22-1.55.25-1.62.3-9.68 1.9-.7.12-.7.05h-.72l-.7-.08-.68-.12-.6-.16-.66-.25-.64-.3-.61-.35-.59-.42-.53-.45-.27-.25-.21.35-.42.57-.47.53-.51.49-.55.45-.59.4-.61.33-.65.3-.67.23-.68.19-.69.11-.71.05h-1.34l-.6-.09-.37-.05-.36-.08-.59-.13-.91-.29-.87-.35-.8-.41-.75-.47-.68-.48-.62-.52-.55-.53-.5-.58-.45-.53-.42-.53-.43-.62-.58-1-.55-1.05-.47-1-.38-1-.34-1-.3-1-.25-1-.23-1-.18-1-.17-1-.15-1-.12-1-.1-1-.06-1-.07-.95v-5.3l.06-.81.09-.8.1-.8.11-.65.22-1.2.17-1.07.15-1.12.13-1.13.1-1.18.07-1.2.06-1.24v-6.52l-.07-1.37-.08-1.4-.1-1.43-.1-1.42-.27-2.95-.31-3-.35-3-.39-3.09-.81-6.3-.82-6.36-.4-3.22-.38-3.22-.34-3.21-.28-3.2-.12-1.64-.11-1.6-.09-1.6-.08-1.6v-6.33l.05-1.58.06-1.57.09-1.57.13-1.55.17-1.55.18-1.53.23-1.53.29-1.52.3-1.52.36-1.5.4-1.5.45-1.48.5-1.45.57-1.45.6-1.43.73-1.55.3-.52.22-.37.25-.35.17-.25.23-.3.25-.3.43-.5.7-.68.7-.6.7-.52.69-.45.7-.4.68-.36.67-.32.66-.28.67-.27.67-.25.71-.23 1.3-.39 1.37-.33 1.37-.3 1.4-.27 1.41-.23 1.44-.2 1.43-.17 1.45-.16 1.45-.14 1.45-.11 1.45-.1 1.42-.09 1.43-.06 2.72-.1 2.56-.07h8.59l1.11-.05 1.17-.05 1.22-.08 1.26-.1 1.3-.12 1.37-.15 1.4-.17 1.43-.18 1.45-.18 3.07-.45 3.18-.52 3.29-.55 3.38-.6 3.47-.62 7.16-1.31 3.65-.67 3.7-.67 3.74-.65 3.73-.63 3.77-.58 3.73-.55 1.88-.27 1.87-.25 1.87-.22 1.86-.21 1.85-.2 1.85-.17 1.84-.17 1.81-.13 1.82-.12 1.8-.08 1.8-.07h3.53zm-3.3 16.65h-1.51l-1.55.05-1.59.08-1.61.1-1.64.12-1.65.15-1.68.15-1.7.18-1.72.2-1.73.22-1.75.22-1.75.25-3.57.51-3.6.57-3.61.62-3.64.63-3.63.65-3.62.65-7.16 1.32-3.54.65-3.48.6-3.42.58-3.35.53-3.26.49-1.62.21-1.6.2-1.57.19-1.53.16-1.52.14-1.5.13-1.48.08-1.45.09h-10.05l-2.37.05-2.5.1-1.25.06-1.28.07-1.27.08-1.25.12-1.23.1-1.2.13-1.15.15-1.12.15-1 .17-1 .18-.89.2-.76.19-.72.21h-.17l-.08.22-.35.88-.3.92-.3.95-.27 1-.23 1-.22 1.05-.2 1.08-.16 1.12-.15 1.15-.12 1.17-.1 1.21-.08 1.24-.05 1.26v6.69l.07 1.41.08 1.42.1 1.43.12 1.45.26 3 .32 3 .35 3.06.38 3.09.82 6.31.82 6.35.4 3.2.36 3.2.34 3.2.28 3.19.13 1.6.1 1.58.1 1.58.07 1.59.05 1.58v4.68l-.05 1.55-.06 1.55-.1 1.54-.14 1.53-.16 1.52-.2 1.51-.24 1.5-.25 1.35v5.17l.05.65.07.65.08.65.09.62.1.6.11.58.12.53.12.49.1.33h.06l.62.35.58.4.55.45.37.33.3-.47.42-.55.48-.53.52-.48.56-.44.59-.38.63-.33.65-.29.67-.21.68-.17 9.7-1.71 1.88-.35 1.94-.31 1.91-.27 1.89-.23 1.88-.19 1.87-.15 1.85-.11 1.83-.1 1.83-.07 1.82-.05h12.68l2 .06 2.2.1 2.35.12 5.1.32 5.61.36 6 .39 3.1.18 3.18.17 3.2.15 3.25.13 3.23.1 3.24.07h9.56l1.53-.05 1.5-.05 1.48-.08 1.45-.09 1.44-.1 1.4-.11 1.36-.12 1.34-.15 1.28-.17 1.25-.16 1.22-.2 1.15-.2 1.1-.22 1.06-.23 1-.25.93-.27.88-.27.8-.28.73-.32.67-.28.61-.32.22-.1.23-.13.27-.17.18-.14.18-.11.15-.12.14-.1.11-.1.1-.08.07-.07.05-.05.05-.07.07-.06.06-.1.09-.12.08-.13.1-.15.1-.19.1-.2.1-.23.12-.25.08-.22.23-.66.22-.69.22-.76.18-.85.18-.9.17-1 .13-1.05.12-1.1.12-1.16.06-1.22.07-1.25v-6.92l-.07-1.48-.07-1.52-.08-1.53-.12-1.57-.11-1.58-.14-1.58-.3-3.27-.35-3.28-.38-3.32-.42-3.33-.43-3.34-.47-3.3-.91-6.5-.9-6.21-.44-3-.38-2.87-.37-2.75-.31-2.61-.25-2.49-.2-2.31-.09-1.14-.05-1.1v-5.07l-.05-1.67-.07-1.86-.1-2-.13-2.12-.15-2.11-.2-2.12-.1-1-.12-.95-.12-.92-.13-.85-.12-.78-.06-.3-.44-.12-.45-.15-1-.28-1.05-.25-1.1-.24-1.15-.2-1.18-.16-1.25-.15-1.3-.14-1.33-.08-1.39-.08h-4.35zm-108.21 111.18h-.24z"/><path d="m422.05 401.57 1.3.05 1.22.11.71.09.67.11.68.14.74.18.76.25.84.32.51.26.39.2.38.22.18.12.3.18.29.2.26.22.17.13.25.22.25.21.25.25.22.25.13.14.25.3.25.31.23.34.2.33.1.15.19.32.16.33.07.17.88.26 1.14.39 1.08.43 1.08.45 1 .48 1 .52 1 .55.95.6.91.62.89.65.85.7.81.71.79.75.73.79.68.8.67.85.6.85.57.88.53.9.47.92.43 1 .4.93.33 1 .3 1 .25 1 .22 1 .18 1 .14 1 .08 1 .07 1v1.93l-.05 1-.09 1-.11.95-.15 1-.17.95-.2.93-.23.93-.25.94-.29.9-.3.91-.33.9-.35.9-.38.89-.4.88-.42.87-.43.85-.47.85-.48.85-.5.83-.54.82-.53.81-.57.8-.58.8-.6.79-.62.76-.63.77-.65.73-.67.74-.7.73-.7.7-.71.7-.75.68-.75.67-.77.65-.78.65-.8.62-.82.6-.83.58-.85.58-.87.55-.88.54-.89.51-.91.49-.92.48-.95.45-.95.42-.95.41-1 .39-1 .35-1 .33-1 .3-1 .28-1 .25-1.05.22-1.06.18-1.07.17-1.08.13-1.1.09-1.09.06h-3.35l-1.11-.08-1.14-.12-1.13-.15-1.13-.2-1.14-.23-1.13-.27-1.13-.32-1.14-.36-1.11-.39-1.12-.45-1.12-.46-1.11-.54-1.1-.55-1.1-.6-1.09-.65-1.06-.68-1.07-.72-1.07-.76-1-.8-1-.85-1-.89-1-.93-1-1-.7-.73-.68-.83-.62-.85-.57-.89-.51-.9-.44-.91-.4-.92-.33-.93-.28-.94-.25-.91-.2-.94-.15-.93-.12-.92-.08-.91-.05-.9v-2.69l.05-.88.08-.87.12-.88.12-.87.15-.85.15-.86.18-.85.18-.84.22-.83.23-.88.47-1.62.53-1.62.57-1.6.62-1.56.65-1.55.66-1.5.7-1.47.7-1.42.74-1.38.75-1.33.75-1.27.75-1.22.76-1.16.77-1.12.78-1.05.79-1 .81-.93.85-.9.64-.62.66-.55.65-.5.67-.47.67-.41.66-.4.69-.37.68-.35.68-.32.72-.33 1.35-.53 1.42-.52 1.43-.45 1.45-.43 1.45-.37 1.47-.35 1.48-.3 1.47-.27 1.45-.21 1.45-.2 1.41-.15 1.4-.14 1.37-.08h1.33zm-10.18 17.91-1 .27-1 .28-.9.3-.85.3-.78.32-.29.13-.28.14-.27.13-.21.12-.19.11-.13.09-.1.06-.21.24-.34.38-.4.52-.46.63-.52.73-.52.8-.55.89-.56.95-.55 1-.57 1.05-.55 1.1-.53 1.11-.5 1.15-.49 1.17-.46 1.17-.42 1.16-.38 1.15-.34 1.19-.15.51-.13.55-.12.55-.11.54-.1.51-.09.5-.06.49-.05.48-.05.45v2.23l.05.29v.26l.05.22.05.18.05.17v.13l.05.12.07.15.08.12.08.08.62.6.67.6.65.58.65.54.66.5.64.46.65.44.63.41.63.37.62.35.63.32.6.28.62.27.62.23.6.2.58.2.6.17.6.13.58.13.59.1.58.09.58.05.59.05h2.31l.59-.05.58-.07.58-.1.57-.1.58-.11.59-.14.56-.16.59-.17.56-.18.59-.22.56-.22.57-.25.57-.25.56-.26.55-.29.55-.3.55-.31.55-.34.54-.35.53-.35.53-.36.52-.4.52-.39.5-.41.48-.42.5-.43.47-.44.46-.45.45-.45.45-.46.44-.47.41-.48.4-.5.4-.49.39-.5.36-.5.35-.5.34-.51.33-.5.3-.52.3-.52.28-.5.25-.51.25-.5.24-.52.21-.5.19-.5.18-.48.17-.49.15-.48.13-.47.1-.46.1-.45.08-.45.07-.42.05-.42v-2.25l-.05-.31-.05-.32-.07-.3-.06-.28-.1-.29-.09-.26-.11-.25-.1-.25-.14-.24-.13-.23-.15-.23-.17-.24-.09-.2-.18-.23-.22-.22-.25-.23-.25-.24-.28-.23-.32-.23-.35-.24-.37-.23-.41-.23-.45-.22-.47-.23-.53-.22-.55-.22-.6-.2-.64-.2-.68-.18-.73-.18-.77-.15-.8-.15-.85-.14-.9-.11-1-.09-1-.08-1-.05h-3.15l-.41-.07-.42-.08-.42-.1-.41-.12-.4-.15-.4-.16-.39-.19-.38-.21-.37-.22-.35-.25-.33-.25-.33-.28-.32-.3-.28-.3-.29-.34zm233.56-183.11 1 .18 1 .3.95.43.88.55.82.65.73.77.62.83.51.92.4 1 .29 1 .13 1v1.05l-.12 1-.25 1-.37 1-.48.94-.62.85-.7.76-.8.69-.86.56-1 .47-1 .33-1 .22-1 .07h-.56l-.7.07-.74.08-.78.14-.87.16-.91.22-1 .27-1 .3-1.06.35-1.12.38-1.15.43-1.18.49-1.24.51-1.25.55-1.28.59-1.32.61-1.33.67-1.35.7-1.38.72-1.4.75-1.42.78-1.43.82-1.45.83-1.47.85-1.47.88-1.46.9-3 1.87-3 1.92-3 2-3 2-3 2.07-3 2.08-2.95 2.09-2.91 2.1-2.85 2.08-2.8 2.05-2.72 2-5.2 3.9-4.81 3.7-4.3 3.27-3.78 2.88-2.62 1.95-2.62 2-2.63 1.92-2.65 1.91-2.65 1.92-2.67 1.9-2.68 1.88-2.68 1.89-2.7 1.86-2.7 1.85-2.72 1.85-2.73 1.85-2.74 1.84-2.75 1.81-5.51 3.57-5.55 3.58-5.57 3.55-5.62 3.5-5.63 3.49-5.67 3.43-5.7 3.42-5.7 3.38-5.73 3.33-5.7 3.32-5.77 3.28-5.78 3.27-5.8 3.22-5.8 3.2-5.85 3.11-5.81 3.14-5.84 3.11-5.83 3.09-5.83 3.05-5.84 3-5.83 3-5.82 3-5.83 3-5.8 2.93-5.77 2.89-.56.28-.59.32-1.45.8-1.68 1-1.92 1.15-2.11 1.28-2.29 1.4-5.05 3.17-11.4 7.18-6.06 3.8-3.1 1.92-3.09 1.92-3.08 1.88-3 1.83-3 1.8-2.95 1.72-2.9 1.65-2.8 1.57-2.7 1.46-1.33.7-1.3.65-1.27.64-1.23.6-1.22.56-1.18.54-1.15.5-1.13.46-1.12.44-1.1.38-1.08.35-1.12.3-1.13.25-1.19.2-1.18.1h-1.52l-.82-.09-.87-.15-.53-.13-.75-.23-.18-.07-1-.42-.9-.53-.83-.63-.74-.74-.65-.83-.53-.9-.42-1-.3-1-.16-1v-1l.1-1.05.22-1 .37-1 .46-.94.59-.86.7-.8.78-.69.85-.6.93-.46 1-.37 1-.23 1-.1h1.05l.5.08.43-.11.54-.19.65-.21.71-.29.82-.33.88-.38.94-.42 1-.47 1.05-.51 1.11-.55 1.15-.59 1.17-.61 2.52-1.37 2.63-1.47 2.73-1.56 2.85-1.65 2.9-1.74 3-1.78 3-1.85 3-1.87 3-1.88 6-3.78 11.41-7.19 5.12-3.2 2.37-1.46 2.21-1.35 2.07-1.24 1.9-1.1 1.72-.95.83-.45.75-.38 5.8-2.92 5.78-2.9 5.77-2.95 5.78-2.95 5.79-3 5.78-3 5.78-3 5.79-3.07 5.76-3.07 5.77-3.11 5.75-3.14 5.73-3.15 5.74-3.18 5.7-3.22 5.7-3.23 5.66-3.28 5.65-3.29 5.64-3.33 5.6-3.37 5.56-3.38 5.55-3.42 5.52-3.45 5.48-3.48 5.45-3.52 5.42-3.56 2.7-1.77 2.67-1.8 2.68-1.8 2.67-1.82 2.65-1.81 2.63-1.84 2.63-1.83 2.62-1.85 2.6-1.87 2.6-1.86 2.58-1.87 2.57-1.88 2.57-1.89 2.55-1.9 3.68-2.78 4.28-3.27 4.84-3.66 5.38-3.95 2.78-2.07 2.87-2.1 2.93-2.13 3-2.15 3-2.17 3.1-2.17 3.14-2.13 3.15-2.12 3.16-2.08 3.19-2 3.15-2 1.6-1 1.58-1 1.58-.94 1.59-.9 1.56-.88 1.57-.87 1.55-.83 1.55-.82 1.53-.78 1.54-.75 1.51-.73 1.52-.69 1.5-.66 1.48-.64 1.49-.58 1.48-.55 1.45-.52 1.45-.48 1.45-.43 1.45-.39 1.43-.33 1.44-.28 1.41-.24 1.44-.18 1.38-.1h1.38zm-339.21 199.33-.19-.07-.36-.08z"/><path d="m580.5 154 .88.14.82.18.77.23.7.25.66.29.62.3.58.31.6.35 1 .62.95.7.9.73.85.74.82.75.78.78.77.78.73.8.72.8.71.82.7.82 1.3 1.56 1.22 1.54 1.13 1.43 1 1.27.85 1.05.69.8.16.2.2.21 1 1 1.2 1.27 1.35 1.46 1.47 1.62 1.61 1.8 1.74 2 1.83 2.08 1.92 2.24 2 2.33 2.07 2.43 2.13 2.54 2.17 2.61 2.2 2.67 2.22 2.72 2.21 2.75 2.2 2.76 2.19 2.79 2.15 2.78 2.03 2.7 2 2.72 1.95 2.68 1.89 2.63 1.75 2.55.85 1.25.81 1.24.79 1.21.76 1.19.72 1.16.68 1.15.65 1.14.62 1.1.58 1.08.54 1.07.51 1.06.45 1.05.44 1.05.38 1.07.33 1.12.29 1.18.18 1.18.07.77v1.57l-.18 1.08-.32 1-.45 1-.56.92-.7.85-.8.73-.89.64-1 .51-1 .39-1.07.25-1.08.1h-1.08l-1.09-.18-1-.32-1-.45-.92-.58-.85-.68-.73-.8-.63-.89-.52-1-.38-1-.25-1.07-.09-.83v-.07l-.08-.23-.13-.37-.19-.48-.25-.57-.31-.66-.37-.72-.43-.8-.47-.85-.53-.9-.57-.95-.6-1-.67-1-.68-1.07-.73-1.1-.77-1.13-1.63-2.37-1.75-2.45-1.85-2.53-1.94-2.64-2-2.64-2.06-2.68-2.14-2.68-2.13-2.69-2.15-2.68-2.15-2.63-2.15-2.6-2.12-2.55-2.1-2.45-2-2.4-2-2.27-1.87-2.17-1.76-2-1.67-1.87-1.48-1.69-1.4-1.53-1.24-1.32-1.05-1.15-.93-1-.45-.49-.53-.6-1-1.13-1-1.25-1-1.32-1.1-1.38-1.12-1.38-1.15-1.39-.55-.65-.55-.63-.55-.62-.53-.56-.5-.54-.49-.46-.18-.17-3.85 1.93-6.8 3.49-6.78 3.51-6.77 3.64-6.7 3.6-6.75 3.65-6.73 3.68-6.72 3.72-6.8 3.77-6.7 3.78-6.65 3.8-6.7 3.85-6.68 3.89-6.67 3.91-6.67 3.95-6.66 4-6.67 4-6.65 4-6.67 4.05-6.65 4-6.63 4.12-6.65 4.1-13.35 8.21-13.31 8.29-13.32 8.31-26.72 16.7-1.45.9-1.5.9-1.5.9-1.53.89-1.55.88-1.57.88-3.15 1.72-3.21 1.72-3.19 1.68-3.3 1.67-3.34 1.66-3.36 1.67-3.39 1.65-6.8 3.28-6.8 3.3-3.38 1.67-3.37 1.67-3.35 1.66-3.3 1.7-3.28 1.72-3.22 1.72-3.21 1.78-1.55.88-1.55.88-1.52.9-1.51.9-1.49.9-1.48.9-1.45.92-1.43.93-1.4.94-1.39.93-1.36.93-1.34.95-1.31 1-1.29 1-1.25 1-1.23 1-1.2 1-1.17 1-1.13 1-1.1 1-1.08 1-.14.13v1.37l.06.7.12.78.13.87.19.93.2 1 .25 1 .28 1.1.3 1.15.35 1.18.37 1.24.4 1.26.41 1.3.45 1.34.49 1.35.48 1.38.52 1.4 1.08 2.87 1.15 2.93 1.22 3 1.23 3 1.27 3 1.3 3 1.32 2.76 2.57 5.74 2.45 5.4 2.23 4.95 1 2.28.93 2.12.85 2 .75 1.8.63 1.64.3.8.2.58.19.5.21.48.29.64.38.71.43.82.5.87.54.93.58.95 1.28 2 1.34 2.07 2.7 4.07 1.25 1.91 1.13 1.79.53.86.49.85.46.87.47 1 .28.71.25.72.05.18.19.75v.15l.1.64v1.7l-.13.95v.1l-.25.95-.35.91-.45.87v.07l-.53.78-.62.72-.7.63-.75.55-.06.05-1 .55-1.05.4-1.1.27h-.09l-1.13.12-1.13-.05h-.12l-.7-.1-.7-.16h-.15l-.88-.3-.47-.2-.72-.35-.65-.38-.78-.5-.87-.65-.78-.77-.67-.86-.56-.94-.42-1-.3-1-.15-1.08v-1.13l-.83-1.29-2.72-4.11-1.45-2.22-1.4-2.23-.71-1.17-.67-1.13-.63-1.14-.62-1.13-.58-1.13-.55-1.15-.5-1.17-.39-1-.2-.57-.16-.5-.52-1.3-.65-1.55-.78-1.81-.89-2-1-2.2-2.22-5.13-2.45-5.43-2.6-5.82-1.34-3-1.31-3.07-1.32-3.1-1.3-3.1-1.27-3.12-1.21-3.1-1.12-3.09-.57-1.54-.53-1.51-.53-1.5-.5-1.49-.49-1.46-.45-1.45-.43-1.44-.4-1.41-.38-1.4-.35-1.39-.32-1.36-.28-1.34-.25-1.33-.22-1.3-.17-1.3-.13-1.3-.08-1.28v-2.52l.05-.72.09-.66.08-.69.12-.66.16-.69.19-.7.21-.71.27-.72.32-.72.36-.73.44-.72.5-.71.55-.7.53-.59 1.37-1.33 1.3-1.22 1.31-1.21 1.35-1.19 1.39-1.16 1.4-1.15 1.41-1.14 1.45-1.11 1.47-1.12 1.48-1.08 1.5-1.07 1.54-1.05 1.53-1.05 1.57-1 1.56-1 1.59-1 1.6-1 1.61-1 1.64-1 1.65-.95 1.65-.95 1.66-.95 3.35-1.84 3.39-1.81 3.4-1.79 3.43-1.75 3.43-1.73 3.45-1.72 3.45-1.68 6.84-3.32 6.78-3.28 3.33-1.62 3.3-1.63 3.24-1.62 3.18-1.61 3.13-1.62 3-1.62 3-1.63 1.43-.82 1.43-.81 1.42-.82 1.38-.82 1.37-.81 1.35-.84 26.67-16.68 13.35-8.33 13.33-8.3 13.33-8.24 6.69-4.11 6.68-4.09 6.68-4.08 6.69-4.05 6.7-4 6.7-4 6.7-4 6.71-4 6.74-4 6.73-3.91 6.75-3.89 6.75-3.86 6.77-3.84 6.78-3.78 6.78-3.77 6.82-3.71 6.82-3.7 6.83-3.65 6.85-3.6 6.87-3.57 6.88-3.53 7.08-3.57.42-.18.83-.32.24-.07.81-.21.25-.05.82-.12h1.65z"/><path d="m596.1 112.83h1.17l1.15.06 1.16.1 1.15.12 1.14.15 1.13.18 1.13.2 1.12.22 1.12.25 1.11.28 1.1.29 1.1.31 1.09.35 1.06.37 1.09.38 1.05.4 1.03.51 1 .45 1 .46 1 .49 1 .5 1 .51 1 .55 1 .55 1 .59 1 .58 1 .6 1 .63 1 .64 1 .65.93.66.94.69.91.7.92.71.92.72.9.73.88.75.88.77.89.78.86.79.89.81 1.66 1.6 1.67 1.69 1.63 1.7 1.6 1.75 1.59 1.8 1.53 1.81 1.52 1.85 1.46 1.89 1.45 1.9 1.42 1.93 1.38 2 1.35 2 1.32 2 1.28 2 1.25 2 1.22 2.05 1.18 2.05 1.15 2 1.12 2.06 1.08 2.09 1.05 2.06 1 2.09 1 2.06.93 2.07.9 2.07.87 2.05.83 2 .8 2 .75 2 .72 2 .66 2 .64 2 .6 2 .55 1.93.51 1.92.47 1.88.43 1.87.35 1.68v.15l.17.57.27.78.36 1 .45 1.17.54 1.33 1.23 3.07 1.38 3.43 1.47 3.74.77 2 .75 2 .75 2 .71 2.05.7 2.06.67 2.07.62 2.07.56 2 .27 1 .25 1 .23 1 .22 1 .18 1 .19 1 .15 1 .11 1 .1 1 .07 1v2l-.05 1-.06 1.35-.17 1.08-.25 1.1-.33 1.14-.32.8-.13.35-.17.35-.36.73-.4.67-.39.56-.43.59-.47.55-.51.51-.54.52-.6.48-.61.44-.65.4-.62.33-.82.38-.78.34-.78.3-.8.26-.79.22-.78.18-.8.17-.78.12-.77.1-.77.06-.76.05h-2.22l-.73-.05-.75-.06-1.35-.17-1.35-.22-1.32-.28-1.28-.3-1.25-.33-1.22-.37-1.18-.38-1.17-.39-2.18-.78-2.09-.77-2-.73-.9-.32-.87-.3-.83-.26-.77-.22-.71-.2-.64-.15-.58-.12-.55-.06h-1.45l-.65-.1-.65-.13-.62-.18-.61-.25-.59-.29-.56-.31-.54-.39-.51-.41-.47-.45-.43-.49-.4-.51-.35-.55-.32-.59-.27-.6-.21-.61-.17-.64-.12-.63-.06-.65v-.67l.05-.65.08-.65.14-.63.18-.63.25-.6.28-.6.32-.57.38-.53.42-.5.45-.49.48-.43.52-.4.55-.35.58-.3.6-.27.62-.21.63-.17.64-.12.66-.06h1.9l.69.05.71.08 1.24.19 1.25.23 1.21.28 1.19.32 1.16.35 1.12.37 1.12.36 1.08.39 2.1.67 2 .75 2 .7.9.3.88.29.87.26.83.22.78.18.74.15.68.12.68.08h1.02v-.48l-.07-.57-.1-.61-.12-.67-.13-.68-.15-.74-.17-.76-.2-.77-.2-.8-.46-1.7-.54-1.75-.58-1.8-.62-1.83-.65-1.87-.68-1.87-.7-1.86-.72-1.84-1.43-3.61-1.37-3.4-1.25-3.12-.56-1.45-.54-1.35-.46-1.27-.42-1.21-.35-1.12-.17-.68-.13-.54-.35-1.65-.35-1.55-.4-1.6-.51-1.6-.49-1.67-.51-1.7-.55-1.73-.6-1.75-.64-1.78-.66-1.79-.72-1.81-.73-1.84-.79-1.85-.8-1.85-.85-1.85-.88-1.86-.9-1.87-.95-1.88-1-1.85-1-1.87-1-1.85-1.06-1.85-1.09-1.83-1.11-1.82-1.15-1.8-1.19-1.78-1.2-1.75-1.21-1.74-1.25-1.71-1.29-1.67-1.28-1.65-1.32-1.62-1.33-1.58-1.37-1.55-1.36-1.5-1.4-1.45-1.4-1.42-1.45-1.38-.7-.65-.72-.65-.72-.65-.73-.62-.73-.61-.74-.6-.73-.59-.73-.58-.75-.55-.74-.55-.75-.53-.75-.5-.75-.5-.75-.49-.75-.48-.75-.45-.75-.43-.75-.42-.76-.42-.75-.38-.77-.37-.75-.36-.75-.34-.77-.33-.75-.3-.76-.28-.75-.29-.77-.25-.75-.23-.77-.23-.75-.2-.76-.19-.75-.16-.77-.15-.77-.14-.75-.11-.76-.1-.77-.09-.75-.06h-4.62l-.76.06-.79.1-.78.1-.78.12-.8.15-.79.17-.78.2-.32.06-.26.09-.25.08-.25.1-.2.08-.2.09-.19.08-.16.08-.15.1-.14.09-.13.08-.12.08-.1.09-.1.08-.1.08-.08.09-.08.08-.09.1-.06.1-.09.08-.06.12-.09.12-.06.11-.09.14-.06.13-.07.15-.07.15-.05.12-.15.43-.13.42-.1.46-.1.5-.08.57-.07.6v3.55l.07.8.08.83.1.85.13.87.14.87.16.9.19.9.18.91.2.89.47 1.86.48 1.85.5 1.82.53 1.8.52 1.75 1 3.35.46 1.58.44 1.54.36 1.45.17.78.15.75.13.78.1.85v2.84l-.08.58-.13.6-.07.25-.18.58-.24.57v.12l-.22.43-.23.43v.1l-.32.5-.35.49-.06.06-.44.5-.45.47-.08.07-.5.41-.52.39-.56.35-.59.28-.6.25-.61.22-.65.15-.64.1-.66.05h-.65l-.65-.05-.65-.12-.64-.15-.69-.2-.6-.25-.59-.3-.56-.33-.54-.4-.48-.42-.47-.47-.43-.5-.38-.51-.34-.57-.3-.58-.31-.67-.2-.64-.15-.63-.1-.65-.05-.65v-.65l.05-.65.1-.65v-.1l-.27-1-.33-1.22-.42-1.41-1-3.3-.55-1.84-.57-1.95-.56-2-.57-2.12-.52-2.16-.26-1.14-.24-1.13-.21-1.13-.22-1.15-.18-1.17-.19-1.18-.15-1.19-.11-1.2-.1-1.2-.07-1.2v-3.68l.08-1.25.14-1.23.18-1.27.25-1.25.3-1.27.38-1.26.42-1.2.28-.67.29-.63.28-.62.32-.62.35-.6.36-.6.39-.6.41-.58.44-.58.46-.55.49-.55.5-.54.53-.51.55-.5.57-.49.58-.46.62-.45.63-.42.63-.4.67-.37.68-.36.69-.34.71-.31.72-.29.73-.26.74-.25.75-.22.76-.2 1.2-.28 1.19-.27 1.2-.22 1.18-.18 1.18-.17 1.19-.13 1.18-.1 1.18-.07h3.52zm-21.3 51.55-.22.29.17-.2.45-.45z"/><path d="m674.83 51.18.54.07.53.08.52.14.51.16.5.19.49.21.46.27.45.28.44.3.41.35.39.37.36.38.35.42.3.43.3.45.25.47.22.48.2.5.17.5.11.52.1.53.07.54v1.63l-.05.37-.06.53-.2.87-.25.8-.3.75-.2.43-.2.35-.2.37-.22.33-.23.38-.27.37-.27.35-.23.28-.25.29-.52.56-.78.72-.75.62-.75.56-.75.5-.73.45-.72.44-.73.4-.75.38-1.37.68-1.38.62-1.32.57-2.32 1-.93.4-.7.3-.38.2-1.69 1.05-1.83 1.18-3.63 2.33-3.69 2.3-3.7 2.25-3.68 2.25-3.7 2.22-7.37 4.42-3.63 2.21-3.62 2.22-3.55 2.25-1.77 1.12-1.76 1.13-1.74 1.14-1.73 1.15-1.72 1.15-1.7 1.16-1.68 1.15-1.65 1.18-1.65 1.19-1.6 1.2-1.37 1.05-2.33 1.83-1.38 1.1-1.52 1.22-1.5 1.25-1.5 1.28-1.41 1.25-1.32 1.22-.55.53-.52.5-.43.47-.14.5-.18.5-.22.5-.25.47-.28.47-.3.43-.33.42-.35.4-.39.36-.41.35-.42.32-.45.3-.47.25-.48.23-.5.2-.5.19-.52.13-.51.1-.54.07h-1.6l-.53-.07-.53-.1-.52-.13-.5-.17-.5-.2-.48-.23-.47-.25-.4-.31-.44-.32-.41-.35-.39-.37-.35-.4-.08-.08-.33-.42-.3-.43-.29-.45-.25-.47v-.11l-.2-.45-.18-.49-.15-.48-.12-.48v-.12l-.07-.42-.05-.4v-1.86l.05-.44v-.15l.1-.51.12-.5.05-.15.12-.39.13-.38.18-.47.39-.8.58-1 .67-.94.63-.81.67-.79.68-.73.72-.73.73-.74.78-.75 1.57-1.45 1.65-1.45 1.67-1.43 1.66-1.4 1.6-1.3 1.5-1.22 2.36-1.94 1.55-1.18 1.78-1.32 1.78-1.28 1.79-1.28 1.8-1.25 1.81-1.25 1.82-1.22 1.83-1.22 1.84-1.18 1.83-1.18 1.87-1.19 3.68-2.3 3.72-2.28 3.71-2.25 7.39-4.43 3.66-2.2 3.64-2.2 3.6-2.22 3.55-2.22 3.5-2.23 1.71-1.12 1.85-1.21.55-.35.67-.37 1.07-.5 1.1-.5 1.1-.46 2.25-.94 1.09-.46 1-.47 1-.48.38-.2.37-.2.26-.15v-.1l.23-.49.28-.45.29-.45.33-.41.35-.4.38-.39.4-.35.42-.33.45-.3.45-.27.48-.25.49-.2.51-.18.5-.13.54-.12.51-.08h1.6zm-81.3 67.14v-.17zm-1.15-2.14.3.44.2.33-.21-.47-.62-.71zm199.62 76.5.57.07.57.12.55.15.53.2.52.21.5.27.5.28.46.34.44.36.41.39.4.41.35.44.34.46.3.49.26.5.22.51.2.55.15.54.12.56.08.57v1.7l-.07.57-.11.55-.15.55-.14.53-.23.53-.25.5-.3.49-.33.46-.35.45-.39.42-.41.38-.45.37-.45.33-.5.3-.5.25-.52.24-.53.2-.55.15-.55.11-.57.09h-1.27l-.33.06-.43.12-.5.15-.59.2-.63.23-.7.29-.75.31-.78.35-.84.39-.86.43-.9.47-.94.48-1 .53-1 .55-1 .57-2.12 1.25-2.18 1.33-2.25 1.42-2.3 1.48-2.35 1.55-2.37 1.6-2.38 1.64-2.4 1.66-2.4 1.69-2.37 1.7-2.35 1.68-4.6 3.35-4.38 3.2-4.09 3-3.71 2.72-1.7 1.33-1.6 1.15-1.48 1-1.35.93-2.85 1.92-2.89 1.83-2.91 1.82-2.92 1.78-2.92 1.77-2.9 1.73-5.73 3.44-.57.31-.68.37-1.48.78-1.67.89-1.68.9-1.52.83-.52.3-.1.1-.41.4-.45.35-.47.33-.48.29-.52.26-.52.22-.53.2-.5.1-.55.12-.57.06h-1.71l-.55-.08-.62-.1-.55-.15-.53-.2-.52-.23-.5-.25-.48-.3-.47-.33-.45-.37-.4-.38-.4-.42-.35-.45-.3-.43-.26-.43-.25-.45-.22-.47-.18-.48-.15-.5-.14-.5-.1-.55-.06-.53v-1.1l.05-.54.08-.55.12-.53.15-.52v-.08l.2-.53.21-.5.27-.5.28-.47.32-.47.07-.08.26-.33.3-.38.3-.3.11-.11.35-.32.37-.28.58-.47.9-.6.85-.52.87-.5 1.78-1 1.84-1 1.68-.88 1.37-.72.41-.25.29-.15 5.61-3.35 2.87-1.71 2.85-1.72 2.82-1.73 2.78-1.74 2.72-1.73 2.65-1.73 1.15-.79 1.33-.93 1.5-1.07 1.63-1.16 3.65-2.67 4.09-3 4.41-3.22 4.65-3.4 2.42-1.71 2.45-1.75 2.45-1.74 2.48-1.73 2.5-1.7 2.49-1.68 2.48-1.64 2.45-1.58 2.43-1.53 2.4-1.47 2.34-1.37 1.16-.68 1.15-.63 1.15-.62 1.12-.58 1.12-.54 1.1-.55 1.08-.52 1.08-.48 1.07-.45 1.07-.42 1.06-.4 1.05-.35 1.07-.33 1.08-.27 1.09-.25 1.13-.18 1.17-.12h1.45z"/><path d="m714 0 1.83.07 1.82.12 1.8.16 1.8.2 1.78.25 1.77.29 1.76.31 1.74.37 1.73.4 1.72.45 1.71.47 1.69.51 1.68.55 1.67.59 1.65.63 1.63.65 1.63.68 1.6.72 1.6.75 1.59.78 1.56.82 1.55.85 1.54.87 1.53.9 1.5.93 1.5 1 1.48 1 1.47 1 1.45 1 1.45 1.06 1.43 1.07 1.4 1.12 1.42 1.11 1.38 1.15 1.39 1.17 1.37 1.2 1.38 1.2 1.33 1.23 1.33 1.25 1.3 1.29 1.3 1.28 1.3 1.3 1.27 1.33 1.27 1.34 1.25 1.35 1.23 1.38 1.22 1.38 1.21 1.4 1.2 1.42 1.2 1.43 1.17 1.44 1.17 1.46 1.16 1.47 1.09 1.47 1.13 1.5 1.13 1.5 1.1 1.51 1.1 1.52 1.09 1.53 1.08 1.54 1.07 1.55 1 1.55 1.05 1.58 2 3.13 2 3.17 2 3.2 1.92 3.2 1.88 3.22 1.83 3.23 1.8 3.22 1.87 3.23 1.7 3.23 1.68 3.22 1.64 3.22 1.58 3.2 1.55 3.13 1.5 3.15 1.47 3.14 1.43 3.1 1.38 3 1.35 3 1.3 3 1.27 2.93 1.22 2.88 1.2 2.84 1.13 2.76 1.1 2.72 1.07 2.63 2.6 6.45 1.41 3.6.74 1.9.73 1.94.73 2 .74 2 .73 2.06.7 2.09.7 2.13.68 2.15.65 2.18.62 2.2.58 2.22.54 2.25.5 2.25.45 2.23.2 1.15.2 1.14.16 1.15.17 1.13.15 1.13.12 1.15.11 1.14.09 1.15.06 1.13v5.72l.02 1.21-.1 1.13-.12 1.14-.15 1.13-.18 1.13-.2 1.12-.25 1.13-.28 1.1-.3 1.12-.37 1.15-.4 1.08-.47 1.09-.53 1.06-.6 1-.67 1-.73.93-.8.89-.85.8-.92.75-.95.67-1 .6-1 .52-1 .43-1 .37-1 .3-1 .21-1 .17-1 .12-1 .05h-2.95l-.92-.1-.91-.13-.9-.17-.89-.18-.88-.2-.87-.24-.85-.23-.85-.27-.81-.28-.84-.3-.8-.32-.83-.33-1.53-.67-1.54-.71-1.48-.77-1.43-.77-1.4-.8-1.32-.8-1.28-.8-1.2-.8-1.07-.73-.47.4-.66.47-.72.4-.75.31-.78.25-.8.19-.82.08h-.82l-.81-.07-.8-.15-.79-.23-.76-.3-.72-.37-.68-.45-.65-.5-.59-.58-.53-.62-.47-.67-.38-.71-.33-.75-.25-.79-.17-.8-.1-.81v-.82l.07-.82.15-.8.21-.78.3-.77.39-.71v-.19l-.07-.4-.08-.47-.1-.52-.13-.56-.17-.62-.18-.67-.22-.7-.23-.71-.25-.77-.29-.78-.3-.79-.66-1.71-.75-1.75-.8-1.82-.85-1.85-.9-1.87-1-1.86-1-1.89-1-1.85-1-1.81-1-1.79-1-1.73-1-1.65-.95-1.57-.93-1.46-.87-1.35-.83-1.24-.75-1.08-.67-.92-.55-.71-.43-.52-.08-.1-.14-.13-.66-.69-.75-.8-.72-.8-.7-.81-.68-.82-.67-.83-.65-.85-.63-.85-.64-.85-.6-.87-.58-.87-.58-.88-1.1-1.73-1.01-1.7-1-1.78-1-1.79-1-1.8-.92-1.78-.9-1.78-.86-1.79-1.7-3.5-1.67-3.45-.82-1.68-.83-1.65-.82-1.62-.83-1.56-.83-1.54-.85-1.5-.87-1.43-.88-1.42-.44-.65-.43-.66-.45-.65-.47-.64-.45-.61-.46-.6-.47-.59-.47-.56-.48-.55-.48-.54-.49-.51-.5-.52-1.71-1.68-1.75-1.69-1.8-1.65-1.85-1.65-1.87-1.61-1.92-1.62-2-1.6-2-1.58-2-1.57-2-1.55-2.06-1.53-2.1-1.52-2.12-1.48-2.13-1.49-2.17-1.46-2.18-1.44-2.2-1.43-2.22-1.4-2.22-1.38-2.25-1.39-2.25-1.33-2.25-1.33-2.26-1.32-2.27-1.28-2.27-1.29-2.28-1.25-2.2-1.28-2.26-1.2-2.27-1.2-2.27-1.17-2.25-1.15-2.35-1.18-1-.52-1-.65-1-.68-1-.72-.92-.78-.85-.8-.82-.85-.76-.87-.74-.9-.66-.91-.65-.95-.6-1-.55-1-.54-1-.48-1-.45-1-.42-1-.38-1-.35-1.07-.33-1.06-.29-1.09-.26-1.08-.24-1.1-.2-1.1-.16-1.1-.15-1.12-.12-1.1-.08-1.11-.07-1.14v-3.35l.05-1.11.08-1.12.1-1.12.13-1.11.15-1.1.19-1.12.21-1.1.25-1.08.27-1.09.3-1.06.33-1.09.37-1.05.4-1.05.43-1 .47-1 .52-1 .53-1 .58-1 .62-1 .65-.93.7-.9.75-.9.78-.85.84-.84.88-.78.89-.8 1-.72 1-.66 1.07-.6 1.1-.55 1.15-.5 1.1-.42 2-.65 1.95-.57 1.94-.53 1.93-.48 1.92-.44 1.91-.38 1.92-.33 1.9-.3 1.9-.24 1.88-.2 1.93-.15 1.88-.1 1.85-.08h1.85zm-3.35 16.65-1.45.05-1.49.09-1.46.11-1.5.15-1.5.2-1.52.24-1.52.26-1.55.3-1.55.35-1.56.4-1.57.42-1.6.48-1.53.49-.35.13-.27.12-.27.13-.26.15-.27.17-.25.2-.28.21-.27.24-.27.26-.26.3-.27.32-.27.35-.26.38-.27.4-.27.45-.25.45-.23.5-.25.5-.22.55-.21.55-.2.59-.19.6-.18.61-.15.64-.15.66-.13.67-.12.67-.1.68-.07.7-.06.7v4.35l.07.71.07.7.1.69.1.68.13.67.13.66.15.65.17.62.18.62.2.58.22.58.22.55.23.52.23.5.25.48.25.44.27.43.27.38.26.37.27.33.28.32.27.28.27.25.26.22.27.22.27.18.26.15.39.2 2.2 1.12 2.33 1.2 2.35 1.21 2.37 1.24 2.36 1.26 2.37 1.29 2.37 1.3 2.36 1.28 2.39 1.35 2.34 1.35 2.37 1.4 2.37 1.41 2.36 1.44 2.35 1.46 2.34 1.49 2.33 1.51 2.32 1.54 2.3 1.55 2.28 1.58 2.25 1.62 2.23 1.62 2.23 1.65 2.2 1.66 2.19 1.69 2.15 1.71 2.11 1.75 2.09 1.75 2.06 1.8 2 1.8 2 1.84 2 1.86 1.91 1.9.74.75.73.79.72.78.68.8.68.82.65.81.64.84.63.83.6.85.6.85.57.85.58.88 1.07 1.72 1 1.75 1 1.77 1 1.76.94 1.79.91 1.76.89 1.79.86 1.76 1.69 3.49 1.66 3.45.84 1.68.83 1.65.83 1.62.84 1.6.85 1.55.86 1.5.94 1.48.92 1.45.43.65.45.68.47.65.46.65.47.63.48.62.49.6.48.58.5.57.5.55.5.55.62.62.38.41.48.54.84 1 .88 1.15.9 1.23.93 1.35 1 1.45 1 1.57 1 1.65 1.07 1.73 1.06 1.82 1.1 1.9 1.1 1.93 1.09 2 1.08 2 1.08 2.07 1 2.08 1 2.09 1 2.1.93 2.08.87 2.08.8 2 .38 1 .37 1 .33 1 .34 1 .3 1v.1h.07l.77.25.75.33.71.4.67.49.62.53.36.33.37.34.5.41.62.49.71.53.79.58.86.59.94.61 1 .62 1 .62 1.05.6 1.08.58 1.05.57 1.06.52 1.12.48.5.2.52.2.5.19.5.16.48.15.48.15.45.12.44.1.41.08.39.07.36.05h1.62l.05-.08.07-.14.08-.2.12-.3.16-.53.17-.62.17-.63.13-.65.13-.65.1-.7.1-.7.07-.73.07-.74v-4.81l-.05-.85-.06-.87-.09-.87-.1-.9-.1-.88-.13-.92-.13-.91-.17-.92-.17-.92-.36-1.91-.44-1.9-.46-1.92-.5-1.93-.55-1.95-.59-2-.6-1.94-.63-1.93-.65-1.92-.68-1.91-.69-1.89-.6-1.75-.7-1.83-.68-1.8-1.39-3.5-2.58-6.4-1-2.6-1.15-2.65-1.11-2.7-1.15-2.75-1.19-2.8-1.23-2.85-1.27-2.9-1.3-2.92-1.35-3-1.36-3-1.42-3-1.45-3-1.5-3.06-1.53-3.07-1.57-3.08-1.57-3.09-1.63-3.08-1.69-3.1-1.68-3.1-1.75-3.07-1.79-3.05-1.83-3-1.85-3-1.9-3-1.93-3-1-1.46-1-1.45-1-1.45-1-1.44-1-1.43-1-1.42-1-1.4-1-1.4-1.05-1.36-1.07-1.37-1.05-1.35-1.18-1.37-1.08-1.32-1.09-1.31-1.1-1.29-1.1-1.28-1.11-1.25-1.12-1.25-1.13-1.22-1.14-1.21-1.15-1.19-1.15-1.16-1.15-1.15-1.16-1.14-1.19-1.1-1.18-1.1-1.18-1.06-1.2-1-1.2-1-1.2-1-1.22-1-1.23-1-1.22-.92-1.23-.92-1.25-.83-1.25-.87-1.25-.82-1.25-.81-1.27-.77-1.28-.73-1.27-.73-1.28-.7-1.3-.67-1.29-.63-1.3-.62-1.31-.65-1.32-.55-1.32-.54-1.31-.5-1.34-.41-1.33-.44-1.35-.41-1.35-.37-1.35-.35-1.37-.32-1.36-.28-1.37-.3-1.38-.21-1.38-.19-1.44-.13-1.4-.12-1.42-.1-1.43-.05h-1.43zm91.55 180.67-.13.16.21-.23zm-542.03 178.3.71.06.65.12.7.13 1.07.29 1.05.35 1 .4.9.4.85.43.82.43.8.45 1.4.84 1.28.81h.6l.55.05.53.07.53.12.54.13.51.18.5.2.49.25.48.27.45.32.43.33.4.35.39.4.36.4.32.43.3.47.28.47.24.48.21.52.17.51.13.52.1.4.09.43.06.44v2.35l-.06.46-.09.47-.11.45v.1l-.13.43-.17.42-.18.42-.2.4-.05.08-.22.38-.25.37-.25.35-.28.35-.3.32-.05.06-.32.32-.33.3-.35.27-.37.26-.38.24-.07.05-.45.25-.45.21-.46.19-.49.16h-.08l-.4.1-.42.1-.4.06-.41.05h-1.9l-.45-.06-.44-.09-.25-.05-.36-.1-.37-.1-.35-.11-.63-.24-.87-.4-.73-.38-.65-.37-.62-.38-1.12-.7-1.11-.72-1.07-.68-1-.62-.44-.25-.26-.13-.29.15-.75.43-1.58.92-1.58 1-1.6 1-1.64 1.08-1.63 1.15-1.63 1.18-1.67 1.22-1.67 1.27-1.68 1.31-1.7 1.34-1.7 1.36-1.7 1.39-3.47 2.86-3.48 2.9-3.5 3-3.55 2.95-3.55 2.92-1.8 1.45-1.8 1.43-1.82 1.42-1.93 1.39-1.84 1.37-1.83 1.33-1.85 1.3-1.88 1.29-.64.4-.68.41-1.37.8-1.5.84-1.6.88-1.65.92-1.68.95-1.67 1-1.65 1-.75.48-.75.47-.7.48-.65.45-.6.43-.53.42-.47.38-.38.35-.22.2-.13.49-.18.51-.22.5-.25.49-.28.46-.3.45-.35.44-.37.4-.38.38-.42.35-.43.32-.47.3-.47.26-.5.24-.5.2-.51.16-.54.14-.53.1-.55.06h-1.63l-.54-.09-.53-.11-.53-.15-.52-.19-.5-.21-.48-.25-.47-.29-.45-.3-.42-.33-.41-.37-.37-.4-.37-.41-.31-.44-.3-.45-.27-.48-.23-.5-.2-.5-.17-.52-.13-.53-.1-.53-.07-.55v-2.09l.08-.61.2-.9.27-.85.3-.79.33-.71.37-.67.36-.63.4-.57.44-.6.76-.93.84-.9.86-.82.87-.78.9-.74.9-.7.93-.68.94-.67 1-.63.95-.62 1-.61 1.9-1.14 1.9-1.1 1.82-1 1.71-.95 1.55-.87 1.34-.75 1.08-.63.37-.22.3-.18 1.6-1.1 1.65-1.15 1.65-1.2 1.66-1.24 1.67-1.28 1.68-1.32 1.7-1.35 1.7-1.36 3.45-2.84 3.47-2.88 3.5-2.93 3.53-3 3.55-2.92 1.79-1.46 1.8-1.44 1.8-1.43 1.81-1.4 1.82-1.38 1.83-1.35 1.85-1.34 1.85-1.28 1.87-1.25 1.87-1.22 1.9-1.16 1.88-1.1 1-.55.95-.52 1-.52 1.11-.56.42-.19.35-.15.37-.13.21-.07.31-.17.35-.1.55-.12.87-.15.85-.07h.78zm25.7 44.06h.86l.42.07.43.08.42.1.4.13h.1l.43.16.44.19.43.21.4.24.4.26.38.29.35.3.35.31.07.07.32.35.31.35.29.38.26.39.24.41.21.42.2.43.17.44v.1l.15.48.12.48.1.5.05.5v1.5l-.07.5-.08.5-.12.49-.15.48-.18.48-.2.45-.24.45-.26.44-.29.41-.3.4-.33.37-.35.37-.38.33-.4.3-.42.3-.42.25-.45.25-.46.2-.47.18-.48.15-.49.12h-.06l-.52.36-.72.54-.8.6-1.83 1.41-2 1.62-2.1 1.73-2.15 1.79-2.1 1.78-3.92 3.33-3.1 2.62-1.17 1-.56.45-.55.38-1.55 1.15-1.57 1-1.61 1-1.67 1-1.7 1-1.73 1-1.77 1-1.8 1-3.65 1.73-3.7 1.94-3.7 1.95-3.68 1.93-3.64 1.95-1.75 1-1.73 1-1.68 1-1.65 1-1.6.95-1.54 1-1.46.94-1.4.95-1.34.91-1.23.92-1.18.9-.52.43-.52.42-.48.43-.47.42-.43.4-.47.47-.36.33-.4.33-.4.29-.44.26-.43.25-.47.22-.46.18-.47.17-.5.12-.48.1-.5.08h-1.5l-.52-.05-.48-.09-.5-.1-.49-.15-.46-.16-.47-.2-.45-.22-.43-.25-.42-.28-.4-.3-.38-.34-.37-.35-.35-.36-.32-.4-.28-.4-.28-.44-.24-.43-.21-.45-.19-.47-.16-.48-.14-.48-.1-.5-.06-.5v-1.5l.05-.5.07-.5.11-.5.15-.49.17-.46.2-.47.22-.45.25-.43.28-.42.3-.4.33-.38.35-.37.59-.58.68-.64.7-.63.72-.62.73-.61.75-.62 1.5-1.17 1.58-1.15 1.62-1.13 1.67-1.12 1.71-1.1 1.75-1.08 1.8-1.25 1.8-1.06 1.83-1.05 1.85-1 1.88-1 3.75-2 3.77-2 3.73-2 3.65-1.92 3.55-1.86 1.7-.94 1.67-.9 1.62-.9 1.53-.88 1.48-.87 1.42-.85 1.33-.83 1.14-.75.16-.12.9-.75 3-2.51 3.91-3.34 2.17-1.83 2.16-1.84 2.21-1.82 2.17-1.75 2-1.58 1-.75.95-.7.91-.65.92-.6.92-.58.95-.52.68-.32.75-.3.5-.15.33-.1.34-.08.35-.07h.15l.4-.07h1.18z"/><path d="m148.25 408.62.6.08.6.12.6.16.17.07h1.71l.62.06.62.1.6.17.6.2.56.25.55.28.54.34.5.36.48.4.43.44.42.48.37.5.33.52.3.55.25.56.22.59v.1l1.75 1.25 3.44 2.5 3.16 2.3 2.54 1.83 1.63 1.18 1.67 1.25 1.7 1.32 1.69 1.42 1.7 1.42 1.68 1.45 1.67 1.5 1.63 1.53.82.82.82.8.8.81.78.84.78.83.77.85.75.87.73.88.74.88.71.9.7.92.67.93.67.94.65.95.61 1 .6 1 .67 1.11.65 1.15.65 1.19.65 1.21.65 1.27.65 1.3.65 1.33.63 1.37.64 1.4.63 1.42.62 1.46.61 1.49.6 1.5.59 1.53.58 1.57.57 1.58.55 1.6.51 1.62.52 1.65.5 1.65.47 1.66.45 1.7.43 1.7.4 1.7.37 1.74.35 1.71.33 1.74.28 1.75.25 1.75.24 1.75.18 1.76.15 1.75.1 1.77.08 1.75v3.52l-.06 1.75-.12 1.73-.2 1.65-.21 1.68-.15.9-.15.87-.15.85-.19.87-.2.83-.2.85-.23.85-.25.85-.27.82-.28.83-.3.83-.32.82-.33.82-.35.8-.38.8-.39.8-.41.8-.45.76-.45.77-.49.77-.5.75-.51.73-.55.73-.57.72-.58.7-.62.68-.62.67-.66.67-.67.63-.7.63-.72.62-.73.58-.75.59-.78.55-.8.53-.82.52-.83.5-.87.48-.87.45-.9.43-.9.42-.93.4-.95.38-1 .35-1 .34-1 .3-1 .3-1.09.28-.85.2-.91.15-.92.13-.92.1-.91.07-.94.05h-2.95l-1-.06-1-.1-1-.14-1-.16-1-.2-1-.22-1-.27-1-.3-1-.35-1-.38-1-.43-1-.49-1-.53-1-.6-.95-.67-.93-.73-.92-.8-.86-.9-.77-.92-.45-.58-.37-.55-.35-.57-.35-.6-.3-.6-.3-.63-.26-.63-.22-.64-.23-.73-.24-.75-.35-1.37-.3-1.38-.23-1.37-.2-1.35-.13-1.31-.12-1.3-.08-1.29v-13.23l-.07-.91-.1-.89-.1-.85-.13-.83-.15-.8-.18-.75-.22-.8-.1-.32-.12-.35-.13-.35-.13-.35-.15-.33-.15-.35-.17-.33-.17-.34-.18-.33-.2-.33-.67-1.1-.73-1.15-.8-1.2-.87-1.25-.9-1.29-.95-1.33-1-1.35-1-1.38-2.16-2.89-2.27-2.95-4.7-6.15-2.4-3.16-2.37-3.19-1.16-1.63-1.17-1.62-1.13-1.63-.89-1.72-1-1.64-1.07-1.63-1-1.63-1-1.65-1-1.65-.93-1.67-.87-1.65-.83-1.67-.75-1.63-.38-.87-.35-.83-.34-.85-.31-.84-.29-.85-.28-.85-.27-.85-.25-.86-.21-.89-.2-.86-.17-.87-.15-.9-.13-.9-.09-.9-.06-.9v-2.77l.08-.93.12-.93.16-.95.2-.94.25-.93.3-.93.35-.92.4-.92.45-.9.5-.86.55-.85.59-.82.63-.8.67-.77.71-.71.75-.7.79-.67.81-.63.85-.59.87-.56.9-.54.93-.5 1-.46 1-.44 1-.41 1-.39 1-.36 1.09-.34 1.1-.3 1.13-.3 1.17-.26 1.18-.24 1.22-.23 1.18-.18 1.28-.18 1.32-.17 1.33-.13 1.38-.14 1.42-.1h.5l.4-.15.57-.18.58-.15.58-.1.6-.07h.61zm-3.4 17.3-1.15.08-1.12.1-1.06.12-1 .11-1 .15-.91.15-.89.15-.83.17-.78.18-.74.2-.68.19-.65.2-.6.2-.55.21-.5.2-.47.22-.41.2-.39.22-.33.18-.3.2-.27.18-.23.19-.2.16-.17.15-.13.15-.13.14-.1.13-.09.13-.08.12-.07.12-.06.11-.05.14v.13l-.05.13v.17l-.05.17v2.18l.05.37.06.4.09.43.1.43.13.47.13.48.15.5.17.52.18.53.22.55.22.57.23.57.25.56.58 1.25.64 1.27.68 1.32.75 1.33.8 1.37.85 1.41.9 1.42.95 1.45 1 1.47 1 1.48 1.05 1.5 1.01 1.5 1.1 1.52 2.27 3.06 2.32 3.05 4.68 6.12 2.3 3 2.23 3 1.1 1.47 1.07 1.46 1 1.45 1 1.44 1 1.43.93 1.4.9 1.4.85 1.4.42.7.38.72.38.71.34.72.33.73.3.72.28.72.27.71.25.74.23.76.39 1.37.33 1.42.27 1.4.21 1.36.17 1.35.13 1.34.1 1.3.07 1.28v12.18l.05.92.08.88.1.85.1.8.15.78.15.75.2.75.1.3v.2l.13.12.12.1.18.12.22.13.25.15.3.13.35.15.37.15.4.14.41.13.45.12.47.1.47.1.5.08.48.07.48.05h3l.3-.05h.25l.25-.07.62-.15.63-.18.62-.2.58-.2.59-.22.55-.22.53-.21.5-.24.5-.25.48-.25.45-.25.45-.26.42-.27.42-.28.4-.29.38-.28.37-.3.35-.3.35-.32.33-.31.32-.34.31-.33.3-.33.3-.35.29-.37.26-.35.27-.38.25-.39.25-.4.25-.4.23-.41.22-.42.22-.43.2-.44.2-.45.2-.46.18-.49.17-.48.16-.48.17-.52.15-.52.13-.51.15-.54.12-.55.12-.55.1-.56.1-.59.1-.55.15-1.21.11-1.24.09-1.25.05-1.28v-2.73l-.05-1.35-.09-1.38-.13-1.4-.15-1.42-.17-1.42-.21-1.43-.25-1.45-.27-1.45-.28-1.47-.32-1.45-.35-1.46-.37-1.45-.38-1.45-.42-1.45-.41-1.44-.45-1.43-.47-1.42-.48-1.4-.3-1.38-.51-1.37-.5-1.35-.54-1.31-.53-1.3-.55-1.29-.53-1.23-.57-1.22-.55-1.18-.55-1.13-.55-1.12-.55-1.07-.55-1-.55-1-.53-.94-.52-.88-.42-.67-.43-.66-.45-.69-.47-.66-.5-.69-.51-.66-.54-.69-.56-.68-.57-.67-.58-.68-.6-.67-.64-.66-.63-.67-.63-.67-.67-.66-.65-.64-1.4-1.3-1.4-1.26-1.43-1.25-1.45-1.2-1.47-1.19-1.48-1.13-1.47-1.1-1.5-1.1-2.53-1.82-3.19-2.31-3.43-2.5-3.32-2.38-2.12-1.5z"/><path d="m381.28 343.38.6.1.6.15.59.19.56.23.55.28.52.32.52.35.46.38.45.44.42.45.37.48.35.52.3.53.26.55.22.58.18.59.14.6.08.6.05.61v.67l-.05.62-.08.6-.14.6-.18.6-.22.56-.26.55-.3.54-.35.51-.37.49-.42.45-.45.43-.75.65.1.33.05.3 1.42-.8 4.83-2.81 4.5-2.62 5.09-2.95 5-2.88 2.27-1.27.3-.22.88-.53.65-.33.47-.22h.1l1.61-.87 1.5-.78.77-.37.52-.22.4-.16.41-.14.22-.06.58-.17.59-.1.58-.08h1.27l.61.07.6.1.6.15.59.18.58.25.55.27.52.31 2.01-1.98 1-1 1-.91 1-.89 1-.86 1-.84 1-.78 1-.77 1-.68.65-.38.62-.34.67-.33.73-.32.83-.28.57-.17.37-.08.36-.07.25-.05.45-.06.45-.05h1.97l.43.07.42.06.2.05.47.12.45.15.45.17.2.06.46.22.45.23.44.27.16.1.44.3.4.3.38.35.15.15.33.33.34.35.28.39.13.18.25.33.24.35.2.37.11.22.24.48.21.5.09.25.15.43.13.44.07.3.1.36.06.37.1.62.09.93v1.82l-.1.85-.15.78-.2.74-.23.66-.29.7-.5 1-.58 1-.63.91-.64.85-.68.8-.7.79-.73.76-.75.74-.8.75-.82.73-.85.73-.88.75-.9.74-.95.73-1 .77-2 1.48-2.12 1.52-2.14 1.59-2.28 1.52-2.32 1.52-2.4 1.51-2.4 1.5-2.42 1.49-2.43 1.46-2.42 1.44-2.41 1.43-2.35 1.35-2.3 1.28-2.22 1.24-2.13 1.13-2.05 1.08-1.92 1-1.8.93-1.67.83-1.51.75-1.37.67-1.23.55-1 .42-1.36.56-1.4.64-1.54.7-1.61.78-1.69.82-1.66.85-3.32 1.68-3 1.57-2.41 1.3-2.24 1.21-.55.29-.56.23-.6.18-.6.15-.62.1h-.4l-.72.45-1 .6-1 .55-1 .53-1.09.58-1 .48-1 .47-1 .43-.43.17-1.18.78-1.37.9-1.38.87-1.4.83-1.4.82-1.42.8-.32.16h-.06l-1.4 1.05-1.42 1-1.47 1-1.48 1-1.79 1.24-.86.46-.9.44-1.84.83-1 .43-.34.37-2.21 2.42-1.1 1.18-.59.62-.6.58-.61.6-.69.6-.78.63-.62.4-.38.25-.4.24-.32.16-.46.22-.47.2h-.15l-.42.15-.43.13h-.13l-.55.11-.59.1h-.04l-.49.05h-1.06l-.55-.05-.57-.08-.55-.13h-.1l-.47-.13-.45-.17-.43-.18-.42-.22-.1-.05-.53-.3-.52-.35-.48-.38-.08-.07-.44-.4-.4-.42-.36-.45-.09-.1-.26-.38-.25-.4-.24-.4-.06-.12-.25-.51-.22-.54-.05-.15-.15-.45-.13-.46-.12-.52-.18-.76-.06-.76v-1.84l.06-.48v-.15l.08-.42.12-.41v-.15l.12-.39.15-.36.18-.49.37-.73.25-.43.2-.32.2-.3.23-.32.25-.33.27-.33.5-.55.73-.74.73-.63.49-.37-.24-.16-.33-.25-.1-.09-.38-.33-.35-.35-.09-.1-.38-.42-.35-.45-.07-.1-.33-.5-.3-.51-.05-.1-.2-.4-.17-.4-.15-.4v-.1l-.13-.42-.1-.43-.09-.42v-.12l-.07-.41v-1.54l.05-.56v-.12l.08-.53.12-.54v-.11l.13-.44.14-.41.05-.12.21-.52.24-.48.13-.25.28-.5.34-.47.18-.26.25-.32.27-.33.54-.54.68-.65.58-.5-.08-.81v-2.04l.12-.59.13-.58.2-.55v-.15l.15-.4.19-.4.2-.37.1-.16.23-.4.25-.39.32-.43.51-.62.55-.58.85-.8.92-.75.92-.7 1-.7 1-.68 1.06-.7 1.1-.72 1.17-.72 1.22-.73 2.46-1.45 2.57-1.48.2-.1.12-.3.18-.4.22-.4.13-.24.27-.41.26-.4.32-.39.17-.2.38-.43.43-.4.1-.08.3-.27.34-.25.23-.18 4.75-3.19 5.23-3.55 5.5-3.76 5.35-3.69 8.79-6.05 3.61-2.5.52-.33.55-.28.55-.25.58-.22.59-.17.61-.11.6-.09h1.24zm20.54 83.62.66-1.07.8-1 .89-.95 1.81-1.3 1.07-.48 3.35 1.08 1.28-1.72 1.64-1.55 1.88-1.23 2.07-.9 2.18-.52 2.25-.13 2.23.27 2.15.63 2 1 1.8 1.33 1.53 1.63 1.25 1.89.89 2.06.51 2.19.15.91.09 1.47.16 1.3-.56.55-.25 1.15-.42 1.7-.27 1.05-.05.19-.18.93-.27 1.18-.3 1.25-.36 1.3-.44 1.37-.5 1.42-.56 1.38-.39.82-.36.75-.42.78-.45.78-.48.79-.55.8-.6.81-.67.82-.75.82-.82.8h-.05l-.85.75-1 .75-1.1.72-1.17.66-1.26.59-1.35.48-1.4.38-1.45.27-1.47.13h-1.47l-1.43-.1-1.42-.2-1.36-.32-1.49-.45-1.38-.55-1.38-.78-1.19-.85-1.2-1.07-1.31-1.55-1-1.63-.7-1.48-.48-1.32-.33-1.23-.25-1.14-.15-1.08-.12-1.05-.05-1v-2l.05-.85v-.15l.15-1 .18-1 .24-1 .28-1.05.37-1.08.45-1.13.55-1.17.7-1.23.71-1.07.42-1.25.55-1.18zm7.33 19.7-.22-.07.34.12-.69-.3-.16-.05zm-3.42-2.49.47.42-.57-.57-.08-.08zm11.09-2.86-.22.16.8-.5-.37-.36zm13.11-4.95 2.37.5 1.6-4.4zm4-4 .14-.38v-.35z" fill="#fff"/><path d="m579.92 998.37h1.11l1.59.05 1.58.1 1.62.15 1.63.2 1.58.27.92.18.88.18.89.24.91.26.94.3 1 .37 1 .43 1 .52 1.1.62 1.13.73 1.18.88 1.19 1.07 1.16 1.28 1 1.34.75 1.21.62 1.19.57 1.3.46 1.43.37 1.52.22 1.61v1.67l-.12 1.67-.28 1.65-.44 1.55-.55 1.45-.66 1.31-.7 1.19-.77 1-.77.93-.76.8-.75.72-.87.73-1.28 1-1.37.85-1.28.68-1.24.59-1.18.5-1.15.43-1.12.38-1.1.34-1.06.31-1.07.29-1.07.26-2 .44-1.73.46-1.8.33-1.62.3-2.68.47-2.88.53-3.25.57-3.5.57-3.67.55-1.82.26v.14h.35l2.5.72 2.34 1.11 2.1 1.54 1.81 1.85 1.45 2.15 1.07 2.36.65 2.5.2 2.6-.23 2.59-.7 2.5-1.1 2.33-1.5 2.13-1.85 1.82-2.14 1.48-2.35 1.1-2.5.67h-.31l-.05.13-.62 1.54-1.5 2.16-1.13 1.25-.9.85-.82.7-.85.64-.83.58-.85.53-.95.52-1.37.65-1.32.5-1 .33-.9.27-.27.08.5-.18.5-.22.37-.2.43-.25.47-.31.48-.35.45-.4.44-.42.36-.42.34-.4.26-.36.2-.34.09-.15-6 1.84h1.09-.5l-1.14.16h-.21l-12.35 3.8-1-3.14-14.78.12-11.19.08h-8.71l-2.52-.23-2.47-.65-2.3-1.07-2.08-1.45-1.8-1.8-.85-1.22-.67-.21-.88-.34-.92-.4-.95-.48-1-.55-1.05-.68-1.06-.82-1.09-1-1.08-1.15-1-1.32-.95-1.51-.15-.3h-30.47l-2.21.15-1.34.09-1.46.08h-4.25l-1-.07-1-.1-1.13-.15-1.23-.25-1.39-.35-1.55-.51-1.73-.79-1.68-1-1.22-.91-1-.92-1-1.07-1-1.25-.88-1.38-.74-1.52-.58-1.6-.4-1.63-.22-1.6-.05-1.55.09-1.45.18-1.35.28-1.23.37-1.24.58-1.51.77-1.55.88-1.45 1-1.34 1.07-1.2 1.12-1.06 1.13-.92 1.12-.78 1.1-.69 1.06-.56 1-.49 1-.4.93-.33.89-.3.85-.23.88-.24 1.4-.31 1.35-.25 1.2-.19 1-.15.56-.1.35-1.73.42-1.62 1.35-2.6 1.42-1.86 1.51-1.54 1.84-1.36 1.53-.85 1-.5.82-.35.82-.34.88-.33 1.5-.5 1.57-.47 1.55-.38 1.55-.35 1.55-.3 1.55-.27 1.55-.23 1.56-.22 1.57-.2 1.57-.16 1.56-.15 1.59-.15 2.11-.17 1-.07 3.05-.2 2.95-.16 5.48-.3 2.42-.15 2.15-.17.88-.07.82-.08.68-.08.6-.09 3.94-.61 4-.65 4-.69 4.05-.71 4.06-.74 4.09-.75 8.21-1.51 4.15-.77 4.17-.75 4.18-.73 4.2-.72 4.24-.68 4.25-.67 4.26-.62 4.2-.56 1.84-.25 1.66-.22 2-.23 2.37-.27 2.62-.23 2.76-.22 1.49-.1 1.5-.07 1.51-.06h3.54z" fill="#808080"/></g></svg>
|
{images → assets/img}/payment-methods/alipay.svg
RENAMED
File without changes
|
{images → assets/img}/payment-methods/amex.svg
RENAMED
File without changes
|
{images → assets/img}/payment-methods/bancontact.svg
RENAMED
File without changes
|
{images → assets/img}/payment-methods/diners.svg
RENAMED
File without changes
|
{images → assets/img}/payment-methods/discover.svg
RENAMED
File without changes
|
{images → assets/img}/payment-methods/eps.svg
RENAMED
File without changes
|
{images → assets/img}/payment-methods/giropay.svg
RENAMED
File without changes
|
{images → assets/img}/payment-methods/ideal.svg
RENAMED
File without changes
|
{images → assets/img}/payment-methods/jcb.svg
RENAMED
File without changes
|
{images → assets/img}/payment-methods/laser.svg
RENAMED
File without changes
|
{images → assets/img}/payment-methods/maestro.svg
RENAMED
File without changes
|
{images → assets/img}/payment-methods/mastercard.svg
RENAMED
File without changes
|
{images → assets/img}/payment-methods/multibanco.svg
RENAMED
File without changes
|
{images → assets/img}/payment-methods/p24.svg
RENAMED
File without changes
|
{images → assets/img}/payment-methods/sepa.svg
RENAMED
File without changes
|
{images → assets/img}/payment-methods/sofort.svg
RENAMED
File without changes
|
{images → assets/img}/payment-methods/unionpay.svg
RENAMED
File without changes
|
{images → assets/img}/payment-methods/visa.svg
RENAMED
File without changes
|
{images → assets/img}/payment-methods/wechat.svg
RENAMED
File without changes
|
{images/previews → assets/img}/pennant.jpg
RENAMED
File without changes
|
assets/img/single-product-preview.svg
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 230 100">
|
2 |
+
<g fill="#E1E3E6" fill-rule="nonzero">
|
3 |
+
<path d="M76 0h11v6H76zM76 11h88v11H76zM76 27h28v6H76zM76 44h154v28H76zM76 83h22v17H76zM104 83h44v17h-44zM0 0h66v66H0z"/>
|
4 |
+
</g>
|
5 |
+
</svg>
|
assets/js/atomic/blocks/product-elements/button/block.js
CHANGED
@@ -4,11 +4,13 @@
|
|
4 |
import PropTypes from 'prop-types';
|
5 |
import classnames from 'classnames';
|
6 |
import { __, _n, sprintf } from '@wordpress/i18n';
|
|
|
7 |
import {
|
8 |
useStoreEvents,
|
9 |
useStoreAddToCart,
|
10 |
} from '@woocommerce/base-context/hooks';
|
11 |
import { decodeEntities } from '@wordpress/html-entities';
|
|
|
12 |
import {
|
13 |
useInnerBlockLayoutContext,
|
14 |
useProductDataContext,
|
@@ -52,6 +54,7 @@ const Block = ( { className } ) => {
|
|
52 |
};
|
53 |
|
54 |
const AddToCartButton = ( { product } ) => {
|
|
|
55 |
const {
|
56 |
id,
|
57 |
permalink,
|
@@ -63,6 +66,15 @@ const AddToCartButton = ( { product } ) => {
|
|
63 |
const { dispatchStoreEvent } = useStoreEvents();
|
64 |
const { cartQuantity, addingToCart, addToCart } = useStoreAddToCart( id );
|
65 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
66 |
const addedToCart = Number.isFinite( cartQuantity ) && cartQuantity > 0;
|
67 |
const allowAddToCart = ! hasOptions && isPurchasable && isInStock;
|
68 |
const buttonAriaLabel = decodeEntities(
|
4 |
import PropTypes from 'prop-types';
|
5 |
import classnames from 'classnames';
|
6 |
import { __, _n, sprintf } from '@wordpress/i18n';
|
7 |
+
import { useEffect, useRef } from '@wordpress/element';
|
8 |
import {
|
9 |
useStoreEvents,
|
10 |
useStoreAddToCart,
|
11 |
} from '@woocommerce/base-context/hooks';
|
12 |
import { decodeEntities } from '@wordpress/html-entities';
|
13 |
+
import { triggerFragmentRefresh } from '@woocommerce/base-utils';
|
14 |
import {
|
15 |
useInnerBlockLayoutContext,
|
16 |
useProductDataContext,
|
54 |
};
|
55 |
|
56 |
const AddToCartButton = ( { product } ) => {
|
57 |
+
const firstMount = useRef( true );
|
58 |
const {
|
59 |
id,
|
60 |
permalink,
|
66 |
const { dispatchStoreEvent } = useStoreEvents();
|
67 |
const { cartQuantity, addingToCart, addToCart } = useStoreAddToCart( id );
|
68 |
|
69 |
+
useEffect( () => {
|
70 |
+
// Avoid running on first mount when cart quantity is first set.
|
71 |
+
if ( firstMount.current ) {
|
72 |
+
firstMount.current = false;
|
73 |
+
return;
|
74 |
+
}
|
75 |
+
triggerFragmentRefresh();
|
76 |
+
}, [ cartQuantity ] );
|
77 |
+
|
78 |
const addedToCart = Number.isFinite( cartQuantity ) && cartQuantity > 0;
|
79 |
const allowAddToCart = ! hasOptions && isPurchasable && isInStock;
|
80 |
const buttonAriaLabel = decodeEntities(
|
assets/js/atomic/blocks/product-elements/image/block.js
CHANGED
@@ -5,7 +5,7 @@ import PropTypes from 'prop-types';
|
|
5 |
import { useState, Fragment } from '@wordpress/element';
|
6 |
import { __, sprintf } from '@wordpress/i18n';
|
7 |
import classnames from 'classnames';
|
8 |
-
import { PLACEHOLDER_IMG_SRC } from '@woocommerce/settings';
|
9 |
import {
|
10 |
useInnerBlockLayoutContext,
|
11 |
useProductDataContext,
|
5 |
import { useState, Fragment } from '@wordpress/element';
|
6 |
import { __, sprintf } from '@wordpress/i18n';
|
7 |
import classnames from 'classnames';
|
8 |
+
import { PLACEHOLDER_IMG_SRC } from '@woocommerce/block-settings';
|
9 |
import {
|
10 |
useInnerBlockLayoutContext,
|
11 |
useProductDataContext,
|
assets/js/atomic/blocks/product-elements/summary/block.js
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
import PropTypes from 'prop-types';
|
5 |
import classnames from 'classnames';
|
6 |
import Summary from '@woocommerce/base-components/summary';
|
7 |
-
import {
|
8 |
import {
|
9 |
useInnerBlockLayoutContext,
|
10 |
useProductDataContext,
|
@@ -49,6 +49,8 @@ const Block = ( { className } ) => {
|
|
49 |
return null;
|
50 |
}
|
51 |
|
|
|
|
|
52 |
return (
|
53 |
<Summary
|
54 |
className={ classnames(
|
@@ -60,7 +62,7 @@ const Block = ( { className } ) => {
|
|
60 |
) }
|
61 |
source={ source }
|
62 |
maxLength={ 150 }
|
63 |
-
countType={
|
64 |
/>
|
65 |
);
|
66 |
};
|
4 |
import PropTypes from 'prop-types';
|
5 |
import classnames from 'classnames';
|
6 |
import Summary from '@woocommerce/base-components/summary';
|
7 |
+
import { getSetting } from '@woocommerce/settings';
|
8 |
import {
|
9 |
useInnerBlockLayoutContext,
|
10 |
useProductDataContext,
|
49 |
return null;
|
50 |
}
|
51 |
|
52 |
+
const countType = getSetting( 'wordCountType', 'words' );
|
53 |
+
|
54 |
return (
|
55 |
<Summary
|
56 |
className={ classnames(
|
62 |
) }
|
63 |
source={ source }
|
64 |
maxLength={ 150 }
|
65 |
+
countType={ countType }
|
66 |
/>
|
67 |
);
|
68 |
};
|
assets/js/atomic/utils/index.js
CHANGED
@@ -1,5 +1,6 @@
|
|
1 |
-
export * from './get-block-map';
|
2 |
-
export * from './create-blocks-from-template';
|
3 |
-
export * from './render-parent-block';
|
|
|
4 |
export * from './block-styling.js';
|
5 |
-
export * from './render-standalone-blocks';
|
1 |
+
export * from './get-block-map.js';
|
2 |
+
export * from './create-blocks-from-template.js';
|
3 |
+
export * from './render-parent-block.js';
|
4 |
+
export * from './render-inner-blocks.js';
|
5 |
export * from './block-styling.js';
|
6 |
+
export * from './render-standalone-blocks.js';
|
assets/js/atomic/utils/render-inner-blocks.js
ADDED
@@ -0,0 +1,69 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* External dependencies
|
3 |
+
*/
|
4 |
+
import { Suspense, cloneElement, isValidElement } from '@wordpress/element';
|
5 |
+
import parse from 'html-react-parser';
|
6 |
+
|
7 |
+
/**
|
8 |
+
* Internal dependencies
|
9 |
+
*/
|
10 |
+
import { getBlockMap } from './get-block-map';
|
11 |
+
|
12 |
+
/**
|
13 |
+
* Replaces saved block HTML markup with Inner Block Components.
|
14 |
+
*
|
15 |
+
* @param {Object} props Render props.
|
16 |
+
* @param {Array} props.children Children/inner blocks to render.
|
17 |
+
* @param {string} props.blockName Parent Block Name used to get the block map and for keys.
|
18 |
+
* @param {number} [props.depth] Depth of inner blocks being rendered.
|
19 |
+
*/
|
20 |
+
export const renderInnerBlocks = ( {
|
21 |
+
children,
|
22 |
+
blockName: parentBlockName,
|
23 |
+
depth = 1,
|
24 |
+
} ) => {
|
25 |
+
const blockMap = getBlockMap( parentBlockName );
|
26 |
+
|
27 |
+
return Array.from( children ).map( ( el, index ) => {
|
28 |
+
const componentProps = {
|
29 |
+
...el.dataset,
|
30 |
+
key: `${ parentBlockName }_${ depth }_${ index }`,
|
31 |
+
};
|
32 |
+
|
33 |
+
const componentChildren =
|
34 |
+
el.children && el.children.length
|
35 |
+
? renderInnerBlocks( {
|
36 |
+
children: el.children,
|
37 |
+
blockName: parentBlockName,
|
38 |
+
depth: depth + 1,
|
39 |
+
} )
|
40 |
+
: null;
|
41 |
+
|
42 |
+
const LayoutComponent =
|
43 |
+
componentProps.blockName && blockMap[ componentProps.blockName ]
|
44 |
+
? blockMap[ componentProps.blockName ]
|
45 |
+
: null;
|
46 |
+
|
47 |
+
if ( ! LayoutComponent ) {
|
48 |
+
const element = parse( el.outerHTML );
|
49 |
+
|
50 |
+
if ( isValidElement( element ) ) {
|
51 |
+
return componentChildren
|
52 |
+
? cloneElement( element, componentProps, componentChildren )
|
53 |
+
: cloneElement( element, componentProps );
|
54 |
+
}
|
55 |
+
return null;
|
56 |
+
}
|
57 |
+
|
58 |
+
return (
|
59 |
+
<Suspense
|
60 |
+
key={ `${ parentBlockName }_${ depth }_${ index }_suspense` }
|
61 |
+
fallback={ <div className="wc-block-placeholder" /> }
|
62 |
+
>
|
63 |
+
<LayoutComponent { ...componentProps }>
|
64 |
+
{ componentChildren }
|
65 |
+
</LayoutComponent>
|
66 |
+
</Suspense>
|
67 |
+
);
|
68 |
+
} );
|
69 |
+
};
|
assets/js/atomic/utils/render-parent-block.js
ADDED
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* External dependencies
|
3 |
+
*/
|
4 |
+
import { renderFrontend } from '@woocommerce/base-utils';
|
5 |
+
|
6 |
+
/**
|
7 |
+
* Internal dependencies
|
8 |
+
*/
|
9 |
+
import { renderInnerBlocks } from './render-inner-blocks';
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Renders a block component in the place of a specified set of selectors.
|
13 |
+
*
|
14 |
+
* @param {Object} props Render props.
|
15 |
+
* @param {Function} props.Block React component to use as a replacement.
|
16 |
+
* @param {string} props.selector CSS selector to match the elements to replace.
|
17 |
+
* @param {string} [props.blockName] Optional Block Name. Used for inner block component mapping.
|
18 |
+
* @param {Function} [props.getProps] Function to generate the props object for the block.
|
19 |
+
*/
|
20 |
+
export const renderParentBlock = ( {
|
21 |
+
Block,
|
22 |
+
selector,
|
23 |
+
blockName = '',
|
24 |
+
getProps = () => {},
|
25 |
+
} ) => {
|
26 |
+
const getPropsWithChildren = ( el, i ) => {
|
27 |
+
const children =
|
28 |
+
el.children && el.children.length
|
29 |
+
? renderInnerBlocks( {
|
30 |
+
blockName,
|
31 |
+
children: el.children,
|
32 |
+
} )
|
33 |
+
: null;
|
34 |
+
return { ...getProps( el, i ), children };
|
35 |
+
};
|
36 |
+
renderFrontend( {
|
37 |
+
Block,
|
38 |
+
selector,
|
39 |
+
getProps: getPropsWithChildren,
|
40 |
+
} );
|
41 |
+
};
|
assets/js/atomic/utils/render-parent-block.tsx
DELETED
@@ -1,126 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* External dependencies
|
3 |
-
*/
|
4 |
-
import { renderFrontend } from '@woocommerce/base-utils';
|
5 |
-
import {
|
6 |
-
Fragment,
|
7 |
-
Suspense,
|
8 |
-
cloneElement,
|
9 |
-
isValidElement,
|
10 |
-
} from '@wordpress/element';
|
11 |
-
import parse from 'html-react-parser';
|
12 |
-
|
13 |
-
interface renderBlockProps {
|
14 |
-
// Parent Block Name. Used for inner block component mapping.
|
15 |
-
blockName: string;
|
16 |
-
// Map of block names to block components for children.
|
17 |
-
blockMap: Record< string, React.ReactNode >;
|
18 |
-
// Wrapper for inner components.
|
19 |
-
blockWrapper?: React.ReactNode;
|
20 |
-
}
|
21 |
-
|
22 |
-
interface renderParentBlockProps extends renderBlockProps {
|
23 |
-
// React component to use as a replacement.
|
24 |
-
Block: React.FunctionComponent;
|
25 |
-
// CSS selector to match the elements to replace.
|
26 |
-
selector: string;
|
27 |
-
// Function to generate the props object for the block.
|
28 |
-
getProps: ( el: Element, i: number ) => Record< string, unknown >;
|
29 |
-
}
|
30 |
-
|
31 |
-
interface renderInnerBlockProps extends renderBlockProps {
|
32 |
-
children: HTMLCollection;
|
33 |
-
depth?: number;
|
34 |
-
}
|
35 |
-
|
36 |
-
/**
|
37 |
-
* Replaces saved block HTML markup with Inner Block Components.
|
38 |
-
*/
|
39 |
-
const renderInnerBlocks = ( {
|
40 |
-
blockName: parentBlockName,
|
41 |
-
blockMap,
|
42 |
-
blockWrapper,
|
43 |
-
depth = 1,
|
44 |
-
children,
|
45 |
-
}: renderInnerBlockProps ): ( JSX.Element | null )[] | null => {
|
46 |
-
return Array.from( children ).map( ( el: Element, index: number ) => {
|
47 |
-
const { blockName = '', ...componentProps } = {
|
48 |
-
key: `${ parentBlockName }_${ depth }_${ index }`,
|
49 |
-
...( el instanceof HTMLElement ? el.dataset : {} ),
|
50 |
-
};
|
51 |
-
|
52 |
-
const componentChildren =
|
53 |
-
el.children && el.children.length
|
54 |
-
? renderInnerBlocks( {
|
55 |
-
children: el.children,
|
56 |
-
blockName: parentBlockName,
|
57 |
-
blockMap,
|
58 |
-
depth: depth + 1,
|
59 |
-
blockWrapper,
|
60 |
-
} )
|
61 |
-
: null;
|
62 |
-
|
63 |
-
const LayoutComponent =
|
64 |
-
blockName && blockMap[ blockName ]
|
65 |
-
? ( blockMap[ blockName ] as React.ElementType )
|
66 |
-
: null;
|
67 |
-
|
68 |
-
if ( ! LayoutComponent ) {
|
69 |
-
const element = parse( el.outerHTML );
|
70 |
-
|
71 |
-
if ( isValidElement( element ) ) {
|
72 |
-
return componentChildren
|
73 |
-
? cloneElement( element, componentProps, componentChildren )
|
74 |
-
: cloneElement( element, componentProps );
|
75 |
-
}
|
76 |
-
return null;
|
77 |
-
}
|
78 |
-
|
79 |
-
const LayoutComponentWrapper = ( blockWrapper
|
80 |
-
? blockWrapper
|
81 |
-
: Fragment ) as React.ElementType;
|
82 |
-
|
83 |
-
return (
|
84 |
-
<Suspense
|
85 |
-
key={ `${ parentBlockName }_${ depth }_${ index }_suspense` }
|
86 |
-
fallback={ <div className="wc-block-placeholder" /> }
|
87 |
-
>
|
88 |
-
<LayoutComponentWrapper>
|
89 |
-
<LayoutComponent { ...componentProps }>
|
90 |
-
{ componentChildren }
|
91 |
-
</LayoutComponent>
|
92 |
-
</LayoutComponentWrapper>
|
93 |
-
</Suspense>
|
94 |
-
);
|
95 |
-
} );
|
96 |
-
};
|
97 |
-
|
98 |
-
/**
|
99 |
-
* Renders a block component in the place of a specified set of selectors.
|
100 |
-
*/
|
101 |
-
export const renderParentBlock = ( {
|
102 |
-
Block,
|
103 |
-
selector,
|
104 |
-
blockName,
|
105 |
-
getProps = () => ( {} ),
|
106 |
-
blockMap,
|
107 |
-
blockWrapper,
|
108 |
-
}: renderParentBlockProps ): void => {
|
109 |
-
const getPropsWithChildren = ( el: Element, i: number ) => {
|
110 |
-
const children =
|
111 |
-
el.children && el.children.length
|
112 |
-
? renderInnerBlocks( {
|
113 |
-
blockName,
|
114 |
-
blockMap,
|
115 |
-
children: el.children,
|
116 |
-
blockWrapper,
|
117 |
-
} )
|
118 |
-
: null;
|
119 |
-
return { ...getProps( el, i ), children };
|
120 |
-
};
|
121 |
-
renderFrontend( {
|
122 |
-
Block,
|
123 |
-
selector,
|
124 |
-
getProps: getPropsWithChildren,
|
125 |
-
} );
|
126 |
-
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/base/components/block-error-boundary/block-error.js
CHANGED
@@ -2,11 +2,11 @@
|
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { __ } from '@wordpress/i18n';
|
|
|
5 |
import PropTypes from 'prop-types';
|
6 |
-
import { WC_BLOCKS_IMAGE_URL } from '@woocommerce/block-settings';
|
7 |
|
8 |
const BlockError = ( {
|
9 |
-
imageUrl = `${
|
10 |
header = __( 'Oops!', 'woo-gutenberg-products-block' ),
|
11 |
text = __(
|
12 |
'There was an error loading the content.',
|
@@ -14,7 +14,6 @@ const BlockError = ( {
|
|
14 |
),
|
15 |
errorMessage,
|
16 |
errorMessagePrefix = __( 'Error:', 'woo-gutenberg-products-block' ),
|
17 |
-
button,
|
18 |
} ) => {
|
19 |
return (
|
20 |
<div className="wc-block-error wc-block-components-error">
|
@@ -42,11 +41,6 @@ const BlockError = ( {
|
|
42 |
{ errorMessage }
|
43 |
</p>
|
44 |
) }
|
45 |
-
{ button && (
|
46 |
-
<p className="wc-block-error__button wc-block-components-error__button">
|
47 |
-
{ button }
|
48 |
-
</p>
|
49 |
-
) }
|
50 |
</div>
|
51 |
</div>
|
52 |
);
|
@@ -79,10 +73,6 @@ BlockError.propTypes = {
|
|
79 |
* Text preceeding the error message.
|
80 |
*/
|
81 |
errorMessagePrefix: PropTypes.string,
|
82 |
-
/**
|
83 |
-
* Button cta.
|
84 |
-
*/
|
85 |
-
button: PropTypes.node,
|
86 |
};
|
87 |
|
88 |
export default BlockError;
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
+
import { WC_BLOCKS_ASSET_URL } from '@woocommerce/block-settings';
|
6 |
import PropTypes from 'prop-types';
|
|
|
7 |
|
8 |
const BlockError = ( {
|
9 |
+
imageUrl = `${ WC_BLOCKS_ASSET_URL }img/block-error.svg`,
|
10 |
header = __( 'Oops!', 'woo-gutenberg-products-block' ),
|
11 |
text = __(
|
12 |
'There was an error loading the content.',
|
14 |
),
|
15 |
errorMessage,
|
16 |
errorMessagePrefix = __( 'Error:', 'woo-gutenberg-products-block' ),
|
|
|
17 |
} ) => {
|
18 |
return (
|
19 |
<div className="wc-block-error wc-block-components-error">
|
41 |
{ errorMessage }
|
42 |
</p>
|
43 |
) }
|
|
|
|
|
|
|
|
|
|
|
44 |
</div>
|
45 |
</div>
|
46 |
);
|
73 |
* Text preceeding the error message.
|
74 |
*/
|
75 |
errorMessagePrefix: PropTypes.string,
|
|
|
|
|
|
|
|
|
76 |
};
|
77 |
|
78 |
export default BlockError;
|
assets/js/base/components/block-error-boundary/index.js
CHANGED
@@ -40,7 +40,6 @@ class BlockErrorBoundary extends Component {
|
|
40 |
text,
|
41 |
errorMessagePrefix,
|
42 |
renderError,
|
43 |
-
button,
|
44 |
} = this.props;
|
45 |
const { errorMessage, hasError } = this.state;
|
46 |
|
@@ -55,7 +54,6 @@ class BlockErrorBoundary extends Component {
|
|
55 |
imageUrl={ imageUrl }
|
56 |
text={ text }
|
57 |
errorMessagePrefix={ errorMessagePrefix }
|
58 |
-
button={ button }
|
59 |
/>
|
60 |
);
|
61 |
}
|
40 |
text,
|
41 |
errorMessagePrefix,
|
42 |
renderError,
|
|
|
43 |
} = this.props;
|
44 |
const { errorMessage, hasError } = this.state;
|
45 |
|
54 |
imageUrl={ imageUrl }
|
55 |
text={ text }
|
56 |
errorMessagePrefix={ errorMessagePrefix }
|
|
|
57 |
/>
|
58 |
);
|
59 |
}
|
assets/js/base/components/block-error-boundary/style.scss
CHANGED
@@ -1,34 +1,37 @@
|
|
1 |
.wc-block-components-error {
|
2 |
display: flex;
|
3 |
-
|
4 |
-
|
|
|
5 |
align-items: center;
|
6 |
justify-content: center;
|
7 |
flex-direction: column;
|
8 |
color: $gray-700;
|
9 |
-
text-align: center;
|
10 |
}
|
|
|
11 |
.wc-block-components-error__header {
|
12 |
@include font-size(larger);
|
|
|
13 |
margin: 0;
|
14 |
-
color: $studio-gray-50;
|
15 |
}
|
|
|
16 |
.wc-block-components-error__image {
|
17 |
-
width: 25%;
|
18 |
-
margin: 0 0 $gap-large 0;
|
19 |
}
|
20 |
.wc-block-components-error__text {
|
21 |
-
margin:
|
22 |
-
color: $studio-gray-30;
|
23 |
-
@include font-size(large);
|
24 |
-
max-width: 60ch;
|
25 |
}
|
26 |
.wc-block-components-error__message {
|
27 |
-
margin: 1em 0 0;
|
28 |
font-style: italic;
|
29 |
-
color: $studio-gray-30;
|
30 |
-
max-width: 60ch;
|
31 |
}
|
32 |
-
|
33 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
34 |
}
|
1 |
.wc-block-components-error {
|
2 |
display: flex;
|
3 |
+
background-color: $gray-100;
|
4 |
+
border-left: 4px solid $gray-300;
|
5 |
+
padding: $gap-larger $gap;
|
6 |
align-items: center;
|
7 |
justify-content: center;
|
8 |
flex-direction: column;
|
9 |
color: $gray-700;
|
|
|
10 |
}
|
11 |
+
|
12 |
.wc-block-components-error__header {
|
13 |
@include font-size(larger);
|
14 |
+
font-weight: bold;
|
15 |
margin: 0;
|
|
|
16 |
}
|
17 |
+
|
18 |
.wc-block-components-error__image {
|
19 |
+
max-width: 25%;
|
|
|
20 |
}
|
21 |
.wc-block-components-error__text {
|
22 |
+
margin: 0;
|
|
|
|
|
|
|
23 |
}
|
24 |
.wc-block-components-error__message {
|
25 |
+
margin: 1em 0 0 0;
|
26 |
font-style: italic;
|
|
|
|
|
27 |
}
|
28 |
+
|
29 |
+
@include breakpoint(">480px") {
|
30 |
+
.wc-block-components-error {
|
31 |
+
flex-direction: row;
|
32 |
+
}
|
33 |
+
|
34 |
+
.wc-block-components-error__image + .wc-block-components-error__content {
|
35 |
+
margin-left: $gap-large;
|
36 |
+
}
|
37 |
}
|
assets/js/base/components/button/index.js
ADDED
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* External dependencies
|
3 |
+
*/
|
4 |
+
import { Button as WPButton } from 'wordpress-components';
|
5 |
+
import PropTypes from 'prop-types';
|
6 |
+
import classNames from 'classnames';
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Internal dependencies
|
10 |
+
*/
|
11 |
+
import './style.scss';
|
12 |
+
|
13 |
+
/** @typedef {import('react')} React */
|
14 |
+
|
15 |
+
/**
|
16 |
+
* Component that visually renders a button but semantically might be `<button>` or `<a>` depending
|
17 |
+
* on the props.
|
18 |
+
*
|
19 |
+
* @param {Object} props Incoming props for the component.
|
20 |
+
* @param {string} props.className CSS classname used.
|
21 |
+
* @param {boolean} props.showSpinner Whether to show spinner or not.
|
22 |
+
* @param {React.ReactChildren} props.children Child components passed in.
|
23 |
+
* @param {Object} props.props Rest of incoming props.
|
24 |
+
*/
|
25 |
+
const Button = ( { className, showSpinner = false, children, ...props } ) => {
|
26 |
+
const buttonClassName = classNames(
|
27 |
+
'wc-block-components-button',
|
28 |
+
className,
|
29 |
+
{
|
30 |
+
'wc-block-components-button--loading': showSpinner,
|
31 |
+
}
|
32 |
+
);
|
33 |
+
|
34 |
+
return (
|
35 |
+
<WPButton className={ buttonClassName } { ...props }>
|
36 |
+
{ showSpinner && (
|
37 |
+
<span
|
38 |
+
className="wc-block-components-button__spinner"
|
39 |
+
aria-hidden="true"
|
40 |
+
/>
|
41 |
+
) }
|
42 |
+
<span className="wc-block-components-button__text">
|
43 |
+
{ children }
|
44 |
+
</span>
|
45 |
+
</WPButton>
|
46 |
+
);
|
47 |
+
};
|
48 |
+
|
49 |
+
Button.propTypes = {
|
50 |
+
className: PropTypes.string,
|
51 |
+
showSpinner: PropTypes.bool,
|
52 |
+
children: PropTypes.node,
|
53 |
+
};
|
54 |
+
|
55 |
+
export default Button;
|
assets/js/base/components/button/index.tsx
DELETED
@@ -1,48 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* External dependencies
|
3 |
-
*/
|
4 |
-
import { Button as WPButton } from 'wordpress-components';
|
5 |
-
import type { ReactNode } from 'react';
|
6 |
-
import classNames from 'classnames';
|
7 |
-
import Spinner from '@woocommerce/base-components/spinner';
|
8 |
-
|
9 |
-
/**
|
10 |
-
* Internal dependencies
|
11 |
-
*/
|
12 |
-
import './style.scss';
|
13 |
-
|
14 |
-
interface ButtonProps extends WPButton.ButtonProps {
|
15 |
-
className?: string;
|
16 |
-
showSpinner?: boolean;
|
17 |
-
children?: ReactNode;
|
18 |
-
}
|
19 |
-
|
20 |
-
/**
|
21 |
-
* Component that visually renders a button but semantically might be `<button>` or `<a>` depending
|
22 |
-
* on the props.
|
23 |
-
*/
|
24 |
-
const Button = ( {
|
25 |
-
className,
|
26 |
-
showSpinner = false,
|
27 |
-
children,
|
28 |
-
...props
|
29 |
-
}: ButtonProps ): JSX.Element => {
|
30 |
-
const buttonClassName = classNames(
|
31 |
-
'wc-block-components-button',
|
32 |
-
className,
|
33 |
-
{
|
34 |
-
'wc-block-components-button--loading': showSpinner,
|
35 |
-
}
|
36 |
-
);
|
37 |
-
|
38 |
-
return (
|
39 |
-
<WPButton className={ buttonClassName } { ...props }>
|
40 |
-
{ showSpinner && <Spinner /> }
|
41 |
-
<span className="wc-block-components-button__text">
|
42 |
-
{ children }
|
43 |
-
</span>
|
44 |
-
</WPButton>
|
45 |
-
);
|
46 |
-
};
|
47 |
-
|
48 |
-
export default Button;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/base/components/button/style.scss
CHANGED
@@ -29,7 +29,45 @@
|
|
29 |
fill: currentColor;
|
30 |
}
|
31 |
}
|
32 |
-
.wc-block-components-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
33 |
visibility: hidden;
|
34 |
}
|
35 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
fill: currentColor;
|
30 |
}
|
31 |
}
|
32 |
+
.wc-block-components-button__spinner {
|
33 |
+
width: 1em;
|
34 |
+
height: 1em;
|
35 |
+
position: absolute;
|
36 |
+
top: 50%;
|
37 |
+
left: 0;
|
38 |
+
width: 100%;
|
39 |
+
height: 100%;
|
40 |
+
margin-top: -0.5em;
|
41 |
+
color: inherit;
|
42 |
+
box-sizing: content-box;
|
43 |
+
|
44 |
+
&::after {
|
45 |
+
content: " ";
|
46 |
+
display: inline-block;
|
47 |
+
margin: 0 auto;
|
48 |
+
width: 1em;
|
49 |
+
height: 1em;
|
50 |
+
box-sizing: border-box;
|
51 |
+
transform-origin: 50% 50%;
|
52 |
+
transform: translateZ(0) scale(0.5);
|
53 |
+
backface-visibility: hidden;
|
54 |
+
border-radius: 50%;
|
55 |
+
border: 0.2em solid currentColor;
|
56 |
+
border-left-color: transparent;
|
57 |
+
animation: wc-block-components-button__spinner__animation 1s infinite linear;
|
58 |
+
}
|
59 |
+
}
|
60 |
+
.wc-block-components-button__spinner + .wc-block-components-button__text {
|
61 |
visibility: hidden;
|
62 |
}
|
63 |
}
|
64 |
+
|
65 |
+
@keyframes wc-block-components-button__spinner__animation {
|
66 |
+
0% {
|
67 |
+
animation-timing-function: cubic-bezier(0.5856, 0.0703, 0.4143, 0.9297);
|
68 |
+
transform: rotate(0deg);
|
69 |
+
}
|
70 |
+
100% {
|
71 |
+
transform: rotate(360deg);
|
72 |
+
}
|
73 |
+
}
|
assets/js/base/components/cart-checkout/address-form/{address-form.tsx → address-form.js}
RENAMED
@@ -16,13 +16,7 @@ import { useEffect, useMemo } from '@wordpress/element';
|
|
16 |
import { __ } from '@wordpress/i18n';
|
17 |
import { withInstanceId } from '@woocommerce/base-hocs/with-instance-id';
|
18 |
import { useShallowEqual } from '@woocommerce/base-hooks';
|
19 |
-
import {
|
20 |
-
AddressField,
|
21 |
-
AddressFields,
|
22 |
-
AddressType,
|
23 |
-
defaultAddressFields,
|
24 |
-
EnteredAddress,
|
25 |
-
} from '@woocommerce/settings';
|
26 |
|
27 |
/**
|
28 |
* Internal dependencies
|
@@ -32,11 +26,11 @@ import prepareAddressFields from './prepare-address-fields';
|
|
32 |
// If it's the shipping address form and the user starts entering address
|
33 |
// values without having set the country first, show an error.
|
34 |
const validateShippingCountry = (
|
35 |
-
values
|
36 |
-
setValidationErrors
|
37 |
-
clearValidationError
|
38 |
-
hasValidationError
|
39 |
-
)
|
40 |
if (
|
41 |
! hasValidationError &&
|
42 |
! values.country &&
|
@@ -57,15 +51,6 @@ const validateShippingCountry = (
|
|
57 |
}
|
58 |
};
|
59 |
|
60 |
-
interface AddressFormProps {
|
61 |
-
id: string;
|
62 |
-
instanceId: string;
|
63 |
-
fields: ( keyof AddressFields )[];
|
64 |
-
fieldConfig: Record< keyof AddressFields, Partial< AddressField > >;
|
65 |
-
onChange: ( newValue: EnteredAddress ) => void;
|
66 |
-
type: AddressType;
|
67 |
-
values: EnteredAddress;
|
68 |
-
}
|
69 |
/**
|
70 |
* Checkout address form.
|
71 |
*
|
@@ -80,15 +65,13 @@ interface AddressFormProps {
|
|
80 |
*/
|
81 |
const AddressForm = ( {
|
82 |
id,
|
83 |
-
fields =
|
84 |
-
|
85 |
-
) as unknown ) as ( keyof AddressFields )[],
|
86 |
-
fieldConfig = {} as Record< keyof AddressFields, Partial< AddressField > >,
|
87 |
instanceId,
|
88 |
onChange,
|
89 |
type = 'shipping',
|
90 |
values,
|
91 |
-
}
|
92 |
const {
|
93 |
getValidationError,
|
94 |
setValidationErrors,
|
@@ -97,12 +80,8 @@ const AddressForm = ( {
|
|
97 |
|
98 |
const currentFields = useShallowEqual( fields );
|
99 |
|
100 |
-
const countryValidationError =
|
101 |
-
'shipping-missing-country'
|
102 |
-
) || {} ) as {
|
103 |
-
message: string;
|
104 |
-
hidden: boolean;
|
105 |
-
};
|
106 |
|
107 |
const addressFormFields = useMemo( () => {
|
108 |
return prepareAddressFields(
|
@@ -118,7 +97,7 @@ const AddressForm = ( {
|
|
118 |
values,
|
119 |
setValidationErrors,
|
120 |
clearValidationError,
|
121 |
-
|
122 |
! countryValidationError.hidden
|
123 |
);
|
124 |
}
|
@@ -216,7 +195,7 @@ const AddressForm = ( {
|
|
216 |
value={ values[ field.key ] }
|
217 |
autoCapitalize={ field.autocapitalize }
|
218 |
autoComplete={ field.autocomplete }
|
219 |
-
onChange={ ( newValue
|
220 |
onChange( {
|
221 |
...values,
|
222 |
[ field.key ]: newValue,
|
16 |
import { __ } from '@wordpress/i18n';
|
17 |
import { withInstanceId } from '@woocommerce/base-hocs/with-instance-id';
|
18 |
import { useShallowEqual } from '@woocommerce/base-hooks';
|
19 |
+
import { defaultAddressFields } from '@woocommerce/settings';
|
|
|
|
|
|
|
|
|
|
|
|
|
20 |
|
21 |
/**
|
22 |
* Internal dependencies
|
26 |
// If it's the shipping address form and the user starts entering address
|
27 |
// values without having set the country first, show an error.
|
28 |
const validateShippingCountry = (
|
29 |
+
values,
|
30 |
+
setValidationErrors,
|
31 |
+
clearValidationError,
|
32 |
+
hasValidationError
|
33 |
+
) => {
|
34 |
if (
|
35 |
! hasValidationError &&
|
36 |
! values.country &&
|
51 |
}
|
52 |
};
|
53 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
54 |
/**
|
55 |
* Checkout address form.
|
56 |
*
|
65 |
*/
|
66 |
const AddressForm = ( {
|
67 |
id,
|
68 |
+
fields = Object.keys( defaultAddressFields ),
|
69 |
+
fieldConfig = {},
|
|
|
|
|
70 |
instanceId,
|
71 |
onChange,
|
72 |
type = 'shipping',
|
73 |
values,
|
74 |
+
} ) => {
|
75 |
const {
|
76 |
getValidationError,
|
77 |
setValidationErrors,
|
80 |
|
81 |
const currentFields = useShallowEqual( fields );
|
82 |
|
83 |
+
const countryValidationError =
|
84 |
+
getValidationError( 'shipping-missing-country' ) || {};
|
|
|
|
|
|
|
|
|
85 |
|
86 |
const addressFormFields = useMemo( () => {
|
87 |
return prepareAddressFields(
|
97 |
values,
|
98 |
setValidationErrors,
|
99 |
clearValidationError,
|
100 |
+
countryValidationError.message &&
|
101 |
! countryValidationError.hidden
|
102 |
);
|
103 |
}
|
195 |
value={ values[ field.key ] }
|
196 |
autoCapitalize={ field.autocapitalize }
|
197 |
autoComplete={ field.autocomplete }
|
198 |
+
onChange={ ( newValue ) =>
|
199 |
onChange( {
|
200 |
...values,
|
201 |
[ field.key ]: newValue,
|
assets/js/base/components/cart-checkout/address-form/{index.ts → index.js}
RENAMED
File without changes
|
assets/js/base/components/cart-checkout/address-form/{prepare-address-fields.ts → prepare-address-fields.js}
RENAMED
@@ -3,17 +3,8 @@
|
|
3 |
/**
|
4 |
* External dependencies
|
5 |
*/
|
6 |
-
import {
|
7 |
-
AddressField,
|
8 |
-
AddressFields,
|
9 |
-
CountryAddressFields,
|
10 |
-
defaultAddressFields,
|
11 |
-
getSetting,
|
12 |
-
KeyedAddressField,
|
13 |
-
LocaleSpecificAddressField,
|
14 |
-
} from '@woocommerce/settings';
|
15 |
import { __, sprintf } from '@wordpress/i18n';
|
16 |
-
import { isNumber, isString } from '@woocommerce/types';
|
17 |
|
18 |
/**
|
19 |
* This is locale data from WooCommerce countries class. This doesn't match the shape of the new field data blocks uses,
|
@@ -21,7 +12,7 @@ import { isNumber, isString } from '@woocommerce/types';
|
|
21 |
*
|
22 |
* This supports new properties such as optionalLabel which are not used by core (yet).
|
23 |
*/
|
24 |
-
const coreLocale = getSetting
|
25 |
|
26 |
/**
|
27 |
* Gets props from the core locale, then maps them to the shape we require in the client.
|
@@ -31,10 +22,8 @@ const coreLocale = getSetting< CountryAddressFields >( 'countryLocale', {} );
|
|
31 |
* @param {Object} localeField Locale fields from WooCommerce.
|
32 |
* @return {Object} Supported locale fields.
|
33 |
*/
|
34 |
-
const getSupportedCoreLocaleProps = (
|
35 |
-
|
36 |
-
): Partial< AddressField > => {
|
37 |
-
const fields: Partial< AddressField > = {};
|
38 |
|
39 |
if ( localeField.label !== undefined ) {
|
40 |
fields.label = localeField.label;
|
@@ -57,22 +46,17 @@ const getSupportedCoreLocaleProps = (
|
|
57 |
}
|
58 |
|
59 |
if ( localeField.priority ) {
|
60 |
-
|
61 |
-
fields.index = localeField.priority;
|
62 |
-
}
|
63 |
-
if ( isString( localeField.priority ) ) {
|
64 |
-
fields.index = parseInt( localeField.priority, 10 );
|
65 |
-
}
|
66 |
}
|
67 |
|
68 |
-
if ( localeField.hidden ) {
|
69 |
fields.required = false;
|
70 |
}
|
71 |
|
72 |
return fields;
|
73 |
};
|
74 |
|
75 |
-
const countryAddressFields
|
76 |
.map( ( [ country, countryLocale ] ) => [
|
77 |
country,
|
78 |
Object.entries( countryLocale )
|
@@ -81,15 +65,11 @@ const countryAddressFields: CountryAddressFields = Object.entries( coreLocale )
|
|
81 |
getSupportedCoreLocaleProps( localeField ),
|
82 |
] )
|
83 |
.reduce( ( obj, [ key, val ] ) => {
|
84 |
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
85 |
-
// @ts-ignore - Ignoring because it should be fine as long as the data from the server is correct. TS won't catch it anyway if it's not.
|
86 |
obj[ key ] = val;
|
87 |
return obj;
|
88 |
}, {} ),
|
89 |
] )
|
90 |
.reduce( ( obj, [ key, val ] ) => {
|
91 |
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
92 |
-
// @ts-ignore - Ignoring because it should be fine as long as the data from the server is correct. TS won't catch it anyway if it's not.
|
93 |
obj[ key ] = val;
|
94 |
return obj;
|
95 |
}, {} );
|
@@ -102,15 +82,11 @@ const countryAddressFields: CountryAddressFields = Object.entries( coreLocale )
|
|
102 |
* @param {string} addressCountry Address country code. If unknown, locale fields will not be merged.
|
103 |
* @return {CountryAddressFields} Object containing address fields.
|
104 |
*/
|
105 |
-
const prepareAddressFields = (
|
106 |
-
|
107 |
-
fieldConfigs: Record< string, Partial< AddressField > >,
|
108 |
-
addressCountry = ''
|
109 |
-
): KeyedAddressField[] => {
|
110 |
-
const localeConfigs: AddressFields =
|
111 |
addressCountry && countryAddressFields[ addressCountry ] !== undefined
|
112 |
? countryAddressFields[ addressCountry ]
|
113 |
-
:
|
114 |
|
115 |
return fields
|
116 |
.map( ( field ) => {
|
3 |
/**
|
4 |
* External dependencies
|
5 |
*/
|
6 |
+
import { defaultAddressFields, getSetting } from '@woocommerce/settings';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7 |
import { __, sprintf } from '@wordpress/i18n';
|
|
|
8 |
|
9 |
/**
|
10 |
* This is locale data from WooCommerce countries class. This doesn't match the shape of the new field data blocks uses,
|
12 |
*
|
13 |
* This supports new properties such as optionalLabel which are not used by core (yet).
|
14 |
*/
|
15 |
+
const coreLocale = getSetting( 'countryLocale', {} );
|
16 |
|
17 |
/**
|
18 |
* Gets props from the core locale, then maps them to the shape we require in the client.
|
22 |
* @param {Object} localeField Locale fields from WooCommerce.
|
23 |
* @return {Object} Supported locale fields.
|
24 |
*/
|
25 |
+
const getSupportedCoreLocaleProps = ( localeField ) => {
|
26 |
+
const fields = {};
|
|
|
|
|
27 |
|
28 |
if ( localeField.label !== undefined ) {
|
29 |
fields.label = localeField.label;
|
46 |
}
|
47 |
|
48 |
if ( localeField.priority ) {
|
49 |
+
fields.index = parseInt( localeField.priority, 10 );
|
|
|
|
|
|
|
|
|
|
|
50 |
}
|
51 |
|
52 |
+
if ( localeField.hidden === true ) {
|
53 |
fields.required = false;
|
54 |
}
|
55 |
|
56 |
return fields;
|
57 |
};
|
58 |
|
59 |
+
const countryAddressFields = Object.entries( coreLocale )
|
60 |
.map( ( [ country, countryLocale ] ) => [
|
61 |
country,
|
62 |
Object.entries( countryLocale )
|
65 |
getSupportedCoreLocaleProps( localeField ),
|
66 |
] )
|
67 |
.reduce( ( obj, [ key, val ] ) => {
|
|
|
|
|
68 |
obj[ key ] = val;
|
69 |
return obj;
|
70 |
}, {} ),
|
71 |
] )
|
72 |
.reduce( ( obj, [ key, val ] ) => {
|
|
|
|
|
73 |
obj[ key ] = val;
|
74 |
return obj;
|
75 |
}, {} );
|
82 |
* @param {string} addressCountry Address country code. If unknown, locale fields will not be merged.
|
83 |
* @return {CountryAddressFields} Object containing address fields.
|
84 |
*/
|
85 |
+
const prepareAddressFields = ( fields, fieldConfigs, addressCountry = '' ) => {
|
86 |
+
const localeConfigs =
|
|
|
|
|
|
|
|
|
87 |
addressCountry && countryAddressFields[ addressCountry ] !== undefined
|
88 |
? countryAddressFields[ addressCountry ]
|
89 |
+
: {};
|
90 |
|
91 |
return fields
|
92 |
.map( ( field ) => {
|
assets/js/base/components/cart-checkout/order-summary/index.js
CHANGED
@@ -23,7 +23,7 @@ const OrderSummary = ( { cartItems = [] } ) => {
|
|
23 |
<Panel
|
24 |
className="wc-block-components-order-summary"
|
25 |
initialOpen={ isLarge }
|
26 |
-
hasBorder={
|
27 |
title={
|
28 |
<span className="wc-block-components-order-summary__button-text">
|
29 |
{ __( 'Order summary', 'woo-gutenberg-products-block' ) }
|
23 |
<Panel
|
24 |
className="wc-block-components-order-summary"
|
25 |
initialOpen={ isLarge }
|
26 |
+
hasBorder={ true }
|
27 |
title={
|
28 |
<span className="wc-block-components-order-summary__button-text">
|
29 |
{ __( 'Order summary', 'woo-gutenberg-products-block' ) }
|
assets/js/base/components/cart-checkout/order-summary/order-summary-item.js
CHANGED
@@ -8,13 +8,13 @@ import ProductName from '@woocommerce/base-components/product-name';
|
|
8 |
import { getCurrencyFromPriceResponse } from '@woocommerce/price-format';
|
9 |
import {
|
10 |
__experimentalApplyCheckoutFilter,
|
|
|
11 |
mustContain,
|
12 |
} from '@woocommerce/blocks-checkout';
|
13 |
import PropTypes from 'prop-types';
|
14 |
import Dinero from 'dinero.js';
|
15 |
-
import {
|
16 |
import { useCallback, useMemo } from '@wordpress/element';
|
17 |
-
import { useStoreCart } from '@woocommerce/base-context/hooks';
|
18 |
|
19 |
/**
|
20 |
* Internal dependencies
|
@@ -41,13 +41,8 @@ const OrderSummaryItem = ( { cartItem } ) => {
|
|
41 |
extensions = {},
|
42 |
} = cartItem;
|
43 |
|
44 |
-
// Prepare props to pass to the __experimentalApplyCheckoutFilter filter.
|
45 |
-
// We need to pluck out receiveCart.
|
46 |
-
// eslint-disable-next-line no-unused-vars
|
47 |
-
const { receiveCart, ...cart } = useStoreCart();
|
48 |
-
|
49 |
const productPriceValidation = useCallback(
|
50 |
-
( value ) => mustContain( value, '<price/>' ),
|
51 |
[]
|
52 |
);
|
53 |
|
@@ -55,9 +50,8 @@ const OrderSummaryItem = ( { cartItem } ) => {
|
|
55 |
() => ( {
|
56 |
context: 'summary',
|
57 |
cartItem,
|
58 |
-
cart,
|
59 |
} ),
|
60 |
-
[ cartItem
|
61 |
);
|
62 |
|
63 |
const priceCurrency = getCurrencyFromPriceResponse( prices );
|
@@ -67,6 +61,7 @@ const OrderSummaryItem = ( { cartItem } ) => {
|
|
67 |
defaultValue: initialName,
|
68 |
extensions,
|
69 |
arg,
|
|
|
70 |
} );
|
71 |
|
72 |
const regularPriceSingle = Dinero( {
|
@@ -84,7 +79,7 @@ const OrderSummaryItem = ( { cartItem } ) => {
|
|
84 |
const totalsCurrency = getCurrencyFromPriceResponse( totals );
|
85 |
|
86 |
let lineSubtotal = parseInt( totals.line_subtotal, 10 );
|
87 |
-
if (
|
88 |
lineSubtotal += parseInt( totals.line_subtotal_tax, 10 );
|
89 |
}
|
90 |
const subtotalPrice = Dinero( {
|
8 |
import { getCurrencyFromPriceResponse } from '@woocommerce/price-format';
|
9 |
import {
|
10 |
__experimentalApplyCheckoutFilter,
|
11 |
+
mustBeString,
|
12 |
mustContain,
|
13 |
} from '@woocommerce/blocks-checkout';
|
14 |
import PropTypes from 'prop-types';
|
15 |
import Dinero from 'dinero.js';
|
16 |
+
import { DISPLAY_CART_PRICES_INCLUDING_TAX } from '@woocommerce/block-settings';
|
17 |
import { useCallback, useMemo } from '@wordpress/element';
|
|
|
18 |
|
19 |
/**
|
20 |
* Internal dependencies
|
41 |
extensions = {},
|
42 |
} = cartItem;
|
43 |
|
|
|
|
|
|
|
|
|
|
|
44 |
const productPriceValidation = useCallback(
|
45 |
+
( value ) => mustBeString( value ) && mustContain( value, '<price/>' ),
|
46 |
[]
|
47 |
);
|
48 |
|
50 |
() => ( {
|
51 |
context: 'summary',
|
52 |
cartItem,
|
|
|
53 |
} ),
|
54 |
+
[ cartItem ]
|
55 |
);
|
56 |
|
57 |
const priceCurrency = getCurrencyFromPriceResponse( prices );
|
61 |
defaultValue: initialName,
|
62 |
extensions,
|
63 |
arg,
|
64 |
+
validation: mustBeString,
|
65 |
} );
|
66 |
|
67 |
const regularPriceSingle = Dinero( {
|
79 |
const totalsCurrency = getCurrencyFromPriceResponse( totals );
|
80 |
|
81 |
let lineSubtotal = parseInt( totals.line_subtotal, 10 );
|
82 |
+
if ( DISPLAY_CART_PRICES_INCLUDING_TAX ) {
|
83 |
lineSubtotal += parseInt( totals.line_subtotal_tax, 10 );
|
84 |
}
|
85 |
const subtotalPrice = Dinero( {
|
assets/js/base/components/cart-checkout/order-summary/style.scss
CHANGED
@@ -1,15 +1,3 @@
|
|
1 |
-
.wc-block-components-order-summary {
|
2 |
-
|
3 |
-
.wc-block-components-panel__button {
|
4 |
-
padding-top: 0;
|
5 |
-
margin-top: 0;
|
6 |
-
}
|
7 |
-
|
8 |
-
.wc-block-components-panel__content {
|
9 |
-
margin-bottom: 0;
|
10 |
-
}
|
11 |
-
}
|
12 |
-
|
13 |
.wc-block-components-order-summary__content {
|
14 |
display: table;
|
15 |
width: 100%;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
.wc-block-components-order-summary__content {
|
2 |
display: table;
|
3 |
width: 100%;
|
assets/js/base/components/cart-checkout/payment-method-icons/common-icons.js
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
/**
|
2 |
* External dependencies
|
3 |
*/
|
4 |
-
import {
|
5 |
|
6 |
/**
|
7 |
* Array of common assets.
|
@@ -10,97 +10,97 @@ export const commonIcons = [
|
|
10 |
{
|
11 |
id: 'alipay',
|
12 |
alt: 'Alipay',
|
13 |
-
src:
|
14 |
},
|
15 |
{
|
16 |
id: 'amex',
|
17 |
alt: 'American Express',
|
18 |
-
src:
|
19 |
},
|
20 |
{
|
21 |
id: 'bancontact',
|
22 |
alt: 'Bancontact',
|
23 |
-
src:
|
24 |
},
|
25 |
{
|
26 |
id: 'diners',
|
27 |
alt: 'Diners Club',
|
28 |
-
src:
|
29 |
},
|
30 |
{
|
31 |
id: 'discover',
|
32 |
alt: 'Discover',
|
33 |
-
src:
|
34 |
},
|
35 |
{
|
36 |
id: 'eps',
|
37 |
alt: 'EPS',
|
38 |
-
src:
|
39 |
},
|
40 |
{
|
41 |
id: 'giropay',
|
42 |
alt: 'Giropay',
|
43 |
-
src:
|
44 |
},
|
45 |
{
|
46 |
id: 'ideal',
|
47 |
alt: 'iDeal',
|
48 |
-
src:
|
49 |
},
|
50 |
{
|
51 |
id: 'jcb',
|
52 |
alt: 'JCB',
|
53 |
-
src:
|
54 |
},
|
55 |
{
|
56 |
id: 'laser',
|
57 |
alt: 'Laser',
|
58 |
-
src:
|
59 |
},
|
60 |
{
|
61 |
id: 'maestro',
|
62 |
alt: 'Maestro',
|
63 |
-
src:
|
64 |
},
|
65 |
{
|
66 |
id: 'mastercard',
|
67 |
alt: 'Mastercard',
|
68 |
-
src:
|
69 |
},
|
70 |
{
|
71 |
id: 'multibanco',
|
72 |
alt: 'Multibanco',
|
73 |
-
src:
|
74 |
},
|
75 |
{
|
76 |
id: 'p24',
|
77 |
alt: 'Przelewy24',
|
78 |
-
src:
|
79 |
},
|
80 |
{
|
81 |
id: 'sepa',
|
82 |
alt: 'Sepa',
|
83 |
-
src:
|
84 |
},
|
85 |
{
|
86 |
id: 'sofort',
|
87 |
alt: 'Sofort',
|
88 |
-
src:
|
89 |
},
|
90 |
{
|
91 |
id: 'unionpay',
|
92 |
alt: 'Union Pay',
|
93 |
-
src:
|
94 |
},
|
95 |
{
|
96 |
id: 'visa',
|
97 |
alt: 'Visa',
|
98 |
-
src:
|
99 |
},
|
100 |
{
|
101 |
id: 'wechat',
|
102 |
alt: 'WeChat',
|
103 |
-
src:
|
104 |
},
|
105 |
];
|
106 |
|
1 |
/**
|
2 |
* External dependencies
|
3 |
*/
|
4 |
+
import { WC_BLOCKS_ASSET_URL } from '@woocommerce/block-settings';
|
5 |
|
6 |
/**
|
7 |
* Array of common assets.
|
10 |
{
|
11 |
id: 'alipay',
|
12 |
alt: 'Alipay',
|
13 |
+
src: WC_BLOCKS_ASSET_URL + 'img/payment-methods/alipay.svg',
|
14 |
},
|
15 |
{
|
16 |
id: 'amex',
|
17 |
alt: 'American Express',
|
18 |
+
src: WC_BLOCKS_ASSET_URL + 'img/payment-methods/amex.svg',
|
19 |
},
|
20 |
{
|
21 |
id: 'bancontact',
|
22 |
alt: 'Bancontact',
|
23 |
+
src: WC_BLOCKS_ASSET_URL + 'img/payment-methods/bancontact.svg',
|
24 |
},
|
25 |
{
|
26 |
id: 'diners',
|
27 |
alt: 'Diners Club',
|
28 |
+
src: WC_BLOCKS_ASSET_URL + 'img/payment-methods/diners.svg',
|
29 |
},
|
30 |
{
|
31 |
id: 'discover',
|
32 |
alt: 'Discover',
|
33 |
+
src: WC_BLOCKS_ASSET_URL + 'img/payment-methods/discover.svg',
|
34 |
},
|
35 |
{
|
36 |
id: 'eps',
|
37 |
alt: 'EPS',
|
38 |
+
src: WC_BLOCKS_ASSET_URL + 'img/payment-methods/eps.svg',
|
39 |
},
|
40 |
{
|
41 |
id: 'giropay',
|
42 |
alt: 'Giropay',
|
43 |
+
src: WC_BLOCKS_ASSET_URL + 'img/payment-methods/giropay.svg',
|
44 |
},
|
45 |
{
|
46 |
id: 'ideal',
|
47 |
alt: 'iDeal',
|
48 |
+
src: WC_BLOCKS_ASSET_URL + 'img/payment-methods/ideal.svg',
|
49 |
},
|
50 |
{
|
51 |
id: 'jcb',
|
52 |
alt: 'JCB',
|
53 |
+
src: WC_BLOCKS_ASSET_URL + 'img/payment-methods/jcb.svg',
|
54 |
},
|
55 |
{
|
56 |
id: 'laser',
|
57 |
alt: 'Laser',
|
58 |
+
src: WC_BLOCKS_ASSET_URL + 'img/payment-methods/laser.svg',
|
59 |
},
|
60 |
{
|
61 |
id: 'maestro',
|
62 |
alt: 'Maestro',
|
63 |
+
src: WC_BLOCKS_ASSET_URL + 'img/payment-methods/maestro.svg',
|
64 |
},
|
65 |
{
|
66 |
id: 'mastercard',
|
67 |
alt: 'Mastercard',
|
68 |
+
src: WC_BLOCKS_ASSET_URL + 'img/payment-methods/mastercard.svg',
|
69 |
},
|
70 |
{
|
71 |
id: 'multibanco',
|
72 |
alt: 'Multibanco',
|
73 |
+
src: WC_BLOCKS_ASSET_URL + 'img/payment-methods/multibanco.svg',
|
74 |
},
|
75 |
{
|
76 |
id: 'p24',
|
77 |
alt: 'Przelewy24',
|
78 |
+
src: WC_BLOCKS_ASSET_URL + 'img/payment-methods/p24.svg',
|
79 |
},
|
80 |
{
|
81 |
id: 'sepa',
|
82 |
alt: 'Sepa',
|
83 |
+
src: WC_BLOCKS_ASSET_URL + 'img/payment-methods/sepa.svg',
|
84 |
},
|
85 |
{
|
86 |
id: 'sofort',
|
87 |
alt: 'Sofort',
|
88 |
+
src: WC_BLOCKS_ASSET_URL + 'img/payment-methods/sofort.svg',
|
89 |
},
|
90 |
{
|
91 |
id: 'unionpay',
|
92 |
alt: 'Union Pay',
|
93 |
+
src: WC_BLOCKS_ASSET_URL + 'img/payment-methods/unionpay.svg',
|
94 |
},
|
95 |
{
|
96 |
id: 'visa',
|
97 |
alt: 'Visa',
|
98 |
+
src: WC_BLOCKS_ASSET_URL + 'img/payment-methods/visa.svg',
|
99 |
},
|
100 |
{
|
101 |
id: 'wechat',
|
102 |
alt: 'WeChat',
|
103 |
+
src: WC_BLOCKS_ASSET_URL + 'img/payment-methods/wechat.svg',
|
104 |
},
|
105 |
];
|
106 |
|
assets/js/base/components/cart-checkout/place-order-button/index.js
CHANGED
@@ -11,7 +11,6 @@ const PlaceOrderButton = () => {
|
|
11 |
submitButtonText,
|
12 |
onSubmit,
|
13 |
isCalculating,
|
14 |
-
isDisabled,
|
15 |
waitingForProcessing,
|
16 |
waitingForRedirect,
|
17 |
} = useCheckoutSubmit();
|
@@ -21,10 +20,7 @@ const PlaceOrderButton = () => {
|
|
21 |
className="wc-block-components-checkout-place-order-button"
|
22 |
onClick={ onSubmit }
|
23 |
disabled={
|
24 |
-
isCalculating ||
|
25 |
-
isDisabled ||
|
26 |
-
waitingForProcessing ||
|
27 |
-
waitingForRedirect
|
28 |
}
|
29 |
showSpinner={ waitingForProcessing }
|
30 |
>
|
11 |
submitButtonText,
|
12 |
onSubmit,
|
13 |
isCalculating,
|
|
|
14 |
waitingForProcessing,
|
15 |
waitingForRedirect,
|
16 |
} = useCheckoutSubmit();
|
20 |
className="wc-block-components-checkout-place-order-button"
|
21 |
onClick={ onSubmit }
|
22 |
disabled={
|
23 |
+
isCalculating || waitingForProcessing || waitingForRedirect
|
|
|
|
|
|
|
24 |
}
|
25 |
showSpinner={ waitingForProcessing }
|
26 |
>
|
assets/js/base/components/cart-checkout/policies/{index.tsx → index.js}
RENAMED
@@ -15,7 +15,7 @@ import { decodeEntities } from '@wordpress/html-entities';
|
|
15 |
*/
|
16 |
import './style.scss';
|
17 |
|
18 |
-
const Policies = ()
|
19 |
return (
|
20 |
<ul className="wc-block-components-checkout-policies">
|
21 |
{ PRIVACY_URL && (
|
15 |
*/
|
16 |
import './style.scss';
|
17 |
|
18 |
+
const Policies = () => {
|
19 |
return (
|
20 |
<ul className="wc-block-components-checkout-policies">
|
21 |
{ PRIVACY_URL && (
|
assets/js/base/components/cart-checkout/product-backorder-badge/{index.tsx → index.js}
RENAMED
@@ -11,7 +11,7 @@ import ProductBadge from '../product-badge';
|
|
11 |
/**
|
12 |
* Returns a backorder badge.
|
13 |
*/
|
14 |
-
const ProductBackorderBadge = ()
|
15 |
return (
|
16 |
<ProductBadge className="wc-block-components-product-backorder-badge">
|
17 |
{ __( 'Available on backorder', 'woo-gutenberg-products-block' ) }
|
11 |
/**
|
12 |
* Returns a backorder badge.
|
13 |
*/
|
14 |
+
const ProductBackorderBadge = () => {
|
15 |
return (
|
16 |
<ProductBadge className="wc-block-components-product-backorder-badge">
|
17 |
{ __( 'Available on backorder', 'woo-gutenberg-products-block' ) }
|
assets/js/base/components/cart-checkout/product-badge/{index.tsx → index.js}
RENAMED
@@ -2,21 +2,14 @@
|
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import classNames from 'classnames';
|
5 |
-
import
|
6 |
|
7 |
/**
|
8 |
* Internal dependencies
|
9 |
*/
|
10 |
import './style.scss';
|
11 |
|
12 |
-
|
13 |
-
children?: ReactNode;
|
14 |
-
className?: string;
|
15 |
-
}
|
16 |
-
const ProductBadge = ( {
|
17 |
-
children,
|
18 |
-
className,
|
19 |
-
}: ProductBadgeProps ): JSX.Element => {
|
20 |
return (
|
21 |
<div
|
22 |
className={ classNames(
|
@@ -29,4 +22,8 @@ const ProductBadge = ( {
|
|
29 |
);
|
30 |
};
|
31 |
|
|
|
|
|
|
|
|
|
32 |
export default ProductBadge;
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import classNames from 'classnames';
|
5 |
+
import PropTypes from 'prop-types';
|
6 |
|
7 |
/**
|
8 |
* Internal dependencies
|
9 |
*/
|
10 |
import './style.scss';
|
11 |
|
12 |
+
const ProductBadge = ( { children, className } ) => {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
return (
|
14 |
<div
|
15 |
className={ classNames(
|
22 |
);
|
23 |
};
|
24 |
|
25 |
+
ProductBadge.propTypes = {
|
26 |
+
className: PropTypes.string,
|
27 |
+
};
|
28 |
+
|
29 |
export default ProductBadge;
|
assets/js/base/components/cart-checkout/product-details/{index.tsx → index.js}
RENAMED
@@ -1,22 +1,17 @@
|
|
1 |
/**
|
2 |
* External dependencies
|
3 |
*/
|
|
|
4 |
import { kebabCase } from 'lodash';
|
5 |
import { decodeEntities } from '@wordpress/html-entities';
|
6 |
-
import type { ProductResponseItemData } from '@woocommerce/type-defs/product-response';
|
7 |
|
8 |
/**
|
9 |
* Internal dependencies
|
10 |
*/
|
11 |
import './style.scss';
|
12 |
|
13 |
-
interface ProductDetailsProps {
|
14 |
-
details: ProductResponseItemData[];
|
15 |
-
}
|
16 |
// Component to display cart item data and variations.
|
17 |
-
const ProductDetails = ( {
|
18 |
-
details = [],
|
19 |
-
}: ProductDetailsProps ): JSX.Element | null => {
|
20 |
if ( ! Array.isArray( details ) ) {
|
21 |
return null;
|
22 |
}
|
@@ -37,7 +32,7 @@ const ProductDetails = ( {
|
|
37 |
: '';
|
38 |
return (
|
39 |
<li
|
40 |
-
key={ detail.name + ( detail.display || detail.
|
41 |
className={ className }
|
42 |
>
|
43 |
{ detail.name && (
|
@@ -57,4 +52,14 @@ const ProductDetails = ( {
|
|
57 |
);
|
58 |
};
|
59 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
60 |
export default ProductDetails;
|
1 |
/**
|
2 |
* External dependencies
|
3 |
*/
|
4 |
+
import PropTypes from 'prop-types';
|
5 |
import { kebabCase } from 'lodash';
|
6 |
import { decodeEntities } from '@wordpress/html-entities';
|
|
|
7 |
|
8 |
/**
|
9 |
* Internal dependencies
|
10 |
*/
|
11 |
import './style.scss';
|
12 |
|
|
|
|
|
|
|
13 |
// Component to display cart item data and variations.
|
14 |
+
const ProductDetails = ( { details = [] } ) => {
|
|
|
|
|
15 |
if ( ! Array.isArray( details ) ) {
|
16 |
return null;
|
17 |
}
|
32 |
: '';
|
33 |
return (
|
34 |
<li
|
35 |
+
key={ detail.name + ( detail.display || detail.name ) }
|
36 |
className={ className }
|
37 |
>
|
38 |
{ detail.name && (
|
52 |
);
|
53 |
};
|
54 |
|
55 |
+
ProductDetails.propTypes = {
|
56 |
+
details: PropTypes.arrayOf(
|
57 |
+
PropTypes.shape( {
|
58 |
+
display: PropTypes.string,
|
59 |
+
name: PropTypes.string,
|
60 |
+
value: PropTypes.string.isRequired,
|
61 |
+
} )
|
62 |
+
),
|
63 |
+
};
|
64 |
+
|
65 |
export default ProductDetails;
|
assets/js/base/components/cart-checkout/product-image/{index.tsx → index.js}
RENAMED
@@ -2,18 +2,16 @@
|
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { decodeEntities } from '@wordpress/html-entities';
|
5 |
-
import { PLACEHOLDER_IMG_SRC } from '@woocommerce/settings';
|
|
|
6 |
|
7 |
-
interface ProductImageProps {
|
8 |
-
image: { alt?: string; thumbnail?: string };
|
9 |
-
}
|
10 |
/**
|
11 |
* Formats and returns an image element.
|
12 |
*
|
13 |
* @param {Object} props Incoming props for the component.
|
14 |
* @param {Object} props.image Image properties.
|
15 |
*/
|
16 |
-
const ProductImage = ( { image = {} }
|
17 |
const imageProps = {
|
18 |
src: image.thumbnail || PLACEHOLDER_IMG_SRC,
|
19 |
alt: decodeEntities( image.alt ) || '',
|
@@ -22,4 +20,11 @@ const ProductImage = ( { image = {} }: ProductImageProps ): JSX.Element => {
|
|
22 |
return <img { ...imageProps } alt={ imageProps.alt } />;
|
23 |
};
|
24 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
25 |
export default ProductImage;
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { decodeEntities } from '@wordpress/html-entities';
|
5 |
+
import { PLACEHOLDER_IMG_SRC } from '@woocommerce/block-settings';
|
6 |
+
import PropTypes from 'prop-types';
|
7 |
|
|
|
|
|
|
|
8 |
/**
|
9 |
* Formats and returns an image element.
|
10 |
*
|
11 |
* @param {Object} props Incoming props for the component.
|
12 |
* @param {Object} props.image Image properties.
|
13 |
*/
|
14 |
+
const ProductImage = ( { image = {} } ) => {
|
15 |
const imageProps = {
|
16 |
src: image.thumbnail || PLACEHOLDER_IMG_SRC,
|
17 |
alt: decodeEntities( image.alt ) || '',
|
20 |
return <img { ...imageProps } alt={ imageProps.alt } />;
|
21 |
};
|
22 |
|
23 |
+
ProductImage.propTypes = {
|
24 |
+
image: PropTypes.shape( {
|
25 |
+
alt: PropTypes.string,
|
26 |
+
thumbnail: PropTypes.string,
|
27 |
+
} ),
|
28 |
+
};
|
29 |
+
|
30 |
export default ProductImage;
|
assets/js/base/components/cart-checkout/product-low-stock-badge/{index.tsx → index.js}
RENAMED
@@ -2,24 +2,20 @@
|
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { __, sprintf } from '@wordpress/i18n';
|
|
|
5 |
|
6 |
/**
|
7 |
* Internal dependencies
|
8 |
*/
|
9 |
import ProductBadge from '../product-badge';
|
10 |
|
11 |
-
interface ProductLowStockBadgeProps {
|
12 |
-
lowStockRemaining: number | null;
|
13 |
-
}
|
14 |
/**
|
15 |
* Returns a low stock badge.
|
16 |
*
|
17 |
* @param {Object} props Incoming props for the component.
|
18 |
-
* @param {
|
19 |
*/
|
20 |
-
const ProductLowStockBadge = ( {
|
21 |
-
lowStockRemaining,
|
22 |
-
}: ProductLowStockBadgeProps ): JSX.Element | null => {
|
23 |
if ( ! lowStockRemaining ) {
|
24 |
return null;
|
25 |
}
|
@@ -35,4 +31,8 @@ const ProductLowStockBadge = ( {
|
|
35 |
);
|
36 |
};
|
37 |
|
|
|
|
|
|
|
|
|
38 |
export default ProductLowStockBadge;
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { __, sprintf } from '@wordpress/i18n';
|
5 |
+
import PropTypes from 'prop-types';
|
6 |
|
7 |
/**
|
8 |
* Internal dependencies
|
9 |
*/
|
10 |
import ProductBadge from '../product-badge';
|
11 |
|
|
|
|
|
|
|
12 |
/**
|
13 |
* Returns a low stock badge.
|
14 |
*
|
15 |
* @param {Object} props Incoming props for the component.
|
16 |
+
* @param {boolean} props.lowStockRemaining Whether or not there is low stock remaining.
|
17 |
*/
|
18 |
+
const ProductLowStockBadge = ( { lowStockRemaining } ) => {
|
|
|
|
|
19 |
if ( ! lowStockRemaining ) {
|
20 |
return null;
|
21 |
}
|
31 |
);
|
32 |
};
|
33 |
|
34 |
+
ProductLowStockBadge.propTypes = {
|
35 |
+
lowStockRemaining: PropTypes.number,
|
36 |
+
};
|
37 |
+
|
38 |
export default ProductLowStockBadge;
|
assets/js/base/components/cart-checkout/product-metadata/{index.tsx → index.js}
RENAMED
@@ -1,8 +1,7 @@
|
|
1 |
/**
|
2 |
* External dependencies
|
3 |
*/
|
4 |
-
import
|
5 |
-
import { CartVariationItem } from '@woocommerce/type-defs/cart';
|
6 |
|
7 |
/**
|
8 |
* Internal dependencies
|
@@ -11,19 +10,12 @@ import ProductDetails from '../product-details';
|
|
11 |
import ProductSummary from '../product-summary';
|
12 |
import './style.scss';
|
13 |
|
14 |
-
interface ProductMetadataProps {
|
15 |
-
shortDescription?: string;
|
16 |
-
fullDescription?: string;
|
17 |
-
itemData: ProductResponseItemData[];
|
18 |
-
variation?: CartVariationItem[];
|
19 |
-
}
|
20 |
-
|
21 |
const ProductMetadata = ( {
|
22 |
shortDescription = '',
|
23 |
fullDescription = '',
|
24 |
itemData = [],
|
25 |
variation = [],
|
26 |
-
}
|
27 |
return (
|
28 |
<div className="wc-block-components-product-metadata">
|
29 |
<ProductSummary
|
@@ -42,4 +34,16 @@ const ProductMetadata = ( {
|
|
42 |
);
|
43 |
};
|
44 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
45 |
export default ProductMetadata;
|
1 |
/**
|
2 |
* External dependencies
|
3 |
*/
|
4 |
+
import PropTypes from 'prop-types';
|
|
|
5 |
|
6 |
/**
|
7 |
* Internal dependencies
|
10 |
import ProductSummary from '../product-summary';
|
11 |
import './style.scss';
|
12 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
const ProductMetadata = ( {
|
14 |
shortDescription = '',
|
15 |
fullDescription = '',
|
16 |
itemData = [],
|
17 |
variation = [],
|
18 |
+
} ) => {
|
19 |
return (
|
20 |
<div className="wc-block-components-product-metadata">
|
21 |
<ProductSummary
|
34 |
);
|
35 |
};
|
36 |
|
37 |
+
ProductMetadata.propTypes = {
|
38 |
+
shortDescription: PropTypes.string,
|
39 |
+
fullDescription: PropTypes.string,
|
40 |
+
itemData: PropTypes.array,
|
41 |
+
variation: PropTypes.arrayOf(
|
42 |
+
PropTypes.shape( {
|
43 |
+
attribute: PropTypes.string,
|
44 |
+
value: PropTypes.string.isRequired,
|
45 |
+
} )
|
46 |
+
),
|
47 |
+
};
|
48 |
+
|
49 |
export default ProductMetadata;
|
assets/js/base/components/cart-checkout/product-sale-badge/{index.tsx → index.js}
RENAMED
@@ -4,18 +4,13 @@
|
|
4 |
import { createInterpolateElement } from 'wordpress-element';
|
5 |
import { __, sprintf } from '@wordpress/i18n';
|
6 |
import FormattedMonetaryAmount from '@woocommerce/base-components/formatted-monetary-amount';
|
7 |
-
import
|
8 |
|
9 |
/**
|
10 |
* Internal dependencies
|
11 |
*/
|
12 |
import ProductBadge from '../product-badge';
|
13 |
|
14 |
-
interface ProductSaleBadgeProps {
|
15 |
-
currency: Currency;
|
16 |
-
saleAmount: number;
|
17 |
-
format: string;
|
18 |
-
}
|
19 |
/**
|
20 |
* ProductSaleBadge
|
21 |
*
|
@@ -25,11 +20,7 @@ interface ProductSaleBadgeProps {
|
|
25 |
* @param {string} [props.format] Format to change the price.
|
26 |
* @return {*} The component.
|
27 |
*/
|
28 |
-
const ProductSaleBadge = ( {
|
29 |
-
currency,
|
30 |
-
saleAmount,
|
31 |
-
format = '<price/>',
|
32 |
-
}: ProductSaleBadgeProps ): JSX.Element | null => {
|
33 |
if ( ! saleAmount || saleAmount <= 0 ) {
|
34 |
return null;
|
35 |
}
|
@@ -59,4 +50,9 @@ const ProductSaleBadge = ( {
|
|
59 |
);
|
60 |
};
|
61 |
|
|
|
|
|
|
|
|
|
|
|
62 |
export default ProductSaleBadge;
|
4 |
import { createInterpolateElement } from 'wordpress-element';
|
5 |
import { __, sprintf } from '@wordpress/i18n';
|
6 |
import FormattedMonetaryAmount from '@woocommerce/base-components/formatted-monetary-amount';
|
7 |
+
import PropTypes from 'prop-types';
|
8 |
|
9 |
/**
|
10 |
* Internal dependencies
|
11 |
*/
|
12 |
import ProductBadge from '../product-badge';
|
13 |
|
|
|
|
|
|
|
|
|
|
|
14 |
/**
|
15 |
* ProductSaleBadge
|
16 |
*
|
20 |
* @param {string} [props.format] Format to change the price.
|
21 |
* @return {*} The component.
|
22 |
*/
|
23 |
+
const ProductSaleBadge = ( { currency, saleAmount, format = '<price/>' } ) => {
|
|
|
|
|
|
|
|
|
24 |
if ( ! saleAmount || saleAmount <= 0 ) {
|
25 |
return null;
|
26 |
}
|
50 |
);
|
51 |
};
|
52 |
|
53 |
+
ProductSaleBadge.propTypes = {
|
54 |
+
currency: PropTypes.object,
|
55 |
+
saleAmount: PropTypes.number,
|
56 |
+
};
|
57 |
+
|
58 |
export default ProductSaleBadge;
|
assets/js/base/components/cart-checkout/product-summary/{index.tsx → index.js}
RENAMED
@@ -1,14 +1,10 @@
|
|
1 |
/**
|
2 |
* External dependencies
|
3 |
*/
|
|
|
4 |
import Summary from '@woocommerce/base-components/summary';
|
5 |
-
import {
|
6 |
|
7 |
-
interface ProductSummaryProps {
|
8 |
-
className?: string;
|
9 |
-
shortDescription?: string;
|
10 |
-
fullDescription?: string;
|
11 |
-
}
|
12 |
/**
|
13 |
* Returns an element containing a summary of the product.
|
14 |
*
|
@@ -21,7 +17,7 @@ const ProductSummary = ( {
|
|
21 |
className,
|
22 |
shortDescription = '',
|
23 |
fullDescription = '',
|
24 |
-
}
|
25 |
const source = shortDescription ? shortDescription : fullDescription;
|
26 |
|
27 |
if ( ! source ) {
|
@@ -33,9 +29,15 @@ const ProductSummary = ( {
|
|
33 |
className={ className }
|
34 |
source={ source }
|
35 |
maxLength={ 15 }
|
36 |
-
countType={
|
37 |
/>
|
38 |
);
|
39 |
};
|
40 |
|
|
|
|
|
|
|
|
|
|
|
|
|
41 |
export default ProductSummary;
|
1 |
/**
|
2 |
* External dependencies
|
3 |
*/
|
4 |
+
import PropTypes from 'prop-types';
|
5 |
import Summary from '@woocommerce/base-components/summary';
|
6 |
+
import { getSetting } from '@woocommerce/settings';
|
7 |
|
|
|
|
|
|
|
|
|
|
|
8 |
/**
|
9 |
* Returns an element containing a summary of the product.
|
10 |
*
|
17 |
className,
|
18 |
shortDescription = '',
|
19 |
fullDescription = '',
|
20 |
+
} ) => {
|
21 |
const source = shortDescription ? shortDescription : fullDescription;
|
22 |
|
23 |
if ( ! source ) {
|
29 |
className={ className }
|
30 |
source={ source }
|
31 |
maxLength={ 15 }
|
32 |
+
countType={ getSetting( 'wordCountType', 'words' ) }
|
33 |
/>
|
34 |
);
|
35 |
};
|
36 |
|
37 |
+
ProductSummary.propTypes = {
|
38 |
+
className: PropTypes.string,
|
39 |
+
shortDescription: PropTypes.string,
|
40 |
+
fullDescription: PropTypes.string,
|
41 |
+
};
|
42 |
+
|
43 |
export default ProductSummary;
|
assets/js/base/components/cart-checkout/shipping-calculator/{address.tsx → address.js}
RENAMED
@@ -1,12 +1,12 @@
|
|
1 |
/**
|
2 |
* External dependencies
|
3 |
*/
|
|
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
import Button from '@woocommerce/base-components/button';
|
6 |
import { useState } from '@wordpress/element';
|
7 |
import isShallowEqual from '@wordpress/is-shallow-equal';
|
8 |
import { useValidationContext } from '@woocommerce/base-context';
|
9 |
-
import type { EnteredAddress, AddressFields } from '@woocommerce/settings';
|
10 |
|
11 |
/**
|
12 |
* Internal dependencies
|
@@ -14,16 +14,11 @@ import type { EnteredAddress, AddressFields } from '@woocommerce/settings';
|
|
14 |
import './style.scss';
|
15 |
import { AddressForm } from '../address-form';
|
16 |
|
17 |
-
interface ShippingCalculatorAddressProps {
|
18 |
-
address: EnteredAddress;
|
19 |
-
onUpdate: ( address: EnteredAddress ) => void;
|
20 |
-
addressFields: Partial< keyof AddressFields >[];
|
21 |
-
}
|
22 |
const ShippingCalculatorAddress = ( {
|
23 |
address: initialAddress,
|
24 |
onUpdate,
|
25 |
addressFields,
|
26 |
-
}
|
27 |
const [ address, setAddress ] = useState( initialAddress );
|
28 |
const {
|
29 |
hasValidationErrors,
|
@@ -60,4 +55,10 @@ const ShippingCalculatorAddress = ( {
|
|
60 |
);
|
61 |
};
|
62 |
|
|
|
|
|
|
|
|
|
|
|
|
|
63 |
export default ShippingCalculatorAddress;
|
1 |
/**
|
2 |
* External dependencies
|
3 |
*/
|
4 |
+
import PropTypes from 'prop-types';
|
5 |
import { __ } from '@wordpress/i18n';
|
6 |
import Button from '@woocommerce/base-components/button';
|
7 |
import { useState } from '@wordpress/element';
|
8 |
import isShallowEqual from '@wordpress/is-shallow-equal';
|
9 |
import { useValidationContext } from '@woocommerce/base-context';
|
|
|
10 |
|
11 |
/**
|
12 |
* Internal dependencies
|
14 |
import './style.scss';
|
15 |
import { AddressForm } from '../address-form';
|
16 |
|
|
|
|
|
|
|
|
|
|
|
17 |
const ShippingCalculatorAddress = ( {
|
18 |
address: initialAddress,
|
19 |
onUpdate,
|
20 |
addressFields,
|
21 |
+
} ) => {
|
22 |
const [ address, setAddress ] = useState( initialAddress );
|
23 |
const {
|
24 |
hasValidationErrors,
|
55 |
);
|
56 |
};
|
57 |
|
58 |
+
ShippingCalculatorAddress.propTypes = {
|
59 |
+
address: PropTypes.object.isRequired,
|
60 |
+
onUpdate: PropTypes.func.isRequired,
|
61 |
+
addressFields: PropTypes.array.isRequired,
|
62 |
+
};
|
63 |
+
|
64 |
export default ShippingCalculatorAddress;
|
assets/js/base/components/cart-checkout/shipping-calculator/{index.tsx → index.js}
RENAMED
@@ -1,8 +1,8 @@
|
|
1 |
/**
|
2 |
* External dependencies
|
3 |
*/
|
|
|
4 |
import { useShippingDataContext } from '@woocommerce/base-context';
|
5 |
-
import type { EnteredAddress } from '@woocommerce/settings';
|
6 |
|
7 |
/**
|
8 |
* Internal dependencies
|
@@ -10,17 +10,10 @@ import type { EnteredAddress } from '@woocommerce/settings';
|
|
10 |
import ShippingCalculatorAddress from './address';
|
11 |
import './style.scss';
|
12 |
|
13 |
-
interface ShippingCalculatorProps {
|
14 |
-
onUpdate?: ( newAddress: EnteredAddress ) => void;
|
15 |
-
addressFields?: Partial< keyof EnteredAddress >[];
|
16 |
-
}
|
17 |
-
|
18 |
const ShippingCalculator = ( {
|
19 |
-
onUpdate = () => {
|
20 |
-
/* Do nothing */
|
21 |
-
},
|
22 |
addressFields = [ 'country', 'state', 'city', 'postcode' ],
|
23 |
-
}
|
24 |
const { shippingAddress, setShippingAddress } = useShippingDataContext();
|
25 |
return (
|
26 |
<div className="wc-block-components-shipping-calculator">
|
@@ -36,4 +29,9 @@ const ShippingCalculator = ( {
|
|
36 |
);
|
37 |
};
|
38 |
|
|
|
|
|
|
|
|
|
|
|
39 |
export default ShippingCalculator;
|
1 |
/**
|
2 |
* External dependencies
|
3 |
*/
|
4 |
+
import PropTypes from 'prop-types';
|
5 |
import { useShippingDataContext } from '@woocommerce/base-context';
|
|
|
6 |
|
7 |
/**
|
8 |
* Internal dependencies
|
10 |
import ShippingCalculatorAddress from './address';
|
11 |
import './style.scss';
|
12 |
|
|
|
|
|
|
|
|
|
|
|
13 |
const ShippingCalculator = ( {
|
14 |
+
onUpdate = () => {},
|
|
|
|
|
15 |
addressFields = [ 'country', 'state', 'city', 'postcode' ],
|
16 |
+
} ) => {
|
17 |
const { shippingAddress, setShippingAddress } = useShippingDataContext();
|
18 |
return (
|
19 |
<div className="wc-block-components-shipping-calculator">
|
29 |
);
|
30 |
};
|
31 |
|
32 |
+
ShippingCalculator.propTypes = {
|
33 |
+
onUpdate: PropTypes.func,
|
34 |
+
addressFields: PropTypes.array,
|
35 |
+
};
|
36 |
+
|
37 |
export default ShippingCalculator;
|
assets/js/base/components/cart-checkout/shipping-location/{index.tsx → index.js}
RENAMED
@@ -1,45 +1,35 @@
|
|
1 |
/**
|
2 |
* External dependencies
|
3 |
*/
|
|
|
4 |
import { __, sprintf } from '@wordpress/i18n';
|
5 |
-
import {
|
|
|
|
|
|
|
6 |
import { decodeEntities } from '@wordpress/html-entities';
|
7 |
|
8 |
-
interface ShippingLocationProps {
|
9 |
-
address: EnteredAddress;
|
10 |
-
}
|
11 |
-
|
12 |
/**
|
13 |
* Shows a formatted shipping location.
|
14 |
*
|
15 |
* @param {Object} props Incoming props for the component.
|
16 |
* @param {Object} props.address Incoming address information.
|
17 |
*/
|
18 |
-
const ShippingLocation = ( {
|
19 |
-
address,
|
20 |
-
}: ShippingLocationProps ): JSX.Element | null => {
|
21 |
// we bail early if we don't have an address.
|
22 |
if ( Object.values( address ).length === 0 ) {
|
23 |
return null;
|
24 |
}
|
25 |
-
const shippingCountries = getSetting( 'shippingCountries', {} ) as Record<
|
26 |
-
string,
|
27 |
-
string
|
28 |
-
>;
|
29 |
-
const shippingStates = getSetting( 'shippingStates', {} ) as Record<
|
30 |
-
string,
|
31 |
-
Record< string, string >
|
32 |
-
>;
|
33 |
const formattedCountry =
|
34 |
-
typeof
|
35 |
-
? decodeEntities(
|
36 |
: '';
|
37 |
|
38 |
const formattedState =
|
39 |
-
typeof
|
40 |
-
typeof
|
41 |
? decodeEntities(
|
42 |
-
|
43 |
)
|
44 |
: address.state;
|
45 |
|
@@ -67,4 +57,13 @@ const ShippingLocation = ( {
|
|
67 |
);
|
68 |
};
|
69 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
70 |
export default ShippingLocation;
|
1 |
/**
|
2 |
* External dependencies
|
3 |
*/
|
4 |
+
import PropTypes from 'prop-types';
|
5 |
import { __, sprintf } from '@wordpress/i18n';
|
6 |
+
import {
|
7 |
+
SHIPPING_COUNTRIES,
|
8 |
+
SHIPPING_STATES,
|
9 |
+
} from '@woocommerce/block-settings';
|
10 |
import { decodeEntities } from '@wordpress/html-entities';
|
11 |
|
|
|
|
|
|
|
|
|
12 |
/**
|
13 |
* Shows a formatted shipping location.
|
14 |
*
|
15 |
* @param {Object} props Incoming props for the component.
|
16 |
* @param {Object} props.address Incoming address information.
|
17 |
*/
|
18 |
+
const ShippingLocation = ( { address } ) => {
|
|
|
|
|
19 |
// we bail early if we don't have an address.
|
20 |
if ( Object.values( address ).length === 0 ) {
|
21 |
return null;
|
22 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
23 |
const formattedCountry =
|
24 |
+
typeof SHIPPING_COUNTRIES[ address.country ] === 'string'
|
25 |
+
? decodeEntities( SHIPPING_COUNTRIES[ address.country ] )
|
26 |
: '';
|
27 |
|
28 |
const formattedState =
|
29 |
+
typeof SHIPPING_STATES[ address.country ] === 'object' &&
|
30 |
+
typeof SHIPPING_STATES[ address.country ][ address.state ] === 'string'
|
31 |
? decodeEntities(
|
32 |
+
SHIPPING_STATES[ address.country ][ address.state ]
|
33 |
)
|
34 |
: address.state;
|
35 |
|
57 |
);
|
58 |
};
|
59 |
|
60 |
+
ShippingLocation.propTypes = {
|
61 |
+
address: PropTypes.shape( {
|
62 |
+
city: PropTypes.string,
|
63 |
+
state: PropTypes.string,
|
64 |
+
postcode: PropTypes.string,
|
65 |
+
country: PropTypes.string,
|
66 |
+
} ),
|
67 |
+
};
|
68 |
+
|
69 |
export default ShippingLocation;
|
assets/js/base/components/cart-checkout/shipping-rates-control-package/index.tsx
CHANGED
@@ -4,12 +4,12 @@
|
|
4 |
import classNames from 'classnames';
|
5 |
import { _n, sprintf } from '@wordpress/i18n';
|
6 |
import { decodeEntities } from '@wordpress/html-entities';
|
|
|
|
|
7 |
import type { ReactElement } from 'react';
|
8 |
-
import type { PackageRateOption } from '@woocommerce/type-defs/shipping';
|
9 |
import { Panel } from '@woocommerce/blocks-checkout';
|
10 |
-
import Label from '@woocommerce/base-components/label';
|
11 |
import { useSelectShippingRate } from '@woocommerce/base-context/hooks';
|
12 |
-
import type { CartShippingPackageShippingRate } from '@woocommerce/type-defs/cart';
|
13 |
|
14 |
/**
|
15 |
* Internal dependencies
|
@@ -34,28 +34,21 @@ interface Destination {
|
|
34 |
country: string;
|
35 |
}
|
36 |
|
37 |
-
export interface PackageData {
|
38 |
-
destination: Destination;
|
39 |
-
name: string;
|
40 |
-
// eslint-disable-next-line camelcase
|
41 |
-
shipping_rates: CartShippingPackageShippingRate[];
|
42 |
-
items: PackageItem[];
|
43 |
-
}
|
44 |
-
|
45 |
-
export type PackageRateRenderOption = (
|
46 |
-
option: CartShippingPackageShippingRate
|
47 |
-
) => PackageRateOption;
|
48 |
-
|
49 |
interface PackageProps {
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
|
|
|
|
|
|
|
|
|
|
55 |
className?: string;
|
56 |
collapsible?: boolean;
|
57 |
noResultsMessage: ReactElement;
|
58 |
-
showItems
|
59 |
}
|
60 |
|
61 |
export const ShippingRatesControlPackage = ( {
|
@@ -76,9 +69,12 @@ export const ShippingRatesControlPackage = ( {
|
|
76 |
const header = (
|
77 |
<>
|
78 |
{ ( showItems || collapsible ) && (
|
79 |
-
<
|
|
|
|
|
|
|
80 |
{ packageData.name }
|
81 |
-
</
|
82 |
) }
|
83 |
{ showItems && (
|
84 |
<ul className="wc-block-components-shipping-rates-control__package-items">
|
4 |
import classNames from 'classnames';
|
5 |
import { _n, sprintf } from '@wordpress/i18n';
|
6 |
import { decodeEntities } from '@wordpress/html-entities';
|
7 |
+
import Label from '@woocommerce/base-components/label';
|
8 |
+
import Title from '@woocommerce/base-components/title';
|
9 |
import type { ReactElement } from 'react';
|
10 |
+
import type { Rate, PackageRateOption } from '@woocommerce/type-defs/shipping';
|
11 |
import { Panel } from '@woocommerce/blocks-checkout';
|
|
|
12 |
import { useSelectShippingRate } from '@woocommerce/base-context/hooks';
|
|
|
13 |
|
14 |
/**
|
15 |
* Internal dependencies
|
34 |
country: string;
|
35 |
}
|
36 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
37 |
interface PackageProps {
|
38 |
+
packageId: string;
|
39 |
+
renderOption: ( option: Rate ) => PackageRateOption;
|
40 |
+
collapse: boolean;
|
41 |
+
packageData: {
|
42 |
+
destination: Destination;
|
43 |
+
name: string;
|
44 |
+
// eslint-disable-next-line camelcase
|
45 |
+
shipping_rates: Rate[];
|
46 |
+
items: PackageItem[];
|
47 |
+
};
|
48 |
className?: string;
|
49 |
collapsible?: boolean;
|
50 |
noResultsMessage: ReactElement;
|
51 |
+
showItems: boolean;
|
52 |
}
|
53 |
|
54 |
export const ShippingRatesControlPackage = ( {
|
69 |
const header = (
|
70 |
<>
|
71 |
{ ( showItems || collapsible ) && (
|
72 |
+
<Title
|
73 |
+
className="wc-block-components-shipping-rates-control__package-title"
|
74 |
+
headingLevel="3"
|
75 |
+
>
|
76 |
{ packageData.name }
|
77 |
+
</Title>
|
78 |
) }
|
79 |
{ showItems && (
|
80 |
<ul className="wc-block-components-shipping-rates-control__package-items">
|
assets/js/base/components/cart-checkout/shipping-rates-control-package/package-rates.tsx
CHANGED
@@ -4,9 +4,8 @@
|
|
4 |
import RadioControl, {
|
5 |
RadioControlOptionLayout,
|
6 |
} from '@woocommerce/base-components/radio-control';
|
7 |
-
import type { PackageRateOption } from '@woocommerce/type-defs/shipping';
|
8 |
import type { ReactElement } from 'react';
|
9 |
-
import type { CartShippingPackageShippingRate } from '@woocommerce/type-defs/cart';
|
10 |
|
11 |
/**
|
12 |
* Internal dependencies
|
@@ -15,10 +14,8 @@ import { renderPackageRateOption } from './render-package-rate-option';
|
|
15 |
|
16 |
interface PackageRates {
|
17 |
onSelectRate: ( selectedRateId: string ) => void;
|
18 |
-
rates:
|
19 |
-
renderOption?: (
|
20 |
-
option: CartShippingPackageShippingRate
|
21 |
-
) => PackageRateOption;
|
22 |
className?: string;
|
23 |
noResultsMessage: ReactElement;
|
24 |
selected?: string;
|
4 |
import RadioControl, {
|
5 |
RadioControlOptionLayout,
|
6 |
} from '@woocommerce/base-components/radio-control';
|
7 |
+
import type { Rate, PackageRateOption } from '@woocommerce/type-defs/shipping';
|
8 |
import type { ReactElement } from 'react';
|
|
|
9 |
|
10 |
/**
|
11 |
* Internal dependencies
|
14 |
|
15 |
interface PackageRates {
|
16 |
onSelectRate: ( selectedRateId: string ) => void;
|
17 |
+
rates: Rate[];
|
18 |
+
renderOption?: ( option: Rate ) => PackageRateOption;
|
|
|
|
|
19 |
className?: string;
|
20 |
noResultsMessage: ReactElement;
|
21 |
selected?: string;
|
assets/js/base/components/cart-checkout/shipping-rates-control-package/render-package-rate-option.tsx
CHANGED
@@ -2,24 +2,18 @@
|
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { decodeEntities } from '@wordpress/html-entities';
|
|
|
5 |
import { getCurrencyFromPriceResponse } from '@woocommerce/price-format';
|
6 |
import FormattedMonetaryAmount from '@woocommerce/base-components/formatted-monetary-amount';
|
7 |
-
import type { PackageRateOption } from '@woocommerce/type-defs/shipping';
|
8 |
-
import { getSetting } from '@woocommerce/settings';
|
9 |
-
import { CartShippingPackageShippingRate } from '@woocommerce/type-defs/cart';
|
10 |
|
11 |
/**
|
12 |
* Default render function for package rate options.
|
13 |
*
|
14 |
* @param {Object} rate Rate data.
|
15 |
*/
|
16 |
-
export const renderPackageRateOption = (
|
17 |
-
|
18 |
-
): PackageRateOption => {
|
19 |
-
const priceWithTaxes: number = getSetting(
|
20 |
-
'displayCartPricesIncludingTax',
|
21 |
-
false
|
22 |
-
)
|
23 |
? parseInt( rate.price, 10 ) + parseInt( rate.taxes, 10 )
|
24 |
: parseInt( rate.price, 10 );
|
25 |
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { decodeEntities } from '@wordpress/html-entities';
|
5 |
+
import { DISPLAY_CART_PRICES_INCLUDING_TAX } from '@woocommerce/block-settings';
|
6 |
import { getCurrencyFromPriceResponse } from '@woocommerce/price-format';
|
7 |
import FormattedMonetaryAmount from '@woocommerce/base-components/formatted-monetary-amount';
|
8 |
+
import type { Rate, PackageRateOption } from '@woocommerce/type-defs/shipping';
|
|
|
|
|
9 |
|
10 |
/**
|
11 |
* Default render function for package rate options.
|
12 |
*
|
13 |
* @param {Object} rate Rate data.
|
14 |
*/
|
15 |
+
export const renderPackageRateOption = ( rate: Rate ): PackageRateOption => {
|
16 |
+
const priceWithTaxes: number = DISPLAY_CART_PRICES_INCLUDING_TAX
|
|
|
|
|
|
|
|
|
|
|
17 |
? parseInt( rate.price, 10 ) + parseInt( rate.taxes, 10 )
|
18 |
: parseInt( rate.price, 10 );
|
19 |
|
assets/js/base/components/cart-checkout/shipping-rates-control-package/style.scss
CHANGED
@@ -6,6 +6,12 @@
|
|
6 |
padding-top: em($gap-small);
|
7 |
}
|
8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
9 |
// Remove panel padding because we are adding bottom padding to `.wc-block-components-radio-control`
|
10 |
// and `.wc-block-components-radio-control__option-layout` in the next ruleset.
|
11 |
.wc-block-components-panel__content {
|
@@ -14,7 +20,7 @@
|
|
14 |
|
15 |
.wc-block-components-radio-control,
|
16 |
.wc-block-components-radio-control__option-layout {
|
17 |
-
padding-bottom:
|
18 |
}
|
19 |
|
20 |
.wc-block-components-radio-control .wc-block-components-radio-control__option-layout {
|
6 |
padding-top: em($gap-small);
|
7 |
}
|
8 |
|
9 |
+
.wc-block-components-shipping-rates-control__package-title {
|
10 |
+
@include text-heading();
|
11 |
+
font-weight: bold;
|
12 |
+
margin: 0;
|
13 |
+
}
|
14 |
+
|
15 |
// Remove panel padding because we are adding bottom padding to `.wc-block-components-radio-control`
|
16 |
// and `.wc-block-components-radio-control__option-layout` in the next ruleset.
|
17 |
.wc-block-components-panel__content {
|
20 |
|
21 |
.wc-block-components-radio-control,
|
22 |
.wc-block-components-radio-control__option-layout {
|
23 |
+
padding-bottom: em($gap);
|
24 |
}
|
25 |
|
26 |
.wc-block-components-radio-control .wc-block-components-radio-control__option-layout {
|
assets/js/base/components/cart-checkout/shipping-rates-control/{index.tsx → index.js}
RENAMED
@@ -3,6 +3,7 @@
|
|
3 |
*/
|
4 |
import { __, _n, sprintf } from '@wordpress/i18n';
|
5 |
import { useEffect } from '@wordpress/element';
|
|
|
6 |
import { speak } from '@wordpress/a11y';
|
7 |
import LoadingMask from '@woocommerce/base-components/loading-mask';
|
8 |
import { ExperimentalOrderShippingPackages } from '@woocommerce/blocks-checkout';
|
@@ -11,77 +12,16 @@ import {
|
|
11 |
getShippingRatesRateCount,
|
12 |
} from '@woocommerce/base-utils';
|
13 |
import { useStoreCart } from '@woocommerce/base-context/hooks';
|
14 |
-
import { CartResponseShippingRate } from '@woocommerce/type-defs/cart-response';
|
15 |
-
import { ReactElement } from 'react';
|
16 |
|
17 |
/**
|
18 |
* Internal dependencies
|
19 |
*/
|
20 |
-
import ShippingRatesControlPackage
|
21 |
-
PackageRateRenderOption,
|
22 |
-
} from '../shipping-rates-control-package';
|
23 |
-
|
24 |
-
interface PackagesProps {
|
25 |
-
packages: CartResponseShippingRate[];
|
26 |
-
collapse?: boolean;
|
27 |
-
collapsible?: boolean;
|
28 |
-
showItems?: boolean;
|
29 |
-
noResultsMessage: ReactElement;
|
30 |
-
renderOption: PackageRateRenderOption;
|
31 |
-
}
|
32 |
|
33 |
/**
|
34 |
-
*
|
35 |
-
*
|
36 |
-
* @param {Object} props Incoming props.
|
37 |
-
* @param {Array} props.packages Array of packages.
|
38 |
-
* @param {boolean} props.collapsible If the package should be rendered as a
|
39 |
-
* @param {ReactElement} props.noResultsMessage Rendered when there are no rates in a package.
|
40 |
-
* collapsible panel.
|
41 |
-
* @param {boolean} props.collapse If the panel should be collapsed by default,
|
42 |
-
* only works if collapsible is true.
|
43 |
-
* @param {boolean} props.showItems If we should items below the package name.
|
44 |
-
* @param {PackageRateRenderOption} [props.renderOption] Function to render a shipping rate.
|
45 |
-
* @return {JSX.Element|null} Rendered components.
|
46 |
*/
|
47 |
-
const Packages = ( {
|
48 |
-
packages,
|
49 |
-
collapse,
|
50 |
-
showItems,
|
51 |
-
collapsible,
|
52 |
-
noResultsMessage,
|
53 |
-
renderOption,
|
54 |
-
}: PackagesProps ): JSX.Element | null => {
|
55 |
-
// If there are no packages, return nothing.
|
56 |
-
if ( ! packages.length ) {
|
57 |
-
return null;
|
58 |
-
}
|
59 |
-
return (
|
60 |
-
<>
|
61 |
-
{ packages.map( ( { package_id: packageId, ...packageData } ) => (
|
62 |
-
<ShippingRatesControlPackage
|
63 |
-
key={ packageId }
|
64 |
-
packageId={ packageId }
|
65 |
-
packageData={ packageData }
|
66 |
-
collapsible={ collapsible }
|
67 |
-
collapse={ collapse }
|
68 |
-
showItems={ showItems }
|
69 |
-
noResultsMessage={ noResultsMessage }
|
70 |
-
renderOption={ renderOption }
|
71 |
-
/>
|
72 |
-
) ) }
|
73 |
-
</>
|
74 |
-
);
|
75 |
-
};
|
76 |
|
77 |
-
interface ShippingRatesControlProps {
|
78 |
-
collapsible?: boolean;
|
79 |
-
shippingRates: CartResponseShippingRate[];
|
80 |
-
className?: string;
|
81 |
-
shippingRatesLoading: boolean;
|
82 |
-
noResultsMessage: ReactElement;
|
83 |
-
renderOption: PackageRateRenderOption;
|
84 |
-
}
|
85 |
/**
|
86 |
* Renders the shipping rates control element.
|
87 |
*
|
@@ -90,7 +30,7 @@ interface ShippingRatesControlProps {
|
|
90 |
* @param {boolean} props.shippingRatesLoading True when rates are being loaded.
|
91 |
* @param {string} props.className Class name for package rates.
|
92 |
* @param {boolean} [props.collapsible] If true, when multiple packages are rendered they can be toggled open and closed.
|
93 |
-
* @param {ReactElement} props.noResultsMessage Rendered when there are no packages.
|
94 |
* @param {Function} [props.renderOption] Function to render a shipping rate.
|
95 |
*/
|
96 |
const ShippingRatesControl = ( {
|
@@ -100,7 +40,7 @@ const ShippingRatesControl = ( {
|
|
100 |
collapsible = false,
|
101 |
noResultsMessage,
|
102 |
renderOption,
|
103 |
-
}
|
104 |
useEffect( () => {
|
105 |
if ( shippingRatesLoading ) {
|
106 |
return;
|
@@ -150,7 +90,7 @@ const ShippingRatesControl = ( {
|
|
150 |
// Prepare props to pass to the ExperimentalOrderShippingPackages slot fill.
|
151 |
// We need to pluck out receiveCart.
|
152 |
// eslint-disable-next-line no-unused-vars
|
153 |
-
const { extensions, ...cart } = useStoreCart();
|
154 |
const slotFillProps = {
|
155 |
className,
|
156 |
collapsible,
|
@@ -184,4 +124,58 @@ const ShippingRatesControl = ( {
|
|
184 |
);
|
185 |
};
|
186 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
187 |
export default ShippingRatesControl;
|
3 |
*/
|
4 |
import { __, _n, sprintf } from '@wordpress/i18n';
|
5 |
import { useEffect } from '@wordpress/element';
|
6 |
+
import PropTypes from 'prop-types';
|
7 |
import { speak } from '@wordpress/a11y';
|
8 |
import LoadingMask from '@woocommerce/base-components/loading-mask';
|
9 |
import { ExperimentalOrderShippingPackages } from '@woocommerce/blocks-checkout';
|
12 |
getShippingRatesRateCount,
|
13 |
} from '@woocommerce/base-utils';
|
14 |
import { useStoreCart } from '@woocommerce/base-context/hooks';
|
|
|
|
|
15 |
|
16 |
/**
|
17 |
* Internal dependencies
|
18 |
*/
|
19 |
+
import ShippingRatesControlPackage from '../shipping-rates-control-package';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20 |
|
21 |
/**
|
22 |
+
* @typedef {import('react')} React
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
23 |
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
24 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
25 |
/**
|
26 |
* Renders the shipping rates control element.
|
27 |
*
|
30 |
* @param {boolean} props.shippingRatesLoading True when rates are being loaded.
|
31 |
* @param {string} props.className Class name for package rates.
|
32 |
* @param {boolean} [props.collapsible] If true, when multiple packages are rendered they can be toggled open and closed.
|
33 |
+
* @param {React.ReactElement} props.noResultsMessage Rendered when there are no packages.
|
34 |
* @param {Function} [props.renderOption] Function to render a shipping rate.
|
35 |
*/
|
36 |
const ShippingRatesControl = ( {
|
40 |
collapsible = false,
|
41 |
noResultsMessage,
|
42 |
renderOption,
|
43 |
+
} ) => {
|
44 |
useEffect( () => {
|
45 |
if ( shippingRatesLoading ) {
|
46 |
return;
|
90 |
// Prepare props to pass to the ExperimentalOrderShippingPackages slot fill.
|
91 |
// We need to pluck out receiveCart.
|
92 |
// eslint-disable-next-line no-unused-vars
|
93 |
+
const { extensions, receiveCart, ...cart } = useStoreCart();
|
94 |
const slotFillProps = {
|
95 |
className,
|
96 |
collapsible,
|
124 |
);
|
125 |
};
|
126 |
|
127 |
+
/**
|
128 |
+
* Renders multiple packages within the slotfill.
|
129 |
+
*
|
130 |
+
* @param {Object} props Incoming props.
|
131 |
+
* @param {Array} props.packages Array of packages.
|
132 |
+
* @param {React.ReactElement} props.noResultsMessage Rendered when there are no rates in a package.
|
133 |
+
* @param {boolean} props.collapsible If the package should be rendered as a
|
134 |
+
* collapsible panel.
|
135 |
+
* @param {boolean} props.collapse If the panel should be collapsed by default,
|
136 |
+
* only works if collapsible is true.
|
137 |
+
* @param {boolean} props.showItems If we should items below the package name.
|
138 |
+
* @param {Function} [props.renderOption] Function to render a shipping rate.
|
139 |
+
* @return {React.ReactElement|null} Rendered components.
|
140 |
+
*/
|
141 |
+
const Packages = ( {
|
142 |
+
packages,
|
143 |
+
collapse,
|
144 |
+
showItems,
|
145 |
+
collapsible,
|
146 |
+
noResultsMessage,
|
147 |
+
renderOption,
|
148 |
+
} ) => {
|
149 |
+
// If there are no packages, return nothing.
|
150 |
+
if ( ! packages.length ) {
|
151 |
+
return null;
|
152 |
+
}
|
153 |
+
|
154 |
+
return (
|
155 |
+
<>
|
156 |
+
{ packages.map( ( { package_id: packageId, ...packageData } ) => (
|
157 |
+
<ShippingRatesControlPackage
|
158 |
+
key={ packageId }
|
159 |
+
packageId={ packageId }
|
160 |
+
packageData={ packageData }
|
161 |
+
collapsible={ collapsible }
|
162 |
+
collapse={ collapse }
|
163 |
+
showItems={ showItems }
|
164 |
+
noResultsMessage={ noResultsMessage }
|
165 |
+
renderOption={ renderOption }
|
166 |
+
/>
|
167 |
+
) ) }
|
168 |
+
</>
|
169 |
+
);
|
170 |
+
};
|
171 |
+
|
172 |
+
ShippingRatesControl.propTypes = {
|
173 |
+
noResultsMessage: PropTypes.node.isRequired,
|
174 |
+
renderOption: PropTypes.func,
|
175 |
+
className: PropTypes.string,
|
176 |
+
collapsible: PropTypes.bool,
|
177 |
+
shippingRates: PropTypes.array,
|
178 |
+
shippingRatesLoading: PropTypes.bool,
|
179 |
+
};
|
180 |
+
|
181 |
export default ShippingRatesControl;
|
assets/js/base/components/cart-checkout/totals/coupon/index.js
CHANGED
@@ -29,6 +29,7 @@ const TotalsCoupon = ( {
|
|
29 |
const [ couponValue, setCouponValue ] = useState( '' );
|
30 |
const currentIsLoading = useRef( false );
|
31 |
const { getValidationError, getValidationErrorId } = useValidationContext();
|
|
|
32 |
const validationError = getValidationError( 'coupon' );
|
33 |
|
34 |
useEffect( () => {
|
@@ -45,16 +46,16 @@ const TotalsCoupon = ( {
|
|
45 |
return (
|
46 |
<Panel
|
47 |
className="wc-block-components-totals-coupon"
|
48 |
-
hasBorder={
|
49 |
initialOpen={ initialOpen }
|
50 |
title={
|
51 |
<Label
|
52 |
label={ __(
|
53 |
-
'Coupon
|
54 |
'woo-gutenberg-products-block'
|
55 |
) }
|
56 |
screenReaderLabel={ __(
|
57 |
-
'
|
58 |
'woo-gutenberg-products-block'
|
59 |
) }
|
60 |
htmlFor={ textInputId }
|
29 |
const [ couponValue, setCouponValue ] = useState( '' );
|
30 |
const currentIsLoading = useRef( false );
|
31 |
const { getValidationError, getValidationErrorId } = useValidationContext();
|
32 |
+
|
33 |
const validationError = getValidationError( 'coupon' );
|
34 |
|
35 |
useEffect( () => {
|
46 |
return (
|
47 |
<Panel
|
48 |
className="wc-block-components-totals-coupon"
|
49 |
+
hasBorder={ true }
|
50 |
initialOpen={ initialOpen }
|
51 |
title={
|
52 |
<Label
|
53 |
label={ __(
|
54 |
+
'Coupon Code?',
|
55 |
'woo-gutenberg-products-block'
|
56 |
) }
|
57 |
screenReaderLabel={ __(
|
58 |
+
'Introduce Coupon Code',
|
59 |
'woo-gutenberg-products-block'
|
60 |
) }
|
61 |
htmlFor={ textInputId }
|
assets/js/base/components/cart-checkout/totals/coupon/style.scss
CHANGED
@@ -1,19 +1,7 @@
|
|
1 |
-
.wc-block-components-totals-coupon {
|
2 |
-
|
3 |
-
.wc-block-components-panel__button {
|
4 |
-
margin-top: 0;
|
5 |
-
padding-top: 0;
|
6 |
-
}
|
7 |
-
|
8 |
-
.wc-block-components-panel__content {
|
9 |
-
padding-bottom: 0;
|
10 |
-
}
|
11 |
-
}
|
12 |
-
|
13 |
.wc-block-components-totals-coupon__form {
|
14 |
display: flex;
|
|
|
15 |
width: 100%;
|
16 |
-
margin-bottom: 0;
|
17 |
|
18 |
.wc-block-components-totals-coupon__input {
|
19 |
margin-bottom: 0;
|
@@ -29,10 +17,6 @@
|
|
29 |
padding-right: $gap-large;
|
30 |
white-space: nowrap;
|
31 |
}
|
32 |
-
|
33 |
-
.wc-block-components-totals-coupon__button.no-margin {
|
34 |
-
margin: 0;
|
35 |
-
}
|
36 |
}
|
37 |
|
38 |
.wc-block-components-totals-coupon__content {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
.wc-block-components-totals-coupon__form {
|
2 |
display: flex;
|
3 |
+
margin-bottom: 0.5em;
|
4 |
width: 100%;
|
|
|
5 |
|
6 |
.wc-block-components-totals-coupon__input {
|
7 |
margin-bottom: 0;
|
17 |
padding-right: $gap-large;
|
18 |
white-space: nowrap;
|
19 |
}
|
|
|
|
|
|
|
|
|
20 |
}
|
21 |
|
22 |
.wc-block-components-totals-coupon__content {
|
assets/js/base/components/cart-checkout/totals/discount/index.js
CHANGED
@@ -2,14 +2,11 @@
|
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { __, sprintf } from '@wordpress/i18n';
|
|
|
5 |
import LoadingMask from '@woocommerce/base-components/loading-mask';
|
6 |
import { RemovableChip } from '@woocommerce/base-components/chip';
|
7 |
import PropTypes from 'prop-types';
|
8 |
-
import {
|
9 |
-
__experimentalApplyCheckoutFilter,
|
10 |
-
TotalsItem,
|
11 |
-
} from '@woocommerce/blocks-checkout';
|
12 |
-
import { getSetting } from '@woocommerce/settings';
|
13 |
|
14 |
/**
|
15 |
* Internal dependencies
|
@@ -34,27 +31,16 @@ const TotalsDiscount = ( {
|
|
34 |
}
|
35 |
|
36 |
const discountTaxValue = parseInt( totalDiscountTax, 10 );
|
37 |
-
const discountTotalValue =
|
38 |
-
'displayCartPricesIncludingTax',
|
39 |
-
false
|
40 |
-
)
|
41 |
? discountValue + discountTaxValue
|
42 |
: discountValue;
|
43 |
|
44 |
-
const filteredCartCoupons = __experimentalApplyCheckoutFilter( {
|
45 |
-
arg: {
|
46 |
-
context: 'summary',
|
47 |
-
},
|
48 |
-
filterName: 'coupons',
|
49 |
-
defaultValue: cartCoupons,
|
50 |
-
} );
|
51 |
-
|
52 |
return (
|
53 |
<TotalsItem
|
54 |
className="wc-block-components-totals-discount"
|
55 |
currency={ currency }
|
56 |
description={
|
57 |
-
|
58 |
<LoadingMask
|
59 |
screenReaderLabel={ __(
|
60 |
'Removing coupon…',
|
@@ -64,36 +50,34 @@ const TotalsDiscount = ( {
|
|
64 |
showSpinner={ false }
|
65 |
>
|
66 |
<ul className="wc-block-components-totals-discount__coupon-list">
|
67 |
-
{
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
);
|
96 |
-
} ) }
|
97 |
</ul>
|
98 |
</LoadingMask>
|
99 |
)
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { __, sprintf } from '@wordpress/i18n';
|
5 |
+
import { DISPLAY_CART_PRICES_INCLUDING_TAX } from '@woocommerce/block-settings';
|
6 |
import LoadingMask from '@woocommerce/base-components/loading-mask';
|
7 |
import { RemovableChip } from '@woocommerce/base-components/chip';
|
8 |
import PropTypes from 'prop-types';
|
9 |
+
import { TotalsItem } from '@woocommerce/blocks-checkout';
|
|
|
|
|
|
|
|
|
10 |
|
11 |
/**
|
12 |
* Internal dependencies
|
31 |
}
|
32 |
|
33 |
const discountTaxValue = parseInt( totalDiscountTax, 10 );
|
34 |
+
const discountTotalValue = DISPLAY_CART_PRICES_INCLUDING_TAX
|
|
|
|
|
|
|
35 |
? discountValue + discountTaxValue
|
36 |
: discountValue;
|
37 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
38 |
return (
|
39 |
<TotalsItem
|
40 |
className="wc-block-components-totals-discount"
|
41 |
currency={ currency }
|
42 |
description={
|
43 |
+
cartCoupons.length !== 0 && (
|
44 |
<LoadingMask
|
45 |
screenReaderLabel={ __(
|
46 |
'Removing coupon…',
|
50 |
showSpinner={ false }
|
51 |
>
|
52 |
<ul className="wc-block-components-totals-discount__coupon-list">
|
53 |
+
{ cartCoupons.map( ( cartCoupon ) => (
|
54 |
+
<RemovableChip
|
55 |
+
key={ 'coupon-' + cartCoupon.code }
|
56 |
+
className="wc-block-components-totals-discount__coupon-list-item"
|
57 |
+
text={ cartCoupon.code }
|
58 |
+
screenReaderText={ sprintf(
|
59 |
+
/* translators: %s Coupon code. */
|
60 |
+
__(
|
61 |
+
'Coupon: %s',
|
62 |
+
'woo-gutenberg-products-block'
|
63 |
+
),
|
64 |
+
cartCoupon.code
|
65 |
+
) }
|
66 |
+
disabled={ isRemovingCoupon }
|
67 |
+
onRemove={ () => {
|
68 |
+
removeCoupon( cartCoupon.code );
|
69 |
+
} }
|
70 |
+
radius="large"
|
71 |
+
ariaLabel={ sprintf(
|
72 |
+
/* translators: %s is a coupon code. */
|
73 |
+
__(
|
74 |
+
'Remove coupon "%s"',
|
75 |
+
'woo-gutenberg-products-block'
|
76 |
+
),
|
77 |
+
cartCoupon.code
|
78 |
+
) }
|
79 |
+
/>
|
80 |
+
) ) }
|
|
|
|
|
81 |
</ul>
|
82 |
</LoadingMask>
|
83 |
)
|
assets/js/base/components/cart-checkout/totals/discount/style.scss
CHANGED
@@ -3,7 +3,3 @@
|
|
3 |
margin: 0;
|
4 |
padding: 0;
|
5 |
}
|
6 |
-
|
7 |
-
.wc-block-components-totals-discount .wc-block-components-totals-item__value {
|
8 |
-
color: $discount-color;
|
9 |
-
}
|
3 |
margin: 0;
|
4 |
padding: 0;
|
5 |
}
|
|
|
|
|
|
|
|
assets/js/base/components/cart-checkout/totals/footer-item/index.js
CHANGED
@@ -2,41 +2,38 @@
|
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { __ } from '@wordpress/i18n';
|
|
|
|
|
|
|
|
|
5 |
import { createInterpolateElement } from 'wordpress-element';
|
6 |
import FormattedMonetaryAmount from '@woocommerce/base-components/formatted-monetary-amount';
|
7 |
import PropTypes from 'prop-types';
|
8 |
import {
|
9 |
__experimentalApplyCheckoutFilter,
|
|
|
10 |
TotalsItem,
|
11 |
} from '@woocommerce/blocks-checkout';
|
12 |
import { useStoreCart } from '@woocommerce/base-context/hooks';
|
13 |
-
import { getSetting } from '@woocommerce/settings';
|
14 |
|
15 |
/**
|
16 |
* Internal dependencies
|
17 |
*/
|
18 |
import './style.scss';
|
19 |
|
20 |
-
const
|
21 |
-
const SHOW_TAXES =
|
22 |
-
getSetting( 'taxesEnabled', true ) &&
|
23 |
-
getSetting( 'displayCartPricesIncludingTax', false );
|
24 |
|
|
|
25 |
const { total_price: totalPrice, total_tax: totalTax } = values;
|
26 |
-
|
27 |
-
// Prepare props to pass to the __experimentalApplyCheckoutFilter filter.
|
28 |
-
// We need to pluck out receiveCart.
|
29 |
-
// eslint-disable-next-line no-unused-vars
|
30 |
-
const { receiveCart, ...cart } = useStoreCart();
|
31 |
const label = __experimentalApplyCheckoutFilter( {
|
32 |
filterName: 'totalLabel',
|
33 |
defaultValue: __( 'Total', 'woo-gutenberg-products-block' ),
|
34 |
-
extensions
|
35 |
-
|
|
|
36 |
} );
|
37 |
|
38 |
-
const parsedTaxValue = parseInt( totalTax, 10 );
|
39 |
-
|
40 |
return (
|
41 |
<TotalsItem
|
42 |
className="wc-block-components-totals-footer-item"
|
@@ -44,8 +41,7 @@ const TotalsFooterItem = ( { currency, values } ) => {
|
|
44 |
label={ label }
|
45 |
value={ parseInt( totalPrice, 10 ) }
|
46 |
description={
|
47 |
-
SHOW_TAXES &&
|
48 |
-
parsedTaxValue !== 0 && (
|
49 |
<p className="wc-block-components-totals-footer-item-tax">
|
50 |
{ createInterpolateElement(
|
51 |
__(
|
@@ -57,7 +53,7 @@ const TotalsFooterItem = ( { currency, values } ) => {
|
|
57 |
<FormattedMonetaryAmount
|
58 |
className="wc-block-components-totals-footer-item-tax-value"
|
59 |
currency={ currency }
|
60 |
-
value={
|
61 |
/>
|
62 |
),
|
63 |
}
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
+
import {
|
6 |
+
TAXES_ENABLED,
|
7 |
+
DISPLAY_CART_PRICES_INCLUDING_TAX,
|
8 |
+
} from '@woocommerce/block-settings';
|
9 |
import { createInterpolateElement } from 'wordpress-element';
|
10 |
import FormattedMonetaryAmount from '@woocommerce/base-components/formatted-monetary-amount';
|
11 |
import PropTypes from 'prop-types';
|
12 |
import {
|
13 |
__experimentalApplyCheckoutFilter,
|
14 |
+
mustBeString,
|
15 |
TotalsItem,
|
16 |
} from '@woocommerce/blocks-checkout';
|
17 |
import { useStoreCart } from '@woocommerce/base-context/hooks';
|
|
|
18 |
|
19 |
/**
|
20 |
* Internal dependencies
|
21 |
*/
|
22 |
import './style.scss';
|
23 |
|
24 |
+
const SHOW_TAXES = TAXES_ENABLED && DISPLAY_CART_PRICES_INCLUDING_TAX;
|
|
|
|
|
|
|
25 |
|
26 |
+
const TotalsFooterItem = ( { currency, values } ) => {
|
27 |
const { total_price: totalPrice, total_tax: totalTax } = values;
|
28 |
+
const { extensions } = useStoreCart();
|
|
|
|
|
|
|
|
|
29 |
const label = __experimentalApplyCheckoutFilter( {
|
30 |
filterName: 'totalLabel',
|
31 |
defaultValue: __( 'Total', 'woo-gutenberg-products-block' ),
|
32 |
+
extensions,
|
33 |
+
// Only accept strings.
|
34 |
+
validation: mustBeString,
|
35 |
} );
|
36 |
|
|
|
|
|
37 |
return (
|
38 |
<TotalsItem
|
39 |
className="wc-block-components-totals-footer-item"
|
41 |
label={ label }
|
42 |
value={ parseInt( totalPrice, 10 ) }
|
43 |
description={
|
44 |
+
SHOW_TAXES && (
|
|
|
45 |
<p className="wc-block-components-totals-footer-item-tax">
|
46 |
{ createInterpolateElement(
|
47 |
__(
|
53 |
<FormattedMonetaryAmount
|
54 |
className="wc-block-components-totals-footer-item-tax-value"
|
55 |
currency={ currency }
|
56 |
+
value={ parseInt( totalTax, 10 ) }
|
57 |
/>
|
58 |
),
|
59 |
}
|
assets/js/base/components/cart-checkout/totals/footer-item/test/__snapshots__/index.js.snap
DELETED
@@ -1,79 +0,0 @@
|
|
1 |
-
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
2 |
-
|
3 |
-
exports[`TotalsFooterItem Does not show the "including %s of tax" line if tax is 0 1`] = `
|
4 |
-
<div>
|
5 |
-
<div
|
6 |
-
class="wc-block-components-totals-item wc-block-components-totals-footer-item"
|
7 |
-
>
|
8 |
-
<span
|
9 |
-
class="wc-block-components-totals-item__label"
|
10 |
-
>
|
11 |
-
Total
|
12 |
-
</span>
|
13 |
-
<span
|
14 |
-
class="wc-block-formatted-money-amount wc-block-components-formatted-money-amount wc-block-components-totals-item__value"
|
15 |
-
>
|
16 |
-
£85.00
|
17 |
-
</span>
|
18 |
-
<div
|
19 |
-
class="wc-block-components-totals-item__description"
|
20 |
-
/>
|
21 |
-
</div>
|
22 |
-
</div>
|
23 |
-
`;
|
24 |
-
|
25 |
-
exports[`TotalsFooterItem Does not show the "including %s of tax" line if tax is disabled 1`] = `
|
26 |
-
<div>
|
27 |
-
<div
|
28 |
-
class="wc-block-components-totals-item wc-block-components-totals-footer-item"
|
29 |
-
>
|
30 |
-
<span
|
31 |
-
class="wc-block-components-totals-item__label"
|
32 |
-
>
|
33 |
-
Total
|
34 |
-
</span>
|
35 |
-
<span
|
36 |
-
class="wc-block-formatted-money-amount wc-block-components-formatted-money-amount wc-block-components-totals-item__value"
|
37 |
-
>
|
38 |
-
£85.00
|
39 |
-
</span>
|
40 |
-
<div
|
41 |
-
class="wc-block-components-totals-item__description"
|
42 |
-
/>
|
43 |
-
</div>
|
44 |
-
</div>
|
45 |
-
`;
|
46 |
-
|
47 |
-
exports[`TotalsFooterItem Shows the "including %s of tax" line if tax is greater than 0 1`] = `
|
48 |
-
<div>
|
49 |
-
<div
|
50 |
-
class="wc-block-components-totals-item wc-block-components-totals-footer-item"
|
51 |
-
>
|
52 |
-
<span
|
53 |
-
class="wc-block-components-totals-item__label"
|
54 |
-
>
|
55 |
-
Total
|
56 |
-
</span>
|
57 |
-
<span
|
58 |
-
class="wc-block-formatted-money-amount wc-block-components-formatted-money-amount wc-block-components-totals-item__value"
|
59 |
-
>
|
60 |
-
£85.00
|
61 |
-
</span>
|
62 |
-
<div
|
63 |
-
class="wc-block-components-totals-item__description"
|
64 |
-
>
|
65 |
-
<p
|
66 |
-
class="wc-block-components-totals-footer-item-tax"
|
67 |
-
>
|
68 |
-
Including
|
69 |
-
<span
|
70 |
-
class="wc-block-formatted-money-amount wc-block-components-formatted-money-amount wc-block-components-totals-footer-item-tax-value"
|
71 |
-
>
|
72 |
-
£1.00
|
73 |
-
</span>
|
74 |
-
in taxes
|
75 |
-
</p>
|
76 |
-
</div>
|
77 |
-
</div>
|
78 |
-
</div>
|
79 |
-
`;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/base/components/cart-checkout/totals/footer-item/test/index.js
DELETED
@@ -1,81 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* External dependencies
|
3 |
-
*/
|
4 |
-
import { render } from '@testing-library/react';
|
5 |
-
|
6 |
-
/**
|
7 |
-
* Internal dependencies
|
8 |
-
*/
|
9 |
-
import TotalsFooterItem from '../index';
|
10 |
-
import { allSettings } from '../../../../../../settings/shared/settings-init';
|
11 |
-
|
12 |
-
describe( 'TotalsFooterItem', () => {
|
13 |
-
beforeEach( () => {
|
14 |
-
allSettings.taxesEnabled = true;
|
15 |
-
allSettings.displayCartPricesIncludingTax = true;
|
16 |
-
} );
|
17 |
-
const currency = {
|
18 |
-
code: 'GBP',
|
19 |
-
decimalSeparator: '.',
|
20 |
-
minorUnit: 2,
|
21 |
-
prefix: '£',
|
22 |
-
suffix: '',
|
23 |
-
symbol: '£',
|
24 |
-
thousandSeparator: ',',
|
25 |
-
};
|
26 |
-
|
27 |
-
const values = {
|
28 |
-
currency_code: 'GBP',
|
29 |
-
currency_decimal_separator: '.',
|
30 |
-
currency_minor_unit: 2,
|
31 |
-
currency_prefix: '£',
|
32 |
-
currency_suffix: '',
|
33 |
-
currency_symbol: '£',
|
34 |
-
currency_thousand_separator: ',',
|
35 |
-
tax_lines: [],
|
36 |
-
length: 2,
|
37 |
-
total_discount: '0',
|
38 |
-
total_discount_tax: '0',
|
39 |
-
total_fees: '0',
|
40 |
-
total_fees_tax: '0',
|
41 |
-
total_items: '7100',
|
42 |
-
total_items_tax: '0',
|
43 |
-
total_price: '8500',
|
44 |
-
total_shipping: '0',
|
45 |
-
total_shipping_tax: '0',
|
46 |
-
total_tax: '0',
|
47 |
-
};
|
48 |
-
|
49 |
-
it( 'Does not show the "including %s of tax" line if tax is 0', () => {
|
50 |
-
const { container } = render(
|
51 |
-
<TotalsFooterItem currency={ currency } values={ values } />
|
52 |
-
);
|
53 |
-
expect( container ).toMatchSnapshot();
|
54 |
-
} );
|
55 |
-
|
56 |
-
it( 'Does not show the "including %s of tax" line if tax is disabled', () => {
|
57 |
-
allSettings.taxesEnabled = false;
|
58 |
-
/* This shouldn't ever happen if taxes are disabled, but this is to test whether the taxesEnabled setting works */
|
59 |
-
const valuesWithTax = {
|
60 |
-
...values,
|
61 |
-
total_tax: '100',
|
62 |
-
total_items_tax: '100',
|
63 |
-
};
|
64 |
-
const { container } = render(
|
65 |
-
<TotalsFooterItem currency={ currency } values={ valuesWithTax } />
|
66 |
-
);
|
67 |
-
expect( container ).toMatchSnapshot();
|
68 |
-
} );
|
69 |
-
|
70 |
-
it( 'Shows the "including %s of tax" line if tax is greater than 0', () => {
|
71 |
-
const valuesWithTax = {
|
72 |
-
...values,
|
73 |
-
total_tax: '100',
|
74 |
-
total_items_tax: '100',
|
75 |
-
};
|
76 |
-
const { container } = render(
|
77 |
-
<TotalsFooterItem currency={ currency } values={ valuesWithTax } />
|
78 |
-
);
|
79 |
-
expect( container ).toMatchSnapshot();
|
80 |
-
} );
|
81 |
-
} );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/base/components/cart-checkout/totals/shipping/index.tsx
CHANGED
@@ -3,13 +3,12 @@
|
|
3 |
*/
|
4 |
import classnames from 'classnames';
|
5 |
import { __ } from '@wordpress/i18n';
|
|
|
6 |
import { useState } from '@wordpress/element';
|
7 |
import { useStoreCart } from '@woocommerce/base-context/hooks';
|
8 |
import { TotalsItem } from '@woocommerce/blocks-checkout';
|
9 |
import type { Currency } from '@woocommerce/price-format';
|
10 |
import type { ReactElement } from 'react';
|
11 |
-
import { getSetting, EnteredAddress } from '@woocommerce/settings';
|
12 |
-
import { ShippingVia } from '@woocommerce/base-components/cart-checkout/totals/shipping/shipping-via';
|
13 |
|
14 |
/**
|
15 |
* Internal dependencies
|
@@ -48,7 +47,7 @@ interface ShippingAddressProps {
|
|
48 |
showCalculator: boolean;
|
49 |
isShippingCalculatorOpen: boolean;
|
50 |
setIsShippingCalculatorOpen: CalculatorButtonProps[ 'setIsShippingCalculatorOpen' ];
|
51 |
-
shippingAddress:
|
52 |
}
|
53 |
|
54 |
const ShippingAddress = ( {
|
@@ -134,10 +133,7 @@ const TotalsShipping = ( {
|
|
134 |
shippingRatesLoading,
|
135 |
} = useStoreCart();
|
136 |
|
137 |
-
const totalShippingValue =
|
138 |
-
'displayCartPricesIncludingTax',
|
139 |
-
false
|
140 |
-
)
|
141 |
? parseInt( values.total_shipping, 10 ) +
|
142 |
parseInt( values.total_shipping_tax, 10 )
|
143 |
: parseInt( values.total_shipping, 10 );
|
@@ -147,14 +143,6 @@ const TotalsShipping = ( {
|
|
147 |
setIsShippingCalculatorOpen,
|
148 |
};
|
149 |
|
150 |
-
const selectedShippingRates = shippingRates.flatMap(
|
151 |
-
( shippingPackage ) => {
|
152 |
-
return shippingPackage.shipping_rates
|
153 |
-
.filter( ( rate ) => rate.selected )
|
154 |
-
.flatMap( ( rate ) => rate.name );
|
155 |
-
}
|
156 |
-
);
|
157 |
-
|
158 |
return (
|
159 |
<div
|
160 |
className={ classnames(
|
@@ -177,18 +165,11 @@ const TotalsShipping = ( {
|
|
177 |
description={
|
178 |
<>
|
179 |
{ cartHasCalculatedShipping && (
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
/>
|
186 |
-
<ShippingAddress
|
187 |
-
shippingAddress={ shippingAddress }
|
188 |
-
showCalculator={ showCalculator }
|
189 |
-
{ ...calculatorButtonProps }
|
190 |
-
/>
|
191 |
-
</>
|
192 |
) }
|
193 |
</>
|
194 |
}
|
3 |
*/
|
4 |
import classnames from 'classnames';
|
5 |
import { __ } from '@wordpress/i18n';
|
6 |
+
import { DISPLAY_CART_PRICES_INCLUDING_TAX } from '@woocommerce/block-settings';
|
7 |
import { useState } from '@wordpress/element';
|
8 |
import { useStoreCart } from '@woocommerce/base-context/hooks';
|
9 |
import { TotalsItem } from '@woocommerce/blocks-checkout';
|
10 |
import type { Currency } from '@woocommerce/price-format';
|
11 |
import type { ReactElement } from 'react';
|
|
|
|
|
12 |
|
13 |
/**
|
14 |
* Internal dependencies
|
47 |
showCalculator: boolean;
|
48 |
isShippingCalculatorOpen: boolean;
|
49 |
setIsShippingCalculatorOpen: CalculatorButtonProps[ 'setIsShippingCalculatorOpen' ];
|
50 |
+
shippingAddress: Record< string, unknown >;
|
51 |
}
|
52 |
|
53 |
const ShippingAddress = ( {
|
133 |
shippingRatesLoading,
|
134 |
} = useStoreCart();
|
135 |
|
136 |
+
const totalShippingValue = DISPLAY_CART_PRICES_INCLUDING_TAX
|
|
|
|
|
|
|
137 |
? parseInt( values.total_shipping, 10 ) +
|
138 |
parseInt( values.total_shipping_tax, 10 )
|
139 |
: parseInt( values.total_shipping, 10 );
|
143 |
setIsShippingCalculatorOpen,
|
144 |
};
|
145 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
146 |
return (
|
147 |
<div
|
148 |
className={ classnames(
|
165 |
description={
|
166 |
<>
|
167 |
{ cartHasCalculatedShipping && (
|
168 |
+
<ShippingAddress
|
169 |
+
shippingAddress={ shippingAddress }
|
170 |
+
showCalculator={ showCalculator }
|
171 |
+
{ ...calculatorButtonProps }
|
172 |
+
/>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
173 |
) }
|
174 |
</>
|
175 |
}
|
assets/js/base/components/cart-checkout/totals/shipping/shipping-via.tsx
DELETED
@@ -1,17 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* External dependencies
|
3 |
-
*/
|
4 |
-
import { __ } from '@wordpress/i18n';
|
5 |
-
|
6 |
-
export const ShippingVia = ( {
|
7 |
-
selectedShippingRates,
|
8 |
-
}: {
|
9 |
-
selectedShippingRates: string[];
|
10 |
-
} ): JSX.Element => {
|
11 |
-
return (
|
12 |
-
<div className="wc-block-components-totals-item__description wc-block-components-totals-shipping__via">
|
13 |
-
{ __( 'via', 'woo-gutenberg-products-block' ) }{ ' ' }
|
14 |
-
{ selectedShippingRates.join( ', ' ) }
|
15 |
-
</div>
|
16 |
-
);
|
17 |
-
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/base/components/cart-checkout/totals/shipping/style.scss
CHANGED
@@ -7,10 +7,6 @@
|
|
7 |
border: 0;
|
8 |
}
|
9 |
|
10 |
-
.wc-block-components-totals-shipping__via {
|
11 |
-
margin-bottom: $gap;
|
12 |
-
}
|
13 |
-
|
14 |
.wc-block-components-totals-shipping__options {
|
15 |
.wc-block-components-radio-control__label,
|
16 |
.wc-block-components-radio-control__description,
|
7 |
border: 0;
|
8 |
}
|
9 |
|
|
|
|
|
|
|
|
|
10 |
.wc-block-components-totals-shipping__options {
|
11 |
.wc-block-components-radio-control__label,
|
12 |
.wc-block-components-radio-control__description,
|
assets/js/base/components/chip/stories/index.js
DELETED
@@ -1,42 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* External dependencies
|
3 |
-
*/
|
4 |
-
import { text, select, boolean } from '@storybook/addon-knobs';
|
5 |
-
|
6 |
-
/**
|
7 |
-
* Internal dependencies
|
8 |
-
*/
|
9 |
-
import * as components from '../';
|
10 |
-
|
11 |
-
export default {
|
12 |
-
title: 'WooCommerce Blocks/@base-components/Chip',
|
13 |
-
component: Chip,
|
14 |
-
};
|
15 |
-
|
16 |
-
const radii = [ 'none', 'small', 'medium', 'large' ];
|
17 |
-
|
18 |
-
export const Chip = () => (
|
19 |
-
<components.Chip
|
20 |
-
text={ text( 'Text', 'example' ) }
|
21 |
-
radius={ select( 'Radius', radii ) }
|
22 |
-
screenReaderText={ text(
|
23 |
-
'Screen reader text',
|
24 |
-
'Example screen reader text'
|
25 |
-
) }
|
26 |
-
element={ select( 'Element', [ 'li', 'div', 'span' ], 'li' ) }
|
27 |
-
/>
|
28 |
-
);
|
29 |
-
|
30 |
-
export const RemovableChip = () => (
|
31 |
-
<components.RemovableChip
|
32 |
-
text={ text( 'Text', 'example' ) }
|
33 |
-
radius={ select( 'Radius', radii ) }
|
34 |
-
screenReaderText={ text(
|
35 |
-
'Screen reader text',
|
36 |
-
'Example screen reader text'
|
37 |
-
) }
|
38 |
-
disabled={ boolean( 'Disabled', false ) }
|
39 |
-
removeOnAnyClick={ boolean( 'Remove on any click', false ) }
|
40 |
-
element={ select( 'Element', [ 'li', 'div', 'span' ], 'li' ) }
|
41 |
-
/>
|
42 |
-
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/base/components/country-input/CountryInputProps.ts
DELETED
@@ -1,15 +0,0 @@
|
|
1 |
-
export interface CountryInputProps {
|
2 |
-
className?: string;
|
3 |
-
label: string;
|
4 |
-
id: string;
|
5 |
-
autoComplete?: string;
|
6 |
-
value: string;
|
7 |
-
onChange: ( value: string ) => void;
|
8 |
-
required?: boolean;
|
9 |
-
errorMessage?: string;
|
10 |
-
errorId: null | 'shipping-missing-country';
|
11 |
-
}
|
12 |
-
|
13 |
-
export type CountryInputWithCountriesProps = CountryInputProps & {
|
14 |
-
countries: Record< string, string >;
|
15 |
-
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/base/components/country-input/billing-country-input.js
ADDED
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* External dependencies
|
3 |
+
*/
|
4 |
+
import PropTypes from 'prop-types';
|
5 |
+
import { ALLOWED_COUNTRIES } from '@woocommerce/block-settings';
|
6 |
+
|
7 |
+
/**
|
8 |
+
* Internal dependencies
|
9 |
+
*/
|
10 |
+
import CountryInput from './country-input.js';
|
11 |
+
|
12 |
+
const BillingCountryInput = ( props ) => {
|
13 |
+
return <CountryInput countries={ ALLOWED_COUNTRIES } { ...props } />;
|
14 |
+
};
|
15 |
+
|
16 |
+
BillingCountryInput.propTypes = {
|
17 |
+
onChange: PropTypes.func.isRequired,
|
18 |
+
className: PropTypes.string,
|
19 |
+
label: PropTypes.string,
|
20 |
+
value: PropTypes.string,
|
21 |
+
};
|
22 |
+
|
23 |
+
export default BillingCountryInput;
|
assets/js/base/components/country-input/billing-country-input.tsx
DELETED
@@ -1,16 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* External dependencies
|
3 |
-
*/
|
4 |
-
import { ALLOWED_COUNTRIES } from '@woocommerce/block-settings';
|
5 |
-
|
6 |
-
/**
|
7 |
-
* Internal dependencies
|
8 |
-
*/
|
9 |
-
import CountryInput from './country-input';
|
10 |
-
import type { CountryInputProps } from './CountryInputProps';
|
11 |
-
|
12 |
-
const BillingCountryInput = ( props: CountryInputProps ): JSX.Element => {
|
13 |
-
return <CountryInput countries={ ALLOWED_COUNTRIES } { ...props } />;
|
14 |
-
};
|
15 |
-
|
16 |
-
export default BillingCountryInput;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/base/components/country-input/{country-input.tsx → country-input.js}
RENAMED
@@ -3,6 +3,7 @@
|
|
3 |
*/
|
4 |
import { useMemo } from '@wordpress/element';
|
5 |
import { __ } from '@wordpress/i18n';
|
|
|
6 |
import { decodeEntities } from '@wordpress/html-entities';
|
7 |
import classnames from 'classnames';
|
8 |
|
@@ -11,7 +12,6 @@ import classnames from 'classnames';
|
|
11 |
*/
|
12 |
import { ValidatedSelect } from '../select';
|
13 |
import './style.scss';
|
14 |
-
import type { CountryInputWithCountriesProps } from './CountryInputProps';
|
15 |
|
16 |
const CountryInput = ( {
|
17 |
className,
|
@@ -27,7 +27,7 @@ const CountryInput = ( {
|
|
27 |
'Please select a country.',
|
28 |
'woo-gutenberg-products-block'
|
29 |
),
|
30 |
-
}
|
31 |
const options = useMemo(
|
32 |
() =>
|
33 |
Object.keys( countries ).map( ( key ) => ( {
|
@@ -81,4 +81,16 @@ const CountryInput = ( {
|
|
81 |
);
|
82 |
};
|
83 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
84 |
export default CountryInput;
|
3 |
*/
|
4 |
import { useMemo } from '@wordpress/element';
|
5 |
import { __ } from '@wordpress/i18n';
|
6 |
+
import PropTypes from 'prop-types';
|
7 |
import { decodeEntities } from '@wordpress/html-entities';
|
8 |
import classnames from 'classnames';
|
9 |
|
12 |
*/
|
13 |
import { ValidatedSelect } from '../select';
|
14 |
import './style.scss';
|
|
|
15 |
|
16 |
const CountryInput = ( {
|
17 |
className,
|
27 |
'Please select a country.',
|
28 |
'woo-gutenberg-products-block'
|
29 |
),
|
30 |
+
} ) => {
|
31 |
const options = useMemo(
|
32 |
() =>
|
33 |
Object.keys( countries ).map( ( key ) => ( {
|
81 |
);
|
82 |
};
|
83 |
|
84 |
+
CountryInput.propTypes = {
|
85 |
+
countries: PropTypes.objectOf( PropTypes.string ).isRequired,
|
86 |
+
onChange: PropTypes.func.isRequired,
|
87 |
+
className: PropTypes.string,
|
88 |
+
id: PropTypes.string,
|
89 |
+
label: PropTypes.string,
|
90 |
+
value: PropTypes.string,
|
91 |
+
autoComplete: PropTypes.string,
|
92 |
+
errorId: PropTypes.string,
|
93 |
+
errorMessage: PropTypes.string,
|
94 |
+
};
|
95 |
+
|
96 |
export default CountryInput;
|
assets/js/base/components/country-input/{index.ts → index.js}
RENAMED
File without changes
|
assets/js/base/components/country-input/shipping-country-input.js
ADDED
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* External dependencies
|
3 |
+
*/
|
4 |
+
import PropTypes from 'prop-types';
|
5 |
+
import { SHIPPING_COUNTRIES } from '@woocommerce/block-settings';
|
6 |
+
|
7 |
+
/**
|
8 |
+
* Internal dependencies
|
9 |
+
*/
|
10 |
+
import CountryInput from './country-input.js';
|
11 |
+
|
12 |
+
const ShippingCountryInput = ( props ) => {
|
13 |
+
return <CountryInput countries={ SHIPPING_COUNTRIES } { ...props } />;
|
14 |
+
};
|
15 |
+
|
16 |
+
ShippingCountryInput.propTypes = {
|
17 |
+
onChange: PropTypes.func.isRequired,
|
18 |
+
className: PropTypes.string,
|
19 |
+
label: PropTypes.string,
|
20 |
+
value: PropTypes.string,
|
21 |
+
};
|
22 |
+
|
23 |
+
export default ShippingCountryInput;
|
assets/js/base/components/country-input/shipping-country-input.tsx
DELETED
@@ -1,16 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* External dependencies
|
3 |
-
*/
|
4 |
-
import { SHIPPING_COUNTRIES } from '@woocommerce/block-settings';
|
5 |
-
|
6 |
-
/**
|
7 |
-
* Internal dependencies
|
8 |
-
*/
|
9 |
-
import CountryInput from './country-input';
|
10 |
-
import { CountryInputProps } from './CountryInputProps';
|
11 |
-
|
12 |
-
const ShippingCountryInput = ( props: CountryInputProps ): JSX.Element => {
|
13 |
-
return <CountryInput countries={ SHIPPING_COUNTRIES } { ...props } />;
|
14 |
-
};
|
15 |
-
|
16 |
-
export default ShippingCountryInput;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/base/components/label/index.tsx
CHANGED
@@ -3,13 +3,13 @@
|
|
3 |
*/
|
4 |
import { Fragment } from '@wordpress/element';
|
5 |
import classNames from 'classnames';
|
6 |
-
import type { ReactElement,
|
7 |
|
8 |
-
interface LabelProps
|
9 |
label?: string;
|
10 |
screenReaderLabel?: string;
|
11 |
wrapperElement?: string;
|
12 |
-
wrapperProps?:
|
13 |
}
|
14 |
|
15 |
/**
|
3 |
*/
|
4 |
import { Fragment } from '@wordpress/element';
|
5 |
import classNames from 'classnames';
|
6 |
+
import type { ReactElement, HTMLAttributes } from 'react';
|
7 |
|
8 |
+
interface LabelProps {
|
9 |
label?: string;
|
10 |
screenReaderLabel?: string;
|
11 |
wrapperElement?: string;
|
12 |
+
wrapperProps?: HTMLAttributes< HTMLElement >;
|
13 |
}
|
14 |
|
15 |
/**
|
assets/js/base/components/loading-mask/index.js
CHANGED
@@ -4,14 +4,13 @@
|
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
import PropTypes from 'prop-types';
|
6 |
import classNames from 'classnames';
|
|
|
7 |
|
8 |
/**
|
9 |
* Internal dependencies
|
10 |
*/
|
11 |
import './style.scss';
|
12 |
-
import Spinner from '../spinner';
|
13 |
|
14 |
-
// @todo Find a way to block buttons/form components when LoadingMask isLoading
|
15 |
const LoadingMask = ( {
|
16 |
children,
|
17 |
className,
|
@@ -19,27 +18,29 @@ const LoadingMask = ( {
|
|
19 |
showSpinner = false,
|
20 |
isLoading = true,
|
21 |
} ) => {
|
|
|
|
|
|
|
|
|
|
|
22 |
return (
|
23 |
<div
|
24 |
-
className={ classNames(
|
25 |
-
|
26 |
-
|
|
|
27 |
>
|
28 |
-
{
|
29 |
<div
|
30 |
-
className=
|
31 |
-
|
32 |
-
} ) }
|
33 |
-
aria-hidden={ isLoading }
|
34 |
>
|
35 |
{ children }
|
36 |
</div>
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
</span>
|
42 |
-
) }
|
43 |
</div>
|
44 |
);
|
45 |
};
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
import PropTypes from 'prop-types';
|
6 |
import classNames from 'classnames';
|
7 |
+
import { Spinner } from 'wordpress-components';
|
8 |
|
9 |
/**
|
10 |
* Internal dependencies
|
11 |
*/
|
12 |
import './style.scss';
|
|
|
13 |
|
|
|
14 |
const LoadingMask = ( {
|
15 |
children,
|
16 |
className,
|
18 |
showSpinner = false,
|
19 |
isLoading = true,
|
20 |
} ) => {
|
21 |
+
// If nothing is loading, just pass through the children.
|
22 |
+
if ( ! isLoading ) {
|
23 |
+
return children;
|
24 |
+
}
|
25 |
+
|
26 |
return (
|
27 |
<div
|
28 |
+
className={ classNames(
|
29 |
+
className,
|
30 |
+
'wc-block-components-loading-mask'
|
31 |
+
) }
|
32 |
>
|
33 |
+
{ showSpinner && <Spinner /> }
|
34 |
<div
|
35 |
+
className="wc-block-components-loading-mask__children"
|
36 |
+
aria-hidden={ true }
|
|
|
|
|
37 |
>
|
38 |
{ children }
|
39 |
</div>
|
40 |
+
<span className="screen-reader-text">
|
41 |
+
{ screenReaderLabel ||
|
42 |
+
__( 'Loading…', 'woo-gutenberg-products-block' ) }
|
43 |
+
</span>
|
|
|
|
|
44 |
</div>
|
45 |
);
|
46 |
};
|
assets/js/base/components/loading-mask/style.scss
CHANGED
@@ -1,7 +1,6 @@
|
|
1 |
.wc-block-components-loading-mask {
|
2 |
position: relative;
|
3 |
min-height: 18px + $gap;
|
4 |
-
pointer-events: none;
|
5 |
|
6 |
.components-spinner {
|
7 |
position: absolute;
|
@@ -10,8 +9,8 @@
|
|
10 |
left: 50%;
|
11 |
transform: translate(-50%, -50%);
|
12 |
}
|
|
|
13 |
|
14 |
-
|
15 |
-
|
16 |
-
}
|
17 |
}
|
1 |
.wc-block-components-loading-mask {
|
2 |
position: relative;
|
3 |
min-height: 18px + $gap;
|
|
|
4 |
|
5 |
.components-spinner {
|
6 |
position: absolute;
|
9 |
left: 50%;
|
10 |
transform: translate(-50%, -50%);
|
11 |
}
|
12 |
+
}
|
13 |
|
14 |
+
.wc-block-components-loading-mask__children {
|
15 |
+
opacity: 0.5;
|
|
|
16 |
}
|
assets/js/base/components/price-slider/index.js
CHANGED
@@ -12,7 +12,6 @@ import {
|
|
12 |
import PropTypes from 'prop-types';
|
13 |
import classnames from 'classnames';
|
14 |
import FormattedMonetaryAmount from '@woocommerce/base-components/formatted-monetary-amount';
|
15 |
-
import { isObject } from '@woocommerce/types';
|
16 |
|
17 |
/**
|
18 |
* Internal dependencies
|
@@ -242,13 +241,10 @@ const PriceSlider = ( {
|
|
242 |
! hasValidConstraints && 'is-disabled'
|
243 |
);
|
244 |
|
245 |
-
const activeElement = isObject( minRange.current )
|
246 |
-
? minRange.current.ownerDocument.activeElement
|
247 |
-
: undefined;
|
248 |
const minRangeStep =
|
249 |
-
|
250 |
const maxRangeStep =
|
251 |
-
|
252 |
|
253 |
return (
|
254 |
<div className={ classes }>
|
12 |
import PropTypes from 'prop-types';
|
13 |
import classnames from 'classnames';
|
14 |
import FormattedMonetaryAmount from '@woocommerce/base-components/formatted-monetary-amount';
|
|
|
15 |
|
16 |
/**
|
17 |
* Internal dependencies
|
241 |
! hasValidConstraints && 'is-disabled'
|
242 |
);
|
243 |
|
|
|
|
|
|
|
244 |
const minRangeStep =
|
245 |
+
minRange && document.activeElement === minRange.current ? stepValue : 1;
|
246 |
const maxRangeStep =
|
247 |
+
maxRange && document.activeElement === maxRange.current ? stepValue : 1;
|
248 |
|
249 |
return (
|
250 |
<div className={ classes }>
|
assets/js/base/components/product-list/container.js
CHANGED
@@ -9,10 +9,7 @@ import PropTypes from 'prop-types';
|
|
9 |
*/
|
10 |
import ProductList from './product-list';
|
11 |
|
12 |
-
const ProductListContainer = ( {
|
13 |
-
attributes,
|
14 |
-
hideOutOfStockItems = false,
|
15 |
-
} ) => {
|
16 |
const [ currentPage, setPage ] = useState( 1 );
|
17 |
const [ currentSort, setSort ] = useState( attributes.orderby );
|
18 |
useEffect( () => {
|
@@ -31,7 +28,6 @@ const ProductListContainer = ( {
|
|
31 |
return (
|
32 |
<ProductList
|
33 |
attributes={ attributes }
|
34 |
-
hideOutOfStockItems={ hideOutOfStockItems }
|
35 |
currentPage={ currentPage }
|
36 |
onPageChange={ onPageChange }
|
37 |
onSortChange={ onSortChange }
|
@@ -42,7 +38,6 @@ const ProductListContainer = ( {
|
|
42 |
|
43 |
ProductListContainer.propTypes = {
|
44 |
attributes: PropTypes.object.isRequired,
|
45 |
-
hideOutOfStockItems: PropTypes.bool,
|
46 |
};
|
47 |
|
48 |
export default ProductListContainer;
|
9 |
*/
|
10 |
import ProductList from './product-list';
|
11 |
|
12 |
+
const ProductListContainer = ( { attributes } ) => {
|
|
|
|
|
|
|
13 |
const [ currentPage, setPage ] = useState( 1 );
|
14 |
const [ currentSort, setSort ] = useState( attributes.orderby );
|
15 |
useEffect( () => {
|
28 |
return (
|
29 |
<ProductList
|
30 |
attributes={ attributes }
|
|
|
31 |
currentPage={ currentPage }
|
32 |
onPageChange={ onPageChange }
|
33 |
onSortChange={ onSortChange }
|
38 |
|
39 |
ProductListContainer.propTypes = {
|
40 |
attributes: PropTypes.object.isRequired,
|
|
|
41 |
};
|
42 |
|
43 |
export default ProductListContainer;
|
assets/js/base/components/product-list/product-list.js
CHANGED
@@ -17,6 +17,7 @@ import {
|
|
17 |
import withScrollToTop from '@woocommerce/base-hocs/with-scroll-to-top';
|
18 |
import { useInnerBlockLayoutContext } from '@woocommerce/shared-context';
|
19 |
import { speak } from '@wordpress/a11y';
|
|
|
20 |
|
21 |
/**
|
22 |
* Internal dependencies
|
@@ -27,12 +28,7 @@ import ProductSortSelect from './product-sort-select';
|
|
27 |
import ProductListItem from './product-list-item';
|
28 |
import './style.scss';
|
29 |
|
30 |
-
const generateQuery = ( {
|
31 |
-
sortValue,
|
32 |
-
currentPage,
|
33 |
-
attributes,
|
34 |
-
hideOutOfStockItems,
|
35 |
-
} ) => {
|
36 |
const { columns, rows } = attributes;
|
37 |
const getSortArgs = ( orderName ) => {
|
38 |
switch ( orderName ) {
|
@@ -57,6 +53,8 @@ const generateQuery = ( {
|
|
57 |
}
|
58 |
};
|
59 |
|
|
|
|
|
60 |
return {
|
61 |
...getSortArgs( sortValue ),
|
62 |
catalog_visibility: 'catalog',
|
@@ -118,14 +116,12 @@ const ProductList = ( {
|
|
118 |
onSortChange,
|
119 |
sortValue,
|
120 |
scrollToTop,
|
121 |
-
hideOutOfStockItems = false,
|
122 |
} ) => {
|
123 |
const [ queryState ] = useSynchronizedQueryState(
|
124 |
generateQuery( {
|
125 |
attributes,
|
126 |
sortValue,
|
127 |
currentPage,
|
128 |
-
hideOutOfStockItems,
|
129 |
} )
|
130 |
);
|
131 |
const { products, totalProducts, productsLoading } = useStoreProducts(
|
@@ -254,7 +250,6 @@ const ProductList = ( {
|
|
254 |
|
255 |
ProductList.propTypes = {
|
256 |
attributes: PropTypes.object.isRequired,
|
257 |
-
hideOutOfStockItems: PropTypes.bool,
|
258 |
// From withScrollToTop.
|
259 |
scrollToTop: PropTypes.func,
|
260 |
};
|
17 |
import withScrollToTop from '@woocommerce/base-hocs/with-scroll-to-top';
|
18 |
import { useInnerBlockLayoutContext } from '@woocommerce/shared-context';
|
19 |
import { speak } from '@wordpress/a11y';
|
20 |
+
import { getSetting } from '@woocommerce/settings';
|
21 |
|
22 |
/**
|
23 |
* Internal dependencies
|
28 |
import ProductListItem from './product-list-item';
|
29 |
import './style.scss';
|
30 |
|
31 |
+
const generateQuery = ( { sortValue, currentPage, attributes } ) => {
|
|
|
|
|
|
|
|
|
|
|
32 |
const { columns, rows } = attributes;
|
33 |
const getSortArgs = ( orderName ) => {
|
34 |
switch ( orderName ) {
|
53 |
}
|
54 |
};
|
55 |
|
56 |
+
const hideOutOfStockItems = getSetting( 'hideOutOfStockItems', false );
|
57 |
+
|
58 |
return {
|
59 |
...getSortArgs( sortValue ),
|
60 |
catalog_visibility: 'catalog',
|
116 |
onSortChange,
|
117 |
sortValue,
|
118 |
scrollToTop,
|
|
|
119 |
} ) => {
|
120 |
const [ queryState ] = useSynchronizedQueryState(
|
121 |
generateQuery( {
|
122 |
attributes,
|
123 |
sortValue,
|
124 |
currentPage,
|
|
|
125 |
} )
|
126 |
);
|
127 |
const { products, totalProducts, productsLoading } = useStoreProducts(
|
250 |
|
251 |
ProductList.propTypes = {
|
252 |
attributes: PropTypes.object.isRequired,
|
|
|
253 |
// From withScrollToTop.
|
254 |
scrollToTop: PropTypes.func,
|
255 |
};
|
assets/js/base/components/product-list/style.scss
CHANGED
@@ -55,11 +55,6 @@
|
|
55 |
list-style: none;
|
56 |
}
|
57 |
|
58 |
-
// Increased specificity necessary as Gutenberg's generic reset overrides box sizing
|
59 |
-
.wc-block-grid__product.wc-block-grid__product {
|
60 |
-
box-sizing: border-box;
|
61 |
-
}
|
62 |
-
|
63 |
.theme-twentytwenty .wc-block-grid,
|
64 |
.wc-block-grid {
|
65 |
&.has-aligned-buttons {
|
55 |
list-style: none;
|
56 |
}
|
57 |
|
|
|
|
|
|
|
|
|
|
|
58 |
.theme-twentytwenty .wc-block-grid,
|
59 |
.wc-block-grid {
|
60 |
&.has-aligned-buttons {
|
assets/js/base/components/product-name/index.js
ADDED
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* External dependencies
|
3 |
+
*/
|
4 |
+
import PropTypes from 'prop-types';
|
5 |
+
import { decodeEntities } from '@wordpress/html-entities';
|
6 |
+
import classnames from 'classnames';
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Internal dependencies
|
10 |
+
*/
|
11 |
+
import './style.scss';
|
12 |
+
|
13 |
+
const ProductName = ( {
|
14 |
+
className = '',
|
15 |
+
disabled = false,
|
16 |
+
name,
|
17 |
+
permalink = '',
|
18 |
+
...props
|
19 |
+
} ) => {
|
20 |
+
const classes = classnames( 'wc-block-components-product-name', className );
|
21 |
+
return disabled ? (
|
22 |
+
<span className={ classes } { ...props }>
|
23 |
+
{ decodeEntities( name ) }
|
24 |
+
</span>
|
25 |
+
) : (
|
26 |
+
<a className={ classes } href={ permalink } { ...props }>
|
27 |
+
{ decodeEntities( name ) }
|
28 |
+
</a>
|
29 |
+
);
|
30 |
+
};
|
31 |
+
|
32 |
+
ProductName.propTypes = {
|
33 |
+
className: PropTypes.string,
|
34 |
+
disabled: PropTypes.bool,
|
35 |
+
name: PropTypes.string.isRequired,
|
36 |
+
permalink: PropTypes.string,
|
37 |
+
};
|
38 |
+
|
39 |
+
export default ProductName;
|
assets/js/base/components/product-name/index.tsx
DELETED
@@ -1,48 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* External dependencies
|
3 |
-
*/
|
4 |
-
import { decodeEntities } from '@wordpress/html-entities';
|
5 |
-
import classnames from 'classnames';
|
6 |
-
|
7 |
-
/**
|
8 |
-
* Internal dependencies
|
9 |
-
*/
|
10 |
-
import './style.scss';
|
11 |
-
|
12 |
-
/**
|
13 |
-
* Render the Product name.
|
14 |
-
*
|
15 |
-
* The store API runs titles through `wp_kses_post()` which removes dangerous HTML tags, so using it inside `dangerouslySetInnerHTML` is considered safe.
|
16 |
-
*/
|
17 |
-
export default ( {
|
18 |
-
className = '',
|
19 |
-
disabled = false,
|
20 |
-
name,
|
21 |
-
permalink = '',
|
22 |
-
...props
|
23 |
-
}: {
|
24 |
-
className: string;
|
25 |
-
disabled: boolean;
|
26 |
-
name: string;
|
27 |
-
permalink: string;
|
28 |
-
} ): JSX.Element => {
|
29 |
-
const classes = classnames( 'wc-block-components-product-name', className );
|
30 |
-
return disabled ? (
|
31 |
-
<span
|
32 |
-
className={ classes }
|
33 |
-
{ ...props }
|
34 |
-
dangerouslySetInnerHTML={ {
|
35 |
-
__html: decodeEntities( name ),
|
36 |
-
} }
|
37 |
-
/>
|
38 |
-
) : (
|
39 |
-
<a
|
40 |
-
className={ classes }
|
41 |
-
href={ permalink }
|
42 |
-
{ ...props }
|
43 |
-
dangerouslySetInnerHTML={ {
|
44 |
-
__html: decodeEntities( name ),
|
45 |
-
} }
|
46 |
-
/>
|
47 |
-
);
|
48 |
-
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/base/components/product-name/test/__snapshots__/index.js.snap
CHANGED
@@ -3,47 +3,35 @@
|
|
3 |
exports[`ProductName should merge classes and props 1`] = `
|
4 |
<a
|
5 |
className="wc-block-components-product-name lorem-ipsum"
|
6 |
-
dangerouslySetInnerHTML={
|
7 |
-
Object {
|
8 |
-
"__html": "Test product",
|
9 |
-
}
|
10 |
-
}
|
11 |
href="/"
|
12 |
rel="nofollow"
|
13 |
-
|
|
|
|
|
14 |
`;
|
15 |
|
16 |
exports[`ProductName should not render a link if disabled is true 1`] = `
|
17 |
<span
|
18 |
className="wc-block-components-product-name"
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
}
|
23 |
-
}
|
24 |
-
/>
|
25 |
`;
|
26 |
|
27 |
exports[`ProductName should render a link if disabled is false 1`] = `
|
28 |
<a
|
29 |
className="wc-block-components-product-name"
|
30 |
-
dangerouslySetInnerHTML={
|
31 |
-
Object {
|
32 |
-
"__html": "Test product",
|
33 |
-
}
|
34 |
-
}
|
35 |
href="/"
|
36 |
-
|
|
|
|
|
37 |
`;
|
38 |
|
39 |
exports[`ProductName should render a link if disabled is not defined 1`] = `
|
40 |
<a
|
41 |
className="wc-block-components-product-name"
|
42 |
-
dangerouslySetInnerHTML={
|
43 |
-
Object {
|
44 |
-
"__html": "Test product",
|
45 |
-
}
|
46 |
-
}
|
47 |
href="/"
|
48 |
-
|
|
|
|
|
49 |
`;
|
3 |
exports[`ProductName should merge classes and props 1`] = `
|
4 |
<a
|
5 |
className="wc-block-components-product-name lorem-ipsum"
|
|
|
|
|
|
|
|
|
|
|
6 |
href="/"
|
7 |
rel="nofollow"
|
8 |
+
>
|
9 |
+
Test product
|
10 |
+
</a>
|
11 |
`;
|
12 |
|
13 |
exports[`ProductName should not render a link if disabled is true 1`] = `
|
14 |
<span
|
15 |
className="wc-block-components-product-name"
|
16 |
+
>
|
17 |
+
Test product
|
18 |
+
</span>
|
|
|
|
|
|
|
19 |
`;
|
20 |
|
21 |
exports[`ProductName should render a link if disabled is false 1`] = `
|
22 |
<a
|
23 |
className="wc-block-components-product-name"
|
|
|
|
|
|
|
|
|
|
|
24 |
href="/"
|
25 |
+
>
|
26 |
+
Test product
|
27 |
+
</a>
|
28 |
`;
|
29 |
|
30 |
exports[`ProductName should render a link if disabled is not defined 1`] = `
|
31 |
<a
|
32 |
className="wc-block-components-product-name"
|
|
|
|
|
|
|
|
|
|
|
33 |
href="/"
|
34 |
+
>
|
35 |
+
Test product
|
36 |
+
</a>
|
37 |
`;
|
assets/js/base/components/product-price/index.js
CHANGED
@@ -1,12 +1,11 @@
|
|
1 |
/**
|
2 |
* External dependencies
|
3 |
*/
|
4 |
-
import { __
|
5 |
import FormattedMonetaryAmount from '@woocommerce/base-components/formatted-monetary-amount';
|
6 |
import classNames from 'classnames';
|
7 |
import PropTypes from 'prop-types';
|
8 |
import { createInterpolateElement } from 'wordpress-element';
|
9 |
-
import { formatPrice } from '@woocommerce/price-format';
|
10 |
|
11 |
/**
|
12 |
* Internal dependencies
|
@@ -22,38 +21,25 @@ const PriceRange = ( {
|
|
22 |
} ) => {
|
23 |
return (
|
24 |
<>
|
25 |
-
<
|
26 |
-
{
|
27 |
-
|
28 |
-
|
29 |
-
'Price between %1$s and %2$s',
|
30 |
-
'woo-gutenberg-products-block'
|
31 |
-
),
|
32 |
-
formatPrice( minPrice ),
|
33 |
-
formatPrice( maxPrice )
|
34 |
) }
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
'wc-block-components-product-price__value',
|
50 |
-
priceClassName
|
51 |
-
) }
|
52 |
-
currency={ currency }
|
53 |
-
value={ maxPrice }
|
54 |
-
style={ priceStyle }
|
55 |
-
/>
|
56 |
-
</span>
|
57 |
</>
|
58 |
);
|
59 |
};
|
1 |
/**
|
2 |
* External dependencies
|
3 |
*/
|
4 |
+
import { __ } from '@wordpress/i18n';
|
5 |
import FormattedMonetaryAmount from '@woocommerce/base-components/formatted-monetary-amount';
|
6 |
import classNames from 'classnames';
|
7 |
import PropTypes from 'prop-types';
|
8 |
import { createInterpolateElement } from 'wordpress-element';
|
|
|
9 |
|
10 |
/**
|
11 |
* Internal dependencies
|
21 |
} ) => {
|
22 |
return (
|
23 |
<>
|
24 |
+
<FormattedMonetaryAmount
|
25 |
+
className={ classNames(
|
26 |
+
'wc-block-components-product-price__value',
|
27 |
+
priceClassName
|
|
|
|
|
|
|
|
|
|
|
28 |
) }
|
29 |
+
currency={ currency }
|
30 |
+
value={ minPrice }
|
31 |
+
style={ priceStyle }
|
32 |
+
/>
|
33 |
+
—
|
34 |
+
<FormattedMonetaryAmount
|
35 |
+
className={ classNames(
|
36 |
+
'wc-block-components-product-price__value',
|
37 |
+
priceClassName
|
38 |
+
) }
|
39 |
+
currency={ currency }
|
40 |
+
value={ maxPrice }
|
41 |
+
style={ priceStyle }
|
42 |
+
/>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
43 |
</>
|
44 |
);
|
45 |
};
|
assets/js/base/components/quantity-selector/{index.tsx → index.js}
RENAMED
@@ -3,37 +3,25 @@
|
|
3 |
*/
|
4 |
import { __, sprintf } from '@wordpress/i18n';
|
5 |
import { speak } from '@wordpress/a11y';
|
|
|
6 |
import classNames from 'classnames';
|
7 |
import { useCallback } from '@wordpress/element';
|
8 |
import { DOWN, UP } from '@wordpress/keycodes';
|
9 |
-
import { isNumber } from '@woocommerce/types';
|
10 |
|
11 |
/**
|
12 |
* Internal dependencies
|
13 |
*/
|
14 |
import './style.scss';
|
15 |
|
16 |
-
interface QuantitySelectorProps {
|
17 |
-
className?: string;
|
18 |
-
quantity?: number;
|
19 |
-
minimum?: number;
|
20 |
-
maximum: number;
|
21 |
-
onChange: ( newQuantity: number ) => void;
|
22 |
-
itemName?: string;
|
23 |
-
disabled: boolean;
|
24 |
-
}
|
25 |
-
|
26 |
const QuantitySelector = ( {
|
27 |
className,
|
28 |
quantity = 1,
|
29 |
minimum = 1,
|
30 |
maximum,
|
31 |
-
onChange = () =>
|
32 |
-
/* Do nothing. */
|
33 |
-
},
|
34 |
itemName = '',
|
35 |
disabled,
|
36 |
-
}
|
37 |
const classes = classNames(
|
38 |
'wc-block-components-quantity-selector',
|
39 |
className
|
@@ -84,7 +72,7 @@ const QuantitySelector = ( {
|
|
84 |
onKeyDown={ quantityInputOnKeyDown }
|
85 |
onChange={ ( event ) => {
|
86 |
let value =
|
87 |
-
|
88 |
? 0
|
89 |
: parseInt( event.target.value, 10 );
|
90 |
if ( hasMaximum ) {
|
@@ -156,4 +144,14 @@ const QuantitySelector = ( {
|
|
156 |
);
|
157 |
};
|
158 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
159 |
export default QuantitySelector;
|
3 |
*/
|
4 |
import { __, sprintf } from '@wordpress/i18n';
|
5 |
import { speak } from '@wordpress/a11y';
|
6 |
+
import PropTypes from 'prop-types';
|
7 |
import classNames from 'classnames';
|
8 |
import { useCallback } from '@wordpress/element';
|
9 |
import { DOWN, UP } from '@wordpress/keycodes';
|
|
|
10 |
|
11 |
/**
|
12 |
* Internal dependencies
|
13 |
*/
|
14 |
import './style.scss';
|
15 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16 |
const QuantitySelector = ( {
|
17 |
className,
|
18 |
quantity = 1,
|
19 |
minimum = 1,
|
20 |
maximum,
|
21 |
+
onChange = () => null,
|
|
|
|
|
22 |
itemName = '',
|
23 |
disabled,
|
24 |
+
} ) => {
|
25 |
const classes = classNames(
|
26 |
'wc-block-components-quantity-selector',
|
27 |
className
|
72 |
onKeyDown={ quantityInputOnKeyDown }
|
73 |
onChange={ ( event ) => {
|
74 |
let value =
|
75 |
+
isNaN( event.target.value ) || ! event.target.value
|
76 |
? 0
|
77 |
: parseInt( event.target.value, 10 );
|
78 |
if ( hasMaximum ) {
|
144 |
);
|
145 |
};
|
146 |
|
147 |
+
QuantitySelector.propTypes = {
|
148 |
+
className: PropTypes.string,
|
149 |
+
quantity: PropTypes.number,
|
150 |
+
minimum: PropTypes.number,
|
151 |
+
maximum: PropTypes.number,
|
152 |
+
onChange: PropTypes.func,
|
153 |
+
itemName: PropTypes.string,
|
154 |
+
disabled: PropTypes.bool,
|
155 |
+
};
|
156 |
+
|
157 |
export default QuantitySelector;
|
assets/js/base/components/reviews/review-list/index.js
CHANGED
@@ -2,7 +2,10 @@
|
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import PropTypes from 'prop-types';
|
5 |
-
import {
|
|
|
|
|
|
|
6 |
|
7 |
/**
|
8 |
* Internal dependencies
|
@@ -11,13 +14,11 @@ import ReviewListItem from '../review-list-item';
|
|
11 |
import './style.scss';
|
12 |
|
13 |
const ReviewList = ( { attributes, reviews } ) => {
|
14 |
-
const showAvatars = getSetting( 'showAvatars', true );
|
15 |
-
const reviewRatingsEnabled = getSetting( 'reviewRatingsEnabled', true );
|
16 |
const showReviewImage =
|
17 |
-
(
|
18 |
attributes.showReviewImage;
|
19 |
const showReviewRating =
|
20 |
-
|
21 |
const attrs = {
|
22 |
...attributes,
|
23 |
showReviewImage,
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import PropTypes from 'prop-types';
|
5 |
+
import {
|
6 |
+
REVIEW_RATINGS_ENABLED,
|
7 |
+
SHOW_AVATARS,
|
8 |
+
} from '@woocommerce/block-settings';
|
9 |
|
10 |
/**
|
11 |
* Internal dependencies
|
14 |
import './style.scss';
|
15 |
|
16 |
const ReviewList = ( { attributes, reviews } ) => {
|
|
|
|
|
17 |
const showReviewImage =
|
18 |
+
( SHOW_AVATARS || attributes.imageType === 'product' ) &&
|
19 |
attributes.showReviewImage;
|
20 |
const showReviewRating =
|
21 |
+
REVIEW_RATINGS_ENABLED && attributes.showReviewRating;
|
22 |
const attrs = {
|
23 |
...attributes,
|
24 |
showReviewImage,
|
assets/js/base/components/sidebar-layout/style.scss
CHANGED
@@ -52,13 +52,6 @@
|
|
52 |
}
|
53 |
}
|
54 |
|
55 |
-
.wc-block-components-sidebar .wc-block-components-panel > h2 {
|
56 |
-
@include reset-typography();
|
57 |
-
.wc-block-components-panel__button {
|
58 |
-
font-weight: 400;
|
59 |
-
}
|
60 |
-
}
|
61 |
-
|
62 |
// For Twenty Twenty we need to increase specificity a bit more.
|
63 |
.theme-twentytwenty {
|
64 |
.wc-block-components-sidebar .wc-block-components-panel > h2 {
|
52 |
}
|
53 |
}
|
54 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
55 |
// For Twenty Twenty we need to increase specificity a bit more.
|
56 |
.theme-twentytwenty {
|
57 |
.wc-block-components-sidebar .wc-block-components-panel > h2 {
|
assets/js/base/components/spinner/index.tsx
DELETED
@@ -1,10 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* Internal dependencies
|
3 |
-
*/
|
4 |
-
import './style.scss';
|
5 |
-
|
6 |
-
const Spinner = (): JSX.Element => {
|
7 |
-
return <span className="wc-block-components-spinner" aria-hidden="true" />;
|
8 |
-
};
|
9 |
-
|
10 |
-
export default Spinner;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/base/components/spinner/style.scss
DELETED
@@ -1,37 +0,0 @@
|
|
1 |
-
.wc-block-components-spinner {
|
2 |
-
position: absolute;
|
3 |
-
width: 100%;
|
4 |
-
height: 100%;
|
5 |
-
color: inherit;
|
6 |
-
box-sizing: content-box;
|
7 |
-
text-align: center;
|
8 |
-
font-size: 1.25em;
|
9 |
-
|
10 |
-
&::after {
|
11 |
-
content: " ";
|
12 |
-
position: absolute;
|
13 |
-
top: 50%;
|
14 |
-
left: 50%;
|
15 |
-
margin: -0.5em 0 0 -0.5em;
|
16 |
-
width: 1em;
|
17 |
-
height: 1em;
|
18 |
-
box-sizing: border-box;
|
19 |
-
transform-origin: 50% 50%;
|
20 |
-
transform: translateZ(0) scale(0.5);
|
21 |
-
backface-visibility: hidden;
|
22 |
-
border-radius: 50%;
|
23 |
-
border: 0.2em solid currentColor;
|
24 |
-
border-left-color: transparent;
|
25 |
-
animation: wc-block-components-spinner__animation 1s infinite linear;
|
26 |
-
}
|
27 |
-
}
|
28 |
-
|
29 |
-
@keyframes wc-block-components-spinner__animation {
|
30 |
-
0% {
|
31 |
-
animation-timing-function: cubic-bezier(0.5856, 0.0703, 0.4143, 0.9297);
|
32 |
-
transform: rotate(0deg);
|
33 |
-
}
|
34 |
-
100% {
|
35 |
-
transform: rotate(360deg);
|
36 |
-
}
|
37 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/base/components/state-input/StateInputProps.ts
DELETED
@@ -1,15 +0,0 @@
|
|
1 |
-
export interface StateInputProps {
|
2 |
-
className?: string;
|
3 |
-
label: string;
|
4 |
-
id: string;
|
5 |
-
autoComplete?: string;
|
6 |
-
value: string;
|
7 |
-
country: string;
|
8 |
-
onChange: ( value: string ) => void;
|
9 |
-
required?: boolean;
|
10 |
-
errorMessage?: string;
|
11 |
-
}
|
12 |
-
|
13 |
-
export type StateInputWithStatesProps = StateInputProps & {
|
14 |
-
states: Record< string, Record< string, string > >;
|
15 |
-
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/base/components/state-input/billing-state-input.js
ADDED
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* External dependencies
|
3 |
+
*/
|
4 |
+
import PropTypes from 'prop-types';
|
5 |
+
import { ALLOWED_STATES } from '@woocommerce/block-settings';
|
6 |
+
|
7 |
+
/**
|
8 |
+
* Internal dependencies
|
9 |
+
*/
|
10 |
+
import StateInput from './state-input.js';
|
11 |
+
|
12 |
+
const BillingStateInput = ( props ) => {
|
13 |
+
return <StateInput states={ ALLOWED_STATES } { ...props } />;
|
14 |
+
};
|
15 |
+
|
16 |
+
BillingStateInput.propTypes = {
|
17 |
+
onChange: PropTypes.func.isRequired,
|
18 |
+
className: PropTypes.string,
|
19 |
+
label: PropTypes.string,
|
20 |
+
value: PropTypes.string,
|
21 |
+
};
|
22 |
+
|
23 |
+
export default BillingStateInput;
|
assets/js/base/components/state-input/billing-state-input.tsx
DELETED
@@ -1,16 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* External dependencies
|
3 |
-
*/
|
4 |
-
import { ALLOWED_STATES } from '@woocommerce/block-settings';
|
5 |
-
|
6 |
-
/**
|
7 |
-
* Internal dependencies
|
8 |
-
*/
|
9 |
-
import StateInput from './state-input';
|
10 |
-
import type { StateInputProps } from './StateInputProps';
|
11 |
-
|
12 |
-
const BillingStateInput = ( props: StateInputProps ): JSX.Element => {
|
13 |
-
return <StateInput states={ ALLOWED_STATES } { ...props } />;
|
14 |
-
};
|
15 |
-
|
16 |
-
export default BillingStateInput;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/base/components/state-input/{index.ts → index.js}
RENAMED
File without changes
|
assets/js/base/components/state-input/shipping-state-input.js
ADDED
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* External dependencies
|
3 |
+
*/
|
4 |
+
import PropTypes from 'prop-types';
|
5 |
+
import { SHIPPING_STATES } from '@woocommerce/block-settings';
|
6 |
+
|
7 |
+
/**
|
8 |
+
* Internal dependencies
|
9 |
+
*/
|
10 |
+
import StateInput from './state-input.js';
|
11 |
+
|
12 |
+
const ShippingStateInput = ( props ) => {
|
13 |
+
return <StateInput states={ SHIPPING_STATES } { ...props } />;
|
14 |
+
};
|
15 |
+
|
16 |
+
ShippingStateInput.propTypes = {
|
17 |
+
onChange: PropTypes.func.isRequired,
|
18 |
+
className: PropTypes.string,
|
19 |
+
label: PropTypes.string,
|
20 |
+
value: PropTypes.string,
|
21 |
+
};
|
22 |
+
|
23 |
+
export default ShippingStateInput;
|
assets/js/base/components/state-input/shipping-state-input.tsx
DELETED
@@ -1,16 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* External dependencies
|
3 |
-
*/
|
4 |
-
import { SHIPPING_STATES } from '@woocommerce/block-settings';
|
5 |
-
|
6 |
-
/**
|
7 |
-
* Internal dependencies
|
8 |
-
*/
|
9 |
-
import StateInput from './state-input';
|
10 |
-
import type { StateInputProps } from './StateInputProps';
|
11 |
-
|
12 |
-
const ShippingStateInput = ( props: StateInputProps ): JSX.Element => {
|
13 |
-
return <StateInput states={ SHIPPING_STATES } { ...props } />;
|
14 |
-
};
|
15 |
-
|
16 |
-
export default ShippingStateInput;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/base/components/state-input/{state-input.tsx → state-input.js}
RENAMED
@@ -2,6 +2,7 @@
|
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { __ } from '@wordpress/i18n';
|
|
|
5 |
import { decodeEntities } from '@wordpress/html-entities';
|
6 |
import { useCallback, useMemo } from '@wordpress/element';
|
7 |
import classnames from 'classnames';
|
@@ -12,7 +13,6 @@ import classnames from 'classnames';
|
|
12 |
import { ValidatedTextInput } from '../text-input';
|
13 |
import { ValidatedSelect } from '../select';
|
14 |
import './style.scss';
|
15 |
-
import type { StateInputWithStatesProps } from './StateInputProps';
|
16 |
|
17 |
const StateInput = ( {
|
18 |
className,
|
@@ -24,7 +24,7 @@ const StateInput = ( {
|
|
24 |
autoComplete = 'off',
|
25 |
value = '',
|
26 |
required = false,
|
27 |
-
}
|
28 |
const countryStates = states[ country ];
|
29 |
const options = useMemo(
|
30 |
() =>
|
@@ -112,4 +112,20 @@ const StateInput = ( {
|
|
112 |
);
|
113 |
};
|
114 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
115 |
export default StateInput;
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
+
import PropTypes from 'prop-types';
|
6 |
import { decodeEntities } from '@wordpress/html-entities';
|
7 |
import { useCallback, useMemo } from '@wordpress/element';
|
8 |
import classnames from 'classnames';
|
13 |
import { ValidatedTextInput } from '../text-input';
|
14 |
import { ValidatedSelect } from '../select';
|
15 |
import './style.scss';
|
|
|
16 |
|
17 |
const StateInput = ( {
|
18 |
className,
|
24 |
autoComplete = 'off',
|
25 |
value = '',
|
26 |
required = false,
|
27 |
+
} ) => {
|
28 |
const countryStates = states[ country ];
|
29 |
const options = useMemo(
|
30 |
() =>
|
112 |
);
|
113 |
};
|
114 |
|
115 |
+
StateInput.propTypes = {
|
116 |
+
states: PropTypes.objectOf(
|
117 |
+
PropTypes.oneOfType( [
|
118 |
+
PropTypes.array,
|
119 |
+
PropTypes.objectOf( PropTypes.string ),
|
120 |
+
] )
|
121 |
+
).isRequired,
|
122 |
+
onChange: PropTypes.func.isRequired,
|
123 |
+
autoComplete: PropTypes.string,
|
124 |
+
id: PropTypes.string,
|
125 |
+
className: PropTypes.string,
|
126 |
+
country: PropTypes.string,
|
127 |
+
label: PropTypes.string,
|
128 |
+
value: PropTypes.string,
|
129 |
+
};
|
130 |
+
|
131 |
export default StateInput;
|
assets/js/base/components/summary/{index.tsx → index.js}
RENAMED
@@ -2,19 +2,12 @@
|
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { RawHTML, useMemo } from '@wordpress/element';
|
5 |
-
import { WordCountType } from '@woocommerce/block-settings';
|
6 |
|
7 |
/**
|
8 |
* Internal dependencies
|
9 |
*/
|
10 |
import { generateSummary } from './utils';
|
11 |
|
12 |
-
interface SummaryProps {
|
13 |
-
className?: string;
|
14 |
-
source: string;
|
15 |
-
maxLength?: number;
|
16 |
-
countType?: WordCountType;
|
17 |
-
}
|
18 |
/**
|
19 |
* Summary component.
|
20 |
*
|
@@ -29,7 +22,7 @@ export const Summary = ( {
|
|
29 |
maxLength = 15,
|
30 |
countType = 'words',
|
31 |
className = '',
|
32 |
-
}
|
33 |
const summaryText = useMemo( () => {
|
34 |
return generateSummary( source, maxLength, countType );
|
35 |
}, [ source, maxLength, countType ] );
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { RawHTML, useMemo } from '@wordpress/element';
|
|
|
5 |
|
6 |
/**
|
7 |
* Internal dependencies
|
8 |
*/
|
9 |
import { generateSummary } from './utils';
|
10 |
|
|
|
|
|
|
|
|
|
|
|
|
|
11 |
/**
|
12 |
* Summary component.
|
13 |
*
|
22 |
maxLength = 15,
|
23 |
countType = 'words',
|
24 |
className = '',
|
25 |
+
} ) => {
|
26 |
const summaryText = useMemo( () => {
|
27 |
return generateSummary( source, maxLength, countType );
|
28 |
}, [ source, maxLength, countType ] );
|
assets/js/base/components/text-input/{index.ts → index.js}
RENAMED
File without changes
|
assets/js/base/components/text-input/style.scss
CHANGED
@@ -40,7 +40,6 @@
|
|
40 |
input[type="tel"],
|
41 |
input[type="url"],
|
42 |
input[type="text"],
|
43 |
-
input[type="number"],
|
44 |
input[type="email"] {
|
45 |
@include font-size(regular);
|
46 |
background-color: #fff;
|
@@ -73,20 +72,9 @@
|
|
73 |
}
|
74 |
}
|
75 |
|
76 |
-
input[type="number"] {
|
77 |
-
-moz-appearance: textfield;
|
78 |
-
|
79 |
-
&::-webkit-outer-spin-button,
|
80 |
-
&::-webkit-inner-spin-button {
|
81 |
-
appearance: none;
|
82 |
-
margin: 0;
|
83 |
-
}
|
84 |
-
}
|
85 |
-
|
86 |
&.is-active input[type="tel"],
|
87 |
&.is-active input[type="url"],
|
88 |
&.is-active input[type="text"],
|
89 |
-
&.is-active input[type="number"],
|
90 |
&.is-active input[type="email"] {
|
91 |
padding: em($gap-large) 0 em($gap-smallest) $gap;
|
92 |
}
|
40 |
input[type="tel"],
|
41 |
input[type="url"],
|
42 |
input[type="text"],
|
|
|
43 |
input[type="email"] {
|
44 |
@include font-size(regular);
|
45 |
background-color: #fff;
|
72 |
}
|
73 |
}
|
74 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
75 |
&.is-active input[type="tel"],
|
76 |
&.is-active input[type="url"],
|
77 |
&.is-active input[type="text"],
|
|
|
78 |
&.is-active input[type="email"] {
|
79 |
padding: em($gap-large) 0 em($gap-smallest) $gap;
|
80 |
}
|
assets/js/base/components/text-input/{text-input.tsx → text-input.js}
RENAMED
@@ -1,7 +1,8 @@
|
|
1 |
/**
|
2 |
* External dependencies
|
3 |
*/
|
4 |
-
import { forwardRef
|
|
|
5 |
import classnames from 'classnames';
|
6 |
import { useState } from '@wordpress/element';
|
7 |
|
@@ -11,24 +12,7 @@ import { useState } from '@wordpress/element';
|
|
11 |
import Label from '../label';
|
12 |
import './style.scss';
|
13 |
|
14 |
-
|
15 |
-
extends Omit<
|
16 |
-
InputHTMLAttributes< HTMLInputElement >,
|
17 |
-
'onChange' | 'onBlur'
|
18 |
-
> {
|
19 |
-
id: string;
|
20 |
-
ariaLabel?: string;
|
21 |
-
label?: string;
|
22 |
-
ariaDescribedBy?: string;
|
23 |
-
screenReaderLabel?: string;
|
24 |
-
help?: string;
|
25 |
-
feedback?: boolean | JSX.Element;
|
26 |
-
autoComplete?: string;
|
27 |
-
onChange: ( newValue: string ) => void;
|
28 |
-
onBlur?: ( newValue: string ) => void;
|
29 |
-
}
|
30 |
-
|
31 |
-
const TextInput = forwardRef< HTMLInputElement, TextInputProps >(
|
32 |
(
|
33 |
{
|
34 |
className,
|
@@ -45,11 +29,8 @@ const TextInput = forwardRef< HTMLInputElement, TextInputProps >(
|
|
45 |
value = '',
|
46 |
onChange,
|
47 |
required = false,
|
48 |
-
onBlur = () => {
|
49 |
-
/* Do nothing */
|
50 |
-
},
|
51 |
feedback,
|
52 |
-
...rest
|
53 |
},
|
54 |
ref
|
55 |
) => {
|
@@ -76,8 +57,8 @@ const TextInput = forwardRef< HTMLInputElement, TextInputProps >(
|
|
76 |
onChange( event.target.value );
|
77 |
} }
|
78 |
onFocus={ () => setIsActive( true ) }
|
79 |
-
onBlur={ (
|
80 |
-
onBlur(
|
81 |
setIsActive( false );
|
82 |
} }
|
83 |
aria-label={ ariaLabel || label }
|
@@ -88,7 +69,6 @@ const TextInput = forwardRef< HTMLInputElement, TextInputProps >(
|
|
88 |
: ariaDescribedBy
|
89 |
}
|
90 |
required={ required }
|
91 |
-
{ ...rest }
|
92 |
/>
|
93 |
<Label
|
94 |
label={ label }
|
@@ -113,4 +93,19 @@ const TextInput = forwardRef< HTMLInputElement, TextInputProps >(
|
|
113 |
}
|
114 |
);
|
115 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
116 |
export default TextInput;
|
1 |
/**
|
2 |
* External dependencies
|
3 |
*/
|
4 |
+
import { forwardRef } from 'react';
|
5 |
+
import PropTypes from 'prop-types';
|
6 |
import classnames from 'classnames';
|
7 |
import { useState } from '@wordpress/element';
|
8 |
|
12 |
import Label from '../label';
|
13 |
import './style.scss';
|
14 |
|
15 |
+
const TextInput = forwardRef(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16 |
(
|
17 |
{
|
18 |
className,
|
29 |
value = '',
|
30 |
onChange,
|
31 |
required = false,
|
32 |
+
onBlur = () => {},
|
|
|
|
|
33 |
feedback,
|
|
|
34 |
},
|
35 |
ref
|
36 |
) => {
|
57 |
onChange( event.target.value );
|
58 |
} }
|
59 |
onFocus={ () => setIsActive( true ) }
|
60 |
+
onBlur={ () => {
|
61 |
+
onBlur();
|
62 |
setIsActive( false );
|
63 |
} }
|
64 |
aria-label={ ariaLabel || label }
|
69 |
: ariaDescribedBy
|
70 |
}
|
71 |
required={ required }
|
|
|
72 |
/>
|
73 |
<Label
|
74 |
label={ label }
|
93 |
}
|
94 |
);
|
95 |
|
96 |
+
TextInput.propTypes = {
|
97 |
+
id: PropTypes.string.isRequired,
|
98 |
+
onChange: PropTypes.func.isRequired,
|
99 |
+
value: PropTypes.string,
|
100 |
+
ariaLabel: PropTypes.string,
|
101 |
+
ariaDescribedBy: PropTypes.string,
|
102 |
+
label: PropTypes.string,
|
103 |
+
screenReaderLabel: PropTypes.string,
|
104 |
+
disabled: PropTypes.bool,
|
105 |
+
help: PropTypes.string,
|
106 |
+
autoCapitalize: PropTypes.string,
|
107 |
+
autoComplete: PropTypes.string,
|
108 |
+
required: PropTypes.bool,
|
109 |
+
};
|
110 |
+
|
111 |
export default TextInput;
|
assets/js/base/components/text-input/{validated-text-input.tsx → validated-text-input.js}
RENAMED
@@ -3,13 +3,13 @@
|
|
3 |
*/
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
import { useCallback, useRef, useEffect, useState } from 'react';
|
|
|
6 |
import classnames from 'classnames';
|
7 |
import {
|
8 |
ValidationInputError,
|
9 |
useValidationContext,
|
10 |
} from '@woocommerce/base-context';
|
11 |
import { withInstanceId } from '@woocommerce/base-hocs/with-instance-id';
|
12 |
-
import { isString } from '@woocommerce/types';
|
13 |
|
14 |
/**
|
15 |
* Internal dependencies
|
@@ -17,30 +17,6 @@ import { isString } from '@woocommerce/types';
|
|
17 |
import TextInput from './text-input';
|
18 |
import './style.scss';
|
19 |
|
20 |
-
interface ValidatedTextInputPropsWithId {
|
21 |
-
instanceId?: string;
|
22 |
-
id: string;
|
23 |
-
}
|
24 |
-
|
25 |
-
interface ValidatedTextInputPropsWithInstanceId {
|
26 |
-
instanceId: string;
|
27 |
-
id?: string;
|
28 |
-
}
|
29 |
-
|
30 |
-
type ValidatedTextInputProps = (
|
31 |
-
| ValidatedTextInputPropsWithId
|
32 |
-
| ValidatedTextInputPropsWithInstanceId
|
33 |
-
) & {
|
34 |
-
className?: string;
|
35 |
-
ariaDescribedBy?: string;
|
36 |
-
errorId?: string;
|
37 |
-
validateOnMount?: boolean;
|
38 |
-
focusOnMount?: boolean;
|
39 |
-
showError?: boolean;
|
40 |
-
errorMessage?: string;
|
41 |
-
onChange: ( newValue: string ) => void;
|
42 |
-
};
|
43 |
-
|
44 |
const ValidatedTextInput = ( {
|
45 |
className,
|
46 |
instanceId,
|
@@ -51,11 +27,10 @@ const ValidatedTextInput = ( {
|
|
51 |
focusOnMount = false,
|
52 |
onChange,
|
53 |
showError = true,
|
54 |
-
errorMessage: passedErrorMessage = '',
|
55 |
...rest
|
56 |
-
}
|
57 |
const [ isPristine, setIsPristine ] = useState( true );
|
58 |
-
const inputRef = useRef
|
59 |
const {
|
60 |
getValidationError,
|
61 |
hideValidationError,
|
@@ -64,9 +39,8 @@ const ValidatedTextInput = ( {
|
|
64 |
getValidationErrorId,
|
65 |
} = useValidationContext();
|
66 |
|
67 |
-
const textInputId =
|
68 |
-
|
69 |
-
const errorIdString = errorId !== undefined ? errorId : textInputId;
|
70 |
|
71 |
const validateInput = useCallback(
|
72 |
( errorsHidden = true ) => {
|
@@ -78,10 +52,10 @@ const ValidatedTextInput = ( {
|
|
78 |
inputObject.value = inputObject.value.trim();
|
79 |
const inputIsValid = inputObject.checkValidity();
|
80 |
if ( inputIsValid ) {
|
81 |
-
clearValidationError(
|
82 |
} else {
|
83 |
setValidationErrors( {
|
84 |
-
[
|
85 |
message:
|
86 |
inputObject.validationMessage ||
|
87 |
__(
|
@@ -93,13 +67,13 @@ const ValidatedTextInput = ( {
|
|
93 |
} );
|
94 |
}
|
95 |
},
|
96 |
-
[ clearValidationError,
|
97 |
);
|
98 |
|
99 |
useEffect( () => {
|
100 |
if ( isPristine ) {
|
101 |
if ( focusOnMount ) {
|
102 |
-
inputRef.current
|
103 |
}
|
104 |
setIsPristine( false );
|
105 |
}
|
@@ -117,22 +91,15 @@ const ValidatedTextInput = ( {
|
|
117 |
// Remove validation errors when unmounted.
|
118 |
useEffect( () => {
|
119 |
return () => {
|
120 |
-
clearValidationError(
|
121 |
};
|
122 |
-
}, [ clearValidationError,
|
123 |
|
124 |
-
|
125 |
-
const errorMessage = ( getValidationError( errorIdString ) || {} ) as {
|
126 |
-
message?: string;
|
127 |
-
hidden?: boolean;
|
128 |
-
};
|
129 |
-
if ( isString( passedErrorMessage ) && passedErrorMessage !== '' ) {
|
130 |
-
errorMessage.message = passedErrorMessage;
|
131 |
-
}
|
132 |
const hasError = errorMessage.message && ! errorMessage.hidden;
|
133 |
const describedBy =
|
134 |
-
showError && hasError && getValidationErrorId(
|
135 |
-
? getValidationErrorId(
|
136 |
: ariaDescribedBy;
|
137 |
|
138 |
return (
|
@@ -145,16 +112,11 @@ const ValidatedTextInput = ( {
|
|
145 |
validateInput( false );
|
146 |
} }
|
147 |
feedback={
|
148 |
-
showError &&
|
149 |
-
<ValidationInputError
|
150 |
-
errorMessage={ passedErrorMessage }
|
151 |
-
propertyName={ errorIdString }
|
152 |
-
/>
|
153 |
-
)
|
154 |
}
|
155 |
ref={ inputRef }
|
156 |
onChange={ ( val ) => {
|
157 |
-
hideValidationError(
|
158 |
onChange( val );
|
159 |
} }
|
160 |
ariaDescribedBy={ describedBy }
|
@@ -163,4 +125,15 @@ const ValidatedTextInput = ( {
|
|
163 |
);
|
164 |
};
|
165 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
166 |
export default withInstanceId( ValidatedTextInput );
|
3 |
*/
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
import { useCallback, useRef, useEffect, useState } from 'react';
|
6 |
+
import PropTypes from 'prop-types';
|
7 |
import classnames from 'classnames';
|
8 |
import {
|
9 |
ValidationInputError,
|
10 |
useValidationContext,
|
11 |
} from '@woocommerce/base-context';
|
12 |
import { withInstanceId } from '@woocommerce/base-hocs/with-instance-id';
|
|
|
13 |
|
14 |
/**
|
15 |
* Internal dependencies
|
17 |
import TextInput from './text-input';
|
18 |
import './style.scss';
|
19 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20 |
const ValidatedTextInput = ( {
|
21 |
className,
|
22 |
instanceId,
|
27 |
focusOnMount = false,
|
28 |
onChange,
|
29 |
showError = true,
|
|
|
30 |
...rest
|
31 |
+
} ) => {
|
32 |
const [ isPristine, setIsPristine ] = useState( true );
|
33 |
+
const inputRef = useRef();
|
34 |
const {
|
35 |
getValidationError,
|
36 |
hideValidationError,
|
39 |
getValidationErrorId,
|
40 |
} = useValidationContext();
|
41 |
|
42 |
+
const textInputId = id || 'textinput-' + instanceId;
|
43 |
+
errorId = errorId || textInputId;
|
|
|
44 |
|
45 |
const validateInput = useCallback(
|
46 |
( errorsHidden = true ) => {
|
52 |
inputObject.value = inputObject.value.trim();
|
53 |
const inputIsValid = inputObject.checkValidity();
|
54 |
if ( inputIsValid ) {
|
55 |
+
clearValidationError( errorId );
|
56 |
} else {
|
57 |
setValidationErrors( {
|
58 |
+
[ errorId ]: {
|
59 |
message:
|
60 |
inputObject.validationMessage ||
|
61 |
__(
|
67 |
} );
|
68 |
}
|
69 |
},
|
70 |
+
[ clearValidationError, errorId, setValidationErrors ]
|
71 |
);
|
72 |
|
73 |
useEffect( () => {
|
74 |
if ( isPristine ) {
|
75 |
if ( focusOnMount ) {
|
76 |
+
inputRef.current.focus();
|
77 |
}
|
78 |
setIsPristine( false );
|
79 |
}
|
91 |
// Remove validation errors when unmounted.
|
92 |
useEffect( () => {
|
93 |
return () => {
|
94 |
+
clearValidationError( errorId );
|
95 |
};
|
96 |
+
}, [ clearValidationError, errorId ] );
|
97 |
|
98 |
+
const errorMessage = getValidationError( errorId ) || {};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
99 |
const hasError = errorMessage.message && ! errorMessage.hidden;
|
100 |
const describedBy =
|
101 |
+
showError && hasError && getValidationErrorId( errorId )
|
102 |
+
? getValidationErrorId( errorId )
|
103 |
: ariaDescribedBy;
|
104 |
|
105 |
return (
|
112 |
validateInput( false );
|
113 |
} }
|
114 |
feedback={
|
115 |
+
showError && <ValidationInputError propertyName={ errorId } />
|
|
|
|
|
|
|
|
|
|
|
116 |
}
|
117 |
ref={ inputRef }
|
118 |
onChange={ ( val ) => {
|
119 |
+
hideValidationError( errorId );
|
120 |
onChange( val );
|
121 |
} }
|
122 |
ariaDescribedBy={ describedBy }
|
125 |
);
|
126 |
};
|
127 |
|
128 |
+
ValidatedTextInput.propTypes = {
|
129 |
+
onChange: PropTypes.func.isRequired,
|
130 |
+
id: PropTypes.string,
|
131 |
+
value: PropTypes.string,
|
132 |
+
ariaDescribedBy: PropTypes.string,
|
133 |
+
errorId: PropTypes.string,
|
134 |
+
validateOnMount: PropTypes.bool,
|
135 |
+
focusOnMount: PropTypes.bool,
|
136 |
+
showError: PropTypes.bool,
|
137 |
+
};
|
138 |
+
|
139 |
export default withInstanceId( ValidatedTextInput );
|
assets/js/base/context/event-emit/emitters.ts
CHANGED
@@ -3,7 +3,6 @@
|
|
3 |
*/
|
4 |
import { getObserversByPriority } from './utils';
|
5 |
import type { EventObserversType } from './types';
|
6 |
-
import { isErrorResponse, isFailResponse } from '../hooks/use-emit-response';
|
7 |
|
8 |
/**
|
9 |
* Emits events on registered observers for the provided type and passes along
|
@@ -45,24 +44,20 @@ export const emitEvent = async (
|
|
45 |
|
46 |
/**
|
47 |
* Emits events on registered observers for the provided type and passes along
|
48 |
-
* the provided data. This event emitter will abort
|
49 |
-
*
|
50 |
-
*
|
51 |
-
* Any successful observer responses before abort will be included in the returned package.
|
52 |
*
|
53 |
* @param {Object} observers The registered observers to omit to.
|
54 |
* @param {string} eventType The event type being emitted.
|
55 |
* @param {*} data Data passed along to the observer when it is invoked.
|
56 |
*
|
57 |
-
* @return {Promise} Returns a promise that resolves to either boolean
|
58 |
-
* from registered observers that were invoked up to the point of an error.
|
59 |
*/
|
60 |
export const emitEventWithAbort = async (
|
61 |
observers: EventObserversType,
|
62 |
eventType: string,
|
63 |
data: unknown
|
64 |
-
): Promise<
|
65 |
-
const observerResponses = [];
|
66 |
const observersByType = getObserversByPriority( observers, eventType );
|
67 |
for ( const observer of observersByType ) {
|
68 |
try {
|
@@ -72,24 +67,16 @@ export const emitEventWithAbort = async (
|
|
72 |
}
|
73 |
if ( ! response.hasOwnProperty( 'type' ) ) {
|
74 |
throw new Error(
|
75 |
-
'
|
76 |
);
|
77 |
}
|
78 |
-
|
79 |
-
observerResponses.push( response );
|
80 |
-
// early abort.
|
81 |
-
return observerResponses;
|
82 |
-
}
|
83 |
-
// all potential abort conditions have been considered push the
|
84 |
-
// response to the array.
|
85 |
-
observerResponses.push( response );
|
86 |
} catch ( e ) {
|
87 |
// We don't handle thrown errors but just console.log for troubleshooting.
|
88 |
// eslint-disable-next-line no-console
|
89 |
console.error( e );
|
90 |
-
|
91 |
-
return observerResponses;
|
92 |
}
|
93 |
}
|
94 |
-
return
|
95 |
};
|
3 |
*/
|
4 |
import { getObserversByPriority } from './utils';
|
5 |
import type { EventObserversType } from './types';
|
|
|
6 |
|
7 |
/**
|
8 |
* Emits events on registered observers for the provided type and passes along
|
44 |
|
45 |
/**
|
46 |
* Emits events on registered observers for the provided type and passes along
|
47 |
+
* the provided data. This event emitter will abort and return any value from
|
48 |
+
* observers that return an object which should contain a type property.
|
|
|
|
|
49 |
*
|
50 |
* @param {Object} observers The registered observers to omit to.
|
51 |
* @param {string} eventType The event type being emitted.
|
52 |
* @param {*} data Data passed along to the observer when it is invoked.
|
53 |
*
|
54 |
+
* @return {Promise} Returns a promise that resolves to either boolean or the return value of the aborted observer.
|
|
|
55 |
*/
|
56 |
export const emitEventWithAbort = async (
|
57 |
observers: EventObserversType,
|
58 |
eventType: string,
|
59 |
data: unknown
|
60 |
+
): Promise< unknown > => {
|
|
|
61 |
const observersByType = getObserversByPriority( observers, eventType );
|
62 |
for ( const observer of observersByType ) {
|
63 |
try {
|
67 |
}
|
68 |
if ( ! response.hasOwnProperty( 'type' ) ) {
|
69 |
throw new Error(
|
70 |
+
'If you want to abort event emitter processing, your observer must return an object with a type property'
|
71 |
);
|
72 |
}
|
73 |
+
return response;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
74 |
} catch ( e ) {
|
75 |
// We don't handle thrown errors but just console.log for troubleshooting.
|
76 |
// eslint-disable-next-line no-console
|
77 |
console.error( e );
|
78 |
+
return { type: 'error' };
|
|
|
79 |
}
|
80 |
}
|
81 |
+
return true;
|
82 |
};
|
assets/js/base/context/event-emit/test/emitters.js
CHANGED
@@ -30,13 +30,6 @@ describe( 'Testing emitters', () => {
|
|
30 |
'observerPromiseWithResolvedValue',
|
31 |
{ priority: 10, callback: observerPromiseWithResolvedValue },
|
32 |
],
|
33 |
-
[
|
34 |
-
'observerSuccessType',
|
35 |
-
{
|
36 |
-
priority: 10,
|
37 |
-
callback: jest.fn().mockReturnValue( { type: 'success' } ),
|
38 |
-
},
|
39 |
-
],
|
40 |
] );
|
41 |
} );
|
42 |
describe( 'Testing emitEvent()', () => {
|
@@ -46,11 +39,11 @@ describe( 'Testing emitters', () => {
|
|
46 |
expect( console ).toHaveErroredWith( 'an error' );
|
47 |
expect( observerA ).toHaveBeenCalledTimes( 1 );
|
48 |
expect( observerB ).toHaveBeenCalledWith( 'foo' );
|
49 |
-
expect( response ).
|
50 |
} );
|
51 |
} );
|
52 |
describe( 'Testing emitEventWithAbort()', () => {
|
53 |
-
it( 'does not abort on any return value other than an object with
|
54 |
observerMocks.delete( 'observerPromiseWithReject' );
|
55 |
const observers = { test: observerMocks };
|
56 |
const response = await emitEventWithAbort(
|
@@ -61,16 +54,17 @@ describe( 'Testing emitters', () => {
|
|
61 |
expect( console ).not.toHaveErrored();
|
62 |
expect( observerB ).toHaveBeenCalledTimes( 1 );
|
63 |
expect( observerPromiseWithResolvedValue ).toHaveBeenCalled();
|
64 |
-
expect( response ).
|
65 |
} );
|
66 |
-
it( 'Aborts on a return value with an object that has a
|
67 |
const validObjectResponse = jest
|
68 |
.fn()
|
69 |
-
.mockReturnValue( { type: '
|
70 |
observerMocks.set( 'observerValidObject', {
|
71 |
priority: 5,
|
72 |
callback: validObjectResponse,
|
73 |
} );
|
|
|
74 |
const observers = { test: observerMocks };
|
75 |
const response = await emitEventWithAbort(
|
76 |
observers,
|
@@ -80,7 +74,7 @@ describe( 'Testing emitters', () => {
|
|
80 |
expect( console ).not.toHaveErrored();
|
81 |
expect( validObjectResponse ).toHaveBeenCalledTimes( 1 );
|
82 |
expect( observerPromiseWithResolvedValue ).not.toHaveBeenCalled();
|
83 |
-
expect( response ).toEqual(
|
84 |
} );
|
85 |
it( 'throws an error on an object returned from observer without a type property', async () => {
|
86 |
const failingObjectResponse = jest.fn().mockReturnValue( {} );
|
@@ -97,7 +91,7 @@ describe( 'Testing emitters', () => {
|
|
97 |
expect( console ).toHaveErrored();
|
98 |
expect( failingObjectResponse ).toHaveBeenCalledTimes( 1 );
|
99 |
expect( observerPromiseWithResolvedValue ).not.toHaveBeenCalled();
|
100 |
-
expect( response ).toEqual(
|
101 |
} );
|
102 |
} );
|
103 |
describe( 'Test Priority', () => {
|
30 |
'observerPromiseWithResolvedValue',
|
31 |
{ priority: 10, callback: observerPromiseWithResolvedValue },
|
32 |
],
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
33 |
] );
|
34 |
} );
|
35 |
describe( 'Testing emitEvent()', () => {
|
39 |
expect( console ).toHaveErroredWith( 'an error' );
|
40 |
expect( observerA ).toHaveBeenCalledTimes( 1 );
|
41 |
expect( observerB ).toHaveBeenCalledWith( 'foo' );
|
42 |
+
expect( response ).toBe( true );
|
43 |
} );
|
44 |
} );
|
45 |
describe( 'Testing emitEventWithAbort()', () => {
|
46 |
+
it( 'does not abort on any return value other than an object with a type property', async () => {
|
47 |
observerMocks.delete( 'observerPromiseWithReject' );
|
48 |
const observers = { test: observerMocks };
|
49 |
const response = await emitEventWithAbort(
|
54 |
expect( console ).not.toHaveErrored();
|
55 |
expect( observerB ).toHaveBeenCalledTimes( 1 );
|
56 |
expect( observerPromiseWithResolvedValue ).toHaveBeenCalled();
|
57 |
+
expect( response ).toBe( true );
|
58 |
} );
|
59 |
+
it( 'Aborts on a return value with an object that has a type property', async () => {
|
60 |
const validObjectResponse = jest
|
61 |
.fn()
|
62 |
+
.mockReturnValue( { type: 'success' } );
|
63 |
observerMocks.set( 'observerValidObject', {
|
64 |
priority: 5,
|
65 |
callback: validObjectResponse,
|
66 |
} );
|
67 |
+
observerMocks.delete( 'observerPromiseWithReject' );
|
68 |
const observers = { test: observerMocks };
|
69 |
const response = await emitEventWithAbort(
|
70 |
observers,
|
74 |
expect( console ).not.toHaveErrored();
|
75 |
expect( validObjectResponse ).toHaveBeenCalledTimes( 1 );
|
76 |
expect( observerPromiseWithResolvedValue ).not.toHaveBeenCalled();
|
77 |
+
expect( response ).toEqual( { type: 'success' } );
|
78 |
} );
|
79 |
it( 'throws an error on an object returned from observer without a type property', async () => {
|
80 |
const failingObjectResponse = jest.fn().mockReturnValue( {} );
|
91 |
expect( console ).toHaveErrored();
|
92 |
expect( failingObjectResponse ).toHaveBeenCalledTimes( 1 );
|
93 |
expect( observerPromiseWithResolvedValue ).not.toHaveBeenCalled();
|
94 |
+
expect( response ).toEqual( { type: 'error' } );
|
95 |
} );
|
96 |
} );
|
97 |
describe( 'Test Priority', () => {
|
assets/js/base/context/hooks/cart/use-store-cart-coupons.ts
CHANGED
@@ -13,9 +13,8 @@ import type { StoreCartCoupon } from '@woocommerce/types';
|
|
13 |
* Internal dependencies
|
14 |
*/
|
15 |
import { useStoreCart } from './use-store-cart';
|
16 |
-
import { useStoreSnackbarNotices } from '../use-store-snackbar-notices';
|
17 |
-
import { useValidationContext } from '../../providers/validation';
|
18 |
import { useStoreNotices } from '../use-store-notices';
|
|
|
19 |
|
20 |
/**
|
21 |
* This is a custom hook for loading the Store API /cart/coupons endpoint and an
|
@@ -27,8 +26,7 @@ import { useStoreNotices } from '../use-store-notices';
|
|
27 |
*/
|
28 |
export const useStoreCartCoupons = (): StoreCartCoupon => {
|
29 |
const { cartCoupons, cartIsLoading } = useStoreCart();
|
30 |
-
const { addErrorNotice } = useStoreNotices();
|
31 |
-
const { addSnackbarNotice } = useStoreSnackbarNotices();
|
32 |
const { setValidationErrors } = useValidationContext();
|
33 |
|
34 |
const results: Pick<
|
13 |
* Internal dependencies
|
14 |
*/
|
15 |
import { useStoreCart } from './use-store-cart';
|
|
|
|
|
16 |
import { useStoreNotices } from '../use-store-notices';
|
17 |
+
import { useValidationContext } from '../../providers/validation';
|
18 |
|
19 |
/**
|
20 |
* This is a custom hook for loading the Store API /cart/coupons endpoint and an
|
26 |
*/
|
27 |
export const useStoreCartCoupons = (): StoreCartCoupon => {
|
28 |
const { cartCoupons, cartIsLoading } = useStoreCart();
|
29 |
+
const { addErrorNotice, addSnackbarNotice } = useStoreNotices();
|
|
|
30 |
const { setValidationErrors } = useValidationContext();
|
31 |
|
32 |
const results: Pick<
|
assets/js/base/context/hooks/cart/use-store-cart-item-quantity.ts
CHANGED
@@ -7,14 +7,7 @@ import { CART_STORE_KEY as storeKey } from '@woocommerce/block-data';
|
|
7 |
import { useDebounce } from 'use-debounce';
|
8 |
import { usePrevious } from '@woocommerce/base-hooks';
|
9 |
import { triggerFragmentRefresh } from '@woocommerce/base-utils';
|
10 |
-
import {
|
11 |
-
CartItem,
|
12 |
-
StoreCartItemQuantity,
|
13 |
-
isNumber,
|
14 |
-
isObject,
|
15 |
-
isString,
|
16 |
-
objectHasProp,
|
17 |
-
} from '@woocommerce/types';
|
18 |
|
19 |
/**
|
20 |
* Internal dependencies
|
@@ -22,18 +15,6 @@ import {
|
|
22 |
import { useStoreCart } from './use-store-cart';
|
23 |
import { useCheckoutContext } from '../../providers/cart-checkout';
|
24 |
|
25 |
-
/**
|
26 |
-
* Ensures the object passed has props key: string and quantity: number
|
27 |
-
*/
|
28 |
-
const cartItemHasQuantityAndKey = (
|
29 |
-
cartItem: unknown /* Object that may have quantity and key */
|
30 |
-
): cartItem is Partial< CartItem > =>
|
31 |
-
isObject( cartItem ) &&
|
32 |
-
objectHasProp( cartItem, 'key' ) &&
|
33 |
-
objectHasProp( cartItem, 'quantity' ) &&
|
34 |
-
isString( cartItem.key ) &&
|
35 |
-
isNumber( cartItem.quantity );
|
36 |
-
|
37 |
/**
|
38 |
* This is a custom hook for loading the Store API /cart/ endpoint and actions for removing or changing item quantity.
|
39 |
*
|
@@ -43,18 +24,9 @@ const cartItemHasQuantityAndKey = (
|
|
43 |
* @return {StoreCartItemQuantity} An object exposing data and actions relating to cart items.
|
44 |
*/
|
45 |
export const useStoreCartItemQuantity = (
|
46 |
-
cartItem: CartItem
|
47 |
): StoreCartItemQuantity => {
|
48 |
-
const
|
49 |
-
|
50 |
-
if ( cartItemHasQuantityAndKey( cartItem ) ) {
|
51 |
-
verifiedCartItem.key = cartItem.key;
|
52 |
-
verifiedCartItem.quantity = cartItem.quantity;
|
53 |
-
}
|
54 |
-
const {
|
55 |
-
key: cartItemKey = '',
|
56 |
-
quantity: cartItemQuantity = 1,
|
57 |
-
} = verifiedCartItem;
|
58 |
const { cartErrors } = useStoreCart();
|
59 |
const { dispatchActions } = useCheckoutContext();
|
60 |
|
@@ -83,6 +55,7 @@ export const useStoreCartItemQuantity = (
|
|
83 |
},
|
84 |
[ cartItemKey ]
|
85 |
);
|
|
|
86 |
|
87 |
const removeItem = () => {
|
88 |
return cartItemKey
|
@@ -97,11 +70,12 @@ export const useStoreCartItemQuantity = (
|
|
97 |
useEffect( () => {
|
98 |
if (
|
99 |
cartItemKey &&
|
100 |
-
isNumber( previousDebouncedQuantity ) &&
|
101 |
Number.isFinite( previousDebouncedQuantity ) &&
|
102 |
previousDebouncedQuantity !== debouncedQuantity
|
103 |
) {
|
104 |
-
changeCartItemQuantity( cartItemKey, debouncedQuantity )
|
|
|
|
|
105 |
}
|
106 |
}, [
|
107 |
cartItemKey,
|
@@ -111,30 +85,32 @@ export const useStoreCartItemQuantity = (
|
|
111 |
] );
|
112 |
|
113 |
useEffect( () => {
|
114 |
-
if (
|
115 |
-
|
116 |
-
} else {
|
117 |
-
dispatchActions.decrementCalculating();
|
118 |
}
|
119 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
120 |
if ( isPending.delete ) {
|
|
|
|
|
121 |
dispatchActions.decrementCalculating();
|
122 |
}
|
123 |
-
};
|
124 |
-
}, [ dispatchActions, isPending.delete ] );
|
125 |
-
|
126 |
-
useEffect( () => {
|
127 |
-
if ( isPending.quantity || debouncedQuantity !== quantity ) {
|
128 |
-
dispatchActions.incrementCalculating();
|
129 |
-
} else {
|
130 |
-
dispatchActions.decrementCalculating();
|
131 |
}
|
132 |
return () => {
|
133 |
-
if ( isPending.quantity
|
|
|
|
|
|
|
134 |
dispatchActions.decrementCalculating();
|
135 |
}
|
136 |
};
|
137 |
-
}, [ dispatchActions, isPending
|
138 |
|
139 |
return {
|
140 |
isPendingDelete: isPending.delete,
|
7 |
import { useDebounce } from 'use-debounce';
|
8 |
import { usePrevious } from '@woocommerce/base-hooks';
|
9 |
import { triggerFragmentRefresh } from '@woocommerce/base-utils';
|
10 |
+
import type { CartItem, StoreCartItemQuantity } from '@woocommerce/types';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11 |
|
12 |
/**
|
13 |
* Internal dependencies
|
15 |
import { useStoreCart } from './use-store-cart';
|
16 |
import { useCheckoutContext } from '../../providers/cart-checkout';
|
17 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
18 |
/**
|
19 |
* This is a custom hook for loading the Store API /cart/ endpoint and actions for removing or changing item quantity.
|
20 |
*
|
24 |
* @return {StoreCartItemQuantity} An object exposing data and actions relating to cart items.
|
25 |
*/
|
26 |
export const useStoreCartItemQuantity = (
|
27 |
+
cartItem: CartItem
|
28 |
): StoreCartItemQuantity => {
|
29 |
+
const { key: cartItemKey = '', quantity: cartItemQuantity = 1 } = cartItem;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
30 |
const { cartErrors } = useStoreCart();
|
31 |
const { dispatchActions } = useCheckoutContext();
|
32 |
|
55 |
},
|
56 |
[ cartItemKey ]
|
57 |
);
|
58 |
+
const previousIsPending = usePrevious( isPending );
|
59 |
|
60 |
const removeItem = () => {
|
61 |
return cartItemKey
|
70 |
useEffect( () => {
|
71 |
if (
|
72 |
cartItemKey &&
|
|
|
73 |
Number.isFinite( previousDebouncedQuantity ) &&
|
74 |
previousDebouncedQuantity !== debouncedQuantity
|
75 |
) {
|
76 |
+
changeCartItemQuantity( cartItemKey, debouncedQuantity ).then(
|
77 |
+
triggerFragmentRefresh
|
78 |
+
);
|
79 |
}
|
80 |
}, [
|
81 |
cartItemKey,
|
85 |
] );
|
86 |
|
87 |
useEffect( () => {
|
88 |
+
if ( typeof previousIsPending === 'undefined' ) {
|
89 |
+
return;
|
|
|
|
|
90 |
}
|
91 |
+
if ( previousIsPending.quantity !== isPending.quantity ) {
|
92 |
+
if ( isPending.quantity ) {
|
93 |
+
dispatchActions.incrementCalculating();
|
94 |
+
} else {
|
95 |
+
dispatchActions.decrementCalculating();
|
96 |
+
}
|
97 |
+
}
|
98 |
+
if ( previousIsPending.delete !== isPending.delete ) {
|
99 |
if ( isPending.delete ) {
|
100 |
+
dispatchActions.incrementCalculating();
|
101 |
+
} else {
|
102 |
dispatchActions.decrementCalculating();
|
103 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
104 |
}
|
105 |
return () => {
|
106 |
+
if ( isPending.quantity ) {
|
107 |
+
dispatchActions.decrementCalculating();
|
108 |
+
}
|
109 |
+
if ( isPending.delete ) {
|
110 |
dispatchActions.decrementCalculating();
|
111 |
}
|
112 |
};
|
113 |
+
}, [ dispatchActions, isPending, previousIsPending ] );
|
114 |
|
115 |
return {
|
116 |
isPendingDelete: isPending.delete,
|
assets/js/base/context/hooks/cart/use-store-cart.ts
CHANGED
@@ -14,13 +14,8 @@ import type {
|
|
14 |
CartResponseFeeItem,
|
15 |
CartResponseBillingAddress,
|
16 |
CartResponseShippingAddress,
|
17 |
-
CartResponseCouponItem,
|
18 |
-
CartResponseCouponItemWithLabel,
|
19 |
} from '@woocommerce/types';
|
20 |
-
import {
|
21 |
-
emptyHiddenAddressFields,
|
22 |
-
fromEntriesPolyfill,
|
23 |
-
} from '@woocommerce/base-utils';
|
24 |
|
25 |
/**
|
26 |
* Internal dependencies
|
@@ -176,19 +171,8 @@ export const useStoreCart = (
|
|
176 |
const cartFees = cartData.fees.map( ( fee: CartResponseFeeItem ) =>
|
177 |
decodeValues( fee )
|
178 |
);
|
179 |
-
|
180 |
-
// Add a text property to the coupon to allow extensions to modify
|
181 |
-
// the text used to display the coupon, without affecting the
|
182 |
-
// functionality when it comes to removing the coupon.
|
183 |
-
const cartCoupons: CartResponseCouponItemWithLabel[] = cartData.coupons.map(
|
184 |
-
( coupon: CartResponseCouponItem ) => ( {
|
185 |
-
...coupon,
|
186 |
-
label: coupon.code,
|
187 |
-
} )
|
188 |
-
);
|
189 |
-
|
190 |
return {
|
191 |
-
cartCoupons,
|
192 |
cartItems: cartData.items || [],
|
193 |
cartFees,
|
194 |
cartItemsCount: cartData.itemsCount,
|
@@ -199,8 +183,8 @@ export const useStoreCart = (
|
|
199 |
cartTotals,
|
200 |
cartIsLoading,
|
201 |
cartErrors,
|
202 |
-
billingAddress
|
203 |
-
shippingAddress
|
204 |
extensions: cartData.extensions || {},
|
205 |
shippingRates: cartData.shippingRates || [],
|
206 |
shippingRatesLoading,
|
14 |
CartResponseFeeItem,
|
15 |
CartResponseBillingAddress,
|
16 |
CartResponseShippingAddress,
|
|
|
|
|
17 |
} from '@woocommerce/types';
|
18 |
+
import { fromEntriesPolyfill } from '@woocommerce/base-utils';
|
|
|
|
|
|
|
19 |
|
20 |
/**
|
21 |
* Internal dependencies
|
171 |
const cartFees = cartData.fees.map( ( fee: CartResponseFeeItem ) =>
|
172 |
decodeValues( fee )
|
173 |
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
174 |
return {
|
175 |
+
cartCoupons: cartData.coupons,
|
176 |
cartItems: cartData.items || [],
|
177 |
cartFees,
|
178 |
cartItemsCount: cartData.itemsCount,
|
183 |
cartTotals,
|
184 |
cartIsLoading,
|
185 |
cartErrors,
|
186 |
+
billingAddress,
|
187 |
+
shippingAddress,
|
188 |
extensions: cartData.extensions || {},
|
189 |
shippingRates: cartData.shippingRates || [],
|
190 |
shippingRatesLoading,
|
assets/js/base/context/hooks/payment-methods/test/use-payment-method-interface.js
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
/**
|
2 |
* Internal dependencies
|
3 |
*/
|
4 |
-
import { prepareTotalItems } from '../
|
5 |
|
6 |
describe( 'prepareTotalItems', () => {
|
7 |
const fixture = {
|
@@ -17,25 +17,21 @@ describe( 'prepareTotalItems', () => {
|
|
17 |
};
|
18 |
const expected = [
|
19 |
{
|
20 |
-
key: 'total_items',
|
21 |
label: 'Subtotal:',
|
22 |
value: 200,
|
23 |
valueWithTax: 220,
|
24 |
},
|
25 |
{
|
26 |
-
key: 'total_fees',
|
27 |
label: 'Fees:',
|
28 |
value: 100,
|
29 |
valueWithTax: 110,
|
30 |
},
|
31 |
{
|
32 |
-
key: 'total_discount',
|
33 |
label: 'Discount:',
|
34 |
value: 350,
|
35 |
valueWithTax: 400,
|
36 |
},
|
37 |
{
|
38 |
-
key: 'total_tax',
|
39 |
label: 'Taxes:',
|
40 |
value: 30,
|
41 |
valueWithTax: 30,
|
@@ -44,7 +40,6 @@ describe( 'prepareTotalItems', () => {
|
|
44 |
const expectedWithShipping = [
|
45 |
...expected,
|
46 |
{
|
47 |
-
key: 'total_shipping',
|
48 |
label: 'Shipping:',
|
49 |
value: 50,
|
50 |
valueWithTax: 55,
|
1 |
/**
|
2 |
* Internal dependencies
|
3 |
*/
|
4 |
+
import { prepareTotalItems } from '../use-payment-method-interface';
|
5 |
|
6 |
describe( 'prepareTotalItems', () => {
|
7 |
const fixture = {
|
17 |
};
|
18 |
const expected = [
|
19 |
{
|
|
|
20 |
label: 'Subtotal:',
|
21 |
value: 200,
|
22 |
valueWithTax: 220,
|
23 |
},
|
24 |
{
|
|
|
25 |
label: 'Fees:',
|
26 |
value: 100,
|
27 |
valueWithTax: 110,
|
28 |
},
|
29 |
{
|
|
|
30 |
label: 'Discount:',
|
31 |
value: 350,
|
32 |
valueWithTax: 400,
|
33 |
},
|
34 |
{
|
|
|
35 |
label: 'Taxes:',
|
36 |
value: 30,
|
37 |
valueWithTax: 30,
|
40 |
const expectedWithShipping = [
|
41 |
...expected,
|
42 |
{
|
|
|
43 |
label: 'Shipping:',
|
44 |
value: 50,
|
45 |
valueWithTax: 55,
|
assets/js/base/context/hooks/payment-methods/{use-payment-method-interface.ts → use-payment-method-interface.js}
RENAMED
@@ -3,11 +3,10 @@
|
|
3 |
*/
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
import { getCurrencyFromPriceResponse } from '@woocommerce/price-format';
|
6 |
-
import {
|
|
|
7 |
import PaymentMethodLabel from '@woocommerce/base-components/cart-checkout/payment-method-label';
|
8 |
import PaymentMethodIcons from '@woocommerce/base-components/cart-checkout/payment-method-icons';
|
9 |
-
import { getSetting } from '@woocommerce/settings';
|
10 |
-
import deprecated from '@wordpress/deprecated';
|
11 |
|
12 |
/**
|
13 |
* Internal dependencies
|
@@ -20,21 +19,75 @@ import { useCheckoutContext } from '../../providers/cart-checkout/checkout-state
|
|
20 |
import { usePaymentMethodDataContext } from '../../providers/cart-checkout/payment-methods';
|
21 |
import { useShippingDataContext } from '../../providers/cart-checkout/shipping';
|
22 |
import { useCustomerDataContext } from '../../providers/cart-checkout/customer';
|
23 |
-
import { prepareTotalItems } from './utils';
|
24 |
|
25 |
/**
|
26 |
-
*
|
|
|
27 |
*/
|
28 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
const {
|
30 |
isCalculating,
|
31 |
isComplete,
|
32 |
isIdle,
|
33 |
isProcessing,
|
34 |
-
onCheckoutBeforeProcessing,
|
35 |
-
onCheckoutValidationBeforeProcessing,
|
36 |
onCheckoutAfterProcessingWithSuccess,
|
37 |
onCheckoutAfterProcessingWithError,
|
|
|
38 |
onSubmit,
|
39 |
customerId,
|
40 |
} = useCheckoutContext();
|
@@ -53,6 +106,7 @@ export const usePaymentMethodInterface = (): Record< string, unknown > => {
|
|
53 |
selectedRates,
|
54 |
setSelectedRates,
|
55 |
isSelectingRate,
|
|
|
56 |
onShippingRateSuccess,
|
57 |
onShippingRateFail,
|
58 |
onShippingRateSelectSuccess,
|
@@ -86,79 +140,59 @@ export const usePaymentMethodInterface = (): Record< string, unknown > => {
|
|
86 |
};
|
87 |
}, [ cartTotals, needsShipping ] );
|
88 |
|
89 |
-
const deprecatedSetExpressPaymentError = useCallback(
|
90 |
-
( errorMessage = '' ) => {
|
91 |
-
deprecated(
|
92 |
-
'setExpressPaymentError should only be used by Express Payment Methods (using the provided onError handler).',
|
93 |
-
{
|
94 |
-
alternative: '',
|
95 |
-
plugin: 'woocommerce-gutenberg-products-block',
|
96 |
-
link:
|
97 |
-
'https://github.com/woocommerce/woocommerce-gutenberg-products-block/pull/4228',
|
98 |
-
}
|
99 |
-
);
|
100 |
-
setExpressPaymentError( errorMessage );
|
101 |
-
},
|
102 |
-
[ setExpressPaymentError ]
|
103 |
-
);
|
104 |
-
|
105 |
return {
|
106 |
-
activePaymentMethod,
|
107 |
-
billing: {
|
108 |
-
billingData,
|
109 |
-
cartTotal: currentCartTotal.current,
|
110 |
-
currency: getCurrencyFromPriceResponse( cartTotals ),
|
111 |
-
cartTotalItems: currentCartTotals.current,
|
112 |
-
displayPricesIncludingTax: getSetting(
|
113 |
-
'displayCartPricesIncludingTax',
|
114 |
-
false
|
115 |
-
) as boolean,
|
116 |
-
appliedCoupons,
|
117 |
-
customerId,
|
118 |
-
},
|
119 |
checkoutStatus: {
|
120 |
isCalculating,
|
121 |
isComplete,
|
122 |
isIdle,
|
123 |
isProcessing,
|
124 |
},
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
},
|
130 |
-
|
131 |
-
|
132 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
133 |
},
|
134 |
eventRegistration: {
|
135 |
-
onCheckoutBeforeProcessing,
|
136 |
-
onCheckoutValidationBeforeProcessing,
|
137 |
onCheckoutAfterProcessingWithSuccess,
|
138 |
onCheckoutAfterProcessingWithError,
|
|
|
139 |
onShippingRateSuccess,
|
140 |
onShippingRateFail,
|
141 |
onShippingRateSelectSuccess,
|
142 |
onShippingRateSelectFail,
|
143 |
onPaymentProcessing,
|
144 |
},
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
shippingRates,
|
150 |
-
shippingRatesLoading,
|
151 |
-
selectedRates,
|
152 |
-
setSelectedRates,
|
153 |
-
isSelectingRate,
|
154 |
-
shippingAddress,
|
155 |
-
setShippingAddress,
|
156 |
-
needsShipping,
|
157 |
},
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
},
|
|
|
|
|
|
|
162 |
shouldSavePayment,
|
163 |
};
|
164 |
};
|
3 |
*/
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
import { getCurrencyFromPriceResponse } from '@woocommerce/price-format';
|
6 |
+
import { useEffect, useRef } from '@wordpress/element';
|
7 |
+
import { DISPLAY_CART_PRICES_INCLUDING_TAX } from '@woocommerce/block-settings';
|
8 |
import PaymentMethodLabel from '@woocommerce/base-components/cart-checkout/payment-method-label';
|
9 |
import PaymentMethodIcons from '@woocommerce/base-components/cart-checkout/payment-method-icons';
|
|
|
|
|
10 |
|
11 |
/**
|
12 |
* Internal dependencies
|
19 |
import { usePaymentMethodDataContext } from '../../providers/cart-checkout/payment-methods';
|
20 |
import { useShippingDataContext } from '../../providers/cart-checkout/shipping';
|
21 |
import { useCustomerDataContext } from '../../providers/cart-checkout/customer';
|
|
|
22 |
|
23 |
/**
|
24 |
+
* @typedef {import('@woocommerce/type-defs/registered-payment-method-props').RegisteredPaymentMethodProps} RegisteredPaymentMethodProps
|
25 |
+
* @typedef {import('@woocommerce/type-defs/cart').CartTotalItem} CartTotalItem
|
26 |
*/
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Prepares the total items into a shape usable for display as passed on to
|
30 |
+
* registered payment methods.
|
31 |
+
*
|
32 |
+
* @param {Object} totals Current cart total items
|
33 |
+
* @param {boolean} needsShipping Whether or not shipping is needed.
|
34 |
+
*
|
35 |
+
* @return {CartTotalItem[]} Array for cart total items prepared for use.
|
36 |
+
*/
|
37 |
+
export const prepareTotalItems = ( totals, needsShipping ) => {
|
38 |
+
const newTotals = [];
|
39 |
+
const factory = ( label, property ) => {
|
40 |
+
const value = parseInt( totals[ property ], 10 );
|
41 |
+
const tax = parseInt( totals[ property + '_tax' ], 10 );
|
42 |
+
return {
|
43 |
+
label,
|
44 |
+
value,
|
45 |
+
valueWithTax: value + tax,
|
46 |
+
};
|
47 |
+
};
|
48 |
+
newTotals.push(
|
49 |
+
factory(
|
50 |
+
__( 'Subtotal:', 'woo-gutenberg-products-block' ),
|
51 |
+
'total_items'
|
52 |
+
)
|
53 |
+
);
|
54 |
+
newTotals.push(
|
55 |
+
factory( __( 'Fees:', 'woo-gutenberg-products-block' ), 'total_fees' )
|
56 |
+
);
|
57 |
+
newTotals.push(
|
58 |
+
factory(
|
59 |
+
__( 'Discount:', 'woo-gutenberg-products-block' ),
|
60 |
+
'total_discount'
|
61 |
+
)
|
62 |
+
);
|
63 |
+
newTotals.push( {
|
64 |
+
label: __( 'Taxes:', 'woo-gutenberg-products-block' ),
|
65 |
+
value: parseInt( totals.total_tax, 10 ),
|
66 |
+
valueWithTax: parseInt( totals.total_tax, 10 ),
|
67 |
+
} );
|
68 |
+
if ( needsShipping ) {
|
69 |
+
newTotals.push(
|
70 |
+
factory(
|
71 |
+
__( 'Shipping:', 'woo-gutenberg-products-block' ),
|
72 |
+
'total_shipping'
|
73 |
+
)
|
74 |
+
);
|
75 |
+
}
|
76 |
+
return newTotals;
|
77 |
+
};
|
78 |
+
|
79 |
+
/**
|
80 |
+
* @return {RegisteredPaymentMethodProps} Interface to use as payment method props.
|
81 |
+
*/
|
82 |
+
export const usePaymentMethodInterface = () => {
|
83 |
const {
|
84 |
isCalculating,
|
85 |
isComplete,
|
86 |
isIdle,
|
87 |
isProcessing,
|
|
|
|
|
88 |
onCheckoutAfterProcessingWithSuccess,
|
89 |
onCheckoutAfterProcessingWithError,
|
90 |
+
onCheckoutBeforeProcessing,
|
91 |
onSubmit,
|
92 |
customerId,
|
93 |
} = useCheckoutContext();
|
106 |
selectedRates,
|
107 |
setSelectedRates,
|
108 |
isSelectingRate,
|
109 |
+
|
110 |
onShippingRateSuccess,
|
111 |
onShippingRateFail,
|
112 |
onShippingRateSelectSuccess,
|
140 |
};
|
141 |
}, [ cartTotals, needsShipping ] );
|
142 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
143 |
return {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
144 |
checkoutStatus: {
|
145 |
isCalculating,
|
146 |
isComplete,
|
147 |
isIdle,
|
148 |
isProcessing,
|
149 |
},
|
150 |
+
paymentStatus: currentStatus,
|
151 |
+
shippingStatus: {
|
152 |
+
shippingErrorStatus,
|
153 |
+
shippingErrorTypes,
|
154 |
},
|
155 |
+
shippingData: {
|
156 |
+
shippingRates,
|
157 |
+
shippingRatesLoading,
|
158 |
+
selectedRates,
|
159 |
+
setSelectedRates,
|
160 |
+
isSelectingRate,
|
161 |
+
shippingAddress,
|
162 |
+
setShippingAddress,
|
163 |
+
needsShipping,
|
164 |
+
},
|
165 |
+
billing: {
|
166 |
+
billingData,
|
167 |
+
cartTotal: currentCartTotal.current,
|
168 |
+
currency: getCurrencyFromPriceResponse( cartTotals ),
|
169 |
+
cartTotalItems: currentCartTotals.current,
|
170 |
+
displayPricesIncludingTax: DISPLAY_CART_PRICES_INCLUDING_TAX,
|
171 |
+
appliedCoupons,
|
172 |
+
customerId,
|
173 |
},
|
174 |
eventRegistration: {
|
|
|
|
|
175 |
onCheckoutAfterProcessingWithSuccess,
|
176 |
onCheckoutAfterProcessingWithError,
|
177 |
+
onCheckoutBeforeProcessing,
|
178 |
onShippingRateSuccess,
|
179 |
onShippingRateFail,
|
180 |
onShippingRateSelectSuccess,
|
181 |
onShippingRateSelectFail,
|
182 |
onPaymentProcessing,
|
183 |
},
|
184 |
+
components: {
|
185 |
+
ValidationInputError,
|
186 |
+
PaymentMethodIcons,
|
187 |
+
PaymentMethodLabel,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
188 |
},
|
189 |
+
emitResponse: {
|
190 |
+
noticeContexts,
|
191 |
+
responseTypes,
|
192 |
},
|
193 |
+
onSubmit,
|
194 |
+
activePaymentMethod,
|
195 |
+
setExpressPaymentError,
|
196 |
shouldSavePayment,
|
197 |
};
|
198 |
};
|
assets/js/base/context/hooks/payment-methods/use-payment-methods.js
CHANGED
@@ -1,8 +1,3 @@
|
|
1 |
-
/**
|
2 |
-
* External dependencies
|
3 |
-
*/
|
4 |
-
import { useShallowEqual } from '@woocommerce/base-hooks';
|
5 |
-
|
6 |
/**
|
7 |
* Internal dependencies
|
8 |
*/
|
@@ -15,20 +10,12 @@ const usePaymentMethodState = ( express = false ) => {
|
|
15 |
paymentMethodsInitialized,
|
16 |
expressPaymentMethodsInitialized,
|
17 |
} = usePaymentMethodDataContext();
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
return {
|
25 |
-
paymentMethods: express
|
26 |
-
? currentExpressPaymentMethods
|
27 |
-
: currentPaymentMethods,
|
28 |
-
isInitialized: express
|
29 |
-
? expressPaymentMethodsInitialized
|
30 |
-
: paymentMethodsInitialized,
|
31 |
-
};
|
32 |
};
|
33 |
|
34 |
export const usePaymentMethods = () => usePaymentMethodState();
|
|
|
|
|
|
|
|
|
|
|
1 |
/**
|
2 |
* Internal dependencies
|
3 |
*/
|
10 |
paymentMethodsInitialized,
|
11 |
expressPaymentMethodsInitialized,
|
12 |
} = usePaymentMethodDataContext();
|
13 |
+
return express
|
14 |
+
? {
|
15 |
+
paymentMethods: expressPaymentMethods,
|
16 |
+
isInitialized: expressPaymentMethodsInitialized,
|
17 |
+
}
|
18 |
+
: { paymentMethods, isInitialized: paymentMethodsInitialized };
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
};
|
20 |
|
21 |
export const usePaymentMethods = () => usePaymentMethodState();
|
assets/js/base/context/hooks/payment-methods/utils.ts
DELETED
@@ -1,85 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* External dependencies
|
3 |
-
*/
|
4 |
-
import { __ } from '@wordpress/i18n';
|
5 |
-
import {
|
6 |
-
CartResponseTotals,
|
7 |
-
objectHasProp,
|
8 |
-
isString,
|
9 |
-
} from '@woocommerce/types';
|
10 |
-
|
11 |
-
export interface CartTotalItem {
|
12 |
-
key: string;
|
13 |
-
label: string;
|
14 |
-
value: number;
|
15 |
-
valueWithTax: number;
|
16 |
-
}
|
17 |
-
|
18 |
-
/**
|
19 |
-
* Prepares the total items into a shape usable for display as passed on to
|
20 |
-
* registered payment methods.
|
21 |
-
*
|
22 |
-
* @param {Object} totals Current cart total items
|
23 |
-
* @param {boolean} needsShipping Whether or not shipping is needed.
|
24 |
-
*/
|
25 |
-
export const prepareTotalItems = (
|
26 |
-
totals: CartResponseTotals,
|
27 |
-
needsShipping: boolean
|
28 |
-
): CartTotalItem[] => {
|
29 |
-
const newTotals = [];
|
30 |
-
|
31 |
-
const factory = ( label: string, property: string ): CartTotalItem => {
|
32 |
-
const taxProperty = property + '_tax';
|
33 |
-
const value =
|
34 |
-
objectHasProp( totals, property ) && isString( totals[ property ] )
|
35 |
-
? parseInt( totals[ property ] as string, 10 )
|
36 |
-
: 0;
|
37 |
-
const tax =
|
38 |
-
objectHasProp( totals, taxProperty ) &&
|
39 |
-
isString( totals[ taxProperty ] )
|
40 |
-
? parseInt( totals[ taxProperty ] as string, 10 )
|
41 |
-
: 0;
|
42 |
-
return {
|
43 |
-
key: property,
|
44 |
-
label,
|
45 |
-
value,
|
46 |
-
valueWithTax: value + tax,
|
47 |
-
};
|
48 |
-
};
|
49 |
-
|
50 |
-
newTotals.push(
|
51 |
-
factory(
|
52 |
-
__( 'Subtotal:', 'woo-gutenberg-products-block' ),
|
53 |
-
'total_items'
|
54 |
-
)
|
55 |
-
);
|
56 |
-
|
57 |
-
newTotals.push(
|
58 |
-
factory( __( 'Fees:', 'woo-gutenberg-products-block' ), 'total_fees' )
|
59 |
-
);
|
60 |
-
|
61 |
-
newTotals.push(
|
62 |
-
factory(
|
63 |
-
__( 'Discount:', 'woo-gutenberg-products-block' ),
|
64 |
-
'total_discount'
|
65 |
-
)
|
66 |
-
);
|
67 |
-
|
68 |
-
newTotals.push( {
|
69 |
-
key: 'total_tax',
|
70 |
-
label: __( 'Taxes:', 'woo-gutenberg-products-block' ),
|
71 |
-
value: parseInt( totals.total_tax, 10 ),
|
72 |
-
valueWithTax: parseInt( totals.total_tax, 10 ),
|
73 |
-
} );
|
74 |
-
|
75 |
-
if ( needsShipping ) {
|
76 |
-
newTotals.push(
|
77 |
-
factory(
|
78 |
-
__( 'Shipping:', 'woo-gutenberg-products-block' ),
|
79 |
-
'total_shipping'
|
80 |
-
)
|
81 |
-
);
|
82 |
-
}
|
83 |
-
|
84 |
-
return newTotals;
|
85 |
-
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/base/context/hooks/shipping/use-select-shipping-rate.ts
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
*/
|
4 |
import { useState, useEffect, useRef, useCallback } from '@wordpress/element';
|
5 |
import isShallowEqual from '@wordpress/is-shallow-equal';
|
6 |
-
import {
|
7 |
|
8 |
/**
|
9 |
* Internal dependencies
|
@@ -18,9 +18,8 @@ import { useStoreEvents } from '../use-store-events';
|
|
18 |
* @return {string} Selected rate id.
|
19 |
*/
|
20 |
// This will find the selected rate ID in an array of shipping rates.
|
21 |
-
const deriveSelectedRateId = (
|
22 |
-
shippingRates
|
23 |
-
) => shippingRates.find( ( rate ) => rate.selected )?.rate_id;
|
24 |
|
25 |
/**
|
26 |
* This is a custom hook for tracking selected shipping rates for a package and selecting a rate. State is used so
|
@@ -34,8 +33,8 @@ const deriveSelectedRateId = (
|
|
34 |
* - isSelectingRate: True when rates are being resolved to the API.
|
35 |
*/
|
36 |
export const useSelectShippingRate = (
|
37 |
-
packageId: string
|
38 |
-
shippingRates:
|
39 |
): {
|
40 |
selectShippingRate: ( newShippingRateId: string ) => unknown;
|
41 |
selectedShippingRate: string | undefined;
|
3 |
*/
|
4 |
import { useState, useEffect, useRef, useCallback } from '@wordpress/element';
|
5 |
import isShallowEqual from '@wordpress/is-shallow-equal';
|
6 |
+
import { Rate } from '@woocommerce/type-defs/shipping';
|
7 |
|
8 |
/**
|
9 |
* Internal dependencies
|
18 |
* @return {string} Selected rate id.
|
19 |
*/
|
20 |
// This will find the selected rate ID in an array of shipping rates.
|
21 |
+
const deriveSelectedRateId = ( shippingRates: Rate[] ) =>
|
22 |
+
shippingRates.find( ( rate ) => rate.selected )?.rate_id;
|
|
|
23 |
|
24 |
/**
|
25 |
* This is a custom hook for tracking selected shipping rates for a package and selecting a rate. State is used so
|
33 |
* - isSelectingRate: True when rates are being resolved to the API.
|
34 |
*/
|
35 |
export const useSelectShippingRate = (
|
36 |
+
packageId: string,
|
37 |
+
shippingRates: Rate[]
|
38 |
): {
|
39 |
selectShippingRate: ( newShippingRateId: string ) => unknown;
|
40 |
selectedShippingRate: string | undefined;
|
assets/js/base/context/hooks/shipping/use-select-shipping-rates.ts
CHANGED
@@ -16,7 +16,7 @@ import { useThrowError } from '@woocommerce/base-hooks';
|
|
16 |
export const useSelectShippingRates = (): {
|
17 |
selectShippingRate: (
|
18 |
newShippingRateId: string,
|
19 |
-
packageId: string
|
20 |
) => unknown;
|
21 |
isSelectingRate: boolean;
|
22 |
} => {
|
@@ -26,7 +26,7 @@ export const useSelectShippingRates = (): {
|
|
26 |
} ) as {
|
27 |
selectShippingRate: (
|
28 |
newShippingRateId: string,
|
29 |
-
packageId: string
|
30 |
) => Promise< unknown >;
|
31 |
};
|
32 |
|
16 |
export const useSelectShippingRates = (): {
|
17 |
selectShippingRate: (
|
18 |
newShippingRateId: string,
|
19 |
+
packageId: string
|
20 |
) => unknown;
|
21 |
isSelectingRate: boolean;
|
22 |
} => {
|
26 |
} ) as {
|
27 |
selectShippingRate: (
|
28 |
newShippingRateId: string,
|
29 |
+
packageId: string
|
30 |
) => Promise< unknown >;
|
31 |
};
|
32 |
|
assets/js/base/context/hooks/test/use-checkout-submit.js
CHANGED
@@ -12,12 +12,7 @@ import { useCheckoutSubmit } from '../use-checkout-submit';
|
|
12 |
const mockUseCheckoutContext = {
|
13 |
onSubmit: jest.fn(),
|
14 |
};
|
15 |
-
const mockUsePaymentMethodDataContext = {
|
16 |
-
activePaymentMethod: '',
|
17 |
-
currentStatus: {
|
18 |
-
isDoingExpressPayment: false,
|
19 |
-
},
|
20 |
-
};
|
21 |
|
22 |
jest.mock( '../../providers/cart-checkout/checkout-state', () => ( {
|
23 |
useCheckoutContext: () => mockUseCheckoutContext,
|
12 |
const mockUseCheckoutContext = {
|
13 |
onSubmit: jest.fn(),
|
14 |
};
|
15 |
+
const mockUsePaymentMethodDataContext = {};
|
|
|
|
|
|
|
|
|
|
|
16 |
|
17 |
jest.mock( '../../providers/cart-checkout/checkout-state', () => ( {
|
18 |
useCheckoutContext: () => mockUseCheckoutContext,
|
assets/js/base/context/hooks/test/use-store-notices.js
CHANGED
@@ -34,6 +34,7 @@ describe( 'useStoreNotices', () => {
|
|
34 |
// Assert initial state.
|
35 |
expect( storeNoticesData.notices ).toEqual( [] );
|
36 |
expect( storeNoticesData.hasNoticesOfType( 'default' ) ).toBe( false );
|
|
|
37 |
|
38 |
// Add error notice.
|
39 |
act( () => {
|
@@ -42,17 +43,25 @@ describe( 'useStoreNotices', () => {
|
|
42 |
|
43 |
expect( storeNoticesData.notices.length ).toBe( 1 );
|
44 |
expect( storeNoticesData.hasNoticesOfType( 'default' ) ).toBe( true );
|
|
|
45 |
|
46 |
-
|
|
|
|
|
|
|
|
|
|
|
47 |
expect( storeNoticesData.hasNoticesOfType( 'default' ) ).toBe( true );
|
|
|
48 |
|
49 |
// Remove error notice.
|
50 |
act( () => {
|
51 |
storeNoticesData.removeNotices( 'error' );
|
52 |
} );
|
53 |
|
54 |
-
expect( storeNoticesData.notices.length ).toBe(
|
55 |
expect( storeNoticesData.hasNoticesOfType( 'default' ) ).toBe( false );
|
|
|
56 |
|
57 |
// Remove all remaining notices.
|
58 |
act( () => {
|
@@ -61,5 +70,6 @@ describe( 'useStoreNotices', () => {
|
|
61 |
|
62 |
expect( storeNoticesData.notices.length ).toBe( 0 );
|
63 |
expect( storeNoticesData.hasNoticesOfType( 'default' ) ).toBe( false );
|
|
|
64 |
} );
|
65 |
} );
|
34 |
// Assert initial state.
|
35 |
expect( storeNoticesData.notices ).toEqual( [] );
|
36 |
expect( storeNoticesData.hasNoticesOfType( 'default' ) ).toBe( false );
|
37 |
+
expect( storeNoticesData.hasNoticesOfType( 'snackbar' ) ).toBe( false );
|
38 |
|
39 |
// Add error notice.
|
40 |
act( () => {
|
43 |
|
44 |
expect( storeNoticesData.notices.length ).toBe( 1 );
|
45 |
expect( storeNoticesData.hasNoticesOfType( 'default' ) ).toBe( true );
|
46 |
+
expect( storeNoticesData.hasNoticesOfType( 'snackbar' ) ).toBe( false );
|
47 |
|
48 |
+
// Add snackbar notice.
|
49 |
+
act( () => {
|
50 |
+
storeNoticesData.addSnackbarNotice( 'Snackbar notice' );
|
51 |
+
} );
|
52 |
+
|
53 |
+
expect( storeNoticesData.notices.length ).toBe( 2 );
|
54 |
expect( storeNoticesData.hasNoticesOfType( 'default' ) ).toBe( true );
|
55 |
+
expect( storeNoticesData.hasNoticesOfType( 'snackbar' ) ).toBe( true );
|
56 |
|
57 |
// Remove error notice.
|
58 |
act( () => {
|
59 |
storeNoticesData.removeNotices( 'error' );
|
60 |
} );
|
61 |
|
62 |
+
expect( storeNoticesData.notices.length ).toBe( 1 );
|
63 |
expect( storeNoticesData.hasNoticesOfType( 'default' ) ).toBe( false );
|
64 |
+
expect( storeNoticesData.hasNoticesOfType( 'snackbar' ) ).toBe( true );
|
65 |
|
66 |
// Remove all remaining notices.
|
67 |
act( () => {
|
70 |
|
71 |
expect( storeNoticesData.notices.length ).toBe( 0 );
|
72 |
expect( storeNoticesData.hasNoticesOfType( 'default' ) ).toBe( false );
|
73 |
+
expect( storeNoticesData.hasNoticesOfType( 'snackbar' ) ).toBe( false );
|
74 |
} );
|
75 |
} );
|
assets/js/base/context/hooks/test/use-store-snackbar-notices.js
DELETED
@@ -1,51 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* External dependencies
|
3 |
-
*/
|
4 |
-
import { render, act } from '@testing-library/react';
|
5 |
-
import { StoreSnackbarNoticesProvider } from '@woocommerce/base-context/providers';
|
6 |
-
|
7 |
-
/**
|
8 |
-
* Internal dependencies
|
9 |
-
*/
|
10 |
-
import { useStoreSnackbarNotices } from '../use-store-snackbar-notices';
|
11 |
-
|
12 |
-
describe( 'useStoreNoticesWithSnackbar', () => {
|
13 |
-
function setup() {
|
14 |
-
const returnVal = {};
|
15 |
-
|
16 |
-
function TestComponent() {
|
17 |
-
Object.assign( returnVal, useStoreSnackbarNotices() );
|
18 |
-
|
19 |
-
return null;
|
20 |
-
}
|
21 |
-
|
22 |
-
render(
|
23 |
-
<StoreSnackbarNoticesProvider>
|
24 |
-
<TestComponent />
|
25 |
-
</StoreSnackbarNoticesProvider>
|
26 |
-
);
|
27 |
-
|
28 |
-
return returnVal;
|
29 |
-
}
|
30 |
-
|
31 |
-
test( 'allows adding and removing notices and checking if there are notices of a specific type', () => {
|
32 |
-
const storeNoticesData = setup();
|
33 |
-
|
34 |
-
// Assert initial state.
|
35 |
-
expect( storeNoticesData.notices ).toEqual( [] );
|
36 |
-
|
37 |
-
// Add snackbar notice.
|
38 |
-
act( () => {
|
39 |
-
storeNoticesData.addSnackbarNotice( 'Snackbar notice' );
|
40 |
-
} );
|
41 |
-
|
42 |
-
expect( storeNoticesData.notices.length ).toBe( 1 );
|
43 |
-
|
44 |
-
// Remove all remaining notices.
|
45 |
-
act( () => {
|
46 |
-
storeNoticesData.removeNotices();
|
47 |
-
} );
|
48 |
-
|
49 |
-
expect( storeNoticesData.notices.length ).toBe( 0 );
|
50 |
-
} );
|
51 |
-
} );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/base/context/hooks/use-checkout-address.js
CHANGED
@@ -87,16 +87,10 @@ export const useCheckoutAddress = () => {
|
|
87 |
previousBillingData.current = billingData;
|
88 |
setBillingData( shippingAddress );
|
89 |
} else {
|
90 |
-
const {
|
91 |
-
// We need to pluck out email and phone from previous billing data because they can be empty, causing the current email and phone to get emptied. See issue #4155
|
92 |
-
/* eslint-disable no-unused-vars */
|
93 |
-
email,
|
94 |
-
phone,
|
95 |
-
/* eslint-enable no-unused-vars */
|
96 |
-
...billingAddress
|
97 |
-
} = previousBillingData.current;
|
98 |
setBillingData( {
|
99 |
-
...
|
|
|
|
|
100 |
} );
|
101 |
}
|
102 |
currentShippingAsBilling.current = shippingAsBilling;
|
87 |
previousBillingData.current = billingData;
|
88 |
setBillingData( shippingAddress );
|
89 |
} else {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
90 |
setBillingData( {
|
91 |
+
...previousBillingData.current,
|
92 |
+
email: undefined,
|
93 |
+
phone: undefined,
|
94 |
} );
|
95 |
}
|
96 |
currentShippingAsBilling.current = shippingAsBilling;
|
assets/js/base/context/hooks/use-checkout-submit.js
CHANGED
@@ -25,14 +25,8 @@ export const useCheckoutSubmit = () => {
|
|
25 |
hasError,
|
26 |
} = useCheckoutContext();
|
27 |
const { paymentMethods = {} } = usePaymentMethods();
|
28 |
-
const {
|
29 |
-
activePaymentMethod,
|
30 |
-
currentStatus: paymentStatus,
|
31 |
-
} = usePaymentMethodDataContext();
|
32 |
const paymentMethod = paymentMethods[ activePaymentMethod ] || {};
|
33 |
-
const waitingForProcessing =
|
34 |
-
isProcessing || isAfterProcessing || isBeforeProcessing;
|
35 |
-
const waitingForRedirect = isComplete && ! hasError;
|
36 |
|
37 |
return {
|
38 |
submitButtonText:
|
@@ -40,8 +34,8 @@ export const useCheckoutSubmit = () => {
|
|
40 |
__( 'Place Order', 'woo-gutenberg-products-block' ),
|
41 |
onSubmit,
|
42 |
isCalculating,
|
43 |
-
|
44 |
-
|
45 |
-
waitingForRedirect,
|
46 |
};
|
47 |
};
|
25 |
hasError,
|
26 |
} = useCheckoutContext();
|
27 |
const { paymentMethods = {} } = usePaymentMethods();
|
28 |
+
const { activePaymentMethod } = usePaymentMethodDataContext();
|
|
|
|
|
|
|
29 |
const paymentMethod = paymentMethods[ activePaymentMethod ] || {};
|
|
|
|
|
|
|
30 |
|
31 |
return {
|
32 |
submitButtonText:
|
34 |
__( 'Place Order', 'woo-gutenberg-products-block' ),
|
35 |
onSubmit,
|
36 |
isCalculating,
|
37 |
+
waitingForProcessing:
|
38 |
+
isProcessing || isAfterProcessing || isBeforeProcessing,
|
39 |
+
waitingForRedirect: isComplete && ! hasError,
|
40 |
};
|
41 |
};
|
assets/js/base/context/hooks/use-customer-data.ts
CHANGED
@@ -9,7 +9,6 @@ import isShallowEqual from '@wordpress/is-shallow-equal';
|
|
9 |
import {
|
10 |
formatStoreApiErrorMessage,
|
11 |
pluckAddress,
|
12 |
-
pluckEmail,
|
13 |
} from '@woocommerce/base-utils';
|
14 |
import type {
|
15 |
CartResponseBillingAddress,
|
@@ -27,16 +26,8 @@ declare type CustomerData = {
|
|
27 |
import { useStoreCart } from './cart/use-store-cart';
|
28 |
import { useStoreNotices } from './use-store-notices';
|
29 |
|
30 |
-
function instanceOfCartResponseBillingAddress(
|
31 |
-
address: CartResponseBillingAddress | CartResponseShippingAddress
|
32 |
-
): address is CartResponseBillingAddress {
|
33 |
-
return 'email' in address;
|
34 |
-
}
|
35 |
-
|
36 |
/**
|
37 |
-
* Does a shallow compare of important address data to determine if the cart needs updating
|
38 |
-
*
|
39 |
-
* This takes the current and previous address into account, as well as the billing email field.
|
40 |
*
|
41 |
* @param {Object} previousAddress An object containing all previous address information
|
42 |
* @param {Object} address An object containing all address information
|
@@ -49,20 +40,12 @@ const shouldUpdateAddressStore = <
|
|
49 |
previousAddress: T,
|
50 |
address: T
|
51 |
): boolean => {
|
52 |
-
if (
|
53 |
-
|
54 |
-
pluckEmail( address ) !==
|
55 |
-
pluckEmail( previousAddress as CartResponseBillingAddress )
|
56 |
-
) {
|
57 |
-
return true;
|
58 |
}
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
! isShallowEqual(
|
63 |
-
pluckAddress( previousAddress ),
|
64 |
-
pluckAddress( address )
|
65 |
-
)
|
66 |
);
|
67 |
};
|
68 |
|
@@ -73,7 +56,7 @@ export const useCustomerData = (): {
|
|
73 |
billingData: CartResponseBillingAddress;
|
74 |
shippingAddress: CartResponseShippingAddress;
|
75 |
setBillingData: ( data: CartResponseBillingAddress ) => void;
|
76 |
-
setShippingAddress: ( data:
|
77 |
} => {
|
78 |
const { updateCustomerData } = useDispatch( storeKey );
|
79 |
const { addErrorNotice, removeNotice } = useStoreNotices();
|
9 |
import {
|
10 |
formatStoreApiErrorMessage,
|
11 |
pluckAddress,
|
|
|
12 |
} from '@woocommerce/base-utils';
|
13 |
import type {
|
14 |
CartResponseBillingAddress,
|
26 |
import { useStoreCart } from './cart/use-store-cart';
|
27 |
import { useStoreNotices } from './use-store-notices';
|
28 |
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
/**
|
30 |
+
* Does a shallow compare of important address data to determine if the cart needs updating.
|
|
|
|
|
31 |
*
|
32 |
* @param {Object} previousAddress An object containing all previous address information
|
33 |
* @param {Object} address An object containing all address information
|
40 |
previousAddress: T,
|
41 |
address: T
|
42 |
): boolean => {
|
43 |
+
if ( ! address.country ) {
|
44 |
+
return false;
|
|
|
|
|
|
|
|
|
45 |
}
|
46 |
+
return ! isShallowEqual(
|
47 |
+
pluckAddress( previousAddress ),
|
48 |
+
pluckAddress( address )
|
|
|
|
|
|
|
|
|
49 |
);
|
50 |
};
|
51 |
|
56 |
billingData: CartResponseBillingAddress;
|
57 |
shippingAddress: CartResponseShippingAddress;
|
58 |
setBillingData: ( data: CartResponseBillingAddress ) => void;
|
59 |
+
setShippingAddress: ( data: CartResponseBillingAddress ) => void;
|
60 |
} => {
|
61 |
const { updateCustomerData } = useDispatch( storeKey );
|
62 |
const { addErrorNotice, removeNotice } = useStoreNotices();
|
assets/js/base/context/hooks/use-emit-response.js
ADDED
@@ -0,0 +1,59 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* @typedef {import('@woocommerce/type-defs/hooks').EmitResponseTypes} EmitResponseTypes
|
3 |
+
* @typedef {import('@woocommerce/type-defs/hooks').NoticeContexts} NoticeContexts
|
4 |
+
* @typedef {import('@woocommerce/type-defs/hooks').EmitResponseApi} EmitResponseApi
|
5 |
+
*/
|
6 |
+
|
7 |
+
const isResponseOf = ( response, type ) => {
|
8 |
+
return !! response.type && response.type === type;
|
9 |
+
};
|
10 |
+
|
11 |
+
/**
|
12 |
+
* @type {EmitResponseTypes}
|
13 |
+
*/
|
14 |
+
const responseTypes = {
|
15 |
+
SUCCESS: 'success',
|
16 |
+
FAIL: 'failure',
|
17 |
+
ERROR: 'error',
|
18 |
+
};
|
19 |
+
|
20 |
+
/**
|
21 |
+
* @type {NoticeContexts}
|
22 |
+
*/
|
23 |
+
const noticeContexts = {
|
24 |
+
PAYMENTS: 'wc/payment-area',
|
25 |
+
EXPRESS_PAYMENTS: 'wc/express-payment-area',
|
26 |
+
};
|
27 |
+
|
28 |
+
const isSuccessResponse = ( response ) => {
|
29 |
+
return isResponseOf( response, responseTypes.SUCCESS );
|
30 |
+
};
|
31 |
+
|
32 |
+
const isErrorResponse = ( response ) => {
|
33 |
+
return isResponseOf( response, responseTypes.ERROR );
|
34 |
+
};
|
35 |
+
|
36 |
+
const isFailResponse = ( response ) => {
|
37 |
+
return isResponseOf( response, responseTypes.FAIL );
|
38 |
+
};
|
39 |
+
|
40 |
+
const shouldRetry = ( response ) => {
|
41 |
+
return typeof response.retry === 'undefined' || response.retry === true;
|
42 |
+
};
|
43 |
+
|
44 |
+
/**
|
45 |
+
* A custom hook exposing response utilities for emitters.
|
46 |
+
*
|
47 |
+
* @return {EmitResponseApi} Various interfaces for validating and implementing
|
48 |
+
* emitter response properties.
|
49 |
+
*/
|
50 |
+
export const useEmitResponse = () => {
|
51 |
+
return {
|
52 |
+
responseTypes,
|
53 |
+
noticeContexts,
|
54 |
+
shouldRetry,
|
55 |
+
isSuccessResponse,
|
56 |
+
isErrorResponse,
|
57 |
+
isFailResponse,
|
58 |
+
};
|
59 |
+
};
|
assets/js/base/context/hooks/use-emit-response.ts
DELETED
@@ -1,66 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* External dependencies
|
3 |
-
*/
|
4 |
-
import { isObject } from '@woocommerce/types';
|
5 |
-
|
6 |
-
export enum responseTypes {
|
7 |
-
SUCCESS = 'success',
|
8 |
-
FAIL = 'failure',
|
9 |
-
ERROR = 'error',
|
10 |
-
}
|
11 |
-
|
12 |
-
export enum noticeContexts {
|
13 |
-
PAYMENTS = 'wc/payment-area',
|
14 |
-
EXPRESS_PAYMENTS = 'wc/express-payment-area',
|
15 |
-
}
|
16 |
-
|
17 |
-
export interface ResponseType extends Record< string, unknown > {
|
18 |
-
type: responseTypes;
|
19 |
-
retry?: boolean;
|
20 |
-
}
|
21 |
-
|
22 |
-
const isResponseOf = (
|
23 |
-
response: unknown,
|
24 |
-
type: string
|
25 |
-
): response is ResponseType => {
|
26 |
-
return isObject( response ) && 'type' in response && response.type === type;
|
27 |
-
};
|
28 |
-
|
29 |
-
export const isSuccessResponse = (
|
30 |
-
response: unknown
|
31 |
-
): response is ResponseType => {
|
32 |
-
return isResponseOf( response, responseTypes.SUCCESS );
|
33 |
-
};
|
34 |
-
|
35 |
-
export const isErrorResponse = (
|
36 |
-
response: unknown
|
37 |
-
): response is ResponseType => {
|
38 |
-
return isResponseOf( response, responseTypes.ERROR );
|
39 |
-
};
|
40 |
-
|
41 |
-
export const isFailResponse = (
|
42 |
-
response: unknown
|
43 |
-
): response is ResponseType => {
|
44 |
-
return isResponseOf( response, responseTypes.FAIL );
|
45 |
-
};
|
46 |
-
|
47 |
-
export const shouldRetry = ( response: unknown ): boolean => {
|
48 |
-
return (
|
49 |
-
! isObject( response ) ||
|
50 |
-
typeof response.retry === 'undefined' ||
|
51 |
-
response.retry === true
|
52 |
-
);
|
53 |
-
};
|
54 |
-
|
55 |
-
/**
|
56 |
-
* A custom hook exposing response utilities for emitters.
|
57 |
-
*/
|
58 |
-
export const useEmitResponse = () =>
|
59 |
-
( {
|
60 |
-
responseTypes,
|
61 |
-
noticeContexts,
|
62 |
-
shouldRetry,
|
63 |
-
isSuccessResponse,
|
64 |
-
isErrorResponse,
|
65 |
-
isFailResponse,
|
66 |
-
} as const );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/base/context/hooks/use-store-events.ts
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { doAction } from '@wordpress/hooks';
|
5 |
-
import { useCallback
|
6 |
|
7 |
/**
|
8 |
* Internal dependencies
|
@@ -22,13 +22,6 @@ export const useStoreEvents = (): {
|
|
22 |
dispatchCheckoutEvent: StoreEvent;
|
23 |
} => {
|
24 |
const storeCart = useStoreCart();
|
25 |
-
const currentStoreCart = useRef( storeCart );
|
26 |
-
|
27 |
-
// Track the latest version of the cart so we can use the current value in our callback function below without triggering
|
28 |
-
// other useEffect hooks using dispatchCheckoutEvent as a dependency.
|
29 |
-
useEffect( () => {
|
30 |
-
currentStoreCart.current = storeCart;
|
31 |
-
}, [ storeCart ] );
|
32 |
|
33 |
const dispatchStoreEvent = useCallback( ( eventName, eventParams = {} ) => {
|
34 |
try {
|
@@ -50,7 +43,7 @@ export const useStoreEvents = (): {
|
|
50 |
`experimental__woocommerce_blocks-checkout-${ eventName }`,
|
51 |
{
|
52 |
...eventParams,
|
53 |
-
storeCart
|
54 |
}
|
55 |
);
|
56 |
} catch ( e ) {
|
@@ -59,7 +52,7 @@ export const useStoreEvents = (): {
|
|
59 |
console.error( e );
|
60 |
}
|
61 |
},
|
62 |
-
[]
|
63 |
);
|
64 |
|
65 |
return { dispatchStoreEvent, dispatchCheckoutEvent };
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { doAction } from '@wordpress/hooks';
|
5 |
+
import { useCallback } from '@wordpress/element';
|
6 |
|
7 |
/**
|
8 |
* Internal dependencies
|
22 |
dispatchCheckoutEvent: StoreEvent;
|
23 |
} => {
|
24 |
const storeCart = useStoreCart();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
25 |
|
26 |
const dispatchStoreEvent = useCallback( ( eventName, eventParams = {} ) => {
|
27 |
try {
|
43 |
`experimental__woocommerce_blocks-checkout-${ eventName }`,
|
44 |
{
|
45 |
...eventParams,
|
46 |
+
storeCart,
|
47 |
}
|
48 |
);
|
49 |
} catch ( e ) {
|
52 |
console.error( e );
|
53 |
}
|
54 |
},
|
55 |
+
[ storeCart ]
|
56 |
);
|
57 |
|
58 |
return { dispatchStoreEvent, dispatchCheckoutEvent };
|
assets/js/base/context/hooks/use-store-notices.js
CHANGED
@@ -13,6 +13,7 @@ export const useStoreNotices = () => {
|
|
13 |
notices,
|
14 |
createNotice,
|
15 |
removeNotice,
|
|
|
16 |
setIsSuppressed,
|
17 |
} = useStoreNoticesContext();
|
18 |
// Added to a ref so the surface for notices doesn't change frequently
|
@@ -65,8 +66,11 @@ export const useStoreNotices = () => {
|
|
65 |
void createNotice( 'success', text, {
|
66 |
...noticeProps,
|
67 |
} ),
|
|
|
|
|
|
|
68 |
} ),
|
69 |
-
[ createNotice ]
|
70 |
);
|
71 |
|
72 |
return {
|
13 |
notices,
|
14 |
createNotice,
|
15 |
removeNotice,
|
16 |
+
createSnackbarNotice,
|
17 |
setIsSuppressed,
|
18 |
} = useStoreNoticesContext();
|
19 |
// Added to a ref so the surface for notices doesn't change frequently
|
66 |
void createNotice( 'success', text, {
|
67 |
...noticeProps,
|
68 |
} ),
|
69 |
+
addSnackbarNotice: ( text, noticeProps = {} ) => {
|
70 |
+
createSnackbarNotice( text, noticeProps );
|
71 |
+
},
|
72 |
} ),
|
73 |
+
[ createNotice, createSnackbarNotice ]
|
74 |
);
|
75 |
|
76 |
return {
|
assets/js/base/context/hooks/use-store-snackbar-notices.js
DELETED
@@ -1,52 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* External dependencies
|
3 |
-
*/
|
4 |
-
import { useMemo, useRef, useEffect } from '@wordpress/element';
|
5 |
-
import { useStoreSnackbarNoticesContext } from '@woocommerce/base-context/providers';
|
6 |
-
|
7 |
-
export const useStoreSnackbarNotices = () => {
|
8 |
-
const {
|
9 |
-
notices,
|
10 |
-
createSnackbarNotice,
|
11 |
-
removeSnackbarNotice,
|
12 |
-
setIsSuppressed,
|
13 |
-
} = useStoreSnackbarNoticesContext();
|
14 |
-
// Added to a ref so the surface for notices doesn't change frequently
|
15 |
-
// and thus can be used as dependencies on effects.
|
16 |
-
const currentNotices = useRef( notices );
|
17 |
-
|
18 |
-
// Update notices ref whenever they change
|
19 |
-
useEffect( () => {
|
20 |
-
currentNotices.current = notices;
|
21 |
-
}, [ notices ] );
|
22 |
-
|
23 |
-
const noticesApi = useMemo(
|
24 |
-
() => ( {
|
25 |
-
removeNotices: ( status = null ) => {
|
26 |
-
currentNotices.current.forEach( ( notice ) => {
|
27 |
-
if ( status === null || notice.status === status ) {
|
28 |
-
removeSnackbarNotice( notice.id );
|
29 |
-
}
|
30 |
-
} );
|
31 |
-
},
|
32 |
-
removeSnackbarNotice,
|
33 |
-
} ),
|
34 |
-
[ removeSnackbarNotice ]
|
35 |
-
);
|
36 |
-
|
37 |
-
const noticeCreators = useMemo(
|
38 |
-
() => ( {
|
39 |
-
addSnackbarNotice: ( text, noticeProps = {} ) => {
|
40 |
-
createSnackbarNotice( text, noticeProps );
|
41 |
-
},
|
42 |
-
} ),
|
43 |
-
[ createSnackbarNotice ]
|
44 |
-
);
|
45 |
-
|
46 |
-
return {
|
47 |
-
notices,
|
48 |
-
...noticesApi,
|
49 |
-
...noticeCreators,
|
50 |
-
setIsSuppressed,
|
51 |
-
};
|
52 |
-
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/base/context/{index.ts → index.js}
RENAMED
File without changes
|
assets/js/base/context/providers/add-to-cart-form/form-state/index.js
CHANGED
@@ -206,31 +206,17 @@ export const AddToCartFormStateContextProvider = ( {
|
|
206 |
*/
|
207 |
useEffect( () => {
|
208 |
if ( addToCartFormState.status === STATUS.AFTER_PROCESSING ) {
|
209 |
-
// @todo: This data package differs from what is passed through in
|
210 |
-
// the checkout state context. Should we introduce a "context"
|
211 |
-
// property in the data package for this emitted event so that
|
212 |
-
// observers are able to know what context the event is firing in?
|
213 |
const data = {
|
214 |
processingResponse: addToCartFormState.processingResponse,
|
215 |
};
|
216 |
|
217 |
-
const handleErrorResponse = (
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
message
|
225 |
-
) {
|
226 |
-
const errorOptions = messageContext
|
227 |
-
? { context: messageContext }
|
228 |
-
: undefined;
|
229 |
-
handled = true;
|
230 |
-
addErrorNotice( message, errorOptions );
|
231 |
-
}
|
232 |
-
} );
|
233 |
-
return handled;
|
234 |
};
|
235 |
|
236 |
if ( addToCartFormState.hasError ) {
|
@@ -239,8 +225,13 @@ export const AddToCartFormStateContextProvider = ( {
|
|
239 |
currentObservers,
|
240 |
EMIT_TYPES.ADD_TO_CART_AFTER_PROCESSING_WITH_ERROR,
|
241 |
data
|
242 |
-
).then( (
|
243 |
-
if (
|
|
|
|
|
|
|
|
|
|
|
244 |
// no error handling in place by anything so let's fall back to default
|
245 |
const message =
|
246 |
data.processingResponse?.message ||
|
@@ -261,8 +252,12 @@ export const AddToCartFormStateContextProvider = ( {
|
|
261 |
currentObservers,
|
262 |
EMIT_TYPES.ADD_TO_CART_AFTER_PROCESSING_WITH_SUCCESS,
|
263 |
data
|
264 |
-
).then( (
|
265 |
-
if (
|
|
|
|
|
|
|
|
|
266 |
// this will set an error which will end up
|
267 |
// triggering the onAddToCartAfterProcessingWithError emitter.
|
268 |
// and then setting to IDLE state.
|
206 |
*/
|
207 |
useEffect( () => {
|
208 |
if ( addToCartFormState.status === STATUS.AFTER_PROCESSING ) {
|
|
|
|
|
|
|
|
|
209 |
const data = {
|
210 |
processingResponse: addToCartFormState.processingResponse,
|
211 |
};
|
212 |
|
213 |
+
const handleErrorResponse = ( response ) => {
|
214 |
+
if ( response.message ) {
|
215 |
+
const errorOptions = response.messageContext
|
216 |
+
? { context: response.messageContext }
|
217 |
+
: undefined;
|
218 |
+
addErrorNotice( response.message, errorOptions );
|
219 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
220 |
};
|
221 |
|
222 |
if ( addToCartFormState.hasError ) {
|
225 |
currentObservers,
|
226 |
EMIT_TYPES.ADD_TO_CART_AFTER_PROCESSING_WITH_ERROR,
|
227 |
data
|
228 |
+
).then( ( response ) => {
|
229 |
+
if (
|
230 |
+
isErrorResponse( response ) ||
|
231 |
+
isFailResponse( response )
|
232 |
+
) {
|
233 |
+
handleErrorResponse( response );
|
234 |
+
} else {
|
235 |
// no error handling in place by anything so let's fall back to default
|
236 |
const message =
|
237 |
data.processingResponse?.message ||
|
252 |
currentObservers,
|
253 |
EMIT_TYPES.ADD_TO_CART_AFTER_PROCESSING_WITH_SUCCESS,
|
254 |
data
|
255 |
+
).then( ( response ) => {
|
256 |
+
if (
|
257 |
+
isErrorResponse( response ) ||
|
258 |
+
isFailResponse( response )
|
259 |
+
) {
|
260 |
+
handleErrorResponse( response );
|
261 |
// this will set an error which will end up
|
262 |
// triggering the onAddToCartAfterProcessingWithError emitter.
|
263 |
// and then setting to IDLE state.
|
assets/js/base/context/providers/add-to-cart-form/form/submit/index.js
CHANGED
@@ -5,6 +5,7 @@ import { __ } from '@wordpress/i18n';
|
|
5 |
import triggerFetch from '@wordpress/api-fetch';
|
6 |
import { useEffect, useCallback, useState } from '@wordpress/element';
|
7 |
import { decodeEntities } from '@wordpress/html-entities';
|
|
|
8 |
|
9 |
/**
|
10 |
* Internal dependencies
|
@@ -109,6 +110,7 @@ const FormSubmit = () => {
|
|
109 |
}
|
110 |
dispatchActions.setAfterProcessing( response );
|
111 |
setIsSubmitting( false );
|
|
|
112 |
} );
|
113 |
} )
|
114 |
.catch( ( error ) => {
|
5 |
import triggerFetch from '@wordpress/api-fetch';
|
6 |
import { useEffect, useCallback, useState } from '@wordpress/element';
|
7 |
import { decodeEntities } from '@wordpress/html-entities';
|
8 |
+
import { triggerFragmentRefresh } from '@woocommerce/base-utils';
|
9 |
|
10 |
/**
|
11 |
* Internal dependencies
|
110 |
}
|
111 |
dispatchActions.setAfterProcessing( response );
|
112 |
setIsSubmitting( false );
|
113 |
+
triggerFragmentRefresh();
|
114 |
} );
|
115 |
} )
|
116 |
.catch( ( error ) => {
|
assets/js/base/context/providers/cart-checkout/checkout-state/actions.js
ADDED
@@ -0,0 +1,82 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* Internal dependencies
|
3 |
+
*/
|
4 |
+
import { TYPES } from './constants';
|
5 |
+
|
6 |
+
const {
|
7 |
+
SET_PRISTINE,
|
8 |
+
SET_IDLE,
|
9 |
+
SET_PROCESSING,
|
10 |
+
SET_BEFORE_PROCESSING,
|
11 |
+
SET_AFTER_PROCESSING,
|
12 |
+
SET_PROCESSING_RESPONSE,
|
13 |
+
SET_REDIRECT_URL,
|
14 |
+
SET_COMPLETE,
|
15 |
+
SET_HAS_ERROR,
|
16 |
+
SET_NO_ERROR,
|
17 |
+
INCREMENT_CALCULATING,
|
18 |
+
DECREMENT_CALCULATING,
|
19 |
+
SET_CUSTOMER_ID,
|
20 |
+
SET_ORDER_ID,
|
21 |
+
SET_SHOULD_CREATE_ACCOUNT,
|
22 |
+
SET_ORDER_NOTES,
|
23 |
+
} = TYPES;
|
24 |
+
|
25 |
+
/**
|
26 |
+
* All the actions that can be dispatched for the checkout.
|
27 |
+
*/
|
28 |
+
export const actions = {
|
29 |
+
setPristine: () => ( {
|
30 |
+
type: SET_PRISTINE,
|
31 |
+
} ),
|
32 |
+
setIdle: () => ( {
|
33 |
+
type: SET_IDLE,
|
34 |
+
} ),
|
35 |
+
setProcessing: () => ( {
|
36 |
+
type: SET_PROCESSING,
|
37 |
+
} ),
|
38 |
+
setRedirectUrl: ( url ) => ( {
|
39 |
+
type: SET_REDIRECT_URL,
|
40 |
+
url,
|
41 |
+
} ),
|
42 |
+
setProcessingResponse: ( data ) => ( {
|
43 |
+
type: SET_PROCESSING_RESPONSE,
|
44 |
+
data,
|
45 |
+
} ),
|
46 |
+
setComplete: ( data ) => ( {
|
47 |
+
type: SET_COMPLETE,
|
48 |
+
data,
|
49 |
+
} ),
|
50 |
+
setBeforeProcessing: () => ( {
|
51 |
+
type: SET_BEFORE_PROCESSING,
|
52 |
+
} ),
|
53 |
+
setAfterProcessing: () => ( {
|
54 |
+
type: SET_AFTER_PROCESSING,
|
55 |
+
} ),
|
56 |
+
setHasError: ( hasError = true ) => {
|
57 |
+
const type = hasError ? SET_HAS_ERROR : SET_NO_ERROR;
|
58 |
+
return { type };
|
59 |
+
},
|
60 |
+
incrementCalculating: () => ( {
|
61 |
+
type: INCREMENT_CALCULATING,
|
62 |
+
} ),
|
63 |
+
decrementCalculating: () => ( {
|
64 |
+
type: DECREMENT_CALCULATING,
|
65 |
+
} ),
|
66 |
+
setCustomerId: ( customerId ) => ( {
|
67 |
+
type: SET_CUSTOMER_ID,
|
68 |
+
customerId,
|
69 |
+
} ),
|
70 |
+
setOrderId: ( orderId ) => ( {
|
71 |
+
type: SET_ORDER_ID,
|
72 |
+
orderId,
|
73 |
+
} ),
|
74 |
+
setShouldCreateAccount: ( shouldCreateAccount ) => ( {
|
75 |
+
type: SET_SHOULD_CREATE_ACCOUNT,
|
76 |
+
shouldCreateAccount,
|
77 |
+
} ),
|
78 |
+
setOrderNotes: ( orderNotes ) => ( {
|
79 |
+
type: SET_ORDER_NOTES,
|
80 |
+
orderNotes,
|
81 |
+
} ),
|
82 |
+
};
|
assets/js/base/context/providers/cart-checkout/checkout-state/actions.ts
DELETED
@@ -1,110 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* Internal dependencies
|
3 |
-
*/
|
4 |
-
import type { PaymentResultDataType } from './types';
|
5 |
-
|
6 |
-
export enum ACTION {
|
7 |
-
SET_IDLE = 'set_idle',
|
8 |
-
SET_PRISTINE = 'set_pristine',
|
9 |
-
SET_REDIRECT_URL = 'set_redirect_url',
|
10 |
-
SET_COMPLETE = 'set_checkout_complete',
|
11 |
-
SET_BEFORE_PROCESSING = 'set_before_processing',
|
12 |
-
SET_AFTER_PROCESSING = 'set_after_processing',
|
13 |
-
SET_PROCESSING_RESPONSE = 'set_processing_response',
|
14 |
-
SET_PROCESSING = 'set_checkout_is_processing',
|
15 |
-
SET_HAS_ERROR = 'set_checkout_has_error',
|
16 |
-
SET_NO_ERROR = 'set_checkout_no_error',
|
17 |
-
SET_CUSTOMER_ID = 'set_checkout_customer_id',
|
18 |
-
SET_ORDER_ID = 'set_checkout_order_id',
|
19 |
-
SET_ORDER_NOTES = 'set_checkout_order_notes',
|
20 |
-
INCREMENT_CALCULATING = 'increment_calculating',
|
21 |
-
DECREMENT_CALCULATING = 'decrement_calculating',
|
22 |
-
SET_SHOULD_CREATE_ACCOUNT = 'set_should_create_account',
|
23 |
-
}
|
24 |
-
|
25 |
-
export interface ActionType {
|
26 |
-
type: ACTION;
|
27 |
-
data?:
|
28 |
-
| Record< string, unknown >
|
29 |
-
| Record< string, never >
|
30 |
-
| PaymentResultDataType;
|
31 |
-
url?: string;
|
32 |
-
customerId?: number;
|
33 |
-
orderId?: number;
|
34 |
-
shouldCreateAccount?: boolean;
|
35 |
-
hasError?: boolean;
|
36 |
-
orderNotes?: string;
|
37 |
-
}
|
38 |
-
|
39 |
-
/**
|
40 |
-
* All the actions that can be dispatched for the checkout.
|
41 |
-
*/
|
42 |
-
export const actions = {
|
43 |
-
setPristine: () =>
|
44 |
-
( {
|
45 |
-
type: ACTION.SET_PRISTINE,
|
46 |
-
} as const ),
|
47 |
-
setIdle: () =>
|
48 |
-
( {
|
49 |
-
type: ACTION.SET_IDLE,
|
50 |
-
} as const ),
|
51 |
-
setProcessing: () =>
|
52 |
-
( {
|
53 |
-
type: ACTION.SET_PROCESSING,
|
54 |
-
} as const ),
|
55 |
-
setRedirectUrl: ( url: string ) =>
|
56 |
-
( {
|
57 |
-
type: ACTION.SET_REDIRECT_URL,
|
58 |
-
url,
|
59 |
-
} as const ),
|
60 |
-
setProcessingResponse: ( data: PaymentResultDataType ) =>
|
61 |
-
( {
|
62 |
-
type: ACTION.SET_PROCESSING_RESPONSE,
|
63 |
-
data,
|
64 |
-
} as const ),
|
65 |
-
setComplete: ( data: Record< string, unknown > = {} ) =>
|
66 |
-
( {
|
67 |
-
type: ACTION.SET_COMPLETE,
|
68 |
-
data,
|
69 |
-
} as const ),
|
70 |
-
setBeforeProcessing: () =>
|
71 |
-
( {
|
72 |
-
type: ACTION.SET_BEFORE_PROCESSING,
|
73 |
-
} as const ),
|
74 |
-
setAfterProcessing: () =>
|
75 |
-
( {
|
76 |
-
type: ACTION.SET_AFTER_PROCESSING,
|
77 |
-
} as const ),
|
78 |
-
setHasError: ( hasError = true ) =>
|
79 |
-
( {
|
80 |
-
type: hasError ? ACTION.SET_HAS_ERROR : ACTION.SET_NO_ERROR,
|
81 |
-
} as const ),
|
82 |
-
incrementCalculating: () =>
|
83 |
-
( {
|
84 |
-
type: ACTION.INCREMENT_CALCULATING,
|
85 |
-
} as const ),
|
86 |
-
decrementCalculating: () =>
|
87 |
-
( {
|
88 |
-
type: ACTION.DECREMENT_CALCULATING,
|
89 |
-
} as const ),
|
90 |
-
setCustomerId: ( customerId: number ) =>
|
91 |
-
( {
|
92 |
-
type: ACTION.SET_CUSTOMER_ID,
|
93 |
-
customerId,
|
94 |
-
} as const ),
|
95 |
-
setOrderId: ( orderId: number ) =>
|
96 |
-
( {
|
97 |
-
type: ACTION.SET_ORDER_ID,
|
98 |
-
orderId,
|
99 |
-
} as const ),
|
100 |
-
setShouldCreateAccount: ( shouldCreateAccount: boolean ) =>
|
101 |
-
( {
|
102 |
-
type: ACTION.SET_SHOULD_CREATE_ACCOUNT,
|
103 |
-
shouldCreateAccount,
|
104 |
-
} as const ),
|
105 |
-
setOrderNotes: ( orderNotes: string ) =>
|
106 |
-
( {
|
107 |
-
type: ACTION.SET_ORDER_NOTES,
|
108 |
-
orderNotes,
|
109 |
-
} as const ),
|
110 |
-
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/base/context/providers/cart-checkout/checkout-state/constants.js
ADDED
@@ -0,0 +1,51 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* External dependencies
|
3 |
+
*/
|
4 |
+
import { getSetting } from '@woocommerce/settings';
|
5 |
+
|
6 |
+
/**
|
7 |
+
* @type {import("@woocommerce/type-defs/checkout").CheckoutStatusConstants}
|
8 |
+
*/
|
9 |
+
export const STATUS = {
|
10 |
+
PRISTINE: 'pristine',
|
11 |
+
IDLE: 'idle',
|
12 |
+
PROCESSING: 'processing',
|
13 |
+
COMPLETE: 'complete',
|
14 |
+
BEFORE_PROCESSING: 'before_processing',
|
15 |
+
AFTER_PROCESSING: 'after_processing',
|
16 |
+
};
|
17 |
+
|
18 |
+
const checkoutData = getSetting( 'checkoutData', {
|
19 |
+
order_id: 0,
|
20 |
+
customer_id: 0,
|
21 |
+
} );
|
22 |
+
|
23 |
+
export const DEFAULT_STATE = {
|
24 |
+
redirectUrl: '',
|
25 |
+
status: STATUS.PRISTINE,
|
26 |
+
hasError: false,
|
27 |
+
calculatingCount: 0,
|
28 |
+
orderId: checkoutData.order_id,
|
29 |
+
orderNotes: '',
|
30 |
+
customerId: checkoutData.customer_id,
|
31 |
+
shouldCreateAccount: false,
|
32 |
+
processingResponse: null,
|
33 |
+
};
|
34 |
+
|
35 |
+
export const TYPES = {
|
36 |
+
SET_IDLE: 'set_idle',
|
37 |
+
SET_PRISTINE: 'set_pristine',
|
38 |
+
SET_REDIRECT_URL: 'set_redirect_url',
|
39 |
+
SET_COMPLETE: 'set_checkout_complete',
|
40 |
+
SET_BEFORE_PROCESSING: 'set_before_processing',
|
41 |
+
SET_AFTER_PROCESSING: 'set_after_processing',
|
42 |
+
SET_PROCESSING_RESPONSE: 'set_processing_response',
|
43 |
+
SET_PROCESSING: 'set_checkout_is_processing',
|
44 |
+
SET_HAS_ERROR: 'set_checkout_has_error',
|
45 |
+
SET_NO_ERROR: 'set_checkout_no_error',
|
46 |
+
SET_CUSTOMER_ID: 'set_checkout_customer_id',
|
47 |
+
SET_ORDER_ID: 'set_checkout_order_id',
|
48 |
+
SET_ORDER_NOTES: 'set_checkout_order_notes',
|
49 |
+
INCREMENT_CALCULATING: 'increment_calculating',
|
50 |
+
DECREMENT_CALCULATING: 'decrement_calculating',
|
51 |
+
};
|
assets/js/base/context/providers/cart-checkout/checkout-state/constants.ts
DELETED
@@ -1,84 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* External dependencies
|
3 |
-
*/
|
4 |
-
import { getSetting } from '@woocommerce/settings';
|
5 |
-
|
6 |
-
/**
|
7 |
-
* Internal dependencies
|
8 |
-
*/
|
9 |
-
import type {
|
10 |
-
CheckoutStateContextType,
|
11 |
-
CheckoutStateContextState,
|
12 |
-
} from './types';
|
13 |
-
|
14 |
-
export enum STATUS {
|
15 |
-
// Checkout is in it's initialized state.
|
16 |
-
PRISTINE = 'pristine',
|
17 |
-
// When checkout state has changed but there is no activity happening.
|
18 |
-
IDLE = 'idle',
|
19 |
-
// After BEFORE_PROCESSING status emitters have finished successfully. Payment processing is started on this checkout status.
|
20 |
-
PROCESSING = 'processing',
|
21 |
-
// After the AFTER_PROCESSING event emitters have completed. This status triggers the checkout redirect.
|
22 |
-
COMPLETE = 'complete',
|
23 |
-
// This is the state before checkout processing begins after the checkout button has been pressed/submitted.
|
24 |
-
BEFORE_PROCESSING = 'before_processing',
|
25 |
-
// After server side checkout processing is completed this status is set
|
26 |
-
AFTER_PROCESSING = 'after_processing',
|
27 |
-
}
|
28 |
-
|
29 |
-
const preloadedApiRequests = getSetting( 'preloadedApiRequests', {} ) as Record<
|
30 |
-
string,
|
31 |
-
{ body: Record< string, unknown > }
|
32 |
-
>;
|
33 |
-
|
34 |
-
const checkoutData = {
|
35 |
-
order_id: 0,
|
36 |
-
customer_id: 0,
|
37 |
-
...( preloadedApiRequests[ '/wc/store/checkout' ]?.body || {} ),
|
38 |
-
};
|
39 |
-
|
40 |
-
export const DEFAULT_CHECKOUT_STATE_DATA: CheckoutStateContextType = {
|
41 |
-
dispatchActions: {
|
42 |
-
resetCheckout: () => void null,
|
43 |
-
setRedirectUrl: ( url ) => void url,
|
44 |
-
setHasError: ( hasError ) => void hasError,
|
45 |
-
setAfterProcessing: ( response ) => void response,
|
46 |
-
incrementCalculating: () => void null,
|
47 |
-
decrementCalculating: () => void null,
|
48 |
-
setCustomerId: ( id ) => void id,
|
49 |
-
setOrderId: ( id ) => void id,
|
50 |
-
setOrderNotes: ( orderNotes ) => void orderNotes,
|
51 |
-
},
|
52 |
-
onSubmit: () => void null,
|
53 |
-
isComplete: false,
|
54 |
-
isIdle: false,
|
55 |
-
isCalculating: false,
|
56 |
-
isProcessing: false,
|
57 |
-
isBeforeProcessing: false,
|
58 |
-
isAfterProcessing: false,
|
59 |
-
hasError: false,
|
60 |
-
redirectUrl: '',
|
61 |
-
orderId: 0,
|
62 |
-
orderNotes: '',
|
63 |
-
customerId: 0,
|
64 |
-
onCheckoutAfterProcessingWithSuccess: () => () => void null,
|
65 |
-
onCheckoutAfterProcessingWithError: () => () => void null,
|
66 |
-
onCheckoutBeforeProcessing: () => () => void null, // deprecated for onCheckoutValidationBeforeProcessing
|
67 |
-
onCheckoutValidationBeforeProcessing: () => () => void null,
|
68 |
-
hasOrder: false,
|
69 |
-
isCart: false,
|
70 |
-
shouldCreateAccount: false,
|
71 |
-
setShouldCreateAccount: ( value ) => void value,
|
72 |
-
};
|
73 |
-
|
74 |
-
export const DEFAULT_STATE: CheckoutStateContextState = {
|
75 |
-
redirectUrl: '',
|
76 |
-
status: STATUS.PRISTINE,
|
77 |
-
hasError: false,
|
78 |
-
calculatingCount: 0,
|
79 |
-
orderId: checkoutData.order_id,
|
80 |
-
orderNotes: '',
|
81 |
-
customerId: checkoutData.customer_id,
|
82 |
-
shouldCreateAccount: false,
|
83 |
-
processingResponse: null,
|
84 |
-
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/base/context/providers/cart-checkout/checkout-state/event-emit.js
ADDED
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* Internal dependencies
|
3 |
+
*/
|
4 |
+
import {
|
5 |
+
emitterCallback,
|
6 |
+
reducer,
|
7 |
+
emitEvent,
|
8 |
+
emitEventWithAbort,
|
9 |
+
} from '../../../event-emit';
|
10 |
+
|
11 |
+
const EMIT_TYPES = {
|
12 |
+
CHECKOUT_BEFORE_PROCESSING: 'checkout_before_processing',
|
13 |
+
CHECKOUT_AFTER_PROCESSING_WITH_SUCCESS:
|
14 |
+
'checkout_after_processing_with_success',
|
15 |
+
CHECKOUT_AFTER_PROCESSING_WITH_ERROR:
|
16 |
+
'checkout_after_processing_with_error',
|
17 |
+
};
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Receives a reducer dispatcher and returns an object with the
|
21 |
+
* callback registration function for the checkout emit
|
22 |
+
* events.
|
23 |
+
*
|
24 |
+
* Calling the event registration function with the callback will register it
|
25 |
+
* for the event emitter and will return a dispatcher for removing the
|
26 |
+
* registered callback (useful for implementation in `useEffect`).
|
27 |
+
*
|
28 |
+
* @param {Function} dispatcher The emitter reducer dispatcher.
|
29 |
+
*
|
30 |
+
* @return {Object} An object with the checkout emmitter registration
|
31 |
+
*/
|
32 |
+
const emitterObservers = ( dispatcher ) => ( {
|
33 |
+
onCheckoutAfterProcessingWithSuccess: emitterCallback(
|
34 |
+
EMIT_TYPES.CHECKOUT_AFTER_PROCESSING_WITH_SUCCESS,
|
35 |
+
dispatcher
|
36 |
+
),
|
37 |
+
onCheckoutAfterProcessingWithError: emitterCallback(
|
38 |
+
EMIT_TYPES.CHECKOUT_AFTER_PROCESSING_WITH_ERROR,
|
39 |
+
dispatcher
|
40 |
+
),
|
41 |
+
onCheckoutBeforeProcessing: emitterCallback(
|
42 |
+
EMIT_TYPES.CHECKOUT_BEFORE_PROCESSING,
|
43 |
+
dispatcher
|
44 |
+
),
|
45 |
+
} );
|
46 |
+
|
47 |
+
export { EMIT_TYPES, emitterObservers, reducer, emitEvent, emitEventWithAbort };
|
assets/js/base/context/providers/cart-checkout/checkout-state/event-emit.ts
DELETED
@@ -1,62 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* External dependencies
|
3 |
-
*/
|
4 |
-
import { useMemo } from '@wordpress/element';
|
5 |
-
|
6 |
-
/**
|
7 |
-
* Internal dependencies
|
8 |
-
*/
|
9 |
-
import {
|
10 |
-
emitterCallback,
|
11 |
-
reducer,
|
12 |
-
emitEvent,
|
13 |
-
emitEventWithAbort,
|
14 |
-
ActionType,
|
15 |
-
} from '../../../event-emit';
|
16 |
-
|
17 |
-
const EMIT_TYPES = {
|
18 |
-
CHECKOUT_VALIDATION_BEFORE_PROCESSING:
|
19 |
-
'checkout_validation_before_processing',
|
20 |
-
CHECKOUT_AFTER_PROCESSING_WITH_SUCCESS:
|
21 |
-
'checkout_after_processing_with_success',
|
22 |
-
CHECKOUT_AFTER_PROCESSING_WITH_ERROR:
|
23 |
-
'checkout_after_processing_with_error',
|
24 |
-
};
|
25 |
-
|
26 |
-
type EventEmittersType = Record< string, ReturnType< typeof emitterCallback > >;
|
27 |
-
|
28 |
-
/**
|
29 |
-
* Receives a reducer dispatcher and returns an object with the
|
30 |
-
* various event emitters for the payment processing events.
|
31 |
-
*
|
32 |
-
* Calling the event registration function with the callback will register it
|
33 |
-
* for the event emitter and will return a dispatcher for removing the
|
34 |
-
* registered callback (useful for implementation in `useEffect`).
|
35 |
-
*
|
36 |
-
* @param {Function} observerDispatch The emitter reducer dispatcher.
|
37 |
-
* @return {Object} An object with the various payment event emitter registration functions
|
38 |
-
*/
|
39 |
-
const useEventEmitters = (
|
40 |
-
observerDispatch: React.Dispatch< ActionType >
|
41 |
-
): EventEmittersType => {
|
42 |
-
const eventEmitters = useMemo(
|
43 |
-
() => ( {
|
44 |
-
onCheckoutAfterProcessingWithSuccess: emitterCallback(
|
45 |
-
EMIT_TYPES.CHECKOUT_AFTER_PROCESSING_WITH_SUCCESS,
|
46 |
-
observerDispatch
|
47 |
-
),
|
48 |
-
onCheckoutAfterProcessingWithError: emitterCallback(
|
49 |
-
EMIT_TYPES.CHECKOUT_AFTER_PROCESSING_WITH_ERROR,
|
50 |
-
observerDispatch
|
51 |
-
),
|
52 |
-
onCheckoutValidationBeforeProcessing: emitterCallback(
|
53 |
-
EMIT_TYPES.CHECKOUT_VALIDATION_BEFORE_PROCESSING,
|
54 |
-
observerDispatch
|
55 |
-
),
|
56 |
-
} ),
|
57 |
-
[ observerDispatch ]
|
58 |
-
);
|
59 |
-
return eventEmitters;
|
60 |
-
};
|
61 |
-
|
62 |
-
export { EMIT_TYPES, useEventEmitters, reducer, emitEvent, emitEventWithAbort };
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/base/context/providers/cart-checkout/checkout-state/{index.tsx → index.js}
RENAMED
@@ -12,27 +12,16 @@ import {
|
|
12 |
} from '@wordpress/element';
|
13 |
import { __ } from '@wordpress/i18n';
|
14 |
import { usePrevious } from '@woocommerce/base-hooks';
|
15 |
-
import deprecated from '@wordpress/deprecated';
|
16 |
-
import { isObject } from '@woocommerce/types';
|
17 |
|
18 |
/**
|
19 |
* Internal dependencies
|
20 |
*/
|
21 |
import { actions } from './actions';
|
22 |
-
import { reducer } from './reducer';
|
23 |
-
import {
|
24 |
-
import {
|
25 |
-
DEFAULT_STATE,
|
26 |
-
STATUS,
|
27 |
-
DEFAULT_CHECKOUT_STATE_DATA,
|
28 |
-
} from './constants';
|
29 |
-
import type {
|
30 |
-
CheckoutStateDispatchActions,
|
31 |
-
CheckoutStateContextType,
|
32 |
-
} from './types';
|
33 |
import {
|
34 |
EMIT_TYPES,
|
35 |
-
|
36 |
emitEvent,
|
37 |
emitEventWithAbort,
|
38 |
reducer as emitReducer,
|
@@ -44,12 +33,47 @@ import { useCheckoutNotices } from '../../../hooks/use-checkout-notices';
|
|
44 |
import { useEmitResponse } from '../../../hooks/use-emit-response';
|
45 |
|
46 |
/**
|
|
|
47 |
* @typedef {import('@woocommerce/type-defs/contexts').CheckoutDataContext} CheckoutDataContext
|
48 |
*/
|
49 |
|
50 |
-
const CheckoutContext = createContext(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
51 |
|
52 |
-
|
|
|
|
|
|
|
53 |
return useContext( CheckoutContext );
|
54 |
};
|
55 |
|
@@ -67,15 +91,13 @@ export const CheckoutStateProvider = ( {
|
|
67 |
children,
|
68 |
redirectUrl,
|
69 |
isCart = false,
|
70 |
-
}
|
71 |
-
children: React.ReactChildren;
|
72 |
-
redirectUrl: string;
|
73 |
-
isCart: boolean;
|
74 |
-
} ): JSX.Element => {
|
75 |
// note, this is done intentionally so that the default state now has
|
76 |
// the redirectUrl for when checkout is reset to PRISTINE state.
|
77 |
DEFAULT_STATE.redirectUrl = redirectUrl;
|
78 |
const [ checkoutState, dispatch ] = useReducer( reducer, DEFAULT_STATE );
|
|
|
|
|
79 |
const { setValidationErrors } = useValidationContext();
|
80 |
const { addErrorNotice, removeNotices } = useStoreNotices();
|
81 |
const { dispatchCheckoutEvent } = useStoreEvents();
|
@@ -92,42 +114,32 @@ export const CheckoutStateProvider = ( {
|
|
92 |
expressPaymentNotices,
|
93 |
} = useCheckoutNotices();
|
94 |
|
95 |
-
const [ observers, observerDispatch ] = useReducer( emitReducer, {} );
|
96 |
-
const currentObservers = useRef( observers );
|
97 |
-
const {
|
98 |
-
onCheckoutAfterProcessingWithSuccess,
|
99 |
-
onCheckoutAfterProcessingWithError,
|
100 |
-
onCheckoutValidationBeforeProcessing,
|
101 |
-
} = useEventEmitters( observerDispatch );
|
102 |
-
|
103 |
// set observers on ref so it's always current.
|
104 |
useEffect( () => {
|
105 |
currentObservers.current = observers;
|
106 |
}, [ observers ] );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
107 |
|
108 |
/**
|
109 |
-
* @
|
110 |
-
*
|
111 |
-
* To prevent the deprecation message being shown at render time
|
112 |
-
* we need an extra function between useMemo and event emitters
|
113 |
-
* so that the deprecated message gets shown only at invocation time.
|
114 |
-
* (useMemo calls the passed function at render time)
|
115 |
-
* See: https://github.com/woocommerce/woocommerce-gutenberg-products-block/pull/4039/commits/a502d1be8828848270993264c64220731b0ae181
|
116 |
*/
|
117 |
-
const onCheckoutBeforeProcessing = useMemo( () => {
|
118 |
-
return function (
|
119 |
-
...args: Parameters< typeof onCheckoutValidationBeforeProcessing >
|
120 |
-
) {
|
121 |
-
deprecated( 'onCheckoutBeforeProcessing', {
|
122 |
-
alternative: 'onCheckoutValidationBeforeProcessing',
|
123 |
-
plugin: 'WooCommerce Blocks',
|
124 |
-
} );
|
125 |
-
return onCheckoutValidationBeforeProcessing( ...args );
|
126 |
-
};
|
127 |
-
}, [ onCheckoutValidationBeforeProcessing ] );
|
128 |
-
|
129 |
const dispatchActions = useMemo(
|
130 |
-
()
|
131 |
resetCheckout: () => void dispatch( actions.setPristine() ),
|
132 |
setRedirectUrl: ( url ) =>
|
133 |
void dispatch( actions.setRedirectUrl( url ) ),
|
@@ -144,17 +156,35 @@ export const CheckoutStateProvider = ( {
|
|
144 |
setOrderNotes: ( orderNotes ) =>
|
145 |
void dispatch( actions.setOrderNotes( orderNotes ) ),
|
146 |
setAfterProcessing: ( response ) => {
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
152 |
dispatch(
|
153 |
-
actions.
|
|
|
|
|
154 |
);
|
155 |
}
|
156 |
-
dispatch( actions.
|
157 |
-
dispatch( actions.setAfterProcessing() );
|
158 |
},
|
159 |
} ),
|
160 |
[]
|
@@ -167,7 +197,7 @@ export const CheckoutStateProvider = ( {
|
|
167 |
removeNotices( 'error' );
|
168 |
emitEvent(
|
169 |
currentObservers.current,
|
170 |
-
EMIT_TYPES.
|
171 |
{}
|
172 |
).then( ( response ) => {
|
173 |
if ( response !== true ) {
|
@@ -203,32 +233,12 @@ export const CheckoutStateProvider = ( {
|
|
203 |
) {
|
204 |
return;
|
205 |
}
|
206 |
-
|
207 |
-
const handleErrorResponse = ( observerResponses: unknown[] ) => {
|
208 |
-
let errorResponse = null;
|
209 |
-
observerResponses.forEach( ( response ) => {
|
210 |
-
if (
|
211 |
-
isErrorResponse( response ) ||
|
212 |
-
isFailResponse( response )
|
213 |
-
) {
|
214 |
-
if ( response.message ) {
|
215 |
-
const errorOptions = response.messageContext
|
216 |
-
? { context: response.messageContext }
|
217 |
-
: undefined;
|
218 |
-
errorResponse = response;
|
219 |
-
addErrorNotice( response.message, errorOptions );
|
220 |
-
}
|
221 |
-
}
|
222 |
-
} );
|
223 |
-
return errorResponse;
|
224 |
-
};
|
225 |
-
|
226 |
if ( checkoutState.status === STATUS.AFTER_PROCESSING ) {
|
227 |
const data = {
|
228 |
redirectUrl: checkoutState.redirectUrl,
|
229 |
orderId: checkoutState.orderId,
|
230 |
customerId: checkoutState.customerId,
|
231 |
-
|
232 |
processingResponse: checkoutState.processingResponse,
|
233 |
};
|
234 |
if ( checkoutState.hasError ) {
|
@@ -238,30 +248,34 @@ export const CheckoutStateProvider = ( {
|
|
238 |
currentObservers.current,
|
239 |
EMIT_TYPES.CHECKOUT_AFTER_PROCESSING_WITH_ERROR,
|
240 |
data
|
241 |
-
).then( (
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
246 |
// irrecoverable error so set complete
|
247 |
-
if ( ! shouldRetry(
|
248 |
-
dispatch( actions.setComplete(
|
249 |
} else {
|
250 |
dispatch( actions.setIdle() );
|
251 |
}
|
252 |
} else {
|
253 |
const hasErrorNotices =
|
254 |
checkoutNotices.some(
|
255 |
-
( notice
|
256 |
-
notice.status === 'error'
|
257 |
) ||
|
258 |
expressPaymentNotices.some(
|
259 |
-
( notice
|
260 |
-
notice.status === 'error'
|
261 |
) ||
|
262 |
paymentNotices.some(
|
263 |
-
( notice
|
264 |
-
notice.status === 'error'
|
265 |
);
|
266 |
if ( ! hasErrorNotices ) {
|
267 |
// no error handling in place by anything so let's fall
|
@@ -285,43 +299,21 @@ export const CheckoutStateProvider = ( {
|
|
285 |
currentObservers.current,
|
286 |
EMIT_TYPES.CHECKOUT_AFTER_PROCESSING_WITH_SUCCESS,
|
287 |
data
|
288 |
-
).then( (
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
observerResponses.forEach( ( response ) => {
|
299 |
-
if ( isSuccessResponse( response ) ) {
|
300 |
-
// the last observer response always "wins" for success.
|
301 |
-
successResponse = response;
|
302 |
-
}
|
303 |
-
if (
|
304 |
-
isErrorResponse( response ) ||
|
305 |
-
isFailResponse( response )
|
306 |
-
) {
|
307 |
-
errorResponse = response;
|
308 |
-
}
|
309 |
-
} );
|
310 |
-
|
311 |
-
if ( successResponse && ! errorResponse ) {
|
312 |
-
dispatch( actions.setComplete( successResponse ) );
|
313 |
-
} else if ( isObject( errorResponse ) ) {
|
314 |
-
if ( errorResponse.message ) {
|
315 |
-
const errorOptions = errorResponse.messageContext
|
316 |
-
? { context: errorResponse.messageContext }
|
317 |
: undefined;
|
318 |
-
addErrorNotice(
|
319 |
-
errorResponse.message,
|
320 |
-
errorOptions
|
321 |
-
);
|
322 |
}
|
323 |
-
if ( ! shouldRetry(
|
324 |
-
dispatch( actions.setComplete(
|
325 |
} else {
|
326 |
// this will set an error which will end up
|
327 |
// triggering the onCheckoutAfterProcessingWithError emitter.
|
@@ -342,7 +334,7 @@ export const CheckoutStateProvider = ( {
|
|
342 |
checkoutState.redirectUrl,
|
343 |
checkoutState.orderId,
|
344 |
checkoutState.customerId,
|
345 |
-
checkoutState.
|
346 |
checkoutState.processingResponse,
|
347 |
previousStatus,
|
348 |
previousHasError,
|
@@ -362,7 +354,10 @@ export const CheckoutStateProvider = ( {
|
|
362 |
dispatch( actions.setBeforeProcessing() );
|
363 |
}, [ dispatchCheckoutEvent ] );
|
364 |
|
365 |
-
|
|
|
|
|
|
|
366 |
onSubmit,
|
367 |
isComplete: checkoutState.status === STATUS.COMPLETE,
|
368 |
isIdle: checkoutState.status === STATUS.IDLE,
|
@@ -372,10 +367,9 @@ export const CheckoutStateProvider = ( {
|
|
372 |
isAfterProcessing: checkoutState.status === STATUS.AFTER_PROCESSING,
|
373 |
hasError: checkoutState.hasError,
|
374 |
redirectUrl: checkoutState.redirectUrl,
|
375 |
-
onCheckoutBeforeProcessing,
|
376 |
-
onCheckoutValidationBeforeProcessing,
|
377 |
onCheckoutAfterProcessingWithSuccess,
|
378 |
onCheckoutAfterProcessingWithError,
|
|
|
379 |
dispatchActions,
|
380 |
isCart,
|
381 |
orderId: checkoutState.orderId,
|
12 |
} from '@wordpress/element';
|
13 |
import { __ } from '@wordpress/i18n';
|
14 |
import { usePrevious } from '@woocommerce/base-hooks';
|
|
|
|
|
15 |
|
16 |
/**
|
17 |
* Internal dependencies
|
18 |
*/
|
19 |
import { actions } from './actions';
|
20 |
+
import { reducer, prepareResponseData } from './reducer';
|
21 |
+
import { DEFAULT_STATE, STATUS } from './constants';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
22 |
import {
|
23 |
EMIT_TYPES,
|
24 |
+
emitterObservers,
|
25 |
emitEvent,
|
26 |
emitEventWithAbort,
|
27 |
reducer as emitReducer,
|
33 |
import { useEmitResponse } from '../../../hooks/use-emit-response';
|
34 |
|
35 |
/**
|
36 |
+
* @typedef {import('@woocommerce/type-defs/checkout').CheckoutDispatchActions} CheckoutDispatchActions
|
37 |
* @typedef {import('@woocommerce/type-defs/contexts').CheckoutDataContext} CheckoutDataContext
|
38 |
*/
|
39 |
|
40 |
+
const CheckoutContext = createContext( {
|
41 |
+
isComplete: false,
|
42 |
+
isIdle: false,
|
43 |
+
isCalculating: false,
|
44 |
+
isProcessing: false,
|
45 |
+
isBeforeProcessing: false,
|
46 |
+
isAfterProcessing: false,
|
47 |
+
hasError: false,
|
48 |
+
redirectUrl: '',
|
49 |
+
orderId: 0,
|
50 |
+
orderNotes: '',
|
51 |
+
customerId: 0,
|
52 |
+
onSubmit: () => void null,
|
53 |
+
onCheckoutAfterProcessingWithSuccess: ( callback ) => void callback,
|
54 |
+
onCheckoutAfterProcessingWithError: ( callback ) => void callback,
|
55 |
+
onCheckoutBeforeProcessing: ( callback ) => void callback,
|
56 |
+
dispatchActions: {
|
57 |
+
resetCheckout: () => void null,
|
58 |
+
setRedirectUrl: ( url ) => void url,
|
59 |
+
setHasError: ( hasError ) => void hasError,
|
60 |
+
setAfterProcessing: ( response ) => void response,
|
61 |
+
incrementCalculating: () => void null,
|
62 |
+
decrementCalculating: () => void null,
|
63 |
+
setCustomerId: ( id ) => void id,
|
64 |
+
setOrderId: ( id ) => void id,
|
65 |
+
setOrderNotes: ( orderNotes ) => void orderNotes,
|
66 |
+
},
|
67 |
+
hasOrder: false,
|
68 |
+
isCart: false,
|
69 |
+
shouldCreateAccount: false,
|
70 |
+
setShouldCreateAccount: ( value ) => void value,
|
71 |
+
} );
|
72 |
|
73 |
+
/**
|
74 |
+
* @return {CheckoutDataContext} Returns the checkout data context value
|
75 |
+
*/
|
76 |
+
export const useCheckoutContext = () => {
|
77 |
return useContext( CheckoutContext );
|
78 |
};
|
79 |
|
91 |
children,
|
92 |
redirectUrl,
|
93 |
isCart = false,
|
94 |
+
} ) => {
|
|
|
|
|
|
|
|
|
95 |
// note, this is done intentionally so that the default state now has
|
96 |
// the redirectUrl for when checkout is reset to PRISTINE state.
|
97 |
DEFAULT_STATE.redirectUrl = redirectUrl;
|
98 |
const [ checkoutState, dispatch ] = useReducer( reducer, DEFAULT_STATE );
|
99 |
+
const [ observers, observerDispatch ] = useReducer( emitReducer, {} );
|
100 |
+
const currentObservers = useRef( observers );
|
101 |
const { setValidationErrors } = useValidationContext();
|
102 |
const { addErrorNotice, removeNotices } = useStoreNotices();
|
103 |
const { dispatchCheckoutEvent } = useStoreEvents();
|
114 |
expressPaymentNotices,
|
115 |
} = useCheckoutNotices();
|
116 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
117 |
// set observers on ref so it's always current.
|
118 |
useEffect( () => {
|
119 |
currentObservers.current = observers;
|
120 |
}, [ observers ] );
|
121 |
+
const onCheckoutAfterProcessingWithSuccess = useMemo(
|
122 |
+
() =>
|
123 |
+
emitterObservers( observerDispatch )
|
124 |
+
.onCheckoutAfterProcessingWithSuccess,
|
125 |
+
[ observerDispatch ]
|
126 |
+
);
|
127 |
+
const onCheckoutAfterProcessingWithError = useMemo(
|
128 |
+
() =>
|
129 |
+
emitterObservers( observerDispatch )
|
130 |
+
.onCheckoutAfterProcessingWithError,
|
131 |
+
[ observerDispatch ]
|
132 |
+
);
|
133 |
+
const onCheckoutBeforeProcessing = useMemo(
|
134 |
+
() => emitterObservers( observerDispatch ).onCheckoutBeforeProcessing,
|
135 |
+
[ observerDispatch ]
|
136 |
+
);
|
137 |
|
138 |
/**
|
139 |
+
* @type {CheckoutDispatchActions}
|
|
|
|
|
|
|
|
|
|
|
|
|
140 |
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
141 |
const dispatchActions = useMemo(
|
142 |
+
() => ( {
|
143 |
resetCheckout: () => void dispatch( actions.setPristine() ),
|
144 |
setRedirectUrl: ( url ) =>
|
145 |
void dispatch( actions.setRedirectUrl( url ) ),
|
156 |
setOrderNotes: ( orderNotes ) =>
|
157 |
void dispatch( actions.setOrderNotes( orderNotes ) ),
|
158 |
setAfterProcessing: ( response ) => {
|
159 |
+
// capture general error message if this is an error response.
|
160 |
+
if (
|
161 |
+
! response.payment_result &&
|
162 |
+
response.message &&
|
163 |
+
response?.data?.status !== 200
|
164 |
+
) {
|
165 |
+
response.payment_result = {
|
166 |
+
...response.payment_result,
|
167 |
+
message: response.message,
|
168 |
+
};
|
169 |
+
}
|
170 |
+
if ( response.payment_result ) {
|
171 |
+
if (
|
172 |
+
// eslint-disable-next-line camelcase
|
173 |
+
response.payment_result?.redirect_url
|
174 |
+
) {
|
175 |
+
dispatch(
|
176 |
+
actions.setRedirectUrl(
|
177 |
+
response.payment_result.redirect_url
|
178 |
+
)
|
179 |
+
);
|
180 |
+
}
|
181 |
dispatch(
|
182 |
+
actions.setProcessingResponse(
|
183 |
+
prepareResponseData( response.payment_result )
|
184 |
+
)
|
185 |
);
|
186 |
}
|
187 |
+
void dispatch( actions.setAfterProcessing() );
|
|
|
188 |
},
|
189 |
} ),
|
190 |
[]
|
197 |
removeNotices( 'error' );
|
198 |
emitEvent(
|
199 |
currentObservers.current,
|
200 |
+
EMIT_TYPES.CHECKOUT_BEFORE_PROCESSING,
|
201 |
{}
|
202 |
).then( ( response ) => {
|
203 |
if ( response !== true ) {
|
233 |
) {
|
234 |
return;
|
235 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
236 |
if ( checkoutState.status === STATUS.AFTER_PROCESSING ) {
|
237 |
const data = {
|
238 |
redirectUrl: checkoutState.redirectUrl,
|
239 |
orderId: checkoutState.orderId,
|
240 |
customerId: checkoutState.customerId,
|
241 |
+
customerNote: checkoutState.customerNote,
|
242 |
processingResponse: checkoutState.processingResponse,
|
243 |
};
|
244 |
if ( checkoutState.hasError ) {
|
248 |
currentObservers.current,
|
249 |
EMIT_TYPES.CHECKOUT_AFTER_PROCESSING_WITH_ERROR,
|
250 |
data
|
251 |
+
).then( ( response ) => {
|
252 |
+
if (
|
253 |
+
isErrorResponse( response ) ||
|
254 |
+
isFailResponse( response )
|
255 |
+
) {
|
256 |
+
if ( response.message ) {
|
257 |
+
const errorOptions = {
|
258 |
+
id: response?.messageContext,
|
259 |
+
context: response?.messageContext,
|
260 |
+
};
|
261 |
+
addErrorNotice( response.message, errorOptions );
|
262 |
+
}
|
263 |
// irrecoverable error so set complete
|
264 |
+
if ( ! shouldRetry( response ) ) {
|
265 |
+
dispatch( actions.setComplete( response ) );
|
266 |
} else {
|
267 |
dispatch( actions.setIdle() );
|
268 |
}
|
269 |
} else {
|
270 |
const hasErrorNotices =
|
271 |
checkoutNotices.some(
|
272 |
+
( notice ) => notice.status === 'error'
|
|
|
273 |
) ||
|
274 |
expressPaymentNotices.some(
|
275 |
+
( notice ) => notice.status === 'error'
|
|
|
276 |
) ||
|
277 |
paymentNotices.some(
|
278 |
+
( notice ) => notice.status === 'error'
|
|
|
279 |
);
|
280 |
if ( ! hasErrorNotices ) {
|
281 |
// no error handling in place by anything so let's fall
|
299 |
currentObservers.current,
|
300 |
EMIT_TYPES.CHECKOUT_AFTER_PROCESSING_WITH_SUCCESS,
|
301 |
data
|
302 |
+
).then( ( response ) => {
|
303 |
+
if ( isSuccessResponse( response ) ) {
|
304 |
+
dispatch( actions.setComplete( response ) );
|
305 |
+
} else if (
|
306 |
+
isErrorResponse( response ) ||
|
307 |
+
isFailResponse( response )
|
308 |
+
) {
|
309 |
+
if ( response.message ) {
|
310 |
+
const errorOptions = response.messageContext
|
311 |
+
? { context: response.messageContext }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
312 |
: undefined;
|
313 |
+
addErrorNotice( response.message, errorOptions );
|
|
|
|
|
|
|
314 |
}
|
315 |
+
if ( ! shouldRetry( response ) ) {
|
316 |
+
dispatch( actions.setComplete( response ) );
|
317 |
} else {
|
318 |
// this will set an error which will end up
|
319 |
// triggering the onCheckoutAfterProcessingWithError emitter.
|
334 |
checkoutState.redirectUrl,
|
335 |
checkoutState.orderId,
|
336 |
checkoutState.customerId,
|
337 |
+
checkoutState.customerNote,
|
338 |
checkoutState.processingResponse,
|
339 |
previousStatus,
|
340 |
previousHasError,
|
354 |
dispatch( actions.setBeforeProcessing() );
|
355 |
}, [ dispatchCheckoutEvent ] );
|
356 |
|
357 |
+
/**
|
358 |
+
* @type {CheckoutDataContext}
|
359 |
+
*/
|
360 |
+
const checkoutData = {
|
361 |
onSubmit,
|
362 |
isComplete: checkoutState.status === STATUS.COMPLETE,
|
363 |
isIdle: checkoutState.status === STATUS.IDLE,
|
367 |
isAfterProcessing: checkoutState.status === STATUS.AFTER_PROCESSING,
|
368 |
hasError: checkoutState.hasError,
|
369 |
redirectUrl: checkoutState.redirectUrl,
|
|
|
|
|
370 |
onCheckoutAfterProcessingWithSuccess,
|
371 |
onCheckoutAfterProcessingWithError,
|
372 |
+
onCheckoutBeforeProcessing,
|
373 |
dispatchActions,
|
374 |
isCart,
|
375 |
orderId: checkoutState.orderId,
|
assets/js/base/context/providers/cart-checkout/checkout-state/reducer.js
ADDED
@@ -0,0 +1,235 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* External dependencies
|
3 |
+
*/
|
4 |
+
import { decodeEntities } from '@wordpress/html-entities';
|
5 |
+
|
6 |
+
/**
|
7 |
+
* Internal dependencies
|
8 |
+
*/
|
9 |
+
import { TYPES, DEFAULT_STATE, STATUS } from './constants';
|
10 |
+
|
11 |
+
const {
|
12 |
+
SET_PRISTINE,
|
13 |
+
SET_IDLE,
|
14 |
+
SET_PROCESSING,
|
15 |
+
SET_BEFORE_PROCESSING,
|
16 |
+
SET_AFTER_PROCESSING,
|
17 |
+
SET_PROCESSING_RESPONSE,
|
18 |
+
SET_REDIRECT_URL,
|
19 |
+
SET_COMPLETE,
|
20 |
+
SET_HAS_ERROR,
|
21 |
+
SET_NO_ERROR,
|
22 |
+
INCREMENT_CALCULATING,
|
23 |
+
DECREMENT_CALCULATING,
|
24 |
+
SET_CUSTOMER_ID,
|
25 |
+
SET_ORDER_ID,
|
26 |
+
SET_ORDER_NOTES,
|
27 |
+
SET_SHOULD_CREATE_ACCOUNT,
|
28 |
+
} = TYPES;
|
29 |
+
|
30 |
+
const {
|
31 |
+
PRISTINE,
|
32 |
+
IDLE,
|
33 |
+
PROCESSING,
|
34 |
+
BEFORE_PROCESSING,
|
35 |
+
AFTER_PROCESSING,
|
36 |
+
COMPLETE,
|
37 |
+
} = STATUS;
|
38 |
+
|
39 |
+
/**
|
40 |
+
* Prepares the payment_result data from the server checkout endpoint response.
|
41 |
+
*
|
42 |
+
* @param {Object} data The value of `payment_result` from the checkout
|
43 |
+
* processing endpoint response.
|
44 |
+
* @param {string} data.message If there was a general error message it will appear
|
45 |
+
* on this property.
|
46 |
+
* @param {string} data.payment_status The payment status. One of 'success', 'failure',
|
47 |
+
* 'pending', 'error'.
|
48 |
+
* @param {Array<Object>} data.payment_details An array of Objects with a 'key' property that is a
|
49 |
+
* string and value property that is a string. These are
|
50 |
+
* converted to a flat object where the key becomes the
|
51 |
+
* object property and value the property value.
|
52 |
+
*
|
53 |
+
* @return {Object} A new object with 'paymentStatus', and 'paymentDetails' as the properties.
|
54 |
+
*/
|
55 |
+
export const prepareResponseData = ( data ) => {
|
56 |
+
const responseData = {
|
57 |
+
message: data?.message || '',
|
58 |
+
paymentStatus: data.payment_status,
|
59 |
+
paymentDetails: {},
|
60 |
+
};
|
61 |
+
if ( Array.isArray( data.payment_details ) ) {
|
62 |
+
data.payment_details.forEach( ( { key, value } ) => {
|
63 |
+
responseData.paymentDetails[ key ] = decodeEntities( value );
|
64 |
+
} );
|
65 |
+
}
|
66 |
+
return responseData;
|
67 |
+
};
|
68 |
+
|
69 |
+
/**
|
70 |
+
* Reducer for the checkout state
|
71 |
+
*
|
72 |
+
* @param {Object} state Current state.
|
73 |
+
* @param {Object} action Incoming action object.
|
74 |
+
* @param {string} action.url URL passed in.
|
75 |
+
* @param {string} action.type Type of action.
|
76 |
+
* @param {string} action.customerId Customer ID.
|
77 |
+
* @param {string} action.orderId Order ID.
|
78 |
+
* @param {Array} action.orderNotes Order notes.
|
79 |
+
* @param {boolean} action.shouldCreateAccount True if shopper has requested a user account (signup checkbox).
|
80 |
+
* @param {Object} action.data Other action payload.
|
81 |
+
*/
|
82 |
+
export const reducer = (
|
83 |
+
state = DEFAULT_STATE,
|
84 |
+
{ url, type, customerId, orderId, orderNotes, shouldCreateAccount, data }
|
85 |
+
) => {
|
86 |
+
let newState = state;
|
87 |
+
switch ( type ) {
|
88 |
+
case SET_PRISTINE:
|
89 |
+
newState = DEFAULT_STATE;
|
90 |
+
break;
|
91 |
+
case SET_IDLE:
|
92 |
+
newState =
|
93 |
+
state.status !== IDLE
|
94 |
+
? {
|
95 |
+
...state,
|
96 |
+
status: IDLE,
|
97 |
+
}
|
98 |
+
: state;
|
99 |
+
break;
|
100 |
+
case SET_REDIRECT_URL:
|
101 |
+
newState =
|
102 |
+
url !== state.url
|
103 |
+
? {
|
104 |
+
...state,
|
105 |
+
redirectUrl: url,
|
106 |
+
}
|
107 |
+
: state;
|
108 |
+
break;
|
109 |
+
case SET_PROCESSING_RESPONSE:
|
110 |
+
newState = {
|
111 |
+
...state,
|
112 |
+
processingResponse: data,
|
113 |
+
};
|
114 |
+
break;
|
115 |
+
|
116 |
+
case SET_COMPLETE:
|
117 |
+
newState =
|
118 |
+
state.status !== COMPLETE
|
119 |
+
? {
|
120 |
+
...state,
|
121 |
+
status: COMPLETE,
|
122 |
+
redirectUrl: data?.redirectUrl || state.redirectUrl,
|
123 |
+
}
|
124 |
+
: state;
|
125 |
+
break;
|
126 |
+
case SET_PROCESSING:
|
127 |
+
newState =
|
128 |
+
state.status !== PROCESSING
|
129 |
+
? {
|
130 |
+
...state,
|
131 |
+
status: PROCESSING,
|
132 |
+
hasError: false,
|
133 |
+
}
|
134 |
+
: state;
|
135 |
+
// clear any error state.
|
136 |
+
newState =
|
137 |
+
newState.hasError === false
|
138 |
+
? newState
|
139 |
+
: { ...newState, hasError: false };
|
140 |
+
break;
|
141 |
+
case SET_BEFORE_PROCESSING:
|
142 |
+
newState =
|
143 |
+
state.status !== BEFORE_PROCESSING
|
144 |
+
? {
|
145 |
+
...state,
|
146 |
+
status: BEFORE_PROCESSING,
|
147 |
+
hasError: false,
|
148 |
+
}
|
149 |
+
: state;
|
150 |
+
break;
|
151 |
+
case SET_AFTER_PROCESSING:
|
152 |
+
newState =
|
153 |
+
state.status !== AFTER_PROCESSING
|
154 |
+
? {
|
155 |
+
...state,
|
156 |
+
status: AFTER_PROCESSING,
|
157 |
+
}
|
158 |
+
: state;
|
159 |
+
break;
|
160 |
+
case SET_HAS_ERROR:
|
161 |
+
newState = state.hasError
|
162 |
+
? state
|
163 |
+
: {
|
164 |
+
...state,
|
165 |
+
hasError: true,
|
166 |
+
};
|
167 |
+
newState =
|
168 |
+
state.status === PROCESSING ||
|
169 |
+
state.status === BEFORE_PROCESSING
|
170 |
+
? {
|
171 |
+
...newState,
|
172 |
+
status: IDLE,
|
173 |
+
}
|
174 |
+
: newState;
|
175 |
+
break;
|
176 |
+
case SET_NO_ERROR:
|
177 |
+
newState = state.hasError
|
178 |
+
? {
|
179 |
+
...state,
|
180 |
+
hasError: false,
|
181 |
+
}
|
182 |
+
: state;
|
183 |
+
break;
|
184 |
+
case INCREMENT_CALCULATING:
|
185 |
+
newState = {
|
186 |
+
...state,
|
187 |
+
calculatingCount: state.calculatingCount + 1,
|
188 |
+
};
|
189 |
+
break;
|
190 |
+
case DECREMENT_CALCULATING:
|
191 |
+
newState = {
|
192 |
+
...state,
|
193 |
+
calculatingCount: Math.max( 0, state.calculatingCount - 1 ),
|
194 |
+
};
|
195 |
+
break;
|
196 |
+
case SET_CUSTOMER_ID:
|
197 |
+
newState = {
|
198 |
+
...state,
|
199 |
+
customerId,
|
200 |
+
};
|
201 |
+
break;
|
202 |
+
case SET_ORDER_ID:
|
203 |
+
newState = {
|
204 |
+
...state,
|
205 |
+
orderId,
|
206 |
+
};
|
207 |
+
break;
|
208 |
+
case SET_SHOULD_CREATE_ACCOUNT:
|
209 |
+
if ( shouldCreateAccount !== state.shouldCreateAccount ) {
|
210 |
+
newState = {
|
211 |
+
...state,
|
212 |
+
shouldCreateAccount,
|
213 |
+
};
|
214 |
+
}
|
215 |
+
break;
|
216 |
+
case SET_ORDER_NOTES:
|
217 |
+
if ( state.orderNotes !== orderNotes ) {
|
218 |
+
newState = {
|
219 |
+
...state,
|
220 |
+
orderNotes,
|
221 |
+
};
|
222 |
+
}
|
223 |
+
break;
|
224 |
+
}
|
225 |
+
// automatically update state to idle from pristine as soon as it
|
226 |
+
// initially changes.
|
227 |
+
if (
|
228 |
+
newState !== state &&
|
229 |
+
type !== SET_PRISTINE &&
|
230 |
+
newState.status === PRISTINE
|
231 |
+
) {
|
232 |
+
newState.status = IDLE;
|
233 |
+
}
|
234 |
+
return newState;
|
235 |
+
};
|
assets/js/base/context/providers/cart-checkout/checkout-state/reducer.ts
DELETED
@@ -1,197 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* Internal dependencies
|
3 |
-
*/
|
4 |
-
import { DEFAULT_STATE, STATUS } from './constants';
|
5 |
-
import { ActionType, ACTION } from './actions';
|
6 |
-
import type { CheckoutStateContextState, PaymentResultDataType } from './types';
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Reducer for the checkout state
|
10 |
-
*
|
11 |
-
* @param {Object} state Current state.
|
12 |
-
* @param {Object} action Incoming action object.
|
13 |
-
* @param {string} action.url URL passed in.
|
14 |
-
* @param {string} action.type Type of action.
|
15 |
-
* @param {string} action.customerId Customer ID.
|
16 |
-
* @param {string} action.orderId Order ID.
|
17 |
-
* @param {Array} action.orderNotes Order notes.
|
18 |
-
* @param {boolean} action.shouldCreateAccount True if shopper has requested a user account (sign-up checkbox).
|
19 |
-
* @param {Object} action.data Other action payload.
|
20 |
-
*/
|
21 |
-
export const reducer = (
|
22 |
-
state = DEFAULT_STATE,
|
23 |
-
{
|
24 |
-
url,
|
25 |
-
type,
|
26 |
-
customerId,
|
27 |
-
orderId,
|
28 |
-
orderNotes,
|
29 |
-
shouldCreateAccount,
|
30 |
-
data,
|
31 |
-
}: ActionType
|
32 |
-
): CheckoutStateContextState => {
|
33 |
-
let newState = state;
|
34 |
-
switch ( type ) {
|
35 |
-
case ACTION.SET_PRISTINE:
|
36 |
-
newState = DEFAULT_STATE;
|
37 |
-
break;
|
38 |
-
case ACTION.SET_IDLE:
|
39 |
-
newState =
|
40 |
-
state.status !== STATUS.IDLE
|
41 |
-
? {
|
42 |
-
...state,
|
43 |
-
status: STATUS.IDLE,
|
44 |
-
}
|
45 |
-
: state;
|
46 |
-
break;
|
47 |
-
case ACTION.SET_REDIRECT_URL:
|
48 |
-
newState =
|
49 |
-
url !== undefined && url !== state.redirectUrl
|
50 |
-
? {
|
51 |
-
...state,
|
52 |
-
redirectUrl: url,
|
53 |
-
}
|
54 |
-
: state;
|
55 |
-
break;
|
56 |
-
case ACTION.SET_PROCESSING_RESPONSE:
|
57 |
-
newState = {
|
58 |
-
...state,
|
59 |
-
processingResponse: data as PaymentResultDataType,
|
60 |
-
};
|
61 |
-
break;
|
62 |
-
|
63 |
-
case ACTION.SET_COMPLETE:
|
64 |
-
newState =
|
65 |
-
state.status !== STATUS.COMPLETE
|
66 |
-
? {
|
67 |
-
...state,
|
68 |
-
status: STATUS.COMPLETE,
|
69 |
-
// @todo Investigate why redirectURL could be non-truthy and whether this would cause a bug if multiple gateways were used for payment e.g. 1st set the redirect URL but failed, and then the 2nd did not provide a redirect URL and succeeded.
|
70 |
-
redirectUrl:
|
71 |
-
data !== undefined &&
|
72 |
-
typeof data.redirectUrl === 'string' &&
|
73 |
-
data.redirectUrl
|
74 |
-
? data.redirectUrl
|
75 |
-
: state.redirectUrl,
|
76 |
-
}
|
77 |
-
: state;
|
78 |
-
break;
|
79 |
-
case ACTION.SET_PROCESSING:
|
80 |
-
newState =
|
81 |
-
state.status !== STATUS.PROCESSING
|
82 |
-
? {
|
83 |
-
...state,
|
84 |
-
status: STATUS.PROCESSING,
|
85 |
-
hasError: false,
|
86 |
-
}
|
87 |
-
: state;
|
88 |
-
// clear any error state.
|
89 |
-
newState =
|
90 |
-
newState.hasError === false
|
91 |
-
? newState
|
92 |
-
: { ...newState, hasError: false };
|
93 |
-
break;
|
94 |
-
case ACTION.SET_BEFORE_PROCESSING:
|
95 |
-
newState =
|
96 |
-
state.status !== STATUS.BEFORE_PROCESSING
|
97 |
-
? {
|
98 |
-
...state,
|
99 |
-
status: STATUS.BEFORE_PROCESSING,
|
100 |
-
hasError: false,
|
101 |
-
}
|
102 |
-
: state;
|
103 |
-
break;
|
104 |
-
case ACTION.SET_AFTER_PROCESSING:
|
105 |
-
newState =
|
106 |
-
state.status !== STATUS.AFTER_PROCESSING
|
107 |
-
? {
|
108 |
-
...state,
|
109 |
-
status: STATUS.AFTER_PROCESSING,
|
110 |
-
}
|
111 |
-
: state;
|
112 |
-
break;
|
113 |
-
case ACTION.SET_HAS_ERROR:
|
114 |
-
newState = state.hasError
|
115 |
-
? state
|
116 |
-
: {
|
117 |
-
...state,
|
118 |
-
hasError: true,
|
119 |
-
};
|
120 |
-
newState =
|
121 |
-
state.status === STATUS.PROCESSING ||
|
122 |
-
state.status === STATUS.BEFORE_PROCESSING
|
123 |
-
? {
|
124 |
-
...newState,
|
125 |
-
status: STATUS.IDLE,
|
126 |
-
}
|
127 |
-
: newState;
|
128 |
-
break;
|
129 |
-
case ACTION.SET_NO_ERROR:
|
130 |
-
newState = state.hasError
|
131 |
-
? {
|
132 |
-
...state,
|
133 |
-
hasError: false,
|
134 |
-
}
|
135 |
-
: state;
|
136 |
-
break;
|
137 |
-
case ACTION.INCREMENT_CALCULATING:
|
138 |
-
newState = {
|
139 |
-
...state,
|
140 |
-
calculatingCount: state.calculatingCount + 1,
|
141 |
-
};
|
142 |
-
break;
|
143 |
-
case ACTION.DECREMENT_CALCULATING:
|
144 |
-
newState = {
|
145 |
-
...state,
|
146 |
-
calculatingCount: Math.max( 0, state.calculatingCount - 1 ),
|
147 |
-
};
|
148 |
-
break;
|
149 |
-
case ACTION.SET_CUSTOMER_ID:
|
150 |
-
newState =
|
151 |
-
customerId !== undefined
|
152 |
-
? {
|
153 |
-
...state,
|
154 |
-
customerId,
|
155 |
-
}
|
156 |
-
: state;
|
157 |
-
break;
|
158 |
-
case ACTION.SET_ORDER_ID:
|
159 |
-
newState =
|
160 |
-
orderId !== undefined
|
161 |
-
? {
|
162 |
-
...state,
|
163 |
-
orderId,
|
164 |
-
}
|
165 |
-
: state;
|
166 |
-
break;
|
167 |
-
case ACTION.SET_SHOULD_CREATE_ACCOUNT:
|
168 |
-
if (
|
169 |
-
shouldCreateAccount !== undefined &&
|
170 |
-
shouldCreateAccount !== state.shouldCreateAccount
|
171 |
-
) {
|
172 |
-
newState = {
|
173 |
-
...state,
|
174 |
-
shouldCreateAccount,
|
175 |
-
};
|
176 |
-
}
|
177 |
-
break;
|
178 |
-
case ACTION.SET_ORDER_NOTES:
|
179 |
-
if ( orderNotes !== undefined && state.orderNotes !== orderNotes ) {
|
180 |
-
newState = {
|
181 |
-
...state,
|
182 |
-
orderNotes,
|
183 |
-
};
|
184 |
-
}
|
185 |
-
break;
|
186 |
-
}
|
187 |
-
// automatically update state to idle from pristine as soon as it
|
188 |
-
// initially changes.
|
189 |
-
if (
|
190 |
-
newState !== state &&
|
191 |
-
type !== ACTION.SET_PRISTINE &&
|
192 |
-
newState.status === STATUS.PRISTINE
|
193 |
-
) {
|
194 |
-
newState.status = STATUS.IDLE;
|
195 |
-
}
|
196 |
-
return newState;
|
197 |
-
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/base/context/providers/cart-checkout/checkout-state/types.ts
DELETED
@@ -1,103 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* Internal dependencies
|
3 |
-
*/
|
4 |
-
import { STATUS } from './constants';
|
5 |
-
import type { emitterCallback } from '../../../event-emit';
|
6 |
-
|
7 |
-
export interface CheckoutResponseError {
|
8 |
-
code: string;
|
9 |
-
message: string;
|
10 |
-
data: {
|
11 |
-
status: number;
|
12 |
-
};
|
13 |
-
}
|
14 |
-
|
15 |
-
export interface CheckoutResponseSuccess {
|
16 |
-
// eslint-disable-next-line camelcase
|
17 |
-
payment_result: {
|
18 |
-
// eslint-disable-next-line camelcase
|
19 |
-
payment_status: 'success' | 'failure' | 'pending' | 'error';
|
20 |
-
// eslint-disable-next-line camelcase
|
21 |
-
payment_details: Record< string, string > | Record< string, never >;
|
22 |
-
// eslint-disable-next-line camelcase
|
23 |
-
redirect_url: string;
|
24 |
-
};
|
25 |
-
}
|
26 |
-
|
27 |
-
export type CheckoutResponse = CheckoutResponseSuccess | CheckoutResponseError;
|
28 |
-
|
29 |
-
export interface PaymentResultDataType {
|
30 |
-
message: string;
|
31 |
-
paymentStatus: string;
|
32 |
-
paymentDetails: Record< string, string > | Record< string, never >;
|
33 |
-
redirectUrl: string;
|
34 |
-
}
|
35 |
-
|
36 |
-
export type CheckoutStateContextState = {
|
37 |
-
redirectUrl: string;
|
38 |
-
status: STATUS;
|
39 |
-
hasError: boolean;
|
40 |
-
calculatingCount: number;
|
41 |
-
orderId: number;
|
42 |
-
orderNotes: string;
|
43 |
-
customerId: number;
|
44 |
-
shouldCreateAccount: boolean;
|
45 |
-
processingResponse: PaymentResultDataType | null;
|
46 |
-
};
|
47 |
-
|
48 |
-
export type CheckoutStateDispatchActions = {
|
49 |
-
resetCheckout: () => void;
|
50 |
-
setRedirectUrl: ( url: string ) => void;
|
51 |
-
setHasError: ( hasError: boolean ) => void;
|
52 |
-
setAfterProcessing: ( response: CheckoutResponse ) => void;
|
53 |
-
incrementCalculating: () => void;
|
54 |
-
decrementCalculating: () => void;
|
55 |
-
setCustomerId: ( id: number ) => void;
|
56 |
-
setOrderId: ( id: number ) => void;
|
57 |
-
setOrderNotes: ( orderNotes: string ) => void;
|
58 |
-
};
|
59 |
-
|
60 |
-
export type CheckoutStateContextType = {
|
61 |
-
// Dispatch actions to the checkout provider.
|
62 |
-
dispatchActions: CheckoutStateDispatchActions;
|
63 |
-
// Submits the checkout and begins processing.
|
64 |
-
onSubmit: () => void;
|
65 |
-
// True when checkout is complete and ready for redirect.
|
66 |
-
isComplete: boolean;
|
67 |
-
// True when the checkout state has changed and checkout has no activity.
|
68 |
-
isIdle: boolean;
|
69 |
-
// True when something in the checkout is resulting in totals being calculated.
|
70 |
-
isCalculating: boolean;
|
71 |
-
// True when checkout has been submitted and is being processed. Note, payment related processing happens during this state. When payment status is success, processing happens on the server.
|
72 |
-
isProcessing: boolean;
|
73 |
-
// True during any observers executing logic before checkout processing (eg. validation).
|
74 |
-
isBeforeProcessing: boolean;
|
75 |
-
// True when checkout status is AFTER_PROCESSING.
|
76 |
-
isAfterProcessing: boolean;
|
77 |
-
// True when the checkout is in an error state. Whatever caused the error (validation/payment method) will likely have triggered a notice.
|
78 |
-
hasError: boolean;
|
79 |
-
// This is the url that checkout will redirect to when it's ready.
|
80 |
-
redirectUrl: string;
|
81 |
-
// This is the ID for the draft order if one exists.
|
82 |
-
orderId: number;
|
83 |
-
// Order notes introduced by the user in the checkout form.
|
84 |
-
orderNotes: string;
|
85 |
-
// This is the ID of the customer the draft order belongs to.
|
86 |
-
customerId: number;
|
87 |
-
// Used to register a callback that will fire after checkout has been processed and there are no errors.
|
88 |
-
onCheckoutAfterProcessingWithSuccess: ReturnType< typeof emitterCallback >;
|
89 |
-
// Used to register a callback that will fire when the checkout has been processed and has an error.
|
90 |
-
onCheckoutAfterProcessingWithError: ReturnType< typeof emitterCallback >;
|
91 |
-
// Deprecated in favour of onCheckoutValidationBeforeProcessing.
|
92 |
-
onCheckoutBeforeProcessing: ReturnType< typeof emitterCallback >;
|
93 |
-
// Used to register a callback that will fire when the checkout has been submitted before being sent off to the server.
|
94 |
-
onCheckoutValidationBeforeProcessing: ReturnType< typeof emitterCallback >;
|
95 |
-
// True when the checkout has a draft order from the API.
|
96 |
-
hasOrder: boolean;
|
97 |
-
// When true, means the provider is providing data for the cart.
|
98 |
-
isCart: boolean;
|
99 |
-
// Should a user account be created?
|
100 |
-
shouldCreateAccount: boolean;
|
101 |
-
// Set if user account should be created.
|
102 |
-
setShouldCreateAccount: ( shouldCreateAccount: boolean ) => void;
|
103 |
-
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/base/context/providers/cart-checkout/checkout-state/utils.ts
DELETED
@@ -1,63 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* External dependencies
|
3 |
-
*/
|
4 |
-
import { __ } from '@wordpress/i18n';
|
5 |
-
import { decodeEntities } from '@wordpress/html-entities';
|
6 |
-
|
7 |
-
/**
|
8 |
-
* Internal dependencies
|
9 |
-
*/
|
10 |
-
import type { PaymentResultDataType, CheckoutResponse } from './types';
|
11 |
-
|
12 |
-
/**
|
13 |
-
* Prepares the payment_result data from the server checkout endpoint response.
|
14 |
-
*/
|
15 |
-
export const getPaymentResultFromCheckoutResponse = (
|
16 |
-
response: CheckoutResponse
|
17 |
-
): PaymentResultDataType => {
|
18 |
-
const paymentResult = {
|
19 |
-
message: '',
|
20 |
-
paymentStatus: '',
|
21 |
-
redirectUrl: '',
|
22 |
-
paymentDetails: {},
|
23 |
-
} as PaymentResultDataType;
|
24 |
-
|
25 |
-
// payment_result is present in successful responses.
|
26 |
-
if ( 'payment_result' in response ) {
|
27 |
-
paymentResult.paymentStatus = response.payment_result.payment_status;
|
28 |
-
paymentResult.redirectUrl = response.payment_result.redirect_url;
|
29 |
-
|
30 |
-
if (
|
31 |
-
response.payment_result.hasOwnProperty( 'payment_details' ) &&
|
32 |
-
Array.isArray( response.payment_result.payment_details )
|
33 |
-
) {
|
34 |
-
response.payment_result.payment_details.forEach(
|
35 |
-
( { key, value }: { key: string; value: string } ) => {
|
36 |
-
paymentResult.paymentDetails[ key ] = decodeEntities(
|
37 |
-
value
|
38 |
-
);
|
39 |
-
}
|
40 |
-
);
|
41 |
-
}
|
42 |
-
}
|
43 |
-
|
44 |
-
// message is present in error responses.
|
45 |
-
if ( 'message' in response ) {
|
46 |
-
paymentResult.message = decodeEntities( response.message );
|
47 |
-
}
|
48 |
-
|
49 |
-
// If there was an error code but no message, set a default message.
|
50 |
-
if (
|
51 |
-
! paymentResult.message &&
|
52 |
-
'data' in response &&
|
53 |
-
'status' in response.data &&
|
54 |
-
response.data.status > 299
|
55 |
-
) {
|
56 |
-
paymentResult.message = __(
|
57 |
-
'Something went wrong. Please contact us to get assistance.',
|
58 |
-
'woo-gutenberg-products-block'
|
59 |
-
);
|
60 |
-
}
|
61 |
-
|
62 |
-
return paymentResult;
|
63 |
-
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/base/context/providers/cart-checkout/checkout/index.js
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { PluginArea } from '@wordpress/plugins';
|
5 |
-
import { CURRENT_USER_IS_ADMIN } from '@woocommerce/settings';
|
6 |
import BlockErrorBoundary from '@woocommerce/base-components/block-error-boundary';
|
7 |
import { SlotFillProvider } from '@woocommerce/blocks-checkout';
|
8 |
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { PluginArea } from '@wordpress/plugins';
|
5 |
+
import { CURRENT_USER_IS_ADMIN } from '@woocommerce/block-settings';
|
6 |
import BlockErrorBoundary from '@woocommerce/base-components/block-error-boundary';
|
7 |
import { SlotFillProvider } from '@woocommerce/blocks-checkout';
|
8 |
|
assets/js/base/context/providers/cart-checkout/checkout/processor/index.js
CHANGED
@@ -10,10 +10,7 @@ import {
|
|
10 |
useState,
|
11 |
useMemo,
|
12 |
} from '@wordpress/element';
|
13 |
-
import {
|
14 |
-
emptyHiddenAddressFields,
|
15 |
-
formatStoreApiErrorMessage,
|
16 |
-
} from '@woocommerce/base-utils';
|
17 |
|
18 |
/**
|
19 |
* Internal dependencies
|
@@ -37,7 +34,7 @@ import { useStoreNotices } from '../../../../hooks/use-store-notices';
|
|
37 |
const CheckoutProcessor = () => {
|
38 |
const {
|
39 |
hasError: checkoutHasError,
|
40 |
-
|
41 |
dispatchActions,
|
42 |
redirectUrl,
|
43 |
isProcessing: checkoutIsProcessing,
|
@@ -52,7 +49,6 @@ const CheckoutProcessor = () => {
|
|
52 |
const { cartNeedsPayment, receiveCart } = useStoreCart();
|
53 |
const {
|
54 |
activePaymentMethod,
|
55 |
-
isExpressPaymentMethodActive,
|
56 |
currentStatus: currentPaymentStatus,
|
57 |
paymentMethodData,
|
58 |
expressPaymentMethods,
|
@@ -64,6 +60,9 @@ const CheckoutProcessor = () => {
|
|
64 |
const currentShippingAddress = useRef( shippingAddress );
|
65 |
const currentRedirectUrl = useRef( redirectUrl );
|
66 |
const [ isProcessingOrder, setIsProcessingOrder ] = useState( false );
|
|
|
|
|
|
|
67 |
|
68 |
const paymentMethodId = useMemo( () => {
|
69 |
const merged = { ...expressPaymentMethods, ...paymentMethods };
|
@@ -71,20 +70,20 @@ const CheckoutProcessor = () => {
|
|
71 |
}, [ activePaymentMethod, expressPaymentMethods, paymentMethods ] );
|
72 |
|
73 |
const checkoutWillHaveError =
|
74 |
-
( hasValidationErrors && !
|
75 |
currentPaymentStatus.hasError ||
|
76 |
shippingErrorStatus.hasError;
|
77 |
|
78 |
// If express payment method is active, let's suppress notices
|
79 |
useEffect( () => {
|
80 |
-
setIsSuppressed(
|
81 |
-
}, [
|
82 |
|
83 |
useEffect( () => {
|
84 |
if (
|
85 |
checkoutWillHaveError !== checkoutHasError &&
|
86 |
( checkoutIsProcessing || checkoutIsBeforeProcessing ) &&
|
87 |
-
!
|
88 |
) {
|
89 |
dispatchActions.setHasError( checkoutWillHaveError );
|
90 |
}
|
@@ -93,7 +92,7 @@ const CheckoutProcessor = () => {
|
|
93 |
checkoutHasError,
|
94 |
checkoutIsProcessing,
|
95 |
checkoutIsBeforeProcessing,
|
96 |
-
|
97 |
dispatchActions,
|
98 |
] );
|
99 |
|
@@ -144,33 +143,29 @@ const CheckoutProcessor = () => {
|
|
144 |
|
145 |
useEffect( () => {
|
146 |
let unsubscribeProcessing;
|
147 |
-
if ( !
|
148 |
-
unsubscribeProcessing =
|
149 |
checkValidation,
|
150 |
0
|
151 |
);
|
152 |
}
|
153 |
return () => {
|
154 |
-
if ( !
|
155 |
unsubscribeProcessing();
|
156 |
}
|
157 |
};
|
158 |
}, [
|
159 |
-
|
160 |
checkValidation,
|
161 |
-
|
162 |
] );
|
163 |
|
164 |
const processOrder = useCallback( () => {
|
165 |
setIsProcessingOrder( true );
|
166 |
removeNotice( 'checkout' );
|
167 |
let data = {
|
168 |
-
billing_address:
|
169 |
-
|
170 |
-
),
|
171 |
-
shipping_address: emptyHiddenAddressFields(
|
172 |
-
currentShippingAddress.current
|
173 |
-
),
|
174 |
customer_note: orderNotes,
|
175 |
should_create_account: shouldCreateAccount,
|
176 |
};
|
10 |
useState,
|
11 |
useMemo,
|
12 |
} from '@wordpress/element';
|
13 |
+
import { formatStoreApiErrorMessage } from '@woocommerce/base-utils';
|
|
|
|
|
|
|
14 |
|
15 |
/**
|
16 |
* Internal dependencies
|
34 |
const CheckoutProcessor = () => {
|
35 |
const {
|
36 |
hasError: checkoutHasError,
|
37 |
+
onCheckoutBeforeProcessing,
|
38 |
dispatchActions,
|
39 |
redirectUrl,
|
40 |
isProcessing: checkoutIsProcessing,
|
49 |
const { cartNeedsPayment, receiveCart } = useStoreCart();
|
50 |
const {
|
51 |
activePaymentMethod,
|
|
|
52 |
currentStatus: currentPaymentStatus,
|
53 |
paymentMethodData,
|
54 |
expressPaymentMethods,
|
60 |
const currentShippingAddress = useRef( shippingAddress );
|
61 |
const currentRedirectUrl = useRef( redirectUrl );
|
62 |
const [ isProcessingOrder, setIsProcessingOrder ] = useState( false );
|
63 |
+
const expressPaymentMethodActive = Object.keys(
|
64 |
+
expressPaymentMethods
|
65 |
+
).includes( activePaymentMethod );
|
66 |
|
67 |
const paymentMethodId = useMemo( () => {
|
68 |
const merged = { ...expressPaymentMethods, ...paymentMethods };
|
70 |
}, [ activePaymentMethod, expressPaymentMethods, paymentMethods ] );
|
71 |
|
72 |
const checkoutWillHaveError =
|
73 |
+
( hasValidationErrors && ! expressPaymentMethodActive ) ||
|
74 |
currentPaymentStatus.hasError ||
|
75 |
shippingErrorStatus.hasError;
|
76 |
|
77 |
// If express payment method is active, let's suppress notices
|
78 |
useEffect( () => {
|
79 |
+
setIsSuppressed( expressPaymentMethodActive );
|
80 |
+
}, [ expressPaymentMethodActive, setIsSuppressed ] );
|
81 |
|
82 |
useEffect( () => {
|
83 |
if (
|
84 |
checkoutWillHaveError !== checkoutHasError &&
|
85 |
( checkoutIsProcessing || checkoutIsBeforeProcessing ) &&
|
86 |
+
! expressPaymentMethodActive
|
87 |
) {
|
88 |
dispatchActions.setHasError( checkoutWillHaveError );
|
89 |
}
|
92 |
checkoutHasError,
|
93 |
checkoutIsProcessing,
|
94 |
checkoutIsBeforeProcessing,
|
95 |
+
expressPaymentMethodActive,
|
96 |
dispatchActions,
|
97 |
] );
|
98 |
|
143 |
|
144 |
useEffect( () => {
|
145 |
let unsubscribeProcessing;
|
146 |
+
if ( ! expressPaymentMethodActive ) {
|
147 |
+
unsubscribeProcessing = onCheckoutBeforeProcessing(
|
148 |
checkValidation,
|
149 |
0
|
150 |
);
|
151 |
}
|
152 |
return () => {
|
153 |
+
if ( ! expressPaymentMethodActive ) {
|
154 |
unsubscribeProcessing();
|
155 |
}
|
156 |
};
|
157 |
}, [
|
158 |
+
onCheckoutBeforeProcessing,
|
159 |
checkValidation,
|
160 |
+
expressPaymentMethodActive,
|
161 |
] );
|
162 |
|
163 |
const processOrder = useCallback( () => {
|
164 |
setIsProcessingOrder( true );
|
165 |
removeNotice( 'checkout' );
|
166 |
let data = {
|
167 |
+
billing_address: currentBillingData.current,
|
168 |
+
shipping_address: currentShippingAddress.current,
|
|
|
|
|
|
|
|
|
169 |
customer_note: orderNotes,
|
170 |
should_create_account: shouldCreateAccount,
|
171 |
};
|
assets/js/base/context/providers/cart-checkout/payment-methods/actions.ts
CHANGED
@@ -2,77 +2,106 @@
|
|
2 |
* Internal dependencies
|
3 |
*/
|
4 |
import { ACTION, STATUS } from './constants';
|
5 |
-
import type { PaymentMethods
|
6 |
|
7 |
export interface ActionType {
|
8 |
type: ACTION | STATUS;
|
9 |
errorMessage?: string;
|
10 |
paymentMethodData?: Record< string, unknown >;
|
11 |
-
paymentMethods?: PaymentMethods
|
12 |
shouldSavePaymentMethod?: boolean;
|
13 |
}
|
14 |
|
15 |
/**
|
16 |
-
*
|
17 |
*/
|
18 |
-
export const
|
19 |
-
statusOnly: ( type: STATUS ): { type: STATUS } => ( { type } as const ),
|
20 |
-
error: ( errorMessage: string ): ActionType =>
|
21 |
-
( {
|
22 |
-
type: STATUS.ERROR,
|
23 |
-
errorMessage,
|
24 |
-
} as const ),
|
25 |
-
failed: ( {
|
26 |
-
errorMessage,
|
27 |
-
paymentMethodData,
|
28 |
-
}: {
|
29 |
-
errorMessage: string;
|
30 |
-
paymentMethodData: Record< string, unknown >;
|
31 |
-
} ): ActionType =>
|
32 |
-
( {
|
33 |
-
type: STATUS.FAILED,
|
34 |
-
errorMessage,
|
35 |
-
paymentMethodData,
|
36 |
-
} as const ),
|
37 |
-
success: ( {
|
38 |
-
paymentMethodData,
|
39 |
-
}: {
|
40 |
-
paymentMethodData?: Record< string, unknown >;
|
41 |
-
} ): ActionType =>
|
42 |
-
( {
|
43 |
-
type: STATUS.SUCCESS,
|
44 |
-
paymentMethodData,
|
45 |
-
} as const ),
|
46 |
-
started: ( {
|
47 |
-
paymentMethodData,
|
48 |
-
}: {
|
49 |
-
paymentMethodData?: Record< string, unknown >;
|
50 |
-
} ): ActionType =>
|
51 |
-
( {
|
52 |
-
type: STATUS.STARTED,
|
53 |
-
paymentMethodData,
|
54 |
-
} as const ),
|
55 |
-
setRegisteredPaymentMethods: (
|
56 |
-
paymentMethods: PaymentMethods
|
57 |
-
): ActionType =>
|
58 |
-
( {
|
59 |
-
type: ACTION.SET_REGISTERED_PAYMENT_METHODS,
|
60 |
-
paymentMethods,
|
61 |
-
} as const ),
|
62 |
-
setRegisteredExpressPaymentMethods: (
|
63 |
-
paymentMethods: ExpressPaymentMethods
|
64 |
-
): ActionType =>
|
65 |
-
( {
|
66 |
-
type: ACTION.SET_REGISTERED_EXPRESS_PAYMENT_METHODS,
|
67 |
-
paymentMethods,
|
68 |
-
} as const ),
|
69 |
-
setShouldSavePaymentMethod: (
|
70 |
-
shouldSavePaymentMethod: boolean
|
71 |
-
): ActionType =>
|
72 |
-
( {
|
73 |
-
type: ACTION.SET_SHOULD_SAVE_PAYMENT_METHOD,
|
74 |
-
shouldSavePaymentMethod,
|
75 |
-
} as const ),
|
76 |
-
};
|
77 |
|
78 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
* Internal dependencies
|
3 |
*/
|
4 |
import { ACTION, STATUS } from './constants';
|
5 |
+
import type { PaymentMethods } from './types';
|
6 |
|
7 |
export interface ActionType {
|
8 |
type: ACTION | STATUS;
|
9 |
errorMessage?: string;
|
10 |
paymentMethodData?: Record< string, unknown >;
|
11 |
+
paymentMethods?: PaymentMethods;
|
12 |
shouldSavePaymentMethod?: boolean;
|
13 |
}
|
14 |
|
15 |
/**
|
16 |
+
* Used to dispatch a status update only for the given type.
|
17 |
*/
|
18 |
+
export const statusOnly = ( type: STATUS ): { type: STATUS } => ( { type } );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
|
20 |
+
/**
|
21 |
+
* Used to dispatch an error message along with setting current payment status to ERROR.
|
22 |
+
*
|
23 |
+
* @param {string} errorMessage Whatever error message accompanying the error condition.
|
24 |
+
* @return {ActionType} The action object.
|
25 |
+
*/
|
26 |
+
export const error = ( errorMessage: string ): ActionType => ( {
|
27 |
+
type: STATUS.ERROR,
|
28 |
+
errorMessage,
|
29 |
+
} );
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Used to dispatch a payment failed status update.
|
33 |
+
*/
|
34 |
+
export const failed = ( {
|
35 |
+
errorMessage,
|
36 |
+
paymentMethodData,
|
37 |
+
}: {
|
38 |
+
errorMessage: string;
|
39 |
+
paymentMethodData: Record< string, unknown >;
|
40 |
+
} ): ActionType => ( {
|
41 |
+
type: STATUS.FAILED,
|
42 |
+
errorMessage,
|
43 |
+
paymentMethodData,
|
44 |
+
} );
|
45 |
+
|
46 |
+
/**
|
47 |
+
* Used to dispatch a payment success status update.
|
48 |
+
*/
|
49 |
+
export const success = ( {
|
50 |
+
paymentMethodData,
|
51 |
+
}: {
|
52 |
+
paymentMethodData?: Record< string, unknown >;
|
53 |
+
} ): ActionType => ( {
|
54 |
+
type: STATUS.SUCCESS,
|
55 |
+
paymentMethodData,
|
56 |
+
} );
|
57 |
+
|
58 |
+
/**
|
59 |
+
* Used to dispatch a payment started status update.
|
60 |
+
*/
|
61 |
+
export const started = ( {
|
62 |
+
paymentMethodData,
|
63 |
+
}: {
|
64 |
+
paymentMethodData?: Record< string, unknown >;
|
65 |
+
} ): ActionType => ( {
|
66 |
+
type: STATUS.STARTED,
|
67 |
+
paymentMethodData,
|
68 |
+
} );
|
69 |
+
|
70 |
+
/**
|
71 |
+
* Used to dispatch an action for updating a registered payment method in the state.
|
72 |
+
*
|
73 |
+
* @param {Object} paymentMethods Payment methods to register.
|
74 |
+
* @return {Object} An action object.
|
75 |
+
*/
|
76 |
+
export const setRegisteredPaymentMethods = (
|
77 |
+
paymentMethods: PaymentMethods
|
78 |
+
): ActionType => ( {
|
79 |
+
type: ACTION.SET_REGISTERED_PAYMENT_METHODS,
|
80 |
+
paymentMethods,
|
81 |
+
} );
|
82 |
+
|
83 |
+
/**
|
84 |
+
* Used to dispatch an action for updating a registered express payment method in the state.
|
85 |
+
*
|
86 |
+
* @param {Object} paymentMethods Payment methods to register.
|
87 |
+
* @return {Object} An action object.
|
88 |
+
*/
|
89 |
+
export const setRegisteredExpressPaymentMethods = (
|
90 |
+
paymentMethods: PaymentMethods
|
91 |
+
): ActionType => ( {
|
92 |
+
type: ACTION.SET_REGISTERED_EXPRESS_PAYMENT_METHODS,
|
93 |
+
paymentMethods,
|
94 |
+
} );
|
95 |
+
|
96 |
+
/**
|
97 |
+
* Set a flag indicating that the payment method info (e.g. a payment card) should be saved to user account after order completion.
|
98 |
+
*
|
99 |
+
* @param {boolean} shouldSavePaymentMethod
|
100 |
+
* @return {Object} An action object.
|
101 |
+
*/
|
102 |
+
export const setShouldSavePaymentMethod = (
|
103 |
+
shouldSavePaymentMethod: boolean
|
104 |
+
): ActionType => ( {
|
105 |
+
type: ACTION.SET_SHOULD_SAVE_PAYMENT_METHOD,
|
106 |
+
shouldSavePaymentMethod,
|
107 |
+
} );
|
assets/js/base/context/providers/cart-checkout/payment-methods/constants.ts
CHANGED
@@ -37,7 +37,6 @@ export const DEFAULT_PAYMENT_DATA_CONTEXT_STATE: PaymentMethodDataContextState =
|
|
37 |
|
38 |
export const DEFAULT_PAYMENT_METHOD_DATA: PaymentMethodDataContextType = {
|
39 |
setPaymentStatus: () => ( {
|
40 |
-
pristine: () => void null,
|
41 |
started: () => void null,
|
42 |
processing: () => void null,
|
43 |
completed: () => void null,
|
@@ -55,7 +54,6 @@ export const DEFAULT_PAYMENT_METHOD_DATA: PaymentMethodDataContextType = {
|
|
55 |
hasError: false,
|
56 |
hasFailed: false,
|
57 |
isSuccessful: false,
|
58 |
-
isDoingExpressPayment: false,
|
59 |
},
|
60 |
paymentStatuses: STATUS,
|
61 |
paymentMethodData: {},
|
@@ -71,7 +69,6 @@ export const DEFAULT_PAYMENT_METHOD_DATA: PaymentMethodDataContextType = {
|
|
71 |
expressPaymentMethodsInitialized: false,
|
72 |
onPaymentProcessing: () => () => () => void null,
|
73 |
setExpressPaymentError: () => void null,
|
74 |
-
isExpressPaymentMethodActive: false,
|
75 |
setShouldSavePayment: () => void null,
|
76 |
shouldSavePayment: false,
|
77 |
};
|
37 |
|
38 |
export const DEFAULT_PAYMENT_METHOD_DATA: PaymentMethodDataContextType = {
|
39 |
setPaymentStatus: () => ( {
|
|
|
40 |
started: () => void null,
|
41 |
processing: () => void null,
|
42 |
completed: () => void null,
|
54 |
hasError: false,
|
55 |
hasFailed: false,
|
56 |
isSuccessful: false,
|
|
|
57 |
},
|
58 |
paymentStatuses: STATUS,
|
59 |
paymentMethodData: {},
|
69 |
expressPaymentMethodsInitialized: false,
|
70 |
onPaymentProcessing: () => () => () => void null,
|
71 |
setExpressPaymentError: () => void null,
|
|
|
72 |
setShouldSavePayment: () => void null,
|
73 |
shouldSavePayment: false,
|
74 |
};
|
assets/js/base/context/providers/cart-checkout/payment-methods/payment-method-data-context.tsx
CHANGED
@@ -4,33 +4,40 @@
|
|
4 |
import {
|
5 |
createContext,
|
6 |
useContext,
|
|
|
7 |
useReducer,
|
8 |
useCallback,
|
9 |
-
useRef,
|
10 |
useEffect,
|
|
|
11 |
useMemo,
|
12 |
} from '@wordpress/element';
|
13 |
|
14 |
/**
|
15 |
* Internal dependencies
|
16 |
*/
|
17 |
-
import type {
|
18 |
-
CustomerPaymentMethods,
|
19 |
-
PaymentMethodDataContextType,
|
20 |
-
} from './types';
|
21 |
import {
|
22 |
STATUS,
|
23 |
DEFAULT_PAYMENT_DATA_CONTEXT_STATE,
|
24 |
DEFAULT_PAYMENT_METHOD_DATA,
|
25 |
} from './constants';
|
26 |
import reducer from './reducer';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
27 |
import {
|
28 |
usePaymentMethods,
|
29 |
useExpressPaymentMethods,
|
30 |
} from './use-payment-method-registration';
|
31 |
-
import {
|
32 |
-
import { useActivePaymentMethod } from './use-active-payment-method';
|
33 |
import { useCheckoutContext } from '../checkout-state';
|
|
|
34 |
import { useEditorContext } from '../../editor-context';
|
35 |
import {
|
36 |
EMIT_TYPES,
|
@@ -39,10 +46,29 @@ import {
|
|
39 |
reducer as emitReducer,
|
40 |
} from './event-emit';
|
41 |
import { useValidationContext } from '../../validation';
|
|
|
42 |
import { useStoreNotices } from '../../../hooks/use-store-notices';
|
43 |
import { useEmitResponse } from '../../../hooks/use-emit-response';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
44 |
import { getCustomerPaymentMethods } from './utils';
|
45 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
46 |
const PaymentMethodDataContext = createContext( DEFAULT_PAYMENT_METHOD_DATA );
|
47 |
|
48 |
export const usePaymentMethodDataContext = (): PaymentMethodDataContextType => {
|
@@ -50,9 +76,11 @@ export const usePaymentMethodDataContext = (): PaymentMethodDataContextType => {
|
|
50 |
};
|
51 |
|
52 |
/**
|
53 |
-
* PaymentMethodDataProvider is automatically included in the
|
|
|
54 |
*
|
55 |
-
* This provides the api interface (via the context hook) for payment method
|
|
|
56 |
*
|
57 |
* @param {Object} props Incoming props for provider
|
58 |
* @param {Object} props.children The wrapped components in this provider.
|
@@ -62,6 +90,7 @@ export const PaymentMethodDataProvider = ( {
|
|
62 |
}: {
|
63 |
children: React.ReactChildren;
|
64 |
} ): JSX.Element => {
|
|
|
65 |
const {
|
66 |
isProcessing: checkoutIsProcessing,
|
67 |
isIdle: checkoutIsIdle,
|
@@ -69,46 +98,81 @@ export const PaymentMethodDataProvider = ( {
|
|
69 |
hasError: checkoutHasError,
|
70 |
} = useCheckoutContext();
|
71 |
const { isEditor, getPreviewData } = useEditorContext();
|
72 |
-
const { setValidationErrors } = useValidationContext();
|
73 |
-
const { addErrorNotice, removeNotice } = useStoreNotices();
|
74 |
const {
|
75 |
isSuccessResponse,
|
76 |
isErrorResponse,
|
77 |
isFailResponse,
|
78 |
noticeContexts,
|
79 |
} = useEmitResponse();
|
|
|
|
|
|
|
|
|
80 |
const [ observers, observerDispatch ] = useReducer( emitReducer, {} );
|
81 |
-
const
|
|
|
|
|
|
|
82 |
const currentObservers = useRef( observers );
|
|
|
83 |
|
84 |
// ensure observers are always current.
|
85 |
useEffect( () => {
|
86 |
currentObservers.current = observers;
|
87 |
}, [ observers ] );
|
88 |
|
89 |
-
const
|
90 |
-
|
91 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
92 |
);
|
93 |
-
const {
|
94 |
-
dispatchActions,
|
95 |
-
setPaymentStatus,
|
96 |
-
} = usePaymentMethodDataDispatchers( dispatch );
|
97 |
|
98 |
const paymentMethodsInitialized = usePaymentMethods(
|
99 |
-
|
100 |
);
|
101 |
|
102 |
const expressPaymentMethodsInitialized = useExpressPaymentMethods(
|
103 |
-
|
104 |
);
|
105 |
|
106 |
-
const {
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
|
|
|
|
|
|
112 |
|
113 |
const customerPaymentMethods = useMemo( (): CustomerPaymentMethods => {
|
114 |
if ( isEditor ) {
|
@@ -116,9 +180,13 @@ export const PaymentMethodDataProvider = ( {
|
|
116 |
'previewSavedPaymentMethods'
|
117 |
) as CustomerPaymentMethods;
|
118 |
}
|
119 |
-
|
120 |
-
|
121 |
-
|
|
|
|
|
|
|
|
|
122 |
}, [
|
123 |
isEditor,
|
124 |
getPreviewData,
|
@@ -143,63 +211,71 @@ export const PaymentMethodDataProvider = ( {
|
|
143 |
[ addErrorNotice, noticeContexts.EXPRESS_PAYMENTS, removeNotice ]
|
144 |
);
|
145 |
|
146 |
-
const isExpressPaymentMethodActive = Object.keys(
|
147 |
-
paymentData.expressPaymentMethods
|
148 |
-
).includes( activePaymentMethod );
|
149 |
-
|
150 |
const currentStatus = useMemo(
|
151 |
() => ( {
|
152 |
-
isPristine: paymentData.currentStatus ===
|
153 |
-
isStarted: paymentData.currentStatus ===
|
154 |
-
isProcessing: paymentData.currentStatus ===
|
155 |
-
isFinished: [
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
hasFailed: paymentData.currentStatus === STATUS.FAILED,
|
162 |
-
isSuccessful: paymentData.currentStatus === STATUS.SUCCESS,
|
163 |
-
isDoingExpressPayment:
|
164 |
-
paymentData.currentStatus !== STATUS.PRISTINE &&
|
165 |
-
isExpressPaymentMethodActive,
|
166 |
} ),
|
167 |
-
[ paymentData.currentStatus
|
168 |
);
|
169 |
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
203 |
|
204 |
// flip payment to processing if checkout processing is complete, there are no errors, and payment status is started.
|
205 |
useEffect( () => {
|
@@ -222,9 +298,9 @@ export const PaymentMethodDataProvider = ( {
|
|
222 |
// When checkout is returned to idle, set payment status to pristine but only if payment status is already not finished.
|
223 |
useEffect( () => {
|
224 |
if ( checkoutIsIdle && ! currentStatus.isSuccessful ) {
|
225 |
-
|
226 |
}
|
227 |
-
}, [ checkoutIsIdle, currentStatus.isSuccessful
|
228 |
|
229 |
// if checkout has an error and payment is not being made with a saved token and payment status is success, then let's sync payment status back to pristine.
|
230 |
useEffect( () => {
|
@@ -233,15 +309,48 @@ export const PaymentMethodDataProvider = ( {
|
|
233 |
currentStatus.isSuccessful &&
|
234 |
! paymentData.hasSavedToken
|
235 |
) {
|
236 |
-
|
237 |
}
|
238 |
}, [
|
239 |
checkoutHasError,
|
240 |
currentStatus.isSuccessful,
|
241 |
paymentData.hasSavedToken,
|
242 |
-
setPaymentStatus,
|
243 |
] );
|
244 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
245 |
useEffect( () => {
|
246 |
// Note: the nature of this event emitter is that it will bail on any
|
247 |
// observer that returns a response that !== true. However, this still
|
@@ -253,59 +362,40 @@ export const PaymentMethodDataProvider = ( {
|
|
253 |
currentObservers.current,
|
254 |
EMIT_TYPES.PAYMENT_PROCESSING,
|
255 |
{}
|
256 |
-
).then( (
|
257 |
-
|
258 |
-
observerResponses.forEach( ( response ) => {
|
259 |
-
if ( isSuccessResponse( response ) ) {
|
260 |
-
// the last observer response always "wins" for success.
|
261 |
-
successResponse = response;
|
262 |
-
}
|
263 |
-
if (
|
264 |
-
isErrorResponse( response ) ||
|
265 |
-
isFailResponse( response )
|
266 |
-
) {
|
267 |
-
errorResponse = response;
|
268 |
-
}
|
269 |
-
} );
|
270 |
-
if ( successResponse && ! errorResponse ) {
|
271 |
setPaymentStatus().success(
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
);
|
276 |
-
} else if (
|
277 |
-
if (
|
278 |
-
|
279 |
-
errorResponse.message.length
|
280 |
-
) {
|
281 |
-
addErrorNotice( errorResponse.message, {
|
282 |
id: 'wc-payment-error',
|
283 |
isDismissible: false,
|
284 |
context:
|
285 |
-
|
286 |
noticeContexts.PAYMENTS,
|
287 |
} );
|
288 |
}
|
289 |
setPaymentStatus().failed(
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
);
|
294 |
-
} else if (
|
295 |
-
if (
|
296 |
-
|
297 |
-
errorResponse.message.length
|
298 |
-
) {
|
299 |
-
addErrorNotice( errorResponse.message, {
|
300 |
id: 'wc-payment-error',
|
301 |
isDismissible: false,
|
302 |
context:
|
303 |
-
|
304 |
noticeContexts.PAYMENTS,
|
305 |
} );
|
306 |
}
|
307 |
-
setPaymentStatus().error(
|
308 |
-
setValidationErrors(
|
309 |
} else {
|
310 |
// otherwise there are no payment methods doing anything so
|
311 |
// just consider success
|
@@ -342,9 +432,8 @@ export const PaymentMethodDataProvider = ( {
|
|
342 |
paymentMethodsInitialized,
|
343 |
expressPaymentMethodsInitialized,
|
344 |
setExpressPaymentError,
|
345 |
-
isExpressPaymentMethodActive,
|
346 |
shouldSavePayment: paymentData.shouldSavePaymentMethod,
|
347 |
-
setShouldSavePayment
|
348 |
};
|
349 |
|
350 |
return (
|
4 |
import {
|
5 |
createContext,
|
6 |
useContext,
|
7 |
+
useState,
|
8 |
useReducer,
|
9 |
useCallback,
|
|
|
10 |
useEffect,
|
11 |
+
useRef,
|
12 |
useMemo,
|
13 |
} from '@wordpress/element';
|
14 |
|
15 |
/**
|
16 |
* Internal dependencies
|
17 |
*/
|
|
|
|
|
|
|
|
|
18 |
import {
|
19 |
STATUS,
|
20 |
DEFAULT_PAYMENT_DATA_CONTEXT_STATE,
|
21 |
DEFAULT_PAYMENT_METHOD_DATA,
|
22 |
} from './constants';
|
23 |
import reducer from './reducer';
|
24 |
+
import {
|
25 |
+
statusOnly,
|
26 |
+
error,
|
27 |
+
failed,
|
28 |
+
success,
|
29 |
+
started,
|
30 |
+
setRegisteredPaymentMethods,
|
31 |
+
setRegisteredExpressPaymentMethods,
|
32 |
+
setShouldSavePaymentMethod,
|
33 |
+
} from './actions';
|
34 |
import {
|
35 |
usePaymentMethods,
|
36 |
useExpressPaymentMethods,
|
37 |
} from './use-payment-method-registration';
|
38 |
+
import { useCustomerDataContext } from '../customer';
|
|
|
39 |
import { useCheckoutContext } from '../checkout-state';
|
40 |
+
import { useShippingDataContext } from '../shipping';
|
41 |
import { useEditorContext } from '../../editor-context';
|
42 |
import {
|
43 |
EMIT_TYPES,
|
46 |
reducer as emitReducer,
|
47 |
} from './event-emit';
|
48 |
import { useValidationContext } from '../../validation';
|
49 |
+
import { useStoreEvents } from '../../../hooks/use-store-events';
|
50 |
import { useStoreNotices } from '../../../hooks/use-store-notices';
|
51 |
import { useEmitResponse } from '../../../hooks/use-emit-response';
|
52 |
+
|
53 |
+
import type {
|
54 |
+
PaymentStatusDispatchers,
|
55 |
+
PaymentMethods,
|
56 |
+
CustomerPaymentMethods,
|
57 |
+
PaymentMethodsDispatcherType,
|
58 |
+
PaymentMethodDataContextType,
|
59 |
+
} from './types';
|
60 |
import { getCustomerPaymentMethods } from './utils';
|
61 |
|
62 |
+
const {
|
63 |
+
STARTED,
|
64 |
+
PROCESSING,
|
65 |
+
COMPLETE,
|
66 |
+
PRISTINE,
|
67 |
+
ERROR,
|
68 |
+
FAILED,
|
69 |
+
SUCCESS,
|
70 |
+
} = STATUS;
|
71 |
+
|
72 |
const PaymentMethodDataContext = createContext( DEFAULT_PAYMENT_METHOD_DATA );
|
73 |
|
74 |
export const usePaymentMethodDataContext = (): PaymentMethodDataContextType => {
|
76 |
};
|
77 |
|
78 |
/**
|
79 |
+
* PaymentMethodDataProvider is automatically included in the
|
80 |
+
* CheckoutDataProvider.
|
81 |
*
|
82 |
+
* This provides the api interface (via the context hook) for payment method
|
83 |
+
* status and data.
|
84 |
*
|
85 |
* @param {Object} props Incoming props for provider
|
86 |
* @param {Object} props.children The wrapped components in this provider.
|
90 |
}: {
|
91 |
children: React.ReactChildren;
|
92 |
} ): JSX.Element => {
|
93 |
+
const { setBillingData } = useCustomerDataContext();
|
94 |
const {
|
95 |
isProcessing: checkoutIsProcessing,
|
96 |
isIdle: checkoutIsIdle,
|
98 |
hasError: checkoutHasError,
|
99 |
} = useCheckoutContext();
|
100 |
const { isEditor, getPreviewData } = useEditorContext();
|
|
|
|
|
101 |
const {
|
102 |
isSuccessResponse,
|
103 |
isErrorResponse,
|
104 |
isFailResponse,
|
105 |
noticeContexts,
|
106 |
} = useEmitResponse();
|
107 |
+
const { dispatchCheckoutEvent } = useStoreEvents();
|
108 |
+
|
109 |
+
const [ activePaymentMethod, setActive ] = useState( '' ); // The active payment method - e.g. Stripe CC or BACS.
|
110 |
+
const [ activeSavedToken, setActiveSavedToken ] = useState( '' ); // If a previously saved payment method is active, the token for that method. For example, a for a Stripe CC card saved to user account.
|
111 |
const [ observers, observerDispatch ] = useReducer( emitReducer, {} );
|
112 |
+
const [ paymentData, dispatch ] = useReducer(
|
113 |
+
reducer,
|
114 |
+
DEFAULT_PAYMENT_DATA_CONTEXT_STATE
|
115 |
+
);
|
116 |
const currentObservers = useRef( observers );
|
117 |
+
const { onPaymentProcessing } = useEventEmitters( observerDispatch );
|
118 |
|
119 |
// ensure observers are always current.
|
120 |
useEffect( () => {
|
121 |
currentObservers.current = observers;
|
122 |
}, [ observers ] );
|
123 |
|
124 |
+
const setActivePaymentMethod = useCallback(
|
125 |
+
( paymentMethodSlug ) => {
|
126 |
+
setActive( paymentMethodSlug );
|
127 |
+
dispatch( statusOnly( PRISTINE ) );
|
128 |
+
dispatchCheckoutEvent( 'set-active-payment-method', {
|
129 |
+
paymentMethodSlug,
|
130 |
+
} );
|
131 |
+
},
|
132 |
+
[ setActive, dispatch, dispatchCheckoutEvent ]
|
133 |
+
);
|
134 |
+
|
135 |
+
const paymentMethodsDispatcher = useCallback<
|
136 |
+
PaymentMethodsDispatcherType
|
137 |
+
>(
|
138 |
+
( paymentMethods ) => {
|
139 |
+
dispatch(
|
140 |
+
setRegisteredPaymentMethods( paymentMethods as PaymentMethods )
|
141 |
+
);
|
142 |
+
},
|
143 |
+
[ dispatch ]
|
144 |
+
);
|
145 |
+
|
146 |
+
const expressPaymentMethodsDispatcher = useCallback<
|
147 |
+
PaymentMethodsDispatcherType
|
148 |
+
>(
|
149 |
+
( paymentMethods ) => {
|
150 |
+
dispatch(
|
151 |
+
setRegisteredExpressPaymentMethods(
|
152 |
+
paymentMethods as PaymentMethods
|
153 |
+
)
|
154 |
+
);
|
155 |
+
},
|
156 |
+
[ dispatch ]
|
157 |
);
|
|
|
|
|
|
|
|
|
158 |
|
159 |
const paymentMethodsInitialized = usePaymentMethods(
|
160 |
+
paymentMethodsDispatcher
|
161 |
);
|
162 |
|
163 |
const expressPaymentMethodsInitialized = useExpressPaymentMethods(
|
164 |
+
expressPaymentMethodsDispatcher
|
165 |
);
|
166 |
|
167 |
+
const { setValidationErrors } = useValidationContext();
|
168 |
+
const { addErrorNotice, removeNotice } = useStoreNotices();
|
169 |
+
const { setShippingAddress } = useShippingDataContext();
|
170 |
+
const setShouldSavePayment = useCallback(
|
171 |
+
( shouldSave ) => {
|
172 |
+
dispatch( setShouldSavePaymentMethod( shouldSave ) );
|
173 |
+
},
|
174 |
+
[ dispatch ]
|
175 |
+
);
|
176 |
|
177 |
const customerPaymentMethods = useMemo( (): CustomerPaymentMethods => {
|
178 |
if ( isEditor ) {
|
180 |
'previewSavedPaymentMethods'
|
181 |
) as CustomerPaymentMethods;
|
182 |
}
|
183 |
+
if (
|
184 |
+
! paymentMethodsInitialized ||
|
185 |
+
Object.keys( paymentData.paymentMethods ).length === 0
|
186 |
+
) {
|
187 |
+
return {};
|
188 |
+
}
|
189 |
+
return getCustomerPaymentMethods( paymentData.paymentMethods );
|
190 |
}, [
|
191 |
isEditor,
|
192 |
getPreviewData,
|
211 |
[ addErrorNotice, noticeContexts.EXPRESS_PAYMENTS, removeNotice ]
|
212 |
);
|
213 |
|
|
|
|
|
|
|
|
|
214 |
const currentStatus = useMemo(
|
215 |
() => ( {
|
216 |
+
isPristine: paymentData.currentStatus === PRISTINE,
|
217 |
+
isStarted: paymentData.currentStatus === STARTED,
|
218 |
+
isProcessing: paymentData.currentStatus === PROCESSING,
|
219 |
+
isFinished: [ ERROR, FAILED, SUCCESS ].includes(
|
220 |
+
paymentData.currentStatus
|
221 |
+
),
|
222 |
+
hasError: paymentData.currentStatus === ERROR,
|
223 |
+
hasFailed: paymentData.currentStatus === FAILED,
|
224 |
+
isSuccessful: paymentData.currentStatus === SUCCESS,
|
|
|
|
|
|
|
|
|
|
|
225 |
} ),
|
226 |
+
[ paymentData.currentStatus ]
|
227 |
);
|
228 |
|
229 |
+
const setPaymentStatus = useCallback(
|
230 |
+
(): PaymentStatusDispatchers => ( {
|
231 |
+
started: ( paymentMethodData ) => {
|
232 |
+
dispatch(
|
233 |
+
started( {
|
234 |
+
paymentMethodData,
|
235 |
+
} )
|
236 |
+
);
|
237 |
+
},
|
238 |
+
processing: () => dispatch( statusOnly( PROCESSING ) ),
|
239 |
+
completed: () => dispatch( statusOnly( COMPLETE ) ),
|
240 |
+
error: ( errorMessage ) => dispatch( error( errorMessage ) ),
|
241 |
+
failed: (
|
242 |
+
errorMessage,
|
243 |
+
paymentMethodData,
|
244 |
+
billingData = undefined
|
245 |
+
) => {
|
246 |
+
if ( billingData ) {
|
247 |
+
setBillingData( billingData );
|
248 |
+
}
|
249 |
+
dispatch(
|
250 |
+
failed( {
|
251 |
+
errorMessage: errorMessage || '',
|
252 |
+
paymentMethodData: paymentMethodData || {},
|
253 |
+
} )
|
254 |
+
);
|
255 |
+
},
|
256 |
+
success: (
|
257 |
+
paymentMethodData,
|
258 |
+
billingData = undefined,
|
259 |
+
shippingData = undefined
|
260 |
+
) => {
|
261 |
+
if ( billingData ) {
|
262 |
+
setBillingData( billingData );
|
263 |
+
}
|
264 |
+
if (
|
265 |
+
typeof shippingData !== undefined &&
|
266 |
+
shippingData?.address
|
267 |
+
) {
|
268 |
+
setShippingAddress( shippingData.address );
|
269 |
+
}
|
270 |
+
dispatch(
|
271 |
+
success( {
|
272 |
+
paymentMethodData,
|
273 |
+
} )
|
274 |
+
);
|
275 |
+
},
|
276 |
+
} ),
|
277 |
+
[ dispatch, setBillingData, setShippingAddress ]
|
278 |
+
);
|
279 |
|
280 |
// flip payment to processing if checkout processing is complete, there are no errors, and payment status is started.
|
281 |
useEffect( () => {
|
298 |
// When checkout is returned to idle, set payment status to pristine but only if payment status is already not finished.
|
299 |
useEffect( () => {
|
300 |
if ( checkoutIsIdle && ! currentStatus.isSuccessful ) {
|
301 |
+
dispatch( statusOnly( PRISTINE ) );
|
302 |
}
|
303 |
+
}, [ checkoutIsIdle, currentStatus.isSuccessful ] );
|
304 |
|
305 |
// if checkout has an error and payment is not being made with a saved token and payment status is success, then let's sync payment status back to pristine.
|
306 |
useEffect( () => {
|
309 |
currentStatus.isSuccessful &&
|
310 |
! paymentData.hasSavedToken
|
311 |
) {
|
312 |
+
dispatch( statusOnly( PRISTINE ) );
|
313 |
}
|
314 |
}, [
|
315 |
checkoutHasError,
|
316 |
currentStatus.isSuccessful,
|
317 |
paymentData.hasSavedToken,
|
|
|
318 |
] );
|
319 |
|
320 |
+
// Set active (selected) payment method as needed.
|
321 |
+
useEffect( () => {
|
322 |
+
const paymentMethodKeys = Object.keys( paymentData.paymentMethods );
|
323 |
+
const allPaymentMethodKeys = [
|
324 |
+
...paymentMethodKeys,
|
325 |
+
...Object.keys( paymentData.expressPaymentMethods ),
|
326 |
+
];
|
327 |
+
if ( ! paymentMethodsInitialized || ! paymentMethodKeys.length ) {
|
328 |
+
return;
|
329 |
+
}
|
330 |
+
|
331 |
+
setActive( ( currentActivePaymentMethod ) => {
|
332 |
+
// If there's no active payment method, or the active payment method has
|
333 |
+
// been removed (e.g. COD vs shipping methods), set one as active.
|
334 |
+
// Note: It's possible that the active payment method might be an
|
335 |
+
// express payment method. So registered express payment methods are
|
336 |
+
// included in the check here.
|
337 |
+
if (
|
338 |
+
! currentActivePaymentMethod ||
|
339 |
+
! allPaymentMethodKeys.includes( currentActivePaymentMethod )
|
340 |
+
) {
|
341 |
+
dispatch( statusOnly( PRISTINE ) );
|
342 |
+
return Object.keys( paymentData.paymentMethods )[ 0 ];
|
343 |
+
}
|
344 |
+
return currentActivePaymentMethod;
|
345 |
+
} );
|
346 |
+
}, [
|
347 |
+
paymentMethodsInitialized,
|
348 |
+
paymentData.paymentMethods,
|
349 |
+
paymentData.expressPaymentMethods,
|
350 |
+
setActive,
|
351 |
+
] );
|
352 |
+
|
353 |
+
// emit events.
|
354 |
useEffect( () => {
|
355 |
// Note: the nature of this event emitter is that it will bail on any
|
356 |
// observer that returns a response that !== true. However, this still
|
362 |
currentObservers.current,
|
363 |
EMIT_TYPES.PAYMENT_PROCESSING,
|
364 |
{}
|
365 |
+
).then( ( response ) => {
|
366 |
+
if ( isSuccessResponse( response ) ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
367 |
setPaymentStatus().success(
|
368 |
+
response?.meta?.paymentMethodData,
|
369 |
+
response?.meta?.billingData,
|
370 |
+
response?.meta?.shippingData
|
371 |
);
|
372 |
+
} else if ( isFailResponse( response ) ) {
|
373 |
+
if ( response.message && response.message.length ) {
|
374 |
+
addErrorNotice( response.message, {
|
|
|
|
|
|
|
375 |
id: 'wc-payment-error',
|
376 |
isDismissible: false,
|
377 |
context:
|
378 |
+
response?.messageContext ||
|
379 |
noticeContexts.PAYMENTS,
|
380 |
} );
|
381 |
}
|
382 |
setPaymentStatus().failed(
|
383 |
+
response?.message,
|
384 |
+
response?.meta?.paymentMethodData,
|
385 |
+
response?.meta?.billingData
|
386 |
);
|
387 |
+
} else if ( isErrorResponse( response ) ) {
|
388 |
+
if ( response.message && response.message.length ) {
|
389 |
+
addErrorNotice( response.message, {
|
|
|
|
|
|
|
390 |
id: 'wc-payment-error',
|
391 |
isDismissible: false,
|
392 |
context:
|
393 |
+
response?.messageContext ||
|
394 |
noticeContexts.PAYMENTS,
|
395 |
} );
|
396 |
}
|
397 |
+
setPaymentStatus().error( response.message );
|
398 |
+
setValidationErrors( response?.validationErrors );
|
399 |
} else {
|
400 |
// otherwise there are no payment methods doing anything so
|
401 |
// just consider success
|
432 |
paymentMethodsInitialized,
|
433 |
expressPaymentMethodsInitialized,
|
434 |
setExpressPaymentError,
|
|
|
435 |
shouldSavePayment: paymentData.shouldSavePaymentMethod,
|
436 |
+
setShouldSavePayment,
|
437 |
};
|
438 |
|
439 |
return (
|
assets/js/base/context/providers/cart-checkout/payment-methods/reducer.ts
CHANGED
@@ -32,14 +32,17 @@ const reducer = (
|
|
32 |
): PaymentMethodDataContextState => {
|
33 |
switch ( type ) {
|
34 |
case STATUS.STARTED:
|
35 |
-
return
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
|
|
|
|
|
|
43 |
case STATUS.ERROR:
|
44 |
return state.currentStatus !== STATUS.ERROR
|
45 |
? {
|
32 |
): PaymentMethodDataContextState => {
|
33 |
switch ( type ) {
|
34 |
case STATUS.STARTED:
|
35 |
+
return state.currentStatus !== STATUS.STARTED
|
36 |
+
? {
|
37 |
+
...state,
|
38 |
+
currentStatus: STATUS.STARTED,
|
39 |
+
paymentMethodData:
|
40 |
+
paymentMethodData || state.paymentMethodData,
|
41 |
+
hasSavedToken: hasSavedPaymentToken(
|
42 |
+
paymentMethodData || state.paymentMethodData
|
43 |
+
),
|
44 |
+
}
|
45 |
+
: state;
|
46 |
case STATUS.ERROR:
|
47 |
return state.currentStatus !== STATUS.ERROR
|
48 |
? {
|
assets/js/base/context/providers/cart-checkout/payment-methods/types.ts
CHANGED
@@ -62,16 +62,11 @@ export type CustomerPaymentMethods =
|
|
62 |
| Record< string, CustomerPaymentMethod >
|
63 |
| EmptyObjectType;
|
64 |
|
65 |
-
export type
|
66 |
-
|
67 |
-
|
68 |
-
paymentMethods: ExpressPaymentMethods
|
69 |
-
) => void;
|
70 |
-
setShouldSavePayment: ( shouldSave: boolean ) => void;
|
71 |
-
};
|
72 |
|
73 |
export interface PaymentStatusDispatchers {
|
74 |
-
pristine: () => void;
|
75 |
started: ( paymentMethodData?: ObjectType | EmptyObjectType ) => void;
|
76 |
processing: () => void;
|
77 |
completed: () => void;
|
@@ -113,8 +108,6 @@ export type PaymentMethodCurrentStatusType = {
|
|
113 |
hasFailed: boolean;
|
114 |
// If true then the payment method has completed it's processing successfully.
|
115 |
isSuccessful: boolean;
|
116 |
-
// If true, an express payment is in progress.
|
117 |
-
isDoingExpressPayment: boolean;
|
118 |
};
|
119 |
|
120 |
export type PaymentMethodDataContextType = {
|
@@ -152,8 +145,6 @@ export type PaymentMethodDataContextType = {
|
|
152 |
onPaymentProcessing: ReturnType< typeof emitterCallback >;
|
153 |
// A function used by express payment methods to indicate an error for checkout to handle. It receives an error message string. Does not change payment status.
|
154 |
setExpressPaymentError: ( error: string ) => void;
|
155 |
-
// True if an express payment method is active.
|
156 |
-
isExpressPaymentMethodActive: boolean;
|
157 |
// A function used to set the shouldSavePayment value.
|
158 |
setShouldSavePayment: ( shouldSavePayment: boolean ) => void;
|
159 |
// True means that the configured payment method option is saved for the customer.
|
62 |
| Record< string, CustomerPaymentMethod >
|
63 |
| EmptyObjectType;
|
64 |
|
65 |
+
export type PaymentMethodsDispatcherType = (
|
66 |
+
paymentMethods: PaymentMethods | ExpressPaymentMethods
|
67 |
+
) => void;
|
|
|
|
|
|
|
|
|
68 |
|
69 |
export interface PaymentStatusDispatchers {
|
|
|
70 |
started: ( paymentMethodData?: ObjectType | EmptyObjectType ) => void;
|
71 |
processing: () => void;
|
72 |
completed: () => void;
|
108 |
hasFailed: boolean;
|
109 |
// If true then the payment method has completed it's processing successfully.
|
110 |
isSuccessful: boolean;
|
|
|
|
|
111 |
};
|
112 |
|
113 |
export type PaymentMethodDataContextType = {
|
145 |
onPaymentProcessing: ReturnType< typeof emitterCallback >;
|
146 |
// A function used by express payment methods to indicate an error for checkout to handle. It receives an error message string. Does not change payment status.
|
147 |
setExpressPaymentError: ( error: string ) => void;
|
|
|
|
|
148 |
// A function used to set the shouldSavePayment value.
|
149 |
setShouldSavePayment: ( shouldSavePayment: boolean ) => void;
|
150 |
// True means that the configured payment method option is saved for the customer.
|
assets/js/base/context/providers/cart-checkout/payment-methods/use-active-payment-method.ts
DELETED
@@ -1,38 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* External dependencies
|
3 |
-
*/
|
4 |
-
import { useState, useEffect } from '@wordpress/element';
|
5 |
-
|
6 |
-
/**
|
7 |
-
* Internal dependencies
|
8 |
-
*/
|
9 |
-
import { useStoreEvents } from '../../../hooks/use-store-events';
|
10 |
-
|
11 |
-
export const useActivePaymentMethod = (): {
|
12 |
-
activePaymentMethod: string;
|
13 |
-
activeSavedToken: string;
|
14 |
-
setActivePaymentMethod: React.Dispatch< React.SetStateAction< string > >;
|
15 |
-
setActiveSavedToken: ( token: string ) => void;
|
16 |
-
} => {
|
17 |
-
const { dispatchCheckoutEvent } = useStoreEvents();
|
18 |
-
|
19 |
-
// The active payment method - e.g. Stripe CC or BACS.
|
20 |
-
const [ activePaymentMethod, setActivePaymentMethod ] = useState( '' );
|
21 |
-
|
22 |
-
// If a previously saved payment method is active, the token for that method. For example, a for a Stripe CC card saved to user account.
|
23 |
-
const [ activeSavedToken, setActiveSavedToken ] = useState( '' );
|
24 |
-
|
25 |
-
// Trigger event on change.
|
26 |
-
useEffect( () => {
|
27 |
-
dispatchCheckoutEvent( 'set-active-payment-method', {
|
28 |
-
activePaymentMethod,
|
29 |
-
} );
|
30 |
-
}, [ dispatchCheckoutEvent, activePaymentMethod ] );
|
31 |
-
|
32 |
-
return {
|
33 |
-
activePaymentMethod,
|
34 |
-
activeSavedToken,
|
35 |
-
setActivePaymentMethod,
|
36 |
-
setActiveSavedToken,
|
37 |
-
};
|
38 |
-
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/base/context/providers/cart-checkout/payment-methods/use-payment-method-dispatchers.ts
DELETED
@@ -1,105 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* External dependencies
|
3 |
-
*/
|
4 |
-
import { useCallback, useMemo } from '@wordpress/element';
|
5 |
-
|
6 |
-
/**
|
7 |
-
* Internal dependencies
|
8 |
-
*/
|
9 |
-
import { actions, ActionType } from './actions';
|
10 |
-
import { STATUS } from './constants';
|
11 |
-
import { useCustomerDataContext } from '../customer';
|
12 |
-
import { useShippingDataContext } from '../shipping';
|
13 |
-
import type {
|
14 |
-
PaymentStatusDispatchers,
|
15 |
-
PaymentMethodDispatchers,
|
16 |
-
} from './types';
|
17 |
-
|
18 |
-
export const usePaymentMethodDataDispatchers = (
|
19 |
-
dispatch: React.Dispatch< ActionType >
|
20 |
-
): {
|
21 |
-
dispatchActions: PaymentMethodDispatchers;
|
22 |
-
setPaymentStatus: () => PaymentStatusDispatchers;
|
23 |
-
} => {
|
24 |
-
const { setBillingData } = useCustomerDataContext();
|
25 |
-
const { setShippingAddress } = useShippingDataContext();
|
26 |
-
|
27 |
-
const dispatchActions = useMemo(
|
28 |
-
(): PaymentMethodDispatchers => ( {
|
29 |
-
setRegisteredPaymentMethods: ( paymentMethods ) =>
|
30 |
-
void dispatch(
|
31 |
-
actions.setRegisteredPaymentMethods( paymentMethods )
|
32 |
-
),
|
33 |
-
setRegisteredExpressPaymentMethods: ( paymentMethods ) =>
|
34 |
-
void dispatch(
|
35 |
-
actions.setRegisteredExpressPaymentMethods( paymentMethods )
|
36 |
-
),
|
37 |
-
setShouldSavePayment: ( shouldSave ) =>
|
38 |
-
void dispatch(
|
39 |
-
actions.setShouldSavePaymentMethod( shouldSave )
|
40 |
-
),
|
41 |
-
} ),
|
42 |
-
[ dispatch ]
|
43 |
-
);
|
44 |
-
|
45 |
-
const setPaymentStatus = useCallback(
|
46 |
-
(): PaymentStatusDispatchers => ( {
|
47 |
-
pristine: () => dispatch( actions.statusOnly( STATUS.PRISTINE ) ),
|
48 |
-
started: ( paymentMethodData ) => {
|
49 |
-
dispatch(
|
50 |
-
actions.started( {
|
51 |
-
paymentMethodData,
|
52 |
-
} )
|
53 |
-
);
|
54 |
-
},
|
55 |
-
processing: () =>
|
56 |
-
dispatch( actions.statusOnly( STATUS.PROCESSING ) ),
|
57 |
-
completed: () => dispatch( actions.statusOnly( STATUS.COMPLETE ) ),
|
58 |
-
error: ( errorMessage ) =>
|
59 |
-
dispatch( actions.error( errorMessage ) ),
|
60 |
-
failed: (
|
61 |
-
errorMessage,
|
62 |
-
paymentMethodData,
|
63 |
-
billingData = undefined
|
64 |
-
) => {
|
65 |
-
if ( billingData ) {
|
66 |
-
setBillingData( billingData );
|
67 |
-
}
|
68 |
-
dispatch(
|
69 |
-
actions.failed( {
|
70 |
-
errorMessage: errorMessage || '',
|
71 |
-
paymentMethodData: paymentMethodData || {},
|
72 |
-
} )
|
73 |
-
);
|
74 |
-
},
|
75 |
-
success: (
|
76 |
-
paymentMethodData,
|
77 |
-
billingData = undefined,
|
78 |
-
shippingData = undefined
|
79 |
-
) => {
|
80 |
-
if ( billingData ) {
|
81 |
-
setBillingData( billingData );
|
82 |
-
}
|
83 |
-
if (
|
84 |
-
typeof shippingData !== undefined &&
|
85 |
-
shippingData?.address
|
86 |
-
) {
|
87 |
-
setShippingAddress(
|
88 |
-
shippingData.address as Record< string, unknown >
|
89 |
-
);
|
90 |
-
}
|
91 |
-
dispatch(
|
92 |
-
actions.success( {
|
93 |
-
paymentMethodData,
|
94 |
-
} )
|
95 |
-
);
|
96 |
-
},
|
97 |
-
} ),
|
98 |
-
[ dispatch, setBillingData, setShippingAddress ]
|
99 |
-
);
|
100 |
-
|
101 |
-
return {
|
102 |
-
dispatchActions,
|
103 |
-
setPaymentStatus,
|
104 |
-
};
|
105 |
-
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/base/context/providers/cart-checkout/payment-methods/use-payment-method-registration.ts
CHANGED
@@ -8,7 +8,10 @@ import {
|
|
8 |
} from '@woocommerce/blocks-registry';
|
9 |
import { useState, useEffect, useRef, useCallback } from '@wordpress/element';
|
10 |
import { useShallowEqual } from '@woocommerce/base-hooks';
|
11 |
-
import {
|
|
|
|
|
|
|
12 |
|
13 |
/**
|
14 |
* Internal dependencies
|
@@ -103,15 +106,11 @@ const usePaymentMethodRegistration = (
|
|
103 |
continue;
|
104 |
}
|
105 |
|
106 |
-
//
|
107 |
try {
|
108 |
-
const canPay =
|
109 |
-
|
110 |
-
|
111 |
-
paymentMethod.canMakePayment(
|
112 |
-
canPayArgument.current
|
113 |
-
)
|
114 |
-
);
|
115 |
|
116 |
if ( !! canPay ) {
|
117 |
if (
|
@@ -186,10 +185,10 @@ export const usePaymentMethods = (
|
|
186 |
const standardMethods: PaymentMethods = getPaymentMethods() as PaymentMethods;
|
187 |
const { noticeContexts } = useEmitResponse();
|
188 |
// Ensure all methods are present in order.
|
189 |
-
// Some payment methods may not be present in
|
190 |
// depend on state, e.g. COD can depend on shipping method.
|
191 |
const displayOrder = new Set( [
|
192 |
-
...
|
193 |
...Object.keys( standardMethods ),
|
194 |
] );
|
195 |
return usePaymentMethodRegistration(
|
8 |
} from '@woocommerce/blocks-registry';
|
9 |
import { useState, useEffect, useRef, useCallback } from '@wordpress/element';
|
10 |
import { useShallowEqual } from '@woocommerce/base-hooks';
|
11 |
+
import {
|
12 |
+
CURRENT_USER_IS_ADMIN,
|
13 |
+
PAYMENT_GATEWAY_SORT_ORDER,
|
14 |
+
} from '@woocommerce/block-settings';
|
15 |
|
16 |
/**
|
17 |
* Internal dependencies
|
106 |
continue;
|
107 |
}
|
108 |
|
109 |
+
// In front end, ask payment method if it should be available.
|
110 |
try {
|
111 |
+
const canPay = await Promise.resolve(
|
112 |
+
paymentMethod.canMakePayment( canPayArgument.current )
|
113 |
+
);
|
|
|
|
|
|
|
|
|
114 |
|
115 |
if ( !! canPay ) {
|
116 |
if (
|
185 |
const standardMethods: PaymentMethods = getPaymentMethods() as PaymentMethods;
|
186 |
const { noticeContexts } = useEmitResponse();
|
187 |
// Ensure all methods are present in order.
|
188 |
+
// Some payment methods may not be present in PAYMENT_GATEWAY_SORT_ORDER if they
|
189 |
// depend on state, e.g. COD can depend on shipping method.
|
190 |
const displayOrder = new Set( [
|
191 |
+
...PAYMENT_GATEWAY_SORT_ORDER,
|
192 |
...Object.keys( standardMethods ),
|
193 |
] );
|
194 |
return usePaymentMethodRegistration(
|
assets/js/base/context/providers/cart-checkout/payment-methods/utils.ts
CHANGED
@@ -14,9 +14,6 @@ import type { PaymentMethods, CustomerPaymentMethod } from './types';
|
|
14 |
export const getCustomerPaymentMethods = (
|
15 |
availablePaymentMethods: PaymentMethods = {}
|
16 |
): Record< string, CustomerPaymentMethod > => {
|
17 |
-
if ( Object.keys( availablePaymentMethods ).length === 0 ) {
|
18 |
-
return {};
|
19 |
-
}
|
20 |
const customerPaymentMethods = getSetting( 'customerPaymentMethods', {} );
|
21 |
const paymentMethodKeys = Object.keys( customerPaymentMethods );
|
22 |
const enabledCustomerPaymentMethods = {} as Record<
|
14 |
export const getCustomerPaymentMethods = (
|
15 |
availablePaymentMethods: PaymentMethods = {}
|
16 |
): Record< string, CustomerPaymentMethod > => {
|
|
|
|
|
|
|
17 |
const customerPaymentMethods = getSetting( 'customerPaymentMethods', {} );
|
18 |
const paymentMethodKeys = Object.keys( customerPaymentMethods );
|
19 |
const enabledCustomerPaymentMethods = {} as Record<
|
assets/js/base/context/providers/index.js
CHANGED
@@ -2,7 +2,6 @@ export * from './editor-context';
|
|
2 |
export * from './add-to-cart-form';
|
3 |
export * from './cart-checkout';
|
4 |
export * from './store-notices';
|
5 |
-
export * from './store-snackbar-notices';
|
6 |
export * from './validation';
|
7 |
export * from './container-width-context';
|
8 |
export * from './editor-context';
|
2 |
export * from './add-to-cart-form';
|
3 |
export * from './cart-checkout';
|
4 |
export * from './store-notices';
|
|
|
5 |
export * from './validation';
|
6 |
export * from './container-width-context';
|
7 |
export * from './editor-context';
|
assets/js/base/context/providers/{store-snackbar-notices → store-notices}/components/snackbar-notices-container.js
RENAMED
@@ -3,7 +3,6 @@
|
|
3 |
*/
|
4 |
import { SnackbarList } from 'wordpress-components';
|
5 |
import classnames from 'classnames';
|
6 |
-
import { __experimentalApplyCheckoutFilter } from '@woocommerce/blocks-checkout';
|
7 |
|
8 |
const SnackbarNoticesContainer = ( {
|
9 |
className,
|
@@ -19,11 +18,6 @@ const SnackbarNoticesContainer = ( {
|
|
19 |
( notice ) => notice.type === 'snackbar'
|
20 |
);
|
21 |
|
22 |
-
const filteredNotices = __experimentalApplyCheckoutFilter( {
|
23 |
-
filterName: 'snackbarNotices',
|
24 |
-
defaultValue: snackbarNotices,
|
25 |
-
} );
|
26 |
-
|
27 |
const wrapperClass = classnames(
|
28 |
className,
|
29 |
'wc-block-components-notices__snackbar'
|
@@ -31,7 +25,7 @@ const SnackbarNoticesContainer = ( {
|
|
31 |
|
32 |
return (
|
33 |
<SnackbarList
|
34 |
-
notices={
|
35 |
className={ wrapperClass }
|
36 |
onRemove={ removeNotice }
|
37 |
/>
|
3 |
*/
|
4 |
import { SnackbarList } from 'wordpress-components';
|
5 |
import classnames from 'classnames';
|
|
|
6 |
|
7 |
const SnackbarNoticesContainer = ( {
|
8 |
className,
|
18 |
( notice ) => notice.type === 'snackbar'
|
19 |
);
|
20 |
|
|
|
|
|
|
|
|
|
|
|
21 |
const wrapperClass = classnames(
|
22 |
className,
|
23 |
'wc-block-components-notices__snackbar'
|
25 |
|
26 |
return (
|
27 |
<SnackbarList
|
28 |
+
notices={ snackbarNotices }
|
29 |
className={ wrapperClass }
|
30 |
onRemove={ removeNotice }
|
31 |
/>
|
assets/js/base/context/providers/store-notices/components/style.scss
CHANGED
@@ -22,3 +22,24 @@
|
|
22 |
margin-top: 1em;
|
23 |
}
|
24 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
22 |
margin-top: 1em;
|
23 |
}
|
24 |
}
|
25 |
+
|
26 |
+
.wc-block-components-notices__snackbar {
|
27 |
+
position: fixed;
|
28 |
+
bottom: 20px;
|
29 |
+
left: 16px;
|
30 |
+
width: auto;
|
31 |
+
|
32 |
+
@include breakpoint( "<782px" ) {
|
33 |
+
position: fixed;
|
34 |
+
top: 10px;
|
35 |
+
left: 0;
|
36 |
+
bottom: auto;
|
37 |
+
}
|
38 |
+
|
39 |
+
.components-snackbar-list__notice-container {
|
40 |
+
@include breakpoint( "<782px" ) {
|
41 |
+
margin-left: 10px;
|
42 |
+
margin-right: 10px;
|
43 |
+
}
|
44 |
+
}
|
45 |
+
}
|
assets/js/base/context/providers/store-notices/context.js
CHANGED
@@ -16,6 +16,7 @@ import { useSelect, useDispatch } from '@wordpress/data';
|
|
16 |
import { useStoreEvents } from '../../hooks/use-store-events';
|
17 |
import { useEditorContext } from '../editor-context';
|
18 |
import StoreNoticesContainer from './components/store-notices-container';
|
|
|
19 |
|
20 |
/**
|
21 |
* @typedef {import('@woocommerce/type-defs/contexts').NoticeContext} NoticeContext
|
@@ -25,6 +26,7 @@ import StoreNoticesContainer from './components/store-notices-container';
|
|
25 |
const StoreNoticesContext = createContext( {
|
26 |
notices: [],
|
27 |
createNotice: ( status, text, props ) => void { status, text, props },
|
|
|
28 |
removeNotice: ( id, ctxt ) => void { id, ctxt },
|
29 |
setIsSuppressed: ( val ) => void { val },
|
30 |
context: 'wc/core',
|
@@ -88,6 +90,16 @@ export const StoreNoticesProvider = ( {
|
|
88 |
[ removeNotice, context ]
|
89 |
);
|
90 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
91 |
const { notices } = useSelect(
|
92 |
( select ) => {
|
93 |
return {
|
@@ -100,6 +112,7 @@ export const StoreNoticesProvider = ( {
|
|
100 |
const contextValue = {
|
101 |
notices,
|
102 |
createNotice: createNoticeWithContext,
|
|
|
103 |
removeNotice: removeNoticeWithContext,
|
104 |
context,
|
105 |
setIsSuppressed,
|
@@ -114,10 +127,19 @@ export const StoreNoticesProvider = ( {
|
|
114 |
/>
|
115 |
);
|
116 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
117 |
return (
|
118 |
<StoreNoticesContext.Provider value={ contextValue }>
|
119 |
{ createNoticeContainer && noticeOutput }
|
120 |
{ children }
|
|
|
121 |
</StoreNoticesContext.Provider>
|
122 |
);
|
123 |
};
|
16 |
import { useStoreEvents } from '../../hooks/use-store-events';
|
17 |
import { useEditorContext } from '../editor-context';
|
18 |
import StoreNoticesContainer from './components/store-notices-container';
|
19 |
+
import SnackbarNoticesContainer from './components/snackbar-notices-container';
|
20 |
|
21 |
/**
|
22 |
* @typedef {import('@woocommerce/type-defs/contexts').NoticeContext} NoticeContext
|
26 |
const StoreNoticesContext = createContext( {
|
27 |
notices: [],
|
28 |
createNotice: ( status, text, props ) => void { status, text, props },
|
29 |
+
createSnackbarNotice: ( content, options ) => void { content, options },
|
30 |
removeNotice: ( id, ctxt ) => void { id, ctxt },
|
31 |
setIsSuppressed: ( val ) => void { val },
|
32 |
context: 'wc/core',
|
90 |
[ removeNotice, context ]
|
91 |
);
|
92 |
|
93 |
+
const createSnackbarNotice = useCallback(
|
94 |
+
( content = '', options = {} ) => {
|
95 |
+
createNoticeWithContext( 'default', content, {
|
96 |
+
...options,
|
97 |
+
type: 'snackbar',
|
98 |
+
} );
|
99 |
+
},
|
100 |
+
[ createNoticeWithContext ]
|
101 |
+
);
|
102 |
+
|
103 |
const { notices } = useSelect(
|
104 |
( select ) => {
|
105 |
return {
|
112 |
const contextValue = {
|
113 |
notices,
|
114 |
createNotice: createNoticeWithContext,
|
115 |
+
createSnackbarNotice,
|
116 |
removeNotice: removeNoticeWithContext,
|
117 |
context,
|
118 |
setIsSuppressed,
|
127 |
/>
|
128 |
);
|
129 |
|
130 |
+
const snackbarNoticeOutput = isSuppressed ? null : (
|
131 |
+
<SnackbarNoticesContainer
|
132 |
+
notices={ contextValue.notices }
|
133 |
+
removeNotice={ contextValue.removeNotice }
|
134 |
+
isEditor={ isEditor }
|
135 |
+
/>
|
136 |
+
);
|
137 |
+
|
138 |
return (
|
139 |
<StoreNoticesContext.Provider value={ contextValue }>
|
140 |
{ createNoticeContainer && noticeOutput }
|
141 |
{ children }
|
142 |
+
{ snackbarNoticeOutput }
|
143 |
</StoreNoticesContext.Provider>
|
144 |
);
|
145 |
};
|
assets/js/base/context/providers/store-notices/index.js
CHANGED
@@ -1,2 +1,3 @@
|
|
1 |
export * from './components/store-notices-container';
|
|
|
2 |
export * from './context';
|
1 |
export * from './components/store-notices-container';
|
2 |
+
export * from './components/snackbar-notices-container';
|
3 |
export * from './context';
|
assets/js/base/context/providers/store-snackbar-notices/components/style.scss
DELETED
@@ -1,20 +0,0 @@
|
|
1 |
-
.wc-block-components-notices__snackbar {
|
2 |
-
position: fixed;
|
3 |
-
bottom: 20px;
|
4 |
-
left: 16px;
|
5 |
-
width: auto;
|
6 |
-
|
7 |
-
@include breakpoint( "<782px" ) {
|
8 |
-
position: fixed;
|
9 |
-
top: 10px;
|
10 |
-
left: 0;
|
11 |
-
bottom: auto;
|
12 |
-
}
|
13 |
-
|
14 |
-
.components-snackbar-list__notice-container {
|
15 |
-
@include breakpoint( "<782px" ) {
|
16 |
-
margin-left: 10px;
|
17 |
-
margin-right: 10px;
|
18 |
-
}
|
19 |
-
}
|
20 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/base/context/providers/store-snackbar-notices/context.js
DELETED
@@ -1,125 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* External dependencies
|
3 |
-
*/
|
4 |
-
import PropTypes from 'prop-types';
|
5 |
-
import {
|
6 |
-
createContext,
|
7 |
-
useContext,
|
8 |
-
useCallback,
|
9 |
-
useState,
|
10 |
-
} from '@wordpress/element';
|
11 |
-
import { useSelect, useDispatch } from '@wordpress/data';
|
12 |
-
import SnackbarNoticesContainer from '@woocommerce/base-context/providers/store-snackbar-notices/components/snackbar-notices-container';
|
13 |
-
|
14 |
-
/**
|
15 |
-
* Internal dependencies
|
16 |
-
*/
|
17 |
-
import { useStoreEvents } from '../../hooks/use-store-events';
|
18 |
-
import { useEditorContext } from '../editor-context';
|
19 |
-
|
20 |
-
/**
|
21 |
-
* @typedef {import('@woocommerce/type-defs/contexts').NoticeContext} NoticeContext
|
22 |
-
* @typedef {import('react')} React
|
23 |
-
*/
|
24 |
-
|
25 |
-
const StoreSnackbarNoticesContext = createContext( {
|
26 |
-
notices: [],
|
27 |
-
createSnackbarNotice: ( content, options ) => void { content, options },
|
28 |
-
removeSnackbarNotice: ( id, ctxt ) => void { id, ctxt },
|
29 |
-
setIsSuppressed: ( val ) => void { val },
|
30 |
-
context: 'wc/core',
|
31 |
-
} );
|
32 |
-
|
33 |
-
/**
|
34 |
-
* Returns the notices context values.
|
35 |
-
*
|
36 |
-
* @return {NoticeContext} The notice context value from the notice context.
|
37 |
-
*/
|
38 |
-
export const useStoreSnackbarNoticesContext = () => {
|
39 |
-
return useContext( StoreSnackbarNoticesContext );
|
40 |
-
};
|
41 |
-
|
42 |
-
/**
|
43 |
-
* Provides an interface for blocks to add notices to the frontend UI.
|
44 |
-
*
|
45 |
-
* Statuses map to https://github.com/WordPress/gutenberg/tree/master/packages/components/src/notice
|
46 |
-
* - Default (no status)
|
47 |
-
* - Error
|
48 |
-
* - Warning
|
49 |
-
* - Info
|
50 |
-
* - Success
|
51 |
-
*
|
52 |
-
* @param {Object} props Incoming props for the component.
|
53 |
-
* @param {React.ReactChildren} props.children The Elements wrapped by this component.
|
54 |
-
* @param {string} props.context The notice context for notices being rendered.
|
55 |
-
*/
|
56 |
-
export const StoreSnackbarNoticesProvider = ( {
|
57 |
-
children,
|
58 |
-
context = 'wc/core',
|
59 |
-
} ) => {
|
60 |
-
const { createNotice, removeNotice } = useDispatch( 'core/notices' );
|
61 |
-
const [ isSuppressed, setIsSuppressed ] = useState( false );
|
62 |
-
const { dispatchStoreEvent } = useStoreEvents();
|
63 |
-
const { isEditor } = useEditorContext();
|
64 |
-
|
65 |
-
const createSnackbarNotice = useCallback(
|
66 |
-
( content = '', options = {} ) => {
|
67 |
-
createNotice( 'default', content, {
|
68 |
-
...options,
|
69 |
-
type: 'snackbar',
|
70 |
-
context: options.context || context,
|
71 |
-
} );
|
72 |
-
dispatchStoreEvent( 'store-notice-create', {
|
73 |
-
status: 'default',
|
74 |
-
content,
|
75 |
-
options,
|
76 |
-
} );
|
77 |
-
},
|
78 |
-
[ createNotice, dispatchStoreEvent, context ]
|
79 |
-
);
|
80 |
-
|
81 |
-
const removeSnackbarNotice = useCallback(
|
82 |
-
( id, ctxt = context ) => {
|
83 |
-
removeNotice( id, ctxt );
|
84 |
-
},
|
85 |
-
[ removeNotice, context ]
|
86 |
-
);
|
87 |
-
|
88 |
-
const { notices } = useSelect(
|
89 |
-
( select ) => {
|
90 |
-
return {
|
91 |
-
notices: select( 'core/notices' ).getNotices( context ),
|
92 |
-
};
|
93 |
-
},
|
94 |
-
[ context ]
|
95 |
-
);
|
96 |
-
|
97 |
-
const contextValue = {
|
98 |
-
notices,
|
99 |
-
createSnackbarNotice,
|
100 |
-
removeSnackbarNotice,
|
101 |
-
context,
|
102 |
-
setIsSuppressed,
|
103 |
-
};
|
104 |
-
|
105 |
-
const snackbarNoticeOutput = isSuppressed ? null : (
|
106 |
-
<SnackbarNoticesContainer
|
107 |
-
notices={ contextValue.notices }
|
108 |
-
removeNotice={ contextValue.removeSnackbarNotice }
|
109 |
-
isEditor={ isEditor }
|
110 |
-
/>
|
111 |
-
);
|
112 |
-
|
113 |
-
return (
|
114 |
-
<StoreSnackbarNoticesContext.Provider value={ contextValue }>
|
115 |
-
{ children }
|
116 |
-
{ snackbarNoticeOutput }
|
117 |
-
</StoreSnackbarNoticesContext.Provider>
|
118 |
-
);
|
119 |
-
};
|
120 |
-
|
121 |
-
StoreSnackbarNoticesProvider.propTypes = {
|
122 |
-
className: PropTypes.string,
|
123 |
-
children: PropTypes.node,
|
124 |
-
context: PropTypes.string,
|
125 |
-
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/base/context/providers/store-snackbar-notices/index.ts
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
export * from './context';
|
|
assets/js/base/context/providers/validation/components/validation-input-error/index.js
CHANGED
@@ -15,8 +15,7 @@ export const ValidationInputError = ( {
|
|
15 |
elementId = '',
|
16 |
} ) => {
|
17 |
const { getValidationError, getValidationErrorId } = useValidationContext();
|
18 |
-
|
19 |
-
if ( ! errorMessage || typeof errorMessage !== 'string' ) {
|
20 |
const error = getValidationError( propertyName ) || {};
|
21 |
if ( error.message && ! error.hidden ) {
|
22 |
errorMessage = error.message;
|
15 |
elementId = '',
|
16 |
} ) => {
|
17 |
const { getValidationError, getValidationErrorId } = useValidationContext();
|
18 |
+
if ( ! errorMessage ) {
|
|
|
19 |
const error = getValidationError( propertyName ) || {};
|
20 |
if ( error.message && ! error.hidden ) {
|
21 |
errorMessage = error.message;
|
assets/js/base/hooks/index.js
CHANGED
@@ -4,3 +4,4 @@ export * from './use-position-relative-to-viewport';
|
|
4 |
export * from './use-previous';
|
5 |
export * from './use-shallow-equal';
|
6 |
export * from './use-throw-error';
|
|
4 |
export * from './use-previous';
|
5 |
export * from './use-shallow-equal';
|
6 |
export * from './use-throw-error';
|
7 |
+
export * from './use-trigger-fragment-refresh';
|
assets/js/base/hooks/use-shallow-equal.ts
CHANGED
@@ -13,11 +13,12 @@ import isShallowEqual from '@wordpress/is-shallow-equal';
|
|
13 |
*
|
14 |
* @param {*} value Value to keep the same if satisfies shallow equality.
|
15 |
*
|
16 |
-
* @return {*} The previous cached instance of the value if the current has
|
|
|
17 |
*/
|
18 |
-
export function useShallowEqual< T >( value: T ): T {
|
19 |
-
const ref = useRef< T >(
|
20 |
-
if ( ! isShallowEqual( value, ref.current ) ) {
|
21 |
ref.current = value;
|
22 |
}
|
23 |
return ref.current;
|
13 |
*
|
14 |
* @param {*} value Value to keep the same if satisfies shallow equality.
|
15 |
*
|
16 |
+
* @return {*} The previous cached instance of the value if the current has
|
17 |
+
* shallow equality with it.
|
18 |
*/
|
19 |
+
export function useShallowEqual< T >( value: T ): T | undefined {
|
20 |
+
const ref = useRef< T >();
|
21 |
+
if ( ref.current === undefined || ! isShallowEqual( value, ref.current ) ) {
|
22 |
ref.current = value;
|
23 |
}
|
24 |
return ref.current;
|
assets/js/base/hooks/use-trigger-fragment-refresh.ts
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* External dependencies
|
3 |
+
*/
|
4 |
+
import { useRef, useEffect } from '@wordpress/element';
|
5 |
+
import { triggerFragmentRefresh } from '@woocommerce/base-utils';
|
6 |
+
|
7 |
+
/**
|
8 |
+
* Helper that implements triggerFragmentRefresh.
|
9 |
+
*
|
10 |
+
* @param {number} quantityInCart Quantity of the item in the cart.
|
11 |
+
*/
|
12 |
+
export const useTriggerFragmentRefresh = ( quantityInCart: number ): void => {
|
13 |
+
const firstMount = useRef< boolean >( true );
|
14 |
+
|
15 |
+
useEffect( () => {
|
16 |
+
if ( firstMount.current ) {
|
17 |
+
firstMount.current = false;
|
18 |
+
return;
|
19 |
+
}
|
20 |
+
triggerFragmentRefresh();
|
21 |
+
}, [ quantityInCart ] );
|
22 |
+
};
|
assets/js/base/utils/address.js
ADDED
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* pluckAddress takes a full address object and returns relevant fields for calculating
|
3 |
+
* shipping, so we can track when one of them change to update rates.
|
4 |
+
*
|
5 |
+
* @param {Object} address An object containing all address information
|
6 |
+
* @param {string} address.country The country.
|
7 |
+
* @param {string} address.state The state.
|
8 |
+
* @param {string} address.city The city.
|
9 |
+
* @param {string} address.postcode The postal code.
|
10 |
+
*
|
11 |
+
* @return {Object} pluckedAddress An object containing shipping address that are needed to fetch an address.
|
12 |
+
*/
|
13 |
+
export const pluckAddress = ( {
|
14 |
+
country = '',
|
15 |
+
state = '',
|
16 |
+
city = '',
|
17 |
+
postcode = '',
|
18 |
+
} ) => ( {
|
19 |
+
country: country.trim(),
|
20 |
+
state: state.trim(),
|
21 |
+
city: city.trim(),
|
22 |
+
postcode: postcode ? postcode.replace( ' ', '' ).toUpperCase() : '',
|
23 |
+
} );
|
assets/js/base/utils/address.ts
DELETED
@@ -1,85 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* External dependencies
|
3 |
-
*/
|
4 |
-
import { defaultAddressFields } from '@woocommerce/settings';
|
5 |
-
import prepareAddressFields from '@woocommerce/base-components/cart-checkout/address-form/prepare-address-fields';
|
6 |
-
import { isEmail } from '@wordpress/url';
|
7 |
-
import type {
|
8 |
-
CartResponseBillingAddress,
|
9 |
-
CartResponseShippingAddress,
|
10 |
-
} from '@woocommerce/types';
|
11 |
-
|
12 |
-
/**
|
13 |
-
* pluckAddress takes a full address object and returns relevant fields for calculating
|
14 |
-
* shipping, so we can track when one of them change to update rates.
|
15 |
-
*
|
16 |
-
* @param {Object} address An object containing all address information
|
17 |
-
* @param {string} address.country The country.
|
18 |
-
* @param {string} address.state The state.
|
19 |
-
* @param {string} address.city The city.
|
20 |
-
* @param {string} address.postcode The postal code.
|
21 |
-
*
|
22 |
-
* @return {Object} pluckedAddress An object containing shipping address that are needed to fetch an address.
|
23 |
-
*/
|
24 |
-
export const pluckAddress = ( {
|
25 |
-
country = '',
|
26 |
-
state = '',
|
27 |
-
city = '',
|
28 |
-
postcode = '',
|
29 |
-
}: CartResponseBillingAddress | CartResponseShippingAddress ): {
|
30 |
-
country: string;
|
31 |
-
state: string;
|
32 |
-
city: string;
|
33 |
-
postcode: string;
|
34 |
-
} => ( {
|
35 |
-
country: country.trim(),
|
36 |
-
state: state.trim(),
|
37 |
-
city: city.trim(),
|
38 |
-
postcode: postcode ? postcode.replace( ' ', '' ).toUpperCase() : '',
|
39 |
-
} );
|
40 |
-
|
41 |
-
/**
|
42 |
-
* pluckEmail takes a full address object and returns only the email address, if set and valid. Otherwise returns an empty string.
|
43 |
-
*
|
44 |
-
* @param {Object} address An object containing all address information
|
45 |
-
* @param {string} address.email The email address.
|
46 |
-
* @return {string} The email address.
|
47 |
-
*/
|
48 |
-
export const pluckEmail = ( {
|
49 |
-
email = '',
|
50 |
-
}: CartResponseBillingAddress ): string =>
|
51 |
-
isEmail( email ) ? email.trim() : '';
|
52 |
-
|
53 |
-
/**
|
54 |
-
* Type-guard.
|
55 |
-
*/
|
56 |
-
const isValidAddressKey = (
|
57 |
-
key: string,
|
58 |
-
address: CartResponseBillingAddress | CartResponseShippingAddress
|
59 |
-
): key is keyof typeof address => {
|
60 |
-
return key in address;
|
61 |
-
};
|
62 |
-
|
63 |
-
/**
|
64 |
-
* Sets fields to an empty string in an address if they are hidden by the settings in countryLocale.
|
65 |
-
*
|
66 |
-
* @param {Object} address The address to empty fields from.
|
67 |
-
* @return {Object} The address with hidden fields values removed.
|
68 |
-
*/
|
69 |
-
export const emptyHiddenAddressFields = <
|
70 |
-
T extends CartResponseBillingAddress | CartResponseShippingAddress
|
71 |
-
>(
|
72 |
-
address: T
|
73 |
-
): T => {
|
74 |
-
const fields = Object.keys( defaultAddressFields );
|
75 |
-
const addressFields = prepareAddressFields( fields, {}, address.country );
|
76 |
-
const newAddress = Object.assign( {}, address ) as T;
|
77 |
-
|
78 |
-
addressFields.forEach( ( { key = '', hidden = false } ) => {
|
79 |
-
if ( hidden && isValidAddressKey( key, address ) ) {
|
80 |
-
newAddress[ key ] = '';
|
81 |
-
}
|
82 |
-
} );
|
83 |
-
|
84 |
-
return newAddress;
|
85 |
-
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/base/utils/legacy-events.js
CHANGED
@@ -34,21 +34,11 @@ export const dispatchEvent = (
|
|
34 |
}
|
35 |
};
|
36 |
|
37 |
-
let fragmentRequestTimeoutId;
|
38 |
-
|
39 |
// This is a hack to trigger cart updates till we migrate to block based cart
|
40 |
// that relies on the store, see
|
41 |
// https://github.com/woocommerce/woocommerce-gutenberg-products-block/issues/1247
|
42 |
export const triggerFragmentRefresh = () => {
|
43 |
-
|
44 |
-
clearTimeout( fragmentRequestTimeoutId );
|
45 |
-
}
|
46 |
-
fragmentRequestTimeoutId = setTimeout( () => {
|
47 |
-
dispatchEvent( 'wc_fragment_refresh', {
|
48 |
-
bubbles: true,
|
49 |
-
cancelable: true,
|
50 |
-
} );
|
51 |
-
}, 50 );
|
52 |
};
|
53 |
|
54 |
/**
|
34 |
}
|
35 |
};
|
36 |
|
|
|
|
|
37 |
// This is a hack to trigger cart updates till we migrate to block based cart
|
38 |
// that relies on the store, see
|
39 |
// https://github.com/woocommerce/woocommerce-gutenberg-products-block/issues/1247
|
40 |
export const triggerFragmentRefresh = () => {
|
41 |
+
dispatchEvent( 'wc_fragment_refresh', { bubbles: true, cancelable: true } );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
42 |
};
|
43 |
|
44 |
/**
|
assets/js/base/utils/test/address.ts
DELETED
@@ -1,24 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* External dependencies
|
3 |
-
*/
|
4 |
-
import { emptyHiddenAddressFields } from '@woocommerce/base-utils';
|
5 |
-
|
6 |
-
describe( 'emptyHiddenAddressFields', () => {
|
7 |
-
it( "Removes state from an address where the country doesn't use states", () => {
|
8 |
-
const address = {
|
9 |
-
first_name: 'Jonny',
|
10 |
-
last_name: 'Awesome',
|
11 |
-
company: 'WordPress',
|
12 |
-
address_1: '123 Address Street',
|
13 |
-
address_2: 'Address 2',
|
14 |
-
city: 'Vienna',
|
15 |
-
postcode: '1120',
|
16 |
-
country: 'AT',
|
17 |
-
state: 'CA', // This should be removed.
|
18 |
-
email: 'jonny.awesome@email.com',
|
19 |
-
phone: '',
|
20 |
-
};
|
21 |
-
const filteredAddress = emptyHiddenAddressFields( address );
|
22 |
-
expect( filteredAddress ).toHaveProperty( 'state', '' );
|
23 |
-
} );
|
24 |
-
} );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/blocks/attribute-filter/edit.js
CHANGED
@@ -15,8 +15,9 @@ import {
|
|
15 |
} from '@wordpress/components';
|
16 |
import { Icon, server, external } from '@woocommerce/icons';
|
17 |
import { SearchListControl } from '@woocommerce/components';
|
18 |
-
import { mapValues, toArray, sortBy } from 'lodash';
|
19 |
-
import {
|
|
|
20 |
import HeadingToolbar from '@woocommerce/editor-components/heading-toolbar';
|
21 |
import BlockTitle from '@woocommerce/editor-components/block-title';
|
22 |
import ToggleButtonControl from '@woocommerce/editor-components/toggle-button-control';
|
@@ -27,8 +28,6 @@ import ToggleButtonControl from '@woocommerce/editor-components/toggle-button-co
|
|
27 |
import Block from './block.js';
|
28 |
import './editor.scss';
|
29 |
|
30 |
-
const ATTRIBUTES = getSetting( 'attributes', [] );
|
31 |
-
|
32 |
const Edit = ( { attributes, setAttributes, debouncedSpeak } ) => {
|
33 |
const {
|
34 |
attributeId,
|
@@ -212,7 +211,7 @@ const Edit = ( { attributes, setAttributes, debouncedSpeak } ) => {
|
|
212 |
) }
|
213 |
initialOpen={ false }
|
214 |
>
|
215 |
-
{ renderAttributeControl(
|
216 |
</PanelBody>
|
217 |
</InspectorControls>
|
218 |
);
|
@@ -274,9 +273,10 @@ const Edit = ( { attributes, setAttributes, debouncedSpeak } ) => {
|
|
274 |
}
|
275 |
|
276 |
const selectedId = selected[ 0 ].id;
|
277 |
-
const productAttribute =
|
278 |
-
|
279 |
-
|
|
|
280 |
|
281 |
if ( ! productAttribute || attributeId === selectedId ) {
|
282 |
return;
|
@@ -294,7 +294,7 @@ const Edit = ( { attributes, setAttributes, debouncedSpeak } ) => {
|
|
294 |
} );
|
295 |
};
|
296 |
|
297 |
-
const renderAttributeControl = (
|
298 |
const messages = {
|
299 |
clear: __(
|
300 |
'Clear selected attribute',
|
@@ -346,7 +346,6 @@ const Edit = ( { attributes, setAttributes, debouncedSpeak } ) => {
|
|
346 |
onChange={ onChange }
|
347 |
messages={ messages }
|
348 |
isSingle
|
349 |
-
isCompact={ isCompact }
|
350 |
/>
|
351 |
);
|
352 |
};
|
@@ -366,7 +365,7 @@ const Edit = ( { attributes, setAttributes, debouncedSpeak } ) => {
|
|
366 |
) }
|
367 |
>
|
368 |
<div className="wc-block-attribute-filter__selection">
|
369 |
-
{ renderAttributeControl(
|
370 |
<Button isPrimary onClick={ onDone }>
|
371 |
{ __( 'Done', 'woo-gutenberg-products-block' ) }
|
372 |
</Button>
|
15 |
} from '@wordpress/components';
|
16 |
import { Icon, server, external } from '@woocommerce/icons';
|
17 |
import { SearchListControl } from '@woocommerce/components';
|
18 |
+
import { mapValues, toArray, sortBy, find } from 'lodash';
|
19 |
+
import { ATTRIBUTES } from '@woocommerce/block-settings';
|
20 |
+
import { getAdminLink } from '@woocommerce/settings';
|
21 |
import HeadingToolbar from '@woocommerce/editor-components/heading-toolbar';
|
22 |
import BlockTitle from '@woocommerce/editor-components/block-title';
|
23 |
import ToggleButtonControl from '@woocommerce/editor-components/toggle-button-control';
|
28 |
import Block from './block.js';
|
29 |
import './editor.scss';
|
30 |
|
|
|
|
|
31 |
const Edit = ( { attributes, setAttributes, debouncedSpeak } ) => {
|
32 |
const {
|
33 |
attributeId,
|
211 |
) }
|
212 |
initialOpen={ false }
|
213 |
>
|
214 |
+
{ renderAttributeControl() }
|
215 |
</PanelBody>
|
216 |
</InspectorControls>
|
217 |
);
|
273 |
}
|
274 |
|
275 |
const selectedId = selected[ 0 ].id;
|
276 |
+
const productAttribute = find( ATTRIBUTES, [
|
277 |
+
'attribute_id',
|
278 |
+
selectedId.toString(),
|
279 |
+
] );
|
280 |
|
281 |
if ( ! productAttribute || attributeId === selectedId ) {
|
282 |
return;
|
294 |
} );
|
295 |
};
|
296 |
|
297 |
+
const renderAttributeControl = () => {
|
298 |
const messages = {
|
299 |
clear: __(
|
300 |
'Clear selected attribute',
|
346 |
onChange={ onChange }
|
347 |
messages={ messages }
|
348 |
isSingle
|
|
|
349 |
/>
|
350 |
);
|
351 |
};
|
365 |
) }
|
366 |
>
|
367 |
<div className="wc-block-attribute-filter__selection">
|
368 |
+
{ renderAttributeControl() }
|
369 |
<Button isPrimary onClick={ onDone }>
|
370 |
{ __( 'Done', 'woo-gutenberg-products-block' ) }
|
371 |
</Button>
|
assets/js/blocks/cart-checkout/cart/attributes.js
CHANGED
@@ -1,7 +1,10 @@
|
|
1 |
/**
|
2 |
* External dependencies
|
3 |
*/
|
4 |
-
import {
|
|
|
|
|
|
|
5 |
|
6 |
const blockAttributes = {
|
7 |
isPreview: {
|
@@ -11,7 +14,7 @@ const blockAttributes = {
|
|
11 |
},
|
12 |
isShippingCalculatorEnabled: {
|
13 |
type: 'boolean',
|
14 |
-
default:
|
15 |
},
|
16 |
checkoutPageId: {
|
17 |
type: 'number',
|
@@ -19,11 +22,7 @@ const blockAttributes = {
|
|
19 |
},
|
20 |
hasDarkControls: {
|
21 |
type: 'boolean',
|
22 |
-
default:
|
23 |
-
},
|
24 |
-
showRateAfterTaxName: {
|
25 |
-
type: 'boolean',
|
26 |
-
default: true,
|
27 |
},
|
28 |
};
|
29 |
|
1 |
/**
|
2 |
* External dependencies
|
3 |
*/
|
4 |
+
import {
|
5 |
+
IS_SHIPPING_CALCULATOR_ENABLED,
|
6 |
+
HAS_DARK_EDITOR_STYLE_SUPPORT,
|
7 |
+
} from '@woocommerce/block-settings';
|
8 |
|
9 |
const blockAttributes = {
|
10 |
isPreview: {
|
14 |
},
|
15 |
isShippingCalculatorEnabled: {
|
16 |
type: 'boolean',
|
17 |
+
default: IS_SHIPPING_CALCULATOR_ENABLED,
|
18 |
},
|
19 |
checkoutPageId: {
|
20 |
type: 'number',
|
22 |
},
|
23 |
hasDarkControls: {
|
24 |
type: 'boolean',
|
25 |
+
default: HAS_DARK_EDITOR_STYLE_SUPPORT,
|
|
|
|
|
|
|
|
|
26 |
},
|
27 |
};
|
28 |
|
assets/js/blocks/cart-checkout/cart/checkout-button/index.js
CHANGED
@@ -40,12 +40,14 @@ const CheckoutButton = ( { link } ) => {
|
|
40 |
const { paymentMethods } = usePaymentMethods();
|
41 |
|
42 |
useEffect( () => {
|
43 |
-
// Add a listener
|
44 |
-
//
|
|
|
45 |
|
46 |
if (
|
47 |
-
|
48 |
-
typeof
|
|
|
49 |
) {
|
50 |
return;
|
51 |
}
|
@@ -54,10 +56,10 @@ const CheckoutButton = ( { link } ) => {
|
|
54 |
setShowSpinner( false );
|
55 |
};
|
56 |
|
57 |
-
|
58 |
|
59 |
return () => {
|
60 |
-
|
61 |
};
|
62 |
}, [] );
|
63 |
|
40 |
const { paymentMethods } = usePaymentMethods();
|
41 |
|
42 |
useEffect( () => {
|
43 |
+
// Add a listener for when the page is unloaded (specifically needed for Safari)
|
44 |
+
// to remove the spinner on the checkout button, so the saved page snapshot does not
|
45 |
+
// contain the spinner class. See https://archive.is/lOEW0 for why this is needed.
|
46 |
|
47 |
if (
|
48 |
+
! window ||
|
49 |
+
typeof window.addEventListener !== 'function' ||
|
50 |
+
typeof window.removeEventListener !== 'function'
|
51 |
) {
|
52 |
return;
|
53 |
}
|
56 |
setShowSpinner( false );
|
57 |
};
|
58 |
|
59 |
+
window.addEventListener( 'beforeunload', hideSpinner );
|
60 |
|
61 |
return () => {
|
62 |
+
window.removeEventListener( 'beforeunload', hideSpinner );
|
63 |
};
|
64 |
}, [] );
|
65 |
|
assets/js/blocks/cart-checkout/cart/edit.js
CHANGED
@@ -15,7 +15,7 @@ import PropTypes from 'prop-types';
|
|
15 |
import { CartCheckoutCompatibilityNotice } from '@woocommerce/editor-components/compatibility-notices';
|
16 |
import ViewSwitcher from '@woocommerce/editor-components/view-switcher';
|
17 |
import PageSelector from '@woocommerce/editor-components/page-selector';
|
18 |
-
import { CART_PAGE_ID } from '@woocommerce/block-settings';
|
19 |
import BlockErrorBoundary from '@woocommerce/base-components/block-error-boundary';
|
20 |
import {
|
21 |
EditorProvider,
|
@@ -24,7 +24,7 @@ import {
|
|
24 |
} from '@woocommerce/base-context';
|
25 |
import { createInterpolateElement } from 'wordpress-element';
|
26 |
import { useRef } from '@wordpress/element';
|
27 |
-
import { getAdminLink
|
28 |
import { previewCart } from '@woocommerce/resource-previews';
|
29 |
|
30 |
/**
|
@@ -39,7 +39,6 @@ const BlockSettings = ( { attributes, setAttributes } ) => {
|
|
39 |
isShippingCalculatorEnabled,
|
40 |
checkoutPageId,
|
41 |
hasDarkControls,
|
42 |
-
showRateAfterTaxName,
|
43 |
} = attributes;
|
44 |
const { currentPostId } = useEditorContext();
|
45 |
const { current: savedCheckoutPageId } = useRef( checkoutPageId );
|
@@ -71,7 +70,7 @@ const BlockSettings = ( { attributes, setAttributes } ) => {
|
|
71 |
) }
|
72 |
</Notice>
|
73 |
) }
|
74 |
-
{
|
75 |
<PanelBody
|
76 |
title={ __(
|
77 |
'Shipping rates',
|
@@ -96,30 +95,6 @@ const BlockSettings = ( { attributes, setAttributes } ) => {
|
|
96 |
/>
|
97 |
</PanelBody>
|
98 |
) }
|
99 |
-
{ getSetting( 'taxesEnabled' ) &&
|
100 |
-
getSetting( 'displayItemizedTaxes', false ) &&
|
101 |
-
! getSetting( 'displayCartPricesIncludingTax', false ) && (
|
102 |
-
<PanelBody
|
103 |
-
title={ __( 'Taxes', 'woo-gutenberg-products-block' ) }
|
104 |
-
>
|
105 |
-
<ToggleControl
|
106 |
-
label={ __(
|
107 |
-
'Show rate after tax name',
|
108 |
-
'woo-gutenberg-products-block'
|
109 |
-
) }
|
110 |
-
help={ __(
|
111 |
-
'Show the percentage rate alongside each tax line in the summary.',
|
112 |
-
'woo-gutenberg-products-block'
|
113 |
-
) }
|
114 |
-
checked={ showRateAfterTaxName }
|
115 |
-
onChange={ () =>
|
116 |
-
setAttributes( {
|
117 |
-
showRateAfterTaxName: ! showRateAfterTaxName,
|
118 |
-
} )
|
119 |
-
}
|
120 |
-
/>
|
121 |
-
</PanelBody>
|
122 |
-
) }
|
123 |
{ ! (
|
124 |
currentPostId === CART_PAGE_ID && savedCheckoutPageId === 0
|
125 |
) && (
|
15 |
import { CartCheckoutCompatibilityNotice } from '@woocommerce/editor-components/compatibility-notices';
|
16 |
import ViewSwitcher from '@woocommerce/editor-components/view-switcher';
|
17 |
import PageSelector from '@woocommerce/editor-components/page-selector';
|
18 |
+
import { SHIPPING_ENABLED, CART_PAGE_ID } from '@woocommerce/block-settings';
|
19 |
import BlockErrorBoundary from '@woocommerce/base-components/block-error-boundary';
|
20 |
import {
|
21 |
EditorProvider,
|
24 |
} from '@woocommerce/base-context';
|
25 |
import { createInterpolateElement } from 'wordpress-element';
|
26 |
import { useRef } from '@wordpress/element';
|
27 |
+
import { getAdminLink } from '@woocommerce/settings';
|
28 |
import { previewCart } from '@woocommerce/resource-previews';
|
29 |
|
30 |
/**
|
39 |
isShippingCalculatorEnabled,
|
40 |
checkoutPageId,
|
41 |
hasDarkControls,
|
|
|
42 |
} = attributes;
|
43 |
const { currentPostId } = useEditorContext();
|
44 |
const { current: savedCheckoutPageId } = useRef( checkoutPageId );
|
70 |
) }
|
71 |
</Notice>
|
72 |
) }
|
73 |
+
{ SHIPPING_ENABLED && (
|
74 |
<PanelBody
|
75 |
title={ __(
|
76 |
'Shipping rates',
|
95 |
/>
|
96 |
</PanelBody>
|
97 |
) }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
98 |
{ ! (
|
99 |
currentPostId === CART_PAGE_ID && savedCheckoutPageId === 0
|
100 |
) && (
|
assets/js/blocks/cart-checkout/cart/frontend.js
CHANGED
@@ -2,19 +2,18 @@
|
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import {
|
5 |
-
withStoreCartApiHydration,
|
6 |
withRestApiHydration,
|
|
|
7 |
} from '@woocommerce/block-hocs';
|
8 |
import { __ } from '@wordpress/i18n';
|
9 |
-
import {
|
10 |
-
|
11 |
-
|
12 |
-
} from '@woocommerce/base-context/providers';
|
13 |
-
import { CURRENT_USER_IS_ADMIN } from '@woocommerce/settings';
|
14 |
import {
|
15 |
renderFrontend,
|
16 |
getValidBlockAttributes,
|
17 |
} from '@woocommerce/base-utils';
|
|
|
18 |
/**
|
19 |
* Internal dependencies
|
20 |
*/
|
@@ -29,11 +28,9 @@ const reloadPage = () => void window.location.reload( true );
|
|
29 |
*/
|
30 |
const CartFrontend = ( props ) => {
|
31 |
return (
|
32 |
-
<
|
33 |
-
<
|
34 |
-
|
35 |
-
</StoreNoticesProvider>
|
36 |
-
</StoreSnackbarNoticesProvider>
|
37 |
);
|
38 |
};
|
39 |
|
@@ -47,16 +44,21 @@ const getProps = ( el ) => {
|
|
47 |
const getErrorBoundaryProps = () => {
|
48 |
return {
|
49 |
header: __( 'Something went wrong…', 'woo-gutenberg-products-block' ),
|
50 |
-
text:
|
51 |
-
|
52 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
53 |
),
|
54 |
showErrorMessage: CURRENT_USER_IS_ADMIN,
|
55 |
-
button: (
|
56 |
-
<button className="wc-block-button" onClick={ reloadPage }>
|
57 |
-
{ __( 'Reload the page', 'woo-gutenberg-products-block' ) }
|
58 |
-
</button>
|
59 |
-
),
|
60 |
};
|
61 |
};
|
62 |
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import {
|
|
|
5 |
withRestApiHydration,
|
6 |
+
withStoreCartApiHydration,
|
7 |
} from '@woocommerce/block-hocs';
|
8 |
import { __ } from '@wordpress/i18n';
|
9 |
+
import { StoreNoticesProvider } from '@woocommerce/base-context';
|
10 |
+
import { CURRENT_USER_IS_ADMIN } from '@woocommerce/block-settings';
|
11 |
+
import { createInterpolateElement } from 'wordpress-element';
|
|
|
|
|
12 |
import {
|
13 |
renderFrontend,
|
14 |
getValidBlockAttributes,
|
15 |
} from '@woocommerce/base-utils';
|
16 |
+
|
17 |
/**
|
18 |
* Internal dependencies
|
19 |
*/
|
28 |
*/
|
29 |
const CartFrontend = ( props ) => {
|
30 |
return (
|
31 |
+
<StoreNoticesProvider context="wc/cart">
|
32 |
+
<Block { ...props } />
|
33 |
+
</StoreNoticesProvider>
|
|
|
|
|
34 |
);
|
35 |
};
|
36 |
|
44 |
const getErrorBoundaryProps = () => {
|
45 |
return {
|
46 |
header: __( 'Something went wrong…', 'woo-gutenberg-products-block' ),
|
47 |
+
text: createInterpolateElement(
|
48 |
+
__(
|
49 |
+
'The cart has encountered an unexpected error. <button>Try reloading the page</button>. If the error persists, please get in touch with us so we can assist.',
|
50 |
+
'woo-gutenberg-products-block'
|
51 |
+
),
|
52 |
+
{
|
53 |
+
button: (
|
54 |
+
<button
|
55 |
+
className="wc-block-link-button"
|
56 |
+
onClick={ reloadPage }
|
57 |
+
/>
|
58 |
+
),
|
59 |
+
}
|
60 |
),
|
61 |
showErrorMessage: CURRENT_USER_IS_ADMIN,
|
|
|
|
|
|
|
|
|
|
|
62 |
};
|
63 |
};
|
64 |
|
assets/js/blocks/cart-checkout/cart/full-cart/{cart-line-item-row.tsx → cart-line-item-row.js}
RENAMED
@@ -3,13 +3,13 @@
|
|
3 |
*/
|
4 |
import classnames from 'classnames';
|
5 |
import { __ } from '@wordpress/i18n';
|
|
|
6 |
import QuantitySelector from '@woocommerce/base-components/quantity-selector';
|
7 |
import ProductPrice from '@woocommerce/base-components/product-price';
|
8 |
import ProductName from '@woocommerce/base-components/product-name';
|
9 |
import {
|
10 |
useStoreCartItemQuantity,
|
11 |
useStoreEvents,
|
12 |
-
useStoreCart,
|
13 |
} from '@woocommerce/base-context/hooks';
|
14 |
import {
|
15 |
ProductBackorderBadge,
|
@@ -18,19 +18,19 @@ import {
|
|
18 |
ProductMetadata,
|
19 |
ProductSaleBadge,
|
20 |
} from '@woocommerce/base-components/cart-checkout';
|
21 |
-
import {
|
22 |
-
getCurrencyFromPriceResponse,
|
23 |
-
Currency,
|
24 |
-
} from '@woocommerce/price-format';
|
25 |
import {
|
26 |
__experimentalApplyCheckoutFilter,
|
|
|
27 |
mustContain,
|
28 |
} from '@woocommerce/blocks-checkout';
|
29 |
import Dinero from 'dinero.js';
|
|
|
30 |
import { useCallback, useMemo } from '@wordpress/element';
|
31 |
-
|
32 |
-
|
33 |
-
|
|
|
34 |
|
35 |
/**
|
36 |
* Convert a Dinero object with precision to store currency minor unit.
|
@@ -39,10 +39,7 @@ import { getSetting } from '@woocommerce/settings';
|
|
39 |
* @param {Object} currency Currency data.
|
40 |
* @return {number} Amount with new minor unit precision.
|
41 |
*/
|
42 |
-
const getAmountFromRawPrice = (
|
43 |
-
priceObject: Dinero.Dinero,
|
44 |
-
currency: Currency
|
45 |
-
) => {
|
46 |
return priceObject.convertPrecision( currency.minorUnit ).getAmount();
|
47 |
};
|
48 |
|
@@ -52,14 +49,10 @@ const getAmountFromRawPrice = (
|
|
52 |
* @param {Object} props
|
53 |
* @param {CartItem|Object} props.lineItem
|
54 |
*/
|
55 |
-
const CartLineItemRow = ( {
|
56 |
-
lineItem,
|
57 |
-
}: {
|
58 |
-
lineItem: CartItem | Record< string, never >;
|
59 |
-
} ): JSX.Element => {
|
60 |
const {
|
61 |
name: initialName = '',
|
62 |
-
catalog_visibility: catalogVisibility = '
|
63 |
short_description: shortDescription = '',
|
64 |
description: fullDescription = '',
|
65 |
low_stock_remaining: lowStockRemaining = null,
|
@@ -111,21 +104,15 @@ const CartLineItemRow = ( {
|
|
111 |
const { dispatchStoreEvent } = useStoreEvents();
|
112 |
|
113 |
const productPriceValidation = useCallback(
|
114 |
-
( value ) => mustContain( value, '<price/>' ),
|
115 |
[]
|
116 |
);
|
117 |
-
|
118 |
-
// Prepare props to pass to the __experimentalApplyCheckoutFilter filter.
|
119 |
-
// We need to pluck out receiveCart.
|
120 |
-
// eslint-disable-next-line no-unused-vars
|
121 |
-
const { receiveCart, ...cart } = useStoreCart();
|
122 |
const arg = useMemo(
|
123 |
() => ( {
|
124 |
context: 'cart',
|
125 |
cartItem: lineItem,
|
126 |
-
cart,
|
127 |
} ),
|
128 |
-
[ lineItem
|
129 |
);
|
130 |
const priceCurrency = getCurrencyFromPriceResponse( prices );
|
131 |
const name = __experimentalApplyCheckoutFilter( {
|
@@ -133,15 +120,16 @@ const CartLineItemRow = ( {
|
|
133 |
defaultValue: initialName,
|
134 |
extensions,
|
135 |
arg,
|
|
|
136 |
} );
|
137 |
|
138 |
const regularAmountSingle = Dinero( {
|
139 |
amount: parseInt( prices.raw_prices.regular_price, 10 ),
|
140 |
-
precision: prices.raw_prices.precision,
|
141 |
} );
|
142 |
const purchaseAmountSingle = Dinero( {
|
143 |
amount: parseInt( prices.raw_prices.price, 10 ),
|
144 |
-
precision: prices.raw_prices.precision,
|
145 |
} );
|
146 |
const saleAmountSingle = regularAmountSingle.subtract(
|
147 |
purchaseAmountSingle
|
@@ -149,7 +137,7 @@ const CartLineItemRow = ( {
|
|
149 |
const saleAmount = saleAmountSingle.multiply( quantity );
|
150 |
const totalsCurrency = getCurrencyFromPriceResponse( totals );
|
151 |
let lineSubtotal = parseInt( totals.line_subtotal, 10 );
|
152 |
-
if (
|
153 |
lineSubtotal += parseInt( totals.line_subtotal_tax, 10 );
|
154 |
}
|
155 |
const subtotalPrice = Dinero( {
|
@@ -196,9 +184,7 @@ const CartLineItemRow = ( {
|
|
196 |
{ /* If the image has no alt text, this link is unnecessary and can be hidden. */ }
|
197 |
<td
|
198 |
className="wc-block-cart-item__image"
|
199 |
-
aria-hidden={
|
200 |
-
! objectHasProp( firstImage, 'alt' ) || ! firstImage.alt
|
201 |
-
}
|
202 |
>
|
203 |
{ /* We don't need to make it focusable, because product name has the same link. */ }
|
204 |
{ isProductHiddenFromCatalog ? (
|
@@ -308,4 +294,9 @@ const CartLineItemRow = ( {
|
|
308 |
</tr>
|
309 |
);
|
310 |
};
|
|
|
|
|
|
|
|
|
|
|
311 |
export default CartLineItemRow;
|
3 |
*/
|
4 |
import classnames from 'classnames';
|
5 |
import { __ } from '@wordpress/i18n';
|
6 |
+
import PropTypes from 'prop-types';
|
7 |
import QuantitySelector from '@woocommerce/base-components/quantity-selector';
|
8 |
import ProductPrice from '@woocommerce/base-components/product-price';
|
9 |
import ProductName from '@woocommerce/base-components/product-name';
|
10 |
import {
|
11 |
useStoreCartItemQuantity,
|
12 |
useStoreEvents,
|
|
|
13 |
} from '@woocommerce/base-context/hooks';
|
14 |
import {
|
15 |
ProductBackorderBadge,
|
18 |
ProductMetadata,
|
19 |
ProductSaleBadge,
|
20 |
} from '@woocommerce/base-components/cart-checkout';
|
21 |
+
import { getCurrencyFromPriceResponse } from '@woocommerce/price-format';
|
|
|
|
|
|
|
22 |
import {
|
23 |
__experimentalApplyCheckoutFilter,
|
24 |
+
mustBeString,
|
25 |
mustContain,
|
26 |
} from '@woocommerce/blocks-checkout';
|
27 |
import Dinero from 'dinero.js';
|
28 |
+
import { DISPLAY_CART_PRICES_INCLUDING_TAX } from '@woocommerce/block-settings';
|
29 |
import { useCallback, useMemo } from '@wordpress/element';
|
30 |
+
|
31 |
+
/**
|
32 |
+
* @typedef {import('@woocommerce/type-defs/cart').CartItem} CartItem
|
33 |
+
*/
|
34 |
|
35 |
/**
|
36 |
* Convert a Dinero object with precision to store currency minor unit.
|
39 |
* @param {Object} currency Currency data.
|
40 |
* @return {number} Amount with new minor unit precision.
|
41 |
*/
|
42 |
+
const getAmountFromRawPrice = ( priceObject, currency ) => {
|
|
|
|
|
|
|
43 |
return priceObject.convertPrecision( currency.minorUnit ).getAmount();
|
44 |
};
|
45 |
|
49 |
* @param {Object} props
|
50 |
* @param {CartItem|Object} props.lineItem
|
51 |
*/
|
52 |
+
const CartLineItemRow = ( { lineItem = {} } ) => {
|
|
|
|
|
|
|
|
|
53 |
const {
|
54 |
name: initialName = '',
|
55 |
+
catalog_visibility: catalogVisibility = '',
|
56 |
short_description: shortDescription = '',
|
57 |
description: fullDescription = '',
|
58 |
low_stock_remaining: lowStockRemaining = null,
|
104 |
const { dispatchStoreEvent } = useStoreEvents();
|
105 |
|
106 |
const productPriceValidation = useCallback(
|
107 |
+
( value ) => mustBeString( value ) && mustContain( value, '<price/>' ),
|
108 |
[]
|
109 |
);
|
|
|
|
|
|
|
|
|
|
|
110 |
const arg = useMemo(
|
111 |
() => ( {
|
112 |
context: 'cart',
|
113 |
cartItem: lineItem,
|
|
|
114 |
} ),
|
115 |
+
[ lineItem ]
|
116 |
);
|
117 |
const priceCurrency = getCurrencyFromPriceResponse( prices );
|
118 |
const name = __experimentalApplyCheckoutFilter( {
|
120 |
defaultValue: initialName,
|
121 |
extensions,
|
122 |
arg,
|
123 |
+
validation: mustBeString,
|
124 |
} );
|
125 |
|
126 |
const regularAmountSingle = Dinero( {
|
127 |
amount: parseInt( prices.raw_prices.regular_price, 10 ),
|
128 |
+
precision: parseInt( prices.raw_prices.precision, 10 ),
|
129 |
} );
|
130 |
const purchaseAmountSingle = Dinero( {
|
131 |
amount: parseInt( prices.raw_prices.price, 10 ),
|
132 |
+
precision: parseInt( prices.raw_prices.precision, 10 ),
|
133 |
} );
|
134 |
const saleAmountSingle = regularAmountSingle.subtract(
|
135 |
purchaseAmountSingle
|
137 |
const saleAmount = saleAmountSingle.multiply( quantity );
|
138 |
const totalsCurrency = getCurrencyFromPriceResponse( totals );
|
139 |
let lineSubtotal = parseInt( totals.line_subtotal, 10 );
|
140 |
+
if ( DISPLAY_CART_PRICES_INCLUDING_TAX ) {
|
141 |
lineSubtotal += parseInt( totals.line_subtotal_tax, 10 );
|
142 |
}
|
143 |
const subtotalPrice = Dinero( {
|
184 |
{ /* If the image has no alt text, this link is unnecessary and can be hidden. */ }
|
185 |
<td
|
186 |
className="wc-block-cart-item__image"
|
187 |
+
aria-hidden={ ! firstImage.alt }
|
|
|
|
|
188 |
>
|
189 |
{ /* We don't need to make it focusable, because product name has the same link. */ }
|
190 |
{ isProductHiddenFromCatalog ? (
|
294 |
</tr>
|
295 |
);
|
296 |
};
|
297 |
+
|
298 |
+
CartLineItemRow.propTypes = {
|
299 |
+
lineItem: PropTypes.object,
|
300 |
+
};
|
301 |
+
|
302 |
export default CartLineItemRow;
|
assets/js/blocks/cart-checkout/cart/full-cart/{cart-line-items-table.tsx → cart-line-items-table.js}
RENAMED
@@ -2,7 +2,7 @@
|
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
-
import
|
6 |
|
7 |
/**
|
8 |
* Internal dependencies
|
@@ -10,18 +10,10 @@ import { CartResponseItem } from '@woocommerce/type-defs/cart-response';
|
|
10 |
import CartLineItemRow from './cart-line-item-row';
|
11 |
|
12 |
const placeholderRows = [ ...Array( 3 ) ].map( ( _x, i ) => (
|
13 |
-
<CartLineItemRow
|
14 |
) );
|
15 |
|
16 |
-
|
17 |
-
lineItems: CartResponseItem[];
|
18 |
-
isLoading: boolean;
|
19 |
-
}
|
20 |
-
|
21 |
-
const CartLineItemsTable = ( {
|
22 |
-
lineItems = [],
|
23 |
-
isLoading = false,
|
24 |
-
}: CartLineItemsTableProps ): JSX.Element => {
|
25 |
const products = isLoading
|
26 |
? placeholderRows
|
27 |
: lineItems.map( ( lineItem ) => {
|
@@ -59,4 +51,13 @@ const CartLineItemsTable = ( {
|
|
59 |
);
|
60 |
};
|
61 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
62 |
export default CartLineItemsTable;
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
+
import PropTypes from 'prop-types';
|
6 |
|
7 |
/**
|
8 |
* Internal dependencies
|
10 |
import CartLineItemRow from './cart-line-item-row';
|
11 |
|
12 |
const placeholderRows = [ ...Array( 3 ) ].map( ( _x, i ) => (
|
13 |
+
<CartLineItemRow key={ i } />
|
14 |
) );
|
15 |
|
16 |
+
const CartLineItemsTable = ( { lineItems = [], isLoading = false } ) => {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
const products = isLoading
|
18 |
? placeholderRows
|
19 |
: lineItems.map( ( lineItem ) => {
|
51 |
);
|
52 |
};
|
53 |
|
54 |
+
CartLineItemsTable.propTypes = {
|
55 |
+
lineItems: PropTypes.arrayOf(
|
56 |
+
PropTypes.shape( {
|
57 |
+
key: PropTypes.string.isRequired,
|
58 |
+
} )
|
59 |
+
),
|
60 |
+
isLoading: PropTypes.bool,
|
61 |
+
};
|
62 |
+
|
63 |
export default CartLineItemsTable;
|
assets/js/blocks/cart-checkout/cart/full-cart/{cart-line-items-title.tsx → cart-line-items-title.js}
RENAMED
@@ -2,13 +2,10 @@
|
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { _n, sprintf } from '@wordpress/i18n';
|
|
|
5 |
import Title from '@woocommerce/base-components/title';
|
6 |
|
7 |
-
const CartLineItemsTitle = ( {
|
8 |
-
itemCount = 1,
|
9 |
-
}: {
|
10 |
-
itemCount: number;
|
11 |
-
} ): JSX.Element => {
|
12 |
return (
|
13 |
<Title headingLevel="2">
|
14 |
{ sprintf(
|
@@ -25,4 +22,8 @@ const CartLineItemsTitle = ( {
|
|
25 |
);
|
26 |
};
|
27 |
|
|
|
|
|
|
|
|
|
28 |
export default CartLineItemsTitle;
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { _n, sprintf } from '@wordpress/i18n';
|
5 |
+
import PropTypes from 'prop-types';
|
6 |
import Title from '@woocommerce/base-components/title';
|
7 |
|
8 |
+
const CartLineItemsTitle = ( { itemCount = 1 } ) => {
|
|
|
|
|
|
|
|
|
9 |
return (
|
10 |
<Title headingLevel="2">
|
11 |
{ sprintf(
|
22 |
);
|
23 |
};
|
24 |
|
25 |
+
CartLineItemsTitle.propTypes = {
|
26 |
+
itemCount: PropTypes.number,
|
27 |
+
};
|
28 |
+
|
29 |
export default CartLineItemsTitle;
|
assets/js/blocks/cart-checkout/cart/full-cart/{index.tsx → index.js}
RENAMED
@@ -1,6 +1,8 @@
|
|
|
|
1 |
/**
|
2 |
* External dependencies
|
3 |
*/
|
|
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
import {
|
6 |
TotalsCoupon,
|
@@ -12,11 +14,14 @@ import {
|
|
12 |
Subtotal,
|
13 |
TotalsFees,
|
14 |
TotalsTaxes,
|
15 |
-
TotalsWrapper,
|
16 |
ExperimentalOrderMeta,
|
17 |
-
ExperimentalDiscountsMeta,
|
18 |
} from '@woocommerce/blocks-checkout';
|
|
|
19 |
import { getCurrencyFromPriceResponse } from '@woocommerce/price-format';
|
|
|
|
|
|
|
|
|
20 |
import {
|
21 |
useStoreCartCoupons,
|
22 |
useStoreCart,
|
@@ -41,31 +46,25 @@ import CheckoutButton from '../checkout-button';
|
|
41 |
import CartLineItemsTitle from './cart-line-items-title';
|
42 |
import CartLineItemsTable from './cart-line-items-table';
|
43 |
import { CartExpressPayment } from '../../payment-methods';
|
|
|
44 |
import './style.scss';
|
45 |
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
}
|
53 |
|
54 |
-
interface CartProps {
|
55 |
-
attributes: CartAttributes;
|
56 |
-
}
|
57 |
/**
|
58 |
* Component that renders the Cart block when user has something in cart aka "full".
|
59 |
*
|
60 |
* @param {Object} props Incoming props for the component.
|
61 |
* @param {Object} props.attributes Incoming attributes for block.
|
62 |
*/
|
63 |
-
const Cart = ( { attributes }
|
64 |
-
const {
|
65 |
-
isShippingCalculatorEnabled,
|
66 |
-
hasDarkControls,
|
67 |
-
showRateAfterTaxName,
|
68 |
-
} = attributes;
|
69 |
|
70 |
const {
|
71 |
cartItems,
|
@@ -108,17 +107,12 @@ const Cart = ( { attributes }: CartProps ) => {
|
|
108 |
// Prepare props to pass to the ExperimentalOrderMeta slot fill.
|
109 |
// We need to pluck out receiveCart.
|
110 |
// eslint-disable-next-line no-unused-vars
|
111 |
-
const { extensions, ...cart } = useStoreCart();
|
112 |
const slotFillProps = {
|
113 |
extensions,
|
114 |
cart,
|
115 |
};
|
116 |
|
117 |
-
const discountsSlotFillProps = {
|
118 |
-
extensions,
|
119 |
-
cart,
|
120 |
-
};
|
121 |
-
|
122 |
return (
|
123 |
<>
|
124 |
<CartLineItemsTitle itemCount={ cartItemsCount } />
|
@@ -136,65 +130,46 @@ const Cart = ( { attributes }: CartProps ) => {
|
|
136 |
>
|
137 |
{ __( 'Cart totals', 'woo-gutenberg-products-block' ) }
|
138 |
</Title>
|
139 |
-
<
|
140 |
-
|
141 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
142 |
values={ cartTotals }
|
143 |
-
/>
|
144 |
-
<TotalsFees
|
145 |
currency={ totalsCurrency }
|
146 |
-
cartFees={ cartFees }
|
147 |
/>
|
148 |
-
|
149 |
-
|
|
|
150 |
currency={ totalsCurrency }
|
151 |
-
isRemovingCoupon={ isRemovingCoupon }
|
152 |
-
removeCoupon={ removeCoupon }
|
153 |
values={ cartTotals }
|
154 |
/>
|
155 |
-
</TotalsWrapper>
|
156 |
-
{ getSetting( 'couponsEnabled', true ) && (
|
157 |
-
<TotalsWrapper>
|
158 |
-
<TotalsCoupon
|
159 |
-
onSubmit={ applyCoupon }
|
160 |
-
isLoading={ isApplyingCoupon }
|
161 |
-
/>
|
162 |
-
</TotalsWrapper>
|
163 |
) }
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
<TotalsWrapper>
|
169 |
-
<TotalsShipping
|
170 |
-
showCalculator={ isShippingCalculatorEnabled }
|
171 |
-
showRateSelector={ true }
|
172 |
-
values={ cartTotals }
|
173 |
-
currency={ totalsCurrency }
|
174 |
-
/>
|
175 |
-
</TotalsWrapper>
|
176 |
-
) }
|
177 |
-
{ ! getSetting( 'displayCartPricesIncludingTax', false ) &&
|
178 |
-
parseInt( cartTotals.total_tax, 10 ) > 0 && (
|
179 |
-
<TotalsWrapper>
|
180 |
-
<TotalsTaxes
|
181 |
-
showRateAfterTaxName={
|
182 |
-
showRateAfterTaxName
|
183 |
-
}
|
184 |
-
currency={ totalsCurrency }
|
185 |
-
values={ cartTotals }
|
186 |
-
/>
|
187 |
-
</TotalsWrapper>
|
188 |
-
) }
|
189 |
-
<TotalsWrapper>
|
190 |
-
<TotalsFooterItem
|
191 |
-
currency={ totalsCurrency }
|
192 |
-
values={ cartTotals }
|
193 |
/>
|
194 |
-
|
195 |
-
|
|
|
|
|
|
|
196 |
<ExperimentalOrderMeta.Slot { ...slotFillProps } />
|
197 |
-
|
198 |
<div className="wc-block-cart__payment-options">
|
199 |
{ cartNeedsPayment && <CartExpressPayment /> }
|
200 |
<CheckoutButton
|
@@ -210,12 +185,8 @@ const Cart = ( { attributes }: CartProps ) => {
|
|
210 |
);
|
211 |
};
|
212 |
|
213 |
-
|
214 |
-
|
215 |
-
<CartProvider>
|
216 |
-
<Cart { ...props } />
|
217 |
-
</CartProvider>
|
218 |
-
);
|
219 |
};
|
220 |
|
221 |
export default Block;
|
1 |
+
// @ts-nocheck
|
2 |
/**
|
3 |
* External dependencies
|
4 |
*/
|
5 |
+
import PropTypes from 'prop-types';
|
6 |
import { __ } from '@wordpress/i18n';
|
7 |
import {
|
8 |
TotalsCoupon,
|
14 |
Subtotal,
|
15 |
TotalsFees,
|
16 |
TotalsTaxes,
|
|
|
17 |
ExperimentalOrderMeta,
|
|
|
18 |
} from '@woocommerce/blocks-checkout';
|
19 |
+
|
20 |
import { getCurrencyFromPriceResponse } from '@woocommerce/price-format';
|
21 |
+
import {
|
22 |
+
COUPONS_ENABLED,
|
23 |
+
DISPLAY_CART_PRICES_INCLUDING_TAX,
|
24 |
+
} from '@woocommerce/block-settings';
|
25 |
import {
|
26 |
useStoreCartCoupons,
|
27 |
useStoreCart,
|
46 |
import CartLineItemsTitle from './cart-line-items-title';
|
47 |
import CartLineItemsTable from './cart-line-items-table';
|
48 |
import { CartExpressPayment } from '../../payment-methods';
|
49 |
+
|
50 |
import './style.scss';
|
51 |
|
52 |
+
const Block = ( props ) => {
|
53 |
+
return (
|
54 |
+
<CartProvider>
|
55 |
+
<Cart { ...props } />
|
56 |
+
</CartProvider>
|
57 |
+
);
|
58 |
+
};
|
59 |
|
|
|
|
|
|
|
60 |
/**
|
61 |
* Component that renders the Cart block when user has something in cart aka "full".
|
62 |
*
|
63 |
* @param {Object} props Incoming props for the component.
|
64 |
* @param {Object} props.attributes Incoming attributes for block.
|
65 |
*/
|
66 |
+
const Cart = ( { attributes } ) => {
|
67 |
+
const { isShippingCalculatorEnabled, hasDarkControls } = attributes;
|
|
|
|
|
|
|
|
|
68 |
|
69 |
const {
|
70 |
cartItems,
|
107 |
// Prepare props to pass to the ExperimentalOrderMeta slot fill.
|
108 |
// We need to pluck out receiveCart.
|
109 |
// eslint-disable-next-line no-unused-vars
|
110 |
+
const { extensions, receiveCart, ...cart } = useStoreCart();
|
111 |
const slotFillProps = {
|
112 |
extensions,
|
113 |
cart,
|
114 |
};
|
115 |
|
|
|
|
|
|
|
|
|
|
|
116 |
return (
|
117 |
<>
|
118 |
<CartLineItemsTitle itemCount={ cartItemsCount } />
|
130 |
>
|
131 |
{ __( 'Cart totals', 'woo-gutenberg-products-block' ) }
|
132 |
</Title>
|
133 |
+
<Subtotal
|
134 |
+
currency={ totalsCurrency }
|
135 |
+
values={ cartTotals }
|
136 |
+
/>
|
137 |
+
<TotalsFees
|
138 |
+
currency={ totalsCurrency }
|
139 |
+
cartFees={ cartFees }
|
140 |
+
/>
|
141 |
+
<TotalsDiscount
|
142 |
+
cartCoupons={ appliedCoupons }
|
143 |
+
currency={ totalsCurrency }
|
144 |
+
isRemovingCoupon={ isRemovingCoupon }
|
145 |
+
removeCoupon={ removeCoupon }
|
146 |
+
values={ cartTotals }
|
147 |
+
/>
|
148 |
+
{ cartNeedsShipping && (
|
149 |
+
<TotalsShipping
|
150 |
+
showCalculator={ isShippingCalculatorEnabled }
|
151 |
+
showRateSelector={ true }
|
152 |
values={ cartTotals }
|
|
|
|
|
153 |
currency={ totalsCurrency }
|
|
|
154 |
/>
|
155 |
+
) }
|
156 |
+
{ ! DISPLAY_CART_PRICES_INCLUDING_TAX && (
|
157 |
+
<TotalsTaxes
|
158 |
currency={ totalsCurrency }
|
|
|
|
|
159 |
values={ cartTotals }
|
160 |
/>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
161 |
) }
|
162 |
+
{ COUPONS_ENABLED && (
|
163 |
+
<TotalsCoupon
|
164 |
+
onSubmit={ applyCoupon }
|
165 |
+
isLoading={ isApplyingCoupon }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
166 |
/>
|
167 |
+
) }
|
168 |
+
<TotalsFooterItem
|
169 |
+
currency={ totalsCurrency }
|
170 |
+
values={ cartTotals }
|
171 |
+
/>
|
172 |
<ExperimentalOrderMeta.Slot { ...slotFillProps } />
|
|
|
173 |
<div className="wc-block-cart__payment-options">
|
174 |
{ cartNeedsPayment && <CartExpressPayment /> }
|
175 |
<CheckoutButton
|
185 |
);
|
186 |
};
|
187 |
|
188 |
+
Cart.propTypes = {
|
189 |
+
attributes: PropTypes.object.isRequired,
|
|
|
|
|
|
|
|
|
190 |
};
|
191 |
|
192 |
export default Block;
|
assets/js/blocks/cart-checkout/cart/full-cart/style.scss
CHANGED
@@ -78,11 +78,8 @@ table.wc-block-cart-items {
|
|
78 |
}
|
79 |
}
|
80 |
|
81 |
-
.wc-block-cart {
|
82 |
-
|
83 |
-
.wc-block-components-totals-footer-item {
|
84 |
-
margin: 0;
|
85 |
-
}
|
86 |
}
|
87 |
|
88 |
// Loading placeholder state.
|
@@ -239,14 +236,12 @@ table.wc-block-cart-items {
|
|
239 |
}
|
240 |
td {
|
241 |
@include with-translucent-border(1px 0 0);
|
242 |
-
padding: $gap
|
243 |
vertical-align: top;
|
244 |
}
|
245 |
-
th:last-child
|
246 |
-
padding-right: 0;
|
247 |
-
}
|
248 |
td:last-child {
|
249 |
-
padding-right:
|
250 |
}
|
251 |
}
|
252 |
|
@@ -255,6 +250,7 @@ table.wc-block-cart-items {
|
|
255 |
}
|
256 |
|
257 |
.wc-block-cart__totals-title {
|
|
|
258 |
@include text-heading();
|
259 |
@include font-size(smaller);
|
260 |
display: block;
|
78 |
}
|
79 |
}
|
80 |
|
81 |
+
.wc-block-cart .wc-block-components-shipping-rates-control__package {
|
82 |
+
@include with-translucent-border(1px 0 0);
|
|
|
|
|
|
|
83 |
}
|
84 |
|
85 |
// Loading placeholder state.
|
236 |
}
|
237 |
td {
|
238 |
@include with-translucent-border(1px 0 0);
|
239 |
+
padding: $gap $gap $gap 0;
|
240 |
vertical-align: top;
|
241 |
}
|
242 |
+
th:last-child,
|
|
|
|
|
243 |
td:last-child {
|
244 |
+
padding-right: 0;
|
245 |
}
|
246 |
}
|
247 |
|
250 |
}
|
251 |
|
252 |
.wc-block-cart__totals-title {
|
253 |
+
@include with-translucent-border(0 0 1px);
|
254 |
@include text-heading();
|
255 |
@include font-size(smaller);
|
256 |
display: block;
|
assets/js/blocks/cart-checkout/cart/test/__snapshots__/block.js.snap
DELETED
@@ -1,2219 +0,0 @@
|
|
1 |
-
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
2 |
-
|
3 |
-
exports[`Testing cart Contains a Taxes section if Core options are set to show it 1`] = `
|
4 |
-
<div>
|
5 |
-
<div
|
6 |
-
aria-hidden="true"
|
7 |
-
class="with-scroll-to-top__scroll-point"
|
8 |
-
/>
|
9 |
-
<div
|
10 |
-
class=""
|
11 |
-
>
|
12 |
-
<div
|
13 |
-
aria-hidden="false"
|
14 |
-
class=""
|
15 |
-
>
|
16 |
-
<h2
|
17 |
-
class="wc-block-components-title"
|
18 |
-
>
|
19 |
-
Your cart (3 items)
|
20 |
-
</h2>
|
21 |
-
<div
|
22 |
-
class="wc-block-components-sidebar-layout wc-block-cart"
|
23 |
-
>
|
24 |
-
<iframe
|
25 |
-
aria-hidden="true"
|
26 |
-
frameborder="0"
|
27 |
-
src="about:blank"
|
28 |
-
style="display: block; opacity: 0; position: absolute; top: 0px; left: 0px; height: 100%; width: 100%; overflow: hidden; pointer-events: none; z-index: -1;"
|
29 |
-
tabindex="-1"
|
30 |
-
/>
|
31 |
-
<div
|
32 |
-
class="wc-block-components-main wc-block-cart__main"
|
33 |
-
>
|
34 |
-
<table
|
35 |
-
class="wc-block-cart-items"
|
36 |
-
>
|
37 |
-
<thead>
|
38 |
-
<tr
|
39 |
-
class="wc-block-cart-items__header"
|
40 |
-
>
|
41 |
-
<th
|
42 |
-
class="wc-block-cart-items__header-image"
|
43 |
-
>
|
44 |
-
<span>
|
45 |
-
Product
|
46 |
-
</span>
|
47 |
-
</th>
|
48 |
-
<th
|
49 |
-
class="wc-block-cart-items__header-product"
|
50 |
-
>
|
51 |
-
<span>
|
52 |
-
Details
|
53 |
-
</span>
|
54 |
-
</th>
|
55 |
-
<th
|
56 |
-
class="wc-block-cart-items__header-total"
|
57 |
-
>
|
58 |
-
<span>
|
59 |
-
Total
|
60 |
-
</span>
|
61 |
-
</th>
|
62 |
-
</tr>
|
63 |
-
</thead>
|
64 |
-
<tbody>
|
65 |
-
<tr
|
66 |
-
class="wc-block-cart-items__row"
|
67 |
-
>
|
68 |
-
<td
|
69 |
-
aria-hidden="true"
|
70 |
-
class="wc-block-cart-item__image"
|
71 |
-
>
|
72 |
-
<a
|
73 |
-
href="https://example.org"
|
74 |
-
tabindex="-1"
|
75 |
-
>
|
76 |
-
<img
|
77 |
-
alt=""
|
78 |
-
src="images/previews/beanie.jpg"
|
79 |
-
/>
|
80 |
-
</a>
|
81 |
-
</td>
|
82 |
-
<td
|
83 |
-
class="wc-block-cart-item__product"
|
84 |
-
>
|
85 |
-
<a
|
86 |
-
class="wc-block-components-product-name"
|
87 |
-
href="https://example.org"
|
88 |
-
>
|
89 |
-
Beanie
|
90 |
-
</a>
|
91 |
-
<div
|
92 |
-
class="wc-block-components-product-badge wc-block-components-product-low-stock-badge"
|
93 |
-
>
|
94 |
-
2 left in stock
|
95 |
-
</div>
|
96 |
-
<div
|
97 |
-
class="wc-block-cart-item__prices"
|
98 |
-
>
|
99 |
-
<span
|
100 |
-
class="price wc-block-components-product-price"
|
101 |
-
>
|
102 |
-
<span
|
103 |
-
class="wc-block-formatted-money-amount wc-block-components-formatted-money-amount wc-block-components-product-price__value"
|
104 |
-
>
|
105 |
-
$6.40
|
106 |
-
</span>
|
107 |
-
</span>
|
108 |
-
</div>
|
109 |
-
<div
|
110 |
-
class="wc-block-components-product-metadata"
|
111 |
-
>
|
112 |
-
<div
|
113 |
-
class="wc-block-components-product-metadata__description"
|
114 |
-
>
|
115 |
-
<p>
|
116 |
-
Warm hat for winter
|
117 |
-
</p>
|
118 |
-
|
119 |
-
|
120 |
-
</div>
|
121 |
-
<ul
|
122 |
-
class="wc-block-components-product-details"
|
123 |
-
>
|
124 |
-
<li
|
125 |
-
class="wc-block-components-product-details__color"
|
126 |
-
>
|
127 |
-
<span
|
128 |
-
class="wc-block-components-product-details__name"
|
129 |
-
>
|
130 |
-
Color
|
131 |
-
:
|
132 |
-
</span>
|
133 |
-
|
134 |
-
<span
|
135 |
-
class="wc-block-components-product-details__value"
|
136 |
-
>
|
137 |
-
Yellow
|
138 |
-
</span>
|
139 |
-
</li>
|
140 |
-
<li
|
141 |
-
class="wc-block-components-product-details__size"
|
142 |
-
>
|
143 |
-
<span
|
144 |
-
class="wc-block-components-product-details__name"
|
145 |
-
>
|
146 |
-
Size
|
147 |
-
:
|
148 |
-
</span>
|
149 |
-
|
150 |
-
<span
|
151 |
-
class="wc-block-components-product-details__value"
|
152 |
-
>
|
153 |
-
Small
|
154 |
-
</span>
|
155 |
-
</li>
|
156 |
-
</ul>
|
157 |
-
</div>
|
158 |
-
<div
|
159 |
-
class="wc-block-cart-item__quantity"
|
160 |
-
>
|
161 |
-
<div
|
162 |
-
class="wc-block-components-quantity-selector"
|
163 |
-
>
|
164 |
-
<input
|
165 |
-
aria-label="Quantity of Beanie in your cart."
|
166 |
-
class="wc-block-components-quantity-selector__input"
|
167 |
-
min="0"
|
168 |
-
step="1"
|
169 |
-
type="number"
|
170 |
-
value="1"
|
171 |
-
/>
|
172 |
-
<button
|
173 |
-
aria-label="Reduce quantity"
|
174 |
-
class="wc-block-components-quantity-selector__button wc-block-components-quantity-selector__button--minus"
|
175 |
-
disabled=""
|
176 |
-
>
|
177 |
-
-
|
178 |
-
</button>
|
179 |
-
<button
|
180 |
-
aria-label="Increase quantity"
|
181 |
-
class="wc-block-components-quantity-selector__button wc-block-components-quantity-selector__button--plus"
|
182 |
-
>
|
183 |
-
+
|
184 |
-
</button>
|
185 |
-
</div>
|
186 |
-
<button
|
187 |
-
class="wc-block-cart-item__remove-link"
|
188 |
-
>
|
189 |
-
Remove item
|
190 |
-
</button>
|
191 |
-
</div>
|
192 |
-
</td>
|
193 |
-
<td
|
194 |
-
class="wc-block-cart-item__total"
|
195 |
-
>
|
196 |
-
<div
|
197 |
-
class="wc-block-cart-item__total-price-and-sale-badge-wrapper"
|
198 |
-
>
|
199 |
-
<span
|
200 |
-
class="price wc-block-components-product-price"
|
201 |
-
>
|
202 |
-
<span
|
203 |
-
class="wc-block-formatted-money-amount wc-block-components-formatted-money-amount wc-block-components-product-price__value"
|
204 |
-
>
|
205 |
-
$12.80
|
206 |
-
</span>
|
207 |
-
</span>
|
208 |
-
</div>
|
209 |
-
</td>
|
210 |
-
</tr>
|
211 |
-
<tr
|
212 |
-
class="wc-block-cart-items__row"
|
213 |
-
>
|
214 |
-
<td
|
215 |
-
aria-hidden="true"
|
216 |
-
class="wc-block-cart-item__image"
|
217 |
-
>
|
218 |
-
<a
|
219 |
-
href="https://example.org"
|
220 |
-
tabindex="-1"
|
221 |
-
>
|
222 |
-
<img
|
223 |
-
alt=""
|
224 |
-
src="images/previews/cap.jpg"
|
225 |
-
/>
|
226 |
-
</a>
|
227 |
-
</td>
|
228 |
-
<td
|
229 |
-
class="wc-block-cart-item__product"
|
230 |
-
>
|
231 |
-
<a
|
232 |
-
class="wc-block-components-product-name"
|
233 |
-
href="https://example.org"
|
234 |
-
>
|
235 |
-
Cap
|
236 |
-
</a>
|
237 |
-
<div
|
238 |
-
class="wc-block-cart-item__prices"
|
239 |
-
>
|
240 |
-
<span
|
241 |
-
class="price wc-block-components-product-price"
|
242 |
-
>
|
243 |
-
<span
|
244 |
-
class="screen-reader-text"
|
245 |
-
>
|
246 |
-
Previous price:
|
247 |
-
</span>
|
248 |
-
<del
|
249 |
-
class="wc-block-components-product-price__regular"
|
250 |
-
>
|
251 |
-
$12.80
|
252 |
-
</del>
|
253 |
-
<span
|
254 |
-
class="screen-reader-text"
|
255 |
-
>
|
256 |
-
Discounted price:
|
257 |
-
</span>
|
258 |
-
<ins
|
259 |
-
class="wc-block-components-product-price__value is-discounted"
|
260 |
-
>
|
261 |
-
$11.20
|
262 |
-
</ins>
|
263 |
-
</span>
|
264 |
-
</div>
|
265 |
-
<div
|
266 |
-
class="wc-block-components-product-badge wc-block-components-sale-badge"
|
267 |
-
>
|
268 |
-
Save
|
269 |
-
<span
|
270 |
-
class="wc-block-formatted-money-amount wc-block-components-formatted-money-amount"
|
271 |
-
>
|
272 |
-
$1.60
|
273 |
-
</span>
|
274 |
-
</div>
|
275 |
-
<div
|
276 |
-
class="wc-block-components-product-metadata"
|
277 |
-
>
|
278 |
-
<div
|
279 |
-
class="wc-block-components-product-metadata__description"
|
280 |
-
>
|
281 |
-
<p>
|
282 |
-
Lightweight baseball cap
|
283 |
-
</p>
|
284 |
-
|
285 |
-
|
286 |
-
</div>
|
287 |
-
<ul
|
288 |
-
class="wc-block-components-product-details"
|
289 |
-
>
|
290 |
-
<li
|
291 |
-
class="wc-block-components-product-details__color"
|
292 |
-
>
|
293 |
-
<span
|
294 |
-
class="wc-block-components-product-details__name"
|
295 |
-
>
|
296 |
-
Color
|
297 |
-
:
|
298 |
-
</span>
|
299 |
-
|
300 |
-
<span
|
301 |
-
class="wc-block-components-product-details__value"
|
302 |
-
>
|
303 |
-
Orange
|
304 |
-
</span>
|
305 |
-
</li>
|
306 |
-
</ul>
|
307 |
-
</div>
|
308 |
-
<div
|
309 |
-
class="wc-block-cart-item__quantity"
|
310 |
-
>
|
311 |
-
<div
|
312 |
-
class="wc-block-components-quantity-selector"
|
313 |
-
>
|
314 |
-
<input
|
315 |
-
aria-label="Quantity of Cap in your cart."
|
316 |
-
class="wc-block-components-quantity-selector__input"
|
317 |
-
min="0"
|
318 |
-
step="1"
|
319 |
-
type="number"
|
320 |
-
value="1"
|
321 |
-
/>
|
322 |
-
<button
|
323 |
-
aria-label="Reduce quantity"
|
324 |
-
class="wc-block-components-quantity-selector__button wc-block-components-quantity-selector__button--minus"
|
325 |
-
disabled=""
|
326 |
-
>
|
327 |
-
-
|
328 |
-
</button>
|
329 |
-
<button
|
330 |
-
aria-label="Increase quantity"
|
331 |
-
class="wc-block-components-quantity-selector__button wc-block-components-quantity-selector__button--plus"
|
332 |
-
>
|
333 |
-
+
|
334 |
-
</button>
|
335 |
-
</div>
|
336 |
-
<button
|
337 |
-
class="wc-block-cart-item__remove-link"
|
338 |
-
>
|
339 |
-
Remove item
|
340 |
-
</button>
|
341 |
-
</div>
|
342 |
-
</td>
|
343 |
-
<td
|
344 |
-
class="wc-block-cart-item__total"
|
345 |
-
>
|
346 |
-
<div
|
347 |
-
class="wc-block-cart-item__total-price-and-sale-badge-wrapper"
|
348 |
-
>
|
349 |
-
<span
|
350 |
-
class="price wc-block-components-product-price"
|
351 |
-
>
|
352 |
-
<span
|
353 |
-
class="wc-block-formatted-money-amount wc-block-components-formatted-money-amount wc-block-components-product-price__value"
|
354 |
-
>
|
355 |
-
$11.20
|
356 |
-
</span>
|
357 |
-
</span>
|
358 |
-
</div>
|
359 |
-
</td>
|
360 |
-
</tr>
|
361 |
-
</tbody>
|
362 |
-
</table>
|
363 |
-
</div>
|
364 |
-
<div
|
365 |
-
class="wc-block-components-sidebar wc-block-cart__sidebar"
|
366 |
-
>
|
367 |
-
<h2
|
368 |
-
class="wc-block-components-title wc-block-cart__totals-title"
|
369 |
-
>
|
370 |
-
Cart totals
|
371 |
-
</h2>
|
372 |
-
<div
|
373 |
-
class="wc-block-components-totals-wrapper"
|
374 |
-
>
|
375 |
-
<div
|
376 |
-
class="wc-block-components-totals-item"
|
377 |
-
>
|
378 |
-
<span
|
379 |
-
class="wc-block-components-totals-item__label"
|
380 |
-
>
|
381 |
-
Subtotal
|
382 |
-
</span>
|
383 |
-
<span
|
384 |
-
class="wc-block-formatted-money-amount wc-block-components-formatted-money-amount wc-block-components-totals-item__value"
|
385 |
-
>
|
386 |
-
$24.00
|
387 |
-
</span>
|
388 |
-
<div
|
389 |
-
class="wc-block-components-totals-item__description"
|
390 |
-
/>
|
391 |
-
</div>
|
392 |
-
</div>
|
393 |
-
<div
|
394 |
-
class="wc-block-components-totals-wrapper"
|
395 |
-
>
|
396 |
-
<div
|
397 |
-
class="wc-block-components-totals-coupon wc-block-components-panel"
|
398 |
-
>
|
399 |
-
<div>
|
400 |
-
<button
|
401 |
-
aria-expanded="false"
|
402 |
-
class="wc-block-components-panel__button"
|
403 |
-
>
|
404 |
-
<svg
|
405 |
-
aria-hidden="true"
|
406 |
-
class="wc-block-components-panel__button-icon"
|
407 |
-
focusable="false"
|
408 |
-
height="24"
|
409 |
-
role="img"
|
410 |
-
viewBox="0 0 24 24"
|
411 |
-
width="24"
|
412 |
-
xmlns="http://www.w3.org/2000/svg"
|
413 |
-
>
|
414 |
-
<path
|
415 |
-
d="M17 9.4L12 14 7 9.4l-1 1.2 6 5.4 6-5.4z"
|
416 |
-
/>
|
417 |
-
</svg>
|
418 |
-
<span
|
419 |
-
aria-hidden="true"
|
420 |
-
>
|
421 |
-
Coupon code
|
422 |
-
</span>
|
423 |
-
<span
|
424 |
-
class="screen-reader-text"
|
425 |
-
>
|
426 |
-
Apply a coupon code
|
427 |
-
</span>
|
428 |
-
</button>
|
429 |
-
</div>
|
430 |
-
<div
|
431 |
-
class="wc-block-components-panel__content"
|
432 |
-
hidden=""
|
433 |
-
>
|
434 |
-
<div
|
435 |
-
class=""
|
436 |
-
>
|
437 |
-
<div
|
438 |
-
aria-hidden="false"
|
439 |
-
class=""
|
440 |
-
>
|
441 |
-
<div
|
442 |
-
class="wc-block-components-totals-coupon__content"
|
443 |
-
>
|
444 |
-
<form
|
445 |
-
class="wc-block-components-totals-coupon__form"
|
446 |
-
>
|
447 |
-
<div
|
448 |
-
class="wc-block-components-text-input wc-block-components-totals-coupon__input is-active"
|
449 |
-
>
|
450 |
-
<input
|
451 |
-
aria-describedby=""
|
452 |
-
aria-label="Enter code"
|
453 |
-
autocapitalize="off"
|
454 |
-
autocomplete="off"
|
455 |
-
id="wc-block-components-totals-coupon__input-1"
|
456 |
-
type="text"
|
457 |
-
value=""
|
458 |
-
/>
|
459 |
-
<label
|
460 |
-
for="wc-block-components-totals-coupon__input-1"
|
461 |
-
>
|
462 |
-
Enter code
|
463 |
-
</label>
|
464 |
-
</div>
|
465 |
-
<button
|
466 |
-
class="components-button wc-block-components-button wc-block-components-totals-coupon__button"
|
467 |
-
disabled=""
|
468 |
-
type="submit"
|
469 |
-
>
|
470 |
-
<span
|
471 |
-
class="wc-block-components-button__text"
|
472 |
-
>
|
473 |
-
Apply
|
474 |
-
</span>
|
475 |
-
</button>
|
476 |
-
</form>
|
477 |
-
</div>
|
478 |
-
</div>
|
479 |
-
</div>
|
480 |
-
</div>
|
481 |
-
</div>
|
482 |
-
</div>
|
483 |
-
<div
|
484 |
-
class="wc-block-components-totals-wrapper"
|
485 |
-
>
|
486 |
-
<div
|
487 |
-
class="wc-block-components-totals-shipping"
|
488 |
-
>
|
489 |
-
<div
|
490 |
-
class="wc-block-components-totals-item"
|
491 |
-
>
|
492 |
-
<span
|
493 |
-
class="wc-block-components-totals-item__label"
|
494 |
-
>
|
495 |
-
Shipping
|
496 |
-
</span>
|
497 |
-
<span
|
498 |
-
class="wc-block-formatted-money-amount wc-block-components-formatted-money-amount wc-block-components-totals-item__value"
|
499 |
-
>
|
500 |
-
$0.00
|
501 |
-
</span>
|
502 |
-
<div
|
503 |
-
class="wc-block-components-totals-item__description"
|
504 |
-
>
|
505 |
-
<div
|
506 |
-
class="wc-block-components-totals-item__description wc-block-components-totals-shipping__via"
|
507 |
-
>
|
508 |
-
via
|
509 |
-
|
510 |
-
Free shipping
|
511 |
-
</div>
|
512 |
-
</div>
|
513 |
-
</div>
|
514 |
-
<fieldset
|
515 |
-
class="wc-block-components-totals-shipping__fieldset"
|
516 |
-
>
|
517 |
-
<legend
|
518 |
-
class="screen-reader-text"
|
519 |
-
>
|
520 |
-
Shipping options
|
521 |
-
</legend>
|
522 |
-
<div
|
523 |
-
class=""
|
524 |
-
>
|
525 |
-
<div
|
526 |
-
aria-hidden="false"
|
527 |
-
class=""
|
528 |
-
>
|
529 |
-
<div
|
530 |
-
class="wc-block-components-shipping-rates-control wc-block-components-totals-shipping__options"
|
531 |
-
>
|
532 |
-
<div
|
533 |
-
class="wc-block-components-shipping-rates-control__package wc-block-components-panel"
|
534 |
-
>
|
535 |
-
<div>
|
536 |
-
<button
|
537 |
-
aria-expanded="true"
|
538 |
-
class="wc-block-components-panel__button"
|
539 |
-
>
|
540 |
-
<svg
|
541 |
-
aria-hidden="true"
|
542 |
-
class="wc-block-components-panel__button-icon"
|
543 |
-
focusable="false"
|
544 |
-
height="24"
|
545 |
-
role="img"
|
546 |
-
viewBox="0 0 24 24"
|
547 |
-
width="24"
|
548 |
-
xmlns="http://www.w3.org/2000/svg"
|
549 |
-
>
|
550 |
-
<path
|
551 |
-
d="M12 8l-6 5.4 1 1.2 5-4.6 5 4.6 1-1.2z"
|
552 |
-
/>
|
553 |
-
</svg>
|
554 |
-
<div
|
555 |
-
class="wc-block-components-shipping-rates-control__package-title"
|
556 |
-
>
|
557 |
-
Shipping
|
558 |
-
</div>
|
559 |
-
</button>
|
560 |
-
</div>
|
561 |
-
<div
|
562 |
-
class="wc-block-components-panel__content"
|
563 |
-
>
|
564 |
-
<div
|
565 |
-
class="wc-block-components-radio-control"
|
566 |
-
>
|
567 |
-
<label
|
568 |
-
class="wc-block-components-radio-control__option wc-block-components-radio-control__option-checked"
|
569 |
-
for="radio-control-1-free_shipping:1"
|
570 |
-
>
|
571 |
-
<input
|
572 |
-
aria-describedby="radio-control-1-free_shipping:1__label radio-control-1-free_shipping:1__description"
|
573 |
-
checked=""
|
574 |
-
class="wc-block-components-radio-control__input"
|
575 |
-
id="radio-control-1-free_shipping:1"
|
576 |
-
name="radio-control-1"
|
577 |
-
type="radio"
|
578 |
-
value="free_shipping:1"
|
579 |
-
/>
|
580 |
-
<div
|
581 |
-
class="wc-block-components-radio-control__option-layout"
|
582 |
-
>
|
583 |
-
<div
|
584 |
-
class="wc-block-components-radio-control__label-group"
|
585 |
-
>
|
586 |
-
<span
|
587 |
-
class="wc-block-components-radio-control__label"
|
588 |
-
id="radio-control-1-free_shipping:1__label"
|
589 |
-
>
|
590 |
-
Free shipping
|
591 |
-
</span>
|
592 |
-
</div>
|
593 |
-
<div
|
594 |
-
class="wc-block-components-radio-control__description-group"
|
595 |
-
>
|
596 |
-
<span
|
597 |
-
class="wc-block-components-radio-control__description"
|
598 |
-
id="radio-control-1-free_shipping:1__description"
|
599 |
-
>
|
600 |
-
<span
|
601 |
-
class="wc-block-formatted-money-amount wc-block-components-formatted-money-amount"
|
602 |
-
>
|
603 |
-
$0.00
|
604 |
-
</span>
|
605 |
-
|
606 |
-
</span>
|
607 |
-
</div>
|
608 |
-
</div>
|
609 |
-
</label>
|
610 |
-
<label
|
611 |
-
class="wc-block-components-radio-control__option"
|
612 |
-
for="radio-control-1-local_pickup:1"
|
613 |
-
>
|
614 |
-
<input
|
615 |
-
aria-describedby="radio-control-1-local_pickup:1__label radio-control-1-local_pickup:1__description"
|
616 |
-
class="wc-block-components-radio-control__input"
|
617 |
-
id="radio-control-1-local_pickup:1"
|
618 |
-
name="radio-control-1"
|
619 |
-
type="radio"
|
620 |
-
value="local_pickup:1"
|
621 |
-
/>
|
622 |
-
<div
|
623 |
-
class="wc-block-components-radio-control__option-layout"
|
624 |
-
>
|
625 |
-
<div
|
626 |
-
class="wc-block-components-radio-control__label-group"
|
627 |
-
>
|
628 |
-
<span
|
629 |
-
class="wc-block-components-radio-control__label"
|
630 |
-
id="radio-control-1-local_pickup:1__label"
|
631 |
-
>
|
632 |
-
Local pickup
|
633 |
-
</span>
|
634 |
-
</div>
|
635 |
-
<div
|
636 |
-
class="wc-block-components-radio-control__description-group"
|
637 |
-
>
|
638 |
-
<span
|
639 |
-
class="wc-block-components-radio-control__description"
|
640 |
-
id="radio-control-1-local_pickup:1__description"
|
641 |
-
>
|
642 |
-
<span
|
643 |
-
class="wc-block-formatted-money-amount wc-block-components-formatted-money-amount"
|
644 |
-
>
|
645 |
-
$2.00
|
646 |
-
</span>
|
647 |
-
|
648 |
-
</span>
|
649 |
-
</div>
|
650 |
-
</div>
|
651 |
-
</label>
|
652 |
-
</div>
|
653 |
-
</div>
|
654 |
-
</div>
|
655 |
-
</div>
|
656 |
-
</div>
|
657 |
-
</div>
|
658 |
-
</fieldset>
|
659 |
-
</div>
|
660 |
-
</div>
|
661 |
-
<div
|
662 |
-
class="wc-block-components-totals-wrapper"
|
663 |
-
>
|
664 |
-
<div
|
665 |
-
class="wc-block-components-totals-item wc-block-components-totals-taxes"
|
666 |
-
>
|
667 |
-
<span
|
668 |
-
class="wc-block-components-totals-item__label"
|
669 |
-
>
|
670 |
-
Taxes
|
671 |
-
</span>
|
672 |
-
<span
|
673 |
-
class="wc-block-formatted-money-amount wc-block-components-formatted-money-amount wc-block-components-totals-item__value"
|
674 |
-
>
|
675 |
-
$6.00
|
676 |
-
</span>
|
677 |
-
<div
|
678 |
-
class="wc-block-components-totals-item__description"
|
679 |
-
/>
|
680 |
-
</div>
|
681 |
-
</div>
|
682 |
-
<div
|
683 |
-
class="wc-block-components-totals-wrapper"
|
684 |
-
>
|
685 |
-
<div
|
686 |
-
class="wc-block-components-totals-item wc-block-components-totals-footer-item"
|
687 |
-
>
|
688 |
-
<span
|
689 |
-
class="wc-block-components-totals-item__label"
|
690 |
-
>
|
691 |
-
Total
|
692 |
-
</span>
|
693 |
-
<span
|
694 |
-
class="wc-block-formatted-money-amount wc-block-components-formatted-money-amount wc-block-components-totals-item__value"
|
695 |
-
>
|
696 |
-
$30.00
|
697 |
-
</span>
|
698 |
-
<div
|
699 |
-
class="wc-block-components-totals-item__description"
|
700 |
-
/>
|
701 |
-
</div>
|
702 |
-
</div>
|
703 |
-
<div
|
704 |
-
class="wc-block-cart__payment-options"
|
705 |
-
>
|
706 |
-
<div
|
707 |
-
class="wc-block-cart__submit"
|
708 |
-
>
|
709 |
-
<div
|
710 |
-
aria-hidden="true"
|
711 |
-
style="bottom: 0px; left: 0px; opacity: 0; pointer-events: none; position: absolute; right: 0px; top: 0px; z-index: -1;"
|
712 |
-
/>
|
713 |
-
<div
|
714 |
-
class="wc-block-cart__submit-container"
|
715 |
-
>
|
716 |
-
<a
|
717 |
-
class="components-button wc-block-components-button wc-block-cart__submit-button"
|
718 |
-
href=""
|
719 |
-
>
|
720 |
-
<span
|
721 |
-
class="wc-block-components-button__text"
|
722 |
-
>
|
723 |
-
Proceed to Checkout
|
724 |
-
</span>
|
725 |
-
</a>
|
726 |
-
</div>
|
727 |
-
</div>
|
728 |
-
</div>
|
729 |
-
</div>
|
730 |
-
</div>
|
731 |
-
<div
|
732 |
-
style="display: none;"
|
733 |
-
/>
|
734 |
-
</div>
|
735 |
-
</div>
|
736 |
-
</div>
|
737 |
-
`;
|
738 |
-
|
739 |
-
exports[`Testing cart Shows individual tax lines if the store is set to do so 1`] = `
|
740 |
-
<div>
|
741 |
-
<div
|
742 |
-
aria-hidden="true"
|
743 |
-
class="with-scroll-to-top__scroll-point"
|
744 |
-
/>
|
745 |
-
<div
|
746 |
-
class=""
|
747 |
-
>
|
748 |
-
<div
|
749 |
-
aria-hidden="false"
|
750 |
-
class=""
|
751 |
-
>
|
752 |
-
<h2
|
753 |
-
class="wc-block-components-title"
|
754 |
-
>
|
755 |
-
Your cart (3 items)
|
756 |
-
</h2>
|
757 |
-
<div
|
758 |
-
class="wc-block-components-sidebar-layout wc-block-cart"
|
759 |
-
>
|
760 |
-
<iframe
|
761 |
-
aria-hidden="true"
|
762 |
-
frameborder="0"
|
763 |
-
src="about:blank"
|
764 |
-
style="display: block; opacity: 0; position: absolute; top: 0px; left: 0px; height: 100%; width: 100%; overflow: hidden; pointer-events: none; z-index: -1;"
|
765 |
-
tabindex="-1"
|
766 |
-
/>
|
767 |
-
<div
|
768 |
-
class="wc-block-components-main wc-block-cart__main"
|
769 |
-
>
|
770 |
-
<table
|
771 |
-
class="wc-block-cart-items"
|
772 |
-
>
|
773 |
-
<thead>
|
774 |
-
<tr
|
775 |
-
class="wc-block-cart-items__header"
|
776 |
-
>
|
777 |
-
<th
|
778 |
-
class="wc-block-cart-items__header-image"
|
779 |
-
>
|
780 |
-
<span>
|
781 |
-
Product
|
782 |
-
</span>
|
783 |
-
</th>
|
784 |
-
<th
|
785 |
-
class="wc-block-cart-items__header-product"
|
786 |
-
>
|
787 |
-
<span>
|
788 |
-
Details
|
789 |
-
</span>
|
790 |
-
</th>
|
791 |
-
<th
|
792 |
-
class="wc-block-cart-items__header-total"
|
793 |
-
>
|
794 |
-
<span>
|
795 |
-
Total
|
796 |
-
</span>
|
797 |
-
</th>
|
798 |
-
</tr>
|
799 |
-
</thead>
|
800 |
-
<tbody>
|
801 |
-
<tr
|
802 |
-
class="wc-block-cart-items__row"
|
803 |
-
>
|
804 |
-
<td
|
805 |
-
aria-hidden="true"
|
806 |
-
class="wc-block-cart-item__image"
|
807 |
-
>
|
808 |
-
<a
|
809 |
-
href="https://example.org"
|
810 |
-
tabindex="-1"
|
811 |
-
>
|
812 |
-
<img
|
813 |
-
alt=""
|
814 |
-
src="images/previews/beanie.jpg"
|
815 |
-
/>
|
816 |
-
</a>
|
817 |
-
</td>
|
818 |
-
<td
|
819 |
-
class="wc-block-cart-item__product"
|
820 |
-
>
|
821 |
-
<a
|
822 |
-
class="wc-block-components-product-name"
|
823 |
-
href="https://example.org"
|
824 |
-
>
|
825 |
-
Beanie
|
826 |
-
</a>
|
827 |
-
<div
|
828 |
-
class="wc-block-components-product-badge wc-block-components-product-low-stock-badge"
|
829 |
-
>
|
830 |
-
2 left in stock
|
831 |
-
</div>
|
832 |
-
<div
|
833 |
-
class="wc-block-cart-item__prices"
|
834 |
-
>
|
835 |
-
<span
|
836 |
-
class="price wc-block-components-product-price"
|
837 |
-
>
|
838 |
-
<span
|
839 |
-
class="wc-block-formatted-money-amount wc-block-components-formatted-money-amount wc-block-components-product-price__value"
|
840 |
-
>
|
841 |
-
$6.40
|
842 |
-
</span>
|
843 |
-
</span>
|
844 |
-
</div>
|
845 |
-
<div
|
846 |
-
class="wc-block-components-product-metadata"
|
847 |
-
>
|
848 |
-
<div
|
849 |
-
class="wc-block-components-product-metadata__description"
|
850 |
-
>
|
851 |
-
<p>
|
852 |
-
Warm hat for winter
|
853 |
-
</p>
|
854 |
-
|
855 |
-
|
856 |
-
</div>
|
857 |
-
<ul
|
858 |
-
class="wc-block-components-product-details"
|
859 |
-
>
|
860 |
-
<li
|
861 |
-
class="wc-block-components-product-details__color"
|
862 |
-
>
|
863 |
-
<span
|
864 |
-
class="wc-block-components-product-details__name"
|
865 |
-
>
|
866 |
-
Color
|
867 |
-
:
|
868 |
-
</span>
|
869 |
-
|
870 |
-
<span
|
871 |
-
class="wc-block-components-product-details__value"
|
872 |
-
>
|
873 |
-
Yellow
|
874 |
-
</span>
|
875 |
-
</li>
|
876 |
-
<li
|
877 |
-
class="wc-block-components-product-details__size"
|
878 |
-
>
|
879 |
-
<span
|
880 |
-
class="wc-block-components-product-details__name"
|
881 |
-
>
|
882 |
-
Size
|
883 |
-
:
|
884 |
-
</span>
|
885 |
-
|
886 |
-
<span
|
887 |
-
class="wc-block-components-product-details__value"
|
888 |
-
>
|
889 |
-
Small
|
890 |
-
</span>
|
891 |
-
</li>
|
892 |
-
</ul>
|
893 |
-
</div>
|
894 |
-
<div
|
895 |
-
class="wc-block-cart-item__quantity"
|
896 |
-
>
|
897 |
-
<div
|
898 |
-
class="wc-block-components-quantity-selector"
|
899 |
-
>
|
900 |
-
<input
|
901 |
-
aria-label="Quantity of Beanie in your cart."
|
902 |
-
class="wc-block-components-quantity-selector__input"
|
903 |
-
min="0"
|
904 |
-
step="1"
|
905 |
-
type="number"
|
906 |
-
value="1"
|
907 |
-
/>
|
908 |
-
<button
|
909 |
-
aria-label="Reduce quantity"
|
910 |
-
class="wc-block-components-quantity-selector__button wc-block-components-quantity-selector__button--minus"
|
911 |
-
disabled=""
|
912 |
-
>
|
913 |
-
-
|
914 |
-
</button>
|
915 |
-
<button
|
916 |
-
aria-label="Increase quantity"
|
917 |
-
class="wc-block-components-quantity-selector__button wc-block-components-quantity-selector__button--plus"
|
918 |
-
>
|
919 |
-
+
|
920 |
-
</button>
|
921 |
-
</div>
|
922 |
-
<button
|
923 |
-
class="wc-block-cart-item__remove-link"
|
924 |
-
>
|
925 |
-
Remove item
|
926 |
-
</button>
|
927 |
-
</div>
|
928 |
-
</td>
|
929 |
-
<td
|
930 |
-
class="wc-block-cart-item__total"
|
931 |
-
>
|
932 |
-
<div
|
933 |
-
class="wc-block-cart-item__total-price-and-sale-badge-wrapper"
|
934 |
-
>
|
935 |
-
<span
|
936 |
-
class="price wc-block-components-product-price"
|
937 |
-
>
|
938 |
-
<span
|
939 |
-
class="wc-block-formatted-money-amount wc-block-components-formatted-money-amount wc-block-components-product-price__value"
|
940 |
-
>
|
941 |
-
$12.80
|
942 |
-
</span>
|
943 |
-
</span>
|
944 |
-
</div>
|
945 |
-
</td>
|
946 |
-
</tr>
|
947 |
-
<tr
|
948 |
-
class="wc-block-cart-items__row"
|
949 |
-
>
|
950 |
-
<td
|
951 |
-
aria-hidden="true"
|
952 |
-
class="wc-block-cart-item__image"
|
953 |
-
>
|
954 |
-
<a
|
955 |
-
href="https://example.org"
|
956 |
-
tabindex="-1"
|
957 |
-
>
|
958 |
-
<img
|
959 |
-
alt=""
|
960 |
-
src="images/previews/cap.jpg"
|
961 |
-
/>
|
962 |
-
</a>
|
963 |
-
</td>
|
964 |
-
<td
|
965 |
-
class="wc-block-cart-item__product"
|
966 |
-
>
|
967 |
-
<a
|
968 |
-
class="wc-block-components-product-name"
|
969 |
-
href="https://example.org"
|
970 |
-
>
|
971 |
-
Cap
|
972 |
-
</a>
|
973 |
-
<div
|
974 |
-
class="wc-block-cart-item__prices"
|
975 |
-
>
|
976 |
-
<span
|
977 |
-
class="price wc-block-components-product-price"
|
978 |
-
>
|
979 |
-
<span
|
980 |
-
class="screen-reader-text"
|
981 |
-
>
|
982 |
-
Previous price:
|
983 |
-
</span>
|
984 |
-
<del
|
985 |
-
class="wc-block-components-product-price__regular"
|
986 |
-
>
|
987 |
-
$12.80
|
988 |
-
</del>
|
989 |
-
<span
|
990 |
-
class="screen-reader-text"
|
991 |
-
>
|
992 |
-
Discounted price:
|
993 |
-
</span>
|
994 |
-
<ins
|
995 |
-
class="wc-block-components-product-price__value is-discounted"
|
996 |
-
>
|
997 |
-
$11.20
|
998 |
-
</ins>
|
999 |
-
</span>
|
1000 |
-
</div>
|
1001 |
-
<div
|
1002 |
-
class="wc-block-components-product-badge wc-block-components-sale-badge"
|
1003 |
-
>
|
1004 |
-
Save
|
1005 |
-
<span
|
1006 |
-
class="wc-block-formatted-money-amount wc-block-components-formatted-money-amount"
|
1007 |
-
>
|
1008 |
-
$1.60
|
1009 |
-
</span>
|
1010 |
-
</div>
|
1011 |
-
<div
|
1012 |
-
class="wc-block-components-product-metadata"
|
1013 |
-
>
|
1014 |
-
<div
|
1015 |
-
class="wc-block-components-product-metadata__description"
|
1016 |
-
>
|
1017 |
-
<p>
|
1018 |
-
Lightweight baseball cap
|
1019 |
-
</p>
|
1020 |
-
|
1021 |
-
|
1022 |
-
</div>
|
1023 |
-
<ul
|
1024 |
-
class="wc-block-components-product-details"
|
1025 |
-
>
|
1026 |
-
<li
|
1027 |
-
class="wc-block-components-product-details__color"
|
1028 |
-
>
|
1029 |
-
<span
|
1030 |
-
class="wc-block-components-product-details__name"
|
1031 |
-
>
|
1032 |
-
Color
|
1033 |
-
:
|
1034 |
-
</span>
|
1035 |
-
|
1036 |
-
<span
|
1037 |
-
class="wc-block-components-product-details__value"
|
1038 |
-
>
|
1039 |
-
Orange
|
1040 |
-
</span>
|
1041 |
-
</li>
|
1042 |
-
</ul>
|
1043 |
-
</div>
|
1044 |
-
<div
|
1045 |
-
class="wc-block-cart-item__quantity"
|
1046 |
-
>
|
1047 |
-
<div
|
1048 |
-
class="wc-block-components-quantity-selector"
|
1049 |
-
>
|
1050 |
-
<input
|
1051 |
-
aria-label="Quantity of Cap in your cart."
|
1052 |
-
class="wc-block-components-quantity-selector__input"
|
1053 |
-
min="0"
|
1054 |
-
step="1"
|
1055 |
-
type="number"
|
1056 |
-
value="1"
|
1057 |
-
/>
|
1058 |
-
<button
|
1059 |
-
aria-label="Reduce quantity"
|
1060 |
-
class="wc-block-components-quantity-selector__button wc-block-components-quantity-selector__button--minus"
|
1061 |
-
disabled=""
|
1062 |
-
>
|
1063 |
-
-
|
1064 |
-
</button>
|
1065 |
-
<button
|
1066 |
-
aria-label="Increase quantity"
|
1067 |
-
class="wc-block-components-quantity-selector__button wc-block-components-quantity-selector__button--plus"
|
1068 |
-
>
|
1069 |
-
+
|
1070 |
-
</button>
|
1071 |
-
</div>
|
1072 |
-
<button
|
1073 |
-
class="wc-block-cart-item__remove-link"
|
1074 |
-
>
|
1075 |
-
Remove item
|
1076 |
-
</button>
|
1077 |
-
</div>
|
1078 |
-
</td>
|
1079 |
-
<td
|
1080 |
-
class="wc-block-cart-item__total"
|
1081 |
-
>
|
1082 |
-
<div
|
1083 |
-
class="wc-block-cart-item__total-price-and-sale-badge-wrapper"
|
1084 |
-
>
|
1085 |
-
<span
|
1086 |
-
class="price wc-block-components-product-price"
|
1087 |
-
>
|
1088 |
-
<span
|
1089 |
-
class="wc-block-formatted-money-amount wc-block-components-formatted-money-amount wc-block-components-product-price__value"
|
1090 |
-
>
|
1091 |
-
$11.20
|
1092 |
-
</span>
|
1093 |
-
</span>
|
1094 |
-
</div>
|
1095 |
-
</td>
|
1096 |
-
</tr>
|
1097 |
-
</tbody>
|
1098 |
-
</table>
|
1099 |
-
</div>
|
1100 |
-
<div
|
1101 |
-
class="wc-block-components-sidebar wc-block-cart__sidebar"
|
1102 |
-
>
|
1103 |
-
<h2
|
1104 |
-
class="wc-block-components-title wc-block-cart__totals-title"
|
1105 |
-
>
|
1106 |
-
Cart totals
|
1107 |
-
</h2>
|
1108 |
-
<div
|
1109 |
-
class="wc-block-components-totals-wrapper"
|
1110 |
-
>
|
1111 |
-
<div
|
1112 |
-
class="wc-block-components-totals-item"
|
1113 |
-
>
|
1114 |
-
<span
|
1115 |
-
class="wc-block-components-totals-item__label"
|
1116 |
-
>
|
1117 |
-
Subtotal
|
1118 |
-
</span>
|
1119 |
-
<span
|
1120 |
-
class="wc-block-formatted-money-amount wc-block-components-formatted-money-amount wc-block-components-totals-item__value"
|
1121 |
-
>
|
1122 |
-
$24.00
|
1123 |
-
</span>
|
1124 |
-
<div
|
1125 |
-
class="wc-block-components-totals-item__description"
|
1126 |
-
/>
|
1127 |
-
</div>
|
1128 |
-
</div>
|
1129 |
-
<div
|
1130 |
-
class="wc-block-components-totals-wrapper"
|
1131 |
-
>
|
1132 |
-
<div
|
1133 |
-
class="wc-block-components-totals-coupon wc-block-components-panel"
|
1134 |
-
>
|
1135 |
-
<div>
|
1136 |
-
<button
|
1137 |
-
aria-expanded="false"
|
1138 |
-
class="wc-block-components-panel__button"
|
1139 |
-
>
|
1140 |
-
<svg
|
1141 |
-
aria-hidden="true"
|
1142 |
-
class="wc-block-components-panel__button-icon"
|
1143 |
-
focusable="false"
|
1144 |
-
height="24"
|
1145 |
-
role="img"
|
1146 |
-
viewBox="0 0 24 24"
|
1147 |
-
width="24"
|
1148 |
-
xmlns="http://www.w3.org/2000/svg"
|
1149 |
-
>
|
1150 |
-
<path
|
1151 |
-
d="M17 9.4L12 14 7 9.4l-1 1.2 6 5.4 6-5.4z"
|
1152 |
-
/>
|
1153 |
-
</svg>
|
1154 |
-
<span
|
1155 |
-
aria-hidden="true"
|
1156 |
-
>
|
1157 |
-
Coupon code
|
1158 |
-
</span>
|
1159 |
-
<span
|
1160 |
-
class="screen-reader-text"
|
1161 |
-
>
|
1162 |
-
Apply a coupon code
|
1163 |
-
</span>
|
1164 |
-
</button>
|
1165 |
-
</div>
|
1166 |
-
<div
|
1167 |
-
class="wc-block-components-panel__content"
|
1168 |
-
hidden=""
|
1169 |
-
>
|
1170 |
-
<div
|
1171 |
-
class=""
|
1172 |
-
>
|
1173 |
-
<div
|
1174 |
-
aria-hidden="false"
|
1175 |
-
class=""
|
1176 |
-
>
|
1177 |
-
<div
|
1178 |
-
class="wc-block-components-totals-coupon__content"
|
1179 |
-
>
|
1180 |
-
<form
|
1181 |
-
class="wc-block-components-totals-coupon__form"
|
1182 |
-
>
|
1183 |
-
<div
|
1184 |
-
class="wc-block-components-text-input wc-block-components-totals-coupon__input is-active"
|
1185 |
-
>
|
1186 |
-
<input
|
1187 |
-
aria-describedby=""
|
1188 |
-
aria-label="Enter code"
|
1189 |
-
autocapitalize="off"
|
1190 |
-
autocomplete="off"
|
1191 |
-
id="wc-block-components-totals-coupon__input-2"
|
1192 |
-
type="text"
|
1193 |
-
value=""
|
1194 |
-
/>
|
1195 |
-
<label
|
1196 |
-
for="wc-block-components-totals-coupon__input-2"
|
1197 |
-
>
|
1198 |
-
Enter code
|
1199 |
-
</label>
|
1200 |
-
</div>
|
1201 |
-
<button
|
1202 |
-
class="components-button wc-block-components-button wc-block-components-totals-coupon__button"
|
1203 |
-
disabled=""
|
1204 |
-
type="submit"
|
1205 |
-
>
|
1206 |
-
<span
|
1207 |
-
class="wc-block-components-button__text"
|
1208 |
-
>
|
1209 |
-
Apply
|
1210 |
-
</span>
|
1211 |
-
</button>
|
1212 |
-
</form>
|
1213 |
-
</div>
|
1214 |
-
</div>
|
1215 |
-
</div>
|
1216 |
-
</div>
|
1217 |
-
</div>
|
1218 |
-
</div>
|
1219 |
-
<div
|
1220 |
-
class="wc-block-components-totals-wrapper"
|
1221 |
-
>
|
1222 |
-
<div
|
1223 |
-
class="wc-block-components-totals-shipping"
|
1224 |
-
>
|
1225 |
-
<div
|
1226 |
-
class="wc-block-components-totals-item"
|
1227 |
-
>
|
1228 |
-
<span
|
1229 |
-
class="wc-block-components-totals-item__label"
|
1230 |
-
>
|
1231 |
-
Shipping
|
1232 |
-
</span>
|
1233 |
-
<span
|
1234 |
-
class="wc-block-formatted-money-amount wc-block-components-formatted-money-amount wc-block-components-totals-item__value"
|
1235 |
-
>
|
1236 |
-
$0.00
|
1237 |
-
</span>
|
1238 |
-
<div
|
1239 |
-
class="wc-block-components-totals-item__description"
|
1240 |
-
>
|
1241 |
-
<div
|
1242 |
-
class="wc-block-components-totals-item__description wc-block-components-totals-shipping__via"
|
1243 |
-
>
|
1244 |
-
via
|
1245 |
-
|
1246 |
-
Free shipping
|
1247 |
-
</div>
|
1248 |
-
</div>
|
1249 |
-
</div>
|
1250 |
-
<fieldset
|
1251 |
-
class="wc-block-components-totals-shipping__fieldset"
|
1252 |
-
>
|
1253 |
-
<legend
|
1254 |
-
class="screen-reader-text"
|
1255 |
-
>
|
1256 |
-
Shipping options
|
1257 |
-
</legend>
|
1258 |
-
<div
|
1259 |
-
class=""
|
1260 |
-
>
|
1261 |
-
<div
|
1262 |
-
aria-hidden="false"
|
1263 |
-
class=""
|
1264 |
-
>
|
1265 |
-
<div
|
1266 |
-
class="wc-block-components-shipping-rates-control wc-block-components-totals-shipping__options"
|
1267 |
-
>
|
1268 |
-
<div
|
1269 |
-
class="wc-block-components-shipping-rates-control__package wc-block-components-panel"
|
1270 |
-
>
|
1271 |
-
<div>
|
1272 |
-
<button
|
1273 |
-
aria-expanded="true"
|
1274 |
-
class="wc-block-components-panel__button"
|
1275 |
-
>
|
1276 |
-
<svg
|
1277 |
-
aria-hidden="true"
|
1278 |
-
class="wc-block-components-panel__button-icon"
|
1279 |
-
focusable="false"
|
1280 |
-
height="24"
|
1281 |
-
role="img"
|
1282 |
-
viewBox="0 0 24 24"
|
1283 |
-
width="24"
|
1284 |
-
xmlns="http://www.w3.org/2000/svg"
|
1285 |
-
>
|
1286 |
-
<path
|
1287 |
-
d="M12 8l-6 5.4 1 1.2 5-4.6 5 4.6 1-1.2z"
|
1288 |
-
/>
|
1289 |
-
</svg>
|
1290 |
-
<div
|
1291 |
-
class="wc-block-components-shipping-rates-control__package-title"
|
1292 |
-
>
|
1293 |
-
Shipping
|
1294 |
-
</div>
|
1295 |
-
</button>
|
1296 |
-
</div>
|
1297 |
-
<div
|
1298 |
-
class="wc-block-components-panel__content"
|
1299 |
-
>
|
1300 |
-
<div
|
1301 |
-
class="wc-block-components-radio-control"
|
1302 |
-
>
|
1303 |
-
<label
|
1304 |
-
class="wc-block-components-radio-control__option wc-block-components-radio-control__option-checked"
|
1305 |
-
for="radio-control-2-free_shipping:1"
|
1306 |
-
>
|
1307 |
-
<input
|
1308 |
-
aria-describedby="radio-control-2-free_shipping:1__label radio-control-2-free_shipping:1__description"
|
1309 |
-
checked=""
|
1310 |
-
class="wc-block-components-radio-control__input"
|
1311 |
-
id="radio-control-2-free_shipping:1"
|
1312 |
-
name="radio-control-2"
|
1313 |
-
type="radio"
|
1314 |
-
value="free_shipping:1"
|
1315 |
-
/>
|
1316 |
-
<div
|
1317 |
-
class="wc-block-components-radio-control__option-layout"
|
1318 |
-
>
|
1319 |
-
<div
|
1320 |
-
class="wc-block-components-radio-control__label-group"
|
1321 |
-
>
|
1322 |
-
<span
|
1323 |
-
class="wc-block-components-radio-control__label"
|
1324 |
-
id="radio-control-2-free_shipping:1__label"
|
1325 |
-
>
|
1326 |
-
Free shipping
|
1327 |
-
</span>
|
1328 |
-
</div>
|
1329 |
-
<div
|
1330 |
-
class="wc-block-components-radio-control__description-group"
|
1331 |
-
>
|
1332 |
-
<span
|
1333 |
-
class="wc-block-components-radio-control__description"
|
1334 |
-
id="radio-control-2-free_shipping:1__description"
|
1335 |
-
>
|
1336 |
-
<span
|
1337 |
-
class="wc-block-formatted-money-amount wc-block-components-formatted-money-amount"
|
1338 |
-
>
|
1339 |
-
$0.00
|
1340 |
-
</span>
|
1341 |
-
|
1342 |
-
</span>
|
1343 |
-
</div>
|
1344 |
-
</div>
|
1345 |
-
</label>
|
1346 |
-
<label
|
1347 |
-
class="wc-block-components-radio-control__option"
|
1348 |
-
for="radio-control-2-local_pickup:1"
|
1349 |
-
>
|
1350 |
-
<input
|
1351 |
-
aria-describedby="radio-control-2-local_pickup:1__label radio-control-2-local_pickup:1__description"
|
1352 |
-
class="wc-block-components-radio-control__input"
|
1353 |
-
id="radio-control-2-local_pickup:1"
|
1354 |
-
name="radio-control-2"
|
1355 |
-
type="radio"
|
1356 |
-
value="local_pickup:1"
|
1357 |
-
/>
|
1358 |
-
<div
|
1359 |
-
class="wc-block-components-radio-control__option-layout"
|
1360 |
-
>
|
1361 |
-
<div
|
1362 |
-
class="wc-block-components-radio-control__label-group"
|
1363 |
-
>
|
1364 |
-
<span
|
1365 |
-
class="wc-block-components-radio-control__label"
|
1366 |
-
id="radio-control-2-local_pickup:1__label"
|
1367 |
-
>
|
1368 |
-
Local pickup
|
1369 |
-
</span>
|
1370 |
-
</div>
|
1371 |
-
<div
|
1372 |
-
class="wc-block-components-radio-control__description-group"
|
1373 |
-
>
|
1374 |
-
<span
|
1375 |
-
class="wc-block-components-radio-control__description"
|
1376 |
-
id="radio-control-2-local_pickup:1__description"
|
1377 |
-
>
|
1378 |
-
<span
|
1379 |
-
class="wc-block-formatted-money-amount wc-block-components-formatted-money-amount"
|
1380 |
-
>
|
1381 |
-
$2.00
|
1382 |
-
</span>
|
1383 |
-
|
1384 |
-
</span>
|
1385 |
-
</div>
|
1386 |
-
</div>
|
1387 |
-
</label>
|
1388 |
-
</div>
|
1389 |
-
</div>
|
1390 |
-
</div>
|
1391 |
-
</div>
|
1392 |
-
</div>
|
1393 |
-
</div>
|
1394 |
-
</fieldset>
|
1395 |
-
</div>
|
1396 |
-
</div>
|
1397 |
-
<div
|
1398 |
-
class="wc-block-components-totals-wrapper"
|
1399 |
-
>
|
1400 |
-
<div
|
1401 |
-
class="wc-block-components-totals-taxes"
|
1402 |
-
>
|
1403 |
-
<div
|
1404 |
-
class="wc-block-components-totals-item wc-block-components-totals-taxes__grouped-rate"
|
1405 |
-
>
|
1406 |
-
<span
|
1407 |
-
class="wc-block-components-totals-item__label"
|
1408 |
-
>
|
1409 |
-
Sales tax
|
1410 |
-
</span>
|
1411 |
-
<span
|
1412 |
-
class="wc-block-formatted-money-amount wc-block-components-formatted-money-amount wc-block-components-totals-item__value"
|
1413 |
-
>
|
1414 |
-
$6.00
|
1415 |
-
</span>
|
1416 |
-
<div
|
1417 |
-
class="wc-block-components-totals-item__description"
|
1418 |
-
/>
|
1419 |
-
</div>
|
1420 |
-
|
1421 |
-
</div>
|
1422 |
-
</div>
|
1423 |
-
<div
|
1424 |
-
class="wc-block-components-totals-wrapper"
|
1425 |
-
>
|
1426 |
-
<div
|
1427 |
-
class="wc-block-components-totals-item wc-block-components-totals-footer-item"
|
1428 |
-
>
|
1429 |
-
<span
|
1430 |
-
class="wc-block-components-totals-item__label"
|
1431 |
-
>
|
1432 |
-
Total
|
1433 |
-
</span>
|
1434 |
-
<span
|
1435 |
-
class="wc-block-formatted-money-amount wc-block-components-formatted-money-amount wc-block-components-totals-item__value"
|
1436 |
-
>
|
1437 |
-
$30.00
|
1438 |
-
</span>
|
1439 |
-
<div
|
1440 |
-
class="wc-block-components-totals-item__description"
|
1441 |
-
/>
|
1442 |
-
</div>
|
1443 |
-
</div>
|
1444 |
-
<div
|
1445 |
-
class="wc-block-cart__payment-options"
|
1446 |
-
>
|
1447 |
-
<div
|
1448 |
-
class="wc-block-cart__submit"
|
1449 |
-
>
|
1450 |
-
<div
|
1451 |
-
aria-hidden="true"
|
1452 |
-
style="bottom: 0px; left: 0px; opacity: 0; pointer-events: none; position: absolute; right: 0px; top: 0px; z-index: -1;"
|
1453 |
-
/>
|
1454 |
-
<div
|
1455 |
-
class="wc-block-cart__submit-container"
|
1456 |
-
>
|
1457 |
-
<a
|
1458 |
-
class="components-button wc-block-components-button wc-block-cart__submit-button"
|
1459 |
-
href=""
|
1460 |
-
>
|
1461 |
-
<span
|
1462 |
-
class="wc-block-components-button__text"
|
1463 |
-
>
|
1464 |
-
Proceed to Checkout
|
1465 |
-
</span>
|
1466 |
-
</a>
|
1467 |
-
</div>
|
1468 |
-
</div>
|
1469 |
-
</div>
|
1470 |
-
</div>
|
1471 |
-
</div>
|
1472 |
-
<div
|
1473 |
-
style="display: none;"
|
1474 |
-
/>
|
1475 |
-
</div>
|
1476 |
-
</div>
|
1477 |
-
</div>
|
1478 |
-
`;
|
1479 |
-
|
1480 |
-
exports[`Testing cart Shows rate percentages after tax lines if the block is set to do so 1`] = `
|
1481 |
-
<div>
|
1482 |
-
<div
|
1483 |
-
aria-hidden="true"
|
1484 |
-
class="with-scroll-to-top__scroll-point"
|
1485 |
-
/>
|
1486 |
-
<div
|
1487 |
-
class=""
|
1488 |
-
>
|
1489 |
-
<div
|
1490 |
-
aria-hidden="false"
|
1491 |
-
class=""
|
1492 |
-
>
|
1493 |
-
<h2
|
1494 |
-
class="wc-block-components-title"
|
1495 |
-
>
|
1496 |
-
Your cart (3 items)
|
1497 |
-
</h2>
|
1498 |
-
<div
|
1499 |
-
class="wc-block-components-sidebar-layout wc-block-cart"
|
1500 |
-
>
|
1501 |
-
<iframe
|
1502 |
-
aria-hidden="true"
|
1503 |
-
frameborder="0"
|
1504 |
-
src="about:blank"
|
1505 |
-
style="display: block; opacity: 0; position: absolute; top: 0px; left: 0px; height: 100%; width: 100%; overflow: hidden; pointer-events: none; z-index: -1;"
|
1506 |
-
tabindex="-1"
|
1507 |
-
/>
|
1508 |
-
<div
|
1509 |
-
class="wc-block-components-main wc-block-cart__main"
|
1510 |
-
>
|
1511 |
-
<table
|
1512 |
-
class="wc-block-cart-items"
|
1513 |
-
>
|
1514 |
-
<thead>
|
1515 |
-
<tr
|
1516 |
-
class="wc-block-cart-items__header"
|
1517 |
-
>
|
1518 |
-
<th
|
1519 |
-
class="wc-block-cart-items__header-image"
|
1520 |
-
>
|
1521 |
-
<span>
|
1522 |
-
Product
|
1523 |
-
</span>
|
1524 |
-
</th>
|
1525 |
-
<th
|
1526 |
-
class="wc-block-cart-items__header-product"
|
1527 |
-
>
|
1528 |
-
<span>
|
1529 |
-
Details
|
1530 |
-
</span>
|
1531 |
-
</th>
|
1532 |
-
<th
|
1533 |
-
class="wc-block-cart-items__header-total"
|
1534 |
-
>
|
1535 |
-
<span>
|
1536 |
-
Total
|
1537 |
-
</span>
|
1538 |
-
</th>
|
1539 |
-
</tr>
|
1540 |
-
</thead>
|
1541 |
-
<tbody>
|
1542 |
-
<tr
|
1543 |
-
class="wc-block-cart-items__row"
|
1544 |
-
>
|
1545 |
-
<td
|
1546 |
-
aria-hidden="true"
|
1547 |
-
class="wc-block-cart-item__image"
|
1548 |
-
>
|
1549 |
-
<a
|
1550 |
-
href="https://example.org"
|
1551 |
-
tabindex="-1"
|
1552 |
-
>
|
1553 |
-
<img
|
1554 |
-
alt=""
|
1555 |
-
src="images/previews/beanie.jpg"
|
1556 |
-
/>
|
1557 |
-
</a>
|
1558 |
-
</td>
|
1559 |
-
<td
|
1560 |
-
class="wc-block-cart-item__product"
|
1561 |
-
>
|
1562 |
-
<a
|
1563 |
-
class="wc-block-components-product-name"
|
1564 |
-
href="https://example.org"
|
1565 |
-
>
|
1566 |
-
Beanie
|
1567 |
-
</a>
|
1568 |
-
<div
|
1569 |
-
class="wc-block-components-product-badge wc-block-components-product-low-stock-badge"
|
1570 |
-
>
|
1571 |
-
2 left in stock
|
1572 |
-
</div>
|
1573 |
-
<div
|
1574 |
-
class="wc-block-cart-item__prices"
|
1575 |
-
>
|
1576 |
-
<span
|
1577 |
-
class="price wc-block-components-product-price"
|
1578 |
-
>
|
1579 |
-
<span
|
1580 |
-
class="wc-block-formatted-money-amount wc-block-components-formatted-money-amount wc-block-components-product-price__value"
|
1581 |
-
>
|
1582 |
-
$6.40
|
1583 |
-
</span>
|
1584 |
-
</span>
|
1585 |
-
</div>
|
1586 |
-
<div
|
1587 |
-
class="wc-block-components-product-metadata"
|
1588 |
-
>
|
1589 |
-
<div
|
1590 |
-
class="wc-block-components-product-metadata__description"
|
1591 |
-
>
|
1592 |
-
<p>
|
1593 |
-
Warm hat for winter
|
1594 |
-
</p>
|
1595 |
-
|
1596 |
-
|
1597 |
-
</div>
|
1598 |
-
<ul
|
1599 |
-
class="wc-block-components-product-details"
|
1600 |
-
>
|
1601 |
-
<li
|
1602 |
-
class="wc-block-components-product-details__color"
|
1603 |
-
>
|
1604 |
-
<span
|
1605 |
-
class="wc-block-components-product-details__name"
|
1606 |
-
>
|
1607 |
-
Color
|
1608 |
-
:
|
1609 |
-
</span>
|
1610 |
-
|
1611 |
-
<span
|
1612 |
-
class="wc-block-components-product-details__value"
|
1613 |
-
>
|
1614 |
-
Yellow
|
1615 |
-
</span>
|
1616 |
-
</li>
|
1617 |
-
<li
|
1618 |
-
class="wc-block-components-product-details__size"
|
1619 |
-
>
|
1620 |
-
<span
|
1621 |
-
class="wc-block-components-product-details__name"
|
1622 |
-
>
|
1623 |
-
Size
|
1624 |
-
:
|
1625 |
-
</span>
|
1626 |
-
|
1627 |
-
<span
|
1628 |
-
class="wc-block-components-product-details__value"
|
1629 |
-
>
|
1630 |
-
Small
|
1631 |
-
</span>
|
1632 |
-
</li>
|
1633 |
-
</ul>
|
1634 |
-
</div>
|
1635 |
-
<div
|
1636 |
-
class="wc-block-cart-item__quantity"
|
1637 |
-
>
|
1638 |
-
<div
|
1639 |
-
class="wc-block-components-quantity-selector"
|
1640 |
-
>
|
1641 |
-
<input
|
1642 |
-
aria-label="Quantity of Beanie in your cart."
|
1643 |
-
class="wc-block-components-quantity-selector__input"
|
1644 |
-
min="0"
|
1645 |
-
step="1"
|
1646 |
-
type="number"
|
1647 |
-
value="1"
|
1648 |
-
/>
|
1649 |
-
<button
|
1650 |
-
aria-label="Reduce quantity"
|
1651 |
-
class="wc-block-components-quantity-selector__button wc-block-components-quantity-selector__button--minus"
|
1652 |
-
disabled=""
|
1653 |
-
>
|
1654 |
-
-
|
1655 |
-
</button>
|
1656 |
-
<button
|
1657 |
-
aria-label="Increase quantity"
|
1658 |
-
class="wc-block-components-quantity-selector__button wc-block-components-quantity-selector__button--plus"
|
1659 |
-
>
|
1660 |
-
+
|
1661 |
-
</button>
|
1662 |
-
</div>
|
1663 |
-
<button
|
1664 |
-
class="wc-block-cart-item__remove-link"
|
1665 |
-
>
|
1666 |
-
Remove item
|
1667 |
-
</button>
|
1668 |
-
</div>
|
1669 |
-
</td>
|
1670 |
-
<td
|
1671 |
-
class="wc-block-cart-item__total"
|
1672 |
-
>
|
1673 |
-
<div
|
1674 |
-
class="wc-block-cart-item__total-price-and-sale-badge-wrapper"
|
1675 |
-
>
|
1676 |
-
<span
|
1677 |
-
class="price wc-block-components-product-price"
|
1678 |
-
>
|
1679 |
-
<span
|
1680 |
-
class="wc-block-formatted-money-amount wc-block-components-formatted-money-amount wc-block-components-product-price__value"
|
1681 |
-
>
|
1682 |
-
$12.80
|
1683 |
-
</span>
|
1684 |
-
</span>
|
1685 |
-
</div>
|
1686 |
-
</td>
|
1687 |
-
</tr>
|
1688 |
-
<tr
|
1689 |
-
class="wc-block-cart-items__row"
|
1690 |
-
>
|
1691 |
-
<td
|
1692 |
-
aria-hidden="true"
|
1693 |
-
class="wc-block-cart-item__image"
|
1694 |
-
>
|
1695 |
-
<a
|
1696 |
-
href="https://example.org"
|
1697 |
-
tabindex="-1"
|
1698 |
-
>
|
1699 |
-
<img
|
1700 |
-
alt=""
|
1701 |
-
src="images/previews/cap.jpg"
|
1702 |
-
/>
|
1703 |
-
</a>
|
1704 |
-
</td>
|
1705 |
-
<td
|
1706 |
-
class="wc-block-cart-item__product"
|
1707 |
-
>
|
1708 |
-
<a
|
1709 |
-
class="wc-block-components-product-name"
|
1710 |
-
href="https://example.org"
|
1711 |
-
>
|
1712 |
-
Cap
|
1713 |
-
</a>
|
1714 |
-
<div
|
1715 |
-
class="wc-block-cart-item__prices"
|
1716 |
-
>
|
1717 |
-
<span
|
1718 |
-
class="price wc-block-components-product-price"
|
1719 |
-
>
|
1720 |
-
<span
|
1721 |
-
class="screen-reader-text"
|
1722 |
-
>
|
1723 |
-
Previous price:
|
1724 |
-
</span>
|
1725 |
-
<del
|
1726 |
-
class="wc-block-components-product-price__regular"
|
1727 |
-
>
|
1728 |
-
$12.80
|
1729 |
-
</del>
|
1730 |
-
<span
|
1731 |
-
class="screen-reader-text"
|
1732 |
-
>
|
1733 |
-
Discounted price:
|
1734 |
-
</span>
|
1735 |
-
<ins
|
1736 |
-
class="wc-block-components-product-price__value is-discounted"
|
1737 |
-
>
|
1738 |
-
$11.20
|
1739 |
-
</ins>
|
1740 |
-
</span>
|
1741 |
-
</div>
|
1742 |
-
<div
|
1743 |
-
class="wc-block-components-product-badge wc-block-components-sale-badge"
|
1744 |
-
>
|
1745 |
-
Save
|
1746 |
-
<span
|
1747 |
-
class="wc-block-formatted-money-amount wc-block-components-formatted-money-amount"
|
1748 |
-
>
|
1749 |
-
$1.60
|
1750 |
-
</span>
|
1751 |
-
</div>
|
1752 |
-
<div
|
1753 |
-
class="wc-block-components-product-metadata"
|
1754 |
-
>
|
1755 |
-
<div
|
1756 |
-
class="wc-block-components-product-metadata__description"
|
1757 |
-
>
|
1758 |
-
<p>
|
1759 |
-
Lightweight baseball cap
|
1760 |
-
</p>
|
1761 |
-
|
1762 |
-
|
1763 |
-
</div>
|
1764 |
-
<ul
|
1765 |
-
class="wc-block-components-product-details"
|
1766 |
-
>
|
1767 |
-
<li
|
1768 |
-
class="wc-block-components-product-details__color"
|
1769 |
-
>
|
1770 |
-
<span
|
1771 |
-
class="wc-block-components-product-details__name"
|
1772 |
-
>
|
1773 |
-
Color
|
1774 |
-
:
|
1775 |
-
</span>
|
1776 |
-
|
1777 |
-
<span
|
1778 |
-
class="wc-block-components-product-details__value"
|
1779 |
-
>
|
1780 |
-
Orange
|
1781 |
-
</span>
|
1782 |
-
</li>
|
1783 |
-
</ul>
|
1784 |
-
</div>
|
1785 |
-
<div
|
1786 |
-
class="wc-block-cart-item__quantity"
|
1787 |
-
>
|
1788 |
-
<div
|
1789 |
-
class="wc-block-components-quantity-selector"
|
1790 |
-
>
|
1791 |
-
<input
|
1792 |
-
aria-label="Quantity of Cap in your cart."
|
1793 |
-
class="wc-block-components-quantity-selector__input"
|
1794 |
-
min="0"
|
1795 |
-
step="1"
|
1796 |
-
type="number"
|
1797 |
-
value="1"
|
1798 |
-
/>
|
1799 |
-
<button
|
1800 |
-
aria-label="Reduce quantity"
|
1801 |
-
class="wc-block-components-quantity-selector__button wc-block-components-quantity-selector__button--minus"
|
1802 |
-
disabled=""
|
1803 |
-
>
|
1804 |
-
-
|
1805 |
-
</button>
|
1806 |
-
<button
|
1807 |
-
aria-label="Increase quantity"
|
1808 |
-
class="wc-block-components-quantity-selector__button wc-block-components-quantity-selector__button--plus"
|
1809 |
-
>
|
1810 |
-
+
|
1811 |
-
</button>
|
1812 |
-
</div>
|
1813 |
-
<button
|
1814 |
-
class="wc-block-cart-item__remove-link"
|
1815 |
-
>
|
1816 |
-
Remove item
|
1817 |
-
</button>
|
1818 |
-
</div>
|
1819 |
-
</td>
|
1820 |
-
<td
|
1821 |
-
class="wc-block-cart-item__total"
|
1822 |
-
>
|
1823 |
-
<div
|
1824 |
-
class="wc-block-cart-item__total-price-and-sale-badge-wrapper"
|
1825 |
-
>
|
1826 |
-
<span
|
1827 |
-
class="price wc-block-components-product-price"
|
1828 |
-
>
|
1829 |
-
<span
|
1830 |
-
class="wc-block-formatted-money-amount wc-block-components-formatted-money-amount wc-block-components-product-price__value"
|
1831 |
-
>
|
1832 |
-
$11.20
|
1833 |
-
</span>
|
1834 |
-
</span>
|
1835 |
-
</div>
|
1836 |
-
</td>
|
1837 |
-
</tr>
|
1838 |
-
</tbody>
|
1839 |
-
</table>
|
1840 |
-
</div>
|
1841 |
-
<div
|
1842 |
-
class="wc-block-components-sidebar wc-block-cart__sidebar"
|
1843 |
-
>
|
1844 |
-
<h2
|
1845 |
-
class="wc-block-components-title wc-block-cart__totals-title"
|
1846 |
-
>
|
1847 |
-
Cart totals
|
1848 |
-
</h2>
|
1849 |
-
<div
|
1850 |
-
class="wc-block-components-totals-wrapper"
|
1851 |
-
>
|
1852 |
-
<div
|
1853 |
-
class="wc-block-components-totals-item"
|
1854 |
-
>
|
1855 |
-
<span
|
1856 |
-
class="wc-block-components-totals-item__label"
|
1857 |
-
>
|
1858 |
-
Subtotal
|
1859 |
-
</span>
|
1860 |
-
<span
|
1861 |
-
class="wc-block-formatted-money-amount wc-block-components-formatted-money-amount wc-block-components-totals-item__value"
|
1862 |
-
>
|
1863 |
-
$24.00
|
1864 |
-
</span>
|
1865 |
-
<div
|
1866 |
-
class="wc-block-components-totals-item__description"
|
1867 |
-
/>
|
1868 |
-
</div>
|
1869 |
-
</div>
|
1870 |
-
<div
|
1871 |
-
class="wc-block-components-totals-wrapper"
|
1872 |
-
>
|
1873 |
-
<div
|
1874 |
-
class="wc-block-components-totals-coupon wc-block-components-panel"
|
1875 |
-
>
|
1876 |
-
<div>
|
1877 |
-
<button
|
1878 |
-
aria-expanded="false"
|
1879 |
-
class="wc-block-components-panel__button"
|
1880 |
-
>
|
1881 |
-
<svg
|
1882 |
-
aria-hidden="true"
|
1883 |
-
class="wc-block-components-panel__button-icon"
|
1884 |
-
focusable="false"
|
1885 |
-
height="24"
|
1886 |
-
role="img"
|
1887 |
-
viewBox="0 0 24 24"
|
1888 |
-
width="24"
|
1889 |
-
xmlns="http://www.w3.org/2000/svg"
|
1890 |
-
>
|
1891 |
-
<path
|
1892 |
-
d="M17 9.4L12 14 7 9.4l-1 1.2 6 5.4 6-5.4z"
|
1893 |
-
/>
|
1894 |
-
</svg>
|
1895 |
-
<span
|
1896 |
-
aria-hidden="true"
|
1897 |
-
>
|
1898 |
-
Coupon code
|
1899 |
-
</span>
|
1900 |
-
<span
|
1901 |
-
class="screen-reader-text"
|
1902 |
-
>
|
1903 |
-
Apply a coupon code
|
1904 |
-
</span>
|
1905 |
-
</button>
|
1906 |
-
</div>
|
1907 |
-
<div
|
1908 |
-
class="wc-block-components-panel__content"
|
1909 |
-
hidden=""
|
1910 |
-
>
|
1911 |
-
<div
|
1912 |
-
class=""
|
1913 |
-
>
|
1914 |
-
<div
|
1915 |
-
aria-hidden="false"
|
1916 |
-
class=""
|
1917 |
-
>
|
1918 |
-
<div
|
1919 |
-
class="wc-block-components-totals-coupon__content"
|
1920 |
-
>
|
1921 |
-
<form
|
1922 |
-
class="wc-block-components-totals-coupon__form"
|
1923 |
-
>
|
1924 |
-
<div
|
1925 |
-
class="wc-block-components-text-input wc-block-components-totals-coupon__input is-active"
|
1926 |
-
>
|
1927 |
-
<input
|
1928 |
-
aria-describedby=""
|
1929 |
-
aria-label="Enter code"
|
1930 |
-
autocapitalize="off"
|
1931 |
-
autocomplete="off"
|
1932 |
-
id="wc-block-components-totals-coupon__input-3"
|
1933 |
-
type="text"
|
1934 |
-
value=""
|
1935 |
-
/>
|
1936 |
-
<label
|
1937 |
-
for="wc-block-components-totals-coupon__input-3"
|
1938 |
-
>
|
1939 |
-
Enter code
|
1940 |
-
</label>
|
1941 |
-
</div>
|
1942 |
-
<button
|
1943 |
-
class="components-button wc-block-components-button wc-block-components-totals-coupon__button"
|
1944 |
-
disabled=""
|
1945 |
-
type="submit"
|
1946 |
-
>
|
1947 |
-
<span
|
1948 |
-
class="wc-block-components-button__text"
|
1949 |
-
>
|
1950 |
-
Apply
|
1951 |
-
</span>
|
1952 |
-
</button>
|
1953 |
-
</form>
|
1954 |
-
</div>
|
1955 |
-
</div>
|
1956 |
-
</div>
|
1957 |
-
</div>
|
1958 |
-
</div>
|
1959 |
-
</div>
|
1960 |
-
<div
|
1961 |
-
class="wc-block-components-totals-wrapper"
|
1962 |
-
>
|
1963 |
-
<div
|
1964 |
-
class="wc-block-components-totals-shipping"
|
1965 |
-
>
|
1966 |
-
<div
|
1967 |
-
class="wc-block-components-totals-item"
|
1968 |
-
>
|
1969 |
-
<span
|
1970 |
-
class="wc-block-components-totals-item__label"
|
1971 |
-
>
|
1972 |
-
Shipping
|
1973 |
-
</span>
|
1974 |
-
<span
|
1975 |
-
class="wc-block-formatted-money-amount wc-block-components-formatted-money-amount wc-block-components-totals-item__value"
|
1976 |
-
>
|
1977 |
-
$0.00
|
1978 |
-
</span>
|
1979 |
-
<div
|
1980 |
-
class="wc-block-components-totals-item__description"
|
1981 |
-
>
|
1982 |
-
<div
|
1983 |
-
class="wc-block-components-totals-item__description wc-block-components-totals-shipping__via"
|
1984 |
-
>
|
1985 |
-
via
|
1986 |
-
|
1987 |
-
Free shipping
|
1988 |
-
</div>
|
1989 |
-
</div>
|
1990 |
-
</div>
|
1991 |
-
<fieldset
|
1992 |
-
class="wc-block-components-totals-shipping__fieldset"
|
1993 |
-
>
|
1994 |
-
<legend
|
1995 |
-
class="screen-reader-text"
|
1996 |
-
>
|
1997 |
-
Shipping options
|
1998 |
-
</legend>
|
1999 |
-
<div
|
2000 |
-
class=""
|
2001 |
-
>
|
2002 |
-
<div
|
2003 |
-
aria-hidden="false"
|
2004 |
-
class=""
|
2005 |
-
>
|
2006 |
-
<div
|
2007 |
-
class="wc-block-components-shipping-rates-control wc-block-components-totals-shipping__options"
|
2008 |
-
>
|
2009 |
-
<div
|
2010 |
-
class="wc-block-components-shipping-rates-control__package wc-block-components-panel"
|
2011 |
-
>
|
2012 |
-
<div>
|
2013 |
-
<button
|
2014 |
-
aria-expanded="true"
|
2015 |
-
class="wc-block-components-panel__button"
|
2016 |
-
>
|
2017 |
-
<svg
|
2018 |
-
aria-hidden="true"
|
2019 |
-
class="wc-block-components-panel__button-icon"
|
2020 |
-
focusable="false"
|
2021 |
-
height="24"
|
2022 |
-
role="img"
|
2023 |
-
viewBox="0 0 24 24"
|
2024 |
-
width="24"
|
2025 |
-
xmlns="http://www.w3.org/2000/svg"
|
2026 |
-
>
|
2027 |
-
<path
|
2028 |
-
d="M12 8l-6 5.4 1 1.2 5-4.6 5 4.6 1-1.2z"
|
2029 |
-
/>
|
2030 |
-
</svg>
|
2031 |
-
<div
|
2032 |
-
class="wc-block-components-shipping-rates-control__package-title"
|
2033 |
-
>
|
2034 |
-
Shipping
|
2035 |
-
</div>
|
2036 |
-
</button>
|
2037 |
-
</div>
|
2038 |
-
<div
|
2039 |
-
class="wc-block-components-panel__content"
|
2040 |
-
>
|
2041 |
-
<div
|
2042 |
-
class="wc-block-components-radio-control"
|
2043 |
-
>
|
2044 |
-
<label
|
2045 |
-
class="wc-block-components-radio-control__option wc-block-components-radio-control__option-checked"
|
2046 |
-
for="radio-control-3-free_shipping:1"
|
2047 |
-
>
|
2048 |
-
<input
|
2049 |
-
aria-describedby="radio-control-3-free_shipping:1__label radio-control-3-free_shipping:1__description"
|
2050 |
-
checked=""
|
2051 |
-
class="wc-block-components-radio-control__input"
|
2052 |
-
id="radio-control-3-free_shipping:1"
|
2053 |
-
name="radio-control-3"
|
2054 |
-
type="radio"
|
2055 |
-
value="free_shipping:1"
|
2056 |
-
/>
|
2057 |
-
<div
|
2058 |
-
class="wc-block-components-radio-control__option-layout"
|
2059 |
-
>
|
2060 |
-
<div
|
2061 |
-
class="wc-block-components-radio-control__label-group"
|
2062 |
-
>
|
2063 |
-
<span
|
2064 |
-
class="wc-block-components-radio-control__label"
|
2065 |
-
id="radio-control-3-free_shipping:1__label"
|
2066 |
-
>
|
2067 |
-
Free shipping
|
2068 |
-
</span>
|
2069 |
-
</div>
|
2070 |
-
<div
|
2071 |
-
class="wc-block-components-radio-control__description-group"
|
2072 |
-
>
|
2073 |
-
<span
|
2074 |
-
class="wc-block-components-radio-control__description"
|
2075 |
-
id="radio-control-3-free_shipping:1__description"
|
2076 |
-
>
|
2077 |
-
<span
|
2078 |
-
class="wc-block-formatted-money-amount wc-block-components-formatted-money-amount"
|
2079 |
-
>
|
2080 |
-
$0.00
|
2081 |
-
</span>
|
2082 |
-
|
2083 |
-
</span>
|
2084 |
-
</div>
|
2085 |
-
</div>
|
2086 |
-
</label>
|
2087 |
-
<label
|
2088 |
-
class="wc-block-components-radio-control__option"
|
2089 |
-
for="radio-control-3-local_pickup:1"
|
2090 |
-
>
|
2091 |
-
<input
|
2092 |
-
aria-describedby="radio-control-3-local_pickup:1__label radio-control-3-local_pickup:1__description"
|
2093 |
-
class="wc-block-components-radio-control__input"
|
2094 |
-
id="radio-control-3-local_pickup:1"
|
2095 |
-
name="radio-control-3"
|
2096 |
-
type="radio"
|
2097 |
-
value="local_pickup:1"
|
2098 |
-
/>
|
2099 |
-
<div
|
2100 |
-
class="wc-block-components-radio-control__option-layout"
|
2101 |
-
>
|
2102 |
-
<div
|
2103 |
-
class="wc-block-components-radio-control__label-group"
|
2104 |
-
>
|
2105 |
-
<span
|
2106 |
-
class="wc-block-components-radio-control__label"
|
2107 |
-
id="radio-control-3-local_pickup:1__label"
|
2108 |
-
>
|
2109 |
-
Local pickup
|
2110 |
-
</span>
|
2111 |
-
</div>
|
2112 |
-
<div
|
2113 |
-
class="wc-block-components-radio-control__description-group"
|
2114 |
-
>
|
2115 |
-
<span
|
2116 |
-
class="wc-block-components-radio-control__description"
|
2117 |
-
id="radio-control-3-local_pickup:1__description"
|
2118 |
-
>
|
2119 |
-
<span
|
2120 |
-
class="wc-block-formatted-money-amount wc-block-components-formatted-money-amount"
|
2121 |
-
>
|
2122 |
-
$2.00
|
2123 |
-
</span>
|
2124 |
-
|
2125 |
-
</span>
|
2126 |
-
</div>
|
2127 |
-
</div>
|
2128 |
-
</label>
|
2129 |
-
</div>
|
2130 |
-
</div>
|
2131 |
-
</div>
|
2132 |
-
</div>
|
2133 |
-
</div>
|
2134 |
-
</div>
|
2135 |
-
</fieldset>
|
2136 |
-
</div>
|
2137 |
-
</div>
|
2138 |
-
<div
|
2139 |
-
class="wc-block-components-totals-wrapper"
|
2140 |
-
>
|
2141 |
-
<div
|
2142 |
-
class="wc-block-components-totals-taxes"
|
2143 |
-
>
|
2144 |
-
<div
|
2145 |
-
class="wc-block-components-totals-item wc-block-components-totals-taxes__grouped-rate"
|
2146 |
-
>
|
2147 |
-
<span
|
2148 |
-
class="wc-block-components-totals-item__label"
|
2149 |
-
>
|
2150 |
-
Sales tax 20%
|
2151 |
-
</span>
|
2152 |
-
<span
|
2153 |
-
class="wc-block-formatted-money-amount wc-block-components-formatted-money-amount wc-block-components-totals-item__value"
|
2154 |
-
>
|
2155 |
-
$6.00
|
2156 |
-
</span>
|
2157 |
-
<div
|
2158 |
-
class="wc-block-components-totals-item__description"
|
2159 |
-
/>
|
2160 |
-
</div>
|
2161 |
-
|
2162 |
-
</div>
|
2163 |
-
</div>
|
2164 |
-
<div
|
2165 |
-
class="wc-block-components-totals-wrapper"
|
2166 |
-
>
|
2167 |
-
<div
|
2168 |
-
class="wc-block-components-totals-item wc-block-components-totals-footer-item"
|
2169 |
-
>
|
2170 |
-
<span
|
2171 |
-
class="wc-block-components-totals-item__label"
|
2172 |
-
>
|
2173 |
-
Total
|
2174 |
-
</span>
|
2175 |
-
<span
|
2176 |
-
class="wc-block-formatted-money-amount wc-block-components-formatted-money-amount wc-block-components-totals-item__value"
|
2177 |
-
>
|
2178 |
-
$30.00
|
2179 |
-
</span>
|
2180 |
-
<div
|
2181 |
-
class="wc-block-components-totals-item__description"
|
2182 |
-
/>
|
2183 |
-
</div>
|
2184 |
-
</div>
|
2185 |
-
<div
|
2186 |
-
class="wc-block-cart__payment-options"
|
2187 |
-
>
|
2188 |
-
<div
|
2189 |
-
class="wc-block-cart__submit"
|
2190 |
-
>
|
2191 |
-
<div
|
2192 |
-
aria-hidden="true"
|
2193 |
-
style="bottom: 0px; left: 0px; opacity: 0; pointer-events: none; position: absolute; right: 0px; top: 0px; z-index: -1;"
|
2194 |
-
/>
|
2195 |
-
<div
|
2196 |
-
class="wc-block-cart__submit-container"
|
2197 |
-
>
|
2198 |
-
<a
|
2199 |
-
class="components-button wc-block-components-button wc-block-cart__submit-button"
|
2200 |
-
href=""
|
2201 |
-
>
|
2202 |
-
<span
|
2203 |
-
class="wc-block-components-button__text"
|
2204 |
-
>
|
2205 |
-
Proceed to Checkout
|
2206 |
-
</span>
|
2207 |
-
</a>
|
2208 |
-
</div>
|
2209 |
-
</div>
|
2210 |
-
</div>
|
2211 |
-
</div>
|
2212 |
-
</div>
|
2213 |
-
<div
|
2214 |
-
style="display: none;"
|
2215 |
-
/>
|
2216 |
-
</div>
|
2217 |
-
</div>
|
2218 |
-
</div>
|
2219 |
-
`;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/blocks/cart-checkout/cart/test/block.js
CHANGED
@@ -12,7 +12,6 @@ import { default as fetchMock } from 'jest-fetch-mock';
|
|
12 |
*/
|
13 |
import CartBlock from '../block';
|
14 |
import { defaultCartState } from '../../../../data/default-states';
|
15 |
-
import { allSettings } from '../../../../settings/shared/settings-init';
|
16 |
|
17 |
describe( 'Testing cart', () => {
|
18 |
beforeEach( async () => {
|
@@ -50,59 +49,6 @@ describe( 'Testing cart', () => {
|
|
50 |
expect( console ).toHaveWarned();
|
51 |
} );
|
52 |
|
53 |
-
it( 'Contains a Taxes section if Core options are set to show it', async () => {
|
54 |
-
allSettings.displayCartPricesIncludingTax = false;
|
55 |
-
// The criteria for showing the Taxes section is:
|
56 |
-
// Display prices during basket and checkout: 'Excluding tax'.
|
57 |
-
const { container } = render(
|
58 |
-
<CartBlock
|
59 |
-
emptyCart={ null }
|
60 |
-
attributes={ {
|
61 |
-
isShippingCalculatorEnabled: false,
|
62 |
-
} }
|
63 |
-
/>
|
64 |
-
);
|
65 |
-
await waitFor( () => expect( fetchMock ).toHaveBeenCalled() );
|
66 |
-
expect( container ).toMatchSnapshot();
|
67 |
-
} );
|
68 |
-
|
69 |
-
it( 'Shows individual tax lines if the store is set to do so', async () => {
|
70 |
-
allSettings.displayCartPricesIncludingTax = false;
|
71 |
-
allSettings.displayItemizedTaxes = true;
|
72 |
-
// The criteria for showing the lines in the Taxes section is:
|
73 |
-
// Display prices during basket and checkout: 'Excluding tax'.
|
74 |
-
// Display tax totals: 'Itemized';
|
75 |
-
const { container } = render(
|
76 |
-
<CartBlock
|
77 |
-
emptyCart={ null }
|
78 |
-
attributes={ {
|
79 |
-
isShippingCalculatorEnabled: false,
|
80 |
-
} }
|
81 |
-
/>
|
82 |
-
);
|
83 |
-
await waitFor( () => expect( fetchMock ).toHaveBeenCalled() );
|
84 |
-
expect( container ).toMatchSnapshot();
|
85 |
-
} );
|
86 |
-
|
87 |
-
it( 'Shows rate percentages after tax lines if the block is set to do so', async () => {
|
88 |
-
allSettings.displayCartPricesIncludingTax = false;
|
89 |
-
allSettings.displayItemizedTaxes = true;
|
90 |
-
// The criteria for showing the lines in the Taxes section is:
|
91 |
-
// Display prices during basket and checkout: 'Excluding tax'.
|
92 |
-
// Display tax totals: 'Itemized';
|
93 |
-
const { container } = render(
|
94 |
-
<CartBlock
|
95 |
-
emptyCart={ null }
|
96 |
-
attributes={ {
|
97 |
-
showRateAfterTaxName: true,
|
98 |
-
isShippingCalculatorEnabled: false,
|
99 |
-
} }
|
100 |
-
/>
|
101 |
-
);
|
102 |
-
await waitFor( () => expect( fetchMock ).toHaveBeenCalled() );
|
103 |
-
expect( container ).toMatchSnapshot();
|
104 |
-
} );
|
105 |
-
|
106 |
it( 'renders empty cart if there are no items in the cart', async () => {
|
107 |
fetchMock.mockResponse( ( req ) => {
|
108 |
if ( req.url.match( /wc\/store\/cart/ ) ) {
|
12 |
*/
|
13 |
import CartBlock from '../block';
|
14 |
import { defaultCartState } from '../../../../data/default-states';
|
|
|
15 |
|
16 |
describe( 'Testing cart', () => {
|
17 |
beforeEach( async () => {
|
49 |
expect( console ).toHaveWarned();
|
50 |
} );
|
51 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
52 |
it( 'renders empty cart if there are no items in the cart', async () => {
|
53 |
fetchMock.mockResponse( ( req ) => {
|
54 |
if ( req.url.match( /wc\/store\/cart/ ) ) {
|
assets/js/blocks/cart-checkout/checkout/attributes.js
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
/**
|
2 |
* External dependencies
|
3 |
*/
|
4 |
-
import {
|
5 |
|
6 |
const blockAttributes = {
|
7 |
isPreview: {
|
@@ -51,11 +51,7 @@ const blockAttributes = {
|
|
51 |
},
|
52 |
hasDarkControls: {
|
53 |
type: 'boolean',
|
54 |
-
default:
|
55 |
-
},
|
56 |
-
showRateAfterTaxName: {
|
57 |
-
type: 'boolean',
|
58 |
-
default: getSetting( 'displayCartPricesIncludingTax', false ),
|
59 |
},
|
60 |
};
|
61 |
|
1 |
/**
|
2 |
* External dependencies
|
3 |
*/
|
4 |
+
import { HAS_DARK_EDITOR_STYLE_SUPPORT } from '@woocommerce/block-settings';
|
5 |
|
6 |
const blockAttributes = {
|
7 |
isPreview: {
|
51 |
},
|
52 |
hasDarkControls: {
|
53 |
type: 'boolean',
|
54 |
+
default: HAS_DARK_EDITOR_STYLE_SUPPORT,
|
|
|
|
|
|
|
|
|
55 |
},
|
56 |
};
|
57 |
|
assets/js/blocks/cart-checkout/checkout/block.js
CHANGED
@@ -22,6 +22,10 @@ import {
|
|
22 |
Main,
|
23 |
} from '@woocommerce/base-components/sidebar-layout';
|
24 |
import withScrollToTop from '@woocommerce/base-hocs/with-scroll-to-top';
|
|
|
|
|
|
|
|
|
25 |
import { isWcVersion, getSetting } from '@woocommerce/settings';
|
26 |
|
27 |
/**
|
@@ -101,8 +105,8 @@ const Checkout = ( { attributes, scrollToTop } ) => {
|
|
101 |
if (
|
102 |
! isEditor &&
|
103 |
! customerId &&
|
104 |
-
!
|
105 |
-
! ( allowCreateAccount &&
|
106 |
) {
|
107 |
return (
|
108 |
<>
|
@@ -155,7 +159,6 @@ const Checkout = ( { attributes, scrollToTop } ) => {
|
|
155 |
cartItems={ cartItems }
|
156 |
cartTotals={ cartTotals }
|
157 |
cartFees={ cartFees }
|
158 |
-
showRateAfterTaxName={ attributes.showRateAfterTaxName }
|
159 |
/>
|
160 |
</Sidebar>
|
161 |
</SidebarLayout>
|
22 |
Main,
|
23 |
} from '@woocommerce/base-components/sidebar-layout';
|
24 |
import withScrollToTop from '@woocommerce/base-hocs/with-scroll-to-top';
|
25 |
+
import {
|
26 |
+
CHECKOUT_ALLOWS_GUEST,
|
27 |
+
CHECKOUT_ALLOWS_SIGNUP,
|
28 |
+
} from '@woocommerce/block-settings';
|
29 |
import { isWcVersion, getSetting } from '@woocommerce/settings';
|
30 |
|
31 |
/**
|
105 |
if (
|
106 |
! isEditor &&
|
107 |
! customerId &&
|
108 |
+
! CHECKOUT_ALLOWS_GUEST &&
|
109 |
+
! ( allowCreateAccount && CHECKOUT_ALLOWS_SIGNUP )
|
110 |
) {
|
111 |
return (
|
112 |
<>
|
159 |
cartItems={ cartItems }
|
160 |
cartTotals={ cartTotals }
|
161 |
cartFees={ cartFees }
|
|
|
162 |
/>
|
163 |
</Sidebar>
|
164 |
</SidebarLayout>
|
assets/js/blocks/cart-checkout/checkout/checkout-order-error/index.js
CHANGED
@@ -34,13 +34,7 @@ const cartItemErrorCodes = [
|
|
34 |
* checkout block.
|
35 |
*/
|
36 |
const CheckoutOrderError = () => {
|
37 |
-
const
|
38 |
-
const checkoutData = {
|
39 |
-
code: '',
|
40 |
-
message: '',
|
41 |
-
...( preloadedApiRequests[ '/wc/store/checkout' ]?.body || {} ),
|
42 |
-
};
|
43 |
-
|
44 |
const errorData = {
|
45 |
code: checkoutData.code || 'unknown',
|
46 |
message:
|
34 |
* checkout block.
|
35 |
*/
|
36 |
const CheckoutOrderError = () => {
|
37 |
+
const checkoutData = getSetting( 'checkoutData', {} );
|
|
|
|
|
|
|
|
|
|
|
|
|
38 |
const errorData = {
|
39 |
code: checkoutData.code || 'unknown',
|
40 |
message:
|
assets/js/blocks/cart-checkout/checkout/edit.js
CHANGED
@@ -16,8 +16,9 @@ import {
|
|
16 |
PRIVACY_URL,
|
17 |
TERMS_URL,
|
18 |
CHECKOUT_PAGE_ID,
|
|
|
19 |
} from '@woocommerce/block-settings';
|
20 |
-
import { isWcVersion, getAdminLink
|
21 |
import { createInterpolateElement } from 'wordpress-element';
|
22 |
import { useRef } from '@wordpress/element';
|
23 |
import {
|
@@ -52,7 +53,6 @@ const BlockSettings = ( { attributes, setAttributes } ) => {
|
|
52 |
showReturnToCart,
|
53 |
cartPageId,
|
54 |
hasDarkControls,
|
55 |
-
showRateAfterTaxName,
|
56 |
} = attributes;
|
57 |
const { currentPostId } = useEditorContext();
|
58 |
const { current: savedCartPageId } = useRef( cartPageId );
|
@@ -62,8 +62,7 @@ const BlockSettings = ( { attributes, setAttributes } ) => {
|
|
62 |
// Also implicitly gated to feature plugin, because Checkout
|
63 |
// block is gated to plugin
|
64 |
const showCreateAccountOption =
|
65 |
-
|
66 |
-
isWcVersion( '4.7.0', '>=' );
|
67 |
return (
|
68 |
<InspectorControls>
|
69 |
{ currentPostId !== CHECKOUT_PAGE_ID && (
|
@@ -299,30 +298,6 @@ const BlockSettings = ( { attributes, setAttributes } ) => {
|
|
299 |
} }
|
300 |
/>
|
301 |
) }
|
302 |
-
{ getSetting( 'taxesEnabled' ) &&
|
303 |
-
getSetting( 'displayItemizedTaxes', false ) &&
|
304 |
-
! getSetting( 'displayCartPricesIncludingTax', false ) && (
|
305 |
-
<PanelBody
|
306 |
-
title={ __( 'Taxes', 'woo-gutenberg-products-block' ) }
|
307 |
-
>
|
308 |
-
<ToggleControl
|
309 |
-
label={ __(
|
310 |
-
'Show rate after tax name',
|
311 |
-
'woo-gutenberg-products-block'
|
312 |
-
) }
|
313 |
-
help={ __(
|
314 |
-
'Show the percentage rate alongside each tax line in the summary.',
|
315 |
-
'woo-gutenberg-products-block'
|
316 |
-
) }
|
317 |
-
checked={ showRateAfterTaxName }
|
318 |
-
onChange={ () =>
|
319 |
-
setAttributes( {
|
320 |
-
showRateAfterTaxName: ! showRateAfterTaxName,
|
321 |
-
} )
|
322 |
-
}
|
323 |
-
/>
|
324 |
-
</PanelBody>
|
325 |
-
) }
|
326 |
<PanelBody title={ __( 'Style', 'woo-gutenberg-products-block' ) }>
|
327 |
<ToggleControl
|
328 |
label={ __(
|
16 |
PRIVACY_URL,
|
17 |
TERMS_URL,
|
18 |
CHECKOUT_PAGE_ID,
|
19 |
+
CHECKOUT_ALLOWS_SIGNUP,
|
20 |
} from '@woocommerce/block-settings';
|
21 |
+
import { isWcVersion, getAdminLink } from '@woocommerce/settings';
|
22 |
import { createInterpolateElement } from 'wordpress-element';
|
23 |
import { useRef } from '@wordpress/element';
|
24 |
import {
|
53 |
showReturnToCart,
|
54 |
cartPageId,
|
55 |
hasDarkControls,
|
|
|
56 |
} = attributes;
|
57 |
const { currentPostId } = useEditorContext();
|
58 |
const { current: savedCartPageId } = useRef( cartPageId );
|
62 |
// Also implicitly gated to feature plugin, because Checkout
|
63 |
// block is gated to plugin
|
64 |
const showCreateAccountOption =
|
65 |
+
CHECKOUT_ALLOWS_SIGNUP && isWcVersion( '4.7.0', '>=' );
|
|
|
66 |
return (
|
67 |
<InspectorControls>
|
68 |
{ currentPostId !== CHECKOUT_PAGE_ID && (
|
298 |
} }
|
299 |
/>
|
300 |
) }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
301 |
<PanelBody title={ __( 'Style', 'woo-gutenberg-products-block' ) }>
|
302 |
<ToggleControl
|
303 |
label={ __(
|
assets/js/blocks/cart-checkout/checkout/form/billing-fields-step.js
CHANGED
@@ -3,15 +3,16 @@
|
|
3 |
*/
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
import { FormStep } from '@woocommerce/base-components/cart-checkout';
|
6 |
-
import {
|
7 |
import PropTypes from 'prop-types';
|
8 |
|
9 |
const BillingFieldsStep = ( { children } ) => {
|
10 |
-
const {
|
|
|
11 |
return (
|
12 |
<FormStep
|
13 |
id="billing-fields"
|
14 |
-
disabled={
|
15 |
className="wc-block-checkout__billing-fields"
|
16 |
title={ __( 'Billing address', 'woo-gutenberg-products-block' ) }
|
17 |
description={ __(
|
3 |
*/
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
import { FormStep } from '@woocommerce/base-components/cart-checkout';
|
6 |
+
import { useCheckoutContext } from '@woocommerce/base-context';
|
7 |
import PropTypes from 'prop-types';
|
8 |
|
9 |
const BillingFieldsStep = ( { children } ) => {
|
10 |
+
const { isProcessing: checkoutIsProcessing } = useCheckoutContext();
|
11 |
+
|
12 |
return (
|
13 |
<FormStep
|
14 |
id="billing-fields"
|
15 |
+
disabled={ checkoutIsProcessing }
|
16 |
className="wc-block-checkout__billing-fields"
|
17 |
title={ __( 'Billing address', 'woo-gutenberg-products-block' ) }
|
18 |
description={ __(
|
assets/js/blocks/cart-checkout/checkout/form/contact-fields-step.js
CHANGED
@@ -5,8 +5,10 @@ import { __ } from '@wordpress/i18n';
|
|
5 |
import { FormStep } from '@woocommerce/base-components/cart-checkout';
|
6 |
import { ValidatedTextInput } from '@woocommerce/base-components/text-input';
|
7 |
import { useCheckoutContext } from '@woocommerce/base-context';
|
8 |
-
import {
|
9 |
-
|
|
|
|
|
10 |
import CheckboxControl from '@woocommerce/base-components/checkbox-control';
|
11 |
|
12 |
/**
|
@@ -19,16 +21,16 @@ const ContactFieldsStep = ( {
|
|
19 |
allowCreateAccount,
|
20 |
} ) => {
|
21 |
const {
|
|
|
22 |
customerId,
|
23 |
shouldCreateAccount,
|
24 |
setShouldCreateAccount,
|
25 |
} = useCheckoutContext();
|
26 |
-
const { isDisabled } = useCheckoutSubmit();
|
27 |
|
28 |
const createAccountUI = ! customerId &&
|
29 |
allowCreateAccount &&
|
30 |
-
|
31 |
-
|
32 |
<CheckboxControl
|
33 |
className="wc-block-checkout__create-account"
|
34 |
label={ __(
|
@@ -39,11 +41,10 @@ const ContactFieldsStep = ( {
|
|
39 |
onChange={ ( value ) => setShouldCreateAccount( value ) }
|
40 |
/>
|
41 |
);
|
42 |
-
|
43 |
return (
|
44 |
<FormStep
|
45 |
id="contact-fields"
|
46 |
-
disabled={
|
47 |
className="wc-block-checkout__contact-fields"
|
48 |
title={ __(
|
49 |
'Contact information',
|
5 |
import { FormStep } from '@woocommerce/base-components/cart-checkout';
|
6 |
import { ValidatedTextInput } from '@woocommerce/base-components/text-input';
|
7 |
import { useCheckoutContext } from '@woocommerce/base-context';
|
8 |
+
import {
|
9 |
+
CHECKOUT_ALLOWS_GUEST,
|
10 |
+
CHECKOUT_ALLOWS_SIGNUP,
|
11 |
+
} from '@woocommerce/block-settings';
|
12 |
import CheckboxControl from '@woocommerce/base-components/checkbox-control';
|
13 |
|
14 |
/**
|
21 |
allowCreateAccount,
|
22 |
} ) => {
|
23 |
const {
|
24 |
+
isProcessing: checkoutIsProcessing,
|
25 |
customerId,
|
26 |
shouldCreateAccount,
|
27 |
setShouldCreateAccount,
|
28 |
} = useCheckoutContext();
|
|
|
29 |
|
30 |
const createAccountUI = ! customerId &&
|
31 |
allowCreateAccount &&
|
32 |
+
CHECKOUT_ALLOWS_GUEST &&
|
33 |
+
CHECKOUT_ALLOWS_SIGNUP && (
|
34 |
<CheckboxControl
|
35 |
className="wc-block-checkout__create-account"
|
36 |
label={ __(
|
41 |
onChange={ ( value ) => setShouldCreateAccount( value ) }
|
42 |
/>
|
43 |
);
|
|
|
44 |
return (
|
45 |
<FormStep
|
46 |
id="contact-fields"
|
47 |
+
disabled={ checkoutIsProcessing }
|
48 |
className="wc-block-checkout__contact-fields"
|
49 |
title={ __(
|
50 |
'Contact information',
|
assets/js/blocks/cart-checkout/checkout/form/login-prompt.js
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
-
import {
|
6 |
import { useCheckoutContext } from '@woocommerce/base-context';
|
7 |
|
8 |
/**
|
@@ -13,7 +13,7 @@ import { LOGIN_TO_CHECKOUT_URL } from '../utils';
|
|
13 |
const LoginPrompt = () => {
|
14 |
const { customerId } = useCheckoutContext();
|
15 |
|
16 |
-
if ( !
|
17 |
return null;
|
18 |
}
|
19 |
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
+
import { CHECKOUT_SHOW_LOGIN_REMINDER } from '@woocommerce/block-settings';
|
6 |
import { useCheckoutContext } from '@woocommerce/base-context';
|
7 |
|
8 |
/**
|
13 |
const LoginPrompt = () => {
|
14 |
const { customerId } = useCheckoutContext();
|
15 |
|
16 |
+
if ( ! CHECKOUT_SHOW_LOGIN_REMINDER || customerId ) {
|
17 |
return null;
|
18 |
}
|
19 |
|
assets/js/blocks/cart-checkout/checkout/form/order-notes-step.js
CHANGED
@@ -7,7 +7,6 @@ import {
|
|
7 |
useCheckoutContext,
|
8 |
useShippingDataContext,
|
9 |
} from '@woocommerce/base-context';
|
10 |
-
import { useCheckoutSubmit } from '@woocommerce/base-context/hooks';
|
11 |
|
12 |
/**
|
13 |
* Internal dependencies
|
@@ -16,8 +15,11 @@ import CheckoutOrderNotes from './order-notes';
|
|
16 |
|
17 |
const OrderNotesStep = () => {
|
18 |
const { needsShipping } = useShippingDataContext();
|
19 |
-
const {
|
20 |
-
|
|
|
|
|
|
|
21 |
const { setOrderNotes } = dispatchActions;
|
22 |
|
23 |
return (
|
@@ -25,11 +27,11 @@ const OrderNotesStep = () => {
|
|
25 |
id="order-notes"
|
26 |
showStepNumber={ false }
|
27 |
className="wc-block-checkout__order-notes"
|
28 |
-
disabled={
|
29 |
>
|
30 |
<CheckoutOrderNotes
|
|
|
31 |
onChange={ setOrderNotes }
|
32 |
-
disabled={ isDisabled }
|
33 |
placeholder={
|
34 |
needsShipping
|
35 |
? __(
|
7 |
useCheckoutContext,
|
8 |
useShippingDataContext,
|
9 |
} from '@woocommerce/base-context';
|
|
|
10 |
|
11 |
/**
|
12 |
* Internal dependencies
|
15 |
|
16 |
const OrderNotesStep = () => {
|
17 |
const { needsShipping } = useShippingDataContext();
|
18 |
+
const {
|
19 |
+
isProcessing: checkoutIsProcessing,
|
20 |
+
orderNotes,
|
21 |
+
dispatchActions,
|
22 |
+
} = useCheckoutContext();
|
23 |
const { setOrderNotes } = dispatchActions;
|
24 |
|
25 |
return (
|
27 |
id="order-notes"
|
28 |
showStepNumber={ false }
|
29 |
className="wc-block-checkout__order-notes"
|
30 |
+
disabled={ checkoutIsProcessing }
|
31 |
>
|
32 |
<CheckoutOrderNotes
|
33 |
+
disabled={ checkoutIsProcessing }
|
34 |
onChange={ setOrderNotes }
|
|
|
35 |
placeholder={
|
36 |
needsShipping
|
37 |
? __(
|
assets/js/blocks/cart-checkout/checkout/form/payment-method-step.js
CHANGED
@@ -3,12 +3,14 @@
|
|
3 |
*/
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
import { FormStep } from '@woocommerce/base-components/cart-checkout';
|
6 |
-
import {
|
|
|
|
|
|
|
7 |
import {
|
8 |
useStoreCart,
|
9 |
useEmitResponse,
|
10 |
usePaymentMethods,
|
11 |
-
useCheckoutSubmit,
|
12 |
} from '@woocommerce/base-context/hooks';
|
13 |
|
14 |
/**
|
@@ -17,7 +19,7 @@ import {
|
|
17 |
import { PaymentMethods } from '../../payment-methods';
|
18 |
|
19 |
const PaymentMethodStep = () => {
|
20 |
-
const {
|
21 |
const { cartNeedsPayment } = useStoreCart();
|
22 |
const { paymentMethods } = usePaymentMethods();
|
23 |
const { noticeContexts } = useEmitResponse();
|
@@ -29,7 +31,7 @@ const PaymentMethodStep = () => {
|
|
29 |
return (
|
30 |
<FormStep
|
31 |
id="payment-method"
|
32 |
-
disabled={
|
33 |
className="wc-block-checkout__payment-method"
|
34 |
title={ __( 'Payment method', 'woo-gutenberg-products-block' ) }
|
35 |
description={
|
3 |
*/
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
import { FormStep } from '@woocommerce/base-components/cart-checkout';
|
6 |
+
import {
|
7 |
+
useCheckoutContext,
|
8 |
+
StoreNoticesProvider,
|
9 |
+
} from '@woocommerce/base-context';
|
10 |
import {
|
11 |
useStoreCart,
|
12 |
useEmitResponse,
|
13 |
usePaymentMethods,
|
|
|
14 |
} from '@woocommerce/base-context/hooks';
|
15 |
|
16 |
/**
|
19 |
import { PaymentMethods } from '../../payment-methods';
|
20 |
|
21 |
const PaymentMethodStep = () => {
|
22 |
+
const { isProcessing: checkoutIsProcessing } = useCheckoutContext();
|
23 |
const { cartNeedsPayment } = useStoreCart();
|
24 |
const { paymentMethods } = usePaymentMethods();
|
25 |
const { noticeContexts } = useEmitResponse();
|
31 |
return (
|
32 |
<FormStep
|
33 |
id="payment-method"
|
34 |
+
disabled={ checkoutIsProcessing }
|
35 |
className="wc-block-checkout__payment-method"
|
36 |
title={ __( 'Payment method', 'woo-gutenberg-products-block' ) }
|
37 |
description={
|
assets/js/blocks/cart-checkout/checkout/form/shipping-fields-step.js
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
import { FormStep } from '@woocommerce/base-components/cart-checkout';
|
6 |
import CheckboxControl from '@woocommerce/base-components/checkbox-control';
|
7 |
-
import {
|
8 |
import PropTypes from 'prop-types';
|
9 |
|
10 |
const ShippingFieldsStep = ( {
|
@@ -12,12 +12,12 @@ const ShippingFieldsStep = ( {
|
|
12 |
setShippingAsBilling,
|
13 |
children,
|
14 |
} ) => {
|
15 |
-
const {
|
16 |
|
17 |
return (
|
18 |
<FormStep
|
19 |
id="shipping-fields"
|
20 |
-
disabled={
|
21 |
className="wc-block-checkout__shipping-fields"
|
22 |
title={ __( 'Shipping address', 'woo-gutenberg-products-block' ) }
|
23 |
description={ __(
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
import { FormStep } from '@woocommerce/base-components/cart-checkout';
|
6 |
import CheckboxControl from '@woocommerce/base-components/checkbox-control';
|
7 |
+
import { useCheckoutContext } from '@woocommerce/base-context';
|
8 |
import PropTypes from 'prop-types';
|
9 |
|
10 |
const ShippingFieldsStep = ( {
|
12 |
setShippingAsBilling,
|
13 |
children,
|
14 |
} ) => {
|
15 |
+
const { isProcessing: checkoutIsProcessing } = useCheckoutContext();
|
16 |
|
17 |
return (
|
18 |
<FormStep
|
19 |
id="shipping-fields"
|
20 |
+
disabled={ checkoutIsProcessing }
|
21 |
className="wc-block-checkout__shipping-fields"
|
22 |
title={ __( 'Shipping address', 'woo-gutenberg-products-block' ) }
|
23 |
description={ __(
|
assets/js/blocks/cart-checkout/checkout/form/{shipping-options-step.tsx → shipping-options-step.js}
RENAMED
@@ -13,16 +13,14 @@ import {
|
|
13 |
import { getCurrencyFromPriceResponse } from '@woocommerce/price-format';
|
14 |
import FormattedMonetaryAmount from '@woocommerce/base-components/formatted-monetary-amount';
|
15 |
import {
|
|
|
16 |
useEditorContext,
|
17 |
useShippingDataContext,
|
18 |
} from '@woocommerce/base-context';
|
19 |
-
import { useCheckoutSubmit } from '@woocommerce/base-context/hooks';
|
20 |
import { decodeEntities } from '@wordpress/html-entities';
|
|
|
21 |
import { Notice } from 'wordpress-components';
|
22 |
import classnames from 'classnames';
|
23 |
-
import { getSetting } from '@woocommerce/settings';
|
24 |
-
import type { PackageRateOption } from '@woocommerce/type-defs/shipping';
|
25 |
-
import type { CartShippingPackageShippingRate } from '@woocommerce/type-defs/cart';
|
26 |
|
27 |
/**
|
28 |
* Internal dependencies
|
@@ -34,10 +32,8 @@ import NoShippingPlaceholder from './no-shipping-placeholder';
|
|
34 |
*
|
35 |
* @param {Object} option Shipping Rate.
|
36 |
*/
|
37 |
-
const renderShippingRatesControlOption = (
|
38 |
-
|
39 |
-
): PackageRateOption => {
|
40 |
-
const priceWithTaxes = getSetting( 'displayCartPricesIncludingTax', false )
|
41 |
? parseInt( option.price, 10 ) + parseInt( option.taxes, 10 )
|
42 |
: parseInt( option.price, 10 );
|
43 |
return {
|
@@ -54,8 +50,8 @@ const renderShippingRatesControlOption = (
|
|
54 |
};
|
55 |
};
|
56 |
|
57 |
-
const ShippingOptionsStep = ()
|
58 |
-
const {
|
59 |
const { isEditor } = useEditorContext();
|
60 |
const {
|
61 |
shippingRates,
|
@@ -71,7 +67,7 @@ const ShippingOptionsStep = (): JSX.Element | null => {
|
|
71 |
return (
|
72 |
<FormStep
|
73 |
id="shipping-option"
|
74 |
-
disabled={
|
75 |
className="wc-block-checkout__shipping-option"
|
76 |
title={ __( 'Shipping options', 'woo-gutenberg-products-block' ) }
|
77 |
description={
|
13 |
import { getCurrencyFromPriceResponse } from '@woocommerce/price-format';
|
14 |
import FormattedMonetaryAmount from '@woocommerce/base-components/formatted-monetary-amount';
|
15 |
import {
|
16 |
+
useCheckoutContext,
|
17 |
useEditorContext,
|
18 |
useShippingDataContext,
|
19 |
} from '@woocommerce/base-context';
|
|
|
20 |
import { decodeEntities } from '@wordpress/html-entities';
|
21 |
+
import { DISPLAY_CART_PRICES_INCLUDING_TAX } from '@woocommerce/block-settings';
|
22 |
import { Notice } from 'wordpress-components';
|
23 |
import classnames from 'classnames';
|
|
|
|
|
|
|
24 |
|
25 |
/**
|
26 |
* Internal dependencies
|
32 |
*
|
33 |
* @param {Object} option Shipping Rate.
|
34 |
*/
|
35 |
+
const renderShippingRatesControlOption = ( option ) => {
|
36 |
+
const priceWithTaxes = DISPLAY_CART_PRICES_INCLUDING_TAX
|
|
|
|
|
37 |
? parseInt( option.price, 10 ) + parseInt( option.taxes, 10 )
|
38 |
: parseInt( option.price, 10 );
|
39 |
return {
|
50 |
};
|
51 |
};
|
52 |
|
53 |
+
const ShippingOptionsStep = () => {
|
54 |
+
const { isProcessing: checkoutIsProcessing } = useCheckoutContext();
|
55 |
const { isEditor } = useEditorContext();
|
56 |
const {
|
57 |
shippingRates,
|
67 |
return (
|
68 |
<FormStep
|
69 |
id="shipping-option"
|
70 |
+
disabled={ checkoutIsProcessing }
|
71 |
className="wc-block-checkout__shipping-option"
|
72 |
title={ __( 'Shipping options', 'woo-gutenberg-products-block' ) }
|
73 |
description={
|
assets/js/blocks/cart-checkout/checkout/frontend.js
CHANGED
@@ -3,8 +3,8 @@
|
|
3 |
*/
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
import {
|
6 |
-
withStoreCartApiHydration,
|
7 |
withRestApiHydration,
|
|
|
8 |
} from '@woocommerce/block-hocs';
|
9 |
import { useStoreCart } from '@woocommerce/base-context/hooks';
|
10 |
import {
|
@@ -12,12 +12,12 @@ import {
|
|
12 |
ValidationContextProvider,
|
13 |
} from '@woocommerce/base-context';
|
14 |
import BlockErrorBoundary from '@woocommerce/base-components/block-error-boundary';
|
15 |
-
import { CURRENT_USER_IS_ADMIN } from '@woocommerce/settings';
|
|
|
16 |
import {
|
17 |
renderFrontend,
|
18 |
getValidBlockAttributes,
|
19 |
} from '@woocommerce/base-utils';
|
20 |
-
import { StoreSnackbarNoticesProvider } from '@woocommerce/base-context/providers';
|
21 |
|
22 |
/**
|
23 |
* Internal dependencies
|
@@ -28,20 +28,6 @@ import EmptyCart from './empty-cart/index.js';
|
|
28 |
|
29 |
const reloadPage = () => void window.location.reload( true );
|
30 |
|
31 |
-
const errorBoundaryProps = {
|
32 |
-
header: __( 'Something went wrong…', 'woo-gutenberg-products-block' ),
|
33 |
-
text: __(
|
34 |
-
'The checkout has encountered an unexpected error. If the error persists, please get in touch with us for help.',
|
35 |
-
'woo-gutenberg-products-block'
|
36 |
-
),
|
37 |
-
showErrorMessage: CURRENT_USER_IS_ADMIN,
|
38 |
-
button: (
|
39 |
-
<button className="wc-block-button" onClick={ reloadPage }>
|
40 |
-
{ __( 'Reload the page', 'woo-gutenberg-products-block' ) }
|
41 |
-
</button>
|
42 |
-
),
|
43 |
-
};
|
44 |
-
|
45 |
/**
|
46 |
* Wrapper component for the checkout block.
|
47 |
*
|
@@ -55,14 +41,32 @@ const CheckoutFrontend = ( props ) => {
|
|
55 |
{ ! cartIsLoading && cartItems.length === 0 ? (
|
56 |
<EmptyCart />
|
57 |
) : (
|
58 |
-
<BlockErrorBoundary
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
66 |
</BlockErrorBoundary>
|
67 |
) }
|
68 |
</>
|
@@ -76,7 +80,24 @@ const getProps = ( el ) => {
|
|
76 |
};
|
77 |
|
78 |
const getErrorBoundaryProps = () => {
|
79 |
-
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
80 |
};
|
81 |
|
82 |
renderFrontend( {
|
3 |
*/
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
import {
|
|
|
6 |
withRestApiHydration,
|
7 |
+
withStoreCartApiHydration,
|
8 |
} from '@woocommerce/block-hocs';
|
9 |
import { useStoreCart } from '@woocommerce/base-context/hooks';
|
10 |
import {
|
12 |
ValidationContextProvider,
|
13 |
} from '@woocommerce/base-context';
|
14 |
import BlockErrorBoundary from '@woocommerce/base-components/block-error-boundary';
|
15 |
+
import { CURRENT_USER_IS_ADMIN } from '@woocommerce/block-settings';
|
16 |
+
import { createInterpolateElement } from 'wordpress-element';
|
17 |
import {
|
18 |
renderFrontend,
|
19 |
getValidBlockAttributes,
|
20 |
} from '@woocommerce/base-utils';
|
|
|
21 |
|
22 |
/**
|
23 |
* Internal dependencies
|
28 |
|
29 |
const reloadPage = () => void window.location.reload( true );
|
30 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
/**
|
32 |
* Wrapper component for the checkout block.
|
33 |
*
|
41 |
{ ! cartIsLoading && cartItems.length === 0 ? (
|
42 |
<EmptyCart />
|
43 |
) : (
|
44 |
+
<BlockErrorBoundary
|
45 |
+
header={ __(
|
46 |
+
'Something went wrong…',
|
47 |
+
'woo-gutenberg-products-block'
|
48 |
+
) }
|
49 |
+
text={ createInterpolateElement(
|
50 |
+
__(
|
51 |
+
'The checkout has encountered an unexpected error. <button>Try reloading the page</button>. If the error persists, please get in touch with us so we can assist.',
|
52 |
+
'woo-gutenberg-products-block'
|
53 |
+
),
|
54 |
+
{
|
55 |
+
button: (
|
56 |
+
<button
|
57 |
+
className="wc-block-link-button"
|
58 |
+
onClick={ reloadPage }
|
59 |
+
/>
|
60 |
+
),
|
61 |
+
}
|
62 |
+
) }
|
63 |
+
showErrorMessage={ CURRENT_USER_IS_ADMIN }
|
64 |
+
>
|
65 |
+
<StoreNoticesProvider context="wc/checkout">
|
66 |
+
<ValidationContextProvider>
|
67 |
+
<Block { ...props } />
|
68 |
+
</ValidationContextProvider>
|
69 |
+
</StoreNoticesProvider>
|
70 |
</BlockErrorBoundary>
|
71 |
) }
|
72 |
</>
|
80 |
};
|
81 |
|
82 |
const getErrorBoundaryProps = () => {
|
83 |
+
return {
|
84 |
+
header: __( 'Something went wrong…', 'woo-gutenberg-products-block' ),
|
85 |
+
text: createInterpolateElement(
|
86 |
+
__(
|
87 |
+
'The checkout has encountered an unexpected error. <button>Try reloading the page</button>. If the error persists, please get in touch with us so we can assist.',
|
88 |
+
'woo-gutenberg-products-block'
|
89 |
+
),
|
90 |
+
{
|
91 |
+
button: (
|
92 |
+
<button
|
93 |
+
className="wc-block-link-button"
|
94 |
+
onClick={ reloadPage }
|
95 |
+
/>
|
96 |
+
),
|
97 |
+
}
|
98 |
+
),
|
99 |
+
showErrorMessage: CURRENT_USER_IS_ADMIN,
|
100 |
+
};
|
101 |
};
|
102 |
|
103 |
renderFrontend( {
|
assets/js/blocks/cart-checkout/checkout/sidebar/index.js
CHANGED
@@ -1,7 +1,6 @@
|
|
1 |
/**
|
2 |
* External dependencies
|
3 |
*/
|
4 |
-
|
5 |
import {
|
6 |
OrderSummary,
|
7 |
TotalsCoupon,
|
@@ -14,24 +13,23 @@ import {
|
|
14 |
TotalsFees,
|
15 |
TotalsTaxes,
|
16 |
ExperimentalOrderMeta,
|
17 |
-
ExperimentalDiscountsMeta,
|
18 |
-
TotalsWrapper,
|
19 |
} from '@woocommerce/blocks-checkout';
|
20 |
-
|
21 |
import { getCurrencyFromPriceResponse } from '@woocommerce/price-format';
|
22 |
import { useShippingDataContext } from '@woocommerce/base-context';
|
|
|
|
|
|
|
|
|
23 |
import {
|
24 |
useStoreCartCoupons,
|
25 |
useStoreCart,
|
26 |
} from '@woocommerce/base-context/hooks';
|
27 |
-
import { getSetting } from '@woocommerce/settings';
|
28 |
|
29 |
const CheckoutSidebar = ( {
|
30 |
cartCoupons = [],
|
31 |
cartItems = [],
|
32 |
cartFees = [],
|
33 |
cartTotals = {},
|
34 |
-
showRateAfterTaxName = false,
|
35 |
} ) => {
|
36 |
const {
|
37 |
applyCoupon,
|
@@ -52,63 +50,43 @@ const CheckoutSidebar = ( {
|
|
52 |
cart,
|
53 |
};
|
54 |
|
55 |
-
const discountsSlotFillProps = {
|
56 |
-
extensions,
|
57 |
-
cart,
|
58 |
-
};
|
59 |
-
|
60 |
return (
|
61 |
<>
|
62 |
-
<
|
63 |
-
|
64 |
-
|
65 |
-
<
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
|
|
|
|
|
|
73 |
values={ cartTotals }
|
|
|
74 |
/>
|
75 |
-
</TotalsWrapper>
|
76 |
-
{ getSetting( 'couponsEnabled', true ) && (
|
77 |
-
<TotalsWrapper>
|
78 |
-
<TotalsCoupon
|
79 |
-
onSubmit={ applyCoupon }
|
80 |
-
initialOpen={ false }
|
81 |
-
isLoading={ isApplyingCoupon }
|
82 |
-
/>
|
83 |
-
</TotalsWrapper>
|
84 |
-
) }
|
85 |
-
<ExperimentalDiscountsMeta.Slot { ...discountsSlotFillProps } />
|
86 |
-
{ needsShipping && (
|
87 |
-
<TotalsWrapper>
|
88 |
-
<TotalsShipping
|
89 |
-
showCalculator={ false }
|
90 |
-
showRateSelector={ false }
|
91 |
-
values={ cartTotals }
|
92 |
-
currency={ totalsCurrency }
|
93 |
-
/>
|
94 |
-
</TotalsWrapper>
|
95 |
) }
|
96 |
-
{ !
|
97 |
-
|
98 |
-
<TotalsWrapper>
|
99 |
-
<TotalsTaxes
|
100 |
-
currency={ totalsCurrency }
|
101 |
-
showRateAfterTaxName={ showRateAfterTaxName }
|
102 |
-
values={ cartTotals }
|
103 |
-
/>
|
104 |
-
</TotalsWrapper>
|
105 |
-
) }
|
106 |
-
<TotalsWrapper>
|
107 |
-
<TotalsFooterItem
|
108 |
currency={ totalsCurrency }
|
109 |
values={ cartTotals }
|
110 |
/>
|
111 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
112 |
<ExperimentalOrderMeta.Slot { ...slotFillProps } />
|
113 |
</>
|
114 |
);
|
1 |
/**
|
2 |
* External dependencies
|
3 |
*/
|
|
|
4 |
import {
|
5 |
OrderSummary,
|
6 |
TotalsCoupon,
|
13 |
TotalsFees,
|
14 |
TotalsTaxes,
|
15 |
ExperimentalOrderMeta,
|
|
|
|
|
16 |
} from '@woocommerce/blocks-checkout';
|
|
|
17 |
import { getCurrencyFromPriceResponse } from '@woocommerce/price-format';
|
18 |
import { useShippingDataContext } from '@woocommerce/base-context';
|
19 |
+
import {
|
20 |
+
COUPONS_ENABLED,
|
21 |
+
DISPLAY_CART_PRICES_INCLUDING_TAX,
|
22 |
+
} from '@woocommerce/block-settings';
|
23 |
import {
|
24 |
useStoreCartCoupons,
|
25 |
useStoreCart,
|
26 |
} from '@woocommerce/base-context/hooks';
|
|
|
27 |
|
28 |
const CheckoutSidebar = ( {
|
29 |
cartCoupons = [],
|
30 |
cartItems = [],
|
31 |
cartFees = [],
|
32 |
cartTotals = {},
|
|
|
33 |
} ) => {
|
34 |
const {
|
35 |
applyCoupon,
|
50 |
cart,
|
51 |
};
|
52 |
|
|
|
|
|
|
|
|
|
|
|
53 |
return (
|
54 |
<>
|
55 |
+
<OrderSummary cartItems={ cartItems } />
|
56 |
+
<Subtotal currency={ totalsCurrency } values={ cartTotals } />
|
57 |
+
<TotalsFees currency={ totalsCurrency } cartFees={ cartFees } />
|
58 |
+
<TotalsDiscount
|
59 |
+
cartCoupons={ cartCoupons }
|
60 |
+
currency={ totalsCurrency }
|
61 |
+
isRemovingCoupon={ isRemovingCoupon }
|
62 |
+
removeCoupon={ removeCoupon }
|
63 |
+
values={ cartTotals }
|
64 |
+
/>
|
65 |
+
{ needsShipping && (
|
66 |
+
<TotalsShipping
|
67 |
+
showCalculator={ false }
|
68 |
+
showRateSelector={ false }
|
69 |
values={ cartTotals }
|
70 |
+
currency={ totalsCurrency }
|
71 |
/>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
72 |
) }
|
73 |
+
{ ! DISPLAY_CART_PRICES_INCLUDING_TAX && (
|
74 |
+
<TotalsTaxes
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
75 |
currency={ totalsCurrency }
|
76 |
values={ cartTotals }
|
77 |
/>
|
78 |
+
) }
|
79 |
+
{ COUPONS_ENABLED && (
|
80 |
+
<TotalsCoupon
|
81 |
+
onSubmit={ applyCoupon }
|
82 |
+
initialOpen={ false }
|
83 |
+
isLoading={ isApplyingCoupon }
|
84 |
+
/>
|
85 |
+
) }
|
86 |
+
<TotalsFooterItem
|
87 |
+
currency={ totalsCurrency }
|
88 |
+
values={ cartTotals }
|
89 |
+
/>
|
90 |
<ExperimentalOrderMeta.Slot { ...slotFillProps } />
|
91 |
</>
|
92 |
);
|
assets/js/blocks/cart-checkout/checkout/sidebar/test/__snapshots__/index.js.snap
DELETED
@@ -1,167 +0,0 @@
|
|
1 |
-
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
2 |
-
|
3 |
-
exports[`Testing checkout sidebar Shows rate percentages after tax lines if the block is set to do so 1`] = `
|
4 |
-
<div>
|
5 |
-
<div
|
6 |
-
class="wc-block-components-totals-wrapper"
|
7 |
-
/>
|
8 |
-
<div
|
9 |
-
class="wc-block-components-totals-wrapper"
|
10 |
-
>
|
11 |
-
<div
|
12 |
-
class="wc-block-components-totals-item"
|
13 |
-
>
|
14 |
-
<span
|
15 |
-
class="wc-block-components-totals-item__label"
|
16 |
-
>
|
17 |
-
Subtotal
|
18 |
-
</span>
|
19 |
-
<span
|
20 |
-
class="wc-block-formatted-money-amount wc-block-components-formatted-money-amount wc-block-components-totals-item__value"
|
21 |
-
>
|
22 |
-
$24.00
|
23 |
-
</span>
|
24 |
-
<div
|
25 |
-
class="wc-block-components-totals-item__description"
|
26 |
-
/>
|
27 |
-
</div>
|
28 |
-
</div>
|
29 |
-
<div
|
30 |
-
class="wc-block-components-totals-wrapper"
|
31 |
-
>
|
32 |
-
<div
|
33 |
-
class="wc-block-components-totals-coupon wc-block-components-panel"
|
34 |
-
>
|
35 |
-
<div>
|
36 |
-
<button
|
37 |
-
aria-expanded="false"
|
38 |
-
class="wc-block-components-panel__button"
|
39 |
-
>
|
40 |
-
<svg
|
41 |
-
aria-hidden="true"
|
42 |
-
class="wc-block-components-panel__button-icon"
|
43 |
-
focusable="false"
|
44 |
-
height="24"
|
45 |
-
role="img"
|
46 |
-
viewBox="0 0 24 24"
|
47 |
-
width="24"
|
48 |
-
xmlns="http://www.w3.org/2000/svg"
|
49 |
-
>
|
50 |
-
<path
|
51 |
-
d="M17 9.4L12 14 7 9.4l-1 1.2 6 5.4 6-5.4z"
|
52 |
-
/>
|
53 |
-
</svg>
|
54 |
-
<span
|
55 |
-
aria-hidden="true"
|
56 |
-
>
|
57 |
-
Coupon code
|
58 |
-
</span>
|
59 |
-
<span
|
60 |
-
class="screen-reader-text"
|
61 |
-
>
|
62 |
-
Apply a coupon code
|
63 |
-
</span>
|
64 |
-
</button>
|
65 |
-
</div>
|
66 |
-
<div
|
67 |
-
class="wc-block-components-panel__content"
|
68 |
-
hidden=""
|
69 |
-
>
|
70 |
-
<div
|
71 |
-
class=""
|
72 |
-
>
|
73 |
-
<div
|
74 |
-
aria-hidden="false"
|
75 |
-
class=""
|
76 |
-
>
|
77 |
-
<div
|
78 |
-
class="wc-block-components-totals-coupon__content"
|
79 |
-
>
|
80 |
-
<form
|
81 |
-
class="wc-block-components-totals-coupon__form"
|
82 |
-
>
|
83 |
-
<div
|
84 |
-
class="wc-block-components-text-input wc-block-components-totals-coupon__input is-active"
|
85 |
-
>
|
86 |
-
<input
|
87 |
-
aria-describedby="wc-block-components-totals-coupon__input-0"
|
88 |
-
aria-label="Enter code"
|
89 |
-
autocapitalize="off"
|
90 |
-
autocomplete="off"
|
91 |
-
id="wc-block-components-totals-coupon__input-0"
|
92 |
-
type="text"
|
93 |
-
value=""
|
94 |
-
/>
|
95 |
-
<label
|
96 |
-
for="wc-block-components-totals-coupon__input-0"
|
97 |
-
>
|
98 |
-
Enter code
|
99 |
-
</label>
|
100 |
-
</div>
|
101 |
-
<button
|
102 |
-
class="components-button wc-block-components-button wc-block-components-totals-coupon__button"
|
103 |
-
disabled=""
|
104 |
-
type="submit"
|
105 |
-
>
|
106 |
-
<span
|
107 |
-
class="wc-block-components-button__text"
|
108 |
-
>
|
109 |
-
Apply
|
110 |
-
</span>
|
111 |
-
</button>
|
112 |
-
</form>
|
113 |
-
</div>
|
114 |
-
</div>
|
115 |
-
</div>
|
116 |
-
</div>
|
117 |
-
</div>
|
118 |
-
</div>
|
119 |
-
<div
|
120 |
-
class="wc-block-components-totals-wrapper"
|
121 |
-
>
|
122 |
-
<div
|
123 |
-
class="wc-block-components-totals-taxes"
|
124 |
-
>
|
125 |
-
<div
|
126 |
-
class="wc-block-components-totals-item wc-block-components-totals-taxes__grouped-rate"
|
127 |
-
>
|
128 |
-
<span
|
129 |
-
class="wc-block-components-totals-item__label"
|
130 |
-
>
|
131 |
-
Sales tax 20%
|
132 |
-
</span>
|
133 |
-
<span
|
134 |
-
class="wc-block-formatted-money-amount wc-block-components-formatted-money-amount wc-block-components-totals-item__value"
|
135 |
-
>
|
136 |
-
$6.00
|
137 |
-
</span>
|
138 |
-
<div
|
139 |
-
class="wc-block-components-totals-item__description"
|
140 |
-
/>
|
141 |
-
</div>
|
142 |
-
|
143 |
-
</div>
|
144 |
-
</div>
|
145 |
-
<div
|
146 |
-
class="wc-block-components-totals-wrapper"
|
147 |
-
>
|
148 |
-
<div
|
149 |
-
class="wc-block-components-totals-item wc-block-components-totals-footer-item"
|
150 |
-
>
|
151 |
-
<span
|
152 |
-
class="wc-block-components-totals-item__label"
|
153 |
-
>
|
154 |
-
Total
|
155 |
-
</span>
|
156 |
-
<span
|
157 |
-
class="wc-block-formatted-money-amount wc-block-components-formatted-money-amount wc-block-components-totals-item__value"
|
158 |
-
>
|
159 |
-
$30.00
|
160 |
-
</span>
|
161 |
-
<div
|
162 |
-
class="wc-block-components-totals-item__description"
|
163 |
-
/>
|
164 |
-
</div>
|
165 |
-
</div>
|
166 |
-
</div>
|
167 |
-
`;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/blocks/cart-checkout/checkout/sidebar/test/index.js
DELETED
@@ -1,27 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* External dependencies
|
3 |
-
*/
|
4 |
-
import { render } from '@testing-library/react';
|
5 |
-
import { previewCart } from '@woocommerce/resource-previews';
|
6 |
-
|
7 |
-
/**
|
8 |
-
* Internal dependencies
|
9 |
-
*/
|
10 |
-
import { allSettings } from '../../../../../settings/shared/settings-init';
|
11 |
-
import CheckoutSidebar from '../index';
|
12 |
-
|
13 |
-
describe( 'Testing checkout sidebar', () => {
|
14 |
-
it( 'Shows rate percentages after tax lines if the block is set to do so', async () => {
|
15 |
-
allSettings.displayCartPricesIncludingTax = false;
|
16 |
-
allSettings.displayItemizedTaxes = true;
|
17 |
-
const { totals: cartTotals, items: cartItems } = previewCart;
|
18 |
-
const { container } = render(
|
19 |
-
<CheckoutSidebar
|
20 |
-
cartItems={ cartItems }
|
21 |
-
cartTotals={ cartTotals }
|
22 |
-
showRateAfterTaxName={ true }
|
23 |
-
/>
|
24 |
-
);
|
25 |
-
expect( container ).toMatchSnapshot();
|
26 |
-
} );
|
27 |
-
} );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/blocks/cart-checkout/checkout/style.scss
CHANGED
@@ -10,11 +10,6 @@
|
|
10 |
// Required by IE11.
|
11 |
flex-basis: 0;
|
12 |
}
|
13 |
-
.wc-block-components-totals-taxes,
|
14 |
-
.wc-block-components-totals-footer-item {
|
15 |
-
margin: 0;
|
16 |
-
padding: 0;
|
17 |
-
}
|
18 |
}
|
19 |
|
20 |
.wc-block-checkout__actions {
|
10 |
// Required by IE11.
|
11 |
flex-basis: 0;
|
12 |
}
|
|
|
|
|
|
|
|
|
|
|
13 |
}
|
14 |
|
15 |
.wc-block-checkout__actions {
|
assets/js/blocks/cart-checkout/payment-methods/express-payment-methods.js
CHANGED
@@ -1,7 +1,6 @@
|
|
1 |
/**
|
2 |
* External dependencies
|
3 |
*/
|
4 |
-
import { __ } from '@wordpress/i18n';
|
5 |
import {
|
6 |
useExpressPaymentMethods,
|
7 |
usePaymentMethodInterface,
|
@@ -16,7 +15,6 @@ import {
|
|
16 |
useEditorContext,
|
17 |
usePaymentMethodDataContext,
|
18 |
} from '@woocommerce/base-context';
|
19 |
-
import deprecated from '@wordpress/deprecated';
|
20 |
|
21 |
/**
|
22 |
* Internal dependencies
|
@@ -27,7 +25,6 @@ const ExpressPaymentMethods = () => {
|
|
27 |
const { isEditor } = useEditorContext();
|
28 |
const {
|
29 |
setActivePaymentMethod,
|
30 |
-
setExpressPaymentError,
|
31 |
activePaymentMethod,
|
32 |
paymentMethodData,
|
33 |
setPaymentStatus,
|
@@ -37,11 +34,6 @@ const ExpressPaymentMethods = () => {
|
|
37 |
const previousActivePaymentMethod = useRef( activePaymentMethod );
|
38 |
const previousPaymentMethodData = useRef( paymentMethodData );
|
39 |
|
40 |
-
/**
|
41 |
-
* onExpressPaymentClick should be triggered when the express payment button is clicked.
|
42 |
-
*
|
43 |
-
* This will store the previous active payment method, set the express method as active, and set the payment status to started.
|
44 |
-
*/
|
45 |
const onExpressPaymentClick = useCallback(
|
46 |
( paymentMethodId ) => () => {
|
47 |
previousActivePaymentMethod.current = activePaymentMethod;
|
@@ -56,95 +48,32 @@ const ExpressPaymentMethods = () => {
|
|
56 |
setPaymentStatus,
|
57 |
]
|
58 |
);
|
59 |
-
|
60 |
-
/**
|
61 |
-
* onExpressPaymentClose should be triggered when the express payment process is cancelled or closed.
|
62 |
-
*
|
63 |
-
* This restores the active method and returns the state to pristine.
|
64 |
-
*/
|
65 |
const onExpressPaymentClose = useCallback( () => {
|
66 |
-
setPaymentStatus().pristine();
|
67 |
setActivePaymentMethod( previousActivePaymentMethod.current );
|
68 |
if ( previousPaymentMethodData.current.isSavedToken ) {
|
69 |
setPaymentStatus().started( previousPaymentMethodData.current );
|
70 |
}
|
71 |
}, [ setActivePaymentMethod, setPaymentStatus ] );
|
72 |
-
|
73 |
-
/**
|
74 |
-
* onExpressPaymentError should be triggered when the express payment process errors.
|
75 |
-
*
|
76 |
-
* This shows an error message then restores the active method and returns the state to pristine.
|
77 |
-
*/
|
78 |
-
const onExpressPaymentError = useCallback(
|
79 |
-
( errorMessage ) => {
|
80 |
-
setPaymentStatus().error( errorMessage );
|
81 |
-
setExpressPaymentError( errorMessage );
|
82 |
-
setActivePaymentMethod( previousActivePaymentMethod.current );
|
83 |
-
if ( previousPaymentMethodData.current.isSavedToken ) {
|
84 |
-
setPaymentStatus().started( previousPaymentMethodData.current );
|
85 |
-
}
|
86 |
-
},
|
87 |
-
[ setActivePaymentMethod, setPaymentStatus, setExpressPaymentError ]
|
88 |
-
);
|
89 |
-
|
90 |
-
/**
|
91 |
-
* Calling setExpressPaymentError directly is deprecated.
|
92 |
-
*/
|
93 |
-
const deprecatedSetExpressPaymentError = useCallback(
|
94 |
-
( errorMessage = '' ) => {
|
95 |
-
deprecated(
|
96 |
-
'Express Payment Methods should use the provided onError handler instead.',
|
97 |
-
{
|
98 |
-
alternative: 'onError',
|
99 |
-
plugin: 'woocommerce-gutenberg-products-block',
|
100 |
-
link:
|
101 |
-
'https://github.com/woocommerce/woocommerce-gutenberg-products-block/pull/4228',
|
102 |
-
}
|
103 |
-
);
|
104 |
-
if ( errorMessage ) {
|
105 |
-
onExpressPaymentError( errorMessage );
|
106 |
-
} else {
|
107 |
-
setExpressPaymentError( '' );
|
108 |
-
}
|
109 |
-
},
|
110 |
-
[ setExpressPaymentError, onExpressPaymentError ]
|
111 |
-
);
|
112 |
-
|
113 |
-
/**
|
114 |
-
* @todo Find a way to Memoize Express Payment Method Content
|
115 |
-
*
|
116 |
-
* Payment method content could potentially become a bottleneck if lots of logic is ran in the content component. It
|
117 |
-
* Currently re-renders excessively but is not easy to useMemo because paymentMethodInterface could become stale.
|
118 |
-
* paymentMethodInterface itself also updates on most renders.
|
119 |
-
*/
|
120 |
-
const entries = Object.entries( paymentMethods );
|
121 |
const content =
|
122 |
-
|
123 |
-
|
124 |
const expressPaymentMethod = isEditor
|
125 |
-
?
|
126 |
-
:
|
127 |
return isValidElement( expressPaymentMethod ) ? (
|
128 |
<li key={ id } id={ `express-payment-method-${ id }` }>
|
129 |
{ cloneElement( expressPaymentMethod, {
|
130 |
...paymentMethodInterface,
|
131 |
onClick: onExpressPaymentClick( id ),
|
132 |
onClose: onExpressPaymentClose,
|
133 |
-
onError: onExpressPaymentError,
|
134 |
-
setExpressPaymentError: deprecatedSetExpressPaymentError,
|
135 |
} ) }
|
136 |
</li>
|
137 |
) : null;
|
138 |
} )
|
139 |
) : (
|
140 |
-
<li key="noneRegistered">
|
141 |
-
{ __(
|
142 |
-
'No registered Payment Methods',
|
143 |
-
'woo-gutenberg-products-block'
|
144 |
-
) }
|
145 |
-
</li>
|
146 |
);
|
147 |
-
|
148 |
return (
|
149 |
<PaymentMethodErrorBoundary isEditor={ isEditor }>
|
150 |
<ul className="wc-block-components-express-payment__event-buttons">
|
1 |
/**
|
2 |
* External dependencies
|
3 |
*/
|
|
|
4 |
import {
|
5 |
useExpressPaymentMethods,
|
6 |
usePaymentMethodInterface,
|
15 |
useEditorContext,
|
16 |
usePaymentMethodDataContext,
|
17 |
} from '@woocommerce/base-context';
|
|
|
18 |
|
19 |
/**
|
20 |
* Internal dependencies
|
25 |
const { isEditor } = useEditorContext();
|
26 |
const {
|
27 |
setActivePaymentMethod,
|
|
|
28 |
activePaymentMethod,
|
29 |
paymentMethodData,
|
30 |
setPaymentStatus,
|
34 |
const previousActivePaymentMethod = useRef( activePaymentMethod );
|
35 |
const previousPaymentMethodData = useRef( paymentMethodData );
|
36 |
|
|
|
|
|
|
|
|
|
|
|
37 |
const onExpressPaymentClick = useCallback(
|
38 |
( paymentMethodId ) => () => {
|
39 |
previousActivePaymentMethod.current = activePaymentMethod;
|
48 |
setPaymentStatus,
|
49 |
]
|
50 |
);
|
|
|
|
|
|
|
|
|
|
|
|
|
51 |
const onExpressPaymentClose = useCallback( () => {
|
|
|
52 |
setActivePaymentMethod( previousActivePaymentMethod.current );
|
53 |
if ( previousPaymentMethodData.current.isSavedToken ) {
|
54 |
setPaymentStatus().started( previousPaymentMethodData.current );
|
55 |
}
|
56 |
}, [ setActivePaymentMethod, setPaymentStatus ] );
|
57 |
+
const paymentMethodIds = Object.keys( paymentMethods );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
58 |
const content =
|
59 |
+
paymentMethodIds.length > 0 ? (
|
60 |
+
paymentMethodIds.map( ( id ) => {
|
61 |
const expressPaymentMethod = isEditor
|
62 |
+
? paymentMethods[ id ].edit
|
63 |
+
: paymentMethods[ id ].content;
|
64 |
return isValidElement( expressPaymentMethod ) ? (
|
65 |
<li key={ id } id={ `express-payment-method-${ id }` }>
|
66 |
{ cloneElement( expressPaymentMethod, {
|
67 |
...paymentMethodInterface,
|
68 |
onClick: onExpressPaymentClick( id ),
|
69 |
onClose: onExpressPaymentClose,
|
|
|
|
|
70 |
} ) }
|
71 |
</li>
|
72 |
) : null;
|
73 |
} )
|
74 |
) : (
|
75 |
+
<li key="noneRegistered">No registered Payment Methods</li>
|
|
|
|
|
|
|
|
|
|
|
76 |
);
|
|
|
77 |
return (
|
78 |
<PaymentMethodErrorBoundary isEditor={ isEditor }>
|
79 |
<ul className="wc-block-components-express-payment__event-buttons">
|
assets/js/blocks/cart-checkout/payment-methods/express-payment/cart-express-payment.js
CHANGED
@@ -6,12 +6,7 @@ import {
|
|
6 |
useEmitResponse,
|
7 |
useExpressPaymentMethods,
|
8 |
} from '@woocommerce/base-context/hooks';
|
9 |
-
import {
|
10 |
-
StoreNoticesProvider,
|
11 |
-
useCheckoutContext,
|
12 |
-
usePaymentMethodDataContext,
|
13 |
-
} from '@woocommerce/base-context';
|
14 |
-
import LoadingMask from '@woocommerce/base-components/loading-mask';
|
15 |
|
16 |
/**
|
17 |
* Internal dependencies
|
@@ -22,15 +17,6 @@ import './style.scss';
|
|
22 |
const CartExpressPayment = () => {
|
23 |
const { paymentMethods, isInitialized } = useExpressPaymentMethods();
|
24 |
const { noticeContexts } = useEmitResponse();
|
25 |
-
const {
|
26 |
-
isCalculating,
|
27 |
-
isProcessing,
|
28 |
-
isAfterProcessing,
|
29 |
-
isBeforeProcessing,
|
30 |
-
isComplete,
|
31 |
-
hasError,
|
32 |
-
} = useCheckoutContext();
|
33 |
-
const { currentStatus: paymentStatus } = usePaymentMethodDataContext();
|
34 |
|
35 |
if (
|
36 |
! isInitialized ||
|
@@ -39,32 +25,17 @@ const CartExpressPayment = () => {
|
|
39 |
return null;
|
40 |
}
|
41 |
|
42 |
-
// Set loading state for express payment methods when payment or checkout is in progress.
|
43 |
-
const checkoutProcessing =
|
44 |
-
isProcessing ||
|
45 |
-
isAfterProcessing ||
|
46 |
-
isBeforeProcessing ||
|
47 |
-
( isComplete && ! hasError );
|
48 |
-
|
49 |
return (
|
50 |
<>
|
51 |
-
<
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
<div className="wc-block-components-express-payment wc-block-components-express-payment--cart">
|
59 |
-
<div className="wc-block-components-express-payment__content">
|
60 |
-
<StoreNoticesProvider
|
61 |
-
context={ noticeContexts.EXPRESS_PAYMENTS }
|
62 |
-
>
|
63 |
-
<ExpressPaymentMethods />
|
64 |
-
</StoreNoticesProvider>
|
65 |
-
</div>
|
66 |
</div>
|
67 |
-
</
|
68 |
<div className="wc-block-components-express-payment-continue-rule wc-block-components-express-payment-continue-rule--cart">
|
69 |
{ /* translators: Shown in the Cart block between the express payment methods and the Proceed to Checkout button */ }
|
70 |
{ __( 'Or', 'woo-gutenberg-products-block' ) }
|
6 |
useEmitResponse,
|
7 |
useExpressPaymentMethods,
|
8 |
} from '@woocommerce/base-context/hooks';
|
9 |
+
import { StoreNoticesProvider } from '@woocommerce/base-context';
|
|
|
|
|
|
|
|
|
|
|
10 |
|
11 |
/**
|
12 |
* Internal dependencies
|
17 |
const CartExpressPayment = () => {
|
18 |
const { paymentMethods, isInitialized } = useExpressPaymentMethods();
|
19 |
const { noticeContexts } = useEmitResponse();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20 |
|
21 |
if (
|
22 |
! isInitialized ||
|
25 |
return null;
|
26 |
}
|
27 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
28 |
return (
|
29 |
<>
|
30 |
+
<div className="wc-block-components-express-payment wc-block-components-express-payment--cart">
|
31 |
+
<div className="wc-block-components-express-payment__content">
|
32 |
+
<StoreNoticesProvider
|
33 |
+
context={ noticeContexts.EXPRESS_PAYMENTS }
|
34 |
+
>
|
35 |
+
<ExpressPaymentMethods />
|
36 |
+
</StoreNoticesProvider>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
37 |
</div>
|
38 |
+
</div>
|
39 |
<div className="wc-block-components-express-payment-continue-rule wc-block-components-express-payment-continue-rule--cart">
|
40 |
{ /* translators: Shown in the Cart block between the express payment methods and the Proceed to Checkout button */ }
|
41 |
{ __( 'Or', 'woo-gutenberg-products-block' ) }
|
assets/js/blocks/cart-checkout/payment-methods/express-payment/checkout-express-payment.js
CHANGED
@@ -8,13 +8,10 @@ import {
|
|
8 |
} from '@woocommerce/base-context/hooks';
|
9 |
import {
|
10 |
StoreNoticesProvider,
|
11 |
-
useCheckoutContext,
|
12 |
-
usePaymentMethodDataContext,
|
13 |
useEditorContext,
|
14 |
} from '@woocommerce/base-context';
|
15 |
import Title from '@woocommerce/base-components/title';
|
16 |
-
import
|
17 |
-
import { CURRENT_USER_IS_ADMIN } from '@woocommerce/settings';
|
18 |
|
19 |
/**
|
20 |
* Internal dependencies
|
@@ -23,15 +20,6 @@ import ExpressPaymentMethods from '../express-payment-methods';
|
|
23 |
import './style.scss';
|
24 |
|
25 |
const CheckoutExpressPayment = () => {
|
26 |
-
const {
|
27 |
-
isCalculating,
|
28 |
-
isProcessing,
|
29 |
-
isAfterProcessing,
|
30 |
-
isBeforeProcessing,
|
31 |
-
isComplete,
|
32 |
-
hasError,
|
33 |
-
} = useCheckoutContext();
|
34 |
-
const { currentStatus: paymentStatus } = usePaymentMethodDataContext();
|
35 |
const { paymentMethods, isInitialized } = useExpressPaymentMethods();
|
36 |
const { isEditor } = useEditorContext();
|
37 |
const { noticeContexts } = useEmitResponse();
|
@@ -52,49 +40,34 @@ const CheckoutExpressPayment = () => {
|
|
52 |
return null;
|
53 |
}
|
54 |
|
55 |
-
// Set loading state for express payment methods when payment or checkout is in progress.
|
56 |
-
const checkoutProcessing =
|
57 |
-
isProcessing ||
|
58 |
-
isAfterProcessing ||
|
59 |
-
isBeforeProcessing ||
|
60 |
-
( isComplete && ! hasError );
|
61 |
-
|
62 |
return (
|
63 |
<>
|
64 |
-
<
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
|
|
|
|
|
|
|
|
77 |
{ __(
|
78 |
-
'
|
79 |
'woo-gutenberg-products-block'
|
80 |
) }
|
81 |
-
</
|
82 |
-
|
83 |
-
|
84 |
-
<StoreNoticesProvider
|
85 |
-
context={ noticeContexts.EXPRESS_PAYMENTS }
|
86 |
-
>
|
87 |
-
<p>
|
88 |
-
{ __(
|
89 |
-
'In a hurry? Use one of our express checkout options below:',
|
90 |
-
'woo-gutenberg-products-block'
|
91 |
-
) }
|
92 |
-
</p>
|
93 |
-
<ExpressPaymentMethods />
|
94 |
-
</StoreNoticesProvider>
|
95 |
-
</div>
|
96 |
</div>
|
97 |
-
</
|
98 |
<div className="wc-block-components-express-payment-continue-rule wc-block-components-express-payment-continue-rule--checkout">
|
99 |
{ __( 'Or continue below', 'woo-gutenberg-products-block' ) }
|
100 |
</div>
|
8 |
} from '@woocommerce/base-context/hooks';
|
9 |
import {
|
10 |
StoreNoticesProvider,
|
|
|
|
|
11 |
useEditorContext,
|
12 |
} from '@woocommerce/base-context';
|
13 |
import Title from '@woocommerce/base-components/title';
|
14 |
+
import { CURRENT_USER_IS_ADMIN } from '@woocommerce/block-settings';
|
|
|
15 |
|
16 |
/**
|
17 |
* Internal dependencies
|
20 |
import './style.scss';
|
21 |
|
22 |
const CheckoutExpressPayment = () => {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
23 |
const { paymentMethods, isInitialized } = useExpressPaymentMethods();
|
24 |
const { isEditor } = useEditorContext();
|
25 |
const { noticeContexts } = useEmitResponse();
|
40 |
return null;
|
41 |
}
|
42 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
43 |
return (
|
44 |
<>
|
45 |
+
<div className="wc-block-components-express-payment wc-block-components-express-payment--checkout">
|
46 |
+
<div className="wc-block-components-express-payment__title-container">
|
47 |
+
<Title
|
48 |
+
className="wc-block-components-express-payment__title"
|
49 |
+
headingLevel="2"
|
50 |
+
>
|
51 |
+
{ __(
|
52 |
+
'Express checkout',
|
53 |
+
'woo-gutenberg-products-block'
|
54 |
+
) }
|
55 |
+
</Title>
|
56 |
+
</div>
|
57 |
+
<div className="wc-block-components-express-payment__content">
|
58 |
+
<StoreNoticesProvider
|
59 |
+
context={ noticeContexts.EXPRESS_PAYMENTS }
|
60 |
+
>
|
61 |
+
<p>
|
62 |
{ __(
|
63 |
+
'In a hurry? Use one of our express checkout options below:',
|
64 |
'woo-gutenberg-products-block'
|
65 |
) }
|
66 |
+
</p>
|
67 |
+
<ExpressPaymentMethods />
|
68 |
+
</StoreNoticesProvider>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
69 |
</div>
|
70 |
+
</div>
|
71 |
<div className="wc-block-components-express-payment-continue-rule wc-block-components-express-payment-continue-rule--checkout">
|
72 |
{ __( 'Or continue below', 'woo-gutenberg-products-block' ) }
|
73 |
</div>
|
assets/js/blocks/cart-checkout/payment-methods/payment-method-error-boundary.js
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
import { Component } from 'react';
|
6 |
import PropTypes from 'prop-types';
|
7 |
-
import { CURRENT_USER_IS_ADMIN } from '@woocommerce/settings';
|
8 |
import { StoreNoticesContainer } from '@woocommerce/base-context';
|
9 |
|
10 |
class PaymentMethodErrorBoundary extends Component {
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
import { Component } from 'react';
|
6 |
import PropTypes from 'prop-types';
|
7 |
+
import { CURRENT_USER_IS_ADMIN } from '@woocommerce/block-settings';
|
8 |
import { StoreNoticesContainer } from '@woocommerce/base-context';
|
9 |
|
10 |
class PaymentMethodErrorBoundary extends Component {
|
assets/js/blocks/cart-checkout/payment-methods/payment-method-options.js
CHANGED
@@ -30,7 +30,7 @@ const PaymentMethodOptions = () => {
|
|
30 |
setActivePaymentMethod,
|
31 |
activeSavedToken,
|
32 |
setActiveSavedToken,
|
33 |
-
|
34 |
customerPaymentMethods,
|
35 |
} = usePaymentMethodDataContext();
|
36 |
const { paymentMethods } = usePaymentMethods();
|
@@ -38,6 +38,9 @@ const PaymentMethodOptions = () => {
|
|
38 |
activePaymentMethod,
|
39 |
...paymentMethodInterface
|
40 |
} = usePaymentMethodInterface();
|
|
|
|
|
|
|
41 |
const { noticeContexts } = useEmitResponse();
|
42 |
const { removeNotice } = useStoreNotices();
|
43 |
const { isEditor } = useEditorContext();
|
@@ -79,7 +82,7 @@ const PaymentMethodOptions = () => {
|
|
79 |
'disable-radio-control': isSinglePaymentMethod,
|
80 |
} );
|
81 |
|
82 |
-
return
|
83 |
<RadioControlAccordion
|
84 |
id={ 'wc-payment-method-options' }
|
85 |
className={ singleOptionClass }
|
30 |
setActivePaymentMethod,
|
31 |
activeSavedToken,
|
32 |
setActiveSavedToken,
|
33 |
+
expressPaymentMethods,
|
34 |
customerPaymentMethods,
|
35 |
} = usePaymentMethodDataContext();
|
36 |
const { paymentMethods } = usePaymentMethods();
|
38 |
activePaymentMethod,
|
39 |
...paymentMethodInterface
|
40 |
} = usePaymentMethodInterface();
|
41 |
+
const expressPaymentMethodActive = Object.keys(
|
42 |
+
expressPaymentMethods
|
43 |
+
).includes( activePaymentMethod );
|
44 |
const { noticeContexts } = useEmitResponse();
|
45 |
const { removeNotice } = useStoreNotices();
|
46 |
const { isEditor } = useEditorContext();
|
82 |
'disable-radio-control': isSinglePaymentMethod,
|
83 |
} );
|
84 |
|
85 |
+
return expressPaymentMethodActive ? null : (
|
86 |
<RadioControlAccordion
|
87 |
id={ 'wc-payment-method-options' }
|
88 |
className={ singleOptionClass }
|
assets/js/blocks/featured-category/block.js
CHANGED
@@ -26,7 +26,7 @@ import {
|
|
26 |
import classnames from 'classnames';
|
27 |
import { compose } from '@wordpress/compose';
|
28 |
import PropTypes from 'prop-types';
|
29 |
-
import {
|
30 |
import { Icon, folderStarred } from '@woocommerce/icons';
|
31 |
import ProductCategoryControl from '@woocommerce/editor-components/product-category-control';
|
32 |
import ErrorPlaceholder from '@woocommerce/editor-components/error-placeholder';
|
@@ -303,7 +303,7 @@ const FeaturedCategory = ( {
|
|
303 |
<ResizableBox
|
304 |
className={ classes }
|
305 |
size={ { height } }
|
306 |
-
minHeight={
|
307 |
enable={ { bottom: true } }
|
308 |
onResizeStop={ onResizeStop }
|
309 |
style={ style }
|
26 |
import classnames from 'classnames';
|
27 |
import { compose } from '@wordpress/compose';
|
28 |
import PropTypes from 'prop-types';
|
29 |
+
import { MIN_HEIGHT } from '@woocommerce/block-settings';
|
30 |
import { Icon, folderStarred } from '@woocommerce/icons';
|
31 |
import ProductCategoryControl from '@woocommerce/editor-components/product-category-control';
|
32 |
import ErrorPlaceholder from '@woocommerce/editor-components/error-placeholder';
|
303 |
<ResizableBox
|
304 |
className={ classes }
|
305 |
size={ { height } }
|
306 |
+
minHeight={ MIN_HEIGHT }
|
307 |
enable={ { bottom: true } }
|
308 |
onResizeStop={ onResizeStop }
|
309 |
style={ style }
|
assets/js/blocks/featured-category/example.js
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
/**
|
2 |
* External dependencies
|
3 |
*/
|
4 |
-
import {
|
5 |
import { previewCategories } from '@woocommerce/resource-previews';
|
6 |
|
7 |
export const example = {
|
@@ -9,7 +9,7 @@ export const example = {
|
|
9 |
contentAlign: 'center',
|
10 |
dimRatio: 50,
|
11 |
editMode: false,
|
12 |
-
height:
|
13 |
mediaSrc: '',
|
14 |
showDesc: true,
|
15 |
categoryId: 'preview',
|
1 |
/**
|
2 |
* External dependencies
|
3 |
*/
|
4 |
+
import { DEFAULT_HEIGHT } from '@woocommerce/block-settings';
|
5 |
import { previewCategories } from '@woocommerce/resource-previews';
|
6 |
|
7 |
export const example = {
|
9 |
contentAlign: 'center',
|
10 |
dimRatio: 50,
|
11 |
editMode: false,
|
12 |
+
height: DEFAULT_HEIGHT,
|
13 |
mediaSrc: '',
|
14 |
showDesc: true,
|
15 |
categoryId: 'preview',
|
assets/js/blocks/featured-category/index.js
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
import { InnerBlocks } from '@wordpress/block-editor';
|
6 |
import { registerBlockType } from '@wordpress/blocks';
|
7 |
-
import {
|
8 |
import { Icon, folderStarred } from '@woocommerce/icons';
|
9 |
|
10 |
/**
|
@@ -72,7 +72,7 @@ registerBlockType( 'woocommerce/featured-category', {
|
|
72 |
*/
|
73 |
height: {
|
74 |
type: 'number',
|
75 |
-
default:
|
76 |
},
|
77 |
|
78 |
/**
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
import { InnerBlocks } from '@wordpress/block-editor';
|
6 |
import { registerBlockType } from '@wordpress/blocks';
|
7 |
+
import { DEFAULT_HEIGHT } from '@woocommerce/block-settings';
|
8 |
import { Icon, folderStarred } from '@woocommerce/icons';
|
9 |
|
10 |
/**
|
72 |
*/
|
73 |
height: {
|
74 |
type: 'number',
|
75 |
+
default: DEFAULT_HEIGHT,
|
76 |
},
|
77 |
|
78 |
/**
|
assets/js/blocks/featured-product/block.js
CHANGED
@@ -30,7 +30,7 @@ import { Component } from '@wordpress/element';
|
|
30 |
import { compose, createHigherOrderComponent } from '@wordpress/compose';
|
31 |
import { isEmpty } from 'lodash';
|
32 |
import PropTypes from 'prop-types';
|
33 |
-
import {
|
34 |
import ProductControl from '@woocommerce/editor-components/product-control';
|
35 |
import ErrorPlaceholder from '@woocommerce/editor-components/error-placeholder';
|
36 |
import { withProduct } from '@woocommerce/block-hocs';
|
@@ -296,7 +296,7 @@ const FeaturedProduct = ( {
|
|
296 |
<ResizableBox
|
297 |
className={ classes }
|
298 |
size={ { height } }
|
299 |
-
minHeight={
|
300 |
enable={ { bottom: true } }
|
301 |
onResizeStop={ onResizeStop }
|
302 |
style={ style }
|
30 |
import { compose, createHigherOrderComponent } from '@wordpress/compose';
|
31 |
import { isEmpty } from 'lodash';
|
32 |
import PropTypes from 'prop-types';
|
33 |
+
import { MIN_HEIGHT } from '@woocommerce/block-settings';
|
34 |
import ProductControl from '@woocommerce/editor-components/product-control';
|
35 |
import ErrorPlaceholder from '@woocommerce/editor-components/error-placeholder';
|
36 |
import { withProduct } from '@woocommerce/block-hocs';
|
296 |
<ResizableBox
|
297 |
className={ classes }
|
298 |
size={ { height } }
|
299 |
+
minHeight={ MIN_HEIGHT }
|
300 |
enable={ { bottom: true } }
|
301 |
onResizeStop={ onResizeStop }
|
302 |
style={ style }
|
assets/js/blocks/featured-product/example.js
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
/**
|
2 |
* External dependencies
|
3 |
*/
|
4 |
-
import {
|
5 |
import { previewProducts } from '@woocommerce/resource-previews';
|
6 |
|
7 |
export const example = {
|
@@ -9,7 +9,7 @@ export const example = {
|
|
9 |
contentAlign: 'center',
|
10 |
dimRatio: 50,
|
11 |
editMode: false,
|
12 |
-
height:
|
13 |
mediaSrc: '',
|
14 |
showDesc: true,
|
15 |
productId: 'preview',
|
1 |
/**
|
2 |
* External dependencies
|
3 |
*/
|
4 |
+
import { DEFAULT_HEIGHT } from '@woocommerce/block-settings';
|
5 |
import { previewProducts } from '@woocommerce/resource-previews';
|
6 |
|
7 |
export const example = {
|
9 |
contentAlign: 'center',
|
10 |
dimRatio: 50,
|
11 |
editMode: false,
|
12 |
+
height: DEFAULT_HEIGHT,
|
13 |
mediaSrc: '',
|
14 |
showDesc: true,
|
15 |
productId: 'preview',
|
assets/js/blocks/featured-product/index.js
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
import { InnerBlocks } from '@wordpress/block-editor';
|
6 |
import { registerBlockType } from '@wordpress/blocks';
|
7 |
-
import {
|
8 |
import { Icon, star } from '@woocommerce/icons';
|
9 |
|
10 |
/**
|
@@ -72,7 +72,7 @@ registerBlockType( 'woocommerce/featured-product', {
|
|
72 |
*/
|
73 |
height: {
|
74 |
type: 'number',
|
75 |
-
default:
|
76 |
},
|
77 |
|
78 |
/**
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
import { InnerBlocks } from '@wordpress/block-editor';
|
6 |
import { registerBlockType } from '@wordpress/blocks';
|
7 |
+
import { DEFAULT_HEIGHT } from '@woocommerce/block-settings';
|
8 |
import { Icon, star } from '@woocommerce/icons';
|
9 |
|
10 |
/**
|
72 |
*/
|
73 |
height: {
|
74 |
type: 'number',
|
75 |
+
default: DEFAULT_HEIGHT,
|
76 |
},
|
77 |
|
78 |
/**
|
assets/js/blocks/handpicked-products/block.js
CHANGED
@@ -16,7 +16,7 @@ import {
|
|
16 |
} from '@wordpress/components';
|
17 |
import { Component } from '@wordpress/element';
|
18 |
import PropTypes from 'prop-types';
|
19 |
-
import {
|
20 |
import GridContentControl from '@woocommerce/editor-components/grid-content-control';
|
21 |
import ProductsControl from '@woocommerce/editor-components/products-control';
|
22 |
import ProductOrderbyControl from '@woocommerce/editor-components/product-orderby-control';
|
@@ -51,8 +51,8 @@ class ProductsBlock extends Component {
|
|
51 |
onChange={ ( value ) =>
|
52 |
setAttributes( { columns: value } )
|
53 |
}
|
54 |
-
min={
|
55 |
-
max={
|
56 |
/>
|
57 |
<ToggleControl
|
58 |
label={ __(
|
@@ -106,7 +106,6 @@ class ProductsBlock extends Component {
|
|
106 |
const ids = value.map( ( { id } ) => id );
|
107 |
setAttributes( { products: ids } );
|
108 |
} }
|
109 |
-
isCompact={ true }
|
110 |
/>
|
111 |
</PanelBody>
|
112 |
</InspectorControls>
|
16 |
} from '@wordpress/components';
|
17 |
import { Component } from '@wordpress/element';
|
18 |
import PropTypes from 'prop-types';
|
19 |
+
import { MAX_COLUMNS, MIN_COLUMNS } from '@woocommerce/block-settings';
|
20 |
import GridContentControl from '@woocommerce/editor-components/grid-content-control';
|
21 |
import ProductsControl from '@woocommerce/editor-components/products-control';
|
22 |
import ProductOrderbyControl from '@woocommerce/editor-components/product-orderby-control';
|
51 |
onChange={ ( value ) =>
|
52 |
setAttributes( { columns: value } )
|
53 |
}
|
54 |
+
min={ MIN_COLUMNS }
|
55 |
+
max={ MAX_COLUMNS }
|
56 |
/>
|
57 |
<ToggleControl
|
58 |
label={ __(
|
106 |
const ids = value.map( ( { id } ) => id );
|
107 |
setAttributes( { products: ids } );
|
108 |
} }
|
|
|
109 |
/>
|
110 |
</PanelBody>
|
111 |
</InspectorControls>
|
assets/js/blocks/handpicked-products/index.js
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
*/
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
import { registerBlockType } from '@wordpress/blocks';
|
6 |
-
import {
|
7 |
import { Icon, widgets } from '@woocommerce/icons';
|
8 |
|
9 |
/**
|
@@ -49,7 +49,7 @@ registerBlockType( 'woocommerce/handpicked-products', {
|
|
49 |
*/
|
50 |
columns: {
|
51 |
type: 'number',
|
52 |
-
default:
|
53 |
},
|
54 |
|
55 |
/**
|
3 |
*/
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
import { registerBlockType } from '@wordpress/blocks';
|
6 |
+
import { DEFAULT_COLUMNS } from '@woocommerce/block-settings';
|
7 |
import { Icon, widgets } from '@woocommerce/icons';
|
8 |
|
9 |
/**
|
49 |
*/
|
50 |
columns: {
|
51 |
type: 'number',
|
52 |
+
default: DEFAULT_COLUMNS,
|
53 |
},
|
54 |
|
55 |
/**
|
assets/js/blocks/price-filter/edit.js
CHANGED
@@ -10,8 +10,8 @@ import {
|
|
10 |
ToggleControl,
|
11 |
Button,
|
12 |
} from '@wordpress/components';
|
|
|
13 |
import { getAdminLink } from '@woocommerce/settings';
|
14 |
-
import { blocksConfig } from '@woocommerce/block-settings';
|
15 |
import HeadingToolbar from '@woocommerce/editor-components/heading-toolbar';
|
16 |
import BlockTitle from '@woocommerce/editor-components/block-title';
|
17 |
import ToggleButtonControl from '@woocommerce/editor-components/toggle-button-control';
|
@@ -152,7 +152,7 @@ export default function ( { attributes, setAttributes } ) {
|
|
152 |
|
153 |
return (
|
154 |
<>
|
155 |
-
{
|
156 |
noProductsPlaceholder()
|
157 |
) : (
|
158 |
<div className={ className }>
|
10 |
ToggleControl,
|
11 |
Button,
|
12 |
} from '@wordpress/components';
|
13 |
+
import { PRODUCT_COUNT } from '@woocommerce/block-settings';
|
14 |
import { getAdminLink } from '@woocommerce/settings';
|
|
|
15 |
import HeadingToolbar from '@woocommerce/editor-components/heading-toolbar';
|
16 |
import BlockTitle from '@woocommerce/editor-components/block-title';
|
17 |
import ToggleButtonControl from '@woocommerce/editor-components/toggle-button-control';
|
152 |
|
153 |
return (
|
154 |
<>
|
155 |
+
{ PRODUCT_COUNT === 0 ? (
|
156 |
noProductsPlaceholder()
|
157 |
) : (
|
158 |
<div className={ className }>
|
assets/js/blocks/product-best-sellers/block.js
CHANGED
@@ -11,7 +11,6 @@ import GridContentControl from '@woocommerce/editor-components/grid-content-cont
|
|
11 |
import GridLayoutControl from '@woocommerce/editor-components/grid-layout-control';
|
12 |
import ProductCategoryControl from '@woocommerce/editor-components/product-category-control';
|
13 |
import { gridBlockPreview } from '@woocommerce/resource-previews';
|
14 |
-
import { getSetting } from '@woocommerce/settings';
|
15 |
|
16 |
/**
|
17 |
* Component to handle edit mode of "Best Selling Products".
|
@@ -39,10 +38,6 @@ class ProductBestSellersBlock extends Component {
|
|
39 |
rows={ rows }
|
40 |
alignButtons={ alignButtons }
|
41 |
setAttributes={ setAttributes }
|
42 |
-
minColumns={ getSetting( 'min_columns', 1 ) }
|
43 |
-
maxColumns={ getSetting( 'max_columns', 6 ) }
|
44 |
-
minRows={ getSetting( 'min_rows', 1 ) }
|
45 |
-
maxRows={ getSetting( 'max_rows', 6 ) }
|
46 |
/>
|
47 |
</PanelBody>
|
48 |
<PanelBody
|
11 |
import GridLayoutControl from '@woocommerce/editor-components/grid-layout-control';
|
12 |
import ProductCategoryControl from '@woocommerce/editor-components/product-category-control';
|
13 |
import { gridBlockPreview } from '@woocommerce/resource-previews';
|
|
|
14 |
|
15 |
/**
|
16 |
* Component to handle edit mode of "Best Selling Products".
|
38 |
rows={ rows }
|
39 |
alignButtons={ alignButtons }
|
40 |
setAttributes={ setAttributes }
|
|
|
|
|
|
|
|
|
41 |
/>
|
42 |
</PanelBody>
|
43 |
<PanelBody
|
assets/js/blocks/product-categories/block.js
CHANGED
@@ -5,12 +5,7 @@ import { __ } from '@wordpress/i18n';
|
|
5 |
import { InspectorControls } from '@wordpress/block-editor';
|
6 |
import ServerSideRender from '@wordpress/server-side-render';
|
7 |
import PropTypes from 'prop-types';
|
8 |
-
import {
|
9 |
-
Disabled,
|
10 |
-
PanelBody,
|
11 |
-
ToggleControl,
|
12 |
-
Placeholder,
|
13 |
-
} from '@wordpress/components';
|
14 |
import { Icon, list } from '@woocommerce/icons';
|
15 |
import ToggleButtonControl from '@woocommerce/editor-components/toggle-button-control';
|
16 |
|
@@ -186,13 +181,11 @@ const ProductCategoriesBlock = ( { attributes, setAttributes, name } ) => {
|
|
186 |
return (
|
187 |
<>
|
188 |
{ getInspectorControls() }
|
189 |
-
<
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
/>
|
195 |
-
</Disabled>
|
196 |
</>
|
197 |
);
|
198 |
};
|
5 |
import { InspectorControls } from '@wordpress/block-editor';
|
6 |
import ServerSideRender from '@wordpress/server-side-render';
|
7 |
import PropTypes from 'prop-types';
|
8 |
+
import { PanelBody, ToggleControl, Placeholder } from '@wordpress/components';
|
|
|
|
|
|
|
|
|
|
|
9 |
import { Icon, list } from '@woocommerce/icons';
|
10 |
import ToggleButtonControl from '@woocommerce/editor-components/toggle-button-control';
|
11 |
|
181 |
return (
|
182 |
<>
|
183 |
{ getInspectorControls() }
|
184 |
+
<ServerSideRender
|
185 |
+
block={ name }
|
186 |
+
attributes={ attributes }
|
187 |
+
EmptyResponsePlaceholder={ EmptyPlaceholder }
|
188 |
+
/>
|
|
|
|
|
189 |
</>
|
190 |
);
|
191 |
};
|
assets/js/blocks/product-categories/index.js
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
-
import {
|
6 |
import { Icon, list } from '@woocommerce/icons';
|
7 |
|
8 |
/**
|
@@ -83,26 +83,6 @@ registerBlockType( 'woocommerce/product-categories', {
|
|
83 |
},
|
84 |
},
|
85 |
|
86 |
-
transforms: {
|
87 |
-
from: [
|
88 |
-
{
|
89 |
-
type: 'block',
|
90 |
-
blocks: [ 'core/legacy-widget' ],
|
91 |
-
// We can't transform if raw instance isn't shown in the REST API.
|
92 |
-
isMatch: ( { idBase, instance } ) =>
|
93 |
-
idBase === 'woocommerce_product_categories' &&
|
94 |
-
!! instance?.raw,
|
95 |
-
transform: ( { instance } ) =>
|
96 |
-
createBlock( 'woocommerce/product-categories', {
|
97 |
-
hasCount: !! instance.raw.count,
|
98 |
-
hasEmpty: ! instance.raw.hide_empty,
|
99 |
-
isDropdown: !! instance.raw.dropdown,
|
100 |
-
isHierarchical: !! instance.raw.hierarchical,
|
101 |
-
} ),
|
102 |
-
},
|
103 |
-
],
|
104 |
-
},
|
105 |
-
|
106 |
deprecated: [
|
107 |
{
|
108 |
// Deprecate HTML save method in favor of dynamic rendering.
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
+
import { registerBlockType } from '@wordpress/blocks';
|
6 |
import { Icon, list } from '@woocommerce/icons';
|
7 |
|
8 |
/**
|
83 |
},
|
84 |
},
|
85 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
86 |
deprecated: [
|
87 |
{
|
88 |
// Deprecate HTML save method in favor of dynamic rendering.
|
assets/js/blocks/product-categories/style.scss
CHANGED
@@ -36,10 +36,7 @@
|
|
36 |
border: 1px solid #eee;
|
37 |
|
38 |
img {
|
39 |
-
display: block;
|
40 |
-
height: auto;
|
41 |
margin: 0;
|
42 |
-
max-width: 100%;
|
43 |
padding: 0;
|
44 |
}
|
45 |
}
|
36 |
border: 1px solid #eee;
|
37 |
|
38 |
img {
|
|
|
|
|
39 |
margin: 0;
|
|
|
40 |
padding: 0;
|
41 |
}
|
42 |
}
|
assets/js/blocks/product-category/block.js
CHANGED
@@ -20,7 +20,6 @@ import ProductCategoryControl from '@woocommerce/editor-components/product-categ
|
|
20 |
import ProductOrderbyControl from '@woocommerce/editor-components/product-orderby-control';
|
21 |
import { gridBlockPreview } from '@woocommerce/resource-previews';
|
22 |
import { Icon, folder } from '@woocommerce/icons';
|
23 |
-
import { getSetting } from '@woocommerce/settings';
|
24 |
|
25 |
/**
|
26 |
* Component to handle edit mode of "Products by Category".
|
@@ -135,7 +134,6 @@ class ProductByCategoryBlock extends Component {
|
|
135 |
setAttributes( changes );
|
136 |
this.setChangedAttributes( changes );
|
137 |
} }
|
138 |
-
isCompact={ true }
|
139 |
/>
|
140 |
</PanelBody>
|
141 |
<PanelBody
|
@@ -147,10 +145,6 @@ class ProductByCategoryBlock extends Component {
|
|
147 |
rows={ rows }
|
148 |
alignButtons={ alignButtons }
|
149 |
setAttributes={ setAttributes }
|
150 |
-
minColumns={ getSetting( 'min_columns', 1 ) }
|
151 |
-
maxColumns={ getSetting( 'max_columns', 6 ) }
|
152 |
-
minRows={ getSetting( 'min_rows', 1 ) }
|
153 |
-
maxRows={ getSetting( 'max_rows', 6 ) }
|
154 |
/>
|
155 |
</PanelBody>
|
156 |
<PanelBody
|
20 |
import ProductOrderbyControl from '@woocommerce/editor-components/product-orderby-control';
|
21 |
import { gridBlockPreview } from '@woocommerce/resource-previews';
|
22 |
import { Icon, folder } from '@woocommerce/icons';
|
|
|
23 |
|
24 |
/**
|
25 |
* Component to handle edit mode of "Products by Category".
|
134 |
setAttributes( changes );
|
135 |
this.setChangedAttributes( changes );
|
136 |
} }
|
|
|
137 |
/>
|
138 |
</PanelBody>
|
139 |
<PanelBody
|
145 |
rows={ rows }
|
146 |
alignButtons={ alignButtons }
|
147 |
setAttributes={ setAttributes }
|
|
|
|
|
|
|
|
|
148 |
/>
|
149 |
</PanelBody>
|
150 |
<PanelBody
|
assets/js/blocks/product-new/block.js
CHANGED
@@ -11,7 +11,6 @@ import GridContentControl from '@woocommerce/editor-components/grid-content-cont
|
|
11 |
import GridLayoutControl from '@woocommerce/editor-components/grid-layout-control';
|
12 |
import ProductCategoryControl from '@woocommerce/editor-components/product-category-control';
|
13 |
import { gridBlockPreview } from '@woocommerce/resource-previews';
|
14 |
-
import { getSetting } from '@woocommerce/settings';
|
15 |
|
16 |
/**
|
17 |
* Component to handle edit mode of "Newest Products".
|
@@ -39,10 +38,6 @@ class ProductNewestBlock extends Component {
|
|
39 |
rows={ rows }
|
40 |
alignButtons={ alignButtons }
|
41 |
setAttributes={ setAttributes }
|
42 |
-
minColumns={ getSetting( 'min_columns', 1 ) }
|
43 |
-
maxColumns={ getSetting( 'max_columns', 6 ) }
|
44 |
-
minRows={ getSetting( 'min_rows', 1 ) }
|
45 |
-
maxRows={ getSetting( 'max_rows', 6 ) }
|
46 |
/>
|
47 |
</PanelBody>
|
48 |
<PanelBody
|
11 |
import GridLayoutControl from '@woocommerce/editor-components/grid-layout-control';
|
12 |
import ProductCategoryControl from '@woocommerce/editor-components/product-category-control';
|
13 |
import { gridBlockPreview } from '@woocommerce/resource-previews';
|
|
|
14 |
|
15 |
/**
|
16 |
* Component to handle edit mode of "Newest Products".
|
38 |
rows={ rows }
|
39 |
alignButtons={ alignButtons }
|
40 |
setAttributes={ setAttributes }
|
|
|
|
|
|
|
|
|
41 |
/>
|
42 |
</PanelBody>
|
43 |
<PanelBody
|
assets/js/blocks/product-on-sale/block.js
CHANGED
@@ -13,7 +13,6 @@ import ProductCategoryControl from '@woocommerce/editor-components/product-categ
|
|
13 |
import ProductOrderbyControl from '@woocommerce/editor-components/product-orderby-control';
|
14 |
import { gridBlockPreview } from '@woocommerce/resource-previews';
|
15 |
import { Icon, tag } from '@woocommerce/icons';
|
16 |
-
import { getSetting } from '@woocommerce/settings';
|
17 |
|
18 |
const EmptyPlaceholder = () => (
|
19 |
<Placeholder
|
@@ -55,10 +54,6 @@ class ProductOnSaleBlock extends Component {
|
|
55 |
rows={ rows }
|
56 |
alignButtons={ alignButtons }
|
57 |
setAttributes={ setAttributes }
|
58 |
-
minColumns={ getSetting( 'min_columns', 1 ) }
|
59 |
-
maxColumns={ getSetting( 'max_columns', 6 ) }
|
60 |
-
minRows={ getSetting( 'min_rows', 1 ) }
|
61 |
-
maxRows={ getSetting( 'max_rows', 6 ) }
|
62 |
/>
|
63 |
</PanelBody>
|
64 |
<PanelBody
|
13 |
import ProductOrderbyControl from '@woocommerce/editor-components/product-orderby-control';
|
14 |
import { gridBlockPreview } from '@woocommerce/resource-previews';
|
15 |
import { Icon, tag } from '@woocommerce/icons';
|
|
|
16 |
|
17 |
const EmptyPlaceholder = () => (
|
18 |
<Placeholder
|
54 |
rows={ rows }
|
55 |
alignButtons={ alignButtons }
|
56 |
setAttributes={ setAttributes }
|
|
|
|
|
|
|
|
|
57 |
/>
|
58 |
</PanelBody>
|
59 |
<PanelBody
|
assets/js/blocks/product-search/block.js
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
import classnames from 'classnames';
|
6 |
import PropTypes from 'prop-types';
|
7 |
-
import { HOME_URL } from '@woocommerce/settings';
|
8 |
|
9 |
/**
|
10 |
* Internal dependencies
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
import classnames from 'classnames';
|
6 |
import PropTypes from 'prop-types';
|
7 |
+
import { HOME_URL } from '@woocommerce/block-settings';
|
8 |
|
9 |
/**
|
10 |
* Internal dependencies
|
assets/js/blocks/product-search/index.js
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
-
import {
|
6 |
import { Icon, search } from '@woocommerce/icons';
|
7 |
/**
|
8 |
* Internal dependencies
|
@@ -71,25 +71,6 @@ registerBlockType( 'woocommerce/product-search', {
|
|
71 |
},
|
72 |
},
|
73 |
|
74 |
-
transforms: {
|
75 |
-
from: [
|
76 |
-
{
|
77 |
-
type: 'block',
|
78 |
-
blocks: [ 'core/legacy-widget' ],
|
79 |
-
// We can't transform if raw instance isn't shown in the REST API.
|
80 |
-
isMatch: ( { idBase, instance } ) =>
|
81 |
-
idBase === 'woocommerce_product_search' && !! instance?.raw,
|
82 |
-
transform: ( { instance } ) =>
|
83 |
-
createBlock( 'woocommerce/product-search', {
|
84 |
-
label:
|
85 |
-
instance.raw.title === ''
|
86 |
-
? __( 'Search', 'woo-gutenberg-products-block' )
|
87 |
-
: instance.raw.title,
|
88 |
-
} ),
|
89 |
-
},
|
90 |
-
],
|
91 |
-
},
|
92 |
-
|
93 |
edit,
|
94 |
|
95 |
/**
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
+
import { registerBlockType } from '@wordpress/blocks';
|
6 |
import { Icon, search } from '@woocommerce/icons';
|
7 |
/**
|
8 |
* Internal dependencies
|
71 |
},
|
72 |
},
|
73 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
74 |
edit,
|
75 |
|
76 |
/**
|
assets/js/blocks/product-tag/block.js
CHANGED
@@ -14,13 +14,13 @@ import {
|
|
14 |
} from '@wordpress/components';
|
15 |
import { Component } from '@wordpress/element';
|
16 |
import PropTypes from 'prop-types';
|
|
|
17 |
import GridContentControl from '@woocommerce/editor-components/grid-content-control';
|
18 |
import GridLayoutControl from '@woocommerce/editor-components/grid-layout-control';
|
19 |
import ProductTagControl from '@woocommerce/editor-components/product-tag-control';
|
20 |
import ProductOrderbyControl from '@woocommerce/editor-components/product-orderby-control';
|
21 |
import { Icon, more } from '@woocommerce/icons';
|
22 |
import { gridBlockPreview } from '@woocommerce/resource-previews';
|
23 |
-
import { getSetting } from '@woocommerce/settings';
|
24 |
|
25 |
/**
|
26 |
* Component to handle edit mode of "Products by Tag".
|
@@ -112,7 +112,6 @@ class ProductsByTagBlock extends Component {
|
|
112 |
onOperatorChange={ ( value = 'any' ) =>
|
113 |
setAttributes( { tagOperator: value } )
|
114 |
}
|
115 |
-
isCompact={ true }
|
116 |
/>
|
117 |
</PanelBody>
|
118 |
<PanelBody
|
@@ -124,10 +123,6 @@ class ProductsByTagBlock extends Component {
|
|
124 |
rows={ rows }
|
125 |
alignButtons={ alignButtons }
|
126 |
setAttributes={ setAttributes }
|
127 |
-
minColumns={ getSetting( 'min_columns', 1 ) }
|
128 |
-
maxColumns={ getSetting( 'max_columns', 6 ) }
|
129 |
-
minRows={ getSetting( 'min_rows', 1 ) }
|
130 |
-
maxRows={ getSetting( 'max_rows', 6 ) }
|
131 |
/>
|
132 |
</PanelBody>
|
133 |
<PanelBody
|
@@ -265,7 +260,7 @@ class ProductsByTagBlock extends Component {
|
|
265 |
return gridBlockPreview;
|
266 |
}
|
267 |
|
268 |
-
return
|
269 |
<>
|
270 |
<BlockControls>
|
271 |
<ToolbarGroup
|
14 |
} from '@wordpress/components';
|
15 |
import { Component } from '@wordpress/element';
|
16 |
import PropTypes from 'prop-types';
|
17 |
+
import { HAS_TAGS } from '@woocommerce/block-settings';
|
18 |
import GridContentControl from '@woocommerce/editor-components/grid-content-control';
|
19 |
import GridLayoutControl from '@woocommerce/editor-components/grid-layout-control';
|
20 |
import ProductTagControl from '@woocommerce/editor-components/product-tag-control';
|
21 |
import ProductOrderbyControl from '@woocommerce/editor-components/product-orderby-control';
|
22 |
import { Icon, more } from '@woocommerce/icons';
|
23 |
import { gridBlockPreview } from '@woocommerce/resource-previews';
|
|
|
24 |
|
25 |
/**
|
26 |
* Component to handle edit mode of "Products by Tag".
|
112 |
onOperatorChange={ ( value = 'any' ) =>
|
113 |
setAttributes( { tagOperator: value } )
|
114 |
}
|
|
|
115 |
/>
|
116 |
</PanelBody>
|
117 |
<PanelBody
|
123 |
rows={ rows }
|
124 |
alignButtons={ alignButtons }
|
125 |
setAttributes={ setAttributes }
|
|
|
|
|
|
|
|
|
126 |
/>
|
127 |
</PanelBody>
|
128 |
<PanelBody
|
260 |
return gridBlockPreview;
|
261 |
}
|
262 |
|
263 |
+
return HAS_TAGS ? (
|
264 |
<>
|
265 |
<BlockControls>
|
266 |
<ToolbarGroup
|
assets/js/blocks/product-tag/index.js
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
*/
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
import { registerBlockType } from '@wordpress/blocks';
|
6 |
-
import {
|
7 |
import { Icon, more } from '@woocommerce/icons';
|
8 |
|
9 |
/**
|
@@ -42,7 +42,7 @@ registerBlockType( 'woocommerce/product-tag', {
|
|
42 |
*/
|
43 |
columns: {
|
44 |
type: 'number',
|
45 |
-
default:
|
46 |
},
|
47 |
|
48 |
/**
|
@@ -50,7 +50,7 @@ registerBlockType( 'woocommerce/product-tag', {
|
|
50 |
*/
|
51 |
rows: {
|
52 |
type: 'number',
|
53 |
-
default:
|
54 |
},
|
55 |
|
56 |
/**
|
3 |
*/
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
import { registerBlockType } from '@wordpress/blocks';
|
6 |
+
import { DEFAULT_COLUMNS, DEFAULT_ROWS } from '@woocommerce/block-settings';
|
7 |
import { Icon, more } from '@woocommerce/icons';
|
8 |
|
9 |
/**
|
42 |
*/
|
43 |
columns: {
|
44 |
type: 'number',
|
45 |
+
default: DEFAULT_COLUMNS,
|
46 |
},
|
47 |
|
48 |
/**
|
50 |
*/
|
51 |
rows: {
|
52 |
type: 'number',
|
53 |
+
default: DEFAULT_ROWS,
|
54 |
},
|
55 |
|
56 |
/**
|
assets/js/blocks/product-top-rated/block.js
CHANGED
@@ -11,7 +11,6 @@ import GridContentControl from '@woocommerce/editor-components/grid-content-cont
|
|
11 |
import GridLayoutControl from '@woocommerce/editor-components/grid-layout-control';
|
12 |
import ProductCategoryControl from '@woocommerce/editor-components/product-category-control';
|
13 |
import { gridBlockPreview } from '@woocommerce/resource-previews';
|
14 |
-
import { getSetting } from '@woocommerce/settings';
|
15 |
|
16 |
/**
|
17 |
* Component to handle edit mode of "Top Rated Products".
|
@@ -39,10 +38,6 @@ class ProductTopRatedBlock extends Component {
|
|
39 |
rows={ rows }
|
40 |
alignButtons={ alignButtons }
|
41 |
setAttributes={ setAttributes }
|
42 |
-
minColumns={ getSetting( 'min_columns', 1 ) }
|
43 |
-
maxColumns={ getSetting( 'max_columns', 6 ) }
|
44 |
-
minRows={ getSetting( 'min_rows', 1 ) }
|
45 |
-
maxRows={ getSetting( 'max_rows', 6 ) }
|
46 |
/>
|
47 |
</PanelBody>
|
48 |
<PanelBody
|
11 |
import GridLayoutControl from '@woocommerce/editor-components/grid-layout-control';
|
12 |
import ProductCategoryControl from '@woocommerce/editor-components/product-category-control';
|
13 |
import { gridBlockPreview } from '@woocommerce/resource-previews';
|
|
|
14 |
|
15 |
/**
|
16 |
* Component to handle edit mode of "Top Rated Products".
|
38 |
rows={ rows }
|
39 |
alignButtons={ alignButtons }
|
40 |
setAttributes={ setAttributes }
|
|
|
|
|
|
|
|
|
41 |
/>
|
42 |
</PanelBody>
|
43 |
<PanelBody
|
assets/js/blocks/products-by-attribute/block.js
CHANGED
@@ -20,7 +20,6 @@ import GridLayoutControl from '@woocommerce/editor-components/grid-layout-contro
|
|
20 |
import ProductAttributeTermControl from '@woocommerce/editor-components/product-attribute-term-control';
|
21 |
import ProductOrderbyControl from '@woocommerce/editor-components/product-orderby-control';
|
22 |
import { gridBlockPreview } from '@woocommerce/resource-previews';
|
23 |
-
import { getSetting } from '@woocommerce/settings';
|
24 |
|
25 |
/**
|
26 |
* Component to handle edit mode of "Products by Attribute".
|
@@ -49,10 +48,6 @@ class ProductsByAttributeBlock extends Component {
|
|
49 |
rows={ rows }
|
50 |
alignButtons={ alignButtons }
|
51 |
setAttributes={ setAttributes }
|
52 |
-
minColumns={ getSetting( 'min_columns', 1 ) }
|
53 |
-
maxColumns={ getSetting( 'max_columns', 6 ) }
|
54 |
-
minRows={ getSetting( 'min_rows', 1 ) }
|
55 |
-
maxRows={ getSetting( 'max_rows', 6 ) }
|
56 |
/>
|
57 |
</PanelBody>
|
58 |
<PanelBody
|
@@ -90,7 +85,6 @@ class ProductsByAttributeBlock extends Component {
|
|
90 |
onOperatorChange={ ( value = 'any' ) =>
|
91 |
setAttributes( { attrOperator: value } )
|
92 |
}
|
93 |
-
isCompact={ true }
|
94 |
/>
|
95 |
</PanelBody>
|
96 |
<PanelBody
|
20 |
import ProductAttributeTermControl from '@woocommerce/editor-components/product-attribute-term-control';
|
21 |
import ProductOrderbyControl from '@woocommerce/editor-components/product-orderby-control';
|
22 |
import { gridBlockPreview } from '@woocommerce/resource-previews';
|
|
|
23 |
|
24 |
/**
|
25 |
* Component to handle edit mode of "Products by Attribute".
|
48 |
rows={ rows }
|
49 |
alignButtons={ alignButtons }
|
50 |
setAttributes={ setAttributes }
|
|
|
|
|
|
|
|
|
51 |
/>
|
52 |
</PanelBody>
|
53 |
<PanelBody
|
85 |
onOperatorChange={ ( value = 'any' ) =>
|
86 |
setAttributes( { attrOperator: value } )
|
87 |
}
|
|
|
88 |
/>
|
89 |
</PanelBody>
|
90 |
<PanelBody
|
assets/js/blocks/products-by-attribute/index.js
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
import { Icon, tags } from '@woocommerce/icons';
|
6 |
import { registerBlockType } from '@wordpress/blocks';
|
7 |
-
import {
|
8 |
|
9 |
/**
|
10 |
* Internal dependencies
|
@@ -57,7 +57,7 @@ registerBlockType( blockTypeName, {
|
|
57 |
*/
|
58 |
columns: {
|
59 |
type: 'number',
|
60 |
-
default:
|
61 |
},
|
62 |
|
63 |
/**
|
@@ -94,7 +94,7 @@ registerBlockType( blockTypeName, {
|
|
94 |
*/
|
95 |
rows: {
|
96 |
type: 'number',
|
97 |
-
default:
|
98 |
},
|
99 |
|
100 |
/**
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
import { Icon, tags } from '@woocommerce/icons';
|
6 |
import { registerBlockType } from '@wordpress/blocks';
|
7 |
+
import { DEFAULT_COLUMNS, DEFAULT_ROWS } from '@woocommerce/block-settings';
|
8 |
|
9 |
/**
|
10 |
* Internal dependencies
|
57 |
*/
|
58 |
columns: {
|
59 |
type: 'number',
|
60 |
+
default: DEFAULT_COLUMNS,
|
61 |
},
|
62 |
|
63 |
/**
|
94 |
*/
|
95 |
rows: {
|
96 |
type: 'number',
|
97 |
+
default: DEFAULT_ROWS,
|
98 |
},
|
99 |
|
100 |
/**
|
assets/js/blocks/products/all-products/block.js
CHANGED
@@ -6,7 +6,6 @@ import PropTypes from 'prop-types';
|
|
6 |
import { ProductListContainer } from '@woocommerce/base-components/product-list';
|
7 |
import { InnerBlockLayoutContextProvider } from '@woocommerce/shared-context';
|
8 |
import { gridBlockPreview } from '@woocommerce/resource-previews';
|
9 |
-
import { getSetting } from '@woocommerce/settings';
|
10 |
|
11 |
/**
|
12 |
* The All Products Block.
|
@@ -26,8 +25,6 @@ class Block extends Component {
|
|
26 |
return gridBlockPreview;
|
27 |
}
|
28 |
|
29 |
-
const hideOutOfStockItems = getSetting( 'hideOutOfStockItems', false );
|
30 |
-
|
31 |
/**
|
32 |
* Todo classes
|
33 |
*
|
@@ -42,7 +39,6 @@ class Block extends Component {
|
|
42 |
<ProductListContainer
|
43 |
attributes={ attributes }
|
44 |
urlParameterSuffix={ urlParameterSuffix }
|
45 |
-
hideOutOfStockItems={ hideOutOfStockItems }
|
46 |
/>
|
47 |
</InnerBlockLayoutContextProvider>
|
48 |
);
|
6 |
import { ProductListContainer } from '@woocommerce/base-components/product-list';
|
7 |
import { InnerBlockLayoutContextProvider } from '@woocommerce/shared-context';
|
8 |
import { gridBlockPreview } from '@woocommerce/resource-previews';
|
|
|
9 |
|
10 |
/**
|
11 |
* The All Products Block.
|
25 |
return gridBlockPreview;
|
26 |
}
|
27 |
|
|
|
|
|
28 |
/**
|
29 |
* Todo classes
|
30 |
*
|
39 |
<ProductListContainer
|
40 |
attributes={ attributes }
|
41 |
urlParameterSuffix={ urlParameterSuffix }
|
|
|
42 |
/>
|
43 |
</InnerBlockLayoutContextProvider>
|
44 |
);
|
assets/js/blocks/products/all-products/edit.js
CHANGED
@@ -23,14 +23,13 @@ import { compose } from '@wordpress/compose';
|
|
23 |
import PropTypes from 'prop-types';
|
24 |
import { Icon, grid } from '@woocommerce/icons';
|
25 |
import GridLayoutControl from '@woocommerce/editor-components/grid-layout-control';
|
|
|
26 |
import {
|
27 |
InnerBlockLayoutContextProvider,
|
28 |
ProductDataContextProvider,
|
29 |
} from '@woocommerce/shared-context';
|
30 |
import { getBlockMap } from '@woocommerce/atomic-utils';
|
31 |
import { previewProducts } from '@woocommerce/resource-previews';
|
32 |
-
import { getSetting } from '@woocommerce/settings';
|
33 |
-
import { blocksConfig } from '@woocommerce/block-settings';
|
34 |
|
35 |
/**
|
36 |
* Internal dependencies
|
@@ -120,10 +119,6 @@ class Editor extends Component {
|
|
120 |
rows={ rows }
|
121 |
alignButtons={ alignButtons }
|
122 |
setAttributes={ setAttributes }
|
123 |
-
minColumns={ getSetting( 'min_columns', 1 ) }
|
124 |
-
maxColumns={ getSetting( 'max_columns', 6 ) }
|
125 |
-
minRows={ getSetting( 'min_rows', 1 ) }
|
126 |
-
maxRows={ getSetting( 'max_rows', 6 ) }
|
127 |
/>
|
128 |
</PanelBody>
|
129 |
<PanelBody
|
@@ -284,7 +279,7 @@ class Editor extends Component {
|
|
284 |
const blockTitle = this.getTitle();
|
285 |
const blockIcon = this.getIcon();
|
286 |
|
287 |
-
if (
|
288 |
return renderNoProductsPlaceholder( blockTitle, blockIcon );
|
289 |
}
|
290 |
|
23 |
import PropTypes from 'prop-types';
|
24 |
import { Icon, grid } from '@woocommerce/icons';
|
25 |
import GridLayoutControl from '@woocommerce/editor-components/grid-layout-control';
|
26 |
+
import { HAS_PRODUCTS } from '@woocommerce/block-settings';
|
27 |
import {
|
28 |
InnerBlockLayoutContextProvider,
|
29 |
ProductDataContextProvider,
|
30 |
} from '@woocommerce/shared-context';
|
31 |
import { getBlockMap } from '@woocommerce/atomic-utils';
|
32 |
import { previewProducts } from '@woocommerce/resource-previews';
|
|
|
|
|
33 |
|
34 |
/**
|
35 |
* Internal dependencies
|
119 |
rows={ rows }
|
120 |
alignButtons={ alignButtons }
|
121 |
setAttributes={ setAttributes }
|
|
|
|
|
|
|
|
|
122 |
/>
|
123 |
</PanelBody>
|
124 |
<PanelBody
|
279 |
const blockTitle = this.getTitle();
|
280 |
const blockIcon = this.getIcon();
|
281 |
|
282 |
+
if ( ! HAS_PRODUCTS ) {
|
283 |
return renderNoProductsPlaceholder( blockTitle, blockIcon );
|
284 |
}
|
285 |
|
assets/js/blocks/products/attributes.js
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
/**
|
2 |
* External dependencies
|
3 |
*/
|
4 |
-
import {
|
5 |
|
6 |
/**
|
7 |
* Internal dependencies
|
@@ -9,8 +9,8 @@ import { getSetting } from '@woocommerce/settings';
|
|
9 |
import { DEFAULT_PRODUCT_LIST_LAYOUT } from './base-utils';
|
10 |
|
11 |
export const defaults = {
|
12 |
-
columns:
|
13 |
-
rows:
|
14 |
alignButtons: false,
|
15 |
contentVisibility: {
|
16 |
orderBy: true,
|
1 |
/**
|
2 |
* External dependencies
|
3 |
*/
|
4 |
+
import { DEFAULT_COLUMNS, DEFAULT_ROWS } from '@woocommerce/block-settings';
|
5 |
|
6 |
/**
|
7 |
* Internal dependencies
|
9 |
import { DEFAULT_PRODUCT_LIST_LAYOUT } from './base-utils';
|
10 |
|
11 |
export const defaults = {
|
12 |
+
columns: DEFAULT_COLUMNS,
|
13 |
+
rows: DEFAULT_ROWS,
|
14 |
alignButtons: false,
|
15 |
contentVisibility: {
|
16 |
orderBy: true,
|
assets/js/blocks/reviews/all-reviews/index.js
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
-
import {
|
6 |
import { Icon, discussion } from '@woocommerce/icons';
|
7 |
|
8 |
/**
|
@@ -51,27 +51,6 @@ registerBlockType( 'woocommerce/all-reviews', {
|
|
51 |
},
|
52 |
},
|
53 |
|
54 |
-
transforms: {
|
55 |
-
from: [
|
56 |
-
{
|
57 |
-
type: 'block',
|
58 |
-
blocks: [ 'core/legacy-widget' ],
|
59 |
-
// We can't transform if raw instance isn't shown in the REST API.
|
60 |
-
isMatch: ( { idBase, instance } ) =>
|
61 |
-
idBase === 'woocommerce_recent_reviews' && !! instance?.raw,
|
62 |
-
transform: ( { instance } ) =>
|
63 |
-
createBlock( 'woocommerce/all-reviews', {
|
64 |
-
reviewsOnPageLoad: instance.raw.number,
|
65 |
-
imageType: 'product',
|
66 |
-
showLoadMore: false,
|
67 |
-
showOrderby: false,
|
68 |
-
showReviewDate: false,
|
69 |
-
showReviewContent: false,
|
70 |
-
} ),
|
71 |
-
},
|
72 |
-
],
|
73 |
-
},
|
74 |
-
|
75 |
/**
|
76 |
* Renders and manages the block.
|
77 |
*
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
+
import { registerBlockType } from '@wordpress/blocks';
|
6 |
import { Icon, discussion } from '@woocommerce/icons';
|
7 |
|
8 |
/**
|
51 |
},
|
52 |
},
|
53 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
54 |
/**
|
55 |
* Renders and manages the block.
|
56 |
*
|
assets/js/blocks/reviews/edit-utils.js
CHANGED
@@ -11,7 +11,11 @@ import {
|
|
11 |
SelectControl,
|
12 |
} from '@wordpress/components';
|
13 |
import { BlockControls } from '@wordpress/block-editor';
|
14 |
-
import { getAdminLink
|
|
|
|
|
|
|
|
|
15 |
import ToggleButtonControl from '@woocommerce/editor-components/toggle-button-control';
|
16 |
|
17 |
export const getBlockControls = ( editMode, setAttributes ) => (
|
@@ -30,8 +34,6 @@ export const getBlockControls = ( editMode, setAttributes ) => (
|
|
30 |
);
|
31 |
|
32 |
export const getSharedReviewContentControls = ( attributes, setAttributes ) => {
|
33 |
-
const showAvatars = getSetting( 'showAvatars', true );
|
34 |
-
const reviewRatingsEnabled = getSetting( 'reviewRatingsEnabled', true );
|
35 |
return (
|
36 |
<>
|
37 |
<ToggleControl
|
@@ -43,7 +45,7 @@ export const getSharedReviewContentControls = ( attributes, setAttributes ) => {
|
|
43 |
} )
|
44 |
}
|
45 |
/>
|
46 |
-
{ attributes.showReviewRating && !
|
47 |
<Notice
|
48 |
className="wc-block-base-control-notice"
|
49 |
isDismissible={ false }
|
@@ -132,7 +134,7 @@ export const getSharedReviewContentControls = ( attributes, setAttributes ) => {
|
|
132 |
setAttributes( { imageType: value } )
|
133 |
}
|
134 |
/>
|
135 |
-
{ attributes.imageType === 'reviewer' && !
|
136 |
<Notice
|
137 |
className="wc-block-base-control-notice"
|
138 |
isDismissible={ false }
|
11 |
SelectControl,
|
12 |
} from '@wordpress/components';
|
13 |
import { BlockControls } from '@wordpress/block-editor';
|
14 |
+
import { getAdminLink } from '@woocommerce/settings';
|
15 |
+
import {
|
16 |
+
REVIEW_RATINGS_ENABLED,
|
17 |
+
SHOW_AVATARS,
|
18 |
+
} from '@woocommerce/block-settings';
|
19 |
import ToggleButtonControl from '@woocommerce/editor-components/toggle-button-control';
|
20 |
|
21 |
export const getBlockControls = ( editMode, setAttributes ) => (
|
34 |
);
|
35 |
|
36 |
export const getSharedReviewContentControls = ( attributes, setAttributes ) => {
|
|
|
|
|
37 |
return (
|
38 |
<>
|
39 |
<ToggleControl
|
45 |
} )
|
46 |
}
|
47 |
/>
|
48 |
+
{ attributes.showReviewRating && ! REVIEW_RATINGS_ENABLED && (
|
49 |
<Notice
|
50 |
className="wc-block-base-control-notice"
|
51 |
isDismissible={ false }
|
134 |
setAttributes( { imageType: value } )
|
135 |
}
|
136 |
/>
|
137 |
+
{ attributes.imageType === 'reviewer' && ! SHOW_AVATARS && (
|
138 |
<Notice
|
139 |
className="wc-block-base-control-notice"
|
140 |
isDismissible={ false }
|
assets/js/blocks/reviews/editor-block.js
CHANGED
@@ -5,7 +5,7 @@ import { __ } from '@wordpress/i18n';
|
|
5 |
import { Component } from 'react';
|
6 |
import PropTypes from 'prop-types';
|
7 |
import { Disabled } from '@wordpress/components';
|
8 |
-
import {
|
9 |
import ErrorPlaceholder from '@woocommerce/editor-components/error-placeholder';
|
10 |
import LoadMoreButton from '@woocommerce/base-components/load-more-button';
|
11 |
import {
|
@@ -52,11 +52,9 @@ class EditorBlock extends Component {
|
|
52 |
return <NoReviewsPlaceholder attributes={ attributes } />;
|
53 |
}
|
54 |
|
55 |
-
const reviewRatingsEnabled = getSetting( 'reviewRatingsEnabled', true );
|
56 |
-
|
57 |
return (
|
58 |
<Disabled>
|
59 |
-
{ attributes.showOrderby &&
|
60 |
<ReviewSortSelect readOnly value={ attributes.orderby } />
|
61 |
) }
|
62 |
<ReviewList attributes={ attributes } reviews={ reviews } />
|
5 |
import { Component } from 'react';
|
6 |
import PropTypes from 'prop-types';
|
7 |
import { Disabled } from '@wordpress/components';
|
8 |
+
import { REVIEW_RATINGS_ENABLED } from '@woocommerce/block-settings';
|
9 |
import ErrorPlaceholder from '@woocommerce/editor-components/error-placeholder';
|
10 |
import LoadMoreButton from '@woocommerce/base-components/load-more-button';
|
11 |
import {
|
52 |
return <NoReviewsPlaceholder attributes={ attributes } />;
|
53 |
}
|
54 |
|
|
|
|
|
55 |
return (
|
56 |
<Disabled>
|
57 |
+
{ attributes.showOrderby && REVIEW_RATINGS_ENABLED && (
|
58 |
<ReviewSortSelect readOnly value={ attributes.orderby } />
|
59 |
) }
|
60 |
<ReviewList attributes={ attributes } reviews={ reviews } />
|
assets/js/blocks/reviews/frontend-block.js
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
*/
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
import PropTypes from 'prop-types';
|
6 |
-
import {
|
7 |
import LoadMoreButton from '@woocommerce/base-components/load-more-button';
|
8 |
import {
|
9 |
ReviewList,
|
@@ -34,11 +34,9 @@ const FrontendBlock = ( {
|
|
34 |
return null;
|
35 |
}
|
36 |
|
37 |
-
const reviewRatingsEnabled = getSetting( 'reviewRatingsEnabled', true );
|
38 |
-
|
39 |
return (
|
40 |
<>
|
41 |
-
{ attributes.showOrderby !== 'false' &&
|
42 |
<ReviewSortSelect
|
43 |
defaultValue={ orderby }
|
44 |
onChange={ onChangeOrderby }
|
3 |
*/
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
import PropTypes from 'prop-types';
|
6 |
+
import { REVIEW_RATINGS_ENABLED } from '@woocommerce/block-settings';
|
7 |
import LoadMoreButton from '@woocommerce/base-components/load-more-button';
|
8 |
import {
|
9 |
ReviewList,
|
34 |
return null;
|
35 |
}
|
36 |
|
|
|
|
|
37 |
return (
|
38 |
<>
|
39 |
+
{ attributes.showOrderby !== 'false' && REVIEW_RATINGS_ENABLED && (
|
40 |
<ReviewSortSelect
|
41 |
defaultValue={ orderby }
|
42 |
onChange={ onChangeOrderby }
|
assets/js/blocks/reviews/reviews-by-category/edit.js
CHANGED
@@ -14,7 +14,6 @@ import { SearchListItem } from '@woocommerce/components';
|
|
14 |
import PropTypes from 'prop-types';
|
15 |
import ProductCategoryControl from '@woocommerce/editor-components/product-category-control';
|
16 |
import { Icon, review } from '@woocommerce/icons';
|
17 |
-
import classNames from 'classnames';
|
18 |
|
19 |
/**
|
20 |
* Internal dependencies
|
@@ -44,6 +43,13 @@ const ReviewsByCategoryEditor = ( {
|
|
44 |
|
45 |
const renderCategoryControlItem = ( args ) => {
|
46 |
const { item, search, depth = 0 } = args;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
47 |
|
48 |
const accessibleName = ! item.breadcrumbs.length
|
49 |
? item.name
|
@@ -51,15 +57,9 @@ const ReviewsByCategoryEditor = ( {
|
|
51 |
|
52 |
return (
|
53 |
<SearchListItem
|
54 |
-
className={
|
55 |
-
'woocommerce-product-categories__item',
|
56 |
-
'has-count',
|
57 |
-
{
|
58 |
-
'is-searching': search.length > 0,
|
59 |
-
'is-skip-level': depth === 0 && item.parent !== 0,
|
60 |
-
}
|
61 |
-
) }
|
62 |
{ ...args }
|
|
|
63 |
aria-label={ sprintf(
|
64 |
/* translators: %1$s is the search term name, %2$d is the number of products returned for search query. */
|
65 |
_n(
|
@@ -89,7 +89,6 @@ const ReviewsByCategoryEditor = ( {
|
|
89 |
setAttributes( { categoryIds: ids } );
|
90 |
} }
|
91 |
renderItem={ renderCategoryControlItem }
|
92 |
-
isCompact={ true }
|
93 |
/>
|
94 |
</PanelBody>
|
95 |
<PanelBody
|
14 |
import PropTypes from 'prop-types';
|
15 |
import ProductCategoryControl from '@woocommerce/editor-components/product-category-control';
|
16 |
import { Icon, review } from '@woocommerce/icons';
|
|
|
17 |
|
18 |
/**
|
19 |
* Internal dependencies
|
43 |
|
44 |
const renderCategoryControlItem = ( args ) => {
|
45 |
const { item, search, depth = 0 } = args;
|
46 |
+
const classes = [ 'woocommerce-product-categories__item' ];
|
47 |
+
if ( search.length ) {
|
48 |
+
classes.push( 'is-searching' );
|
49 |
+
}
|
50 |
+
if ( depth === 0 && item.parent !== 0 ) {
|
51 |
+
classes.push( 'is-skip-level' );
|
52 |
+
}
|
53 |
|
54 |
const accessibleName = ! item.breadcrumbs.length
|
55 |
? item.name
|
57 |
|
58 |
return (
|
59 |
<SearchListItem
|
60 |
+
className={ classes.join( ' ' ) }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
61 |
{ ...args }
|
62 |
+
showCount
|
63 |
aria-label={ sprintf(
|
64 |
/* translators: %1$s is the search term name, %2$d is the number of products returned for search query. */
|
65 |
_n(
|
89 |
setAttributes( { categoryIds: ids } );
|
90 |
} }
|
91 |
renderItem={ renderCategoryControlItem }
|
|
|
92 |
/>
|
93 |
</PanelBody>
|
94 |
<PanelBody
|
assets/js/blocks/reviews/reviews-by-product/edit.js
CHANGED
@@ -49,13 +49,14 @@ const ReviewsByProductEditor = ( {
|
|
49 |
countLabel={ sprintf(
|
50 |
/* translators: %d is the review count. */
|
51 |
_n(
|
52 |
-
'%d
|
53 |
-
'%d
|
54 |
item.review_count,
|
55 |
'woo-gutenberg-products-block'
|
56 |
),
|
57 |
item.review_count
|
58 |
) }
|
|
|
59 |
aria-label={ sprintf(
|
60 |
/* translators: %1$s is the item name, and %2$d is the number of reviews for the item. */
|
61 |
_n(
|
@@ -85,7 +86,6 @@ const ReviewsByProductEditor = ( {
|
|
85 |
setAttributes( { productId: id } );
|
86 |
} }
|
87 |
renderItem={ renderProductControlItem }
|
88 |
-
isCompact={ true }
|
89 |
/>
|
90 |
</PanelBody>
|
91 |
<PanelBody
|
49 |
countLabel={ sprintf(
|
50 |
/* translators: %d is the review count. */
|
51 |
_n(
|
52 |
+
'%d Review',
|
53 |
+
'%d Reviews',
|
54 |
item.review_count,
|
55 |
'woo-gutenberg-products-block'
|
56 |
),
|
57 |
item.review_count
|
58 |
) }
|
59 |
+
showCount
|
60 |
aria-label={ sprintf(
|
61 |
/* translators: %1$s is the item name, and %2$d is the number of reviews for the item. */
|
62 |
_n(
|
86 |
setAttributes( { productId: id } );
|
87 |
} }
|
88 |
renderItem={ renderProductControlItem }
|
|
|
89 |
/>
|
90 |
</PanelBody>
|
91 |
<PanelBody
|
assets/js/blocks/reviews/utils.js
CHANGED
@@ -3,12 +3,10 @@
|
|
3 |
*/
|
4 |
import apiFetch from '@wordpress/api-fetch';
|
5 |
import classNames from 'classnames';
|
6 |
-
import {
|
7 |
|
8 |
export const getSortArgs = ( sortValue ) => {
|
9 |
-
|
10 |
-
|
11 |
-
if ( reviewRatingsEnabled ) {
|
12 |
if ( sortValue === 'lowest-rating' ) {
|
13 |
return {
|
14 |
order: 'asc',
|
3 |
*/
|
4 |
import apiFetch from '@wordpress/api-fetch';
|
5 |
import classNames from 'classnames';
|
6 |
+
import { REVIEW_RATINGS_ENABLED } from '@woocommerce/block-settings';
|
7 |
|
8 |
export const getSortArgs = ( sortValue ) => {
|
9 |
+
if ( REVIEW_RATINGS_ENABLED ) {
|
|
|
|
|
10 |
if ( sortValue === 'lowest-rating' ) {
|
11 |
return {
|
12 |
order: 'asc',
|
assets/js/blocks/single-product/frontend.js
CHANGED
@@ -3,7 +3,6 @@
|
|
3 |
*/
|
4 |
import { getValidBlockAttributes } from '@woocommerce/base-utils';
|
5 |
import {
|
6 |
-
getBlockMap,
|
7 |
renderParentBlock,
|
8 |
renderStandaloneBlocks,
|
9 |
} from '@woocommerce/atomic-utils';
|
@@ -26,7 +25,6 @@ renderParentBlock( {
|
|
26 |
blockName: BLOCK_NAME,
|
27 |
selector: '.wp-block-woocommerce-single-product',
|
28 |
getProps,
|
29 |
-
blockMap: getBlockMap( BLOCK_NAME ),
|
30 |
} );
|
31 |
|
32 |
renderStandaloneBlocks();
|
3 |
*/
|
4 |
import { getValidBlockAttributes } from '@woocommerce/base-utils';
|
5 |
import {
|
|
|
6 |
renderParentBlock,
|
7 |
renderStandaloneBlocks,
|
8 |
} from '@woocommerce/atomic-utils';
|
25 |
blockName: BLOCK_NAME,
|
26 |
selector: '.wp-block-woocommerce-single-product',
|
27 |
getProps,
|
|
|
28 |
} );
|
29 |
|
30 |
renderStandaloneBlocks();
|
assets/js/data/cart/action-types.ts
CHANGED
@@ -10,5 +10,4 @@ export const ACTION_TYPES = {
|
|
10 |
RECEIVE_REMOVED_ITEM: 'RECEIVE_REMOVED_ITEM',
|
11 |
UPDATING_CUSTOMER_DATA: 'UPDATING_CUSTOMER_DATA',
|
12 |
UPDATING_SELECTED_SHIPPING_RATE: 'UPDATING_SELECTED_SHIPPING_RATE',
|
13 |
-
UPDATE_LEGACY_CART_FRAGMENTS: 'UPDATE_LEGACY_CART_FRAGMENTS',
|
14 |
} as const;
|
10 |
RECEIVE_REMOVED_ITEM: 'RECEIVE_REMOVED_ITEM',
|
11 |
UPDATING_CUSTOMER_DATA: 'UPDATING_CUSTOMER_DATA',
|
12 |
UPDATING_SELECTED_SHIPPING_RATE: 'UPDATING_SELECTED_SHIPPING_RATE',
|
|
|
13 |
} as const;
|
assets/js/data/cart/actions.ts
CHANGED
@@ -8,7 +8,6 @@ import type {
|
|
8 |
CartResponseItem,
|
9 |
CartBillingAddress,
|
10 |
CartShippingAddress,
|
11 |
-
ExtensionCartUpdateArgs,
|
12 |
} from '@woocommerce/types';
|
13 |
import { ReturnOrGeneratorYieldUnion } from '@automattic/data-stores';
|
14 |
import { camelCase, mapKeys } from 'lodash';
|
@@ -29,16 +28,14 @@ import type { ResponseError } from '../types';
|
|
29 |
*
|
30 |
* @param {CartResponse} response
|
31 |
*/
|
32 |
-
export const receiveCart = (
|
33 |
-
response: CartResponse
|
34 |
-
): { type: string; response: Cart } => {
|
35 |
const cart = ( mapKeys( response, ( _, key ) =>
|
36 |
camelCase( key )
|
37 |
) as unknown ) as Cart;
|
38 |
return {
|
39 |
type: types.RECEIVE_CART,
|
40 |
response: cart,
|
41 |
-
};
|
42 |
};
|
43 |
|
44 |
/**
|
@@ -160,44 +157,6 @@ export const shippingRatesBeingSelected = ( isResolving: boolean ) =>
|
|
160 |
isResolving,
|
161 |
} as const );
|
162 |
|
163 |
-
/**
|
164 |
-
* Returns an action object for updating legacy cart fragments.
|
165 |
-
*/
|
166 |
-
export const updateCartFragments = () =>
|
167 |
-
( {
|
168 |
-
type: types.UPDATE_LEGACY_CART_FRAGMENTS,
|
169 |
-
} as const );
|
170 |
-
|
171 |
-
/**
|
172 |
-
* POSTs to the /cart/extensions endpoint with the data supplied by the extension.
|
173 |
-
*
|
174 |
-
* @param {Object} args The data to be posted to the endpoint
|
175 |
-
*/
|
176 |
-
export function* applyExtensionCartUpdate(
|
177 |
-
args: ExtensionCartUpdateArgs
|
178 |
-
): Generator< unknown, CartResponse, { response: CartResponse } > {
|
179 |
-
try {
|
180 |
-
const { response } = yield apiFetchWithHeaders( {
|
181 |
-
path: '/wc/store/cart/extensions',
|
182 |
-
method: 'POST',
|
183 |
-
data: { namespace: args.namespace, data: args.data },
|
184 |
-
cache: 'no-store',
|
185 |
-
} );
|
186 |
-
yield receiveCart( response );
|
187 |
-
yield updateCartFragments();
|
188 |
-
return response;
|
189 |
-
} catch ( error ) {
|
190 |
-
yield receiveError( error );
|
191 |
-
// If updated cart state was returned, also update that.
|
192 |
-
if ( error.data?.cart ) {
|
193 |
-
yield receiveCart( error.data.cart );
|
194 |
-
}
|
195 |
-
|
196 |
-
// Re-throw the error.
|
197 |
-
throw error;
|
198 |
-
}
|
199 |
-
}
|
200 |
-
|
201 |
/**
|
202 |
* Applies a coupon code and either invalidates caches, or receives an error if
|
203 |
* the coupon cannot be applied.
|
@@ -222,7 +181,6 @@ export function* applyCoupon(
|
|
222 |
|
223 |
yield receiveCart( response );
|
224 |
yield receiveApplyingCoupon( '' );
|
225 |
-
yield updateCartFragments();
|
226 |
} catch ( error ) {
|
227 |
yield receiveError( error );
|
228 |
yield receiveApplyingCoupon( '' );
|
@@ -263,7 +221,6 @@ export function* removeCoupon(
|
|
263 |
|
264 |
yield receiveCart( response );
|
265 |
yield receiveRemovingCoupon( '' );
|
266 |
-
yield updateCartFragments();
|
267 |
} catch ( error ) {
|
268 |
yield receiveError( error );
|
269 |
yield receiveRemovingCoupon( '' );
|
@@ -306,7 +263,6 @@ export function* addItemToCart(
|
|
306 |
} );
|
307 |
|
308 |
yield receiveCart( response );
|
309 |
-
yield updateCartFragments();
|
310 |
} catch ( error ) {
|
311 |
yield receiveError( error );
|
312 |
|
@@ -336,16 +292,12 @@ export function* removeItemFromCart(
|
|
336 |
|
337 |
try {
|
338 |
const { response } = yield apiFetchWithHeaders( {
|
339 |
-
path: `/wc/store/cart/remove-item`,
|
340 |
-
data: {
|
341 |
-
key: cartItemKey,
|
342 |
-
},
|
343 |
method: 'POST',
|
344 |
cache: 'no-store',
|
345 |
} );
|
346 |
|
347 |
yield receiveCart( response );
|
348 |
-
yield updateCartFragments();
|
349 |
} catch ( error ) {
|
350 |
yield receiveError( error );
|
351 |
|
@@ -389,7 +341,6 @@ export function* changeCartItemQuantity(
|
|
389 |
} );
|
390 |
|
391 |
yield receiveCart( response );
|
392 |
-
yield updateCartFragments();
|
393 |
} catch ( error ) {
|
394 |
yield receiveError( error );
|
395 |
|
@@ -501,5 +452,4 @@ export type CartAction = ReturnOrGeneratorYieldUnion<
|
|
501 |
| typeof removeItemFromCart
|
502 |
| typeof changeCartItemQuantity
|
503 |
| typeof addItemToCart
|
504 |
-
| typeof updateCartFragments
|
505 |
>;
|
8 |
CartResponseItem,
|
9 |
CartBillingAddress,
|
10 |
CartShippingAddress,
|
|
|
11 |
} from '@woocommerce/types';
|
12 |
import { ReturnOrGeneratorYieldUnion } from '@automattic/data-stores';
|
13 |
import { camelCase, mapKeys } from 'lodash';
|
28 |
*
|
29 |
* @param {CartResponse} response
|
30 |
*/
|
31 |
+
export const receiveCart = ( response: CartResponse ) => {
|
|
|
|
|
32 |
const cart = ( mapKeys( response, ( _, key ) =>
|
33 |
camelCase( key )
|
34 |
) as unknown ) as Cart;
|
35 |
return {
|
36 |
type: types.RECEIVE_CART,
|
37 |
response: cart,
|
38 |
+
} as const;
|
39 |
};
|
40 |
|
41 |
/**
|
157 |
isResolving,
|
158 |
} as const );
|
159 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
160 |
/**
|
161 |
* Applies a coupon code and either invalidates caches, or receives an error if
|
162 |
* the coupon cannot be applied.
|
181 |
|
182 |
yield receiveCart( response );
|
183 |
yield receiveApplyingCoupon( '' );
|
|
|
184 |
} catch ( error ) {
|
185 |
yield receiveError( error );
|
186 |
yield receiveApplyingCoupon( '' );
|
221 |
|
222 |
yield receiveCart( response );
|
223 |
yield receiveRemovingCoupon( '' );
|
|
|
224 |
} catch ( error ) {
|
225 |
yield receiveError( error );
|
226 |
yield receiveRemovingCoupon( '' );
|
263 |
} );
|
264 |
|
265 |
yield receiveCart( response );
|
|
|
266 |
} catch ( error ) {
|
267 |
yield receiveError( error );
|
268 |
|
292 |
|
293 |
try {
|
294 |
const { response } = yield apiFetchWithHeaders( {
|
295 |
+
path: `/wc/store/cart/remove-item/?key=${ cartItemKey }`,
|
|
|
|
|
|
|
296 |
method: 'POST',
|
297 |
cache: 'no-store',
|
298 |
} );
|
299 |
|
300 |
yield receiveCart( response );
|
|
|
301 |
} catch ( error ) {
|
302 |
yield receiveError( error );
|
303 |
|
341 |
} );
|
342 |
|
343 |
yield receiveCart( response );
|
|
|
344 |
} catch ( error ) {
|
345 |
yield receiveError( error );
|
346 |
|
452 |
| typeof removeItemFromCart
|
453 |
| typeof changeCartItemQuantity
|
454 |
| typeof addItemToCart
|
|
|
455 |
>;
|
assets/js/data/cart/controls.js
DELETED
@@ -1,15 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* External dependencies
|
3 |
-
*/
|
4 |
-
import { triggerFragmentRefresh } from '@woocommerce/base-utils';
|
5 |
-
|
6 |
-
/**
|
7 |
-
* Default export for registering the controls with the store.
|
8 |
-
*
|
9 |
-
* @return {Object} An object with the controls to register with the store on the controls property of the registration object.
|
10 |
-
*/
|
11 |
-
export const controls = {
|
12 |
-
UPDATE_LEGACY_CART_FRAGMENTS() {
|
13 |
-
triggerFragmentRefresh();
|
14 |
-
},
|
15 |
-
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/data/cart/index.ts
CHANGED
@@ -12,14 +12,13 @@ import * as selectors from './selectors';
|
|
12 |
import * as actions from './actions';
|
13 |
import * as resolvers from './resolvers';
|
14 |
import reducer, { State } from './reducers';
|
15 |
-
import { controls
|
16 |
-
import { controls } from './controls';
|
17 |
|
18 |
registerStore< State >( STORE_KEY, {
|
19 |
reducer,
|
20 |
actions,
|
21 |
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
22 |
-
controls: { ...dataControls, ...
|
23 |
selectors,
|
24 |
resolvers,
|
25 |
} );
|
12 |
import * as actions from './actions';
|
13 |
import * as resolvers from './resolvers';
|
14 |
import reducer, { State } from './reducers';
|
15 |
+
import { controls } from '../shared-controls';
|
|
|
16 |
|
17 |
registerStore< State >( STORE_KEY, {
|
18 |
reducer,
|
19 |
actions,
|
20 |
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
21 |
+
controls: { ...dataControls, ...controls } as any,
|
22 |
selectors,
|
23 |
resolvers,
|
24 |
} );
|
assets/js/data/shared-controls.ts
CHANGED
@@ -3,17 +3,6 @@
|
|
3 |
*/
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
import triggerFetch, { APIFetchOptions } from '@wordpress/api-fetch';
|
6 |
-
import DataLoader from 'dataloader';
|
7 |
-
import { isWpVersion } from '@woocommerce/settings';
|
8 |
-
|
9 |
-
/**
|
10 |
-
* Internal dependencies
|
11 |
-
*/
|
12 |
-
import {
|
13 |
-
assertBatchResponseIsValid,
|
14 |
-
assertResponseIsValid,
|
15 |
-
ApiResponse,
|
16 |
-
} from './types';
|
17 |
|
18 |
/**
|
19 |
* Dispatched a control action for triggering an api fetch call with no parsing.
|
@@ -27,8 +16,6 @@ export const apiFetchWithHeaders = ( options: APIFetchOptions ) =>
|
|
27 |
options,
|
28 |
} as const );
|
29 |
|
30 |
-
const EMPTY_OBJECT = {};
|
31 |
-
|
32 |
/**
|
33 |
* Error thrown when JSON cannot be parsed.
|
34 |
*/
|
@@ -63,56 +50,6 @@ const setNonceOnFetch = ( headers: Headers ): void => {
|
|
63 |
}
|
64 |
};
|
65 |
|
66 |
-
/**
|
67 |
-
* Trigger a fetch from the API using the batch endpoint.
|
68 |
-
*/
|
69 |
-
const triggerBatchFetch = ( keys: readonly APIFetchOptions[] ) => {
|
70 |
-
return triggerFetch( {
|
71 |
-
path: `/wc/store/batch`,
|
72 |
-
method: 'POST',
|
73 |
-
data: {
|
74 |
-
requests: keys.map( ( request: APIFetchOptions ) => {
|
75 |
-
return {
|
76 |
-
...request,
|
77 |
-
body: request?.data,
|
78 |
-
};
|
79 |
-
} ),
|
80 |
-
},
|
81 |
-
} ).then( ( response: unknown ) => {
|
82 |
-
assertBatchResponseIsValid( response );
|
83 |
-
return keys.map(
|
84 |
-
( key, index: number ) =>
|
85 |
-
response.responses[ index ] || EMPTY_OBJECT
|
86 |
-
);
|
87 |
-
} );
|
88 |
-
};
|
89 |
-
|
90 |
-
/**
|
91 |
-
* In ms, how long we should wait for requests to batch.
|
92 |
-
*
|
93 |
-
* DataLoader collects all requests over this window of time (and as a consequence, adds this amount of latency).
|
94 |
-
*/
|
95 |
-
const triggerBatchFetchDelay = 300;
|
96 |
-
|
97 |
-
/**
|
98 |
-
* DataLoader instance for triggerBatchFetch.
|
99 |
-
*/
|
100 |
-
const triggerBatchFetchLoader = new DataLoader( triggerBatchFetch, {
|
101 |
-
batchScheduleFn: ( callback: () => void ) =>
|
102 |
-
setTimeout( callback, triggerBatchFetchDelay ),
|
103 |
-
cache: false,
|
104 |
-
maxBatchSize: 25,
|
105 |
-
} );
|
106 |
-
|
107 |
-
/**
|
108 |
-
* Trigger a fetch from the API using the batch endpoint.
|
109 |
-
*
|
110 |
-
* @param {APIFetchOptions} request Request object containing API request.
|
111 |
-
*/
|
112 |
-
const batchFetch = async ( request: APIFetchOptions ) => {
|
113 |
-
return await triggerBatchFetchLoader.load( request );
|
114 |
-
};
|
115 |
-
|
116 |
/**
|
117 |
* Default export for registering the controls with the store.
|
118 |
*
|
@@ -124,74 +61,37 @@ export const controls = {
|
|
124 |
options,
|
125 |
}: ReturnType< typeof apiFetchWithHeaders > ): Promise< unknown > => {
|
126 |
return new Promise( ( resolve, reject ) => {
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
|
|
|
|
|
|
|
|
137 |
} )
|
138 |
-
|
139 |
-
|
|
|
|
|
|
|
140 |
.json()
|
141 |
-
.then( (
|
142 |
-
|
143 |
-
response,
|
144 |
-
headers: fetchResponse.headers,
|
145 |
-
} );
|
146 |
-
setNonceOnFetch( fetchResponse.headers );
|
147 |
} )
|
148 |
.catch( () => {
|
149 |
reject( invalidJsonError );
|
150 |
} );
|
151 |
-
}
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
// Parse error response before rejecting it.
|
156 |
-
errorResponse
|
157 |
-
.json()
|
158 |
-
.then( ( error: unknown ) => {
|
159 |
-
reject( error );
|
160 |
-
} )
|
161 |
-
.catch( () => {
|
162 |
-
reject( invalidJsonError );
|
163 |
-
} );
|
164 |
-
} else {
|
165 |
-
reject( errorResponse.message );
|
166 |
-
}
|
167 |
-
} );
|
168 |
-
} else {
|
169 |
-
batchFetch( options )
|
170 |
-
.then( ( response: ApiResponse ) => {
|
171 |
-
assertResponseIsValid( response );
|
172 |
-
|
173 |
-
if ( response.status >= 200 && response.status < 300 ) {
|
174 |
-
resolve( {
|
175 |
-
response: response.body,
|
176 |
-
headers: response.headers,
|
177 |
-
} );
|
178 |
-
setNonceOnFetch( response.headers );
|
179 |
-
}
|
180 |
-
|
181 |
-
// Status code indicates error.
|
182 |
-
throw response;
|
183 |
-
} )
|
184 |
-
.catch( ( errorResponse: ApiResponse ) => {
|
185 |
-
if ( errorResponse.headers ) {
|
186 |
-
setNonceOnFetch( errorResponse.headers );
|
187 |
-
}
|
188 |
-
if ( errorResponse.body ) {
|
189 |
-
reject( errorResponse.body );
|
190 |
-
} else {
|
191 |
-
reject();
|
192 |
-
}
|
193 |
-
} );
|
194 |
-
}
|
195 |
} );
|
196 |
},
|
197 |
};
|
3 |
*/
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
import triggerFetch, { APIFetchOptions } from '@wordpress/api-fetch';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
|
7 |
/**
|
8 |
* Dispatched a control action for triggering an api fetch call with no parsing.
|
16 |
options,
|
17 |
} as const );
|
18 |
|
|
|
|
|
19 |
/**
|
20 |
* Error thrown when JSON cannot be parsed.
|
21 |
*/
|
50 |
}
|
51 |
};
|
52 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
53 |
/**
|
54 |
* Default export for registering the controls with the store.
|
55 |
*
|
61 |
options,
|
62 |
}: ReturnType< typeof apiFetchWithHeaders > ): Promise< unknown > => {
|
63 |
return new Promise( ( resolve, reject ) => {
|
64 |
+
triggerFetch( { ...options, parse: false } )
|
65 |
+
.then( ( fetchResponse ) => {
|
66 |
+
fetchResponse
|
67 |
+
.json()
|
68 |
+
.then( ( response ) => {
|
69 |
+
resolve( {
|
70 |
+
response,
|
71 |
+
headers: fetchResponse.headers,
|
72 |
+
} );
|
73 |
+
setNonceOnFetch( fetchResponse.headers );
|
74 |
+
} )
|
75 |
+
.catch( () => {
|
76 |
+
reject( invalidJsonError );
|
77 |
+
} );
|
78 |
} )
|
79 |
+
.catch( ( errorResponse ) => {
|
80 |
+
setNonceOnFetch( errorResponse.headers );
|
81 |
+
if ( typeof errorResponse.json === 'function' ) {
|
82 |
+
// Parse error response before rejecting it.
|
83 |
+
errorResponse
|
84 |
.json()
|
85 |
+
.then( ( error: unknown ) => {
|
86 |
+
reject( error );
|
|
|
|
|
|
|
|
|
87 |
} )
|
88 |
.catch( () => {
|
89 |
reject( invalidJsonError );
|
90 |
} );
|
91 |
+
} else {
|
92 |
+
reject( errorResponse.message );
|
93 |
+
}
|
94 |
+
} );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
95 |
} );
|
96 |
},
|
97 |
};
|
assets/js/data/types.ts
CHANGED
@@ -6,39 +6,3 @@ export interface ResponseError {
|
|
6 |
[ key: string ]: unknown;
|
7 |
};
|
8 |
}
|
9 |
-
|
10 |
-
export interface ApiResponse {
|
11 |
-
body: Record< string, unknown >;
|
12 |
-
headers: Headers;
|
13 |
-
status: number;
|
14 |
-
}
|
15 |
-
|
16 |
-
export function assertBatchResponseIsValid(
|
17 |
-
response: unknown
|
18 |
-
): asserts response is {
|
19 |
-
responses: ApiResponse[];
|
20 |
-
headers: Headers;
|
21 |
-
} {
|
22 |
-
if (
|
23 |
-
typeof response === 'object' &&
|
24 |
-
response !== null &&
|
25 |
-
response.hasOwnProperty( 'responses' )
|
26 |
-
) {
|
27 |
-
return;
|
28 |
-
}
|
29 |
-
throw new Error( 'Response not valid' );
|
30 |
-
}
|
31 |
-
|
32 |
-
export function assertResponseIsValid(
|
33 |
-
response: unknown
|
34 |
-
): asserts response is ApiResponse {
|
35 |
-
if (
|
36 |
-
typeof response === 'object' &&
|
37 |
-
response !== null &&
|
38 |
-
response.hasOwnProperty( 'body' ) &&
|
39 |
-
response.hasOwnProperty( 'headers' )
|
40 |
-
) {
|
41 |
-
return;
|
42 |
-
}
|
43 |
-
throw new Error( 'Response not valid' );
|
44 |
-
}
|
6 |
[ key: string ]: unknown;
|
7 |
};
|
8 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/editor-components/expandable-search-list-item/expandable-search-list-item.tsx
DELETED
@@ -1,60 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* External dependencies
|
3 |
-
*/
|
4 |
-
import { SearchListItem } from '@woocommerce/components';
|
5 |
-
import { Spinner } from '@wordpress/components';
|
6 |
-
import classNames from 'classnames';
|
7 |
-
|
8 |
-
interface SearchListItem {
|
9 |
-
id: string;
|
10 |
-
}
|
11 |
-
|
12 |
-
interface ExpandableSearchListItemProps {
|
13 |
-
className?: string;
|
14 |
-
item: SearchListItem;
|
15 |
-
isSelected: boolean;
|
16 |
-
isLoading: boolean;
|
17 |
-
onSelect: () => void;
|
18 |
-
disabled: boolean;
|
19 |
-
}
|
20 |
-
|
21 |
-
const ExpandableSearchListItem = ( {
|
22 |
-
className,
|
23 |
-
item,
|
24 |
-
isSelected,
|
25 |
-
isLoading,
|
26 |
-
onSelect,
|
27 |
-
disabled,
|
28 |
-
...rest
|
29 |
-
}: ExpandableSearchListItemProps ): JSX.Element => {
|
30 |
-
return (
|
31 |
-
<>
|
32 |
-
<SearchListItem
|
33 |
-
{ ...rest }
|
34 |
-
key={ item.id }
|
35 |
-
className={ className }
|
36 |
-
isSelected={ isSelected }
|
37 |
-
item={ item }
|
38 |
-
onSelect={ onSelect }
|
39 |
-
isSingle
|
40 |
-
disabled={ disabled }
|
41 |
-
/>
|
42 |
-
{ isSelected && isLoading && (
|
43 |
-
<div
|
44 |
-
key="loading"
|
45 |
-
className={ classNames(
|
46 |
-
'woocommerce-search-list__item',
|
47 |
-
'woocommerce-product-attributes__item',
|
48 |
-
'depth-1',
|
49 |
-
'is-loading',
|
50 |
-
'is-not-active'
|
51 |
-
) }
|
52 |
-
>
|
53 |
-
<Spinner />
|
54 |
-
</div>
|
55 |
-
) }
|
56 |
-
</>
|
57 |
-
);
|
58 |
-
};
|
59 |
-
|
60 |
-
export default ExpandableSearchListItem;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/js/editor-components/grid-layout-control/index.js
CHANGED
@@ -5,6 +5,12 @@ import { __ } from '@wordpress/i18n';
|
|
5 |
import { clamp } from 'lodash';
|
6 |
import PropTypes from 'prop-types';
|
7 |
import { RangeControl, ToggleControl } from '@wordpress/components';
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
|
9 |
/**
|
10 |
* A combination of range controls for product grid layout settings.
|
@@ -14,20 +20,12 @@ import { RangeControl, ToggleControl } from '@wordpress/components';
|
|
14 |
* @param {number} props.rows
|
15 |
* @param {function(any):any} props.setAttributes Setter for block attributes.
|
16 |
* @param {string} props.alignButtons
|
17 |
-
* @param {number} props.minColumns
|
18 |
-
* @param {number} props.maxColumns
|
19 |
-
* @param {number} props.minRows
|
20 |
-
* @param {number} props.maxRows
|
21 |
*/
|
22 |
const GridLayoutControl = ( {
|
23 |
columns,
|
24 |
rows,
|
25 |
setAttributes,
|
26 |
alignButtons,
|
27 |
-
minColumns = 1,
|
28 |
-
maxColumns = 6,
|
29 |
-
minRows = 1,
|
30 |
-
maxRows = 6,
|
31 |
} ) => {
|
32 |
return (
|
33 |
<>
|
@@ -35,25 +33,25 @@ const GridLayoutControl = ( {
|
|
35 |
label={ __( 'Columns', 'woo-gutenberg-products-block' ) }
|
36 |
value={ columns }
|
37 |
onChange={ ( value ) => {
|
38 |
-
const newValue = clamp( value,
|
39 |
setAttributes( {
|
40 |
columns: Number.isNaN( newValue ) ? '' : newValue,
|
41 |
} );
|
42 |
} }
|
43 |
-
min={
|
44 |
-
max={
|
45 |
/>
|
46 |
<RangeControl
|
47 |
label={ __( 'Rows', 'woo-gutenberg-products-block' ) }
|
48 |
value={ rows }
|
49 |
onChange={ ( value ) => {
|
50 |
-
const newValue = clamp( value,
|
51 |
setAttributes( {
|
52 |
rows: Number.isNaN( newValue ) ? '' : newValue,
|
53 |
} );
|
54 |
} }
|
55 |
-
min={
|
56 |
-
max={
|
57 |
/>
|
58 |
<ToggleControl
|
59 |
label={ __(
|
@@ -81,21 +79,24 @@ const GridLayoutControl = ( {
|
|
81 |
};
|
82 |
|
83 |
GridLayoutControl.propTypes = {
|
84 |
-
|
|
|
|
|
85 |
columns: PropTypes.oneOfType( [ PropTypes.number, PropTypes.string ] )
|
86 |
.isRequired,
|
87 |
-
|
|
|
|
|
88 |
rows: PropTypes.oneOfType( [ PropTypes.number, PropTypes.string ] )
|
89 |
.isRequired,
|
90 |
-
|
|
|
|
|
91 |
alignButtons: PropTypes.bool.isRequired,
|
92 |
-
|
|
|
|
|
93 |
setAttributes: PropTypes.func.isRequired,
|
94 |
-
// Min and max constraints.
|
95 |
-
minColumns: PropTypes.number,
|
96 |
-
maxColumns: PropTypes.number,
|
97 |
-
minRows: PropTypes.number,
|
98 |
-
maxRows: PropTypes.number,
|
99 |
};
|
100 |
|
101 |
export default GridLayoutControl;
|
5 |
import { clamp } from 'lodash';
|
6 |
import PropTypes from 'prop-types';
|
7 |
import { RangeControl, ToggleControl } from '@wordpress/components';
|
8 |
+
import {
|
9 |
+
MAX_COLUMNS,
|
10 |
+
MIN_COLUMNS,
|
11 |
+
MAX_ROWS,
|
12 |
+
MIN_ROWS,
|
13 |
+
} from '@woocommerce/block-settings';
|
14 |
|
15 |
/**
|
16 |
* A combination of range controls for product grid layout settings.
|
20 |
* @param {number} props.rows
|
21 |
* @param {function(any):any} props.setAttributes Setter for block attributes.
|
22 |
* @param {string} props.alignButtons
|
|
|
|
|
|
|
|
|
23 |
*/
|
24 |
const GridLayoutControl = ( {
|
25 |
columns,
|
26 |
rows,
|
27 |
setAttributes,
|
28 |
alignButtons,
|
|
|
|
|
|
|
|
|
29 |
} ) => {
|
30 |
return (
|
31 |
<>
|
33 |
label={ __( 'Columns', 'woo-gutenberg-products-block' ) }
|
34 |
value={ columns }
|
35 |
onChange={ ( value ) => {
|
36 |
+
const newValue = clamp( value, MIN_COLUMNS, MAX_COLUMNS );
|
37 |
setAttributes( {
|
38 |
columns: Number.isNaN( newValue ) ? '' : newValue,
|
39 |
} );
|
40 |
} }
|
41 |
+
min={ MIN_COLUMNS }
|
42 |
+
max={ MAX_COLUMNS }
|
43 |
/>
|
44 |
<RangeControl
|
45 |
label={ __( 'Rows', 'woo-gutenberg-products-block' ) }
|
46 |
value={ rows }
|
47 |
onChange={ ( value ) => {
|
48 |
+
const newValue = clamp( value, MIN_ROWS, MAX_ROWS );
|
49 |
setAttributes( {
|
50 |
rows: Number.isNaN( newValue ) ? '' : newValue,
|
51 |
} );
|
52 |
} }
|
53 |
+
min={ MIN_ROWS }
|
54 |
+
max={ MAX_ROWS }
|
55 |
/>
|
56 |
<ToggleControl
|
57 |
label={ __(
|
79 |
};
|
80 |
|
81 |
GridLayoutControl.propTypes = {
|
82 |
+
/**
|
83 |
+
* The current columns count.
|
84 |
+
*/
|
85 |
columns: PropTypes.oneOfType( [ PropTypes.number, PropTypes.string ] )
|
86 |
.isRequired,
|
87 |
+
/**
|
88 |
+
* The current rows count.
|
89 |
+
*/
|
90 |
rows: PropTypes.oneOfType( [ PropTypes.number, PropTypes.string ] )
|
91 |
.isRequired,
|
92 |
+
/**
|
93 |
+
* Whether or not buttons are aligned horizontally across items.
|
94 |
+
*/
|
95 |
alignButtons: PropTypes.bool.isRequired,
|
96 |
+
/**
|
97 |
+
* Callback to update the layout settings.
|
98 |
+
*/
|
99 |
setAttributes: PropTypes.func.isRequired,
|
|
|
|
|
|
|
|
|
|
|
100 |
};
|
101 |
|
102 |
export default GridLayoutControl;
|
assets/js/editor-components/product-attribute-term-control/index.js
CHANGED
@@ -2,14 +2,12 @@
|
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { __, _n, sprintf } from '@wordpress/i18n';
|
|
|
5 |
import PropTypes from 'prop-types';
|
6 |
import { SearchListControl, SearchListItem } from '@woocommerce/components';
|
7 |
-
import { SelectControl } from '@wordpress/components';
|
8 |
-
import { withInstanceId } from '@wordpress/compose';
|
9 |
import { withAttributes } from '@woocommerce/block-hocs';
|
10 |
import ErrorMessage from '@woocommerce/editor-components/error-placeholder/error-message.js';
|
11 |
-
import classNames from 'classnames';
|
12 |
-
import ExpandableSearchListItem from '@woocommerce/editor-components/expandable-search-list-item/expandable-search-list-item.tsx';
|
13 |
|
14 |
/**
|
15 |
* Internal dependencies
|
@@ -23,54 +21,43 @@ const ProductAttributeTermControl = ( {
|
|
23 |
onChange,
|
24 |
onExpandAttribute,
|
25 |
onOperatorChange,
|
26 |
-
instanceId,
|
27 |
-
isCompact,
|
28 |
isLoading,
|
29 |
operator,
|
30 |
selected,
|
31 |
termsAreLoading,
|
32 |
termsList,
|
33 |
} ) => {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
34 |
const renderItem = ( args ) => {
|
35 |
const { item, search, depth = 0 } = args;
|
36 |
const classes = [
|
37 |
'woocommerce-product-attributes__item',
|
38 |
'woocommerce-search-list__item',
|
39 |
-
{
|
40 |
-
'is-searching': search.length > 0,
|
41 |
-
'is-skip-level': depth === 0 && item.parent !== 0,
|
42 |
-
},
|
43 |
];
|
|
|
|
|
|
|
|
|
|
|
|
|
44 |
|
45 |
if ( ! item.breadcrumbs.length ) {
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
{ ...args }
|
50 |
-
className={
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
item={ item }
|
55 |
-
isLoading={ termsAreLoading }
|
56 |
disabled={ item.count === '0' }
|
57 |
-
|
58 |
-
return () => {
|
59 |
-
onChange( [] );
|
60 |
-
onExpandAttribute( id );
|
61 |
-
};
|
62 |
-
} }
|
63 |
-
name={ `attributes-${ instanceId }` }
|
64 |
-
countLabel={ sprintf(
|
65 |
-
/* translators: %d is the count of terms. */
|
66 |
-
_n(
|
67 |
-
'%d term',
|
68 |
-
'%d terms',
|
69 |
-
item.count,
|
70 |
-
'woo-gutenberg-products-block'
|
71 |
-
),
|
72 |
-
item.count
|
73 |
-
) }
|
74 |
aria-label={ sprintf(
|
75 |
/* translators: %1$s is the item name, %2$d is the count of terms for the item. */
|
76 |
_n(
|
@@ -82,38 +69,27 @@ const ProductAttributeTermControl = ( {
|
|
82 |
item.name,
|
83 |
item.count
|
84 |
) }
|
85 |
-
|
86 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
87 |
}
|
88 |
|
89 |
-
const itemName = `${ item.breadcrumbs[ 0 ] }: ${ item.name }`;
|
90 |
-
|
91 |
return (
|
92 |
<SearchListItem
|
|
|
93 |
{ ...args }
|
94 |
-
|
95 |
-
|
96 |
-
countLabel={ sprintf(
|
97 |
-
/* translators: %d is the count of products. */
|
98 |
-
_n(
|
99 |
-
'%d product',
|
100 |
-
'%d products',
|
101 |
-
item.count,
|
102 |
-
'woo-gutenberg-products-block'
|
103 |
-
),
|
104 |
-
item.count
|
105 |
-
) }
|
106 |
-
aria-label={ sprintf(
|
107 |
-
/* translators: %1$s is the attribute name, %2$d is the count of products for that attribute. */
|
108 |
-
_n(
|
109 |
-
'%1$s, has %2$d product',
|
110 |
-
'%1$s, has %2$d products',
|
111 |
-
item.count,
|
112 |
-
'woo-gutenberg-products-block'
|
113 |
-
),
|
114 |
-
itemName,
|
115 |
-
item.count
|
116 |
-
) }
|
117 |
/>
|
118 |
);
|
119 |
};
|
@@ -163,16 +139,11 @@ const ProductAttributeTermControl = ( {
|
|
163 |
list={ currentList }
|
164 |
isLoading={ isLoading }
|
165 |
selected={ selected
|
166 |
-
.map( ( { id } ) =>
|
167 |
-
currentList.find(
|
168 |
-
( currentListItem ) => currentListItem.id === id
|
169 |
-
)
|
170 |
-
)
|
171 |
.filter( Boolean ) }
|
172 |
onChange={ onChange }
|
173 |
renderItem={ renderItem }
|
174 |
messages={ messages }
|
175 |
-
isCompact={ isCompact }
|
176 |
isHierarchical
|
177 |
/>
|
178 |
{ !! onOperatorChange && (
|
@@ -238,15 +209,13 @@ ProductAttributeTermControl.propTypes = {
|
|
238 |
error: PropTypes.object,
|
239 |
expandedAttribute: PropTypes.number,
|
240 |
onExpandAttribute: PropTypes.func,
|
241 |
-
isCompact: PropTypes.bool,
|
242 |
isLoading: PropTypes.bool,
|
243 |
termsAreLoading: PropTypes.bool,
|
244 |
termsList: PropTypes.object,
|
245 |
};
|
246 |
|
247 |
ProductAttributeTermControl.defaultProps = {
|
248 |
-
isCompact: false,
|
249 |
operator: 'any',
|
250 |
};
|
251 |
|
252 |
-
export default withAttributes(
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { __, _n, sprintf } from '@wordpress/i18n';
|
5 |
+
import { find } from 'lodash';
|
6 |
import PropTypes from 'prop-types';
|
7 |
import { SearchListControl, SearchListItem } from '@woocommerce/components';
|
8 |
+
import { SelectControl, Spinner } from '@wordpress/components';
|
|
|
9 |
import { withAttributes } from '@woocommerce/block-hocs';
|
10 |
import ErrorMessage from '@woocommerce/editor-components/error-placeholder/error-message.js';
|
|
|
|
|
11 |
|
12 |
/**
|
13 |
* Internal dependencies
|
21 |
onChange,
|
22 |
onExpandAttribute,
|
23 |
onOperatorChange,
|
|
|
|
|
24 |
isLoading,
|
25 |
operator,
|
26 |
selected,
|
27 |
termsAreLoading,
|
28 |
termsList,
|
29 |
} ) => {
|
30 |
+
const onSelectAttribute = ( item ) => {
|
31 |
+
return () => {
|
32 |
+
onChange( [] );
|
33 |
+
onExpandAttribute( item.id );
|
34 |
+
};
|
35 |
+
};
|
36 |
+
|
37 |
const renderItem = ( args ) => {
|
38 |
const { item, search, depth = 0 } = args;
|
39 |
const classes = [
|
40 |
'woocommerce-product-attributes__item',
|
41 |
'woocommerce-search-list__item',
|
|
|
|
|
|
|
|
|
42 |
];
|
43 |
+
if ( search.length ) {
|
44 |
+
classes.push( 'is-searching' );
|
45 |
+
}
|
46 |
+
if ( depth === 0 && item.parent ) {
|
47 |
+
classes.push( 'is-skip-level' );
|
48 |
+
}
|
49 |
|
50 |
if ( ! item.breadcrumbs.length ) {
|
51 |
+
return [
|
52 |
+
<SearchListItem
|
53 |
+
key={ `attr-${ item.id }` }
|
54 |
{ ...args }
|
55 |
+
className={ classes.join( ' ' ) }
|
56 |
+
isSelected={ expandedAttribute === item.id }
|
57 |
+
onSelect={ onSelectAttribute }
|
58 |
+
isSingle
|
|
|
|
|
59 |
disabled={ item.count === '0' }
|
60 |
+
aria-expanded={ expandedAttribute === item.id }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
61 |
aria-label={ sprintf(
|
62 |
/* translators: %1$s is the item name, %2$d is the count of terms for the item. */
|
63 |
_n(
|
69 |
item.name,
|
70 |
item.count
|
71 |
) }
|
72 |
+
/>,
|
73 |
+
expandedAttribute === item.id && termsAreLoading && (
|
74 |
+
<div
|
75 |
+
key="loading"
|
76 |
+
className={
|
77 |
+
'woocommerce-search-list__item woocommerce-product-attributes__item' +
|
78 |
+
'depth-1 is-loading is-not-active'
|
79 |
+
}
|
80 |
+
>
|
81 |
+
<Spinner />
|
82 |
+
</div>
|
83 |
+
),
|
84 |
+
];
|
85 |
}
|
86 |
|
|
|
|
|
87 |
return (
|
88 |
<SearchListItem
|
89 |
+
className={ classes.join( ' ' ) }
|
90 |
{ ...args }
|
91 |
+
showCount
|
92 |
+
aria-label={ `${ item.breadcrumbs[ 0 ] }: ${ item.name }` }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
93 |
/>
|
94 |
);
|
95 |
};
|
139 |
list={ currentList }
|
140 |
isLoading={ isLoading }
|
141 |
selected={ selected
|
142 |
+
.map( ( { id } ) => find( currentList, { id } ) )
|
|
|
|
|
|
|
|
|
143 |
.filter( Boolean ) }
|
144 |
onChange={ onChange }
|
145 |
renderItem={ renderItem }
|
146 |
messages={ messages }
|
|
|
147 |
isHierarchical
|
148 |
/>
|
149 |
{ !! onOperatorChange && (
|
209 |
error: PropTypes.object,
|
210 |
expandedAttribute: PropTypes.number,
|
211 |
onExpandAttribute: PropTypes.func,
|
|
|
212 |
isLoading: PropTypes.bool,
|
213 |
termsAreLoading: PropTypes.bool,
|
214 |
termsList: PropTypes.object,
|
215 |
};
|
216 |
|
217 |
ProductAttributeTermControl.defaultProps = {
|
|
|
218 |
operator: 'any',
|
219 |
};
|
220 |
|
221 |
+
export default withAttributes( ProductAttributeTermControl );
|
assets/js/editor-components/product-attribute-term-control/style.scss
CHANGED
@@ -9,6 +9,17 @@
|
|
9 |
}
|
10 |
}
|
11 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12 |
.woocommerce-search-list__item.woocommerce-product-attributes__item {
|
13 |
&.is-searching,
|
14 |
&.is-skip-level {
|
@@ -44,7 +55,7 @@
|
|
44 |
background-size: contain;
|
45 |
}
|
46 |
|
47 |
-
&.depth-0
|
48 |
background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z" fill="#{encode-color($gray-700)}" /></svg>');
|
49 |
}
|
50 |
|
9 |
}
|
10 |
}
|
11 |
|
12 |
+
.components-panel {
|
13 |
+
.woocommerce-product-attributes__operator.components-base-control {
|
14 |
+
margin-top: $gap;
|
15 |
+
|
16 |
+
.components-select-control__input {
|
17 |
+
margin-left: 0;
|
18 |
+
min-width: 100%;
|
19 |
+
}
|
20 |
+
}
|
21 |
+
}
|
22 |
+
|
23 |
.woocommerce-search-list__item.woocommerce-product-attributes__item {
|
24 |
&.is-searching,
|
25 |
&.is-skip-level {
|
55 |
background-size: contain;
|
56 |
}
|
57 |
|
58 |
+
&.depth-0[aria-expanded="true"]::after {
|
59 |
background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z" fill="#{encode-color($gray-700)}" /></svg>');
|
60 |
}
|
61 |
|
assets/js/editor-components/product-category-control/index.js
CHANGED
@@ -2,12 +2,12 @@
|
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { __, _n, sprintf } from '@wordpress/i18n';
|
|
|
5 |
import PropTypes from 'prop-types';
|
6 |
import { SearchListControl, SearchListItem } from '@woocommerce/components';
|
7 |
import { SelectControl } from '@wordpress/components';
|
8 |
import { withCategories } from '@woocommerce/block-hocs';
|
9 |
import ErrorMessage from '@woocommerce/editor-components/error-placeholder/error-message.js';
|
10 |
-
import classNames from 'classnames';
|
11 |
|
12 |
/**
|
13 |
* Internal dependencies
|
@@ -22,12 +22,18 @@ const ProductCategoryControl = ( {
|
|
22 |
onOperatorChange,
|
23 |
operator,
|
24 |
selected,
|
25 |
-
isCompact,
|
26 |
isSingle,
|
27 |
showReviewCount,
|
28 |
} ) => {
|
29 |
const renderItem = ( args ) => {
|
30 |
const { item, search, depth = 0 } = args;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
|
32 |
const accessibleName = ! item.breadcrumbs.length
|
33 |
? item.name
|
@@ -61,8 +67,8 @@ const ProductCategoryControl = ( {
|
|
61 |
? sprintf(
|
62 |
/* translators: %d is the count of reviews. */
|
63 |
_n(
|
64 |
-
'%d
|
65 |
-
'%d
|
66 |
item.review_count,
|
67 |
'woo-gutenberg-products-block'
|
68 |
),
|
@@ -71,8 +77,8 @@ const ProductCategoryControl = ( {
|
|
71 |
: sprintf(
|
72 |
/* translators: %d is the count of products. */
|
73 |
_n(
|
74 |
-
'%d
|
75 |
-
'%d
|
76 |
item.count,
|
77 |
'woo-gutenberg-products-block'
|
78 |
),
|
@@ -80,15 +86,9 @@ const ProductCategoryControl = ( {
|
|
80 |
);
|
81 |
return (
|
82 |
<SearchListItem
|
83 |
-
className={
|
84 |
-
'woocommerce-product-categories__item',
|
85 |
-
'has-count',
|
86 |
-
{
|
87 |
-
'is-searching': search.length > 0,
|
88 |
-
'is-skip-level': depth === 0 && item.parent !== 0,
|
89 |
-
}
|
90 |
-
) }
|
91 |
{ ...args }
|
|
|
92 |
countLabel={ listItemCountLabel }
|
93 |
aria-label={ listItemAriaLabel }
|
94 |
/>
|
@@ -137,14 +137,11 @@ const ProductCategoryControl = ( {
|
|
137 |
list={ categories }
|
138 |
isLoading={ isLoading }
|
139 |
selected={ selected
|
140 |
-
.map( ( id ) =>
|
141 |
-
categories.find( ( category ) => category.id === id )
|
142 |
-
)
|
143 |
.filter( Boolean ) }
|
144 |
onChange={ onChange }
|
145 |
renderItem={ renderItem }
|
146 |
messages={ messages }
|
147 |
-
isCompact={ isCompact }
|
148 |
isHierarchical
|
149 |
isSingle={ isSingle }
|
150 |
/>
|
@@ -206,7 +203,6 @@ ProductCategoryControl.propTypes = {
|
|
206 |
* The list of currently selected category IDs.
|
207 |
*/
|
208 |
selected: PropTypes.array.isRequired,
|
209 |
-
isCompact: PropTypes.bool,
|
210 |
/**
|
211 |
* Allow only a single selection. Defaults to false.
|
212 |
*/
|
@@ -215,7 +211,6 @@ ProductCategoryControl.propTypes = {
|
|
215 |
|
216 |
ProductCategoryControl.defaultProps = {
|
217 |
operator: 'any',
|
218 |
-
isCompact: false,
|
219 |
isSingle: false,
|
220 |
};
|
221 |
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { __, _n, sprintf } from '@wordpress/i18n';
|
5 |
+
import { find } from 'lodash';
|
6 |
import PropTypes from 'prop-types';
|
7 |
import { SearchListControl, SearchListItem } from '@woocommerce/components';
|
8 |
import { SelectControl } from '@wordpress/components';
|
9 |
import { withCategories } from '@woocommerce/block-hocs';
|
10 |
import ErrorMessage from '@woocommerce/editor-components/error-placeholder/error-message.js';
|
|
|
11 |
|
12 |
/**
|
13 |
* Internal dependencies
|
22 |
onOperatorChange,
|
23 |
operator,
|
24 |
selected,
|
|
|
25 |
isSingle,
|
26 |
showReviewCount,
|
27 |
} ) => {
|
28 |
const renderItem = ( args ) => {
|
29 |
const { item, search, depth = 0 } = args;
|
30 |
+
const classes = [ 'woocommerce-product-categories__item' ];
|
31 |
+
if ( search.length ) {
|
32 |
+
classes.push( 'is-searching' );
|
33 |
+
}
|
34 |
+
if ( depth === 0 && item.parent !== 0 ) {
|
35 |
+
classes.push( 'is-skip-level' );
|
36 |
+
}
|
37 |
|
38 |
const accessibleName = ! item.breadcrumbs.length
|
39 |
? item.name
|
67 |
? sprintf(
|
68 |
/* translators: %d is the count of reviews. */
|
69 |
_n(
|
70 |
+
'%d Review',
|
71 |
+
'%d Reviews',
|
72 |
item.review_count,
|
73 |
'woo-gutenberg-products-block'
|
74 |
),
|
77 |
: sprintf(
|
78 |
/* translators: %d is the count of products. */
|
79 |
_n(
|
80 |
+
'%d Product',
|
81 |
+
'%d Products',
|
82 |
item.count,
|
83 |
'woo-gutenberg-products-block'
|
84 |
),
|
86 |
);
|
87 |
return (
|
88 |
<SearchListItem
|
89 |
+
className={ classes.join( ' ' ) }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
90 |
{ ...args }
|
91 |
+
showCount
|
92 |
countLabel={ listItemCountLabel }
|
93 |
aria-label={ listItemAriaLabel }
|
94 |
/>
|
137 |
list={ categories }
|
138 |
isLoading={ isLoading }
|
139 |
selected={ selected
|
140 |
+
.map( ( id ) => find( categories, { id } ) )
|
|
|
|
|
141 |
.filter( Boolean ) }
|
142 |
onChange={ onChange }
|
143 |
renderItem={ renderItem }
|
144 |
messages={ messages }
|
|
|
145 |
isHierarchical
|
146 |
isSingle={ isSingle }
|
147 |
/>
|
203 |
* The list of currently selected category IDs.
|
204 |
*/
|
205 |
selected: PropTypes.array.isRequired,
|
|
|
206 |
/**
|
207 |
* Allow only a single selection. Defaults to false.
|
208 |
*/
|
211 |
|
212 |
ProductCategoryControl.defaultProps = {
|
213 |
operator: 'any',
|
|
|
214 |
isSingle: false,
|
215 |
};
|
216 |
|
assets/js/editor-components/product-category-control/style.scss
CHANGED
@@ -8,3 +8,14 @@
|
|
8 |
margin-right: 0.5em;
|
9 |
}
|
10 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
margin-right: 0.5em;
|
9 |
}
|
10 |
}
|
11 |
+
|
12 |
+
.components-panel {
|
13 |
+
.woocommerce-product-categories__operator.components-base-control {
|
14 |
+
margin-top: $gap;
|
15 |
+
|
16 |
+
.components-select-control__input {
|
17 |
+
margin-left: 0;
|
18 |
+
min-width: 100%;
|
19 |
+
}
|
20 |
+
}
|
21 |
+
}
|
assets/js/editor-components/product-control/index.js
CHANGED
@@ -2,24 +2,40 @@
|
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { __, _n, sprintf } from '@wordpress/i18n';
|
5 |
-
import { isEmpty } from 'lodash';
|
6 |
import PropTypes from 'prop-types';
|
7 |
import { SearchListControl, SearchListItem } from '@woocommerce/components';
|
8 |
-
import {
|
|
|
9 |
import {
|
10 |
withProductVariations,
|
11 |
withSearchedProducts,
|
12 |
withTransformSingleSelectToMultipleSelect,
|
13 |
} from '@woocommerce/block-hocs';
|
|
|
14 |
import ErrorMessage from '@woocommerce/editor-components/error-placeholder/error-message.js';
|
15 |
-
import classNames from 'classnames';
|
16 |
-
import ExpandableSearchListItem from '@woocommerce/editor-components/expandable-search-list-item/expandable-search-list-item.tsx';
|
17 |
|
18 |
/**
|
19 |
* Internal dependencies
|
20 |
*/
|
21 |
import './style.scss';
|
22 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
23 |
const messages = {
|
24 |
list: __( 'Products', 'woo-gutenberg-products-block' ),
|
25 |
noItems: __(
|
@@ -39,8 +55,6 @@ const messages = {
|
|
39 |
const ProductControl = ( {
|
40 |
expandedProduct,
|
41 |
error,
|
42 |
-
instanceId,
|
43 |
-
isCompact,
|
44 |
isLoading,
|
45 |
onChange,
|
46 |
onSearch,
|
@@ -57,11 +71,10 @@ const ProductControl = ( {
|
|
57 |
item.variations && Array.isArray( item.variations )
|
58 |
? item.variations.length
|
59 |
: 0;
|
60 |
-
const classes =
|
61 |
'woocommerce-search-product__item',
|
62 |
'woocommerce-search-list__item',
|
63 |
`depth-${ depth }`,
|
64 |
-
'has-count',
|
65 |
{
|
66 |
'is-searching': search.length > 0,
|
67 |
'is-skip-level': depth === 0 && item.parent !== 0,
|
@@ -69,66 +82,89 @@ const ProductControl = ( {
|
|
69 |
}
|
70 |
);
|
71 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
72 |
// Top level items custom rendering based on SearchListItem.
|
73 |
if ( ! item.breadcrumbs.length ) {
|
74 |
-
return
|
75 |
-
<
|
76 |
-
{
|
77 |
-
className={ classNames( classes, {
|
78 |
-
'is-selected': isSelected,
|
79 |
-
} ) }
|
80 |
isSelected={ isSelected }
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
} }
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
114 |
}
|
115 |
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
...args,
|
120 |
-
item: {
|
121 |
-
...args.item,
|
122 |
-
name: item.variation,
|
123 |
-
},
|
124 |
-
'aria-label': `${ item.breadcrumbs[ 0 ] }: ${ item.variation }`,
|
125 |
-
};
|
126 |
|
127 |
return (
|
128 |
<SearchListItem
|
129 |
-
{ ...itemArgs }
|
130 |
className={ classes }
|
131 |
-
|
|
|
132 |
/>
|
133 |
);
|
134 |
};
|
@@ -156,7 +192,6 @@ const ProductControl = ( {
|
|
156 |
<SearchListControl
|
157 |
className="woocommerce-products"
|
158 |
list={ currentList }
|
159 |
-
isCompact={ isCompact }
|
160 |
isLoading={ isLoading }
|
161 |
isSingle
|
162 |
selected={ currentList.filter( ( { id } ) =>
|
@@ -176,7 +211,6 @@ ProductControl.propTypes = {
|
|
176 |
* Callback to update the selected products.
|
177 |
*/
|
178 |
onChange: PropTypes.func.isRequired,
|
179 |
-
isCompact: PropTypes.bool,
|
180 |
/**
|
181 |
* The ID of the currently expanded product.
|
182 |
*/
|
@@ -204,14 +238,11 @@ ProductControl.propTypes = {
|
|
204 |
};
|
205 |
|
206 |
ProductControl.defaultProps = {
|
207 |
-
isCompact: false,
|
208 |
expandedProduct: null,
|
209 |
selected: [],
|
210 |
showVariations: false,
|
211 |
};
|
212 |
|
213 |
export default withTransformSingleSelectToMultipleSelect(
|
214 |
-
withSearchedProducts(
|
215 |
-
withProductVariations( withInstanceId( ProductControl ) )
|
216 |
-
)
|
217 |
);
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { __, _n, sprintf } from '@wordpress/i18n';
|
5 |
+
import { escapeRegExp, isEmpty } from 'lodash';
|
6 |
import PropTypes from 'prop-types';
|
7 |
import { SearchListControl, SearchListItem } from '@woocommerce/components';
|
8 |
+
import { Spinner, MenuItem } from '@wordpress/components';
|
9 |
+
import classnames from 'classnames';
|
10 |
import {
|
11 |
withProductVariations,
|
12 |
withSearchedProducts,
|
13 |
withTransformSingleSelectToMultipleSelect,
|
14 |
} from '@woocommerce/block-hocs';
|
15 |
+
import { Icon, radioSelected, radioUnselected } from '@woocommerce/icons';
|
16 |
import ErrorMessage from '@woocommerce/editor-components/error-placeholder/error-message.js';
|
|
|
|
|
17 |
|
18 |
/**
|
19 |
* Internal dependencies
|
20 |
*/
|
21 |
import './style.scss';
|
22 |
|
23 |
+
function getHighlightedName( name, search ) {
|
24 |
+
if ( ! search ) {
|
25 |
+
return name;
|
26 |
+
}
|
27 |
+
const re = new RegExp( escapeRegExp( search ), 'ig' );
|
28 |
+
return name.replace( re, '<strong>$&</strong>' );
|
29 |
+
}
|
30 |
+
|
31 |
+
const getInteractionIcon = ( isSelected = false ) => {
|
32 |
+
return isSelected ? (
|
33 |
+
<Icon srcElement={ radioSelected } />
|
34 |
+
) : (
|
35 |
+
<Icon srcElement={ radioUnselected } />
|
36 |
+
);
|
37 |
+
};
|
38 |
+
|
39 |
const messages = {
|
40 |
list: __( 'Products', 'woo-gutenberg-products-block' ),
|
41 |
noItems: __(
|
55 |
const ProductControl = ( {
|
56 |
expandedProduct,
|
57 |
error,
|
|
|
|
|
58 |
isLoading,
|
59 |
onChange,
|
60 |
onSearch,
|
71 |
item.variations && Array.isArray( item.variations )
|
72 |
? item.variations.length
|
73 |
: 0;
|
74 |
+
const classes = classnames(
|
75 |
'woocommerce-search-product__item',
|
76 |
'woocommerce-search-list__item',
|
77 |
`depth-${ depth }`,
|
|
|
78 |
{
|
79 |
'is-searching': search.length > 0,
|
80 |
'is-skip-level': depth === 0 && item.parent !== 0,
|
82 |
}
|
83 |
);
|
84 |
|
85 |
+
const itemArgs = Object.assign( {}, args );
|
86 |
+
delete itemArgs.isSingle;
|
87 |
+
|
88 |
+
const a11yProps = {
|
89 |
+
role: 'menuitemradio',
|
90 |
+
};
|
91 |
+
|
92 |
+
if ( item.breadcrumbs.length ) {
|
93 |
+
a11yProps[
|
94 |
+
'aria-label'
|
95 |
+
] = `${ item.breadcrumbs[ 0 ] }: ${ item.name }`;
|
96 |
+
}
|
97 |
+
|
98 |
+
if ( variationsCount ) {
|
99 |
+
a11yProps[ 'aria-expanded' ] = item.id === expandedProduct;
|
100 |
+
}
|
101 |
+
|
102 |
// Top level items custom rendering based on SearchListItem.
|
103 |
if ( ! item.breadcrumbs.length ) {
|
104 |
+
return [
|
105 |
+
<MenuItem
|
106 |
+
key={ `product-${ item.id }` }
|
|
|
|
|
|
|
107 |
isSelected={ isSelected }
|
108 |
+
{ ...itemArgs }
|
109 |
+
{ ...a11yProps }
|
110 |
+
className={ classes }
|
111 |
+
onClick={ () => {
|
112 |
+
onSelect( item )();
|
113 |
} }
|
114 |
+
>
|
115 |
+
<span className="woocommerce-search-list__item-state">
|
116 |
+
{ getInteractionIcon( isSelected ) }
|
117 |
+
</span>
|
118 |
+
|
119 |
+
<span className="woocommerce-search-list__item-label">
|
120 |
+
<span
|
121 |
+
className="woocommerce-search-list__item-name"
|
122 |
+
dangerouslySetInnerHTML={ {
|
123 |
+
__html: getHighlightedName( item.name, search ),
|
124 |
+
} }
|
125 |
+
/>
|
126 |
+
</span>
|
127 |
+
|
128 |
+
{ variationsCount ? (
|
129 |
+
<span className="woocommerce-search-list__item-variation-count">
|
130 |
+
{ sprintf(
|
131 |
+
/* translators: %d is the count of variations. */
|
132 |
+
_n(
|
133 |
+
'%d variation',
|
134 |
+
'%d variations',
|
135 |
+
variationsCount,
|
136 |
+
'woo-gutenberg-products-block'
|
137 |
+
),
|
138 |
+
variationsCount
|
139 |
+
) }
|
140 |
+
</span>
|
141 |
+
) : null }
|
142 |
+
</MenuItem>,
|
143 |
+
expandedProduct === item.id &&
|
144 |
+
variationsCount > 0 &&
|
145 |
+
variationsLoading && (
|
146 |
+
<div
|
147 |
+
key="loading"
|
148 |
+
className={
|
149 |
+
'woocommerce-search-list__item woocommerce-search-product__item' +
|
150 |
+
'depth-1 is-loading is-not-active'
|
151 |
+
}
|
152 |
+
>
|
153 |
+
<Spinner />
|
154 |
+
</div>
|
155 |
+
),
|
156 |
+
];
|
157 |
}
|
158 |
|
159 |
+
if ( ! isEmpty( item.variation ) ) {
|
160 |
+
item.name = item.variation;
|
161 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
162 |
|
163 |
return (
|
164 |
<SearchListItem
|
|
|
165 |
className={ classes }
|
166 |
+
{ ...args }
|
167 |
+
{ ...a11yProps }
|
168 |
/>
|
169 |
);
|
170 |
};
|
192 |
<SearchListControl
|
193 |
className="woocommerce-products"
|
194 |
list={ currentList }
|
|
|
195 |
isLoading={ isLoading }
|
196 |
isSingle
|
197 |
selected={ currentList.filter( ( { id } ) =>
|
211 |
* Callback to update the selected products.
|
212 |
*/
|
213 |
onChange: PropTypes.func.isRequired,
|
|
|
214 |
/**
|
215 |
* The ID of the currently expanded product.
|
216 |
*/
|
238 |
};
|
239 |
|
240 |
ProductControl.defaultProps = {
|
|
|
241 |
expandedProduct: null,
|
242 |
selected: [],
|
243 |
showVariations: false,
|
244 |
};
|
245 |
|
246 |
export default withTransformSingleSelectToMultipleSelect(
|
247 |
+
withSearchedProducts( withProductVariations( ProductControl ) )
|
|
|
|
|
248 |
);
|
assets/js/editor-components/product-control/style.scss
CHANGED
@@ -39,7 +39,7 @@
|
|
39 |
background-size: contain;
|
40 |
}
|
41 |
|
42 |
-
&.depth-0.is-variable
|
43 |
background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z" fill="#{encode-color($gray-700)}" /></svg>');
|
44 |
}
|
45 |
}
|
39 |
background-size: contain;
|
40 |
}
|
41 |
|
42 |
+
&.depth-0.is-variable[aria-expanded="true"]::after {
|
43 |
background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z" fill="#{encode-color($gray-700)}" /></svg>');
|
44 |
}
|
45 |
}
|
assets/js/editor-components/product-tag-control/index.js
CHANGED
@@ -3,12 +3,11 @@
|
|
3 |
*/
|
4 |
import { __, _n, sprintf } from '@wordpress/i18n';
|
5 |
import { Component } from '@wordpress/element';
|
6 |
-
import { debounce } from 'lodash';
|
7 |
import PropTypes from 'prop-types';
|
8 |
import { SearchListControl, SearchListItem } from '@woocommerce/components';
|
9 |
import { SelectControl } from '@wordpress/components';
|
10 |
-
import {
|
11 |
-
import classNames from 'classnames';
|
12 |
|
13 |
/**
|
14 |
* Internal dependencies
|
@@ -57,6 +56,13 @@ class ProductTagControl extends Component {
|
|
57 |
|
58 |
renderItem( args ) {
|
59 |
const { item, search, depth = 0 } = args;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
60 |
|
61 |
const accessibleName = ! item.breadcrumbs.length
|
62 |
? item.name
|
@@ -64,15 +70,9 @@ class ProductTagControl extends Component {
|
|
64 |
|
65 |
return (
|
66 |
<SearchListItem
|
67 |
-
className={
|
68 |
-
'woocommerce-product-tags__item',
|
69 |
-
'has-count',
|
70 |
-
{
|
71 |
-
'is-searching': search.length > 0,
|
72 |
-
'is-skip-level': depth === 0 && item.parent !== 0,
|
73 |
-
}
|
74 |
-
) }
|
75 |
{ ...args }
|
|
|
76 |
aria-label={ sprintf(
|
77 |
/* translators: %1$d is the count of products, %2$s is the name of the tag. */
|
78 |
_n(
|
@@ -90,13 +90,7 @@ class ProductTagControl extends Component {
|
|
90 |
|
91 |
render() {
|
92 |
const { list, loading } = this.state;
|
93 |
-
const {
|
94 |
-
isCompact,
|
95 |
-
onChange,
|
96 |
-
onOperatorChange,
|
97 |
-
operator,
|
98 |
-
selected,
|
99 |
-
} = this.props;
|
100 |
|
101 |
const messages = {
|
102 |
clear: __(
|
@@ -129,8 +123,6 @@ class ProductTagControl extends Component {
|
|
129 |
),
|
130 |
};
|
131 |
|
132 |
-
const limitTags = getSetting( 'limitTags', false );
|
133 |
-
|
134 |
return (
|
135 |
<>
|
136 |
<SearchListControl
|
@@ -138,15 +130,12 @@ class ProductTagControl extends Component {
|
|
138 |
list={ list }
|
139 |
isLoading={ loading }
|
140 |
selected={ selected
|
141 |
-
.map( ( id ) =>
|
142 |
-
list.find( ( listItem ) => listItem.id === id )
|
143 |
-
)
|
144 |
.filter( Boolean ) }
|
145 |
onChange={ onChange }
|
146 |
-
onSearch={
|
147 |
renderItem={ this.renderItem }
|
148 |
messages={ messages }
|
149 |
-
isCompact={ isCompact }
|
150 |
isHierarchical
|
151 |
/>
|
152 |
{ !! onOperatorChange && (
|
@@ -208,11 +197,9 @@ ProductTagControl.propTypes = {
|
|
208 |
* The list of currently selected tags.
|
209 |
*/
|
210 |
selected: PropTypes.array.isRequired,
|
211 |
-
isCompact: PropTypes.bool,
|
212 |
};
|
213 |
|
214 |
ProductTagControl.defaultProps = {
|
215 |
-
isCompact: false,
|
216 |
operator: 'any',
|
217 |
};
|
218 |
|
3 |
*/
|
4 |
import { __, _n, sprintf } from '@wordpress/i18n';
|
5 |
import { Component } from '@wordpress/element';
|
6 |
+
import { debounce, find } from 'lodash';
|
7 |
import PropTypes from 'prop-types';
|
8 |
import { SearchListControl, SearchListItem } from '@woocommerce/components';
|
9 |
import { SelectControl } from '@wordpress/components';
|
10 |
+
import { LIMIT_TAGS } from '@woocommerce/block-settings';
|
|
|
11 |
|
12 |
/**
|
13 |
* Internal dependencies
|
56 |
|
57 |
renderItem( args ) {
|
58 |
const { item, search, depth = 0 } = args;
|
59 |
+
const classes = [ 'woocommerce-product-tags__item' ];
|
60 |
+
if ( search.length ) {
|
61 |
+
classes.push( 'is-searching' );
|
62 |
+
}
|
63 |
+
if ( depth === 0 && item.parent !== 0 ) {
|
64 |
+
classes.push( 'is-skip-level' );
|
65 |
+
}
|
66 |
|
67 |
const accessibleName = ! item.breadcrumbs.length
|
68 |
? item.name
|
70 |
|
71 |
return (
|
72 |
<SearchListItem
|
73 |
+
className={ classes.join( ' ' ) }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
74 |
{ ...args }
|
75 |
+
showCount
|
76 |
aria-label={ sprintf(
|
77 |
/* translators: %1$d is the count of products, %2$s is the name of the tag. */
|
78 |
_n(
|
90 |
|
91 |
render() {
|
92 |
const { list, loading } = this.state;
|
93 |
+
const { onChange, onOperatorChange, operator, selected } = this.props;
|
|
|
|
|
|
|
|
|
|
|
|
|
94 |
|
95 |
const messages = {
|
96 |
clear: __(
|
123 |
),
|
124 |
};
|
125 |
|
|
|
|
|
126 |
return (
|
127 |
<>
|
128 |
<SearchListControl
|
130 |
list={ list }
|
131 |
isLoading={ loading }
|
132 |
selected={ selected
|
133 |
+
.map( ( id ) => find( list, { id } ) )
|
|
|
|
|
134 |
.filter( Boolean ) }
|
135 |
onChange={ onChange }
|
136 |
+
onSearch={ LIMIT_TAGS ? this.debouncedOnSearch : null }
|
137 |
renderItem={ this.renderItem }
|
138 |
messages={ messages }
|
|
|
139 |
isHierarchical
|
140 |
/>
|
141 |
{ !! onOperatorChange && (
|
197 |
* The list of currently selected tags.
|
198 |
*/
|
199 |
selected: PropTypes.array.isRequired,
|
|
|
200 |
};
|
201 |
|
202 |
ProductTagControl.defaultProps = {
|
|
|
203 |
operator: 'any',
|
204 |
};
|
205 |
|
assets/js/editor-components/product-tag-control/style.scss
CHANGED
@@ -8,3 +8,14 @@
|
|
8 |
margin-right: 0.5em;
|
9 |
}
|
10 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
margin-right: 0.5em;
|
9 |
}
|
10 |
}
|
11 |
+
|
12 |
+
.components-panel {
|
13 |
+
.woocommerce-product-tags__operator.components-base-control {
|
14 |
+
margin-top: $gap;
|
15 |
+
|
16 |
+
.components-select-control__input {
|
17 |
+
margin-left: 0;
|
18 |
+
min-width: 100%;
|
19 |
+
}
|
20 |
+
}
|
21 |
+
}
|
assets/js/editor-components/products-control/index.js
CHANGED
@@ -18,7 +18,6 @@ import ErrorMessage from '@woocommerce/editor-components/error-placeholder/error
|
|
18 |
* @param {Array} props.selected An array of selected products.
|
19 |
* @param {Array} props.products An array of products to select from.
|
20 |
* @param {boolean} props.isLoading Whether or not the products are being loaded.
|
21 |
-
* @param {boolean} props.isCompact Whether or not the control should have compact styles.
|
22 |
*
|
23 |
* @return {Function} A functional component.
|
24 |
*/
|
@@ -29,7 +28,6 @@ const ProductsControl = ( {
|
|
29 |
selected,
|
30 |
products,
|
31 |
isLoading,
|
32 |
-
isCompact,
|
33 |
} ) => {
|
34 |
const messages = {
|
35 |
clear: __( 'Clear all products', 'woo-gutenberg-products-block' ),
|
@@ -66,16 +64,7 @@ const ProductsControl = ( {
|
|
66 |
return (
|
67 |
<SearchListControl
|
68 |
className="woocommerce-products"
|
69 |
-
list={ products
|
70 |
-
const formattedSku = product.sku
|
71 |
-
? ' (' + product.sku + ')'
|
72 |
-
: '';
|
73 |
-
return {
|
74 |
-
...product,
|
75 |
-
name: `${ product.name }${ formattedSku }`,
|
76 |
-
};
|
77 |
-
} ) }
|
78 |
-
isCompact={ isCompact }
|
79 |
isLoading={ isLoading }
|
80 |
selected={ products.filter( ( { id } ) =>
|
81 |
selected.includes( id )
|
@@ -92,14 +81,12 @@ ProductsControl.propTypes = {
|
|
92 |
onSearch: PropTypes.func,
|
93 |
selected: PropTypes.array,
|
94 |
products: PropTypes.array,
|
95 |
-
isCompact: PropTypes.bool,
|
96 |
isLoading: PropTypes.bool,
|
97 |
};
|
98 |
|
99 |
ProductsControl.defaultProps = {
|
100 |
selected: [],
|
101 |
products: [],
|
102 |
-
isCompact: false,
|
103 |
isLoading: true,
|
104 |
};
|
105 |
|
18 |
* @param {Array} props.selected An array of selected products.
|
19 |
* @param {Array} props.products An array of products to select from.
|
20 |
* @param {boolean} props.isLoading Whether or not the products are being loaded.
|
|
|
21 |
*
|
22 |
* @return {Function} A functional component.
|
23 |
*/
|
28 |
selected,
|
29 |
products,
|
30 |
isLoading,
|
|
|
31 |
} ) => {
|
32 |
const messages = {
|
33 |
clear: __( 'Clear all products', 'woo-gutenberg-products-block' ),
|
64 |
return (
|
65 |
<SearchListControl
|
66 |
className="woocommerce-products"
|
67 |
+
list={ products }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
68 |
isLoading={ isLoading }
|
69 |
selected={ products.filter( ( { id } ) =>
|
70 |
selected.includes( id )
|
81 |
onSearch: PropTypes.func,
|
82 |
selected: PropTypes.array,
|
83 |
products: PropTypes.array,
|
|
|
84 |
isLoading: PropTypes.bool,
|
85 |
};
|
86 |
|
87 |
ProductsControl.defaultProps = {
|
88 |
selected: [],
|
89 |
products: [],
|
|
|
90 |
isLoading: true,
|
91 |
};
|
92 |
|
assets/js/editor-components/utils/index.js
CHANGED
@@ -5,8 +5,7 @@
|
|
5 |
import { addQueryArgs } from '@wordpress/url';
|
6 |
import apiFetch from '@wordpress/api-fetch';
|
7 |
import { flatten, uniqBy } from 'lodash';
|
8 |
-
import {
|
9 |
-
import { blocksConfig } from '@woocommerce/block-settings';
|
10 |
|
11 |
/**
|
12 |
* Get product query requests for the Store API.
|
@@ -21,9 +20,8 @@ const getProductsRequests = ( {
|
|
21 |
search = '',
|
22 |
queryArgs = [],
|
23 |
} ) => {
|
24 |
-
const isLargeCatalog = blocksConfig.productCount > 100;
|
25 |
const defaultArgs = {
|
26 |
-
per_page:
|
27 |
catalog_visibility: 'any',
|
28 |
search,
|
29 |
orderby: 'title',
|
@@ -34,7 +32,7 @@ const getProductsRequests = ( {
|
|
34 |
];
|
35 |
|
36 |
// If we have a large catalog, we might not get all selected products in the first page.
|
37 |
-
if (
|
38 |
requests.push(
|
39 |
addQueryArgs( '/wc/store/products', {
|
40 |
catalog_visibility: 'any',
|
@@ -114,18 +112,17 @@ export const getTerms = ( attribute ) => {
|
|
114 |
* @param {string} request.search Search string.
|
115 |
*/
|
116 |
const getProductTagsRequests = ( { selected = [], search } ) => {
|
117 |
-
const limitTags = getSetting( 'limitTags', false );
|
118 |
const requests = [
|
119 |
addQueryArgs( `wc/store/products/tags`, {
|
120 |
-
per_page:
|
121 |
-
orderby:
|
122 |
-
order:
|
123 |
search,
|
124 |
} ),
|
125 |
];
|
126 |
|
127 |
// If we have a large catalog, we might not get all selected products in the first page.
|
128 |
-
if (
|
129 |
requests.push(
|
130 |
addQueryArgs( `wc/store/products/tags`, {
|
131 |
include: selected,
|
5 |
import { addQueryArgs } from '@wordpress/url';
|
6 |
import apiFetch from '@wordpress/api-fetch';
|
7 |
import { flatten, uniqBy } from 'lodash';
|
8 |
+
import { IS_LARGE_CATALOG, LIMIT_TAGS } from '@woocommerce/block-settings';
|
|
|
9 |
|
10 |
/**
|
11 |
* Get product query requests for the Store API.
|
20 |
search = '',
|
21 |
queryArgs = [],
|
22 |
} ) => {
|
|
|
23 |
const defaultArgs = {
|
24 |
+
per_page: IS_LARGE_CATALOG ? 100 : 0,
|
25 |
catalog_visibility: 'any',
|
26 |
search,
|
27 |
orderby: 'title',
|
32 |
];
|
33 |
|
34 |
// If we have a large catalog, we might not get all selected products in the first page.
|
35 |
+
if ( IS_LARGE_CATALOG && selected.length ) {
|
36 |
requests.push(
|
37 |
addQueryArgs( '/wc/store/products', {
|
38 |
catalog_visibility: 'any',
|
112 |
* @param {string} request.search Search string.
|
113 |
*/
|
114 |
const getProductTagsRequests = ( { selected = [], search } ) => {
|
|
|
115 |
const requests = [
|
116 |
addQueryArgs( `wc/store/products/tags`, {
|
117 |
+
per_page: LIMIT_TAGS ? 100 : 0,
|
118 |
+
orderby: LIMIT_TAGS ? 'count' : 'name',
|
119 |
+
order: LIMIT_TAGS ? 'desc' : 'asc',
|
120 |
search,
|
121 |
} ),
|
122 |
];
|
123 |
|
124 |
// If we have a large catalog, we might not get all selected products in the first page.
|
125 |
+
if ( LIMIT_TAGS && selected.length ) {
|
126 |
requests.push(
|
127 |
addQueryArgs( `wc/store/products/tags`, {
|
128 |
include: selected,
|
assets/js/hocs/index.js
CHANGED
@@ -5,5 +5,5 @@ export { default as withProduct } from './with-product';
|
|
5 |
export { default as withProductVariations } from './with-product-variations';
|
6 |
export { default as withSearchedProducts } from './with-searched-products';
|
7 |
export { default as withTransformSingleSelectToMultipleSelect } from './with-transform-single-select-to-multiple-select';
|
8 |
-
export { default as withStoreCartApiHydration } from './with-store-cart-api-hydration';
|
9 |
export { default as withRestApiHydration } from './with-rest-api-hydration';
|
|
5 |
export { default as withProductVariations } from './with-product-variations';
|
6 |
export { default as withSearchedProducts } from './with-searched-products';
|
7 |
export { default as withTransformSingleSelectToMultipleSelect } from './with-transform-single-select-to-multiple-select';
|
|
|
8 |
export { default as withRestApiHydration } from './with-rest-api-hydration';
|
9 |
+
export { default as withStoreCartApiHydration } from './with-store-cart-api-hydration';
|
assets/js/hocs/test/with-categories.js
CHANGED
@@ -97,7 +97,7 @@ describe( 'withCategories Component', () => {
|
|
97 |
expect( formatError ).toHaveBeenCalledTimes( 1 );
|
98 |
expect( props.error ).toEqual( formattedError );
|
99 |
expect( props.isLoading ).toBe( false );
|
100 |
-
expect( props.categories ).
|
101 |
} );
|
102 |
} );
|
103 |
} );
|
97 |
expect( formatError ).toHaveBeenCalledTimes( 1 );
|
98 |
expect( props.error ).toEqual( formattedError );
|
99 |
expect( props.isLoading ).toBe( false );
|
100 |
+
expect( props.categories ).toBeNull();
|
101 |
} );
|
102 |
} );
|
103 |
} );
|
assets/js/hocs/test/with-searched-products.js
CHANGED
@@ -11,13 +11,10 @@ import * as mockUtils from '@woocommerce/editor-components/utils';
|
|
11 |
import withSearchedProducts from '../with-searched-products';
|
12 |
|
13 |
jest.mock( '@woocommerce/block-settings', () => ( {
|
14 |
-
|
15 |
-
blocksConfig: {
|
16 |
-
productCount: 101,
|
17 |
-
},
|
18 |
} ) );
|
19 |
|
20 |
-
// Mock the getProducts values for tests.
|
21 |
mockUtils.getProducts = jest.fn().mockImplementation( () =>
|
22 |
Promise.resolve( [
|
23 |
{ id: 10, name: 'foo', parent: 0 },
|
11 |
import withSearchedProducts from '../with-searched-products';
|
12 |
|
13 |
jest.mock( '@woocommerce/block-settings', () => ( {
|
14 |
+
IS_LARGE_CATALOG: true,
|
|
|
|
|
|
|
15 |
} ) );
|
16 |
|
17 |
+
// Mock the getProducts and isLargeCatalog values for tests.
|
18 |
mockUtils.getProducts = jest.fn().mockImplementation( () =>
|
19 |
Promise.resolve( [
|
20 |
{ id: 10, name: 'foo', parent: 0 },
|
assets/js/hocs/with-categories.js
CHANGED
@@ -22,7 +22,7 @@ const withCategories = createHigherOrderComponent( ( OriginalComponent ) => {
|
|
22 |
this.state = {
|
23 |
error: null,
|
24 |
loading: false,
|
25 |
-
categories:
|
26 |
};
|
27 |
this.loadCategories = this.loadCategories.bind( this );
|
28 |
}
|
@@ -46,7 +46,7 @@ const withCategories = createHigherOrderComponent( ( OriginalComponent ) => {
|
|
46 |
const error = await formatError( e );
|
47 |
|
48 |
this.setState( {
|
49 |
-
categories:
|
50 |
loading: false,
|
51 |
error,
|
52 |
} );
|
22 |
this.state = {
|
23 |
error: null,
|
24 |
loading: false,
|
25 |
+
categories: null,
|
26 |
};
|
27 |
this.loadCategories = this.loadCategories.bind( this );
|
28 |
}
|
46 |
const error = await formatError( e );
|
47 |
|
48 |
this.setState( {
|
49 |
+
categories: null,
|
50 |
loading: false,
|
51 |
error,
|
52 |
} );
|
assets/js/hocs/with-rest-api-hydration.js
CHANGED
@@ -2,15 +2,15 @@
|
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { useRef } from '@wordpress/element';
|
|
|
5 |
import { SCHEMA_STORE_KEY } from '@woocommerce/block-data';
|
6 |
import { useSelect } from '@wordpress/data';
|
7 |
-
import { blocksConfig } from '@woocommerce/block-settings';
|
8 |
|
9 |
/**
|
10 |
* Hydrate Rest API data from settings to reduce the number of API requests needed.
|
11 |
*/
|
12 |
const useRestApiHydration = () => {
|
13 |
-
const restApiRoutes = useRef(
|
14 |
|
15 |
useSelect( ( select, registry ) => {
|
16 |
if ( ! restApiRoutes.current ) {
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { useRef } from '@wordpress/element';
|
5 |
+
import { getSetting } from '@woocommerce/settings';
|
6 |
import { SCHEMA_STORE_KEY } from '@woocommerce/block-data';
|
7 |
import { useSelect } from '@wordpress/data';
|
|
|
8 |
|
9 |
/**
|
10 |
* Hydrate Rest API data from settings to reduce the number of API requests needed.
|
11 |
*/
|
12 |
const useRestApiHydration = () => {
|
13 |
+
const restApiRoutes = useRef( getSetting( 'restApiRoutes' ) );
|
14 |
|
15 |
useSelect( ( select, registry ) => {
|
16 |
if ( ! restApiRoutes.current ) {
|
assets/js/hocs/with-searched-products.js
CHANGED
@@ -5,7 +5,7 @@ import { Component } from '@wordpress/element';
|
|
5 |
import { debounce } from 'lodash';
|
6 |
import { createHigherOrderComponent } from '@wordpress/compose';
|
7 |
import PropTypes from 'prop-types';
|
8 |
-
import {
|
9 |
import { getProducts } from '@woocommerce/editor-components/utils';
|
10 |
|
11 |
/**
|
@@ -80,7 +80,7 @@ const withSearchedProducts = createHigherOrderComponent(
|
|
80 |
products={ list }
|
81 |
isLoading={ loading }
|
82 |
onSearch={
|
83 |
-
|
84 |
? ( search ) => {
|
85 |
this.setState( { loading: true } );
|
86 |
this.debouncedOnSearch( search );
|
5 |
import { debounce } from 'lodash';
|
6 |
import { createHigherOrderComponent } from '@wordpress/compose';
|
7 |
import PropTypes from 'prop-types';
|
8 |
+
import { IS_LARGE_CATALOG } from '@woocommerce/block-settings';
|
9 |
import { getProducts } from '@woocommerce/editor-components/utils';
|
10 |
|
11 |
/**
|
80 |
products={ list }
|
81 |
isLoading={ loading }
|
82 |
onSearch={
|
83 |
+
IS_LARGE_CATALOG
|
84 |
? ( search ) => {
|
85 |
this.setState( { loading: true } );
|
86 |
this.debouncedOnSearch( search );
|
assets/js/hocs/with-store-cart-api-hydration.js
CHANGED
@@ -17,18 +17,13 @@ import { LAST_CART_UPDATE_TIMESTAMP_KEY } from '../data/cart/constants';
|
|
17 |
* Makes cart data available without an API request to wc/store/cart/.
|
18 |
*/
|
19 |
const useStoreCartApiHydration = () => {
|
20 |
-
const
|
21 |
-
getSetting( 'preloadedApiRequests', {} )
|
22 |
-
);
|
23 |
const { setIsCartDataStale } = useDispatch( CART_STORE_KEY );
|
24 |
|
25 |
useSelect( ( select, registry ) => {
|
26 |
-
|
27 |
-
|
28 |
-
if ( ! cartData ) {
|
29 |
return;
|
30 |
}
|
31 |
-
|
32 |
const { isResolving, hasFinishedResolution, isCartDataStale } = select(
|
33 |
CART_STORE_KEY
|
34 |
);
|
@@ -51,7 +46,7 @@ const useStoreCartApiHydration = () => {
|
|
51 |
if ( lastCartUpdateRaw ) {
|
52 |
const lastCartUpdate = parseFloat( lastCartUpdateRaw );
|
53 |
const cartGeneratedTimestamp = parseFloat(
|
54 |
-
cartData.generated_timestamp
|
55 |
);
|
56 |
|
57 |
const needsUpdateFromAPI =
|
@@ -77,10 +72,10 @@ const useStoreCartApiHydration = () => {
|
|
77 |
! hasFinishedResolution( 'getCartData', [] )
|
78 |
) {
|
79 |
startResolution( 'getCartData', [] );
|
80 |
-
if ( cartData?.code?.includes( 'error' ) ) {
|
81 |
-
receiveError( cartData );
|
82 |
} else {
|
83 |
-
receiveCart( cartData );
|
84 |
}
|
85 |
finishResolution( 'getCartData', [] );
|
86 |
}
|
17 |
* Makes cart data available without an API request to wc/store/cart/.
|
18 |
*/
|
19 |
const useStoreCartApiHydration = () => {
|
20 |
+
const cartData = useRef( getSetting( 'cartData' ) );
|
|
|
|
|
21 |
const { setIsCartDataStale } = useDispatch( CART_STORE_KEY );
|
22 |
|
23 |
useSelect( ( select, registry ) => {
|
24 |
+
if ( ! cartData.current ) {
|
|
|
|
|
25 |
return;
|
26 |
}
|
|
|
27 |
const { isResolving, hasFinishedResolution, isCartDataStale } = select(
|
28 |
CART_STORE_KEY
|
29 |
);
|
46 |
if ( lastCartUpdateRaw ) {
|
47 |
const lastCartUpdate = parseFloat( lastCartUpdateRaw );
|
48 |
const cartGeneratedTimestamp = parseFloat(
|
49 |
+
cartData.current.generated_timestamp
|
50 |
);
|
51 |
|
52 |
const needsUpdateFromAPI =
|
72 |
! hasFinishedResolution( 'getCartData', [] )
|
73 |
) {
|
74 |
startResolution( 'getCartData', [] );
|
75 |
+
if ( cartData.current?.code?.includes( 'error' ) ) {
|
76 |
+
receiveError( cartData.current );
|
77 |
} else {
|
78 |
+
receiveCart( cartData.current );
|
79 |
}
|
80 |
finishResolution( 'getCartData', [] );
|
81 |
}
|
assets/js/icons/stories/index.js
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
/**
|
2 |
* External dependencies
|
3 |
*/
|
4 |
-
import { omitBy, omit } from 'lodash';
|
5 |
import { useState } from '@wordpress/element';
|
6 |
|
7 |
/**
|
@@ -22,7 +22,6 @@ const LibraryExample = () => {
|
|
22 |
const filteredIcons = omitBy( availableIcons, ( _icon, name ) => {
|
23 |
return ! name.includes( filter );
|
24 |
} );
|
25 |
-
|
26 |
return (
|
27 |
<div style={ { padding: '20px' } }>
|
28 |
<label htmlFor="filter-icons" style={ { paddingRight: '30px' } }>
|
@@ -40,16 +39,16 @@ const LibraryExample = () => {
|
|
40 |
style={ {
|
41 |
display: 'flex',
|
42 |
alignItems: 'bottom',
|
43 |
-
|
44 |
} }
|
45 |
>
|
46 |
-
{
|
47 |
return (
|
48 |
<div
|
49 |
key={ name }
|
50 |
style={ {
|
51 |
display: 'flex',
|
52 |
-
|
53 |
width: '25%',
|
54 |
padding: '25px 0 25px 0',
|
55 |
} }
|
@@ -69,12 +68,12 @@ const LibraryExample = () => {
|
|
69 |
>
|
70 |
<Icon srcElement={ icon } />
|
71 |
<Icon
|
72 |
-
style={ {
|
73 |
srcElement={ icon }
|
74 |
size={ 36 }
|
75 |
/>
|
76 |
<Icon
|
77 |
-
style={ {
|
78 |
srcElement={ icon }
|
79 |
size={ 48 }
|
80 |
/>
|
1 |
/**
|
2 |
* External dependencies
|
3 |
*/
|
4 |
+
import { omitBy, omit, map } from 'lodash';
|
5 |
import { useState } from '@wordpress/element';
|
6 |
|
7 |
/**
|
22 |
const filteredIcons = omitBy( availableIcons, ( _icon, name ) => {
|
23 |
return ! name.includes( filter );
|
24 |
} );
|
|
|
25 |
return (
|
26 |
<div style={ { padding: '20px' } }>
|
27 |
<label htmlFor="filter-icons" style={ { paddingRight: '30px' } }>
|
39 |
style={ {
|
40 |
display: 'flex',
|
41 |
alignItems: 'bottom',
|
42 |
+
'flex-wrap': 'wrap',
|
43 |
} }
|
44 |
>
|
45 |
+
{ map( filteredIcons, ( icon, name ) => {
|
46 |
return (
|
47 |
<div
|
48 |
key={ name }
|
49 |
style={ {
|
50 |
display: 'flex',
|
51 |
+
'flex-direction': 'column',
|
52 |
width: '25%',
|
53 |
padding: '25px 0 25px 0',
|
54 |
} }
|
68 |
>
|
69 |
<Icon srcElement={ icon } />
|
70 |
<Icon
|
71 |
+
style={ { 'padding-left': '10px' } }
|
72 |
srcElement={ icon }
|
73 |
size={ 36 }
|
74 |
/>
|
75 |
<Icon
|
76 |
+
style={ { 'padding-left': '10px' } }
|
77 |
srcElement={ icon }
|
78 |
size={ 48 }
|
79 |
/>
|
assets/js/middleware/cart-update.ts
CHANGED
@@ -12,35 +12,11 @@ import { LAST_CART_UPDATE_TIMESTAMP_KEY } from '../data/cart/constants';
|
|
12 |
* Checks if this request is a POST to the wc/store/cart endpoint.
|
13 |
*/
|
14 |
const isCartUpdatePostRequest = ( options: APIFetchOptions ) => {
|
15 |
-
const url = options.url || options.path
|
16 |
-
|
17 |
-
|
18 |
-
// Return false if there is no endpoint provided, or the request is not a POST request.
|
19 |
-
if ( ! url || method !== 'POST' ) {
|
20 |
return false;
|
21 |
}
|
22 |
-
|
23 |
-
const cartRegExp = /wc\/store\/cart\//;
|
24 |
-
const batchRegExp = /wc\/store\/batch/;
|
25 |
-
|
26 |
-
const isCart = cartRegExp.exec( url ) !== null;
|
27 |
-
const isBatch = batchRegExp.exec( url ) !== null;
|
28 |
-
|
29 |
-
if ( isCart ) {
|
30 |
-
return true;
|
31 |
-
}
|
32 |
-
|
33 |
-
if ( isBatch ) {
|
34 |
-
const requests = options?.data?.requests || [];
|
35 |
-
|
36 |
-
return requests.some( ( request: { path: string } ) => {
|
37 |
-
const requestUrl = request.path || '';
|
38 |
-
|
39 |
-
return cartRegExp.exec( requestUrl ) !== null;
|
40 |
-
} );
|
41 |
-
}
|
42 |
-
|
43 |
-
return false;
|
44 |
};
|
45 |
|
46 |
/**
|
12 |
* Checks if this request is a POST to the wc/store/cart endpoint.
|
13 |
*/
|
14 |
const isCartUpdatePostRequest = ( options: APIFetchOptions ) => {
|
15 |
+
const url = options.url || options.path;
|
16 |
+
if ( ! url || ! options.method || options.method !== 'POST' ) {
|
|
|
|
|
|
|
17 |
return false;
|
18 |
}
|
19 |
+
return /wc\/store\/cart\//.exec( url ) !== null;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20 |
};
|
21 |
|
22 |
/**
|
assets/js/middleware/store-api-nonce.js
CHANGED
@@ -17,13 +17,13 @@ try {
|
|
17 |
}
|
18 |
|
19 |
/**
|
20 |
-
* Returns whether or not this is a wc/store API request.
|
21 |
*
|
22 |
* @param {Object} options Fetch options.
|
23 |
*
|
24 |
* @return {boolean} Returns true if this is a store request.
|
25 |
*/
|
26 |
-
const
|
27 |
const url = options.url || options.path;
|
28 |
if ( ! url || ! options.method || options.method === 'GET' ) {
|
29 |
return false;
|
@@ -37,14 +37,8 @@ const isStoreApiRequest = ( options ) => {
|
|
37 |
* @param {Object} headers Headers object.
|
38 |
*/
|
39 |
const setNonce = ( headers ) => {
|
40 |
-
const nonce =
|
41 |
-
|
42 |
-
? headers.get( 'X-WC-Store-API-Nonce' )
|
43 |
-
: headers[ 'X-WC-Store-API-Nonce' ];
|
44 |
-
const timestamp =
|
45 |
-
typeof headers?.get === 'function'
|
46 |
-
? headers.get( 'X-WC-Store-API-Nonce-Timestamp' )
|
47 |
-
: headers[ 'X-WC-Store-API-Nonce-Timestamp' ];
|
48 |
|
49 |
if ( nonce ) {
|
50 |
updateNonce( nonce, timestamp );
|
@@ -81,32 +75,21 @@ const updateNonce = ( nonce, timestamp ) => {
|
|
81 |
);
|
82 |
};
|
83 |
|
84 |
-
const appendNonceHeader = ( request ) => {
|
85 |
-
const headers = request.headers || {};
|
86 |
-
request.headers = {
|
87 |
-
...headers,
|
88 |
-
'X-WC-Store-API-Nonce': currentNonce,
|
89 |
-
};
|
90 |
-
return request;
|
91 |
-
};
|
92 |
-
|
93 |
/**
|
94 |
-
* Nonce middleware which
|
95 |
*
|
96 |
* @param {Object} options Fetch options.
|
97 |
* @param {Function} next The next middleware or fetchHandler to call.
|
|
|
98 |
* @return {*} The evaluated result of the remaining middleware chain.
|
99 |
*/
|
100 |
const storeNonceMiddleware = ( options, next ) => {
|
101 |
-
if (
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
appendNonceHeader
|
108 |
-
);
|
109 |
-
}
|
110 |
}
|
111 |
return next( options, next );
|
112 |
};
|
@@ -114,9 +97,6 @@ const storeNonceMiddleware = ( options, next ) => {
|
|
114 |
apiFetch.use( storeNonceMiddleware );
|
115 |
apiFetch.setNonce = setNonce;
|
116 |
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
// @ts-ignore wcBlocksMiddlewareConfig is window global cache for the initial nonce initialized from hydration.
|
121 |
-
wcBlocksMiddlewareConfig.storeApiNonceTimestamp
|
122 |
-
);
|
17 |
}
|
18 |
|
19 |
/**
|
20 |
+
* Returns whether or not this is a non GET wc/store API request.
|
21 |
*
|
22 |
* @param {Object} options Fetch options.
|
23 |
*
|
24 |
* @return {boolean} Returns true if this is a store request.
|
25 |
*/
|
26 |
+
const isStoreApiGetRequest = ( options ) => {
|
27 |
const url = options.url || options.path;
|
28 |
if ( ! url || ! options.method || options.method === 'GET' ) {
|
29 |
return false;
|
37 |
* @param {Object} headers Headers object.
|
38 |
*/
|
39 |
const setNonce = ( headers ) => {
|
40 |
+
const nonce = headers?.get( 'X-WC-Store-API-Nonce' ) || '';
|
41 |
+
const timestamp = headers?.get( 'X-WC-Store-API-Nonce-Timestamp' ) || 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
42 |
|
43 |
if ( nonce ) {
|
44 |
updateNonce( nonce, timestamp );
|
75 |
);
|
76 |
};
|
77 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
78 |
/**
|
79 |
+
* Nonce middleware which updates the nonce after a request, if given.
|
80 |
*
|
81 |
* @param {Object} options Fetch options.
|
82 |
* @param {Function} next The next middleware or fetchHandler to call.
|
83 |
+
*
|
84 |
* @return {*} The evaluated result of the remaining middleware chain.
|
85 |
*/
|
86 |
const storeNonceMiddleware = ( options, next ) => {
|
87 |
+
if ( isStoreApiGetRequest( options ) ) {
|
88 |
+
const existingHeaders = options.headers || {};
|
89 |
+
options.headers = {
|
90 |
+
...existingHeaders,
|
91 |
+
'X-WC-Store-API-Nonce': currentNonce,
|
92 |
+
};
|
|
|
|
|
|
|
93 |
}
|
94 |
return next( options, next );
|
95 |
};
|
97 |
apiFetch.use( storeNonceMiddleware );
|
98 |
apiFetch.setNonce = setNonce;
|
99 |
|
100 |
+
// @ts-ignore wcStoreApiNonce is window global cache for the initial nonce initialized from hydration.
|
101 |
+
// @ts-ignore wcStoreApiNonceTimestamp is window global cache for the initial nonce initialized from hydration.
|
102 |
+
updateNonce( wcStoreApiNonce, wcStoreApiNonceTimestamp );
|
|
|
|
|
|
assets/js/previews/cart.ts
CHANGED
@@ -2,24 +2,25 @@
|
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
-
import {
|
|
|
|
|
|
|
|
|
|
|
6 |
import { CartResponse } from '@woocommerce/types';
|
7 |
-
import { getSetting } from '@woocommerce/settings';
|
8 |
|
9 |
/**
|
10 |
* Internal dependencies
|
11 |
*/
|
12 |
import { previewShippingRates } from './shipping-rates';
|
13 |
|
14 |
-
const displayWithTax = getSetting( 'displayCartPricesIncludingTax', false );
|
15 |
// Sample data for cart block.
|
16 |
// This closely resembles the data returned from the Store API /cart endpoint.
|
17 |
// https://github.com/woocommerce/woocommerce-gutenberg-products-block/tree/trunk/src/RestApi/StoreApi#cart-api
|
18 |
export const previewCart: CartResponse = {
|
19 |
coupons: [],
|
20 |
-
shipping_rates:
|
21 |
-
? previewShippingRates
|
22 |
-
: [],
|
23 |
items: [
|
24 |
{
|
25 |
key: '1',
|
@@ -41,8 +42,8 @@ export const previewCart: CartResponse = {
|
|
41 |
images: [
|
42 |
{
|
43 |
id: 10,
|
44 |
-
src:
|
45 |
-
thumbnail:
|
46 |
srcset: '',
|
47 |
sizes: '',
|
48 |
name: '',
|
@@ -67,14 +68,14 @@ export const previewCart: CartResponse = {
|
|
67 |
currency_thousand_separator: ',',
|
68 |
currency_prefix: '$',
|
69 |
currency_suffix: '',
|
70 |
-
price:
|
71 |
-
regular_price:
|
72 |
-
sale_price:
|
73 |
raw_prices: {
|
74 |
precision: 6,
|
75 |
-
price:
|
76 |
-
regular_price:
|
77 |
-
sale_price:
|
78 |
},
|
79 |
},
|
80 |
totals: {
|
@@ -85,10 +86,10 @@ export const previewCart: CartResponse = {
|
|
85 |
currency_thousand_separator: ',',
|
86 |
currency_prefix: '$',
|
87 |
currency_suffix: '',
|
88 |
-
line_subtotal:
|
89 |
line_subtotal_tax: '0',
|
90 |
line_total: '1600',
|
91 |
-
line_total_tax:
|
92 |
},
|
93 |
extensions: {},
|
94 |
},
|
@@ -111,8 +112,8 @@ export const previewCart: CartResponse = {
|
|
111 |
images: [
|
112 |
{
|
113 |
id: 11,
|
114 |
-
src:
|
115 |
-
thumbnail:
|
116 |
srcset: '',
|
117 |
sizes: '',
|
118 |
name: '',
|
@@ -133,14 +134,14 @@ export const previewCart: CartResponse = {
|
|
133 |
currency_thousand_separator: ',',
|
134 |
currency_prefix: '$',
|
135 |
currency_suffix: '',
|
136 |
-
price:
|
137 |
-
regular_price:
|
138 |
-
sale_price:
|
139 |
raw_prices: {
|
140 |
precision: 6,
|
141 |
-
price:
|
142 |
-
regular_price:
|
143 |
-
sale_price:
|
144 |
},
|
145 |
},
|
146 |
totals: {
|
@@ -151,10 +152,10 @@ export const previewCart: CartResponse = {
|
|
151 |
currency_thousand_separator: ',',
|
152 |
currency_prefix: '$',
|
153 |
currency_suffix: '',
|
154 |
-
line_subtotal:
|
155 |
-
line_subtotal_tax:
|
156 |
line_total: '1400',
|
157 |
-
line_total_tax:
|
158 |
},
|
159 |
extensions: {},
|
160 |
},
|
@@ -163,8 +164,8 @@ export const previewCart: CartResponse = {
|
|
163 |
items_count: 3,
|
164 |
items_weight: 0,
|
165 |
needs_payment: true,
|
166 |
-
needs_shipping:
|
167 |
-
has_calculated_shipping:
|
168 |
extensions: {},
|
169 |
shipping_address: {
|
170 |
first_name: '',
|
@@ -198,7 +199,7 @@ export const previewCart: CartResponse = {
|
|
198 |
currency_thousand_separator: ',',
|
199 |
currency_prefix: '$',
|
200 |
currency_suffix: '',
|
201 |
-
total_items:
|
202 |
total_items_tax: '0',
|
203 |
total_fees: '0',
|
204 |
total_fees_tax: '0',
|
@@ -206,14 +207,8 @@ export const previewCart: CartResponse = {
|
|
206 |
total_discount_tax: '0',
|
207 |
total_shipping: '0',
|
208 |
total_shipping_tax: '0',
|
209 |
-
total_tax: '
|
210 |
total_price: '3000',
|
211 |
-
tax_lines: [
|
212 |
-
{
|
213 |
-
name: __( 'Sales tax', 'woo-gutenberg-products-block' ),
|
214 |
-
rate: '20%',
|
215 |
-
price: 600,
|
216 |
-
},
|
217 |
-
],
|
218 |
},
|
219 |
};
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
+
import {
|
6 |
+
SHIPPING_COST_REQUIRES_ADDRESS,
|
7 |
+
SHIPPING_METHODS_EXIST,
|
8 |
+
WC_BLOCKS_ASSET_URL,
|
9 |
+
SHIPPING_ENABLED,
|
10 |
+
} from '@woocommerce/block-settings';
|
11 |
import { CartResponse } from '@woocommerce/types';
|
|
|
12 |
|
13 |
/**
|
14 |
* Internal dependencies
|
15 |
*/
|
16 |
import { previewShippingRates } from './shipping-rates';
|
17 |
|
|
|
18 |
// Sample data for cart block.
|
19 |
// This closely resembles the data returned from the Store API /cart endpoint.
|
20 |
// https://github.com/woocommerce/woocommerce-gutenberg-products-block/tree/trunk/src/RestApi/StoreApi#cart-api
|
21 |
export const previewCart: CartResponse = {
|
22 |
coupons: [],
|
23 |
+
shipping_rates: SHIPPING_METHODS_EXIST ? previewShippingRates : [],
|
|
|
|
|
24 |
items: [
|
25 |
{
|
26 |
key: '1',
|
42 |
images: [
|
43 |
{
|
44 |
id: 10,
|
45 |
+
src: WC_BLOCKS_ASSET_URL + 'img/beanie.jpg',
|
46 |
+
thumbnail: WC_BLOCKS_ASSET_URL + 'img/beanie.jpg',
|
47 |
srcset: '',
|
48 |
sizes: '',
|
49 |
name: '',
|
68 |
currency_thousand_separator: ',',
|
69 |
currency_prefix: '$',
|
70 |
currency_suffix: '',
|
71 |
+
price: '800',
|
72 |
+
regular_price: '800',
|
73 |
+
sale_price: '800',
|
74 |
raw_prices: {
|
75 |
precision: 6,
|
76 |
+
price: '8000000',
|
77 |
+
regular_price: '8000000',
|
78 |
+
sale_price: '8000000',
|
79 |
},
|
80 |
},
|
81 |
totals: {
|
86 |
currency_thousand_separator: ',',
|
87 |
currency_prefix: '$',
|
88 |
currency_suffix: '',
|
89 |
+
line_subtotal: '1600',
|
90 |
line_subtotal_tax: '0',
|
91 |
line_total: '1600',
|
92 |
+
line_total_tax: '0',
|
93 |
},
|
94 |
extensions: {},
|
95 |
},
|
112 |
images: [
|
113 |
{
|
114 |
id: 11,
|
115 |
+
src: WC_BLOCKS_ASSET_URL + 'img/cap.jpg',
|
116 |
+
thumbnail: WC_BLOCKS_ASSET_URL + 'img/cap.jpg',
|
117 |
srcset: '',
|
118 |
sizes: '',
|
119 |
name: '',
|
134 |
currency_thousand_separator: ',',
|
135 |
currency_prefix: '$',
|
136 |
currency_suffix: '',
|
137 |
+
price: '1400',
|
138 |
+
regular_price: '1600',
|
139 |
+
sale_price: '1400',
|
140 |
raw_prices: {
|
141 |
precision: 6,
|
142 |
+
price: '14000000',
|
143 |
+
regular_price: '16000000',
|
144 |
+
sale_price: '14000000',
|
145 |
},
|
146 |
},
|
147 |
totals: {
|
152 |
currency_thousand_separator: ',',
|
153 |
currency_prefix: '$',
|
154 |
currency_suffix: '',
|
155 |
+
line_subtotal: '1400',
|
156 |
+
line_subtotal_tax: '0',
|
157 |
line_total: '1400',
|
158 |
+
line_total_tax: '0',
|
159 |
},
|
160 |
extensions: {},
|
161 |
},
|
164 |
items_count: 3,
|
165 |
items_weight: 0,
|
166 |
needs_payment: true,
|
167 |
+
needs_shipping: SHIPPING_ENABLED,
|
168 |
+
has_calculated_shipping: ! SHIPPING_COST_REQUIRES_ADDRESS,
|
169 |
extensions: {},
|
170 |
shipping_address: {
|
171 |
first_name: '',
|
199 |
currency_thousand_separator: ',',
|
200 |
currency_prefix: '$',
|
201 |
currency_suffix: '',
|
202 |
+
total_items: '3000',
|
203 |
total_items_tax: '0',
|
204 |
total_fees: '0',
|
205 |
total_fees_tax: '0',
|
207 |
total_discount_tax: '0',
|
208 |
total_shipping: '0',
|
209 |
total_shipping_tax: '0',
|
210 |
+
total_tax: '0',
|
211 |
total_price: '3000',
|
212 |
+
tax_lines: [],
|
|
|
|
|
|
|
|
|
|
|
|
|
213 |
},
|
214 |
};
|
assets/js/previews/categories.js
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
-
import {
|
6 |
|
7 |
export const previewCategories = [
|
8 |
{
|
@@ -21,7 +21,7 @@ export const previewCategories = [
|
|
21 |
date_created_gmt: '2019-07-15T17:05:04',
|
22 |
date_modified: '2019-07-15T17:05:04',
|
23 |
date_modified_gmt: '2019-07-15T17:05:04',
|
24 |
-
src:
|
25 |
name: '',
|
26 |
alt: '',
|
27 |
},
|
2 |
* External dependencies
|
3 |
*/
|
4 |
import { __ } from '@wordpress/i18n';
|
5 |
+
import { WC_BLOCKS_ASSET_URL } from '@woocommerce/block-settings';
|
6 |
|
7 |
export const previewCategories = [
|
8 |
{
|
21 |
date_created_gmt: '2019-07-15T17:05:04',
|
22 |
date_modified: '2019-07-15T17:05:04',
|
23 |
date_modified_gmt: '2019-07-15T17:05:04',
|
24 |
+
src: WC_BLOCKS_ASSET_URL + 'img/collection.jpg',
|
25 |
name: '',
|
26 |
alt: '',
|
27 |
},
|
assets/js/previews/grid-block.js
CHANGED
@@ -1,399 +1,16 @@
|
|
1 |
/**
|
2 |
* External dependencies
|
3 |
*/
|
|
|
|
|
4 |
export const gridBlockPreview = (
|
5 |
-
<
|
6 |
-
|
7 |
-
|
8 |
-
|
|
|
9 |
style={ {
|
10 |
width: '100%',
|
11 |
} }
|
12 |
-
>
|
13 |
-
<title>Grid Block Preview</title>
|
14 |
-
<rect
|
15 |
-
width="65.374"
|
16 |
-
height="65.374"
|
17 |
-
x=".162"
|
18 |
-
y=".779"
|
19 |
-
fill="#E1E3E6"
|
20 |
-
rx="3"
|
21 |
-
/>
|
22 |
-
<rect
|
23 |
-
width="47.266"
|
24 |
-
height="5.148"
|
25 |
-
x="9.216"
|
26 |
-
y="76.153"
|
27 |
-
fill="#E1E3E6"
|
28 |
-
rx="2.574"
|
29 |
-
/>
|
30 |
-
<rect
|
31 |
-
width="62.8"
|
32 |
-
height="15"
|
33 |
-
x="1.565"
|
34 |
-
y="101.448"
|
35 |
-
fill="#E1E3E6"
|
36 |
-
rx="5"
|
37 |
-
/>
|
38 |
-
<rect
|
39 |
-
width="65.374"
|
40 |
-
height="65.374"
|
41 |
-
x=".162"
|
42 |
-
y="136.277"
|
43 |
-
fill="#E1E3E6"
|
44 |
-
rx="3"
|
45 |
-
/>
|
46 |
-
<rect
|
47 |
-
width="47.266"
|
48 |
-
height="5.148"
|
49 |
-
x="9.216"
|
50 |
-
y="211.651"
|
51 |
-
fill="#E1E3E6"
|
52 |
-
rx="2.574"
|
53 |
-
/>
|
54 |
-
<rect
|
55 |
-
width="62.8"
|
56 |
-
height="15"
|
57 |
-
x="1.565"
|
58 |
-
y="236.946"
|
59 |
-
fill="#E1E3E6"
|
60 |
-
rx="5"
|
61 |
-
/>
|
62 |
-
<rect
|
63 |
-
width="65.374"
|
64 |
-
height="65.374"
|
65 |
-
x="82.478"
|
66 |
-
y=".779"
|
67 |
-
fill="#E1E3E6"
|
68 |
-
rx="3"
|
69 |
-
/>
|
70 |
-
<rect
|
71 |
-
width="47.266"
|
72 |
-
height="5.148"
|
73 |
-
x="91.532"
|
74 |
-
y="76.153"
|
75 |
-
fill="#E1E3E6"
|
76 |
-
rx="2.574"
|
77 |
-
/>
|
78 |
-
<rect
|
79 |
-
width="62.8"
|
80 |
-
height="15"
|
81 |
-
x="83.882"
|
82 |
-
y="101.448"
|
83 |
-
fill="#E1E3E6"
|
84 |
-
rx="5"
|
85 |
-
/>
|
86 |
-
<rect
|
87 |
-
width="65.374"
|
88 |
-
height="65.374"
|
89 |
-
x="82.478"
|
90 |
-
y="136.277"
|
91 |
-
fill="#E1E3E6"
|
92 |
-
rx="3"
|
93 |
-
/>
|
94 |
-
<rect
|
95 |
-
width="47.266"
|
96 |
-
height="5.148"
|
97 |
-
x="91.532"
|
98 |
-
y="211.651"
|
99 |
-
fill="#E1E3E6"
|
100 |
-
rx="2.574"
|
101 |
-
/>
|
102 |
-
<rect
|
103 |
-
width="62.8"
|
104 |
-
height="15"
|
105 |
-
x="83.882"
|
106 |
-
y="236.946"
|
107 |
-
fill="#E1E3E6"
|
108 |
-
rx="5"
|
109 |
-
/>
|
110 |
-
<rect
|
111 |
-
width="65.374"
|
112 |
-
height="65.374"
|
113 |
-
x="164.788"
|
114 |
-
y=".779"
|
115 |
-
fill="#E1E3E6"
|
116 |
-
rx="3"
|
117 |
-
/>
|
118 |
-
<rect
|
119 |
-
width="47.266"
|
120 |
-
height="5.148"
|
121 |
-
x="173.843"
|
122 |
-
y="76.153"
|
123 |
-
fill="#E1E3E6"
|
124 |
-
rx="2.574"
|
125 |
-
/>
|
126 |
-
<rect
|
127 |
-
width="62.8"
|
128 |
-
height="15"
|
129 |
-
x="166.192"
|
130 |
-
y="101.448"
|
131 |
-
fill="#E1E3E6"
|
132 |
-
rx="5"
|
133 |
-
/>
|
134 |
-
<rect
|
135 |
-
width="65.374"
|
136 |
-
height="65.374"
|
137 |
-
x="164.788"
|
138 |
-
y="136.277"
|
139 |
-
fill="#E1E3E6"
|
140 |
-
rx="3"
|
141 |
-
/>
|
142 |
-
<rect
|
143 |
-
width="47.266"
|
144 |
-
height="5.148"
|
145 |
-
x="173.843"
|
146 |
-
y="211.651"
|
147 |
-
fill="#E1E3E6"
|
148 |
-
rx="2.574"
|
149 |
-
/>
|
150 |
-
<rect
|
151 |
-
width="62.8"
|
152 |
-
height="15"
|
153 |
-
x="166.192"
|
154 |
-
y="236.946"
|
155 |
-
fill="#E1E3E6"
|
156 |
-
rx="5"
|
157 |
-
/>
|
158 |
-
<rect
|
159 |
-
width="6.177"
|
160 |
-
height="6.177"
|
161 |
-
x="13.283"
|
162 |
-
y="86.301"
|
163 |
-
fill="#E1E3E6"
|
164 |
-
rx="3"
|
165 |
-
/>
|
166 |
-
<rect
|
167 |
-
width="6.177"
|
168 |
-
height="6.177"
|
169 |
-
x="21.498"
|
170 |
-
y="86.301"
|
171 |
-
fill="#E1E3E6"
|
172 |
-
rx="3"
|
173 |
-
/>
|
174 |
-
<rect
|
175 |
-
width="6.177"
|
176 |
-
height="6.177"
|
177 |
-
x="29.713"
|
178 |
-
y="86.301"
|
179 |
-
fill="#E1E3E6"
|
180 |
-
rx="3"
|
181 |
-
/>
|
182 |
-
<rect
|
183 |
-
width="6.177"
|
184 |
-
height="6.177"
|
185 |
-
x="37.927"
|
186 |
-
y="86.301"
|
187 |
-
fill="#E1E3E6"
|
188 |
-
rx="3"
|
189 |
-
/>
|
190 |
-
<rect
|
191 |
-
width="6.177"
|
192 |
-
height="6.177"
|
193 |
-
x="46.238"
|
194 |
-
y="86.301"
|
195 |
-
fill="#E1E3E6"
|
196 |
-
rx="3"
|
197 |
-
/>
|
198 |
-
<rect
|
199 |
-
width="6.177"
|
200 |
-
height="6.177"
|
201 |
-
x="95.599"
|
202 |
-
y="86.301"
|
203 |
-
fill="#E1E3E6"
|
204 |
-
rx="3"
|
205 |
-
/>
|
206 |
-
<rect
|
207 |
-
width="6.177"
|
208 |
-
height="6.177"
|
209 |
-
x="103.814"
|
210 |
-
y="86.301"
|
211 |
-
fill="#E1E3E6"
|
212 |
-
rx="3"
|
213 |
-
/>
|
214 |
-
<rect
|
215 |
-
width="6.177"
|
216 |
-
height="6.177"
|
217 |
-
x="112.029"
|
218 |
-
y="86.301"
|
219 |
-
fill="#E1E3E6"
|
220 |
-
rx="3"
|
221 |
-
/>
|
222 |
-
<rect
|
223 |
-
width="6.177"
|
224 |
-
height="6.177"
|
225 |
-
x="120.243"
|
226 |
-
y="86.301"
|
227 |
-
fill="#E1E3E6"
|
228 |
-
rx="3"
|
229 |
-
/>
|
230 |
-
<rect
|
231 |
-
width="6.177"
|
232 |
-
height="6.177"
|
233 |
-
x="128.554"
|
234 |
-
y="86.301"
|
235 |
-
fill="#E1E3E6"
|
236 |
-
rx="3"
|
237 |
-
/>
|
238 |
-
<rect
|
239 |
-
width="6.177"
|
240 |
-
height="6.177"
|
241 |
-
x="177.909"
|
242 |
-
y="86.301"
|
243 |
-
fill="#E1E3E6"
|
244 |
-
rx="3"
|
245 |
-
/>
|
246 |
-
<rect
|
247 |
-
width="6.177"
|
248 |
-
height="6.177"
|
249 |
-
x="186.124"
|
250 |
-
y="86.301"
|
251 |
-
fill="#E1E3E6"
|
252 |
-
rx="3"
|
253 |
-
/>
|
254 |
-
<rect
|
255 |
-
width="6.177"
|
256 |
-
height="6.177"
|
257 |
-
x="194.339"
|
258 |
-
y="86.301"
|
259 |
-
fill="#E1E3E6"
|
260 |
-
rx="3"
|
261 |
-
/>
|
262 |
-
<rect
|
263 |
-
width="6.177"
|
264 |
-
height="6.177"
|
265 |
-
x="202.553"
|
266 |
-
y="86.301"
|
267 |
-
fill="#E1E3E6"
|
268 |
-
rx="3"
|
269 |
-
/>
|
270 |
-
<rect
|
271 |
-
width="6.177"
|
272 |
-
height="6.177"
|
273 |
-
x="210.864"
|
274 |
-
y="86.301"
|
275 |
-
fill="#E1E3E6"
|
276 |
-
rx="3"
|
277 |
-
/>
|
278 |
-
<rect
|
279 |
-
width="6.177"
|
280 |
-
height="6.177"
|
281 |
-
x="13.283"
|
282 |
-
y="221.798"
|
283 |
-
|
1 |
/**
|
2 |
* External dependencies
|
3 |
*/
|
4 |
+
import { WC_BLOCKS_ASSET_URL } from '@woocommerce/block-settings';
|
5 |
+
|
6 |
export const gridBlockPreview = (
|
7 |
+
<img
|
8 |
+
src={ WC_BLOCKS_ASSET_URL + 'img/grid.svg' }
|
9 |
+
alt="Grid Preview"
|
10 |
+
width="230"
|
11 |
+
height="250"
|
12 |
style={ {
|
13 |
width: '100%',
|
14 |
} }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|